ZGlmZiAtLWdpdCBhL0JVSUxESU5HLnR4dCBiL0JVSUxESU5HLnR4dAppbmRleCA5N2JkNTIxLi4xNjlhMWJlIDEwMDY0NAotLS0gYS9CVUlMRElORy50eHQKKysrIGIvQlVJTERJTkcudHh0CkBAIC0xLDUgKzEsNSBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiogICAgIEJ1aWxkaW5nIG9uIFVuaXggUGxhdGZvcm1zIChpbmNsdWRpbmcgQ3lnd2luKQorKiogICAgIEJ1aWxkaW5nIG9uIFVuKnggUGxhdGZvcm1zIChpbmNsdWRpbmcgQ3lnd2luIGFuZCBPUyBYKQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAKQEAgLTEwLDYgKzEwLDkgQEAKIC0tIGF1dG9jb25mIDIuNTYgb3IgbGF0ZXIKIC0tIGF1dG9tYWtlIDEuNyBvciBsYXRlcgogLS0gbGlidG9vbCAxLjQgb3IgbGF0ZXIKKyAgICogSWYgdXNpbmcgWGNvZGUgNC4zIG9yIGxhdGVyIG9uIE9TIFgsIGF1dG9jb25mIGFuZCBhdXRvbWFrZSBhcmUgbm8gbG9uZ2VyCisgICAgIHByb3ZpZGVkLiAgVGhlIGVhc2llc3Qgd2F5IHRvIG9idGFpbiB0aGVtIGlzIGZyb20gTWFjUG9ydHMKKyAgICAgKGh0dHA6Ly93d3cubWFjcG9ydHMub3JnLykuCiAKIC0tIE5BU00gb3IgWUFTTSAoaWYgYnVpbGRpbmcgeDg2IG9yIHg4Ni02NCBTSU1EIGV4dGVuc2lvbnMpCiAgICAqIE5BU00gMC45OCwgb3IgMi4wMSBvciBsYXRlciBpcyByZXF1aXJlZCBmb3IgYW4geDg2IGJ1aWxkICgwLjk5IGFuZCAyLjAwIGRvCkBAIC0zNiwxNCArMzksMjYgQEAKICAgIE5PVEU6IHRoZSBOQVNNIGJ1aWxkIHdpbGwgZmFpbCBpZiB0ZXhpbmZvIGlzIG5vdCBpbnN0YWxsZWQuCiAKIC0tIEdDQyB2NC4xIG9yIGxhdGVyIHJlY29tbWVuZGVkIGZvciBiZXN0IHBlcmZvcm1hbmNlCisgICAqIEJlZ2lubmluZyB3aXRoIFhjb2RlIDQsIEFwcGxlIHN0b3BwZWQgZGlzdHJpYnV0aW5nIEdDQyBhbmQgc3dpdGNoZWQgdG8KKyAgICAgdGhlIExMVk0gY29tcGlsZXIuICBYY29kZSB2NC4wIHRocm91Z2ggdjQuNiBwcm92aWRlcyBhIEdDQyBmcm9udCBlbmQKKyAgICAgY2FsbGVkIExMVk0tR0NDLiAgVW5mb3J0dW5hdGVseSwgYXMgb2YgdGhpcyB3cml0aW5nLCBuZWl0aGVyIExMVk0tR0NDIG5vcgorICAgICB0aGUgTExWTSAoY2xhbmcpIGNvbXBpbGVyIHByb2R1Y2VzIG9wdGltYWwgcGVyZm9ybWFuY2Ugd2l0aCBsaWJqcGVnLXR1cmJvLgorICAgICBCdWlsZGluZyBsaWJqcGVnLXR1cmJvIHdpdGggTExWTS1HQ0MgdjQuMiByZXN1bHRzIGluIGEgMTAlIHBlcmZvcm1hbmNlCisgICAgIGRlZ3JhZGF0aW9uIHdoZW4gY29tcHJlc3NpbmcgdXNpbmcgNjQtYml0IGNvZGUsIHJlbGF0aXZlIHRvIGJ1aWxkaW5nCisgICAgIGxpYmpwZWctdHVyYm8gd2l0aCBHQ0MgdjQuMi4gIEJ1aWxkaW5nIGxpYmpwZWctdHVyYm8gd2l0aCBMTFZNIChjbGFuZykKKyAgICAgcmVzdWx0cyBpbiBhIDIwJSBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiB3aGVuIGNvbXByZXNzaW5nIHVzaW5nIDY0LWJpdAorICAgICBjb2RlLCByZWxhdGl2ZSB0byBidWlsZGluZyBsaWJqcGVnLXR1cmJvIHdpdGggR0NDIHY0LjIuICBJZiB5b3UgYXJlCisgICAgIHJ1bm5pbmcgU25vdyBMZW9wYXJkIG9yIGVhcmxpZXIsIGl0IGlzIHN1Z2dlc3RlZCB0aGF0IHlvdSBjb250aW51ZSB0byB1c2UKKyAgICAgWGNvZGUgdjMuMi42LCB3aGljaCBwcm92aWRlcyBHQ0MgdjQuMi4gIElmIHlvdSBhcmUgdXNpbmcgTGlvbiBvciBsYXRlciwgaXQKKyAgICAgaXMgc3VnZ2VzdGVkIHRoYXQgeW91IGluc3RhbGwgQXBwbGUgR0NDIHY0LjIgdGhyb3VnaCBNYWNQb3J0cy4KIAotLS0gSWYgYnVpbGRpbmcgdGhlIFR1cmJvSlBFRy9PU1MgSmF2YSB3cmFwcGVyLCBKREsgb3IgT3BlbkpESyAxLjUgb3IgbGF0ZXIgaXMKKy0tIElmIGJ1aWxkaW5nIHRoZSBUdXJib0pQRUcgSmF2YSB3cmFwcGVyLCBKREsgb3IgT3BlbkpESyAxLjUgb3IgbGF0ZXIgaXMKICAgIHJlcXVpcmVkLiAgU29tZSBzeXN0ZW1zLCBzdWNoIGFzIE9TIFggMTAuNCwgU29sYXJpcyAxMCBhbmQgbGF0ZXIsIGFuZCBSZWQKICAgIEhhdCBFbnRlcnByaXNlIExpbnV4IDUgYW5kIGxhdGVyLCBoYXZlIHRoaXMgcHJlLWluc3RhbGxlZC4gIE9uIE9TIFggMTAuNSBhbmQKICAgIGxhdGVyLCBpdCB3aWxsIGJlIG5lY2Vzc2FyeSB0byBpbnN0YWxsIHRoZSBKYXZhIERldmVsb3BlciBQYWNrYWdlLCB3aGljaCBjYW4KLSAgIGJlIGRvd25sb2FkZWQgZnJvbSBodHRwOi8vY29ubmVjdC5hcHBsZS5jb20uICBGb3Igc3lzdGVtcyB0aGF0IGRvIG5vdCBoYXZlIGEKLSAgIEpESyBpbnN0YWxsZWQsIHlvdSBjYW4gb2J0YWluIHRoZSBPcmFjbGUgSmF2YSBEZXZlbG9wbWVudCBLaXQgZnJvbQotICAgaHR0cDovL3d3dy5qYXZhLmNvbS4KKyAgIGJlIGRvd25sb2FkZWQgZnJvbSBodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb3dubG9hZHMgKEFwcGxlIElEIHJlcXVpcmVkLikKKyAgIEZvciBzeXN0ZW1zIHRoYXQgZG8gbm90IGhhdmUgYSBKREsgaW5zdGFsbGVkLCB5b3UgY2FuIG9idGFpbiB0aGUgT3JhY2xlIEphdmEKKyAgIERldmVsb3BtZW50IEtpdCBmcm9tIGh0dHA6Ly93d3cuamF2YS5jb20uCiAKIAogPT09PT09PT09PT09PT09PT09CkBAIC02NCw5ICs3OSw5IEBACiBCdWlsZGluZyBsaWJqcGVnLXR1cmJvCiA9PT09PT09PT09PT09PT09PT09PT09CiAKLVRoZSBmb2xsb3dpbmcgcHJvY2VkdXJlIHdpbGwgYnVpbGQgbGlianBlZy10dXJibyBvbiBMaW51eCwgRnJlZUJTRCwgMzItYml0Ci1PUyBYLCBDeWd3aW4sIGFuZCBTb2xhcmlzL3g4NiBzeXN0ZW1zIChvbiBTb2xhcmlzLCB0aGlzIGdlbmVyYXRlcyBhIDMyLWJpdAotbGlicmFyeS4gIFNlZSBiZWxvdyBmb3IgNjQtYml0IGJ1aWxkIGluc3RydWN0aW9ucy4pCitUaGUgZm9sbG93aW5nIHByb2NlZHVyZSB3aWxsIGJ1aWxkIGxpYmpwZWctdHVyYm8gb24gTGludXgsIEZyZWVCU0QsIEN5Z3dpbiwgYW5kCitTb2xhcmlzL3g4NiBzeXN0ZW1zIChvbiBTb2xhcmlzLCB0aGlzIGdlbmVyYXRlcyBhIDMyLWJpdCBsaWJyYXJ5LiAgU2VlIGJlbG93Citmb3IgNjQtYml0IGJ1aWxkIGluc3RydWN0aW9ucy4pCiAKICAgY2Qge3NvdXJjZV9kaXJlY3Rvcnl9CiAgIGF1dG9yZWNvbmYgLWZpdgpAQCAtNzQsNDAgKzg5LDQ0IEBACiAgIHNoIHtzb3VyY2VfZGlyZWN0b3J5fS9jb25maWd1cmUgW2FkZGl0aW9uYWwgY29uZmlndXJlIGZsYWdzXQogICBtYWtlCiAKLU5PVEU6IFJ1bm5pbmcgYXV0b3JlY29uZiBpbiB0aGUgc291cmNlIGRpcmVjdG9yeSBpcyBvbmx5IG5lY2Vzc2FyeSBpZiBidWlsZGluZwotbGlianBlZy10dXJibyBmcm9tIHRoZSBTVk4gcmVwb3NpdG9yeS4KK05PVEU6IFJ1bm5pbmcgYXV0b3JlY29uZiBpbiB0aGUgc291cmNlIGRpcmVjdG9yeSBpcyB1c3VhbGx5IG9ubHkgbmVjZXNzYXJ5IGlmCitidWlsZGluZyBsaWJqcGVnLXR1cmJvIGZyb20gdGhlIFNWTiByZXBvc2l0b3J5LgogCiBUaGlzIHdpbGwgZ2VuZXJhdGUgdGhlIGZvbGxvd2luZyBmaWxlcyB1bmRlciAubGlicy8KIAogICBsaWJqcGVnLmEKLSAgICAgIFN0YXRpYyBsaW5rIGxpYnJhcnkgZm9yIGxpYmpwZWctdHVyYm8KKyAgICAgIFN0YXRpYyBsaW5rIGxpYnJhcnkgZm9yIHRoZSBsaWJqcGVnIEFQSQogCi0gIGxpYmpwZWcuc28ue3ZlcnNpb259IChMaW51eCwgU29sYXJpcykKKyAgbGlianBlZy5zby57dmVyc2lvbn0gKExpbnV4LCBVbml4KQogICBsaWJqcGVnLnt2ZXJzaW9ufS5keWxpYiAoT1MgWCkKICAgY3lnanBlZy17dmVyc2lvbn0uZGxsIChDeWd3aW4pCi0gICAgICBTaGFyZWQgbGlicmFyeSBmb3IgbGlianBlZy10dXJibworICAgICAgU2hhcmVkIGxpYnJhcnkgZm9yIHRoZSBsaWJqcGVnIEFQSQogCi0gIGxpYmpwZWcuc28gKExpbnV4LCBTb2xhcmlzKQorICBCeSBkZWZhdWx0LCB7dmVyc2lvbn0gaXMgNjIuMS4wLCA3LjEuMCwgb3IgOC4wLjIsIGRlcGVuZGluZyBvbiB3aGV0aGVyCisgIGxpYmpwZWcgdjZiIChkZWZhdWx0KSwgdjcsIG9yIHY4IGVtdWxhdGlvbiBpcyBlbmFibGVkLiAgSWYgdXNpbmcgQ3lnd2luLAorICB7dmVyc2lvbn0gaXMgNjIsIDcsIG9yIDguCisKKyAgbGlianBlZy5zbyAoTGludXgsIFVuaXgpCiAgIGxpYmpwZWcuZHlsaWIgKE9TIFgpCisgICAgICBEZXZlbG9wbWVudCBzeW1saW5rIGZvciB0aGUgbGlianBlZyBBUEkKKwogICBsaWJqcGVnLmRsbC5hIChDeWd3aW4pCi0gICAgICBEZXZlbG9wbWVudCBzdHViIGZvciBsaWJqcGVnLXR1cmJvIHNoYXJlZCBsaWJyYXJ5CisgICAgICBJbXBvcnQgbGlicmFyeSBmb3IgdGhlIGxpYmpwZWcgQVBJCiAKICAgbGlidHVyYm9qcGVnLmEKLSAgICAgIFN0YXRpYyBsaW5rIGxpYnJhcnkgZm9yIFR1cmJvSlBFRy9PU1MKKyAgICAgIFN0YXRpYyBsaW5rIGxpYnJhcnkgZm9yIHRoZSBUdXJib0pQRUcgQVBJCiAKLSAgbGlidHVyYm9qcGVnLnNvIChMaW51eCwgU29sYXJpcykKKyAgbGlidHVyYm9qcGVnLnNvLjAuMC4wIChMaW51eCwgVW5peCkKKyAgbGlidHVyYm9qcGVnLjAuMC4wLmR5bGliIChPUyBYKQorICBjeWd0dXJib2pwZWctMC5kbGwgKEN5Z3dpbikKKyAgICAgIFNoYXJlZCBsaWJyYXJ5IGZvciB0aGUgVHVyYm9KUEVHIEFQSQorCisgIGxpYnR1cmJvanBlZy5zbyAoTGludXgsIFVuaXgpCiAgIGxpYnR1cmJvanBlZy5keWxpYiAoT1MgWCkKLSAgICAgIFNoYXJlZCBsaWJyYXJ5IGFuZCBkZXZlbG9wbWVudCBzdHViIGZvciBUdXJib0pQRUcvT1NTCi0KLSAgY3lndHVyYm9qcGVnLmRsbCAoQ3lnd2luKQotICAgICAgU2hhcmVkIGxpYnJhcnkgZm9yIFR1cmJvSlBFRy9PU1MKKyAgICAgIERldmVsb3BtZW50IHN5bWxpbmsgZm9yIHRoZSBUdXJib0pQRUcgQVBJCiAKICAgbGlidHVyYm9qcGVnLmRsbC5hIChDeWd3aW4pCi0gICAgICBEZXZlbG9wbWVudCBzdHViIGZvciBUdXJib0pQRUcvT1NTIHNoYXJlZCBsaWJyYXJ5Ci0KLXt2ZXJzaW9ufSBpcyA2Mi4wLjAsIDcuMC4wLCBvciA4LjAuMiwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgbGlianBlZyB2NmIKLShkZWZhdWx0KSwgdjcsIG9yIHY4IGVtdWxhdGlvbiBpcyBlbmFibGVkLiAgSWYgdXNpbmcgQ3lnd2luLCB7dmVyc2lvbn0gaXMKLTYyLCA3LCBvciA4LgorICAgICAgSW1wb3J0IGxpYnJhcnkgZm9yIHRoZSBUdXJib0pQRUcgQVBJCiAKIAogbGlianBlZyB2NyBvciB2OCBBUEkvQUJJIEVtdWxhdGlvbgpAQCAtMTIwLDYgKzEzOSwxNiBAQAogb24gbGlianBlZyB2NyBhbmQgdjggZW11bGF0aW9uLgogCiAKK0luLU1lbW9yeSBTb3VyY2UvRGVzdGluYXRpb24gTWFuYWdlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hlbiB1c2luZyBsaWJqcGVnIHY2YiBvciB2NyBBUEkvQUJJIGVtdWxhdGlvbiwgYWRkIC0td2l0aG91dC1tZW0tc3JjZHN0IHRvIHRoZQorY29uZmlndXJlIGNvbW1hbmQgbGluZSB0byBidWlsZCBhIHZlcnNpb24gb2YgbGlianBlZy10dXJibyB0aGF0IGxhY2tzIHRoZQoranBlZ19tZW1fc3JjKCkgYW5kIGpwZWdfbWVtX2Rlc3QoKSBmdW5jdGlvbnMuICBUaGVzZSBmdW5jdGlvbnMgd2VyZSBub3QgcGFydCBvZgordGhlIG9yaWdpbmFsIGxpYmpwZWcgdjZiIGFuZCB2NyBBUElzLCBzbyByZW1vdmluZyB0aGVtIGVuc3VyZXMgc3RyaWN0Citjb25mb3JtYW5jZSB3aXRoIHRob3NlIEFQSXMuICBTZWUgUkVBRE1FLXR1cmJvLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworCiBBcml0aG1ldGljIENvZGluZyBTdXBwb3J0CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTEzMiwxMyArMTYxLDEyIEBACiBkaXNhYmxlIGVuY29kaW5nIG9yIGRlY29kaW5nIChyZXNwZWN0aXZlbHkuKQogCiAKLVR1cmJvSlBFRy9PU1MgSmF2YSBXcmFwcGVyCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVHVyYm9KUEVHIEphdmEgV3JhcHBlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogQWRkIC0td2l0aC1qYXZhIHRvIHRoZSBjb25maWd1cmUgY29tbWFuZCBsaW5lIHRvIGluY29ycG9yYXRlIGFuIG9wdGlvbmFsIEphdmEKLU5hdGl2ZSBJbnRlcmZhY2Ugd3JhcHBlciBpbnRvIHRoZSBUdXJib0pQRUcvT1NTIGR5bmFtaWMgbGlicmFyeSBhbmQgYnVpbGQgdGhlCi1KYXZhIGZyb250LWVuZCBjbGFzc2VzIHRvIHN1cHBvcnQgaXQuICBUaGlzIGFsbG93cyB0aGUgVHVyYm9KUEVHL09TUyBkeW5hbWljCi1saWJyYXJ5IHRvIGJlIHVzZWQgZGlyZWN0bHkgZnJvbSBKYXZhIGFwcGxpY2F0aW9ucy4gIFNlZSBqYXZhL1JFQURNRSBmb3IgbW9yZQotZGV0YWlscy4KK05hdGl2ZSBJbnRlcmZhY2Ugd3JhcHBlciBpbnRvIHRoZSBUdXJib0pQRUcgc2hhcmVkIGxpYnJhcnkgYW5kIGJ1aWxkIHRoZSBKYXZhCitmcm9udC1lbmQgY2xhc3NlcyB0byBzdXBwb3J0IGl0LiAgVGhpcyBhbGxvd3MgdGhlIFR1cmJvSlBFRyBzaGFyZWQgbGlicmFyeSB0bworYmUgdXNlZCBkaXJlY3RseSBmcm9tIEphdmEgYXBwbGljYXRpb25zLiAgU2VlIGphdmEvUkVBRE1FIGZvciBtb3JlIGRldGFpbHMuCiAKIFlvdSBjYW4gc2V0IHRoZSBKQVZBQywgSkFSLCBhbmQgSkFWQSBjb25maWd1cmUgdmFyaWFibGVzIHRvIHNwZWNpZnkKIGFsdGVybmF0ZSBjb21tYW5kcyBmb3IgamF2YWMsIGphciwgYW5kIGphdmEgKHJlc3BlY3RpdmVseS4pICBZb3UgY2FuIGFsc28KQEAgLTE2NCwxMyArMTkyLDE0IEBACiB3aWxsIGluc3RhbGwgdGhlIGhlYWRlciBmaWxlcyBpbiAvdXNyL2xvY2FsL2luY2x1ZGUgYW5kIHRoZSBsaWJyYXJ5IGZpbGVzIGluCiAvdXNyL2xvY2FsL2xpYjY0LiAgSWYgJ3ByZWZpeCcgYW5kICdsaWJkaXInIGFyZSBub3Qgc3BlY2lmaWVkLCB0aGVuIHRoZSBkZWZhdWx0CiBpcyB0byBpbnN0YWxsIHRoZSBoZWFkZXIgZmlsZXMgaW4gL29wdC9saWJqcGVnLXR1cmJvL2luY2x1ZGUgYW5kIHRoZSBsaWJyYXJ5Ci1maWxlcyBpbiAvb3B0L2xpYmpwZWctdHVyYm8vbGliLgorZmlsZXMgaW4gL29wdC9saWJqcGVnLXR1cmJvL2xpYjMyICgzMi1iaXQpIG9yIC9vcHQvbGlianBlZy10dXJiby9saWI2NAorKDY0LWJpdC4pCiAKIE5PVEU6IFlvdSBjYW4gc3BlY2lmeSBhIHByZWZpeCBvZiAvdXNyIGFuZCBhIGxpYmRpciBvZiwgZm9yIGluc3RhbmNlLAogL3Vzci9saWI2NCB0byBvdmVyd3JpdGUgdGhlIHN5c3RlbSdzIHZlcnNpb24gb2YgbGlianBlZy4gIElmIHlvdSBkbyB0aGlzLAogaG93ZXZlciwgdGhlbiBiZSBzdXJlIHRvIEJBQ0sgVVAgWU9VUiBTWVNURU0nUyBJTlNUQUxMQVRJT04gT0YgTElCSlBFRyBiZWZvcmUKIG92ZXJ3cml0aW5nIGl0LiAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgaW5zdGVhZCBpbnN0YWxsIGxpYmpwZWctdHVyYm8gaW50bwotYSBub24tc3lzdGVtIGRpcmVjdG9yeSBhbmQgbWFuaXB1bGF0ZSB0aGUgTERfTElCUkFSWV9QQVRIIG9yIGNyZWF0ZSBzeW0gbGlua3MKK2Egbm9uLXN5c3RlbSBkaXJlY3RvcnkgYW5kIG1hbmlwdWxhdGUgdGhlIExEX0xJQlJBUllfUEFUSCBvciBjcmVhdGUgc3ltbGlua3MKIHRvIGZvcmNlIGFwcGxpY2F0aW9ucyB0byB1c2UgbGlianBlZy10dXJibyBpbnN0ZWFkIG9mIGxpYmpwZWcuICBTZWUKIFJFQURNRS10dXJiby50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAKQEAgLTE4MCw4ICsyMDksOCBAQAogPT09PT09PT09PT09PQogCiAKLTMyLWJpdCBMaWJyYXJ5IEJ1aWxkIG9uIDY0LWJpdCBMaW51eAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiszMi1iaXQgQnVpbGQgb24gNjQtYml0IExpbnV4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEFkZAogCkBAIC0xOTAsOCArMjE5LDggQEAKIHRvIHRoZSBjb25maWd1cmUgY29tbWFuZCBsaW5lLgogCiAKLTY0LWJpdCBMaWJyYXJ5IEJ1aWxkIG9uIDY0LWJpdCBPUyBYCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorNjQtYml0IEJ1aWxkIG9uIDY0LWJpdCBPUyBYCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogQWRkCiAKQEAgLTIwMSw4ICsyMzAsOCBAQAogaW5zdGFsbGVkLgogCiAKLTMyLWJpdCBMaWJyYXJ5IEJ1aWxkIG9uIDY0LWJpdCBPUyBYCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMzItYml0IEJ1aWxkIG9uIDY0LWJpdCBPUyBYCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogQWRkCiAKQEAgLTIxMSw4ICsyNDAsOCBAQAogdG8gdGhlIGNvbmZpZ3VyZSBjb21tYW5kIGxpbmUuCiAKIAotNjQtYml0IEJhY2t3YXJkLUNvbXBhdGlibGUgTGlicmFyeSBCdWlsZCBvbiA2NC1iaXQgT1MgWAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorNjQtYml0IEJhY2t3YXJkLUNvbXBhdGlibGUgQnVpbGQgb24gNjQtYml0IE9TIFgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEFkZAogCkBAIC0yMjYsOCArMjU1LDggQEAKIE1hY1BvcnRzLCBtdXN0IGJlIGluc3RhbGxlZC4KIAogCi0zMi1iaXQgQmFja3dhcmQtQ29tcGF0aWJsZSBMaWJyYXJ5IEJ1aWxkIG9uIE9TIFgKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMzItYml0IEJhY2t3YXJkLUNvbXBhdGlibGUgQnVpbGQgb24gT1MgWAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBBZGQKIApAQCAtMjUwLDggKzI3OSw4IEBACiB0byB0aGUgY29uZmlndXJlIGNvbW1hbmQgbGluZS4KIAogCi0zMi1iaXQgTGlicmFyeSBCdWlsZCBvbiA2NC1iaXQgRnJlZUJTRAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzMyLWJpdCBCdWlsZCBvbiA2NC1iaXQgRnJlZUJTRAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEFkZAogCkBAIC0yOTMsMzQgKzMyMiw1NyBAQAogSlBFRyBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIGJ5IGFwcHJveGltYXRlbHkgMi00eCBvbiBBUk12NyBhbmQgbGF0ZXIKIHBsYXRmb3Jtcy4gIElmIGxpYmpwZWctdHVyYm8gaXMgY29uZmlndXJlZCBvbiBhbiBBUk0gTGludXggcGxhdGZvcm0sIHRoZW4gdGhlCiBidWlsZCBzeXN0ZW0gd2lsbCBhdXRvbWF0aWNhbGx5IGluY2x1ZGUgdGhlIE5FT04gU0lNRCByb3V0aW5lcywgaWYgdGhleSBhcmUKLXN1cHBvcnRlZC4KK3N1cHBvcnRlZC4gIEJ1aWxkIGluc3RydWN0aW9ucyBmb3Igb3RoZXIgQVJNLWJhc2VkIHBsYXRmb3JtcyBmb2xsb3cuCiAKIAogQnVpbGRpbmcgbGlianBlZy10dXJibyBmb3IgaU9TCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotaU9TIHBsYXRmb3Jtcywgc3VjaCBhcyB0aGUgaVBob25lIGFuZCBpUGFkLCBhbHNvIHVzZSBBUk0gcHJvY2Vzc29ycywgc29tZSBvZgotd2hpY2ggc3VwcG9ydCBORU9OIGluc3RydWN0aW9ucy4gIEFkZGl0aW9uYWwgc3RlcHMgYXJlIHJlcXVpcmVkIHRvIGJ1aWxkCi1saWJqcGVnLXR1cmJvIGZvciB0aGVzZSBwbGF0Zm9ybXMuICBUaGUgc3RlcHMgYmVsb3cgYXNzdW1lIGlPUyBTREsgdjQuMy4gIElmCi15b3UgYXJlIHVzaW5nIGEgZGlmZmVyZW50IFNESyB2ZXJzaW9uLCB0aGVuIHlvdSB3aWxsIG5lZWQgdG8gbW9kaWZ5IHRoZQotZXhhbXBsZXMgYWNjb3JkaW5nbHkuCitpT1MgcGxhdGZvcm1zLCBzdWNoIGFzIHRoZSBpUGhvbmUgYW5kIGlQYWQsIHVzZSBBUk0gcHJvY2Vzc29ycywgc29tZSBvZiB3aGljaAorc3VwcG9ydCBORU9OIGluc3RydWN0aW9ucy4gIEFkZGl0aW9uYWwgc3RlcHMgYXJlIHJlcXVpcmVkIGluIG9yZGVyIHRvIGJ1aWxkCitsaWJqcGVnLXR1cmJvIGZvciB0aGVzZSBwbGF0Zm9ybXMuCiAKIEFkZGl0aW9uYWwgYnVpbGQgcmVxdWlyZW1lbnRzOgogCi0gIGdhcy1wcmVwcm9jZXNzb3IucGwgKGh0dHBzOi8vZ2l0aHViLmNvbS95dXZpL2dhcy1wcmVwcm9jZXNzb3IpIHNob3VsZCBiZQotICBpbnN0YWxsZWQgaW4geW91ciBQQVRILgorICBnYXMtcHJlcHJvY2Vzc29yLnBsCisgIChodHRwczovL3NvdXJjZWZvcmdlLm5ldC9wL2xpYmpwZWctdHVyYm8vY29kZS9IRUFEL3RyZWUvZ2FzLXByZXByb2Nlc3NvcikKKyAgc2hvdWxkIGJlIGluc3RhbGxlZCBpbiB5b3VyIFBBVEguCiAKIFNldCB0aGUgZm9sbG93aW5nIHNoZWxsIHZhcmlhYmxlcyBmb3Igc2ltcGxpY2l0eToKIAotICBJT1NfUExBVEZPUk1ESVI9Ii9EZXZlbG9wZXIvUGxhdGZvcm1zL2lQaG9uZU9TLnBsYXRmb3JtIgotICBJT1NfU1lTUk9PVD0iJElPU19QTEFURk9STURJUi9EZXZlbG9wZXIvU0RLcy9pUGhvbmVPUzQuMy5zZGsiCi0gIElPU19HQ0M9IiRJT1NfUExBVEZPUk1ESVIvRGV2ZWxvcGVyL3Vzci9iaW4vYXJtLWFwcGxlLWRhcndpbjEwLWxsdm0tZ2NjLTQuMiIKKyAgWGNvZGUgNC4yIGFuZCBlYXJsaWVyOgorICBJT1NfUExBVEZPUk1ESVI9L0RldmVsb3Blci9QbGF0Zm9ybXMvaVBob25lT1MucGxhdGZvcm0KKyAgWGNvZGUgNC4zIGFuZCBsYXRlcjoKKyAgSU9TX1BMQVRGT1JNRElSPS9BcHBsaWNhdGlvbnMvWGNvZGUuYXBwL0NvbnRlbnRzL0RldmVsb3Blci9QbGF0Zm9ybXMvaVBob25lT1MucGxhdGZvcm0KKworICBJT1NfU1lTUk9PVD0kSU9TX1BMQVRGT1JNRElSL0RldmVsb3Blci9TREtzL2lQaG9uZU9TKi5zZGsKKworICBYY29kZSA0LjYueCBhbmQgZWFybGllcjoKKyAgSU9TX0dDQz0kSU9TX1BMQVRGT1JNRElSL0RldmVsb3Blci91c3IvYmluL2FybS1hcHBsZS1kYXJ3aW4xMC1sbHZtLWdjYy00LjIKKyAgWGNvZGUgNS4wLnggYW5kIGxhdGVyOgorICBJT1NfR0NDPS9BcHBsaWNhdGlvbnMvWGNvZGUuYXBwL0NvbnRlbnRzL0RldmVsb3Blci9Ub29sY2hhaW5zL1hjb2RlRGVmYXVsdC54Y3Rvb2xjaGFpbi91c3IvYmluL2NsYW5nCisKKyAgWGNvZGUgNS4xLnggLyBpT1MgNy4wIFNESzoKKyAgSU9TX1BMQVRGT1JNRElSPS9BcHBsaWNhdGlvbnMvWGNvZGUuYXBwL0NvbnRlbnRzL0RldmVsb3Blci9QbGF0Zm9ybXMvaVBob25lT1MucGxhdGZvcm0KKyAgSU9TX1NZU1JPT1Q9JElPU19QTEFURk9STURJUi9EZXZlbG9wZXIvU0RLcy9pUGhvbmVPUzcuMS5zZGsKKyAgSU9TX0dDQz0vQXBwbGljYXRpb25zL1hjb2RlLmFwcC9Db250ZW50cy9EZXZlbG9wZXIvVG9vbGNoYWlucy9YY29kZURlZmF1bHQueGN0b29sY2hhaW4vdXNyL2Jpbi9jbGFuZwogCiAgIEFSTSB2NiBvbmx5ICh1cCB0byBhbmQgaW5jbHVkaW5nIGlQaG9uZSAzRyk6CisgIFtOT1RFOiBSZXF1aXJlcyBYY29kZSA0LjQueCBvciBlYXJsaWVyXQogICBJT1NfQ0ZMQUdTPSItbWFyY2g9YXJtdjYgLW1jcHU9YXJtMTE3Nmp6Zi1zIC1tZnB1PXZmcCIKIAotICBBUk0gdjcgb25seSAoaVBob25lIDNHUyBhbmQgbmV3ZXIsIGlQYWQpOgorICBBUk0gdjcgb25seSAoaVBob25lIDNHUy00UywgaVBhZCAxc3QtM3JkIEdlbmVyYXRpb24pOgorICBYY29kZSA0LjYueCBhbmQgZWFybGllcjoKICAgSU9TX0NGTEFHUz0iLW1hcmNoPWFybXY3IC1tY3B1PWNvcnRleC1hOCAtbXR1bmU9Y29ydGV4LWE4IC1tZnB1PW5lb24iCisgIFhjb2RlIDUuMC54IGFuZCBsYXRlcjoKKyAgSU9TX0NGTEFHUz0iLWFyY2ggYXJtdjciCisKKyAgQVJNIHY3cyBvbmx5IChpUGhvbmUgNSwgaVBhZCA0dGggR2VuZXJhdGlvbik6CisgIFtOT1RFOiBSZXF1aXJlcyBYY29kZSA0LjUgb3IgbGF0ZXJdCisgIFhjb2RlIDQuNi54IGFuZCBlYXJsaWVyOgorICBJT1NfQ0ZMQUdTPSItbWFyY2g9YXJtdjdzIC1tY3B1PXN3aWZ0IC1tdHVuZT1zd2lmdCAtbWZwdT1uZW9uIgorICBYY29kZSA1LjAueCBhbmQgbGF0ZXI6CisgIElPU19DRkxBR1M9Ii1hcmNoIGFybXY3cyIKIAogRm9sbG93IHRoZSBwcm9jZWR1cmUgdW5kZXIgIkJ1aWxkaW5nIGxpYmpwZWctdHVyYm8iIGFib3ZlLCBhZGRpbmcKIApAQCAtMzI5LDEwICszODEsNjMgQEAKICAgICBDRkxBR1M9Ii1tZmxvYXQtYWJpPXNvZnRmcCAtaXN5c3Jvb3QgJElPU19TWVNST09UIC1PMyAkSU9TX0NGTEFHUyIgXAogICAgIExERkxBR1M9Ii1tZmxvYXQtYWJpPXNvZnRmcCAtaXN5c3Jvb3QgJElPU19TWVNST09UICRJT1NfQ0ZMQUdTIgogCit0byB0aGUgY29uZmlndXJlIGNvbW1hbmQgbGluZS4gIElmIHVzaW5nIFhjb2RlIDUuMC54IG9yIGxhdGVyLCBhbHNvIGFkZAorCisgICAgQ0NBU0ZMQUdTPSItbm8taW50ZWdyYXRlZC1hcyAkSU9TX0NGTEFHUyIKKwogdG8gdGhlIGNvbmZpZ3VyZSBjb21tYW5kIGxpbmUuCiAKLU9uY2UgYnVpbHQsIGxpcG8gY2FuIGJlIHVzZWQgdG8gY29tYmluZSB0aGUgQVJNIHY2IGFuZCB2NyB2YXJpYW50cyBpbnRvIGEKLXVuaXZlcnNhbCBsaWJyYXJ5LgorTk9URTogIFlvdSBjYW4gYWxzbyBhZGQgLW1pcGhvbmVvcy12ZXJzaW9uLW1pbj17dmVyc2lvbn0gdG8gJElPU19DRkxBR1MgYWJvdmUKK2luIG9yZGVyIHRvIHN1cHBvcnQgb2xkZXIgdmVyc2lvbnMgb2YgaU9TIHRoYW4gdGhlIGRlZmF1bHQgdmVyc2lvbiBzdXBwb3J0ZWQgYnkKK3RoZSBTREsuCisKK09uY2UgYnVpbHQsIGxpcG8gY2FuIGJlIHVzZWQgdG8gY29tYmluZSB0aGUgQVJNIHY2LCB2NywgYW5kL29yIHY3cyB2YXJpYW50cworaW50byBhIHVuaXZlcnNhbCBsaWJyYXJ5LgorCitOT1RFOiBJZiB5b3UgYXJlIGJ1aWxkaW5nIGxpYmpwZWctdHVyYm8gZnJvbSB0aGUgIm9mZmljaWFsIiBwcm9qZWN0IHRhcmJhbGwsCit0aGVuIGl0IGlzIGhpZ2hseSBsaWtlbHkgdGhhdCB5b3Ugd2lsbCBuZWVkIHRvIHJ1biAnYXV0b3JlY29uZiAtZml2JyBpbiB0aGUKK3NvdXJjZSB0cmVlIHByaW9yIHRvIGJ1aWxkaW5nIEFSTSB2NyBvciB2N3MgaU9TIGJpbmFyaWVzIHVzaW5nIHRoZSB0ZWNobmlxdWVzCitkZXNjcmliZWQgYWJvdmUuICBPdGhlcndpc2UsIHlvdSBtYXkgZ2V0IGEgbGlidG9vbCBlcnJvciBzdWNoIGFzICJ1bmFibGUgdG8KK2luZmVyIHRhZ2dlZCBjb25maWd1cmF0aW9uLiIKKworCitCdWlsZGluZyBsaWJqcGVnLXR1cmJvIGZvciBBbmRyb2lkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0J1aWxkaW5nIGxpYmpwZWctdHVyYm8gZm9yIEFuZHJvaWQgcGxhdGZvcm1zIHJlcXVpcmVzIHRoZSBBbmRyb2lkIE5ESworKGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3Rvb2xzL3Nkay9uZGspIGFuZCBhdXRvdG9vbHMuICBUaGUgZm9sbG93aW5nIGlzCithIGdlbmVyYWwgcmVjaXBlIHNjcmlwdCB0aGF0IGNhbiBiZSBtb2RpZmllZCBmb3IgeW91ciBzcGVjaWZpYyBuZWVkcy4KKworICAjIFNldCB0aGVzZSB2YXJpYWJsZXMgdG8gc3VpdCB5b3VyIG5lZWRzCisgIE5ES19QQVRIPXtmdWxsIHBhdGggdG8gdGhlICJuZGsiIGRpcmVjdG9yeS0tIGZvciBleGFtcGxlLCAvb3B0L2FuZHJvaWQvbmRrfQorICBCVUlMRF9QTEFURk9STT17dGhlIHBsYXRmb3JtIG5hbWUgZm9yIHRoZSBOREsgcGFja2FnZSB5b3UgaW5zdGFsbGVkLS0KKyAgICBmb3IgZXhhbXBsZSwgIndpbmRvd3MteDg2IiBvciAibGludXgteDg2XzY0In0KKyAgVE9PTENIQUlOX1ZFUlNJT049eyI0LjYiLCAiNC44IiwgZXRjLiAgVGhpcyBjb3JyZXNwb25kcyB0byBhIHRvb2xjaGFpbgorICAgIGRpcmVjdG9yeSB1bmRlciAke05ES19QQVRIfS90b29sY2hhaW5zLy59CisgIEFORFJPSURfVkVSU0lPTj17VGhlIG1pbmltdW0gdmVyc2lvbiBvZiBBbmRyb2lkIHRvIHN1cHBvcnQtLSBmb3IgZXhhbXBsZSwKKyAgICAiOSIsICIxOSIsIGV0Yy59CisKKyAgSE9TVD1hcm0tbGludXgtYW5kcm9pZGVhYmkKKyAgVE9PTENIQUlOPSR7TkRLX1BBVEh9L3Rvb2xjaGFpbnMvJHtIT1NUfS0ke1RPT0xDSEFJTl9WRVJTSU9OfS9wcmVidWlsdC8ke0JVSUxEX1BMQVRGT1JNfQorICBTWVNST09UPSR7TkRLX1BBVEh9L3BsYXRmb3Jtcy9hbmRyb2lkLSR7QU5EUk9JRF9WRVJTSU9OfS9hcmNoLWFybQorICBBTkRST0lEX0lOQ0xVREVTPSItSSR7U1lTUk9PVH0vdXNyL2luY2x1ZGUgLUkke1RPT0xDSEFJTn0vaW5jbHVkZSIKKyAgQU5EUk9JRF9DRkxBR1M9Ii1tYXJjaD1hcm12Ny1hIC1tZmxvYXQtYWJpPXNvZnRmcCAtZnByZWZldGNoLWxvb3AtYXJyYXlzIFwKKyAgICAtZnN0cmljdC1hbGlhc2luZyAtLXN5c3Jvb3Q9JHtTWVNST09UfSIKKyAgZXhwb3J0IENQUD0ke1RPT0xDSEFJTn0vYmluLyR7SE9TVH0tY3BwCisgIGV4cG9ydCBBUj0ke1RPT0xDSEFJTn0vYmluLyR7SE9TVH0tYXIKKyAgZXhwb3J0IEFTPSR7VE9PTENIQUlOfS9iaW4vJHtIT1NUfS1hcworICBleHBvcnQgTk09JHtUT09MQ0hBSU59L2Jpbi8ke0hPU1R9LW5tCisgIGV4cG9ydCBDQz0ke1RPT0xDSEFJTn0vYmluLyR7SE9TVH0tZ2NjCisgIGV4cG9ydCBMRD0ke1RPT0xDSEFJTn0vYmluLyR7SE9TVH0tbGQKKyAgZXhwb3J0IFJBTkxJQj0ke1RPT0xDSEFJTn0vYmluLyR7SE9TVH0tcmFubGliCisgIGV4cG9ydCBPQkpEVU1QPSR7VE9PTENIQUlOfS9iaW4vJHtIT1NUfS1vYmpkdW1wCisgIGV4cG9ydCBTVFJJUD0ke1RPT0xDSEFJTn0vYmluLyR7SE9TVH0tc3RyaXAKKyAgY2Qge2J1aWxkX2RpcmVjdG9yeX0KKyAgc2gge3NvdXJjZV9kaXJlY3Rvcnl9L2NvbmZpZ3VyZSAtLWhvc3Q9JHtIT1NUfSBcCisgICAgQ0ZMQUdTPSIke0FORFJPSURfSU5DTFVERVN9ICR7QU5EUk9JRF9DRkxBR1N9IC1PMyIgXAorICAgIENQUEZMQUdTPSIke0FORFJPSURfSU5DTFVERVN9ICR7QU5EUk9JRF9DRkxBR1N9IiBcCisgICAgTERGTEFHUz0iJHtBTkRST0lEX0NGTEFHU30iIC0td2l0aC1zaW1kICR7MSsiJEAifQorICBtYWtlCiAKIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMzQ0LDcgKzQ0OSw3IEBACiBCdWlsZCBSZXF1aXJlbWVudHMKID09PT09PT09PT09PT09PT09PQogCi0tLSBDTWFrZSAoaHR0cDovL3d3dy5jbWFrZS5vcmcpIHYyLjYgb3IgbGF0ZXIKKy0tIENNYWtlIChodHRwOi8vd3d3LmNtYWtlLm9yZykgdjIuOC44IG9yIGxhdGVyCiAKIC0tIE1pY3Jvc29mdCBWaXN1YWwgQysrIDIwMDUgb3IgbGF0ZXIKIApAQCAtMzU2LDggKzQ2MSw5IEBACiAgICBUaGUgV2luZG93cyBTREsgaW5jbHVkZXMgYm90aCAzMi1iaXQgYW5kIDY0LWJpdCBWaXN1YWwgQysrIGNvbXBpbGVycyBhbmQKICAgIGV2ZXJ5dGhpbmcgbmVjZXNzYXJ5IHRvIGJ1aWxkIGxpYmpwZWctdHVyYm8uCiAKLSAgICogRm9yIDMyLWJpdCBidWlsZHMsIHlvdSBjYW4gYWxzbyB1c2UgTWljcm9zb2Z0IFZpc3VhbCBDKysgRXhwcmVzcwotICAgICBFZGl0aW9uLiAgVmlzdWFsIEMrKyBFeHByZXNzIEVkaXRpb24gaXMgYSBmcmVlIGRvd25sb2FkLgorICAgKiBZb3UgY2FuIGFsc28gdXNlIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIEV4cHJlc3MgRWRpdGlvbiwgd2hpY2ggaXMgYSBmcmVlCisgICAgIGRvd25sb2FkLiAgKE5PVEU6IHZlcnNpb25zIHByaW9yIHRvIDIwMTIgY2FuIG9ubHkgYmUgdXNlZCB0byBidWlsZCAzMi1iaXQKKyAgICAgY29kZS4pCiAgICAqIElmIHlvdSBpbnRlbmQgdG8gYnVpbGQgbGlianBlZy10dXJibyBmcm9tIHRoZSBjb21tYW5kIGxpbmUsIHRoZW4gYWRkIHRoZQogICAgICBhcHByb3ByaWF0ZSBjb21waWxlciBhbmQgU0RLIGRpcmVjdG9yaWVzIHRvIHRoZSBJTkNMVURFLCBMSUIsIGFuZCBQQVRICiAgICAgIGVudmlyb25tZW50IHZhcmlhYmxlcy4gIFRoaXMgaXMgZ2VuZXJhbGx5IGFjY29tcGxpc2hlZCBieSBleGVjdXRpbmcKQEAgLTM3MSwxMyArNDc3LDE3IEBACiAKIC0tIE1pbkdXCiAKLSAgIEdDQyB2NC4xIG9yIGxhdGVyIHJlY29tbWVuZGVkIGZvciBiZXN0IHBlcmZvcm1hbmNlCisgICBNaW5HVy1idWlsZHMgKGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbWluZ3didWlsZHMvKSBvcgorICAgdGRtLWdjYyAoaHR0cDovL3RkbS1nY2MudGRyYWdvbi5uZXQvKSByZWNvbW1lbmRlZCBpZiBidWlsZGluZyBvbiBhIFdpbmRvd3MKKyAgIG1hY2hpbmUuICBCb3RoIGRpc3RyaWJ1dGlvbnMgaW5zdGFsbCBhIFN0YXJ0IE1lbnUgbGluayB0aGF0IGNhbiBiZSB1c2VkIHRvCisgICBsYXVuY2ggYSBjb21tYW5kIHByb21wdCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBjb21waWxlciBwYXRocyBhdXRvbWF0aWNhbGx5CisgICBzZXQuCiAKIC0tIE5BU00gKGh0dHA6Ly93d3cubmFzbS51cy8pIDAuOTggb3IgbGF0ZXIgKE5BU00gMi4wNSBvciBsYXRlciBpcyByZXF1aXJlZCBmb3IKICAgIGEgNjQtYml0IGJ1aWxkKQogCi0tLSBJZiBidWlsZGluZyB0aGUgVHVyYm9KUEVHL09TUyBKYXZhIHdyYXBwZXIsIEpESyAxLjUgb3IgbGF0ZXIgaXMgcmVxdWlyZWQuCi0gICBUaGlzIGNhbiBiZSBkb3dubG9hZGVkIGZyb20gaHR0cDovL3d3dy5qYXZhLmNvbS4KKy0tIElmIGJ1aWxkaW5nIHRoZSBUdXJib0pQRUcgSmF2YSB3cmFwcGVyLCBKREsgMS41IG9yIGxhdGVyIGlzIHJlcXVpcmVkLiAgVGhpcworICAgY2FuIGJlIGRvd25sb2FkZWQgZnJvbSBodHRwOi8vd3d3LmphdmEuY29tLgogCiAKID09PT09PT09PT09PT09PT09PQpAQCAtNDEyLDE3ICs1MjIsMTcgQEAKIFRoZSBmb2xsb3dpbmcgZmlsZXMgd2lsbCBiZSBnZW5lcmF0ZWQgdW5kZXIge2J1aWxkX2RpcmVjdG9yeX06CiAKICAganBlZy1zdGF0aWMubGliCi0gICAgICBTdGF0aWMgbGluayBsaWJyYXJ5IGZvciBsaWJqcGVnLXR1cmJvCisgICAgICBTdGF0aWMgbGluayBsaWJyYXJ5IGZvciB0aGUgbGlianBlZyBBUEkKICAgc2hhcmVkbGliL2pwZWd7dmVyc2lvbn0uZGxsCi0gICAgICBETEwgZm9yIGxpYmpwZWctdHVyYm8KKyAgICAgIERMTCBmb3IgdGhlIGxpYmpwZWcgQVBJCiAgIHNoYXJlZGxpYi9qcGVnLmxpYgotICAgICAgSW1wb3J0IGxpYnJhcnkgZm9yIGxpYmpwZWctdHVyYm8gRExMCisgICAgICBJbXBvcnQgbGlicmFyeSBmb3IgdGhlIGxpYmpwZWcgQVBJCiAgIHR1cmJvanBlZy1zdGF0aWMubGliCi0gICAgICBTdGF0aWMgbGluayBsaWJyYXJ5IGZvciBUdXJib0pQRUcvT1NTCisgICAgICBTdGF0aWMgbGluayBsaWJyYXJ5IGZvciB0aGUgVHVyYm9KUEVHIEFQSQogICB0dXJib2pwZWcuZGxsCi0gICAgICBETEwgZm9yIFR1cmJvSlBFRy9PU1MKKyAgICAgIERMTCBmb3IgdGhlIFR1cmJvSlBFRyBBUEkKICAgdHVyYm9qcGVnLmxpYgotICAgICAgSW1wb3J0IGxpYnJhcnkgZm9yIFR1cmJvSlBFRy9PU1MgRExMCisgICAgICBJbXBvcnQgbGlicmFyeSBmb3IgdGhlIFR1cmJvSlBFRyBBUEkKIAoge3ZlcnNpb259IGlzIDYyLCA3LCBvciA4LCBkZXBlbmRpbmcgb24gd2hldGhlciBsaWJqcGVnIHY2YiAoZGVmYXVsdCksIHY3LCBvcgogdjggZW11bGF0aW9uIGlzIGVuYWJsZWQuCkBAIC00MzYsNyArNTQ2LDEyIEBACiBpbnN0YW5jZToKIAogICBjZCB7YnVpbGRfZGlyZWN0b3J5fQotICBjbWFrZSAtRyAiVmlzdWFsIFN0dWRpbyA5IDIwMDgiIHtzb3VyY2VfZGlyZWN0b3J5fQorICBjbWFrZSAtRyAiVmlzdWFsIFN0dWRpbyAxMCIge3NvdXJjZV9kaXJlY3Rvcnl9CisKK05PVEU6ICBBZGQgIldpbjY0IiB0byB0aGUgZ2VuZXJhdG9yIG5hbWUgKGZvciBleGFtcGxlLCAiVmlzdWFsIFN0dWRpbyAxMAorV2luNjQiKSB0byBidWlsZCBhIDY0LWJpdCB2ZXJzaW9uIG9mIGxpYmpwZWctdHVyYm8uICBSZWNlbnQgdmVyc2lvbnMgb2YgQ01ha2UKK25vIGxvbmdlciBkb2N1bWVudCB0aGF0LiAgQSBzZXBhcmF0ZSBidWlsZCBkaXJlY3RvcnkgbXVzdCBiZSB1c2VkIGZvciAzMi1iaXQKK2FuZCA2NC1iaXQgYnVpbGRzLgogCiBZb3UgY2FuIHRoZW4gb3BlbiBBTExfQlVJTEQudmNwcm9qIGluIFZpc3VhbCBTdHVkaW8gYW5kIGJ1aWxkIG9uZSBvZiB0aGUKIGNvbmZpZ3VyYXRpb25zIGluIHRoYXQgcHJvamVjdCAoIkRlYnVnIiwgIlJlbGVhc2UiLCBldGMuKSB0byBnZW5lcmF0ZSBhIGZ1bGwKQEAgLTQ0NSwxNyArNTYwLDE3IEBACiBUaGlzIHdpbGwgZ2VuZXJhdGUgdGhlIGZvbGxvd2luZyBmaWxlcyB1bmRlciB7YnVpbGRfZGlyZWN0b3J5fToKIAogICB7Y29uZmlndXJhdGlvbn0vanBlZy1zdGF0aWMubGliCi0gICAgICBTdGF0aWMgbGluayBsaWJyYXJ5IGZvciBsaWJqcGVnLXR1cmJvCisgICAgICBTdGF0aWMgbGluayBsaWJyYXJ5IGZvciB0aGUgbGlianBlZyBBUEkKICAgc2hhcmVkbGliL3tjb25maWd1cmF0aW9ufS9qcGVne3ZlcnNpb259LmRsbAotICAgICAgRExMIGZvciBsaWJqcGVnLXR1cmJvCisgICAgICBETEwgZm9yIHRoZSBsaWJqcGVnIEFQSQogICBzaGFyZWRsaWIve2NvbmZpZ3VyYXRpb259L2pwZWcubGliCi0gICAgICBJbXBvcnQgbGlicmFyeSBmb3IgbGlianBlZy10dXJibyBETEwKKyAgICAgIEltcG9ydCBsaWJyYXJ5IGZvciB0aGUgbGlianBlZyBBUEkKICAge2NvbmZpZ3VyYXRpb259L3R1cmJvanBlZy1zdGF0aWMubGliCi0gICAgICBTdGF0aWMgbGluayBsaWJyYXJ5IGZvciBUdXJib0pQRUcvT1NTCisgICAgICBTdGF0aWMgbGluayBsaWJyYXJ5IGZvciB0aGUgVHVyYm9KUEVHIEFQSQogICB7Y29uZmlndXJhdGlvbn0vdHVyYm9qcGVnLmRsbAotICAgICAgRExMIGZvciBUdXJib0pQRUcvT1NTCisgICAgICBETEwgZm9yIHRoZSBUdXJib0pQRUcgQVBJCiAgIHtjb25maWd1cmF0aW9ufS90dXJib2pwZWcubGliCi0gICAgICBJbXBvcnQgbGlicmFyeSBmb3IgVHVyYm9KUEVHL09TUyBETEwKKyAgICAgIEltcG9ydCBsaWJyYXJ5IGZvciB0aGUgVHVyYm9KUEVHIEFQSQogCiB7Y29uZmlndXJhdGlvbn0gaXMgRGVidWcsIFJlbGVhc2UsIFJlbFdpdGhEZWJJbmZvLCBvciBNaW5TaXplUmVsLCBkZXBlbmRpbmcgb24KIHRoZSBjb25maWd1cmF0aW9uIHlvdSBidWlsdCBpbiB0aGUgSURFLCBhbmQge3ZlcnNpb259IGlzIDYyLCA3LCBvciA4LApAQCAtNDY1LDI0ICs1ODAsMjcgQEAKIE1pbkdXCiAtLS0tLQogCitOT1RFOiBUaGlzIGFzc3VtZXMgdGhhdCB5b3UgYXJlIGJ1aWxkaW5nIG9uIGEgV2luZG93cyBtYWNoaW5lLiAgSWYgeW91IGFyZQorY3Jvc3MtY29tcGlsaW5nIG9uIGEgTGludXgvVW5peCBtYWNoaW5lLCB0aGVuIHNlZSAiQnVpbGQgUmVjaXBlcyIgYmVsb3cuCisKICAgY2Qge2J1aWxkX2RpcmVjdG9yeX0KLSAgY21ha2UgLUcgIk1TWVMgTWFrZWZpbGVzIiB7c291cmNlX2RpcmVjdG9yeX0KLSAgbWFrZQorICBjbWFrZSAtRyAiTWluR1cgTWFrZWZpbGVzIiB7c291cmNlX2RpcmVjdG9yeX0KKyAgbWluZ3czMi1tYWtlCiAKIFRoaXMgd2lsbCBnZW5lcmF0ZSB0aGUgZm9sbG93aW5nIGZpbGVzIHVuZGVyIHtidWlsZF9kaXJlY3Rvcnl9CiAKICAgbGlianBlZy5hCi0gICAgICBTdGF0aWMgbGluayBsaWJyYXJ5IGZvciBsaWJqcGVnLXR1cmJvCisgICAgICBTdGF0aWMgbGluayBsaWJyYXJ5IGZvciB0aGUgbGlianBlZyBBUEkKICAgc2hhcmVkbGliL2xpYmpwZWcte3ZlcnNpb259LmRsbAotICAgICAgRExMIGZvciBsaWJqcGVnLXR1cmJvCisgICAgICBETEwgZm9yIHRoZSBsaWJqcGVnIEFQSQogICBzaGFyZWRsaWIvbGlianBlZy5kbGwuYQotICAgICAgSW1wb3J0IGxpYnJhcnkgZm9yIGxpYmpwZWctdHVyYm8gRExMCisgICAgICBJbXBvcnQgbGlicmFyeSBmb3IgdGhlIGxpYmpwZWcgQVBJCiAgIGxpYnR1cmJvanBlZy5hCi0gICAgICBTdGF0aWMgbGluayBsaWJyYXJ5IGZvciBUdXJib0pQRUcvT1NTCisgICAgICBTdGF0aWMgbGluayBsaWJyYXJ5IGZvciB0aGUgVHVyYm9KUEVHIEFQSQogICBsaWJ0dXJib2pwZWcuZGxsCi0gICAgICBETEwgZm9yIFR1cmJvSlBFRy9PU1MKKyAgICAgIERMTCBmb3IgdGhlIFR1cmJvSlBFRyBBUEkKICAgbGlidHVyYm9qcGVnLmRsbC5hCi0gICAgICBJbXBvcnQgbGlicmFyeSBmb3IgVHVyYm9KUEVHL09TUyBETEwKKyAgICAgIEltcG9ydCBsaWJyYXJ5IGZvciB0aGUgVHVyYm9KUEVHIEFQSQogCiB7dmVyc2lvbn0gaXMgNjIsIDcsIG9yIDgsIGRlcGVuZGluZyBvbiB3aGV0aGVyIGxpYmpwZWcgdjZiIChkZWZhdWx0KSwgdjcsIG9yCiB2OCBlbXVsYXRpb24gaXMgZW5hYmxlZC4KQEAgLTUwNiw2ICs2MjQsMTYgQEAKIG9uIGxpYmpwZWcgdjcgYW5kIHY4IGVtdWxhdGlvbi4KIAogCitJbi1NZW1vcnkgU291cmNlL0Rlc3RpbmF0aW9uIE1hbmFnZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gdXNpbmcgbGlianBlZyB2NmIgb3IgdjcgQVBJL0FCSSBlbXVsYXRpb24sIGFkZCAtRFdJVEhfTUVNX1NSQ0RTVD0wIHRvIHRoZQorQ01ha2UgY29tbWFuZCBsaW5lIHRvIGJ1aWxkIGEgdmVyc2lvbiBvZiBsaWJqcGVnLXR1cmJvIHRoYXQgbGFja3MgdGhlCitqcGVnX21lbV9zcmMoKSBhbmQganBlZ19tZW1fZGVzdCgpIGZ1bmN0aW9ucy4gIFRoZXNlIGZ1bmN0aW9ucyB3ZXJlIG5vdCBwYXJ0IG9mCit0aGUgb3JpZ2luYWwgbGlianBlZyB2NmIgYW5kIHY3IEFQSXMsIHNvIHJlbW92aW5nIHRoZW0gZW5zdXJlcyBzdHJpY3QKK2NvbmZvcm1hbmNlIHdpdGggdGhvc2UgQVBJcy4gIFNlZSBSRUFETUUtdHVyYm8udHh0IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisKIEFyaXRobWV0aWMgQ29kaW5nIFN1cHBvcnQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtNTE4LDEzICs2NDYsMTIgQEAKIGRpc2FibGUgZW5jb2Rpbmcgb3IgZGVjb2RpbmcgKHJlc3BlY3RpdmVseS4pCiAKIAotVHVyYm9KUEVHL09TUyBKYXZhIFdyYXBwZXIKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUdXJib0pQRUcgSmF2YSBXcmFwcGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBBZGQgIi1EV0lUSF9KQVZBPTEiIHRvIHRoZSBjbWFrZSBjb21tYW5kIGxpbmUgdG8gaW5jb3Jwb3JhdGUgYW4gb3B0aW9uYWwgSmF2YQotTmF0aXZlIEludGVyZmFjZSB3cmFwcGVyIGludG8gdGhlIFR1cmJvSlBFRy9PU1MgZHluYW1pYyBsaWJyYXJ5IGFuZCBidWlsZCB0aGUKLUphdmEgZnJvbnQtZW5kIGNsYXNzZXMgdG8gc3VwcG9ydCBpdC4gIFRoaXMgYWxsb3dzIHRoZSBUdXJib0pQRUcvT1NTIGR5bmFtaWMKLWxpYnJhcnkgdG8gYmUgdXNlZCBkaXJlY3RseSBmcm9tIEphdmEgYXBwbGljYXRpb25zLiAgU2VlIGphdmEvUkVBRE1FIGZvciBtb3JlCi1kZXRhaWxzLgorTmF0aXZlIEludGVyZmFjZSB3cmFwcGVyIGludG8gdGhlIFR1cmJvSlBFRyBzaGFyZWQgbGlicmFyeSBhbmQgYnVpbGQgdGhlIEphdmEKK2Zyb250LWVuZCBjbGFzc2VzIHRvIHN1cHBvcnQgaXQuICBUaGlzIGFsbG93cyB0aGUgVHVyYm9KUEVHIHNoYXJlZCBsaWJyYXJ5IHRvCitiZSB1c2VkIGRpcmVjdGx5IGZyb20gSmF2YSBhcHBsaWNhdGlvbnMuICBTZWUgamF2YS9SRUFETUUgZm9yIG1vcmUgZGV0YWlscy4KIAogSWYgeW91IGFyZSB1c2luZyBDTWFrZSAyLjgsIHlvdSBjYW4gc2V0IHRoZSBKYXZhX0pBVkFDX0VYRUNVVEFCTEUsCiBKYXZhX0pBVkFfRVhFQ1VUQUJMRSwgYW5kIEphdmFfSkFSX0VYRUNVVEFCTEUgQ01ha2UgdmFyaWFibGVzIHRvIHNwZWNpZnkKQEAgLTU2Nyw4ICs2OTQsOCBAQAogICBjZCB7YnVpbGRfZGlyZWN0b3J5fQogICBDQz0vdXNyL2Jpbi94ODZfNjQtdzY0LW1pbmd3MzItZ2NjIFwKICAgICBjbWFrZSAtRyAiVW5peCBNYWtlZmlsZXMiIC1EQ01BS0VfU1lTVEVNX05BTUU9V2luZG93cyBcCi0gICAgLURDTUFLRV9BUj0vdXNyL2Jpbi94ODZfNjQtdzY0LW1pbmd3MzItYXIgXAotICAgIC1EQ01BS0VfUkFOTElCPS91c3IvYmluL3g4Nl82NC13NjQtbWluZ3czMi1yYW5saWIge3NvdXJjZV9kaXJlY3Rvcnl9CisgICAgLURDTUFLRV9SQ19DT01QSUxFUj0vdXNyL2Jpbi94ODZfNjQtdzY0LW1pbmd3MzItd2luZHJlcy5leGUgXAorICAgIHtzb3VyY2VfZGlyZWN0b3J5fQogICBtYWtlCiAKIFRoaXMgcHJvZHVjZXMgYSA2NC1iaXQgYnVpbGQgb2YgbGlianBlZy10dXJibyB0aGF0IGRvZXMgbm90IGRlcGVuZCBvbgpAQCAtNTgyLDggKzcwOSw4IEBACiAgIGNkIHtidWlsZF9kaXJlY3Rvcnl9CiAgIENDPS91c3IvYmluL2k2ODYtdzY0LW1pbmd3MzItZ2NjIFwKICAgICBjbWFrZSAtRyAiVW5peCBNYWtlZmlsZXMiIC1EQ01BS0VfU1lTVEVNX05BTUU9V2luZG93cyBcCi0gICAgLUREQ01BS0VfQVI9L3Vzci9iaW4vaTY4Ni13NjQtbWluZ3czMi1hciBcCi0gICAgLURDTUFLRV9SQU5MSUI9L3Vzci9iaW4vaTY4Ni13NjQtbWluZ3czMi1yYW5saWIge3NvdXJjZV9kaXJlY3Rvcnl9CisgICAgLURDTUFLRV9SQ19DT01QSUxFUj0vdXNyL2Jpbi9pNjg2LXc2NC1taW5ndzMyLXdpbmRyZXMuZXhlIFwKKyAgICB7c291cmNlX2RpcmVjdG9yeX0KICAgbWFrZQogCiBUaGlzIHByb2R1Y2VzIGEgMzItYml0IGJ1aWxkIG9mIGxpYmpwZWctdHVyYm8gdGhhdCBkb2VzIG5vdCBkZXBlbmQgb24KQEAgLTU5MSwyMSArNzE4LDYgQEAKIG1pbmd3NjQtaTY4Ni1nY2MtZysrIHBhY2thZ2VzIChhbmQgdGhlaXIgZGVwZW5kZW5jaWVzKSBtdXN0IGJlIGluc3RhbGxlZC4KIAogCi1NaW5HVy13NjQgQnVpbGQgb24gV2luZG93cwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhpcyBwcm9kdWNlcyBhIDY0LWJpdCBidWlsZCBvZiBsaWJqcGVnLXR1cmJvIHVzaW5nIHRoZSAibmF0aXZlIiBNaW5HVy13NjQKLXRvb2xjaGFpbiAod2hpY2ggaXMgZmFzdGVyIHRoYW4gdGhlIEN5Z3dpbiB2ZXJzaW9uKToKLQotICBjZCB7YnVpbGRfZGlyZWN0b3J5fQotICBDQz17bWluZ3ctdzY0X2JpbmFyeV9wYXRofS94ODZfNjQtdzY0LW1pbmd3MzItZ2NjIFwKLSAgICBjbWFrZSAtRyAiTVNZUyBNYWtlZmlsZXMiIFwKLSAgICAtRENNQUtFX0FSPXttaW5ndy13NjRfYmluYXJ5X3BhdGh9L3g4Nl82NC13NjQtbWluZ3czMi1hciBcCi0gICAgLURDTUFLRV9SQU5MSUI9e21pbmd3LXc2NF9iaW5hcnlfcGF0aH0veDg2XzY0LXc2NC1taW5ndzMyLXJhbmxpYiBcCi0gICAge3NvdXJjZV9kaXJlY3Rvcnl9Ci0gIG1ha2UKLQotCiBNaW5HVyBCdWlsZCBvbiBMaW51eAogLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtNjI1LDggKzczNyw4IEBACiBUaGUgZm9sbG93aW5nIGNvbW1hbmRzIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSB2YXJpb3VzIHR5cGVzIG9mIHJlbGVhc2UgcGFja2FnZXM6CiAKIAotVW5peAotLS0tLQorVW5peC9MaW51eAorLS0tLS0tLS0tLQogCiBtYWtlIHJwbQogCkBAIC02NDUsNiArNzU3LDkgQEAKIAogICBDcmVhdGUgTWFjaW50b3NoIHBhY2thZ2UvZGlzayBpbWFnZS4gIFRoaXMgcmVxdWlyZXMgdGhlIFBhY2thZ2VNYWtlcgogICBhcHBsaWNhdGlvbiwgd2hpY2ggbXVzdCBiZSBpbnN0YWxsZWQgaW4gL0RldmVsb3Blci9BcHBsaWNhdGlvbnMvVXRpbGl0aWVzLgorICBOb3RlIHRoYXQgUGFja2FnZU1ha2VyIGlzIG5vdCBpbmNsdWRlZCBpbiByZWNlbnQgcmVsZWFzZXMgb2YgWGNvZGUsIGJ1dCBpdAorICBjYW4gYmUgb2J0YWluZWQgYnkgZG93bmxvYWRpbmcgdGhlICJBdXhpbGlhcnkgVG9vbHMgZm9yIFhjb2RlIiBwYWNrYWdlIGZyb20KKyAgaHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vZG93bmxvYWRzLgogCiBtYWtlIHVkbWcgW0JVSUxERElSMzI9ezMyLWJpdCBidWlsZCBkaXJlY3Rvcnl9XQogCkBAIC02NTksMzUgKzc3NCwyNCBAQAogbWFrZSBpb3NkbWcgW0JVSUxERElSMzI9ezMyLWJpdCBidWlsZCBkaXJlY3Rvcnl9XSBcCiAgIFtCVUlMRERJUkFSTVY2PXtBUk0gdjYgYnVpbGQgZGlyZWN0b3J5fV0gXAogICBbQlVJTERESVJBUk1WNz17QVJNIHY3IGJ1aWxkIGRpcmVjdG9yeX1dIFwKKyAgW0JVSUxERElSQVJNVjdTPXtBUk0gdjdzIGJ1aWxkIGRpcmVjdG9yeX1dCiAKICAgT24gT1MgWCBzeXN0ZW1zLCB0aGlzIGNyZWF0ZXMgYSBNYWNpbnRvc2ggcGFja2FnZSBhbmQgZGlzayBpbWFnZSBpbiB3aGljaCB0aGUKICAgbGlianBlZy10dXJibyBzdGF0aWMgbGlicmFyaWVzIGNvbnRhaW4gQVJNIGFyY2hpdGVjdHVyZXMgbmVjZXNzYXJ5IHRvIGJ1aWxkCiAgIGlPUyBhcHBsaWNhdGlvbnMuICBJZiBidWlsZGluZyBvbiBhbiB4ODYtNjQgc3lzdGVtLCB0aGUgYmluYXJpZXMgd2lsbCBhbHNvCiAgIGNvbnRhaW4gdGhlIGkzODYgYXJjaGl0ZWN0dXJlLCBhcyB3aXRoICdtYWtlIHVkbWcnIGFib3ZlLiAgWW91IHNob3VsZCBmaXJzdAotICBjb25maWd1cmUgQVJNIHY2IGFuZCBBUk0gdjcgb3V0LW9mLXRyZWUgYnVpbGRzIG9mIGxpYmpwZWctdHVyYm8gKHNlZQotICAiQnVpbGRpbmcgbGlianBlZy10dXJibyBmb3IgaU9TIiBhYm92ZS4pICBJZiB5b3UgYXJlIGJ1aWxkaW5nIGFuIHg4Ni02NAorICBjb25maWd1cmUgQVJNIHY2LCBBUk0gdjcsIGFuZC9vciBBUk0gdjdzIG91dC1vZi10cmVlIGJ1aWxkcyBvZiBsaWJqcGVnLXR1cmJvCisgIChzZWUgIkJ1aWxkaW5nIGxpYmpwZWctdHVyYm8gZm9yIGlPUyIgYWJvdmUuKSAgSWYgeW91IGFyZSBidWlsZGluZyBhbiB4ODYtNjQKICAgdmVyc2lvbiBvZiBsaWJqcGVnLXR1cmJvLCB5b3Ugc2hvdWxkIGNvbmZpZ3VyZSBhIDMyLWJpdCBvdXQtb2YtdHJlZSBidWlsZCBhcwogICB3ZWxsLiAgTmV4dCwgYnVpbGQgbGlianBlZy10dXJibyBhcyB5b3Ugd291bGQgbm9ybWFsbHksIHVzaW5nIGFuIG91dC1vZi10cmVlCiAgIGJ1aWxkLiAgV2hlbiBpdCBpcyBidWlsdCwgcnVuICdtYWtlIGlvc2RtZycgZnJvbSB0aGUgYnVpbGQgZGlyZWN0b3J5LiAgVGhlCiAgIGJ1aWxkIHN5c3RlbSB3aWxsIGxvb2sgZm9yIHRoZSBBUk0gdjYgYnVpbGQgdW5kZXIge3NvdXJjZV9kaXJlY3Rvcnl9L2lvc2FybXY2CiAgIGJ5IGRlZmF1bHQsIHRoZSBBUk0gdjcgYnVpbGQgdW5kZXIge3NvdXJjZV9kaXJlY3Rvcnl9L2lvc2FybXY3IGJ5IGRlZmF1bHQsCi0gIGFuZCAoaWYgYXBwbGljYWJsZSkgdGhlIDMyLWJpdCBidWlsZCB1bmRlciB7c291cmNlX2RpcmVjdG9yeX0vb3N4eDg2IGJ5Ci0gIGRlZmF1bHQsIGJ1dCB5b3UgY2FuIG92ZXJyaWRlIHRoaXMgYnkgc2V0dGluZyB0aGUgQlVJTERESVIzMiwgQlVJTERESVJBUk1WNiwKLSAgYW5kL29yIEJVSUxERElSQVJNVjcgdmFyaWFibGVzIG9uIHRoZSBtYWtlIGNvbW1hbmQgbGluZSBhcyBzaG93biBhYm92ZS4KLQotbWFrZSBzdW5wa2cKLQotICBCdWlsZCBhIFNvbGFyaXMgcGFja2FnZS4gIFRoaXMgcmVxdWlyZXMgcGtnbWssIHBrZ3RyYW5zLCBhbmQgYnppcDIuCi0KLW1ha2UgY3N1bnBrZyBbQlVJTERESVIzMj17MzItYml0IGJ1aWxkIGRpcmVjdG9yeX1dCi0KLSAgT24gNjQtYml0IFNvbGFyaXMgc3lzdGVtcywgdGhpcyBjcmVhdGVzIGEgY29tYmluZWQgcGFja2FnZSB0aGF0IGNvbnRhaW5zCi0gIGJvdGggMzItYml0IGFuZCA2NC1iaXQgbGlicmFyaWVzLiAgWW91IHNob3VsZCBmaXJzdCBjb25maWd1cmUgYSAzMi1iaXQKLSAgb3V0LW9mLXRyZWUgYnVpbGQgb2YgbGlianBlZy10dXJibywgdGhlbiBjb25maWd1cmUgYSA2NC1iaXQgb3V0LW9mLXRyZWUKLSAgYnVpbGQsIHRoZW4gcnVuICdtYWtlIGNzdW5wa2cnIGZyb20gdGhlIDY0LWJpdCBidWlsZCBkaXJlY3RvcnkuICBUaGUgYnVpbGQKLSAgc3lzdGVtIHdpbGwgbG9vayBmb3IgdGhlIDMyLWJpdCBidWlsZCB1bmRlciB7c291cmNlX2RpcmVjdG9yeX0vc29seDg2IGJ5Ci0gIGRlZmF1bHQsIGJ1dCB5b3UgY2FuIG92ZXJyaWRlIHRoaXMgYnkgc2V0dGluZyB0aGUgQlVJTERESVIzMiB2YXJpYWJsZSBvbiB0aGUKLSAgbWFrZSBjb21tYW5kIGxpbmUgYXMgc2hvd24gYWJvdmUuCisgIHRoZSBBUk0gdjdzIGJ1aWxkIHVuZGVyIHtzb3VyY2VfZGlyZWN0b3J5fS9pb3Nhcm12N3MgYnkgZGVmYXVsdCwgYW5kIChpZgorICBhcHBsaWNhYmxlKSB0aGUgMzItYml0IGJ1aWxkIHVuZGVyIHtzb3VyY2VfZGlyZWN0b3J5fS9vc3h4ODYgYnkgZGVmYXVsdCwgYnV0CisgIHlvdSBjYW4gb3ZlcnJpZGUgdGhpcyBieSBzZXR0aW5nIHRoZSBCVUlMRERJUjMyLCBCVUlMRERJUkFSTVY2LAorICBCVUlMRERJUkFSTVY3LCBhbmQvb3IgQlVJTERESVJBUk1WN1MgdmFyaWFibGVzIG9uIHRoZSBtYWtlIGNvbW1hbmQgbGluZSBhcworICBzaG93biBhYm92ZS4KIAogbWFrZSBjeWd3aW5wa2cKIApAQCAtNzM2LDExICs4NDAsMTEgQEAKIHRoZSAndGVzdGNsZWFuJyB0YXJnZXQgKGlmIHVzaW5nIHRoZSBWaXN1YWwgU3R1ZGlvIElERSkgd2lsbCBjbGVhbiB1cCB0aGUKIG91dHB1dCBpbWFnZXMgZ2VuZXJhdGVkIGJ5ICdtYWtlIHRlc3QnLgogCi1PbiBVbml4L0xpbnV4IHBsYXRmb3JtcywgbW9yZSBleHRlbnNpdmUgdGVzdHMgb2YgdGhlIFR1cmJvSlBFRy9PU1MgQyBhbmQgSmF2YQorT24gVW5peC9MaW51eCBwbGF0Zm9ybXMsIG1vcmUgZXh0ZW5zaXZlIHRlc3RzIG9mIHRoZSBUdXJib0pQRUcgQyBhbmQgSmF2YQogd3JhcHBlcnMgY2FuIGJlIHJ1biBieSBpbnZva2luZyAnbWFrZSB0anRlc3QnLiAgVGhlc2UgZXh0ZW5kZWQgVHVyYm9KUEVHIHRlc3RzCiBlc3NlbnRpYWxseSBpdGVyYXRlIHRocm91Z2ggYWxsIG9mIHRoZSBhdmFpbGFibGUgZmVhdHVyZXMgb2YgdGhlIFR1cmJvSlBFRyBBUElzCiB0aGF0IGFyZSBub3QgY292ZXJlZCBieSB0aGUgVHVyYm9KUEVHIHVuaXQgdGVzdHMgKHRoaXMgaW5jbHVkZXMgdGhlIGxvc3NsZXNzCiB0cmFuc2Zvcm0gb3B0aW9ucykgYW5kIGNvbXBhcmUgdGhlIGltYWdlcyBnZW5lcmF0ZWQgYnkgZWFjaCBmZWF0dXJlIHRvIGltYWdlcwogZ2VuZXJhdGVkIHVzaW5nIHRoZSBlcXVpdmFsZW50IGZlYXR1cmUgaW4gdGhlIGxpYmpwZWcgQVBJLiAgVGhlIGV4dGVuZGVkCiBUdXJib0pQRUcgdGVzdHMgYXJlIG1lYW50IHRvIHRlc3QgZm9yIHJlZ3Jlc3Npb25zIGluIHRoZSBUdXJib0pQRUcgd3JhcHBlcnMsCi1ub3QgaW4gdGhlIHVuZGVybHlpbmcgbGlianBlZy10dXJibyBsaWJyYXJ5Lgorbm90IGluIHRoZSB1bmRlcmx5aW5nIGxpYmpwZWcgQVBJIGxpYnJhcnkuCmRpZmYgLS1naXQgYS9DTWFrZUxpc3RzLnR4dCBiL0NNYWtlTGlzdHMudHh0CmluZGV4IDg0NDhlZWIuLjkxYTkyY2QgMTAwNjQ0Ci0tLSBhL0NNYWtlTGlzdHMudHh0CisrKyBiL0NNYWtlTGlzdHMudHh0CkBAIC0yLDEyICsyLDE2IEBACiAjIFNldHVwCiAjCiAKLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjYpCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi44LjgpCisjIFVzZSBMSU5LX0lOVEVSRkFDRV9MSUJSQVJJRVMgaW5zdGVhZCBvZiBJTlRFUkZBQ0VfTElOS19MSUJSQVJJRVMKK2lmKFBPTElDWSBDTVAwMDIyKQorICBjbWFrZV9wb2xpY3koU0VUIENNUDAwMjIgT0xEKQorZW5kaWYoKQogCiBwcm9qZWN0KGxpYmpwZWctdHVyYm8gQykKLXNldChWRVJTSU9OIDEuMi4yKQorc2V0KFZFUlNJT04gMS4zLjIpCiAKLWlmKE1JTkdXIE9SIENZR1dJTikKK2lmKENZR1dJTiBPUiBOT1QgQ01BS0VfSE9TVF9TWVNURU1fTkFNRSBTVFJFUVVBTCAiV2luZG93cyIpCiAgIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICJkYXRlIiAiKyVZJW0lZCIgT1VUUFVUX1ZBUklBQkxFIEJVSUxEKQogICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiXG4iICIiIEJVSUxEICR7QlVJTER9KQogZWxzZWlmKFdJTjMyKQpAQCAtNDUsNyArNDksOCBAQAogb3B0aW9uKFdJVEhfQVJJVEhfREVDICJJbmNsdWRlIGFyaXRobWV0aWMgZGVjb2Rpbmcgc3VwcG9ydCIgVFJVRSkKIG9wdGlvbihXSVRIX0pQRUc3ICJFbXVsYXRlIGxpYmpwZWcgdjcgQVBJL0FCSSAodGhpcyBtYWtlcyBsaWJqcGVnLXR1cmJvIGJhY2t3YXJkIGluY29tcGF0aWJsZSB3aXRoIGxpYmpwZWcgdjZiKSIgRkFMU0UpCiBvcHRpb24oV0lUSF9KUEVHOCAiRW11bGF0ZSBsaWJqcGVnIHY4IEFQSS9BQkkgKHRoaXMgbWFrZXMgbGlianBlZy10dXJibyBiYWNrd2FyZCBpbmNvbXBhdGlibGUgd2l0aCBsaWJqcGVnIHY2YikiIEZBTFNFKQotb3B0aW9uKFdJVEhfSkFWQSAiQnVpbGQgSmF2YSB3cmFwcGVyIGZvciB0aGUgVHVyYm9KUEVHL09TUyBsaWJyYXJ5IiBGQUxTRSkKK29wdGlvbihXSVRIX01FTV9TUkNEU1QgIkluY2x1ZGUgaW4tbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBtYW5hZ2VyIGZ1bmN0aW9ucyB3aGVuIGVtdWxhdGluZyB0aGUgbGlianBlZyB2NmIgb3IgdjcgQVBJL0FCSSIgVFJVRSkKK29wdGlvbihXSVRIX0pBVkEgIkJ1aWxkIEphdmEgd3JhcHBlciBmb3IgdGhlIFR1cmJvSlBFRyBsaWJyYXJ5IiBGQUxTRSkKIAogaWYoV0lUSF9BUklUSF9FTkMpCiAgIHNldChDX0FSSVRIX0NPRElOR19TVVBQT1JURUQgMSkKQEAgLTYyLDE0ICs2NywxOSBAQAogZW5kaWYoKQogCiBpZihXSVRIX0pBVkEpCi0gIG1lc3NhZ2UoU1RBVFVTICJUdXJib0pQRUcvT1NTIEphdmEgd3JhcHBlciBlbmFibGVkIikKKyAgbWVzc2FnZShTVEFUVVMgIlR1cmJvSlBFRyBKYXZhIHdyYXBwZXIgZW5hYmxlZCIpCiBlbHNlKCkKLSAgbWVzc2FnZShTVEFUVVMgIlR1cmJvSlBFRy9PU1MgSmF2YSB3cmFwcGVyIGRpc2FibGVkIikKKyAgbWVzc2FnZShTVEFUVVMgIlR1cmJvSlBFRyBKYXZhIHdyYXBwZXIgZGlzYWJsZWQiKQorZW5kaWYoKQorCitzZXQoU09fQUdFIDApCitpZihXSVRIX01FTV9TUkNEU1QpCisgIHNldChTT19BR0UgMSkKIGVuZGlmKCkKIAogc2V0KEpQRUdfTElCX1ZFUlNJT04gNjIpCiBzZXQoRExMX1ZFUlNJT04gJHtKUEVHX0xJQl9WRVJTSU9OfSkKLXNldChGVUxMVkVSU0lPTiAke0RMTF9WRVJTSU9OfS4wLjApCitzZXQoRlVMTFZFUlNJT04gJHtETExfVkVSU0lPTn0uJHtTT19BR0V9LjApCiBpZihXSVRIX0pQRUc4KQogICBzZXQoSlBFR19MSUJfVkVSU0lPTiA4MCkKICAgc2V0KERMTF9WRVJTSU9OIDgpCkBAIC03OCwxMCArODgsMTcgQEAKIGVsc2VpZihXSVRIX0pQRUc3KQogICBzZXQoSlBFR19MSUJfVkVSU0lPTiA3MCkKICAgc2V0KERMTF9WRVJTSU9OIDcpCi0gIHNldChGVUxMVkVSU0lPTiAke0RMTF9WRVJTSU9OfS4wLjApCisgIHNldChGVUxMVkVSU0lPTiAke0RMTF9WRVJTSU9OfS4ke1NPX0FHRX0uMCkKICAgbWVzc2FnZShTVEFUVVMgIkVtdWxhdGluZyBsaWJqcGVnIHY3IEFQSS9BQkkiKQogZW5kaWYoV0lUSF9KUEVHOCkKIAoraWYoV0lUSF9NRU1fU1JDRFNUKQorICBzZXQoTUVNX1NSQ0RTVF9TVVBQT1JURUQgMSkKKyAgbWVzc2FnZShTVEFUVVMgIkluLW1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gbWFuYWdlcnMgZW5hYmxlZCIpCitlbHNlKCkKKyAgbWVzc2FnZShTVEFUVVMgIkluLW1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gbWFuYWdlcnMgZGlzYWJsZWQiKQorZW5kaWYoKQorCiBpZihNU1ZDKQogICAjIFVzZSB0aGUgc3RhdGljIEMgbGlicmFyeSBmb3IgYWxsIGJ1aWxkIHR5cGVzCiAgIGZvcmVhY2godmFyIENNQUtFX0NfRkxBR1MgQ01BS0VfQ19GTEFHU19ERUJVRyBDTUFLRV9DX0ZMQUdTX1JFTEVBU0UKQEAgLTEwOSw4ICsxMjYsMjQgQEAKICAgbWVzc2FnZShTVEFUVVMgIjMyLWJpdCBidWlsZCIpCiBlbmRpZigpCiAKK2lmKENNQUtFX0lOU1RBTExfUFJFRklYX0lOSVRJQUxJWkVEX1RPX0RFRkFVTFQpCisgIGlmKE1TVkMpCisgICAgc2V0KENNQUtFX0lOU1RBTExfUFJFRklYX0RFRkFVTFQgJHtDTUFLRV9QUk9KRUNUX05BTUV9KQorICBlbHNlKCkKKyAgICBzZXQoQ01BS0VfSU5TVEFMTF9QUkVGSVhfREVGQVVMVCAke0NNQUtFX1BST0pFQ1RfTkFNRX0tZ2NjKQorICBlbmRpZigpCisgIGlmKDY0QklUKQorICAgIHNldChDTUFLRV9JTlNUQUxMX1BSRUZJWF9ERUZBVUxUICR7Q01BS0VfSU5TVEFMTF9QUkVGSVhfREVGQVVMVH02NCkKKyAgZW5kaWYoKQorICBzZXQoQ01BS0VfSU5TVEFMTF9QUkVGSVggImM6LyR7Q01BS0VfSU5TVEFMTF9QUkVGSVhfREVGQVVMVH0iIENBQ0hFIFBBVEgKKyAgICAiRGlyZWN0b3J5IGludG8gd2hpY2ggdG8gaW5zdGFsbCBsaWJqcGVnLXR1cmJvIChkZWZhdWx0OiBjOi8ke0NNQUtFX0lOU1RBTExfUFJFRklYX0RFRkFVTFR9KSIKKyAgICBGT1JDRSkKK2VuZGlmKCkKKworbWVzc2FnZShTVEFUVVMgIkluc3RhbGwgZGlyZWN0b3J5ID0gJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0iKQorCiBjb25maWd1cmVfZmlsZSh3aW4vamNvbmZpZy5oLmluIGpjb25maWcuaCkKLWNvbmZpZ3VyZV9maWxlKHdpbi9jb25maWcuaC5pbiBjb25maWcuaCkKK2NvbmZpZ3VyZV9maWxlKHdpbi9qY29uZmlnaW50LmguaW4gamNvbmZpZ2ludC5oKQogCiBpbmNsdWRlX2RpcmVjdG9yaWVzKCR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfSAke0NNQUtFX1NPVVJDRV9ESVJ9KQogCkBAIC0yNDksNiArMjgyLDQwIEBACiBlbmRpZigpCiAKIGVuYWJsZV90ZXN0aW5nKCkKKworc2V0KE1ENV9KUEVHX0lOVCA5YTY4ZjU2YmM3NmU0NjZhYTdlNTJmNDE1ZDBmNGE1ZikKK3NldChNRDVfSlBFR19GQVNUIDBlMTUwMmU3ZmE0MjE4MzVlMzc2YTMxNGZhYzJhMzlmKQorc2V0KE1ENV9KUEVHX0ZBU1RfMTAwIDdiZjcyYThlNzQxZDY0ZWVjYjk2MGM5NzMyM2FmNzdjKQorc2V0KE1ENV9KUEVHX0ZMT0FUIGQxNjIzODg1ZmZhZmNkNDBjNjg0YWYwOWUzZDY1Y2Q1KQorc2V0KE1ENV9KUEVHX0ZMT0FUX05PU0lNRCBmYjQ4ODRjMzVmODI3M2Y0OThjYjMyODc5ZGU1YzQ1NSkKK3NldChNRDVfSlBFR19JTlRfR1JBWSA3MmI1MWY4OTRiOGY0YTEwYjNlZTMwNjY3NzBhYTM4ZCkKK3NldChNRDVfUFBNX0lOVCBkMWVkMGQxMWYwNzZiODQyNTI1MjcxNjQ3NzE2YWViOCkKK3NldChNRDVfUFBNX0ZBU1QgMDQ4Mjk4YTJkMjQxMDI2MWMwNTMzY2I5N2JjZmVmMjMpCitzZXQoTUQ1X1BQTV9GTE9BVCA3ZjViNDQ2ZWUzNmIyNjMwZTA2Nzg1YjhkNDJhZjE1ZikKK3NldChNRDVfUFBNX0ZMT0FUX05PU0lNRCA2NDA3MmYxZGJkYzViM2ExODc3Nzc3ODg2MDQ5NzFhNSkKK3NldChNRDVfUFBNX0lOVF8yXzEgOWY5ZGU4YzA2MTJmOGQwNjg2OWI5NjBiMDVhYmY5YzkpCitzZXQoTUQ1X1BQTV9JTlRfMTVfOCBiNjg3NWJjMDcwNzIwYjg5OTU2NmNjMDY0NTliNjNiNykKK3NldChNRDVfUFBNX0lOVF83XzQgMDZhMTc3ZWFlMDVmMTY0ZmFjNTdmN2EyYzM0NmVlODcpCitzZXQoTUQ1X1BQTV9JTlRfMTNfOCBiYzM0NTI1NzNjODE1MmY2YWU1NTI5MzllZTE5ZjgyZikKK3NldChNRDVfUFBNX0lOVF8zXzIgZjVhOGI4OGE4YTdmOTYwMTZmMDRkMjU5Y2Y4MmVkNjcpCitzZXQoTUQ1X1BQTV9JTlRfMTFfOCBkOGNjNzNjMGFhYWNkNDU1NjU2OWI1OTQzN2JhMDBhNSkKK3NldChNRDVfUFBNX0lOVF81XzQgMzI3NzVkZDlhZDJhYjkwZjRjNWIyMTliNTNlMGM4NmMpCitzZXQoTUQ1X1BQTV9JTlRfOV84IGQyNWU2MWJjN2VhYzAwMDJmNWIzOTNhYTIyMzc0N2I2KQorc2V0KE1ENV9QUE1fSU5UXzdfOCBkZGI1NjRiN2M3NGEwOTQ5NDAxNmQ2Y2Q3NTAyYTk0NikKK3NldChNRDVfUFBNX0lOVF8zXzQgOGVkOGU2ODgwOGMzZmJjNGVhNzY0ZmM5ZDI5Njg2NDYpCitzZXQoTUQ1X1BQTV9JTlRfNV84IGEzMzYzMjc0OTk5ZGEyMzY2YTAyNGVmYWU2ZDE2YzliKQorc2V0KE1ENV9QUE1fSU5UXzFfMiBlNjkyYTMxNWNlYTI2Yjk4OGM4ZThiMjlhNWRiY2Q4MSkKK3NldChNRDVfUFBNX0lOVF8zXzggNzllY2E5MTc1NjUyY2VkNzU1MTU1YzkwZTc4NWE5OTYpCitzZXQoTUQ1X1BQTV9JTlRfMV80IDc5Y2Q3NzhmOGJmMWExMTc2OTAwNTJjYWNkZDU0ZWNhKQorc2V0KE1ENV9QUE1fSU5UXzFfOCAzOTFiM2Q0YWNhNjQwYzg1NjdkNmY4NzQ1ZWIyMTQyZikKK3NldChNRDVfUFBNX0ZBU1RfMV8yIGYzMGJjZjZkMzJjY2Q0NGNiZGQ5YWVhYWNiZDk0NTRmKQorc2V0KE1ENV9CTVBfMjU2IDQ5ODAxODVlMzc3NmU4OWJkOTMxNzM2ZTFjZGRlZWU2KQorc2V0KE1ENV9KUEVHX0FSSSBlOTg2ZmIwYTYzN2E4ZDgzM2Q5NmU4YTZkNmQ4NGVhMSkKK3NldChNRDVfUFBNX0FSSSA3MmI1OWE5OWJjZjFkZTI0YzViMjdkMTUxYmRlMjQzNykKK3NldChNRDVfSlBFR19QUk9HIDFjNGFmZGRjMDVjMGE0MzQ4OWVlNTQ0MzhhNDgyZDkyKQorc2V0KE1ENV9KUEVHX1BST0dfQVJJIDBhOGYxYzhmNjZlMTEzYzNjZjYzNWRmMGE0NzVhNjE3KQorc2V0KE1ENV9KUEVHX0NST1AgYjQxOTdmMzc3ZTYyMWM0ZTliMWQyMDQ3MTQzMjYxMGQpCisKIGlmKFdJVEhfSkFWQSkKIGFkZF90ZXN0KFRKVW5pdFRlc3QgJHtKQVZBX1JVTlRJTUV9IC1jcCBqYXZhLyR7T0JKRElSfXR1cmJvanBlZy5qYXIgLURqYXZhLmxpYnJhcnkucGF0aD0ke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vJHtPQkpESVJ9IFRKVW5pdFRlc3QpCiBhZGRfdGVzdChUSlVuaXRUZXN0LXl1diAke0pBVkFfUlVOVElNRX0gLWNwIGphdmEvJHtPQkpESVJ9dHVyYm9qcGVnLmphciAtRGphdmEubGlicmFyeS5wYXRoPSR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS8ke09CSkRJUn0gVEpVbml0VGVzdCAteXV2KQpAQCAtMjU5LDEyNSArMzI2LDExNSBAQAogYWRkX3Rlc3QodGp1bml0dGVzdC1hbGxvYyB0anVuaXR0ZXN0IC1hbGxvYykKIGFkZF90ZXN0KHRqdW5pdHRlc3QteXV2IHRqdW5pdHRlc3QgLXl1dikKIGFkZF90ZXN0KGNqcGVnLWludCBzaGFyZWRsaWIvY2pwZWcgLWRjdCBpbnQgLW91dGZpbGUgdGVzdG91dGludC5qcGcgJHtDTUFLRV9TT1VSQ0VfRElSfS90ZXN0aW1hZ2VzL3Rlc3RvcmlnLnBwbSkKLWFkZF90ZXN0KGNqcGVnLWludC1jbXAgJHtDTUFLRV9DT01NQU5EfSAtRSBjb21wYXJlX2ZpbGVzICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdGltYWdlcy90ZXN0aW1naW50LmpwZyB0ZXN0b3V0aW50LmpwZykKK2FkZF90ZXN0KGNqcGVnLWludC1jbXAgJHtDTUFLRV9DT01NQU5EfSAtRE1ENT0ke01ENV9KUEVHX0lOVH0gLURGSUxFPXRlc3RvdXRpbnQuanBnIC1QICR7Q01BS0VfU09VUkNFX0RJUn0vY21ha2VzY3JpcHRzL21kNWNtcC5jbWFrZSkKIGFkZF90ZXN0KGNqcGVnLWZhc3Qgc2hhcmVkbGliL2NqcGVnIC1kY3QgZmFzdCAtb3B0IC1vdXRmaWxlIHRlc3RvdXRmc3QuanBnICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdGltYWdlcy90ZXN0b3JpZy5wcG0pCi1hZGRfdGVzdChjanBlZy1mYXN0LWNtcCAke0NNQUtFX0NPTU1BTkR9IC1FIGNvbXBhcmVfZmlsZXMgJHtDTUFLRV9TT1VSQ0VfRElSfS90ZXN0aW1hZ2VzL3Rlc3RpbWdmc3QuanBnIHRlc3RvdXRmc3QuanBnKQorYWRkX3Rlc3QoY2pwZWctZmFzdC1jbXAgJHtDTUFLRV9DT01NQU5EfSAtRE1ENT0ke01ENV9KUEVHX0ZBU1R9IC1ERklMRT10ZXN0b3V0ZnN0LmpwZyAtUCAke0NNQUtFX1NPVVJDRV9ESVJ9L2NtYWtlc2NyaXB0cy9tZDVjbXAuY21ha2UpCiBhZGRfdGVzdChjanBlZy1mYXN0LTEwMCBzaGFyZWRsaWIvY2pwZWcgLWRjdCBmYXN0IC1xdWFsaXR5IDEwMCAtb3B0IC1vdXRmaWxlIHRlc3RvdXRmc3QxMDAuanBnICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdGltYWdlcy90ZXN0b3JpZy5wcG0pCi1hZGRfdGVzdChjanBlZy1mYXN0LTEwMC1jbXAgJHtDTUFLRV9DT01NQU5EfSAtRSBjb21wYXJlX2ZpbGVzICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdGltYWdlcy90ZXN0aW1nZnN0MTAwLmpwZyB0ZXN0b3V0ZnN0MTAwLmpwZykKK2FkZF90ZXN0KGNqcGVnLWZhc3QtMTAwLWNtcCAke0NNQUtFX0NPTU1BTkR9IC1ETUQ1PSR7TUQ1X0pQRUdfRkFTVF8xMDB9IC1ERklMRT10ZXN0b3V0ZnN0MTAwLmpwZyAtUCAke0NNQUtFX1NPVVJDRV9ESVJ9L2NtYWtlc2NyaXB0cy9tZDVjbXAuY21ha2UpCiBhZGRfdGVzdChjanBlZy1mbG9hdCBzaGFyZWRsaWIvY2pwZWcgLWRjdCBmbG9hdCAtb3V0ZmlsZSB0ZXN0b3V0Zmx0LmpwZyAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RpbWFnZXMvdGVzdG9yaWcucHBtKQogaWYoV0lUSF9TSU1EKQotYWRkX3Rlc3QoY2pwZWctZmxvYXQtY21wICR7Q01BS0VfQ09NTUFORH0gLUUgY29tcGFyZV9maWxlcyAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RpbWFnZXMvdGVzdGltZ2ZsdC5qcGcgdGVzdG91dGZsdC5qcGcpCithZGRfdGVzdChjanBlZy1mbG9hdC1jbXAgJHtDTUFLRV9DT01NQU5EfSAtRE1ENT0ke01ENV9KUEVHX0ZMT0FUfSAtREZJTEU9dGVzdG91dGZsdC5qcGcgLVAgJHtDTUFLRV9TT1VSQ0VfRElSfS9jbWFrZXNjcmlwdHMvbWQ1Y21wLmNtYWtlKQogZWxzZSgpCi1hZGRfdGVzdChjanBlZy1mbG9hdC1jbXAgJHtDTUFLRV9DT01NQU5EfSAtRSBjb21wYXJlX2ZpbGVzICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdGltYWdlcy90ZXN0aW1nZmx0LW5vc2ltZC5qcGcgdGVzdG91dGZsdC5qcGcpCithZGRfdGVzdChjanBlZy1mbG9hdC1jbXAgJHtDTUFLRV9DT01NQU5EfSAtRE1ENT0ke01ENV9KUEVHX0ZMT0FUX05PU0lNRH0gLURGSUxFPXRlc3RvdXRmbHQuanBnIC1QICR7Q01BS0VfU09VUkNFX0RJUn0vY21ha2VzY3JpcHRzL21kNWNtcC5jbWFrZSkKIGVuZGlmKCkKIGFkZF90ZXN0KGNqcGVnLWludC1ncmF5IHNoYXJlZGxpYi9janBlZyAtZGN0IGludCAtZ3JheXNjYWxlIC1vdXRmaWxlIHRlc3RvdXRncmF5LmpwZyAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RpbWFnZXMvdGVzdG9yaWcucHBtKQotYWRkX3Rlc3QoY2pwZWctaW50LWdyYXktY21wICR7Q01BS0VfQ09NTUFORH0gLUUgY29tcGFyZV9maWxlcyAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RpbWFnZXMvdGVzdGltZ2dyYXkuanBnIHRlc3RvdXRncmF5LmpwZykKK2FkZF90ZXN0KGNqcGVnLWludC1ncmF5LWNtcCAke0NNQUtFX0NPTU1BTkR9IC1ETUQ1PSR7TUQ1X0pQRUdfSU5UX0dSQVl9IC1ERklMRT10ZXN0b3V0Z3JheS5qcGcgLVAgJHtDTUFLRV9TT1VSQ0VfRElSfS9jbWFrZXNjcmlwdHMvbWQ1Y21wLmNtYWtlKQogYWRkX3Rlc3QoZGpwZWctaW50IHNoYXJlZGxpYi9kanBlZyAtZGN0IGludCAtZmFzdCAtcHBtIC1vdXRmaWxlIHRlc3RvdXRpbnQucHBtICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdGltYWdlcy90ZXN0b3JpZy5qcGcpCi1hZGRfdGVzdChkanBlZy1pbnQtY21wICR7Q01BS0VfQ09NTUFORH0gLUUgY29tcGFyZV9maWxlcyAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RpbWFnZXMvdGVzdGltZ2ludC5wcG0gdGVzdG91dGludC5wcG0pCithZGRfdGVzdChkanBlZy1pbnQtY21wICR7Q01BS0VfQ09NTUFORH0gLURNRDU9JHtNRDVfUFBNX0lOVH0gLURGSUxFPXRlc3RvdXRpbnQucHBtIC1QICR7Q01BS0VfU09VUkNFX0RJUn0vY21ha2VzY3JpcHRzL21kNWNtcC5jbWFrZSkKIGFkZF90ZXN0KGRqcGVnLWZhc3Qgc2hhcmVkbGliL2RqcGVnIC1kY3QgZmFzdCAtcHBtIC1vdXRmaWxlIHRlc3RvdXRmc3QucHBtICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdGltYWdlcy90ZXN0b3JpZy5qcGcpCi1hZGRfdGVzdChkanBlZy1mYXN0LWNtcCAke0NNQUtFX0NPTU1BTkR9IC1FIGNvbXBhcmVfZmlsZXMgJHtDTUFLRV9TT1VSQ0VfRElSfS90ZXN0aW1hZ2VzL3Rlc3RpbWdmc3QucHBtIHRlc3RvdXRmc3QucHBtKQorYWRkX3Rlc3QoZGpwZWctZmFzdC1jbXAgJHtDTUFLRV9DT01NQU5EfSAtRE1ENT0ke01ENV9QUE1fRkFTVH0gLURGSUxFPXRlc3RvdXRmc3QucHBtIC1QICR7Q01BS0VfU09VUkNFX0RJUn0vY21ha2VzY3JpcHRzL21kNWNtcC5jbWFrZSkKIGFkZF90ZXN0KGRqcGVnLWZsb2F0IHNoYXJlZGxpYi9kanBlZyAtZGN0IGZsb2F0IC1wcG0gLW91dGZpbGUgdGVzdG91dGZsdC5wcG0gJHtDTUFLRV9TT1VSQ0VfRElSfS90ZXN0aW1hZ2VzL3Rlc3RvcmlnLmpwZykKIGlmKFdJVEhfU0lNRCkKLWFkZF90ZXN0KGRqcGVnLWZsb2F0LWNtcCAke0NNQUtFX0NPTU1BTkR9IC1FIGNvbXBhcmVfZmlsZXMgJHtDTUFLRV9TT1VSQ0VfRElSfS90ZXN0aW1hZ2VzL3Rlc3RpbWdmbHQucHBtIHRlc3RvdXRmbHQucHBtKQorYWRkX3Rlc3QoZGpwZWctZmxvYXQtY21wICR7Q01BS0VfQ09NTUFORH0gLURNRDU9JHtNRDVfUFBNX0ZMT0FUfSAtREZJTEU9dGVzdG91dGZsdC5wcG0gLVAgJHtDTUFLRV9TT1VSQ0VfRElSfS9jbWFrZXNjcmlwdHMvbWQ1Y21wLmNtYWtlKQogZWxzZSgpCi1hZGRfdGVzdChkanBlZy1mbG9hdC1jbXAgJHtDTUFLRV9DT01NQU5EfSAtRSBjb21wYXJlX2ZpbGVzICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdGltYWdlcy90ZXN0b3JpZy5wcG0gdGVzdG91dGZsdC5wcG0pCithZGRfdGVzdChkanBlZy1mbG9hdC1jbXAgJHtDTUFLRV9DT01NQU5EfSAtRE1ENT0ke01ENV9QUE1fRkxPQVRfTk9TSU1EfSAtREZJTEU9dGVzdG91dGZsdC5wcG0gLVAgJHtDTUFLRV9TT1VSQ0VfRElSfS9jbWFrZXNjcmlwdHMvbWQ1Y21wLmNtYWtlKQogZW5kaWYoKQotYWRkX3Rlc3QoZGpwZWctaW50LTFfMiBzaGFyZWRsaWIvZGpwZWcgLWRjdCBpbnQgLXNjYWxlIDEvMiAtcHBtIC1vdXRmaWxlIHRlc3RvdXRpbnQxXzIucHBtICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdGltYWdlcy90ZXN0b3JpZy5qcGcpCi1hZGRfdGVzdChkanBlZy1pbnQtMV8yLWNtcCAke0NNQUtFX0NPTU1BTkR9IC1FIGNvbXBhcmVfZmlsZXMgJHtDTUFLRV9TT1VSQ0VfRElSfS90ZXN0aW1hZ2VzL3Rlc3RpbWdpbnQxXzIucHBtIHRlc3RvdXRpbnQxXzIucHBtKQorZm9yZWFjaChzY2FsZSAyXzEgMTVfOCA3XzQgMTNfOCAzXzIgMTFfOCA1XzQgOV84IDdfOCAzXzQgNV84IDFfMiAzXzggMV80IDFfOCkKK3N0cmluZyhSRUdFWCBSRVBMQUNFICJfIiAiLyIgc2NhbGVhcmcgJHtzY2FsZX0pCithZGRfdGVzdChkanBlZy1pbnQtJHtzY2FsZX0gc2hhcmVkbGliL2RqcGVnIC1kY3QgaW50IC1ub3Ntb290aCAtc2NhbGUgJHtzY2FsZWFyZ30gLXBwbSAtb3V0ZmlsZSB0ZXN0b3V0aW50JHtzY2FsZX0ucHBtICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdGltYWdlcy90ZXN0b3JpZy5qcGcpCithZGRfdGVzdChkanBlZy1pbnQtJHtzY2FsZX0tY21wICR7Q01BS0VfQ09NTUFORH0gLURNRDU9JHtNRDVfUFBNX0lOVF8ke3NjYWxlfX0gLURGSUxFPXRlc3RvdXRpbnQke3NjYWxlfS5wcG0gLVAgJHtDTUFLRV9TT1VSQ0VfRElSfS9jbWFrZXNjcmlwdHMvbWQ1Y21wLmNtYWtlKQorZW5kZm9yZWFjaCgpCiBhZGRfdGVzdChkanBlZy1mYXN0LTFfMiBzaGFyZWRsaWIvZGpwZWcgLWRjdCBmYXN0IC1zY2FsZSAxLzIgLXBwbSAtb3V0ZmlsZSB0ZXN0b3V0ZnN0MV8yLnBwbSAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RpbWFnZXMvdGVzdG9yaWcuanBnKQotYWRkX3Rlc3QoZGpwZWctZmFzdC0xXzItY21wICR7Q01BS0VfQ09NTUFORH0gLUUgY29tcGFyZV9maWxlcyAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RpbWFnZXMvdGVzdGltZ2ZzdDFfMi5wcG0gdGVzdG91dGZzdDFfMi5wcG0pCi1hZGRfdGVzdChkanBlZy1pbnQtMV80IHNoYXJlZGxpYi9kanBlZyAtZGN0IGludCAtc2NhbGUgMS80IC1wcG0gLW91dGZpbGUgdGVzdG91dGludDFfNC5wcG0gJHtDTUFLRV9TT1VSQ0VfRElSfS90ZXN0aW1hZ2VzL3Rlc3RvcmlnLmpwZykKLWFkZF90ZXN0KGRqcGVnLWludC0xXzQtY21wICR7Q01BS0VfQ09NTUFORH0gLUUgY29tcGFyZV9maWxlcyAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RpbWFnZXMvdGVzdGltZ2ludDFfNC5wcG0gdGVzdG91dGludDFfNC5wcG0pCi1hZGRfdGVzdChkanBlZy1mYXN0LTFfNCBzaGFyZWRsaWIvZGpwZWcgLWRjdCBmYXN0IC1zY2FsZSAxLzQgLXBwbSAtb3V0ZmlsZSB0ZXN0b3V0ZnN0MV80LnBwbSAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RpbWFnZXMvdGVzdG9yaWcuanBnKQotYWRkX3Rlc3QoZGpwZWctZmFzdC0xXzQtY21wICR7Q01BS0VfQ09NTUFORH0gLUUgY29tcGFyZV9maWxlcyAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RpbWFnZXMvdGVzdGltZ2ZzdDFfNC5wcG0gdGVzdG91dGZzdDFfNC5wcG0pCi1hZGRfdGVzdChkanBlZy1pbnQtMV84IHNoYXJlZGxpYi9kanBlZyAtZGN0IGludCAtc2NhbGUgMS84IC1wcG0gLW91dGZpbGUgdGVzdG91dGludDFfOC5wcG0gJHtDTUFLRV9TT1VSQ0VfRElSfS90ZXN0aW1hZ2VzL3Rlc3RvcmlnLmpwZykKLWFkZF90ZXN0KGRqcGVnLWludC0xXzgtY21wICR7Q01BS0VfQ09NTUFORH0gLUUgY29tcGFyZV9maWxlcyAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RpbWFnZXMvdGVzdGltZ2ludDFfOC5wcG0gdGVzdG91dGludDFfOC5wcG0pCi1hZGRfdGVzdChkanBlZy1mYXN0LTFfOCBzaGFyZWRsaWIvZGpwZWcgLWRjdCBmYXN0IC1zY2FsZSAxLzggLXBwbSAtb3V0ZmlsZSB0ZXN0b3V0ZnN0MV84LnBwbSAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RpbWFnZXMvdGVzdG9yaWcuanBnKQotYWRkX3Rlc3QoZGpwZWctZmFzdC0xXzgtY21wICR7Q01BS0VfQ09NTUFORH0gLUUgY29tcGFyZV9maWxlcyAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RpbWFnZXMvdGVzdGltZ2ZzdDFfOC5wcG0gdGVzdG91dGZzdDFfOC5wcG0pCithZGRfdGVzdChkanBlZy1mYXN0LTFfMi1jbXAgJHtDTUFLRV9DT01NQU5EfSAtRE1ENT0ke01ENV9QUE1fRkFTVF8xXzJ9IC1ERklMRT10ZXN0b3V0ZnN0MV8yLnBwbSAtUCAke0NNQUtFX1NPVVJDRV9ESVJ9L2NtYWtlc2NyaXB0cy9tZDVjbXAuY21ha2UpCiBhZGRfdGVzdChkanBlZy0yNTYgc2hhcmVkbGliL2RqcGVnIC1kY3QgaW50IC1ibXAgLWNvbG9ycyAyNTYgLW91dGZpbGUgdGVzdG91dC5ibXAgICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdGltYWdlcy90ZXN0b3JpZy5qcGcpCi1hZGRfdGVzdChkanBlZy0yNTYtY21wICR7Q01BS0VfQ09NTUFORH0gLUUgY29tcGFyZV9maWxlcyAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RpbWFnZXMvdGVzdGltZy5ibXAgdGVzdG91dC5ibXApCithZGRfdGVzdChkanBlZy0yNTYtY21wICR7Q01BS0VfQ09NTUFORH0gLURNRDU9JHtNRDVfQk1QXzI1Nn0gLURGSUxFPXRlc3RvdXQuYm1wIC1QICR7Q01BS0VfU09VUkNFX0RJUn0vY21ha2VzY3JpcHRzL21kNWNtcC5jbWFrZSkKIGFkZF90ZXN0KGNqcGVnLXByb2cgc2hhcmVkbGliL2NqcGVnIC1kY3QgaW50IC1wcm9ncmVzc2l2ZSAtb3V0ZmlsZSB0ZXN0b3V0cC5qcGcgJHtDTUFLRV9TT1VSQ0VfRElSfS90ZXN0aW1hZ2VzL3Rlc3RvcmlnLnBwbSkKLWFkZF90ZXN0KGNqcGVnLXByb2ctY21wICR7Q01BS0VfQ09NTUFORH0gLUUgY29tcGFyZV9maWxlcyAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RpbWFnZXMvdGVzdGltZ3AuanBnIHRlc3RvdXRwLmpwZykKK2FkZF90ZXN0KGNqcGVnLXByb2ctY21wICR7Q01BS0VfQ09NTUFORH0gLURNRDU9JHtNRDVfSlBFR19QUk9HfSAtREZJTEU9dGVzdG91dHAuanBnIC1QICR7Q01BS0VfU09VUkNFX0RJUn0vY21ha2VzY3JpcHRzL21kNWNtcC5jbWFrZSkKIGFkZF90ZXN0KGpwZWd0cmFuLXByb2cgc2hhcmVkbGliL2pwZWd0cmFuIC1vdXRmaWxlIHRlc3RvdXR0LmpwZyB0ZXN0b3V0cC5qcGcpCi1hZGRfdGVzdChqcGVndHJhbi1wcm9nLWNtcCAke0NNQUtFX0NPTU1BTkR9IC1FIGNvbXBhcmVfZmlsZXMgJHtDTUFLRV9TT1VSQ0VfRElSfS90ZXN0aW1hZ2VzL3Rlc3RpbWdpbnQuanBnIHRlc3RvdXR0LmpwZykKK2FkZF90ZXN0KGpwZWd0cmFuLXByb2ctY21wICR7Q01BS0VfQ09NTUFORH0gLURNRDU9JHtNRDVfSlBFR19JTlR9IC1ERklMRT10ZXN0b3V0dC5qcGcgLVAgJHtDTUFLRV9TT1VSQ0VfRElSfS9jbWFrZXNjcmlwdHMvbWQ1Y21wLmNtYWtlKQogaWYoV0lUSF9BUklUSF9FTkMpCiBhZGRfdGVzdChjanBlZy1hcmkgc2hhcmVkbGliL2NqcGVnIC1kY3QgaW50IC1hcml0aG1ldGljIC1vdXRmaWxlIHRlc3RvdXRhcmkuanBnICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdGltYWdlcy90ZXN0b3JpZy5wcG0pCi1hZGRfdGVzdChjanBlZy1hcmktY21wICR7Q01BS0VfQ09NTUFORH0gLUUgY29tcGFyZV9maWxlcyAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RpbWFnZXMvdGVzdGltZ2FyaS5qcGcgdGVzdG91dGFyaS5qcGcpCithZGRfdGVzdChjanBlZy1hcmktY21wICR7Q01BS0VfQ09NTUFORH0gLURNRDU9JHtNRDVfSlBFR19BUkl9IC1ERklMRT10ZXN0b3V0YXJpLmpwZyAtUCAke0NNQUtFX1NPVVJDRV9ESVJ9L2NtYWtlc2NyaXB0cy9tZDVjbXAuY21ha2UgKQogYWRkX3Rlc3QoanBlZ3RyYW4tdG9hcmkgc2hhcmVkbGliL2pwZWd0cmFuIC1hcml0aG1ldGljIC1vdXRmaWxlIHRlc3RvdXRhLmpwZyAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RpbWFnZXMvdGVzdGltZ2ludC5qcGcpCi1hZGRfdGVzdChqcGVndHJhbi10b2FyaS1jbXAgJHtDTUFLRV9DT01NQU5EfSAtRSBjb21wYXJlX2ZpbGVzICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdGltYWdlcy90ZXN0aW1nYXJpLmpwZyB0ZXN0b3V0YS5qcGcpCithZGRfdGVzdChqcGVndHJhbi10b2FyaS1jbXAgJHtDTUFLRV9DT01NQU5EfSAtRE1ENT0ke01ENV9KUEVHX0FSSX0gLURGSUxFPXRlc3RvdXRhLmpwZyAtUCAke0NNQUtFX1NPVVJDRV9ESVJ9L2NtYWtlc2NyaXB0cy9tZDVjbXAuY21ha2UpCiBhZGRfdGVzdChjanBlZy1wcm9nLWFyaSBzaGFyZWRsaWIvY2pwZWcgLWRjdCBpbnQgLXByb2dyZXNzaXZlIC1hcml0aG1ldGljIC1zYW1wbGUgMXgxIC1vdXRmaWxlIHRlc3RvdXRwYS5qcGcgJHtDTUFLRV9TT1VSQ0VfRElSfS90ZXN0aW1hZ2VzL3Rlc3RvcmlnLnBwbSkKLWFkZF90ZXN0KGNqcGVnLXByb2ctYXJpLWNtcCAke0NNQUtFX0NPTU1BTkR9IC1FIGNvbXBhcmVfZmlsZXMgJHtDTUFLRV9TT1VSQ0VfRElSfS90ZXN0aW1hZ2VzL3Rlc3RpbWdwYS5qcGcgdGVzdG91dHBhLmpwZykKK2FkZF90ZXN0KGNqcGVnLXByb2ctYXJpLWNtcCAke0NNQUtFX0NPTU1BTkR9IC1ETUQ1PSR7TUQ1X0pQRUdfUFJPR19BUkl9IC1ERklMRT10ZXN0b3V0cGEuanBnIC1QICR7Q01BS0VfU09VUkNFX0RJUn0vY21ha2VzY3JpcHRzL21kNWNtcC5jbWFrZSApCiBlbmRpZigpCiBpZihXSVRIX0FSSVRIX0RFQykKIGFkZF90ZXN0KGRqcGVnLWFyaSBzaGFyZWRsaWIvZGpwZWcgLWRjdCBpbnQgLWZhc3QgLXBwbSAtb3V0ZmlsZSB0ZXN0b3V0YXJpLnBwbSAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RpbWFnZXMvdGVzdGltZ2FyaS5qcGcpCi1hZGRfdGVzdChkanBlZy1hcmktY21wICR7Q01BS0VfQ09NTUFORH0gLUUgY29tcGFyZV9maWxlcyAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RpbWFnZXMvdGVzdGltZ2FyaS5wcG0gdGVzdG91dGFyaS5wcG0pCithZGRfdGVzdChkanBlZy1hcmktY21wICR7Q01BS0VfQ09NTUFORH0gLURNRDU9JHtNRDVfUFBNX0FSSX0gLURGSUxFPXRlc3RvdXRhcmkucHBtIC1QICR7Q01BS0VfU09VUkNFX0RJUn0vY21ha2VzY3JpcHRzL21kNWNtcC5jbWFrZSkKIGFkZF90ZXN0KGpwZWd0cmFuLWZyb21hcmkJc2hhcmVkbGliL2pwZWd0cmFuIC1vdXRmaWxlIHRlc3RvdXRhLmpwZyAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RpbWFnZXMvdGVzdGltZ2FyaS5qcGcpCi1hZGRfdGVzdChqcGVndHJhbi1mcm9tYXJpLWNtcCAke0NNQUtFX0NPTU1BTkR9IC1FIGNvbXBhcmVfZmlsZXMgJHtDTUFLRV9TT1VSQ0VfRElSfS90ZXN0aW1hZ2VzL3Rlc3RpbWdpbnQuanBnIHRlc3RvdXRhLmpwZykKK2FkZF90ZXN0KGpwZWd0cmFuLWZyb21hcmktY21wICR7Q01BS0VfQ09NTUFORH0gLURNRDU9JHtNRDVfSlBFR19JTlR9IC1ERklMRT10ZXN0b3V0YS5qcGcgLVAgJHtDTUFLRV9TT1VSQ0VfRElSfS9jbWFrZXNjcmlwdHMvbWQ1Y21wLmNtYWtlKQogZW5kaWYoKQogYWRkX3Rlc3QoanBlZ3RyYW4tY3JvcCBzaGFyZWRsaWIvanBlZ3RyYW4gLWNyb3AgMTIweDkwKzIwKzUwIC10cmFuc3Bvc2UgLXBlcmZlY3QgLW91dGZpbGUgdGVzdG91dGNyb3AuanBnICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdGltYWdlcy90ZXN0b3JpZy5qcGcpCi1hZGRfdGVzdChqcGVndHJhbi1jcm9wLWNtcCAke0NNQUtFX0NPTU1BTkR9IC1FIGNvbXBhcmVfZmlsZXMgJHtDTUFLRV9TT1VSQ0VfRElSfS90ZXN0aW1hZ2VzL3Rlc3RpbWdjcm9wLmpwZyB0ZXN0b3V0Y3JvcC5qcGcpCithZGRfdGVzdChqcGVndHJhbi1jcm9wLWNtcCAke0NNQUtFX0NPTU1BTkR9IC1ETUQ1PSR7TUQ1X0pQRUdfQ1JPUH0gLURGSUxFPXRlc3RvdXRjcm9wLmpwZyAtUCAke0NNQUtFX1NPVVJDRV9ESVJ9L2NtYWtlc2NyaXB0cy9tZDVjbXAuY21ha2UpCiAKIGFkZF90ZXN0KHRqdW5pdHRlc3Qtc3RhdGljIHRqdW5pdHRlc3Qtc3RhdGljKQogYWRkX3Rlc3QodGp1bml0dGVzdC1zdGF0aWMtYWxsb2MgdGp1bml0dGVzdC1zdGF0aWMgLWFsbG9jKQogYWRkX3Rlc3QodGp1bml0dGVzdC1zdGF0aWMteXV2IHRqdW5pdHRlc3Qtc3RhdGljIC15dXYpCiBhZGRfdGVzdChjanBlZy1zdGF0aWMtaW50IGNqcGVnLXN0YXRpYyAtZGN0IGludCAtb3V0ZmlsZSB0ZXN0b3V0aW50LmpwZyAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RpbWFnZXMvdGVzdG9yaWcucHBtKQotYWRkX3Rlc3QoY2pwZWctc3RhdGljLWludC1jbXAgJHtDTUFLRV9DT01NQU5EfSAtRSBjb21wYXJlX2ZpbGVzICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdGltYWdlcy90ZXN0aW1naW50LmpwZyB0ZXN0b3V0aW50LmpwZykKK2FkZF90ZXN0KGNqcGVnLXN0YXRpYy1pbnQtY21wICR7Q01BS0VfQ09NTUFORH0gLURNRDU9JHtNRDVfSlBFR19JTlR9IC1ERklMRT10ZXN0b3V0aW50LmpwZyAtUCAke0NNQUtFX1NPVVJDRV9ESVJ9L2NtYWtlc2NyaXB0cy9tZDVjbXAuY21ha2UpCiBhZGRfdGVzdChjanBlZy1zdGF0aWMtZmFzdCBjanBlZy1zdGF0aWMgLWRjdCBmYXN0IC1vcHQgLW91dGZpbGUgdGVzdG91dGZzdC5qcGcgJHtDTUFLRV9TT1VSQ0VfRElSfS90ZXN0aW1hZ2VzL3Rlc3RvcmlnLnBwbSkKLWFkZF90ZXN0KGNqcGVnLXN0YXRpYy1mYXN0LWNtcCAke0NNQUtFX0NPTU1BTkR9IC1FIGNvbXBhcmVfZmlsZXMgJHtDTUFLRV9TT1VSQ0VfRElSfS90ZXN0aW1hZ2VzL3Rlc3RpbWdmc3QuanBnIHRlc3RvdXRmc3QuanBnKQorYWRkX3Rlc3QoY2pwZWctc3RhdGljLWZhc3QtY21wICR7Q01BS0VfQ09NTUFORH0gLURNRDU9JHtNRDVfSlBFR19GQVNUfSAtREZJTEU9dGVzdG91dGZzdC5qcGcgLVAgJHtDTUFLRV9TT1VSQ0VfRElSfS9jbWFrZXNjcmlwdHMvbWQ1Y21wLmNtYWtlKQogYWRkX3Rlc3QoY2pwZWctc3RhdGljLWZhc3QtMTAwIGNqcGVnLXN0YXRpYyAtZGN0IGZhc3QgLXF1YWxpdHkgMTAwIC1vcHQgLW91dGZpbGUgdGVzdG91dGZzdDEwMC5qcGcgJHtDTUFLRV9TT1VSQ0VfRElSfS90ZXN0aW1hZ2VzL3Rlc3RvcmlnLnBwbSkKLWFkZF90ZXN0KGNqcGVnLXN0YXRpYy1mYXN0LTEwMC1jbXAgJHtDTUFLRV9DT01NQU5EfSAtRSBjb21wYXJlX2ZpbGVzICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdGltYWdlcy90ZXN0aW1nZnN0MTAwLmpwZyB0ZXN0b3V0ZnN0MTAwLmpwZykKK2FkZF90ZXN0KGNqcGVnLXN0YXRpYy1mYXN0LTEwMC1jbXAgJHtDTUFLRV9DT01NQU5EfSAtRE1ENT0ke01ENV9KUEVHX0ZBU1RfMTAwfSAtREZJTEU9dGVzdG91dGZzdDEwMC5qcGcgLVAgJHtDTUFLRV9TT1VSQ0VfRElSfS9jbWFrZXNjcmlwdHMvbWQ1Y21wLmNtYWtlKQogYWRkX3Rlc3QoY2pwZWctc3RhdGljLWZsb2F0IGNqcGVnLXN0YXRpYyAtZGN0IGZsb2F0IC1vdXRmaWxlIHRlc3RvdXRmbHQuanBnICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdGltYWdlcy90ZXN0b3JpZy5wcG0pCiBpZihXSVRIX1NJTUQpCi1hZGRfdGVzdChjanBlZy1zdGF0aWMtZmxvYXQtY21wICR7Q01BS0VfQ09NTUFORH0gLUUgY29tcGFyZV9maWxlcyAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RpbWFnZXMvdGVzdGltZ2ZsdC5qcGcgdGVzdG91dGZsdC5qcGcpCithZGRfdGVzdChjanBlZy1zdGF0aWMtZmxvYXQtY21wICR7Q01BS0VfQ09NTUFORH0gLURNRDU9JHtNRDVfSlBFR19GTE9BVH0gLURGSUxFPXRlc3RvdXRmbHQuanBnIC1QICR7Q01BS0VfU09VUkNFX0RJUn0vY21ha2VzY3JpcHRzL21kNWNtcC5jbWFrZSkKIGVsc2UoKQotYWRkX3Rlc3QoY2pwZWctc3RhdGljLWZsb2F0LWNtcCAke0NNQUtFX0NPTU1BTkR9IC1FIGNvbXBhcmVfZmlsZXMgJHtDTUFLRV9TT1VSQ0VfRElSfS90ZXN0aW1hZ2VzL3Rlc3RpbWdmbHQtbm9zaW1kLmpwZyB0ZXN0b3V0Zmx0LmpwZykKK2FkZF90ZXN0KGNqcGVnLXN0YXRpYy1mbG9hdC1jbXAgJHtDTUFLRV9DT01NQU5EfSAtRE1ENT0ke01ENV9KUEVHX0ZMT0FUX05PU0lNRH0gLURGSUxFPXRlc3RvdXRmbHQuanBnIC1QICR7Q01BS0VfU09VUkNFX0RJUn0vY21ha2VzY3JpcHRzL21kNWNtcC5jbWFrZSkKIGVuZGlmKCkKIGFkZF90ZXN0KGNqcGVnLXN0YXRpYy1pbnQtZ3JheSBjanBlZy1zdGF0aWMgLWRjdCBpbnQgLWdyYXlzY2FsZSAtb3V0ZmlsZSB0ZXN0b3V0Z3JheS5qcGcgJHtDTUFLRV9TT1VSQ0VfRElSfS90ZXN0aW1hZ2VzL3Rlc3RvcmlnLnBwbSkKLWFkZF90ZXN0KGNqcGVnLXN0YXRpYy1pbnQtZ3JheS1jbXAgJHtDTUFLRV9DT01NQU5EfSAtRSBjb21wYXJlX2ZpbGVzICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdGltYWdlcy90ZXN0aW1nZ3JheS5qcGcgdGVzdG91dGdyYXkuanBnKQorYWRkX3Rlc3QoY2pwZWctc3RhdGljLWludC1ncmF5LWNtcCAke0NNQUtFX0NPTU1BTkR9IC1ETUQ1PSR7TUQ1X0pQRUdfSU5UX0dSQVl9IC1ERklMRT10ZXN0b3V0Z3JheS5qcGcgLVAgJHtDTUFLRV9TT1VSQ0VfRElSfS9jbWFrZXNjcmlwdHMvbWQ1Y21wLmNtYWtlKQogYWRkX3Rlc3QoZGpwZWctc3RhdGljLWludCBkanBlZy1zdGF0aWMgLWRjdCBpbnQgLWZhc3QgLXBwbSAtb3V0ZmlsZSB0ZXN0b3V0aW50LnBwbSAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RpbWFnZXMvdGVzdG9yaWcuanBnKQotYWRkX3Rlc3QoZGpwZWctc3RhdGljLWludC1jbXAgJHtDTUFLRV9DT01NQU5EfSAtRSBjb21wYXJlX2ZpbGVzICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdGltYWdlcy90ZXN0aW1naW50LnBwbSB0ZXN0b3V0aW50LnBwbSkKK2FkZF90ZXN0KGRqcGVnLXN0YXRpYy1pbnQtY21wICR7Q01BS0VfQ09NTUFORH0gLURNRDU9JHtNRDVfUFBNX0lOVH0gLURGSUxFPXRlc3RvdXRpbnQucHBtIC1QICR7Q01BS0VfU09VUkNFX0RJUn0vY21ha2VzY3JpcHRzL21kNWNtcC5jbWFrZSkKIGFkZF90ZXN0KGRqcGVnLXN0YXRpYy1mYXN0IGRqcGVnLXN0YXRpYyAtZGN0IGZhc3QgLXBwbSAtb3V0ZmlsZSB0ZXN0b3V0ZnN0LnBwbSAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RpbWFnZXMvdGVzdG9yaWcuanBnKQotYWRkX3Rlc3QoZGpwZWctc3RhdGljLWZhc3QtY21wICR7Q01BS0VfQ09NTUFORH0gLUUgY29tcGFyZV9maWxlcyAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RpbWFnZXMvdGVzdGltZ2ZzdC5wcG0gdGVzdG91dGZzdC5wcG0pCithZGRfdGVzdChkanBlZy1zdGF0aWMtZmFzdC1jbXAgJHtDTUFLRV9DT01NQU5EfSAtRE1ENT0ke01ENV9QUE1fRkFTVH0gLURGSUxFPXRlc3RvdXRmc3QucHBtIC1QICR7Q01BS0VfU09VUkNFX0RJUn0vY21ha2VzY3JpcHRzL21kNWNtcC5jbWFrZSkKIGFkZF90ZXN0KGRqcGVnLXN0YXRpYy1mbG9hdCBkanBlZy1zdGF0aWMgLWRjdCBmbG9hdCAtcHBtIC1vdXRmaWxlIHRlc3RvdXRmbHQucHBtICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdGltYWdlcy90ZXN0b3JpZy5qcGcpCiBpZihXSVRIX1NJTUQpCi1hZGRfdGVzdChkanBlZy1zdGF0aWMtZmxvYXQtY21wICR7Q01BS0VfQ09NTUFORH0gLUUgY29tcGFyZV9maWxlcyAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RpbWFnZXMvdGVzdGltZ2ZsdC5wcG0gdGVzdG91dGZsdC5wcG0pCithZGRfdGVzdChkanBlZy1zdGF0aWMtZmxvYXQtY21wICR7Q01BS0VfQ09NTUFORH0gLURNRDU9JHtNRDVfUFBNX0ZMT0FUfSAtREZJTEU9dGVzdG91dGZsdC5wcG0gLVAgJHtDTUFLRV9TT1VSQ0VfRElSfS9jbWFrZXNjcmlwdHMvbWQ1Y21wLmNtYWtlKQogZWxzZSgpCi1hZGRfdGVzdChkanBlZy1zdGF0aWMtZmxvYXQtY21wICR7Q01BS0VfQ09NTUFORH0gLUUgY29tcGFyZV9maWxlcyAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RpbWFnZXMvdGVzdG9yaWcucHBtIHRlc3RvdXRmbHQucHBtKQorYWRkX3Rlc3QoZGpwZWctc3RhdGljLWZsb2F0LWNtcCAke0NNQUtFX0NPTU1BTkR9IC1ETUQ1PSR7TUQ1X1BQTV9GTE9BVF9OT1NJTUR9IC1ERklMRT10ZXN0b3V0Zmx0LnBwbSAtUCAke0NNQUtFX1NPVVJDRV9ESVJ9L2NtYWtlc2NyaXB0cy9tZDVjbXAuY21ha2UpCiBlbmRpZigpCi1hZGRfdGVzdChkanBlZy1zdGF0aWMtaW50LTFfMiBkanBlZy1zdGF0aWMgLWRjdCBpbnQgLXNjYWxlIDEvMiAtcHBtIC1vdXRmaWxlIHRlc3RvdXRpbnQxXzIucHBtICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdGltYWdlcy90ZXN0b3JpZy5qcGcpCi1hZGRfdGVzdChkanBlZy1zdGF0aWMtaW50LTFfMi1jbXAgJHtDTUFLRV9DT01NQU5EfSAtRSBjb21wYXJlX2ZpbGVzICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdGltYWdlcy90ZXN0aW1naW50MV8yLnBwbSB0ZXN0b3V0aW50MV8yLnBwbSkKK2ZvcmVhY2goc2NhbGUgMl8xIDE1XzggN180IDEzXzggM18yIDExXzggNV80IDlfOCA3XzggM180IDVfOCAxXzIgM184IDFfNCAxXzgpCitzdHJpbmcoUkVHRVggUkVQTEFDRSAiXyIgIi8iIHNjYWxlYXJnICR7c2NhbGV9KQorYWRkX3Rlc3QoZGpwZWctc3RhdGljLWludC0ke3NjYWxlfSBkanBlZy1zdGF0aWMgLWRjdCBpbnQgLW5vc21vb3RoIC1zY2FsZSAke3NjYWxlYXJnfSAtcHBtIC1vdXRmaWxlIHRlc3RvdXRpbnQke3NjYWxlfS5wcG0gJHtDTUFLRV9TT1VSQ0VfRElSfS90ZXN0aW1hZ2VzL3Rlc3RvcmlnLmpwZykKK2FkZF90ZXN0KGRqcGVnLXN0YXRpYy1pbnQtJHtzY2FsZX0tY21wICR7Q01BS0VfQ09NTUFORH0gLURNRDU9JHtNRDVfUFBNX0lOVF8ke3NjYWxlfX0gLURGSUxFPXRlc3RvdXRpbnQke3NjYWxlfS5wcG0gLVAgJHtDTUFLRV9TT1VSQ0VfRElSfS9jbWFrZXNjcmlwdHMvbWQ1Y21wLmNtYWtlKQorZW5kZm9yZWFjaCgpCiBhZGRfdGVzdChkanBlZy1zdGF0aWMtZmFzdC0xXzIgZGpwZWctc3RhdGljIC1kY3QgZmFzdCAtc2NhbGUgMS8yIC1wcG0gLW91dGZpbGUgdGVzdG91dGZzdDFfMi5wcG0gJHtDTUFLRV9TT1VSQ0VfRElSfS90ZXN0aW1hZ2VzL3Rlc3RvcmlnLmpwZykKLWFkZF90ZXN0KGRqcGVnLXN0YXRpYy1mYXN0LTFfMi1jbXAgJHtDTUFLRV9DT01NQU5EfSAtRSBjb21wYXJlX2ZpbGVzICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdGltYWdlcy90ZXN0aW1nZnN0MV8yLnBwbSB0ZXN0b3V0ZnN0MV8yLnBwbSkKLWFkZF90ZXN0KGRqcGVnLXN0YXRpYy1pbnQtMV80IGRqcGVnLXN0YXRpYyAtZGN0IGludCAtc2NhbGUgMS80IC1wcG0gLW91dGZpbGUgdGVzdG91dGludDFfNC5wcG0gJHtDTUFLRV9TT1VSQ0VfRElSfS90ZXN0aW1hZ2VzL3Rlc3RvcmlnLmpwZykKLWFkZF90ZXN0KGRqcGVnLXN0YXRpYy1pbnQtMV80LWNtcCAke0NNQUtFX0NPTU1BTkR9IC1FIGNvbXBhcmVfZmlsZXMgJHtDTUFLRV9TT1VSQ0VfRElSfS90ZXN0aW1hZ2VzL3Rlc3RpbWdpbnQxXzQucHBtIHRlc3RvdXRpbnQxXzQucHBtKQotYWRkX3Rlc3QoZGpwZWctc3RhdGljLWZhc3QtMV80IGRqcGVnLXN0YXRpYyAtZGN0IGZhc3QgLXNjYWxlIDEvNCAtcHBtIC1vdXRmaWxlIHRlc3RvdXRmc3QxXzQucHBtICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdGltYWdlcy90ZXN0b3JpZy5qcGcpCi1hZGRfdGVzdChkanBlZy1zdGF0aWMtZmFzdC0xXzQtY21wICR7Q01BS0VfQ09NTUFORH0gLUUgY29tcGFyZV9maWxlcyAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RpbWFnZXMvdGVzdGltZ2ZzdDFfNC5wcG0gdGVzdG91dGZzdDFfNC5wcG0pCi1hZGRfdGVzdChkanBlZy1zdGF0aWMtaW50LTFfOCBkanBlZy1zdGF0aWMgLWRjdCBpbnQgLXNjYWxlIDEvOCAtcHBtIC1vdXRmaWxlIHRlc3RvdXRpbnQxXzgucHBtICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdGltYWdlcy90ZXN0b3JpZy5qcGcpCi1hZGRfdGVzdChkanBlZy1zdGF0aWMtaW50LTFfOC1jbXAgJHtDTUFLRV9DT01NQU5EfSAtRSBjb21wYXJlX2ZpbGVzICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdGltYWdlcy90ZXN0aW1naW50MV84LnBwbSB0ZXN0b3V0aW50MV84LnBwbSkKLWFkZF90ZXN0KGRqcGVnLXN0YXRpYy1mYXN0LTFfOCBkanBlZy1zdGF0aWMgLWRjdCBmYXN0IC1zY2FsZSAxLzggLXBwbSAtb3V0ZmlsZSB0ZXN0b3V0ZnN0MV84LnBwbSAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RpbWFnZXMvdGVzdG9yaWcuanBnKQotYWRkX3Rlc3QoZGpwZWctc3RhdGljLWZhc3QtMV84LWNtcCAke0NNQUtFX0NPTU1BTkR9IC1FIGNvbXBhcmVfZmlsZXMgJHtDTUFLRV9TT1VSQ0VfRElSfS90ZXN0aW1hZ2VzL3Rlc3RpbWdmc3QxXzgucHBtIHRlc3RvdXRmc3QxXzgucHBtKQorYWRkX3Rlc3QoZGpwZWctc3RhdGljLWZhc3QtMV8yLWNtcCAke0NNQUtFX0NPTU1BTkR9IC1ETUQ1PSR7TUQ1X1BQTV9GQVNUXzFfMn0gLURGSUxFPXRlc3RvdXRmc3QxXzIucHBtIC1QICR7Q01BS0VfU09VUkNFX0RJUn0vY21ha2VzY3JpcHRzL21kNWNtcC5jbWFrZSkKIGFkZF90ZXN0KGRqcGVnLXN0YXRpYy0yNTYgZGpwZWctc3RhdGljIC1kY3QgaW50IC1ibXAgLWNvbG9ycyAyNTYgLW91dGZpbGUgdGVzdG91dC5ibXAgICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdGltYWdlcy90ZXN0b3JpZy5qcGcpCi1hZGRfdGVzdChkanBlZy1zdGF0aWMtMjU2LWNtcCAke0NNQUtFX0NPTU1BTkR9IC1FIGNvbXBhcmVfZmlsZXMgJHtDTUFLRV9TT1VSQ0VfRElSfS90ZXN0aW1hZ2VzL3Rlc3RpbWcuYm1wIHRlc3RvdXQuYm1wKQorYWRkX3Rlc3QoZGpwZWctc3RhdGljLTI1Ni1jbXAgJHtDTUFLRV9DT01NQU5EfSAtRE1ENT0ke01ENV9CTVBfMjU2fSAtREZJTEU9dGVzdG91dC5ibXAgLVAgJHtDTUFLRV9TT1VSQ0VfRElSfS9jbWFrZXNjcmlwdHMvbWQ1Y21wLmNtYWtlKQogYWRkX3Rlc3QoY2pwZWctc3RhdGljLXByb2cgY2pwZWctc3RhdGljIC1kY3QgaW50IC1wcm9ncmVzc2l2ZSAtb3V0ZmlsZSB0ZXN0b3V0cC5qcGcgJHtDTUFLRV9TT1VSQ0VfRElSfS90ZXN0aW1hZ2VzL3Rlc3RvcmlnLnBwbSkKLWFkZF90ZXN0KGNqcGVnLXN0YXRpYy1wcm9nLWNtcCAke0NNQUtFX0NPTU1BTkR9IC1FIGNvbXBhcmVfZmlsZXMgJHtDTUFLRV9TT1VSQ0VfRElSfS90ZXN0aW1hZ2VzL3Rlc3RpbWdwLmpwZyB0ZXN0b3V0cC5qcGcpCithZGRfdGVzdChjanBlZy1zdGF0aWMtcHJvZy1jbXAgJHtDTUFLRV9DT01NQU5EfSAtRE1ENT0ke01ENV9KUEVHX1BST0d9IC1ERklMRT10ZXN0b3V0cC5qcGcgLVAgJHtDTUFLRV9TT1VSQ0VfRElSfS9jbWFrZXNjcmlwdHMvbWQ1Y21wLmNtYWtlKQogYWRkX3Rlc3QoanBlZ3RyYW4tc3RhdGljLXByb2cganBlZ3RyYW4tc3RhdGljIC1vdXRmaWxlIHRlc3RvdXR0LmpwZyB0ZXN0b3V0cC5qcGcpCi1hZGRfdGVzdChqcGVndHJhbi1zdGF0aWMtcHJvZy1jbXAgJHtDTUFLRV9DT01NQU5EfSAtRSBjb21wYXJlX2ZpbGVzICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdGltYWdlcy90ZXN0aW1naW50LmpwZyB0ZXN0b3V0dC5qcGcpCithZGRfdGVzdChqcGVndHJhbi1zdGF0aWMtcHJvZy1jbXAgJHtDTUFLRV9DT01NQU5EfSAtRE1ENT0ke01ENV9KUEVHX0lOVH0gLURGSUxFPXRlc3RvdXR0LmpwZyAtUCAke0NNQUtFX1NPVVJDRV9ESVJ9L2NtYWtlc2NyaXB0cy9tZDVjbXAuY21ha2UpCiBpZihXSVRIX0FSSVRIX0VOQykKIGFkZF90ZXN0KGNqcGVnLXN0YXRpYy1hcmkgY2pwZWctc3RhdGljIC1kY3QgaW50IC1hcml0aG1ldGljIC1vdXRmaWxlIHRlc3RvdXRhcmkuanBnICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdGltYWdlcy90ZXN0b3JpZy5wcG0pCi1hZGRfdGVzdChjanBlZy1zdGF0aWMtYXJpLWNtcCAke0NNQUtFX0NPTU1BTkR9IC1FIGNvbXBhcmVfZmlsZXMgJHtDTUFLRV9TT1VSQ0VfRElSfS90ZXN0aW1hZ2VzL3Rlc3RpbWdhcmkuanBnIHRlc3RvdXRhcmkuanBnKQorYWRkX3Rlc3QoY2pwZWctc3RhdGljLWFyaS1jbXAgJHtDTUFLRV9DT01NQU5EfSAtRE1ENT0ke01ENV9KUEVHX0FSSX0gLURGSUxFPXRlc3RvdXRhcmkuanBnIC1QICR7Q01BS0VfU09VUkNFX0RJUn0vY21ha2VzY3JpcHRzL21kNWNtcC5jbWFrZSApCiBhZGRfdGVzdChqcGVndHJhbi1zdGF0aWMtdG9hcmkganBlZ3RyYW4tc3RhdGljIC1hcml0aG1ldGljIC1vdXRmaWxlIHRlc3RvdXRhLmpwZyAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RpbWFnZXMvdGVzdGltZ2ludC5qcGcpCi1hZGRfdGVzdChqcGVndHJhbi1zdGF0aWMtdG9hcmktY21wICR7Q01BS0VfQ09NTUFORH0gLUUgY29tcGFyZV9maWxlcyAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RpbWFnZXMvdGVzdGltZ2FyaS5qcGcgdGVzdG91dGEuanBnKQorYWRkX3Rlc3QoanBlZ3RyYW4tc3RhdGljLXRvYXJpLWNtcCAke0NNQUtFX0NPTU1BTkR9IC1ETUQ1PSR7TUQ1X0pQRUdfQVJJfSAtREZJTEU9dGVzdG91dGEuanBnIC1QICR7Q01BS0VfU09VUkNFX0RJUn0vY21ha2VzY3JpcHRzL21kNWNtcC5jbWFrZSkKIGFkZF90ZXN0KGNqcGVnLXN0YXRpYy1wcm9nLWFyaSBjanBlZy1zdGF0aWMgLWRjdCBpbnQgLXByb2dyZXNzaXZlIC1hcml0aG1ldGljIC1zYW1wbGUgMXgxIC1vdXRmaWxlIHRlc3RvdXRwYS5qcGcgJHtDTUFLRV9TT1VSQ0VfRElSfS90ZXN0aW1hZ2VzL3Rlc3RvcmlnLnBwbSkKLWFkZF90ZXN0KGNqcGVnLXN0YXRpYy1wcm9nLWFyaS1jbXAgJHtDTUFLRV9DT01NQU5EfSAtRSBjb21wYXJlX2ZpbGVzICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdGltYWdlcy90ZXN0aW1ncGEuanBnIHRlc3RvdXRwYS5qcGcpCithZGRfdGVzdChjanBlZy1zdGF0aWMtcHJvZy1hcmktY21wICR7Q01BS0VfQ09NTUFORH0gLURNRDU9JHtNRDVfSlBFR19QUk9HX0FSSX0gLURGSUxFPXRlc3RvdXRwYS5qcGcgLVAgJHtDTUFLRV9TT1VSQ0VfRElSfS9jbWFrZXNjcmlwdHMvbWQ1Y21wLmNtYWtlICkKIGVuZGlmKCkKIGlmKFdJVEhfQVJJVEhfREVDKQogYWRkX3Rlc3QoZGpwZWctc3RhdGljLWFyaSBkanBlZy1zdGF0aWMgLWRjdCBpbnQgLWZhc3QgLXBwbSAtb3V0ZmlsZSB0ZXN0b3V0YXJpLnBwbSAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RpbWFnZXMvdGVzdGltZ2FyaS5qcGcpCi1hZGRfdGVzdChkanBlZy1zdGF0aWMtYXJpLWNtcCAke0NNQUtFX0NPTU1BTkR9IC1FIGNvbXBhcmVfZmlsZXMgJHtDTUFLRV9TT1VSQ0VfRElSfS90ZXN0aW1hZ2VzL3Rlc3RpbWdhcmkucHBtIHRlc3RvdXRhcmkucHBtKQorYWRkX3Rlc3QoZGpwZWctc3RhdGljLWFyaS1jbXAgJHtDTUFLRV9DT01NQU5EfSAtRE1ENT0ke01ENV9QUE1fQVJJfSAtREZJTEU9dGVzdG91dGFyaS5wcG0gLVAgJHtDTUFLRV9TT1VSQ0VfRElSfS9jbWFrZXNjcmlwdHMvbWQ1Y21wLmNtYWtlKQogYWRkX3Rlc3QoanBlZ3RyYW4tc3RhdGljLWZyb21hcmkJanBlZ3RyYW4tc3RhdGljIC1vdXRmaWxlIHRlc3RvdXRhLmpwZyAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RpbWFnZXMvdGVzdGltZ2FyaS5qcGcpCi1hZGRfdGVzdChqcGVndHJhbi1zdGF0aWMtZnJvbWFyaS1jbXAgJHtDTUFLRV9DT01NQU5EfSAtRSBjb21wYXJlX2ZpbGVzICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdGltYWdlcy90ZXN0aW1naW50LmpwZyB0ZXN0b3V0YS5qcGcpCithZGRfdGVzdChqcGVndHJhbi1zdGF0aWMtZnJvbWFyaS1jbXAgJHtDTUFLRV9DT01NQU5EfSAtRE1ENT0ke01ENV9KUEVHX0lOVH0gLURGSUxFPXRlc3RvdXRhLmpwZyAtUCAke0NNQUtFX1NPVVJDRV9ESVJ9L2NtYWtlc2NyaXB0cy9tZDVjbXAuY21ha2UpCiBlbmRpZigpCiBhZGRfdGVzdChqcGVndHJhbi1zdGF0aWMtY3JvcCBqcGVndHJhbi1zdGF0aWMgLWNyb3AgMTIweDkwKzIwKzUwIC10cmFuc3Bvc2UgLXBlcmZlY3QgLW91dGZpbGUgdGVzdG91dGNyb3AuanBnICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdGltYWdlcy90ZXN0b3JpZy5qcGcpCi1hZGRfdGVzdChqcGVndHJhbi1zdGF0aWMtY3JvcC1jbXAgJHtDTUFLRV9DT01NQU5EfSAtRSBjb21wYXJlX2ZpbGVzICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdGltYWdlcy90ZXN0aW1nY3JvcC5qcGcgdGVzdG91dGNyb3AuanBnKQorYWRkX3Rlc3QoanBlZ3RyYW4tc3RhdGljLWNyb3AtY21wICR7Q01BS0VfQ09NTUFORH0gLURNRDU9JHtNRDVfSlBFR19DUk9QfSAtREZJTEU9dGVzdG91dGNyb3AuanBnIC1QICR7Q01BS0VfU09VUkNFX0RJUn0vY21ha2VzY3JpcHRzL21kNWNtcC5jbWFrZSkKIAogYWRkX2N1c3RvbV90YXJnZXQodGVzdGNsZWFuIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtUAogICAke0NNQUtFX1NPVVJDRV9ESVJ9L2NtYWtlc2NyaXB0cy90ZXN0Y2xlYW4uY21ha2UpCkBAIC0zOTAsMTggKzQ0NywxOCBAQAogaWYoTVNWQykKICAgc2V0KElOU1RfUExBVEZPUk0gIlZpc3VhbCBDKysiKQogICBzZXQoSU5TVF9OQU1FICR7Q01BS0VfUFJPSkVDVF9OQU1FfS0ke1ZFUlNJT059LXZjKQotICBzZXQoSU5TVF9ESVIgJHtDTUFLRV9QUk9KRUNUX05BTUV9KQorICBzZXQoSU5TVF9SRUdfTkFNRSAke0NNQUtFX1BST0pFQ1RfTkFNRX0pCiBlbHNlaWYoTUlOR1cpCiAgIHNldChJTlNUX1BMQVRGT1JNIEdDQykKICAgc2V0KElOU1RfTkFNRSAke0NNQUtFX1BST0pFQ1RfTkFNRX0tJHtWRVJTSU9OfS1nY2MpCi0gIHNldChJTlNUX0RJUiAke0NNQUtFX1BST0pFQ1RfTkFNRX0tZ2NjKQorICBzZXQoSU5TVF9SRUdfTkFNRSAke0NNQUtFX1BST0pFQ1RfTkFNRX0tZ2NjKQogICBzZXQoSU5TVF9ERUZTIC1ER0NDKQogZW5kaWYoKQogCiBpZig2NEJJVCkKICAgc2V0KElOU1RfUExBVEZPUk0gIiR7SU5TVF9QTEFURk9STX0gNjQtYml0IikKICAgc2V0KElOU1RfTkFNRSAke0lOU1RfTkFNRX02NCkKLSAgc2V0KElOU1RfRElSICR7SU5TVF9ESVJ9NjQpCisgIHNldChJTlNUX1JFR19OQU1FICR7SU5TVF9ESVJ9NjQpCiAgIHNldChJTlNUX0RFRlMgJHtJTlNUX0RFRlN9IC1EV0lONjQpCiBlbmRpZigpCiAKQEAgLTQxNSwxMiArNDcyLDE3IEBACiAgIHNldChJTlNUX0RFRlMgJHtJTlNUX0RFRlN9ICItREJVSUxERElSPSIpCiBlbmRpZigpCiAKK1NUUklORyhSRUdFWCBSRVBMQUNFICIvIiAiXFxcXCIgSU5TVF9ESVIgJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0pCisKIGNvbmZpZ3VyZV9maWxlKHJlbGVhc2UvbGlianBlZy10dXJiby5uc2kuaW4gbGlianBlZy10dXJiby5uc2kgQE9OTFkpCiAKK2lmKFdJVEhfSkFWQSkKKyAgc2V0KEpBVkFfREVQRU5EIGphdmEpCitlbmRpZigpCiBhZGRfY3VzdG9tX3RhcmdldChpbnN0YWxsZXIKICAgbWFrZW5zaXMgLW5vY2QgJHtJTlNUX0RFRlN9IGxpYmpwZWctdHVyYm8ubnNpCiAgIERFUEVORFMganBlZyBqcGVnLXN0YXRpYyB0dXJib2pwZWcgdHVyYm9qcGVnLXN0YXRpYyByZGpwZ2NvbSB3cmpwZ2NvbQotICAgIGNqcGVnIGRqcGVnIGpwZWd0cmFuIHRqYmVuY2gKKyAgICBjanBlZyBkanBlZyBqcGVndHJhbiB0amJlbmNoICR7SkFWQV9ERVBFTkR9CiAgIFNPVVJDRVMgbGlianBlZy10dXJiby5uc2kpCiAKIGluc3RhbGwoVEFSR0VUUyBqcGVnLXN0YXRpYyB0dXJib2pwZWcgdHVyYm9qcGVnLXN0YXRpYyByZGpwZ2NvbSB3cmpwZ2NvbSB0amJlbmNoCkBAIC00MzAsNyArNDkyLDcgQEAKICkKIAogaW5zdGFsbChGSUxFUyAke0NNQUtFX1NPVVJDRV9ESVJ9L1JFQURNRSAke0NNQUtFX1NPVVJDRV9ESVJ9L1JFQURNRS10dXJiby50eHQKLSAgJHtDTUFLRV9TT1VSQ0VfRElSfS9leGFtcGxlLmMgJHtDTUFLRV9TT1VSQ0VfRElSfS9saWJqcGVnLnR4dCAKKyAgJHtDTUFLRV9TT1VSQ0VfRElSfS9leGFtcGxlLmMgJHtDTUFLRV9TT1VSQ0VfRElSfS9saWJqcGVnLnR4dAogICAke0NNQUtFX1NPVVJDRV9ESVJ9L3N0cnVjdHVyZS50eHQgJHtDTUFLRV9TT1VSQ0VfRElSfS91c2FnZS50eHQKICAgJHtDTUFLRV9TT1VSQ0VfRElSfS93aXphcmQudHh0CiAgIERFU1RJTkFUSU9OIGRvYykKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZy50eHQgYi9DaGFuZ2VMb2cudHh0CmluZGV4IDI4YWNhOGEuLjk4NGI5MWQgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZy50eHQKKysrIGIvQ2hhbmdlTG9nLnR4dApAQCAtMSw0NCArMSwxOTggQEAKLTEuMi4yCisxLjMuMgogPT09PT0KIAotWzFdIFRoZSB0akRlY29tcHJlc3NUb1lVVigpIGZ1bmN0aW9uIG5vdyBzdXBwb3J0cyB0aGUgVEpGTEFHX0ZBU1REQ1QgZmxhZy4KLQotWzJdIFRoZSAzMi1iaXQgc3VwcGxlbWVudGFyeSBwYWNrYWdlIGZvciBhbWQ2NCBEZWJpYW4gc3lzdGVtcyBub3cgcHJvdmlkZXMKLXN5bWxpbmtzIGluIC91c3IvbGliL2kzODYtbGludXgtZ251IGZvciB0aGUgVHVyYm9KUEVHIGxpYnJhcmllcyBpbiAvdXNyL2xpYjMyLgotVGhpcyBhbGxvd3MgdGhvc2UgbGlicmFyaWVzIHRvIGJlIHVzZWQgb24gTXVsdGlBcmNoLWNvbXBhdGlibGUgc3lzdGVtcyAoc3VjaCBhcwotVWJ1bnR1IDExIGFuZCBsYXRlcikgd2l0aG91dCBzZXR0aW5nIHRoZSBsaW5rZXIgcGF0aC4KLQotWzNdIEZpeGVkIGEgcmVncmVzc2lvbiBjYXVzZWQgYnkgMS4yLjFbN10gd2hlcmVieSB0aGUgYnVpbGQgd291bGQgZmFpbCB3aXRoCi1tdWx0aXBsZSAiTWlzbWF0Y2ggaW4gb3BlcmFuZCBzaXplcyIgZXJyb3JzIHdoZW4gYXR0ZW1wdGluZyB0byBidWlsZCB0aGUgeDg2Ci1TSU1EIGNvZGUgd2l0aCBOQVNNIDAuOTguCi0KLVs0XSBGaXhlZCBhIEh1ZmZtYW4gZW5jb2RlciBidWcgdGhhdCBwcmV2ZW50ZWQgSS9PIHN1c3BlbnNpb24gZnJvbSB3b3JraW5nCi1wcm9wZXJseS4KLQotWzVdIEZpeGVkIGEgYnVnIHdoZXJlYnkgYXR0ZW1wdGluZyB0byBlbmNvZGUgYSBwcm9ncmVzc2l2ZSBKUEVHIHdpdGggYXJpdGhtZXRpYwotZW50cm9weSBjb2RpbmcgKGJ5IHBhc3NpbmcgYXJndW1lbnRzIG9mIC1wcm9ncmVzc2l2ZSAtYXJpdGhtZXRpYyB0byBjanBlZyBvcgotanBlZ3RyYW4sIGZvciBpbnN0YW5jZSkgd291bGQgcmVzdWx0IGluIGFuIGVycm9yLCAiUmVxdWVzdGVkIGZlYXR1cmUgd2FzCi1vbWl0dGVkIGF0IGNvbXBpbGUgdGltZSIuCi0KLVs2XSBGaXhlZCBhIGNvdXBsZSBvZiBpc3N1ZXMgd2hlcmVieSBtYWxmb3JtZWQgSlBFRyBpbWFnZXMgd291bGQgY2F1c2UKLWxpYmpwZWctdHVyYm8gdG8gdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGR1cmluZyBkZWNvbXByZXNzaW9uLgotCi1bN10gRml4ZWQgYW4gZXJyb3IgKCJCdWZmZXIgcGFzc2VkIHRvIEpQRUcgbGlicmFyeSBpcyB0b28gc21hbGwiKSB0aGF0IG9jY3VycmVkCi13aGVuIGNhbGxpbmcgdGhlIFR1cmJvSlBFRyBZVVYgZW5jb2RpbmcgZnVuY3Rpb24gd2l0aCBhIHZlcnkgc21hbGwgKDwgNXg1KQotc291cmNlIGltYWdlLCBhbmQgYWRkZWQgYSB1bml0IHRlc3QgdG8gY2hlY2sgZm9yIHRoaXMgZXJyb3IuCi0KLVs4XSBXb3JrZWQgYXJvdW5kIGFuIGlzc3VlIHdpdGggVmlzdWFsIEMrKyAyMDEwIGFuZCBsYXRlciB0aGF0IGNhdXNlZCBpbmNvcnJlY3QKK1sxXSBXb3JrZWQgYXJvdW5kIGFuIGlzc3VlIHdpdGggVmlzdWFsIEMrKyAyMDEwIGFuZCBsYXRlciB0aGF0IGNhdXNlZCBpbmNvcnJlY3QKIHBpeGVscyB0byBiZSBnZW5lcmF0ZWQgd2hlbiBkZWNvbXByZXNzaW5nIGEgSlBFRyBpbWFnZSB0byBhIDI1Ni1jb2xvciBiaXRtYXAsCiBpZiBjb21waWxlciBvcHRpbWl6YXRpb24gd2FzIGVuYWJsZWQgd2hlbiBsaWJqcGVnLXR1cmJvIHdhcyBidWlsdC4gIFRoaXMgY2F1c2VkCiB0aGUgcmVncmVzc2lvbiB0ZXN0cyB0byBmYWlsIHdoZW4gZG9pbmcgYSByZWxlYXNlIGJ1aWxkIHVuZGVyIFZpc3VhbCBDKysgMjAxMAogYW5kIGxhdGVyLgogCi1bOV0gRml4ZWQgYSBzZWdmYXVsdCB0aGF0IG9jY3VycmVkIHdoZW4gY2FsbGluZyBvdXRwdXRfbWVzc2FnZSgpIHdpdGggbXNnX2NvZGUKK1syXSBGaXhlZCBhIHNlZ2ZhdWx0IHRoYXQgb2NjdXJyZWQgd2hlbiBjYWxsaW5nIG91dHB1dF9tZXNzYWdlKCkgd2l0aCBtc2dfY29kZQogc2V0IHRvIEpNU0dfQ09QWVJJR0hULgogCi1bMTBdIEZpeGVkIGEgYnVnIGluIHRoZSBidWlsZCBzeXN0ZW0gdGhhdCB3YXMgY2F1c2luZyB0aGUgV2luZG93cyB2ZXJzaW9uIG9mCitbM10gRml4ZWQgYW4gaXNzdWUgd2hlcmVieSB3cmpwZ2NvbSB3YXMgYWxsb3dpbmcgY29tbWVudHMgbG9uZ2VyIHRoYW4gNjVrCitjaGFyYWN0ZXJzIHRvIGJlIHBhc3NlZCBvbiB0aGUgY29tbWFuZCBsaW5lLCB3aGljaCB3YXMgY2F1c2luZyBpdCB0byBnZW5lcmF0ZQoraW5jb3JyZWN0IEpQRUcgZmlsZXMuCisKK1s0XSBGaXhlZCBhIGJ1ZyBpbiB0aGUgYnVpbGQgc3lzdGVtIHRoYXQgd2FzIGNhdXNpbmcgdGhlIFdpbmRvd3MgdmVyc2lvbiBvZgogd3JqcGdjb20gdG8gYmUgYnVpbHQgdXNpbmcgdGhlIHJkanBnY29tIGNvZGUuCiAKK1s1XSBGaXhlZCBhbiBleHRyZW1lbHkgcmFyZSBidWcgdGhhdCBjb3VsZCBjYXVzZSB0aGUgSHVmZm1hbiBlbmNvZGVyJ3MgbG9jYWwKK2J1ZmZlciB0byBvdmVycnVuIHdoZW4gYSB2ZXJ5IGhpZ2gtZnJlcXVlbmN5IE1DVSBpcyBjb21wcmVzc2VkIHVzaW5nIHF1YWxpdHkKKzEwMCBhbmQgbm8gc3Vic2FtcGxpbmcsIGFuZCB3aGVuIHRoZSBKUEVHIG91dHB1dCBidWZmZXIgaXMgYmVpbmcgZHluYW1pY2FsbHkKK3Jlc2l6ZWQgYnkgdGhlIGRlc3RpbmF0aW9uIG1hbmFnZXIuICBUaGlzIGlzc3VlIHdhcyBzbyByYXJlIHRoYXQsIGV2ZW4gd2l0aCBhCit0ZXN0IHByb2dyYW0gc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIG1ha2UgdGhlIGJ1ZyBvY2N1ciAoYnkgaW5qZWN0aW5nIHJhbmRvbQoraGlnaC1mcmVxdWVuY3kgWVVWIGRhdGEgaW50byB0aGUgY29tcHJlc3NvciksIGl0IHdhcyByZXByb2R1Y2libGUgb25seSBvbmNlIGluCithYm91dCBldmVyeSAyNSBtaWxsaW9uIGl0ZXJhdGlvbnMuCisKK1s2XSBGaXhlZCBhIGJ1aWxkIGlzc3VlIG9uIE9TIFggUG93ZXJQQyBwbGF0Zm9ybXMgKG1kNWNtcCBmYWlsZWQgdG8gYnVpbGQKK2JlY2F1c2UgT1MgWCBkb2VzIG5vdCBwcm92aWRlIHRoZSBsZTMydG9oKCkgYW5kIGh0b2xlMzIoKSBmdW5jdGlvbnMuKQorCitbN10gVGhlIGNsb3NlKCkgbWV0aG9kIGluIHRoZSBUSkNvbXByZXNzb3IgYW5kIFRKRGVjb21wcmVzc29yIEphdmEgY2xhc3NlcyBpcworbm93IGlkZW1wb3RlbnQuICBQcmV2aW91c2x5LCB0aGF0IG1ldGhvZCB3b3VsZCBjYWxsIHRoZSBuYXRpdmUgdGpEZXN0cm95KCkKK2Z1bmN0aW9uIGV2ZW4gaWYgdGhlIFR1cmJvSlBFRyBpbnN0YW5jZSBoYWQgYWxyZWFkeSBiZWVuIGRlc3Ryb3llZC4gIFRoaXMKK2NhdXNlZCBhbiBleGNlcHRpb24gdG8gYmUgdGhyb3duIGR1cmluZyBmaW5hbGl6YXRpb24sIGlmIHRoZSBjbG9zZSgpIG1ldGhvZCBoYWQKK2FscmVhZHkgYmVlbiBjYWxsZWQuICBUaGUgZXhjZXB0aW9uIHdhcyBjYXVnaHQsIGJ1dCBpdCB3YXMgc3RpbGwgYW4gZXhwZW5zaXZlCitvcGVyYXRpb24uCisKK1s4XSBUaGUgVHVyYm9KUEVHIEFQSSBwcmV2aW91c2x5IGdlbmVyYXRlZCBhbiBlcnJvciAoIkNvdWxkIG5vdCBkZXRlcm1pbmUKK3N1YnNhbXBsaW5nIHR5cGUgZm9yIEpQRUcgaW1hZ2UiKSB3aGVuIGF0dGVtcHRpbmcgdG8gZGVjb21wcmVzcyBncmF5c2NhbGUgSlBFRworaW1hZ2VzIHRoYXQgd2VyZSBjb21wcmVzc2VkIHdpdGggYSBzYW1wbGluZyBmYWN0b3Igb3RoZXIgdGhhbiAxIChmb3IgaW5zdGFuY2UsCit3aXRoICdjanBlZyAtZ3JheXNjYWxlIC1zYW1wbGUgMngyJykuICBTdWJzYW1wbGluZyB0ZWNobmljYWxseSBoYXMgbm8gbWVhbmluZword2l0aCBncmF5c2NhbGUgSlBFR3MsIGFuZCB0aHVzIHRoZSBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBzYW1wbGluZyBmYWN0b3JzCitmb3Igc3VjaCBpbWFnZXMgYXJlIGlnbm9yZWQgYnkgdGhlIGRlY29tcHJlc3Nvci4gIEhvd2V2ZXIsIHRoZSBUdXJib0pQRUcgQVBJCit3YXMgYmVpbmcgdG9vIHJpZ2lkIGFuZCB3YXMgZXhwZWN0aW5nIHRoZSBzYW1wbGluZyBmYWN0b3JzIHRvIGJlIGVxdWFsIHRvIDEKK2JlZm9yZSBpdCB0cmVhdGVkIHRoZSBpbWFnZSBhcyBhIGdyYXlzY2FsZSBKUEVHLgorCitbOV0gUmVmZXJyaW5nIHRvIFs1XSBhYm92ZSwgYW5vdGhlciBleHRyZW1lbHkgcmFyZSBjaXJjdW1zdGFuY2Ugd2FzIGRpc2NvdmVyZWQKK3VuZGVyIHdoaWNoIHRoZSBIdWZmbWFuIGVuY29kZXIncyBsb2NhbCBidWZmZXIgY2FuIGJlIG92ZXJydW4gd2hlbiBhIGJ1ZmZlcmVkCitkZXN0aW5hdGlvbiBtYW5hZ2VyIGlzIGJlaW5nIHVzZWQgYW5kIGFuIGV4dHJlbWVseS1oaWdoLWZyZXF1ZW5jeSBibG9jaworKGJhc2ljYWxseSBqdW5rIGltYWdlIGRhdGEpIGlzIGJlaW5nIGVuY29kZWQuICBFdmVuIHRob3VnaCB0aGUgSHVmZm1hbiBsb2NhbAorYnVmZmVyIHdhcyBpbmNyZWFzZWQgZnJvbSAxMjggYnl0ZXMgdG8gMTM2IGJ5dGVzIHRvIGFkZHJlc3MgdGhlIHByZXZpb3VzCitpc3N1ZSwgdGhlIG5ldyBpc3N1ZSBjYXVzZWQgZXZlbiB0aGUgbGFyZ2VyIGJ1ZmZlciB0byBiZSBvdmVycnVuLiAgRnVydGhlcgorYW5hbHlzaXMgcmV2ZWFscyB0aGF0LCBpbiB0aGUgYWJzb2x1dGUgd29yc3QgY2FzZSAoc3VjaCBhcyBzZXR0aW5nIGFsdGVybmF0aW5nCitBQyBjb2VmZmljaWVudHMgdG8gMzI3NjcgYW5kIC0zMjc2OCBpbiB0aGUgSlBFRyBzY2FubmluZyBvcmRlciksIHRoZSBIdWZmbWFuCitlbmNvZGVyIGNhbiBwcm9kdWNlIGVuY29kZWQgYmxvY2tzIHRoYXQgYXBwcm9hY2ggZG91YmxlIHRoZSBzaXplIG9mIHRoZQordW5lbmNvZGVkIGJsb2Nrcy4gIFRodXMsIHRoZSBIdWZmbWFuIGxvY2FsIGJ1ZmZlciB3YXMgaW5jcmVhc2VkIHRvIDI1NiBieXRlcywKK3doaWNoIHNob3VsZCBwcmV2ZW50IGFueSBzdWNoIGlzc3VlIGZyb20gcmUtb2NjdXJyaW5nIGluIHRoZSBmdXR1cmUuCisKKworMS4zLjEKKz09PT09CisKK1sxXSBPbiBVbip4IHN5c3RlbXMsICdtYWtlIGluc3RhbGwnIG5vdyBpbnN0YWxscyB0aGUgbGlianBlZy10dXJibyBsaWJyYXJpZXMKK2ludG8gL29wdC9saWJqcGVnLXR1cmJvL2xpYjMyIGJ5IGRlZmF1bHQgb24gYW55IDMyLWJpdCBzeXN0ZW0sIG5vdCBqdXN0IHg4NiwKK2FuZCBpbnRvIC9vcHQvbGlianBlZy10dXJiby9saWI2NCBieSBkZWZhdWx0IG9uIGFueSA2NC1iaXQgc3lzdGVtLCBub3QganVzdAoreDg2LTY0LiAgWW91IGNhbiBvdmVycmlkZSB0aGlzIGJ5IG92ZXJyaWRpbmcgZWl0aGVyIHRoZSAncHJlZml4JyBvciAnbGliZGlyJworY29uZmlndXJlIHZhcmlhYmxlcy4KKworWzJdIFRoZSBXaW5kb3dzIGluc3RhbGxlciBub3cgcGxhY2VzIGEgY29weSBvZiB0aGUgVHVyYm9KUEVHIERMTHMgaW4gdGhlIHNhbWUKK2RpcmVjdG9yeSBhcyB0aGUgcmVzdCBvZiB0aGUgbGlianBlZy10dXJibyBiaW5hcmllcy4gIFRoaXMgd2FzIG1haW5seSBkb25lCit0byBzdXBwb3J0IFR1cmJvVk5DIDEuMywgd2hpY2ggYnVuZGxlcyB0aGUgRExMcyBpbiBpdHMgV2luZG93cyBpbnN0YWxsYXRpb24uCitXaGVuIHVzaW5nIGEgMzItYml0IHZlcnNpb24gb2YgQ01ha2Ugb24gNjQtYml0IFdpbmRvd3MsIGl0IGlzIGltcG9zc2libGUgdG8KK2FjY2VzcyB0aGUgYzpcV0lORE9XU1xzeXN0ZW0zMiBkaXJlY3RvcnksIHdoaWNoIG1hZGUgaXQgaW1wb3NzaWJsZSBmb3IgdGhlCitUdXJib1ZOQyBidWlsZCBzY3JpcHRzIHRvIGJ1bmRsZSB0aGUgNjQtYml0IFR1cmJvSlBFRyBETEwuCisKK1szXSBGaXhlZCBhIGJ1ZyB3aGVyZWJ5IGF0dGVtcHRpbmcgdG8gZW5jb2RlIGEgcHJvZ3Jlc3NpdmUgSlBFRyB3aXRoIGFyaXRobWV0aWMKK2VudHJvcHkgY29kaW5nIChieSBwYXNzaW5nIGFyZ3VtZW50cyBvZiAtcHJvZ3Jlc3NpdmUgLWFyaXRobWV0aWMgdG8gY2pwZWcgb3IKK2pwZWd0cmFuLCBmb3IgaW5zdGFuY2UpIHdvdWxkIHJlc3VsdCBpbiBhbiBlcnJvciwgIlJlcXVlc3RlZCBmZWF0dXJlIHdhcworb21pdHRlZCBhdCBjb21waWxlIHRpbWUiLgorCitbNF0gRml4ZWQgYSBjb3VwbGUgb2YgaXNzdWVzIHdoZXJlYnkgbWFsZm9ybWVkIEpQRUcgaW1hZ2VzIHdvdWxkIGNhdXNlCitsaWJqcGVnLXR1cmJvIHRvIHVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSBkdXJpbmcgZGVjb21wcmVzc2lvbi4KKworWzVdIEZpeGVkIGFuIGVycm9yICgiQnVmZmVyIHBhc3NlZCB0byBKUEVHIGxpYnJhcnkgaXMgdG9vIHNtYWxsIikgdGhhdCBvY2N1cnJlZAord2hlbiBjYWxsaW5nIHRoZSBUdXJib0pQRUcgWVVWIGVuY29kaW5nIGZ1bmN0aW9uIHdpdGggYSB2ZXJ5IHNtYWxsICg8IDV4NSkKK3NvdXJjZSBpbWFnZSwgYW5kIGFkZGVkIGEgdW5pdCB0ZXN0IHRvIGNoZWNrIGZvciB0aGlzIGVycm9yLgorCitbNl0gVGhlIEphdmEgY2xhc3NlcyBzaG91bGQgbm93IGJ1aWxkIHByb3Blcmx5IHVuZGVyIFZpc3VhbCBTdHVkaW8gMjAxMCBhbmQKK2xhdGVyLgorCitbN10gRml4ZWQgYW4gaXNzdWUgdGhhdCBwcmV2ZW50ZWQgU1JQTXMgZ2VuZXJhdGVkIHVzaW5nIHRoZSBpbi10cmVlIHBhY2thZ2luZwordG9vbHMgZnJvbSBiZWluZyByZWJ1aWx0IG9uIGNlcnRhaW4gbmV3ZXIgTGludXggZGlzdHJpYnV0aW9ucy4KKworWzhdIE51bWVyb3VzIG1pbm9yIGZpeGVzIHRvIGVsaW1pbmF0ZSBjb21waWxhdGlvbiBhbmQgYnVpbGQvcGFja2FnaW5nIHN5c3RlbQord2FybmluZ3MsIGZpeCBjb3NtZXRpYyBpc3N1ZXMsIGltcHJvdmUgZG9jdW1lbnRhdGlvbiBjbGFyaXR5LCBhbmQgb3RoZXIgZ2VuZXJhbAorc291cmNlIGNsZWFudXAuCisKKworMS4zLjAKKz09PT09CisKK1sxXSAnbWFrZSB0ZXN0JyBub3cgd29ya3MgcHJvcGVybHkgb24gRnJlZUJTRCwgYW5kIGl0IG5vIGxvbmdlciByZXF1aXJlcyB0aGUKK21kNXN1bSBleGVjdXRhYmxlIHRvIGJlIHByZXNlbnQgb24gb3RoZXIgVW4qeCBwbGF0Zm9ybXMuCisKK1syXSBPdmVyaGF1bGVkIHRoZSBwYWNrYWdpbmcgc3lzdGVtOgorLS0gVG8gYXZvaWQgY29uZmxpY3Qgd2l0aCB2ZW5kb3Itc3VwcGxpZWQgbGlianBlZy10dXJibyBwYWNrYWdlcywgdGhlCitvZmZpY2lhbCBSUE1zIGFuZCBERUJzIGZvciBsaWJqcGVnLXR1cmJvIGhhdmUgYmVlbiByZW5hbWVkIHRvCisibGlianBlZy10dXJiby1vZmZpY2lhbCIuCistLSBUaGUgVHVyYm9KUEVHIGxpYnJhcmllcyBhcmUgbm93IGxvY2F0ZWQgdW5kZXIgL29wdC9saWJqcGVnLXR1cmJvIGluIHRoZQorb2ZmaWNpYWwgTGludXggYW5kIE1hYyBwYWNrYWdlcywgdG8gYXZvaWQgY29uZmxpY3Qgd2l0aCB2ZW5kb3Itc3VwcGxpZWQKK3BhY2thZ2VzIGFuZCBhbHNvIHRvIHN0cmVhbWxpbmUgdGhlIHBhY2thZ2luZyBzeXN0ZW0uCistLSBSZWxlYXNlIHBhY2thZ2VzIGFyZSBub3cgY3JlYXRlZCB3aXRoIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGRlZmluZWQKK2J5IHRoZSBjb25maWd1cmUgdmFyaWFibGVzICJwcmVmaXgiLCAiYmluZGlyIiwgImxpYmRpciIsIGV0Yy4gKFVuKngpIG9yIGJ5IHRoZQorQ01BS0VfSU5TVEFMTF9QUkVGSVggdmFyaWFibGUgKFdpbmRvd3MuKSAgVGhlIGV4Y2VwdGlvbiBpcyB0aGF0IHRoZSBkb2NzIGFyZQorYWx3YXlzIGxvY2F0ZWQgdW5kZXIgdGhlIHN5c3RlbSBkZWZhdWx0IGRvY3VtZW50YXRpb24gZGlyZWN0b3J5IG9uIFVuKnggYW5kIE1hYworc3lzdGVtcywgYW5kIG9uIFdpbmRvd3MsIHRoZSBUdXJib0pQRUcgRExMIGlzIGFsd2F5cyBsb2NhdGVkIGluIHRoZSBXaW5kb3dzCitzeXN0ZW0gZGlyZWN0b3J5LgorLS0gVG8gYXZvaWQgY29uZnVzaW9uLCBvZmZpY2lhbCBsaWJqcGVnLXR1cmJvIHBhY2thZ2VzIG9uIExpbnV4L1VuaXggcGxhdGZvcm1zCisoZXhjZXB0IGZvciBNYWMpIHdpbGwgYWx3YXlzIGluc3RhbGwgdGhlIDMyLWJpdCBsaWJyYXJpZXMgaW4KKy9vcHQvbGlianBlZy10dXJiby9saWIzMiBhbmQgdGhlIDY0LWJpdCBsaWJyYXJpZXMgaW4gL29wdC9saWJqcGVnLXR1cmJvL2xpYjY0LgorLS0gRml4ZWQgYW4gaXNzdWUgd2hlcmVieSwgaW4gc29tZSBjYXNlcywgdGhlIGxpYmpwZWctdHVyYm8gZXhlY3V0YWJsZXMgb24gVW4qeAorc3lzdGVtcyB3ZXJlIG5vdCBwcm9wZXJseSBsaW5raW5nIHdpdGggdGhlIHNoYXJlZCBsaWJyYXJpZXMgaW5zdGFsbGVkIGJ5IHRoZQorc2FtZSBwYWNrYWdlLgorLS0gRml4ZWQgYW4gaXNzdWUgd2hlcmVieSBidWlsZGluZyB0aGUgImluc3RhbGxlciIgdGFyZ2V0IG9uIFdpbmRvd3Mgd2hlbgorV0lUSF9KQVZBPTEgd291bGQgZmFpbCBpZiB0aGUgVHVyYm9KUEVHIEpBUiBoYWQgbm90IGJlZW4gcHJldmlvdXNseSBidWlsdC4KKy0tIEJ1aWxkaW5nIHRoZSAiaW5zdGFsbCIgdGFyZ2V0IG9uIFdpbmRvd3Mgbm93IGluc3RhbGxzIGZpbGVzIGludG8gdGhlIHNhbWUKK3BsYWNlcyB0aGF0IHRoZSBpbnN0YWxsZXIgZG9lcy4KKworWzNdIEZpeGVkIGEgSHVmZm1hbiBlbmNvZGVyIGJ1ZyB0aGF0IHByZXZlbnRlZCBJL08gc3VzcGVuc2lvbiBmcm9tIHdvcmtpbmcKK3Byb3Blcmx5LgorCisKKzEuMi45MCAoMS4zIGJldGExKQorPT09PT09PT09PT09PT09PT09CisKK1sxXSBBZGRlZCBzdXBwb3J0IGZvciBhZGRpdGlvbmFsIHNjYWxpbmcgZmFjdG9ycyAoMy84LCA1LzgsIDMvNCwgNy84LCA5LzgsIDUvNCwKKzExLzgsIDMvMiwgMTMvOCwgNy80LCAxNS84LCBhbmQgMikgd2hlbiBkZWNvbXByZXNzaW5nLiAgTm90ZSB0aGF0IHRoZSBJRENUIHdpbGwKK25vdCBiZSBTSU1ELWFjY2VsZXJhdGVkIHdoZW4gdXNpbmcgYW55IG9mIHRoZXNlIG5ldyBzY2FsaW5nIGZhY3RvcnMuCisKK1syXSBUaGUgVHVyYm9KUEVHIGR5bmFtaWMgbGlicmFyeSBpcyBub3cgdmVyc2lvbmVkLiAgSXQgd2FzIG5vdCBzdHJpY3RseQorbmVjZXNzYXJ5IHRvIGRvIHNvLCBiZWNhdXNlIFR1cmJvSlBFRyB1c2VzIHZlcnNpb25lZCBzeW1ib2xzLCBhbmQgaWYgYSBmdW5jdGlvbgorY2hhbmdlcyBpbiBhbiBBQkktaW5jb21wYXRpYmxlIHdheSwgdGhhdCBmdW5jdGlvbiBpcyByZW5hbWVkIGFuZCBhIGxlZ2FjeQorZnVuY3Rpb24gaXMgcHJvdmlkZWQgdG8gbWFpbnRhaW4gYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gIEhvd2V2ZXIsIGNlcnRhaW4KK0xpbnV4IGRpc3RybyBtYWludGFpbmVycyBoYXZlIGEgcG9saWN5IGFnYWluc3QgYWNjZXB0aW5nIGFueSBsaWJyYXJ5IHRoYXQgaXNuJ3QKK3ZlcnNpb25lZC4KKworWzNdIEV4dGVuZGVkIHRoZSBUdXJib0pQRUcgSmF2YSBBUEkgc28gdGhhdCBpdCBjYW4gYmUgdXNlZCB0byBjb21wcmVzcyBhIEpQRUcKK2ltYWdlIGZyb20gYW5kIGRlY29tcHJlc3MgYSBKUEVHIGltYWdlIHRvIGFuIGFyYml0cmFyeSBwb3NpdGlvbiBpbiBhIGxhcmdlCitpbWFnZSBidWZmZXIuCisKK1s0XSBUaGUgdGpEZWNvbXByZXNzVG9ZVVYoKSBmdW5jdGlvbiBub3cgc3VwcG9ydHMgdGhlIFRKRkxBR19GQVNURENUIGZsYWcuCisKK1s1XSBUaGUgMzItYml0IHN1cHBsZW1lbnRhcnkgcGFja2FnZSBmb3IgYW1kNjQgRGViaWFuIHN5c3RlbXMgbm93IHByb3ZpZGVzCitzeW1saW5rcyBpbiAvdXNyL2xpYi9pMzg2LWxpbnV4LWdudSBmb3IgdGhlIFR1cmJvSlBFRyBsaWJyYXJpZXMgaW4gL3Vzci9saWIzMi4KK1RoaXMgYWxsb3dzIHRob3NlIGxpYnJhcmllcyB0byBiZSB1c2VkIG9uIE11bHRpQXJjaC1jb21wYXRpYmxlIHN5c3RlbXMgKHN1Y2ggYXMKK1VidW50dSAxMSBhbmQgbGF0ZXIpIHdpdGhvdXQgc2V0dGluZyB0aGUgbGlua2VyIHBhdGguCisKK1s2XSBUaGUgVHVyYm9KUEVHIEphdmEgd3JhcHBlciBzaG91bGQgbm93IGZpbmQgdGhlIEpOSSBsaWJyYXJ5IG9uIE1hYyBzeXN0ZW1zCit3aXRob3V0IGhhdmluZyB0byBwYXNzIC1EamF2YS5saWJyYXJ5LnBhdGg9L3Vzci9saWIgdG8gamF2YS4KKworWzddIFRKQmVuY2ggaGFzIGJlZW4gcG9ydGVkIHRvIEphdmEgdG8gcHJvdmlkZSBhIGNvbnZlbmllbnQgd2F5IG9mIHZhbGlkYXRpbmcKK3RoZSBwZXJmb3JtYW5jZSBvZiB0aGUgVHVyYm9KUEVHIEphdmEgQVBJLiAgSXQgY2FuIGJlIHJ1biB3aXRoCisnamF2YSAtY3AgdHVyYm9qcGVnLmphciBUSkJlbmNoJy4KKworWzhdIGNqcGVnIGNhbiBub3cgYmUgdXNlZCB0byBnZW5lcmF0ZSBKUEVHIGZpbGVzIHdpdGggdGhlIFJHQiBjb2xvcnNwYWNlCisoZmVhdHVyZSBwb3J0ZWQgZnJvbSBqcGVnLThkLikKKworWzldIFRoZSB3aWR0aCBhbmQgaGVpZ2h0IGluIHRoZSAtY3JvcCBhcmd1bWVudCBwYXNzZWQgdG8ganBlZ3RyYW4gY2FuIG5vdyBiZQorc3VmZml4ZWQgd2l0aCAiZiIgdG8gaW5kaWNhdGUgdGhhdCwgd2hlbiB0aGUgdXBwZXIgbGVmdCBjb3JuZXIgb2YgdGhlIGNyb3BwaW5nCityZWdpb24gaXMgYXV0b21hdGljYWxseSBtb3ZlZCB0byB0aGUgbmVhcmVzdCBpTUNVIGJvdW5kYXJ5LCB0aGUgYm90dG9tIHJpZ2h0Citjb3JuZXIgc2hvdWxkIGJlIG1vdmVkIGJ5IHRoZSBzYW1lIGFtb3VudC4gIEluIG90aGVyIHdvcmRzLCB0aGlzIGZlYXR1cmUgY2F1c2VzCitqcGVndHJhbiB0byBzdHJpY3RseSBob25vciB0aGUgc3BlY2lmaWVkIHdpZHRoL2hlaWdodCByYXRoZXIgdGhhbiB0aGUgc3BlY2lmaWVkCitib3R0b20gcmlnaHQgY29ybmVyIChmZWF0dXJlIHBvcnRlZCBmcm9tIGpwZWctOGQuKQorCitbMTBdIEpQRUcgZmlsZXMgdXNpbmcgdGhlIFJHQiBjb2xvcnNwYWNlIGNhbiBub3cgYmUgZGVjb21wcmVzc2VkIGludG8gZ3JheXNjYWxlCitpbWFnZXMgKGZlYXR1cmUgcG9ydGVkIGZyb20ganBlZy04ZC4pCisKK1sxMV0gRml4ZWQgYSByZWdyZXNzaW9uIGNhdXNlZCBieSAxLjIuMVs3XSB3aGVyZWJ5IHRoZSBidWlsZCB3b3VsZCBmYWlsIHdpdGgKK211bHRpcGxlICJNaXNtYXRjaCBpbiBvcGVyYW5kIHNpemVzIiBlcnJvcnMgd2hlbiBhdHRlbXB0aW5nIHRvIGJ1aWxkIHRoZSB4ODYKK1NJTUQgY29kZSB3aXRoIE5BU00gMC45OC4KKworWzEyXSBUaGUgaW4tbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBtYW5hZ2VycyAoanBlZ19tZW1fc3JjKCkgYW5kCitqcGVnX21lbV9kZXN0KCkpIGFyZSBub3cgaW5jbHVkZWQgYnkgZGVmYXVsdCB3aGVuIGJ1aWxkaW5nIGxpYmpwZWctdHVyYm8gd2l0aAorbGlianBlZyB2NmIgb3IgdjcgZW11bGF0aW9uLCBzbyB0aGF0IHByb2dyYW1zIGNhbiB0YWtlIGFkdmFudGFnZSBvZiB0aGVzZQorZnVuY3Rpb25zIHdpdGhvdXQgcmVxdWlyaW5nIHRoZSB1c2Ugb2YgdGhlIGJhY2t3YXJkLWluY29tcGF0aWJsZSBsaWJqcGVnIHY4CitBQkkuICBUaGUgImFnZSBudW1iZXIiIG9mIHRoZSBsaWJqcGVnLXR1cmJvIGxpYnJhcnkgb24gVW4qeCBzeXN0ZW1zIGhhcyBiZWVuCitpbmNyZW1lbnRlZCBieSAxIHRvIHJlZmxlY3QgdGhpcy4gIFlvdSBjYW4gZGlzYWJsZSB0aGlzIGZlYXR1cmUgd2l0aCBhCitjb25maWd1cmUvQ01ha2Ugc3dpdGNoIGluIG9yZGVyIHRvIHJldGFpbiBzdHJpY3QgQVBJL0FCSSBjb21wYXRpYmlsaXR5IHdpdGggdGhlCitsaWJqcGVnIHY2YiBvciB2NyBBUEkvQUJJIChvciB3aXRoIHByZXZpb3VzIHZlcnNpb25zIG9mIGxpYmpwZWctdHVyYm8uKSAgU2VlCitSRUFETUUtdHVyYm8udHh0IGZvciBtb3JlIGRldGFpbHMuCisKK1sxM10gQWRkZWQgQVJNIHY3cyBhcmNoaXRlY3R1cmUgdG8gbGlianBlZy5hIGFuZCBsaWJ0dXJib2pwZWcuYSBpbiB0aGUgb2ZmaWNpYWwKK2xpYmpwZWctdHVyYm8gYmluYXJ5IHBhY2thZ2UgZm9yIE9TIFgsIHNvIHRoYXQgdGhvc2UgbGlicmFyaWVzIGNhbiBiZSB1c2VkIHRvCitidWlsZCBhcHBsaWNhdGlvbnMgdGhhdCBsZXZlcmFnZSB0aGUgZmFzdGVyIENQVXMgaW4gdGhlIGlQaG9uZSA1IGFuZCBpUGFkIDQuCisKIAogMS4yLjEKID09PT09CkBAIC0xMTksOCArMjczLDggQEAKIGNvcnJlY3RseS4KIAogWzddIEFkZGVkIEFSTSB2NiBhbmQgQVJNIHY3IGFyY2hpdGVjdHVyZXMgdG8gbGlianBlZy5hIGFuZCBsaWJ0dXJib2pwZWcuYSBpbgotdGhlIG9mZmljaWFsIE9TIFggZGlzdHJpYnV0aW9uIHBhY2thZ2UsIHNvIHRoYXQgdGhvc2UgbGlicmFyaWVzIGNhbiBiZSB1c2VkIHRvCi1idWlsZCBib3RoIE9TIFggYW5kIGlPUyBhcHBsaWNhdGlvbnMuCit0aGUgb2ZmaWNpYWwgbGlianBlZy10dXJibyBiaW5hcnkgcGFja2FnZSBmb3IgT1MgWCwgc28gdGhhdCB0aG9zZSBsaWJyYXJpZXMgY2FuCitiZSB1c2VkIHRvIGJ1aWxkIGJvdGggT1MgWCBhbmQgaU9TIGFwcGxpY2F0aW9ucy4KIAogCiAxLjEuOTAgKDEuMiBiZXRhMSkKQEAgLTE2Niw3ICszMjAsNyBAQAogVHVyYm9KUEVHIDEuMiBBUEkgdXNlcyBwaXhlbCBmb3JtYXRzIHRvIGRlZmluZSB0aGUgc2l6ZSBhbmQgY29tcG9uZW50IG9yZGVyIG9mCiB0aGUgdW5jb21wcmVzc2VkIHNvdXJjZS9kZXN0aW5hdGlvbiBpbWFnZXMsIGFuZCBpdCBpbmNsdWRlcyBhIG1vcmUgZWZmaWNpZW50CiB2ZXJzaW9uIG9mIFRKQlVGU0laRSgpIHRoYXQgY29tcHV0ZXMgYSB3b3JzdC1jYXNlIEpQRUcgc2l6ZSBiYXNlZCBvbiB0aGUgbGV2ZWwKLW9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nLiAgVGhlIHJlZmFjdG9yZWQgaW1wbGVtZW50YXRpb24gb2YgVHVyYm9KUEVHL09TUworb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcuICBUaGUgcmVmYWN0b3JlZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVHVyYm9KUEVHIEFQSQogbm93IHVzZXMgdGhlIGxpYmpwZWcgbWVtb3J5IHNvdXJjZSBhbmQgZGVzdGluYXRpb24gbWFuYWdlcnMsIHdoaWNoIGFsbG93cyB0aGUKIFR1cmJvSlBFRyBjb21wcmVzc29yIHRvIGdyb3cgdGhlIEpQRUcgYnVmZmVyIGFzIG5lY2Vzc2FyeS4KIApAQCAtMjQyLDEyICszOTYsMTIgQEAKIGNhc2VzLgogCiBbMl0gRGVzcGl0ZSB0aGUgYWJvdmUsIHRoZSBmYXN0IGludGVnZXIgZm9yd2FyZCBEQ1Qgc3RpbGwgZGVncmFkZXMgc29tZXdoYXQgZm9yCi1KUEVHIHF1YWxpdGllcyBncmVhdGVyIHRoYW4gOTUsIHNvIFR1cmJvSlBFRy9PU1Mgd2lsbCBub3cgYXV0b21hdGljYWxseSB1c2UgdGhlCi1zbG93IGludGVnZXIgZm9yd2FyZCBEQ1Qgd2hlbiBnZW5lcmF0aW5nIEpQRUcgaW1hZ2VzIG9mIHF1YWxpdHkgOTYgb3IgZ3JlYXRlci4KLVRoaXMgcmVkdWNlcyBjb21wcmVzc2lvbiBwZXJmb3JtYW5jZSBieSBhcyBtdWNoIGFzIDE1JSBmb3IgdGhlc2UgaGlnaC1xdWFsaXR5Ci1pbWFnZXMgYnV0IGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhhdCB0aGUgaW1hZ2VzIGFyZSBwZXJjZXB0dWFsbHkgbG9zc2xlc3MuCi1JdCBhbHNvIGVuc3VyZXMgdGhhdCB0aGUgbGlicmFyeSBjYW4gYXZvaWQgdGhlIHBlcmZvcm1hbmNlIHBpdGZhbGwgY3JlYXRlZCBieQotWzFdLgorSlBFRyBxdWFsaXRpZXMgZ3JlYXRlciB0aGFuIDk1LCBzbyB0aGUgVHVyYm9KUEVHIHdyYXBwZXIgd2lsbCBub3cgYXV0b21hdGljYWxseQordXNlIHRoZSBzbG93IGludGVnZXIgZm9yd2FyZCBEQ1Qgd2hlbiBnZW5lcmF0aW5nIEpQRUcgaW1hZ2VzIG9mIHF1YWxpdHkgOTYgb3IKK2dyZWF0ZXIuICBUaGlzIHJlZHVjZXMgY29tcHJlc3Npb24gcGVyZm9ybWFuY2UgYnkgYXMgbXVjaCBhcyAxNSUgZm9yIHRoZXNlCitoaWdoLXF1YWxpdHkgaW1hZ2VzIGJ1dCBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoYXQgdGhlIGltYWdlcyBhcmUgcGVyY2VwdHVhbGx5Citsb3NzbGVzcy4gIEl0IGFsc28gZW5zdXJlcyB0aGF0IHRoZSBsaWJyYXJ5IGNhbiBhdm9pZCB0aGUgcGVyZm9ybWFuY2UgcGl0ZmFsbAorY3JlYXRlZCBieSBbMV0uCiAKIFszXSBQb3J0ZWQganBndGVzdC5jeHggdG8gcHVyZSBDIHRvIGF2b2lkIHRoZSBuZWVkIGZvciBhIEMrKyBjb21waWxlci4KIApAQCAtMzIwLDcgKzQ3NCw3IEBACiBbMV0gMjk4MzcwMDogRnVydGhlciBGcmVlQlNEIGJ1aWxkIHR3ZWFrcyAobm8gbG9uZ2VyIG5lY2Vzc2FyeSB0byBzcGVjaWZ5CiAtLWhvc3Qgd2hlbiBjb25maWd1cmluZyBvbiBhIDY0LWJpdCBzeXN0ZW0pCiAKLVsyXSBDcmVhdGVkIHN5bS4gbGlua3MgaW4gdGhlIFVuaXgvTGludXggcGFja2FnZXMgc28gdGhhdCB0aGUgVHVyYm9KUEVHCitbMl0gQ3JlYXRlZCBzeW1saW5rcyBpbiB0aGUgVW5peC9MaW51eCBwYWNrYWdlcyBzbyB0aGF0IHRoZSBUdXJib0pQRUcKIGluY2x1ZGUgZmlsZSBjYW4gYWx3YXlzIGJlIGZvdW5kIGluIC9vcHQvbGlianBlZy10dXJiby9pbmNsdWRlLCB0aGUgMzItYml0CiBzdGF0aWMgbGlicmFyaWVzIGNhbiBhbHdheXMgYmUgZm91bmQgaW4gL29wdC9saWJqcGVnLXR1cmJvL2xpYjMyLCBhbmQgdGhlCiA2NC1iaXQgc3RhdGljIGxpYnJhcmllcyBjYW4gYWx3YXlzIGJlIGZvdW5kIGluIC9vcHQvbGlianBlZy10dXJiby9saWI2NC4KZGlmZiAtLWdpdCBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KaW5kZXggMzUwNTBlMi4uNDI1ZTRlMiAxMDA2NDQKLS0tIGEvTWFrZWZpbGUuYW0KKysrIGIvTWFrZWZpbGUuYW0KQEAgLTEsOSArMSwxNiBAQAotbGliX0xUTElCUkFSSUVTID0gbGlianBlZy5sYSBsaWJ0dXJib2pwZWcubGEKLWxpYmpwZWdfbGFfTERGTEFHUyA9IC12ZXJzaW9uLWluZm8gJHtTT19NQUpPUl9WRVJTSU9OfToke1NPX01JTk9SX1ZFUlNJT059IC1uby11bmRlZmluZWQKLWxpYnR1cmJvanBlZ19sYV9MREZMQUdTID0gLWF2b2lkLXZlcnNpb24gLW5vLXVuZGVmaW5lZAotaW5jbHVkZV9IRUFERVJTID0gamVycm9yLmggam1vcmVjZmcuaCBqcGVnbGliLmggdHVyYm9qcGVnLmgKK2xpYl9MVExJQlJBUklFUyA9IGxpYmpwZWcubGEKK2xpYmpwZWdfbGFfTERGTEFHUyA9IC12ZXJzaW9uLWluZm8gJHtMSUJUT09MX0NVUlJFTlR9OiR7U09fTUlOT1JfVkVSU0lPTn06JHtTT19BR0V9IC1uby11bmRlZmluZWQKK2luY2x1ZGVfSEVBREVSUyA9IGplcnJvci5oIGptb3JlY2ZnLmgganBlZ2xpYi5oCisKK2lmIFdJVEhfVFVSQk9KUEVHCitsaWJfTFRMSUJSQVJJRVMgKz0gbGlidHVyYm9qcGVnLmxhCitsaWJ0dXJib2pwZWdfbGFfTERGTEFHUyA9IC12ZXJzaW9uLWluZm8gMDowIC1uby11bmRlZmluZWQKK2luY2x1ZGVfSEVBREVSUyArPSB0dXJib2pwZWcuaAorZW5kaWYKKwogbm9kaXN0X2luY2x1ZGVfSEVBREVSUyA9IGpjb25maWcuaAogCisKIEhEUlMgPSBqY2h1ZmYuaCBqZGN0LmggamRodWZmLmggamVycm9yLmggamluY2x1ZGUuaCBqbWVtc3lzLmggam1vcmVjZmcuaCBcCiAJanBlZ2ludC5oIGpwZWdsaWIuaCBqdmVyc2lvbi5oIGpzaW1kLmgganNpbWRkY3QuaCBqcGVnY29tcC5oCiAKQEAgLTE3LDI4ICsyNCwyNiBAQAogCWppZGN0cmVkLmMganF1YW50MS5jIGpxdWFudDIuYyBqdXRpbHMuYyBqbWVtbWdyLmMgam1lbW5vYnMuYwogCiBpZiBXSVRIX0FSSVRICi0KIGxpYmpwZWdfbGFfU09VUkNFUyArPSBqYXJpY29tLmMKLQogZW5kaWYKIAogaWYgV0lUSF9BUklUSF9FTkMKLQogbGlianBlZ19sYV9TT1VSQ0VTICs9IGpjYXJpdGguYwotCiBlbmRpZgogCiBpZiBXSVRIX0FSSVRIX0RFQwotCiBsaWJqcGVnX2xhX1NPVVJDRVMgKz0gamRhcml0aC5jCi0KIGVuZGlmCiAKKworU1VCRElSUyA9IGphdmEKKworCitpZiBXSVRIX1RVUkJPSlBFRworCiBsaWJ0dXJib2pwZWdfbGFfU09VUkNFUyA9ICQobGlianBlZ19sYV9TT1VSQ0VTKSB0dXJib2pwZWcuYyB0dXJib2pwZWcuaCBcCiAJdHJhbnN1cHAuYyB0cmFuc3VwcC5oIGpkYXRhZHN0LXRqLmMgamRhdGFzcmMtdGouYwogCi1TVUJESVJTID0gamF2YQotCiBpZiBXSVRIX0pBVkEKIAogbGlidHVyYm9qcGVnX2xhX1NPVVJDRVMgKz0gdHVyYm9qcGVnLWpuaS5jCkBAIC01NCwxMiArNTksMTcgQEAKIGxpYnR1cmJvanBlZ19sYV9TT1VSQ0VTICs9ICQoVEpNQVBGSUxFKQogCiBpZiBWRVJTSU9OX1NDUklQVAotCiBsaWJ0dXJib2pwZWdfbGFfTERGTEFHUyArPSAkKFZFUlNJT05fU0NSSVBUX0ZMQUcpJChzcmNkaXIpLyQoVEpNQVBGSUxFKQotbGlianBlZ19sYV9MREZMQUdTICs9ICQoVkVSU0lPTl9TQ1JJUFRfRkxBRylsaWJqcGVnLm1hcAorZW5kaWYKIAogZW5kaWYKIAorCitpZiBWRVJTSU9OX1NDUklQVAorbGlianBlZ19sYV9MREZMQUdTICs9ICQoVkVSU0lPTl9TQ1JJUFRfRkxBRylsaWJqcGVnLm1hcAorZW5kaWYKKworCiBpZiBXSVRIX1NJTUQKIAogU1VCRElSUyArPSBzaW1kCkBAIC03Miw4ICs4MiwxNiBAQAogCiBlbmRpZgogCi1iaW5fUFJPR1JBTVMgPSBjanBlZyBkanBlZyBqcGVndHJhbiByZGpwZ2NvbSB3cmpwZ2NvbSB0amJlbmNoCi1ub2luc3RfUFJPR1JBTVMgPSB0anVuaXR0ZXN0IGpjc3Rlc3QKKworYmluX1BST0dSQU1TID0gY2pwZWcgZGpwZWcganBlZ3RyYW4gcmRqcGdjb20gd3JqcGdjb20KK25vaW5zdF9QUk9HUkFNUyA9IGpjc3Rlc3QKKworCitpZiBXSVRIX1RVUkJPSlBFRworCitiaW5fUFJPR1JBTVMgKz0gdGpiZW5jaAorCitub2luc3RfUFJPR1JBTVMgKz0gdGp1bml0dGVzdAogCiB0amJlbmNoX1NPVVJDRVMgPSB0amJlbmNoLmMgYm1wLmggYm1wLmMgdGp1dGlsLmggdGp1dGlsLmMgcmRibXAuYyByZHBwbS5jIFwKIAl3cmJtcC5jIHdycHBtLmMKQEAgLTg2LDggKzEwNCwxMSBAQAogCiB0anVuaXR0ZXN0X0xEQUREID0gbGlidHVyYm9qcGVnLmxhCiAKK2VuZGlmCisKKwogY2pwZWdfU09VUkNFUyA9IGNkanBlZy5oIGNkZXJyb3IuaCBjZGpwZWcuYyBjanBlZy5jIHJkYm1wLmMgcmRnaWYuYyBcCi0JcmRwcG0uYyByZHN3aXRjaC5jIHJkdGFyZ2EuYyAKKwlyZHBwbS5jIHJkc3dpdGNoLmMgcmR0YXJnYS5jCiAKIGNqcGVnX0xEQUREID0gbGlianBlZy5sYQogCkBAIC0xMjAsMTIgKzE0MSwxMiBAQAogCiBkaXN0X21hbjFfTUFOUyA9IGNqcGVnLjEgZGpwZWcuMSBqcGVndHJhbi4xIHJkanBnY29tLjEgd3JqcGdjb20uMQogCi1ET0NTPSBpbnN0YWxsLnR4dCBjb2RlcnVsZXMudHh0IGZpbGVsaXN0LnR4dCBqY29uZmlnLnR4dCBjaGFuZ2UubG9nIFwKLQlyZHJsZS5jIHdycmxlLmMgQlVJTERJTkcudHh0IENoYW5nZUxvZy50eHQKK0RPQ1M9IGNvZGVydWxlcy50eHQgamNvbmZpZy50eHQgY2hhbmdlLmxvZyByZHJsZS5jIHdycmxlLmMgQlVJTERJTkcudHh0IFwKKwlDaGFuZ2VMb2cudHh0CiAKIGRvY2RpciA9ICQoZGF0YWRpcikvZG9jCiBkaXN0X2RvY19EQVRBID0gUkVBRE1FIFJFQURNRS10dXJiby50eHQgbGlianBlZy50eHQgc3RydWN0dXJlLnR4dCB1c2FnZS50eHQgXAotCXdpemFyZC50eHQgCisJd2l6YXJkLnR4dAogCiBleGFtcGxlZGlyID0gJChkYXRhZGlyKS9kb2MKIGRpc3RfZXhhbXBsZV9EQVRBID0gZXhhbXBsZS5jCkBAIC0xMzksNyArMTYwLDQzIEBACiAJcm0gLXJmIGBmaW5kICQoZGlzdGRpcikgLW5hbWUgLnN2bmAKIAogCitTVUJESVJTICs9IG1kNQorCitNRDVfSlBFR19JTlQgPSA5YTY4ZjU2YmM3NmU0NjZhYTdlNTJmNDE1ZDBmNGE1ZgorTUQ1X0pQRUdfRkFTVCA9IDBlMTUwMmU3ZmE0MjE4MzVlMzc2YTMxNGZhYzJhMzlmCitNRDVfSlBFR19GQVNUXzEwMCA9IDdiZjcyYThlNzQxZDY0ZWVjYjk2MGM5NzMyM2FmNzdjCitNRDVfSlBFR19GTE9BVCA9IGQxNjIzODg1ZmZhZmNkNDBjNjg0YWYwOWUzZDY1Y2Q1CitNRDVfSlBFR19GTE9BVF9OT1NJTUQgPSBmYjQ4ODRjMzVmODI3M2Y0OThjYjMyODc5ZGU1YzQ1NQorTUQ1X0pQRUdfSU5UX0dSQVkgPSA3MmI1MWY4OTRiOGY0YTEwYjNlZTMwNjY3NzBhYTM4ZAorTUQ1X1BQTV9JTlQgPSBkMWVkMGQxMWYwNzZiODQyNTI1MjcxNjQ3NzE2YWViOAorTUQ1X1BQTV9GQVNUID0gMDQ4Mjk4YTJkMjQxMDI2MWMwNTMzY2I5N2JjZmVmMjMKK01ENV9QUE1fRkxPQVQgPSA3ZjViNDQ2ZWUzNmIyNjMwZTA2Nzg1YjhkNDJhZjE1ZgorTUQ1X1BQTV9GTE9BVF9OT1NJTUQgPSA2NDA3MmYxZGJkYzViM2ExODc3Nzc3ODg2MDQ5NzFhNQorTUQ1X1BQTV9JTlRfMl8xID0gOWY5ZGU4YzA2MTJmOGQwNjg2OWI5NjBiMDVhYmY5YzkKK01ENV9QUE1fSU5UXzE1XzggPSBiNjg3NWJjMDcwNzIwYjg5OTU2NmNjMDY0NTliNjNiNworTUQ1X1BQTV9JTlRfN180ID0gMDZhMTc3ZWFlMDVmMTY0ZmFjNTdmN2EyYzM0NmVlODcKK01ENV9QUE1fSU5UXzEzXzggPSBiYzM0NTI1NzNjODE1MmY2YWU1NTI5MzllZTE5ZjgyZgorTUQ1X1BQTV9JTlRfM18yID0gZjVhOGI4OGE4YTdmOTYwMTZmMDRkMjU5Y2Y4MmVkNjcKK01ENV9QUE1fSU5UXzExXzggPSBkOGNjNzNjMGFhYWNkNDU1NjU2OWI1OTQzN2JhMDBhNQorTUQ1X1BQTV9JTlRfNV80ID0gMzI3NzVkZDlhZDJhYjkwZjRjNWIyMTliNTNlMGM4NmMKK01ENV9QUE1fSU5UXzlfOCA9IGQyNWU2MWJjN2VhYzAwMDJmNWIzOTNhYTIyMzc0N2I2CitNRDVfUFBNX0lOVF83XzggPSBkZGI1NjRiN2M3NGEwOTQ5NDAxNmQ2Y2Q3NTAyYTk0NgorTUQ1X1BQTV9JTlRfM180ID0gOGVkOGU2ODgwOGMzZmJjNGVhNzY0ZmM5ZDI5Njg2NDYKK01ENV9QUE1fSU5UXzVfOCA9IGEzMzYzMjc0OTk5ZGEyMzY2YTAyNGVmYWU2ZDE2YzliCitNRDVfUFBNX0lOVF8xXzIgPSBlNjkyYTMxNWNlYTI2Yjk4OGM4ZThiMjlhNWRiY2Q4MQorTUQ1X1BQTV9JTlRfM184ID0gNzllY2E5MTc1NjUyY2VkNzU1MTU1YzkwZTc4NWE5OTYKK01ENV9QUE1fSU5UXzFfNCA9IDc5Y2Q3NzhmOGJmMWExMTc2OTAwNTJjYWNkZDU0ZWNhCitNRDVfUFBNX0lOVF8xXzggPSAzOTFiM2Q0YWNhNjQwYzg1NjdkNmY4NzQ1ZWIyMTQyZgorTUQ1X1BQTV9GQVNUXzFfMiA9IGYzMGJjZjZkMzJjY2Q0NGNiZGQ5YWVhYWNiZDk0NTRmCitNRDVfQk1QXzI1NiA9IDQ5ODAxODVlMzc3NmU4OWJkOTMxNzM2ZTFjZGRlZWU2CitNRDVfSlBFR19BUkkgPSBlOTg2ZmIwYTYzN2E4ZDgzM2Q5NmU4YTZkNmQ4NGVhMQorTUQ1X1BQTV9BUkkgPSA3MmI1OWE5OWJjZjFkZTI0YzViMjdkMTUxYmRlMjQzNworTUQ1X0pQRUdfUFJPRyA9IDFjNGFmZGRjMDVjMGE0MzQ4OWVlNTQ0MzhhNDgyZDkyCitNRDVfSlBFR19QUk9HX0FSSSA9IDBhOGYxYzhmNjZlMTEzYzNjZjYzNWRmMGE0NzVhNjE3CitNRDVfSlBFR19DUk9QID0gYjQxOTdmMzc3ZTYyMWM0ZTliMWQyMDQ3MTQzMjYxMGQKKwogdGVzdDogdGVzdGNsZWFuIGFsbAoraWYgV0lUSF9UVVJCT0pQRUcKIGlmIFdJVEhfSkFWQQogCSQoSkFWQSkgLWNwIGphdmEvdHVyYm9qcGVnLmphciAtRGphdmEubGlicmFyeS5wYXRoPS5saWJzIFRKVW5pdFRlc3QKIAkkKEpBVkEpIC1jcCBqYXZhL3R1cmJvanBlZy5qYXIgLURqYXZhLmxpYnJhcnkucGF0aD0ubGlicyBUSlVuaXRUZXN0IC1iaQpAQCAtMTQ5LDY0ICsyMDYsODUgQEAKIAkuL3RqdW5pdHRlc3QKIAkuL3RqdW5pdHRlc3QgLWFsbG9jCiAJLi90anVuaXR0ZXN0IC15dXYKK2VuZGlmCiAJLi9janBlZyAtZGN0IGludCAtb3V0ZmlsZSB0ZXN0b3V0aW50LmpwZyAkKHNyY2RpcikvdGVzdGltYWdlcy90ZXN0b3JpZy5wcG0KLQljbXAgJChzcmNkaXIpL3Rlc3RpbWFnZXMvdGVzdGltZ2ludC5qcGcgdGVzdG91dGludC5qcGcKKwltZDUvbWQ1Y21wICQoTUQ1X0pQRUdfSU5UKSB0ZXN0b3V0aW50LmpwZwogCS4vY2pwZWcgLWRjdCBmYXN0IC1vcHQgLW91dGZpbGUgdGVzdG91dGZzdC5qcGcgJChzcmNkaXIpL3Rlc3RpbWFnZXMvdGVzdG9yaWcucHBtCi0JY21wICQoc3JjZGlyKS90ZXN0aW1hZ2VzL3Rlc3RpbWdmc3QuanBnIHRlc3RvdXRmc3QuanBnCisJbWQ1L21kNWNtcCAkKE1ENV9KUEVHX0ZBU1QpIHRlc3RvdXRmc3QuanBnCiAJLi9janBlZyAtZGN0IGZhc3QgLXF1YWxpdHkgMTAwIC1vcHQgLW91dGZpbGUgdGVzdG91dGZzdDEwMC5qcGcgJChzcmNkaXIpL3Rlc3RpbWFnZXMvdGVzdG9yaWcucHBtCi0JY21wICQoc3JjZGlyKS90ZXN0aW1hZ2VzL3Rlc3RpbWdmc3QxMDAuanBnIHRlc3RvdXRmc3QxMDAuanBnCisJbWQ1L21kNWNtcCAkKE1ENV9KUEVHX0ZBU1RfMTAwKSB0ZXN0b3V0ZnN0MTAwLmpwZwogCS4vY2pwZWcgLWRjdCBmbG9hdCAtb3V0ZmlsZSB0ZXN0b3V0Zmx0LmpwZyAkKHNyY2RpcikvdGVzdGltYWdlcy90ZXN0b3JpZy5wcG0KIGlmIFdJVEhfU1NFX0ZMT0FUX0RDVAotCWNtcCAkKHNyY2RpcikvdGVzdGltYWdlcy90ZXN0aW1nZmx0LmpwZyB0ZXN0b3V0Zmx0LmpwZworCW1kNS9tZDVjbXAgJChNRDVfSlBFR19GTE9BVCkgdGVzdG91dGZsdC5qcGcKIGVsc2UKLQljbXAgJChzcmNkaXIpL3Rlc3RpbWFnZXMvdGVzdGltZ2ZsdC1ub3NpbWQuanBnIHRlc3RvdXRmbHQuanBnCisJbWQ1L21kNWNtcCAkKE1ENV9KUEVHX0ZMT0FUX05PU0lNRCkgdGVzdG91dGZsdC5qcGcKIGVuZGlmCiAJLi9janBlZyAtZGN0IGludCAtZ3JheXNjYWxlIC1vdXRmaWxlIHRlc3RvdXRncmF5LmpwZyAkKHNyY2RpcikvdGVzdGltYWdlcy90ZXN0b3JpZy5wcG0KLQljbXAgJChzcmNkaXIpL3Rlc3RpbWFnZXMvdGVzdGltZ2dyYXkuanBnIHRlc3RvdXRncmF5LmpwZworCW1kNS9tZDVjbXAgJChNRDVfSlBFR19JTlRfR1JBWSkgdGVzdG91dGdyYXkuanBnCiAJLi9kanBlZyAtZGN0IGludCAtZmFzdCAtcHBtIC1vdXRmaWxlIHRlc3RvdXRpbnQucHBtICQoc3JjZGlyKS90ZXN0aW1hZ2VzL3Rlc3RvcmlnLmpwZwotCWNtcCAkKHNyY2RpcikvdGVzdGltYWdlcy90ZXN0aW1naW50LnBwbSB0ZXN0b3V0aW50LnBwbQorCW1kNS9tZDVjbXAgJChNRDVfUFBNX0lOVCkgdGVzdG91dGludC5wcG0KIAkuL2RqcGVnIC1kY3QgZmFzdCAtcHBtIC1vdXRmaWxlIHRlc3RvdXRmc3QucHBtICQoc3JjZGlyKS90ZXN0aW1hZ2VzL3Rlc3RvcmlnLmpwZwotCWNtcCAkKHNyY2RpcikvdGVzdGltYWdlcy90ZXN0aW1nZnN0LnBwbSB0ZXN0b3V0ZnN0LnBwbQorCW1kNS9tZDVjbXAgJChNRDVfUFBNX0ZBU1QpIHRlc3RvdXRmc3QucHBtCiAJLi9kanBlZyAtZGN0IGZsb2F0IC1wcG0gLW91dGZpbGUgdGVzdG91dGZsdC5wcG0gJChzcmNkaXIpL3Rlc3RpbWFnZXMvdGVzdG9yaWcuanBnCiBpZiBXSVRIX1NTRV9GTE9BVF9EQ1QKLQljbXAgJChzcmNkaXIpL3Rlc3RpbWFnZXMvdGVzdGltZ2ZsdC5wcG0gdGVzdG91dGZsdC5wcG0KKwltZDUvbWQ1Y21wICQoTUQ1X1BQTV9GTE9BVCkgdGVzdG91dGZsdC5wcG0KIGVsc2UKLQljbXAgJChzcmNkaXIpL3Rlc3RpbWFnZXMvdGVzdG9yaWcucHBtIHRlc3RvdXRmbHQucHBtCisJbWQ1L21kNWNtcCAkKE1ENV9QUE1fRkxPQVRfTk9TSU1EKSB0ZXN0b3V0Zmx0LnBwbQogZW5kaWYKLQkuL2RqcGVnIC1kY3QgaW50IC1zY2FsZSAxLzIgLXBwbSAtb3V0ZmlsZSB0ZXN0b3V0aW50MV8yLnBwbSAkKHNyY2RpcikvdGVzdGltYWdlcy90ZXN0b3JpZy5qcGcKLQljbXAgJChzcmNkaXIpL3Rlc3RpbWFnZXMvdGVzdGltZ2ludDFfMi5wcG0gdGVzdG91dGludDFfMi5wcG0KKwkuL2RqcGVnIC1kY3QgaW50IC1ub3Ntb290aCAtc2NhbGUgMi8xIC1wcG0gLW91dGZpbGUgdGVzdG91dGludDJfMS5wcG0gJChzcmNkaXIpL3Rlc3RpbWFnZXMvdGVzdG9yaWcuanBnOworCW1kNS9tZDVjbXAgJChNRDVfUFBNX0lOVF8yXzEpIHRlc3RvdXRpbnQyXzEucHBtOworCS4vZGpwZWcgLWRjdCBpbnQgLW5vc21vb3RoIC1zY2FsZSAxNS84IC1wcG0gLW91dGZpbGUgdGVzdG91dGludDE1XzgucHBtICQoc3JjZGlyKS90ZXN0aW1hZ2VzL3Rlc3RvcmlnLmpwZzsKKwltZDUvbWQ1Y21wICQoTUQ1X1BQTV9JTlRfMTVfOCkgdGVzdG91dGludDE1XzgucHBtOworCS4vZGpwZWcgLWRjdCBpbnQgLW5vc21vb3RoIC1zY2FsZSA3LzQgLXBwbSAtb3V0ZmlsZSB0ZXN0b3V0aW50N180LnBwbSAkKHNyY2RpcikvdGVzdGltYWdlcy90ZXN0b3JpZy5qcGc7CisJbWQ1L21kNWNtcCAkKE1ENV9QUE1fSU5UXzdfNCkgdGVzdG91dGludDdfNC5wcG07CisJLi9kanBlZyAtZGN0IGludCAtbm9zbW9vdGggLXNjYWxlIDEzLzggLXBwbSAtb3V0ZmlsZSB0ZXN0b3V0aW50MTNfOC5wcG0gJChzcmNkaXIpL3Rlc3RpbWFnZXMvdGVzdG9yaWcuanBnOworCW1kNS9tZDVjbXAgJChNRDVfUFBNX0lOVF8xM184KSB0ZXN0b3V0aW50MTNfOC5wcG07CisJLi9kanBlZyAtZGN0IGludCAtbm9zbW9vdGggLXNjYWxlIDMvMiAtcHBtIC1vdXRmaWxlIHRlc3RvdXRpbnQzXzIucHBtICQoc3JjZGlyKS90ZXN0aW1hZ2VzL3Rlc3RvcmlnLmpwZzsKKwltZDUvbWQ1Y21wICQoTUQ1X1BQTV9JTlRfM18yKSB0ZXN0b3V0aW50M18yLnBwbTsKKwkuL2RqcGVnIC1kY3QgaW50IC1ub3Ntb290aCAtc2NhbGUgMTEvOCAtcHBtIC1vdXRmaWxlIHRlc3RvdXRpbnQxMV84LnBwbSAkKHNyY2RpcikvdGVzdGltYWdlcy90ZXN0b3JpZy5qcGc7CisJbWQ1L21kNWNtcCAkKE1ENV9QUE1fSU5UXzExXzgpIHRlc3RvdXRpbnQxMV84LnBwbTsKKwkuL2RqcGVnIC1kY3QgaW50IC1ub3Ntb290aCAtc2NhbGUgNS80IC1wcG0gLW91dGZpbGUgdGVzdG91dGludDVfNC5wcG0gJChzcmNkaXIpL3Rlc3RpbWFnZXMvdGVzdG9yaWcuanBnOworCW1kNS9tZDVjbXAgJChNRDVfUFBNX0lOVF81XzQpIHRlc3RvdXRpbnQ1XzQucHBtOworCS4vZGpwZWcgLWRjdCBpbnQgLW5vc21vb3RoIC1zY2FsZSA5LzggLXBwbSAtb3V0ZmlsZSB0ZXN0b3V0aW50OV84LnBwbSAkKHNyY2RpcikvdGVzdGltYWdlcy90ZXN0b3JpZy5qcGc7CisJbWQ1L21kNWNtcCAkKE1ENV9QUE1fSU5UXzlfOCkgdGVzdG91dGludDlfOC5wcG07CisJLi9kanBlZyAtZGN0IGludCAtbm9zbW9vdGggLXNjYWxlIDcvOCAtcHBtIC1vdXRmaWxlIHRlc3RvdXRpbnQ3XzgucHBtICQoc3JjZGlyKS90ZXN0aW1hZ2VzL3Rlc3RvcmlnLmpwZzsKKwltZDUvbWQ1Y21wICQoTUQ1X1BQTV9JTlRfN184KSB0ZXN0b3V0aW50N184LnBwbTsKKwkuL2RqcGVnIC1kY3QgaW50IC1ub3Ntb290aCAtc2NhbGUgMy80IC1wcG0gLW91dGZpbGUgdGVzdG91dGludDNfNC5wcG0gJChzcmNkaXIpL3Rlc3RpbWFnZXMvdGVzdG9yaWcuanBnOworCW1kNS9tZDVjbXAgJChNRDVfUFBNX0lOVF8zXzQpIHRlc3RvdXRpbnQzXzQucHBtOworCS4vZGpwZWcgLWRjdCBpbnQgLW5vc21vb3RoIC1zY2FsZSA1LzggLXBwbSAtb3V0ZmlsZSB0ZXN0b3V0aW50NV84LnBwbSAkKHNyY2RpcikvdGVzdGltYWdlcy90ZXN0b3JpZy5qcGc7CisJbWQ1L21kNWNtcCAkKE1ENV9QUE1fSU5UXzVfOCkgdGVzdG91dGludDVfOC5wcG07CisJLi9kanBlZyAtZGN0IGludCAtbm9zbW9vdGggLXNjYWxlIDEvMiAtcHBtIC1vdXRmaWxlIHRlc3RvdXRpbnQxXzIucHBtICQoc3JjZGlyKS90ZXN0aW1hZ2VzL3Rlc3RvcmlnLmpwZzsKKwltZDUvbWQ1Y21wICQoTUQ1X1BQTV9JTlRfMV8yKSB0ZXN0b3V0aW50MV8yLnBwbTsKKwkuL2RqcGVnIC1kY3QgaW50IC1ub3Ntb290aCAtc2NhbGUgMy84IC1wcG0gLW91dGZpbGUgdGVzdG91dGludDNfOC5wcG0gJChzcmNkaXIpL3Rlc3RpbWFnZXMvdGVzdG9yaWcuanBnOworCW1kNS9tZDVjbXAgJChNRDVfUFBNX0lOVF8zXzgpIHRlc3RvdXRpbnQzXzgucHBtOworCS4vZGpwZWcgLWRjdCBpbnQgLW5vc21vb3RoIC1zY2FsZSAxLzQgLXBwbSAtb3V0ZmlsZSB0ZXN0b3V0aW50MV80LnBwbSAkKHNyY2RpcikvdGVzdGltYWdlcy90ZXN0b3JpZy5qcGc7CisJbWQ1L21kNWNtcCAkKE1ENV9QUE1fSU5UXzFfNCkgdGVzdG91dGludDFfNC5wcG07CisJLi9kanBlZyAtZGN0IGludCAtbm9zbW9vdGggLXNjYWxlIDEvOCAtcHBtIC1vdXRmaWxlIHRlc3RvdXRpbnQxXzgucHBtICQoc3JjZGlyKS90ZXN0aW1hZ2VzL3Rlc3RvcmlnLmpwZzsKKwltZDUvbWQ1Y21wICQoTUQ1X1BQTV9JTlRfMV84KSB0ZXN0b3V0aW50MV84LnBwbTsKIAkuL2RqcGVnIC1kY3QgZmFzdCAtc2NhbGUgMS8yIC1wcG0gLW91dGZpbGUgdGVzdG91dGZzdDFfMi5wcG0gJChzcmNkaXIpL3Rlc3RpbWFnZXMvdGVzdG9yaWcuanBnCi0JY21wICQoc3JjZGlyKS90ZXN0aW1hZ2VzL3Rlc3RpbWdmc3QxXzIucHBtIHRlc3RvdXRmc3QxXzIucHBtCi0JLi9kanBlZyAtZGN0IGludCAtc2NhbGUgMS80IC1wcG0gLW91dGZpbGUgdGVzdG91dGludDFfNC5wcG0gJChzcmNkaXIpL3Rlc3RpbWFnZXMvdGVzdG9yaWcuanBnCi0JY21wICQoc3JjZGlyKS90ZXN0aW1hZ2VzL3Rlc3RpbWdpbnQxXzQucHBtIHRlc3RvdXRpbnQxXzQucHBtCi0JLi9kanBlZyAtZGN0IGZhc3QgLXNjYWxlIDEvNCAtcHBtIC1vdXRmaWxlIHRlc3RvdXRmc3QxXzQucHBtICQoc3JjZGlyKS90ZXN0aW1hZ2VzL3Rlc3RvcmlnLmpwZwotCWNtcCAkKHNyY2RpcikvdGVzdGltYWdlcy90ZXN0aW1nZnN0MV80LnBwbSB0ZXN0b3V0ZnN0MV80LnBwbQotCS4vZGpwZWcgLWRjdCBpbnQgLXNjYWxlIDEvOCAtcHBtIC1vdXRmaWxlIHRlc3RvdXRpbnQxXzgucHBtICQoc3JjZGlyKS90ZXN0aW1hZ2VzL3Rlc3RvcmlnLmpwZwotCWNtcCAkKHNyY2RpcikvdGVzdGltYWdlcy90ZXN0aW1naW50MV84LnBwbSB0ZXN0b3V0aW50MV84LnBwbQotCS4vZGpwZWcgLWRjdCBmYXN0IC1zY2FsZSAxLzggLXBwbSAtb3V0ZmlsZSB0ZXN0b3V0ZnN0MV84LnBwbSAkKHNyY2RpcikvdGVzdGltYWdlcy90ZXN0b3JpZy5qcGcKLQljbXAgJChzcmNkaXIpL3Rlc3RpbWFnZXMvdGVzdGltZ2ZzdDFfOC5wcG0gdGVzdG91dGZzdDFfOC5wcG0KLQkuL2RqcGVnIC1kY3QgaW50IC1ibXAgLWNvbG9ycyAyNTYgLW91dGZpbGUgdGVzdG91dC5ibXAgICQoc3JjZGlyKS90ZXN0aW1hZ2VzL3Rlc3RvcmlnLmpwZwotCWNtcCAkKHNyY2RpcikvdGVzdGltYWdlcy90ZXN0aW1nLmJtcCB0ZXN0b3V0LmJtcAorCW1kNS9tZDVjbXAgJChNRDVfUFBNX0ZBU1RfMV8yKSB0ZXN0b3V0ZnN0MV8yLnBwbQorCS4vZGpwZWcgLWRjdCBpbnQgLWJtcCAtY29sb3JzIDI1NiAtb3V0ZmlsZSB0ZXN0b3V0LmJtcCAkKHNyY2RpcikvdGVzdGltYWdlcy90ZXN0b3JpZy5qcGcKKwltZDUvbWQ1Y21wICQoTUQ1X0JNUF8yNTYpIHRlc3RvdXQuYm1wCiBpZiBXSVRIX0FSSVRIX0VOQwogCS4vY2pwZWcgLWRjdCBpbnQgLWFyaXRobWV0aWMgLW91dGZpbGUgdGVzdG91dGFyaS5qcGcgJChzcmNkaXIpL3Rlc3RpbWFnZXMvdGVzdG9yaWcucHBtCi0JY21wICQoc3JjZGlyKS90ZXN0aW1hZ2VzL3Rlc3RpbWdhcmkuanBnIHRlc3RvdXRhcmkuanBnCisJbWQ1L21kNWNtcCAkKE1ENV9KUEVHX0FSSSkgdGVzdG91dGFyaS5qcGcKIAkuL2pwZWd0cmFuIC1hcml0aG1ldGljIC1vdXRmaWxlIHRlc3RvdXRhLmpwZyAkKHNyY2RpcikvdGVzdGltYWdlcy90ZXN0aW1naW50LmpwZwotCWNtcCAkKHNyY2RpcikvdGVzdGltYWdlcy90ZXN0aW1nYXJpLmpwZyB0ZXN0b3V0YS5qcGcKKwltZDUvbWQ1Y21wICQoTUQ1X0pQRUdfQVJJKSB0ZXN0b3V0YS5qcGcKIAkuL2NqcGVnIC1kY3QgaW50IC1wcm9ncmVzc2l2ZSAtYXJpdGhtZXRpYyAtc2FtcGxlIDF4MSAtb3V0ZmlsZSB0ZXN0b3V0cGEuanBnICQoc3JjZGlyKS90ZXN0aW1hZ2VzL3Rlc3RvcmlnLnBwbQotCWNtcCAkKHNyY2RpcikvdGVzdGltYWdlcy90ZXN0aW1ncGEuanBnIHRlc3RvdXRwYS5qcGcKKwltZDUvbWQ1Y21wICQoTUQ1X0pQRUdfUFJPR19BUkkpIHRlc3RvdXRwYS5qcGcKIGVuZGlmCiBpZiBXSVRIX0FSSVRIX0RFQwogCS4vZGpwZWcgLWRjdCBpbnQgLWZhc3QgLXBwbSAtb3V0ZmlsZSB0ZXN0b3V0YXJpLnBwbSAkKHNyY2RpcikvdGVzdGltYWdlcy90ZXN0aW1nYXJpLmpwZwotCWNtcCAkKHNyY2RpcikvdGVzdGltYWdlcy90ZXN0aW1nYXJpLnBwbSB0ZXN0b3V0YXJpLnBwbQorCW1kNS9tZDVjbXAgJChNRDVfUFBNX0FSSSkgdGVzdG91dGFyaS5wcG0KIAkuL2pwZWd0cmFuIC1vdXRmaWxlIHRlc3RvdXRhLmpwZyAkKHNyY2RpcikvdGVzdGltYWdlcy90ZXN0aW1nYXJpLmpwZwotCWNtcCAkKHNyY2RpcikvdGVzdGltYWdlcy90ZXN0aW1naW50LmpwZyB0ZXN0b3V0YS5qcGcKKwltZDUvbWQ1Y21wICQoTUQ1X0pQRUdfSU5UKSB0ZXN0b3V0YS5qcGcKIGVuZGlmCiAJLi9janBlZyAtZGN0IGludCAtcHJvZ3Jlc3NpdmUgLW91dGZpbGUgdGVzdG91dHAuanBnICQoc3JjZGlyKS90ZXN0aW1hZ2VzL3Rlc3RvcmlnLnBwbQotCWNtcCAkKHNyY2RpcikvdGVzdGltYWdlcy90ZXN0aW1ncC5qcGcgdGVzdG91dHAuanBnCisJbWQ1L21kNWNtcCAkKE1ENV9KUEVHX1BST0cpIHRlc3RvdXRwLmpwZwogCS4vanBlZ3RyYW4gLW91dGZpbGUgdGVzdG91dHQuanBnIHRlc3RvdXRwLmpwZwotCWNtcCAkKHNyY2RpcikvdGVzdGltYWdlcy90ZXN0aW1naW50LmpwZyB0ZXN0b3V0dC5qcGcKKwltZDUvbWQ1Y21wICQoTUQ1X0pQRUdfSU5UKSB0ZXN0b3V0dC5qcGcKIAkuL2pwZWd0cmFuIC1jcm9wIDEyMHg5MCsyMCs1MCAtdHJhbnNwb3NlIC1wZXJmZWN0IC1vdXRmaWxlIHRlc3RvdXRjcm9wLmpwZyAkKHNyY2RpcikvdGVzdGltYWdlcy90ZXN0b3JpZy5qcGcKLQljbXAgJChzcmNkaXIpL3Rlc3RpbWFnZXMvdGVzdGltZ2Nyb3AuanBnIHRlc3RvdXRjcm9wLmpwZworCW1kNS9tZDVjbXAgJChNRDVfSlBFR19DUk9QKSB0ZXN0b3V0Y3JvcC5qcGcKIAogCiB0ZXN0Y2xlYW46CkBAIC0yNDAsOTQgKzMxOCw4OSBAQAogCiB0anRlc3Q6CiAJc2ggLi90amJlbmNodGVzdAorCXNoIC4vdGpiZW5jaHRlc3QgLWFsbG9jCiBpZiBXSVRIX0pBVkEKLQlzaCAuL3RqZXhhbXBsZXRlc3QKKwlzaCAuL3RqYmVuY2h0ZXN0LmphdmEKIGVuZGlmCiAKIAotaWYgWDg2XzY0Citwa2dzY3JpcHRzL2xpYmpwZWctdHVyYm8uc3BlYzogcGtnc2NyaXB0cy9saWJqcGVnLXR1cmJvLnNwZWMudG1wbAorCWNhdCBwa2dzY3JpcHRzL2xpYmpwZWctdHVyYm8uc3BlYy50bXBsIHwgc2VkIHNAJXtfX3ByZWZpeH1AJChwcmVmaXgpQGcgfCBcCisJCXNlZCBzQCV7X19iaW5kaXJ9QCQoYmluZGlyKUBnIHwgc2VkIHNAJXtfX2RhdGFkaXJ9QCQoZGF0YWRpcilAZyB8IFwKKwkJc2VkIHNAJXtfX2RvY2Rpcn1AJChkb2NkaXIpQGcgfCBzZWQgc0Ale19faW5jbHVkZWRpcn1AJChpbmNsdWRlZGlyKUBnIHwgXAorCQlzZWQgc0Ale19fbGliZGlyfUAkKGxpYmRpcilAZyB8IHNlZCBzQCV7X19tYW5kaXJ9QCQobWFuZGlyKUBnIFwKKwkJPiBwa2dzY3JpcHRzL2xpYmpwZWctdHVyYm8uc3BlYwogCi1pbnN0YWxsLWV4ZWMtaG9vazoKLQlfX1BSRUZJWD1gZWNobyAke3ByZWZpeH0gfCBzZWQgLWUgJ3NAXC8qJCRAQCdgOyAgXAotCWlmIFsgIiQkX19QUkVGSVgiID0gIi9vcHQvbGlianBlZy10dXJibyIgXTsgdGhlbiAgXAotCQljZCAkKERFU1RESVIpLyR7cHJlZml4fTsgIFwKLQkJaWYgWyAtZCBsaWIgLWEgISAtZCBsaWI2NCAtYSAhIC1oIGxpYjY0IF07IHRoZW4gIFwKLQkJCSQoTE5fUykgbGliIGxpYjY0OyAgXAotCQlmaSAgXAotCWZpCi0KLWVsc2UKLQotaW5zdGFsbC1leGVjLWhvb2s6Ci0JX19QUkVGSVg9YGVjaG8gJHtwcmVmaXh9IHwgc2VkIC1lICdzQFwvKiQkQEAnYDsgIFwKLQlpZiBbICIkJF9fUFJFRklYIiA9ICIvb3B0L2xpYmpwZWctdHVyYm8iIF07IHRoZW4gIFwKLQkJY2QgJChERVNURElSKS8ke3ByZWZpeH07ICBcCi0JCWlmIFsgLWQgbGliIC1hICEgLWQgbGliMzIgLWEgISAtaCBsaWIzMiBdOyB0aGVuICBcCi0JCQkkKExOX1MpIGxpYiBsaWIzMjsgIFwKLQkJZmkgIFwKLQlmaQotCi1lbmRpZgotCi1ycG06IGFsbAorcnBtOiBhbGwgcGtnc2NyaXB0cy9saWJqcGVnLXR1cmJvLnNwZWMKIAlUTVBESVI9YG1rdGVtcCAtZCAvdG1wLyR7UEFDS0FHRV9OQU1FfS1idWlsZC5YWFhYWFhgOyBcCiAJbWtkaXIgLXAgJCRUTVBESVIvUlBNUzsgXAogCWxuIC1mcyBgcHdkYCAkJFRNUERJUi9CVUlMRDsgXAotCXJtIC1mICR7UEFDS0FHRV9OQU1FfS0ke1ZFUlNJT059LiR7UlBNQVJDSH0ucnBtOyBcCisJcm0gLWYgJHtQS0dOQU1FfS0ke1ZFUlNJT059LiR7UlBNQVJDSH0ucnBtOyBcCiAJcnBtYnVpbGQgLWJiIC0tZGVmaW5lICJfYmxkZGlyICQkVE1QRElSL2J1aWxkcm9vdCIgIFwKIAkJLS1kZWZpbmUgIl90b3BkaXIgJCRUTVBESVIiIFwKIAkJLS10YXJnZXQgJHtSUE1BUkNIfSBwa2dzY3JpcHRzL2xpYmpwZWctdHVyYm8uc3BlYzsgXAotCWNwICQkVE1QRElSL1JQTVMvJHtSUE1BUkNIfS8ke1BBQ0tBR0VfTkFNRX0tJHtWRVJTSU9OfS0ke0JVSUxEfS4ke1JQTUFSQ0h9LnJwbSBcCi0JCSR7UEFDS0FHRV9OQU1FfS0ke1ZFUlNJT059LiR7UlBNQVJDSH0ucnBtOyBcCisJY3AgJCRUTVBESVIvUlBNUy8ke1JQTUFSQ0h9LyR7UEtHTkFNRX0tJHtWRVJTSU9OfS0ke0JVSUxEfS4ke1JQTUFSQ0h9LnJwbSBcCisJCSR7UEtHTkFNRX0tJHtWRVJTSU9OfS4ke1JQTUFSQ0h9LnJwbTsgXAogCXJtIC1yZiAkJFRNUERJUgogCi1zcnBtOiBkaXN0LWd6aXAKK3NycG06IGRpc3QtZ3ppcCBwa2dzY3JpcHRzL2xpYmpwZWctdHVyYm8uc3BlYwogCVRNUERJUj1gbWt0ZW1wIC1kIC90bXAvJHtQQUNLQUdFX05BTUV9LWJ1aWxkLlhYWFhYWGA7IFwKIAlta2RpciAtcCAkJFRNUERJUi9SUE1TOyBcCiAJbWtkaXIgLXAgJCRUTVBESVIvU1JQTVM7IFwKIAlta2RpciAtcCAkJFRNUERJUi9CVUlMRDsgXAogCW1rZGlyIC1wICQkVE1QRElSL1NPVVJDRVM7IFwKIAlta2RpciAtcCAkJFRNUERJUi9TUEVDUzsgXAotCXJtIC1mICR7UEFDS0FHRV9OQU1FfS0ke1ZFUlNJT059LnNyYy5ycG07IFwKKwlybSAtZiAke1BLR05BTUV9LSR7VkVSU0lPTn0uc3JjLnJwbTsgXAogCWNwICR7UEFDS0FHRV9OQU1FfS0ke1ZFUlNJT059LnRhci5neiAkJFRNUERJUi9TT1VSQ0VTOyBcCiAJY2F0IHBrZ3NjcmlwdHMvbGlianBlZy10dXJiby5zcGVjIHwgc2VkIHMvJXtfYmxkZGlyfS8le190bXBwYXRofS9nIFwKIAkJfCBzZWQgcy8jLS1cPi8vZyBcCiAJCT4gJCRUTVBESVIvU1BFQ1MvbGlianBlZy10dXJiby5zcGVjOyBcCiAJcnBtYnVpbGQgLWJzIC0tZGVmaW5lICJfdG9wZGlyICQkVE1QRElSIiAkJFRNUERJUi9TUEVDUy9saWJqcGVnLXR1cmJvLnNwZWM7IFwKLQljcCAkJFRNUERJUi9TUlBNUy8ke1BBQ0tBR0VfTkFNRX0tJHtWRVJTSU9OfS0ke0JVSUxEfS5zcmMucnBtIFwKLQkJJHtQQUNLQUdFX05BTUV9LSR7VkVSU0lPTn0uc3JjLnJwbTsgXAorCWNwICQkVE1QRElSL1NSUE1TLyR7UEtHTkFNRX0tJHtWRVJTSU9OfS0ke0JVSUxEfS5zcmMucnBtIFwKKwkJJHtQS0dOQU1FfS0ke1ZFUlNJT059LnNyYy5ycG07IFwKIAlybSAtcmYgJCRUTVBESVIKIAotZGViOiBhbGwKK3BrZ3NjcmlwdHMvbWFrZWRwa2c6IHBrZ3NjcmlwdHMvbWFrZWRwa2cudG1wbAorCWNhdCBwa2dzY3JpcHRzL21ha2VkcGtnLnRtcGwgfCBzZWQgc0Ale19fcHJlZml4fUAkKHByZWZpeClAZyB8IFwKKwkJc2VkIHNAJXtfX2RvY2Rpcn1AJChkb2NkaXIpQGcgfCBzZWQgc0Ale19fbGliZGlyfUAkKGxpYmRpcilAZyBcCisJCT4gcGtnc2NyaXB0cy9tYWtlZHBrZworCitkZWI6IGFsbCBwa2dzY3JpcHRzL21ha2VkcGtnCiAJc2ggcGtnc2NyaXB0cy9tYWtlZHBrZwogCitwa2dzY3JpcHRzL3VuaW5zdGFsbDogcGtnc2NyaXB0cy91bmluc3RhbGwudG1wbAorCWNhdCBwa2dzY3JpcHRzL3VuaW5zdGFsbC50bXBsIHwgc2VkIHNAJXtfX3ByZWZpeH1AJChwcmVmaXgpQGcgfCBcCisJCXNlZCBzQCV7X19iaW5kaXJ9QCQoYmluZGlyKUBnIHwgc2VkIHNAJXtfX2RhdGFkaXJ9QCQoZGF0YWRpcilAZyB8IFwKKwkJc2VkIHNAJXtfX2luY2x1ZGVkaXJ9QCQoaW5jbHVkZWRpcilAZyB8IHNlZCBzQCV7X19saWJkaXJ9QCQobGliZGlyKUBnIHwgXAorCQlzZWQgc0Ale19fbWFuZGlyfUAkKG1hbmRpcilAZyA+IHBrZ3NjcmlwdHMvdW5pbnN0YWxsCisKK3BrZ3NjcmlwdHMvbWFrZW1hY3BrZzogcGtnc2NyaXB0cy9tYWtlbWFjcGtnLnRtcGwKKwljYXQgcGtnc2NyaXB0cy9tYWtlbWFjcGtnLnRtcGwgfCBzZWQgc0Ale19fcHJlZml4fUAkKHByZWZpeClAZyB8IFwKKwkJc2VkIHNAJXtfX2JpbmRpcn1AJChiaW5kaXIpQGcgfCBzZWQgc0Ale19fZG9jZGlyfUAkKGRvY2RpcilAZyB8IFwKKwkJc2VkIHNAJXtfX2xpYmRpcn1AJChsaWJkaXIpQGcgPiBwa2dzY3JpcHRzL21ha2VtYWNwa2cKKwogaWYgWDg2XzY0CiAKLXVkbWc6IGFsbAordWRtZzogYWxsIHBrZ3NjcmlwdHMvbWFrZW1hY3BrZyBwa2dzY3JpcHRzL3VuaW5zdGFsbAogCXNoIHBrZ3NjcmlwdHMvbWFrZW1hY3BrZyAtYnVpbGQzMiAke0JVSUxERElSMzJ9CiAKLWlvc2RtZzogYWxsCi0Jc2ggcGtnc2NyaXB0cy9tYWtlbWFjcGtnIC1idWlsZDMyICR7QlVJTERESVIzMn0gLWJ1aWxkYXJtdjYgJHtCVUlMRERJUkFSTVY2fSAtYnVpbGRhcm12NyAke0JVSUxERElSQVJNVjd9Citpb3NkbWc6IGFsbCBwa2dzY3JpcHRzL21ha2VtYWNwa2cgcGtnc2NyaXB0cy91bmluc3RhbGwKKwlzaCBwa2dzY3JpcHRzL21ha2VtYWNwa2cgLWJ1aWxkMzIgJHtCVUlMRERJUjMyfSAtYnVpbGRhcm12NiAke0JVSUxERElSQVJNVjZ9IC1idWlsZGFybXY3ICR7QlVJTERESVJBUk1WN30gLWJ1aWxkYXJtdjdzICR7QlVJTERESVJBUk1WN1N9CiAKIGVsc2UKIAotaW9zZG1nOiBhbGwKLQlzaCBwa2dzY3JpcHRzL21ha2VtYWNwa2cgLWJ1aWxkYXJtdjYgJHtCVUlMRERJUkFSTVY2fSAtYnVpbGRhcm12NyAke0JVSUxERElSQVJNVjd9Citpb3NkbWc6IGFsbCBwa2dzY3JpcHRzL21ha2VtYWNwa2cgcGtnc2NyaXB0cy91bmluc3RhbGwKKwlzaCBwa2dzY3JpcHRzL21ha2VtYWNwa2cgLWJ1aWxkYXJtdjYgJHtCVUlMRERJUkFSTVY2fSAtYnVpbGRhcm12NyAke0JVSUxERElSQVJNVjd9IC1idWlsZGFybXY3cyAke0JVSUxERElSQVJNVjdTfQogCiBlbmRpZgogCi1kbWc6IGFsbAorZG1nOiBhbGwgcGtnc2NyaXB0cy9tYWtlbWFjcGtnIHBrZ3NjcmlwdHMvdW5pbnN0YWxsCiAJc2ggcGtnc2NyaXB0cy9tYWtlbWFjcGtnCiAKLWlmIFg4Nl82NAorcGtnc2NyaXB0cy9tYWtlY3lnd2lucGtnOiBwa2dzY3JpcHRzL21ha2VjeWd3aW5wa2cudG1wbAorCWNhdCBwa2dzY3JpcHRzL21ha2VjeWd3aW5wa2cudG1wbCB8IHNlZCBzQCV7X19wcmVmaXh9QCQocHJlZml4KUBnIHwgXAorCQlzZWQgc0Ale19fZG9jZGlyfUAkKGRvY2RpcilAZyB8IHNlZCBzQCV7X19saWJkaXJ9QCQobGliZGlyKUBnIFwKKwkJPiBwa2dzY3JpcHRzL21ha2VjeWd3aW5wa2cKIAotY3N1bnBrZzogYWxsCi0Jc2ggcGtnc2NyaXB0cy9tYWtlc3VucGtnIGNvbWJpbmVkICR7QlVJTERESVIzMn0KLQotZW5kaWYKLQotc3VucGtnOiBhbGwKLQlzaCBwa2dzY3JpcHRzL21ha2VzdW5wa2cKLQotY3lnd2lucGtnOiBhbGwKK2N5Z3dpbnBrZzogYWxsIHBrZ3NjcmlwdHMvbWFrZWN5Z3dpbnBrZwogCXNoIHBrZ3NjcmlwdHMvbWFrZWN5Z3dpbnBrZwpkaWZmIC0tZ2l0IGEvUkVBRE1FIGIvUkVBRE1FCmluZGV4IGViOWViYjEuLjQ0ZTY5ZDMgMTAwNjQ0Ci0tLSBhL1JFQURNRQorKysgYi9SRUFETUUKQEAgLTE3LDcgKzE3LDggQEAKIEp1bGlhbiBNaW5ndWlsbG9uLCBMdWlzIE9ydGl6LCBHZW9yZ2UgUGhpbGxpcHMsIERhdmlkZSBSb3NzaSwgR2UnIFdlaWplcnMsCiBhbmQgb3RoZXIgbWVtYmVycyBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cC4KIAotSUpHIGlzIG5vdCBhZmZpbGlhdGVkIHdpdGggdGhlIG9mZmljaWFsIElTTyBKUEVHIHN0YW5kYXJkcyBjb21taXR0ZWUuCitJSkcgaXMgbm90IGFmZmlsaWF0ZWQgd2l0aCB0aGUgSVNPL0lFQyBKVEMxL1NDMjkvV0cxIHN0YW5kYXJkcyBjb21taXR0ZWUKKyhhbHNvIGtub3duIGFzIEpQRUcsIHRvZ2V0aGVyIHdpdGggSVRVLVQgU0cxNikuCiAKIAogRE9DVU1FTlRBVElPTiBST0FETUFQCkBAIC00NSw3ICs0Niw2IEBACiAgIGxpYmpwZWcudHh0ICAgICAgIEhvdyB0byB1c2UgdGhlIEpQRUcgbGlicmFyeSBpbiB5b3VyIG93biBwcm9ncmFtcy4KICAgZXhhbXBsZS5jICAgICAgICAgU2FtcGxlIGNvZGUgZm9yIGNhbGxpbmcgdGhlIEpQRUcgbGlicmFyeS4KICAgc3RydWN0dXJlLnR4dCAgICAgT3ZlcnZpZXcgb2YgdGhlIEpQRUcgbGlicmFyeSdzIGludGVybmFsIHN0cnVjdHVyZS4KLSAgZmlsZWxpc3QudHh0ICAgICAgUm9hZCBtYXAgb2YgSUpHIGZpbGVzLgogICBjb2RlcnVsZXMudHh0ICAgICBDb2Rpbmcgc3R5bGUgcnVsZXMgLS0tIHBsZWFzZSByZWFkIGlmIHlvdSBjb250cmlidXRlIGNvZGUuCiAKIFBsZWFzZSByZWFkIGF0IGxlYXN0IHRoZSBmaWxlcyBpbnN0YWxsLnR4dCBhbmQgdXNhZ2UudHh0LiAgU29tZSBpbmZvcm1hdGlvbgpAQCAtNjIsNyArNjIsNyBAQAogCiBUaGlzIHBhY2thZ2UgY29udGFpbnMgQyBzb2Z0d2FyZSB0byBpbXBsZW1lbnQgSlBFRyBpbWFnZSBlbmNvZGluZywgZGVjb2RpbmcsCiBhbmQgdHJhbnNjb2RpbmcuICBKUEVHIChwcm9ub3VuY2VkICJqYXktcGVnIikgaXMgYSBzdGFuZGFyZGl6ZWQgY29tcHJlc3Npb24KLW1ldGhvZCBmb3IgZnVsbC1jb2xvciBhbmQgZ3JheS1zY2FsZSBpbWFnZXMuICBKUEVHJ3Mgc3Ryb25nIHN1aXQgaXMgY29tcHJlc3NpbmcKK21ldGhvZCBmb3IgZnVsbC1jb2xvciBhbmQgZ3JheXNjYWxlIGltYWdlcy4gIEpQRUcncyBzdHJvbmcgc3VpdCBpcyBjb21wcmVzc2luZwogcGhvdG9ncmFwaGljIGltYWdlcyBvciBvdGhlciB0eXBlcyBvZiBpbWFnZXMgdGhhdCBoYXZlIHNtb290aCBjb2xvciBhbmQKIGJyaWdodG5lc3MgdHJhbnNpdGlvbnMgYmV0d2VlbiBuZWlnaGJvcmluZyBwaXhlbHMuICBJbWFnZXMgd2l0aCBzaGFycCBsaW5lcyBvcgogb3RoZXIgYWJydXB0IGZlYXR1cmVzIG1heSBub3QgY29tcHJlc3Mgd2VsbCB3aXRoIEpQRUcsIGFuZCBhIGhpZ2hlciBKUEVHCkBAIC0xMjksNyArMTI5LDcgQEAKIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAiQVMgSVMiLCBhbmQgeW91LAogaXRzIHVzZXIsIGFzc3VtZSB0aGUgZW50aXJlIHJpc2sgYXMgdG8gaXRzIHF1YWxpdHkgYW5kIGFjY3VyYWN5LgogCi1UaGlzIHNvZnR3YXJlIGlzIGNvcHlyaWdodCAoQykgMTk5MS0yMDEwLCBUaG9tYXMgRy4gTGFuZSwgR3VpZG8gVm9sbGJlZGluZy4KK1RoaXMgc29mdHdhcmUgaXMgY29weXJpZ2h0IChDKSAxOTkxLTIwMTIsIFRob21hcyBHLiBMYW5lLCBHdWlkbyBWb2xsYmVkaW5nLgogQWxsIFJpZ2h0cyBSZXNlcnZlZCBleGNlcHQgYXMgc3BlY2lmaWVkIGJlbG93LgogCiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCkBAIC0xNjAsMTUgKzE2MCw2IEBACiBhc3N1bWVkIGJ5IHRoZSBwcm9kdWN0IHZlbmRvci4KIAogCi1hbnNpMmtuci5jIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGJ5IHBlcm1pc3Npb24gb2YgTC4gUGV0ZXIgRGV1dHNjaCwKLXNvbGUgcHJvcHJpZXRvciBvZiBpdHMgY29weXJpZ2h0IGhvbGRlciwgQWxhZGRpbiBFbnRlcnByaXNlcyBvZiBNZW5sbyBQYXJrLCBDQS4KLWFuc2kya25yLmMgaXMgTk9UIGNvdmVyZWQgYnkgdGhlIGFib3ZlIGNvcHlyaWdodCBhbmQgY29uZGl0aW9ucywgYnV0IGluc3RlYWQKLWJ5IHRoZSB1c3VhbCBkaXN0cmlidXRpb24gdGVybXMgb2YgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgcHJpbmNpcGFsbHksCi10aGF0IHlvdSBtdXN0IGluY2x1ZGUgc291cmNlIGNvZGUgaWYgeW91IHJlZGlzdHJpYnV0ZSBpdC4gIChTZWUgdGhlIGZpbGUKLWFuc2kya25yLmMgZm9yIGZ1bGwgZGV0YWlscy4pICBIb3dldmVyLCBzaW5jZSBhbnNpMmtuci5jIGlzIG5vdCBuZWVkZWQgYXMgcGFydAotb2YgYW55IHByb2dyYW0gZ2VuZXJhdGVkIGZyb20gdGhlIElKRyBjb2RlLCB0aGlzIGRvZXMgbm90IGxpbWl0IHlvdSBtb3JlIHRoYW4KLXRoZSBmb3JlZ29pbmcgcGFyYWdyYXBocyBkby4KLQogVGhlIFVuaXggY29uZmlndXJhdGlvbiBzY3JpcHQgImNvbmZpZ3VyZSIgd2FzIHByb2R1Y2VkIHdpdGggR05VIEF1dG9jb25mLgogSXQgaXMgY29weXJpZ2h0IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gYnV0IGlzIGZyZWVseSBkaXN0cmlidXRhYmxlLgogVGhlIHNhbWUgaG9sZHMgZm9yIGl0cyBzdXBwb3J0aW5nIHNjcmlwdHMgKGNvbmZpZy5ndWVzcywgY29uZmlnLnN1YiwKQEAgLTI3NCwxMSArMjY1LDEyIEBACiBGSUxFIEZPUk1BVCBXQVJTCiA9PT09PT09PT09PT09PT09CiAKLVRoZSBJU08gSlBFRyBzdGFuZGFyZHMgY29tbWl0dGVlIGFjdHVhbGx5IHByb21vdGVzIGRpZmZlcmVudCBmb3JtYXRzIGxpa2UKLSJKUEVHIDIwMDAiIG9yICJKUEVHIFhSIiwgd2hpY2ggYXJlIGluY29tcGF0aWJsZSB3aXRoIG9yaWdpbmFsIERDVC1iYXNlZAotSlBFRy4gIElKRyB0aGVyZWZvcmUgZG9lcyBub3Qgc3VwcG9ydCB0aGVzZSBmb3JtYXRzIChzZWUgUkVGRVJFTkNFUykuICBJbmRlZWQsCi1vbmUgb2YgdGhlIG9yaWdpbmFsIHJlYXNvbnMgZm9yIGRldmVsb3BpbmcgdGhpcyBmcmVlIHNvZnR3YXJlIHdhcyB0byBoZWxwCi1mb3JjZSBjb252ZXJnZW5jZSBvbiBjb21tb24sIGludGVyb3BlcmFibGUgZm9ybWF0IHN0YW5kYXJkcyBmb3IgSlBFRyBmaWxlcy4KK1RoZSBJU08vSUVDIEpUQzEvU0MyOS9XRzEgc3RhbmRhcmRzIGNvbW1pdHRlZSAoYWxzbyBrbm93biBhcyBKUEVHLCB0b2dldGhlcgord2l0aCBJVFUtVCBTRzE2KSBjdXJyZW50bHkgcHJvbW90ZXMgZGlmZmVyZW50IGZvcm1hdHMgY29udGFpbmluZyB0aGUgbmFtZQorIkpQRUciIHdoaWNoIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBvcmlnaW5hbCBEQ1QtYmFzZWQgSlBFRy4gIElKRyB0aGVyZWZvcmUgZG9lcworbm90IHN1cHBvcnQgdGhlc2UgZm9ybWF0cyAoc2VlIFJFRkVSRU5DRVMpLiAgSW5kZWVkLCBvbmUgb2YgdGhlIG9yaWdpbmFsCityZWFzb25zIGZvciBkZXZlbG9waW5nIHRoaXMgZnJlZSBzb2Z0d2FyZSB3YXMgdG8gaGVscCBmb3JjZSBjb252ZXJnZW5jZSBvbgorY29tbW9uLCBpbnRlcm9wZXJhYmxlIGZvcm1hdCBzdGFuZGFyZHMgZm9yIEpQRUcgZmlsZXMuCiBEb24ndCB1c2UgYW4gaW5jb21wYXRpYmxlIGZpbGUgZm9ybWF0IQogKEluIGFueSBjYXNlLCBvdXIgZGVjb2RlciB3aWxsIHJlbWFpbiBjYXBhYmxlIG9mIHJlYWRpbmcgZXhpc3RpbmcgSlBFRwogaW1hZ2UgZmlsZXMgaW5kZWZpbml0ZWx5LikKZGlmZiAtLWdpdCBhL1JFQURNRS10dXJiby50eHQgYi9SRUFETUUtdHVyYm8udHh0CmluZGV4IGI4YzgzYTguLmE5NGZmOTcgMTAwNzU1Ci0tLSBhL1JFQURNRS10dXJiby50eHQKKysrIGIvUkVBRE1FLXR1cmJvLnR4dApAQCAtMiwyNCArMiwyNiBAQAogKiogICAgIEJhY2tncm91bmQKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAotbGlianBlZy10dXJibyBpcyBhIGRlcml2YXRpdmUgb2YgbGlianBlZyB0aGF0IHVzZXMgU0lNRCBpbnN0cnVjdGlvbnMgKE1NWCwKLVNTRTIsIE5FT04pIHRvIGFjY2VsZXJhdGUgYmFzZWxpbmUgSlBFRyBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiBvbiB4ODYsCi14ODYtNjQsIGFuZCBBUk0gc3lzdGVtcy4gIE9uIHN1Y2ggc3lzdGVtcywgbGlianBlZy10dXJibyBpcyBnZW5lcmFsbHkgMi00eCBhcwotZmFzdCBhcyB0aGUgdW5tb2RpZmllZCB2ZXJzaW9uIG9mIGxpYmpwZWcsIGFsbCBlbHNlIGJlaW5nIGVxdWFsLgorbGlianBlZy10dXJibyBpcyBhIEpQRUcgaW1hZ2UgY29kZWMgdGhhdCB1c2VzIFNJTUQgaW5zdHJ1Y3Rpb25zIChNTVgsIFNTRTIsCitORU9OKSB0byBhY2NlbGVyYXRlIGJhc2VsaW5lIEpQRUcgY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gb24geDg2LCB4ODYtNjQsCithbmQgQVJNIHN5c3RlbXMuICBPbiBzdWNoIHN5c3RlbXMsIGxpYmpwZWctdHVyYm8gaXMgZ2VuZXJhbGx5IDItNHggYXMgZmFzdCBhcworbGlianBlZywgYWxsIGVsc2UgYmVpbmcgZXF1YWwuICBPbiBvdGhlciB0eXBlcyBvZiBzeXN0ZW1zLCBsaWJqcGVnLXR1cmJvIGNhbgorc3RpbGwgb3V0cGVyZm9ybSBsaWJqcGVnIGJ5IGEgc2lnbmlmaWNhbnQgYW1vdW50LCBieSB2aXJ0dWUgb2YgaXRzCitoaWdobHktb3B0aW1pemVkIEh1ZmZtYW4gY29kaW5nIHJvdXRpbmVzLiAgSW4gbWFueSBjYXNlcywgdGhlIHBlcmZvcm1hbmNlIG9mCitsaWJqcGVnLXR1cmJvIHJpdmFscyB0aGF0IG9mIHByb3ByaWV0YXJ5IGhpZ2gtc3BlZWQgSlBFRyBjb2RlY3MuCiAKLWxpYmpwZWctdHVyYm8gd2FzIG9yaWdpbmFsbHkgYmFzZWQgb24gbGlianBlZy9TSU1EIGJ5IE1peWFzYWthIE1hc2FydSwgYnV0Ci10aGUgVGlnZXJWTkMgYW5kIFZpcnR1YWxHTCBwcm9qZWN0cyBtYWRlIG51bWVyb3VzIGVuaGFuY2VtZW50cyB0byB0aGUgY29kZWMgaW4KLTIwMDksIGluY2x1ZGluZyBpbXByb3ZlZCBzdXBwb3J0IGZvciBNYWMgT1MgWCwgNjQtYml0IHN1cHBvcnQsIHN1cHBvcnQgZm9yCi0zMi1iaXQgYW5kIGJpZy1lbmRpYW4gcGl4ZWwgZm9ybWF0cyAoUkdCWCwgWEJHUiwgZXRjLiksIGFjY2VsZXJhdGVkIEh1ZmZtYW4KLWVuY29kaW5nL2RlY29kaW5nLCBhbmQgdmFyaW91cyBidWcgZml4ZXMuICBUaGUgZ29hbCB3YXMgdG8gcHJvZHVjZSBhIGZ1bGx5Ci1vcGVuLXNvdXJjZSBjb2RlYyB0aGF0IGNvdWxkIHJlcGxhY2UgdGhlIHBhcnRpYWxseSBjbG9zZWQtc291cmNlIFR1cmJvSlBFRy9JUFAKLWNvZGVjIHVzZWQgYnkgVmlydHVhbEdMIGFuZCBUdXJib1ZOQy4gIGxpYmpwZWctdHVyYm8gZ2VuZXJhbGx5IGFjaGlldmVzIDgwLTEyMCUKLW9mIHRoZSBwZXJmb3JtYW5jZSBvZiBUdXJib0pQRUcvSVBQLiAgSXQgaXMgZmFzdGVyIGluIHNvbWUgYXJlYXMgYnV0IHNsb3dlciBpbgotb3RoZXJzLgorbGlianBlZy10dXJibyBpbXBsZW1lbnRzIGJvdGggdGhlIHRyYWRpdGlvbmFsIGxpYmpwZWcgQVBJIGFzIHdlbGwgYXMgdGhlIGxlc3MKK3Bvd2VyZnVsIGJ1dCBtb3JlIHN0cmFpZ2h0Zm9yd2FyZCBUdXJib0pQRUcgQVBJLiAgbGlianBlZy10dXJibyBhbHNvIGZlYXR1cmVzCitjb2xvcnNwYWNlIGV4dGVuc2lvbnMgdGhhdCBhbGxvdyBpdCB0byBjb21wcmVzcyBmcm9tL2RlY29tcHJlc3MgdG8gMzItYml0IGFuZAorYmlnLWVuZGlhbiBwaXhlbCBidWZmZXJzIChSR0JYLCBYQkdSLCBldGMuKSwgYXMgd2VsbCBhcyBhIGZ1bGwtZmVhdHVyZWQgSmF2YQoraW50ZXJmYWNlLgogCi1JbiBlYXJseSAyMDEwLCBsaWJqcGVnLXR1cmJvIHNwdW4gb2ZmIGludG8gaXRzIG93biBpbmRlcGVuZGVudCBwcm9qZWN0LCB3aXRoCi10aGUgZ29hbCBvZiBtYWtpbmcgaGlnaC1zcGVlZCBKUEVHIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gdGVjaG5vbG9neQotYXZhaWxhYmxlIHRvIGEgYnJvYWRlciByYW5nZSBvZiB1c2VycyBhbmQgZGV2ZWxvcGVycy4KK2xpYmpwZWctdHVyYm8gd2FzIG9yaWdpbmFsbHkgYmFzZWQgb24gbGlianBlZy9TSU1ELCBhbiBNTVgtYWNjZWxlcmF0ZWQKK2Rlcml2YXRpdmUgb2YgbGlianBlZyB2NmIgZGV2ZWxvcGVkIGJ5IE1peWFzYWthIE1hc2FydS4gIFRoZSBUaWdlclZOQyBhbmQKK1ZpcnR1YWxHTCBwcm9qZWN0cyBtYWRlIG51bWVyb3VzIGVuaGFuY2VtZW50cyB0byB0aGUgY29kZWMgaW4gMjAwOSwgYW5kIGluCitlYXJseSAyMDEwLCBsaWJqcGVnLXR1cmJvIHNwdW4gb2ZmIGludG8gYW4gaW5kZXBlbmRlbnQgcHJvamVjdCwgd2l0aCB0aGUgZ29hbAorb2YgbWFraW5nIGhpZ2gtc3BlZWQgSlBFRyBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIHRlY2hub2xvZ3kgYXZhaWxhYmxlIHRvIGEKK2Jyb2FkZXIgcmFuZ2Ugb2YgdXNlcnMgYW5kIGRldmVsb3BlcnMuCiAKIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjcsNyArMjksNyBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiBNb3N0IG9mIGxpYmpwZWctdHVyYm8gaW5oZXJpdHMgdGhlIG5vbi1yZXN0cmljdGl2ZSwgQlNELXN0eWxlIGxpY2Vuc2UgdXNlZCBieQotbGlianBlZyAoc2VlIFJFQURNRS4pICBUaGUgVHVyYm9KUEVHL09TUyB3cmFwcGVyIChib3RoIEMgYW5kIEphdmEgdmVyc2lvbnMpIGFuZAorbGlianBlZyAoc2VlIFJFQURNRS4pICBUaGUgVHVyYm9KUEVHIHdyYXBwZXIgKGJvdGggQyBhbmQgSmF2YSB2ZXJzaW9ucykgYW5kCiBhc3NvY2lhdGVkIHRlc3QgcHJvZ3JhbXMgYmVhciBhIHNpbWlsYXIgbGljZW5zZSwgd2hpY2ggaXMgcmVwcm9kdWNlZCBiZWxvdzoKIAogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC03MSwxNiArNzMsMzIgQEAKIAogICBsaWJqcGVnIEFQSTogIFRoaXMgaXMgdGhlIGRlIGZhY3RvIGluZHVzdHJ5LXN0YW5kYXJkIEFQSSBmb3IgY29tcHJlc3NpbmcgYW5kCiAgIGRlY29tcHJlc3NpbmcgSlBFRyBpbWFnZXMuICBJdCBpcyBtb3JlIGRpZmZpY3VsdCB0byB1c2UgdGhhbiB0aGUgVHVyYm9KUEVHCi0gIEFQSSBidXQgYWxzbyBtb3JlIHBvd2VyZnVsLiAgbGlianBlZy10dXJibyBpcyBib3RoIEFQSS9BQkktY29tcGF0aWJsZSBhbmQKLSAgbWF0aGVtYXRpY2FsbHkgY29tcGF0aWJsZSB3aXRoIGxpYmpwZWcgdjZiLiAgSXQgY2FuIGFsc28gb3B0aW9uYWxseSBiZQotICBjb25maWd1cmVkIHRvIGJlIEFQSS9BQkktY29tcGF0aWJsZSB3aXRoIGxpYmpwZWcgdjcgYW5kIHY4IChzZWUgYmVsb3cuKQorICBBUEkgYnV0IGFsc28gbW9yZSBwb3dlcmZ1bC4gIFRoZSBsaWJqcGVnIEFQSSBpbXBsZW1lbnRhdGlvbiBpbiBsaWJqcGVnLXR1cmJvCisgIGlzIGJvdGggQVBJL0FCSS1jb21wYXRpYmxlIGFuZCBtYXRoZW1hdGljYWxseSBjb21wYXRpYmxlIHdpdGggbGlianBlZyB2NmIuCisgIEl0IGNhbiBhbHNvIG9wdGlvbmFsbHkgYmUgY29uZmlndXJlZCB0byBiZSBBUEkvQUJJLWNvbXBhdGlibGUgd2l0aCBsaWJqcGVnIHY3CisgIGFuZCB2OCAoc2VlIGJlbG93LikKIAorVGhlcmUgaXMgbm8gc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgYWR2YW50YWdlIHRvIGVpdGhlciBBUEkgd2hlbiBib3RoIGFyZSB1c2VkCit0byBwZXJmb3JtIHNpbWlsYXIgb3BlcmF0aW9ucy4KKworPT09PT09PT09PT09PT09PT09PT09PQorSW5zdGFsbGF0aW9uIERpcmVjdG9yeQorPT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGRvY3VtZW50IGFzc3VtZXMgdGhhdCBsaWJqcGVnLXR1cmJvIHdpbGwgYmUgaW5zdGFsbGVkIGluIHRoZSBkZWZhdWx0CitkaXJlY3RvcnkgKC9vcHQvbGlianBlZy10dXJibyBvbiBVbip4IGFuZCBNYWMgc3lzdGVtcyBhbmQKK2M6XGxpYmpwZWctdHVyYm9bLWdjY11bNjRdIG9uIFdpbmRvd3Mgc3lzdGVtcy4gIElmIHlvdXIgaW5zdGFsbGF0aW9uIG9mCitsaWJqcGVnLXR1cmJvIHJlc2lkZXMgaW4gYSBkaWZmZXJlbnQgZGlyZWN0b3J5LCB0aGVuIGFkanVzdCB0aGUgaW5zdHJ1Y3Rpb25zCithY2NvcmRpbmdseS4KIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIFJlcGxhY2luZyBsaWJqcGVnIGF0IFJ1biBUaW1lCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1JZiBhIFVuaXggYXBwbGljYXRpb24gaXMgZHluYW1pY2FsbHkgbGlua2VkIHdpdGggbGlianBlZywgdGhlbiB5b3UgY2FuIHJlcGxhY2UKK1VuKngKKy0tLS0KKworSWYgYSBVbip4IGFwcGxpY2F0aW9uIGlzIGR5bmFtaWNhbGx5IGxpbmtlZCB3aXRoIGxpYmpwZWcsIHRoZW4geW91IGNhbiByZXBsYWNlCiBsaWJqcGVnIHdpdGggbGlianBlZy10dXJibyBhdCBydW4gdGltZSBieSBtYW5pcHVsYXRpbmcgTERfTElCUkFSWV9QQVRILgogRm9yIGluc3RhbmNlOgogCkBAIC05Nyw2NyArMTE1LDUxIEBACiAgIHVzZXIgIDBtMC4wMjlzCiAgIHN5cyAgIDBtMC4wMTBzCiAKLU5PVEU6IHtsaWJ9IGNhbiBiZSBsaWIsIGxpYjMyLCBsaWI2NCwgb3IgbGliLzY0LCBkZXBlbmRpbmcgb24gdGhlIE8vUyBhbmQKLWFyY2hpdGVjdHVyZS4KKyh7bGlifSA9IGxpYjMyIG9yIGxpYjY0LCBkZXBlbmRpbmcgb24gd2hldGhlciB5b3Ugd2lzaCB0byB1c2UgdGhlIDMyLWJpdCBvciB0aGUKKzY0LWJpdCB2ZXJzaW9uIG9mIGxpYmpwZWctdHVyYm8uKQogCi1TeXN0ZW0gYWRtaW5pc3RyYXRvcnMgY2FuIGFsc28gcmVwbGFjZSB0aGUgbGlianBlZyBzeW0gbGlua3MgaW4gL3Vzci97bGlifSB3aXRoCitTeXN0ZW0gYWRtaW5pc3RyYXRvcnMgY2FuIGFsc28gcmVwbGFjZSB0aGUgbGlianBlZyBzeW1saW5rcyBpbiAvdXNyL2xpYiogd2l0aAogbGlua3MgdG8gdGhlIGxpYmpwZWctdHVyYm8gZHluYW1pYyBsaWJyYXJ5IGxvY2F0ZWQgaW4gL29wdC9saWJqcGVnLXR1cmJvL3tsaWJ9LgogVGhpcyB3aWxsIGVmZmVjdGl2ZWx5IGFjY2VsZXJhdGUgZXZlcnkgYXBwbGljYXRpb24gdGhhdCB1c2VzIHRoZSBsaWJqcGVnCiBkeW5hbWljIGxpYnJhcnkgb24gdGhlIHN5c3RlbS4KIAotVGhlIGxpYmpwZWctdHVyYm8gU0RLIGZvciBWaXN1YWwgQysrIGluc3RhbGxzIHRoZSBsaWJqcGVnLXR1cmJvIERMTAotKGpwZWc2Mi5kbGwsIGpwZWc3LmRsbCwgb3IganBlZzguZGxsLCBkZXBlbmRpbmcgb24gd2hldGhlciBpdCB3YXMgYnVpbHQgd2l0aAotbGlianBlZyB2NmIsIHY3LCBvciB2OCBlbXVsYXRpb24pIGludG8gYzpcbGlianBlZy10dXJib1s2NF1cYmluLCBhbmQgdGhlIFBBVEgKLWVudmlyb25tZW50IHZhcmlhYmxlIGNhbiBiZSBtb2RpZmllZCBzdWNoIHRoYXQgdGhpcyBkaXJlY3RvcnkgaXMgc2VhcmNoZWQKLWJlZm9yZSBhbnkgb3RoZXJzIHRoYXQgbWlnaHQgY29udGFpbiBhIGxpYmpwZWcgRExMLiAgSG93ZXZlciwgaWYgYSBsaWJqcGVnCi1ETEwgZXhpc3RzIGluIGFuIGFwcGxpY2F0aW9uJ3MgaW5zdGFsbCBkaXJlY3RvcnksIHRoZW4gV2luZG93cyB3aWxsIGxvYWQgdGhpcwotRExMIGZpcnN0IHdoZW5ldmVyIHRoZSBhcHBsaWNhdGlvbiBpcyBsYXVuY2hlZC4gIFRodXMsIGlmIGFuIGFwcGxpY2F0aW9uIHNoaXBzCi13aXRoIGpwZWc2Mi5kbGwsIGpwZWc3LmRsbCwgb3IganBlZzguZGxsLCB0aGVuIGJhY2sgdXAgdGhlIGFwcGxpY2F0aW9uJ3MKLXZlcnNpb24gb2YgdGhpcyBETEwgYW5kIGNvcHkgYzpcbGlianBlZy10dXJib1s2NF1cYmluXGpwZWcqLmRsbCBpbnRvIHRoZQotYXBwbGljYXRpb24ncyBpbnN0YWxsIGRpcmVjdG9yeSB0byBhY2NlbGVyYXRlIGl0LgorV2luZG93cworLS0tLS0tLQogCi1UaGUgdmVyc2lvbiBvZiB0aGUgbGlianBlZy10dXJibyBETEwgZGlzdHJpYnV0ZWQgaW4gdGhlIGxpYmpwZWctdHVyYm8gU0RLIGZvcgotVmlzdWFsIEMrKyByZXF1aXJlcyB0aGUgVmlzdWFsIEMrKyAyMDA4IEMgcnVuLXRpbWUgRExMIChtc3ZjcjkwLmRsbCkuCitJZiBhIFdpbmRvd3MgYXBwbGljYXRpb24gaXMgZHluYW1pY2FsbHkgbGlua2VkIHdpdGggbGlianBlZywgdGhlbiB5b3UgY2FuCityZXBsYWNlIGxpYmpwZWcgd2l0aCBsaWJqcGVnLXR1cmJvIGF0IHJ1biB0aW1lIGJ5IGJhY2tpbmcgdXAgdGhlIGFwcGxpY2F0aW9uJ3MKK2NvcHkgb2YganBlZzYyLmRsbCwganBlZzcuZGxsLCBvciBqcGVnOC5kbGwgKGFzc3VtaW5nIHRoZSBhcHBsaWNhdGlvbiBoYXMgaXRzCitvd24gbG9jYWwgY29weSBvZiB0aGlzIGxpYnJhcnkpIGFuZCBjb3B5aW5nIHRoZSBjb3JyZXNwb25kaW5nIERMTCBmcm9tCitsaWJqcGVnLXR1cmJvIGludG8gdGhlIGFwcGxpY2F0aW9uJ3MgaW5zdGFsbCBkaXJlY3RvcnkuICBUaGUgb2ZmaWNpYWwKK2xpYmpwZWctdHVyYm8gYmluYXJ5IHBhY2thZ2VzIG9ubHkgcHJvdmlkZSBqcGVnNjIuZGxsLiAgSWYgdGhlIGFwcGxpY2F0aW9uIHVzZXMKK2pwZWc3LmRsbCBvciBqcGVnOC5kbGwgaW5zdGVhZCwgdGhlbiBpdCB3aWxsIGJlIG5lY2Vzc2FyeSB0byBidWlsZAorbGlianBlZy10dXJibyBmcm9tIHNvdXJjZSAoc2VlICJsaWJqcGVnIHY3IGFuZCB2OCBBUEkvQUJJIEVtdWxhdGlvbiIgYmVsb3cuKQorCitUaGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGlzIHNwZWNpZmljIHRvIHRoZSBvZmZpY2lhbCBsaWJqcGVnLXR1cmJvIGJpbmFyeQorcGFja2FnZXMgZm9yIFZpc3VhbCBDKys6CisKKy0tIGpwZWc2Mi5kbGwgcmVxdWlyZXMgdGhlIFZpc3VhbCBDKysgMjAwOCBDIHJ1bi10aW1lIERMTCAobXN2Y3I5MC5kbGwpLgogbXN2Y3I5MC5kbGwgc2hpcHMgd2l0aCBtb3JlIHJlY2VudCB2ZXJzaW9ucyBvZiBXaW5kb3dzLCBidXQgdXNlcnMgb2Ygb2xkZXIKIFdpbmRvd3MgcmVsZWFzZXMgY2FuIG9idGFpbiBpdCBmcm9tIHRoZSBWaXN1YWwgQysrIDIwMDggUmVkaXN0cmlidXRhYmxlCiBQYWNrYWdlLCB3aGljaCBpcyBhdmFpbGFibGUgYXMgYSBmcmVlIGRvd25sb2FkIGZyb20gTWljcm9zb2Z0J3Mgd2ViIHNpdGUuCiAKLU5PVEU6ICBGZWF0dXJlcyBvZiBsaWJqcGVnIHRoYXQgcmVxdWlyZSBwYXNzaW5nIGEgQyBydW4tdGltZSBzdHJ1Y3R1cmUsIHN1Y2gKLWFzIGEgZmlsZSBoYW5kbGUsIGZyb20gYW4gYXBwbGljYXRpb24gdG8gbGlianBlZyB3aWxsIHByb2JhYmx5IG5vdCB3b3JrIHdpdGgKLXRoZSB2ZXJzaW9uIG9mIHRoZSBsaWJqcGVnLXR1cmJvIERMTCBkaXN0cmlidXRlZCBpbiB0aGUgbGlianBlZy10dXJibyBTREsgZm9yCi1WaXN1YWwgQysrLCB1bmxlc3MgdGhlIGFwcGxpY2F0aW9uIGlzIGFsc28gYnVpbHQgdG8gdXNlIHRoZSBWaXN1YWwgQysrIDIwMDggQwotcnVuLXRpbWUgRExMLiAgSW4gcGFydGljdWxhciwgdGhpcyBhZmZlY3RzIGpwZWdfc3RkaW9fZGVzdCgpIGFuZAorLS0gRmVhdHVyZXMgb2YgdGhlIGxpYmpwZWcgQVBJIHRoYXQgcmVxdWlyZSBwYXNzaW5nIGEgQyBydW4tdGltZSBzdHJ1Y3R1cmUsCitzdWNoIGFzIGEgZmlsZSBoYW5kbGUsIGZyb20gYW4gYXBwbGljYXRpb24gdG8gdGhlIGxpYnJhcnkgd2lsbCBwcm9iYWJseSBub3QKK3dvcmsgd2l0aCBqcGVnNjIuZGxsLCB1bmxlc3MgdGhlIGFwcGxpY2F0aW9uIGlzIGFsc28gYnVpbHQgdG8gdXNlIHRoZSBWaXN1YWwKK0MrKyAyMDA4IEMgcnVuLXRpbWUgRExMLiAgSW4gcGFydGljdWxhciwgdGhpcyBhZmZlY3RzIGpwZWdfc3RkaW9fZGVzdCgpIGFuZAoganBlZ19zdGRpb19zcmMoKS4KIAorTWFjCistLS0KKwogTWFjIGFwcGxpY2F0aW9ucyB0eXBpY2FsbHkgZW1iZWQgdGhlaXIgb3duIGNvcGllcyBvZiB0aGUgbGlianBlZyBkeWxpYiBpbnNpZGUKIHRoZSAoaGlkZGVuKSBhcHBsaWNhdGlvbiBidW5kbGUsIHNvIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBnbG9iYWxseSByZXBsYWNlCi1saWJqcGVnIG9uIE9TIFggc3lzdGVtcy4gIElmIGFuIGFwcGxpY2F0aW9uIHVzZXMgYSBzaGFyZWQgbGlicmFyeSB2ZXJzaW9uIG9mCi1saWJqcGVnLCB0aGVuIGl0IG1heSBiZSBwb3NzaWJsZSB0byByZXBsYWNlIHRoZSBhcHBsaWNhdGlvbidzIHZlcnNpb24gb2YgaXQuCi1UaGlzIHdvdWxkIGdlbmVyYWxseSBpbnZvbHZlIGNvcHlpbmcgbGlianBlZy4qLmR5bGliIGZyb20gbGlianBlZy10dXJibyBpbnRvCitsaWJqcGVnIG9uIE9TIFggc3lzdGVtcy4gIFJlcGxhY2luZyB0aGUgYXBwbGljYXRpb24ncyB2ZXJzaW9uIG9mIHRoZSBsaWJqcGVnCitkeWxpYiB3b3VsZCBnZW5lcmFsbHkgaW52b2x2ZSBjb3B5aW5nIGxpYmpwZWcuKi5keWxpYiBmcm9tIGxpYmpwZWctdHVyYm8gaW50bwogdGhlIGFwcHJvcHJpYXRlIHBsYWNlIGluIHRoZSBhcHBsaWNhdGlvbiBidW5kbGUgYW5kIHVzaW5nIGluc3RhbGxfbmFtZV90b29sIHRvCi1yZXBvaW50IHRoZSBkeWxpYiB0byB0aGUgbmV3IGRpcmVjdG9yeS4gIFRoaXMgcmVxdWlyZXMgYW4gYWR2YW5jZWQga25vd2xlZGdlIG9mCi1PUyBYIGFuZCB3b3VsZCBub3Qgc3Vydml2ZSBhbiB1cGdyYWRlIG9yIGEgcmUtaW5zdGFsbCBvZiB0aGUgYXBwbGljYXRpb24uCi1UaHVzLCBpdCBpcyBub3QgcmVjb21tZW5kZWQgZm9yIG1vc3QgdXNlcnMuCi0KLT09PT09PT09PT09PT09PT09PT09PT09Ci1SZXBsYWNpbmcgVHVyYm9KUEVHL0lQUAotPT09PT09PT09PT09PT09PT09PT09PT0KLQotbGlianBlZy10dXJibyBpcyBhIGRyb3AtaW4gcmVwbGFjZW1lbnQgZm9yIHRoZSBUdXJib0pQRUcvSVBQIFNESyB1c2VkIGJ5Ci1WaXJ0dWFsR0wgMi4xLnggYW5kIFR1cmJvVk5DIDAuNiAoYW5kIHByaW9yLikgIGxpYmpwZWctdHVyYm8gY29udGFpbnMgYSB3cmFwcGVyCi1saWJyYXJ5IChUdXJib0pQRUcvT1NTKSB0aGF0IGVtdWxhdGVzIHRoZSBUdXJib0pQRUcgQVBJIHVzaW5nIGxpYmpwZWctdHVyYm8KLWluc3RlYWQgb2YgdGhlIGNsb3NlZC1zb3VyY2UgSW50ZWwgUGVyZm9ybWFuY2UgUHJpbWl0aXZlcy4gIFlvdSBjYW4gcmVwbGFjZSB0aGUKLVR1cmJvSlBFRy9JUFAgcGFja2FnZSBvbiBMaW51eCBzeXN0ZW1zIHdpdGggdGhlIGxpYmpwZWctdHVyYm8gcGFja2FnZSBpbiBvcmRlcgotdG8gbWFrZSBleGlzdGluZyByZWxlYXNlcyBvZiBWaXJ0dWFsR0wgMi4xLnggYW5kIFR1cmJvVk5DIDAueCB1c2UgdGhlIG5ldyBjb2RlYwotYXQgcnVuIHRpbWUuICBOb3RlIHRoYXQgdGhlIDY0LWJpdCBsaWJqcGVnLXR1cmJvIHBhY2thZ2VzIGNvbnRhaW4gb25seSA2NC1iaXQKLWJpbmFyaWVzLCB3aGVyZWFzIHRoZSBUdXJib0pQRUcvSVBQIDY0LWJpdCBwYWNrYWdlcyBjb250YWluZWQgYm90aCA2NC1iaXQgYW5kCi0zMi1iaXQgYmluYXJpZXMuICBUaHVzLCB0byByZXBsYWNlIGEgVHVyYm9KUEVHL0lQUCA2NC1iaXQgcGFja2FnZSwgaW5zdGFsbAotYm90aCB0aGUgNjQtYml0IGFuZCAzMi1iaXQgdmVyc2lvbnMgb2YgbGlianBlZy10dXJiby4KLQotWW91IGNhbiBhbHNvIGJ1aWxkIHRoZSBWaXJ0dWFsR0wgMi4xLnggYW5kIFR1cmJvVk5DIDAuNiBzb3VyY2UgY29kZSB3aXRoCi10aGUgbGlianBlZy10dXJibyBTREsgaW5zdGVhZCBvZiBUdXJib0pQRUcvSVBQLiAgSXQgc2hvdWxkIHdvcmsgaWRlbnRpY2FsbHkuCi1saWJqcGVnLXR1cmJvIGFsc28gaW5jbHVkZXMgc3RhdGljIGxpYnJhcnkgdmVyc2lvbnMgb2YgVHVyYm9KUEVHL09TUywgd2hpY2gKLWFyZSB1c2VkIHRvIGJ1aWxkIFZpcnR1YWxHTCAyLjIgYW5kIFR1cmJvVk5DIDEuMCBhbmQgbGF0ZXIuCityZXBvaW50IHRoZSBsaWJqcGVnLXR1cmJvIGR5bGliIHRvIGl0cyBuZXcgZGlyZWN0b3J5LiAgVGhpcyByZXF1aXJlcyBhbgorYWR2YW5jZWQga25vd2xlZGdlIG9mIE9TIFggYW5kIHdvdWxkIG5vdCBzdXJ2aXZlIGFuIHVwZ3JhZGUgb3IgYSByZS1pbnN0YWxsIG9mCit0aGUgYXBwbGljYXRpb24uICBUaHVzLCBpdCBpcyBub3QgcmVjb21tZW5kZWQgZm9yIG1vc3QgdXNlcnMuCiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIFVzaW5nIGxpYmpwZWctdHVyYm8gaW4gWW91ciBPd24gUHJvZ3JhbXMKQEAgLTE2NSw4ICsxNjcsOCBAQAogCiBGb3IgdGhlIG1vc3QgcGFydCwgbGlianBlZy10dXJibyBzaG91bGQgd29yayBpZGVudGljYWxseSB0byBsaWJqcGVnLCBzbyBpbgogbW9zdCBjYXNlcywgYW4gYXBwbGljYXRpb24gY2FuIGJlIGJ1aWx0IGFnYWluc3QgbGlianBlZyBhbmQgdGhlbiBydW4gYWdhaW5zdAotbGlianBlZy10dXJiby4gIE9uIFVuaXggc3lzdGVtcyAoaW5jbHVkaW5nIEN5Z3dpbiksIHlvdSBjYW4gYnVpbGQgYWdhaW5zdAotbGlianBlZy10dXJibyBpbnN0ZWFkIG9mIGxpYmpwZWcgYnkgc2V0dGluZworbGlianBlZy10dXJiby4gIE9uIFVuKnggc3lzdGVtcyBhbmQgQ3lnd2luLCB5b3UgY2FuIGJ1aWxkIGFnYWluc3QgbGlianBlZy10dXJibworaW5zdGVhZCBvZiBsaWJqcGVnIGJ5IHNldHRpbmcKIAogICBDUEFUSD0vb3B0L2xpYmpwZWctdHVyYm8vaW5jbHVkZQogICBhbmQKQEAgLTE4MywyMCArMTg1LDIwIEBACiAKIEJ1aWxkaW5nIGFnYWluc3QgbGlianBlZy10dXJibyBpcyB1c2VmdWwsIGZvciBpbnN0YW5jZSwgaWYgeW91IHdhbnQgdG8gYnVpbGQgYW4KIGFwcGxpY2F0aW9uIHRoYXQgbGV2ZXJhZ2VzIHRoZSBsaWJqcGVnLXR1cmJvIGNvbG9yc3BhY2UgZXh0ZW5zaW9ucyAoc2VlIGJlbG93LikKLU9uIExpbnV4IGFuZCBTb2xhcmlzIHN5c3RlbXMsIHlvdSB3b3VsZCBzdGlsbCBuZWVkIHRvIG1hbmlwdWxhdGUKLUxEX0xJQlJBUllfUEFUSCBvciBjcmVhdGUgYXBwcm9wcmlhdGUgc3ltIGxpbmtzIHRvIHVzZSBsaWJqcGVnLXR1cmJvIGF0IHJ1bgotdGltZS4gIE9uIHN1Y2ggc3lzdGVtcywgeW91IGNhbiBwYXNzIC1SIC9vcHQvbGlianBlZy10dXJiby97bGlifSB0byB0aGUgbGlua2VyCi10byBmb3JjZSB0aGUgdXNlIG9mIGxpYmpwZWctdHVyYm8gYXQgcnVuIHRpbWUgcmF0aGVyIHRoYW4gbGlianBlZyAoYWxzbyB1c2VmdWwKLWlmIHlvdSB3YW50IHRvIGxldmVyYWdlIHRoZSBjb2xvcnNwYWNlIGV4dGVuc2lvbnMpLCBvciB5b3UgY2FuIGxpbmsgYWdhaW5zdCB0aGUKLWxpYmpwZWctdHVyYm8gc3RhdGljIGxpYnJhcnkuCitPbiBVbip4IHN5c3RlbXMsIHlvdSB3b3VsZCBzdGlsbCBuZWVkIHRvIG1hbmlwdWxhdGUgTERfTElCUkFSWV9QQVRIIG9yIGNyZWF0ZQorYXBwcm9wcmlhdGUgc3ltbGlua3MgdG8gdXNlIGxpYmpwZWctdHVyYm8gYXQgcnVuIHRpbWUuICBPbiBzdWNoIHN5c3RlbXMsIHlvdQorY2FuIHBhc3MgLVIgL29wdC9saWJqcGVnLXR1cmJvL3tsaWJ9IHRvIHRoZSBsaW5rZXIgdG8gZm9yY2UgdGhlIHVzZSBvZgorbGlianBlZy10dXJibyBhdCBydW4gdGltZSByYXRoZXIgdGhhbiBsaWJqcGVnIChhbHNvIHVzZWZ1bCBpZiB5b3Ugd2FudCB0bworbGV2ZXJhZ2UgdGhlIGNvbG9yc3BhY2UgZXh0ZW5zaW9ucyksIG9yIHlvdSBjYW4gbGluayBhZ2FpbnN0IHRoZSBsaWJqcGVnLXR1cmJvCitzdGF0aWMgbGlicmFyeS4KIAotVG8gZm9yY2UgYSBMaW51eCwgU29sYXJpcywgb3IgTWluR1cgYXBwbGljYXRpb24gdG8gbGluayBhZ2FpbnN0IHRoZSBzdGF0aWMKLXZlcnNpb24gb2YgbGlianBlZy10dXJibywgeW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyBsaW5rZXIgb3B0aW9uczoKK1RvIGZvcmNlIGEgVW4qeCBvciBNaW5HVyBhcHBsaWNhdGlvbiB0byBsaW5rIGFnYWluc3QgdGhlIHN0YXRpYyB2ZXJzaW9uIG9mCitsaWJqcGVnLXR1cmJvLCB5b3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIGxpbmtlciBvcHRpb25zOgogCiAgIC1XbCwtQnN0YXRpYyAtbGpwZWcgLVdsLC1CZHluYW1pYwogCiBPbiBPUyBYLCBzaW1wbHkgYWRkIC9vcHQvbGlianBlZy10dXJiby9saWIvbGlianBlZy5hIHRvIHRoZSBsaW5rZXIgY29tbWFuZAotbGluZSAodGhpcyBhbHNvIHdvcmtzIG9uIExpbnV4IGFuZCBTb2xhcmlzLikKK2xpbmUuCiAKIFRvIGJ1aWxkIFZpc3VhbCBDKysgYXBwbGljYXRpb25zIHVzaW5nIGxpYmpwZWctdHVyYm8sIGFkZAogYzpcbGlianBlZy10dXJib1s2NF1caW5jbHVkZSB0byB0aGUgc3lzdGVtIG9yIHVzZXIgSU5DTFVERSBlbnZpcm9ubWVudApAQCAtMjM0LDggKzIzNiwxMCBAQAogCiAgICNpZmRlZiBKQ1NfRVhURU5TSU9OUwogCi1BdCBydW4gdGltZSwgYXR0ZW1wdGluZyB0byB1c2UgdGhlc2UgZXh0ZW5zaW9ucyB3aXRoIGEgdmVyc2lvbiBvZiBsaWJqcGVnCi10aGF0IGRvZXNuJ3Qgc3VwcG9ydCB0aGVtIHdpbGwgcmVzdWx0IGluIGEgIkJvZ3VzIGlucHV0IGNvbG9yc3BhY2UiIGVycm9yLgorQXQgcnVuIHRpbWUsIGF0dGVtcHRpbmcgdG8gdXNlIHRoZXNlIGV4dGVuc2lvbnMgd2l0aCBhIGxpYmpwZWcgaW1wbGVtZW50YXRpb24KK3RoYXQgZG9lcyBub3Qgc3VwcG9ydCB0aGVtIHdpbGwgcmVzdWx0IGluIGEgIkJvZ3VzIGlucHV0IGNvbG9yc3BhY2UiIGVycm9yLgorQXBwbGljYXRpb25zIGNhbiB0cmFwIHRoaXMgZXJyb3IgaW4gb3JkZXIgdG8gdGVzdCB3aGV0aGVyIHJ1bi10aW1lIHN1cHBvcnQgaXMKK2F2YWlsYWJsZSBmb3IgdGhlIGNvbG9yc3BhY2UgZXh0ZW5zaW9ucy4KIAogV2hlbiB1c2luZyB0aGUgUkdCWCwgQkdSWCwgWEJHUiwgYW5kIFhSR0IgY29sb3JzcGFjZXMgZHVyaW5nIGRlY29tcHJlc3Npb24sIHRoZQogWCBieXRlIGlzIHVuZGVmaW5lZCwgYW5kIGluIG9yZGVyIHRvIGVuc3VyZSB0aGUgYmVzdCBwZXJmb3JtYW5jZSwgbGlianBlZy10dXJibwpAQCAtMjU5LDE0ICsyNjMsMTcgQEAKIFdpdGggbGlianBlZyB2NyBhbmQgdjgsIG5ldyBmZWF0dXJlcyB3ZXJlIGFkZGVkIHRoYXQgbmVjZXNzaXRhdGVkIGV4dGVuZGluZyB0aGUKIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHN0cnVjdHVyZXMuICBVbmZvcnR1bmF0ZWx5LCBkdWUgdG8gdGhlIGV4cG9zZWQKIG5hdHVyZSBvZiB0aG9zZSBzdHJ1Y3R1cmVzLCBleHRlbmRpbmcgdGhlbSBhbHNvIG5lY2Vzc2l0YXRlZCBicmVha2luZyBiYWNrd2FyZAotQUJJIGNvbXBhdGliaWxpdHkgd2l0aCBwcmV2aW91cyBsaWJqcGVnIHJlbGVhc2VzLiAgVGh1cywgcHJvZ3JhbXMgdGhhdCBhcmUKK0FCSSBjb21wYXRpYmlsaXR5IHdpdGggcHJldmlvdXMgbGlianBlZyByZWxlYXNlcy4gIFRodXMsIHByb2dyYW1zIHRoYXQgd2VyZQogYnVpbHQgdG8gdXNlIGxpYmpwZWcgdjcgb3IgdjggZGlkIG5vdCB3b3JrIHdpdGggbGlianBlZy10dXJibywgc2luY2UgaXQgaXMKIGJhc2VkIG9uIHRoZSBsaWJqcGVnIHY2YiBjb2RlIGJhc2UuICBBbHRob3VnaCBsaWJqcGVnIHY3IGFuZCB2OCBhcmUgc3RpbGwgbm90Ci1hcyB3aWRlbHkgdXNlZCBhcyB2NmIsIGVub3VnaCBwcm9ncmFtcyAoaW5jbHVkaW5nIGEgZmV3IExpbnV4IGRpc3Ryb3MpIGhhdmUKLW1hZGUgdGhlIHN3aXRjaCB0aGF0IGl0IHdhcyBkZXNpcmFibGUgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgbGlianBlZyB2Ny92OAotQUJJIGluIGxpYmpwZWctdHVyYm8uICBBbHRob3VnaCBsaWJqcGVnLXR1cmJvIGNhbiBub3cgYmUgY29uZmlndXJlZCBhcyBhCi1kcm9wLWluIHJlcGxhY2VtZW50IGZvciBsaWJqcGVnIHY3IG9yIHY4LCBpdCBzaG91bGQgYmUgbm90ZWQgdGhhdCBub3QgYWxsIG9mCi10aGUgZmVhdHVyZXMgaW4gbGlianBlZyB2NyBhbmQgdjggYXJlIHN1cHBvcnRlZCAoc2VlIGJlbG93LikKK2FzIHdpZGVseSB1c2VkIGFzIHY2YiwgZW5vdWdoIHByb2dyYW1zIChpbmNsdWRpbmcgYSBmZXcgTGludXggZGlzdHJvcykgbWFkZQordGhlIHN3aXRjaCB0aGF0IHRoZXJlIHdhcyBhIGRlbWFuZCB0byBlbXVsYXRlIHRoZSBsaWJqcGVnIHY3IGFuZCB2OCBBQklzCitpbiBsaWJqcGVnLXR1cmJvLiAgSXQgc2hvdWxkIGJlIG5vdGVkLCBob3dldmVyLCB0aGF0IHRoaXMgZmVhdHVyZSB3YXMgYWRkZWQKK3ByaW1hcmlseSBzbyB0aGF0IGFwcGxpY2F0aW9ucyB0aGF0IGhhZCBhbHJlYWR5IGJlZW4gY29tcGlsZWQgdG8gdXNlIGxpYmpwZWcKK3Y3KyBjb3VsZCB0YWtlIGFkdmFudGFnZSBvZiBhY2NlbGVyYXRlZCBiYXNlbGluZSBKUEVHIGVuY29kaW5nL2RlY29kaW5nCit3aXRob3V0IHJlY29tcGlsaW5nLiAgbGlianBlZy10dXJibyBkb2VzIG5vdCBjbGFpbSB0byBzdXBwb3J0IGFsbCBvZiB0aGUKK2xpYmpwZWcgdjcrIGZlYXR1cmVzLCBub3IgdG8gcHJvZHVjZSBpZGVudGljYWwgb3V0cHV0IHRvIGxpYmpwZWcgdjcrIGluIGFsbAorY2FzZXMgKHNlZSBiZWxvdy4pCiAKIEJ5IHBhc3NpbmcgYW4gYXJndW1lbnQgb2YgLS13aXRoLWpwZWc3IG9yIC0td2l0aC1qcGVnOCB0byBjb25maWd1cmUsIG9yIGFuCiBhcmd1bWVudCBvZiAtRFdJVEhfSlBFRzc9MSBvciAtRFdJVEhfSlBFRzg9MSB0byBjbWFrZSwgeW91IGNhbiBidWlsZCBhIHZlcnNpb24KQEAgLTI3NSwxMyArMjgyLDIxIEBACiBmb2xsb3dpbmcgc2VjdGlvbiBkZXNjcmliZXMgd2hpY2ggbGlianBlZyB2NysgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZCBhbmQgd2hpY2gKIGFyZW4ndC4KIAotbGlianBlZyB2NyBhbmQgdjggRmVhdHVyZXM6Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1N1cHBvcnQgZm9yIGxpYmpwZWcgdjcgYW5kIHY4IEZlYXR1cmVzOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEZ1bGx5IHN1cHBvcnRlZDoKIAorLS0gbGlianBlZzogSURDVCBzY2FsaW5nIGV4dGVuc2lvbnMgaW4gZGVjb21wcmVzc29yCisgICBsaWJqcGVnLXR1cmJvIHN1cHBvcnRzIElEQ1Qgc2NhbGluZyB3aXRoIHNjYWxpbmcgZmFjdG9ycyBvZiAxLzgsIDEvNCwgMy84LAorICAgMS8yLCA1LzgsIDMvNCwgNy84LCA5LzgsIDUvNCwgMTEvOCwgMy8yLCAxMy84LCA3LzQsIDE1LzgsIGFuZCAyLzEgKG9ubHkgMS80CisgICBhbmQgMS8yIGFyZSBTSU1ELWFjY2VsZXJhdGVkLikKKwogLS0gbGlianBlZzogYXJpdGhtZXRpYyBjb2RpbmcKIAorLS0gbGlianBlZzogSW4tbWVtb3J5IHNvdXJjZSBhbmQgZGVzdGluYXRpb24gbWFuYWdlcnMKKyAgIFNlZSBub3RlcyBiZWxvdy4KKwogLS0gY2pwZWc6IFNlcGFyYXRlIHF1YWxpdHkgc2V0dGluZ3MgZm9yIGx1bWluYW5jZSBhbmQgY2hyb21pbmFuY2UKICAgIE5vdGUgdGhhdCB0aGUgbGlicGplZyB2NysgQVBJIHdhcyBleHRlbmRlZCB0byBhY2NvbW1vZGF0ZSB0aGlzIGZlYXR1cmUgb25seQogICAgZm9yIGNvbnZlbmllbmNlIHB1cnBvc2VzLiAgSXQgaGFzIGFsd2F5cyBiZWVuIHBvc3NpYmxlIHRvIGltcGxlbWVudCB0aGlzCkBAIC0yODksMzggKzMwNCw0NyBAQAogCiAtLSBjanBlZzogMzItYml0IEJNUCBzdXBwb3J0CiAKKy0tIGNqcGVnOiAtcmdiIG9wdGlvbgorCiAtLSBqcGVndHJhbjogbG9zc2xlc3MgY3JvcHBpbmcKIAogLS0ganBlZ3RyYW46IC1wZXJmZWN0IG9wdGlvbgogCistLSBqcGVndHJhbjogZm9yY2luZyB3aWR0aC9oZWlnaHQgd2hlbiBwZXJmb3JtaW5nIGxvc3NsZXNzIGNyb3AKKwogLS0gcmRqcGdjb206IC1yYXcgb3B0aW9uCiAKIC0tIHJkanBnY29tOiBsb2NhbGUgYXdhcmVuZXNzCiAKIAotRnVsbHkgc3VwcG9ydGVkIHdoZW4gdXNpbmcgbGlianBlZyB2Ny92OCBlbXVsYXRpb246Ci0KLS0tIGxpYmpwZWc6IEluLW1lbW9yeSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIG1hbmFnZXJzCi0KLQogTm90IHN1cHBvcnRlZDoKIAorTk9URTogIEFzIG9mIHRoaXMgd3JpdGluZywgZXh0ZW5zaXZlIHJlc2VhcmNoIGhhcyBiZWVuIGNvbmR1Y3RlZCBpbnRvIHRoZQordXNlZnVsbmVzcyBvZiBEQ1Qgc2NhbGluZyBhcyBhIG1lYW5zIG9mIGRhdGEgcmVkdWN0aW9uIGFuZCBTbWFydFNjYWxlIGFzIGEKK21lYW5zIG9mIHF1YWxpdHkgaW1wcm92ZW1lbnQuICBUaGUgcmVhZGVyIGlzIGludml0ZWQgdG8gcGVydXNlIHRoZSByZXNlYXJjaCBhdAoraHR0cDovL3d3dy5saWJqcGVnLXR1cmJvLm9yZy9BYm91dC9TbWFydFNjYWxlIGFuZCBkcmF3IGhpcy9oZXIgb3duIGNvbmNsdXNpb25zLAorYnV0IGl0IGlzIHRoZSBnZW5lcmFsIGJlbGllZiBvZiBvdXIgcHJvamVjdCB0aGF0IHRoZXNlIGZlYXR1cmVzIGhhdmUgbm90CitkZW1vbnN0cmF0ZWQgc3VmZmljaWVudCB1c2VmdWxuZXNzIHRvIGp1c3RpZnkgaW5jbHVzaW9uIGluIGxpYmpwZWctdHVyYm8uCisKIC0tIGxpYmpwZWc6IERDVCBzY2FsaW5nIGluIGNvbXByZXNzb3IKICAgIGNpbmZvLnNjYWxlX251bSBhbmQgY2luZm8uc2NhbGVfZGVub20gYXJlIHNpbGVudGx5IGlnbm9yZWQuCi0gICBUaGVyZSBpcyBubyB0ZWNobmljYWwgcmVhc29uIHdoeSBEQ1Qgc2NhbGluZyBjYW5ub3QgYmUgc3VwcG9ydGVkLCBidXQKLSAgIHdpdGhvdXQgdGhlIFNtYXJ0U2NhbGUgZXh0ZW5zaW9uIChzZWUgYmVsb3cpLCBpdCB3b3VsZCBvbmx5IGJlIGFibGUgdG8KLSAgIGRvd24tc2NhbGUgdXNpbmcgcmF0aW9zIG9mIDEvMiwgOC8xNSwgNC83LCA4LzEzLCAyLzMsIDgvMTEsIDQvNSwgYW5kIDgvOSwKLSAgIHdoaWNoIGlzIG9mIGxpbWl0ZWQgdXNlZnVsbmVzcy4KKyAgIFRoZXJlIGlzIG5vIHRlY2huaWNhbCByZWFzb24gd2h5IERDVCBzY2FsaW5nIGNvdWxkIG5vdCBiZSBzdXBwb3J0ZWQgd2hlbgorICAgZW11bGF0aW5nIHRoZSBsaWJqcGVnIHY3KyBBUEkvQUJJLCBidXQgd2l0aG91dCB0aGUgU21hcnRTY2FsZSBleHRlbnNpb24gKHNlZQorICAgYmVsb3cpLCBvbmx5IHNjYWxpbmcgZmFjdG9ycyBvZiAxLzIsIDgvMTUsIDQvNywgOC8xMywgMi8zLCA4LzExLCA0LzUsIGFuZAorICAgOC85IHdvdWxkIGJlIGF2YWlsYWJsZSwgd2hpY2ggaXMgb2YgbGltaXRlZCB1c2VmdWxuZXNzLgogCiAtLSBsaWJqcGVnOiBTbWFydFNjYWxlCiAgICBjaW5mby5ibG9ja19zaXplIGlzIHNpbGVudGx5IGlnbm9yZWQuCiAgICBTbWFydFNjYWxlIGlzIGFuIGV4dGVuc2lvbiB0byB0aGUgSlBFRyBmb3JtYXQgdGhhdCBhbGxvd3MgZm9yIERDVCBibG9jawotICAgc2l6ZXMgb3RoZXIgdGhhbiA4eDguICBJdCB3b3VsZCBiZSBkaWZmaWN1bHQgdG8gc3VwcG9ydCB0aGlzIGZlYXR1cmUgd2hpbGUKLSAgIHJldGFpbmluZyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggbGlianBlZyB2NmIuCi0KLS0tIGxpYmpwZWc6IElEQ1Qgc2NhbGluZyBleHRlbnNpb25zIGluIGRlY29tcHJlc3NvcgotICAgbGlianBlZy10dXJibyBzdGlsbCBzdXBwb3J0cyBJRENUIHNjYWxpbmcgd2l0aCBzY2FsaW5nIGZhY3RvcnMgb2YgMS8yLCAxLzQsCi0gICBhbmQgMS84IChzYW1lIGFzIGxpYmpwZWcgdjZiLikKKyAgIHNpemVzIG90aGVyIHRoYW4gOHg4LiAgUHJvdmlkaW5nIHN1cHBvcnQgZm9yIHRoaXMgbmV3IGZvcm1hdCB3b3VsZCBiZQorICAgZmVhc2libGUgKHBhcnRpY3VsYXJseSB3aXRob3V0IGZ1bGwgYWNjZWxlcmF0aW9uLikgIEhvd2V2ZXIsIHVudGlsL3VubGVzcworICAgdGhlIGZvcm1hdCBiZWNvbWVzIGVpdGhlciBhbiBvZmZpY2lhbCBpbmR1c3RyeSBzdGFuZGFyZCBvciwgYXQgbWluaW11bSwgYW4KKyAgIGFjY2VwdGVkIHNvbHV0aW9uIGluIHRoZSBjb21tdW5pdHksIHdlIGFyZSBoZXNpdGFudCB0byBpbXBsZW1lbnQgaXQsIGFzCisgICB0aGVyZSBpcyBubyBzZW5zZSBvZiB3aGV0aGVyIG9yIGhvdyBpdCBtaWdodCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS4gIEl0IGlzCisgICBvdXIgYmVsaWVmIHRoYXQgU21hcnRTY2FsZSBoYXMgbm90IGRlbW9uc3RyYXRlZCBzdWZmaWNpZW50IHVzZWZ1bG5lc3MgYXMgYQorICAgbG9zc2xlc3MgZm9ybWF0IG5vciBhcyBhIG1lYW5zIG9mIHF1YWxpdHkgZW5oYW5jZW1lbnQsIGFuZCB0aHVzLCBvdXIgcHJpbWFyeQorICAgaW50ZXJlc3QgaW4gcHJvdmlkaW5nIHRoaXMgZmVhdHVyZSB3b3VsZCBiZSBhcyBhIG1lYW5zIG9mIHN1cHBvcnRpbmcKKyAgIGFkZGl0aW9uYWwgRENUIHNjYWxpbmcgZmFjdG9ycy4KIAogLS0gbGlianBlZzogRmFuY3kgZG93bnNhbXBsaW5nIGluIGNvbXByZXNzb3IKICAgIGNpbmZvLmRvX2ZhbmN5X2Rvd25zYW1wbGluZyBpcyBzaWxlbnRseSBpZ25vcmVkLgpAQCAtMzMzLDkgKzM1NywxMDUgQEAKIC0tIExvc3NsZXNzIFJHQiBKUEVHIGZpbGVzCiAgICBUaGlzIHJlcXVpcmVzIHRoZSBTbWFydFNjYWxlIGZlYXR1cmUsIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQuCiAKK1doYXQgQWJvdXQgbGlianBlZyB2OT8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbGlianBlZyB2OSBpbnRyb2R1Y2VkIHlldCBhbm90aGVyIGZpZWxkIHRvIHRoZSBKUEVHIGNvbXByZXNzaW9uIHN0cnVjdHVyZQorKGNvbG9yX3RyYW5zZm9ybSksIHRodXMgbWFraW5nIHRoZSBBQkkgYmFja3dhcmQgaW5jb21wYXRpYmxlIHdpdGggdGhhdCBvZgorbGlianBlZyB2OC4gIFRoaXMgbmV3IGZpZWxkIHdhcyBpbnRyb2R1Y2VkIHNvbGVseSBmb3IgdGhlIHB1cnBvc2Ugb2Ygc3VwcG9ydGluZworbG9zc2xlc3MgU21hcnRTY2FsZSBlbmNvZGluZy4gIEZ1cnRoZXIsIHRoZXJlIHdhcyBhY3R1YWxseSBubyByZWFzb24gdG8gZXh0ZW5kCit0aGUgQVBJIGluIHRoaXMgbWFubmVyLCBhcyB0aGUgY29sb3IgdHJhbnNmb3JtIGNvdWxkIGhhdmUganVzdCBhcyBlYXNpbHkgYmVlbgorYWN0aXZhdGVkIGJ5IHdheSBvZiBhIG5ldyBKUEVHIGNvbG9yc3BhY2UgY29uc3RhbnQsIHRodXMgcHJlc2VydmluZyBiYWNrd2FyZAorQUJJIGNvbXBhdGliaWxpdHkuCisKK091ciByZXNlYXJjaCAoc2VlIGxpbmsgYWJvdmUpIGhhcyBzaG93biB0aGF0IGxvc3NsZXNzIFNtYXJ0U2NhbGUgZG9lcyBub3QKK2dlbmVyYWxseSBhY2NvbXBsaXNoIGFueXRoaW5nIHRoYXQgY2FuJ3QgYWxyZWFkeSBiZSBhY2NvbXBsaXNoZWQgYmV0dGVyIHdpdGgKK2V4aXN0aW5nLCBzdGFuZGFyZCBsb3NzbGVzcyBmb3JtYXRzLiAgVGh1cywgYXQgdGhpcyB0aW1lLCBpdCBpcyBvdXIgYmVsaWVmIHRoYXQKK3RoZXJlIGlzIG5vdCBzdWZmaWNpZW50IHRlY2huaWNhbCBqdXN0aWZpY2F0aW9uIGZvciBzb2Z0d2FyZSB0byB1cGdyYWRlIGZyb20KK2xpYmpwZWcgdjggdG8gbGlianBlZyB2OSwgYW5kIHRoZXJlZm9yZSwgbm90IHN1ZmZpY2llbnQgdGVjaG5pY2FsIGp1c3RpZmljYXRpb24KK2ZvciB1cyB0byBlbXVsYXRlIHRoZSBsaWJqcGVnIHY5IEFCSS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorSW4tTWVtb3J5IFNvdXJjZS9EZXN0aW5hdGlvbiBNYW5hZ2VycworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitCeSBkZWZhdWx0LCBsaWJqcGVnLXR1cmJvIDEuMyBhbmQgbGF0ZXIgaW5jbHVkZXMgdGhlIGpwZWdfbWVtX3NyYygpIGFuZAoranBlZ19tZW1fZGVzdCgpIGZ1bmN0aW9ucywgZXZlbiB3aGVuIG5vdCBlbXVsYXRpbmcgdGhlIGxpYmpwZWcgdjggQVBJL0FCSS4KK1ByZXZpb3VzbHksIGl0IHdhcyBuZWNlc3NhcnkgdG8gYnVpbGQgbGlianBlZy10dXJibyBmcm9tIHNvdXJjZSB3aXRoIGxpYmpwZWcgdjgKK0FQSS9BQkkgZW11bGF0aW9uIGluIG9yZGVyIHRvIHVzZSB0aGUgaW4tbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBtYW5hZ2VycywKK2J1dCBzZXZlcmFsIHByb2plY3RzIHJlcXVlc3RlZCB0aGF0IHRob3NlIGZ1bmN0aW9ucyBiZSBpbmNsdWRlZCB3aGVuIGVtdWxhdGluZwordGhlIGxpYmpwZWcgdjZiIEFQSS9BQkkgYXMgd2VsbC4gIFRoaXMgYWxsb3dzIHRoZSB1c2Ugb2YgdGhvc2UgZnVuY3Rpb25zIGJ5Citwcm9ncmFtcyB0aGF0IG5lZWQgdGhlbSB3aXRob3V0IGJyZWFraW5nIEFCSSBjb21wYXRpYmlsaXR5IGZvciBwcm9ncmFtcyB0aGF0Citkb24ndCwgYW5kIGl0IGFsbG93cyB0aG9zZSBmdW5jdGlvbnMgdG8gYmUgcHJvdmlkZWQgaW4gdGhlICJvZmZpY2lhbCIKK2xpYmpwZWctdHVyYm8gYmluYXJpZXMuCisKK1Rob3NlIHdobyBhcmUgY29uY2VybmVkIGFib3V0IG1haW50YWluaW5nIHN0cmljdCBjb25mb3JtYW5jZSB3aXRoIHRoZSBsaWJqcGVnCit2NmIgb3IgdjcgQVBJIGNhbiBwYXNzIGFuIGFyZ3VtZW50IG9mIC0td2l0aG91dC1tZW0tc3JjZHN0IHRvIGNvbmZpZ3VyZSBvcgorYW4gYXJndW1lbnQgb2YgLURXSVRIX01FTV9TUkNEU1Q9MCB0byBDTWFrZSBwcmlvciB0byBidWlsZGluZyBsaWJqcGVnLXR1cmJvLgorVGhpcyB3aWxsIHJlc3RvcmUgdGhlIHByZS0xLjMgYmVoYXZpb3IsIGluIHdoaWNoIGpwZWdfbWVtX3NyYygpIGFuZAoranBlZ19tZW1fZGVzdCgpIGFyZSBvbmx5IGluY2x1ZGVkIHdoZW4gZW11bGF0aW5nIHRoZSBsaWJqcGVnIHY4IEFQSS9BQkkuCisKK09uIFVuKnggc3lzdGVtcywgaW5jbHVkaW5nIHRoZSBpbi1tZW1vcnkgc291cmNlL2Rlc3RpbmF0aW9uIG1hbmFnZXJzIGNoYW5nZXMKK3RoZSBkeW5hbWljIGxpYnJhcnkgdmVyc2lvbiBmcm9tIDYyLjAuMCB0byA2Mi4xLjAgaWYgdXNpbmcgbGlianBlZyB2NmIgQVBJL0FCSQorZW11bGF0aW9uIGFuZCBmcm9tIDcuMC4wIHRvIDcuMS4wIGlmIHVzaW5nIGxpYmpwZWcgdjcgQVBJL0FCSSBlbXVsYXRpb24uCisKK05vdGUgdGhhdCwgb24gbW9zdCBVbip4IHN5c3RlbXMsIHRoZSBkeW5hbWljIGxpbmtlciB3aWxsIG5vdCBsb29rIGZvciBhCitmdW5jdGlvbiBpbiBhIGxpYnJhcnkgdW50aWwgdGhhdCBmdW5jdGlvbiBpcyBhY3R1YWxseSB1c2VkLiAgVGh1cywgaWYgYSBwcm9ncmFtCitpcyBidWlsdCBhZ2FpbnN0IGxpYmpwZWctdHVyYm8gMS4zKyBhbmQgdXNlcyBqcGVnX21lbV9zcmMoKSBvciBqcGVnX21lbV9kZXN0KCksCit0aGF0IHByb2dyYW0gd2lsbCBub3QgZmFpbCBpZiBydW4gYWdhaW5zdCBhbiBvbGRlciB2ZXJzaW9uIG9mIGxpYmpwZWctdHVyYm8gb3IKK2FnYWluc3QgbGlianBlZyB2Ny0gdW50aWwgdGhlIHByb2dyYW0gYWN0dWFsbHkgdHJpZXMgdG8gY2FsbCBqcGVnX21lbV9zcmMoKSBvcgoranBlZ19tZW1fZGVzdCgpLiAgU3VjaCBpcyBub3QgdGhlIGNhc2Ugb24gV2luZG93cy4gIElmIGEgcHJvZ3JhbSBpcyBidWlsdAorYWdhaW5zdCB0aGUgbGlianBlZy10dXJibyAxLjMrIERMTCBhbmQgdXNlcyBqcGVnX21lbV9zcmMoKSBvciBqcGVnX21lbV9kZXN0KCksCit0aGVuIGl0IG11c3QgdXNlIHRoZSBsaWJqcGVnLXR1cmJvIDEuMysgRExMIGF0IHJ1biB0aW1lLgorCitCb3RoIGNqcGVnIGFuZCBkanBlZyBoYXZlIGJlZW4gZXh0ZW5kZWQgdG8gYWxsb3cgdGVzdGluZyB0aGUgaW4tbWVtb3J5Citzb3VyY2UvZGVzdGluYXRpb24gbWFuYWdlciBmdW5jdGlvbnMuICBTZWUgdGhlaXIgcmVzcGVjdGl2ZSBtYW4gcGFnZXMgZm9yIG1vcmUKK2RldGFpbHMuCisKIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiogICAgIFBlcmZvcm1hbmNlIHBpdGZhbGxzCisqKiAgICAgTWF0aGVtYXRpY2FsIENvbXBhdGliaWxpdHkKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworRm9yIHRoZSBtb3N0IHBhcnQsIGxpYmpwZWctdHVyYm8gc2hvdWxkIHByb2R1Y2UgaWRlbnRpY2FsIG91dHB1dCB0byBsaWJqcGVnCit2NmIuICBUaGUgb25lIGV4Y2VwdGlvbiB0byB0aGlzIGlzIHdoZW4gdXNpbmcgdGhlIGZsb2F0aW5nIHBvaW50IERDVC9JRENULCBpbgord2hpY2ggY2FzZSB0aGUgb3V0cHV0cyBvZiBsaWJqcGVnIHY2YiBhbmQgbGlianBlZy10dXJibyBjYW4gZGlmZmVyIGZvciB0aGUKK2ZvbGxvd2luZyByZWFzb25zOgorCistLSBUaGUgU1NFL1NTRTIgZmxvYXRpbmcgcG9pbnQgRENUIGltcGxlbWVudGF0aW9uIGluIGxpYmpwZWctdHVyYm8gaXMgZXZlciBzbworICAgc2xpZ2h0bHkgbW9yZSBhY2N1cmF0ZSB0aGFuIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiBsaWJqcGVnIHY2YiwgYnV0IG5vdCBieQorICAgYW55IGFtb3VudCBwZXJjZXB0aWJsZSB0byBodW1hbiB2aXNpb24gKGdlbmVyYWxseSBpbiB0aGUgcmFuZ2Ugb2YgMC4wMSB0bworICAgMC4wOCBkQiBnYWluIGluIFBOU1IuKQorLS0gV2hlbiBub3QgdXNpbmcgdGhlIFNJTUQgZXh0ZW5zaW9ucywgdGhlbiB0aGUgYWNjdXJhY3kgb2YgdGhlIGZsb2F0aW5nIHBvaW50CisgICBEQ1QvSURDVCBjYW4gZGVwZW5kIG9uIHRoZSBjb21waWxlciBhbmQgY29tcGlsZXIgc2V0dGluZ3MuCisKKworV2hpbGUgbGlianBlZy10dXJibyBkb2VzIGVtdWxhdGUgdGhlIGxpYmpwZWcgdjggQVBJL0FCSSwgdW5kZXIgdGhlIGhvb2QsIGl0IGlzCitzdGlsbCB1c2luZyB0aGUgc2FtZSBhbGdvcml0aG1zIGFzIGxpYmpwZWcgdjZiLCBzbyB0aGVyZSBhcmUgc2V2ZXJhbCBzcGVjaWZpYworY2FzZXMgaW4gd2hpY2ggbGlianBlZy10dXJibyBjYW5ub3QgYmUgZXhwZWN0ZWQgdG8gcHJvZHVjZSB0aGUgc2FtZSBvdXRwdXQgYXMKK2xpYmpwZWcgdjg6CisKKy0tIFdoZW4gZGVjb21wcmVzc2luZyB1c2luZyBzY2FsaW5nIGZhY3RvcnMgb2YgMS8yIGFuZCAxLzQsIGJlY2F1c2UgbGlianBlZyB2OAorICAgaW1wbGVtZW50cyB0aG9zZSBzY2FsaW5nIGFsZ29yaXRobXMgZGlmZmVyZW50bHkgdGhhbiBsaWJqcGVnIHY2YiBkb2VzLCBhbmQKKyAgIGxpYmpwZWctdHVyYm8ncyBTSU1EIGV4dGVuc2lvbnMgYXJlIGJhc2VkIG9uIHRoZSBsaWJqcGVnIHY2YiBiZWhhdmlvci4KKworLS0gV2hlbiB1c2luZyBjaHJvbWluYW5jZSBzdWJzYW1wbGluZywgYmVjYXVzZSBsaWJqcGVnIHY4IGltcGxlbWVudHMgdGhpcworICAgd2l0aCBpdHMgRENUL0lEQ1Qgc2NhbGluZyBhbGdvcml0aG1zIHJhdGhlciB0aGFuIHdpdGggYSBzZXBhcmF0ZQorICAgZG93bnNhbXBsaW5nL3Vwc2FtcGxpbmcgYWxnb3JpdGhtLiAgSW4gb3VyIHRlc3RpbmcsIHRoZSBzdWJzYW1wbGVkL3Vwc2FtcGxlZAorICAgb3V0cHV0IG9mIGxpYmpwZWcgdjggaXMgbGVzcyBhY2N1cmF0ZSB0aGFuIHRoYXQgb2YgbGlianBlZyB2NmIgZm9yIHRoaXMKKyAgIHJlYXNvbi4KKworLS0gV2hlbiB1c2luZyB0aGUgZmxvYXRpbmcgcG9pbnQgSURDVCwgZm9yIHRoZSByZWFzb25zIHN0YXRlZCBhYm92ZSBhbmQgYWxzbworICAgYmVjYXVzZSB0aGUgZmxvYXRpbmcgcG9pbnQgSURDVCBhbGdvcml0aG0gd2FzIG1vZGlmaWVkIGluIGxpYmpwZWcgdjhhIHRvCisgICBpbXByb3ZlIGFjY3VyYWN5LgorCistLSBXaGVuIGRlY29tcHJlc3NpbmcgdXNpbmcgYSBzY2FsaW5nIGZhY3RvciA+IDEgYW5kIG1lcmdlZCAoQUtBICJub24tZmFuY3kiIG9yCisgICAibm9uLXNtb290aCIpIGNocm9taW5hbmNlIHVwc2FtcGxpbmcsIGJlY2F1c2UgbGlianBlZyB2OCBkb2VzIG5vdCBzdXBwb3J0CisgICBtZXJnZWQgdXBzYW1wbGluZyB3aXRoIHNjYWxpbmcgZmFjdG9ycyA+IDEuCisKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiogICAgIFBlcmZvcm1hbmNlIFBpdGZhbGxzCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKID09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvYWNpbmNsdWRlLm00IGIvYWNpbmNsdWRlLm00CmluZGV4IDcwZTI1NTUuLmFmYjQzNTkgMTAwNjQ0Ci0tLSBhL2FjaW5jbHVkZS5tNAorKysgYi9hY2luY2x1ZGUubTQKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgOzsKICAgICBlc2FjCiAgIDs7Ci0gIGZyZWVic2QqIHwgbmV0YnNkKiB8IG9wZW5ic2QqKQorICBrZnJlZWJzZCogfCBmcmVlYnNkKiB8IG5ldGJzZCogfCBvcGVuYnNkKikKICAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgogICAgICAgb2JqZm10PSdCU0QtYS5vdXQnCiAgICAgZWxzZQpAQCAtMTQ0LDI2ICsxNDQsMjYgQEAKICAgYWNfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCiAgIENGTEFHUz0iJENDQVNGTEFHUyAteCBhc3NlbWJsZXItd2l0aC1jcHAiCiAgIENDPSIkQ0NBUyIKLSAgQUNfQ09NUElMRV9JRkVMU0UoW1sKKyAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbCiAgICAgLnRleHQKICAgICAuZnB1IG5lb24KICAgICAuYXJjaCBhcm12N2EKICAgICAub2JqZWN0X2FyY2ggYXJtdjQKICAgICAuYXJtCiAgICAgcGxkIFtyMF0KLSAgICB2bW92bi51MTYgZDAsIHEwXV0sIGFjX2dvb2RfZ251X2FybV9hc3NlbWJsZXI9eWVzKQorICAgIHZtb3ZuLnUxNiBkMCwgcTBdXSldLCBhY19nb29kX2dudV9hcm1fYXNzZW1ibGVyPXllcykKIAogICBhY191c2VfZ2FzX3ByZXByb2Nlc3Nvcj1ubwogICBpZiB0ZXN0ICJ4JGFjX2dvb2RfZ251X2FybV9hc3NlbWJsZXIiID0gInhubyIgOyB0aGVuCiAgICAgQ0M9Imdhcy1wcmVwcm9jZXNzb3IucGwgJENDQVMiCi0gICAgQUNfQ09NUElMRV9JRkVMU0UoW1sKKyAgICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW1sKICAgICAgIC50ZXh0CiAgICAgICAuZnB1IG5lb24KICAgICAgIC5hcmNoIGFybXY3YQogICAgICAgLm9iamVjdF9hcmNoIGFybXY0CiAgICAgICAuYXJtCiAgICAgICBwbGQgW3IwXQotICAgICAgdm1vdm4udTE2IGQwLCBxMF1dLCBhY191c2VfZ2FzX3ByZXByb2Nlc3Nvcj15ZXMpCisgICAgICB2bW92bi51MTYgZDAsIHEwXV0pXSwgYWNfdXNlX2dhc19wcmVwcm9jZXNzb3I9eWVzKQogICBmaQogICBDRkxBR1M9IiRhY19zYXZlX0NGTEFHUyIKICAgQ0M9IiRhY19zYXZlX0NDIgpkaWZmIC0tZ2l0IGEvYm1wLmMgYi9ibXAuYwppbmRleCA0Y2FlZmI0Li40OTg2MDU1IDEwMDY0NAotLS0gYS9ibXAuYworKysgYi9ibXAuYwpAQCAtOTgsNyArOTgsNyBAQAogfQogCiAKLWludCBsb2FkYm1wKGNoYXIgKmZpbGVuYW1lLCB1bnNpZ25lZCBjaGFyICoqYnVmLCBpbnQgKncsIGludCAqaCwgCitpbnQgbG9hZGJtcChjaGFyICpmaWxlbmFtZSwgdW5zaWduZWQgY2hhciAqKmJ1ZiwgaW50ICp3LCBpbnQgKmgsCiAJaW50IGRzdHBmLCBpbnQgYm90dG9tdXApCiB7CiAJaW50IHJldHZhbD0wLCBkc3Rwcywgc3JjcGYsIHRlbXBjOwpAQCAtMTY5LDcgKzE2OSw3IEBACiAJCQkJbmxpbmVzKTsKIAkJfQogCQljaW5mby5uZXh0X3NjYW5saW5lKz1ubGluZXM7Ci0gIH0KKwl9CiAKIAkoKnNyYy0+ZmluaXNoX2lucHV0KSgmY2luZm8sIHNyYyk7CiAKQEAgLTIzNiw3ICsyMzYsNyBAQAogCQkJX3Rocm93KCJzYXZlYm1wKCk6IENvdWxkIG5vdCBpbml0aWFsaXplIFBQTSB3cml0ZXIiKTsKIAl9CiAKLSAgZHN0LT5vdXRwdXRfZmlsZT1maWxlOworCWRzdC0+b3V0cHV0X2ZpbGU9ZmlsZTsKIAkoKmRzdC0+c3RhcnRfb3V0cHV0KSgmZGluZm8sIGRzdCk7CiAJKCpkaW5mby5tZW0tPnJlYWxpemVfdmlydF9hcnJheXMpKChqX2NvbW1vbl9wdHIpJmRpbmZvKTsKIApAQCAtMjU4LDcgKzI1OCw3IEBACiAJCX0KIAkJKCpkc3QtPnB1dF9waXhlbF9yb3dzKSgmZGluZm8sIGRzdCwgbmxpbmVzKTsKIAkJZGluZm8ub3V0cHV0X3NjYW5saW5lKz1ubGluZXM7Ci0gIH0KKwl9CiAKIAkoKmRzdC0+ZmluaXNoX291dHB1dCkoJmRpbmZvLCBkc3QpOwogCmRpZmYgLS1naXQgYS9ibXAuaCBiL2JtcC5oCmluZGV4IDBkMWU0ZGMuLmM1MGMyNjAgMTAwNjQ0Ci0tLSBhL2JtcC5oCisrKyBiL2JtcC5oCkBAIC0zOSw4ICszOSw0IEBACiAKIGNvbnN0IGNoYXIgKmJtcGdldGVycih2b2lkKTsKIAotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9jZGVycm9yLmggYi9jZGVycm9yLmgKaW5kZXggZTE5YzQ3NS4uNmNjYjM3YyAxMDA2NDQKLS0tIGEvY2RlcnJvci5oCisrKyBiL2NkZXJyb3IuaApAQCAtMzMsNyArMzMsNyBAQAogCiB0eXBlZGVmIGVudW0gewogCi0jZGVmaW5lIEpNRVNTQUdFKGNvZGUsc3RyaW5nKQljb2RlICwKKyNkZWZpbmUgSk1FU1NBR0UoY29kZSxzdHJpbmcpICAgY29kZSAsCiAKICNlbmRpZiAvKiBKTUFLRV9FTlVNX0xJU1QgKi8KIApAQCAtNjIsNyArNjIsNyBAQAogSk1FU1NBR0UoSkVSUl9HSUZfTk9ULCAiTm90IGEgR0lGIGZpbGUiKQogSk1FU1NBR0UoSlRSQ19HSUYsICIldXgldXglZCBHSUYgaW1hZ2UiKQogSk1FU1NBR0UoSlRSQ19HSUZfQkFEVkVSU0lPTiwKLQkgIldhcm5pbmc6IHVuZXhwZWN0ZWQgR0lGIHZlcnNpb24gbnVtYmVyICclYyVjJWMnIikKKyAgICAgICAgICJXYXJuaW5nOiB1bmV4cGVjdGVkIEdJRiB2ZXJzaW9uIG51bWJlciAnJWMlYyVjJyIpCiBKTUVTU0FHRShKVFJDX0dJRl9FWFRFTlNJT04sICJJZ25vcmluZyBHSUYgZXh0ZW5zaW9uIGJsb2NrIG9mIHR5cGUgMHglMDJ4IikKIEpNRVNTQUdFKEpUUkNfR0lGX05PTlNRVUFSRSwgIkNhdXRpb246IG5vbnNxdWFyZSBwaXhlbHMgaW4gaW5wdXQiKQogSk1FU1NBR0UoSldSTl9HSUZfQkFEREFUQSwgIkNvcnJ1cHQgZGF0YSBpbiBHSUYgZmlsZSIpCkBAIC0xMTAsMTMgKzExMCwxMyBAQAogI2VuZGlmIC8qIFRBUkdBX1NVUFBPUlRFRCAqLwogCiBKTUVTU0FHRShKRVJSX0JBRF9DTUFQX0ZJTEUsCi0JICJDb2xvciBtYXAgZmlsZSBpcyBpbnZhbGlkIG9yIG9mIHVuc3VwcG9ydGVkIGZvcm1hdCIpCisgICAgICAgICAiQ29sb3IgbWFwIGZpbGUgaXMgaW52YWxpZCBvciBvZiB1bnN1cHBvcnRlZCBmb3JtYXQiKQogSk1FU1NBR0UoSkVSUl9UT09fTUFOWV9DT0xPUlMsCi0JICJPdXRwdXQgZmlsZSBmb3JtYXQgY2Fubm90IGhhbmRsZSAlZCBjb2xvcm1hcCBlbnRyaWVzIikKKyAgICAgICAgICJPdXRwdXQgZmlsZSBmb3JtYXQgY2Fubm90IGhhbmRsZSAlZCBjb2xvcm1hcCBlbnRyaWVzIikKIEpNRVNTQUdFKEpFUlJfVU5HRVRDX0ZBSUxFRCwgInVuZ2V0YyBmYWlsZWQiKQogI2lmZGVmIFRBUkdBX1NVUFBPUlRFRAogSk1FU1NBR0UoSkVSUl9VTktOT1dOX0ZPUk1BVCwKLQkgIlVucmVjb2duaXplZCBpbnB1dCBmaWxlIGZvcm1hdCAtLS0gcGVyaGFwcyB5b3UgbmVlZCAtdGFyZ2EiKQorICAgICAgICAgIlVucmVjb2duaXplZCBpbnB1dCBmaWxlIGZvcm1hdCAtLS0gcGVyaGFwcyB5b3UgbmVlZCAtdGFyZ2EiKQogI2Vsc2UKIEpNRVNTQUdFKEpFUlJfVU5LTk9XTl9GT1JNQVQsICJVbnJlY29nbml6ZWQgaW5wdXQgZmlsZSBmb3JtYXQiKQogI2VuZGlmCmRpZmYgLS1naXQgYS9jZGpwZWcuYyBiL2NkanBlZy5jCmluZGV4IGI2MjUwZmYuLjE3ZjFkZTcgMTAwNjQ0Ci0tLSBhL2NkanBlZy5jCisrKyBiL2NkanBlZy5jCkBAIC05LDE1ICs5LDE1IEBACiAgKiBwcm9ncmFtcyAoY2pwZWcsIGRqcGVnLCBqcGVndHJhbikuCiAgKi8KIAotI2luY2x1ZGUgImNkanBlZy5oIgkJLyogQ29tbW9uIGRlY2xzIGZvciBjanBlZy9kanBlZyBhcHBsaWNhdGlvbnMgKi8KLSNpbmNsdWRlIDxjdHlwZS5oPgkJLyogdG8gZGVjbGFyZSBpc3VwcGVyKCksIHRvbG93ZXIoKSAqLworI2luY2x1ZGUgImNkanBlZy5oIiAgICAgICAgICAgICAvKiBDb21tb24gZGVjbHMgZm9yIGNqcGVnL2RqcGVnIGFwcGxpY2F0aW9ucyAqLworI2luY2x1ZGUgPGN0eXBlLmg+ICAgICAgICAgICAgICAvKiB0byBkZWNsYXJlIGlzdXBwZXIoKSwgdG9sb3dlcigpICovCiAjaWZkZWYgTkVFRF9TSUdOQUxfQ0FUQ0hFUgotI2luY2x1ZGUgPHNpZ25hbC5oPgkJLyogdG8gZGVjbGFyZSBzaWduYWwoKSAqLworI2luY2x1ZGUgPHNpZ25hbC5oPiAgICAgICAgICAgICAvKiB0byBkZWNsYXJlIHNpZ25hbCgpICovCiAjZW5kaWYKICNpZmRlZiBVU0VfU0VUTU9ERQotI2luY2x1ZGUgPGZjbnRsLmg+CQkvKiB0byBkZWNsYXJlIHNldG1vZGUoKSdzIHBhcmFtZXRlciBtYWNyb3MgKi8KKyNpbmNsdWRlIDxmY250bC5oPiAgICAgICAgICAgICAgLyogdG8gZGVjbGFyZSBzZXRtb2RlKCkncyBwYXJhbWV0ZXIgbWFjcm9zICovCiAvKiBJZiB5b3UgaGF2ZSBzZXRtb2RlKCkgYnV0IG5vdCA8aW8uaD4sIGp1c3QgZGVsZXRlIHRoaXMgbGluZTogKi8KLSNpbmNsdWRlIDxpby5oPgkJCS8qIHRvIGRlY2xhcmUgc2V0bW9kZSgpICovCisjaW5jbHVkZSA8aW8uaD4gICAgICAgICAgICAgICAgIC8qIHRvIGRlY2xhcmUgc2V0bW9kZSgpICovCiAjZW5kaWYKIAogCkBAIC0zMSwxMyArMzEsMTMgQEAKIAogc3RhdGljIGpfY29tbW9uX3B0ciBzaWdfY2luZm87CiAKLXZvaWQJCQkJLyogbXVzdCBiZSBnbG9iYWwgZm9yIE1hbnggQyAqLwordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtdXN0IGJlIGdsb2JhbCBmb3IgTWFueCBDICovCiBzaWduYWxfY2F0Y2hlciAoaW50IHNpZ251bSkKIHsKICAgaWYgKHNpZ19jaW5mbyAhPSBOVUxMKSB7CiAgICAgaWYgKHNpZ19jaW5mby0+ZXJyICE9IE5VTEwpIC8qIHR1cm4gb2ZmIHRyYWNlIG91dHB1dCAqLwogICAgICAgc2lnX2NpbmZvLT5lcnItPnRyYWNlX2xldmVsID0gMDsKLSAgICBqcGVnX2Rlc3Ryb3koc2lnX2NpbmZvKTsJLyogY2xlYW4gdXAgbWVtb3J5IGFsbG9jYXRpb24gJiB0ZW1wIGZpbGVzICovCisgICAganBlZ19kZXN0cm95KHNpZ19jaW5mbyk7ICAgIC8qIGNsZWFuIHVwIG1lbW9yeSBhbGxvY2F0aW9uICYgdGVtcCBmaWxlcyAqLwogICB9CiAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKIH0KQEAgLTQ3LDEwICs0NywxMCBAQAogZW5hYmxlX3NpZ25hbF9jYXRjaGVyIChqX2NvbW1vbl9wdHIgY2luZm8pCiB7CiAgIHNpZ19jaW5mbyA9IGNpbmZvOwotI2lmZGVmIFNJR0lOVAkJCS8qIG5vdCBhbGwgc3lzdGVtcyBoYXZlIFNJR0lOVCAqLworI2lmZGVmIFNJR0lOVCAgICAgICAgICAgICAgICAgICAvKiBub3QgYWxsIHN5c3RlbXMgaGF2ZSBTSUdJTlQgKi8KICAgc2lnbmFsKFNJR0lOVCwgc2lnbmFsX2NhdGNoZXIpOwogI2VuZGlmCi0jaWZkZWYgU0lHVEVSTQkJCS8qIG5vdCBhbGwgc3lzdGVtcyBoYXZlIFNJR1RFUk0gKi8KKyNpZmRlZiBTSUdURVJNICAgICAgICAgICAgICAgICAgLyogbm90IGFsbCBzeXN0ZW1zIGhhdmUgU0lHVEVSTSAqLwogICBzaWduYWwoU0lHVEVSTSwgc2lnbmFsX2NhdGNoZXIpOwogI2VuZGlmCiB9CkBAIC03NSw4ICs3NSw4IEBACiAgICAgcHJvZy0+cGVyY2VudF9kb25lID0gcGVyY2VudF9kb25lOwogICAgIGlmICh0b3RhbF9wYXNzZXMgPiAxKSB7CiAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxyUGFzcyAlZC8lZDogJTNkJSUgIiwKLQkgICAgICBwcm9nLT5wdWIuY29tcGxldGVkX3Bhc3NlcyArIHByb2ctPmNvbXBsZXRlZF9leHRyYV9wYXNzZXMgKyAxLAotCSAgICAgIHRvdGFsX3Bhc3NlcywgcGVyY2VudF9kb25lKTsKKyAgICAgICAgICAgICAgcHJvZy0+cHViLmNvbXBsZXRlZF9wYXNzZXMgKyBwcm9nLT5jb21wbGV0ZWRfZXh0cmFfcGFzc2VzICsgMSwKKyAgICAgICAgICAgICAgdG90YWxfcGFzc2VzLCBwZXJjZW50X2RvbmUpOwogICAgIH0gZWxzZSB7CiAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxyICUzZCUlICIsIHBlcmNlbnRfZG9uZSk7CiAgICAgfQpAQCAtMTI2LDE3ICsxMjYsMTcgQEAKIAogICB3aGlsZSAoKGNhID0gKmFyZysrKSAhPSAnXDAnKSB7CiAgICAgaWYgKChjayA9ICprZXl3b3JkKyspID09ICdcMCcpCi0gICAgICByZXR1cm4gRkFMU0U7CQkvKiBhcmcgbG9uZ2VyIHRoYW4ga2V5d29yZCwgbm8gZ29vZCAqLwotICAgIGlmIChpc3VwcGVyKGNhKSkJCS8qIGZvcmNlIGFyZyB0byBsY2FzZSAoYXNzdW1lIGNrIGlzIGFscmVhZHkpICovCisgICAgICByZXR1cm4gRkFMU0U7ICAgICAgICAgICAgIC8qIGFyZyBsb25nZXIgdGhhbiBrZXl3b3JkLCBubyBnb29kICovCisgICAgaWYgKGlzdXBwZXIoY2EpKSAgICAgICAgICAgIC8qIGZvcmNlIGFyZyB0byBsY2FzZSAoYXNzdW1lIGNrIGlzIGFscmVhZHkpICovCiAgICAgICBjYSA9IHRvbG93ZXIoY2EpOwogICAgIGlmIChjYSAhPSBjaykKLSAgICAgIHJldHVybiBGQUxTRTsJCS8qIG5vIGdvb2QgKi8KLSAgICBubWF0Y2hlZCsrOwkJCS8qIGNvdW50IG1hdGNoZWQgY2hhcmFjdGVycyAqLworICAgICAgcmV0dXJuIEZBTFNFOyAgICAgICAgICAgICAvKiBubyBnb29kICovCisgICAgbm1hdGNoZWQrKzsgICAgICAgICAgICAgICAgIC8qIGNvdW50IG1hdGNoZWQgY2hhcmFjdGVycyAqLwogICB9CiAgIC8qIHJlYWNoZWQgZW5kIG9mIGFyZ3VtZW50OyBmYWlsIGlmIGl0J3MgdG9vIHNob3J0IGZvciB1bmlxdWUgYWJicmV2ICovCiAgIGlmIChubWF0Y2hlZCA8IG1pbmNoYXJzKQogICAgIHJldHVybiBGQUxTRTsKLSAgcmV0dXJuIFRSVUU7CQkJLyogQS1PSyAqLworICByZXR1cm4gVFJVRTsgICAgICAgICAgICAgICAgICAvKiBBLU9LICovCiB9CiAKIApAQCAtMTUwLDEwICsxNTAsMTAgQEAKIHsKICAgRklMRSAqIGlucHV0X2ZpbGUgPSBzdGRpbjsKIAotI2lmZGVmIFVTRV9TRVRNT0RFCQkvKiBuZWVkIHRvIGhhY2sgZmlsZSBtb2RlPyAqLworI2lmZGVmIFVTRV9TRVRNT0RFICAgICAgICAgICAgICAvKiBuZWVkIHRvIGhhY2sgZmlsZSBtb2RlPyAqLwogICBzZXRtb2RlKGZpbGVubyhzdGRpbiksIE9fQklOQVJZKTsKICNlbmRpZgotI2lmZGVmIFVTRV9GRE9QRU4JCS8qIG5lZWQgdG8gcmUtb3BlbiBpbiBiaW5hcnkgbW9kZT8gKi8KKyNpZmRlZiBVU0VfRkRPUEVOICAgICAgICAgICAgICAgLyogbmVlZCB0byByZS1vcGVuIGluIGJpbmFyeSBtb2RlPyAqLwogICBpZiAoKGlucHV0X2ZpbGUgPSBmZG9wZW4oZmlsZW5vKHN0ZGluKSwgUkVBRF9CSU5BUlkpKSA9PSBOVUxMKSB7CiAgICAgZnByaW50ZihzdGRlcnIsICJDYW5ub3QgcmVvcGVuIHN0ZGluXG4iKTsKICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CkBAIC0xNjgsMTAgKzE2OCwxMCBAQAogewogICBGSUxFICogb3V0cHV0X2ZpbGUgPSBzdGRvdXQ7CiAKLSNpZmRlZiBVU0VfU0VUTU9ERQkJLyogbmVlZCB0byBoYWNrIGZpbGUgbW9kZT8gKi8KKyNpZmRlZiBVU0VfU0VUTU9ERSAgICAgICAgICAgICAgLyogbmVlZCB0byBoYWNrIGZpbGUgbW9kZT8gKi8KICAgc2V0bW9kZShmaWxlbm8oc3Rkb3V0KSwgT19CSU5BUlkpOwogI2VuZGlmCi0jaWZkZWYgVVNFX0ZET1BFTgkJLyogbmVlZCB0byByZS1vcGVuIGluIGJpbmFyeSBtb2RlPyAqLworI2lmZGVmIFVTRV9GRE9QRU4gICAgICAgICAgICAgICAvKiBuZWVkIHRvIHJlLW9wZW4gaW4gYmluYXJ5IG1vZGU/ICovCiAgIGlmICgob3V0cHV0X2ZpbGUgPSBmZG9wZW4oZmlsZW5vKHN0ZG91dCksIFdSSVRFX0JJTkFSWSkpID09IE5VTEwpIHsKICAgICBmcHJpbnRmKHN0ZGVyciwgIkNhbm5vdCByZW9wZW4gc3Rkb3V0XG4iKTsKICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CmRpZmYgLS1naXQgYS9jZGpwZWcuaCBiL2NkanBlZy5oCmluZGV4IGVkMDI0YWMuLjBhOGYxOTcgMTAwNjQ0Ci0tLSBhL2NkanBlZy5oCisrKyBiL2NkanBlZy5oCkBAIC05LDEyICs5LDEyIEBACiAgKiBjanBlZyBhbmQgZGpwZWcuICBJdCBpcyBOT1QgdXNlZCBieSB0aGUgY29yZSBKUEVHIGxpYnJhcnkuCiAgKi8KIAotI2RlZmluZSBKUEVHX0NKUEVHX0RKUEVHCS8qIGRlZmluZSBwcm9wZXIgb3B0aW9ucyBpbiBqY29uZmlnLmggKi8KLSNkZWZpbmUgSlBFR19JTlRFUk5BTF9PUFRJT05TCS8qIGNqcGVnLmMsZGpwZWcuYyBuZWVkIHRvIHNlZSB4eHhfU1VQUE9SVEVEICovCisjZGVmaW5lIEpQRUdfQ0pQRUdfREpQRUcgICAgICAgIC8qIGRlZmluZSBwcm9wZXIgb3B0aW9ucyBpbiBqY29uZmlnLmggKi8KKyNkZWZpbmUgSlBFR19JTlRFUk5BTF9PUFRJT05TICAgLyogY2pwZWcuYyxkanBlZy5jIG5lZWQgdG8gc2VlIHh4eF9TVVBQT1JURUQgKi8KICNpbmNsdWRlICJqaW5jbHVkZS5oIgogI2luY2x1ZGUgImpwZWdsaWIuaCIKLSNpbmNsdWRlICJqZXJyb3IuaCIJCS8qIGdldCBsaWJyYXJ5IGVycm9yIGNvZGVzIHRvbyAqLwotI2luY2x1ZGUgImNkZXJyb3IuaCIJCS8qIGdldCBhcHBsaWNhdGlvbi1zcGVjaWZpYyBlcnJvciBjb2RlcyAqLworI2luY2x1ZGUgImplcnJvci5oIiAgICAgICAgICAgICAvKiBnZXQgbGlicmFyeSBlcnJvciBjb2RlcyB0b28gKi8KKyNpbmNsdWRlICJjZGVycm9yLmgiICAgICAgICAgICAgLyogZ2V0IGFwcGxpY2F0aW9uLXNwZWNpZmljIGVycm9yIGNvZGVzICovCiAKIAogLyoKQEAgLTI1LDExICsyNSwxMSBAQAogCiBzdHJ1Y3QgY2pwZWdfc291cmNlX3N0cnVjdCB7CiAgIEpNRVRIT0Qodm9pZCwgc3RhcnRfaW5wdXQsIChqX2NvbXByZXNzX3B0ciBjaW5mbywKLQkJCSAgICAgIGNqcGVnX3NvdXJjZV9wdHIgc2luZm8pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNqcGVnX3NvdXJjZV9wdHIgc2luZm8pKTsKICAgSk1FVEhPRChKRElNRU5TSU9OLCBnZXRfcGl4ZWxfcm93cywgKGpfY29tcHJlc3NfcHRyIGNpbmZvLAotCQkJCSAgICAgICBjanBlZ19zb3VyY2VfcHRyIHNpbmZvKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjanBlZ19zb3VyY2VfcHRyIHNpbmZvKSk7CiAgIEpNRVRIT0Qodm9pZCwgZmluaXNoX2lucHV0LCAoal9jb21wcmVzc19wdHIgY2luZm8sCi0JCQkgICAgICAgY2pwZWdfc291cmNlX3B0ciBzaW5mbykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNqcGVnX3NvdXJjZV9wdHIgc2luZm8pKTsKIAogICBGSUxFICppbnB1dF9maWxlOwogCkBAIC00OSwxNCArNDksMTQgQEAKICAgICogVGhlIGNvbG9yIG1hcCB3aWxsIGJlIHJlYWR5IGF0IHRoaXMgdGltZSwgaWYgb25lIGlzIG5lZWRlZC4KICAgICovCiAgIEpNRVRIT0Qodm9pZCwgc3RhcnRfb3V0cHV0LCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKLQkJCSAgICAgICBkanBlZ19kZXN0X3B0ciBkaW5mbykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRqcGVnX2Rlc3RfcHRyIGRpbmZvKSk7CiAgIC8qIEVtaXQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgcGl4ZWwgcm93cyBmcm9tIHRoZSBidWZmZXIuICovCiAgIEpNRVRIT0Qodm9pZCwgcHV0X3BpeGVsX3Jvd3MsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAotCQkJCSBkanBlZ19kZXN0X3B0ciBkaW5mbywKLQkJCQkgSkRJTUVOU0lPTiByb3dzX3N1cHBsaWVkKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkanBlZ19kZXN0X3B0ciBkaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gcm93c19zdXBwbGllZCkpOwogICAvKiBGaW5pc2ggdXAgYXQgdGhlIGVuZCBvZiB0aGUgaW1hZ2UuICovCiAgIEpNRVRIT0Qodm9pZCwgZmluaXNoX291dHB1dCwgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCi0JCQkJZGpwZWdfZGVzdF9wdHIgZGluZm8pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGpwZWdfZGVzdF9wdHIgZGluZm8pKTsKIAogICAvKiBUYXJnZXQgZmlsZSBzcGVjOyBmaWxsZWQgaW4gYnkgZGpwZWcuYyBhZnRlciBvYmplY3QgaXMgY3JlYXRlZC4gKi8KICAgRklMRSAqIG91dHB1dF9maWxlOwpAQCAtNzksOSArNzksOSBAQAogICovCiAKIHN0cnVjdCBjZGpwZWdfcHJvZ3Jlc3NfbWdyIHsKLSAgc3RydWN0IGpwZWdfcHJvZ3Jlc3NfbWdyIHB1YjsJLyogZmllbGRzIGtub3duIHRvIEpQRUcgbGlicmFyeSAqLwotICBpbnQgY29tcGxldGVkX2V4dHJhX3Bhc3NlczsJLyogZXh0cmEgcGFzc2VzIGNvbXBsZXRlZCAqLwotICBpbnQgdG90YWxfZXh0cmFfcGFzc2VzOwkvKiB0b3RhbCBleHRyYSAqLworICBzdHJ1Y3QganBlZ19wcm9ncmVzc19tZ3IgcHViOyAvKiBmaWVsZHMga25vd24gdG8gSlBFRyBsaWJyYXJ5ICovCisgIGludCBjb21wbGV0ZWRfZXh0cmFfcGFzc2VzOyAgIC8qIGV4dHJhIHBhc3NlcyBjb21wbGV0ZWQgKi8KKyAgaW50IHRvdGFsX2V4dHJhX3Bhc3NlczsgICAgICAgLyogdG90YWwgZXh0cmEgKi8KICAgLyogbGFzdCBwcmludGVkIHBlcmNlbnRhZ2Ugc3RvcmVkIGhlcmUgdG8gYXZvaWQgbXVsdGlwbGUgcHJpbnRvdXRzICovCiAgIGludCBwZXJjZW50X2RvbmU7CiB9OwpAQCAtOTIsMzQgKzkyLDM0IEBACiAvKiBTaG9ydCBmb3JtcyBvZiBleHRlcm5hbCBuYW1lcyBmb3Igc3lzdGVtcyB3aXRoIGJyYWluLWRhbWFnZWQgbGlua2Vycy4gKi8KIAogI2lmZGVmIE5FRURfU0hPUlRfRVhURVJOQUxfTkFNRVMKLSNkZWZpbmUgamluaXRfcmVhZF9ibXAJCWpJUmRCTVAKLSNkZWZpbmUgamluaXRfd3JpdGVfYm1wCQlqSVdyQk1QCi0jZGVmaW5lIGppbml0X3JlYWRfZ2lmCQlqSVJkR0lGCi0jZGVmaW5lIGppbml0X3dyaXRlX2dpZgkJaklXckdJRgotI2RlZmluZSBqaW5pdF9yZWFkX3BwbQkJaklSZFBQTQotI2RlZmluZSBqaW5pdF93cml0ZV9wcG0JCWpJV3JQUE0KLSNkZWZpbmUgamluaXRfcmVhZF9ybGUJCWpJUmRSTEUKLSNkZWZpbmUgamluaXRfd3JpdGVfcmxlCQlqSVdyUkxFCi0jZGVmaW5lIGppbml0X3JlYWRfdGFyZ2EJaklSZFRhcmdhCi0jZGVmaW5lIGppbml0X3dyaXRlX3RhcmdhCWpJV3JUYXJnYQotI2RlZmluZSByZWFkX3F1YW50X3RhYmxlcwlSZFFUYWJsZXMKLSNkZWZpbmUgcmVhZF9zY2FuX3NjcmlwdAlSZFNjblNjcmlwdAorI2RlZmluZSBqaW5pdF9yZWFkX2JtcCAgICAgICAgICBqSVJkQk1QCisjZGVmaW5lIGppbml0X3dyaXRlX2JtcCAgICAgICAgIGpJV3JCTVAKKyNkZWZpbmUgamluaXRfcmVhZF9naWYgICAgICAgICAgaklSZEdJRgorI2RlZmluZSBqaW5pdF93cml0ZV9naWYgICAgICAgICBqSVdyR0lGCisjZGVmaW5lIGppbml0X3JlYWRfcHBtICAgICAgICAgIGpJUmRQUE0KKyNkZWZpbmUgamluaXRfd3JpdGVfcHBtICAgICAgICAgaklXclBQTQorI2RlZmluZSBqaW5pdF9yZWFkX3JsZSAgICAgICAgICBqSVJkUkxFCisjZGVmaW5lIGppbml0X3dyaXRlX3JsZSAgICAgICAgIGpJV3JSTEUKKyNkZWZpbmUgamluaXRfcmVhZF90YXJnYSAgICAgICAgaklSZFRhcmdhCisjZGVmaW5lIGppbml0X3dyaXRlX3RhcmdhICAgICAgIGpJV3JUYXJnYQorI2RlZmluZSByZWFkX3F1YW50X3RhYmxlcyAgICAgICBSZFFUYWJsZXMKKyNkZWZpbmUgcmVhZF9zY2FuX3NjcmlwdCAgICAgICAgUmRTY25TY3JpcHQKICNkZWZpbmUgc2V0X3F1YWxpdHlfcmF0aW5ncyAgICAgU2V0UVJhdGVzCi0jZGVmaW5lIHNldF9xdWFudF9zbG90cwkJU2V0UVNsb3RzCi0jZGVmaW5lIHNldF9zYW1wbGVfZmFjdG9ycwlTZXRTRmFjdHMKLSNkZWZpbmUgcmVhZF9jb2xvcl9tYXAJCVJkQ01hcAotI2RlZmluZSBlbmFibGVfc2lnbmFsX2NhdGNoZXIJRW5TaWdDYXRjaGVyCi0jZGVmaW5lIHN0YXJ0X3Byb2dyZXNzX21vbml0b3IJU3RQcm9nTW9uCi0jZGVmaW5lIGVuZF9wcm9ncmVzc19tb25pdG9yCUVuUHJvZ01vbgotI2RlZmluZSByZWFkX3N0ZGluCQlSZFN0ZGluCi0jZGVmaW5lIHdyaXRlX3N0ZG91dAkJV3JTdGRvdXQKKyNkZWZpbmUgc2V0X3F1YW50X3Nsb3RzICAgICAgICAgU2V0UVNsb3RzCisjZGVmaW5lIHNldF9zYW1wbGVfZmFjdG9ycyAgICAgIFNldFNGYWN0cworI2RlZmluZSByZWFkX2NvbG9yX21hcCAgICAgICAgICBSZENNYXAKKyNkZWZpbmUgZW5hYmxlX3NpZ25hbF9jYXRjaGVyICAgRW5TaWdDYXRjaGVyCisjZGVmaW5lIHN0YXJ0X3Byb2dyZXNzX21vbml0b3IgIFN0UHJvZ01vbgorI2RlZmluZSBlbmRfcHJvZ3Jlc3NfbW9uaXRvciAgICBFblByb2dNb24KKyNkZWZpbmUgcmVhZF9zdGRpbiAgICAgICAgICAgICAgUmRTdGRpbgorI2RlZmluZSB3cml0ZV9zdGRvdXQgICAgICAgICAgICBXclN0ZG91dAogI2VuZGlmIC8qIE5FRURfU0hPUlRfRVhURVJOQUxfTkFNRVMgKi8KIAogLyogTW9kdWxlIHNlbGVjdGlvbiByb3V0aW5lcyBmb3IgSS9PIG1vZHVsZXMuICovCiAKIEVYVEVSTihjanBlZ19zb3VyY2VfcHRyKSBqaW5pdF9yZWFkX2JtcCBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7CiBFWFRFUk4oZGpwZWdfZGVzdF9wdHIpIGppbml0X3dyaXRlX2JtcCBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCi0JCQkJCSAgICBib29sZWFuIGlzX29zMikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGlzX29zMikpOwogRVhURVJOKGNqcGVnX3NvdXJjZV9wdHIpIGppbml0X3JlYWRfZ2lmIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8pKTsKIEVYVEVSTihkanBlZ19kZXN0X3B0cikgamluaXRfd3JpdGVfZ2lmIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOwogRVhURVJOKGNqcGVnX3NvdXJjZV9wdHIpIGppbml0X3JlYWRfcHBtIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8pKTsKQEAgLTEzMiwxMCArMTMyLDEwIEBACiAvKiBjanBlZyBzdXBwb3J0IHJvdXRpbmVzIChpbiByZHN3aXRjaC5jKSAqLwogCiBFWFRFUk4oYm9vbGVhbikgcmVhZF9xdWFudF90YWJsZXMgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywgY2hhciAqIGZpbGVuYW1lLAotCQkJCSAgICAgICBib29sZWFuIGZvcmNlX2Jhc2VsaW5lKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGZvcmNlX2Jhc2VsaW5lKSk7CiBFWFRFUk4oYm9vbGVhbikgcmVhZF9zY2FuX3NjcmlwdCBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBjaGFyICogZmlsZW5hbWUpKTsKIEVYVEVSTihib29sZWFuKSBzZXRfcXVhbGl0eV9yYXRpbmdzIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sIGNoYXIgKmFyZywKLQkJCQkJIGJvb2xlYW4gZm9yY2VfYmFzZWxpbmUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBmb3JjZV9iYXNlbGluZSkpOwogRVhURVJOKGJvb2xlYW4pIHNldF9xdWFudF9zbG90cyBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBjaGFyICphcmcpKTsKIEVYVEVSTihib29sZWFuKSBzZXRfc2FtcGxlX2ZhY3RvcnMgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywgY2hhciAqYXJnKSk7CiAKQEAgLTE0Nyw3ICsxNDcsNyBAQAogCiBFWFRFUk4odm9pZCkgZW5hYmxlX3NpZ25hbF9jYXRjaGVyIEpQUCgoal9jb21tb25fcHRyIGNpbmZvKSk7CiBFWFRFUk4odm9pZCkgc3RhcnRfcHJvZ3Jlc3NfbW9uaXRvciBKUFAoKGpfY29tbW9uX3B0ciBjaW5mbywKLQkJCQkJIGNkX3Byb2dyZXNzX3B0ciBwcm9ncmVzcykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZF9wcm9ncmVzc19wdHIgcHJvZ3Jlc3MpKTsKIEVYVEVSTih2b2lkKSBlbmRfcHJvZ3Jlc3NfbW9uaXRvciBKUFAoKGpfY29tbW9uX3B0ciBjaW5mbykpOwogRVhURVJOKGJvb2xlYW4pIGtleW1hdGNoIEpQUCgoY2hhciAqIGFyZywgY29uc3QgY2hhciAqIGtleXdvcmQsIGludCBtaW5jaGFycykpOwogRVhURVJOKEZJTEUgKikgcmVhZF9zdGRpbiBKUFAoKHZvaWQpKTsKQEAgLTE1NSwzMiArMTU1LDMyIEBACiAKIC8qIG1pc2NlbGxhbmVvdXMgdXNlZnVsIG1hY3JvcyAqLwogCi0jaWZkZWYgRE9OVF9VU0VfQl9NT0RFCQkvKiBkZWZpbmUgbW9kZSBwYXJhbWV0ZXJzIGZvciBmb3BlbigpICovCi0jZGVmaW5lIFJFQURfQklOQVJZCSJyIgotI2RlZmluZSBXUklURV9CSU5BUlkJInciCisjaWZkZWYgRE9OVF9VU0VfQl9NT0RFICAgICAgICAgIC8qIGRlZmluZSBtb2RlIHBhcmFtZXRlcnMgZm9yIGZvcGVuKCkgKi8KKyNkZWZpbmUgUkVBRF9CSU5BUlkgICAgICJyIgorI2RlZmluZSBXUklURV9CSU5BUlkgICAgInciCiAjZWxzZQotI2lmZGVmIFZNUwkJCS8qIFZNUyBpcyB2ZXJ5IG5vbnN0YW5kYXJkICovCi0jZGVmaW5lIFJFQURfQklOQVJZCSJyYiIsICJjdHg9c3RtIgotI2RlZmluZSBXUklURV9CSU5BUlkJIndiIiwgImN0eD1zdG0iCi0jZWxzZQkJCQkvKiBzdGFuZGFyZCBBTlNJLWNvbXBsaWFudCBjYXNlICovCi0jZGVmaW5lIFJFQURfQklOQVJZCSJyYiIKLSNkZWZpbmUgV1JJVEVfQklOQVJZCSJ3YiIKKyNpZmRlZiBWTVMgICAgICAgICAgICAgICAgICAgICAgLyogVk1TIGlzIHZlcnkgbm9uc3RhbmRhcmQgKi8KKyNkZWZpbmUgUkVBRF9CSU5BUlkgICAgICJyYiIsICJjdHg9c3RtIgorI2RlZmluZSBXUklURV9CSU5BUlkgICAgIndiIiwgImN0eD1zdG0iCisjZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0YW5kYXJkIEFOU0ktY29tcGxpYW50IGNhc2UgKi8KKyNkZWZpbmUgUkVBRF9CSU5BUlkgICAgICJyYiIKKyNkZWZpbmUgV1JJVEVfQklOQVJZICAgICJ3YiIKICNlbmRpZgogI2VuZGlmCiAKLSNpZm5kZWYgRVhJVF9GQUlMVVJFCQkvKiBkZWZpbmUgZXhpdCgpIGNvZGVzIGlmIG5vdCBwcm92aWRlZCAqLworI2lmbmRlZiBFWElUX0ZBSUxVUkUgICAgICAgICAgICAvKiBkZWZpbmUgZXhpdCgpIGNvZGVzIGlmIG5vdCBwcm92aWRlZCAqLwogI2RlZmluZSBFWElUX0ZBSUxVUkUgIDEKICNlbmRpZgogI2lmbmRlZiBFWElUX1NVQ0NFU1MKICNpZmRlZiBWTVMKLSNkZWZpbmUgRVhJVF9TVUNDRVNTICAxCQkvKiBWTVMgaXMgdmVyeSBub25zdGFuZGFyZCAqLworI2RlZmluZSBFWElUX1NVQ0NFU1MgIDEgICAgICAgICAvKiBWTVMgaXMgdmVyeSBub25zdGFuZGFyZCAqLwogI2Vsc2UKICNkZWZpbmUgRVhJVF9TVUNDRVNTICAwCiAjZW5kaWYKICNlbmRpZgogI2lmbmRlZiBFWElUX1dBUk5JTkcKICNpZmRlZiBWTVMKLSNkZWZpbmUgRVhJVF9XQVJOSU5HICAxCQkvKiBWTVMgaXMgdmVyeSBub25zdGFuZGFyZCAqLworI2RlZmluZSBFWElUX1dBUk5JTkcgIDEgICAgICAgICAvKiBWTVMgaXMgdmVyeSBub25zdGFuZGFyZCAqLwogI2Vsc2UKICNkZWZpbmUgRVhJVF9XQVJOSU5HICAyCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2NoYW5nZS5sb2cgYi9jaGFuZ2UubG9nCmluZGV4IGM3ODg1YTcuLmI2MGRkZDYgMTAwNjQ0Ci0tLSBhL2NoYW5nZS5sb2cKKysrIGIvY2hhbmdlLmxvZwpAQCAtNCw2ICs0LDE4IEBACiBDSEFOR0UgTE9HIGZvciBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3MgSlBFRyBzb2Z0d2FyZQogCiAKK1ZlcnNpb24gOGQgIDE1LUphbi0yMDEyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBZGQgY2pwZWcgLXJnYiBvcHRpb24gdG8gY3JlYXRlIFJHQiBKUEVHIGZpbGVzLgorVXNpbmcgdGhpcyBzd2l0Y2ggc3VwcHJlc3NlcyB0aGUgY29udmVyc2lvbiBmcm9tIFJHQgorY29sb3JzcGFjZSBpbnB1dCB0byB0aGUgZGVmYXVsdCBZQ2JDciBKUEVHIGNvbG9yc3BhY2UuCitUaGFuayB0byBNaWNoYWVsIEtvY2ggZm9yIHRoZSBpbml0aWFsIHN1Z2dlc3Rpb24uCisKK0FkZCBvcHRpb24gdG8gZGlzYWJsZSB0aGUgcmVnaW9uIGFkanVzdG1lbnQgaW4gdGhlIHRyYW5zdXBwIGNyb3AgY29kZS4KK1RoYW5rIHRvIEplZmZyZXkgRnJpZWRsIGZvciB0aGUgc3VnZ2VzdGlvbi4KKworCiBWZXJzaW9uIDhiICAxNi1NYXktMjAxMAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMzQsNiArNDYsOSBAQAogVmVyc2lvbiA3ICAyNy1KdW4tMjAwOQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitOZXcgc2NhbGVkIERDVHMgaW1wbGVtZW50ZWQuCitkanBlZyBub3cgc3VwcG9ydHMgc2NhbGluZ3MgTi84IHdpdGggYWxsIE4gZnJvbSAxIHRvIDE2LgorCiBjanBlZyAtcXVhbGl0eSBvcHRpb24gaGFzIGJlZW4gZXh0ZW5kZWQgZm9yIHN1cHBvcnQgb2Ygc2VwYXJhdGUgcXVhbGl0eQogc2V0dGluZ3MgZm9yIGx1bWluYW5jZSBhbmQgY2hyb21pbmFuY2UgKG9yIGluIGdlbmVyYWwsIGZvciBldmVyeSBwcm92aWRlZAogcXVhbnRpemF0aW9uIHRhYmxlIHNsb3QpLgpkaWZmIC0tZ2l0IGEvY2pwZWcuMSBiL2NqcGVnLjEKaW5kZXggZjU5ZDI5MC4uNWY1MDkwYyAxMDA2NDQKLS0tIGEvY2pwZWcuMQorKysgYi9janBlZy4xCkBAIC0xLDQgKzEsNCBAQAotLlRIIENKUEVHIDEgIjEgSmFudWFyeSAyMDEzIgorLlRIIENKUEVHIDEgIjExIE1heSAyMDE0IgogLlNIIE5BTUUKIGNqcGVnIFwtIGNvbXByZXNzIGFuIGltYWdlIGZpbGUgdG8gYSBKUEVHIGZpbGUKIC5TSCBTWU5PUFNJUwpAQCAtMTYsNyArMTYsNyBAQAogY29tcHJlc3NlcyB0aGUgbmFtZWQgaW1hZ2UgZmlsZSwgb3IgdGhlIHN0YW5kYXJkIGlucHV0IGlmIG5vIGZpbGUgaXMKIG5hbWVkLCBhbmQgcHJvZHVjZXMgYSBKUEVHL0pGSUYgZmlsZSBvbiB0aGUgc3RhbmRhcmQgb3V0cHV0LgogVGhlIGN1cnJlbnRseSBzdXBwb3J0ZWQgaW5wdXQgZmlsZSBmb3JtYXRzIGFyZTogUFBNIChQQk1QTFVTIGNvbG9yCi1mb3JtYXQpLCBQR00gKFBCTVBMVVMgZ3JheS1zY2FsZSBmb3JtYXQpLCBCTVAsIFRhcmdhLCBhbmQgUkxFIChVdGFoIFJhc3RlcgorZm9ybWF0KSwgUEdNIChQQk1QTFVTIGdyYXlzY2FsZSBmb3JtYXQpLCBCTVAsIFRhcmdhLCBhbmQgUkxFIChVdGFoIFJhc3RlcgogVG9vbGtpdCBmb3JtYXQpLiAgKFJMRSBpcyBzdXBwb3J0ZWQgb25seSBpZiB0aGUgVVJUIGxpYnJhcnkgaXMgYXZhaWxhYmxlLikKIC5TSCBPUFRJT05TCiBBbGwgc3dpdGNoIG5hbWVzIG1heSBiZSBhYmJyZXZpYXRlZDsgZm9yIGV4YW1wbGUsCkBAIC00OSw2ICs0OSwxMSBAQAogLkJSIFwtZ3JheXNjYWxlICwKIHlvdSdsbCBnZXQgYSBzbWFsbGVyIEpQRUcgZmlsZSB0aGF0IHRha2VzIGxlc3MgdGltZSB0byBwcm9jZXNzLgogLlRQCisuQiBcLXJnYgorQ3JlYXRlIFJHQiBKUEVHIGZpbGUuCitVc2luZyB0aGlzIHN3aXRjaCBzdXBwcmVzc2VzIHRoZSBjb252ZXJzaW9uIGZyb20gUkdCCitjb2xvcnNwYWNlIGlucHV0IHRvIHRoZSBkZWZhdWx0IFlDYkNyIEpQRUcgY29sb3JzcGFjZS4KKy5UUAogLkIgXC1vcHRpbWl6ZQogUGVyZm9ybSBvcHRpbWl6YXRpb24gb2YgZW50cm9weSBlbmNvZGluZyBwYXJhbWV0ZXJzLiAgV2l0aG91dCB0aGlzLCBkZWZhdWx0CiBlbmNvZGluZyBwYXJhbWV0ZXJzIGFyZSB1c2VkLgpAQCAtMTYxLDE0ICsxNjYsMjcgQEAKIC5UUAogLkIgXC1kY3QgZmFzdAogVXNlIGZhc3QgaW50ZWdlciBEQ1QgKGxlc3MgYWNjdXJhdGUpLgorSW4gbGlianBlZy10dXJibywgdGhlIGZhc3QgbWV0aG9kIGlzIGdlbmVyYWxseSBhYm91dCA1LTE1JSBmYXN0ZXIgdGhhbiB0aGUgaW50CittZXRob2Qgd2hlbiB1c2luZyB0aGUgeDg2L3g4Ni02NCBTSU1EIGV4dGVuc2lvbnMgKHJlc3VsdHMgbWF5IHZhcnkgd2l0aCBvdGhlcgorU0lNRCBpbXBsZW1lbnRhdGlvbnMsIG9yIHdoZW4gdXNpbmcgbGlianBlZy10dXJibyB3aXRob3V0IFNJTUQgZXh0ZW5zaW9ucy4pCitGb3IgcXVhbGl0eSBsZXZlbHMgb2YgOTAgYW5kIGJlbG93LCB0aGVyZSBzaG91bGQgYmUgbGl0dGxlIG9yIG5vIHBlcmNlcHRpYmxlCitkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHR3byBhbGdvcml0aG1zLiAgRm9yIHF1YWxpdHkgbGV2ZWxzIGFib3ZlIDkwLCBob3dldmVyLAordGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgZmFzdCBhbmQgdGhlIGludCBtZXRob2RzIGJlY29tZXMgbW9yZSBwcm9ub3VuY2VkLgorV2l0aCBxdWFsaXR5PTk3LCBmb3IgaW5zdGFuY2UsIHRoZSBmYXN0IG1ldGhvZCBpbmN1cnMgZ2VuZXJhbGx5IGFib3V0IGEgMS0zIGRCCitsb3NzIChpbiBQU05SKSByZWxhdGl2ZSB0byB0aGUgaW50IG1ldGhvZCwgYnV0IHRoaXMgY2FuIGJlIGxhcmdlciBmb3Igc29tZQoraW1hZ2VzLiAgRG8gbm90IHVzZSB0aGUgZmFzdCBtZXRob2Qgd2l0aCBxdWFsaXR5IGxldmVscyBhYm92ZSA5Ny4gIFRoZQorYWxnb3JpdGhtIG9mdGVuIGRlZ2VuZXJhdGVzIGF0IHF1YWxpdHk9OTggYW5kIGFib3ZlIGFuZCBjYW4gYWN0dWFsbHkgcHJvZHVjZSBhCittb3JlIGxvc3N5IGltYWdlIHRoYW4gaWYgbG93ZXIgcXVhbGl0eSBsZXZlbHMgaGFkIGJlZW4gdXNlZC4gIEFsc28sIGluCitsaWJqcGVnLXR1cmJvLCB0aGUgZmFzdCBtZXRob2QgaXMgbm90IGZ1bGx5IGFjY2VsZXJhdGVkIGZvciBxdWFsaXR5IGxldmVscworYWJvdmUgOTcsIHNvIGl0IHdpbGwgYmUgc2xvd2VyIHRoYW4gdGhlIGludCBtZXRob2QuCiAuVFAKIC5CIFwtZGN0IGZsb2F0CiBVc2UgZmxvYXRpbmctcG9pbnQgRENUIG1ldGhvZC4KLVRoZSBmbG9hdCBtZXRob2QgaXMgdmVyeSBzbGlnaHRseSBtb3JlIGFjY3VyYXRlIHRoYW4gdGhlIGludCBtZXRob2QsIGJ1dCBpcwotbXVjaCBzbG93ZXIgdW5sZXNzIHlvdXIgbWFjaGluZSBoYXMgdmVyeSBmYXN0IGZsb2F0aW5nLXBvaW50IGhhcmR3YXJlLiAgQWxzbwotbm90ZSB0aGF0IHJlc3VsdHMgb2YgdGhlIGZsb2F0aW5nLXBvaW50IG1ldGhvZCBtYXkgdmFyeSBzbGlnaHRseSBhY3Jvc3MKLW1hY2hpbmVzLCB3aGlsZSB0aGUgaW50ZWdlciBtZXRob2RzIHNob3VsZCBnaXZlIHRoZSBzYW1lIHJlc3VsdHMgZXZlcnl3aGVyZS4KLVRoZSBmYXN0IGludGVnZXIgbWV0aG9kIGlzIG11Y2ggbGVzcyBhY2N1cmF0ZSB0aGFuIHRoZSBvdGhlciB0d28uCitUaGUgZmxvYXQgbWV0aG9kIGlzIG1haW5seSBhIGxlZ2FjeSBmZWF0dXJlLiAgSXQgZG9lcyBub3QgcHJvZHVjZSBzaWduaWZpY2FudGx5Cittb3JlIGFjY3VyYXRlIHJlc3VsdHMgdGhhbiB0aGUgaW50IG1ldGhvZCwgYW5kIGl0IGlzIG11Y2ggc2xvd2VyLiAgVGhlIGZsb2F0CittZXRob2QgbWF5IGFsc28gZ2l2ZSBkaWZmZXJlbnQgcmVzdWx0cyBvbiBkaWZmZXJlbnQgbWFjaGluZXMgZHVlIHRvIHZhcnlpbmcKK3JvdW5kb2ZmIGJlaGF2aW9yLCB3aGVyZWFzIHRoZSBpbnRlZ2VyIG1ldGhvZHMgc2hvdWxkIGdpdmUgdGhlIHNhbWUgcmVzdWx0cyBvbgorYWxsIG1hY2hpbmVzLgogLlRQCiAuQkkgXC1yZXN0YXJ0ICIgTiIKIEVtaXQgYSBKUEVHIHJlc3RhcnQgbWFya2VyIGV2ZXJ5IE4gTUNVIHJvd3MsIG9yIGV2ZXJ5IE4gTUNVIGJsb2NrcyBpZiAiQiIgaXMKQEAgLTE5MCw2ICsyMDgsMTEgQEAKIC5CSSBcLW91dGZpbGUgIiBuYW1lIgogU2VuZCBvdXRwdXQgaW1hZ2UgdG8gdGhlIG5hbWVkIGZpbGUsIG5vdCB0byBzdGFuZGFyZCBvdXRwdXQuCiAuVFAKKy5CSSBcLW1lbWRzdAorQ29tcHJlc3MgdG8gbWVtb3J5IGluc3RlYWQgb2YgYSBmaWxlLiAgVGhpcyBmZWF0dXJlIHdhcyBpbXBsZW1lbnRlZCBtYWlubHkgYXMgYQord2F5IG9mIHRlc3RpbmcgdGhlIGluLW1lbW9yeSBkZXN0aW5hdGlvbiBtYW5hZ2VyIChqcGVnX21lbV9kZXN0KCkpLCBidXQgaXQgaXMKK2Fsc28gdXNlZnVsIGZvciBiZW5jaG1hcmtpbmcsIHNpbmNlIGl0IHJlZHVjZXMgdGhlIEkvTyBvdmVyaGVhZC4KKy5UUAogLkIgXC12ZXJib3NlCiBFbmFibGUgZGVidWcgcHJpbnRvdXQuICBNb3JlCiAuQlIgXC12ICdzCkBAIC0zMTAsNyArMzMzLDggQEAKIEluZGVwZW5kZW50IEpQRUcgR3JvdXAKIC5QUAogVGhpcyBmaWxlIHdhcyBtb2RpZmllZCBieSBUaGUgbGlianBlZy10dXJibyBQcm9qZWN0IHRvIGluY2x1ZGUgb25seSBpbmZvcm1hdGlvbgotcmVsZXZhbnQgdG8gbGlianBlZy10dXJibyBhbmQgdG8gd29yZHNtaXRoIGNlcnRhaW4gc2VjdGlvbnMuCityZWxldmFudCB0byBsaWJqcGVnLXR1cmJvLCB0byB3b3Jkc21pdGggY2VydGFpbiBzZWN0aW9ucywgYW5kIHRvIGRlc2NyaWJlCitmZWF0dXJlcyBub3QgcHJlc2VudCBpbiBsaWJqcGVnLgogLlNIIEJVR1MKIFN1cHBvcnQgZm9yIEdJRiBpbnB1dCBmaWxlcyB3YXMgcmVtb3ZlZCBpbiBjanBlZyB2NmIgZHVlIHRvIGNvbmNlcm5zIG92ZXIKIHRoZSBVbmlzeXMgTFpXIHBhdGVudC4gIEFsdGhvdWdoIHRoaXMgcGF0ZW50IGV4cGlyZWQgaW4gMjAwNiwgY2pwZWcgc3RpbGwKZGlmZiAtLWdpdCBhL2NqcGVnLmMgYi9janBlZy5jCmluZGV4IDcwM2NlMTAuLjQ0MjljNDkgMTAwNjQ0Ci0tLSBhL2NqcGVnLmMKKysrIGIvY2pwZWcuYwpAQCAtMyw5ICszLDkgQEAKICAqCiAgKiBUaGlzIGZpbGUgd2FzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZToKICAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk4LCBUaG9tYXMgRy4gTGFuZS4KLSAqIE1vZGlmaWVkIDIwMDMtMjAwOCBieSBHdWlkbyBWb2xsYmVkaW5nLgotICogTW9kaWZpY2F0aW9uczoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgRC4gUi4gQ29tbWFuZGVyLgorICogTW9kaWZpZWQgMjAwMy0yMDExIGJ5IEd1aWRvIFZvbGxiZWRpbmcuCisgKiBsaWJqcGVnLXR1cmJvIE1vZGlmaWNhdGlvbnM6CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTMsIEQuIFIuIENvbW1hbmRlci4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KICAqCiAgKiBUaGlzIGZpbGUgY29udGFpbnMgYSBjb21tYW5kLWxpbmUgdXNlciBpbnRlcmZhY2UgZm9yIHRoZSBKUEVHIGNvbXByZXNzb3IuCkBAIC0xMyw4ICsxMyw4IEBACiAgKgogICogVHdvIGRpZmZlcmVudCBjb21tYW5kIGxpbmUgc3R5bGVzIGFyZSBwZXJtaXR0ZWQsIGRlcGVuZGluZyBvbiB0aGUKICAqIGNvbXBpbGUtdGltZSBzd2l0Y2ggVFdPX0ZJTEVfQ09NTUFORExJTkU6Ci0gKgljanBlZyBbb3B0aW9uc10gIGlucHV0ZmlsZSBvdXRwdXRmaWxlCi0gKgljanBlZyBbb3B0aW9uc10gIFtpbnB1dGZpbGVdCisgKiAgICAgIGNqcGVnIFtvcHRpb25zXSAgaW5wdXRmaWxlIG91dHB1dGZpbGUKKyAqICAgICAgY2pwZWcgW29wdGlvbnNdICBbaW5wdXRmaWxlXQogICogSW4gdGhlIHNlY29uZCBzdHlsZSwgb3V0cHV0IGlzIGFsd2F5cyB0byBzdGFuZGFyZCBvdXRwdXQsIHdoaWNoIHlvdSdkCiAgKiBub3JtYWxseSByZWRpcmVjdCB0byBhIGZpbGUgb3IgcGlwZSB0byBzb21lIG90aGVyIHByb2dyYW0uICBJbnB1dCBpcwogICogZWl0aGVyIGZyb20gYSBuYW1lZCBmaWxlIG9yIGZyb20gc3RhbmRhcmQgaW5wdXQgKHR5cGljYWxseSByZWRpcmVjdGVkKS4KQEAgLTIyLDI4ICsyMiwyOCBAQAogICogZG9uJ3Qgc3VwcG9ydCBwaXBlcy4gIEFsc28sIHlvdSBNVVNUIHVzZSB0aGUgZmlyc3Qgc3R5bGUgaWYgeW91ciBzeXN0ZW0KICAqIGRvZXNuJ3QgZG8gYmluYXJ5IEkvTyB0byBzdGRpbi9zdGRvdXQuCiAgKiBUbyBzaW1wbGlmeSBzY3JpcHQgd3JpdGluZywgdGhlICItb3V0ZmlsZSIgc3dpdGNoIGlzIHByb3ZpZGVkLiAgVGhlIHN5bnRheAotICoJY2pwZWcgW29wdGlvbnNdICAtb3V0ZmlsZSBvdXRwdXRmaWxlICBpbnB1dGZpbGUKKyAqICAgICAgY2pwZWcgW29wdGlvbnNdICAtb3V0ZmlsZSBvdXRwdXRmaWxlICBpbnB1dGZpbGUKICAqIHdvcmtzIHJlZ2FyZGxlc3Mgb2Ygd2hpY2ggY29tbWFuZCBsaW5lIHN0eWxlIGlzIHVzZWQuCiAgKi8KIAotI2luY2x1ZGUgImNkanBlZy5oIgkJLyogQ29tbW9uIGRlY2xzIGZvciBjanBlZy9kanBlZyBhcHBsaWNhdGlvbnMgKi8KLSNpbmNsdWRlICJqdmVyc2lvbi5oIgkJLyogZm9yIHZlcnNpb24gbWVzc2FnZSAqLwotI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImNkanBlZy5oIiAgICAgICAgICAgICAvKiBDb21tb24gZGVjbHMgZm9yIGNqcGVnL2RqcGVnIGFwcGxpY2F0aW9ucyAqLworI2luY2x1ZGUgImp2ZXJzaW9uLmgiICAgICAgICAgICAvKiBmb3IgdmVyc2lvbiBtZXNzYWdlICovCisjaW5jbHVkZSAiamNvbmZpZ2ludC5oIgogCi0jaWZkZWYgVVNFX0NDT01NQU5ECQkvKiBjb21tYW5kLWxpbmUgcmVhZGVyIGZvciBNYWNpbnRvc2ggKi8KKyNpZmRlZiBVU0VfQ0NPTU1BTkQgICAgICAgICAgICAgLyogY29tbWFuZC1saW5lIHJlYWRlciBmb3IgTWFjaW50b3NoICovCiAjaWZkZWYgX19NV0VSS1NfXwogI2luY2x1ZGUgPFNJT1VYLmg+ICAgICAgICAgICAgICAvKiBNZXRyb3dlcmtzIG5lZWRzIHRoaXMgKi8KLSNpbmNsdWRlIDxjb25zb2xlLmg+CQkvKiAuLi4gYW5kIHRoaXMgKi8KKyNpbmNsdWRlIDxjb25zb2xlLmg+ICAgICAgICAgICAgLyogLi4uIGFuZCB0aGlzICovCiAjZW5kaWYKICNpZmRlZiBUSElOS19DCi0jaW5jbHVkZSA8Y29uc29sZS5oPgkJLyogVGhpbmsgZGVjbGFyZXMgaXQgaGVyZSAqLworI2luY2x1ZGUgPGNvbnNvbGUuaD4gICAgICAgICAgICAvKiBUaGluayBkZWNsYXJlcyBpdCBoZXJlICovCiAjZW5kaWYKICNlbmRpZgogCiAKIC8qIENyZWF0ZSB0aGUgYWRkLW9uIG1lc3NhZ2Ugc3RyaW5nIHRhYmxlLiAqLwogCi0jZGVmaW5lIEpNRVNTQUdFKGNvZGUsc3RyaW5nKQlzdHJpbmcgLAorI2RlZmluZSBKTUVTU0FHRShjb2RlLHN0cmluZykgICBzdHJpbmcgLAogCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGNkanBlZ19tZXNzYWdlX3RhYmxlW10gPSB7CiAjaW5jbHVkZSAiY2RlcnJvci5oIgpAQCAtNzcsNyArNzcsNyBAQAogICogc2VsZG9tLXVzZWQgSUQgZmllbGQpLCBzbyB3ZSBwcm92aWRlIGEgc3dpdGNoIHRvIGZvcmNlIFRhcmdhIGlucHV0IG1vZGUuCiAgKi8KIAotc3RhdGljIGJvb2xlYW4gaXNfdGFyZ2E7CS8qIHJlY29yZHMgdXNlciAtdGFyZ2Egc3dpdGNoICovCitzdGF0aWMgYm9vbGVhbiBpc190YXJnYTsgICAgICAgIC8qIHJlY29yZHMgdXNlciAtdGFyZ2Egc3dpdGNoICovCiAKIAogTE9DQUwoY2pwZWdfc291cmNlX3B0cikKQEAgLTEyNCw3ICsxMjQsNyBAQAogICAgIGJyZWFrOwogICB9CiAKLSAgcmV0dXJuIE5VTEw7CQkJLyogc3VwcHJlc3MgY29tcGlsZXIgd2FybmluZ3MgKi8KKyAgcmV0dXJuIE5VTEw7ICAgICAgICAgICAgICAgICAgLyogc3VwcHJlc3MgY29tcGlsZXIgd2FybmluZ3MgKi8KIH0KIAogCkBAIC0xMzcsOCArMTM3LDkgQEAKICAqLwogCiAKLXN0YXRpYyBjb25zdCBjaGFyICogcHJvZ25hbWU7CS8qIHByb2dyYW0gbmFtZSBmb3IgZXJyb3IgbWVzc2FnZXMgKi8KLXN0YXRpYyBjaGFyICogb3V0ZmlsZW5hbWU7CS8qIGZvciAtb3V0ZmlsZSBzd2l0Y2ggKi8KK3N0YXRpYyBjb25zdCBjaGFyICogcHJvZ25hbWU7ICAgLyogcHJvZ3JhbSBuYW1lIGZvciBlcnJvciBtZXNzYWdlcyAqLworc3RhdGljIGNoYXIgKiBvdXRmaWxlbmFtZTsgICAgICAvKiBmb3IgLW91dGZpbGUgc3dpdGNoICovCitib29sZWFuIG1lbWRzdDsgIC8qIGZvciAtbWVtZHN0IHN3aXRjaCAqLwogCiAKIExPQ0FMKHZvaWQpCkBAIC0xNTUsNiArMTU2LDcgQEAKICAgZnByaW50ZihzdGRlcnIsICJTd2l0Y2hlcyAobmFtZXMgbWF5IGJlIGFiYnJldmlhdGVkKTpcbiIpOwogICBmcHJpbnRmKHN0ZGVyciwgIiAgLXF1YWxpdHkgTlssLi4uXSAgIENvbXByZXNzaW9uIHF1YWxpdHkgKDAuLjEwMDsgNS05NSBpcyB1c2VmdWwgcmFuZ2UpXG4iKTsKICAgZnByaW50ZihzdGRlcnIsICIgIC1ncmF5c2NhbGUgICAgIENyZWF0ZSBtb25vY2hyb21lIEpQRUcgZmlsZVxuIik7CisgIGZwcmludGYoc3RkZXJyLCAiICAtcmdiICAgICAgICAgICBDcmVhdGUgUkdCIEpQRUcgZmlsZVxuIik7CiAjaWZkZWYgRU5UUk9QWV9PUFRfU1VQUE9SVEVECiAgIGZwcmludGYoc3RkZXJyLCAiICAtb3B0aW1pemUgICAgICBPcHRpbWl6ZSBIdWZmbWFuIHRhYmxlIChzbWFsbGVyIGZpbGUsIGJ1dCBzbG93IGNvbXByZXNzaW9uKVxuIik7CiAjZW5kaWYKQEAgLTE3MCwxNSArMTcyLDE1IEBACiAjZW5kaWYKICNpZmRlZiBEQ1RfSVNMT1dfU1VQUE9SVEVECiAgIGZwcmludGYoc3RkZXJyLCAiICAtZGN0IGludCAgICAgICBVc2UgaW50ZWdlciBEQ1QgbWV0aG9kJXNcbiIsCi0JICAoSkRDVF9ERUZBVUxUID09IEpEQ1RfSVNMT1cgPyAiIChkZWZhdWx0KSIgOiAiIikpOworICAgICAgICAgIChKRENUX0RFRkFVTFQgPT0gSkRDVF9JU0xPVyA/ICIgKGRlZmF1bHQpIiA6ICIiKSk7CiAjZW5kaWYKICNpZmRlZiBEQ1RfSUZBU1RfU1VQUE9SVEVECiAgIGZwcmludGYoc3RkZXJyLCAiICAtZGN0IGZhc3QgICAgICBVc2UgZmFzdCBpbnRlZ2VyIERDVCAobGVzcyBhY2N1cmF0ZSklc1xuIiwKLQkgIChKRENUX0RFRkFVTFQgPT0gSkRDVF9JRkFTVCA/ICIgKGRlZmF1bHQpIiA6ICIiKSk7CisgICAgICAgICAgKEpEQ1RfREVGQVVMVCA9PSBKRENUX0lGQVNUID8gIiAoZGVmYXVsdCkiIDogIiIpKTsKICNlbmRpZgogI2lmZGVmIERDVF9GTE9BVF9TVVBQT1JURUQKICAgZnByaW50ZihzdGRlcnIsICIgIC1kY3QgZmxvYXQgICAgIFVzZSBmbG9hdGluZy1wb2ludCBEQ1QgbWV0aG9kJXNcbiIsCi0JICAoSkRDVF9ERUZBVUxUID09IEpEQ1RfRkxPQVQgPyAiIChkZWZhdWx0KSIgOiAiIikpOworICAgICAgICAgIChKRENUX0RFRkFVTFQgPT0gSkRDVF9GTE9BVCA/ICIgKGRlZmF1bHQpIiA6ICIiKSk7CiAjZW5kaWYKICAgZnByaW50ZihzdGRlcnIsICIgIC1yZXN0YXJ0IE4gICAgIFNldCByZXN0YXJ0IGludGVydmFsIGluIHJvd3MsIG9yIGluIGJsb2NrcyB3aXRoIEJcbiIpOwogI2lmZGVmIElOUFVUX1NNT09USElOR19TVVBQT1JURUQKQEAgLTE4Niw2ICsxODgsOSBAQAogI2VuZGlmCiAgIGZwcmludGYoc3RkZXJyLCAiICAtbWF4bWVtb3J5IE4gICBNYXhpbXVtIG1lbW9yeSB0byB1c2UgKGluIGtieXRlcylcbiIpOwogICBmcHJpbnRmKHN0ZGVyciwgIiAgLW91dGZpbGUgbmFtZSAgU3BlY2lmeSBuYW1lIGZvciBvdXRwdXQgZmlsZVxuIik7CisjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA4MCB8fCBkZWZpbmVkKE1FTV9TUkNEU1RfU1VQUE9SVEVEKQorICBmcHJpbnRmKHN0ZGVyciwgIiAgLW1lbWRzdCAgICAgICAgQ29tcHJlc3MgdG8gbWVtb3J5IGluc3RlYWQgb2YgZmlsZSAodXNlZnVsIGZvciBiZW5jaG1hcmtpbmcpXG4iKTsKKyNlbmRpZgogICBmcHJpbnRmKHN0ZGVyciwgIiAgLXZlcmJvc2UgIG9yICAtZGVidWcgICBFbWl0IGRlYnVnIG91dHB1dFxuIik7CiAgIGZwcmludGYoc3RkZXJyLCAiU3dpdGNoZXMgZm9yIHdpemFyZHM6XG4iKTsKICAgZnByaW50ZihzdGRlcnIsICIgIC1iYXNlbGluZSAgICAgIEZvcmNlIGJhc2VsaW5lIHF1YW50aXphdGlvbiB0YWJsZXNcbiIpOwpAQCAtMjAxLDcgKzIwNiw3IEBACiAKIExPQ0FMKGludCkKIHBhcnNlX3N3aXRjaGVzIChqX2NvbXByZXNzX3B0ciBjaW5mbywgaW50IGFyZ2MsIGNoYXIgKiphcmd2LAotCQlpbnQgbGFzdF9maWxlX2FyZ19zZWVuLCBib29sZWFuIGZvcl9yZWFsKQorICAgICAgICAgICAgICAgIGludCBsYXN0X2ZpbGVfYXJnX3NlZW4sIGJvb2xlYW4gZm9yX3JlYWwpCiAvKiBQYXJzZSBvcHRpb25hbCBzd2l0Y2hlcy4KICAqIFJldHVybnMgYXJndltdIGluZGV4IG9mIGZpcnN0IGZpbGUtbmFtZSBhcmd1bWVudCAoPT0gYXJnYyBpZiBub25lKS4KICAqIEFueSBmaWxlIG5hbWVzIHdpdGggaW5kZXhlcyA8PSBsYXN0X2ZpbGVfYXJnX3NlZW4gYXJlIGlnbm9yZWQ7CkBAIC0yMTUsMTggKzIyMCwxOSBAQAogICBjaGFyICogYXJnOwogICBib29sZWFuIGZvcmNlX2Jhc2VsaW5lOwogICBib29sZWFuIHNpbXBsZV9wcm9ncmVzc2l2ZTsKLSAgY2hhciAqIHF1YWxpdHlhcmcgPSBOVUxMOwkvKiBzYXZlcyAtcXVhbGl0eSBwYXJtIGlmIGFueSAqLwotICBjaGFyICogcXRhYmxlZmlsZSA9IE5VTEw7CS8qIHNhdmVzIC1xdGFibGVzIGZpbGVuYW1lIGlmIGFueSAqLwotICBjaGFyICogcXNsb3RzYXJnID0gTlVMTDsJLyogc2F2ZXMgLXFzbG90cyBwYXJtIGlmIGFueSAqLwotICBjaGFyICogc2FtcGxlYXJnID0gTlVMTDsJLyogc2F2ZXMgLXNhbXBsZSBwYXJtIGlmIGFueSAqLwotICBjaGFyICogc2NhbnNhcmcgPSBOVUxMOwkvKiBzYXZlcyAtc2NhbnMgcGFybSBpZiBhbnkgKi8KKyAgY2hhciAqIHF1YWxpdHlhcmcgPSBOVUxMOyAgICAgLyogc2F2ZXMgLXF1YWxpdHkgcGFybSBpZiBhbnkgKi8KKyAgY2hhciAqIHF0YWJsZWZpbGUgPSBOVUxMOyAgICAgLyogc2F2ZXMgLXF0YWJsZXMgZmlsZW5hbWUgaWYgYW55ICovCisgIGNoYXIgKiBxc2xvdHNhcmcgPSBOVUxMOyAgICAgIC8qIHNhdmVzIC1xc2xvdHMgcGFybSBpZiBhbnkgKi8KKyAgY2hhciAqIHNhbXBsZWFyZyA9IE5VTEw7ICAgICAgLyogc2F2ZXMgLXNhbXBsZSBwYXJtIGlmIGFueSAqLworICBjaGFyICogc2NhbnNhcmcgPSBOVUxMOyAgICAgICAvKiBzYXZlcyAtc2NhbnMgcGFybSBpZiBhbnkgKi8KIAogICAvKiBTZXQgdXAgZGVmYXVsdCBKUEVHIHBhcmFtZXRlcnMuICovCiAKLSAgZm9yY2VfYmFzZWxpbmUgPSBGQUxTRTsJLyogYnkgZGVmYXVsdCwgYWxsb3cgMTYtYml0IHF1YW50aXplcnMgKi8KKyAgZm9yY2VfYmFzZWxpbmUgPSBGQUxTRTsgICAgICAgLyogYnkgZGVmYXVsdCwgYWxsb3cgMTYtYml0IHF1YW50aXplcnMgKi8KICAgc2ltcGxlX3Byb2dyZXNzaXZlID0gRkFMU0U7CiAgIGlzX3RhcmdhID0gRkFMU0U7CiAgIG91dGZpbGVuYW1lID0gTlVMTDsKKyAgbWVtZHN0ID0gRkFMU0U7CiAgIGNpbmZvLT5lcnItPnRyYWNlX2xldmVsID0gMDsKIAogICAvKiBTY2FuIGNvbW1hbmQgbGluZSBvcHRpb25zLCBhZGp1c3QgcGFyYW1ldGVycyAqLwpAQCAtMjM2LDEyICsyNDIsMTIgQEAKICAgICBpZiAoKmFyZyAhPSAnLScpIHsKICAgICAgIC8qIE5vdCBhIHN3aXRjaCwgbXVzdCBiZSBhIGZpbGUgbmFtZSBhcmd1bWVudCAqLwogICAgICAgaWYgKGFyZ24gPD0gbGFzdF9maWxlX2FyZ19zZWVuKSB7Ci0Jb3V0ZmlsZW5hbWUgPSBOVUxMOwkvKiAtb3V0ZmlsZSBhcHBsaWVzIHRvIGp1c3Qgb25lIGlucHV0IGZpbGUgKi8KLQljb250aW51ZTsJCS8qIGlnbm9yZSB0aGlzIG5hbWUgaWYgcHJldmlvdXNseSBwcm9jZXNzZWQgKi8KKyAgICAgICAgb3V0ZmlsZW5hbWUgPSBOVUxMOyAgICAgLyogLW91dGZpbGUgYXBwbGllcyB0byBqdXN0IG9uZSBpbnB1dCBmaWxlICovCisgICAgICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAgIC8qIGlnbm9yZSB0aGlzIG5hbWUgaWYgcHJldmlvdXNseSBwcm9jZXNzZWQgKi8KICAgICAgIH0KLSAgICAgIGJyZWFrOwkJCS8qIGVsc2UgZG9uZSBwYXJzaW5nIHN3aXRjaGVzICovCisgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgIC8qIGVsc2UgZG9uZSBwYXJzaW5nIHN3aXRjaGVzICovCiAgICAgfQotICAgIGFyZysrOwkJCS8qIGFkdmFuY2UgcGFzdCBzd2l0Y2ggbWFya2VyIGNoYXJhY3RlciAqLworICAgIGFyZysrOyAgICAgICAgICAgICAgICAgICAgICAvKiBhZHZhbmNlIHBhc3Qgc3dpdGNoIG1hcmtlciBjaGFyYWN0ZXIgKi8KIAogICAgIGlmIChrZXltYXRjaChhcmcsICJhcml0aG1ldGljIiwgMSkpIHsKICAgICAgIC8qIFVzZSBhcml0aG1ldGljIGNvZGluZy4gKi8KQEAgLTI0OSw3ICsyNTUsNyBAQAogICAgICAgY2luZm8tPmFyaXRoX2NvZGUgPSBUUlVFOwogI2Vsc2UKICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IHNvcnJ5LCBhcml0aG1ldGljIGNvZGluZyBub3Qgc3VwcG9ydGVkXG4iLAotCSAgICAgIHByb2duYW1lKTsKKyAgICAgICAgICAgICAgcHJvZ25hbWUpOwogICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwogI2VuZGlmCiAKQEAgLTI1OSwxNiArMjY1LDE2IEBACiAKICAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZywgImRjdCIsIDIpKSB7CiAgICAgICAvKiBTZWxlY3QgRENUIGFsZ29yaXRobS4gKi8KLSAgICAgIGlmICgrK2FyZ24gPj0gYXJnYykJLyogYWR2YW5jZSB0byBuZXh0IGFyZ3VtZW50ICovCi0JdXNhZ2UoKTsKKyAgICAgIGlmICgrK2FyZ24gPj0gYXJnYykgICAgICAgLyogYWR2YW5jZSB0byBuZXh0IGFyZ3VtZW50ICovCisgICAgICAgIHVzYWdlKCk7CiAgICAgICBpZiAoa2V5bWF0Y2goYXJndlthcmduXSwgImludCIsIDEpKSB7Ci0JY2luZm8tPmRjdF9tZXRob2QgPSBKRENUX0lTTE9XOworICAgICAgICBjaW5mby0+ZGN0X21ldGhvZCA9IEpEQ1RfSVNMT1c7CiAgICAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZ3ZbYXJnbl0sICJmYXN0IiwgMikpIHsKLQljaW5mby0+ZGN0X21ldGhvZCA9IEpEQ1RfSUZBU1Q7CisgICAgICAgIGNpbmZvLT5kY3RfbWV0aG9kID0gSkRDVF9JRkFTVDsKICAgICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJndlthcmduXSwgImZsb2F0IiwgMikpIHsKLQljaW5mby0+ZGN0X21ldGhvZCA9IEpEQ1RfRkxPQVQ7CisgICAgICAgIGNpbmZvLT5kY3RfbWV0aG9kID0gSkRDVF9GTE9BVDsKICAgICAgIH0gZWxzZQotCXVzYWdlKCk7CisgICAgICAgIHVzYWdlKCk7CiAKICAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZywgImRlYnVnIiwgMSkgfHwga2V5bWF0Y2goYXJnLCAidmVyYm9zZSIsIDEpKSB7CiAgICAgICAvKiBFbmFibGUgZGVidWcgcHJpbnRvdXRzLiAqLwpAQCAtMjc2LDEyICsyODIsMTIgQEAKICAgICAgIHN0YXRpYyBib29sZWFuIHByaW50ZWRfdmVyc2lvbiA9IEZBTFNFOwogCiAgICAgICBpZiAoISBwcmludGVkX3ZlcnNpb24pIHsKLQlmcHJpbnRmKHN0ZGVyciwgIiVzIHZlcnNpb24gJXMgKGJ1aWxkICVzKVxuIiwKLQkJUEFDS0FHRV9OQU1FLCBWRVJTSU9OLCBCVUlMRCk7Ci0JZnByaW50ZihzdGRlcnIsICIlc1xuXG4iLCBKQ09QWVJJR0hUKTsKLQlmcHJpbnRmKHN0ZGVyciwgIkVtdWxhdGluZyBUaGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIGxpYmpwZWcsIHZlcnNpb24gJXNcblxuIiwKLQkJSlZFUlNJT04pOwotCXByaW50ZWRfdmVyc2lvbiA9IFRSVUU7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMgdmVyc2lvbiAlcyAoYnVpbGQgJXMpXG4iLAorICAgICAgICAgICAgICAgIFBBQ0tBR0VfTkFNRSwgVkVSU0lPTiwgQlVJTEQpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG5cbiIsIEpDT1BZUklHSFQpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVtdWxhdGluZyBUaGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLCB2ZXJzaW9uICVzXG5cbiIsCisgICAgICAgICAgICAgICAgSlZFUlNJT04pOworICAgICAgICBwcmludGVkX3ZlcnNpb24gPSBUUlVFOwogICAgICAgfQogICAgICAgY2luZm8tPmVyci0+dHJhY2VfbGV2ZWwrKzsKIApAQCAtMjg5LDE3ICsyOTUsMjEgQEAKICAgICAgIC8qIEZvcmNlIGEgbW9ub2Nocm9tZSBKUEVHIGZpbGUgdG8gYmUgZ2VuZXJhdGVkLiAqLwogICAgICAganBlZ19zZXRfY29sb3JzcGFjZShjaW5mbywgSkNTX0dSQVlTQ0FMRSk7CiAKKyAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZywgInJnYiIsIDMpKSB7CisgICAgICAvKiBGb3JjZSBhbiBSR0IgSlBFRyBmaWxlIHRvIGJlIGdlbmVyYXRlZC4gKi8KKyAgICAgIGpwZWdfc2V0X2NvbG9yc3BhY2UoY2luZm8sIEpDU19SR0IpOworCiAgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJtYXhtZW1vcnkiLCAzKSkgewogICAgICAgLyogTWF4aW11bSBtZW1vcnkgaW4gS2IgKG9yIE1iIHdpdGggJ20nKS4gKi8KICAgICAgIGxvbmcgbHZhbDsKICAgICAgIGNoYXIgY2ggPSAneCc7CiAKLSAgICAgIGlmICgrK2FyZ24gPj0gYXJnYykJLyogYWR2YW5jZSB0byBuZXh0IGFyZ3VtZW50ICovCi0JdXNhZ2UoKTsKKyAgICAgIGlmICgrK2FyZ24gPj0gYXJnYykgICAgICAgLyogYWR2YW5jZSB0byBuZXh0IGFyZ3VtZW50ICovCisgICAgICAgIHVzYWdlKCk7CiAgICAgICBpZiAoc3NjYW5mKGFyZ3ZbYXJnbl0sICIlbGQlYyIsICZsdmFsLCAmY2gpIDwgMSkKLQl1c2FnZSgpOworICAgICAgICB1c2FnZSgpOwogICAgICAgaWYgKGNoID09ICdtJyB8fCBjaCA9PSAnTScpCi0JbHZhbCAqPSAxMDAwTDsKKyAgICAgICAgbHZhbCAqPSAxMDAwTDsKICAgICAgIGNpbmZvLT5tZW0tPm1heF9tZW1vcnlfdG9fdXNlID0gbHZhbCAqIDEwMDBMOwogCiAgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJvcHRpbWl6ZSIsIDEpIHx8IGtleW1hdGNoKGFyZywgIm9wdGltaXNlIiwgMSkpIHsKQEAgLTMwNywxNiArMzE3LDE2IEBACiAjaWZkZWYgRU5UUk9QWV9PUFRfU1VQUE9SVEVECiAgICAgICBjaW5mby0+b3B0aW1pemVfY29kaW5nID0gVFJVRTsKICNlbHNlCi0gICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBzb3JyeSwgZW50cm9weSBvcHRpbWl6YXRpb24gd2FzIG5vdCBjb21waWxlZFxuIiwKLQkgICAgICBwcm9nbmFtZSk7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBzb3JyeSwgZW50cm9weSBvcHRpbWl6YXRpb24gd2FzIG5vdCBjb21waWxlZCBpblxuIiwKKyAgICAgICAgICAgICAgcHJvZ25hbWUpOwogICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwogI2VuZGlmCiAKICAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZywgIm91dGZpbGUiLCA0KSkgewogICAgICAgLyogU2V0IG91dHB1dCBmaWxlIG5hbWUuICovCi0gICAgICBpZiAoKythcmduID49IGFyZ2MpCS8qIGFkdmFuY2UgdG8gbmV4dCBhcmd1bWVudCAqLwotCXVzYWdlKCk7Ci0gICAgICBvdXRmaWxlbmFtZSA9IGFyZ3ZbYXJnbl07CS8qIHNhdmUgaXQgYXdheSBmb3IgbGF0ZXIgdXNlICovCisgICAgICBpZiAoKythcmduID49IGFyZ2MpICAgICAgIC8qIGFkdmFuY2UgdG8gbmV4dCBhcmd1bWVudCAqLworICAgICAgICB1c2FnZSgpOworICAgICAgb3V0ZmlsZW5hbWUgPSBhcmd2W2FyZ25dOyAvKiBzYXZlIGl0IGF3YXkgZm9yIGxhdGVyIHVzZSAqLwogCiAgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJwcm9ncmVzc2l2ZSIsIDEpKSB7CiAgICAgICAvKiBTZWxlY3Qgc2ltcGxlIHByb2dyZXNzaXZlIG1vZGUuICovCkBAIC0zMjQsMjEgKzMzNCwzMSBAQAogICAgICAgc2ltcGxlX3Byb2dyZXNzaXZlID0gVFJVRTsKICAgICAgIC8qIFdlIG11c3QgcG9zdHBvbmUgZXhlY3V0aW9uIHVudGlsIG51bV9jb21wb25lbnRzIGlzIGtub3duLiAqLwogI2Vsc2UKLSAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IHNvcnJ5LCBwcm9ncmVzc2l2ZSBvdXRwdXQgd2FzIG5vdCBjb21waWxlZFxuIiwKLQkgICAgICBwcm9nbmFtZSk7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBzb3JyeSwgcHJvZ3Jlc3NpdmUgb3V0cHV0IHdhcyBub3QgY29tcGlsZWQgaW5cbiIsCisgICAgICAgICAgICAgIHByb2duYW1lKTsKKyAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyNlbmRpZgorCisgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJtZW1kc3QiLCAyKSkgeworICAgICAgLyogVXNlIGluLW1lbW9yeSBkZXN0aW5hdGlvbiBtYW5hZ2VyICovCisjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA4MCB8fCBkZWZpbmVkKE1FTV9TUkNEU1RfU1VQUE9SVEVEKQorICAgICAgbWVtZHN0ID0gVFJVRTsKKyNlbHNlCisgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBzb3JyeSwgaW4tbWVtb3J5IGRlc3RpbmF0aW9uIG1hbmFnZXIgd2FzIG5vdCBjb21waWxlZCBpblxuIiwKKyAgICAgICAgICAgICAgcHJvZ25hbWUpOwogICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwogI2VuZGlmCiAKICAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZywgInF1YWxpdHkiLCAxKSkgewogICAgICAgLyogUXVhbGl0eSByYXRpbmdzIChxdWFudGl6YXRpb24gdGFibGUgc2NhbGluZyBmYWN0b3JzKS4gKi8KLSAgICAgIGlmICgrK2FyZ24gPj0gYXJnYykJLyogYWR2YW5jZSB0byBuZXh0IGFyZ3VtZW50ICovCi0JdXNhZ2UoKTsKKyAgICAgIGlmICgrK2FyZ24gPj0gYXJnYykgICAgICAgLyogYWR2YW5jZSB0byBuZXh0IGFyZ3VtZW50ICovCisgICAgICAgIHVzYWdlKCk7CiAgICAgICBxdWFsaXR5YXJnID0gYXJndlthcmduXTsKIAogICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAicXNsb3RzIiwgMikpIHsKICAgICAgIC8qIFF1YW50aXphdGlvbiB0YWJsZSBzbG90IG51bWJlcnMuICovCi0gICAgICBpZiAoKythcmduID49IGFyZ2MpCS8qIGFkdmFuY2UgdG8gbmV4dCBhcmd1bWVudCAqLwotCXVzYWdlKCk7CisgICAgICBpZiAoKythcmduID49IGFyZ2MpICAgICAgIC8qIGFkdmFuY2UgdG8gbmV4dCBhcmd1bWVudCAqLworICAgICAgICB1c2FnZSgpOwogICAgICAgcXNsb3RzYXJnID0gYXJndlthcmduXTsKICAgICAgIC8qIE11c3QgZGVsYXkgc2V0dGluZyBxc2xvdHMgdW50aWwgYWZ0ZXIgd2UgaGF2ZSBwcm9jZXNzZWQgYW55CiAgICAgICAgKiBjb2xvcnNwYWNlLWRldGVybWluaW5nIHN3aXRjaGVzLCBzaW5jZSBqcGVnX3NldF9jb2xvcnNwYWNlIHNldHMKQEAgLTM0Nyw4ICszNjcsOCBAQAogCiAgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJxdGFibGVzIiwgMikpIHsKICAgICAgIC8qIFF1YW50aXphdGlvbiB0YWJsZXMgZmV0Y2hlZCBmcm9tIGZpbGUuICovCi0gICAgICBpZiAoKythcmduID49IGFyZ2MpCS8qIGFkdmFuY2UgdG8gbmV4dCBhcmd1bWVudCAqLwotCXVzYWdlKCk7CisgICAgICBpZiAoKythcmduID49IGFyZ2MpICAgICAgIC8qIGFkdmFuY2UgdG8gbmV4dCBhcmd1bWVudCAqLworICAgICAgICB1c2FnZSgpOwogICAgICAgcXRhYmxlZmlsZSA9IGFyZ3ZbYXJnbl07CiAgICAgICAvKiBXZSBwb3N0cG9uZSBhY3R1YWxseSByZWFkaW5nIHRoZSBmaWxlIGluIGNhc2UgLXF1YWxpdHkgY29tZXMgbGF0ZXIuICovCiAKQEAgLTM1NywyNCArMzc3LDI0IEBACiAgICAgICBsb25nIGx2YWw7CiAgICAgICBjaGFyIGNoID0gJ3gnOwogCi0gICAgICBpZiAoKythcmduID49IGFyZ2MpCS8qIGFkdmFuY2UgdG8gbmV4dCBhcmd1bWVudCAqLwotCXVzYWdlKCk7CisgICAgICBpZiAoKythcmduID49IGFyZ2MpICAgICAgIC8qIGFkdmFuY2UgdG8gbmV4dCBhcmd1bWVudCAqLworICAgICAgICB1c2FnZSgpOwogICAgICAgaWYgKHNzY2FuZihhcmd2W2FyZ25dLCAiJWxkJWMiLCAmbHZhbCwgJmNoKSA8IDEpCi0JdXNhZ2UoKTsKKyAgICAgICAgdXNhZ2UoKTsKICAgICAgIGlmIChsdmFsIDwgMCB8fCBsdmFsID4gNjU1MzVMKQotCXVzYWdlKCk7CisgICAgICAgIHVzYWdlKCk7CiAgICAgICBpZiAoY2ggPT0gJ2InIHx8IGNoID09ICdCJykgewotCWNpbmZvLT5yZXN0YXJ0X2ludGVydmFsID0gKHVuc2lnbmVkIGludCkgbHZhbDsKLQljaW5mby0+cmVzdGFydF9pbl9yb3dzID0gMDsgLyogZWxzZSBwcmlvciAnLXJlc3RhcnQgbicgb3ZlcnJpZGVzIG1lICovCisgICAgICAgIGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsID0gKHVuc2lnbmVkIGludCkgbHZhbDsKKyAgICAgICAgY2luZm8tPnJlc3RhcnRfaW5fcm93cyA9IDA7IC8qIGVsc2UgcHJpb3IgJy1yZXN0YXJ0IG4nIG92ZXJyaWRlcyBtZSAqLwogICAgICAgfSBlbHNlIHsKLQljaW5mby0+cmVzdGFydF9pbl9yb3dzID0gKGludCkgbHZhbDsKLQkvKiByZXN0YXJ0X2ludGVydmFsIHdpbGwgYmUgY29tcHV0ZWQgZHVyaW5nIHN0YXJ0dXAgKi8KKyAgICAgICAgY2luZm8tPnJlc3RhcnRfaW5fcm93cyA9IChpbnQpIGx2YWw7CisgICAgICAgIC8qIHJlc3RhcnRfaW50ZXJ2YWwgd2lsbCBiZSBjb21wdXRlZCBkdXJpbmcgc3RhcnR1cCAqLwogICAgICAgfQogCiAgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJzYW1wbGUiLCAyKSkgewogICAgICAgLyogU2V0IHNhbXBsaW5nIGZhY3RvcnMuICovCi0gICAgICBpZiAoKythcmduID49IGFyZ2MpCS8qIGFkdmFuY2UgdG8gbmV4dCBhcmd1bWVudCAqLwotCXVzYWdlKCk7CisgICAgICBpZiAoKythcmduID49IGFyZ2MpICAgICAgIC8qIGFkdmFuY2UgdG8gbmV4dCBhcmd1bWVudCAqLworICAgICAgICB1c2FnZSgpOwogICAgICAgc2FtcGxlYXJnID0gYXJndlthcmduXTsKICAgICAgIC8qIE11c3QgZGVsYXkgc2V0dGluZyBzYW1wbGUgZmFjdG9ycyB1bnRpbCBhZnRlciB3ZSBoYXZlIHByb2Nlc3NlZCBhbnkKICAgICAgICAqIGNvbG9yc3BhY2UtZGV0ZXJtaW5pbmcgc3dpdGNoZXMsIHNpbmNlIGpwZWdfc2V0X2NvbG9yc3BhY2Ugc2V0cwpAQCAtMzg0LDEzICs0MDQsMTMgQEAKICAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZywgInNjYW5zIiwgNCkpIHsKICAgICAgIC8qIFNldCBzY2FuIHNjcmlwdC4gKi8KICNpZmRlZiBDX01VTFRJU0NBTl9GSUxFU19TVVBQT1JURUQKLSAgICAgIGlmICgrK2FyZ24gPj0gYXJnYykJLyogYWR2YW5jZSB0byBuZXh0IGFyZ3VtZW50ICovCi0JdXNhZ2UoKTsKKyAgICAgIGlmICgrK2FyZ24gPj0gYXJnYykgICAgICAgLyogYWR2YW5jZSB0byBuZXh0IGFyZ3VtZW50ICovCisgICAgICAgIHVzYWdlKCk7CiAgICAgICBzY2Fuc2FyZyA9IGFyZ3ZbYXJnbl07CiAgICAgICAvKiBXZSBtdXN0IHBvc3Rwb25lIHJlYWRpbmcgdGhlIGZpbGUgaW4gY2FzZSAtcHJvZ3Jlc3NpdmUgYXBwZWFycy4gKi8KICNlbHNlCi0gICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBzb3JyeSwgbXVsdGktc2NhbiBvdXRwdXQgd2FzIG5vdCBjb21waWxlZFxuIiwKLQkgICAgICBwcm9nbmFtZSk7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBzb3JyeSwgbXVsdGktc2NhbiBvdXRwdXQgd2FzIG5vdCBjb21waWxlZCBpblxuIiwKKyAgICAgICAgICAgICAgcHJvZ25hbWUpOwogICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwogI2VuZGlmCiAKQEAgLTM5OCwxMiArNDE4LDEyIEBACiAgICAgICAvKiBTZXQgaW5wdXQgc21vb3RoaW5nIGZhY3Rvci4gKi8KICAgICAgIGludCB2YWw7CiAKLSAgICAgIGlmICgrK2FyZ24gPj0gYXJnYykJLyogYWR2YW5jZSB0byBuZXh0IGFyZ3VtZW50ICovCi0JdXNhZ2UoKTsKKyAgICAgIGlmICgrK2FyZ24gPj0gYXJnYykgICAgICAgLyogYWR2YW5jZSB0byBuZXh0IGFyZ3VtZW50ICovCisgICAgICAgIHVzYWdlKCk7CiAgICAgICBpZiAoc3NjYW5mKGFyZ3ZbYXJnbl0sICIlZCIsICZ2YWwpICE9IDEpCi0JdXNhZ2UoKTsKKyAgICAgICAgdXNhZ2UoKTsKICAgICAgIGlmICh2YWwgPCAwIHx8IHZhbCA+IDEwMCkKLQl1c2FnZSgpOworICAgICAgICB1c2FnZSgpOwogICAgICAgY2luZm8tPnNtb290aGluZ19mYWN0b3IgPSB2YWw7CiAKICAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZywgInRhcmdhIiwgMSkpIHsKQEAgLTQxMSw3ICs0MzEsNyBAQAogICAgICAgaXNfdGFyZ2EgPSBUUlVFOwogCiAgICAgfSBlbHNlIHsKLSAgICAgIHVzYWdlKCk7CQkJLyogYm9ndXMgc3dpdGNoICovCisgICAgICB1c2FnZSgpOyAgICAgICAgICAgICAgICAgIC8qIGJvZ3VzIHN3aXRjaCAqLwogICAgIH0KICAgfQogCkBAIC00MjEsMzUgKzQ0MSwzNSBAQAogCiAgICAgLyogU2V0IHF1YW50aXphdGlvbiB0YWJsZXMgZm9yIHNlbGVjdGVkIHF1YWxpdHkuICovCiAgICAgLyogU29tZSBvciBhbGwgbWF5IGJlIG92ZXJyaWRkZW4gaWYgLXF0YWJsZXMgaXMgcHJlc2VudC4gKi8KLSAgICBpZiAocXVhbGl0eWFyZyAhPSBOVUxMKQkvKiBwcm9jZXNzIC1xdWFsaXR5IGlmIGl0IHdhcyBwcmVzZW50ICovCisgICAgaWYgKHF1YWxpdHlhcmcgIT0gTlVMTCkgICAgIC8qIHByb2Nlc3MgLXF1YWxpdHkgaWYgaXQgd2FzIHByZXNlbnQgKi8KICAgICAgIGlmICghIHNldF9xdWFsaXR5X3JhdGluZ3MoY2luZm8sIHF1YWxpdHlhcmcsIGZvcmNlX2Jhc2VsaW5lKSkKLQl1c2FnZSgpOworICAgICAgICB1c2FnZSgpOwogCi0gICAgaWYgKHF0YWJsZWZpbGUgIT0gTlVMTCkJLyogcHJvY2VzcyAtcXRhYmxlcyBpZiBpdCB3YXMgcHJlc2VudCAqLworICAgIGlmIChxdGFibGVmaWxlICE9IE5VTEwpICAgICAvKiBwcm9jZXNzIC1xdGFibGVzIGlmIGl0IHdhcyBwcmVzZW50ICovCiAgICAgICBpZiAoISByZWFkX3F1YW50X3RhYmxlcyhjaW5mbywgcXRhYmxlZmlsZSwgZm9yY2VfYmFzZWxpbmUpKQotCXVzYWdlKCk7CisgICAgICAgIHVzYWdlKCk7CiAKLSAgICBpZiAocXNsb3RzYXJnICE9IE5VTEwpCS8qIHByb2Nlc3MgLXFzbG90cyBpZiBpdCB3YXMgcHJlc2VudCAqLworICAgIGlmIChxc2xvdHNhcmcgIT0gTlVMTCkgICAgICAvKiBwcm9jZXNzIC1xc2xvdHMgaWYgaXQgd2FzIHByZXNlbnQgKi8KICAgICAgIGlmICghIHNldF9xdWFudF9zbG90cyhjaW5mbywgcXNsb3RzYXJnKSkKLQl1c2FnZSgpOworICAgICAgICB1c2FnZSgpOwogCi0gICAgaWYgKHNhbXBsZWFyZyAhPSBOVUxMKQkvKiBwcm9jZXNzIC1zYW1wbGUgaWYgaXQgd2FzIHByZXNlbnQgKi8KKyAgICBpZiAoc2FtcGxlYXJnICE9IE5VTEwpICAgICAgLyogcHJvY2VzcyAtc2FtcGxlIGlmIGl0IHdhcyBwcmVzZW50ICovCiAgICAgICBpZiAoISBzZXRfc2FtcGxlX2ZhY3RvcnMoY2luZm8sIHNhbXBsZWFyZykpCi0JdXNhZ2UoKTsKKyAgICAgICAgdXNhZ2UoKTsKIAogI2lmZGVmIENfUFJPR1JFU1NJVkVfU1VQUE9SVEVECi0gICAgaWYgKHNpbXBsZV9wcm9ncmVzc2l2ZSkJLyogcHJvY2VzcyAtcHJvZ3Jlc3NpdmU7IC1zY2FucyBjYW4gb3ZlcnJpZGUgKi8KKyAgICBpZiAoc2ltcGxlX3Byb2dyZXNzaXZlKSAgICAgLyogcHJvY2VzcyAtcHJvZ3Jlc3NpdmU7IC1zY2FucyBjYW4gb3ZlcnJpZGUgKi8KICAgICAgIGpwZWdfc2ltcGxlX3Byb2dyZXNzaW9uKGNpbmZvKTsKICNlbmRpZgogCiAjaWZkZWYgQ19NVUxUSVNDQU5fRklMRVNfU1VQUE9SVEVECi0gICAgaWYgKHNjYW5zYXJnICE9IE5VTEwpCS8qIHByb2Nlc3MgLXNjYW5zIGlmIGl0IHdhcyBwcmVzZW50ICovCisgICAgaWYgKHNjYW5zYXJnICE9IE5VTEwpICAgICAgIC8qIHByb2Nlc3MgLXNjYW5zIGlmIGl0IHdhcyBwcmVzZW50ICovCiAgICAgICBpZiAoISByZWFkX3NjYW5fc2NyaXB0KGNpbmZvLCBzY2Fuc2FyZykpCi0JdXNhZ2UoKTsKKyAgICAgICAgdXNhZ2UoKTsKICNlbmRpZgogICB9CiAKLSAgcmV0dXJuIGFyZ247CQkJLyogcmV0dXJuIGluZGV4IG9mIG5leHQgYXJnIChmaWxlIG5hbWUpICovCisgIHJldHVybiBhcmduOyAgICAgICAgICAgICAgICAgIC8qIHJldHVybiBpbmRleCBvZiBuZXh0IGFyZyAoZmlsZSBuYW1lKSAqLwogfQogCiAKQEAgLTQ2OCw3ICs0ODgsOSBAQAogICBpbnQgZmlsZV9pbmRleDsKICAgY2pwZWdfc291cmNlX3B0ciBzcmNfbWdyOwogICBGSUxFICogaW5wdXRfZmlsZTsKLSAgRklMRSAqIG91dHB1dF9maWxlOworICBGSUxFICogb3V0cHV0X2ZpbGUgPSBOVUxMOworICB1bnNpZ25lZCBjaGFyICpvdXRidWZmZXIgPSBOVUxMOworICB1bnNpZ25lZCBsb25nIG91dHNpemUgPSAwOwogICBKRElNRU5TSU9OIG51bV9zY2FubGluZXM7CiAKICAgLyogT24gTWFjLCBmZXRjaCBhIGNvbW1hbmQgbGluZS4gKi8KQEAgLTQ3OCw3ICs1MDAsNyBAQAogCiAgIHByb2duYW1lID0gYXJndlswXTsKICAgaWYgKHByb2duYW1lID09IE5VTEwgfHwgcHJvZ25hbWVbMF0gPT0gMCkKLSAgICBwcm9nbmFtZSA9ICJjanBlZyI7CQkvKiBpbiBjYXNlIEMgbGlicmFyeSBkb2Vzbid0IHByb3ZpZGUgaXQgKi8KKyAgICBwcm9nbmFtZSA9ICJjanBlZyI7ICAgICAgICAgLyogaW4gY2FzZSBDIGxpYnJhcnkgZG9lc24ndCBwcm92aWRlIGl0ICovCiAKICAgLyogSW5pdGlhbGl6ZSB0aGUgSlBFRyBjb21wcmVzc2lvbiBvYmplY3Qgd2l0aCBkZWZhdWx0IGVycm9yIGhhbmRsaW5nLiAqLwogICBjaW5mby5lcnIgPSBqcGVnX3N0ZF9lcnJvcigmamVycik7CkBAIC01MTEsMTkgKzUzMywyMSBAQAogICBmaWxlX2luZGV4ID0gcGFyc2Vfc3dpdGNoZXMoJmNpbmZvLCBhcmdjLCBhcmd2LCAwLCBGQUxTRSk7CiAKICNpZmRlZiBUV09fRklMRV9DT01NQU5ETElORQotICAvKiBNdXN0IGhhdmUgZWl0aGVyIC1vdXRmaWxlIHN3aXRjaCBvciBleHBsaWNpdCBvdXRwdXQgZmlsZSBuYW1lICovCi0gIGlmIChvdXRmaWxlbmFtZSA9PSBOVUxMKSB7Ci0gICAgaWYgKGZpbGVfaW5kZXggIT0gYXJnYy0yKSB7Ci0gICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBtdXN0IG5hbWUgb25lIGlucHV0IGFuZCBvbmUgb3V0cHV0IGZpbGVcbiIsCi0JICAgICAgcHJvZ25hbWUpOwotICAgICAgdXNhZ2UoKTsKLSAgICB9Ci0gICAgb3V0ZmlsZW5hbWUgPSBhcmd2W2ZpbGVfaW5kZXgrMV07Ci0gIH0gZWxzZSB7Ci0gICAgaWYgKGZpbGVfaW5kZXggIT0gYXJnYy0xKSB7Ci0gICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBtdXN0IG5hbWUgb25lIGlucHV0IGFuZCBvbmUgb3V0cHV0IGZpbGVcbiIsCi0JICAgICAgcHJvZ25hbWUpOwotICAgICAgdXNhZ2UoKTsKKyAgaWYgKCFtZW1kc3QpIHsKKyAgICAvKiBNdXN0IGhhdmUgZWl0aGVyIC1vdXRmaWxlIHN3aXRjaCBvciBleHBsaWNpdCBvdXRwdXQgZmlsZSBuYW1lICovCisgICAgaWYgKG91dGZpbGVuYW1lID09IE5VTEwpIHsKKyAgICAgIGlmIChmaWxlX2luZGV4ICE9IGFyZ2MtMikgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBtdXN0IG5hbWUgb25lIGlucHV0IGFuZCBvbmUgb3V0cHV0IGZpbGVcbiIsCisgICAgICAgICAgICAgICAgcHJvZ25hbWUpOworICAgICAgICB1c2FnZSgpOworICAgICAgfQorICAgICAgb3V0ZmlsZW5hbWUgPSBhcmd2W2ZpbGVfaW5kZXgrMV07CisgICAgfSBlbHNlIHsKKyAgICAgIGlmIChmaWxlX2luZGV4ICE9IGFyZ2MtMSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBtdXN0IG5hbWUgb25lIGlucHV0IGFuZCBvbmUgb3V0cHV0IGZpbGVcbiIsCisgICAgICAgICAgICAgICAgcHJvZ25hbWUpOworICAgICAgICB1c2FnZSgpOworICAgICAgfQogICAgIH0KICAgfQogI2Vsc2UKQEAgLTU1MSw3ICs1NzUsNyBAQAogICAgICAgZnByaW50ZihzdGRlcnIsICIlczogY2FuJ3Qgb3BlbiAlc1xuIiwgcHJvZ25hbWUsIG91dGZpbGVuYW1lKTsKICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKICAgICB9Ci0gIH0gZWxzZSB7CisgIH0gZWxzZSBpZiAoIW1lbWRzdCkgewogICAgIC8qIGRlZmF1bHQgb3V0cHV0IGZpbGUgaXMgc3Rkb3V0ICovCiAgICAgb3V0cHV0X2ZpbGUgPSB3cml0ZV9zdGRvdXQoKTsKICAgfQpAQCAtNTc0LDcgKzU5OCwxMiBAQAogICBmaWxlX2luZGV4ID0gcGFyc2Vfc3dpdGNoZXMoJmNpbmZvLCBhcmdjLCBhcmd2LCAwLCBUUlVFKTsKIAogICAvKiBTcGVjaWZ5IGRhdGEgZGVzdGluYXRpb24gZm9yIGNvbXByZXNzaW9uICovCi0gIGpwZWdfc3RkaW9fZGVzdCgmY2luZm8sIG91dHB1dF9maWxlKTsKKyNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDgwIHx8IGRlZmluZWQoTUVNX1NSQ0RTVF9TVVBQT1JURUQpCisgIGlmIChtZW1kc3QpCisgICAganBlZ19tZW1fZGVzdCgmY2luZm8sICZvdXRidWZmZXIsICZvdXRzaXplKTsKKyAgZWxzZQorI2VuZGlmCisgICAganBlZ19zdGRpb19kZXN0KCZjaW5mbywgb3V0cHV0X2ZpbGUpOwogCiAgIC8qIFN0YXJ0IGNvbXByZXNzb3IgKi8KICAganBlZ19zdGFydF9jb21wcmVzcygmY2luZm8sIFRSVUUpOwpAQCAtNTkzLDE0ICs2MjIsMjAgQEAKICAgLyogQ2xvc2UgZmlsZXMsIGlmIHdlIG9wZW5lZCB0aGVtICovCiAgIGlmIChpbnB1dF9maWxlICE9IHN0ZGluKQogICAgIGZjbG9zZShpbnB1dF9maWxlKTsKLSAgaWYgKG91dHB1dF9maWxlICE9IHN0ZG91dCkKKyAgaWYgKG91dHB1dF9maWxlICE9IHN0ZG91dCAmJiBvdXRwdXRfZmlsZSAhPSBOVUxMKQogICAgIGZjbG9zZShvdXRwdXRfZmlsZSk7CiAKICNpZmRlZiBQUk9HUkVTU19SRVBPUlQKICAgZW5kX3Byb2dyZXNzX21vbml0b3IoKGpfY29tbW9uX3B0cikgJmNpbmZvKTsKICNlbmRpZgogCisgIGlmIChtZW1kc3QpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkNvbXByZXNzZWQgc2l6ZTogICVsdSBieXRlc1xuIiwgb3V0c2l6ZSk7CisgICAgaWYgKG91dGJ1ZmZlciAhPSBOVUxMKQorICAgICAgZnJlZShvdXRidWZmZXIpOworICB9CisKICAgLyogQWxsIGRvbmUuICovCiAgIGV4aXQoamVyci5udW1fd2FybmluZ3MgPyBFWElUX1dBUk5JTkcgOiBFWElUX1NVQ0NFU1MpOwotICByZXR1cm4gMDsJCQkvKiBzdXBwcmVzcyBuby1yZXR1cm4tdmFsdWUgd2FybmluZ3MgKi8KKyAgcmV0dXJuIDA7ICAgICAgICAgICAgICAgICAgICAgLyogc3VwcHJlc3Mgbm8tcmV0dXJuLXZhbHVlIHdhcm5pbmdzICovCiB9CmRpZmYgLS1naXQgYS9jbWFrZXNjcmlwdHMvbWQ1Y21wLmNtYWtlIGIvY21ha2VzY3JpcHRzL21kNWNtcC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzE1YWE4Ci0tLSAvZGV2L251bGwKKysrIGIvY21ha2VzY3JpcHRzL21kNWNtcC5jbWFrZQpAQCAtMCwwICsxLDE1IEBACitpZihOT1QgTUQ1KQorICBtZXNzYWdlKEZBVEFMX0VSUk9SICJNRDUgbm90IHNwZWNpZmllZCIpCitlbmRpZigpCisKK2lmKE5PVCBGSUxFKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SICJGSUxFIG5vdCBzcGVjaWZpZWQiKQorZW5kaWYoKQorCitmaWxlKE1ENSAke0ZJTEV9IE1ENUZJTEUpCisKK2lmKE5PVCBNRDUgU1RSRVFVQUwgTUQ1RklMRSkKKwltZXNzYWdlKEZBVEFMX0VSUk9SICJNRDUgb2YgJHtGSUxFfSBzaG91bGQgYmUgJHtNRDV9LCBub3QgJHtNRDVGSUxFfS4iKQorZWxzZSgpCisJbWVzc2FnZShTVEFUVVMgIiR7TUQ1fTogT0siKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvY29kZXJ1bGVzLnR4dCBiL2NvZGVydWxlcy50eHQKaW5kZXggMzU3OTI5Zi4uZWE4ZmNjMCAxMDA2NDQKLS0tIGEvY29kZXJ1bGVzLnR4dAorKysgYi9jb2RlcnVsZXMudHh0CkBAIC0yMSwxMSArMjEsMTEgQEAKICAqLwogCiBXZSBpbmRlbnQgc3RhdGVtZW50cyBpbiBLJlIgc3R5bGUsIGUuZy4sCi0JaWYgKHRlc3QpIHsKLQkgIHRoZW4tcGFydDsKLQl9IGVsc2UgewotCSAgZWxzZS1wYXJ0OwotCX0KKyAgICAgICAgaWYgKHRlc3QpIHsKKyAgICAgICAgICB0aGVuLXBhcnQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgZWxzZS1wYXJ0OworICAgICAgICB9CiB3aXRoIHR3byBzcGFjZXMgcGVyIGluZGVudGF0aW9uIGxldmVsLiAgKFRoaXMgaW5kZW50YXRpb24gY29udmVudGlvbiBpcwogaGFuZGxlZCBhdXRvbWF0aWNhbGx5IGJ5IEdOVSBFbWFjcyBhbmQgbWFueSBvdGhlciB0ZXh0IGVkaXRvcnMuKQogCkBAIC01NywxNiArNTcsMTYgQEAKIAogYW5zaTJrbnIgZG9lcyBub3QgdHJhbnNmb3JtIG1ldGhvZCBkZWNsYXJhdGlvbnMgKGZ1bmN0aW9uIHBvaW50ZXJzIGluCiBzdHJ1Y3RzKS4gIFdlIGhhbmRsZSB0aGVzZSB3aXRoIGEgbWFjcm8gSk1FVEhPRCwgZGVmaW5lZCBhcwotCSNpZmRlZiBIQVZFX1BST1RPVFlQRVMKLQkjZGVmaW5lIEpNRVRIT0QodHlwZSxtZXRob2RuYW1lLGFyZ2xpc3QpICB0eXBlICgqbWV0aG9kbmFtZSkgYXJnbGlzdAotCSNlbHNlCi0JI2RlZmluZSBKTUVUSE9EKHR5cGUsbWV0aG9kbmFtZSxhcmdsaXN0KSAgdHlwZSAoKm1ldGhvZG5hbWUpICgpCi0JI2VuZGlmCisgICAgICAgICNpZmRlZiBIQVZFX1BST1RPVFlQRVMKKyAgICAgICAgI2RlZmluZSBKTUVUSE9EKHR5cGUsbWV0aG9kbmFtZSxhcmdsaXN0KSAgdHlwZSAoKm1ldGhvZG5hbWUpIGFyZ2xpc3QKKyAgICAgICAgI2Vsc2UKKyAgICAgICAgI2RlZmluZSBKTUVUSE9EKHR5cGUsbWV0aG9kbmFtZSxhcmdsaXN0KSAgdHlwZSAoKm1ldGhvZG5hbWUpICgpCisgICAgICAgICNlbmRpZgogd2hpY2ggaXMgdXNlZCBsaWtlIHRoaXM6Ci0Jc3RydWN0IGZ1bmN0aW9uX3BvaW50ZXJzIHsKLQkgIEpNRVRIT0Qodm9pZCwgaW5pdF9lbnRyb3B5X2VuY29kZXIsIChpbnQgc29tZWFyZywganBhcm1zICpqcCkpOwotCSAgSk1FVEhPRCh2b2lkLCB0ZXJtX2VudHJvcHlfZW5jb2RlciwgKHZvaWQpKTsKLQl9OworICAgICAgICBzdHJ1Y3QgZnVuY3Rpb25fcG9pbnRlcnMgeworICAgICAgICAgIEpNRVRIT0Qodm9pZCwgaW5pdF9lbnRyb3B5X2VuY29kZXIsIChpbnQgc29tZWFyZywganBhcm1zICpqcCkpOworICAgICAgICAgIEpNRVRIT0Qodm9pZCwgdGVybV9lbnRyb3B5X2VuY29kZXIsICh2b2lkKSk7CisgICAgICAgIH07CiBOb3RlIHRoZSBzZXQgb2YgcGFyZW50aGVzZXMgc3Vycm91bmRpbmcgdGhlIHBhcmFtZXRlciBsaXN0LgogCiBBIHNpbWlsYXIgc29sdXRpb24gaXMgdXNlZCBmb3IgZm9yd2FyZCBhbmQgZXh0ZXJuYWwgZnVuY3Rpb24gZGVjbGFyYXRpb25zCmRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKaW5kZXggNmM4ZGQ2ZC4uOWZkMjk0OCAxMDA2NDQKLS0tIGEvY29uZmlndXJlLmFjCisrKyBiL2NvbmZpZ3VyZS5hYwpAQCAtMiw3ICsyLDcgQEAKICMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvY29uZiB0byBwcm9kdWNlIGEgY29uZmlndXJlIHNjcmlwdC4KIAogQUNfUFJFUkVRKFsyLjU2XSkKLUFDX0lOSVQoW2xpYmpwZWctdHVyYm9dLCBbMS4yLjJdKQorQUNfSU5JVChbbGlianBlZy10dXJib10sIFsxLjMuMl0pCiBCVUlMRD1gZGF0ZSArJVklbSVkYAogCiBBTV9JTklUX0FVVE9NQUtFKFstV2FsbCBmb3JlaWduIGRpc3QtYnppcDJdKQpAQCAtMTEsMjIgKzExLDcxIEBACiAjIEFsd2F5cyBidWlsZCB3aXRoIHByb3RvdHlwZXMKIEFDX0RFRklORShbSEFWRV9QUk9UT1RZUEVTXSwgMSwgW0RlZmluZSBpZiB5b3VyIGNvbXBpbGVyIHN1cHBvcnRzIHByb3RvdHlwZXNdKQogCittNF9pZmRlZihbQU1fU0lMRU5UX1JVTEVTXSwgW0FNX1NJTEVOVF9SVUxFUyhbeWVzXSldKQorCiAjIENoZWNrcyBmb3IgcHJvZ3JhbXMuCiBTQVZFRF9DRkxBR1M9JHtDRkxBR1N9CiBTQVZFRF9DUFBGTEFHUz0ke0NQUEZMQUdTfQogQUNfUFJPR19DUFAKIEFDX1BST0dfQ0MKK200X2lmZGVmKFtBTV9QUk9HX0FSXSwgW0FNX1BST0dfQVJdKQogQU1fUFJPR19BUworQU1fUFJPR19DQ19DX08KIEFDX1BST0dfSU5TVEFMTAogQUNfUFJPR19MSUJUT09MCiBBQ19QUk9HX0xOX1MKIAorIyBXaGVuIHRoZSBwcmVmaXggaXMgL29wdC9saWJqcGVnLXR1cmJvLCB3ZSBhc3N1bWUgdGhhdCBhbiAib2ZmaWNpYWwiIGJpbmFyeSBpcworIyBiZWluZyBjcmVhdGVkLCBhbmQgdGh1cyB3ZSBpbnN0YWxsIHRoaW5ncyBpbnRvIHNwZWNpZmljIGxvY2F0aW9ucy4KKworb2xkX3ByZWZpeD0ke3ByZWZpeH0KK2lmIHRlc3QgIngkcHJlZml4IiA9ICJ4Tk9ORSIgLWEgIngkYWNfZGVmYXVsdF9wcmVmaXgiICE9ICJ4IjsgdGhlbgorICBwcmVmaXg9JGFjX2RlZmF1bHRfcHJlZml4CitmaQorREFUQURJUj1gZXZhbCBlY2hvICR7ZGF0YWRpcn1gCitEQVRBRElSPWBldmFsIGVjaG8gJERBVEFESVJgCitpZiB0ZXN0ICIkREFUQURJUiIgPSAiL29wdC9saWJqcGVnLXR1cmJvL3NoYXJlIjsgdGhlbgorICBkYXRhZGlyPScke3ByZWZpeH0nCitmaQorREFUQURJUj1gZXZhbCBlY2hvICR7ZGF0YXJvb3RkaXJ9YAorREFUQURJUj1gZXZhbCBlY2hvICREQVRBRElSYAoraWYgdGVzdCAiJERBVEFESVIiID0gIi9vcHQvbGlianBlZy10dXJiby9zaGFyZSI7IHRoZW4KKyAgZGF0YXJvb3RkaXI9JyR7cHJlZml4fScKK2ZpCisKK29sZF9leGVjX3ByZWZpeD0ke2V4ZWNfcHJlZml4fQoraWYgdGVzdCAieCRleGVjX3ByZWZpeCIgPSAieE5PTkUiOyB0aGVuCisgIGV4ZWNfcHJlZml4PSR7cHJlZml4fQorZmkKKworaWYgdGVzdCAieCR7bGliZGlyfSIgPSAneCR7ZXhlY19wcmVmaXh9L2xpYicgLW8gIngke2xpYmRpcn0iID0gJ3gke3ByZWZpeH0vbGliJzsgdGhlbgorICBMSUJESVI9YGV2YWwgZWNobyAke2xpYmRpcn1gCisgIExJQkRJUj1gZXZhbCBlY2hvICRMSUJESVJgCisgIGlmIHRlc3QgIiRMSUJESVIiID0gIi9vcHQvbGlianBlZy10dXJiby9saWIiOyB0aGVuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgZGFyd2luKikKKyAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIEFDX0NIRUNLX1NJWkVPRihsb25nKQorICAgICAgICBpZiB0ZXN0ICIke2FjX2N2X3NpemVvZl9sb25nfSIgPSAiOCI7IHRoZW4KKyAgICAgICAgICBsaWJkaXI9JyR7ZXhlY19wcmVmaXh9L2xpYjY0JworICAgICAgICBlbGlmIHRlc3QgIiR7YWNfY3Zfc2l6ZW9mX2xvbmd9IiA9ICI0IjsgdGhlbgorICAgICAgICAgIGxpYmRpcj0nJHtleGVjX3ByZWZpeH0vbGliMzInCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgZXNhYworICBmaQorZmkKK2V4ZWNfcHJlZml4PSR7b2xkX2V4ZWNfcHJlZml4fQorcHJlZml4PSR7b2xkX3ByZWZpeH0KKwogIyBDaGVjayB3aGV0aGVyIGNvbXBpbGVyIHN1cHBvcnRzIHBvaW50ZXJzIHRvIHVuZGVmaW5lZCBzdHJ1Y3R1cmVzCiBBQ19NU0dfQ0hFQ0tJTkcod2hldGhlciBjb21waWxlciBzdXBwb3J0cyBwb2ludGVycyB0byB1bmRlZmluZWQgc3RydWN0dXJlcykKIEFDX1RSWV9DT01QSUxFKFsgdHlwZWRlZiBzdHJ1Y3QgdW5kZWZpbmVkX3N0cnVjdHVyZSAqIHVuZGVmX3N0cnVjdF9wdHI7IF0sICwKLUFDX01TR19SRVNVTFQoeWVzKSwKLVtBQ19NU0dfUkVTVUxUKG5vKQotQUNfREVGSU5FKFtJTkNPTVBMRVRFX1RZUEVTX0JST0tFTl0sWzFdLFtDb21waWxlciBkb2VzIG5vdCBzdXBwb3J0IHBvaW50ZXJzIHRvIHVuZGVmaW5lZCBzdHJ1Y3R1cmVzLl0pXSkKKyAgQUNfTVNHX1JFU1VMVCh5ZXMpLAorICBbQUNfTVNHX1JFU1VMVChubykKKyAgIEFDX0RFRklORShbSU5DT01QTEVURV9UWVBFU19CUk9LRU5dLCBbMV0sCisgICAgIFtDb21waWxlciBkb2VzIG5vdCBzdXBwb3J0IHBvaW50ZXJzIHRvIHVuZGVmaW5lZCBzdHJ1Y3R1cmVzLl0pXSkKIAogaWYgdGVzdCAieCR7R0NDfSIgPSAieHllcyI7IHRoZW4KICAgaWYgdGVzdCAieCR7U0FWRURfQ0ZMQUdTfSIgPSAieCI7IHRoZW4KQEAgLTQ4LDggKzk3LDkgQEAKIAogIyBDaGVja3MgZm9yIGhlYWRlciBmaWxlcy4KIEFDX0hFQURFUl9TVERDCi1BQ19DSEVDS19IRUFERVJTKFtzdGRkZWYuaCBzdGRsaWIuaCBzdHJpbmcuaF0pCi1BQ19DSEVDS19IRUFERVIoW3N5cy90eXBlcy5oXSwgQUNfREVGSU5FKFtORUVEX1NZU19UWVBFU19IXSwgMSwgW0RlZmluZSBpZiB5b3UgaGF2ZSBzeXMvdHlwZXMuaF0pKQorQUNfQ0hFQ0tfSEVBREVSUyhbc3RkZGVmLmggc3RkbGliLmggbG9jYWxlLmggc3RyaW5nLmhdKQorQUNfQ0hFQ0tfSEVBREVSKFtzeXMvdHlwZXMuaF0sCisgIEFDX0RFRklORShbTkVFRF9TWVNfVFlQRVNfSF0sIDEsIFtEZWZpbmUgaWYgeW91IG5lZWQgdG8gaW5jbHVkZSA8c3lzL3R5cGVzLmg+IHRvIGdldCBzaXplX3QuXSkpCiAKICMgQ2hlY2tzIGZvciB0eXBlZGVmcywgc3RydWN0dXJlcywgYW5kIGNvbXBpbGVyIGNoYXJhY3RlcmlzdGljcy4KIEFDX0NfQ09OU1QKQEAgLTYwLDg1ICsxMTAsMTE5IEBACiAKIEFDX01TR19DSEVDS0lORyhbaWYgcmlnaHQgc2hpZnQgaXMgc2lnbmVkXSkKIEFDX1RSWV9SVU4oCi0JWyNpbmNsdWRlIDxzdGRpby5oPgotCSBpbnQgaXNfc2hpZnRpbmdfc2lnbmVkIChsb25nIGFyZykgewotCSBsb25nIHJlcyA9IGFyZyA+PiA0OworICBbI2luY2x1ZGUgPHN0ZGlvLmg+CisgICBpbnQgaXNfc2hpZnRpbmdfc2lnbmVkIChsb25nIGFyZykgeworICAgICBsb25nIHJlcyA9IGFyZyA+PiA0OwogCi0JIGlmIChyZXMgPT0gLTB4N0Y3RTgwQ0wpCi0JCXJldHVybiAxOyAvKiByaWdodCBzaGlmdCBpcyBzaWduZWQgKi8KKyAgICAgaWYgKHJlcyA9PSAtMHg3RjdFODBDTCkKKyAgICAgICByZXR1cm4gMTsgLyogcmlnaHQgc2hpZnQgaXMgc2lnbmVkICovCiAKLQkgLyogc2VlIGlmIHVuc2lnbmVkLXNoaWZ0IGhhY2sgd2lsbCBmaXggaXQuICovCi0JIC8qIHdlIGNhbid0IGp1c3QgdGVzdCBleGFjdCB2YWx1ZSBzaW5jZSBpdCBkZXBlbmRzIG9uIHdpZHRoIG9mIGxvbmcuLi4gKi8KLQkgcmVzIHw9ICh+MEwpIDw8ICgzMi00KTsKLQkgaWYgKHJlcyA9PSAtMHg3RjdFODBDTCkKLQkJcmV0dXJuIDA7IC8qIHJpZ2h0IHNoaWZ0IGlzIHVuc2lnbmVkICovCisgICAgIC8qIHNlZSBpZiB1bnNpZ25lZC1zaGlmdCBoYWNrIHdpbGwgZml4IGl0LiAqLworICAgICAvKiB3ZSBjYW4ndCBqdXN0IHRlc3QgZXhhY3QgdmFsdWUgc2luY2UgaXQgZGVwZW5kcyBvbiB3aWR0aCBvZiBsb25nLi4uICovCisgICAgIHJlcyB8PSAofjBMKSA8PCAoMzItNCk7CisgICAgIGlmIChyZXMgPT0gLTB4N0Y3RTgwQ0wpCisgICAgICAgcmV0dXJuIDA7IC8qIHJpZ2h0IHNoaWZ0IGlzIHVuc2lnbmVkICovCiAKLQkgcHJpbnRmKCJSaWdodCBzaGlmdCBpc24ndCBhY3RpbmcgYXMgSSBleHBlY3QgaXQgdG8uXG4iKTsKLQkgcHJpbnRmKCJJIGZlYXIgdGhlIEpQRUcgc29mdHdhcmUgd2lsbCBub3Qgd29yayBhdCBhbGwuXG5cbiIpOwotCSByZXR1cm4gMDsgLyogdHJ5IGl0IHdpdGggdW5zaWduZWQgYW55d2F5ICovCi0JIH0KLQkgaW50IG1haW4gKHZvaWQpIHsKLQkJZXhpdChpc19zaGlmdGluZ19zaWduZWQoLTB4N0Y3RTgwQjFMKSk7Ci0JIH1dLAotCVtBQ19NU0dfUkVTVUxUKG5vKQotCSBBQ19ERUZJTkUoW1JJR0hUX1NISUZUX0lTX1VOU0lHTkVEXSwgMSwgW0RlZmluZSBpZiBzaGlmdCBpcyB1bnNpZ25lZF0pXSwKLQlbQUNfTVNHX1JFU1VMVCh5ZXMpXSwKLQlbQUNfTVNHX1JFU1VMVChBc3N1bWluZyB0aGF0IHJpZ2h0IHNoaWZ0IGlzIHNpZ25lZCBvbiB0YXJnZXQgbWFjaGluZS4pXSkKKyAgICAgcHJpbnRmKCJSaWdodCBzaGlmdCBpc24ndCBhY3RpbmcgYXMgSSBleHBlY3QgaXQgdG8uXG4iKTsKKyAgICAgcHJpbnRmKCJJIGZlYXIgdGhlIEpQRUcgc29mdHdhcmUgd2lsbCBub3Qgd29yayBhdCBhbGwuXG5cbiIpOworICAgICByZXR1cm4gMDsgLyogdHJ5IGl0IHdpdGggdW5zaWduZWQgYW55d2F5ICovCisgICB9CisgICBpbnQgbWFpbiAodm9pZCkgeworICAgICBleGl0KGlzX3NoaWZ0aW5nX3NpZ25lZCgtMHg3RjdFODBCMUwpKTsKKyAgIH1dLAorICBbQUNfTVNHX1JFU1VMVChubykKKyAgIEFDX0RFRklORShbUklHSFRfU0hJRlRfSVNfVU5TSUdORURdLCAxLAorICAgICBbRGVmaW5lIGlmIHlvdXIgKGJyb2tlbikgY29tcGlsZXIgc2hpZnRzIHNpZ25lZCB2YWx1ZXMgYXMgaWYgdGhleSB3ZXJlIHVuc2lnbmVkLl0pXSwKKyAgW0FDX01TR19SRVNVTFQoeWVzKV0sCisgIFtBQ19NU0dfUkVTVUxUKEFzc3VtaW5nIHRoYXQgcmlnaHQgc2hpZnQgaXMgc2lnbmVkIG9uIHRhcmdldCBtYWNoaW5lLildKQogCiAjIHRlc3Qgd2hldGhlciBnbG9iYWwgbmFtZXMgYXJlIHVuaXF1ZSB0byBhdCBsZWFzdCAxNSBjaGFycwogQUNfTVNHX0NIRUNLSU5HKFtmb3Igc2hvcnQgZXh0ZXJuYWwgbmFtZXNdKQogQUNfVFJZX0xJTksoCi0JW2ludCBwb3NzaWJseV9kdXBsaWNhdGVfZnVuY3Rpb24gKCkgeyByZXR1cm4gMDsgfQotCSBpbnQgcG9zc2libHlfZHVwbGlfZnVuY3Rpb24gKCkgeyByZXR1cm4gMTsgfV0sIFsgXSwKLQlbQUNfTVNHX1JFU1VMVChvayldLAotCVtBQ19NU0dfUkVTVUxUKHNob3J0KQotCSBBQ19ERUZJTkUoW05FRURfU0hPUlRfRVhURVJOQUxfTkFNRVNdLCAxLCBbRGVmaW5lIGlmIHlvdSBuZWVkIHNob3J0IGZ1bmN0aW9uIG5hbWVzXSldKQorICBbaW50IHBvc3NpYmx5X2R1cGxpY2F0ZV9mdW5jdGlvbiAoKSB7IHJldHVybiAwOyB9CisgICBpbnQgcG9zc2libHlfZHVwbGlfZnVuY3Rpb24gKCkgeyByZXR1cm4gMTsgfV0sIFsgXSwKKyAgW0FDX01TR19SRVNVTFQob2spXSwKKyAgW0FDX01TR19SRVNVTFQoc2hvcnQpCisgICBBQ19ERUZJTkUoW05FRURfU0hPUlRfRVhURVJOQUxfTkFNRVNdLCAxLAorICAgICBbRGVmaW5lIGlmIGxpbmtlciByZXF1aXJlcyB0aGF0IHRoZSBmaXJzdCAxNSBjaGFyYWN0ZXJzIG9mIGdsb2JhbCBuYW1lcyBiZSB1bmlxdWUuXSldKQogCiAjIENoZWNrcyBmb3IgbGlicmFyeSBmdW5jdGlvbnMuCiBBQ19DSEVDS19GVU5DUyhbbWVtc2V0IG1lbWNweV0sIFtdLAotCVtBQ19ERUZJTkUoW05FRURfQlNEX1NUUklOR1NdLCAxLAotCQkgICBbRGVmaW5lIGlmIHlvdSBoYXZlIEJTRC1saWtlIGJ6ZXJvIGFuZCBiY29weV0pXSkKKyAgW0FDX0RFRklORShbTkVFRF9CU0RfU1RSSU5HU10sIDEsCisgICAgIFtEZWZpbmUgaWYgeW91IGhhdmUgQlNELWxpa2UgYnplcm8gYW5kIGJjb3B5IGluIDxzdHJpbmdzLmg+IHJhdGhlciB0aGFuIG1lbXNldC9tZW1jcHkgaW4gPHN0cmluZy5oPi5dKV0pCiAKIEFDX01TR19DSEVDS0lORyhbbGlianBlZyBBUEkgdmVyc2lvbl0pCiBBQ19BUkdfVkFSKEpQRUdfTElCX1ZFUlNJT04sIFtsaWJqcGVnIEFQSSB2ZXJzaW9uICg2MiwgNzAsIG9yIDgwKV0pCiBpZiB0ZXN0ICJ4JEpQRUdfTElCX1ZFUlNJT04iID0gIngiOyB0aGVuCi0gICAgQUNfQVJHX1dJVEgoW2pwZWc3XSwKLSAgICAgICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1qcGVnN10sIFtFbXVsYXRlIGxpYmpwZWcgdjcgQVBJL0FCSSAodGhpcyBtYWtlcyBsaWJqcGVnLXR1cmJvIGJhY2t3YXJkIGluY29tcGF0aWJsZSB3aXRoIGxpYmpwZWcgdjZiLildKSkKLSAgICBBQ19BUkdfV0lUSChbanBlZzhdLAotICAgICAgICBBQ19IRUxQX1NUUklORyhbLS13aXRoLWpwZWc4XSwgW0VtdWxhdGUgbGlianBlZyB2OCBBUEkvQUJJICh0aGlzIG1ha2VzIGxpYmpwZWctdHVyYm8gYmFja3dhcmQgaW5jb21wYXRpYmxlIHdpdGggbGlianBlZyB2NmIuKV0pKQotICAgIGlmIHRlc3QgIngke3dpdGhfanBlZzh9IiA9ICJ4eWVzIjsgdGhlbgotICAgICAgICBKUEVHX0xJQl9WRVJTSU9OPTgwCisgIEFDX0FSR19XSVRIKFtqcGVnN10sCisgICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1qcGVnN10sCisgICAgICBbRW11bGF0ZSBsaWJqcGVnIHY3IEFQSS9BQkkgKHRoaXMgbWFrZXMgbGlianBlZy10dXJibyBiYWNrd2FyZCBpbmNvbXBhdGlibGUgd2l0aCBsaWJqcGVnIHY2Yi4pXSkpCisgIEFDX0FSR19XSVRIKFtqcGVnOF0sCisgICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1qcGVnOF0sCisgICAgICBbRW11bGF0ZSBsaWJqcGVnIHY4IEFQSS9BQkkgKHRoaXMgbWFrZXMgbGlianBlZy10dXJibyBiYWNrd2FyZCBpbmNvbXBhdGlibGUgd2l0aCBsaWJqcGVnIHY2Yi4pXSkpCisgIGlmIHRlc3QgIngke3dpdGhfanBlZzh9IiA9ICJ4eWVzIjsgdGhlbgorICAgIEpQRUdfTElCX1ZFUlNJT049ODAKKyAgZWxzZQorICAgIGlmIHRlc3QgIngke3dpdGhfanBlZzd9IiA9ICJ4eWVzIjsgdGhlbgorICAgICAgSlBFR19MSUJfVkVSU0lPTj03MAogICAgIGVsc2UKLSAgICAgICAgaWYgdGVzdCAieCR7d2l0aF9qcGVnN30iID0gInh5ZXMiOyB0aGVuCi0gICAgICAgICAgICBKUEVHX0xJQl9WRVJTSU9OPTcwCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIEpQRUdfTElCX1ZFUlNJT049NjIKLSAgICAgICAgZmkKKyAgICAgIEpQRUdfTElCX1ZFUlNJT049NjIKICAgICBmaQorICBmaQogZmkKIEpQRUdfTElCX1ZFUlNJT05fREVDSU1BTD1gZXhwciAkSlBFR19MSUJfVkVSU0lPTiAvIDEwYC5gZXhwciAkSlBFR19MSUJfVkVSU0lPTiAlIDEwYAogQUNfU1VCU1QoSlBFR19MSUJfVkVSU0lPTl9ERUNJTUFMKQogQUNfTVNHX1JFU1VMVChbJEpQRUdfTElCX1ZFUlNJT05fREVDSU1BTF0pCi1BQ19ERUZJTkVfVU5RVU9URUQoSlBFR19MSUJfVkVSU0lPTiwgWyRKUEVHX0xJQl9WRVJTSU9OXSwgW2xpYmpwZWcgQVBJIHZlcnNpb25dKQorQUNfREVGSU5FX1VOUVVPVEVEKEpQRUdfTElCX1ZFUlNJT04sIFskSlBFR19MSUJfVkVSU0lPTl0sCisgIFtsaWJqcGVnIEFQSSB2ZXJzaW9uXSkKIAotQUNfTVNHX0NIRUNLSU5HKFtsaWJqcGVnIHNoYXJlZCBsaWJyYXJ5IHZlcnNpb25dKQotQUNfQVJHX1ZBUihTT19NQUpPUl9WRVJTSU9OLCBbTWFqb3IgdmVyc2lvbiBvZiB0aGUgbGlianBlZy10dXJibyBzaGFyZWQgbGlicmFyeSAoZGVmYXVsdCBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBBUEkgdmVyc2lvbildKQotQUNfQVJHX1ZBUihTT19NSU5PUl9WRVJTSU9OLCBbTWlub3IgdmVyc2lvbiBvZiB0aGUgbGlianBlZy10dXJibyBzaGFyZWQgbGlicmFyeSAoZGVmYXVsdCBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBBUEkgdmVyc2lvbildKQorQUNfQVJHX1ZBUihTT19NQUpPUl9WRVJTSU9OLAorICBbTWFqb3IgdmVyc2lvbiBvZiB0aGUgbGlianBlZy10dXJibyBzaGFyZWQgbGlicmFyeSAoZGVmYXVsdCBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBBUEkgdmVyc2lvbildKQorQUNfQVJHX1ZBUihTT19NSU5PUl9WRVJTSU9OLAorICBbTWlub3IgdmVyc2lvbiBvZiB0aGUgbGlianBlZy10dXJibyBzaGFyZWQgbGlicmFyeSAoZGVmYXVsdCBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBBUEkgdmVyc2lvbildKQogaWYgdGVzdCAieCRTT19NQUpPUl9WRVJTSU9OIiA9ICJ4IjsgdGhlbgotICAgIGNhc2UgIiRKUEVHX0xJQl9WRVJTSU9OIiBpbgotICAgICAgICA2MikgIFNPX01BSk9SX1ZFUlNJT049JEpQRUdfTElCX1ZFUlNJT04gOzsKLSAgICAgICAgKikgICBTT19NQUpPUl9WRVJTSU9OPWBleHByICRKUEVHX0xJQl9WRVJTSU9OIC8gMTBgIDs7Ci0gICAgZXNhYworICBjYXNlICIkSlBFR19MSUJfVkVSU0lPTiIgaW4KKyAgICA2MikgIFNPX01BSk9SX1ZFUlNJT049JEpQRUdfTElCX1ZFUlNJT04gOzsKKyAgICAqKSAgIFNPX01BSk9SX1ZFUlNJT049YGV4cHIgJEpQRUdfTElCX1ZFUlNJT04gLyAxMGAgOzsKKyAgZXNhYwogZmkKIGlmIHRlc3QgIngkU09fTUlOT1JfVkVSU0lPTiIgPSAieCI7IHRoZW4KLSAgICBjYXNlICIkSlBFR19MSUJfVkVSU0lPTiIgaW4KLSAgICAgICAgODApICBTT19NSU5PUl9WRVJTSU9OPTIgOzsKLSAgICAgICAgKikgICBTT19NSU5PUl9WRVJTSU9OPTAgOzsKLSAgICBlc2FjCisgIGNhc2UgIiRKUEVHX0xJQl9WRVJTSU9OIiBpbgorICAgIDgwKSAgU09fTUlOT1JfVkVSU0lPTj0yIDs7CisgICAgKikgICBTT19NSU5PUl9WRVJTSU9OPTAgOzsKKyAgZXNhYwogZmkKLUFDX01TR19SRVNVTFQoWyRTT19NQUpPUl9WRVJTSU9OOiRTT19NSU5PUl9WRVJTSU9OXSkKKworUlBNX0NPTkZJR19BUkdTPQorCisjIE1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gbWFuYWdlcnMKK1NPX0FHRT0wCitNRU1fU1JDRFNUX0ZVTkNUSU9OUz0KK2lmIHRlc3QgIngke3dpdGhfanBlZzh9IiAhPSAieHllcyI7IHRoZW4KKyAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGluY2x1ZGUgaW4tbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBtYW5hZ2Vyc10pCisgIEFDX0FSR19XSVRIKFttZW0tc3JjZHN0XSwKKyAgICBBQ19IRUxQX1NUUklORyhbLS13aXRob3V0LW1lbS1zcmNkc3RdLAorICAgICAgW0RvIG5vdCBpbmNsdWRlIGluLW1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gbWFuYWdlciBmdW5jdGlvbnMgd2hlbiBlbXVsYXRpbmcgdGhlIGxpYmpwZWcgdjZiIG9yIHY3IEFQSS9BQkldKSkKKyAgaWYgdGVzdCAieCR3aXRoX21lbV9zcmNkc3QiICE9ICJ4bm8iOyB0aGVuCisgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCisgICAgQUNfREVGSU5FKFtNRU1fU1JDRFNUX1NVUFBPUlRFRF0sIFsxXSwKKyAgICAgIFtTdXBwb3J0IGluLW1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gbWFuYWdlcnNdKQorICAgIFNPX0FHRT0xCisgICAgTUVNX1NSQ0RTVF9GVU5DVElPTlM9Imdsb2JhbDogIGpwZWdfbWVtX2Rlc3Q7ICBqcGVnX21lbV9zcmM7IjsKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQobm8pCisgICAgUlBNX0NPTkZJR19BUkdTPSIkUlBNX0NPTkZJR19BUkdTIC0td2l0aG91dC1tZW0tc3JjZHN0IgorICBmaQorZmkKKworQUNfTVNHX0NIRUNLSU5HKFtsaWJqcGVnIHNoYXJlZCBsaWJyYXJ5IHZlcnNpb25dKQorQUNfTVNHX1JFU1VMVChbJFNPX01BSk9SX1ZFUlNJT04uJFNPX0FHRS4kU09fTUlOT1JfVkVSU0lPTl0pCitMSUJUT09MX0NVUlJFTlQ9YGV4cHIgJFNPX01BSk9SX1ZFUlNJT04gKyAkU09fQUdFYAorQUNfU1VCU1QoTElCVE9PTF9DVVJSRU5UKQogQUNfU1VCU1QoU09fTUFKT1JfVkVSU0lPTikKIEFDX1NVQlNUKFNPX01JTk9SX1ZFUlNJT04pCitBQ19TVUJTVChTT19BR0UpCitBQ19TVUJTVChNRU1fU1JDRFNUX0ZVTkNUSU9OUykKIAogQUNfREVGSU5FX1VOUVVPVEVEKExJQkpQRUdfVFVSQk9fVkVSU0lPTiwgWyRWRVJTSU9OXSwgW2xpYmpwZWctdHVyYm8gdmVyc2lvbl0pCiAKQEAgLTE0Niw3ICsyMzAsNyBAQAogQUNfQVJHX0VOQUJMRShbbGQtdmVyc2lvbi1zY3JpcHRdLAogICBBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWxkLXZlcnNpb24tc2NyaXB0XSwKICAgICBbRGlzYWJsZSBsaW5rZXIgdmVyc2lvbiBzY3JpcHQgZm9yIGxpYmpwZWctdHVyYm8gKGRlZmF1bHQgaXMgdG8gdXNlIGxpbmtlciB2ZXJzaW9uIHNjcmlwdCBpZiB0aGUgbGlua2VyIHN1cHBvcnRzIGl0KV0pLAotICAgIFtWRVJTSU9OX1NDUklQVD0kZW5hYmxldmFsXSwgW10pCisgIFtWRVJTSU9OX1NDUklQVD0kZW5hYmxldmFsXSwgW10pCiAKIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgbGlua2VyIHN1cHBvcnRzIHZlcnNpb24gc2NyaXB0c10pCiBTQVZFRF9MREZMQUdTPSIkTERGTEFHUyIKQEAgLTE1NiwxMiArMjQwLDE2IEBACiAgIGdsb2JhbDogKjsKIH07CiBFT0YKLUFDX0xJTktfSUZFTFNFKEFDX0xBTkdfUFJPR1JBTShbXSwgW10pLAotICBbVkVSU0lPTl9TQ1JJUFRfRkxBRz0tV2wsLS12ZXJzaW9uLXNjcmlwdCw7IEFDX01TR19SRVNVTFQoW3llcyAoR05VIHN0eWxlKV0pXSwgW10pCitBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtdLCBbXSldLAorICBbVkVSU0lPTl9TQ1JJUFRfRkxBRz0tV2wsLS12ZXJzaW9uLXNjcmlwdCw7CisgICBBQ19NU0dfUkVTVUxUKFt5ZXMgKEdOVSBzdHlsZSldKV0sCisgIFtdKQogaWYgdGVzdCAieCRWRVJTSU9OX1NDUklQVF9GTEFHIiA9ICJ4IjsgdGhlbgogICBMREZMQUdTPSIkU0FWRURfTERGTEFHUyAtV2wsLU0sY29uZnRlc3QubWFwIgotICBBQ19MSU5LX0lGRUxTRShBQ19MQU5HX1BST0dSQU0oW10sIFtdKSwKLSAgICBbVkVSU0lPTl9TQ1JJUFRfRkxBRz0tV2wsLU0sOyBBQ19NU0dfUkVTVUxUKFt5ZXMgKFN1biBzdHlsZSldKV0sIFtdKQorICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtdLCBbXSldLAorICAgIFtWRVJTSU9OX1NDUklQVF9GTEFHPS1XbCwtTSw7CisgICAgIEFDX01TR19SRVNVTFQoW3llcyAoU3VuIHN0eWxlKV0pXSwKKyAgICBbXSkKIGZpCiBpZiB0ZXN0ICJ4JFZFUlNJT05fU0NSSVBUX0ZMQUciID0gIngiOyB0aGVuCiAgIFZFUlNJT05fU0NSSVBUPW5vCkBAIC0xNzgsOCArMjY2LDggQEAKICMgQ2hlY2sgZm9yIG5vbi1icm9rZW4gaW5saW5lIHVuZGVyIHZhcmlvdXMgc3BlbGxpbmdzCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIGlubGluZSkKIGxqdF9jdl9pbmxpbmU9IiIKLUFDX1RSWV9DT01QSUxFKCwgW30gX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIGludCBmb28oKSB7IHJldHVybiAwOyB9Ci1pbnQgYmFyKCkgeyByZXR1cm4gZm9vKCk7XSwgbGp0X2N2X2lubGluZT0iX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIiwKK0FDX1RSWV9DT01QSUxFKCwgW30gaW5saW5lIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBpbnQgZm9vKCkgeyByZXR1cm4gMDsgfQoraW50IGJhcigpIHsgcmV0dXJuIGZvbygpO10sIGxqdF9jdl9pbmxpbmU9ImlubGluZSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkiLAogQUNfVFJZX0NPTVBJTEUoLCBbfSBfX2lubGluZV9fIGludCBmb28oKSB7IHJldHVybiAwOyB9CiBpbnQgYmFyKCkgeyByZXR1cm4gZm9vKCk7XSwgbGp0X2N2X2lubGluZT0iX19pbmxpbmVfXyIsCiBBQ19UUllfQ09NUElMRSgsIFt9IF9faW5saW5lIGludCBmb28oKSB7IHJldHVybiAwOyB9CkBAIC0xODksMzAgKzI3Nyw0OSBAQAogQUNfTVNHX1JFU1VMVCgkbGp0X2N2X2lubGluZSkKIEFDX0RFRklORV9VTlFVT1RFRChbSU5MSU5FXSxbJGxqdF9jdl9pbmxpbmVdLFtIb3cgdG8gb2J0YWluIGZ1bmN0aW9uIGlubGluaW5nLl0pCiAKKyMgQXJpdGhtZXRpYyBjb2Rpbmcgc3VwcG9ydAogQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGluY2x1ZGUgYXJpdGhtZXRpYyBlbmNvZGluZyBzdXBwb3J0XSkKIEFDX0FSR19XSVRIKFthcml0aC1lbmNdLAotICAgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGhvdXQtYXJpdGgtZW5jXSwgW09taXQgYXJpdGhtZXRpYyBlbmNvZGluZyBzdXBwb3J0XSkpCisgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGhvdXQtYXJpdGgtZW5jXSwKKyAgICBbRG8gbm90IGluY2x1ZGUgYXJpdGhtZXRpYyBlbmNvZGluZyBzdXBwb3J0XSkpCiBpZiB0ZXN0ICJ4JHdpdGhfYXJpdGhfZW5jIiA9ICJ4bm8iOyB0aGVuCi0gICAgQUNfTVNHX1JFU1VMVChubykKKyAgQUNfTVNHX1JFU1VMVChubykKKyAgUlBNX0NPTkZJR19BUkdTPSIkUlBNX0NPTkZJR19BUkdTIC0td2l0aG91dC1hcml0aC1lbmMiCiBlbHNlCi0gICAgQUNfREVGSU5FKFtDX0FSSVRIX0NPRElOR19TVVBQT1JURURdLCBbMV0sIFtTdXBwb3J0IGFyaXRobWV0aWMgZW5jb2RpbmddKQotICAgIEFDX01TR19SRVNVTFQoeWVzKQorICBBQ19ERUZJTkUoW0NfQVJJVEhfQ09ESU5HX1NVUFBPUlRFRF0sIFsxXSwgW1N1cHBvcnQgYXJpdGhtZXRpYyBlbmNvZGluZ10pCisgIEFDX01TR19SRVNVTFQoeWVzKQogZmkKIEFNX0NPTkRJVElPTkFMKFtXSVRIX0FSSVRIX0VOQ10sIFt0ZXN0ICJ4JHdpdGhfYXJpdGhfZW5jIiAhPSAieG5vIl0pCiAKIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBpbmNsdWRlIGFyaXRobWV0aWMgZGVjb2Rpbmcgc3VwcG9ydF0pCiBBQ19BUkdfV0lUSChbYXJpdGgtZGVjXSwKLSAgICBBQ19IRUxQX1NUUklORyhbLS13aXRob3V0LWFyaXRoLWRlY10sIFtPbWl0IGFyaXRobWV0aWMgZGVjb2Rpbmcgc3VwcG9ydF0pKQorICBBQ19IRUxQX1NUUklORyhbLS13aXRob3V0LWFyaXRoLWRlY10sCisgICAgW0RvIG5vdCBpbmNsdWRlIGFyaXRobWV0aWMgZGVjb2Rpbmcgc3VwcG9ydF0pKQogaWYgdGVzdCAieCR3aXRoX2FyaXRoX2RlYyIgPSAieG5vIjsgdGhlbgotICAgIEFDX01TR19SRVNVTFQobm8pCisgIEFDX01TR19SRVNVTFQobm8pCisgIFJQTV9DT05GSUdfQVJHUz0iJFJQTV9DT05GSUdfQVJHUyAtLXdpdGhvdXQtYXJpdGgtZGVjIgogZWxzZQotICAgIEFDX0RFRklORShbRF9BUklUSF9DT0RJTkdfU1VQUE9SVEVEXSwgWzFdLCBbU3VwcG9ydCBhcml0aG1ldGljIGRlY29kaW5nXSkKLSAgICBBQ19NU0dfUkVTVUxUKHllcykKKyAgQUNfREVGSU5FKFtEX0FSSVRIX0NPRElOR19TVVBQT1JURURdLCBbMV0sIFtTdXBwb3J0IGFyaXRobWV0aWMgZGVjb2RpbmddKQorICBBQ19NU0dfUkVTVUxUKHllcykKIGZpCiBBTV9DT05ESVRJT05BTChbV0lUSF9BUklUSF9ERUNdLCBbdGVzdCAieCR3aXRoX2FyaXRoX2RlYyIgIT0gInhubyJdKQogCi1BTV9DT05ESVRJT05BTChbV0lUSF9BUklUSF0sIFt0ZXN0ICJ4JHdpdGhfYXJpdGhfZGVjIiAhPSAieG5vIiAtbyAieCR3aXRoX2FyaXRoX2VuYyIgIT0gInhubyJdKQorQU1fQ09ORElUSU9OQUwoW1dJVEhfQVJJVEhdLAorICBbdGVzdCAieCR3aXRoX2FyaXRoX2RlYyIgIT0gInhubyIgLW8gIngkd2l0aF9hcml0aF9lbmMiICE9ICJ4bm8iXSkKIAorIyBUdXJib0pQRUcgc3VwcG9ydAorQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIFR1cmJvSlBFRyBDIHdyYXBwZXJdKQorQUNfQVJHX1dJVEgoW3R1cmJvanBlZ10sCisgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGhvdXQtdHVyYm9qcGVnXSwKKyAgICBbRG8gbm90IGluY2x1ZGUgdGhlIFR1cmJvSlBFRyB3cmFwcGVyIGxpYnJhcnkgYW5kIGFzc29jaWF0ZWQgdGVzdCBwcm9ncmFtc10pKQoraWYgdGVzdCAieCR3aXRoX3R1cmJvanBlZyIgPSAieG5vIjsgdGhlbgorICBBQ19NU0dfUkVTVUxUKG5vKQorICBSUE1fQ09ORklHX0FSR1M9IiRSUE1fQ09ORklHX0FSR1MgLS13aXRob3V0LXR1cmJvanBlZyIKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVCh5ZXMpCitmaQorCisjIEphdmEgc3VwcG9ydAogQUNfQVJHX1ZBUihKQVZBQywgW0phdmEgY29tcGlsZXIgY29tbWFuZCAoZGVmYXVsdDogamF2YWMpXSkKIGlmIHRlc3QgIngkSkFWQUMiID0gIngiOyB0aGVuCiAgIEpBVkFDPWphdmFjCkBAIC0yMzAsNTUgKzMzNyw1OCBAQAogICBKQVZBPWphdmEKIGZpCiBBQ19TVUJTVChKQVZBKQotQUNfQVJHX1ZBUihKTklfQ0ZMQUdTLCBbQyBjb21waWxlciBmbGFncyBuZWVkZWQgdG8gaW5jbHVkZSBqbmkuaCAoZGVmYXVsdDogLUkvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9KYXZhVk0uZnJhbWV3b3JrL0hlYWRlcnMgb24gT1MgWCwgJy1JL3Vzci9qYXZhL2luY2x1ZGUgLUkvdXNyL2phdmEvaW5jbHVkZS9zb2xhcmlzJyBvbiBTb2xhcmlzLCBhbmQgJy1JL3Vzci9qYXZhL2RlZmF1bHQvaW5jbHVkZSAtSS91c3IvamF2YS9kZWZhdWx0L2luY2x1ZGUvbGludXgnIG9uIExpbnV4KV0pCitBQ19BUkdfVkFSKEpOSV9DRkxBR1MsCisgIFtDIGNvbXBpbGVyIGZsYWdzIG5lZWRlZCB0byBpbmNsdWRlIGpuaS5oIChkZWZhdWx0OiAtSS9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0phdmFWTS5mcmFtZXdvcmsvSGVhZGVycyBvbiBPUyBYLCAnLUkvdXNyL2phdmEvaW5jbHVkZSAtSS91c3IvamF2YS9pbmNsdWRlL3NvbGFyaXMnIG9uIFNvbGFyaXMsIGFuZCAnLUkvdXNyL2phdmEvZGVmYXVsdC9pbmNsdWRlIC1JL3Vzci9qYXZhL2RlZmF1bHQvaW5jbHVkZS9saW51eCcgb24gTGludXgpXSkKIAotQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIFR1cmJvSlBFRy9PU1MgSmF2YSB3cmFwcGVyXSkKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBUdXJib0pQRUcgSmF2YSB3cmFwcGVyXSkKIEFDX0FSR19XSVRIKFtqYXZhXSwKLSAgICBBQ19IRUxQX1NUUklORyhbLS13aXRoLWphdmFdLFtCdWlsZCBKYXZhIHdyYXBwZXIgZm9yIHRoZSBUdXJib0pQRUcvT1NTIGxpYnJhcnldKSkKKyAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1qYXZhXSwgW0J1aWxkIEphdmEgd3JhcHBlciBmb3IgdGhlIFR1cmJvSlBFRyBsaWJyYXJ5XSkpCitpZiB0ZXN0ICJ4JHdpdGhfdHVyYm9qcGVnIiA9ICJ4bm8iOyB0aGVuCisgIHdpdGhfamF2YT1ubworZmkKIAotUlBNX0NPTkZJR19BUkdTPQogV0lUSF9KQVZBPTAKIGlmIHRlc3QgIngkd2l0aF9qYXZhIiA9ICJ4eWVzIjsgdGhlbgotICAgIEFDX01TR19SRVNVTFQoeWVzKQorICBBQ19NU0dfUkVTVUxUKHllcykKIAotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIGRhcndpbiopCi0gICAgICAgIERFRkFVTFRfSk5JX0NGTEFHUz0tSS9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0phdmFWTS5mcmFtZXdvcmsvSGVhZGVycwotICAgICAgICA7OwotICAgICAgc29sYXJpcyopCi0gICAgICAgIERFRkFVTFRfSk5JX0NGTEFHUz0nLUkvdXNyL2phdmEvaW5jbHVkZSAtSS91c3IvamF2YS9pbmNsdWRlL3NvbGFyaXMnCi0gICAgICAgIDs7Ci0gICAgICBsaW51eCopCi0gICAgICAgIERFRkFVTFRfSk5JX0NGTEFHUz0nLUkvdXNyL2phdmEvZGVmYXVsdC9pbmNsdWRlIC1JL3Vzci9qYXZhL2RlZmF1bHQvaW5jbHVkZS9saW51eCcKLSAgICAgICAgOzsKLSAgICBlc2FjCi0gICAgaWYgdGVzdCAieCRKTklfQ0ZMQUdTIiA9ICJ4IjsgdGhlbgotICAgICAgICBKTklfQ0ZMQUdTPSRERUZBVUxUX0pOSV9DRkxBR1MKLSAgICBmaQorICBjYXNlICRob3N0X29zIGluCisgICAgZGFyd2luKikKKyAgICAgIERFRkFVTFRfSk5JX0NGTEFHUz0tSS9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0phdmFWTS5mcmFtZXdvcmsvSGVhZGVycworICAgICAgOzsKKyAgICBzb2xhcmlzKikKKyAgICAgIERFRkFVTFRfSk5JX0NGTEFHUz0nLUkvdXNyL2phdmEvaW5jbHVkZSAtSS91c3IvamF2YS9pbmNsdWRlL3NvbGFyaXMnCisgICAgICA7OworICAgIGxpbnV4KikKKyAgICAgIERFRkFVTFRfSk5JX0NGTEFHUz0nLUkvdXNyL2phdmEvZGVmYXVsdC9pbmNsdWRlIC1JL3Vzci9qYXZhL2RlZmF1bHQvaW5jbHVkZS9saW51eCcKKyAgICAgIDs7CisgIGVzYWMKKyAgaWYgdGVzdCAieCRKTklfQ0ZMQUdTIiA9ICJ4IjsgdGhlbgorICAgIEpOSV9DRkxBR1M9JERFRkFVTFRfSk5JX0NGTEFHUworICBmaQogCi0gICAgU0FWRV9DUFBGTEFHUz0ke0NQUEZMQUdTfQotICAgIENQUEZMQUdTPSIke0NQUEZMQUdTfSAke0pOSV9DRkxBR1N9IgotICAgIEFDX0NIRUNLX0hFQURFUlMoW2puaS5oXSwgW0RVTU1ZPTFdLAotICAgICAgICBbQUNfTVNHX0VSUk9SKFtDb3VsZCBub3QgZmluZCBKTkkgaGVhZGVyIGZpbGVdKV0pCi0gICAgQ1BQRkxBR1M9JHtTQVZFX0NQUEZMQUdTfQotICAgIEFDX1NVQlNUKEpOSV9DRkxBR1MpCisgIFNBVkVfQ1BQRkxBR1M9JHtDUFBGTEFHU30KKyAgQ1BQRkxBR1M9IiR7Q1BQRkxBR1N9ICR7Sk5JX0NGTEFHU30iCisgIEFDX0NIRUNLX0hFQURFUlMoW2puaS5oXSwgW0RVTU1ZPTFdLAorICAgIFtBQ19NU0dfRVJST1IoW0NvdWxkIG5vdCBmaW5kIEpOSSBoZWFkZXIgZmlsZV0pXSkKKyAgQ1BQRkxBR1M9JHtTQVZFX0NQUEZMQUdTfQorICBBQ19TVUJTVChKTklfQ0ZMQUdTKQogCi0gICAgUlBNX0NPTkZJR19BUkdTPS0td2l0aC1qYXZhCi0gICAgSkFWQV9SUE1fQ09OVEVOVFNfMT0nJWRpciAvb3B0LyV7bmFtZX0vY2xhc3NlcycKLSAgICBKQVZBX1JQTV9DT05URU5UU18yPS9vcHQvJXtuYW1lfS9jbGFzc2VzL3R1cmJvanBlZy5qYXIKLSAgICBXSVRIX0pBVkE9MQorICBSUE1fQ09ORklHX0FSR1M9IiRSUE1fQ09ORklHX0FSR1MgLS13aXRoLWphdmEiCisgIEpBVkFfUlBNX0NPTlRFTlRTXzE9JyVkaXIgJXtfZGF0YWRpcn0vY2xhc3NlcycKKyAgSkFWQV9SUE1fQ09OVEVOVFNfMj0le19kYXRhZGlyfS9jbGFzc2VzL3R1cmJvanBlZy5qYXIKKyAgV0lUSF9KQVZBPTEKIGVsc2UKLSAgICBBQ19NU0dfUkVTVUxUKG5vKQorICBBQ19NU0dfUkVTVUxUKG5vKQogZmkKIEFNX0NPTkRJVElPTkFMKFtXSVRIX0pBVkFdLCBbdGVzdCAieCR3aXRoX2phdmEiID0gInh5ZXMiXSkKIEFDX1NVQlNUKFdJVEhfSkFWQSkKIEFDX1NVQlNUKEpBVkFfUlBNX0NPTlRFTlRTXzEpCiBBQ19TVUJTVChKQVZBX1JQTV9DT05URU5UU18yKQotQUNfU1VCU1QoUlBNX0NPTkZJR19BUkdTKQogCiAjIG9wdGlvbmFsbHkgZm9yY2UgdXNpbmcgZ2FzLXByZXByb2Nlc3Nvci5wbCBmb3IgY29tcGF0aWJpbGl0eSB0ZXN0aW5nCiBBQ19BUkdfV0lUSChbZ2FzLXByZXByb2Nlc3Nvcl0sCi0gICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1nYXMtcHJlcHJvY2Vzc29yXSxbRm9yY2UgdXNpbmcgZ2FzLXByZXByb2Nlc3Nvci5wbCBvbiBBUk0uXSkpCisgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGgtZ2FzLXByZXByb2Nlc3Nvcl0sCisgICAgW0ZvcmNlIHVzaW5nIGdhcy1wcmVwcm9jZXNzb3IucGwgb24gQVJNLl0pKQogaWYgdGVzdCAieCR7d2l0aF9nYXNfcHJlcHJvY2Vzc29yfSIgPSAieHllcyI7IHRoZW4KICAgY2FzZSAkaG9zdF9vcyBpbgogICAgIGRhcndpbiopCkBAIC0yOTMsOCArNDAzLDEyIEBACiAKICMgU0lNRCBpcyBvcHRpb25hbAogQUNfQVJHX1dJVEgoW3NpbWRdLAotICAgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGhvdXQtc2ltZF0sW09taXQgU0lNRCBleHRlbnNpb25zLl0pKQorICBBQ19IRUxQX1NUUklORyhbLS13aXRob3V0LXNpbWRdLCBbRG8gbm90IGluY2x1ZGUgU0lNRCBleHRlbnNpb25zXSkpCiBpZiB0ZXN0ICJ4JHt3aXRoX3NpbWR9IiAhPSAieG5vIjsgdGhlbgorICByZXF1aXJlX3NpbWQ9bm8KKyAgaWYgdGVzdCAieCR7d2l0aF9zaW1kfSIgPSAieHllcyI7IHRoZW4KKyAgICByZXF1aXJlX3NpbWQ9eWVzCisgIGZpCiAgICMgQ2hlY2sgaWYgd2UncmUgb24gYSBzdXBwb3J0ZWQgQ1BVCiAgIEFDX01TR19DSEVDS0lORyhbaWYgd2UgaGF2ZSBTSU1EIG9wdGltaXNhdGlvbnMgZm9yIGNwdSB0eXBlXSkKICAgY2FzZSAiJGhvc3RfY3B1IiBpbgpAQCAtMzAyLDEyICs0MTYsMTIgQEAKICAgICAgIEFDX01TR19SRVNVTFQoW3llcyAoeDg2XzY0KV0pCiAgICAgICBBQ19QUk9HX05BU00KICAgICAgIHNpbWRfYXJjaD14ODZfNjQKLSAgICA7OworICAgICAgOzsKICAgICBpKjg2IHwgeDg2IHwgaWEzMikKICAgICAgIEFDX01TR19SRVNVTFQoW3llcyAoaTM4NildKQogICAgICAgQUNfUFJPR19OQVNNCiAgICAgICBzaW1kX2FyY2g9aTM4NgotICAgIDs7CisgICAgICA7OwogICAgIGFybSopCiAgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXMgKGFybSldKQogICAgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiB0aGUgYXNzZW1ibGVyIGlzIEdOVS1jb21wYXRpYmxlIGFuZCBjYW4gYmUgdXNlZF0pCkBAIC0zMTUsMTkgKzQyOSwzMSBAQAogICAgICAgICBbQUNfTVNHX1JFU1VMVChbeWVzXSkKICAgICAgICAgIHNpbWRfYXJjaD1hcm1dLAogICAgICAgICBbQUNfTVNHX1JFU1VMVChbbm9dKQotICAgICAgICAgd2l0aF9zaW1kPW5vCi0gICAgICAgICBBQ19NU0dfV0FSTihbU0lNRCBzdXBwb3J0IGNhbid0IGJlIGVuYWJsZWQuICBQZXJmb3JtYW5jZSB3aWxsIHN1ZmZlci5dKV0pCi0gICAgOzsKKyAgICAgICAgIHdpdGhfc2ltZD1ub10pCisgICAgICBpZiB0ZXN0ICJ4JHt3aXRoX3NpbWR9IiA9ICJ4bm8iOyB0aGVuCisgICAgICAgIGlmIHRlc3QgIngke3JlcXVpcmVfc2ltZH0iID0gInh5ZXMiOyB0aGVuCisgICAgICAgICAgQUNfTVNHX0VSUk9SKFtTSU1EIHN1cHBvcnQgY2FuJ3QgYmUgZW5hYmxlZC5dKQorICAgICAgICBlbHNlCisgICAgICAgICAgQUNfTVNHX1dBUk4oW1NJTUQgc3VwcG9ydCBjYW4ndCBiZSBlbmFibGVkLiAgUGVyZm9ybWFuY2Ugd2lsbCBzdWZmZXIuXSkKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgICA7OwogICAgICopCiAgICAgICBBQ19NU0dfUkVTVUxUKFtubyAoIiRob3N0X2NwdSIpXSkKLSAgICAgIEFDX01TR19XQVJOKFtTSU1EIHN1cHBvcnQgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyBDUFUuICBQZXJmb3JtYW5jZSB3aWxsIHN1ZmZlci5dKQogICAgICAgd2l0aF9zaW1kPW5vOwotICAgIDs7CisgICAgICBpZiB0ZXN0ICJ4JHtyZXF1aXJlX3NpbWR9IiA9ICJ4eWVzIjsgdGhlbgorICAgICAgICBBQ19NU0dfRVJST1IoW1NJTUQgc3VwcG9ydCBub3QgYXZhaWxhYmxlIGZvciB0aGlzIENQVS5dKQorICAgICAgZWxzZQorICAgICAgICBBQ19NU0dfV0FSTihbU0lNRCBzdXBwb3J0IG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgQ1BVLiAgUGVyZm9ybWFuY2Ugd2lsbCBzdWZmZXIuXSkKKyAgICAgIGZpCisgICAgICA7OwogICBlc2FjCiAKICAgaWYgdGVzdCAieCR7d2l0aF9zaW1kfSIgIT0gInhubyI7IHRoZW4KICAgICBBQ19ERUZJTkUoW1dJVEhfU0lNRF0sIFsxXSwgW1VzZSBhY2NlbGVyYXRlZCBTSU1EIHJvdXRpbmVzLl0pCiAgIGZpCitlbHNlCisgIFJQTV9DT05GSUdfQVJHUz0iJFJQTV9DT05GSUdfQVJHUyAtLXdpdGhvdXQtc2ltZCIKIGZpCiAKIEFNX0NPTkRJVElPTkFMKFtXSVRIX1NJTURdLCBbdGVzdCAieCR3aXRoX3NpbWQiICE9ICJ4bm8iXSkKQEAgLTMzNiw2ICs0NjIsMTMgQEAKIEFNX0NPTkRJVElPTkFMKFtTSU1EX1g4Nl82NF0sIFt0ZXN0ICJ4JHNpbWRfYXJjaCIgPSAieHg4Nl82NCJdKQogQU1fQ09ORElUSU9OQUwoW1NJTURfQVJNXSwgW3Rlc3QgIngkc2ltZF9hcmNoIiA9ICJ4YXJtIl0pCiBBTV9DT05ESVRJT05BTChbWDg2XzY0XSwgW3Rlc3QgIngkaG9zdF9jcHUiID0gInh4ODZfNjQiIC1vICJ4JGhvc3RfY3B1IiA9ICJ4YW1kNjQiXSkKK0FNX0NPTkRJVElPTkFMKFtXSVRIX1RVUkJPSlBFR10sIFt0ZXN0ICJ4JHdpdGhfdHVyYm9qcGVnIiAhPSAieG5vIl0pCisKK0FDX0FSR19WQVIoUEtHTkFNRSwgW2Rpc3RyaWJ1dGlvbiBwYWNrYWdlIG5hbWUgKGRlZmF1bHQ6IGxpYmpwZWctdHVyYm8pXSkKK2lmIHRlc3QgIngkUEtHTkFNRSIgPSAieCI7IHRoZW4KKyAgUEtHTkFNRT0kUEFDS0FHRV9OQU1FCitmaQorQUNfU1VCU1QoUEtHTkFNRSkKIAogY2FzZSAiJGhvc3RfY3B1IiBpbgogICB4ODZfNjQpCkBAIC0zNDksOSArNDgyLDEwIEBACiBlc2FjCiAKIEFDX1NVQlNUKFJQTUFSQ0gpCitBQ19TVUJTVChSUE1fQ09ORklHX0FSR1MpCiBBQ19TVUJTVChERUJBUkNIKQogQUNfU1VCU1QoQlVJTEQpCi1BQ19ERUZJTkVfVU5RVU9URUQoW0JVSUxEXSwgIiRCVUlMRCIsIFtCdWlsZCBudW1iZXJdKQorQUNfREVGSU5FX1VOUVVPVEVEKFtCVUlMRF0sICIkQlVJTEQiLCBbbGlianBlZy10dXJibyBidWlsZCBudW1iZXJdKQogCiAjIGpjb25maWcuaCBpcyB0aGUgZmlsZSB3ZSB1c2UsIGJ1dCB3ZSBoYXZlIGFub3RoZXIgYmVmb3JlIHRoYXQgdG8KICMgZm9vbCBhdXRvaGVhZGVyLiB0aGUgcmVhc29uIGlzIHRoYXQgd2UgaW5jbHVkZSB0aGlzIGhlYWRlciBpbiBvdXIKQEAgLTM1OSwxOCArNDkzLDIzIEBACiAjIGpjb25maWcuaCBpcyBhIG1pbmltYWwgdmVyc2lvbiB0aGF0IGFsbG93cyB0aGlzIHBhY2thZ2UgdG8gYmUgYnVpbHQKIEFDX0NPTkZJR19IRUFERVJTKFtjb25maWcuaF0pCiBBQ19DT05GSUdfSEVBREVSUyhbamNvbmZpZy5oXSkKLUFDX0NPTkZJR19GSUxFUyhbcGtnc2NyaXB0cy9saWJqcGVnLXR1cmJvLnNwZWM6cmVsZWFzZS9saWJqcGVnLXR1cmJvLnNwZWMuaW5dKQotQUNfQ09ORklHX0ZJTEVTKFtwa2dzY3JpcHRzL21ha2VjeWd3aW5wa2c6cmVsZWFzZS9tYWtlY3lnd2lucGtnLmluXSkKLUFDX0NPTkZJR19GSUxFUyhbcGtnc2NyaXB0cy9tYWtlZHBrZzpyZWxlYXNlL21ha2VkcGtnLmluXSkKLUFDX0NPTkZJR19GSUxFUyhbcGtnc2NyaXB0cy9tYWtlbWFjcGtnOnJlbGVhc2UvbWFrZW1hY3BrZy5pbl0pCitBQ19DT05GSUdfSEVBREVSUyhbamNvbmZpZ2ludC5oXSkKK0FDX0NPTkZJR19GSUxFUyhbcGtnc2NyaXB0cy9saWJqcGVnLXR1cmJvLnNwZWMudG1wbDpyZWxlYXNlL2xpYmpwZWctdHVyYm8uc3BlYy5pbl0pCitBQ19DT05GSUdfRklMRVMoW3BrZ3NjcmlwdHMvbWFrZWN5Z3dpbnBrZy50bXBsOnJlbGVhc2UvbWFrZWN5Z3dpbnBrZy5pbl0pCitBQ19DT05GSUdfRklMRVMoW3BrZ3NjcmlwdHMvbWFrZWRwa2cudG1wbDpyZWxlYXNlL21ha2VkcGtnLmluXSkKK0FDX0NPTkZJR19GSUxFUyhbcGtnc2NyaXB0cy9tYWtlbWFjcGtnLnRtcGw6cmVsZWFzZS9tYWtlbWFjcGtnLmluXSkKIEFDX0NPTkZJR19GSUxFUyhbcGtnc2NyaXB0cy9EZXNjcmlwdGlvbi5wbGlzdDpyZWxlYXNlL0Rlc2NyaXB0aW9uLnBsaXN0LmluXSkKIEFDX0NPTkZJR19GSUxFUyhbcGtnc2NyaXB0cy9JbmZvLnBsaXN0OnJlbGVhc2UvSW5mby5wbGlzdC5pbl0pCi1BQ19DT05GSUdfRklMRVMoW3BrZ3NjcmlwdHMvdW5pbnN0YWxsOnJlbGVhc2UvdW5pbnN0YWxsLmluXSkKLUFDX0NPTkZJR19GSUxFUyhbcGtnc2NyaXB0cy9tYWtlc3VucGtnOnJlbGVhc2UvbWFrZXN1bnBrZy5pbl0pCi1BQ19DT05GSUdfRklMRVMoW3BrZ3NjcmlwdHMvcGtnaW5mbzpyZWxlYXNlL3BrZ2luZm8uaW5dKQotQUNfQ09ORklHX0ZJTEVTKFt0amJlbmNodGVzdF0pCi1BQ19DT05GSUdfRklMRVMoW3RqZXhhbXBsZXRlc3RdKQorQUNfQ09ORklHX0ZJTEVTKFtwa2dzY3JpcHRzL3VuaW5zdGFsbC50bXBsOnJlbGVhc2UvdW5pbnN0YWxsLmluXSkKK2lmIHRlc3QgIngkd2l0aF90dXJib2pwZWciICE9ICJ4bm8iOyB0aGVuCisgIEFDX0NPTkZJR19GSUxFUyhbdGpiZW5jaHRlc3RdKQorZmkKK2lmIHRlc3QgIngkd2l0aF9qYXZhIiA9ICJ4eWVzIjsgdGhlbgorICBBQ19DT05GSUdfRklMRVMoW3RqYmVuY2h0ZXN0LmphdmFdKQorICBBQ19DT05GSUdfRklMRVMoW3RqZXhhbXBsZXRlc3RdKQorZmkKIEFDX0NPTkZJR19GSUxFUyhbbGlianBlZy5tYXBdKQogQUNfQ09ORklHX0ZJTEVTKFtNYWtlZmlsZSBzaW1kL01ha2VmaWxlXSkKIEFDX0NPTkZJR19GSUxFUyhbamF2YS9NYWtlZmlsZV0pCitBQ19DT05GSUdfRklMRVMoW21kNS9NYWtlZmlsZV0pCiBBQ19PVVRQVVQKZGlmZiAtLWdpdCBhL2RqcGVnLjEgYi9kanBlZy4xCmluZGV4IGQ5ODA0ZTMuLjliMDQwYWUgMTAwNjQ0Ci0tLSBhL2RqcGVnLjEKKysrIGIvZGpwZWcuMQpAQCAtMSw0ICsxLDQgQEAKLS5USCBESlBFRyAxICIxIEphbnVhcnkgMjAxMyIKKy5USCBESlBFRyAxICIxMSBNYXkgMjAxNCIKIC5TSCBOQU1FCiBkanBlZyBcLSBkZWNvbXByZXNzIGEgSlBFRyBmaWxlIHRvIGFuIGltYWdlIGZpbGUKIC5TSCBTWU5PUFNJUwpAQCAtNTUsMTUgKzU1LDE5IEBACiBlcXVpdmFsZW50IHRvIFxmQlwtZGN0IGZhc3QgXC1ub3Ntb290aCBcLW9uZXBhc3MgXC1kaXRoZXIgb3JkZXJlZFxmUi4KIC5UUAogLkIgXC1ncmF5c2NhbGUKLUZvcmNlIGdyYXktc2NhbGUgb3V0cHV0IGV2ZW4gaWYgSlBFRyBmaWxlIGlzIGNvbG9yLiAgVXNlZnVsIGZvciB2aWV3aW5nIG9uCitGb3JjZSBncmF5c2NhbGUgb3V0cHV0IGV2ZW4gaWYgSlBFRyBmaWxlIGlzIGNvbG9yLiAgVXNlZnVsIGZvciB2aWV3aW5nIG9uCiBtb25vY2hyb21lIGRpc3BsYXlzOyBhbHNvLAogLkIgZGpwZWcKIHJ1bnMgbm90aWNlYWJseSBmYXN0ZXIgaW4gdGhpcyBtb2RlLgogLlRQCisuQiBcLXJnYgorRm9yY2UgUkdCIG91dHB1dCBldmVuIGlmIEpQRUcgZmlsZSBpcyBncmF5c2NhbGUuCisuVFAKIC5CSSBcLXNjYWxlICIgTS9OIgogU2NhbGUgdGhlIG91dHB1dCBpbWFnZSBieSBhIGZhY3RvciBNL04uICBDdXJyZW50bHkgdGhlIHNjYWxlIGZhY3RvciBtdXN0IGJlCi0xLzEsIDEvMiwgMS80LCBvciAxLzguICBTY2FsaW5nIGlzIGhhbmR5IGlmIHRoZSBpbWFnZSBpcyBsYXJnZXIgdGhhbiB5b3VyCi1zY3JlZW47IGFsc28sCitNLzgsIHdoZXJlIE0gaXMgYW4gaW50ZWdlciBiZXR3ZWVuIDEgYW5kIDE2IGluY2x1c2l2ZSwgb3IgYW55IHJlZHVjZWQgZnJhY3Rpb24KK3RoZXJlb2YgKHN1Y2ggYXMgMS8yLCAzLzQsIGV0Yy4pICBTY2FsaW5nIGlzIGhhbmR5IGlmIHRoZSBpbWFnZSBpcyBsYXJnZXIgdGhhbgoreW91ciBzY3JlZW47IGFsc28sCiAuQiBkanBlZwogcnVucyBtdWNoIGZhc3RlciB3aGVuIHNjYWxpbmcgZG93biB0aGUgb3V0cHV0LgogLlRQCkBAIC03Myw3ICs3Nyw3IEBACiAuQiBcLWNvbG9ycwogb3IKIC5CIFwtZ3JheXNjYWxlCi1pcyBzcGVjaWZpZWQsIG9yIGlmIHRoZSBKUEVHIGZpbGUgaXMgZ3JheS1zY2FsZTsgb3RoZXJ3aXNlLCAyNC1iaXQgZnVsbC1jb2xvcgoraXMgc3BlY2lmaWVkLCBvciBpZiB0aGUgSlBFRyBmaWxlIGlzIGdyYXlzY2FsZTsgb3RoZXJ3aXNlLCAyNC1iaXQgZnVsbC1jb2xvcgogZm9ybWF0IGlzIGVtaXR0ZWQuCiAuVFAKIC5CIFwtZ2lmCkBAIC04NywxMiArOTEsMTIgQEAKIC5CIFwtY29sb3JzCiBvcgogLkIgXC1ncmF5c2NhbGUKLWlzIHNwZWNpZmllZCwgb3IgaWYgdGhlIEpQRUcgZmlsZSBpcyBncmF5LXNjYWxlOyBvdGhlcndpc2UsIDI0LWJpdCBmdWxsLWNvbG9yCitpcyBzcGVjaWZpZWQsIG9yIGlmIHRoZSBKUEVHIGZpbGUgaXMgZ3JheXNjYWxlOyBvdGhlcndpc2UsIDI0LWJpdCBmdWxsLWNvbG9yCiBmb3JtYXQgaXMgZW1pdHRlZC4KIC5UUAogLkIgXC1wbm0KIFNlbGVjdCBQQk1QTFVTIChQUE0vUEdNKSBvdXRwdXQgZm9ybWF0ICh0aGlzIGlzIHRoZSBkZWZhdWx0IGZvcm1hdCkuCi1QR00gaXMgZW1pdHRlZCBpZiB0aGUgSlBFRyBmaWxlIGlzIGdyYXktc2NhbGUgb3IgaWYKK1BHTSBpcyBlbWl0dGVkIGlmIHRoZSBKUEVHIGZpbGUgaXMgZ3JheXNjYWxlIG9yIGlmCiAuQiBcLWdyYXlzY2FsZQogaXMgc3BlY2lmaWVkOyBvdGhlcndpc2UgUFBNIGlzIGVtaXR0ZWQuCiAuVFAKQEAgLTEwMCw4ICsxMDQsOCBAQAogU2VsZWN0IFJMRSBvdXRwdXQgZm9ybWF0LiAgKFJlcXVpcmVzIFVSVCBsaWJyYXJ5LikKIC5UUAogLkIgXC10YXJnYQotU2VsZWN0IFRhcmdhIG91dHB1dCBmb3JtYXQuICBHcmF5LXNjYWxlIGZvcm1hdCBpcyBlbWl0dGVkIGlmIHRoZSBKUEVHIGZpbGUgaXMKLWdyYXktc2NhbGUgb3IgaWYKK1NlbGVjdCBUYXJnYSBvdXRwdXQgZm9ybWF0LiAgR3JheXNjYWxlIGZvcm1hdCBpcyBlbWl0dGVkIGlmIHRoZSBKUEVHIGZpbGUgaXMKK2dyYXlzY2FsZSBvciBpZgogLkIgXC1ncmF5c2NhbGUKIGlzIHNwZWNpZmllZDsgb3RoZXJ3aXNlLCBjb2xvcm1hcHBlZCBmb3JtYXQgaXMgZW1pdHRlZCBpZgogLkIgXC1jb2xvcnMKQEAgLTExNCwxNCArMTE4LDI4IEBACiAuVFAKIC5CIFwtZGN0IGZhc3QKIFVzZSBmYXN0IGludGVnZXIgRENUIChsZXNzIGFjY3VyYXRlKS4KK0luIGxpYmpwZWctdHVyYm8sIHRoZSBmYXN0IG1ldGhvZCBpcyBnZW5lcmFsbHkgYWJvdXQgNS0xNSUgZmFzdGVyIHRoYW4gdGhlIGludAorbWV0aG9kIHdoZW4gdXNpbmcgdGhlIHg4Ni94ODYtNjQgU0lNRCBleHRlbnNpb25zIChyZXN1bHRzIG1heSB2YXJ5IHdpdGggb3RoZXIKK1NJTUQgaW1wbGVtZW50YXRpb25zLCBvciB3aGVuIHVzaW5nIGxpYmpwZWctdHVyYm8gd2l0aG91dCBTSU1EIGV4dGVuc2lvbnMuKSAgSWYKK3RoZSBKUEVHIGltYWdlIHdhcyBjb21wcmVzc2VkIHVzaW5nIGEgcXVhbGl0eSBsZXZlbCBvZiA4NSBvciBiZWxvdywgdGhlbiB0aGVyZQorc2hvdWxkIGJlIGxpdHRsZSBvciBubyBwZXJjZXB0aWJsZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHR3byBhbGdvcml0aG1zLiAgV2hlbgorZGVjb21wcmVzc2luZyBpbWFnZXMgdGhhdCB3ZXJlIGNvbXByZXNzZWQgdXNpbmcgcXVhbGl0eSBsZXZlbHMgYWJvdmUgODUsCitob3dldmVyLCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBmYXN0IGFuZCBpbnQgbWV0aG9kcyBiZWNvbWVzIG1vcmUKK3Byb25vdW5jZWQuICBXaXRoIGltYWdlcyBjb21wcmVzc2VkIHVzaW5nIHF1YWxpdHk9OTcsIGZvciBpbnN0YW5jZSwgdGhlIGZhc3QKK21ldGhvZCBpbmN1cnMgZ2VuZXJhbGx5IGFib3V0IGEgNC02IGRCIGxvc3MgKGluIFBTTlIpIHJlbGF0aXZlIHRvIHRoZSBpbnQKK21ldGhvZCwgYnV0IHRoaXMgY2FuIGJlIGxhcmdlciBmb3Igc29tZSBpbWFnZXMuICBJZiB5b3UgY2FuIGF2b2lkIGl0LCBkbyBub3QKK3VzZSB0aGUgZmFzdCBtZXRob2Qgd2hlbiBkZWNvbXByZXNzaW5nIGltYWdlcyB0aGF0IHdlcmUgY29tcHJlc3NlZCB1c2luZworcXVhbGl0eSBsZXZlbHMgYWJvdmUgOTcuICBUaGUgYWxnb3JpdGhtIG9mdGVuIGRlZ2VuZXJhdGVzIGZvciBzdWNoIGltYWdlcyBhbmQKK2NhbiBhY3R1YWxseSBwcm9kdWNlIGEgbW9yZSBsb3NzeSBvdXRwdXQgaW1hZ2UgdGhhbiBpZiB0aGUgSlBFRyBpbWFnZSBoYWQgYmVlbgorY29tcHJlc3NlZCB1c2luZyBsb3dlciBxdWFsaXR5IGxldmVscy4KIC5UUAogLkIgXC1kY3QgZmxvYXQKIFVzZSBmbG9hdGluZy1wb2ludCBEQ1QgbWV0aG9kLgotVGhlIGZsb2F0IG1ldGhvZCBpcyB2ZXJ5IHNsaWdodGx5IG1vcmUgYWNjdXJhdGUgdGhhbiB0aGUgaW50IG1ldGhvZCwgYnV0IGlzCi1tdWNoIHNsb3dlciB1bmxlc3MgeW91ciBtYWNoaW5lIGhhcyB2ZXJ5IGZhc3QgZmxvYXRpbmctcG9pbnQgaGFyZHdhcmUuICBBbHNvCi1ub3RlIHRoYXQgcmVzdWx0cyBvZiB0aGUgZmxvYXRpbmctcG9pbnQgbWV0aG9kIG1heSB2YXJ5IHNsaWdodGx5IGFjcm9zcwotbWFjaGluZXMsIHdoaWxlIHRoZSBpbnRlZ2VyIG1ldGhvZHMgc2hvdWxkIGdpdmUgdGhlIHNhbWUgcmVzdWx0cyBldmVyeXdoZXJlLgotVGhlIGZhc3QgaW50ZWdlciBtZXRob2QgaXMgbXVjaCBsZXNzIGFjY3VyYXRlIHRoYW4gdGhlIG90aGVyIHR3by4KK1RoZSBmbG9hdCBtZXRob2QgaXMgbWFpbmx5IGEgbGVnYWN5IGZlYXR1cmUuICBJdCBkb2VzIG5vdCBwcm9kdWNlIHNpZ25pZmljYW50bHkKK21vcmUgYWNjdXJhdGUgcmVzdWx0cyB0aGFuIHRoZSBpbnQgbWV0aG9kLCBhbmQgaXQgaXMgbXVjaCBzbG93ZXIuICBUaGUgZmxvYXQKK21ldGhvZCBtYXkgYWxzbyBnaXZlIGRpZmZlcmVudCByZXN1bHRzIG9uIGRpZmZlcmVudCBtYWNoaW5lcyBkdWUgdG8gdmFyeWluZworcm91bmRvZmYgYmVoYXZpb3IsIHdoZXJlYXMgdGhlIGludGVnZXIgbWV0aG9kcyBzaG91bGQgZ2l2ZSB0aGUgc2FtZSByZXN1bHRzIG9uCithbGwgbWFjaGluZXMuCiAuVFAKIC5CIFwtZGl0aGVyIGZzCiBVc2UgRmxveWQtU3RlaW5iZXJnIGRpdGhlcmluZyBpbiBjb2xvciBxdWFudGl6YXRpb24uCkBAIC0xNTksNyArMTc3LDcgQEAKIGlzIGlnbm9yZWQgdW5sZXNzIHlvdSBhbHNvIHNheQogLkIgXC1jb2xvcnMKIC5JUiBOIC4KLUFsc28sIHRoZSBvbmUtcGFzcyBtZXRob2QgaXMgYWx3YXlzIHVzZWQgZm9yIGdyYXktc2NhbGUgb3V0cHV0ICh0aGUgdHdvLXBhc3MKK0Fsc28sIHRoZSBvbmUtcGFzcyBtZXRob2QgaXMgYWx3YXlzIHVzZWQgZm9yIGdyYXlzY2FsZSBvdXRwdXQgKHRoZSB0d28tcGFzcwogbWV0aG9kIGlzIG5vIGltcHJvdmVtZW50IHRoZW4pLgogLlRQCiAuQkkgXC1tYXhtZW1vcnkgIiBOIgpAQCAtMTcyLDYgKzE5MCwxMCBAQAogLkJJIFwtb3V0ZmlsZSAiIG5hbWUiCiBTZW5kIG91dHB1dCBpbWFnZSB0byB0aGUgbmFtZWQgZmlsZSwgbm90IHRvIHN0YW5kYXJkIG91dHB1dC4KIC5UUAorLkJJIFwtbWVtc3JjCitMb2FkIGlucHV0IGZpbGUgaW50byBtZW1vcnkgYmVmb3JlIGRlY29tcHJlc3NpbmcuICBUaGlzIGZlYXR1cmUgd2FzIGltcGxlbWVudGVkCittYWlubHkgYXMgYSB3YXkgb2YgdGVzdGluZyB0aGUgaW4tbWVtb3J5IHNvdXJjZSBtYW5hZ2VyIChqcGVnX21lbV9zcmMoKS4pCisuVFAKIC5CIFwtdmVyYm9zZQogRW5hYmxlIGRlYnVnIHByaW50b3V0LiAgTW9yZQogLkJSIFwtdiAncwpAQCAtMjQ0LDcgKzI2Niw4IEBACiBJbmRlcGVuZGVudCBKUEVHIEdyb3VwCiAuUFAKIFRoaXMgZmlsZSB3YXMgbW9kaWZpZWQgYnkgVGhlIGxpYmpwZWctdHVyYm8gUHJvamVjdCB0byBpbmNsdWRlIG9ubHkgaW5mb3JtYXRpb24KLXJlbGV2YW50IHRvIGxpYmpwZWctdHVyYm8gYW5kIHRvIHdvcmRzbWl0aCBjZXJ0YWluIHNlY3Rpb25zLgorcmVsZXZhbnQgdG8gbGlianBlZy10dXJibywgdG8gd29yZHNtaXRoIGNlcnRhaW4gc2VjdGlvbnMsIGFuZCB0byBkZXNjcmliZQorZmVhdHVyZXMgbm90IHByZXNlbnQgaW4gbGlianBlZy4KIC5TSCBCVUdTCiBUbyBhdm9pZCB0aGUgVW5pc3lzIExaVyBwYXRlbnQsCiAuQiBkanBlZwpkaWZmIC0tZ2l0IGEvZGpwZWcuYyBiL2RqcGVnLmMKaW5kZXggYjhmMTE4Ny4uN2EyZWFhMCAxMDA2NDQKLS0tIGEvZGpwZWcuYworKysgYi9kanBlZy5jCkBAIC0zLDggKzMsOCBAQAogICoKICAqIFRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlOgogICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTcsIFRob21hcyBHLiBMYW5lLgotICogTW9kaWZpY2F0aW9uczoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDExLCBELiBSLiBDb21tYW5kZXIuCisgKiBsaWJqcGVnLXR1cmJvIE1vZGlmaWNhdGlvbnM6CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMSwgMjAxMywgRC4gUi4gQ29tbWFuZGVyLgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgogICoKICAqIFRoaXMgZmlsZSBjb250YWlucyBhIGNvbW1hbmQtbGluZSB1c2VyIGludGVyZmFjZSBmb3IgdGhlIEpQRUcgZGVjb21wcmVzc29yLgpAQCAtMTIsOCArMTIsOCBAQAogICoKICAqIFR3byBkaWZmZXJlbnQgY29tbWFuZCBsaW5lIHN0eWxlcyBhcmUgcGVybWl0dGVkLCBkZXBlbmRpbmcgb24gdGhlCiAgKiBjb21waWxlLXRpbWUgc3dpdGNoIFRXT19GSUxFX0NPTU1BTkRMSU5FOgotICoJZGpwZWcgW29wdGlvbnNdICBpbnB1dGZpbGUgb3V0cHV0ZmlsZQotICoJZGpwZWcgW29wdGlvbnNdICBbaW5wdXRmaWxlXQorICogICAgICBkanBlZyBbb3B0aW9uc10gIGlucHV0ZmlsZSBvdXRwdXRmaWxlCisgKiAgICAgIGRqcGVnIFtvcHRpb25zXSAgW2lucHV0ZmlsZV0KICAqIEluIHRoZSBzZWNvbmQgc3R5bGUsIG91dHB1dCBpcyBhbHdheXMgdG8gc3RhbmRhcmQgb3V0cHV0LCB3aGljaCB5b3UnZAogICogbm9ybWFsbHkgcmVkaXJlY3QgdG8gYSBmaWxlIG9yIHBpcGUgdG8gc29tZSBvdGhlciBwcm9ncmFtLiAgSW5wdXQgaXMKICAqIGVpdGhlciBmcm9tIGEgbmFtZWQgZmlsZSBvciBmcm9tIHN0YW5kYXJkIGlucHV0ICh0eXBpY2FsbHkgcmVkaXJlY3RlZCkuCkBAIC0yMSwzMCArMjEsMzAgQEAKICAqIGRvbid0IHN1cHBvcnQgcGlwZXMuICBBbHNvLCB5b3UgTVVTVCB1c2UgdGhlIGZpcnN0IHN0eWxlIGlmIHlvdXIgc3lzdGVtCiAgKiBkb2Vzbid0IGRvIGJpbmFyeSBJL08gdG8gc3RkaW4vc3Rkb3V0LgogICogVG8gc2ltcGxpZnkgc2NyaXB0IHdyaXRpbmcsIHRoZSAiLW91dGZpbGUiIHN3aXRjaCBpcyBwcm92aWRlZC4gIFRoZSBzeW50YXgKLSAqCWRqcGVnIFtvcHRpb25zXSAgLW91dGZpbGUgb3V0cHV0ZmlsZSAgaW5wdXRmaWxlCisgKiAgICAgIGRqcGVnIFtvcHRpb25zXSAgLW91dGZpbGUgb3V0cHV0ZmlsZSAgaW5wdXRmaWxlCiAgKiB3b3JrcyByZWdhcmRsZXNzIG9mIHdoaWNoIGNvbW1hbmQgbGluZSBzdHlsZSBpcyB1c2VkLgogICovCiAKLSNpbmNsdWRlICJjZGpwZWcuaCIJCS8qIENvbW1vbiBkZWNscyBmb3IgY2pwZWcvZGpwZWcgYXBwbGljYXRpb25zICovCi0jaW5jbHVkZSAianZlcnNpb24uaCIJCS8qIGZvciB2ZXJzaW9uIG1lc3NhZ2UgKi8KLSNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJjZGpwZWcuaCIgICAgICAgICAgICAgLyogQ29tbW9uIGRlY2xzIGZvciBjanBlZy9kanBlZyBhcHBsaWNhdGlvbnMgKi8KKyNpbmNsdWRlICJqdmVyc2lvbi5oIiAgICAgICAgICAgLyogZm9yIHZlcnNpb24gbWVzc2FnZSAqLworI2luY2x1ZGUgImpjb25maWdpbnQuaCIKIAotI2luY2x1ZGUgPGN0eXBlLmg+CQkvKiB0byBkZWNsYXJlIGlzcHJpbnQoKSAqLworI2luY2x1ZGUgPGN0eXBlLmg+ICAgICAgICAgICAgICAvKiB0byBkZWNsYXJlIGlzcHJpbnQoKSAqLwogCi0jaWZkZWYgVVNFX0NDT01NQU5ECQkvKiBjb21tYW5kLWxpbmUgcmVhZGVyIGZvciBNYWNpbnRvc2ggKi8KKyNpZmRlZiBVU0VfQ0NPTU1BTkQgICAgICAgICAgICAgLyogY29tbWFuZC1saW5lIHJlYWRlciBmb3IgTWFjaW50b3NoICovCiAjaWZkZWYgX19NV0VSS1NfXwogI2luY2x1ZGUgPFNJT1VYLmg+ICAgICAgICAgICAgICAvKiBNZXRyb3dlcmtzIG5lZWRzIHRoaXMgKi8KLSNpbmNsdWRlIDxjb25zb2xlLmg+CQkvKiAuLi4gYW5kIHRoaXMgKi8KKyNpbmNsdWRlIDxjb25zb2xlLmg+ICAgICAgICAgICAgLyogLi4uIGFuZCB0aGlzICovCiAjZW5kaWYKICNpZmRlZiBUSElOS19DCi0jaW5jbHVkZSA8Y29uc29sZS5oPgkJLyogVGhpbmsgZGVjbGFyZXMgaXQgaGVyZSAqLworI2luY2x1ZGUgPGNvbnNvbGUuaD4gICAgICAgICAgICAvKiBUaGluayBkZWNsYXJlcyBpdCBoZXJlICovCiAjZW5kaWYKICNlbmRpZgogCiAKIC8qIENyZWF0ZSB0aGUgYWRkLW9uIG1lc3NhZ2Ugc3RyaW5nIHRhYmxlLiAqLwogCi0jZGVmaW5lIEpNRVNTQUdFKGNvZGUsc3RyaW5nKQlzdHJpbmcgLAorI2RlZmluZSBKTUVTU0FHRShjb2RlLHN0cmluZykgICBzdHJpbmcgLAogCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGNkanBlZ19tZXNzYWdlX3RhYmxlW10gPSB7CiAjaW5jbHVkZSAiY2RlcnJvci5oIgpAQCAtNjAsMTcgKzYwLDE3IEBACiAgKi8KIAogdHlwZWRlZiBlbnVtIHsKLQlGTVRfQk1QLAkJLyogQk1QIGZvcm1hdCAoV2luZG93cyBmbGF2b3IpICovCi0JRk1UX0dJRiwJCS8qIEdJRiBmb3JtYXQgKi8KLQlGTVRfT1MyLAkJLyogQk1QIGZvcm1hdCAoT1MvMiBmbGF2b3IpICovCi0JRk1UX1BQTSwJCS8qIFBQTS9QR00gKFBCTVBMVVMgZm9ybWF0cykgKi8KLQlGTVRfUkxFLAkJLyogUkxFIGZvcm1hdCAqLwotCUZNVF9UQVJHQSwJCS8qIFRhcmdhIGZvcm1hdCAqLwotCUZNVF9USUZGCQkvKiBUSUZGIGZvcm1hdCAqLworICAgICAgICBGTVRfQk1QLCAgICAgICAgICAgICAgICAvKiBCTVAgZm9ybWF0IChXaW5kb3dzIGZsYXZvcikgKi8KKyAgICAgICAgRk1UX0dJRiwgICAgICAgICAgICAgICAgLyogR0lGIGZvcm1hdCAqLworICAgICAgICBGTVRfT1MyLCAgICAgICAgICAgICAgICAvKiBCTVAgZm9ybWF0IChPUy8yIGZsYXZvcikgKi8KKyAgICAgICAgRk1UX1BQTSwgICAgICAgICAgICAgICAgLyogUFBNL1BHTSAoUEJNUExVUyBmb3JtYXRzKSAqLworICAgICAgICBGTVRfUkxFLCAgICAgICAgICAgICAgICAvKiBSTEUgZm9ybWF0ICovCisgICAgICAgIEZNVF9UQVJHQSwgICAgICAgICAgICAgIC8qIFRhcmdhIGZvcm1hdCAqLworICAgICAgICBGTVRfVElGRiAgICAgICAgICAgICAgICAvKiBUSUZGIGZvcm1hdCAqLwogfSBJTUFHRV9GT1JNQVRTOwogCi0jaWZuZGVmIERFRkFVTFRfRk1UCQkvKiBzbyBjYW4gb3ZlcnJpZGUgZnJvbSBDRkxBR1MgaW4gTWFrZWZpbGUgKi8KLSNkZWZpbmUgREVGQVVMVF9GTVQJRk1UX1BQTQorI2lmbmRlZiBERUZBVUxUX0ZNVCAgICAgICAgICAgICAvKiBzbyBjYW4gb3ZlcnJpZGUgZnJvbSBDRkxBR1MgaW4gTWFrZWZpbGUgKi8KKyNkZWZpbmUgREVGQVVMVF9GTVQgICAgIEZNVF9QUE0KICNlbmRpZgogCiBzdGF0aWMgSU1BR0VfRk9STUFUUyByZXF1ZXN0ZWRfZm10OwpAQCAtODUsOCArODUsMTAgQEAKICAqLwogCiAKLXN0YXRpYyBjb25zdCBjaGFyICogcHJvZ25hbWU7CS8qIHByb2dyYW0gbmFtZSBmb3IgZXJyb3IgbWVzc2FnZXMgKi8KLXN0YXRpYyBjaGFyICogb3V0ZmlsZW5hbWU7CS8qIGZvciAtb3V0ZmlsZSBzd2l0Y2ggKi8KK3N0YXRpYyBjb25zdCBjaGFyICogcHJvZ25hbWU7ICAgLyogcHJvZ3JhbSBuYW1lIGZvciBlcnJvciBtZXNzYWdlcyAqLworc3RhdGljIGNoYXIgKiBvdXRmaWxlbmFtZTsgICAgICAvKiBmb3IgLW91dGZpbGUgc3dpdGNoICovCitib29sZWFuIG1lbXNyYzsgIC8qIGZvciAtbWVtc3JjIHN3aXRjaCAqLworI2RlZmluZSBJTlBVVF9CVUZfU0laRSAgNDA5NgogCiAKIExPQ0FMKHZvaWQpCkBAIC0xMTAsNDAgKzExMiw0MCBAQAogI2VuZGlmCiAjaWZkZWYgQk1QX1NVUFBPUlRFRAogICBmcHJpbnRmKHN0ZGVyciwgIiAgLWJtcCAgICAgICAgICAgU2VsZWN0IEJNUCBvdXRwdXQgZm9ybWF0IChXaW5kb3dzIHN0eWxlKSVzXG4iLAotCSAgKERFRkFVTFRfRk1UID09IEZNVF9CTVAgPyAiIChkZWZhdWx0KSIgOiAiIikpOworICAgICAgICAgIChERUZBVUxUX0ZNVCA9PSBGTVRfQk1QID8gIiAoZGVmYXVsdCkiIDogIiIpKTsKICNlbmRpZgogI2lmZGVmIEdJRl9TVVBQT1JURUQKICAgZnByaW50ZihzdGRlcnIsICIgIC1naWYgICAgICAgICAgIFNlbGVjdCBHSUYgb3V0cHV0IGZvcm1hdCVzXG4iLAotCSAgKERFRkFVTFRfRk1UID09IEZNVF9HSUYgPyAiIChkZWZhdWx0KSIgOiAiIikpOworICAgICAgICAgIChERUZBVUxUX0ZNVCA9PSBGTVRfR0lGID8gIiAoZGVmYXVsdCkiIDogIiIpKTsKICNlbmRpZgogI2lmZGVmIEJNUF9TVVBQT1JURUQKICAgZnByaW50ZihzdGRlcnIsICIgIC1vczIgICAgICAgICAgIFNlbGVjdCBCTVAgb3V0cHV0IGZvcm1hdCAoT1MvMiBzdHlsZSklc1xuIiwKLQkgIChERUZBVUxUX0ZNVCA9PSBGTVRfT1MyID8gIiAoZGVmYXVsdCkiIDogIiIpKTsKKyAgICAgICAgICAoREVGQVVMVF9GTVQgPT0gRk1UX09TMiA/ICIgKGRlZmF1bHQpIiA6ICIiKSk7CiAjZW5kaWYKICNpZmRlZiBQUE1fU1VQUE9SVEVECiAgIGZwcmludGYoc3RkZXJyLCAiICAtcG5tICAgICAgICAgICBTZWxlY3QgUEJNUExVUyAoUFBNL1BHTSkgb3V0cHV0IGZvcm1hdCVzXG4iLAotCSAgKERFRkFVTFRfRk1UID09IEZNVF9QUE0gPyAiIChkZWZhdWx0KSIgOiAiIikpOworICAgICAgICAgIChERUZBVUxUX0ZNVCA9PSBGTVRfUFBNID8gIiAoZGVmYXVsdCkiIDogIiIpKTsKICNlbmRpZgogI2lmZGVmIFJMRV9TVVBQT1JURUQKICAgZnByaW50ZihzdGRlcnIsICIgIC1ybGUgICAgICAgICAgIFNlbGVjdCBVdGFoIFJMRSBvdXRwdXQgZm9ybWF0JXNcbiIsCi0JICAoREVGQVVMVF9GTVQgPT0gRk1UX1JMRSA/ICIgKGRlZmF1bHQpIiA6ICIiKSk7CisgICAgICAgICAgKERFRkFVTFRfRk1UID09IEZNVF9STEUgPyAiIChkZWZhdWx0KSIgOiAiIikpOwogI2VuZGlmCiAjaWZkZWYgVEFSR0FfU1VQUE9SVEVECiAgIGZwcmludGYoc3RkZXJyLCAiICAtdGFyZ2EgICAgICAgICBTZWxlY3QgVGFyZ2Egb3V0cHV0IGZvcm1hdCVzXG4iLAotCSAgKERFRkFVTFRfRk1UID09IEZNVF9UQVJHQSA/ICIgKGRlZmF1bHQpIiA6ICIiKSk7CisgICAgICAgICAgKERFRkFVTFRfRk1UID09IEZNVF9UQVJHQSA/ICIgKGRlZmF1bHQpIiA6ICIiKSk7CiAjZW5kaWYKICAgZnByaW50ZihzdGRlcnIsICJTd2l0Y2hlcyBmb3IgYWR2YW5jZWQgdXNlcnM6XG4iKTsKICNpZmRlZiBEQ1RfSVNMT1dfU1VQUE9SVEVECiAgIGZwcmludGYoc3RkZXJyLCAiICAtZGN0IGludCAgICAgICBVc2UgaW50ZWdlciBEQ1QgbWV0aG9kJXNcbiIsCi0JICAoSkRDVF9ERUZBVUxUID09IEpEQ1RfSVNMT1cgPyAiIChkZWZhdWx0KSIgOiAiIikpOworICAgICAgICAgIChKRENUX0RFRkFVTFQgPT0gSkRDVF9JU0xPVyA/ICIgKGRlZmF1bHQpIiA6ICIiKSk7CiAjZW5kaWYKICNpZmRlZiBEQ1RfSUZBU1RfU1VQUE9SVEVECiAgIGZwcmludGYoc3RkZXJyLCAiICAtZGN0IGZhc3QgICAgICBVc2UgZmFzdCBpbnRlZ2VyIERDVCAobGVzcyBhY2N1cmF0ZSklc1xuIiwKLQkgIChKRENUX0RFRkFVTFQgPT0gSkRDVF9JRkFTVCA/ICIgKGRlZmF1bHQpIiA6ICIiKSk7CisgICAgICAgICAgKEpEQ1RfREVGQVVMVCA9PSBKRENUX0lGQVNUID8gIiAoZGVmYXVsdCkiIDogIiIpKTsKICNlbmRpZgogI2lmZGVmIERDVF9GTE9BVF9TVVBQT1JURUQKICAgZnByaW50ZihzdGRlcnIsICIgIC1kY3QgZmxvYXQgICAgIFVzZSBmbG9hdGluZy1wb2ludCBEQ1QgbWV0aG9kJXNcbiIsCi0JICAoSkRDVF9ERUZBVUxUID09IEpEQ1RfRkxPQVQgPyAiIChkZWZhdWx0KSIgOiAiIikpOworICAgICAgICAgIChKRENUX0RFRkFVTFQgPT0gSkRDVF9GTE9BVCA/ICIgKGRlZmF1bHQpIiA6ICIiKSk7CiAjZW5kaWYKICAgZnByaW50ZihzdGRlcnIsICIgIC1kaXRoZXIgZnMgICAgIFVzZSBGLVMgZGl0aGVyaW5nIChkZWZhdWx0KVxuIik7CiAgIGZwcmludGYoc3RkZXJyLCAiICAtZGl0aGVyIG5vbmUgICBEb24ndCB1c2UgZGl0aGVyaW5nIGluIHF1YW50aXphdGlvblxuIik7CkBAIC0xNTcsNiArMTU5LDEwIEBACiAjZW5kaWYKICAgZnByaW50ZihzdGRlcnIsICIgIC1tYXhtZW1vcnkgTiAgIE1heGltdW0gbWVtb3J5IHRvIHVzZSAoaW4ga2J5dGVzKVxuIik7CiAgIGZwcmludGYoc3RkZXJyLCAiICAtb3V0ZmlsZSBuYW1lICBTcGVjaWZ5IG5hbWUgZm9yIG91dHB1dCBmaWxlXG4iKTsKKyNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDgwIHx8IGRlZmluZWQoTUVNX1NSQ0RTVF9TVVBQT1JURUQpCisgIGZwcmludGYoc3RkZXJyLCAiICAtbWVtc3JjICAgICAgICBMb2FkIGlucHV0IGZpbGUgaW50byBtZW1vcnkgYmVmb3JlIGRlY29tcHJlc3NpbmdcbiIpOworI2VuZGlmCisKICAgZnByaW50ZihzdGRlcnIsICIgIC12ZXJib3NlICBvciAgLWRlYnVnICAgRW1pdCBkZWJ1ZyBvdXRwdXRcbiIpOwogICBleGl0KEVYSVRfRkFJTFVSRSk7CiB9CkBAIC0xNjQsNyArMTcwLDcgQEAKIAogTE9DQUwoaW50KQogcGFyc2Vfc3dpdGNoZXMgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGludCBhcmdjLCBjaGFyICoqYXJndiwKLQkJaW50IGxhc3RfZmlsZV9hcmdfc2VlbiwgYm9vbGVhbiBmb3JfcmVhbCkKKyAgICAgICAgICAgICAgICBpbnQgbGFzdF9maWxlX2FyZ19zZWVuLCBib29sZWFuIGZvcl9yZWFsKQogLyogUGFyc2Ugb3B0aW9uYWwgc3dpdGNoZXMuCiAgKiBSZXR1cm5zIGFyZ3ZbXSBpbmRleCBvZiBmaXJzdCBmaWxlLW5hbWUgYXJndW1lbnQgKD09IGFyZ2MgaWYgbm9uZSkuCiAgKiBBbnkgZmlsZSBuYW1lcyB3aXRoIGluZGV4ZXMgPD0gbGFzdF9maWxlX2FyZ19zZWVuIGFyZSBpZ25vcmVkOwpAQCAtMTc4LDggKzE4NCw5IEBACiAgIGNoYXIgKiBhcmc7CiAKICAgLyogU2V0IHVwIGRlZmF1bHQgSlBFRyBwYXJhbWV0ZXJzLiAqLwotICByZXF1ZXN0ZWRfZm10ID0gREVGQVVMVF9GTVQ7CS8qIHNldCBkZWZhdWx0IG91dHB1dCBmaWxlIGZvcm1hdCAqLworICByZXF1ZXN0ZWRfZm10ID0gREVGQVVMVF9GTVQ7ICAvKiBzZXQgZGVmYXVsdCBvdXRwdXQgZmlsZSBmb3JtYXQgKi8KICAgb3V0ZmlsZW5hbWUgPSBOVUxMOworICBtZW1zcmMgPSBGQUxTRTsKICAgY2luZm8tPmVyci0+dHJhY2VfbGV2ZWwgPSAwOwogCiAgIC8qIFNjYW4gY29tbWFuZCBsaW5lIG9wdGlvbnMsIGFkanVzdCBwYXJhbWV0ZXJzICovCkBAIC0xODksNTQgKzE5Niw1NCBAQAogICAgIGlmICgqYXJnICE9ICctJykgewogICAgICAgLyogTm90IGEgc3dpdGNoLCBtdXN0IGJlIGEgZmlsZSBuYW1lIGFyZ3VtZW50ICovCiAgICAgICBpZiAoYXJnbiA8PSBsYXN0X2ZpbGVfYXJnX3NlZW4pIHsKLQlvdXRmaWxlbmFtZSA9IE5VTEw7CS8qIC1vdXRmaWxlIGFwcGxpZXMgdG8ganVzdCBvbmUgaW5wdXQgZmlsZSAqLwotCWNvbnRpbnVlOwkJLyogaWdub3JlIHRoaXMgbmFtZSBpZiBwcmV2aW91c2x5IHByb2Nlc3NlZCAqLworICAgICAgICBvdXRmaWxlbmFtZSA9IE5VTEw7ICAgICAvKiAtb3V0ZmlsZSBhcHBsaWVzIHRvIGp1c3Qgb25lIGlucHV0IGZpbGUgKi8KKyAgICAgICAgY29udGludWU7ICAgICAgICAgICAgICAgLyogaWdub3JlIHRoaXMgbmFtZSBpZiBwcmV2aW91c2x5IHByb2Nlc3NlZCAqLwogICAgICAgfQotICAgICAgYnJlYWs7CQkJLyogZWxzZSBkb25lIHBhcnNpbmcgc3dpdGNoZXMgKi8KKyAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgLyogZWxzZSBkb25lIHBhcnNpbmcgc3dpdGNoZXMgKi8KICAgICB9Ci0gICAgYXJnKys7CQkJLyogYWR2YW5jZSBwYXN0IHN3aXRjaCBtYXJrZXIgY2hhcmFjdGVyICovCisgICAgYXJnKys7ICAgICAgICAgICAgICAgICAgICAgIC8qIGFkdmFuY2UgcGFzdCBzd2l0Y2ggbWFya2VyIGNoYXJhY3RlciAqLwogCiAgICAgaWYgKGtleW1hdGNoKGFyZywgImJtcCIsIDEpKSB7CiAgICAgICAvKiBCTVAgb3V0cHV0IGZvcm1hdC4gKi8KICAgICAgIHJlcXVlc3RlZF9mbXQgPSBGTVRfQk1QOwogCiAgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJjb2xvcnMiLCAxKSB8fCBrZXltYXRjaChhcmcsICJjb2xvdXJzIiwgMSkgfHwKLQkgICAgICAga2V5bWF0Y2goYXJnLCAicXVhbnRpemUiLCAxKSB8fCBrZXltYXRjaChhcmcsICJxdWFudGlzZSIsIDEpKSB7CisgICAgICAgICAgICAgICBrZXltYXRjaChhcmcsICJxdWFudGl6ZSIsIDEpIHx8IGtleW1hdGNoKGFyZywgInF1YW50aXNlIiwgMSkpIHsKICAgICAgIC8qIERvIGNvbG9yIHF1YW50aXphdGlvbi4gKi8KICAgICAgIGludCB2YWw7CiAKLSAgICAgIGlmICgrK2FyZ24gPj0gYXJnYykJLyogYWR2YW5jZSB0byBuZXh0IGFyZ3VtZW50ICovCi0JdXNhZ2UoKTsKKyAgICAgIGlmICgrK2FyZ24gPj0gYXJnYykgICAgICAgLyogYWR2YW5jZSB0byBuZXh0IGFyZ3VtZW50ICovCisgICAgICAgIHVzYWdlKCk7CiAgICAgICBpZiAoc3NjYW5mKGFyZ3ZbYXJnbl0sICIlZCIsICZ2YWwpICE9IDEpCi0JdXNhZ2UoKTsKKyAgICAgICAgdXNhZ2UoKTsKICAgICAgIGNpbmZvLT5kZXNpcmVkX251bWJlcl9vZl9jb2xvcnMgPSB2YWw7CiAgICAgICBjaW5mby0+cXVhbnRpemVfY29sb3JzID0gVFJVRTsKIAogICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAiZGN0IiwgMikpIHsKICAgICAgIC8qIFNlbGVjdCBJRENUIGFsZ29yaXRobS4gKi8KLSAgICAgIGlmICgrK2FyZ24gPj0gYXJnYykJLyogYWR2YW5jZSB0byBuZXh0IGFyZ3VtZW50ICovCi0JdXNhZ2UoKTsKKyAgICAgIGlmICgrK2FyZ24gPj0gYXJnYykgICAgICAgLyogYWR2YW5jZSB0byBuZXh0IGFyZ3VtZW50ICovCisgICAgICAgIHVzYWdlKCk7CiAgICAgICBpZiAoa2V5bWF0Y2goYXJndlthcmduXSwgImludCIsIDEpKSB7Ci0JY2luZm8tPmRjdF9tZXRob2QgPSBKRENUX0lTTE9XOworICAgICAgICBjaW5mby0+ZGN0X21ldGhvZCA9IEpEQ1RfSVNMT1c7CiAgICAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZ3ZbYXJnbl0sICJmYXN0IiwgMikpIHsKLQljaW5mby0+ZGN0X21ldGhvZCA9IEpEQ1RfSUZBU1Q7CisgICAgICAgIGNpbmZvLT5kY3RfbWV0aG9kID0gSkRDVF9JRkFTVDsKICAgICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJndlthcmduXSwgImZsb2F0IiwgMikpIHsKLQljaW5mby0+ZGN0X21ldGhvZCA9IEpEQ1RfRkxPQVQ7CisgICAgICAgIGNpbmZvLT5kY3RfbWV0aG9kID0gSkRDVF9GTE9BVDsKICAgICAgIH0gZWxzZQotCXVzYWdlKCk7CisgICAgICAgIHVzYWdlKCk7CiAKICAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZywgImRpdGhlciIsIDIpKSB7CiAgICAgICAvKiBTZWxlY3QgZGl0aGVyaW5nIGFsZ29yaXRobS4gKi8KLSAgICAgIGlmICgrK2FyZ24gPj0gYXJnYykJLyogYWR2YW5jZSB0byBuZXh0IGFyZ3VtZW50ICovCi0JdXNhZ2UoKTsKKyAgICAgIGlmICgrK2FyZ24gPj0gYXJnYykgICAgICAgLyogYWR2YW5jZSB0byBuZXh0IGFyZ3VtZW50ICovCisgICAgICAgIHVzYWdlKCk7CiAgICAgICBpZiAoa2V5bWF0Y2goYXJndlthcmduXSwgImZzIiwgMikpIHsKLQljaW5mby0+ZGl0aGVyX21vZGUgPSBKRElUSEVSX0ZTOworICAgICAgICBjaW5mby0+ZGl0aGVyX21vZGUgPSBKRElUSEVSX0ZTOwogICAgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmd2W2FyZ25dLCAibm9uZSIsIDIpKSB7Ci0JY2luZm8tPmRpdGhlcl9tb2RlID0gSkRJVEhFUl9OT05FOworICAgICAgICBjaW5mby0+ZGl0aGVyX21vZGUgPSBKRElUSEVSX05PTkU7CiAgICAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZ3ZbYXJnbl0sICJvcmRlcmVkIiwgMikpIHsKLQljaW5mby0+ZGl0aGVyX21vZGUgPSBKRElUSEVSX09SREVSRUQ7CisgICAgICAgIGNpbmZvLT5kaXRoZXJfbW9kZSA9IEpESVRIRVJfT1JERVJFRDsKICAgICAgIH0gZWxzZQotCXVzYWdlKCk7CisgICAgICAgIHVzYWdlKCk7CiAKICAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZywgImRlYnVnIiwgMSkgfHwga2V5bWF0Y2goYXJnLCAidmVyYm9zZSIsIDEpKSB7CiAgICAgICAvKiBFbmFibGUgZGVidWcgcHJpbnRvdXRzLiAqLwpAQCAtMjQ0LDEyICsyNTEsMTIgQEAKICAgICAgIHN0YXRpYyBib29sZWFuIHByaW50ZWRfdmVyc2lvbiA9IEZBTFNFOwogCiAgICAgICBpZiAoISBwcmludGVkX3ZlcnNpb24pIHsKLQlmcHJpbnRmKHN0ZGVyciwgIiVzIHZlcnNpb24gJXMgKGJ1aWxkICVzKVxuIiwKLQkJUEFDS0FHRV9OQU1FLCBWRVJTSU9OLCBCVUlMRCk7Ci0JZnByaW50ZihzdGRlcnIsICIlc1xuXG4iLCBKQ09QWVJJR0hUKTsKLQlmcHJpbnRmKHN0ZGVyciwgIkVtdWxhdGluZyBUaGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIGxpYmpwZWcsIHZlcnNpb24gJXNcblxuIiwKLQkJSlZFUlNJT04pOwotCXByaW50ZWRfdmVyc2lvbiA9IFRSVUU7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMgdmVyc2lvbiAlcyAoYnVpbGQgJXMpXG4iLAorICAgICAgICAgICAgICAgIFBBQ0tBR0VfTkFNRSwgVkVSU0lPTiwgQlVJTEQpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG5cbiIsIEpDT1BZUklHSFQpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVtdWxhdGluZyBUaGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLCB2ZXJzaW9uICVzXG5cbiIsCisgICAgICAgICAgICAgICAgSlZFUlNJT04pOworICAgICAgICBwcmludGVkX3ZlcnNpb24gPSBUUlVFOwogICAgICAgfQogICAgICAgY2luZm8tPmVyci0+dHJhY2VfbGV2ZWwrKzsKIApAQCAtMjU4LDcgKzI2NSw3IEBACiAgICAgICBjaW5mby0+dHdvX3Bhc3NfcXVhbnRpemUgPSBGQUxTRTsKICAgICAgIGNpbmZvLT5kaXRoZXJfbW9kZSA9IEpESVRIRVJfT1JERVJFRDsKICAgICAgIGlmICghIGNpbmZvLT5xdWFudGl6ZV9jb2xvcnMpIC8qIGRvbid0IG92ZXJyaWRlIGFuIGVhcmxpZXIgLWNvbG9ycyAqLwotCWNpbmZvLT5kZXNpcmVkX251bWJlcl9vZl9jb2xvcnMgPSAyMTY7CisgICAgICAgIGNpbmZvLT5kZXNpcmVkX251bWJlcl9vZl9jb2xvcnMgPSAyMTY7CiAgICAgICBjaW5mby0+ZGN0X21ldGhvZCA9IEpEQ1RfRkFTVEVTVDsKICAgICAgIGNpbmZvLT5kb19mYW5jeV91cHNhbXBsaW5nID0gRkFMU0U7CiAKQEAgLTI3NiwyMSArMjgzLDIxIEBACiAKICAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZywgIm1hcCIsIDMpKSB7CiAgICAgICAvKiBRdWFudGl6ZSB0byBhIGNvbG9yIG1hcCB0YWtlbiBmcm9tIGFuIGlucHV0IGZpbGUuICovCi0gICAgICBpZiAoKythcmduID49IGFyZ2MpCS8qIGFkdmFuY2UgdG8gbmV4dCBhcmd1bWVudCAqLwotCXVzYWdlKCk7Ci0gICAgICBpZiAoZm9yX3JlYWwpIHsJCS8qIHRvbyBleHBlbnNpdmUgdG8gZG8gdHdpY2UhICovCi0jaWZkZWYgUVVBTlRfMlBBU1NfU1VQUE9SVEVECS8qIG90aGVyd2lzZSBjYW4ndCBxdWFudGl6ZSB0byBzdXBwbGllZCBtYXAgKi8KLQlGSUxFICogbWFwZmlsZTsKKyAgICAgIGlmICgrK2FyZ24gPj0gYXJnYykgICAgICAgLyogYWR2YW5jZSB0byBuZXh0IGFyZ3VtZW50ICovCisgICAgICAgIHVzYWdlKCk7CisgICAgICBpZiAoZm9yX3JlYWwpIHsgICAgICAgICAgIC8qIHRvbyBleHBlbnNpdmUgdG8gZG8gdHdpY2UhICovCisjaWZkZWYgUVVBTlRfMlBBU1NfU1VQUE9SVEVEICAgIC8qIG90aGVyd2lzZSBjYW4ndCBxdWFudGl6ZSB0byBzdXBwbGllZCBtYXAgKi8KKyAgICAgICAgRklMRSAqIG1hcGZpbGU7CiAKLQlpZiAoKG1hcGZpbGUgPSBmb3Blbihhcmd2W2FyZ25dLCBSRUFEX0JJTkFSWSkpID09IE5VTEwpIHsKLQkgIGZwcmludGYoc3RkZXJyLCAiJXM6IGNhbid0IG9wZW4gJXNcbiIsIHByb2duYW1lLCBhcmd2W2FyZ25dKTsKLQkgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLQl9Ci0JcmVhZF9jb2xvcl9tYXAoY2luZm8sIG1hcGZpbGUpOwotCWZjbG9zZShtYXBmaWxlKTsKLQljaW5mby0+cXVhbnRpemVfY29sb3JzID0gVFJVRTsKKyAgICAgICAgaWYgKChtYXBmaWxlID0gZm9wZW4oYXJndlthcmduXSwgUkVBRF9CSU5BUlkpKSA9PSBOVUxMKSB7CisgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogY2FuJ3Qgb3BlbiAlc1xuIiwgcHJvZ25hbWUsIGFyZ3ZbYXJnbl0pOworICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgfQorICAgICAgICByZWFkX2NvbG9yX21hcChjaW5mbywgbWFwZmlsZSk7CisgICAgICAgIGZjbG9zZShtYXBmaWxlKTsKKyAgICAgICAgY2luZm8tPnF1YW50aXplX2NvbG9ycyA9IFRSVUU7CiAjZWxzZQotCUVSUkVYSVQoY2luZm8sIEpFUlJfTk9UX0NPTVBJTEVEKTsKKyAgICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9OT1RfQ09NUElMRUQpOwogI2VuZGlmCiAgICAgICB9CiAKQEAgLTI5OSwxMiArMzA2LDEyIEBACiAgICAgICBsb25nIGx2YWw7CiAgICAgICBjaGFyIGNoID0gJ3gnOwogCi0gICAgICBpZiAoKythcmduID49IGFyZ2MpCS8qIGFkdmFuY2UgdG8gbmV4dCBhcmd1bWVudCAqLwotCXVzYWdlKCk7CisgICAgICBpZiAoKythcmduID49IGFyZ2MpICAgICAgIC8qIGFkdmFuY2UgdG8gbmV4dCBhcmd1bWVudCAqLworICAgICAgICB1c2FnZSgpOwogICAgICAgaWYgKHNzY2FuZihhcmd2W2FyZ25dLCAiJWxkJWMiLCAmbHZhbCwgJmNoKSA8IDEpCi0JdXNhZ2UoKTsKKyAgICAgICAgdXNhZ2UoKTsKICAgICAgIGlmIChjaCA9PSAnbScgfHwgY2ggPT0gJ00nKQotCWx2YWwgKj0gMTAwMEw7CisgICAgICAgIGx2YWwgKj0gMTAwMEw7CiAgICAgICBjaW5mby0+bWVtLT5tYXhfbWVtb3J5X3RvX3VzZSA9IGx2YWwgKiAxMDAwTDsKIAogICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAibm9zbW9vdGgiLCAzKSkgewpAQCAtMzIxLDkgKzMyOCwxOSBAQAogCiAgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJvdXRmaWxlIiwgNCkpIHsKICAgICAgIC8qIFNldCBvdXRwdXQgZmlsZSBuYW1lLiAqLwotICAgICAgaWYgKCsrYXJnbiA+PSBhcmdjKQkvKiBhZHZhbmNlIHRvIG5leHQgYXJndW1lbnQgKi8KLQl1c2FnZSgpOwotICAgICAgb3V0ZmlsZW5hbWUgPSBhcmd2W2FyZ25dOwkvKiBzYXZlIGl0IGF3YXkgZm9yIGxhdGVyIHVzZSAqLworICAgICAgaWYgKCsrYXJnbiA+PSBhcmdjKSAgICAgICAvKiBhZHZhbmNlIHRvIG5leHQgYXJndW1lbnQgKi8KKyAgICAgICAgdXNhZ2UoKTsKKyAgICAgIG91dGZpbGVuYW1lID0gYXJndlthcmduXTsgLyogc2F2ZSBpdCBhd2F5IGZvciBsYXRlciB1c2UgKi8KKworICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAibWVtc3JjIiwgMikpIHsKKyAgICAgIC8qIFVzZSBpbi1tZW1vcnkgc291cmNlIG1hbmFnZXIgKi8KKyNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDgwIHx8IGRlZmluZWQoTUVNX1NSQ0RTVF9TVVBQT1JURUQpCisgICAgICBtZW1zcmMgPSBUUlVFOworI2Vsc2UKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IHNvcnJ5LCBpbi1tZW1vcnkgc291cmNlIG1hbmFnZXIgd2FzIG5vdCBjb21waWxlZCBpblxuIiwKKyAgICAgICAgICAgICAgcHJvZ25hbWUpOworICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworI2VuZGlmCiAKICAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZywgInBubSIsIDEpIHx8IGtleW1hdGNoKGFyZywgInBwbSIsIDEpKSB7CiAgICAgICAvKiBQUE0vUEdNIG91dHB1dCBmb3JtYXQuICovCkBAIC0zMzUsMjIgKzM1MiwyMiBAQAogCiAgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJzY2FsZSIsIDEpKSB7CiAgICAgICAvKiBTY2FsZSB0aGUgb3V0cHV0IGltYWdlIGJ5IGEgZnJhY3Rpb24gTS9OLiAqLwotICAgICAgaWYgKCsrYXJnbiA+PSBhcmdjKQkvKiBhZHZhbmNlIHRvIG5leHQgYXJndW1lbnQgKi8KLQl1c2FnZSgpOworICAgICAgaWYgKCsrYXJnbiA+PSBhcmdjKSAgICAgICAvKiBhZHZhbmNlIHRvIG5leHQgYXJndW1lbnQgKi8KKyAgICAgICAgdXNhZ2UoKTsKICAgICAgIGlmIChzc2NhbmYoYXJndlthcmduXSwgIiVkLyVkIiwKLQkJICZjaW5mby0+c2NhbGVfbnVtLCAmY2luZm8tPnNjYWxlX2Rlbm9tKSAhPSAyKQotCXVzYWdlKCk7CisgICAgICAgICAgICAgICAgICZjaW5mby0+c2NhbGVfbnVtLCAmY2luZm8tPnNjYWxlX2Rlbm9tKSAhPSAyKQorICAgICAgICB1c2FnZSgpOwogCiAgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJ0YXJnYSIsIDEpKSB7CiAgICAgICAvKiBUYXJnYSBvdXRwdXQgZm9ybWF0LiAqLwogICAgICAgcmVxdWVzdGVkX2ZtdCA9IEZNVF9UQVJHQTsKIAogICAgIH0gZWxzZSB7Ci0gICAgICB1c2FnZSgpOwkJCS8qIGJvZ3VzIHN3aXRjaCAqLworICAgICAgdXNhZ2UoKTsgICAgICAgICAgICAgICAgICAvKiBib2d1cyBzd2l0Y2ggKi8KICAgICB9CiAgIH0KIAotICByZXR1cm4gYXJnbjsJCQkvKiByZXR1cm4gaW5kZXggb2YgbmV4dCBhcmcgKGZpbGUgbmFtZSkgKi8KKyAgcmV0dXJuIGFyZ247ICAgICAgICAgICAgICAgICAgLyogcmV0dXJuIGluZGV4IG9mIG5leHQgYXJnIChmaWxlIG5hbWUpICovCiB9CiAKIApAQCAtMzg2LDE0ICs0MDMsMTQgQEAKIAogICBsZW5ndGggPSBqcGVnX2dldGMoY2luZm8pIDw8IDg7CiAgIGxlbmd0aCArPSBqcGVnX2dldGMoY2luZm8pOwotICBsZW5ndGggLT0gMjsJCQkvKiBkaXNjb3VudCB0aGUgbGVuZ3RoIHdvcmQgaXRzZWxmICovCisgIGxlbmd0aCAtPSAyOyAgICAgICAgICAgICAgICAgIC8qIGRpc2NvdW50IHRoZSBsZW5ndGggd29yZCBpdHNlbGYgKi8KIAogICBpZiAodHJhY2VpdCkgewogICAgIGlmIChjaW5mby0+dW5yZWFkX21hcmtlciA9PSBKUEVHX0NPTSkKICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ29tbWVudCwgbGVuZ3RoICVsZDpcbiIsIChsb25nKSBsZW5ndGgpOwotICAgIGVsc2UJCQkvKiBhc3N1bWUgaXQgaXMgYW4gQVBQbiBvdGhlcndpc2UgKi8KKyAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgLyogYXNzdW1lIGl0IGlzIGFuIEFQUG4gb3RoZXJ3aXNlICovCiAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkFQUCVkLCBsZW5ndGggJWxkOlxuIiwKLQkgICAgICBjaW5mby0+dW5yZWFkX21hcmtlciAtIEpQRUdfQVBQMCwgKGxvbmcpIGxlbmd0aCk7CisgICAgICAgICAgICAgIGNpbmZvLT51bnJlYWRfbWFya2VyIC0gSlBFR19BUFAwLCAobG9uZykgbGVuZ3RoKTsKICAgfQogCiAgIHdoaWxlICgtLWxlbmd0aCA+PSAwKSB7CkBAIC00MDUsMTYgKzQyMiwxNiBAQAogICAgICAgICogTmV3bGluZXMgaW4gQ1IsIENSL0xGLCBvciBMRiBmb3JtIHdpbGwgYmUgcHJpbnRlZCBhcyBvbmUgbmV3bGluZS4KICAgICAgICAqLwogICAgICAgaWYgKGNoID09ICdccicpIHsKLQlmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gJ1xuJykgewotCWlmIChsYXN0Y2ggIT0gJ1xyJykKLQkgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKKyAgICAgICAgaWYgKGxhc3RjaCAhPSAnXHInKQorICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gJ1xcJykgewotCWZwcmludGYoc3RkZXJyLCAiXFxcXCIpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxcXFwiKTsKICAgICAgIH0gZWxzZSBpZiAoaXNwcmludChjaCkpIHsKLQlwdXRjKGNoLCBzdGRlcnIpOworICAgICAgICBwdXRjKGNoLCBzdGRlcnIpOwogICAgICAgfSBlbHNlIHsKLQlmcHJpbnRmKHN0ZGVyciwgIlxcJTAzbyIsIGNoKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJcXCUwM28iLCBjaCk7CiAgICAgICB9CiAgICAgICBsYXN0Y2ggPSBjaDsKICAgICB9CkBAIC00NDMsNiArNDYwLDggQEAKICAgZGpwZWdfZGVzdF9wdHIgZGVzdF9tZ3IgPSBOVUxMOwogICBGSUxFICogaW5wdXRfZmlsZTsKICAgRklMRSAqIG91dHB1dF9maWxlOworICB1bnNpZ25lZCBjaGFyICppbmJ1ZmZlciA9IE5VTEw7CisgIHVuc2lnbmVkIGxvbmcgaW5zaXplID0gMDsKICAgSkRJTUVOU0lPTiBudW1fc2NhbmxpbmVzOwogCiAgIC8qIE9uIE1hYywgZmV0Y2ggYSBjb21tYW5kIGxpbmUuICovCkBAIC00NTIsNyArNDcxLDcgQEAKIAogICBwcm9nbmFtZSA9IGFyZ3ZbMF07CiAgIGlmIChwcm9nbmFtZSA9PSBOVUxMIHx8IHByb2duYW1lWzBdID09IDApCi0gICAgcHJvZ25hbWUgPSAiZGpwZWciOwkJLyogaW4gY2FzZSBDIGxpYnJhcnkgZG9lc24ndCBwcm92aWRlIGl0ICovCisgICAgcHJvZ25hbWUgPSAiZGpwZWciOyAgICAgICAgIC8qIGluIGNhc2UgQyBsaWJyYXJ5IGRvZXNuJ3QgcHJvdmlkZSBpdCAqLwogCiAgIC8qIEluaXRpYWxpemUgdGhlIEpQRUcgZGVjb21wcmVzc2lvbiBvYmplY3Qgd2l0aCBkZWZhdWx0IGVycm9yIGhhbmRsaW5nLiAqLwogICBjaW5mby5lcnIgPSBqcGVnX3N0ZF9lcnJvcigmamVycik7CkBAIC00OTEsMTQgKzUxMCwxNCBAQAogICBpZiAob3V0ZmlsZW5hbWUgPT0gTlVMTCkgewogICAgIGlmIChmaWxlX2luZGV4ICE9IGFyZ2MtMikgewogICAgICAgZnByaW50ZihzdGRlcnIsICIlczogbXVzdCBuYW1lIG9uZSBpbnB1dCBhbmQgb25lIG91dHB1dCBmaWxlXG4iLAotCSAgICAgIHByb2duYW1lKTsKKyAgICAgICAgICAgICAgcHJvZ25hbWUpOwogICAgICAgdXNhZ2UoKTsKICAgICB9CiAgICAgb3V0ZmlsZW5hbWUgPSBhcmd2W2ZpbGVfaW5kZXgrMV07CiAgIH0gZWxzZSB7CiAgICAgaWYgKGZpbGVfaW5kZXggIT0gYXJnYy0xKSB7CiAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBtdXN0IG5hbWUgb25lIGlucHV0IGFuZCBvbmUgb3V0cHV0IGZpbGVcbiIsCi0JICAgICAgcHJvZ25hbWUpOworICAgICAgICAgICAgICBwcm9nbmFtZSk7CiAgICAgICB1c2FnZSgpOwogICAgIH0KICAgfQpAQCAtNTM3LDcgKzU1NiwzMCBAQAogI2VuZGlmCiAKICAgLyogU3BlY2lmeSBkYXRhIHNvdXJjZSBmb3IgZGVjb21wcmVzc2lvbiAqLwotICBqcGVnX3N0ZGlvX3NyYygmY2luZm8sIGlucHV0X2ZpbGUpOworI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gODAgfHwgZGVmaW5lZChNRU1fU1JDRFNUX1NVUFBPUlRFRCkKKyAgaWYgKG1lbXNyYykgeworICAgIHNpemVfdCBuYnl0ZXM7CisgICAgZG8geworICAgICAgaW5idWZmZXIgPSAodW5zaWduZWQgY2hhciAqKXJlYWxsb2MoaW5idWZmZXIsIGluc2l6ZSArIElOUFVUX0JVRl9TSVpFKTsKKyAgICAgIGlmIChpbmJ1ZmZlciA9PSBOVUxMKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVcbiIsIHByb2duYW1lKTsKKyAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgfQorICAgICAgbmJ5dGVzID0gSkZSRUFEKGlucHV0X2ZpbGUsICZpbmJ1ZmZlcltpbnNpemVdLCBJTlBVVF9CVUZfU0laRSk7CisgICAgICBpZiAobmJ5dGVzIDwgSU5QVVRfQlVGX1NJWkUgJiYgZmVycm9yKGlucHV0X2ZpbGUpKSB7CisgICAgICAgIGlmIChmaWxlX2luZGV4IDwgYXJnYykKKyAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBjYW4ndCByZWFkIGZyb20gJXNcbiIsIHByb2duYW1lLAorICAgICAgICAgICAgICAgICAgYXJndltmaWxlX2luZGV4XSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBjYW4ndCByZWFkIGZyb20gc3RkaW5cbiIsIHByb2duYW1lKTsKKyAgICAgIH0KKyAgICAgIGluc2l6ZSArPSAodW5zaWduZWQgbG9uZyluYnl0ZXM7CisgICAgfSB3aGlsZSAobmJ5dGVzID09IElOUFVUX0JVRl9TSVpFKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkNvbXByZXNzZWQgc2l6ZTogICVsdSBieXRlc1xuIiwgaW5zaXplKTsKKyAgICBqcGVnX21lbV9zcmMoJmNpbmZvLCBpbmJ1ZmZlciwgaW5zaXplKTsKKyAgfSBlbHNlCisjZW5kaWYKKyAgICBqcGVnX3N0ZGlvX3NyYygmY2luZm8sIGlucHV0X2ZpbGUpOwogCiAgIC8qIFJlYWQgZmlsZSBoZWFkZXIsIHNldCBkZWZhdWx0IGRlY29tcHJlc3Npb24gcGFyYW1ldGVycyAqLwogICAodm9pZCkganBlZ19yZWFkX2hlYWRlcigmY2luZm8sIFRSVUUpOwpAQCAtNTkyLDcgKzYzNCw3IEBACiAgIC8qIFByb2Nlc3MgZGF0YSAqLwogICB3aGlsZSAoY2luZm8ub3V0cHV0X3NjYW5saW5lIDwgY2luZm8ub3V0cHV0X2hlaWdodCkgewogICAgIG51bV9zY2FubGluZXMgPSBqcGVnX3JlYWRfc2NhbmxpbmVzKCZjaW5mbywgZGVzdF9tZ3ItPmJ1ZmZlciwKLQkJCQkJZGVzdF9tZ3ItPmJ1ZmZlcl9oZWlnaHQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfbWdyLT5idWZmZXJfaGVpZ2h0KTsKICAgICAoKmRlc3RfbWdyLT5wdXRfcGl4ZWxfcm93cykgKCZjaW5mbywgZGVzdF9tZ3IsIG51bV9zY2FubGluZXMpOwogICB9CiAKQEAgLTYyMSw3ICs2NjMsMTAgQEAKICAgZW5kX3Byb2dyZXNzX21vbml0b3IoKGpfY29tbW9uX3B0cikgJmNpbmZvKTsKICNlbmRpZgogCisgIGlmIChtZW1zcmMgJiYgaW5idWZmZXIgIT0gTlVMTCkKKyAgICBmcmVlKGluYnVmZmVyKTsKKwogICAvKiBBbGwgZG9uZS4gKi8KICAgZXhpdChqZXJyLm51bV93YXJuaW5ncyA/IEVYSVRfV0FSTklORyA6IEVYSVRfU1VDQ0VTUyk7Ci0gIHJldHVybiAwOwkJCS8qIHN1cHByZXNzIG5vLXJldHVybi12YWx1ZSB3YXJuaW5ncyAqLworICByZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgICAvKiBzdXBwcmVzcyBuby1yZXR1cm4tdmFsdWUgd2FybmluZ3MgKi8KIH0KZGlmZiAtLWdpdCBhL2RvYy9odG1sL2Fubm90YXRlZC5odG1sIGIvZG9jL2h0bWwvYW5ub3RhdGVkLmh0bWwKaW5kZXggMTZhOWM0OC4uN2NlYWYzZSAxMDA2NDQKLS0tIGEvZG9jL2h0bWwvYW5ub3RhdGVkLmh0bWwKKysrIGIvZG9jL2h0bWwvYW5ub3RhdGVkLmh0bWwKQEAgLTIsMzUgKzIsNDYgQEAKIDxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KIDxoZWFkPgogPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L3hodG1sO2NoYXJzZXQ9VVRGLTgiLz4KKzxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9OSIvPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb3h5Z2VuIDEuOC4zLjEiLz4KIDx0aXRsZT5UdXJib0pQRUc6IERhdGEgU3RydWN0dXJlczwvdGl0bGU+CiA8bGluayBocmVmPSJ0YWJzLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIvPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ianF1ZXJ5LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImR5bnNlY3Rpb25zLmpzIj48L3NjcmlwdD4KIDxsaW5rIGhyZWY9InNlYXJjaC9zZWFyY2guY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIi8+CiA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJzZWFyY2gvc2VhcmNoLmpzIj48L3NjcmlwdD4KLTxsaW5rIGhyZWY9ImRveHlnZW4uY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIi8+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgeyBzZWFyY2hCb3guT25TZWxlY3RJdGVtKDApOyB9KTsKKzwvc2NyaXB0PgorPGxpbmsgaHJlZj0iZG94eWdlbi5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIC8+Cis8bGluayBocmVmPSJkb3h5Z2VuLWV4dHJhLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIvPgogPC9oZWFkPgotPGJvZHkgb25sb2FkPSdzZWFyY2hCb3guT25TZWxlY3RJdGVtKDApOyc+Ci08IS0tIEdlbmVyYXRlZCBieSBEb3h5Z2VuIDEuNy40IC0tPgotPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KLXZhciBzZWFyY2hCb3ggPSBuZXcgU2VhcmNoQm94KCJzZWFyY2hCb3giLCAic2VhcmNoIixmYWxzZSwnU2VhcmNoJyk7Ci0tLT48L3NjcmlwdD4KLTxkaXYgaWQ9InRvcCI+Cis8Ym9keT4KKzxkaXYgaWQ9InRvcCI+PCEtLSBkbyBub3QgcmVtb3ZlIHRoaXMgZGl2LCBpdCBpcyBjbG9zZWQgYnkgZG94eWdlbiEgLS0+CiA8ZGl2IGlkPSJ0aXRsZWFyZWEiPgogPHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCI+CiAgPHRib2R5PgogIDx0ciBzdHlsZT0iaGVpZ2h0OiA1NnB4OyI+CiAgIDx0ZCBzdHlsZT0icGFkZGluZy1sZWZ0OiAwLjVlbTsiPgotICAgPGRpdiBpZD0icHJvamVjdG5hbWUiPlR1cmJvSlBFRyYjMTYwOzxzcGFuIGlkPSJwcm9qZWN0bnVtYmVyIj4xLjIuMTwvc3Bhbj48L2Rpdj4KKyAgIDxkaXYgaWQ9InByb2plY3RuYW1lIj5UdXJib0pQRUcKKyAgICYjMTYwOzxzcGFuIGlkPSJwcm9qZWN0bnVtYmVyIj4xLjIuMTwvc3Bhbj4KKyAgIDwvZGl2PgogICA8L3RkPgogIDwvdHI+CiAgPC90Ym9keT4KIDwvdGFibGU+CiA8L2Rpdj4KKzwhLS0gZW5kIGhlYWRlciBwYXJ0IC0tPgorPCEtLSBHZW5lcmF0ZWQgYnkgRG94eWdlbiAxLjguMy4xIC0tPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgordmFyIHNlYXJjaEJveCA9IG5ldyBTZWFyY2hCb3goInNlYXJjaEJveCIsICJzZWFyY2giLGZhbHNlLCdTZWFyY2gnKTsKKzwvc2NyaXB0PgogICA8ZGl2IGlkPSJuYXZyb3cxIiBjbGFzcz0idGFicyI+CiAgICAgPHVsIGNsYXNzPSJ0YWJsaXN0Ij4KICAgICAgIDxsaT48YSBocmVmPSJpbmRleC5odG1sIj48c3Bhbj5NYWluJiMxNjA7UGFnZTwvc3Bhbj48L2E+PC9saT4KICAgICAgIDxsaT48YSBocmVmPSJtb2R1bGVzLmh0bWwiPjxzcGFuPk1vZHVsZXM8L3NwYW4+PC9hPjwvbGk+CiAgICAgICA8bGkgY2xhc3M9ImN1cnJlbnQiPjxhIGhyZWY9ImFubm90YXRlZC5odG1sIj48c3Bhbj5EYXRhJiMxNjA7U3RydWN0dXJlczwvc3Bhbj48L2E+PC9saT4KLSAgICAgIDxsaSBpZD0ic2VhcmNobGkiPgorICAgICAgPGxpPgogICAgICAgICA8ZGl2IGlkPSJNU2VhcmNoQm94IiBjbGFzcz0iTVNlYXJjaEJveEluYWN0aXZlIj4KICAgICAgICAgPHNwYW4gY2xhc3M9ImxlZnQiPgogICAgICAgICAgIDxpbWcgaWQ9Ik1TZWFyY2hTZWxlY3QiIHNyYz0ic2VhcmNoL21hZ19zZWwucG5nIgpAQCAtNTUsMjQgKzY2LDEzIEBACiAgICAgICA8bGk+PGEgaHJlZj0iZnVuY3Rpb25zLmh0bWwiPjxzcGFuPkRhdGEmIzE2MDtGaWVsZHM8L3NwYW4+PC9hPjwvbGk+CiAgICAgPC91bD4KICAgPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImhlYWRlciI+Ci0gIDxkaXYgY2xhc3M9ImhlYWRlcnRpdGxlIj4KLTxkaXYgY2xhc3M9InRpdGxlIj5EYXRhIFN0cnVjdHVyZXM8L2Rpdj4gIDwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJjb250ZW50cyI+Ci08ZGl2IGNsYXNzPSJ0ZXh0YmxvY2siPkhlcmUgYXJlIHRoZSBkYXRhIHN0cnVjdHVyZXMgd2l0aCBicmllZiBkZXNjcmlwdGlvbnM6PC9kaXY+PHRhYmxlPgotICA8dHI+PHRkIGNsYXNzPSJpbmRleGtleSI+PGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anJlZ2lvbi5odG1sIj50anJlZ2lvbjwvYT48L3RkPjx0ZCBjbGFzcz0iaW5kZXh2YWx1ZSI+Q3JvcHBpbmcgcmVnaW9uIDwvdGQ+PC90cj4KLSAgPHRyPjx0ZCBjbGFzcz0iaW5kZXhrZXkiPjxhIGNsYXNzPSJlbCIgaHJlZj0ic3RydWN0dGpzY2FsaW5nZmFjdG9yLmh0bWwiPnRqc2NhbGluZ2ZhY3RvcjwvYT48L3RkPjx0ZCBjbGFzcz0iaW5kZXh2YWx1ZSI+U2NhbGluZyBmYWN0b3IgPC90ZD48L3RyPgotICA8dHI+PHRkIGNsYXNzPSJpbmRleGtleSI+PGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anRyYW5zZm9ybS5odG1sIj50anRyYW5zZm9ybTwvYT48L3RkPjx0ZCBjbGFzcz0iaW5kZXh2YWx1ZSI+TG9zc2xlc3MgdHJhbnNmb3JtIDwvdGQ+PC90cj4KLTwvdGFibGU+Ci08L2Rpdj4KKzwvZGl2PjwhLS0gdG9wIC0tPgogPCEtLSB3aW5kb3cgc2hvd2luZyB0aGUgZmlsdGVyIG9wdGlvbnMgLS0+CiA8ZGl2IGlkPSJNU2VhcmNoU2VsZWN0V2luZG93IgogICAgICBvbm1vdXNlb3Zlcj0icmV0dXJuIHNlYXJjaEJveC5PblNlYXJjaFNlbGVjdFNob3coKSIKICAgICAgb25tb3VzZW91dD0icmV0dXJuIHNlYXJjaEJveC5PblNlYXJjaFNlbGVjdEhpZGUoKSIKICAgICAgb25rZXlkb3duPSJyZXR1cm4gc2VhcmNoQm94Lk9uU2VhcmNoU2VsZWN0S2V5KGV2ZW50KSI+Ci08YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDApIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkFsbDwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDEpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkRhdGEgU3RydWN0dXJlczwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDIpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPlZhcmlhYmxlczwvYT48L2Rpdj4KKzxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oMCkiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+QWxsPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oMSkiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+RGF0YSBTdHJ1Y3R1cmVzPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oMikiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+RnVuY3Rpb25zPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oMykiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+VmFyaWFibGVzPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oNCkiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+VHlwZWRlZnM8L2E+PGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSg1KSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5FbnVtZXJhdGlvbnM8L2E+PGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSg2KSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5FbnVtZXJhdG9yPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oNykiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+R3JvdXBzPC9hPjwvZGl2PgogCiA8IS0tIGlmcmFtZSBzaG93aW5nIHRoZSBzZWFyY2ggcmVzdWx0cyAoY2xvc2VkIGJ5IGRlZmF1bHQpIC0tPgogPGRpdiBpZD0iTVNlYXJjaFJlc3VsdHNXaW5kb3ciPgpAQCAtODEsOCArODEsMjQgQEAKIDwvaWZyYW1lPgogPC9kaXY+CiAKLTxociBjbGFzcz0iZm9vdGVyIi8+PGFkZHJlc3MgY2xhc3M9ImZvb3RlciI+PHNtYWxsPkdlbmVyYXRlZCBvbiBGcmkgSnVuIDI5IDIwMTIgMTg6MTQ6NTUgZm9yIFR1cmJvSlBFRyBieSYjMTYwOwotPGEgaHJlZj0iaHR0cDovL3d3dy5kb3h5Z2VuLm9yZy9pbmRleC5odG1sIj4KLTxpbWcgY2xhc3M9ImZvb3RlciIgc3JjPSJkb3h5Z2VuLnBuZyIgYWx0PSJkb3h5Z2VuIi8+PC9hPiAxLjcuNCA8L3NtYWxsPjwvYWRkcmVzcz4KKzxkaXYgY2xhc3M9ImhlYWRlciI+CisgIDxkaXYgY2xhc3M9ImhlYWRlcnRpdGxlIj4KKzxkaXYgY2xhc3M9InRpdGxlIj5EYXRhIFN0cnVjdHVyZXM8L2Rpdj4gIDwvZGl2PgorPC9kaXY+PCEtLWhlYWRlci0tPgorPGRpdiBjbGFzcz0iY29udGVudHMiPgorPGRpdiBjbGFzcz0idGV4dGJsb2NrIj5IZXJlIGFyZSB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHdpdGggYnJpZWYgZGVzY3JpcHRpb25zOjwvZGl2PjxkaXYgY2xhc3M9ImRpcmVjdG9yeSI+Cis8dGFibGUgY2xhc3M9ImRpcmVjdG9yeSI+Cis8dHIgaWQ9InJvd18wXyIgY2xhc3M9ImV2ZW4iPjx0ZCBjbGFzcz0iZW50cnkiPjxpbWcgc3JjPSJmdHYybm9kZS5wbmciIGFsdD0ibyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjIyIiAvPjxpbWcgc3JjPSJmdHYyY2wucG5nIiBhbHQ9IkMiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyMiIgLz48YSBjbGFzcz0iZWwiIGhyZWY9InN0cnVjdHRqcmVnaW9uLmh0bWwiIHRhcmdldD0iX3NlbGYiPnRqcmVnaW9uPC9hPjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj5Dcm9wcGluZyByZWdpb248L3RkPjwvdHI+Cis8dHIgaWQ9InJvd18xXyI+PHRkIGNsYXNzPSJlbnRyeSI+PGltZyBzcmM9ImZ0djJub2RlLnBuZyIgYWx0PSJvIiB3aWR0aD0iMTYiIGhlaWdodD0iMjIiIC8+PGltZyBzcmM9ImZ0djJjbC5wbmciIGFsdD0iQyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjIyIiAvPjxhIGNsYXNzPSJlbCIgaHJlZj0ic3RydWN0dGpzY2FsaW5nZmFjdG9yLmh0bWwiIHRhcmdldD0iX3NlbGYiPnRqc2NhbGluZ2ZhY3RvcjwvYT48L3RkPjx0ZCBjbGFzcz0iZGVzYyI+U2NhbGluZyBmYWN0b3I8L3RkPjwvdHI+Cis8dHIgaWQ9InJvd18yXyIgY2xhc3M9ImV2ZW4iPjx0ZCBjbGFzcz0iZW50cnkiPjxpbWcgc3JjPSJmdHYybGFzdG5vZGUucG5nIiBhbHQ9IlwiIHdpZHRoPSIxNiIgaGVpZ2h0PSIyMiIgLz48aW1nIHNyYz0iZnR2MmNsLnBuZyIgYWx0PSJDIiB3aWR0aD0iMjQiIGhlaWdodD0iMjIiIC8+PGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anRyYW5zZm9ybS5odG1sIiB0YXJnZXQ9Il9zZWxmIj50anRyYW5zZm9ybTwvYT48L3RkPjx0ZCBjbGFzcz0iZGVzYyI+TG9zc2xlc3MgdHJhbnNmb3JtPC90ZD48L3RyPgorPC90YWJsZT4KKzwvZGl2PjwhLS0gZGlyZWN0b3J5IC0tPgorPC9kaXY+PCEtLSBjb250ZW50cyAtLT4KKzwhLS0gc3RhcnQgZm9vdGVyIHBhcnQgLS0+Cis8aHIgY2xhc3M9ImZvb3RlciIvPjxhZGRyZXNzIGNsYXNzPSJmb290ZXIiPjxzbWFsbD4KK0dlbmVyYXRlZCBieSAmIzE2MDs8YSBocmVmPSJodHRwOi8vd3d3LmRveHlnZW4ub3JnL2luZGV4Lmh0bWwiPgorPGltZyBjbGFzcz0iZm9vdGVyIiBzcmM9ImRveHlnZW4ucG5nIiBhbHQ9ImRveHlnZW4iLz4KKzwvYT4gMS44LjMuMQorPC9zbWFsbD48L2FkZHJlc3M+CiA8L2JvZHk+CiA8L2h0bWw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9iY19zLnBuZyBiL2RvYy9odG1sL2JjX3MucG5nCmluZGV4IGU0MDE4NjIuLjIyNGIyOWEgMTAwNjQ0Ci0tLSBhL2RvYy9odG1sL2JjX3MucG5nCisrKyBiL2RvYy9odG1sL2JjX3MucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvYy9odG1sL2Jkd24ucG5nIGIvZG9jL2h0bWwvYmR3bi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQwYTBiOQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL2Jkd24ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvYy9odG1sL2NsYXNzZXMuaHRtbCBiL2RvYy9odG1sL2NsYXNzZXMuaHRtbAppbmRleCA5MzI3YjRmLi42MTNjYTJiIDEwMDY0NAotLS0gYS9kb2MvaHRtbC9jbGFzc2VzLmh0bWwKKysrIGIvZG9jL2h0bWwvY2xhc3Nlcy5odG1sCkBAIC0yLDM1ICsyLDQ2IEBACiA8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+CiA8aGVhZD4KIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC94aHRtbDtjaGFyc2V0PVVURi04Ii8+Cis8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPTkiLz4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG94eWdlbiAxLjguMy4xIi8+CiA8dGl0bGU+VHVyYm9KUEVHOiBEYXRhIFN0cnVjdHVyZSBJbmRleDwvdGl0bGU+CiA8bGluayBocmVmPSJ0YWJzLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIvPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ianF1ZXJ5LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImR5bnNlY3Rpb25zLmpzIj48L3NjcmlwdD4KIDxsaW5rIGhyZWY9InNlYXJjaC9zZWFyY2guY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIi8+CiA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJzZWFyY2gvc2VhcmNoLmpzIj48L3NjcmlwdD4KLTxsaW5rIGhyZWY9ImRveHlnZW4uY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIi8+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgeyBzZWFyY2hCb3guT25TZWxlY3RJdGVtKDApOyB9KTsKKzwvc2NyaXB0PgorPGxpbmsgaHJlZj0iZG94eWdlbi5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIC8+Cis8bGluayBocmVmPSJkb3h5Z2VuLWV4dHJhLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIvPgogPC9oZWFkPgotPGJvZHkgb25sb2FkPSdzZWFyY2hCb3guT25TZWxlY3RJdGVtKDApOyc+Ci08IS0tIEdlbmVyYXRlZCBieSBEb3h5Z2VuIDEuNy40IC0tPgotPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KLXZhciBzZWFyY2hCb3ggPSBuZXcgU2VhcmNoQm94KCJzZWFyY2hCb3giLCAic2VhcmNoIixmYWxzZSwnU2VhcmNoJyk7Ci0tLT48L3NjcmlwdD4KLTxkaXYgaWQ9InRvcCI+Cis8Ym9keT4KKzxkaXYgaWQ9InRvcCI+PCEtLSBkbyBub3QgcmVtb3ZlIHRoaXMgZGl2LCBpdCBpcyBjbG9zZWQgYnkgZG94eWdlbiEgLS0+CiA8ZGl2IGlkPSJ0aXRsZWFyZWEiPgogPHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCI+CiAgPHRib2R5PgogIDx0ciBzdHlsZT0iaGVpZ2h0OiA1NnB4OyI+CiAgIDx0ZCBzdHlsZT0icGFkZGluZy1sZWZ0OiAwLjVlbTsiPgotICAgPGRpdiBpZD0icHJvamVjdG5hbWUiPlR1cmJvSlBFRyYjMTYwOzxzcGFuIGlkPSJwcm9qZWN0bnVtYmVyIj4xLjIuMTwvc3Bhbj48L2Rpdj4KKyAgIDxkaXYgaWQ9InByb2plY3RuYW1lIj5UdXJib0pQRUcKKyAgICYjMTYwOzxzcGFuIGlkPSJwcm9qZWN0bnVtYmVyIj4xLjIuMTwvc3Bhbj4KKyAgIDwvZGl2PgogICA8L3RkPgogIDwvdHI+CiAgPC90Ym9keT4KIDwvdGFibGU+CiA8L2Rpdj4KKzwhLS0gZW5kIGhlYWRlciBwYXJ0IC0tPgorPCEtLSBHZW5lcmF0ZWQgYnkgRG94eWdlbiAxLjguMy4xIC0tPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgordmFyIHNlYXJjaEJveCA9IG5ldyBTZWFyY2hCb3goInNlYXJjaEJveCIsICJzZWFyY2giLGZhbHNlLCdTZWFyY2gnKTsKKzwvc2NyaXB0PgogICA8ZGl2IGlkPSJuYXZyb3cxIiBjbGFzcz0idGFicyI+CiAgICAgPHVsIGNsYXNzPSJ0YWJsaXN0Ij4KICAgICAgIDxsaT48YSBocmVmPSJpbmRleC5odG1sIj48c3Bhbj5NYWluJiMxNjA7UGFnZTwvc3Bhbj48L2E+PC9saT4KICAgICAgIDxsaT48YSBocmVmPSJtb2R1bGVzLmh0bWwiPjxzcGFuPk1vZHVsZXM8L3NwYW4+PC9hPjwvbGk+CiAgICAgICA8bGkgY2xhc3M9ImN1cnJlbnQiPjxhIGhyZWY9ImFubm90YXRlZC5odG1sIj48c3Bhbj5EYXRhJiMxNjA7U3RydWN0dXJlczwvc3Bhbj48L2E+PC9saT4KLSAgICAgIDxsaSBpZD0ic2VhcmNobGkiPgorICAgICAgPGxpPgogICAgICAgICA8ZGl2IGlkPSJNU2VhcmNoQm94IiBjbGFzcz0iTVNlYXJjaEJveEluYWN0aXZlIj4KICAgICAgICAgPHNwYW4gY2xhc3M9ImxlZnQiPgogICAgICAgICAgIDxpbWcgaWQ9Ik1TZWFyY2hTZWxlY3QiIHNyYz0ic2VhcmNoL21hZ19zZWwucG5nIgpAQCAtNTUsMjMgKzY2LDEzIEBACiAgICAgICA8bGk+PGEgaHJlZj0iZnVuY3Rpb25zLmh0bWwiPjxzcGFuPkRhdGEmIzE2MDtGaWVsZHM8L3NwYW4+PC9hPjwvbGk+CiAgICAgPC91bD4KICAgPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImhlYWRlciI+Ci0gIDxkaXYgY2xhc3M9ImhlYWRlcnRpdGxlIj4KLTxkaXYgY2xhc3M9InRpdGxlIj5EYXRhIFN0cnVjdHVyZSBJbmRleDwvZGl2PiAgPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImNvbnRlbnRzIj4KLTxkaXYgY2xhc3M9InFpbmRleCI+PGEgY2xhc3M9InFpbmRleCIgaHJlZj0iI2xldHRlcl9UIj5UPC9hPjwvZGl2PgotPHRhYmxlIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI5NSUiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIj4KLTx0cj48dGQ+PGEgbmFtZT0ibGV0dGVyX1QiPjwvYT48dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiPjx0cj48dGQ+PGRpdiBjbGFzcz0iYWgiPiYjMTYwOyYjMTYwO1QmIzE2MDsmIzE2MDs8L2Rpdj48L3RkPjwvdHI+PC90YWJsZT4KLTwvdGQ+PHRkPjxhIGNsYXNzPSJlbCIgaHJlZj0ic3RydWN0dGpyZWdpb24uaHRtbCI+dGpyZWdpb248L2E+JiMxNjA7JiMxNjA7JiMxNjA7PC90ZD48dGQ+PGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anNjYWxpbmdmYWN0b3IuaHRtbCI+dGpzY2FsaW5nZmFjdG9yPC9hPiYjMTYwOyYjMTYwOyYjMTYwOzwvdGQ+PHRkPjxhIGNsYXNzPSJlbCIgaHJlZj0ic3RydWN0dGp0cmFuc2Zvcm0uaHRtbCI+dGp0cmFuc2Zvcm08L2E+JiMxNjA7JiMxNjA7JiMxNjA7PC90ZD48L3RyPjwvdGFibGU+PGRpdiBjbGFzcz0icWluZGV4Ij48YSBjbGFzcz0icWluZGV4IiBocmVmPSIjbGV0dGVyX1QiPlQ8L2E+PC9kaXY+Ci08L2Rpdj4KKzwvZGl2PjwhLS0gdG9wIC0tPgogPCEtLSB3aW5kb3cgc2hvd2luZyB0aGUgZmlsdGVyIG9wdGlvbnMgLS0+CiA8ZGl2IGlkPSJNU2VhcmNoU2VsZWN0V2luZG93IgogICAgICBvbm1vdXNlb3Zlcj0icmV0dXJuIHNlYXJjaEJveC5PblNlYXJjaFNlbGVjdFNob3coKSIKICAgICAgb25tb3VzZW91dD0icmV0dXJuIHNlYXJjaEJveC5PblNlYXJjaFNlbGVjdEhpZGUoKSIKICAgICAgb25rZXlkb3duPSJyZXR1cm4gc2VhcmNoQm94Lk9uU2VhcmNoU2VsZWN0S2V5KGV2ZW50KSI+Ci08YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDApIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkFsbDwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDEpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkRhdGEgU3RydWN0dXJlczwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDIpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPlZhcmlhYmxlczwvYT48L2Rpdj4KKzxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oMCkiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+QWxsPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oMSkiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+RGF0YSBTdHJ1Y3R1cmVzPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oMikiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+RnVuY3Rpb25zPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oMykiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+VmFyaWFibGVzPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oNCkiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+VHlwZWRlZnM8L2E+PGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSg1KSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5FbnVtZXJhdGlvbnM8L2E+PGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSg2KSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5FbnVtZXJhdG9yPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oNykiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+R3JvdXBzPC9hPjwvZGl2PgogCiA8IS0tIGlmcmFtZSBzaG93aW5nIHRoZSBzZWFyY2ggcmVzdWx0cyAoY2xvc2VkIGJ5IGRlZmF1bHQpIC0tPgogPGRpdiBpZD0iTVNlYXJjaFJlc3VsdHNXaW5kb3ciPgpAQCAtODAsOCArODEsMjYgQEAKIDwvaWZyYW1lPgogPC9kaXY+CiAKLTxociBjbGFzcz0iZm9vdGVyIi8+PGFkZHJlc3MgY2xhc3M9ImZvb3RlciI+PHNtYWxsPkdlbmVyYXRlZCBvbiBGcmkgSnVuIDI5IDIwMTIgMTg6MTQ6NTUgZm9yIFR1cmJvSlBFRyBieSYjMTYwOwotPGEgaHJlZj0iaHR0cDovL3d3dy5kb3h5Z2VuLm9yZy9pbmRleC5odG1sIj4KLTxpbWcgY2xhc3M9ImZvb3RlciIgc3JjPSJkb3h5Z2VuLnBuZyIgYWx0PSJkb3h5Z2VuIi8+PC9hPiAxLjcuNCA8L3NtYWxsPjwvYWRkcmVzcz4KKzxkaXYgY2xhc3M9ImhlYWRlciI+CisgIDxkaXYgY2xhc3M9ImhlYWRlcnRpdGxlIj4KKzxkaXYgY2xhc3M9InRpdGxlIj5EYXRhIFN0cnVjdHVyZSBJbmRleDwvZGl2PiAgPC9kaXY+Cis8L2Rpdj48IS0taGVhZGVyLS0+Cis8ZGl2IGNsYXNzPSJjb250ZW50cyI+Cis8ZGl2IGNsYXNzPSJxaW5kZXgiPjxhIGNsYXNzPSJxaW5kZXgiIGhyZWY9IiNsZXR0ZXJfVCI+VDwvYT48L2Rpdj4KKzx0YWJsZSBzdHlsZT0ibWFyZ2luOiAxMHB4OyB3aGl0ZS1zcGFjZTogbm93cmFwOyIgYWxpZ249ImNlbnRlciIgd2lkdGg9Ijk1JSIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiPgorPHRyPjx0ZCByb3dzcGFuPSIyIiB2YWxpZ249ImJvdHRvbSI+PGEgbmFtZT0ibGV0dGVyX1QiPjwvYT48dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiPjx0cj48dGQ+PGRpdiBjbGFzcz0iYWgiPiYjMTYwOyYjMTYwO1QmIzE2MDsmIzE2MDs8L2Rpdj48L3RkPjwvdHI+PC90YWJsZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIj48YSBjbGFzcz0iZWwiIGhyZWY9InN0cnVjdHRqc2NhbGluZ2ZhY3Rvci5odG1sIj50anNjYWxpbmdmYWN0b3I8L2E+JiMxNjA7JiMxNjA7JiMxNjA7PC90ZD48dGQgdmFsaWduPSJ0b3AiPjxhIGNsYXNzPSJlbCIgaHJlZj0ic3RydWN0dGp0cmFuc2Zvcm0uaHRtbCI+dGp0cmFuc2Zvcm08L2E+JiMxNjA7JiMxNjA7JiMxNjA7PC90ZD48dGQ+PC90ZD48L3RyPgorPHRyPjx0ZD48L3RkPjx0ZD48L3RkPjx0ZD48L3RkPjwvdHI+Cis8dHI+PHRkIHZhbGlnbj0idG9wIj48YSBjbGFzcz0iZWwiIGhyZWY9InN0cnVjdHRqcmVnaW9uLmh0bWwiPnRqcmVnaW9uPC9hPiYjMTYwOyYjMTYwOyYjMTYwOzwvdGQ+PHRkPjwvdGQ+PHRkPjwvdGQ+PHRkPjwvdGQ+PC90cj4KKzx0cj48dGQ+PC90ZD48dGQ+PC90ZD48dGQ+PC90ZD48dGQ+PC90ZD48L3RyPgorPC90YWJsZT4KKzxkaXYgY2xhc3M9InFpbmRleCI+PGEgY2xhc3M9InFpbmRleCIgaHJlZj0iI2xldHRlcl9UIj5UPC9hPjwvZGl2PgorPC9kaXY+PCEtLSBjb250ZW50cyAtLT4KKzwhLS0gc3RhcnQgZm9vdGVyIHBhcnQgLS0+Cis8aHIgY2xhc3M9ImZvb3RlciIvPjxhZGRyZXNzIGNsYXNzPSJmb290ZXIiPjxzbWFsbD4KK0dlbmVyYXRlZCBieSAmIzE2MDs8YSBocmVmPSJodHRwOi8vd3d3LmRveHlnZW4ub3JnL2luZGV4Lmh0bWwiPgorPGltZyBjbGFzcz0iZm9vdGVyIiBzcmM9ImRveHlnZW4ucG5nIiBhbHQ9ImRveHlnZW4iLz4KKzwvYT4gMS44LjMuMQorPC9zbWFsbD48L2FkZHJlc3M+CiA8L2JvZHk+CiA8L2h0bWw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9jbG9zZWQucG5nIGIvZG9jL2h0bWwvY2xvc2VkLnBuZwppbmRleCBiN2Q0YmQ5Li45OGNjMmM5IDEwMDY0NAotLS0gYS9kb2MvaHRtbC9jbG9zZWQucG5nCisrKyBiL2RvYy9odG1sL2Nsb3NlZC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvZG94eWdlbi1leHRyYS5jc3MgYi9kb2MvaHRtbC9kb3h5Z2VuLWV4dHJhLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWJiY2MyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvZG94eWdlbi1leHRyYS5jc3MKQEAgLTAsMCArMSwzIEBACitjb2RlIHsKKwljb2xvcjogIzQ2NjVBMjsgCit9CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9kb3h5Z2VuLmNzcyBiL2RvYy9odG1sL2RveHlnZW4uY3NzCmluZGV4IDc0NDQ1ZmUuLmRhYmFmZjIgMTAwNjQ0Ci0tLSBhL2RvYy9odG1sL2RveHlnZW4uY3NzCisrKyBiL2RvYy9odG1sL2RveHlnZW4uY3NzCkBAIC0xLDEzICsxLDEyIEBACi0vKiBUaGUgc3RhbmRhcmQgQ1NTIGZvciBkb3h5Z2VuICovCisvKiBUaGUgc3RhbmRhcmQgQ1NTIGZvciBkb3h5Z2VuIDEuOC4zLjEgKi8KIAogYm9keSwgdGFibGUsIGRpdiwgcCwgZGwgewotCWZvbnQtZmFtaWx5OiBMdWNpZGEgR3JhbmRlLCBWZXJkYW5hLCBHZW5ldmEsIEFyaWFsLCBzYW5zLXNlcmlmOwotCWZvbnQtc2l6ZTogMTJweDsKKwlmb250OiA0MDAgMTRweC8xOXB4IFJvYm90byxzYW5zLXNlcmlmOwogfQogCiAvKiBAZ3JvdXAgSGVhZGluZyBMZXZlbHMgKi8KIAotaDEgeworaDEuZ3JvdXBoZWFkZXIgewogCWZvbnQtc2l6ZTogMTUwJTsKIH0KIApAQCAtMTcsMTQgKzE2LDM0IEBACiAJbWFyZ2luOiAxMHB4IDJweDsKIH0KIAotaDIgewotCWZvbnQtc2l6ZTogMTIwJTsKK2gyLmdyb3VwaGVhZGVyIHsKKwlib3JkZXItYm90dG9tOiAxcHggc29saWQgIzg3OUVDQjsKKwljb2xvcjogIzM1NEM3QjsKKwlmb250LXNpemU6IDE1MCU7CisJZm9udC13ZWlnaHQ6IG5vcm1hbDsKKwltYXJnaW4tdG9wOiAxLjc1ZW07CisJcGFkZGluZy10b3A6IDhweDsKKwlwYWRkaW5nLWJvdHRvbTogNHB4OworCXdpZHRoOiAxMDAlOwogfQogCi1oMyB7CitoMy5ncm91cGhlYWRlciB7CiAJZm9udC1zaXplOiAxMDAlOwogfQogCitoMSwgaDIsIGgzLCBoNCwgaDUsIGg2IHsKKwktd2Via2l0LXRyYW5zaXRpb246IHRleHQtc2hhZG93IDAuNXMgbGluZWFyOworCS1tb3otdHJhbnNpdGlvbjogdGV4dC1zaGFkb3cgMC41cyBsaW5lYXI7CisJLW1zLXRyYW5zaXRpb246IHRleHQtc2hhZG93IDAuNXMgbGluZWFyOworCS1vLXRyYW5zaXRpb246IHRleHQtc2hhZG93IDAuNXMgbGluZWFyOworCXRyYW5zaXRpb246IHRleHQtc2hhZG93IDAuNXMgbGluZWFyOworCW1hcmdpbi1yaWdodDogMTVweDsKK30KKworaDEuZ2xvdywgaDIuZ2xvdywgaDMuZ2xvdywgaDQuZ2xvdywgaDUuZ2xvdywgaDYuZ2xvdyB7CisJdGV4dC1zaGFkb3c6IDAgMCAxNXB4IGN5YW47Cit9CisKIGR0IHsKIAlmb250LXdlaWdodDogYm9sZDsKIH0KQEAgLTcyLDggKzkxLDYgQEAKIAliYWNrZ3JvdW5kLWNvbG9yOiAjRUJFRkY2OwogCWJvcmRlcjogMXB4IHNvbGlkICNBM0I0RDc7CiAJdGV4dC1hbGlnbjogY2VudGVyOwotCW1hcmdpbjogMnB4OwotCXBhZGRpbmc6IDJweDsKIH0KIAogZGl2LnFpbmRleCwgZGl2Lm5hdnBhdGggewpAQCAtMTIzLDEyICsxNDAsMTIgQEAKIGEuZWxSZWYgewogfQogCi1hLmNvZGUgewotCWNvbG9yOiAjNDY2NUEyOworYS5jb2RlLCBhLmNvZGU6dmlzaXRlZCB7CisJY29sb3I6ICM0NjY1QTI7IAogfQogCi1hLmNvZGVSZWYgewotCWNvbG9yOiAjNDY2NUEyOworYS5jb2RlUmVmLCBhLmNvZGVSZWY6dmlzaXRlZCB7CisJY29sb3I6ICM0NjY1QTI7IAogfQogCiAvKiBAZW5kICovCkBAIC0xMzcsMjAgKzE1NCw3MiBAQAogCW1hcmdpbi1sZWZ0OiAtMWNtOwogfQogCi0uZnJhZ21lbnQgewotCWZvbnQtZmFtaWx5OiBtb25vc3BhY2UsIGZpeGVkOwotCWZvbnQtc2l6ZTogMTA1JTsKK3ByZS5mcmFnbWVudCB7CisgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNDNENGRTU7CisgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNGQkZDRkQ7CisgICAgICAgIHBhZGRpbmc6IDRweCA2cHg7CisgICAgICAgIG1hcmdpbjogNHB4IDhweCA0cHggMnB4OworICAgICAgICBvdmVyZmxvdzogYXV0bzsKKyAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOworICAgICAgICBmb250LXNpemU6ICA5cHQ7CisgICAgICAgIGxpbmUtaGVpZ2h0OiAxMjUlOworICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlLCBmaXhlZDsKKyAgICAgICAgZm9udC1zaXplOiAxMDUlOwogfQogCi1wcmUuZnJhZ21lbnQgewotCWJvcmRlcjogMXB4IHNvbGlkICNDNENGRTU7CitkaXYuZnJhZ21lbnQgeworICAgICAgICBwYWRkaW5nOiA0cHg7CisgICAgICAgIG1hcmdpbjogNHB4OwogCWJhY2tncm91bmQtY29sb3I6ICNGQkZDRkQ7Ci0JcGFkZGluZzogNHB4IDZweDsKLQltYXJnaW46IDRweCA4cHggNHB4IDJweDsKLQlvdmVyZmxvdzogYXV0bzsKLQl3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7Ci0JZm9udC1zaXplOiAgOXB0OwotCWxpbmUtaGVpZ2h0OiAxMjUlOworCWJvcmRlcjogMXB4IHNvbGlkICNDNENGRTU7Cit9CisKK2Rpdi5saW5lIHsKKwlmb250LWZhbWlseTogbW9ub3NwYWNlLCBmaXhlZDsKKyAgICAgICAgZm9udC1zaXplOiAxM3B4OworCW1pbi1oZWlnaHQ6IDEzcHg7CisJbGluZS1oZWlnaHQ6IDEuMDsKKwl0ZXh0LXdyYXA6IHVucmVzdHJpY3RlZDsKKwl3aGl0ZS1zcGFjZTogLW1vei1wcmUtd3JhcDsgLyogTW96ICovCisJd2hpdGUtc3BhY2U6IC1wcmUtd3JhcDsgICAgIC8qIE9wZXJhIDQtNiAqLworCXdoaXRlLXNwYWNlOiAtby1wcmUtd3JhcDsgICAvKiBPcGVyYSA3ICovCisJd2hpdGUtc3BhY2U6IHByZS13cmFwOyAgICAgIC8qIENTUzMgICovCisJd29yZC13cmFwOiBicmVhay13b3JkOyAgICAgIC8qIElFIDUuNSsgKi8KKwl0ZXh0LWluZGVudDogLTUzcHg7CisJcGFkZGluZy1sZWZ0OiA1M3B4OworCXBhZGRpbmctYm90dG9tOiAwcHg7CisJbWFyZ2luOiAwcHg7CisJLXdlYmtpdC10cmFuc2l0aW9uLXByb3BlcnR5OiBiYWNrZ3JvdW5kLWNvbG9yLCBib3gtc2hhZG93OworCS13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbjogMC41czsKKwktbW96LXRyYW5zaXRpb24tcHJvcGVydHk6IGJhY2tncm91bmQtY29sb3IsIGJveC1zaGFkb3c7CisJLW1vei10cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjVzOworCS1tcy10cmFuc2l0aW9uLXByb3BlcnR5OiBiYWNrZ3JvdW5kLWNvbG9yLCBib3gtc2hhZG93OworCS1tcy10cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjVzOworCS1vLXRyYW5zaXRpb24tcHJvcGVydHk6IGJhY2tncm91bmQtY29sb3IsIGJveC1zaGFkb3c7CisJLW8tdHJhbnNpdGlvbi1kdXJhdGlvbjogMC41czsKKwl0cmFuc2l0aW9uLXByb3BlcnR5OiBiYWNrZ3JvdW5kLWNvbG9yLCBib3gtc2hhZG93OworCXRyYW5zaXRpb24tZHVyYXRpb246IDAuNXM7Cit9CisKK2Rpdi5saW5lLmdsb3cgeworCWJhY2tncm91bmQtY29sb3I6IGN5YW47CisJYm94LXNoYWRvdzogMCAwIDEwcHggY3lhbjsKK30KKworCitzcGFuLmxpbmVubyB7CisJcGFkZGluZy1yaWdodDogNHB4OworCXRleHQtYWxpZ246IHJpZ2h0OworCWJvcmRlci1yaWdodDogMnB4IHNvbGlkICMwRjA7CisJYmFja2dyb3VuZC1jb2xvcjogI0U4RThFODsKKyAgICAgICAgd2hpdGUtc3BhY2U6IHByZTsKK30KK3NwYW4ubGluZW5vIGEgeworCWJhY2tncm91bmQtY29sb3I6ICNEOEQ4RDg7Cit9CisKK3NwYW4ubGluZW5vIGE6aG92ZXIgeworCWJhY2tncm91bmQtY29sb3I6ICNDOEM4Qzg7CiB9CiAKIGRpdi5haCB7CkBAIC0xODMsMTUgKzI1MiwxNSBAQAogfQogCiBib2R5IHsKLQliYWNrZ3JvdW5kOiB3aGl0ZTsKKwliYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKIAljb2xvcjogYmxhY2s7CiAgICAgICAgIG1hcmdpbjogMDsKIH0KIAogZGl2LmNvbnRlbnRzIHsKIAltYXJnaW4tdG9wOiAxMHB4OwotCW1hcmdpbi1sZWZ0OiAxMHB4OwotCW1hcmdpbi1yaWdodDogNXB4OworCW1hcmdpbi1sZWZ0OiAxMnB4OworCW1hcmdpbi1yaWdodDogOHB4OwogfQogCiB0ZC5pbmRleGtleSB7CkBAIC0yMDAsNiArMjY5LDggQEAKIAlib3JkZXI6IDFweCBzb2xpZCAjQzRDRkU1OwogCW1hcmdpbjogMnB4IDBweCAycHggMDsKIAlwYWRkaW5nOiAycHggMTBweDsKKyAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKKyAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDsKIH0KIAogdGQuaW5kZXh2YWx1ZSB7CkBAIC0yOTIsNiArMzYzLDEzIEBACiAJY29sb3I6ICNmZjAwMDAgCiB9CiAKK2Jsb2NrcXVvdGUgeworICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjdGOEZCOworICAgICAgICBib3JkZXItbGVmdDogMnB4IHNvbGlkICM5Q0FGRDQ7CisgICAgICAgIG1hcmdpbjogMCAyNHB4IDAgNHB4OworICAgICAgICBwYWRkaW5nOiAwIDEycHggMCAxNnB4OworfQorCiAvKiBAZW5kICovCiAKIC8qCkBAIC0zNDUsNiArNDIzLDI0IEBACiAJcGFkZGluZzogMHB4OwogfQogCisubWVtYmVyZGVjbHMgdGQsIC5maWVsZHRhYmxlIHRyIHsKKwktd2Via2l0LXRyYW5zaXRpb24tcHJvcGVydHk6IGJhY2tncm91bmQtY29sb3IsIGJveC1zaGFkb3c7CisJLXdlYmtpdC10cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjVzOworCS1tb3otdHJhbnNpdGlvbi1wcm9wZXJ0eTogYmFja2dyb3VuZC1jb2xvciwgYm94LXNoYWRvdzsKKwktbW96LXRyYW5zaXRpb24tZHVyYXRpb246IDAuNXM7CisJLW1zLXRyYW5zaXRpb24tcHJvcGVydHk6IGJhY2tncm91bmQtY29sb3IsIGJveC1zaGFkb3c7CisJLW1zLXRyYW5zaXRpb24tZHVyYXRpb246IDAuNXM7CisJLW8tdHJhbnNpdGlvbi1wcm9wZXJ0eTogYmFja2dyb3VuZC1jb2xvciwgYm94LXNoYWRvdzsKKwktby10cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjVzOworCXRyYW5zaXRpb24tcHJvcGVydHk6IGJhY2tncm91bmQtY29sb3IsIGJveC1zaGFkb3c7CisJdHJhbnNpdGlvbi1kdXJhdGlvbjogMC41czsKK30KKworLm1lbWJlcmRlY2xzIHRkLmdsb3csIC5maWVsZHRhYmxlIHRyLmdsb3cgeworCWJhY2tncm91bmQtY29sb3I6IGN5YW47CisJYm94LXNoYWRvdzogMCAwIDE1cHggY3lhbjsKK30KKwogLm1kZXNjTGVmdCwgLm1kZXNjUmlnaHQsCiAubWVtSXRlbUxlZnQsIC5tZW1JdGVtUmlnaHQsCiAubWVtVGVtcGxJdGVtTGVmdCwgLm1lbVRlbXBsSXRlbVJpZ2h0LCAubWVtVGVtcGxQYXJhbXMgewpAQCAtMzU5LDggKzQ1NSwxMSBAQAogCWNvbG9yOiAjNTU1OwogfQogCi0ubWVtSXRlbUxlZnQsIC5tZW1JdGVtUmlnaHQsIC5tZW1UZW1wbFBhcmFtcyB7Ci0JYm9yZGVyLXRvcDogMXB4IHNvbGlkICNDNENGRTU7CisubWVtU2VwYXJhdG9yIHsKKyAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNERUU0RjA7CisgICAgICAgIGxpbmUtaGVpZ2h0OiAxcHg7CisgICAgICAgIG1hcmdpbjogMHB4OworICAgICAgICBwYWRkaW5nOiAwcHg7CiB9CiAKIC5tZW1JdGVtTGVmdCwgLm1lbVRlbXBsSXRlbUxlZnQgewpAQCAtMzc0LDYgKzQ3Myw3IEBACiAubWVtVGVtcGxQYXJhbXMgewogCWNvbG9yOiAjNDY2NUEyOwogICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOworCWZvbnQtc2l6ZTogODAlOwogfQogCiAvKiBAZW5kICovCkBAIC00MDYsMTUgKzUwNiwyOSBAQAogCXBhZGRpbmc6IDA7CiAJbWFyZ2luLWJvdHRvbTogMTBweDsKIAltYXJnaW4tcmlnaHQ6IDVweDsKKyAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiBib3gtc2hhZG93IDAuNXMgbGluZWFyOworICAgICAgICAtbW96LXRyYW5zaXRpb246IGJveC1zaGFkb3cgMC41cyBsaW5lYXI7CisgICAgICAgIC1tcy10cmFuc2l0aW9uOiBib3gtc2hhZG93IDAuNXMgbGluZWFyOworICAgICAgICAtby10cmFuc2l0aW9uOiBib3gtc2hhZG93IDAuNXMgbGluZWFyOworICAgICAgICB0cmFuc2l0aW9uOiBib3gtc2hhZG93IDAuNXMgbGluZWFyOworICAgICAgICBkaXNwbGF5OiB0YWJsZSAhaW1wb3J0YW50OworICAgICAgICB3aWR0aDogMTAwJTsKK30KKworLm1lbWl0ZW0uZ2xvdyB7CisgICAgICAgICBib3gtc2hhZG93OiAwIDAgMTVweCBjeWFuOwogfQogCiAubWVtbmFtZSB7Ci0gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgICBtYXJnaW4tbGVmdDogNnB4OwogfQogCi0ubWVtcHJvdG8geworLm1lbW5hbWUgdGQgeworCXZlcnRpY2FsLWFsaWduOiBib3R0b207Cit9CisKKy5tZW1wcm90bywgZGwucmVmbGlzdCBkdCB7CiAgICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjQThCOEQ5OwogICAgICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNBOEI4RDk7CiAgICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNBOEI4RDk7CkBAIC00MjIsNDUgKzUzNiw1NSBAQAogICAgICAgICBjb2xvcjogIzI1MzU1NTsKICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgICAgIHRleHQtc2hhZG93OiAwcHggMXB4IDFweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7Ci0gICAgICAgIC8qIG9wZXJhIHNwZWNpZmljIG1hcmt1cCAqLwotICAgICAgICBib3gtc2hhZG93OiA1cHggNXB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTUpOwotICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogOHB4OwotICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA4cHg7Ci0gICAgICAgIC8qIGZpcmVmb3ggc3BlY2lmaWMgbWFya3VwICovCi0gICAgICAgIC1tb3otYm94LXNoYWRvdzogcmdiYSgwLCAwLCAwLCAwLjE1KSA1cHggNXB4IDVweDsKLSAgICAgICAgLW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0OiA4cHg7Ci0gICAgICAgIC1tb3otYm9yZGVyLXJhZGl1cy10b3BsZWZ0OiA4cHg7Ci0gICAgICAgIC8qIHdlYmtpdCBzcGVjaWZpYyBtYXJrdXAgKi8KLSAgICAgICAgLXdlYmtpdC1ib3gtc2hhZG93OiA1cHggNXB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTUpOwotICAgICAgICAtd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA4cHg7Ci0gICAgICAgIC13ZWJraXQtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogOHB4OwogICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOnVybCgnbmF2X2YucG5nJyk7CiAgICAgICAgIGJhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14OwogICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTJFOEYyOworICAgICAgICAvKiBvcGVyYSBzcGVjaWZpYyBtYXJrdXAgKi8KKyAgICAgICAgYm94LXNoYWRvdzogNXB4IDVweCA1cHggcmdiYSgwLCAwLCAwLCAwLjE1KTsKKyAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDRweDsKKyAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogNHB4OworICAgICAgICAvKiBmaXJlZm94IHNwZWNpZmljIG1hcmt1cCAqLworICAgICAgICAtbW96LWJveC1zaGFkb3c6IHJnYmEoMCwgMCwgMCwgMC4xNSkgNXB4IDVweCA1cHg7CisgICAgICAgIC1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodDogNHB4OworICAgICAgICAtbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdDogNHB4OworICAgICAgICAvKiB3ZWJraXQgc3BlY2lmaWMgbWFya3VwICovCisgICAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogNXB4IDVweCA1cHggcmdiYSgwLCAwLCAwLCAwLjE1KTsKKyAgICAgICAgLXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNHB4OworICAgICAgICAtd2Via2l0LWJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDRweDsKIAogfQogCi0ubWVtZG9jIHsKKy5tZW1kb2MsIGRsLnJlZmxpc3QgZGQgewogICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0E4QjhEOTsgICAgICAKICAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjQThCOEQ5OyAgICAgIAogICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjQThCOEQ5OyAKLSAgICAgICAgcGFkZGluZzogMnB4IDVweDsKKyAgICAgICAgcGFkZGluZzogNnB4IDEwcHggMnB4IDEwcHg7CiAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNGQkZDRkQ7CiAgICAgICAgIGJvcmRlci10b3Atd2lkdGg6IDA7CisgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6dXJsKCduYXZfZy5wbmcnKTsKKyAgICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7CisgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkY7CiAgICAgICAgIC8qIG9wZXJhIHNwZWNpZmljIG1hcmt1cCAqLwotICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA4cHg7Ci0gICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA4cHg7CisgICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDRweDsKKyAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDRweDsKICAgICAgICAgYm94LXNoYWRvdzogNXB4IDVweCA1cHggcmdiYSgwLCAwLCAwLCAwLjE1KTsKICAgICAgICAgLyogZmlyZWZveCBzcGVjaWZpYyBtYXJrdXAgKi8KLSAgICAgICAgLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6IDhweDsKLSAgICAgICAgLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0OiA4cHg7CisgICAgICAgIC1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0OiA0cHg7CisgICAgICAgIC1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodDogNHB4OwogICAgICAgICAtbW96LWJveC1zaGFkb3c6IHJnYmEoMCwgMCwgMCwgMC4xNSkgNXB4IDVweCA1cHg7Ci0gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IC1tb3otbGluZWFyLWdyYWRpZW50KGNlbnRlciB0b3AsICNGRkZGRkYgMCUsICNGRkZGRkYgNjAlLCAjRjdGOEZCIDk1JSwgI0VFRjFGNyk7CiAgICAgICAgIC8qIHdlYmtpdCBzcGVjaWZpYyBtYXJrdXAgKi8KLSAgICAgICAgLXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA4cHg7Ci0gICAgICAgIC13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDhweDsKKyAgICAgICAgLXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA0cHg7CisgICAgICAgIC13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDRweDsKICAgICAgICAgLXdlYmtpdC1ib3gtc2hhZG93OiA1cHggNXB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTUpOwotICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhcixjZW50ZXIgdG9wLGNlbnRlciBib3R0b20sZnJvbSgjRkZGRkZGKSwgY29sb3Itc3RvcCgwLjYsI0ZGRkZGRiksIGNvbG9yLXN0b3AoMC42MCwjRkZGRkZGKSwgY29sb3Itc3RvcCgwLjk1LCNGN0Y4RkIpLCB0bygjRUVGMUY3KSk7Cit9CisKK2RsLnJlZmxpc3QgZHQgeworICAgICAgICBwYWRkaW5nOiA1cHg7Cit9CisKK2RsLnJlZmxpc3QgZGQgeworICAgICAgICBtYXJnaW46IDBweCAwcHggMTBweCAwcHg7CisgICAgICAgIHBhZGRpbmc6IDVweDsKIH0KIAogLnBhcmFta2V5IHsKQEAgLTQ3OCw5ICs2MDIsMTMgQEAKIC5wYXJhbW5hbWUgZW0gewogCWZvbnQtc3R5bGU6IG5vcm1hbDsKIH0KKy5wYXJhbW5hbWUgY29kZSB7CisgICAgICAgIGxpbmUtaGVpZ2h0OiAxNHB4OworfQogCiAucGFyYW1zLCAucmV0dmFsLCAuZXhjZXB0aW9uLCAudHBhcmFtcyB7Ci0gICAgICAgIGJvcmRlci1zcGFjaW5nOiA2cHggMnB4OworICAgICAgICBtYXJnaW4tbGVmdDogMHB4OworICAgICAgICBwYWRkaW5nLWxlZnQ6IDBweDsKIH0gICAgICAgCiAKIC5wYXJhbXMgLnBhcmFtbmFtZSwgLnJldHZhbCAucGFyYW1uYW1lIHsKQEAgLTQ5OCwxMDUgKzYyNiwxMTYgQEAKICAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDsKIH0KIAordGFibGUubWxhYmVscyB7CisJYm9yZGVyLXNwYWNpbmc6IDBweDsKK30KKwordGQubWxhYmVscy1sZWZ0IHsKKwl3aWR0aDogMTAwJTsKKwlwYWRkaW5nOiAwcHg7Cit9CisKK3RkLm1sYWJlbHMtcmlnaHQgeworCXZlcnRpY2FsLWFsaWduOiBib3R0b207CisJcGFkZGluZzogMHB4OworCXdoaXRlLXNwYWNlOiBub3dyYXA7Cit9CisKK3NwYW4ubWxhYmVscyB7CisgICAgICAgIG1hcmdpbi1sZWZ0OiA4cHg7Cit9CisKK3NwYW4ubWxhYmVsIHsKKyAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzcyOERDMTsKKyAgICAgICAgYm9yZGVyLXRvcDoxcHggc29saWQgIzUzNzNCNDsKKyAgICAgICAgYm9yZGVyLWxlZnQ6MXB4IHNvbGlkICM1MzczQjQ7CisgICAgICAgIGJvcmRlci1yaWdodDoxcHggc29saWQgI0M0Q0ZFNTsKKyAgICAgICAgYm9yZGVyLWJvdHRvbToxcHggc29saWQgI0M0Q0ZFNTsKKwl0ZXh0LXNoYWRvdzogbm9uZTsKKwljb2xvcjogd2hpdGU7CisJbWFyZ2luLXJpZ2h0OiA0cHg7CisJcGFkZGluZzogMnB4IDNweDsKKwlib3JkZXItcmFkaXVzOiAzcHg7CisJZm9udC1zaXplOiA3cHQ7CisJd2hpdGUtc3BhY2U6IG5vd3JhcDsKKwl2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOworfQogCiAKIAogLyogQGVuZCAqLwogCi0vKiBAZ3JvdXAgRGlyZWN0b3J5ICh0cmVlKSAqLworLyogdGhlc2UgYXJlIGZvciB0cmVlIHZpZXcgd2hlbiBub3QgdXNlZCBhcyBtYWluIGluZGV4ICovCiAKLS8qIGZvciB0aGUgdHJlZSB2aWV3ICovCi0KLS5mdHZ0cmVlIHsKLQlmb250LWZhbWlseTogc2Fucy1zZXJpZjsKLQltYXJnaW46IDBweDsKK2Rpdi5kaXJlY3RvcnkgeworICAgICAgICBtYXJnaW46IDEwcHggMHB4OworICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgI0E4QjhEOTsKKyAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNBOEI4RDk7CisgICAgICAgIHdpZHRoOiAxMDAlOwogfQogCi0vKiB0aGVzZSBhcmUgZm9yIHRyZWUgdmlldyB3aGVuIHVzZWQgYXMgbWFpbiBpbmRleCAqLwotCi0uZGlyZWN0b3J5IHsKLQlmb250LXNpemU6IDlwdDsKLQlmb250LXdlaWdodDogYm9sZDsKLQltYXJnaW46IDVweDsKKy5kaXJlY3RvcnkgdGFibGUgeworICAgICAgICBib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7CiB9CiAKLS5kaXJlY3RvcnkgaDMgewotCW1hcmdpbjogMHB4OwotCW1hcmdpbi10b3A6IDFlbTsKLQlmb250LXNpemU6IDExcHQ7CisuZGlyZWN0b3J5IHRkIHsKKyAgICAgICAgbWFyZ2luOiAwcHg7CisgICAgICAgIHBhZGRpbmc6IDBweDsKKwl2ZXJ0aWNhbC1hbGlnbjogdG9wOwogfQogCi0vKgotVGhlIGZvbGxvd2luZyB0d28gc3R5bGVzIGNhbiBiZSB1c2VkIHRvIHJlcGxhY2UgdGhlIHJvb3Qgbm9kZSB0aXRsZQotd2l0aCBhbiBpbWFnZSBvZiB5b3VyIGNob2ljZS4gIFNpbXBseSB1bmNvbW1lbnQgdGhlIG5leHQgdHdvIHN0eWxlcywKLXNwZWNpZnkgdGhlIG5hbWUgb2YgeW91ciBpbWFnZSBhbmQgYmUgc3VyZSB0byBzZXQgJ2hlaWdodCcgdG8gdGhlCi1wcm9wZXIgcGl4ZWwgaGVpZ2h0IG9mIHlvdXIgaW1hZ2UuCi0qLwotCi0vKgotLmRpcmVjdG9yeSBoMy5zd2FwIHsKLQloZWlnaHQ6IDYxcHg7Ci0JYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKLQliYWNrZ3JvdW5kLWltYWdlOiB1cmwoInlvdXJpbWFnZS5naWYiKTsKLX0KLS5kaXJlY3RvcnkgaDMuc3dhcCBzcGFuIHsKLQlkaXNwbGF5OiBub25lOwotfQotKi8KLQotLmRpcmVjdG9yeSA+IGgzIHsKLQltYXJnaW4tdG9wOiAwOworLmRpcmVjdG9yeSB0ZC5lbnRyeSB7CisgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CisgICAgICAgIHBhZGRpbmctcmlnaHQ6IDZweDsKIH0KIAotLmRpcmVjdG9yeSBwIHsKLQltYXJnaW46IDBweDsKLQl3aGl0ZS1zcGFjZTogbm93cmFwOworLmRpcmVjdG9yeSB0ZC5lbnRyeSBhIHsKKyAgICAgICAgb3V0bGluZTpub25lOwogfQogCi0uZGlyZWN0b3J5IGRpdiB7Ci0JZGlzcGxheTogbm9uZTsKLQltYXJnaW46IDBweDsKKy5kaXJlY3RvcnkgdGQuZW50cnkgYSBpbWcgeworICAgICAgICBib3JkZXI6IG5vbmU7Cit9CisKKy5kaXJlY3RvcnkgdGQuZGVzYyB7CisgICAgICAgIHdpZHRoOiAxMDAlOworICAgICAgICBwYWRkaW5nLWxlZnQ6IDZweDsKKwlwYWRkaW5nLXJpZ2h0OiA2cHg7CisJcGFkZGluZy10b3A6IDNweDsKKwlib3JkZXItbGVmdDogMXB4IHNvbGlkIHJnYmEoMCwwLDAsMC4wNSk7Cit9CisKKy5kaXJlY3RvcnkgdHIuZXZlbiB7CisJcGFkZGluZy1sZWZ0OiA2cHg7CisJYmFja2dyb3VuZC1jb2xvcjogI0Y3RjhGQjsKIH0KIAogLmRpcmVjdG9yeSBpbWcgewogCXZlcnRpY2FsLWFsaWduOiAtMzAlOwogfQogCi0vKiB0aGVzZSBhcmUgZm9yIHRyZWUgdmlldyB3aGVuIG5vdCB1c2VkIGFzIG1haW4gaW5kZXggKi8KLQotLmRpcmVjdG9yeS1hbHQgewotCWZvbnQtc2l6ZTogMTAwJTsKLQlmb250LXdlaWdodDogYm9sZDsKKy5kaXJlY3RvcnkgLmxldmVscyB7CisgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CisgICAgICAgIHdpZHRoOiAxMDAlOworICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgICAgZm9udC1zaXplOiA5cHQ7CiB9CiAKLS5kaXJlY3RvcnktYWx0IGgzIHsKLQltYXJnaW46IDBweDsKLQltYXJnaW4tdG9wOiAxZW07Ci0JZm9udC1zaXplOiAxMXB0OworLmRpcmVjdG9yeSAubGV2ZWxzIHNwYW4geworICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CisgICAgICAgIHBhZGRpbmctbGVmdDogMnB4OworICAgICAgICBwYWRkaW5nLXJpZ2h0OiAycHg7CisJY29sb3I6ICMzRDU3OEM7CiB9CiAKLS5kaXJlY3RvcnktYWx0ID4gaDMgewotCW1hcmdpbi10b3A6IDA7Ci19Ci0KLS5kaXJlY3RvcnktYWx0IHAgewotCW1hcmdpbjogMHB4OwotCXdoaXRlLXNwYWNlOiBub3dyYXA7Ci19Ci0KLS5kaXJlY3RvcnktYWx0IGRpdiB7Ci0JZGlzcGxheTogbm9uZTsKLQltYXJnaW46IDBweDsKLX0KLQotLmRpcmVjdG9yeS1hbHQgaW1nIHsKLQl2ZXJ0aWNhbC1hbGlnbjogLTMwJTsKLX0KLQotLyogQGVuZCAqLwotCiBkaXYuZHluaGVhZGVyIHsKICAgICAgICAgbWFyZ2luLXRvcDogOHB4OworCS13ZWJraXQtdG91Y2gtY2FsbG91dDogbm9uZTsKKwktd2Via2l0LXVzZXItc2VsZWN0OiBub25lOworCS1raHRtbC11c2VyLXNlbGVjdDogbm9uZTsKKwktbW96LXVzZXItc2VsZWN0OiBub25lOworCS1tcy11c2VyLXNlbGVjdDogbm9uZTsKKwl1c2VyLXNlbGVjdDogbm9uZTsKIH0KIAogYWRkcmVzcyB7CkBAIC02MDYsNiArNzQ1LDggQEAKIAogdGFibGUuZG94dGFibGUgewogCWJvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTsKKyAgICAgICAgbWFyZ2luLXRvcDogNHB4OworICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7CiB9CiAKIHRhYmxlLmRveHRhYmxlIHRkLCB0YWJsZS5kb3h0YWJsZSB0aCB7CkBAIC02MTksOSArNzYwLDcyIEBACiAJZm9udC1zaXplOiAxMTAlOwogCXBhZGRpbmctYm90dG9tOiA0cHg7CiAJcGFkZGluZy10b3A6IDVweDsKLQl0ZXh0LWFsaWduOmxlZnQ7CiB9CiAKK3RhYmxlLmZpZWxkdGFibGUgeworICAgICAgICAvKndpZHRoOiAxMDAlOyovCisgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CisgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNBOEI4RDk7CisgICAgICAgIGJvcmRlci1zcGFjaW5nOiAwcHg7CisgICAgICAgIC1tb3otYm9yZGVyLXJhZGl1czogNHB4OworICAgICAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDRweDsKKyAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OworICAgICAgICAtbW96LWJveC1zaGFkb3c6IHJnYmEoMCwgMCwgMCwgMC4xNSkgMnB4IDJweCAycHg7CisgICAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogMnB4IDJweCAycHggcmdiYSgwLCAwLCAwLCAwLjE1KTsKKyAgICAgICAgYm94LXNoYWRvdzogMnB4IDJweCAycHggcmdiYSgwLCAwLCAwLCAwLjE1KTsKK30KKworLmZpZWxkdGFibGUgdGQsIC5maWVsZHRhYmxlIHRoIHsKKyAgICAgICAgcGFkZGluZzogM3B4IDdweCAycHg7Cit9CisKKy5maWVsZHRhYmxlIHRkLmZpZWxkdHlwZSwgLmZpZWxkdGFibGUgdGQuZmllbGRuYW1lIHsKKyAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKKyAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI0E4QjhEOTsKKyAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNBOEI4RDk7CisgICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7Cit9CisKKy5maWVsZHRhYmxlIHRkLmZpZWxkbmFtZSB7CisgICAgICAgIHBhZGRpbmctdG9wOiA1cHg7Cit9CisKKy5maWVsZHRhYmxlIHRkLmZpZWxkZG9jIHsKKyAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNBOEI4RDk7CisgICAgICAgIC8qd2lkdGg6IDEwMCU7Ki8KK30KKworLmZpZWxkdGFibGUgdGQuZmllbGRkb2MgcDpmaXJzdC1jaGlsZCB7CisgICAgICAgIG1hcmdpbi10b3A6IDJweDsKK30gICAgICAgCisgICAgICAgIAorLmZpZWxkdGFibGUgdGQuZmllbGRkb2MgcDpsYXN0LWNoaWxkIHsKKyAgICAgICAgbWFyZ2luLWJvdHRvbTogMnB4OworfQorCisuZmllbGR0YWJsZSB0cjpsYXN0LWNoaWxkIHRkIHsKKyAgICAgICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKK30KKworLmZpZWxkdGFibGUgdGggeworICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOnVybCgnbmF2X2YucG5nJyk7CisgICAgICAgIGJhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14OworICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTJFOEYyOworICAgICAgICBmb250LXNpemU6IDkwJTsKKyAgICAgICAgY29sb3I6ICMyNTM1NTU7CisgICAgICAgIHBhZGRpbmctYm90dG9tOiA0cHg7CisgICAgICAgIHBhZGRpbmctdG9wOiA1cHg7CisgICAgICAgIHRleHQtYWxpZ246bGVmdDsKKyAgICAgICAgLW1vei1ib3JkZXItcmFkaXVzLXRvcGxlZnQ6IDRweDsKKyAgICAgICAgLW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0OiA0cHg7CisgICAgICAgIC13ZWJraXQtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogNHB4OworICAgICAgICAtd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA0cHg7CisgICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDRweDsKKyAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDRweDsKKyAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNBOEI4RDk7Cit9CisKKwogLnRhYnNlYXJjaCB7CiAJdG9wOiAwcHg7CiAJbGVmdDogMTBweDsKQEAgLTYzNyw2ICs4NDEsNyBAQAogCWZvbnQtc2l6ZTogMTFweDsKIAliYWNrZ3JvdW5kLWltYWdlOnVybCgndGFiX2IucG5nJyk7CiAJYmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7CisJYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNXB4OwogCWhlaWdodDozMHB4OwogCWxpbmUtaGVpZ2h0OjMwcHg7CiAJY29sb3I6IzhBQTBDQzsKQEAgLTY2NCw2ICs4NjksMTAgQEAKIAlkaXNwbGF5OmJsb2NrOwogCXRleHQtZGVjb3JhdGlvbjogbm9uZTsKIAlvdXRsaW5lOiBub25lOworCWNvbG9yOiAjMjgzQTVEOworCWZvbnQtZmFtaWx5OiAnTHVjaWRhIEdyYW5kZScsR2VuZXZhLEhlbHZldGljYSxBcmlhbCxzYW5zLXNlcmlmOworCXRleHQtc2hhZG93OiAwcHggMXB4IDFweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7CisJdGV4dC1kZWNvcmF0aW9uOiBub25lOyAgICAgICAgCiB9CiAKIC5uYXZwYXRoIGxpLm5hdmVsZW0gYTpob3ZlcgpAQCAtNzAyLDcgKzkxMSw2IEBACiBkaXYuaW5ncm91cHMKIHsKIAlmb250LXNpemU6IDhwdDsKLQlwYWRkaW5nLWxlZnQ6IDVweDsKIAl3aWR0aDogNTAlOwogCXRleHQtYWxpZ246IGxlZnQ7CiB9CkBAIC03MzEsNDcgKzkzOSw3NCBAQAogICAgICAgICBwYWRkaW5nOiAwIDAgMCAxMHB4OwogfQogCi1kbC5ub3RlLCBkbC53YXJuaW5nLCBkbC5hdHRlbnRpb24sIGRsLnByZSwgZGwucG9zdCwgZGwuaW52YXJpYW50LCBkbC5kZXByZWNhdGVkLCBkbC50b2RvLCBkbC50ZXN0LCBkbC5idWcKKy8qIGRsLm5vdGUsIGRsLndhcm5pbmcsIGRsLmF0dGVudGlvbiwgZGwucHJlLCBkbC5wb3N0LCBkbC5pbnZhcmlhbnQsIGRsLmRlcHJlY2F0ZWQsIGRsLnRvZG8sIGRsLnRlc3QsIGRsLmJ1ZyAqLworZGwuc2VjdGlvbgogewotICAgICAgICBib3JkZXItbGVmdDo0cHggc29saWQ7Ci0gICAgICAgIHBhZGRpbmc6IDAgMCAwIDZweDsKKwltYXJnaW4tbGVmdDogMHB4OworCXBhZGRpbmctbGVmdDogMHB4OwogfQogCiBkbC5ub3RlCiB7CisgICAgICAgIG1hcmdpbi1sZWZ0Oi03cHg7CisgICAgICAgIHBhZGRpbmctbGVmdDogM3B4OworICAgICAgICBib3JkZXItbGVmdDo0cHggc29saWQ7CiAgICAgICAgIGJvcmRlci1jb2xvcjogI0QwQzAwMDsKIH0KIAogZGwud2FybmluZywgZGwuYXR0ZW50aW9uCiB7CisgICAgICAgIG1hcmdpbi1sZWZ0Oi03cHg7CisgICAgICAgIHBhZGRpbmctbGVmdDogM3B4OworICAgICAgICBib3JkZXItbGVmdDo0cHggc29saWQ7CiAgICAgICAgIGJvcmRlci1jb2xvcjogI0ZGMDAwMDsKIH0KIAogZGwucHJlLCBkbC5wb3N0LCBkbC5pbnZhcmlhbnQKIHsKKyAgICAgICAgbWFyZ2luLWxlZnQ6LTdweDsKKyAgICAgICAgcGFkZGluZy1sZWZ0OiAzcHg7CisgICAgICAgIGJvcmRlci1sZWZ0OjRweCBzb2xpZDsKICAgICAgICAgYm9yZGVyLWNvbG9yOiAjMDBEMDAwOwogfQogCiBkbC5kZXByZWNhdGVkCiB7CisgICAgICAgIG1hcmdpbi1sZWZ0Oi03cHg7CisgICAgICAgIHBhZGRpbmctbGVmdDogM3B4OworICAgICAgICBib3JkZXItbGVmdDo0cHggc29saWQ7CiAgICAgICAgIGJvcmRlci1jb2xvcjogIzUwNTA1MDsKIH0KIAogZGwudG9kbwogeworICAgICAgICBtYXJnaW4tbGVmdDotN3B4OworICAgICAgICBwYWRkaW5nLWxlZnQ6IDNweDsKKyAgICAgICAgYm9yZGVyLWxlZnQ6NHB4IHNvbGlkOwogICAgICAgICBib3JkZXItY29sb3I6ICMwMEMwRTA7CiB9CiAKIGRsLnRlc3QKIHsKKyAgICAgICAgbWFyZ2luLWxlZnQ6LTdweDsKKyAgICAgICAgcGFkZGluZy1sZWZ0OiAzcHg7CisgICAgICAgIGJvcmRlci1sZWZ0OjRweCBzb2xpZDsKICAgICAgICAgYm9yZGVyLWNvbG9yOiAjMzAzMEUwOwogfQogCiBkbC5idWcKIHsKKyAgICAgICAgbWFyZ2luLWxlZnQ6LTdweDsKKyAgICAgICAgcGFkZGluZy1sZWZ0OiAzcHg7CisgICAgICAgIGJvcmRlci1sZWZ0OjRweCBzb2xpZDsKICAgICAgICAgYm9yZGVyLWNvbG9yOiAjQzA4MDUwOwogfQogCitkbC5zZWN0aW9uIGRkIHsKKwltYXJnaW4tYm90dG9tOiA2cHg7Cit9CisKKwogI3Byb2plY3Rsb2dvCiB7CiAJdGV4dC1hbGlnbjogY2VudGVyOwpAQCAtODMzLDMgKzEwNjgsMTE3IEBACiAJZm9udC13ZWlnaHQ6IGJvbGQ7CiB9CiAKK2Rpdi56b29tCit7CisJYm9yZGVyOiAxcHggc29saWQgIzkwQTVDRTsKK30KKworZGwuY2l0ZWxpc3QgeworICAgICAgICBtYXJnaW4tYm90dG9tOjUwcHg7Cit9CisKK2RsLmNpdGVsaXN0IGR0IHsKKyAgICAgICAgY29sb3I6IzMzNDk3NTsKKyAgICAgICAgZmxvYXQ6bGVmdDsKKyAgICAgICAgZm9udC13ZWlnaHQ6Ym9sZDsKKyAgICAgICAgbWFyZ2luLXJpZ2h0OjEwcHg7CisgICAgICAgIHBhZGRpbmc6NXB4OworfQorCitkbC5jaXRlbGlzdCBkZCB7CisgICAgICAgIG1hcmdpbjoycHggMDsKKyAgICAgICAgcGFkZGluZzo1cHggMDsKK30KKworZGl2LnRvYyB7CisgICAgICAgIHBhZGRpbmc6IDE0cHggMjVweDsKKyAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0Y0RjZGQTsKKyAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI0Q4REZFRTsKKyAgICAgICAgYm9yZGVyLXJhZGl1czogN3B4IDdweCA3cHggN3B4OworICAgICAgICBmbG9hdDogcmlnaHQ7CisgICAgICAgIGhlaWdodDogYXV0bzsKKyAgICAgICAgbWFyZ2luOiAwIDIwcHggMTBweCAxMHB4OworICAgICAgICB3aWR0aDogMjAwcHg7Cit9CisKK2Rpdi50b2MgbGkgeworICAgICAgICBiYWNrZ3JvdW5kOiB1cmwoImJkd24ucG5nIikgbm8tcmVwZWF0IHNjcm9sbCAwIDVweCB0cmFuc3BhcmVudDsKKyAgICAgICAgZm9udDogMTBweC8xLjIgVmVyZGFuYSxEZWphVnUgU2FucyxHZW5ldmEsc2Fucy1zZXJpZjsKKyAgICAgICAgbWFyZ2luLXRvcDogNXB4OworICAgICAgICBwYWRkaW5nLWxlZnQ6IDEwcHg7CisgICAgICAgIHBhZGRpbmctdG9wOiAycHg7Cit9CisKK2Rpdi50b2MgaDMgeworICAgICAgICBmb250OiBib2xkIDEycHgvMS4yIEFyaWFsLEZyZWVTYW5zLHNhbnMtc2VyaWY7CisJY29sb3I6ICM0NjY1QTI7CisgICAgICAgIGJvcmRlci1ib3R0b206IDAgbm9uZTsKKyAgICAgICAgbWFyZ2luOiAwOworfQorCitkaXYudG9jIHVsIHsKKyAgICAgICAgbGlzdC1zdHlsZTogbm9uZSBvdXRzaWRlIG5vbmU7CisgICAgICAgIGJvcmRlcjogbWVkaXVtIG5vbmU7CisgICAgICAgIHBhZGRpbmc6IDBweDsKK30gICAgICAgCisKK2Rpdi50b2MgbGkubGV2ZWwxIHsKKyAgICAgICAgbWFyZ2luLWxlZnQ6IDBweDsKK30KKworZGl2LnRvYyBsaS5sZXZlbDIgeworICAgICAgICBtYXJnaW4tbGVmdDogMTVweDsKK30KKworZGl2LnRvYyBsaS5sZXZlbDMgeworICAgICAgICBtYXJnaW4tbGVmdDogMzBweDsKK30KKworZGl2LnRvYyBsaS5sZXZlbDQgeworICAgICAgICBtYXJnaW4tbGVmdDogNDVweDsKK30KKworLmluaGVyaXRfaGVhZGVyIHsKKyAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgICAgIGNvbG9yOiBncmF5OworICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CisJLXdlYmtpdC10b3VjaC1jYWxsb3V0OiBub25lOworCS13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CisJLWtodG1sLXVzZXItc2VsZWN0OiBub25lOworCS1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CisJLW1zLXVzZXItc2VsZWN0OiBub25lOworCXVzZXItc2VsZWN0OiBub25lOworfQorCisuaW5oZXJpdF9oZWFkZXIgdGQgeworICAgICAgICBwYWRkaW5nOiA2cHggMHB4IDJweCA1cHg7Cit9CisKKy5pbmhlcml0IHsKKyAgICAgICAgZGlzcGxheTogbm9uZTsKK30KKwordHIuaGVhZGluZyBoMiB7CisgICAgICAgIG1hcmdpbi10b3A6IDEycHg7CisgICAgICAgIG1hcmdpbi1ib3R0b206IDRweDsKK30KKworQG1lZGlhIHByaW50Cit7CisgICN0b3AgeyBkaXNwbGF5OiBub25lOyB9CisgICNzaWRlLW5hdiB7IGRpc3BsYXk6IG5vbmU7IH0KKyAgI25hdi1wYXRoIHsgZGlzcGxheTogbm9uZTsgfQorICBib2R5IHsgb3ZlcmZsb3c6dmlzaWJsZTsgfQorICBoMSwgaDIsIGgzLCBoNCwgaDUsIGg2IHsgcGFnZS1icmVhay1hZnRlcjogYXZvaWQ7IH0KKyAgLnN1bW1hcnkgeyBkaXNwbGF5OiBub25lOyB9CisgIC5tZW1pdGVtIHsgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkOyB9CisgICNkb2MtY29udGVudAorICB7CisgICAgbWFyZ2luLWxlZnQ6MCAhaW1wb3J0YW50OworICAgIGhlaWdodDphdXRvICFpbXBvcnRhbnQ7CisgICAgd2lkdGg6YXV0byAhaW1wb3J0YW50OworICAgIG92ZXJmbG93OmluaGVyaXQ7CisgICAgZGlzcGxheTppbmxpbmU7CisgIH0KK30KKwpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvZG94eWdlbi5wbmcgYi9kb2MvaHRtbC9kb3h5Z2VuLnBuZwppbmRleCA2MzVlZDUyLi4zZmYxN2Q4IDEwMDY0NAotLS0gYS9kb2MvaHRtbC9kb3h5Z2VuLnBuZworKysgYi9kb2MvaHRtbC9kb3h5Z2VuLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2MvaHRtbC9keW5zZWN0aW9ucy5qcyBiL2RvYy9odG1sL2R5bnNlY3Rpb25zLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkMDkyYzcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9keW5zZWN0aW9ucy5qcwpAQCAtMCwwICsxLDk3IEBACitmdW5jdGlvbiB0b2dnbGVWaXNpYmlsaXR5KGxpbmtPYmopCit7CisgdmFyIGJhc2UgPSAkKGxpbmtPYmopLmF0dHIoJ2lkJyk7CisgdmFyIHN1bW1hcnkgPSAkKCcjJytiYXNlKyctc3VtbWFyeScpOworIHZhciBjb250ZW50ID0gJCgnIycrYmFzZSsnLWNvbnRlbnQnKTsKKyB2YXIgdHJpZ2dlciA9ICQoJyMnK2Jhc2UrJy10cmlnZ2VyJyk7CisgdmFyIHNyYz0kKHRyaWdnZXIpLmF0dHIoJ3NyYycpOworIGlmIChjb250ZW50LmlzKCc6dmlzaWJsZScpPT09dHJ1ZSkgeworICAgY29udGVudC5oaWRlKCk7CisgICBzdW1tYXJ5LnNob3coKTsKKyAgICQobGlua09iaikuYWRkQ2xhc3MoJ2Nsb3NlZCcpLnJlbW92ZUNsYXNzKCdvcGVuZWQnKTsKKyAgICQodHJpZ2dlcikuYXR0cignc3JjJyxzcmMuc3Vic3RyaW5nKDAsc3JjLmxlbmd0aC04KSsnY2xvc2VkLnBuZycpOworIH0gZWxzZSB7CisgICBjb250ZW50LnNob3coKTsKKyAgIHN1bW1hcnkuaGlkZSgpOworICAgJChsaW5rT2JqKS5yZW1vdmVDbGFzcygnY2xvc2VkJykuYWRkQ2xhc3MoJ29wZW5lZCcpOworICAgJCh0cmlnZ2VyKS5hdHRyKCdzcmMnLHNyYy5zdWJzdHJpbmcoMCxzcmMubGVuZ3RoLTEwKSsnb3Blbi5wbmcnKTsKKyB9IAorIHJldHVybiBmYWxzZTsKK30KKworZnVuY3Rpb24gdXBkYXRlU3RyaXBlcygpCit7CisgICQoJ3RhYmxlLmRpcmVjdG9yeSB0cicpLgorICAgICAgIHJlbW92ZUNsYXNzKCdldmVuJykuZmlsdGVyKCc6dmlzaWJsZTpldmVuJykuYWRkQ2xhc3MoJ2V2ZW4nKTsKK30KK2Z1bmN0aW9uIHRvZ2dsZUxldmVsKGxldmVsKQoreworICAkKCd0YWJsZS5kaXJlY3RvcnkgdHInKS5lYWNoKGZ1bmN0aW9uKCl7IAorICAgIHZhciBsID0gdGhpcy5pZC5zcGxpdCgnXycpLmxlbmd0aC0xOworICAgIHZhciBpID0gJCgnI2ltZycrdGhpcy5pZC5zdWJzdHJpbmcoMykpOworICAgIHZhciBhID0gJCgnI2FycicrdGhpcy5pZC5zdWJzdHJpbmcoMykpOworICAgIGlmIChsPGxldmVsKzEpIHsKKyAgICAgIGkuYXR0cignc3JjJywnZnR2MmZvbGRlcm9wZW4ucG5nJyk7CisgICAgICBhLmF0dHIoJ3NyYycsJ2Z0djJtbm9kZS5wbmcnKTsKKyAgICAgICQodGhpcykuc2hvdygpOworICAgIH0gZWxzZSBpZiAobD09bGV2ZWwrMSkgeworICAgICAgaS5hdHRyKCdzcmMnLCdmdHYyZm9sZGVyY2xvc2VkLnBuZycpOworICAgICAgYS5hdHRyKCdzcmMnLCdmdHYycG5vZGUucG5nJyk7CisgICAgICAkKHRoaXMpLnNob3coKTsKKyAgICB9IGVsc2UgeworICAgICAgJCh0aGlzKS5oaWRlKCk7CisgICAgfQorICB9KTsKKyAgdXBkYXRlU3RyaXBlcygpOworfQorCitmdW5jdGlvbiB0b2dnbGVGb2xkZXIoaWQpCit7CisgIC8vVGhlIGNsaWNrZWQgcm93CisgIHZhciBjdXJyZW50Um93ID0gJCgnI3Jvd18nK2lkKTsKKyAgdmFyIGN1cnJlbnRSb3dJbWFnZXMgPSBjdXJyZW50Um93LmZpbmQoImltZyIpOworCisgIC8vQWxsIHJvd3MgYWZ0ZXIgdGhlIGNsaWNrZWQgcm93CisgIHZhciByb3dzID0gY3VycmVudFJvdy5uZXh0QWxsKCJ0ciIpOworCisgIC8vT25seSBtYXRjaCBlbGVtZW50cyBBRlRFUiB0aGlzIG9uZSAoY2FuJ3QgaGlkZSBlbGVtZW50cyBiZWZvcmUpCisgIHZhciBjaGlsZFJvd3MgPSByb3dzLmZpbHRlcihmdW5jdGlvbigpIHsKKyAgICB2YXIgcmUgPSBuZXcgUmVnRXhwKCdecm93XycraWQrJ1xcZCtfJCcsICJpIik7IC8vb25seSBvbmUgc3ViCisgICAgcmV0dXJuIHRoaXMuaWQubWF0Y2gocmUpOworICB9KTsKKworICAvL0ZpcnN0IHJvdyBpcyB2aXNpYmxlIHdlIGFyZSBISURJTkcKKyAgaWYgKGNoaWxkUm93cy5maWx0ZXIoJzpmaXJzdCcpLmlzKCc6dmlzaWJsZScpPT09dHJ1ZSkgeworICAgIGN1cnJlbnRSb3dJbWFnZXMuZmlsdGVyKCJbaWRePWFycl0iKS5hdHRyKCdzcmMnLCAnZnR2MnBub2RlLnBuZycpOworICAgIGN1cnJlbnRSb3dJbWFnZXMuZmlsdGVyKCJbaWRePWltZ10iKS5hdHRyKCdzcmMnLCAnZnR2MmZvbGRlcmNsb3NlZC5wbmcnKTsKKyAgICByb3dzLmZpbHRlcigiW2lkXj1yb3dfIitpZCsiXSIpLmhpZGUoKTsKKyAgfSBlbHNlIHsgLy9XZSBhcmUgU0hPV0lORworICAgIC8vQWxsIHN1YiBpbWFnZXMKKyAgICB2YXIgY2hpbGRJbWFnZXMgPSBjaGlsZFJvd3MuZmluZCgiaW1nIik7CisgICAgdmFyIGNoaWxkSW1nID0gY2hpbGRJbWFnZXMuZmlsdGVyKCJbaWRePWltZ10iKTsKKyAgICB2YXIgY2hpbGRBcnIgPSBjaGlsZEltYWdlcy5maWx0ZXIoIltpZF49YXJyXSIpOworCisgICAgY3VycmVudFJvdy5maW5kKCJbaWRePWFycl0iKS5hdHRyKCdzcmMnLCAnZnR2Mm1ub2RlLnBuZycpOyAvL29wZW4gcm93CisgICAgY3VycmVudFJvdy5maW5kKCJbaWRePWltZ10iKS5hdHRyKCdzcmMnLCAnZnR2MmZvbGRlcm9wZW4ucG5nJyk7IC8vb3BlbiByb3cKKyAgICBjaGlsZEltZy5hdHRyKCdzcmMnLCdmdHYyZm9sZGVyY2xvc2VkLnBuZycpOyAvL2NoaWxkcmVuIGNsb3NlZAorICAgIGNoaWxkQXJyLmF0dHIoJ3NyYycsJ2Z0djJwbm9kZS5wbmcnKTsgLy9jaGlsZHJlbiBjbG9zZWQKKyAgICBjaGlsZFJvd3Muc2hvdygpOyAvL3Nob3cgYWxsIGNoaWxkcmVuCisgIH0KKyAgdXBkYXRlU3RyaXBlcygpOworfQorCisKK2Z1bmN0aW9uIHRvZ2dsZUluaGVyaXQoaWQpCit7CisgIHZhciByb3dzID0gJCgndHIuaW5oZXJpdC4nK2lkKTsKKyAgdmFyIGltZyA9ICQoJ3RyLmluaGVyaXRfaGVhZGVyLicraWQrJyBpbWcnKTsKKyAgdmFyIHNyYyA9ICQoaW1nKS5hdHRyKCdzcmMnKTsKKyAgaWYgKHJvd3MuZmlsdGVyKCc6Zmlyc3QnKS5pcygnOnZpc2libGUnKT09PXRydWUpIHsKKyAgICByb3dzLmNzcygnZGlzcGxheScsJ25vbmUnKTsKKyAgICAkKGltZykuYXR0cignc3JjJyxzcmMuc3Vic3RyaW5nKDAsc3JjLmxlbmd0aC04KSsnY2xvc2VkLnBuZycpOworICB9IGVsc2UgeworICAgIHJvd3MuY3NzKCdkaXNwbGF5JywndGFibGUtcm93Jyk7IC8vIHVzaW5nIHNob3coKSBjYXVzZXMganVtcCBpbiBmaXJlZm94CisgICAgJChpbWcpLmF0dHIoJ3NyYycsc3JjLnN1YnN0cmluZygwLHNyYy5sZW5ndGgtMTApKydvcGVuLnBuZycpOworICB9Cit9CisKZGlmZiAtLWdpdCBhL2RvYy9odG1sL2Z0djJibGFuay5wbmcgYi9kb2MvaHRtbC9mdHYyYmxhbmsucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzYzYwNWIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9mdHYyYmxhbmsucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvYy9odG1sL2Z0djJjbC5wbmcgYi9kb2MvaHRtbC9mdHYyY2wucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMmY2NTcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9mdHYyY2wucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvYy9odG1sL2Z0djJkb2MucG5nIGIvZG9jL2h0bWwvZnR2MmRvYy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdlZGFiZgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL2Z0djJkb2MucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvYy9odG1sL2Z0djJmb2xkZXJjbG9zZWQucG5nIGIvZG9jL2h0bWwvZnR2MmZvbGRlcmNsb3NlZC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI4YWIzNQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL2Z0djJmb2xkZXJjbG9zZWQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvYy9odG1sL2Z0djJmb2xkZXJvcGVuLnBuZyBiL2RvYy9odG1sL2Z0djJmb2xkZXJvcGVuLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmM3ZjY3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvZnR2MmZvbGRlcm9wZW4ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvYy9odG1sL2Z0djJsYXN0bm9kZS5wbmcgYi9kb2MvaHRtbC9mdHYybGFzdG5vZGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzYzYwNWIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9mdHYybGFzdG5vZGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvYy9odG1sL2Z0djJsaW5rLnBuZyBiL2RvYy9odG1sL2Z0djJsaW5rLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2VkYWJmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvZnR2MmxpbmsucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvYy9odG1sL2Z0djJtbGFzdG5vZGUucG5nIGIvZG9jL2h0bWwvZnR2Mm1sYXN0bm9kZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI2M2Y2ZAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL2Z0djJtbGFzdG5vZGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvYy9odG1sL2Z0djJtbm9kZS5wbmcgYi9kb2MvaHRtbC9mdHYybW5vZGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiNjNmNmQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9mdHYybW5vZGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvYy9odG1sL2Z0djJtby5wbmcgYi9kb2MvaHRtbC9mdHYybW8ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiZmI4MGYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9mdHYybW8ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvYy9odG1sL2Z0djJub2RlLnBuZyBiL2RvYy9odG1sL2Z0djJub2RlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2M2MDViCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvZnR2Mm5vZGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvYy9odG1sL2Z0djJucy5wbmcgYi9kb2MvaHRtbC9mdHYybnMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZTNkNzEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9mdHYybnMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvYy9odG1sL2Z0djJwbGFzdG5vZGUucG5nIGIvZG9jL2h0bWwvZnR2MnBsYXN0bm9kZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZlZTIyZgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL2Z0djJwbGFzdG5vZGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvYy9odG1sL2Z0djJwbm9kZS5wbmcgYi9kb2MvaHRtbC9mdHYycG5vZGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2ZWUyMmYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9mdHYycG5vZGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvYy9odG1sL2Z0djJzcGxpdGJhci5wbmcgYi9kb2MvaHRtbC9mdHYyc3BsaXRiYXIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlODk1ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9mdHYyc3BsaXRiYXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvYy9odG1sL2Z0djJ2ZXJ0bGluZS5wbmcgYi9kb2MvaHRtbC9mdHYydmVydGxpbmUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzYzYwNWIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9mdHYydmVydGxpbmUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvYy9odG1sL2Z1bmN0aW9ucy5odG1sIGIvZG9jL2h0bWwvZnVuY3Rpb25zLmh0bWwKaW5kZXggYTM0NzBhNC4uMjc2YTU1YyAxMDA2NDQKLS0tIGEvZG9jL2h0bWwvZnVuY3Rpb25zLmh0bWwKKysrIGIvZG9jL2h0bWwvZnVuY3Rpb25zLmh0bWwKQEAgLTIsMzUgKzIsNDYgQEAKIDxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KIDxoZWFkPgogPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L3hodG1sO2NoYXJzZXQ9VVRGLTgiLz4KKzxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9OSIvPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb3h5Z2VuIDEuOC4zLjEiLz4KIDx0aXRsZT5UdXJib0pQRUc6IERhdGEgRmllbGRzPC90aXRsZT4KIDxsaW5rIGhyZWY9InRhYnMuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIi8+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJqcXVlcnkuanMiPjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iZHluc2VjdGlvbnMuanMiPjwvc2NyaXB0PgogPGxpbmsgaHJlZj0ic2VhcmNoL3NlYXJjaC5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiLz4KIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InNlYXJjaC9zZWFyY2guanMiPjwvc2NyaXB0PgotPGxpbmsgaHJlZj0iZG94eWdlbi5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiLz4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7IHNlYXJjaEJveC5PblNlbGVjdEl0ZW0oMCk7IH0pOworPC9zY3JpcHQ+Cis8bGluayBocmVmPSJkb3h5Z2VuLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgLz4KKzxsaW5rIGhyZWY9ImRveHlnZW4tZXh0cmEuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIi8+CiA8L2hlYWQ+Ci08Ym9keSBvbmxvYWQ9J3NlYXJjaEJveC5PblNlbGVjdEl0ZW0oMCk7Jz4KLTwhLS0gR2VuZXJhdGVkIGJ5IERveHlnZW4gMS43LjQgLS0+Ci08c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQotdmFyIHNlYXJjaEJveCA9IG5ldyBTZWFyY2hCb3goInNlYXJjaEJveCIsICJzZWFyY2giLGZhbHNlLCdTZWFyY2gnKTsKLS0tPjwvc2NyaXB0PgotPGRpdiBpZD0idG9wIj4KKzxib2R5PgorPGRpdiBpZD0idG9wIj48IS0tIGRvIG5vdCByZW1vdmUgdGhpcyBkaXYsIGl0IGlzIGNsb3NlZCBieSBkb3h5Z2VuISAtLT4KIDxkaXYgaWQ9InRpdGxlYXJlYSI+CiA8dGFibGUgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIj4KICA8dGJvZHk+CiAgPHRyIHN0eWxlPSJoZWlnaHQ6IDU2cHg7Ij4KICAgPHRkIHN0eWxlPSJwYWRkaW5nLWxlZnQ6IDAuNWVtOyI+Ci0gICA8ZGl2IGlkPSJwcm9qZWN0bmFtZSI+VHVyYm9KUEVHJiMxNjA7PHNwYW4gaWQ9InByb2plY3RudW1iZXIiPjEuMi4xPC9zcGFuPjwvZGl2PgorICAgPGRpdiBpZD0icHJvamVjdG5hbWUiPlR1cmJvSlBFRworICAgJiMxNjA7PHNwYW4gaWQ9InByb2plY3RudW1iZXIiPjEuMi4xPC9zcGFuPgorICAgPC9kaXY+CiAgIDwvdGQ+CiAgPC90cj4KICA8L3Rib2R5PgogPC90YWJsZT4KIDwvZGl2PgorPCEtLSBlbmQgaGVhZGVyIHBhcnQgLS0+Cis8IS0tIEdlbmVyYXRlZCBieSBEb3h5Z2VuIDEuOC4zLjEgLS0+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Cit2YXIgc2VhcmNoQm94ID0gbmV3IFNlYXJjaEJveCgic2VhcmNoQm94IiwgInNlYXJjaCIsZmFsc2UsJ1NlYXJjaCcpOworPC9zY3JpcHQ+CiAgIDxkaXYgaWQ9Im5hdnJvdzEiIGNsYXNzPSJ0YWJzIj4KICAgICA8dWwgY2xhc3M9InRhYmxpc3QiPgogICAgICAgPGxpPjxhIGhyZWY9ImluZGV4Lmh0bWwiPjxzcGFuPk1haW4mIzE2MDtQYWdlPC9zcGFuPjwvYT48L2xpPgogICAgICAgPGxpPjxhIGhyZWY9Im1vZHVsZXMuaHRtbCI+PHNwYW4+TW9kdWxlczwvc3Bhbj48L2E+PC9saT4KICAgICAgIDxsaSBjbGFzcz0iY3VycmVudCI+PGEgaHJlZj0iYW5ub3RhdGVkLmh0bWwiPjxzcGFuPkRhdGEmIzE2MDtTdHJ1Y3R1cmVzPC9zcGFuPjwvYT48L2xpPgotICAgICAgPGxpIGlkPSJzZWFyY2hsaSI+CisgICAgICA8bGk+CiAgICAgICAgIDxkaXYgaWQ9Ik1TZWFyY2hCb3giIGNsYXNzPSJNU2VhcmNoQm94SW5hY3RpdmUiPgogICAgICAgICA8c3BhbiBjbGFzcz0ibGVmdCI+CiAgICAgICAgICAgPGltZyBpZD0iTVNlYXJjaFNlbGVjdCIgc3JjPSJzZWFyY2gvbWFnX3NlbC5wbmciCkBAIC02MSw3ICs3MiwyMSBAQAogICAgICAgPGxpPjxhIGhyZWY9ImZ1bmN0aW9uc192YXJzLmh0bWwiPjxzcGFuPlZhcmlhYmxlczwvc3Bhbj48L2E+PC9saT4KICAgICA8L3VsPgogICA8L2Rpdj4KKzwvZGl2PjwhLS0gdG9wIC0tPgorPCEtLSB3aW5kb3cgc2hvd2luZyB0aGUgZmlsdGVyIG9wdGlvbnMgLS0+Cis8ZGl2IGlkPSJNU2VhcmNoU2VsZWN0V2luZG93IgorICAgICBvbm1vdXNlb3Zlcj0icmV0dXJuIHNlYXJjaEJveC5PblNlYXJjaFNlbGVjdFNob3coKSIKKyAgICAgb25tb3VzZW91dD0icmV0dXJuIHNlYXJjaEJveC5PblNlYXJjaFNlbGVjdEhpZGUoKSIKKyAgICAgb25rZXlkb3duPSJyZXR1cm4gc2VhcmNoQm94Lk9uU2VhcmNoU2VsZWN0S2V5KGV2ZW50KSI+Cis8YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDApIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkFsbDwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDEpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkRhdGEgU3RydWN0dXJlczwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDIpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkZ1bmN0aW9uczwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDMpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPlZhcmlhYmxlczwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDQpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPlR5cGVkZWZzPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oNSkiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+RW51bWVyYXRpb25zPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oNikiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+RW51bWVyYXRvcjwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDcpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkdyb3VwczwvYT48L2Rpdj4KKworPCEtLSBpZnJhbWUgc2hvd2luZyB0aGUgc2VhcmNoIHJlc3VsdHMgKGNsb3NlZCBieSBkZWZhdWx0KSAtLT4KKzxkaXYgaWQ9Ik1TZWFyY2hSZXN1bHRzV2luZG93Ij4KKzxpZnJhbWUgc3JjPSJqYXZhc2NyaXB0OnZvaWQoMCkiIGZyYW1lYm9yZGVyPSIwIiAKKyAgICAgICAgbmFtZT0iTVNlYXJjaFJlc3VsdHMiIGlkPSJNU2VhcmNoUmVzdWx0cyI+Cis8L2lmcmFtZT4KIDwvZGl2PgorCiA8ZGl2IGNsYXNzPSJjb250ZW50cyI+CiA8ZGl2IGNsYXNzPSJ0ZXh0YmxvY2siPkhlcmUgaXMgYSBsaXN0IG9mIGFsbCBkb2N1bWVudGVkIHN0cnVjdCBhbmQgdW5pb24gZmllbGRzIHdpdGggbGlua3MgdG8gdGhlIHN0cnVjdC91bmlvbiBkb2N1bWVudGF0aW9uIGZvciBlYWNoIGZpZWxkOjwvZGl2Pjx1bD4KIDxsaT5jdXN0b21GaWx0ZXIKQEAgLTk4LDIzICsxMjMsMTIgQEAKIDogPGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anJlZ2lvbi5odG1sI2E3YjNlMGMyNGNmZTg3YWNjODBlMzM0Y2FmZGNmMjJjMiI+dGpyZWdpb248L2E+CiA8L2xpPgogPC91bD4KLTwvZGl2PgotPCEtLSB3aW5kb3cgc2hvd2luZyB0aGUgZmlsdGVyIG9wdGlvbnMgLS0+Ci08ZGl2IGlkPSJNU2VhcmNoU2VsZWN0V2luZG93IgotICAgICBvbm1vdXNlb3Zlcj0icmV0dXJuIHNlYXJjaEJveC5PblNlYXJjaFNlbGVjdFNob3coKSIKLSAgICAgb25tb3VzZW91dD0icmV0dXJuIHNlYXJjaEJveC5PblNlYXJjaFNlbGVjdEhpZGUoKSIKLSAgICAgb25rZXlkb3duPSJyZXR1cm4gc2VhcmNoQm94Lk9uU2VhcmNoU2VsZWN0S2V5KGV2ZW50KSI+Ci08YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDApIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkFsbDwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDEpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkRhdGEgU3RydWN0dXJlczwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDIpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPlZhcmlhYmxlczwvYT48L2Rpdj4KLQotPCEtLSBpZnJhbWUgc2hvd2luZyB0aGUgc2VhcmNoIHJlc3VsdHMgKGNsb3NlZCBieSBkZWZhdWx0KSAtLT4KLTxkaXYgaWQ9Ik1TZWFyY2hSZXN1bHRzV2luZG93Ij4KLTxpZnJhbWUgc3JjPSJqYXZhc2NyaXB0OnZvaWQoMCkiIGZyYW1lYm9yZGVyPSIwIiAKLSAgICAgICAgbmFtZT0iTVNlYXJjaFJlc3VsdHMiIGlkPSJNU2VhcmNoUmVzdWx0cyI+Ci08L2lmcmFtZT4KLTwvZGl2PgotCi08aHIgY2xhc3M9ImZvb3RlciIvPjxhZGRyZXNzIGNsYXNzPSJmb290ZXIiPjxzbWFsbD5HZW5lcmF0ZWQgb24gRnJpIEp1biAyOSAyMDEyIDE4OjE0OjU1IGZvciBUdXJib0pQRUcgYnkmIzE2MDsKLTxhIGhyZWY9Imh0dHA6Ly93d3cuZG94eWdlbi5vcmcvaW5kZXguaHRtbCI+Ci08aW1nIGNsYXNzPSJmb290ZXIiIHNyYz0iZG94eWdlbi5wbmciIGFsdD0iZG94eWdlbiIvPjwvYT4gMS43LjQgPC9zbWFsbD48L2FkZHJlc3M+Cis8L2Rpdj48IS0tIGNvbnRlbnRzIC0tPgorPCEtLSBzdGFydCBmb290ZXIgcGFydCAtLT4KKzxociBjbGFzcz0iZm9vdGVyIi8+PGFkZHJlc3MgY2xhc3M9ImZvb3RlciI+PHNtYWxsPgorR2VuZXJhdGVkIGJ5ICYjMTYwOzxhIGhyZWY9Imh0dHA6Ly93d3cuZG94eWdlbi5vcmcvaW5kZXguaHRtbCI+Cis8aW1nIGNsYXNzPSJmb290ZXIiIHNyYz0iZG94eWdlbi5wbmciIGFsdD0iZG94eWdlbiIvPgorPC9hPiAxLjguMy4xCis8L3NtYWxsPjwvYWRkcmVzcz4KIDwvYm9keT4KIDwvaHRtbD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL2Z1bmN0aW9uc192YXJzLmh0bWwgYi9kb2MvaHRtbC9mdW5jdGlvbnNfdmFycy5odG1sCmluZGV4IGVhMjQwY2MuLmM1MTQwZjYgMTAwNjQ0Ci0tLSBhL2RvYy9odG1sL2Z1bmN0aW9uc192YXJzLmh0bWwKKysrIGIvZG9jL2h0bWwvZnVuY3Rpb25zX3ZhcnMuaHRtbApAQCAtMiwzNSArMiw0NiBAQAogPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgogPGhlYWQ+CiA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQveGh0bWw7Y2hhcnNldD1VVEYtOCIvPgorPG1ldGEgaHR0cC1lcXVpdj0iWC1VQS1Db21wYXRpYmxlIiBjb250ZW50PSJJRT05Ii8+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRveHlnZW4gMS44LjMuMSIvPgogPHRpdGxlPlR1cmJvSlBFRzogRGF0YSBGaWVsZHMgLSBWYXJpYWJsZXM8L3RpdGxlPgogPGxpbmsgaHJlZj0idGFicy5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiLz4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImpxdWVyeS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJkeW5zZWN0aW9ucy5qcyI+PC9zY3JpcHQ+CiA8bGluayBocmVmPSJzZWFyY2gvc2VhcmNoLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIvPgogPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ic2VhcmNoL3NlYXJjaC5qcyI+PC9zY3JpcHQ+Ci08bGluayBocmVmPSJkb3h5Z2VuLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIvPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsgc2VhcmNoQm94Lk9uU2VsZWN0SXRlbSgwKTsgfSk7Cis8L3NjcmlwdD4KKzxsaW5rIGhyZWY9ImRveHlnZW4uY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiAvPgorPGxpbmsgaHJlZj0iZG94eWdlbi1leHRyYS5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiLz4KIDwvaGVhZD4KLTxib2R5IG9ubG9hZD0nc2VhcmNoQm94Lk9uU2VsZWN0SXRlbSgwKTsnPgotPCEtLSBHZW5lcmF0ZWQgYnkgRG94eWdlbiAxLjcuNCAtLT4KLTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCi12YXIgc2VhcmNoQm94ID0gbmV3IFNlYXJjaEJveCgic2VhcmNoQm94IiwgInNlYXJjaCIsZmFsc2UsJ1NlYXJjaCcpOwotLS0+PC9zY3JpcHQ+Ci08ZGl2IGlkPSJ0b3AiPgorPGJvZHk+Cis8ZGl2IGlkPSJ0b3AiPjwhLS0gZG8gbm90IHJlbW92ZSB0aGlzIGRpdiwgaXQgaXMgY2xvc2VkIGJ5IGRveHlnZW4hIC0tPgogPGRpdiBpZD0idGl0bGVhcmVhIj4KIDx0YWJsZSBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiPgogIDx0Ym9keT4KICA8dHIgc3R5bGU9ImhlaWdodDogNTZweDsiPgogICA8dGQgc3R5bGU9InBhZGRpbmctbGVmdDogMC41ZW07Ij4KLSAgIDxkaXYgaWQ9InByb2plY3RuYW1lIj5UdXJib0pQRUcmIzE2MDs8c3BhbiBpZD0icHJvamVjdG51bWJlciI+MS4yLjE8L3NwYW4+PC9kaXY+CisgICA8ZGl2IGlkPSJwcm9qZWN0bmFtZSI+VHVyYm9KUEVHCisgICAmIzE2MDs8c3BhbiBpZD0icHJvamVjdG51bWJlciI+MS4yLjE8L3NwYW4+CisgICA8L2Rpdj4KICAgPC90ZD4KICA8L3RyPgogIDwvdGJvZHk+CiA8L3RhYmxlPgogPC9kaXY+Cis8IS0tIGVuZCBoZWFkZXIgcGFydCAtLT4KKzwhLS0gR2VuZXJhdGVkIGJ5IERveHlnZW4gMS44LjMuMSAtLT4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KK3ZhciBzZWFyY2hCb3ggPSBuZXcgU2VhcmNoQm94KCJzZWFyY2hCb3giLCAic2VhcmNoIixmYWxzZSwnU2VhcmNoJyk7Cis8L3NjcmlwdD4KICAgPGRpdiBpZD0ibmF2cm93MSIgY2xhc3M9InRhYnMiPgogICAgIDx1bCBjbGFzcz0idGFibGlzdCI+CiAgICAgICA8bGk+PGEgaHJlZj0iaW5kZXguaHRtbCI+PHNwYW4+TWFpbiYjMTYwO1BhZ2U8L3NwYW4+PC9hPjwvbGk+CiAgICAgICA8bGk+PGEgaHJlZj0ibW9kdWxlcy5odG1sIj48c3Bhbj5Nb2R1bGVzPC9zcGFuPjwvYT48L2xpPgogICAgICAgPGxpIGNsYXNzPSJjdXJyZW50Ij48YSBocmVmPSJhbm5vdGF0ZWQuaHRtbCI+PHNwYW4+RGF0YSYjMTYwO1N0cnVjdHVyZXM8L3NwYW4+PC9hPjwvbGk+Ci0gICAgICA8bGkgaWQ9InNlYXJjaGxpIj4KKyAgICAgIDxsaT4KICAgICAgICAgPGRpdiBpZD0iTVNlYXJjaEJveCIgY2xhc3M9Ik1TZWFyY2hCb3hJbmFjdGl2ZSI+CiAgICAgICAgIDxzcGFuIGNsYXNzPSJsZWZ0Ij4KICAgICAgICAgICA8aW1nIGlkPSJNU2VhcmNoU2VsZWN0IiBzcmM9InNlYXJjaC9tYWdfc2VsLnBuZyIKQEAgLTYxLDcgKzcyLDIxIEBACiAgICAgICA8bGkgY2xhc3M9ImN1cnJlbnQiPjxhIGhyZWY9ImZ1bmN0aW9uc192YXJzLmh0bWwiPjxzcGFuPlZhcmlhYmxlczwvc3Bhbj48L2E+PC9saT4KICAgICA8L3VsPgogICA8L2Rpdj4KKzwvZGl2PjwhLS0gdG9wIC0tPgorPCEtLSB3aW5kb3cgc2hvd2luZyB0aGUgZmlsdGVyIG9wdGlvbnMgLS0+Cis8ZGl2IGlkPSJNU2VhcmNoU2VsZWN0V2luZG93IgorICAgICBvbm1vdXNlb3Zlcj0icmV0dXJuIHNlYXJjaEJveC5PblNlYXJjaFNlbGVjdFNob3coKSIKKyAgICAgb25tb3VzZW91dD0icmV0dXJuIHNlYXJjaEJveC5PblNlYXJjaFNlbGVjdEhpZGUoKSIKKyAgICAgb25rZXlkb3duPSJyZXR1cm4gc2VhcmNoQm94Lk9uU2VhcmNoU2VsZWN0S2V5KGV2ZW50KSI+Cis8YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDApIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkFsbDwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDEpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkRhdGEgU3RydWN0dXJlczwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDIpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkZ1bmN0aW9uczwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDMpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPlZhcmlhYmxlczwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDQpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPlR5cGVkZWZzPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oNSkiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+RW51bWVyYXRpb25zPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oNikiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+RW51bWVyYXRvcjwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDcpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkdyb3VwczwvYT48L2Rpdj4KKworPCEtLSBpZnJhbWUgc2hvd2luZyB0aGUgc2VhcmNoIHJlc3VsdHMgKGNsb3NlZCBieSBkZWZhdWx0KSAtLT4KKzxkaXYgaWQ9Ik1TZWFyY2hSZXN1bHRzV2luZG93Ij4KKzxpZnJhbWUgc3JjPSJqYXZhc2NyaXB0OnZvaWQoMCkiIGZyYW1lYm9yZGVyPSIwIiAKKyAgICAgICAgbmFtZT0iTVNlYXJjaFJlc3VsdHMiIGlkPSJNU2VhcmNoUmVzdWx0cyI+Cis8L2lmcmFtZT4KIDwvZGl2PgorCiA8ZGl2IGNsYXNzPSJjb250ZW50cyI+CiAmIzE2MDs8dWw+CiA8bGk+Y3VzdG9tRmlsdGVyCkBAIC05OCwyMyArMTIzLDEyIEBACiA6IDxhIGNsYXNzPSJlbCIgaHJlZj0ic3RydWN0dGpyZWdpb24uaHRtbCNhN2IzZTBjMjRjZmU4N2FjYzgwZTMzNGNhZmRjZjIyYzIiPnRqcmVnaW9uPC9hPgogPC9saT4KIDwvdWw+Ci08L2Rpdj4KLTwhLS0gd2luZG93IHNob3dpbmcgdGhlIGZpbHRlciBvcHRpb25zIC0tPgotPGRpdiBpZD0iTVNlYXJjaFNlbGVjdFdpbmRvdyIKLSAgICAgb25tb3VzZW92ZXI9InJldHVybiBzZWFyY2hCb3guT25TZWFyY2hTZWxlY3RTaG93KCkiCi0gICAgIG9ubW91c2VvdXQ9InJldHVybiBzZWFyY2hCb3guT25TZWFyY2hTZWxlY3RIaWRlKCkiCi0gICAgIG9ua2V5ZG93bj0icmV0dXJuIHNlYXJjaEJveC5PblNlYXJjaFNlbGVjdEtleShldmVudCkiPgotPGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSgwKSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5BbGw8L2E+PGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSgxKSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5EYXRhIFN0cnVjdHVyZXM8L2E+PGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSgyKSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5WYXJpYWJsZXM8L2E+PC9kaXY+Ci0KLTwhLS0gaWZyYW1lIHNob3dpbmcgdGhlIHNlYXJjaCByZXN1bHRzIChjbG9zZWQgYnkgZGVmYXVsdCkgLS0+Ci08ZGl2IGlkPSJNU2VhcmNoUmVzdWx0c1dpbmRvdyI+Ci08aWZyYW1lIHNyYz0iamF2YXNjcmlwdDp2b2lkKDApIiBmcmFtZWJvcmRlcj0iMCIgCi0gICAgICAgIG5hbWU9Ik1TZWFyY2hSZXN1bHRzIiBpZD0iTVNlYXJjaFJlc3VsdHMiPgotPC9pZnJhbWU+Ci08L2Rpdj4KLQotPGhyIGNsYXNzPSJmb290ZXIiLz48YWRkcmVzcyBjbGFzcz0iZm9vdGVyIj48c21hbGw+R2VuZXJhdGVkIG9uIEZyaSBKdW4gMjkgMjAxMiAxODoxNDo1NSBmb3IgVHVyYm9KUEVHIGJ5JiMxNjA7Ci08YSBocmVmPSJodHRwOi8vd3d3LmRveHlnZW4ub3JnL2luZGV4Lmh0bWwiPgotPGltZyBjbGFzcz0iZm9vdGVyIiBzcmM9ImRveHlnZW4ucG5nIiBhbHQ9ImRveHlnZW4iLz48L2E+IDEuNy40IDwvc21hbGw+PC9hZGRyZXNzPgorPC9kaXY+PCEtLSBjb250ZW50cyAtLT4KKzwhLS0gc3RhcnQgZm9vdGVyIHBhcnQgLS0+Cis8aHIgY2xhc3M9ImZvb3RlciIvPjxhZGRyZXNzIGNsYXNzPSJmb290ZXIiPjxzbWFsbD4KK0dlbmVyYXRlZCBieSAmIzE2MDs8YSBocmVmPSJodHRwOi8vd3d3LmRveHlnZW4ub3JnL2luZGV4Lmh0bWwiPgorPGltZyBjbGFzcz0iZm9vdGVyIiBzcmM9ImRveHlnZW4ucG5nIiBhbHQ9ImRveHlnZW4iLz4KKzwvYT4gMS44LjMuMQorPC9zbWFsbD48L2FkZHJlc3M+CiA8L2JvZHk+CiA8L2h0bWw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCBiL2RvYy9odG1sL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sCmluZGV4IGNkMTRmNDQuLmZhNmJmMGMgMTAwNjQ0Ci0tLSBhL2RvYy9odG1sL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sCisrKyBiL2RvYy9odG1sL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sCkBAIC0yLDM1ICsyLDQ2IEBACiA8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+CiA8aGVhZD4KIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC94aHRtbDtjaGFyc2V0PVVURi04Ii8+Cis8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPTkiLz4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG94eWdlbiAxLjguMy4xIi8+CiA8dGl0bGU+VHVyYm9KUEVHOiBUdXJib0pQRUc8L3RpdGxlPgogPGxpbmsgaHJlZj0idGFicy5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiLz4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImpxdWVyeS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJkeW5zZWN0aW9ucy5qcyI+PC9zY3JpcHQ+CiA8bGluayBocmVmPSJzZWFyY2gvc2VhcmNoLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIvPgogPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ic2VhcmNoL3NlYXJjaC5qcyI+PC9zY3JpcHQ+Ci08bGluayBocmVmPSJkb3h5Z2VuLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIvPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsgc2VhcmNoQm94Lk9uU2VsZWN0SXRlbSgwKTsgfSk7Cis8L3NjcmlwdD4KKzxsaW5rIGhyZWY9ImRveHlnZW4uY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiAvPgorPGxpbmsgaHJlZj0iZG94eWdlbi1leHRyYS5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiLz4KIDwvaGVhZD4KLTxib2R5IG9ubG9hZD0nc2VhcmNoQm94Lk9uU2VsZWN0SXRlbSgwKTsnPgotPCEtLSBHZW5lcmF0ZWQgYnkgRG94eWdlbiAxLjcuNCAtLT4KLTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCi12YXIgc2VhcmNoQm94ID0gbmV3IFNlYXJjaEJveCgic2VhcmNoQm94IiwgInNlYXJjaCIsZmFsc2UsJ1NlYXJjaCcpOwotLS0+PC9zY3JpcHQ+Ci08ZGl2IGlkPSJ0b3AiPgorPGJvZHk+Cis8ZGl2IGlkPSJ0b3AiPjwhLS0gZG8gbm90IHJlbW92ZSB0aGlzIGRpdiwgaXQgaXMgY2xvc2VkIGJ5IGRveHlnZW4hIC0tPgogPGRpdiBpZD0idGl0bGVhcmVhIj4KIDx0YWJsZSBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiPgogIDx0Ym9keT4KICA8dHIgc3R5bGU9ImhlaWdodDogNTZweDsiPgogICA8dGQgc3R5bGU9InBhZGRpbmctbGVmdDogMC41ZW07Ij4KLSAgIDxkaXYgaWQ9InByb2plY3RuYW1lIj5UdXJib0pQRUcmIzE2MDs8c3BhbiBpZD0icHJvamVjdG51bWJlciI+MS4yLjE8L3NwYW4+PC9kaXY+CisgICA8ZGl2IGlkPSJwcm9qZWN0bmFtZSI+VHVyYm9KUEVHCisgICAmIzE2MDs8c3BhbiBpZD0icHJvamVjdG51bWJlciI+MS4yLjE8L3NwYW4+CisgICA8L2Rpdj4KICAgPC90ZD4KICA8L3RyPgogIDwvdGJvZHk+CiA8L3RhYmxlPgogPC9kaXY+Cis8IS0tIGVuZCBoZWFkZXIgcGFydCAtLT4KKzwhLS0gR2VuZXJhdGVkIGJ5IERveHlnZW4gMS44LjMuMSAtLT4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KK3ZhciBzZWFyY2hCb3ggPSBuZXcgU2VhcmNoQm94KCJzZWFyY2hCb3giLCAic2VhcmNoIixmYWxzZSwnU2VhcmNoJyk7Cis8L3NjcmlwdD4KICAgPGRpdiBpZD0ibmF2cm93MSIgY2xhc3M9InRhYnMiPgogICAgIDx1bCBjbGFzcz0idGFibGlzdCI+CiAgICAgICA8bGk+PGEgaHJlZj0iaW5kZXguaHRtbCI+PHNwYW4+TWFpbiYjMTYwO1BhZ2U8L3NwYW4+PC9hPjwvbGk+CiAgICAgICA8bGk+PGEgaHJlZj0ibW9kdWxlcy5odG1sIj48c3Bhbj5Nb2R1bGVzPC9zcGFuPjwvYT48L2xpPgogICAgICAgPGxpPjxhIGhyZWY9ImFubm90YXRlZC5odG1sIj48c3Bhbj5EYXRhJiMxNjA7U3RydWN0dXJlczwvc3Bhbj48L2E+PC9saT4KLSAgICAgIDxsaSBpZD0ic2VhcmNobGkiPgorICAgICAgPGxpPgogICAgICAgICA8ZGl2IGlkPSJNU2VhcmNoQm94IiBjbGFzcz0iTVNlYXJjaEJveEluYWN0aXZlIj4KICAgICAgICAgPHNwYW4gY2xhc3M9ImxlZnQiPgogICAgICAgICAgIDxpbWcgaWQ9Ik1TZWFyY2hTZWxlY3QiIHNyYz0ic2VhcmNoL21hZ19zZWwucG5nIgpAQCAtNDgsODAgKzU5LDEyMSBAQAogICAgICAgPC9saT4KICAgICA8L3VsPgogICA8L2Rpdj4KKzwvZGl2PjwhLS0gdG9wIC0tPgorPCEtLSB3aW5kb3cgc2hvd2luZyB0aGUgZmlsdGVyIG9wdGlvbnMgLS0+Cis8ZGl2IGlkPSJNU2VhcmNoU2VsZWN0V2luZG93IgorICAgICBvbm1vdXNlb3Zlcj0icmV0dXJuIHNlYXJjaEJveC5PblNlYXJjaFNlbGVjdFNob3coKSIKKyAgICAgb25tb3VzZW91dD0icmV0dXJuIHNlYXJjaEJveC5PblNlYXJjaFNlbGVjdEhpZGUoKSIKKyAgICAgb25rZXlkb3duPSJyZXR1cm4gc2VhcmNoQm94Lk9uU2VhcmNoU2VsZWN0S2V5KGV2ZW50KSI+Cis8YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDApIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkFsbDwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDEpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkRhdGEgU3RydWN0dXJlczwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDIpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkZ1bmN0aW9uczwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDMpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPlZhcmlhYmxlczwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDQpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPlR5cGVkZWZzPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oNSkiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+RW51bWVyYXRpb25zPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oNikiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+RW51bWVyYXRvcjwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDcpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkdyb3VwczwvYT48L2Rpdj4KKworPCEtLSBpZnJhbWUgc2hvd2luZyB0aGUgc2VhcmNoIHJlc3VsdHMgKGNsb3NlZCBieSBkZWZhdWx0KSAtLT4KKzxkaXYgaWQ9Ik1TZWFyY2hSZXN1bHRzV2luZG93Ij4KKzxpZnJhbWUgc3JjPSJqYXZhc2NyaXB0OnZvaWQoMCkiIGZyYW1lYm9yZGVyPSIwIiAKKyAgICAgICAgbmFtZT0iTVNlYXJjaFJlc3VsdHMiIGlkPSJNU2VhcmNoUmVzdWx0cyI+Cis8L2lmcmFtZT4KIDwvZGl2PgorCiA8ZGl2IGNsYXNzPSJoZWFkZXIiPgogICA8ZGl2IGNsYXNzPSJzdW1tYXJ5Ij4KIDxhIGhyZWY9IiNuZXN0ZWQtY2xhc3NlcyI+RGF0YSBTdHJ1Y3R1cmVzPC9hPiAmIzEyNDsKLTxhIGhyZWY9IiNkZWZpbmUtbWVtYmVycyI+RGVmaW5lczwvYT4gJiMxMjQ7Cis8YSBocmVmPSIjZGVmaW5lLW1lbWJlcnMiPk1hY3JvczwvYT4gJiMxMjQ7CiA8YSBocmVmPSIjdHlwZWRlZi1tZW1iZXJzIj5UeXBlZGVmczwvYT4gJiMxMjQ7CiA8YSBocmVmPSIjZW51bS1tZW1iZXJzIj5FbnVtZXJhdGlvbnM8L2E+ICYjMTI0OwogPGEgaHJlZj0iI2Z1bmMtbWVtYmVycyI+RnVuY3Rpb25zPC9hPiAmIzEyNDsKIDxhIGhyZWY9IiN2YXItbWVtYmVycyI+VmFyaWFibGVzPC9hPiAgPC9kaXY+CiAgIDxkaXYgY2xhc3M9ImhlYWRlcnRpdGxlIj4KIDxkaXYgY2xhc3M9InRpdGxlIj5UdXJib0pQRUc8L2Rpdj4gIDwvZGl2PgotPC9kaXY+Cis8L2Rpdj48IS0taGVhZGVyLS0+CiA8ZGl2IGNsYXNzPSJjb250ZW50cyI+CiAKIDxwPlR1cmJvSlBFRyBBUEkuICAKIDxhIGhyZWY9IiNkZXRhaWxzIj5Nb3JlLi4uPC9hPjwvcD4KIDx0YWJsZSBjbGFzcz0ibWVtYmVyZGVjbHMiPgotPHRyPjx0ZCBjb2xzcGFuPSIyIj48aDI+PGEgbmFtZT0ibmVzdGVkLWNsYXNzZXMiPjwvYT4KKzx0ciBjbGFzcz0iaGVhZGluZyI+PHRkIGNvbHNwYW49IjIiPjxoMiBjbGFzcz0iZ3JvdXBoZWFkZXIiPjxhIG5hbWU9Im5lc3RlZC1jbGFzc2VzIj48L2E+CiBEYXRhIFN0cnVjdHVyZXM8L2gyPjwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj5zdHJ1Y3QgJiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0ic3RydWN0dGpzY2FsaW5nZmFjdG9yLmh0bWwiPnRqc2NhbGluZ2ZhY3RvcjwvYT48L3RkPjwvdHI+Ci08dHI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5TY2FsaW5nIGZhY3Rvci4gIDxhIGhyZWY9InN0cnVjdHRqc2NhbGluZ2ZhY3Rvci5odG1sI2RldGFpbHMiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Ci08dHI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+c3RydWN0ICYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9InN0cnVjdHRqcmVnaW9uLmh0bWwiPnRqcmVnaW9uPC9hPjwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPkNyb3BwaW5nIHJlZ2lvbi4gIDxhIGhyZWY9InN0cnVjdHRqcmVnaW9uLmh0bWwjZGV0YWlscyI+TW9yZS4uLjwvYT48YnIvPjwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj5zdHJ1Y3QgJiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0ic3RydWN0dGp0cmFuc2Zvcm0uaHRtbCI+dGp0cmFuc2Zvcm08L2E+PC90ZD48L3RyPgotPHRyPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+TG9zc2xlc3MgdHJhbnNmb3JtLiAgPGEgaHJlZj0ic3RydWN0dGp0cmFuc2Zvcm0uaHRtbCNkZXRhaWxzIj5Nb3JlLi4uPC9hPjxici8+PC90ZD48L3RyPgotPHRyPjx0ZCBjb2xzcGFuPSIyIj48aDI+PGEgbmFtZT0iZGVmaW5lLW1lbWJlcnMiPjwvYT4KLURlZmluZXM8L2gyPjwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj4jZGVmaW5lJiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E1ZWYzZDE2OTE2MmNlNzdjZTM0OGUyOTJhMGI3NDc3YyI+VEpfTlVNU0FNUDwvYT48L3RkPjwvdHI+Ci08dHI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5UaGUgbnVtYmVyIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nIG9wdGlvbnMuICA8YSBocmVmPSIjZ2E1ZWYzZDE2OTE2MmNlNzdjZTM0OGUyOTJhMGI3NDc3YyI+PC9hPjxici8+PC90ZD48L3RyPgotPHRyPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPiNkZWZpbmUmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTcwMTBhNDQwMmY1NGE0NWJhODIyYWQ4Njc1YTQ2NTVlIj5USl9OVU1QRjwvYT48L3RkPjwvdHI+Ci08dHI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5UaGUgbnVtYmVyIG9mIHBpeGVsIGZvcm1hdHMuICA8YSBocmVmPSIjZ2E3MDEwYTQ0MDJmNTRhNDViYTgyMmFkODY3NWE0NjU1ZSI+PC9hPjxici8+PC90ZD48L3RyPgotPHRyPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPiNkZWZpbmUmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTcyZWNmNGViZTZlYjcwMmQzYzZmNWNhMjc0NTVlMWVjIj5USkZMQUdfQk9UVE9NVVA8L2E+PC90ZD48L3RyPgotPHRyPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+VGhlIHVuY29tcHJlc3NlZCBzb3VyY2UvZGVzdGluYXRpb24gaW1hZ2UgaXMgc3RvcmVkIGluIGJvdHRvbS11cCAoV2luZG93cywgT3BlbkdMKSBvcmRlciwgbm90IHRvcC1kb3duIChYMTEpIG9yZGVyLiAgPGEgaHJlZj0iI2dhNzJlY2Y0ZWJlNmViNzAyZDNjNmY1Y2EyNzQ1NWUxZWMiPjwvYT48YnIvPjwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj4jZGVmaW5lJiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E0ZTg3MmYxMWM4MmYyNDE3MzZmYTgyOTc5MjBmMjRlNSI+VEpGTEFHX0ZPUkNFTU1YPC9hPjwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPlR1cm4gb2ZmIENQVSBhdXRvLWRldGVjdGlvbiBhbmQgZm9yY2UgVHVyYm9KUEVHIHRvIHVzZSBNTVggY29kZSAoaWYgdGhlIHVuZGVybHlpbmcgY29kZWMgc3VwcG9ydHMgaXQuKSAgPGEgaHJlZj0iI2dhNGU4NzJmMTFjODJmMjQxNzM2ZmE4Mjk3OTIwZjI0ZTUiPjwvYT48YnIvPjwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj4jZGVmaW5lJiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FlMTdlNjMxODllOGNkNzMwZmVlZDNlZmJkMjQ1NGYzOCI+VEpGTEFHX0ZPUkNFU1NFPC9hPjwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPlR1cm4gb2ZmIENQVSBhdXRvLWRldGVjdGlvbiBhbmQgZm9yY2UgVHVyYm9KUEVHIHRvIHVzZSBTU0UgY29kZSAoaWYgdGhlIHVuZGVybHlpbmcgY29kZWMgc3VwcG9ydHMgaXQuKSAgPGEgaHJlZj0iI2dhZTE3ZTYzMTg5ZThjZDczMGZlZWQzZWZiZDI0NTRmMzgiPjwvYT48YnIvPjwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj4jZGVmaW5lJiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E4Y2YwYmNhOTZlYTRkNDcyNTYzZjRiMGViZjhjNDhlNyI+VEpGTEFHX0ZPUkNFU1NFMjwvYT48L3RkPjwvdHI+Ci08dHI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5UdXJuIG9mZiBDUFUgYXV0by1kZXRlY3Rpb24gYW5kIGZvcmNlIFR1cmJvSlBFRyB0byB1c2UgU1NFMiBjb2RlIChpZiB0aGUgdW5kZXJseWluZyBjb2RlYyBzdXBwb3J0cyBpdC4pICA8YSBocmVmPSIjZ2E4Y2YwYmNhOTZlYTRkNDcyNTYzZjRiMGViZjhjNDhlNyI+PC9hPjxici8+PC90ZD48L3RyPgotPHRyPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPiNkZWZpbmUmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWY5ZDQ5MDY2NjMzNDA0ZGE0Mzg2ZDcwODIwMjk1ZGQyIj5USkZMQUdfRk9SQ0VTU0UzPC9hPjwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPlR1cm4gb2ZmIENQVSBhdXRvLWRldGVjdGlvbiBhbmQgZm9yY2UgVHVyYm9KUEVHIHRvIHVzZSBTU0UzIGNvZGUgKGlmIHRoZSB1bmRlcmx5aW5nIGNvZGVjIHN1cHBvcnRzIGl0LikgIDxhIGhyZWY9IiNnYWY5ZDQ5MDY2NjMzNDA0ZGE0Mzg2ZDcwODIwMjk1ZGQyIj48L2E+PGJyLz48L3RkPjwvdHI+Ci08dHI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+I2RlZmluZSYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNGVlNDUwNmM4MTE3N2EwNmY3N2UyNTA0YTIyZWZkMmQiPlRKRkxBR19GQVNUVVBTQU1QTEU8L2E+PC90ZD48L3RyPgotPHRyPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+V2hlbiBkZWNvbXByZXNzaW5nLCB1c2UgdGhlIGZhc3Rlc3QgY2hyb21pbmFuY2UgdXBzYW1wbGluZyBhbGdvcml0aG0gYXZhaWxhYmxlIGluIHRoZSB1bmRlcmx5aW5nIGNvZGVjLiAgPGEgaHJlZj0iI2dhNGVlNDUwNmM4MTE3N2EwNmY3N2UyNTA0YTIyZWZkMmQiPjwvYT48YnIvPjwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj4jZGVmaW5lJiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E4ODA4ZDQwM2M2OGI2MmFhYTU4YTRjMWU1OGU5ODk2MyI+VEpGTEFHX05PUkVBTExPQzwvYT48L3RkPjwvdHI+Ci08dHI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5EaXNhYmxlIGJ1ZmZlciAocmUpYWxsb2NhdGlvbi4gIDxhIGhyZWY9IiNnYTg4MDhkNDAzYzY4YjYyYWFhNThhNGMxZTU4ZTk4OTYzIj48L2E+PGJyLz48L3RkPjwvdHI+Ci08dHI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+I2RlZmluZSYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhYWJjZTIzNWRiODBkM2Y2OThiMjdmMzZjYmQ0NTNkYTIiPlRKRkxBR19GQVNURENUPC9hPjwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPlVzZSB0aGUgZmFzdGVzdCBEQ1QvSURDVCBhbGdvcml0aG0gYXZhaWxhYmxlIGluIHRoZSB1bmRlcmx5aW5nIGNvZGVjLiAgPGEgaHJlZj0iI2dhYWJjZTIzNWRiODBkM2Y2OThiMjdmMzZjYmQ0NTNkYTIiPjwvYT48YnIvPjwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj4jZGVmaW5lJiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FjYjIzM2NmZDcyMmQ2NmQxY2NiZjQ4YTdkZTgxZjBlMCI+VEpGTEFHX0FDQ1VSQVRFRENUPC9hPjwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPlVzZSB0aGUgbW9zdCBhY2N1cmF0ZSBEQ1QvSURDVCBhbGdvcml0aG0gYXZhaWxhYmxlIGluIHRoZSB1bmRlcmx5aW5nIGNvZGVjLiAgPGEgaHJlZj0iI2dhY2IyMzNjZmQ3MjJkNjZkMWNjYmY0OGE3ZGU4MWYwZTAiPjwvYT48YnIvPjwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj4jZGVmaW5lJiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2EwZjZkYmQxOGFkZjM4YjdkNDZhYzU0N2YwZjRkNTYyYyI+VEpfTlVNWE9QPC9hPjwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPk51bWJlciBvZiB0cmFuc2Zvcm0gb3BlcmF0aW9ucy4gIDxhIGhyZWY9IiNnYTBmNmRiZDE4YWRmMzhiN2Q0NmFjNTQ3ZjBmNGQ1NjJjIj48L2E+PGJyLz48L3RkPjwvdHI+Ci08dHI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+I2RlZmluZSYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNTBlMDNjYjVlZDExNTMzMGUyMTI0MTc0Mjk2MDBiMDAiPlRKWE9QVF9QRVJGRUNUPC9hPjwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPlRoaXMgb3B0aW9uIHdpbGwgY2F1c2UgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWU0MDMxOTNjZWI0YWFmYjdlMGY1NmFiNTg3YjQ4NjE2IiB0aXRsZT0iTG9zc2xlc3NseSB0cmFuc2Zvcm0gYSBKUEVHIGltYWdlIGludG8gYW5vdGhlciBKUEVHIGltYWdlLiI+dGpUcmFuc2Zvcm0oKTwvYT4gdG8gcmV0dXJuIGFuIGVycm9yIGlmIHRoZSB0cmFuc2Zvcm0gaXMgbm90IHBlcmZlY3QuICA8YSBocmVmPSIjZ2E1MGUwM2NiNWVkMTE1MzMwZTIxMjQxNzQyOTYwMGIwMCI+PC9hPjxici8+PC90ZD48L3RyPgotPHRyPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPiNkZWZpbmUmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTMxOTgyNmI3ZWIxNTgzYzA1OTViYmU3Yjk1NDI4NzA5Ij5USlhPUFRfVFJJTTwvYT48L3RkPjwvdHI+Ci08dHI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5UaGlzIG9wdGlvbiB3aWxsIGNhdXNlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FlNDAzMTkzY2ViNGFhZmI3ZTBmNTZhYjU4N2I0ODYxNiIgdGl0bGU9Ikxvc3NsZXNzbHkgdHJhbnNmb3JtIGEgSlBFRyBpbWFnZSBpbnRvIGFub3RoZXIgSlBFRyBpbWFnZS4iPnRqVHJhbnNmb3JtKCk8L2E+IHRvIGRpc2NhcmQgYW55IHBhcnRpYWwgTUNVIGJsb2NrcyB0aGF0IGNhbm5vdCBiZSB0cmFuc2Zvcm1lZC4gIDxhIGhyZWY9IiNnYTMxOTgyNmI3ZWIxNTgzYzA1OTViYmU3Yjk1NDI4NzA5Ij48L2E+PGJyLz48L3RkPjwvdHI+Ci08dHI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+I2RlZmluZSYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhOWM3NzFhNzU3ZmMxMjk0YWRkNjExOTA2Yjg5YWIyZDIiPlRKWE9QVF9DUk9QPC9hPjwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPlRoaXMgb3B0aW9uIHdpbGwgZW5hYmxlIGxvc3NsZXNzIGNyb3BwaW5nLiAgPGEgaHJlZj0iI2dhOWM3NzFhNzU3ZmMxMjk0YWRkNjExOTA2Yjg5YWIyZDIiPjwvYT48YnIvPjwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj4jZGVmaW5lJiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2EzYWNlZTdiNDhhZGUxYjk5ZTU1ODg3MzYwMDdjMjU4OSI+VEpYT1BUX0dSQVk8L2E+PC90ZD48L3RyPgotPHRyPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+VGhpcyBvcHRpb24gd2lsbCBkaXNjYXJkIHRoZSBjb2xvciBkYXRhIGluIHRoZSBpbnB1dCBpbWFnZSBhbmQgcHJvZHVjZSBhIGdyYXlzY2FsZSBvdXRwdXQgaW1hZ2UuICA8YSBocmVmPSIjZ2EzYWNlZTdiNDhhZGUxYjk5ZTU1ODg3MzYwMDdjMjU4OSI+PC9hPjxici8+PC90ZD48L3RyPgotPHRyPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPiNkZWZpbmUmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWZiZjk5MmJiZjZlMDA2NzA1ODg2MzMzNzAzZmZhYjMxIj5USlhPUFRfTk9PVVRQVVQ8L2E+PC90ZD48L3RyPgotPHRyPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+VGhpcyBvcHRpb24gd2lsbCBwcmV2ZW50IDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FlNDAzMTkzY2ViNGFhZmI3ZTBmNTZhYjU4N2I0ODYxNiIgdGl0bGU9Ikxvc3NsZXNzbHkgdHJhbnNmb3JtIGEgSlBFRyBpbWFnZSBpbnRvIGFub3RoZXIgSlBFRyBpbWFnZS4iPnRqVHJhbnNmb3JtKCk8L2E+IGZyb20gb3V0cHV0dGluZyBhIEpQRUcgaW1hZ2UgZm9yIHRoaXMgcGFydGljdWxhciB0cmFuc2Zvcm0gKHRoaXMgY2FuIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBhIGN1c3RvbSBmaWx0ZXIgdG8gY2FwdHVyZSB0aGUgdHJhbnNmb3JtZWQgRENUIGNvZWZmaWNpZW50cyB3aXRob3V0IHRyYW5zY29kaW5nIHRoZW0uKSAgPGEgaHJlZj0iI2dhZmJmOTkyYmJmNmUwMDY3MDU4ODYzMzM3MDNmZmFiMzEiPjwvYT48YnIvPjwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj4jZGVmaW5lJiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2EwYWJhOTU1NDczMzE1ZTQwNTI5NWQ5NzhmMGMxNjUxMSI+VEpQQUQ8L2E+KHdpZHRoKTwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPlBhZCB0aGUgZ2l2ZW4gd2lkdGggdG8gdGhlIG5lYXJlc3QgMzItYml0IGJvdW5kYXJ5LiAgPGEgaHJlZj0iI2dhMGFiYTk1NTQ3MzMxNWU0MDUyOTVkOTc4ZjBjMTY1MTEiPjwvYT48YnIvPjwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj4jZGVmaW5lJiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E4NDg3OGJiNjU0MDQyMDQ3NDNhYTE4Y2FjMDI3ODFkZiI+VEpTQ0FMRUQ8L2E+KGRpbWVuc2lvbiwgc2NhbGluZ0ZhY3Rvcik8L3RkPjwvdHI+Ci08dHI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5Db21wdXRlIHRoZSBzY2FsZWQgdmFsdWUgb2YgPGNvZGU+ZGltZW5zaW9uPC9jb2RlPiB1c2luZyB0aGUgZ2l2ZW4gc2NhbGluZyBmYWN0b3IuICA8YSBocmVmPSIjZ2E4NDg3OGJiNjU0MDQyMDQ3NDNhYTE4Y2FjMDI3ODFkZiI+PC9hPjxici8+PC90ZD48L3RyPgotPHRyPjx0ZCBjb2xzcGFuPSIyIj48aDI+PGEgbmFtZT0idHlwZWRlZi1tZW1iZXJzIj48L2E+Cis8dHIgY2xhc3M9Im1lbWl0ZW06Ij48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj5zdHJ1Y3QgJiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0ic3RydWN0dGpzY2FsaW5nZmFjdG9yLmh0bWwiPnRqc2NhbGluZ2ZhY3RvcjwvYT48L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWRlc2M6Ij48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPlNjYWxpbmcgZmFjdG9yLiAgPGEgaHJlZj0ic3RydWN0dGpzY2FsaW5nZmFjdG9yLmh0bWwjZGV0YWlscyI+TW9yZS4uLjwvYT48YnIvPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ic2VwYXJhdG9yOiI+PHRkIGNsYXNzPSJtZW1TZXBhcmF0b3IiIGNvbHNwYW49IjIiPiYjMTYwOzwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtaXRlbToiPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPnN0cnVjdCAmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anJlZ2lvbi5odG1sIj50anJlZ2lvbjwvYT48L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWRlc2M6Ij48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPkNyb3BwaW5nIHJlZ2lvbi4gIDxhIGhyZWY9InN0cnVjdHRqcmVnaW9uLmh0bWwjZGV0YWlscyI+TW9yZS4uLjwvYT48YnIvPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ic2VwYXJhdG9yOiI+PHRkIGNsYXNzPSJtZW1TZXBhcmF0b3IiIGNvbHNwYW49IjIiPiYjMTYwOzwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtaXRlbToiPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPnN0cnVjdCAmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anRyYW5zZm9ybS5odG1sIj50anRyYW5zZm9ybTwvYT48L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWRlc2M6Ij48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPkxvc3NsZXNzIHRyYW5zZm9ybS4gIDxhIGhyZWY9InN0cnVjdHRqdHJhbnNmb3JtLmh0bWwjZGV0YWlscyI+TW9yZS4uLjwvYT48YnIvPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ic2VwYXJhdG9yOiI+PHRkIGNsYXNzPSJtZW1TZXBhcmF0b3IiIGNvbHNwYW49IjIiPiYjMTYwOzwvdGQ+PC90cj4KKzwvdGFibGU+PHRhYmxlIGNsYXNzPSJtZW1iZXJkZWNscyI+Cis8dHIgY2xhc3M9ImhlYWRpbmciPjx0ZCBjb2xzcGFuPSIyIj48aDIgY2xhc3M9Imdyb3VwaGVhZGVyIj48YSBuYW1lPSJkZWZpbmUtbWVtYmVycyI+PC9hPgorTWFjcm9zPC9oMj48L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWl0ZW06Z2E1ZWYzZDE2OTE2MmNlNzdjZTM0OGUyOTJhMGI3NDc3YyI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+I2RlZmluZSYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNWVmM2QxNjkxNjJjZTc3Y2UzNDhlMjkyYTBiNzQ3N2MiPlRKX05VTVNBTVA8L2E+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmdhNWVmM2QxNjkxNjJjZTc3Y2UzNDhlMjkyYTBiNzQ3N2MiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+VGhlIG51bWJlciBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZyBvcHRpb25zLiAgPGEgaHJlZj0iI2dhNWVmM2QxNjkxNjJjZTc3Y2UzNDhlMjkyYTBiNzQ3N2MiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjpnYTVlZjNkMTY5MTYyY2U3N2NlMzQ4ZTI5MmEwYjc0NzdjIj48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmdhNzAxMGE0NDAyZjU0YTQ1YmE4MjJhZDg2NzVhNDY1NWUiPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPiNkZWZpbmUmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTcwMTBhNDQwMmY1NGE0NWJhODIyYWQ4Njc1YTQ2NTVlIj5USl9OVU1QRjwvYT48L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWRlc2M6Z2E3MDEwYTQ0MDJmNTRhNDViYTgyMmFkODY3NWE0NjU1ZSI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5UaGUgbnVtYmVyIG9mIHBpeGVsIGZvcm1hdHMuICA8YSBocmVmPSIjZ2E3MDEwYTQ0MDJmNTRhNDViYTgyMmFkODY3NWE0NjU1ZSI+TW9yZS4uLjwvYT48YnIvPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ic2VwYXJhdG9yOmdhNzAxMGE0NDAyZjU0YTQ1YmE4MjJhZDg2NzVhNDY1NWUiPjx0ZCBjbGFzcz0ibWVtU2VwYXJhdG9yIiBjb2xzcGFuPSIyIj4mIzE2MDs8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWl0ZW06Z2E3MmVjZjRlYmU2ZWI3MDJkM2M2ZjVjYTI3NDU1ZTFlYyI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+I2RlZmluZSYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNzJlY2Y0ZWJlNmViNzAyZDNjNmY1Y2EyNzQ1NWUxZWMiPlRKRkxBR19CT1RUT01VUDwvYT48L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWRlc2M6Z2E3MmVjZjRlYmU2ZWI3MDJkM2M2ZjVjYTI3NDU1ZTFlYyI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5UaGUgdW5jb21wcmVzc2VkIHNvdXJjZS9kZXN0aW5hdGlvbiBpbWFnZSBpcyBzdG9yZWQgaW4gYm90dG9tLXVwIChXaW5kb3dzLCBPcGVuR0wpIG9yZGVyLCBub3QgdG9wLWRvd24gKFgxMSkgb3JkZXIuICA8YSBocmVmPSIjZ2E3MmVjZjRlYmU2ZWI3MDJkM2M2ZjVjYTI3NDU1ZTFlYyI+TW9yZS4uLjwvYT48YnIvPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ic2VwYXJhdG9yOmdhNzJlY2Y0ZWJlNmViNzAyZDNjNmY1Y2EyNzQ1NWUxZWMiPjx0ZCBjbGFzcz0ibWVtU2VwYXJhdG9yIiBjb2xzcGFuPSIyIj4mIzE2MDs8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWl0ZW06Z2E0ZTg3MmYxMWM4MmYyNDE3MzZmYTgyOTc5MjBmMjRlNSI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+I2RlZmluZSYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNGU4NzJmMTFjODJmMjQxNzM2ZmE4Mjk3OTIwZjI0ZTUiPlRKRkxBR19GT1JDRU1NWDwvYT48L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWRlc2M6Z2E0ZTg3MmYxMWM4MmYyNDE3MzZmYTgyOTc5MjBmMjRlNSI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5UdXJuIG9mZiBDUFUgYXV0by1kZXRlY3Rpb24gYW5kIGZvcmNlIFR1cmJvSlBFRyB0byB1c2UgTU1YIGNvZGUgKGlmIHRoZSB1bmRlcmx5aW5nIGNvZGVjIHN1cHBvcnRzIGl0LikgIDxhIGhyZWY9IiNnYTRlODcyZjExYzgyZjI0MTczNmZhODI5NzkyMGYyNGU1Ij5Nb3JlLi4uPC9hPjxici8+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJzZXBhcmF0b3I6Z2E0ZTg3MmYxMWM4MmYyNDE3MzZmYTgyOTc5MjBmMjRlNSI+PHRkIGNsYXNzPSJtZW1TZXBhcmF0b3IiIGNvbHNwYW49IjIiPiYjMTYwOzwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtaXRlbTpnYWUxN2U2MzE4OWU4Y2Q3MzBmZWVkM2VmYmQyNDU0ZjM4Ij48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj4jZGVmaW5lJiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FlMTdlNjMxODllOGNkNzMwZmVlZDNlZmJkMjQ1NGYzOCI+VEpGTEFHX0ZPUkNFU1NFPC9hPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtZGVzYzpnYWUxN2U2MzE4OWU4Y2Q3MzBmZWVkM2VmYmQyNDU0ZjM4Ij48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPlR1cm4gb2ZmIENQVSBhdXRvLWRldGVjdGlvbiBhbmQgZm9yY2UgVHVyYm9KUEVHIHRvIHVzZSBTU0UgY29kZSAoaWYgdGhlIHVuZGVybHlpbmcgY29kZWMgc3VwcG9ydHMgaXQuKSAgPGEgaHJlZj0iI2dhZTE3ZTYzMTg5ZThjZDczMGZlZWQzZWZiZDI0NTRmMzgiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjpnYWUxN2U2MzE4OWU4Y2Q3MzBmZWVkM2VmYmQyNDU0ZjM4Ij48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmdhOGNmMGJjYTk2ZWE0ZDQ3MjU2M2Y0YjBlYmY4YzQ4ZTciPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPiNkZWZpbmUmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYThjZjBiY2E5NmVhNGQ0NzI1NjNmNGIwZWJmOGM0OGU3Ij5USkZMQUdfRk9SQ0VTU0UyPC9hPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtZGVzYzpnYThjZjBiY2E5NmVhNGQ0NzI1NjNmNGIwZWJmOGM0OGU3Ij48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPlR1cm4gb2ZmIENQVSBhdXRvLWRldGVjdGlvbiBhbmQgZm9yY2UgVHVyYm9KUEVHIHRvIHVzZSBTU0UyIGNvZGUgKGlmIHRoZSB1bmRlcmx5aW5nIGNvZGVjIHN1cHBvcnRzIGl0LikgIDxhIGhyZWY9IiNnYThjZjBiY2E5NmVhNGQ0NzI1NjNmNGIwZWJmOGM0OGU3Ij5Nb3JlLi4uPC9hPjxici8+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJzZXBhcmF0b3I6Z2E4Y2YwYmNhOTZlYTRkNDcyNTYzZjRiMGViZjhjNDhlNyI+PHRkIGNsYXNzPSJtZW1TZXBhcmF0b3IiIGNvbHNwYW49IjIiPiYjMTYwOzwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtaXRlbTpnYWY5ZDQ5MDY2NjMzNDA0ZGE0Mzg2ZDcwODIwMjk1ZGQyIj48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj4jZGVmaW5lJiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FmOWQ0OTA2NjYzMzQwNGRhNDM4NmQ3MDgyMDI5NWRkMiI+VEpGTEFHX0ZPUkNFU1NFMzwvYT48L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWRlc2M6Z2FmOWQ0OTA2NjYzMzQwNGRhNDM4NmQ3MDgyMDI5NWRkMiI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5UdXJuIG9mZiBDUFUgYXV0by1kZXRlY3Rpb24gYW5kIGZvcmNlIFR1cmJvSlBFRyB0byB1c2UgU1NFMyBjb2RlIChpZiB0aGUgdW5kZXJseWluZyBjb2RlYyBzdXBwb3J0cyBpdC4pICA8YSBocmVmPSIjZ2FmOWQ0OTA2NjYzMzQwNGRhNDM4NmQ3MDgyMDI5NWRkMiI+TW9yZS4uLjwvYT48YnIvPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ic2VwYXJhdG9yOmdhZjlkNDkwNjY2MzM0MDRkYTQzODZkNzA4MjAyOTVkZDIiPjx0ZCBjbGFzcz0ibWVtU2VwYXJhdG9yIiBjb2xzcGFuPSIyIj4mIzE2MDs8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWl0ZW06Z2E0ZWU0NTA2YzgxMTc3YTA2Zjc3ZTI1MDRhMjJlZmQyZCI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+I2RlZmluZSYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNGVlNDUwNmM4MTE3N2EwNmY3N2UyNTA0YTIyZWZkMmQiPlRKRkxBR19GQVNUVVBTQU1QTEU8L2E+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmdhNGVlNDUwNmM4MTE3N2EwNmY3N2UyNTA0YTIyZWZkMmQiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+V2hlbiBkZWNvbXByZXNzaW5nIGFuIGltYWdlIHRoYXQgd2FzIGNvbXByZXNzZWQgdXNpbmcgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcsIHVzZSB0aGUgZmFzdGVzdCBjaHJvbWluYW5jZSB1cHNhbXBsaW5nIGFsZ29yaXRobSBhdmFpbGFibGUgaW4gdGhlIHVuZGVybHlpbmcgY29kZWMuICA8YSBocmVmPSIjZ2E0ZWU0NTA2YzgxMTc3YTA2Zjc3ZTI1MDRhMjJlZmQyZCI+TW9yZS4uLjwvYT48YnIvPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ic2VwYXJhdG9yOmdhNGVlNDUwNmM4MTE3N2EwNmY3N2UyNTA0YTIyZWZkMmQiPjx0ZCBjbGFzcz0ibWVtU2VwYXJhdG9yIiBjb2xzcGFuPSIyIj4mIzE2MDs8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWl0ZW06Z2E4ODA4ZDQwM2M2OGI2MmFhYTU4YTRjMWU1OGU5ODk2MyI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+I2RlZmluZSYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhODgwOGQ0MDNjNjhiNjJhYWE1OGE0YzFlNThlOTg5NjMiPlRKRkxBR19OT1JFQUxMT0M8L2E+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmdhODgwOGQ0MDNjNjhiNjJhYWE1OGE0YzFlNThlOTg5NjMiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+RGlzYWJsZSBidWZmZXIgKHJlKWFsbG9jYXRpb24uICA8YSBocmVmPSIjZ2E4ODA4ZDQwM2M2OGI2MmFhYTU4YTRjMWU1OGU5ODk2MyI+TW9yZS4uLjwvYT48YnIvPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ic2VwYXJhdG9yOmdhODgwOGQ0MDNjNjhiNjJhYWE1OGE0YzFlNThlOTg5NjMiPjx0ZCBjbGFzcz0ibWVtU2VwYXJhdG9yIiBjb2xzcGFuPSIyIj4mIzE2MDs8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWl0ZW06Z2FhYmNlMjM1ZGI4MGQzZjY5OGIyN2YzNmNiZDQ1M2RhMiI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+I2RlZmluZSYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhYWJjZTIzNWRiODBkM2Y2OThiMjdmMzZjYmQ0NTNkYTIiPlRKRkxBR19GQVNURENUPC9hPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtZGVzYzpnYWFiY2UyMzVkYjgwZDNmNjk4YjI3ZjM2Y2JkNDUzZGEyIj48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPlVzZSB0aGUgZmFzdGVzdCBEQ1QvSURDVCBhbGdvcml0aG0gYXZhaWxhYmxlIGluIHRoZSB1bmRlcmx5aW5nIGNvZGVjLiAgPGEgaHJlZj0iI2dhYWJjZTIzNWRiODBkM2Y2OThiMjdmMzZjYmQ0NTNkYTIiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjpnYWFiY2UyMzVkYjgwZDNmNjk4YjI3ZjM2Y2JkNDUzZGEyIj48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmdhY2IyMzNjZmQ3MjJkNjZkMWNjYmY0OGE3ZGU4MWYwZTAiPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPiNkZWZpbmUmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWNiMjMzY2ZkNzIyZDY2ZDFjY2JmNDhhN2RlODFmMGUwIj5USkZMQUdfQUNDVVJBVEVEQ1Q8L2E+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmdhY2IyMzNjZmQ3MjJkNjZkMWNjYmY0OGE3ZGU4MWYwZTAiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+VXNlIHRoZSBtb3N0IGFjY3VyYXRlIERDVC9JRENUIGFsZ29yaXRobSBhdmFpbGFibGUgaW4gdGhlIHVuZGVybHlpbmcgY29kZWMuICA8YSBocmVmPSIjZ2FjYjIzM2NmZDcyMmQ2NmQxY2NiZjQ4YTdkZTgxZjBlMCI+TW9yZS4uLjwvYT48YnIvPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ic2VwYXJhdG9yOmdhY2IyMzNjZmQ3MjJkNjZkMWNjYmY0OGE3ZGU4MWYwZTAiPjx0ZCBjbGFzcz0ibWVtU2VwYXJhdG9yIiBjb2xzcGFuPSIyIj4mIzE2MDs8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWl0ZW06Z2EwZjZkYmQxOGFkZjM4YjdkNDZhYzU0N2YwZjRkNTYyYyI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+I2RlZmluZSYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhMGY2ZGJkMThhZGYzOGI3ZDQ2YWM1NDdmMGY0ZDU2MmMiPlRKX05VTVhPUDwvYT48L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWRlc2M6Z2EwZjZkYmQxOGFkZjM4YjdkNDZhYzU0N2YwZjRkNTYyYyI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5UaGUgbnVtYmVyIG9mIHRyYW5zZm9ybSBvcGVyYXRpb25zLiAgPGEgaHJlZj0iI2dhMGY2ZGJkMThhZGYzOGI3ZDQ2YWM1NDdmMGY0ZDU2MmMiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjpnYTBmNmRiZDE4YWRmMzhiN2Q0NmFjNTQ3ZjBmNGQ1NjJjIj48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmdhNTBlMDNjYjVlZDExNTMzMGUyMTI0MTc0Mjk2MDBiMDAiPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPiNkZWZpbmUmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTUwZTAzY2I1ZWQxMTUzMzBlMjEyNDE3NDI5NjAwYjAwIj5USlhPUFRfUEVSRkVDVDwvYT48L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWRlc2M6Z2E1MGUwM2NiNWVkMTE1MzMwZTIxMjQxNzQyOTYwMGIwMCI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5UaGlzIG9wdGlvbiB3aWxsIGNhdXNlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FlNDAzMTkzY2ViNGFhZmI3ZTBmNTZhYjU4N2I0ODYxNiIgdGl0bGU9Ikxvc3NsZXNzbHkgdHJhbnNmb3JtIGEgSlBFRyBpbWFnZSBpbnRvIGFub3RoZXIgSlBFRyBpbWFnZS4iPnRqVHJhbnNmb3JtKCk8L2E+IHRvIHJldHVybiBhbiBlcnJvciBpZiB0aGUgdHJhbnNmb3JtIGlzIG5vdCBwZXJmZWN0LiAgPGEgaHJlZj0iI2dhNTBlMDNjYjVlZDExNTMzMGUyMTI0MTc0Mjk2MDBiMDAiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjpnYTUwZTAzY2I1ZWQxMTUzMzBlMjEyNDE3NDI5NjAwYjAwIj48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmdhMzE5ODI2YjdlYjE1ODNjMDU5NWJiZTdiOTU0Mjg3MDkiPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPiNkZWZpbmUmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTMxOTgyNmI3ZWIxNTgzYzA1OTViYmU3Yjk1NDI4NzA5Ij5USlhPUFRfVFJJTTwvYT48L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWRlc2M6Z2EzMTk4MjZiN2ViMTU4M2MwNTk1YmJlN2I5NTQyODcwOSI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5UaGlzIG9wdGlvbiB3aWxsIGNhdXNlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FlNDAzMTkzY2ViNGFhZmI3ZTBmNTZhYjU4N2I0ODYxNiIgdGl0bGU9Ikxvc3NsZXNzbHkgdHJhbnNmb3JtIGEgSlBFRyBpbWFnZSBpbnRvIGFub3RoZXIgSlBFRyBpbWFnZS4iPnRqVHJhbnNmb3JtKCk8L2E+IHRvIGRpc2NhcmQgYW55IHBhcnRpYWwgTUNVIGJsb2NrcyB0aGF0IGNhbm5vdCBiZSB0cmFuc2Zvcm1lZC4gIDxhIGhyZWY9IiNnYTMxOTgyNmI3ZWIxNTgzYzA1OTViYmU3Yjk1NDI4NzA5Ij5Nb3JlLi4uPC9hPjxici8+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJzZXBhcmF0b3I6Z2EzMTk4MjZiN2ViMTU4M2MwNTk1YmJlN2I5NTQyODcwOSI+PHRkIGNsYXNzPSJtZW1TZXBhcmF0b3IiIGNvbHNwYW49IjIiPiYjMTYwOzwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtaXRlbTpnYTljNzcxYTc1N2ZjMTI5NGFkZDYxMTkwNmI4OWFiMmQyIj48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj4jZGVmaW5lJiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E5Yzc3MWE3NTdmYzEyOTRhZGQ2MTE5MDZiODlhYjJkMiI+VEpYT1BUX0NST1A8L2E+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmdhOWM3NzFhNzU3ZmMxMjk0YWRkNjExOTA2Yjg5YWIyZDIiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+VGhpcyBvcHRpb24gd2lsbCBlbmFibGUgbG9zc2xlc3MgY3JvcHBpbmcuICA8YSBocmVmPSIjZ2E5Yzc3MWE3NTdmYzEyOTRhZGQ2MTE5MDZiODlhYjJkMiI+TW9yZS4uLjwvYT48YnIvPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ic2VwYXJhdG9yOmdhOWM3NzFhNzU3ZmMxMjk0YWRkNjExOTA2Yjg5YWIyZDIiPjx0ZCBjbGFzcz0ibWVtU2VwYXJhdG9yIiBjb2xzcGFuPSIyIj4mIzE2MDs8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWl0ZW06Z2EzYWNlZTdiNDhhZGUxYjk5ZTU1ODg3MzYwMDdjMjU4OSI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+I2RlZmluZSYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhM2FjZWU3YjQ4YWRlMWI5OWU1NTg4NzM2MDA3YzI1ODkiPlRKWE9QVF9HUkFZPC9hPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtZGVzYzpnYTNhY2VlN2I0OGFkZTFiOTllNTU4ODczNjAwN2MyNTg5Ij48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPlRoaXMgb3B0aW9uIHdpbGwgZGlzY2FyZCB0aGUgY29sb3IgZGF0YSBpbiB0aGUgaW5wdXQgaW1hZ2UgYW5kIHByb2R1Y2UgYSBncmF5c2NhbGUgb3V0cHV0IGltYWdlLiAgPGEgaHJlZj0iI2dhM2FjZWU3YjQ4YWRlMWI5OWU1NTg4NzM2MDA3YzI1ODkiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjpnYTNhY2VlN2I0OGFkZTFiOTllNTU4ODczNjAwN2MyNTg5Ij48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmdhZmJmOTkyYmJmNmUwMDY3MDU4ODYzMzM3MDNmZmFiMzEiPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPiNkZWZpbmUmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWZiZjk5MmJiZjZlMDA2NzA1ODg2MzMzNzAzZmZhYjMxIj5USlhPUFRfTk9PVVRQVVQ8L2E+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmdhZmJmOTkyYmJmNmUwMDY3MDU4ODYzMzM3MDNmZmFiMzEiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+VGhpcyBvcHRpb24gd2lsbCBwcmV2ZW50IDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FlNDAzMTkzY2ViNGFhZmI3ZTBmNTZhYjU4N2I0ODYxNiIgdGl0bGU9Ikxvc3NsZXNzbHkgdHJhbnNmb3JtIGEgSlBFRyBpbWFnZSBpbnRvIGFub3RoZXIgSlBFRyBpbWFnZS4iPnRqVHJhbnNmb3JtKCk8L2E+IGZyb20gb3V0cHV0dGluZyBhIEpQRUcgaW1hZ2UgZm9yIHRoaXMgcGFydGljdWxhciB0cmFuc2Zvcm0gKHRoaXMgY2FuIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBhIGN1c3RvbSBmaWx0ZXIgdG8gY2FwdHVyZSB0aGUgdHJhbnNmb3JtZWQgRENUIGNvZWZmaWNpZW50cyB3aXRob3V0IHRyYW5zY29kaW5nIHRoZW0uKSAgPGEgaHJlZj0iI2dhZmJmOTkyYmJmNmUwMDY3MDU4ODYzMzM3MDNmZmFiMzEiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjpnYWZiZjk5MmJiZjZlMDA2NzA1ODg2MzMzNzAzZmZhYjMxIj48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmdhMGFiYTk1NTQ3MzMxNWU0MDUyOTVkOTc4ZjBjMTY1MTEiPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPiNkZWZpbmUmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTBhYmE5NTU0NzMzMTVlNDA1Mjk1ZDk3OGYwYzE2NTExIj5USlBBRDwvYT4od2lkdGgpPC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmdhMGFiYTk1NTQ3MzMxNWU0MDUyOTVkOTc4ZjBjMTY1MTEiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+UGFkIHRoZSBnaXZlbiB3aWR0aCB0byB0aGUgbmVhcmVzdCAzMi1iaXQgYm91bmRhcnkuICA8YSBocmVmPSIjZ2EwYWJhOTU1NDczMzE1ZTQwNTI5NWQ5NzhmMGMxNjUxMSI+TW9yZS4uLjwvYT48YnIvPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ic2VwYXJhdG9yOmdhMGFiYTk1NTQ3MzMxNWU0MDUyOTVkOTc4ZjBjMTY1MTEiPjx0ZCBjbGFzcz0ibWVtU2VwYXJhdG9yIiBjb2xzcGFuPSIyIj4mIzE2MDs8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWl0ZW06Z2E4NDg3OGJiNjU0MDQyMDQ3NDNhYTE4Y2FjMDI3ODFkZiI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+I2RlZmluZSYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhODQ4NzhiYjY1NDA0MjA0NzQzYWExOGNhYzAyNzgxZGYiPlRKU0NBTEVEPC9hPihkaW1lbnNpb24sIHNjYWxpbmdGYWN0b3IpPC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmdhODQ4NzhiYjY1NDA0MjA0NzQzYWExOGNhYzAyNzgxZGYiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+Q29tcHV0ZSB0aGUgc2NhbGVkIHZhbHVlIG9mIDxjb2RlPmRpbWVuc2lvbjwvY29kZT4gdXNpbmcgdGhlIGdpdmVuIHNjYWxpbmcgZmFjdG9yLiAgPGEgaHJlZj0iI2dhODQ4NzhiYjY1NDA0MjA0NzQzYWExOGNhYzAyNzgxZGYiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjpnYTg0ODc4YmI2NTQwNDIwNDc0M2FhMThjYWMwMjc4MWRmIj48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPC90YWJsZT48dGFibGUgY2xhc3M9Im1lbWJlcmRlY2xzIj4KKzx0ciBjbGFzcz0iaGVhZGluZyI+PHRkIGNvbHNwYW49IjIiPjxoMiBjbGFzcz0iZ3JvdXBoZWFkZXIiPjxhIG5hbWU9InR5cGVkZWYtbWVtYmVycyI+PC9hPgogVHlwZWRlZnM8L2gyPjwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj50eXBlZGVmIHN0cnVjdCA8YSBjbGFzcz0iZWwiIGhyZWY9InN0cnVjdHRqdHJhbnNmb3JtLmh0bWwiPnRqdHJhbnNmb3JtPC9hPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhYTI5ZjMxODljNDFiZTEyZWM1ZGVlN2NhZWMzMThhMzEiPnRqdHJhbnNmb3JtPC9hPjwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPkxvc3NsZXNzIHRyYW5zZm9ybS4gIDxhIGhyZWY9IiNnYWEyOWYzMTg5YzQxYmUxMmVjNWRlZTdjYWVjMzE4YTMxIj48L2E+PGJyLz48L3RkPjwvdHI+Ci08dHI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+dHlwZWRlZiB2b2lkIComIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTc1OGQyNjM0ZWNiNDk0OWRlNzgxNWNiYTYyMWY1NzYzIj50amhhbmRsZTwvYT48L3RkPjwvdHI+Ci08dHI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5UdXJib0pQRUcgaW5zdGFuY2UgaGFuZGxlLiAgPGEgaHJlZj0iI2dhNzU4ZDI2MzRlY2I0OTQ5ZGU3ODE1Y2JhNjIxZjU3NjMiPjwvYT48YnIvPjwvdGQ+PC90cj4KLTx0cj48dGQgY29sc3Bhbj0iMiI+PGgyPjxhIG5hbWU9ImVudW0tbWVtYmVycyI+PC9hPgorPHRyIGNsYXNzPSJtZW1pdGVtOmdhYTI5ZjMxODljNDFiZTEyZWM1ZGVlN2NhZWMzMThhMzEiPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPnR5cGVkZWYgc3RydWN0IDxhIGNsYXNzPSJlbCIgaHJlZj0ic3RydWN0dGp0cmFuc2Zvcm0uaHRtbCI+dGp0cmFuc2Zvcm08L2E+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FhMjlmMzE4OWM0MWJlMTJlYzVkZWU3Y2FlYzMxOGEzMSI+dGp0cmFuc2Zvcm08L2E+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmdhYTI5ZjMxODljNDFiZTEyZWM1ZGVlN2NhZWMzMThhMzEiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+TG9zc2xlc3MgdHJhbnNmb3JtLiAgPGEgaHJlZj0iI2dhYTI5ZjMxODljNDFiZTEyZWM1ZGVlN2NhZWMzMThhMzEiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjpnYWEyOWYzMTg5YzQxYmUxMmVjNWRlZTdjYWVjMzE4YTMxIj48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmdhNzU4ZDI2MzRlY2I0OTQ5ZGU3ODE1Y2JhNjIxZjU3NjMiPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPnR5cGVkZWYgdm9pZCAqJiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E3NThkMjYzNGVjYjQ5NDlkZTc4MTVjYmE2MjFmNTc2MyI+dGpoYW5kbGU8L2E+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmdhNzU4ZDI2MzRlY2I0OTQ5ZGU3ODE1Y2JhNjIxZjU3NjMiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+VHVyYm9KUEVHIGluc3RhbmNlIGhhbmRsZS4gIDxhIGhyZWY9IiNnYTc1OGQyNjM0ZWNiNDk0OWRlNzgxNWNiYTYyMWY1NzYzIj5Nb3JlLi4uPC9hPjxici8+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJzZXBhcmF0b3I6Z2E3NThkMjYzNGVjYjQ5NDlkZTc4MTVjYmE2MjFmNTc2MyI+PHRkIGNsYXNzPSJtZW1TZXBhcmF0b3IiIGNvbHNwYW49IjIiPiYjMTYwOzwvdGQ+PC90cj4KKzwvdGFibGU+PHRhYmxlIGNsYXNzPSJtZW1iZXJkZWNscyI+Cis8dHIgY2xhc3M9ImhlYWRpbmciPjx0ZCBjb2xzcGFuPSIyIj48aDIgY2xhc3M9Imdyb3VwaGVhZGVyIj48YSBuYW1lPSJlbnVtLW1lbWJlcnMiPjwvYT4KIEVudW1lcmF0aW9uczwvaDI+PC90ZD48L3RyPgotPHRyPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPmVudW0gJiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2ExZDA0NzA2MGVhODBiYjk4MjBkNTQwYmI5MjhlOTA3NCI+VEpTQU1QPC9hPiB7IDxici8+Cis8dHIgY2xhc3M9Im1lbWl0ZW06Z2ExZDA0NzA2MGVhODBiYjk4MjBkNTQwYmI5MjhlOTA3NCI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+ZW51bSAmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTFkMDQ3MDYwZWE4MGJiOTgyMGQ1NDBiYjkyOGU5MDc0Ij5USlNBTVA8L2E+IHsgPGJyLz4KICYjMTYwOyYjMTYwOzxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhMWQwNDcwNjBlYTgwYmI5ODIwZDU0MGJiOTI4ZTkwNzRhZmI4ZGE0ZjQ0MTk3ODM3YmRlYzBhNGY1OTNkYWNhZTMiPlRKU0FNUF80NDQ8L2E+LCAKIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhMWQwNDcwNjBlYTgwYmI5ODIwZDU0MGJiOTI4ZTkwNzRhMTM2MTMwOTAyY2M1NzhmMTFmMzI0MjliNTkzNjg0MDQiPlRKU0FNUF80MjI8L2E+LCAKIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhMWQwNDcwNjBlYTgwYmI5ODIwZDU0MGJiOTI4ZTkwNzRhNjMwODVkYmY2ODNjZmUzOWU1MTNjZGI2MzQzZTM3MzciPlRKU0FNUF80MjA8L2E+LCAKQEAgLTEzMCw4ICsxODIsOSBAQAogJiMxNjA7JiMxNjA7PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2ExZDA0NzA2MGVhODBiYjk4MjBkNTQwYmI5MjhlOTA3NGFjY2Y3NDBlNmYzYWE2YmEyMGJhOTIyY2FkMTNjYjk3NCI+VEpTQU1QXzQ0MDwvYT4KIDxici8+CiAgfTwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPkNocm9taW5hbmNlIHN1YnNhbXBsaW5nIG9wdGlvbnMuICA8YSBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTFkMDQ3MDYwZWE4MGJiOTgyMGQ1NDBiYjkyOGU5MDc0Ij5Nb3JlLi4uPC9hPjxici8+PC90ZD48L3RyPgotPHRyPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPmVudW0gJiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYSI+VEpQRjwvYT4geyA8YnIvPgorPHRyIGNsYXNzPSJtZW1kZXNjOmdhMWQwNDcwNjBlYTgwYmI5ODIwZDU0MGJiOTI4ZTkwNzQiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+Q2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcgb3B0aW9ucy4gIDxhIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhMWQwNDcwNjBlYTgwYmI5ODIwZDU0MGJiOTI4ZTkwNzQiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjpnYTFkMDQ3MDYwZWE4MGJiOTgyMGQ1NDBiYjkyOGU5MDc0Ij48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmdhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmEiPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPmVudW0gJiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYSI+VEpQRjwvYT4geyA8YnIvPgogJiMxNjA7JiMxNjA7PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYWE3Y2U5MzIzMGJmZjQ0OTUxOGNlMzg3YzE3ZTZlZDM3YyI+VEpQRl9SR0I8L2E+LCAKIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmFhYjEwNjI0NDM3ZmI4ZWY0OTVhMGIxNTNlNjU3NDk4MzkiPlRKUEZfQkdSPC9hPiwgCiA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYWM5MTYxNDRlMjZjMzgxN2FjNTE0ZTY0YWU1ZDEyZTJhYTgzOTczYmViYjdlMmRjNmZhOGJhZTg5ZmYzZjQyZTAxIj5USlBGX1JHQlg8L2E+LCAKQEAgLTE0Nyw4ICsyMDAsOSBAQAogPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYWFlOGY4NDZlZDlkOWRlOTliNmUxZGZlNDQ4ODQ4NzY1YyI+VEpQRl9BUkdCPC9hPgogPGJyLz4KICB9PC90ZD48L3RyPgotPHRyPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+UGl4ZWwgZm9ybWF0cy4gIDxhIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmEiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Ci08dHI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+ZW51bSAmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTJkZTUzMWFmNGU3ZTZjNGYxMjQ5MDgzNzZiMzU0ODY2Ij5USlhPUDwvYT4geyA8YnIvPgorPHRyIGNsYXNzPSJtZW1kZXNjOmdhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmEiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+UGl4ZWwgZm9ybWF0cy4gIDxhIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmEiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjpnYWM5MTYxNDRlMjZjMzgxN2FjNTE0ZTY0YWU1ZDEyZTJhIj48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmdhMmRlNTMxYWY0ZTdlNmM0ZjEyNDkwODM3NmIzNTQ4NjYiPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPmVudW0gJiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2EyZGU1MzFhZjRlN2U2YzRmMTI0OTA4Mzc2YjM1NDg2NiI+VEpYT1A8L2E+IHsgPGJyLz4KICYjMTYwOyYjMTYwOzxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhMmRlNTMxYWY0ZTdlNmM0ZjEyNDkwODM3NmIzNTQ4NjZhYWQ4OGMwMzY2Y2QzZjdkMGVhYzlkN2EzZmExYzJjMjciPlRKWE9QX05PTkU8L2E+LCAKIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhMmRlNTMxYWY0ZTdlNmM0ZjEyNDkwODM3NmIzNTQ4NjZhYTBkZjY5Nzc2Y2FhMzBmMGZhMjhlMjYzMzJkMzExY2UiPlRKWE9QX0hGTElQPC9hPiwgCiA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYTJkZTUzMWFmNGU3ZTZjNGYxMjQ5MDgzNzZiMzU0ODY2YTMyNGVkZGZiZWM1M2I3ZTY5MWY2MWU1NjkyOWQwZDVkIj5USlhPUF9WRkxJUDwvYT4sIApAQCAtMTYwLDYxICsyMTQsODYgQEAKIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhMmRlNTMxYWY0ZTdlNmM0ZjEyNDkwODM3NmIzNTQ4NjZhMzA2NGVlNWRmYjdmMDMyZGYzMzI4MTg1ODc1NjdhMDgiPlRKWE9QX1JPVDI3MDwvYT4KIDxici8+CiAgfTwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPlRyYW5zZm9ybSBvcGVyYXRpb25zIGZvciA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhZTQwMzE5M2NlYjRhYWZiN2UwZjU2YWI1ODdiNDg2MTYiIHRpdGxlPSJMb3NzbGVzc2x5IHRyYW5zZm9ybSBhIEpQRUcgaW1hZ2UgaW50byBhbm90aGVyIEpQRUcgaW1hZ2UuIj50alRyYW5zZm9ybSgpPC9hPiAgPGEgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2EyZGU1MzFhZjRlN2U2YzRmMTI0OTA4Mzc2YjM1NDg2NiI+TW9yZS4uLjwvYT48YnIvPjwvdGQ+PC90cj4KLTx0cj48dGQgY29sc3Bhbj0iMiI+PGgyPjxhIG5hbWU9ImZ1bmMtbWVtYmVycyI+PC9hPgorPHRyIGNsYXNzPSJtZW1kZXNjOmdhMmRlNTMxYWY0ZTdlNmM0ZjEyNDkwODM3NmIzNTQ4NjYiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+VHJhbnNmb3JtIG9wZXJhdGlvbnMgZm9yIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FlNDAzMTkzY2ViNGFhZmI3ZTBmNTZhYjU4N2I0ODYxNiIgdGl0bGU9Ikxvc3NsZXNzbHkgdHJhbnNmb3JtIGEgSlBFRyBpbWFnZSBpbnRvIGFub3RoZXIgSlBFRyBpbWFnZS4iPnRqVHJhbnNmb3JtKCk8L2E+ICA8YSBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTJkZTUzMWFmNGU3ZTZjNGYxMjQ5MDgzNzZiMzU0ODY2Ij5Nb3JlLi4uPC9hPjxici8+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJzZXBhcmF0b3I6Z2EyZGU1MzFhZjRlN2U2YzRmMTI0OTA4Mzc2YjM1NDg2NiI+PHRkIGNsYXNzPSJtZW1TZXBhcmF0b3IiIGNvbHNwYW49IjIiPiYjMTYwOzwvdGQ+PC90cj4KKzwvdGFibGU+PHRhYmxlIGNsYXNzPSJtZW1iZXJkZWNscyI+Cis8dHIgY2xhc3M9ImhlYWRpbmciPjx0ZCBjb2xzcGFuPSIyIj48aDIgY2xhc3M9Imdyb3VwaGVhZGVyIj48YSBuYW1lPSJmdW5jLW1lbWJlcnMiPjwvYT4KIEZ1bmN0aW9uczwvaDI+PC90ZD48L3RyPgotPHRyPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPkRMTEVYUE9SVCA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNzU4ZDI2MzRlY2I0OTQ5ZGU3ODE1Y2JhNjIxZjU3NjMiPnRqaGFuZGxlPC9hPiBETExDQUxMJiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2EzZDEwYzQ3ZmJlNGEyNDg5YTJiMzBjOTMxNTUxZDAxYSI+dGpJbml0Q29tcHJlc3M8L2E+ICh2b2lkKTwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPkNyZWF0ZSBhIFR1cmJvSlBFRyBjb21wcmVzc29yIGluc3RhbmNlLiAgPGEgaHJlZj0iI2dhM2QxMGM0N2ZiZTRhMjQ4OWEyYjMwYzkzMTU1MWQwMWEiPjwvYT48YnIvPjwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj5ETExFWFBPUlQgaW50IERMTENBTEwmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWJhNjJiN2E5OGY5NjA4MzliNTg4NTc5ODk4NDk1Y2YyIj50akNvbXByZXNzMjwvYT4gKDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E3NThkMjYzNGVjYjQ5NDlkZTc4MTVjYmE2MjFmNTc2MyI+dGpoYW5kbGU8L2E+IGhhbmRsZSwgdW5zaWduZWQgY2hhciAqc3JjQnVmLCBpbnQgd2lkdGgsIGludCBwaXRjaCwgaW50IGhlaWdodCwgaW50IHBpeGVsRm9ybWF0LCB1bnNpZ25lZCBjaGFyICoqanBlZ0J1ZiwgdW5zaWduZWQgbG9uZyAqanBlZ1NpemUsIGludCBqcGVnU3Vic2FtcCwgaW50IGpwZWdRdWFsLCBpbnQgZmxhZ3MpPC90ZD48L3RyPgotPHRyPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+Q29tcHJlc3MgYW4gUkdCIG9yIGdyYXlzY2FsZSBpbWFnZSBpbnRvIGEgSlBFRyBpbWFnZS4gIDxhIGhyZWY9IiNnYWJhNjJiN2E5OGY5NjA4MzliNTg4NTc5ODk4NDk1Y2YyIj48L2E+PGJyLz48L3RkPjwvdHI+Ci08dHI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+RExMRVhQT1JUIHVuc2lnbmVkIGxvbmcgRExMQ0FMTCYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhY2NjNWJjYTdmMTJmY2RjYzMwMmU2ZTFjNmQ0YjMxMWIiPnRqQnVmU2l6ZTwvYT4gKGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGpwZWdTdWJzYW1wKTwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPlRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIGJ1ZmZlciAoaW4gYnl0ZXMpIHJlcXVpcmVkIHRvIGhvbGQgYSBKUEVHIGltYWdlIHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnMuICA8YSBocmVmPSIjZ2FjY2M1YmNhN2YxMmZjZGNjMzAyZTZlMWM2ZDRiMzExYiI+PC9hPjxici8+PC90ZD48L3RyPgotPHRyPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPkRMTEVYUE9SVCB1bnNpZ25lZCBsb25nIERMTENBTEwmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTlkMGNiMDZmZDUwNTJkMjFiNmYyYjM4MmRiOGIyMTljIj50akJ1ZlNpemVZVVY8L2E+IChpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBzdWJzYW1wKTwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPlRoZSBzaXplIG9mIHRoZSBidWZmZXIgKGluIGJ5dGVzKSByZXF1aXJlZCB0byBob2xkIGEgWVVWIHBsYW5hciBpbWFnZSB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLiAgPGEgaHJlZj0iI2dhOWQwY2IwNmZkNTA1MmQyMWI2ZjJiMzgyZGI4YjIxOWMiPjwvYT48YnIvPjwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj5ETExFWFBPUlQgaW50IERMTENBTEwmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTBmYTRlN2IxOTQzNjg3YzZhMGMwMzA0NTI5YzU1ZDM1Ij50akVuY29kZVlVVjI8L2E+ICg8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNzU4ZDI2MzRlY2I0OTQ5ZGU3ODE1Y2JhNjIxZjU3NjMiPnRqaGFuZGxlPC9hPiBoYW5kbGUsIHVuc2lnbmVkIGNoYXIgKnNyY0J1ZiwgaW50IHdpZHRoLCBpbnQgcGl0Y2gsIGludCBoZWlnaHQsIGludCBwaXhlbEZvcm1hdCwgdW5zaWduZWQgY2hhciAqZHN0QnVmLCBpbnQgc3Vic2FtcCwgaW50IGZsYWdzKTwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPkVuY29kZSBhbiBSR0Igb3IgZ3JheXNjYWxlIGltYWdlIGludG8gYSBZVVYgcGxhbmFyIGltYWdlLiAgPGEgaHJlZj0iI2dhMGZhNGU3YjE5NDM2ODdjNmEwYzAzMDQ1MjljNTVkMzUiPjwvYT48YnIvPjwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj5ETExFWFBPUlQgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTc1OGQyNjM0ZWNiNDk0OWRlNzgxNWNiYTYyMWY1NzYzIj50amhhbmRsZTwvYT4gRExMQ0FMTCYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhZTU0MDgxNzlkMDQxZTJhMmY3MTk5YzgyODNjZjY0OWUiPnRqSW5pdERlY29tcHJlc3M8L2E+ICh2b2lkKTwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPkNyZWF0ZSBhIFR1cmJvSlBFRyBkZWNvbXByZXNzb3IgaW5zdGFuY2UuICA8YSBocmVmPSIjZ2FlNTQwODE3OWQwNDFlMmEyZjcxOTljODI4M2NmNjQ5ZSI+PC9hPjxici8+PC90ZD48L3RyPgotPHRyPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPkRMTEVYUE9SVCBpbnQgRExMQ0FMTCYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhYzU2NzVmY2ViNzk5N2IzODU1MTZjZGZmZGIzNGU2YWEiPnRqRGVjb21wcmVzc0hlYWRlcjI8L2E+ICg8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNzU4ZDI2MzRlY2I0OTQ5ZGU3ODE1Y2JhNjIxZjU3NjMiPnRqaGFuZGxlPC9hPiBoYW5kbGUsIHVuc2lnbmVkIGNoYXIgKmpwZWdCdWYsIHVuc2lnbmVkIGxvbmcganBlZ1NpemUsIGludCAqd2lkdGgsIGludCAqaGVpZ2h0LCBpbnQgKmpwZWdTdWJzYW1wKTwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPlJldHJpZXZlIGluZm9ybWF0aW9uIGFib3V0IGEgSlBFRyBpbWFnZSB3aXRob3V0IGRlY29tcHJlc3NpbmcgaXQuICA8YSBocmVmPSIjZ2FjNTY3NWZjZWI3OTk3YjM4NTUxNmNkZmZkYjM0ZTZhYSI+PC9hPjxici8+PC90ZD48L3RyPgotPHRyPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPkRMTEVYUE9SVCA8YSBjbGFzcz0iZWwiIGhyZWY9InN0cnVjdHRqc2NhbGluZ2ZhY3Rvci5odG1sIj50anNjYWxpbmdmYWN0b3I8L2E+ICpETExDQUxMJiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E2NDQ5MDQ0YjlhZjQwMjk5OWNjZjUyZjQwMTMzM2JlOCI+dGpHZXRTY2FsaW5nRmFjdG9yczwvYT4gKGludCAqbnVtc2NhbGluZ2ZhY3RvcnMpPC90ZD48L3RyPgotPHRyPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+UmV0dXJucyBhIGxpc3Qgb2YgZnJhY3Rpb25hbCBzY2FsaW5nIGZhY3RvcnMgdGhhdCB0aGUgSlBFRyBkZWNvbXByZXNzb3IgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBUdXJib0pQRUcgc3VwcG9ydHMuICA8YSBocmVmPSIjZ2E2NDQ5MDQ0YjlhZjQwMjk5OWNjZjUyZjQwMTMzM2JlOCI+PC9hPjxici8+PC90ZD48L3RyPgotPHRyPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPkRMTEVYUE9SVCBpbnQgRExMQ0FMTCYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhZGE2OWNjNjQ0M2QxYmI0OTNiNDBmMTYyNjI1OWU1ZTkiPnRqRGVjb21wcmVzczI8L2E+ICg8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNzU4ZDI2MzRlY2I0OTQ5ZGU3ODE1Y2JhNjIxZjU3NjMiPnRqaGFuZGxlPC9hPiBoYW5kbGUsIHVuc2lnbmVkIGNoYXIgKmpwZWdCdWYsIHVuc2lnbmVkIGxvbmcganBlZ1NpemUsIHVuc2lnbmVkIGNoYXIgKmRzdEJ1ZiwgaW50IHdpZHRoLCBpbnQgcGl0Y2gsIGludCBoZWlnaHQsIGludCBwaXhlbEZvcm1hdCwgaW50IGZsYWdzKTwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPkRlY29tcHJlc3MgYSBKUEVHIGltYWdlIHRvIGFuIFJHQiBvciBncmF5c2NhbGUgaW1hZ2UuICA8YSBocmVmPSIjZ2FkYTY5Y2M2NDQzZDFiYjQ5M2I0MGYxNjI2MjU5ZTVlOSI+PC9hPjxici8+PC90ZD48L3RyPgotPHRyPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPkRMTEVYUE9SVCBpbnQgRExMQ0FMTCYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhZDc4MTBhZjA5NTYyNGE0MDE2ZTcyOTU3YTUwZjc3ZDgiPnRqRGVjb21wcmVzc1RvWVVWPC9hPiAoPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTc1OGQyNjM0ZWNiNDk0OWRlNzgxNWNiYTYyMWY1NzYzIj50amhhbmRsZTwvYT4gaGFuZGxlLCB1bnNpZ25lZCBjaGFyICpqcGVnQnVmLCB1bnNpZ25lZCBsb25nIGpwZWdTaXplLCB1bnNpZ25lZCBjaGFyICpkc3RCdWYsIGludCBmbGFncyk8L3RkPjwvdHI+Ci08dHI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5EZWNvbXByZXNzIGEgSlBFRyBpbWFnZSB0byBhIFlVViBwbGFuYXIgaW1hZ2UuICA8YSBocmVmPSIjZ2FkNzgxMGFmMDk1NjI0YTQwMTZlNzI5NTdhNTBmNzdkOCI+PC9hPjxici8+PC90ZD48L3RyPgotPHRyPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPkRMTEVYUE9SVCA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNzU4ZDI2MzRlY2I0OTQ5ZGU3ODE1Y2JhNjIxZjU3NjMiPnRqaGFuZGxlPC9hPiBETExDQUxMJiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2EzMTU1Yjc3NWJmYmFjOWRiYmE4NjliOTVhMDM2NzkwMiI+dGpJbml0VHJhbnNmb3JtPC9hPiAodm9pZCk8L3RkPjwvdHI+Ci08dHI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5DcmVhdGUgYSBuZXcgVHVyYm9KUEVHIHRyYW5zZm9ybWVyIGluc3RhbmNlLiAgPGEgaHJlZj0iI2dhMzE1NWI3NzViZmJhYzlkYmJhODY5Yjk1YTAzNjc5MDIiPjwvYT48YnIvPjwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj5ETExFWFBPUlQgaW50IERMTENBTEwmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWU0MDMxOTNjZWI0YWFmYjdlMGY1NmFiNTg3YjQ4NjE2Ij50alRyYW5zZm9ybTwvYT4gKDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E3NThkMjYzNGVjYjQ5NDlkZTc4MTVjYmE2MjFmNTc2MyI+dGpoYW5kbGU8L2E+IGhhbmRsZSwgdW5zaWduZWQgY2hhciAqanBlZ0J1ZiwgdW5zaWduZWQgbG9uZyBqcGVnU2l6ZSwgaW50IG4sIHVuc2lnbmVkIGNoYXIgKipkc3RCdWZzLCB1bnNpZ25lZCBsb25nICpkc3RTaXplcywgPGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anRyYW5zZm9ybS5odG1sIj50anRyYW5zZm9ybTwvYT4gKnRyYW5zZm9ybXMsIGludCBmbGFncyk8L3RkPjwvdHI+Ci08dHI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5Mb3NzbGVzc2x5IHRyYW5zZm9ybSBhIEpQRUcgaW1hZ2UgaW50byBhbm90aGVyIEpQRUcgaW1hZ2UuICA8YSBocmVmPSIjZ2FlNDAzMTkzY2ViNGFhZmI3ZTBmNTZhYjU4N2I0ODYxNiI+PC9hPjxici8+PC90ZD48L3RyPgotPHRyPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPkRMTEVYUE9SVCBpbnQgRExMQ0FMTCYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNjc0YWRlZTkxN2I5NWFkNGE4OTZmMWJhMzllMTI1NDAiPnRqRGVzdHJveTwvYT4gKDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E3NThkMjYzNGVjYjQ5NDlkZTc4MTVjYmE2MjFmNTc2MyI+dGpoYW5kbGU8L2E+IGhhbmRsZSk8L3RkPjwvdHI+Ci08dHI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5EZXN0cm95IGEgVHVyYm9KUEVHIGNvbXByZXNzb3IsIGRlY29tcHJlc3Nvciwgb3IgdHJhbnNmb3JtZXIgaW5zdGFuY2UuICA8YSBocmVmPSIjZ2E2NzRhZGVlOTE3Yjk1YWQ0YTg5NmYxYmEzOWUxMjU0MCI+PC9hPjxici8+PC90ZD48L3RyPgotPHRyPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPkRMTEVYUE9SVCB1bnNpZ25lZCBjaGFyICpETExDQUxMJiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E1YzkyMzRiZGE2ZDk5M2NkYWZmZGQ4OWJmODFhMDBmZiI+dGpBbGxvYzwvYT4gKGludCBieXRlcyk8L3RkPjwvdHI+Ci08dHI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5BbGxvY2F0ZSBhbiBpbWFnZSBidWZmZXIgZm9yIHVzZSB3aXRoIFR1cmJvSlBFRy4gIDxhIGhyZWY9IiNnYTVjOTIzNGJkYTZkOTkzY2RhZmZkZDg5YmY4MWEwMGZmIj48L2E+PGJyLz48L3RkPjwvdHI+Ci08dHI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+RExMRVhQT1JUIHZvaWQgRExMQ0FMTCYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhOGM0YTEyMzFkYzA2YTQ1MDUxNGM4MzVmNjQ3MWYxMzciPnRqRnJlZTwvYT4gKHVuc2lnbmVkIGNoYXIgKmJ1ZmZlcik8L3RkPjwvdHI+Ci08dHI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5GcmVlIGFuIGltYWdlIGJ1ZmZlciBwcmV2aW91c2x5IGFsbG9jYXRlZCBieSBUdXJib0pQRUcuICA8YSBocmVmPSIjZ2E4YzRhMTIzMWRjMDZhNDUwNTE0YzgzNWY2NDcxZjEzNyI+PC9hPjxici8+PC90ZD48L3RyPgotPHRyPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPkRMTEVYUE9SVCBjaGFyICpETExDQUxMJiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E5YWY3OWM5MDhlYzEzMWIxYWU4ZDUyZmU0MDM3NWFiZiI+dGpHZXRFcnJvclN0cjwvYT4gKHZvaWQpPC90ZD48L3RyPgotPHRyPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+UmV0dXJucyBhIGRlc2NyaXB0aXZlIGVycm9yIG1lc3NhZ2UgZXhwbGFpbmluZyB3aHkgdGhlIGxhc3QgY29tbWFuZCBmYWlsZWQuICA8YSBocmVmPSIjZ2E5YWY3OWM5MDhlYzEzMWIxYWU4ZDUyZmU0MDM3NWFiZiI+PC9hPjxici8+PC90ZD48L3RyPgotPHRyPjx0ZCBjb2xzcGFuPSIyIj48aDI+PGEgbmFtZT0idmFyLW1lbWJlcnMiPjwvYT4KKzx0ciBjbGFzcz0ibWVtaXRlbTpnYTNkMTBjNDdmYmU0YTI0ODlhMmIzMGM5MzE1NTFkMDFhIj48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj5ETExFWFBPUlQgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTc1OGQyNjM0ZWNiNDk0OWRlNzgxNWNiYTYyMWY1NzYzIj50amhhbmRsZTwvYT4gRExMQ0FMTCYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhM2QxMGM0N2ZiZTRhMjQ4OWEyYjMwYzkzMTU1MWQwMWEiPnRqSW5pdENvbXByZXNzPC9hPiAodm9pZCk8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWRlc2M6Z2EzZDEwYzQ3ZmJlNGEyNDg5YTJiMzBjOTMxNTUxZDAxYSI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5DcmVhdGUgYSBUdXJib0pQRUcgY29tcHJlc3NvciBpbnN0YW5jZS4gIDxhIGhyZWY9IiNnYTNkMTBjNDdmYmU0YTI0ODlhMmIzMGM5MzE1NTFkMDFhIj5Nb3JlLi4uPC9hPjxici8+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJzZXBhcmF0b3I6Z2EzZDEwYzQ3ZmJlNGEyNDg5YTJiMzBjOTMxNTUxZDAxYSI+PHRkIGNsYXNzPSJtZW1TZXBhcmF0b3IiIGNvbHNwYW49IjIiPiYjMTYwOzwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtaXRlbTpnYWJhNjJiN2E5OGY5NjA4MzliNTg4NTc5ODk4NDk1Y2YyIj48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj5ETExFWFBPUlQgaW50IERMTENBTEwmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWJhNjJiN2E5OGY5NjA4MzliNTg4NTc5ODk4NDk1Y2YyIj50akNvbXByZXNzMjwvYT4gKDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E3NThkMjYzNGVjYjQ5NDlkZTc4MTVjYmE2MjFmNTc2MyI+dGpoYW5kbGU8L2E+IGhhbmRsZSwgdW5zaWduZWQgY2hhciAqc3JjQnVmLCBpbnQgd2lkdGgsIGludCBwaXRjaCwgaW50IGhlaWdodCwgaW50IHBpeGVsRm9ybWF0LCB1bnNpZ25lZCBjaGFyICoqanBlZ0J1ZiwgdW5zaWduZWQgbG9uZyAqanBlZ1NpemUsIGludCBqcGVnU3Vic2FtcCwgaW50IGpwZWdRdWFsLCBpbnQgZmxhZ3MpPC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmdhYmE2MmI3YTk4Zjk2MDgzOWI1ODg1Nzk4OTg0OTVjZjIiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+Q29tcHJlc3MgYW4gUkdCIG9yIGdyYXlzY2FsZSBpbWFnZSBpbnRvIGEgSlBFRyBpbWFnZS4gIDxhIGhyZWY9IiNnYWJhNjJiN2E5OGY5NjA4MzliNTg4NTc5ODk4NDk1Y2YyIj5Nb3JlLi4uPC9hPjxici8+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJzZXBhcmF0b3I6Z2FiYTYyYjdhOThmOTYwODM5YjU4ODU3OTg5ODQ5NWNmMiI+PHRkIGNsYXNzPSJtZW1TZXBhcmF0b3IiIGNvbHNwYW49IjIiPiYjMTYwOzwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtaXRlbTpnYWNjYzViY2E3ZjEyZmNkY2MzMDJlNmUxYzZkNGIzMTFiIj48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj5ETExFWFBPUlQgdW5zaWduZWQgbG9uZyBETExDQUxMJiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FjY2M1YmNhN2YxMmZjZGNjMzAyZTZlMWM2ZDRiMzExYiI+dGpCdWZTaXplPC9hPiAoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQganBlZ1N1YnNhbXApPC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmdhY2NjNWJjYTdmMTJmY2RjYzMwMmU2ZTFjNmQ0YjMxMWIiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+VGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgYnVmZmVyIChpbiBieXRlcykgcmVxdWlyZWQgdG8gaG9sZCBhIEpQRUcgaW1hZ2Ugd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycy4gIDxhIGhyZWY9IiNnYWNjYzViY2E3ZjEyZmNkY2MzMDJlNmUxYzZkNGIzMTFiIj5Nb3JlLi4uPC9hPjxici8+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJzZXBhcmF0b3I6Z2FjY2M1YmNhN2YxMmZjZGNjMzAyZTZlMWM2ZDRiMzExYiI+PHRkIGNsYXNzPSJtZW1TZXBhcmF0b3IiIGNvbHNwYW49IjIiPiYjMTYwOzwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtaXRlbTpnYTlkMGNiMDZmZDUwNTJkMjFiNmYyYjM4MmRiOGIyMTljIj48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj5ETExFWFBPUlQgdW5zaWduZWQgbG9uZyBETExDQUxMJiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E5ZDBjYjA2ZmQ1MDUyZDIxYjZmMmIzODJkYjhiMjE5YyI+dGpCdWZTaXplWVVWPC9hPiAoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgc3Vic2FtcCk8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWRlc2M6Z2E5ZDBjYjA2ZmQ1MDUyZDIxYjZmMmIzODJkYjhiMjE5YyI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5UaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIChpbiBieXRlcykgcmVxdWlyZWQgdG8gaG9sZCBhIFlVViBwbGFuYXIgaW1hZ2Ugd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycy4gIDxhIGhyZWY9IiNnYTlkMGNiMDZmZDUwNTJkMjFiNmYyYjM4MmRiOGIyMTljIj5Nb3JlLi4uPC9hPjxici8+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJzZXBhcmF0b3I6Z2E5ZDBjYjA2ZmQ1MDUyZDIxYjZmMmIzODJkYjhiMjE5YyI+PHRkIGNsYXNzPSJtZW1TZXBhcmF0b3IiIGNvbHNwYW49IjIiPiYjMTYwOzwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtaXRlbTpnYTBmYTRlN2IxOTQzNjg3YzZhMGMwMzA0NTI5YzU1ZDM1Ij48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj5ETExFWFBPUlQgaW50IERMTENBTEwmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTBmYTRlN2IxOTQzNjg3YzZhMGMwMzA0NTI5YzU1ZDM1Ij50akVuY29kZVlVVjI8L2E+ICg8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNzU4ZDI2MzRlY2I0OTQ5ZGU3ODE1Y2JhNjIxZjU3NjMiPnRqaGFuZGxlPC9hPiBoYW5kbGUsIHVuc2lnbmVkIGNoYXIgKnNyY0J1ZiwgaW50IHdpZHRoLCBpbnQgcGl0Y2gsIGludCBoZWlnaHQsIGludCBwaXhlbEZvcm1hdCwgdW5zaWduZWQgY2hhciAqZHN0QnVmLCBpbnQgc3Vic2FtcCwgaW50IGZsYWdzKTwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtZGVzYzpnYTBmYTRlN2IxOTQzNjg3YzZhMGMwMzA0NTI5YzU1ZDM1Ij48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPkVuY29kZSBhbiBSR0Igb3IgZ3JheXNjYWxlIGltYWdlIGludG8gYSBZVVYgcGxhbmFyIGltYWdlLiAgPGEgaHJlZj0iI2dhMGZhNGU3YjE5NDM2ODdjNmEwYzAzMDQ1MjljNTVkMzUiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjpnYTBmYTRlN2IxOTQzNjg3YzZhMGMwMzA0NTI5YzU1ZDM1Ij48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmdhZTU0MDgxNzlkMDQxZTJhMmY3MTk5YzgyODNjZjY0OWUiPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPkRMTEVYUE9SVCA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNzU4ZDI2MzRlY2I0OTQ5ZGU3ODE1Y2JhNjIxZjU3NjMiPnRqaGFuZGxlPC9hPiBETExDQUxMJiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FlNTQwODE3OWQwNDFlMmEyZjcxOTljODI4M2NmNjQ5ZSI+dGpJbml0RGVjb21wcmVzczwvYT4gKHZvaWQpPC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmdhZTU0MDgxNzlkMDQxZTJhMmY3MTk5YzgyODNjZjY0OWUiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+Q3JlYXRlIGEgVHVyYm9KUEVHIGRlY29tcHJlc3NvciBpbnN0YW5jZS4gIDxhIGhyZWY9IiNnYWU1NDA4MTc5ZDA0MWUyYTJmNzE5OWM4MjgzY2Y2NDllIj5Nb3JlLi4uPC9hPjxici8+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJzZXBhcmF0b3I6Z2FlNTQwODE3OWQwNDFlMmEyZjcxOTljODI4M2NmNjQ5ZSI+PHRkIGNsYXNzPSJtZW1TZXBhcmF0b3IiIGNvbHNwYW49IjIiPiYjMTYwOzwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtaXRlbTpnYWM1Njc1ZmNlYjc5OTdiMzg1NTE2Y2RmZmRiMzRlNmFhIj48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj5ETExFWFBPUlQgaW50IERMTENBTEwmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWM1Njc1ZmNlYjc5OTdiMzg1NTE2Y2RmZmRiMzRlNmFhIj50akRlY29tcHJlc3NIZWFkZXIyPC9hPiAoPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTc1OGQyNjM0ZWNiNDk0OWRlNzgxNWNiYTYyMWY1NzYzIj50amhhbmRsZTwvYT4gaGFuZGxlLCB1bnNpZ25lZCBjaGFyICpqcGVnQnVmLCB1bnNpZ25lZCBsb25nIGpwZWdTaXplLCBpbnQgKndpZHRoLCBpbnQgKmhlaWdodCwgaW50ICpqcGVnU3Vic2FtcCk8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWRlc2M6Z2FjNTY3NWZjZWI3OTk3YjM4NTUxNmNkZmZkYjM0ZTZhYSI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5SZXRyaWV2ZSBpbmZvcm1hdGlvbiBhYm91dCBhIEpQRUcgaW1hZ2Ugd2l0aG91dCBkZWNvbXByZXNzaW5nIGl0LiAgPGEgaHJlZj0iI2dhYzU2NzVmY2ViNzk5N2IzODU1MTZjZGZmZGIzNGU2YWEiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjpnYWM1Njc1ZmNlYjc5OTdiMzg1NTE2Y2RmZmRiMzRlNmFhIj48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmdhNjQ0OTA0NGI5YWY0MDI5OTljY2Y1MmY0MDEzMzNiZTgiPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPkRMTEVYUE9SVCA8YSBjbGFzcz0iZWwiIGhyZWY9InN0cnVjdHRqc2NhbGluZ2ZhY3Rvci5odG1sIj50anNjYWxpbmdmYWN0b3I8L2E+ICpETExDQUxMJiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E2NDQ5MDQ0YjlhZjQwMjk5OWNjZjUyZjQwMTMzM2JlOCI+dGpHZXRTY2FsaW5nRmFjdG9yczwvYT4gKGludCAqbnVtc2NhbGluZ2ZhY3RvcnMpPC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmdhNjQ0OTA0NGI5YWY0MDI5OTljY2Y1MmY0MDEzMzNiZTgiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+UmV0dXJucyBhIGxpc3Qgb2YgZnJhY3Rpb25hbCBzY2FsaW5nIGZhY3RvcnMgdGhhdCB0aGUgSlBFRyBkZWNvbXByZXNzb3IgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBUdXJib0pQRUcgc3VwcG9ydHMuICA8YSBocmVmPSIjZ2E2NDQ5MDQ0YjlhZjQwMjk5OWNjZjUyZjQwMTMzM2JlOCI+TW9yZS4uLjwvYT48YnIvPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ic2VwYXJhdG9yOmdhNjQ0OTA0NGI5YWY0MDI5OTljY2Y1MmY0MDEzMzNiZTgiPjx0ZCBjbGFzcz0ibWVtU2VwYXJhdG9yIiBjb2xzcGFuPSIyIj4mIzE2MDs8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWl0ZW06Z2FkYTY5Y2M2NDQzZDFiYjQ5M2I0MGYxNjI2MjU5ZTVlOSI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+RExMRVhQT1JUIGludCBETExDQUxMJiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FkYTY5Y2M2NDQzZDFiYjQ5M2I0MGYxNjI2MjU5ZTVlOSI+dGpEZWNvbXByZXNzMjwvYT4gKDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E3NThkMjYzNGVjYjQ5NDlkZTc4MTVjYmE2MjFmNTc2MyI+dGpoYW5kbGU8L2E+IGhhbmRsZSwgdW5zaWduZWQgY2hhciAqanBlZ0J1ZiwgdW5zaWduZWQgbG9uZyBqcGVnU2l6ZSwgdW5zaWduZWQgY2hhciAqZHN0QnVmLCBpbnQgd2lkdGgsIGludCBwaXRjaCwgaW50IGhlaWdodCwgaW50IHBpeGVsRm9ybWF0LCBpbnQgZmxhZ3MpPC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmdhZGE2OWNjNjQ0M2QxYmI0OTNiNDBmMTYyNjI1OWU1ZTkiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+RGVjb21wcmVzcyBhIEpQRUcgaW1hZ2UgdG8gYW4gUkdCIG9yIGdyYXlzY2FsZSBpbWFnZS4gIDxhIGhyZWY9IiNnYWRhNjljYzY0NDNkMWJiNDkzYjQwZjE2MjYyNTllNWU5Ij5Nb3JlLi4uPC9hPjxici8+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJzZXBhcmF0b3I6Z2FkYTY5Y2M2NDQzZDFiYjQ5M2I0MGYxNjI2MjU5ZTVlOSI+PHRkIGNsYXNzPSJtZW1TZXBhcmF0b3IiIGNvbHNwYW49IjIiPiYjMTYwOzwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtaXRlbTpnYWQ3ODEwYWYwOTU2MjRhNDAxNmU3Mjk1N2E1MGY3N2Q4Ij48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj5ETExFWFBPUlQgaW50IERMTENBTEwmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWQ3ODEwYWYwOTU2MjRhNDAxNmU3Mjk1N2E1MGY3N2Q4Ij50akRlY29tcHJlc3NUb1lVVjwvYT4gKDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E3NThkMjYzNGVjYjQ5NDlkZTc4MTVjYmE2MjFmNTc2MyI+dGpoYW5kbGU8L2E+IGhhbmRsZSwgdW5zaWduZWQgY2hhciAqanBlZ0J1ZiwgdW5zaWduZWQgbG9uZyBqcGVnU2l6ZSwgdW5zaWduZWQgY2hhciAqZHN0QnVmLCBpbnQgZmxhZ3MpPC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmdhZDc4MTBhZjA5NTYyNGE0MDE2ZTcyOTU3YTUwZjc3ZDgiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+RGVjb21wcmVzcyBhIEpQRUcgaW1hZ2UgdG8gYSBZVVYgcGxhbmFyIGltYWdlLiAgPGEgaHJlZj0iI2dhZDc4MTBhZjA5NTYyNGE0MDE2ZTcyOTU3YTUwZjc3ZDgiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjpnYWQ3ODEwYWYwOTU2MjRhNDAxNmU3Mjk1N2E1MGY3N2Q4Ij48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmdhMzE1NWI3NzViZmJhYzlkYmJhODY5Yjk1YTAzNjc5MDIiPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPkRMTEVYUE9SVCA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNzU4ZDI2MzRlY2I0OTQ5ZGU3ODE1Y2JhNjIxZjU3NjMiPnRqaGFuZGxlPC9hPiBETExDQUxMJiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2EzMTU1Yjc3NWJmYmFjOWRiYmE4NjliOTVhMDM2NzkwMiI+dGpJbml0VHJhbnNmb3JtPC9hPiAodm9pZCk8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWRlc2M6Z2EzMTU1Yjc3NWJmYmFjOWRiYmE4NjliOTVhMDM2NzkwMiI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5DcmVhdGUgYSBuZXcgVHVyYm9KUEVHIHRyYW5zZm9ybWVyIGluc3RhbmNlLiAgPGEgaHJlZj0iI2dhMzE1NWI3NzViZmJhYzlkYmJhODY5Yjk1YTAzNjc5MDIiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjpnYTMxNTViNzc1YmZiYWM5ZGJiYTg2OWI5NWEwMzY3OTAyIj48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmdhZTQwMzE5M2NlYjRhYWZiN2UwZjU2YWI1ODdiNDg2MTYiPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPkRMTEVYUE9SVCBpbnQgRExMQ0FMTCYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhZTQwMzE5M2NlYjRhYWZiN2UwZjU2YWI1ODdiNDg2MTYiPnRqVHJhbnNmb3JtPC9hPiAoPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTc1OGQyNjM0ZWNiNDk0OWRlNzgxNWNiYTYyMWY1NzYzIj50amhhbmRsZTwvYT4gaGFuZGxlLCB1bnNpZ25lZCBjaGFyICpqcGVnQnVmLCB1bnNpZ25lZCBsb25nIGpwZWdTaXplLCBpbnQgbiwgdW5zaWduZWQgY2hhciAqKmRzdEJ1ZnMsIHVuc2lnbmVkIGxvbmcgKmRzdFNpemVzLCA8YSBjbGFzcz0iZWwiIGhyZWY9InN0cnVjdHRqdHJhbnNmb3JtLmh0bWwiPnRqdHJhbnNmb3JtPC9hPiAqdHJhbnNmb3JtcywgaW50IGZsYWdzKTwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtZGVzYzpnYWU0MDMxOTNjZWI0YWFmYjdlMGY1NmFiNTg3YjQ4NjE2Ij48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPkxvc3NsZXNzbHkgdHJhbnNmb3JtIGEgSlBFRyBpbWFnZSBpbnRvIGFub3RoZXIgSlBFRyBpbWFnZS4gIDxhIGhyZWY9IiNnYWU0MDMxOTNjZWI0YWFmYjdlMGY1NmFiNTg3YjQ4NjE2Ij5Nb3JlLi4uPC9hPjxici8+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJzZXBhcmF0b3I6Z2FlNDAzMTkzY2ViNGFhZmI3ZTBmNTZhYjU4N2I0ODYxNiI+PHRkIGNsYXNzPSJtZW1TZXBhcmF0b3IiIGNvbHNwYW49IjIiPiYjMTYwOzwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtaXRlbTpnYTY3NGFkZWU5MTdiOTVhZDRhODk2ZjFiYTM5ZTEyNTQwIj48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj5ETExFWFBPUlQgaW50IERMTENBTEwmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTY3NGFkZWU5MTdiOTVhZDRhODk2ZjFiYTM5ZTEyNTQwIj50akRlc3Ryb3k8L2E+ICg8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNzU4ZDI2MzRlY2I0OTQ5ZGU3ODE1Y2JhNjIxZjU3NjMiPnRqaGFuZGxlPC9hPiBoYW5kbGUpPC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmdhNjc0YWRlZTkxN2I5NWFkNGE4OTZmMWJhMzllMTI1NDAiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+RGVzdHJveSBhIFR1cmJvSlBFRyBjb21wcmVzc29yLCBkZWNvbXByZXNzb3IsIG9yIHRyYW5zZm9ybWVyIGluc3RhbmNlLiAgPGEgaHJlZj0iI2dhNjc0YWRlZTkxN2I5NWFkNGE4OTZmMWJhMzllMTI1NDAiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjpnYTY3NGFkZWU5MTdiOTVhZDRhODk2ZjFiYTM5ZTEyNTQwIj48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmdhNWM5MjM0YmRhNmQ5OTNjZGFmZmRkODliZjgxYTAwZmYiPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPkRMTEVYUE9SVCB1bnNpZ25lZCBjaGFyICpETExDQUxMJiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E1YzkyMzRiZGE2ZDk5M2NkYWZmZGQ4OWJmODFhMDBmZiI+dGpBbGxvYzwvYT4gKGludCBieXRlcyk8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWRlc2M6Z2E1YzkyMzRiZGE2ZDk5M2NkYWZmZGQ4OWJmODFhMDBmZiI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5BbGxvY2F0ZSBhbiBpbWFnZSBidWZmZXIgZm9yIHVzZSB3aXRoIFR1cmJvSlBFRy4gIDxhIGhyZWY9IiNnYTVjOTIzNGJkYTZkOTkzY2RhZmZkZDg5YmY4MWEwMGZmIj5Nb3JlLi4uPC9hPjxici8+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJzZXBhcmF0b3I6Z2E1YzkyMzRiZGE2ZDk5M2NkYWZmZGQ4OWJmODFhMDBmZiI+PHRkIGNsYXNzPSJtZW1TZXBhcmF0b3IiIGNvbHNwYW49IjIiPiYjMTYwOzwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtaXRlbTpnYThjNGExMjMxZGMwNmE0NTA1MTRjODM1ZjY0NzFmMTM3Ij48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj5ETExFWFBPUlQgdm9pZCBETExDQUxMJiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E4YzRhMTIzMWRjMDZhNDUwNTE0YzgzNWY2NDcxZjEzNyI+dGpGcmVlPC9hPiAodW5zaWduZWQgY2hhciAqYnVmZmVyKTwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtZGVzYzpnYThjNGExMjMxZGMwNmE0NTA1MTRjODM1ZjY0NzFmMTM3Ij48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPkZyZWUgYW4gaW1hZ2UgYnVmZmVyIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IFR1cmJvSlBFRy4gIDxhIGhyZWY9IiNnYThjNGExMjMxZGMwNmE0NTA1MTRjODM1ZjY0NzFmMTM3Ij5Nb3JlLi4uPC9hPjxici8+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJzZXBhcmF0b3I6Z2E4YzRhMTIzMWRjMDZhNDUwNTE0YzgzNWY2NDcxZjEzNyI+PHRkIGNsYXNzPSJtZW1TZXBhcmF0b3IiIGNvbHNwYW49IjIiPiYjMTYwOzwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtaXRlbTpnYTlhZjc5YzkwOGVjMTMxYjFhZThkNTJmZTQwMzc1YWJmIj48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj5ETExFWFBPUlQgY2hhciAqRExMQ0FMTCYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhOWFmNzljOTA4ZWMxMzFiMWFlOGQ1MmZlNDAzNzVhYmYiPnRqR2V0RXJyb3JTdHI8L2E+ICh2b2lkKTwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtZGVzYzpnYTlhZjc5YzkwOGVjMTMxYjFhZThkNTJmZTQwMzc1YWJmIj48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPlJldHVybnMgYSBkZXNjcmlwdGl2ZSBlcnJvciBtZXNzYWdlIGV4cGxhaW5pbmcgd2h5IHRoZSBsYXN0IGNvbW1hbmQgZmFpbGVkLiAgPGEgaHJlZj0iI2dhOWFmNzljOTA4ZWMxMzFiMWFlOGQ1MmZlNDAzNzVhYmYiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjpnYTlhZjc5YzkwOGVjMTMxYjFhZThkNTJmZTQwMzc1YWJmIj48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPC90YWJsZT48dGFibGUgY2xhc3M9Im1lbWJlcmRlY2xzIj4KKzx0ciBjbGFzcz0iaGVhZGluZyI+PHRkIGNvbHNwYW49IjIiPjxoMiBjbGFzcz0iZ3JvdXBoZWFkZXIiPjxhIG5hbWU9InZhci1tZW1iZXJzIj48L2E+CiBWYXJpYWJsZXM8L2gyPjwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj5zdGF0aWMgY29uc3QgaW50JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E5ZTYxZTdjZDQ3YTE1YTE3MzI4M2JhOTRlNzgxMzA4YyI+dGpNQ1VXaWR0aDwvYT4gW1RKX05VTVNBTVBdPC90ZD48L3RyPgotPHRyPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+TUNVIGJsb2NrIHdpZHRoIChpbiBwaXhlbHMpIGZvciBhIGdpdmVuIGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nLiAgPGEgaHJlZj0iI2dhOWU2MWU3Y2Q0N2ExNWExNzMyODNiYTk0ZTc4MTMwOGMiPjwvYT48YnIvPjwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj5zdGF0aWMgY29uc3QgaW50JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FiZDI0N2JiOWZlY2IzOTNlY2E1NzM2NmZlYjgzMjdiZiI+dGpNQ1VIZWlnaHQ8L2E+IFtUSl9OVU1TQU1QXTwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPk1DVSBibG9jayBoZWlnaHQgKGluIHBpeGVscykgZm9yIGEgZ2l2ZW4gbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcuICA8YSBocmVmPSIjZ2FiZDI0N2JiOWZlY2IzOTNlY2E1NzM2NmZlYjgzMjdiZiI+PC9hPjxici8+PC90ZD48L3RyPgotPHRyPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPnN0YXRpYyBjb25zdCBpbnQmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWRkOWI0NDY3NDJhYzhhMzkyM2Y3OTkyYzc5ODhmZWE4Ij50alJlZE9mZnNldDwvYT4gW1RKX05VTVBGXTwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPlJlZCBvZmZzZXQgKGluIGJ5dGVzKSBmb3IgYSBnaXZlbiBwaXhlbCBmb3JtYXQuICA8YSBocmVmPSIjZ2FkZDliNDQ2NzQyYWM4YTM5MjNmNzk5MmM3OTg4ZmVhOCI+PC9hPjxici8+PC90ZD48L3RyPgotPHRyPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPnN0YXRpYyBjb25zdCBpbnQmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTgyZDZlMzVkYTQ0MTExMmE0MTFkYTQxOTIzYzBiYTJmIj50akdyZWVuT2Zmc2V0PC9hPiBbVEpfTlVNUEZdPC90ZD48L3RyPgotPHRyPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+R3JlZW4gb2Zmc2V0IChpbiBieXRlcykgZm9yIGEgZ2l2ZW4gcGl4ZWwgZm9ybWF0LiAgPGEgaHJlZj0iI2dhODJkNmUzNWRhNDQxMTEyYTQxMWRhNDE5MjNjMGJhMmYiPjwvYT48YnIvPjwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj5zdGF0aWMgY29uc3QgaW50JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E4NGUyZTM1ZDNmMDgwMjVmOTc2ZWMxZWM1MzY5M2RlYSI+dGpCbHVlT2Zmc2V0PC9hPiBbVEpfTlVNUEZdPC90ZD48L3RyPgotPHRyPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+Qmx1ZSBvZmZzZXQgKGluIGJ5dGVzKSBmb3IgYSBnaXZlbiBwaXhlbCBmb3JtYXQuICA8YSBocmVmPSIjZ2E4NGUyZTM1ZDNmMDgwMjVmOTc2ZWMxZWM1MzY5M2RlYSI+PC9hPjxici8+PC90ZD48L3RyPgotPHRyPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPnN0YXRpYyBjb25zdCBpbnQmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWQ3N2NmOGZlNWIyYmZkM2NiM2Y1MzA5ODE0NmFiYjRjIj50alBpeGVsU2l6ZTwvYT4gW1RKX05VTVBGXTwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPlBpeGVsIHNpemUgKGluIGJ5dGVzKSBmb3IgYSBnaXZlbiBwaXhlbCBmb3JtYXQuICA8YSBocmVmPSIjZ2FkNzdjZjhmZTViMmJmZDNjYjNmNTMwOTgxNDZhYmI0YyI+PC9hPjxici8+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmdhOWU2MWU3Y2Q0N2ExNWExNzMyODNiYTk0ZTc4MTMwOGMiPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPnN0YXRpYyBjb25zdCBpbnQmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTllNjFlN2NkNDdhMTVhMTczMjgzYmE5NGU3ODEzMDhjIj50ak1DVVdpZHRoPC9hPiBbPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTVlZjNkMTY5MTYyY2U3N2NlMzQ4ZTI5MmEwYjc0NzdjIj5USl9OVU1TQU1QPC9hPl08L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWRlc2M6Z2E5ZTYxZTdjZDQ3YTE1YTE3MzI4M2JhOTRlNzgxMzA4YyI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5NQ1UgYmxvY2sgd2lkdGggKGluIHBpeGVscykgZm9yIGEgZ2l2ZW4gbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcuICA8YSBocmVmPSIjZ2E5ZTYxZTdjZDQ3YTE1YTE3MzI4M2JhOTRlNzgxMzA4YyI+TW9yZS4uLjwvYT48YnIvPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ic2VwYXJhdG9yOmdhOWU2MWU3Y2Q0N2ExNWExNzMyODNiYTk0ZTc4MTMwOGMiPjx0ZCBjbGFzcz0ibWVtU2VwYXJhdG9yIiBjb2xzcGFuPSIyIj4mIzE2MDs8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWl0ZW06Z2FiZDI0N2JiOWZlY2IzOTNlY2E1NzM2NmZlYjgzMjdiZiI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+c3RhdGljIGNvbnN0IGludCYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhYmQyNDdiYjlmZWNiMzkzZWNhNTczNjZmZWI4MzI3YmYiPnRqTUNVSGVpZ2h0PC9hPiBbPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTVlZjNkMTY5MTYyY2U3N2NlMzQ4ZTI5MmEwYjc0NzdjIj5USl9OVU1TQU1QPC9hPl08L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWRlc2M6Z2FiZDI0N2JiOWZlY2IzOTNlY2E1NzM2NmZlYjgzMjdiZiI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5NQ1UgYmxvY2sgaGVpZ2h0IChpbiBwaXhlbHMpIGZvciBhIGdpdmVuIGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nLiAgPGEgaHJlZj0iI2dhYmQyNDdiYjlmZWNiMzkzZWNhNTczNjZmZWI4MzI3YmYiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjpnYWJkMjQ3YmI5ZmVjYjM5M2VjYTU3MzY2ZmViODMyN2JmIj48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmdhZGQ5YjQ0Njc0MmFjOGEzOTIzZjc5OTJjNzk4OGZlYTgiPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPnN0YXRpYyBjb25zdCBpbnQmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWRkOWI0NDY3NDJhYzhhMzkyM2Y3OTkyYzc5ODhmZWE4Ij50alJlZE9mZnNldDwvYT4gWzxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E3MDEwYTQ0MDJmNTRhNDViYTgyMmFkODY3NWE0NjU1ZSI+VEpfTlVNUEY8L2E+XTwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtZGVzYzpnYWRkOWI0NDY3NDJhYzhhMzkyM2Y3OTkyYzc5ODhmZWE4Ij48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPlJlZCBvZmZzZXQgKGluIGJ5dGVzKSBmb3IgYSBnaXZlbiBwaXhlbCBmb3JtYXQuICA8YSBocmVmPSIjZ2FkZDliNDQ2NzQyYWM4YTM5MjNmNzk5MmM3OTg4ZmVhOCI+TW9yZS4uLjwvYT48YnIvPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ic2VwYXJhdG9yOmdhZGQ5YjQ0Njc0MmFjOGEzOTIzZjc5OTJjNzk4OGZlYTgiPjx0ZCBjbGFzcz0ibWVtU2VwYXJhdG9yIiBjb2xzcGFuPSIyIj4mIzE2MDs8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWl0ZW06Z2E4MmQ2ZTM1ZGE0NDExMTJhNDExZGE0MTkyM2MwYmEyZiI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+c3RhdGljIGNvbnN0IGludCYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhODJkNmUzNWRhNDQxMTEyYTQxMWRhNDE5MjNjMGJhMmYiPnRqR3JlZW5PZmZzZXQ8L2E+IFs8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNzAxMGE0NDAyZjU0YTQ1YmE4MjJhZDg2NzVhNDY1NWUiPlRKX05VTVBGPC9hPl08L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWRlc2M6Z2E4MmQ2ZTM1ZGE0NDExMTJhNDExZGE0MTkyM2MwYmEyZiI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5HcmVlbiBvZmZzZXQgKGluIGJ5dGVzKSBmb3IgYSBnaXZlbiBwaXhlbCBmb3JtYXQuICA8YSBocmVmPSIjZ2E4MmQ2ZTM1ZGE0NDExMTJhNDExZGE0MTkyM2MwYmEyZiI+TW9yZS4uLjwvYT48YnIvPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ic2VwYXJhdG9yOmdhODJkNmUzNWRhNDQxMTEyYTQxMWRhNDE5MjNjMGJhMmYiPjx0ZCBjbGFzcz0ibWVtU2VwYXJhdG9yIiBjb2xzcGFuPSIyIj4mIzE2MDs8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWl0ZW06Z2E4NGUyZTM1ZDNmMDgwMjVmOTc2ZWMxZWM1MzY5M2RlYSI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+c3RhdGljIGNvbnN0IGludCYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhODRlMmUzNWQzZjA4MDI1Zjk3NmVjMWVjNTM2OTNkZWEiPnRqQmx1ZU9mZnNldDwvYT4gWzxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E3MDEwYTQ0MDJmNTRhNDViYTgyMmFkODY3NWE0NjU1ZSI+VEpfTlVNUEY8L2E+XTwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtZGVzYzpnYTg0ZTJlMzVkM2YwODAyNWY5NzZlYzFlYzUzNjkzZGVhIj48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPkJsdWUgb2Zmc2V0IChpbiBieXRlcykgZm9yIGEgZ2l2ZW4gcGl4ZWwgZm9ybWF0LiAgPGEgaHJlZj0iI2dhODRlMmUzNWQzZjA4MDI1Zjk3NmVjMWVjNTM2OTNkZWEiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjpnYTg0ZTJlMzVkM2YwODAyNWY5NzZlYzFlYzUzNjkzZGVhIj48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmdhZDc3Y2Y4ZmU1YjJiZmQzY2IzZjUzMDk4MTQ2YWJiNGMiPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPnN0YXRpYyBjb25zdCBpbnQmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWQ3N2NmOGZlNWIyYmZkM2NiM2Y1MzA5ODE0NmFiYjRjIj50alBpeGVsU2l6ZTwvYT4gWzxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E3MDEwYTQ0MDJmNTRhNDViYTgyMmFkODY3NWE0NjU1ZSI+VEpfTlVNUEY8L2E+XTwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtZGVzYzpnYWQ3N2NmOGZlNWIyYmZkM2NiM2Y1MzA5ODE0NmFiYjRjIj48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPlBpeGVsIHNpemUgKGluIGJ5dGVzKSBmb3IgYSBnaXZlbiBwaXhlbCBmb3JtYXQuICA8YSBocmVmPSIjZ2FkNzdjZjhmZTViMmJmZDNjYjNmNTMwOTgxNDZhYmI0YyI+TW9yZS4uLjwvYT48YnIvPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ic2VwYXJhdG9yOmdhZDc3Y2Y4ZmU1YjJiZmQzY2IzZjUzMDk4MTQ2YWJiNGMiPjx0ZCBjbGFzcz0ibWVtU2VwYXJhdG9yIiBjb2xzcGFuPSIyIj4mIzE2MDs8L3RkPjwvdHI+CiA8L3RhYmxlPgotPGhyLz48YSBuYW1lPSJkZXRhaWxzIiBpZD0iZGV0YWlscyI+PC9hPjxoMj5EZXRhaWxlZCBEZXNjcmlwdGlvbjwvaDI+Cis8YSBuYW1lPSJkZXRhaWxzIiBpZD0iZGV0YWlscyI+PC9hPjxoMiBjbGFzcz0iZ3JvdXBoZWFkZXIiPkRldGFpbGVkIERlc2NyaXB0aW9uPC9oMj4KIDxwPlR1cmJvSlBFRyBBUEkuIDwvcD4KIDxwPlRoaXMgQVBJIHByb3ZpZGVzIGFuIGludGVyZmFjZSBmb3IgZ2VuZXJhdGluZywgZGVjb2RpbmcsIGFuZCB0cmFuc2Zvcm1pbmcgcGxhbmFyIFlVViBhbmQgSlBFRyBpbWFnZXMgaW4gbWVtb3J5LiA8L3A+Ci08aHIvPjxoMj5EZWZpbmUgRG9jdW1lbnRhdGlvbjwvaDI+Ci08YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2E3MDEwYTQ0MDJmNTRhNDViYTgyMmFkODY3NWE0NjU1ZSI+PC9hPjwhLS0gZG94eXRhZzogbWVtYmVyPSJ0dXJib2pwZWcuaDo6VEpfTlVNUEYiIHJlZj0iZ2E3MDEwYTQ0MDJmNTRhNDViYTgyMmFkODY3NWE0NjU1ZSIgYXJncz0iIiAtLT4KKzxoMiBjbGFzcz0iZ3JvdXBoZWFkZXIiPk1hY3JvIERlZmluaXRpb24gRG9jdW1lbnRhdGlvbjwvaDI+Cis8YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2E3MDEwYTQ0MDJmNTRhNDViYTgyMmFkODY3NWE0NjU1ZSI+PC9hPgogPGRpdiBjbGFzcz0ibWVtaXRlbSI+CiA8ZGl2IGNsYXNzPSJtZW1wcm90byI+CiAgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgpAQCAtMjIyLDE0ICszMDEsMTMgQEAKICAgICAgICAgICA8dGQgY2xhc3M9Im1lbW5hbWUiPiNkZWZpbmUgVEpfTlVNUEY8L3RkPgogICAgICAgICA8L3RyPgogICAgICAgPC90YWJsZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0ibWVtZG9jIj4KKzwvZGl2PjxkaXYgY2xhc3M9Im1lbWRvYyI+CiAKIDxwPlRoZSBudW1iZXIgb2YgcGl4ZWwgZm9ybWF0cy4gPC9wPgogCiA8L2Rpdj4KIDwvZGl2PgotPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdhNWVmM2QxNjkxNjJjZTc3Y2UzNDhlMjkyYTBiNzQ3N2MiPjwvYT48IS0tIGRveHl0YWc6IG1lbWJlcj0idHVyYm9qcGVnLmg6OlRKX05VTVNBTVAiIHJlZj0iZ2E1ZWYzZDE2OTE2MmNlNzdjZTM0OGUyOTJhMGI3NDc3YyIgYXJncz0iIiAtLT4KKzxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYTVlZjNkMTY5MTYyY2U3N2NlMzQ4ZTI5MmEwYjc0NzdjIj48L2E+CiA8ZGl2IGNsYXNzPSJtZW1pdGVtIj4KIDxkaXYgY2xhc3M9Im1lbXByb3RvIj4KICAgICAgIDx0YWJsZSBjbGFzcz0ibWVtbmFtZSI+CkBAIC0yMzcsMTQgKzMxNSwxMyBAQAogICAgICAgICAgIDx0ZCBjbGFzcz0ibWVtbmFtZSI+I2RlZmluZSBUSl9OVU1TQU1QPC90ZD4KICAgICAgICAgPC90cj4KICAgICAgIDwvdGFibGU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9Im1lbWRvYyI+Cis8L2Rpdj48ZGl2IGNsYXNzPSJtZW1kb2MiPgogCiA8cD5UaGUgbnVtYmVyIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nIG9wdGlvbnMuIDwvcD4KIAogPC9kaXY+CiA8L2Rpdj4KLTxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYTBmNmRiZDE4YWRmMzhiN2Q0NmFjNTQ3ZjBmNGQ1NjJjIj48L2E+PCEtLSBkb3h5dGFnOiBtZW1iZXI9InR1cmJvanBlZy5oOjpUSl9OVU1YT1AiIHJlZj0iZ2EwZjZkYmQxOGFkZjM4YjdkNDZhYzU0N2YwZjRkNTYyYyIgYXJncz0iIiAtLT4KKzxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYTBmNmRiZDE4YWRmMzhiN2Q0NmFjNTQ3ZjBmNGQ1NjJjIj48L2E+CiA8ZGl2IGNsYXNzPSJtZW1pdGVtIj4KIDxkaXYgY2xhc3M9Im1lbXByb3RvIj4KICAgICAgIDx0YWJsZSBjbGFzcz0ibWVtbmFtZSI+CkBAIC0yNTIsMTQgKzMyOSwxMyBAQAogICAgICAgICAgIDx0ZCBjbGFzcz0ibWVtbmFtZSI+I2RlZmluZSBUSl9OVU1YT1A8L3RkPgogICAgICAgICA8L3RyPgogICAgICAgPC90YWJsZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0ibWVtZG9jIj4KKzwvZGl2PjxkaXYgY2xhc3M9Im1lbWRvYyI+CiAKLTxwPk51bWJlciBvZiB0cmFuc2Zvcm0gb3BlcmF0aW9ucy4gPC9wPgorPHA+VGhlIG51bWJlciBvZiB0cmFuc2Zvcm0gb3BlcmF0aW9ucy4gPC9wPgogCiA8L2Rpdj4KIDwvZGl2PgotPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdhY2IyMzNjZmQ3MjJkNjZkMWNjYmY0OGE3ZGU4MWYwZTAiPjwvYT48IS0tIGRveHl0YWc6IG1lbWJlcj0idHVyYm9qcGVnLmg6OlRKRkxBR19BQ0NVUkFURURDVCIgcmVmPSJnYWNiMjMzY2ZkNzIyZDY2ZDFjY2JmNDhhN2RlODFmMGUwIiBhcmdzPSIiIC0tPgorPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdhY2IyMzNjZmQ3MjJkNjZkMWNjYmY0OGE3ZGU4MWYwZTAiPjwvYT4KIDxkaXYgY2xhc3M9Im1lbWl0ZW0iPgogPGRpdiBjbGFzcz0ibWVtcHJvdG8iPgogICAgICAgPHRhYmxlIGNsYXNzPSJtZW1uYW1lIj4KQEAgLTI2NywxNSArMzQzLDE0IEBACiAgICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj4jZGVmaW5lIFRKRkxBR19BQ0NVUkFURURDVDwvdGQ+CiAgICAgICAgIDwvdHI+CiAgICAgICA8L3RhYmxlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJtZW1kb2MiPgorPC9kaXY+PGRpdiBjbGFzcz0ibWVtZG9jIj4KIAogPHA+VXNlIHRoZSBtb3N0IGFjY3VyYXRlIERDVC9JRENUIGFsZ29yaXRobSBhdmFpbGFibGUgaW4gdGhlIHVuZGVybHlpbmcgY29kZWMuIDwvcD4KLTxwPlRoZSBkZWZhdWx0IGlmIHRoaXMgZmxhZyBpcyBub3Qgc3BlY2lmaWVkIGlzIGltcGxlbWVudGF0aW9uLXNwZWNpZmljLiBUaGUgbGlianBlZyBpbXBsZW1lbnRhdGlvbiwgZm9yIGV4YW1wbGUsIHVzZXMgdGhlIGZhc3QgYWxnb3JpdGhtIGJ5IGRlZmF1bHQgd2hlbiBjb21wcmVzc2luZywgYmVjYXVzZSB0aGlzIGhhcyBiZWVuIHNob3duIHRvIGhhdmUgb25seSBhIHZlcnkgc2xpZ2h0IGVmZmVjdCBvbiBhY2N1cmFjeSwgYnV0IGl0IHVzZXMgdGhlIGFjY3VyYXRlIGFsZ29yaXRobSB3aGVuIGRlY29tcHJlc3NpbmcsIGJlY2F1c2UgdGhpcyBoYXMgYmVlbiBzaG93biB0byBoYXZlIGEgbGFyZ2VyIGVmZmVjdC4gPC9wPgorPHA+VGhlIGRlZmF1bHQgaWYgdGhpcyBmbGFnIGlzIG5vdCBzcGVjaWZpZWQgaXMgaW1wbGVtZW50YXRpb24tc3BlY2lmaWMuIEZvciBleGFtcGxlLCB0aGUgaW1wbGVtZW50YXRpb24gb2YgVHVyYm9KUEVHIGZvciBsaWJqcGVnWy10dXJib10gdXNlcyB0aGUgZmFzdCBhbGdvcml0aG0gYnkgZGVmYXVsdCB3aGVuIGNvbXByZXNzaW5nLCBiZWNhdXNlIHRoaXMgaGFzIGJlZW4gc2hvd24gdG8gaGF2ZSBvbmx5IGEgdmVyeSBzbGlnaHQgZWZmZWN0IG9uIGFjY3VyYWN5LCBidXQgaXQgdXNlcyB0aGUgYWNjdXJhdGUgYWxnb3JpdGhtIHdoZW4gZGVjb21wcmVzc2luZywgYmVjYXVzZSB0aGlzIGhhcyBiZWVuIHNob3duIHRvIGhhdmUgYSBsYXJnZXIgZWZmZWN0LiA8L3A+CiAKIDwvZGl2PgogPC9kaXY+Ci08YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2E3MmVjZjRlYmU2ZWI3MDJkM2M2ZjVjYTI3NDU1ZTFlYyI+PC9hPjwhLS0gZG94eXRhZzogbWVtYmVyPSJ0dXJib2pwZWcuaDo6VEpGTEFHX0JPVFRPTVVQIiByZWY9ImdhNzJlY2Y0ZWJlNmViNzAyZDNjNmY1Y2EyNzQ1NWUxZWMiIGFyZ3M9IiIgLS0+Cis8YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2E3MmVjZjRlYmU2ZWI3MDJkM2M2ZjVjYTI3NDU1ZTFlYyI+PC9hPgogPGRpdiBjbGFzcz0ibWVtaXRlbSI+CiA8ZGl2IGNsYXNzPSJtZW1wcm90byI+CiAgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgpAQCAtMjgzLDE0ICszNTgsMTMgQEAKICAgICAgICAgICA8dGQgY2xhc3M9Im1lbW5hbWUiPiNkZWZpbmUgVEpGTEFHX0JPVFRPTVVQPC90ZD4KICAgICAgICAgPC90cj4KICAgICAgIDwvdGFibGU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9Im1lbWRvYyI+Cis8L2Rpdj48ZGl2IGNsYXNzPSJtZW1kb2MiPgogCiA8cD5UaGUgdW5jb21wcmVzc2VkIHNvdXJjZS9kZXN0aW5hdGlvbiBpbWFnZSBpcyBzdG9yZWQgaW4gYm90dG9tLXVwIChXaW5kb3dzLCBPcGVuR0wpIG9yZGVyLCBub3QgdG9wLWRvd24gKFgxMSkgb3JkZXIuIDwvcD4KIAogPC9kaXY+CiA8L2Rpdj4KLTxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYWFiY2UyMzVkYjgwZDNmNjk4YjI3ZjM2Y2JkNDUzZGEyIj48L2E+PCEtLSBkb3h5dGFnOiBtZW1iZXI9InR1cmJvanBlZy5oOjpUSkZMQUdfRkFTVERDVCIgcmVmPSJnYWFiY2UyMzVkYjgwZDNmNjk4YjI3ZjM2Y2JkNDUzZGEyIiBhcmdzPSIiIC0tPgorPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdhYWJjZTIzNWRiODBkM2Y2OThiMjdmMzZjYmQ0NTNkYTIiPjwvYT4KIDxkaXYgY2xhc3M9Im1lbWl0ZW0iPgogPGRpdiBjbGFzcz0ibWVtcHJvdG8iPgogICAgICAgPHRhYmxlIGNsYXNzPSJtZW1uYW1lIj4KQEAgLTI5OCwxNSArMzcyLDE0IEBACiAgICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj4jZGVmaW5lIFRKRkxBR19GQVNURENUPC90ZD4KICAgICAgICAgPC90cj4KICAgICAgIDwvdGFibGU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9Im1lbWRvYyI+Cis8L2Rpdj48ZGl2IGNsYXNzPSJtZW1kb2MiPgogCiA8cD5Vc2UgdGhlIGZhc3Rlc3QgRENUL0lEQ1QgYWxnb3JpdGhtIGF2YWlsYWJsZSBpbiB0aGUgdW5kZXJseWluZyBjb2RlYy4gPC9wPgotPHA+VGhlIGRlZmF1bHQgaWYgdGhpcyBmbGFnIGlzIG5vdCBzcGVjaWZpZWQgaXMgaW1wbGVtZW50YXRpb24tc3BlY2lmaWMuIFRoZSBsaWJqcGVnIGltcGxlbWVudGF0aW9uLCBmb3IgZXhhbXBsZSwgdXNlcyB0aGUgZmFzdCBhbGdvcml0aG0gYnkgZGVmYXVsdCB3aGVuIGNvbXByZXNzaW5nLCBiZWNhdXNlIHRoaXMgaGFzIGJlZW4gc2hvd24gdG8gaGF2ZSBvbmx5IGEgdmVyeSBzbGlnaHQgZWZmZWN0IG9uIGFjY3VyYWN5LCBidXQgaXQgdXNlcyB0aGUgYWNjdXJhdGUgYWxnb3JpdGhtIHdoZW4gZGVjb21wcmVzc2luZywgYmVjYXVzZSB0aGlzIGhhcyBiZWVuIHNob3duIHRvIGhhdmUgYSBsYXJnZXIgZWZmZWN0LiA8L3A+Cis8cD5UaGUgZGVmYXVsdCBpZiB0aGlzIGZsYWcgaXMgbm90IHNwZWNpZmllZCBpcyBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYy4gRm9yIGV4YW1wbGUsIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBUdXJib0pQRUcgZm9yIGxpYmpwZWdbLXR1cmJvXSB1c2VzIHRoZSBmYXN0IGFsZ29yaXRobSBieSBkZWZhdWx0IHdoZW4gY29tcHJlc3NpbmcsIGJlY2F1c2UgdGhpcyBoYXMgYmVlbiBzaG93biB0byBoYXZlIG9ubHkgYSB2ZXJ5IHNsaWdodCBlZmZlY3Qgb24gYWNjdXJhY3ksIGJ1dCBpdCB1c2VzIHRoZSBhY2N1cmF0ZSBhbGdvcml0aG0gd2hlbiBkZWNvbXByZXNzaW5nLCBiZWNhdXNlIHRoaXMgaGFzIGJlZW4gc2hvd24gdG8gaGF2ZSBhIGxhcmdlciBlZmZlY3QuIDwvcD4KIAogPC9kaXY+CiA8L2Rpdj4KLTxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYTRlZTQ1MDZjODExNzdhMDZmNzdlMjUwNGEyMmVmZDJkIj48L2E+PCEtLSBkb3h5dGFnOiBtZW1iZXI9InR1cmJvanBlZy5oOjpUSkZMQUdfRkFTVFVQU0FNUExFIiByZWY9ImdhNGVlNDUwNmM4MTE3N2EwNmY3N2UyNTA0YTIyZWZkMmQiIGFyZ3M9IiIgLS0+Cis8YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2E0ZWU0NTA2YzgxMTc3YTA2Zjc3ZTI1MDRhMjJlZmQyZCI+PC9hPgogPGRpdiBjbGFzcz0ibWVtaXRlbSI+CiA8ZGl2IGNsYXNzPSJtZW1wcm90byI+CiAgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgpAQCAtMzE0LDE1ICszODcsMTQgQEAKICAgICAgICAgICA8dGQgY2xhc3M9Im1lbW5hbWUiPiNkZWZpbmUgVEpGTEFHX0ZBU1RVUFNBTVBMRTwvdGQ+CiAgICAgICAgIDwvdHI+CiAgICAgICA8L3RhYmxlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJtZW1kb2MiPgorPC9kaXY+PGRpdiBjbGFzcz0ibWVtZG9jIj4KIAotPHA+V2hlbiBkZWNvbXByZXNzaW5nLCB1c2UgdGhlIGZhc3Rlc3QgY2hyb21pbmFuY2UgdXBzYW1wbGluZyBhbGdvcml0aG0gYXZhaWxhYmxlIGluIHRoZSB1bmRlcmx5aW5nIGNvZGVjLiA8L3A+Cis8cD5XaGVuIGRlY29tcHJlc3NpbmcgYW4gaW1hZ2UgdGhhdCB3YXMgY29tcHJlc3NlZCB1c2luZyBjaHJvbWluYW5jZSBzdWJzYW1wbGluZywgdXNlIHRoZSBmYXN0ZXN0IGNocm9taW5hbmNlIHVwc2FtcGxpbmcgYWxnb3JpdGhtIGF2YWlsYWJsZSBpbiB0aGUgdW5kZXJseWluZyBjb2RlYy4gPC9wPgogPHA+VGhlIGRlZmF1bHQgaXMgdG8gdXNlIHNtb290aCB1cHNhbXBsaW5nLCB3aGljaCBjcmVhdGVzIGEgc21vb3RoIHRyYW5zaXRpb24gYmV0d2VlbiBuZWlnaGJvcmluZyBjaHJvbWluYW5jZSBjb21wb25lbnRzIGluIG9yZGVyIHRvIHJlZHVjZSB1cHNhbXBsaW5nIGFydGlmYWN0cyBpbiB0aGUgZGVjb21wcmVzc2VkIGltYWdlLiA8L3A+CiAKIDwvZGl2PgogPC9kaXY+Ci08YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2E0ZTg3MmYxMWM4MmYyNDE3MzZmYTgyOTc5MjBmMjRlNSI+PC9hPjwhLS0gZG94eXRhZzogbWVtYmVyPSJ0dXJib2pwZWcuaDo6VEpGTEFHX0ZPUkNFTU1YIiByZWY9ImdhNGU4NzJmMTFjODJmMjQxNzM2ZmE4Mjk3OTIwZjI0ZTUiIGFyZ3M9IiIgLS0+Cis8YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2E0ZTg3MmYxMWM4MmYyNDE3MzZmYTgyOTc5MjBmMjRlNSI+PC9hPgogPGRpdiBjbGFzcz0ibWVtaXRlbSI+CiA8ZGl2IGNsYXNzPSJtZW1wcm90byI+CiAgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgpAQCAtMzMwLDE0ICs0MDIsMTMgQEAKICAgICAgICAgICA8dGQgY2xhc3M9Im1lbW5hbWUiPiNkZWZpbmUgVEpGTEFHX0ZPUkNFTU1YPC90ZD4KICAgICAgICAgPC90cj4KICAgICAgIDwvdGFibGU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9Im1lbWRvYyI+Cis8L2Rpdj48ZGl2IGNsYXNzPSJtZW1kb2MiPgogCiA8cD5UdXJuIG9mZiBDUFUgYXV0by1kZXRlY3Rpb24gYW5kIGZvcmNlIFR1cmJvSlBFRyB0byB1c2UgTU1YIGNvZGUgKGlmIHRoZSB1bmRlcmx5aW5nIGNvZGVjIHN1cHBvcnRzIGl0LikgPC9wPgogCiA8L2Rpdj4KIDwvZGl2PgotPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdhZTE3ZTYzMTg5ZThjZDczMGZlZWQzZWZiZDI0NTRmMzgiPjwvYT48IS0tIGRveHl0YWc6IG1lbWJlcj0idHVyYm9qcGVnLmg6OlRKRkxBR19GT1JDRVNTRSIgcmVmPSJnYWUxN2U2MzE4OWU4Y2Q3MzBmZWVkM2VmYmQyNDU0ZjM4IiBhcmdzPSIiIC0tPgorPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdhZTE3ZTYzMTg5ZThjZDczMGZlZWQzZWZiZDI0NTRmMzgiPjwvYT4KIDxkaXYgY2xhc3M9Im1lbWl0ZW0iPgogPGRpdiBjbGFzcz0ibWVtcHJvdG8iPgogICAgICAgPHRhYmxlIGNsYXNzPSJtZW1uYW1lIj4KQEAgLTM0NSwxNCArNDE2LDEzIEBACiAgICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj4jZGVmaW5lIFRKRkxBR19GT1JDRVNTRTwvdGQ+CiAgICAgICAgIDwvdHI+CiAgICAgICA8L3RhYmxlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJtZW1kb2MiPgorPC9kaXY+PGRpdiBjbGFzcz0ibWVtZG9jIj4KIAogPHA+VHVybiBvZmYgQ1BVIGF1dG8tZGV0ZWN0aW9uIGFuZCBmb3JjZSBUdXJib0pQRUcgdG8gdXNlIFNTRSBjb2RlIChpZiB0aGUgdW5kZXJseWluZyBjb2RlYyBzdXBwb3J0cyBpdC4pIDwvcD4KIAogPC9kaXY+CiA8L2Rpdj4KLTxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYThjZjBiY2E5NmVhNGQ0NzI1NjNmNGIwZWJmOGM0OGU3Ij48L2E+PCEtLSBkb3h5dGFnOiBtZW1iZXI9InR1cmJvanBlZy5oOjpUSkZMQUdfRk9SQ0VTU0UyIiByZWY9ImdhOGNmMGJjYTk2ZWE0ZDQ3MjU2M2Y0YjBlYmY4YzQ4ZTciIGFyZ3M9IiIgLS0+Cis8YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2E4Y2YwYmNhOTZlYTRkNDcyNTYzZjRiMGViZjhjNDhlNyI+PC9hPgogPGRpdiBjbGFzcz0ibWVtaXRlbSI+CiA8ZGl2IGNsYXNzPSJtZW1wcm90byI+CiAgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgpAQCAtMzYwLDE0ICs0MzAsMTMgQEAKICAgICAgICAgICA8dGQgY2xhc3M9Im1lbW5hbWUiPiNkZWZpbmUgVEpGTEFHX0ZPUkNFU1NFMjwvdGQ+CiAgICAgICAgIDwvdHI+CiAgICAgICA8L3RhYmxlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJtZW1kb2MiPgorPC9kaXY+PGRpdiBjbGFzcz0ibWVtZG9jIj4KIAogPHA+VHVybiBvZmYgQ1BVIGF1dG8tZGV0ZWN0aW9uIGFuZCBmb3JjZSBUdXJib0pQRUcgdG8gdXNlIFNTRTIgY29kZSAoaWYgdGhlIHVuZGVybHlpbmcgY29kZWMgc3VwcG9ydHMgaXQuKSA8L3A+CiAKIDwvZGl2PgogPC9kaXY+Ci08YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2FmOWQ0OTA2NjYzMzQwNGRhNDM4NmQ3MDgyMDI5NWRkMiI+PC9hPjwhLS0gZG94eXRhZzogbWVtYmVyPSJ0dXJib2pwZWcuaDo6VEpGTEFHX0ZPUkNFU1NFMyIgcmVmPSJnYWY5ZDQ5MDY2NjMzNDA0ZGE0Mzg2ZDcwODIwMjk1ZGQyIiBhcmdzPSIiIC0tPgorPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdhZjlkNDkwNjY2MzM0MDRkYTQzODZkNzA4MjAyOTVkZDIiPjwvYT4KIDxkaXYgY2xhc3M9Im1lbWl0ZW0iPgogPGRpdiBjbGFzcz0ibWVtcHJvdG8iPgogICAgICAgPHRhYmxlIGNsYXNzPSJtZW1uYW1lIj4KQEAgLTM3NSwxNCArNDQ0LDEzIEBACiAgICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj4jZGVmaW5lIFRKRkxBR19GT1JDRVNTRTM8L3RkPgogICAgICAgICA8L3RyPgogICAgICAgPC90YWJsZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0ibWVtZG9jIj4KKzwvZGl2PjxkaXYgY2xhc3M9Im1lbWRvYyI+CiAKIDxwPlR1cm4gb2ZmIENQVSBhdXRvLWRldGVjdGlvbiBhbmQgZm9yY2UgVHVyYm9KUEVHIHRvIHVzZSBTU0UzIGNvZGUgKGlmIHRoZSB1bmRlcmx5aW5nIGNvZGVjIHN1cHBvcnRzIGl0LikgPC9wPgogCiA8L2Rpdj4KIDwvZGl2PgotPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdhODgwOGQ0MDNjNjhiNjJhYWE1OGE0YzFlNThlOTg5NjMiPjwvYT48IS0tIGRveHl0YWc6IG1lbWJlcj0idHVyYm9qcGVnLmg6OlRKRkxBR19OT1JFQUxMT0MiIHJlZj0iZ2E4ODA4ZDQwM2M2OGI2MmFhYTU4YTRjMWU1OGU5ODk2MyIgYXJncz0iIiAtLT4KKzxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYTg4MDhkNDAzYzY4YjYyYWFhNThhNGMxZTU4ZTk4OTYzIj48L2E+CiA8ZGl2IGNsYXNzPSJtZW1pdGVtIj4KIDxkaXYgY2xhc3M9Im1lbXByb3RvIj4KICAgICAgIDx0YWJsZSBjbGFzcz0ibWVtbmFtZSI+CkBAIC0zOTAsMTUgKzQ1OCwxNCBAQAogICAgICAgICAgIDx0ZCBjbGFzcz0ibWVtbmFtZSI+I2RlZmluZSBUSkZMQUdfTk9SRUFMTE9DPC90ZD4KICAgICAgICAgPC90cj4KICAgICAgIDwvdGFibGU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9Im1lbWRvYyI+Cis8L2Rpdj48ZGl2IGNsYXNzPSJtZW1kb2MiPgogCiA8cD5EaXNhYmxlIGJ1ZmZlciAocmUpYWxsb2NhdGlvbi4gPC9wPgogPHA+SWYgcGFzc2VkIHRvIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FiYTYyYjdhOThmOTYwODM5YjU4ODU3OTg5ODQ5NWNmMiIgdGl0bGU9IkNvbXByZXNzIGFuIFJHQiBvciBncmF5c2NhbGUgaW1hZ2UgaW50byBhIEpQRUcgaW1hZ2UuIj50akNvbXByZXNzMigpPC9hPiBvciA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhZTQwMzE5M2NlYjRhYWZiN2UwZjU2YWI1ODdiNDg2MTYiIHRpdGxlPSJMb3NzbGVzc2x5IHRyYW5zZm9ybSBhIEpQRUcgaW1hZ2UgaW50byBhbm90aGVyIEpQRUcgaW1hZ2UuIj50alRyYW5zZm9ybSgpPC9hPiwgdGhpcyBmbGFnIHdpbGwgY2F1c2UgdGhvc2UgZnVuY3Rpb25zIHRvIGdlbmVyYXRlIGFuIGVycm9yIGlmIHRoZSBKUEVHIGltYWdlIGJ1ZmZlciBpcyBpbnZhbGlkIG9yIHRvbyBzbWFsbCByYXRoZXIgdGhhbiBhdHRlbXB0aW5nIHRvIGFsbG9jYXRlIG9yIHJlYWxsb2NhdGUgdGhhdCBidWZmZXIuIFRoaXMgcmVwcm9kdWNlcyB0aGUgYmVoYXZpb3Igb2YgZWFybGllciB2ZXJzaW9ucyBvZiBUdXJib0pQRUcuIDwvcD4KIAogPC9kaXY+CiA8L2Rpdj4KLTxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYTBhYmE5NTU0NzMzMTVlNDA1Mjk1ZDk3OGYwYzE2NTExIj48L2E+PCEtLSBkb3h5dGFnOiBtZW1iZXI9InR1cmJvanBlZy5oOjpUSlBBRCIgcmVmPSJnYTBhYmE5NTU0NzMzMTVlNDA1Mjk1ZDk3OGYwYzE2NTExIiBhcmdzPSIod2lkdGgpIiAtLT4KKzxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYTBhYmE5NTU0NzMzMTVlNDA1Mjk1ZDk3OGYwYzE2NTExIj48L2E+CiA8ZGl2IGNsYXNzPSJtZW1pdGVtIj4KIDxkaXYgY2xhc3M9Im1lbXByb3RvIj4KICAgICAgIDx0YWJsZSBjbGFzcz0ibWVtbmFtZSI+CkBAIC00MTAsMTQgKzQ3NywxMyBAQAogICAgICAgICAgIDx0ZD48L3RkPgogICAgICAgICA8L3RyPgogICAgICAgPC90YWJsZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0ibWVtZG9jIj4KKzwvZGl2PjxkaXYgY2xhc3M9Im1lbWRvYyI+CiAKIDxwPlBhZCB0aGUgZ2l2ZW4gd2lkdGggdG8gdGhlIG5lYXJlc3QgMzItYml0IGJvdW5kYXJ5LiA8L3A+CiAKIDwvZGl2PgogPC9kaXY+Ci08YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2E4NDg3OGJiNjU0MDQyMDQ3NDNhYTE4Y2FjMDI3ODFkZiI+PC9hPjwhLS0gZG94eXRhZzogbWVtYmVyPSJ0dXJib2pwZWcuaDo6VEpTQ0FMRUQiIHJlZj0iZ2E4NDg3OGJiNjU0MDQyMDQ3NDNhYTE4Y2FjMDI3ODFkZiIgYXJncz0iKGRpbWVuc2lvbiwgc2NhbGluZ0ZhY3RvcikiIC0tPgorPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdhODQ4NzhiYjY1NDA0MjA0NzQzYWExOGNhYzAyNzgxZGYiPjwvYT4KIDxkaXYgY2xhc3M9Im1lbWl0ZW0iPgogPGRpdiBjbGFzcz0ibWVtcHJvdG8iPgogICAgICAgPHRhYmxlIGNsYXNzPSJtZW1uYW1lIj4KQEAgLTQzOSwxNSArNTA1LDE0IEBACiAgICAgICAgICAgPHRkPjwvdGQ+PHRkPjwvdGQ+CiAgICAgICAgIDwvdHI+CiAgICAgICA8L3RhYmxlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJtZW1kb2MiPgorPC9kaXY+PGRpdiBjbGFzcz0ibWVtZG9jIj4KIAogPHA+Q29tcHV0ZSB0aGUgc2NhbGVkIHZhbHVlIG9mIDxjb2RlPmRpbWVuc2lvbjwvY29kZT4gdXNpbmcgdGhlIGdpdmVuIHNjYWxpbmcgZmFjdG9yLiA8L3A+CiA8cD5UaGlzIG1hY3JvIHBlcmZvcm1zIHRoZSBpbnRlZ2VyIGVxdWl2YWxlbnQgb2YgPGNvZGU+Y2VpbChkaW1lbnNpb24gKiBzY2FsaW5nRmFjdG9yKTwvY29kZT4uIDwvcD4KIAogPC9kaXY+CiA8L2Rpdj4KLTxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYTljNzcxYTc1N2ZjMTI5NGFkZDYxMTkwNmI4OWFiMmQyIj48L2E+PCEtLSBkb3h5dGFnOiBtZW1iZXI9InR1cmJvanBlZy5oOjpUSlhPUFRfQ1JPUCIgcmVmPSJnYTljNzcxYTc1N2ZjMTI5NGFkZDYxMTkwNmI4OWFiMmQyIiBhcmdzPSIiIC0tPgorPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdhOWM3NzFhNzU3ZmMxMjk0YWRkNjExOTA2Yjg5YWIyZDIiPjwvYT4KIDxkaXYgY2xhc3M9Im1lbWl0ZW0iPgogPGRpdiBjbGFzcz0ibWVtcHJvdG8iPgogICAgICAgPHRhYmxlIGNsYXNzPSJtZW1uYW1lIj4KQEAgLTQ1NSwxNSArNTIwLDE0IEBACiAgICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj4jZGVmaW5lIFRKWE9QVF9DUk9QPC90ZD4KICAgICAgICAgPC90cj4KICAgICAgIDwvdGFibGU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9Im1lbWRvYyI+Cis8L2Rpdj48ZGl2IGNsYXNzPSJtZW1kb2MiPgogCiA8cD5UaGlzIG9wdGlvbiB3aWxsIGVuYWJsZSBsb3NzbGVzcyBjcm9wcGluZy4gPC9wPgogPHA+U2VlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FlNDAzMTkzY2ViNGFhZmI3ZTBmNTZhYjU4N2I0ODYxNiIgdGl0bGU9Ikxvc3NsZXNzbHkgdHJhbnNmb3JtIGEgSlBFRyBpbWFnZSBpbnRvIGFub3RoZXIgSlBFRyBpbWFnZS4iPnRqVHJhbnNmb3JtKCk8L2E+IGZvciBtb3JlIGluZm9ybWF0aW9uLiA8L3A+CiAKIDwvZGl2PgogPC9kaXY+Ci08YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2EzYWNlZTdiNDhhZGUxYjk5ZTU1ODg3MzYwMDdjMjU4OSI+PC9hPjwhLS0gZG94eXRhZzogbWVtYmVyPSJ0dXJib2pwZWcuaDo6VEpYT1BUX0dSQVkiIHJlZj0iZ2EzYWNlZTdiNDhhZGUxYjk5ZTU1ODg3MzYwMDdjMjU4OSIgYXJncz0iIiAtLT4KKzxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYTNhY2VlN2I0OGFkZTFiOTllNTU4ODczNjAwN2MyNTg5Ij48L2E+CiA8ZGl2IGNsYXNzPSJtZW1pdGVtIj4KIDxkaXYgY2xhc3M9Im1lbXByb3RvIj4KICAgICAgIDx0YWJsZSBjbGFzcz0ibWVtbmFtZSI+CkBAIC00NzEsMTQgKzUzNSwxMyBAQAogICAgICAgICAgIDx0ZCBjbGFzcz0ibWVtbmFtZSI+I2RlZmluZSBUSlhPUFRfR1JBWTwvdGQ+CiAgICAgICAgIDwvdHI+CiAgICAgICA8L3RhYmxlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJtZW1kb2MiPgorPC9kaXY+PGRpdiBjbGFzcz0ibWVtZG9jIj4KIAogPHA+VGhpcyBvcHRpb24gd2lsbCBkaXNjYXJkIHRoZSBjb2xvciBkYXRhIGluIHRoZSBpbnB1dCBpbWFnZSBhbmQgcHJvZHVjZSBhIGdyYXlzY2FsZSBvdXRwdXQgaW1hZ2UuIDwvcD4KIAogPC9kaXY+CiA8L2Rpdj4KLTxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYWZiZjk5MmJiZjZlMDA2NzA1ODg2MzMzNzAzZmZhYjMxIj48L2E+PCEtLSBkb3h5dGFnOiBtZW1iZXI9InR1cmJvanBlZy5oOjpUSlhPUFRfTk9PVVRQVVQiIHJlZj0iZ2FmYmY5OTJiYmY2ZTAwNjcwNTg4NjMzMzcwM2ZmYWIzMSIgYXJncz0iIiAtLT4KKzxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYWZiZjk5MmJiZjZlMDA2NzA1ODg2MzMzNzAzZmZhYjMxIj48L2E+CiA8ZGl2IGNsYXNzPSJtZW1pdGVtIj4KIDxkaXYgY2xhc3M9Im1lbXByb3RvIj4KICAgICAgIDx0YWJsZSBjbGFzcz0ibWVtbmFtZSI+CkBAIC00ODYsMTQgKzU0OSwxMyBAQAogICAgICAgICAgIDx0ZCBjbGFzcz0ibWVtbmFtZSI+I2RlZmluZSBUSlhPUFRfTk9PVVRQVVQ8L3RkPgogICAgICAgICA8L3RyPgogICAgICAgPC90YWJsZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0ibWVtZG9jIj4KKzwvZGl2PjxkaXYgY2xhc3M9Im1lbWRvYyI+CiAKIDxwPlRoaXMgb3B0aW9uIHdpbGwgcHJldmVudCA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhZTQwMzE5M2NlYjRhYWZiN2UwZjU2YWI1ODdiNDg2MTYiIHRpdGxlPSJMb3NzbGVzc2x5IHRyYW5zZm9ybSBhIEpQRUcgaW1hZ2UgaW50byBhbm90aGVyIEpQRUcgaW1hZ2UuIj50alRyYW5zZm9ybSgpPC9hPiBmcm9tIG91dHB1dHRpbmcgYSBKUEVHIGltYWdlIGZvciB0aGlzIHBhcnRpY3VsYXIgdHJhbnNmb3JtICh0aGlzIGNhbiBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYSBjdXN0b20gZmlsdGVyIHRvIGNhcHR1cmUgdGhlIHRyYW5zZm9ybWVkIERDVCBjb2VmZmljaWVudHMgd2l0aG91dCB0cmFuc2NvZGluZyB0aGVtLikgPC9wPgogCiA8L2Rpdj4KIDwvZGl2PgotPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdhNTBlMDNjYjVlZDExNTMzMGUyMTI0MTc0Mjk2MDBiMDAiPjwvYT48IS0tIGRveHl0YWc6IG1lbWJlcj0idHVyYm9qcGVnLmg6OlRKWE9QVF9QRVJGRUNUIiByZWY9ImdhNTBlMDNjYjVlZDExNTMzMGUyMTI0MTc0Mjk2MDBiMDAiIGFyZ3M9IiIgLS0+Cis8YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2E1MGUwM2NiNWVkMTE1MzMwZTIxMjQxNzQyOTYwMGIwMCI+PC9hPgogPGRpdiBjbGFzcz0ibWVtaXRlbSI+CiA8ZGl2IGNsYXNzPSJtZW1wcm90byI+CiAgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgpAQCAtNTAxLDE1ICs1NjMsMTQgQEAKICAgICAgICAgICA8dGQgY2xhc3M9Im1lbW5hbWUiPiNkZWZpbmUgVEpYT1BUX1BFUkZFQ1Q8L3RkPgogICAgICAgICA8L3RyPgogICAgICAgPC90YWJsZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0ibWVtZG9jIj4KKzwvZGl2PjxkaXYgY2xhc3M9Im1lbWRvYyI+CiAKIDxwPlRoaXMgb3B0aW9uIHdpbGwgY2F1c2UgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWU0MDMxOTNjZWI0YWFmYjdlMGY1NmFiNTg3YjQ4NjE2IiB0aXRsZT0iTG9zc2xlc3NseSB0cmFuc2Zvcm0gYSBKUEVHIGltYWdlIGludG8gYW5vdGhlciBKUEVHIGltYWdlLiI+dGpUcmFuc2Zvcm0oKTwvYT4gdG8gcmV0dXJuIGFuIGVycm9yIGlmIHRoZSB0cmFuc2Zvcm0gaXMgbm90IHBlcmZlY3QuIDwvcD4KIDxwPkxvc3NsZXNzIHRyYW5zZm9ybXMgb3BlcmF0ZSBvbiBNQ1UgYmxvY2tzLCB3aG9zZSBzaXplIGRlcGVuZHMgb24gdGhlIGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nIHVzZWQgKHNlZSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhOWU2MWU3Y2Q0N2ExNWExNzMyODNiYTk0ZTc4MTMwOGMiIHRpdGxlPSJNQ1UgYmxvY2sgd2lkdGggKGluIHBpeGVscykgZm9yIGEgZ2l2ZW4gbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcuIj50ak1DVVdpZHRoPC9hPiBhbmQgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWJkMjQ3YmI5ZmVjYjM5M2VjYTU3MzY2ZmViODMyN2JmIiB0aXRsZT0iTUNVIGJsb2NrIGhlaWdodCAoaW4gcGl4ZWxzKSBmb3IgYSBnaXZlbiBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZy4iPnRqTUNVSGVpZ2h0PC9hPi4pIElmIHRoZSBpbWFnZSdzIHdpZHRoIG9yIGhlaWdodCBpcyBub3QgZXZlbmx5IGRpdmlzaWJsZSBieSB0aGUgTUNVIGJsb2NrIHNpemUsIHRoZW4gdGhlcmUgd2lsbCBiZSBwYXJ0aWFsIE1DVSBibG9ja3Mgb24gdGhlIHJpZ2h0IGFuZC9vciBib3R0b20gZWRnZXMuIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBtb3ZlIHRoZXNlIHBhcnRpYWwgTUNVIGJsb2NrcyB0byB0aGUgdG9wIG9yIGxlZnQgb2YgdGhlIGltYWdlLCBzbyBhbnkgdHJhbnNmb3JtIHRoYXQgd291bGQgcmVxdWlyZSB0aGF0IGlzICJpbXBlcmZlY3QuIiBJZiB0aGlzIG9wdGlvbiBpcyBub3Qgc3BlY2lmaWVkLCB0aGVuIGFueSBwYXJ0aWFsIE1DVSBibG9ja3MgdGhhdCBjYW5ub3QgYmUgdHJhbnNmb3JtZWQgd2lsbCBiZSBsZWZ0IGluIHBsYWNlLCB3aGljaCB3aWxsIGNyZWF0ZSBvZGQtbG9va2luZyBzdHJpcHMgb24gdGhlIHJpZ2h0IG9yIGJvdHRvbSBlZGdlIG9mIHRoZSBpbWFnZS4gPC9wPgogCiA8L2Rpdj4KIDwvZGl2PgotPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdhMzE5ODI2YjdlYjE1ODNjMDU5NWJiZTdiOTU0Mjg3MDkiPjwvYT48IS0tIGRveHl0YWc6IG1lbWJlcj0idHVyYm9qcGVnLmg6OlRKWE9QVF9UUklNIiByZWY9ImdhMzE5ODI2YjdlYjE1ODNjMDU5NWJiZTdiOTU0Mjg3MDkiIGFyZ3M9IiIgLS0+Cis8YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2EzMTk4MjZiN2ViMTU4M2MwNTk1YmJlN2I5NTQyODcwOSI+PC9hPgogPGRpdiBjbGFzcz0ibWVtaXRlbSI+CiA8ZGl2IGNsYXNzPSJtZW1wcm90byI+CiAgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgpAQCAtNTE3LDE1ICs1NzgsMTQgQEAKICAgICAgICAgICA8dGQgY2xhc3M9Im1lbW5hbWUiPiNkZWZpbmUgVEpYT1BUX1RSSU08L3RkPgogICAgICAgICA8L3RyPgogICAgICAgPC90YWJsZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0ibWVtZG9jIj4KKzwvZGl2PjxkaXYgY2xhc3M9Im1lbWRvYyI+CiAKIDxwPlRoaXMgb3B0aW9uIHdpbGwgY2F1c2UgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWU0MDMxOTNjZWI0YWFmYjdlMGY1NmFiNTg3YjQ4NjE2IiB0aXRsZT0iTG9zc2xlc3NseSB0cmFuc2Zvcm0gYSBKUEVHIGltYWdlIGludG8gYW5vdGhlciBKUEVHIGltYWdlLiI+dGpUcmFuc2Zvcm0oKTwvYT4gdG8gZGlzY2FyZCBhbnkgcGFydGlhbCBNQ1UgYmxvY2tzIHRoYXQgY2Fubm90IGJlIHRyYW5zZm9ybWVkLiA8L3A+CiAKIDwvZGl2PgogPC9kaXY+Ci08aHIvPjxoMj5UeXBlZGVmIERvY3VtZW50YXRpb248L2gyPgotPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdhNzU4ZDI2MzRlY2I0OTQ5ZGU3ODE1Y2JhNjIxZjU3NjMiPjwvYT48IS0tIGRveHl0YWc6IG1lbWJlcj0idHVyYm9qcGVnLmg6OnRqaGFuZGxlIiByZWY9ImdhNzU4ZDI2MzRlY2I0OTQ5ZGU3ODE1Y2JhNjIxZjU3NjMiIGFyZ3M9IiIgLS0+Cis8aDIgY2xhc3M9Imdyb3VwaGVhZGVyIj5UeXBlZGVmIERvY3VtZW50YXRpb248L2gyPgorPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdhNzU4ZDI2MzRlY2I0OTQ5ZGU3ODE1Y2JhNjIxZjU3NjMiPjwvYT4KIDxkaXYgY2xhc3M9Im1lbWl0ZW0iPgogPGRpdiBjbGFzcz0ibWVtcHJvdG8iPgogICAgICAgPHRhYmxlIGNsYXNzPSJtZW1uYW1lIj4KQEAgLTUzMywxNCArNTkzLDEzIEBACiAgICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj50eXBlZGVmIHZvaWQqIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E3NThkMjYzNGVjYjQ5NDlkZTc4MTVjYmE2MjFmNTc2MyI+dGpoYW5kbGU8L2E+PC90ZD4KICAgICAgICAgPC90cj4KICAgICAgIDwvdGFibGU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9Im1lbWRvYyI+Cis8L2Rpdj48ZGl2IGNsYXNzPSJtZW1kb2MiPgogCiA8cD5UdXJib0pQRUcgaW5zdGFuY2UgaGFuZGxlLiA8L3A+CiAKIDwvZGl2PgogPC9kaXY+Ci08YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2FhMjlmMzE4OWM0MWJlMTJlYzVkZWU3Y2FlYzMxOGEzMSI+PC9hPjwhLS0gZG94eXRhZzogbWVtYmVyPSJ0dXJib2pwZWcuaDo6dGp0cmFuc2Zvcm0iIHJlZj0iZ2FhMjlmMzE4OWM0MWJlMTJlYzVkZWU3Y2FlYzMxOGEzMSIgYXJncz0iIiAtLT4KKzxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYWEyOWYzMTg5YzQxYmUxMmVjNWRlZTdjYWVjMzE4YTMxIj48L2E+CiA8ZGl2IGNsYXNzPSJtZW1pdGVtIj4KIDxkaXYgY2xhc3M9Im1lbXByb3RvIj4KICAgICAgIDx0YWJsZSBjbGFzcz0ibWVtbmFtZSI+CkBAIC01NDgsMTUgKzYwNywxNCBAQAogICAgICAgICAgIDx0ZCBjbGFzcz0ibWVtbmFtZSI+dHlwZWRlZiBzdHJ1Y3QgPGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anRyYW5zZm9ybS5odG1sIj50anRyYW5zZm9ybTwvYT4gIDxhIGNsYXNzPSJlbCIgaHJlZj0ic3RydWN0dGp0cmFuc2Zvcm0uaHRtbCI+dGp0cmFuc2Zvcm08L2E+PC90ZD4KICAgICAgICAgPC90cj4KICAgICAgIDwvdGFibGU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9Im1lbWRvYyI+Cis8L2Rpdj48ZGl2IGNsYXNzPSJtZW1kb2MiPgogCiA8cD5Mb3NzbGVzcyB0cmFuc2Zvcm0uIDwvcD4KIAogPC9kaXY+CiA8L2Rpdj4KLTxoci8+PGgyPkVudW1lcmF0aW9uIFR5cGUgRG9jdW1lbnRhdGlvbjwvaDI+Ci08YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYSI+PC9hPjwhLS0gZG94eXRhZzogbWVtYmVyPSJ0dXJib2pwZWcuaDo6VEpQRiIgcmVmPSJnYWM5MTYxNDRlMjZjMzgxN2FjNTE0ZTY0YWU1ZDEyZTJhIiBhcmdzPSIiIC0tPgorPGgyIGNsYXNzPSJncm91cGhlYWRlciI+RW51bWVyYXRpb24gVHlwZSBEb2N1bWVudGF0aW9uPC9oMj4KKzxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYWM5MTYxNDRlMjZjMzgxN2FjNTE0ZTY0YWU1ZDEyZTJhIj48L2E+CiA8ZGl2IGNsYXNzPSJtZW1pdGVtIj4KIDxkaXYgY2xhc3M9Im1lbXByb3RvIj4KICAgICAgIDx0YWJsZSBjbGFzcz0ibWVtbmFtZSI+CkBAIC01NjQsNjIgKzYyMiw1OSBAQAogICAgICAgICAgIDx0ZCBjbGFzcz0ibWVtbmFtZSI+ZW51bSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmEiPlRKUEY8L2E+PC90ZD4KICAgICAgICAgPC90cj4KICAgICAgIDwvdGFibGU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9Im1lbWRvYyI+Cis8L2Rpdj48ZGl2IGNsYXNzPSJtZW1kb2MiPgogCiA8cD5QaXhlbCBmb3JtYXRzLiA8L3A+Ci08ZGw+PGR0PjxiPkVudW1lcmF0b3I6IDwvYj48L2R0PjxkZD48dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMiIgY2VsbHBhZGRpbmc9IjAiPgotPHRyPjx0ZCB2YWxpZ249InRvcCI+PGVtPjxhIGNsYXNzPSJhbmNob3IiIGlkPSJnZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYWE3Y2U5MzIzMGJmZjQ0OTUxOGNlMzg3YzE3ZTZlZDM3YyI+PC9hPjwhLS0gZG94eXRhZzogbWVtYmVyPSJUSlBGX1JHQiIgcmVmPSJnZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYWE3Y2U5MzIzMGJmZjQ0OTUxOGNlMzg3YzE3ZTZlZDM3YyIgYXJncz0iIiAtLT5USlBGX1JHQjwvZW0+Jm5ic3A7PC90ZD48dGQ+Cis8dGFibGUgY2xhc3M9ImZpZWxkdGFibGUiPgorPHRyPjx0aCBjb2xzcGFuPSIyIj5FbnVtZXJhdG9yPC90aD48L3RyPjx0cj48dGQgY2xhc3M9ImZpZWxkbmFtZSI+PGVtPjxhIGNsYXNzPSJhbmNob3IiIGlkPSJnZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYWE3Y2U5MzIzMGJmZjQ0OTUxOGNlMzg3YzE3ZTZlZDM3YyI+PC9hPlRKUEZfUkdCPC9lbT4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0iZmllbGRkb2MiPgogPHA+UkdCIHBpeGVsIGZvcm1hdC4gPC9wPgogPHA+VGhlIHJlZCwgZ3JlZW4sIGFuZCBibHVlIGNvbXBvbmVudHMgaW4gdGhlIGltYWdlIGFyZSBzdG9yZWQgaW4gMy1ieXRlIHBpeGVscyBpbiB0aGUgb3JkZXIgUiwgRywgQiBmcm9tIGxvd2VzdCB0byBoaWdoZXN0IGJ5dGUgYWRkcmVzcyB3aXRoaW4gZWFjaCBwaXhlbC4gPC9wPgogPC90ZD48L3RyPgotPHRyPjx0ZCB2YWxpZ249InRvcCI+PGVtPjxhIGNsYXNzPSJhbmNob3IiIGlkPSJnZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYWFiMTA2MjQ0MzdmYjhlZjQ5NWEwYjE1M2U2NTc0OTgzOSI+PC9hPjwhLS0gZG94eXRhZzogbWVtYmVyPSJUSlBGX0JHUiIgcmVmPSJnZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYWFiMTA2MjQ0MzdmYjhlZjQ5NWEwYjE1M2U2NTc0OTgzOSIgYXJncz0iIiAtLT5USlBGX0JHUjwvZW0+Jm5ic3A7PC90ZD48dGQ+Cis8dHI+PHRkIGNsYXNzPSJmaWVsZG5hbWUiPjxlbT48YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2dhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmFhYjEwNjI0NDM3ZmI4ZWY0OTVhMGIxNTNlNjU3NDk4MzkiPjwvYT5USlBGX0JHUjwvZW0+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ImZpZWxkZG9jIj4KIDxwPkJHUiBwaXhlbCBmb3JtYXQuIDwvcD4KIDxwPlRoZSByZWQsIGdyZWVuLCBhbmQgYmx1ZSBjb21wb25lbnRzIGluIHRoZSBpbWFnZSBhcmUgc3RvcmVkIGluIDMtYnl0ZSBwaXhlbHMgaW4gdGhlIG9yZGVyIEIsIEcsIFIgZnJvbSBsb3dlc3QgdG8gaGlnaGVzdCBieXRlIGFkZHJlc3Mgd2l0aGluIGVhY2ggcGl4ZWwuIDwvcD4KIDwvdGQ+PC90cj4KLTx0cj48dGQgdmFsaWduPSJ0b3AiPjxlbT48YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2dhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmFhODM5NzNiZWJiN2UyZGM2ZmE4YmFlODlmZjNmNDJlMDEiPjwvYT48IS0tIGRveHl0YWc6IG1lbWJlcj0iVEpQRl9SR0JYIiByZWY9ImdnYWM5MTYxNDRlMjZjMzgxN2FjNTE0ZTY0YWU1ZDEyZTJhYTgzOTczYmViYjdlMmRjNmZhOGJhZTg5ZmYzZjQyZTAxIiBhcmdzPSIiIC0tPlRKUEZfUkdCWDwvZW0+Jm5ic3A7PC90ZD48dGQ+Cis8dHI+PHRkIGNsYXNzPSJmaWVsZG5hbWUiPjxlbT48YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2dhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmFhODM5NzNiZWJiN2UyZGM2ZmE4YmFlODlmZjNmNDJlMDEiPjwvYT5USlBGX1JHQlg8L2VtPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJmaWVsZGRvYyI+CiA8cD5SR0JYIHBpeGVsIGZvcm1hdC4gPC9wPgogPHA+VGhlIHJlZCwgZ3JlZW4sIGFuZCBibHVlIGNvbXBvbmVudHMgaW4gdGhlIGltYWdlIGFyZSBzdG9yZWQgaW4gNC1ieXRlIHBpeGVscyBpbiB0aGUgb3JkZXIgUiwgRywgQiBmcm9tIGxvd2VzdCB0byBoaWdoZXN0IGJ5dGUgYWRkcmVzcyB3aXRoaW4gZWFjaCBwaXhlbC4gVGhlIFggY29tcG9uZW50IGlzIGlnbm9yZWQgd2hlbiBjb21wcmVzc2luZyBhbmQgdW5kZWZpbmVkIHdoZW4gZGVjb21wcmVzc2luZy4gPC9wPgogPC90ZD48L3RyPgotPHRyPjx0ZCB2YWxpZ249InRvcCI+PGVtPjxhIGNsYXNzPSJhbmNob3IiIGlkPSJnZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYWEyYTFmYmY1NjljYTc5ODk3ZWFlODg2ZTMzNzZjYTRjOCI+PC9hPjwhLS0gZG94eXRhZzogbWVtYmVyPSJUSlBGX0JHUlgiIHJlZj0iZ2dhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmFhMmExZmJmNTY5Y2E3OTg5N2VhZTg4NmUzMzc2Y2E0YzgiIGFyZ3M9IiIgLS0+VEpQRl9CR1JYPC9lbT4mbmJzcDs8L3RkPjx0ZD4KKzx0cj48dGQgY2xhc3M9ImZpZWxkbmFtZSI+PGVtPjxhIGNsYXNzPSJhbmNob3IiIGlkPSJnZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYWEyYTFmYmY1NjljYTc5ODk3ZWFlODg2ZTMzNzZjYTRjOCI+PC9hPlRKUEZfQkdSWDwvZW0+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ImZpZWxkZG9jIj4KIDxwPkJHUlggcGl4ZWwgZm9ybWF0LiA8L3A+CiA8cD5UaGUgcmVkLCBncmVlbiwgYW5kIGJsdWUgY29tcG9uZW50cyBpbiB0aGUgaW1hZ2UgYXJlIHN0b3JlZCBpbiA0LWJ5dGUgcGl4ZWxzIGluIHRoZSBvcmRlciBCLCBHLCBSIGZyb20gbG93ZXN0IHRvIGhpZ2hlc3QgYnl0ZSBhZGRyZXNzIHdpdGhpbiBlYWNoIHBpeGVsLiBUaGUgWCBjb21wb25lbnQgaXMgaWdub3JlZCB3aGVuIGNvbXByZXNzaW5nIGFuZCB1bmRlZmluZWQgd2hlbiBkZWNvbXByZXNzaW5nLiA8L3A+CiA8L3RkPjwvdHI+Ci08dHI+PHRkIHZhbGlnbj0idG9wIj48ZW0+PGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdnYWM5MTYxNDRlMjZjMzgxN2FjNTE0ZTY0YWU1ZDEyZTJhYWY2NjAzYjI3MTQ3ZGU0N2UyMTJlNzVkYWMwMjdiMmFmIj48L2E+PCEtLSBkb3h5dGFnOiBtZW1iZXI9IlRKUEZfWEJHUiIgcmVmPSJnZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYWFmNjYwM2IyNzE0N2RlNDdlMjEyZTc1ZGFjMDI3YjJhZiIgYXJncz0iIiAtLT5USlBGX1hCR1I8L2VtPiZuYnNwOzwvdGQ+PHRkPgorPHRyPjx0ZCBjbGFzcz0iZmllbGRuYW1lIj48ZW0+PGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdnYWM5MTYxNDRlMjZjMzgxN2FjNTE0ZTY0YWU1ZDEyZTJhYWY2NjAzYjI3MTQ3ZGU0N2UyMTJlNzVkYWMwMjdiMmFmIj48L2E+VEpQRl9YQkdSPC9lbT4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0iZmllbGRkb2MiPgogPHA+WEJHUiBwaXhlbCBmb3JtYXQuIDwvcD4KIDxwPlRoZSByZWQsIGdyZWVuLCBhbmQgYmx1ZSBjb21wb25lbnRzIGluIHRoZSBpbWFnZSBhcmUgc3RvcmVkIGluIDQtYnl0ZSBwaXhlbHMgaW4gdGhlIG9yZGVyIFIsIEcsIEIgZnJvbSBoaWdoZXN0IHRvIGxvd2VzdCBieXRlIGFkZHJlc3Mgd2l0aGluIGVhY2ggcGl4ZWwuIFRoZSBYIGNvbXBvbmVudCBpcyBpZ25vcmVkIHdoZW4gY29tcHJlc3NpbmcgYW5kIHVuZGVmaW5lZCB3aGVuIGRlY29tcHJlc3NpbmcuIDwvcD4KIDwvdGQ+PC90cj4KLTx0cj48dGQgdmFsaWduPSJ0b3AiPjxlbT48YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2dhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmFhZGFlOTk2OTA1ZWZjZmEzYjQyYTBiYjNiZWE3ZjlkODQiPjwvYT48IS0tIGRveHl0YWc6IG1lbWJlcj0iVEpQRl9YUkdCIiByZWY9ImdnYWM5MTYxNDRlMjZjMzgxN2FjNTE0ZTY0YWU1ZDEyZTJhYWRhZTk5NjkwNWVmY2ZhM2I0MmEwYmIzYmVhN2Y5ZDg0IiBhcmdzPSIiIC0tPlRKUEZfWFJHQjwvZW0+Jm5ic3A7PC90ZD48dGQ+Cis8dHI+PHRkIGNsYXNzPSJmaWVsZG5hbWUiPjxlbT48YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2dhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmFhZGFlOTk2OTA1ZWZjZmEzYjQyYTBiYjNiZWE3ZjlkODQiPjwvYT5USlBGX1hSR0I8L2VtPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJmaWVsZGRvYyI+CiA8cD5YUkdCIHBpeGVsIGZvcm1hdC4gPC9wPgogPHA+VGhlIHJlZCwgZ3JlZW4sIGFuZCBibHVlIGNvbXBvbmVudHMgaW4gdGhlIGltYWdlIGFyZSBzdG9yZWQgaW4gNC1ieXRlIHBpeGVscyBpbiB0aGUgb3JkZXIgQiwgRywgUiBmcm9tIGhpZ2hlc3QgdG8gbG93ZXN0IGJ5dGUgYWRkcmVzcyB3aXRoaW4gZWFjaCBwaXhlbC4gVGhlIFggY29tcG9uZW50IGlzIGlnbm9yZWQgd2hlbiBjb21wcmVzc2luZyBhbmQgdW5kZWZpbmVkIHdoZW4gZGVjb21wcmVzc2luZy4gPC9wPgogPC90ZD48L3RyPgotPHRyPjx0ZCB2YWxpZ249InRvcCI+PGVtPjxhIGNsYXNzPSJhbmNob3IiIGlkPSJnZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYWE1NDMxYjU0YjAxNTMzNzcwNWYxMzExODA3MzcxMWExYSI+PC9hPjwhLS0gZG94eXRhZzogbWVtYmVyPSJUSlBGX0dSQVkiIHJlZj0iZ2dhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmFhNTQzMWI1NGIwMTUzMzc3MDVmMTMxMTgwNzM3MTFhMWEiIGFyZ3M9IiIgLS0+VEpQRl9HUkFZPC9lbT4mbmJzcDs8L3RkPjx0ZD4KKzx0cj48dGQgY2xhc3M9ImZpZWxkbmFtZSI+PGVtPjxhIGNsYXNzPSJhbmNob3IiIGlkPSJnZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYWE1NDMxYjU0YjAxNTMzNzcwNWYxMzExODA3MzcxMWExYSI+PC9hPlRKUEZfR1JBWTwvZW0+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ImZpZWxkZG9jIj4KIDxwPkdyYXlzY2FsZSBwaXhlbCBmb3JtYXQuIDwvcD4KIDxwPkVhY2ggMS1ieXRlIHBpeGVsIHJlcHJlc2VudHMgYSBsdW1pbmFuY2UgKGJyaWdodG5lc3MpIGxldmVsIGZyb20gMCB0byAyNTUuIDwvcD4KIDwvdGQ+PC90cj4KLTx0cj48dGQgdmFsaWduPSJ0b3AiPjxlbT48YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2dhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmFhODhkMmU4OGZhYjY3ZjY1MDNjZjk3MmUxNDg1MWNjMTIiPjwvYT48IS0tIGRveHl0YWc6IG1lbWJlcj0iVEpQRl9SR0JBIiByZWY9ImdnYWM5MTYxNDRlMjZjMzgxN2FjNTE0ZTY0YWU1ZDEyZTJhYTg4ZDJlODhmYWI2N2Y2NTAzY2Y5NzJlMTQ4NTFjYzEyIiBhcmdzPSIiIC0tPlRKUEZfUkdCQTwvZW0+Jm5ic3A7PC90ZD48dGQ+Cis8dHI+PHRkIGNsYXNzPSJmaWVsZG5hbWUiPjxlbT48YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2dhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmFhODhkMmU4OGZhYjY3ZjY1MDNjZjk3MmUxNDg1MWNjMTIiPjwvYT5USlBGX1JHQkE8L2VtPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJmaWVsZGRvYyI+CiA8cD5SR0JBIHBpeGVsIGZvcm1hdC4gPC9wPgogPHA+VGhpcyBpcyB0aGUgc2FtZSBhcyA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYWM5MTYxNDRlMjZjMzgxN2FjNTE0ZTY0YWU1ZDEyZTJhYTgzOTczYmViYjdlMmRjNmZhOGJhZTg5ZmYzZjQyZTAxIj5USlBGX1JHQlg8L2E+LCBleGNlcHQgdGhhdCB3aGVuIGRlY29tcHJlc3NpbmcsIHRoZSBYIGNvbXBvbmVudCBpcyBndWFyYW50ZWVkIHRvIGJlIDB4RkYsIHdoaWNoIGNhbiBiZSBpbnRlcnByZXRlZCBhcyBhbiBvcGFxdWUgYWxwaGEgY2hhbm5lbC4gPC9wPgogPC90ZD48L3RyPgotPHRyPjx0ZCB2YWxpZ249InRvcCI+PGVtPjxhIGNsYXNzPSJhbmNob3IiIGlkPSJnZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYWFjMDM3ZmYxODQ1Y2Y5Yjc0YmI4MWEzNjU5YzJiOWZiNCI+PC9hPjwhLS0gZG94eXRhZzogbWVtYmVyPSJUSlBGX0JHUkEiIHJlZj0iZ2dhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmFhYzAzN2ZmMTg0NWNmOWI3NGJiODFhMzY1OWMyYjlmYjQiIGFyZ3M9IiIgLS0+VEpQRl9CR1JBPC9lbT4mbmJzcDs8L3RkPjx0ZD4KKzx0cj48dGQgY2xhc3M9ImZpZWxkbmFtZSI+PGVtPjxhIGNsYXNzPSJhbmNob3IiIGlkPSJnZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYWFjMDM3ZmYxODQ1Y2Y5Yjc0YmI4MWEzNjU5YzJiOWZiNCI+PC9hPlRKUEZfQkdSQTwvZW0+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ImZpZWxkZG9jIj4KIDxwPkJHUkEgcGl4ZWwgZm9ybWF0LiA8L3A+CiA8cD5UaGlzIGlzIHRoZSBzYW1lIGFzIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmFhMmExZmJmNTY5Y2E3OTg5N2VhZTg4NmUzMzc2Y2E0YzgiPlRKUEZfQkdSWDwvYT4sIGV4Y2VwdCB0aGF0IHdoZW4gZGVjb21wcmVzc2luZywgdGhlIFggY29tcG9uZW50IGlzIGd1YXJhbnRlZWQgdG8gYmUgMHhGRiwgd2hpY2ggY2FuIGJlIGludGVycHJldGVkIGFzIGFuIG9wYXF1ZSBhbHBoYSBjaGFubmVsLiA8L3A+CiA8L3RkPjwvdHI+Ci08dHI+PHRkIHZhbGlnbj0idG9wIj48ZW0+PGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdnYWM5MTYxNDRlMjZjMzgxN2FjNTE0ZTY0YWU1ZDEyZTJhYTFiYTFhN2YxNjMxZGJlYWE0OWEwYTg1ZmM0YTQwMDgxIj48L2E+PCEtLSBkb3h5dGFnOiBtZW1iZXI9IlRKUEZfQUJHUiIgcmVmPSJnZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYWExYmExYTdmMTYzMWRiZWFhNDlhMGE4NWZjNGE0MDA4MSIgYXJncz0iIiAtLT5USlBGX0FCR1I8L2VtPiZuYnNwOzwvdGQ+PHRkPgorPHRyPjx0ZCBjbGFzcz0iZmllbGRuYW1lIj48ZW0+PGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdnYWM5MTYxNDRlMjZjMzgxN2FjNTE0ZTY0YWU1ZDEyZTJhYTFiYTFhN2YxNjMxZGJlYWE0OWEwYTg1ZmM0YTQwMDgxIj48L2E+VEpQRl9BQkdSPC9lbT4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0iZmllbGRkb2MiPgogPHA+QUJHUiBwaXhlbCBmb3JtYXQuIDwvcD4KIDxwPlRoaXMgaXMgdGhlIHNhbWUgYXMgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYWFmNjYwM2IyNzE0N2RlNDdlMjEyZTc1ZGFjMDI3YjJhZiI+VEpQRl9YQkdSPC9hPiwgZXhjZXB0IHRoYXQgd2hlbiBkZWNvbXByZXNzaW5nLCB0aGUgWCBjb21wb25lbnQgaXMgZ3VhcmFudGVlZCB0byBiZSAweEZGLCB3aGljaCBjYW4gYmUgaW50ZXJwcmV0ZWQgYXMgYW4gb3BhcXVlIGFscGhhIGNoYW5uZWwuIDwvcD4KIDwvdGQ+PC90cj4KLTx0cj48dGQgdmFsaWduPSJ0b3AiPjxlbT48YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2dhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmFhZThmODQ2ZWQ5ZDlkZTk5YjZlMWRmZTQ0ODg0ODc2NWMiPjwvYT48IS0tIGRveHl0YWc6IG1lbWJlcj0iVEpQRl9BUkdCIiByZWY9ImdnYWM5MTYxNDRlMjZjMzgxN2FjNTE0ZTY0YWU1ZDEyZTJhYWU4Zjg0NmVkOWQ5ZGU5OWI2ZTFkZmU0NDg4NDg3NjVjIiBhcmdzPSIiIC0tPlRKUEZfQVJHQjwvZW0+Jm5ic3A7PC90ZD48dGQ+Cis8dHI+PHRkIGNsYXNzPSJmaWVsZG5hbWUiPjxlbT48YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2dhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmFhZThmODQ2ZWQ5ZDlkZTk5YjZlMWRmZTQ0ODg0ODc2NWMiPjwvYT5USlBGX0FSR0I8L2VtPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJmaWVsZGRvYyI+CiA8cD5BUkdCIHBpeGVsIGZvcm1hdC4gPC9wPgogPHA+VGhpcyBpcyB0aGUgc2FtZSBhcyA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYWM5MTYxNDRlMjZjMzgxN2FjNTE0ZTY0YWU1ZDEyZTJhYWRhZTk5NjkwNWVmY2ZhM2I0MmEwYmIzYmVhN2Y5ZDg0Ij5USlBGX1hSR0I8L2E+LCBleGNlcHQgdGhhdCB3aGVuIGRlY29tcHJlc3NpbmcsIHRoZSBYIGNvbXBvbmVudCBpcyBndWFyYW50ZWVkIHRvIGJlIDB4RkYsIHdoaWNoIGNhbiBiZSBpbnRlcnByZXRlZCBhcyBhbiBvcGFxdWUgYWxwaGEgY2hhbm5lbC4gPC9wPgogPC90ZD48L3RyPgogPC90YWJsZT4KLTwvZGQ+Ci08L2RsPgogCiA8L2Rpdj4KIDwvZGl2PgotPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdhMWQwNDcwNjBlYTgwYmI5ODIwZDU0MGJiOTI4ZTkwNzQiPjwvYT48IS0tIGRveHl0YWc6IG1lbWJlcj0idHVyYm9qcGVnLmg6OlRKU0FNUCIgcmVmPSJnYTFkMDQ3MDYwZWE4MGJiOTgyMGQ1NDBiYjkyOGU5MDc0IiBhcmdzPSIiIC0tPgorPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdhMWQwNDcwNjBlYTgwYmI5ODIwZDU0MGJiOTI4ZTkwNzQiPjwvYT4KIDxkaXYgY2xhc3M9Im1lbWl0ZW0iPgogPGRpdiBjbGFzcz0ibWVtcHJvdG8iPgogICAgICAgPHRhYmxlIGNsYXNzPSJtZW1uYW1lIj4KQEAgLTYyNywzOSArNjgyLDM4IEBACiAgICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj5lbnVtIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2ExZDA0NzA2MGVhODBiYjk4MjBkNTQwYmI5MjhlOTA3NCI+VEpTQU1QPC9hPjwvdGQ+CiAgICAgICAgIDwvdHI+CiAgICAgICA8L3RhYmxlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJtZW1kb2MiPgorPC9kaXY+PGRpdiBjbGFzcz0ibWVtZG9jIj4KIAogPHA+Q2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcgb3B0aW9ucy4gPC9wPgogPHA+V2hlbiBhbiBpbWFnZSBpcyBjb252ZXJ0ZWQgZnJvbSB0aGUgUkdCIHRvIHRoZSBZQ2JDciBjb2xvcnNwYWNlIGFzIHBhcnQgb2YgdGhlIEpQRUcgY29tcHJlc3Npb24gcHJvY2Vzcywgc29tZSBvZiB0aGUgQ2IgYW5kIENyIChjaHJvbWluYW5jZSkgY29tcG9uZW50cyBjYW4gYmUgZGlzY2FyZGVkIG9yIGF2ZXJhZ2VkIHRvZ2V0aGVyIHRvIHByb2R1Y2UgYSBzbWFsbGVyIGltYWdlIHdpdGggbGl0dGxlIHBlcmNlcHRpYmxlIGxvc3Mgb2YgaW1hZ2UgY2xhcml0eSAodGhlIGh1bWFuIGV5ZSBpcyBtb3JlIHNlbnNpdGl2ZSB0byBzbWFsbCBjaGFuZ2VzIGluIGJyaWdodG5lc3MgdGhhbiBzbWFsbCBjaGFuZ2VzIGluIGNvbG9yLikgVGhpcyBpcyBjYWxsZWQgImNocm9taW5hbmNlIHN1YnNhbXBsaW5nIi4gPC9wPgotPGRsPjxkdD48Yj5FbnVtZXJhdG9yOiA8L2I+PC9kdD48ZGQ+PHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjIiIGNlbGxwYWRkaW5nPSIwIj4KLTx0cj48dGQgdmFsaWduPSJ0b3AiPjxlbT48YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2dhMWQwNDcwNjBlYTgwYmI5ODIwZDU0MGJiOTI4ZTkwNzRhZmI4ZGE0ZjQ0MTk3ODM3YmRlYzBhNGY1OTNkYWNhZTMiPjwvYT48IS0tIGRveHl0YWc6IG1lbWJlcj0iVEpTQU1QXzQ0NCIgcmVmPSJnZ2ExZDA0NzA2MGVhODBiYjk4MjBkNTQwYmI5MjhlOTA3NGFmYjhkYTRmNDQxOTc4MzdiZGVjMGE0ZjU5M2RhY2FlMyIgYXJncz0iIiAtLT5USlNBTVBfNDQ0PC9lbT4mbmJzcDs8L3RkPjx0ZD4KKzxkbCBjbGFzcz0ic2VjdGlvbiBub3RlIj48ZHQ+Tm90ZTwvZHQ+PGRkPlRlY2huaWNhbGx5LCB0aGUgSlBFRyBmb3JtYXQgdXNlcyB0aGUgWUNiQ3IgY29sb3JzcGFjZSwgYnV0IHBlciB0aGUgY29udmVudGlvbiBvZiB0aGUgZGlnaXRhbCB2aWRlbyBjb21tdW5pdHksIHRoZSBUdXJib0pQRUcgQVBJIHVzZXMgIllVViIgdG8gcmVmZXIgdG8gYW4gaW1hZ2UgZm9ybWF0IGNvbnNpc3Rpbmcgb2YgWSwgQ2IsIGFuZCBDciBpbWFnZSBwbGFuZXMuIDwvZGQ+PC9kbD4KKzx0YWJsZSBjbGFzcz0iZmllbGR0YWJsZSI+Cis8dHI+PHRoIGNvbHNwYW49IjIiPkVudW1lcmF0b3I8L3RoPjwvdHI+PHRyPjx0ZCBjbGFzcz0iZmllbGRuYW1lIj48ZW0+PGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdnYTFkMDQ3MDYwZWE4MGJiOTgyMGQ1NDBiYjkyOGU5MDc0YWZiOGRhNGY0NDE5NzgzN2JkZWMwYTRmNTkzZGFjYWUzIj48L2E+VEpTQU1QXzQ0NDwvZW0+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ImZpZWxkZG9jIj4KIDxwPjQ6NDo0IGNocm9taW5hbmNlIHN1YnNhbXBsaW5nIChubyBjaHJvbWluYW5jZSBzdWJzYW1wbGluZykuIDwvcD4KIDxwPlRoZSBKUEVHIG9yIFlVViBpbWFnZSB3aWxsIGNvbnRhaW4gb25lIGNocm9taW5hbmNlIGNvbXBvbmVudCBmb3IgZXZlcnkgcGl4ZWwgaW4gdGhlIHNvdXJjZSBpbWFnZS4gPC9wPgogPC90ZD48L3RyPgotPHRyPjx0ZCB2YWxpZ249InRvcCI+PGVtPjxhIGNsYXNzPSJhbmNob3IiIGlkPSJnZ2ExZDA0NzA2MGVhODBiYjk4MjBkNTQwYmI5MjhlOTA3NGExMzYxMzA5MDJjYzU3OGYxMWYzMjQyOWI1OTM2ODQwNCI+PC9hPjwhLS0gZG94eXRhZzogbWVtYmVyPSJUSlNBTVBfNDIyIiByZWY9ImdnYTFkMDQ3MDYwZWE4MGJiOTgyMGQ1NDBiYjkyOGU5MDc0YTEzNjEzMDkwMmNjNTc4ZjExZjMyNDI5YjU5MzY4NDA0IiBhcmdzPSIiIC0tPlRKU0FNUF80MjI8L2VtPiZuYnNwOzwvdGQ+PHRkPgorPHRyPjx0ZCBjbGFzcz0iZmllbGRuYW1lIj48ZW0+PGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdnYTFkMDQ3MDYwZWE4MGJiOTgyMGQ1NDBiYjkyOGU5MDc0YTEzNjEzMDkwMmNjNTc4ZjExZjMyNDI5YjU5MzY4NDA0Ij48L2E+VEpTQU1QXzQyMjwvZW0+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ImZpZWxkZG9jIj4KIDxwPjQ6MjoyIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nLiA8L3A+CiA8cD5UaGUgSlBFRyBvciBZVVYgaW1hZ2Ugd2lsbCBjb250YWluIG9uZSBjaHJvbWluYW5jZSBjb21wb25lbnQgZm9yIGV2ZXJ5IDJ4MSBibG9jayBvZiBwaXhlbHMgaW4gdGhlIHNvdXJjZSBpbWFnZS4gPC9wPgogPC90ZD48L3RyPgotPHRyPjx0ZCB2YWxpZ249InRvcCI+PGVtPjxhIGNsYXNzPSJhbmNob3IiIGlkPSJnZ2ExZDA0NzA2MGVhODBiYjk4MjBkNTQwYmI5MjhlOTA3NGE2MzA4NWRiZjY4M2NmZTM5ZTUxM2NkYjYzNDNlMzczNyI+PC9hPjwhLS0gZG94eXRhZzogbWVtYmVyPSJUSlNBTVBfNDIwIiByZWY9ImdnYTFkMDQ3MDYwZWE4MGJiOTgyMGQ1NDBiYjkyOGU5MDc0YTYzMDg1ZGJmNjgzY2ZlMzllNTEzY2RiNjM0M2UzNzM3IiBhcmdzPSIiIC0tPlRKU0FNUF80MjA8L2VtPiZuYnNwOzwvdGQ+PHRkPgorPHRyPjx0ZCBjbGFzcz0iZmllbGRuYW1lIj48ZW0+PGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdnYTFkMDQ3MDYwZWE4MGJiOTgyMGQ1NDBiYjkyOGU5MDc0YTYzMDg1ZGJmNjgzY2ZlMzllNTEzY2RiNjM0M2UzNzM3Ij48L2E+VEpTQU1QXzQyMDwvZW0+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ImZpZWxkZG9jIj4KIDxwPjQ6MjowIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nLiA8L3A+CiA8cD5UaGUgSlBFRyBvciBZVVYgaW1hZ2Ugd2lsbCBjb250YWluIG9uZSBjaHJvbWluYW5jZSBjb21wb25lbnQgZm9yIGV2ZXJ5IDJ4MiBibG9jayBvZiBwaXhlbHMgaW4gdGhlIHNvdXJjZSBpbWFnZS4gPC9wPgogPC90ZD48L3RyPgotPHRyPjx0ZCB2YWxpZ249InRvcCI+PGVtPjxhIGNsYXNzPSJhbmNob3IiIGlkPSJnZ2ExZDA0NzA2MGVhODBiYjk4MjBkNTQwYmI5MjhlOTA3NGEzZjFjOTUwNDg0MmRkYzdhNDhkMGY2OTA3NTRiNjI0OCI+PC9hPjwhLS0gZG94eXRhZzogbWVtYmVyPSJUSlNBTVBfR1JBWSIgcmVmPSJnZ2ExZDA0NzA2MGVhODBiYjk4MjBkNTQwYmI5MjhlOTA3NGEzZjFjOTUwNDg0MmRkYzdhNDhkMGY2OTA3NTRiNjI0OCIgYXJncz0iIiAtLT5USlNBTVBfR1JBWTwvZW0+Jm5ic3A7PC90ZD48dGQ+Cis8dHI+PHRkIGNsYXNzPSJmaWVsZG5hbWUiPjxlbT48YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2dhMWQwNDcwNjBlYTgwYmI5ODIwZDU0MGJiOTI4ZTkwNzRhM2YxYzk1MDQ4NDJkZGM3YTQ4ZDBmNjkwNzU0YjYyNDgiPjwvYT5USlNBTVBfR1JBWTwvZW0+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ImZpZWxkZG9jIj4KIDxwPkdyYXlzY2FsZS4gPC9wPgogPHA+VGhlIEpQRUcgb3IgWVVWIGltYWdlIHdpbGwgY29udGFpbiBubyBjaHJvbWluYW5jZSBjb21wb25lbnRzLiA8L3A+CiA8L3RkPjwvdHI+Ci08dHI+PHRkIHZhbGlnbj0idG9wIj48ZW0+PGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdnYTFkMDQ3MDYwZWE4MGJiOTgyMGQ1NDBiYjkyOGU5MDc0YWNjZjc0MGU2ZjNhYTZiYTIwYmE5MjJjYWQxM2NiOTc0Ij48L2E+PCEtLSBkb3h5dGFnOiBtZW1iZXI9IlRKU0FNUF80NDAiIHJlZj0iZ2dhMWQwNDcwNjBlYTgwYmI5ODIwZDU0MGJiOTI4ZTkwNzRhY2NmNzQwZTZmM2FhNmJhMjBiYTkyMmNhZDEzY2I5NzQiIGFyZ3M9IiIgLS0+VEpTQU1QXzQ0MDwvZW0+Jm5ic3A7PC90ZD48dGQ+Cis8dHI+PHRkIGNsYXNzPSJmaWVsZG5hbWUiPjxlbT48YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2dhMWQwNDcwNjBlYTgwYmI5ODIwZDU0MGJiOTI4ZTkwNzRhY2NmNzQwZTZmM2FhNmJhMjBiYTkyMmNhZDEzY2I5NzQiPjwvYT5USlNBTVBfNDQwPC9lbT4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0iZmllbGRkb2MiPgogPHA+NDo0OjAgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcuIDwvcD4KIDxwPlRoZSBKUEVHIG9yIFlVViBpbWFnZSB3aWxsIGNvbnRhaW4gb25lIGNocm9taW5hbmNlIGNvbXBvbmVudCBmb3IgZXZlcnkgMXgyIGJsb2NrIG9mIHBpeGVscyBpbiB0aGUgc291cmNlIGltYWdlLiA8L3A+Cis8ZGwgY2xhc3M9InNlY3Rpb24gbm90ZSI+PGR0Pk5vdGU8L2R0PjxkZD40OjQ6MCBzdWJzYW1wbGluZyBpcyBub3QgZnVsbHkgYWNjZWxlcmF0ZWQgaW4gbGlianBlZy10dXJiby4gPC9kZD48L2RsPgogPC90ZD48L3RyPgogPC90YWJsZT4KLTwvZGQ+Ci08L2RsPgogCiA8L2Rpdj4KIDwvZGl2PgotPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdhMmRlNTMxYWY0ZTdlNmM0ZjEyNDkwODM3NmIzNTQ4NjYiPjwvYT48IS0tIGRveHl0YWc6IG1lbWJlcj0idHVyYm9qcGVnLmg6OlRKWE9QIiByZWY9ImdhMmRlNTMxYWY0ZTdlNmM0ZjEyNDkwODM3NmIzNTQ4NjYiIGFyZ3M9IiIgLS0+Cis8YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2EyZGU1MzFhZjRlN2U2YzRmMTI0OTA4Mzc2YjM1NDg2NiI+PC9hPgogPGRpdiBjbGFzcz0ibWVtaXRlbSI+CiA8ZGl2IGNsYXNzPSJtZW1wcm90byI+CiAgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgpAQCAtNjY3LDQ4ICs3MjEsNDUgQEAKICAgICAgICAgICA8dGQgY2xhc3M9Im1lbW5hbWUiPmVudW0gPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTJkZTUzMWFmNGU3ZTZjNGYxMjQ5MDgzNzZiMzU0ODY2Ij5USlhPUDwvYT48L3RkPgogICAgICAgICA8L3RyPgogICAgICAgPC90YWJsZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0ibWVtZG9jIj4KKzwvZGl2PjxkaXYgY2xhc3M9Im1lbWRvYyI+CiAKIDxwPlRyYW5zZm9ybSBvcGVyYXRpb25zIGZvciA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhZTQwMzE5M2NlYjRhYWZiN2UwZjU2YWI1ODdiNDg2MTYiIHRpdGxlPSJMb3NzbGVzc2x5IHRyYW5zZm9ybSBhIEpQRUcgaW1hZ2UgaW50byBhbm90aGVyIEpQRUcgaW1hZ2UuIj50alRyYW5zZm9ybSgpPC9hPiA8L3A+Ci08ZGw+PGR0PjxiPkVudW1lcmF0b3I6IDwvYj48L2R0PjxkZD48dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMiIgY2VsbHBhZGRpbmc9IjAiPgotPHRyPjx0ZCB2YWxpZ249InRvcCI+PGVtPjxhIGNsYXNzPSJhbmNob3IiIGlkPSJnZ2EyZGU1MzFhZjRlN2U2YzRmMTI0OTA4Mzc2YjM1NDg2NmFhZDg4YzAzNjZjZDNmN2QwZWFjOWQ3YTNmYTFjMmMyNyI+PC9hPjwhLS0gZG94eXRhZzogbWVtYmVyPSJUSlhPUF9OT05FIiByZWY9ImdnYTJkZTUzMWFmNGU3ZTZjNGYxMjQ5MDgzNzZiMzU0ODY2YWFkODhjMDM2NmNkM2Y3ZDBlYWM5ZDdhM2ZhMWMyYzI3IiBhcmdzPSIiIC0tPlRKWE9QX05PTkU8L2VtPiZuYnNwOzwvdGQ+PHRkPgorPHRhYmxlIGNsYXNzPSJmaWVsZHRhYmxlIj4KKzx0cj48dGggY29sc3Bhbj0iMiI+RW51bWVyYXRvcjwvdGg+PC90cj48dHI+PHRkIGNsYXNzPSJmaWVsZG5hbWUiPjxlbT48YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2dhMmRlNTMxYWY0ZTdlNmM0ZjEyNDkwODM3NmIzNTQ4NjZhYWQ4OGMwMzY2Y2QzZjdkMGVhYzlkN2EzZmExYzJjMjciPjwvYT5USlhPUF9OT05FPC9lbT4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0iZmllbGRkb2MiPgogPHA+RG8gbm90IHRyYW5zZm9ybSB0aGUgcG9zaXRpb24gb2YgdGhlIGltYWdlIHBpeGVscy4gPC9wPgogPC90ZD48L3RyPgotPHRyPjx0ZCB2YWxpZ249InRvcCI+PGVtPjxhIGNsYXNzPSJhbmNob3IiIGlkPSJnZ2EyZGU1MzFhZjRlN2U2YzRmMTI0OTA4Mzc2YjM1NDg2NmFhMGRmNjk3NzZjYWEzMGYwZmEyOGUyNjMzMmQzMTFjZSI+PC9hPjwhLS0gZG94eXRhZzogbWVtYmVyPSJUSlhPUF9IRkxJUCIgcmVmPSJnZ2EyZGU1MzFhZjRlN2U2YzRmMTI0OTA4Mzc2YjM1NDg2NmFhMGRmNjk3NzZjYWEzMGYwZmEyOGUyNjMzMmQzMTFjZSIgYXJncz0iIiAtLT5USlhPUF9IRkxJUDwvZW0+Jm5ic3A7PC90ZD48dGQ+Cis8dHI+PHRkIGNsYXNzPSJmaWVsZG5hbWUiPjxlbT48YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2dhMmRlNTMxYWY0ZTdlNmM0ZjEyNDkwODM3NmIzNTQ4NjZhYTBkZjY5Nzc2Y2FhMzBmMGZhMjhlMjYzMzJkMzExY2UiPjwvYT5USlhPUF9IRkxJUDwvZW0+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ImZpZWxkZG9jIj4KIDxwPkZsaXAgKG1pcnJvcikgaW1hZ2UgaG9yaXpvbnRhbGx5LiA8L3A+CiA8cD5UaGlzIHRyYW5zZm9ybSBpcyBpbXBlcmZlY3QgaWYgdGhlcmUgYXJlIGFueSBwYXJ0aWFsIE1DVSBibG9ja3Mgb24gdGhlIHJpZ2h0IGVkZ2UgKHNlZSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNTBlMDNjYjVlZDExNTMzMGUyMTI0MTc0Mjk2MDBiMDAiIHRpdGxlPSJUaGlzIG9wdGlvbiB3aWxsIGNhdXNlIHRqVHJhbnNmb3JtKCkgdG8gcmV0dXJuIGFuIGVycm9yIGlmIHRoZSB0cmFuc2Zvcm0gaXMgbm90IHBlcmZlY3QuIj5USlhPUFRfUEVSRkVDVDwvYT4uKSA8L3A+CiA8L3RkPjwvdHI+Ci08dHI+PHRkIHZhbGlnbj0idG9wIj48ZW0+PGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdnYTJkZTUzMWFmNGU3ZTZjNGYxMjQ5MDgzNzZiMzU0ODY2YTMyNGVkZGZiZWM1M2I3ZTY5MWY2MWU1NjkyOWQwZDVkIj48L2E+PCEtLSBkb3h5dGFnOiBtZW1iZXI9IlRKWE9QX1ZGTElQIiByZWY9ImdnYTJkZTUzMWFmNGU3ZTZjNGYxMjQ5MDgzNzZiMzU0ODY2YTMyNGVkZGZiZWM1M2I3ZTY5MWY2MWU1NjkyOWQwZDVkIiBhcmdzPSIiIC0tPlRKWE9QX1ZGTElQPC9lbT4mbmJzcDs8L3RkPjx0ZD4KKzx0cj48dGQgY2xhc3M9ImZpZWxkbmFtZSI+PGVtPjxhIGNsYXNzPSJhbmNob3IiIGlkPSJnZ2EyZGU1MzFhZjRlN2U2YzRmMTI0OTA4Mzc2YjM1NDg2NmEzMjRlZGRmYmVjNTNiN2U2OTFmNjFlNTY5MjlkMGQ1ZCI+PC9hPlRKWE9QX1ZGTElQPC9lbT4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0iZmllbGRkb2MiPgogPHA+RmxpcCAobWlycm9yKSBpbWFnZSB2ZXJ0aWNhbGx5LiA8L3A+CiA8cD5UaGlzIHRyYW5zZm9ybSBpcyBpbXBlcmZlY3QgaWYgdGhlcmUgYXJlIGFueSBwYXJ0aWFsIE1DVSBibG9ja3Mgb24gdGhlIGJvdHRvbSBlZGdlIChzZWUgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTUwZTAzY2I1ZWQxMTUzMzBlMjEyNDE3NDI5NjAwYjAwIiB0aXRsZT0iVGhpcyBvcHRpb24gd2lsbCBjYXVzZSB0alRyYW5zZm9ybSgpIHRvIHJldHVybiBhbiBlcnJvciBpZiB0aGUgdHJhbnNmb3JtIGlzIG5vdCBwZXJmZWN0LiI+VEpYT1BUX1BFUkZFQ1Q8L2E+LikgPC9wPgogPC90ZD48L3RyPgotPHRyPjx0ZCB2YWxpZ249InRvcCI+PGVtPjxhIGNsYXNzPSJhbmNob3IiIGlkPSJnZ2EyZGU1MzFhZjRlN2U2YzRmMTI0OTA4Mzc2YjM1NDg2NmEzMTA2MGFlZDE5OWY4ODZhZmRkNDE3ZjgwNDk5YzMyZCI+PC9hPjwhLS0gZG94eXRhZzogbWVtYmVyPSJUSlhPUF9UUkFOU1BPU0UiIHJlZj0iZ2dhMmRlNTMxYWY0ZTdlNmM0ZjEyNDkwODM3NmIzNTQ4NjZhMzEwNjBhZWQxOTlmODg2YWZkZDQxN2Y4MDQ5OWMzMmQiIGFyZ3M9IiIgLS0+VEpYT1BfVFJBTlNQT1NFPC9lbT4mbmJzcDs8L3RkPjx0ZD4KKzx0cj48dGQgY2xhc3M9ImZpZWxkbmFtZSI+PGVtPjxhIGNsYXNzPSJhbmNob3IiIGlkPSJnZ2EyZGU1MzFhZjRlN2U2YzRmMTI0OTA4Mzc2YjM1NDg2NmEzMTA2MGFlZDE5OWY4ODZhZmRkNDE3ZjgwNDk5YzMyZCI+PC9hPlRKWE9QX1RSQU5TUE9TRTwvZW0+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ImZpZWxkZG9jIj4KIDxwPlRyYW5zcG9zZSBpbWFnZSAoZmxpcC9taXJyb3IgYWxvbmcgdXBwZXIgbGVmdCB0byBsb3dlciByaWdodCBheGlzLikgVGhpcyB0cmFuc2Zvcm0gaXMgYWx3YXlzIHBlcmZlY3QuIDwvcD4KIDwvdGQ+PC90cj4KLTx0cj48dGQgdmFsaWduPSJ0b3AiPjxlbT48YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2dhMmRlNTMxYWY0ZTdlNmM0ZjEyNDkwODM3NmIzNTQ4NjZhZjNiMTRkNDg4YWVhNmVjZTllNWIzZGY3M2E3NGQ2YTQiPjwvYT48IS0tIGRveHl0YWc6IG1lbWJlcj0iVEpYT1BfVFJBTlNWRVJTRSIgcmVmPSJnZ2EyZGU1MzFhZjRlN2U2YzRmMTI0OTA4Mzc2YjM1NDg2NmFmM2IxNGQ0ODhhZWE2ZWNlOWU1YjNkZjczYTc0ZDZhNCIgYXJncz0iIiAtLT5USlhPUF9UUkFOU1ZFUlNFPC9lbT4mbmJzcDs8L3RkPjx0ZD4KKzx0cj48dGQgY2xhc3M9ImZpZWxkbmFtZSI+PGVtPjxhIGNsYXNzPSJhbmNob3IiIGlkPSJnZ2EyZGU1MzFhZjRlN2U2YzRmMTI0OTA4Mzc2YjM1NDg2NmFmM2IxNGQ0ODhhZWE2ZWNlOWU1YjNkZjczYTc0ZDZhNCI+PC9hPlRKWE9QX1RSQU5TVkVSU0U8L2VtPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJmaWVsZGRvYyI+CiA8cD5UcmFuc3ZlcnNlIHRyYW5zcG9zZSBpbWFnZSAoZmxpcC9taXJyb3IgYWxvbmcgdXBwZXIgcmlnaHQgdG8gbG93ZXIgbGVmdCBheGlzLikgVGhpcyB0cmFuc2Zvcm0gaXMgaW1wZXJmZWN0IGlmIHRoZXJlIGFyZSBhbnkgcGFydGlhbCBNQ1UgYmxvY2tzIGluIHRoZSBpbWFnZSAoc2VlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E1MGUwM2NiNWVkMTE1MzMwZTIxMjQxNzQyOTYwMGIwMCIgdGl0bGU9IlRoaXMgb3B0aW9uIHdpbGwgY2F1c2UgdGpUcmFuc2Zvcm0oKSB0byByZXR1cm4gYW4gZXJyb3IgaWYgdGhlIHRyYW5zZm9ybSBpcyBub3QgcGVyZmVjdC4iPlRKWE9QVF9QRVJGRUNUPC9hPi4pIDwvcD4KIDwvdGQ+PC90cj4KLTx0cj48dGQgdmFsaWduPSJ0b3AiPjxlbT48YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2dhMmRlNTMxYWY0ZTdlNmM0ZjEyNDkwODM3NmIzNTQ4NjZhNDNiMmJiYjIzYmM0YmQ1NDg0MjJkNDNmYmU5YWYxMjgiPjwvYT48IS0tIGRveHl0YWc6IG1lbWJlcj0iVEpYT1BfUk9UOTAiIHJlZj0iZ2dhMmRlNTMxYWY0ZTdlNmM0ZjEyNDkwODM3NmIzNTQ4NjZhNDNiMmJiYjIzYmM0YmQ1NDg0MjJkNDNmYmU5YWYxMjgiIGFyZ3M9IiIgLS0+VEpYT1BfUk9UOTA8L2VtPiZuYnNwOzwvdGQ+PHRkPgorPHRyPjx0ZCBjbGFzcz0iZmllbGRuYW1lIj48ZW0+PGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdnYTJkZTUzMWFmNGU3ZTZjNGYxMjQ5MDgzNzZiMzU0ODY2YTQzYjJiYmIyM2JjNGJkNTQ4NDIyZDQzZmJlOWFmMTI4Ij48L2E+VEpYT1BfUk9UOTA8L2VtPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJmaWVsZGRvYyI+CiA8cD5Sb3RhdGUgaW1hZ2UgY2xvY2t3aXNlIGJ5IDkwIGRlZ3JlZXMuIDwvcD4KIDxwPlRoaXMgdHJhbnNmb3JtIGlzIGltcGVyZmVjdCBpZiB0aGVyZSBhcmUgYW55IHBhcnRpYWwgTUNVIGJsb2NrcyBvbiB0aGUgYm90dG9tIGVkZ2UgKHNlZSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNTBlMDNjYjVlZDExNTMzMGUyMTI0MTc0Mjk2MDBiMDAiIHRpdGxlPSJUaGlzIG9wdGlvbiB3aWxsIGNhdXNlIHRqVHJhbnNmb3JtKCkgdG8gcmV0dXJuIGFuIGVycm9yIGlmIHRoZSB0cmFuc2Zvcm0gaXMgbm90IHBlcmZlY3QuIj5USlhPUFRfUEVSRkVDVDwvYT4uKSA8L3A+CiA8L3RkPjwvdHI+Ci08dHI+PHRkIHZhbGlnbj0idG9wIj48ZW0+PGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdnYTJkZTUzMWFmNGU3ZTZjNGYxMjQ5MDgzNzZiMzU0ODY2YTE0MDk1MmViOGRkMDMwMGFjY2ZjYzIyNzI2ZDY5NjkyIj48L2E+PCEtLSBkb3h5dGFnOiBtZW1iZXI9IlRKWE9QX1JPVDE4MCIgcmVmPSJnZ2EyZGU1MzFhZjRlN2U2YzRmMTI0OTA4Mzc2YjM1NDg2NmExNDA5NTJlYjhkZDAzMDBhY2NmY2MyMjcyNmQ2OTY5MiIgYXJncz0iIiAtLT5USlhPUF9ST1QxODA8L2VtPiZuYnNwOzwvdGQ+PHRkPgorPHRyPjx0ZCBjbGFzcz0iZmllbGRuYW1lIj48ZW0+PGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdnYTJkZTUzMWFmNGU3ZTZjNGYxMjQ5MDgzNzZiMzU0ODY2YTE0MDk1MmViOGRkMDMwMGFjY2ZjYzIyNzI2ZDY5NjkyIj48L2E+VEpYT1BfUk9UMTgwPC9lbT4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0iZmllbGRkb2MiPgogPHA+Um90YXRlIGltYWdlIDE4MCBkZWdyZWVzLiA8L3A+CiA8cD5UaGlzIHRyYW5zZm9ybSBpcyBpbXBlcmZlY3QgaWYgdGhlcmUgYXJlIGFueSBwYXJ0aWFsIE1DVSBibG9ja3MgaW4gdGhlIGltYWdlIChzZWUgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTUwZTAzY2I1ZWQxMTUzMzBlMjEyNDE3NDI5NjAwYjAwIiB0aXRsZT0iVGhpcyBvcHRpb24gd2lsbCBjYXVzZSB0alRyYW5zZm9ybSgpIHRvIHJldHVybiBhbiBlcnJvciBpZiB0aGUgdHJhbnNmb3JtIGlzIG5vdCBwZXJmZWN0LiI+VEpYT1BUX1BFUkZFQ1Q8L2E+LikgPC9wPgogPC90ZD48L3RyPgotPHRyPjx0ZCB2YWxpZ249InRvcCI+PGVtPjxhIGNsYXNzPSJhbmNob3IiIGlkPSJnZ2EyZGU1MzFhZjRlN2U2YzRmMTI0OTA4Mzc2YjM1NDg2NmEzMDY0ZWU1ZGZiN2YwMzJkZjMzMjgxODU4NzU2N2EwOCI+PC9hPjwhLS0gZG94eXRhZzogbWVtYmVyPSJUSlhPUF9ST1QyNzAiIHJlZj0iZ2dhMmRlNTMxYWY0ZTdlNmM0ZjEyNDkwODM3NmIzNTQ4NjZhMzA2NGVlNWRmYjdmMDMyZGYzMzI4MTg1ODc1NjdhMDgiIGFyZ3M9IiIgLS0+VEpYT1BfUk9UMjcwPC9lbT4mbmJzcDs8L3RkPjx0ZD4KKzx0cj48dGQgY2xhc3M9ImZpZWxkbmFtZSI+PGVtPjxhIGNsYXNzPSJhbmNob3IiIGlkPSJnZ2EyZGU1MzFhZjRlN2U2YzRmMTI0OTA4Mzc2YjM1NDg2NmEzMDY0ZWU1ZGZiN2YwMzJkZjMzMjgxODU4NzU2N2EwOCI+PC9hPlRKWE9QX1JPVDI3MDwvZW0+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ImZpZWxkZG9jIj4KIDxwPlJvdGF0ZSBpbWFnZSBjb3VudGVyLWNsb2Nrd2lzZSBieSA5MCBkZWdyZWVzLiA8L3A+CiA8cD5UaGlzIHRyYW5zZm9ybSBpcyBpbXBlcmZlY3QgaWYgdGhlcmUgYXJlIGFueSBwYXJ0aWFsIE1DVSBibG9ja3Mgb24gdGhlIHJpZ2h0IGVkZ2UgKHNlZSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNTBlMDNjYjVlZDExNTMzMGUyMTI0MTc0Mjk2MDBiMDAiIHRpdGxlPSJUaGlzIG9wdGlvbiB3aWxsIGNhdXNlIHRqVHJhbnNmb3JtKCkgdG8gcmV0dXJuIGFuIGVycm9yIGlmIHRoZSB0cmFuc2Zvcm0gaXMgbm90IHBlcmZlY3QuIj5USlhPUFRfUEVSRkVDVDwvYT4uKSA8L3A+CiA8L3RkPjwvdHI+CiA8L3RhYmxlPgotPC9kZD4KLTwvZGw+CiAKIDwvZGl2PgogPC9kaXY+Ci08aHIvPjxoMj5GdW5jdGlvbiBEb2N1bWVudGF0aW9uPC9oMj4KLTxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYTVjOTIzNGJkYTZkOTkzY2RhZmZkZDg5YmY4MWEwMGZmIj48L2E+PCEtLSBkb3h5dGFnOiBtZW1iZXI9InR1cmJvanBlZy5oOjp0akFsbG9jIiByZWY9ImdhNWM5MjM0YmRhNmQ5OTNjZGFmZmRkODliZjgxYTAwZmYiIGFyZ3M9IihpbnQgYnl0ZXMpIiAtLT4KKzxoMiBjbGFzcz0iZ3JvdXBoZWFkZXIiPkZ1bmN0aW9uIERvY3VtZW50YXRpb248L2gyPgorPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdhNWM5MjM0YmRhNmQ5OTNjZGFmZmRkODliZjgxYTAwZmYiPjwvYT4KIDxkaXYgY2xhc3M9Im1lbWl0ZW0iPgogPGRpdiBjbGFzcz0ibWVtcHJvdG8iPgogICAgICAgPHRhYmxlIGNsYXNzPSJtZW1uYW1lIj4KQEAgLTcyMCwyMyArNzcxLDIyIEBACiAgICAgICAgICAgPHRkPjwvdGQ+CiAgICAgICAgIDwvdHI+CiAgICAgICA8L3RhYmxlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJtZW1kb2MiPgorPC9kaXY+PGRpdiBjbGFzcz0ibWVtZG9jIj4KIAogPHA+QWxsb2NhdGUgYW4gaW1hZ2UgYnVmZmVyIGZvciB1c2Ugd2l0aCBUdXJib0pQRUcuIDwvcD4KIDxwPllvdSBzaG91bGQgYWx3YXlzIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIGFsbG9jYXRlIHRoZSBKUEVHIGRlc3RpbmF0aW9uIGJ1ZmZlcihzKSBmb3IgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWJhNjJiN2E5OGY5NjA4MzliNTg4NTc5ODk4NDk1Y2YyIiB0aXRsZT0iQ29tcHJlc3MgYW4gUkdCIG9yIGdyYXlzY2FsZSBpbWFnZSBpbnRvIGEgSlBFRyBpbWFnZS4iPnRqQ29tcHJlc3MyKCk8L2E+IGFuZCA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhZTQwMzE5M2NlYjRhYWZiN2UwZjU2YWI1ODdiNDg2MTYiIHRpdGxlPSJMb3NzbGVzc2x5IHRyYW5zZm9ybSBhIEpQRUcgaW1hZ2UgaW50byBhbm90aGVyIEpQRUcgaW1hZ2UuIj50alRyYW5zZm9ybSgpPC9hPiB1bmxlc3MgeW91IGFyZSBkaXNhYmxpbmcgYXV0b21hdGljIGJ1ZmZlciAocmUpYWxsb2NhdGlvbiAoYnkgc2V0dGluZyA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhODgwOGQ0MDNjNjhiNjJhYWE1OGE0YzFlNThlOTg5NjMiIHRpdGxlPSJEaXNhYmxlIGJ1ZmZlciAocmUpYWxsb2NhdGlvbi4iPlRKRkxBR19OT1JFQUxMT0M8L2E+Lik8L3A+Ci08ZGw+PGR0PjxiPlBhcmFtZXRlcnM6PC9iPjwvZHQ+PGRkPgorPGRsIGNsYXNzPSJwYXJhbXMiPjxkdD5QYXJhbWV0ZXJzPC9kdD48ZGQ+CiAgIDx0YWJsZSBjbGFzcz0icGFyYW1zIj4KICAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPmJ5dGVzPC90ZD48dGQ+dGhlIG51bWJlciBvZiBieXRlcyB0byBhbGxvY2F0ZTwvdGQ+PC90cj4KICAgPC90YWJsZT4KICAgPC9kZD4KIDwvZGw+Ci08ZGwgY2xhc3M9InJldHVybiI+PGR0PjxiPlJldHVybnM6PC9iPjwvZHQ+PGRkPmEgcG9pbnRlciB0byBhIG5ld2x5LWFsbG9jYXRlZCBidWZmZXIgd2l0aCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBieXRlczwvZGQ+PC9kbD4KLTxkbCBjbGFzcz0ic2VlIj48ZHQ+PGI+U2VlIGFsc286PC9iPjwvZHQ+PGRkPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E4YzRhMTIzMWRjMDZhNDUwNTE0YzgzNWY2NDcxZjEzNyIgdGl0bGU9IkZyZWUgYW4gaW1hZ2UgYnVmZmVyIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IFR1cmJvSlBFRy4iPnRqRnJlZSgpPC9hPiA8L2RkPjwvZGw+Cis8ZGwgY2xhc3M9InNlY3Rpb24gcmV0dXJuIj48ZHQ+UmV0dXJuczwvZHQ+PGRkPmEgcG9pbnRlciB0byBhIG5ld2x5LWFsbG9jYXRlZCBidWZmZXIgd2l0aCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBieXRlczwvZGQ+PC9kbD4KKzxkbCBjbGFzcz0ic2VjdGlvbiBzZWUiPjxkdD5TZWUgQWxzbzwvZHQ+PGRkPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E4YzRhMTIzMWRjMDZhNDUwNTE0YzgzNWY2NDcxZjEzNyIgdGl0bGU9IkZyZWUgYW4gaW1hZ2UgYnVmZmVyIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IFR1cmJvSlBFRy4iPnRqRnJlZSgpPC9hPiA8L2RkPjwvZGw+CiAKIDwvZGl2PgogPC9kaXY+Ci08YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2FjY2M1YmNhN2YxMmZjZGNjMzAyZTZlMWM2ZDRiMzExYiI+PC9hPjwhLS0gZG94eXRhZzogbWVtYmVyPSJ0dXJib2pwZWcuaDo6dGpCdWZTaXplIiByZWY9ImdhY2NjNWJjYTdmMTJmY2RjYzMwMmU2ZTFjNmQ0YjMxMWIiIGFyZ3M9IihpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBqcGVnU3Vic2FtcCkiIC0tPgorPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdhY2NjNWJjYTdmMTJmY2RjYzMwMmU2ZTFjNmQ0YjMxMWIiPjwvYT4KIDxkaXYgY2xhc3M9Im1lbWl0ZW0iPgogPGRpdiBjbGFzcz0ibWVtcHJvdG8iPgogICAgICAgPHRhYmxlIGNsYXNzPSJtZW1uYW1lIj4KQEAgLTc2NCwxMiArODE0LDExIEBACiAgICAgICAgICAgPHRkPjwvdGQ+PHRkPjwvdGQ+CiAgICAgICAgIDwvdHI+CiAgICAgICA8L3RhYmxlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJtZW1kb2MiPgorPC9kaXY+PGRpdiBjbGFzcz0ibWVtZG9jIj4KIAogPHA+VGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgYnVmZmVyIChpbiBieXRlcykgcmVxdWlyZWQgdG8gaG9sZCBhIEpQRUcgaW1hZ2Ugd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycy4gPC9wPgotPHA+VGhlIG51bWJlciBvZiBieXRlcyByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uIGlzIGxhcmdlciB0aGFuIHRoZSBzaXplIG9mIHRoZSB1bmNvbXByZXNzZWQgc291cmNlIGltYWdlLiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHRoYXQgdGhlIEpQRUcgZm9ybWF0IHVzZXMgMTYtYml0IGNvZWZmaWNpZW50cywgYW5kIGl0IGlzIHRodXMgcG9zc2libGUgZm9yIGEgdmVyeSBoaWdoLXF1YWxpdHkgSlBFRyBpbWFnZSB3aXRoIHZlcnkgaGlnaCBmcmVxdWVuY3kgY29udGVudCB0byBleHBhbmQgcmF0aGVyIHRoYW4gY29tcHJlc3Mgd2hlbiBjb252ZXJ0ZWQgdG8gdGhlIEpQRUcgZm9ybWF0LiBTdWNoIGltYWdlcyByZXByZXNlbnQgYSB2ZXJ5IHJhcmUgY29ybmVyIGNhc2UsIGJ1dCBzaW5jZSB0aGVyZSBpcyBubyB3YXkgdG8gcHJlZGljdCB0aGUgc2l6ZSBvZiBhIEpQRUcgaW1hZ2UgcHJpb3IgdG8gY29tcHJlc3Npb24sIHRoZSBjb3JuZXIgY2FzZSBoYXMgdG8gYmUgaGFuZGxlZC48L3A+Ci08ZGw+PGR0PjxiPlBhcmFtZXRlcnM6PC9iPjwvZHQ+PGRkPgorPHA+VGhlIG51bWJlciBvZiBieXRlcyByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uIGlzIGxhcmdlciB0aGFuIHRoZSBzaXplIG9mIHRoZSB1bmNvbXByZXNzZWQgc291cmNlIGltYWdlLiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHRoYXQgdGhlIEpQRUcgZm9ybWF0IHVzZXMgMTYtYml0IGNvZWZmaWNpZW50cywgYW5kIGl0IGlzIHRodXMgcG9zc2libGUgZm9yIGEgdmVyeSBoaWdoLXF1YWxpdHkgSlBFRyBpbWFnZSB3aXRoIHZlcnkgaGlnaC1mcmVxdWVuY3kgY29udGVudCB0byBleHBhbmQgcmF0aGVyIHRoYW4gY29tcHJlc3Mgd2hlbiBjb252ZXJ0ZWQgdG8gdGhlIEpQRUcgZm9ybWF0LiBTdWNoIGltYWdlcyByZXByZXNlbnQgYSB2ZXJ5IHJhcmUgY29ybmVyIGNhc2UsIGJ1dCBzaW5jZSB0aGVyZSBpcyBubyB3YXkgdG8gcHJlZGljdCB0aGUgc2l6ZSBvZiBhIEpQRUcgaW1hZ2UgcHJpb3IgdG8gY29tcHJlc3Npb24sIHRoZSBjb3JuZXIgY2FzZSBoYXMgdG8gYmUgaGFuZGxlZC48L3A+Cis8ZGwgY2xhc3M9InBhcmFtcyI+PGR0PlBhcmFtZXRlcnM8L2R0PjxkZD4KICAgPHRhYmxlIGNsYXNzPSJwYXJhbXMiPgogICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+d2lkdGg8L3RkPjx0ZD53aWR0aCBvZiB0aGUgaW1hZ2UgKGluIHBpeGVscykgPC90ZD48L3RyPgogICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+aGVpZ2h0PC90ZD48dGQ+aGVpZ2h0IG9mIHRoZSBpbWFnZSAoaW4gcGl4ZWxzKSA8L3RkPjwvdHI+CkBAIC03NzcsMTEgKzgyNiwxMSBAQAogICA8L3RhYmxlPgogICA8L2RkPgogPC9kbD4KLTxkbCBjbGFzcz0icmV0dXJuIj48ZHQ+PGI+UmV0dXJuczo8L2I+PC9kdD48ZGQ+dGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgYnVmZmVyIChpbiBieXRlcykgcmVxdWlyZWQgdG8gaG9sZCB0aGUgaW1hZ2UsIG9yIC0xIGlmIHRoZSBhcmd1bWVudHMgYXJlIG91dCBvZiBib3VuZHMuIDwvZGQ+PC9kbD4KKzxkbCBjbGFzcz0ic2VjdGlvbiByZXR1cm4iPjxkdD5SZXR1cm5zPC9kdD48ZGQ+dGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgYnVmZmVyIChpbiBieXRlcykgcmVxdWlyZWQgdG8gaG9sZCB0aGUgaW1hZ2UsIG9yIC0xIGlmIHRoZSBhcmd1bWVudHMgYXJlIG91dCBvZiBib3VuZHMuIDwvZGQ+PC9kbD4KIAogPC9kaXY+CiA8L2Rpdj4KLTxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYTlkMGNiMDZmZDUwNTJkMjFiNmYyYjM4MmRiOGIyMTljIj48L2E+PCEtLSBkb3h5dGFnOiBtZW1iZXI9InR1cmJvanBlZy5oOjp0akJ1ZlNpemVZVVYiIHJlZj0iZ2E5ZDBjYjA2ZmQ1MDUyZDIxYjZmMmIzODJkYjhiMjE5YyIgYXJncz0iKGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IHN1YnNhbXApIiAtLT4KKzxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYTlkMGNiMDZmZDUwNTJkMjFiNmYyYjM4MmRiOGIyMTljIj48L2E+CiA8ZGl2IGNsYXNzPSJtZW1pdGVtIj4KIDxkaXYgY2xhc3M9Im1lbXByb3RvIj4KICAgICAgIDx0YWJsZSBjbGFzcz0ibWVtbmFtZSI+CkBAIC04MDksMTEgKzg1OCwxMCBAQAogICAgICAgICAgIDx0ZD48L3RkPjx0ZD48L3RkPgogICAgICAgICA8L3RyPgogICAgICAgPC90YWJsZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0ibWVtZG9jIj4KKzwvZGl2PjxkaXYgY2xhc3M9Im1lbWRvYyI+CiAKIDxwPlRoZSBzaXplIG9mIHRoZSBidWZmZXIgKGluIGJ5dGVzKSByZXF1aXJlZCB0byBob2xkIGEgWVVWIHBsYW5hciBpbWFnZSB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLiA8L3A+Ci08ZGw+PGR0PjxiPlBhcmFtZXRlcnM6PC9iPjwvZHQ+PGRkPgorPGRsIGNsYXNzPSJwYXJhbXMiPjxkdD5QYXJhbWV0ZXJzPC9kdD48ZGQ+CiAgIDx0YWJsZSBjbGFzcz0icGFyYW1zIj4KICAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPndpZHRoPC90ZD48dGQ+d2lkdGggb2YgdGhlIGltYWdlIChpbiBwaXhlbHMpIDwvdGQ+PC90cj4KICAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPmhlaWdodDwvdGQ+PHRkPmhlaWdodCBvZiB0aGUgaW1hZ2UgKGluIHBpeGVscykgPC90ZD48L3RyPgpAQCAtODIxLDExICs4NjksMTEgQEAKICAgPC90YWJsZT4KICAgPC9kZD4KIDwvZGw+Ci08ZGwgY2xhc3M9InJldHVybiI+PGR0PjxiPlJldHVybnM6PC9iPjwvZHQ+PGRkPnRoZSBzaXplIG9mIHRoZSBidWZmZXIgKGluIGJ5dGVzKSByZXF1aXJlZCB0byBob2xkIHRoZSBpbWFnZSwgb3IgLTEgaWYgdGhlIGFyZ3VtZW50cyBhcmUgb3V0IG9mIGJvdW5kcy4gPC9kZD48L2RsPgorPGRsIGNsYXNzPSJzZWN0aW9uIHJldHVybiI+PGR0PlJldHVybnM8L2R0PjxkZD50aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIChpbiBieXRlcykgcmVxdWlyZWQgdG8gaG9sZCB0aGUgaW1hZ2UsIG9yIC0xIGlmIHRoZSBhcmd1bWVudHMgYXJlIG91dCBvZiBib3VuZHMuIDwvZGQ+PC9kbD4KIAogPC9kaXY+CiA8L2Rpdj4KLTxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYWJhNjJiN2E5OGY5NjA4MzliNTg4NTc5ODk4NDk1Y2YyIj48L2E+PCEtLSBkb3h5dGFnOiBtZW1iZXI9InR1cmJvanBlZy5oOjp0akNvbXByZXNzMiIgcmVmPSJnYWJhNjJiN2E5OGY5NjA4MzliNTg4NTc5ODk4NDk1Y2YyIiBhcmdzPSIodGpoYW5kbGUgaGFuZGxlLCB1bnNpZ25lZCBjaGFyICpzcmNCdWYsIGludCB3aWR0aCwgaW50IHBpdGNoLCBpbnQgaGVpZ2h0LCBpbnQgcGl4ZWxGb3JtYXQsIHVuc2lnbmVkIGNoYXIgKipqcGVnQnVmLCB1bnNpZ25lZCBsb25nICpqcGVnU2l6ZSwgaW50IGpwZWdTdWJzYW1wLCBpbnQganBlZ1F1YWwsIGludCBmbGFncykiIC0tPgorPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdhYmE2MmI3YTk4Zjk2MDgzOWI1ODg1Nzk4OTg0OTVjZjIiPjwvYT4KIDxkaXYgY2xhc3M9Im1lbWl0ZW0iPgogPGRpdiBjbGFzcz0ibWVtcHJvdG8iPgogICAgICAgPHRhYmxlIGNsYXNzPSJtZW1uYW1lIj4KQEAgLTkwMSwxMSArOTQ5LDEwIEBACiAgICAgICAgICAgPHRkPjwvdGQ+PHRkPjwvdGQ+CiAgICAgICAgIDwvdHI+CiAgICAgICA8L3RhYmxlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJtZW1kb2MiPgorPC9kaXY+PGRpdiBjbGFzcz0ibWVtZG9jIj4KIAogPHA+Q29tcHJlc3MgYW4gUkdCIG9yIGdyYXlzY2FsZSBpbWFnZSBpbnRvIGEgSlBFRyBpbWFnZS4gPC9wPgotPGRsPjxkdD48Yj5QYXJhbWV0ZXJzOjwvYj48L2R0PjxkZD4KKzxkbCBjbGFzcz0icGFyYW1zIj48ZHQ+UGFyYW1ldGVyczwvZHQ+PGRkPgogICA8dGFibGUgY2xhc3M9InBhcmFtcyI+CiAgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5oYW5kbGU8L3RkPjx0ZD5hIGhhbmRsZSB0byBhIFR1cmJvSlBFRyBjb21wcmVzc29yIG9yIHRyYW5zZm9ybWVyIGluc3RhbmNlIDwvdGQ+PC90cj4KICAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPnNyY0J1ZjwvdGQ+PHRkPnBvaW50ZXIgdG8gYW4gaW1hZ2UgYnVmZmVyIGNvbnRhaW5pbmcgUkdCIG9yIGdyYXlzY2FsZSBwaXhlbHMgdG8gYmUgY29tcHJlc3NlZCA8L3RkPjwvdHI+CkBAIC05MjYsMTEgKzk3MywxMSBAQAogICA8L3RhYmxlPgogICA8L2RkPgogPC9kbD4KLTxkbCBjbGFzcz0icmV0dXJuIj48ZHQ+PGI+UmV0dXJuczo8L2I+PC9kdD48ZGQ+MCBpZiBzdWNjZXNzZnVsLCBvciAtMSBpZiBhbiBlcnJvciBvY2N1cnJlZCAoc2VlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E5YWY3OWM5MDhlYzEzMWIxYWU4ZDUyZmU0MDM3NWFiZiIgdGl0bGU9IlJldHVybnMgYSBkZXNjcmlwdGl2ZSBlcnJvciBtZXNzYWdlIGV4cGxhaW5pbmcgd2h5IHRoZSBsYXN0IGNvbW1hbmQgZmFpbGVkLiI+dGpHZXRFcnJvclN0cigpPC9hPi4pIDwvZGQ+PC9kbD4KKzxkbCBjbGFzcz0ic2VjdGlvbiByZXR1cm4iPjxkdD5SZXR1cm5zPC9kdD48ZGQ+MCBpZiBzdWNjZXNzZnVsLCBvciAtMSBpZiBhbiBlcnJvciBvY2N1cnJlZCAoc2VlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E5YWY3OWM5MDhlYzEzMWIxYWU4ZDUyZmU0MDM3NWFiZiIgdGl0bGU9IlJldHVybnMgYSBkZXNjcmlwdGl2ZSBlcnJvciBtZXNzYWdlIGV4cGxhaW5pbmcgd2h5IHRoZSBsYXN0IGNvbW1hbmQgZmFpbGVkLiI+dGpHZXRFcnJvclN0cigpPC9hPi4pIDwvZGQ+PC9kbD4KIAogPC9kaXY+CiA8L2Rpdj4KLTxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYWRhNjljYzY0NDNkMWJiNDkzYjQwZjE2MjYyNTllNWU5Ij48L2E+PCEtLSBkb3h5dGFnOiBtZW1iZXI9InR1cmJvanBlZy5oOjp0akRlY29tcHJlc3MyIiByZWY9ImdhZGE2OWNjNjQ0M2QxYmI0OTNiNDBmMTYyNjI1OWU1ZTkiIGFyZ3M9Iih0amhhbmRsZSBoYW5kbGUsIHVuc2lnbmVkIGNoYXIgKmpwZWdCdWYsIHVuc2lnbmVkIGxvbmcganBlZ1NpemUsIHVuc2lnbmVkIGNoYXIgKmRzdEJ1ZiwgaW50IHdpZHRoLCBpbnQgcGl0Y2gsIGludCBoZWlnaHQsIGludCBwaXhlbEZvcm1hdCwgaW50IGZsYWdzKSIgLS0+Cis8YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2FkYTY5Y2M2NDQzZDFiYjQ5M2I0MGYxNjI2MjU5ZTVlOSI+PC9hPgogPGRpdiBjbGFzcz0ibWVtaXRlbSI+CiA8ZGl2IGNsYXNzPSJtZW1wcm90byI+CiAgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgpAQCAtOTk0LDI5ICsxMDQxLDI4IEBACiAgICAgICAgICAgPHRkPjwvdGQ+PHRkPjwvdGQ+CiAgICAgICAgIDwvdHI+CiAgICAgICA8L3RhYmxlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJtZW1kb2MiPgorPC9kaXY+PGRpdiBjbGFzcz0ibWVtZG9jIj4KIAogPHA+RGVjb21wcmVzcyBhIEpQRUcgaW1hZ2UgdG8gYW4gUkdCIG9yIGdyYXlzY2FsZSBpbWFnZS4gPC9wPgotPGRsPjxkdD48Yj5QYXJhbWV0ZXJzOjwvYj48L2R0PjxkZD4KKzxkbCBjbGFzcz0icGFyYW1zIj48ZHQ+UGFyYW1ldGVyczwvZHQ+PGRkPgogICA8dGFibGUgY2xhc3M9InBhcmFtcyI+CiAgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5oYW5kbGU8L3RkPjx0ZD5hIGhhbmRsZSB0byBhIFR1cmJvSlBFRyBkZWNvbXByZXNzb3Igb3IgdHJhbnNmb3JtZXIgaW5zdGFuY2UgPC90ZD48L3RyPgogICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+anBlZ0J1ZjwvdGQ+PHRkPnBvaW50ZXIgdG8gYSBidWZmZXIgY29udGFpbmluZyB0aGUgSlBFRyBpbWFnZSB0byBkZWNvbXByZXNzIDwvdGQ+PC90cj4KICAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPmpwZWdTaXplPC90ZD48dGQ+c2l6ZSBvZiB0aGUgSlBFRyBpbWFnZSAoaW4gYnl0ZXMpIDwvdGQ+PC90cj4KLSAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPmRzdEJ1ZjwvdGQ+PHRkPnBvaW50ZXIgdG8gYW4gaW1hZ2UgYnVmZmVyIHRoYXQgd2lsbCByZWNlaXZlIHRoZSBkZWNvbXByZXNzZWQgaW1hZ2UuIFRoaXMgYnVmZmVyIHNob3VsZCBub3JtYWxseSBiZSA8Y29kZT5waXRjaCAqIHNjYWxlZEhlaWdodDwvY29kZT4gYnl0ZXMgaW4gc2l6ZSwgd2hlcmUgPGNvZGU+c2NhbGVkSGVpZ2h0PC9jb2RlPiBjYW4gYmUgZGV0ZXJtaW5lZCBieSBjYWxsaW5nIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E4NDg3OGJiNjU0MDQyMDQ3NDNhYTE4Y2FjMDI3ODFkZiIgdGl0bGU9IkNvbXB1dGUgdGhlIHNjYWxlZCB2YWx1ZSBvZiBkaW1lbnNpb24gdXNpbmcgdGhlIGdpdmVuIHNjYWxpbmcgZmFjdG9yLiI+VEpTQ0FMRUQoKTwvYT4gd2l0aCB0aGUgSlBFRyBpbWFnZSBoZWlnaHQgYW5kIG9uZSBvZiB0aGUgc2NhbGluZyBmYWN0b3JzIHJldHVybmVkIGJ5IDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E2NDQ5MDQ0YjlhZjQwMjk5OWNjZjUyZjQwMTMzM2JlOCIgdGl0bGU9IlJldHVybnMgYSBsaXN0IG9mIGZyYWN0aW9uYWwgc2NhbGluZyBmYWN0b3JzIHRoYXQgdGhlIEpQRUcgZGVjb21wcmVzc29yIGluIHRoaXMgaW1wbGVtZW50YXRpb24gb2YgVHVyLi4uIj50akdldFNjYWxpbmdGYWN0b3JzKCk8L2E+LiBUaGUgZHN0QnVmIHBvaW50ZXIgbWF5IGFsc28gYmUgdXNlZCB0byBkZWNvbXByZXNzIGludG8gYSBzcGVjaWZpYyByZWdpb24gb2YgYSBsYXJnZXIgYnVmZmVyLiA8L3RkPjwvdHI+Ci0gICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj53aWR0aDwvdGQ+PHRkPmRlc2lyZWQgd2lkdGggKGluIHBpeGVscykgb2YgdGhlIGRlc3RpbmF0aW9uIGltYWdlLiBJZiB0aGlzIGlzIHNtYWxsZXIgdGhhbiB0aGUgd2lkdGggb2YgdGhlIEpQRUcgaW1hZ2UgYmVpbmcgZGVjb21wcmVzc2VkLCB0aGVuIFR1cmJvSlBFRyB3aWxsIHVzZSBzY2FsaW5nIGluIHRoZSBKUEVHIGRlY29tcHJlc3NvciB0byBnZW5lcmF0ZSB0aGUgbGFyZ2VzdCBwb3NzaWJsZSBpbWFnZSB0aGF0IHdpbGwgZml0IHdpdGhpbiB0aGUgZGVzaXJlZCB3aWR0aC4gSWYgd2lkdGggaXMgc2V0IHRvIDAsIHRoZW4gb25seSB0aGUgaGVpZ2h0IHdpbGwgYmUgY29uc2lkZXJlZCB3aGVuIGRldGVybWluaW5nIHRoZSBzY2FsZWQgaW1hZ2Ugc2l6ZS4gPC90ZD48L3RyPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+ZHN0QnVmPC90ZD48dGQ+cG9pbnRlciB0byBhbiBpbWFnZSBidWZmZXIgdGhhdCB3aWxsIHJlY2VpdmUgdGhlIGRlY29tcHJlc3NlZCBpbWFnZS4gVGhpcyBidWZmZXIgc2hvdWxkIG5vcm1hbGx5IGJlIDxjb2RlPnBpdGNoICogc2NhbGVkSGVpZ2h0PC9jb2RlPiBieXRlcyBpbiBzaXplLCB3aGVyZSA8Y29kZT5zY2FsZWRIZWlnaHQ8L2NvZGU+IGNhbiBiZSBkZXRlcm1pbmVkIGJ5IGNhbGxpbmcgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTg0ODc4YmI2NTQwNDIwNDc0M2FhMThjYWMwMjc4MWRmIiB0aXRsZT0iQ29tcHV0ZSB0aGUgc2NhbGVkIHZhbHVlIG9mIGRpbWVuc2lvbiB1c2luZyB0aGUgZ2l2ZW4gc2NhbGluZyBmYWN0b3IuIj5USlNDQUxFRCgpPC9hPiB3aXRoIHRoZSBKUEVHIGltYWdlIGhlaWdodCBhbmQgb25lIG9mIHRoZSBzY2FsaW5nIGZhY3RvcnMgcmV0dXJuZWQgYnkgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTY0NDkwNDRiOWFmNDAyOTk5Y2NmNTJmNDAxMzMzYmU4IiB0aXRsZT0iUmV0dXJucyBhIGxpc3Qgb2YgZnJhY3Rpb25hbCBzY2FsaW5nIGZhY3RvcnMgdGhhdCB0aGUgSlBFRyBkZWNvbXByZXNzb3IgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBUdXIuLi4iPnRqR2V0U2NhbGluZ0ZhY3RvcnMoKTwvYT4uIFRoZSA8Y29kZT5kc3RCdWY8L2NvZGU+IHBvaW50ZXIgbWF5IGFsc28gYmUgdXNlZCB0byBkZWNvbXByZXNzIGludG8gYSBzcGVjaWZpYyByZWdpb24gb2YgYSBsYXJnZXIgYnVmZmVyLiA8L3RkPjwvdHI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj53aWR0aDwvdGQ+PHRkPmRlc2lyZWQgd2lkdGggKGluIHBpeGVscykgb2YgdGhlIGRlc3RpbmF0aW9uIGltYWdlLiBJZiB0aGlzIGlzIGRpZmZlcmVudCB0aGFuIHRoZSB3aWR0aCBvZiB0aGUgSlBFRyBpbWFnZSBiZWluZyBkZWNvbXByZXNzZWQsIHRoZW4gVHVyYm9KUEVHIHdpbGwgdXNlIHNjYWxpbmcgaW4gdGhlIEpQRUcgZGVjb21wcmVzc29yIHRvIGdlbmVyYXRlIHRoZSBsYXJnZXN0IHBvc3NpYmxlIGltYWdlIHRoYXQgd2lsbCBmaXQgd2l0aGluIHRoZSBkZXNpcmVkIHdpZHRoLiBJZiA8Y29kZT53aWR0aDwvY29kZT4gaXMgc2V0IHRvIDAsIHRoZW4gb25seSB0aGUgaGVpZ2h0IHdpbGwgYmUgY29uc2lkZXJlZCB3aGVuIGRldGVybWluaW5nIHRoZSBzY2FsZWQgaW1hZ2Ugc2l6ZS4gPC90ZD48L3RyPgogICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+cGl0Y2g8L3RkPjx0ZD5ieXRlcyBwZXIgbGluZSBvZiB0aGUgZGVzdGluYXRpb24gaW1hZ2UuIE5vcm1hbGx5LCB0aGlzIGlzIDxjb2RlPnNjYWxlZFdpZHRoICogPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWQ3N2NmOGZlNWIyYmZkM2NiM2Y1MzA5ODE0NmFiYjRjIiB0aXRsZT0iUGl4ZWwgc2l6ZSAoaW4gYnl0ZXMpIGZvciBhIGdpdmVuIHBpeGVsIGZvcm1hdC4iPnRqUGl4ZWxTaXplPC9hPltwaXhlbEZvcm1hdF08L2NvZGU+IGlmIHRoZSBkZWNvbXByZXNzZWQgaW1hZ2UgaXMgdW5wYWRkZWQsIGVsc2UgPGNvZGU+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTBhYmE5NTU0NzMzMTVlNDA1Mjk1ZDk3OGYwYzE2NTExIiB0aXRsZT0iUGFkIHRoZSBnaXZlbiB3aWR0aCB0byB0aGUgbmVhcmVzdCAzMi1iaXQgYm91bmRhcnkuIj5USlBBRDwvYT4oc2NhbGVkV2lkdGggKiA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhZDc3Y2Y4ZmU1YjJiZmQzY2IzZjUzMDk4MTQ2YWJiNGMiIHRpdGxlPSJQaXhlbCBzaXplIChpbiBieXRlcykgZm9yIGEgZ2l2ZW4gcGl4ZWwgZm9ybWF0LiI+dGpQaXhlbFNpemU8L2E+W3BpeGVsRm9ybWF0XSk8L2NvZGU+IGlmIGVhY2ggbGluZSBvZiB0aGUgZGVjb21wcmVzc2VkIGltYWdlIGlzIHBhZGRlZCB0byB0aGUgbmVhcmVzdCAzMi1iaXQgYm91bmRhcnksIGFzIGlzIHRoZSBjYXNlIGZvciBXaW5kb3dzIGJpdG1hcHMuIChOT1RFOiA8Y29kZT5zY2FsZWRXaWR0aDwvY29kZT4gY2FuIGJlIGRldGVybWluZWQgYnkgY2FsbGluZyA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhODQ4NzhiYjY1NDA0MjA0NzQzYWExOGNhYzAyNzgxZGYiIHRpdGxlPSJDb21wdXRlIHRoZSBzY2FsZWQgdmFsdWUgb2YgZGltZW5zaW9uIHVzaW5nIHRoZSBnaXZlbiBzY2FsaW5nIGZhY3Rvci4iPlRKU0NBTEVEKCk8L2E+IHdpdGggdGhlIEpQRUcgaW1hZ2Ugd2lkdGggYW5kIG9uZSBvZiB0aGUgc2NhbGluZyBmYWN0b3JzIHJldHVybmVkIGJ5IDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E2NDQ5MDQ0YjlhZjQwMjk5OWNjZjUyZjQwMTMzM2JlOCIgdGl0bGU9IlJldHVybnMgYSBsaXN0IG9mIGZyYWN0aW9uYWwgc2NhbGluZyBmYWN0b3JzIHRoYXQgdGhlIEpQRUcgZGVjb21wcmVzc29yIGluIHRoaXMgaW1wbGVtZW50YXRpb24gb2YgVHVyLi4uIj50akdldFNjYWxpbmdGYWN0b3JzKCk8L2E+LikgWW91IGNhbiBhbHNvIGJlIGNsZXZlciBhbmQgdXNlIHRoZSBwaXRjaCBwYXJhbWV0ZXIgdG8gc2tpcCBsaW5lcywgZXRjLiBTZXR0aW5nIHRoaXMgcGFyYW1ldGVyIHRvIDAgaXMgdGhlIGVxdWl2YWxlbnQgb2Ygc2V0dGluZyBpdCB0byA8Y29kZT5zY2FsZWRXaWR0aCAqIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FkNzdjZjhmZTViMmJmZDNjYjNmNTMwOTgxNDZhYmI0YyIgdGl0bGU9IlBpeGVsIHNpemUgKGluIGJ5dGVzKSBmb3IgYSBnaXZlbiBwaXhlbCBmb3JtYXQuIj50alBpeGVsU2l6ZTwvYT5bcGl4ZWxGb3JtYXRdPC9jb2RlPi4gPC90ZD48L3RyPgotICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+aGVpZ2h0PC90ZD48dGQ+ZGVzaXJlZCBoZWlnaHQgKGluIHBpeGVscykgb2YgdGhlIGRlc3RpbmF0aW9uIGltYWdlLiBJZiB0aGlzIGlzIHNtYWxsZXIgdGhhbiB0aGUgaGVpZ2h0IG9mIHRoZSBKUEVHIGltYWdlIGJlaW5nIGRlY29tcHJlc3NlZCwgdGhlbiBUdXJib0pQRUcgd2lsbCB1c2Ugc2NhbGluZyBpbiB0aGUgSlBFRyBkZWNvbXByZXNzb3IgdG8gZ2VuZXJhdGUgdGhlIGxhcmdlc3QgcG9zc2libGUgaW1hZ2UgdGhhdCB3aWxsIGZpdCB3aXRoaW4gdGhlIGRlc2lyZWQgaGVpZ2h0LiBJZiBoZWlnaHQgaXMgc2V0IHRvIDAsIHRoZW4gb25seSB0aGUgd2lkdGggd2lsbCBiZSBjb25zaWRlcmVkIHdoZW4gZGV0ZXJtaW5pbmcgdGhlIHNjYWxlZCBpbWFnZSBzaXplLiA8L3RkPjwvdHI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5oZWlnaHQ8L3RkPjx0ZD5kZXNpcmVkIGhlaWdodCAoaW4gcGl4ZWxzKSBvZiB0aGUgZGVzdGluYXRpb24gaW1hZ2UuIElmIHRoaXMgaXMgZGlmZmVyZW50IHRoYW4gdGhlIGhlaWdodCBvZiB0aGUgSlBFRyBpbWFnZSBiZWluZyBkZWNvbXByZXNzZWQsIHRoZW4gVHVyYm9KUEVHIHdpbGwgdXNlIHNjYWxpbmcgaW4gdGhlIEpQRUcgZGVjb21wcmVzc29yIHRvIGdlbmVyYXRlIHRoZSBsYXJnZXN0IHBvc3NpYmxlIGltYWdlIHRoYXQgd2lsbCBmaXQgd2l0aGluIHRoZSBkZXNpcmVkIGhlaWdodC4gSWYgPGNvZGU+aGVpZ2h0PC9jb2RlPiBpcyBzZXQgdG8gMCwgdGhlbiBvbmx5IHRoZSB3aWR0aCB3aWxsIGJlIGNvbnNpZGVyZWQgd2hlbiBkZXRlcm1pbmluZyB0aGUgc2NhbGVkIGltYWdlIHNpemUuIDwvdGQ+PC90cj4KICAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPnBpeGVsRm9ybWF0PC90ZD48dGQ+cGl4ZWwgZm9ybWF0IG9mIHRoZSBkZXN0aW5hdGlvbiBpbWFnZSAoc2VlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYSI+UGl4ZWwgZm9ybWF0czwvYT4uKSA8L3RkPjwvdHI+CiAgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5mbGFnczwvdGQ+PHRkPnRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mIHRoZSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNzJlY2Y0ZWJlNmViNzAyZDNjNmY1Y2EyNzQ1NWUxZWMiPmZsYWdzPC9hPi48L3RkPjwvdHI+CiAgIDwvdGFibGU+CiAgIDwvZGQ+CiA8L2RsPgotPGRsIGNsYXNzPSJyZXR1cm4iPjxkdD48Yj5SZXR1cm5zOjwvYj48L2R0PjxkZD4wIGlmIHN1Y2Nlc3NmdWwsIG9yIC0xIGlmIGFuIGVycm9yIG9jY3VycmVkIChzZWUgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTlhZjc5YzkwOGVjMTMxYjFhZThkNTJmZTQwMzc1YWJmIiB0aXRsZT0iUmV0dXJucyBhIGRlc2NyaXB0aXZlIGVycm9yIG1lc3NhZ2UgZXhwbGFpbmluZyB3aHkgdGhlIGxhc3QgY29tbWFuZCBmYWlsZWQuIj50akdldEVycm9yU3RyKCk8L2E+LikgPC9kZD48L2RsPgorPGRsIGNsYXNzPSJzZWN0aW9uIHJldHVybiI+PGR0PlJldHVybnM8L2R0PjxkZD4wIGlmIHN1Y2Nlc3NmdWwsIG9yIC0xIGlmIGFuIGVycm9yIG9jY3VycmVkIChzZWUgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTlhZjc5YzkwOGVjMTMxYjFhZThkNTJmZTQwMzc1YWJmIiB0aXRsZT0iUmV0dXJucyBhIGRlc2NyaXB0aXZlIGVycm9yIG1lc3NhZ2UgZXhwbGFpbmluZyB3aHkgdGhlIGxhc3QgY29tbWFuZCBmYWlsZWQuIj50akdldEVycm9yU3RyKCk8L2E+LikgPC9kZD48L2RsPgogCiA8L2Rpdj4KIDwvZGl2PgotPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdhYzU2NzVmY2ViNzk5N2IzODU1MTZjZGZmZGIzNGU2YWEiPjwvYT48IS0tIGRveHl0YWc6IG1lbWJlcj0idHVyYm9qcGVnLmg6OnRqRGVjb21wcmVzc0hlYWRlcjIiIHJlZj0iZ2FjNTY3NWZjZWI3OTk3YjM4NTUxNmNkZmZkYjM0ZTZhYSIgYXJncz0iKHRqaGFuZGxlIGhhbmRsZSwgdW5zaWduZWQgY2hhciAqanBlZ0J1ZiwgdW5zaWduZWQgbG9uZyBqcGVnU2l6ZSwgaW50ICp3aWR0aCwgaW50ICpoZWlnaHQsIGludCAqanBlZ1N1YnNhbXApIiAtLT4KKzxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYWM1Njc1ZmNlYjc5OTdiMzg1NTE2Y2RmZmRiMzRlNmFhIj48L2E+CiA8ZGl2IGNsYXNzPSJtZW1pdGVtIj4KIDxkaXYgY2xhc3M9Im1lbXByb3RvIj4KICAgICAgIDx0YWJsZSBjbGFzcz0ibWVtbmFtZSI+CkBAIC0xMDYyLDExICsxMTA4LDEwIEBACiAgICAgICAgICAgPHRkPjwvdGQ+PHRkPjwvdGQ+CiAgICAgICAgIDwvdHI+CiAgICAgICA8L3RhYmxlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJtZW1kb2MiPgorPC9kaXY+PGRpdiBjbGFzcz0ibWVtZG9jIj4KIAogPHA+UmV0cmlldmUgaW5mb3JtYXRpb24gYWJvdXQgYSBKUEVHIGltYWdlIHdpdGhvdXQgZGVjb21wcmVzc2luZyBpdC4gPC9wPgotPGRsPjxkdD48Yj5QYXJhbWV0ZXJzOjwvYj48L2R0PjxkZD4KKzxkbCBjbGFzcz0icGFyYW1zIj48ZHQ+UGFyYW1ldGVyczwvZHQ+PGRkPgogICA8dGFibGUgY2xhc3M9InBhcmFtcyI+CiAgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5oYW5kbGU8L3RkPjx0ZD5hIGhhbmRsZSB0byBhIFR1cmJvSlBFRyBkZWNvbXByZXNzb3Igb3IgdHJhbnNmb3JtZXIgaW5zdGFuY2UgPC90ZD48L3RyPgogICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+anBlZ0J1ZjwvdGQ+PHRkPnBvaW50ZXIgdG8gYSBidWZmZXIgY29udGFpbmluZyBhIEpQRUcgaW1hZ2UgPC90ZD48L3RyPgpAQCAtMTA3NywxMSArMTEyMiwxMSBAQAogICA8L3RhYmxlPgogICA8L2RkPgogPC9kbD4KLTxkbCBjbGFzcz0icmV0dXJuIj48ZHQ+PGI+UmV0dXJuczo8L2I+PC9kdD48ZGQ+MCBpZiBzdWNjZXNzZnVsLCBvciAtMSBpZiBhbiBlcnJvciBvY2N1cnJlZCAoc2VlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E5YWY3OWM5MDhlYzEzMWIxYWU4ZDUyZmU0MDM3NWFiZiIgdGl0bGU9IlJldHVybnMgYSBkZXNjcmlwdGl2ZSBlcnJvciBtZXNzYWdlIGV4cGxhaW5pbmcgd2h5IHRoZSBsYXN0IGNvbW1hbmQgZmFpbGVkLiI+dGpHZXRFcnJvclN0cigpPC9hPi4pIDwvZGQ+PC9kbD4KKzxkbCBjbGFzcz0ic2VjdGlvbiByZXR1cm4iPjxkdD5SZXR1cm5zPC9kdD48ZGQ+MCBpZiBzdWNjZXNzZnVsLCBvciAtMSBpZiBhbiBlcnJvciBvY2N1cnJlZCAoc2VlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E5YWY3OWM5MDhlYzEzMWIxYWU4ZDUyZmU0MDM3NWFiZiIgdGl0bGU9IlJldHVybnMgYSBkZXNjcmlwdGl2ZSBlcnJvciBtZXNzYWdlIGV4cGxhaW5pbmcgd2h5IHRoZSBsYXN0IGNvbW1hbmQgZmFpbGVkLiI+dGpHZXRFcnJvclN0cigpPC9hPi4pIDwvZGQ+PC9kbD4KIAogPC9kaXY+CiA8L2Rpdj4KLTxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYWQ3ODEwYWYwOTU2MjRhNDAxNmU3Mjk1N2E1MGY3N2Q4Ij48L2E+PCEtLSBkb3h5dGFnOiBtZW1iZXI9InR1cmJvanBlZy5oOjp0akRlY29tcHJlc3NUb1lVViIgcmVmPSJnYWQ3ODEwYWYwOTU2MjRhNDAxNmU3Mjk1N2E1MGY3N2Q4IiBhcmdzPSIodGpoYW5kbGUgaGFuZGxlLCB1bnNpZ25lZCBjaGFyICpqcGVnQnVmLCB1bnNpZ25lZCBsb25nIGpwZWdTaXplLCB1bnNpZ25lZCBjaGFyICpkc3RCdWYsIGludCBmbGFncykiIC0tPgorPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdhZDc4MTBhZjA5NTYyNGE0MDE2ZTcyOTU3YTUwZjc3ZDgiPjwvYT4KIDxkaXYgY2xhc3M9Im1lbWl0ZW0iPgogPGRpdiBjbGFzcz0ibWVtcHJvdG8iPgogICAgICAgPHRhYmxlIGNsYXNzPSJtZW1uYW1lIj4KQEAgLTExMjEsMjYgKzExNjYsMjYgQEAKICAgICAgICAgICA8dGQ+PC90ZD48dGQ+PC90ZD4KICAgICAgICAgPC90cj4KICAgICAgIDwvdGFibGU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9Im1lbWRvYyI+Cis8L2Rpdj48ZGl2IGNsYXNzPSJtZW1kb2MiPgogCiA8cD5EZWNvbXByZXNzIGEgSlBFRyBpbWFnZSB0byBhIFlVViBwbGFuYXIgaW1hZ2UuIDwvcD4KLTxwPlRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgSlBFRyBkZWNvbXByZXNzaW9uIGJ1dCBsZWF2ZXMgb3V0IHRoZSBjb2xvciBjb252ZXJzaW9uIHN0ZXAsIHNvIGEgcGxhbmFyIFlVViBpbWFnZSBpcyBnZW5lcmF0ZWQgaW5zdGVhZCBvZiBhbiBSR0IgaW1hZ2UuIFRoZSBwYWRkaW5nIG9mIHRoZSBwbGFuZXMgaW4gdGhpcyBpbWFnZSBpcyB0aGUgc2FtZSBhcyB0aGUgaW1hZ2VzIGdlbmVyYXRlZCBieSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhMGZhNGU3YjE5NDM2ODdjNmEwYzAzMDQ1MjljNTVkMzUiIHRpdGxlPSJFbmNvZGUgYW4gUkdCIG9yIGdyYXlzY2FsZSBpbWFnZSBpbnRvIGEgWVVWIHBsYW5hciBpbWFnZS4iPnRqRW5jb2RlWVVWMigpPC9hPi4gTm90ZSB0aGF0LCBpZiB0aGUgd2lkdGggb3IgaGVpZ2h0IG9mIHRoZSBpbWFnZSBpcyBub3QgYW4gZXZlbiBtdWx0aXBsZSBvZiB0aGUgTUNVIGJsb2NrIHNpemUgKHNlZSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhOWU2MWU3Y2Q0N2ExNWExNzMyODNiYTk0ZTc4MTMwOGMiIHRpdGxlPSJNQ1UgYmxvY2sgd2lkdGggKGluIHBpeGVscykgZm9yIGEgZ2l2ZW4gbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcuIj50ak1DVVdpZHRoPC9hPiBhbmQgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWJkMjQ3YmI5ZmVjYjM5M2VjYTU3MzY2ZmViODMyN2JmIiB0aXRsZT0iTUNVIGJsb2NrIGhlaWdodCAoaW4gcGl4ZWxzKSBmb3IgYSBnaXZlbiBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZy4iPnRqTUNVSGVpZ2h0PC9hPiksIHRoZW4gYW4gaW50ZXJtZWRpYXRlIGJ1ZmZlciBjb3B5IHdpbGwgYmUgcGVyZm9ybWVkIHdpdGhpbiBUdXJib0pQRUcuPC9wPgotPGRsPjxkdD48Yj5QYXJhbWV0ZXJzOjwvYj48L2R0PjxkZD4KKzxwPlRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgSlBFRyBkZWNvbXByZXNzaW9uIGJ1dCBsZWF2ZXMgb3V0IHRoZSBjb2xvciBjb252ZXJzaW9uIHN0ZXAsIHNvIGEgcGxhbmFyIFlVViBpbWFnZSBpcyBnZW5lcmF0ZWQgaW5zdGVhZCBvZiBhbiBSR0IgaW1hZ2UuIFRoZSBwYWRkaW5nIG9mIHRoZSBwbGFuZXMgaW4gdGhpcyBpbWFnZSBpcyB0aGUgc2FtZSBhcyBpbiB0aGUgaW1hZ2VzIGdlbmVyYXRlZCBieSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhMGZhNGU3YjE5NDM2ODdjNmEwYzAzMDQ1MjljNTVkMzUiIHRpdGxlPSJFbmNvZGUgYW4gUkdCIG9yIGdyYXlzY2FsZSBpbWFnZSBpbnRvIGEgWVVWIHBsYW5hciBpbWFnZS4iPnRqRW5jb2RlWVVWMigpPC9hPi4gSWYgdGhlIHdpZHRoIG9yIGhlaWdodCBvZiB0aGUgaW1hZ2UgaXMgbm90IGFuIGV2ZW4gbXVsdGlwbGUgb2YgdGhlIE1DVSBibG9jayBzaXplIChzZWUgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTllNjFlN2NkNDdhMTVhMTczMjgzYmE5NGU3ODEzMDhjIiB0aXRsZT0iTUNVIGJsb2NrIHdpZHRoIChpbiBwaXhlbHMpIGZvciBhIGdpdmVuIGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nLiI+dGpNQ1VXaWR0aDwvYT4gYW5kIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FiZDI0N2JiOWZlY2IzOTNlY2E1NzM2NmZlYjgzMjdiZiIgdGl0bGU9Ik1DVSBibG9jayBoZWlnaHQgKGluIHBpeGVscykgZm9yIGEgZ2l2ZW4gbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcuIj50ak1DVUhlaWdodDwvYT4pLCB0aGVuIGFuIGludGVybWVkaWF0ZSBidWZmZXIgY29weSB3aWxsIGJlIHBlcmZvcm1lZCB3aXRoaW4gVHVyYm9KUEVHLiA8L3A+Cis8ZGwgY2xhc3M9InNlY3Rpb24gbm90ZSI+PGR0Pk5vdGU8L2R0PjxkZD5UZWNobmljYWxseSwgdGhlIEpQRUcgZm9ybWF0IHVzZXMgdGhlIFlDYkNyIGNvbG9yc3BhY2UsIGJ1dCBwZXIgdGhlIGNvbnZlbnRpb24gb2YgdGhlIGRpZ2l0YWwgdmlkZW8gY29tbXVuaXR5LCB0aGUgVHVyYm9KUEVHIEFQSSB1c2VzICJZVVYiIHRvIHJlZmVyIHRvIGFuIGltYWdlIGZvcm1hdCBjb25zaXN0aW5nIG9mIFksIENiLCBhbmQgQ3IgaW1hZ2UgcGxhbmVzLjwvZGQ+PC9kbD4KKzxkbCBjbGFzcz0icGFyYW1zIj48ZHQ+UGFyYW1ldGVyczwvZHQ+PGRkPgogICA8dGFibGUgY2xhc3M9InBhcmFtcyI+CiAgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5oYW5kbGU8L3RkPjx0ZD5hIGhhbmRsZSB0byBhIFR1cmJvSlBFRyBkZWNvbXByZXNzb3Igb3IgdHJhbnNmb3JtZXIgaW5zdGFuY2UgPC90ZD48L3RyPgogICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+anBlZ0J1ZjwvdGQ+PHRkPnBvaW50ZXIgdG8gYSBidWZmZXIgY29udGFpbmluZyB0aGUgSlBFRyBpbWFnZSB0byBkZWNvbXByZXNzIDwvdGQ+PC90cj4KICAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPmpwZWdTaXplPC90ZD48dGQ+c2l6ZSBvZiB0aGUgSlBFRyBpbWFnZSAoaW4gYnl0ZXMpIDwvdGQ+PC90cj4KLSAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPmRzdEJ1ZjwvdGQ+PHRkPnBvaW50ZXIgdG8gYW4gaW1hZ2UgYnVmZmVyIHRoYXQgd2lsbCByZWNlaXZlIHRoZSBZVVYgaW1hZ2UuIFVzZSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhOWQwY2IwNmZkNTA1MmQyMWI2ZjJiMzgyZGI4YjIxOWMiIHRpdGxlPSJUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIChpbiBieXRlcykgcmVxdWlyZWQgdG8gaG9sZCBhIFlVViBwbGFuYXIgaW1hZ2Ugd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycy4uLiI+dGpCdWZTaXplWVVWPC9hPiB0byBkZXRlcm1pbmUgdGhlIGFwcHJvcHJpYXRlIHNpemUgZm9yIHRoaXMgYnVmZmVyIGJhc2VkIG9uIHRoZSBpbWFnZSB3aWR0aCwgaGVpZ2h0LCBhbmQgbGV2ZWwgb2Ygc3Vic2FtcGxpbmcuIDwvdGQ+PC90cj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPmRzdEJ1ZjwvdGQ+PHRkPnBvaW50ZXIgdG8gYW4gaW1hZ2UgYnVmZmVyIHRoYXQgd2lsbCByZWNlaXZlIHRoZSBZVVYgaW1hZ2UuIFVzZSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhOWQwY2IwNmZkNTA1MmQyMWI2ZjJiMzgyZGI4YjIxOWMiIHRpdGxlPSJUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIChpbiBieXRlcykgcmVxdWlyZWQgdG8gaG9sZCBhIFlVViBwbGFuYXIgaW1hZ2Ugd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycy4uLiI+dGpCdWZTaXplWVVWKCk8L2E+IHRvIGRldGVybWluZSB0aGUgYXBwcm9wcmlhdGUgc2l6ZSBmb3IgdGhpcyBidWZmZXIgYmFzZWQgb24gdGhlIGltYWdlIHdpZHRoLCBoZWlnaHQsIGFuZCBsZXZlbCBvZiBzdWJzYW1wbGluZy4gPC90ZD48L3RyPgogICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+ZmxhZ3M8L3RkPjx0ZD50aGUgYml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZiB0aGUgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTcyZWNmNGViZTZlYjcwMmQzYzZmNWNhMjc0NTVlMWVjIj5mbGFnczwvYT4uPC90ZD48L3RyPgogICA8L3RhYmxlPgogICA8L2RkPgogPC9kbD4KLTxkbCBjbGFzcz0icmV0dXJuIj48ZHQ+PGI+UmV0dXJuczo8L2I+PC9kdD48ZGQ+MCBpZiBzdWNjZXNzZnVsLCBvciAtMSBpZiBhbiBlcnJvciBvY2N1cnJlZCAoc2VlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E5YWY3OWM5MDhlYzEzMWIxYWU4ZDUyZmU0MDM3NWFiZiIgdGl0bGU9IlJldHVybnMgYSBkZXNjcmlwdGl2ZSBlcnJvciBtZXNzYWdlIGV4cGxhaW5pbmcgd2h5IHRoZSBsYXN0IGNvbW1hbmQgZmFpbGVkLiI+dGpHZXRFcnJvclN0cigpPC9hPi4pIDwvZGQ+PC9kbD4KKzxkbCBjbGFzcz0ic2VjdGlvbiByZXR1cm4iPjxkdD5SZXR1cm5zPC9kdD48ZGQ+MCBpZiBzdWNjZXNzZnVsLCBvciAtMSBpZiBhbiBlcnJvciBvY2N1cnJlZCAoc2VlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E5YWY3OWM5MDhlYzEzMWIxYWU4ZDUyZmU0MDM3NWFiZiIgdGl0bGU9IlJldHVybnMgYSBkZXNjcmlwdGl2ZSBlcnJvciBtZXNzYWdlIGV4cGxhaW5pbmcgd2h5IHRoZSBsYXN0IGNvbW1hbmQgZmFpbGVkLiI+dGpHZXRFcnJvclN0cigpPC9hPi4pIDwvZGQ+PC9kbD4KIAogPC9kaXY+CiA8L2Rpdj4KLTxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYTY3NGFkZWU5MTdiOTVhZDRhODk2ZjFiYTM5ZTEyNTQwIj48L2E+PCEtLSBkb3h5dGFnOiBtZW1iZXI9InR1cmJvanBlZy5oOjp0akRlc3Ryb3kiIHJlZj0iZ2E2NzRhZGVlOTE3Yjk1YWQ0YTg5NmYxYmEzOWUxMjU0MCIgYXJncz0iKHRqaGFuZGxlIGhhbmRsZSkiIC0tPgorPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdhNjc0YWRlZTkxN2I5NWFkNGE4OTZmMWJhMzllMTI1NDAiPjwvYT4KIDxkaXYgY2xhc3M9Im1lbWl0ZW0iPgogPGRpdiBjbGFzcz0ibWVtcHJvdG8iPgogICAgICAgPHRhYmxlIGNsYXNzPSJtZW1uYW1lIj4KQEAgLTExNTIsMjEgKzExOTcsMjAgQEAKICAgICAgICAgICA8dGQ+PC90ZD4KICAgICAgICAgPC90cj4KICAgICAgIDwvdGFibGU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9Im1lbWRvYyI+Cis8L2Rpdj48ZGl2IGNsYXNzPSJtZW1kb2MiPgogCiA8cD5EZXN0cm95IGEgVHVyYm9KUEVHIGNvbXByZXNzb3IsIGRlY29tcHJlc3Nvciwgb3IgdHJhbnNmb3JtZXIgaW5zdGFuY2UuIDwvcD4KLTxkbD48ZHQ+PGI+UGFyYW1ldGVyczo8L2I+PC9kdD48ZGQ+Cis8ZGwgY2xhc3M9InBhcmFtcyI+PGR0PlBhcmFtZXRlcnM8L2R0PjxkZD4KICAgPHRhYmxlIGNsYXNzPSJwYXJhbXMiPgogICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+aGFuZGxlPC90ZD48dGQ+YSBoYW5kbGUgdG8gYSBUdXJib0pQRUcgY29tcHJlc3NvciwgZGVjb21wcmVzc29yIG9yIHRyYW5zZm9ybWVyIGluc3RhbmNlPC90ZD48L3RyPgogICA8L3RhYmxlPgogICA8L2RkPgogPC9kbD4KLTxkbCBjbGFzcz0icmV0dXJuIj48ZHQ+PGI+UmV0dXJuczo8L2I+PC9kdD48ZGQ+MCBpZiBzdWNjZXNzZnVsLCBvciAtMSBpZiBhbiBlcnJvciBvY2N1cnJlZCAoc2VlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E5YWY3OWM5MDhlYzEzMWIxYWU4ZDUyZmU0MDM3NWFiZiIgdGl0bGU9IlJldHVybnMgYSBkZXNjcmlwdGl2ZSBlcnJvciBtZXNzYWdlIGV4cGxhaW5pbmcgd2h5IHRoZSBsYXN0IGNvbW1hbmQgZmFpbGVkLiI+dGpHZXRFcnJvclN0cigpPC9hPi4pIDwvZGQ+PC9kbD4KKzxkbCBjbGFzcz0ic2VjdGlvbiByZXR1cm4iPjxkdD5SZXR1cm5zPC9kdD48ZGQ+MCBpZiBzdWNjZXNzZnVsLCBvciAtMSBpZiBhbiBlcnJvciBvY2N1cnJlZCAoc2VlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E5YWY3OWM5MDhlYzEzMWIxYWU4ZDUyZmU0MDM3NWFiZiIgdGl0bGU9IlJldHVybnMgYSBkZXNjcmlwdGl2ZSBlcnJvciBtZXNzYWdlIGV4cGxhaW5pbmcgd2h5IHRoZSBsYXN0IGNvbW1hbmQgZmFpbGVkLiI+dGpHZXRFcnJvclN0cigpPC9hPi4pIDwvZGQ+PC9kbD4KIAogPC9kaXY+CiA8L2Rpdj4KLTxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYTBmYTRlN2IxOTQzNjg3YzZhMGMwMzA0NTI5YzU1ZDM1Ij48L2E+PCEtLSBkb3h5dGFnOiBtZW1iZXI9InR1cmJvanBlZy5oOjp0akVuY29kZVlVVjIiIHJlZj0iZ2EwZmE0ZTdiMTk0MzY4N2M2YTBjMDMwNDUyOWM1NWQzNSIgYXJncz0iKHRqaGFuZGxlIGhhbmRsZSwgdW5zaWduZWQgY2hhciAqc3JjQnVmLCBpbnQgd2lkdGgsIGludCBwaXRjaCwgaW50IGhlaWdodCwgaW50IHBpeGVsRm9ybWF0LCB1bnNpZ25lZCBjaGFyICpkc3RCdWYsIGludCBzdWJzYW1wLCBpbnQgZmxhZ3MpIiAtLT4KKzxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYTBmYTRlN2IxOTQzNjg3YzZhMGMwMzA0NTI5YzU1ZDM1Ij48L2E+CiA8ZGl2IGNsYXNzPSJtZW1pdGVtIj4KIDxkaXYgY2xhc3M9Im1lbXByb3RvIj4KICAgICAgIDx0YWJsZSBjbGFzcz0ibWVtbmFtZSI+CkBAIC0xMjMwLDEyICsxMjc0LDEyIEBACiAgICAgICAgICAgPHRkPjwvdGQ+PHRkPjwvdGQ+CiAgICAgICAgIDwvdHI+CiAgICAgICA8L3RhYmxlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJtZW1kb2MiPgorPC9kaXY+PGRpdiBjbGFzcz0ibWVtZG9jIj4KIAogPHA+RW5jb2RlIGFuIFJHQiBvciBncmF5c2NhbGUgaW1hZ2UgaW50byBhIFlVViBwbGFuYXIgaW1hZ2UuIDwvcD4KLTxwPlRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgYWNjZWxlcmF0ZWQgY29sb3IgY29udmVyc2lvbiByb3V0aW5lcyBpbiBUdXJib0pQRUcncyB1bmRlcmx5aW5nIGNvZGVjIHRvIHByb2R1Y2UgYSBwbGFuYXIgWVVWIGltYWdlIHRoYXQgaXMgc3VpdGFibGUgZm9yIFggVmlkZW8uIFNwZWNpZmljYWxseSwgaWYgdGhlIGNocm9taW5hbmNlIGNvbXBvbmVudHMgYXJlIHN1YnNhbXBsZWQgYWxvbmcgdGhlIGhvcml6b250YWwgZGltZW5zaW9uLCB0aGVuIHRoZSB3aWR0aCBvZiB0aGUgbHVtaW5hbmNlIHBsYW5lIGlzIHBhZGRlZCB0byAyIGluIHRoZSBvdXRwdXQgaW1hZ2UgKHNhbWUgZ29lcyBmb3IgdGhlIGhlaWdodCBvZiB0aGUgbHVtaW5hbmNlIHBsYW5lLCBpZiB0aGUgY2hyb21pbmFuY2UgY29tcG9uZW50cyBhcmUgc3Vic2FtcGxlZCBhbG9uZyB0aGUgdmVydGljYWwgZGltZW5zaW9uLikgQWxzbywgZWFjaCBsaW5lIG9mIGVhY2ggcGxhbmUgaW4gdGhlIG91dHB1dCBpbWFnZSBpcyBwYWRkZWQgdG8gNCBieXRlcy4gQWx0aG91Z2ggdGhpcyB3aWxsIHdvcmsgd2l0aCBhbnkgc3Vic2FtcGxpbmcgb3B0aW9uLCBpdCBpcyByZWFsbHkgb25seSB1c2VmdWwgaW4gY29tYmluYXRpb24gd2l0aCBUSl80MjAsIHdoaWNoIHByb2R1Y2VzIGFuIGltYWdlIGNvbXBhdGlibGUgd2l0aCB0aGUgSTQyMCAoQUtBICJZVVY0MjBQIikgZm9ybWF0LjwvcD4KLTxkbD48ZHQ+PGI+UGFyYW1ldGVyczo8L2I+PC9kdD48ZGQ+Cis8cD5UaGlzIGZ1bmN0aW9uIHVzZXMgdGhlIGFjY2VsZXJhdGVkIGNvbG9yIGNvbnZlcnNpb24gcm91dGluZXMgaW4gVHVyYm9KUEVHJ3MgdW5kZXJseWluZyBjb2RlYyB0byBwcm9kdWNlIGEgcGxhbmFyIFlVViBpbWFnZSB0aGF0IGlzIHN1aXRhYmxlIGZvciBYIFZpZGVvLiBTcGVjaWZpY2FsbHksIGlmIHRoZSBjaHJvbWluYW5jZSBjb21wb25lbnRzIGFyZSBzdWJzYW1wbGVkIGFsb25nIHRoZSBob3Jpem9udGFsIGRpbWVuc2lvbiwgdGhlbiB0aGUgd2lkdGggb2YgdGhlIGx1bWluYW5jZSBwbGFuZSBpcyBwYWRkZWQgdG8gdGhlIG5lYXJlc3QgbXVsdGlwbGUgb2YgMiBpbiB0aGUgb3V0cHV0IGltYWdlIChzYW1lIGdvZXMgZm9yIHRoZSBoZWlnaHQgb2YgdGhlIGx1bWluYW5jZSBwbGFuZSwgaWYgdGhlIGNocm9taW5hbmNlIGNvbXBvbmVudHMgYXJlIHN1YnNhbXBsZWQgYWxvbmcgdGhlIHZlcnRpY2FsIGRpbWVuc2lvbi4pIEFsc28sIGVhY2ggbGluZSBvZiBlYWNoIHBsYW5lIGluIHRoZSBvdXRwdXQgaW1hZ2UgaXMgcGFkZGVkIHRvIDQgYnl0ZXMuIEFsdGhvdWdoIHRoaXMgd2lsbCB3b3JrIHdpdGggYW55IHN1YnNhbXBsaW5nIG9wdGlvbiwgaXQgaXMgcmVhbGx5IG9ubHkgdXNlZnVsIGluIGNvbWJpbmF0aW9uIHdpdGggVEpfNDIwLCB3aGljaCBwcm9kdWNlcyBhbiBpbWFnZSBjb21wYXRpYmxlIHdpdGggdGhlIEk0MjAgKEFLQSAiWVVWNDIwUCIpIGZvcm1hdC4gPC9wPgorPGRsIGNsYXNzPSJzZWN0aW9uIG5vdGUiPjxkdD5Ob3RlPC9kdD48ZGQ+VGVjaG5pY2FsbHksIHRoZSBKUEVHIGZvcm1hdCB1c2VzIHRoZSBZQ2JDciBjb2xvcnNwYWNlLCBidXQgcGVyIHRoZSBjb252ZW50aW9uIG9mIHRoZSBkaWdpdGFsIHZpZGVvIGNvbW11bml0eSwgdGhlIFR1cmJvSlBFRyBBUEkgdXNlcyAiWVVWIiB0byByZWZlciB0byBhbiBpbWFnZSBmb3JtYXQgY29uc2lzdGluZyBvZiBZLCBDYiwgYW5kIENyIGltYWdlIHBsYW5lcy48L2RkPjwvZGw+Cis8ZGwgY2xhc3M9InBhcmFtcyI+PGR0PlBhcmFtZXRlcnM8L2R0PjxkZD4KICAgPHRhYmxlIGNsYXNzPSJwYXJhbXMiPgogICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+aGFuZGxlPC90ZD48dGQ+YSBoYW5kbGUgdG8gYSBUdXJib0pQRUcgY29tcHJlc3NvciBvciB0cmFuc2Zvcm1lciBpbnN0YW5jZSA8L3RkPjwvdHI+CiAgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5zcmNCdWY8L3RkPjx0ZD5wb2ludGVyIHRvIGFuIGltYWdlIGJ1ZmZlciBjb250YWluaW5nIFJHQiBvciBncmF5c2NhbGUgcGl4ZWxzIHRvIGJlIGVuY29kZWQgPC90ZD48L3RyPgpAQCAtMTI0OSwxMSArMTI5MywxMSBAQAogICA8L3RhYmxlPgogICA8L2RkPgogPC9kbD4KLTxkbCBjbGFzcz0icmV0dXJuIj48ZHQ+PGI+UmV0dXJuczo8L2I+PC9kdD48ZGQ+MCBpZiBzdWNjZXNzZnVsLCBvciAtMSBpZiBhbiBlcnJvciBvY2N1cnJlZCAoc2VlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E5YWY3OWM5MDhlYzEzMWIxYWU4ZDUyZmU0MDM3NWFiZiIgdGl0bGU9IlJldHVybnMgYSBkZXNjcmlwdGl2ZSBlcnJvciBtZXNzYWdlIGV4cGxhaW5pbmcgd2h5IHRoZSBsYXN0IGNvbW1hbmQgZmFpbGVkLiI+dGpHZXRFcnJvclN0cigpPC9hPi4pIDwvZGQ+PC9kbD4KKzxkbCBjbGFzcz0ic2VjdGlvbiByZXR1cm4iPjxkdD5SZXR1cm5zPC9kdD48ZGQ+MCBpZiBzdWNjZXNzZnVsLCBvciAtMSBpZiBhbiBlcnJvciBvY2N1cnJlZCAoc2VlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E5YWY3OWM5MDhlYzEzMWIxYWU4ZDUyZmU0MDM3NWFiZiIgdGl0bGU9IlJldHVybnMgYSBkZXNjcmlwdGl2ZSBlcnJvciBtZXNzYWdlIGV4cGxhaW5pbmcgd2h5IHRoZSBsYXN0IGNvbW1hbmQgZmFpbGVkLiI+dGpHZXRFcnJvclN0cigpPC9hPi4pIDwvZGQ+PC9kbD4KIAogPC9kaXY+CiA8L2Rpdj4KLTxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYThjNGExMjMxZGMwNmE0NTA1MTRjODM1ZjY0NzFmMTM3Ij48L2E+PCEtLSBkb3h5dGFnOiBtZW1iZXI9InR1cmJvanBlZy5oOjp0akZyZWUiIHJlZj0iZ2E4YzRhMTIzMWRjMDZhNDUwNTE0YzgzNWY2NDcxZjEzNyIgYXJncz0iKHVuc2lnbmVkIGNoYXIgKmJ1ZmZlcikiIC0tPgorPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdhOGM0YTEyMzFkYzA2YTQ1MDUxNGM4MzVmNjQ3MWYxMzciPjwvYT4KIDxkaXYgY2xhc3M9Im1lbWl0ZW0iPgogPGRpdiBjbGFzcz0ibWVtcHJvdG8iPgogICAgICAgPHRhYmxlIGNsYXNzPSJtZW1uYW1lIj4KQEAgLTEyNjUsMjIgKzEzMDksMjEgQEAKICAgICAgICAgICA8dGQ+PC90ZD4KICAgICAgICAgPC90cj4KICAgICAgIDwvdGFibGU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9Im1lbWRvYyI+Cis8L2Rpdj48ZGl2IGNsYXNzPSJtZW1kb2MiPgogCiA8cD5GcmVlIGFuIGltYWdlIGJ1ZmZlciBwcmV2aW91c2x5IGFsbG9jYXRlZCBieSBUdXJib0pQRUcuIDwvcD4KIDxwPllvdSBzaG91bGQgYWx3YXlzIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIGZyZWUgSlBFRyBkZXN0aW5hdGlvbiBidWZmZXIocykgdGhhdCB3ZXJlIGF1dG9tYXRpY2FsbHkgKHJlKWFsbG9jYXRlZCBieSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhYmE2MmI3YTk4Zjk2MDgzOWI1ODg1Nzk4OTg0OTVjZjIiIHRpdGxlPSJDb21wcmVzcyBhbiBSR0Igb3IgZ3JheXNjYWxlIGltYWdlIGludG8gYSBKUEVHIGltYWdlLiI+dGpDb21wcmVzczIoKTwvYT4gb3IgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWU0MDMxOTNjZWI0YWFmYjdlMGY1NmFiNTg3YjQ4NjE2IiB0aXRsZT0iTG9zc2xlc3NseSB0cmFuc2Zvcm0gYSBKUEVHIGltYWdlIGludG8gYW5vdGhlciBKUEVHIGltYWdlLiI+dGpUcmFuc2Zvcm0oKTwvYT4gb3IgdGhhdCB3ZXJlIG1hbnVhbGx5IGFsbG9jYXRlZCB1c2luZyA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNWM5MjM0YmRhNmQ5OTNjZGFmZmRkODliZjgxYTAwZmYiIHRpdGxlPSJBbGxvY2F0ZSBhbiBpbWFnZSBidWZmZXIgZm9yIHVzZSB3aXRoIFR1cmJvSlBFRy4iPnRqQWxsb2MoKTwvYT4uPC9wPgotPGRsPjxkdD48Yj5QYXJhbWV0ZXJzOjwvYj48L2R0PjxkZD4KKzxkbCBjbGFzcz0icGFyYW1zIj48ZHQ+UGFyYW1ldGVyczwvZHQ+PGRkPgogICA8dGFibGUgY2xhc3M9InBhcmFtcyI+CiAgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5idWZmZXI8L3RkPjx0ZD5hZGRyZXNzIG9mIHRoZSBidWZmZXIgdG8gZnJlZTwvdGQ+PC90cj4KICAgPC90YWJsZT4KICAgPC9kZD4KIDwvZGw+Ci08ZGwgY2xhc3M9InNlZSI+PGR0PjxiPlNlZSBhbHNvOjwvYj48L2R0PjxkZD48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNWM5MjM0YmRhNmQ5OTNjZGFmZmRkODliZjgxYTAwZmYiIHRpdGxlPSJBbGxvY2F0ZSBhbiBpbWFnZSBidWZmZXIgZm9yIHVzZSB3aXRoIFR1cmJvSlBFRy4iPnRqQWxsb2MoKTwvYT4gPC9kZD48L2RsPgorPGRsIGNsYXNzPSJzZWN0aW9uIHNlZSI+PGR0PlNlZSBBbHNvPC9kdD48ZGQ+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTVjOTIzNGJkYTZkOTkzY2RhZmZkZDg5YmY4MWEwMGZmIiB0aXRsZT0iQWxsb2NhdGUgYW4gaW1hZ2UgYnVmZmVyIGZvciB1c2Ugd2l0aCBUdXJib0pQRUcuIj50akFsbG9jKCk8L2E+IDwvZGQ+PC9kbD4KIAogPC9kaXY+CiA8L2Rpdj4KLTxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYTlhZjc5YzkwOGVjMTMxYjFhZThkNTJmZTQwMzc1YWJmIj48L2E+PCEtLSBkb3h5dGFnOiBtZW1iZXI9InR1cmJvanBlZy5oOjp0akdldEVycm9yU3RyIiByZWY9ImdhOWFmNzljOTA4ZWMxMzFiMWFlOGQ1MmZlNDAzNzVhYmYiIGFyZ3M9Iih2b2lkKSIgLS0+Cis8YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2E5YWY3OWM5MDhlYzEzMWIxYWU4ZDUyZmU0MDM3NWFiZiI+PC9hPgogPGRpdiBjbGFzcz0ibWVtaXRlbSI+CiA8ZGl2IGNsYXNzPSJtZW1wcm90byI+CiAgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgpAQCAtMTI5MiwxNSArMTMzNSwxNCBAQAogICAgICAgICAgIDx0ZD48L3RkPgogICAgICAgICA8L3RyPgogICAgICAgPC90YWJsZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0ibWVtZG9jIj4KKzwvZGl2PjxkaXYgY2xhc3M9Im1lbWRvYyI+CiAKIDxwPlJldHVybnMgYSBkZXNjcmlwdGl2ZSBlcnJvciBtZXNzYWdlIGV4cGxhaW5pbmcgd2h5IHRoZSBsYXN0IGNvbW1hbmQgZmFpbGVkLiA8L3A+Ci08ZGwgY2xhc3M9InJldHVybiI+PGR0PjxiPlJldHVybnM6PC9iPjwvZHQ+PGRkPmEgZGVzY3JpcHRpdmUgZXJyb3IgbWVzc2FnZSBleHBsYWluaW5nIHdoeSB0aGUgbGFzdCBjb21tYW5kIGZhaWxlZC4gPC9kZD48L2RsPgorPGRsIGNsYXNzPSJzZWN0aW9uIHJldHVybiI+PGR0PlJldHVybnM8L2R0PjxkZD5hIGRlc2NyaXB0aXZlIGVycm9yIG1lc3NhZ2UgZXhwbGFpbmluZyB3aHkgdGhlIGxhc3QgY29tbWFuZCBmYWlsZWQuIDwvZGQ+PC9kbD4KIAogPC9kaXY+CiA8L2Rpdj4KLTxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYTY0NDkwNDRiOWFmNDAyOTk5Y2NmNTJmNDAxMzMzYmU4Ij48L2E+PCEtLSBkb3h5dGFnOiBtZW1iZXI9InR1cmJvanBlZy5oOjp0akdldFNjYWxpbmdGYWN0b3JzIiByZWY9ImdhNjQ0OTA0NGI5YWY0MDI5OTljY2Y1MmY0MDEzMzNiZTgiIGFyZ3M9IihpbnQgKm51bXNjYWxpbmdmYWN0b3JzKSIgLS0+Cis8YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2E2NDQ5MDQ0YjlhZjQwMjk5OWNjZjUyZjQwMTMzM2JlOCI+PC9hPgogPGRpdiBjbGFzcz0ibWVtaXRlbSI+CiA8ZGl2IGNsYXNzPSJtZW1wcm90byI+CiAgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgpAQCAtMTMxMiwyMSArMTM1NCwyMCBAQAogICAgICAgICAgIDx0ZD48L3RkPgogICAgICAgICA8L3RyPgogICAgICAgPC90YWJsZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0ibWVtZG9jIj4KKzwvZGl2PjxkaXYgY2xhc3M9Im1lbWRvYyI+CiAKIDxwPlJldHVybnMgYSBsaXN0IG9mIGZyYWN0aW9uYWwgc2NhbGluZyBmYWN0b3JzIHRoYXQgdGhlIEpQRUcgZGVjb21wcmVzc29yIGluIHRoaXMgaW1wbGVtZW50YXRpb24gb2YgVHVyYm9KUEVHIHN1cHBvcnRzLiA8L3A+Ci08ZGw+PGR0PjxiPlBhcmFtZXRlcnM6PC9iPjwvZHQ+PGRkPgorPGRsIGNsYXNzPSJwYXJhbXMiPjxkdD5QYXJhbWV0ZXJzPC9kdD48ZGQ+CiAgIDx0YWJsZSBjbGFzcz0icGFyYW1zIj4KICAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPm51bXNjYWxpbmdmYWN0b3JzPC90ZD48dGQ+cG9pbnRlciB0byBhbiBpbnRlZ2VyIHZhcmlhYmxlIHRoYXQgd2lsbCByZWNlaXZlIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGxpc3Q8L3RkPjwvdHI+CiAgIDwvdGFibGU+CiAgIDwvZGQ+CiA8L2RsPgotPGRsIGNsYXNzPSJyZXR1cm4iPjxkdD48Yj5SZXR1cm5zOjwvYj48L2R0PjxkZD5hIHBvaW50ZXIgdG8gYSBsaXN0IG9mIGZyYWN0aW9uYWwgc2NhbGluZyBmYWN0b3JzLCBvciBOVUxMIGlmIGFuIGVycm9yIGlzIGVuY291bnRlcmVkIChzZWUgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTlhZjc5YzkwOGVjMTMxYjFhZThkNTJmZTQwMzc1YWJmIiB0aXRsZT0iUmV0dXJucyBhIGRlc2NyaXB0aXZlIGVycm9yIG1lc3NhZ2UgZXhwbGFpbmluZyB3aHkgdGhlIGxhc3QgY29tbWFuZCBmYWlsZWQuIj50akdldEVycm9yU3RyKCk8L2E+LikgPC9kZD48L2RsPgorPGRsIGNsYXNzPSJzZWN0aW9uIHJldHVybiI+PGR0PlJldHVybnM8L2R0PjxkZD5hIHBvaW50ZXIgdG8gYSBsaXN0IG9mIGZyYWN0aW9uYWwgc2NhbGluZyBmYWN0b3JzLCBvciBOVUxMIGlmIGFuIGVycm9yIGlzIGVuY291bnRlcmVkIChzZWUgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTlhZjc5YzkwOGVjMTMxYjFhZThkNTJmZTQwMzc1YWJmIiB0aXRsZT0iUmV0dXJucyBhIGRlc2NyaXB0aXZlIGVycm9yIG1lc3NhZ2UgZXhwbGFpbmluZyB3aHkgdGhlIGxhc3QgY29tbWFuZCBmYWlsZWQuIj50akdldEVycm9yU3RyKCk8L2E+LikgPC9kZD48L2RsPgogCiA8L2Rpdj4KIDwvZGl2PgotPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdhM2QxMGM0N2ZiZTRhMjQ4OWEyYjMwYzkzMTU1MWQwMWEiPjwvYT48IS0tIGRveHl0YWc6IG1lbWJlcj0idHVyYm9qcGVnLmg6OnRqSW5pdENvbXByZXNzIiByZWY9ImdhM2QxMGM0N2ZiZTRhMjQ4OWEyYjMwYzkzMTU1MWQwMWEiIGFyZ3M9Iih2b2lkKSIgLS0+Cis8YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2EzZDEwYzQ3ZmJlNGEyNDg5YTJiMzBjOTMxNTUxZDAxYSI+PC9hPgogPGRpdiBjbGFzcz0ibWVtaXRlbSI+CiA8ZGl2IGNsYXNzPSJtZW1wcm90byI+CiAgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgpAQCAtMTMzOCwxNSArMTM3OSwxNCBAQAogICAgICAgICAgIDx0ZD48L3RkPgogICAgICAgICA8L3RyPgogICAgICAgPC90YWJsZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0ibWVtZG9jIj4KKzwvZGl2PjxkaXYgY2xhc3M9Im1lbWRvYyI+CiAKIDxwPkNyZWF0ZSBhIFR1cmJvSlBFRyBjb21wcmVzc29yIGluc3RhbmNlLiA8L3A+Ci08ZGwgY2xhc3M9InJldHVybiI+PGR0PjxiPlJldHVybnM6PC9iPjwvZHQ+PGRkPmEgaGFuZGxlIHRvIHRoZSBuZXdseS1jcmVhdGVkIGluc3RhbmNlLCBvciBOVUxMIGlmIGFuIGVycm9yIG9jY3VycmVkIChzZWUgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTlhZjc5YzkwOGVjMTMxYjFhZThkNTJmZTQwMzc1YWJmIiB0aXRsZT0iUmV0dXJucyBhIGRlc2NyaXB0aXZlIGVycm9yIG1lc3NhZ2UgZXhwbGFpbmluZyB3aHkgdGhlIGxhc3QgY29tbWFuZCBmYWlsZWQuIj50akdldEVycm9yU3RyKCk8L2E+LikgPC9kZD48L2RsPgorPGRsIGNsYXNzPSJzZWN0aW9uIHJldHVybiI+PGR0PlJldHVybnM8L2R0PjxkZD5hIGhhbmRsZSB0byB0aGUgbmV3bHktY3JlYXRlZCBpbnN0YW5jZSwgb3IgTlVMTCBpZiBhbiBlcnJvciBvY2N1cnJlZCAoc2VlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E5YWY3OWM5MDhlYzEzMWIxYWU4ZDUyZmU0MDM3NWFiZiIgdGl0bGU9IlJldHVybnMgYSBkZXNjcmlwdGl2ZSBlcnJvciBtZXNzYWdlIGV4cGxhaW5pbmcgd2h5IHRoZSBsYXN0IGNvbW1hbmQgZmFpbGVkLiI+dGpHZXRFcnJvclN0cigpPC9hPi4pIDwvZGQ+PC9kbD4KIAogPC9kaXY+CiA8L2Rpdj4KLTxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYWU1NDA4MTc5ZDA0MWUyYTJmNzE5OWM4MjgzY2Y2NDllIj48L2E+PCEtLSBkb3h5dGFnOiBtZW1iZXI9InR1cmJvanBlZy5oOjp0akluaXREZWNvbXByZXNzIiByZWY9ImdhZTU0MDgxNzlkMDQxZTJhMmY3MTk5YzgyODNjZjY0OWUiIGFyZ3M9Iih2b2lkKSIgLS0+Cis8YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2FlNTQwODE3OWQwNDFlMmEyZjcxOTljODI4M2NmNjQ5ZSI+PC9hPgogPGRpdiBjbGFzcz0ibWVtaXRlbSI+CiA8ZGl2IGNsYXNzPSJtZW1wcm90byI+CiAgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgpAQCAtMTM1OCwxNSArMTM5OCwxNCBAQAogICAgICAgICAgIDx0ZD48L3RkPgogICAgICAgICA8L3RyPgogICAgICAgPC90YWJsZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0ibWVtZG9jIj4KKzwvZGl2PjxkaXYgY2xhc3M9Im1lbWRvYyI+CiAKIDxwPkNyZWF0ZSBhIFR1cmJvSlBFRyBkZWNvbXByZXNzb3IgaW5zdGFuY2UuIDwvcD4KLTxkbCBjbGFzcz0icmV0dXJuIj48ZHQ+PGI+UmV0dXJuczo8L2I+PC9kdD48ZGQ+YSBoYW5kbGUgdG8gdGhlIG5ld2x5LWNyZWF0ZWQgaW5zdGFuY2UsIG9yIE5VTEwgaWYgYW4gZXJyb3Igb2NjdXJyZWQgKHNlZSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhOWFmNzljOTA4ZWMxMzFiMWFlOGQ1MmZlNDAzNzVhYmYiIHRpdGxlPSJSZXR1cm5zIGEgZGVzY3JpcHRpdmUgZXJyb3IgbWVzc2FnZSBleHBsYWluaW5nIHdoeSB0aGUgbGFzdCBjb21tYW5kIGZhaWxlZC4iPnRqR2V0RXJyb3JTdHIoKTwvYT4uKSA8L2RkPjwvZGw+Cis8ZGwgY2xhc3M9InNlY3Rpb24gcmV0dXJuIj48ZHQ+UmV0dXJuczwvZHQ+PGRkPmEgaGFuZGxlIHRvIHRoZSBuZXdseS1jcmVhdGVkIGluc3RhbmNlLCBvciBOVUxMIGlmIGFuIGVycm9yIG9jY3VycmVkIChzZWUgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTlhZjc5YzkwOGVjMTMxYjFhZThkNTJmZTQwMzc1YWJmIiB0aXRsZT0iUmV0dXJucyBhIGRlc2NyaXB0aXZlIGVycm9yIG1lc3NhZ2UgZXhwbGFpbmluZyB3aHkgdGhlIGxhc3QgY29tbWFuZCBmYWlsZWQuIj50akdldEVycm9yU3RyKCk8L2E+LikgPC9kZD48L2RsPgogCiA8L2Rpdj4KIDwvZGl2PgotPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdhMzE1NWI3NzViZmJhYzlkYmJhODY5Yjk1YTAzNjc5MDIiPjwvYT48IS0tIGRveHl0YWc6IG1lbWJlcj0idHVyYm9qcGVnLmg6OnRqSW5pdFRyYW5zZm9ybSIgcmVmPSJnYTMxNTViNzc1YmZiYWM5ZGJiYTg2OWI5NWEwMzY3OTAyIiBhcmdzPSIodm9pZCkiIC0tPgorPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdhMzE1NWI3NzViZmJhYzlkYmJhODY5Yjk1YTAzNjc5MDIiPjwvYT4KIDxkaXYgY2xhc3M9Im1lbWl0ZW0iPgogPGRpdiBjbGFzcz0ibWVtcHJvdG8iPgogICAgICAgPHRhYmxlIGNsYXNzPSJtZW1uYW1lIj4KQEAgLTEzNzgsMTUgKzE0MTcsMTQgQEAKICAgICAgICAgICA8dGQ+PC90ZD4KICAgICAgICAgPC90cj4KICAgICAgIDwvdGFibGU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9Im1lbWRvYyI+Cis8L2Rpdj48ZGl2IGNsYXNzPSJtZW1kb2MiPgogCiA8cD5DcmVhdGUgYSBuZXcgVHVyYm9KUEVHIHRyYW5zZm9ybWVyIGluc3RhbmNlLiA8L3A+Ci08ZGwgY2xhc3M9InJldHVybiI+PGR0PjxiPlJldHVybnM6PC9iPjwvZHQ+PGRkPmEgaGFuZGxlIHRvIHRoZSBuZXdseS1jcmVhdGVkIGluc3RhbmNlLCBvciBOVUxMIGlmIGFuIGVycm9yIG9jY3VycmVkIChzZWUgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTlhZjc5YzkwOGVjMTMxYjFhZThkNTJmZTQwMzc1YWJmIiB0aXRsZT0iUmV0dXJucyBhIGRlc2NyaXB0aXZlIGVycm9yIG1lc3NhZ2UgZXhwbGFpbmluZyB3aHkgdGhlIGxhc3QgY29tbWFuZCBmYWlsZWQuIj50akdldEVycm9yU3RyKCk8L2E+LikgPC9kZD48L2RsPgorPGRsIGNsYXNzPSJzZWN0aW9uIHJldHVybiI+PGR0PlJldHVybnM8L2R0PjxkZD5hIGhhbmRsZSB0byB0aGUgbmV3bHktY3JlYXRlZCBpbnN0YW5jZSwgb3IgTlVMTCBpZiBhbiBlcnJvciBvY2N1cnJlZCAoc2VlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E5YWY3OWM5MDhlYzEzMWIxYWU4ZDUyZmU0MDM3NWFiZiIgdGl0bGU9IlJldHVybnMgYSBkZXNjcmlwdGl2ZSBlcnJvciBtZXNzYWdlIGV4cGxhaW5pbmcgd2h5IHRoZSBsYXN0IGNvbW1hbmQgZmFpbGVkLiI+dGpHZXRFcnJvclN0cigpPC9hPi4pIDwvZGQ+PC9kbD4KIAogPC9kaXY+CiA8L2Rpdj4KLTxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYWU0MDMxOTNjZWI0YWFmYjdlMGY1NmFiNTg3YjQ4NjE2Ij48L2E+PCEtLSBkb3h5dGFnOiBtZW1iZXI9InR1cmJvanBlZy5oOjp0alRyYW5zZm9ybSIgcmVmPSJnYWU0MDMxOTNjZWI0YWFmYjdlMGY1NmFiNTg3YjQ4NjE2IiBhcmdzPSIodGpoYW5kbGUgaGFuZGxlLCB1bnNpZ25lZCBjaGFyICpqcGVnQnVmLCB1bnNpZ25lZCBsb25nIGpwZWdTaXplLCBpbnQgbiwgdW5zaWduZWQgY2hhciAqKmRzdEJ1ZnMsIHVuc2lnbmVkIGxvbmcgKmRzdFNpemVzLCB0anRyYW5zZm9ybSAqdHJhbnNmb3JtcywgaW50IGZsYWdzKSIgLS0+Cis8YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2FlNDAzMTkzY2ViNGFhZmI3ZTBmNTZhYjU4N2I0ODYxNiI+PC9hPgogPGRpdiBjbGFzcz0ibWVtaXRlbSI+CiA8ZGl2IGNsYXNzPSJtZW1wcm90byI+CiAgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgpAQCAtMTQ0NCwxMiArMTQ4MiwxMSBAQAogICAgICAgICAgIDx0ZD48L3RkPjx0ZD48L3RkPgogICAgICAgICA8L3RyPgogICAgICAgPC90YWJsZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0ibWVtZG9jIj4KKzwvZGl2PjxkaXYgY2xhc3M9Im1lbWRvYyI+CiAKIDxwPkxvc3NsZXNzbHkgdHJhbnNmb3JtIGEgSlBFRyBpbWFnZSBpbnRvIGFub3RoZXIgSlBFRyBpbWFnZS4gPC9wPgotPHA+TG9zc2xlc3MgdHJhbnNmb3JtcyB3b3JrIGJ5IG1vdmluZyB0aGUgcmF3IGNvZWZmaWNpZW50cyBmcm9tIG9uZSBKUEVHIGltYWdlIHN0cnVjdHVyZSB0byBhbm90aGVyIHdpdGhvdXQgYWx0ZXJpbmcgdGhlIHZhbHVlcyBvZiB0aGUgY29lZmZpY2llbnRzLiBXaGlsZSB0aGlzIGlzIHR5cGljYWxseSBmYXN0ZXIgdGhhbiBkZWNvbXByZXNzaW5nIHRoZSBpbWFnZSwgdHJhbnNmb3JtaW5nIGl0LCBhbmQgcmUtY29tcHJlc3NpbmcgaXQsIGxvc3NsZXNzIHRyYW5zZm9ybXMgYXJlIG5vdCBmcmVlLiBFYWNoIGxvc3NsZXNzIHRyYW5zZm9ybSByZXF1aXJlcyByZWFkaW5nIGFuZCBIdWZmbWFuIGRlY29kaW5nIGFsbCBvZiB0aGUgY29lZmZpY2llbnRzIGluIHRoZSBzb3VyY2UgaW1hZ2UsIHJlZ2FyZGxlc3Mgb2YgdGhlIHNpemUgb2YgdGhlIGRlc3RpbmF0aW9uIGltYWdlLiBUaHVzLCB0aGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGEgbWVhbnMgb2YgZ2VuZXJhdGluZyBtdWx0aXBsZSB0cmFuc2Zvcm1lZCBpbWFnZXMgZnJvbSB0aGUgc2FtZSBzb3VyY2Ugb3Igb2YgYXBwbHlpbmcgbXVsdGlwbGUgdHJhbnNmb3JtYXRpb25zIHNpbXVsdGFuZW91c2x5LCBpbiBvcmRlciB0byBlbGltaW5hdGUgdGhlIG5lZWQgdG8gcmVhZCB0aGUgc291cmNlIGNvZWZmaWNpZW50cyBtdWx0aXBsZSB0aW1lcy48L3A+Ci08ZGw+PGR0PjxiPlBhcmFtZXRlcnM6PC9iPjwvZHQ+PGRkPgorPHA+TG9zc2xlc3MgdHJhbnNmb3JtcyB3b3JrIGJ5IG1vdmluZyB0aGUgcmF3IGNvZWZmaWNpZW50cyBmcm9tIG9uZSBKUEVHIGltYWdlIHN0cnVjdHVyZSB0byBhbm90aGVyIHdpdGhvdXQgYWx0ZXJpbmcgdGhlIHZhbHVlcyBvZiB0aGUgY29lZmZpY2llbnRzLiBXaGlsZSB0aGlzIGlzIHR5cGljYWxseSBmYXN0ZXIgdGhhbiBkZWNvbXByZXNzaW5nIHRoZSBpbWFnZSwgdHJhbnNmb3JtaW5nIGl0LCBhbmQgcmUtY29tcHJlc3NpbmcgaXQsIGxvc3NsZXNzIHRyYW5zZm9ybXMgYXJlIG5vdCBmcmVlLiBFYWNoIGxvc3NsZXNzIHRyYW5zZm9ybSByZXF1aXJlcyByZWFkaW5nIGFuZCBwZXJmb3JtaW5nIEh1ZmZtYW4gZGVjb2Rpbmcgb24gYWxsIG9mIHRoZSBjb2VmZmljaWVudHMgaW4gdGhlIHNvdXJjZSBpbWFnZSwgcmVnYXJkbGVzcyBvZiB0aGUgc2l6ZSBvZiB0aGUgZGVzdGluYXRpb24gaW1hZ2UuIFRodXMsIHRoaXMgZnVuY3Rpb24gcHJvdmlkZXMgYSBtZWFucyBvZiBnZW5lcmF0aW5nIG11bHRpcGxlIHRyYW5zZm9ybWVkIGltYWdlcyBmcm9tIHRoZSBzYW1lIHNvdXJjZSBvciBhcHBseWluZyBtdWx0aXBsZSB0cmFuc2Zvcm1hdGlvbnMgc2ltdWx0YW5lb3VzbHksIGluIG9yZGVyIHRvIGVsaW1pbmF0ZSB0aGUgbmVlZCB0byByZWFkIHRoZSBzb3VyY2UgY29lZmZpY2llbnRzIG11bHRpcGxlIHRpbWVzLjwvcD4KKzxkbCBjbGFzcz0icGFyYW1zIj48ZHQ+UGFyYW1ldGVyczwvZHQ+PGRkPgogICA8dGFibGUgY2xhc3M9InBhcmFtcyI+CiAgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5oYW5kbGU8L3RkPjx0ZD5hIGhhbmRsZSB0byBhIFR1cmJvSlBFRyB0cmFuc2Zvcm1lciBpbnN0YW5jZSA8L3RkPjwvdHI+CiAgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5qcGVnQnVmPC90ZD48dGQ+cG9pbnRlciB0byBhIGJ1ZmZlciBjb250YWluaW5nIHRoZSBKUEVHIGltYWdlIHRvIHRyYW5zZm9ybSA8L3RkPjwvdHI+CkBAIC0xNDU4LDYyICsxNDk1LDgzIEBACiAgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5kc3RCdWZzPC90ZD48dGQ+cG9pbnRlciB0byBhbiBhcnJheSBvZiBuIGltYWdlIGJ1ZmZlcnMuIDxjb2RlPmRzdEJ1ZnNbaV08L2NvZGU+IHdpbGwgcmVjZWl2ZSBhIEpQRUcgaW1hZ2UgdGhhdCBoYXMgYmVlbiB0cmFuc2Zvcm1lZCB1c2luZyB0aGUgcGFyYW1ldGVycyBpbiA8Y29kZT50cmFuc2Zvcm1zW2ldPC9jb2RlPi4gVHVyYm9KUEVHIGhhcyB0aGUgYWJpbGl0eSB0byByZWFsbG9jYXRlIHRoZSBKUEVHIGJ1ZmZlciB0byBhY2NvbW1vZGF0ZSB0aGUgc2l6ZSBvZiB0aGUgSlBFRyBpbWFnZS4gVGh1cywgeW91IGNhbiBjaG9vc2UgdG86PG9sIHR5cGU9IjEiPgogPGxpPnByZS1hbGxvY2F0ZSB0aGUgSlBFRyBidWZmZXIgd2l0aCBhbiBhcmJpdHJhcnkgc2l6ZSB1c2luZyA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNWM5MjM0YmRhNmQ5OTNjZGFmZmRkODliZjgxYTAwZmYiIHRpdGxlPSJBbGxvY2F0ZSBhbiBpbWFnZSBidWZmZXIgZm9yIHVzZSB3aXRoIFR1cmJvSlBFRy4iPnRqQWxsb2MoKTwvYT4gYW5kIGxldCBUdXJib0pQRUcgZ3JvdyB0aGUgYnVmZmVyIGFzIG5lZWRlZCw8L2xpPgogPGxpPnNldCA8Y29kZT5kc3RCdWZzW2ldPC9jb2RlPiB0byBOVUxMIHRvIHRlbGwgVHVyYm9KUEVHIHRvIGFsbG9jYXRlIHRoZSBidWZmZXIgZm9yIHlvdSwgb3I8L2xpPgotPGxpPnByZS1hbGxvY2F0ZSB0aGUgYnVmZmVyIHRvIGEgIndvcnN0IGNhc2UiIHNpemUgZGV0ZXJtaW5lZCBieSBjYWxsaW5nIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FjY2M1YmNhN2YxMmZjZGNjMzAyZTZlMWM2ZDRiMzExYiIgdGl0bGU9IlRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIGJ1ZmZlciAoaW4gYnl0ZXMpIHJlcXVpcmVkIHRvIGhvbGQgYSBKUEVHIGltYWdlIHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnMuLi4iPnRqQnVmU2l6ZSgpPC9hPiB3aXRoIHRoZSBjcm9wcGVkIHdpZHRoIGFuZCBoZWlnaHQuIFRoaXMgc2hvdWxkIGVuc3VyZSB0aGF0IHRoZSBidWZmZXIgbmV2ZXIgaGFzIHRvIGJlIHJlLWFsbG9jYXRlZCAoc2V0dGluZyA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhODgwOGQ0MDNjNjhiNjJhYWE1OGE0YzFlNThlOTg5NjMiIHRpdGxlPSJEaXNhYmxlIGJ1ZmZlciAocmUpYWxsb2NhdGlvbi4iPlRKRkxBR19OT1JFQUxMT0M8L2E+IGd1YXJhbnRlZXMgdGhpcy4pPC9saT4KKzxsaT5wcmUtYWxsb2NhdGUgdGhlIGJ1ZmZlciB0byBhICJ3b3JzdCBjYXNlIiBzaXplIGRldGVybWluZWQgYnkgY2FsbGluZyA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhY2NjNWJjYTdmMTJmY2RjYzMwMmU2ZTFjNmQ0YjMxMWIiIHRpdGxlPSJUaGUgbWF4aW11bSBzaXplIG9mIHRoZSBidWZmZXIgKGluIGJ5dGVzKSByZXF1aXJlZCB0byBob2xkIGEgSlBFRyBpbWFnZSB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLi4uIj50akJ1ZlNpemUoKTwvYT4gd2l0aCB0aGUgdHJhbnNmb3JtZWQgb3IgY3JvcHBlZCB3aWR0aCBhbmQgaGVpZ2h0LiBUaGlzIHNob3VsZCBlbnN1cmUgdGhhdCB0aGUgYnVmZmVyIG5ldmVyIGhhcyB0byBiZSByZS1hbGxvY2F0ZWQgKHNldHRpbmcgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTg4MDhkNDAzYzY4YjYyYWFhNThhNGMxZTU4ZTk4OTYzIiB0aXRsZT0iRGlzYWJsZSBidWZmZXIgKHJlKWFsbG9jYXRpb24uIj5USkZMQUdfTk9SRUFMTE9DPC9hPiBndWFyYW50ZWVzIHRoaXMuKTwvbGk+CiA8L29sPgogSWYgeW91IGNob29zZSBvcHRpb24gMSwgPGNvZGU+ZHN0U2l6ZXNbaV08L2NvZGU+IHNob3VsZCBiZSBzZXQgdG8gdGhlIHNpemUgb2YgeW91ciBwcmUtYWxsb2NhdGVkIGJ1ZmZlci4gSW4gYW55IGNhc2UsIHVubGVzcyB5b3UgaGF2ZSBzZXQgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTg4MDhkNDAzYzY4YjYyYWFhNThhNGMxZTU4ZTk4OTYzIiB0aXRsZT0iRGlzYWJsZSBidWZmZXIgKHJlKWFsbG9jYXRpb24uIj5USkZMQUdfTk9SRUFMTE9DPC9hPiwgeW91IHNob3VsZCBhbHdheXMgY2hlY2sgPGNvZGU+ZHN0QnVmc1tpXTwvY29kZT4gdXBvbiByZXR1cm4gZnJvbSB0aGlzIGZ1bmN0aW9uLCBhcyBpdCBtYXkgaGF2ZSBjaGFuZ2VkLiA8L3RkPjwvdHI+CiAgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5kc3RTaXplczwvdGQ+PHRkPnBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgbiB1bnNpZ25lZCBsb25nIHZhcmlhYmxlcyB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUgYWN0dWFsIHNpemVzIChpbiBieXRlcykgb2YgZWFjaCB0cmFuc2Zvcm1lZCBKUEVHIGltYWdlLiBJZiA8Y29kZT5kc3RCdWZzW2ldPC9jb2RlPiBwb2ludHMgdG8gYSBwcmUtYWxsb2NhdGVkIGJ1ZmZlciwgdGhlbiA8Y29kZT5kc3RTaXplc1tpXTwvY29kZT4gc2hvdWxkIGJlIHNldCB0byB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyLiBVcG9uIHJldHVybiwgPGNvZGU+ZHN0U2l6ZXNbaV08L2NvZGU+IHdpbGwgY29udGFpbiB0aGUgc2l6ZSBvZiB0aGUgSlBFRyBpbWFnZSAoaW4gYnl0ZXMuKSA8L3RkPjwvdHI+Ci0gICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj50cmFuc2Zvcm1zPC90ZD48dGQ+cG9pbnRlciB0byBhbiBhcnJheSBvZiBuIHRqdHJhbnNmb3JtIHN0cnVjdHVyZXMsIGVhY2ggb2Ygd2hpY2ggc3BlY2lmaWVzIHRoZSB0cmFuc2Zvcm0gcGFyYW1ldGVycyBhbmQvb3IgY3JvcHBpbmcgcmVnaW9uIGZvciB0aGUgY29ycmVzcG9uZGluZyB0cmFuc2Zvcm1lZCBvdXRwdXQgaW1hZ2UuIDwvdGQ+PC90cj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPnRyYW5zZm9ybXM8L3RkPjx0ZD5wb2ludGVyIHRvIGFuIGFycmF5IG9mIG4gPGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anRyYW5zZm9ybS5odG1sIiB0aXRsZT0iTG9zc2xlc3MgdHJhbnNmb3JtLiI+dGp0cmFuc2Zvcm08L2E+IHN0cnVjdHVyZXMsIGVhY2ggb2Ygd2hpY2ggc3BlY2lmaWVzIHRoZSB0cmFuc2Zvcm0gcGFyYW1ldGVycyBhbmQvb3IgY3JvcHBpbmcgcmVnaW9uIGZvciB0aGUgY29ycmVzcG9uZGluZyB0cmFuc2Zvcm1lZCBvdXRwdXQgaW1hZ2UuIDwvdGQ+PC90cj4KICAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPmZsYWdzPC90ZD48dGQ+dGhlIGJpdHdpc2UgT1Igb2Ygb25lIG9yIG1vcmUgb2YgdGhlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E3MmVjZjRlYmU2ZWI3MDJkM2M2ZjVjYTI3NDU1ZTFlYyI+ZmxhZ3M8L2E+LjwvdGQ+PC90cj4KICAgPC90YWJsZT4KICAgPC9kZD4KIDwvZGw+Ci08ZGwgY2xhc3M9InJldHVybiI+PGR0PjxiPlJldHVybnM6PC9iPjwvZHQ+PGRkPjAgaWYgc3VjY2Vzc2Z1bCwgb3IgLTEgaWYgYW4gZXJyb3Igb2NjdXJyZWQgKHNlZSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhOWFmNzljOTA4ZWMxMzFiMWFlOGQ1MmZlNDAzNzVhYmYiIHRpdGxlPSJSZXR1cm5zIGEgZGVzY3JpcHRpdmUgZXJyb3IgbWVzc2FnZSBleHBsYWluaW5nIHdoeSB0aGUgbGFzdCBjb21tYW5kIGZhaWxlZC4iPnRqR2V0RXJyb3JTdHIoKTwvYT4uKSA8L2RkPjwvZGw+Cis8ZGwgY2xhc3M9InNlY3Rpb24gcmV0dXJuIj48ZHQ+UmV0dXJuczwvZHQ+PGRkPjAgaWYgc3VjY2Vzc2Z1bCwgb3IgLTEgaWYgYW4gZXJyb3Igb2NjdXJyZWQgKHNlZSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhOWFmNzljOTA4ZWMxMzFiMWFlOGQ1MmZlNDAzNzVhYmYiIHRpdGxlPSJSZXR1cm5zIGEgZGVzY3JpcHRpdmUgZXJyb3IgbWVzc2FnZSBleHBsYWluaW5nIHdoeSB0aGUgbGFzdCBjb21tYW5kIGZhaWxlZC4iPnRqR2V0RXJyb3JTdHIoKTwvYT4uKSA8L2RkPjwvZGw+CiAKIDwvZGl2PgogPC9kaXY+Ci08aHIvPjxoMj5WYXJpYWJsZSBEb2N1bWVudGF0aW9uPC9oMj4KLTxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYTg0ZTJlMzVkM2YwODAyNWY5NzZlYzFlYzUzNjkzZGVhIj48L2E+PCEtLSBkb3h5dGFnOiBtZW1iZXI9InR1cmJvanBlZy5oOjp0akJsdWVPZmZzZXQiIHJlZj0iZ2E4NGUyZTM1ZDNmMDgwMjVmOTc2ZWMxZWM1MzY5M2RlYSIgYXJncz0iW1RKX05VTVBGXSIgLS0+Cis8aDIgY2xhc3M9Imdyb3VwaGVhZGVyIj5WYXJpYWJsZSBEb2N1bWVudGF0aW9uPC9oMj4KKzxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYTg0ZTJlMzVkM2YwODAyNWY5NzZlYzFlYzUzNjkzZGVhIj48L2E+CiA8ZGl2IGNsYXNzPSJtZW1pdGVtIj4KIDxkaXYgY2xhc3M9Im1lbXByb3RvIj4KKzx0YWJsZSBjbGFzcz0ibWxhYmVscyI+CisgIDx0cj4KKyAgPHRkIGNsYXNzPSJtbGFiZWxzLWxlZnQiPgogICAgICAgPHRhYmxlIGNsYXNzPSJtZW1uYW1lIj4KICAgICAgICAgPHRyPgotICAgICAgICAgIDx0ZCBjbGFzcz0ibWVtbmFtZSI+Y29uc3QgaW50IDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E4NGUyZTM1ZDNmMDgwMjVmOTc2ZWMxZWM1MzY5M2RlYSI+dGpCbHVlT2Zmc2V0PC9hPltUSl9OVU1QRl08Y29kZT4gW3N0YXRpY108L2NvZGU+PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9Im1lbW5hbWUiPmNvbnN0IGludCB0akJsdWVPZmZzZXRbPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTcwMTBhNDQwMmY1NGE0NWJhODIyYWQ4Njc1YTQ2NTVlIj5USl9OVU1QRjwvYT5dPC90ZD4KICAgICAgICAgPC90cj4KICAgICAgIDwvdGFibGU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9Im1lbWRvYyI+CisgIDwvdGQ+CisgIDx0ZCBjbGFzcz0ibWxhYmVscy1yaWdodCI+Cis8c3BhbiBjbGFzcz0ibWxhYmVscyI+PHNwYW4gY2xhc3M9Im1sYWJlbCI+c3RhdGljPC9zcGFuPjwvc3Bhbj4gIDwvdGQ+CisgIDwvdHI+Cis8L3RhYmxlPgorPC9kaXY+PGRpdiBjbGFzcz0ibWVtZG9jIj4KIAogPHA+Qmx1ZSBvZmZzZXQgKGluIGJ5dGVzKSBmb3IgYSBnaXZlbiBwaXhlbCBmb3JtYXQuIDwvcD4KIDxwPlRoaXMgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB0aGUgQmx1ZSBjb21wb25lbnQgaXMgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwaXhlbC4gRm9yIGluc3RhbmNlLCBpZiBhIHBpeGVsIG9mIGZvcm1hdCBUSl9CR1JYIGlzIHN0b3JlZCBpbiA8Y29kZT5jaGFyIHBpeGVsW108L2NvZGU+LCB0aGVuIHRoZSBibHVlIGNvbXBvbmVudCB3aWxsIGJlIDxjb2RlPnBpeGVsW3RqQmx1ZU9mZnNldFtUSl9CR1JYXV08L2NvZGU+LiA8L3A+CiAKIDwvZGl2PgogPC9kaXY+Ci08YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2E4MmQ2ZTM1ZGE0NDExMTJhNDExZGE0MTkyM2MwYmEyZiI+PC9hPjwhLS0gZG94eXRhZzogbWVtYmVyPSJ0dXJib2pwZWcuaDo6dGpHcmVlbk9mZnNldCIgcmVmPSJnYTgyZDZlMzVkYTQ0MTExMmE0MTFkYTQxOTIzYzBiYTJmIiBhcmdzPSJbVEpfTlVNUEZdIiAtLT4KKzxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYTgyZDZlMzVkYTQ0MTExMmE0MTFkYTQxOTIzYzBiYTJmIj48L2E+CiA8ZGl2IGNsYXNzPSJtZW1pdGVtIj4KIDxkaXYgY2xhc3M9Im1lbXByb3RvIj4KKzx0YWJsZSBjbGFzcz0ibWxhYmVscyI+CisgIDx0cj4KKyAgPHRkIGNsYXNzPSJtbGFiZWxzLWxlZnQiPgogICAgICAgPHRhYmxlIGNsYXNzPSJtZW1uYW1lIj4KICAgICAgICAgPHRyPgotICAgICAgICAgIDx0ZCBjbGFzcz0ibWVtbmFtZSI+Y29uc3QgaW50IDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E4MmQ2ZTM1ZGE0NDExMTJhNDExZGE0MTkyM2MwYmEyZiI+dGpHcmVlbk9mZnNldDwvYT5bVEpfTlVNUEZdPGNvZGU+IFtzdGF0aWNdPC9jb2RlPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj5jb25zdCBpbnQgdGpHcmVlbk9mZnNldFs8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNzAxMGE0NDAyZjU0YTQ1YmE4MjJhZDg2NzVhNDY1NWUiPlRKX05VTVBGPC9hPl08L3RkPgogICAgICAgICA8L3RyPgogICAgICAgPC90YWJsZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0ibWVtZG9jIj4KKyAgPC90ZD4KKyAgPHRkIGNsYXNzPSJtbGFiZWxzLXJpZ2h0Ij4KKzxzcGFuIGNsYXNzPSJtbGFiZWxzIj48c3BhbiBjbGFzcz0ibWxhYmVsIj5zdGF0aWM8L3NwYW4+PC9zcGFuPiAgPC90ZD4KKyAgPC90cj4KKzwvdGFibGU+Cis8L2Rpdj48ZGl2IGNsYXNzPSJtZW1kb2MiPgogCiA8cD5HcmVlbiBvZmZzZXQgKGluIGJ5dGVzKSBmb3IgYSBnaXZlbiBwaXhlbCBmb3JtYXQuIDwvcD4KIDxwPlRoaXMgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB0aGUgZ3JlZW4gY29tcG9uZW50IGlzIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcGl4ZWwuIEZvciBpbnN0YW5jZSwgaWYgYSBwaXhlbCBvZiBmb3JtYXQgVEpfQkdSWCBpcyBzdG9yZWQgaW4gPGNvZGU+Y2hhciBwaXhlbFtdPC9jb2RlPiwgdGhlbiB0aGUgZ3JlZW4gY29tcG9uZW50IHdpbGwgYmUgPGNvZGU+cGl4ZWxbdGpHcmVlbk9mZnNldFtUSl9CR1JYXV08L2NvZGU+LiA8L3A+CiAKIDwvZGl2PgogPC9kaXY+Ci08YSBjbGFzcz0iYW5jaG9yIiBpZD0iZ2FiZDI0N2JiOWZlY2IzOTNlY2E1NzM2NmZlYjgzMjdiZiI+PC9hPjwhLS0gZG94eXRhZzogbWVtYmVyPSJ0dXJib2pwZWcuaDo6dGpNQ1VIZWlnaHQiIHJlZj0iZ2FiZDI0N2JiOWZlY2IzOTNlY2E1NzM2NmZlYjgzMjdiZiIgYXJncz0iW1RKX05VTVNBTVBdIiAtLT4KKzxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYWJkMjQ3YmI5ZmVjYjM5M2VjYTU3MzY2ZmViODMyN2JmIj48L2E+CiA8ZGl2IGNsYXNzPSJtZW1pdGVtIj4KIDxkaXYgY2xhc3M9Im1lbXByb3RvIj4KKzx0YWJsZSBjbGFzcz0ibWxhYmVscyI+CisgIDx0cj4KKyAgPHRkIGNsYXNzPSJtbGFiZWxzLWxlZnQiPgogICAgICAgPHRhYmxlIGNsYXNzPSJtZW1uYW1lIj4KICAgICAgICAgPHRyPgotICAgICAgICAgIDx0ZCBjbGFzcz0ibWVtbmFtZSI+Y29uc3QgaW50IDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FiZDI0N2JiOWZlY2IzOTNlY2E1NzM2NmZlYjgzMjdiZiI+dGpNQ1VIZWlnaHQ8L2E+W1RKX05VTVNBTVBdPGNvZGU+IFtzdGF0aWNdPC9jb2RlPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj5jb25zdCBpbnQgdGpNQ1VIZWlnaHRbPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTVlZjNkMTY5MTYyY2U3N2NlMzQ4ZTI5MmEwYjc0NzdjIj5USl9OVU1TQU1QPC9hPl08L3RkPgogICAgICAgICA8L3RyPgogICAgICAgPC90YWJsZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0ibWVtZG9jIj4KKyAgPC90ZD4KKyAgPHRkIGNsYXNzPSJtbGFiZWxzLXJpZ2h0Ij4KKzxzcGFuIGNsYXNzPSJtbGFiZWxzIj48c3BhbiBjbGFzcz0ibWxhYmVsIj5zdGF0aWM8L3NwYW4+PC9zcGFuPiAgPC90ZD4KKyAgPC90cj4KKzwvdGFibGU+Cis8L2Rpdj48ZGl2IGNsYXNzPSJtZW1kb2MiPgogCiA8cD5NQ1UgYmxvY2sgaGVpZ2h0IChpbiBwaXhlbHMpIGZvciBhIGdpdmVuIGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nLiA8L3A+CiA8cD5NQ1UgYmxvY2sgc2l6ZXM6PC9wPgpAQCAtMTUyNiwxNiArMTU4NCwyMyBAQAogCiA8L2Rpdj4KIDwvZGl2PgotPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdhOWU2MWU3Y2Q0N2ExNWExNzMyODNiYTk0ZTc4MTMwOGMiPjwvYT48IS0tIGRveHl0YWc6IG1lbWJlcj0idHVyYm9qcGVnLmg6OnRqTUNVV2lkdGgiIHJlZj0iZ2E5ZTYxZTdjZDQ3YTE1YTE3MzI4M2JhOTRlNzgxMzA4YyIgYXJncz0iW1RKX05VTVNBTVBdIiAtLT4KKzxhIGNsYXNzPSJhbmNob3IiIGlkPSJnYTllNjFlN2NkNDdhMTVhMTczMjgzYmE5NGU3ODEzMDhjIj48L2E+CiA8ZGl2IGNsYXNzPSJtZW1pdGVtIj4KIDxkaXYgY2xhc3M9Im1lbXByb3RvIj4KKzx0YWJsZSBjbGFzcz0ibWxhYmVscyI+CisgIDx0cj4KKyAgPHRkIGNsYXNzPSJtbGFiZWxzLWxlZnQiPgogICAgICAgPHRhYmxlIGNsYXNzPSJtZW1uYW1lIj4KICAgICAgICAgPHRyPgotICAgICAgICAgIDx0ZCBjbGFzcz0ibWVtbmFtZSI+Y29uc3QgaW50IDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E5ZTYxZTdjZDQ3YTE1YTE3MzI4M2JhOTRlNzgxMzA4YyI+dGpNQ1VXaWR0aDwvYT5bVEpfTlVNU0FNUF08Y29kZT4gW3N0YXRpY108L2NvZGU+PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9Im1lbW5hbWUiPmNvbnN0IGludCB0ak1DVVdpZHRoWzxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E1ZWYzZDE2OTE2MmNlNzdjZTM0OGUyOTJhMGI3NDc3YyI+VEpfTlVNU0FNUDwvYT5dPC90ZD4KICAgICAgICAgPC90cj4KICAgICAgIDwvdGFibGU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9Im1lbWRvYyI+CisgIDwvdGQ+CisgIDx0ZCBjbGFzcz0ibWxhYmVscy1yaWdodCI+Cis8c3BhbiBjbGFzcz0ibWxhYmVscyI+PHNwYW4gY2xhc3M9Im1sYWJlbCI+c3RhdGljPC9zcGFuPjwvc3Bhbj4gIDwvdGQ+CisgIDwvdHI+Cis8L3RhYmxlPgorPC9kaXY+PGRpdiBjbGFzcz0ibWVtZG9jIj4KIAogPHA+TUNVIGJsb2NrIHdpZHRoIChpbiBwaXhlbHMpIGZvciBhIGdpdmVuIGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nLiA8L3A+CiA8cD5NQ1UgYmxvY2sgc2l6ZXM6PC9wPgpAQCAtMTU0OCw1NCArMTYxMyw1NyBAQAogCiA8L2Rpdj4KIDwvZGl2PgotPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdhZDc3Y2Y4ZmU1YjJiZmQzY2IzZjUzMDk4MTQ2YWJiNGMiPjwvYT48IS0tIGRveHl0YWc6IG1lbWJlcj0idHVyYm9qcGVnLmg6OnRqUGl4ZWxTaXplIiByZWY9ImdhZDc3Y2Y4ZmU1YjJiZmQzY2IzZjUzMDk4MTQ2YWJiNGMiIGFyZ3M9IltUSl9OVU1QRl0iIC0tPgorPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdhZDc3Y2Y4ZmU1YjJiZmQzY2IzZjUzMDk4MTQ2YWJiNGMiPjwvYT4KIDxkaXYgY2xhc3M9Im1lbWl0ZW0iPgogPGRpdiBjbGFzcz0ibWVtcHJvdG8iPgorPHRhYmxlIGNsYXNzPSJtbGFiZWxzIj4KKyAgPHRyPgorICA8dGQgY2xhc3M9Im1sYWJlbHMtbGVmdCI+CiAgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgogICAgICAgICA8dHI+Ci0gICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj5jb25zdCBpbnQgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWQ3N2NmOGZlNWIyYmZkM2NiM2Y1MzA5ODE0NmFiYjRjIj50alBpeGVsU2l6ZTwvYT5bVEpfTlVNUEZdPGNvZGU+IFtzdGF0aWNdPC9jb2RlPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj5jb25zdCBpbnQgdGpQaXhlbFNpemVbPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTcwMTBhNDQwMmY1NGE0NWJhODIyYWQ4Njc1YTQ2NTVlIj5USl9OVU1QRjwvYT5dPC90ZD4KICAgICAgICAgPC90cj4KICAgICAgIDwvdGFibGU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9Im1lbWRvYyI+CisgIDwvdGQ+CisgIDx0ZCBjbGFzcz0ibWxhYmVscy1yaWdodCI+Cis8c3BhbiBjbGFzcz0ibWxhYmVscyI+PHNwYW4gY2xhc3M9Im1sYWJlbCI+c3RhdGljPC9zcGFuPjwvc3Bhbj4gIDwvdGQ+CisgIDwvdHI+Cis8L3RhYmxlPgorPC9kaXY+PGRpdiBjbGFzcz0ibWVtZG9jIj4KIAogPHA+UGl4ZWwgc2l6ZSAoaW4gYnl0ZXMpIGZvciBhIGdpdmVuIHBpeGVsIGZvcm1hdC4gPC9wPgogCiA8L2Rpdj4KIDwvZGl2PgotPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdhZGQ5YjQ0Njc0MmFjOGEzOTIzZjc5OTJjNzk4OGZlYTgiPjwvYT48IS0tIGRveHl0YWc6IG1lbWJlcj0idHVyYm9qcGVnLmg6OnRqUmVkT2Zmc2V0IiByZWY9ImdhZGQ5YjQ0Njc0MmFjOGEzOTIzZjc5OTJjNzk4OGZlYTgiIGFyZ3M9IltUSl9OVU1QRl0iIC0tPgorPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImdhZGQ5YjQ0Njc0MmFjOGEzOTIzZjc5OTJjNzk4OGZlYTgiPjwvYT4KIDxkaXYgY2xhc3M9Im1lbWl0ZW0iPgogPGRpdiBjbGFzcz0ibWVtcHJvdG8iPgorPHRhYmxlIGNsYXNzPSJtbGFiZWxzIj4KKyAgPHRyPgorICA8dGQgY2xhc3M9Im1sYWJlbHMtbGVmdCI+CiAgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgogICAgICAgICA8dHI+Ci0gICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj5jb25zdCBpbnQgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWRkOWI0NDY3NDJhYzhhMzkyM2Y3OTkyYzc5ODhmZWE4Ij50alJlZE9mZnNldDwvYT5bVEpfTlVNUEZdPGNvZGU+IFtzdGF0aWNdPC9jb2RlPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj5jb25zdCBpbnQgdGpSZWRPZmZzZXRbPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTcwMTBhNDQwMmY1NGE0NWJhODIyYWQ4Njc1YTQ2NTVlIj5USl9OVU1QRjwvYT5dPC90ZD4KICAgICAgICAgPC90cj4KICAgICAgIDwvdGFibGU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9Im1lbWRvYyI+CisgIDwvdGQ+CisgIDx0ZCBjbGFzcz0ibWxhYmVscy1yaWdodCI+Cis8c3BhbiBjbGFzcz0ibWxhYmVscyI+PHNwYW4gY2xhc3M9Im1sYWJlbCI+c3RhdGljPC9zcGFuPjwvc3Bhbj4gIDwvdGQ+CisgIDwvdHI+Cis8L3RhYmxlPgorPC9kaXY+PGRpdiBjbGFzcz0ibWVtZG9jIj4KIAogPHA+UmVkIG9mZnNldCAoaW4gYnl0ZXMpIGZvciBhIGdpdmVuIHBpeGVsIGZvcm1hdC4gPC9wPgogPHA+VGhpcyBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHRoZSByZWQgY29tcG9uZW50IGlzIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcGl4ZWwuIEZvciBpbnN0YW5jZSwgaWYgYSBwaXhlbCBvZiBmb3JtYXQgVEpfQkdSWCBpcyBzdG9yZWQgaW4gPGNvZGU+Y2hhciBwaXhlbFtdPC9jb2RlPiwgdGhlbiB0aGUgcmVkIGNvbXBvbmVudCB3aWxsIGJlIDxjb2RlPnBpeGVsW3RqUmVkT2Zmc2V0W1RKX0JHUlhdXTwvY29kZT4uIDwvcD4KIAogPC9kaXY+CiA8L2Rpdj4KLTwvZGl2PgotPCEtLSB3aW5kb3cgc2hvd2luZyB0aGUgZmlsdGVyIG9wdGlvbnMgLS0+Ci08ZGl2IGlkPSJNU2VhcmNoU2VsZWN0V2luZG93IgotICAgICBvbm1vdXNlb3Zlcj0icmV0dXJuIHNlYXJjaEJveC5PblNlYXJjaFNlbGVjdFNob3coKSIKLSAgICAgb25tb3VzZW91dD0icmV0dXJuIHNlYXJjaEJveC5PblNlYXJjaFNlbGVjdEhpZGUoKSIKLSAgICAgb25rZXlkb3duPSJyZXR1cm4gc2VhcmNoQm94Lk9uU2VhcmNoU2VsZWN0S2V5KGV2ZW50KSI+Ci08YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDApIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkFsbDwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDEpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkRhdGEgU3RydWN0dXJlczwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDIpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPlZhcmlhYmxlczwvYT48L2Rpdj4KLQotPCEtLSBpZnJhbWUgc2hvd2luZyB0aGUgc2VhcmNoIHJlc3VsdHMgKGNsb3NlZCBieSBkZWZhdWx0KSAtLT4KLTxkaXYgaWQ9Ik1TZWFyY2hSZXN1bHRzV2luZG93Ij4KLTxpZnJhbWUgc3JjPSJqYXZhc2NyaXB0OnZvaWQoMCkiIGZyYW1lYm9yZGVyPSIwIiAKLSAgICAgICAgbmFtZT0iTVNlYXJjaFJlc3VsdHMiIGlkPSJNU2VhcmNoUmVzdWx0cyI+Ci08L2lmcmFtZT4KLTwvZGl2PgotCi08aHIgY2xhc3M9ImZvb3RlciIvPjxhZGRyZXNzIGNsYXNzPSJmb290ZXIiPjxzbWFsbD5HZW5lcmF0ZWQgb24gRnJpIEp1biAyOSAyMDEyIDE4OjE0OjU1IGZvciBUdXJib0pQRUcgYnkmIzE2MDsKLTxhIGhyZWY9Imh0dHA6Ly93d3cuZG94eWdlbi5vcmcvaW5kZXguaHRtbCI+Ci08aW1nIGNsYXNzPSJmb290ZXIiIHNyYz0iZG94eWdlbi5wbmciIGFsdD0iZG94eWdlbiIvPjwvYT4gMS43LjQgPC9zbWFsbD48L2FkZHJlc3M+Cis8L2Rpdj48IS0tIGNvbnRlbnRzIC0tPgorPCEtLSBzdGFydCBmb290ZXIgcGFydCAtLT4KKzxociBjbGFzcz0iZm9vdGVyIi8+PGFkZHJlc3MgY2xhc3M9ImZvb3RlciI+PHNtYWxsPgorR2VuZXJhdGVkIGJ5ICYjMTYwOzxhIGhyZWY9Imh0dHA6Ly93d3cuZG94eWdlbi5vcmcvaW5kZXguaHRtbCI+Cis8aW1nIGNsYXNzPSJmb290ZXIiIHNyYz0iZG94eWdlbi5wbmciIGFsdD0iZG94eWdlbiIvPgorPC9hPiAxLjguMy4xCis8L3NtYWxsPjwvYWRkcmVzcz4KIDwvYm9keT4KIDwvaHRtbD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL2luZGV4Lmh0bWwgYi9kb2MvaHRtbC9pbmRleC5odG1sCmluZGV4IDRjN2I4NGMuLjQ1YTUxMzYgMTAwNjQ0Ci0tLSBhL2RvYy9odG1sL2luZGV4Lmh0bWwKKysrIGIvZG9jL2h0bWwvaW5kZXguaHRtbApAQCAtMiwzNSArMiw0NiBAQAogPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgogPGhlYWQ+CiA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQveGh0bWw7Y2hhcnNldD1VVEYtOCIvPgorPG1ldGEgaHR0cC1lcXVpdj0iWC1VQS1Db21wYXRpYmxlIiBjb250ZW50PSJJRT05Ii8+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRveHlnZW4gMS44LjMuMSIvPgogPHRpdGxlPlR1cmJvSlBFRzogTWFpbiBQYWdlPC90aXRsZT4KIDxsaW5rIGhyZWY9InRhYnMuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIi8+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJqcXVlcnkuanMiPjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iZHluc2VjdGlvbnMuanMiPjwvc2NyaXB0PgogPGxpbmsgaHJlZj0ic2VhcmNoL3NlYXJjaC5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiLz4KIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InNlYXJjaC9zZWFyY2guanMiPjwvc2NyaXB0PgotPGxpbmsgaHJlZj0iZG94eWdlbi5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiLz4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7IHNlYXJjaEJveC5PblNlbGVjdEl0ZW0oMCk7IH0pOworPC9zY3JpcHQ+Cis8bGluayBocmVmPSJkb3h5Z2VuLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgLz4KKzxsaW5rIGhyZWY9ImRveHlnZW4tZXh0cmEuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIi8+CiA8L2hlYWQ+Ci08Ym9keSBvbmxvYWQ9J3NlYXJjaEJveC5PblNlbGVjdEl0ZW0oMCk7Jz4KLTwhLS0gR2VuZXJhdGVkIGJ5IERveHlnZW4gMS43LjQgLS0+Ci08c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQotdmFyIHNlYXJjaEJveCA9IG5ldyBTZWFyY2hCb3goInNlYXJjaEJveCIsICJzZWFyY2giLGZhbHNlLCdTZWFyY2gnKTsKLS0tPjwvc2NyaXB0PgotPGRpdiBpZD0idG9wIj4KKzxib2R5PgorPGRpdiBpZD0idG9wIj48IS0tIGRvIG5vdCByZW1vdmUgdGhpcyBkaXYsIGl0IGlzIGNsb3NlZCBieSBkb3h5Z2VuISAtLT4KIDxkaXYgaWQ9InRpdGxlYXJlYSI+CiA8dGFibGUgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIj4KICA8dGJvZHk+CiAgPHRyIHN0eWxlPSJoZWlnaHQ6IDU2cHg7Ij4KICAgPHRkIHN0eWxlPSJwYWRkaW5nLWxlZnQ6IDAuNWVtOyI+Ci0gICA8ZGl2IGlkPSJwcm9qZWN0bmFtZSI+VHVyYm9KUEVHJiMxNjA7PHNwYW4gaWQ9InByb2plY3RudW1iZXIiPjEuMi4xPC9zcGFuPjwvZGl2PgorICAgPGRpdiBpZD0icHJvamVjdG5hbWUiPlR1cmJvSlBFRworICAgJiMxNjA7PHNwYW4gaWQ9InByb2plY3RudW1iZXIiPjEuMi4xPC9zcGFuPgorICAgPC9kaXY+CiAgIDwvdGQ+CiAgPC90cj4KICA8L3Rib2R5PgogPC90YWJsZT4KIDwvZGl2PgorPCEtLSBlbmQgaGVhZGVyIHBhcnQgLS0+Cis8IS0tIEdlbmVyYXRlZCBieSBEb3h5Z2VuIDEuOC4zLjEgLS0+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Cit2YXIgc2VhcmNoQm94ID0gbmV3IFNlYXJjaEJveCgic2VhcmNoQm94IiwgInNlYXJjaCIsZmFsc2UsJ1NlYXJjaCcpOworPC9zY3JpcHQ+CiAgIDxkaXYgaWQ9Im5hdnJvdzEiIGNsYXNzPSJ0YWJzIj4KICAgICA8dWwgY2xhc3M9InRhYmxpc3QiPgogICAgICAgPGxpIGNsYXNzPSJjdXJyZW50Ij48YSBocmVmPSJpbmRleC5odG1sIj48c3Bhbj5NYWluJiMxNjA7UGFnZTwvc3Bhbj48L2E+PC9saT4KICAgICAgIDxsaT48YSBocmVmPSJtb2R1bGVzLmh0bWwiPjxzcGFuPk1vZHVsZXM8L3NwYW4+PC9hPjwvbGk+CiAgICAgICA8bGk+PGEgaHJlZj0iYW5ub3RhdGVkLmh0bWwiPjxzcGFuPkRhdGEmIzE2MDtTdHJ1Y3R1cmVzPC9zcGFuPjwvYT48L2xpPgotICAgICAgPGxpIGlkPSJzZWFyY2hsaSI+CisgICAgICA8bGk+CiAgICAgICAgIDxkaXYgaWQ9Ik1TZWFyY2hCb3giIGNsYXNzPSJNU2VhcmNoQm94SW5hY3RpdmUiPgogICAgICAgICA8c3BhbiBjbGFzcz0ibGVmdCI+CiAgICAgICAgICAgPGltZyBpZD0iTVNlYXJjaFNlbGVjdCIgc3JjPSJzZWFyY2gvbWFnX3NlbC5wbmciCkBAIC00OCwxOSArNTksMTMgQEAKICAgICAgIDwvbGk+CiAgICAgPC91bD4KICAgPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImhlYWRlciI+Ci0gIDxkaXYgY2xhc3M9ImhlYWRlcnRpdGxlIj4KLTxkaXYgY2xhc3M9InRpdGxlIj5UdXJib0pQRUcgRG9jdW1lbnRhdGlvbjwvZGl2PiAgPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImNvbnRlbnRzIj4KLTwvZGl2PgorPC9kaXY+PCEtLSB0b3AgLS0+CiA8IS0tIHdpbmRvdyBzaG93aW5nIHRoZSBmaWx0ZXIgb3B0aW9ucyAtLT4KIDxkaXYgaWQ9Ik1TZWFyY2hTZWxlY3RXaW5kb3ciCiAgICAgIG9ubW91c2VvdmVyPSJyZXR1cm4gc2VhcmNoQm94Lk9uU2VhcmNoU2VsZWN0U2hvdygpIgogICAgICBvbm1vdXNlb3V0PSJyZXR1cm4gc2VhcmNoQm94Lk9uU2VhcmNoU2VsZWN0SGlkZSgpIgogICAgICBvbmtleWRvd249InJldHVybiBzZWFyY2hCb3guT25TZWFyY2hTZWxlY3RLZXkoZXZlbnQpIj4KLTxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oMCkiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+QWxsPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oMSkiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+RGF0YSBTdHJ1Y3R1cmVzPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oMikiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+VmFyaWFibGVzPC9hPjwvZGl2PgorPGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSgwKSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5BbGw8L2E+PGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSgxKSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5EYXRhIFN0cnVjdHVyZXM8L2E+PGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSgyKSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5GdW5jdGlvbnM8L2E+PGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSgzKSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5WYXJpYWJsZXM8L2E+PGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSg0KSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5UeXBlZGVmczwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDUpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkVudW1lcmF0aW9uczwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDYpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkVudW1lcmF0b3I8L2E+PGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSg3KSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5Hcm91cHM8L2E+PC9kaXY+CiAKIDwhLS0gaWZyYW1lIHNob3dpbmcgdGhlIHNlYXJjaCByZXN1bHRzIChjbG9zZWQgYnkgZGVmYXVsdCkgLS0+CiA8ZGl2IGlkPSJNU2VhcmNoUmVzdWx0c1dpbmRvdyI+CkBAIC02OSw4ICs3NCwxNyBAQAogPC9pZnJhbWU+CiA8L2Rpdj4KIAotPGhyIGNsYXNzPSJmb290ZXIiLz48YWRkcmVzcyBjbGFzcz0iZm9vdGVyIj48c21hbGw+R2VuZXJhdGVkIG9uIEZyaSBKdW4gMjkgMjAxMiAxODoxNDo1NSBmb3IgVHVyYm9KUEVHIGJ5JiMxNjA7Ci08YSBocmVmPSJodHRwOi8vd3d3LmRveHlnZW4ub3JnL2luZGV4Lmh0bWwiPgotPGltZyBjbGFzcz0iZm9vdGVyIiBzcmM9ImRveHlnZW4ucG5nIiBhbHQ9ImRveHlnZW4iLz48L2E+IDEuNy40IDwvc21hbGw+PC9hZGRyZXNzPgorPGRpdiBjbGFzcz0iaGVhZGVyIj4KKyAgPGRpdiBjbGFzcz0iaGVhZGVydGl0bGUiPgorPGRpdiBjbGFzcz0idGl0bGUiPlR1cmJvSlBFRyBEb2N1bWVudGF0aW9uPC9kaXY+ICA8L2Rpdj4KKzwvZGl2PjwhLS1oZWFkZXItLT4KKzxkaXYgY2xhc3M9ImNvbnRlbnRzIj4KKzwvZGl2PjwhLS0gY29udGVudHMgLS0+Cis8IS0tIHN0YXJ0IGZvb3RlciBwYXJ0IC0tPgorPGhyIGNsYXNzPSJmb290ZXIiLz48YWRkcmVzcyBjbGFzcz0iZm9vdGVyIj48c21hbGw+CitHZW5lcmF0ZWQgYnkgJiMxNjA7PGEgaHJlZj0iaHR0cDovL3d3dy5kb3h5Z2VuLm9yZy9pbmRleC5odG1sIj4KKzxpbWcgY2xhc3M9ImZvb3RlciIgc3JjPSJkb3h5Z2VuLnBuZyIgYWx0PSJkb3h5Z2VuIi8+Cis8L2E+IDEuOC4zLjEKKzwvc21hbGw+PC9hZGRyZXNzPgogPC9ib2R5PgogPC9odG1sPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvaW5zdGFsbGRveCBiL2RvYy9odG1sL2luc3RhbGxkb3gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGVkZjViYmYuLjAwMDAwMDAKLS0tIGEvZG9jL2h0bWwvaW5zdGFsbGRveAorKysgL2Rldi9udWxsCkBAIC0xLDExMiArMCwwIEBACi0jIS91c3IvYmluL3BlcmwKLQotJXN1YnN0ID0gKCApOwotJHF1aWV0ICAgPSAwOwotCi13aGlsZSAoIEBBUkdWICkgewotICAkXyA9IHNoaWZ0IEBBUkdWOwotICBpZiAoIHMvXi0vLyApIHsKLSAgICBpZiAoIC9ebCguKikvICkgewotICAgICAgJHYgPSAoJDEgZXEgIiIpID8gc2hpZnQgQEFSR1YgOiAkMTsKLSAgICAgICgkdiA9fiAvXC8kLykgfHwgKCR2IC49ICIvIik7Ci0gICAgICAkXyA9ICR2OwotICAgICAgaWYgKCAvKC4rKVxAKC4rKS8gKSB7Ci0gICAgICAgIGlmICggZXhpc3RzICRzdWJzdHskMX0gKSB7Ci0gICAgICAgICAgJHN1YnN0eyQxfSA9ICQyOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHByaW50IFNUREVSUiAiVW5rbm93biB0YWcgZmlsZSAkMSBnaXZlbiB3aXRoIG9wdGlvbiAtbFxuIjsKLSAgICAgICAgICAmdXNhZ2UoKTsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcHJpbnQgU1RERVJSICJBcmd1bWVudCAkXyBpcyBpbnZhbGlkIGZvciBvcHRpb24gLWxcbiI7Ci0gICAgICAgICZ1c2FnZSgpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNpZiAoIC9ecS8gKSB7Ci0gICAgICAkcXVpZXQgPSAxOwotICAgIH0KLSAgICBlbHNpZiAoIC9eXD98XmgvICkgewotICAgICAgJnVzYWdlKCk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgcHJpbnQgU1RERVJSICJJbGxlZ2FsIG9wdGlvbiAtJF9cbiI7Ci0gICAgICAmdXNhZ2UoKTsKLSAgICB9Ci0gIH0KLSAgZWxzZSB7Ci0gICAgcHVzaCAoQGZpbGVzLCAkXyApOwotICB9Ci19Ci0KLWZvcmVhY2ggJHN1YiAoa2V5cyAlc3Vic3QpCi17Ci0gIGlmICggJHN1YnN0eyRzdWJ9IGVxICIiICkgCi0gIHsKLSAgICBwcmludCBTVERFUlIgIk5vIHN1YnN0aXR1dGUgZ2l2ZW4gZm9yIHRhZyBmaWxlIGAkc3ViJ1xuIjsKLSAgICAmdXNhZ2UoKTsKLSAgfQotICBlbHNpZiAoICEgJHF1aWV0ICYmICRzdWIgbmUgIl9kb2MiICYmICRzdWIgbmUgIl9jZ2kiICkKLSAgewotICAgIHByaW50ICJTdWJzdGl0dXRpbmcgJHN1YnN0eyRzdWJ9IGZvciBlYWNoIG9jY3VycmVuY2Ugb2YgdGFnIGZpbGUgJHN1YlxuIjsgCi0gIH0KLX0KLQotaWYgKCAhIEBmaWxlcyApIHsKLSAgaWYgKG9wZW5kaXIoRCwiLiIpKSB7Ci0gICAgZm9yZWFjaCAkZmlsZSAoIHJlYWRkaXIoRCkgKSB7Ci0gICAgICAkbWF0Y2ggPSAiLmh0bWwiOwotICAgICAgbmV4dCBpZiAoICRmaWxlID1+IC9eXC5cLj8kLyApOwotICAgICAgKCRmaWxlID1+IC8kbWF0Y2gvKSAmJiAocHVzaCBAZmlsZXMsICRmaWxlKTsKLSAgICAgICgkZmlsZSA9fiAvXC5zdmcvKSAmJiAocHVzaCBAZmlsZXMsICRmaWxlKTsKLSAgICAgICgkZmlsZSA9fiAibmF2dHJlZS5qcyIpICYmIChwdXNoIEBmaWxlcywgJGZpbGUpOwotICAgIH0KLSAgICBjbG9zZWRpcihEKTsKLSAgfQotfQotCi1pZiAoICEgQGZpbGVzICkgewotICBwcmludCBTVERFUlIgIldhcm5pbmc6IE5vIGlucHV0IGZpbGVzIGdpdmVuIGFuZCBub25lIGZvdW5kIVxuIjsKLX0KLQotZm9yZWFjaCAkZiAoQGZpbGVzKQotewotICBpZiAoICEgJHF1aWV0ICkgewotICAgIHByaW50ICJFZGl0aW5nOiAkZi4uLlxuIjsKLSAgfQotICAkb2xkZiA9ICRmOwotICAkZiAgIC49ICIuYmFrIjsKLSAgdW5sZXNzIChyZW5hbWUgJG9sZGYsJGYpIHsKLSAgICBwcmludCBTVERFUlIgIkVycm9yOiBjYW5ub3QgcmVuYW1lIGZpbGUgJG9sZGZcbiI7Ci0gICAgZXhpdCAxOwotICB9Ci0gIGlmIChvcGVuKEYsIjwkZiIpKSB7Ci0gICAgdW5sZXNzIChvcGVuKEcsIj4kb2xkZiIpKSB7Ci0gICAgICBwcmludCBTVERFUlIgIkVycm9yOiBvcGVuaW5nIGZpbGUgJG9sZGYgZm9yIHdyaXRpbmdcbiI7Ci0gICAgICBleGl0IDE7Ci0gICAgfQotICAgIGlmICgkb2xkZiBuZSAidHJlZS5qcyIpIHsKLSAgICAgIHdoaWxlICg8Rj4pIHsKLSAgICAgICAgcy9kb3h5Z2VuXD1cIihbXiBcIlw6XHRcPlw8XSopXDooW14gXCJcdFw+XDxdKilcIiAoeGxpbms6aHJlZnxocmVmfHNyYyk9XCJcMi9kb3h5Z2VuXD1cIiQxOiRzdWJzdHskMX1cIiBcMz1cIiRzdWJzdHskMX0vZzsKLSAgICAgICAgcHJpbnQgRyAiJF8iOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIHdoaWxlICg8Rj4pIHsKLSAgICAgICAgcy9cIihbXiBcIlw6XHRcPlw8XSopXDooW14gXCJcdFw+XDxdKilcIiwgXCJcMi9cIiQxOiRzdWJzdHskMX1cIiAsXCIkc3Vic3R7JDF9L2c7Ci0gICAgICAgIHByaW50IEcgIiRfIjsKLSAgICAgIH0KLSAgICB9Ci0gIH0gCi0gIGVsc2UgewotICAgIHByaW50IFNUREVSUiAiV2FybmluZyBmaWxlICRmIGRvZXMgbm90IGV4aXN0XG4iOwotICB9Ci0gIHVubGluayAkZjsKLX0KLQotc3ViIHVzYWdlIHsKLSAgcHJpbnQgU1RERVJSICJVc2FnZTogaW5zdGFsbGRveCBbb3B0aW9uc10gW2h0bWwtZmlsZSBbaHRtbC1maWxlIC4uLl1dXG4iOwotICBwcmludCBTVERFUlIgIk9wdGlvbnM6XG4iOwotICBwcmludCBTVERFUlIgIiAgICAgLWwgdGFnZmlsZVxAbGlua05hbWUgICB0YWcgZmlsZSArIFVSTCBvciBkaXJlY3RvcnkgXG4iOwotICBwcmludCBTVERFUlIgIiAgICAgLXEgICAgICAgICAgICAgICAgICAgIFF1aWV0IG1vZGVcblxuIjsKLSAgZXhpdCAxOwotfQpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvanF1ZXJ5LmpzIGIvZG9jL2h0bWwvanF1ZXJ5LmpzCmluZGV4IGMwNTIxNzMuLjYzOTM5ZTcgMTAwNjQ0Ci0tLSBhL2RvYy9odG1sL2pxdWVyeS5qcworKysgYi9kb2MvaHRtbC9qcXVlcnkuanMKQEAgLTEsNTQgKzEsOCBAQAotLyoKLSAqIGpRdWVyeSBKYXZhU2NyaXB0IExpYnJhcnkgdjEuMy4yCi0gKiBodHRwOi8vanF1ZXJ5LmNvbS8KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgSm9obiBSZXNpZwotICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGFuZCBHUEwgbGljZW5zZXMuCi0gKiBodHRwOi8vZG9jcy5qcXVlcnkuY29tL0xpY2Vuc2UKLSAqCi0gKiBEYXRlOiAyMDA5LTAyLTE5IDE3OjM0OjIxIC0wNTAwIChUaHUsIDE5IEZlYiAyMDA5KQotICogUmV2aXNpb246IDYyNDYKLSAqLwotKGZ1bmN0aW9uKCl7dmFyIGw9dGhpcyxnLHk9bC5qUXVlcnkscD1sLiQsbz1sLmpRdWVyeT1sLiQ9ZnVuY3Rpb24oRSxGKXtyZXR1cm4gbmV3IG8uZm4uaW5pdChFLEYpfSxEPS9eW148XSooPCgufFxzKSs+KVtePl0qJHxeIyhbXHctXSspJC8sZj0vXi5bXjojXFtcLixdKiQvO28uZm49by5wcm90b3R5cGU9e2luaXQ6ZnVuY3Rpb24oRSxIKXtFPUV8fGRvY3VtZW50O2lmKEUubm9kZVR5cGUpe3RoaXNbMF09RTt0aGlzLmxlbmd0aD0xO3RoaXMuY29udGV4dD1FO3JldHVybiB0aGlzfWlmKHR5cGVvZiBFPT09InN0cmluZyIpe3ZhciBHPUQuZXhlYyhFKTtpZihHJiYoR1sxXXx8IUgpKXtpZihHWzFdKXtFPW8uY2xlYW4oW0dbMV1dLEgpfWVsc2V7dmFyIEk9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoR1szXSk7aWYoSSYmSS5pZCE9R1szXSl7cmV0dXJuIG8oKS5maW5kKEUpfXZhciBGPW8oSXx8W10pO0YuY29udGV4dD1kb2N1bWVudDtGLnNlbGVjdG9yPUU7cmV0dXJuIEZ9fWVsc2V7cmV0dXJuIG8oSCkuZmluZChFKX19ZWxzZXtpZihvLmlzRnVuY3Rpb24oRSkpe3JldHVybiBvKGRvY3VtZW50KS5yZWFkeShFKX19aWYoRS5zZWxlY3RvciYmRS5jb250ZXh0KXt0aGlzLnNlbGVjdG9yPUUuc2VsZWN0b3I7dGhpcy5jb250ZXh0PUUuY29udGV4dH1yZXR1cm4gdGhpcy5zZXRBcnJheShvLmlzQXJyYXkoRSk/RTpvLm1ha2VBcnJheShFKSl9LHNlbGVjdG9yOiIiLGpxdWVyeToiMS4zLjIiLHNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGh9LGdldDpmdW5jdGlvbihFKXtyZXR1cm4gRT09PWc/QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcyk6dGhpc1tFXX0scHVzaFN0YWNrOmZ1bmN0aW9uKEYsSCxFKXt2YXIgRz1vKEYpO0cucHJldk9iamVjdD10aGlzO0cuY29udGV4dD10aGlzLmNvbnRleHQ7aWYoSD09PSJmaW5kIil7Ry5zZWxlY3Rvcj10aGlzLnNlbGVjdG9yKyh0aGlzLnNlbGVjdG9yPyIgIjoiIikrRX1lbHNle2lmKEgpe0cuc2VsZWN0b3I9dGhpcy5zZWxlY3RvcisiLiIrSCsiKCIrRSsiKSJ9fXJldHVybiBHfSxzZXRBcnJheTpmdW5jdGlvbihFKXt0aGlzLmxlbmd0aD0wO0FycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHRoaXMsRSk7cmV0dXJuIHRoaXN9LGVhY2g6ZnVuY3Rpb24oRixFKXtyZXR1cm4gby5lYWNoKHRoaXMsRixFKX0saW5kZXg6ZnVuY3Rpb24oRSl7cmV0dXJuIG8uaW5BcnJheShFJiZFLmpxdWVyeT9FWzBdOkUsdGhpcyl9LGF0dHI6ZnVuY3Rpb24oRixILEcpe3ZhciBFPUY7aWYodHlwZW9mIEY9PT0ic3RyaW5nIil7aWYoSD09PWcpe3JldHVybiB0aGlzWzBdJiZvW0d8fCJhdHRyIl0odGhpc1swXSxGKX1lbHNle0U9e307RVtGXT1IfX1yZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKEkpe2ZvcihGIGluIEUpe28uYXR0cihHP3RoaXMuc3R5bGU6dGhpcyxGLG8ucHJvcCh0aGlzLEVbRl0sRyxJLEYpKX19KX0sY3NzOmZ1bmN0aW9uKEUsRil7aWYoKEU9PSJ3aWR0aCJ8fEU9PSJoZWlnaHQiKSYmcGFyc2VGbG9hdChGKTwwKXtGPWd9cmV0dXJuIHRoaXMuYXR0cihFLEYsImN1ckNTUyIpfSx0ZXh0OmZ1bmN0aW9uKEYpe2lmKHR5cGVvZiBGIT09Im9iamVjdCImJkYhPW51bGwpe3JldHVybiB0aGlzLmVtcHR5KCkuYXBwZW5kKCh0aGlzWzBdJiZ0aGlzWzBdLm93bmVyRG9jdW1lbnR8fGRvY3VtZW50KS5jcmVhdGVUZXh0Tm9kZShGKSl9dmFyIEU9IiI7by5lYWNoKEZ8fHRoaXMsZnVuY3Rpb24oKXtvLmVhY2godGhpcy5jaGlsZE5vZGVzLGZ1bmN0aW9uKCl7aWYodGhpcy5ub2RlVHlwZSE9OCl7RSs9dGhpcy5ub2RlVHlwZSE9MT90aGlzLm5vZGVWYWx1ZTpvLmZuLnRleHQoW3RoaXNdKX19KX0pO3JldHVybiBFfSx3cmFwQWxsOmZ1bmN0aW9uKEUpe2lmKHRoaXNbMF0pe3ZhciBGPW8oRSx0aGlzWzBdLm93bmVyRG9jdW1lbnQpLmNsb25lKCk7aWYodGhpc1swXS5wYXJlbnROb2RlKXtGLmluc2VydEJlZm9yZSh0aGlzWzBdKX1GLm1hcChmdW5jdGlvbigpe3ZhciBHPXRoaXM7d2hpbGUoRy5maXJzdENoaWxkKXtHPUcuZmlyc3RDaGlsZH1yZXR1cm4gR30pLmFwcGVuZCh0aGlzKX1yZXR1cm4gdGhpc30sd3JhcElubmVyOmZ1bmN0aW9uKEUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtvKHRoaXMpLmNvbnRlbnRzKCkud3JhcEFsbChFKX0pfSx3cmFwOmZ1bmN0aW9uKEUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtvKHRoaXMpLndyYXBBbGwoRSl9KX0sYXBwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLHRydWUsZnVuY3Rpb24oRSl7aWYodGhpcy5ub2RlVHlwZT09MSl7dGhpcy5hcHBlbmRDaGlsZChFKX19KX0scHJlcGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyx0cnVlLGZ1bmN0aW9uKEUpe2lmKHRoaXMubm9kZVR5cGU9PTEpe3RoaXMuaW5zZXJ0QmVmb3JlKEUsdGhpcy5maXJzdENoaWxkKX19KX0sYmVmb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZhbHNlLGZ1bmN0aW9uKEUpe3RoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoRSx0aGlzKX0pfSxhZnRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmYWxzZSxmdW5jdGlvbihFKXt0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKEUsdGhpcy5uZXh0U2libGluZyl9KX0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJldk9iamVjdHx8byhbXSl9LHB1c2g6W10ucHVzaCxzb3J0OltdLnNvcnQsc3BsaWNlOltdLnNwbGljZSxmaW5kOmZ1bmN0aW9uKEUpe2lmKHRoaXMubGVuZ3RoPT09MSl7dmFyIEY9dGhpcy5wdXNoU3RhY2soW10sImZpbmQiLEUpO0YubGVuZ3RoPTA7by5maW5kKEUsdGhpc1swXSxGKTtyZXR1cm4gRn1lbHNle3JldHVybiB0aGlzLnB1c2hTdGFjayhvLnVuaXF1ZShvLm1hcCh0aGlzLGZ1bmN0aW9uKEcpe3JldHVybiBvLmZpbmQoRSxHKX0pKSwiZmluZCIsRSl9fSxjbG9uZTpmdW5jdGlvbihHKXt2YXIgRT10aGlzLm1hcChmdW5jdGlvbigpe2lmKCFvLnN1cHBvcnQubm9DbG9uZUV2ZW50JiYhby5pc1hNTERvYyh0aGlzKSl7dmFyIEk9dGhpcy5vdXRlckhUTUw7aWYoIUkpe3ZhciBKPXRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtKLmFwcGVuZENoaWxkKHRoaXMuY2xvbmVOb2RlKHRydWUpKTtJPUouaW5uZXJIVE1MfXJldHVybiBvLmNsZWFuKFtJLnJlcGxhY2UoLyBqUXVlcnlcZCs9Iig/OlxkK3xudWxsKSIvZywiIikucmVwbGFjZSgvXlxzKi8sIiIpXSlbMF19ZWxzZXtyZXR1cm4gdGhpcy5jbG9uZU5vZGUodHJ1ZSl9fSk7aWYoRz09PXRydWUpe3ZhciBIPXRoaXMuZmluZCgiKiIpLmFuZFNlbGYoKSxGPTA7RS5maW5kKCIqIikuYW5kU2VsZigpLmVhY2goZnVuY3Rpb24oKXtpZih0aGlzLm5vZGVOYW1lIT09SFtGXS5ub2RlTmFtZSl7cmV0dXJufXZhciBJPW8uZGF0YShIW0ZdLCJldmVudHMiKTtmb3IodmFyIEsgaW4gSSl7Zm9yKHZhciBKIGluIElbS10pe28uZXZlbnQuYWRkKHRoaXMsSyxJW0tdW0pdLElbS11bSl0uZGF0YSl9fUYrK30pfXJldHVybiBFfSxmaWx0ZXI6ZnVuY3Rpb24oRSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKG8uaXNGdW5jdGlvbihFKSYmby5ncmVwKHRoaXMsZnVuY3Rpb24oRyxGKXtyZXR1cm4gRS5jYWxsKEcsRil9KXx8by5tdWx0aUZpbHRlcihFLG8uZ3JlcCh0aGlzLGZ1bmN0aW9uKEYpe3JldHVybiBGLm5vZGVUeXBlPT09MX0pKSwiZmlsdGVyIixFKX0sY2xvc2VzdDpmdW5jdGlvbihFKXt2YXIgRz1vLmV4cHIubWF0Y2guUE9TLnRlc3QoRSk/byhFKTpudWxsLEY9MDtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgSD10aGlzO3doaWxlKEgmJkgub3duZXJEb2N1bWVudCl7aWYoRz9HLmluZGV4KEgpPi0xOm8oSCkuaXMoRSkpe28uZGF0YShILCJjbG9zZXN0IixGKTtyZXR1cm4gSH1IPUgucGFyZW50Tm9kZTtGKyt9fSl9LG5vdDpmdW5jdGlvbihFKXtpZih0eXBlb2YgRT09PSJzdHJpbmciKXtpZihmLnRlc3QoRSkpe3JldHVybiB0aGlzLnB1c2hTdGFjayhvLm11bHRpRmlsdGVyKEUsdGhpcyx0cnVlKSwibm90IixFKX1lbHNle0U9by5tdWx0aUZpbHRlcihFLHRoaXMpfX12YXIgRj1FLmxlbmd0aCYmRVtFLmxlbmd0aC0xXSE9PWcmJiFFLm5vZGVUeXBlO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiBGP28uaW5BcnJheSh0aGlzLEUpPDA6dGhpcyE9RX0pfSxhZGQ6ZnVuY3Rpb24oRSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKG8udW5pcXVlKG8ubWVyZ2UodGhpcy5nZXQoKSx0eXBlb2YgRT09PSJzdHJpbmciP28oRSk6by5tYWtlQXJyYXkoRSkpKSl9LGlzOmZ1bmN0aW9uKEUpe3JldHVybiAhIUUmJm8ubXVsdGlGaWx0ZXIoRSx0aGlzKS5sZW5ndGg+MH0saGFzQ2xhc3M6ZnVuY3Rpb24oRSl7cmV0dXJuICEhRSYmdGhpcy5pcygiLiIrRSl9LHZhbDpmdW5jdGlvbihLKXtpZihLPT09Zyl7dmFyIEU9dGhpc1swXTtpZihFKXtpZihvLm5vZGVOYW1lKEUsIm9wdGlvbiIpKXtyZXR1cm4oRS5hdHRyaWJ1dGVzLnZhbHVlfHx7fSkuc3BlY2lmaWVkP0UudmFsdWU6RS50ZXh0fWlmKG8ubm9kZU5hbWUoRSwic2VsZWN0Iikpe3ZhciBJPUUuc2VsZWN0ZWRJbmRleCxMPVtdLE09RS5vcHRpb25zLEg9RS50eXBlPT0ic2VsZWN0LW9uZSI7aWYoSTwwKXtyZXR1cm4gbnVsbH1mb3IodmFyIEY9SD9JOjAsSj1IP0krMTpNLmxlbmd0aDtGPEo7RisrKXt2YXIgRz1NW0ZdO2lmKEcuc2VsZWN0ZWQpe0s9byhHKS52YWwoKTtpZihIKXtyZXR1cm4gS31MLnB1c2goSyl9fXJldHVybiBMfXJldHVybihFLnZhbHVlfHwiIikucmVwbGFjZSgvXHIvZywiIil9cmV0dXJuIGd9aWYodHlwZW9mIEs9PT0ibnVtYmVyIil7Sys9IiJ9cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2lmKHRoaXMubm9kZVR5cGUhPTEpe3JldHVybn1pZihvLmlzQXJyYXkoSykmJi9yYWRpb3xjaGVja2JveC8udGVzdCh0aGlzLnR5cGUpKXt0aGlzLmNoZWNrZWQ9KG8uaW5BcnJheSh0aGlzLnZhbHVlLEspPj0wfHxvLmluQXJyYXkodGhpcy5uYW1lLEspPj0wKX1lbHNle2lmKG8ubm9kZU5hbWUodGhpcywic2VsZWN0Iikpe3ZhciBOPW8ubWFrZUFycmF5KEspO28oIm9wdGlvbiIsdGhpcykuZWFjaChmdW5jdGlvbigpe3RoaXMuc2VsZWN0ZWQ9KG8uaW5BcnJheSh0aGlzLnZhbHVlLE4pPj0wfHxvLmluQXJyYXkodGhpcy50ZXh0LE4pPj0wKX0pO2lmKCFOLmxlbmd0aCl7dGhpcy5zZWxlY3RlZEluZGV4PS0xfX1lbHNle3RoaXMudmFsdWU9S319fSl9LGh0bWw6ZnVuY3Rpb24oRSl7cmV0dXJuIEU9PT1nPyh0aGlzWzBdP3RoaXNbMF0uaW5uZXJIVE1MLnJlcGxhY2UoLyBqUXVlcnlcZCs9Iig/OlxkK3xudWxsKSIvZywiIik6bnVsbCk6dGhpcy5lbXB0eSgpLmFwcGVuZChFKX0scmVwbGFjZVdpdGg6ZnVuY3Rpb24oRSl7cmV0dXJuIHRoaXMuYWZ0ZXIoRSkucmVtb3ZlKCl9LGVxOmZ1bmN0aW9uKEUpe3JldHVybiB0aGlzLnNsaWNlKEUsK0UrMSl9LHNsaWNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKEFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksInNsaWNlIixBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpLmpvaW4oIiwiKSl9LG1hcDpmdW5jdGlvbihFKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soby5tYXAodGhpcyxmdW5jdGlvbihHLEYpe3JldHVybiBFLmNhbGwoRyxGLEcpfSkpfSxhbmRTZWxmOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWRkKHRoaXMucHJldk9iamVjdCl9LGRvbU1hbmlwOmZ1bmN0aW9uKEosTSxMKXtpZih0aGlzWzBdKXt2YXIgST0odGhpc1swXS5vd25lckRvY3VtZW50fHx0aGlzWzBdKS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksRj1vLmNsZWFuKEosKHRoaXNbMF0ub3duZXJEb2N1bWVudHx8dGhpc1swXSksSSksSD1JLmZpcnN0Q2hpbGQ7aWYoSCl7Zm9yKHZhciBHPTAsRT10aGlzLmxlbmd0aDtHPEU7RysrKXtMLmNhbGwoSyh0aGlzW0ddLEgpLHRoaXMubGVuZ3RoPjF8fEc+MD9JLmNsb25lTm9kZSh0cnVlKTpJKX19aWYoRil7by5lYWNoKEYseil9fXJldHVybiB0aGlzO2Z1bmN0aW9uIEsoTixPKXtyZXR1cm4gTSYmby5ub2RlTmFtZShOLCJ0YWJsZSIpJiZvLm5vZGVOYW1lKE8sInRyIik/KE4uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IilbMF18fE4uYXBwZW5kQ2hpbGQoTi5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRib2R5IikpKTpOfX19O28uZm4uaW5pdC5wcm90b3R5cGU9by5mbjtmdW5jdGlvbiB6KEUsRil7aWYoRi5zcmMpe28uYWpheCh7dXJsOkYuc3JjLGFzeW5jOmZhbHNlLGRhdGFUeXBlOiJzY3JpcHQifSl9ZWxzZXtvLmdsb2JhbEV2YWwoRi50ZXh0fHxGLnRleHRDb250ZW50fHxGLmlubmVySFRNTHx8IiIpfWlmKEYucGFyZW50Tm9kZSl7Ri5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKEYpfX1mdW5jdGlvbiBlKCl7cmV0dXJuICtuZXcgRGF0ZX1vLmV4dGVuZD1vLmZuLmV4dGVuZD1mdW5jdGlvbigpe3ZhciBKPWFyZ3VtZW50c1swXXx8e30sSD0xLEk9YXJndW1lbnRzLmxlbmd0aCxFPWZhbHNlLEc7aWYodHlwZW9mIEo9PT0iYm9vbGVhbiIpe0U9SjtKPWFyZ3VtZW50c1sxXXx8e307SD0yfWlmKHR5cGVvZiBKIT09Im9iamVjdCImJiFvLmlzRnVuY3Rpb24oSikpe0o9e319aWYoST09SCl7Sj10aGlzOy0tSH1mb3IoO0g8STtIKyspe2lmKChHPWFyZ3VtZW50c1tIXSkhPW51bGwpe2Zvcih2YXIgRiBpbiBHKXt2YXIgSz1KW0ZdLEw9R1tGXTtpZihKPT09TCl7Y29udGludWV9aWYoRSYmTCYmdHlwZW9mIEw9PT0ib2JqZWN0IiYmIUwubm9kZVR5cGUpe0pbRl09by5leHRlbmQoRSxLfHwoTC5sZW5ndGghPW51bGw/W106e30pLEwpfWVsc2V7aWYoTCE9PWcpe0pbRl09TH19fX19cmV0dXJuIEp9O3ZhciBiPS96LT9pbmRleHxmb250LT93ZWlnaHR8b3BhY2l0eXx6b29tfGxpbmUtP2hlaWdodC9pLHE9ZG9jdW1lbnQuZGVmYXVsdFZpZXd8fHt9LHM9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztvLmV4dGVuZCh7bm9Db25mbGljdDpmdW5jdGlvbihFKXtsLiQ9cDtpZihFKXtsLmpRdWVyeT15fXJldHVybiBvfSxpc0Z1bmN0aW9uOmZ1bmN0aW9uKEUpe3JldHVybiBzLmNhbGwoRSk9PT0iW29iamVjdCBGdW5jdGlvbl0ifSxpc0FycmF5OmZ1bmN0aW9uKEUpe3JldHVybiBzLmNhbGwoRSk9PT0iW29iamVjdCBBcnJheV0ifSxpc1hNTERvYzpmdW5jdGlvbihFKXtyZXR1cm4gRS5ub2RlVHlwZT09PTkmJkUuZG9jdW1lbnRFbGVtZW50Lm5vZGVOYW1lIT09IkhUTUwifHwhIUUub3duZXJEb2N1bWVudCYmby5pc1hNTERvYyhFLm93bmVyRG9jdW1lbnQpfSxnbG9iYWxFdmFsOmZ1bmN0aW9uKEcpe2lmKEcmJi9cUy8udGVzdChHKSl7dmFyIEY9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXXx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LEU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7RS50eXBlPSJ0ZXh0L2phdmFzY3JpcHQiO2lmKG8uc3VwcG9ydC5zY3JpcHRFdmFsKXtFLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKEcpKX1lbHNle0UudGV4dD1HfUYuaW5zZXJ0QmVmb3JlKEUsRi5maXJzdENoaWxkKTtGLnJlbW92ZUNoaWxkKEUpfX0sbm9kZU5hbWU6ZnVuY3Rpb24oRixFKXtyZXR1cm4gRi5ub2RlTmFtZSYmRi5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpPT1FLnRvVXBwZXJDYXNlKCl9LGVhY2g6ZnVuY3Rpb24oRyxLLEYpe3ZhciBFLEg9MCxJPUcubGVuZ3RoO2lmKEYpe2lmKEk9PT1nKXtmb3IoRSBpbiBHKXtpZihLLmFwcGx5KEdbRV0sRik9PT1mYWxzZSl7YnJlYWt9fX1lbHNle2Zvcig7SDxJOyl7aWYoSy5hcHBseShHW0grK10sRik9PT1mYWxzZSl7YnJlYWt9fX19ZWxzZXtpZihJPT09Zyl7Zm9yKEUgaW4gRyl7aWYoSy5jYWxsKEdbRV0sRSxHW0VdKT09PWZhbHNlKXticmVha319fWVsc2V7Zm9yKHZhciBKPUdbMF07SDxJJiZLLmNhbGwoSixILEopIT09ZmFsc2U7Sj1HWysrSF0pe319fXJldHVybiBHfSxwcm9wOmZ1bmN0aW9uKEgsSSxHLEYsRSl7aWYoby5pc0Z1bmN0aW9uKEkpKXtJPUkuY2FsbChILEYpfXJldHVybiB0eXBlb2YgST09PSJudW1iZXIiJiZHPT0iY3VyQ1NTIiYmIWIudGVzdChFKT9JKyJweCI6SX0sY2xhc3NOYW1lOnthZGQ6ZnVuY3Rpb24oRSxGKXtvLmVhY2goKEZ8fCIiKS5zcGxpdCgvXHMrLyksZnVuY3Rpb24oRyxIKXtpZihFLm5vZGVUeXBlPT0xJiYhby5jbGFzc05hbWUuaGFzKEUuY2xhc3NOYW1lLEgpKXtFLmNsYXNzTmFtZSs9KEUuY2xhc3NOYW1lPyIgIjoiIikrSH19KX0scmVtb3ZlOmZ1bmN0aW9uKEUsRil7aWYoRS5ub2RlVHlwZT09MSl7RS5jbGFzc05hbWU9RiE9PWc/by5ncmVwKEUuY2xhc3NOYW1lLnNwbGl0KC9ccysvKSxmdW5jdGlvbihHKXtyZXR1cm4gIW8uY2xhc3NOYW1lLmhhcyhGLEcpfSkuam9pbigiICIpOiIifX0saGFzOmZ1bmN0aW9uKEYsRSl7cmV0dXJuIEYmJm8uaW5BcnJheShFLChGLmNsYXNzTmFtZXx8RikudG9TdHJpbmcoKS5zcGxpdCgvXHMrLykpPi0xfX0sc3dhcDpmdW5jdGlvbihILEcsSSl7dmFyIEU9e307Zm9yKHZhciBGIGluIEcpe0VbRl09SC5zdHlsZVtGXTtILnN0eWxlW0ZdPUdbRl19SS5jYWxsKEgpO2Zvcih2YXIgRiBpbiBHKXtILnN0eWxlW0ZdPUVbRl19fSxjc3M6ZnVuY3Rpb24oSCxGLEosRSl7aWYoRj09IndpZHRoInx8Rj09ImhlaWdodCIpe3ZhciBMLEc9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdmlzaWJpbGl0eToiaGlkZGVuIixkaXNwbGF5OiJibG9jayJ9LEs9Rj09IndpZHRoIj9bIkxlZnQiLCJSaWdodCJdOlsiVG9wIiwiQm90dG9tIl07ZnVuY3Rpb24gSSgpe0w9Rj09IndpZHRoIj9ILm9mZnNldFdpZHRoOkgub2Zmc2V0SGVpZ2h0O2lmKEU9PT0iYm9yZGVyIil7cmV0dXJufW8uZWFjaChLLGZ1bmN0aW9uKCl7aWYoIUUpe0wtPXBhcnNlRmxvYXQoby5jdXJDU1MoSCwicGFkZGluZyIrdGhpcyx0cnVlKSl8fDB9aWYoRT09PSJtYXJnaW4iKXtMKz1wYXJzZUZsb2F0KG8uY3VyQ1NTKEgsIm1hcmdpbiIrdGhpcyx0cnVlKSl8fDB9ZWxzZXtMLT1wYXJzZUZsb2F0KG8uY3VyQ1NTKEgsImJvcmRlciIrdGhpcysiV2lkdGgiLHRydWUpKXx8MH19KX1pZihILm9mZnNldFdpZHRoIT09MCl7SSgpfWVsc2V7by5zd2FwKEgsRyxJKX1yZXR1cm4gTWF0aC5tYXgoMCxNYXRoLnJvdW5kKEwpKX1yZXR1cm4gby5jdXJDU1MoSCxGLEopfSxjdXJDU1M6ZnVuY3Rpb24oSSxGLEcpe3ZhciBMLEU9SS5zdHlsZTtpZihGPT0ib3BhY2l0eSImJiFvLnN1cHBvcnQub3BhY2l0eSl7TD1vLmF0dHIoRSwib3BhY2l0eSIpO3JldHVybiBMPT0iIj8iMSI6TH1pZihGLm1hdGNoKC9mbG9hdC9pKSl7Rj13fWlmKCFHJiZFJiZFW0ZdKXtMPUVbRl19ZWxzZXtpZihxLmdldENvbXB1dGVkU3R5bGUpe2lmKEYubWF0Y2goL2Zsb2F0L2kpKXtGPSJmbG9hdCJ9Rj1GLnJlcGxhY2UoLyhbQS1aXSkvZywiLSQxIikudG9Mb3dlckNhc2UoKTt2YXIgTT1xLmdldENvbXB1dGVkU3R5bGUoSSxudWxsKTtpZihNKXtMPU0uZ2V0UHJvcGVydHlWYWx1ZShGKX1pZihGPT0ib3BhY2l0eSImJkw9PSIiKXtMPSIxIn19ZWxzZXtpZihJLmN1cnJlbnRTdHlsZSl7dmFyIEo9Ri5yZXBsYWNlKC9cLShcdykvZyxmdW5jdGlvbihOLE8pe3JldHVybiBPLnRvVXBwZXJDYXNlKCl9KTtMPUkuY3VycmVudFN0eWxlW0ZdfHxJLmN1cnJlbnRTdHlsZVtKXTtpZighL15cZCsocHgpPyQvaS50ZXN0KEwpJiYvXlxkLy50ZXN0KEwpKXt2YXIgSD1FLmxlZnQsSz1JLnJ1bnRpbWVTdHlsZS5sZWZ0O0kucnVudGltZVN0eWxlLmxlZnQ9SS5jdXJyZW50U3R5bGUubGVmdDtFLmxlZnQ9THx8MDtMPUUucGl4ZWxMZWZ0KyJweCI7RS5sZWZ0PUg7SS5ydW50aW1lU3R5bGUubGVmdD1LfX19fXJldHVybiBMfSxjbGVhbjpmdW5jdGlvbihGLEssSSl7Sz1LfHxkb2N1bWVudDtpZih0eXBlb2YgSy5jcmVhdGVFbGVtZW50PT09InVuZGVmaW5lZCIpe0s9Sy5vd25lckRvY3VtZW50fHxLWzBdJiZLWzBdLm93bmVyRG9jdW1lbnR8fGRvY3VtZW50fWlmKCFJJiZGLmxlbmd0aD09PTEmJnR5cGVvZiBGWzBdPT09InN0cmluZyIpe3ZhciBIPS9ePChcdyspXHMqXC8/PiQvLmV4ZWMoRlswXSk7aWYoSCl7cmV0dXJuW0suY3JlYXRlRWxlbWVudChIWzFdKV19fXZhciBHPVtdLEU9W10sTD1LLmNyZWF0ZUVsZW1lbnQoImRpdiIpO28uZWFjaChGLGZ1bmN0aW9uKFAsUyl7aWYodHlwZW9mIFM9PT0ibnVtYmVyIil7Uys9IiJ9aWYoIVMpe3JldHVybn1pZih0eXBlb2YgUz09PSJzdHJpbmciKXtTPVMucmVwbGFjZSgvKDwoXHcrKVtePl0qPylcLz4vZyxmdW5jdGlvbihVLFYsVCl7cmV0dXJuIFQubWF0Y2goL14oYWJicnxicnxjb2x8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbXxocnxhcmVhfGVtYmVkKSQvaSk/VTpWKyI+PC8iK1QrIj4ifSk7dmFyIE89Uy5yZXBsYWNlKC9eXHMrLywiIikuc3Vic3RyaW5nKDAsMTApLnRvTG93ZXJDYXNlKCk7dmFyIFE9IU8uaW5kZXhPZigiPG9wdCIpJiZbMSwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsIjwvc2VsZWN0PiJdfHwhTy5pbmRleE9mKCI8bGVnIikmJlsxLCI8ZmllbGRzZXQ+IiwiPC9maWVsZHNldD4iXXx8Ty5tYXRjaCgvXjwodGhlYWR8dGJvZHl8dGZvb3R8Y29sZ3xjYXApLykmJlsxLCI8dGFibGU+IiwiPC90YWJsZT4iXXx8IU8uaW5kZXhPZigiPHRyIikmJlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXXx8KCFPLmluZGV4T2YoIjx0ZCIpfHwhTy5pbmRleE9mKCI8dGgiKSkmJlszLCI8dGFibGU+PHRib2R5Pjx0cj4iLCI8L3RyPjwvdGJvZHk+PC90YWJsZT4iXXx8IU8uaW5kZXhPZigiPGNvbCIpJiZbMiwiPHRhYmxlPjx0Ym9keT48L3Rib2R5Pjxjb2xncm91cD4iLCI8L2NvbGdyb3VwPjwvdGFibGU+Il18fCFvLnN1cHBvcnQuaHRtbFNlcmlhbGl6ZSYmWzEsImRpdjxkaXY+IiwiPC9kaXY+Il18fFswLCIiLCIiXTtMLmlubmVySFRNTD1RWzFdK1MrUVsyXTt3aGlsZShRWzBdLS0pe0w9TC5sYXN0Q2hpbGR9aWYoIW8uc3VwcG9ydC50Ym9keSl7dmFyIFI9Lzx0Ym9keS9pLnRlc3QoUyksTj0hTy5pbmRleE9mKCI8dGFibGUiKSYmIVI/TC5maXJzdENoaWxkJiZMLmZpcnN0Q2hpbGQuY2hpbGROb2RlczpRWzFdPT0iPHRhYmxlPiImJiFSP0wuY2hpbGROb2RlczpbXTtmb3IodmFyIE09Ti5sZW5ndGgtMTtNPj0wOy0tTSl7aWYoby5ub2RlTmFtZShOW01dLCJ0Ym9keSIpJiYhTltNXS5jaGlsZE5vZGVzLmxlbmd0aCl7TltNXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKE5bTV0pfX19aWYoIW8uc3VwcG9ydC5sZWFkaW5nV2hpdGVzcGFjZSYmL15ccy8udGVzdChTKSl7TC5pbnNlcnRCZWZvcmUoSy5jcmVhdGVUZXh0Tm9kZShTLm1hdGNoKC9eXHMqLylbMF0pLEwuZmlyc3RDaGlsZCl9Uz1vLm1ha2VBcnJheShMLmNoaWxkTm9kZXMpfWlmKFMubm9kZVR5cGUpe0cucHVzaChTKX1lbHNle0c9by5tZXJnZShHLFMpfX0pO2lmKEkpe2Zvcih2YXIgSj0wO0dbSl07SisrKXtpZihvLm5vZGVOYW1lKEdbSl0sInNjcmlwdCIpJiYoIUdbSl0udHlwZXx8R1tKXS50eXBlLnRvTG93ZXJDYXNlKCk9PT0idGV4dC9qYXZhc2NyaXB0Iikpe0UucHVzaChHW0pdLnBhcmVudE5vZGU/R1tKXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKEdbSl0pOkdbSl0pfWVsc2V7aWYoR1tKXS5ub2RlVHlwZT09PTEpe0cuc3BsaWNlLmFwcGx5KEcsW0orMSwwXS5jb25jYXQoby5tYWtlQXJyYXkoR1tKXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IikpKSl9SS5hcHBlbmRDaGlsZChHW0pdKX19cmV0dXJuIEV9cmV0dXJuIEd9LGF0dHI6ZnVuY3Rpb24oSixHLEspe2lmKCFKfHxKLm5vZGVUeXBlPT0zfHxKLm5vZGVUeXBlPT04KXtyZXR1cm4gZ312YXIgSD0hby5pc1hNTERvYyhKKSxMPUshPT1nO0c9SCYmby5wcm9wc1tHXXx8RztpZihKLnRhZ05hbWUpe3ZhciBGPS9ocmVmfHNyY3xzdHlsZS8udGVzdChHKTtpZihHPT0ic2VsZWN0ZWQiJiZKLnBhcmVudE5vZGUpe0oucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4fWlmKEcgaW4gSiYmSCYmIUYpe2lmKEwpe2lmKEc9PSJ0eXBlIiYmby5ub2RlTmFtZShKLCJpbnB1dCIpJiZKLnBhcmVudE5vZGUpe3Rocm93InR5cGUgcHJvcGVydHkgY2FuJ3QgYmUgY2hhbmdlZCJ9SltHXT1LfWlmKG8ubm9kZU5hbWUoSiwiZm9ybSIpJiZKLmdldEF0dHJpYnV0ZU5vZGUoRykpe3JldHVybiBKLmdldEF0dHJpYnV0ZU5vZGUoRykubm9kZVZhbHVlfWlmKEc9PSJ0YWJJbmRleCIpe3ZhciBJPUouZ2V0QXR0cmlidXRlTm9kZSgidGFiSW5kZXgiKTtyZXR1cm4gSSYmSS5zcGVjaWZpZWQ/SS52YWx1ZTpKLm5vZGVOYW1lLm1hdGNoKC8oYnV0dG9ufGlucHV0fG9iamVjdHxzZWxlY3R8dGV4dGFyZWEpL2kpPzA6Si5ub2RlTmFtZS5tYXRjaCgvXihhfGFyZWEpJC9pKSYmSi5ocmVmPzA6Z31yZXR1cm4gSltHXX1pZighby5zdXBwb3J0LnN0eWxlJiZIJiZHPT0ic3R5bGUiKXtyZXR1cm4gby5hdHRyKEouc3R5bGUsImNzc1RleHQiLEspfWlmKEwpe0ouc2V0QXR0cmlidXRlKEcsIiIrSyl9dmFyIEU9IW8uc3VwcG9ydC5ocmVmTm9ybWFsaXplZCYmSCYmRj9KLmdldEF0dHJpYnV0ZShHLDIpOkouZ2V0QXR0cmlidXRlKEcpO3JldHVybiBFPT09bnVsbD9nOkV9aWYoIW8uc3VwcG9ydC5vcGFjaXR5JiZHPT0ib3BhY2l0eSIpe2lmKEwpe0ouem9vbT0xO0ouZmlsdGVyPShKLmZpbHRlcnx8IiIpLnJlcGxhY2UoL2FscGhhXChbXildKlwpLywiIikrKHBhcnNlSW50KEspKyIiPT0iTmFOIj8iIjoiYWxwaGEob3BhY2l0eT0iK0sqMTAwKyIpIil9cmV0dXJuIEouZmlsdGVyJiZKLmZpbHRlci5pbmRleE9mKCJvcGFjaXR5PSIpPj0wPyhwYXJzZUZsb2F0KEouZmlsdGVyLm1hdGNoKC9vcGFjaXR5PShbXildKikvKVsxXSkvMTAwKSsiIjoiIn1HPUcucmVwbGFjZSgvLShbYS16XSkvaWcsZnVuY3Rpb24oTSxOKXtyZXR1cm4gTi50b1VwcGVyQ2FzZSgpfSk7aWYoTCl7SltHXT1LfXJldHVybiBKW0ddfSx0cmltOmZ1bmN0aW9uKEUpe3JldHVybihFfHwiIikucmVwbGFjZSgvXlxzK3xccyskL2csIiIpfSxtYWtlQXJyYXk6ZnVuY3Rpb24oRyl7dmFyIEU9W107aWYoRyE9bnVsbCl7dmFyIEY9Ry5sZW5ndGg7aWYoRj09bnVsbHx8dHlwZW9mIEc9PT0ic3RyaW5nInx8by5pc0Z1bmN0aW9uKEcpfHxHLnNldEludGVydmFsKXtFWzBdPUd9ZWxzZXt3aGlsZShGKXtFWy0tRl09R1tGXX19fXJldHVybiBFfSxpbkFycmF5OmZ1bmN0aW9uKEcsSCl7Zm9yKHZhciBFPTAsRj1ILmxlbmd0aDtFPEY7RSsrKXtpZihIW0VdPT09Ryl7cmV0dXJuIEV9fXJldHVybiAtMX0sbWVyZ2U6ZnVuY3Rpb24oSCxFKXt2YXIgRj0wLEcsST1ILmxlbmd0aDtpZighby5zdXBwb3J0LmdldEFsbCl7d2hpbGUoKEc9RVtGKytdKSE9bnVsbCl7aWYoRy5ub2RlVHlwZSE9OCl7SFtJKytdPUd9fX1lbHNle3doaWxlKChHPUVbRisrXSkhPW51bGwpe0hbSSsrXT1HfX1yZXR1cm4gSH0sdW5pcXVlOmZ1bmN0aW9uKEspe3ZhciBGPVtdLEU9e307dHJ5e2Zvcih2YXIgRz0wLEg9Sy5sZW5ndGg7RzxIO0crKyl7dmFyIEo9by5kYXRhKEtbR10pO2lmKCFFW0pdKXtFW0pdPXRydWU7Ri5wdXNoKEtbR10pfX19Y2F0Y2goSSl7Rj1LfXJldHVybiBGfSxncmVwOmZ1bmN0aW9uKEYsSixFKXt2YXIgRz1bXTtmb3IodmFyIEg9MCxJPUYubGVuZ3RoO0g8STtIKyspe2lmKCFFIT0hSihGW0hdLEgpKXtHLnB1c2goRltIXSl9fXJldHVybiBHfSxtYXA6ZnVuY3Rpb24oRSxKKXt2YXIgRj1bXTtmb3IodmFyIEc9MCxIPUUubGVuZ3RoO0c8SDtHKyspe3ZhciBJPUooRVtHXSxHKTtpZihJIT1udWxsKXtGW0YubGVuZ3RoXT1JfX1yZXR1cm4gRi5jb25jYXQuYXBwbHkoW10sRil9fSk7dmFyIEM9bmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpO28uYnJvd3Nlcj17dmVyc2lvbjooQy5tYXRjaCgvLisoPzpydnxpdHxyYXxpZSlbXC86IF0oW1xkLl0rKS8pfHxbMCwiMCJdKVsxXSxzYWZhcmk6L3dlYmtpdC8udGVzdChDKSxvcGVyYTovb3BlcmEvLnRlc3QoQyksbXNpZTovbXNpZS8udGVzdChDKSYmIS9vcGVyYS8udGVzdChDKSxtb3ppbGxhOi9tb3ppbGxhLy50ZXN0KEMpJiYhLyhjb21wYXRpYmxlfHdlYmtpdCkvLnRlc3QoQyl9O28uZWFjaCh7cGFyZW50OmZ1bmN0aW9uKEUpe3JldHVybiBFLnBhcmVudE5vZGV9LHBhcmVudHM6ZnVuY3Rpb24oRSl7cmV0dXJuIG8uZGlyKEUsInBhcmVudE5vZGUiKX0sbmV4dDpmdW5jdGlvbihFKXtyZXR1cm4gby5udGgoRSwyLCJuZXh0U2libGluZyIpfSxwcmV2OmZ1bmN0aW9uKEUpe3JldHVybiBvLm50aChFLDIsInByZXZpb3VzU2libGluZyIpfSxuZXh0QWxsOmZ1bmN0aW9uKEUpe3JldHVybiBvLmRpcihFLCJuZXh0U2libGluZyIpfSxwcmV2QWxsOmZ1bmN0aW9uKEUpe3JldHVybiBvLmRpcihFLCJwcmV2aW91c1NpYmxpbmciKX0sc2libGluZ3M6ZnVuY3Rpb24oRSl7cmV0dXJuIG8uc2libGluZyhFLnBhcmVudE5vZGUuZmlyc3RDaGlsZCxFKX0sY2hpbGRyZW46ZnVuY3Rpb24oRSl7cmV0dXJuIG8uc2libGluZyhFLmZpcnN0Q2hpbGQpfSxjb250ZW50czpmdW5jdGlvbihFKXtyZXR1cm4gby5ub2RlTmFtZShFLCJpZnJhbWUiKT9FLmNvbnRlbnREb2N1bWVudHx8RS5jb250ZW50V2luZG93LmRvY3VtZW50Om8ubWFrZUFycmF5KEUuY2hpbGROb2Rlcyl9fSxmdW5jdGlvbihFLEYpe28uZm5bRV09ZnVuY3Rpb24oRyl7dmFyIEg9by5tYXAodGhpcyxGKTtpZihHJiZ0eXBlb2YgRz09InN0cmluZyIpe0g9by5tdWx0aUZpbHRlcihHLEgpfXJldHVybiB0aGlzLnB1c2hTdGFjayhvLnVuaXF1ZShIKSxFLEcpfX0pO28uZWFjaCh7YXBwZW5kVG86ImFwcGVuZCIscHJlcGVuZFRvOiJwcmVwZW5kIixpbnNlcnRCZWZvcmU6ImJlZm9yZSIsaW5zZXJ0QWZ0ZXI6ImFmdGVyIixyZXBsYWNlQWxsOiJyZXBsYWNlV2l0aCJ9LGZ1bmN0aW9uKEUsRil7by5mbltFXT1mdW5jdGlvbihHKXt2YXIgSj1bXSxMPW8oRyk7Zm9yKHZhciBLPTAsSD1MLmxlbmd0aDtLPEg7SysrKXsKLXZhciBJPShLPjA/dGhpcy5jbG9uZSh0cnVlKTp0aGlzKS5nZXQoKTtvLmZuW0ZdLmFwcGx5KG8oTFtLXSksSSk7Sj1KLmNvbmNhdChJKX1yZXR1cm4gdGhpcy5wdXNoU3RhY2soSixFLEcpfX0pO28uZWFjaCh7cmVtb3ZlQXR0cjpmdW5jdGlvbihFKXtvLmF0dHIodGhpcyxFLCIiKTtpZih0aGlzLm5vZGVUeXBlPT0xKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShFKX19LGFkZENsYXNzOmZ1bmN0aW9uKEUpe28uY2xhc3NOYW1lLmFkZCh0aGlzLEUpfSxyZW1vdmVDbGFzczpmdW5jdGlvbihFKXtvLmNsYXNzTmFtZS5yZW1vdmUodGhpcyxFKX0sdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24oRixFKXtpZih0eXBlb2YgRSE9PSJib29sZWFuIil7RT0hby5jbGFzc05hbWUuaGFzKHRoaXMsRil9by5jbGFzc05hbWVbRT8iYWRkIjoicmVtb3ZlIl0odGhpcyxGKX0scmVtb3ZlOmZ1bmN0aW9uKEUpe2lmKCFFfHxvLmZpbHRlcihFLFt0aGlzXSkubGVuZ3RoKXtvKCIqIix0aGlzKS5hZGQoW3RoaXNdKS5lYWNoKGZ1bmN0aW9uKCl7by5ldmVudC5yZW1vdmUodGhpcyk7by5yZW1vdmVEYXRhKHRoaXMpfSk7aWYodGhpcy5wYXJlbnROb2RlKXt0aGlzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcyl9fX0sZW1wdHk6ZnVuY3Rpb24oKXtvKHRoaXMpLmNoaWxkcmVuKCkucmVtb3ZlKCk7d2hpbGUodGhpcy5maXJzdENoaWxkKXt0aGlzLnJlbW92ZUNoaWxkKHRoaXMuZmlyc3RDaGlsZCl9fX0sZnVuY3Rpb24oRSxGKXtvLmZuW0VdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChGLGFyZ3VtZW50cyl9fSk7ZnVuY3Rpb24gaihFLEYpe3JldHVybiBFWzBdJiZwYXJzZUludChvLmN1ckNTUyhFWzBdLEYsdHJ1ZSksMTApfHwwfXZhciBoPSJqUXVlcnkiK2UoKSx2PTAsQT17fTtvLmV4dGVuZCh7Y2FjaGU6e30sZGF0YTpmdW5jdGlvbihGLEUsRyl7Rj1GPT1sP0E6Rjt2YXIgSD1GW2hdO2lmKCFIKXtIPUZbaF09Kyt2fWlmKEUmJiFvLmNhY2hlW0hdKXtvLmNhY2hlW0hdPXt9fWlmKEchPT1nKXtvLmNhY2hlW0hdW0VdPUd9cmV0dXJuIEU/by5jYWNoZVtIXVtFXTpIfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKEYsRSl7Rj1GPT1sP0E6Rjt2YXIgSD1GW2hdO2lmKEUpe2lmKG8uY2FjaGVbSF0pe2RlbGV0ZSBvLmNhY2hlW0hdW0VdO0U9IiI7Zm9yKEUgaW4gby5jYWNoZVtIXSl7YnJlYWt9aWYoIUUpe28ucmVtb3ZlRGF0YShGKX19fWVsc2V7dHJ5e2RlbGV0ZSBGW2hdfWNhdGNoKEcpe2lmKEYucmVtb3ZlQXR0cmlidXRlKXtGLnJlbW92ZUF0dHJpYnV0ZShoKX19ZGVsZXRlIG8uY2FjaGVbSF19fSxxdWV1ZTpmdW5jdGlvbihGLEUsSCl7aWYoRil7RT0oRXx8ImZ4IikrInF1ZXVlIjt2YXIgRz1vLmRhdGEoRixFKTtpZighR3x8by5pc0FycmF5KEgpKXtHPW8uZGF0YShGLEUsby5tYWtlQXJyYXkoSCkpfWVsc2V7aWYoSCl7Ry5wdXNoKEgpfX19cmV0dXJuIEd9LGRlcXVldWU6ZnVuY3Rpb24oSCxHKXt2YXIgRT1vLnF1ZXVlKEgsRyksRj1FLnNoaWZ0KCk7aWYoIUd8fEc9PT0iZngiKXtGPUVbMF19aWYoRiE9PWcpe0YuY2FsbChIKX19fSk7by5mbi5leHRlbmQoe2RhdGE6ZnVuY3Rpb24oRSxHKXt2YXIgSD1FLnNwbGl0KCIuIik7SFsxXT1IWzFdPyIuIitIWzFdOiIiO2lmKEc9PT1nKXt2YXIgRj10aGlzLnRyaWdnZXJIYW5kbGVyKCJnZXREYXRhIitIWzFdKyIhIixbSFswXV0pO2lmKEY9PT1nJiZ0aGlzLmxlbmd0aCl7Rj1vLmRhdGEodGhpc1swXSxFKX1yZXR1cm4gRj09PWcmJkhbMV0/dGhpcy5kYXRhKEhbMF0pOkZ9ZWxzZXtyZXR1cm4gdGhpcy50cmlnZ2VyKCJzZXREYXRhIitIWzFdKyIhIixbSFswXSxHXSkuZWFjaChmdW5jdGlvbigpe28uZGF0YSh0aGlzLEUsRyl9KX19LHJlbW92ZURhdGE6ZnVuY3Rpb24oRSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe28ucmVtb3ZlRGF0YSh0aGlzLEUpfSl9LHF1ZXVlOmZ1bmN0aW9uKEUsRil7aWYodHlwZW9mIEUhPT0ic3RyaW5nIil7Rj1FO0U9ImZ4In1pZihGPT09Zyl7cmV0dXJuIG8ucXVldWUodGhpc1swXSxFKX1yZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIEc9by5xdWV1ZSh0aGlzLEUsRik7aWYoRT09ImZ4IiYmRy5sZW5ndGg9PTEpe0dbMF0uY2FsbCh0aGlzKX19KX0sZGVxdWV1ZTpmdW5jdGlvbihFKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7by5kZXF1ZXVlKHRoaXMsRSl9KX19KTsKLS8qCi0gKiBTaXp6bGUgQ1NTIFNlbGVjdG9yIEVuZ2luZSAtIHYwLjkuMwotICogIENvcHlyaWdodCAyMDA5LCBUaGUgRG9qbyBGb3VuZGF0aW9uCi0gKiAgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCwgQlNELCBhbmQgR1BMIExpY2Vuc2VzLgotICogIE1vcmUgaW5mb3JtYXRpb246IGh0dHA6Ly9zaXp6bGVqcy5jb20vCi0gKi8KLShmdW5jdGlvbigpe3ZhciBSPS8oKD86XCgoPzpcKFteKCldK1wpfFteKCldKykrXCl8XFsoPzpcW1teW1xdXSpcXXxbJyJdW14nIl0qWyciXXxbXltcXSciXSspK1xdfFxcLnxbXiA+K34sKFxbXFxdKykrfFs+K35dKShccyosXHMqKT8vZyxMPTAsSD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO3ZhciBGPWZ1bmN0aW9uKFksVSxhYixhYyl7YWI9YWJ8fFtdO1U9VXx8ZG9jdW1lbnQ7aWYoVS5ub2RlVHlwZSE9PTEmJlUubm9kZVR5cGUhPT05KXtyZXR1cm5bXX1pZighWXx8dHlwZW9mIFkhPT0ic3RyaW5nIil7cmV0dXJuIGFifXZhciBaPVtdLFcsYWYsYWksVCxhZCxWLFg9dHJ1ZTtSLmxhc3RJbmRleD0wO3doaWxlKChXPVIuZXhlYyhZKSkhPT1udWxsKXtaLnB1c2goV1sxXSk7aWYoV1syXSl7Vj1SZWdFeHAucmlnaHRDb250ZXh0O2JyZWFrfX1pZihaLmxlbmd0aD4xJiZNLmV4ZWMoWSkpe2lmKFoubGVuZ3RoPT09MiYmSS5yZWxhdGl2ZVtaWzBdXSl7YWY9SihaWzBdK1pbMV0sVSl9ZWxzZXthZj1JLnJlbGF0aXZlW1pbMF1dP1tVXTpGKFouc2hpZnQoKSxVKTt3aGlsZShaLmxlbmd0aCl7WT1aLnNoaWZ0KCk7aWYoSS5yZWxhdGl2ZVtZXSl7WSs9Wi5zaGlmdCgpfWFmPUooWSxhZil9fX1lbHNle3ZhciBhZT1hYz97ZXhwcjpaLnBvcCgpLHNldDpFKGFjKX06Ri5maW5kKFoucG9wKCksWi5sZW5ndGg9PT0xJiZVLnBhcmVudE5vZGU/VS5wYXJlbnROb2RlOlUsUShVKSk7YWY9Ri5maWx0ZXIoYWUuZXhwcixhZS5zZXQpO2lmKFoubGVuZ3RoPjApe2FpPUUoYWYpfWVsc2V7WD1mYWxzZX13aGlsZShaLmxlbmd0aCl7dmFyIGFoPVoucG9wKCksYWc9YWg7aWYoIUkucmVsYXRpdmVbYWhdKXthaD0iIn1lbHNle2FnPVoucG9wKCl9aWYoYWc9PW51bGwpe2FnPVV9SS5yZWxhdGl2ZVthaF0oYWksYWcsUShVKSl9fWlmKCFhaSl7YWk9YWZ9aWYoIWFpKXt0aHJvdyJTeW50YXggZXJyb3IsIHVucmVjb2duaXplZCBleHByZXNzaW9uOiAiKyhhaHx8WSl9aWYoSC5jYWxsKGFpKT09PSJbb2JqZWN0IEFycmF5XSIpe2lmKCFYKXthYi5wdXNoLmFwcGx5KGFiLGFpKX1lbHNle2lmKFUubm9kZVR5cGU9PT0xKXtmb3IodmFyIGFhPTA7YWlbYWFdIT1udWxsO2FhKyspe2lmKGFpW2FhXSYmKGFpW2FhXT09PXRydWV8fGFpW2FhXS5ub2RlVHlwZT09PTEmJksoVSxhaVthYV0pKSl7YWIucHVzaChhZlthYV0pfX19ZWxzZXtmb3IodmFyIGFhPTA7YWlbYWFdIT1udWxsO2FhKyspe2lmKGFpW2FhXSYmYWlbYWFdLm5vZGVUeXBlPT09MSl7YWIucHVzaChhZlthYV0pfX19fX1lbHNle0UoYWksYWIpfWlmKFYpe0YoVixVLGFiLGFjKTtpZihHKXtoYXNEdXBsaWNhdGU9ZmFsc2U7YWIuc29ydChHKTtpZihoYXNEdXBsaWNhdGUpe2Zvcih2YXIgYWE9MTthYTxhYi5sZW5ndGg7YWErKyl7aWYoYWJbYWFdPT09YWJbYWEtMV0pe2FiLnNwbGljZShhYS0tLDEpfX19fX1yZXR1cm4gYWJ9O0YubWF0Y2hlcz1mdW5jdGlvbihULFUpe3JldHVybiBGKFQsbnVsbCxudWxsLFUpfTtGLmZpbmQ9ZnVuY3Rpb24oYWEsVCxhYil7dmFyIFosWDtpZighYWEpe3JldHVybltdfWZvcih2YXIgVz0wLFY9SS5vcmRlci5sZW5ndGg7VzxWO1crKyl7dmFyIFk9SS5vcmRlcltXXSxYO2lmKChYPUkubWF0Y2hbWV0uZXhlYyhhYSkpKXt2YXIgVT1SZWdFeHAubGVmdENvbnRleHQ7aWYoVS5zdWJzdHIoVS5sZW5ndGgtMSkhPT0iXFwiKXtYWzFdPShYWzFdfHwiIikucmVwbGFjZSgvXFwvZywiIik7Wj1JLmZpbmRbWV0oWCxULGFiKTtpZihaIT1udWxsKXthYT1hYS5yZXBsYWNlKEkubWF0Y2hbWV0sIiIpO2JyZWFrfX19fWlmKCFaKXtaPVQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKX1yZXR1cm57c2V0OlosZXhwcjphYX19O0YuZmlsdGVyPWZ1bmN0aW9uKGFkLGFjLGFnLFcpe3ZhciBWPWFkLGFpPVtdLGFhPWFjLFksVCxaPWFjJiZhY1swXSYmUShhY1swXSk7d2hpbGUoYWQmJmFjLmxlbmd0aCl7Zm9yKHZhciBhYiBpbiBJLmZpbHRlcil7aWYoKFk9SS5tYXRjaFthYl0uZXhlYyhhZCkpIT1udWxsKXt2YXIgVT1JLmZpbHRlclthYl0sYWgsYWY7VD1mYWxzZTtpZihhYT09YWkpe2FpPVtdfWlmKEkucHJlRmlsdGVyW2FiXSl7WT1JLnByZUZpbHRlclthYl0oWSxhYSxhZyxhaSxXLFopO2lmKCFZKXtUPWFoPXRydWV9ZWxzZXtpZihZPT09dHJ1ZSl7Y29udGludWV9fX1pZihZKXtmb3IodmFyIFg9MDsoYWY9YWFbWF0pIT1udWxsO1grKyl7aWYoYWYpe2FoPVUoYWYsWSxYLGFhKTt2YXIgYWU9V14hIWFoO2lmKGFnJiZhaCE9bnVsbCl7aWYoYWUpe1Q9dHJ1ZX1lbHNle2FhW1hdPWZhbHNlfX1lbHNle2lmKGFlKXthaS5wdXNoKGFmKTtUPXRydWV9fX19fWlmKGFoIT09Zyl7aWYoIWFnKXthYT1haX1hZD1hZC5yZXBsYWNlKEkubWF0Y2hbYWJdLCIiKTtpZighVCl7cmV0dXJuW119YnJlYWt9fX1pZihhZD09Vil7aWYoVD09bnVsbCl7dGhyb3ciU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIithZH1lbHNle2JyZWFrfX1WPWFkfXJldHVybiBhYX07dmFyIEk9Ri5zZWxlY3RvcnM9e29yZGVyOlsiSUQiLCJOQU1FIiwiVEFHIl0sbWF0Y2g6e0lEOi8jKCg/Oltcd1x1MDBjMC1cdUZGRkZfLV18XFwuKSspLyxDTEFTUzovXC4oKD86W1x3XHUwMGMwLVx1RkZGRl8tXXxcXC4pKykvLE5BTUU6L1xbbmFtZT1bJyJdKigoPzpbXHdcdTAwYzAtXHVGRkZGXy1dfFxcLikrKVsnIl0qXF0vLEFUVFI6L1xbXHMqKCg/Oltcd1x1MDBjMC1cdUZGRkZfLV18XFwuKSspXHMqKD86KFxTPz0pXHMqKFsnIl0qKSguKj8pXDN8KVxzKlxdLyxUQUc6L14oKD86W1x3XHUwMGMwLVx1RkZGRlwqXy1dfFxcLikrKS8sQ0hJTEQ6Lzoob25seXxudGh8bGFzdHxmaXJzdCktY2hpbGQoPzpcKChldmVufG9kZHxbXGRuKy1dKilcKSk/LyxQT1M6LzoobnRofGVxfGd0fGx0fGZpcnN0fGxhc3R8ZXZlbnxvZGQpKD86XCgoXGQqKVwpKT8oPz1bXi1dfCQpLyxQU0VVRE86LzooKD86W1x3XHUwMGMwLVx1RkZGRl8tXXxcXC4pKykoPzpcKChbJyJdKikoKD86XChbXlwpXStcKXxbXlwyXChcKV0qKSspXDJcKSk/L30sYXR0ck1hcDp7ImNsYXNzIjoiY2xhc3NOYW1lIiwiZm9yIjoiaHRtbEZvciJ9LGF0dHJIYW5kbGU6e2hyZWY6ZnVuY3Rpb24oVCl7cmV0dXJuIFQuZ2V0QXR0cmlidXRlKCJocmVmIil9fSxyZWxhdGl2ZTp7IisiOmZ1bmN0aW9uKGFhLFQsWil7dmFyIFg9dHlwZW9mIFQ9PT0ic3RyaW5nIixhYj1YJiYhL1xXLy50ZXN0KFQpLFk9WCYmIWFiO2lmKGFiJiYhWil7VD1ULnRvVXBwZXJDYXNlKCl9Zm9yKHZhciBXPTAsVj1hYS5sZW5ndGgsVTtXPFY7VysrKXtpZigoVT1hYVtXXSkpe3doaWxlKChVPVUucHJldmlvdXNTaWJsaW5nKSYmVS5ub2RlVHlwZSE9PTEpe31hYVtXXT1ZfHxVJiZVLm5vZGVOYW1lPT09VD9VfHxmYWxzZTpVPT09VH19aWYoWSl7Ri5maWx0ZXIoVCxhYSx0cnVlKX19LCI+IjpmdW5jdGlvbihaLFUsYWEpe3ZhciBYPXR5cGVvZiBVPT09InN0cmluZyI7aWYoWCYmIS9cVy8udGVzdChVKSl7VT1hYT9VOlUudG9VcHBlckNhc2UoKTtmb3IodmFyIFY9MCxUPVoubGVuZ3RoO1Y8VDtWKyspe3ZhciBZPVpbVl07aWYoWSl7dmFyIFc9WS5wYXJlbnROb2RlO1pbVl09Vy5ub2RlTmFtZT09PVU/VzpmYWxzZX19fWVsc2V7Zm9yKHZhciBWPTAsVD1aLmxlbmd0aDtWPFQ7VisrKXt2YXIgWT1aW1ZdO2lmKFkpe1pbVl09WD9ZLnBhcmVudE5vZGU6WS5wYXJlbnROb2RlPT09VX19aWYoWCl7Ri5maWx0ZXIoVSxaLHRydWUpfX19LCIiOmZ1bmN0aW9uKFcsVSxZKXt2YXIgVj1MKyssVD1TO2lmKCFVLm1hdGNoKC9cVy8pKXt2YXIgWD1VPVk/VTpVLnRvVXBwZXJDYXNlKCk7VD1QfVQoInBhcmVudE5vZGUiLFUsVixXLFgsWSl9LCJ+IjpmdW5jdGlvbihXLFUsWSl7dmFyIFY9TCsrLFQ9UztpZih0eXBlb2YgVT09PSJzdHJpbmciJiYhVS5tYXRjaCgvXFcvKSl7dmFyIFg9VT1ZP1U6VS50b1VwcGVyQ2FzZSgpO1Q9UH1UKCJwcmV2aW91c1NpYmxpbmciLFUsVixXLFgsWSl9fSxmaW5kOntJRDpmdW5jdGlvbihVLFYsVyl7aWYodHlwZW9mIFYuZ2V0RWxlbWVudEJ5SWQhPT0idW5kZWZpbmVkIiYmIVcpe3ZhciBUPVYuZ2V0RWxlbWVudEJ5SWQoVVsxXSk7cmV0dXJuIFQ/W1RdOltdfX0sTkFNRTpmdW5jdGlvbihWLFksWil7aWYodHlwZW9mIFkuZ2V0RWxlbWVudHNCeU5hbWUhPT0idW5kZWZpbmVkIil7dmFyIFU9W10sWD1ZLmdldEVsZW1lbnRzQnlOYW1lKFZbMV0pO2Zvcih2YXIgVz0wLFQ9WC5sZW5ndGg7VzxUO1crKyl7aWYoWFtXXS5nZXRBdHRyaWJ1dGUoIm5hbWUiKT09PVZbMV0pe1UucHVzaChYW1ddKX19cmV0dXJuIFUubGVuZ3RoPT09MD9udWxsOlV9fSxUQUc6ZnVuY3Rpb24oVCxVKXtyZXR1cm4gVS5nZXRFbGVtZW50c0J5VGFnTmFtZShUWzFdKX19LHByZUZpbHRlcjp7Q0xBU1M6ZnVuY3Rpb24oVyxVLFYsVCxaLGFhKXtXPSIgIitXWzFdLnJlcGxhY2UoL1xcL2csIiIpKyIgIjtpZihhYSl7cmV0dXJuIFd9Zm9yKHZhciBYPTAsWTsoWT1VW1hdKSE9bnVsbDtYKyspe2lmKFkpe2lmKFpeKFkuY2xhc3NOYW1lJiYoIiAiK1kuY2xhc3NOYW1lKyIgIikuaW5kZXhPZihXKT49MCkpe2lmKCFWKXtULnB1c2goWSl9fWVsc2V7aWYoVil7VVtYXT1mYWxzZX19fX1yZXR1cm4gZmFsc2V9LElEOmZ1bmN0aW9uKFQpe3JldHVybiBUWzFdLnJlcGxhY2UoL1xcL2csIiIpfSxUQUc6ZnVuY3Rpb24oVSxUKXtmb3IodmFyIFY9MDtUW1ZdPT09ZmFsc2U7VisrKXt9cmV0dXJuIFRbVl0mJlEoVFtWXSk/VVsxXTpVWzFdLnRvVXBwZXJDYXNlKCl9LENISUxEOmZ1bmN0aW9uKFQpe2lmKFRbMV09PSJudGgiKXt2YXIgVT0vKC0/KShcZCopbigoPzpcK3wtKT9cZCopLy5leGVjKFRbMl09PSJldmVuIiYmIjJuInx8VFsyXT09Im9kZCImJiIybisxInx8IS9cRC8udGVzdChUWzJdKSYmIjBuKyIrVFsyXXx8VFsyXSk7VFsyXT0oVVsxXSsoVVsyXXx8MSkpLTA7VFszXT1VWzNdLTB9VFswXT1MKys7cmV0dXJuIFR9LEFUVFI6ZnVuY3Rpb24oWCxVLFYsVCxZLFope3ZhciBXPVhbMV0ucmVwbGFjZSgvXFwvZywiIik7aWYoIVomJkkuYXR0ck1hcFtXXSl7WFsxXT1JLmF0dHJNYXBbV119aWYoWFsyXT09PSJ+PSIpe1hbNF09IiAiK1hbNF0rIiAifXJldHVybiBYfSxQU0VVRE86ZnVuY3Rpb24oWCxVLFYsVCxZKXtpZihYWzFdPT09Im5vdCIpe2lmKFhbM10ubWF0Y2goUikubGVuZ3RoPjF8fC9eXHcvLnRlc3QoWFszXSkpe1hbM109RihYWzNdLG51bGwsbnVsbCxVKX1lbHNle3ZhciBXPUYuZmlsdGVyKFhbM10sVSxWLHRydWVeWSk7aWYoIVYpe1QucHVzaC5hcHBseShULFcpfXJldHVybiBmYWxzZX19ZWxzZXtpZihJLm1hdGNoLlBPUy50ZXN0KFhbMF0pfHxJLm1hdGNoLkNISUxELnRlc3QoWFswXSkpe3JldHVybiB0cnVlfX1yZXR1cm4gWH0sUE9TOmZ1bmN0aW9uKFQpe1QudW5zaGlmdCh0cnVlKTtyZXR1cm4gVH19LGZpbHRlcnM6e2VuYWJsZWQ6ZnVuY3Rpb24oVCl7cmV0dXJuIFQuZGlzYWJsZWQ9PT1mYWxzZSYmVC50eXBlIT09ImhpZGRlbiJ9LGRpc2FibGVkOmZ1bmN0aW9uKFQpe3JldHVybiBULmRpc2FibGVkPT09dHJ1ZX0sY2hlY2tlZDpmdW5jdGlvbihUKXtyZXR1cm4gVC5jaGVja2VkPT09dHJ1ZX0sc2VsZWN0ZWQ6ZnVuY3Rpb24oVCl7VC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7cmV0dXJuIFQuc2VsZWN0ZWQ9PT10cnVlfSxwYXJlbnQ6ZnVuY3Rpb24oVCl7cmV0dXJuICEhVC5maXJzdENoaWxkfSxlbXB0eTpmdW5jdGlvbihUKXtyZXR1cm4gIVQuZmlyc3RDaGlsZH0saGFzOmZ1bmN0aW9uKFYsVSxUKXtyZXR1cm4gISFGKFRbM10sVikubGVuZ3RofSxoZWFkZXI6ZnVuY3Rpb24oVCl7cmV0dXJuL2hcZC9pLnRlc3QoVC5ub2RlTmFtZSl9LHRleHQ6ZnVuY3Rpb24oVCl7cmV0dXJuInRleHQiPT09VC50eXBlfSxyYWRpbzpmdW5jdGlvbihUKXtyZXR1cm4icmFkaW8iPT09VC50eXBlfSxjaGVja2JveDpmdW5jdGlvbihUKXtyZXR1cm4iY2hlY2tib3giPT09VC50eXBlfSxmaWxlOmZ1bmN0aW9uKFQpe3JldHVybiJmaWxlIj09PVQudHlwZX0scGFzc3dvcmQ6ZnVuY3Rpb24oVCl7cmV0dXJuInBhc3N3b3JkIj09PVQudHlwZX0sc3VibWl0OmZ1bmN0aW9uKFQpe3JldHVybiJzdWJtaXQiPT09VC50eXBlfSxpbWFnZTpmdW5jdGlvbihUKXtyZXR1cm4iaW1hZ2UiPT09VC50eXBlfSxyZXNldDpmdW5jdGlvbihUKXtyZXR1cm4icmVzZXQiPT09VC50eXBlfSxidXR0b246ZnVuY3Rpb24oVCl7cmV0dXJuImJ1dHRvbiI9PT1ULnR5cGV8fFQubm9kZU5hbWUudG9VcHBlckNhc2UoKT09PSJCVVRUT04ifSxpbnB1dDpmdW5jdGlvbihUKXtyZXR1cm4vaW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbi9pLnRlc3QoVC5ub2RlTmFtZSl9fSxzZXRGaWx0ZXJzOntmaXJzdDpmdW5jdGlvbihVLFQpe3JldHVybiBUPT09MH0sbGFzdDpmdW5jdGlvbihWLFUsVCxXKXtyZXR1cm4gVT09PVcubGVuZ3RoLTF9LGV2ZW46ZnVuY3Rpb24oVSxUKXtyZXR1cm4gVCUyPT09MH0sb2RkOmZ1bmN0aW9uKFUsVCl7cmV0dXJuIFQlMj09PTF9LGx0OmZ1bmN0aW9uKFYsVSxUKXtyZXR1cm4gVTxUWzNdLTB9LGd0OmZ1bmN0aW9uKFYsVSxUKXtyZXR1cm4gVT5UWzNdLTB9LG50aDpmdW5jdGlvbihWLFUsVCl7cmV0dXJuIFRbM10tMD09VX0sZXE6ZnVuY3Rpb24oVixVLFQpe3JldHVybiBUWzNdLTA9PVV9fSxmaWx0ZXI6e1BTRVVETzpmdW5jdGlvbihaLFYsVyxhYSl7dmFyIFU9VlsxXSxYPUkuZmlsdGVyc1tVXTtpZihYKXtyZXR1cm4gWChaLFcsVixhYSl9ZWxzZXtpZihVPT09ImNvbnRhaW5zIil7cmV0dXJuKFoudGV4dENvbnRlbnR8fFouaW5uZXJUZXh0fHwiIikuaW5kZXhPZihWWzNdKT49MH1lbHNle2lmKFU9PT0ibm90Iil7dmFyIFk9VlszXTtmb3IodmFyIFc9MCxUPVkubGVuZ3RoO1c8VDtXKyspe2lmKFlbV109PT1aKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfX19fSxDSElMRDpmdW5jdGlvbihULFcpe3ZhciBaPVdbMV0sVT1UO3N3aXRjaChaKXtjYXNlIm9ubHkiOmNhc2UiZmlyc3QiOndoaWxlKFU9VS5wcmV2aW91c1NpYmxpbmcpe2lmKFUubm9kZVR5cGU9PT0xKXtyZXR1cm4gZmFsc2V9fWlmKFo9PSJmaXJzdCIpe3JldHVybiB0cnVlfVU9VDtjYXNlImxhc3QiOndoaWxlKFU9VS5uZXh0U2libGluZyl7aWYoVS5ub2RlVHlwZT09PTEpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWU7Y2FzZSJudGgiOnZhciBWPVdbMl0sYWM9V1szXTtpZihWPT0xJiZhYz09MCl7cmV0dXJuIHRydWV9dmFyIFk9V1swXSxhYj1ULnBhcmVudE5vZGU7aWYoYWImJihhYi5zaXpjYWNoZSE9PVl8fCFULm5vZGVJbmRleCkpe3ZhciBYPTA7Zm9yKFU9YWIuZmlyc3RDaGlsZDtVO1U9VS5uZXh0U2libGluZyl7aWYoVS5ub2RlVHlwZT09PTEpe1Uubm9kZUluZGV4PSsrWH19YWIuc2l6Y2FjaGU9WX12YXIgYWE9VC5ub2RlSW5kZXgtYWM7aWYoVj09MCl7cmV0dXJuIGFhPT0wfWVsc2V7cmV0dXJuKGFhJVY9PTAmJmFhL1Y+PTApfX19LElEOmZ1bmN0aW9uKFUsVCl7cmV0dXJuIFUubm9kZVR5cGU9PT0xJiZVLmdldEF0dHJpYnV0ZSgiaWQiKT09PVR9LFRBRzpmdW5jdGlvbihVLFQpe3JldHVybihUPT09IioiJiZVLm5vZGVUeXBlPT09MSl8fFUubm9kZU5hbWU9PT1UfSxDTEFTUzpmdW5jdGlvbihVLFQpe3JldHVybigiICIrKFUuY2xhc3NOYW1lfHxVLmdldEF0dHJpYnV0ZSgiY2xhc3MiKSkrIiAiKS5pbmRleE9mKFQpPi0xfSxBVFRSOmZ1bmN0aW9uKFksVyl7dmFyIFY9V1sxXSxUPUkuYXR0ckhhbmRsZVtWXT9JLmF0dHJIYW5kbGVbVl0oWSk6WVtWXSE9bnVsbD9ZW1ZdOlkuZ2V0QXR0cmlidXRlKFYpLFo9VCsiIixYPVdbMl0sVT1XWzRdO3JldHVybiBUPT1udWxsP1g9PT0iIT0iOlg9PT0iPSI/Wj09PVU6WD09PSIqPSI/Wi5pbmRleE9mKFUpPj0wOlg9PT0ifj0iPygiICIrWisiICIpLmluZGV4T2YoVSk+PTA6IVU/WiYmVCE9PWZhbHNlOlg9PT0iIT0iP1ohPVU6WD09PSJePSI/Wi5pbmRleE9mKFUpPT09MDpYPT09IiQ9Ij9aLnN1YnN0cihaLmxlbmd0aC1VLmxlbmd0aCk9PT1VOlg9PT0ifD0iP1o9PT1VfHxaLnN1YnN0cigwLFUubGVuZ3RoKzEpPT09VSsiLSI6ZmFsc2V9LFBPUzpmdW5jdGlvbihYLFUsVixZKXt2YXIgVD1VWzJdLFc9SS5zZXRGaWx0ZXJzW1RdO2lmKFcpe3JldHVybiBXKFgsVixVLFkpfX19fTt2YXIgTT1JLm1hdGNoLlBPUztmb3IodmFyIE8gaW4gSS5tYXRjaCl7SS5tYXRjaFtPXT1SZWdFeHAoSS5tYXRjaFtPXS5zb3VyY2UrLyg/IVteXFtdKlxdKSg/IVteXChdKlwpKS8uc291cmNlKX12YXIgRT1mdW5jdGlvbihVLFQpe1U9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoVSk7aWYoVCl7VC5wdXNoLmFwcGx5KFQsVSk7cmV0dXJuIFR9cmV0dXJuIFV9O3RyeXtBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2hpbGROb2Rlcyl9Y2F0Y2goTil7RT1mdW5jdGlvbihYLFcpe3ZhciBVPVd8fFtdO2lmKEguY2FsbChYKT09PSJbb2JqZWN0IEFycmF5XSIpe0FycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KFUsWCl9ZWxzZXtpZih0eXBlb2YgWC5sZW5ndGg9PT0ibnVtYmVyIil7Zm9yKHZhciBWPTAsVD1YLmxlbmd0aDtWPFQ7VisrKXtVLnB1c2goWFtWXSl9fWVsc2V7Zm9yKHZhciBWPTA7WFtWXTtWKyspe1UucHVzaChYW1ZdKX19fXJldHVybiBVfX12YXIgRztpZihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY29tcGFyZURvY3VtZW50UG9zaXRpb24pe0c9ZnVuY3Rpb24oVSxUKXt2YXIgVj1VLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKFQpJjQ/LTE6VT09PVQ/MDoxO2lmKFY9PT0wKXtoYXNEdXBsaWNhdGU9dHJ1ZX1yZXR1cm4gVn19ZWxzZXtpZigic291cmNlSW5kZXgiIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCl7Rz1mdW5jdGlvbihVLFQpe3ZhciBWPVUuc291cmNlSW5kZXgtVC5zb3VyY2VJbmRleDtpZihWPT09MCl7aGFzRHVwbGljYXRlPXRydWV9cmV0dXJuIFZ9fWVsc2V7aWYoZG9jdW1lbnQuY3JlYXRlUmFuZ2Upe0c9ZnVuY3Rpb24oVyxVKXt2YXIgVj1XLm93bmVyRG9jdW1lbnQuY3JlYXRlUmFuZ2UoKSxUPVUub3duZXJEb2N1bWVudC5jcmVhdGVSYW5nZSgpO1Yuc2VsZWN0Tm9kZShXKTtWLmNvbGxhcHNlKHRydWUpO1Quc2VsZWN0Tm9kZShVKTtULmNvbGxhcHNlKHRydWUpO3ZhciBYPVYuY29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlLlNUQVJUX1RPX0VORCxUKTtpZihYPT09MCl7aGFzRHVwbGljYXRlPXRydWV9cmV0dXJuIFh9fX19KGZ1bmN0aW9uKCl7dmFyIFU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZm9ybSIpLFY9InNjcmlwdCIrKG5ldyBEYXRlKS5nZXRUaW1lKCk7VS5pbm5lckhUTUw9IjxpbnB1dCBuYW1lPSciK1YrIicvPiI7dmFyIFQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1QuaW5zZXJ0QmVmb3JlKFUsVC5maXJzdENoaWxkKTtpZighIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFYpKXtJLmZpbmQuSUQ9ZnVuY3Rpb24oWCxZLFope2lmKHR5cGVvZiBZLmdldEVsZW1lbnRCeUlkIT09InVuZGVmaW5lZCImJiFaKXt2YXIgVz1ZLmdldEVsZW1lbnRCeUlkKFhbMV0pO3JldHVybiBXP1cuaWQ9PT1YWzFdfHx0eXBlb2YgVy5nZXRBdHRyaWJ1dGVOb2RlIT09InVuZGVmaW5lZCImJlcuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKS5ub2RlVmFsdWU9PT1YWzFdP1tXXTpnOltdfX07SS5maWx0ZXIuSUQ9ZnVuY3Rpb24oWSxXKXt2YXIgWD10eXBlb2YgWS5nZXRBdHRyaWJ1dGVOb2RlIT09InVuZGVmaW5lZCImJlkuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTtyZXR1cm4gWS5ub2RlVHlwZT09PTEmJlgmJlgubm9kZVZhbHVlPT09V319VC5yZW1vdmVDaGlsZChVKX0pKCk7KGZ1bmN0aW9uKCl7dmFyIFQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7VC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVDb21tZW50KCIiKSk7aWYoVC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLmxlbmd0aD4wKXtJLmZpbmQuVEFHPWZ1bmN0aW9uKFUsWSl7dmFyIFg9WS5nZXRFbGVtZW50c0J5VGFnTmFtZShVWzFdKTtpZihVWzFdPT09IioiKXt2YXIgVz1bXTtmb3IodmFyIFY9MDtYW1ZdO1YrKyl7aWYoWFtWXS5ub2RlVHlwZT09PTEpe1cucHVzaChYW1ZdKX19WD1XfXJldHVybiBYfX1ULmlubmVySFRNTD0iPGEgaHJlZj0nIyc+PC9hPiI7aWYoVC5maXJzdENoaWxkJiZ0eXBlb2YgVC5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSE9PSJ1bmRlZmluZWQiJiZULmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJocmVmIikhPT0iIyIpe0kuYXR0ckhhbmRsZS5ocmVmPWZ1bmN0aW9uKFUpe3JldHVybiBVLmdldEF0dHJpYnV0ZSgiaHJlZiIsMil9fX0pKCk7aWYoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCl7KGZ1bmN0aW9uKCl7dmFyIFQ9RixVPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO1UuaW5uZXJIVE1MPSI8cCBjbGFzcz0nVEVTVCc+PC9wPiI7aWYoVS5xdWVyeVNlbGVjdG9yQWxsJiZVLnF1ZXJ5U2VsZWN0b3JBbGwoIi5URVNUIikubGVuZ3RoPT09MCl7cmV0dXJufUY9ZnVuY3Rpb24oWSxYLFYsVyl7WD1YfHxkb2N1bWVudDtpZighVyYmWC5ub2RlVHlwZT09PTkmJiFRKFgpKXt0cnl7cmV0dXJuIEUoWC5xdWVyeVNlbGVjdG9yQWxsKFkpLFYpfWNhdGNoKFope319cmV0dXJuIFQoWSxYLFYsVyl9O0YuZmluZD1ULmZpbmQ7Ri5maWx0ZXI9VC5maWx0ZXI7Ri5zZWxlY3RvcnM9VC5zZWxlY3RvcnM7Ri5tYXRjaGVzPVQubWF0Y2hlc30pKCl9aWYoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUpeyhmdW5jdGlvbigpe3ZhciBUPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO1QuaW5uZXJIVE1MPSI8ZGl2IGNsYXNzPSd0ZXN0IGUnPjwvZGl2PjxkaXYgY2xhc3M9J3Rlc3QnPjwvZGl2PiI7aWYoVC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlIikubGVuZ3RoPT09MCl7cmV0dXJufVQubGFzdENoaWxkLmNsYXNzTmFtZT0iZSI7aWYoVC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlIikubGVuZ3RoPT09MSl7cmV0dXJufUkub3JkZXIuc3BsaWNlKDEsMCwiQ0xBU1MiKTtJLmZpbmQuQ0xBU1M9ZnVuY3Rpb24oVSxWLFcpe2lmKHR5cGVvZiBWLmdldEVsZW1lbnRzQnlDbGFzc05hbWUhPT0idW5kZWZpbmVkIiYmIVcpe3JldHVybiBWLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoVVsxXSl9fX0pKCl9ZnVuY3Rpb24gUChVLFosWSxhZCxhYSxhYyl7dmFyIGFiPVU9PSJwcmV2aW91c1NpYmxpbmciJiYhYWM7Zm9yKHZhciBXPTAsVj1hZC5sZW5ndGg7VzxWO1crKyl7dmFyIFQ9YWRbV107aWYoVCl7aWYoYWImJlQubm9kZVR5cGU9PT0xKXtULnNpemNhY2hlPVk7VC5zaXpzZXQ9V31UPVRbVV07dmFyIFg9ZmFsc2U7d2hpbGUoVCl7aWYoVC5zaXpjYWNoZT09PVkpe1g9YWRbVC5zaXpzZXRdO2JyZWFrfWlmKFQubm9kZVR5cGU9PT0xJiYhYWMpe1Quc2l6Y2FjaGU9WTtULnNpenNldD1XfWlmKFQubm9kZU5hbWU9PT1aKXtYPVQ7YnJlYWt9VD1UW1VdfWFkW1ddPVh9fX1mdW5jdGlvbiBTKFUsWixZLGFkLGFhLGFjKXt2YXIgYWI9VT09InByZXZpb3VzU2libGluZyImJiFhYztmb3IodmFyIFc9MCxWPWFkLmxlbmd0aDtXPFY7VysrKXt2YXIgVD1hZFtXXTtpZihUKXtpZihhYiYmVC5ub2RlVHlwZT09PTEpe1Quc2l6Y2FjaGU9WTtULnNpenNldD1XfVQ9VFtVXTt2YXIgWD1mYWxzZTt3aGlsZShUKXtpZihULnNpemNhY2hlPT09WSl7WD1hZFtULnNpenNldF07YnJlYWt9aWYoVC5ub2RlVHlwZT09PTEpe2lmKCFhYyl7VC5zaXpjYWNoZT1ZO1Quc2l6c2V0PVd9aWYodHlwZW9mIFohPT0ic3RyaW5nIil7aWYoVD09PVope1g9dHJ1ZTticmVha319ZWxzZXtpZihGLmZpbHRlcihaLFtUXSkubGVuZ3RoPjApe1g9VDticmVha319fVQ9VFtVXX1hZFtXXT1YfX19dmFyIEs9ZG9jdW1lbnQuY29tcGFyZURvY3VtZW50UG9zaXRpb24/ZnVuY3Rpb24oVSxUKXtyZXR1cm4gVS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihUKSYxNn06ZnVuY3Rpb24oVSxUKXtyZXR1cm4gVSE9PVQmJihVLmNvbnRhaW5zP1UuY29udGFpbnMoVCk6dHJ1ZSl9O3ZhciBRPWZ1bmN0aW9uKFQpe3JldHVybiBULm5vZGVUeXBlPT09OSYmVC5kb2N1bWVudEVsZW1lbnQubm9kZU5hbWUhPT0iSFRNTCJ8fCEhVC5vd25lckRvY3VtZW50JiZRKFQub3duZXJEb2N1bWVudCl9O3ZhciBKPWZ1bmN0aW9uKFQsYWEpe3ZhciBXPVtdLFg9IiIsWSxWPWFhLm5vZGVUeXBlP1thYV06YWE7d2hpbGUoKFk9SS5tYXRjaC5QU0VVRE8uZXhlYyhUKSkpe1grPVlbMF07VD1ULnJlcGxhY2UoSS5tYXRjaC5QU0VVRE8sIiIpfVQ9SS5yZWxhdGl2ZVtUXT9UKyIqIjpUO2Zvcih2YXIgWj0wLFU9Vi5sZW5ndGg7WjxVO1orKyl7RihULFZbWl0sVyl9cmV0dXJuIEYuZmlsdGVyKFgsVyl9O28uZmluZD1GO28uZmlsdGVyPUYuZmlsdGVyO28uZXhwcj1GLnNlbGVjdG9ycztvLmV4cHJbIjoiXT1vLmV4cHIuZmlsdGVycztGLnNlbGVjdG9ycy5maWx0ZXJzLmhpZGRlbj1mdW5jdGlvbihUKXtyZXR1cm4gVC5vZmZzZXRXaWR0aD09PTB8fFQub2Zmc2V0SGVpZ2h0PT09MH07Ri5zZWxlY3RvcnMuZmlsdGVycy52aXNpYmxlPWZ1bmN0aW9uKFQpe3JldHVybiBULm9mZnNldFdpZHRoPjB8fFQub2Zmc2V0SGVpZ2h0PjB9O0Yuc2VsZWN0b3JzLmZpbHRlcnMuYW5pbWF0ZWQ9ZnVuY3Rpb24oVCl7cmV0dXJuIG8uZ3JlcChvLnRpbWVycyxmdW5jdGlvbihVKXtyZXR1cm4gVD09PVUuZWxlbX0pLmxlbmd0aH07by5tdWx0aUZpbHRlcj1mdW5jdGlvbihWLFQsVSl7aWYoVSl7Vj0iOm5vdCgiK1YrIikifXJldHVybiBGLm1hdGNoZXMoVixUKX07by5kaXI9ZnVuY3Rpb24oVixVKXt2YXIgVD1bXSxXPVZbVV07d2hpbGUoVyYmVyE9ZG9jdW1lbnQpe2lmKFcubm9kZVR5cGU9PTEpe1QucHVzaChXKX1XPVdbVV19cmV0dXJuIFR9O28ubnRoPWZ1bmN0aW9uKFgsVCxWLFcpe1Q9VHx8MTt2YXIgVT0wO2Zvcig7WDtYPVhbVl0pe2lmKFgubm9kZVR5cGU9PTEmJisrVT09VCl7YnJlYWt9fXJldHVybiBYfTtvLnNpYmxpbmc9ZnVuY3Rpb24oVixVKXt2YXIgVD1bXTtmb3IoO1Y7Vj1WLm5leHRTaWJsaW5nKXtpZihWLm5vZGVUeXBlPT0xJiZWIT1VKXtULnB1c2goVil9fXJldHVybiBUfTtyZXR1cm47bC5TaXp6bGU9Rn0pKCk7by5ldmVudD17YWRkOmZ1bmN0aW9uKEksRixILEspe2lmKEkubm9kZVR5cGU9PTN8fEkubm9kZVR5cGU9PTgpe3JldHVybn1pZihJLnNldEludGVydmFsJiZJIT1sKXtJPWx9aWYoIUguZ3VpZCl7SC5ndWlkPXRoaXMuZ3VpZCsrfWlmKEshPT1nKXt2YXIgRz1IO0g9dGhpcy5wcm94eShHKTtILmRhdGE9S312YXIgRT1vLmRhdGEoSSwiZXZlbnRzIil8fG8uZGF0YShJLCJldmVudHMiLHt9KSxKPW8uZGF0YShJLCJoYW5kbGUiKXx8by5kYXRhKEksImhhbmRsZSIsZnVuY3Rpb24oKXtyZXR1cm4gdHlwZW9mIG8hPT0idW5kZWZpbmVkIiYmIW8uZXZlbnQudHJpZ2dlcmVkP28uZXZlbnQuaGFuZGxlLmFwcGx5KGFyZ3VtZW50cy5jYWxsZWUuZWxlbSxhcmd1bWVudHMpOmd9KTtKLmVsZW09STtvLmVhY2goRi5zcGxpdCgvXHMrLyksZnVuY3Rpb24oTSxOKXt2YXIgTz1OLnNwbGl0KCIuIik7Tj1PLnNoaWZ0KCk7SC50eXBlPU8uc2xpY2UoKS5zb3J0KCkuam9pbigiLiIpO3ZhciBMPUVbTl07aWYoby5ldmVudC5zcGVjaWFsQWxsW05dKXtvLmV2ZW50LnNwZWNpYWxBbGxbTl0uc2V0dXAuY2FsbChJLEssTyl9aWYoIUwpe0w9RVtOXT17fTtpZighby5ldmVudC5zcGVjaWFsW05dfHxvLmV2ZW50LnNwZWNpYWxbTl0uc2V0dXAuY2FsbChJLEssTyk9PT1mYWxzZSl7aWYoSS5hZGRFdmVudExpc3RlbmVyKXtJLmFkZEV2ZW50TGlzdGVuZXIoTixKLGZhbHNlKX1lbHNle2lmKEkuYXR0YWNoRXZlbnQpe0kuYXR0YWNoRXZlbnQoIm9uIitOLEopfX19fUxbSC5ndWlkXT1IO28uZXZlbnQuZ2xvYmFsW05dPXRydWV9KTtJPW51bGx9LGd1aWQ6MSxnbG9iYWw6e30scmVtb3ZlOmZ1bmN0aW9uKEssSCxKKXtpZihLLm5vZGVUeXBlPT0zfHxLLm5vZGVUeXBlPT04KXtyZXR1cm59dmFyIEc9by5kYXRhKEssImV2ZW50cyIpLEYsRTtpZihHKXtpZihIPT09Z3x8KHR5cGVvZiBIPT09InN0cmluZyImJkguY2hhckF0KDApPT0iLiIpKXtmb3IodmFyIEkgaW4gRyl7dGhpcy5yZW1vdmUoSyxJKyhIfHwiIikpfX1lbHNle2lmKEgudHlwZSl7Sj1ILmhhbmRsZXI7SD1ILnR5cGV9by5lYWNoKEguc3BsaXQoL1xzKy8pLGZ1bmN0aW9uKE0sTyl7dmFyIFE9Ty5zcGxpdCgiLiIpO089US5zaGlmdCgpO3ZhciBOPVJlZ0V4cCgiKF58XFwuKSIrUS5zbGljZSgpLnNvcnQoKS5qb2luKCIuKlxcLiIpKyIoXFwufCQpIik7aWYoR1tPXSl7aWYoSil7ZGVsZXRlIEdbT11bSi5ndWlkXX1lbHNle2Zvcih2YXIgUCBpbiBHW09dKXtpZihOLnRlc3QoR1tPXVtQXS50eXBlKSl7ZGVsZXRlIEdbT11bUF19fX1pZihvLmV2ZW50LnNwZWNpYWxBbGxbT10pe28uZXZlbnQuc3BlY2lhbEFsbFtPXS50ZWFyZG93bi5jYWxsKEssUSl9Zm9yKEYgaW4gR1tPXSl7YnJlYWt9aWYoIUYpe2lmKCFvLmV2ZW50LnNwZWNpYWxbT118fG8uZXZlbnQuc3BlY2lhbFtPXS50ZWFyZG93bi5jYWxsKEssUSk9PT1mYWxzZSl7aWYoSy5yZW1vdmVFdmVudExpc3RlbmVyKXtLLnJlbW92ZUV2ZW50TGlzdGVuZXIoTyxvLmRhdGEoSywiaGFuZGxlIiksZmFsc2UpfWVsc2V7aWYoSy5kZXRhY2hFdmVudCl7Sy5kZXRhY2hFdmVudCgib24iK08sby5kYXRhKEssImhhbmRsZSIpKX19fUY9bnVsbDtkZWxldGUgR1tPXX19fSl9Zm9yKEYgaW4gRyl7YnJlYWt9aWYoIUYpe3ZhciBMPW8uZGF0YShLLCJoYW5kbGUiKTtpZihMKXtMLmVsZW09bnVsbH1vLnJlbW92ZURhdGEoSywiZXZlbnRzIik7by5yZW1vdmVEYXRhKEssImhhbmRsZSIpfX19LHRyaWdnZXI6ZnVuY3Rpb24oSSxLLEgsRSl7dmFyIEc9SS50eXBlfHxJO2lmKCFFKXtJPXR5cGVvZiBJPT09Im9iamVjdCI/SVtoXT9JOm8uZXh0ZW5kKG8uRXZlbnQoRyksSSk6by5FdmVudChHKTtpZihHLmluZGV4T2YoIiEiKT49MCkKLXtJLnR5cGU9Rz1HLnNsaWNlKDAsLTEpO0kuZXhjbHVzaXZlPXRydWV9aWYoIUgpe0kuc3RvcFByb3BhZ2F0aW9uKCk7aWYodGhpcy5nbG9iYWxbR10pe28uZWFjaChvLmNhY2hlLGZ1bmN0aW9uKCl7aWYodGhpcy5ldmVudHMmJnRoaXMuZXZlbnRzW0ddKXtvLmV2ZW50LnRyaWdnZXIoSSxLLHRoaXMuaGFuZGxlLmVsZW0pfX0pfX1pZighSHx8SC5ub2RlVHlwZT09M3x8SC5ub2RlVHlwZT09OCl7cmV0dXJuIGd9SS5yZXN1bHQ9ZztJLnRhcmdldD1IO0s9by5tYWtlQXJyYXkoSyk7Sy51bnNoaWZ0KEkpfUkuY3VycmVudFRhcmdldD1IO3ZhciBKPW8uZGF0YShILCJoYW5kbGUiKTtpZihKKXtKLmFwcGx5KEgsSyl9aWYoKCFIW0ddfHwoby5ub2RlTmFtZShILCJhIikmJkc9PSJjbGljayIpKSYmSFsib24iK0ddJiZIWyJvbiIrR10uYXBwbHkoSCxLKT09PWZhbHNlKXtJLnJlc3VsdD1mYWxzZX1pZighRSYmSFtHXSYmIUkuaXNEZWZhdWx0UHJldmVudGVkKCkmJiEoby5ub2RlTmFtZShILCJhIikmJkc9PSJjbGljayIpKXt0aGlzLnRyaWdnZXJlZD10cnVlO3RyeXtIW0ddKCl9Y2F0Y2goTCl7fX10aGlzLnRyaWdnZXJlZD1mYWxzZTtpZighSS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKXt2YXIgRj1ILnBhcmVudE5vZGV8fEgub3duZXJEb2N1bWVudDtpZihGKXtvLmV2ZW50LnRyaWdnZXIoSSxLLEYsdHJ1ZSl9fX0saGFuZGxlOmZ1bmN0aW9uKEspe3ZhciBKLEU7Sz1hcmd1bWVudHNbMF09by5ldmVudC5maXgoS3x8bC5ldmVudCk7Sy5jdXJyZW50VGFyZ2V0PXRoaXM7dmFyIEw9Sy50eXBlLnNwbGl0KCIuIik7Sy50eXBlPUwuc2hpZnQoKTtKPSFMLmxlbmd0aCYmIUsuZXhjbHVzaXZlO3ZhciBJPVJlZ0V4cCgiKF58XFwuKSIrTC5zbGljZSgpLnNvcnQoKS5qb2luKCIuKlxcLiIpKyIoXFwufCQpIik7RT0oby5kYXRhKHRoaXMsImV2ZW50cyIpfHx7fSlbSy50eXBlXTtmb3IodmFyIEcgaW4gRSl7dmFyIEg9RVtHXTtpZihKfHxJLnRlc3QoSC50eXBlKSl7Sy5oYW5kbGVyPUg7Sy5kYXRhPUguZGF0YTt2YXIgRj1ILmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZihGIT09Zyl7Sy5yZXN1bHQ9RjtpZihGPT09ZmFsc2Upe0sucHJldmVudERlZmF1bHQoKTtLLnN0b3BQcm9wYWdhdGlvbigpfX1pZihLLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkpe2JyZWFrfX19fSxwcm9wczoiYWx0S2V5IGF0dHJDaGFuZ2UgYXR0ck5hbWUgYnViYmxlcyBidXR0b24gY2FuY2VsYWJsZSBjaGFyQ29kZSBjbGllbnRYIGNsaWVudFkgY3RybEtleSBjdXJyZW50VGFyZ2V0IGRhdGEgZGV0YWlsIGV2ZW50UGhhc2UgZnJvbUVsZW1lbnQgaGFuZGxlciBrZXlDb2RlIG1ldGFLZXkgbmV3VmFsdWUgb3JpZ2luYWxUYXJnZXQgcGFnZVggcGFnZVkgcHJldlZhbHVlIHJlbGF0ZWROb2RlIHJlbGF0ZWRUYXJnZXQgc2NyZWVuWCBzY3JlZW5ZIHNoaWZ0S2V5IHNyY0VsZW1lbnQgdGFyZ2V0IHRvRWxlbWVudCB2aWV3IHdoZWVsRGVsdGEgd2hpY2giLnNwbGl0KCIgIiksZml4OmZ1bmN0aW9uKEgpe2lmKEhbaF0pe3JldHVybiBIfXZhciBGPUg7SD1vLkV2ZW50KEYpO2Zvcih2YXIgRz10aGlzLnByb3BzLmxlbmd0aCxKO0c7KXtKPXRoaXMucHJvcHNbLS1HXTtIW0pdPUZbSl19aWYoIUgudGFyZ2V0KXtILnRhcmdldD1ILnNyY0VsZW1lbnR8fGRvY3VtZW50fWlmKEgudGFyZ2V0Lm5vZGVUeXBlPT0zKXtILnRhcmdldD1ILnRhcmdldC5wYXJlbnROb2RlfWlmKCFILnJlbGF0ZWRUYXJnZXQmJkguZnJvbUVsZW1lbnQpe0gucmVsYXRlZFRhcmdldD1ILmZyb21FbGVtZW50PT1ILnRhcmdldD9ILnRvRWxlbWVudDpILmZyb21FbGVtZW50fWlmKEgucGFnZVg9PW51bGwmJkguY2xpZW50WCE9bnVsbCl7dmFyIEk9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LEU9ZG9jdW1lbnQuYm9keTtILnBhZ2VYPUguY2xpZW50WCsoSSYmSS5zY3JvbGxMZWZ0fHxFJiZFLnNjcm9sbExlZnR8fDApLShJLmNsaWVudExlZnR8fDApO0gucGFnZVk9SC5jbGllbnRZKyhJJiZJLnNjcm9sbFRvcHx8RSYmRS5zY3JvbGxUb3B8fDApLShJLmNsaWVudFRvcHx8MCl9aWYoIUgud2hpY2gmJigoSC5jaGFyQ29kZXx8SC5jaGFyQ29kZT09PTApP0guY2hhckNvZGU6SC5rZXlDb2RlKSl7SC53aGljaD1ILmNoYXJDb2RlfHxILmtleUNvZGV9aWYoIUgubWV0YUtleSYmSC5jdHJsS2V5KXtILm1ldGFLZXk9SC5jdHJsS2V5fWlmKCFILndoaWNoJiZILmJ1dHRvbil7SC53aGljaD0oSC5idXR0b24mMT8xOihILmJ1dHRvbiYyPzM6KEguYnV0dG9uJjQ/MjowKSkpfXJldHVybiBIfSxwcm94eTpmdW5jdGlvbihGLEUpe0U9RXx8ZnVuY3Rpb24oKXtyZXR1cm4gRi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O0UuZ3VpZD1GLmd1aWQ9Ri5ndWlkfHxFLmd1aWR8fHRoaXMuZ3VpZCsrO3JldHVybiBFfSxzcGVjaWFsOntyZWFkeTp7c2V0dXA6Qix0ZWFyZG93bjpmdW5jdGlvbigpe319fSxzcGVjaWFsQWxsOntsaXZlOntzZXR1cDpmdW5jdGlvbihFLEYpe28uZXZlbnQuYWRkKHRoaXMsRlswXSxjKX0sdGVhcmRvd246ZnVuY3Rpb24oRyl7aWYoRy5sZW5ndGgpe3ZhciBFPTAsRj1SZWdFeHAoIihefFxcLikiK0dbMF0rIihcXC58JCkiKTtvLmVhY2goKG8uZGF0YSh0aGlzLCJldmVudHMiKS5saXZlfHx7fSksZnVuY3Rpb24oKXtpZihGLnRlc3QodGhpcy50eXBlKSl7RSsrfX0pO2lmKEU8MSl7by5ldmVudC5yZW1vdmUodGhpcyxHWzBdLGMpfX19fX19O28uRXZlbnQ9ZnVuY3Rpb24oRSl7aWYoIXRoaXMucHJldmVudERlZmF1bHQpe3JldHVybiBuZXcgby5FdmVudChFKX1pZihFJiZFLnR5cGUpe3RoaXMub3JpZ2luYWxFdmVudD1FO3RoaXMudHlwZT1FLnR5cGV9ZWxzZXt0aGlzLnR5cGU9RX10aGlzLnRpbWVTdGFtcD1lKCk7dGhpc1toXT10cnVlfTtmdW5jdGlvbiBrKCl7cmV0dXJuIGZhbHNlfWZ1bmN0aW9uIHUoKXtyZXR1cm4gdHJ1ZX1vLkV2ZW50LnByb3RvdHlwZT17cHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD11O3ZhciBFPXRoaXMub3JpZ2luYWxFdmVudDtpZighRSl7cmV0dXJufWlmKEUucHJldmVudERlZmF1bHQpe0UucHJldmVudERlZmF1bHQoKX1FLnJldHVyblZhbHVlPWZhbHNlfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPXU7dmFyIEU9dGhpcy5vcmlnaW5hbEV2ZW50O2lmKCFFKXtyZXR1cm59aWYoRS5zdG9wUHJvcGFnYXRpb24pe0Uuc3RvcFByb3BhZ2F0aW9uKCl9RS5jYW5jZWxCdWJibGU9dHJ1ZX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD11O3RoaXMuc3RvcFByb3BhZ2F0aW9uKCl9LGlzRGVmYXVsdFByZXZlbnRlZDprLGlzUHJvcGFnYXRpb25TdG9wcGVkOmssaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6a307dmFyIGE9ZnVuY3Rpb24oRil7dmFyIEU9Ri5yZWxhdGVkVGFyZ2V0O3doaWxlKEUmJkUhPXRoaXMpe3RyeXtFPUUucGFyZW50Tm9kZX1jYXRjaChHKXtFPXRoaXN9fWlmKEUhPXRoaXMpe0YudHlwZT1GLmRhdGE7by5ldmVudC5oYW5kbGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX07by5lYWNoKHttb3VzZW92ZXI6Im1vdXNlZW50ZXIiLG1vdXNlb3V0OiJtb3VzZWxlYXZlIn0sZnVuY3Rpb24oRixFKXtvLmV2ZW50LnNwZWNpYWxbRV09e3NldHVwOmZ1bmN0aW9uKCl7by5ldmVudC5hZGQodGhpcyxGLGEsRSl9LHRlYXJkb3duOmZ1bmN0aW9uKCl7by5ldmVudC5yZW1vdmUodGhpcyxGLGEpfX19KTtvLmZuLmV4dGVuZCh7YmluZDpmdW5jdGlvbihGLEcsRSl7cmV0dXJuIEY9PSJ1bmxvYWQiP3RoaXMub25lKEYsRyxFKTp0aGlzLmVhY2goZnVuY3Rpb24oKXtvLmV2ZW50LmFkZCh0aGlzLEYsRXx8RyxFJiZHKX0pfSxvbmU6ZnVuY3Rpb24oRyxILEYpe3ZhciBFPW8uZXZlbnQucHJveHkoRnx8SCxmdW5jdGlvbihJKXtvKHRoaXMpLnVuYmluZChJLEUpO3JldHVybihGfHxIKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7by5ldmVudC5hZGQodGhpcyxHLEUsRiYmSCl9KX0sdW5iaW5kOmZ1bmN0aW9uKEYsRSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe28uZXZlbnQucmVtb3ZlKHRoaXMsRixFKX0pfSx0cmlnZ2VyOmZ1bmN0aW9uKEUsRil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe28uZXZlbnQudHJpZ2dlcihFLEYsdGhpcyl9KX0sdHJpZ2dlckhhbmRsZXI6ZnVuY3Rpb24oRSxHKXtpZih0aGlzWzBdKXt2YXIgRj1vLkV2ZW50KEUpO0YucHJldmVudERlZmF1bHQoKTtGLnN0b3BQcm9wYWdhdGlvbigpO28uZXZlbnQudHJpZ2dlcihGLEcsdGhpc1swXSk7cmV0dXJuIEYucmVzdWx0fX0sdG9nZ2xlOmZ1bmN0aW9uKEcpe3ZhciBFPWFyZ3VtZW50cyxGPTE7d2hpbGUoRjxFLmxlbmd0aCl7by5ldmVudC5wcm94eShHLEVbRisrXSl9cmV0dXJuIHRoaXMuY2xpY2soby5ldmVudC5wcm94eShHLGZ1bmN0aW9uKEgpe3RoaXMubGFzdFRvZ2dsZT0odGhpcy5sYXN0VG9nZ2xlfHwwKSVGO0gucHJldmVudERlZmF1bHQoKTtyZXR1cm4gRVt0aGlzLmxhc3RUb2dnbGUrK10uYXBwbHkodGhpcyxhcmd1bWVudHMpfHxmYWxzZX0pKX0saG92ZXI6ZnVuY3Rpb24oRSxGKXtyZXR1cm4gdGhpcy5tb3VzZWVudGVyKEUpLm1vdXNlbGVhdmUoRil9LHJlYWR5OmZ1bmN0aW9uKEUpe0IoKTtpZihvLmlzUmVhZHkpe0UuY2FsbChkb2N1bWVudCxvKX1lbHNle28ucmVhZHlMaXN0LnB1c2goRSl9cmV0dXJuIHRoaXN9LGxpdmU6ZnVuY3Rpb24oRyxGKXt2YXIgRT1vLmV2ZW50LnByb3h5KEYpO0UuZ3VpZCs9dGhpcy5zZWxlY3RvcitHO28oZG9jdW1lbnQpLmJpbmQoaShHLHRoaXMuc2VsZWN0b3IpLHRoaXMuc2VsZWN0b3IsRSk7cmV0dXJuIHRoaXN9LGRpZTpmdW5jdGlvbihGLEUpe28oZG9jdW1lbnQpLnVuYmluZChpKEYsdGhpcy5zZWxlY3RvciksRT97Z3VpZDpFLmd1aWQrdGhpcy5zZWxlY3RvcitGfTpudWxsKTtyZXR1cm4gdGhpc319KTtmdW5jdGlvbiBjKEgpe3ZhciBFPVJlZ0V4cCgiKF58XFwuKSIrSC50eXBlKyIoXFwufCQpIiksRz10cnVlLEY9W107by5lYWNoKG8uZGF0YSh0aGlzLCJldmVudHMiKS5saXZlfHxbXSxmdW5jdGlvbihJLEope2lmKEUudGVzdChKLnR5cGUpKXt2YXIgSz1vKEgudGFyZ2V0KS5jbG9zZXN0KEouZGF0YSlbMF07aWYoSyl7Ri5wdXNoKHtlbGVtOkssZm46Sn0pfX19KTtGLnNvcnQoZnVuY3Rpb24oSixJKXtyZXR1cm4gby5kYXRhKEouZWxlbSwiY2xvc2VzdCIpLW8uZGF0YShJLmVsZW0sImNsb3Nlc3QiKX0pO28uZWFjaChGLGZ1bmN0aW9uKCl7aWYodGhpcy5mbi5jYWxsKHRoaXMuZWxlbSxILHRoaXMuZm4uZGF0YSk9PT1mYWxzZSl7cmV0dXJuKEc9ZmFsc2UpfX0pO3JldHVybiBHfWZ1bmN0aW9uIGkoRixFKXtyZXR1cm5bImxpdmUiLEYsRS5yZXBsYWNlKC9cLi9nLCJgIikucmVwbGFjZSgvIC9nLCJ8IildLmpvaW4oIi4iKX1vLmV4dGVuZCh7aXNSZWFkeTpmYWxzZSxyZWFkeUxpc3Q6W10scmVhZHk6ZnVuY3Rpb24oKXtpZighby5pc1JlYWR5KXtvLmlzUmVhZHk9dHJ1ZTtpZihvLnJlYWR5TGlzdCl7by5lYWNoKG8ucmVhZHlMaXN0LGZ1bmN0aW9uKCl7dGhpcy5jYWxsKGRvY3VtZW50LG8pfSk7by5yZWFkeUxpc3Q9bnVsbH1vKGRvY3VtZW50KS50cmlnZ2VySGFuZGxlcigicmVhZHkiKX19fSk7dmFyIHg9ZmFsc2U7ZnVuY3Rpb24gQigpe2lmKHgpe3JldHVybn14PXRydWU7aWYoZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcil7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsZnVuY3Rpb24oKXtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixhcmd1bWVudHMuY2FsbGVlLGZhbHNlKTtvLnJlYWR5KCl9LGZhbHNlKX1lbHNle2lmKGRvY3VtZW50LmF0dGFjaEV2ZW50KXtkb2N1bWVudC5hdHRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIixmdW5jdGlvbigpe2lmKGRvY3VtZW50LnJlYWR5U3RhdGU9PT0iY29tcGxldGUiKXtkb2N1bWVudC5kZXRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIixhcmd1bWVudHMuY2FsbGVlKTtvLnJlYWR5KCl9fSk7aWYoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsJiZsPT1sLnRvcCl7KGZ1bmN0aW9uKCl7aWYoby5pc1JlYWR5KXtyZXR1cm59dHJ5e2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCgibGVmdCIpfWNhdGNoKEUpe3NldFRpbWVvdXQoYXJndW1lbnRzLmNhbGxlZSwwKTtyZXR1cm59by5yZWFkeSgpfSkoKX19fW8uZXZlbnQuYWRkKGwsImxvYWQiLG8ucmVhZHkpfW8uZWFjaCgoImJsdXIsZm9jdXMsbG9hZCxyZXNpemUsc2Nyb2xsLHVubG9hZCxjbGljayxkYmxjbGljayxtb3VzZWRvd24sbW91c2V1cCxtb3VzZW1vdmUsbW91c2VvdmVyLG1vdXNlb3V0LG1vdXNlZW50ZXIsbW91c2VsZWF2ZSxjaGFuZ2Usc2VsZWN0LHN1Ym1pdCxrZXlkb3duLGtleXByZXNzLGtleXVwLGVycm9yIikuc3BsaXQoIiwiKSxmdW5jdGlvbihGLEUpe28uZm5bRV09ZnVuY3Rpb24oRyl7cmV0dXJuIEc/dGhpcy5iaW5kKEUsRyk6dGhpcy50cmlnZ2VyKEUpfX0pO28obCkuYmluZCgidW5sb2FkIixmdW5jdGlvbigpe2Zvcih2YXIgRSBpbiBvLmNhY2hlKXtpZihFIT0xJiZvLmNhY2hlW0VdLmhhbmRsZSl7by5ldmVudC5yZW1vdmUoby5jYWNoZVtFXS5oYW5kbGUuZWxlbSl9fX0pOyhmdW5jdGlvbigpe28uc3VwcG9ydD17fTt2YXIgRj1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsRz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSxLPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLEo9InNjcmlwdCIrKG5ldyBEYXRlKS5nZXRUaW1lKCk7Sy5zdHlsZS5kaXNwbGF5PSJub25lIjtLLmlubmVySFRNTD0nICAgPGxpbmsvPjx0YWJsZT48L3RhYmxlPjxhIGhyZWY9Ii9hIiBzdHlsZT0iY29sb3I6cmVkO2Zsb2F0OmxlZnQ7b3BhY2l0eTouNTsiPmE8L2E+PHNlbGVjdD48b3B0aW9uPnRleHQ8L29wdGlvbj48L3NlbGVjdD48b2JqZWN0PjxwYXJhbS8+PC9vYmplY3Q+Jzt2YXIgSD1LLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIiksRT1LLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJhIilbMF07aWYoIUh8fCFILmxlbmd0aHx8IUUpe3JldHVybn1vLnN1cHBvcnQ9e2xlYWRpbmdXaGl0ZXNwYWNlOksuZmlyc3RDaGlsZC5ub2RlVHlwZT09Myx0Ym9keTohSy5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKS5sZW5ndGgsb2JqZWN0QWxsOiEhSy5nZXRFbGVtZW50c0J5VGFnTmFtZSgib2JqZWN0IilbMF0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKS5sZW5ndGgsaHRtbFNlcmlhbGl6ZTohIUsuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKS5sZW5ndGgsc3R5bGU6L3JlZC8udGVzdChFLmdldEF0dHJpYnV0ZSgic3R5bGUiKSksaHJlZk5vcm1hbGl6ZWQ6RS5nZXRBdHRyaWJ1dGUoImhyZWYiKT09PSIvYSIsb3BhY2l0eTpFLnN0eWxlLm9wYWNpdHk9PT0iMC41Iixjc3NGbG9hdDohIUUuc3R5bGUuY3NzRmxvYXQsc2NyaXB0RXZhbDpmYWxzZSxub0Nsb25lRXZlbnQ6dHJ1ZSxib3hNb2RlbDpudWxsfTtHLnR5cGU9InRleHQvamF2YXNjcmlwdCI7dHJ5e0cuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIndpbmRvdy4iK0orIj0xOyIpKX1jYXRjaChJKXt9Ri5pbnNlcnRCZWZvcmUoRyxGLmZpcnN0Q2hpbGQpO2lmKGxbSl0pe28uc3VwcG9ydC5zY3JpcHRFdmFsPXRydWU7ZGVsZXRlIGxbSl19Ri5yZW1vdmVDaGlsZChHKTtpZihLLmF0dGFjaEV2ZW50JiZLLmZpcmVFdmVudCl7Sy5hdHRhY2hFdmVudCgib25jbGljayIsZnVuY3Rpb24oKXtvLnN1cHBvcnQubm9DbG9uZUV2ZW50PWZhbHNlO0suZGV0YWNoRXZlbnQoIm9uY2xpY2siLGFyZ3VtZW50cy5jYWxsZWUpfSk7Sy5jbG9uZU5vZGUodHJ1ZSkuZmlyZUV2ZW50KCJvbmNsaWNrIil9byhmdW5jdGlvbigpe3ZhciBMPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO0wuc3R5bGUud2lkdGg9TC5zdHlsZS5wYWRkaW5nTGVmdD0iMXB4Ijtkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKEwpO28uYm94TW9kZWw9by5zdXBwb3J0LmJveE1vZGVsPUwub2Zmc2V0V2lkdGg9PT0yO2RvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoTCkuc3R5bGUuZGlzcGxheT0ibm9uZSJ9KX0pKCk7dmFyIHc9by5zdXBwb3J0LmNzc0Zsb2F0PyJjc3NGbG9hdCI6InN0eWxlRmxvYXQiO28ucHJvcHM9eyJmb3IiOiJodG1sRm9yIiwiY2xhc3MiOiJjbGFzc05hbWUiLCJmbG9hdCI6dyxjc3NGbG9hdDp3LHN0eWxlRmxvYXQ6dyxyZWFkb25seToicmVhZE9ubHkiLG1heGxlbmd0aDoibWF4TGVuZ3RoIixjZWxsc3BhY2luZzoiY2VsbFNwYWNpbmciLHJvd3NwYW46InJvd1NwYW4iLHRhYmluZGV4OiJ0YWJJbmRleCJ9O28uZm4uZXh0ZW5kKHtfbG9hZDpvLmZuLmxvYWQsbG9hZDpmdW5jdGlvbihHLEosSyl7aWYodHlwZW9mIEchPT0ic3RyaW5nIil7cmV0dXJuIHRoaXMuX2xvYWQoRyl9dmFyIEk9Ry5pbmRleE9mKCIgIik7aWYoST49MCl7dmFyIEU9Ry5zbGljZShJLEcubGVuZ3RoKTtHPUcuc2xpY2UoMCxJKX12YXIgSD0iR0VUIjtpZihKKXtpZihvLmlzRnVuY3Rpb24oSikpe0s9SjtKPW51bGx9ZWxzZXtpZih0eXBlb2YgSj09PSJvYmplY3QiKXtKPW8ucGFyYW0oSik7SD0iUE9TVCJ9fX12YXIgRj10aGlzO28uYWpheCh7dXJsOkcsdHlwZTpILGRhdGFUeXBlOiJodG1sIixkYXRhOkosY29tcGxldGU6ZnVuY3Rpb24oTSxMKXtpZihMPT0ic3VjY2VzcyJ8fEw9PSJub3Rtb2RpZmllZCIpe0YuaHRtbChFP28oIjxkaXYvPiIpLmFwcGVuZChNLnJlc3BvbnNlVGV4dC5yZXBsYWNlKC88c2NyaXB0KC58XHMpKj9cL3NjcmlwdD4vZywiIikpLmZpbmQoRSk6TS5yZXNwb25zZVRleHQpfWlmKEspe0YuZWFjaChLLFtNLnJlc3BvbnNlVGV4dCxMLE1dKX19fSk7cmV0dXJuIHRoaXN9LHNlcmlhbGl6ZTpmdW5jdGlvbigpe3JldHVybiBvLnBhcmFtKHRoaXMuc2VyaWFsaXplQXJyYXkoKSl9LHNlcmlhbGl6ZUFycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWxlbWVudHM/by5tYWtlQXJyYXkodGhpcy5lbGVtZW50cyk6dGhpc30pLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiB0aGlzLm5hbWUmJiF0aGlzLmRpc2FibGVkJiYodGhpcy5jaGVja2VkfHwvc2VsZWN0fHRleHRhcmVhL2kudGVzdCh0aGlzLm5vZGVOYW1lKXx8L3RleHR8aGlkZGVufHBhc3N3b3JkfHNlYXJjaC9pLnRlc3QodGhpcy50eXBlKSl9KS5tYXAoZnVuY3Rpb24oRSxGKXt2YXIgRz1vKHRoaXMpLnZhbCgpO3JldHVybiBHPT1udWxsP251bGw6by5pc0FycmF5KEcpP28ubWFwKEcsZnVuY3Rpb24oSSxIKXtyZXR1cm57bmFtZTpGLm5hbWUsdmFsdWU6SX19KTp7bmFtZTpGLm5hbWUsdmFsdWU6R319KS5nZXQoKX19KTtvLmVhY2goImFqYXhTdGFydCxhamF4U3RvcCxhamF4Q29tcGxldGUsYWpheEVycm9yLGFqYXhTdWNjZXNzLGFqYXhTZW5kIi5zcGxpdCgiLCIpLGZ1bmN0aW9uKEUsRil7by5mbltGXT1mdW5jdGlvbihHKXtyZXR1cm4gdGhpcy5iaW5kKEYsRyl9fSk7dmFyIHI9ZSgpO28uZXh0ZW5kKHtnZXQ6ZnVuY3Rpb24oRSxHLEgsRil7aWYoby5pc0Z1bmN0aW9uKEcpKXtIPUc7Rz1udWxsfXJldHVybiBvLmFqYXgoe3R5cGU6IkdFVCIsdXJsOkUsZGF0YTpHLHN1Y2Nlc3M6SCxkYXRhVHlwZTpGfSl9LGdldFNjcmlwdDpmdW5jdGlvbihFLEYpe3JldHVybiBvLmdldChFLG51bGwsRiwic2NyaXB0Iil9LGdldEpTT046ZnVuY3Rpb24oRSxGLEcpe3JldHVybiBvLmdldChFLEYsRywianNvbiIpfSxwb3N0OmZ1bmN0aW9uKEUsRyxILEYpe2lmKG8uaXNGdW5jdGlvbihHKSl7SD1HO0c9e319cmV0dXJuIG8uYWpheCh7dHlwZToiUE9TVCIsdXJsOkUsZGF0YTpHLHN1Y2Nlc3M6SCxkYXRhVHlwZTpGfSl9LGFqYXhTZXR1cDpmdW5jdGlvbihFKXtvLmV4dGVuZChvLmFqYXhTZXR0aW5ncyxFKX0sYWpheFNldHRpbmdzOnt1cmw6bG9jYXRpb24uaHJlZixnbG9iYWw6dHJ1ZSx0eXBlOiJHRVQiLGNvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLHByb2Nlc3NEYXRhOnRydWUsYXN5bmM6dHJ1ZSx4aHI6ZnVuY3Rpb24oKXtyZXR1cm4gbC5BY3RpdmVYT2JqZWN0P25ldyBBY3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1MSFRUUCIpOm5ldyBYTUxIdHRwUmVxdWVzdCgpfSxhY2NlcHRzOnt4bWw6ImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLGh0bWw6InRleHQvaHRtbCIsc2NyaXB0OiJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQiLGpzb246ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCIsdGV4dDoidGV4dC9wbGFpbiIsX2RlZmF1bHQ6IiovKiJ9fSxsYXN0TW9kaWZpZWQ6e30sYWpheDpmdW5jdGlvbihNKXtNPW8uZXh0ZW5kKHRydWUsTSxvLmV4dGVuZCh0cnVlLHt9LG8uYWpheFNldHRpbmdzLE0pKTt2YXIgVyxGPS89XD8oJnwkKS9nLFIsVixHPU0udHlwZS50b1VwcGVyQ2FzZSgpO2lmKE0uZGF0YSYmTS5wcm9jZXNzRGF0YSYmdHlwZW9mIE0uZGF0YSE9PSJzdHJpbmciKXtNLmRhdGE9by5wYXJhbShNLmRhdGEpfWlmKE0uZGF0YVR5cGU9PSJqc29ucCIpe2lmKEc9PSJHRVQiKXtpZighTS51cmwubWF0Y2goRikpe00udXJsKz0oTS51cmwubWF0Y2goL1w/Lyk/IiYiOiI/IikrKE0uanNvbnB8fCJjYWxsYmFjayIpKyI9PyJ9fWVsc2V7aWYoIU0uZGF0YXx8IU0uZGF0YS5tYXRjaChGKSl7TS5kYXRhPShNLmRhdGE/TS5kYXRhKyImIjoiIikrKE0uanNvbnB8fCJjYWxsYmFjayIpKyI9PyJ9fU0uZGF0YVR5cGU9Impzb24ifWlmKE0uZGF0YVR5cGU9PSJqc29uIiYmKE0uZGF0YSYmTS5kYXRhLm1hdGNoKEYpfHxNLnVybC5tYXRjaChGKSkpe1c9Impzb25wIityKys7aWYoTS5kYXRhKXtNLmRhdGE9KE0uZGF0YSsiIikucmVwbGFjZShGLCI9IitXKyIkMSIpfU0udXJsPU0udXJsLnJlcGxhY2UoRiwiPSIrVysiJDEiKTtNLmRhdGFUeXBlPSJzY3JpcHQiO2xbV109ZnVuY3Rpb24oWCl7Vj1YO0koKTtMKCk7bFtXXT1nO3RyeXtkZWxldGUgbFtXXX1jYXRjaChZKXt9aWYoSCl7SC5yZW1vdmVDaGlsZChUKX19fWlmKE0uZGF0YVR5cGU9PSJzY3JpcHQiJiZNLmNhY2hlPT1udWxsKXtNLmNhY2hlPWZhbHNlfWlmKE0uY2FjaGU9PT1mYWxzZSYmRz09IkdFVCIpe3ZhciBFPWUoKTt2YXIgVT1NLnVybC5yZXBsYWNlKC8oXD98JilfPS4qPygmfCQpLywiJDFfPSIrRSsiJDIiKTtNLnVybD1VKygoVT09TS51cmwpPyhNLnVybC5tYXRjaCgvXD8vKT8iJiI6Ij8iKSsiXz0iK0U6IiIpfWlmKE0uZGF0YSYmRz09IkdFVCIpe00udXJsKz0oTS51cmwubWF0Y2goL1w/Lyk/IiYiOiI/IikrTS5kYXRhO00uZGF0YT1udWxsfWlmKE0uZ2xvYmFsJiYhby5hY3RpdmUrKyl7by5ldmVudC50cmlnZ2VyKCJhamF4U3RhcnQiKX12YXIgUT0vXihcdys6KT9cL1wvKFteXC8/I10rKS8uZXhlYyhNLnVybCk7aWYoTS5kYXRhVHlwZT09InNjcmlwdCImJkc9PSJHRVQiJiZRJiYoUVsxXSYmUVsxXSE9bG9jYXRpb24ucHJvdG9jb2x8fFFbMl0hPWxvY2F0aW9uLmhvc3QpKXt2YXIgSD1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdO3ZhciBUPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO1Quc3JjPU0udXJsO2lmKE0uc2NyaXB0Q2hhcnNldCl7VC5jaGFyc2V0PU0uc2NyaXB0Q2hhcnNldH1pZighVyl7dmFyIE89ZmFsc2U7VC5vbmxvYWQ9VC5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtpZighTyYmKCF0aGlzLnJlYWR5U3RhdGV8fHRoaXMucmVhZHlTdGF0ZT09ImxvYWRlZCJ8fHRoaXMucmVhZHlTdGF0ZT09ImNvbXBsZXRlIikpe089dHJ1ZTtJKCk7TCgpO1Qub25sb2FkPVQub25yZWFkeXN0YXRlY2hhbmdlPW51bGw7SC5yZW1vdmVDaGlsZChUKX19fUguYXBwZW5kQ2hpbGQoVCk7cmV0dXJuIGd9dmFyIEs9ZmFsc2U7dmFyIEo9TS54aHIoKTtpZihNLnVzZXJuYW1lKXtKLm9wZW4oRyxNLnVybCxNLmFzeW5jLE0udXNlcm5hbWUsTS5wYXNzd29yZCl9ZWxzZXtKLm9wZW4oRyxNLnVybCxNLmFzeW5jKX10cnl7aWYoTS5kYXRhKXtKLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsTS5jb250ZW50VHlwZSl9aWYoTS5pZk1vZGlmaWVkKXtKLnNldFJlcXVlc3RIZWFkZXIoIklmLU1vZGlmaWVkLVNpbmNlIixvLmxhc3RNb2RpZmllZFtNLnVybF18fCJUaHUsIDAxIEphbiAxOTcwIDAwOjAwOjAwIEdNVCIpfUouc2V0UmVxdWVzdEhlYWRlcigiWC1SZXF1ZXN0ZWQtV2l0aCIsIlhNTEh0dHBSZXF1ZXN0Iik7Si5zZXRSZXF1ZXN0SGVhZGVyKCJBY2NlcHQiLE0uZGF0YVR5cGUmJk0uYWNjZXB0c1tNLmRhdGFUeXBlXT9NLmFjY2VwdHNbTS5kYXRhVHlwZV0rIiwgKi8qIjpNLmFjY2VwdHMuX2RlZmF1bHQpfWNhdGNoKFMpe31pZihNLmJlZm9yZVNlbmQmJk0uYmVmb3JlU2VuZChKLE0pPT09ZmFsc2Upe2lmKE0uZ2xvYmFsJiYhLS1vLmFjdGl2ZSl7by5ldmVudC50cmlnZ2VyKCJhamF4U3RvcCIpfUouYWJvcnQoKTtyZXR1cm4gZmFsc2V9aWYoTS5nbG9iYWwpe28uZXZlbnQudHJpZ2dlcigiYWpheFNlbmQiLFtKLE1dKX12YXIgTj1mdW5jdGlvbihYKXtpZihKLnJlYWR5U3RhdGU9PTApe2lmKFApe2NsZWFySW50ZXJ2YWwoUCk7UD1udWxsO2lmKE0uZ2xvYmFsJiYhLS1vLmFjdGl2ZSl7by5ldmVudC50cmlnZ2VyKCJhamF4U3RvcCIpfX19ZWxzZXtpZighSyYmSiYmKEoucmVhZHlTdGF0ZT09NHx8WD09InRpbWVvdXQiKSl7Sz10cnVlO2lmKFApe2NsZWFySW50ZXJ2YWwoUCk7UD1udWxsfVI9WD09InRpbWVvdXQiPyJ0aW1lb3V0Ijohby5odHRwU3VjY2VzcyhKKT8iZXJyb3IiOk0uaWZNb2RpZmllZCYmby5odHRwTm90TW9kaWZpZWQoSixNLnVybCk/Im5vdG1vZGlmaWVkIjoic3VjY2VzcyI7aWYoUj09InN1Y2Nlc3MiKXt0cnl7Vj1vLmh0dHBEYXRhKEosTS5kYXRhVHlwZSxNKX1jYXRjaChaKXtSPSJwYXJzZXJlcnJvciJ9fWlmKFI9PSJzdWNjZXNzIil7dmFyIFk7dHJ5e1k9Si5nZXRSZXNwb25zZUhlYWRlcigiTGFzdC1Nb2RpZmllZCIpfWNhdGNoKFope31pZihNLmlmTW9kaWZpZWQmJlkpe28ubGFzdE1vZGlmaWVkW00udXJsXT1ZfWlmKCFXKXtJKCl9fWVsc2V7by5oYW5kbGVFcnJvcihNLEosUil9TCgpO2lmKFgpe0ouYWJvcnQoKX1pZihNLmFzeW5jKXtKPW51bGx9fX19O2lmKE0uYXN5bmMpe3ZhciBQPXNldEludGVydmFsKE4sMTMpO2lmKE0udGltZW91dD4wKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYoSiYmIUspe04oInRpbWVvdXQiKX19LE0udGltZW91dCl9fXRyeXtKLnNlbmQoTS5kYXRhKX1jYXRjaChTKXtvLmhhbmRsZUVycm9yKE0sSixudWxsLFMpfWlmKCFNLmFzeW5jKXtOKCl9ZnVuY3Rpb24gSSgpe2lmKE0uc3VjY2Vzcyl7TS5zdWNjZXNzKFYsUil9aWYoTS5nbG9iYWwpe28uZXZlbnQudHJpZ2dlcigiYWpheFN1Y2Nlc3MiLFtKLE1dKX19ZnVuY3Rpb24gTCgpe2lmKE0uY29tcGxldGUpe00uY29tcGxldGUoSixSKX1pZihNLmdsb2JhbCl7by5ldmVudC50cmlnZ2VyKCJhamF4Q29tcGxldGUiLFtKLE1dKX1pZihNLmdsb2JhbCYmIS0tby5hY3RpdmUpe28uZXZlbnQudHJpZ2dlcigiYWpheFN0b3AiKX19cmV0dXJuIEp9LGhhbmRsZUVycm9yOmZ1bmN0aW9uKEYsSCxFLEcpe2lmKEYuZXJyb3Ipe0YuZXJyb3IoSCxFLEcpfWlmKEYuZ2xvYmFsKXtvLmV2ZW50LnRyaWdnZXIoImFqYXhFcnJvciIsW0gsRixHXSl9fSxhY3RpdmU6MCxodHRwU3VjY2VzczpmdW5jdGlvbihGKXt0cnl7cmV0dXJuICFGLnN0YXR1cyYmbG9jYXRpb24ucHJvdG9jb2w9PSJmaWxlOiJ8fChGLnN0YXR1cz49MjAwJiZGLnN0YXR1czwzMDApfHxGLnN0YXR1cz09MzA0fHxGLnN0YXR1cz09MTIyM31jYXRjaChFKXt9cmV0dXJuIGZhbHNlfSxodHRwTm90TW9kaWZpZWQ6ZnVuY3Rpb24oRyxFKXt0cnl7dmFyIEg9Ry5nZXRSZXNwb25zZUhlYWRlcigiTGFzdC1Nb2RpZmllZCIpO3JldHVybiBHLnN0YXR1cz09MzA0fHxIPT1vLmxhc3RNb2RpZmllZFtFXX1jYXRjaChGKXt9cmV0dXJuIGZhbHNlfSxodHRwRGF0YTpmdW5jdGlvbihKLEgsRyl7dmFyIEY9Si5nZXRSZXNwb25zZUhlYWRlcigiY29udGVudC10eXBlIiksRT1IPT0ieG1sInx8IUgmJkYmJkYuaW5kZXhPZigieG1sIik+PTAsST1FP0oucmVzcG9uc2VYTUw6Si5yZXNwb25zZVRleHQ7aWYoRSYmSS5kb2N1bWVudEVsZW1lbnQudGFnTmFtZT09InBhcnNlcmVycm9yIil7dGhyb3cicGFyc2VyZXJyb3IifWlmKEcmJkcuZGF0YUZpbHRlcil7ST1HLmRhdGFGaWx0ZXIoSSxIKX1pZih0eXBlb2YgST09PSJzdHJpbmciKXtpZihIPT0ic2NyaXB0Iil7by5nbG9iYWxFdmFsKEkpfWlmKEg9PSJqc29uIil7ST1sWyJldmFsIl0oIigiK0krIikiKX19cmV0dXJuIEl9LHBhcmFtOmZ1bmN0aW9uKEUpe3ZhciBHPVtdO2Z1bmN0aW9uIEgoSSxKKXtHW0cubGVuZ3RoXT1lbmNvZGVVUklDb21wb25lbnQoSSkrIj0iK2VuY29kZVVSSUNvbXBvbmVudChKKX1pZihvLmlzQXJyYXkoRSl8fEUuanF1ZXJ5KXtvLmVhY2goRSxmdW5jdGlvbigpe0godGhpcy5uYW1lLHRoaXMudmFsdWUpfSl9ZWxzZXtmb3IodmFyIEYgaW4gRSl7aWYoby5pc0FycmF5KEVbRl0pKXtvLmVhY2goRVtGXSxmdW5jdGlvbigpe0goRix0aGlzKX0pfWVsc2V7SChGLG8uaXNGdW5jdGlvbihFW0ZdKT9FW0ZdKCk6RVtGXSl9fX1yZXR1cm4gRy5qb2luKCImIikucmVwbGFjZSgvJTIwL2csIisiKX19KTt2YXIgbT17fSxuLGQ9W1siaGVpZ2h0IiwibWFyZ2luVG9wIiwibWFyZ2luQm90dG9tIiwicGFkZGluZ1RvcCIsInBhZGRpbmdCb3R0b20iXSxbIndpZHRoIiwibWFyZ2luTGVmdCIsIm1hcmdpblJpZ2h0IiwicGFkZGluZ0xlZnQiLCJwYWRkaW5nUmlnaHQiXSxbIm9wYWNpdHkiXV07ZnVuY3Rpb24gdChGLEUpe3ZhciBHPXt9O28uZWFjaChkLmNvbmNhdC5hcHBseShbXSxkLnNsaWNlKDAsRSkpLGZ1bmN0aW9uKCkKLXtHW3RoaXNdPUZ9KTtyZXR1cm4gR31vLmZuLmV4dGVuZCh7c2hvdzpmdW5jdGlvbihKLEwpe2lmKEope3JldHVybiB0aGlzLmFuaW1hdGUodCgic2hvdyIsMyksSixMKX1lbHNle2Zvcih2YXIgSD0wLEY9dGhpcy5sZW5ndGg7SDxGO0grKyl7dmFyIEU9by5kYXRhKHRoaXNbSF0sIm9sZGRpc3BsYXkiKTt0aGlzW0hdLnN0eWxlLmRpc3BsYXk9RXx8IiI7aWYoby5jc3ModGhpc1tIXSwiZGlzcGxheSIpPT09Im5vbmUiKXt2YXIgRz10aGlzW0hdLnRhZ05hbWUsSztpZihtW0ddKXtLPW1bR119ZWxzZXt2YXIgST1vKCI8IitHKyIgLz4iKS5hcHBlbmRUbygiYm9keSIpO0s9SS5jc3MoImRpc3BsYXkiKTtpZihLPT09Im5vbmUiKXtLPSJibG9jayJ9SS5yZW1vdmUoKTttW0ddPUt9by5kYXRhKHRoaXNbSF0sIm9sZGRpc3BsYXkiLEspfX1mb3IodmFyIEg9MCxGPXRoaXMubGVuZ3RoO0g8RjtIKyspe3RoaXNbSF0uc3R5bGUuZGlzcGxheT1vLmRhdGEodGhpc1tIXSwib2xkZGlzcGxheSIpfHwiIn1yZXR1cm4gdGhpc319LGhpZGU6ZnVuY3Rpb24oSCxJKXtpZihIKXtyZXR1cm4gdGhpcy5hbmltYXRlKHQoImhpZGUiLDMpLEgsSSl9ZWxzZXtmb3IodmFyIEc9MCxGPXRoaXMubGVuZ3RoO0c8RjtHKyspe3ZhciBFPW8uZGF0YSh0aGlzW0ddLCJvbGRkaXNwbGF5Iik7aWYoIUUmJkUhPT0ibm9uZSIpe28uZGF0YSh0aGlzW0ddLCJvbGRkaXNwbGF5IixvLmNzcyh0aGlzW0ddLCJkaXNwbGF5IikpfX1mb3IodmFyIEc9MCxGPXRoaXMubGVuZ3RoO0c8RjtHKyspe3RoaXNbR10uc3R5bGUuZGlzcGxheT0ibm9uZSJ9cmV0dXJuIHRoaXN9fSxfdG9nZ2xlOm8uZm4udG9nZ2xlLHRvZ2dsZTpmdW5jdGlvbihHLEYpe3ZhciBFPXR5cGVvZiBHPT09ImJvb2xlYW4iO3JldHVybiBvLmlzRnVuY3Rpb24oRykmJm8uaXNGdW5jdGlvbihGKT90aGlzLl90b2dnbGUuYXBwbHkodGhpcyxhcmd1bWVudHMpOkc9PW51bGx8fEU/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIEg9RT9HOm8odGhpcykuaXMoIjpoaWRkZW4iKTtvKHRoaXMpW0g/InNob3ciOiJoaWRlIl0oKX0pOnRoaXMuYW5pbWF0ZSh0KCJ0b2dnbGUiLDMpLEcsRil9LGZhZGVUbzpmdW5jdGlvbihFLEcsRil7cmV0dXJuIHRoaXMuYW5pbWF0ZSh7b3BhY2l0eTpHfSxFLEYpfSxhbmltYXRlOmZ1bmN0aW9uKEksRixILEcpe3ZhciBFPW8uc3BlZWQoRixILEcpO3JldHVybiB0aGlzW0UucXVldWU9PT1mYWxzZT8iZWFjaCI6InF1ZXVlIl0oZnVuY3Rpb24oKXt2YXIgSz1vLmV4dGVuZCh7fSxFKSxNLEw9dGhpcy5ub2RlVHlwZT09MSYmbyh0aGlzKS5pcygiOmhpZGRlbiIpLEo9dGhpcztmb3IoTSBpbiBJKXtpZihJW01dPT0iaGlkZSImJkx8fElbTV09PSJzaG93IiYmIUwpe3JldHVybiBLLmNvbXBsZXRlLmNhbGwodGhpcyl9aWYoKE09PSJoZWlnaHQifHxNPT0id2lkdGgiKSYmdGhpcy5zdHlsZSl7Sy5kaXNwbGF5PW8uY3NzKHRoaXMsImRpc3BsYXkiKTtLLm92ZXJmbG93PXRoaXMuc3R5bGUub3ZlcmZsb3d9fWlmKEsub3ZlcmZsb3chPW51bGwpe3RoaXMuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiJ9Sy5jdXJBbmltPW8uZXh0ZW5kKHt9LEkpO28uZWFjaChJLGZ1bmN0aW9uKE8sUyl7dmFyIFI9bmV3IG8uZngoSixLLE8pO2lmKC90b2dnbGV8c2hvd3xoaWRlLy50ZXN0KFMpKXtSW1M9PSJ0b2dnbGUiP0w/InNob3ciOiJoaWRlIjpTXShJKX1lbHNle3ZhciBRPVMudG9TdHJpbmcoKS5tYXRjaCgvXihbKy1dPSk/KFtcZCstLl0rKSguKikkLyksVD1SLmN1cih0cnVlKXx8MDtpZihRKXt2YXIgTj1wYXJzZUZsb2F0KFFbMl0pLFA9UVszXXx8InB4IjtpZihQIT0icHgiKXtKLnN0eWxlW09dPShOfHwxKStQO1Q9KChOfHwxKS9SLmN1cih0cnVlKSkqVDtKLnN0eWxlW09dPVQrUH1pZihRWzFdKXtOPSgoUVsxXT09Ii09Ij8tMToxKSpOKStUfVIuY3VzdG9tKFQsTixQKX1lbHNle1IuY3VzdG9tKFQsUywiIil9fX0pO3JldHVybiB0cnVlfSl9LHN0b3A6ZnVuY3Rpb24oRixFKXt2YXIgRz1vLnRpbWVycztpZihGKXt0aGlzLnF1ZXVlKFtdKX10aGlzLmVhY2goZnVuY3Rpb24oKXtmb3IodmFyIEg9Ry5sZW5ndGgtMTtIPj0wO0gtLSl7aWYoR1tIXS5lbGVtPT10aGlzKXtpZihFKXtHW0hdKHRydWUpfUcuc3BsaWNlKEgsMSl9fX0pO2lmKCFFKXt0aGlzLmRlcXVldWUoKX1yZXR1cm4gdGhpc319KTtvLmVhY2goe3NsaWRlRG93bjp0KCJzaG93IiwxKSxzbGlkZVVwOnQoImhpZGUiLDEpLHNsaWRlVG9nZ2xlOnQoInRvZ2dsZSIsMSksZmFkZUluOntvcGFjaXR5OiJzaG93In0sZmFkZU91dDp7b3BhY2l0eToiaGlkZSJ9fSxmdW5jdGlvbihFLEYpe28uZm5bRV09ZnVuY3Rpb24oRyxIKXtyZXR1cm4gdGhpcy5hbmltYXRlKEYsRyxIKX19KTtvLmV4dGVuZCh7c3BlZWQ6ZnVuY3Rpb24oRyxILEYpe3ZhciBFPXR5cGVvZiBHPT09Im9iamVjdCI/Rzp7Y29tcGxldGU6Rnx8IUYmJkh8fG8uaXNGdW5jdGlvbihHKSYmRyxkdXJhdGlvbjpHLGVhc2luZzpGJiZIfHxIJiYhby5pc0Z1bmN0aW9uKEgpJiZIfTtFLmR1cmF0aW9uPW8uZngub2ZmPzA6dHlwZW9mIEUuZHVyYXRpb249PT0ibnVtYmVyIj9FLmR1cmF0aW9uOm8uZnguc3BlZWRzW0UuZHVyYXRpb25dfHxvLmZ4LnNwZWVkcy5fZGVmYXVsdDtFLm9sZD1FLmNvbXBsZXRlO0UuY29tcGxldGU9ZnVuY3Rpb24oKXtpZihFLnF1ZXVlIT09ZmFsc2Upe28odGhpcykuZGVxdWV1ZSgpfWlmKG8uaXNGdW5jdGlvbihFLm9sZCkpe0Uub2xkLmNhbGwodGhpcyl9fTtyZXR1cm4gRX0sZWFzaW5nOntsaW5lYXI6ZnVuY3Rpb24oRyxILEUsRil7cmV0dXJuIEUrRipHfSxzd2luZzpmdW5jdGlvbihHLEgsRSxGKXtyZXR1cm4oKC1NYXRoLmNvcyhHKk1hdGguUEkpLzIpKzAuNSkqRitFfX0sdGltZXJzOltdLGZ4OmZ1bmN0aW9uKEYsRSxHKXt0aGlzLm9wdGlvbnM9RTt0aGlzLmVsZW09Rjt0aGlzLnByb3A9RztpZighRS5vcmlnKXtFLm9yaWc9e319fX0pO28uZngucHJvdG90eXBlPXt1cGRhdGU6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuc3RlcCl7dGhpcy5vcHRpb25zLnN0ZXAuY2FsbCh0aGlzLmVsZW0sdGhpcy5ub3csdGhpcyl9KG8uZnguc3RlcFt0aGlzLnByb3BdfHxvLmZ4LnN0ZXAuX2RlZmF1bHQpKHRoaXMpO2lmKCh0aGlzLnByb3A9PSJoZWlnaHQifHx0aGlzLnByb3A9PSJ3aWR0aCIpJiZ0aGlzLmVsZW0uc3R5bGUpe3RoaXMuZWxlbS5zdHlsZS5kaXNwbGF5PSJibG9jayJ9fSxjdXI6ZnVuY3Rpb24oRil7aWYodGhpcy5lbGVtW3RoaXMucHJvcF0hPW51bGwmJighdGhpcy5lbGVtLnN0eWxlfHx0aGlzLmVsZW0uc3R5bGVbdGhpcy5wcm9wXT09bnVsbCkpe3JldHVybiB0aGlzLmVsZW1bdGhpcy5wcm9wXX12YXIgRT1wYXJzZUZsb2F0KG8uY3NzKHRoaXMuZWxlbSx0aGlzLnByb3AsRikpO3JldHVybiBFJiZFPi0xMDAwMD9FOnBhcnNlRmxvYXQoby5jdXJDU1ModGhpcy5lbGVtLHRoaXMucHJvcCkpfHwwfSxjdXN0b206ZnVuY3Rpb24oSSxILEcpe3RoaXMuc3RhcnRUaW1lPWUoKTt0aGlzLnN0YXJ0PUk7dGhpcy5lbmQ9SDt0aGlzLnVuaXQ9R3x8dGhpcy51bml0fHwicHgiO3RoaXMubm93PXRoaXMuc3RhcnQ7dGhpcy5wb3M9dGhpcy5zdGF0ZT0wO3ZhciBFPXRoaXM7ZnVuY3Rpb24gRihKKXtyZXR1cm4gRS5zdGVwKEopfUYuZWxlbT10aGlzLmVsZW07aWYoRigpJiZvLnRpbWVycy5wdXNoKEYpJiYhbil7bj1zZXRJbnRlcnZhbChmdW5jdGlvbigpe3ZhciBLPW8udGltZXJzO2Zvcih2YXIgSj0wO0o8Sy5sZW5ndGg7SisrKXtpZighS1tKXSgpKXtLLnNwbGljZShKLS0sMSl9fWlmKCFLLmxlbmd0aCl7Y2xlYXJJbnRlcnZhbChuKTtuPWd9fSwxMyl9fSxzaG93OmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLm9yaWdbdGhpcy5wcm9wXT1vLmF0dHIodGhpcy5lbGVtLnN0eWxlLHRoaXMucHJvcCk7dGhpcy5vcHRpb25zLnNob3c9dHJ1ZTt0aGlzLmN1c3RvbSh0aGlzLnByb3A9PSJ3aWR0aCJ8fHRoaXMucHJvcD09ImhlaWdodCI/MTowLHRoaXMuY3VyKCkpO28odGhpcy5lbGVtKS5zaG93KCl9LGhpZGU6ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMub3JpZ1t0aGlzLnByb3BdPW8uYXR0cih0aGlzLmVsZW0uc3R5bGUsdGhpcy5wcm9wKTt0aGlzLm9wdGlvbnMuaGlkZT10cnVlO3RoaXMuY3VzdG9tKHRoaXMuY3VyKCksMCl9LHN0ZXA6ZnVuY3Rpb24oSCl7dmFyIEc9ZSgpO2lmKEh8fEc+PXRoaXMub3B0aW9ucy5kdXJhdGlvbit0aGlzLnN0YXJ0VGltZSl7dGhpcy5ub3c9dGhpcy5lbmQ7dGhpcy5wb3M9dGhpcy5zdGF0ZT0xO3RoaXMudXBkYXRlKCk7dGhpcy5vcHRpb25zLmN1ckFuaW1bdGhpcy5wcm9wXT10cnVlO3ZhciBFPXRydWU7Zm9yKHZhciBGIGluIHRoaXMub3B0aW9ucy5jdXJBbmltKXtpZih0aGlzLm9wdGlvbnMuY3VyQW5pbVtGXSE9PXRydWUpe0U9ZmFsc2V9fWlmKEUpe2lmKHRoaXMub3B0aW9ucy5kaXNwbGF5IT1udWxsKXt0aGlzLmVsZW0uc3R5bGUub3ZlcmZsb3c9dGhpcy5vcHRpb25zLm92ZXJmbG93O3RoaXMuZWxlbS5zdHlsZS5kaXNwbGF5PXRoaXMub3B0aW9ucy5kaXNwbGF5O2lmKG8uY3NzKHRoaXMuZWxlbSwiZGlzcGxheSIpPT0ibm9uZSIpe3RoaXMuZWxlbS5zdHlsZS5kaXNwbGF5PSJibG9jayJ9fWlmKHRoaXMub3B0aW9ucy5oaWRlKXtvKHRoaXMuZWxlbSkuaGlkZSgpfWlmKHRoaXMub3B0aW9ucy5oaWRlfHx0aGlzLm9wdGlvbnMuc2hvdyl7Zm9yKHZhciBJIGluIHRoaXMub3B0aW9ucy5jdXJBbmltKXtvLmF0dHIodGhpcy5lbGVtLnN0eWxlLEksdGhpcy5vcHRpb25zLm9yaWdbSV0pfX10aGlzLm9wdGlvbnMuY29tcGxldGUuY2FsbCh0aGlzLmVsZW0pfXJldHVybiBmYWxzZX1lbHNle3ZhciBKPUctdGhpcy5zdGFydFRpbWU7dGhpcy5zdGF0ZT1KL3RoaXMub3B0aW9ucy5kdXJhdGlvbjt0aGlzLnBvcz1vLmVhc2luZ1t0aGlzLm9wdGlvbnMuZWFzaW5nfHwoby5lYXNpbmcuc3dpbmc/InN3aW5nIjoibGluZWFyIildKHRoaXMuc3RhdGUsSiwwLDEsdGhpcy5vcHRpb25zLmR1cmF0aW9uKTt0aGlzLm5vdz10aGlzLnN0YXJ0KygodGhpcy5lbmQtdGhpcy5zdGFydCkqdGhpcy5wb3MpO3RoaXMudXBkYXRlKCl9cmV0dXJuIHRydWV9fTtvLmV4dGVuZChvLmZ4LHtzcGVlZHM6e3Nsb3c6NjAwLGZhc3Q6MjAwLF9kZWZhdWx0OjQwMH0sc3RlcDp7b3BhY2l0eTpmdW5jdGlvbihFKXtvLmF0dHIoRS5lbGVtLnN0eWxlLCJvcGFjaXR5IixFLm5vdyl9LF9kZWZhdWx0OmZ1bmN0aW9uKEUpe2lmKEUuZWxlbS5zdHlsZSYmRS5lbGVtLnN0eWxlW0UucHJvcF0hPW51bGwpe0UuZWxlbS5zdHlsZVtFLnByb3BdPUUubm93K0UudW5pdH1lbHNle0UuZWxlbVtFLnByb3BdPUUubm93fX19fSk7aWYoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCl7by5mbi5vZmZzZXQ9ZnVuY3Rpb24oKXtpZighdGhpc1swXSl7cmV0dXJue3RvcDowLGxlZnQ6MH19aWYodGhpc1swXT09PXRoaXNbMF0ub3duZXJEb2N1bWVudC5ib2R5KXtyZXR1cm4gby5vZmZzZXQuYm9keU9mZnNldCh0aGlzWzBdKX12YXIgRz10aGlzWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEo9dGhpc1swXS5vd25lckRvY3VtZW50LEY9Si5ib2R5LEU9Si5kb2N1bWVudEVsZW1lbnQsTD1FLmNsaWVudFRvcHx8Ri5jbGllbnRUb3B8fDAsSz1FLmNsaWVudExlZnR8fEYuY2xpZW50TGVmdHx8MCxJPUcudG9wKyhzZWxmLnBhZ2VZT2Zmc2V0fHxvLmJveE1vZGVsJiZFLnNjcm9sbFRvcHx8Ri5zY3JvbGxUb3ApLUwsSD1HLmxlZnQrKHNlbGYucGFnZVhPZmZzZXR8fG8uYm94TW9kZWwmJkUuc2Nyb2xsTGVmdHx8Ri5zY3JvbGxMZWZ0KS1LO3JldHVybnt0b3A6SSxsZWZ0Okh9fX1lbHNle28uZm4ub2Zmc2V0PWZ1bmN0aW9uKCl7aWYoIXRoaXNbMF0pe3JldHVybnt0b3A6MCxsZWZ0OjB9fWlmKHRoaXNbMF09PT10aGlzWzBdLm93bmVyRG9jdW1lbnQuYm9keSl7cmV0dXJuIG8ub2Zmc2V0LmJvZHlPZmZzZXQodGhpc1swXSl9by5vZmZzZXQuaW5pdGlhbGl6ZWR8fG8ub2Zmc2V0LmluaXRpYWxpemUoKTt2YXIgSj10aGlzWzBdLEc9Si5vZmZzZXRQYXJlbnQsRj1KLE89Si5vd25lckRvY3VtZW50LE0sSD1PLmRvY3VtZW50RWxlbWVudCxLPU8uYm9keSxMPU8uZGVmYXVsdFZpZXcsRT1MLmdldENvbXB1dGVkU3R5bGUoSixudWxsKSxOPUoub2Zmc2V0VG9wLEk9Si5vZmZzZXRMZWZ0O3doaWxlKChKPUoucGFyZW50Tm9kZSkmJkohPT1LJiZKIT09SCl7TT1MLmdldENvbXB1dGVkU3R5bGUoSixudWxsKTtOLT1KLnNjcm9sbFRvcCxJLT1KLnNjcm9sbExlZnQ7aWYoSj09PUcpe04rPUoub2Zmc2V0VG9wLEkrPUoub2Zmc2V0TGVmdDtpZihvLm9mZnNldC5kb2VzTm90QWRkQm9yZGVyJiYhKG8ub2Zmc2V0LmRvZXNBZGRCb3JkZXJGb3JUYWJsZUFuZENlbGxzJiYvXnQoYWJsZXxkfGgpJC9pLnRlc3QoSi50YWdOYW1lKSkpe04rPXBhcnNlSW50KE0uYm9yZGVyVG9wV2lkdGgsMTApfHwwLEkrPXBhcnNlSW50KE0uYm9yZGVyTGVmdFdpZHRoLDEwKXx8MH1GPUcsRz1KLm9mZnNldFBhcmVudH1pZihvLm9mZnNldC5zdWJ0cmFjdHNCb3JkZXJGb3JPdmVyZmxvd05vdFZpc2libGUmJk0ub3ZlcmZsb3chPT0idmlzaWJsZSIpe04rPXBhcnNlSW50KE0uYm9yZGVyVG9wV2lkdGgsMTApfHwwLEkrPXBhcnNlSW50KE0uYm9yZGVyTGVmdFdpZHRoLDEwKXx8MH1FPU19aWYoRS5wb3NpdGlvbj09PSJyZWxhdGl2ZSJ8fEUucG9zaXRpb249PT0ic3RhdGljIil7Tis9Sy5vZmZzZXRUb3AsSSs9Sy5vZmZzZXRMZWZ0fWlmKEUucG9zaXRpb249PT0iZml4ZWQiKXtOKz1NYXRoLm1heChILnNjcm9sbFRvcCxLLnNjcm9sbFRvcCksSSs9TWF0aC5tYXgoSC5zY3JvbGxMZWZ0LEsuc2Nyb2xsTGVmdCl9cmV0dXJue3RvcDpOLGxlZnQ6SX19fW8ub2Zmc2V0PXtpbml0aWFsaXplOmZ1bmN0aW9uKCl7aWYodGhpcy5pbml0aWFsaXplZCl7cmV0dXJufXZhciBMPWRvY3VtZW50LmJvZHksRj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxILEcsTixJLE0sRSxKPUwuc3R5bGUubWFyZ2luVG9wLEs9JzxkaXYgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDttYXJnaW46MDtib3JkZXI6NXB4IHNvbGlkICMwMDA7cGFkZGluZzowO3dpZHRoOjFweDtoZWlnaHQ6MXB4OyI+PGRpdj48L2Rpdj48L2Rpdj48dGFibGUgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDttYXJnaW46MDtib3JkZXI6NXB4IHNvbGlkICMwMDA7cGFkZGluZzowO3dpZHRoOjFweDtoZWlnaHQ6MXB4OyIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj48dHI+PHRkPjwvdGQ+PC90cj48L3RhYmxlPic7TT17cG9zaXRpb246ImFic29sdXRlIix0b3A6MCxsZWZ0OjAsbWFyZ2luOjAsYm9yZGVyOjAsd2lkdGg6IjFweCIsaGVpZ2h0OiIxcHgiLHZpc2liaWxpdHk6ImhpZGRlbiJ9O2ZvcihFIGluIE0pe0Yuc3R5bGVbRV09TVtFXX1GLmlubmVySFRNTD1LO0wuaW5zZXJ0QmVmb3JlKEYsTC5maXJzdENoaWxkKTtIPUYuZmlyc3RDaGlsZCxHPUguZmlyc3RDaGlsZCxJPUgubmV4dFNpYmxpbmcuZmlyc3RDaGlsZC5maXJzdENoaWxkO3RoaXMuZG9lc05vdEFkZEJvcmRlcj0oRy5vZmZzZXRUb3AhPT01KTt0aGlzLmRvZXNBZGRCb3JkZXJGb3JUYWJsZUFuZENlbGxzPShJLm9mZnNldFRvcD09PTUpO0guc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIsSC5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiO3RoaXMuc3VidHJhY3RzQm9yZGVyRm9yT3ZlcmZsb3dOb3RWaXNpYmxlPShHLm9mZnNldFRvcD09PS01KTtMLnN0eWxlLm1hcmdpblRvcD0iMXB4Ijt0aGlzLmRvZXNOb3RJbmNsdWRlTWFyZ2luSW5Cb2R5T2Zmc2V0PShMLm9mZnNldFRvcD09PTApO0wuc3R5bGUubWFyZ2luVG9wPUo7TC5yZW1vdmVDaGlsZChGKTt0aGlzLmluaXRpYWxpemVkPXRydWV9LGJvZHlPZmZzZXQ6ZnVuY3Rpb24oRSl7by5vZmZzZXQuaW5pdGlhbGl6ZWR8fG8ub2Zmc2V0LmluaXRpYWxpemUoKTt2YXIgRz1FLm9mZnNldFRvcCxGPUUub2Zmc2V0TGVmdDtpZihvLm9mZnNldC5kb2VzTm90SW5jbHVkZU1hcmdpbkluQm9keU9mZnNldCl7Rys9cGFyc2VJbnQoby5jdXJDU1MoRSwibWFyZ2luVG9wIix0cnVlKSwxMCl8fDAsRis9cGFyc2VJbnQoby5jdXJDU1MoRSwibWFyZ2luTGVmdCIsdHJ1ZSksMTApfHwwfXJldHVybnt0b3A6RyxsZWZ0OkZ9fX07by5mbi5leHRlbmQoe3Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIEk9MCxIPTAsRjtpZih0aGlzWzBdKXt2YXIgRz10aGlzLm9mZnNldFBhcmVudCgpLEo9dGhpcy5vZmZzZXQoKSxFPS9eYm9keXxodG1sJC9pLnRlc3QoR1swXS50YWdOYW1lKT97dG9wOjAsbGVmdDowfTpHLm9mZnNldCgpO0oudG9wLT1qKHRoaXMsIm1hcmdpblRvcCIpO0oubGVmdC09aih0aGlzLCJtYXJnaW5MZWZ0Iik7RS50b3ArPWooRywiYm9yZGVyVG9wV2lkdGgiKTtFLmxlZnQrPWooRywiYm9yZGVyTGVmdFdpZHRoIik7Rj17dG9wOkoudG9wLUUudG9wLGxlZnQ6Si5sZWZ0LUUubGVmdH19cmV0dXJuIEZ9LG9mZnNldFBhcmVudDpmdW5jdGlvbigpe3ZhciBFPXRoaXNbMF0ub2Zmc2V0UGFyZW50fHxkb2N1bWVudC5ib2R5O3doaWxlKEUmJighL15ib2R5fGh0bWwkL2kudGVzdChFLnRhZ05hbWUpJiZvLmNzcyhFLCJwb3NpdGlvbiIpPT0ic3RhdGljIikpe0U9RS5vZmZzZXRQYXJlbnR9cmV0dXJuIG8oRSl9fSk7by5lYWNoKFsiTGVmdCIsIlRvcCJdLGZ1bmN0aW9uKEYsRSl7dmFyIEc9InNjcm9sbCIrRTtvLmZuW0ddPWZ1bmN0aW9uKEgpe2lmKCF0aGlzWzBdKXtyZXR1cm4gbnVsbH1yZXR1cm4gSCE9PWc/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dGhpcz09bHx8dGhpcz09ZG9jdW1lbnQ/bC5zY3JvbGxUbyghRj9IOm8obCkuc2Nyb2xsTGVmdCgpLEY/SDpvKGwpLnNjcm9sbFRvcCgpKTp0aGlzW0ddPUh9KTp0aGlzWzBdPT1sfHx0aGlzWzBdPT1kb2N1bWVudD9zZWxmW0Y/InBhZ2VZT2Zmc2V0IjoicGFnZVhPZmZzZXQiXXx8by5ib3hNb2RlbCYmZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50W0ddfHxkb2N1bWVudC5ib2R5W0ddOnRoaXNbMF1bR119fSk7by5lYWNoKFsiSGVpZ2h0IiwiV2lkdGgiXSxmdW5jdGlvbihJLEcpe3ZhciBFPUk/IkxlZnQiOiJUb3AiLEg9ST8iUmlnaHQiOiJCb3R0b20iLEY9Ry50b0xvd2VyQ2FzZSgpO28uZm5bImlubmVyIitHXT1mdW5jdGlvbigpe3JldHVybiB0aGlzWzBdP28uY3NzKHRoaXNbMF0sRixmYWxzZSwicGFkZGluZyIpOm51bGx9O28uZm5bIm91dGVyIitHXT1mdW5jdGlvbihLKXtyZXR1cm4gdGhpc1swXT9vLmNzcyh0aGlzWzBdLEYsZmFsc2UsSz8ibWFyZ2luIjoiYm9yZGVyIik6bnVsbH07dmFyIEo9Ry50b0xvd2VyQ2FzZSgpO28uZm5bSl09ZnVuY3Rpb24oSyl7cmV0dXJuIHRoaXNbMF09PWw/ZG9jdW1lbnQuY29tcGF0TW9kZT09IkNTUzFDb21wYXQiJiZkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIrR118fGRvY3VtZW50LmJvZHlbImNsaWVudCIrR106dGhpc1swXT09ZG9jdW1lbnQ/TWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyJjbGllbnQiK0ddLGRvY3VtZW50LmJvZHlbInNjcm9sbCIrR10sZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyJzY3JvbGwiK0ddLGRvY3VtZW50LmJvZHlbIm9mZnNldCIrR10sZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyJvZmZzZXQiK0ddKTpLPT09Zz8odGhpcy5sZW5ndGg/by5jc3ModGhpc1swXSxKKTpudWxsKTp0aGlzLmNzcyhKLHR5cGVvZiBLPT09InN0cmluZyI/SzpLKyJweCIpfX0pfSkoKTsKLS8qCi0gKiBqUXVlcnkgVUkgMS43LjIKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgQVVUSE9SUy50eHQgKGh0dHA6Ly9qcXVlcnl1aS5jb20vYWJvdXQpCi0gKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgKE1JVC1MSUNFTlNFLnR4dCkKLSAqIGFuZCBHUEwgKEdQTC1MSUNFTlNFLnR4dCkgbGljZW5zZXMuCi0gKgotICogaHR0cDovL2RvY3MuanF1ZXJ5LmNvbS9VSQotICovCi1qUXVlcnkudWl8fChmdW5jdGlvbihjKXt2YXIgaT1jLmZuLnJlbW92ZSxkPWMuYnJvd3Nlci5tb3ppbGxhJiYocGFyc2VGbG9hdChjLmJyb3dzZXIudmVyc2lvbik8MS45KTtjLnVpPXt2ZXJzaW9uOiIxLjcuMiIscGx1Z2luOnthZGQ6ZnVuY3Rpb24oayxsLG4pe3ZhciBtPWMudWlba10ucHJvdG90eXBlO2Zvcih2YXIgaiBpbiBuKXttLnBsdWdpbnNbal09bS5wbHVnaW5zW2pdfHxbXTttLnBsdWdpbnNbal0ucHVzaChbbCxuW2pdXSl9fSxjYWxsOmZ1bmN0aW9uKGosbCxrKXt2YXIgbj1qLnBsdWdpbnNbbF07aWYoIW58fCFqLmVsZW1lbnRbMF0ucGFyZW50Tm9kZSl7cmV0dXJufWZvcih2YXIgbT0wO208bi5sZW5ndGg7bSsrKXtpZihqLm9wdGlvbnNbblttXVswXV0pe25bbV1bMV0uYXBwbHkoai5lbGVtZW50LGspfX19fSxjb250YWluczpmdW5jdGlvbihrLGope3JldHVybiBkb2N1bWVudC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj9rLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGopJjE2OmshPT1qJiZrLmNvbnRhaW5zKGopfSxoYXNTY3JvbGw6ZnVuY3Rpb24obSxrKXtpZihjKG0pLmNzcygib3ZlcmZsb3ciKT09ImhpZGRlbiIpe3JldHVybiBmYWxzZX12YXIgaj0oayYmaz09ImxlZnQiKT8ic2Nyb2xsTGVmdCI6InNjcm9sbFRvcCIsbD1mYWxzZTtpZihtW2pdPjApe3JldHVybiB0cnVlfW1bal09MTtsPShtW2pdPjApO21bal09MDtyZXR1cm4gbH0saXNPdmVyQXhpczpmdW5jdGlvbihrLGosbCl7cmV0dXJuKGs+aikmJihrPChqK2wpKX0saXNPdmVyOmZ1bmN0aW9uKG8sayxuLG0saixsKXtyZXR1cm4gYy51aS5pc092ZXJBeGlzKG8sbixqKSYmYy51aS5pc092ZXJBeGlzKGssbSxsKX0sa2V5Q29kZTp7QkFDS1NQQUNFOjgsQ0FQU19MT0NLOjIwLENPTU1BOjE4OCxDT05UUk9MOjE3LERFTEVURTo0NixET1dOOjQwLEVORDozNSxFTlRFUjoxMyxFU0NBUEU6MjcsSE9NRTozNixJTlNFUlQ6NDUsTEVGVDozNyxOVU1QQURfQUREOjEwNyxOVU1QQURfREVDSU1BTDoxMTAsTlVNUEFEX0RJVklERToxMTEsTlVNUEFEX0VOVEVSOjEwOCxOVU1QQURfTVVMVElQTFk6MTA2LE5VTVBBRF9TVUJUUkFDVDoxMDksUEFHRV9ET1dOOjM0LFBBR0VfVVA6MzMsUEVSSU9EOjE5MCxSSUdIVDozOSxTSElGVDoxNixTUEFDRTozMixUQUI6OSxVUDozOH19O2lmKGQpe3ZhciBmPWMuYXR0cixlPWMuZm4ucmVtb3ZlQXR0cixoPSJodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA3L2FhYSIsYT0vXmFyaWEtLyxiPS9ed2Fpcm9sZTovO2MuYXR0cj1mdW5jdGlvbihrLGosbCl7dmFyIG09bCE9PXVuZGVmaW5lZDtyZXR1cm4oaj09InJvbGUiPyhtP2YuY2FsbCh0aGlzLGssaiwid2Fpcm9sZToiK2wpOihmLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8IiIpLnJlcGxhY2UoYiwiIikpOihhLnRlc3Qoaik/KG0/ay5zZXRBdHRyaWJ1dGVOUyhoLGoucmVwbGFjZShhLCJhYWE6IiksbCk6Zi5jYWxsKHRoaXMsayxqLnJlcGxhY2UoYSwiYWFhOiIpKSk6Zi5hcHBseSh0aGlzLGFyZ3VtZW50cykpKX07Yy5mbi5yZW1vdmVBdHRyPWZ1bmN0aW9uKGope3JldHVybihhLnRlc3Qoaik/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhoLGoucmVwbGFjZShhLCIiKSl9KTplLmNhbGwodGhpcyxqKSl9fWMuZm4uZXh0ZW5kKHtyZW1vdmU6ZnVuY3Rpb24oKXtjKCIqIix0aGlzKS5hZGQodGhpcykuZWFjaChmdW5jdGlvbigpe2ModGhpcykudHJpZ2dlckhhbmRsZXIoInJlbW92ZSIpfSk7cmV0dXJuIGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxlbmFibGVTZWxlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hdHRyKCJ1bnNlbGVjdGFibGUiLCJvZmYiKS5jc3MoIk1velVzZXJTZWxlY3QiLCIiKS51bmJpbmQoInNlbGVjdHN0YXJ0LnVpIil9LGRpc2FibGVTZWxlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hdHRyKCJ1bnNlbGVjdGFibGUiLCJvbiIpLmNzcygiTW96VXNlclNlbGVjdCIsIm5vbmUiKS5iaW5kKCJzZWxlY3RzdGFydC51aSIsZnVuY3Rpb24oKXtyZXR1cm4gZmFsc2V9KX0sc2Nyb2xsUGFyZW50OmZ1bmN0aW9uKCl7dmFyIGo7aWYoKGMuYnJvd3Nlci5tc2llJiYoLyhzdGF0aWN8cmVsYXRpdmUpLykudGVzdCh0aGlzLmNzcygicG9zaXRpb24iKSkpfHwoL2Fic29sdXRlLykudGVzdCh0aGlzLmNzcygicG9zaXRpb24iKSkpe2o9dGhpcy5wYXJlbnRzKCkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuKC8ocmVsYXRpdmV8YWJzb2x1dGV8Zml4ZWQpLykudGVzdChjLmN1ckNTUyh0aGlzLCJwb3NpdGlvbiIsMSkpJiYoLyhhdXRvfHNjcm9sbCkvKS50ZXN0KGMuY3VyQ1NTKHRoaXMsIm92ZXJmbG93IiwxKStjLmN1ckNTUyh0aGlzLCJvdmVyZmxvdy15IiwxKStjLmN1ckNTUyh0aGlzLCJvdmVyZmxvdy14IiwxKSl9KS5lcSgwKX1lbHNle2o9dGhpcy5wYXJlbnRzKCkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuKC8oYXV0b3xzY3JvbGwpLykudGVzdChjLmN1ckNTUyh0aGlzLCJvdmVyZmxvdyIsMSkrYy5jdXJDU1ModGhpcywib3ZlcmZsb3cteSIsMSkrYy5jdXJDU1ModGhpcywib3ZlcmZsb3cteCIsMSkpfSkuZXEoMCl9cmV0dXJuKC9maXhlZC8pLnRlc3QodGhpcy5jc3MoInBvc2l0aW9uIikpfHwhai5sZW5ndGg/Yyhkb2N1bWVudCk6an19KTtjLmV4dGVuZChjLmV4cHJbIjoiXSx7ZGF0YTpmdW5jdGlvbihsLGssail7cmV0dXJuICEhYy5kYXRhKGwsalszXSl9LGZvY3VzYWJsZTpmdW5jdGlvbihrKXt2YXIgbD1rLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksaj1jLmF0dHIoaywidGFiaW5kZXgiKTtyZXR1cm4oL2lucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b258b2JqZWN0Ly50ZXN0KGwpPyFrLmRpc2FibGVkOiJhIj09bHx8ImFyZWEiPT1sP2suaHJlZnx8IWlzTmFOKGopOiFpc05hTihqKSkmJiFjKGspWyJhcmVhIj09bD8icGFyZW50cyI6ImNsb3Nlc3QiXSgiOmhpZGRlbiIpLmxlbmd0aH0sdGFiYmFibGU6ZnVuY3Rpb24oayl7dmFyIGo9Yy5hdHRyKGssInRhYmluZGV4Iik7cmV0dXJuKGlzTmFOKGopfHxqPj0wKSYmYyhrKS5pcygiOmZvY3VzYWJsZSIpfX0pO2Z1bmN0aW9uIGcobSxuLG8sbCl7ZnVuY3Rpb24gayhxKXt2YXIgcD1jW21dW25dW3FdfHxbXTtyZXR1cm4odHlwZW9mIHA9PSJzdHJpbmciP3Auc3BsaXQoLyw/XHMrLyk6cCl9dmFyIGo9aygiZ2V0dGVyIik7aWYobC5sZW5ndGg9PTEmJnR5cGVvZiBsWzBdPT0ic3RyaW5nIil7aj1qLmNvbmNhdChrKCJnZXR0ZXJTZXR0ZXIiKSl9cmV0dXJuKGMuaW5BcnJheShvLGopIT0tMSl9Yy53aWRnZXQ9ZnVuY3Rpb24oayxqKXt2YXIgbD1rLnNwbGl0KCIuIilbMF07az1rLnNwbGl0KCIuIilbMV07Yy5mbltrXT1mdW5jdGlvbihwKXt2YXIgbj0odHlwZW9mIHA9PSJzdHJpbmciKSxvPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtpZihuJiZwLnN1YnN0cmluZygwLDEpPT0iXyIpe3JldHVybiB0aGlzfWlmKG4mJmcobCxrLHAsbykpe3ZhciBtPWMuZGF0YSh0aGlzWzBdLGspO3JldHVybihtP21bcF0uYXBwbHkobSxvKTp1bmRlZmluZWQpfXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgcT1jLmRhdGEodGhpcyxrKTsoIXEmJiFuJiZjLmRhdGEodGhpcyxrLG5ldyBjW2xdW2tdKHRoaXMscCkpLl9pbml0KCkpOyhxJiZuJiZjLmlzRnVuY3Rpb24ocVtwXSkmJnFbcF0uYXBwbHkocSxvKSl9KX07Y1tsXT1jW2xdfHx7fTtjW2xdW2tdPWZ1bmN0aW9uKG8sbil7dmFyIG09dGhpczt0aGlzLm5hbWVzcGFjZT1sO3RoaXMud2lkZ2V0TmFtZT1rO3RoaXMud2lkZ2V0RXZlbnRQcmVmaXg9Y1tsXVtrXS5ldmVudFByZWZpeHx8azt0aGlzLndpZGdldEJhc2VDbGFzcz1sKyItIitrO3RoaXMub3B0aW9ucz1jLmV4dGVuZCh7fSxjLndpZGdldC5kZWZhdWx0cyxjW2xdW2tdLmRlZmF1bHRzLGMubWV0YWRhdGEmJmMubWV0YWRhdGEuZ2V0KG8pW2tdLG4pO3RoaXMuZWxlbWVudD1jKG8pLmJpbmQoInNldERhdGEuIitrLGZ1bmN0aW9uKHEscCxyKXtpZihxLnRhcmdldD09byl7cmV0dXJuIG0uX3NldERhdGEocCxyKX19KS5iaW5kKCJnZXREYXRhLiIrayxmdW5jdGlvbihxLHApe2lmKHEudGFyZ2V0PT1vKXtyZXR1cm4gbS5fZ2V0RGF0YShwKX19KS5iaW5kKCJyZW1vdmUiLGZ1bmN0aW9uKCl7cmV0dXJuIG0uZGVzdHJveSgpfSl9O2NbbF1ba10ucHJvdG90eXBlPWMuZXh0ZW5kKHt9LGMud2lkZ2V0LnByb3RvdHlwZSxqKTtjW2xdW2tdLmdldHRlclNldHRlcj0ib3B0aW9uIn07Yy53aWRnZXQucHJvdG90eXBlPXtfaW5pdDpmdW5jdGlvbigpe30sZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5yZW1vdmVEYXRhKHRoaXMud2lkZ2V0TmFtZSkucmVtb3ZlQ2xhc3ModGhpcy53aWRnZXRCYXNlQ2xhc3MrIi1kaXNhYmxlZCAiK3RoaXMubmFtZXNwYWNlKyItc3RhdGUtZGlzYWJsZWQiKS5yZW1vdmVBdHRyKCJhcmlhLWRpc2FibGVkIil9LG9wdGlvbjpmdW5jdGlvbihsLG0pe3ZhciBrPWwsaj10aGlzO2lmKHR5cGVvZiBsPT0ic3RyaW5nIil7aWYobT09PXVuZGVmaW5lZCl7cmV0dXJuIHRoaXMuX2dldERhdGEobCl9az17fTtrW2xdPW19Yy5lYWNoKGssZnVuY3Rpb24obixvKXtqLl9zZXREYXRhKG4sbyl9KX0sX2dldERhdGE6ZnVuY3Rpb24oail7cmV0dXJuIHRoaXMub3B0aW9uc1tqXX0sX3NldERhdGE6ZnVuY3Rpb24oaixrKXt0aGlzLm9wdGlvbnNbal09aztpZihqPT0iZGlzYWJsZWQiKXt0aGlzLmVsZW1lbnRbaz8iYWRkQ2xhc3MiOiJyZW1vdmVDbGFzcyJdKHRoaXMud2lkZ2V0QmFzZUNsYXNzKyItZGlzYWJsZWQgIit0aGlzLm5hbWVzcGFjZSsiLXN0YXRlLWRpc2FibGVkIikuYXR0cigiYXJpYS1kaXNhYmxlZCIsayl9fSxlbmFibGU6ZnVuY3Rpb24oKXt0aGlzLl9zZXREYXRhKCJkaXNhYmxlZCIsZmFsc2UpfSxkaXNhYmxlOmZ1bmN0aW9uKCl7dGhpcy5fc2V0RGF0YSgiZGlzYWJsZWQiLHRydWUpfSxfdHJpZ2dlcjpmdW5jdGlvbihsLG0sbil7dmFyIHA9dGhpcy5vcHRpb25zW2xdLGo9KGw9PXRoaXMud2lkZ2V0RXZlbnRQcmVmaXg/bDp0aGlzLndpZGdldEV2ZW50UHJlZml4K2wpO209Yy5FdmVudChtKTttLnR5cGU9ajtpZihtLm9yaWdpbmFsRXZlbnQpe2Zvcih2YXIgaz1jLmV2ZW50LnByb3BzLmxlbmd0aCxvO2s7KXtvPWMuZXZlbnQucHJvcHNbLS1rXTttW29dPW0ub3JpZ2luYWxFdmVudFtvXX19dGhpcy5lbGVtZW50LnRyaWdnZXIobSxuKTtyZXR1cm4gIShjLmlzRnVuY3Rpb24ocCkmJnAuY2FsbCh0aGlzLmVsZW1lbnRbMF0sbSxuKT09PWZhbHNlfHxtLmlzRGVmYXVsdFByZXZlbnRlZCgpKX19O2Mud2lkZ2V0LmRlZmF1bHRzPXtkaXNhYmxlZDpmYWxzZX07Yy51aS5tb3VzZT17X21vdXNlSW5pdDpmdW5jdGlvbigpe3ZhciBqPXRoaXM7dGhpcy5lbGVtZW50LmJpbmQoIm1vdXNlZG93bi4iK3RoaXMud2lkZ2V0TmFtZSxmdW5jdGlvbihrKXtyZXR1cm4gai5fbW91c2VEb3duKGspfSkuYmluZCgiY2xpY2suIit0aGlzLndpZGdldE5hbWUsZnVuY3Rpb24oayl7aWYoai5fcHJldmVudENsaWNrRXZlbnQpe2ouX3ByZXZlbnRDbGlja0V2ZW50PWZhbHNlO2suc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7cmV0dXJuIGZhbHNlfX0pO2lmKGMuYnJvd3Nlci5tc2llKXt0aGlzLl9tb3VzZVVuc2VsZWN0YWJsZT10aGlzLmVsZW1lbnQuYXR0cigidW5zZWxlY3RhYmxlIik7dGhpcy5lbGVtZW50LmF0dHIoInVuc2VsZWN0YWJsZSIsIm9uIil9dGhpcy5zdGFydGVkPWZhbHNlfSxfbW91c2VEZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnVuYmluZCgiLiIrdGhpcy53aWRnZXROYW1lKTsoYy5icm93c2VyLm1zaWUmJnRoaXMuZWxlbWVudC5hdHRyKCJ1bnNlbGVjdGFibGUiLHRoaXMuX21vdXNlVW5zZWxlY3RhYmxlKSl9LF9tb3VzZURvd246ZnVuY3Rpb24obCl7bC5vcmlnaW5hbEV2ZW50PWwub3JpZ2luYWxFdmVudHx8e307aWYobC5vcmlnaW5hbEV2ZW50Lm1vdXNlSGFuZGxlZCl7cmV0dXJufSh0aGlzLl9tb3VzZVN0YXJ0ZWQmJnRoaXMuX21vdXNlVXAobCkpO3RoaXMuX21vdXNlRG93bkV2ZW50PWw7dmFyIGs9dGhpcyxtPShsLndoaWNoPT0xKSxqPSh0eXBlb2YgdGhpcy5vcHRpb25zLmNhbmNlbD09InN0cmluZyI/YyhsLnRhcmdldCkucGFyZW50cygpLmFkZChsLnRhcmdldCkuZmlsdGVyKHRoaXMub3B0aW9ucy5jYW5jZWwpLmxlbmd0aDpmYWxzZSk7aWYoIW18fGp8fCF0aGlzLl9tb3VzZUNhcHR1cmUobCkpe3JldHVybiB0cnVlfXRoaXMubW91c2VEZWxheU1ldD0hdGhpcy5vcHRpb25zLmRlbGF5O2lmKCF0aGlzLm1vdXNlRGVsYXlNZXQpe3RoaXMuX21vdXNlRGVsYXlUaW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ay5tb3VzZURlbGF5TWV0PXRydWV9LHRoaXMub3B0aW9ucy5kZWxheSl9aWYodGhpcy5fbW91c2VEaXN0YW5jZU1ldChsKSYmdGhpcy5fbW91c2VEZWxheU1ldChsKSl7dGhpcy5fbW91c2VTdGFydGVkPSh0aGlzLl9tb3VzZVN0YXJ0KGwpIT09ZmFsc2UpO2lmKCF0aGlzLl9tb3VzZVN0YXJ0ZWQpe2wucHJldmVudERlZmF1bHQoKTtyZXR1cm4gdHJ1ZX19dGhpcy5fbW91c2VNb3ZlRGVsZWdhdGU9ZnVuY3Rpb24obil7cmV0dXJuIGsuX21vdXNlTW92ZShuKX07dGhpcy5fbW91c2VVcERlbGVnYXRlPWZ1bmN0aW9uKG4pe3JldHVybiBrLl9tb3VzZVVwKG4pfTtjKGRvY3VtZW50KS5iaW5kKCJtb3VzZW1vdmUuIit0aGlzLndpZGdldE5hbWUsdGhpcy5fbW91c2VNb3ZlRGVsZWdhdGUpLmJpbmQoIm1vdXNldXAuIit0aGlzLndpZGdldE5hbWUsdGhpcy5fbW91c2VVcERlbGVnYXRlKTsoYy5icm93c2VyLnNhZmFyaXx8bC5wcmV2ZW50RGVmYXVsdCgpKTtsLm9yaWdpbmFsRXZlbnQubW91c2VIYW5kbGVkPXRydWU7cmV0dXJuIHRydWV9LF9tb3VzZU1vdmU6ZnVuY3Rpb24oail7aWYoYy5icm93c2VyLm1zaWUmJiFqLmJ1dHRvbil7cmV0dXJuIHRoaXMuX21vdXNlVXAoail9aWYodGhpcy5fbW91c2VTdGFydGVkKXt0aGlzLl9tb3VzZURyYWcoaik7cmV0dXJuIGoucHJldmVudERlZmF1bHQoKX1pZih0aGlzLl9tb3VzZURpc3RhbmNlTWV0KGopJiZ0aGlzLl9tb3VzZURlbGF5TWV0KGopKXt0aGlzLl9tb3VzZVN0YXJ0ZWQ9KHRoaXMuX21vdXNlU3RhcnQodGhpcy5fbW91c2VEb3duRXZlbnQsaikhPT1mYWxzZSk7KHRoaXMuX21vdXNlU3RhcnRlZD90aGlzLl9tb3VzZURyYWcoaik6dGhpcy5fbW91c2VVcChqKSl9cmV0dXJuICF0aGlzLl9tb3VzZVN0YXJ0ZWR9LF9tb3VzZVVwOmZ1bmN0aW9uKGope2MoZG9jdW1lbnQpLnVuYmluZCgibW91c2Vtb3ZlLiIrdGhpcy53aWRnZXROYW1lLHRoaXMuX21vdXNlTW92ZURlbGVnYXRlKS51bmJpbmQoIm1vdXNldXAuIit0aGlzLndpZGdldE5hbWUsdGhpcy5fbW91c2VVcERlbGVnYXRlKTtpZih0aGlzLl9tb3VzZVN0YXJ0ZWQpe3RoaXMuX21vdXNlU3RhcnRlZD1mYWxzZTt0aGlzLl9wcmV2ZW50Q2xpY2tFdmVudD0oai50YXJnZXQ9PXRoaXMuX21vdXNlRG93bkV2ZW50LnRhcmdldCk7dGhpcy5fbW91c2VTdG9wKGopfXJldHVybiBmYWxzZX0sX21vdXNlRGlzdGFuY2VNZXQ6ZnVuY3Rpb24oail7cmV0dXJuKE1hdGgubWF4KE1hdGguYWJzKHRoaXMuX21vdXNlRG93bkV2ZW50LnBhZ2VYLWoucGFnZVgpLE1hdGguYWJzKHRoaXMuX21vdXNlRG93bkV2ZW50LnBhZ2VZLWoucGFnZVkpKT49dGhpcy5vcHRpb25zLmRpc3RhbmNlKX0sX21vdXNlRGVsYXlNZXQ6ZnVuY3Rpb24oail7cmV0dXJuIHRoaXMubW91c2VEZWxheU1ldH0sX21vdXNlU3RhcnQ6ZnVuY3Rpb24oail7fSxfbW91c2VEcmFnOmZ1bmN0aW9uKGope30sX21vdXNlU3RvcDpmdW5jdGlvbihqKXt9LF9tb3VzZUNhcHR1cmU6ZnVuY3Rpb24oail7cmV0dXJuIHRydWV9fTtjLnVpLm1vdXNlLmRlZmF1bHRzPXtjYW5jZWw6bnVsbCxkaXN0YW5jZToxLGRlbGF5OjB9fSkoalF1ZXJ5KTs7LyogKiBqUXVlcnkgVUkgUmVzaXphYmxlIDEuNy4yCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA5IEFVVEhPUlMudHh0IChodHRwOi8vanF1ZXJ5dWkuY29tL2Fib3V0KQotICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIChNSVQtTElDRU5TRS50eHQpCi0gKiBhbmQgR1BMIChHUEwtTElDRU5TRS50eHQpIGxpY2Vuc2VzLgotICoKLSAqIGh0dHA6Ly9kb2NzLmpxdWVyeS5jb20vVUkvUmVzaXphYmxlcwotICoKLSAqIERlcGVuZHM6Ci0gKgl1aS5jb3JlLmpzCi0gKi8KLShmdW5jdGlvbihjKXtjLndpZGdldCgidWkucmVzaXphYmxlIixjLmV4dGVuZCh7fSxjLnVpLm1vdXNlLHtfaW5pdDpmdW5jdGlvbigpe3ZhciBlPXRoaXMsaj10aGlzLm9wdGlvbnM7dGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1yZXNpemFibGUiKTtjLmV4dGVuZCh0aGlzLHtfYXNwZWN0UmF0aW86ISEoai5hc3BlY3RSYXRpbyksYXNwZWN0UmF0aW86ai5hc3BlY3RSYXRpbyxvcmlnaW5hbEVsZW1lbnQ6dGhpcy5lbGVtZW50LF9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzOltdLF9oZWxwZXI6ai5oZWxwZXJ8fGouZ2hvc3R8fGouYW5pbWF0ZT9qLmhlbHBlcnx8InVpLXJlc2l6YWJsZS1oZWxwZXIiOm51bGx9KTtpZih0aGlzLmVsZW1lbnRbMF0ubm9kZU5hbWUubWF0Y2goL2NhbnZhc3x0ZXh0YXJlYXxpbnB1dHxzZWxlY3R8YnV0dG9ufGltZy9pKSl7aWYoL3JlbGF0aXZlLy50ZXN0KHRoaXMuZWxlbWVudC5jc3MoInBvc2l0aW9uIikpJiZjLmJyb3dzZXIub3BlcmEpe3RoaXMuZWxlbWVudC5jc3Moe3Bvc2l0aW9uOiJyZWxhdGl2ZSIsdG9wOiJhdXRvIixsZWZ0OiJhdXRvIn0pfXRoaXMuZWxlbWVudC53cmFwKGMoJzxkaXYgY2xhc3M9InVpLXdyYXBwZXIiIHN0eWxlPSJvdmVyZmxvdzogaGlkZGVuOyI+PC9kaXY+JykuY3NzKHtwb3NpdGlvbjp0aGlzLmVsZW1lbnQuY3NzKCJwb3NpdGlvbiIpLHdpZHRoOnRoaXMuZWxlbWVudC5vdXRlcldpZHRoKCksaGVpZ2h0OnRoaXMuZWxlbWVudC5vdXRlckhlaWdodCgpLHRvcDp0aGlzLmVsZW1lbnQuY3NzKCJ0b3AiKSxsZWZ0OnRoaXMuZWxlbWVudC5jc3MoImxlZnQiKX0pKTt0aGlzLmVsZW1lbnQ9dGhpcy5lbGVtZW50LnBhcmVudCgpLmRhdGEoInJlc2l6YWJsZSIsdGhpcy5lbGVtZW50LmRhdGEoInJlc2l6YWJsZSIpKTt0aGlzLmVsZW1lbnRJc1dyYXBwZXI9dHJ1ZTt0aGlzLmVsZW1lbnQuY3NzKHttYXJnaW5MZWZ0OnRoaXMub3JpZ2luYWxFbGVtZW50LmNzcygibWFyZ2luTGVmdCIpLG1hcmdpblRvcDp0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoIm1hcmdpblRvcCIpLG1hcmdpblJpZ2h0OnRoaXMub3JpZ2luYWxFbGVtZW50LmNzcygibWFyZ2luUmlnaHQiKSxtYXJnaW5Cb3R0b206dGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKCJtYXJnaW5Cb3R0b20iKX0pO3RoaXMub3JpZ2luYWxFbGVtZW50LmNzcyh7bWFyZ2luTGVmdDowLG1hcmdpblRvcDowLG1hcmdpblJpZ2h0OjAsbWFyZ2luQm90dG9tOjB9KTt0aGlzLm9yaWdpbmFsUmVzaXplU3R5bGU9dGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKCJyZXNpemUiKTt0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoInJlc2l6ZSIsIm5vbmUiKTt0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzLnB1c2godGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKHtwb3NpdGlvbjoic3RhdGljIix6b29tOjEsZGlzcGxheToiYmxvY2sifSkpO3RoaXMub3JpZ2luYWxFbGVtZW50LmNzcyh7bWFyZ2luOnRoaXMub3JpZ2luYWxFbGVtZW50LmNzcygibWFyZ2luIil9KTt0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZSgpfXRoaXMuaGFuZGxlcz1qLmhhbmRsZXN8fCghYygiLnVpLXJlc2l6YWJsZS1oYW5kbGUiLHRoaXMuZWxlbWVudCkubGVuZ3RoPyJlLHMsc2UiOntuOiIudWktcmVzaXphYmxlLW4iLGU6Ii51aS1yZXNpemFibGUtZSIsczoiLnVpLXJlc2l6YWJsZS1zIix3OiIudWktcmVzaXphYmxlLXciLHNlOiIudWktcmVzaXphYmxlLXNlIixzdzoiLnVpLXJlc2l6YWJsZS1zdyIsbmU6Ii51aS1yZXNpemFibGUtbmUiLG53OiIudWktcmVzaXphYmxlLW53In0pO2lmKHRoaXMuaGFuZGxlcy5jb25zdHJ1Y3Rvcj09U3RyaW5nKXtpZih0aGlzLmhhbmRsZXM9PSJhbGwiKXt0aGlzLmhhbmRsZXM9Im4sZSxzLHcsc2Usc3csbmUsbncifXZhciBrPXRoaXMuaGFuZGxlcy5zcGxpdCgiLCIpO3RoaXMuaGFuZGxlcz17fTtmb3IodmFyIGY9MDtmPGsubGVuZ3RoO2YrKyl7dmFyIGg9Yy50cmltKGtbZl0pLGQ9InVpLXJlc2l6YWJsZS0iK2g7dmFyIGc9YygnPGRpdiBjbGFzcz0idWktcmVzaXphYmxlLWhhbmRsZSAnK2QrJyI+PC9kaXY+Jyk7aWYoL3N3fHNlfG5lfG53Ly50ZXN0KGgpKXtnLmNzcyh7ekluZGV4Oisrai56SW5kZXh9KX1pZigic2UiPT1oKXtnLmFkZENsYXNzKCJ1aS1pY29uIHVpLWljb24tZ3JpcHNtYWxsLWRpYWdvbmFsLXNlIil9dGhpcy5oYW5kbGVzW2hdPSIudWktcmVzaXphYmxlLSIraDt0aGlzLmVsZW1lbnQuYXBwZW5kKGcpfX10aGlzLl9yZW5kZXJBeGlzPWZ1bmN0aW9uKHApe3A9cHx8dGhpcy5lbGVtZW50O2Zvcih2YXIgbSBpbiB0aGlzLmhhbmRsZXMpe2lmKHRoaXMuaGFuZGxlc1ttXS5jb25zdHJ1Y3Rvcj09U3RyaW5nKXt0aGlzLmhhbmRsZXNbbV09Yyh0aGlzLmhhbmRsZXNbbV0sdGhpcy5lbGVtZW50KS5zaG93KCl9aWYodGhpcy5lbGVtZW50SXNXcmFwcGVyJiZ0aGlzLm9yaWdpbmFsRWxlbWVudFswXS5ub2RlTmFtZS5tYXRjaCgvdGV4dGFyZWF8aW5wdXR8c2VsZWN0fGJ1dHRvbi9pKSl7dmFyIG49Yyh0aGlzLmhhbmRsZXNbbV0sdGhpcy5lbGVtZW50KSxvPTA7bz0vc3d8bmV8bnd8c2V8bnxzLy50ZXN0KG0pP24ub3V0ZXJIZWlnaHQoKTpuLm91dGVyV2lkdGgoKTt2YXIgbD1bInBhZGRpbmciLC9uZXxud3xuLy50ZXN0KG0pPyJUb3AiOi9zZXxzd3xzLy50ZXN0KG0pPyJCb3R0b20iOi9eZSQvLnRlc3QobSk/IlJpZ2h0IjoiTGVmdCJdLmpvaW4oIiIpO3AuY3NzKGwsbyk7dGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemUoKX1pZighYyh0aGlzLmhhbmRsZXNbbV0pLmxlbmd0aCl7Y29udGludWV9fX07dGhpcy5fcmVuZGVyQXhpcyh0aGlzLmVsZW1lbnQpO3RoaXMuX2hhbmRsZXM9YygiLnVpLXJlc2l6YWJsZS1oYW5kbGUiLHRoaXMuZWxlbWVudCkuZGlzYWJsZVNlbGVjdGlvbigpO3RoaXMuX2hhbmRsZXMubW91c2VvdmVyKGZ1bmN0aW9uKCl7aWYoIWUucmVzaXppbmcpe2lmKHRoaXMuY2xhc3NOYW1lKXt2YXIgaT10aGlzLmNsYXNzTmFtZS5tYXRjaCgvdWktcmVzaXphYmxlLShzZXxzd3xuZXxud3xufGV8c3x3KS9pKX1lLmF4aXM9aSYmaVsxXT9pWzFdOiJzZSJ9fSk7aWYoai5hdXRvSGlkZSl7dGhpcy5faGFuZGxlcy5oaWRlKCk7Yyh0aGlzLmVsZW1lbnQpLmFkZENsYXNzKCJ1aS1yZXNpemFibGUtYXV0b2hpZGUiKS5ob3ZlcihmdW5jdGlvbigpe2ModGhpcykucmVtb3ZlQ2xhc3MoInVpLXJlc2l6YWJsZS1hdXRvaGlkZSIpO2UuX2hhbmRsZXMuc2hvdygpfSxmdW5jdGlvbigpe2lmKCFlLnJlc2l6aW5nKXtjKHRoaXMpLmFkZENsYXNzKCJ1aS1yZXNpemFibGUtYXV0b2hpZGUiKTtlLl9oYW5kbGVzLmhpZGUoKX19KX10aGlzLl9tb3VzZUluaXQoKX0sZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuX21vdXNlRGVzdHJveSgpO3ZhciBkPWZ1bmN0aW9uKGYpe2MoZikucmVtb3ZlQ2xhc3MoInVpLXJlc2l6YWJsZSB1aS1yZXNpemFibGUtZGlzYWJsZWQgdWktcmVzaXphYmxlLXJlc2l6aW5nIikucmVtb3ZlRGF0YSgicmVzaXphYmxlIikudW5iaW5kKCIucmVzaXphYmxlIikuZmluZCgiLnVpLXJlc2l6YWJsZS1oYW5kbGUiKS5yZW1vdmUoKX07aWYodGhpcy5lbGVtZW50SXNXcmFwcGVyKXtkKHRoaXMuZWxlbWVudCk7dmFyIGU9dGhpcy5lbGVtZW50O2UucGFyZW50KCkuYXBwZW5kKHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcyh7cG9zaXRpb246ZS5jc3MoInBvc2l0aW9uIiksd2lkdGg6ZS5vdXRlcldpZHRoKCksaGVpZ2h0OmUub3V0ZXJIZWlnaHQoKSx0b3A6ZS5jc3MoInRvcCIpLGxlZnQ6ZS5jc3MoImxlZnQiKX0pKS5lbmQoKS5yZW1vdmUoKX10aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoInJlc2l6ZSIsdGhpcy5vcmlnaW5hbFJlc2l6ZVN0eWxlKTtkKHRoaXMub3JpZ2luYWxFbGVtZW50KX0sX21vdXNlQ2FwdHVyZTpmdW5jdGlvbihlKXt2YXIgZj1mYWxzZTtmb3IodmFyIGQgaW4gdGhpcy5oYW5kbGVzKXtpZihjKHRoaXMuaGFuZGxlc1tkXSlbMF09PWUudGFyZ2V0KXtmPXRydWV9fXJldHVybiB0aGlzLm9wdGlvbnMuZGlzYWJsZWR8fCEhZn0sX21vdXNlU3RhcnQ6ZnVuY3Rpb24oZil7dmFyIGk9dGhpcy5vcHRpb25zLGU9dGhpcy5lbGVtZW50LnBvc2l0aW9uKCksZD10aGlzLmVsZW1lbnQ7dGhpcy5yZXNpemluZz10cnVlO3RoaXMuZG9jdW1lbnRTY3JvbGw9e3RvcDpjKGRvY3VtZW50KS5zY3JvbGxUb3AoKSxsZWZ0OmMoZG9jdW1lbnQpLnNjcm9sbExlZnQoKX07aWYoZC5pcygiLnVpLWRyYWdnYWJsZSIpfHwoL2Fic29sdXRlLykudGVzdChkLmNzcygicG9zaXRpb24iKSkpe2QuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDplLnRvcCxsZWZ0OmUubGVmdH0pfWlmKGMuYnJvd3Nlci5vcGVyYSYmKC9yZWxhdGl2ZS8pLnRlc3QoZC5jc3MoInBvc2l0aW9uIikpKXtkLmNzcyh7cG9zaXRpb246InJlbGF0aXZlIix0b3A6ImF1dG8iLGxlZnQ6ImF1dG8ifSl9dGhpcy5fcmVuZGVyUHJveHkoKTt2YXIgaj1iKHRoaXMuaGVscGVyLmNzcygibGVmdCIpKSxnPWIodGhpcy5oZWxwZXIuY3NzKCJ0b3AiKSk7aWYoaS5jb250YWlubWVudCl7ais9YyhpLmNvbnRhaW5tZW50KS5zY3JvbGxMZWZ0KCl8fDA7Zys9YyhpLmNvbnRhaW5tZW50KS5zY3JvbGxUb3AoKXx8MH10aGlzLm9mZnNldD10aGlzLmhlbHBlci5vZmZzZXQoKTt0aGlzLnBvc2l0aW9uPXtsZWZ0OmosdG9wOmd9O3RoaXMuc2l6ZT10aGlzLl9oZWxwZXI/e3dpZHRoOmQub3V0ZXJXaWR0aCgpLGhlaWdodDpkLm91dGVySGVpZ2h0KCl9Ont3aWR0aDpkLndpZHRoKCksaGVpZ2h0OmQuaGVpZ2h0KCl9O3RoaXMub3JpZ2luYWxTaXplPXRoaXMuX2hlbHBlcj97d2lkdGg6ZC5vdXRlcldpZHRoKCksaGVpZ2h0OmQub3V0ZXJIZWlnaHQoKX06e3dpZHRoOmQud2lkdGgoKSxoZWlnaHQ6ZC5oZWlnaHQoKX07dGhpcy5vcmlnaW5hbFBvc2l0aW9uPXtsZWZ0OmosdG9wOmd9O3RoaXMuc2l6ZURpZmY9e3dpZHRoOmQub3V0ZXJXaWR0aCgpLWQud2lkdGgoKSxoZWlnaHQ6ZC5vdXRlckhlaWdodCgpLWQuaGVpZ2h0KCl9O3RoaXMub3JpZ2luYWxNb3VzZVBvc2l0aW9uPXtsZWZ0OmYucGFnZVgsdG9wOmYucGFnZVl9O3RoaXMuYXNwZWN0UmF0aW89KHR5cGVvZiBpLmFzcGVjdFJhdGlvPT0ibnVtYmVyIik/aS5hc3BlY3RSYXRpbzooKHRoaXMub3JpZ2luYWxTaXplLndpZHRoL3RoaXMub3JpZ2luYWxTaXplLmhlaWdodCl8fDEpO3ZhciBoPWMoIi51aS1yZXNpemFibGUtIit0aGlzLmF4aXMpLmNzcygiY3Vyc29yIik7YygiYm9keSIpLmNzcygiY3Vyc29yIixoPT0iYXV0byI/dGhpcy5heGlzKyItcmVzaXplIjpoKTtkLmFkZENsYXNzKCJ1aS1yZXNpemFibGUtcmVzaXppbmciKTt0aGlzLl9wcm9wYWdhdGUoInN0YXJ0IixmKTtyZXR1cm4gdHJ1ZX0sX21vdXNlRHJhZzpmdW5jdGlvbihkKXt2YXIgZz10aGlzLmhlbHBlcixmPXRoaXMub3B0aW9ucyxsPXt9LHA9dGhpcyxpPXRoaXMub3JpZ2luYWxNb3VzZVBvc2l0aW9uLG09dGhpcy5heGlzO3ZhciBxPShkLnBhZ2VYLWkubGVmdCl8fDAsbj0oZC5wYWdlWS1pLnRvcCl8fDA7dmFyIGg9dGhpcy5fY2hhbmdlW21dO2lmKCFoKXtyZXR1cm4gZmFsc2V9dmFyIGs9aC5hcHBseSh0aGlzLFtkLHEsbl0pLGo9Yy5icm93c2VyLm1zaWUmJmMuYnJvd3Nlci52ZXJzaW9uPDcsZT10aGlzLnNpemVEaWZmO2lmKHRoaXMuX2FzcGVjdFJhdGlvfHxkLnNoaWZ0S2V5KXtrPXRoaXMuX3VwZGF0ZVJhdGlvKGssZCl9az10aGlzLl9yZXNwZWN0U2l6ZShrLGQpO3RoaXMuX3Byb3BhZ2F0ZSgicmVzaXplIixkKTtnLmNzcyh7dG9wOnRoaXMucG9zaXRpb24udG9wKyJweCIsbGVmdDp0aGlzLnBvc2l0aW9uLmxlZnQrInB4Iix3aWR0aDp0aGlzLnNpemUud2lkdGgrInB4IixoZWlnaHQ6dGhpcy5zaXplLmhlaWdodCsicHgifSk7aWYoIXRoaXMuX2hlbHBlciYmdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cy5sZW5ndGgpe3RoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplKCl9dGhpcy5fdXBkYXRlQ2FjaGUoayk7dGhpcy5fdHJpZ2dlcigicmVzaXplIixkLHRoaXMudWkoKSk7cmV0dXJuIGZhbHNlfSxfbW91c2VTdG9wOmZ1bmN0aW9uKGcpe3RoaXMucmVzaXppbmc9ZmFsc2U7dmFyIGg9dGhpcy5vcHRpb25zLGw9dGhpcztpZih0aGlzLl9oZWxwZXIpe3ZhciBmPXRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHMsZD1mLmxlbmd0aCYmKC90ZXh0YXJlYS9pKS50ZXN0KGZbMF0ubm9kZU5hbWUpLGU9ZCYmYy51aS5oYXNTY3JvbGwoZlswXSwibGVmdCIpPzA6bC5zaXplRGlmZi5oZWlnaHQsaj1kPzA6bC5zaXplRGlmZi53aWR0aDt2YXIgbT17d2lkdGg6KGwuc2l6ZS53aWR0aC1qKSxoZWlnaHQ6KGwuc2l6ZS5oZWlnaHQtZSl9LGk9KHBhcnNlSW50KGwuZWxlbWVudC5jc3MoImxlZnQiKSwxMCkrKGwucG9zaXRpb24ubGVmdC1sLm9yaWdpbmFsUG9zaXRpb24ubGVmdCkpfHxudWxsLGs9KHBhcnNlSW50KGwuZWxlbWVudC5jc3MoInRvcCIpLDEwKSsobC5wb3NpdGlvbi50b3AtbC5vcmlnaW5hbFBvc2l0aW9uLnRvcCkpfHxudWxsO2lmKCFoLmFuaW1hdGUpe3RoaXMuZWxlbWVudC5jc3MoYy5leHRlbmQobSx7dG9wOmssbGVmdDppfSkpfWwuaGVscGVyLmhlaWdodChsLnNpemUuaGVpZ2h0KTtsLmhlbHBlci53aWR0aChsLnNpemUud2lkdGgpO2lmKHRoaXMuX2hlbHBlciYmIWguYW5pbWF0ZSl7dGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemUoKX19YygiYm9keSIpLmNzcygiY3Vyc29yIiwiYXV0byIpO3RoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktcmVzaXphYmxlLXJlc2l6aW5nIik7dGhpcy5fcHJvcGFnYXRlKCJzdG9wIixnKTtpZih0aGlzLl9oZWxwZXIpe3RoaXMuaGVscGVyLnJlbW92ZSgpfXJldHVybiBmYWxzZX0sX3VwZGF0ZUNhY2hlOmZ1bmN0aW9uKGQpe3ZhciBlPXRoaXMub3B0aW9uczt0aGlzLm9mZnNldD10aGlzLmhlbHBlci5vZmZzZXQoKTtpZihhKGQubGVmdCkpe3RoaXMucG9zaXRpb24ubGVmdD1kLmxlZnR9aWYoYShkLnRvcCkpe3RoaXMucG9zaXRpb24udG9wPWQudG9wfWlmKGEoZC5oZWlnaHQpKXt0aGlzLnNpemUuaGVpZ2h0PWQuaGVpZ2h0fWlmKGEoZC53aWR0aCkpe3RoaXMuc2l6ZS53aWR0aD1kLndpZHRofX0sX3VwZGF0ZVJhdGlvOmZ1bmN0aW9uKGcsZil7dmFyIGg9dGhpcy5vcHRpb25zLGk9dGhpcy5wb3NpdGlvbixlPXRoaXMuc2l6ZSxkPXRoaXMuYXhpcztpZihnLmhlaWdodCl7Zy53aWR0aD0oZS5oZWlnaHQqdGhpcy5hc3BlY3RSYXRpbyl9ZWxzZXtpZihnLndpZHRoKXtnLmhlaWdodD0oZS53aWR0aC90aGlzLmFzcGVjdFJhdGlvKX19aWYoZD09InN3Iil7Zy5sZWZ0PWkubGVmdCsoZS53aWR0aC1nLndpZHRoKTtnLnRvcD1udWxsfWlmKGQ9PSJudyIpe2cudG9wPWkudG9wKyhlLmhlaWdodC1nLmhlaWdodCk7Zy5sZWZ0PWkubGVmdCsoZS53aWR0aC1nLndpZHRoKX1yZXR1cm4gZ30sX3Jlc3BlY3RTaXplOmZ1bmN0aW9uKGssZil7dmFyIGk9dGhpcy5oZWxwZXIsaD10aGlzLm9wdGlvbnMscT10aGlzLl9hc3BlY3RSYXRpb3x8Zi5zaGlmdEtleSxwPXRoaXMuYXhpcyxzPWEoay53aWR0aCkmJmgubWF4V2lkdGgmJihoLm1heFdpZHRoPGsud2lkdGgpLGw9YShrLmhlaWdodCkmJmgubWF4SGVpZ2h0JiYoaC5tYXhIZWlnaHQ8ay5oZWlnaHQpLGc9YShrLndpZHRoKSYmaC5taW5XaWR0aCYmKGgubWluV2lkdGg+ay53aWR0aCkscj1hKGsuaGVpZ2h0KSYmaC5taW5IZWlnaHQmJihoLm1pbkhlaWdodD5rLmhlaWdodCk7aWYoZyl7ay53aWR0aD1oLm1pbldpZHRofWlmKHIpe2suaGVpZ2h0PWgubWluSGVpZ2h0fWlmKHMpe2sud2lkdGg9aC5tYXhXaWR0aH1pZihsKXtrLmhlaWdodD1oLm1heEhlaWdodH12YXIgZT10aGlzLm9yaWdpbmFsUG9zaXRpb24ubGVmdCt0aGlzLm9yaWdpbmFsU2l6ZS53aWR0aCxuPXRoaXMucG9zaXRpb24udG9wK3RoaXMuc2l6ZS5oZWlnaHQ7dmFyIGo9L3N3fG53fHcvLnRlc3QocCksZD0vbnd8bmV8bi8udGVzdChwKTtpZihnJiZqKXtrLmxlZnQ9ZS1oLm1pbldpZHRofWlmKHMmJmope2subGVmdD1lLWgubWF4V2lkdGh9aWYociYmZCl7ay50b3A9bi1oLm1pbkhlaWdodH1pZihsJiZkKXtrLnRvcD1uLWgubWF4SGVpZ2h0fXZhciBtPSFrLndpZHRoJiYhay5oZWlnaHQ7aWYobSYmIWsubGVmdCYmay50b3Ape2sudG9wPW51bGx9ZWxzZXtpZihtJiYhay50b3AmJmsubGVmdCl7ay5sZWZ0PW51bGx9fXJldHVybiBrfSxfcHJvcG9ydGlvbmFsbHlSZXNpemU6ZnVuY3Rpb24oKXt2YXIgaj10aGlzLm9wdGlvbnM7aWYoIXRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHMubGVuZ3RoKXtyZXR1cm59dmFyIGY9dGhpcy5oZWxwZXJ8fHRoaXMuZWxlbWVudDtmb3IodmFyIGU9MDtlPHRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHMubGVuZ3RoO2UrKyl7dmFyIGc9dGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50c1tlXTtpZighdGhpcy5ib3JkZXJEaWYpe3ZhciBkPVtnLmNzcygiYm9yZGVyVG9wV2lkdGgiKSxnLmNzcygiYm9yZGVyUmlnaHRXaWR0aCIpLGcuY3NzKCJib3JkZXJCb3R0b21XaWR0aCIpLGcuY3NzKCJib3JkZXJMZWZ0V2lkdGgiKV0saD1bZy5jc3MoInBhZGRpbmdUb3AiKSxnLmNzcygicGFkZGluZ1JpZ2h0IiksZy5jc3MoInBhZGRpbmdCb3R0b20iKSxnLmNzcygicGFkZGluZ0xlZnQiKV07dGhpcy5ib3JkZXJEaWY9Yy5tYXAoZCxmdW5jdGlvbihrLG0pe3ZhciBsPXBhcnNlSW50KGssMTApfHwwLG49cGFyc2VJbnQoaFttXSwxMCl8fDA7cmV0dXJuIGwrbn0pfWlmKGMuYnJvd3Nlci5tc2llJiYhKCEoYyhmKS5pcygiOmhpZGRlbiIpfHxjKGYpLnBhcmVudHMoIjpoaWRkZW4iKS5sZW5ndGgpKSl7Y29udGludWV9Zy5jc3Moe2hlaWdodDooZi5oZWlnaHQoKS10aGlzLmJvcmRlckRpZlswXS10aGlzLmJvcmRlckRpZlsyXSl8fDAsd2lkdGg6KGYud2lkdGgoKS10aGlzLmJvcmRlckRpZlsxXS10aGlzLmJvcmRlckRpZlszXSl8fDB9KX19LF9yZW5kZXJQcm94eTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZWxlbWVudCxoPXRoaXMub3B0aW9uczt0aGlzLmVsZW1lbnRPZmZzZXQ9ZS5vZmZzZXQoKTtpZih0aGlzLl9oZWxwZXIpe3RoaXMuaGVscGVyPXRoaXMuaGVscGVyfHxjKCc8ZGl2IHN0eWxlPSJvdmVyZmxvdzpoaWRkZW47Ij48L2Rpdj4nKTt2YXIgZD1jLmJyb3dzZXIubXNpZSYmYy5icm93c2VyLnZlcnNpb248NyxmPShkPzE6MCksZz0oZD8yOi0xKTt0aGlzLmhlbHBlci5hZGRDbGFzcyh0aGlzLl9oZWxwZXIpLmNzcyh7d2lkdGg6dGhpcy5lbGVtZW50Lm91dGVyV2lkdGgoKStnLGhlaWdodDp0aGlzLmVsZW1lbnQub3V0ZXJIZWlnaHQoKStnLHBvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDp0aGlzLmVsZW1lbnRPZmZzZXQubGVmdC1mKyJweCIsdG9wOnRoaXMuZWxlbWVudE9mZnNldC50b3AtZisicHgiLHpJbmRleDorK2guekluZGV4fSk7dGhpcy5oZWxwZXIuYXBwZW5kVG8oImJvZHkiKS5kaXNhYmxlU2VsZWN0aW9uKCl9ZWxzZXt0aGlzLmhlbHBlcj10aGlzLmVsZW1lbnR9fSxfY2hhbmdlOntlOmZ1bmN0aW9uKGYsZSxkKXtyZXR1cm57d2lkdGg6dGhpcy5vcmlnaW5hbFNpemUud2lkdGgrZX19LHc6ZnVuY3Rpb24oZyxlLGQpe3ZhciBpPXRoaXMub3B0aW9ucyxmPXRoaXMub3JpZ2luYWxTaXplLGg9dGhpcy5vcmlnaW5hbFBvc2l0aW9uO3JldHVybntsZWZ0OmgubGVmdCtlLHdpZHRoOmYud2lkdGgtZX19LG46ZnVuY3Rpb24oZyxlLGQpe3ZhciBpPXRoaXMub3B0aW9ucyxmPXRoaXMub3JpZ2luYWxTaXplLGg9dGhpcy5vcmlnaW5hbFBvc2l0aW9uO3JldHVybnt0b3A6aC50b3ArZCxoZWlnaHQ6Zi5oZWlnaHQtZH19LHM6ZnVuY3Rpb24oZixlLGQpe3JldHVybntoZWlnaHQ6dGhpcy5vcmlnaW5hbFNpemUuaGVpZ2h0K2R9fSxzZTpmdW5jdGlvbihmLGUsZCl7cmV0dXJuIGMuZXh0ZW5kKHRoaXMuX2NoYW5nZS5zLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLl9jaGFuZ2UuZS5hcHBseSh0aGlzLFtmLGUsZF0pKX0sc3c6ZnVuY3Rpb24oZixlLGQpe3JldHVybiBjLmV4dGVuZCh0aGlzLl9jaGFuZ2Uucy5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fY2hhbmdlLncuYXBwbHkodGhpcyxbZixlLGRdKSl9LG5lOmZ1bmN0aW9uKGYsZSxkKXtyZXR1cm4gYy5leHRlbmQodGhpcy5fY2hhbmdlLm4uYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX2NoYW5nZS5lLmFwcGx5KHRoaXMsW2YsZSxkXSkpfSxudzpmdW5jdGlvbihmLGUsZCl7cmV0dXJuIGMuZXh0ZW5kKHRoaXMuX2NoYW5nZS5uLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLl9jaGFuZ2Uudy5hcHBseSh0aGlzLFtmLGUsZF0pKX19LF9wcm9wYWdhdGU6ZnVuY3Rpb24oZSxkKXtjLnVpLnBsdWdpbi5jYWxsKHRoaXMsZSxbZCx0aGlzLnVpKCldKTsoZSE9InJlc2l6ZSImJnRoaXMuX3RyaWdnZXIoZSxkLHRoaXMudWkoKSkpfSxwbHVnaW5zOnt9LHVpOmZ1bmN0aW9uKCl7cmV0dXJue29yaWdpbmFsRWxlbWVudDp0aGlzLm9yaWdpbmFsRWxlbWVudCxlbGVtZW50OnRoaXMuZWxlbWVudCxoZWxwZXI6dGhpcy5oZWxwZXIscG9zaXRpb246dGhpcy5wb3NpdGlvbixzaXplOnRoaXMuc2l6ZSxvcmlnaW5hbFNpemU6dGhpcy5vcmlnaW5hbFNpemUsb3JpZ2luYWxQb3NpdGlvbjp0aGlzLm9yaWdpbmFsUG9zaXRpb259fX0pKTtjLmV4dGVuZChjLnVpLnJlc2l6YWJsZSx7dmVyc2lvbjoiMS43LjIiLGV2ZW50UHJlZml4OiJyZXNpemUiLGRlZmF1bHRzOnthbHNvUmVzaXplOmZhbHNlLGFuaW1hdGU6ZmFsc2UsYW5pbWF0ZUR1cmF0aW9uOiJzbG93IixhbmltYXRlRWFzaW5nOiJzd2luZyIsYXNwZWN0UmF0aW86ZmFsc2UsYXV0b0hpZGU6ZmFsc2UsY2FuY2VsOiI6aW5wdXQsb3B0aW9uIixjb250YWlubWVudDpmYWxzZSxkZWxheTowLGRpc3RhbmNlOjEsZ2hvc3Q6ZmFsc2UsZ3JpZDpmYWxzZSxoYW5kbGVzOiJlLHMsc2UiLGhlbHBlcjpmYWxzZSxtYXhIZWlnaHQ6bnVsbCxtYXhXaWR0aDpudWxsLG1pbkhlaWdodDoxMCxtaW5XaWR0aDoxMCx6SW5kZXg6MTAwMH19KTtjLnVpLnBsdWdpbi5hZGQoInJlc2l6YWJsZSIsImFsc29SZXNpemUiLHtzdGFydDpmdW5jdGlvbihlLGYpe3ZhciBkPWModGhpcykuZGF0YSgicmVzaXphYmxlIiksZz1kLm9wdGlvbnM7X3N0b3JlPWZ1bmN0aW9uKGgpe2MoaCkuZWFjaChmdW5jdGlvbigpe2ModGhpcykuZGF0YSgicmVzaXphYmxlLWFsc29yZXNpemUiLHt3aWR0aDpwYXJzZUludChjKHRoaXMpLndpZHRoKCksMTApLGhlaWdodDpwYXJzZUludChjKHRoaXMpLmhlaWdodCgpLDEwKSxsZWZ0OnBhcnNlSW50KGModGhpcykuY3NzKCJsZWZ0IiksMTApLHRvcDpwYXJzZUludChjKHRoaXMpLmNzcygidG9wIiksMTApfSl9KX07aWYodHlwZW9mKGcuYWxzb1Jlc2l6ZSk9PSJvYmplY3QiJiYhZy5hbHNvUmVzaXplLnBhcmVudE5vZGUpe2lmKGcuYWxzb1Jlc2l6ZS5sZW5ndGgpe2cuYWxzb1Jlc2l6ZT1nLmFsc29SZXNpemVbMF07X3N0b3JlKGcuYWxzb1Jlc2l6ZSl9ZWxzZXtjLmVhY2goZy5hbHNvUmVzaXplLGZ1bmN0aW9uKGgsaSl7X3N0b3JlKGgpfSl9fWVsc2V7X3N0b3JlKGcuYWxzb1Jlc2l6ZSl9fSxyZXNpemU6ZnVuY3Rpb24oZixoKXt2YXIgZT1jKHRoaXMpLmRhdGEoInJlc2l6YWJsZSIpLGk9ZS5vcHRpb25zLGc9ZS5vcmlnaW5hbFNpemUsaz1lLm9yaWdpbmFsUG9zaXRpb247dmFyIGo9e2hlaWdodDooZS5zaXplLmhlaWdodC1nLmhlaWdodCl8fDAsd2lkdGg6KGUuc2l6ZS53aWR0aC1nLndpZHRoKXx8MCx0b3A6KGUucG9zaXRpb24udG9wLWsudG9wKXx8MCxsZWZ0OihlLnBvc2l0aW9uLmxlZnQtay5sZWZ0KXx8MH0sZD1mdW5jdGlvbihsLG0pe2MobCkuZWFjaChmdW5jdGlvbigpe3ZhciBwPWModGhpcykscT1jKHRoaXMpLmRhdGEoInJlc2l6YWJsZS1hbHNvcmVzaXplIiksbz17fSxuPW0mJm0ubGVuZ3RoP206WyJ3aWR0aCIsImhlaWdodCIsInRvcCIsImxlZnQiXTtjLmVhY2gobnx8WyJ3aWR0aCIsImhlaWdodCIsInRvcCIsImxlZnQiXSxmdW5jdGlvbihyLHQpe3ZhciBzPShxW3RdfHwwKSsoalt0XXx8MCk7aWYocyYmcz49MCl7b1t0XT1zfHxudWxsfX0pO2lmKC9yZWxhdGl2ZS8udGVzdChwLmNzcygicG9zaXRpb24iKSkmJmMuYnJvd3Nlci5vcGVyYSl7ZS5fcmV2ZXJ0VG9SZWxhdGl2ZVBvc2l0aW9uPXRydWU7cC5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOiJhdXRvIixsZWZ0OiJhdXRvIn0pfXAuY3NzKG8pfSl9O2lmKHR5cGVvZihpLmFsc29SZXNpemUpPT0ib2JqZWN0IiYmIWkuYWxzb1Jlc2l6ZS5ub2RlVHlwZSl7Yy5lYWNoKGkuYWxzb1Jlc2l6ZSxmdW5jdGlvbihsLG0pe2QobCxtKX0pfWVsc2V7ZChpLmFsc29SZXNpemUpfX0sc3RvcDpmdW5jdGlvbihlLGYpe3ZhciBkPWModGhpcykuZGF0YSgicmVzaXphYmxlIik7aWYoZC5fcmV2ZXJ0VG9SZWxhdGl2ZVBvc2l0aW9uJiZjLmJyb3dzZXIub3BlcmEpe2QuX3JldmVydFRvUmVsYXRpdmVQb3NpdGlvbj1mYWxzZTtlbC5jc3Moe3Bvc2l0aW9uOiJyZWxhdGl2ZSJ9KX1jKHRoaXMpLnJlbW92ZURhdGEoInJlc2l6YWJsZS1hbHNvcmVzaXplLXN0YXJ0Iil9fSk7Yy51aS5wbHVnaW4uYWRkKCJyZXNpemFibGUiLCJhbmltYXRlIix7c3RvcDpmdW5jdGlvbihoLG0pe3ZhciBuPWModGhpcykuZGF0YSgicmVzaXphYmxlIiksaT1uLm9wdGlvbnM7dmFyIGc9bi5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cyxkPWcubGVuZ3RoJiYoL3RleHRhcmVhL2kpLnRlc3QoZ1swXS5ub2RlTmFtZSksZT1kJiZjLnVpLmhhc1Njcm9sbChnWzBdLCJsZWZ0Iik/MDpuLnNpemVEaWZmLmhlaWdodCxrPWQ/MDpuLnNpemVEaWZmLndpZHRoO3ZhciBmPXt3aWR0aDoobi5zaXplLndpZHRoLWspLGhlaWdodDoobi5zaXplLmhlaWdodC1lKX0saj0ocGFyc2VJbnQobi5lbGVtZW50LmNzcygibGVmdCIpLDEwKSsobi5wb3NpdGlvbi5sZWZ0LW4ub3JpZ2luYWxQb3NpdGlvbi5sZWZ0KSl8fG51bGwsbD0ocGFyc2VJbnQobi5lbGVtZW50LmNzcygidG9wIiksMTApKyhuLnBvc2l0aW9uLnRvcC1uLm9yaWdpbmFsUG9zaXRpb24udG9wKSl8fG51bGw7bi5lbGVtZW50LmFuaW1hdGUoYy5leHRlbmQoZixsJiZqP3t0b3A6bCxsZWZ0Omp9Ont9KSx7ZHVyYXRpb246aS5hbmltYXRlRHVyYXRpb24sZWFzaW5nOmkuYW5pbWF0ZUVhc2luZyxzdGVwOmZ1bmN0aW9uKCl7dmFyIG89e3dpZHRoOnBhcnNlSW50KG4uZWxlbWVudC5jc3MoIndpZHRoIiksMTApLGhlaWdodDpwYXJzZUludChuLmVsZW1lbnQuY3NzKCJoZWlnaHQiKSwxMCksdG9wOnBhcnNlSW50KG4uZWxlbWVudC5jc3MoInRvcCIpLDEwKSxsZWZ0OnBhcnNlSW50KG4uZWxlbWVudC5jc3MoImxlZnQiKSwxMCl9O2lmKGcmJmcubGVuZ3RoKXtjKGdbMF0pLmNzcyh7d2lkdGg6by53aWR0aCxoZWlnaHQ6by5oZWlnaHR9KX1uLl91cGRhdGVDYWNoZShvKTtuLl9wcm9wYWdhdGUoInJlc2l6ZSIsaCl9fSl9fSk7Yy51aS5wbHVnaW4uYWRkKCJyZXNpemFibGUiLCJjb250YWlubWVudCIse3N0YXJ0OmZ1bmN0aW9uKGUscSl7dmFyIHM9Yyh0aGlzKS5kYXRhKCJyZXNpemFibGUiKSxpPXMub3B0aW9ucyxrPXMuZWxlbWVudDt2YXIgZj1pLmNvbnRhaW5tZW50LGo9KGYgaW5zdGFuY2VvZiBjKT9mLmdldCgwKTooL3BhcmVudC8udGVzdChmKSk/ay5wYXJlbnQoKS5nZXQoMCk6ZjtpZighail7cmV0dXJufXMuY29udGFpbmVyRWxlbWVudD1jKGopO2lmKC9kb2N1bWVudC8udGVzdChmKXx8Zj09ZG9jdW1lbnQpe3MuY29udGFpbmVyT2Zmc2V0PXtsZWZ0OjAsdG9wOjB9O3MuY29udGFpbmVyUG9zaXRpb249e2xlZnQ6MCx0b3A6MH07cy5wYXJlbnREYXRhPXtlbGVtZW50OmMoZG9jdW1lbnQpLGxlZnQ6MCx0b3A6MCx3aWR0aDpjKGRvY3VtZW50KS53aWR0aCgpLGhlaWdodDpjKGRvY3VtZW50KS5oZWlnaHQoKXx8ZG9jdW1lbnQuYm9keS5wYXJlbnROb2RlLnNjcm9sbEhlaWdodH19ZWxzZXt2YXIgbT1jKGopLGg9W107YyhbIlRvcCIsIlJpZ2h0IiwiTGVmdCIsIkJvdHRvbSJdKS5lYWNoKGZ1bmN0aW9uKHAsbyl7aFtwXT1iKG0uY3NzKCJwYWRkaW5nIitvKSl9KTtzLmNvbnRhaW5lck9mZnNldD1tLm9mZnNldCgpO3MuY29udGFpbmVyUG9zaXRpb249bS5wb3NpdGlvbigpO3MuY29udGFpbmVyU2l6ZT17aGVpZ2h0OihtLmlubmVySGVpZ2h0KCktaFszXSksd2lkdGg6KG0uaW5uZXJXaWR0aCgpLWhbMV0pfTt2YXIgbj1zLmNvbnRhaW5lck9mZnNldCxkPXMuY29udGFpbmVyU2l6ZS5oZWlnaHQsbD1zLmNvbnRhaW5lclNpemUud2lkdGgsZz0oYy51aS5oYXNTY3JvbGwoaiwibGVmdCIpP2ouc2Nyb2xsV2lkdGg6bCkscj0oYy51aS5oYXNTY3JvbGwoaik/ai5zY3JvbGxIZWlnaHQ6ZCk7cy5wYXJlbnREYXRhPXtlbGVtZW50OmosbGVmdDpuLmxlZnQsdG9wOm4udG9wLHdpZHRoOmcsaGVpZ2h0OnJ9fX0scmVzaXplOmZ1bmN0aW9uKGYscCl7dmFyIHM9Yyh0aGlzKS5kYXRhKCJyZXNpemFibGUiKSxoPXMub3B0aW9ucyxlPXMuY29udGFpbmVyU2l6ZSxuPXMuY29udGFpbmVyT2Zmc2V0LGw9cy5zaXplLG09cy5wb3NpdGlvbixxPXMuX2FzcGVjdFJhdGlvfHxmLnNoaWZ0S2V5LGQ9e3RvcDowLGxlZnQ6MH0sZz1zLmNvbnRhaW5lckVsZW1lbnQ7aWYoZ1swXSE9ZG9jdW1lbnQmJigvc3RhdGljLykudGVzdChnLmNzcygicG9zaXRpb24iKSkpe2Q9bn1pZihtLmxlZnQ8KHMuX2hlbHBlcj9uLmxlZnQ6MCkpe3Muc2l6ZS53aWR0aD1zLnNpemUud2lkdGgrKHMuX2hlbHBlcj8ocy5wb3NpdGlvbi5sZWZ0LW4ubGVmdCk6KHMucG9zaXRpb24ubGVmdC1kLmxlZnQpKTtpZihxKXtzLnNpemUuaGVpZ2h0PXMuc2l6ZS53aWR0aC9oLmFzcGVjdFJhdGlvfXMucG9zaXRpb24ubGVmdD1oLmhlbHBlcj9uLmxlZnQ6MH1pZihtLnRvcDwocy5faGVscGVyP24udG9wOjApKQote3Muc2l6ZS5oZWlnaHQ9cy5zaXplLmhlaWdodCsocy5faGVscGVyPyhzLnBvc2l0aW9uLnRvcC1uLnRvcCk6cy5wb3NpdGlvbi50b3ApO2lmKHEpe3Muc2l6ZS53aWR0aD1zLnNpemUuaGVpZ2h0KmguYXNwZWN0UmF0aW99cy5wb3NpdGlvbi50b3A9cy5faGVscGVyP24udG9wOjB9cy5vZmZzZXQubGVmdD1zLnBhcmVudERhdGEubGVmdCtzLnBvc2l0aW9uLmxlZnQ7cy5vZmZzZXQudG9wPXMucGFyZW50RGF0YS50b3Arcy5wb3NpdGlvbi50b3A7dmFyIGs9TWF0aC5hYnMoKHMuX2hlbHBlcj9zLm9mZnNldC5sZWZ0LWQubGVmdDoocy5vZmZzZXQubGVmdC1kLmxlZnQpKStzLnNpemVEaWZmLndpZHRoKSxyPU1hdGguYWJzKChzLl9oZWxwZXI/cy5vZmZzZXQudG9wLWQudG9wOihzLm9mZnNldC50b3Atbi50b3ApKStzLnNpemVEaWZmLmhlaWdodCk7dmFyIGo9cy5jb250YWluZXJFbGVtZW50LmdldCgwKT09cy5lbGVtZW50LnBhcmVudCgpLmdldCgwKSxpPS9yZWxhdGl2ZXxhYnNvbHV0ZS8udGVzdChzLmNvbnRhaW5lckVsZW1lbnQuY3NzKCJwb3NpdGlvbiIpKTtpZihqJiZpKXtrLT1zLnBhcmVudERhdGEubGVmdH1pZihrK3Muc2l6ZS53aWR0aD49cy5wYXJlbnREYXRhLndpZHRoKXtzLnNpemUud2lkdGg9cy5wYXJlbnREYXRhLndpZHRoLWs7aWYocSl7cy5zaXplLmhlaWdodD1zLnNpemUud2lkdGgvcy5hc3BlY3RSYXRpb319aWYocitzLnNpemUuaGVpZ2h0Pj1zLnBhcmVudERhdGEuaGVpZ2h0KXtzLnNpemUuaGVpZ2h0PXMucGFyZW50RGF0YS5oZWlnaHQtcjtpZihxKXtzLnNpemUud2lkdGg9cy5zaXplLmhlaWdodCpzLmFzcGVjdFJhdGlvfX19LHN0b3A6ZnVuY3Rpb24oZSxtKXt2YXIgcD1jKHRoaXMpLmRhdGEoInJlc2l6YWJsZSIpLGY9cC5vcHRpb25zLGs9cC5wb3NpdGlvbixsPXAuY29udGFpbmVyT2Zmc2V0LGQ9cC5jb250YWluZXJQb3NpdGlvbixnPXAuY29udGFpbmVyRWxlbWVudDt2YXIgaT1jKHAuaGVscGVyKSxxPWkub2Zmc2V0KCksbj1pLm91dGVyV2lkdGgoKS1wLnNpemVEaWZmLndpZHRoLGo9aS5vdXRlckhlaWdodCgpLXAuc2l6ZURpZmYuaGVpZ2h0O2lmKHAuX2hlbHBlciYmIWYuYW5pbWF0ZSYmKC9yZWxhdGl2ZS8pLnRlc3QoZy5jc3MoInBvc2l0aW9uIikpKXtjKHRoaXMpLmNzcyh7bGVmdDpxLmxlZnQtZC5sZWZ0LWwubGVmdCx3aWR0aDpuLGhlaWdodDpqfSl9aWYocC5faGVscGVyJiYhZi5hbmltYXRlJiYoL3N0YXRpYy8pLnRlc3QoZy5jc3MoInBvc2l0aW9uIikpKXtjKHRoaXMpLmNzcyh7bGVmdDpxLmxlZnQtZC5sZWZ0LWwubGVmdCx3aWR0aDpuLGhlaWdodDpqfSl9fX0pO2MudWkucGx1Z2luLmFkZCgicmVzaXphYmxlIiwiZ2hvc3QiLHtzdGFydDpmdW5jdGlvbihmLGcpe3ZhciBkPWModGhpcykuZGF0YSgicmVzaXphYmxlIiksaD1kLm9wdGlvbnMsZT1kLnNpemU7ZC5naG9zdD1kLm9yaWdpbmFsRWxlbWVudC5jbG9uZSgpO2QuZ2hvc3QuY3NzKHtvcGFjaXR5OjAuMjUsZGlzcGxheToiYmxvY2siLHBvc2l0aW9uOiJyZWxhdGl2ZSIsaGVpZ2h0OmUuaGVpZ2h0LHdpZHRoOmUud2lkdGgsbWFyZ2luOjAsbGVmdDowLHRvcDowfSkuYWRkQ2xhc3MoInVpLXJlc2l6YWJsZS1naG9zdCIpLmFkZENsYXNzKHR5cGVvZiBoLmdob3N0PT0ic3RyaW5nIj9oLmdob3N0OiIiKTtkLmdob3N0LmFwcGVuZFRvKGQuaGVscGVyKX0scmVzaXplOmZ1bmN0aW9uKGUsZil7dmFyIGQ9Yyh0aGlzKS5kYXRhKCJyZXNpemFibGUiKSxnPWQub3B0aW9ucztpZihkLmdob3N0KXtkLmdob3N0LmNzcyh7cG9zaXRpb246InJlbGF0aXZlIixoZWlnaHQ6ZC5zaXplLmhlaWdodCx3aWR0aDpkLnNpemUud2lkdGh9KX19LHN0b3A6ZnVuY3Rpb24oZSxmKXt2YXIgZD1jKHRoaXMpLmRhdGEoInJlc2l6YWJsZSIpLGc9ZC5vcHRpb25zO2lmKGQuZ2hvc3QmJmQuaGVscGVyKXtkLmhlbHBlci5nZXQoMCkucmVtb3ZlQ2hpbGQoZC5naG9zdC5nZXQoMCkpfX19KTtjLnVpLnBsdWdpbi5hZGQoInJlc2l6YWJsZSIsImdyaWQiLHtyZXNpemU6ZnVuY3Rpb24oZCxsKXt2YXIgbj1jKHRoaXMpLmRhdGEoInJlc2l6YWJsZSIpLGc9bi5vcHRpb25zLGo9bi5zaXplLGg9bi5vcmlnaW5hbFNpemUsaT1uLm9yaWdpbmFsUG9zaXRpb24sbT1uLmF4aXMsaz1nLl9hc3BlY3RSYXRpb3x8ZC5zaGlmdEtleTtnLmdyaWQ9dHlwZW9mIGcuZ3JpZD09Im51bWJlciI/W2cuZ3JpZCxnLmdyaWRdOmcuZ3JpZDt2YXIgZj1NYXRoLnJvdW5kKChqLndpZHRoLWgud2lkdGgpLyhnLmdyaWRbMF18fDEpKSooZy5ncmlkWzBdfHwxKSxlPU1hdGgucm91bmQoKGouaGVpZ2h0LWguaGVpZ2h0KS8oZy5ncmlkWzFdfHwxKSkqKGcuZ3JpZFsxXXx8MSk7aWYoL14oc2V8c3xlKSQvLnRlc3QobSkpe24uc2l6ZS53aWR0aD1oLndpZHRoK2Y7bi5zaXplLmhlaWdodD1oLmhlaWdodCtlfWVsc2V7aWYoL14obmUpJC8udGVzdChtKSl7bi5zaXplLndpZHRoPWgud2lkdGgrZjtuLnNpemUuaGVpZ2h0PWguaGVpZ2h0K2U7bi5wb3NpdGlvbi50b3A9aS50b3AtZX1lbHNle2lmKC9eKHN3KSQvLnRlc3QobSkpe24uc2l6ZS53aWR0aD1oLndpZHRoK2Y7bi5zaXplLmhlaWdodD1oLmhlaWdodCtlO24ucG9zaXRpb24ubGVmdD1pLmxlZnQtZn1lbHNle24uc2l6ZS53aWR0aD1oLndpZHRoK2Y7bi5zaXplLmhlaWdodD1oLmhlaWdodCtlO24ucG9zaXRpb24udG9wPWkudG9wLWU7bi5wb3NpdGlvbi5sZWZ0PWkubGVmdC1mfX19fX0pO3ZhciBiPWZ1bmN0aW9uKGQpe3JldHVybiBwYXJzZUludChkLDEwKXx8MH07dmFyIGE9ZnVuY3Rpb24oZCl7cmV0dXJuICFpc05hTihwYXJzZUludChkLDEwKSl9fSkoalF1ZXJ5KTs7Ci0vKioKLSAqIGpRdWVyeS5TY3JvbGxUbyAtIEVhc3kgZWxlbWVudCBzY3JvbGxpbmcgdXNpbmcgalF1ZXJ5LgotICogQ29weXJpZ2h0IChjKSAyMDA4IEFyaWVsIEZsZXNsZXIgLSBhZmxlc2xlcihhdClnbWFpbChkb3QpY29tCi0gKiBMaWNlbnNlZCB1bmRlciBHUEwgbGljZW5zZSAoaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5waHApLgotICogRGF0ZTogMi84LzIwMDgKLSAqIEBhdXRob3IgQXJpZWwgRmxlc2xlcgotICogQHZlcnNpb24gMS4zLjIKLSAqLwotOyhmdW5jdGlvbigkKXt2YXIgbz0kLnNjcm9sbFRvPWZ1bmN0aW9uKGEsYixjKXtvLndpbmRvdygpLnNjcm9sbFRvKGEsYixjKX07by5kZWZhdWx0cz17YXhpczoneScsZHVyYXRpb246MX07by53aW5kb3c9ZnVuY3Rpb24oKXtyZXR1cm4gJCgkLmJyb3dzZXIuc2FmYXJpPydib2R5JzonaHRtbCcpfTskLmZuLnNjcm9sbFRvPWZ1bmN0aW9uKGwsbSxuKXtpZih0eXBlb2YgbT09J29iamVjdCcpe249bTttPTB9bj0kLmV4dGVuZCh7fSxvLmRlZmF1bHRzLG4pO209bXx8bi5zcGVlZHx8bi5kdXJhdGlvbjtuLnF1ZXVlPW4ucXVldWUmJm4uYXhpcy5sZW5ndGg+MTtpZihuLnF1ZXVlKW0vPTI7bi5vZmZzZXQ9aihuLm9mZnNldCk7bi5vdmVyPWoobi5vdmVyKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxiPSQoYSksdD1sLGMsZD17fSx3PWIuaXMoJ2h0bWwsYm9keScpO3N3aXRjaCh0eXBlb2YgdCl7Y2FzZSdudW1iZXInOmNhc2Unc3RyaW5nJzppZigvXihbKy1dPSk/XGQrKHB4KT8kLy50ZXN0KHQpKXt0PWoodCk7YnJlYWt9dD0kKHQsdGhpcyk7Y2FzZSdvYmplY3QnOmlmKHQuaXN8fHQuc3R5bGUpYz0odD0kKHQpKS5vZmZzZXQoKX0kLmVhY2gobi5heGlzLnNwbGl0KCcnKSxmdW5jdGlvbihpLGYpe3ZhciBQPWY9PSd4Jz8nTGVmdCc6J1RvcCcscD1QLnRvTG93ZXJDYXNlKCksaz0nc2Nyb2xsJytQLGU9YVtrXSxEPWY9PSd4Jz8nV2lkdGgnOidIZWlnaHQnO2lmKGMpe2Rba109Y1twXSsodz8wOmUtYi5vZmZzZXQoKVtwXSk7aWYobi5tYXJnaW4pe2Rba10tPXBhcnNlSW50KHQuY3NzKCdtYXJnaW4nK1ApKXx8MDtkW2tdLT1wYXJzZUludCh0LmNzcygnYm9yZGVyJytQKydXaWR0aCcpKXx8MH1kW2tdKz1uLm9mZnNldFtwXXx8MDtpZihuLm92ZXJbcF0pZFtrXSs9dFtELnRvTG93ZXJDYXNlKCldKCkqbi5vdmVyW3BdfWVsc2UgZFtrXT10W3BdO2lmKC9eXGQrJC8udGVzdChkW2tdKSlkW2tdPWRba108PTA/MDpNYXRoLm1pbihkW2tdLGgoRCkpO2lmKCFpJiZuLnF1ZXVlKXtpZihlIT1kW2tdKWcobi5vbkFmdGVyRmlyc3QpO2RlbGV0ZSBkW2tdfX0pO2cobi5vbkFmdGVyKTtmdW5jdGlvbiBnKGEpe2IuYW5pbWF0ZShkLG0sbi5lYXNpbmcsYSYmZnVuY3Rpb24oKXthLmNhbGwodGhpcyxsKX0pfTtmdW5jdGlvbiBoKEQpe3ZhciBiPXc/JC5icm93c2VyLm9wZXJhP2RvY3VtZW50LmJvZHk6ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50OmE7cmV0dXJuIGJbJ3Njcm9sbCcrRF0tYlsnY2xpZW50JytEXX19KX07ZnVuY3Rpb24gaihhKXtyZXR1cm4gdHlwZW9mIGE9PSdvYmplY3QnP2E6e3RvcDphLGxlZnQ6YX19fSkoalF1ZXJ5KTsKLQorLyohIGpRdWVyeSB2MS43LjEganF1ZXJ5LmNvbSB8IGpxdWVyeS5vcmcvbGljZW5zZSAqLworKGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gY3koYSl7cmV0dXJuIGYuaXNXaW5kb3coYSk/YTphLm5vZGVUeXBlPT09OT9hLmRlZmF1bHRWaWV3fHxhLnBhcmVudFdpbmRvdzohMX1mdW5jdGlvbiBjdihhKXtpZighY2tbYV0pe3ZhciBiPWMuYm9keSxkPWYoIjwiK2ErIj4iKS5hcHBlbmRUbyhiKSxlPWQuY3NzKCJkaXNwbGF5Iik7ZC5yZW1vdmUoKTtpZihlPT09Im5vbmUifHxlPT09IiIpe2NsfHwoY2w9Yy5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKSxjbC5mcmFtZUJvcmRlcj1jbC53aWR0aD1jbC5oZWlnaHQ9MCksYi5hcHBlbmRDaGlsZChjbCk7aWYoIWNtfHwhY2wuY3JlYXRlRWxlbWVudCljbT0oY2wuY29udGVudFdpbmRvd3x8Y2wuY29udGVudERvY3VtZW50KS5kb2N1bWVudCxjbS53cml0ZSgoYy5jb21wYXRNb2RlPT09IkNTUzFDb21wYXQiPyI8IWRvY3R5cGUgaHRtbD4iOiIiKSsiPGh0bWw+PGJvZHk+IiksY20uY2xvc2UoKTtkPWNtLmNyZWF0ZUVsZW1lbnQoYSksY20uYm9keS5hcHBlbmRDaGlsZChkKSxlPWYuY3NzKGQsImRpc3BsYXkiKSxiLnJlbW92ZUNoaWxkKGNsKX1ja1thXT1lfXJldHVybiBja1thXX1mdW5jdGlvbiBjdShhLGIpe3ZhciBjPXt9O2YuZWFjaChjcS5jb25jYXQuYXBwbHkoW10sY3Euc2xpY2UoMCxiKSksZnVuY3Rpb24oKXtjW3RoaXNdPWF9KTtyZXR1cm4gY31mdW5jdGlvbiBjdCgpe2NyPWJ9ZnVuY3Rpb24gY3MoKXtzZXRUaW1lb3V0KGN0LDApO3JldHVybiBjcj1mLm5vdygpfWZ1bmN0aW9uIGNqKCl7dHJ5e3JldHVybiBuZXcgYS5BY3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1MSFRUUCIpfWNhdGNoKGIpe319ZnVuY3Rpb24gY2koKXt0cnl7cmV0dXJuIG5ldyBhLlhNTEh0dHBSZXF1ZXN0fWNhdGNoKGIpe319ZnVuY3Rpb24gY2MoYSxjKXthLmRhdGFGaWx0ZXImJihjPWEuZGF0YUZpbHRlcihjLGEuZGF0YVR5cGUpKTt2YXIgZD1hLmRhdGFUeXBlcyxlPXt9LGcsaCxpPWQubGVuZ3RoLGosaz1kWzBdLGwsbSxuLG8scDtmb3IoZz0xO2c8aTtnKyspe2lmKGc9PT0xKWZvcihoIGluIGEuY29udmVydGVycyl0eXBlb2YgaD09InN0cmluZyImJihlW2gudG9Mb3dlckNhc2UoKV09YS5jb252ZXJ0ZXJzW2hdKTtsPWssaz1kW2ddO2lmKGs9PT0iKiIpaz1sO2Vsc2UgaWYobCE9PSIqIiYmbCE9PWspe209bCsiICIrayxuPWVbbV18fGVbIiogIitrXTtpZighbil7cD1iO2ZvcihvIGluIGUpe2o9by5zcGxpdCgiICIpO2lmKGpbMF09PT1sfHxqWzBdPT09IioiKXtwPWVbalsxXSsiICIra107aWYocCl7bz1lW29dLG89PT0hMD9uPXA6cD09PSEwJiYobj1vKTticmVha319fX0hbiYmIXAmJmYuZXJyb3IoIk5vIGNvbnZlcnNpb24gZnJvbSAiK20ucmVwbGFjZSgiICIsIiB0byAiKSksbiE9PSEwJiYoYz1uP24oYyk6cChvKGMpKSl9fXJldHVybiBjfWZ1bmN0aW9uIGNiKGEsYyxkKXt2YXIgZT1hLmNvbnRlbnRzLGY9YS5kYXRhVHlwZXMsZz1hLnJlc3BvbnNlRmllbGRzLGgsaSxqLGs7Zm9yKGkgaW4gZylpIGluIGQmJihjW2dbaV1dPWRbaV0pO3doaWxlKGZbMF09PT0iKiIpZi5zaGlmdCgpLGg9PT1iJiYoaD1hLm1pbWVUeXBlfHxjLmdldFJlc3BvbnNlSGVhZGVyKCJjb250ZW50LXR5cGUiKSk7aWYoaClmb3IoaSBpbiBlKWlmKGVbaV0mJmVbaV0udGVzdChoKSl7Zi51bnNoaWZ0KGkpO2JyZWFrfWlmKGZbMF1pbiBkKWo9ZlswXTtlbHNle2ZvcihpIGluIGQpe2lmKCFmWzBdfHxhLmNvbnZlcnRlcnNbaSsiICIrZlswXV0pe2o9aTticmVha31rfHwoaz1pKX1qPWp8fGt9aWYoail7aiE9PWZbMF0mJmYudW5zaGlmdChqKTtyZXR1cm4gZFtqXX19ZnVuY3Rpb24gY2EoYSxiLGMsZCl7aWYoZi5pc0FycmF5KGIpKWYuZWFjaChiLGZ1bmN0aW9uKGIsZSl7Y3x8YkUudGVzdChhKT9kKGEsZSk6Y2EoYSsiWyIrKHR5cGVvZiBlPT0ib2JqZWN0Inx8Zi5pc0FycmF5KGUpP2I6IiIpKyJdIixlLGMsZCl9KTtlbHNlIGlmKCFjJiZiIT1udWxsJiZ0eXBlb2YgYj09Im9iamVjdCIpZm9yKHZhciBlIGluIGIpY2EoYSsiWyIrZSsiXSIsYltlXSxjLGQpO2Vsc2UgZChhLGIpfWZ1bmN0aW9uIGJfKGEsYyl7dmFyIGQsZSxnPWYuYWpheFNldHRpbmdzLmZsYXRPcHRpb25zfHx7fTtmb3IoZCBpbiBjKWNbZF0hPT1iJiYoKGdbZF0/YTplfHwoZT17fSkpW2RdPWNbZF0pO2UmJmYuZXh0ZW5kKCEwLGEsZSl9ZnVuY3Rpb24gYiQoYSxjLGQsZSxmLGcpe2Y9Znx8Yy5kYXRhVHlwZXNbMF0sZz1nfHx7fSxnW2ZdPSEwO3ZhciBoPWFbZl0saT0wLGo9aD9oLmxlbmd0aDowLGs9YT09PWJULGw7Zm9yKDtpPGomJihrfHwhbCk7aSsrKWw9aFtpXShjLGQsZSksdHlwZW9mIGw9PSJzdHJpbmciJiYoIWt8fGdbbF0/bD1iOihjLmRhdGFUeXBlcy51bnNoaWZ0KGwpLGw9YiQoYSxjLGQsZSxsLGcpKSk7KGt8fCFsKSYmIWdbIioiXSYmKGw9YiQoYSxjLGQsZSwiKiIsZykpO3JldHVybiBsfWZ1bmN0aW9uIGJaKGEpe3JldHVybiBmdW5jdGlvbihiLGMpe3R5cGVvZiBiIT0ic3RyaW5nIiYmKGM9YixiPSIqIik7aWYoZi5pc0Z1bmN0aW9uKGMpKXt2YXIgZD1iLnRvTG93ZXJDYXNlKCkuc3BsaXQoYlApLGU9MCxnPWQubGVuZ3RoLGgsaSxqO2Zvcig7ZTxnO2UrKyloPWRbZV0saj0vXlwrLy50ZXN0KGgpLGomJihoPWguc3Vic3RyKDEpfHwiKiIpLGk9YVtoXT1hW2hdfHxbXSxpW2o/InVuc2hpZnQiOiJwdXNoIl0oYyl9fX1mdW5jdGlvbiBiQyhhLGIsYyl7dmFyIGQ9Yj09PSJ3aWR0aCI/YS5vZmZzZXRXaWR0aDphLm9mZnNldEhlaWdodCxlPWI9PT0id2lkdGgiP2J4OmJ5LGc9MCxoPWUubGVuZ3RoO2lmKGQ+MCl7aWYoYyE9PSJib3JkZXIiKWZvcig7ZzxoO2crKyljfHwoZC09cGFyc2VGbG9hdChmLmNzcyhhLCJwYWRkaW5nIitlW2ddKSl8fDApLGM9PT0ibWFyZ2luIj9kKz1wYXJzZUZsb2F0KGYuY3NzKGEsYytlW2ddKSl8fDA6ZC09cGFyc2VGbG9hdChmLmNzcyhhLCJib3JkZXIiK2VbZ10rIldpZHRoIikpfHwwO3JldHVybiBkKyJweCJ9ZD1ieihhLGIsYik7aWYoZDwwfHxkPT1udWxsKWQ9YS5zdHlsZVtiXXx8MDtkPXBhcnNlRmxvYXQoZCl8fDA7aWYoYylmb3IoO2c8aDtnKyspZCs9cGFyc2VGbG9hdChmLmNzcyhhLCJwYWRkaW5nIitlW2ddKSl8fDAsYyE9PSJwYWRkaW5nIiYmKGQrPXBhcnNlRmxvYXQoZi5jc3MoYSwiYm9yZGVyIitlW2ddKyJXaWR0aCIpKXx8MCksYz09PSJtYXJnaW4iJiYoZCs9cGFyc2VGbG9hdChmLmNzcyhhLGMrZVtnXSkpfHwwKTtyZXR1cm4gZCsicHgifWZ1bmN0aW9uIGJwKGEsYil7Yi5zcmM/Zi5hamF4KHt1cmw6Yi5zcmMsYXN5bmM6ITEsZGF0YVR5cGU6InNjcmlwdCJ9KTpmLmdsb2JhbEV2YWwoKGIudGV4dHx8Yi50ZXh0Q29udGVudHx8Yi5pbm5lckhUTUx8fCIiKS5yZXBsYWNlKGJmLCIvKiQwKi8iKSksYi5wYXJlbnROb2RlJiZiLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYil9ZnVuY3Rpb24gYm8oYSl7dmFyIGI9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKTtiaC5hcHBlbmRDaGlsZChiKSxiLmlubmVySFRNTD1hLm91dGVySFRNTDtyZXR1cm4gYi5maXJzdENoaWxkfWZ1bmN0aW9uIGJuKGEpe3ZhciBiPShhLm5vZGVOYW1lfHwiIikudG9Mb3dlckNhc2UoKTtiPT09ImlucHV0Ij9ibShhKTpiIT09InNjcmlwdCImJnR5cGVvZiBhLmdldEVsZW1lbnRzQnlUYWdOYW1lIT0idW5kZWZpbmVkIiYmZi5ncmVwKGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IiksYm0pfWZ1bmN0aW9uIGJtKGEpe2lmKGEudHlwZT09PSJjaGVja2JveCJ8fGEudHlwZT09PSJyYWRpbyIpYS5kZWZhdWx0Q2hlY2tlZD1hLmNoZWNrZWR9ZnVuY3Rpb24gYmwoYSl7cmV0dXJuIHR5cGVvZiBhLmdldEVsZW1lbnRzQnlUYWdOYW1lIT0idW5kZWZpbmVkIj9hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik6dHlwZW9mIGEucXVlcnlTZWxlY3RvckFsbCE9InVuZGVmaW5lZCI/YS5xdWVyeVNlbGVjdG9yQWxsKCIqIik6W119ZnVuY3Rpb24gYmsoYSxiKXt2YXIgYztpZihiLm5vZGVUeXBlPT09MSl7Yi5jbGVhckF0dHJpYnV0ZXMmJmIuY2xlYXJBdHRyaWJ1dGVzKCksYi5tZXJnZUF0dHJpYnV0ZXMmJmIubWVyZ2VBdHRyaWJ1dGVzKGEpLGM9Yi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO2lmKGM9PT0ib2JqZWN0IiliLm91dGVySFRNTD1hLm91dGVySFRNTDtlbHNlIGlmKGMhPT0iaW5wdXQifHxhLnR5cGUhPT0iY2hlY2tib3giJiZhLnR5cGUhPT0icmFkaW8iKXtpZihjPT09Im9wdGlvbiIpYi5zZWxlY3RlZD1hLmRlZmF1bHRTZWxlY3RlZDtlbHNlIGlmKGM9PT0iaW5wdXQifHxjPT09InRleHRhcmVhIiliLmRlZmF1bHRWYWx1ZT1hLmRlZmF1bHRWYWx1ZX1lbHNlIGEuY2hlY2tlZCYmKGIuZGVmYXVsdENoZWNrZWQ9Yi5jaGVja2VkPWEuY2hlY2tlZCksYi52YWx1ZSE9PWEudmFsdWUmJihiLnZhbHVlPWEudmFsdWUpO2IucmVtb3ZlQXR0cmlidXRlKGYuZXhwYW5kbyl9fWZ1bmN0aW9uIGJqKGEsYil7aWYoYi5ub2RlVHlwZT09PTEmJiEhZi5oYXNEYXRhKGEpKXt2YXIgYyxkLGUsZz1mLl9kYXRhKGEpLGg9Zi5fZGF0YShiLGcpLGk9Zy5ldmVudHM7aWYoaSl7ZGVsZXRlIGguaGFuZGxlLGguZXZlbnRzPXt9O2ZvcihjIGluIGkpZm9yKGQ9MCxlPWlbY10ubGVuZ3RoO2Q8ZTtkKyspZi5ldmVudC5hZGQoYixjKyhpW2NdW2RdLm5hbWVzcGFjZT8iLiI6IiIpK2lbY11bZF0ubmFtZXNwYWNlLGlbY11bZF0saVtjXVtkXS5kYXRhKX1oLmRhdGEmJihoLmRhdGE9Zi5leHRlbmQoe30saC5kYXRhKSl9fWZ1bmN0aW9uIGJpKGEsYil7cmV0dXJuIGYubm9kZU5hbWUoYSwidGFibGUiKT9hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpWzBdfHxhLmFwcGVuZENoaWxkKGEub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Ym9keSIpKTphfWZ1bmN0aW9uIFUoYSl7dmFyIGI9Vi5zcGxpdCgifCIpLGM9YS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7aWYoYy5jcmVhdGVFbGVtZW50KXdoaWxlKGIubGVuZ3RoKWMuY3JlYXRlRWxlbWVudChiLnBvcCgpKTtyZXR1cm4gY31mdW5jdGlvbiBUKGEsYixjKXtiPWJ8fDA7aWYoZi5pc0Z1bmN0aW9uKGIpKXJldHVybiBmLmdyZXAoYSxmdW5jdGlvbihhLGQpe3ZhciBlPSEhYi5jYWxsKGEsZCxhKTtyZXR1cm4gZT09PWN9KTtpZihiLm5vZGVUeXBlKXJldHVybiBmLmdyZXAoYSxmdW5jdGlvbihhLGQpe3JldHVybiBhPT09Yj09PWN9KTtpZih0eXBlb2YgYj09InN0cmluZyIpe3ZhciBkPWYuZ3JlcChhLGZ1bmN0aW9uKGEpe3JldHVybiBhLm5vZGVUeXBlPT09MX0pO2lmKE8udGVzdChiKSlyZXR1cm4gZi5maWx0ZXIoYixkLCFjKTtiPWYuZmlsdGVyKGIsZCl9cmV0dXJuIGYuZ3JlcChhLGZ1bmN0aW9uKGEsZCl7cmV0dXJuIGYuaW5BcnJheShhLGIpPj0wPT09Y30pfWZ1bmN0aW9uIFMoYSl7cmV0dXJuIWF8fCFhLnBhcmVudE5vZGV8fGEucGFyZW50Tm9kZS5ub2RlVHlwZT09PTExfWZ1bmN0aW9uIEsoKXtyZXR1cm4hMH1mdW5jdGlvbiBKKCl7cmV0dXJuITF9ZnVuY3Rpb24gbihhLGIsYyl7dmFyIGQ9YisiZGVmZXIiLGU9YisicXVldWUiLGc9YisibWFyayIsaD1mLl9kYXRhKGEsZCk7aCYmKGM9PT0icXVldWUifHwhZi5fZGF0YShhLGUpKSYmKGM9PT0ibWFyayJ8fCFmLl9kYXRhKGEsZykpJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7IWYuX2RhdGEoYSxlKSYmIWYuX2RhdGEoYSxnKSYmKGYucmVtb3ZlRGF0YShhLGQsITApLGguZmlyZSgpKX0sMCl9ZnVuY3Rpb24gbShhKXtmb3IodmFyIGIgaW4gYSl7aWYoYj09PSJkYXRhIiYmZi5pc0VtcHR5T2JqZWN0KGFbYl0pKWNvbnRpbnVlO2lmKGIhPT0idG9KU09OIilyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBsKGEsYyxkKXtpZihkPT09YiYmYS5ub2RlVHlwZT09PTEpe3ZhciBlPSJkYXRhLSIrYy5yZXBsYWNlKGssIi0kMSIpLnRvTG93ZXJDYXNlKCk7ZD1hLmdldEF0dHJpYnV0ZShlKTtpZih0eXBlb2YgZD09InN0cmluZyIpe3RyeXtkPWQ9PT0idHJ1ZSI/ITA6ZD09PSJmYWxzZSI/ITE6ZD09PSJudWxsIj9udWxsOmYuaXNOdW1lcmljKGQpP3BhcnNlRmxvYXQoZCk6ai50ZXN0KGQpP2YucGFyc2VKU09OKGQpOmR9Y2F0Y2goZyl7fWYuZGF0YShhLGMsZCl9ZWxzZSBkPWJ9cmV0dXJuIGR9ZnVuY3Rpb24gaChhKXt2YXIgYj1nW2FdPXt9LGMsZDthPWEuc3BsaXQoL1xzKy8pO2ZvcihjPTAsZD1hLmxlbmd0aDtjPGQ7YysrKWJbYVtjXV09ITA7cmV0dXJuIGJ9dmFyIGM9YS5kb2N1bWVudCxkPWEubmF2aWdhdG9yLGU9YS5sb2NhdGlvbixmPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gSigpe2lmKCFlLmlzUmVhZHkpe3RyeXtjLmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCgibGVmdCIpfWNhdGNoKGEpe3NldFRpbWVvdXQoSiwxKTtyZXR1cm59ZS5yZWFkeSgpfX12YXIgZT1mdW5jdGlvbihhLGIpe3JldHVybiBuZXcgZS5mbi5pbml0KGEsYixoKX0sZj1hLmpRdWVyeSxnPWEuJCxoLGk9L14oPzpbXiM8XSooPFtcd1xXXSs+KVtePl0qJHwjKFtcd1wtXSopJCkvLGo9L1xTLyxrPS9eXHMrLyxsPS9ccyskLyxtPS9ePChcdyspXHMqXC8/Pig/OjxcL1wxPik/JC8sbj0vXltcXSw6e31cc10qJC8sbz0vXFwoPzpbIlxcXC9iZm5ydF18dVswLTlhLWZBLUZdezR9KS9nLHA9LyJbXiJcXFxuXHJdKiJ8dHJ1ZXxmYWxzZXxudWxsfC0/XGQrKD86XC5cZCopPyg/OltlRV1bK1wtXT9cZCspPy9nLHE9Lyg/Ol58OnwsKSg/OlxzKlxbKSsvZyxyPS8od2Via2l0KVsgXC9dKFtcdy5dKykvLHM9LyhvcGVyYSkoPzouKnZlcnNpb24pP1sgXC9dKFtcdy5dKykvLHQ9Lyhtc2llKSAoW1x3Ll0rKS8sdT0vKG1vemlsbGEpKD86Lio/IHJ2OihbXHcuXSspKT8vLHY9Ly0oW2Etel18WzAtOV0pL2lnLHc9L14tbXMtLyx4PWZ1bmN0aW9uKGEsYil7cmV0dXJuKGIrIiIpLnRvVXBwZXJDYXNlKCl9LHk9ZC51c2VyQWdlbnQseixBLEIsQz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLEQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxFPUFycmF5LnByb3RvdHlwZS5wdXNoLEY9QXJyYXkucHJvdG90eXBlLnNsaWNlLEc9U3RyaW5nLnByb3RvdHlwZS50cmltLEg9QXJyYXkucHJvdG90eXBlLmluZGV4T2YsST17fTtlLmZuPWUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjplLGluaXQ6ZnVuY3Rpb24oYSxkLGYpe3ZhciBnLGgsaixrO2lmKCFhKXJldHVybiB0aGlzO2lmKGEubm9kZVR5cGUpe3RoaXMuY29udGV4dD10aGlzWzBdPWEsdGhpcy5sZW5ndGg9MTtyZXR1cm4gdGhpc31pZihhPT09ImJvZHkiJiYhZCYmYy5ib2R5KXt0aGlzLmNvbnRleHQ9Yyx0aGlzWzBdPWMuYm9keSx0aGlzLnNlbGVjdG9yPWEsdGhpcy5sZW5ndGg9MTtyZXR1cm4gdGhpc31pZih0eXBlb2YgYT09InN0cmluZyIpe2EuY2hhckF0KDApIT09IjwifHxhLmNoYXJBdChhLmxlbmd0aC0xKSE9PSI+Inx8YS5sZW5ndGg8Mz9nPWkuZXhlYyhhKTpnPVtudWxsLGEsbnVsbF07aWYoZyYmKGdbMV18fCFkKSl7aWYoZ1sxXSl7ZD1kIGluc3RhbmNlb2YgZT9kWzBdOmQsaz1kP2Qub3duZXJEb2N1bWVudHx8ZDpjLGo9bS5leGVjKGEpLGo/ZS5pc1BsYWluT2JqZWN0KGQpPyhhPVtjLmNyZWF0ZUVsZW1lbnQoalsxXSldLGUuZm4uYXR0ci5jYWxsKGEsZCwhMCkpOmE9W2suY3JlYXRlRWxlbWVudChqWzFdKV06KGo9ZS5idWlsZEZyYWdtZW50KFtnWzFdXSxba10pLGE9KGouY2FjaGVhYmxlP2UuY2xvbmUoai5mcmFnbWVudCk6ai5mcmFnbWVudCkuY2hpbGROb2Rlcyk7cmV0dXJuIGUubWVyZ2UodGhpcyxhKX1oPWMuZ2V0RWxlbWVudEJ5SWQoZ1syXSk7aWYoaCYmaC5wYXJlbnROb2RlKXtpZihoLmlkIT09Z1syXSlyZXR1cm4gZi5maW5kKGEpO3RoaXMubGVuZ3RoPTEsdGhpc1swXT1ofXRoaXMuY29udGV4dD1jLHRoaXMuc2VsZWN0b3I9YTtyZXR1cm4gdGhpc31yZXR1cm4hZHx8ZC5qcXVlcnk/KGR8fGYpLmZpbmQoYSk6dGhpcy5jb25zdHJ1Y3RvcihkKS5maW5kKGEpfWlmKGUuaXNGdW5jdGlvbihhKSlyZXR1cm4gZi5yZWFkeShhKTthLnNlbGVjdG9yIT09YiYmKHRoaXMuc2VsZWN0b3I9YS5zZWxlY3Rvcix0aGlzLmNvbnRleHQ9YS5jb250ZXh0KTtyZXR1cm4gZS5tYWtlQXJyYXkoYSx0aGlzKX0sc2VsZWN0b3I6IiIsanF1ZXJ5OiIxLjcuMSIsbGVuZ3RoOjAsc2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aH0sdG9BcnJheTpmdW5jdGlvbigpe3JldHVybiBGLmNhbGwodGhpcywwKX0sZ2V0OmZ1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsP3RoaXMudG9BcnJheSgpOmE8MD90aGlzW3RoaXMubGVuZ3RoK2FdOnRoaXNbYV19LHB1c2hTdGFjazpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5jb25zdHJ1Y3RvcigpO2UuaXNBcnJheShhKT9FLmFwcGx5KGQsYSk6ZS5tZXJnZShkLGEpLGQucHJldk9iamVjdD10aGlzLGQuY29udGV4dD10aGlzLmNvbnRleHQsYj09PSJmaW5kIj9kLnNlbGVjdG9yPXRoaXMuc2VsZWN0b3IrKHRoaXMuc2VsZWN0b3I/IiAiOiIiKStjOmImJihkLnNlbGVjdG9yPXRoaXMuc2VsZWN0b3IrIi4iK2IrIigiK2MrIikiKTtyZXR1cm4gZH0sZWFjaDpmdW5jdGlvbihhLGIpe3JldHVybiBlLmVhY2godGhpcyxhLGIpfSxyZWFkeTpmdW5jdGlvbihhKXtlLmJpbmRSZWFkeSgpLEEuYWRkKGEpO3JldHVybiB0aGlzfSxlcTpmdW5jdGlvbihhKXthPSthO3JldHVybiBhPT09LTE/dGhpcy5zbGljZShhKTp0aGlzLnNsaWNlKGEsYSsxKX0sZmlyc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgwKX0sbGFzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKC0xKX0sc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soRi5hcHBseSh0aGlzLGFyZ3VtZW50cyksInNsaWNlIixGLmNhbGwoYXJndW1lbnRzKS5qb2luKCIsIikpfSxtYXA6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGUubWFwKHRoaXMsZnVuY3Rpb24oYixjKXtyZXR1cm4gYS5jYWxsKGIsYyxiKX0pKX0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJldk9iamVjdHx8dGhpcy5jb25zdHJ1Y3RvcihudWxsKX0scHVzaDpFLHNvcnQ6W10uc29ydCxzcGxpY2U6W10uc3BsaWNlfSxlLmZuLmluaXQucHJvdG90eXBlPWUuZm4sZS5leHRlbmQ9ZS5mbi5leHRlbmQ9ZnVuY3Rpb24oKXt2YXIgYSxjLGQsZixnLGgsaT1hcmd1bWVudHNbMF18fHt9LGo9MSxrPWFyZ3VtZW50cy5sZW5ndGgsbD0hMTt0eXBlb2YgaT09ImJvb2xlYW4iJiYobD1pLGk9YXJndW1lbnRzWzFdfHx7fSxqPTIpLHR5cGVvZiBpIT0ib2JqZWN0IiYmIWUuaXNGdW5jdGlvbihpKSYmKGk9e30pLGs9PT1qJiYoaT10aGlzLC0taik7Zm9yKDtqPGs7aisrKWlmKChhPWFyZ3VtZW50c1tqXSkhPW51bGwpZm9yKGMgaW4gYSl7ZD1pW2NdLGY9YVtjXTtpZihpPT09Ziljb250aW51ZTtsJiZmJiYoZS5pc1BsYWluT2JqZWN0KGYpfHwoZz1lLmlzQXJyYXkoZikpKT8oZz8oZz0hMSxoPWQmJmUuaXNBcnJheShkKT9kOltdKTpoPWQmJmUuaXNQbGFpbk9iamVjdChkKT9kOnt9LGlbY109ZS5leHRlbmQobCxoLGYpKTpmIT09YiYmKGlbY109Zil9cmV0dXJuIGl9LGUuZXh0ZW5kKHtub0NvbmZsaWN0OmZ1bmN0aW9uKGIpe2EuJD09PWUmJihhLiQ9ZyksYiYmYS5qUXVlcnk9PT1lJiYoYS5qUXVlcnk9Zik7cmV0dXJuIGV9LGlzUmVhZHk6ITEscmVhZHlXYWl0OjEsaG9sZFJlYWR5OmZ1bmN0aW9uKGEpe2E/ZS5yZWFkeVdhaXQrKzplLnJlYWR5KCEwKX0scmVhZHk6ZnVuY3Rpb24oYSl7aWYoYT09PSEwJiYhLS1lLnJlYWR5V2FpdHx8YSE9PSEwJiYhZS5pc1JlYWR5KXtpZighYy5ib2R5KXJldHVybiBzZXRUaW1lb3V0KGUucmVhZHksMSk7ZS5pc1JlYWR5PSEwO2lmKGEhPT0hMCYmLS1lLnJlYWR5V2FpdD4wKXJldHVybjtBLmZpcmVXaXRoKGMsW2VdKSxlLmZuLnRyaWdnZXImJmUoYykudHJpZ2dlcigicmVhZHkiKS5vZmYoInJlYWR5Iil9fSxiaW5kUmVhZHk6ZnVuY3Rpb24oKXtpZighQSl7QT1lLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKTtpZihjLnJlYWR5U3RhdGU9PT0iY29tcGxldGUiKXJldHVybiBzZXRUaW1lb3V0KGUucmVhZHksMSk7aWYoYy5hZGRFdmVudExpc3RlbmVyKWMuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsQiwhMSksYS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixlLnJlYWR5LCExKTtlbHNlIGlmKGMuYXR0YWNoRXZlbnQpe2MuYXR0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsQiksYS5hdHRhY2hFdmVudCgib25sb2FkIixlLnJlYWR5KTt2YXIgYj0hMTt0cnl7Yj1hLmZyYW1lRWxlbWVudD09bnVsbH1jYXRjaChkKXt9Yy5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwmJmImJkooKX19fSxpc0Z1bmN0aW9uOmZ1bmN0aW9uKGEpe3JldHVybiBlLnR5cGUoYSk9PT0iZnVuY3Rpb24ifSxpc0FycmF5OkFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGEpe3JldHVybiBlLnR5cGUoYSk9PT0iYXJyYXkifSxpc1dpbmRvdzpmdW5jdGlvbihhKXtyZXR1cm4gYSYmdHlwZW9mIGE9PSJvYmplY3QiJiYic2V0SW50ZXJ2YWwiaW4gYX0saXNOdW1lcmljOmZ1bmN0aW9uKGEpe3JldHVybiFpc05hTihwYXJzZUZsb2F0KGEpKSYmaXNGaW5pdGUoYSl9LHR5cGU6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PW51bGw/U3RyaW5nKGEpOklbQy5jYWxsKGEpXXx8Im9iamVjdCJ9LGlzUGxhaW5PYmplY3Q6ZnVuY3Rpb24oYSl7aWYoIWF8fGUudHlwZShhKSE9PSJvYmplY3QifHxhLm5vZGVUeXBlfHxlLmlzV2luZG93KGEpKXJldHVybiExO3RyeXtpZihhLmNvbnN0cnVjdG9yJiYhRC5jYWxsKGEsImNvbnN0cnVjdG9yIikmJiFELmNhbGwoYS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsImlzUHJvdG90eXBlT2YiKSlyZXR1cm4hMX1jYXRjaChjKXtyZXR1cm4hMX12YXIgZDtmb3IoZCBpbiBhKTtyZXR1cm4gZD09PWJ8fEQuY2FsbChhLGQpfSxpc0VtcHR5T2JqZWN0OmZ1bmN0aW9uKGEpe2Zvcih2YXIgYiBpbiBhKXJldHVybiExO3JldHVybiEwfSxlcnJvcjpmdW5jdGlvbihhKXt0aHJvdyBuZXcgRXJyb3IoYSl9LHBhcnNlSlNPTjpmdW5jdGlvbihiKXtpZih0eXBlb2YgYiE9InN0cmluZyJ8fCFiKXJldHVybiBudWxsO2I9ZS50cmltKGIpO2lmKGEuSlNPTiYmYS5KU09OLnBhcnNlKXJldHVybiBhLkpTT04ucGFyc2UoYik7aWYobi50ZXN0KGIucmVwbGFjZShvLCJAIikucmVwbGFjZShwLCJdIikucmVwbGFjZShxLCIiKSkpcmV0dXJuKG5ldyBGdW5jdGlvbigicmV0dXJuICIrYikpKCk7ZS5lcnJvcigiSW52YWxpZCBKU09OOiAiK2IpfSxwYXJzZVhNTDpmdW5jdGlvbihjKXt2YXIgZCxmO3RyeXthLkRPTVBhcnNlcj8oZj1uZXcgRE9NUGFyc2VyLGQ9Zi5wYXJzZUZyb21TdHJpbmcoYywidGV4dC94bWwiKSk6KGQ9bmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxET00iKSxkLmFzeW5jPSJmYWxzZSIsZC5sb2FkWE1MKGMpKX1jYXRjaChnKXtkPWJ9KCFkfHwhZC5kb2N1bWVudEVsZW1lbnR8fGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInBhcnNlcmVycm9yIikubGVuZ3RoKSYmZS5lcnJvcigiSW52YWxpZCBYTUw6ICIrYyk7cmV0dXJuIGR9LG5vb3A6ZnVuY3Rpb24oKXt9LGdsb2JhbEV2YWw6ZnVuY3Rpb24oYil7YiYmai50ZXN0KGIpJiYoYS5leGVjU2NyaXB0fHxmdW5jdGlvbihiKXthLmV2YWwuY2FsbChhLGIpfSkoYil9LGNhbWVsQ2FzZTpmdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKHcsIm1zLSIpLnJlcGxhY2Uodix4KX0sbm9kZU5hbWU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5ub2RlTmFtZSYmYS5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpPT09Yi50b1VwcGVyQ2FzZSgpfSxlYWNoOmZ1bmN0aW9uKGEsYyxkKXt2YXIgZixnPTAsaD1hLmxlbmd0aCxpPWg9PT1ifHxlLmlzRnVuY3Rpb24oYSk7aWYoZCl7aWYoaSl7Zm9yKGYgaW4gYSlpZihjLmFwcGx5KGFbZl0sZCk9PT0hMSlicmVha31lbHNlIGZvcig7ZzxoOylpZihjLmFwcGx5KGFbZysrXSxkKT09PSExKWJyZWFrfWVsc2UgaWYoaSl7Zm9yKGYgaW4gYSlpZihjLmNhbGwoYVtmXSxmLGFbZl0pPT09ITEpYnJlYWt9ZWxzZSBmb3IoO2c8aDspaWYoYy5jYWxsKGFbZ10sZyxhW2crK10pPT09ITEpYnJlYWs7cmV0dXJuIGF9LHRyaW06Rz9mdW5jdGlvbihhKXtyZXR1cm4gYT09bnVsbD8iIjpHLmNhbGwoYSl9OmZ1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsPyIiOihhKyIiKS5yZXBsYWNlKGssIiIpLnJlcGxhY2UobCwiIil9LG1ha2VBcnJheTpmdW5jdGlvbihhLGIpe3ZhciBjPWJ8fFtdO2lmKGEhPW51bGwpe3ZhciBkPWUudHlwZShhKTthLmxlbmd0aD09bnVsbHx8ZD09PSJzdHJpbmcifHxkPT09ImZ1bmN0aW9uInx8ZD09PSJyZWdleHAifHxlLmlzV2luZG93KGEpP0UuY2FsbChjLGEpOmUubWVyZ2UoYyxhKX1yZXR1cm4gY30saW5BcnJheTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ7aWYoYil7aWYoSClyZXR1cm4gSC5jYWxsKGIsYSxjKTtkPWIubGVuZ3RoLGM9Yz9jPDA/TWF0aC5tYXgoMCxkK2MpOmM6MDtmb3IoO2M8ZDtjKyspaWYoYyBpbiBiJiZiW2NdPT09YSlyZXR1cm4gY31yZXR1cm4tMX0sbWVyZ2U6ZnVuY3Rpb24oYSxjKXt2YXIgZD1hLmxlbmd0aCxlPTA7aWYodHlwZW9mIGMubGVuZ3RoPT0ibnVtYmVyIilmb3IodmFyIGY9Yy5sZW5ndGg7ZTxmO2UrKylhW2QrK109Y1tlXTtlbHNlIHdoaWxlKGNbZV0hPT1iKWFbZCsrXT1jW2UrK107YS5sZW5ndGg9ZDtyZXR1cm4gYX0sZ3JlcDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9W10sZTtjPSEhYztmb3IodmFyIGY9MCxnPWEubGVuZ3RoO2Y8ZztmKyspZT0hIWIoYVtmXSxmKSxjIT09ZSYmZC5wdXNoKGFbZl0pO3JldHVybiBkfSxtYXA6ZnVuY3Rpb24oYSxjLGQpe3ZhciBmLGcsaD1bXSxpPTAsaj1hLmxlbmd0aCxrPWEgaW5zdGFuY2VvZiBlfHxqIT09YiYmdHlwZW9mIGo9PSJudW1iZXIiJiYoaj4wJiZhWzBdJiZhW2otMV18fGo9PT0wfHxlLmlzQXJyYXkoYSkpO2lmKGspZm9yKDtpPGo7aSsrKWY9YyhhW2ldLGksZCksZiE9bnVsbCYmKGhbaC5sZW5ndGhdPWYpO2Vsc2UgZm9yKGcgaW4gYSlmPWMoYVtnXSxnLGQpLGYhPW51bGwmJihoW2gubGVuZ3RoXT1mKTtyZXR1cm4gaC5jb25jYXQuYXBwbHkoW10saCl9LGd1aWQ6MSxwcm94eTpmdW5jdGlvbihhLGMpe2lmKHR5cGVvZiBjPT0ic3RyaW5nIil7dmFyIGQ9YVtjXTtjPWEsYT1kfWlmKCFlLmlzRnVuY3Rpb24oYSkpcmV0dXJuIGI7dmFyIGY9Ri5jYWxsKGFyZ3VtZW50cywyKSxnPWZ1bmN0aW9uKCl7cmV0dXJuIGEuYXBwbHkoYyxmLmNvbmNhdChGLmNhbGwoYXJndW1lbnRzKSkpfTtnLmd1aWQ9YS5ndWlkPWEuZ3VpZHx8Zy5ndWlkfHxlLmd1aWQrKztyZXR1cm4gZ30sYWNjZXNzOmZ1bmN0aW9uKGEsYyxkLGYsZyxoKXt2YXIgaT1hLmxlbmd0aDtpZih0eXBlb2YgYz09Im9iamVjdCIpe2Zvcih2YXIgaiBpbiBjKWUuYWNjZXNzKGEsaixjW2pdLGYsZyxkKTtyZXR1cm4gYX1pZihkIT09Yil7Zj0haCYmZiYmZS5pc0Z1bmN0aW9uKGQpO2Zvcih2YXIgaz0wO2s8aTtrKyspZyhhW2tdLGMsZj9kLmNhbGwoYVtrXSxrLGcoYVtrXSxjKSk6ZCxoKTtyZXR1cm4gYX1yZXR1cm4gaT9nKGFbMF0sYyk6Yn0sbm93OmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9LHVhTWF0Y2g6ZnVuY3Rpb24oYSl7YT1hLnRvTG93ZXJDYXNlKCk7dmFyIGI9ci5leGVjKGEpfHxzLmV4ZWMoYSl8fHQuZXhlYyhhKXx8YS5pbmRleE9mKCJjb21wYXRpYmxlIik8MCYmdS5leGVjKGEpfHxbXTtyZXR1cm57YnJvd3NlcjpiWzFdfHwiIix2ZXJzaW9uOmJbMl18fCIwIn19LHN1YjpmdW5jdGlvbigpe2Z1bmN0aW9uIGEoYixjKXtyZXR1cm4gbmV3IGEuZm4uaW5pdChiLGMpfWUuZXh0ZW5kKCEwLGEsdGhpcyksYS5zdXBlcmNsYXNzPXRoaXMsYS5mbj1hLnByb3RvdHlwZT10aGlzKCksYS5mbi5jb25zdHJ1Y3Rvcj1hLGEuc3ViPXRoaXMuc3ViLGEuZm4uaW5pdD1mdW5jdGlvbihkLGYpe2YmJmYgaW5zdGFuY2VvZiBlJiYhKGYgaW5zdGFuY2VvZiBhKSYmKGY9YShmKSk7cmV0dXJuIGUuZm4uaW5pdC5jYWxsKHRoaXMsZCxmLGIpfSxhLmZuLmluaXQucHJvdG90eXBlPWEuZm47dmFyIGI9YShjKTtyZXR1cm4gYX0sYnJvd3Nlcjp7fX0pLGUuZWFjaCgiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCIuc3BsaXQoIiAiKSxmdW5jdGlvbihhLGIpe0lbIltvYmplY3QgIitiKyJdIl09Yi50b0xvd2VyQ2FzZSgpfSksej1lLnVhTWF0Y2goeSksei5icm93c2VyJiYoZS5icm93c2VyW3ouYnJvd3Nlcl09ITAsZS5icm93c2VyLnZlcnNpb249ei52ZXJzaW9uKSxlLmJyb3dzZXIud2Via2l0JiYoZS5icm93c2VyLnNhZmFyaT0hMCksai50ZXN0KCLCoCIpJiYoaz0vXltcc1x4QTBdKy8sbD0vW1xzXHhBMF0rJC8pLGg9ZShjKSxjLmFkZEV2ZW50TGlzdGVuZXI/Qj1mdW5jdGlvbigpe2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsQiwhMSksZS5yZWFkeSgpfTpjLmF0dGFjaEV2ZW50JiYoQj1mdW5jdGlvbigpe2MucmVhZHlTdGF0ZT09PSJjb21wbGV0ZSImJihjLmRldGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLEIpLGUucmVhZHkoKSl9KTtyZXR1cm4gZX0oKSxnPXt9O2YuQ2FsbGJhY2tzPWZ1bmN0aW9uKGEpe2E9YT9nW2FdfHxoKGEpOnt9O3ZhciBjPVtdLGQ9W10sZSxpLGosayxsLG09ZnVuY3Rpb24oYil7dmFyIGQsZSxnLGgsaTtmb3IoZD0wLGU9Yi5sZW5ndGg7ZDxlO2QrKylnPWJbZF0saD1mLnR5cGUoZyksaD09PSJhcnJheSI/bShnKTpoPT09ImZ1bmN0aW9uIiYmKCFhLnVuaXF1ZXx8IW8uaGFzKGcpKSYmYy5wdXNoKGcpfSxuPWZ1bmN0aW9uKGIsZil7Zj1mfHxbXSxlPSFhLm1lbW9yeXx8W2IsZl0saT0hMCxsPWp8fDAsaj0wLGs9Yy5sZW5ndGg7Zm9yKDtjJiZsPGs7bCsrKWlmKGNbbF0uYXBwbHkoYixmKT09PSExJiZhLnN0b3BPbkZhbHNlKXtlPSEwO2JyZWFrfWk9ITEsYyYmKGEub25jZT9lPT09ITA/by5kaXNhYmxlKCk6Yz1bXTpkJiZkLmxlbmd0aCYmKGU9ZC5zaGlmdCgpLG8uZmlyZVdpdGgoZVswXSxlWzFdKSkpfSxvPXthZGQ6ZnVuY3Rpb24oKXtpZihjKXt2YXIgYT1jLmxlbmd0aDttKGFyZ3VtZW50cyksaT9rPWMubGVuZ3RoOmUmJmUhPT0hMCYmKGo9YSxuKGVbMF0sZVsxXSkpfXJldHVybiB0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oKXtpZihjKXt2YXIgYj1hcmd1bWVudHMsZD0wLGU9Yi5sZW5ndGg7Zm9yKDtkPGU7ZCsrKWZvcih2YXIgZj0wO2Y8Yy5sZW5ndGg7ZisrKWlmKGJbZF09PT1jW2ZdKXtpJiZmPD1rJiYoay0tLGY8PWwmJmwtLSksYy5zcGxpY2UoZi0tLDEpO2lmKGEudW5pcXVlKWJyZWFrfX1yZXR1cm4gdGhpc30saGFzOmZ1bmN0aW9uKGEpe2lmKGMpe3ZhciBiPTAsZD1jLmxlbmd0aDtmb3IoO2I8ZDtiKyspaWYoYT09PWNbYl0pcmV0dXJuITB9cmV0dXJuITF9LGVtcHR5OmZ1bmN0aW9uKCl7Yz1bXTtyZXR1cm4gdGhpc30sZGlzYWJsZTpmdW5jdGlvbigpe2M9ZD1lPWI7cmV0dXJuIHRoaXN9LGRpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIWN9LGxvY2s6ZnVuY3Rpb24oKXtkPWIsKCFlfHxlPT09ITApJiZvLmRpc2FibGUoKTtyZXR1cm4gdGhpc30sbG9ja2VkOmZ1bmN0aW9uKCl7cmV0dXJuIWR9LGZpcmVXaXRoOmZ1bmN0aW9uKGIsYyl7ZCYmKGk/YS5vbmNlfHxkLnB1c2goW2IsY10pOighYS5vbmNlfHwhZSkmJm4oYixjKSk7cmV0dXJuIHRoaXN9LGZpcmU6ZnVuY3Rpb24oKXtvLmZpcmVXaXRoKHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gdGhpc30sZmlyZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIWV9fTtyZXR1cm4gb307dmFyIGk9W10uc2xpY2U7Zi5leHRlbmQoe0RlZmVycmVkOmZ1bmN0aW9uKGEpe3ZhciBiPWYuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLGM9Zi5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksZD1mLkNhbGxiYWNrcygibWVtb3J5IiksZT0icGVuZGluZyIsZz17cmVzb2x2ZTpiLHJlamVjdDpjLG5vdGlmeTpkfSxoPXtkb25lOmIuYWRkLGZhaWw6Yy5hZGQscHJvZ3Jlc3M6ZC5hZGQsc3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gZX0saXNSZXNvbHZlZDpiLmZpcmVkLGlzUmVqZWN0ZWQ6Yy5maXJlZCx0aGVuOmZ1bmN0aW9uKGEsYixjKXtpLmRvbmUoYSkuZmFpbChiKS5wcm9ncmVzcyhjKTtyZXR1cm4gdGhpc30sYWx3YXlzOmZ1bmN0aW9uKCl7aS5kb25lLmFwcGx5KGksYXJndW1lbnRzKS5mYWlsLmFwcGx5KGksYXJndW1lbnRzKTtyZXR1cm4gdGhpc30scGlwZTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGYuRGVmZXJyZWQoZnVuY3Rpb24oZCl7Zi5lYWNoKHtkb25lOlthLCJyZXNvbHZlIl0sZmFpbDpbYiwicmVqZWN0Il0scHJvZ3Jlc3M6W2MsIm5vdGlmeSJdfSxmdW5jdGlvbihhLGIpe3ZhciBjPWJbMF0sZT1iWzFdLGc7Zi5pc0Z1bmN0aW9uKGMpP2lbYV0oZnVuY3Rpb24oKQore2c9Yy5hcHBseSh0aGlzLGFyZ3VtZW50cyksZyYmZi5pc0Z1bmN0aW9uKGcucHJvbWlzZSk/Zy5wcm9taXNlKCkudGhlbihkLnJlc29sdmUsZC5yZWplY3QsZC5ub3RpZnkpOmRbZSsiV2l0aCJdKHRoaXM9PT1pP2Q6dGhpcyxbZ10pfSk6aVthXShkW2VdKX0pfSkucHJvbWlzZSgpfSxwcm9taXNlOmZ1bmN0aW9uKGEpe2lmKGE9PW51bGwpYT1oO2Vsc2UgZm9yKHZhciBiIGluIGgpYVtiXT1oW2JdO3JldHVybiBhfX0saT1oLnByb21pc2Uoe30pLGo7Zm9yKGogaW4gZylpW2pdPWdbal0uZmlyZSxpW2orIldpdGgiXT1nW2pdLmZpcmVXaXRoO2kuZG9uZShmdW5jdGlvbigpe2U9InJlc29sdmVkIn0sYy5kaXNhYmxlLGQubG9jaykuZmFpbChmdW5jdGlvbigpe2U9InJlamVjdGVkIn0sYi5kaXNhYmxlLGQubG9jayksYSYmYS5jYWxsKGksaSk7cmV0dXJuIGl9LHdoZW46ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gbShhKXtyZXR1cm4gZnVuY3Rpb24oYil7ZVthXT1hcmd1bWVudHMubGVuZ3RoPjE/aS5jYWxsKGFyZ3VtZW50cywwKTpiLGoubm90aWZ5V2l0aChrLGUpfX1mdW5jdGlvbiBsKGEpe3JldHVybiBmdW5jdGlvbihjKXtiW2FdPWFyZ3VtZW50cy5sZW5ndGg+MT9pLmNhbGwoYXJndW1lbnRzLDApOmMsLS1nfHxqLnJlc29sdmVXaXRoKGosYil9fXZhciBiPWkuY2FsbChhcmd1bWVudHMsMCksYz0wLGQ9Yi5sZW5ndGgsZT1BcnJheShkKSxnPWQsaD1kLGo9ZDw9MSYmYSYmZi5pc0Z1bmN0aW9uKGEucHJvbWlzZSk/YTpmLkRlZmVycmVkKCksaz1qLnByb21pc2UoKTtpZihkPjEpe2Zvcig7YzxkO2MrKyliW2NdJiZiW2NdLnByb21pc2UmJmYuaXNGdW5jdGlvbihiW2NdLnByb21pc2UpP2JbY10ucHJvbWlzZSgpLnRoZW4obChjKSxqLnJlamVjdCxtKGMpKTotLWc7Z3x8ai5yZXNvbHZlV2l0aChqLGIpfWVsc2UgaiE9PWEmJmoucmVzb2x2ZVdpdGgoaixkP1thXTpbXSk7cmV0dXJuIGt9fSksZi5zdXBwb3J0PWZ1bmN0aW9uKCl7dmFyIGIsZCxlLGcsaCxpLGosayxsLG0sbixvLHAscT1jLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHI9Yy5kb2N1bWVudEVsZW1lbnQ7cS5zZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIsInQiKSxxLmlubmVySFRNTD0iICAgPGxpbmsvPjx0YWJsZT48L3RhYmxlPjxhIGhyZWY9Jy9hJyBzdHlsZT0ndG9wOjFweDtmbG9hdDpsZWZ0O29wYWNpdHk6LjU1Oyc+YTwvYT48aW5wdXQgdHlwZT0nY2hlY2tib3gnLz4iLGQ9cS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLGU9cS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYSIpWzBdO2lmKCFkfHwhZC5sZW5ndGh8fCFlKXJldHVybnt9O2c9Yy5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKSxoPWcuYXBwZW5kQ2hpbGQoYy5jcmVhdGVFbGVtZW50KCJvcHRpb24iKSksaT1xLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpWzBdLGI9e2xlYWRpbmdXaGl0ZXNwYWNlOnEuZmlyc3RDaGlsZC5ub2RlVHlwZT09PTMsdGJvZHk6IXEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IikubGVuZ3RoLGh0bWxTZXJpYWxpemU6ISFxLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJsaW5rIikubGVuZ3RoLHN0eWxlOi90b3AvLnRlc3QoZS5nZXRBdHRyaWJ1dGUoInN0eWxlIikpLGhyZWZOb3JtYWxpemVkOmUuZ2V0QXR0cmlidXRlKCJocmVmIik9PT0iL2EiLG9wYWNpdHk6L14wLjU1Ly50ZXN0KGUuc3R5bGUub3BhY2l0eSksY3NzRmxvYXQ6ISFlLnN0eWxlLmNzc0Zsb2F0LGNoZWNrT246aS52YWx1ZT09PSJvbiIsb3B0U2VsZWN0ZWQ6aC5zZWxlY3RlZCxnZXRTZXRBdHRyaWJ1dGU6cS5jbGFzc05hbWUhPT0idCIsZW5jdHlwZTohIWMuY3JlYXRlRWxlbWVudCgiZm9ybSIpLmVuY3R5cGUsaHRtbDVDbG9uZTpjLmNyZWF0ZUVsZW1lbnQoIm5hdiIpLmNsb25lTm9kZSghMCkub3V0ZXJIVE1MIT09Ijw6bmF2PjwvOm5hdj4iLHN1Ym1pdEJ1YmJsZXM6ITAsY2hhbmdlQnViYmxlczohMCxmb2N1c2luQnViYmxlczohMSxkZWxldGVFeHBhbmRvOiEwLG5vQ2xvbmVFdmVudDohMCxpbmxpbmVCbG9ja05lZWRzTGF5b3V0OiExLHNocmlua1dyYXBCbG9ja3M6ITEscmVsaWFibGVNYXJnaW5SaWdodDohMH0saS5jaGVja2VkPSEwLGIubm9DbG9uZUNoZWNrZWQ9aS5jbG9uZU5vZGUoITApLmNoZWNrZWQsZy5kaXNhYmxlZD0hMCxiLm9wdERpc2FibGVkPSFoLmRpc2FibGVkO3RyeXtkZWxldGUgcS50ZXN0fWNhdGNoKHMpe2IuZGVsZXRlRXhwYW5kbz0hMX0hcS5hZGRFdmVudExpc3RlbmVyJiZxLmF0dGFjaEV2ZW50JiZxLmZpcmVFdmVudCYmKHEuYXR0YWNoRXZlbnQoIm9uY2xpY2siLGZ1bmN0aW9uKCl7Yi5ub0Nsb25lRXZlbnQ9ITF9KSxxLmNsb25lTm9kZSghMCkuZmlyZUV2ZW50KCJvbmNsaWNrIikpLGk9Yy5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLGkudmFsdWU9InQiLGkuc2V0QXR0cmlidXRlKCJ0eXBlIiwicmFkaW8iKSxiLnJhZGlvVmFsdWU9aS52YWx1ZT09PSJ0IixpLnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsImNoZWNrZWQiKSxxLmFwcGVuZENoaWxkKGkpLGs9Yy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksay5hcHBlbmRDaGlsZChxLmxhc3RDaGlsZCksYi5jaGVja0Nsb25lPWsuY2xvbmVOb2RlKCEwKS5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5jaGVja2VkLGIuYXBwZW5kQ2hlY2tlZD1pLmNoZWNrZWQsay5yZW1vdmVDaGlsZChpKSxrLmFwcGVuZENoaWxkKHEpLHEuaW5uZXJIVE1MPSIiLGEuZ2V0Q29tcHV0ZWRTdHlsZSYmKGo9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKSxqLnN0eWxlLndpZHRoPSIwIixqLnN0eWxlLm1hcmdpblJpZ2h0PSIwIixxLnN0eWxlLndpZHRoPSIycHgiLHEuYXBwZW5kQ2hpbGQoaiksYi5yZWxpYWJsZU1hcmdpblJpZ2h0PShwYXJzZUludCgoYS5nZXRDb21wdXRlZFN0eWxlKGosbnVsbCl8fHttYXJnaW5SaWdodDowfSkubWFyZ2luUmlnaHQsMTApfHwwKT09PTApO2lmKHEuYXR0YWNoRXZlbnQpZm9yKG8gaW57c3VibWl0OjEsY2hhbmdlOjEsZm9jdXNpbjoxfSluPSJvbiIrbyxwPW4gaW4gcSxwfHwocS5zZXRBdHRyaWJ1dGUobiwicmV0dXJuOyIpLHA9dHlwZW9mIHFbbl09PSJmdW5jdGlvbiIpLGJbbysiQnViYmxlcyJdPXA7ay5yZW1vdmVDaGlsZChxKSxrPWc9aD1qPXE9aT1udWxsLGYoZnVuY3Rpb24oKXt2YXIgYSxkLGUsZyxoLGksaixrLG0sbixvLHI9Yy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdOyFyfHwoaj0xLGs9InBvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDt3aWR0aDoxcHg7aGVpZ2h0OjFweDttYXJnaW46MDsiLG09InZpc2liaWxpdHk6aGlkZGVuO2JvcmRlcjowOyIsbj0ic3R5bGU9JyIraysiYm9yZGVyOjVweCBzb2xpZCAjMDAwO3BhZGRpbmc6MDsnIixvPSI8ZGl2ICIrbisiPjxkaXY+PC9kaXY+PC9kaXY+IisiPHRhYmxlICIrbisiIGNlbGxwYWRkaW5nPScwJyBjZWxsc3BhY2luZz0nMCc+IisiPHRyPjx0ZD48L3RkPjwvdHI+PC90YWJsZT4iLGE9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKSxhLnN0eWxlLmNzc1RleHQ9bSsid2lkdGg6MDtoZWlnaHQ6MDtwb3NpdGlvbjpzdGF0aWM7dG9wOjA7bWFyZ2luLXRvcDoiK2orInB4IixyLmluc2VydEJlZm9yZShhLHIuZmlyc3RDaGlsZCkscT1jLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGEuYXBwZW5kQ2hpbGQocSkscS5pbm5lckhUTUw9Ijx0YWJsZT48dHI+PHRkIHN0eWxlPSdwYWRkaW5nOjA7Ym9yZGVyOjA7ZGlzcGxheTpub25lJz48L3RkPjx0ZD50PC90ZD48L3RyPjwvdGFibGU+IixsPXEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIikscD1sWzBdLm9mZnNldEhlaWdodD09PTAsbFswXS5zdHlsZS5kaXNwbGF5PSIiLGxbMV0uc3R5bGUuZGlzcGxheT0ibm9uZSIsYi5yZWxpYWJsZUhpZGRlbk9mZnNldHM9cCYmbFswXS5vZmZzZXRIZWlnaHQ9PT0wLHEuaW5uZXJIVE1MPSIiLHEuc3R5bGUud2lkdGg9cS5zdHlsZS5wYWRkaW5nTGVmdD0iMXB4IixmLmJveE1vZGVsPWIuYm94TW9kZWw9cS5vZmZzZXRXaWR0aD09PTIsdHlwZW9mIHEuc3R5bGUuem9vbSE9InVuZGVmaW5lZCImJihxLnN0eWxlLmRpc3BsYXk9ImlubGluZSIscS5zdHlsZS56b29tPTEsYi5pbmxpbmVCbG9ja05lZWRzTGF5b3V0PXEub2Zmc2V0V2lkdGg9PT0yLHEuc3R5bGUuZGlzcGxheT0iIixxLmlubmVySFRNTD0iPGRpdiBzdHlsZT0nd2lkdGg6NHB4Oyc+PC9kaXY+IixiLnNocmlua1dyYXBCbG9ja3M9cS5vZmZzZXRXaWR0aCE9PTIpLHEuc3R5bGUuY3NzVGV4dD1rK20scS5pbm5lckhUTUw9byxkPXEuZmlyc3RDaGlsZCxlPWQuZmlyc3RDaGlsZCxoPWQubmV4dFNpYmxpbmcuZmlyc3RDaGlsZC5maXJzdENoaWxkLGk9e2RvZXNOb3RBZGRCb3JkZXI6ZS5vZmZzZXRUb3AhPT01LGRvZXNBZGRCb3JkZXJGb3JUYWJsZUFuZENlbGxzOmgub2Zmc2V0VG9wPT09NX0sZS5zdHlsZS5wb3NpdGlvbj0iZml4ZWQiLGUuc3R5bGUudG9wPSIyMHB4IixpLmZpeGVkUG9zaXRpb249ZS5vZmZzZXRUb3A9PT0yMHx8ZS5vZmZzZXRUb3A9PT0xNSxlLnN0eWxlLnBvc2l0aW9uPWUuc3R5bGUudG9wPSIiLGQuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIsZC5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLGkuc3VidHJhY3RzQm9yZGVyRm9yT3ZlcmZsb3dOb3RWaXNpYmxlPWUub2Zmc2V0VG9wPT09LTUsaS5kb2VzTm90SW5jbHVkZU1hcmdpbkluQm9keU9mZnNldD1yLm9mZnNldFRvcCE9PWosci5yZW1vdmVDaGlsZChhKSxxPWE9bnVsbCxmLmV4dGVuZChiLGkpKX0pO3JldHVybiBifSgpO3ZhciBqPS9eKD86XHsuKlx9fFxbLipcXSkkLyxrPS8oW0EtWl0pL2c7Zi5leHRlbmQoe2NhY2hlOnt9LHV1aWQ6MCxleHBhbmRvOiJqUXVlcnkiKyhmLmZuLmpxdWVyeStNYXRoLnJhbmRvbSgpKS5yZXBsYWNlKC9cRC9nLCIiKSxub0RhdGE6e2VtYmVkOiEwLG9iamVjdDoiY2xzaWQ6RDI3Q0RCNkUtQUU2RC0xMWNmLTk2QjgtNDQ0NTUzNTQwMDAwIixhcHBsZXQ6ITB9LGhhc0RhdGE6ZnVuY3Rpb24oYSl7YT1hLm5vZGVUeXBlP2YuY2FjaGVbYVtmLmV4cGFuZG9dXTphW2YuZXhwYW5kb107cmV0dXJuISFhJiYhbShhKX0sZGF0YTpmdW5jdGlvbihhLGMsZCxlKXtpZighIWYuYWNjZXB0RGF0YShhKSl7dmFyIGcsaCxpLGo9Zi5leHBhbmRvLGs9dHlwZW9mIGM9PSJzdHJpbmciLGw9YS5ub2RlVHlwZSxtPWw/Zi5jYWNoZTphLG49bD9hW2pdOmFbal0mJmosbz1jPT09ImV2ZW50cyI7aWYoKCFufHwhbVtuXXx8IW8mJiFlJiYhbVtuXS5kYXRhKSYmayYmZD09PWIpcmV0dXJuO258fChsP2Fbal09bj0rK2YudXVpZDpuPWopLG1bbl18fChtW25dPXt9LGx8fChtW25dLnRvSlNPTj1mLm5vb3ApKTtpZih0eXBlb2YgYz09Im9iamVjdCJ8fHR5cGVvZiBjPT0iZnVuY3Rpb24iKWU/bVtuXT1mLmV4dGVuZChtW25dLGMpOm1bbl0uZGF0YT1mLmV4dGVuZChtW25dLmRhdGEsYyk7Zz1oPW1bbl0sZXx8KGguZGF0YXx8KGguZGF0YT17fSksaD1oLmRhdGEpLGQhPT1iJiYoaFtmLmNhbWVsQ2FzZShjKV09ZCk7aWYobyYmIWhbY10pcmV0dXJuIGcuZXZlbnRzO2s/KGk9aFtjXSxpPT1udWxsJiYoaT1oW2YuY2FtZWxDYXNlKGMpXSkpOmk9aDtyZXR1cm4gaX19LHJlbW92ZURhdGE6ZnVuY3Rpb24oYSxiLGMpe2lmKCEhZi5hY2NlcHREYXRhKGEpKXt2YXIgZCxlLGcsaD1mLmV4cGFuZG8saT1hLm5vZGVUeXBlLGo9aT9mLmNhY2hlOmEsaz1pP2FbaF06aDtpZighaltrXSlyZXR1cm47aWYoYil7ZD1jP2pba106altrXS5kYXRhO2lmKGQpe2YuaXNBcnJheShiKXx8KGIgaW4gZD9iPVtiXTooYj1mLmNhbWVsQ2FzZShiKSxiIGluIGQ/Yj1bYl06Yj1iLnNwbGl0KCIgIikpKTtmb3IoZT0wLGc9Yi5sZW5ndGg7ZTxnO2UrKylkZWxldGUgZFtiW2VdXTtpZighKGM/bTpmLmlzRW1wdHlPYmplY3QpKGQpKXJldHVybn19aWYoIWMpe2RlbGV0ZSBqW2tdLmRhdGE7aWYoIW0oaltrXSkpcmV0dXJufWYuc3VwcG9ydC5kZWxldGVFeHBhbmRvfHwhai5zZXRJbnRlcnZhbD9kZWxldGUgaltrXTpqW2tdPW51bGwsaSYmKGYuc3VwcG9ydC5kZWxldGVFeHBhbmRvP2RlbGV0ZSBhW2hdOmEucmVtb3ZlQXR0cmlidXRlP2EucmVtb3ZlQXR0cmlidXRlKGgpOmFbaF09bnVsbCl9fSxfZGF0YTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGYuZGF0YShhLGIsYywhMCl9LGFjY2VwdERhdGE6ZnVuY3Rpb24oYSl7aWYoYS5ub2RlTmFtZSl7dmFyIGI9Zi5ub0RhdGFbYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXTtpZihiKXJldHVybiBiIT09ITAmJmEuZ2V0QXR0cmlidXRlKCJjbGFzc2lkIik9PT1ifXJldHVybiEwfX0pLGYuZm4uZXh0ZW5kKHtkYXRhOmZ1bmN0aW9uKGEsYyl7dmFyIGQsZSxnLGg9bnVsbDtpZih0eXBlb2YgYT09InVuZGVmaW5lZCIpe2lmKHRoaXMubGVuZ3RoKXtoPWYuZGF0YSh0aGlzWzBdKTtpZih0aGlzWzBdLm5vZGVUeXBlPT09MSYmIWYuX2RhdGEodGhpc1swXSwicGFyc2VkQXR0cnMiKSl7ZT10aGlzWzBdLmF0dHJpYnV0ZXM7Zm9yKHZhciBpPTAsaj1lLmxlbmd0aDtpPGo7aSsrKWc9ZVtpXS5uYW1lLGcuaW5kZXhPZigiZGF0YS0iKT09PTAmJihnPWYuY2FtZWxDYXNlKGcuc3Vic3RyaW5nKDUpKSxsKHRoaXNbMF0sZyxoW2ddKSk7Zi5fZGF0YSh0aGlzWzBdLCJwYXJzZWRBdHRycyIsITApfX1yZXR1cm4gaH1pZih0eXBlb2YgYT09Im9iamVjdCIpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2YuZGF0YSh0aGlzLGEpfSk7ZD1hLnNwbGl0KCIuIiksZFsxXT1kWzFdPyIuIitkWzFdOiIiO2lmKGM9PT1iKXtoPXRoaXMudHJpZ2dlckhhbmRsZXIoImdldERhdGEiK2RbMV0rIiEiLFtkWzBdXSksaD09PWImJnRoaXMubGVuZ3RoJiYoaD1mLmRhdGEodGhpc1swXSxhKSxoPWwodGhpc1swXSxhLGgpKTtyZXR1cm4gaD09PWImJmRbMV0/dGhpcy5kYXRhKGRbMF0pOmh9cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPWYodGhpcyksZT1bZFswXSxjXTtiLnRyaWdnZXJIYW5kbGVyKCJzZXREYXRhIitkWzFdKyIhIixlKSxmLmRhdGEodGhpcyxhLGMpLGIudHJpZ2dlckhhbmRsZXIoImNoYW5nZURhdGEiK2RbMV0rIiEiLGUpfSl9LHJlbW92ZURhdGE6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2YucmVtb3ZlRGF0YSh0aGlzLGEpfSl9fSksZi5leHRlbmQoe19tYXJrOmZ1bmN0aW9uKGEsYil7YSYmKGI9KGJ8fCJmeCIpKyJtYXJrIixmLl9kYXRhKGEsYiwoZi5fZGF0YShhLGIpfHwwKSsxKSl9LF91bm1hcms6ZnVuY3Rpb24oYSxiLGMpe2EhPT0hMCYmKGM9YixiPWEsYT0hMSk7aWYoYil7Yz1jfHwiZngiO3ZhciBkPWMrIm1hcmsiLGU9YT8wOihmLl9kYXRhKGIsZCl8fDEpLTE7ZT9mLl9kYXRhKGIsZCxlKTooZi5yZW1vdmVEYXRhKGIsZCwhMCksbihiLGMsIm1hcmsiKSl9fSxxdWV1ZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ7aWYoYSl7Yj0oYnx8ImZ4IikrInF1ZXVlIixkPWYuX2RhdGEoYSxiKSxjJiYoIWR8fGYuaXNBcnJheShjKT9kPWYuX2RhdGEoYSxiLGYubWFrZUFycmF5KGMpKTpkLnB1c2goYykpO3JldHVybiBkfHxbXX19LGRlcXVldWU6ZnVuY3Rpb24oYSxiKXtiPWJ8fCJmeCI7dmFyIGM9Zi5xdWV1ZShhLGIpLGQ9Yy5zaGlmdCgpLGU9e307ZD09PSJpbnByb2dyZXNzIiYmKGQ9Yy5zaGlmdCgpKSxkJiYoYj09PSJmeCImJmMudW5zaGlmdCgiaW5wcm9ncmVzcyIpLGYuX2RhdGEoYSxiKyIucnVuIixlKSxkLmNhbGwoYSxmdW5jdGlvbigpe2YuZGVxdWV1ZShhLGIpfSxlKSksYy5sZW5ndGh8fChmLnJlbW92ZURhdGEoYSxiKyJxdWV1ZSAiK2IrIi5ydW4iLCEwKSxuKGEsYiwicXVldWUiKSl9fSksZi5mbi5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKGEsYyl7dHlwZW9mIGEhPSJzdHJpbmciJiYoYz1hLGE9ImZ4Iik7aWYoYz09PWIpcmV0dXJuIGYucXVldWUodGhpc1swXSxhKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9Zi5xdWV1ZSh0aGlzLGEsYyk7YT09PSJmeCImJmJbMF0hPT0iaW5wcm9ncmVzcyImJmYuZGVxdWV1ZSh0aGlzLGEpfSl9LGRlcXVldWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2YuZGVxdWV1ZSh0aGlzLGEpfSl9LGRlbGF5OmZ1bmN0aW9uKGEsYil7YT1mLmZ4P2YuZnguc3BlZWRzW2FdfHxhOmEsYj1ifHwiZngiO3JldHVybiB0aGlzLnF1ZXVlKGIsZnVuY3Rpb24oYixjKXt2YXIgZD1zZXRUaW1lb3V0KGIsYSk7Yy5zdG9wPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KGQpfX0pfSxjbGVhclF1ZXVlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnF1ZXVlKGF8fCJmeCIsW10pfSxwcm9taXNlOmZ1bmN0aW9uKGEsYyl7ZnVuY3Rpb24gbSgpey0taHx8ZC5yZXNvbHZlV2l0aChlLFtlXSl9dHlwZW9mIGEhPSJzdHJpbmciJiYoYz1hLGE9YiksYT1hfHwiZngiO3ZhciBkPWYuRGVmZXJyZWQoKSxlPXRoaXMsZz1lLmxlbmd0aCxoPTEsaT1hKyJkZWZlciIsaj1hKyJxdWV1ZSIsaz1hKyJtYXJrIixsO3doaWxlKGctLSlpZihsPWYuZGF0YShlW2ddLGksYiwhMCl8fChmLmRhdGEoZVtnXSxqLGIsITApfHxmLmRhdGEoZVtnXSxrLGIsITApKSYmZi5kYXRhKGVbZ10saSxmLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwhMCkpaCsrLGwuYWRkKG0pO20oKTtyZXR1cm4gZC5wcm9taXNlKCl9fSk7dmFyIG89L1tcblx0XHJdL2cscD0vXHMrLyxxPS9cci9nLHI9L14oPzpidXR0b258aW5wdXQpJC9pLHM9L14oPzpidXR0b258aW5wdXR8b2JqZWN0fHNlbGVjdHx0ZXh0YXJlYSkkL2ksdD0vXmEoPzpyZWEpPyQvaSx1PS9eKD86YXV0b2ZvY3VzfGF1dG9wbGF5fGFzeW5jfGNoZWNrZWR8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWR8c2VsZWN0ZWQpJC9pLHY9Zi5zdXBwb3J0LmdldFNldEF0dHJpYnV0ZSx3LHgseTtmLmZuLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihhLGIpe3JldHVybiBmLmFjY2Vzcyh0aGlzLGEsYiwhMCxmLmF0dHIpfSxyZW1vdmVBdHRyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmLnJlbW92ZUF0dHIodGhpcyxhKX0pfSxwcm9wOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGYuYWNjZXNzKHRoaXMsYSxiLCEwLGYucHJvcCl9LHJlbW92ZVByb3A6ZnVuY3Rpb24oYSl7YT1mLnByb3BGaXhbYV18fGE7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3RyeXt0aGlzW2FdPWIsZGVsZXRlIHRoaXNbYV19Y2F0Y2goYyl7fX0pfSxhZGRDbGFzczpmdW5jdGlvbihhKXt2YXIgYixjLGQsZSxnLGgsaTtpZihmLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtmKHRoaXMpLmFkZENsYXNzKGEuY2FsbCh0aGlzLGIsdGhpcy5jbGFzc05hbWUpKX0pO2lmKGEmJnR5cGVvZiBhPT0ic3RyaW5nIil7Yj1hLnNwbGl0KHApO2ZvcihjPTAsZD10aGlzLmxlbmd0aDtjPGQ7YysrKXtlPXRoaXNbY107aWYoZS5ub2RlVHlwZT09PTEpaWYoIWUuY2xhc3NOYW1lJiZiLmxlbmd0aD09PTEpZS5jbGFzc05hbWU9YTtlbHNle2c9IiAiK2UuY2xhc3NOYW1lKyIgIjtmb3IoaD0wLGk9Yi5sZW5ndGg7aDxpO2grKyl+Zy5pbmRleE9mKCIgIitiW2hdKyIgIil8fChnKz1iW2hdKyIgIik7ZS5jbGFzc05hbWU9Zi50cmltKGcpfX19cmV0dXJuIHRoaXN9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKGEpe3ZhciBjLGQsZSxnLGgsaSxqO2lmKGYuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe2YodGhpcykucmVtb3ZlQ2xhc3MoYS5jYWxsKHRoaXMsYix0aGlzLmNsYXNzTmFtZSkpfSk7aWYoYSYmdHlwZW9mIGE9PSJzdHJpbmcifHxhPT09Yil7Yz0oYXx8IiIpLnNwbGl0KHApO2ZvcihkPTAsZT10aGlzLmxlbmd0aDtkPGU7ZCsrKXtnPXRoaXNbZF07aWYoZy5ub2RlVHlwZT09PTEmJmcuY2xhc3NOYW1lKWlmKGEpe2g9KCIgIitnLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UobywiICIpO2ZvcihpPTAsaj1jLmxlbmd0aDtpPGo7aSsrKWg9aC5yZXBsYWNlKCIgIitjW2ldKyIgIiwiICIpO2cuY2xhc3NOYW1lPWYudHJpbShoKX1lbHNlIGcuY2xhc3NOYW1lPSIifX1yZXR1cm4gdGhpc30sdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24oYSxiKXt2YXIgYz10eXBlb2YgYSxkPXR5cGVvZiBiPT0iYm9vbGVhbiI7aWYoZi5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYyl7Zih0aGlzKS50b2dnbGVDbGFzcyhhLmNhbGwodGhpcyxjLHRoaXMuY2xhc3NOYW1lLGIpLGIpfSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2lmKGM9PT0ic3RyaW5nIil7dmFyIGUsZz0wLGg9Zih0aGlzKSxpPWIsaj1hLnNwbGl0KHApO3doaWxlKGU9altnKytdKWk9ZD9pOiFoLmhhc0NsYXNzKGUpLGhbaT8iYWRkQ2xhc3MiOiJyZW1vdmVDbGFzcyJdKGUpfWVsc2UgaWYoYz09PSJ1bmRlZmluZWQifHxjPT09ImJvb2xlYW4iKXRoaXMuY2xhc3NOYW1lJiZmLl9kYXRhKHRoaXMsIl9fY2xhc3NOYW1lX18iLHRoaXMuY2xhc3NOYW1lKSx0aGlzLmNsYXNzTmFtZT10aGlzLmNsYXNzTmFtZXx8YT09PSExPyIiOmYuX2RhdGEodGhpcywiX19jbGFzc05hbWVfXyIpfHwiIn0pfSxoYXNDbGFzczpmdW5jdGlvbihhKXt2YXIgYj0iICIrYSsiICIsYz0wLGQ9dGhpcy5sZW5ndGg7Zm9yKDtjPGQ7YysrKWlmKHRoaXNbY10ubm9kZVR5cGU9PT0xJiYoIiAiK3RoaXNbY10uY2xhc3NOYW1lKyIgIikucmVwbGFjZShvLCIgIikuaW5kZXhPZihiKT4tMSlyZXR1cm4hMDtyZXR1cm4hMX0sdmFsOmZ1bmN0aW9uKGEpe3ZhciBjLGQsZSxnPXRoaXNbMF07e2lmKCEhYXJndW1lbnRzLmxlbmd0aCl7ZT1mLmlzRnVuY3Rpb24oYSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihkKXt2YXIgZz1mKHRoaXMpLGg7aWYodGhpcy5ub2RlVHlwZT09PTEpe2U/aD1hLmNhbGwodGhpcyxkLGcudmFsKCkpOmg9YSxoPT1udWxsP2g9IiI6dHlwZW9mIGg9PSJudW1iZXIiP2grPSIiOmYuaXNBcnJheShoKSYmKGg9Zi5tYXAoaCxmdW5jdGlvbihhKXtyZXR1cm4gYT09bnVsbD8iIjphKyIifSkpLGM9Zi52YWxIb29rc1t0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldfHxmLnZhbEhvb2tzW3RoaXMudHlwZV07aWYoIWN8fCEoInNldCJpbiBjKXx8Yy5zZXQodGhpcyxoLCJ2YWx1ZSIpPT09Yil0aGlzLnZhbHVlPWh9fSl9aWYoZyl7Yz1mLnZhbEhvb2tzW2cubm9kZU5hbWUudG9Mb3dlckNhc2UoKV18fGYudmFsSG9va3NbZy50eXBlXTtpZihjJiYiZ2V0ImluIGMmJihkPWMuZ2V0KGcsInZhbHVlIikpIT09YilyZXR1cm4gZDtkPWcudmFsdWU7cmV0dXJuIHR5cGVvZiBkPT0ic3RyaW5nIj9kLnJlcGxhY2UocSwiIik6ZD09bnVsbD8iIjpkfX19fSksZi5leHRlbmQoe3ZhbEhvb2tzOntvcHRpb246e2dldDpmdW5jdGlvbihhKXt2YXIgYj1hLmF0dHJpYnV0ZXMudmFsdWU7cmV0dXJuIWJ8fGIuc3BlY2lmaWVkP2EudmFsdWU6YS50ZXh0fX0sc2VsZWN0OntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZz1hLnNlbGVjdGVkSW5kZXgsaD1bXSxpPWEub3B0aW9ucyxqPWEudHlwZT09PSJzZWxlY3Qtb25lIjtpZihnPDApcmV0dXJuIG51bGw7Yz1qP2c6MCxkPWo/ZysxOmkubGVuZ3RoO2Zvcig7YzxkO2MrKyl7ZT1pW2NdO2lmKGUuc2VsZWN0ZWQmJihmLnN1cHBvcnQub3B0RGlzYWJsZWQ/IWUuZGlzYWJsZWQ6ZS5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIik9PT1udWxsKSYmKCFlLnBhcmVudE5vZGUuZGlzYWJsZWR8fCFmLm5vZGVOYW1lKGUucGFyZW50Tm9kZSwib3B0Z3JvdXAiKSkpe2I9ZihlKS52YWwoKTtpZihqKXJldHVybiBiO2gucHVzaChiKX19aWYoaiYmIWgubGVuZ3RoJiZpLmxlbmd0aClyZXR1cm4gZihpW2ddKS52YWwoKTtyZXR1cm4gaH0sc2V0OmZ1bmN0aW9uKGEsYil7dmFyIGM9Zi5tYWtlQXJyYXkoYik7ZihhKS5maW5kKCJvcHRpb24iKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5zZWxlY3RlZD1mLmluQXJyYXkoZih0aGlzKS52YWwoKSxjKT49MH0pLGMubGVuZ3RofHwoYS5zZWxlY3RlZEluZGV4PS0xKTtyZXR1cm4gY319fSxhdHRyRm46e3ZhbDohMCxjc3M6ITAsaHRtbDohMCx0ZXh0OiEwLGRhdGE6ITAsd2lkdGg6ITAsaGVpZ2h0OiEwLG9mZnNldDohMH0sYXR0cjpmdW5jdGlvbihhLGMsZCxlKXt2YXIgZyxoLGksaj1hLm5vZGVUeXBlO2lmKCEhYSYmaiE9PTMmJmohPT04JiZqIT09Mil7aWYoZSYmYyBpbiBmLmF0dHJGbilyZXR1cm4gZihhKVtjXShkKTtpZih0eXBlb2YgYS5nZXRBdHRyaWJ1dGU9PSJ1bmRlZmluZWQiKXJldHVybiBmLnByb3AoYSxjLGQpO2k9aiE9PTF8fCFmLmlzWE1MRG9jKGEpLGkmJihjPWMudG9Mb3dlckNhc2UoKSxoPWYuYXR0ckhvb2tzW2NdfHwodS50ZXN0KGMpP3g6dykpO2lmKGQhPT1iKXtpZihkPT09bnVsbCl7Zi5yZW1vdmVBdHRyKGEsYyk7cmV0dXJufWlmKGgmJiJzZXQiaW4gaCYmaSYmKGc9aC5zZXQoYSxkLGMpKSE9PWIpcmV0dXJuIGc7YS5zZXRBdHRyaWJ1dGUoYywiIitkKTtyZXR1cm4gZH1pZihoJiYiZ2V0ImluIGgmJmkmJihnPWguZ2V0KGEsYykpIT09bnVsbClyZXR1cm4gZztnPWEuZ2V0QXR0cmlidXRlKGMpO3JldHVybiBnPT09bnVsbD9iOmd9fSxyZW1vdmVBdHRyOmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGcsaD0wO2lmKGImJmEubm9kZVR5cGU9PT0xKXtkPWIudG9Mb3dlckNhc2UoKS5zcGxpdChwKSxnPWQubGVuZ3RoO2Zvcig7aDxnO2grKyllPWRbaF0sZSYmKGM9Zi5wcm9wRml4W2VdfHxlLGYuYXR0cihhLGUsIiIpLGEucmVtb3ZlQXR0cmlidXRlKHY/ZTpjKSx1LnRlc3QoZSkmJmMgaW4gYSYmKGFbY109ITEpKX19LGF0dHJIb29rczp7dHlwZTp7c2V0OmZ1bmN0aW9uKGEsYil7aWYoci50ZXN0KGEubm9kZU5hbWUpJiZhLnBhcmVudE5vZGUpZi5lcnJvcigidHlwZSBwcm9wZXJ0eSBjYW4ndCBiZSBjaGFuZ2VkIik7ZWxzZSBpZighZi5zdXBwb3J0LnJhZGlvVmFsdWUmJmI9PT0icmFkaW8iJiZmLm5vZGVOYW1lKGEsImlucHV0Iikpe3ZhciBjPWEudmFsdWU7YS5zZXRBdHRyaWJ1dGUoInR5cGUiLGIpLGMmJihhLnZhbHVlPWMpO3JldHVybiBifX19LHZhbHVlOntnZXQ6ZnVuY3Rpb24oYSxiKXtpZih3JiZmLm5vZGVOYW1lKGEsImJ1dHRvbiIpKXJldHVybiB3LmdldChhLGIpO3JldHVybiBiIGluIGE/YS52YWx1ZTpudWxsfSxzZXQ6ZnVuY3Rpb24oYSxiLGMpe2lmKHcmJmYubm9kZU5hbWUoYSwiYnV0dG9uIikpcmV0dXJuIHcuc2V0KGEsYixjKTthLnZhbHVlPWJ9fX0scHJvcEZpeDp7dGFiaW5kZXg6InRhYkluZGV4IixyZWFkb25seToicmVhZE9ubHkiLCJmb3IiOiJodG1sRm9yIiwiY2xhc3MiOiJjbGFzc05hbWUiLG1heGxlbmd0aDoibWF4TGVuZ3RoIixjZWxsc3BhY2luZzoiY2VsbFNwYWNpbmciLGNlbGxwYWRkaW5nOiJjZWxsUGFkZGluZyIscm93c3Bhbjoicm93U3BhbiIsY29sc3BhbjoiY29sU3BhbiIsdXNlbWFwOiJ1c2VNYXAiLGZyYW1lYm9yZGVyOiJmcmFtZUJvcmRlciIsY29udGVudGVkaXRhYmxlOiJjb250ZW50RWRpdGFibGUifSxwcm9wOmZ1bmN0aW9uKGEsYyxkKXt2YXIgZSxnLGgsaT1hLm5vZGVUeXBlO2lmKCEhYSYmaSE9PTMmJmkhPT04JiZpIT09Mil7aD1pIT09MXx8IWYuaXNYTUxEb2MoYSksaCYmKGM9Zi5wcm9wRml4W2NdfHxjLGc9Zi5wcm9wSG9va3NbY10pO3JldHVybiBkIT09Yj9nJiYic2V0ImluIGcmJihlPWcuc2V0KGEsZCxjKSkhPT1iP2U6YVtjXT1kOmcmJiJnZXQiaW4gZyYmKGU9Zy5nZXQoYSxjKSkhPT1udWxsP2U6YVtjXX19LHByb3BIb29rczp7dGFiSW5kZXg6e2dldDpmdW5jdGlvbihhKXt2YXIgYz1hLmdldEF0dHJpYnV0ZU5vZGUoInRhYmluZGV4Iik7cmV0dXJuIGMmJmMuc3BlY2lmaWVkP3BhcnNlSW50KGMudmFsdWUsMTApOnMudGVzdChhLm5vZGVOYW1lKXx8dC50ZXN0KGEubm9kZU5hbWUpJiZhLmhyZWY/MDpifX19fSksZi5hdHRySG9va3MudGFiaW5kZXg9Zi5wcm9wSG9va3MudGFiSW5kZXgseD17Z2V0OmZ1bmN0aW9uKGEsYyl7dmFyIGQsZT1mLnByb3AoYSxjKTtyZXR1cm4gZT09PSEwfHx0eXBlb2YgZSE9ImJvb2xlYW4iJiYoZD1hLmdldEF0dHJpYnV0ZU5vZGUoYykpJiZkLm5vZGVWYWx1ZSE9PSExP2MudG9Mb3dlckNhc2UoKTpifSxzZXQ6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO2I9PT0hMT9mLnJlbW92ZUF0dHIoYSxjKTooZD1mLnByb3BGaXhbY118fGMsZCBpbiBhJiYoYVtkXT0hMCksYS5zZXRBdHRyaWJ1dGUoYyxjLnRvTG93ZXJDYXNlKCkpKTtyZXR1cm4gY319LHZ8fCh5PXtuYW1lOiEwLGlkOiEwfSx3PWYudmFsSG9va3MuYnV0dG9uPXtnZXQ6ZnVuY3Rpb24oYSxjKXt2YXIgZDtkPWEuZ2V0QXR0cmlidXRlTm9kZShjKTtyZXR1cm4gZCYmKHlbY10/ZC5ub2RlVmFsdWUhPT0iIjpkLnNwZWNpZmllZCk/ZC5ub2RlVmFsdWU6Yn0sc2V0OmZ1bmN0aW9uKGEsYixkKXt2YXIgZT1hLmdldEF0dHJpYnV0ZU5vZGUoZCk7ZXx8KGU9Yy5jcmVhdGVBdHRyaWJ1dGUoZCksYS5zZXRBdHRyaWJ1dGVOb2RlKGUpKTtyZXR1cm4gZS5ub2RlVmFsdWU9YisiIn19LGYuYXR0ckhvb2tzLnRhYmluZGV4LnNldD13LnNldCxmLmVhY2goWyJ3aWR0aCIsImhlaWdodCJdLGZ1bmN0aW9uKGEsYil7Zi5hdHRySG9va3NbYl09Zi5leHRlbmQoZi5hdHRySG9va3NbYl0se3NldDpmdW5jdGlvbihhLGMpe2lmKGM9PT0iIil7YS5zZXRBdHRyaWJ1dGUoYiwiYXV0byIpO3JldHVybiBjfX19KX0pLGYuYXR0ckhvb2tzLmNvbnRlbnRlZGl0YWJsZT17Z2V0OncuZ2V0LHNldDpmdW5jdGlvbihhLGIsYyl7Yj09PSIiJiYoYj0iZmFsc2UiKSx3LnNldChhLGIsYyl9fSksZi5zdXBwb3J0LmhyZWZOb3JtYWxpemVkfHxmLmVhY2goWyJocmVmIiwic3JjIiwid2lkdGgiLCJoZWlnaHQiXSxmdW5jdGlvbihhLGMpe2YuYXR0ckhvb2tzW2NdPWYuZXh0ZW5kKGYuYXR0ckhvb2tzW2NdLHtnZXQ6ZnVuY3Rpb24oYSl7dmFyIGQ9YS5nZXRBdHRyaWJ1dGUoYywyKTtyZXR1cm4gZD09PW51bGw/YjpkfX0pfSksZi5zdXBwb3J0LnN0eWxlfHwoZi5hdHRySG9va3Muc3R5bGU9e2dldDpmdW5jdGlvbihhKXtyZXR1cm4gYS5zdHlsZS5jc3NUZXh0LnRvTG93ZXJDYXNlKCl8fGJ9LHNldDpmdW5jdGlvbihhLGIpe3JldHVybiBhLnN0eWxlLmNzc1RleHQ9IiIrYn19KSxmLnN1cHBvcnQub3B0U2VsZWN0ZWR8fChmLnByb3BIb29rcy5zZWxlY3RlZD1mLmV4dGVuZChmLnByb3BIb29rcy5zZWxlY3RlZCx7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBiPWEucGFyZW50Tm9kZTtiJiYoYi5zZWxlY3RlZEluZGV4LGIucGFyZW50Tm9kZSYmYi5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgpO3JldHVybiBudWxsfX0pKSxmLnN1cHBvcnQuZW5jdHlwZXx8KGYucHJvcEZpeC5lbmN0eXBlPSJlbmNvZGluZyIpLGYuc3VwcG9ydC5jaGVja09ufHxmLmVhY2goWyJyYWRpbyIsImNoZWNrYm94Il0sZnVuY3Rpb24oKXtmLnZhbEhvb2tzW3RoaXNdPXtnZXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpPT09bnVsbD8ib24iOmEudmFsdWV9fX0pLGYuZWFjaChbInJhZGlvIiwiY2hlY2tib3giXSxmdW5jdGlvbigpe2YudmFsSG9va3NbdGhpc109Zi5leHRlbmQoZi52YWxIb29rc1t0aGlzXSx7c2V0OmZ1bmN0aW9uKGEsYil7aWYoZi5pc0FycmF5KGIpKXJldHVybiBhLmNoZWNrZWQ9Zi5pbkFycmF5KGYoYSkudmFsKCksYik+PTB9fSl9KTt2YXIgej0vXig/OnRleHRhcmVhfGlucHV0fHNlbGVjdCkkL2ksQT0vXihbXlwuXSopPyg/OlwuKC4rKSk/JC8sQj0vXGJob3ZlcihcLlxTKyk/XGIvLEM9L15rZXkvLEQ9L14oPzptb3VzZXxjb250ZXh0bWVudSl8Y2xpY2svLEU9L14oPzpmb2N1c2luZm9jdXN8Zm9jdXNvdXRibHVyKSQvLEY9L14oXHcqKSg/OiMoW1x3XC1dKykpPyg/OlwuKFtcd1wtXSspKT8kLyxHPWZ1bmN0aW9uKGEpe3ZhciBiPUYuZXhlYyhhKTtiJiYoYlsxXT0oYlsxXXx8IiIpLnRvTG93ZXJDYXNlKCksYlszXT1iWzNdJiZuZXcgUmVnRXhwKCIoPzpefFxccykiK2JbM10rIig/Olxcc3wkKSIpKTtyZXR1cm4gYn0sSD1mdW5jdGlvbihhLGIpe3ZhciBjPWEuYXR0cmlidXRlc3x8e307cmV0dXJuKCFiWzFdfHxhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1iWzFdKSYmKCFiWzJdfHwoYy5pZHx8e30pLnZhbHVlPT09YlsyXSkmJighYlszXXx8YlszXS50ZXN0KChjWyJjbGFzcyJdfHx7fSkudmFsdWUpKX0sST1mdW5jdGlvbihhKXtyZXR1cm4gZi5ldmVudC5zcGVjaWFsLmhvdmVyP2E6YS5yZXBsYWNlKEIsIm1vdXNlZW50ZXIkMSBtb3VzZWxlYXZlJDEiKX07CitmLmV2ZW50PXthZGQ6ZnVuY3Rpb24oYSxjLGQsZSxnKXt2YXIgaCxpLGosayxsLG0sbixvLHAscSxyLHM7aWYoIShhLm5vZGVUeXBlPT09M3x8YS5ub2RlVHlwZT09PTh8fCFjfHwhZHx8IShoPWYuX2RhdGEoYSkpKSl7ZC5oYW5kbGVyJiYocD1kLGQ9cC5oYW5kbGVyKSxkLmd1aWR8fChkLmd1aWQ9Zi5ndWlkKyspLGo9aC5ldmVudHMsanx8KGguZXZlbnRzPWo9e30pLGk9aC5oYW5kbGUsaXx8KGguaGFuZGxlPWk9ZnVuY3Rpb24oYSl7cmV0dXJuIHR5cGVvZiBmIT0idW5kZWZpbmVkIiYmKCFhfHxmLmV2ZW50LnRyaWdnZXJlZCE9PWEudHlwZSk/Zi5ldmVudC5kaXNwYXRjaC5hcHBseShpLmVsZW0sYXJndW1lbnRzKTpifSxpLmVsZW09YSksYz1mLnRyaW0oSShjKSkuc3BsaXQoIiAiKTtmb3Ioaz0wO2s8Yy5sZW5ndGg7aysrKXtsPUEuZXhlYyhjW2tdKXx8W10sbT1sWzFdLG49KGxbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxzPWYuZXZlbnQuc3BlY2lhbFttXXx8e30sbT0oZz9zLmRlbGVnYXRlVHlwZTpzLmJpbmRUeXBlKXx8bSxzPWYuZXZlbnQuc3BlY2lhbFttXXx8e30sbz1mLmV4dGVuZCh7dHlwZTptLG9yaWdUeXBlOmxbMV0sZGF0YTplLGhhbmRsZXI6ZCxndWlkOmQuZ3VpZCxzZWxlY3RvcjpnLHF1aWNrOkcoZyksbmFtZXNwYWNlOm4uam9pbigiLiIpfSxwKSxyPWpbbV07aWYoIXIpe3I9alttXT1bXSxyLmRlbGVnYXRlQ291bnQ9MDtpZighcy5zZXR1cHx8cy5zZXR1cC5jYWxsKGEsZSxuLGkpPT09ITEpYS5hZGRFdmVudExpc3RlbmVyP2EuYWRkRXZlbnRMaXN0ZW5lcihtLGksITEpOmEuYXR0YWNoRXZlbnQmJmEuYXR0YWNoRXZlbnQoIm9uIittLGkpfXMuYWRkJiYocy5hZGQuY2FsbChhLG8pLG8uaGFuZGxlci5ndWlkfHwoby5oYW5kbGVyLmd1aWQ9ZC5ndWlkKSksZz9yLnNwbGljZShyLmRlbGVnYXRlQ291bnQrKywwLG8pOnIucHVzaChvKSxmLmV2ZW50Lmdsb2JhbFttXT0hMH1hPW51bGx9fSxnbG9iYWw6e30scmVtb3ZlOmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGc9Zi5oYXNEYXRhKGEpJiZmLl9kYXRhKGEpLGgsaSxqLGssbCxtLG4sbyxwLHEscixzO2lmKCEhZyYmISEobz1nLmV2ZW50cykpe2I9Zi50cmltKEkoYnx8IiIpKS5zcGxpdCgiICIpO2ZvcihoPTA7aDxiLmxlbmd0aDtoKyspe2k9QS5leGVjKGJbaF0pfHxbXSxqPWs9aVsxXSxsPWlbMl07aWYoIWope2ZvcihqIGluIG8pZi5ldmVudC5yZW1vdmUoYSxqK2JbaF0sYyxkLCEwKTtjb250aW51ZX1wPWYuZXZlbnQuc3BlY2lhbFtqXXx8e30saj0oZD9wLmRlbGVnYXRlVHlwZTpwLmJpbmRUeXBlKXx8aixyPW9bal18fFtdLG09ci5sZW5ndGgsbD1sP25ldyBSZWdFeHAoIihefFxcLikiK2wuc3BsaXQoIi4iKS5zb3J0KCkuam9pbigiXFwuKD86LipcXC4pPyIpKyIoXFwufCQpIik6bnVsbDtmb3Iobj0wO248ci5sZW5ndGg7bisrKXM9cltuXSwoZXx8az09PXMub3JpZ1R5cGUpJiYoIWN8fGMuZ3VpZD09PXMuZ3VpZCkmJighbHx8bC50ZXN0KHMubmFtZXNwYWNlKSkmJighZHx8ZD09PXMuc2VsZWN0b3J8fGQ9PT0iKioiJiZzLnNlbGVjdG9yKSYmKHIuc3BsaWNlKG4tLSwxKSxzLnNlbGVjdG9yJiZyLmRlbGVnYXRlQ291bnQtLSxwLnJlbW92ZSYmcC5yZW1vdmUuY2FsbChhLHMpKTtyLmxlbmd0aD09PTAmJm0hPT1yLmxlbmd0aCYmKCghcC50ZWFyZG93bnx8cC50ZWFyZG93bi5jYWxsKGEsbCk9PT0hMSkmJmYucmVtb3ZlRXZlbnQoYSxqLGcuaGFuZGxlKSxkZWxldGUgb1tqXSl9Zi5pc0VtcHR5T2JqZWN0KG8pJiYocT1nLmhhbmRsZSxxJiYocS5lbGVtPW51bGwpLGYucmVtb3ZlRGF0YShhLFsiZXZlbnRzIiwiaGFuZGxlIl0sITApKX19LGN1c3RvbUV2ZW50OntnZXREYXRhOiEwLHNldERhdGE6ITAsY2hhbmdlRGF0YTohMH0sdHJpZ2dlcjpmdW5jdGlvbihjLGQsZSxnKXtpZighZXx8ZS5ub2RlVHlwZSE9PTMmJmUubm9kZVR5cGUhPT04KXt2YXIgaD1jLnR5cGV8fGMsaT1bXSxqLGssbCxtLG4sbyxwLHEscixzO2lmKEUudGVzdChoK2YuZXZlbnQudHJpZ2dlcmVkKSlyZXR1cm47aC5pbmRleE9mKCIhIik+PTAmJihoPWguc2xpY2UoMCwtMSksaz0hMCksaC5pbmRleE9mKCIuIik+PTAmJihpPWguc3BsaXQoIi4iKSxoPWkuc2hpZnQoKSxpLnNvcnQoKSk7aWYoKCFlfHxmLmV2ZW50LmN1c3RvbUV2ZW50W2hdKSYmIWYuZXZlbnQuZ2xvYmFsW2hdKXJldHVybjtjPXR5cGVvZiBjPT0ib2JqZWN0Ij9jW2YuZXhwYW5kb10/YzpuZXcgZi5FdmVudChoLGMpOm5ldyBmLkV2ZW50KGgpLGMudHlwZT1oLGMuaXNUcmlnZ2VyPSEwLGMuZXhjbHVzaXZlPWssYy5uYW1lc3BhY2U9aS5qb2luKCIuIiksYy5uYW1lc3BhY2VfcmU9Yy5uYW1lc3BhY2U/bmV3IFJlZ0V4cCgiKF58XFwuKSIraS5qb2luKCJcXC4oPzouKlxcLik/IikrIihcXC58JCkiKTpudWxsLG89aC5pbmRleE9mKCI6Iik8MD8ib24iK2g6IiI7aWYoIWUpe2o9Zi5jYWNoZTtmb3IobCBpbiBqKWpbbF0uZXZlbnRzJiZqW2xdLmV2ZW50c1toXSYmZi5ldmVudC50cmlnZ2VyKGMsZCxqW2xdLmhhbmRsZS5lbGVtLCEwKTtyZXR1cm59Yy5yZXN1bHQ9YixjLnRhcmdldHx8KGMudGFyZ2V0PWUpLGQ9ZCE9bnVsbD9mLm1ha2VBcnJheShkKTpbXSxkLnVuc2hpZnQoYykscD1mLmV2ZW50LnNwZWNpYWxbaF18fHt9O2lmKHAudHJpZ2dlciYmcC50cmlnZ2VyLmFwcGx5KGUsZCk9PT0hMSlyZXR1cm47cj1bW2UscC5iaW5kVHlwZXx8aF1dO2lmKCFnJiYhcC5ub0J1YmJsZSYmIWYuaXNXaW5kb3coZSkpe3M9cC5kZWxlZ2F0ZVR5cGV8fGgsbT1FLnRlc3QocytoKT9lOmUucGFyZW50Tm9kZSxuPW51bGw7Zm9yKDttO209bS5wYXJlbnROb2RlKXIucHVzaChbbSxzXSksbj1tO24mJm49PT1lLm93bmVyRG9jdW1lbnQmJnIucHVzaChbbi5kZWZhdWx0Vmlld3x8bi5wYXJlbnRXaW5kb3d8fGEsc10pfWZvcihsPTA7bDxyLmxlbmd0aCYmIWMuaXNQcm9wYWdhdGlvblN0b3BwZWQoKTtsKyspbT1yW2xdWzBdLGMudHlwZT1yW2xdWzFdLHE9KGYuX2RhdGEobSwiZXZlbnRzIil8fHt9KVtjLnR5cGVdJiZmLl9kYXRhKG0sImhhbmRsZSIpLHEmJnEuYXBwbHkobSxkKSxxPW8mJm1bb10scSYmZi5hY2NlcHREYXRhKG0pJiZxLmFwcGx5KG0sZCk9PT0hMSYmYy5wcmV2ZW50RGVmYXVsdCgpO2MudHlwZT1oLCFnJiYhYy5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmKCFwLl9kZWZhdWx0fHxwLl9kZWZhdWx0LmFwcGx5KGUub3duZXJEb2N1bWVudCxkKT09PSExKSYmKGghPT0iY2xpY2sifHwhZi5ub2RlTmFtZShlLCJhIikpJiZmLmFjY2VwdERhdGEoZSkmJm8mJmVbaF0mJihoIT09ImZvY3VzIiYmaCE9PSJibHVyInx8Yy50YXJnZXQub2Zmc2V0V2lkdGghPT0wKSYmIWYuaXNXaW5kb3coZSkmJihuPWVbb10sbiYmKGVbb109bnVsbCksZi5ldmVudC50cmlnZ2VyZWQ9aCxlW2hdKCksZi5ldmVudC50cmlnZ2VyZWQ9YixuJiYoZVtvXT1uKSk7cmV0dXJuIGMucmVzdWx0fX0sZGlzcGF0Y2g6ZnVuY3Rpb24oYyl7Yz1mLmV2ZW50LmZpeChjfHxhLmV2ZW50KTt2YXIgZD0oZi5fZGF0YSh0aGlzLCJldmVudHMiKXx8e30pW2MudHlwZV18fFtdLGU9ZC5kZWxlZ2F0ZUNvdW50LGc9W10uc2xpY2UuY2FsbChhcmd1bWVudHMsMCksaD0hYy5leGNsdXNpdmUmJiFjLm5hbWVzcGFjZSxpPVtdLGosayxsLG0sbixvLHAscSxyLHMsdDtnWzBdPWMsYy5kZWxlZ2F0ZVRhcmdldD10aGlzO2lmKGUmJiFjLnRhcmdldC5kaXNhYmxlZCYmKCFjLmJ1dHRvbnx8Yy50eXBlIT09ImNsaWNrIikpe209Zih0aGlzKSxtLmNvbnRleHQ9dGhpcy5vd25lckRvY3VtZW50fHx0aGlzO2ZvcihsPWMudGFyZ2V0O2whPXRoaXM7bD1sLnBhcmVudE5vZGV8fHRoaXMpe289e30scT1bXSxtWzBdPWw7Zm9yKGo9MDtqPGU7aisrKXI9ZFtqXSxzPXIuc2VsZWN0b3Isb1tzXT09PWImJihvW3NdPXIucXVpY2s/SChsLHIucXVpY2spOm0uaXMocykpLG9bc10mJnEucHVzaChyKTtxLmxlbmd0aCYmaS5wdXNoKHtlbGVtOmwsbWF0Y2hlczpxfSl9fWQubGVuZ3RoPmUmJmkucHVzaCh7ZWxlbTp0aGlzLG1hdGNoZXM6ZC5zbGljZShlKX0pO2ZvcihqPTA7ajxpLmxlbmd0aCYmIWMuaXNQcm9wYWdhdGlvblN0b3BwZWQoKTtqKyspe3A9aVtqXSxjLmN1cnJlbnRUYXJnZXQ9cC5lbGVtO2ZvcihrPTA7azxwLm1hdGNoZXMubGVuZ3RoJiYhYy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpO2srKyl7cj1wLm1hdGNoZXNba107aWYoaHx8IWMubmFtZXNwYWNlJiYhci5uYW1lc3BhY2V8fGMubmFtZXNwYWNlX3JlJiZjLm5hbWVzcGFjZV9yZS50ZXN0KHIubmFtZXNwYWNlKSljLmRhdGE9ci5kYXRhLGMuaGFuZGxlT2JqPXIsbj0oKGYuZXZlbnQuc3BlY2lhbFtyLm9yaWdUeXBlXXx8e30pLmhhbmRsZXx8ci5oYW5kbGVyKS5hcHBseShwLmVsZW0sZyksbiE9PWImJihjLnJlc3VsdD1uLG49PT0hMSYmKGMucHJldmVudERlZmF1bHQoKSxjLnN0b3BQcm9wYWdhdGlvbigpKSl9fXJldHVybiBjLnJlc3VsdH0scHJvcHM6ImF0dHJDaGFuZ2UgYXR0ck5hbWUgcmVsYXRlZE5vZGUgc3JjRWxlbWVudCBhbHRLZXkgYnViYmxlcyBjYW5jZWxhYmxlIGN0cmxLZXkgY3VycmVudFRhcmdldCBldmVudFBoYXNlIG1ldGFLZXkgcmVsYXRlZFRhcmdldCBzaGlmdEtleSB0YXJnZXQgdGltZVN0YW1wIHZpZXcgd2hpY2giLnNwbGl0KCIgIiksZml4SG9va3M6e30sa2V5SG9va3M6e3Byb3BzOiJjaGFyIGNoYXJDb2RlIGtleSBrZXlDb2RlIi5zcGxpdCgiICIpLGZpbHRlcjpmdW5jdGlvbihhLGIpe2Eud2hpY2g9PW51bGwmJihhLndoaWNoPWIuY2hhckNvZGUhPW51bGw/Yi5jaGFyQ29kZTpiLmtleUNvZGUpO3JldHVybiBhfX0sbW91c2VIb29rczp7cHJvcHM6ImJ1dHRvbiBidXR0b25zIGNsaWVudFggY2xpZW50WSBmcm9tRWxlbWVudCBvZmZzZXRYIG9mZnNldFkgcGFnZVggcGFnZVkgc2NyZWVuWCBzY3JlZW5ZIHRvRWxlbWVudCIuc3BsaXQoIiAiKSxmaWx0ZXI6ZnVuY3Rpb24oYSxkKXt2YXIgZSxmLGcsaD1kLmJ1dHRvbixpPWQuZnJvbUVsZW1lbnQ7YS5wYWdlWD09bnVsbCYmZC5jbGllbnRYIT1udWxsJiYoZT1hLnRhcmdldC5vd25lckRvY3VtZW50fHxjLGY9ZS5kb2N1bWVudEVsZW1lbnQsZz1lLmJvZHksYS5wYWdlWD1kLmNsaWVudFgrKGYmJmYuc2Nyb2xsTGVmdHx8ZyYmZy5zY3JvbGxMZWZ0fHwwKS0oZiYmZi5jbGllbnRMZWZ0fHxnJiZnLmNsaWVudExlZnR8fDApLGEucGFnZVk9ZC5jbGllbnRZKyhmJiZmLnNjcm9sbFRvcHx8ZyYmZy5zY3JvbGxUb3B8fDApLShmJiZmLmNsaWVudFRvcHx8ZyYmZy5jbGllbnRUb3B8fDApKSwhYS5yZWxhdGVkVGFyZ2V0JiZpJiYoYS5yZWxhdGVkVGFyZ2V0PWk9PT1hLnRhcmdldD9kLnRvRWxlbWVudDppKSwhYS53aGljaCYmaCE9PWImJihhLndoaWNoPWgmMT8xOmgmMj8zOmgmND8yOjApO3JldHVybiBhfX0sZml4OmZ1bmN0aW9uKGEpe2lmKGFbZi5leHBhbmRvXSlyZXR1cm4gYTt2YXIgZCxlLGc9YSxoPWYuZXZlbnQuZml4SG9va3NbYS50eXBlXXx8e30saT1oLnByb3BzP3RoaXMucHJvcHMuY29uY2F0KGgucHJvcHMpOnRoaXMucHJvcHM7YT1mLkV2ZW50KGcpO2ZvcihkPWkubGVuZ3RoO2Q7KWU9aVstLWRdLGFbZV09Z1tlXTthLnRhcmdldHx8KGEudGFyZ2V0PWcuc3JjRWxlbWVudHx8YyksYS50YXJnZXQubm9kZVR5cGU9PT0zJiYoYS50YXJnZXQ9YS50YXJnZXQucGFyZW50Tm9kZSksYS5tZXRhS2V5PT09YiYmKGEubWV0YUtleT1hLmN0cmxLZXkpO3JldHVybiBoLmZpbHRlcj9oLmZpbHRlcihhLGcpOmF9LHNwZWNpYWw6e3JlYWR5OntzZXR1cDpmLmJpbmRSZWFkeX0sbG9hZDp7bm9CdWJibGU6ITB9LGZvY3VzOntkZWxlZ2F0ZVR5cGU6ImZvY3VzaW4ifSxibHVyOntkZWxlZ2F0ZVR5cGU6ImZvY3Vzb3V0In0sYmVmb3JldW5sb2FkOntzZXR1cDpmdW5jdGlvbihhLGIsYyl7Zi5pc1dpbmRvdyh0aGlzKSYmKHRoaXMub25iZWZvcmV1bmxvYWQ9Yyl9LHRlYXJkb3duOmZ1bmN0aW9uKGEsYil7dGhpcy5vbmJlZm9yZXVubG9hZD09PWImJih0aGlzLm9uYmVmb3JldW5sb2FkPW51bGwpfX19LHNpbXVsYXRlOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPWYuZXh0ZW5kKG5ldyBmLkV2ZW50LGMse3R5cGU6YSxpc1NpbXVsYXRlZDohMCxvcmlnaW5hbEV2ZW50Ont9fSk7ZD9mLmV2ZW50LnRyaWdnZXIoZSxudWxsLGIpOmYuZXZlbnQuZGlzcGF0Y2guY2FsbChiLGUpLGUuaXNEZWZhdWx0UHJldmVudGVkKCkmJmMucHJldmVudERlZmF1bHQoKX19LGYuZXZlbnQuaGFuZGxlPWYuZXZlbnQuZGlzcGF0Y2gsZi5yZW1vdmVFdmVudD1jLnJlbW92ZUV2ZW50TGlzdGVuZXI/ZnVuY3Rpb24oYSxiLGMpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lciYmYS5yZW1vdmVFdmVudExpc3RlbmVyKGIsYywhMSl9OmZ1bmN0aW9uKGEsYixjKXthLmRldGFjaEV2ZW50JiZhLmRldGFjaEV2ZW50KCJvbiIrYixjKX0sZi5FdmVudD1mdW5jdGlvbihhLGIpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGYuRXZlbnQpKXJldHVybiBuZXcgZi5FdmVudChhLGIpO2EmJmEudHlwZT8odGhpcy5vcmlnaW5hbEV2ZW50PWEsdGhpcy50eXBlPWEudHlwZSx0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1hLmRlZmF1bHRQcmV2ZW50ZWR8fGEucmV0dXJuVmFsdWU9PT0hMXx8YS5nZXRQcmV2ZW50RGVmYXVsdCYmYS5nZXRQcmV2ZW50RGVmYXVsdCgpP0s6Sik6dGhpcy50eXBlPWEsYiYmZi5leHRlbmQodGhpcyxiKSx0aGlzLnRpbWVTdGFtcD1hJiZhLnRpbWVTdGFtcHx8Zi5ub3coKSx0aGlzW2YuZXhwYW5kb109ITB9LGYuRXZlbnQucHJvdG90eXBlPXtwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3RoaXMuaXNEZWZhdWx0UHJldmVudGVkPUs7dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50OyFhfHwoYS5wcmV2ZW50RGVmYXVsdD9hLnByZXZlbnREZWZhdWx0KCk6YS5yZXR1cm5WYWx1ZT0hMSl9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3RoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9Szt2YXIgYT10aGlzLm9yaWdpbmFsRXZlbnQ7IWF8fChhLnN0b3BQcm9wYWdhdGlvbiYmYS5zdG9wUHJvcGFnYXRpb24oKSxhLmNhbmNlbEJ1YmJsZT0hMCl9LHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3RoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9Syx0aGlzLnN0b3BQcm9wYWdhdGlvbigpfSxpc0RlZmF1bHRQcmV2ZW50ZWQ6Sixpc1Byb3BhZ2F0aW9uU3RvcHBlZDpKLGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOkp9LGYuZWFjaCh7bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9LGZ1bmN0aW9uKGEsYil7Zi5ldmVudC5zcGVjaWFsW2FdPXtkZWxlZ2F0ZVR5cGU6YixiaW5kVHlwZTpiLGhhbmRsZTpmdW5jdGlvbihhKXt2YXIgYz10aGlzLGQ9YS5yZWxhdGVkVGFyZ2V0LGU9YS5oYW5kbGVPYmosZz1lLnNlbGVjdG9yLGg7aWYoIWR8fGQhPT1jJiYhZi5jb250YWlucyhjLGQpKWEudHlwZT1lLm9yaWdUeXBlLGg9ZS5oYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxhLnR5cGU9YjtyZXR1cm4gaH19fSksZi5zdXBwb3J0LnN1Ym1pdEJ1YmJsZXN8fChmLmV2ZW50LnNwZWNpYWwuc3VibWl0PXtzZXR1cDpmdW5jdGlvbigpe2lmKGYubm9kZU5hbWUodGhpcywiZm9ybSIpKXJldHVybiExO2YuZXZlbnQuYWRkKHRoaXMsImNsaWNrLl9zdWJtaXQga2V5cHJlc3MuX3N1Ym1pdCIsZnVuY3Rpb24oYSl7dmFyIGM9YS50YXJnZXQsZD1mLm5vZGVOYW1lKGMsImlucHV0Iil8fGYubm9kZU5hbWUoYywiYnV0dG9uIik/Yy5mb3JtOmI7ZCYmIWQuX3N1Ym1pdF9hdHRhY2hlZCYmKGYuZXZlbnQuYWRkKGQsInN1Ym1pdC5fc3VibWl0IixmdW5jdGlvbihhKXt0aGlzLnBhcmVudE5vZGUmJiFhLmlzVHJpZ2dlciYmZi5ldmVudC5zaW11bGF0ZSgic3VibWl0Iix0aGlzLnBhcmVudE5vZGUsYSwhMCl9KSxkLl9zdWJtaXRfYXR0YWNoZWQ9ITApfSl9LHRlYXJkb3duOmZ1bmN0aW9uKCl7aWYoZi5ub2RlTmFtZSh0aGlzLCJmb3JtIikpcmV0dXJuITE7Zi5ldmVudC5yZW1vdmUodGhpcywiLl9zdWJtaXQiKX19KSxmLnN1cHBvcnQuY2hhbmdlQnViYmxlc3x8KGYuZXZlbnQuc3BlY2lhbC5jaGFuZ2U9e3NldHVwOmZ1bmN0aW9uKCl7aWYoei50ZXN0KHRoaXMubm9kZU5hbWUpKXtpZih0aGlzLnR5cGU9PT0iY2hlY2tib3gifHx0aGlzLnR5cGU9PT0icmFkaW8iKWYuZXZlbnQuYWRkKHRoaXMsInByb3BlcnR5Y2hhbmdlLl9jaGFuZ2UiLGZ1bmN0aW9uKGEpe2Eub3JpZ2luYWxFdmVudC5wcm9wZXJ0eU5hbWU9PT0iY2hlY2tlZCImJih0aGlzLl9qdXN0X2NoYW5nZWQ9ITApfSksZi5ldmVudC5hZGQodGhpcywiY2xpY2suX2NoYW5nZSIsZnVuY3Rpb24oYSl7dGhpcy5fanVzdF9jaGFuZ2VkJiYhYS5pc1RyaWdnZXImJih0aGlzLl9qdXN0X2NoYW5nZWQ9ITEsZi5ldmVudC5zaW11bGF0ZSgiY2hhbmdlIix0aGlzLGEsITApKX0pO3JldHVybiExfWYuZXZlbnQuYWRkKHRoaXMsImJlZm9yZWFjdGl2YXRlLl9jaGFuZ2UiLGZ1bmN0aW9uKGEpe3ZhciBiPWEudGFyZ2V0O3oudGVzdChiLm5vZGVOYW1lKSYmIWIuX2NoYW5nZV9hdHRhY2hlZCYmKGYuZXZlbnQuYWRkKGIsImNoYW5nZS5fY2hhbmdlIixmdW5jdGlvbihhKXt0aGlzLnBhcmVudE5vZGUmJiFhLmlzU2ltdWxhdGVkJiYhYS5pc1RyaWdnZXImJmYuZXZlbnQuc2ltdWxhdGUoImNoYW5nZSIsdGhpcy5wYXJlbnROb2RlLGEsITApfSksYi5fY2hhbmdlX2F0dGFjaGVkPSEwKX0pfSxoYW5kbGU6ZnVuY3Rpb24oYSl7dmFyIGI9YS50YXJnZXQ7aWYodGhpcyE9PWJ8fGEuaXNTaW11bGF0ZWR8fGEuaXNUcmlnZ2VyfHxiLnR5cGUhPT0icmFkaW8iJiZiLnR5cGUhPT0iY2hlY2tib3giKXJldHVybiBhLmhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sdGVhcmRvd246ZnVuY3Rpb24oKXtmLmV2ZW50LnJlbW92ZSh0aGlzLCIuX2NoYW5nZSIpO3JldHVybiB6LnRlc3QodGhpcy5ub2RlTmFtZSl9fSksZi5zdXBwb3J0LmZvY3VzaW5CdWJibGVzfHxmLmVhY2goe2ZvY3VzOiJmb2N1c2luIixibHVyOiJmb2N1c291dCJ9LGZ1bmN0aW9uKGEsYil7dmFyIGQ9MCxlPWZ1bmN0aW9uKGEpe2YuZXZlbnQuc2ltdWxhdGUoYixhLnRhcmdldCxmLmV2ZW50LmZpeChhKSwhMCl9O2YuZXZlbnQuc3BlY2lhbFtiXT17c2V0dXA6ZnVuY3Rpb24oKXtkKys9PT0wJiZjLmFkZEV2ZW50TGlzdGVuZXIoYSxlLCEwKX0sdGVhcmRvd246ZnVuY3Rpb24oKXstLWQ9PT0wJiZjLnJlbW92ZUV2ZW50TGlzdGVuZXIoYSxlLCEwKX19fSksZi5mbi5leHRlbmQoe29uOmZ1bmN0aW9uKGEsYyxkLGUsZyl7dmFyIGgsaTtpZih0eXBlb2YgYT09Im9iamVjdCIpe3R5cGVvZiBjIT0ic3RyaW5nIiYmKGQ9YyxjPWIpO2ZvcihpIGluIGEpdGhpcy5vbihpLGMsZCxhW2ldLGcpO3JldHVybiB0aGlzfWQ9PW51bGwmJmU9PW51bGw/KGU9YyxkPWM9Yik6ZT09bnVsbCYmKHR5cGVvZiBjPT0ic3RyaW5nIj8oZT1kLGQ9Yik6KGU9ZCxkPWMsYz1iKSk7aWYoZT09PSExKWU9SjtlbHNlIGlmKCFlKXJldHVybiB0aGlzO2c9PT0xJiYoaD1lLGU9ZnVuY3Rpb24oYSl7ZigpLm9mZihhKTtyZXR1cm4gaC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGUuZ3VpZD1oLmd1aWR8fChoLmd1aWQ9Zi5ndWlkKyspKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Zi5ldmVudC5hZGQodGhpcyxhLGUsZCxjKX0pfSxvbmU6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHRoaXMub24uY2FsbCh0aGlzLGEsYixjLGQsMSl9LG9mZjpmdW5jdGlvbihhLGMsZCl7aWYoYSYmYS5wcmV2ZW50RGVmYXVsdCYmYS5oYW5kbGVPYmope3ZhciBlPWEuaGFuZGxlT2JqO2YoYS5kZWxlZ2F0ZVRhcmdldCkub2ZmKGUubmFtZXNwYWNlP2UudHlwZSsiLiIrZS5uYW1lc3BhY2U6ZS50eXBlLGUuc2VsZWN0b3IsZS5oYW5kbGVyKTtyZXR1cm4gdGhpc31pZih0eXBlb2YgYT09Im9iamVjdCIpe2Zvcih2YXIgZyBpbiBhKXRoaXMub2ZmKGcsYyxhW2ddKTtyZXR1cm4gdGhpc31pZihjPT09ITF8fHR5cGVvZiBjPT0iZnVuY3Rpb24iKWQ9YyxjPWI7ZD09PSExJiYoZD1KKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Zi5ldmVudC5yZW1vdmUodGhpcyxhLGQsYyl9KX0sYmluZDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMub24oYSxudWxsLGIsYyl9LHVuYmluZDpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm9mZihhLG51bGwsYil9LGxpdmU6ZnVuY3Rpb24oYSxiLGMpe2YodGhpcy5jb250ZXh0KS5vbihhLHRoaXMuc2VsZWN0b3IsYixjKTtyZXR1cm4gdGhpc30sZGllOmZ1bmN0aW9uKGEsYil7Zih0aGlzLmNvbnRleHQpLm9mZihhLHRoaXMuc2VsZWN0b3J8fCIqKiIsYik7cmV0dXJuIHRoaXN9LGRlbGVnYXRlOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLm9uKGIsYSxjLGQpfSx1bmRlbGVnYXRlOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09MT90aGlzLm9mZihhLCIqKiIpOnRoaXMub2ZmKGIsYSxjKX0sdHJpZ2dlcjpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmLmV2ZW50LnRyaWdnZXIoYSxiLHRoaXMpfSl9LHRyaWdnZXJIYW5kbGVyOmZ1bmN0aW9uKGEsYil7aWYodGhpc1swXSlyZXR1cm4gZi5ldmVudC50cmlnZ2VyKGEsYix0aGlzWzBdLCEwKX0sdG9nZ2xlOmZ1bmN0aW9uKGEpe3ZhciBiPWFyZ3VtZW50cyxjPWEuZ3VpZHx8Zi5ndWlkKyssZD0wLGU9ZnVuY3Rpb24oYyl7dmFyIGU9KGYuX2RhdGEodGhpcywibGFzdFRvZ2dsZSIrYS5ndWlkKXx8MCklZDtmLl9kYXRhKHRoaXMsImxhc3RUb2dnbGUiK2EuZ3VpZCxlKzEpLGMucHJldmVudERlZmF1bHQoKTtyZXR1cm4gYltlXS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fCExfTtlLmd1aWQ9Yzt3aGlsZShkPGIubGVuZ3RoKWJbZCsrXS5ndWlkPWM7cmV0dXJuIHRoaXMuY2xpY2soZSl9LGhvdmVyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMubW91c2VlbnRlcihhKS5tb3VzZWxlYXZlKGJ8fGEpfX0pLGYuZWFjaCgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBlcnJvciBjb250ZXh0bWVudSIuc3BsaXQoIiAiKSxmdW5jdGlvbihhLGIpe2YuZm5bYl09ZnVuY3Rpb24oYSxjKXtjPT1udWxsJiYoYz1hLGE9bnVsbCk7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MD90aGlzLm9uKGIsbnVsbCxhLGMpOnRoaXMudHJpZ2dlcihiKX0sZi5hdHRyRm4mJihmLmF0dHJGbltiXT0hMCksQy50ZXN0KGIpJiYoZi5ldmVudC5maXhIb29rc1tiXT1mLmV2ZW50LmtleUhvb2tzKSxELnRlc3QoYikmJihmLmV2ZW50LmZpeEhvb2tzW2JdPWYuZXZlbnQubW91c2VIb29rcyl9KSxmdW5jdGlvbigpe2Z1bmN0aW9uIHgoYSxiLGMsZSxmLGcpe2Zvcih2YXIgaD0wLGk9ZS5sZW5ndGg7aDxpO2grKyl7dmFyIGo9ZVtoXTtpZihqKXt2YXIgaz0hMTtqPWpbYV07d2hpbGUoail7aWYoaltkXT09PWMpe2s9ZVtqLnNpenNldF07YnJlYWt9aWYoai5ub2RlVHlwZT09PTEpe2d8fChqW2RdPWMsai5zaXpzZXQ9aCk7aWYodHlwZW9mIGIhPSJzdHJpbmciKXtpZihqPT09Yil7az0hMDticmVha319ZWxzZSBpZihtLmZpbHRlcihiLFtqXSkubGVuZ3RoPjApe2s9ajticmVha319aj1qW2FdfWVbaF09a319fWZ1bmN0aW9uIHcoYSxiLGMsZSxmLGcpe2Zvcih2YXIgaD0wLGk9ZS5sZW5ndGg7aDxpO2grKyl7dmFyIGo9ZVtoXTtpZihqKXt2YXIgaz0hMTtqPWpbYV07d2hpbGUoail7aWYoaltkXT09PWMpe2s9ZVtqLnNpenNldF07YnJlYWt9ai5ub2RlVHlwZT09PTEmJiFnJiYoaltkXT1jLGouc2l6c2V0PWgpO2lmKGoubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWIpe2s9ajticmVha31qPWpbYV19ZVtoXT1rfX19dmFyIGE9LygoPzpcKCg/OlwoW14oKV0rXCl8W14oKV0rKStcKXxcWyg/OlxbW15cW1xdXSpcXXxbJyJdW14nIl0qWyciXXxbXlxbXF0nIl0rKStcXXxcXC58W14gPit+LChcW1xcXSspK3xbPit+XSkoXHMqLFxzKik/KCg/Oi58XHJ8XG4pKikvZyxkPSJzaXpjYWNoZSIrKE1hdGgucmFuZG9tKCkrIiIpLnJlcGxhY2UoIi4iLCIiKSxlPTAsZz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGg9ITEsaT0hMCxqPS9cXC9nLGs9L1xyXG4vZyxsPS9cVy87WzAsMF0uc29ydChmdW5jdGlvbigpe2k9ITE7cmV0dXJuIDB9KTt2YXIgbT1mdW5jdGlvbihiLGQsZSxmKXtlPWV8fFtdLGQ9ZHx8Yzt2YXIgaD1kO2lmKGQubm9kZVR5cGUhPT0xJiZkLm5vZGVUeXBlIT09OSlyZXR1cm5bXTtpZighYnx8dHlwZW9mIGIhPSJzdHJpbmciKXJldHVybiBlO3ZhciBpLGosayxsLG4scSxyLHQsdT0hMCx2PW0uaXNYTUwoZCksdz1bXSx4PWI7ZG97YS5leGVjKCIiKSxpPWEuZXhlYyh4KTtpZihpKXt4PWlbM10sdy5wdXNoKGlbMV0pO2lmKGlbMl0pe2w9aVszXTticmVha319fXdoaWxlKGkpO2lmKHcubGVuZ3RoPjEmJnAuZXhlYyhiKSlpZih3Lmxlbmd0aD09PTImJm8ucmVsYXRpdmVbd1swXV0paj15KHdbMF0rd1sxXSxkLGYpO2Vsc2V7aj1vLnJlbGF0aXZlW3dbMF1dP1tkXTptKHcuc2hpZnQoKSxkKTt3aGlsZSh3Lmxlbmd0aCliPXcuc2hpZnQoKSxvLnJlbGF0aXZlW2JdJiYoYis9dy5zaGlmdCgpKSxqPXkoYixqLGYpfWVsc2V7IWYmJncubGVuZ3RoPjEmJmQubm9kZVR5cGU9PT05JiYhdiYmby5tYXRjaC5JRC50ZXN0KHdbMF0pJiYhby5tYXRjaC5JRC50ZXN0KHdbdy5sZW5ndGgtMV0pJiYobj1tLmZpbmQody5zaGlmdCgpLGQsdiksZD1uLmV4cHI/bS5maWx0ZXIobi5leHByLG4uc2V0KVswXTpuLnNldFswXSk7aWYoZCl7bj1mP3tleHByOncucG9wKCksc2V0OnMoZil9Om0uZmluZCh3LnBvcCgpLHcubGVuZ3RoPT09MSYmKHdbMF09PT0ifiJ8fHdbMF09PT0iKyIpJiZkLnBhcmVudE5vZGU/ZC5wYXJlbnROb2RlOmQsdiksaj1uLmV4cHI/bS5maWx0ZXIobi5leHByLG4uc2V0KTpuLnNldCx3Lmxlbmd0aD4wP2s9cyhqKTp1PSExO3doaWxlKHcubGVuZ3RoKXE9dy5wb3AoKSxyPXEsby5yZWxhdGl2ZVtxXT9yPXcucG9wKCk6cT0iIixyPT1udWxsJiYocj1kKSxvLnJlbGF0aXZlW3FdKGsscix2KX1lbHNlIGs9dz1bXX1rfHwoaz1qKSxrfHxtLmVycm9yKHF8fGIpO2lmKGcuY2FsbChrKT09PSJbb2JqZWN0IEFycmF5XSIpaWYoIXUpZS5wdXNoLmFwcGx5KGUsayk7ZWxzZSBpZihkJiZkLm5vZGVUeXBlPT09MSlmb3IodD0wO2tbdF0hPW51bGw7dCsrKWtbdF0mJihrW3RdPT09ITB8fGtbdF0ubm9kZVR5cGU9PT0xJiZtLmNvbnRhaW5zKGQsa1t0XSkpJiZlLnB1c2goalt0XSk7ZWxzZSBmb3IodD0wO2tbdF0hPW51bGw7dCsrKWtbdF0mJmtbdF0ubm9kZVR5cGU9PT0xJiZlLnB1c2goalt0XSk7ZWxzZSBzKGssZSk7bCYmKG0obCxoLGUsZiksbS51bmlxdWVTb3J0KGUpKTtyZXR1cm4gZX07bS51bmlxdWVTb3J0PWZ1bmN0aW9uKGEpe2lmKHUpe2g9aSxhLnNvcnQodSk7aWYoaClmb3IodmFyIGI9MTtiPGEubGVuZ3RoO2IrKylhW2JdPT09YVtiLTFdJiZhLnNwbGljZShiLS0sMSl9cmV0dXJuIGF9LG0ubWF0Y2hlcz1mdW5jdGlvbihhLGIpe3JldHVybiBtKGEsbnVsbCxudWxsLGIpfSxtLm1hdGNoZXNTZWxlY3Rvcj1mdW5jdGlvbihhLGIpe3JldHVybiBtKGIsbnVsbCxudWxsLFthXSkubGVuZ3RoPjB9LG0uZmluZD1mdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmLGcsaCxpO2lmKCFhKXJldHVybltdO2ZvcihlPTAsZj1vLm9yZGVyLmxlbmd0aDtlPGY7ZSsrKXtoPW8ub3JkZXJbZV07aWYoZz1vLmxlZnRNYXRjaFtoXS5leGVjKGEpKXtpPWdbMV0sZy5zcGxpY2UoMSwxKTtpZihpLnN1YnN0cihpLmxlbmd0aC0xKSE9PSJcXCIpe2dbMV09KGdbMV18fCIiKS5yZXBsYWNlKGosIiIpLGQ9by5maW5kW2hdKGcsYixjKTtpZihkIT1udWxsKXthPWEucmVwbGFjZShvLm1hdGNoW2hdLCIiKTticmVha319fX1kfHwoZD10eXBlb2YgYi5nZXRFbGVtZW50c0J5VGFnTmFtZSE9InVuZGVmaW5lZCI/Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpOltdKTtyZXR1cm57c2V0OmQsZXhwcjphfX0sbS5maWx0ZXI9ZnVuY3Rpb24oYSxjLGQsZSl7dmFyIGYsZyxoLGksaixrLGwsbixwLHE9YSxyPVtdLHM9Yyx0PWMmJmNbMF0mJm0uaXNYTUwoY1swXSk7d2hpbGUoYSYmYy5sZW5ndGgpe2ZvcihoIGluIG8uZmlsdGVyKWlmKChmPW8ubGVmdE1hdGNoW2hdLmV4ZWMoYSkpIT1udWxsJiZmWzJdKXtrPW8uZmlsdGVyW2hdLGw9ZlsxXSxnPSExLGYuc3BsaWNlKDEsMSk7aWYobC5zdWJzdHIobC5sZW5ndGgtMSk9PT0iXFwiKWNvbnRpbnVlO3M9PT1yJiYocj1bXSk7aWYoby5wcmVGaWx0ZXJbaF0pe2Y9by5wcmVGaWx0ZXJbaF0oZixzLGQscixlLHQpO2lmKCFmKWc9aT0hMDtlbHNlIGlmKGY9PT0hMCljb250aW51ZX1pZihmKWZvcihuPTA7KGo9c1tuXSkhPW51bGw7bisrKWomJihpPWsoaixmLG4scykscD1lXmksZCYmaSE9bnVsbD9wP2c9ITA6c1tuXT0hMTpwJiYoci5wdXNoKGopLGc9ITApKTtpZihpIT09Yil7ZHx8KHM9ciksYT1hLnJlcGxhY2Uoby5tYXRjaFtoXSwiIik7aWYoIWcpcmV0dXJuW107YnJlYWt9fWlmKGE9PT1xKWlmKGc9PW51bGwpbS5lcnJvcihhKTtlbHNlIGJyZWFrO3E9YX1yZXR1cm4gc30sbS5lcnJvcj1mdW5jdGlvbihhKXt0aHJvdyBuZXcgRXJyb3IoIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246ICIrYSl9O3ZhciBuPW0uZ2V0VGV4dD1mdW5jdGlvbihhKXt2YXIgYixjLGQ9YS5ub2RlVHlwZSxlPSIiO2lmKGQpe2lmKGQ9PT0xfHxkPT09OSl7aWYodHlwZW9mIGEudGV4dENvbnRlbnQ9PSJzdHJpbmciKXJldHVybiBhLnRleHRDb250ZW50O2lmKHR5cGVvZiBhLmlubmVyVGV4dD09InN0cmluZyIpcmV0dXJuIGEuaW5uZXJUZXh0LnJlcGxhY2UoaywiIik7Zm9yKGE9YS5maXJzdENoaWxkO2E7YT1hLm5leHRTaWJsaW5nKWUrPW4oYSl9ZWxzZSBpZihkPT09M3x8ZD09PTQpcmV0dXJuIGEubm9kZVZhbHVlfWVsc2UgZm9yKGI9MDtjPWFbYl07YisrKWMubm9kZVR5cGUhPT04JiYoZSs9bihjKSk7cmV0dXJuIGV9LG89bS5zZWxlY3RvcnM9e29yZGVyOlsiSUQiLCJOQU1FIiwiVEFHIl0sbWF0Y2g6e0lEOi8jKCg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSspLyxDTEFTUzovXC4oKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKykvLE5BTUU6L1xbbmFtZT1bJyJdKigoPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxcLikrKVsnIl0qXF0vLEFUVFI6L1xbXHMqKCg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSspXHMqKD86KFxTPz0pXHMqKD86KFsnIl0pKC4qPylcM3woIz8oPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxcLikqKXwpfClccypcXS8sVEFHOi9eKCg/Oltcd1x1MDBjMC1cdUZGRkZcKlwtXXxcXC4pKykvLENISUxEOi86KG9ubHl8bnRofGxhc3R8Zmlyc3QpLWNoaWxkKD86XChccyooZXZlbnxvZGR8KD86WytcLV0/XGQrfCg/OlsrXC1dP1xkKik/blxzKig/OlsrXC1dXHMqXGQrKT8pKVxzKlwpKT8vLFBPUzovOihudGh8ZXF8Z3R8bHR8Zmlyc3R8bGFzdHxldmVufG9kZCkoPzpcKChcZCopXCkpPyg/PVteXC1dfCQpLyxQU0VVRE86LzooKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKykoPzpcKChbJyJdPykoKD86XChbXlwpXStcKXxbXlwoXCldKikrKVwyXCkpPy99LGxlZnRNYXRjaDp7fSxhdHRyTWFwOnsiY2xhc3MiOiJjbGFzc05hbWUiLCJmb3IiOiJodG1sRm9yIn0sYXR0ckhhbmRsZTp7aHJlZjpmdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRBdHRyaWJ1dGUoImhyZWYiKX0sdHlwZTpmdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRBdHRyaWJ1dGUoInR5cGUiKX19LHJlbGF0aXZlOnsiKyI6ZnVuY3Rpb24oYSxiKXt2YXIgYz10eXBlb2YgYj09InN0cmluZyIsZD1jJiYhbC50ZXN0KGIpLGU9YyYmIWQ7ZCYmKGI9Yi50b0xvd2VyQ2FzZSgpKTtmb3IodmFyIGY9MCxnPWEubGVuZ3RoLGg7ZjxnO2YrKylpZihoPWFbZl0pe3doaWxlKChoPWgucHJldmlvdXNTaWJsaW5nKSYmaC5ub2RlVHlwZSE9PTEpO2FbZl09ZXx8aCYmaC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09Yj9ofHwhMTpoPT09Yn1lJiZtLmZpbHRlcihiLGEsITApfSwiPiI6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPXR5cGVvZiBiPT0ic3RyaW5nIixlPTAsZj1hLmxlbmd0aDtpZihkJiYhbC50ZXN0KGIpKXtiPWIudG9Mb3dlckNhc2UoKTtmb3IoO2U8ZjtlKyspe2M9YVtlXTtpZihjKXt2YXIgZz1jLnBhcmVudE5vZGU7YVtlXT1nLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1iP2c6ITF9fX1lbHNle2Zvcig7ZTxmO2UrKyljPWFbZV0sYyYmKGFbZV09ZD9jLnBhcmVudE5vZGU6Yy5wYXJlbnROb2RlPT09Yik7ZAorJiZtLmZpbHRlcihiLGEsITApfX0sIiI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGY9ZSsrLGc9eDt0eXBlb2YgYj09InN0cmluZyImJiFsLnRlc3QoYikmJihiPWIudG9Mb3dlckNhc2UoKSxkPWIsZz13KSxnKCJwYXJlbnROb2RlIixiLGYsYSxkLGMpfSwifiI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGY9ZSsrLGc9eDt0eXBlb2YgYj09InN0cmluZyImJiFsLnRlc3QoYikmJihiPWIudG9Mb3dlckNhc2UoKSxkPWIsZz13KSxnKCJwcmV2aW91c1NpYmxpbmciLGIsZixhLGQsYyl9fSxmaW5kOntJRDpmdW5jdGlvbihhLGIsYyl7aWYodHlwZW9mIGIuZ2V0RWxlbWVudEJ5SWQhPSJ1bmRlZmluZWQiJiYhYyl7dmFyIGQ9Yi5nZXRFbGVtZW50QnlJZChhWzFdKTtyZXR1cm4gZCYmZC5wYXJlbnROb2RlP1tkXTpbXX19LE5BTUU6ZnVuY3Rpb24oYSxiKXtpZih0eXBlb2YgYi5nZXRFbGVtZW50c0J5TmFtZSE9InVuZGVmaW5lZCIpe3ZhciBjPVtdLGQ9Yi5nZXRFbGVtZW50c0J5TmFtZShhWzFdKTtmb3IodmFyIGU9MCxmPWQubGVuZ3RoO2U8ZjtlKyspZFtlXS5nZXRBdHRyaWJ1dGUoIm5hbWUiKT09PWFbMV0mJmMucHVzaChkW2VdKTtyZXR1cm4gYy5sZW5ndGg9PT0wP251bGw6Y319LFRBRzpmdW5jdGlvbihhLGIpe2lmKHR5cGVvZiBiLmdldEVsZW1lbnRzQnlUYWdOYW1lIT0idW5kZWZpbmVkIilyZXR1cm4gYi5nZXRFbGVtZW50c0J5VGFnTmFtZShhWzFdKX19LHByZUZpbHRlcjp7Q0xBU1M6ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe2E9IiAiK2FbMV0ucmVwbGFjZShqLCIiKSsiICI7aWYoZilyZXR1cm4gYTtmb3IodmFyIGc9MCxoOyhoPWJbZ10pIT1udWxsO2crKyloJiYoZV4oaC5jbGFzc05hbWUmJigiICIraC5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKC9bXHRcblxyXS9nLCIgIikuaW5kZXhPZihhKT49MCk/Y3x8ZC5wdXNoKGgpOmMmJihiW2ddPSExKSk7cmV0dXJuITF9LElEOmZ1bmN0aW9uKGEpe3JldHVybiBhWzFdLnJlcGxhY2UoaiwiIil9LFRBRzpmdW5jdGlvbihhLGIpe3JldHVybiBhWzFdLnJlcGxhY2UoaiwiIikudG9Mb3dlckNhc2UoKX0sQ0hJTEQ6ZnVuY3Rpb24oYSl7aWYoYVsxXT09PSJudGgiKXthWzJdfHxtLmVycm9yKGFbMF0pLGFbMl09YVsyXS5yZXBsYWNlKC9eXCt8XHMqL2csIiIpO3ZhciBiPS8oLT8pKFxkKikoPzpuKFsrXC1dP1xkKikpPy8uZXhlYyhhWzJdPT09ImV2ZW4iJiYiMm4ifHxhWzJdPT09Im9kZCImJiIybisxInx8IS9cRC8udGVzdChhWzJdKSYmIjBuKyIrYVsyXXx8YVsyXSk7YVsyXT1iWzFdKyhiWzJdfHwxKS0wLGFbM109YlszXS0wfWVsc2UgYVsyXSYmbS5lcnJvcihhWzBdKTthWzBdPWUrKztyZXR1cm4gYX0sQVRUUjpmdW5jdGlvbihhLGIsYyxkLGUsZil7dmFyIGc9YVsxXT1hWzFdLnJlcGxhY2UoaiwiIik7IWYmJm8uYXR0ck1hcFtnXSYmKGFbMV09by5hdHRyTWFwW2ddKSxhWzRdPShhWzRdfHxhWzVdfHwiIikucmVwbGFjZShqLCIiKSxhWzJdPT09In49IiYmKGFbNF09IiAiK2FbNF0rIiAiKTtyZXR1cm4gYX0sUFNFVURPOmZ1bmN0aW9uKGIsYyxkLGUsZil7aWYoYlsxXT09PSJub3QiKWlmKChhLmV4ZWMoYlszXSl8fCIiKS5sZW5ndGg+MXx8L15cdy8udGVzdChiWzNdKSliWzNdPW0oYlszXSxudWxsLG51bGwsYyk7ZWxzZXt2YXIgZz1tLmZpbHRlcihiWzNdLGMsZCwhMF5mKTtkfHxlLnB1c2guYXBwbHkoZSxnKTtyZXR1cm4hMX1lbHNlIGlmKG8ubWF0Y2guUE9TLnRlc3QoYlswXSl8fG8ubWF0Y2guQ0hJTEQudGVzdChiWzBdKSlyZXR1cm4hMDtyZXR1cm4gYn0sUE9TOmZ1bmN0aW9uKGEpe2EudW5zaGlmdCghMCk7cmV0dXJuIGF9fSxmaWx0ZXJzOntlbmFibGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLmRpc2FibGVkPT09ITEmJmEudHlwZSE9PSJoaWRkZW4ifSxkaXNhYmxlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5kaXNhYmxlZD09PSEwfSxjaGVja2VkOmZ1bmN0aW9uKGEpe3JldHVybiBhLmNoZWNrZWQ9PT0hMH0sc2VsZWN0ZWQ6ZnVuY3Rpb24oYSl7YS5wYXJlbnROb2RlJiZhLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtyZXR1cm4gYS5zZWxlY3RlZD09PSEwfSxwYXJlbnQ6ZnVuY3Rpb24oYSl7cmV0dXJuISFhLmZpcnN0Q2hpbGR9LGVtcHR5OmZ1bmN0aW9uKGEpe3JldHVybiFhLmZpcnN0Q2hpbGR9LGhhczpmdW5jdGlvbihhLGIsYyl7cmV0dXJuISFtKGNbM10sYSkubGVuZ3RofSxoZWFkZXI6ZnVuY3Rpb24oYSl7cmV0dXJuL2hcZC9pLnRlc3QoYS5ub2RlTmFtZSl9LHRleHQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5nZXRBdHRyaWJ1dGUoInR5cGUiKSxjPWEudHlwZTtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmInRleHQiPT09YyYmKGI9PT1jfHxiPT09bnVsbCl9LHJhZGlvOmZ1bmN0aW9uKGEpe3JldHVybiBhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0iaW5wdXQiJiYicmFkaW8iPT09YS50eXBlfSxjaGVja2JveDpmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmImNoZWNrYm94Ij09PWEudHlwZX0sZmlsZTpmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmImZpbGUiPT09YS50eXBlfSxwYXNzd29yZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmInBhc3N3b3JkIj09PWEudHlwZX0sc3VibWl0OmZ1bmN0aW9uKGEpe3ZhciBiPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4oYj09PSJpbnB1dCJ8fGI9PT0iYnV0dG9uIikmJiJzdWJtaXQiPT09YS50eXBlfSxpbWFnZTpmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmImltYWdlIj09PWEudHlwZX0scmVzZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybihiPT09ImlucHV0Inx8Yj09PSJidXR0b24iKSYmInJlc2V0Ij09PWEudHlwZX0sYnV0dG9uOmZ1bmN0aW9uKGEpe3ZhciBiPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4gYj09PSJpbnB1dCImJiJidXR0b24iPT09YS50eXBlfHxiPT09ImJ1dHRvbiJ9LGlucHV0OmZ1bmN0aW9uKGEpe3JldHVybi9pbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uL2kudGVzdChhLm5vZGVOYW1lKX0sZm9jdXM6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1hLm93bmVyRG9jdW1lbnQuYWN0aXZlRWxlbWVudH19LHNldEZpbHRlcnM6e2ZpcnN0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGI9PT0wfSxsYXN0OmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBiPT09ZC5sZW5ndGgtMX0sZXZlbjpmdW5jdGlvbihhLGIpe3JldHVybiBiJTI9PT0wfSxvZGQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYiUyPT09MX0sbHQ6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBiPGNbM10tMH0sZ3Q6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBiPmNbM10tMH0sbnRoOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gY1szXS0wPT09Yn0sZXE6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjWzNdLTA9PT1ifX0sZmlsdGVyOntQU0VVRE86ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9YlsxXSxmPW8uZmlsdGVyc1tlXTtpZihmKXJldHVybiBmKGEsYyxiLGQpO2lmKGU9PT0iY29udGFpbnMiKXJldHVybihhLnRleHRDb250ZW50fHxhLmlubmVyVGV4dHx8bihbYV0pfHwiIikuaW5kZXhPZihiWzNdKT49MDtpZihlPT09Im5vdCIpe3ZhciBnPWJbM107Zm9yKHZhciBoPTAsaT1nLmxlbmd0aDtoPGk7aCsrKWlmKGdbaF09PT1hKXJldHVybiExO3JldHVybiEwfW0uZXJyb3IoZSl9LENISUxEOmZ1bmN0aW9uKGEsYil7dmFyIGMsZSxmLGcsaCxpLGosaz1iWzFdLGw9YTtzd2l0Y2goayl7Y2FzZSJvbmx5IjpjYXNlImZpcnN0Ijp3aGlsZShsPWwucHJldmlvdXNTaWJsaW5nKWlmKGwubm9kZVR5cGU9PT0xKXJldHVybiExO2lmKGs9PT0iZmlyc3QiKXJldHVybiEwO2w9YTtjYXNlImxhc3QiOndoaWxlKGw9bC5uZXh0U2libGluZylpZihsLm5vZGVUeXBlPT09MSlyZXR1cm4hMTtyZXR1cm4hMDtjYXNlIm50aCI6Yz1iWzJdLGU9YlszXTtpZihjPT09MSYmZT09PTApcmV0dXJuITA7Zj1iWzBdLGc9YS5wYXJlbnROb2RlO2lmKGcmJihnW2RdIT09Znx8IWEubm9kZUluZGV4KSl7aT0wO2ZvcihsPWcuZmlyc3RDaGlsZDtsO2w9bC5uZXh0U2libGluZylsLm5vZGVUeXBlPT09MSYmKGwubm9kZUluZGV4PSsraSk7Z1tkXT1mfWo9YS5ub2RlSW5kZXgtZTtyZXR1cm4gYz09PTA/aj09PTA6aiVjPT09MCYmai9jPj0wfX0sSUQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5ub2RlVHlwZT09PTEmJmEuZ2V0QXR0cmlidXRlKCJpZCIpPT09Yn0sVEFHOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGI9PT0iKiImJmEubm9kZVR5cGU9PT0xfHwhIWEubm9kZU5hbWUmJmEubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWJ9LENMQVNTOmZ1bmN0aW9uKGEsYil7cmV0dXJuKCIgIisoYS5jbGFzc05hbWV8fGEuZ2V0QXR0cmlidXRlKCJjbGFzcyIpKSsiICIpLmluZGV4T2YoYik+LTF9LEFUVFI6ZnVuY3Rpb24oYSxiKXt2YXIgYz1iWzFdLGQ9bS5hdHRyP20uYXR0cihhLGMpOm8uYXR0ckhhbmRsZVtjXT9vLmF0dHJIYW5kbGVbY10oYSk6YVtjXSE9bnVsbD9hW2NdOmEuZ2V0QXR0cmlidXRlKGMpLGU9ZCsiIixmPWJbMl0sZz1iWzRdO3JldHVybiBkPT1udWxsP2Y9PT0iIT0iOiFmJiZtLmF0dHI/ZCE9bnVsbDpmPT09Ij0iP2U9PT1nOmY9PT0iKj0iP2UuaW5kZXhPZihnKT49MDpmPT09In49Ij8oIiAiK2UrIiAiKS5pbmRleE9mKGcpPj0wOmc/Zj09PSIhPSI/ZSE9PWc6Zj09PSJePSI/ZS5pbmRleE9mKGcpPT09MDpmPT09IiQ9Ij9lLnN1YnN0cihlLmxlbmd0aC1nLmxlbmd0aCk9PT1nOmY9PT0ifD0iP2U9PT1nfHxlLnN1YnN0cigwLGcubGVuZ3RoKzEpPT09ZysiLSI6ITE6ZSYmZCE9PSExfSxQT1M6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9YlsyXSxmPW8uc2V0RmlsdGVyc1tlXTtpZihmKXJldHVybiBmKGEsYyxiLGQpfX19LHA9by5tYXRjaC5QT1MscT1mdW5jdGlvbihhLGIpe3JldHVybiJcXCIrKGItMCsxKX07Zm9yKHZhciByIGluIG8ubWF0Y2gpby5tYXRjaFtyXT1uZXcgUmVnRXhwKG8ubWF0Y2hbcl0uc291cmNlKy8oPyFbXlxbXSpcXSkoPyFbXlwoXSpcKSkvLnNvdXJjZSksby5sZWZ0TWF0Y2hbcl09bmV3IFJlZ0V4cCgvKF4oPzoufFxyfFxuKSo/KS8uc291cmNlK28ubWF0Y2hbcl0uc291cmNlLnJlcGxhY2UoL1xcKFxkKykvZyxxKSk7dmFyIHM9ZnVuY3Rpb24oYSxiKXthPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGEsMCk7aWYoYil7Yi5wdXNoLmFwcGx5KGIsYSk7cmV0dXJuIGJ9cmV0dXJuIGF9O3RyeXtBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChjLmRvY3VtZW50RWxlbWVudC5jaGlsZE5vZGVzLDApWzBdLm5vZGVUeXBlfWNhdGNoKHQpe3M9ZnVuY3Rpb24oYSxiKXt2YXIgYz0wLGQ9Ynx8W107aWYoZy5jYWxsKGEpPT09IltvYmplY3QgQXJyYXldIilBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShkLGEpO2Vsc2UgaWYodHlwZW9mIGEubGVuZ3RoPT0ibnVtYmVyIilmb3IodmFyIGU9YS5sZW5ndGg7YzxlO2MrKylkLnB1c2goYVtjXSk7ZWxzZSBmb3IoO2FbY107YysrKWQucHVzaChhW2NdKTtyZXR1cm4gZH19dmFyIHUsdjtjLmRvY3VtZW50RWxlbWVudC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj91PWZ1bmN0aW9uKGEsYil7aWYoYT09PWIpe2g9ITA7cmV0dXJuIDB9aWYoIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb258fCFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKXJldHVybiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uPy0xOjE7cmV0dXJuIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikmND8tMToxfToodT1mdW5jdGlvbihhLGIpe2lmKGE9PT1iKXtoPSEwO3JldHVybiAwfWlmKGEuc291cmNlSW5kZXgmJmIuc291cmNlSW5kZXgpcmV0dXJuIGEuc291cmNlSW5kZXgtYi5zb3VyY2VJbmRleDt2YXIgYyxkLGU9W10sZj1bXSxnPWEucGFyZW50Tm9kZSxpPWIucGFyZW50Tm9kZSxqPWc7aWYoZz09PWkpcmV0dXJuIHYoYSxiKTtpZighZylyZXR1cm4tMTtpZighaSlyZXR1cm4gMTt3aGlsZShqKWUudW5zaGlmdChqKSxqPWoucGFyZW50Tm9kZTtqPWk7d2hpbGUoailmLnVuc2hpZnQoaiksaj1qLnBhcmVudE5vZGU7Yz1lLmxlbmd0aCxkPWYubGVuZ3RoO2Zvcih2YXIgaz0wO2s8YyYmazxkO2srKylpZihlW2tdIT09ZltrXSlyZXR1cm4gdihlW2tdLGZba10pO3JldHVybiBrPT09Yz92KGEsZltrXSwtMSk6dihlW2tdLGIsMSl9LHY9ZnVuY3Rpb24oYSxiLGMpe2lmKGE9PT1iKXJldHVybiBjO3ZhciBkPWEubmV4dFNpYmxpbmc7d2hpbGUoZCl7aWYoZD09PWIpcmV0dXJuLTE7ZD1kLm5leHRTaWJsaW5nfXJldHVybiAxfSksZnVuY3Rpb24oKXt2YXIgYT1jLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQ9InNjcmlwdCIrKG5ldyBEYXRlKS5nZXRUaW1lKCksZT1jLmRvY3VtZW50RWxlbWVudDthLmlubmVySFRNTD0iPGEgbmFtZT0nIitkKyInLz4iLGUuaW5zZXJ0QmVmb3JlKGEsZS5maXJzdENoaWxkKSxjLmdldEVsZW1lbnRCeUlkKGQpJiYoby5maW5kLklEPWZ1bmN0aW9uKGEsYyxkKXtpZih0eXBlb2YgYy5nZXRFbGVtZW50QnlJZCE9InVuZGVmaW5lZCImJiFkKXt2YXIgZT1jLmdldEVsZW1lbnRCeUlkKGFbMV0pO3JldHVybiBlP2UuaWQ9PT1hWzFdfHx0eXBlb2YgZS5nZXRBdHRyaWJ1dGVOb2RlIT0idW5kZWZpbmVkIiYmZS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpLm5vZGVWYWx1ZT09PWFbMV0/W2VdOmI6W119fSxvLmZpbHRlci5JRD1mdW5jdGlvbihhLGIpe3ZhciBjPXR5cGVvZiBhLmdldEF0dHJpYnV0ZU5vZGUhPSJ1bmRlZmluZWQiJiZhLmdldEF0dHJpYnV0ZU5vZGUoImlkIik7cmV0dXJuIGEubm9kZVR5cGU9PT0xJiZjJiZjLm5vZGVWYWx1ZT09PWJ9KSxlLnJlbW92ZUNoaWxkKGEpLGU9YT1udWxsfSgpLGZ1bmN0aW9uKCl7dmFyIGE9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKTthLmFwcGVuZENoaWxkKGMuY3JlYXRlQ29tbWVudCgiIikpLGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKS5sZW5ndGg+MCYmKG8uZmluZC5UQUc9ZnVuY3Rpb24oYSxiKXt2YXIgYz1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKGFbMV0pO2lmKGFbMV09PT0iKiIpe3ZhciBkPVtdO2Zvcih2YXIgZT0wO2NbZV07ZSsrKWNbZV0ubm9kZVR5cGU9PT0xJiZkLnB1c2goY1tlXSk7Yz1kfXJldHVybiBjfSksYS5pbm5lckhUTUw9IjxhIGhyZWY9JyMnPjwvYT4iLGEuZmlyc3RDaGlsZCYmdHlwZW9mIGEuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUhPSJ1bmRlZmluZWQiJiZhLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJocmVmIikhPT0iIyImJihvLmF0dHJIYW5kbGUuaHJlZj1mdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRBdHRyaWJ1dGUoImhyZWYiLDIpfSksYT1udWxsfSgpLGMucXVlcnlTZWxlY3RvckFsbCYmZnVuY3Rpb24oKXt2YXIgYT1tLGI9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKSxkPSJfX3NpenpsZV9fIjtiLmlubmVySFRNTD0iPHAgY2xhc3M9J1RFU1QnPjwvcD4iO2lmKCFiLnF1ZXJ5U2VsZWN0b3JBbGx8fGIucXVlcnlTZWxlY3RvckFsbCgiLlRFU1QiKS5sZW5ndGghPT0wKXttPWZ1bmN0aW9uKGIsZSxmLGcpe2U9ZXx8YztpZighZyYmIW0uaXNYTUwoZSkpe3ZhciBoPS9eKFx3KyQpfF5cLihbXHdcLV0rJCl8XiMoW1x3XC1dKyQpLy5leGVjKGIpO2lmKGgmJihlLm5vZGVUeXBlPT09MXx8ZS5ub2RlVHlwZT09PTkpKXtpZihoWzFdKXJldHVybiBzKGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYiksZik7aWYoaFsyXSYmby5maW5kLkNMQVNTJiZlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpcmV0dXJuIHMoZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGhbMl0pLGYpfWlmKGUubm9kZVR5cGU9PT05KXtpZihiPT09ImJvZHkiJiZlLmJvZHkpcmV0dXJuIHMoW2UuYm9keV0sZik7aWYoaCYmaFszXSl7dmFyIGk9ZS5nZXRFbGVtZW50QnlJZChoWzNdKTtpZighaXx8IWkucGFyZW50Tm9kZSlyZXR1cm4gcyhbXSxmKTtpZihpLmlkPT09aFszXSlyZXR1cm4gcyhbaV0sZil9dHJ5e3JldHVybiBzKGUucXVlcnlTZWxlY3RvckFsbChiKSxmKX1jYXRjaChqKXt9fWVsc2UgaWYoZS5ub2RlVHlwZT09PTEmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSE9PSJvYmplY3QiKXt2YXIgaz1lLGw9ZS5nZXRBdHRyaWJ1dGUoImlkIiksbj1sfHxkLHA9ZS5wYXJlbnROb2RlLHE9L15ccypbK35dLy50ZXN0KGIpO2w/bj1uLnJlcGxhY2UoLycvZywiXFwkJiIpOmUuc2V0QXR0cmlidXRlKCJpZCIsbikscSYmcCYmKGU9ZS5wYXJlbnROb2RlKTt0cnl7aWYoIXF8fHApcmV0dXJuIHMoZS5xdWVyeVNlbGVjdG9yQWxsKCJbaWQ9JyIrbisiJ10gIitiKSxmKX1jYXRjaChyKXt9ZmluYWxseXtsfHxrLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKX19fXJldHVybiBhKGIsZSxmLGcpfTtmb3IodmFyIGUgaW4gYSltW2VdPWFbZV07Yj1udWxsfX0oKSxmdW5jdGlvbigpe3ZhciBhPWMuZG9jdW1lbnRFbGVtZW50LGI9YS5tYXRjaGVzU2VsZWN0b3J8fGEubW96TWF0Y2hlc1NlbGVjdG9yfHxhLndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8YS5tc01hdGNoZXNTZWxlY3RvcjtpZihiKXt2YXIgZD0hYi5jYWxsKGMuY3JlYXRlRWxlbWVudCgiZGl2IiksImRpdiIpLGU9ITE7dHJ5e2IuY2FsbChjLmRvY3VtZW50RWxlbWVudCwiW3Rlc3QhPScnXTpzaXp6bGUiKX1jYXRjaChmKXtlPSEwfW0ubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGEsYyl7Yz1jLnJlcGxhY2UoL1w9XHMqKFteJyJcXV0qKVxzKlxdL2csIj0nJDEnXSIpO2lmKCFtLmlzWE1MKGEpKXRyeXtpZihlfHwhby5tYXRjaC5QU0VVRE8udGVzdChjKSYmIS8hPS8udGVzdChjKSl7dmFyIGY9Yi5jYWxsKGEsYyk7aWYoZnx8IWR8fGEuZG9jdW1lbnQmJmEuZG9jdW1lbnQubm9kZVR5cGUhPT0xMSlyZXR1cm4gZn19Y2F0Y2goZyl7fXJldHVybiBtKGMsbnVsbCxudWxsLFthXSkubGVuZ3RoPjB9fX0oKSxmdW5jdGlvbigpe3ZhciBhPWMuY3JlYXRlRWxlbWVudCgiZGl2Iik7YS5pbm5lckhUTUw9IjxkaXYgY2xhc3M9J3Rlc3QgZSc+PC9kaXY+PGRpdiBjbGFzcz0ndGVzdCc+PC9kaXY+IjtpZighIWEuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmYS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlIikubGVuZ3RoIT09MCl7YS5sYXN0Q2hpbGQuY2xhc3NOYW1lPSJlIjtpZihhLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImUiKS5sZW5ndGg9PT0xKXJldHVybjtvLm9yZGVyLnNwbGljZSgxLDAsIkNMQVNTIiksby5maW5kLkNMQVNTPWZ1bmN0aW9uKGEsYixjKXtpZih0eXBlb2YgYi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lIT0idW5kZWZpbmVkIiYmIWMpcmV0dXJuIGIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShhWzFdKX0sYT1udWxsfX0oKSxjLmRvY3VtZW50RWxlbWVudC5jb250YWlucz9tLmNvbnRhaW5zPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGEhPT1iJiYoYS5jb250YWlucz9hLmNvbnRhaW5zKGIpOiEwKX06Yy5kb2N1bWVudEVsZW1lbnQuY29tcGFyZURvY3VtZW50UG9zaXRpb24/bS5jb250YWlucz1mdW5jdGlvbihhLGIpe3JldHVybiEhKGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikmMTYpfTptLmNvbnRhaW5zPWZ1bmN0aW9uKCl7cmV0dXJuITF9LG0uaXNYTUw9ZnVuY3Rpb24oYSl7dmFyIGI9KGE/YS5vd25lckRvY3VtZW50fHxhOjApLmRvY3VtZW50RWxlbWVudDtyZXR1cm4gYj9iLm5vZGVOYW1lIT09IkhUTUwiOiExfTt2YXIgeT1mdW5jdGlvbihhLGIsYyl7dmFyIGQsZT1bXSxmPSIiLGc9Yi5ub2RlVHlwZT9bYl06Yjt3aGlsZShkPW8ubWF0Y2guUFNFVURPLmV4ZWMoYSkpZis9ZFswXSxhPWEucmVwbGFjZShvLm1hdGNoLlBTRVVETywiIik7YT1vLnJlbGF0aXZlW2FdP2ErIioiOmE7Zm9yKHZhciBoPTAsaT1nLmxlbmd0aDtoPGk7aCsrKW0oYSxnW2hdLGUsYyk7cmV0dXJuIG0uZmlsdGVyKGYsZSl9O20uYXR0cj1mLmF0dHIsbS5zZWxlY3RvcnMuYXR0ck1hcD17fSxmLmZpbmQ9bSxmLmV4cHI9bS5zZWxlY3RvcnMsZi5leHByWyI6Il09Zi5leHByLmZpbHRlcnMsZi51bmlxdWU9bS51bmlxdWVTb3J0LGYudGV4dD1tLmdldFRleHQsZi5pc1hNTERvYz1tLmlzWE1MLGYuY29udGFpbnM9bS5jb250YWluc30oKTt2YXIgTD0vVW50aWwkLyxNPS9eKD86cGFyZW50c3xwcmV2VW50aWx8cHJldkFsbCkvLE49LywvLE89L14uW146I1xbXC4sXSokLyxQPUFycmF5LnByb3RvdHlwZS5zbGljZSxRPWYuZXhwci5tYXRjaC5QT1MsUj17Y2hpbGRyZW46ITAsY29udGVudHM6ITAsbmV4dDohMCxwcmV2OiEwfTtmLmZuLmV4dGVuZCh7ZmluZDpmdW5jdGlvbihhKXt2YXIgYj10aGlzLGMsZDtpZih0eXBlb2YgYSE9InN0cmluZyIpcmV0dXJuIGYoYSkuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKGM9MCxkPWIubGVuZ3RoO2M8ZDtjKyspaWYoZi5jb250YWlucyhiW2NdLHRoaXMpKXJldHVybiEwfSk7dmFyIGU9dGhpcy5wdXNoU3RhY2soIiIsImZpbmQiLGEpLGcsaCxpO2ZvcihjPTAsZD10aGlzLmxlbmd0aDtjPGQ7YysrKXtnPWUubGVuZ3RoLGYuZmluZChhLHRoaXNbY10sZSk7aWYoYz4wKWZvcihoPWc7aDxlLmxlbmd0aDtoKyspZm9yKGk9MDtpPGc7aSsrKWlmKGVbaV09PT1lW2hdKXtlLnNwbGljZShoLS0sMSk7YnJlYWt9fXJldHVybiBlfSxoYXM6ZnVuY3Rpb24oYSl7dmFyIGI9ZihhKTtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oKXtmb3IodmFyIGE9MCxjPWIubGVuZ3RoO2E8YzthKyspaWYoZi5jb250YWlucyh0aGlzLGJbYV0pKXJldHVybiEwfSl9LG5vdDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soVCh0aGlzLGEsITEpLCJub3QiLGEpfSxmaWx0ZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKFQodGhpcyxhLCEwKSwiZmlsdGVyIixhKX0saXM6ZnVuY3Rpb24oYSl7cmV0dXJuISFhJiYodHlwZW9mIGE9PSJzdHJpbmciP1EudGVzdChhKT9mKGEsdGhpcy5jb250ZXh0KS5pbmRleCh0aGlzWzBdKT49MDpmLmZpbHRlcihhLHRoaXMpLmxlbmd0aD4wOnRoaXMuZmlsdGVyKGEpLmxlbmd0aD4wKX0sY2xvc2VzdDpmdW5jdGlvbihhLGIpe3ZhciBjPVtdLGQsZSxnPXRoaXNbMF07aWYoZi5pc0FycmF5KGEpKXt2YXIgaD0xO3doaWxlKGcmJmcub3duZXJEb2N1bWVudCYmZyE9PWIpe2ZvcihkPTA7ZDxhLmxlbmd0aDtkKyspZihnKS5pcyhhW2RdKSYmYy5wdXNoKHtzZWxlY3RvcjphW2RdLGVsZW06ZyxsZXZlbDpofSk7Zz1nLnBhcmVudE5vZGUsaCsrfXJldHVybiBjfXZhciBpPVEudGVzdChhKXx8dHlwZW9mIGEhPSJzdHJpbmciP2YoYSxifHx0aGlzLmNvbnRleHQpOjA7Zm9yKGQ9MCxlPXRoaXMubGVuZ3RoO2Q8ZTtkKyspe2c9dGhpc1tkXTt3aGlsZShnKXtpZihpP2kuaW5kZXgoZyk+LTE6Zi5maW5kLm1hdGNoZXNTZWxlY3RvcihnLGEpKXtjLnB1c2goZyk7YnJlYWt9Zz1nLnBhcmVudE5vZGU7aWYoIWd8fCFnLm93bmVyRG9jdW1lbnR8fGc9PT1ifHxnLm5vZGVUeXBlPT09MTEpYnJlYWt9fWM9Yy5sZW5ndGg+MT9mLnVuaXF1ZShjKTpjO3JldHVybiB0aGlzLnB1c2hTdGFjayhjLCJjbG9zZXN0IixhKX0saW5kZXg6ZnVuY3Rpb24oYSl7aWYoIWEpcmV0dXJuIHRoaXNbMF0mJnRoaXNbMF0ucGFyZW50Tm9kZT90aGlzLnByZXZBbGwoKS5sZW5ndGg6LTE7aWYodHlwZW9mIGE9PSJzdHJpbmciKXJldHVybiBmLmluQXJyYXkodGhpc1swXSxmKGEpKTtyZXR1cm4gZi5pbkFycmF5KGEuanF1ZXJ5P2FbMF06YSx0aGlzKX0sYWRkOmZ1bmN0aW9uKGEsYil7dmFyIGM9dHlwZW9mIGE9PSJzdHJpbmciP2YoYSxiKTpmLm1ha2VBcnJheShhJiZhLm5vZGVUeXBlP1thXTphKSxkPWYubWVyZ2UodGhpcy5nZXQoKSxjKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soUyhjWzBdKXx8UyhkWzBdKT9kOmYudW5pcXVlKGQpKX0sYW5kU2VsZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFkZCh0aGlzLnByZXZPYmplY3QpfX0pLGYuZWFjaCh7cGFyZW50OmZ1bmN0aW9uKGEpe3ZhciBiPWEucGFyZW50Tm9kZTtyZXR1cm4gYiYmYi5ub2RlVHlwZSE9PTExP2I6bnVsbH0scGFyZW50czpmdW5jdGlvbihhKXtyZXR1cm4gZi5kaXIoYSwicGFyZW50Tm9kZSIpfSxwYXJlbnRzVW50aWw6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBmLmRpcihhLCJwYXJlbnROb2RlIixjKX0sbmV4dDpmdW5jdGlvbihhKXtyZXR1cm4gZi5udGgoYSwyLCJuZXh0U2libGluZyIpfSxwcmV2OmZ1bmN0aW9uKGEpe3JldHVybiBmLm50aChhLDIsInByZXZpb3VzU2libGluZyIpfSxuZXh0QWxsOmZ1bmN0aW9uKGEpe3JldHVybiBmLmRpcihhLCJuZXh0U2libGluZyIpfSxwcmV2QWxsOmZ1bmN0aW9uKGEpe3JldHVybiBmLmRpcihhLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dFVudGlsOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZi5kaXIoYSwibmV4dFNpYmxpbmciLGMpfSxwcmV2VW50aWw6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBmLmRpcihhLCJwcmV2aW91c1NpYmxpbmciLGMpfSxzaWJsaW5nczpmdW5jdGlvbihhKXtyZXR1cm4gZi5zaWJsaW5nKGEucGFyZW50Tm9kZS5maXJzdENoaWxkLGEpfSxjaGlsZHJlbjpmdW5jdGlvbihhKXtyZXR1cm4gZi5zaWJsaW5nKGEuZmlyc3RDaGlsZCl9LGNvbnRlbnRzOmZ1bmN0aW9uKGEpe3JldHVybiBmLm5vZGVOYW1lKGEsImlmcmFtZSIpP2EuY29udGVudERvY3VtZW50fHxhLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ6Zi5tYWtlQXJyYXkoYS5jaGlsZE5vZGVzKX19LGZ1bmN0aW9uKGEsYil7Zi5mblthXT1mdW5jdGlvbihjLGQpe3ZhciBlPWYubWFwKHRoaXMsYixjKTtMLnRlc3QoYSl8fChkPWMpLGQmJnR5cGVvZiBkPT0ic3RyaW5nIiYmKGU9Zi5maWx0ZXIoZCxlKSksZT10aGlzLmxlbmd0aD4xJiYhUlthXT9mLnVuaXF1ZShlKTplLCh0aGlzLmxlbmd0aD4xfHxOLnRlc3QoZCkpJiZNLnRlc3QoYSkmJihlPWUucmV2ZXJzZSgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZSxhLFAuY2FsbChhcmd1bWVudHMpLmpvaW4oIiwiKSl9fSksZi5leHRlbmQoe2ZpbHRlcjpmdW5jdGlvbihhLGIsYyl7YyYmKGE9Ijpub3QoIithKyIpIik7cmV0dXJuIGIubGVuZ3RoPT09MT9mLmZpbmQubWF0Y2hlc1NlbGVjdG9yKGJbMF0sYSk/W2JbMF1dOltdOmYuZmluZC5tYXRjaGVzKGEsYil9LGRpcjpmdW5jdGlvbihhLGMsZCl7dmFyIGU9W10sZz1hW2NdO3doaWxlKGcmJmcubm9kZVR5cGUhPT05JiYoZD09PWJ8fGcubm9kZVR5cGUhPT0xfHwhZihnKS5pcyhkKSkpZy5ub2RlVHlwZT09PTEmJmUucHVzaChnKSxnPWdbY107cmV0dXJuIGV9LG50aDpmdW5jdGlvbihhLGIsYyxkKXtiPWJ8fDE7dmFyIGU9MDtmb3IoO2E7YT1hW2NdKWlmKGEubm9kZVR5cGU9PT0xJiYrK2U9PT1iKWJyZWFrO3JldHVybiBhfSxzaWJsaW5nOmZ1bmN0aW9uKGEsYil7dmFyIGM9W107Zm9yKDthO2E9YS5uZXh0U2libGluZylhLm5vZGVUeXBlPT09MSYmYSE9PWImJmMucHVzaChhKTtyZXR1cm4gY319KTt2YXIgVj0iYWJicnxhcnRpY2xlfGFzaWRlfGF1ZGlvfGNhbnZhc3xkYXRhbGlzdHxkZXRhaWxzfGZpZ2NhcHRpb258ZmlndXJlfGZvb3RlcnxoZWFkZXJ8aGdyb3VwfG1hcmt8bWV0ZXJ8bmF2fG91dHB1dHxwcm9ncmVzc3xzZWN0aW9ufHN1bW1hcnl8dGltZXx2aWRlbyIsVz0vIGpRdWVyeVxkKz0iKD86XGQrfG51bGwpIi9nLFg9L15ccysvLFk9LzwoPyFhcmVhfGJyfGNvbHxlbWJlZHxocnxpbWd8aW5wdXR8bGlua3xtZXRhfHBhcmFtKSgoW1x3Ol0rKVtePl0qKVwvPi9pZyxaPS88KFtcdzpdKykvLCQ9Lzx0Ym9keS9pLF89Lzx8JiM/XHcrOy8sYmE9LzwoPzpzY3JpcHR8c3R5bGUpL2ksYmI9LzwoPzpzY3JpcHR8b2JqZWN0fGVtYmVkfG9wdGlvbnxzdHlsZSkvaSxiYz1uZXcgUmVnRXhwKCI8KD86IitWKyIpIiwiaSIpLGJkPS9jaGVja2VkXHMqKD86W149XXw9XHMqLmNoZWNrZWQuKS9pLGJlPS9cLyhqYXZhfGVjbWEpc2NyaXB0L2ksYmY9L15ccyo8ISg/OlxbQ0RBVEFcW3xcLVwtKS8sYmc9e29wdGlvbjpbMSwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsIjwvc2VsZWN0PiJdLGxlZ2VuZDpbMSwiPGZpZWxkc2V0PiIsIjwvZmllbGRzZXQ+Il0sdGhlYWQ6WzEsIjx0YWJsZT4iLCI8L3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXSx0ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Rib2R5PjwvdGFibGU+Il0sY29sOlsyLCI8dGFibGU+PHRib2R5PjwvdGJvZHk+PGNvbGdyb3VwPiIsIjwvY29sZ3JvdXA+PC90YWJsZT4iXSxhcmVhOlsxLCI8bWFwPiIsIjwvbWFwPiJdLF9kZWZhdWx0OlswLCIiLCIiXX0sYmg9VShjKTtiZy5vcHRncm91cD1iZy5vcHRpb24sYmcudGJvZHk9YmcudGZvb3Q9YmcuY29sZ3JvdXA9YmcuY2FwdGlvbj1iZy50aGVhZCxiZy50aD1iZy50ZCxmLnN1cHBvcnQuaHRtbFNlcmlhbGl6ZXx8KGJnLl9kZWZhdWx0PVsxLCJkaXY8ZGl2PiIsIjwvZGl2PiJdKSxmLmZuLmV4dGVuZCh7dGV4dDpmdW5jdGlvbihhKXtpZihmLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXt2YXIgYz1mKHRoaXMpO2MudGV4dChhLmNhbGwodGhpcyxiLGMudGV4dCgpKSl9KTtpZih0eXBlb2YgYSE9Im9iamVjdCImJmEhPT1iKXJldHVybiB0aGlzLmVtcHR5KCkuYXBwZW5kKCh0aGlzWzBdJiZ0aGlzWzBdLm93bmVyRG9jdW1lbnR8fGMpLmNyZWF0ZVRleHROb2RlKGEpKTtyZXR1cm4gZi50ZXh0KHRoaXMpfSx3cmFwQWxsOmZ1bmN0aW9uKGEpe2lmKGYuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe2YodGhpcykud3JhcEFsbChhLmNhbGwodGhpcyxiKSl9KTtpZih0aGlzWzBdKXt2YXIgYj1mKGEsdGhpc1swXS5vd25lckRvY3VtZW50KS5lcSgwKS5jbG9uZSghMCk7dGhpc1swXS5wYXJlbnROb2RlJiZiLmluc2VydEJlZm9yZSh0aGlzWzBdKSxiLm1hcChmdW5jdGlvbigpe3ZhciBhPXRoaXM7d2hpbGUoYS5maXJzdENoaWxkJiZhLmZpcnN0Q2hpbGQubm9kZVR5cGU9PT0xKWE9YS5maXJzdENoaWxkO3JldHVybiBhfSkuYXBwZW5kKHRoaXMpfXJldHVybiB0aGlzfSx3cmFwSW5uZXI6ZnVuY3Rpb24oYSl7aWYoZi5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7Zih0aGlzKS53cmFwSW5uZXIoYS5jYWxsKHRoaXMsYikpfSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPWYodGhpcyksYz1iLmNvbnRlbnRzKCk7Yy5sZW5ndGg/Yy53cmFwQWxsKGEpOmIuYXBwZW5kKGEpfSl9LHdyYXA6ZnVuY3Rpb24oYSl7dmFyIGI9Zi5pc0Z1bmN0aW9uKGEpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYyl7Zih0aGlzKS53cmFwQWxsKGI/YS5jYWxsKHRoaXMsYyk6YSl9KX0sdW53cmFwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50KCkuZWFjaChmdW5jdGlvbigpe2Yubm9kZU5hbWUodGhpcywiYm9keSIpfHxmKHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2Rlcyl9KS5lbmQoKX0sYXBwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCEwLGZ1bmN0aW9uKGEpe3RoaXMubm9kZVR5cGU9PT0xJiZ0aGlzLmFwcGVuZENoaWxkKGEpfSl9LHByZXBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsITAsZnVuY3Rpb24oYSl7dGhpcy5ub2RlVHlwZT09PTEmJnRoaXMuaW5zZXJ0QmVmb3JlKGEsdGhpcy5maXJzdENoaWxkKX0pfSxiZWZvcmU6ZnVuY3Rpb24oKXtpZih0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGUpcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCExLGZ1bmN0aW9uKGEpe3RoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSx0aGlzKX0pO2lmKGFyZ3VtZW50cy5sZW5ndGgpe3ZhciBhPWYuY2xlYW4oYXJndW1lbnRzKTthLnB1c2guYXBwbHkoYSx0aGlzLnRvQXJyYXkoKSk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGEsImJlZm9yZSIsYXJndW1lbnRzKX19LGFmdGVyOmZ1bmN0aW9uKCl7aWYodGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlKXJldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywhMSxmdW5jdGlvbihhKXt0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsdGhpcy5uZXh0U2libGluZyl9KTtpZihhcmd1bWVudHMubGVuZ3RoKXt2YXIgYT10aGlzLnB1c2hTdGFjayh0aGlzLCJhZnRlciIsYXJndW1lbnRzKTthLnB1c2guYXBwbHkoYSxmLmNsZWFuKGFyZ3VtZW50cykpO3JldHVybiBhfX0scmVtb3ZlOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTAsZDsoZD10aGlzW2NdKSE9bnVsbDtjKyspaWYoIWF8fGYuZmlsdGVyKGEsW2RdKS5sZW5ndGgpIWImJmQubm9kZVR5cGU9PT0xJiYoZi5jbGVhbkRhdGEoZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpKSwKK2YuY2xlYW5EYXRhKFtkXSkpLGQucGFyZW50Tm9kZSYmZC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGQpO3JldHVybiB0aGlzfSxlbXB0eTpmdW5jdGlvbigpCit7Zm9yKHZhciBhPTAsYjsoYj10aGlzW2FdKSE9bnVsbDthKyspe2Iubm9kZVR5cGU9PT0xJiZmLmNsZWFuRGF0YShiLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikpO3doaWxlKGIuZmlyc3RDaGlsZCliLnJlbW92ZUNoaWxkKGIuZmlyc3RDaGlsZCl9cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKGEsYil7YT1hPT1udWxsPyExOmEsYj1iPT1udWxsP2E6YjtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gZi5jbG9uZSh0aGlzLGEsYil9KX0saHRtbDpmdW5jdGlvbihhKXtpZihhPT09YilyZXR1cm4gdGhpc1swXSYmdGhpc1swXS5ub2RlVHlwZT09PTE/dGhpc1swXS5pbm5lckhUTUwucmVwbGFjZShXLCIiKTpudWxsO2lmKHR5cGVvZiBhPT0ic3RyaW5nIiYmIWJhLnRlc3QoYSkmJihmLnN1cHBvcnQubGVhZGluZ1doaXRlc3BhY2V8fCFYLnRlc3QoYSkpJiYhYmdbKFouZXhlYyhhKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKV0pe2E9YS5yZXBsYWNlKFksIjwkMT48LyQyPiIpO3RyeXtmb3IodmFyIGM9MCxkPXRoaXMubGVuZ3RoO2M8ZDtjKyspdGhpc1tjXS5ub2RlVHlwZT09PTEmJihmLmNsZWFuRGF0YSh0aGlzW2NdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikpLHRoaXNbY10uaW5uZXJIVE1MPWEpfWNhdGNoKGUpe3RoaXMuZW1wdHkoKS5hcHBlbmQoYSl9fWVsc2UgZi5pc0Z1bmN0aW9uKGEpP3RoaXMuZWFjaChmdW5jdGlvbihiKXt2YXIgYz1mKHRoaXMpO2MuaHRtbChhLmNhbGwodGhpcyxiLGMuaHRtbCgpKSl9KTp0aGlzLmVtcHR5KCkuYXBwZW5kKGEpO3JldHVybiB0aGlzfSxyZXBsYWNlV2l0aDpmdW5jdGlvbihhKXtpZih0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGUpe2lmKGYuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe3ZhciBjPWYodGhpcyksZD1jLmh0bWwoKTtjLnJlcGxhY2VXaXRoKGEuY2FsbCh0aGlzLGIsZCkpfSk7dHlwZW9mIGEhPSJzdHJpbmciJiYoYT1mKGEpLmRldGFjaCgpKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5uZXh0U2libGluZyxjPXRoaXMucGFyZW50Tm9kZTtmKHRoaXMpLnJlbW92ZSgpLGI/ZihiKS5iZWZvcmUoYSk6ZihjKS5hcHBlbmQoYSl9KX1yZXR1cm4gdGhpcy5sZW5ndGg/dGhpcy5wdXNoU3RhY2soZihmLmlzRnVuY3Rpb24oYSk/YSgpOmEpLCJyZXBsYWNlV2l0aCIsYSk6dGhpc30sZGV0YWNoOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnJlbW92ZShhLCEwKX0sZG9tTWFuaXA6ZnVuY3Rpb24oYSxjLGQpe3ZhciBlLGcsaCxpLGo9YVswXSxrPVtdO2lmKCFmLnN1cHBvcnQuY2hlY2tDbG9uZSYmYXJndW1lbnRzLmxlbmd0aD09PTMmJnR5cGVvZiBqPT0ic3RyaW5nIiYmYmQudGVzdChqKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Zih0aGlzKS5kb21NYW5pcChhLGMsZCwhMCl9KTtpZihmLmlzRnVuY3Rpb24oaikpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihlKXt2YXIgZz1mKHRoaXMpO2FbMF09ai5jYWxsKHRoaXMsZSxjP2cuaHRtbCgpOmIpLGcuZG9tTWFuaXAoYSxjLGQpfSk7aWYodGhpc1swXSl7aT1qJiZqLnBhcmVudE5vZGUsZi5zdXBwb3J0LnBhcmVudE5vZGUmJmkmJmkubm9kZVR5cGU9PT0xMSYmaS5jaGlsZE5vZGVzLmxlbmd0aD09PXRoaXMubGVuZ3RoP2U9e2ZyYWdtZW50Oml9OmU9Zi5idWlsZEZyYWdtZW50KGEsdGhpcyxrKSxoPWUuZnJhZ21lbnQsaC5jaGlsZE5vZGVzLmxlbmd0aD09PTE/Zz1oPWguZmlyc3RDaGlsZDpnPWguZmlyc3RDaGlsZDtpZihnKXtjPWMmJmYubm9kZU5hbWUoZywidHIiKTtmb3IodmFyIGw9MCxtPXRoaXMubGVuZ3RoLG49bS0xO2w8bTtsKyspZC5jYWxsKGM/YmkodGhpc1tsXSxnKTp0aGlzW2xdLGUuY2FjaGVhYmxlfHxtPjEmJmw8bj9mLmNsb25lKGgsITAsITApOmgpfWsubGVuZ3RoJiZmLmVhY2goayxicCl9cmV0dXJuIHRoaXN9fSksZi5idWlsZEZyYWdtZW50PWZ1bmN0aW9uKGEsYixkKXt2YXIgZSxnLGgsaSxqPWFbMF07YiYmYlswXSYmKGk9YlswXS5vd25lckRvY3VtZW50fHxiWzBdKSxpLmNyZWF0ZURvY3VtZW50RnJhZ21lbnR8fChpPWMpLGEubGVuZ3RoPT09MSYmdHlwZW9mIGo9PSJzdHJpbmciJiZqLmxlbmd0aDw1MTImJmk9PT1jJiZqLmNoYXJBdCgwKT09PSI8IiYmIWJiLnRlc3QoaikmJihmLnN1cHBvcnQuY2hlY2tDbG9uZXx8IWJkLnRlc3QoaikpJiYoZi5zdXBwb3J0Lmh0bWw1Q2xvbmV8fCFiYy50ZXN0KGopKSYmKGc9ITAsaD1mLmZyYWdtZW50c1tqXSxoJiZoIT09MSYmKGU9aCkpLGV8fChlPWkuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGYuY2xlYW4oYSxpLGUsZCkpLGcmJihmLmZyYWdtZW50c1tqXT1oP2U6MSk7cmV0dXJue2ZyYWdtZW50OmUsY2FjaGVhYmxlOmd9fSxmLmZyYWdtZW50cz17fSxmLmVhY2goe2FwcGVuZFRvOiJhcHBlbmQiLHByZXBlbmRUbzoicHJlcGVuZCIsaW5zZXJ0QmVmb3JlOiJiZWZvcmUiLGluc2VydEFmdGVyOiJhZnRlciIscmVwbGFjZUFsbDoicmVwbGFjZVdpdGgifSxmdW5jdGlvbihhLGIpe2YuZm5bYV09ZnVuY3Rpb24oYyl7dmFyIGQ9W10sZT1mKGMpLGc9dGhpcy5sZW5ndGg9PT0xJiZ0aGlzWzBdLnBhcmVudE5vZGU7aWYoZyYmZy5ub2RlVHlwZT09PTExJiZnLmNoaWxkTm9kZXMubGVuZ3RoPT09MSYmZS5sZW5ndGg9PT0xKXtlW2JdKHRoaXNbMF0pO3JldHVybiB0aGlzfWZvcih2YXIgaD0wLGk9ZS5sZW5ndGg7aDxpO2grKyl7dmFyIGo9KGg+MD90aGlzLmNsb25lKCEwKTp0aGlzKS5nZXQoKTtmKGVbaF0pW2JdKGopLGQ9ZC5jb25jYXQoail9cmV0dXJuIHRoaXMucHVzaFN0YWNrKGQsYSxlLnNlbGVjdG9yKX19KSxmLmV4dGVuZCh7Y2xvbmU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZyxoPWYuc3VwcG9ydC5odG1sNUNsb25lfHwhYmMudGVzdCgiPCIrYS5ub2RlTmFtZSk/YS5jbG9uZU5vZGUoITApOmJvKGEpO2lmKCghZi5zdXBwb3J0Lm5vQ2xvbmVFdmVudHx8IWYuc3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCkmJihhLm5vZGVUeXBlPT09MXx8YS5ub2RlVHlwZT09PTExKSYmIWYuaXNYTUxEb2MoYSkpe2JrKGEsaCksZD1ibChhKSxlPWJsKGgpO2ZvcihnPTA7ZFtnXTsrK2cpZVtnXSYmYmsoZFtnXSxlW2ddKX1pZihiKXtiaihhLGgpO2lmKGMpe2Q9YmwoYSksZT1ibChoKTtmb3IoZz0wO2RbZ107KytnKWJqKGRbZ10sZVtnXSl9fWQ9ZT1udWxsO3JldHVybiBofSxjbGVhbjpmdW5jdGlvbihhLGIsZCxlKXt2YXIgZztiPWJ8fGMsdHlwZW9mIGIuY3JlYXRlRWxlbWVudD09InVuZGVmaW5lZCImJihiPWIub3duZXJEb2N1bWVudHx8YlswXSYmYlswXS5vd25lckRvY3VtZW50fHxjKTt2YXIgaD1bXSxpO2Zvcih2YXIgaj0wLGs7KGs9YVtqXSkhPW51bGw7aisrKXt0eXBlb2Ygaz09Im51bWJlciImJihrKz0iIik7aWYoIWspY29udGludWU7aWYodHlwZW9mIGs9PSJzdHJpbmciKWlmKCFfLnRlc3Qoaykpaz1iLmNyZWF0ZVRleHROb2RlKGspO2Vsc2V7az1rLnJlcGxhY2UoWSwiPCQxPjwvJDI+Iik7dmFyIGw9KFouZXhlYyhrKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKSxtPWJnW2xdfHxiZy5fZGVmYXVsdCxuPW1bMF0sbz1iLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2I9PT1jP2JoLmFwcGVuZENoaWxkKG8pOlUoYikuYXBwZW5kQ2hpbGQobyksby5pbm5lckhUTUw9bVsxXStrK21bMl07d2hpbGUobi0tKW89by5sYXN0Q2hpbGQ7aWYoIWYuc3VwcG9ydC50Ym9keSl7dmFyIHA9JC50ZXN0KGspLHE9bD09PSJ0YWJsZSImJiFwP28uZmlyc3RDaGlsZCYmby5maXJzdENoaWxkLmNoaWxkTm9kZXM6bVsxXT09PSI8dGFibGU+IiYmIXA/by5jaGlsZE5vZGVzOltdO2ZvcihpPXEubGVuZ3RoLTE7aT49MDstLWkpZi5ub2RlTmFtZShxW2ldLCJ0Ym9keSIpJiYhcVtpXS5jaGlsZE5vZGVzLmxlbmd0aCYmcVtpXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHFbaV0pfSFmLnN1cHBvcnQubGVhZGluZ1doaXRlc3BhY2UmJlgudGVzdChrKSYmby5pbnNlcnRCZWZvcmUoYi5jcmVhdGVUZXh0Tm9kZShYLmV4ZWMoaylbMF0pLG8uZmlyc3RDaGlsZCksaz1vLmNoaWxkTm9kZXN9dmFyIHI7aWYoIWYuc3VwcG9ydC5hcHBlbmRDaGVja2VkKWlmKGtbMF0mJnR5cGVvZiAocj1rLmxlbmd0aCk9PSJudW1iZXIiKWZvcihpPTA7aTxyO2krKylibihrW2ldKTtlbHNlIGJuKGspO2subm9kZVR5cGU/aC5wdXNoKGspOmg9Zi5tZXJnZShoLGspfWlmKGQpe2c9ZnVuY3Rpb24oYSl7cmV0dXJuIWEudHlwZXx8YmUudGVzdChhLnR5cGUpfTtmb3Ioaj0wO2hbal07aisrKWlmKGUmJmYubm9kZU5hbWUoaFtqXSwic2NyaXB0IikmJighaFtqXS50eXBlfHxoW2pdLnR5cGUudG9Mb3dlckNhc2UoKT09PSJ0ZXh0L2phdmFzY3JpcHQiKSllLnB1c2goaFtqXS5wYXJlbnROb2RlP2hbal0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChoW2pdKTpoW2pdKTtlbHNle2lmKGhbal0ubm9kZVR5cGU9PT0xKXt2YXIgcz1mLmdyZXAoaFtqXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IiksZyk7aC5zcGxpY2UuYXBwbHkoaCxbaisxLDBdLmNvbmNhdChzKSl9ZC5hcHBlbmRDaGlsZChoW2pdKX19cmV0dXJuIGh9LGNsZWFuRGF0YTpmdW5jdGlvbihhKXt2YXIgYixjLGQ9Zi5jYWNoZSxlPWYuZXZlbnQuc3BlY2lhbCxnPWYuc3VwcG9ydC5kZWxldGVFeHBhbmRvO2Zvcih2YXIgaD0wLGk7KGk9YVtoXSkhPW51bGw7aCsrKXtpZihpLm5vZGVOYW1lJiZmLm5vRGF0YVtpLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldKWNvbnRpbnVlO2M9aVtmLmV4cGFuZG9dO2lmKGMpe2I9ZFtjXTtpZihiJiZiLmV2ZW50cyl7Zm9yKHZhciBqIGluIGIuZXZlbnRzKWVbal0/Zi5ldmVudC5yZW1vdmUoaSxqKTpmLnJlbW92ZUV2ZW50KGksaixiLmhhbmRsZSk7Yi5oYW5kbGUmJihiLmhhbmRsZS5lbGVtPW51bGwpfWc/ZGVsZXRlIGlbZi5leHBhbmRvXTppLnJlbW92ZUF0dHJpYnV0ZSYmaS5yZW1vdmVBdHRyaWJ1dGUoZi5leHBhbmRvKSxkZWxldGUgZFtjXX19fX0pO3ZhciBicT0vYWxwaGFcKFteKV0qXCkvaSxicj0vb3BhY2l0eT0oW14pXSopLyxicz0vKFtBLVpdfF5tcykvZyxidD0vXi0/XGQrKD86cHgpPyQvaSxidT0vXi0/XGQvLGJ2PS9eKFtcLStdKT0oW1wtKy5cZGVdKykvLGJ3PXtwb3NpdGlvbjoiYWJzb2x1dGUiLHZpc2liaWxpdHk6ImhpZGRlbiIsZGlzcGxheToiYmxvY2sifSxieD1bIkxlZnQiLCJSaWdodCJdLGJ5PVsiVG9wIiwiQm90dG9tIl0sYnosYkEsYkI7Zi5mbi5jc3M9ZnVuY3Rpb24oYSxjKXtpZihhcmd1bWVudHMubGVuZ3RoPT09MiYmYz09PWIpcmV0dXJuIHRoaXM7cmV0dXJuIGYuYWNjZXNzKHRoaXMsYSxjLCEwLGZ1bmN0aW9uKGEsYyxkKXtyZXR1cm4gZCE9PWI/Zi5zdHlsZShhLGMsZCk6Zi5jc3MoYSxjKX0pfSxmLmV4dGVuZCh7Y3NzSG9va3M6e29wYWNpdHk6e2dldDpmdW5jdGlvbihhLGIpe2lmKGIpe3ZhciBjPWJ6KGEsIm9wYWNpdHkiLCJvcGFjaXR5Iik7cmV0dXJuIGM9PT0iIj8iMSI6Y31yZXR1cm4gYS5zdHlsZS5vcGFjaXR5fX19LGNzc051bWJlcjp7ZmlsbE9wYWNpdHk6ITAsZm9udFdlaWdodDohMCxsaW5lSGVpZ2h0OiEwLG9wYWNpdHk6ITAsb3JwaGFuczohMCx3aWRvd3M6ITAsekluZGV4OiEwLHpvb206ITB9LGNzc1Byb3BzOnsiZmxvYXQiOmYuc3VwcG9ydC5jc3NGbG9hdD8iY3NzRmxvYXQiOiJzdHlsZUZsb2F0In0sc3R5bGU6ZnVuY3Rpb24oYSxjLGQsZSl7aWYoISFhJiZhLm5vZGVUeXBlIT09MyYmYS5ub2RlVHlwZSE9PTgmJiEhYS5zdHlsZSl7dmFyIGcsaCxpPWYuY2FtZWxDYXNlKGMpLGo9YS5zdHlsZSxrPWYuY3NzSG9va3NbaV07Yz1mLmNzc1Byb3BzW2ldfHxpO2lmKGQ9PT1iKXtpZihrJiYiZ2V0ImluIGsmJihnPWsuZ2V0KGEsITEsZSkpIT09YilyZXR1cm4gZztyZXR1cm4galtjXX1oPXR5cGVvZiBkLGg9PT0ic3RyaW5nIiYmKGc9YnYuZXhlYyhkKSkmJihkPSsoZ1sxXSsxKSorZ1syXStwYXJzZUZsb2F0KGYuY3NzKGEsYykpLGg9Im51bWJlciIpO2lmKGQ9PW51bGx8fGg9PT0ibnVtYmVyIiYmaXNOYU4oZCkpcmV0dXJuO2g9PT0ibnVtYmVyIiYmIWYuY3NzTnVtYmVyW2ldJiYoZCs9InB4Iik7aWYoIWt8fCEoInNldCJpbiBrKXx8KGQ9ay5zZXQoYSxkKSkhPT1iKXRyeXtqW2NdPWR9Y2F0Y2gobCl7fX19LGNzczpmdW5jdGlvbihhLGMsZCl7dmFyIGUsZztjPWYuY2FtZWxDYXNlKGMpLGc9Zi5jc3NIb29rc1tjXSxjPWYuY3NzUHJvcHNbY118fGMsYz09PSJjc3NGbG9hdCImJihjPSJmbG9hdCIpO2lmKGcmJiJnZXQiaW4gZyYmKGU9Zy5nZXQoYSwhMCxkKSkhPT1iKXJldHVybiBlO2lmKGJ6KXJldHVybiBieihhLGMpfSxzd2FwOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD17fTtmb3IodmFyIGUgaW4gYilkW2VdPWEuc3R5bGVbZV0sYS5zdHlsZVtlXT1iW2VdO2MuY2FsbChhKTtmb3IoZSBpbiBiKWEuc3R5bGVbZV09ZFtlXX19KSxmLmN1ckNTUz1mLmNzcyxmLmVhY2goWyJoZWlnaHQiLCJ3aWR0aCJdLGZ1bmN0aW9uKGEsYil7Zi5jc3NIb29rc1tiXT17Z2V0OmZ1bmN0aW9uKGEsYyxkKXt2YXIgZTtpZihjKXtpZihhLm9mZnNldFdpZHRoIT09MClyZXR1cm4gYkMoYSxiLGQpO2Yuc3dhcChhLGJ3LGZ1bmN0aW9uKCl7ZT1iQyhhLGIsZCl9KTtyZXR1cm4gZX19LHNldDpmdW5jdGlvbihhLGIpe2lmKCFidC50ZXN0KGIpKXJldHVybiBiO2I9cGFyc2VGbG9hdChiKTtpZihiPj0wKXJldHVybiBiKyJweCJ9fX0pLGYuc3VwcG9ydC5vcGFjaXR5fHwoZi5jc3NIb29rcy5vcGFjaXR5PXtnZXQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYnIudGVzdCgoYiYmYS5jdXJyZW50U3R5bGU/YS5jdXJyZW50U3R5bGUuZmlsdGVyOmEuc3R5bGUuZmlsdGVyKXx8IiIpP3BhcnNlRmxvYXQoUmVnRXhwLiQxKS8xMDArIiI6Yj8iMSI6IiJ9LHNldDpmdW5jdGlvbihhLGIpe3ZhciBjPWEuc3R5bGUsZD1hLmN1cnJlbnRTdHlsZSxlPWYuaXNOdW1lcmljKGIpPyJhbHBoYShvcGFjaXR5PSIrYioxMDArIikiOiIiLGc9ZCYmZC5maWx0ZXJ8fGMuZmlsdGVyfHwiIjtjLnpvb209MTtpZihiPj0xJiZmLnRyaW0oZy5yZXBsYWNlKGJxLCIiKSk9PT0iIil7Yy5yZW1vdmVBdHRyaWJ1dGUoImZpbHRlciIpO2lmKGQmJiFkLmZpbHRlcilyZXR1cm59Yy5maWx0ZXI9YnEudGVzdChnKT9nLnJlcGxhY2UoYnEsZSk6ZysiICIrZX19KSxmKGZ1bmN0aW9uKCl7Zi5zdXBwb3J0LnJlbGlhYmxlTWFyZ2luUmlnaHR8fChmLmNzc0hvb2tzLm1hcmdpblJpZ2h0PXtnZXQ6ZnVuY3Rpb24oYSxiKXt2YXIgYztmLnN3YXAoYSx7ZGlzcGxheToiaW5saW5lLWJsb2NrIn0sZnVuY3Rpb24oKXtiP2M9YnooYSwibWFyZ2luLXJpZ2h0IiwibWFyZ2luUmlnaHQiKTpjPWEuc3R5bGUubWFyZ2luUmlnaHR9KTtyZXR1cm4gY319KX0pLGMuZGVmYXVsdFZpZXcmJmMuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSYmKGJBPWZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlO2I9Yi5yZXBsYWNlKGJzLCItJDEiKS50b0xvd2VyQ2FzZSgpLChkPWEub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldykmJihlPWQuZ2V0Q29tcHV0ZWRTdHlsZShhLG51bGwpKSYmKGM9ZS5nZXRQcm9wZXJ0eVZhbHVlKGIpLGM9PT0iIiYmIWYuY29udGFpbnMoYS5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxhKSYmKGM9Zi5zdHlsZShhLGIpKSk7cmV0dXJuIGN9KSxjLmRvY3VtZW50RWxlbWVudC5jdXJyZW50U3R5bGUmJihiQj1mdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxmPWEuY3VycmVudFN0eWxlJiZhLmN1cnJlbnRTdHlsZVtiXSxnPWEuc3R5bGU7Zj09PW51bGwmJmcmJihlPWdbYl0pJiYoZj1lKSwhYnQudGVzdChmKSYmYnUudGVzdChmKSYmKGM9Zy5sZWZ0LGQ9YS5ydW50aW1lU3R5bGUmJmEucnVudGltZVN0eWxlLmxlZnQsZCYmKGEucnVudGltZVN0eWxlLmxlZnQ9YS5jdXJyZW50U3R5bGUubGVmdCksZy5sZWZ0PWI9PT0iZm9udFNpemUiPyIxZW0iOmZ8fDAsZj1nLnBpeGVsTGVmdCsicHgiLGcubGVmdD1jLGQmJihhLnJ1bnRpbWVTdHlsZS5sZWZ0PWQpKTtyZXR1cm4gZj09PSIiPyJhdXRvIjpmfSksYno9YkF8fGJCLGYuZXhwciYmZi5leHByLmZpbHRlcnMmJihmLmV4cHIuZmlsdGVycy5oaWRkZW49ZnVuY3Rpb24oYSl7dmFyIGI9YS5vZmZzZXRXaWR0aCxjPWEub2Zmc2V0SGVpZ2h0O3JldHVybiBiPT09MCYmYz09PTB8fCFmLnN1cHBvcnQucmVsaWFibGVIaWRkZW5PZmZzZXRzJiYoYS5zdHlsZSYmYS5zdHlsZS5kaXNwbGF5fHxmLmNzcyhhLCJkaXNwbGF5IikpPT09Im5vbmUifSxmLmV4cHIuZmlsdGVycy52aXNpYmxlPWZ1bmN0aW9uKGEpe3JldHVybiFmLmV4cHIuZmlsdGVycy5oaWRkZW4oYSl9KTt2YXIgYkQ9LyUyMC9nLGJFPS9cW1xdJC8sYkY9L1xyP1xuL2csYkc9LyMuKiQvLGJIPS9eKC4qPyk6WyBcdF0qKFteXHJcbl0qKVxyPyQvbWcsYkk9L14oPzpjb2xvcnxkYXRlfGRhdGV0aW1lfGRhdGV0aW1lLWxvY2FsfGVtYWlsfGhpZGRlbnxtb250aHxudW1iZXJ8cGFzc3dvcmR8cmFuZ2V8c2VhcmNofHRlbHx0ZXh0fHRpbWV8dXJsfHdlZWspJC9pLGJKPS9eKD86YWJvdXR8YXBwfGFwcFwtc3RvcmFnZXwuK1wtZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8sYks9L14oPzpHRVR8SEVBRCkkLyxiTD0vXlwvXC8vLGJNPS9cPy8sYk49LzxzY3JpcHRcYltePF0qKD86KD8hPFwvc2NyaXB0Pik8W148XSopKjxcL3NjcmlwdD4vZ2ksYk89L14oPzpzZWxlY3R8dGV4dGFyZWEpL2ksYlA9L1xzKy8sYlE9LyhbPyZdKV89W14mXSovLGJSPS9eKFtcd1wrXC5cLV0rOikoPzpcL1wvKFteXC8/IzpdKikoPzo6KFxkKykpPyk/LyxiUz1mLmZuLmxvYWQsYlQ9e30sYlU9e30sYlYsYlcsYlg9WyIqLyJdK1siKiJdO3RyeXtiVj1lLmhyZWZ9Y2F0Y2goYlkpe2JWPWMuY3JlYXRlRWxlbWVudCgiYSIpLGJWLmhyZWY9IiIsYlY9YlYuaHJlZn1iVz1iUi5leGVjKGJWLnRvTG93ZXJDYXNlKCkpfHxbXSxmLmZuLmV4dGVuZCh7bG9hZDpmdW5jdGlvbihhLGMsZCl7aWYodHlwZW9mIGEhPSJzdHJpbmciJiZiUylyZXR1cm4gYlMuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKCF0aGlzLmxlbmd0aClyZXR1cm4gdGhpczt2YXIgZT1hLmluZGV4T2YoIiAiKTtpZihlPj0wKXt2YXIgZz1hLnNsaWNlKGUsYS5sZW5ndGgpO2E9YS5zbGljZSgwLGUpfXZhciBoPSJHRVQiO2MmJihmLmlzRnVuY3Rpb24oYyk/KGQ9YyxjPWIpOnR5cGVvZiBjPT0ib2JqZWN0IiYmKGM9Zi5wYXJhbShjLGYuYWpheFNldHRpbmdzLnRyYWRpdGlvbmFsKSxoPSJQT1NUIikpO3ZhciBpPXRoaXM7Zi5hamF4KHt1cmw6YSx0eXBlOmgsZGF0YVR5cGU6Imh0bWwiLGRhdGE6Yyxjb21wbGV0ZTpmdW5jdGlvbihhLGIsYyl7Yz1hLnJlc3BvbnNlVGV4dCxhLmlzUmVzb2x2ZWQoKSYmKGEuZG9uZShmdW5jdGlvbihhKXtjPWF9KSxpLmh0bWwoZz9mKCI8ZGl2PiIpLmFwcGVuZChjLnJlcGxhY2UoYk4sIiIpKS5maW5kKGcpOmMpKSxkJiZpLmVhY2goZCxbYyxiLGFdKX19KTtyZXR1cm4gdGhpc30sc2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIGYucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50cz9mLm1ha2VBcnJheSh0aGlzLmVsZW1lbnRzKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmFtZSYmIXRoaXMuZGlzYWJsZWQmJih0aGlzLmNoZWNrZWR8fGJPLnRlc3QodGhpcy5ub2RlTmFtZSl8fGJJLnRlc3QodGhpcy50eXBlKSl9KS5tYXAoZnVuY3Rpb24oYSxiKXt2YXIgYz1mKHRoaXMpLnZhbCgpO3JldHVybiBjPT1udWxsP251bGw6Zi5pc0FycmF5KGMpP2YubWFwKGMsZnVuY3Rpb24oYSxjKXtyZXR1cm57bmFtZTpiLm5hbWUsdmFsdWU6YS5yZXBsYWNlKGJGLCJcclxuIil9fSk6e25hbWU6Yi5uYW1lLHZhbHVlOmMucmVwbGFjZShiRiwiXHJcbiIpfX0pLmdldCgpfX0pLGYuZWFjaCgiYWpheFN0YXJ0IGFqYXhTdG9wIGFqYXhDb21wbGV0ZSBhamF4RXJyb3IgYWpheFN1Y2Nlc3MgYWpheFNlbmQiLnNwbGl0KCIgIiksZnVuY3Rpb24oYSxiKXtmLmZuW2JdPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm9uKGIsYSl9fSksZi5lYWNoKFsiZ2V0IiwicG9zdCJdLGZ1bmN0aW9uKGEsYyl7ZltjXT1mdW5jdGlvbihhLGQsZSxnKXtmLmlzRnVuY3Rpb24oZCkmJihnPWd8fGUsZT1kLGQ9Yik7cmV0dXJuIGYuYWpheCh7dHlwZTpjLHVybDphLGRhdGE6ZCxzdWNjZXNzOmUsZGF0YVR5cGU6Z30pfX0pLGYuZXh0ZW5kKHtnZXRTY3JpcHQ6ZnVuY3Rpb24oYSxjKXtyZXR1cm4gZi5nZXQoYSxiLGMsInNjcmlwdCIpfSxnZXRKU09OOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZi5nZXQoYSxiLGMsImpzb24iKX0sYWpheFNldHVwOmZ1bmN0aW9uKGEsYil7Yj9iXyhhLGYuYWpheFNldHRpbmdzKTooYj1hLGE9Zi5hamF4U2V0dGluZ3MpLGJfKGEsYik7cmV0dXJuIGF9LGFqYXhTZXR0aW5nczp7dXJsOmJWLGlzTG9jYWw6YkoudGVzdChiV1sxXSksZ2xvYmFsOiEwLHR5cGU6IkdFVCIsY29udGVudFR5cGU6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIscHJvY2Vzc0RhdGE6ITAsYXN5bmM6ITAsYWNjZXB0czp7eG1sOiJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sIixodG1sOiJ0ZXh0L2h0bWwiLHRleHQ6InRleHQvcGxhaW4iLGpzb246ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCIsIioiOmJYfSxjb250ZW50czp7eG1sOi94bWwvLGh0bWw6L2h0bWwvLGpzb246L2pzb24vfSxyZXNwb25zZUZpZWxkczp7eG1sOiJyZXNwb25zZVhNTCIsdGV4dDoicmVzcG9uc2VUZXh0In0sY29udmVydGVyczp7IiogdGV4dCI6YS5TdHJpbmcsInRleHQgaHRtbCI6ITAsInRleHQganNvbiI6Zi5wYXJzZUpTT04sInRleHQgeG1sIjpmLnBhcnNlWE1MfSxmbGF0T3B0aW9uczp7Y29udGV4dDohMCx1cmw6ITB9fSxhamF4UHJlZmlsdGVyOmJaKGJUKSxhamF4VHJhbnNwb3J0OmJaKGJVKSxhamF4OmZ1bmN0aW9uKGEsYyl7ZnVuY3Rpb24gdyhhLGMsbCxtKXtpZihzIT09Mil7cz0yLHEmJmNsZWFyVGltZW91dChxKSxwPWIsbj1tfHwiIix2LnJlYWR5U3RhdGU9YT4wPzQ6MDt2YXIgbyxyLHUsdz1jLHg9bD9jYihkLHYsbCk6Yix5LHo7aWYoYT49MjAwJiZhPDMwMHx8YT09PTMwNCl7aWYoZC5pZk1vZGlmaWVkKXtpZih5PXYuZ2V0UmVzcG9uc2VIZWFkZXIoIkxhc3QtTW9kaWZpZWQiKSlmLmxhc3RNb2RpZmllZFtrXT15O2lmKHo9di5nZXRSZXNwb25zZUhlYWRlcigiRXRhZyIpKWYuZXRhZ1trXT16fWlmKGE9PT0zMDQpdz0ibm90bW9kaWZpZWQiLG89ITA7ZWxzZSB0cnl7cj1jYyhkLHgpLHc9InN1Y2Nlc3MiLG89ITB9Y2F0Y2goQSl7dz0icGFyc2VyZXJyb3IiLHU9QX19ZWxzZXt1PXc7aWYoIXd8fGEpdz0iZXJyb3IiLGE8MCYmKGE9MCl9di5zdGF0dXM9YSx2LnN0YXR1c1RleHQ9IiIrKGN8fHcpLG8/aC5yZXNvbHZlV2l0aChlLFtyLHcsdl0pOmgucmVqZWN0V2l0aChlLFt2LHcsdV0pLHYuc3RhdHVzQ29kZShqKSxqPWIsdCYmZy50cmlnZ2VyKCJhamF4Iisobz8iU3VjY2VzcyI6IkVycm9yIiksW3YsZCxvP3I6dV0pLGkuZmlyZVdpdGgoZSxbdix3XSksdCYmKGcudHJpZ2dlcigiYWpheENvbXBsZXRlIixbdixkXSksLS1mLmFjdGl2ZXx8Zi5ldmVudC50cmlnZ2VyKCJhamF4U3RvcCIpKX19dHlwZW9mIGE9PSJvYmplY3QiJiYoYz1hLGE9YiksYz1jfHx7fTt2YXIgZD1mLmFqYXhTZXR1cCh7fSxjKSxlPWQuY29udGV4dHx8ZCxnPWUhPT1kJiYoZS5ub2RlVHlwZXx8ZSBpbnN0YW5jZW9mIGYpP2YoZSk6Zi5ldmVudCxoPWYuRGVmZXJyZWQoKSxpPWYuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLGo9ZC5zdGF0dXNDb2RlfHx7fSxrLGw9e30sbT17fSxuLG8scCxxLHIscz0wLHQsdSx2PXtyZWFkeVN0YXRlOjAsc2V0UmVxdWVzdEhlYWRlcjpmdW5jdGlvbihhLGIpe2lmKCFzKXt2YXIgYz1hLnRvTG93ZXJDYXNlKCk7YT1tW2NdPW1bY118fGEsbFthXT1ifXJldHVybiB0aGlzfSxnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gcz09PTI/bjpudWxsfSxnZXRSZXNwb25zZUhlYWRlcjpmdW5jdGlvbihhKXt2YXIgYztpZihzPT09Mil7aWYoIW8pe289e307d2hpbGUoYz1iSC5leGVjKG4pKW9bY1sxXS50b0xvd2VyQ2FzZSgpXT1jWzJdfWM9b1thLnRvTG93ZXJDYXNlKCldfXJldHVybiBjPT09Yj9udWxsOmN9LG92ZXJyaWRlTWltZVR5cGU6ZnVuY3Rpb24oYSl7c3x8KGQubWltZVR5cGU9YSk7cmV0dXJuIHRoaXN9LGFib3J0OmZ1bmN0aW9uKGEpe2E9YXx8ImFib3J0IixwJiZwLmFib3J0KGEpLHcoMCxhKTtyZXR1cm4gdGhpc319O2gucHJvbWlzZSh2KSx2LnN1Y2Nlc3M9di5kb25lLHYuZXJyb3I9di5mYWlsLHYuY29tcGxldGU9aS5hZGQsdi5zdGF0dXNDb2RlPWZ1bmN0aW9uKGEpe2lmKGEpe3ZhciBiO2lmKHM8Milmb3IoYiBpbiBhKWpbYl09W2pbYl0sYVtiXV07ZWxzZSBiPWFbdi5zdGF0dXNdLHYudGhlbihiLGIpfXJldHVybiB0aGlzfSxkLnVybD0oKGF8fGQudXJsKSsiIikucmVwbGFjZShiRywiIikucmVwbGFjZShiTCxiV1sxXSsiLy8iKSxkLmRhdGFUeXBlcz1mLnRyaW0oZC5kYXRhVHlwZXx8IioiKS50b0xvd2VyQ2FzZSgpLnNwbGl0KGJQKSxkLmNyb3NzRG9tYWluPT1udWxsJiYocj1iUi5leGVjKGQudXJsLnRvTG93ZXJDYXNlKCkpLGQuY3Jvc3NEb21haW49ISghcnx8clsxXT09YldbMV0mJnJbMl09PWJXWzJdJiYoclszXXx8KHJbMV09PT0iaHR0cDoiPzgwOjQ0MykpPT0oYldbM118fChiV1sxXT09PSJodHRwOiI/ODA6NDQzKSkpKSxkLmRhdGEmJmQucHJvY2Vzc0RhdGEmJnR5cGVvZiBkLmRhdGEhPSJzdHJpbmciJiYoZC5kYXRhPWYucGFyYW0oZC5kYXRhLGQudHJhZGl0aW9uYWwpKSxiJChiVCxkLGMsdik7aWYocz09PTIpcmV0dXJuITE7dD1kLmdsb2JhbCxkLnR5cGU9ZC50eXBlLnRvVXBwZXJDYXNlKCksZC5oYXNDb250ZW50PSFiSy50ZXN0KGQudHlwZSksdCYmZi5hY3RpdmUrKz09PTAmJmYuZXZlbnQudHJpZ2dlcigiYWpheFN0YXJ0Iik7aWYoIWQuaGFzQ29udGVudCl7ZC5kYXRhJiYoZC51cmwrPShiTS50ZXN0KGQudXJsKT8iJiI6Ij8iKStkLmRhdGEsZGVsZXRlIGQuZGF0YSksaz1kLnVybDtpZihkLmNhY2hlPT09ITEpe3ZhciB4PWYubm93KCkseT1kLnVybC5yZXBsYWNlKGJRLCIkMV89Iit4KTtkLnVybD15Kyh5PT09ZC51cmw/KGJNLnRlc3QoZC51cmwpPyImIjoiPyIpKyJfPSIreDoiIil9fShkLmRhdGEmJmQuaGFzQ29udGVudCYmZC5jb250ZW50VHlwZSE9PSExfHxjLmNvbnRlbnRUeXBlKSYmdi5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLGQuY29udGVudFR5cGUpLGQuaWZNb2RpZmllZCYmKGs9a3x8ZC51cmwsZi5sYXN0TW9kaWZpZWRba10mJnYuc2V0UmVxdWVzdEhlYWRlcigiSWYtTW9kaWZpZWQtU2luY2UiLGYubGFzdE1vZGlmaWVkW2tdKSxmLmV0YWdba10mJnYuc2V0UmVxdWVzdEhlYWRlcigiSWYtTm9uZS1NYXRjaCIsZi5ldGFnW2tdKSksdi5zZXRSZXF1ZXN0SGVhZGVyKCJBY2NlcHQiLGQuZGF0YVR5cGVzWzBdJiZkLmFjY2VwdHNbZC5kYXRhVHlwZXNbMF1dP2QuYWNjZXB0c1tkLmRhdGFUeXBlc1swXV0rKGQuZGF0YVR5cGVzWzBdIT09IioiPyIsICIrYlgrIjsgcT0wLjAxIjoiIik6ZC5hY2NlcHRzWyIqIl0pO2Zvcih1IGluIGQuaGVhZGVycyl2LnNldFJlcXVlc3RIZWFkZXIodSxkLmhlYWRlcnNbdV0pO2lmKGQuYmVmb3JlU2VuZCYmKGQuYmVmb3JlU2VuZC5jYWxsKGUsdixkKT09PSExfHxzPT09Mikpe3YuYWJvcnQoKTtyZXR1cm4hMX1mb3IodSBpbntzdWNjZXNzOjEsZXJyb3I6MSxjb21wbGV0ZToxfSl2W3VdKGRbdV0pO3A9YiQoYlUsZCxjLHYpO2lmKCFwKXcoLTEsIk5vIFRyYW5zcG9ydCIpO2Vsc2V7di5yZWFkeVN0YXRlPTEsdCYmZy50cmlnZ2VyKCJhamF4U2VuZCIsW3YsZF0pLGQuYXN5bmMmJmQudGltZW91dD4wJiYocT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7di5hYm9ydCgidGltZW91dCIpfSxkLnRpbWVvdXQpKTt0cnl7cz0xLHAuc2VuZChsLHcpfWNhdGNoKHope2lmKHM8Mil3KC0xLHopO2Vsc2UgdGhyb3cgen19cmV0dXJuIHZ9LHBhcmFtOmZ1bmN0aW9uKGEsYyl7dmFyIGQ9W10sZT1mdW5jdGlvbihhLGIpe2I9Zi5pc0Z1bmN0aW9uKGIpP2IoKTpiLGRbZC5sZW5ndGhdPWVuY29kZVVSSUNvbXBvbmVudChhKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGIpfTtjPT09YiYmKGM9Zi5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWwpO2lmKGYuaXNBcnJheShhKXx8YS5qcXVlcnkmJiFmLmlzUGxhaW5PYmplY3QoYSkpZi5lYWNoKGEsZnVuY3Rpb24oKXtlKHRoaXMubmFtZSx0aGlzLnZhbHVlKX0pO2Vsc2UgZm9yKHZhciBnIGluIGEpY2EoZyxhW2ddLGMsZSk7cmV0dXJuIGQuam9pbigiJiIpLnJlcGxhY2UoYkQsIisiKX19KSxmLmV4dGVuZCh7YWN0aXZlOjAsbGFzdE1vZGlmaWVkOnt9LGV0YWc6e319KTt2YXIgY2Q9Zi5ub3coKSxjZT0vKFw9KVw/KCZ8JCl8XD9cPy9pO2YuYWpheFNldHVwKHtqc29ucDoiY2FsbGJhY2siLGpzb25wQ2FsbGJhY2s6ZnVuY3Rpb24oKXtyZXR1cm4gZi5leHBhbmRvKyJfIitjZCsrfX0pLGYuYWpheFByZWZpbHRlcigianNvbiBqc29ucCIsZnVuY3Rpb24oYixjLGQpe3ZhciBlPWIuY29udGVudFR5cGU9PT0iYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiYmdHlwZW9mIGIuZGF0YT09InN0cmluZyI7aWYoYi5kYXRhVHlwZXNbMF09PT0ianNvbnAifHxiLmpzb25wIT09ITEmJihjZS50ZXN0KGIudXJsKXx8ZSYmY2UudGVzdChiLmRhdGEpKSl7dmFyIGcsaD1iLmpzb25wQ2FsbGJhY2s9Zi5pc0Z1bmN0aW9uKGIuanNvbnBDYWxsYmFjayk/Yi5qc29ucENhbGxiYWNrKCk6Yi5qc29ucENhbGxiYWNrLGk9YVtoXSxqPWIudXJsLGs9Yi5kYXRhLGw9IiQxIitoKyIkMiI7Yi5qc29ucCE9PSExJiYoaj1qLnJlcGxhY2UoY2UsbCksYi51cmw9PT1qJiYoZSYmKGs9ay5yZXBsYWNlKGNlLGwpKSxiLmRhdGE9PT1rJiYoais9KC9cPy8udGVzdChqKT8iJiI6Ij8iKStiLmpzb25wKyI9IitoKSkpLGIudXJsPWosYi5kYXRhPWssYVtoXT1mdW5jdGlvbihhKXtnPVthXX0sZC5hbHdheXMoZnVuY3Rpb24oKXthW2hdPWksZyYmZi5pc0Z1bmN0aW9uKGkpJiZhW2hdKGdbMF0pfSksYi5jb252ZXJ0ZXJzWyJzY3JpcHQganNvbiJdPWZ1bmN0aW9uKCl7Z3x8Zi5lcnJvcihoKyIgd2FzIG5vdCBjYWxsZWQiKTtyZXR1cm4gZ1swXX0sYi5kYXRhVHlwZXNbMF09Impzb24iO3JldHVybiJzY3JpcHQifX0pLGYuYWpheFNldHVwKHthY2NlcHRzOntzY3JpcHQ6InRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0In0sY29udGVudHM6e3NjcmlwdDovamF2YXNjcmlwdHxlY21hc2NyaXB0L30sY29udmVydGVyczp7InRleHQgc2NyaXB0IjpmdW5jdGlvbihhKXtmLmdsb2JhbEV2YWwoYSk7cmV0dXJuIGF9fX0pLGYuYWpheFByZWZpbHRlcigic2NyaXB0IixmdW5jdGlvbihhKXthLmNhY2hlPT09YiYmKGEuY2FjaGU9ITEpLGEuY3Jvc3NEb21haW4mJihhLnR5cGU9IkdFVCIsYS5nbG9iYWw9ITEpfSksZi5hamF4VHJhbnNwb3J0KCJzY3JpcHQiLGZ1bmN0aW9uKGEpe2lmKGEuY3Jvc3NEb21haW4pe3ZhciBkLGU9Yy5oZWFkfHxjLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF18fGMuZG9jdW1lbnRFbGVtZW50O3JldHVybntzZW5kOmZ1bmN0aW9uKGYsZyl7ZD1jLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpLGQuYXN5bmM9ImFzeW5jIixhLnNjcmlwdENoYXJzZXQmJihkLmNoYXJzZXQ9YS5zY3JpcHRDaGFyc2V0KSxkLnNyYz1hLnVybCxkLm9ubG9hZD1kLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbihhLGMpe2lmKGN8fCFkLnJlYWR5U3RhdGV8fC9sb2FkZWR8Y29tcGxldGUvLnRlc3QoZC5yZWFkeVN0YXRlKSlkLm9ubG9hZD1kLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLGUmJmQucGFyZW50Tm9kZSYmZS5yZW1vdmVDaGlsZChkKSxkPWIsY3x8ZygyMDAsInN1Y2Nlc3MiKX0sZS5pbnNlcnRCZWZvcmUoZCxlLmZpcnN0Q2hpbGQpfSxhYm9ydDpmdW5jdGlvbigpe2QmJmQub25sb2FkKDAsMSl9fX19KTt2YXIgY2Y9YS5BY3RpdmVYT2JqZWN0P2Z1bmN0aW9uKCl7Zm9yKHZhciBhIGluIGNoKWNoW2FdKDAsMSl9OiExLGNnPTAsY2g7Zi5hamF4U2V0dGluZ3MueGhyPWEuQWN0aXZlWE9iamVjdD9mdW5jdGlvbigpe3JldHVybiF0aGlzLmlzTG9jYWwmJmNpKCl8fGNqKCl9OmNpLGZ1bmN0aW9uKGEpe2YuZXh0ZW5kKGYuc3VwcG9ydCx7YWpheDohIWEsY29yczohIWEmJiJ3aXRoQ3JlZGVudGlhbHMiaW4gYX0pfShmLmFqYXhTZXR0aW5ncy54aHIoKSksZi5zdXBwb3J0LmFqYXgmJmYuYWpheFRyYW5zcG9ydChmdW5jdGlvbihjKQore2lmKCFjLmNyb3NzRG9tYWlufHxmLnN1cHBvcnQuY29ycyl7dmFyIGQ7cmV0dXJue3NlbmQ6ZnVuY3Rpb24oZSxnKXt2YXIgaD1jLnhocigpLGksajtjLnVzZXJuYW1lP2gub3BlbihjLnR5cGUsYy51cmwsYy5hc3luYyxjLnVzZXJuYW1lLGMucGFzc3dvcmQpOmgub3BlbihjLnR5cGUsYy51cmwsYy5hc3luYyk7aWYoYy54aHJGaWVsZHMpZm9yKGogaW4gYy54aHJGaWVsZHMpaFtqXT1jLnhockZpZWxkc1tqXTtjLm1pbWVUeXBlJiZoLm92ZXJyaWRlTWltZVR5cGUmJmgub3ZlcnJpZGVNaW1lVHlwZShjLm1pbWVUeXBlKSwhYy5jcm9zc0RvbWFpbiYmIWVbIlgtUmVxdWVzdGVkLVdpdGgiXSYmKGVbIlgtUmVxdWVzdGVkLVdpdGgiXT0iWE1MSHR0cFJlcXVlc3QiKTt0cnl7Zm9yKGogaW4gZSloLnNldFJlcXVlc3RIZWFkZXIoaixlW2pdKX1jYXRjaChrKXt9aC5zZW5kKGMuaGFzQ29udGVudCYmYy5kYXRhfHxudWxsKSxkPWZ1bmN0aW9uKGEsZSl7dmFyIGosayxsLG0sbjt0cnl7aWYoZCYmKGV8fGgucmVhZHlTdGF0ZT09PTQpKXtkPWIsaSYmKGgub25yZWFkeXN0YXRlY2hhbmdlPWYubm9vcCxjZiYmZGVsZXRlIGNoW2ldKTtpZihlKWgucmVhZHlTdGF0ZSE9PTQmJmguYWJvcnQoKTtlbHNle2o9aC5zdGF0dXMsbD1oLmdldEFsbFJlc3BvbnNlSGVhZGVycygpLG09e30sbj1oLnJlc3BvbnNlWE1MLG4mJm4uZG9jdW1lbnRFbGVtZW50JiYobS54bWw9biksbS50ZXh0PWgucmVzcG9uc2VUZXh0O3RyeXtrPWguc3RhdHVzVGV4dH1jYXRjaChvKXtrPSIifSFqJiZjLmlzTG9jYWwmJiFjLmNyb3NzRG9tYWluP2o9bS50ZXh0PzIwMDo0MDQ6aj09PTEyMjMmJihqPTIwNCl9fX1jYXRjaChwKXtlfHxnKC0xLHApfW0mJmcoaixrLG0sbCl9LCFjLmFzeW5jfHxoLnJlYWR5U3RhdGU9PT00P2QoKTooaT0rK2NnLGNmJiYoY2h8fChjaD17fSxmKGEpLnVubG9hZChjZikpLGNoW2ldPWQpLGgub25yZWFkeXN0YXRlY2hhbmdlPWQpfSxhYm9ydDpmdW5jdGlvbigpe2QmJmQoMCwxKX19fX0pO3ZhciBjaz17fSxjbCxjbSxjbj0vXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sY289L14oWytcLV09KT8oW1xkKy5cLV0rKShbYS16JV0qKSQvaSxjcCxjcT1bWyJoZWlnaHQiLCJtYXJnaW5Ub3AiLCJtYXJnaW5Cb3R0b20iLCJwYWRkaW5nVG9wIiwicGFkZGluZ0JvdHRvbSJdLFsid2lkdGgiLCJtYXJnaW5MZWZ0IiwibWFyZ2luUmlnaHQiLCJwYWRkaW5nTGVmdCIsInBhZGRpbmdSaWdodCJdLFsib3BhY2l0eSJdXSxjcjtmLmZuLmV4dGVuZCh7c2hvdzpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZTtpZihhfHxhPT09MClyZXR1cm4gdGhpcy5hbmltYXRlKGN1KCJzaG93IiwzKSxhLGIsYyk7Zm9yKHZhciBnPTAsaD10aGlzLmxlbmd0aDtnPGg7ZysrKWQ9dGhpc1tnXSxkLnN0eWxlJiYoZT1kLnN0eWxlLmRpc3BsYXksIWYuX2RhdGEoZCwib2xkZGlzcGxheSIpJiZlPT09Im5vbmUiJiYoZT1kLnN0eWxlLmRpc3BsYXk9IiIpLGU9PT0iIiYmZi5jc3MoZCwiZGlzcGxheSIpPT09Im5vbmUiJiZmLl9kYXRhKGQsIm9sZGRpc3BsYXkiLGN2KGQubm9kZU5hbWUpKSk7Zm9yKGc9MDtnPGg7ZysrKXtkPXRoaXNbZ107aWYoZC5zdHlsZSl7ZT1kLnN0eWxlLmRpc3BsYXk7aWYoZT09PSIifHxlPT09Im5vbmUiKWQuc3R5bGUuZGlzcGxheT1mLl9kYXRhKGQsIm9sZGRpc3BsYXkiKXx8IiJ9fXJldHVybiB0aGlzfSxoaWRlOmZ1bmN0aW9uKGEsYixjKXtpZihhfHxhPT09MClyZXR1cm4gdGhpcy5hbmltYXRlKGN1KCJoaWRlIiwzKSxhLGIsYyk7dmFyIGQsZSxnPTAsaD10aGlzLmxlbmd0aDtmb3IoO2c8aDtnKyspZD10aGlzW2ddLGQuc3R5bGUmJihlPWYuY3NzKGQsImRpc3BsYXkiKSxlIT09Im5vbmUiJiYhZi5fZGF0YShkLCJvbGRkaXNwbGF5IikmJmYuX2RhdGEoZCwib2xkZGlzcGxheSIsZSkpO2ZvcihnPTA7ZzxoO2crKyl0aGlzW2ddLnN0eWxlJiYodGhpc1tnXS5zdHlsZS5kaXNwbGF5PSJub25lIik7cmV0dXJuIHRoaXN9LF90b2dnbGU6Zi5mbi50b2dnbGUsdG9nZ2xlOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD10eXBlb2YgYT09ImJvb2xlYW4iO2YuaXNGdW5jdGlvbihhKSYmZi5pc0Z1bmN0aW9uKGIpP3RoaXMuX3RvZ2dsZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6YT09bnVsbHx8ZD90aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj1kP2E6Zih0aGlzKS5pcygiOmhpZGRlbiIpO2YodGhpcylbYj8ic2hvdyI6ImhpZGUiXSgpfSk6dGhpcy5hbmltYXRlKGN1KCJ0b2dnbGUiLDMpLGEsYixjKTtyZXR1cm4gdGhpc30sZmFkZVRvOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLmZpbHRlcigiOmhpZGRlbiIpLmNzcygib3BhY2l0eSIsMCkuc2hvdygpLmVuZCgpLmFuaW1hdGUoe29wYWNpdHk6Yn0sYSxjLGQpfSxhbmltYXRlOmZ1bmN0aW9uKGEsYixjLGQpe2Z1bmN0aW9uIGcoKXtlLnF1ZXVlPT09ITEmJmYuX21hcmsodGhpcyk7dmFyIGI9Zi5leHRlbmQoe30sZSksYz10aGlzLm5vZGVUeXBlPT09MSxkPWMmJmYodGhpcykuaXMoIjpoaWRkZW4iKSxnLGgsaSxqLGssbCxtLG4sbztiLmFuaW1hdGVkUHJvcGVydGllcz17fTtmb3IoaSBpbiBhKXtnPWYuY2FtZWxDYXNlKGkpLGkhPT1nJiYoYVtnXT1hW2ldLGRlbGV0ZSBhW2ldKSxoPWFbZ10sZi5pc0FycmF5KGgpPyhiLmFuaW1hdGVkUHJvcGVydGllc1tnXT1oWzFdLGg9YVtnXT1oWzBdKTpiLmFuaW1hdGVkUHJvcGVydGllc1tnXT1iLnNwZWNpYWxFYXNpbmcmJmIuc3BlY2lhbEVhc2luZ1tnXXx8Yi5lYXNpbmd8fCJzd2luZyI7aWYoaD09PSJoaWRlIiYmZHx8aD09PSJzaG93IiYmIWQpcmV0dXJuIGIuY29tcGxldGUuY2FsbCh0aGlzKTtjJiYoZz09PSJoZWlnaHQifHxnPT09IndpZHRoIikmJihiLm92ZXJmbG93PVt0aGlzLnN0eWxlLm92ZXJmbG93LHRoaXMuc3R5bGUub3ZlcmZsb3dYLHRoaXMuc3R5bGUub3ZlcmZsb3dZXSxmLmNzcyh0aGlzLCJkaXNwbGF5Iik9PT0iaW5saW5lIiYmZi5jc3ModGhpcywiZmxvYXQiKT09PSJub25lIiYmKCFmLnN1cHBvcnQuaW5saW5lQmxvY2tOZWVkc0xheW91dHx8Y3YodGhpcy5ub2RlTmFtZSk9PT0iaW5saW5lIj90aGlzLnN0eWxlLmRpc3BsYXk9ImlubGluZS1ibG9jayI6dGhpcy5zdHlsZS56b29tPTEpKX1iLm92ZXJmbG93IT1udWxsJiYodGhpcy5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIik7Zm9yKGkgaW4gYSlqPW5ldyBmLmZ4KHRoaXMsYixpKSxoPWFbaV0sY24udGVzdChoKT8obz1mLl9kYXRhKHRoaXMsInRvZ2dsZSIraSl8fChoPT09InRvZ2dsZSI/ZD8ic2hvdyI6ImhpZGUiOjApLG8/KGYuX2RhdGEodGhpcywidG9nZ2xlIitpLG89PT0ic2hvdyI/ImhpZGUiOiJzaG93IiksaltvXSgpKTpqW2hdKCkpOihrPWNvLmV4ZWMoaCksbD1qLmN1cigpLGs/KG09cGFyc2VGbG9hdChrWzJdKSxuPWtbM118fChmLmNzc051bWJlcltpXT8iIjoicHgiKSxuIT09InB4IiYmKGYuc3R5bGUodGhpcyxpLChtfHwxKStuKSxsPShtfHwxKS9qLmN1cigpKmwsZi5zdHlsZSh0aGlzLGksbCtuKSksa1sxXSYmKG09KGtbMV09PT0iLT0iPy0xOjEpKm0rbCksai5jdXN0b20obCxtLG4pKTpqLmN1c3RvbShsLGgsIiIpKTtyZXR1cm4hMH12YXIgZT1mLnNwZWVkKGIsYyxkKTtpZihmLmlzRW1wdHlPYmplY3QoYSkpcmV0dXJuIHRoaXMuZWFjaChlLmNvbXBsZXRlLFshMV0pO2E9Zi5leHRlbmQoe30sYSk7cmV0dXJuIGUucXVldWU9PT0hMT90aGlzLmVhY2goZyk6dGhpcy5xdWV1ZShlLnF1ZXVlLGcpfSxzdG9wOmZ1bmN0aW9uKGEsYyxkKXt0eXBlb2YgYSE9InN0cmluZyImJihkPWMsYz1hLGE9YiksYyYmYSE9PSExJiZ0aGlzLnF1ZXVlKGF8fCJmeCIsW10pO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmdW5jdGlvbiBoKGEsYixjKXt2YXIgZT1iW2NdO2YucmVtb3ZlRGF0YShhLGMsITApLGUuc3RvcChkKX12YXIgYixjPSExLGU9Zi50aW1lcnMsZz1mLl9kYXRhKHRoaXMpO2R8fGYuX3VubWFyayghMCx0aGlzKTtpZihhPT1udWxsKWZvcihiIGluIGcpZ1tiXSYmZ1tiXS5zdG9wJiZiLmluZGV4T2YoIi5ydW4iKT09PWIubGVuZ3RoLTQmJmgodGhpcyxnLGIpO2Vsc2UgZ1tiPWErIi5ydW4iXSYmZ1tiXS5zdG9wJiZoKHRoaXMsZyxiKTtmb3IoYj1lLmxlbmd0aDtiLS07KWVbYl0uZWxlbT09PXRoaXMmJihhPT1udWxsfHxlW2JdLnF1ZXVlPT09YSkmJihkP2VbYl0oITApOmVbYl0uc2F2ZVN0YXRlKCksYz0hMCxlLnNwbGljZShiLDEpKTsoIWR8fCFjKSYmZi5kZXF1ZXVlKHRoaXMsYSl9KX19KSxmLmVhY2goe3NsaWRlRG93bjpjdSgic2hvdyIsMSksc2xpZGVVcDpjdSgiaGlkZSIsMSksc2xpZGVUb2dnbGU6Y3UoInRvZ2dsZSIsMSksZmFkZUluOntvcGFjaXR5OiJzaG93In0sZmFkZU91dDp7b3BhY2l0eToiaGlkZSJ9LGZhZGVUb2dnbGU6e29wYWNpdHk6InRvZ2dsZSJ9fSxmdW5jdGlvbihhLGIpe2YuZm5bYV09ZnVuY3Rpb24oYSxjLGQpe3JldHVybiB0aGlzLmFuaW1hdGUoYixhLGMsZCl9fSksZi5leHRlbmQoe3NwZWVkOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hJiZ0eXBlb2YgYT09Im9iamVjdCI/Zi5leHRlbmQoe30sYSk6e2NvbXBsZXRlOmN8fCFjJiZifHxmLmlzRnVuY3Rpb24oYSkmJmEsZHVyYXRpb246YSxlYXNpbmc6YyYmYnx8YiYmIWYuaXNGdW5jdGlvbihiKSYmYn07ZC5kdXJhdGlvbj1mLmZ4Lm9mZj8wOnR5cGVvZiBkLmR1cmF0aW9uPT0ibnVtYmVyIj9kLmR1cmF0aW9uOmQuZHVyYXRpb24gaW4gZi5meC5zcGVlZHM/Zi5meC5zcGVlZHNbZC5kdXJhdGlvbl06Zi5meC5zcGVlZHMuX2RlZmF1bHQ7aWYoZC5xdWV1ZT09bnVsbHx8ZC5xdWV1ZT09PSEwKWQucXVldWU9ImZ4IjtkLm9sZD1kLmNvbXBsZXRlLGQuY29tcGxldGU9ZnVuY3Rpb24oYSl7Zi5pc0Z1bmN0aW9uKGQub2xkKSYmZC5vbGQuY2FsbCh0aGlzKSxkLnF1ZXVlP2YuZGVxdWV1ZSh0aGlzLGQucXVldWUpOmEhPT0hMSYmZi5fdW5tYXJrKHRoaXMpfTtyZXR1cm4gZH0sZWFzaW5nOntsaW5lYXI6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIGMrZCphfSxzd2luZzpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4oLU1hdGguY29zKGEqTWF0aC5QSSkvMisuNSkqZCtjfX0sdGltZXJzOltdLGZ4OmZ1bmN0aW9uKGEsYixjKXt0aGlzLm9wdGlvbnM9Yix0aGlzLmVsZW09YSx0aGlzLnByb3A9YyxiLm9yaWc9Yi5vcmlnfHx7fX19KSxmLmZ4LnByb3RvdHlwZT17dXBkYXRlOmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLnN0ZXAmJnRoaXMub3B0aW9ucy5zdGVwLmNhbGwodGhpcy5lbGVtLHRoaXMubm93LHRoaXMpLChmLmZ4LnN0ZXBbdGhpcy5wcm9wXXx8Zi5meC5zdGVwLl9kZWZhdWx0KSh0aGlzKX0sY3VyOmZ1bmN0aW9uKCl7aWYodGhpcy5lbGVtW3RoaXMucHJvcF0hPW51bGwmJighdGhpcy5lbGVtLnN0eWxlfHx0aGlzLmVsZW0uc3R5bGVbdGhpcy5wcm9wXT09bnVsbCkpcmV0dXJuIHRoaXMuZWxlbVt0aGlzLnByb3BdO3ZhciBhLGI9Zi5jc3ModGhpcy5lbGVtLHRoaXMucHJvcCk7cmV0dXJuIGlzTmFOKGE9cGFyc2VGbG9hdChiKSk/IWJ8fGI9PT0iYXV0byI/MDpiOmF9LGN1c3RvbTpmdW5jdGlvbihhLGMsZCl7ZnVuY3Rpb24gaChhKXtyZXR1cm4gZS5zdGVwKGEpfXZhciBlPXRoaXMsZz1mLmZ4O3RoaXMuc3RhcnRUaW1lPWNyfHxjcygpLHRoaXMuZW5kPWMsdGhpcy5ub3c9dGhpcy5zdGFydD1hLHRoaXMucG9zPXRoaXMuc3RhdGU9MCx0aGlzLnVuaXQ9ZHx8dGhpcy51bml0fHwoZi5jc3NOdW1iZXJbdGhpcy5wcm9wXT8iIjoicHgiKSxoLnF1ZXVlPXRoaXMub3B0aW9ucy5xdWV1ZSxoLmVsZW09dGhpcy5lbGVtLGguc2F2ZVN0YXRlPWZ1bmN0aW9uKCl7ZS5vcHRpb25zLmhpZGUmJmYuX2RhdGEoZS5lbGVtLCJmeHNob3ciK2UucHJvcCk9PT1iJiZmLl9kYXRhKGUuZWxlbSwiZnhzaG93IitlLnByb3AsZS5zdGFydCl9LGgoKSYmZi50aW1lcnMucHVzaChoKSYmIWNwJiYoY3A9c2V0SW50ZXJ2YWwoZy50aWNrLGcuaW50ZXJ2YWwpKX0sc2hvdzpmdW5jdGlvbigpe3ZhciBhPWYuX2RhdGEodGhpcy5lbGVtLCJmeHNob3ciK3RoaXMucHJvcCk7dGhpcy5vcHRpb25zLm9yaWdbdGhpcy5wcm9wXT1hfHxmLnN0eWxlKHRoaXMuZWxlbSx0aGlzLnByb3ApLHRoaXMub3B0aW9ucy5zaG93PSEwLGEhPT1iP3RoaXMuY3VzdG9tKHRoaXMuY3VyKCksYSk6dGhpcy5jdXN0b20odGhpcy5wcm9wPT09IndpZHRoInx8dGhpcy5wcm9wPT09ImhlaWdodCI/MTowLHRoaXMuY3VyKCkpLGYodGhpcy5lbGVtKS5zaG93KCl9LGhpZGU6ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMub3JpZ1t0aGlzLnByb3BdPWYuX2RhdGEodGhpcy5lbGVtLCJmeHNob3ciK3RoaXMucHJvcCl8fGYuc3R5bGUodGhpcy5lbGVtLHRoaXMucHJvcCksdGhpcy5vcHRpb25zLmhpZGU9ITAsdGhpcy5jdXN0b20odGhpcy5jdXIoKSwwKX0sc3RlcDpmdW5jdGlvbihhKXt2YXIgYixjLGQsZT1jcnx8Y3MoKSxnPSEwLGg9dGhpcy5lbGVtLGk9dGhpcy5vcHRpb25zO2lmKGF8fGU+PWkuZHVyYXRpb24rdGhpcy5zdGFydFRpbWUpe3RoaXMubm93PXRoaXMuZW5kLHRoaXMucG9zPXRoaXMuc3RhdGU9MSx0aGlzLnVwZGF0ZSgpLGkuYW5pbWF0ZWRQcm9wZXJ0aWVzW3RoaXMucHJvcF09ITA7Zm9yKGIgaW4gaS5hbmltYXRlZFByb3BlcnRpZXMpaS5hbmltYXRlZFByb3BlcnRpZXNbYl0hPT0hMCYmKGc9ITEpO2lmKGcpe2kub3ZlcmZsb3chPW51bGwmJiFmLnN1cHBvcnQuc2hyaW5rV3JhcEJsb2NrcyYmZi5lYWNoKFsiIiwiWCIsIlkiXSxmdW5jdGlvbihhLGIpe2guc3R5bGVbIm92ZXJmbG93IitiXT1pLm92ZXJmbG93W2FdfSksaS5oaWRlJiZmKGgpLmhpZGUoKTtpZihpLmhpZGV8fGkuc2hvdylmb3IoYiBpbiBpLmFuaW1hdGVkUHJvcGVydGllcylmLnN0eWxlKGgsYixpLm9yaWdbYl0pLGYucmVtb3ZlRGF0YShoLCJmeHNob3ciK2IsITApLGYucmVtb3ZlRGF0YShoLCJ0b2dnbGUiK2IsITApO2Q9aS5jb21wbGV0ZSxkJiYoaS5jb21wbGV0ZT0hMSxkLmNhbGwoaCkpfXJldHVybiExfWkuZHVyYXRpb249PUluZmluaXR5P3RoaXMubm93PWU6KGM9ZS10aGlzLnN0YXJ0VGltZSx0aGlzLnN0YXRlPWMvaS5kdXJhdGlvbix0aGlzLnBvcz1mLmVhc2luZ1tpLmFuaW1hdGVkUHJvcGVydGllc1t0aGlzLnByb3BdXSh0aGlzLnN0YXRlLGMsMCwxLGkuZHVyYXRpb24pLHRoaXMubm93PXRoaXMuc3RhcnQrKHRoaXMuZW5kLXRoaXMuc3RhcnQpKnRoaXMucG9zKSx0aGlzLnVwZGF0ZSgpO3JldHVybiEwfX0sZi5leHRlbmQoZi5meCx7dGljazpmdW5jdGlvbigpe3ZhciBhLGI9Zi50aW1lcnMsYz0wO2Zvcig7YzxiLmxlbmd0aDtjKyspYT1iW2NdLCFhKCkmJmJbY109PT1hJiZiLnNwbGljZShjLS0sMSk7Yi5sZW5ndGh8fGYuZnguc3RvcCgpfSxpbnRlcnZhbDoxMyxzdG9wOmZ1bmN0aW9uKCl7Y2xlYXJJbnRlcnZhbChjcCksY3A9bnVsbH0sc3BlZWRzOntzbG93OjYwMCxmYXN0OjIwMCxfZGVmYXVsdDo0MDB9LHN0ZXA6e29wYWNpdHk6ZnVuY3Rpb24oYSl7Zi5zdHlsZShhLmVsZW0sIm9wYWNpdHkiLGEubm93KX0sX2RlZmF1bHQ6ZnVuY3Rpb24oYSl7YS5lbGVtLnN0eWxlJiZhLmVsZW0uc3R5bGVbYS5wcm9wXSE9bnVsbD9hLmVsZW0uc3R5bGVbYS5wcm9wXT1hLm5vdythLnVuaXQ6YS5lbGVtW2EucHJvcF09YS5ub3d9fX0pLGYuZWFjaChbIndpZHRoIiwiaGVpZ2h0Il0sZnVuY3Rpb24oYSxiKXtmLmZ4LnN0ZXBbYl09ZnVuY3Rpb24oYSl7Zi5zdHlsZShhLmVsZW0sYixNYXRoLm1heCgwLGEubm93KSthLnVuaXQpfX0pLGYuZXhwciYmZi5leHByLmZpbHRlcnMmJihmLmV4cHIuZmlsdGVycy5hbmltYXRlZD1mdW5jdGlvbihhKXtyZXR1cm4gZi5ncmVwKGYudGltZXJzLGZ1bmN0aW9uKGIpe3JldHVybiBhPT09Yi5lbGVtfSkubGVuZ3RofSk7dmFyIGN3PS9edCg/OmFibGV8ZHxoKSQvaSxjeD0vXig/OmJvZHl8aHRtbCkkL2k7ImdldEJvdW5kaW5nQ2xpZW50UmVjdCJpbiBjLmRvY3VtZW50RWxlbWVudD9mLmZuLm9mZnNldD1mdW5jdGlvbihhKXt2YXIgYj10aGlzWzBdLGM7aWYoYSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe2Yub2Zmc2V0LnNldE9mZnNldCh0aGlzLGEsYil9KTtpZighYnx8IWIub3duZXJEb2N1bWVudClyZXR1cm4gbnVsbDtpZihiPT09Yi5vd25lckRvY3VtZW50LmJvZHkpcmV0dXJuIGYub2Zmc2V0LmJvZHlPZmZzZXQoYik7dHJ5e2M9Yi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX1jYXRjaChkKXt9dmFyIGU9Yi5vd25lckRvY3VtZW50LGc9ZS5kb2N1bWVudEVsZW1lbnQ7aWYoIWN8fCFmLmNvbnRhaW5zKGcsYikpcmV0dXJuIGM/e3RvcDpjLnRvcCxsZWZ0OmMubGVmdH06e3RvcDowLGxlZnQ6MH07dmFyIGg9ZS5ib2R5LGk9Y3koZSksaj1nLmNsaWVudFRvcHx8aC5jbGllbnRUb3B8fDAsaz1nLmNsaWVudExlZnR8fGguY2xpZW50TGVmdHx8MCxsPWkucGFnZVlPZmZzZXR8fGYuc3VwcG9ydC5ib3hNb2RlbCYmZy5zY3JvbGxUb3B8fGguc2Nyb2xsVG9wLG09aS5wYWdlWE9mZnNldHx8Zi5zdXBwb3J0LmJveE1vZGVsJiZnLnNjcm9sbExlZnR8fGguc2Nyb2xsTGVmdCxuPWMudG9wK2wtaixvPWMubGVmdCttLWs7cmV0dXJue3RvcDpuLGxlZnQ6b319OmYuZm4ub2Zmc2V0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXNbMF07aWYoYSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe2Yub2Zmc2V0LnNldE9mZnNldCh0aGlzLGEsYil9KTtpZighYnx8IWIub3duZXJEb2N1bWVudClyZXR1cm4gbnVsbDtpZihiPT09Yi5vd25lckRvY3VtZW50LmJvZHkpcmV0dXJuIGYub2Zmc2V0LmJvZHlPZmZzZXQoYik7dmFyIGMsZD1iLm9mZnNldFBhcmVudCxlPWIsZz1iLm93bmVyRG9jdW1lbnQsaD1nLmRvY3VtZW50RWxlbWVudCxpPWcuYm9keSxqPWcuZGVmYXVsdFZpZXcsaz1qP2ouZ2V0Q29tcHV0ZWRTdHlsZShiLG51bGwpOmIuY3VycmVudFN0eWxlLGw9Yi5vZmZzZXRUb3AsbT1iLm9mZnNldExlZnQ7d2hpbGUoKGI9Yi5wYXJlbnROb2RlKSYmYiE9PWkmJmIhPT1oKXtpZihmLnN1cHBvcnQuZml4ZWRQb3NpdGlvbiYmay5wb3NpdGlvbj09PSJmaXhlZCIpYnJlYWs7Yz1qP2ouZ2V0Q29tcHV0ZWRTdHlsZShiLG51bGwpOmIuY3VycmVudFN0eWxlLGwtPWIuc2Nyb2xsVG9wLG0tPWIuc2Nyb2xsTGVmdCxiPT09ZCYmKGwrPWIub2Zmc2V0VG9wLG0rPWIub2Zmc2V0TGVmdCxmLnN1cHBvcnQuZG9lc05vdEFkZEJvcmRlciYmKCFmLnN1cHBvcnQuZG9lc0FkZEJvcmRlckZvclRhYmxlQW5kQ2VsbHN8fCFjdy50ZXN0KGIubm9kZU5hbWUpKSYmKGwrPXBhcnNlRmxvYXQoYy5ib3JkZXJUb3BXaWR0aCl8fDAsbSs9cGFyc2VGbG9hdChjLmJvcmRlckxlZnRXaWR0aCl8fDApLGU9ZCxkPWIub2Zmc2V0UGFyZW50KSxmLnN1cHBvcnQuc3VidHJhY3RzQm9yZGVyRm9yT3ZlcmZsb3dOb3RWaXNpYmxlJiZjLm92ZXJmbG93IT09InZpc2libGUiJiYobCs9cGFyc2VGbG9hdChjLmJvcmRlclRvcFdpZHRoKXx8MCxtKz1wYXJzZUZsb2F0KGMuYm9yZGVyTGVmdFdpZHRoKXx8MCksaz1jfWlmKGsucG9zaXRpb249PT0icmVsYXRpdmUifHxrLnBvc2l0aW9uPT09InN0YXRpYyIpbCs9aS5vZmZzZXRUb3AsbSs9aS5vZmZzZXRMZWZ0O2Yuc3VwcG9ydC5maXhlZFBvc2l0aW9uJiZrLnBvc2l0aW9uPT09ImZpeGVkIiYmKGwrPU1hdGgubWF4KGguc2Nyb2xsVG9wLGkuc2Nyb2xsVG9wKSxtKz1NYXRoLm1heChoLnNjcm9sbExlZnQsaS5zY3JvbGxMZWZ0KSk7cmV0dXJue3RvcDpsLGxlZnQ6bX19LGYub2Zmc2V0PXtib2R5T2Zmc2V0OmZ1bmN0aW9uKGEpe3ZhciBiPWEub2Zmc2V0VG9wLGM9YS5vZmZzZXRMZWZ0O2Yuc3VwcG9ydC5kb2VzTm90SW5jbHVkZU1hcmdpbkluQm9keU9mZnNldCYmKGIrPXBhcnNlRmxvYXQoZi5jc3MoYSwibWFyZ2luVG9wIikpfHwwLGMrPXBhcnNlRmxvYXQoZi5jc3MoYSwibWFyZ2luTGVmdCIpKXx8MCk7cmV0dXJue3RvcDpiLGxlZnQ6Y319LHNldE9mZnNldDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9Zi5jc3MoYSwicG9zaXRpb24iKTtkPT09InN0YXRpYyImJihhLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIpO3ZhciBlPWYoYSksZz1lLm9mZnNldCgpLGg9Zi5jc3MoYSwidG9wIiksaT1mLmNzcyhhLCJsZWZ0Iiksaj0oZD09PSJhYnNvbHV0ZSJ8fGQ9PT0iZml4ZWQiKSYmZi5pbkFycmF5KCJhdXRvIixbaCxpXSk+LTEsaz17fSxsPXt9LG0sbjtqPyhsPWUucG9zaXRpb24oKSxtPWwudG9wLG49bC5sZWZ0KToobT1wYXJzZUZsb2F0KGgpfHwwLG49cGFyc2VGbG9hdChpKXx8MCksZi5pc0Z1bmN0aW9uKGIpJiYoYj1iLmNhbGwoYSxjLGcpKSxiLnRvcCE9bnVsbCYmKGsudG9wPWIudG9wLWcudG9wK20pLGIubGVmdCE9bnVsbCYmKGsubGVmdD1iLmxlZnQtZy5sZWZ0K24pLCJ1c2luZyJpbiBiP2IudXNpbmcuY2FsbChhLGspOmUuY3NzKGspfX0sZi5mbi5leHRlbmQoe3Bvc2l0aW9uOmZ1bmN0aW9uKCl7aWYoIXRoaXNbMF0pcmV0dXJuIG51bGw7dmFyIGE9dGhpc1swXSxiPXRoaXMub2Zmc2V0UGFyZW50KCksYz10aGlzLm9mZnNldCgpLGQ9Y3gudGVzdChiWzBdLm5vZGVOYW1lKT97dG9wOjAsbGVmdDowfTpiLm9mZnNldCgpO2MudG9wLT1wYXJzZUZsb2F0KGYuY3NzKGEsIm1hcmdpblRvcCIpKXx8MCxjLmxlZnQtPXBhcnNlRmxvYXQoZi5jc3MoYSwibWFyZ2luTGVmdCIpKXx8MCxkLnRvcCs9cGFyc2VGbG9hdChmLmNzcyhiWzBdLCJib3JkZXJUb3BXaWR0aCIpKXx8MCxkLmxlZnQrPXBhcnNlRmxvYXQoZi5jc3MoYlswXSwiYm9yZGVyTGVmdFdpZHRoIikpfHwwO3JldHVybnt0b3A6Yy50b3AtZC50b3AsbGVmdDpjLmxlZnQtZC5sZWZ0fX0sb2Zmc2V0UGFyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vZmZzZXRQYXJlbnR8fGMuYm9keTt3aGlsZShhJiYhY3gudGVzdChhLm5vZGVOYW1lKSYmZi5jc3MoYSwicG9zaXRpb24iKT09PSJzdGF0aWMiKWE9YS5vZmZzZXRQYXJlbnQ7cmV0dXJuIGF9KX19KSxmLmVhY2goWyJMZWZ0IiwiVG9wIl0sZnVuY3Rpb24oYSxjKXt2YXIgZD0ic2Nyb2xsIitjO2YuZm5bZF09ZnVuY3Rpb24oYyl7dmFyIGUsZztpZihjPT09Yil7ZT10aGlzWzBdO2lmKCFlKXJldHVybiBudWxsO2c9Y3koZSk7cmV0dXJuIGc/InBhZ2VYT2Zmc2V0ImluIGc/Z1thPyJwYWdlWU9mZnNldCI6InBhZ2VYT2Zmc2V0Il06Zi5zdXBwb3J0LmJveE1vZGVsJiZnLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFtkXXx8Zy5kb2N1bWVudC5ib2R5W2RdOmVbZF19cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2c9Y3kodGhpcyksZz9nLnNjcm9sbFRvKGE/ZihnKS5zY3JvbGxMZWZ0KCk6YyxhP2M6ZihnKS5zY3JvbGxUb3AoKSk6dGhpc1tkXT1jfSl9fSksZi5lYWNoKFsiSGVpZ2h0IiwiV2lkdGgiXSxmdW5jdGlvbihhLGMpe3ZhciBkPWMudG9Mb3dlckNhc2UoKTtmLmZuWyJpbm5lciIrY109ZnVuY3Rpb24oKXt2YXIgYT10aGlzWzBdO3JldHVybiBhP2Euc3R5bGU/cGFyc2VGbG9hdChmLmNzcyhhLGQsInBhZGRpbmciKSk6dGhpc1tkXSgpOm51bGx9LGYuZm5bIm91dGVyIitjXT1mdW5jdGlvbihhKXt2YXIgYj10aGlzWzBdO3JldHVybiBiP2Iuc3R5bGU/cGFyc2VGbG9hdChmLmNzcyhiLGQsYT8ibWFyZ2luIjoiYm9yZGVyIikpOnRoaXNbZF0oKTpudWxsfSxmLmZuW2RdPWZ1bmN0aW9uKGEpe3ZhciBlPXRoaXNbMF07aWYoIWUpcmV0dXJuIGE9PW51bGw/bnVsbDp0aGlzO2lmKGYuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe3ZhciBjPWYodGhpcyk7Y1tkXShhLmNhbGwodGhpcyxiLGNbZF0oKSkpfSk7aWYoZi5pc1dpbmRvdyhlKSl7dmFyIGc9ZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIrY10saD1lLmRvY3VtZW50LmJvZHk7cmV0dXJuIGUuZG9jdW1lbnQuY29tcGF0TW9kZT09PSJDU1MxQ29tcGF0IiYmZ3x8aCYmaFsiY2xpZW50IitjXXx8Z31pZihlLm5vZGVUeXBlPT09OSlyZXR1cm4gTWF0aC5tYXgoZS5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIrY10sZS5ib2R5WyJzY3JvbGwiK2NdLGUuZG9jdW1lbnRFbGVtZW50WyJzY3JvbGwiK2NdLGUuYm9keVsib2Zmc2V0IitjXSxlLmRvY3VtZW50RWxlbWVudFsib2Zmc2V0IitjXSk7aWYoYT09PWIpe3ZhciBpPWYuY3NzKGUsZCksaj1wYXJzZUZsb2F0KGkpO3JldHVybiBmLmlzTnVtZXJpYyhqKT9qOml9cmV0dXJuIHRoaXMuY3NzKGQsdHlwZW9mIGE9PSJzdHJpbmciP2E6YSsicHgiKX19KSxhLmpRdWVyeT1hLiQ9Zix0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kJiZkZWZpbmUuYW1kLmpRdWVyeSYmZGVmaW5lKCJqcXVlcnkiLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIGZ9KX0pKHdpbmRvdyk7CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9tb2R1bGVzLmh0bWwgYi9kb2MvaHRtbC9tb2R1bGVzLmh0bWwKaW5kZXggZTk1ZjkyMC4uMjY5MTQyMiAxMDA2NDQKLS0tIGEvZG9jL2h0bWwvbW9kdWxlcy5odG1sCisrKyBiL2RvYy9odG1sL21vZHVsZXMuaHRtbApAQCAtMiwzNSArMiw0NiBAQAogPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgogPGhlYWQ+CiA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQveGh0bWw7Y2hhcnNldD1VVEYtOCIvPgorPG1ldGEgaHR0cC1lcXVpdj0iWC1VQS1Db21wYXRpYmxlIiBjb250ZW50PSJJRT05Ii8+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRveHlnZW4gMS44LjMuMSIvPgogPHRpdGxlPlR1cmJvSlBFRzogTW9kdWxlczwvdGl0bGU+CiA8bGluayBocmVmPSJ0YWJzLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIvPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ianF1ZXJ5LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImR5bnNlY3Rpb25zLmpzIj48L3NjcmlwdD4KIDxsaW5rIGhyZWY9InNlYXJjaC9zZWFyY2guY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIi8+CiA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJzZWFyY2gvc2VhcmNoLmpzIj48L3NjcmlwdD4KLTxsaW5rIGhyZWY9ImRveHlnZW4uY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIi8+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgeyBzZWFyY2hCb3guT25TZWxlY3RJdGVtKDApOyB9KTsKKzwvc2NyaXB0PgorPGxpbmsgaHJlZj0iZG94eWdlbi5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIC8+Cis8bGluayBocmVmPSJkb3h5Z2VuLWV4dHJhLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIvPgogPC9oZWFkPgotPGJvZHkgb25sb2FkPSdzZWFyY2hCb3guT25TZWxlY3RJdGVtKDApOyc+Ci08IS0tIEdlbmVyYXRlZCBieSBEb3h5Z2VuIDEuNy40IC0tPgotPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KLXZhciBzZWFyY2hCb3ggPSBuZXcgU2VhcmNoQm94KCJzZWFyY2hCb3giLCAic2VhcmNoIixmYWxzZSwnU2VhcmNoJyk7Ci0tLT48L3NjcmlwdD4KLTxkaXYgaWQ9InRvcCI+Cis8Ym9keT4KKzxkaXYgaWQ9InRvcCI+PCEtLSBkbyBub3QgcmVtb3ZlIHRoaXMgZGl2LCBpdCBpcyBjbG9zZWQgYnkgZG94eWdlbiEgLS0+CiA8ZGl2IGlkPSJ0aXRsZWFyZWEiPgogPHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCI+CiAgPHRib2R5PgogIDx0ciBzdHlsZT0iaGVpZ2h0OiA1NnB4OyI+CiAgIDx0ZCBzdHlsZT0icGFkZGluZy1sZWZ0OiAwLjVlbTsiPgotICAgPGRpdiBpZD0icHJvamVjdG5hbWUiPlR1cmJvSlBFRyYjMTYwOzxzcGFuIGlkPSJwcm9qZWN0bnVtYmVyIj4xLjIuMTwvc3Bhbj48L2Rpdj4KKyAgIDxkaXYgaWQ9InByb2plY3RuYW1lIj5UdXJib0pQRUcKKyAgICYjMTYwOzxzcGFuIGlkPSJwcm9qZWN0bnVtYmVyIj4xLjIuMTwvc3Bhbj4KKyAgIDwvZGl2PgogICA8L3RkPgogIDwvdHI+CiAgPC90Ym9keT4KIDwvdGFibGU+CiA8L2Rpdj4KKzwhLS0gZW5kIGhlYWRlciBwYXJ0IC0tPgorPCEtLSBHZW5lcmF0ZWQgYnkgRG94eWdlbiAxLjguMy4xIC0tPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgordmFyIHNlYXJjaEJveCA9IG5ldyBTZWFyY2hCb3goInNlYXJjaEJveCIsICJzZWFyY2giLGZhbHNlLCdTZWFyY2gnKTsKKzwvc2NyaXB0PgogICA8ZGl2IGlkPSJuYXZyb3cxIiBjbGFzcz0idGFicyI+CiAgICAgPHVsIGNsYXNzPSJ0YWJsaXN0Ij4KICAgICAgIDxsaT48YSBocmVmPSJpbmRleC5odG1sIj48c3Bhbj5NYWluJiMxNjA7UGFnZTwvc3Bhbj48L2E+PC9saT4KICAgICAgIDxsaSBjbGFzcz0iY3VycmVudCI+PGEgaHJlZj0ibW9kdWxlcy5odG1sIj48c3Bhbj5Nb2R1bGVzPC9zcGFuPjwvYT48L2xpPgogICAgICAgPGxpPjxhIGhyZWY9ImFubm90YXRlZC5odG1sIj48c3Bhbj5EYXRhJiMxNjA7U3RydWN0dXJlczwvc3Bhbj48L2E+PC9saT4KLSAgICAgIDxsaSBpZD0ic2VhcmNobGkiPgorICAgICAgPGxpPgogICAgICAgICA8ZGl2IGlkPSJNU2VhcmNoQm94IiBjbGFzcz0iTVNlYXJjaEJveEluYWN0aXZlIj4KICAgICAgICAgPHNwYW4gY2xhc3M9ImxlZnQiPgogICAgICAgICAgIDxpbWcgaWQ9Ik1TZWFyY2hTZWxlY3QiIHNyYz0ic2VhcmNoL21hZ19zZWwucG5nIgpAQCAtNDgsMjIgKzU5LDEzIEBACiAgICAgICA8L2xpPgogICAgIDwvdWw+CiAgIDwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJoZWFkZXIiPgotICA8ZGl2IGNsYXNzPSJoZWFkZXJ0aXRsZSI+Ci08ZGl2IGNsYXNzPSJ0aXRsZSI+TW9kdWxlczwvZGl2PiAgPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImNvbnRlbnRzIj4KLTxkaXYgY2xhc3M9InRleHRibG9jayI+SGVyZSBpcyBhIGxpc3Qgb2YgYWxsIG1vZHVsZXM6PC9kaXY+PHVsPgotPGxpPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwiPlR1cmJvSlBFRzwvYT48L2xpPgotPC91bD4KLTwvZGl2PgorPC9kaXY+PCEtLSB0b3AgLS0+CiA8IS0tIHdpbmRvdyBzaG93aW5nIHRoZSBmaWx0ZXIgb3B0aW9ucyAtLT4KIDxkaXYgaWQ9Ik1TZWFyY2hTZWxlY3RXaW5kb3ciCiAgICAgIG9ubW91c2VvdmVyPSJyZXR1cm4gc2VhcmNoQm94Lk9uU2VhcmNoU2VsZWN0U2hvdygpIgogICAgICBvbm1vdXNlb3V0PSJyZXR1cm4gc2VhcmNoQm94Lk9uU2VhcmNoU2VsZWN0SGlkZSgpIgogICAgICBvbmtleWRvd249InJldHVybiBzZWFyY2hCb3guT25TZWFyY2hTZWxlY3RLZXkoZXZlbnQpIj4KLTxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oMCkiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+QWxsPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oMSkiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+RGF0YSBTdHJ1Y3R1cmVzPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oMikiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+VmFyaWFibGVzPC9hPjwvZGl2PgorPGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSgwKSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5BbGw8L2E+PGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSgxKSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5EYXRhIFN0cnVjdHVyZXM8L2E+PGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSgyKSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5GdW5jdGlvbnM8L2E+PGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSgzKSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5WYXJpYWJsZXM8L2E+PGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSg0KSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5UeXBlZGVmczwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDUpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkVudW1lcmF0aW9uczwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDYpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkVudW1lcmF0b3I8L2E+PGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSg3KSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5Hcm91cHM8L2E+PC9kaXY+CiAKIDwhLS0gaWZyYW1lIHNob3dpbmcgdGhlIHNlYXJjaCByZXN1bHRzIChjbG9zZWQgYnkgZGVmYXVsdCkgLS0+CiA8ZGl2IGlkPSJNU2VhcmNoUmVzdWx0c1dpbmRvdyI+CkBAIC03Miw4ICs3NCwyMiBAQAogPC9pZnJhbWU+CiA8L2Rpdj4KIAotPGhyIGNsYXNzPSJmb290ZXIiLz48YWRkcmVzcyBjbGFzcz0iZm9vdGVyIj48c21hbGw+R2VuZXJhdGVkIG9uIEZyaSBKdW4gMjkgMjAxMiAxODoxNDo1NSBmb3IgVHVyYm9KUEVHIGJ5JiMxNjA7Ci08YSBocmVmPSJodHRwOi8vd3d3LmRveHlnZW4ub3JnL2luZGV4Lmh0bWwiPgotPGltZyBjbGFzcz0iZm9vdGVyIiBzcmM9ImRveHlnZW4ucG5nIiBhbHQ9ImRveHlnZW4iLz48L2E+IDEuNy40IDwvc21hbGw+PC9hZGRyZXNzPgorPGRpdiBjbGFzcz0iaGVhZGVyIj4KKyAgPGRpdiBjbGFzcz0iaGVhZGVydGl0bGUiPgorPGRpdiBjbGFzcz0idGl0bGUiPk1vZHVsZXM8L2Rpdj4gIDwvZGl2PgorPC9kaXY+PCEtLWhlYWRlci0tPgorPGRpdiBjbGFzcz0iY29udGVudHMiPgorPGRpdiBjbGFzcz0idGV4dGJsb2NrIj5IZXJlIGlzIGEgbGlzdCBvZiBhbGwgbW9kdWxlczo8L2Rpdj48ZGl2IGNsYXNzPSJkaXJlY3RvcnkiPgorPHRhYmxlIGNsYXNzPSJkaXJlY3RvcnkiPgorPHRyIGlkPSJyb3dfMF8iIGNsYXNzPSJldmVuIj48dGQgY2xhc3M9ImVudHJ5Ij48aW1nIHNyYz0iZnR2Mmxhc3Rub2RlLnBuZyIgYWx0PSJcIiB3aWR0aD0iMTYiIGhlaWdodD0iMjIiIC8+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCIgdGFyZ2V0PSJfc2VsZiI+VHVyYm9KUEVHPC9hPjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj5UdXJib0pQRUcgQVBJPC90ZD48L3RyPgorPC90YWJsZT4KKzwvZGl2PjwhLS0gZGlyZWN0b3J5IC0tPgorPC9kaXY+PCEtLSBjb250ZW50cyAtLT4KKzwhLS0gc3RhcnQgZm9vdGVyIHBhcnQgLS0+Cis8aHIgY2xhc3M9ImZvb3RlciIvPjxhZGRyZXNzIGNsYXNzPSJmb290ZXIiPjxzbWFsbD4KK0dlbmVyYXRlZCBieSAmIzE2MDs8YSBocmVmPSJodHRwOi8vd3d3LmRveHlnZW4ub3JnL2luZGV4Lmh0bWwiPgorPGltZyBjbGFzcz0iZm9vdGVyIiBzcmM9ImRveHlnZW4ucG5nIiBhbHQ9ImRveHlnZW4iLz4KKzwvYT4gMS44LjMuMQorPC9zbWFsbD48L2FkZHJlc3M+CiA8L2JvZHk+CiA8L2h0bWw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9uYXZfZi5wbmcgYi9kb2MvaHRtbC9uYXZfZi5wbmcKaW5kZXggMWIwN2ExNi4uNzJhNThhNSAxMDA2NDQKLS0tIGEvZG9jL2h0bWwvbmF2X2YucG5nCisrKyBiL2RvYy9odG1sL25hdl9mLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2MvaHRtbC9uYXZfZy5wbmcgYi9kb2MvaHRtbC9uYXZfZy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA5M2EyMwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL25hdl9nLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2MvaHRtbC9uYXZfaC5wbmcgYi9kb2MvaHRtbC9uYXZfaC5wbmcKaW5kZXggMDFmNWZhNi4uMzMzODliMSAxMDA2NDQKLS0tIGEvZG9jL2h0bWwvbmF2X2gucG5nCisrKyBiL2RvYy9odG1sL25hdl9oLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2MvaHRtbC9vcGVuLnBuZyBiL2RvYy9odG1sL29wZW4ucG5nCmluZGV4IDdiMzVkMmMuLjMwZjc1YzcgMTAwNjQ0Ci0tLSBhL2RvYy9odG1sL29wZW4ucG5nCisrKyBiL2RvYy9odG1sL29wZW4ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvYy9odG1sL3NlYXJjaC9hbGxfNjMuaHRtbCBiL2RvYy9odG1sL3NlYXJjaC9hbGxfNjMuaHRtbAppbmRleCA4Y2ZjMzhmLi5lN2YzNGRiIDEwMDY0NAotLS0gYS9kb2MvaHRtbC9zZWFyY2gvYWxsXzYzLmh0bWwKKysrIGIvZG9jL2h0bWwvc2VhcmNoL2FsbF82My5odG1sCkBAIC0xLDE4ICsxLDE4IEBACiA8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+CiA8aHRtbD48aGVhZD48dGl0bGU+PC90aXRsZT4KIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC94aHRtbDtjaGFyc2V0PVVURi04Ii8+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRveHlnZW4gMS44LjMuMSI+CiA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJzZWFyY2guY3NzIi8+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJhbGxfNjMuanMiPjwvc2NyaXB0PgogPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ic2VhcmNoLmpzIj48L3NjcmlwdD4KIDwvaGVhZD4KIDxib2R5IGNsYXNzPSJTUlBhZ2UiPgogPGRpdiBpZD0iU1JJbmRleCI+CiA8ZGl2IGNsYXNzPSJTUlN0YXR1cyIgaWQ9IkxvYWRpbmciPkxvYWRpbmcuLi48L2Rpdj4KLTxkaXYgY2xhc3M9IlNSUmVzdWx0IiBpZD0iU1JfY3VzdG9tZmlsdGVyIj4KLSA8ZGl2IGNsYXNzPSJTUkVudHJ5Ij4KLSAgPGEgaWQ9Ikl0ZW0wIiBvbmtleWRvd249InJldHVybiBzZWFyY2hSZXN1bHRzLk5hdihldmVudCwwKSIgb25rZXlwcmVzcz0icmV0dXJuIHNlYXJjaFJlc3VsdHMuTmF2KGV2ZW50LDApIiBvbmtleXVwPSJyZXR1cm4gc2VhcmNoUmVzdWx0cy5OYXYoZXZlbnQsMCkiIGNsYXNzPSJTUlN5bWJvbCIgaHJlZj0iLi4vc3RydWN0dGp0cmFuc2Zvcm0uaHRtbCNhNDNlZTFiY2RkMmE4ZDcyNDlhNzU2Nzc0Zjc4NzkzYzEiIHRhcmdldD0iX3BhcmVudCI+Y3VzdG9tRmlsdGVyPC9hPgotICA8c3BhbiBjbGFzcz0iU1JTY29wZSI+dGp0cmFuc2Zvcm08L3NwYW4+Ci0gPC9kaXY+Ci08L2Rpdj4KKzxkaXYgaWQ9IlNSUmVzdWx0cyI+PC9kaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQorY3JlYXRlUmVzdWx0cygpOworLS0+PC9zY3JpcHQ+CiA8ZGl2IGNsYXNzPSJTUlN0YXR1cyIgaWQ9IlNlYXJjaGluZyI+U2VhcmNoaW5nLi4uPC9kaXY+CiA8ZGl2IGNsYXNzPSJTUlN0YXR1cyIgaWQ9Ik5vTWF0Y2hlcyI+Tm8gTWF0Y2hlczwvZGl2PgogPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KZGlmZiAtLWdpdCBhL2RvYy9odG1sL3NlYXJjaC9hbGxfNjMuanMgYi9kb2MvaHRtbC9zZWFyY2gvYWxsXzYzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMDU4ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9zZWFyY2gvYWxsXzYzLmpzCkBAIC0wLDAgKzEsNCBAQAordmFyIHNlYXJjaERhdGE9CitbCisgIFsnY3VzdG9tZmlsdGVyJyxbJ2N1c3RvbUZpbHRlcicsWycuLi9zdHJ1Y3R0anRyYW5zZm9ybS5odG1sI2E0M2VlMWJjZGQyYThkNzI0OWE3NTY3NzRmNzg3OTNjMScsMSwndGp0cmFuc2Zvcm0nXV1dCitdOwpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvc2VhcmNoL2FsbF82NC5odG1sIGIvZG9jL2h0bWwvc2VhcmNoL2FsbF82NC5odG1sCmluZGV4IDJlNTNiMDIuLjM2MDYwMWYgMTAwNjQ0Ci0tLSBhL2RvYy9odG1sL3NlYXJjaC9hbGxfNjQuaHRtbAorKysgYi9kb2MvaHRtbC9zZWFyY2gvYWxsXzY0Lmh0bWwKQEAgLTEsMjQgKzEsMTggQEAKIDwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KIDxodG1sPjxoZWFkPjx0aXRsZT48L3RpdGxlPgogPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L3hodG1sO2NoYXJzZXQ9VVRGLTgiLz4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG94eWdlbiAxLjguMy4xIj4KIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9InNlYXJjaC5jc3MiLz4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImFsbF82NC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJzZWFyY2guanMiPjwvc2NyaXB0PgogPC9oZWFkPgogPGJvZHkgY2xhc3M9IlNSUGFnZSI+CiA8ZGl2IGlkPSJTUkluZGV4Ij4KIDxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iTG9hZGluZyI+TG9hZGluZy4uLjwvZGl2PgotPGRpdiBjbGFzcz0iU1JSZXN1bHQiIGlkPSJTUl9kYXRhIj4KLSA8ZGl2IGNsYXNzPSJTUkVudHJ5Ij4KLSAgPGEgaWQ9Ikl0ZW0wIiBvbmtleWRvd249InJldHVybiBzZWFyY2hSZXN1bHRzLk5hdihldmVudCwwKSIgb25rZXlwcmVzcz0icmV0dXJuIHNlYXJjaFJlc3VsdHMuTmF2KGV2ZW50LDApIiBvbmtleXVwPSJyZXR1cm4gc2VhcmNoUmVzdWx0cy5OYXYoZXZlbnQsMCkiIGNsYXNzPSJTUlN5bWJvbCIgaHJlZj0iLi4vc3RydWN0dGp0cmFuc2Zvcm0uaHRtbCNhNjg4ZmU4ZjFhOGVjYzEyYTUzOGQ5ZTU2MWNmMzM4ZTMiIHRhcmdldD0iX3BhcmVudCI+ZGF0YTwvYT4KLSAgPHNwYW4gY2xhc3M9IlNSU2NvcGUiPnRqdHJhbnNmb3JtPC9zcGFuPgotIDwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJTUlJlc3VsdCIgaWQ9IlNSX2Rlbm9tIj4KLSA8ZGl2IGNsYXNzPSJTUkVudHJ5Ij4KLSAgPGEgaWQ9Ikl0ZW0xIiBvbmtleWRvd249InJldHVybiBzZWFyY2hSZXN1bHRzLk5hdihldmVudCwxKSIgb25rZXlwcmVzcz0icmV0dXJuIHNlYXJjaFJlc3VsdHMuTmF2KGV2ZW50LDEpIiBvbmtleXVwPSJyZXR1cm4gc2VhcmNoUmVzdWx0cy5OYXYoZXZlbnQsMSkiIGNsYXNzPSJTUlN5bWJvbCIgaHJlZj0iLi4vc3RydWN0dGpzY2FsaW5nZmFjdG9yLmh0bWwjYWVmYmNkZjNlOWU2MjI3NGIyZDMxMmM2OTVmMTMzY2UzIiB0YXJnZXQ9Il9wYXJlbnQiPmRlbm9tPC9hPgotICA8c3BhbiBjbGFzcz0iU1JTY29wZSI+dGpzY2FsaW5nZmFjdG9yPC9zcGFuPgotIDwvZGl2PgotPC9kaXY+Cis8ZGl2IGlkPSJTUlJlc3VsdHMiPjwvZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KK2NyZWF0ZVJlc3VsdHMoKTsKKy0tPjwvc2NyaXB0PgogPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJTZWFyY2hpbmciPlNlYXJjaGluZy4uLjwvZGl2PgogPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJOb01hdGNoZXMiPk5vIE1hdGNoZXM8L2Rpdj4KIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCmRpZmYgLS1naXQgYS9kb2MvaHRtbC9zZWFyY2gvYWxsXzY0LmpzIGIvZG9jL2h0bWwvc2VhcmNoL2FsbF82NC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTlhMDUwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvc2VhcmNoL2FsbF82NC5qcwpAQCAtMCwwICsxLDUgQEAKK3ZhciBzZWFyY2hEYXRhPQorWworICBbJ2RhdGEnLFsnZGF0YScsWycuLi9zdHJ1Y3R0anRyYW5zZm9ybS5odG1sI2E2ODhmZThmMWE4ZWNjMTJhNTM4ZDllNTYxY2YzMzhlMycsMSwndGp0cmFuc2Zvcm0nXV1dLAorICBbJ2Rlbm9tJyxbJ2Rlbm9tJyxbJy4uL3N0cnVjdHRqc2NhbGluZ2ZhY3Rvci5odG1sI2FlZmJjZGYzZTllNjIyNzRiMmQzMTJjNjk1ZjEzM2NlMycsMSwndGpzY2FsaW5nZmFjdG9yJ11dXQorXTsKZGlmZiAtLWdpdCBhL2RvYy9odG1sL3NlYXJjaC9hbGxfNjguaHRtbCBiL2RvYy9odG1sL3NlYXJjaC9hbGxfNjguaHRtbAppbmRleCBjY2I2NzFkLi5kZWM0MWQ2IDEwMDY0NAotLS0gYS9kb2MvaHRtbC9zZWFyY2gvYWxsXzY4Lmh0bWwKKysrIGIvZG9jL2h0bWwvc2VhcmNoL2FsbF82OC5odG1sCkBAIC0xLDE4ICsxLDE4IEBACiA8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+CiA8aHRtbD48aGVhZD48dGl0bGU+PC90aXRsZT4KIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC94aHRtbDtjaGFyc2V0PVVURi04Ii8+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRveHlnZW4gMS44LjMuMSI+CiA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJzZWFyY2guY3NzIi8+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJhbGxfNjguanMiPjwvc2NyaXB0PgogPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ic2VhcmNoLmpzIj48L3NjcmlwdD4KIDwvaGVhZD4KIDxib2R5IGNsYXNzPSJTUlBhZ2UiPgogPGRpdiBpZD0iU1JJbmRleCI+CiA8ZGl2IGNsYXNzPSJTUlN0YXR1cyIgaWQ9IkxvYWRpbmciPkxvYWRpbmcuLi48L2Rpdj4KLTxkaXYgY2xhc3M9IlNSUmVzdWx0IiBpZD0iU1JfaCI+Ci0gPGRpdiBjbGFzcz0iU1JFbnRyeSI+Ci0gIDxhIGlkPSJJdGVtMCIgb25rZXlkb3duPSJyZXR1cm4gc2VhcmNoUmVzdWx0cy5OYXYoZXZlbnQsMCkiIG9ua2V5cHJlc3M9InJldHVybiBzZWFyY2hSZXN1bHRzLk5hdihldmVudCwwKSIgb25rZXl1cD0icmV0dXJuIHNlYXJjaFJlc3VsdHMuTmF2KGV2ZW50LDApIiBjbGFzcz0iU1JTeW1ib2wiIGhyZWY9Ii4uL3N0cnVjdHRqcmVnaW9uLmh0bWwjYWVjZWZjNDVhMjZmNGQ4YjYwZGQ0ZDgyNWMxNzEwMTE1IiB0YXJnZXQ9Il9wYXJlbnQiPmg8L2E+Ci0gIDxzcGFuIGNsYXNzPSJTUlNjb3BlIj50anJlZ2lvbjwvc3Bhbj4KLSA8L2Rpdj4KLTwvZGl2PgorPGRpdiBpZD0iU1JSZXN1bHRzIj48L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCitjcmVhdGVSZXN1bHRzKCk7CistLT48L3NjcmlwdD4KIDxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iU2VhcmNoaW5nIj5TZWFyY2hpbmcuLi48L2Rpdj4KIDxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iTm9NYXRjaGVzIj5ObyBNYXRjaGVzPC9kaXY+CiA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvc2VhcmNoL2FsbF82OC5qcyBiL2RvYy9odG1sL3NlYXJjaC9hbGxfNjguanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IxN2U5NwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL3NlYXJjaC9hbGxfNjguanMKQEAgLTAsMCArMSw0IEBACit2YXIgc2VhcmNoRGF0YT0KK1sKKyAgWydoJyxbJ2gnLFsnLi4vc3RydWN0dGpyZWdpb24uaHRtbCNhZWNlZmM0NWEyNmY0ZDhiNjBkZDRkODI1YzE3MTAxMTUnLDEsJ3RqcmVnaW9uJ11dXQorXTsKZGlmZiAtLWdpdCBhL2RvYy9odG1sL3NlYXJjaC9hbGxfNmUuaHRtbCBiL2RvYy9odG1sL3NlYXJjaC9hbGxfNmUuaHRtbAppbmRleCBiOWY1YjA1Li5lMGZkNzY1IDEwMDY0NAotLS0gYS9kb2MvaHRtbC9zZWFyY2gvYWxsXzZlLmh0bWwKKysrIGIvZG9jL2h0bWwvc2VhcmNoL2FsbF82ZS5odG1sCkBAIC0xLDE4ICsxLDE4IEBACiA8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+CiA8aHRtbD48aGVhZD48dGl0bGU+PC90aXRsZT4KIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC94aHRtbDtjaGFyc2V0PVVURi04Ii8+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRveHlnZW4gMS44LjMuMSI+CiA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJzZWFyY2guY3NzIi8+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJhbGxfNmUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ic2VhcmNoLmpzIj48L3NjcmlwdD4KIDwvaGVhZD4KIDxib2R5IGNsYXNzPSJTUlBhZ2UiPgogPGRpdiBpZD0iU1JJbmRleCI+CiA8ZGl2IGNsYXNzPSJTUlN0YXR1cyIgaWQ9IkxvYWRpbmciPkxvYWRpbmcuLi48L2Rpdj4KLTxkaXYgY2xhc3M9IlNSUmVzdWx0IiBpZD0iU1JfbnVtIj4KLSA8ZGl2IGNsYXNzPSJTUkVudHJ5Ij4KLSAgPGEgaWQ9Ikl0ZW0wIiBvbmtleWRvd249InJldHVybiBzZWFyY2hSZXN1bHRzLk5hdihldmVudCwwKSIgb25rZXlwcmVzcz0icmV0dXJuIHNlYXJjaFJlc3VsdHMuTmF2KGV2ZW50LDApIiBvbmtleXVwPSJyZXR1cm4gc2VhcmNoUmVzdWx0cy5OYXYoZXZlbnQsMCkiIGNsYXNzPSJTUlN5bWJvbCIgaHJlZj0iLi4vc3RydWN0dGpzY2FsaW5nZmFjdG9yLmh0bWwjYTliMDExZTU3Zjk4MWVlMjMwODNlMmMxYWE1ZTY0MGVjIiB0YXJnZXQ9Il9wYXJlbnQiPm51bTwvYT4KLSAgPHNwYW4gY2xhc3M9IlNSU2NvcGUiPnRqc2NhbGluZ2ZhY3Rvcjwvc3Bhbj4KLSA8L2Rpdj4KLTwvZGl2PgorPGRpdiBpZD0iU1JSZXN1bHRzIj48L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCitjcmVhdGVSZXN1bHRzKCk7CistLT48L3NjcmlwdD4KIDxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iU2VhcmNoaW5nIj5TZWFyY2hpbmcuLi48L2Rpdj4KIDxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iTm9NYXRjaGVzIj5ObyBNYXRjaGVzPC9kaXY+CiA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvc2VhcmNoL2FsbF82ZS5qcyBiL2RvYy9odG1sL3NlYXJjaC9hbGxfNmUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNmYWExMwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL3NlYXJjaC9hbGxfNmUuanMKQEAgLTAsMCArMSw0IEBACit2YXIgc2VhcmNoRGF0YT0KK1sKKyAgWydudW0nLFsnbnVtJyxbJy4uL3N0cnVjdHRqc2NhbGluZ2ZhY3Rvci5odG1sI2E5YjAxMWU1N2Y5ODFlZTIzMDgzZTJjMWFhNWU2NDBlYycsMSwndGpzY2FsaW5nZmFjdG9yJ11dXQorXTsKZGlmZiAtLWdpdCBhL2RvYy9odG1sL3NlYXJjaC9hbGxfNmYuaHRtbCBiL2RvYy9odG1sL3NlYXJjaC9hbGxfNmYuaHRtbAppbmRleCBkOTViYmVmLi41ZTg2YjAzIDEwMDY0NAotLS0gYS9kb2MvaHRtbC9zZWFyY2gvYWxsXzZmLmh0bWwKKysrIGIvZG9jL2h0bWwvc2VhcmNoL2FsbF82Zi5odG1sCkBAIC0xLDI0ICsxLDE4IEBACiA8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+CiA8aHRtbD48aGVhZD48dGl0bGU+PC90aXRsZT4KIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC94aHRtbDtjaGFyc2V0PVVURi04Ii8+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRveHlnZW4gMS44LjMuMSI+CiA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJzZWFyY2guY3NzIi8+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJhbGxfNmYuanMiPjwvc2NyaXB0PgogPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ic2VhcmNoLmpzIj48L3NjcmlwdD4KIDwvaGVhZD4KIDxib2R5IGNsYXNzPSJTUlBhZ2UiPgogPGRpdiBpZD0iU1JJbmRleCI+CiA8ZGl2IGNsYXNzPSJTUlN0YXR1cyIgaWQ9IkxvYWRpbmciPkxvYWRpbmcuLi48L2Rpdj4KLTxkaXYgY2xhc3M9IlNSUmVzdWx0IiBpZD0iU1Jfb3AiPgotIDxkaXYgY2xhc3M9IlNSRW50cnkiPgotICA8YSBpZD0iSXRlbTAiIG9ua2V5ZG93bj0icmV0dXJuIHNlYXJjaFJlc3VsdHMuTmF2KGV2ZW50LDApIiBvbmtleXByZXNzPSJyZXR1cm4gc2VhcmNoUmVzdWx0cy5OYXYoZXZlbnQsMCkiIG9ua2V5dXA9InJldHVybiBzZWFyY2hSZXN1bHRzLk5hdihldmVudCwwKSIgY2xhc3M9IlNSU3ltYm9sIiBocmVmPSIuLi9zdHJ1Y3R0anRyYW5zZm9ybS5odG1sI2EyNTI1YWFiNGJhNjk3OGExYzI3M2Y3NGZlZjUwZTQ5OCIgdGFyZ2V0PSJfcGFyZW50Ij5vcDwvYT4KLSAgPHNwYW4gY2xhc3M9IlNSU2NvcGUiPnRqdHJhbnNmb3JtPC9zcGFuPgotIDwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJTUlJlc3VsdCIgaWQ9IlNSX29wdGlvbnMiPgotIDxkaXYgY2xhc3M9IlNSRW50cnkiPgotICA8YSBpZD0iSXRlbTEiIG9ua2V5ZG93bj0icmV0dXJuIHNlYXJjaFJlc3VsdHMuTmF2KGV2ZW50LDEpIiBvbmtleXByZXNzPSJyZXR1cm4gc2VhcmNoUmVzdWx0cy5OYXYoZXZlbnQsMSkiIG9ua2V5dXA9InJldHVybiBzZWFyY2hSZXN1bHRzLk5hdihldmVudCwxKSIgY2xhc3M9IlNSU3ltYm9sIiBocmVmPSIuLi9zdHJ1Y3R0anRyYW5zZm9ybS5odG1sI2FjMGU3NDY1NWJhYTQ0MDIyMDlhMjFlMWFlNDgxYzhmNiIgdGFyZ2V0PSJfcGFyZW50Ij5vcHRpb25zPC9hPgotICA8c3BhbiBjbGFzcz0iU1JTY29wZSI+dGp0cmFuc2Zvcm08L3NwYW4+Ci0gPC9kaXY+Ci08L2Rpdj4KKzxkaXYgaWQ9IlNSUmVzdWx0cyI+PC9kaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQorY3JlYXRlUmVzdWx0cygpOworLS0+PC9zY3JpcHQ+CiA8ZGl2IGNsYXNzPSJTUlN0YXR1cyIgaWQ9IlNlYXJjaGluZyI+U2VhcmNoaW5nLi4uPC9kaXY+CiA8ZGl2IGNsYXNzPSJTUlN0YXR1cyIgaWQ9Ik5vTWF0Y2hlcyI+Tm8gTWF0Y2hlczwvZGl2PgogPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KZGlmZiAtLWdpdCBhL2RvYy9odG1sL3NlYXJjaC9hbGxfNmYuanMgYi9kb2MvaHRtbC9zZWFyY2gvYWxsXzZmLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjY2E4MzIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9zZWFyY2gvYWxsXzZmLmpzCkBAIC0wLDAgKzEsNSBAQAordmFyIHNlYXJjaERhdGE9CitbCisgIFsnb3AnLFsnb3AnLFsnLi4vc3RydWN0dGp0cmFuc2Zvcm0uaHRtbCNhMjUyNWFhYjRiYTY5NzhhMWMyNzNmNzRmZWY1MGU0OTgnLDEsJ3RqdHJhbnNmb3JtJ11dXSwKKyAgWydvcHRpb25zJyxbJ29wdGlvbnMnLFsnLi4vc3RydWN0dGp0cmFuc2Zvcm0uaHRtbCNhYzBlNzQ2NTViYWE0NDAyMjA5YTIxZTFhZTQ4MWM4ZjYnLDEsJ3RqdHJhbnNmb3JtJ11dXQorXTsKZGlmZiAtLWdpdCBhL2RvYy9odG1sL3NlYXJjaC9hbGxfNzIuaHRtbCBiL2RvYy9odG1sL3NlYXJjaC9hbGxfNzIuaHRtbAppbmRleCA0NjVmZTg4Li4zNDdiOWY2IDEwMDY0NAotLS0gYS9kb2MvaHRtbC9zZWFyY2gvYWxsXzcyLmh0bWwKKysrIGIvZG9jL2h0bWwvc2VhcmNoL2FsbF83Mi5odG1sCkBAIC0xLDE4ICsxLDE4IEBACiA8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+CiA8aHRtbD48aGVhZD48dGl0bGU+PC90aXRsZT4KIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC94aHRtbDtjaGFyc2V0PVVURi04Ii8+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRveHlnZW4gMS44LjMuMSI+CiA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJzZWFyY2guY3NzIi8+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJhbGxfNzIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ic2VhcmNoLmpzIj48L3NjcmlwdD4KIDwvaGVhZD4KIDxib2R5IGNsYXNzPSJTUlBhZ2UiPgogPGRpdiBpZD0iU1JJbmRleCI+CiA8ZGl2IGNsYXNzPSJTUlN0YXR1cyIgaWQ9IkxvYWRpbmciPkxvYWRpbmcuLi48L2Rpdj4KLTxkaXYgY2xhc3M9IlNSUmVzdWx0IiBpZD0iU1JfciI+Ci0gPGRpdiBjbGFzcz0iU1JFbnRyeSI+Ci0gIDxhIGlkPSJJdGVtMCIgb25rZXlkb3duPSJyZXR1cm4gc2VhcmNoUmVzdWx0cy5OYXYoZXZlbnQsMCkiIG9ua2V5cHJlc3M9InJldHVybiBzZWFyY2hSZXN1bHRzLk5hdihldmVudCwwKSIgb25rZXl1cD0icmV0dXJuIHNlYXJjaFJlc3VsdHMuTmF2KGV2ZW50LDApIiBjbGFzcz0iU1JTeW1ib2wiIGhyZWY9Ii4uL3N0cnVjdHRqdHJhbnNmb3JtLmh0bWwjYWMzMjRlNWU0NDJhYmVjOGE5NjFlNWJmMjE5ZGIxMmNmIiB0YXJnZXQ9Il9wYXJlbnQiPnI8L2E+Ci0gIDxzcGFuIGNsYXNzPSJTUlNjb3BlIj50anRyYW5zZm9ybTwvc3Bhbj4KLSA8L2Rpdj4KLTwvZGl2PgorPGRpdiBpZD0iU1JSZXN1bHRzIj48L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCitjcmVhdGVSZXN1bHRzKCk7CistLT48L3NjcmlwdD4KIDxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iU2VhcmNoaW5nIj5TZWFyY2hpbmcuLi48L2Rpdj4KIDxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iTm9NYXRjaGVzIj5ObyBNYXRjaGVzPC9kaXY+CiA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvc2VhcmNoL2FsbF83Mi5qcyBiL2RvYy9odG1sL3NlYXJjaC9hbGxfNzIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFjZGUzNQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL3NlYXJjaC9hbGxfNzIuanMKQEAgLTAsMCArMSw0IEBACit2YXIgc2VhcmNoRGF0YT0KK1sKKyAgWydyJyxbJ3InLFsnLi4vc3RydWN0dGp0cmFuc2Zvcm0uaHRtbCNhYzMyNGU1ZTQ0MmFiZWM4YTk2MWU1YmYyMTlkYjEyY2YnLDEsJ3RqdHJhbnNmb3JtJ11dXQorXTsKZGlmZiAtLWdpdCBhL2RvYy9odG1sL3NlYXJjaC9hbGxfNzQuaHRtbCBiL2RvYy9odG1sL3NlYXJjaC9hbGxfNzQuaHRtbAppbmRleCBmZDc3NjYzLi5jNjQ2YWVmIDEwMDY0NAotLS0gYS9kb2MvaHRtbC9zZWFyY2gvYWxsXzc0Lmh0bWwKKysrIGIvZG9jL2h0bWwvc2VhcmNoL2FsbF83NC5odG1sCkBAIC0xLDI3ICsxLDE4IEBACiA8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+CiA8aHRtbD48aGVhZD48dGl0bGU+PC90aXRsZT4KIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC94aHRtbDtjaGFyc2V0PVVURi04Ii8+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRveHlnZW4gMS44LjMuMSI+CiA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJzZWFyY2guY3NzIi8+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJhbGxfNzQuanMiPjwvc2NyaXB0PgogPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ic2VhcmNoLmpzIj48L3NjcmlwdD4KIDwvaGVhZD4KIDxib2R5IGNsYXNzPSJTUlBhZ2UiPgogPGRpdiBpZD0iU1JJbmRleCI+CiA8ZGl2IGNsYXNzPSJTUlN0YXR1cyIgaWQ9IkxvYWRpbmciPkxvYWRpbmcuLi48L2Rpdj4KLTxkaXYgY2xhc3M9IlNSUmVzdWx0IiBpZD0iU1JfdGpyZWdpb24iPgotIDxkaXYgY2xhc3M9IlNSRW50cnkiPgotICA8YSBpZD0iSXRlbTAiIG9ua2V5ZG93bj0icmV0dXJuIHNlYXJjaFJlc3VsdHMuTmF2KGV2ZW50LDApIiBvbmtleXByZXNzPSJyZXR1cm4gc2VhcmNoUmVzdWx0cy5OYXYoZXZlbnQsMCkiIG9ua2V5dXA9InJldHVybiBzZWFyY2hSZXN1bHRzLk5hdihldmVudCwwKSIgY2xhc3M9IlNSU3ltYm9sIiBocmVmPSIuLi9zdHJ1Y3R0anJlZ2lvbi5odG1sIiB0YXJnZXQ9Il9wYXJlbnQiPnRqcmVnaW9uPC9hPgotIDwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJTUlJlc3VsdCIgaWQ9IlNSX3Rqc2NhbGluZ2ZhY3RvciI+Ci0gPGRpdiBjbGFzcz0iU1JFbnRyeSI+Ci0gIDxhIGlkPSJJdGVtMSIgb25rZXlkb3duPSJyZXR1cm4gc2VhcmNoUmVzdWx0cy5OYXYoZXZlbnQsMSkiIG9ua2V5cHJlc3M9InJldHVybiBzZWFyY2hSZXN1bHRzLk5hdihldmVudCwxKSIgb25rZXl1cD0icmV0dXJuIHNlYXJjaFJlc3VsdHMuTmF2KGV2ZW50LDEpIiBjbGFzcz0iU1JTeW1ib2wiIGhyZWY9Ii4uL3N0cnVjdHRqc2NhbGluZ2ZhY3Rvci5odG1sIiB0YXJnZXQ9Il9wYXJlbnQiPnRqc2NhbGluZ2ZhY3RvcjwvYT4KLSA8L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iU1JSZXN1bHQiIGlkPSJTUl90anRyYW5zZm9ybSI+Ci0gPGRpdiBjbGFzcz0iU1JFbnRyeSI+Ci0gIDxhIGlkPSJJdGVtMiIgb25rZXlkb3duPSJyZXR1cm4gc2VhcmNoUmVzdWx0cy5OYXYoZXZlbnQsMikiIG9ua2V5cHJlc3M9InJldHVybiBzZWFyY2hSZXN1bHRzLk5hdihldmVudCwyKSIgb25rZXl1cD0icmV0dXJuIHNlYXJjaFJlc3VsdHMuTmF2KGV2ZW50LDIpIiBjbGFzcz0iU1JTeW1ib2wiIGhyZWY9Ii4uL3N0cnVjdHRqdHJhbnNmb3JtLmh0bWwiIHRhcmdldD0iX3BhcmVudCI+dGp0cmFuc2Zvcm08L2E+Ci0gPC9kaXY+Ci08L2Rpdj4KKzxkaXYgaWQ9IlNSUmVzdWx0cyI+PC9kaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQorY3JlYXRlUmVzdWx0cygpOworLS0+PC9zY3JpcHQ+CiA8ZGl2IGNsYXNzPSJTUlN0YXR1cyIgaWQ9IlNlYXJjaGluZyI+U2VhcmNoaW5nLi4uPC9kaXY+CiA8ZGl2IGNsYXNzPSJTUlN0YXR1cyIgaWQ9Ik5vTWF0Y2hlcyI+Tm8gTWF0Y2hlczwvZGl2PgogPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KZGlmZiAtLWdpdCBhL2RvYy9odG1sL3NlYXJjaC9hbGxfNzQuanMgYi9kb2MvaHRtbC9zZWFyY2gvYWxsXzc0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExOTI3YmEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9zZWFyY2gvYWxsXzc0LmpzCkBAIC0wLDAgKzEsNzUgQEAKK3ZhciBzZWFyY2hEYXRhPQorWworICBbJ3RqXzVmbnVtcGYnLFsnVEpfTlVNUEYnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E3MDEwYTQ0MDJmNTRhNDViYTgyMmFkODY3NWE0NjU1ZScsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqXzVmbnVtc2FtcCcsWydUSl9OVU1TQU1QJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNWVmM2QxNjkxNjJjZTc3Y2UzNDhlMjkyYTBiNzQ3N2MnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0al81Zm51bXhvcCcsWydUSl9OVU1YT1AnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2EwZjZkYmQxOGFkZjM4YjdkNDZhYzU0N2YwZjRkNTYyYycsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqYWxsb2MnLFsndGpBbGxvYycsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTVjOTIzNGJkYTZkOTkzY2RhZmZkZDg5YmY4MWEwMGZmJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpibHVlb2Zmc2V0JyxbJ3RqQmx1ZU9mZnNldCcsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTg0ZTJlMzVkM2YwODAyNWY5NzZlYzFlYzUzNjkzZGVhJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpidWZzaXplJyxbJ3RqQnVmU2l6ZScsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWNjYzViY2E3ZjEyZmNkY2MzMDJlNmUxYzZkNGIzMTFiJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpidWZzaXpleXV2JyxbJ3RqQnVmU2l6ZVlVVicsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTlkMGNiMDZmZDUwNTJkMjFiNmYyYjM4MmRiOGIyMTljJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpjb21wcmVzczInLFsndGpDb21wcmVzczInLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FiYTYyYjdhOThmOTYwODM5YjU4ODU3OTg5ODQ5NWNmMicsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqZGVjb21wcmVzczInLFsndGpEZWNvbXByZXNzMicsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWRhNjljYzY0NDNkMWJiNDkzYjQwZjE2MjYyNTllNWU5JywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpkZWNvbXByZXNzaGVhZGVyMicsWyd0akRlY29tcHJlc3NIZWFkZXIyJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhYzU2NzVmY2ViNzk5N2IzODU1MTZjZGZmZGIzNGU2YWEnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0amRlY29tcHJlc3N0b3l1dicsWyd0akRlY29tcHJlc3NUb1lVVicsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWQ3ODEwYWYwOTU2MjRhNDAxNmU3Mjk1N2E1MGY3N2Q4JywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpkZXN0cm95JyxbJ3RqRGVzdHJveScsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTY3NGFkZWU5MTdiOTVhZDRhODk2ZjFiYTM5ZTEyNTQwJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGplbmNvZGV5dXYyJyxbJ3RqRW5jb2RlWVVWMicsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTBmYTRlN2IxOTQzNjg3YzZhMGMwMzA0NTI5YzU1ZDM1JywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpmbGFnXzVmYWNjdXJhdGVkY3QnLFsnVEpGTEFHX0FDQ1VSQVRFRENUJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhY2IyMzNjZmQ3MjJkNjZkMWNjYmY0OGE3ZGU4MWYwZTAnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0amZsYWdfNWZib3R0b211cCcsWydUSkZMQUdfQk9UVE9NVVAnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E3MmVjZjRlYmU2ZWI3MDJkM2M2ZjVjYTI3NDU1ZTFlYycsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqZmxhZ181ZmZhc3RkY3QnLFsnVEpGTEFHX0ZBU1REQ1QnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FhYmNlMjM1ZGI4MGQzZjY5OGIyN2YzNmNiZDQ1M2RhMicsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqZmxhZ181ZmZhc3R1cHNhbXBsZScsWydUSkZMQUdfRkFTVFVQU0FNUExFJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNGVlNDUwNmM4MTE3N2EwNmY3N2UyNTA0YTIyZWZkMmQnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0amZsYWdfNWZmb3JjZW1teCcsWydUSkZMQUdfRk9SQ0VNTVgnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E0ZTg3MmYxMWM4MmYyNDE3MzZmYTgyOTc5MjBmMjRlNScsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqZmxhZ181ZmZvcmNlc3NlJyxbJ1RKRkxBR19GT1JDRVNTRScsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWUxN2U2MzE4OWU4Y2Q3MzBmZWVkM2VmYmQyNDU0ZjM4JywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpmbGFnXzVmZm9yY2Vzc2UyJyxbJ1RKRkxBR19GT1JDRVNTRTInLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E4Y2YwYmNhOTZlYTRkNDcyNTYzZjRiMGViZjhjNDhlNycsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqZmxhZ181ZmZvcmNlc3NlMycsWydUSkZMQUdfRk9SQ0VTU0UzJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhZjlkNDkwNjY2MzM0MDRkYTQzODZkNzA4MjAyOTVkZDInLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0amZsYWdfNWZub3JlYWxsb2MnLFsnVEpGTEFHX05PUkVBTExPQycsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTg4MDhkNDAzYzY4YjYyYWFhNThhNGMxZTU4ZTk4OTYzJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpmcmVlJyxbJ3RqRnJlZScsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYThjNGExMjMxZGMwNmE0NTA1MTRjODM1ZjY0NzFmMTM3JywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpnZXRlcnJvcnN0cicsWyd0akdldEVycm9yU3RyJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhOWFmNzljOTA4ZWMxMzFiMWFlOGQ1MmZlNDAzNzVhYmYnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0amdldHNjYWxpbmdmYWN0b3JzJyxbJ3RqR2V0U2NhbGluZ0ZhY3RvcnMnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E2NDQ5MDQ0YjlhZjQwMjk5OWNjZjUyZjQwMTMzM2JlOCcsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqZ3JlZW5vZmZzZXQnLFsndGpHcmVlbk9mZnNldCcsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTgyZDZlMzVkYTQ0MTExMmE0MTFkYTQxOTIzYzBiYTJmJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpoYW5kbGUnLFsndGpoYW5kbGUnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E3NThkMjYzNGVjYjQ5NDlkZTc4MTVjYmE2MjFmNTc2MycsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqaW5pdGNvbXByZXNzJyxbJ3RqSW5pdENvbXByZXNzJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhM2QxMGM0N2ZiZTRhMjQ4OWEyYjMwYzkzMTU1MWQwMWEnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0amluaXRkZWNvbXByZXNzJyxbJ3RqSW5pdERlY29tcHJlc3MnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FlNTQwODE3OWQwNDFlMmEyZjcxOTljODI4M2NmNjQ5ZScsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqaW5pdHRyYW5zZm9ybScsWyd0akluaXRUcmFuc2Zvcm0nLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2EzMTU1Yjc3NWJmYmFjOWRiYmE4NjliOTVhMDM2NzkwMicsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqbWN1aGVpZ2h0JyxbJ3RqTUNVSGVpZ2h0JyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhYmQyNDdiYjlmZWNiMzkzZWNhNTczNjZmZWI4MzI3YmYnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0am1jdXdpZHRoJyxbJ3RqTUNVV2lkdGgnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E5ZTYxZTdjZDQ3YTE1YTE3MzI4M2JhOTRlNzgxMzA4YycsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqcGFkJyxbJ1RKUEFEJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhMGFiYTk1NTQ3MzMxNWU0MDUyOTVkOTc4ZjBjMTY1MTEnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anBmJyxbJ1RKUEYnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYScsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqcGZfNWZhYmdyJyxbJ1RKUEZfQUJHUicsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYWExYmExYTdmMTYzMWRiZWFhNDlhMGE4NWZjNGE0MDA4MScsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqcGZfNWZhcmdiJyxbJ1RKUEZfQVJHQicsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYWFlOGY4NDZlZDlkOWRlOTliNmUxZGZlNDQ4ODQ4NzY1YycsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqcGZfNWZiZ3InLFsnVEpQRl9CR1InLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmFhYjEwNjI0NDM3ZmI4ZWY0OTVhMGIxNTNlNjU3NDk4MzknLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anBmXzVmYmdyYScsWydUSlBGX0JHUkEnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmFhYzAzN2ZmMTg0NWNmOWI3NGJiODFhMzY1OWMyYjlmYjQnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anBmXzVmYmdyeCcsWydUSlBGX0JHUlgnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmFhMmExZmJmNTY5Y2E3OTg5N2VhZTg4NmUzMzc2Y2E0YzgnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anBmXzVmZ3JheScsWydUSlBGX0dSQVknLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmFhNTQzMWI1NGIwMTUzMzc3MDVmMTMxMTgwNzM3MTFhMWEnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anBmXzVmcmdiJyxbJ1RKUEZfUkdCJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYWM5MTYxNDRlMjZjMzgxN2FjNTE0ZTY0YWU1ZDEyZTJhYTdjZTkzMjMwYmZmNDQ5NTE4Y2UzODdjMTdlNmVkMzdjJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpwZl81ZnJnYmEnLFsnVEpQRl9SR0JBJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYWM5MTYxNDRlMjZjMzgxN2FjNTE0ZTY0YWU1ZDEyZTJhYTg4ZDJlODhmYWI2N2Y2NTAzY2Y5NzJlMTQ4NTFjYzEyJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpwZl81ZnJnYngnLFsnVEpQRl9SR0JYJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYWM5MTYxNDRlMjZjMzgxN2FjNTE0ZTY0YWU1ZDEyZTJhYTgzOTczYmViYjdlMmRjNmZhOGJhZTg5ZmYzZjQyZTAxJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpwZl81ZnhiZ3InLFsnVEpQRl9YQkdSJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYWM5MTYxNDRlMjZjMzgxN2FjNTE0ZTY0YWU1ZDEyZTJhYWY2NjAzYjI3MTQ3ZGU0N2UyMTJlNzVkYWMwMjdiMmFmJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpwZl81ZnhyZ2InLFsnVEpQRl9YUkdCJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYWM5MTYxNDRlMjZjMzgxN2FjNTE0ZTY0YWU1ZDEyZTJhYWRhZTk5NjkwNWVmY2ZhM2I0MmEwYmIzYmVhN2Y5ZDg0JywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpwaXhlbHNpemUnLFsndGpQaXhlbFNpemUnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FkNzdjZjhmZTViMmJmZDNjYjNmNTMwOTgxNDZhYmI0YycsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqcmVkb2Zmc2V0JyxbJ3RqUmVkT2Zmc2V0JyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhZGQ5YjQ0Njc0MmFjOGEzOTIzZjc5OTJjNzk4OGZlYTgnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anJlZ2lvbicsWyd0anJlZ2lvbicsWycuLi9zdHJ1Y3R0anJlZ2lvbi5odG1sJywxLCcnXV1dLAorICBbJ3Rqc2FtcCcsWydUSlNBTVAnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2ExZDA0NzA2MGVhODBiYjk4MjBkNTQwYmI5MjhlOTA3NCcsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3Rqc2FtcF81ZjQyMCcsWydUSlNBTVBfNDIwJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYTFkMDQ3MDYwZWE4MGJiOTgyMGQ1NDBiYjkyOGU5MDc0YTYzMDg1ZGJmNjgzY2ZlMzllNTEzY2RiNjM0M2UzNzM3JywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpzYW1wXzVmNDIyJyxbJ1RKU0FNUF80MjInLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhMWQwNDcwNjBlYTgwYmI5ODIwZDU0MGJiOTI4ZTkwNzRhMTM2MTMwOTAyY2M1NzhmMTFmMzI0MjliNTkzNjg0MDQnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anNhbXBfNWY0NDAnLFsnVEpTQU1QXzQ0MCcsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2ExZDA0NzA2MGVhODBiYjk4MjBkNTQwYmI5MjhlOTA3NGFjY2Y3NDBlNmYzYWE2YmEyMGJhOTIyY2FkMTNjYjk3NCcsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3Rqc2FtcF81ZjQ0NCcsWydUSlNBTVBfNDQ0JyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYTFkMDQ3MDYwZWE4MGJiOTgyMGQ1NDBiYjkyOGU5MDc0YWZiOGRhNGY0NDE5NzgzN2JkZWMwYTRmNTkzZGFjYWUzJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpzYW1wXzVmZ3JheScsWydUSlNBTVBfR1JBWScsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2ExZDA0NzA2MGVhODBiYjk4MjBkNTQwYmI5MjhlOTA3NGEzZjFjOTUwNDg0MmRkYzdhNDhkMGY2OTA3NTRiNjI0OCcsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3Rqc2NhbGVkJyxbJ1RKU0NBTEVEJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhODQ4NzhiYjY1NDA0MjA0NzQzYWExOGNhYzAyNzgxZGYnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anNjYWxpbmdmYWN0b3InLFsndGpzY2FsaW5nZmFjdG9yJyxbJy4uL3N0cnVjdHRqc2NhbGluZ2ZhY3Rvci5odG1sJywxLCcnXV1dLAorICBbJ3RqdHJhbnNmb3JtJyxbJ3RqdHJhbnNmb3JtJyxbJy4uL3N0cnVjdHRqdHJhbnNmb3JtLmh0bWwnLDEsJ3RqdHJhbnNmb3JtJ10sWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWEyOWYzMTg5YzQxYmUxMmVjNWRlZTdjYWVjMzE4YTMxJywxLCd0anRyYW5zZm9ybSgpOiYjMTYwO3R1cmJvanBlZy5oJ10sWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWU0MDMxOTNjZWI0YWFmYjdlMGY1NmFiNTg3YjQ4NjE2JywxLCd0alRyYW5zZm9ybSh0amhhbmRsZSBoYW5kbGUsIHVuc2lnbmVkIGNoYXIgKmpwZWdCdWYsIHVuc2lnbmVkIGxvbmcganBlZ1NpemUsIGludCBuLCB1bnNpZ25lZCBjaGFyICoqZHN0QnVmcywgdW5zaWduZWQgbG9uZyAqZHN0U2l6ZXMsIHRqdHJhbnNmb3JtICp0cmFuc2Zvcm1zLCBpbnQgZmxhZ3MpOiYjMTYwO3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anhvcCcsWydUSlhPUCcsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTJkZTUzMWFmNGU3ZTZjNGYxMjQ5MDgzNzZiMzU0ODY2JywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGp4b3BfNWZoZmxpcCcsWydUSlhPUF9IRkxJUCcsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2EyZGU1MzFhZjRlN2U2YzRmMTI0OTA4Mzc2YjM1NDg2NmFhMGRmNjk3NzZjYWEzMGYwZmEyOGUyNjMzMmQzMTFjZScsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqeG9wXzVmbm9uZScsWydUSlhPUF9OT05FJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYTJkZTUzMWFmNGU3ZTZjNGYxMjQ5MDgzNzZiMzU0ODY2YWFkODhjMDM2NmNkM2Y3ZDBlYWM5ZDdhM2ZhMWMyYzI3JywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGp4b3BfNWZyb3QxODAnLFsnVEpYT1BfUk9UMTgwJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYTJkZTUzMWFmNGU3ZTZjNGYxMjQ5MDgzNzZiMzU0ODY2YTE0MDk1MmViOGRkMDMwMGFjY2ZjYzIyNzI2ZDY5NjkyJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGp4b3BfNWZyb3QyNzAnLFsnVEpYT1BfUk9UMjcwJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYTJkZTUzMWFmNGU3ZTZjNGYxMjQ5MDgzNzZiMzU0ODY2YTMwNjRlZTVkZmI3ZjAzMmRmMzMyODE4NTg3NTY3YTA4JywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGp4b3BfNWZyb3Q5MCcsWydUSlhPUF9ST1Q5MCcsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2EyZGU1MzFhZjRlN2U2YzRmMTI0OTA4Mzc2YjM1NDg2NmE0M2IyYmJiMjNiYzRiZDU0ODQyMmQ0M2ZiZTlhZjEyOCcsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqeG9wXzVmdHJhbnNwb3NlJyxbJ1RKWE9QX1RSQU5TUE9TRScsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2EyZGU1MzFhZjRlN2U2YzRmMTI0OTA4Mzc2YjM1NDg2NmEzMTA2MGFlZDE5OWY4ODZhZmRkNDE3ZjgwNDk5YzMyZCcsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqeG9wXzVmdHJhbnN2ZXJzZScsWydUSlhPUF9UUkFOU1ZFUlNFJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYTJkZTUzMWFmNGU3ZTZjNGYxMjQ5MDgzNzZiMzU0ODY2YWYzYjE0ZDQ4OGFlYTZlY2U5ZTViM2RmNzNhNzRkNmE0JywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGp4b3BfNWZ2ZmxpcCcsWydUSlhPUF9WRkxJUCcsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2EyZGU1MzFhZjRlN2U2YzRmMTI0OTA4Mzc2YjM1NDg2NmEzMjRlZGRmYmVjNTNiN2U2OTFmNjFlNTY5MjlkMGQ1ZCcsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqeG9wdF81ZmNyb3AnLFsnVEpYT1BUX0NST1AnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E5Yzc3MWE3NTdmYzEyOTRhZGQ2MTE5MDZiODlhYjJkMicsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqeG9wdF81ZmdyYXknLFsnVEpYT1BUX0dSQVknLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2EzYWNlZTdiNDhhZGUxYjk5ZTU1ODg3MzYwMDdjMjU4OScsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqeG9wdF81Zm5vb3V0cHV0JyxbJ1RKWE9QVF9OT09VVFBVVCcsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWZiZjk5MmJiZjZlMDA2NzA1ODg2MzMzNzAzZmZhYjMxJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGp4b3B0XzVmcGVyZmVjdCcsWydUSlhPUFRfUEVSRkVDVCcsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTUwZTAzY2I1ZWQxMTUzMzBlMjEyNDE3NDI5NjAwYjAwJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGp4b3B0XzVmdHJpbScsWydUSlhPUFRfVFJJTScsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTMxOTgyNmI3ZWIxNTgzYzA1OTViYmU3Yjk1NDI4NzA5JywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndHVyYm9qcGVnJyxbJ1R1cmJvSlBFRycsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCcsMSwnJ11dXQorXTsKZGlmZiAtLWdpdCBhL2RvYy9odG1sL3NlYXJjaC9hbGxfNzcuaHRtbCBiL2RvYy9odG1sL3NlYXJjaC9hbGxfNzcuaHRtbAppbmRleCBiNGM4ZDg4Li41NWQ3MTQyIDEwMDY0NAotLS0gYS9kb2MvaHRtbC9zZWFyY2gvYWxsXzc3Lmh0bWwKKysrIGIvZG9jL2h0bWwvc2VhcmNoL2FsbF83Ny5odG1sCkBAIC0xLDE4ICsxLDE4IEBACiA8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+CiA8aHRtbD48aGVhZD48dGl0bGU+PC90aXRsZT4KIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC94aHRtbDtjaGFyc2V0PVVURi04Ii8+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRveHlnZW4gMS44LjMuMSI+CiA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJzZWFyY2guY3NzIi8+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJhbGxfNzcuanMiPjwvc2NyaXB0PgogPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ic2VhcmNoLmpzIj48L3NjcmlwdD4KIDwvaGVhZD4KIDxib2R5IGNsYXNzPSJTUlBhZ2UiPgogPGRpdiBpZD0iU1JJbmRleCI+CiA8ZGl2IGNsYXNzPSJTUlN0YXR1cyIgaWQ9IkxvYWRpbmciPkxvYWRpbmcuLi48L2Rpdj4KLTxkaXYgY2xhc3M9IlNSUmVzdWx0IiBpZD0iU1JfdyI+Ci0gPGRpdiBjbGFzcz0iU1JFbnRyeSI+Ci0gIDxhIGlkPSJJdGVtMCIgb25rZXlkb3duPSJyZXR1cm4gc2VhcmNoUmVzdWx0cy5OYXYoZXZlbnQsMCkiIG9ua2V5cHJlc3M9InJldHVybiBzZWFyY2hSZXN1bHRzLk5hdihldmVudCwwKSIgb25rZXl1cD0icmV0dXJuIHNlYXJjaFJlc3VsdHMuTmF2KGV2ZW50LDApIiBjbGFzcz0iU1JTeW1ib2wiIGhyZWY9Ii4uL3N0cnVjdHRqcmVnaW9uLmh0bWwjYWI2ZWI3M2NlZWY1ODRmYzIzYzhjODA5NzkyNmRjZTQyIiB0YXJnZXQ9Il9wYXJlbnQiPnc8L2E+Ci0gIDxzcGFuIGNsYXNzPSJTUlNjb3BlIj50anJlZ2lvbjwvc3Bhbj4KLSA8L2Rpdj4KLTwvZGl2PgorPGRpdiBpZD0iU1JSZXN1bHRzIj48L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCitjcmVhdGVSZXN1bHRzKCk7CistLT48L3NjcmlwdD4KIDxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iU2VhcmNoaW5nIj5TZWFyY2hpbmcuLi48L2Rpdj4KIDxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iTm9NYXRjaGVzIj5ObyBNYXRjaGVzPC9kaXY+CiA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvc2VhcmNoL2FsbF83Ny5qcyBiL2RvYy9odG1sL3NlYXJjaC9hbGxfNzcuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI2NzAwMgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL3NlYXJjaC9hbGxfNzcuanMKQEAgLTAsMCArMSw0IEBACit2YXIgc2VhcmNoRGF0YT0KK1sKKyAgWyd3JyxbJ3cnLFsnLi4vc3RydWN0dGpyZWdpb24uaHRtbCNhYjZlYjczY2VlZjU4NGZjMjNjOGM4MDk3OTI2ZGNlNDInLDEsJ3RqcmVnaW9uJ11dXQorXTsKZGlmZiAtLWdpdCBhL2RvYy9odG1sL3NlYXJjaC9hbGxfNzguaHRtbCBiL2RvYy9odG1sL3NlYXJjaC9hbGxfNzguaHRtbAppbmRleCBhMzU3NjkxLi4zOTA3NWQ0IDEwMDY0NAotLS0gYS9kb2MvaHRtbC9zZWFyY2gvYWxsXzc4Lmh0bWwKKysrIGIvZG9jL2h0bWwvc2VhcmNoL2FsbF83OC5odG1sCkBAIC0xLDE4ICsxLDE4IEBACiA8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+CiA8aHRtbD48aGVhZD48dGl0bGU+PC90aXRsZT4KIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC94aHRtbDtjaGFyc2V0PVVURi04Ii8+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRveHlnZW4gMS44LjMuMSI+CiA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJzZWFyY2guY3NzIi8+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJhbGxfNzguanMiPjwvc2NyaXB0PgogPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ic2VhcmNoLmpzIj48L3NjcmlwdD4KIDwvaGVhZD4KIDxib2R5IGNsYXNzPSJTUlBhZ2UiPgogPGRpdiBpZD0iU1JJbmRleCI+CiA8ZGl2IGNsYXNzPSJTUlN0YXR1cyIgaWQ9IkxvYWRpbmciPkxvYWRpbmcuLi48L2Rpdj4KLTxkaXYgY2xhc3M9IlNSUmVzdWx0IiBpZD0iU1JfeCI+Ci0gPGRpdiBjbGFzcz0iU1JFbnRyeSI+Ci0gIDxhIGlkPSJJdGVtMCIgb25rZXlkb3duPSJyZXR1cm4gc2VhcmNoUmVzdWx0cy5OYXYoZXZlbnQsMCkiIG9ua2V5cHJlc3M9InJldHVybiBzZWFyY2hSZXN1bHRzLk5hdihldmVudCwwKSIgb25rZXl1cD0icmV0dXJuIHNlYXJjaFJlc3VsdHMuTmF2KGV2ZW50LDApIiBjbGFzcz0iU1JTeW1ib2wiIGhyZWY9Ii4uL3N0cnVjdHRqcmVnaW9uLmh0bWwjYTRiNmEzN2E5Mzk5NzA5MWIyNmE3NTgzMWZhMjkxYWQ5IiB0YXJnZXQ9Il9wYXJlbnQiPng8L2E+Ci0gIDxzcGFuIGNsYXNzPSJTUlNjb3BlIj50anJlZ2lvbjwvc3Bhbj4KLSA8L2Rpdj4KLTwvZGl2PgorPGRpdiBpZD0iU1JSZXN1bHRzIj48L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCitjcmVhdGVSZXN1bHRzKCk7CistLT48L3NjcmlwdD4KIDxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iU2VhcmNoaW5nIj5TZWFyY2hpbmcuLi48L2Rpdj4KIDxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iTm9NYXRjaGVzIj5ObyBNYXRjaGVzPC9kaXY+CiA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvc2VhcmNoL2FsbF83OC5qcyBiL2RvYy9odG1sL3NlYXJjaC9hbGxfNzguanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFhMjdmMgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL3NlYXJjaC9hbGxfNzguanMKQEAgLTAsMCArMSw0IEBACit2YXIgc2VhcmNoRGF0YT0KK1sKKyAgWyd4JyxbJ3gnLFsnLi4vc3RydWN0dGpyZWdpb24uaHRtbCNhNGI2YTM3YTkzOTk3MDkxYjI2YTc1ODMxZmEyOTFhZDknLDEsJ3RqcmVnaW9uJ11dXQorXTsKZGlmZiAtLWdpdCBhL2RvYy9odG1sL3NlYXJjaC9hbGxfNzkuaHRtbCBiL2RvYy9odG1sL3NlYXJjaC9hbGxfNzkuaHRtbAppbmRleCBhODgzYmQxLi4wMzM3MTlhIDEwMDY0NAotLS0gYS9kb2MvaHRtbC9zZWFyY2gvYWxsXzc5Lmh0bWwKKysrIGIvZG9jL2h0bWwvc2VhcmNoL2FsbF83OS5odG1sCkBAIC0xLDE4ICsxLDE4IEBACiA8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+CiA8aHRtbD48aGVhZD48dGl0bGU+PC90aXRsZT4KIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC94aHRtbDtjaGFyc2V0PVVURi04Ii8+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRveHlnZW4gMS44LjMuMSI+CiA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJzZWFyY2guY3NzIi8+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJhbGxfNzkuanMiPjwvc2NyaXB0PgogPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ic2VhcmNoLmpzIj48L3NjcmlwdD4KIDwvaGVhZD4KIDxib2R5IGNsYXNzPSJTUlBhZ2UiPgogPGRpdiBpZD0iU1JJbmRleCI+CiA8ZGl2IGNsYXNzPSJTUlN0YXR1cyIgaWQ9IkxvYWRpbmciPkxvYWRpbmcuLi48L2Rpdj4KLTxkaXYgY2xhc3M9IlNSUmVzdWx0IiBpZD0iU1JfeSI+Ci0gPGRpdiBjbGFzcz0iU1JFbnRyeSI+Ci0gIDxhIGlkPSJJdGVtMCIgb25rZXlkb3duPSJyZXR1cm4gc2VhcmNoUmVzdWx0cy5OYXYoZXZlbnQsMCkiIG9ua2V5cHJlc3M9InJldHVybiBzZWFyY2hSZXN1bHRzLk5hdihldmVudCwwKSIgb25rZXl1cD0icmV0dXJuIHNlYXJjaFJlc3VsdHMuTmF2KGV2ZW50LDApIiBjbGFzcz0iU1JTeW1ib2wiIGhyZWY9Ii4uL3N0cnVjdHRqcmVnaW9uLmh0bWwjYTdiM2UwYzI0Y2ZlODdhY2M4MGUzMzRjYWZkY2YyMmMyIiB0YXJnZXQ9Il9wYXJlbnQiPnk8L2E+Ci0gIDxzcGFuIGNsYXNzPSJTUlNjb3BlIj50anJlZ2lvbjwvc3Bhbj4KLSA8L2Rpdj4KLTwvZGl2PgorPGRpdiBpZD0iU1JSZXN1bHRzIj48L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCitjcmVhdGVSZXN1bHRzKCk7CistLT48L3NjcmlwdD4KIDxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iU2VhcmNoaW5nIj5TZWFyY2hpbmcuLi48L2Rpdj4KIDxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iTm9NYXRjaGVzIj5ObyBNYXRjaGVzPC9kaXY+CiA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvc2VhcmNoL2FsbF83OS5qcyBiL2RvYy9odG1sL3NlYXJjaC9hbGxfNzkuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY4OTBhNgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL3NlYXJjaC9hbGxfNzkuanMKQEAgLTAsMCArMSw0IEBACit2YXIgc2VhcmNoRGF0YT0KK1sKKyAgWyd5JyxbJ3knLFsnLi4vc3RydWN0dGpyZWdpb24uaHRtbCNhN2IzZTBjMjRjZmU4N2FjYzgwZTMzNGNhZmRjZjIyYzInLDEsJ3RqcmVnaW9uJ11dXQorXTsKZGlmZiAtLWdpdCBhL2RvYy9odG1sL3NlYXJjaC9jbGFzc2VzXzc0Lmh0bWwgYi9kb2MvaHRtbC9zZWFyY2gvY2xhc3Nlc183NC5odG1sCmluZGV4IGZkNzc2NjMuLjRiMGZkYWEgMTAwNjQ0Ci0tLSBhL2RvYy9odG1sL3NlYXJjaC9jbGFzc2VzXzc0Lmh0bWwKKysrIGIvZG9jL2h0bWwvc2VhcmNoL2NsYXNzZXNfNzQuaHRtbApAQCAtMSwyNyArMSwxOCBAQAogPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgogPGh0bWw+PGhlYWQ+PHRpdGxlPjwvdGl0bGU+CiA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQveGh0bWw7Y2hhcnNldD1VVEYtOCIvPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb3h5Z2VuIDEuOC4zLjEiPgogPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0ic2VhcmNoLmNzcyIvPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iY2xhc3Nlc183NC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJzZWFyY2guanMiPjwvc2NyaXB0PgogPC9oZWFkPgogPGJvZHkgY2xhc3M9IlNSUGFnZSI+CiA8ZGl2IGlkPSJTUkluZGV4Ij4KIDxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iTG9hZGluZyI+TG9hZGluZy4uLjwvZGl2PgotPGRpdiBjbGFzcz0iU1JSZXN1bHQiIGlkPSJTUl90anJlZ2lvbiI+Ci0gPGRpdiBjbGFzcz0iU1JFbnRyeSI+Ci0gIDxhIGlkPSJJdGVtMCIgb25rZXlkb3duPSJyZXR1cm4gc2VhcmNoUmVzdWx0cy5OYXYoZXZlbnQsMCkiIG9ua2V5cHJlc3M9InJldHVybiBzZWFyY2hSZXN1bHRzLk5hdihldmVudCwwKSIgb25rZXl1cD0icmV0dXJuIHNlYXJjaFJlc3VsdHMuTmF2KGV2ZW50LDApIiBjbGFzcz0iU1JTeW1ib2wiIGhyZWY9Ii4uL3N0cnVjdHRqcmVnaW9uLmh0bWwiIHRhcmdldD0iX3BhcmVudCI+dGpyZWdpb248L2E+Ci0gPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9IlNSUmVzdWx0IiBpZD0iU1JfdGpzY2FsaW5nZmFjdG9yIj4KLSA8ZGl2IGNsYXNzPSJTUkVudHJ5Ij4KLSAgPGEgaWQ9Ikl0ZW0xIiBvbmtleWRvd249InJldHVybiBzZWFyY2hSZXN1bHRzLk5hdihldmVudCwxKSIgb25rZXlwcmVzcz0icmV0dXJuIHNlYXJjaFJlc3VsdHMuTmF2KGV2ZW50LDEpIiBvbmtleXVwPSJyZXR1cm4gc2VhcmNoUmVzdWx0cy5OYXYoZXZlbnQsMSkiIGNsYXNzPSJTUlN5bWJvbCIgaHJlZj0iLi4vc3RydWN0dGpzY2FsaW5nZmFjdG9yLmh0bWwiIHRhcmdldD0iX3BhcmVudCI+dGpzY2FsaW5nZmFjdG9yPC9hPgotIDwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJTUlJlc3VsdCIgaWQ9IlNSX3RqdHJhbnNmb3JtIj4KLSA8ZGl2IGNsYXNzPSJTUkVudHJ5Ij4KLSAgPGEgaWQ9Ikl0ZW0yIiBvbmtleWRvd249InJldHVybiBzZWFyY2hSZXN1bHRzLk5hdihldmVudCwyKSIgb25rZXlwcmVzcz0icmV0dXJuIHNlYXJjaFJlc3VsdHMuTmF2KGV2ZW50LDIpIiBvbmtleXVwPSJyZXR1cm4gc2VhcmNoUmVzdWx0cy5OYXYoZXZlbnQsMikiIGNsYXNzPSJTUlN5bWJvbCIgaHJlZj0iLi4vc3RydWN0dGp0cmFuc2Zvcm0uaHRtbCIgdGFyZ2V0PSJfcGFyZW50Ij50anRyYW5zZm9ybTwvYT4KLSA8L2Rpdj4KLTwvZGl2PgorPGRpdiBpZD0iU1JSZXN1bHRzIj48L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCitjcmVhdGVSZXN1bHRzKCk7CistLT48L3NjcmlwdD4KIDxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iU2VhcmNoaW5nIj5TZWFyY2hpbmcuLi48L2Rpdj4KIDxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iTm9NYXRjaGVzIj5ObyBNYXRjaGVzPC9kaXY+CiA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvc2VhcmNoL2NsYXNzZXNfNzQuanMgYi9kb2MvaHRtbC9zZWFyY2gvY2xhc3Nlc183NC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDYyM2QyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvc2VhcmNoL2NsYXNzZXNfNzQuanMKQEAgLTAsMCArMSw2IEBACit2YXIgc2VhcmNoRGF0YT0KK1sKKyAgWyd0anJlZ2lvbicsWyd0anJlZ2lvbicsWycuLi9zdHJ1Y3R0anJlZ2lvbi5odG1sJywxLCcnXV1dLAorICBbJ3Rqc2NhbGluZ2ZhY3RvcicsWyd0anNjYWxpbmdmYWN0b3InLFsnLi4vc3RydWN0dGpzY2FsaW5nZmFjdG9yLmh0bWwnLDEsJyddXV0sCisgIFsndGp0cmFuc2Zvcm0nLFsndGp0cmFuc2Zvcm0nLFsnLi4vc3RydWN0dGp0cmFuc2Zvcm0uaHRtbCcsMSwnJ11dXQorXTsKZGlmZiAtLWdpdCBhL2RvYy9odG1sL3NlYXJjaC9lbnVtc183NC5odG1sIGIvZG9jL2h0bWwvc2VhcmNoL2VudW1zXzc0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI3NTRlZQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL3NlYXJjaC9lbnVtc183NC5odG1sCkBAIC0wLDAgKzEsMjYgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KKzxodG1sPjxoZWFkPjx0aXRsZT48L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L3hodG1sO2NoYXJzZXQ9VVRGLTgiLz4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG94eWdlbiAxLjguMy4xIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9InNlYXJjaC5jc3MiLz4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImVudW1zXzc0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InNlYXJjaC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBjbGFzcz0iU1JQYWdlIj4KKzxkaXYgaWQ9IlNSSW5kZXgiPgorPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJMb2FkaW5nIj5Mb2FkaW5nLi4uPC9kaXY+Cis8ZGl2IGlkPSJTUlJlc3VsdHMiPjwvZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KK2NyZWF0ZVJlc3VsdHMoKTsKKy0tPjwvc2NyaXB0PgorPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJTZWFyY2hpbmciPlNlYXJjaGluZy4uLjwvZGl2PgorPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJOb01hdGNoZXMiPk5vIE1hdGNoZXM8L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCitkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiTG9hZGluZyIpLnN0eWxlLmRpc3BsYXk9Im5vbmUiOworZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIk5vTWF0Y2hlcyIpLnN0eWxlLmRpc3BsYXk9Im5vbmUiOwordmFyIHNlYXJjaFJlc3VsdHMgPSBuZXcgU2VhcmNoUmVzdWx0cygic2VhcmNoUmVzdWx0cyIpOworc2VhcmNoUmVzdWx0cy5TZWFyY2goKTsKKy0tPjwvc2NyaXB0PgorPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9zZWFyY2gvZW51bXNfNzQuanMgYi9kb2MvaHRtbC9zZWFyY2gvZW51bXNfNzQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBiZDRkYgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL3NlYXJjaC9lbnVtc183NC5qcwpAQCAtMCwwICsxLDYgQEAKK3ZhciBzZWFyY2hEYXRhPQorWworICBbJ3RqcGYnLFsnVEpQRicsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWM5MTYxNDRlMjZjMzgxN2FjNTE0ZTY0YWU1ZDEyZTJhJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpzYW1wJyxbJ1RKU0FNUCcsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTFkMDQ3MDYwZWE4MGJiOTgyMGQ1NDBiYjkyOGU5MDc0JywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGp4b3AnLFsnVEpYT1AnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2EyZGU1MzFhZjRlN2U2YzRmMTI0OTA4Mzc2YjM1NDg2NicsMSwndHVyYm9qcGVnLmgnXV1dCitdOwpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvc2VhcmNoL2VudW12YWx1ZXNfNzQuaHRtbCBiL2RvYy9odG1sL3NlYXJjaC9lbnVtdmFsdWVzXzc0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ2OWEwYQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL3NlYXJjaC9lbnVtdmFsdWVzXzc0Lmh0bWwKQEAgLTAsMCArMSwyNiBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgorPGh0bWw+PGhlYWQ+PHRpdGxlPjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQveGh0bWw7Y2hhcnNldD1VVEYtOCIvPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb3h5Z2VuIDEuOC4zLjEiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0ic2VhcmNoLmNzcyIvPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iZW51bXZhbHVlc183NC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJzZWFyY2guanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgY2xhc3M9IlNSUGFnZSI+Cis8ZGl2IGlkPSJTUkluZGV4Ij4KKzxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iTG9hZGluZyI+TG9hZGluZy4uLjwvZGl2PgorPGRpdiBpZD0iU1JSZXN1bHRzIj48L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCitjcmVhdGVSZXN1bHRzKCk7CistLT48L3NjcmlwdD4KKzxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iU2VhcmNoaW5nIj5TZWFyY2hpbmcuLi48L2Rpdj4KKzxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iTm9NYXRjaGVzIj5ObyBNYXRjaGVzPC9kaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQorZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkxvYWRpbmciKS5zdHlsZS5kaXNwbGF5PSJub25lIjsKK2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJOb01hdGNoZXMiKS5zdHlsZS5kaXNwbGF5PSJub25lIjsKK3ZhciBzZWFyY2hSZXN1bHRzID0gbmV3IFNlYXJjaFJlc3VsdHMoInNlYXJjaFJlc3VsdHMiKTsKK3NlYXJjaFJlc3VsdHMuU2VhcmNoKCk7CistLT48L3NjcmlwdD4KKzwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvc2VhcmNoL2VudW12YWx1ZXNfNzQuanMgYi9kb2MvaHRtbC9zZWFyY2gvZW51bXZhbHVlc183NC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTY2NGYxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvc2VhcmNoL2VudW12YWx1ZXNfNzQuanMKQEAgLTAsMCArMSwyNyBAQAordmFyIHNlYXJjaERhdGE9CitbCisgIFsndGpwZl81ZmFiZ3InLFsnVEpQRl9BQkdSJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYWM5MTYxNDRlMjZjMzgxN2FjNTE0ZTY0YWU1ZDEyZTJhYTFiYTFhN2YxNjMxZGJlYWE0OWEwYTg1ZmM0YTQwMDgxJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpwZl81ZmFyZ2InLFsnVEpQRl9BUkdCJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYWM5MTYxNDRlMjZjMzgxN2FjNTE0ZTY0YWU1ZDEyZTJhYWU4Zjg0NmVkOWQ5ZGU5OWI2ZTFkZmU0NDg4NDg3NjVjJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpwZl81ZmJncicsWydUSlBGX0JHUicsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYWFiMTA2MjQ0MzdmYjhlZjQ5NWEwYjE1M2U2NTc0OTgzOScsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqcGZfNWZiZ3JhJyxbJ1RKUEZfQkdSQScsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYWFjMDM3ZmYxODQ1Y2Y5Yjc0YmI4MWEzNjU5YzJiOWZiNCcsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqcGZfNWZiZ3J4JyxbJ1RKUEZfQkdSWCcsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYWEyYTFmYmY1NjljYTc5ODk3ZWFlODg2ZTMzNzZjYTRjOCcsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqcGZfNWZncmF5JyxbJ1RKUEZfR1JBWScsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2FjOTE2MTQ0ZTI2YzM4MTdhYzUxNGU2NGFlNWQxMmUyYWE1NDMxYjU0YjAxNTMzNzcwNWYxMzExODA3MzcxMWExYScsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqcGZfNWZyZ2InLFsnVEpQRl9SR0InLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmFhN2NlOTMyMzBiZmY0NDk1MThjZTM4N2MxN2U2ZWQzN2MnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anBmXzVmcmdiYScsWydUSlBGX1JHQkEnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmFhODhkMmU4OGZhYjY3ZjY1MDNjZjk3MmUxNDg1MWNjMTInLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anBmXzVmcmdieCcsWydUSlBGX1JHQlgnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmFhODM5NzNiZWJiN2UyZGM2ZmE4YmFlODlmZjNmNDJlMDEnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anBmXzVmeGJncicsWydUSlBGX1hCR1InLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmFhZjY2MDNiMjcxNDdkZTQ3ZTIxMmU3NWRhYzAyN2IyYWYnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anBmXzVmeHJnYicsWydUSlBGX1hSR0InLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhYzkxNjE0NGUyNmMzODE3YWM1MTRlNjRhZTVkMTJlMmFhZGFlOTk2OTA1ZWZjZmEzYjQyYTBiYjNiZWE3ZjlkODQnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anNhbXBfNWY0MjAnLFsnVEpTQU1QXzQyMCcsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2ExZDA0NzA2MGVhODBiYjk4MjBkNTQwYmI5MjhlOTA3NGE2MzA4NWRiZjY4M2NmZTM5ZTUxM2NkYjYzNDNlMzczNycsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3Rqc2FtcF81ZjQyMicsWydUSlNBTVBfNDIyJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYTFkMDQ3MDYwZWE4MGJiOTgyMGQ1NDBiYjkyOGU5MDc0YTEzNjEzMDkwMmNjNTc4ZjExZjMyNDI5YjU5MzY4NDA0JywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpzYW1wXzVmNDQwJyxbJ1RKU0FNUF80NDAnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhMWQwNDcwNjBlYTgwYmI5ODIwZDU0MGJiOTI4ZTkwNzRhY2NmNzQwZTZmM2FhNmJhMjBiYTkyMmNhZDEzY2I5NzQnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anNhbXBfNWY0NDQnLFsnVEpTQU1QXzQ0NCcsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnZ2ExZDA0NzA2MGVhODBiYjk4MjBkNTQwYmI5MjhlOTA3NGFmYjhkYTRmNDQxOTc4MzdiZGVjMGE0ZjU5M2RhY2FlMycsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3Rqc2FtcF81ZmdyYXknLFsnVEpTQU1QX0dSQVknLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhMWQwNDcwNjBlYTgwYmI5ODIwZDU0MGJiOTI4ZTkwNzRhM2YxYzk1MDQ4NDJkZGM3YTQ4ZDBmNjkwNzU0YjYyNDgnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anhvcF81ZmhmbGlwJyxbJ1RKWE9QX0hGTElQJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYTJkZTUzMWFmNGU3ZTZjNGYxMjQ5MDgzNzZiMzU0ODY2YWEwZGY2OTc3NmNhYTMwZjBmYTI4ZTI2MzMyZDMxMWNlJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGp4b3BfNWZub25lJyxbJ1RKWE9QX05PTkUnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhMmRlNTMxYWY0ZTdlNmM0ZjEyNDkwODM3NmIzNTQ4NjZhYWQ4OGMwMzY2Y2QzZjdkMGVhYzlkN2EzZmExYzJjMjcnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anhvcF81ZnJvdDE4MCcsWydUSlhPUF9ST1QxODAnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhMmRlNTMxYWY0ZTdlNmM0ZjEyNDkwODM3NmIzNTQ4NjZhMTQwOTUyZWI4ZGQwMzAwYWNjZmNjMjI3MjZkNjk2OTInLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anhvcF81ZnJvdDI3MCcsWydUSlhPUF9ST1QyNzAnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhMmRlNTMxYWY0ZTdlNmM0ZjEyNDkwODM3NmIzNTQ4NjZhMzA2NGVlNWRmYjdmMDMyZGYzMzI4MTg1ODc1NjdhMDgnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anhvcF81ZnJvdDkwJyxbJ1RKWE9QX1JPVDkwJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYTJkZTUzMWFmNGU3ZTZjNGYxMjQ5MDgzNzZiMzU0ODY2YTQzYjJiYmIyM2JjNGJkNTQ4NDIyZDQzZmJlOWFmMTI4JywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGp4b3BfNWZ0cmFuc3Bvc2UnLFsnVEpYT1BfVFJBTlNQT1NFJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYTJkZTUzMWFmNGU3ZTZjNGYxMjQ5MDgzNzZiMzU0ODY2YTMxMDYwYWVkMTk5Zjg4NmFmZGQ0MTdmODA0OTljMzJkJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGp4b3BfNWZ0cmFuc3ZlcnNlJyxbJ1RKWE9QX1RSQU5TVkVSU0UnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2dhMmRlNTMxYWY0ZTdlNmM0ZjEyNDkwODM3NmIzNTQ4NjZhZjNiMTRkNDg4YWVhNmVjZTllNWIzZGY3M2E3NGQ2YTQnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anhvcF81ZnZmbGlwJyxbJ1RKWE9QX1ZGTElQJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dnYTJkZTUzMWFmNGU3ZTZjNGYxMjQ5MDgzNzZiMzU0ODY2YTMyNGVkZGZiZWM1M2I3ZTY5MWY2MWU1NjkyOWQwZDVkJywxLCd0dXJib2pwZWcuaCddXV0KK107CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9zZWFyY2gvZnVuY3Rpb25zXzc0Lmh0bWwgYi9kb2MvaHRtbC9zZWFyY2gvZnVuY3Rpb25zXzc0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYwNTkwMQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL3NlYXJjaC9mdW5jdGlvbnNfNzQuaHRtbApAQCAtMCwwICsxLDI2IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Cis8aHRtbD48aGVhZD48dGl0bGU+PC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC94aHRtbDtjaGFyc2V0PVVURi04Ii8+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRveHlnZW4gMS44LjMuMSI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJzZWFyY2guY3NzIi8+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJmdW5jdGlvbnNfNzQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ic2VhcmNoLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IGNsYXNzPSJTUlBhZ2UiPgorPGRpdiBpZD0iU1JJbmRleCI+Cis8ZGl2IGNsYXNzPSJTUlN0YXR1cyIgaWQ9IkxvYWRpbmciPkxvYWRpbmcuLi48L2Rpdj4KKzxkaXYgaWQ9IlNSUmVzdWx0cyI+PC9kaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQorY3JlYXRlUmVzdWx0cygpOworLS0+PC9zY3JpcHQ+Cis8ZGl2IGNsYXNzPSJTUlN0YXR1cyIgaWQ9IlNlYXJjaGluZyI+U2VhcmNoaW5nLi4uPC9kaXY+Cis8ZGl2IGNsYXNzPSJTUlN0YXR1cyIgaWQ9Ik5vTWF0Y2hlcyI+Tm8gTWF0Y2hlczwvZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KK2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJMb2FkaW5nIikuc3R5bGUuZGlzcGxheT0ibm9uZSI7Citkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiTm9NYXRjaGVzIikuc3R5bGUuZGlzcGxheT0ibm9uZSI7Cit2YXIgc2VhcmNoUmVzdWx0cyA9IG5ldyBTZWFyY2hSZXN1bHRzKCJzZWFyY2hSZXN1bHRzIik7CitzZWFyY2hSZXN1bHRzLlNlYXJjaCgpOworLS0+PC9zY3JpcHQ+Cis8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL3NlYXJjaC9mdW5jdGlvbnNfNzQuanMgYi9kb2MvaHRtbC9zZWFyY2gvZnVuY3Rpb25zXzc0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3NDZhOTEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9zZWFyY2gvZnVuY3Rpb25zXzc0LmpzCkBAIC0wLDAgKzEsMTkgQEAKK3ZhciBzZWFyY2hEYXRhPQorWworICBbJ3RqYWxsb2MnLFsndGpBbGxvYycsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTVjOTIzNGJkYTZkOTkzY2RhZmZkZDg5YmY4MWEwMGZmJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpidWZzaXplJyxbJ3RqQnVmU2l6ZScsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWNjYzViY2E3ZjEyZmNkY2MzMDJlNmUxYzZkNGIzMTFiJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpidWZzaXpleXV2JyxbJ3RqQnVmU2l6ZVlVVicsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTlkMGNiMDZmZDUwNTJkMjFiNmYyYjM4MmRiOGIyMTljJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpjb21wcmVzczInLFsndGpDb21wcmVzczInLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FiYTYyYjdhOThmOTYwODM5YjU4ODU3OTg5ODQ5NWNmMicsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqZGVjb21wcmVzczInLFsndGpEZWNvbXByZXNzMicsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWRhNjljYzY0NDNkMWJiNDkzYjQwZjE2MjYyNTllNWU5JywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpkZWNvbXByZXNzaGVhZGVyMicsWyd0akRlY29tcHJlc3NIZWFkZXIyJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhYzU2NzVmY2ViNzk5N2IzODU1MTZjZGZmZGIzNGU2YWEnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0amRlY29tcHJlc3N0b3l1dicsWyd0akRlY29tcHJlc3NUb1lVVicsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWQ3ODEwYWYwOTU2MjRhNDAxNmU3Mjk1N2E1MGY3N2Q4JywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpkZXN0cm95JyxbJ3RqRGVzdHJveScsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTY3NGFkZWU5MTdiOTVhZDRhODk2ZjFiYTM5ZTEyNTQwJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGplbmNvZGV5dXYyJyxbJ3RqRW5jb2RlWVVWMicsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTBmYTRlN2IxOTQzNjg3YzZhMGMwMzA0NTI5YzU1ZDM1JywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpmcmVlJyxbJ3RqRnJlZScsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYThjNGExMjMxZGMwNmE0NTA1MTRjODM1ZjY0NzFmMTM3JywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpnZXRlcnJvcnN0cicsWyd0akdldEVycm9yU3RyJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhOWFmNzljOTA4ZWMxMzFiMWFlOGQ1MmZlNDAzNzVhYmYnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0amdldHNjYWxpbmdmYWN0b3JzJyxbJ3RqR2V0U2NhbGluZ0ZhY3RvcnMnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E2NDQ5MDQ0YjlhZjQwMjk5OWNjZjUyZjQwMTMzM2JlOCcsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqaW5pdGNvbXByZXNzJyxbJ3RqSW5pdENvbXByZXNzJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhM2QxMGM0N2ZiZTRhMjQ4OWEyYjMwYzkzMTU1MWQwMWEnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0amluaXRkZWNvbXByZXNzJyxbJ3RqSW5pdERlY29tcHJlc3MnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FlNTQwODE3OWQwNDFlMmEyZjcxOTljODI4M2NmNjQ5ZScsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqaW5pdHRyYW5zZm9ybScsWyd0akluaXRUcmFuc2Zvcm0nLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2EzMTU1Yjc3NWJmYmFjOWRiYmE4NjliOTVhMDM2NzkwMicsMSwndHVyYm9qcGVnLmgnXV1dLAorICBbJ3RqdHJhbnNmb3JtJyxbJ3RqVHJhbnNmb3JtJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhZTQwMzE5M2NlYjRhYWZiN2UwZjU2YWI1ODdiNDg2MTYnLDEsJ3R1cmJvanBlZy5oJ11dXQorXTsKZGlmZiAtLWdpdCBhL2RvYy9odG1sL3NlYXJjaC9ncm91cHNfNzQuaHRtbCBiL2RvYy9odG1sL3NlYXJjaC9ncm91cHNfNzQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTY5NTYwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvc2VhcmNoL2dyb3Vwc183NC5odG1sCkBAIC0wLDAgKzEsMjYgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KKzxodG1sPjxoZWFkPjx0aXRsZT48L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L3hodG1sO2NoYXJzZXQ9VVRGLTgiLz4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG94eWdlbiAxLjguMy4xIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9InNlYXJjaC5jc3MiLz4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imdyb3Vwc183NC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJzZWFyY2guanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgY2xhc3M9IlNSUGFnZSI+Cis8ZGl2IGlkPSJTUkluZGV4Ij4KKzxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iTG9hZGluZyI+TG9hZGluZy4uLjwvZGl2PgorPGRpdiBpZD0iU1JSZXN1bHRzIj48L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCitjcmVhdGVSZXN1bHRzKCk7CistLT48L3NjcmlwdD4KKzxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iU2VhcmNoaW5nIj5TZWFyY2hpbmcuLi48L2Rpdj4KKzxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iTm9NYXRjaGVzIj5ObyBNYXRjaGVzPC9kaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQorZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkxvYWRpbmciKS5zdHlsZS5kaXNwbGF5PSJub25lIjsKK2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJOb01hdGNoZXMiKS5zdHlsZS5kaXNwbGF5PSJub25lIjsKK3ZhciBzZWFyY2hSZXN1bHRzID0gbmV3IFNlYXJjaFJlc3VsdHMoInNlYXJjaFJlc3VsdHMiKTsKK3NlYXJjaFJlc3VsdHMuU2VhcmNoKCk7CistLT48L3NjcmlwdD4KKzwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvc2VhcmNoL2dyb3Vwc183NC5qcyBiL2RvYy9odG1sL3NlYXJjaC9ncm91cHNfNzQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdkNGZmYgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL3NlYXJjaC9ncm91cHNfNzQuanMKQEAgLTAsMCArMSw0IEBACit2YXIgc2VhcmNoRGF0YT0KK1sKKyAgWyd0dXJib2pwZWcnLFsnVHVyYm9KUEVHJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sJywxLCcnXV1dCitdOwpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvc2VhcmNoL3NlYXJjaC5jc3MgYi9kb2MvaHRtbC9zZWFyY2gvc2VhcmNoLmNzcwppbmRleCA1MDI0OWU1Li41YjIwOGVkIDEwMDY0NAotLS0gYS9kb2MvaHRtbC9zZWFyY2gvc2VhcmNoLmNzcworKysgYi9kb2MvaHRtbC9zZWFyY2gvc2VhcmNoLmNzcwpAQCAtNCwxMyArNCw2IEBACiAgICAgZmxvYXQ6IGxlZnQ7CiB9CiAKLSNzZWFyY2hsaSB7Ci0gICAgZmxvYXQ6IHJpZ2h0OwotICAgIGRpc3BsYXk6IGJsb2NrOwotICAgIHdpZHRoOiAxNzBweDsKLSAgICBoZWlnaHQ6IDM2cHg7Ci19Ci0KICNNU2VhcmNoQm94IHsKICAgICB3aGl0ZS1zcGFjZSA6IG5vd3JhcDsKICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CkBAIC0yMCw2ICsxMyw3IEBACiAgICAgcmlnaHQ6IDBweDsKICAgICB3aWR0aDogMTcwcHg7CiAgICAgei1pbmRleDogMTAyOworICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOwogfQogCiAjTVNlYXJjaEJveCAubGVmdApAQCAtMjI0LDYgKzIxOCwxMCBAQAogICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogfQogCitzcGFuLlNSU2NvcGUgeworICAgIHBhZGRpbmctbGVmdDogNHB4OworfQorCiAuU1JQYWdlIC5TUlN0YXR1cyB7CiAgICAgcGFkZGluZzogMnB4IDVweDsKICAgICBmb250LXNpemU6IDhwdDsKQEAgLTIzOCwzICsyMzYsMzYgQEAKICAgICBtYXJnaW4tbGVmdDogMTBweDsKICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7CiB9CisKKy8qLS0tLS0tLS0tLS0tLS0tLSBFeHRlcm5hbCBzZWFyY2ggcGFnZSByZXN1bHRzICovCisKKy5zZWFyY2hyZXN1bHQgeworICAgIGJhY2tncm91bmQtY29sb3I6ICNGMEYzRjg7Cit9CisKKy5wYWdlcyBiIHsKKyAgIGNvbG9yOiB3aGl0ZTsKKyAgIHBhZGRpbmc6IDVweCA1cHggM3B4IDVweDsKKyAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiLi4vdGFiX2EucG5nIik7CisgICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7CisgICB0ZXh0LXNoYWRvdzogMCAxcHggMXB4ICMwMDAwMDA7Cit9CisKKy5wYWdlcyB7CisgICAgbGluZS1oZWlnaHQ6IDE3cHg7CisgICAgbWFyZ2luLWxlZnQ6IDRweDsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cit9CisKKy5obCB7CisgICAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKyNzZWFyY2hyZXN1bHRzIHsKKyAgICBtYXJnaW4tYm90dG9tOiAyMHB4OworfQorCisuc2VhcmNocGFnZXMgeworICAgIG1hcmdpbi10b3A6IDEwcHg7Cit9CisKZGlmZiAtLWdpdCBhL2RvYy9odG1sL3NlYXJjaC9zZWFyY2guanMgYi9kb2MvaHRtbC9zZWFyY2gvc2VhcmNoLmpzCmluZGV4IDBhOWMzNTYuLjQwOTY3MmMgMTAwNjQ0Ci0tLSBhL2RvYy9odG1sL3NlYXJjaC9zZWFyY2guanMKKysrIGIvZG9jL2h0bWwvc2VhcmNoL3NlYXJjaC5qcwpAQCAtOSwxNCArOSwyNCBAQAogewogICAwOiAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEwMDAxMDAwMDAxMTAwMTAxMDAxMTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsCiAgIDE6ICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwKLSAgMjogIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExMDAwMTAwMDAwMTEwMDEwMDAwMTExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiCisgIDI6ICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwKKyAgMzogIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExMDAwMTAwMDAwMTEwMDEwMTAwMTExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLAorICA0OiAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsCisgIDU6ICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwKKyAgNjogIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLAorICA3OiAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIKIH07CiAKIHZhciBpbmRleFNlY3Rpb25OYW1lcyA9CiB7CiAgIDA6ICJhbGwiLAogICAxOiAiY2xhc3NlcyIsCi0gIDI6ICJ2YXJpYWJsZXMiCisgIDI6ICJmdW5jdGlvbnMiLAorICAzOiAidmFyaWFibGVzIiwKKyAgNDogInR5cGVkZWZzIiwKKyAgNTogImVudW1zIiwKKyAgNjogImVudW12YWx1ZXMiLAorICA3OiAiZ3JvdXBzIgogfTsKIAogZnVuY3Rpb24gY29udmVydFRvSWQoc2VhcmNoKQpAQCAtMjYxLDcgKzI3MSw3IEBACiAgICAgICAgIHZhciBub2RlID0gY2hpbGQuZmlyc3RDaGlsZDsKICAgICAgICAgaWYgKGo9PWlkKQogICAgICAgICB7Ci0gICAgICAgICAgbm9kZS5pbm5lckhUTUw9JyZidWxsOyc7CisgICAgICAgICAgbm9kZS5pbm5lckhUTUw9JyYjODIyNjsnOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewpAQCAtMzU4LDcgKzM2OCw3IEBACiAgICAgICAgaGFzUmVzdWx0c1BhZ2UgPSBmYWxzZTsKICAgICB9CiAKLSAgICB3aW5kb3cuZnJhbWVzLk1TZWFyY2hSZXN1bHRzLmxvY2F0aW9uLmhyZWYgPSByZXN1bHRzUGFnZVdpdGhTZWFyY2g7ICAKKyAgICB3aW5kb3cuZnJhbWVzLk1TZWFyY2hSZXN1bHRzLmxvY2F0aW9uID0gcmVzdWx0c1BhZ2VXaXRoU2VhcmNoOyAgCiAgICAgdmFyIGRvbVBvcHVwU2VhcmNoUmVzdWx0c1dpbmRvdyA9IHRoaXMuRE9NUG9wdXBTZWFyY2hSZXN1bHRzV2luZG93KCk7CiAKICAgICBpZiAoZG9tUG9wdXBTZWFyY2hSZXN1bHRzV2luZG93LnN0eWxlLmRpc3BsYXkhPSdibG9jaycpCkBAIC03MjgsMyArNzM4LDcyIEBACiAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogfQorCitmdW5jdGlvbiBzZXRLZXlBY3Rpb25zKGVsZW0sYWN0aW9uKQoreworICBlbGVtLnNldEF0dHJpYnV0ZSgnb25rZXlkb3duJyxhY3Rpb24pOworICBlbGVtLnNldEF0dHJpYnV0ZSgnb25rZXlwcmVzcycsYWN0aW9uKTsKKyAgZWxlbS5zZXRBdHRyaWJ1dGUoJ29ua2V5dXAnLGFjdGlvbik7Cit9CisKK2Z1bmN0aW9uIHNldENsYXNzQXR0cihlbGVtLGF0dHIpCit7CisgIGVsZW0uc2V0QXR0cmlidXRlKCdjbGFzcycsYXR0cik7CisgIGVsZW0uc2V0QXR0cmlidXRlKCdjbGFzc05hbWUnLGF0dHIpOworfQorCitmdW5jdGlvbiBjcmVhdGVSZXN1bHRzKCkKK3sKKyAgdmFyIHJlc3VsdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiU1JSZXN1bHRzIik7CisgIGZvciAodmFyIGU9MDsgZTxzZWFyY2hEYXRhLmxlbmd0aDsgZSsrKQorICB7CisgICAgdmFyIGlkID0gc2VhcmNoRGF0YVtlXVswXTsKKyAgICB2YXIgc3JSZXN1bHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICBzclJlc3VsdC5zZXRBdHRyaWJ1dGUoJ2lkJywnU1JfJytpZCk7CisgICAgc2V0Q2xhc3NBdHRyKHNyUmVzdWx0LCdTUlJlc3VsdCcpOworICAgIHZhciBzckVudHJ5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgc2V0Q2xhc3NBdHRyKHNyRW50cnksJ1NSRW50cnknKTsKKyAgICB2YXIgc3JMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpOworICAgIHNyTGluay5zZXRBdHRyaWJ1dGUoJ2lkJywnSXRlbScrZSk7CisgICAgc2V0S2V5QWN0aW9ucyhzckxpbmssJ3JldHVybiBzZWFyY2hSZXN1bHRzLk5hdihldmVudCwnK2UrJyknKTsKKyAgICBzZXRDbGFzc0F0dHIoc3JMaW5rLCdTUlN5bWJvbCcpOworICAgIHNyTGluay5pbm5lckhUTUwgPSBzZWFyY2hEYXRhW2VdWzFdWzBdOworICAgIHNyRW50cnkuYXBwZW5kQ2hpbGQoc3JMaW5rKTsKKyAgICBpZiAoc2VhcmNoRGF0YVtlXVsxXS5sZW5ndGg9PTIpIC8vIHNpbmdsZSByZXN1bHQKKyAgICB7CisgICAgICBzckxpbmsuc2V0QXR0cmlidXRlKCdocmVmJyxzZWFyY2hEYXRhW2VdWzFdWzFdWzBdKTsKKyAgICAgIGlmIChzZWFyY2hEYXRhW2VdWzFdWzFdWzFdKQorICAgICAgeworICAgICAgIHNyTGluay5zZXRBdHRyaWJ1dGUoJ3RhcmdldCcsJ19wYXJlbnQnKTsKKyAgICAgIH0KKyAgICAgIHZhciBzclNjb3BlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOworICAgICAgc2V0Q2xhc3NBdHRyKHNyU2NvcGUsJ1NSU2NvcGUnKTsKKyAgICAgIHNyU2NvcGUuaW5uZXJIVE1MID0gc2VhcmNoRGF0YVtlXVsxXVsxXVsyXTsKKyAgICAgIHNyRW50cnkuYXBwZW5kQ2hpbGQoc3JTY29wZSk7CisgICAgfQorICAgIGVsc2UgLy8gbXVsdGlwbGUgcmVzdWx0cworICAgIHsKKyAgICAgIHNyTGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCdqYXZhc2NyaXB0OnNlYXJjaFJlc3VsdHMuVG9nZ2xlKCJTUl8nK2lkKyciKScpOworICAgICAgdmFyIHNyQ2hpbGRyZW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgIHNldENsYXNzQXR0cihzckNoaWxkcmVuLCdTUkNoaWxkcmVuJyk7CisgICAgICBmb3IgKHZhciBjPTA7IGM8c2VhcmNoRGF0YVtlXVsxXS5sZW5ndGgtMTsgYysrKQorICAgICAgeworICAgICAgICB2YXIgc3JDaGlsZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTsKKyAgICAgICAgc3JDaGlsZC5zZXRBdHRyaWJ1dGUoJ2lkJywnSXRlbScrZSsnX2MnK2MpOworICAgICAgICBzZXRLZXlBY3Rpb25zKHNyQ2hpbGQsJ3JldHVybiBzZWFyY2hSZXN1bHRzLk5hdkNoaWxkKGV2ZW50LCcrZSsnLCcrYysnKScpOworICAgICAgICBzZXRDbGFzc0F0dHIoc3JDaGlsZCwnU1JTY29wZScpOworICAgICAgICBzckNoaWxkLnNldEF0dHJpYnV0ZSgnaHJlZicsc2VhcmNoRGF0YVtlXVsxXVtjKzFdWzBdKTsKKyAgICAgICAgaWYgKHNlYXJjaERhdGFbZV1bMV1bYysxXVsxXSkKKyAgICAgICAgeworICAgICAgICAgc3JDaGlsZC5zZXRBdHRyaWJ1dGUoJ3RhcmdldCcsJ19wYXJlbnQnKTsKKyAgICAgICAgfQorICAgICAgICBzckNoaWxkLmlubmVySFRNTCA9IHNlYXJjaERhdGFbZV1bMV1bYysxXVsyXTsKKyAgICAgICAgc3JDaGlsZHJlbi5hcHBlbmRDaGlsZChzckNoaWxkKTsKKyAgICAgIH0KKyAgICAgIHNyRW50cnkuYXBwZW5kQ2hpbGQoc3JDaGlsZHJlbik7CisgICAgfQorICAgIHNyUmVzdWx0LmFwcGVuZENoaWxkKHNyRW50cnkpOworICAgIHJlc3VsdHMuYXBwZW5kQ2hpbGQoc3JSZXN1bHQpOworICB9Cit9CisKZGlmZiAtLWdpdCBhL2RvYy9odG1sL3NlYXJjaC90eXBlZGVmc183NC5odG1sIGIvZG9jL2h0bWwvc2VhcmNoL3R5cGVkZWZzXzc0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJmNmQyYQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL3NlYXJjaC90eXBlZGVmc183NC5odG1sCkBAIC0wLDAgKzEsMjYgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KKzxodG1sPjxoZWFkPjx0aXRsZT48L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L3hodG1sO2NoYXJzZXQ9VVRGLTgiLz4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG94eWdlbiAxLjguMy4xIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9InNlYXJjaC5jc3MiLz4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InR5cGVkZWZzXzc0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InNlYXJjaC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBjbGFzcz0iU1JQYWdlIj4KKzxkaXYgaWQ9IlNSSW5kZXgiPgorPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJMb2FkaW5nIj5Mb2FkaW5nLi4uPC9kaXY+Cis8ZGl2IGlkPSJTUlJlc3VsdHMiPjwvZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KK2NyZWF0ZVJlc3VsdHMoKTsKKy0tPjwvc2NyaXB0PgorPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJTZWFyY2hpbmciPlNlYXJjaGluZy4uLjwvZGl2PgorPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJOb01hdGNoZXMiPk5vIE1hdGNoZXM8L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCitkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiTG9hZGluZyIpLnN0eWxlLmRpc3BsYXk9Im5vbmUiOworZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIk5vTWF0Y2hlcyIpLnN0eWxlLmRpc3BsYXk9Im5vbmUiOwordmFyIHNlYXJjaFJlc3VsdHMgPSBuZXcgU2VhcmNoUmVzdWx0cygic2VhcmNoUmVzdWx0cyIpOworc2VhcmNoUmVzdWx0cy5TZWFyY2goKTsKKy0tPjwvc2NyaXB0PgorPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9zZWFyY2gvdHlwZWRlZnNfNzQuanMgYi9kb2MvaHRtbC9zZWFyY2gvdHlwZWRlZnNfNzQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODViMDBmNQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL3NlYXJjaC90eXBlZGVmc183NC5qcwpAQCAtMCwwICsxLDUgQEAKK3ZhciBzZWFyY2hEYXRhPQorWworICBbJ3RqaGFuZGxlJyxbJ3RqaGFuZGxlJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhNzU4ZDI2MzRlY2I0OTQ5ZGU3ODE1Y2JhNjIxZjU3NjMnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anRyYW5zZm9ybScsWyd0anRyYW5zZm9ybScsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWEyOWYzMTg5YzQxYmUxMmVjNWRlZTdjYWVjMzE4YTMxJywxLCd0dXJib2pwZWcuaCddXV0KK107CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9zZWFyY2gvdmFyaWFibGVzXzYzLmh0bWwgYi9kb2MvaHRtbC9zZWFyY2gvdmFyaWFibGVzXzYzLmh0bWwKaW5kZXggOGNmYzM4Zi4uNDIyMDg1YyAxMDA2NDQKLS0tIGEvZG9jL2h0bWwvc2VhcmNoL3ZhcmlhYmxlc182My5odG1sCisrKyBiL2RvYy9odG1sL3NlYXJjaC92YXJpYWJsZXNfNjMuaHRtbApAQCAtMSwxOCArMSwxOCBAQAogPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgogPGh0bWw+PGhlYWQ+PHRpdGxlPjwvdGl0bGU+CiA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQveGh0bWw7Y2hhcnNldD1VVEYtOCIvPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb3h5Z2VuIDEuOC4zLjEiPgogPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0ic2VhcmNoLmNzcyIvPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0idmFyaWFibGVzXzYzLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InNlYXJjaC5qcyI+PC9zY3JpcHQ+CiA8L2hlYWQ+CiA8Ym9keSBjbGFzcz0iU1JQYWdlIj4KIDxkaXYgaWQ9IlNSSW5kZXgiPgogPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJMb2FkaW5nIj5Mb2FkaW5nLi4uPC9kaXY+Ci08ZGl2IGNsYXNzPSJTUlJlc3VsdCIgaWQ9IlNSX2N1c3RvbWZpbHRlciI+Ci0gPGRpdiBjbGFzcz0iU1JFbnRyeSI+Ci0gIDxhIGlkPSJJdGVtMCIgb25rZXlkb3duPSJyZXR1cm4gc2VhcmNoUmVzdWx0cy5OYXYoZXZlbnQsMCkiIG9ua2V5cHJlc3M9InJldHVybiBzZWFyY2hSZXN1bHRzLk5hdihldmVudCwwKSIgb25rZXl1cD0icmV0dXJuIHNlYXJjaFJlc3VsdHMuTmF2KGV2ZW50LDApIiBjbGFzcz0iU1JTeW1ib2wiIGhyZWY9Ii4uL3N0cnVjdHRqdHJhbnNmb3JtLmh0bWwjYTQzZWUxYmNkZDJhOGQ3MjQ5YTc1Njc3NGY3ODc5M2MxIiB0YXJnZXQ9Il9wYXJlbnQiPmN1c3RvbUZpbHRlcjwvYT4KLSAgPHNwYW4gY2xhc3M9IlNSU2NvcGUiPnRqdHJhbnNmb3JtPC9zcGFuPgotIDwvZGl2PgotPC9kaXY+Cis8ZGl2IGlkPSJTUlJlc3VsdHMiPjwvZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KK2NyZWF0ZVJlc3VsdHMoKTsKKy0tPjwvc2NyaXB0PgogPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJTZWFyY2hpbmciPlNlYXJjaGluZy4uLjwvZGl2PgogPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJOb01hdGNoZXMiPk5vIE1hdGNoZXM8L2Rpdj4KIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCmRpZmYgLS1naXQgYS9kb2MvaHRtbC9zZWFyY2gvdmFyaWFibGVzXzYzLmpzIGIvZG9jL2h0bWwvc2VhcmNoL3ZhcmlhYmxlc182My5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjA1OGRhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvc2VhcmNoL3ZhcmlhYmxlc182My5qcwpAQCAtMCwwICsxLDQgQEAKK3ZhciBzZWFyY2hEYXRhPQorWworICBbJ2N1c3RvbWZpbHRlcicsWydjdXN0b21GaWx0ZXInLFsnLi4vc3RydWN0dGp0cmFuc2Zvcm0uaHRtbCNhNDNlZTFiY2RkMmE4ZDcyNDlhNzU2Nzc0Zjc4NzkzYzEnLDEsJ3RqdHJhbnNmb3JtJ11dXQorXTsKZGlmZiAtLWdpdCBhL2RvYy9odG1sL3NlYXJjaC92YXJpYWJsZXNfNjQuaHRtbCBiL2RvYy9odG1sL3NlYXJjaC92YXJpYWJsZXNfNjQuaHRtbAppbmRleCAyZTUzYjAyLi5kZjQ0MTRiIDEwMDY0NAotLS0gYS9kb2MvaHRtbC9zZWFyY2gvdmFyaWFibGVzXzY0Lmh0bWwKKysrIGIvZG9jL2h0bWwvc2VhcmNoL3ZhcmlhYmxlc182NC5odG1sCkBAIC0xLDI0ICsxLDE4IEBACiA8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+CiA8aHRtbD48aGVhZD48dGl0bGU+PC90aXRsZT4KIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC94aHRtbDtjaGFyc2V0PVVURi04Ii8+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRveHlnZW4gMS44LjMuMSI+CiA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJzZWFyY2guY3NzIi8+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJ2YXJpYWJsZXNfNjQuanMiPjwvc2NyaXB0PgogPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ic2VhcmNoLmpzIj48L3NjcmlwdD4KIDwvaGVhZD4KIDxib2R5IGNsYXNzPSJTUlBhZ2UiPgogPGRpdiBpZD0iU1JJbmRleCI+CiA8ZGl2IGNsYXNzPSJTUlN0YXR1cyIgaWQ9IkxvYWRpbmciPkxvYWRpbmcuLi48L2Rpdj4KLTxkaXYgY2xhc3M9IlNSUmVzdWx0IiBpZD0iU1JfZGF0YSI+Ci0gPGRpdiBjbGFzcz0iU1JFbnRyeSI+Ci0gIDxhIGlkPSJJdGVtMCIgb25rZXlkb3duPSJyZXR1cm4gc2VhcmNoUmVzdWx0cy5OYXYoZXZlbnQsMCkiIG9ua2V5cHJlc3M9InJldHVybiBzZWFyY2hSZXN1bHRzLk5hdihldmVudCwwKSIgb25rZXl1cD0icmV0dXJuIHNlYXJjaFJlc3VsdHMuTmF2KGV2ZW50LDApIiBjbGFzcz0iU1JTeW1ib2wiIGhyZWY9Ii4uL3N0cnVjdHRqdHJhbnNmb3JtLmh0bWwjYTY4OGZlOGYxYThlY2MxMmE1MzhkOWU1NjFjZjMzOGUzIiB0YXJnZXQ9Il9wYXJlbnQiPmRhdGE8L2E+Ci0gIDxzcGFuIGNsYXNzPSJTUlNjb3BlIj50anRyYW5zZm9ybTwvc3Bhbj4KLSA8L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iU1JSZXN1bHQiIGlkPSJTUl9kZW5vbSI+Ci0gPGRpdiBjbGFzcz0iU1JFbnRyeSI+Ci0gIDxhIGlkPSJJdGVtMSIgb25rZXlkb3duPSJyZXR1cm4gc2VhcmNoUmVzdWx0cy5OYXYoZXZlbnQsMSkiIG9ua2V5cHJlc3M9InJldHVybiBzZWFyY2hSZXN1bHRzLk5hdihldmVudCwxKSIgb25rZXl1cD0icmV0dXJuIHNlYXJjaFJlc3VsdHMuTmF2KGV2ZW50LDEpIiBjbGFzcz0iU1JTeW1ib2wiIGhyZWY9Ii4uL3N0cnVjdHRqc2NhbGluZ2ZhY3Rvci5odG1sI2FlZmJjZGYzZTllNjIyNzRiMmQzMTJjNjk1ZjEzM2NlMyIgdGFyZ2V0PSJfcGFyZW50Ij5kZW5vbTwvYT4KLSAgPHNwYW4gY2xhc3M9IlNSU2NvcGUiPnRqc2NhbGluZ2ZhY3Rvcjwvc3Bhbj4KLSA8L2Rpdj4KLTwvZGl2PgorPGRpdiBpZD0iU1JSZXN1bHRzIj48L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCitjcmVhdGVSZXN1bHRzKCk7CistLT48L3NjcmlwdD4KIDxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iU2VhcmNoaW5nIj5TZWFyY2hpbmcuLi48L2Rpdj4KIDxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iTm9NYXRjaGVzIj5ObyBNYXRjaGVzPC9kaXY+CiA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvc2VhcmNoL3ZhcmlhYmxlc182NC5qcyBiL2RvYy9odG1sL3NlYXJjaC92YXJpYWJsZXNfNjQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE5YTA1MAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL3NlYXJjaC92YXJpYWJsZXNfNjQuanMKQEAgLTAsMCArMSw1IEBACit2YXIgc2VhcmNoRGF0YT0KK1sKKyAgWydkYXRhJyxbJ2RhdGEnLFsnLi4vc3RydWN0dGp0cmFuc2Zvcm0uaHRtbCNhNjg4ZmU4ZjFhOGVjYzEyYTUzOGQ5ZTU2MWNmMzM4ZTMnLDEsJ3RqdHJhbnNmb3JtJ11dXSwKKyAgWydkZW5vbScsWydkZW5vbScsWycuLi9zdHJ1Y3R0anNjYWxpbmdmYWN0b3IuaHRtbCNhZWZiY2RmM2U5ZTYyMjc0YjJkMzEyYzY5NWYxMzNjZTMnLDEsJ3Rqc2NhbGluZ2ZhY3RvciddXV0KK107CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9zZWFyY2gvdmFyaWFibGVzXzY4Lmh0bWwgYi9kb2MvaHRtbC9zZWFyY2gvdmFyaWFibGVzXzY4Lmh0bWwKaW5kZXggY2NiNjcxZC4uMmYwYTg2MiAxMDA2NDQKLS0tIGEvZG9jL2h0bWwvc2VhcmNoL3ZhcmlhYmxlc182OC5odG1sCisrKyBiL2RvYy9odG1sL3NlYXJjaC92YXJpYWJsZXNfNjguaHRtbApAQCAtMSwxOCArMSwxOCBAQAogPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgogPGh0bWw+PGhlYWQ+PHRpdGxlPjwvdGl0bGU+CiA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQveGh0bWw7Y2hhcnNldD1VVEYtOCIvPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb3h5Z2VuIDEuOC4zLjEiPgogPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0ic2VhcmNoLmNzcyIvPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0idmFyaWFibGVzXzY4LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InNlYXJjaC5qcyI+PC9zY3JpcHQ+CiA8L2hlYWQ+CiA8Ym9keSBjbGFzcz0iU1JQYWdlIj4KIDxkaXYgaWQ9IlNSSW5kZXgiPgogPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJMb2FkaW5nIj5Mb2FkaW5nLi4uPC9kaXY+Ci08ZGl2IGNsYXNzPSJTUlJlc3VsdCIgaWQ9IlNSX2giPgotIDxkaXYgY2xhc3M9IlNSRW50cnkiPgotICA8YSBpZD0iSXRlbTAiIG9ua2V5ZG93bj0icmV0dXJuIHNlYXJjaFJlc3VsdHMuTmF2KGV2ZW50LDApIiBvbmtleXByZXNzPSJyZXR1cm4gc2VhcmNoUmVzdWx0cy5OYXYoZXZlbnQsMCkiIG9ua2V5dXA9InJldHVybiBzZWFyY2hSZXN1bHRzLk5hdihldmVudCwwKSIgY2xhc3M9IlNSU3ltYm9sIiBocmVmPSIuLi9zdHJ1Y3R0anJlZ2lvbi5odG1sI2FlY2VmYzQ1YTI2ZjRkOGI2MGRkNGQ4MjVjMTcxMDExNSIgdGFyZ2V0PSJfcGFyZW50Ij5oPC9hPgotICA8c3BhbiBjbGFzcz0iU1JTY29wZSI+dGpyZWdpb248L3NwYW4+Ci0gPC9kaXY+Ci08L2Rpdj4KKzxkaXYgaWQ9IlNSUmVzdWx0cyI+PC9kaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQorY3JlYXRlUmVzdWx0cygpOworLS0+PC9zY3JpcHQ+CiA8ZGl2IGNsYXNzPSJTUlN0YXR1cyIgaWQ9IlNlYXJjaGluZyI+U2VhcmNoaW5nLi4uPC9kaXY+CiA8ZGl2IGNsYXNzPSJTUlN0YXR1cyIgaWQ9Ik5vTWF0Y2hlcyI+Tm8gTWF0Y2hlczwvZGl2PgogPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KZGlmZiAtLWdpdCBhL2RvYy9odG1sL3NlYXJjaC92YXJpYWJsZXNfNjguanMgYi9kb2MvaHRtbC9zZWFyY2gvdmFyaWFibGVzXzY4LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMTdlOTcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9zZWFyY2gvdmFyaWFibGVzXzY4LmpzCkBAIC0wLDAgKzEsNCBAQAordmFyIHNlYXJjaERhdGE9CitbCisgIFsnaCcsWydoJyxbJy4uL3N0cnVjdHRqcmVnaW9uLmh0bWwjYWVjZWZjNDVhMjZmNGQ4YjYwZGQ0ZDgyNWMxNzEwMTE1JywxLCd0anJlZ2lvbiddXV0KK107CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9zZWFyY2gvdmFyaWFibGVzXzZlLmh0bWwgYi9kb2MvaHRtbC9zZWFyY2gvdmFyaWFibGVzXzZlLmh0bWwKaW5kZXggYjlmNWIwNS4uMmViNGRlZiAxMDA2NDQKLS0tIGEvZG9jL2h0bWwvc2VhcmNoL3ZhcmlhYmxlc182ZS5odG1sCisrKyBiL2RvYy9odG1sL3NlYXJjaC92YXJpYWJsZXNfNmUuaHRtbApAQCAtMSwxOCArMSwxOCBAQAogPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgogPGh0bWw+PGhlYWQ+PHRpdGxlPjwvdGl0bGU+CiA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQveGh0bWw7Y2hhcnNldD1VVEYtOCIvPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb3h5Z2VuIDEuOC4zLjEiPgogPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0ic2VhcmNoLmNzcyIvPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0idmFyaWFibGVzXzZlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InNlYXJjaC5qcyI+PC9zY3JpcHQ+CiA8L2hlYWQ+CiA8Ym9keSBjbGFzcz0iU1JQYWdlIj4KIDxkaXYgaWQ9IlNSSW5kZXgiPgogPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJMb2FkaW5nIj5Mb2FkaW5nLi4uPC9kaXY+Ci08ZGl2IGNsYXNzPSJTUlJlc3VsdCIgaWQ9IlNSX251bSI+Ci0gPGRpdiBjbGFzcz0iU1JFbnRyeSI+Ci0gIDxhIGlkPSJJdGVtMCIgb25rZXlkb3duPSJyZXR1cm4gc2VhcmNoUmVzdWx0cy5OYXYoZXZlbnQsMCkiIG9ua2V5cHJlc3M9InJldHVybiBzZWFyY2hSZXN1bHRzLk5hdihldmVudCwwKSIgb25rZXl1cD0icmV0dXJuIHNlYXJjaFJlc3VsdHMuTmF2KGV2ZW50LDApIiBjbGFzcz0iU1JTeW1ib2wiIGhyZWY9Ii4uL3N0cnVjdHRqc2NhbGluZ2ZhY3Rvci5odG1sI2E5YjAxMWU1N2Y5ODFlZTIzMDgzZTJjMWFhNWU2NDBlYyIgdGFyZ2V0PSJfcGFyZW50Ij5udW08L2E+Ci0gIDxzcGFuIGNsYXNzPSJTUlNjb3BlIj50anNjYWxpbmdmYWN0b3I8L3NwYW4+Ci0gPC9kaXY+Ci08L2Rpdj4KKzxkaXYgaWQ9IlNSUmVzdWx0cyI+PC9kaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQorY3JlYXRlUmVzdWx0cygpOworLS0+PC9zY3JpcHQ+CiA8ZGl2IGNsYXNzPSJTUlN0YXR1cyIgaWQ9IlNlYXJjaGluZyI+U2VhcmNoaW5nLi4uPC9kaXY+CiA8ZGl2IGNsYXNzPSJTUlN0YXR1cyIgaWQ9Ik5vTWF0Y2hlcyI+Tm8gTWF0Y2hlczwvZGl2PgogPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KZGlmZiAtLWdpdCBhL2RvYy9odG1sL3NlYXJjaC92YXJpYWJsZXNfNmUuanMgYi9kb2MvaHRtbC9zZWFyY2gvdmFyaWFibGVzXzZlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzZmFhMTMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9zZWFyY2gvdmFyaWFibGVzXzZlLmpzCkBAIC0wLDAgKzEsNCBAQAordmFyIHNlYXJjaERhdGE9CitbCisgIFsnbnVtJyxbJ251bScsWycuLi9zdHJ1Y3R0anNjYWxpbmdmYWN0b3IuaHRtbCNhOWIwMTFlNTdmOTgxZWUyMzA4M2UyYzFhYTVlNjQwZWMnLDEsJ3Rqc2NhbGluZ2ZhY3RvciddXV0KK107CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9zZWFyY2gvdmFyaWFibGVzXzZmLmh0bWwgYi9kb2MvaHRtbC9zZWFyY2gvdmFyaWFibGVzXzZmLmh0bWwKaW5kZXggZDk1YmJlZi4uZjA2ZTJlMCAxMDA2NDQKLS0tIGEvZG9jL2h0bWwvc2VhcmNoL3ZhcmlhYmxlc182Zi5odG1sCisrKyBiL2RvYy9odG1sL3NlYXJjaC92YXJpYWJsZXNfNmYuaHRtbApAQCAtMSwyNCArMSwxOCBAQAogPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgogPGh0bWw+PGhlYWQ+PHRpdGxlPjwvdGl0bGU+CiA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQveGh0bWw7Y2hhcnNldD1VVEYtOCIvPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb3h5Z2VuIDEuOC4zLjEiPgogPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0ic2VhcmNoLmNzcyIvPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0idmFyaWFibGVzXzZmLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InNlYXJjaC5qcyI+PC9zY3JpcHQ+CiA8L2hlYWQ+CiA8Ym9keSBjbGFzcz0iU1JQYWdlIj4KIDxkaXYgaWQ9IlNSSW5kZXgiPgogPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJMb2FkaW5nIj5Mb2FkaW5nLi4uPC9kaXY+Ci08ZGl2IGNsYXNzPSJTUlJlc3VsdCIgaWQ9IlNSX29wIj4KLSA8ZGl2IGNsYXNzPSJTUkVudHJ5Ij4KLSAgPGEgaWQ9Ikl0ZW0wIiBvbmtleWRvd249InJldHVybiBzZWFyY2hSZXN1bHRzLk5hdihldmVudCwwKSIgb25rZXlwcmVzcz0icmV0dXJuIHNlYXJjaFJlc3VsdHMuTmF2KGV2ZW50LDApIiBvbmtleXVwPSJyZXR1cm4gc2VhcmNoUmVzdWx0cy5OYXYoZXZlbnQsMCkiIGNsYXNzPSJTUlN5bWJvbCIgaHJlZj0iLi4vc3RydWN0dGp0cmFuc2Zvcm0uaHRtbCNhMjUyNWFhYjRiYTY5NzhhMWMyNzNmNzRmZWY1MGU0OTgiIHRhcmdldD0iX3BhcmVudCI+b3A8L2E+Ci0gIDxzcGFuIGNsYXNzPSJTUlNjb3BlIj50anRyYW5zZm9ybTwvc3Bhbj4KLSA8L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iU1JSZXN1bHQiIGlkPSJTUl9vcHRpb25zIj4KLSA8ZGl2IGNsYXNzPSJTUkVudHJ5Ij4KLSAgPGEgaWQ9Ikl0ZW0xIiBvbmtleWRvd249InJldHVybiBzZWFyY2hSZXN1bHRzLk5hdihldmVudCwxKSIgb25rZXlwcmVzcz0icmV0dXJuIHNlYXJjaFJlc3VsdHMuTmF2KGV2ZW50LDEpIiBvbmtleXVwPSJyZXR1cm4gc2VhcmNoUmVzdWx0cy5OYXYoZXZlbnQsMSkiIGNsYXNzPSJTUlN5bWJvbCIgaHJlZj0iLi4vc3RydWN0dGp0cmFuc2Zvcm0uaHRtbCNhYzBlNzQ2NTViYWE0NDAyMjA5YTIxZTFhZTQ4MWM4ZjYiIHRhcmdldD0iX3BhcmVudCI+b3B0aW9uczwvYT4KLSAgPHNwYW4gY2xhc3M9IlNSU2NvcGUiPnRqdHJhbnNmb3JtPC9zcGFuPgotIDwvZGl2PgotPC9kaXY+Cis8ZGl2IGlkPSJTUlJlc3VsdHMiPjwvZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KK2NyZWF0ZVJlc3VsdHMoKTsKKy0tPjwvc2NyaXB0PgogPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJTZWFyY2hpbmciPlNlYXJjaGluZy4uLjwvZGl2PgogPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJOb01hdGNoZXMiPk5vIE1hdGNoZXM8L2Rpdj4KIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCmRpZmYgLS1naXQgYS9kb2MvaHRtbC9zZWFyY2gvdmFyaWFibGVzXzZmLmpzIGIvZG9jL2h0bWwvc2VhcmNoL3ZhcmlhYmxlc182Zi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2NhODMyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvc2VhcmNoL3ZhcmlhYmxlc182Zi5qcwpAQCAtMCwwICsxLDUgQEAKK3ZhciBzZWFyY2hEYXRhPQorWworICBbJ29wJyxbJ29wJyxbJy4uL3N0cnVjdHRqdHJhbnNmb3JtLmh0bWwjYTI1MjVhYWI0YmE2OTc4YTFjMjczZjc0ZmVmNTBlNDk4JywxLCd0anRyYW5zZm9ybSddXV0sCisgIFsnb3B0aW9ucycsWydvcHRpb25zJyxbJy4uL3N0cnVjdHRqdHJhbnNmb3JtLmh0bWwjYWMwZTc0NjU1YmFhNDQwMjIwOWEyMWUxYWU0ODFjOGY2JywxLCd0anRyYW5zZm9ybSddXV0KK107CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9zZWFyY2gvdmFyaWFibGVzXzcyLmh0bWwgYi9kb2MvaHRtbC9zZWFyY2gvdmFyaWFibGVzXzcyLmh0bWwKaW5kZXggNDY1ZmU4OC4uOGE0ZWU3YiAxMDA2NDQKLS0tIGEvZG9jL2h0bWwvc2VhcmNoL3ZhcmlhYmxlc183Mi5odG1sCisrKyBiL2RvYy9odG1sL3NlYXJjaC92YXJpYWJsZXNfNzIuaHRtbApAQCAtMSwxOCArMSwxOCBAQAogPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgogPGh0bWw+PGhlYWQ+PHRpdGxlPjwvdGl0bGU+CiA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQveGh0bWw7Y2hhcnNldD1VVEYtOCIvPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb3h5Z2VuIDEuOC4zLjEiPgogPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0ic2VhcmNoLmNzcyIvPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0idmFyaWFibGVzXzcyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InNlYXJjaC5qcyI+PC9zY3JpcHQ+CiA8L2hlYWQ+CiA8Ym9keSBjbGFzcz0iU1JQYWdlIj4KIDxkaXYgaWQ9IlNSSW5kZXgiPgogPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJMb2FkaW5nIj5Mb2FkaW5nLi4uPC9kaXY+Ci08ZGl2IGNsYXNzPSJTUlJlc3VsdCIgaWQ9IlNSX3IiPgotIDxkaXYgY2xhc3M9IlNSRW50cnkiPgotICA8YSBpZD0iSXRlbTAiIG9ua2V5ZG93bj0icmV0dXJuIHNlYXJjaFJlc3VsdHMuTmF2KGV2ZW50LDApIiBvbmtleXByZXNzPSJyZXR1cm4gc2VhcmNoUmVzdWx0cy5OYXYoZXZlbnQsMCkiIG9ua2V5dXA9InJldHVybiBzZWFyY2hSZXN1bHRzLk5hdihldmVudCwwKSIgY2xhc3M9IlNSU3ltYm9sIiBocmVmPSIuLi9zdHJ1Y3R0anRyYW5zZm9ybS5odG1sI2FjMzI0ZTVlNDQyYWJlYzhhOTYxZTViZjIxOWRiMTJjZiIgdGFyZ2V0PSJfcGFyZW50Ij5yPC9hPgotICA8c3BhbiBjbGFzcz0iU1JTY29wZSI+dGp0cmFuc2Zvcm08L3NwYW4+Ci0gPC9kaXY+Ci08L2Rpdj4KKzxkaXYgaWQ9IlNSUmVzdWx0cyI+PC9kaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQorY3JlYXRlUmVzdWx0cygpOworLS0+PC9zY3JpcHQ+CiA8ZGl2IGNsYXNzPSJTUlN0YXR1cyIgaWQ9IlNlYXJjaGluZyI+U2VhcmNoaW5nLi4uPC9kaXY+CiA8ZGl2IGNsYXNzPSJTUlN0YXR1cyIgaWQ9Ik5vTWF0Y2hlcyI+Tm8gTWF0Y2hlczwvZGl2PgogPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KZGlmZiAtLWdpdCBhL2RvYy9odG1sL3NlYXJjaC92YXJpYWJsZXNfNzIuanMgYi9kb2MvaHRtbC9zZWFyY2gvdmFyaWFibGVzXzcyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxY2RlMzUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9zZWFyY2gvdmFyaWFibGVzXzcyLmpzCkBAIC0wLDAgKzEsNCBAQAordmFyIHNlYXJjaERhdGE9CitbCisgIFsncicsWydyJyxbJy4uL3N0cnVjdHRqdHJhbnNmb3JtLmh0bWwjYWMzMjRlNWU0NDJhYmVjOGE5NjFlNWJmMjE5ZGIxMmNmJywxLCd0anRyYW5zZm9ybSddXV0KK107CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9zZWFyY2gvdmFyaWFibGVzXzc0Lmh0bWwgYi9kb2MvaHRtbC9zZWFyY2gvdmFyaWFibGVzXzc0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY2NWZiOAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL3NlYXJjaC92YXJpYWJsZXNfNzQuaHRtbApAQCAtMCwwICsxLDI2IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Cis8aHRtbD48aGVhZD48dGl0bGU+PC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC94aHRtbDtjaGFyc2V0PVVURi04Ii8+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRveHlnZW4gMS44LjMuMSI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJzZWFyY2guY3NzIi8+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJ2YXJpYWJsZXNfNzQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ic2VhcmNoLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IGNsYXNzPSJTUlBhZ2UiPgorPGRpdiBpZD0iU1JJbmRleCI+Cis8ZGl2IGNsYXNzPSJTUlN0YXR1cyIgaWQ9IkxvYWRpbmciPkxvYWRpbmcuLi48L2Rpdj4KKzxkaXYgaWQ9IlNSUmVzdWx0cyI+PC9kaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQorY3JlYXRlUmVzdWx0cygpOworLS0+PC9zY3JpcHQ+Cis8ZGl2IGNsYXNzPSJTUlN0YXR1cyIgaWQ9IlNlYXJjaGluZyI+U2VhcmNoaW5nLi4uPC9kaXY+Cis8ZGl2IGNsYXNzPSJTUlN0YXR1cyIgaWQ9Ik5vTWF0Y2hlcyI+Tm8gTWF0Y2hlczwvZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KK2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJMb2FkaW5nIikuc3R5bGUuZGlzcGxheT0ibm9uZSI7Citkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiTm9NYXRjaGVzIikuc3R5bGUuZGlzcGxheT0ibm9uZSI7Cit2YXIgc2VhcmNoUmVzdWx0cyA9IG5ldyBTZWFyY2hSZXN1bHRzKCJzZWFyY2hSZXN1bHRzIik7CitzZWFyY2hSZXN1bHRzLlNlYXJjaCgpOworLS0+PC9zY3JpcHQ+Cis8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL3NlYXJjaC92YXJpYWJsZXNfNzQuanMgYi9kb2MvaHRtbC9zZWFyY2gvdmFyaWFibGVzXzc0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzYTA1NmUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvaHRtbC9zZWFyY2gvdmFyaWFibGVzXzc0LmpzCkBAIC0wLDAgKzEsOSBAQAordmFyIHNlYXJjaERhdGE9CitbCisgIFsndGpibHVlb2Zmc2V0JyxbJ3RqQmx1ZU9mZnNldCcsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTg0ZTJlMzVkM2YwODAyNWY5NzZlYzFlYzUzNjkzZGVhJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpncmVlbm9mZnNldCcsWyd0akdyZWVuT2Zmc2V0JyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhODJkNmUzNWRhNDQxMTEyYTQxMWRhNDE5MjNjMGJhMmYnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0am1jdWhlaWdodCcsWyd0ak1DVUhlaWdodCcsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWJkMjQ3YmI5ZmVjYjM5M2VjYTU3MzY2ZmViODMyN2JmJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGptY3V3aWR0aCcsWyd0ak1DVVdpZHRoJyxbJy4uL2dyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhOWU2MWU3Y2Q0N2ExNWExNzMyODNiYTk0ZTc4MTMwOGMnLDEsJ3R1cmJvanBlZy5oJ11dXSwKKyAgWyd0anBpeGVsc2l6ZScsWyd0alBpeGVsU2l6ZScsWycuLi9ncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWQ3N2NmOGZlNWIyYmZkM2NiM2Y1MzA5ODE0NmFiYjRjJywxLCd0dXJib2pwZWcuaCddXV0sCisgIFsndGpyZWRvZmZzZXQnLFsndGpSZWRPZmZzZXQnLFsnLi4vZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2FkZDliNDQ2NzQyYWM4YTM5MjNmNzk5MmM3OTg4ZmVhOCcsMSwndHVyYm9qcGVnLmgnXV1dCitdOwpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvc2VhcmNoL3ZhcmlhYmxlc183Ny5odG1sIGIvZG9jL2h0bWwvc2VhcmNoL3ZhcmlhYmxlc183Ny5odG1sCmluZGV4IGI0YzhkODguLjQzNGM2ZGYgMTAwNjQ0Ci0tLSBhL2RvYy9odG1sL3NlYXJjaC92YXJpYWJsZXNfNzcuaHRtbAorKysgYi9kb2MvaHRtbC9zZWFyY2gvdmFyaWFibGVzXzc3Lmh0bWwKQEAgLTEsMTggKzEsMTggQEAKIDwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KIDxodG1sPjxoZWFkPjx0aXRsZT48L3RpdGxlPgogPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L3hodG1sO2NoYXJzZXQ9VVRGLTgiLz4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG94eWdlbiAxLjguMy4xIj4KIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9InNlYXJjaC5jc3MiLz4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InZhcmlhYmxlc183Ny5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJzZWFyY2guanMiPjwvc2NyaXB0PgogPC9oZWFkPgogPGJvZHkgY2xhc3M9IlNSUGFnZSI+CiA8ZGl2IGlkPSJTUkluZGV4Ij4KIDxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iTG9hZGluZyI+TG9hZGluZy4uLjwvZGl2PgotPGRpdiBjbGFzcz0iU1JSZXN1bHQiIGlkPSJTUl93Ij4KLSA8ZGl2IGNsYXNzPSJTUkVudHJ5Ij4KLSAgPGEgaWQ9Ikl0ZW0wIiBvbmtleWRvd249InJldHVybiBzZWFyY2hSZXN1bHRzLk5hdihldmVudCwwKSIgb25rZXlwcmVzcz0icmV0dXJuIHNlYXJjaFJlc3VsdHMuTmF2KGV2ZW50LDApIiBvbmtleXVwPSJyZXR1cm4gc2VhcmNoUmVzdWx0cy5OYXYoZXZlbnQsMCkiIGNsYXNzPSJTUlN5bWJvbCIgaHJlZj0iLi4vc3RydWN0dGpyZWdpb24uaHRtbCNhYjZlYjczY2VlZjU4NGZjMjNjOGM4MDk3OTI2ZGNlNDIiIHRhcmdldD0iX3BhcmVudCI+dzwvYT4KLSAgPHNwYW4gY2xhc3M9IlNSU2NvcGUiPnRqcmVnaW9uPC9zcGFuPgotIDwvZGl2PgotPC9kaXY+Cis8ZGl2IGlkPSJTUlJlc3VsdHMiPjwvZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KK2NyZWF0ZVJlc3VsdHMoKTsKKy0tPjwvc2NyaXB0PgogPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJTZWFyY2hpbmciPlNlYXJjaGluZy4uLjwvZGl2PgogPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJOb01hdGNoZXMiPk5vIE1hdGNoZXM8L2Rpdj4KIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCmRpZmYgLS1naXQgYS9kb2MvaHRtbC9zZWFyY2gvdmFyaWFibGVzXzc3LmpzIGIvZG9jL2h0bWwvc2VhcmNoL3ZhcmlhYmxlc183Ny5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjY3MDAyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvc2VhcmNoL3ZhcmlhYmxlc183Ny5qcwpAQCAtMCwwICsxLDQgQEAKK3ZhciBzZWFyY2hEYXRhPQorWworICBbJ3cnLFsndycsWycuLi9zdHJ1Y3R0anJlZ2lvbi5odG1sI2FiNmViNzNjZWVmNTg0ZmMyM2M4YzgwOTc5MjZkY2U0MicsMSwndGpyZWdpb24nXV1dCitdOwpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvc2VhcmNoL3ZhcmlhYmxlc183OC5odG1sIGIvZG9jL2h0bWwvc2VhcmNoL3ZhcmlhYmxlc183OC5odG1sCmluZGV4IGEzNTc2OTEuLjYwMmU4NzkgMTAwNjQ0Ci0tLSBhL2RvYy9odG1sL3NlYXJjaC92YXJpYWJsZXNfNzguaHRtbAorKysgYi9kb2MvaHRtbC9zZWFyY2gvdmFyaWFibGVzXzc4Lmh0bWwKQEAgLTEsMTggKzEsMTggQEAKIDwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KIDxodG1sPjxoZWFkPjx0aXRsZT48L3RpdGxlPgogPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L3hodG1sO2NoYXJzZXQ9VVRGLTgiLz4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG94eWdlbiAxLjguMy4xIj4KIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9InNlYXJjaC5jc3MiLz4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InZhcmlhYmxlc183OC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJzZWFyY2guanMiPjwvc2NyaXB0PgogPC9oZWFkPgogPGJvZHkgY2xhc3M9IlNSUGFnZSI+CiA8ZGl2IGlkPSJTUkluZGV4Ij4KIDxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iTG9hZGluZyI+TG9hZGluZy4uLjwvZGl2PgotPGRpdiBjbGFzcz0iU1JSZXN1bHQiIGlkPSJTUl94Ij4KLSA8ZGl2IGNsYXNzPSJTUkVudHJ5Ij4KLSAgPGEgaWQ9Ikl0ZW0wIiBvbmtleWRvd249InJldHVybiBzZWFyY2hSZXN1bHRzLk5hdihldmVudCwwKSIgb25rZXlwcmVzcz0icmV0dXJuIHNlYXJjaFJlc3VsdHMuTmF2KGV2ZW50LDApIiBvbmtleXVwPSJyZXR1cm4gc2VhcmNoUmVzdWx0cy5OYXYoZXZlbnQsMCkiIGNsYXNzPSJTUlN5bWJvbCIgaHJlZj0iLi4vc3RydWN0dGpyZWdpb24uaHRtbCNhNGI2YTM3YTkzOTk3MDkxYjI2YTc1ODMxZmEyOTFhZDkiIHRhcmdldD0iX3BhcmVudCI+eDwvYT4KLSAgPHNwYW4gY2xhc3M9IlNSU2NvcGUiPnRqcmVnaW9uPC9zcGFuPgotIDwvZGl2PgotPC9kaXY+Cis8ZGl2IGlkPSJTUlJlc3VsdHMiPjwvZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KK2NyZWF0ZVJlc3VsdHMoKTsKKy0tPjwvc2NyaXB0PgogPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJTZWFyY2hpbmciPlNlYXJjaGluZy4uLjwvZGl2PgogPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJOb01hdGNoZXMiPk5vIE1hdGNoZXM8L2Rpdj4KIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCmRpZmYgLS1naXQgYS9kb2MvaHRtbC9zZWFyY2gvdmFyaWFibGVzXzc4LmpzIGIvZG9jL2h0bWwvc2VhcmNoL3ZhcmlhYmxlc183OC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWEyN2YyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvc2VhcmNoL3ZhcmlhYmxlc183OC5qcwpAQCAtMCwwICsxLDQgQEAKK3ZhciBzZWFyY2hEYXRhPQorWworICBbJ3gnLFsneCcsWycuLi9zdHJ1Y3R0anJlZ2lvbi5odG1sI2E0YjZhMzdhOTM5OTcwOTFiMjZhNzU4MzFmYTI5MWFkOScsMSwndGpyZWdpb24nXV1dCitdOwpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvc2VhcmNoL3ZhcmlhYmxlc183OS5odG1sIGIvZG9jL2h0bWwvc2VhcmNoL3ZhcmlhYmxlc183OS5odG1sCmluZGV4IGE4ODNiZDEuLjE3ZmFlZjkgMTAwNjQ0Ci0tLSBhL2RvYy9odG1sL3NlYXJjaC92YXJpYWJsZXNfNzkuaHRtbAorKysgYi9kb2MvaHRtbC9zZWFyY2gvdmFyaWFibGVzXzc5Lmh0bWwKQEAgLTEsMTggKzEsMTggQEAKIDwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KIDxodG1sPjxoZWFkPjx0aXRsZT48L3RpdGxlPgogPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L3hodG1sO2NoYXJzZXQ9VVRGLTgiLz4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG94eWdlbiAxLjguMy4xIj4KIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9InNlYXJjaC5jc3MiLz4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InZhcmlhYmxlc183OS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJzZWFyY2guanMiPjwvc2NyaXB0PgogPC9oZWFkPgogPGJvZHkgY2xhc3M9IlNSUGFnZSI+CiA8ZGl2IGlkPSJTUkluZGV4Ij4KIDxkaXYgY2xhc3M9IlNSU3RhdHVzIiBpZD0iTG9hZGluZyI+TG9hZGluZy4uLjwvZGl2PgotPGRpdiBjbGFzcz0iU1JSZXN1bHQiIGlkPSJTUl95Ij4KLSA8ZGl2IGNsYXNzPSJTUkVudHJ5Ij4KLSAgPGEgaWQ9Ikl0ZW0wIiBvbmtleWRvd249InJldHVybiBzZWFyY2hSZXN1bHRzLk5hdihldmVudCwwKSIgb25rZXlwcmVzcz0icmV0dXJuIHNlYXJjaFJlc3VsdHMuTmF2KGV2ZW50LDApIiBvbmtleXVwPSJyZXR1cm4gc2VhcmNoUmVzdWx0cy5OYXYoZXZlbnQsMCkiIGNsYXNzPSJTUlN5bWJvbCIgaHJlZj0iLi4vc3RydWN0dGpyZWdpb24uaHRtbCNhN2IzZTBjMjRjZmU4N2FjYzgwZTMzNGNhZmRjZjIyYzIiIHRhcmdldD0iX3BhcmVudCI+eTwvYT4KLSAgPHNwYW4gY2xhc3M9IlNSU2NvcGUiPnRqcmVnaW9uPC9zcGFuPgotIDwvZGl2PgotPC9kaXY+Cis8ZGl2IGlkPSJTUlJlc3VsdHMiPjwvZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KK2NyZWF0ZVJlc3VsdHMoKTsKKy0tPjwvc2NyaXB0PgogPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJTZWFyY2hpbmciPlNlYXJjaGluZy4uLjwvZGl2PgogPGRpdiBjbGFzcz0iU1JTdGF0dXMiIGlkPSJOb01hdGNoZXMiPk5vIE1hdGNoZXM8L2Rpdj4KIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCmRpZmYgLS1naXQgYS9kb2MvaHRtbC9zZWFyY2gvdmFyaWFibGVzXzc5LmpzIGIvZG9jL2h0bWwvc2VhcmNoL3ZhcmlhYmxlc183OS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Njg5MGE2Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvc2VhcmNoL3ZhcmlhYmxlc183OS5qcwpAQCAtMCwwICsxLDQgQEAKK3ZhciBzZWFyY2hEYXRhPQorWworICBbJ3knLFsneScsWycuLi9zdHJ1Y3R0anJlZ2lvbi5odG1sI2E3YjNlMGMyNGNmZTg3YWNjODBlMzM0Y2FmZGNmMjJjMicsMSwndGpyZWdpb24nXV1dCitdOwpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvc3RydWN0dGpyZWdpb24uaHRtbCBiL2RvYy9odG1sL3N0cnVjdHRqcmVnaW9uLmh0bWwKaW5kZXggNzhlOTMxMS4uMzNlZTk0NCAxMDA2NDQKLS0tIGEvZG9jL2h0bWwvc3RydWN0dGpyZWdpb24uaHRtbAorKysgYi9kb2MvaHRtbC9zdHJ1Y3R0anJlZ2lvbi5odG1sCkBAIC0yLDM1ICsyLDQ2IEBACiA8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+CiA8aGVhZD4KIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC94aHRtbDtjaGFyc2V0PVVURi04Ii8+Cis8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPTkiLz4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG94eWdlbiAxLjguMy4xIi8+CiA8dGl0bGU+VHVyYm9KUEVHOiB0anJlZ2lvbiBTdHJ1Y3QgUmVmZXJlbmNlPC90aXRsZT4KIDxsaW5rIGhyZWY9InRhYnMuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIi8+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJqcXVlcnkuanMiPjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iZHluc2VjdGlvbnMuanMiPjwvc2NyaXB0PgogPGxpbmsgaHJlZj0ic2VhcmNoL3NlYXJjaC5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiLz4KIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InNlYXJjaC9zZWFyY2guanMiPjwvc2NyaXB0PgotPGxpbmsgaHJlZj0iZG94eWdlbi5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiLz4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7IHNlYXJjaEJveC5PblNlbGVjdEl0ZW0oMCk7IH0pOworPC9zY3JpcHQ+Cis8bGluayBocmVmPSJkb3h5Z2VuLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgLz4KKzxsaW5rIGhyZWY9ImRveHlnZW4tZXh0cmEuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIi8+CiA8L2hlYWQ+Ci08Ym9keSBvbmxvYWQ9J3NlYXJjaEJveC5PblNlbGVjdEl0ZW0oMCk7Jz4KLTwhLS0gR2VuZXJhdGVkIGJ5IERveHlnZW4gMS43LjQgLS0+Ci08c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQotdmFyIHNlYXJjaEJveCA9IG5ldyBTZWFyY2hCb3goInNlYXJjaEJveCIsICJzZWFyY2giLGZhbHNlLCdTZWFyY2gnKTsKLS0tPjwvc2NyaXB0PgotPGRpdiBpZD0idG9wIj4KKzxib2R5PgorPGRpdiBpZD0idG9wIj48IS0tIGRvIG5vdCByZW1vdmUgdGhpcyBkaXYsIGl0IGlzIGNsb3NlZCBieSBkb3h5Z2VuISAtLT4KIDxkaXYgaWQ9InRpdGxlYXJlYSI+CiA8dGFibGUgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIj4KICA8dGJvZHk+CiAgPHRyIHN0eWxlPSJoZWlnaHQ6IDU2cHg7Ij4KICAgPHRkIHN0eWxlPSJwYWRkaW5nLWxlZnQ6IDAuNWVtOyI+Ci0gICA8ZGl2IGlkPSJwcm9qZWN0bmFtZSI+VHVyYm9KUEVHJiMxNjA7PHNwYW4gaWQ9InByb2plY3RudW1iZXIiPjEuMi4xPC9zcGFuPjwvZGl2PgorICAgPGRpdiBpZD0icHJvamVjdG5hbWUiPlR1cmJvSlBFRworICAgJiMxNjA7PHNwYW4gaWQ9InByb2plY3RudW1iZXIiPjEuMi4xPC9zcGFuPgorICAgPC9kaXY+CiAgIDwvdGQ+CiAgPC90cj4KICA8L3Rib2R5PgogPC90YWJsZT4KIDwvZGl2PgorPCEtLSBlbmQgaGVhZGVyIHBhcnQgLS0+Cis8IS0tIEdlbmVyYXRlZCBieSBEb3h5Z2VuIDEuOC4zLjEgLS0+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Cit2YXIgc2VhcmNoQm94ID0gbmV3IFNlYXJjaEJveCgic2VhcmNoQm94IiwgInNlYXJjaCIsZmFsc2UsJ1NlYXJjaCcpOworPC9zY3JpcHQ+CiAgIDxkaXYgaWQ9Im5hdnJvdzEiIGNsYXNzPSJ0YWJzIj4KICAgICA8dWwgY2xhc3M9InRhYmxpc3QiPgogICAgICAgPGxpPjxhIGhyZWY9ImluZGV4Lmh0bWwiPjxzcGFuPk1haW4mIzE2MDtQYWdlPC9zcGFuPjwvYT48L2xpPgogICAgICAgPGxpPjxhIGhyZWY9Im1vZHVsZXMuaHRtbCI+PHNwYW4+TW9kdWxlczwvc3Bhbj48L2E+PC9saT4KICAgICAgIDxsaSBjbGFzcz0iY3VycmVudCI+PGEgaHJlZj0iYW5ub3RhdGVkLmh0bWwiPjxzcGFuPkRhdGEmIzE2MDtTdHJ1Y3R1cmVzPC9zcGFuPjwvYT48L2xpPgotICAgICAgPGxpIGlkPSJzZWFyY2hsaSI+CisgICAgICA8bGk+CiAgICAgICAgIDxkaXYgaWQ9Ik1TZWFyY2hCb3giIGNsYXNzPSJNU2VhcmNoQm94SW5hY3RpdmUiPgogICAgICAgICA8c3BhbiBjbGFzcz0ibGVmdCI+CiAgICAgICAgICAgPGltZyBpZD0iTVNlYXJjaFNlbGVjdCIgc3JjPSJzZWFyY2gvbWFnX3NlbC5wbmciCkBAIC01NSw5MiArNjYsMTA2IEBACiAgICAgICA8bGk+PGEgaHJlZj0iZnVuY3Rpb25zLmh0bWwiPjxzcGFuPkRhdGEmIzE2MDtGaWVsZHM8L3NwYW4+PC9hPjwvbGk+CiAgICAgPC91bD4KICAgPC9kaXY+Cis8IS0tIHdpbmRvdyBzaG93aW5nIHRoZSBmaWx0ZXIgb3B0aW9ucyAtLT4KKzxkaXYgaWQ9Ik1TZWFyY2hTZWxlY3RXaW5kb3ciCisgICAgIG9ubW91c2VvdmVyPSJyZXR1cm4gc2VhcmNoQm94Lk9uU2VhcmNoU2VsZWN0U2hvdygpIgorICAgICBvbm1vdXNlb3V0PSJyZXR1cm4gc2VhcmNoQm94Lk9uU2VhcmNoU2VsZWN0SGlkZSgpIgorICAgICBvbmtleWRvd249InJldHVybiBzZWFyY2hCb3guT25TZWFyY2hTZWxlY3RLZXkoZXZlbnQpIj4KKzxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oMCkiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+QWxsPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oMSkiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+RGF0YSBTdHJ1Y3R1cmVzPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oMikiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+RnVuY3Rpb25zPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oMykiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+VmFyaWFibGVzPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oNCkiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+VHlwZWRlZnM8L2E+PGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSg1KSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5FbnVtZXJhdGlvbnM8L2E+PGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSg2KSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5FbnVtZXJhdG9yPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oNykiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+R3JvdXBzPC9hPjwvZGl2PgorCis8IS0tIGlmcmFtZSBzaG93aW5nIHRoZSBzZWFyY2ggcmVzdWx0cyAoY2xvc2VkIGJ5IGRlZmF1bHQpIC0tPgorPGRpdiBpZD0iTVNlYXJjaFJlc3VsdHNXaW5kb3ciPgorPGlmcmFtZSBzcmM9ImphdmFzY3JpcHQ6dm9pZCgwKSIgZnJhbWVib3JkZXI9IjAiIAorICAgICAgICBuYW1lPSJNU2VhcmNoUmVzdWx0cyIgaWQ9Ik1TZWFyY2hSZXN1bHRzIj4KKzwvaWZyYW1lPgogPC9kaXY+CisKKzwvZGl2PjwhLS0gdG9wIC0tPgogPGRpdiBjbGFzcz0iaGVhZGVyIj4KICAgPGRpdiBjbGFzcz0ic3VtbWFyeSI+CiA8YSBocmVmPSIjcHViLWF0dHJpYnMiPkRhdGEgRmllbGRzPC9hPiAgPC9kaXY+CiAgIDxkaXYgY2xhc3M9ImhlYWRlcnRpdGxlIj4KIDxkaXYgY2xhc3M9InRpdGxlIj50anJlZ2lvbiBTdHJ1Y3QgUmVmZXJlbmNlPGRpdiBjbGFzcz0iaW5ncm91cHMiPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwiPlR1cmJvSlBFRzwvYT48L2Rpdj48L2Rpdj4gIDwvZGl2PgotPC9kaXY+Cis8L2Rpdj48IS0taGVhZGVyLS0+CiA8ZGl2IGNsYXNzPSJjb250ZW50cyI+Ci08IS0tIGRveHl0YWc6IGNsYXNzPSJ0anJlZ2lvbiIgLS0+CisKIDxwPkNyb3BwaW5nIHJlZ2lvbi4gIAogIDxhIGhyZWY9InN0cnVjdHRqcmVnaW9uLmh0bWwjZGV0YWlscyI+TW9yZS4uLjwvYT48L3A+CiAKIDxwPjxjb2RlPiNpbmNsdWRlICZsdDt0dXJib2pwZWcuaCZndDs8L2NvZGU+PC9wPgogPHRhYmxlIGNsYXNzPSJtZW1iZXJkZWNscyI+Ci08dHI+PHRkIGNvbHNwYW49IjIiPjxoMj48YSBuYW1lPSJwdWItYXR0cmlicyI+PC9hPgorPHRyIGNsYXNzPSJoZWFkaW5nIj48dGQgY29sc3Bhbj0iMiI+PGgyIGNsYXNzPSJncm91cGhlYWRlciI+PGEgbmFtZT0icHViLWF0dHJpYnMiPjwvYT4KIERhdGEgRmllbGRzPC9oMj48L3RkPjwvdHI+Ci08dHI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+aW50JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0ic3RydWN0dGpyZWdpb24uaHRtbCNhNGI2YTM3YTkzOTk3MDkxYjI2YTc1ODMxZmEyOTFhZDkiPng8L2E+PC90ZD48L3RyPgotPHRyPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+VGhlIGxlZnQgYm91bmRhcnkgb2YgdGhlIGNyb3BwaW5nIHJlZ2lvbi4gIDxhIGhyZWY9IiNhNGI2YTM3YTkzOTk3MDkxYjI2YTc1ODMxZmEyOTFhZDkiPjwvYT48YnIvPjwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj5pbnQmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anJlZ2lvbi5odG1sI2E3YjNlMGMyNGNmZTg3YWNjODBlMzM0Y2FmZGNmMjJjMiI+eTwvYT48L3RkPjwvdHI+Ci08dHI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5UaGUgdXBwZXIgYm91bmRhcnkgb2YgdGhlIGNyb3BwaW5nIHJlZ2lvbi4gIDxhIGhyZWY9IiNhN2IzZTBjMjRjZmU4N2FjYzgwZTMzNGNhZmRjZjIyYzIiPjwvYT48YnIvPjwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj5pbnQmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anJlZ2lvbi5odG1sI2FiNmViNzNjZWVmNTg0ZmMyM2M4YzgwOTc5MjZkY2U0MiI+dzwvYT48L3RkPjwvdHI+Ci08dHI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5UaGUgd2lkdGggb2YgdGhlIGNyb3BwaW5nIHJlZ2lvbi4gIDxhIGhyZWY9IiNhYjZlYjczY2VlZjU4NGZjMjNjOGM4MDk3OTI2ZGNlNDIiPjwvYT48YnIvPjwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj5pbnQmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anJlZ2lvbi5odG1sI2FlY2VmYzQ1YTI2ZjRkOGI2MGRkNGQ4MjVjMTcxMDExNSI+aDwvYT48L3RkPjwvdHI+Ci08dHI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5UaGUgaGVpZ2h0IG9mIHRoZSBjcm9wcGluZyByZWdpb24uICA8YSBocmVmPSIjYWVjZWZjNDVhMjZmNGQ4YjYwZGQ0ZDgyNWMxNzEwMTE1Ij48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWl0ZW06YTRiNmEzN2E5Mzk5NzA5MWIyNmE3NTgzMWZhMjkxYWQ5Ij48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj5pbnQmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anJlZ2lvbi5odG1sI2E0YjZhMzdhOTM5OTcwOTFiMjZhNzU4MzFmYTI5MWFkOSI+eDwvYT48L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWRlc2M6YTRiNmEzN2E5Mzk5NzA5MWIyNmE3NTgzMWZhMjkxYWQ5Ij48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPlRoZSBsZWZ0IGJvdW5kYXJ5IG9mIHRoZSBjcm9wcGluZyByZWdpb24uICA8YSBocmVmPSIjYTRiNmEzN2E5Mzk5NzA5MWIyNmE3NTgzMWZhMjkxYWQ5Ij5Nb3JlLi4uPC9hPjxici8+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJzZXBhcmF0b3I6YTRiNmEzN2E5Mzk5NzA5MWIyNmE3NTgzMWZhMjkxYWQ5Ij48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmE3YjNlMGMyNGNmZTg3YWNjODBlMzM0Y2FmZGNmMjJjMiI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+aW50JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0ic3RydWN0dGpyZWdpb24uaHRtbCNhN2IzZTBjMjRjZmU4N2FjYzgwZTMzNGNhZmRjZjIyYzIiPnk8L2E+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmE3YjNlMGMyNGNmZTg3YWNjODBlMzM0Y2FmZGNmMjJjMiI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5UaGUgdXBwZXIgYm91bmRhcnkgb2YgdGhlIGNyb3BwaW5nIHJlZ2lvbi4gIDxhIGhyZWY9IiNhN2IzZTBjMjRjZmU4N2FjYzgwZTMzNGNhZmRjZjIyYzIiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjphN2IzZTBjMjRjZmU4N2FjYzgwZTMzNGNhZmRjZjIyYzIiPjx0ZCBjbGFzcz0ibWVtU2VwYXJhdG9yIiBjb2xzcGFuPSIyIj4mIzE2MDs8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWl0ZW06YWI2ZWI3M2NlZWY1ODRmYzIzYzhjODA5NzkyNmRjZTQyIj48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj5pbnQmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anJlZ2lvbi5odG1sI2FiNmViNzNjZWVmNTg0ZmMyM2M4YzgwOTc5MjZkY2U0MiI+dzwvYT48L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWRlc2M6YWI2ZWI3M2NlZWY1ODRmYzIzYzhjODA5NzkyNmRjZTQyIj48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPlRoZSB3aWR0aCBvZiB0aGUgY3JvcHBpbmcgcmVnaW9uLiAgPGEgaHJlZj0iI2FiNmViNzNjZWVmNTg0ZmMyM2M4YzgwOTc5MjZkY2U0MiI+TW9yZS4uLjwvYT48YnIvPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ic2VwYXJhdG9yOmFiNmViNzNjZWVmNTg0ZmMyM2M4YzgwOTc5MjZkY2U0MiI+PHRkIGNsYXNzPSJtZW1TZXBhcmF0b3IiIGNvbHNwYW49IjIiPiYjMTYwOzwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtaXRlbTphZWNlZmM0NWEyNmY0ZDhiNjBkZDRkODI1YzE3MTAxMTUiPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPmludCYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9InN0cnVjdHRqcmVnaW9uLmh0bWwjYWVjZWZjNDVhMjZmNGQ4YjYwZGQ0ZDgyNWMxNzEwMTE1Ij5oPC9hPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtZGVzYzphZWNlZmM0NWEyNmY0ZDhiNjBkZDRkODI1YzE3MTAxMTUiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+VGhlIGhlaWdodCBvZiB0aGUgY3JvcHBpbmcgcmVnaW9uLiAgPGEgaHJlZj0iI2FlY2VmYzQ1YTI2ZjRkOGI2MGRkNGQ4MjVjMTcxMDExNSI+TW9yZS4uLjwvYT48YnIvPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ic2VwYXJhdG9yOmFlY2VmYzQ1YTI2ZjRkOGI2MGRkNGQ4MjVjMTcxMDExNSI+PHRkIGNsYXNzPSJtZW1TZXBhcmF0b3IiIGNvbHNwYW49IjIiPiYjMTYwOzwvdGQ+PC90cj4KIDwvdGFibGU+Ci08aHIvPjxhIG5hbWU9ImRldGFpbHMiIGlkPSJkZXRhaWxzIj48L2E+PGgyPkRldGFpbGVkIERlc2NyaXB0aW9uPC9oMj4KKzxhIG5hbWU9ImRldGFpbHMiIGlkPSJkZXRhaWxzIj48L2E+PGgyIGNsYXNzPSJncm91cGhlYWRlciI+RGV0YWlsZWQgRGVzY3JpcHRpb248L2gyPgogPGRpdiBjbGFzcz0idGV4dGJsb2NrIj48cD5Dcm9wcGluZyByZWdpb24uIDwvcD4KLTwvZGl2Pjxoci8+PGgyPkZpZWxkIERvY3VtZW50YXRpb248L2gyPgotPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImFlY2VmYzQ1YTI2ZjRkOGI2MGRkNGQ4MjVjMTcxMDExNSI+PC9hPjwhLS0gZG94eXRhZzogbWVtYmVyPSJ0anJlZ2lvbjo6aCIgcmVmPSJhZWNlZmM0NWEyNmY0ZDhiNjBkZDRkODI1YzE3MTAxMTUiIGFyZ3M9IiIgLS0+Cis8L2Rpdj48aDIgY2xhc3M9Imdyb3VwaGVhZGVyIj5GaWVsZCBEb2N1bWVudGF0aW9uPC9oMj4KKzxhIGNsYXNzPSJhbmNob3IiIGlkPSJhZWNlZmM0NWEyNmY0ZDhiNjBkZDRkODI1YzE3MTAxMTUiPjwvYT4KIDxkaXYgY2xhc3M9Im1lbWl0ZW0iPgogPGRpdiBjbGFzcz0ibWVtcHJvdG8iPgogICAgICAgPHRhYmxlIGNsYXNzPSJtZW1uYW1lIj4KICAgICAgICAgPHRyPgotICAgICAgICAgIDx0ZCBjbGFzcz0ibWVtbmFtZSI+aW50IDxhIGNsYXNzPSJlbCIgaHJlZj0ic3RydWN0dGpyZWdpb24uaHRtbCNhZWNlZmM0NWEyNmY0ZDhiNjBkZDRkODI1YzE3MTAxMTUiPnRqcmVnaW9uOjpoPC9hPjwvdGQ+CisgICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj5pbnQgdGpyZWdpb246Omg8L3RkPgogICAgICAgICA8L3RyPgogICAgICAgPC90YWJsZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0ibWVtZG9jIj4KKzwvZGl2PjxkaXYgY2xhc3M9Im1lbWRvYyI+CiAKIDxwPlRoZSBoZWlnaHQgb2YgdGhlIGNyb3BwaW5nIHJlZ2lvbi4gPC9wPgogPHA+U2V0dGluZyB0aGlzIHRvIDAgaXMgdGhlIGVxdWl2YWxlbnQgb2Ygc2V0dGluZyBpdCB0byB0aGUgaGVpZ2h0IG9mIHRoZSBzb3VyY2UgSlBFRyBpbWFnZSAtIHkuIDwvcD4KIAogPC9kaXY+CiA8L2Rpdj4KLTxhIGNsYXNzPSJhbmNob3IiIGlkPSJhYjZlYjczY2VlZjU4NGZjMjNjOGM4MDk3OTI2ZGNlNDIiPjwvYT48IS0tIGRveHl0YWc6IG1lbWJlcj0idGpyZWdpb246OnciIHJlZj0iYWI2ZWI3M2NlZWY1ODRmYzIzYzhjODA5NzkyNmRjZTQyIiBhcmdzPSIiIC0tPgorPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImFiNmViNzNjZWVmNTg0ZmMyM2M4YzgwOTc5MjZkY2U0MiI+PC9hPgogPGRpdiBjbGFzcz0ibWVtaXRlbSI+CiA8ZGl2IGNsYXNzPSJtZW1wcm90byI+CiAgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgogICAgICAgICA8dHI+Ci0gICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj5pbnQgPGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anJlZ2lvbi5odG1sI2FiNmViNzNjZWVmNTg0ZmMyM2M4YzgwOTc5MjZkY2U0MiI+dGpyZWdpb246Onc8L2E+PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9Im1lbW5hbWUiPmludCB0anJlZ2lvbjo6dzwvdGQ+CiAgICAgICAgIDwvdHI+CiAgICAgICA8L3RhYmxlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJtZW1kb2MiPgorPC9kaXY+PGRpdiBjbGFzcz0ibWVtZG9jIj4KIAogPHA+VGhlIHdpZHRoIG9mIHRoZSBjcm9wcGluZyByZWdpb24uIDwvcD4KIDxwPlNldHRpbmcgdGhpcyB0byAwIGlzIHRoZSBlcXVpdmFsZW50IG9mIHNldHRpbmcgaXQgdG8gdGhlIHdpZHRoIG9mIHRoZSBzb3VyY2UgSlBFRyBpbWFnZSAtIHguIDwvcD4KIAogPC9kaXY+CiA8L2Rpdj4KLTxhIGNsYXNzPSJhbmNob3IiIGlkPSJhNGI2YTM3YTkzOTk3MDkxYjI2YTc1ODMxZmEyOTFhZDkiPjwvYT48IS0tIGRveHl0YWc6IG1lbWJlcj0idGpyZWdpb246OngiIHJlZj0iYTRiNmEzN2E5Mzk5NzA5MWIyNmE3NTgzMWZhMjkxYWQ5IiBhcmdzPSIiIC0tPgorPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImE0YjZhMzdhOTM5OTcwOTFiMjZhNzU4MzFmYTI5MWFkOSI+PC9hPgogPGRpdiBjbGFzcz0ibWVtaXRlbSI+CiA8ZGl2IGNsYXNzPSJtZW1wcm90byI+CiAgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgogICAgICAgICA8dHI+Ci0gICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj5pbnQgPGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anJlZ2lvbi5odG1sI2E0YjZhMzdhOTM5OTcwOTFiMjZhNzU4MzFmYTI5MWFkOSI+dGpyZWdpb246Ong8L2E+PC90ZD4KKyAgICAgICAgICA8dGQgY2xhc3M9Im1lbW5hbWUiPmludCB0anJlZ2lvbjo6eDwvdGQ+CiAgICAgICAgIDwvdHI+CiAgICAgICA8L3RhYmxlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJtZW1kb2MiPgorPC9kaXY+PGRpdiBjbGFzcz0ibWVtZG9jIj4KIAogPHA+VGhlIGxlZnQgYm91bmRhcnkgb2YgdGhlIGNyb3BwaW5nIHJlZ2lvbi4gPC9wPgogPHA+VGhpcyBtdXN0IGJlIGV2ZW5seSBkaXZpc2libGUgYnkgdGhlIE1DVSBibG9jayB3aWR0aCAoc2VlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E5ZTYxZTdjZDQ3YTE1YTE3MzI4M2JhOTRlNzgxMzA4YyIgdGl0bGU9Ik1DVSBibG9jayB3aWR0aCAoaW4gcGl4ZWxzKSBmb3IgYSBnaXZlbiBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZy4iPnRqTUNVV2lkdGg8L2E+LikgPC9wPgogCiA8L2Rpdj4KIDwvZGl2PgotPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImE3YjNlMGMyNGNmZTg3YWNjODBlMzM0Y2FmZGNmMjJjMiI+PC9hPjwhLS0gZG94eXRhZzogbWVtYmVyPSJ0anJlZ2lvbjo6eSIgcmVmPSJhN2IzZTBjMjRjZmU4N2FjYzgwZTMzNGNhZmRjZjIyYzIiIGFyZ3M9IiIgLS0+Cis8YSBjbGFzcz0iYW5jaG9yIiBpZD0iYTdiM2UwYzI0Y2ZlODdhY2M4MGUzMzRjYWZkY2YyMmMyIj48L2E+CiA8ZGl2IGNsYXNzPSJtZW1pdGVtIj4KIDxkaXYgY2xhc3M9Im1lbXByb3RvIj4KICAgICAgIDx0YWJsZSBjbGFzcz0ibWVtbmFtZSI+CiAgICAgICAgIDx0cj4KLSAgICAgICAgICA8dGQgY2xhc3M9Im1lbW5hbWUiPmludCA8YSBjbGFzcz0iZWwiIGhyZWY9InN0cnVjdHRqcmVnaW9uLmh0bWwjYTdiM2UwYzI0Y2ZlODdhY2M4MGUzMzRjYWZkY2YyMmMyIj50anJlZ2lvbjo6eTwvYT48L3RkPgorICAgICAgICAgIDx0ZCBjbGFzcz0ibWVtbmFtZSI+aW50IHRqcmVnaW9uOjp5PC90ZD4KICAgICAgICAgPC90cj4KICAgICAgIDwvdGFibGU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9Im1lbWRvYyI+Cis8L2Rpdj48ZGl2IGNsYXNzPSJtZW1kb2MiPgogCiA8cD5UaGUgdXBwZXIgYm91bmRhcnkgb2YgdGhlIGNyb3BwaW5nIHJlZ2lvbi4gPC9wPgogPHA+VGhpcyBtdXN0IGJlIGV2ZW5seSBkaXZpc2libGUgYnkgdGhlIE1DVSBibG9jayBoZWlnaHQgKHNlZSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhYmQyNDdiYjlmZWNiMzkzZWNhNTczNjZmZWI4MzI3YmYiIHRpdGxlPSJNQ1UgYmxvY2sgaGVpZ2h0IChpbiBwaXhlbHMpIGZvciBhIGdpdmVuIGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nLiI+dGpNQ1VIZWlnaHQ8L2E+LikgPC9wPgpAQCAtMTUwLDIzICsxNzUsMTIgQEAKIDxoci8+VGhlIGRvY3VtZW50YXRpb24gZm9yIHRoaXMgc3RydWN0IHdhcyBnZW5lcmF0ZWQgZnJvbSB0aGUgZm9sbG93aW5nIGZpbGU6PHVsPgogPGxpPnR1cmJvanBlZy5oPC9saT4KIDwvdWw+Ci08L2Rpdj4KLTwhLS0gd2luZG93IHNob3dpbmcgdGhlIGZpbHRlciBvcHRpb25zIC0tPgotPGRpdiBpZD0iTVNlYXJjaFNlbGVjdFdpbmRvdyIKLSAgICAgb25tb3VzZW92ZXI9InJldHVybiBzZWFyY2hCb3guT25TZWFyY2hTZWxlY3RTaG93KCkiCi0gICAgIG9ubW91c2VvdXQ9InJldHVybiBzZWFyY2hCb3guT25TZWFyY2hTZWxlY3RIaWRlKCkiCi0gICAgIG9ua2V5ZG93bj0icmV0dXJuIHNlYXJjaEJveC5PblNlYXJjaFNlbGVjdEtleShldmVudCkiPgotPGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSgwKSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5BbGw8L2E+PGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSgxKSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5EYXRhIFN0cnVjdHVyZXM8L2E+PGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSgyKSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5WYXJpYWJsZXM8L2E+PC9kaXY+Ci0KLTwhLS0gaWZyYW1lIHNob3dpbmcgdGhlIHNlYXJjaCByZXN1bHRzIChjbG9zZWQgYnkgZGVmYXVsdCkgLS0+Ci08ZGl2IGlkPSJNU2VhcmNoUmVzdWx0c1dpbmRvdyI+Ci08aWZyYW1lIHNyYz0iamF2YXNjcmlwdDp2b2lkKDApIiBmcmFtZWJvcmRlcj0iMCIgCi0gICAgICAgIG5hbWU9Ik1TZWFyY2hSZXN1bHRzIiBpZD0iTVNlYXJjaFJlc3VsdHMiPgotPC9pZnJhbWU+Ci08L2Rpdj4KLQotPGhyIGNsYXNzPSJmb290ZXIiLz48YWRkcmVzcyBjbGFzcz0iZm9vdGVyIj48c21hbGw+R2VuZXJhdGVkIG9uIEZyaSBKdW4gMjkgMjAxMiAxODoxNDo1NSBmb3IgVHVyYm9KUEVHIGJ5JiMxNjA7Ci08YSBocmVmPSJodHRwOi8vd3d3LmRveHlnZW4ub3JnL2luZGV4Lmh0bWwiPgotPGltZyBjbGFzcz0iZm9vdGVyIiBzcmM9ImRveHlnZW4ucG5nIiBhbHQ9ImRveHlnZW4iLz48L2E+IDEuNy40IDwvc21hbGw+PC9hZGRyZXNzPgorPC9kaXY+PCEtLSBjb250ZW50cyAtLT4KKzwhLS0gc3RhcnQgZm9vdGVyIHBhcnQgLS0+Cis8aHIgY2xhc3M9ImZvb3RlciIvPjxhZGRyZXNzIGNsYXNzPSJmb290ZXIiPjxzbWFsbD4KK0dlbmVyYXRlZCBieSAmIzE2MDs8YSBocmVmPSJodHRwOi8vd3d3LmRveHlnZW4ub3JnL2luZGV4Lmh0bWwiPgorPGltZyBjbGFzcz0iZm9vdGVyIiBzcmM9ImRveHlnZW4ucG5nIiBhbHQ9ImRveHlnZW4iLz4KKzwvYT4gMS44LjMuMQorPC9zbWFsbD48L2FkZHJlc3M+CiA8L2JvZHk+CiA8L2h0bWw+CmRpZmYgLS1naXQgYS9kb2MvaHRtbC9zdHJ1Y3R0anNjYWxpbmdmYWN0b3IuaHRtbCBiL2RvYy9odG1sL3N0cnVjdHRqc2NhbGluZ2ZhY3Rvci5odG1sCmluZGV4IDE1MzUyMmEuLjc0OWI4OGUgMTAwNjQ0Ci0tLSBhL2RvYy9odG1sL3N0cnVjdHRqc2NhbGluZ2ZhY3Rvci5odG1sCisrKyBiL2RvYy9odG1sL3N0cnVjdHRqc2NhbGluZ2ZhY3Rvci5odG1sCkBAIC0yLDM1ICsyLDQ2IEBACiA8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+CiA8aGVhZD4KIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC94aHRtbDtjaGFyc2V0PVVURi04Ii8+Cis8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPTkiLz4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG94eWdlbiAxLjguMy4xIi8+CiA8dGl0bGU+VHVyYm9KUEVHOiB0anNjYWxpbmdmYWN0b3IgU3RydWN0IFJlZmVyZW5jZTwvdGl0bGU+CiA8bGluayBocmVmPSJ0YWJzLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIvPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ianF1ZXJ5LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImR5bnNlY3Rpb25zLmpzIj48L3NjcmlwdD4KIDxsaW5rIGhyZWY9InNlYXJjaC9zZWFyY2guY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIi8+CiA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJzZWFyY2gvc2VhcmNoLmpzIj48L3NjcmlwdD4KLTxsaW5rIGhyZWY9ImRveHlnZW4uY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIi8+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgeyBzZWFyY2hCb3guT25TZWxlY3RJdGVtKDApOyB9KTsKKzwvc2NyaXB0PgorPGxpbmsgaHJlZj0iZG94eWdlbi5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIC8+Cis8bGluayBocmVmPSJkb3h5Z2VuLWV4dHJhLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIvPgogPC9oZWFkPgotPGJvZHkgb25sb2FkPSdzZWFyY2hCb3guT25TZWxlY3RJdGVtKDApOyc+Ci08IS0tIEdlbmVyYXRlZCBieSBEb3h5Z2VuIDEuNy40IC0tPgotPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0KLXZhciBzZWFyY2hCb3ggPSBuZXcgU2VhcmNoQm94KCJzZWFyY2hCb3giLCAic2VhcmNoIixmYWxzZSwnU2VhcmNoJyk7Ci0tLT48L3NjcmlwdD4KLTxkaXYgaWQ9InRvcCI+Cis8Ym9keT4KKzxkaXYgaWQ9InRvcCI+PCEtLSBkbyBub3QgcmVtb3ZlIHRoaXMgZGl2LCBpdCBpcyBjbG9zZWQgYnkgZG94eWdlbiEgLS0+CiA8ZGl2IGlkPSJ0aXRsZWFyZWEiPgogPHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCI+CiAgPHRib2R5PgogIDx0ciBzdHlsZT0iaGVpZ2h0OiA1NnB4OyI+CiAgIDx0ZCBzdHlsZT0icGFkZGluZy1sZWZ0OiAwLjVlbTsiPgotICAgPGRpdiBpZD0icHJvamVjdG5hbWUiPlR1cmJvSlBFRyYjMTYwOzxzcGFuIGlkPSJwcm9qZWN0bnVtYmVyIj4xLjIuMTwvc3Bhbj48L2Rpdj4KKyAgIDxkaXYgaWQ9InByb2plY3RuYW1lIj5UdXJib0pQRUcKKyAgICYjMTYwOzxzcGFuIGlkPSJwcm9qZWN0bnVtYmVyIj4xLjIuMTwvc3Bhbj4KKyAgIDwvZGl2PgogICA8L3RkPgogIDwvdHI+CiAgPC90Ym9keT4KIDwvdGFibGU+CiA8L2Rpdj4KKzwhLS0gZW5kIGhlYWRlciBwYXJ0IC0tPgorPCEtLSBHZW5lcmF0ZWQgYnkgRG94eWdlbiAxLjguMy4xIC0tPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgordmFyIHNlYXJjaEJveCA9IG5ldyBTZWFyY2hCb3goInNlYXJjaEJveCIsICJzZWFyY2giLGZhbHNlLCdTZWFyY2gnKTsKKzwvc2NyaXB0PgogICA8ZGl2IGlkPSJuYXZyb3cxIiBjbGFzcz0idGFicyI+CiAgICAgPHVsIGNsYXNzPSJ0YWJsaXN0Ij4KICAgICAgIDxsaT48YSBocmVmPSJpbmRleC5odG1sIj48c3Bhbj5NYWluJiMxNjA7UGFnZTwvc3Bhbj48L2E+PC9saT4KICAgICAgIDxsaT48YSBocmVmPSJtb2R1bGVzLmh0bWwiPjxzcGFuPk1vZHVsZXM8L3NwYW4+PC9hPjwvbGk+CiAgICAgICA8bGkgY2xhc3M9ImN1cnJlbnQiPjxhIGhyZWY9ImFubm90YXRlZC5odG1sIj48c3Bhbj5EYXRhJiMxNjA7U3RydWN0dXJlczwvc3Bhbj48L2E+PC9saT4KLSAgICAgIDxsaSBpZD0ic2VhcmNobGkiPgorICAgICAgPGxpPgogICAgICAgICA8ZGl2IGlkPSJNU2VhcmNoQm94IiBjbGFzcz0iTVNlYXJjaEJveEluYWN0aXZlIj4KICAgICAgICAgPHNwYW4gY2xhc3M9ImxlZnQiPgogICAgICAgICAgIDxpbWcgaWQ9Ik1TZWFyY2hTZWxlY3QiIHNyYz0ic2VhcmNoL21hZ19zZWwucG5nIgpAQCAtNTUsNzAgKzY2LDEyIEBACiAgICAgICA8bGk+PGEgaHJlZj0iZnVuY3Rpb25zLmh0bWwiPjxzcGFuPkRhdGEmIzE2MDtGaWVsZHM8L3NwYW4+PC9hPjwvbGk+CiAgICAgPC91bD4KICAgPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImhlYWRlciI+Ci0gIDxkaXYgY2xhc3M9InN1bW1hcnkiPgotPGEgaHJlZj0iI3B1Yi1hdHRyaWJzIj5EYXRhIEZpZWxkczwvYT4gIDwvZGl2PgotICA8ZGl2IGNsYXNzPSJoZWFkZXJ0aXRsZSI+Ci08ZGl2IGNsYXNzPSJ0aXRsZSI+dGpzY2FsaW5nZmFjdG9yIFN0cnVjdCBSZWZlcmVuY2U8ZGl2IGNsYXNzPSJpbmdyb3VwcyI+PGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCI+VHVyYm9KUEVHPC9hPjwvZGl2PjwvZGl2PiAgPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImNvbnRlbnRzIj4KLTwhLS0gZG94eXRhZzogY2xhc3M9InRqc2NhbGluZ2ZhY3RvciIgLS0+Ci08cD5TY2FsaW5nIGZhY3Rvci4gIAotIDxhIGhyZWY9InN0cnVjdHRqc2NhbGluZ2ZhY3Rvci5odG1sI2RldGFpbHMiPk1vcmUuLi48L2E+PC9wPgotCi08cD48Y29kZT4jaW5jbHVkZSAmbHQ7dHVyYm9qcGVnLmgmZ3Q7PC9jb2RlPjwvcD4KLTx0YWJsZSBjbGFzcz0ibWVtYmVyZGVjbHMiPgotPHRyPjx0ZCBjb2xzcGFuPSIyIj48aDI+PGEgbmFtZT0icHViLWF0dHJpYnMiPjwvYT4KLURhdGEgRmllbGRzPC9oMj48L3RkPjwvdHI+Ci08dHI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+aW50JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0ic3RydWN0dGpzY2FsaW5nZmFjdG9yLmh0bWwjYTliMDExZTU3Zjk4MWVlMjMwODNlMmMxYWE1ZTY0MGVjIj5udW08L2E+PC90ZD48L3RyPgotPHRyPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+TnVtZXJhdG9yLiAgPGEgaHJlZj0iI2E5YjAxMWU1N2Y5ODFlZTIzMDgzZTJjMWFhNWU2NDBlYyI+PC9hPjxici8+PC90ZD48L3RyPgotPHRyPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPmludCYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9InN0cnVjdHRqc2NhbGluZ2ZhY3Rvci5odG1sI2FlZmJjZGYzZTllNjIyNzRiMmQzMTJjNjk1ZjEzM2NlMyI+ZGVub208L2E+PC90ZD48L3RyPgotPHRyPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+RGVub21pbmF0b3IuICA8YSBocmVmPSIjYWVmYmNkZjNlOWU2MjI3NGIyZDMxMmM2OTVmMTMzY2UzIj48L2E+PGJyLz48L3RkPjwvdHI+Ci08L3RhYmxlPgotPGhyLz48YSBuYW1lPSJkZXRhaWxzIiBpZD0iZGV0YWlscyI+PC9hPjxoMj5EZXRhaWxlZCBEZXNjcmlwdGlvbjwvaDI+Ci08ZGl2IGNsYXNzPSJ0ZXh0YmxvY2siPjxwPlNjYWxpbmcgZmFjdG9yLiA8L3A+Ci08L2Rpdj48aHIvPjxoMj5GaWVsZCBEb2N1bWVudGF0aW9uPC9oMj4KLTxhIGNsYXNzPSJhbmNob3IiIGlkPSJhZWZiY2RmM2U5ZTYyMjc0YjJkMzEyYzY5NWYxMzNjZTMiPjwvYT48IS0tIGRveHl0YWc6IG1lbWJlcj0idGpzY2FsaW5nZmFjdG9yOjpkZW5vbSIgcmVmPSJhZWZiY2RmM2U5ZTYyMjc0YjJkMzEyYzY5NWYxMzNjZTMiIGFyZ3M9IiIgLS0+Ci08ZGl2IGNsYXNzPSJtZW1pdGVtIj4KLTxkaXYgY2xhc3M9Im1lbXByb3RvIj4KLSAgICAgIDx0YWJsZSBjbGFzcz0ibWVtbmFtZSI+Ci0gICAgICAgIDx0cj4KLSAgICAgICAgICA8dGQgY2xhc3M9Im1lbW5hbWUiPmludCA8YSBjbGFzcz0iZWwiIGhyZWY9InN0cnVjdHRqc2NhbGluZ2ZhY3Rvci5odG1sI2FlZmJjZGYzZTllNjIyNzRiMmQzMTJjNjk1ZjEzM2NlMyI+dGpzY2FsaW5nZmFjdG9yOjpkZW5vbTwvYT48L3RkPgotICAgICAgICA8L3RyPgotICAgICAgPC90YWJsZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0ibWVtZG9jIj4KLQotPHA+RGVub21pbmF0b3IuIDwvcD4KLQotPC9kaXY+Ci08L2Rpdj4KLTxhIGNsYXNzPSJhbmNob3IiIGlkPSJhOWIwMTFlNTdmOTgxZWUyMzA4M2UyYzFhYTVlNjQwZWMiPjwvYT48IS0tIGRveHl0YWc6IG1lbWJlcj0idGpzY2FsaW5nZmFjdG9yOjpudW0iIHJlZj0iYTliMDExZTU3Zjk4MWVlMjMwODNlMmMxYWE1ZTY0MGVjIiBhcmdzPSIiIC0tPgotPGRpdiBjbGFzcz0ibWVtaXRlbSI+Ci08ZGl2IGNsYXNzPSJtZW1wcm90byI+Ci0gICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgotICAgICAgICA8dHI+Ci0gICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj5pbnQgPGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anNjYWxpbmdmYWN0b3IuaHRtbCNhOWIwMTFlNTdmOTgxZWUyMzA4M2UyYzFhYTVlNjQwZWMiPnRqc2NhbGluZ2ZhY3Rvcjo6bnVtPC9hPjwvdGQ+Ci0gICAgICAgIDwvdHI+Ci0gICAgICA8L3RhYmxlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJtZW1kb2MiPgotCi08cD5OdW1lcmF0b3IuIDwvcD4KLQotPC9kaXY+Ci08L2Rpdj4KLTxoci8+VGhlIGRvY3VtZW50YXRpb24gZm9yIHRoaXMgc3RydWN0IHdhcyBnZW5lcmF0ZWQgZnJvbSB0aGUgZm9sbG93aW5nIGZpbGU6PHVsPgotPGxpPnR1cmJvanBlZy5oPC9saT4KLTwvdWw+Ci08L2Rpdj4KIDwhLS0gd2luZG93IHNob3dpbmcgdGhlIGZpbHRlciBvcHRpb25zIC0tPgogPGRpdiBpZD0iTVNlYXJjaFNlbGVjdFdpbmRvdyIKICAgICAgb25tb3VzZW92ZXI9InJldHVybiBzZWFyY2hCb3guT25TZWFyY2hTZWxlY3RTaG93KCkiCiAgICAgIG9ubW91c2VvdXQ9InJldHVybiBzZWFyY2hCb3guT25TZWFyY2hTZWxlY3RIaWRlKCkiCiAgICAgIG9ua2V5ZG93bj0icmV0dXJuIHNlYXJjaEJveC5PblNlYXJjaFNlbGVjdEtleShldmVudCkiPgotPGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSgwKSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5BbGw8L2E+PGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSgxKSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5EYXRhIFN0cnVjdHVyZXM8L2E+PGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSgyKSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5WYXJpYWJsZXM8L2E+PC9kaXY+Cis8YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDApIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkFsbDwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDEpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkRhdGEgU3RydWN0dXJlczwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDIpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkZ1bmN0aW9uczwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDMpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPlZhcmlhYmxlczwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDQpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPlR5cGVkZWZzPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oNSkiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+RW51bWVyYXRpb25zPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oNikiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+RW51bWVyYXRvcjwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDcpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkdyb3VwczwvYT48L2Rpdj4KIAogPCEtLSBpZnJhbWUgc2hvd2luZyB0aGUgc2VhcmNoIHJlc3VsdHMgKGNsb3NlZCBieSBkZWZhdWx0KSAtLT4KIDxkaXYgaWQ9Ik1TZWFyY2hSZXN1bHRzV2luZG93Ij4KQEAgLTEyNyw4ICs4MCw2OSBAQAogPC9pZnJhbWU+CiA8L2Rpdj4KIAotPGhyIGNsYXNzPSJmb290ZXIiLz48YWRkcmVzcyBjbGFzcz0iZm9vdGVyIj48c21hbGw+R2VuZXJhdGVkIG9uIEZyaSBKdW4gMjkgMjAxMiAxODoxNDo1NSBmb3IgVHVyYm9KUEVHIGJ5JiMxNjA7Ci08YSBocmVmPSJodHRwOi8vd3d3LmRveHlnZW4ub3JnL2luZGV4Lmh0bWwiPgotPGltZyBjbGFzcz0iZm9vdGVyIiBzcmM9ImRveHlnZW4ucG5nIiBhbHQ9ImRveHlnZW4iLz48L2E+IDEuNy40IDwvc21hbGw+PC9hZGRyZXNzPgorPC9kaXY+PCEtLSB0b3AgLS0+Cis8ZGl2IGNsYXNzPSJoZWFkZXIiPgorICA8ZGl2IGNsYXNzPSJzdW1tYXJ5Ij4KKzxhIGhyZWY9IiNwdWItYXR0cmlicyI+RGF0YSBGaWVsZHM8L2E+ICA8L2Rpdj4KKyAgPGRpdiBjbGFzcz0iaGVhZGVydGl0bGUiPgorPGRpdiBjbGFzcz0idGl0bGUiPnRqc2NhbGluZ2ZhY3RvciBTdHJ1Y3QgUmVmZXJlbmNlPGRpdiBjbGFzcz0iaW5ncm91cHMiPjxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwiPlR1cmJvSlBFRzwvYT48L2Rpdj48L2Rpdj4gIDwvZGl2PgorPC9kaXY+PCEtLWhlYWRlci0tPgorPGRpdiBjbGFzcz0iY29udGVudHMiPgorCis8cD5TY2FsaW5nIGZhY3Rvci4gIAorIDxhIGhyZWY9InN0cnVjdHRqc2NhbGluZ2ZhY3Rvci5odG1sI2RldGFpbHMiPk1vcmUuLi48L2E+PC9wPgorCis8cD48Y29kZT4jaW5jbHVkZSAmbHQ7dHVyYm9qcGVnLmgmZ3Q7PC9jb2RlPjwvcD4KKzx0YWJsZSBjbGFzcz0ibWVtYmVyZGVjbHMiPgorPHRyIGNsYXNzPSJoZWFkaW5nIj48dGQgY29sc3Bhbj0iMiI+PGgyIGNsYXNzPSJncm91cGhlYWRlciI+PGEgbmFtZT0icHViLWF0dHJpYnMiPjwvYT4KK0RhdGEgRmllbGRzPC9oMj48L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWl0ZW06YTliMDExZTU3Zjk4MWVlMjMwODNlMmMxYWE1ZTY0MGVjIj48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj5pbnQmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anNjYWxpbmdmYWN0b3IuaHRtbCNhOWIwMTFlNTdmOTgxZWUyMzA4M2UyYzFhYTVlNjQwZWMiPm51bTwvYT48L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWRlc2M6YTliMDExZTU3Zjk4MWVlMjMwODNlMmMxYWE1ZTY0MGVjIj48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPk51bWVyYXRvci4gIDxhIGhyZWY9IiNhOWIwMTFlNTdmOTgxZWUyMzA4M2UyYzFhYTVlNjQwZWMiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjphOWIwMTFlNTdmOTgxZWUyMzA4M2UyYzFhYTVlNjQwZWMiPjx0ZCBjbGFzcz0ibWVtU2VwYXJhdG9yIiBjb2xzcGFuPSIyIj4mIzE2MDs8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWl0ZW06YWVmYmNkZjNlOWU2MjI3NGIyZDMxMmM2OTVmMTMzY2UzIj48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj5pbnQmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anNjYWxpbmdmYWN0b3IuaHRtbCNhZWZiY2RmM2U5ZTYyMjc0YjJkMzEyYzY5NWYxMzNjZTMiPmRlbm9tPC9hPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtZGVzYzphZWZiY2RmM2U5ZTYyMjc0YjJkMzEyYzY5NWYxMzNjZTMiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+RGVub21pbmF0b3IuICA8YSBocmVmPSIjYWVmYmNkZjNlOWU2MjI3NGIyZDMxMmM2OTVmMTMzY2UzIj5Nb3JlLi4uPC9hPjxici8+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJzZXBhcmF0b3I6YWVmYmNkZjNlOWU2MjI3NGIyZDMxMmM2OTVmMTMzY2UzIj48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPC90YWJsZT4KKzxhIG5hbWU9ImRldGFpbHMiIGlkPSJkZXRhaWxzIj48L2E+PGgyIGNsYXNzPSJncm91cGhlYWRlciI+RGV0YWlsZWQgRGVzY3JpcHRpb248L2gyPgorPGRpdiBjbGFzcz0idGV4dGJsb2NrIj48cD5TY2FsaW5nIGZhY3Rvci4gPC9wPgorPC9kaXY+PGgyIGNsYXNzPSJncm91cGhlYWRlciI+RmllbGQgRG9jdW1lbnRhdGlvbjwvaDI+Cis8YSBjbGFzcz0iYW5jaG9yIiBpZD0iYWVmYmNkZjNlOWU2MjI3NGIyZDMxMmM2OTVmMTMzY2UzIj48L2E+Cis8ZGl2IGNsYXNzPSJtZW1pdGVtIj4KKzxkaXYgY2xhc3M9Im1lbXByb3RvIj4KKyAgICAgIDx0YWJsZSBjbGFzcz0ibWVtbmFtZSI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9Im1lbW5hbWUiPmludCB0anNjYWxpbmdmYWN0b3I6OmRlbm9tPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+Cis8L2Rpdj48ZGl2IGNsYXNzPSJtZW1kb2MiPgorCis8cD5EZW5vbWluYXRvci4gPC9wPgorCis8L2Rpdj4KKzwvZGl2PgorPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImE5YjAxMWU1N2Y5ODFlZTIzMDgzZTJjMWFhNWU2NDBlYyI+PC9hPgorPGRpdiBjbGFzcz0ibWVtaXRlbSI+Cis8ZGl2IGNsYXNzPSJtZW1wcm90byI+CisgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj5pbnQgdGpzY2FsaW5nZmFjdG9yOjpudW08L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKzwvZGl2PjxkaXYgY2xhc3M9Im1lbWRvYyI+CisKKzxwPk51bWVyYXRvci4gPC9wPgorCis8L2Rpdj4KKzwvZGl2PgorPGhyLz5UaGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhpcyBzdHJ1Y3Qgd2FzIGdlbmVyYXRlZCBmcm9tIHRoZSBmb2xsb3dpbmcgZmlsZTo8dWw+Cis8bGk+dHVyYm9qcGVnLmg8L2xpPgorPC91bD4KKzwvZGl2PjwhLS0gY29udGVudHMgLS0+Cis8IS0tIHN0YXJ0IGZvb3RlciBwYXJ0IC0tPgorPGhyIGNsYXNzPSJmb290ZXIiLz48YWRkcmVzcyBjbGFzcz0iZm9vdGVyIj48c21hbGw+CitHZW5lcmF0ZWQgYnkgJiMxNjA7PGEgaHJlZj0iaHR0cDovL3d3dy5kb3h5Z2VuLm9yZy9pbmRleC5odG1sIj4KKzxpbWcgY2xhc3M9ImZvb3RlciIgc3JjPSJkb3h5Z2VuLnBuZyIgYWx0PSJkb3h5Z2VuIi8+Cis8L2E+IDEuOC4zLjEKKzwvc21hbGw+PC9hZGRyZXNzPgogPC9ib2R5PgogPC9odG1sPgpkaWZmIC0tZ2l0IGEvZG9jL2h0bWwvc3RydWN0dGp0cmFuc2Zvcm0uaHRtbCBiL2RvYy9odG1sL3N0cnVjdHRqdHJhbnNmb3JtLmh0bWwKaW5kZXggMGE0NDA5Mi4uODdhNTQwOSAxMDA2NDQKLS0tIGEvZG9jL2h0bWwvc3RydWN0dGp0cmFuc2Zvcm0uaHRtbAorKysgYi9kb2MvaHRtbC9zdHJ1Y3R0anRyYW5zZm9ybS5odG1sCkBAIC0yLDM1ICsyLDQ2IEBACiA8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+CiA8aGVhZD4KIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC94aHRtbDtjaGFyc2V0PVVURi04Ii8+Cis8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPTkiLz4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG94eWdlbiAxLjguMy4xIi8+CiA8dGl0bGU+VHVyYm9KUEVHOiB0anRyYW5zZm9ybSBTdHJ1Y3QgUmVmZXJlbmNlPC90aXRsZT4KIDxsaW5rIGhyZWY9InRhYnMuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIi8+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJqcXVlcnkuanMiPjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iZHluc2VjdGlvbnMuanMiPjwvc2NyaXB0PgogPGxpbmsgaHJlZj0ic2VhcmNoL3NlYXJjaC5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiLz4KIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InNlYXJjaC9zZWFyY2guanMiPjwvc2NyaXB0PgotPGxpbmsgaHJlZj0iZG94eWdlbi5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiLz4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7IHNlYXJjaEJveC5PblNlbGVjdEl0ZW0oMCk7IH0pOworPC9zY3JpcHQ+Cis8bGluayBocmVmPSJkb3h5Z2VuLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgLz4KKzxsaW5rIGhyZWY9ImRveHlnZW4tZXh0cmEuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIi8+CiA8L2hlYWQ+Ci08Ym9keSBvbmxvYWQ9J3NlYXJjaEJveC5PblNlbGVjdEl0ZW0oMCk7Jz4KLTwhLS0gR2VuZXJhdGVkIGJ5IERveHlnZW4gMS43LjQgLS0+Ci08c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQotdmFyIHNlYXJjaEJveCA9IG5ldyBTZWFyY2hCb3goInNlYXJjaEJveCIsICJzZWFyY2giLGZhbHNlLCdTZWFyY2gnKTsKLS0tPjwvc2NyaXB0PgotPGRpdiBpZD0idG9wIj4KKzxib2R5PgorPGRpdiBpZD0idG9wIj48IS0tIGRvIG5vdCByZW1vdmUgdGhpcyBkaXYsIGl0IGlzIGNsb3NlZCBieSBkb3h5Z2VuISAtLT4KIDxkaXYgaWQ9InRpdGxlYXJlYSI+CiA8dGFibGUgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIj4KICA8dGJvZHk+CiAgPHRyIHN0eWxlPSJoZWlnaHQ6IDU2cHg7Ij4KICAgPHRkIHN0eWxlPSJwYWRkaW5nLWxlZnQ6IDAuNWVtOyI+Ci0gICA8ZGl2IGlkPSJwcm9qZWN0bmFtZSI+VHVyYm9KUEVHJiMxNjA7PHNwYW4gaWQ9InByb2plY3RudW1iZXIiPjEuMi4xPC9zcGFuPjwvZGl2PgorICAgPGRpdiBpZD0icHJvamVjdG5hbWUiPlR1cmJvSlBFRworICAgJiMxNjA7PHNwYW4gaWQ9InByb2plY3RudW1iZXIiPjEuMi4xPC9zcGFuPgorICAgPC9kaXY+CiAgIDwvdGQ+CiAgPC90cj4KICA8L3Rib2R5PgogPC90YWJsZT4KIDwvZGl2PgorPCEtLSBlbmQgaGVhZGVyIHBhcnQgLS0+Cis8IS0tIEdlbmVyYXRlZCBieSBEb3h5Z2VuIDEuOC4zLjEgLS0+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Cit2YXIgc2VhcmNoQm94ID0gbmV3IFNlYXJjaEJveCgic2VhcmNoQm94IiwgInNlYXJjaCIsZmFsc2UsJ1NlYXJjaCcpOworPC9zY3JpcHQ+CiAgIDxkaXYgaWQ9Im5hdnJvdzEiIGNsYXNzPSJ0YWJzIj4KICAgICA8dWwgY2xhc3M9InRhYmxpc3QiPgogICAgICAgPGxpPjxhIGhyZWY9ImluZGV4Lmh0bWwiPjxzcGFuPk1haW4mIzE2MDtQYWdlPC9zcGFuPjwvYT48L2xpPgogICAgICAgPGxpPjxhIGhyZWY9Im1vZHVsZXMuaHRtbCI+PHNwYW4+TW9kdWxlczwvc3Bhbj48L2E+PC9saT4KICAgICAgIDxsaSBjbGFzcz0iY3VycmVudCI+PGEgaHJlZj0iYW5ub3RhdGVkLmh0bWwiPjxzcGFuPkRhdGEmIzE2MDtTdHJ1Y3R1cmVzPC9zcGFuPjwvYT48L2xpPgotICAgICAgPGxpIGlkPSJzZWFyY2hsaSI+CisgICAgICA8bGk+CiAgICAgICAgIDxkaXYgaWQ9Ik1TZWFyY2hCb3giIGNsYXNzPSJNU2VhcmNoQm94SW5hY3RpdmUiPgogICAgICAgICA8c3BhbiBjbGFzcz0ibGVmdCI+CiAgICAgICAgICAgPGltZyBpZD0iTVNlYXJjaFNlbGVjdCIgc3JjPSJzZWFyY2gvbWFnX3NlbC5wbmciCkBAIC01NSwxMzQgKzY2LDEyIEBACiAgICAgICA8bGk+PGEgaHJlZj0iZnVuY3Rpb25zLmh0bWwiPjxzcGFuPkRhdGEmIzE2MDtGaWVsZHM8L3NwYW4+PC9hPjwvbGk+CiAgICAgPC91bD4KICAgPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImhlYWRlciI+Ci0gIDxkaXYgY2xhc3M9InN1bW1hcnkiPgotPGEgaHJlZj0iI3B1Yi1hdHRyaWJzIj5EYXRhIEZpZWxkczwvYT4gIDwvZGl2PgotICA8ZGl2IGNsYXNzPSJoZWFkZXJ0aXRsZSI+Ci08ZGl2IGNsYXNzPSJ0aXRsZSI+dGp0cmFuc2Zvcm0gU3RydWN0IFJlZmVyZW5jZTxkaXYgY2xhc3M9ImluZ3JvdXBzIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sIj5UdXJib0pQRUc8L2E+PC9kaXY+PC9kaXY+ICA8L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iY29udGVudHMiPgotPCEtLSBkb3h5dGFnOiBjbGFzcz0idGp0cmFuc2Zvcm0iIC0tPgotPHA+TG9zc2xlc3MgdHJhbnNmb3JtLiAgCi0gPGEgaHJlZj0ic3RydWN0dGp0cmFuc2Zvcm0uaHRtbCNkZXRhaWxzIj5Nb3JlLi4uPC9hPjwvcD4KLQotPHA+PGNvZGU+I2luY2x1ZGUgJmx0O3R1cmJvanBlZy5oJmd0OzwvY29kZT48L3A+Ci08dGFibGUgY2xhc3M9Im1lbWJlcmRlY2xzIj4KLTx0cj48dGQgY29sc3Bhbj0iMiI+PGgyPjxhIG5hbWU9InB1Yi1hdHRyaWJzIj48L2E+Ci1EYXRhIEZpZWxkczwvaDI+PC90ZD48L3RyPgotPHRyPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPjxhIGNsYXNzPSJlbCIgaHJlZj0ic3RydWN0dGpyZWdpb24uaHRtbCI+dGpyZWdpb248L2E+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0ic3RydWN0dGp0cmFuc2Zvcm0uaHRtbCNhYzMyNGU1ZTQ0MmFiZWM4YTk2MWU1YmYyMTlkYjEyY2YiPnI8L2E+PC90ZD48L3RyPgotPHRyPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+Q3JvcHBpbmcgcmVnaW9uLiAgPGEgaHJlZj0iI2FjMzI0ZTVlNDQyYWJlYzhhOTYxZTViZjIxOWRiMTJjZiI+PC9hPjxici8+PC90ZD48L3RyPgotPHRyPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPmludCYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9InN0cnVjdHRqdHJhbnNmb3JtLmh0bWwjYTI1MjVhYWI0YmE2OTc4YTFjMjczZjc0ZmVmNTBlNDk4Ij5vcDwvYT48L3RkPjwvdHI+Ci08dHI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5PbmUgb2YgdGhlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2EyZGU1MzFhZjRlN2U2YzRmMTI0OTA4Mzc2YjM1NDg2NiI+dHJhbnNmb3JtIG9wZXJhdGlvbnM8L2E+LiAgPGEgaHJlZj0iI2EyNTI1YWFiNGJhNjk3OGExYzI3M2Y3NGZlZjUwZTQ5OCI+PC9hPjxici8+PC90ZD48L3RyPgotPHRyPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPmludCYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9InN0cnVjdHRqdHJhbnNmb3JtLmh0bWwjYWMwZTc0NjU1YmFhNDQwMjIwOWEyMWUxYWU0ODFjOGY2Ij5vcHRpb25zPC9hPjwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPlRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvZiBtb3JlIG9mIHRoZSA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhOWM3NzFhNzU3ZmMxMjk0YWRkNjExOTA2Yjg5YWIyZDIiPnRyYW5zZm9ybSBvcHRpb25zPC9hPi4gIDxhIGhyZWY9IiNhYzBlNzQ2NTViYWE0NDAyMjA5YTIxZTFhZTQ4MWM4ZjYiPjwvYT48YnIvPjwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj52b2lkIComIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anRyYW5zZm9ybS5odG1sI2E2ODhmZThmMWE4ZWNjMTJhNTM4ZDllNTYxY2YzMzhlMyI+ZGF0YTwvYT48L3RkPjwvdHI+Ci08dHI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5BcmJpdHJhcnkgZGF0YSB0aGF0IGNhbiBiZSBhY2Nlc3NlZCB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLiAgPGEgaHJlZj0iI2E2ODhmZThmMWE4ZWNjMTJhNTM4ZDllNTYxY2YzMzhlMyI+PC9hPjxici8+PC90ZD48L3RyPgotPHRyPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPmludCgqJiMxNjA7PC90ZD48dGQgY2xhc3M9Im1lbUl0ZW1SaWdodCIgdmFsaWduPSJib3R0b20iPjxhIGNsYXNzPSJlbCIgaHJlZj0ic3RydWN0dGp0cmFuc2Zvcm0uaHRtbCNhNDNlZTFiY2RkMmE4ZDcyNDlhNzU2Nzc0Zjc4NzkzYzEiPmN1c3RvbUZpbHRlcjwvYT4gKShzaG9ydCAqY29lZmZzLCA8YSBjbGFzcz0iZWwiIGhyZWY9InN0cnVjdHRqcmVnaW9uLmh0bWwiPnRqcmVnaW9uPC9hPiBhcnJheVJlZ2lvbiwgPGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anJlZ2lvbi5odG1sIj50anJlZ2lvbjwvYT4gcGxhbmVSZWdpb24sIGludCBjb21wb25lbnRJbmRleCwgaW50IHRyYW5zZm9ybUluZGV4LCBzdHJ1Y3QgPGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anRyYW5zZm9ybS5odG1sIj50anRyYW5zZm9ybTwvYT4gKnRyYW5zZm9ybSk8L3RkPjwvdHI+Ci08dHI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5BIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdG8gbW9kaWZ5IHRoZSBEQ1QgY29lZmZpY2llbnRzIGFmdGVyIHRoZXkgYXJlIGxvc3NsZXNzbHkgdHJhbnNmb3JtZWQgYnV0IGJlZm9yZSB0aGV5IGFyZSB0cmFuc2NvZGVkIHRvIGEgbmV3IEpQRUcgZmlsZS4gIDxhIGhyZWY9IiNhNDNlZTFiY2RkMmE4ZDcyNDlhNzU2Nzc0Zjc4NzkzYzEiPjwvYT48YnIvPjwvdGQ+PC90cj4KLTwvdGFibGU+Ci08aHIvPjxhIG5hbWU9ImRldGFpbHMiIGlkPSJkZXRhaWxzIj48L2E+PGgyPkRldGFpbGVkIERlc2NyaXB0aW9uPC9oMj4KLTxkaXYgY2xhc3M9InRleHRibG9jayI+PHA+TG9zc2xlc3MgdHJhbnNmb3JtLiA8L3A+Ci08L2Rpdj48aHIvPjxoMj5GaWVsZCBEb2N1bWVudGF0aW9uPC9oMj4KLTxhIGNsYXNzPSJhbmNob3IiIGlkPSJhNDNlZTFiY2RkMmE4ZDcyNDlhNzU2Nzc0Zjc4NzkzYzEiPjwvYT48IS0tIGRveHl0YWc6IG1lbWJlcj0idGp0cmFuc2Zvcm06OmN1c3RvbUZpbHRlciIgcmVmPSJhNDNlZTFiY2RkMmE4ZDcyNDlhNzU2Nzc0Zjc4NzkzYzEiIGFyZ3M9Iikoc2hvcnQgKmNvZWZmcywgdGpyZWdpb24gYXJyYXlSZWdpb24sIHRqcmVnaW9uIHBsYW5lUmVnaW9uLCBpbnQgY29tcG9uZW50SW5kZXgsIGludCB0cmFuc2Zvcm1JbmRleCwgc3RydWN0IHRqdHJhbnNmb3JtICp0cmFuc2Zvcm0pIiAtLT4KLTxkaXYgY2xhc3M9Im1lbWl0ZW0iPgotPGRpdiBjbGFzcz0ibWVtcHJvdG8iPgotICAgICAgPHRhYmxlIGNsYXNzPSJtZW1uYW1lIj4KLSAgICAgICAgPHRyPgotICAgICAgICAgIDx0ZCBjbGFzcz0ibWVtbmFtZSI+aW50KCogPGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anRyYW5zZm9ybS5odG1sI2E0M2VlMWJjZGQyYThkNzI0OWE3NTY3NzRmNzg3OTNjMSI+dGp0cmFuc2Zvcm06OmN1c3RvbUZpbHRlcjwvYT4pKHNob3J0ICpjb2VmZnMsIDxhIGNsYXNzPSJlbCIgaHJlZj0ic3RydWN0dGpyZWdpb24uaHRtbCI+dGpyZWdpb248L2E+IGFycmF5UmVnaW9uLCA8YSBjbGFzcz0iZWwiIGhyZWY9InN0cnVjdHRqcmVnaW9uLmh0bWwiPnRqcmVnaW9uPC9hPiBwbGFuZVJlZ2lvbiwgaW50IGNvbXBvbmVudEluZGV4LCBpbnQgdHJhbnNmb3JtSW5kZXgsIHN0cnVjdCA8YSBjbGFzcz0iZWwiIGhyZWY9InN0cnVjdHRqdHJhbnNmb3JtLmh0bWwiPnRqdHJhbnNmb3JtPC9hPiAqdHJhbnNmb3JtKTwvdGQ+Ci0gICAgICAgIDwvdHI+Ci0gICAgICA8L3RhYmxlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJtZW1kb2MiPgotCi08cD5BIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdG8gbW9kaWZ5IHRoZSBEQ1QgY29lZmZpY2llbnRzIGFmdGVyIHRoZXkgYXJlIGxvc3NsZXNzbHkgdHJhbnNmb3JtZWQgYnV0IGJlZm9yZSB0aGV5IGFyZSB0cmFuc2NvZGVkIHRvIGEgbmV3IEpQRUcgZmlsZS4gPC9wPgotPHA+VGhpcyBhbGxvd3MgZm9yIGN1c3RvbSBmaWx0ZXJzIG9yIG90aGVyIHRyYW5zZm9ybWF0aW9ucyB0byBiZSBhcHBsaWVkIGluIHRoZSBmcmVxdWVuY3kgZG9tYWluLjwvcD4KLTxkbD48ZHQ+PGI+UGFyYW1ldGVyczo8L2I+PC9kdD48ZGQ+Ci0gIDx0YWJsZSBjbGFzcz0icGFyYW1zIj4KLSAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPmNvZWZmczwvdGQ+PHRkPnBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgdHJhbnNmb3JtZWQgRENUIGNvZWZmaWNpZW50cy4gKE5PVEU6IHRoaXMgcG9pbnRlciBpcyBub3QgZ3VhcmFudGVlZCB0byBiZSB2YWxpZCBvbmNlIHRoZSBjYWxsYmFjayByZXR1cm5zLCBzbyBhcHBsaWNhdGlvbnMgd2lzaGluZyB0byBoYW5kIG9mZiB0aGUgRENUIGNvZWZmaWNpZW50cyB0byBhbm90aGVyIGZ1bmN0aW9uIG9yIGxpYnJhcnkgc2hvdWxkIG1ha2UgYSBjb3B5IG9mIHRoZW0gd2l0aGluIHRoZSBib2R5IG9mIHRoZSBjYWxsYmFjay4pIDwvdGQ+PC90cj4KLSAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPmFycmF5UmVnaW9uPC90ZD48dGQ+PGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anJlZ2lvbi5odG1sIiB0aXRsZT0iQ3JvcHBpbmcgcmVnaW9uLiI+dGpyZWdpb248L2E+IHN0cnVjdHVyZSBjb250YWluaW5nIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBhcnJheSBwb2ludGVkIHRvIGJ5IDxjb2RlPmNvZWZmczwvY29kZT4gYXMgd2VsbCBhcyBpdHMgb2Zmc2V0IHJlbGF0aXZlIHRvIHRoZSBjb21wb25lbnQgcGxhbmUuIFR1cmJvSlBFRyBpbXBsZW1lbnRhdGlvbnMgbWF5IGNob29zZSB0byBzcGxpdCBlYWNoIGNvbXBvbmVudCBwbGFuZSBpbnRvIG11bHRpcGxlIERDVCBjb2VmZmljaWVudCBhcnJheXMgYW5kIGNhbGwgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG9uY2UgZm9yIGVhY2ggYXJyYXkuIDwvdGQ+PC90cj4KLSAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPnBsYW5lUmVnaW9uPC90ZD48dGQ+PGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anJlZ2lvbi5odG1sIiB0aXRsZT0iQ3JvcHBpbmcgcmVnaW9uLiI+dGpyZWdpb248L2E+IHN0cnVjdHVyZSBjb250YWluaW5nIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBjb21wb25lbnQgcGxhbmUgdG8gd2hpY2ggPGNvZGU+Y29lZmZzPC9jb2RlPiBiZWxvbmdzIDwvdGQ+PC90cj4KLSAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPmNvbXBvbmVudElEPC90ZD48dGQ+SUQgbnVtYmVyIG9mIHRoZSBjb21wb25lbnQgcGxhbmUgdG8gd2hpY2ggPGNvZGU+Y29lZmZzPC9jb2RlPiBiZWxvbmdzIChZLCBDYiwgYW5kIENyIGhhdmUsIHJlc3BlY3RpdmVseSwgSUQncyBvZiAwLCAxLCBhbmQgMiBpbiB0eXBpY2FsIEpQRUcgaW1hZ2VzLikgPC90ZD48L3RyPgotICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+dHJhbnNmb3JtSUQ8L3RkPjx0ZD5JRCBudW1iZXIgb2YgdGhlIHRyYW5zZm9ybWVkIGltYWdlIHRvIHdoaWNoIDxjb2RlPmNvZWZmczwvY29kZT4gYmVsb25ncy4gVGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUgaW5kZXggb2YgdGhlIHRyYW5zZm9ybSBpbiB0aGUgdHJhbnNmb3JtcyBhcnJheSB0aGF0IHdhcyBwYXNzZWQgdG8gPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYWU0MDMxOTNjZWI0YWFmYjdlMGY1NmFiNTg3YjQ4NjE2IiB0aXRsZT0iTG9zc2xlc3NseSB0cmFuc2Zvcm0gYSBKUEVHIGltYWdlIGludG8gYW5vdGhlciBKUEVHIGltYWdlLiI+dGpUcmFuc2Zvcm0oKTwvYT4uIDwvdGQ+PC90cj4KLSAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPnRyYW5zZm9ybTwvdGQ+PHRkPmEgcG9pbnRlciB0byBhIDxhIGNsYXNzPSJlbCIgaHJlZj0ic3RydWN0dGp0cmFuc2Zvcm0uaHRtbCIgdGl0bGU9Ikxvc3NsZXNzIHRyYW5zZm9ybS4iPnRqdHJhbnNmb3JtPC9hPiBzdHJ1Y3R1cmUgdGhhdCBzcGVjaWZpZXMgdGhlIHBhcmFtZXRlcnMgYW5kL29yIGNyb3BwaW5nIHJlZ2lvbiBmb3IgdGhpcyB0cmFuc2Zvcm08L3RkPjwvdHI+Ci0gIDwvdGFibGU+Ci0gIDwvZGQ+Ci08L2RsPgotPGRsIGNsYXNzPSJyZXR1cm4iPjxkdD48Yj5SZXR1cm5zOjwvYj48L2R0PjxkZD4wIGlmIHRoZSBjYWxsYmFjayB3YXMgc3VjY2Vzc2Z1bCwgb3IgLTEgaWYgYW4gZXJyb3Igb2NjdXJyZWQuIDwvZGQ+PC9kbD4KLQotPC9kaXY+Ci08L2Rpdj4KLTxhIGNsYXNzPSJhbmNob3IiIGlkPSJhNjg4ZmU4ZjFhOGVjYzEyYTUzOGQ5ZTU2MWNmMzM4ZTMiPjwvYT48IS0tIGRveHl0YWc6IG1lbWJlcj0idGp0cmFuc2Zvcm06OmRhdGEiIHJlZj0iYTY4OGZlOGYxYThlY2MxMmE1MzhkOWU1NjFjZjMzOGUzIiBhcmdzPSIiIC0tPgotPGRpdiBjbGFzcz0ibWVtaXRlbSI+Ci08ZGl2IGNsYXNzPSJtZW1wcm90byI+Ci0gICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgotICAgICAgICA8dHI+Ci0gICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj52b2lkKiA8YSBjbGFzcz0iZWwiIGhyZWY9InN0cnVjdHRqdHJhbnNmb3JtLmh0bWwjYTY4OGZlOGYxYThlY2MxMmE1MzhkOWU1NjFjZjMzOGUzIj50anRyYW5zZm9ybTo6ZGF0YTwvYT48L3RkPgotICAgICAgICA8L3RyPgotICAgICAgPC90YWJsZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0ibWVtZG9jIj4KLQotPHA+QXJiaXRyYXJ5IGRhdGEgdGhhdCBjYW4gYmUgYWNjZXNzZWQgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbi4gPC9wPgotCi08L2Rpdj4KLTwvZGl2PgotPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImEyNTI1YWFiNGJhNjk3OGExYzI3M2Y3NGZlZjUwZTQ5OCI+PC9hPjwhLS0gZG94eXRhZzogbWVtYmVyPSJ0anRyYW5zZm9ybTo6b3AiIHJlZj0iYTI1MjVhYWI0YmE2OTc4YTFjMjczZjc0ZmVmNTBlNDk4IiBhcmdzPSIiIC0tPgotPGRpdiBjbGFzcz0ibWVtaXRlbSI+Ci08ZGl2IGNsYXNzPSJtZW1wcm90byI+Ci0gICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgotICAgICAgICA8dHI+Ci0gICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj5pbnQgPGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anRyYW5zZm9ybS5odG1sI2EyNTI1YWFiNGJhNjk3OGExYzI3M2Y3NGZlZjUwZTQ5OCI+dGp0cmFuc2Zvcm06Om9wPC9hPjwvdGQ+Ci0gICAgICAgIDwvdHI+Ci0gICAgICA8L3RhYmxlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJtZW1kb2MiPgotCi08cD5PbmUgb2YgdGhlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2EyZGU1MzFhZjRlN2U2YzRmMTI0OTA4Mzc2YjM1NDg2NiI+dHJhbnNmb3JtIG9wZXJhdGlvbnM8L2E+LiA8L3A+Ci0KLTwvZGl2PgotPC9kaXY+Ci08YSBjbGFzcz0iYW5jaG9yIiBpZD0iYWMwZTc0NjU1YmFhNDQwMjIwOWEyMWUxYWU0ODFjOGY2Ij48L2E+PCEtLSBkb3h5dGFnOiBtZW1iZXI9InRqdHJhbnNmb3JtOjpvcHRpb25zIiByZWY9ImFjMGU3NDY1NWJhYTQ0MDIyMDlhMjFlMWFlNDgxYzhmNiIgYXJncz0iIiAtLT4KLTxkaXYgY2xhc3M9Im1lbWl0ZW0iPgotPGRpdiBjbGFzcz0ibWVtcHJvdG8iPgotICAgICAgPHRhYmxlIGNsYXNzPSJtZW1uYW1lIj4KLSAgICAgICAgPHRyPgotICAgICAgICAgIDx0ZCBjbGFzcz0ibWVtbmFtZSI+aW50IDxhIGNsYXNzPSJlbCIgaHJlZj0ic3RydWN0dGp0cmFuc2Zvcm0uaHRtbCNhYzBlNzQ2NTViYWE0NDAyMjA5YTIxZTFhZTQ4MWM4ZjYiPnRqdHJhbnNmb3JtOjpvcHRpb25zPC9hPjwvdGQ+Ci0gICAgICAgIDwvdHI+Ci0gICAgICA8L3RhYmxlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJtZW1kb2MiPgotCi08cD5UaGUgYml0d2lzZSBPUiBvZiBvbmUgb2YgbW9yZSBvZiB0aGUgPGEgY2xhc3M9ImVsIiBocmVmPSJncm91cF9fX3R1cmJvX2pfcF9lX2cuaHRtbCNnYTljNzcxYTc1N2ZjMTI5NGFkZDYxMTkwNmI4OWFiMmQyIj50cmFuc2Zvcm0gb3B0aW9uczwvYT4uIDwvcD4KLQotPC9kaXY+Ci08L2Rpdj4KLTxhIGNsYXNzPSJhbmNob3IiIGlkPSJhYzMyNGU1ZTQ0MmFiZWM4YTk2MWU1YmYyMTlkYjEyY2YiPjwvYT48IS0tIGRveHl0YWc6IG1lbWJlcj0idGp0cmFuc2Zvcm06OnIiIHJlZj0iYWMzMjRlNWU0NDJhYmVjOGE5NjFlNWJmMjE5ZGIxMmNmIiBhcmdzPSIiIC0tPgotPGRpdiBjbGFzcz0ibWVtaXRlbSI+Ci08ZGl2IGNsYXNzPSJtZW1wcm90byI+Ci0gICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgotICAgICAgICA8dHI+Ci0gICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj48YSBjbGFzcz0iZWwiIGhyZWY9InN0cnVjdHRqcmVnaW9uLmh0bWwiPnRqcmVnaW9uPC9hPiA8YSBjbGFzcz0iZWwiIGhyZWY9InN0cnVjdHRqdHJhbnNmb3JtLmh0bWwjYWMzMjRlNWU0NDJhYmVjOGE5NjFlNWJmMjE5ZGIxMmNmIj50anRyYW5zZm9ybTo6cjwvYT48L3RkPgotICAgICAgICA8L3RyPgotICAgICAgPC90YWJsZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0ibWVtZG9jIj4KLQotPHA+Q3JvcHBpbmcgcmVnaW9uLiA8L3A+Ci0KLTwvZGl2PgotPC9kaXY+Ci08aHIvPlRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGlzIHN0cnVjdCB3YXMgZ2VuZXJhdGVkIGZyb20gdGhlIGZvbGxvd2luZyBmaWxlOjx1bD4KLTxsaT50dXJib2pwZWcuaDwvbGk+Ci08L3VsPgotPC9kaXY+CiA8IS0tIHdpbmRvdyBzaG93aW5nIHRoZSBmaWx0ZXIgb3B0aW9ucyAtLT4KIDxkaXYgaWQ9Ik1TZWFyY2hTZWxlY3RXaW5kb3ciCiAgICAgIG9ubW91c2VvdmVyPSJyZXR1cm4gc2VhcmNoQm94Lk9uU2VhcmNoU2VsZWN0U2hvdygpIgogICAgICBvbm1vdXNlb3V0PSJyZXR1cm4gc2VhcmNoQm94Lk9uU2VhcmNoU2VsZWN0SGlkZSgpIgogICAgICBvbmtleWRvd249InJldHVybiBzZWFyY2hCb3guT25TZWFyY2hTZWxlY3RLZXkoZXZlbnQpIj4KLTxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oMCkiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+QWxsPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oMSkiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+RGF0YSBTdHJ1Y3R1cmVzPC9hPjxhIGNsYXNzPSJTZWxlY3RJdGVtIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNlYXJjaEJveC5PblNlbGVjdEl0ZW0oMikiPjxzcGFuIGNsYXNzPSJTZWxlY3Rpb25NYXJrIj4mIzE2MDs8L3NwYW4+VmFyaWFibGVzPC9hPjwvZGl2PgorPGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSgwKSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5BbGw8L2E+PGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSgxKSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5EYXRhIFN0cnVjdHVyZXM8L2E+PGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSgyKSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5GdW5jdGlvbnM8L2E+PGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSgzKSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5WYXJpYWJsZXM8L2E+PGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSg0KSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5UeXBlZGVmczwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDUpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkVudW1lcmF0aW9uczwvYT48YSBjbGFzcz0iU2VsZWN0SXRlbSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJzZWFyY2hCb3guT25TZWxlY3RJdGVtKDYpIj48c3BhbiBjbGFzcz0iU2VsZWN0aW9uTWFyayI+JiMxNjA7PC9zcGFuPkVudW1lcmF0b3I8L2E+PGEgY2xhc3M9IlNlbGVjdEl0ZW0iIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0ic2VhcmNoQm94Lk9uU2VsZWN0SXRlbSg3KSI+PHNwYW4gY2xhc3M9IlNlbGVjdGlvbk1hcmsiPiYjMTYwOzwvc3Bhbj5Hcm91cHM8L2E+PC9kaXY+CiAKIDwhLS0gaWZyYW1lIHNob3dpbmcgdGhlIHNlYXJjaCByZXN1bHRzIChjbG9zZWQgYnkgZGVmYXVsdCkgLS0+CiA8ZGl2IGlkPSJNU2VhcmNoUmVzdWx0c1dpbmRvdyI+CkBAIC0xOTEsOCArODAsMTMzIEBACiA8L2lmcmFtZT4KIDwvZGl2PgogCi08aHIgY2xhc3M9ImZvb3RlciIvPjxhZGRyZXNzIGNsYXNzPSJmb290ZXIiPjxzbWFsbD5HZW5lcmF0ZWQgb24gRnJpIEp1biAyOSAyMDEyIDE4OjE0OjU1IGZvciBUdXJib0pQRUcgYnkmIzE2MDsKLTxhIGhyZWY9Imh0dHA6Ly93d3cuZG94eWdlbi5vcmcvaW5kZXguaHRtbCI+Ci08aW1nIGNsYXNzPSJmb290ZXIiIHNyYz0iZG94eWdlbi5wbmciIGFsdD0iZG94eWdlbiIvPjwvYT4gMS43LjQgPC9zbWFsbD48L2FkZHJlc3M+Cis8L2Rpdj48IS0tIHRvcCAtLT4KKzxkaXYgY2xhc3M9ImhlYWRlciI+CisgIDxkaXYgY2xhc3M9InN1bW1hcnkiPgorPGEgaHJlZj0iI3B1Yi1hdHRyaWJzIj5EYXRhIEZpZWxkczwvYT4gIDwvZGl2PgorICA8ZGl2IGNsYXNzPSJoZWFkZXJ0aXRsZSI+Cis8ZGl2IGNsYXNzPSJ0aXRsZSI+dGp0cmFuc2Zvcm0gU3RydWN0IFJlZmVyZW5jZTxkaXYgY2xhc3M9ImluZ3JvdXBzIj48YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sIj5UdXJib0pQRUc8L2E+PC9kaXY+PC9kaXY+ICA8L2Rpdj4KKzwvZGl2PjwhLS1oZWFkZXItLT4KKzxkaXYgY2xhc3M9ImNvbnRlbnRzIj4KKworPHA+TG9zc2xlc3MgdHJhbnNmb3JtLiAgCisgPGEgaHJlZj0ic3RydWN0dGp0cmFuc2Zvcm0uaHRtbCNkZXRhaWxzIj5Nb3JlLi4uPC9hPjwvcD4KKworPHA+PGNvZGU+I2luY2x1ZGUgJmx0O3R1cmJvanBlZy5oJmd0OzwvY29kZT48L3A+Cis8dGFibGUgY2xhc3M9Im1lbWJlcmRlY2xzIj4KKzx0ciBjbGFzcz0iaGVhZGluZyI+PHRkIGNvbHNwYW49IjIiPjxoMiBjbGFzcz0iZ3JvdXBoZWFkZXIiPjxhIG5hbWU9InB1Yi1hdHRyaWJzIj48L2E+CitEYXRhIEZpZWxkczwvaDI+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1pdGVtOmFjMzI0ZTVlNDQyYWJlYzhhOTYxZTViZjIxOWRiMTJjZiI+PHRkIGNsYXNzPSJtZW1JdGVtTGVmdCIgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+PGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anJlZ2lvbi5odG1sIj50anJlZ2lvbjwvYT4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anRyYW5zZm9ybS5odG1sI2FjMzI0ZTVlNDQyYWJlYzhhOTYxZTViZjIxOWRiMTJjZiI+cjwvYT48L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWRlc2M6YWMzMjRlNWU0NDJhYmVjOGE5NjFlNWJmMjE5ZGIxMmNmIj48dGQgY2xhc3M9Im1kZXNjTGVmdCI+JiMxNjA7PC90ZD48dGQgY2xhc3M9Im1kZXNjUmlnaHQiPkNyb3BwaW5nIHJlZ2lvbi4gIDxhIGhyZWY9IiNhYzMyNGU1ZTQ0MmFiZWM4YTk2MWU1YmYyMTlkYjEyY2YiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjphYzMyNGU1ZTQ0MmFiZWM4YTk2MWU1YmYyMTlkYjEyY2YiPjx0ZCBjbGFzcz0ibWVtU2VwYXJhdG9yIiBjb2xzcGFuPSIyIj4mIzE2MDs8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWl0ZW06YTI1MjVhYWI0YmE2OTc4YTFjMjczZjc0ZmVmNTBlNDk4Ij48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj5pbnQmIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWVtSXRlbVJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anRyYW5zZm9ybS5odG1sI2EyNTI1YWFiNGJhNjk3OGExYzI3M2Y3NGZlZjUwZTQ5OCI+b3A8L2E+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmEyNTI1YWFiNGJhNjk3OGExYzI3M2Y3NGZlZjUwZTQ5OCI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5PbmUgb2YgdGhlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2EyZGU1MzFhZjRlN2U2YzRmMTI0OTA4Mzc2YjM1NDg2NiI+dHJhbnNmb3JtIG9wZXJhdGlvbnM8L2E+LiAgPGEgaHJlZj0iI2EyNTI1YWFiNGJhNjk3OGExYzI3M2Y3NGZlZjUwZTQ5OCI+TW9yZS4uLjwvYT48YnIvPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ic2VwYXJhdG9yOmEyNTI1YWFiNGJhNjk3OGExYzI3M2Y3NGZlZjUwZTQ5OCI+PHRkIGNsYXNzPSJtZW1TZXBhcmF0b3IiIGNvbHNwYW49IjIiPiYjMTYwOzwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtaXRlbTphYzBlNzQ2NTViYWE0NDAyMjA5YTIxZTFhZTQ4MWM4ZjYiPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPmludCYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9InN0cnVjdHRqdHJhbnNmb3JtLmh0bWwjYWMwZTc0NjU1YmFhNDQwMjIwOWEyMWUxYWU0ODFjOGY2Ij5vcHRpb25zPC9hPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtZGVzYzphYzBlNzQ2NTViYWE0NDAyMjA5YTIxZTFhZTQ4MWM4ZjYiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+VGhlIGJpdHdpc2UgT1Igb2Ygb25lIG9mIG1vcmUgb2YgdGhlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E5Yzc3MWE3NTdmYzEyOTRhZGQ2MTE5MDZiODlhYjJkMiI+dHJhbnNmb3JtIG9wdGlvbnM8L2E+LiAgPGEgaHJlZj0iI2FjMGU3NDY1NWJhYTQ0MDIyMDlhMjFlMWFlNDgxYzhmNiI+TW9yZS4uLjwvYT48YnIvPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ic2VwYXJhdG9yOmFjMGU3NDY1NWJhYTQ0MDIyMDlhMjFlMWFlNDgxYzhmNiI+PHRkIGNsYXNzPSJtZW1TZXBhcmF0b3IiIGNvbHNwYW49IjIiPiYjMTYwOzwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtaXRlbTphNjg4ZmU4ZjFhOGVjYzEyYTUzOGQ5ZTU2MWNmMzM4ZTMiPjx0ZCBjbGFzcz0ibWVtSXRlbUxlZnQiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPnZvaWQgKiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9InN0cnVjdHRqdHJhbnNmb3JtLmh0bWwjYTY4OGZlOGYxYThlY2MxMmE1MzhkOWU1NjFjZjMzOGUzIj5kYXRhPC9hPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0ibWVtZGVzYzphNjg4ZmU4ZjFhOGVjYzEyYTUzOGQ5ZTU2MWNmMzM4ZTMiPjx0ZCBjbGFzcz0ibWRlc2NMZWZ0Ij4mIzE2MDs8L3RkPjx0ZCBjbGFzcz0ibWRlc2NSaWdodCI+QXJiaXRyYXJ5IGRhdGEgdGhhdCBjYW4gYmUgYWNjZXNzZWQgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbi4gIDxhIGhyZWY9IiNhNjg4ZmU4ZjFhOGVjYzEyYTUzOGQ5ZTU2MWNmMzM4ZTMiPk1vcmUuLi48L2E+PGJyLz48L3RkPjwvdHI+Cis8dHIgY2xhc3M9InNlcGFyYXRvcjphNjg4ZmU4ZjFhOGVjYzEyYTUzOGQ5ZTU2MWNmMzM4ZTMiPjx0ZCBjbGFzcz0ibWVtU2VwYXJhdG9yIiBjb2xzcGFuPSIyIj4mIzE2MDs8L3RkPjwvdHI+Cis8dHIgY2xhc3M9Im1lbWl0ZW06YTQzZWUxYmNkZDJhOGQ3MjQ5YTc1Njc3NGY3ODc5M2MxIj48dGQgY2xhc3M9Im1lbUl0ZW1MZWZ0IiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj5pbnQoKiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZW1JdGVtUmlnaHQiIHZhbGlnbj0iYm90dG9tIj48YSBjbGFzcz0iZWwiIGhyZWY9InN0cnVjdHRqdHJhbnNmb3JtLmh0bWwjYTQzZWUxYmNkZDJhOGQ3MjQ5YTc1Njc3NGY3ODc5M2MxIj5jdXN0b21GaWx0ZXI8L2E+ICkoc2hvcnQgKmNvZWZmcywgPGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anJlZ2lvbi5odG1sIj50anJlZ2lvbjwvYT4gYXJyYXlSZWdpb24sIDxhIGNsYXNzPSJlbCIgaHJlZj0ic3RydWN0dGpyZWdpb24uaHRtbCI+dGpyZWdpb248L2E+IHBsYW5lUmVnaW9uLCBpbnQgY29tcG9uZW50SW5kZXgsIGludCB0cmFuc2Zvcm1JbmRleCwgc3RydWN0IDxhIGNsYXNzPSJlbCIgaHJlZj0ic3RydWN0dGp0cmFuc2Zvcm0uaHRtbCI+dGp0cmFuc2Zvcm08L2E+ICp0cmFuc2Zvcm0pPC90ZD48L3RyPgorPHRyIGNsYXNzPSJtZW1kZXNjOmE0M2VlMWJjZGQyYThkNzI0OWE3NTY3NzRmNzg3OTNjMSI+PHRkIGNsYXNzPSJtZGVzY0xlZnQiPiYjMTYwOzwvdGQ+PHRkIGNsYXNzPSJtZGVzY1JpZ2h0Ij5BIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdG8gbW9kaWZ5IHRoZSBEQ1QgY29lZmZpY2llbnRzIGFmdGVyIHRoZXkgYXJlIGxvc3NsZXNzbHkgdHJhbnNmb3JtZWQgYnV0IGJlZm9yZSB0aGV5IGFyZSB0cmFuc2NvZGVkIHRvIGEgbmV3IEpQRUcgaW1hZ2UuICA8YSBocmVmPSIjYTQzZWUxYmNkZDJhOGQ3MjQ5YTc1Njc3NGY3ODc5M2MxIj5Nb3JlLi4uPC9hPjxici8+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJzZXBhcmF0b3I6YTQzZWUxYmNkZDJhOGQ3MjQ5YTc1Njc3NGY3ODc5M2MxIj48dGQgY2xhc3M9Im1lbVNlcGFyYXRvciIgY29sc3Bhbj0iMiI+JiMxNjA7PC90ZD48L3RyPgorPC90YWJsZT4KKzxhIG5hbWU9ImRldGFpbHMiIGlkPSJkZXRhaWxzIj48L2E+PGgyIGNsYXNzPSJncm91cGhlYWRlciI+RGV0YWlsZWQgRGVzY3JpcHRpb248L2gyPgorPGRpdiBjbGFzcz0idGV4dGJsb2NrIj48cD5Mb3NzbGVzcyB0cmFuc2Zvcm0uIDwvcD4KKzwvZGl2PjxoMiBjbGFzcz0iZ3JvdXBoZWFkZXIiPkZpZWxkIERvY3VtZW50YXRpb248L2gyPgorPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImE0M2VlMWJjZGQyYThkNzI0OWE3NTY3NzRmNzg3OTNjMSI+PC9hPgorPGRpdiBjbGFzcz0ibWVtaXRlbSI+Cis8ZGl2IGNsYXNzPSJtZW1wcm90byI+CisgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj5pbnQoKiB0anRyYW5zZm9ybTo6Y3VzdG9tRmlsdGVyKShzaG9ydCAqY29lZmZzLCA8YSBjbGFzcz0iZWwiIGhyZWY9InN0cnVjdHRqcmVnaW9uLmh0bWwiPnRqcmVnaW9uPC9hPiBhcnJheVJlZ2lvbiwgPGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anJlZ2lvbi5odG1sIj50anJlZ2lvbjwvYT4gcGxhbmVSZWdpb24sIGludCBjb21wb25lbnRJbmRleCwgaW50IHRyYW5zZm9ybUluZGV4LCBzdHJ1Y3QgPGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anRyYW5zZm9ybS5odG1sIj50anRyYW5zZm9ybTwvYT4gKnRyYW5zZm9ybSk8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKzwvZGl2PjxkaXYgY2xhc3M9Im1lbWRvYyI+CisKKzxwPkEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB0byBtb2RpZnkgdGhlIERDVCBjb2VmZmljaWVudHMgYWZ0ZXIgdGhleSBhcmUgbG9zc2xlc3NseSB0cmFuc2Zvcm1lZCBidXQgYmVmb3JlIHRoZXkgYXJlIHRyYW5zY29kZWQgdG8gYSBuZXcgSlBFRyBpbWFnZS4gPC9wPgorPHA+VGhpcyBhbGxvd3MgZm9yIGN1c3RvbSBmaWx0ZXJzIG9yIG90aGVyIHRyYW5zZm9ybWF0aW9ucyB0byBiZSBhcHBsaWVkIGluIHRoZSBmcmVxdWVuY3kgZG9tYWluLjwvcD4KKzxkbCBjbGFzcz0icGFyYW1zIj48ZHQ+UGFyYW1ldGVyczwvZHQ+PGRkPgorICA8dGFibGUgY2xhc3M9InBhcmFtcyI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5jb2VmZnM8L3RkPjx0ZD5wb2ludGVyIHRvIGFuIGFycmF5IG9mIHRyYW5zZm9ybWVkIERDVCBjb2VmZmljaWVudHMuIChOT1RFOiB0aGlzIHBvaW50ZXIgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgdmFsaWQgb25jZSB0aGUgY2FsbGJhY2sgcmV0dXJucywgc28gYXBwbGljYXRpb25zIHdpc2hpbmcgdG8gaGFuZCBvZmYgdGhlIERDVCBjb2VmZmljaWVudHMgdG8gYW5vdGhlciBmdW5jdGlvbiBvciBsaWJyYXJ5IHNob3VsZCBtYWtlIGEgY29weSBvZiB0aGVtIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgY2FsbGJhY2suKSA8L3RkPjwvdHI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5hcnJheVJlZ2lvbjwvdGQ+PHRkPjxhIGNsYXNzPSJlbCIgaHJlZj0ic3RydWN0dGpyZWdpb24uaHRtbCIgdGl0bGU9IkNyb3BwaW5nIHJlZ2lvbi4iPnRqcmVnaW9uPC9hPiBzdHJ1Y3R1cmUgY29udGFpbmluZyB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgYXJyYXkgcG9pbnRlZCB0byBieSA8Y29kZT5jb2VmZnM8L2NvZGU+IGFzIHdlbGwgYXMgaXRzIG9mZnNldCByZWxhdGl2ZSB0byB0aGUgY29tcG9uZW50IHBsYW5lLiBUdXJib0pQRUcgaW1wbGVtZW50YXRpb25zIG1heSBjaG9vc2UgdG8gc3BsaXQgZWFjaCBjb21wb25lbnQgcGxhbmUgaW50byBtdWx0aXBsZSBEQ1QgY29lZmZpY2llbnQgYXJyYXlzIGFuZCBjYWxsIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBvbmNlIGZvciBlYWNoIGFycmF5LiA8L3RkPjwvdHI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5wbGFuZVJlZ2lvbjwvdGQ+PHRkPjxhIGNsYXNzPSJlbCIgaHJlZj0ic3RydWN0dGpyZWdpb24uaHRtbCIgdGl0bGU9IkNyb3BwaW5nIHJlZ2lvbi4iPnRqcmVnaW9uPC9hPiBzdHJ1Y3R1cmUgY29udGFpbmluZyB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgY29tcG9uZW50IHBsYW5lIHRvIHdoaWNoIDxjb2RlPmNvZWZmczwvY29kZT4gYmVsb25ncyA8L3RkPjwvdHI+CisgICAgPHRyPjx0ZCBjbGFzcz0icGFyYW1uYW1lIj5jb21wb25lbnRJRDwvdGQ+PHRkPklEIG51bWJlciBvZiB0aGUgY29tcG9uZW50IHBsYW5lIHRvIHdoaWNoIDxjb2RlPmNvZWZmczwvY29kZT4gYmVsb25ncyAoWSwgQ2IsIGFuZCBDciBoYXZlLCByZXNwZWN0aXZlbHksIElEJ3Mgb2YgMCwgMSwgYW5kIDIgaW4gdHlwaWNhbCBKUEVHIGltYWdlcy4pIDwvdGQ+PC90cj4KKyAgICA8dHI+PHRkIGNsYXNzPSJwYXJhbW5hbWUiPnRyYW5zZm9ybUlEPC90ZD48dGQ+SUQgbnVtYmVyIG9mIHRoZSB0cmFuc2Zvcm1lZCBpbWFnZSB0byB3aGljaCA8Y29kZT5jb2VmZnM8L2NvZGU+IGJlbG9uZ3MuIFRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlIGluZGV4IG9mIHRoZSB0cmFuc2Zvcm0gaW4gdGhlIDxjb2RlPnRyYW5zZm9ybXM8L2NvZGU+IGFycmF5IHRoYXQgd2FzIHBhc3NlZCB0byA8YSBjbGFzcz0iZWwiIGhyZWY9Imdyb3VwX19fdHVyYm9fal9wX2VfZy5odG1sI2dhZTQwMzE5M2NlYjRhYWZiN2UwZjU2YWI1ODdiNDg2MTYiIHRpdGxlPSJMb3NzbGVzc2x5IHRyYW5zZm9ybSBhIEpQRUcgaW1hZ2UgaW50byBhbm90aGVyIEpQRUcgaW1hZ2UuIj50alRyYW5zZm9ybSgpPC9hPi4gPC90ZD48L3RyPgorICAgIDx0cj48dGQgY2xhc3M9InBhcmFtbmFtZSI+dHJhbnNmb3JtPC90ZD48dGQ+YSBwb2ludGVyIHRvIGEgPGEgY2xhc3M9ImVsIiBocmVmPSJzdHJ1Y3R0anRyYW5zZm9ybS5odG1sIiB0aXRsZT0iTG9zc2xlc3MgdHJhbnNmb3JtLiI+dGp0cmFuc2Zvcm08L2E+IHN0cnVjdHVyZSB0aGF0IHNwZWNpZmllcyB0aGUgcGFyYW1ldGVycyBhbmQvb3IgY3JvcHBpbmcgcmVnaW9uIGZvciB0aGlzIHRyYW5zZm9ybTwvdGQ+PC90cj4KKyAgPC90YWJsZT4KKyAgPC9kZD4KKzwvZGw+Cis8ZGwgY2xhc3M9InNlY3Rpb24gcmV0dXJuIj48ZHQ+UmV0dXJuczwvZHQ+PGRkPjAgaWYgdGhlIGNhbGxiYWNrIHdhcyBzdWNjZXNzZnVsLCBvciAtMSBpZiBhbiBlcnJvciBvY2N1cnJlZC4gPC9kZD48L2RsPgorCis8L2Rpdj4KKzwvZGl2PgorPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImE2ODhmZThmMWE4ZWNjMTJhNTM4ZDllNTYxY2YzMzhlMyI+PC9hPgorPGRpdiBjbGFzcz0ibWVtaXRlbSI+Cis8ZGl2IGNsYXNzPSJtZW1wcm90byI+CisgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj52b2lkKiB0anRyYW5zZm9ybTo6ZGF0YTwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorPC9kaXY+PGRpdiBjbGFzcz0ibWVtZG9jIj4KKworPHA+QXJiaXRyYXJ5IGRhdGEgdGhhdCBjYW4gYmUgYWNjZXNzZWQgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbi4gPC9wPgorCis8L2Rpdj4KKzwvZGl2PgorPGEgY2xhc3M9ImFuY2hvciIgaWQ9ImEyNTI1YWFiNGJhNjk3OGExYzI3M2Y3NGZlZjUwZTQ5OCI+PC9hPgorPGRpdiBjbGFzcz0ibWVtaXRlbSI+Cis8ZGl2IGNsYXNzPSJtZW1wcm90byI+CisgICAgICA8dGFibGUgY2xhc3M9Im1lbW5hbWUiPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGNsYXNzPSJtZW1uYW1lIj5pbnQgdGp0cmFuc2Zvcm06Om9wPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+Cis8L2Rpdj48ZGl2IGNsYXNzPSJtZW1kb2MiPgorCis8cD5PbmUgb2YgdGhlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2EyZGU1MzFhZjRlN2U2YzRmMTI0OTA4Mzc2YjM1NDg2NiI+dHJhbnNmb3JtIG9wZXJhdGlvbnM8L2E+LiA8L3A+CisKKzwvZGl2PgorPC9kaXY+Cis8YSBjbGFzcz0iYW5jaG9yIiBpZD0iYWMwZTc0NjU1YmFhNDQwMjIwOWEyMWUxYWU0ODFjOGY2Ij48L2E+Cis8ZGl2IGNsYXNzPSJtZW1pdGVtIj4KKzxkaXYgY2xhc3M9Im1lbXByb3RvIj4KKyAgICAgIDx0YWJsZSBjbGFzcz0ibWVtbmFtZSI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9Im1lbW5hbWUiPmludCB0anRyYW5zZm9ybTo6b3B0aW9uczwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorPC9kaXY+PGRpdiBjbGFzcz0ibWVtZG9jIj4KKworPHA+VGhlIGJpdHdpc2UgT1Igb2Ygb25lIG9mIG1vcmUgb2YgdGhlIDxhIGNsYXNzPSJlbCIgaHJlZj0iZ3JvdXBfX190dXJib19qX3BfZV9nLmh0bWwjZ2E5Yzc3MWE3NTdmYzEyOTRhZGQ2MTE5MDZiODlhYjJkMiI+dHJhbnNmb3JtIG9wdGlvbnM8L2E+LiA8L3A+CisKKzwvZGl2PgorPC9kaXY+Cis8YSBjbGFzcz0iYW5jaG9yIiBpZD0iYWMzMjRlNWU0NDJhYmVjOGE5NjFlNWJmMjE5ZGIxMmNmIj48L2E+Cis8ZGl2IGNsYXNzPSJtZW1pdGVtIj4KKzxkaXYgY2xhc3M9Im1lbXByb3RvIj4KKyAgICAgIDx0YWJsZSBjbGFzcz0ibWVtbmFtZSI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgY2xhc3M9Im1lbW5hbWUiPjxhIGNsYXNzPSJlbCIgaHJlZj0ic3RydWN0dGpyZWdpb24uaHRtbCI+dGpyZWdpb248L2E+IHRqdHJhbnNmb3JtOjpyPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+Cis8L2Rpdj48ZGl2IGNsYXNzPSJtZW1kb2MiPgorCis8cD5Dcm9wcGluZyByZWdpb24uIDwvcD4KKworPC9kaXY+Cis8L2Rpdj4KKzxoci8+VGhlIGRvY3VtZW50YXRpb24gZm9yIHRoaXMgc3RydWN0IHdhcyBnZW5lcmF0ZWQgZnJvbSB0aGUgZm9sbG93aW5nIGZpbGU6PHVsPgorPGxpPnR1cmJvanBlZy5oPC9saT4KKzwvdWw+Cis8L2Rpdj48IS0tIGNvbnRlbnRzIC0tPgorPCEtLSBzdGFydCBmb290ZXIgcGFydCAtLT4KKzxociBjbGFzcz0iZm9vdGVyIi8+PGFkZHJlc3MgY2xhc3M9ImZvb3RlciI+PHNtYWxsPgorR2VuZXJhdGVkIGJ5ICYjMTYwOzxhIGhyZWY9Imh0dHA6Ly93d3cuZG94eWdlbi5vcmcvaW5kZXguaHRtbCI+Cis8aW1nIGNsYXNzPSJmb290ZXIiIHNyYz0iZG94eWdlbi5wbmciIGFsdD0iZG94eWdlbiIvPgorPC9hPiAxLjguMy4xCis8L3NtYWxsPjwvYWRkcmVzcz4KIDwvYm9keT4KIDwvaHRtbD4KZGlmZiAtLWdpdCBhL2RvYy9odG1sL3N5bmNfb2ZmLnBuZyBiL2RvYy9odG1sL3N5bmNfb2ZmLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjQ0M2ZjCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2h0bWwvc3luY19vZmYucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvYy9odG1sL3N5bmNfb24ucG5nIGIvZG9jL2h0bWwvc3luY19vbi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA4MzIwZgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9odG1sL3N5bmNfb24ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvYy9odG1sL3RhYl9hLnBuZyBiL2RvYy9odG1sL3RhYl9hLnBuZwppbmRleCAyZDk5ZWYyLi4zYjcyNWM0IDEwMDY0NAotLS0gYS9kb2MvaHRtbC90YWJfYS5wbmcKKysrIGIvZG9jL2h0bWwvdGFiX2EucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvYy9odG1sL3RhYl9iLnBuZyBiL2RvYy9odG1sL3RhYl9iLnBuZwppbmRleCBiMmMzZDJiLi5lMmI0YTg2IDEwMDY0NAotLS0gYS9kb2MvaHRtbC90YWJfYi5wbmcKKysrIGIvZG9jL2h0bWwvdGFiX2IucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvYy9odG1sL3RhYl9oLnBuZyBiL2RvYy9odG1sL3RhYl9oLnBuZwppbmRleCBjMTFmNDhmLi5mZDVjYjcwIDEwMDY0NAotLS0gYS9kb2MvaHRtbC90YWJfaC5wbmcKKysrIGIvZG9jL2h0bWwvdGFiX2gucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvYy9odG1sL3RhYl9zLnBuZyBiL2RvYy9odG1sL3RhYl9zLnBuZwppbmRleCA5Nzg5NDNhLi5hYjQ3OGM5IDEwMDY0NAotLS0gYS9kb2MvaHRtbC90YWJfcy5wbmcKKysrIGIvZG9jL2h0bWwvdGFiX3MucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvYy9odG1sL3RhYnMuY3NzIGIvZG9jL2h0bWwvdGFicy5jc3MKaW5kZXggMjE5MjA1Ni4uOWNmNTc4ZiAxMDA2NDQKLS0tIGEvZG9jL2h0bWwvdGFicy5jc3MKKysrIGIvZG9jL2h0bWwvdGFicy5jc3MKQEAgLTMsNiArMyw3IEBACiAgICAgd2lkdGg6IDEwMCU7CiAgICAgei1pbmRleDogMTAxOwogICAgIGZvbnQtc2l6ZTogMTNweDsKKyAgICBmb250LWZhbWlseTogJ0x1Y2lkYSBHcmFuZGUnLEdlbmV2YSxIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZjsKIH0KIAogLnRhYnMyIHsKZGlmZiAtLWdpdCBhL2RveHlnZW4tZXh0cmEuY3NzIGIvZG94eWdlbi1leHRyYS5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFiYmNjMgotLS0gL2Rldi9udWxsCisrKyBiL2RveHlnZW4tZXh0cmEuY3NzCkBAIC0wLDAgKzEsMyBAQAorY29kZSB7CisJY29sb3I6ICM0NjY1QTI7IAorfQpkaWZmIC0tZ2l0IGEvZG94eWdlbi5jb25maWcgYi9kb3h5Z2VuLmNvbmZpZwppbmRleCA1YTBiNWE3Li5mOWU0ZDQ0IDEwMDY0NAotLS0gYS9kb3h5Z2VuLmNvbmZpZworKysgYi9kb3h5Z2VuLmNvbmZpZwpAQCAtMTIsMyArMTIsNSBAQAogSkFWQURPQ19BVVRPQlJJRUYgPSBZRVMKIE1BWF9JTklUSUFMSVpFUl9MSU5FUyA9IDAKIEFMV0FZU19ERVRBSUxFRF9TRUMgPSBZRVMKK0hUTUxfVElNRVNUQU1QID0gTk8KK0hUTUxfRVhUUkFfU1RZTEVTSEVFVCA9IGRveHlnZW4tZXh0cmEuY3NzCmRpZmYgLS1naXQgYS9leGFtcGxlLmMgYi9leGFtcGxlLmMKaW5kZXggMWQ2ZjZjYy4uMGE2NWE2YyAxMDA2NDQKLS0tIGEvZXhhbXBsZS5jCisrKyBiL2V4YW1wbGUuYwpAQCAtNiw3ICs2LDcgQEAKICAqIGNvbmp1bmN0aW9uIHdpdGggdGhlIGRvY3VtZW50YXRpb24gZmlsZSBsaWJqcGVnLnR4dC4KICAqCiAgKiBUaGlzIGNvZGUgd2lsbCBub3QgZG8gYW55dGhpbmcgdXNlZnVsIGFzLWlzLCBidXQgaXQgbWF5IGJlIGhlbHBmdWwgYXMgYQotICogc2tlbGV0b24gZm9yIGNvbnN0cnVjdGluZyByb3V0aW5lcyB0aGF0IGNhbGwgdGhlIEpQRUcgbGlicmFyeS4gIAorICogc2tlbGV0b24gZm9yIGNvbnN0cnVjdGluZyByb3V0aW5lcyB0aGF0IGNhbGwgdGhlIEpQRUcgbGlicmFyeS4KICAqCiAgKiBXZSBwcmVzZW50IHRoZXNlIHJvdXRpbmVzIGluIHRoZSBzYW1lIGNvZGluZyBzdHlsZSB1c2VkIGluIHRoZSBKUEVHIGNvZGUKICAqIChBTlNJIGZ1bmN0aW9uIGRlZmluaXRpb25zLCBldGMpOyBidXQgeW91IGFyZSBvZiBjb3Vyc2UgZnJlZSB0byBjb2RlIHlvdXIKQEAgLTU4LDkgKzU4LDkgQEAKICAqIFJHQiBjb2xvciBhbmQgaXMgZGVzY3JpYmVkIGJ5OgogICovCiAKLWV4dGVybiBKU0FNUExFICogaW1hZ2VfYnVmZmVyOwkvKiBQb2ludHMgdG8gbGFyZ2UgYXJyYXkgb2YgUixHLEItb3JkZXIgZGF0YSAqLwotZXh0ZXJuIGludCBpbWFnZV9oZWlnaHQ7CS8qIE51bWJlciBvZiByb3dzIGluIGltYWdlICovCi1leHRlcm4gaW50IGltYWdlX3dpZHRoOwkJLyogTnVtYmVyIG9mIGNvbHVtbnMgaW4gaW1hZ2UgKi8KK2V4dGVybiBKU0FNUExFICogaW1hZ2VfYnVmZmVyOyAgLyogUG9pbnRzIHRvIGxhcmdlIGFycmF5IG9mIFIsRyxCLW9yZGVyIGRhdGEgKi8KK2V4dGVybiBpbnQgaW1hZ2VfaGVpZ2h0OyAgICAgICAgLyogTnVtYmVyIG9mIHJvd3MgaW4gaW1hZ2UgKi8KK2V4dGVybiBpbnQgaW1hZ2Vfd2lkdGg7ICAgICAgICAgLyogTnVtYmVyIG9mIGNvbHVtbnMgaW4gaW1hZ2UgKi8KIAogCiAvKgpAQCAtODgsOSArODgsOSBAQAogICAgKi8KICAgc3RydWN0IGpwZWdfZXJyb3JfbWdyIGplcnI7CiAgIC8qIE1vcmUgc3R1ZmYgKi8KLSAgRklMRSAqIG91dGZpbGU7CQkvKiB0YXJnZXQgZmlsZSAqLwotICBKU0FNUFJPVyByb3dfcG9pbnRlclsxXTsJLyogcG9pbnRlciB0byBKU0FNUExFIHJvd1tzXSAqLwotICBpbnQgcm93X3N0cmlkZTsJCS8qIHBoeXNpY2FsIHJvdyB3aWR0aCBpbiBpbWFnZSBidWZmZXIgKi8KKyAgRklMRSAqIG91dGZpbGU7ICAgICAgICAgICAgICAgLyogdGFyZ2V0IGZpbGUgKi8KKyAgSlNBTVBST1cgcm93X3BvaW50ZXJbMV07ICAgICAgLyogcG9pbnRlciB0byBKU0FNUExFIHJvd1tzXSAqLworICBpbnQgcm93X3N0cmlkZTsgICAgICAgICAgICAgICAvKiBwaHlzaWNhbCByb3cgd2lkdGggaW4gaW1hZ2UgYnVmZmVyICovCiAKICAgLyogU3RlcCAxOiBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBKUEVHIGNvbXByZXNzaW9uIG9iamVjdCAqLwogCkBAIC0xMjIsMTAgKzEyMiwxMCBAQAogICAvKiBGaXJzdCB3ZSBzdXBwbHkgYSBkZXNjcmlwdGlvbiBvZiB0aGUgaW5wdXQgaW1hZ2UuCiAgICAqIEZvdXIgZmllbGRzIG9mIHRoZSBjaW5mbyBzdHJ1Y3QgbXVzdCBiZSBmaWxsZWQgaW46CiAgICAqLwotICBjaW5mby5pbWFnZV93aWR0aCA9IGltYWdlX3dpZHRoOyAJLyogaW1hZ2Ugd2lkdGggYW5kIGhlaWdodCwgaW4gcGl4ZWxzICovCisgIGNpbmZvLmltYWdlX3dpZHRoID0gaW1hZ2Vfd2lkdGg7ICAgICAgLyogaW1hZ2Ugd2lkdGggYW5kIGhlaWdodCwgaW4gcGl4ZWxzICovCiAgIGNpbmZvLmltYWdlX2hlaWdodCA9IGltYWdlX2hlaWdodDsKLSAgY2luZm8uaW5wdXRfY29tcG9uZW50cyA9IDM7CQkvKiAjIG9mIGNvbG9yIGNvbXBvbmVudHMgcGVyIHBpeGVsICovCi0gIGNpbmZvLmluX2NvbG9yX3NwYWNlID0gSkNTX1JHQjsgCS8qIGNvbG9yc3BhY2Ugb2YgaW5wdXQgaW1hZ2UgKi8KKyAgY2luZm8uaW5wdXRfY29tcG9uZW50cyA9IDM7ICAgICAgICAgICAvKiAjIG9mIGNvbG9yIGNvbXBvbmVudHMgcGVyIHBpeGVsICovCisgIGNpbmZvLmluX2NvbG9yX3NwYWNlID0gSkNTX1JHQjsgICAgICAgLyogY29sb3JzcGFjZSBvZiBpbnB1dCBpbWFnZSAqLwogICAvKiBOb3cgdXNlIHRoZSBsaWJyYXJ5J3Mgcm91dGluZSB0byBzZXQgZGVmYXVsdCBjb21wcmVzc2lvbiBwYXJhbWV0ZXJzLgogICAgKiAoWW91IG11c3Qgc2V0IGF0IGxlYXN0IGNpbmZvLmluX2NvbG9yX3NwYWNlIGJlZm9yZSBjYWxsaW5nIHRoaXMsCiAgICAqIHNpbmNlIHRoZSBkZWZhdWx0cyBkZXBlbmQgb24gdGhlIHNvdXJjZSBjb2xvciBzcGFjZS4pCkBAIC0xNTEsNyArMTUxLDcgQEAKICAgICogVG8ga2VlcCB0aGluZ3Mgc2ltcGxlLCB3ZSBwYXNzIG9uZSBzY2FubGluZSBwZXIgY2FsbDsgeW91IGNhbiBwYXNzCiAgICAqIG1vcmUgaWYgeW91IHdpc2gsIHRob3VnaC4KICAgICovCi0gIHJvd19zdHJpZGUgPSBpbWFnZV93aWR0aCAqIDM7CS8qIEpTQU1QTEVzIHBlciByb3cgaW4gaW1hZ2VfYnVmZmVyICovCisgIHJvd19zdHJpZGUgPSBpbWFnZV93aWR0aCAqIDM7IC8qIEpTQU1QTEVzIHBlciByb3cgaW4gaW1hZ2VfYnVmZmVyICovCiAKICAgd2hpbGUgKGNpbmZvLm5leHRfc2NhbmxpbmUgPCBjaW5mby5pbWFnZV9oZWlnaHQpIHsKICAgICAvKiBqcGVnX3dyaXRlX3NjYW5saW5lcyBleHBlY3RzIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIHNjYW5saW5lcy4KQEAgLTI0OCw5ICsyNDgsOSBAQAogICovCiAKIHN0cnVjdCBteV9lcnJvcl9tZ3IgewotICBzdHJ1Y3QganBlZ19lcnJvcl9tZ3IgcHViOwkvKiAicHVibGljIiBmaWVsZHMgKi8KKyAgc3RydWN0IGpwZWdfZXJyb3JfbWdyIHB1YjsgICAgLyogInB1YmxpYyIgZmllbGRzICovCiAKLSAgam1wX2J1ZiBzZXRqbXBfYnVmZmVyOwkvKiBmb3IgcmV0dXJuIHRvIGNhbGxlciAqLworICBqbXBfYnVmIHNldGptcF9idWZmZXI7ICAgICAgICAvKiBmb3IgcmV0dXJuIHRvIGNhbGxlciAqLwogfTsKIAogdHlwZWRlZiBzdHJ1Y3QgbXlfZXJyb3JfbWdyICogbXlfZXJyb3JfcHRyOwpAQCAtMjkzLDkgKzI5Myw5IEBACiAgICAqLwogICBzdHJ1Y3QgbXlfZXJyb3JfbWdyIGplcnI7CiAgIC8qIE1vcmUgc3R1ZmYgKi8KLSAgRklMRSAqIGluZmlsZTsJCS8qIHNvdXJjZSBmaWxlICovCi0gIEpTQU1QQVJSQVkgYnVmZmVyOwkJLyogT3V0cHV0IHJvdyBidWZmZXIgKi8KLSAgaW50IHJvd19zdHJpZGU7CQkvKiBwaHlzaWNhbCByb3cgd2lkdGggaW4gb3V0cHV0IGJ1ZmZlciAqLworICBGSUxFICogaW5maWxlOyAgICAgICAgICAgICAgICAvKiBzb3VyY2UgZmlsZSAqLworICBKU0FNUEFSUkFZIGJ1ZmZlcjsgICAgICAgICAgICAvKiBPdXRwdXQgcm93IGJ1ZmZlciAqLworICBpbnQgcm93X3N0cmlkZTsgICAgICAgICAgICAgICAvKiBwaHlzaWNhbCByb3cgd2lkdGggaW4gb3V0cHV0IGJ1ZmZlciAqLwogCiAgIC8qIEluIHRoaXMgZXhhbXBsZSB3ZSB3YW50IHRvIG9wZW4gdGhlIGlucHV0IGZpbGUgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UsCiAgICAqIHNvIHRoYXQgdGhlIHNldGptcCgpIGVycm9yIHJlY292ZXJ5IGJlbG93IGNhbiBhc3N1bWUgdGhlIGZpbGUgaXMgb3Blbi4KQEAgLTM1NiwxMiArMzU2LDEyIEBACiAgICAqIG91dHB1dCBpbWFnZSBkaW1lbnNpb25zIGF2YWlsYWJsZSwgYXMgd2VsbCBhcyB0aGUgb3V0cHV0IGNvbG9ybWFwCiAgICAqIGlmIHdlIGFza2VkIGZvciBjb2xvciBxdWFudGl6YXRpb24uCiAgICAqIEluIHRoaXMgZXhhbXBsZSwgd2UgbmVlZCB0byBtYWtlIGFuIG91dHB1dCB3b3JrIGJ1ZmZlciBvZiB0aGUgcmlnaHQgc2l6ZS4KLSAgICovIAorICAgKi8KICAgLyogSlNBTVBMRXMgcGVyIHJvdyBpbiBvdXRwdXQgYnVmZmVyICovCiAgIHJvd19zdHJpZGUgPSBjaW5mby5vdXRwdXRfd2lkdGggKiBjaW5mby5vdXRwdXRfY29tcG9uZW50czsKICAgLyogTWFrZSBhIG9uZS1yb3ctaGlnaCBzYW1wbGUgYXJyYXkgdGhhdCB3aWxsIGdvIGF3YXkgd2hlbiBkb25lIHdpdGggaW1hZ2UgKi8KICAgYnVmZmVyID0gKCpjaW5mby5tZW0tPmFsbG9jX3NhcnJheSkKLQkJKChqX2NvbW1vbl9wdHIpICZjaW5mbywgSlBPT0xfSU1BR0UsIHJvd19zdHJpZGUsIDEpOworICAgICAgICAgICAgICAgICgoal9jb21tb25fcHRyKSAmY2luZm8sIEpQT09MX0lNQUdFLCByb3dfc3RyaWRlLCAxKTsKIAogICAvKiBTdGVwIDY6IHdoaWxlIChzY2FuIGxpbmVzIHJlbWFpbiB0byBiZSByZWFkKSAqLwogICAvKiAgICAgICAgICAganBlZ19yZWFkX3NjYW5saW5lcyguLi4pOyAqLwpkaWZmIC0tZ2l0IGEvZmlsZWxpc3QudHh0IGIvZmlsZWxpc3QudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTExNWFhLi4wMDAwMDAwCi0tLSBhL2ZpbGVsaXN0LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDIxNiArMCwwIEBACi1JSkcgSlBFRyBMSUJSQVJZOiAgRklMRSBMSVNUCi0KLVRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlOgotQ29weXJpZ2h0IChDKSAxOTk0LTIwMDksIFRob21hcyBHLiBMYW5lLCBHdWlkbyBWb2xsYmVkaW5nLgotTW9kaWZpY2F0aW9uczoKLUNvcHlyaWdodCAoQykgMjAxMCwgRC4gUi4gQ29tbWFuZGVyLgotRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgotCi0KLUhlcmUgaXMgYSByb2FkIG1hcCB0byB0aGUgZmlsZXMgaW4gdGhlIElKRyBKUEVHIGRpc3RyaWJ1dGlvbi4gIFRoZQotZGlzdHJpYnV0aW9uIGluY2x1ZGVzIHRoZSBKUEVHIGxpYnJhcnkgcHJvcGVyLCBwbHVzIHR3byBhcHBsaWNhdGlvbgotcHJvZ3JhbXMgKCJjanBlZyIgYW5kICJkanBlZyIpIHdoaWNoIHVzZSB0aGUgbGlicmFyeSB0byBjb252ZXJ0IEpQRUcKLWZpbGVzIHRvIGFuZCBmcm9tIHNvbWUgb3RoZXIgcG9wdWxhciBpbWFnZSBmb3JtYXRzLiAgQSB0aGlyZCBhcHBsaWNhdGlvbgotImpwZWd0cmFuIiB1c2VzIHRoZSBsaWJyYXJ5IHRvIGRvIGxvc3NsZXNzIGNvbnZlcnNpb24gYmV0d2VlbiBkaWZmZXJlbnQKLXZhcmlhbnRzIG9mIEpQRUcuICBUaGVyZSBhcmUgYWxzbyB0d28gc3RhbmQtYWxvbmUgYXBwbGljYXRpb25zLAotInJkanBnY29tIiBhbmQgIndyanBnY29tIi4KLQotCi1USEUgSlBFRyBMSUJSQVJZCi09PT09PT09PT09PT09PT09Ci0KLUluY2x1ZGUgZmlsZXM6Ci0KLWpwZWdsaWIuaAlKUEVHIGxpYnJhcnkncyBleHBvcnRlZCBkYXRhIGFuZCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMuCi1qY29uZmlnLmgJQ29uZmlndXJhdGlvbiBkZWNsYXJhdGlvbnMuICBOb3RlOiB0aGlzIGZpbGUgaXMgbm90IHByZXNlbnQKLQkJaW4gdGhlIGRpc3RyaWJ1dGlvbjsgaXQgaXMgZ2VuZXJhdGVkIGR1cmluZyBpbnN0YWxsYXRpb24uCi1qbW9yZWNmZy5oCUFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBkZWNsYXJhdGlvbnM7IG5lZWQgbm90IGJlIGNoYW5nZWQKLQkJZm9yIGEgc3RhbmRhcmQgaW5zdGFsbGF0aW9uLgotamVycm9yLmgJRGVjbGFyZXMgSlBFRyBsaWJyYXJ5J3MgZXJyb3IgYW5kIHRyYWNlIG1lc3NhZ2UgY29kZXMuCi1qaW5jbHVkZS5oCUNlbnRyYWwgaW5jbHVkZSBmaWxlIHVzZWQgYnkgYWxsIElKRyAuYyBmaWxlcyB0byByZWZlcmVuY2UKLQkJc3lzdGVtIGluY2x1ZGUgZmlsZXMuCi1qcGVnaW50LmgJSlBFRyBsaWJyYXJ5J3MgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLgotamNodWZmLmgJUHJpdmF0ZSBkZWNsYXJhdGlvbnMgZm9yIEh1ZmZtYW4gZW5jb2RlciBtb2R1bGVzLgotamRodWZmLmgJUHJpdmF0ZSBkZWNsYXJhdGlvbnMgZm9yIEh1ZmZtYW4gZGVjb2RlciBtb2R1bGVzLgotamRjdC5oCQlQcml2YXRlIGRlY2xhcmF0aW9ucyBmb3IgZm9yd2FyZCAmIHJldmVyc2UgRENUIHN1YnN5c3RlbXMuCi1qbWVtc3lzLmgJUHJpdmF0ZSBkZWNsYXJhdGlvbnMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4KLWp2ZXJzaW9uLmgJVmVyc2lvbiBpbmZvcm1hdGlvbi4KLQotQXBwbGljYXRpb25zIHVzaW5nIHRoZSBsaWJyYXJ5IHNob3VsZCBpbmNsdWRlIGpwZWdsaWIuaCAod2hpY2ggaW4gdHVybgotaW5jbHVkZXMgamNvbmZpZy5oIGFuZCBqbW9yZWNmZy5oKS4gIE9wdGlvbmFsbHksIGplcnJvci5oIG1heSBiZSBpbmNsdWRlZAotaWYgdGhlIGFwcGxpY2F0aW9uIG5lZWRzIHRvIHJlZmVyZW5jZSBpbmRpdmlkdWFsIEpQRUcgZXJyb3IgY29kZXMuICBUaGUKLW90aGVyIGluY2x1ZGUgZmlsZXMgYXJlIGludGVuZGVkIGZvciBpbnRlcm5hbCB1c2UgYW5kIHdvdWxkIG5vdCBub3JtYWxseQotYmUgaW5jbHVkZWQgYnkgYW4gYXBwbGljYXRpb24gcHJvZ3JhbS4gIChjanBlZy9kanBlZy9ldGMgZG8gdXNlIGppbmNsdWRlLmgsCi1zaW5jZSBpdHMgZnVuY3Rpb24gaXMgdG8gaW1wcm92ZSBwb3J0YWJpbGl0eSBvZiB0aGUgd2hvbGUgSUpHIGRpc3RyaWJ1dGlvbi4KLU1vc3Qgb3RoZXIgYXBwbGljYXRpb25zIHdpbGwgZGlyZWN0bHkgaW5jbHVkZSB0aGUgc3lzdGVtIGluY2x1ZGUgZmlsZXMgdGhleQotd2FudCwgYW5kIGhlbmNlIHdvbid0IG5lZWQgamluY2x1ZGUuaC4pCi0KLQotQyBzb3VyY2UgY29kZSBmaWxlczoKLQotVGhlc2UgZmlsZXMgY29udGFpbiBtb3N0IG9mIHRoZSBmdW5jdGlvbnMgaW50ZW5kZWQgdG8gYmUgY2FsbGVkIGRpcmVjdGx5IGJ5Ci1hbiBhcHBsaWNhdGlvbiBwcm9ncmFtOgotCi1qY2FwaW1pbi5jCUFwcGxpY2F0aW9uIHByb2dyYW0gaW50ZXJmYWNlOiBjb3JlIHJvdXRpbmVzIGZvciBjb21wcmVzc2lvbi4KLWpjYXBpc3RkLmMJQXBwbGljYXRpb24gcHJvZ3JhbSBpbnRlcmZhY2U6IHN0YW5kYXJkIGNvbXByZXNzaW9uLgotamRhcGltaW4uYwlBcHBsaWNhdGlvbiBwcm9ncmFtIGludGVyZmFjZTogY29yZSByb3V0aW5lcyBmb3IgZGVjb21wcmVzc2lvbi4KLWpkYXBpc3RkLmMJQXBwbGljYXRpb24gcHJvZ3JhbSBpbnRlcmZhY2U6IHN0YW5kYXJkIGRlY29tcHJlc3Npb24uCi1qY29tYXBpLmMJQXBwbGljYXRpb24gcHJvZ3JhbSBpbnRlcmZhY2Ugcm91dGluZXMgY29tbW9uIHRvIGNvbXByZXNzaW9uCi0JCWFuZCBkZWNvbXByZXNzaW9uLgotamNwYXJhbS5jCUNvbXByZXNzaW9uIHBhcmFtZXRlciBzZXR0aW5nIGhlbHBlciByb3V0aW5lcy4KLWpjdHJhbnMuYwlBUEkgYW5kIGxpYnJhcnkgcm91dGluZXMgZm9yIHRyYW5zY29kaW5nIGNvbXByZXNzaW9uLgotamR0cmFucy5jCUFQSSBhbmQgbGlicmFyeSByb3V0aW5lcyBmb3IgdHJhbnNjb2RpbmcgZGVjb21wcmVzc2lvbi4KLQotQ29tcHJlc3Npb24gc2lkZSBvZiB0aGUgbGlicmFyeToKLQotamNpbml0LmMJSW5pdGlhbGl6YXRpb246IGRldGVybWluZXMgd2hpY2ggb3RoZXIgbW9kdWxlcyB0byB1c2UuCi1qY21hc3Rlci5jCU1hc3RlciBjb250cm9sOiBzZXR1cCBhbmQgaW50ZXItcGFzcyBzZXF1ZW5jaW5nIGxvZ2ljLgotamNtYWluY3QuYwlNYWluIGJ1ZmZlciBjb250cm9sbGVyIChwcmVwcm9jZXNzb3IgPT4gSlBFRyBjb21wcmVzc29yKS4KLWpjcHJlcGN0LmMJUHJlcHJvY2Vzc29yIGJ1ZmZlciBjb250cm9sbGVyLgotamNjb2VmY3QuYwlCdWZmZXIgY29udHJvbGxlciBmb3IgRENUIGNvZWZmaWNpZW50IGJ1ZmZlci4KLWpjY29sb3IuYwlDb2xvciBzcGFjZSBjb252ZXJzaW9uLgotamNzYW1wbGUuYwlEb3duc2FtcGxpbmcuCi1qY2RjdG1nci5jCURDVCBtYW5hZ2VyIChEQ1QgaW1wbGVtZW50YXRpb24gc2VsZWN0aW9uICYgY29udHJvbCkuCi1qZmRjdGludC5jCUZvcndhcmQgRENUIHVzaW5nIHNsb3ctYnV0LWFjY3VyYXRlIGludGVnZXIgbWV0aG9kLgotamZkY3Rmc3QuYwlGb3J3YXJkIERDVCB1c2luZyBmYXN0ZXIsIGxlc3MgYWNjdXJhdGUgaW50ZWdlciBtZXRob2QuCi1qZmRjdGZsdC5jCUZvcndhcmQgRENUIHVzaW5nIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMuCi1qY2h1ZmYuYwlIdWZmbWFuIGVudHJvcHkgY29kaW5nIGZvciBzZXF1ZW50aWFsIEpQRUcuCi1qY3BodWZmLmMJSHVmZm1hbiBlbnRyb3B5IGNvZGluZyBmb3IgcHJvZ3Jlc3NpdmUgSlBFRy4KLWpjYXJpdGguYwlBcml0aG1ldGljIGVudHJvcHkgY29kaW5nLgotamNtYXJrZXIuYwlKUEVHIG1hcmtlciB3cml0aW5nLgotamRhdGFkc3QuYwlEYXRhIGRlc3RpbmF0aW9uIG1hbmFnZXJzIGZvciBtZW1vcnkgYW5kIHN0ZGlvIG91dHB1dC4KLQotRGVjb21wcmVzc2lvbiBzaWRlIG9mIHRoZSBsaWJyYXJ5OgotCi1qZG1hc3Rlci5jCU1hc3RlciBjb250cm9sOiBkZXRlcm1pbmVzIHdoaWNoIG90aGVyIG1vZHVsZXMgdG8gdXNlLgotamRpbnB1dC5jCUlucHV0IGNvbnRyb2xsZXI6IGNvbnRyb2xzIGlucHV0IHByb2Nlc3NpbmcgbW9kdWxlcy4KLWpkbWFpbmN0LmMJTWFpbiBidWZmZXIgY29udHJvbGxlciAoSlBFRyBkZWNvbXByZXNzb3IgPT4gcG9zdHByb2Nlc3NvcikuCi1qZGNvZWZjdC5jCUJ1ZmZlciBjb250cm9sbGVyIGZvciBEQ1QgY29lZmZpY2llbnQgYnVmZmVyLgotamRwb3N0Y3QuYwlQb3N0cHJvY2Vzc29yIGJ1ZmZlciBjb250cm9sbGVyLgotamRtYXJrZXIuYwlKUEVHIG1hcmtlciByZWFkaW5nLgotamRodWZmLmMJSHVmZm1hbiBlbnRyb3B5IGRlY29kaW5nIGZvciBzZXF1ZW50aWFsIEpQRUcuCi1qZHBodWZmLmMJSHVmZm1hbiBlbnRyb3B5IGRlY29kaW5nIGZvciBwcm9ncmVzc2l2ZSBKUEVHLgotamRhcml0aC5jCUFyaXRobWV0aWMgZW50cm9weSBkZWNvZGluZy4KLWpkZGN0bWdyLmMJSURDVCBtYW5hZ2VyIChJRENUIGltcGxlbWVudGF0aW9uIHNlbGVjdGlvbiAmIGNvbnRyb2wpLgotamlkY3RpbnQuYwlJbnZlcnNlIERDVCB1c2luZyBzbG93LWJ1dC1hY2N1cmF0ZSBpbnRlZ2VyIG1ldGhvZC4KLWppZGN0ZnN0LmMJSW52ZXJzZSBEQ1QgdXNpbmcgZmFzdGVyLCBsZXNzIGFjY3VyYXRlIGludGVnZXIgbWV0aG9kLgotamlkY3RmbHQuYwlJbnZlcnNlIERDVCB1c2luZyBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljLgotamlkY3RyZWQuYwlJbnZlcnNlIERDVHMgd2l0aCByZWR1Y2VkLXNpemUgb3V0cHV0cy4KLWpkc2FtcGxlLmMJVXBzYW1wbGluZy4KLWpkY29sb3IuYwlDb2xvciBzcGFjZSBjb252ZXJzaW9uLgotamRtZXJnZS5jCU1lcmdlZCB1cHNhbXBsaW5nL2NvbG9yIGNvbnZlcnNpb24gKGZhc3RlciwgbG93ZXIgcXVhbGl0eSkuCi1qcXVhbnQxLmMJT25lLXBhc3MgY29sb3IgcXVhbnRpemF0aW9uIHVzaW5nIGEgZml4ZWQtc3BhY2luZyBjb2xvcm1hcC4KLWpxdWFudDIuYwlUd28tcGFzcyBjb2xvciBxdWFudGl6YXRpb24gdXNpbmcgYSBjdXN0b20tZ2VuZXJhdGVkIGNvbG9ybWFwLgotCQlBbHNvIGhhbmRsZXMgb25lLXBhc3MgcXVhbnRpemF0aW9uIHRvIGFuIGV4dGVybmFsbHkgZ2l2ZW4gbWFwLgotamRhdGFzcmMuYwlEYXRhIHNvdXJjZSBtYW5hZ2VycyBmb3IgbWVtb3J5IGFuZCBzdGRpbyBpbnB1dC4KLQotU3VwcG9ydCBmaWxlcyBmb3IgYm90aCBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbjoKLQotamFyaWNvbS5jCVRhYmxlcyBmb3IgY29tbW9uIHVzZSBpbiBhcml0aG1ldGljIGVudHJvcHkgZW5jb2RpbmcgYW5kCi0JCWRlY29kaW5nIHJvdXRpbmVzLgotamVycm9yLmMJU3RhbmRhcmQgZXJyb3IgaGFuZGxpbmcgcm91dGluZXMgKGFwcGxpY2F0aW9uIHJlcGxhY2VhYmxlKS4KLWptZW1tZ3IuYwlTeXN0ZW0taW5kZXBlbmRlbnQgKG1vcmUgb3IgbGVzcykgbWVtb3J5IG1hbmFnZW1lbnQgY29kZS4KLWp1dGlscy5jCU1pc2NlbGxhbmVvdXMgdXRpbGl0eSByb3V0aW5lcy4KLQotam1lbW1nci5jIHJlbGllcyBvbiBhIHN5c3RlbS1kZXBlbmRlbnQgbWVtb3J5IG1hbmFnZW1lbnQgbW9kdWxlLiAgVGhlIElKRwotZGlzdHJpYnV0aW9uIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBzeXN0ZW0tZGVwZW5kZW50Ci1tb2R1bGU6Ci0KLWptZW1ub2JzLmMJIk5vIGJhY2tpbmcgc3RvcmUiOiBhc3N1bWVzIGFkZXF1YXRlIHZpcnR1YWwgbWVtb3J5IGV4aXN0cy4KLWptZW1hbnNpLmMJTWFrZXMgdGVtcG9yYXJ5IGZpbGVzIHdpdGggQU5TSS1zdGFuZGFyZCByb3V0aW5lIHRtcGZpbGUoKS4KLWptZW1uYW1lLmMJTWFrZXMgdGVtcG9yYXJ5IGZpbGVzIHdpdGggcHJvZ3JhbS1nZW5lcmF0ZWQgZmlsZSBuYW1lcy4KLWptZW1kb3MuYwlDdXN0b20gaW1wbGVtZW50YXRpb24gZm9yIE1TLURPUyAoMTYtYml0IGVudmlyb25tZW50IG9ubHkpOgotCQljYW4gdXNlIGV4dGVuZGVkIGFuZCBleHBhbmRlZCBtZW1vcnkgYXMgd2VsbCBhcyB0ZW1wIGZpbGVzLgotam1lbW1hYy5jCUN1c3RvbSBpbXBsZW1lbnRhdGlvbiBmb3IgQXBwbGUgTWFjaW50b3NoLgotCi1FeGFjdGx5IG9uZSBvZiB0aGUgc3lzdGVtLWRlcGVuZGVudCBtb2R1bGVzIHNob3VsZCBiZSBjb25maWd1cmVkIGludG8gYW4KLWluc3RhbGxlZCBKUEVHIGxpYnJhcnkgKHNlZSBpbnN0YWxsLnR4dCBmb3IgaGludHMgYWJvdXQgd2hpY2ggb25lIHRvIHVzZSkuCi1PbiB1bnVzdWFsIHN5c3RlbXMgeW91IG1heSBmaW5kIGl0IHdvcnRod2hpbGUgdG8gbWFrZSBhIHNwZWNpYWwKLXN5c3RlbS1kZXBlbmRlbnQgbWVtb3J5IG1hbmFnZXIuCi0KLQotTm9uLUMgc291cmNlIGNvZGUgZmlsZXM6Ci0KLWptZW1kb3NhLmFzbQk4MHg4NiBhc3NlbWJseSBjb2RlIHN1cHBvcnQgZm9yIGptZW1kb3MuYzsgdXNlZCBvbmx5IGluCi0JCU1TLURPUy1zcGVjaWZpYyBjb25maWd1cmF0aW9ucyBvZiB0aGUgSlBFRyBsaWJyYXJ5LgotCi0KLUNKUEVHL0RKUEVHL0pQRUdUUkFOCi09PT09PT09PT09PT09PT09PT09PQotCi1JbmNsdWRlIGZpbGVzOgotCi1jZGpwZWcuaAlEZWNsYXJhdGlvbnMgc2hhcmVkIGJ5IGNqcGVnL2RqcGVnL2pwZWd0cmFuIG1vZHVsZXMuCi1jZGVycm9yLmgJQWRkaXRpb25hbCBlcnJvciBhbmQgdHJhY2UgbWVzc2FnZSBjb2RlcyBmb3IgY2pwZWcgZXQgYWwuCi10cmFuc3VwcC5oCURlY2xhcmF0aW9ucyBmb3IganBlZ3RyYW4gc3VwcG9ydCByb3V0aW5lcyBpbiB0cmFuc3VwcC5jLgotCi1DIHNvdXJjZSBjb2RlIGZpbGVzOgotCi1janBlZy5jCQlNYWluIHByb2dyYW0gZm9yIGNqcGVnLgotZGpwZWcuYwkJTWFpbiBwcm9ncmFtIGZvciBkanBlZy4KLWpwZWd0cmFuLmMJTWFpbiBwcm9ncmFtIGZvciBqcGVndHJhbi4KLWNkanBlZy5jCVV0aWxpdHkgcm91dGluZXMgdXNlZCBieSBhbGwgdGhyZWUgcHJvZ3JhbXMuCi1yZGNvbG1hcC5jCUNvZGUgdG8gcmVhZCBhIGNvbG9ybWFwIGZpbGUgZm9yIGRqcGVnJ3MgIi1tYXAiIHN3aXRjaC4KLXJkc3dpdGNoLmMJQ29kZSB0byBwcm9jZXNzIHNvbWUgb2YgY2pwZWcncyBtb3JlIGNvbXBsZXggc3dpdGNoZXMuCi0JCUFsc28gdXNlZCBieSBqcGVndHJhbi4KLXRyYW5zdXBwLmMJU3VwcG9ydCBjb2RlIGZvciBqcGVndHJhbjogbG9zc2xlc3MgaW1hZ2UgbWFuaXB1bGF0aW9ucy4KLQotSW1hZ2UgZmlsZSByZWFkZXIgbW9kdWxlcyBmb3IgY2pwZWc6Ci0KLXJkYm1wLmMJCUJNUCBmaWxlIGlucHV0LgotcmRnaWYuYwkJR0lGIGZpbGUgaW5wdXQgKG5vdyBqdXN0IGEgc3R1YikuCi1yZHBwbS5jCQlQUE0vUEdNIGZpbGUgaW5wdXQuCi1yZHJsZS5jCQlVdGFoIFJMRSBmaWxlIGlucHV0LgotcmR0YXJnYS5jCVRhcmdhIGZpbGUgaW5wdXQuCi0KLUltYWdlIGZpbGUgd3JpdGVyIG1vZHVsZXMgZm9yIGRqcGVnOgotCi13cmJtcC5jCQlCTVAgZmlsZSBvdXRwdXQuCi13cmdpZi5jCQlHSUYgZmlsZSBvdXRwdXQgKGEgbWVyZSBzaGFkb3cgb2YgaXRzIGZvcm1lciBzZWxmKS4KLXdycHBtLmMJCVBQTS9QR00gZmlsZSBvdXRwdXQuCi13cnJsZS5jCQlVdGFoIFJMRSBmaWxlIG91dHB1dC4KLXdydGFyZ2EuYwlUYXJnYSBmaWxlIG91dHB1dC4KLQotCi1SREpQR0NPTS9XUkpQR0NPTQotPT09PT09PT09PT09PT09PT0KLQotQyBzb3VyY2UgY29kZSBmaWxlczoKLQotcmRqcGdjb20uYwlTdGFuZC1hbG9uZSByZGpwZ2NvbSBhcHBsaWNhdGlvbi4KLXdyanBnY29tLmMJU3RhbmQtYWxvbmUgd3JqcGdjb20gYXBwbGljYXRpb24uCi0KLVRoZXNlIHByb2dyYW1zIGRvIG5vdCBkZXBlbmQgb24gdGhlIElKRyBsaWJyYXJ5LiAgVGhleSBkbyB1c2UKLWpjb25maWcuaCBhbmQgamluY2x1ZGUuaCwgb25seSB0byBpbXByb3ZlIHBvcnRhYmlsaXR5LgotCi0KLUFERElUSU9OQUwgRklMRVMKLT09PT09PT09PT09PT09PT0KLQotRG9jdW1lbnRhdGlvbiAoc2VlIFJFQURNRSBmb3IgYSBndWlkZSB0byB0aGUgZG9jdW1lbnRhdGlvbiBmaWxlcyk6Ci0KLVJFQURNRQkJTWFzdGVyIGRvY3VtZW50YXRpb24gZmlsZS4KLSoudHh0CQlPdGhlciBkb2N1bWVudGF0aW9uIGZpbGVzLgotKi4xCQlEb2N1bWVudGF0aW9uIGluIFVuaXggbWFuIHBhZ2UgZm9ybWF0LgotY2hhbmdlLmxvZwlWZXJzaW9uLXRvLXZlcnNpb24gY2hhbmdlIGhpZ2hsaWdodHMuCi1leGFtcGxlLmMJU2FtcGxlIGNvZGUgZm9yIGNhbGxpbmcgSlBFRyBsaWJyYXJ5LgotCi1Db25maWd1cmF0aW9uL2luc3RhbGxhdGlvbiBmaWxlcyBhbmQgcHJvZ3JhbXMgKHNlZSBpbnN0YWxsLnR4dCBmb3IgbW9yZSBpbmZvKToKLQotY29uZmlndXJlCVVuaXggc2hlbGwgc2NyaXB0IHRvIHBlcmZvcm0gYXV0b21hdGljIGNvbmZpZ3VyYXRpb24uCi1jb25maWd1cmUuYWMJU291cmNlIGZpbGUgZm9yIHVzZSB3aXRoIEF1dG9jb25mIHRvIGdlbmVyYXRlIGNvbmZpZ3VyZS4KLWx0bWFpbi5zaAlTdXBwb3J0IHNjcmlwdHMgZm9yIGNvbmZpZ3VyZSAoZnJvbSBHTlUgbGlidG9vbCkuCi1jb25maWcuZ3Vlc3MKLWNvbmZpZy5zdWIKLWRlcGNvbXAKLW1pc3NpbmcKLWluc3RhbGwtc2gJSW5zdGFsbCBzaGVsbCBzY3JpcHQgZm9yIHRob3NlIFVuaXggc3lzdGVtcyBsYWNraW5nIG9uZS4KLU1ha2VmaWxlLmluCU1ha2VmaWxlIGlucHV0IGZvciBjb25maWd1cmUuCi1NYWtlZmlsZS5hbQlTb3VyY2UgZmlsZSBmb3IgdXNlIHdpdGggQXV0b21ha2UgdG8gZ2VuZXJhdGUgTWFrZWZpbGUuaW4uCi1qY29uZmlnLnR4dAlUZW1wbGF0ZSBmb3IgbWFraW5nIGpjb25maWcuaCBieSBoYW5kLgotYWNsb2NhbC5tNAlNNCBtYWNybyBkZWZpbml0aW9ucyBmb3IgdXNlIHdpdGggQXV0b2NvbmYuCi0KLVRlc3QgZmlsZXMgKHNlZSBpbnN0YWxsLnR4dCBmb3IgdGVzdCBwcm9jZWR1cmUpOgotCi10ZXN0Ki4qCQlTb3VyY2UgYW5kIGNvbXBhcmlzb24gZmlsZXMgZm9yIGNvbmZpZGVuY2UgdGVzdC4KLQkJVGhlc2UgYXJlIGJpbmFyeSBpbWFnZSBmaWxlcywgTk9UIHRleHQgZmlsZXMuCmRpZmYgLS1naXQgYS9pbnN0YWxsLnR4dCBiL2luc3RhbGwudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzI3ZGM0Li4wMDAwMDAwCi0tLSBhL2luc3RhbGwudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTA5NiArMCwwIEBACi1JTlNUQUxMQVRJT04gSU5TVFJVQ1RJT05TIGZvciB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIEpQRUcgc29mdHdhcmUKLQotQ29weXJpZ2h0IChDKSAxOTkxLTIwMTAsIFRob21hcyBHLiBMYW5lLCBHdWlkbyBWb2xsYmVkaW5nLgotVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KLUZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KLQotCi1UaGlzIGZpbGUgZXhwbGFpbnMgaG93IHRvIGNvbmZpZ3VyZSBhbmQgaW5zdGFsbCB0aGUgSUpHIHNvZnR3YXJlLiAgV2UgaGF2ZQotdHJpZWQgdG8gbWFrZSB0aGlzIHNvZnR3YXJlIGV4dHJlbWVseSBwb3J0YWJsZSBhbmQgZmxleGlibGUsIHNvIHRoYXQgaXQgY2FuIGJlCi1hZGFwdGVkIHRvIGFsbW9zdCBhbnkgZW52aXJvbm1lbnQuICBUaGUgZG93bnNpZGUgb2YgdGhpcyBkZWNpc2lvbiBpcyB0aGF0IHRoZQotaW5zdGFsbGF0aW9uIHByb2Nlc3MgaXMgY29tcGxpY2F0ZWQuICBXZSBoYXZlIHByb3ZpZGVkIHNob3J0Y3V0cyB0byBzaW1wbGlmeQotdGhlIHRhc2sgb24gY29tbW9uIHN5c3RlbXMuICBCdXQgaW4gYW55IGNhc2UsIHlvdSB3aWxsIG5lZWQgYXQgbGVhc3QgYSBsaXR0bGUKLWZhbWlsaWFyaXR5IHdpdGggQyBwcm9ncmFtbWluZyBhbmQgcHJvZ3JhbSBidWlsZCBwcm9jZWR1cmVzIGZvciB5b3VyIHN5c3RlbS4KLQotSWYgeW91IGFyZSBvbmx5IHVzaW5nIHRoaXMgc29mdHdhcmUgYXMgcGFydCBvZiBhIGxhcmdlciBwcm9ncmFtLCB0aGUgbGFyZ2VyCi1wcm9ncmFtJ3MgaW5zdGFsbGF0aW9uIHByb2NlZHVyZSBtYXkgdGFrZSBjYXJlIG9mIGNvbmZpZ3VyaW5nIHRoZSBJSkcgY29kZS4KLUZvciBleGFtcGxlLCBHaG9zdHNjcmlwdCdzIGluc3RhbGxhdGlvbiBzY3JpcHQgd2lsbCBjb25maWd1cmUgdGhlIElKRyBjb2RlLgotWW91IGRvbid0IG5lZWQgdG8gcmVhZCB0aGlzIGZpbGUgaWYgeW91IGp1c3Qgd2FudCB0byBjb21waWxlIEdob3N0c2NyaXB0LgotCi1JZiB5b3UgYXJlIG9uIGEgVW5peCBtYWNoaW5lLCB5b3UgbWF5IG5vdCBuZWVkIHRvIHJlYWQgdGhpcyBmaWxlIGF0IGFsbC4KLVRyeSBkb2luZwotCS4vY29uZmlndXJlCi0JbWFrZQotCW1ha2UgdGVzdAotSWYgdGhhdCBkb2Vzbid0IGNvbXBsYWluLCBkbwotCW1ha2UgaW5zdGFsbAotKGJldHRlciBkbyAibWFrZSAtbiBpbnN0YWxsIiBmaXJzdCB0byBzZWUgaWYgdGhlIG1ha2VmaWxlIHdpbGwgcHV0IHRoZSBmaWxlcwotd2hlcmUgeW91IHdhbnQgdGhlbSkuICBSZWFkIGZ1cnRoZXIgaWYgeW91IHJ1biBpbnRvIHNuYWdzIG9yIHdhbnQgdG8gY3VzdG9taXplCi10aGUgY29kZSBmb3IgeW91ciBzeXN0ZW0uCi0KLQotVEFCTEUgT0YgQ09OVEVOVFMKLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUJlZm9yZSB5b3Ugc3RhcnQKLUNvbmZpZ3VyaW5nIHRoZSBzb2Z0d2FyZToKLQl1c2luZyB0aGUgYXV0b21hdGljICJjb25maWd1cmUiIHNjcmlwdAotCXVzaW5nIG9uZSBvZiB0aGUgc3VwcGxpZWQgamNvbmZpZyBhbmQgbWFrZWZpbGUgZmlsZXMKLQlieSBoYW5kCi1CdWlsZGluZyB0aGUgc29mdHdhcmUKLVRlc3RpbmcgdGhlIHNvZnR3YXJlCi1JbnN0YWxsaW5nIHRoZSBzb2Z0d2FyZQotT3B0aW9uYWwgc3R1ZmYKLU9wdGltaXphdGlvbgotSGludHMgZm9yIHNwZWNpZmljIHN5c3RlbXMKLQotCi1CRUZPUkUgWU9VIFNUQVJUCi09PT09PT09PT09PT09PT09Ci0KLUJlZm9yZSBpbnN0YWxsaW5nIHRoZSBzb2Z0d2FyZSB5b3UgbXVzdCB1bnBhY2sgdGhlIGRpc3RyaWJ1dGVkIHNvdXJjZSBjb2RlLgotU2luY2UgeW91IGFyZSByZWFkaW5nIHRoaXMgZmlsZSwgeW91IGhhdmUgcHJvYmFibHkgYWxyZWFkeSBzdWNjZWVkZWQgaW4gdGhpcwotdGFzay4gIEhvd2V2ZXIsIHRoZXJlIGlzIGEgcG90ZW50aWFsIGZvciBlcnJvciBpZiB5b3UgbmVlZGVkIHRvIGNvbnZlcnQgdGhlCi1maWxlcyB0byB0aGUgbG9jYWwgc3RhbmRhcmQgdGV4dCBmaWxlIGZvcm1hdCAoZm9yIGV4YW1wbGUsIGlmIHlvdSBhcmUgb24KLU1TLURPUyB5b3UgbWF5IGhhdmUgY29udmVydGVkIExGIGVuZC1vZi1saW5lIHRvIENSL0xGKS4gIFlvdSBtdXN0IGFwcGx5Ci1zdWNoIGNvbnZlcnNpb24gdG8gYWxsIHRoZSBmaWxlcyBFWENFUFQgdGhvc2Ugd2hvc2UgbmFtZXMgYmVnaW4gd2l0aCAidGVzdCIuCi1UaGUgdGVzdCBmaWxlcyBjb250YWluIGJpbmFyeSBkYXRhOyBpZiB5b3UgY2hhbmdlIHRoZW0gaW4gYW55IHdheSB0aGVuIHRoZQotc2VsZi10ZXN0IHdpbGwgZ2l2ZSBiYWQgcmVzdWx0cy4KLQotUGxlYXNlIGNoZWNrIHRoZSBsYXN0IHNlY3Rpb24gb2YgdGhpcyBmaWxlIHRvIHNlZSBpZiB0aGVyZSBhcmUgaGludHMgZm9yIHRoZQotc3BlY2lmaWMgbWFjaGluZSBvciBjb21waWxlciB5b3UgYXJlIHVzaW5nLgotCi0KLUNPTkZJR1VSSU5HIFRIRSBTT0ZUV0FSRQotPT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVRvIGNvbmZpZ3VyZSB0aGUgSUpHIGNvZGUgZm9yIHlvdXIgc3lzdGVtLCB5b3UgbmVlZCB0byBjcmVhdGUgdHdvIGZpbGVzOgotICAqIGpjb25maWcuaDogY29udGFpbnMgdmFsdWVzIGZvciBzeXN0ZW0tZGVwZW5kZW50ICNkZWZpbmUgc3ltYm9scy4KLSAgKiBNYWtlZmlsZTogY29udHJvbHMgdGhlIGNvbXBpbGF0aW9uIHByb2Nlc3MuCi0oT24gYSBub24tVW5peCBtYWNoaW5lLCB5b3UgbWF5IGNyZWF0ZSAicHJvamVjdCBmaWxlcyIgb3Igc29tZSBvdGhlcgotc3Vic3RpdHV0ZSBmb3IgYSBNYWtlZmlsZS4gIGpjb25maWcuaCBpcyBuZWVkZWQgaW4gYW55IGVudmlyb25tZW50LikKLQotV2UgcHJvdmlkZSB0aHJlZSBkaWZmZXJlbnQgd2F5cyB0byBnZW5lcmF0ZSB0aGVzZSBmaWxlczoKLSAgKiBPbiBhIFVuaXggc3lzdGVtLCB5b3UgY2FuIGp1c3QgcnVuIHRoZSAiY29uZmlndXJlIiBzY3JpcHQuCi0gICogV2UgcHJvdmlkZSBzYW1wbGUgamNvbmZpZyBmaWxlcyBhbmQgbWFrZWZpbGVzIGZvciBwb3B1bGFyIG1hY2hpbmVzOwotICAgIGlmIHlvdXIgbWFjaGluZSBtYXRjaGVzIG9uZSBvZiB0aGUgc2FtcGxlcywganVzdCBjb3B5IHRoZSByaWdodCBzYW1wbGUKLSAgICBmaWxlcyB0byBqY29uZmlnLmggYW5kIE1ha2VmaWxlLgotICAqIElmIGFsbCBlbHNlIGZhaWxzLCByZWFkIHRoZSBpbnN0cnVjdGlvbnMgYmVsb3cgYW5kIG1ha2UgeW91ciBvd24gZmlsZXMuCi0KLQotQ29uZmlndXJpbmcgdGhlIHNvZnR3YXJlIHVzaW5nIHRoZSBhdXRvbWF0aWMgImNvbmZpZ3VyZSIgc2NyaXB0Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSWYgeW91IGFyZSBvbiBhIFVuaXggbWFjaGluZSwgeW91IGNhbiBqdXN0IHR5cGUKLQkuL2NvbmZpZ3VyZQotYW5kIGxldCB0aGUgY29uZmlndXJlIHNjcmlwdCBjb25zdHJ1Y3QgYXBwcm9wcmlhdGUgY29uZmlndXJhdGlvbiBmaWxlcy4KLUlmIHlvdSdyZSB1c2luZyAiY3NoIiBvbiBhbiBvbGQgdmVyc2lvbiBvZiBTeXN0ZW0gViwgeW91IG1pZ2h0IG5lZWQgdG8gdHlwZQotCXNoIGNvbmZpZ3VyZQotaW5zdGVhZCB0byBwcmV2ZW50IGNzaCBmcm9tIHRyeWluZyB0byBleGVjdXRlIGNvbmZpZ3VyZSBpdHNlbGYuCi1FeHBlY3QgY29uZmlndXJlIHRvIHJ1biBmb3IgYSBmZXcgbWludXRlcywgcGFydGljdWxhcmx5IG9uIHNsb3dlciBtYWNoaW5lczsKLWl0IHdvcmtzIGJ5IGNvbXBpbGluZyBhIHNlcmllcyBvZiB0ZXN0IHByb2dyYW1zLgotCi1Db25maWd1cmUgd2FzIGNyZWF0ZWQgd2l0aCBHTlUgQXV0b2NvbmYgYW5kIGl0IGZvbGxvd3MgdGhlIHVzdWFsIGNvbnZlbnRpb25zCi1mb3IgR05VIGNvbmZpZ3VyZSBzY3JpcHRzLiAgSXQgbWFrZXMgYSBmZXcgYXNzdW1wdGlvbnMgdGhhdCB5b3UgbWF5IHdhbnQgdG8KLW92ZXJyaWRlLiAgWW91IGNhbiBkbyB0aGlzIGJ5IHByb3ZpZGluZyBvcHRpb25hbCBzd2l0Y2hlcyB0byBjb25maWd1cmU6Ci0KLSogQ29uZmlndXJlIHdpbGwgYnVpbGQgYm90aCBzdGF0aWMgYW5kIHNoYXJlZCBsaWJyYXJpZXMsIGlmIHBvc3NpYmxlLgotSWYgeW91IHdhbnQgdG8gYnVpbGQgbGlianBlZyBvbmx5IGFzIGEgc3RhdGljIGxpYnJhcnksIHNheQotCS4vY29uZmlndXJlIC0tZGlzYWJsZS1zaGFyZWQKLUlmIHlvdSB3YW50IHRvIGJ1aWxkIGxpYmpwZWcgb25seSBhcyBhIHNoYXJlZCBsaWJyYXJ5LCBzYXkKLQkuL2NvbmZpZ3VyZSAtLWRpc2FibGUtc3RhdGljCi1Db25maWd1cmUgdXNlcyBHTlUgbGlidG9vbCB0byB0YWtlIGNhcmUgb2Ygc3lzdGVtLWRlcGVuZGVudCBzaGFyZWQgbGlicmFyeQotYnVpbGRpbmcgbWV0aG9kcy4KLQotKiBDb25maWd1cmUgd2lsbCB1c2UgZ2NjIChHTlUgQyBjb21waWxlcikgaWYgaXQncyBhdmFpbGFibGUsIG90aGVyd2lzZSBjYy4KLVRvIGZvcmNlIGEgcGFydGljdWxhciBjb21waWxlciB0byBiZSBzZWxlY3RlZCwgdXNlIHRoZSBDQyBvcHRpb24sIGZvciBleGFtcGxlCi0JLi9jb25maWd1cmUgQ0M9J2NjJwotVGhlIHNhbWUgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIGluY2x1ZGUgYW55IHVudXN1YWwgY29tcGlsZXIgc3dpdGNoZXMuCi1Gb3IgZXhhbXBsZSwgb24gSFAtVVggeW91IHByb2JhYmx5IHdhbnQgdG8gc2F5Ci0JLi9jb25maWd1cmUgQ0M9J2NjIC1BYScKLXRvIGdldCBIUCdzIGNvbXBpbGVyIHRvIHJ1biBpbiBBTlNJIG1vZGUuCi0KLSogVGhlIGRlZmF1bHQgQ0ZMQUdTIHNldHRpbmcgaXMgIi1nIiBmb3Igbm9uLWdjYyBjb21waWxlcnMsICItZyAtTzIiIGZvciBnY2MuCi1Zb3UgY2FuIG92ZXJyaWRlIHRoaXMgYnkgc2F5aW5nLCBmb3IgZXhhbXBsZSwKLQkuL2NvbmZpZ3VyZSBDRkxBR1M9Jy1PMicKLWlmIHlvdSB3YW50IHRvIGNvbXBpbGUgd2l0aG91dCBkZWJ1Z2dpbmcgc3VwcG9ydC4KLQotKiBDb25maWd1cmUgd2lsbCBzZXQgdXAgdGhlIG1ha2VmaWxlIHNvIHRoYXQgIm1ha2UgaW5zdGFsbCIgd2lsbCBpbnN0YWxsIGZpbGVzCi1pbnRvIC91c3IvbG9jYWwvYmluLCAvdXNyL2xvY2FsL21hbiwgZXRjLiAgWW91IGNhbiBzcGVjaWZ5IGFuIGluc3RhbGxhdGlvbgotcHJlZml4IG90aGVyIHRoYW4gIi91c3IvbG9jYWwiIGJ5IGdpdmluZyBjb25maWd1cmUgdGhlIG9wdGlvbiAiLS1wcmVmaXg9UEFUSCIuCi0KLSogSWYgeW91IGRvbid0IGhhdmUgYSBsb3Qgb2Ygc3dhcCBzcGFjZSwgeW91IG1heSBuZWVkIHRvIGVuYWJsZSB0aGUgSUpHCi1zb2Z0d2FyZSdzIGludGVybmFsIHZpcnR1YWwgbWVtb3J5IG1lY2hhbmlzbS4gIFRvIGRvIHRoaXMsIGdpdmUgdGhlIG9wdGlvbgotIi0tZW5hYmxlLW1heG1lbT1OIiB3aGVyZSBOIGlzIHRoZSBkZWZhdWx0IG1heG1lbW9yeSBsaW1pdCBpbiBtZWdhYnl0ZXMuCi1UaGlzIGlzIGRpc2N1c3NlZCBpbiBtb3JlIGRldGFpbCB1bmRlciAiU2VsZWN0aW5nIGEgbWVtb3J5IG1hbmFnZXIiLCBiZWxvdy4KLVlvdSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoaXMgb24gcmVhc29uYWJseS1zaXplZCBVbml4IG1hY2hpbmVzLAotdW5sZXNzIHlvdSBwbGFuIHRvIHByb2Nlc3MgdmVyeSBsYXJnZSBpbWFnZXMuCi0KLUNvbmZpZ3VyZSBoYXMgc29tZSBvdGhlciBmZWF0dXJlcyB0aGF0IGFyZSB1c2VmdWwgaWYgeW91IGFyZSBjcm9zcy1jb21waWxpbmcKLW9yIHdvcmtpbmcgaW4gYSBuZXR3b3JrIG9mIG11bHRpcGxlIG1hY2hpbmUgdHlwZXM7IGJ1dCBpZiB5b3UgbmVlZCB0aG9zZQotZmVhdHVyZXMsIHlvdSBwcm9iYWJseSBhbHJlYWR5IGtub3cgaG93IHRvIHVzZSB0aGVtLgotCi0KLUNvbmZpZ3VyaW5nIHRoZSBzb2Z0d2FyZSB1c2luZyBvbmUgb2YgdGhlIHN1cHBsaWVkIGpjb25maWcgYW5kIG1ha2VmaWxlIGZpbGVzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1JZiB5b3UgaGF2ZSBvbmUgb2YgdGhlc2Ugc3lzdGVtcywgeW91IGNhbiBqdXN0IHVzZSB0aGUgcHJvdmlkZWQgY29uZmlndXJhdGlvbgotZmlsZXM6Ci0KLU1ha2VmaWxlCWpjb25maWcgZmlsZQlTeXN0ZW0gYW5kL29yIGNvbXBpbGVyCi0KLW1ha2VmaWxlLm1hbngJamNvbmZpZy5tYW54CUFtaWdhLCBNYW54IEF6dGVjIEMKLW1ha2VmaWxlLnNhcwlqY29uZmlnLnNhcwlBbWlnYSwgU0FTIEMKLW1ha2Vwcm9qLm1hYwlqY29uZmlnLm1hYwlBcHBsZSBNYWNpbnRvc2gsIE1ldHJvd2Vya3MgQ29kZVdhcnJpb3IKLW1haypqcGVnLnN0CWpjb25maWcuc3QJQXRhcmkgU1QvU1RFL1RULCBQdXJlIEMgb3IgVHVyYm8gQwotbWFrZWZpbGUuYmNjCWpjb25maWcuYmNjCU1TLURPUyBvciBPUy8yLCBCb3JsYW5kIEMKLW1ha2VmaWxlLmRqCWpjb25maWcuZGoJTVMtRE9TLCBESkdQUCAoRGVsb3JpZSdzIHBvcnQgb2YgR05VIEMpCi1tYWtlZmlsZS5tYzYJamNvbmZpZy5tYzYJTVMtRE9TLCBNaWNyb3NvZnQgQyAoMTYtYml0IG9ubHkpCi1tYWtlZmlsZS53YXQJamNvbmZpZy53YXQJTVMtRE9TLCBPUy8yLCBvciBXaW5kb3dzIE5ULCBXYXRjb20gQwotbWFrZWZpbGUudmMJamNvbmZpZy52YwlXaW5kb3dzIE5ULzk1LCBNUyBWaXN1YWwgQysrCi1tYWtlKi52YzYJamNvbmZpZy52YwlXaW5kb3dzIE5ULzk1LCBNUyBWaXN1YWwgQysrIDYKLW1ha2UqLnYxMAlqY29uZmlnLnZjCVdpbmRvd3MgTlQvOTUsIE1TIFZpc3VhbCBDKysgMjAxMCAodjEwKQotbWFrZWZpbGUubW1zCWpjb25maWcudm1zCURpZ2l0YWwgVk1TLCB3aXRoIE1NUyBzb2Z0d2FyZQotbWFrZWZpbGUudm1zCWpjb25maWcudm1zCURpZ2l0YWwgVk1TLCB3aXRob3V0IE1NUyBzb2Z0d2FyZQotCi1Db3B5IHRoZSBwcm9wZXIgamNvbmZpZyBmaWxlIHRvIGpjb25maWcuaCBhbmQgdGhlIG1ha2VmaWxlIHRvIE1ha2VmaWxlIChvcgotd2hhdGV2ZXIgeW91ciBzeXN0ZW0gdXNlcyBhcyB0aGUgc3RhbmRhcmQgbWFrZWZpbGUgbmFtZSkuICBGb3IgbW9yZSBpbmZvIHNlZQotdGhlIGFwcHJvcHJpYXRlIHN5c3RlbS1zcGVjaWZpYyBoaW50cyBzZWN0aW9uIG5lYXIgdGhlIGVuZCBvZiB0aGlzIGZpbGUuCi0KLQotQ29uZmlndXJpbmcgdGhlIHNvZnR3YXJlIGJ5IGhhbmQKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUZpcnN0LCBnZW5lcmF0ZSBhIGpjb25maWcuaCBmaWxlLiAgSWYgeW91IGFyZSBtb2RlcmF0ZWx5IGZhbWlsaWFyIHdpdGggQywKLXRoZSBjb21tZW50cyBpbiBqY29uZmlnLnR4dCBzaG91bGQgYmUgZW5vdWdoIGluZm9ybWF0aW9uIHRvIGRvIHRoaXM7IGp1c3QKLWNvcHkgamNvbmZpZy50eHQgdG8gamNvbmZpZy5oIGFuZCBlZGl0IGl0IGFwcHJvcHJpYXRlbHkuICBPdGhlcndpc2UsIHlvdSBtYXkKLXByZWZlciB0byB1c2UgdGhlIGNrY29uZmlnLmMgcHJvZ3JhbS4gIFlvdSB3aWxsIG5lZWQgdG8gY29tcGlsZSBhbmQgZXhlY3V0ZQotY2tjb25maWcuYyBieSBoYW5kIC0tLSB3ZSBob3BlIHlvdSBrbm93IGF0IGxlYXN0IGVub3VnaCB0byBkbyB0aGF0LgotY2tjb25maWcuYyBtYXkgbm90IGNvbXBpbGUgdGhlIGZpcnN0IHRyeSAoaW4gZmFjdCwgdGhlIHdob2xlIGlkZWEgaXMgZm9yIGl0Ci10byBmYWlsIGlmIGFueXRoaW5nIGlzIGdvaW5nIHRvKS4gIElmIHlvdSBnZXQgY29tcGlsZSBlcnJvcnMsIGZpeCB0aGVtIGJ5Ci1lZGl0aW5nIGNrY29uZmlnLmMgYWNjb3JkaW5nIHRvIHRoZSBkaXJlY3Rpb25zIGdpdmVuIGluIGNrY29uZmlnLmMuICBPbmNlCi15b3UgZ2V0IGl0IHRvIHJ1biwgaXQgd2lsbCB3cml0ZSBhIHN1aXRhYmxlIGpjb25maWcuaCBmaWxlLCBhbmQgd2lsbCBhbHNvCi1wcmludCBvdXQgc29tZSBhZHZpY2UgYWJvdXQgd2hpY2ggbWFrZWZpbGUgdG8gdXNlLgotCi1Zb3UgbWF5IGFsc28gd2FudCB0byBsb29rIGF0IHRoZSBjYW5uZWQgamNvbmZpZyBmaWxlcywgaWYgdGhlcmUgaXMgb25lIGZvciBhCi1zeXN0ZW0gc2ltaWxhciB0byB5b3Vycy4KLQotU2Vjb25kLCBzZWxlY3QgYSBtYWtlZmlsZSBhbmQgY29weSBpdCB0byBNYWtlZmlsZSAob3Igd2hhdGV2ZXIgeW91ciBzeXN0ZW0KLXVzZXMgYXMgdGhlIHN0YW5kYXJkIG1ha2VmaWxlIG5hbWUpLiAgVGhlIG1vc3QgZ2VuZXJpYyBtYWtlZmlsZXMgd2UgcHJvdmlkZQotYXJlCi0JbWFrZWZpbGUuYW5zaToJaWYgeW91ciBDIGNvbXBpbGVyIHN1cHBvcnRzIGZ1bmN0aW9uIHByb3RvdHlwZXMKLQltYWtlZmlsZS51bml4OglpZiBub3QuCi0oWW91IGhhdmUgZnVuY3Rpb24gcHJvdG90eXBlcyBpZiBja2NvbmZpZy5jIHB1dCAiI2RlZmluZSBIQVZFX1BST1RPVFlQRVMiCi1pbiBqY29uZmlnLmguKSAgWW91IG1heSB3YW50IHRvIHN0YXJ0IGZyb20gb25lIG9mIHRoZSBvdGhlciBtYWtlZmlsZXMgaWYKLXRoZXJlIGlzIG9uZSBmb3IgYSBzeXN0ZW0gc2ltaWxhciB0byB5b3Vycy4KLQotTG9vayBvdmVyIHRoZSBzZWxlY3RlZCBNYWtlZmlsZSBhbmQgYWRqdXN0IG9wdGlvbnMgYXMgbmVlZGVkLiAgSW4gcGFydGljdWxhcgoteW91IG1heSB3YW50IHRvIGNoYW5nZSB0aGUgQ0MgYW5kIENGTEFHUyBkZWZpbml0aW9ucy4gIEZvciBpbnN0YW5jZSwgaWYgeW91Ci1hcmUgdXNpbmcgR0NDLCBzZXQgQ0M9Z2NjLiAgSWYgeW91IGhhZCB0byB1c2UgYW55IGNvbXBpbGVyIHN3aXRjaGVzIHRvIGdldAotY2tjb25maWcuYyB0byB3b3JrLCBtYWtlIHN1cmUgdGhlIHNhbWUgc3dpdGNoZXMgYXJlIGluIENGTEFHUy4KLQotSWYgeW91IGFyZSBvbiBhIHN5c3RlbSB0aGF0IGRvZXNuJ3QgdXNlIG1ha2VmaWxlcywgeW91J2xsIG5lZWQgdG8gc2V0IHVwCi1wcm9qZWN0IGZpbGVzIChvciB3aGF0ZXZlciB5b3UgZG8gdXNlKSB0byBjb21waWxlIGFsbCB0aGUgc291cmNlIGZpbGVzIGFuZAotbGluayB0aGVtIGludG8gZXhlY3V0YWJsZSBmaWxlcyBjanBlZywgZGpwZWcsIGpwZWd0cmFuLCByZGpwZ2NvbSwgYW5kIHdyanBnY29tLgotU2VlIHRoZSBmaWxlIGxpc3RzIGluIGFueSBvZiB0aGUgbWFrZWZpbGVzIHRvIGZpbmQgb3V0IHdoaWNoIGZpbGVzIGdvIGludG8KLWVhY2ggcHJvZ3JhbS4gIE5vdGUgdGhhdCB0aGUgcHJvdmlkZWQgbWFrZWZpbGVzIGFsbCBtYWtlIGEgImxpYnJhcnkiIGZpbGUKLWxpYmpwZWcgZmlyc3QsIGJ1dCB5b3UgZG9uJ3QgaGF2ZSB0byBkbyB0aGF0IGlmIHlvdSBkb24ndCB3YW50IHRvOyB0aGUgZmlsZQotbGlzdHMgaWRlbnRpZnkgd2hpY2ggc291cmNlIGZpbGVzIGFyZSBhY3R1YWxseSBuZWVkZWQgZm9yIGNvbXByZXNzaW9uLAotZGVjb21wcmVzc2lvbiwgb3IgYm90aC4gIEFzIGEgbGFzdCByZXNvcnQsIHlvdSBjYW4gbWFrZSBhIGJhdGNoIHNjcmlwdCB0aGF0Ci1qdXN0IGNvbXBpbGVzIGV2ZXJ5dGhpbmcgYW5kIGxpbmtzIGl0IGFsbCB0b2dldGhlcjsgbWFrZWZpbGUudm1zIGlzIGFuIGV4YW1wbGUKLW9mIHRoaXMgKGl0J3MgZm9yIFZNUyBzeXN0ZW1zIHRoYXQgaGF2ZSBubyBtYWtlLWxpa2UgdXRpbGl0eSkuCi0KLUhlcmUgYXJlIGNvbW1lbnRzIGFib3V0IHNvbWUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBkZWNpc2lvbnMgeW91J2xsCi1uZWVkIHRvIG1ha2U6Ci0KLUNvbW1hbmQgbGluZSBzdHlsZQotLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoZXNlIHByb2dyYW1zIGNhbiB1c2UgYSBVbml4LWxpa2UgY29tbWFuZCBsaW5lIHN0eWxlIHdoaWNoIHN1cHBvcnRzCi1yZWRpcmVjdGlvbiBhbmQgcGlwaW5nLCBsaWtlIHRoaXM6Ci0JY2pwZWcgaW5wdXRmaWxlID5vdXRwdXRmaWxlCi0JY2pwZWcgPGlucHV0ZmlsZSA+b3V0cHV0ZmlsZQotCXNvdXJjZSBwcm9ncmFtIHwgY2pwZWcgPm91dHB1dGZpbGUKLVRoZSBzaW1wbGVyICJ0d28gZmlsZSIgY29tbWFuZCBsaW5lIHN0eWxlIGlzIGp1c3QKLQljanBlZyBpbnB1dGZpbGUgb3V0cHV0ZmlsZQotWW91IG1heSBwcmVmZXIgdGhlIHR3by1maWxlIHN0eWxlLCBwYXJ0aWN1bGFybHkgaWYgeW91IGRvbid0IGhhdmUgcGlwZXMuCi0KLVlvdSBNVVNUIHVzZSB0d28tZmlsZSBzdHlsZSBvbiBhbnkgc3lzdGVtIHRoYXQgZG9lc24ndCBjb3BlIHdlbGwgd2l0aCBiaW5hcnkKLWRhdGEgZmVkIHRocm91Z2ggc3RkaW4vc3Rkb3V0OyB0aGlzIGlzIHRydWUgZm9yIHNvbWUgTVMtRE9TIGNvbXBpbGVycywgZm9yCi1leGFtcGxlLiAgSWYgeW91J3JlIG5vdCBvbiBhIFVuaXggc3lzdGVtLCBpdCdzIHNhZmVzdCB0byBhc3N1bWUgeW91IG5lZWQKLXR3by1maWxlIHN0eWxlLiAgKEJ1dCBpZiB5b3VyIGNvbXBpbGVyIHByb3ZpZGVzIGVpdGhlciB0aGUgUG9zaXgtc3RhbmRhcmQKLWZkb3BlbigpIGxpYnJhcnkgcm91dGluZSBvciBhIE1pY3Jvc29mdC1jb21wYXRpYmxlIHNldG1vZGUoKSByb3V0aW5lLCB5b3UKLWNhbiBzYWZlbHkgdXNlIHRoZSBVbml4IGNvbW1hbmQgbGluZSBzdHlsZSwgYnkgZGVmaW5pbmcgVVNFX0ZET1BFTiBvcgotVVNFX1NFVE1PREUgcmVzcGVjdGl2ZWx5LikKLQotVG8gdXNlIHRoZSB0d28tZmlsZSBzdHlsZSwgbWFrZSBqY29uZmlnLmggc2F5ICIjZGVmaW5lIFRXT19GSUxFX0NPTU1BTkRMSU5FIi4KLQotU2VsZWN0aW5nIGEgbWVtb3J5IG1hbmFnZXIKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoZSBJSkcgY29kZSBpcyBjYXBhYmxlIG9mIHdvcmtpbmcgb24gaW1hZ2VzIHRoYXQgYXJlIHRvbyBiaWcgdG8gZml0IGluIG1haW4KLW1lbW9yeTsgZGF0YSBpcyBzd2FwcGVkIG91dCB0byB0ZW1wb3JhcnkgZmlsZXMgYXMgbmVjZXNzYXJ5LiAgSG93ZXZlciwgdGhlCi1jb2RlIHRvIGRvIHRoaXMgaXMgcmF0aGVyIHN5c3RlbS1kZXBlbmRlbnQuICBXZSBwcm92aWRlIGZpdmUgZGlmZmVyZW50Ci1tZW1vcnkgbWFuYWdlcnM6Ci0KLSogam1lbWFuc2kuYwlUaGlzIHZlcnNpb24gdXNlcyB0aGUgQU5TSS1zdGFuZGFyZCBsaWJyYXJ5IHJvdXRpbmUgdG1wZmlsZSgpLAotCQl3aGljaCBub3QgYWxsIG5vbi1BTlNJIHN5c3RlbXMgaGF2ZS4gIE9uIHNvbWUgc3lzdGVtcwotCQl0bXBmaWxlKCkgbWF5IHB1dCB0aGUgdGVtcG9yYXJ5IGZpbGUgaW4gYSBub24tb3B0aW1hbAotCQlsb2NhdGlvbjsgaWYgeW91IGRvbid0IGxpa2Ugd2hhdCBpdCBkb2VzLCB1c2Ugam1lbW5hbWUuYy4KLQotKiBqbWVtbmFtZS5jCVRoaXMgdmVyc2lvbiBjcmVhdGVzIG5hbWVkIHRlbXBvcmFyeSBmaWxlcy4gIEZvciBhbnl0aGluZwotCQlleGNlcHQgYSBVbml4IG1hY2hpbmUsIHlvdSdsbCBuZWVkIHRvIGNvbmZpZ3VyZSB0aGUKLQkJc2VsZWN0X2ZpbGVfbmFtZSgpIHJvdXRpbmUgYXBwcm9wcmlhdGVseTsgc2VlIHRoZSBjb21tZW50cwotCQluZWFyIHRoZSBoZWFkIG9mIGptZW1uYW1lLmMuICBJZiB5b3UgdXNlIHRoaXMgdmVyc2lvbiwgZGVmaW5lCi0JCU5FRURfU0lHTkFMX0NBVENIRVIgaW4gamNvbmZpZy5oIHRvIG1ha2Ugc3VyZSB0aGUgdGVtcCBmaWxlcwotCQlhcmUgcmVtb3ZlZCBpZiB0aGUgcHJvZ3JhbSBpcyBhYm9ydGVkLgotCi0qIGptZW1ub2JzLmMJKFRoYXQgc3RhbmRzIGZvciBObyBCYWNraW5nIFN0b3JlIDotKS4pICBUaGlzIHdpbGwgY29tcGlsZSBvbgotCQlhbG1vc3QgYW55IHN5c3RlbSwgYnV0IGl0IGFzc3VtZXMgeW91IGhhdmUgZW5vdWdoIG1haW4gbWVtb3J5Ci0JCW9yIHZpcnR1YWwgbWVtb3J5IHRvIGhvbGQgdGhlIGJpZ2dlc3QgaW1hZ2VzIHlvdSB3b3JrIHdpdGguCi0KLSogam1lbWRvcy5jCVRoaXMgc2hvdWxkIGJlIHVzZWQgd2l0aCBtb3N0IDE2LWJpdCBNUy1ET1MgY29tcGlsZXJzLgotCQlTZWUgdGhlIHN5c3RlbS1zcGVjaWZpYyBub3RlcyBhYm91dCBNUy1ET1MgZm9yIG1vcmUgaW5mby4KLQkJSU1QT1JUQU5UOiBpZiB5b3UgdXNlIHRoaXMsIGRlZmluZSBVU0VfTVNET1NfTUVNTUdSIGluCi0JCWpjb25maWcuaCwgYW5kIGluY2x1ZGUgdGhlIGFzc2VtYmx5IGZpbGUgam1lbWRvc2EuYXNtIGluIHRoZQotCQlwcm9ncmFtcy4gIFRoZSBzdXBwbGllZCBtYWtlZmlsZXMgYW5kIGpjb25maWcgZmlsZXMgZm9yCi0JCTE2LWJpdCBNUy1ET1MgY29tcGlsZXJzIGFscmVhZHkgZG8gYm90aC4KLQotKiBqbWVtbWFjLmMJQ3VzdG9tIHZlcnNpb24gZm9yIEFwcGxlIE1hY2ludG9zaDsgc2VlIHRoZSBzeXN0ZW0tc3BlY2lmaWMKLQkJbm90ZXMgZm9yIE1hY2ludG9zaCBmb3IgbW9yZSBpbmZvLgotCi1UbyB1c2UgYSBwYXJ0aWN1bGFyIG1lbW9yeSBtYW5hZ2VyLCBjaGFuZ2UgdGhlIFNZU0RFUE1FTSB2YXJpYWJsZSBpbiB5b3VyCi1tYWtlZmlsZSB0byBlcXVhbCB0aGUgY29ycmVzcG9uZGluZyBvYmplY3QgZmlsZSBuYW1lIChmb3IgZXhhbXBsZSwgam1lbWFuc2kubwotb3Igam1lbWFuc2kub2JqIGZvciBqbWVtYW5zaS5jKS4KLQotSWYgeW91IGhhdmUgcGxlbnR5IG9mIChyZWFsIG9yIHZpcnR1YWwpIG1haW4gbWVtb3J5LCBqdXN0IHVzZSBqbWVtbm9icy5jLgotIlBsZW50eSIgbWVhbnMgYWJvdXQgdGVuIGJ5dGVzIGZvciBldmVyeSBwaXhlbCBpbiB0aGUgbGFyZ2VzdCBpbWFnZXMKLXlvdSBwbGFuIHRvIHByb2Nlc3MsIHNvIGEgbG90IG9mIHN5c3RlbXMgZG9uJ3QgbWVldCB0aGlzIGNyaXRlcmlvbi4KLUlmIHlvdXJzIGRvZXNuJ3QsIHRyeSBqbWVtYW5zaS5jIGZpcnN0LiAgSWYgdGhhdCBkb2Vzbid0IGNvbXBpbGUsIHlvdSdsbCBoYXZlCi10byB1c2Ugam1lbW5hbWUuYzsgYmUgc3VyZSB0byBhZGp1c3Qgc2VsZWN0X2ZpbGVfbmFtZSgpIGZvciBsb2NhbCBjb25kaXRpb25zLgotWW91IG1heSBhbHNvIG5lZWQgdG8gY2hhbmdlIHVubGluaygpIHRvIHJlbW92ZSgpIGluIGNsb3NlX2JhY2tpbmdfc3RvcmUoKS4KLQotRXhjZXB0IHdpdGggam1lbW5vYnMuYyBvciBqbWVtbWFjLmMsIHlvdSBuZWVkIHRvIGFkanVzdCB0aGUgREVGQVVMVF9NQVhfTUVNCi1zZXR0aW5nIHRvIGEgcmVhc29uYWJsZSB2YWx1ZSBmb3IgeW91ciBzeXN0ZW0gKGVpdGhlciBieSBhZGRpbmcgYSAjZGVmaW5lIGZvcgotREVGQVVMVF9NQVhfTUVNIHRvIGpjb25maWcuaCwgb3IgYnkgYWRkaW5nIGEgLUQgc3dpdGNoIHRvIHRoZSBNYWtlZmlsZSkuCi1UaGlzIHZhbHVlIGxpbWl0cyB0aGUgYW1vdW50IG9mIGRhdGEgc3BhY2UgdGhlIHByb2dyYW0gd2lsbCBhdHRlbXB0IHRvCi1hbGxvY2F0ZS4gIENvZGUgYW5kIHN0YXRpYyBkYXRhIHNwYWNlIGlzbid0IGNvdW50ZWQsIHNvIHRoZSBhY3R1YWwgbWVtb3J5Ci1uZWVkcyBmb3IgY2pwZWcgb3IgZGpwZWcgYXJlIHR5cGljYWxseSAxMDAgdG8gMTUwS2IgbW9yZSB0aGFuIHRoZSBtYXgtbWVtb3J5Ci1zZXR0aW5nLiAgTGFyZ2VyIG1heC1tZW1vcnkgc2V0dGluZ3MgcmVkdWNlIHRoZSBhbW91bnQgb2YgSS9PIG5lZWRlZCB0bwotcHJvY2VzcyBhIGxhcmdlIGltYWdlLCBidXQgdG9vIGxhcmdlIGEgdmFsdWUgY2FuIHJlc3VsdCBpbiAiaW5zdWZmaWNpZW50Ci1tZW1vcnkiIGZhaWx1cmVzLiAgT24gbW9zdCBVbml4IG1hY2hpbmVzIChhbmQgb3RoZXIgc3lzdGVtcyB3aXRoIHZpcnR1YWwKLW1lbW9yeSksIGp1c3Qgc2V0IERFRkFVTFRfTUFYX01FTSB0byBzZXZlcmFsIG1pbGxpb24gYW5kIGZvcmdldCBpdC4gIEF0IHRoZQotb3RoZXIgZW5kIG9mIHRoZSBzcGVjdHJ1bSwgZm9yIE1TLURPUyBtYWNoaW5lcyB5b3UgcHJvYmFibHkgY2FuJ3QgZ28gbXVjaAotYWJvdmUgMzAwSyB0byA0MDBLLiAgKE9uIE1TLURPUyB0aGUgdmFsdWUgcmVmZXJzIHRvIGNvbnZlbnRpb25hbCBtZW1vcnkgb25seS4KLUV4dGVuZGVkL2V4cGFuZGVkIG1lbW9yeSBpcyBoYW5kbGVkIHNlcGFyYXRlbHkgYnkgam1lbWRvcy5jLikKLQotCi1CVUlMRElORyBUSEUgU09GVFdBUkUKLT09PT09PT09PT09PT09PT09PT09PQotCi1Ob3cgeW91IHNob3VsZCBiZSBhYmxlIHRvIGNvbXBpbGUgdGhlIHNvZnR3YXJlLiAgSnVzdCBzYXkgIm1ha2UiIChvcgotd2hhdGV2ZXIncyBuZWNlc3NhcnkgdG8gc3RhcnQgdGhlIGNvbXBpbGF0aW9uKS4gIEhhdmUgYSBjdXAgb2YgY29mZmVlLgotCi1IZXJlIGFyZSBzb21lIHRoaW5ncyB0aGF0IGNvdWxkIGdvIHdyb25nOgotCi1JZiB5b3VyIGNvbXBpbGVyIGNvbXBsYWlucyBhYm91dCB1bmRlZmluZWQgc3RydWN0dXJlcywgeW91IHNob3VsZCBiZSBhYmxlIHRvCi1zaHV0IGl0IHVwIGJ5IHB1dHRpbmcgIiNkZWZpbmUgSU5DT01QTEVURV9UWVBFU19CUk9LRU4iIGluIGpjb25maWcuaC4KLQotSWYgeW91IGhhdmUgdHJvdWJsZSB3aXRoIG1pc3Npbmcgc3lzdGVtIGluY2x1ZGUgZmlsZXMgb3IgaW5jbHVzaW9uIG9mIHRoZQotd3Jvbmcgb25lcywgcmVhZCBqaW5jbHVkZS5oLiAgVGhpcyBzaG91bGRuJ3QgaGFwcGVuIGlmIHlvdSB1c2VkIGNvbmZpZ3VyZQotb3IgY2tjb25maWcuYyB0byBzZXQgdXAgamNvbmZpZy5oLgotCi1UaGVyZSBhcmUgYSBmYWlyIG51bWJlciBvZiByb3V0aW5lcyB0aGF0IGRvIG5vdCB1c2UgYWxsIG9mIHRoZWlyIHBhcmFtZXRlcnM7Ci1zb21lIGNvbXBpbGVycyB3aWxsIGlzc3VlIHdhcm5pbmdzIGFib3V0IHRoaXMsIHdoaWNoIHlvdSBjYW4gaWdub3JlLiAgVGhlcmUKLWFyZSBhbHNvIGEgZmV3IGNvbmZpZ3VyYXRpb24gY2hlY2tzIHRoYXQgbWF5IGdpdmUgInVucmVhY2hhYmxlIGNvZGUiIHdhcm5pbmdzLgotQW55IG90aGVyIHdhcm5pbmcgZGVzZXJ2ZXMgaW52ZXN0aWdhdGlvbi4KLQotSWYgeW91IGRvbid0IGhhdmUgYSBnZXRlbnYoKSBsaWJyYXJ5IHJvdXRpbmUsIGRlZmluZSBOT19HRVRFTlYuCi0KLUFsc28gc2VlIHRoZSBzeXN0ZW0tc3BlY2lmaWMgaGludHMsIGJlbG93LgotCi0KLVRFU1RJTkcgVEhFIFNPRlRXQVJFCi09PT09PT09PT09PT09PT09PT09PQotCi1BcyBhIHF1aWNrIHRlc3Qgb2YgZnVuY3Rpb25hbGl0eSB3ZSd2ZSBpbmNsdWRlZCBhIHNtYWxsIHNhbXBsZSBpbWFnZSBpbgotc2V2ZXJhbCBmb3JtczoKLQl0ZXN0b3JpZy5qcGcJU3RhcnRpbmcgcG9pbnQgZm9yIHRoZSBkanBlZyB0ZXN0cy4KLQl0ZXN0aW1nLnBwbQlUaGUgb3V0cHV0IG9mIGRqcGVnIHRlc3RvcmlnLmpwZwotCXRlc3RpbWcuYm1wCVRoZSBvdXRwdXQgb2YgZGpwZWcgLWJtcCAtY29sb3JzIDI1NiB0ZXN0b3JpZy5qcGcKLQl0ZXN0aW1nLmpwZwlUaGUgb3V0cHV0IG9mIGNqcGVnIHRlc3RpbWcucHBtCi0JdGVzdHByb2cuanBnCVByb2dyZXNzaXZlLW1vZGUgZXF1aXZhbGVudCBvZiB0ZXN0b3JpZy5qcGcuCi0JdGVzdGltZ3AuanBnCVRoZSBvdXRwdXQgb2YgY2pwZWcgLXByb2dyZXNzaXZlIC1vcHRpbWl6ZSB0ZXN0aW1nLnBwbQotKFRoZSBmaXJzdC0gYW5kIHNlY29uZC1nZW5lcmF0aW9uIC5qcGcgZmlsZXMgYXJlbid0IGlkZW50aWNhbCBzaW5jZSBKUEVHIGlzCi1sb3NzeS4pICBJZiB5b3UgY2FuIGdlbmVyYXRlIGR1cGxpY2F0ZXMgb2YgdGhlIHRlc3RpbWcqIGZpbGVzIHRoZW4geW91Ci1wcm9iYWJseSBoYXZlIHdvcmtpbmcgcHJvZ3JhbXMuCi0KLVdpdGggbW9zdCBvZiB0aGUgbWFrZWZpbGVzLCAibWFrZSB0ZXN0IiB3aWxsIHBlcmZvcm0gdGhlIG5lY2Vzc2FyeQotY29tcGFyaXNvbnMuCi0KLUlmIHlvdSdyZSB1c2luZyBhIG1ha2VmaWxlIHRoYXQgZG9lc24ndCBwcm92aWRlIHRoZSB0ZXN0IG9wdGlvbiwgcnVuIGRqcGVnCi1hbmQgY2pwZWcgYnkgaGFuZCBhbmQgY29tcGFyZSB0aGUgb3V0cHV0IGZpbGVzIHRvIHRlc3RpbWcqIHdpdGggd2hhdGV2ZXIKLWJpbmFyeSBmaWxlIGNvbXBhcmlzb24gdG9vbCB5b3UgaGF2ZS4gIFRoZSBmaWxlcyBzaG91bGQgYmUgYml0LWZvci1iaXQKLWlkZW50aWNhbC4KLQotSWYgdGhlIHByb2dyYW1zIGNvbXBsYWluICJNQVhfQUxMT0NfQ0hVTksgaXMgd3JvbmcsIHBsZWFzZSBmaXgiLCB0aGVuIHlvdQotbmVlZCB0byByZWR1Y2UgTUFYX0FMTE9DX0NIVU5LIHRvIGEgdmFsdWUgdGhhdCBmaXRzIGluIHR5cGUgc2l6ZV90LgotVHJ5IGFkZGluZyAiI2RlZmluZSBNQVhfQUxMT0NfQ0hVTksgNjU1MjBMIiB0byBqY29uZmlnLmguICBBIGxlc3MgbGlrZWx5Ci1jb25maWd1cmF0aW9uIGVycm9yIGlzICJBTElHTl9UWVBFIGlzIHdyb25nLCBwbGVhc2UgZml4IjogZGVmaW5pbmcgQUxJR05fVFlQRQotYXMgbG9uZyBzaG91bGQgdGFrZSBjYXJlIG9mIHRoYXQgb25lLgotCi1JZiB0aGUgY2pwZWcgdGVzdCBydW4gZmFpbHMgd2l0aCAiTWlzc2luZyBIdWZmbWFuIGNvZGUgdGFibGUgZW50cnkiLCBpdCdzIGEKLWdvb2QgYmV0IHRoYXQgeW91IG5lZWRlZCB0byBkZWZpbmUgUklHSFRfU0hJRlRfSVNfVU5TSUdORUQuICBHbyBiYWNrIHRvIHRoZQotY29uZmlndXJhdGlvbiBzdGVwIGFuZCBydW4gY2tjb25maWcuYy4gIChUaGlzIGlzIGEgZ29vZCBwbGFuIGZvciBhbnkgb3RoZXIKLXRlc3QgZmFpbHVyZSwgdG9vLikKLQotSWYgeW91IGFyZSB1c2luZyBVbml4IChvbmUtZmlsZSkgY29tbWFuZCBsaW5lIHN0eWxlIG9uIGEgbm9uLVVuaXggc3lzdGVtLAotaXQncyBhIGdvb2QgaWRlYSB0byBjaGVjayB0aGF0IGJpbmFyeSBJL08gdGhyb3VnaCBzdGRpbi9zdGRvdXQgYWN0dWFsbHkKLXdvcmtzLiAgWW91IHNob3VsZCBnZXQgdGhlIHNhbWUgcmVzdWx0cyBmcm9tICJkanBlZyA8dGVzdG9yaWcuanBnID5vdXQucHBtIgotYXMgZnJvbSAiZGpwZWcgLW91dGZpbGUgb3V0LnBwbSB0ZXN0b3JpZy5qcGciLiAgTm90ZSB0aGF0IHRoZSBtYWtlZmlsZXMgYWxsCi11c2UgdGhlIGxhdHRlciBzdHlsZSBhbmQgdGhlcmVmb3JlIGRvIG5vdCBleGVyY2lzZSBzdGRpbi9zdGRvdXQhICBJZiB0aGlzCi1jaGVjayBmYWlscywgdHJ5IHJlY29tcGlsaW5nIHdpdGggVVNFX1NFVE1PREUgb3IgVVNFX0ZET1BFTiBkZWZpbmVkLgotSWYgaXQgc3RpbGwgZG9lc24ndCB3b3JrLCBiZXR0ZXIgdXNlIHR3by1maWxlIHN0eWxlLgotCi1JZiB5b3UgY2hvc2UgYSBtZW1vcnkgbWFuYWdlciBvdGhlciB0aGFuIGptZW1ub2JzLmMsIHlvdSBzaG91bGQgdGVzdCB0aGF0Ci10ZW1wb3JhcnktZmlsZSB1c2FnZSB3b3Jrcy4gIFRyeSAiZGpwZWcgLWJtcCAtY29sb3JzIDI1NiAtbWF4IDAgdGVzdG9yaWcuanBnIgotYW5kIG1ha2Ugc3VyZSBpdHMgb3V0cHV0IG1hdGNoZXMgdGVzdGltZy5ibXAuICBJZiB5b3UgaGF2ZSBhbnkgcmVhbGx5IGxhcmdlCi1pbWFnZXMgaGFuZHksIHRyeSBjb21wcmVzc2luZyB0aGVtIHdpdGggLW9wdGltaXplIGFuZC9vciBkZWNvbXByZXNzaW5nIHdpdGgKLS1jb2xvcnMgMjU2IHRvIG1ha2Ugc3VyZSB5b3VyIERFRkFVTFRfTUFYX01FTSBzZXR0aW5nIGlzIG5vdCB0b28gbGFyZ2UuCi0KLU5PVEU6IHRoaXMgaXMgZmFyIGZyb20gYW4gZXhoYXVzdGl2ZSB0ZXN0IG9mIHRoZSBKUEVHIHNvZnR3YXJlOyBzb21lIG1vZHVsZXMsCi1zdWNoIGFzIDEtcGFzcyBjb2xvciBxdWFudGl6YXRpb24sIGFyZSBub3QgZXhlcmNpc2VkIGF0IGFsbC4gIEl0J3MganVzdCBhCi1xdWljayB0ZXN0IHRvIGdpdmUgeW91IHNvbWUgY29uZmlkZW5jZSB0aGF0IHlvdSBoYXZlbid0IG1pc3NlZCBzb21ldGhpbmcKLW1ham9yLgotCi0KLUlOU1RBTExJTkcgVEhFIFNPRlRXQVJFCi09PT09PT09PT09PT09PT09PT09PT09PQotCi1PbmNlIHlvdSdyZSBkb25lIHdpdGggdGhlIGFib3ZlIHN0ZXBzLCB5b3UgY2FuIGluc3RhbGwgdGhlIHNvZnR3YXJlIGJ5Ci1jb3B5aW5nIHRoZSBleGVjdXRhYmxlIGZpbGVzIChjanBlZywgZGpwZWcsIGpwZWd0cmFuLCByZGpwZ2NvbSwgYW5kIHdyanBnY29tKQotdG8gd2hlcmV2ZXIgeW91IG5vcm1hbGx5IGluc3RhbGwgcHJvZ3JhbXMuICBPbiBVbml4IHN5c3RlbXMsIHlvdSdsbCBhbHNvIHdhbnQKLXRvIHB1dCB0aGUgbWFuIHBhZ2VzIChjanBlZy4xLCBkanBlZy4xLCBqcGVndHJhbi4xLCByZGpwZ2NvbS4xLCB3cmpwZ2NvbS4xKQotaW4gdGhlIG1hbi1wYWdlIGRpcmVjdG9yeS4gIFRoZSBwcmUtZmFiIG1ha2VmaWxlcyBkb24ndCBzdXBwb3J0IHRoaXMgc3RlcAotc2luY2UgdGhlcmUncyBzdWNoIGEgd2lkZSB2YXJpZXR5IG9mIGluc3RhbGxhdGlvbiBwcm9jZWR1cmVzIG9uIGRpZmZlcmVudAotc3lzdGVtcy4KLQotSWYgeW91IGdlbmVyYXRlZCBhIE1ha2VmaWxlIHdpdGggdGhlICJjb25maWd1cmUiIHNjcmlwdCwgeW91IGNhbiBqdXN0IHNheQotCW1ha2UgaW5zdGFsbAotdG8gaW5zdGFsbCB0aGUgcHJvZ3JhbXMgYW5kIHRoZWlyIG1hbiBwYWdlcyBpbnRvIHRoZSBzdGFuZGFyZCBwbGFjZXMuCi0oWW91J2xsIHByb2JhYmx5IG5lZWQgdG8gYmUgcm9vdCB0byBkbyB0aGlzLikgIFdlIHJlY29tbWVuZCBmaXJzdCBzYXlpbmcKLQltYWtlIC1uIGluc3RhbGwKLXRvIHNlZSB3aGVyZSBjb25maWd1cmUgdGhvdWdodCB0aGUgZmlsZXMgc2hvdWxkIGdvLiAgWW91IG1heSBuZWVkIHRvIGVkaXQKLXRoZSBNYWtlZmlsZSwgcGFydGljdWxhcmx5IGlmIHlvdXIgc3lzdGVtJ3MgY29udmVudGlvbnMgZm9yIG1hbiBwYWdlCi1maWxlbmFtZXMgZG9uJ3QgbWF0Y2ggd2hhdCBjb25maWd1cmUgZXhwZWN0cy4KLQotSWYgeW91IHdhbnQgdG8gaW5zdGFsbCB0aGUgSUpHIGxpYnJhcnkgaXRzZWxmLCBmb3IgdXNlIGluIGNvbXBpbGluZyBvdGhlcgotcHJvZ3JhbXMgYmVzaWRlcyBvdXJzLCB0aGVuIHlvdSBuZWVkIHRvIHB1dCB0aGUgZm91ciBpbmNsdWRlIGZpbGVzCi0JanBlZ2xpYi5oIGplcnJvci5oIGpjb25maWcuaCBqbW9yZWNmZy5oCi1pbnRvIHlvdXIgaW5jbHVkZS1maWxlIGRpcmVjdG9yeSwgYW5kIHB1dCB0aGUgbGlicmFyeSBmaWxlIGxpYmpwZWcuYQotKGV4dGVuc2lvbiBtYXkgdmFyeSBkZXBlbmRpbmcgb24gc3lzdGVtKSB3aGVyZXZlciBsaWJyYXJ5IGZpbGVzIGdvLgotSWYgeW91IGdlbmVyYXRlZCBhIE1ha2VmaWxlIHdpdGggImNvbmZpZ3VyZSIsIGl0IHdpbGwgZG8gd2hhdCBpdCB0aGlua3MKLWlzIHRoZSByaWdodCB0aGluZyBpZiB5b3Ugc2F5Ci0JbWFrZSBpbnN0YWxsLWxpYgotCi0KLU9QVElPTkFMIFNUVUZGCi09PT09PT09PT09PT09PQotCi1Qcm9ncmVzcyBtb25pdG9yOgotCi1JZiB5b3UgbGlrZSwgeW91IGNhbiAjZGVmaW5lIFBST0dSRVNTX1JFUE9SVCAoaW4gamNvbmZpZy5oKSB0byBlbmFibGUgZGlzcGxheQotb2YgcGVyY2VudC1kb25lIHByb2dyZXNzIHJlcG9ydHMuICBUaGUgcm91dGluZSBwcm92aWRlZCBpbiBjZGpwZWcuYyBtZXJlbHkKLXByaW50cyBwZXJjZW50YWdlcyB0byBzdGRlcnIsIGJ1dCB5b3UgY2FuIGN1c3RvbWl6ZSBpdCB0byBkbyBzb21ldGhpbmcKLWZhbmNpZXIuCi0KLVV0YWggUkxFIGZpbGUgZm9ybWF0IHN1cHBvcnQ6Ci0KLVdlIGRpc3RyaWJ1dGUgdGhlIHNvZnR3YXJlIHdpdGggc3VwcG9ydCBmb3IgUkxFIGltYWdlIGZpbGVzIChVdGFoIFJhc3RlcgotVG9vbGtpdCBmb3JtYXQpIGRpc2FibGVkLCBiZWNhdXNlIHRoZSBSTEUgc3VwcG9ydCB3b24ndCBjb21waWxlIHdpdGhvdXQgdGhlCi1VdGFoIGxpYnJhcnkuICBJZiB5b3UgaGF2ZSBVUlQgdmVyc2lvbiAzLjEgb3IgbGF0ZXIsIHlvdSBjYW4gZW5hYmxlIFJMRQotc3VwcG9ydCBhcyBmb2xsb3dzOgotCTEuICAjZGVmaW5lIFJMRV9TVVBQT1JURUQgaW4gamNvbmZpZy5oLgotCTIuICBBZGQgYSAtSSBvcHRpb24gdG8gQ0ZMQUdTIGluIHRoZSBNYWtlZmlsZSBmb3IgdGhlIGRpcmVjdG9yeQotCSAgICBjb250YWluaW5nIHRoZSBVUlQgLmggZmlsZXMgKHR5cGljYWxseSB0aGUgImluY2x1ZGUiCi0JICAgIHN1YmRpcmVjdG9yeSBvZiB0aGUgVVJUIGRpc3RyaWJ1dGlvbikuCi0JMy4gIEFkZCAtTC4uLiAtbHJsZSB0byBMRExJQlMgaW4gdGhlIE1ha2VmaWxlLCB3aGVyZSAuLi4gc3BlY2lmaWVzCi0JICAgIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgVVJUICJsaWJybGUuYSIgZmlsZSAodHlwaWNhbGx5IHRoZQotCSAgICAibGliIiBzdWJkaXJlY3Rvcnkgb2YgdGhlIFVSVCBkaXN0cmlidXRpb24pLgotCi1TdXBwb3J0IGZvciAxMi1iaXQtZGVlcCBwaXhlbCBkYXRhOgotCi1UaGUgSlBFRyBzdGFuZGFyZCBhbGxvd3MgZWl0aGVyIDgtYml0IG9yIDEyLWJpdCBkYXRhIHByZWNpc2lvbi4gIChGb3IgY29sb3IsCi10aGlzIG1lYW5zIDggb3IgMTIgYml0cyBwZXIgY2hhbm5lbCwgb2YgY291cnNlLikgIElmIHlvdSBuZWVkIHRvIHdvcmsgd2l0aAotZGVlcGVyIHRoYW4gOC1iaXQgZGF0YSwgeW91IGNhbiBjb21waWxlIHRoZSBJSkcgY29kZSBmb3IgMTItYml0IG9wZXJhdGlvbi4KLVRvIGRvIHNvOgotICAxLiBJbiBqbW9yZWNmZy5oLCBkZWZpbmUgQklUU19JTl9KU0FNUExFIGFzIDEyIHJhdGhlciB0aGFuIDguCi0gIDIuIEluIGpjb25maWcuaCwgdW5kZWZpbmUgQk1QX1NVUFBPUlRFRCwgUkxFX1NVUFBPUlRFRCwgYW5kIFRBUkdBX1NVUFBPUlRFRCwKLSAgICAgYmVjYXVzZSB0aGUgY29kZSBmb3IgdGhvc2UgZm9ybWF0cyBkb2Vzbid0IGhhbmRsZSAxMi1iaXQgZGF0YSBhbmQgd29uJ3QKLSAgICAgZXZlbiBjb21waWxlLiAgKFRoZSBQUE0gY29kZSBkb2VzIHdvcmssIGFzIGV4cGxhaW5lZCBiZWxvdy4gIFRoZSBHSUYKLSAgICAgY29kZSB3b3JrcyB0b287IGl0IHNjYWxlcyA4LWJpdCBHSUYgZGF0YSB0byBhbmQgZnJvbSAxMi1iaXQgZGVwdGgKLSAgICAgYXV0b21hdGljYWxseS4pCi0gIDMuIENvbXBpbGUuICBEb24ndCBleHBlY3QgIm1ha2UgdGVzdCIgdG8gcGFzcywgc2luY2UgdGhlIHN1cHBsaWVkIHRlc3QKLSAgICAgZmlsZXMgYXJlIGZvciA4LWJpdCBkYXRhLgotCi1DdXJyZW50bHksIDEyLWJpdCBzdXBwb3J0IGRvZXMgbm90IHdvcmsgb24gMTYtYml0LWludCBtYWNoaW5lcy4KLQotTm90ZSB0aGF0IGEgMTItYml0IHZlcnNpb24gd2lsbCBub3QgcmVhZCA4LWJpdCBKUEVHIGZpbGVzLCBub3IgdmljZSB2ZXJzYTsKLXNvIHlvdSdsbCB3YW50IHRvIGtlZXAgYXJvdW5kIGEgcmVndWxhciA4LWJpdCBjb21waWxhdGlvbiBhcyB3ZWxsLgotKFJ1bi10aW1lIHNlbGVjdGlvbiBvZiBkYXRhIGRlcHRoLCB0byBhbGxvdyBhIHNpbmdsZSBjb3B5IHRoYXQgZG9lcyBib3RoLAotaXMgcG9zc2libGUgYnV0IHdvdWxkIHByb2JhYmx5IHNsb3cgdGhpbmdzIGRvd24gY29uc2lkZXJhYmx5OyBpdCdzIHZlcnkgbG93Ci1vbiBvdXIgdG8tZG8gbGlzdC4pCi0KLVRoZSBQUE0gcmVhZGVyIChyZHBwbS5jKSBjYW4gcmVhZCAxMi1iaXQgZGF0YSBmcm9tIGVpdGhlciB0ZXh0LWZvcm1hdCBvcgotYmluYXJ5LWZvcm1hdCBQUE0gYW5kIFBHTSBmaWxlcy4gIEJpbmFyeS1mb3JtYXQgUFBNL1BHTSBmaWxlcyB3aGljaCBoYXZlIGEKLW1heHZhbCBncmVhdGVyIHRoYW4gMjU1IGFyZSBhc3N1bWVkIHRvIHVzZSAyIGJ5dGVzIHBlciBzYW1wbGUsIE1TQiBmaXJzdAotKGJpZy1lbmRpYW4gb3JkZXIpLiAgQXMgb2YgZWFybHkgMTk5NSwgMi1ieXRlIGJpbmFyeSBmb3JtYXQgaXMgbm90Ci1vZmZpY2lhbGx5IHN1cHBvcnRlZCBieSB0aGUgUEJNUExVUyBsaWJyYXJ5LCBidXQgaXQgaXMgZXhwZWN0ZWQgdGhhdCBhCi1mdXR1cmUgcmVsZWFzZSBvZiBQQk1QTFVTIHdpbGwgc3VwcG9ydCBpdC4gIE5vdGUgdGhhdCB0aGUgUFBNIHJlYWRlciB3aWxsCi1yZWFkIGZpbGVzIG9mIGFueSBtYXh2YWwgcmVnYXJkbGVzcyBvZiB0aGUgQklUU19JTl9KU0FNUExFIHNldHRpbmc7IGluY29taW5nCi1kYXRhIGlzIGF1dG9tYXRpY2FsbHkgcmVzY2FsZWQgdG8gZWl0aGVyIG1heHZhbD0yNTUgb3IgbWF4dmFsPTQwOTUgYXMKLWFwcHJvcHJpYXRlIGZvciB0aGUgY2pwZWcgYml0IGRlcHRoLgotCi1UaGUgUFBNIHdyaXRlciAod3JwcG0uYykgd2lsbCBub3JtYWxseSB3cml0ZSAyLWJ5dGUgYmluYXJ5IFBQTSBvciBQR00KLWZvcm1hdCwgbWF4dmFsIDQwOTUsIHdoZW4gY29tcGlsZWQgd2l0aCBCSVRTX0lOX0pTQU1QTEU9MTIuICBTaW5jZSB0aGlzCi1mb3JtYXQgaXMgbm90IHlldCB3aWRlbHkgc3VwcG9ydGVkLCB5b3UgY2FuIGRpc2FibGUgaXQgYnkgY29tcGlsaW5nIHdycHBtLmMKLXdpdGggUFBNX05PUkFXV09SRCBkZWZpbmVkOyB0aGVuIHRoZSBkYXRhIGlzIHNjYWxlZCBkb3duIHRvIDggYml0cyB0byBtYWtlIGEKLXN0YW5kYXJkIDEtYnl0ZS9zYW1wbGUgUFBNIG9yIFBHTSBmaWxlLiAgKFllcywgdGhpcyBtZWFucyBzdGlsbCBhbm90aGVyIGNvcHkKLW9mIGRqcGVnIHRvIGtlZXAgYXJvdW5kLiAgQnV0IGhvcGVmdWxseSB5b3Ugd29uJ3QgbmVlZCBpdCBmb3IgdmVyeSBsb25nLgotUG9za2FuemVyJ3Mgc3VwcG9zZWQgdG8gZ2V0IHRoYXQgbmV3IFBCTVBMVVMgcmVsZWFzZSBvdXQgUmVhbCBTb29uIE5vdy4pCi0KLU9mIGNvdXJzZSwgaWYgeW91IGFyZSB3b3JraW5nIHdpdGggMTItYml0IGRhdGEsIHlvdSBwcm9iYWJseSBoYXZlIGl0IHN0b3JlZAotaW4gc29tZSBvdGhlciwgbm9uc3RhbmRhcmQgZm9ybWF0LiAgSW4gdGhhdCBjYXNlIHlvdSdsbCBwcm9iYWJseSB3YW50IHRvCi13cml0ZSB5b3VyIG93biBJL08gbW9kdWxlcyB0byByZWFkIGFuZCB3cml0ZSB5b3VyIGZvcm1hdC4KLQotTm90ZSB0aGF0IGEgMTItYml0IHZlcnNpb24gb2YgY2pwZWcgYWx3YXlzIHJ1bnMgaW4gIi1vcHRpbWl6ZSIgbW9kZSwgaW4KLW9yZGVyIHRvIGdlbmVyYXRlIHZhbGlkIEh1ZmZtYW4gdGFibGVzLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBvdXIKLWRlZmF1bHQgSHVmZm1hbiB0YWJsZXMgb25seSBjb3ZlciA4LWJpdCBkYXRhLgotCi1SZW1vdmluZyBjb2RlOgotCi1JZiB5b3UgbmVlZCB0byBtYWtlIGEgc21hbGxlciB2ZXJzaW9uIG9mIHRoZSBKUEVHIHNvZnR3YXJlLCBzb21lIG9wdGlvbmFsCi1mdW5jdGlvbnMgY2FuIGJlIHJlbW92ZWQgYXQgY29tcGlsZSB0aW1lLiAgU2VlIHRoZSB4eHhfU1VQUE9SVEVEICNkZWZpbmVzIGluCi1qY29uZmlnLmggYW5kIGptb3JlY2ZnLmguICBJZiBhdCBhbGwgcG9zc2libGUsIHdlIHJlY29tbWVuZCB0aGF0IHlvdSBsZWF2ZSBpbgotZGVjb2RlciBzdXBwb3J0IGZvciBhbGwgdmFsaWQgSlBFRyBmaWxlcywgdG8gZW5zdXJlIHRoYXQgeW91IGNhbiByZWFkIGFueW9uZSdzCi1vdXRwdXQuICBUYWtpbmcgb3V0IHN1cHBvcnQgZm9yIGltYWdlIGZpbGUgZm9ybWF0cyB0aGF0IHlvdSBkb24ndCB1c2UgaXMgdGhlCi1tb3N0IHBhaW5sZXNzIHdheSB0byBtYWtlIHRoZSBwcm9ncmFtcyBzbWFsbGVyLiAgQW5vdGhlciBwb3NzaWJpbGl0eSBpcyB0bwotcmVtb3ZlIHNvbWUgb2YgdGhlIERDVCBtZXRob2RzOiBpbiBwYXJ0aWN1bGFyLCB0aGUgIklGQVNUIiBtZXRob2QgbWF5IG5vdCBiZQotZW5vdWdoIGZhc3RlciB0aGFuIHRoZSBvdGhlcnMgdG8gYmUgd29ydGgga2VlcGluZyBvbiB5b3VyIG1hY2hpbmUuICAoSWYgeW91Ci1kbyByZW1vdmUgSVNMT1cgb3IgSUZBU1QsIGJlIHN1cmUgdG8gcmVkZWZpbmUgSkRDVF9ERUZBVUxUIG9yIEpEQ1RfRkFTVEVTVAotdG8gYSBzdXBwb3J0ZWQgbWV0aG9kLCBieSBhZGRpbmcgYSAjZGVmaW5lIGluIGpjb25maWcuaC4pCi0KLQotT1BUSU1JWkFUSU9OCi09PT09PT09PT09PT0KLQotVW5sZXNzIHlvdSBvd24gYSBDcmF5LCB5b3UnbGwgcHJvYmFibHkgYmUgaW50ZXJlc3RlZCBpbiBtYWtpbmcgdGhlIEpQRUcKLXNvZnR3YXJlIGdvIGFzIGZhc3QgYXMgcG9zc2libGUuICBUaGlzIHNlY3Rpb24gY292ZXJzIHNvbWUgbWFjaGluZS1kZXBlbmRlbnQKLW9wdGltaXphdGlvbnMgeW91IG1heSB3YW50IHRvIHRyeS4gIFdlIHN1Z2dlc3QgdGhhdCBiZWZvcmUgdHJ5aW5nIGFueSBvZgotdGhpcywgeW91IGZpcnN0IGdldCB0aGUgYmFzaWMgaW5zdGFsbGF0aW9uIHRvIHBhc3MgdGhlIHNlbGYtdGVzdCBzdGVwLgotUmVwZWF0IHRoZSBzZWxmLXRlc3QgYWZ0ZXIgYW55IG9wdGltaXphdGlvbiB0byBtYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZW4ndAotYnJva2VuIGFueXRoaW5nLgotCi1UaGUgaW50ZWdlciBEQ1Qgcm91dGluZXMgcGVyZm9ybSBhIGxvdCBvZiBtdWx0aXBsaWNhdGlvbnMuICBUaGVzZQotbXVsdGlwbGljYXRpb25zIG11c3QgeWllbGQgMzItYml0IHJlc3VsdHMsIGJ1dCBub25lIG9mIHRoZWlyIGlucHV0IHZhbHVlcwotYXJlIG1vcmUgdGhhbiAxNiBiaXRzIHdpZGUuICBPbiBtYW55IG1hY2hpbmVzLCBub3RhYmx5IHRoZSA2ODB4MCBhbmQgODB4ODYKLUNQVXMsIGEgMTZ4MTY9PjMyIGJpdCBtdWx0aXBseSBpbnN0cnVjdGlvbiBpcyBmYXN0ZXIgdGhhbiBhIGZ1bGwgMzJ4MzI9PjMyCi1iaXQgbXVsdGlwbHkuICBVbmZvcnR1bmF0ZWx5IHRoZXJlIGlzIG5vIHBvcnRhYmxlIHdheSB0byBzcGVjaWZ5IHN1Y2ggYQotbXVsdGlwbGljYXRpb24gaW4gQywgYnV0IHNvbWUgY29tcGlsZXJzIGNhbiBnZW5lcmF0ZSBvbmUgd2hlbiB5b3UgdXNlIHRoZQotcmlnaHQgY29tYmluYXRpb24gb2YgY2FzdHMuICBTZWUgdGhlIE1VTFRJUExZeHh4IG1hY3JvIGRlZmluaXRpb25zIGluCi1qZGN0LmguICBJZiB5b3VyIGNvbXBpbGVyIG1ha2VzICJpbnQiIGJlIDMyIGJpdHMgYW5kICJzaG9ydCIgYmUgMTYgYml0cywKLWRlZmluaW5nIFNIT1JUeFNIT1JUXzMyIGlzIGZhaXJseSBsaWtlbHkgdG8gd29yay4gIFdoZW4gZXhwZXJpbWVudGluZyB3aXRoCi1hbHRlcm5hdGUgZGVmaW5pdGlvbnMsIGJlIHN1cmUgdG8gdGVzdCBub3Qgb25seSB3aGV0aGVyIHRoZSBjb2RlIHN0aWxsIHdvcmtzCi0odXNlIHRoZSBzZWxmLXRlc3QpLCBidXQgYWxzbyB3aGV0aGVyIGl0IGlzIGFjdHVhbGx5IGZhc3RlciAtLS0gb24gc29tZQotY29tcGlsZXJzLCBhbHRlcm5hdGUgZGVmaW5pdGlvbnMgbWF5IGNvbXB1dGUgdGhlIHJpZ2h0IGFuc3dlciwgeWV0IGJlIHNsb3dlcgotdGhhbiB0aGUgZGVmYXVsdC4gIFRpbWluZyBjanBlZyBvbiBhIGxhcmdlIFBHTSAoZ3JheXNjYWxlKSBpbnB1dCBmaWxlIGlzIHRoZQotYmVzdCB3YXkgdG8gY2hlY2sgdGhpcywgYXMgdGhlIERDVCB3aWxsIGJlIHRoZSBsYXJnZXN0IGZyYWN0aW9uIG9mIHRoZSBydW50aW1lCi1pbiB0aGF0IG1vZGUuICAoTm90ZTogc29tZSBvZiB0aGUgZGlzdHJpYnV0ZWQgY29tcGlsZXItc3BlY2lmaWMgamNvbmZpZyBmaWxlcwotYWxyZWFkeSBjb250YWluICNkZWZpbmUgc3dpdGNoZXMgdG8gc2VsZWN0IGFwcHJvcHJpYXRlIE1VTFRJUExZeHh4Ci1kZWZpbml0aW9ucy4pCi0KLUlmIHlvdXIgbWFjaGluZSBoYXMgc3VmZmljaWVudGx5IGZhc3QgZmxvYXRpbmcgcG9pbnQgaGFyZHdhcmUsIHlvdSBtYXkgZmluZAotdGhhdCB0aGUgZmxvYXQgRENUIG1ldGhvZCBpcyBmYXN0ZXIgdGhhbiB0aGUgaW50ZWdlciBEQ1QgbWV0aG9kcywgZXZlbgotYWZ0ZXIgdHdlYWtpbmcgdGhlIGludGVnZXIgbXVsdGlwbHkgbWFjcm9zLiAgSW4gdGhhdCBjYXNlIHlvdSBtYXkgd2FudCB0bwotbWFrZSB0aGUgZmxvYXQgRENUIGJlIHRoZSBkZWZhdWx0IG1ldGhvZC4gIChUaGUgb25seSBvYmplY3Rpb24gdG8gdGhpcyBpcwotdGhhdCBmbG9hdCBEQ1QgcmVzdWx0cyBtYXkgdmFyeSBzbGlnaHRseSBhY3Jvc3MgbWFjaGluZXMuKSAgVG8gZG8gdGhhdCwgYWRkCi0iI2RlZmluZSBKRENUX0RFRkFVTFQgSkRDVF9GTE9BVCIgdG8gamNvbmZpZy5oLiAgRXZlbiBpZiB5b3UgZG9uJ3QgY2hhbmdlCi10aGUgZGVmYXVsdCwgeW91IHNob3VsZCByZWRlZmluZSBKRENUX0ZBU1RFU1QsIHdoaWNoIGlzIHRoZSBtZXRob2Qgc2VsZWN0ZWQKLWJ5IGRqcGVnJ3MgLWZhc3Qgc3dpdGNoLiAgRG9uJ3QgZm9yZ2V0IHRvIHVwZGF0ZSB0aGUgZG9jdW1lbnRhdGlvbiBmaWxlcwotKHVzYWdlLnR4dCBhbmQvb3IgY2pwZWcuMSwgZGpwZWcuMSkgdG8gYWdyZWUgd2l0aCB3aGF0IHlvdSd2ZSBkb25lLgotCi1JZiBhY2Nlc3MgdG8gInNob3J0IiBhcnJheXMgaXMgc2xvdyBvbiB5b3VyIG1hY2hpbmUsIGl0IG1heSBiZSBhIHdpbiB0bwotZGVmaW5lIHR5cGUgSkNPRUYgYXMgaW50IHJhdGhlciB0aGFuIHNob3J0LiAgVGhpcyB3aWxsIGNvc3QgYSBnb29kIGRlYWwgb2YKLW1lbW9yeSB0aG91Z2gsIHBhcnRpY3VsYXJseSBpbiBzb21lIG11bHRpLXBhc3MgbW9kZXMsIHNvIGRvbid0IGRvIGl0IHVubGVzcwoteW91IGhhdmUgbWVtb3J5IHRvIGJ1cm4gYW5kIHNob3J0IGlzIFJFQUxMWSBzbG93LgotCi1JZiB5b3VyIGNvbXBpbGVyIGNhbiBjb21waWxlIGZ1bmN0aW9uIGNhbGxzIGluLWxpbmUsIG1ha2Ugc3VyZSB0aGUgSU5MSU5FCi1tYWNybyBpbiBqbW9yZWNmZy5oIGlzIGRlZmluZWQgYXMgdGhlIGtleXdvcmQgdGhhdCBtYXJrcyBhIGZ1bmN0aW9uCi1pbmxpbmUtYWJsZS4gIFNvbWUgY29tcGlsZXJzIGhhdmUgYSBzd2l0Y2ggdGhhdCB0ZWxscyB0aGUgY29tcGlsZXIgdG8gaW5saW5lCi1hbnkgZnVuY3Rpb24gaXQgdGhpbmtzIGlzIHByb2ZpdGFibGUgKGUuZy4sIC1maW5saW5lLWZ1bmN0aW9ucyBmb3IgZ2NjKS4KLUVuYWJsaW5nIHN1Y2ggYSBzd2l0Y2ggaXMgbGlrZWx5IHRvIG1ha2UgdGhlIGNvbXBpbGVkIGNvZGUgYmlnZ2VyIGJ1dCBmYXN0ZXIuCi0KLUluIGdlbmVyYWwsIGl0J3Mgd29ydGggdHJ5aW5nIHRoZSBtYXhpbXVtIG9wdGltaXphdGlvbiBsZXZlbCBvZiB5b3VyIGNvbXBpbGVyLAotYW5kIGV4cGVyaW1lbnRpbmcgd2l0aCBhbnkgb3B0aW9uYWwgb3B0aW1pemF0aW9ucyBzdWNoIGFzIGxvb3AgdW5yb2xsaW5nLgotKFVuZm9ydHVuYXRlbHksIGZhciB0b28gbWFueSBjb21waWxlcnMgaGF2ZSBvcHRpbWl6ZXIgYnVncyAuLi4gYmUgcHJlcGFyZWQgdG8KLWJhY2sgb2ZmIGlmIHRoZSBjb2RlIGZhaWxzIHNlbGYtdGVzdC4pICBJZiB5b3UgZG8gYW55IGV4cGVyaW1lbnRhdGlvbiBhbG9uZwotdGhlc2UgbGluZXMsIHBsZWFzZSByZXBvcnQgdGhlIG9wdGltYWwgc2V0dGluZ3MgdG8ganBlZy1pbmZvQGpwZWdjbHViLm9yZyBzbwotd2UgY2FuIG1lbnRpb24gdGhlbSBpbiBmdXR1cmUgcmVsZWFzZXMuICBCZSBzdXJlIHRvIHNwZWNpZnkgeW91ciBtYWNoaW5lIGFuZAotY29tcGlsZXIgdmVyc2lvbi4KLQotCi1ISU5UUyBGT1IgU1BFQ0lGSUMgU1lTVEVNUwotPT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotV2Ugd2VsY29tZSByZXBvcnRzIG9uIGNoYW5nZXMgbmVlZGVkIGZvciBzeXN0ZW1zIG5vdCBtZW50aW9uZWQgaGVyZS4gIFN1Ym1pdAotJ2VtIHRvIGpwZWctaW5mb0BqcGVnY2x1Yi5vcmcuICBBbHNvLCBpZiBjb25maWd1cmUgb3IgY2tjb25maWcuYyBpcyB3cm9uZwotYWJvdXQgaG93IHRvIGNvbmZpZ3VyZSB0aGUgSlBFRyBzb2Z0d2FyZSBmb3IgeW91ciBzeXN0ZW0sIHBsZWFzZSBsZXQgdXMga25vdy4KLQotCi1BY29ybiBSSVNDIE9TOgotCi0oVGhhbmtzIHRvIFNpbW9uIE1pZGRsZXRvbiBmb3IgdGhlc2UgaGludHMgb24gY29tcGlsaW5nIHdpdGggRGVza3RvcCBDLikKLUFmdGVyIHJlbmFtaW5nIHRoZSBmaWxlcyBhY2NvcmRpbmcgdG8gQWNvcm4gY29udmVudGlvbnMsIHRha2UgYSBjb3B5IG9mCi1tYWtlZmlsZS5hbnNpLCBjaGFuZ2UgYWxsIG9jY3VycmVuY2VzIG9mICdsaWJqcGVnLmEnIHRvICdsaWJqcGVnLm8nIGFuZAotY2hhbmdlIHRoZXNlIGRlZmluaXRpb25zIGFzIGluZGljYXRlZDoKLQotQ0ZMQUdTPSAtdGhyb3diYWNrIC1JQzogLVduCi1MRExJQlM9QzpvLlN0dWJzCi1TWVNERVBNRU09am1lbWFuc2kubwotTE49TGluawotQVI9TGliRmlsZSAtYyAtbwotCi1BbHNvIGFkZCBhIG5ldyBsaW5lICcuYy5vOjsgJChjYykgJDwgJChjZmxhZ3MpIC1jIC1vICRAJy4gIFJlbW92ZSB0aGUKLWxpbmVzICckKFJNKSBsaWJqcGVnLm8nIGFuZCAnJChBUjIpIGxpYmpwZWcubycgYW5kIHRoZSAnamNvbmZpZy5oJwotZGVwZW5kZW5jeSBzZWN0aW9uLgotCi1Db3B5IGpjb25maWcudHh0IHRvIGpjb25maWcuaC4gIEVkaXQgamNvbmZpZy5oIHRvIGRlZmluZSBUV09fRklMRV9DT01NQU5ETElORQotYW5kIENIQVJfSVNfVU5TSUdORUQuCi0KLVJ1biB0aGUgbWFrZWZpbGUgdXNpbmcgIUFNVSBub3QgIU1ha2UuICBJZiB5b3Ugd2FudCB0byB1c2UgdGhlICdjbGVhbicgYW5kCi0ndGVzdCcgbWFrZWZpbGUgZW50cmllcyB0aGVuIHlvdSB3aWxsIGhhdmUgdG8gZmlkZGxlIHdpdGggdGhlIHN5bnRheCBhIGJpdAotYW5kIHJlbmFtZSB0aGUgdGVzdCBmaWxlcy4KLQotCi1BbWlnYToKLQotU0FTIEMgNi41MCByZXBvcnRlZGx5IGlzIHRvbyBidWdneSB0byBjb21waWxlIHRoZSBJSkcgY29kZSBwcm9wZXJseS4KLUEgcGF0Y2ggdG8gdXBkYXRlIHRvIDYuNTEgaXMgYXZhaWxhYmxlIGZyb20gU0FTIG9yIEFtaU5ldCBGVFAgc2l0ZXMuCi0KLVRoZSBzdXBwbGllZCBjb25maWcgZmlsZXMgYXJlIHNldCB1cCB0byB1c2Ugam1lbW5hbWUuYyBhcyB0aGUgbWVtb3J5Ci1tYW5hZ2VyLCB3aXRoIHRlbXBvcmFyeSBmaWxlcyBiZWluZyBjcmVhdGVkIG9uIHRoZSBkZXZpY2UgbmFtZWQgYnkKLSJKUEVHVE1QOiIuCi0KLQotQXRhcmkgU1QvU1RFL1RUOgotCi1Db3B5IHRoZSBwcm9qZWN0IGZpbGVzIG1ha2NqcGVnLnN0LCBtYWtkanBlZy5zdCwgbWFrdGpwZWcuc3QsIGFuZCBtYWtsanBlZy5zdAotdG8gY2pwZWcucHJqLCBkanBlZy5wcmosIGpwZWd0cmFuLnByaiwgYW5kIGxpYmpwZWcucHJqIHJlc3BlY3RpdmVseS4gIFRoZQotcHJvamVjdCBmaWxlcyBzaG91bGQgd29yayBhcy1pcyB3aXRoIFB1cmUgQy4gIEZvciBUdXJibyBDLCBjaGFuZ2UgbGlicmFyeQotZmlsZW5hbWVzICJwYy4uLiIgdG8gInRjLi4uIiBpbiBlYWNoIHByb2plY3QgZmlsZS4gIE5vdGUgdGhhdCBsaWJqcGVnLnByagotc2VsZWN0cyBqbWVtYW5zaS5jIGFzIHRoZSByZWNvbW1lbmRlZCBtZW1vcnkgbWFuYWdlci4gIFlvdSdsbCBwcm9iYWJseSB3YW50IHRvCi1hZGp1c3QgdGhlIERFRkFVTFRfTUFYX01FTSBzZXR0aW5nIC0tLSB5b3Ugd2FudCBpdCB0byBiZSBhIGNvdXBsZSBodW5kcmVkIEsKLWxlc3MgdGhhbiB5b3VyIG5vcm1hbCBmcmVlIG1lbW9yeS4gIFB1dCAiI2RlZmluZSBERUZBVUxUX01BWF9NRU0gbm5ubiIgaW50bwotamNvbmZpZy5oIHRvIGRvIHRoaXMuCi0KLVRvIHVzZSB0aGUgNjg4ODEvNjg4ODIgY29wcm9jZXNzb3IgZm9yIHRoZSBmbG9hdGluZyBwb2ludCBEQ1QsIGFkZCB0aGUKLWNvbXBpbGVyIG9wdGlvbiAiLTgiIHRvIHRoZSBwcm9qZWN0IGZpbGVzIGFuZCByZXBsYWNlIHBjZmx0bGliLmxpYiB3aXRoCi1wYzg4MWxpYi5saWIgaW4gY2pwZWcucHJqIGFuZCBkanBlZy5wcmouICBPciBpZiB5b3UgZG9uJ3QgaGF2ZSBhCi1jb3Byb2Nlc3NvciwgeW91IG1heSBwcmVmZXIgdG8gcmVtb3ZlIHRoZSBmbG9hdCBEQ1QgY29kZSBieSB1bmRlZmluaW5nCi1EQ1RfRkxPQVRfU1VQUE9SVEVEIGluIGptb3JlY2ZnLmggKHNpbmNlIHdpdGhvdXQgYSBjb3Byb2Nlc3NvciwgdGhlIGZsb2F0Ci1jb2RlIHdpbGwgYmUgdG9vIHNsb3cgdG8gYmUgdXNlZnVsKS4gIEluIHRoYXQgY2FzZSwgeW91IGNhbiBkZWxldGUKLXBjZmx0bGliLmxpYiBmcm9tIHRoZSBwcm9qZWN0IGZpbGVzLgotCi1Ob3RlIHRoYXQgeW91IG11c3QgbWFrZSBsaWJqcGVnLmxpYiBiZWZvcmUgbWFraW5nIGNqcGVnLnR0cCwgZGpwZWcudHRwLAotb3IganBlZ3RyYW4udHRwLiAgWW91J2xsIGhhdmUgdG8gcGVyZm9ybSB0aGUgc2VsZi10ZXN0IGJ5IGhhbmQuCi0KLVdlIGhhdmVuJ3QgYm90aGVyZWQgdG8gaW5jbHVkZSBwcm9qZWN0IGZpbGVzIGZvciByZGpwZ2NvbSBhbmQgd3JqcGdjb20uCi1UaG9zZSBzb3VyY2UgZmlsZXMgc2hvdWxkIGp1c3QgYmUgY29tcGlsZWQgYnkgdGhlbXNlbHZlczsgdGhleSBkb24ndAotZGVwZW5kIG9uIHRoZSBKUEVHIGxpYnJhcnkuICBZb3UgY2FuIHVzZSB0aGUgZGVmYXVsdC5wcmogcHJvamVjdCBmaWxlCi1vZiB0aGUgUHVyZSBDIGRpc3RyaWJ1dGlvbiB0byBtYWtlIHRoZSBwcm9ncmFtcy4KLQotVGhlcmUgaXMgYSBidWcgaW4gc29tZSBvbGRlciB2ZXJzaW9ucyBvZiB0aGUgVHVyYm8gQyBsaWJyYXJ5IHdoaWNoIGNhdXNlcyB0aGUKLXNwYWNlIHVzZWQgYnkgdGVtcG9yYXJ5IGZpbGVzIGNyZWF0ZWQgd2l0aCAidG1wZmlsZSgpIiBub3QgdG8gYmUgZnJlZWQgYWZ0ZXIKLWFuIGFibm9ybWFsIHByb2dyYW0gZXhpdC4gIElmIHlvdSBjaGVjayB5b3VyIGRpc2sgYWZ0ZXJ3YXJkcywgeW91IHdpbGwgZmluZAotY2x1c3RlciBjaGFpbnMgdGhhdCBhcmUgYWxsb2NhdGVkIGJ1dCBub3QgdXNlZCBieSBhIGZpbGUuICBUaGlzIHNob3VsZCBub3QKLWhhcHBlbiBpbiBjanBlZy9kanBlZy9qcGVndHJhbiwgc2luY2Ugd2UgZW5hYmxlIGEgc2lnbmFsIGNhdGNoZXIgdG8gZXhwbGljaXRseQotY2xvc2UgdGVtcCBmaWxlcyBiZWZvcmUgZXhpdGluZy4gIEJ1dCBpZiB5b3UgdXNlIHRoZSBKUEVHIGxpYnJhcnkgd2l0aCB5b3VyCi1vd24gY29kZSwgYmUgc3VyZSB0byBzdXBwbHkgYSBzaWduYWwgY2F0Y2hlciwgb3IgZWxzZSB1c2UgYSBkaWZmZXJlbnQKLXN5c3RlbS1kZXBlbmRlbnQgbWVtb3J5IG1hbmFnZXIuCi0KLQotQ3JheToKLQotU2hvdWxkIHlvdSBiZSBzbyBmb3J0dW5hdGUgYXMgdG8gYmUgcnVubmluZyBKUEVHIG9uIGEgQ3JheSBZTVAsIHRoZXJlIGlzIGEKLWNvbXBpbGVyIGJ1ZyBpbiBvbGQgdmVyc2lvbnMgb2YgQ3JheSdzIFN0YW5kYXJkIEMgKHByaW9yIHRvIDMuMSkuICBJZiB5b3UKLXN0aWxsIGhhdmUgYW4gb2xkIGNvbXBpbGVyLCB5b3UnbGwgbmVlZCB0byBpbnNlcnQgYSBsaW5lIHJlYWRpbmcKLSIjcHJhZ21hIG5vdmVjdG9yIiBqdXN0IGJlZm9yZSB0aGUgbG9vcAkKLSAgICBmb3IgKGkgPSAxOyBpIDw9IChpbnQpIGh0YmwtPmJpdHNbbF07IGkrKykKLSAgICAgIGh1ZmZzaXplW3ArK10gPSAoY2hhcikgbDsKLWluIGZpeF9odWZmX3RibCAoaW4gVjViZXRhMSwgbGluZSAyMDQgb2YgamNodWZmLmMgYW5kIGxpbmUgMTc2IG9mIGpkaHVmZi5jKS4KLVtUaGlzIGJ1ZyBtYXkgb3IgbWF5IG5vdCBzdGlsbCBvY2N1ciB3aXRoIHRoZSBjdXJyZW50IElKRyBjb2RlLCBidXQgaXQncwotcHJvYmFibHkgYSBkZWFkIGlzc3VlIGFueXdheS4uLl0KLQotCi1IUC1VWDoKLQotSWYgeW91IGhhdmUgSFAtVVggNy4wNSBvciBsYXRlciB3aXRoIHRoZSAic29mdHdhcmUgZGV2ZWxvcG1lbnQiIEMgY29tcGlsZXIsCi15b3Ugc2hvdWxkIHJ1biB0aGUgY29tcGlsZXIgaW4gQU5TSSBtb2RlLiAgSWYgdXNpbmcgdGhlIGNvbmZpZ3VyZSBzY3JpcHQsCi1zYXkKLQkuL2NvbmZpZ3VyZSBDQz0nY2MgLUFhJwotKG9yIC1BZSBpZiB5b3UgcHJlZmVyKS4gIElmIGNvbmZpZ3VyaW5nIGJ5IGhhbmQsIHVzZSBtYWtlZmlsZS5hbnNpIGFuZCBhZGQKLSItQWEiIHRvIHRoZSBDRkxBR1MgbGluZSBpbiB0aGUgbWFrZWZpbGUuCi0KLUlmIHlvdSBoYXZlIGEgcHJlLTcuMDUgc3lzdGVtLCBvciBpZiB5b3UgYXJlIHVzaW5nIHRoZSBub24tQU5TSSBDIGNvbXBpbGVyCi1kZWxpdmVyZWQgd2l0aCBhIG1pbmltdW0gSFAtVVggc3lzdGVtLCB0aGVuIHlvdSBtdXN0IHVzZSBtYWtlZmlsZS51bml4Ci0oYW5kIGRvIE5PVCBhZGQgLUFhKTsgb3IganVzdCBydW4gY29uZmlndXJlIHdpdGhvdXQgdGhlIENDIG9wdGlvbi4KLQotT24gSFAgOTAwMCBzZXJpZXMgODAwIG1hY2hpbmVzLCB0aGUgSFAgQyBjb21waWxlciBpcyBidWdneSBpbiByZXZpc2lvbnMgcHJpb3IKLXRvIEEuMDguMDcuICBJZiB5b3UgZ2V0IGNvbXBsYWludHMgYWJvdXQgIm5vdCBhIHR5cGVkZWYgbmFtZSIsIHlvdSdsbCBoYXZlIHRvCi11c2UgbWFrZWZpbGUudW5peCwgb3IgcnVuIGNvbmZpZ3VyZSB3aXRob3V0IHRoZSBDQyBvcHRpb24uCi0KLQotTWFjaW50b3NoLCBnZW5lcmljIGNvbW1lbnRzOgotCi1UaGUgc3VwcGxpZWQgdXNlci1pbnRlcmZhY2UgZmlsZXMgKGNqcGVnLmMsIGRqcGVnLmMsIGV0YykgYXJlIHNldCB1cCB0bwotcHJvdmlkZSBhIFVuaXgtc3R5bGUgY29tbWFuZCBsaW5lIGludGVyZmFjZS4gIFlvdSBjYW4gdXNlIHRoaXMgaW50ZXJmYWNlIG9uCi10aGUgTWFjIGJ5IG1lYW5zIG9mIHRoZSBjY29tbWFuZCgpIGxpYnJhcnkgcm91dGluZSBwcm92aWRlZCBieSBNZXRyb3dlcmtzCi1Db2RlV2FycmlvciBvciBUaGluayBDLiAgVGhpcyBpcyBvbmx5IGFwcHJvcHJpYXRlIGZvciB0ZXN0aW5nIHRoZSBsaWJyYXJ5LAotaG93ZXZlcjsgdG8gbWFrZSBhIHVzZXItZnJpZW5kbHkgZXF1aXZhbGVudCBvZiBjanBlZy9kanBlZyB5b3UnZCByZWFsbHkgd2FudAotdG8gZGV2ZWxvcCBhIE1hYy1zdHlsZSB1c2VyIGludGVyZmFjZS4gIFRoZXJlIGlzbid0IGEgY29tcGxldGUgZXhhbXBsZQotYXZhaWxhYmxlIGF0IHRoZSBtb21lbnQsIGJ1dCB0aGVyZSBhcmUgc29tZSBoZWxwZnVsIHN0YXJ0aW5nIHBvaW50czoKLTEuIFNhbSBCdXNoZWxsJ3MgZnJlZSAiVG8gSlBFRyIgYXBwbGV0IHByb3ZpZGVzIGRyYWctYW5kLWRyb3AgY29udmVyc2lvbiB0bwotSlBFRyB1bmRlciBTeXN0ZW0gNyBhbmQgbGF0ZXIuICBUaGlzIG9ubHkgaWxsdXN0cmF0ZXMgaG93IHRvIHVzZSB0aGUKLWNvbXByZXNzaW9uIGhhbGYgb2YgdGhlIGxpYnJhcnksIGJ1dCBpdCBkb2VzIGEgdmVyeSBuaWNlIGpvYiBvZiB0aGF0IHBhcnQuCi1UaGUgQ29kZVdhcnJpb3Igc291cmNlIGNvZGUgaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL3d3dy5wb2JveC5jb20vfmpzYW0uCi0yLiBKaW0gQnJ1bm5lciBwcmVwYXJlZCBhIE1hYy1zdHlsZSB1c2VyIGludGVyZmFjZSBmb3IgYm90aCBjb21wcmVzc2lvbiBhbmQKLWRlY29tcHJlc3Npb24uICBVbmZvcnR1bmF0ZWx5LCBpdCBoYXNuJ3QgYmVlbiB1cGRhdGVkIHNpbmNlIElKRyB2NCwgYW5kCi10aGUgbGlicmFyeSdzIEFQSSBoYXMgY2hhbmdlZCBjb25zaWRlcmFibHkgc2luY2UgdGhlbi4gIFN0aWxsIGl0IG1heSBiZSBvZgotc29tZSBoZWxwLCBwYXJ0aWN1bGFybHkgYXMgYSBndWlkZSB0byBjb21waWxpbmcgdGhlIElKRyBjb2RlIHVuZGVyIFRoaW5rIEMuCi1KaW0ncyBjb2RlIGlzIGF2YWlsYWJsZSBmcm9tIHRoZSBJbmZvLU1hYyBhcmNoaXZlcywgYXQgc3VtZXgtYWltLnN0YW5mb3JkLmVkdQotb3IgbWlycm9ycyB0aGVyZW9mOyBzZWUgZmlsZSAvaW5mby1tYWMvZGV2L3NyYy9qcGVnLWNvbnZlcnQtYy5ocXguCi0KLWptZW1tYWMuYyBpcyB0aGUgcmVjb21tZW5kZWQgbWVtb3J5IG1hbmFnZXIgYmFjayBlbmQgZm9yIE1hY2ludG9zaC4gIEl0IHVzZXMKLU5ld1B0ci9EaXNwb3NlUHRyIGluc3RlYWQgb2YgbWFsbG9jL2ZyZWUsIGFuZCBoYXMgYSBNYWMtc3BlY2lmaWMKLWltcGxlbWVudGF0aW9uIG9mIGpwZWdfbWVtX2F2YWlsYWJsZSgpLiAgSXQgYWxzbyBjcmVhdGVzIHRlbXBvcmFyeSBmaWxlcyB0aGF0Ci1mb2xsb3cgTWFjIGNvbnZlbnRpb25zLiAgKFRoYXQgcGFydCBvZiB0aGUgY29kZSByZWxpZXMgb24gU3lzdGVtLTctb3ItbGF0ZXIgT1MKLWZ1bmN0aW9ucy4gIFNlZSB0aGUgY29tbWVudHMgaW4gam1lbW1hYy5jIGlmIHlvdSBuZWVkIHRvIHJ1biBpdCBvbiBTeXN0ZW0gNi4pCi1OT1RFIHRoYXQgVVNFX01BQ19NRU1NR1IgbXVzdCBiZSBkZWZpbmVkIGluIGpjb25maWcuaCB0byB1c2Ugam1lbW1hYy5jLgotCi1Zb3UgY2FuIGFsc28gdXNlIGptZW1ub2JzLmMsIGlmIHlvdSBkb24ndCBjYXJlIGFib3V0IGhhbmRsaW5nIGltYWdlcyBsYXJnZXIKLXRoYW4gYXZhaWxhYmxlIG1lbW9yeS4gIElmIHlvdSB1c2UgYW55IG1lbW9yeSBtYW5hZ2VyIGJhY2sgZW5kIG90aGVyIHRoYW4KLWptZW1tYWMuYywgd2UgcmVjb21tZW5kIHJlcGxhY2luZyAibWFsbG9jIiBhbmQgImZyZWUiIGJ5ICJOZXdQdHIiIGFuZAotIkRpc3Bvc2VQdHIiLCBiZWNhdXNlIE1hYyBDIGxpYnJhcmllcyBvZnRlbiBoYXZlIHBlY3VsaWFyIGltcGxlbWVudGF0aW9ucyBvZgotbWFsbG9jL2ZyZWUuICAoRm9yIGluc3RhbmNlLCBmcmVlKCkgbWF5IG5vdCByZXR1cm4gdGhlIGZyZWVkIHNwYWNlIHRvIHRoZQotTWFjIE1lbW9yeSBNYW5hZ2VyLiAgVGhpcyBpcyB1bmRlc2lyYWJsZSBmb3IgdGhlIElKRyBjb2RlIGJlY2F1c2Ugam1lbW1nci5jCi1hbHJlYWR5IGNsdW1wcyBzcGFjZSByZXF1ZXN0cy4pCi0KLQotTWFjaW50b3NoLCBNZXRyb3dlcmtzIENvZGVXYXJyaW9yOgotCi1UaGUgVW5peC1jb21tYW5kLWxpbmUtc3R5bGUgaW50ZXJmYWNlIGNhbiBiZSB1c2VkIGJ5IGRlZmluaW5nIFVTRV9DQ09NTUFORC4KLVlvdSdsbCBhbHNvIG5lZWQgdG8gZGVmaW5lIFRXT19GSUxFX0NPTU1BTkRMSU5FIHRvIGF2b2lkIHN0ZGluL3N0ZG91dC4KLVRoaXMgbWVhbnMgdGhhdCB3aGVuIHVzaW5nIHRoZSBjanBlZy9kanBlZyBwcm9ncmFtcywgeW91J2xsIGhhdmUgdG8gdHlwZSB0aGUKLWlucHV0IGFuZCBvdXRwdXQgZmlsZSBuYW1lcyBpbiB0aGUgIkFyZ3VtZW50cyIgdGV4dC1lZGl0IGJveCwgcmF0aGVyIHRoYW4KLXVzaW5nIHRoZSBmaWxlIHJhZGlvIGJ1dHRvbnMuICAoUGVyaGFwcyBVU0VfRkRPUEVOIG9yIFVTRV9TRVRNT0RFIHdvdWxkCi1lbGltaW5hdGUgdGhlIHByb2JsZW0sIGJ1dCBJIGhhdmVuJ3QgaGVhcmQgZnJvbSBhbnlvbmUgd2hvJ3MgdHJpZWQgaXQuKQotCi1PbiA2ODB4MCBNYWNzLCBNZXRyb3dlcmtzIGRlZmluZXMgdHlwZSAiZG91YmxlIiBhcyBhIDEwLWJ5dGUgSUVFRSBleHRlbmRlZAotZmxvYXQuICBqbWVtbWdyLmMgd29uJ3QgbGlrZSB0aGlzOiBpdCB3YW50cyBzaXplb2YoQUxJR05fVFlQRSkgdG8gYmUgYSBwb3dlcgotb2YgMi4gIEFkZCAiI2RlZmluZSBBTElHTl9UWVBFIGxvbmciIHRvIGpjb25maWcuaCB0byBlbGltaW5hdGUgdGhlIGNvbXBsYWludC4KLQotVGhlIHN1cHBsaWVkIGNvbmZpZ3VyYXRpb24gZmlsZSBqY29uZmlnLm1hYyBjYW4gYmUgdXNlZCBmb3IgeW91ciBqY29uZmlnLmg7Ci1pdCBpbmNsdWRlcyBhbGwgdGhlIHJlY29tbWVuZGVkIHN5bWJvbCBkZWZpbml0aW9ucy4gIElmIHlvdSBoYXZlIEFwcGxlU2NyaXB0Ci1pbnN0YWxsZWQsIHlvdSBjYW4gcnVuIHRoZSBzdXBwbGllZCBzY3JpcHQgbWFrZXByb2oubWFjIHRvIGNyZWF0ZSBDb2RlV2FycmlvcgotcHJvamVjdCBmaWxlcyBmb3IgdGhlIGxpYnJhcnkgYW5kIHRoZSB0ZXN0YmVkIGFwcGxpY2F0aW9ucywgdGhlbiBidWlsZCB0aGUKLWxpYnJhcnkgYW5kIGFwcGxpY2F0aW9ucy4gIChUaGFua3MgdG8gRGFuIFNlYXJzIGFuZCBEb24gQWdybyBmb3IgdGhpcyBuaWZ0eQotaGFjaywgd2hpY2ggc2F2ZXMgdXMgZnJvbSB0cnlpbmcgdG8gbWFpbnRhaW4gQ29kZVdhcnJpb3IgcHJvamVjdCBmaWxlcyBhcyBwYXJ0Ci1vZiB0aGUgSUpHIGRpc3RyaWJ1dGlvbi4uLikKLQotCi1NYWNpbnRvc2gsIFRoaW5rIEM6Ci0KLVRoZSBkb2N1bWVudGF0aW9uIGluIEppbSBCcnVubmVyJ3MgIkpQRUcgQ29udmVydCIgc291cmNlIGNvZGUgKHNlZSBhYm92ZSkKLWluY2x1ZGVzIGRldGFpbGVkIGJ1aWxkIGluc3RydWN0aW9ucyBmb3IgVGhpbmsgQzsgaXQncyBwcm9iYWJseSBzb21ld2hhdAotb3V0IG9mIGRhdGUgZm9yIHRoZSBjdXJyZW50IHJlbGVhc2UsIGJ1dCBtYXkgYmUgaGVscGZ1bC4KLQotSWYgeW91IHdhbnQgdG8gYnVpbGQgdGhlIG1pbmltYWwgY29tbWFuZCBsaW5lIHZlcnNpb24sIHByb2NlZWQgYXMgZm9sbG93cy4KLVlvdSdsbCBoYXZlIHRvIHByZXBhcmUgcHJvamVjdCBmaWxlcyBmb3IgdGhlIHByb2dyYW1zOyB3ZSBkb24ndCBpbmNsdWRlIGFueQotaW4gdGhlIGRpc3RyaWJ1dGlvbiBzaW5jZSB0aGV5IGFyZSBub3QgdGV4dCBmaWxlcy4gIFVzZSB0aGUgZmlsZSBsaXN0cyBpbgotYW55IG9mIHRoZSBzdXBwbGllZCBtYWtlZmlsZXMgYXMgYSBndWlkZS4gIEFsc28gYWRkIHRoZSBBTlNJIGFuZCBVbml4IEMKLWxpYnJhcmllcyBpbiBhIHNlcGFyYXRlIHNlZ21lbnQuICBZb3UgbWF5IG5lZWQgdG8gZGl2aWRlIHRoZSBKUEVHIGZpbGVzIGludG8KLW1vcmUgdGhhbiBvbmUgc2VnbWVudDsgd2UgcmVjb21tZW5kIGRpdmlkaW5nIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uCi1tb2R1bGVzLiAgRGVmaW5lIFVTRV9DQ09NTUFORCBpbiBqY29uZmlnLmggc28gdGhhdCB0aGUgY2NvbW1hbmQoKSByb3V0aW5lIGlzCi1jYWxsZWQuICBZb3UgbXVzdCBhbHNvIGRlZmluZSBUV09fRklMRV9DT01NQU5ETElORSBiZWNhdXNlIHN0ZGluL3N0ZG91dAotZG9uJ3QgaGFuZGxlIGJpbmFyeSBkYXRhIGNvcnJlY3RseS4KLQotT24gNjgweDAgTWFjcywgVGhpbmsgQyBkZWZpbmVzIHR5cGUgImRvdWJsZSIgYXMgYSAxMi1ieXRlIElFRUUgZXh0ZW5kZWQgZmxvYXQuCi1qbWVtbWdyLmMgd29uJ3QgbGlrZSB0aGlzOiBpdCB3YW50cyBzaXplb2YoQUxJR05fVFlQRSkgdG8gYmUgYSBwb3dlciBvZiAyLgotQWRkICIjZGVmaW5lIEFMSUdOX1RZUEUgbG9uZyIgdG8gamNvbmZpZy5oIHRvIGVsaW1pbmF0ZSB0aGUgY29tcGxhaW50LgotCi1qY29uZmlnLm1hYyBzaG91bGQgd29yayBhcyBhIGpjb25maWcuaCBjb25maWd1cmF0aW9uIGZpbGUgZm9yIFRoaW5rIEMsCi1idXQgdGhlIG1ha2Vwcm9qLm1hYyBBcHBsZVNjcmlwdCBzY3JpcHQgaXMgc3BlY2lmaWMgdG8gQ29kZVdhcnJpb3IuICBTb3JyeS4KLQotCi1NSVBTIFIzMDAwOgotCi1NSVBTJ3MgY2MgdmVyc2lvbiAxLjMxIGhhcyBhIHJhdGhlciBuYXN0eSBvcHRpbWl6YXRpb24gYnVnLiAgRG9uJ3QgdXNlIC1PCi1pZiB5b3UgaGF2ZSB0aGF0IGNvbXBpbGVyIHZlcnNpb24uICAoVXNlICJjYyAtViIgdG8gY2hlY2sgdGhlIHZlcnNpb24uKQotTm90ZSB0aGF0IHRoZSBSMzAwMCBjaGlwIGlzIGZvdW5kIGluIHdvcmtzdGF0aW9ucyBmcm9tIERFQyBhbmQgb3RoZXJzLgotCi0KLU1TLURPUywgZ2VuZXJpYyBjb21tZW50cyBmb3IgMTYtYml0IGNvbXBpbGVyczoKLQotVGhlIElKRyBjb2RlIGlzIGRlc2lnbmVkIHRvIHdvcmsgd2VsbCBpbiA4MHg4NiAic21hbGwiIG9yICJtZWRpdW0iIG1lbW9yeQotbW9kZWxzIChpLmUuLCBkYXRhIHBvaW50ZXJzIGFyZSAxNiBiaXRzIHVubGVzcyBleHBsaWNpdGx5IGRlY2xhcmVkICJmYXIiOwotY29kZSBwb2ludGVycyBjYW4gYmUgZWl0aGVyIHNpemUpLiAgWW91IG1heSBiZSBhYmxlIHRvIHVzZSBzbWFsbCBtb2RlbCB0bwotY29tcGlsZSBjanBlZyBvciBkanBlZyBieSBpdHNlbGYsIGJ1dCB5b3Ugd2lsbCBwcm9iYWJseSBoYXZlIHRvIHVzZSBtZWRpdW0KLW1vZGVsIGZvciBhbnkgbGFyZ2VyIGFwcGxpY2F0aW9uLiAgVGhpcyB3b24ndCBtYWtlIG11Y2ggZGlmZmVyZW5jZSBpbgotcGVyZm9ybWFuY2UuICBZb3UgKndpbGwqIHRha2UgYSBub3RpY2VhYmxlIHBlcmZvcm1hbmNlIGhpdCBpZiB5b3UgdXNlIGEKLWxhcmdlLWRhdGEgbWVtb3J5IG1vZGVsLCBhbmQgeW91IHNob3VsZCBhdm9pZCAiaHVnZSIgbW9kZWwgaWYgYXQgYWxsCi1wb3NzaWJsZS4gIEJlIHN1cmUgdGhhdCBORUVEX0ZBUl9QT0lOVEVSUyBpcyBkZWZpbmVkIGluIGpjb25maWcuaCBpZiB5b3UgdXNlCi1hIHNtYWxsLWRhdGEgbWVtb3J5IG1vZGVsOyBiZSBzdXJlIGl0IGlzIE5PVCBkZWZpbmVkIGlmIHlvdSB1c2UgYSBsYXJnZS1kYXRhCi1tb2RlbC4gIChUaGUgc3VwcGxpZWQgbWFrZWZpbGVzIGFuZCBqY29uZmlnIGZpbGVzIGZvciBCb3JsYW5kIGFuZCBNaWNyb3NvZnQgQwotY29tcGlsZSBpbiBtZWRpdW0gbW9kZWwgYW5kIGRlZmluZSBORUVEX0ZBUl9QT0lOVEVSUy4pCi0KLVRoZSBET1Mtc3BlY2lmaWMgbWVtb3J5IG1hbmFnZXIsIGptZW1kb3MuYywgc2hvdWxkIGJlIHVzZWQgaWYgcG9zc2libGUuCi1JdCBuZWVkcyBzb21lIGFzc2VtYmx5LWNvZGUgcm91dGluZXMgd2hpY2ggYXJlIGluIGptZW1kb3NhLmFzbTsgbWFrZSBzdXJlCi15b3VyIG1ha2VmaWxlIGFzc2VtYmxlcyB0aGF0IGZpbGUgYW5kIGluY2x1ZGVzIGl0IGluIHRoZSBsaWJyYXJ5LiAgSWYgeW91Ci1kb24ndCBoYXZlIGEgc3VpdGFibGUgYXNzZW1ibGVyLCB5b3UgY2FuIGdldCBwcmUtYXNzZW1ibGVkIG9iamVjdCBmaWxlcyBmb3IKLWptZW1kb3NhIGJ5IEZUUCBmcm9tIGZ0cC51dS5uZXQ6L2dyYXBoaWNzL2pwZWcvamRvc2FvYmouemlwLiAgKERPUy1vcmllbnRlZAotZGlzdHJpYnV0aW9ucyBvZiB0aGUgSUpHIHNvdXJjZSBjb2RlIG9mdGVuIGluY2x1ZGUgdGhlc2Ugb2JqZWN0IGZpbGVzLikKLQotV2hlbiB1c2luZyBqbWVtZG9zLmMsIGpjb25maWcuaCBtdXN0IGRlZmluZSBVU0VfTVNET1NfTUVNTUdSIGFuZCBtdXN0IHNldAotTUFYX0FMTE9DX0NIVU5LIHRvIGxlc3MgdGhhbiA2NEsgKDY1NTIwTCBpcyBhIHR5cGljYWwgdmFsdWUpLiAgSWYgeW91cgotQyBsaWJyYXJ5J3MgZmFyLWhlYXAgbWFsbG9jKCkgY2FuJ3QgYWxsb2NhdGUgYmxvY2tzIHRoYXQgbGFyZ2UsIHJlZHVjZQotTUFYX0FMTE9DX0NIVU5LIHRvIHdoYXRldmVyIGl0IGNhbiBoYW5kbGUuCi0KLUlmIHlvdSBjYW4ndCB1c2Ugam1lbWRvcy5jIGZvciBzb21lIHJlYXNvbiAtLS0gZm9yIGV4YW1wbGUsIGJlY2F1c2UgeW91Ci1kb24ndCBoYXZlIGFuIGFzc2VtYmxlciB0byBhc3NlbWJsZSBqbWVtZG9zYS5hc20gLS0tIHlvdSdsbCBoYXZlIHRvIGZhbGwKLWJhY2sgdG8gam1lbWFuc2kuYyBvciBqbWVtbmFtZS5jLiAgWW91J2xsIHByb2JhYmx5IHN0aWxsIG5lZWQgdG8gc2V0Ci1NQVhfQUxMT0NfQ0hVTksgaW4gamNvbmZpZy5oLCBiZWNhdXNlIG1vc3QgRE9TIEMgbGlicmFyaWVzIHdvbid0IG1hbGxvYygpCi1tb3JlIHRoYW4gNjRLIGF0IGEgdGltZS4gIElNUE9SVEFOVDogaWYgeW91IHVzZSBqbWVtYW5zaS5jIG9yIGptZW1uYW1lLmMsCi15b3Ugd2lsbCBoYXZlIHRvIGNvbXBpbGUgaW4gYSBsYXJnZS1kYXRhIG1lbW9yeSBtb2RlbCBpbiBvcmRlciB0byBnZXQgdGhlCi1yaWdodCBzdGRpbyBsaWJyYXJ5LiAgVG9vIGJhZC4KLQotd3JqcGdjb20gbmVlZHMgdG8gYmUgY29tcGlsZWQgaW4gbGFyZ2UgbW9kZWwsIGJlY2F1c2UgaXQgbWFsbG9jKClzIGEgNjRLQgotd29yayBhcmVhIHRvIGhvbGQgdGhlIGNvbW1lbnQgdGV4dC4gIElmIHlvdXIgQyBsaWJyYXJ5J3MgbWFsbG9jIGNhbid0Ci1oYW5kbGUgdGhhdCwgcmVkdWNlIE1BWF9DT01fTEVOR1RIIGFzIG5lY2Vzc2FyeSBpbiB3cmpwZ2NvbS5jLgotCi1Nb3N0IE1TLURPUyBjb21waWxlcnMgdHJlYXQgc3RkaW4vc3Rkb3V0IGFzIHRleHQgZmlsZXMsIHNvIHlvdSBtdXN0IHVzZQotdHdvLWZpbGUgY29tbWFuZCBsaW5lIHN0eWxlLiAgQnV0IGlmIHlvdXIgY29tcGlsZXIgaGFzIGVpdGhlciBmZG9wZW4oKSBvcgotc2V0bW9kZSgpLCB5b3UgY2FuIHVzZSBvbmUtZmlsZSBzdHlsZSBpZiB5b3UgbGlrZS4gIFRvIGRvIHRoaXMsIGRlZmluZQotVVNFX1NFVE1PREUgb3IgVVNFX0ZET1BFTiBzbyB0aGF0IHN0ZGluL3N0ZG91dCB3aWxsIGJlIHNldCB0byBiaW5hcnkgbW9kZS4KLShVU0VfU0VUTU9ERSBzZWVtcyB0byB3b3JrIHdpdGggbW9yZSBET1MgY29tcGlsZXJzIHRoYW4gVVNFX0ZET1BFTi4pICBZb3UKLXNob3VsZCB0ZXN0IHRoYXQgSS9PIHRocm91Z2ggc3RkaW4vc3Rkb3V0IHByb2R1Y2VzIHRoZSBzYW1lIHJlc3VsdHMgYXMgSS9PCi10byBleHBsaWNpdGx5IG5hbWVkIGZpbGVzLi4uIHRoZSAibWFrZSB0ZXN0IiBwcm9jZWR1cmVzIGluIHRoZSBzdXBwbGllZAotbWFrZWZpbGVzIGRvIE5PVCB1c2Ugc3RkaW4vc3Rkb3V0LgotCi0KLU1TLURPUywgZ2VuZXJpYyBjb21tZW50cyBmb3IgMzItYml0IGNvbXBpbGVyczoKLQotTm9uZSBvZiB0aGUgYWJvdmUgY29tbWVudHMgYWJvdXQgbWVtb3J5IG1vZGVscyBhcHBseSBpZiB5b3UgYXJlIHVzaW5nIGEKLTMyLWJpdCBmbGF0LW1lbW9yeS1zcGFjZSBlbnZpcm9ubWVudCwgc3VjaCBhcyBESkdQUCBvciBXYXRjb20gQy4gIChBbmQgeW91Ci1zaG91bGQgdXNlIG9uZSBpZiB5b3UgaGF2ZSBpdCwgYXMgcGVyZm9ybWFuY2Ugd2lsbCBiZSBtdWNoIGJldHRlciB0aGFuCi04MDg2LWNvbXBhdGlibGUgY29kZSEpICBGb3IgZmxhdC1tZW1vcnktc3BhY2UgY29tcGlsZXJzLCBkbyBOT1QgZGVmaW5lCi1ORUVEX0ZBUl9QT0lOVEVSUywgYW5kIGRvIE5PVCB1c2Ugam1lbWRvcy5jLiAgVXNlIGptZW1ub2JzLmMgaWYgdGhlCi1lbnZpcm9ubWVudCBzdXBwbGllcyBhZGVxdWF0ZSB2aXJ0dWFsIG1lbW9yeSwgb3RoZXJ3aXNlIHVzZSBqbWVtYW5zaS5jIG9yCi1qbWVtbmFtZS5jLgotCi1Zb3UnbGwgc3RpbGwgbmVlZCB0byBiZSBjYXJlZnVsIGFib3V0IGJpbmFyeSBJL08gdGhyb3VnaCBzdGRpbi9zdGRvdXQuCi1TZWUgdGhlIGxhc3QgcGFyYWdyYXBoIG9mIHRoZSBwcmV2aW91cyBzZWN0aW9uLgotCi0KLU1TLURPUywgQm9ybGFuZCBDOgotCi1CZSBzdXJlIHRvIGNvbnZlcnQgYWxsIHRoZSBzb3VyY2UgZmlsZXMgdG8gRE9TIHRleHQgZm9ybWF0IChDUi9MRiBuZXdsaW5lcykuCi1BbHRob3VnaCBCb3JsYW5kIEMgd2lsbCBvZnRlbiB3b3JrIE9LIHdpdGggdW5tb2RpZmllZCBVbml4IChMRiBuZXdsaW5lcykKLXNvdXJjZSBmaWxlcywgc29tZXRpbWVzIGl0IHdpbGwgZ2l2ZSBib2d1cyBjb21waWxlIGVycm9ycy4KLSJJbGxlZ2FsIGNoYXJhY3RlciAnIyciIGlzIHRoZSBtb3N0IGNvbW1vbiBzdWNoIGVycm9yLiAgKFRoaXMgaXMgdHJ1ZSB3aXRoCi1Cb3JsYW5kIEMgMy4xLCBidXQgcGVyaGFwcyBpcyBmaXhlZCBpbiBuZXdlciByZWxlYXNlcy4pCi0KLUlmIHlvdSB3YW50IG9uZS1maWxlIGNvbW1hbmQgbGluZSBzdHlsZSwganVzdCB1bmRlZmluZSBUV09fRklMRV9DT01NQU5ETElORS4KLWpjb25maWcuYmNjIGFscmVhZHkgaW5jbHVkZXMgI2RlZmluZSBVU0VfU0VUTU9ERSB0byBtYWtlIHRoaXMgd29yay4KLShmZG9wZW4gZG9lcyBub3Qgd29yayBjb3JyZWN0bHkuKQotCi0KLU1TLURPUywgTWljcm9zb2Z0IEM6Ci0KLW1ha2VmaWxlLm1jNiB3b3JrcyB3aXRoIE1pY3Jvc29mdCBDLCBET1MgVmlzdWFsIEMrKywgZXRjLiAgSXQgc2hvdWxkIG9ubHkKLWJlIHVzZWQgaWYgeW91IHdhbnQgdG8gYnVpbGQgYSAxNi1iaXQgKHNtYWxsIG9yIG1lZGl1bSBtZW1vcnkgbW9kZWwpIHByb2dyYW0uCi0KLUlmIHlvdSB3YW50IG9uZS1maWxlIGNvbW1hbmQgbGluZSBzdHlsZSwganVzdCB1bmRlZmluZSBUV09fRklMRV9DT01NQU5ETElORS4KLWpjb25maWcubWM2IGFscmVhZHkgaW5jbHVkZXMgI2RlZmluZSBVU0VfU0VUTU9ERSB0byBtYWtlIHRoaXMgd29yay4KLShmZG9wZW4gZG9lcyBub3Qgd29yayBjb3JyZWN0bHkuKQotCi1Ob3RlIHRoYXQgdGhpcyBtYWtlZmlsZSBhc3N1bWVzIHRoYXQgdGhlIHdvcmtpbmcgY29weSBvZiBpdHNlbGYgaXMgY2FsbGVkCi0ibWFrZWZpbGUiLiAgSWYgeW91IHdhbnQgdG8gY2FsbCBpdCBzb21ldGhpbmcgZWxzZSwgc2F5ICJtYWtlZmlsZS5tYWsiLAotYmUgc3VyZSB0byBhZGp1c3QgdGhlIGRlcGVuZGVuY3kgbGluZSB0aGF0IHJlYWRzICIkKFJGSUxFKSA6IG1ha2VmaWxlIi4KLU90aGVyd2lzZSB0aGUgbWFrZSB3aWxsIGZhaWwgYmVjYXVzZSBpdCBkb2Vzbid0IGtub3cgaG93IHRvIGNyZWF0ZSAibWFrZWZpbGUiLgotV29yc2UsIHNvbWUgcmVsZWFzZXMgb2YgTWljcm9zb2Z0J3MgbWFrZSB1dGlsaXRpZXMgZ2l2ZSBhbiBpbmNvcnJlY3QgZXJyb3IKLW1lc3NhZ2UgaW4gdGhpcyBzaXR1YXRpb24uCi0KLU9sZCB2ZXJzaW9ucyBvZiBNUyBDIGZhaWwgd2l0aCBhbiAib3V0IG9mIG1hY3JvIGV4cGFuc2lvbiBzcGFjZSIgZXJyb3IKLWJlY2F1c2UgdGhleSBjYW4ndCBjb3BlIHdpdGggdGhlIG1hY3JvIFRSQUNFTVM4IChkZWZpbmVkIGluIGplcnJvci5oKS4KLUlmIHRoaXMgaGFwcGVucyB0byB5b3UsIHRoZSBlYXNpZXN0IHNvbHV0aW9uIGlzIHRvIGNoYW5nZSBUUkFDRU1TOCB0bwotZXhwYW5kIHRvIG5vdGhpbmcuICBZb3UnbGwgbG9zZSB0aGUgYWJpbGl0eSB0byBkdW1wIG91dCBKUEVHIGNvZWZmaWNpZW50Ci10YWJsZXMgd2l0aCBkanBlZyAtZGVidWcgLWRlYnVnLCBidXQgYXQgbGVhc3QgeW91IGNhbiBjb21waWxlLgotCi1PcmlnaW5hbCBNUyBDIDYuMCBpcyB2ZXJ5IGJ1Z2d5OyBpdCBjb21waWxlcyBpbmNvcnJlY3QgY29kZSB1bmxlc3MgeW91IHR1cm4KLW9mZiBvcHRpbWl6YXRpb24gZW50aXJlbHkgKHJlbW92ZSAtTyBmcm9tIENGTEFHUykuICA2LjAwQSBpcyBiZXR0ZXIsIGJ1dCBpdAotc3RpbGwgZ2VuZXJhdGVzIGJhZCBjb2RlIGlmIHlvdSBlbmFibGUgbG9vcCBvcHRpbWl6YXRpb25zICgtT2wgb3IgLU94KS4KLQotTVMgQyA4LjAgY3Jhc2hlcyB3aGVuIGNvbXBpbGluZyBqcXVhbnQxLmMgd2l0aCBvcHRpbWl6YXRpb24gc3dpdGNoIC9PbyAuLi4KLXdoaWNoIGlzIG9uIGJ5IGRlZmF1bHQuICBUbyB3b3JrIGFyb3VuZCB0aGlzIGJ1ZywgY29tcGlsZSB0aGF0IG9uZSBmaWxlCi13aXRoIC9Pby0uCi0KLQotTWljcm9zb2Z0IFdpbmRvd3MgKGFsbCB2ZXJzaW9ucyksIGdlbmVyaWMgY29tbWVudHM6Ci0KLVNvbWUgV2luZG93cyBzeXN0ZW0gaW5jbHVkZSBmaWxlcyBkZWZpbmUgdHlwZWRlZiBib29sZWFuIGFzICJ1bnNpZ25lZCBjaGFyIi4KLVRoZSBJSkcgY29kZSBhbHNvIGRlZmluZXMgdHlwZWRlZiBib29sZWFuLCBidXQgd2UgbWFrZSBpdCAiaW50IiBieSBkZWZhdWx0LgotVGhpcyBkb2Vzbid0IGFmZmVjdCB0aGUgSUpHIHByb2dyYW1zIGJlY2F1c2Ugd2UgZG9uJ3QgaW1wb3J0IHRob3NlIFdpbmRvd3MKLWluY2x1ZGUgZmlsZXMuICBCdXQgaWYgeW91IHVzZSB0aGUgSlBFRyBsaWJyYXJ5IGluIHlvdXIgb3duIHByb2dyYW0sIGFuZCBzb21lCi1vZiB5b3VyIHByb2dyYW0ncyBmaWxlcyBpbXBvcnQgb25lIGRlZmluaXRpb24gb2YgYm9vbGVhbiB3aGlsZSBzb21lIGltcG9ydCB0aGUKLW90aGVyLCB5b3UgY2FuIGdldCBhbGwgc29ydHMgb2YgbXlzdGVyaW91cyBwcm9ibGVtcy4gIEEgZ29vZCBwcmV2ZW50aXZlIHN0ZXAKLWlzIHRvIG1ha2UgdGhlIElKRyBsaWJyYXJ5IHVzZSAidW5zaWduZWQgY2hhciIgZm9yIGJvb2xlYW4uICBUbyBkbyB0aGF0LAotYWRkIHNvbWV0aGluZyBsaWtlIHRoaXMgdG8geW91ciBqY29uZmlnLmggZmlsZToKLQkvKiBEZWZpbmUgImJvb2xlYW4iIGFzIHVuc2lnbmVkIGNoYXIsIG5vdCBpbnQsIHBlciBXaW5kb3dzIGN1c3RvbSAqLwotCSNpZm5kZWYgX19SUENORFJfSF9fCS8qIGRvbid0IGNvbmZsaWN0IGlmIHJwY25kci5oIGFscmVhZHkgcmVhZCAqLwotCXR5cGVkZWYgdW5zaWduZWQgY2hhciBib29sZWFuOwotCSNlbmRpZgotCSNkZWZpbmUgSEFWRV9CT09MRUFOCS8qIHByZXZlbnQgam1vcmVjZmcuaCBmcm9tIHJlZGVmaW5pbmcgaXQgKi8KLShUaGlzIGlzIGFscmVhZHkgaW4gamNvbmZpZy52YywgYnkgdGhlIHdheS4pCi0KLXdpbmRlZi5oIGNvbnRhaW5zIHRoZSBkZWNsYXJhdGlvbnMKLQkjZGVmaW5lIGZhcgotCSNkZWZpbmUgRkFSIGZhcgotU2luY2Ugam1vcmVjZmcuaCB0cmllcyB0byBkZWZpbmUgRkFSIGFzIGVtcHR5LCB5b3UgbWF5IGdldCBhIGNvbXBpbGVyCi13YXJuaW5nIGlmIHlvdSBpbmNsdWRlIGJvdGgganBlZ2xpYi5oIGFuZCB3aW5kZWYuaCAod2hpY2ggd2luZG93cy5oCi1pbmNsdWRlcykuICBUbyBzdXBwcmVzcyB0aGUgd2FybmluZywgeW91IGNhbiBwdXQgIiNpZm5kZWYgRkFSIi8iI2VuZGlmIgotYXJvdW5kIHRoZSBsaW5lICIjZGVmaW5lIEZBUiIgaW4gam1vcmVjZmcuaC4KLShTb21ldGhpbmcgbGlrZSB0aGlzIGlzIGFscmVhZHkgaW4gam1vcmVjZmcuaCwgYnkgdGhlIHdheS4pCi0KLVdoZW4gdXNpbmcgdGhlIGxpYnJhcnkgaW4gYSBXaW5kb3dzIGFwcGxpY2F0aW9uLCB5b3Ugd2lsbCBhbG1vc3QgY2VydGFpbmx5Ci13YW50IHRvIG1vZGlmeSBvciByZXBsYWNlIHRoZSBlcnJvciBoYW5kbGVyIG1vZHVsZSBqZXJyb3IuYywgc2luY2Ugb3VyCi1kZWZhdWx0IGVycm9yIGhhbmRsZXIgZG9lcyBhIGNvdXBsZSBvZiBpbmFwcHJvcHJpYXRlIHRoaW5nczoKLSAgMS4gaXQgdHJpZXMgdG8gd3JpdGUgZXJyb3IgYW5kIHdhcm5pbmcgbWVzc2FnZXMgb24gc3RkZXJyOwotICAyLiBpbiBldmVudCBvZiBhIGZhdGFsIGVycm9yLCBpdCBleGl0cyBieSBjYWxsaW5nIGV4aXQoKS4KLQotQSBzaW1wbGUgc3RvcGdhcCBzb2x1dGlvbiBmb3IgcHJvYmxlbSAxIGlzIHRvIHJlcGxhY2UgdGhlIGxpbmUKLQlmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBidWZmZXIpOwotKGluIG91dHB1dF9tZXNzYWdlIGluIGplcnJvci5jKSB3aXRoCi0JTWVzc2FnZUJveChHZXRBY3RpdmVXaW5kb3coKSxidWZmZXIsIkpQRUcgRXJyb3IiLE1CX09LfE1CX0lDT05FUlJPUik7Ci1JdCdzIGhpZ2hseSByZWNvbW1lbmRlZCB0aGF0IHlvdSBhdCBsZWFzdCBkbyB0aGF0IG11Y2gsIHNpbmNlIG90aGVyd2lzZQotZXJyb3IgbWVzc2FnZXMgd2lsbCBkaXNhcHBlYXIgaW50byBub3doZXJlLiAgKEJlZ2lubmluZyB3aXRoIElKRyB2NmIsIHRoaXMKLWNvZGUgaXMgYWxyZWFkeSBwcmVzZW50IGluIGplcnJvci5jOyBqdXN0IGRlZmluZSBVU0VfV0lORE9XU19NRVNTQUdFQk9YIGluCi1qY29uZmlnLmggdG8gZW5hYmxlIGl0LikKLQotVGhlIHByb3BlciBzb2x1dGlvbiBmb3IgcHJvYmxlbSAyIGlzIHRvIHJldHVybiBjb250cm9sIHRvIHlvdXIgY2FsbGluZwotYXBwbGljYXRpb24gYWZ0ZXIgYSBsaWJyYXJ5IGVycm9yLiAgVGhpcyBjYW4gYmUgZG9uZSB3aXRoIHRoZSBzZXRqbXAvbG9uZ2ptcAotdGVjaG5pcXVlIGRpc2N1c3NlZCBpbiBsaWJqcGVnLnR4dCBhbmQgaWxsdXN0cmF0ZWQgaW4gZXhhbXBsZS5jLiAgKE5PVEU6Ci1zb21lIG9sZGVyIFdpbmRvd3MgQyBjb21waWxlcnMgcHJvdmlkZSB2ZXJzaW9ucyBvZiBzZXRqbXAvbG9uZ2ptcCB0aGF0Ci1kb24ndCBhY3R1YWxseSB3b3JrIHVuZGVyIFdpbmRvd3MuICBZb3UgbWF5IG5lZWQgdG8gdXNlIHRoZSBXaW5kb3dzIHN5c3RlbQotZnVuY3Rpb25zIENhdGNoIGFuZCBUaHJvdyBpbnN0ZWFkLikKLQotVGhlIHJlY29tbWVuZGVkIG1lbW9yeSBtYW5hZ2VyIHVuZGVyIFdpbmRvd3MgaXMgam1lbW5vYnMuYzsgaW4gb3RoZXIgd29yZHMsCi1sZXQgV2luZG93cyBkbyBhbnkgdmlydHVhbCBtZW1vcnkgbWFuYWdlbWVudCBuZWVkZWQuICBZb3Ugc2hvdWxkIE5PVCB1c2UKLWptZW1kb3MuYyBub3Igam1lbWRvc2EuYXNtIHVuZGVyIFdpbmRvd3MuCi0KLUZvciBXaW5kb3dzIDMuMSwgd2UgcmVjb21tZW5kIGNvbXBpbGluZyBpbiBtZWRpdW0gb3IgbGFyZ2UgbWVtb3J5IG1vZGVsOwotZm9yIG5ld2VyIFdpbmRvd3MgdmVyc2lvbnMsIHVzZSBhIDMyLWJpdCBmbGF0IG1lbW9yeSBtb2RlbC4gIChTZWUgdGhlIE1TLURPUwotc2VjdGlvbnMgYWJvdmUgZm9yIG1vcmUgaW5mbyBhYm91dCBtZW1vcnkgbW9kZWxzLikgIEluIHRoZSAxNi1iaXQgbWVtb3J5Ci1tb2RlbHMgb25seSwgeW91J2xsIG5lZWQgdG8gcHV0Ci0JI2RlZmluZSBNQVhfQUxMT0NfQ0hVTksgNjU1MjBMCS8qIE1heGltdW0gcmVxdWVzdCB0byBtYWxsb2MoKSAqLwotaW50byBqY29uZmlnLmggdG8gbGltaXQgYWxsb2NhdGlvbiBjaHVua3MgdG8gNjRLYi4gIChXaXRob3V0IHRoYXQsIHlvdSdkCi1oYXZlIHRvIHVzZSBodWdlIG1lbW9yeSBtb2RlbCwgd2hpY2ggc2xvd3MgdGhpbmdzIGRvd24gdW5uZWNlc3NhcmlseS4pCi1qbWVtbm9icy5jIHdvcmtzIHdpdGhvdXQgbW9kaWZpY2F0aW9uIGluIGxhcmdlIG9yIGZsYXQgbWVtb3J5IG1vZGVscywgYnV0IHRvCi11c2UgbWVkaXVtIG1vZGVsLCB5b3UgbmVlZCB0byBtb2RpZnkgaXRzIGpwZWdfZ2V0X2xhcmdlIGFuZCBqcGVnX2ZyZWVfbGFyZ2UKLXJvdXRpbmVzIHRvIGFsbG9jYXRlIGZhciBtZW1vcnkuICBJbiBhbnkgY2FzZSwgeW91IG1pZ2h0IGxpa2UgdG8gcmVwbGFjZQotaXRzIGNhbGxzIHRvIG1hbGxvYyBhbmQgZnJlZSB3aXRoIGRpcmVjdCBjYWxscyBvbiBXaW5kb3dzIG1lbW9yeSBhbGxvY2F0aW9uCi1mdW5jdGlvbnMuCi0KLVlvdSBtYXkgYWxzbyB3YW50IHRvIG1vZGlmeSBqZGF0YXNyYy5jIGFuZCBqZGF0YWRzdC5jIHRvIHVzZSBXaW5kb3dzIGZpbGUKLW9wZXJhdGlvbnMgcmF0aGVyIHRoYW4gZnJlYWQvZndyaXRlLiAgVGhpcyBpcyBvbmx5IG5lY2Vzc2FyeSBpZiB5b3VyIEMKLWNvbXBpbGVyIGRvZXNuJ3QgcHJvdmlkZSBhIGNvbXBldGVudCBpbXBsZW1lbnRhdGlvbiBvZiBDIHN0ZGlvIGZ1bmN0aW9ucy4KLQotWW91IG1pZ2h0IHdhbnQgdG8gdHdlYWsgdGhlIFJHQl94eHggbWFjcm9zIGluIGptb3JlY2ZnLmggc28gdGhhdCB0aGUgbGlicmFyeQotd2lsbCBhY2NlcHQgb3IgZGVsaXZlciBjb2xvciBwaXhlbHMgaW4gQkdSIHNhbXBsZSBvcmRlciwgbm90IFJHQjsgQkdSIG9yZGVyCi1pcyB1c3VhbGx5IG1vcmUgY29udmVuaWVudCB1bmRlciBXaW5kb3dzLiAgTm90ZSB0aGF0IHRoaXMgY2hhbmdlIHdpbGwgYnJlYWsKLXRoZSBzYW1wbGUgYXBwbGljYXRpb25zIGNqcGVnL2RqcGVnLCBidXQgdGhlIGxpYnJhcnkgaXRzZWxmIHdvcmtzIGZpbmUuCi0KLQotTWFueSBwZW9wbGUgd2FudCB0byBjb252ZXJ0IHRoZSBJSkcgbGlicmFyeSBpbnRvIGEgRExMLiAgVGhpcyBpcyByZWFzb25hYmx5Ci1zdHJhaWdodGZvcndhcmQsIGJ1dCB3YXRjaCBvdXQgZm9yIHRoZSBmb2xsb3dpbmc6Ci0KLSAgMS4gRG9uJ3QgdHJ5IHRvIGNvbXBpbGUgYXMgYSBETEwgaW4gc21hbGwgb3IgbWVkaXVtIG1lbW9yeSBtb2RlbDsgdXNlCi1sYXJnZSBtb2RlbCwgb3IgZXZlbiBiZXR0ZXIsIDMyLWJpdCBmbGF0IG1vZGVsLiAgTWFueSBwbGFjZXMgaW4gdGhlIElKRyBjb2RlCi1hc3N1bWUgdGhlIGFkZHJlc3Mgb2YgYSBsb2NhbCB2YXJpYWJsZSBpcyBhbiBvcmRpbmFyeSAobm90IEZBUikgcG9pbnRlcjsKLXRoYXQgaXNuJ3QgdHJ1ZSBpbiBhIG1lZGl1bS1tb2RlbCBETEwuCi0KLSAgMi4gTWljcm9zb2Z0IEMgY2Fubm90IHBhc3MgZmlsZSBwb2ludGVycyBiZXR3ZWVuIGFwcGxpY2F0aW9ucyBhbmQgRExMcy4KLShTZWUgTWljcm9zb2Z0IEtub3dsZWRnZSBCYXNlLCBQU1MgSUQgTnVtYmVyIFE1MDMzNi4pICBTbyBqZGF0YXNyYy5jIGFuZAotamRhdGFkc3QuYyBkb24ndCB3b3JrIGlmIHlvdSBvcGVuIGEgZmlsZSBpbiB5b3VyIGFwcGxpY2F0aW9uIGFuZCB0aGVuIHBhc3MKLXRoZSBwb2ludGVyIHRvIHRoZSBETEwuICBPbmUgd29ya2Fyb3VuZCBpcyB0byBtYWtlIGpkYXRhc3JjLmMvamRhdGFkc3QuYwotcGFydCBvZiB5b3VyIG1haW4gYXBwbGljYXRpb24gcmF0aGVyIHRoYW4gcGFydCBvZiB0aGUgRExMLgotCi0gIDMuIFlvdSdsbCBwcm9iYWJseSBuZWVkIHRvIG1vZGlmeSB0aGUgbWFjcm9zIEdMT0JBTCgpIGFuZCBFWFRFUk4oKSB0bwotYXR0YWNoIHN1aXRhYmxlIGxpbmthZ2Uga2V5d29yZHMgdG8gdGhlIGV4cG9ydGVkIHJvdXRpbmUgbmFtZXMuICBTaW1pbGFybHksCi15b3UnbGwgd2FudCB0byBtb2RpZnkgTUVUSE9EREVGKCkgYW5kIEpNRVRIT0QoKSB0byBlbnN1cmUgZnVuY3Rpb24gcG9pbnRlcnMKLWFyZSBkZWNsYXJlZCBpbiBhIHdheSB0aGF0IGxldHMgYXBwbGljYXRpb24gcm91dGluZXMgYmUgY2FsbGVkIGJhY2sgdGhyb3VnaAotdGhlIGZ1bmN0aW9uIHBvaW50ZXJzLiAgVGhlc2UgbWFjcm9zIGFyZSBpbiBqbW9yZWNmZy5oLiAgVHlwaWNhbCBkZWZpbml0aW9ucwotZm9yIGEgMTYtYml0IERMTCBhcmU6Ci0JI2RlZmluZSBHTE9CQUwodHlwZSkJCXR5cGUgX2ZhciBfcGFzY2FsIF9sb2FkZHMgX2V4cG9ydAotCSNkZWZpbmUgRVhURVJOKHR5cGUpCQlleHRlcm4gdHlwZSBfZmFyIF9wYXNjYWwgX2xvYWRkcwotCSNkZWZpbmUgTUVUSE9EREVGKHR5cGUpCQlzdGF0aWMgdHlwZSBfZmFyIF9wYXNjYWwKLQkjZGVmaW5lIEpNRVRIT0QodHlwZSxtZXRob2RuYW1lLGFyZ2xpc3QpICBcCi0JCXR5cGUgKF9mYXIgX3Bhc2NhbCAqbWV0aG9kbmFtZSkgYXJnbGlzdAotRm9yIGEgMzItYml0IERMTCB5b3UgbWF5IHdhbnQgc29tZXRoaW5nIGxpa2UKLQkjZGVmaW5lIEdMT0JBTCh0eXBlKQkJX19kZWNsc3BlYyhkbGxleHBvcnQpIHR5cGUKLQkjZGVmaW5lIEVYVEVSTih0eXBlKQkJZXh0ZXJuIF9fZGVjbHNwZWMoZGxsZXhwb3J0KSB0eXBlCi1BbHRob3VnaCBub3QgYWxsIHRoZSBHTE9CQUwgcm91dGluZXMgYXJlIGFjdHVhbGx5IGludGVuZGVkIHRvIGJlIGNhbGxlZCBieQotdGhlIGFwcGxpY2F0aW9uLCB0aGUgcGVyZm9ybWFuY2UgY29zdCBvZiBtYWtpbmcgdGhlbSBhbGwgRExMIGVudHJ5IHBvaW50cyBpcwotbmVnbGlnaWJsZS4KLQotVGhlIHVubW9kaWZpZWQgSUpHIGxpYnJhcnkgcHJlc2VudHMgYSB2ZXJ5IEMtc3BlY2lmaWMgYXBwbGljYXRpb24gaW50ZXJmYWNlLAotc28gdGhlIHJlc3VsdGluZyBETEwgaXMgb25seSB1c2FibGUgZnJvbSBDIG9yIEMrKyBhcHBsaWNhdGlvbnMuICBUaGVyZSBoYXMKLWJlZW4gc29tZSB0YWxrIG9mIHdyaXRpbmcgd3JhcHBlciBjb2RlIHRoYXQgd291bGQgcHJlc2VudCBhIHNpbXBsZXIgaW50ZXJmYWNlCi11c2FibGUgZnJvbSBvdGhlciBsYW5ndWFnZXMsIHN1Y2ggYXMgVmlzdWFsIEJhc2ljLiAgVGhpcyBpcyBvbiBvdXIgdG8tZG8gbGlzdAotYnV0IGhhc24ndCBiZWVuIHZlcnkgaGlnaCBwcmlvcml0eSAtLS0gYW55IHZvbHVudGVlcnMgb3V0IHRoZXJlPwotCi0KLU1pY3Jvc29mdCBXaW5kb3dzLCBCb3JsYW5kIEM6Ci0KLVRoZSBwcm92aWRlZCBqY29uZmlnLmJjYyBzaG91bGQgd29yayBPSyBpbiBhIDMyLWJpdCBXaW5kb3dzIGVudmlyb25tZW50LAotYnV0IHlvdSdsbCBuZWVkIHRvIHR3ZWFrIGl0IGluIGEgMTYtYml0IGVudmlyb25tZW50ICh5b3UnZCBuZWVkIHRvIGRlZmluZQotTkVFRF9GQVJfUE9JTlRFUlMgYW5kIE1BWF9BTExPQ19DSFVOSykuICBCZXdhcmUgdGhhdCBtYWtlZmlsZS5iY2Mgd2lsbCBuZWVkCi1hbHRlcmF0aW9uIGlmIHlvdSB3YW50IHRvIHVzZSBpdCBmb3IgV2luZG93cyAtLS0gaW4gcGFydGljdWxhciwgeW91IHNob3VsZAotdXNlIGptZW1ub2JzLmMgbm90IGptZW1kb3MuYyB1bmRlciBXaW5kb3dzLgotCi1Cb3JsYW5kIEMrKyA0LjUgZmFpbHMgd2l0aCBhbiBpbnRlcm5hbCBjb21waWxlciBlcnJvciB3aGVuIHRyeWluZyB0byBjb21waWxlCi1qZG1lcmdlLmMgaW4gMzItYml0IG1vZGUuICBJZiBlbm91Z2ggcGVvcGxlIGNvbXBsYWluLCBwZXJoYXBzIEJvcmxhbmQgd2lsbCBmaXgKLWl0LiAgSW4gdGhlIG1lYW50aW1lLCB0aGUgc2ltcGxlc3Qga25vd24gd29ya2Fyb3VuZCBpcyB0byBhZGQgYSByZWR1bmRhbnQKLWRlZmluaXRpb24gb2YgdGhlIHZhcmlhYmxlIHJhbmdlX2xpbWl0IGluIGgydjFfbWVyZ2VkX3Vwc2FtcGxlKCksIGF0IHRoZSBoZWFkCi1vZiB0aGUgYmxvY2sgdGhhdCBoYW5kbGVzIG9kZCBpbWFnZSB3aWR0aCAoYWJvdXQgbGluZSAyNjggaW4gdjYgamRtZXJnZS5jKToKLSAgLyogSWYgaW1hZ2Ugd2lkdGggaXMgb2RkLCBkbyB0aGUgbGFzdCBvdXRwdXQgY29sdW1uIHNlcGFyYXRlbHkgKi8KLSAgaWYgKGNpbmZvLT5vdXRwdXRfd2lkdGggJiAxKSB7Ci0gICAgcmVnaXN0ZXIgSlNBTVBMRSAqIHJhbmdlX2xpbWl0ID0gY2luZm8tPnNhbXBsZV9yYW5nZV9saW1pdDsgLyogQUREIFRISVMgKi8KLSAgICBjYiA9IEdFVEpTQU1QTEUoKmlucHRyMSk7Ci1QcmV0dHkgYml6YXJyZSwgZXNwZWNpYWxseSBzaW5jZSB0aGUgdmVyeSBzaW1pbGFyIHJvdXRpbmUgaDJ2Ml9tZXJnZWRfdXBzYW1wbGUKLWRvZXNuJ3QgdHJpZ2dlciB0aGUgYnVnLgotUmVjZW50IHJlcG9ydHMgc3VnZ2VzdCB0aGF0IHRoaXMgYnVnIGRvZXMgbm90IG9jY3VyIHdpdGggImJjYzMyYSIgKHRoZQotUGVudGl1bS1vcHRpbWl6ZWQgdmVyc2lvbiBvZiB0aGUgY29tcGlsZXIpLgotCi1Bbm90aGVyIHJlcG9ydCBmcm9tIGEgdXNlciBvZiBCb3JsYW5kIEMgNC41IHdhcyB0aGF0IGluY29ycmVjdCBjb2RlIChsZWFkaW5nCi10byBhIGNvbG9yIHNoaWZ0IGluIHByb2Nlc3NlZCBpbWFnZXMpIHdhcyBwcm9kdWNlZCBpZiBhbnkgb2YgdGhlIGZvbGxvd2luZwotb3B0aW1pemF0aW9uIHN3aXRjaCBjb21iaW5hdGlvbnMgd2VyZSB1c2VkOiAKLQktT3QgLU9nCi0JLU90IC1PcAotCS1PdCAtT20KLVNvIHRyeSBiYWNraW5nIG9mZiBvbiBvcHRpbWl6YXRpb24gaWYgeW91IHNlZSBzdWNoIGEgcHJvYmxlbS4gIChBcmUgdGhlcmUKLXNldmVyYWwgZGlmZmVyZW50IHJlbGVhc2VzIGFsbCBudW1iZXJlZCAiNC41Ij8/KQotCi0KLU1pY3Jvc29mdCBXaW5kb3dzLCBNaWNyb3NvZnQgVmlzdWFsIEMrKzoKLQotamNvbmZpZy52YyBzaG91bGQgd29yayBPSyB3aXRoIGFueSBNaWNyb3NvZnQgY29tcGlsZXIgZm9yIGEgMzItYml0IG1lbW9yeQotbW9kZWwuICBtYWtlZmlsZS52YyBpcyBpbnRlbmRlZCBmb3IgY29tbWFuZC1saW5lIHVzZS4gIChJZiB5b3UgYXJlIHVzaW5nCi10aGUgRGV2ZWxvcGVyIFN0dWRpbyBlbnZpcm9ubWVudCwgeW91IG1heSBwcmVmZXIgdGhlIERldlN0dWRpbyBwcm9qZWN0Ci1maWxlczsgc2VlIGJlbG93LikKLQotSUpHIEpQRUcgNyBhZGRzIGV4dGVybiAiQyIgdG8ganBlZ2xpYi5oLiAgVGhpcyBhdm9pZHMgdGhlIG5lZWQgdG8gcHV0Ci1leHRlcm4gIkMiIHsgLi4uIH0gYXJvdW5kICNpbmNsdWRlICJqcGVnbGliLmgiIGluIHlvdXIgQysrIGFwcGxpY2F0aW9uLgotWW91IGNhbiBhbHNvIGZvcmNlIFZDKysgdG8gdHJlYXQgdGhlIGxpYnJhcnkgYXMgQysrIGNvZGUgYnkgcmVuYW1pbmcKLWFsbCB0aGUgKi5jIGZpbGVzIHRvICouY3BwIChhbmQgYWRqdXN0aW5nIHRoZSBtYWtlZmlsZSB0byBtYXRjaCkuCi1JbiB0aGlzIGNhc2UgeW91IGFsc28gbmVlZCB0byBkZWZpbmUgdGhlIHN5bWJvbCBET05UX1VTRV9FWFRFUk5fQyBpbgotdGhlIGNvbmZpZ3VyYXRpb24gdG8gcHJldmVudCBqcGVnbGliLmggZnJvbSB1c2luZyBleHRlcm4gIkMiLgotCi0KLU1pY3Jvc29mdCBXaW5kb3dzLCBNaWNyb3NvZnQgVmlzdWFsIEMrKyA2IERldmVsb3BlciBTdHVkaW86Ci0KLVdlIGluY2x1ZGUgbWFrZWZpbGVzIHRoYXQgc2hvdWxkIHdvcmsgYXMgcHJvamVjdCBmaWxlcyBpbiBEZXZTdHVkaW8gNi4wIG9yCi1sYXRlci4gIFRoZXJlIGlzIGEgbGlicmFyeSBtYWtlZmlsZSB0aGF0IGJ1aWxkcyB0aGUgSUpHIGxpYnJhcnkgYXMgYSBzdGF0aWMKLVdpbjMyIGxpYnJhcnksIGFuZCBhcHBsaWNhdGlvbiBtYWtlZmlsZXMgdGhhdCBidWlsZCB0aGUgc2FtcGxlIGFwcGxpY2F0aW9ucwotYXMgV2luMzIgY29uc29sZSBhcHBsaWNhdGlvbnMuICAoRXZlbiBpZiB5b3Ugb25seSB3YW50IHRoZSBsaWJyYXJ5LCB3ZQotcmVjb21tZW5kIGJ1aWxkaW5nIHRoZSBhcHBsaWNhdGlvbnMgc28gdGhhdCB5b3UgY2FuIHJ1biB0aGUgc2VsZi10ZXN0LikKLQotVG8gdXNlOgotMS4gT3BlbiB0aGUgY29tbWFuZCBwcm9tcHQsIGNoYW5nZSB0byB0aGUgbWFpbiBkaXJlY3RvcnkgYW5kIGV4ZWN1dGUgdGhlCi0gICBjb21tYW5kIGxpbmUKLQlOTUFLRSAvZiBtYWtlZmlsZS52YyAgc2V0dXAtdmM2Ci0gICBUaGlzIHdpbGwgbW92ZSBqY29uZmlnLnZjIHRvIGpjb25maWcuaCBhbmQgbWFrZWZpbGVzIHRvIHByb2plY3QgZmlsZXMuCi0gICAoTm90ZSB0aGF0IHRoZSByZW5hbWluZyBpcyBjcml0aWNhbCEpCi0yLiBPcGVuIHRoZSB3b3Jrc3BhY2UgZmlsZSBqcGVnLmRzdywgYnVpbGQgdGhlIGxpYnJhcnkgcHJvamVjdC4KLSAgIChJZiB5b3UgYXJlIHVzaW5nIERldlN0dWRpbyBtb3JlIHJlY2VudCB0aGFuIDYuMCwgeW91J2xsIHByb2JhYmx5Ci0gICBnZXQgYSBtZXNzYWdlIHNheWluZyB0aGF0IHRoZSBwcm9qZWN0IGZpbGVzIGFyZSBiZWluZyB1cGRhdGVkLikKLTMuIE9wZW4gdGhlIHdvcmtzcGFjZSBmaWxlIGFwcHMuZHN3LCBidWlsZCB0aGUgYXBwbGljYXRpb24gcHJvamVjdHMuCi00LiBUbyBwZXJmb3JtIHRoZSBzZWxmLXRlc3QsIGV4ZWN1dGUgdGhlIGNvbW1hbmQgbGluZQotCU5NQUtFIC9mIG1ha2VmaWxlLnZjICB0ZXN0LWJ1aWxkCi01LiBNb3ZlIHRoZSBhcHBsaWNhdGlvbiAuZXhlIGZpbGVzIGZyb20gYGFwcGBcUmVsZWFzZSB0byBhbgotICAgYXBwcm9wcmlhdGUgbG9jYXRpb24gb24geW91ciBwYXRoLgotCi0KLU1pY3Jvc29mdCBXaW5kb3dzLCBNaWNyb3NvZnQgVmlzdWFsIEMrKyAyMDEwIERldmVsb3BlciBTdHVkaW8gKHYxMCk6Ci0KLVdlIGluY2x1ZGUgbWFrZWZpbGVzIHRoYXQgc2hvdWxkIHdvcmsgYXMgcHJvamVjdCBmaWxlcyBpbiBWaXN1YWwgU3R1ZGlvCi0yMDEwIG9yIGxhdGVyLiAgVGhlcmUgaXMgYSBsaWJyYXJ5IG1ha2VmaWxlIHRoYXQgYnVpbGRzIHRoZSBJSkcgbGlicmFyeQotYXMgYSBzdGF0aWMgV2luMzIgbGlicmFyeSwgYW5kIGFwcGxpY2F0aW9uIG1ha2VmaWxlcyB0aGF0IGJ1aWxkIHRoZSBzYW1wbGUKLWFwcGxpY2F0aW9ucyBhcyBXaW4zMiBjb25zb2xlIGFwcGxpY2F0aW9ucy4gIChFdmVuIGlmIHlvdSBvbmx5IHdhbnQgdGhlCi1saWJyYXJ5LCB3ZSByZWNvbW1lbmQgYnVpbGRpbmcgdGhlIGFwcGxpY2F0aW9ucyBzbyB0aGF0IHlvdSBjYW4gcnVuIHRoZQotc2VsZi10ZXN0LikKLQotVG8gdXNlOgotMS4gT3BlbiB0aGUgY29tbWFuZCBwcm9tcHQsIGNoYW5nZSB0byB0aGUgbWFpbiBkaXJlY3RvcnkgYW5kIGV4ZWN1dGUgdGhlCi0gICBjb21tYW5kIGxpbmUKLQlOTUFLRSAvZiBtYWtlZmlsZS52YyAgc2V0dXAtdjEwCi0gICBUaGlzIHdpbGwgbW92ZSBqY29uZmlnLnZjIHRvIGpjb25maWcuaCBhbmQgbWFrZWZpbGVzIHRvIHByb2plY3QgZmlsZXMuCi0gICAoTm90ZSB0aGF0IHRoZSByZW5hbWluZyBpcyBjcml0aWNhbCEpCi0yLiBPcGVuIHRoZSBzb2x1dGlvbiBmaWxlIGpwZWcuc2xuLCBidWlsZCB0aGUgbGlicmFyeSBwcm9qZWN0LgotICAgKElmIHlvdSBhcmUgdXNpbmcgVmlzdWFsIFN0dWRpbyBtb3JlIHJlY2VudCB0aGFuIDIwMTAgKHYxMCksIHlvdSdsbAotICAgcHJvYmFibHkgZ2V0IGEgbWVzc2FnZSBzYXlpbmcgdGhhdCB0aGUgcHJvamVjdCBmaWxlcyBhcmUgYmVpbmcgdXBkYXRlZC4pCi0zLiBPcGVuIHRoZSBzb2x1dGlvbiBmaWxlIGFwcHMuc2xuLCBidWlsZCB0aGUgYXBwbGljYXRpb24gcHJvamVjdHMuCi00LiBUbyBwZXJmb3JtIHRoZSBzZWxmLXRlc3QsIGV4ZWN1dGUgdGhlIGNvbW1hbmQgbGluZQotCU5NQUtFIC9mIG1ha2VmaWxlLnZjICB0ZXN0LWJ1aWxkCi01LiBNb3ZlIHRoZSBhcHBsaWNhdGlvbiAuZXhlIGZpbGVzIGZyb20gYGFwcGBcUmVsZWFzZSB0byBhbgotICAgYXBwcm9wcmlhdGUgbG9jYXRpb24gb24geW91ciBwYXRoLgotCi1Ob3RlOgotVGhlcmUgc2VlbXMgdG8gYmUgYW4gb3B0aW1pemF0aW9uIGJ1ZyBpbiB0aGUgY29tcGlsZXIgd2hpY2ggY2F1c2VzIHRoZQotc2VsZi10ZXN0IHRvIGZhaWwgd2l0aCB0aGUgY29sb3IgcXVhbnRpemF0aW9uIG9wdGlvbi4KLVdlIGhhdmUgZGlzYWJsZWQgb3B0aW1pemF0aW9uIGZvciB0aGUgZmlsZSBqcXVhbnQyLmMgaW4gdGhlIGxpYnJhcnkKLXByb2plY3QgZmlsZSB3aGljaCBjYXVzZXMgdGhlIHNlbGYtdGVzdCB0byBwYXNzIHByb3Blcmx5LgotCi0KLU9TLzIsIEJvcmxhbmQgQysrOgotCi1XYXRjaCBvdXQgZm9yIG9wdGltaXphdGlvbiBidWdzIGluIG9sZGVyIEJvcmxhbmQgY29tcGlsZXJzOyB5b3UgbWF5IG5lZWQKLXRvIGJhY2sgb2ZmIHRoZSBvcHRpbWl6YXRpb24gc3dpdGNoIHNldHRpbmdzLiAgU2VlIHRoZSBjb21tZW50cyBpbgotbWFrZWZpbGUuYmNjLgotCi0KLVNHSToKLQotT24gc29tZSBTR0kgc3lzdGVtcywgeW91IG1heSBuZWVkIHRvIHNldCAiQVIyPSBhciAtdHMiIGluIHRoZSBNYWtlZmlsZS4KLUlmIHlvdSBhcmUgdXNpbmcgY29uZmlndXJlLCB5b3UgY2FuIGRvIHRoaXMgYnkgc2F5aW5nCi0JLi9jb25maWd1cmUgUkFOTElCPSdhciAtdHMnCi1UaGlzIGNoYW5nZSBpcyBub3QgbmVlZGVkIG9uIGFsbCBTR0lzLiAgVXNlIGl0IG9ubHkgaWYgdGhlIG1ha2UgZmFpbHMgYXQgdGhlCi1zdGFnZSBvZiBsaW5raW5nIHRoZSBjb21wbGV0ZWQgcHJvZ3JhbXMuCi0KLU9uIHRoZSBNSVBTIFI0MDAwIGFyY2hpdGVjdHVyZSAoSW5keSwgZXRjLiksIHRoZSBjb21waWxlciBvcHRpb24gIi1taXBzMiIKLXJlcG9ydGVkbHkgc3BlZWRzIHVwIHRoZSBmbG9hdCBEQ1QgbWV0aG9kIHN1YnN0YW50aWFsbHksIGVub3VnaCB0byBtYWtlIGl0Ci1mYXN0ZXIgdGhhbiB0aGUgZGVmYXVsdCBpbnQgbWV0aG9kIChidXQgc3RpbGwgc2xvd2VyIHRoYW4gdGhlIGZhc3QgaW50Ci1tZXRob2QpLiAgSWYgeW91IHVzZSAtbWlwczIsIHlvdSBtYXkgd2FudCB0byBhbHRlciB0aGUgZGVmYXVsdCBEQ1QgbWV0aG9kIHRvCi1iZSBmbG9hdC4gIFRvIGRvIHRoaXMsIHB1dCAiI2RlZmluZSBKRENUX0RFRkFVTFQgSkRDVF9GTE9BVCIgaW4gamNvbmZpZy5oLgotCi0KLVZNUzoKLQotT24gYW4gQWxwaGEvVk1TIHN5c3RlbSB3aXRoIE1NUywgYmUgc3VyZSB0byB1c2UgdGhlICIvTWFyY289QWxwaGE9MSIKLXF1YWxpZmllciB3aXRoIE1NUyB3aGVuIGJ1aWxkaW5nIHRoZSBKUEVHIHBhY2thZ2UuCi0KLVZBWC9WTVMgdjUuNS0xIG1heSBoYXZlIHByb2JsZW1zIHdpdGggdGhlIHRlc3Qgc3RlcCBvZiB0aGUgYnVpbGQgcHJvY2VkdXJlCi1yZXBvcnRpbmcgZGlmZmVyZW5jZXMgd2hlbiBpdCBjb21wYXJlcyB0aGUgb3JpZ2luYWwgYW5kIHRlc3QgaW1hZ2VzLiAgSWYgdGhlCi1lcnJvciBwb2ludHMgdG8gdGhlIGxhc3QgYmxvY2sgb2YgdGhlIGZpbGVzLCBpdCBpcyBtb3N0IGxpa2VseSBib2d1cyBhbmQgbWF5Ci1iZSBzYWZlbHkgaWdub3JlZC4gIEl0IHNlZW1zIHRvIGJlIGJlY2F1c2UgdGhlIGZpbGVzIGFyZSBTdHJlYW1fTEYgYW5kCi1CYWNrdXAvQ29tcGFyZSBoYXMgZGlmZmljdWx0eSB3aXRoIHRoZSAocHJlc3VtYWJseSkgbnVsbCBwYWRkZWQgZmlsZXMuCi1UaGlzIHByb2JsZW0gd2FzIG5vdCBvYnNlcnZlZCBvbiBWQVgvVk1TIHY2LjEgb3IgQVhQL1ZNUyB2Ni4xLgpkaWZmIC0tZ2l0IGEvamF2YS9DTWFrZUxpc3RzLnR4dCBiL2phdmEvQ01ha2VMaXN0cy50eHQKaW5kZXggODdmOGVjNi4uMTkxMjdlMyAxMDA2NDQKLS0tIGEvamF2YS9DTWFrZUxpc3RzLnR4dAorKysgYi9qYXZhL0NNYWtlTGlzdHMudHh0CkBAIC05LDEwICs5LDExIEBACiAgIG9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtCiAgIG9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtZXIKICAgVEpVbml0VGVzdAotICBUSkV4YW1wbGUpCisgIFRKRXhhbXBsZQorICBUSkJlbmNoKQogCiBpZihNU1ZDX0lERSkKLSAgc2V0KE9CSkRJUiAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9LyQoT3V0RGlyKSIpCisgIHNldChPQkpESVIgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS8ke0NNQUtFX0NGR19JTlRESVJ9IikKIGVsc2UoKQogICBzZXQoT0JKRElSICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfSkKIGVuZGlmKCkKZGlmZiAtLWdpdCBhL2phdmEvTWFrZWZpbGUuYW0gYi9qYXZhL01ha2VmaWxlLmFtCmluZGV4IDRhMWIzNGUuLjEzMDdkNjkgMTAwNjQ0Ci0tLSBhL2phdmEvTWFrZWZpbGUuYW0KKysrIGIvamF2YS9NYWtlZmlsZS5hbQpAQCAtMSwxNSArMSwyMSBAQAogSkFWQVJPT1QgPSAuCiAKK29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKTG9hZGVyLmphdmE6ICQoc3JjZGlyKS9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkxvYWRlci5qYXZhLnRtcGwKKwlta2RpciAtcCBvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZzsgXAorCWNhdCAkKHNyY2Rpcikvb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpMb2FkZXIuamF2YS50bXBsIHwgXAorCQlzZWQgc0Ale19fbGliZGlyfUAkKGxpYmRpcilAZyA+IG9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKTG9hZGVyLmphdmEKKworCiBKQVZBU09VUkNFUyA9IG9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmphdmEgXAogCW9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5qYXZhIFwKIAlvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkN1c3RvbUZpbHRlci5qYXZhIFwKIAlvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5qYXZhIFwKLQlvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkxvYWRlci5qYXZhIFwKIAlvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlNjYWxpbmdGYWN0b3IuamF2YSBcCiAJb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm0uamF2YSBcCiAJb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm1lci5qYXZhIFwKIAlUSkV4YW1wbGUuamF2YSBcCi0JVEpVbml0VGVzdC5qYXZhCisJVEpVbml0VGVzdC5qYXZhIFwKKwlUSkJlbmNoLmphdmEKIAogSk5JSEVBREVSUyA9IG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKLmggXAogCW9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKQ29tcHJlc3Nvci5oIFwKQEAgLTE4LDcgKzI0LDcgQEAKIAogaWYgV0lUSF9KQVZBCiAKLWRpc3Rfbm9pbnN0X0pBVkEgPSAke0pBVkFTT1VSQ0VTfQorbm9kaXN0X25vaW5zdF9KQVZBID0gJHtKQVZBU09VUkNFU30gb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpMb2FkZXIuamF2YQogCiBKQVZBX0NMQVNTRVMgPSBvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5jbGFzcyBcCiAJb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmNsYXNzIFwKQEAgLTI5LDcgKzM1LDggQEAKIAlvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5jbGFzcyBcCiAJb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm1lci5jbGFzcyBcCiAJVEpFeGFtcGxlLmNsYXNzIFwKLQlUSlVuaXRUZXN0LmNsYXNzCisJVEpVbml0VGVzdC5jbGFzcyBcCisJVEpCZW5jaC5jbGFzcwogCiBhbGw6IGFsbC1hbSB0dXJib2pwZWcuamFyCiAKQEAgLTQwLDEyICs0NywxMiBAQAogCXJtIC1mIHR1cmJvanBlZy5qYXIKIAogaW5zdGFsbC1leGVjLWxvY2FsOiB0dXJib2pwZWcuamFyCi0JbWtkaXIgLXAgJChERVNURElSKS8kKHByZWZpeCkvY2xhc3NlcwotCSQoSU5TVEFMTCkgLW0gNjQ0IHR1cmJvanBlZy5qYXIgJChERVNURElSKS8kKHByZWZpeCkvY2xhc3Nlcy8KKwlta2RpciAtcCAkKERFU1RESVIpLyQoZGF0YWRpcikvY2xhc3NlcworCSQoSU5TVEFMTCkgLW0gNjQ0IHR1cmJvanBlZy5qYXIgJChERVNURElSKS8kKGRhdGFkaXIpL2NsYXNzZXMvCiAKIHVuaW5zdGFsbC1sb2NhbDoKLQlybSAtZiAkKERFU1RESVIpLyQocHJlZml4KS9jbGFzc2VzL3R1cmJvanBlZy5qYXIKLQlpZiBbIC1kICQoREVTVERJUikvJChwcmVmaXgpL2NsYXNzZXMgXTsgdGhlbiBybWRpciAkKERFU1RESVIpLyQocHJlZml4KS9jbGFzc2VzOyBmaQorCXJtIC1mICQoREVTVERJUikvJChkYXRhZGlyKS9jbGFzc2VzL3R1cmJvanBlZy5qYXIKKwlpZiBbIC1kICQoREVTVERJUikvJChkYXRhZGlyKS9jbGFzc2VzIF07IHRoZW4gcm1kaXIgJChERVNURElSKS8kKGRhdGFkaXIpL2NsYXNzZXM7IGZpCiAKIGhlYWRlcnM6IGFsbAogCWphdmFoIC1kICR7c3JjZGlyfSBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USjsgXApAQCAtNTUsOSArNjIsMTAgQEAKIAogZG9jczogYWxsCiAJbWtkaXIgLXAgJHtzcmNkaXJ9L2RvYzsgXAotCWphdmFkb2MgLWQgJHtzcmNkaXJ9L2RvYyAtc291cmNlcGF0aCAke3NyY2Rpcn0gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcKKwlqYXZhZG9jIC1ub3RpbWVzdGFtcCAtZCAke3NyY2Rpcn0vZG9jIC1zb3VyY2VwYXRoICR7c3JjZGlyfSBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZwogCiBlbmRpZgogCiBFWFRSQV9ESVNUID0gTUFOSUZFU1QuTUYgJHtKQVZBU09VUkNFU30gJHtKTklIRUFERVJTfSBkb2MgQ01ha2VMaXN0cy50eHQgXAorCW9yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKTG9hZGVyLmphdmEudG1wbCBcCiAJb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpMb2FkZXIuamF2YS5pbgpkaWZmIC0tZ2l0IGEvamF2YS9SRUFETUUgYi9qYXZhL1JFQURNRQppbmRleCAyMmUwZjczLi44OGRkYzNiIDEwMDY0NAotLS0gYS9qYXZhL1JFQURNRQorKysgYi9qYXZhL1JFQURNRQpAQCAtMSwyNSArMSwyNSBAQAotVHVyYm9KUEVHL09TUyBKYXZhIFdyYXBwZXIKLT09PT09PT09PT09PT09PT09PT09PT09PT09CitUdXJib0pQRUcgSmF2YSBXcmFwcGVyCis9PT09PT09PT09PT09PT09PT09PT09CiAKLVR1cmJvSlBFRy9PU1MgY2FuIG9wdGlvbmFsbHkgYmUgYnVpbHQgd2l0aCBhIEphdmEgTmF0aXZlIEludGVyZmFjZSB3cmFwcGVyLAotd2hpY2ggYWxsb3dzIHRoZSBUdXJib0pQRUcvT1NTIGR5bmFtaWMgbGlicmFyeSB0byBiZSBsb2FkZWQgYW5kIHVzZWQgZGlyZWN0bHkKLWZyb20gSmF2YSBhcHBsaWNhdGlvbnMuICBUaGUgSmF2YSBmcm9udCBlbmQgZm9yIHRoaXMgaXMgZGVmaW5lZCBpbiBzZXZlcmFsCi1jbGFzc2VzIGxvY2F0ZWQgdW5kZXIgb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcuICBUaGUgc291cmNlIGNvZGUgZm9yIHRoZXNlCi1KYXZhIGNsYXNzZXMgaXMgbGljZW5zZWQgdW5kZXIgYSBCU0Qtc3R5bGUgbGljZW5zZSwgc28gdGhlIGZpbGVzIGNhbiBiZQotaW5jb3Jwb3JhdGVkIGRpcmVjdGx5IGludG8gYm90aCBvcGVuIHNvdXJjZSBhbmQgcHJvcHJpZXRhcnkgcHJvamVjdHMgd2l0aG91dAotcmVzdHJpY3Rpb24uICBBIEphdmEgYXJjaGl2ZSAoSkFSKSBmaWxlIGNvbnRhaW5pbmcgdGhlc2UgY2xhc3NlcyBpcyBhbHNvCi1zaGlwcGVkIHdpdGggdGhlICJvZmZpY2lhbCIgZGlzdHJpYnV0aW9uIHBhY2thZ2VzIG9mIGxpYmpwZWctdHVyYm8uCitUaGUgVHVyYm9KUEVHIHNoYXJlZCBsaWJyYXJ5IGNhbiBvcHRpb25hbGx5IGJlIGJ1aWx0IHdpdGggYSBKYXZhIE5hdGl2ZQorSW50ZXJmYWNlIHdyYXBwZXIsIHdoaWNoIGFsbG93cyB0aGUgbGlicmFyeSB0byBiZSBsb2FkZWQgYW5kIHVzZWQgZGlyZWN0bHkgZnJvbQorSmF2YSBhcHBsaWNhdGlvbnMuICBUaGUgSmF2YSBmcm9udCBlbmQgZm9yIHRoaXMgaXMgZGVmaW5lZCBpbiBzZXZlcmFsIGNsYXNzZXMKK2xvY2F0ZWQgdW5kZXIgb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcuICBUaGUgc291cmNlIGNvZGUgZm9yIHRoZXNlIEphdmEKK2NsYXNzZXMgaXMgbGljZW5zZWQgdW5kZXIgYSBCU0Qtc3R5bGUgbGljZW5zZSwgc28gdGhlIGZpbGVzIGNhbiBiZSBpbmNvcnBvcmF0ZWQKK2RpcmVjdGx5IGludG8gYm90aCBvcGVuIHNvdXJjZSBhbmQgcHJvcHJpZXRhcnkgcHJvamVjdHMgd2l0aG91dCByZXN0cmljdGlvbi4gIEEKK0phdmEgYXJjaGl2ZSAoSkFSKSBmaWxlIGNvbnRhaW5pbmcgdGhlc2UgY2xhc3NlcyBpcyBhbHNvIHNoaXBwZWQgd2l0aCB0aGUKKyJvZmZpY2lhbCIgZGlzdHJpYnV0aW9uIHBhY2thZ2VzIG9mIGxpYmpwZWctdHVyYm8uCiAKIFRKRXhhbXBsZS5qYXZhLCB3aGljaCBzaG91bGQgYWxzbyBiZSBsb2NhdGVkIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGlzCi1SRUFETUUgZmlsZSwgZGVtb25zdHJhdGVzIGhvdyB0byB1c2UgdGhlIFR1cmJvSlBFRy9PU1MgSmF2YSBmcm9udCBlbmQgdG8KLWNvbXByZXNzIGFuZCBkZWNvbXByZXNzIEpQRUcgaW1hZ2VzIGluIG1lbW9yeS4KK1JFQURNRSBmaWxlLCBkZW1vbnN0cmF0ZXMgaG93IHRvIHVzZSB0aGUgVHVyYm9KUEVHIEphdmEgQVBJIHRvIGNvbXByZXNzIGFuZAorZGVjb21wcmVzcyBKUEVHIGltYWdlcyBpbiBtZW1vcnkuCiAKIAogUGVyZm9ybWFuY2UgUGl0ZmFsbHMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVRoZSBUdXJib0pQRUcgSmF2YSBmcm9udCBlbmQgZGVmaW5lcyBzZXZlcmFsIGNvbnZlbmllbmNlIG1ldGhvZHMgdGhhdCBjYW4KLWFsbG9jYXRlIGltYWdlIGJ1ZmZlcnMgb3IgaW5zdGFudGlhdGUgY2xhc3NlcyB0byBob2xkIHRoZSByZXN1bHQgb2YgY29tcHJlc3MsCitUaGUgVHVyYm9KUEVHIEphdmEgQVBJIGRlZmluZXMgc2V2ZXJhbCBjb252ZW5pZW5jZSBtZXRob2RzIHRoYXQgY2FuIGFsbG9jYXRlCitpbWFnZSBidWZmZXJzIG9yIGluc3RhbnRpYXRlIGNsYXNzZXMgdG8gaG9sZCB0aGUgcmVzdWx0IG9mIGNvbXByZXNzLAogZGVjb21wcmVzcywgb3IgdHJhbnNmb3JtIG9wZXJhdGlvbnMuICBIb3dldmVyLCBpZiB5b3UgdXNlIHRoZXNlIG1ldGhvZHMsIHRoZW4KIGJlIG1pbmRmdWwgb2YgdGhlIGFtb3VudCBvZiBuZXcgZGF0YSB5b3UgYXJlIGNyZWF0aW5nIG9uIHRoZSBoZWFwLiAgSXQgbWF5IGJlCiBuZWNlc3NhcnkgdG8gbWFudWFsbHkgaW52b2tlIHRoZSBnYXJiYWdlIGNvbGxlY3RvciB0byBwcmV2ZW50IGhlYXAgZXhoYXVzdGlvbgpAQCAtMjcsMjkgKzI3LDI2IEBACiBwZXJmb3JtYW5jZSwgcGFydGljdWxhcmx5IGluIGEgbXVsdGktdGhyZWFkZWQgZW52aXJvbm1lbnQgKEphdmEgcGF1c2VzIGFsbAogdGhyZWFkcyB3aGVuIHRoZSBHQyBydW5zLikKIAotVGhlIEphdmEgZnJvbnQgZW5kIGFsd2F5cyBnaXZlcyB5b3UgdGhlIG9wdGlvbiBvZiBwcmUtYWxsb2NhdGluZyB5b3VyIG93bgotc291cmNlIGFuZCBkZXN0aW5hdGlvbiBidWZmZXJzLCB3aGljaCBhbGxvd3MgeW91IHRvIHJlLXVzZSB0aGVzZSBidWZmZXJzIGZvcgorVGhlIFR1cmJvSlBFRyBKYXZhIEFQSSBhbHdheXMgZ2l2ZXMgeW91IHRoZSBvcHRpb24gb2YgcHJlLWFsbG9jYXRpbmcgeW91ciBvd24KK3NvdXJjZSBhbmQgZGVzdGluYXRpb24gYnVmZmVycywgd2hpY2ggYWxsb3dzIHlvdSB0byByZS11c2UgdGhvc2UgYnVmZmVycyBmb3IKIGNvbXByZXNzaW5nL2RlY29tcHJlc3NpbmcgbXVsdGlwbGUgaW1hZ2VzLiAgSWYgdGhlIGltYWdlIHNlcXVlbmNlIHlvdSBhcmUKIGNvbXByZXNzaW5nIG9yIGRlY29tcHJlc3NpbmcgY29uc2lzdHMgb2YgaW1hZ2VzIG9mIHRoZSBzYW1lIHNpemUsIHRoZW4KIHByZS1hbGxvY2F0aW5nIHRoZSBidWZmZXJzIGlzIHJlY29tbWVuZGVkLgogCiAKLU5vdGUgZm9yIE9TIFggdXNlcnMKLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotL3Vzci9saWIsIHRoZSBkaXJlY3RvcnkgdW5kZXIgd2hpY2ggbGlidHVyYm9qcGVnLmR5bGliIGlzIGluc3RhbGxlZCBvbiBNYWMKLXN5c3RlbXMsIGlzIG5vdCBwYXJ0IG9mIHRoZSBub3JtYWwgSmF2YSBsaWJyYXJ5IHBhdGguICBUaHVzLCB3aGVuIHJ1bm5pbmcgYQotSmF2YSBhcHBsaWNhdGlvbiB0aGF0IHVzZXMgVHVyYm9KUEVHL09TUyBvbiBNYWMgc3lzdGVtcywgeW91IHdpbGwgbmVlZCB0byBwYXNzCi1hbiBhcmd1bWVudCBvZiAtRGphdmEubGlicmFyeS5wYXRoPS91c3IvbGliIHRvIGphdmEuCi0KLQotTm90ZSBmb3IgU29sYXJpcyB1c2VycworSW5zdGFsbGF0aW9uIERpcmVjdG9yeQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0vb3B0L2xpYmpwZWctdHVyYm8vbGliLCB0aGUgZGlyZWN0b3J5IHVuZGVyIHdoaWNoIGxpYnR1cmJvanBlZy5zbyBpcyBpbnN0YWxsZWQKLW9uIFNvbGFyaXMgc3lzdGVtcywgaXMgbm90IHBhcnQgb2YgdGhlIG5vcm1hbCBKYXZhIGxpYnJhcnkgcGF0aC4gIFRodXMsIHdoZW4KLXJ1bm5pbmcgYSBKYXZhIGFwcGxpY2F0aW9uIHRoYXQgdXNlcyBUdXJib0pQRUcvT1NTIG9uIFNvbGFyaXMgc3lzdGVtcywgeW91IHdpbGwKLW5lZWQgdG8gcGFzcyBhbiBhcmd1bWVudCBvZiAtRGphdmEubGlicmFyeS5wYXRoPS9vcHQvbGlianBlZy10dXJiby9saWIgdG8gamF2YS4KLUlmIHVzaW5nIGEgNjQtYml0IGRhdGEgbW9kZWwsIHRoZW4gaW5zdGVhZCBwYXNzIGFuIGFyZ3VtZW50IG9mCi0tRGphdmEubGlicmFyeS5wYXRoPS9vcHQvbGlianBlZy10dXJiby9saWIvYW1kNjQgdG8gdXNlIHRoZSA2NC1iaXQgdmVyc2lvbiBvZgotbGlidHVyYm9qcGVnLnNvLgorVGhlIFR1cmJvSlBFRyBKYXZhIFdyYXBwZXIgd2lsbCBsb29rIGZvciB0aGUgVHVyYm9KUEVHIEpOSSBsaWJyYXJ5CisobGlidHVyYm9qcGVnLnNvLCBsaWJ0dXJib2pwZWcuam5pbGliLCBvciB0dXJib2pwZWcuZGxsKSBpbiB0aGUgc3lzdGVtIGxpYnJhcnkKK3BhdGhzIG9yIGluIGFueSBwYXRocyBzcGVjaWZpZWQgaW4gTERfTElCUkFSWV9QQVRIIChVbip4KSwgRFlMRF9MSUJSQVJZX1BBVEgKKyhNYWMpLCBvciBQQVRIIChXaW5kb3dzLikgIEZhaWxpbmcgdGhpcywgb24gVW4qeCBhbmQgTWFjIHN5c3RlbXMsIHRoZSB3cmFwcGVyCit3aWxsIGxvb2sgZm9yIHRoZSBKTkkgbGlicmFyeSB1bmRlciB0aGUgbGlicmFyeSBkaXJlY3RvcnkgY29uZmlndXJlZCB3aGVuCitsaWJqcGVnLXR1cmJvIHdhcyBidWlsdC4gIElmIHRoYXQgbGlicmFyeSBkaXJlY3RvcnkgaXMKKy9vcHQvbGlianBlZy10dXJiby9saWIzMiwgdGhlbiAvb3B0L2xpYmpwZWctdHVyYm8vbGliNjQgaXMgYWxzbyBzZWFyY2hlZCwgYW5kCit2aWNlIHZlcnNhLgorCitJZiB5b3UgaW5zdGFsbGVkIHRoZSBKTkkgbGlicmFyeSBpbnRvIGFub3RoZXIgZGlyZWN0b3J5LCB0aGVuIHlvdSB3aWxsIG5lZWQKK3RvIHBhc3MgYW4gYXJndW1lbnQgb2YgLURqYXZhLmxpYnJhcnkucGF0aD17cGF0aF90b19KTklfbGlicmFyeX0gdG8gamF2YSwgb3IKK21hbmlwdWxhdGUgTERfTElCUkFSWV9QQVRILCBEWUxEX0xJQlJBUllfUEFUSCwgb3IgUEFUSCB0byBpbmNsdWRlIHRoZSBkaXJlY3RvcnkKK2NvbnRhaW5pbmcgdGhlIEpOSSBsaWJyYXJ5LgpkaWZmIC0tZ2l0IGEvamF2YS9USkJlbmNoLmphdmEgYi9qYXZhL1RKQmVuY2guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmRmMWFiCi0tLSAvZGV2L251bGwKKysrIGIvamF2YS9USkJlbmNoLmphdmEKQEAgLTAsMCArMSw4NzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpMjAwOS0yMDE0IEQuIFIuIENvbW1hbmRlci4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBsaWJqcGVnLXR1cmJvIFByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIsCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitpbXBvcnQgamF2YS5pby4qOworaW1wb3J0IGphdmEuYXd0LmltYWdlLio7CitpbXBvcnQgamF2YXguaW1hZ2Vpby4qOworaW1wb3J0IGphdmEudXRpbC4qOworaW1wb3J0IG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLio7CisKK2NsYXNzIFRKQmVuY2ggeworCisgIHN0YXRpYyBmaW5hbCBpbnQgWVVWRU5DT0RFID0gMTsKKyAgc3RhdGljIGZpbmFsIGludCBZVVZERUNPREUgPSAyOworCisgIHN0YXRpYyBpbnQgZmxhZ3MgPSAwLCB5dXYgPSAwLCBxdWlldCA9IDAsIHBmID0gVEouUEZfQkdSOworICBzdGF0aWMgYm9vbGVhbiBkZWNvbXBPbmx5LCBkb1RpbGU7CisKKyAgc3RhdGljIGZpbmFsIFN0cmluZ1tdIHBpeEZvcm1hdFN0ciA9IHsKKyAgICAiUkdCIiwgIkJHUiIsICJSR0JYIiwgIkJHUlgiLCAiWEJHUiIsICJYUkdCIiwgIkdSQVkiCisgIH07CisKKyAgc3RhdGljIGZpbmFsIFN0cmluZ1tdIHN1Yk5hbWVMb25nID0geworICAgICI0OjQ6NCIsICI0OjI6MiIsICI0OjI6MCIsICJHUkFZIiwgIjQ6NDowIgorICB9OworCisgIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBzdWJOYW1lID0geworICAgICI0NDQiLCAiNDIyIiwgIjQyMCIsICJHUkFZIiwgIjQ0MCIKKyAgfTsKKworICBzdGF0aWMgVEpTY2FsaW5nRmFjdG9yIHNmOworICBzdGF0aWMgaW50IHhmb3JtT3AgPSBUSlRyYW5zZm9ybS5PUF9OT05FLCB4Zm9ybU9wdCA9IDA7CisgIHN0YXRpYyBkb3VibGUgYmVuY2hUaW1lID0gNS4wOworCisKKyAgc3RhdGljIGZpbmFsIGRvdWJsZSBnZXRUaW1lKCkgeworICAgIHJldHVybiAoZG91YmxlKVN5c3RlbS5uYW5vVGltZSgpIC8gMS4wZTk7CisgIH0KKworCisgIHN0YXRpYyBTdHJpbmcgc2lnRmlnKGRvdWJsZSB2YWwsIGludCBmaWdzKSB7CisgICAgU3RyaW5nIGZvcm1hdDsKKyAgICBpbnQgZGlnaXRzQWZ0ZXJEZWNpbWFsID0gZmlncyAtIChpbnQpTWF0aC5jZWlsKE1hdGgubG9nMTAoTWF0aC5hYnModmFsKSkpOworICAgIGlmIChkaWdpdHNBZnRlckRlY2ltYWwgPCAxKQorICAgICAgZm9ybWF0ID0gbmV3IFN0cmluZygiJS4wZiIpOworICAgIGVsc2UKKyAgICAgIGZvcm1hdCA9IG5ldyBTdHJpbmcoIiUuIiArIGRpZ2l0c0FmdGVyRGVjaW1hbCArICJmIik7CisgICAgcmV0dXJuIFN0cmluZy5mb3JtYXQoZm9ybWF0LCB2YWwpOworICB9CisKKworICBzdGF0aWMgYnl0ZVtdIGxvYWRJbWFnZShTdHJpbmcgZmlsZU5hbWUsIGludFtdIHcsIGludFtdIGgsIGludCBwaXhlbEZvcm1hdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgQnVmZmVyZWRJbWFnZSBpbWcgPSBJbWFnZUlPLnJlYWQobmV3IEZpbGUoZmlsZU5hbWUpKTsKKyAgICBpZiAoaW1nID09IG51bGwpCisgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJDb3VsZCBub3QgcmVhZCAiICsgZmlsZU5hbWUpOworICAgIHdbMF0gPSBpbWcuZ2V0V2lkdGgoKTsKKyAgICBoWzBdID0gaW1nLmdldEhlaWdodCgpOworICAgIGludFtdIHJnYiA9IGltZy5nZXRSR0IoMCwgMCwgd1swXSwgaFswXSwgbnVsbCwgMCwgd1swXSk7CisgICAgaW50IHBzID0gVEouZ2V0UGl4ZWxTaXplKHBpeGVsRm9ybWF0KTsKKyAgICBpbnQgcmluZGV4ID0gVEouZ2V0UmVkT2Zmc2V0KHBpeGVsRm9ybWF0KTsKKyAgICBpbnQgZ2luZGV4ID0gVEouZ2V0R3JlZW5PZmZzZXQocGl4ZWxGb3JtYXQpOworICAgIGludCBiaW5kZXggPSBUSi5nZXRCbHVlT2Zmc2V0KHBpeGVsRm9ybWF0KTsKKyAgICBieXRlW10gZHN0QnVmID0gbmV3IGJ5dGVbd1swXSAqIGhbMF0gKiBwc107CisgICAgaW50IHBpeGVscyA9IHdbMF0gKiBoWzBdLCBkc3RQdHIgPSAwLCByZ2JQdHIgPSAwOworICAgIHdoaWxlIChwaXhlbHMtLSA+IDApIHsKKyAgICAgIGRzdEJ1Zltkc3RQdHIgKyByaW5kZXhdID0gKGJ5dGUpKChyZ2JbcmdiUHRyXSA+PiAxNikgJiAweGZmKTsKKyAgICAgIGRzdEJ1Zltkc3RQdHIgKyBnaW5kZXhdID0gKGJ5dGUpKChyZ2JbcmdiUHRyXSA+PiA4KSAmIDB4ZmYpOworICAgICAgZHN0QnVmW2RzdFB0ciArIGJpbmRleF0gPSAoYnl0ZSkocmdiW3JnYlB0cl0gJiAweGZmKTsKKyAgICAgIGRzdFB0ciArPSBwczsKKyAgICAgIHJnYlB0cisrOworICAgIH0KKyAgICByZXR1cm4gZHN0QnVmOworICB9CisKKworICBzdGF0aWMgdm9pZCBzYXZlSW1hZ2UoU3RyaW5nIGZpbGVOYW1lLCBieXRlW10gc3JjQnVmLCBpbnQgdywgaW50IGgsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGl4ZWxGb3JtYXQpIHRocm93cyBFeGNlcHRpb24geworICAgIEJ1ZmZlcmVkSW1hZ2UgaW1nID0gbmV3IEJ1ZmZlcmVkSW1hZ2UodywgaCwgQnVmZmVyZWRJbWFnZS5UWVBFX0lOVF9SR0IpOworICAgIGludCBwaXhlbHMgPSB3ICogaCwgc3JjUHRyID0gMDsKKyAgICBpbnQgcHMgPSBUSi5nZXRQaXhlbFNpemUocGl4ZWxGb3JtYXQpOworICAgIGludCByaW5kZXggPSBUSi5nZXRSZWRPZmZzZXQocGl4ZWxGb3JtYXQpOworICAgIGludCBnaW5kZXggPSBUSi5nZXRHcmVlbk9mZnNldChwaXhlbEZvcm1hdCk7CisgICAgaW50IGJpbmRleCA9IFRKLmdldEJsdWVPZmZzZXQocGl4ZWxGb3JtYXQpOworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaDsgeSsrKSB7CisgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHc7IHgrKywgc3JjUHRyICs9IHBzKSB7CisgICAgICAgIGludCBwaXhlbCA9IChzcmNCdWZbc3JjUHRyICsgcmluZGV4XSAmIDB4ZmYpIDw8IDE2IHwKKyAgICAgICAgICAgICAgICAgICAgKHNyY0J1ZltzcmNQdHIgKyBnaW5kZXhdICYgMHhmZikgPDwgOCB8CisgICAgICAgICAgICAgICAgICAgIChzcmNCdWZbc3JjUHRyICsgYmluZGV4XSAmIDB4ZmYpOworICAgICAgICBpbWcuc2V0UkdCKHgsIHksIHBpeGVsKTsKKyAgICAgIH0KKyAgICB9CisgICAgSW1hZ2VJTy53cml0ZShpbWcsICJibXAiLCBuZXcgRmlsZShmaWxlTmFtZSkpOworICB9CisKKworICAvKiBEZWNvbXByZXNzaW9uIHRlc3QgKi8KKyAgc3RhdGljIHZvaWQgZGVjb21wVGVzdChieXRlW10gc3JjQnVmLCBieXRlW11bXSBqcGVnQnVmLCBpbnRbXSBqcGVnU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBieXRlW10gZHN0QnVmLCBpbnQgdywgaW50IGgsIGludCBzdWJzYW1wLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCBqcGVnUXVhbCwgU3RyaW5nIGZpbGVOYW1lLCBpbnQgdGlsZXcsIGludCB0aWxlaCkKKyAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBTdHJpbmcgcXVhbFN0ciA9IG5ldyBTdHJpbmcoIiIpLCBzaXplU3RyLCB0ZW1wU3RyOworICAgIFRKRGVjb21wcmVzc29yIHRqZDsKKyAgICBkb3VibGUgc3RhcnQsIGVsYXBzZWQ7CisgICAgaW50IHBzID0gVEouZ2V0UGl4ZWxTaXplKHBmKSwgaTsKKyAgICBpbnQgeXV2U2l6ZSA9IFRKLmJ1ZlNpemVZVVYodywgaCwgc3Vic2FtcCksIGJ1ZnNpemU7CisgICAgaW50IHNjYWxlZHcgPSAoeXV2ID09IFlVVkRFQ09ERSkgPyB3IDogc2YuZ2V0U2NhbGVkKHcpOworICAgIGludCBzY2FsZWRoID0gKHl1diA9PSBZVVZERUNPREUpID8gaCA6IHNmLmdldFNjYWxlZChoKTsKKyAgICBpbnQgcGl0Y2ggPSBzY2FsZWR3ICogcHM7CisKKyAgICBpZiAoanBlZ1F1YWwgPiAwKQorICAgICAgcXVhbFN0ciA9IG5ldyBTdHJpbmcoIl9RIiArIGpwZWdRdWFsKTsKKworICAgIHRqZCA9IG5ldyBUSkRlY29tcHJlc3NvcigpOworCisgICAgaW50IGJ1ZlNpemUgPSAoeXV2ID09IFlVVkRFQ09ERSA/IHl1dlNpemUgOiBwaXRjaCAqIHNjYWxlZGgpOworICAgIGlmIChkc3RCdWYgPT0gbnVsbCkKKyAgICAgIGRzdEJ1ZiA9IG5ldyBieXRlW2J1ZlNpemVdOworCisgICAgLyogU2V0IHRoZSBkZXN0aW5hdGlvbiBidWZmZXIgdG8gZ3JheSBzbyB3ZSBrbm93IHdoZXRoZXIgdGhlIGRlY29tcHJlc3NvcgorICAgICAgIGF0dGVtcHRlZCB0byB3cml0ZSB0byBpdCAqLworICAgIEFycmF5cy5maWxsKGRzdEJ1ZiwgKGJ5dGUpMTI3KTsKKworICAgIC8qIEV4ZWN1dGUgb25jZSB0byBwcmVsb2FkIGNhY2hlICovCisgICAgdGpkLnNldEpQRUdJbWFnZShqcGVnQnVmWzBdLCBqcGVnU2l6ZVswXSk7CisgICAgaWYgKHl1diA9PSBZVVZERUNPREUpCisgICAgICB0amQuZGVjb21wcmVzc1RvWVVWKGRzdEJ1ZiwgZmxhZ3MpOworICAgIGVsc2UKKyAgICAgIHRqZC5kZWNvbXByZXNzKGRzdEJ1ZiwgMCwgMCwgc2NhbGVkdywgcGl0Y2gsIHNjYWxlZGgsIHBmLCBmbGFncyk7CisKKyAgICAvKiBCZW5jaG1hcmsgKi8KKyAgICBmb3IgKGkgPSAwLCBzdGFydCA9IGdldFRpbWUoKTsgKGVsYXBzZWQgPSBnZXRUaW1lKCkgLSBzdGFydCkgPCBiZW5jaFRpbWU7CisgICAgICAgICBpKyspIHsKKyAgICAgIGludCB0aWxlID0gMDsKKyAgICAgIGlmICh5dXYgPT0gWVVWREVDT0RFKQorICAgICAgICB0amQuZGVjb21wcmVzc1RvWVVWKGRzdEJ1ZiwgZmxhZ3MpOworICAgICAgZWxzZSB7CisgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaDsgeSArPSB0aWxlaCkgeworICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgdzsgeCArPSB0aWxldywgdGlsZSsrKSB7CisgICAgICAgICAgICBpbnQgd2lkdGggPSBkb1RpbGUgPyBNYXRoLm1pbih0aWxldywgdyAtIHgpIDogc2NhbGVkdzsKKyAgICAgICAgICAgIGludCBoZWlnaHQgPSBkb1RpbGUgPyBNYXRoLm1pbih0aWxlaCwgaCAtIHkpIDogc2NhbGVkaDsKKyAgICAgICAgICAgIHRqZC5zZXRKUEVHSW1hZ2UoanBlZ0J1Zlt0aWxlXSwganBlZ1NpemVbdGlsZV0pOworICAgICAgICAgICAgdGpkLmRlY29tcHJlc3MoZHN0QnVmLCB4LCB5LCB3aWR0aCwgcGl0Y2gsIGhlaWdodCwgcGYsIGZsYWdzKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICB0amQgPSBudWxsOworICAgIGZvciAoaSA9IDA7IGkgPCBqcGVnQnVmLmxlbmd0aDsgaSsrKQorICAgICAganBlZ0J1ZltpXSA9IG51bGw7CisgICAganBlZ0J1ZiA9IG51bGw7ICBqcGVnU2l6ZSA9IG51bGw7CisgICAgU3lzdGVtLmdjKCk7CisKKyAgICBpZiAocXVpZXQgIT0gMCkKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigKKyAgICAgICAgc2lnRmlnKChkb3VibGUpKHcgKiBoKSAvIDEwMDAwMDAuICogKGRvdWJsZSlpIC8gZWxhcHNlZCwgNCkpOworICAgIGVsc2UgeworICAgICAgU3lzdGVtLm91dC5mb3JtYXQoIkQtLT4gRnJhbWUgcmF0ZTogICAgICAgICAgICVmIGZwc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUpaSAvIGVsYXBzZWQpOworICAgICAgU3lzdGVtLm91dC5mb3JtYXQoIiAgICAgRGVzdC4gdGhyb3VnaHB1dDogICAgICVmIE1lZ2FwaXhlbHMvc2VjXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSkodyAqIGgpIC8gMTAwMDAwMC4gKiAoZG91YmxlKWkgLyBlbGFwc2VkKTsKKyAgICB9CisKKyAgICBpZiAoeXV2ID09IFlVVkRFQ09ERSkgeworICAgICAgdGVtcFN0ciA9IGZpbGVOYW1lICsgIl8iICsgc3ViTmFtZVtzdWJzYW1wXSArIHF1YWxTdHIgKyAiLnl1diI7CisgICAgICBGaWxlT3V0cHV0U3RyZWFtIGZvcyA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKHRlbXBTdHIpOworICAgICAgZm9zLndyaXRlKGRzdEJ1ZiwgMCwgeXV2U2l6ZSk7CisgICAgICBmb3MuY2xvc2UoKTsKKyAgICB9IGVsc2UgeworICAgICAgaWYgKHNmLmdldE51bSgpICE9IDEgfHwgc2YuZ2V0RGVub20oKSAhPSAxKQorICAgICAgICBzaXplU3RyID0gbmV3IFN0cmluZyhzZi5nZXROdW0oKSArICJfIiArIHNmLmdldERlbm9tKCkpOworICAgICAgZWxzZSBpZiAodGlsZXcgIT0gdyB8fCB0aWxlaCAhPSBoKQorICAgICAgICBzaXplU3RyID0gbmV3IFN0cmluZyh0aWxldyArICJ4IiArIHRpbGVoKTsKKyAgICAgIGVsc2UKKyAgICAgICAgc2l6ZVN0ciA9IG5ldyBTdHJpbmcoImZ1bGwiKTsKKyAgICAgIGlmIChkZWNvbXBPbmx5KQorICAgICAgICB0ZW1wU3RyID0gbmV3IFN0cmluZyhmaWxlTmFtZSArICJfIiArIHNpemVTdHIgKyAiLmJtcCIpOworICAgICAgZWxzZQorICAgICAgICB0ZW1wU3RyID0gbmV3IFN0cmluZyhmaWxlTmFtZSArICJfIiArIHN1Yk5hbWVbc3Vic2FtcF0gKyBxdWFsU3RyICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl8iICsgc2l6ZVN0ciArICIuYm1wIik7CisgICAgICBzYXZlSW1hZ2UodGVtcFN0ciwgZHN0QnVmLCBzY2FsZWR3LCBzY2FsZWRoLCBwZik7CisgICAgICBpbnQgbmR4ID0gdGVtcFN0ci5sYXN0SW5kZXhPZignLicpOworICAgICAgdGVtcFN0ciA9IG5ldyBTdHJpbmcodGVtcFN0ci5zdWJzdHJpbmcoMCwgbmR4KSArICItZXJyLmJtcCIpOworICAgICAgaWYgKHNyY0J1ZiAhPSBudWxsICYmIHNmLmdldE51bSgpID09IDEgJiYgc2YuZ2V0RGVub20oKSA9PSAxKSB7CisgICAgICAgIGlmIChxdWlldCA9PSAwKQorICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29tcHJlc3Npb24gZXJyb3Igd3JpdHRlbiB0byAiICsgdGVtcFN0ciArICIuIik7CisgICAgICAgIGlmIChzdWJzYW1wID09IFRKLlNBTVBfR1JBWSkgeworICAgICAgICAgIGZvciAoaW50IHkgPSAwLCBpbmRleCA9IDA7IHkgPCBoOyB5KyssIGluZGV4ICs9IHBpdGNoKSB7CisgICAgICAgICAgICBmb3IgKGludCB4ID0gMCwgaW5kZXgyID0gaW5kZXg7IHggPCB3OyB4KyssIGluZGV4MiArPSBwcykgeworICAgICAgICAgICAgICBpbnQgcmluZGV4ID0gaW5kZXgyICsgVEouZ2V0UmVkT2Zmc2V0KHBmKTsKKyAgICAgICAgICAgICAgaW50IGdpbmRleCA9IGluZGV4MiArIFRKLmdldEdyZWVuT2Zmc2V0KHBmKTsKKyAgICAgICAgICAgICAgaW50IGJpbmRleCA9IGluZGV4MiArIFRKLmdldEJsdWVPZmZzZXQocGYpOworICAgICAgICAgICAgICBpbnQgbHVtID0gKGludCkoKGRvdWJsZSkoc3JjQnVmW3JpbmRleF0gJiAweGZmKSAqIDAuMjk5ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUpKHNyY0J1ZltnaW5kZXhdICYgMHhmZikgKiAwLjU4NyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlKShzcmNCdWZbYmluZGV4XSAmIDB4ZmYpICogMC4xMTQgKyAwLjUpOworICAgICAgICAgICAgICBpZiAobHVtID4gMjU1KSBsdW0gPSAyNTU7CisgICAgICAgICAgICAgIGlmIChsdW0gPCAwKSBsdW0gPSAwOworICAgICAgICAgICAgICBkc3RCdWZbcmluZGV4XSA9IChieXRlKU1hdGguYWJzKChkc3RCdWZbcmluZGV4XSAmIDB4ZmYpIC0gbHVtKTsKKyAgICAgICAgICAgICAgZHN0QnVmW2dpbmRleF0gPSAoYnl0ZSlNYXRoLmFicygoZHN0QnVmW2dpbmRleF0gJiAweGZmKSAtIGx1bSk7CisgICAgICAgICAgICAgIGRzdEJ1ZltiaW5kZXhdID0gKGJ5dGUpTWF0aC5hYnMoKGRzdEJ1ZltiaW5kZXhdICYgMHhmZikgLSBsdW0pOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGg7IHkrKykKKyAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgdyAqIHBzOyB4KyspCisgICAgICAgICAgICAgIGRzdEJ1ZltwaXRjaCAqIHkgKyB4XSA9CisgICAgICAgICAgICAgICAgKGJ5dGUpTWF0aC5hYnMoKGRzdEJ1ZltwaXRjaCAqIHkgKyB4XSAmIDB4ZmYpIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3JjQnVmW3BpdGNoICogeSArIHhdICYgMHhmZikpOworICAgICAgICB9CisgICAgICAgIHNhdmVJbWFnZSh0ZW1wU3RyLCBkc3RCdWYsIHcsIGgsIHBmKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworCisgIHN0YXRpYyB2b2lkIGRvVGVzdFlVVihieXRlW10gc3JjQnVmLCBpbnQgdywgaW50IGgsIGludCBzdWJzYW1wLAorICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGZpbGVOYW1lKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBUSkNvbXByZXNzb3IgdGpjOworICAgIGJ5dGVbXSBkc3RCdWY7CisgICAgZG91YmxlIHN0YXJ0LCBlbGFwc2VkOworICAgIGludCBwcyA9IFRKLmdldFBpeGVsU2l6ZShwZiksIGk7CisgICAgaW50IHl1dlNpemUgPSAwOworCisgICAgeXV2U2l6ZSA9IFRKLmJ1ZlNpemVZVVYodywgaCwgc3Vic2FtcCk7CisgICAgZHN0QnVmID0gbmV3IGJ5dGVbeXV2U2l6ZV07CisKKyAgICBpZiAocXVpZXQgPT0gMCkKKyAgICAgIFN5c3RlbS5vdXQuZm9ybWF0KCI+Pj4+PiAgJXMgKCVzKSA8LS0+IFlVViAlcyAgPDw8PDxcbiIsCisgICAgICAgIHBpeEZvcm1hdFN0cltwZl0sCisgICAgICAgIChmbGFncyAmIFRKLkZMQUdfQk9UVE9NVVApICE9IDAgPyAiQm90dG9tLXVwIiA6ICJUb3AtZG93biIsCisgICAgICAgIHN1Yk5hbWVMb25nW3N1YnNhbXBdKTsKKworICAgIGlmIChxdWlldCA9PSAxKQorICAgICAgU3lzdGVtLm91dC5mb3JtYXQoIiVzXHQlc1x0JXNcdE4vQVx0IiwgcGl4Rm9ybWF0U3RyW3BmXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIChmbGFncyAmIFRKLkZMQUdfQk9UVE9NVVApICE9IDAgPyAiQlUiIDogIlREIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1Yk5hbWVMb25nW3N1YnNhbXBdKTsKKworICAgIHRqYyA9IG5ldyBUSkNvbXByZXNzb3Ioc3JjQnVmLCAwLCAwLCB3LCAwLCBoLCBwZik7CisgICAgdGpjLnNldFN1YnNhbXAoc3Vic2FtcCk7CisKKyAgICAvKiBFeGVjdXRlIG9uY2UgdG8gcHJlbG9hZCBjYWNoZSAqLworICAgIHRqYy5lbmNvZGVZVVYoZHN0QnVmLCBmbGFncyk7CisKKyAgICAvKiBCZW5jaG1hcmsgKi8KKyAgICBmb3IgKGkgPSAwLCBzdGFydCA9IGdldFRpbWUoKTsKKyAgICAgICAgIChlbGFwc2VkID0gZ2V0VGltZSgpIC0gc3RhcnQpIDwgYmVuY2hUaW1lOyBpKyspCisgICAgICB0amMuZW5jb2RlWVVWKGRzdEJ1ZiwgZmxhZ3MpOworCisgICAgaWYgKHF1aWV0ID09IDEpCisgICAgICBTeXN0ZW0ub3V0LmZvcm1hdCgiJS00ZCAgJS00ZFx0IiwgdywgaCk7CisgICAgaWYgKHF1aWV0ICE9IDApIHsKKyAgICAgIFN5c3RlbS5vdXQuZm9ybWF0KCIlcyVjJXMlYyIsCisgICAgICAgIHNpZ0ZpZygoZG91YmxlKSh3ICogaCkgLyAxMDAwMDAwLiAqIChkb3VibGUpIGkgLyBlbGFwc2VkLCA0KSwKKyAgICAgICAgcXVpZXQgPT0gMiA/ICdcbicgOiAnXHQnLAorICAgICAgICBzaWdGaWcoKGRvdWJsZSkodyAqIGggKiBwcykgLyAoZG91YmxlKXl1dlNpemUsIDQpLAorICAgICAgICBxdWlldCA9PSAyID8gJ1xuJyA6ICdcdCcpOworICAgIH0gZWxzZSB7CisgICAgICBTeXN0ZW0ub3V0LmZvcm1hdCgiXG4lcyBzaXplOiAlZCB4ICVkXG4iLCAiSW1hZ2UiLCB3LCBoKTsKKyAgICAgIFN5c3RlbS5vdXQuZm9ybWF0KCJDLS0+IEZyYW1lIHJhdGU6ICAgICAgICAgICAlZiBmcHNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlKWkgLyBlbGFwc2VkKTsKKyAgICAgIFN5c3RlbS5vdXQuZm9ybWF0KCIgICAgIE91dHB1dCBpbWFnZSBzaXplOiAgICAlZCBieXRlc1xuIiwgeXV2U2l6ZSk7CisgICAgICBTeXN0ZW0ub3V0LmZvcm1hdCgiICAgICBDb21wcmVzc2lvbiByYXRpbzogICAgJWY6MVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUpKHcgKiBoICogcHMpIC8gKGRvdWJsZSl5dXZTaXplKTsKKyAgICAgIFN5c3RlbS5vdXQuZm9ybWF0KCIgICAgIFNvdXJjZSB0aHJvdWdocHV0OiAgICAlZiBNZWdhcGl4ZWxzL3NlY1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUpKHcgKiBoKSAvIDEwMDAwMDAuICogKGRvdWJsZSlpIC8gZWxhcHNlZCk7CisgICAgICBTeXN0ZW0ub3V0LmZvcm1hdCgiICAgICBPdXRwdXQgYml0IHN0cmVhbTogICAgJWYgTWVnYWJpdHMvc2VjXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSl5dXZTaXplICogOC4gLyAxMDAwMDAwLiAqIChkb3VibGUpaSAvIGVsYXBzZWQpOworICAgIH0KKyAgICBTdHJpbmcgdGVtcFN0ciA9IGZpbGVOYW1lICsgIl8iICsgc3ViTmFtZVtzdWJzYW1wXSArICIueXV2IjsKKyAgICBGaWxlT3V0cHV0U3RyZWFtIGZvcyA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKHRlbXBTdHIpOworICAgIGZvcy53cml0ZShkc3RCdWYsIDAsIHl1dlNpemUpOworICAgIGZvcy5jbG9zZSgpOworICAgIGlmIChxdWlldCA9PSAwKQorICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWZlcmVuY2UgaW1hZ2Ugd3JpdHRlbiB0byAiICsgdGVtcFN0cik7CisgIH0KKworCisgIHN0YXRpYyB2b2lkIGRvVGVzdChieXRlW10gc3JjQnVmLCBpbnQgdywgaW50IGgsIGludCBzdWJzYW1wLCBpbnQganBlZ1F1YWwsCisgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZmlsZU5hbWUpIHRocm93cyBFeGNlcHRpb24geworICAgIFRKQ29tcHJlc3NvciB0amM7CisgICAgYnl0ZVtdIHRtcEJ1ZjsKKyAgICBieXRlW11bXSBqcGVnQnVmOworICAgIGludFtdIGpwZWdTaXplOworICAgIGRvdWJsZSBzdGFydCwgZWxhcHNlZDsKKyAgICBpbnQgdG90YWxKcGVnU2l6ZSA9IDAsIHRpbGV3LCB0aWxlaCwgaTsKKyAgICBpbnQgcHMgPSBUSi5nZXRQaXhlbFNpemUocGYpLCBudGlsZXN3ID0gMSwgbnRpbGVzaCA9IDEsIHBpdGNoID0gdyAqIHBzOworCisgICAgaWYgKHl1diA9PSBZVVZFTkNPREUpIHsKKyAgICAgIGRvVGVzdFlVVihzcmNCdWYsIHcsIGgsIHN1YnNhbXAsIGZpbGVOYW1lKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB0bXBCdWYgPSBuZXcgYnl0ZVtwaXRjaCAqIGhdOworCisgICAgaWYgKHF1aWV0ID09IDApCisgICAgICBTeXN0ZW0ub3V0LmZvcm1hdCgiPj4+Pj4gICVzICglcykgPC0tPiBKUEVHICVzIFElZCAgPDw8PDxcbiIsCisgICAgICAgIHBpeEZvcm1hdFN0cltwZl0sCisgICAgICAgIChmbGFncyAmIFRKLkZMQUdfQk9UVE9NVVApICE9IDAgPyAiQm90dG9tLXVwIiA6ICJUb3AtZG93biIsCisgICAgICAgIHN1Yk5hbWVMb25nW3N1YnNhbXBdLCBqcGVnUXVhbCk7CisKKyAgICB0amMgPSBuZXcgVEpDb21wcmVzc29yKCk7CisKKyAgICBmb3IgKHRpbGV3ID0gZG9UaWxlID8gOCA6IHcsIHRpbGVoID0gZG9UaWxlID8gOCA6IGg7IDsKKyAgICAgICAgIHRpbGV3ICo9IDIsIHRpbGVoICo9IDIpIHsKKyAgICAgIGlmICh0aWxldyA+IHcpCisgICAgICAgIHRpbGV3ID0gdzsKKyAgICAgIGlmICh0aWxlaCA+IGgpCisgICAgICAgIHRpbGVoID0gaDsKKyAgICAgIG50aWxlc3cgPSAodyArIHRpbGV3IC0gMSkgLyB0aWxldzsKKyAgICAgIG50aWxlc2ggPSAoaCArIHRpbGVoIC0gMSkgLyB0aWxlaDsKKworICAgICAganBlZ0J1ZiA9IG5ldyBieXRlW250aWxlc3cgKiBudGlsZXNoXVtUSi5idWZTaXplKHRpbGV3LCB0aWxlaCwgc3Vic2FtcCldOworICAgICAganBlZ1NpemUgPSBuZXcgaW50W250aWxlc3cgKiBudGlsZXNoXTsKKworICAgICAgLyogQ29tcHJlc3Npb24gdGVzdCAqLworICAgICAgaWYgKHF1aWV0ID09IDEpCisgICAgICAgIFN5c3RlbS5vdXQuZm9ybWF0KCIlc1x0JXNcdCVzXHQlZFx0IiwgcGl4Rm9ybWF0U3RyW3BmXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsYWdzICYgVEouRkxBR19CT1RUT01VUCkgIT0gMCA/ICJCVSIgOiAiVEQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJOYW1lTG9uZ1tzdWJzYW1wXSwganBlZ1F1YWwpOworICAgICAgZm9yIChpID0gMDsgaSA8IGg7IGkrKykKKyAgICAgICAgU3lzdGVtLmFycmF5Y29weShzcmNCdWYsIHcgKiBwcyAqIGksIHRtcEJ1ZiwgcGl0Y2ggKiBpLCB3ICogcHMpOworICAgICAgdGpjLnNldFNvdXJjZUltYWdlKHNyY0J1ZiwgMCwgMCwgdGlsZXcsIHBpdGNoLCB0aWxlaCwgcGYpOworICAgICAgdGpjLnNldEpQRUdRdWFsaXR5KGpwZWdRdWFsKTsKKyAgICAgIHRqYy5zZXRTdWJzYW1wKHN1YnNhbXApOworCisgICAgICAvKiBFeGVjdXRlIG9uY2UgdG8gcHJlbG9hZCBjYWNoZSAqLworICAgICAgdGpjLmNvbXByZXNzKGpwZWdCdWZbMF0sIGZsYWdzKTsKKworICAgICAgLyogQmVuY2htYXJrICovCisgICAgICBmb3IgKGkgPSAwLCBzdGFydCA9IGdldFRpbWUoKTsKKyAgICAgICAgICAgKGVsYXBzZWQgPSBnZXRUaW1lKCkgLSBzdGFydCkgPCBiZW5jaFRpbWU7IGkrKykgeworICAgICAgICBpbnQgdGlsZSA9IDA7CisgICAgICAgIHRvdGFsSnBlZ1NpemUgPSAwOworICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGg7IHkgKz0gdGlsZWgpIHsKKyAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHc7IHggKz0gdGlsZXcsIHRpbGUrKykgeworICAgICAgICAgICAgaW50IHdpZHRoID0gTWF0aC5taW4odGlsZXcsIHcgLSB4KTsKKyAgICAgICAgICAgIGludCBoZWlnaHQgPSBNYXRoLm1pbih0aWxlaCwgaCAtIHkpOworICAgICAgICAgICAgdGpjLnNldFNvdXJjZUltYWdlKHNyY0J1ZiwgeCwgeSwgd2lkdGgsIHBpdGNoLCBoZWlnaHQsIHBmKTsKKyAgICAgICAgICAgIHRqYy5jb21wcmVzcyhqcGVnQnVmW3RpbGVdLCBmbGFncyk7CisgICAgICAgICAgICBqcGVnU2l6ZVt0aWxlXSA9IHRqYy5nZXRDb21wcmVzc2VkU2l6ZSgpOworICAgICAgICAgICAgdG90YWxKcGVnU2l6ZSArPSBqcGVnU2l6ZVt0aWxlXTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgKHF1aWV0ID09IDEpCisgICAgICAgIFN5c3RlbS5vdXQuZm9ybWF0KCIlLTRkICAlLTRkXHQiLCB0aWxldywgdGlsZWgpOworICAgICAgaWYgKHF1aWV0ICE9IDApIHsKKyAgICAgICAgU3lzdGVtLm91dC5mb3JtYXQoIiVzJWMlcyVjIiwKKyAgICAgICAgICBzaWdGaWcoKGRvdWJsZSkodyAqIGgpIC8gMTAwMDAwMC4gKiAoZG91YmxlKSBpIC8gZWxhcHNlZCwgNCksCisgICAgICAgICAgcXVpZXQgPT0gMiA/ICdcbicgOiAnXHQnLAorICAgICAgICAgIHNpZ0ZpZygoZG91YmxlKSh3ICogaCAqIHBzKSAvIChkb3VibGUpdG90YWxKcGVnU2l6ZSwgNCksCisgICAgICAgICAgcXVpZXQgPT0gMiA/ICdcbicgOiAnXHQnKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIFN5c3RlbS5vdXQuZm9ybWF0KCJcbiVzIHNpemU6ICVkIHggJWRcbiIsIGRvVGlsZSA/ICJUaWxlIiA6ICJJbWFnZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGV3LCB0aWxlaCk7CisgICAgICAgIFN5c3RlbS5vdXQuZm9ybWF0KCJDLS0+IEZyYW1lIHJhdGU6ICAgICAgICAgICAlZiBmcHNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUpaSAvIGVsYXBzZWQpOworICAgICAgICBTeXN0ZW0ub3V0LmZvcm1hdCgiICAgICBPdXRwdXQgaW1hZ2Ugc2l6ZTogICAgJWQgYnl0ZXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsSnBlZ1NpemUpOworICAgICAgICBTeXN0ZW0ub3V0LmZvcm1hdCgiICAgICBDb21wcmVzc2lvbiByYXRpbzogICAgJWY6MVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSkodyAqIGggKiBwcykgLyAoZG91YmxlKXRvdGFsSnBlZ1NpemUpOworICAgICAgICBTeXN0ZW0ub3V0LmZvcm1hdCgiICAgICBTb3VyY2UgdGhyb3VnaHB1dDogICAgJWYgTWVnYXBpeGVscy9zZWNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUpKHcgKiBoKSAvIDEwMDAwMDAuICogKGRvdWJsZSlpIC8gZWxhcHNlZCk7CisgICAgICAgIFN5c3RlbS5vdXQuZm9ybWF0KCIgICAgIE91dHB1dCBiaXQgc3RyZWFtOiAgICAlZiBNZWdhYml0cy9zZWNcbiIsCisgICAgICAgICAgKGRvdWJsZSl0b3RhbEpwZWdTaXplICogOC4gLyAxMDAwMDAwLiAqIChkb3VibGUpaSAvIGVsYXBzZWQpOworICAgICAgfQorICAgICAgaWYgKHRpbGV3ID09IHcgJiYgdGlsZWggPT0gaCkgeworICAgICAgICBTdHJpbmcgdGVtcFN0ciA9IGZpbGVOYW1lICsgIl8iICsgc3ViTmFtZVtzdWJzYW1wXSArICJfIiArICJRIiArCisgICAgICAgICAgICAgICAgICAgICAgICAganBlZ1F1YWwgKyAiLmpwZyI7CisgICAgICAgIEZpbGVPdXRwdXRTdHJlYW0gZm9zID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0odGVtcFN0cik7CisgICAgICAgIGZvcy53cml0ZShqcGVnQnVmWzBdLCAwLCBqcGVnU2l6ZVswXSk7CisgICAgICAgIGZvcy5jbG9zZSgpOworICAgICAgICBpZiAocXVpZXQgPT0gMCkKKyAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlZmVyZW5jZSBpbWFnZSB3cml0dGVuIHRvICIgKyB0ZW1wU3RyKTsKKyAgICAgIH0KKworICAgICAgLyogRGVjb21wcmVzc2lvbiB0ZXN0ICovCisgICAgICBkZWNvbXBUZXN0KHNyY0J1ZiwganBlZ0J1ZiwganBlZ1NpemUsIHRtcEJ1ZiwgdywgaCwgc3Vic2FtcCwganBlZ1F1YWwsCisgICAgICAgICAgICAgICAgIGZpbGVOYW1lLCB0aWxldywgdGlsZWgpOworCisgICAgICBpZiAodGlsZXcgPT0gdyAmJiB0aWxlaCA9PSBoKSBicmVhazsKKyAgICB9CisgIH0KKworCisgIHN0YXRpYyB2b2lkIGRvRGVjb21wVGVzdChTdHJpbmcgZmlsZU5hbWUpIHRocm93cyBFeGNlcHRpb24geworICAgIFRKVHJhbnNmb3JtZXIgdGp0OworICAgIGJ5dGVbXVtdIGpwZWdCdWY7CisgICAgYnl0ZVtdIHNyY0J1ZjsKKyAgICBpbnRbXSBqcGVnU2l6ZTsKKyAgICBpbnQgdG90YWxKcGVnU2l6ZTsKKyAgICBpbnQgdyA9IDAsIGggPSAwLCBzdWJzYW1wID0gLTEsIF93LCBfaCwgX3RpbGV3LCBfdGlsZWgsCisgICAgICBfbnRpbGVzdywgX250aWxlc2gsIF9zdWJzYW1wLCB4LCB5OworICAgIGludCBudGlsZXN3ID0gMSwgbnRpbGVzaCA9IDE7CisgICAgZG91YmxlIHN0YXJ0LCBlbGFwc2VkOworICAgIGludCBwcyA9IFRKLmdldFBpeGVsU2l6ZShwZiksIHRpbGU7CisKKyAgICBGaWxlSW5wdXRTdHJlYW0gZmlzID0gbmV3IEZpbGVJbnB1dFN0cmVhbShmaWxlTmFtZSk7CisgICAgaW50IHNyY1NpemUgPSAoaW50KWZpcy5nZXRDaGFubmVsKCkuc2l6ZSgpOworICAgIHNyY0J1ZiA9IG5ldyBieXRlW3NyY1NpemVdOworICAgIGZpcy5yZWFkKHNyY0J1ZiwgMCwgc3JjU2l6ZSk7CisgICAgZmlzLmNsb3NlKCk7CisKKyAgICBpbnQgaW5kZXggPSBmaWxlTmFtZS5sYXN0SW5kZXhPZignLicpOworICAgIGlmIChpbmRleCA+PSAwKQorICAgICAgZmlsZU5hbWUgPSBuZXcgU3RyaW5nKGZpbGVOYW1lLnN1YnN0cmluZygwLCBpbmRleCkpOworCisgICAgdGp0ID0gbmV3IFRKVHJhbnNmb3JtZXIoKTsKKworICAgIHRqdC5zZXRKUEVHSW1hZ2Uoc3JjQnVmLCBzcmNTaXplKTsKKyAgICB3ID0gdGp0LmdldFdpZHRoKCk7CisgICAgaCA9IHRqdC5nZXRIZWlnaHQoKTsKKyAgICBzdWJzYW1wID0gdGp0LmdldFN1YnNhbXAoKTsKKworICAgIGlmIChxdWlldCA9PSAxKSB7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFsbCBwZXJmb3JtYW5jZSB2YWx1ZXMgaW4gTXBpeGVscy9zZWNcbiIpOworICAgICAgU3lzdGVtLm91dC5mb3JtYXQoIkJpdG1hcFx0Qml0bWFwXHRKUEVHXHQlcyAlcyBcdFhmb3JtXHRDb21wXHREZWNvbXBcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAoZG9UaWxlID8gIlRpbGUgIiA6ICJJbWFnZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgKGRvVGlsZSA/ICJUaWxlICIgOiAiSW1hZ2UiKSk7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZvcm1hdFx0T3JkZXJcdFN1YnNhbXBcdFdpZHRoIEhlaWdodFx0UGVyZiBcdFJhdGlvXHRQZXJmXG4iKTsKKyAgICB9IGVsc2UgaWYgKHF1aWV0ID09IDApIHsKKyAgICAgIFN5c3RlbS5vdXQuZm9ybWF0KCI+Pj4+PiAgSlBFRyAlcyAtLT4gJXMgKCVzKSAgPDw8PDxcbiIsCisgICAgICAgIHN1Yk5hbWVMb25nW3N1YnNhbXBdLCBwaXhGb3JtYXRTdHJbcGZdLAorICAgICAgICAoZmxhZ3MgJiBUSi5GTEFHX0JPVFRPTVVQKSAhPSAwID8gIkJvdHRvbS11cCIgOiAiVG9wLWRvd24iKTsKKyAgICB9CisKKyAgICBmb3IgKGludCB0aWxldyA9IGRvVGlsZSA/IDE2IDogdywgdGlsZWggPSBkb1RpbGUgPyAxNiA6IGg7IDsKKyAgICAgICAgIHRpbGV3ICo9IDIsIHRpbGVoICo9IDIpIHsKKyAgICAgIGlmICh0aWxldyA+IHcpCisgICAgICAgIHRpbGV3ID0gdzsKKyAgICAgIGlmICh0aWxlaCA+IGgpCisgICAgICAgIHRpbGVoID0gaDsKKyAgICAgIG50aWxlc3cgPSAodyArIHRpbGV3IC0gMSkgLyB0aWxldzsKKyAgICAgIG50aWxlc2ggPSAoaCArIHRpbGVoIC0gMSkgLyB0aWxlaDsKKworICAgICAgX3cgPSB3OyAgX2ggPSBoOyAgX3RpbGV3ID0gdGlsZXc7ICBfdGlsZWggPSB0aWxlaDsKKyAgICAgIGlmIChxdWlldCA9PSAwKSB7CisgICAgICAgIFN5c3RlbS5vdXQuZm9ybWF0KCJcbiVzIHNpemU6ICVkIHggJWQiLCAoZG9UaWxlID8gIlRpbGUiIDogIkltYWdlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIF90aWxldywgX3RpbGVoKTsKKyAgICAgICAgaWYgKHNmLmdldE51bSgpICE9IDEgfHwgc2YuZ2V0RGVub20oKSAhPSAxKQorICAgICAgICAgIFN5c3RlbS5vdXQuZm9ybWF0KCIgLS0+ICVkIHggJWQiLCBzZi5nZXRTY2FsZWQoX3cpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNmLmdldFNjYWxlZChfaCkpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIpOworICAgICAgfSBlbHNlIGlmIChxdWlldCA9PSAxKSB7CisgICAgICAgIFN5c3RlbS5vdXQuZm9ybWF0KCIlc1x0JXNcdCVzXHQiLCBwaXhGb3JtYXRTdHJbcGZdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxhZ3MgJiBUSi5GTEFHX0JPVFRPTVVQKSAhPSAwID8gIkJVIiA6ICJURCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Yk5hbWVMb25nW3N1YnNhbXBdKTsKKyAgICAgICAgU3lzdGVtLm91dC5mb3JtYXQoIiUtNGQgICUtNGRcdCIsIHRpbGV3LCB0aWxlaCk7CisgICAgICB9CisKKyAgICAgIF9zdWJzYW1wID0gc3Vic2FtcDsKKyAgICAgIGlmIChkb1RpbGUgfHwgeGZvcm1PcCAhPSBUSlRyYW5zZm9ybS5PUF9OT05FIHx8IHhmb3JtT3B0ICE9IDApIHsKKyAgICAgICAgaWYgKHhmb3JtT3AgPT0gVEpUcmFuc2Zvcm0uT1BfVFJBTlNQT1NFIHx8CisgICAgICAgICAgICB4Zm9ybU9wID09IFRKVHJhbnNmb3JtLk9QX1RSQU5TVkVSU0UgfHwKKyAgICAgICAgICAgIHhmb3JtT3AgPT0gVEpUcmFuc2Zvcm0uT1BfUk9UOTAgfHwKKyAgICAgICAgICAgIHhmb3JtT3AgPT0gVEpUcmFuc2Zvcm0uT1BfUk9UMjcwKSB7CisgICAgICAgICAgX3cgPSBoOyAgX2ggPSB3OyAgX3RpbGV3ID0gdGlsZWg7ICBfdGlsZWggPSB0aWxldzsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgoeGZvcm1PcHQgJiBUSlRyYW5zZm9ybS5PUFRfR1JBWSkgIT0gMCkKKyAgICAgICAgICBfc3Vic2FtcCA9IFRKLlNBTVBfR1JBWTsKKyAgICAgICAgaWYgKHhmb3JtT3AgPT0gVEpUcmFuc2Zvcm0uT1BfSEZMSVAgfHwKKyAgICAgICAgICAgIHhmb3JtT3AgPT0gVEpUcmFuc2Zvcm0uT1BfUk9UMTgwKQorICAgICAgICAgIF93ID0gX3cgLSAoX3cgJSBUSi5nZXRNQ1VXaWR0aChfc3Vic2FtcCkpOworICAgICAgICBpZiAoeGZvcm1PcCA9PSBUSlRyYW5zZm9ybS5PUF9WRkxJUCB8fAorICAgICAgICAgICAgeGZvcm1PcCA9PSBUSlRyYW5zZm9ybS5PUF9ST1QxODApCisgICAgICAgICAgX2ggPSBfaCAtIChfaCAlIFRKLmdldE1DVUhlaWdodChfc3Vic2FtcCkpOworICAgICAgICBpZiAoeGZvcm1PcCA9PSBUSlRyYW5zZm9ybS5PUF9UUkFOU1ZFUlNFIHx8CisgICAgICAgICAgICB4Zm9ybU9wID09IFRKVHJhbnNmb3JtLk9QX1JPVDkwKQorICAgICAgICAgIF93ID0gX3cgLSAoX3cgJSBUSi5nZXRNQ1VIZWlnaHQoX3N1YnNhbXApKTsKKyAgICAgICAgaWYgKHhmb3JtT3AgPT0gVEpUcmFuc2Zvcm0uT1BfVFJBTlNWRVJTRSB8fAorICAgICAgICAgICAgeGZvcm1PcCA9PSBUSlRyYW5zZm9ybS5PUF9ST1QyNzApCisgICAgICAgICAgX2ggPSBfaCAtIChfaCAlIFRKLmdldE1DVVdpZHRoKF9zdWJzYW1wKSk7CisgICAgICAgIF9udGlsZXN3ID0gKF93ICsgX3RpbGV3IC0gMSkgLyBfdGlsZXc7CisgICAgICAgIF9udGlsZXNoID0gKF9oICsgX3RpbGVoIC0gMSkgLyBfdGlsZWg7CisKKyAgICAgICAgVEpUcmFuc2Zvcm1bXSB0ID0gbmV3IFRKVHJhbnNmb3JtW19udGlsZXN3ICogX250aWxlc2hdOworICAgICAgICBqcGVnQnVmID0gbmV3IGJ5dGVbX250aWxlc3cgKiBfbnRpbGVzaF1bVEouYnVmU2l6ZShfdGlsZXcsIF90aWxlaCwgc3Vic2FtcCldOworCisgICAgICAgIGZvciAoeSA9IDAsIHRpbGUgPSAwOyB5IDwgX2g7IHkgKz0gX3RpbGVoKSB7CisgICAgICAgICAgZm9yICh4ID0gMDsgeCA8IF93OyB4ICs9IF90aWxldywgdGlsZSsrKSB7CisgICAgICAgICAgICB0W3RpbGVdID0gbmV3IFRKVHJhbnNmb3JtKCk7CisgICAgICAgICAgICB0W3RpbGVdLndpZHRoID0gTWF0aC5taW4oX3RpbGV3LCBfdyAtIHgpOworICAgICAgICAgICAgdFt0aWxlXS5oZWlnaHQgPSBNYXRoLm1pbihfdGlsZWgsIF9oIC0geSk7CisgICAgICAgICAgICB0W3RpbGVdLnggPSB4OworICAgICAgICAgICAgdFt0aWxlXS55ID0geTsKKyAgICAgICAgICAgIHRbdGlsZV0ub3AgPSB4Zm9ybU9wOworICAgICAgICAgICAgdFt0aWxlXS5vcHRpb25zID0geGZvcm1PcHQgfCBUSlRyYW5zZm9ybS5PUFRfVFJJTTsKKyAgICAgICAgICAgIGlmICgodFt0aWxlXS5vcHRpb25zICYgVEpUcmFuc2Zvcm0uT1BUX05PT1VUUFVUKSAhPSAwICYmCisgICAgICAgICAgICAgICAganBlZ0J1Zlt0aWxlXSAhPSBudWxsKQorICAgICAgICAgICAgICBqcGVnQnVmW3RpbGVdID0gbnVsbDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBzdGFydCA9IGdldFRpbWUoKTsKKyAgICAgICAgdGp0LnRyYW5zZm9ybShqcGVnQnVmLCB0LCBmbGFncyk7CisgICAgICAgIGpwZWdTaXplID0gdGp0LmdldFRyYW5zZm9ybWVkU2l6ZXMoKTsKKyAgICAgICAgZWxhcHNlZCA9IGdldFRpbWUoKSAtIHN0YXJ0OworCisgICAgICAgIHQgPSBudWxsOworCisgICAgICAgIGZvciAodGlsZSA9IDAsIHRvdGFsSnBlZ1NpemUgPSAwOyB0aWxlIDwgX250aWxlc3cgKiBfbnRpbGVzaDsgdGlsZSsrKQorICAgICAgICAgIHRvdGFsSnBlZ1NpemUgKz0ganBlZ1NpemVbdGlsZV07CisKKyAgICAgICAgaWYgKHF1aWV0ICE9IDApIHsKKyAgICAgICAgICBTeXN0ZW0ub3V0LmZvcm1hdCgiJXMlYyVzJWMiLAorICAgICAgICAgICAgc2lnRmlnKChkb3VibGUpKHcgKiBoKSAvIDEwMDAwMDAuIC8gZWxhcHNlZCwgNCksCisgICAgICAgICAgICBxdWlldCA9PSAyID8gJ1xuJyA6ICdcdCcsCisgICAgICAgICAgICBzaWdGaWcoKGRvdWJsZSkodyAqIGggKiBwcykgLyAoZG91YmxlKXRvdGFsSnBlZ1NpemUsIDQpLAorICAgICAgICAgICAgcXVpZXQgPT0gMiA/ICdcbicgOiAnXHQnKTsKKyAgICAgICAgfSBlbHNlIGlmIChxdWlldCA9PSAwKSB7CisgICAgICAgICAgU3lzdGVtLm91dC5mb3JtYXQoIlgtLT4gRnJhbWUgcmF0ZTogICAgICAgICAgICVmIGZwc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLjAgLyBlbGFwc2VkKTsKKyAgICAgICAgICBTeXN0ZW0ub3V0LmZvcm1hdCgiICAgICBPdXRwdXQgaW1hZ2Ugc2l6ZTogICAgJWQgYnl0ZXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxKcGVnU2l6ZSk7CisgICAgICAgICAgU3lzdGVtLm91dC5mb3JtYXQoIiAgICAgQ29tcHJlc3Npb24gcmF0aW86ICAgICVmOjFcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSkodyAqIGggKiBwcykgLyAoZG91YmxlKXRvdGFsSnBlZ1NpemUpOworICAgICAgICAgIFN5c3RlbS5vdXQuZm9ybWF0KCIgICAgIFNvdXJjZSB0aHJvdWdocHV0OiAgICAlZiBNZWdhcGl4ZWxzL3NlY1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlKSh3ICogaCkgLyAxMDAwMDAwLiAvIGVsYXBzZWQpOworICAgICAgICAgIFN5c3RlbS5vdXQuZm9ybWF0KCIgICAgIE91dHB1dCBiaXQgc3RyZWFtOiAgICAlZiBNZWdhYml0cy9zZWNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSl0b3RhbEpwZWdTaXplICogOC4gLyAxMDAwMDAwLiAvIGVsYXBzZWQpOworICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICBpZiAocXVpZXQgPT0gMSkKKyAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJOL0FcdE4vQVx0Iik7CisgICAgICAgIGpwZWdCdWYgPSBuZXcgYnl0ZVsxXVtUSi5idWZTaXplKF90aWxldywgX3RpbGVoLCBzdWJzYW1wKV07CisgICAgICAgIGpwZWdTaXplID0gbmV3IGludFsxXTsKKyAgICAgICAganBlZ1NpemVbMF0gPSBzcmNTaXplOworICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KHNyY0J1ZiwgMCwganBlZ0J1ZlswXSwgMCwgc3JjU2l6ZSk7CisgICAgICB9CisKKyAgICAgIGlmICh3ID09IHRpbGV3KQorICAgICAgICBfdGlsZXcgPSBfdzsKKyAgICAgIGlmIChoID09IHRpbGVoKQorICAgICAgICBfdGlsZWggPSBfaDsKKyAgICAgIGlmICgoeGZvcm1PcHQgJiBUSlRyYW5zZm9ybS5PUFRfTk9PVVRQVVQpID09IDApCisgICAgICAgIGRlY29tcFRlc3QobnVsbCwganBlZ0J1ZiwganBlZ1NpemUsIG51bGwsIF93LCBfaCwgX3N1YnNhbXAsIDAsCisgICAgICAgICAgICAgICAgICAgZmlsZU5hbWUsIF90aWxldywgX3RpbGVoKTsKKyAgICAgIGVsc2UgaWYgKHF1aWV0ID09IDEpCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTi9BIik7CisKKyAgICAgIGpwZWdCdWYgPSBudWxsOworICAgICAganBlZ1NpemUgPSBudWxsOworCisgICAgICBpZiAodGlsZXcgPT0gdyAmJiB0aWxlaCA9PSBoKSBicmVhazsKKyAgICB9CisgIH0KKworCisgIHN0YXRpYyB2b2lkIHVzYWdlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgaW50IGk7CisgICAgVEpTY2FsaW5nRmFjdG9yW10gc2NhbGluZ0ZhY3RvcnMgPSBUSi5nZXRTY2FsaW5nRmFjdG9ycygpOworICAgIGludCBuc2YgPSBzY2FsaW5nRmFjdG9ycy5sZW5ndGg7CisgICAgU3RyaW5nIGNsYXNzTmFtZSA9IG5ldyBUSkJlbmNoKCkuZ2V0Q2xhc3MoKS5nZXROYW1lKCk7CisKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuVVNBR0U6IGphdmEgIiArIGNsYXNzTmFtZSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICAgICAgPElucHV0ZmlsZSAoQk1QKT4gPFF1YWxpdHk+IFtvcHRpb25zXVxuIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICAgICAgamF2YSAiICsgY2xhc3NOYW1lKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgICA8SW5wdXRmaWxlIChKUEcpPiBbb3B0aW9uc11cbiIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiT3B0aW9uczpcbiIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLWFsbG9jID0gRHluYW1pY2FsbHkgYWxsb2NhdGUgSlBFRyBpbWFnZSBidWZmZXJzIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCItYm90dG9tdXAgPSBUZXN0IGJvdHRvbS11cCBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCItdGlsZSA9IFRlc3QgcGVyZm9ybWFuY2Ugb2YgdGhlIGNvZGVjIHdoZW4gdGhlIGltYWdlIGlzIGVuY29kZWQgYXMgc2VwYXJhdGUiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgdGlsZXMgb2YgdmFyeWluZyBzaXplcy4iKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi1mb3JjZW1teCwgLWZvcmNlc3NlLCAtZm9yY2Vzc2UyLCAtZm9yY2Vzc2UzID0iKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgRm9yY2UgTU1YLCBTU0UsIFNTRTIsIG9yIFNTRTMgY29kZSBwYXRocyBpbiB0aGUgdW5kZXJseWluZyBjb2RlYyIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLXJnYiwgLWJnciwgLXJnYngsIC1iZ3J4LCAteGJnciwgLXhyZ2IgPSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgICBUZXN0IHRoZSBzcGVjaWZpZWQgY29sb3IgY29udmVyc2lvbiBwYXRoIGluIHRoZSBjb2RlYyAoZGVmYXVsdDogQkdSKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLWZhc3R1cHNhbXBsZSA9IFVzZSB0aGUgZmFzdGVzdCBjaHJvbWluYW5jZSB1cHNhbXBsaW5nIGFsZ29yaXRobSBhdmFpbGFibGUgaW4iKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgdGhlIHVuZGVybHlpbmcgY29kZWMiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi1mYXN0ZGN0ID0gVXNlIHRoZSBmYXN0ZXN0IERDVC9JRENUIGFsZ29yaXRobXMgYXZhaWxhYmxlIGluIHRoZSB1bmRlcmx5aW5nIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICAgIGNvZGVjIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCItYWNjdXJhdGVkY3QgPSBVc2UgdGhlIG1vc3QgYWNjdXJhdGUgRENUL0lEQ1QgYWxnb3JpdGhtcyBhdmFpbGFibGUgaW4gdGhlIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICAgIHVuZGVybHlpbmcgY29kZWMiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi1zdWJzYW1wIDxzPiA9IFdoZW4gdGVzdGluZyBKUEVHIGNvbXByZXNzaW9uLCB0aGlzIG9wdGlvbiBzcGVjaWZpZXMgdGhlIGxldmVsIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICAgIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nIHRvIHVzZSAoPHM+ID0gNDQ0LCA0MjIsIDQ0MCwgNDIwLCBvciBHUkFZKS4iKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgVGhlIGRlZmF1bHQgaXMgdG8gdGVzdCBHcmF5c2NhbGUsIDQ6MjowLCA0OjI6MiwgYW5kIDQ6NDo0IGluIHNlcXVlbmNlLiIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLXF1aWV0ID0gT3V0cHV0IHJlc3VsdHMgaW4gdGFidWxhciByYXRoZXIgdGhhbiB2ZXJib3NlIGZvcm1hdCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLXl1dmVuY29kZSA9IEVuY29kZSBSR0IgaW5wdXQgYXMgcGxhbmFyIFlVViByYXRoZXIgdGhhbiBjb21wcmVzc2luZyBhcyBKUEVHIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIteXV2ZGVjb2RlID0gRGVjb2RlIEpQRUcgaW1hZ2UgdG8gcGxhbmFyIFlVViByYXRoZXIgdGhhbiBSR0IiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi1zY2FsZSBNL04gPSBzY2FsZSBkb3duIHRoZSB3aWR0aC9oZWlnaHQgb2YgdGhlIGRlY29tcHJlc3NlZCBKUEVHIGltYWdlIGJ5IGEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50ICAoIiAgICAgZmFjdG9yIG9mIE0vTiAoTS9OID0gIik7CisgICAgZm9yIChpID0gMDsgaSA8IG5zZjsgaSsrKSB7CisgICAgICBTeXN0ZW0ub3V0LmZvcm1hdCgiJWQvJWQiLCBzY2FsaW5nRmFjdG9yc1tpXS5nZXROdW0oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxpbmdGYWN0b3JzW2ldLmdldERlbm9tKCkpOworICAgICAgaWYgKG5zZiA9PSAyICYmIGkgIT0gbnNmIC0gMSkKKyAgICAgICAgU3lzdGVtLm91dC5wcmludCgiIG9yICIpOworICAgICAgZWxzZSBpZiAobnNmID4gMikgeworICAgICAgICBpZiAoaSAhPSBuc2YgLSAxKQorICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIiwgIik7CisgICAgICAgIGlmIChpID09IG5zZiAtIDIpCisgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgib3IgIik7CisgICAgICB9CisgICAgICBpZiAoaSAlIDggPT0gMCAmJiBpICE9IDApCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIlxuICAgICAiKTsKKyAgICB9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCItaGZsaXAsIC12ZmxpcCwgLXRyYW5zcG9zZSwgLXRyYW5zdmVyc2UsIC1yb3Q5MCwgLXJvdDE4MCwgLXJvdDI3MCA9Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICAgIFBlcmZvcm0gdGhlIGNvcnJlc3BvbmRpbmcgbG9zc2xlc3MgdHJhbnNmb3JtIHByaW9yIHRvIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICAgIGRlY29tcHJlc3Npb24gKHRoZXNlIG9wdGlvbnMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi1ncmF5c2NhbGUgPSBQZXJmb3JtIGxvc3NsZXNzIGdyYXlzY2FsZSBjb252ZXJzaW9uIHByaW9yIHRvIGRlY29tcHJlc3Npb24iKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgdGVzdCAoY2FuIGJlIGNvbWJpbmVkIHdpdGggdGhlIG90aGVyIHRyYW5zZm9ybXMgYWJvdmUpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCItYmVuY2h0aW1lIDx0PiA9IFJ1biBlYWNoIGJlbmNobWFyayBmb3IgYXQgbGVhc3QgPHQ+IHNlY29uZHMgKGRlZmF1bHQgPSA1LjApXG4iKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk5PVEU6ICBJZiB0aGUgcXVhbGl0eSBpcyBzcGVjaWZpZWQgYXMgYSByYW5nZSAoZS5nLiA5MC0xMDApLCBhIHNlcGFyYXRlIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0ZXN0IHdpbGwgYmUgcGVyZm9ybWVkIGZvciBhbGwgcXVhbGl0eSB2YWx1ZXMgaW4gdGhlIHJhbmdlLlxuIik7CisgICAgU3lzdGVtLmV4aXQoMSk7CisgIH0KKworCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3YpIHsKKyAgICBieXRlW10gc3JjQnVmID0gbnVsbDsgIGludCB3ID0gMCwgaCA9IDA7CisgICAgaW50IG1pblF1YWwgPSAtMSwgbWF4UXVhbCA9IC0xOworICAgIGludCBtaW5BcmcgPSAxOyAgaW50IHJldHZhbCA9IDA7CisgICAgaW50IHN1YnNhbXAgPSAtMTsKKworICAgIHRyeSB7CisKKyAgICAgIGlmIChhcmd2Lmxlbmd0aCA8IG1pbkFyZykKKyAgICAgICAgdXNhZ2UoKTsKKworICAgICAgU3RyaW5nIHRlbXBTdHIgPSBhcmd2WzBdLnRvTG93ZXJDYXNlKCk7CisgICAgICBpZiAodGVtcFN0ci5lbmRzV2l0aCgiLmpwZyIpIHx8IHRlbXBTdHIuZW5kc1dpdGgoIi5qcGVnIikpCisgICAgICAgIGRlY29tcE9ubHkgPSB0cnVlOworCisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIpOworCisgICAgICBpZiAoYXJndi5sZW5ndGggPiBtaW5BcmcpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IG1pbkFyZzsgaSA8IGFyZ3YubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICBpZiAoYXJndltpXS5lcXVhbHNJZ25vcmVDYXNlKCIteXV2ZW5jb2RlIikpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdGluZyBZVVYgcGxhbmFyIGVuY29kaW5nXG4iKTsKKyAgICAgICAgICAgIHl1diA9IFlVVkVOQ09ERTsgIG1heFF1YWwgPSBtaW5RdWFsID0gMTAwOworICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoYXJndltpXS5lcXVhbHNJZ25vcmVDYXNlKCIteXV2ZGVjb2RlIikpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdGluZyBZVVYgcGxhbmFyIGRlY29kaW5nXG4iKTsKKyAgICAgICAgICAgIHl1diA9IFlVVkRFQ09ERTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgKCFkZWNvbXBPbmx5ICYmIHl1diAhPSBZVVZFTkNPREUpIHsKKyAgICAgICAgbWluQXJnID0gMjsKKyAgICAgICAgaWYgKGFyZ3YubGVuZ3RoIDwgbWluQXJnKQorICAgICAgICAgIHVzYWdlKCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgbWluUXVhbCA9IEludGVnZXIucGFyc2VJbnQoYXJndlsxXSk7CisgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7fQorICAgICAgICBpZiAobWluUXVhbCA8IDEgfHwgbWluUXVhbCA+IDEwMCkKKyAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJRdWFsaXR5IG11c3QgYmUgYmV0d2VlbiAxIGFuZCAxMDAuIik7CisgICAgICAgIGludCBkYXNoSW5kZXggPSBhcmd2WzFdLmluZGV4T2YoJy0nKTsKKyAgICAgICAgaWYgKGRhc2hJbmRleCA+IDAgJiYgYXJndlsxXS5sZW5ndGgoKSA+IGRhc2hJbmRleCArIDEpIHsKKyAgICAgICAgICB0cnkgeworICAgICAgICAgICAgbWF4UXVhbCA9IEludGVnZXIucGFyc2VJbnQoYXJndlsxXS5zdWJzdHJpbmcoZGFzaEluZGV4ICsgMSkpOworICAgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7fQorICAgICAgICB9CisgICAgICAgIGlmIChtYXhRdWFsIDwgMSB8fCBtYXhRdWFsID4gMTAwKQorICAgICAgICAgIG1heFF1YWwgPSBtaW5RdWFsOworICAgICAgfQorCisgICAgICBpZiAoYXJndi5sZW5ndGggPiBtaW5BcmcpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IG1pbkFyZzsgaSA8IGFyZ3YubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICBpZiAoYXJndltpXS5lcXVhbHNJZ25vcmVDYXNlKCItdGlsZSIpKSB7CisgICAgICAgICAgICBkb1RpbGUgPSB0cnVlOyAgeGZvcm1PcHQgfD0gVEpUcmFuc2Zvcm0uT1BUX0NST1A7CisgICAgICAgICAgfQorICAgICAgICAgIGlmIChhcmd2W2ldLmVxdWFsc0lnbm9yZUNhc2UoIi1mb3JjZXNzZTMiKSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGb3JjaW5nIFNTRTMgY29kZVxuIik7CisgICAgICAgICAgICBmbGFncyB8PSBUSi5GTEFHX0ZPUkNFU1NFMzsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKGFyZ3ZbaV0uZXF1YWxzSWdub3JlQ2FzZSgiLWZvcmNlc3NlMiIpKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZvcmNpbmcgU1NFMiBjb2RlXG4iKTsKKyAgICAgICAgICAgIGZsYWdzIHw9IFRKLkZMQUdfRk9SQ0VTU0UyOworICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoYXJndltpXS5lcXVhbHNJZ25vcmVDYXNlKCItZm9yY2Vzc2UiKSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGb3JjaW5nIFNTRSBjb2RlXG4iKTsKKyAgICAgICAgICAgIGZsYWdzIHw9IFRKLkZMQUdfRk9SQ0VTU0U7CisgICAgICAgICAgfQorICAgICAgICAgIGlmIChhcmd2W2ldLmVxdWFsc0lnbm9yZUNhc2UoIi1mb3JjZW1teCIpKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZvcmNpbmcgTU1YIGNvZGVcbiIpOworICAgICAgICAgICAgZmxhZ3MgfD0gVEouRkxBR19GT1JDRU1NWDsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKGFyZ3ZbaV0uZXF1YWxzSWdub3JlQ2FzZSgiLWZhc3R1cHNhbXBsZSIpKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVzaW5nIGZhc3QgdXBzYW1wbGluZyBjb2RlXG4iKTsKKyAgICAgICAgICAgIGZsYWdzIHw9IFRKLkZMQUdfRkFTVFVQU0FNUExFOworICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoYXJndltpXS5lcXVhbHNJZ25vcmVDYXNlKCItZmFzdGRjdCIpKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVzaW5nIGZhc3Rlc3QgRENUL0lEQ1QgYWxnb3JpdGhtXG4iKTsKKyAgICAgICAgICAgIGZsYWdzIHw9IFRKLkZMQUdfRkFTVERDVDsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKGFyZ3ZbaV0uZXF1YWxzSWdub3JlQ2FzZSgiLWFjY3VyYXRlZGN0IikpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVXNpbmcgbW9zdCBhY2N1cmF0ZSBEQ1QvSURDVCBhbGdvcml0aG1cbiIpOworICAgICAgICAgICAgZmxhZ3MgfD0gVEouRkxBR19BQ0NVUkFURURDVDsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKGFyZ3ZbaV0uZXF1YWxzSWdub3JlQ2FzZSgiLXJnYiIpKQorICAgICAgICAgICAgcGYgPSBUSi5QRl9SR0I7CisgICAgICAgICAgaWYgKGFyZ3ZbaV0uZXF1YWxzSWdub3JlQ2FzZSgiLXJnYngiKSkKKyAgICAgICAgICAgIHBmID0gVEouUEZfUkdCWDsKKyAgICAgICAgICBpZiAoYXJndltpXS5lcXVhbHNJZ25vcmVDYXNlKCItYmdyIikpCisgICAgICAgICAgICBwZiA9IFRKLlBGX0JHUjsKKyAgICAgICAgICBpZiAoYXJndltpXS5lcXVhbHNJZ25vcmVDYXNlKCItYmdyeCIpKQorICAgICAgICAgICAgcGYgPSBUSi5QRl9CR1JYOworICAgICAgICAgIGlmIChhcmd2W2ldLmVxdWFsc0lnbm9yZUNhc2UoIi14YmdyIikpCisgICAgICAgICAgICBwZiA9IFRKLlBGX1hCR1I7CisgICAgICAgICAgaWYgKGFyZ3ZbaV0uZXF1YWxzSWdub3JlQ2FzZSgiLXhyZ2IiKSkKKyAgICAgICAgICAgIHBmID0gVEouUEZfWFJHQjsKKyAgICAgICAgICBpZiAoYXJndltpXS5lcXVhbHNJZ25vcmVDYXNlKCItYm90dG9tdXAiKSkKKyAgICAgICAgICAgIGZsYWdzIHw9IFRKLkZMQUdfQk9UVE9NVVA7CisgICAgICAgICAgaWYgKGFyZ3ZbaV0uZXF1YWxzSWdub3JlQ2FzZSgiLXF1aWV0IikpCisgICAgICAgICAgICBxdWlldCA9IDE7CisgICAgICAgICAgaWYgKGFyZ3ZbaV0uZXF1YWxzSWdub3JlQ2FzZSgiLXFxIikpCisgICAgICAgICAgICBxdWlldCA9IDI7CisgICAgICAgICAgaWYgKGFyZ3ZbaV0uZXF1YWxzSWdub3JlQ2FzZSgiLXNjYWxlIikgJiYgaSA8IGFyZ3YubGVuZ3RoIC0gMSkgeworICAgICAgICAgICAgaW50IHRlbXAxID0gMCwgdGVtcDIgPSAwOworICAgICAgICAgICAgYm9vbGVhbiBtYXRjaCA9IGZhbHNlLCBzY2FubmVkID0gdHJ1ZTsKKyAgICAgICAgICAgIFNjYW5uZXIgc2Nhbm5lciA9IG5ldyBTY2FubmVyKGFyZ3ZbKytpXSkudXNlRGVsaW1pdGVyKCIvIik7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICB0ZW1wMSA9IHNjYW5uZXIubmV4dEludCgpOworICAgICAgICAgICAgICB0ZW1wMiA9IHNjYW5uZXIubmV4dEludCgpOworICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkge30KKyAgICAgICAgICAgIGlmICh0ZW1wMiA8PSAwKSB0ZW1wMiA9IDE7CisgICAgICAgICAgICBpZiAodGVtcDEgPiAwKSB7CisgICAgICAgICAgICAgIFRKU2NhbGluZ0ZhY3RvcltdIHNjYWxpbmdGYWN0b3JzID0gVEouZ2V0U2NhbGluZ0ZhY3RvcnMoKTsKKyAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzY2FsaW5nRmFjdG9ycy5sZW5ndGg7IGorKykgeworICAgICAgICAgICAgICAgIGlmICgoZG91YmxlKXRlbXAxIC8gKGRvdWJsZSl0ZW1wMiA9PQorICAgICAgICAgICAgICAgICAgICAoZG91YmxlKXNjYWxpbmdGYWN0b3JzW2pdLmdldE51bSgpIC8KKyAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSlzY2FsaW5nRmFjdG9yc1tqXS5nZXREZW5vbSgpKSB7CisgICAgICAgICAgICAgICAgICBzZiA9IHNjYWxpbmdGYWN0b3JzW2pdOworICAgICAgICAgICAgICAgICAgbWF0Y2ggPSB0cnVlOyAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBpZiAoIW1hdGNoKSB1c2FnZSgpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgIHVzYWdlKCk7CisgICAgICAgICAgfQorICAgICAgICAgIGlmIChhcmd2W2ldLmVxdWFsc0lnbm9yZUNhc2UoIi1oZmxpcCIpKQorICAgICAgICAgICAgeGZvcm1PcCA9IFRKVHJhbnNmb3JtLk9QX0hGTElQOworICAgICAgICAgIGlmIChhcmd2W2ldLmVxdWFsc0lnbm9yZUNhc2UoIi12ZmxpcCIpKQorICAgICAgICAgICAgeGZvcm1PcCA9IFRKVHJhbnNmb3JtLk9QX1ZGTElQOworICAgICAgICAgIGlmIChhcmd2W2ldLmVxdWFsc0lnbm9yZUNhc2UoIi10cmFuc3Bvc2UiKSkKKyAgICAgICAgICAgIHhmb3JtT3AgPSBUSlRyYW5zZm9ybS5PUF9UUkFOU1BPU0U7CisgICAgICAgICAgaWYgKGFyZ3ZbaV0uZXF1YWxzSWdub3JlQ2FzZSgiLXRyYW5zdmVyc2UiKSkKKyAgICAgICAgICAgIHhmb3JtT3AgPSBUSlRyYW5zZm9ybS5PUF9UUkFOU1ZFUlNFOworICAgICAgICAgIGlmIChhcmd2W2ldLmVxdWFsc0lnbm9yZUNhc2UoIi1yb3Q5MCIpKQorICAgICAgICAgICAgeGZvcm1PcCA9IFRKVHJhbnNmb3JtLk9QX1JPVDkwOworICAgICAgICAgIGlmIChhcmd2W2ldLmVxdWFsc0lnbm9yZUNhc2UoIi1yb3QxODAiKSkKKyAgICAgICAgICAgIHhmb3JtT3AgPSBUSlRyYW5zZm9ybS5PUF9ST1QxODA7CisgICAgICAgICAgaWYgKGFyZ3ZbaV0uZXF1YWxzSWdub3JlQ2FzZSgiLXJvdDI3MCIpKQorICAgICAgICAgICAgeGZvcm1PcCA9IFRKVHJhbnNmb3JtLk9QX1JPVDI3MDsKKyAgICAgICAgICBpZiAoYXJndltpXS5lcXVhbHNJZ25vcmVDYXNlKCItZ3JheXNjYWxlIikpCisgICAgICAgICAgICB4Zm9ybU9wdCB8PSBUSlRyYW5zZm9ybS5PUFRfR1JBWTsKKyAgICAgICAgICBpZiAoYXJndltpXS5lcXVhbHNJZ25vcmVDYXNlKCItbm9vdXRwdXQiKSkKKyAgICAgICAgICAgIHhmb3JtT3B0IHw9IFRKVHJhbnNmb3JtLk9QVF9OT09VVFBVVDsKKyAgICAgICAgICBpZiAoYXJndltpXS5lcXVhbHNJZ25vcmVDYXNlKCItYmVuY2h0aW1lIikgJiYgaSA8IGFyZ3YubGVuZ3RoIC0gMSkgeworICAgICAgICAgICAgZG91YmxlIHRlbXAgPSAtMTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgIHRlbXAgPSBEb3VibGUucGFyc2VEb3VibGUoYXJndlsrK2ldKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7fQorICAgICAgICAgICAgaWYgKHRlbXAgPiAwLjApCisgICAgICAgICAgICAgIGJlbmNoVGltZSA9IHRlbXA7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHVzYWdlKCk7CisgICAgICAgICAgfQorICAgICAgICAgIGlmIChhcmd2W2ldLmVxdWFsc0lnbm9yZUNhc2UoIi1zdWJzYW1wIikgJiYgaSA8IGFyZ3YubGVuZ3RoIC0gMSkgeworICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgaWYgKGFyZ3ZbaV0udG9VcHBlckNhc2UoKS5zdGFydHNXaXRoKCJHIikpCisgICAgICAgICAgICAgIHN1YnNhbXAgPSBUSi5TQU1QX0dSQVk7CisgICAgICAgICAgICBlbHNlIGlmIChhcmd2W2ldLmVxdWFscygiNDQ0IikpCisgICAgICAgICAgICAgIHN1YnNhbXAgPSBUSi5TQU1QXzQ0NDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGFyZ3ZbaV0uZXF1YWxzKCI0MjIiKSkKKyAgICAgICAgICAgICAgc3Vic2FtcCA9IFRKLlNBTVBfNDIyOworICAgICAgICAgICAgZWxzZSBpZiAoYXJndltpXS5lcXVhbHMoIjQ0MCIpKQorICAgICAgICAgICAgICBzdWJzYW1wID0gVEouU0FNUF80NDA7CisgICAgICAgICAgICBlbHNlIGlmIChhcmd2W2ldLmVxdWFscygiNDIwIikpCisgICAgICAgICAgICAgIHN1YnNhbXAgPSBUSi5TQU1QXzQyMDsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKGFyZ3ZbaV0uZXF1YWxzSWdub3JlQ2FzZSgiLT8iKSkKKyAgICAgICAgICAgIHVzYWdlKCk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgKHNmID09IG51bGwpCisgICAgICAgIHNmID0gbmV3IFRKU2NhbGluZ0ZhY3RvcigxLCAxKTsKKworICAgICAgaWYgKChzZi5nZXROdW0oKSAhPSAxIHx8IHNmLmdldERlbm9tKCkgIT0gMSkgJiYgZG9UaWxlKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGlzYWJsaW5nIHRpbGVkIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gdGVzdHMsIGJlY2F1c2UgdGhvc2UgdGVzdHMgZG8gbm90Iik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigid29yayB3aGVuIHNjYWxlZCBkZWNvbXByZXNzaW9uIGlzIGVuYWJsZWQuIik7CisgICAgICAgIGRvVGlsZSA9IGZhbHNlOworICAgICAgfQorCisgICAgICBpZiAoeXV2ICE9IDAgJiYgZG9UaWxlKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGlzYWJsaW5nIHRpbGVkIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gdGVzdHMsIGJlY2F1c2UgdGhvc2UgdGVzdHMgZG8gbm90Iik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigid29yayB3aGVuIFlVViBlbmNvZGluZyBvciBkZWNvZGluZyBpcyBlbmFibGVkLlxuIik7CisgICAgICAgIGRvVGlsZSA9IGZhbHNlOworICAgICAgfQorCisgICAgICBpZiAoIWRlY29tcE9ubHkpIHsKKyAgICAgICAgaW50W10gd2lkdGggPSBuZXcgaW50WzFdLCBoZWlnaHQgPSBuZXcgaW50WzFdOworICAgICAgICBzcmNCdWYgPSBsb2FkSW1hZ2UoYXJndlswXSwgd2lkdGgsIGhlaWdodCwgcGYpOworICAgICAgICB3ID0gd2lkdGhbMF07ICBoID0gaGVpZ2h0WzBdOworICAgICAgICBpbnQgaW5kZXggPSAtMTsKKyAgICAgICAgaWYgKChpbmRleCA9IGFyZ3ZbMF0ubGFzdEluZGV4T2YoJy4nKSkgPj0gMCkKKyAgICAgICAgICBhcmd2WzBdID0gYXJndlswXS5zdWJzdHJpbmcoMCwgaW5kZXgpOworICAgICAgfQorCisgICAgICBpZiAocXVpZXQgPT0gMSAmJiAhZGVjb21wT25seSkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFsbCBwZXJmb3JtYW5jZSB2YWx1ZXMgaW4gTXBpeGVscy9zZWNcbiIpOworICAgICAgICBTeXN0ZW0ub3V0LmZvcm1hdCgiQml0bWFwXHRCaXRtYXBcdEpQRUdcdEpQRUdcdCVzICVzIFx0Q29tcFx0Q29tcFx0RGVjb21wXG4iLAorICAgICAgICAgIChkb1RpbGUgPyAiVGlsZSAiIDogIkltYWdlIiksIChkb1RpbGUgPyAiVGlsZSAiIDogIkltYWdlIikpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZvcm1hdFx0T3JkZXJcdFN1YnNhbXBcdFF1YWxcdFdpZHRoIEhlaWdodFx0UGVyZiBcdFJhdGlvXHRQZXJmXG4iKTsKKyAgICAgIH0KKworICAgICAgaWYgKGRlY29tcE9ubHkpIHsKKyAgICAgICAgZG9EZWNvbXBUZXN0KGFyZ3ZbMF0pOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIpOworICAgICAgICBTeXN0ZW0uZXhpdChyZXR2YWwpOworICAgICAgfQorCisgICAgICBTeXN0ZW0uZ2MoKTsKKyAgICAgIGlmIChzdWJzYW1wID49IDAgJiYgc3Vic2FtcCA8IFRKLk5VTVNBTVApIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IG1heFF1YWw7IGkgPj0gbWluUXVhbDsgaS0tKQorICAgICAgICAgIGRvVGVzdChzcmNCdWYsIHcsIGgsIHN1YnNhbXAsIGksIGFyZ3ZbMF0pOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IG1heFF1YWw7IGkgPj0gbWluUXVhbDsgaS0tKQorICAgICAgICAgIGRvVGVzdChzcmNCdWYsIHcsIGgsIFRKLlNBTVBfR1JBWSwgaSwgYXJndlswXSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIik7CisgICAgICAgIFN5c3RlbS5nYygpOworICAgICAgICBmb3IgKGludCBpID0gbWF4UXVhbDsgaSA+PSBtaW5RdWFsOyBpLS0pCisgICAgICAgICAgZG9UZXN0KHNyY0J1ZiwgdywgaCwgVEouU0FNUF80MjAsIGksIGFyZ3ZbMF0pOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIpOworICAgICAgICBTeXN0ZW0uZ2MoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IG1heFF1YWw7IGkgPj0gbWluUXVhbDsgaS0tKQorICAgICAgICAgIGRvVGVzdChzcmNCdWYsIHcsIGgsIFRKLlNBTVBfNDIyLCBpLCBhcmd2WzBdKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIiKTsKKyAgICAgICAgU3lzdGVtLmdjKCk7CisgICAgICAgIGZvciAoaW50IGkgPSBtYXhRdWFsOyBpID49IG1pblF1YWw7IGktLSkKKyAgICAgICAgICBkb1Rlc3Qoc3JjQnVmLCB3LCBoLCBUSi5TQU1QXzQ0NCwgaSwgYXJndlswXSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIik7CisgICAgICB9CisKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFUlJPUjogIiArIGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICByZXR2YWwgPSAtMTsKKyAgICB9CisKKyAgICBTeXN0ZW0uZXhpdChyZXR2YWwpOworICB9CisKK30KZGlmZiAtLWdpdCBhL2phdmEvVEpFeGFtcGxlLmphdmEgYi9qYXZhL1RKRXhhbXBsZS5qYXZhCmluZGV4IGU3MjY4OTIuLjFhZTM1MGEgMTAwNjQ0Ci0tLSBhL2phdmEvVEpFeGFtcGxlLmphdmEKKysrIGIvamF2YS9USkV4YW1wbGUuamF2YQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpMjAxMS0yMDEyIEQuIFIuIENvbW1hbmRlci4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpMjAxMS0yMDEyLCAyMDE0IEQuIFIuIENvbW1hbmRlci4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKQEAgLTUxLDEyICs1MSwxNSBAQAogICAgIFN5c3RlbS5vdXQucHJpbnRsbigiT3B0aW9uczpcbiIpOwogICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLXNjYWxlIE0vTiA9IGlmIHRoZSBpbnB1dCBpbWFnZSBpcyBhIEpQRUcgZmlsZSwgc2NhbGUgdGhlIHdpZHRoL2hlaWdodCBvZiB0aGUiKTsKICAgICBTeXN0ZW0ub3V0LnByaW50KCIgICAgICAgICAgICAgb3V0cHV0IGltYWdlIGJ5IGEgZmFjdG9yIG9mIE0vTiAoTS9OID0gIik7Ci0gICAgZm9yKGludCBpID0gMDsgaSA8IHNmLmxlbmd0aDsgaSsrKSB7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZi5sZW5ndGg7IGkrKykgewogICAgICAgU3lzdGVtLm91dC5wcmludChzZltpXS5nZXROdW0oKSArICIvIiArIHNmW2ldLmdldERlbm9tKCkpOwotICAgICAgaWYoc2YubGVuZ3RoID09IDIgJiYgaSAhPSBzZi5sZW5ndGggLSAxKSBTeXN0ZW0ub3V0LnByaW50KCIgb3IgIik7Ci0gICAgICBlbHNlIGlmKHNmLmxlbmd0aCA+IDIpIHsKLSAgICAgICAgaWYoaSAhPSBzZi5sZW5ndGggLSAxKSBTeXN0ZW0ub3V0LnByaW50KCIsICIpOwotICAgICAgICBpZihpID09IHNmLmxlbmd0aCAtIDIpIFN5c3RlbS5vdXQucHJpbnQoIm9yICIpOworICAgICAgaWYgKHNmLmxlbmd0aCA9PSAyICYmIGkgIT0gc2YubGVuZ3RoIC0gMSkKKyAgICAgICAgU3lzdGVtLm91dC5wcmludCgiIG9yICIpOworICAgICAgZWxzZSBpZiAoc2YubGVuZ3RoID4gMikgeworICAgICAgICBpZiAoaSAhPSBzZi5sZW5ndGggLSAxKQorICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIiwgIik7CisgICAgICAgIGlmIChpID09IHNmLmxlbmd0aCAtIDIpCisgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgib3IgIik7CiAgICAgICB9CiAgICAgfQogICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKVxuIik7CkBAIC05MCwxMyArOTMsMTQgQEAKICAgICBTeXN0ZW0uZXhpdCgxKTsKICAgfQogCi0gIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBzYW1wTmFtZVtdID0geworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBzYW1wTmFtZSA9IHsKICAgICAiNDo0OjQiLCAiNDoyOjIiLCAiNDoyOjAiLCAiR3JheXNjYWxlIiwgIjQ6NDowIgogICB9OwogCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmd2W10pIHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJndikgewogCi0gICAgQnVmZmVyZWRJbWFnZSBpbWcgPSBudWxsOyAgYnl0ZVtdIGJtcEJ1ZiA9IG51bGw7CisgICAgQnVmZmVyZWRJbWFnZSBpbWcgPSBudWxsOworICAgIGJ5dGVbXSBibXBCdWYgPSBudWxsOwogICAgIFRKVHJhbnNmb3JtIHhmb3JtID0gbmV3IFRKVHJhbnNmb3JtKCk7CiAgICAgaW50IGZsYWdzID0gMDsKIApAQCAtMTA0LDcgKzEwOCw3IEBACiAKICAgICAgIHNmID0gVEouZ2V0U2NhbGluZ0ZhY3RvcnMoKTsKIAotICAgICAgaWYoYXJndi5sZW5ndGggPCAyKSB7CisgICAgICBpZiAoYXJndi5sZW5ndGggPCAyKSB7CiAgICAgICAgIHVzYWdlKCk7CiAgICAgICB9CiAKQEAgLTExMywxMTkgKzExNywxMzQgQEAKICAgICAgIGludCBvdXRTdWJzYW1wID0gLTEsIG91dFF1YWwgPSA5NTsKICAgICAgIGJvb2xlYW4gZGlzcGxheSA9IGZhbHNlOwogCi0gICAgICBpZihhcmd2Lmxlbmd0aCA+IDEpIHsKLSAgICAgICAgZm9yKGludCBpID0gMTsgaSA8IGFyZ3YubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICBpZihhcmd2W2ldLmxlbmd0aCgpIDwgMikgY29udGludWU7Ci0gICAgICAgICAgaWYoYXJndltpXS5sZW5ndGgoKSA+IDIKLSAgICAgICAgICAgICYmIGFyZ3ZbaV0uc3Vic3RyaW5nKDAsIDMpLmVxdWFsc0lnbm9yZUNhc2UoIi1zYyIpKSB7CisgICAgICBpZiAoYXJndi5sZW5ndGggPiAxKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgYXJndi5sZW5ndGg7IGkrKykgeworICAgICAgICAgIGlmIChhcmd2W2ldLmxlbmd0aCgpIDwgMikKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIGlmIChhcmd2W2ldLmxlbmd0aCgpID4gMiAmJgorICAgICAgICAgICAgICBhcmd2W2ldLnN1YnN0cmluZygwLCAzKS5lcXVhbHNJZ25vcmVDYXNlKCItc2MiKSkgewogICAgICAgICAgICAgaW50IG1hdGNoID0gMDsKLSAgICAgICAgICAgIGlmKGkgPCBhcmd2Lmxlbmd0aCAtIDEpIHsKKyAgICAgICAgICAgIGlmIChpIDwgYXJndi5sZW5ndGggLSAxKSB7CiAgICAgICAgICAgICAgIFN0cmluZ1tdIHNjYWxlQXJnID0gYXJndlsrK2ldLnNwbGl0KCIvIik7Ci0gICAgICAgICAgICAgIGlmKHNjYWxlQXJnLmxlbmd0aCA9PSAyKSB7CisgICAgICAgICAgICAgIGlmIChzY2FsZUFyZy5sZW5ndGggPT0gMikgewogICAgICAgICAgICAgICAgIFRKU2NhbGluZ0ZhY3RvciB0ZW1wc2YgPQogICAgICAgICAgICAgICAgICAgbmV3IFRKU2NhbGluZ0ZhY3RvcihJbnRlZ2VyLnBhcnNlSW50KHNjYWxlQXJnWzBdKSwKLSAgICAgICAgICAgICAgICAgICAgSW50ZWdlci5wYXJzZUludChzY2FsZUFyZ1sxXSkpOwotICAgICAgICAgICAgICAgIGZvcihpbnQgaiA9IDA7IGogPCBzZi5sZW5ndGg7IGorKykgewotICAgICAgICAgICAgICAgICAgaWYodGVtcHNmLmVxdWFscyhzZltqXSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlci5wYXJzZUludChzY2FsZUFyZ1sxXSkpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgc2YubGVuZ3RoOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgIGlmICh0ZW1wc2YuZXF1YWxzKHNmW2pdKSkgewogICAgICAgICAgICAgICAgICAgICBzY2FsZUZhY3RvciA9IHNmW2pdOwotICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IDE7ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSAxOworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmKG1hdGNoICE9IDEpIHVzYWdlKCk7CisgICAgICAgICAgICBpZiAobWF0Y2ggIT0gMSkgdXNhZ2UoKTsKICAgICAgICAgICB9Ci0gICAgICAgICAgaWYoYXJndltpXS5lcXVhbHNJZ25vcmVDYXNlKCItaCIpIHx8IGFyZ3ZbaV0uZXF1YWxzSWdub3JlQ2FzZSgiLT8iKSkKKyAgICAgICAgICBpZiAoYXJndltpXS5lcXVhbHNJZ25vcmVDYXNlKCItaCIpIHx8IGFyZ3ZbaV0uZXF1YWxzSWdub3JlQ2FzZSgiLT8iKSkKICAgICAgICAgICAgIHVzYWdlKCk7Ci0gICAgICAgICAgaWYoYXJndltpXS5sZW5ndGgoKSA+IDIKLSAgICAgICAgICAgICYmIGFyZ3ZbaV0uc3Vic3RyaW5nKDAsIDMpLmVxdWFsc0lnbm9yZUNhc2UoIi1zYSIpKSB7Ci0gICAgICAgICAgICBpZihpIDwgYXJndi5sZW5ndGggLSAxKSB7CisgICAgICAgICAgaWYgKGFyZ3ZbaV0ubGVuZ3RoKCkgPiAyICYmCisgICAgICAgICAgICAgIGFyZ3ZbaV0uc3Vic3RyaW5nKDAsIDMpLmVxdWFsc0lnbm9yZUNhc2UoIi1zYSIpKSB7CisgICAgICAgICAgICBpZiAoaSA8IGFyZ3YubGVuZ3RoIC0gMSkgewogICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICAgIGlmKGFyZ3ZbaV0uc3Vic3RyaW5nKDAsIDEpLmVxdWFsc0lnbm9yZUNhc2UoImciKSkKKyAgICAgICAgICAgICAgaWYgKGFyZ3ZbaV0uc3Vic3RyaW5nKDAsIDEpLmVxdWFsc0lnbm9yZUNhc2UoImciKSkKICAgICAgICAgICAgICAgICBvdXRTdWJzYW1wID0gVEouU0FNUF9HUkFZOwotICAgICAgICAgICAgICBlbHNlIGlmKGFyZ3ZbaV0uZXF1YWxzKCI0NDQiKSkgb3V0U3Vic2FtcCA9IFRKLlNBTVBfNDQ0OwotICAgICAgICAgICAgICBlbHNlIGlmKGFyZ3ZbaV0uZXF1YWxzKCI0MjIiKSkgb3V0U3Vic2FtcCA9IFRKLlNBTVBfNDIyOwotICAgICAgICAgICAgICBlbHNlIGlmKGFyZ3ZbaV0uZXF1YWxzKCI0MjAiKSkgb3V0U3Vic2FtcCA9IFRKLlNBTVBfNDIwOwotICAgICAgICAgICAgICBlbHNlIHVzYWdlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHVzYWdlKCk7CisgICAgICAgICAgICAgIGVsc2UgaWYgKGFyZ3ZbaV0uZXF1YWxzKCI0NDQiKSkKKyAgICAgICAgICAgICAgICBvdXRTdWJzYW1wID0gVEouU0FNUF80NDQ7CisgICAgICAgICAgICAgIGVsc2UgaWYgKGFyZ3ZbaV0uZXF1YWxzKCI0MjIiKSkKKyAgICAgICAgICAgICAgICBvdXRTdWJzYW1wID0gVEouU0FNUF80MjI7CisgICAgICAgICAgICAgIGVsc2UgaWYgKGFyZ3ZbaV0uZXF1YWxzKCI0MjAiKSkKKyAgICAgICAgICAgICAgICBvdXRTdWJzYW1wID0gVEouU0FNUF80MjA7CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB1c2FnZSgpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgIHVzYWdlKCk7CiAgICAgICAgICAgfQotICAgICAgICAgIGlmKGFyZ3ZbaV0uc3Vic3RyaW5nKDAsIDIpLmVxdWFsc0lnbm9yZUNhc2UoIi1xIikpIHsKLSAgICAgICAgICAgIGlmKGkgPCBhcmd2Lmxlbmd0aCAtIDEpIHsKKyAgICAgICAgICBpZiAoYXJndltpXS5zdWJzdHJpbmcoMCwgMikuZXF1YWxzSWdub3JlQ2FzZSgiLXEiKSkgeworICAgICAgICAgICAgaWYgKGkgPCBhcmd2Lmxlbmd0aCAtIDEpIHsKICAgICAgICAgICAgICAgaW50IHF1YWwgPSBJbnRlZ2VyLnBhcnNlSW50KGFyZ3ZbKytpXSk7Ci0gICAgICAgICAgICAgIGlmKHF1YWwgPj0gMSAmJiBxdWFsIDw9IDEwMCkgb3V0UXVhbCA9IHF1YWw7Ci0gICAgICAgICAgICAgIGVsc2UgdXNhZ2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgdXNhZ2UoKTsKKyAgICAgICAgICAgICAgaWYgKHF1YWwgPj0gMSAmJiBxdWFsIDw9IDEwMCkKKyAgICAgICAgICAgICAgICBvdXRRdWFsID0gcXVhbDsKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHVzYWdlKCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgdXNhZ2UoKTsKICAgICAgICAgICB9Ci0gICAgICAgICAgaWYoYXJndltpXS5zdWJzdHJpbmcoMCwgMikuZXF1YWxzSWdub3JlQ2FzZSgiLWciKSkKKyAgICAgICAgICBpZiAoYXJndltpXS5zdWJzdHJpbmcoMCwgMikuZXF1YWxzSWdub3JlQ2FzZSgiLWciKSkKICAgICAgICAgICAgIHhmb3JtLm9wdGlvbnMgfD0gVEpUcmFuc2Zvcm0uT1BUX0dSQVk7Ci0gICAgICAgICAgaWYoYXJndltpXS5lcXVhbHNJZ25vcmVDYXNlKCItaGZsaXAiKSkKKyAgICAgICAgICBpZiAoYXJndltpXS5lcXVhbHNJZ25vcmVDYXNlKCItaGZsaXAiKSkKICAgICAgICAgICAgIHhmb3JtLm9wID0gVEpUcmFuc2Zvcm0uT1BfSEZMSVA7Ci0gICAgICAgICAgaWYoYXJndltpXS5lcXVhbHNJZ25vcmVDYXNlKCItdmZsaXAiKSkKKyAgICAgICAgICBpZiAoYXJndltpXS5lcXVhbHNJZ25vcmVDYXNlKCItdmZsaXAiKSkKICAgICAgICAgICAgIHhmb3JtLm9wID0gVEpUcmFuc2Zvcm0uT1BfVkZMSVA7Ci0gICAgICAgICAgaWYoYXJndltpXS5lcXVhbHNJZ25vcmVDYXNlKCItdHJhbnNwb3NlIikpCisgICAgICAgICAgaWYgKGFyZ3ZbaV0uZXF1YWxzSWdub3JlQ2FzZSgiLXRyYW5zcG9zZSIpKQogICAgICAgICAgICAgeGZvcm0ub3AgPSBUSlRyYW5zZm9ybS5PUF9UUkFOU1BPU0U7Ci0gICAgICAgICAgaWYoYXJndltpXS5lcXVhbHNJZ25vcmVDYXNlKCItdHJhbnN2ZXJzZSIpKQorICAgICAgICAgIGlmIChhcmd2W2ldLmVxdWFsc0lnbm9yZUNhc2UoIi10cmFuc3ZlcnNlIikpCiAgICAgICAgICAgICB4Zm9ybS5vcCA9IFRKVHJhbnNmb3JtLk9QX1RSQU5TVkVSU0U7Ci0gICAgICAgICAgaWYoYXJndltpXS5lcXVhbHNJZ25vcmVDYXNlKCItcm90OTAiKSkKKyAgICAgICAgICBpZiAoYXJndltpXS5lcXVhbHNJZ25vcmVDYXNlKCItcm90OTAiKSkKICAgICAgICAgICAgIHhmb3JtLm9wID0gVEpUcmFuc2Zvcm0uT1BfUk9UOTA7Ci0gICAgICAgICAgaWYoYXJndltpXS5lcXVhbHNJZ25vcmVDYXNlKCItcm90MTgwIikpCisgICAgICAgICAgaWYgKGFyZ3ZbaV0uZXF1YWxzSWdub3JlQ2FzZSgiLXJvdDE4MCIpKQogICAgICAgICAgICAgeGZvcm0ub3AgPSBUSlRyYW5zZm9ybS5PUF9ST1QxODA7Ci0gICAgICAgICAgaWYoYXJndltpXS5lcXVhbHNJZ25vcmVDYXNlKCItcm90MjcwIikpCisgICAgICAgICAgaWYgKGFyZ3ZbaV0uZXF1YWxzSWdub3JlQ2FzZSgiLXJvdDI3MCIpKQogICAgICAgICAgICAgeGZvcm0ub3AgPSBUSlRyYW5zZm9ybS5PUF9ST1QyNzA7Ci0gICAgICAgICAgaWYoYXJndltpXS5lcXVhbHNJZ25vcmVDYXNlKCItY3VzdG9tIikpCisgICAgICAgICAgaWYgKGFyZ3ZbaV0uZXF1YWxzSWdub3JlQ2FzZSgiLWN1c3RvbSIpKQogICAgICAgICAgICAgeGZvcm0uY2YgPSBuZXcgVEpFeGFtcGxlKCk7Ci0gICAgICAgICAgZWxzZSBpZihhcmd2W2ldLmxlbmd0aCgpID4gMgotICAgICAgICAgICAgJiYgYXJndltpXS5zdWJzdHJpbmcoMCwgMikuZXF1YWxzSWdub3JlQ2FzZSgiLWMiKSkgewotICAgICAgICAgICAgaWYoaSA+PSBhcmd2Lmxlbmd0aCAtIDEpIHVzYWdlKCk7CisgICAgICAgICAgZWxzZSBpZiAoYXJndltpXS5sZW5ndGgoKSA+IDIgJiYKKyAgICAgICAgICAgICAgICAgICBhcmd2W2ldLnN1YnN0cmluZygwLCAyKS5lcXVhbHNJZ25vcmVDYXNlKCItYyIpKSB7CisgICAgICAgICAgICBpZiAoaSA+PSBhcmd2Lmxlbmd0aCAtIDEpCisgICAgICAgICAgICAgIHVzYWdlKCk7CiAgICAgICAgICAgICBTdHJpbmdbXSBjcm9wQXJnID0gYXJndlsrK2ldLnNwbGl0KCIsIik7Ci0gICAgICAgICAgICBpZihjcm9wQXJnLmxlbmd0aCAhPSAzKSB1c2FnZSgpOworICAgICAgICAgICAgaWYgKGNyb3BBcmcubGVuZ3RoICE9IDMpCisgICAgICAgICAgICAgIHVzYWdlKCk7CiAgICAgICAgICAgICBTdHJpbmdbXSBkaW1BcmcgPSBjcm9wQXJnWzJdLnNwbGl0KCJbeFhdIik7Ci0gICAgICAgICAgICBpZihkaW1BcmcubGVuZ3RoICE9IDIpIHVzYWdlKCk7CisgICAgICAgICAgICBpZiAoZGltQXJnLmxlbmd0aCAhPSAyKQorICAgICAgICAgICAgICB1c2FnZSgpOwogICAgICAgICAgICAgaW50IHRlbXB4ID0gSW50ZWdlci5wYXJzZUludChjcm9wQXJnWzBdKTsKICAgICAgICAgICAgIGludCB0ZW1weSA9IEludGVnZXIucGFyc2VJbnQoY3JvcEFyZ1sxXSk7CiAgICAgICAgICAgICBpbnQgdGVtcHcgPSBJbnRlZ2VyLnBhcnNlSW50KGRpbUFyZ1swXSk7CiAgICAgICAgICAgICBpbnQgdGVtcGggPSBJbnRlZ2VyLnBhcnNlSW50KGRpbUFyZ1sxXSk7Ci0gICAgICAgICAgICBpZih0ZW1weCA8IDAgfHwgdGVtcHkgPCAwIHx8IHRlbXB3IDwgMCB8fCB0ZW1waCA8IDApIHVzYWdlKCk7Ci0gICAgICAgICAgICB4Zm9ybS54ID0gdGVtcHg7ICB4Zm9ybS55ID0gdGVtcHk7Ci0gICAgICAgICAgICB4Zm9ybS53aWR0aCA9IHRlbXB3OyAgeGZvcm0uaGVpZ2h0ID0gdGVtcGg7CisgICAgICAgICAgICBpZiAodGVtcHggPCAwIHx8IHRlbXB5IDwgMCB8fCB0ZW1wdyA8IDAgfHwgdGVtcGggPCAwKQorICAgICAgICAgICAgICB1c2FnZSgpOworICAgICAgICAgICAgeGZvcm0ueCA9IHRlbXB4OworICAgICAgICAgICAgeGZvcm0ueSA9IHRlbXB5OworICAgICAgICAgICAgeGZvcm0ud2lkdGggPSB0ZW1wdzsKKyAgICAgICAgICAgIHhmb3JtLmhlaWdodCA9IHRlbXBoOwogICAgICAgICAgICAgeGZvcm0ub3B0aW9ucyB8PSBUSlRyYW5zZm9ybS5PUFRfQ1JPUDsKICAgICAgICAgICB9Ci0gICAgICAgICAgaWYoYXJndltpXS5zdWJzdHJpbmcoMCwgMikuZXF1YWxzSWdub3JlQ2FzZSgiLWQiKSkKKyAgICAgICAgICBpZiAoYXJndltpXS5zdWJzdHJpbmcoMCwgMikuZXF1YWxzSWdub3JlQ2FzZSgiLWQiKSkKICAgICAgICAgICAgIGRpc3BsYXkgPSB0cnVlOwotICAgICAgICAgIGlmKGFyZ3ZbaV0uZXF1YWxzSWdub3JlQ2FzZSgiLWZhc3R1cHNhbXBsZSIpKSB7CisgICAgICAgICAgaWYgKGFyZ3ZbaV0uZXF1YWxzSWdub3JlQ2FzZSgiLWZhc3R1cHNhbXBsZSIpKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVzaW5nIGZhc3QgdXBzYW1wbGluZyBjb2RlIik7CiAgICAgICAgICAgICBmbGFncyB8PSBUSi5GTEFHX0ZBU1RVUFNBTVBMRTsKICAgICAgICAgICB9Ci0gICAgICAgICAgaWYoYXJndltpXS5lcXVhbHNJZ25vcmVDYXNlKCItZmFzdGRjdCIpKSB7CisgICAgICAgICAgaWYgKGFyZ3ZbaV0uZXF1YWxzSWdub3JlQ2FzZSgiLWZhc3RkY3QiKSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVc2luZyBmYXN0ZXN0IERDVC9JRENUIGFsZ29yaXRobSIpOwogICAgICAgICAgICAgZmxhZ3MgfD0gVEouRkxBR19GQVNURENUOwogICAgICAgICAgIH0KLSAgICAgICAgICBpZihhcmd2W2ldLmVxdWFsc0lnbm9yZUNhc2UoIi1hY2N1cmF0ZWRjdCIpKSB7CisgICAgICAgICAgaWYgKGFyZ3ZbaV0uZXF1YWxzSWdub3JlQ2FzZSgiLWFjY3VyYXRlZGN0IikpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVXNpbmcgbW9zdCBhY2N1cmF0ZSBEQ1QvSURDVCBhbGdvcml0aG0iKTsKICAgICAgICAgICAgIGZsYWdzIHw9IFRKLkZMQUdfQUNDVVJBVEVEQ1Q7CiAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICB9CiAgICAgICBTdHJpbmdbXSBpbkZpbGVUb2tlbnMgPSBhcmd2WzBdLnNwbGl0KCJcXC4iKTsKLSAgICAgIGlmKGluRmlsZVRva2Vucy5sZW5ndGggPiAxKQorICAgICAgaWYgKGluRmlsZVRva2Vucy5sZW5ndGggPiAxKQogICAgICAgICBpbkZvcm1hdCA9IGluRmlsZVRva2Vuc1tpbkZpbGVUb2tlbnMubGVuZ3RoIC0gMV07CiAgICAgICBTdHJpbmdbXSBvdXRGaWxlVG9rZW5zOwotICAgICAgaWYoZGlzcGxheSkgb3V0Rm9ybWF0ID0gImJtcCI7CisgICAgICBpZiAoZGlzcGxheSkKKyAgICAgICAgb3V0Rm9ybWF0ID0gImJtcCI7CiAgICAgICBlbHNlIHsKICAgICAgICAgb3V0RmlsZVRva2VucyA9IGFyZ3ZbMV0uc3BsaXQoIlxcLiIpOwotICAgICAgICBpZihvdXRGaWxlVG9rZW5zLmxlbmd0aCA+IDEpCisgICAgICAgIGlmIChvdXRGaWxlVG9rZW5zLmxlbmd0aCA+IDEpCiAgICAgICAgICAgb3V0Rm9ybWF0ID0gb3V0RmlsZVRva2Vuc1tvdXRGaWxlVG9rZW5zLmxlbmd0aCAtIDFdOwogICAgICAgfQogCiAgICAgICBGaWxlIGZpbGUgPSBuZXcgRmlsZShhcmd2WzBdKTsKICAgICAgIGludCB3aWR0aCwgaGVpZ2h0OwogCi0gICAgICBpZihpbkZvcm1hdC5lcXVhbHNJZ25vcmVDYXNlKCJqcGciKSkgeworICAgICAgaWYgKGluRm9ybWF0LmVxdWFsc0lnbm9yZUNhc2UoImpwZyIpKSB7CiAgICAgICAgIEZpbGVJbnB1dFN0cmVhbSBmaXMgPSBuZXcgRmlsZUlucHV0U3RyZWFtKGZpbGUpOwogICAgICAgICBpbnQgaW5wdXRTaXplID0gZmlzLmF2YWlsYWJsZSgpOwotICAgICAgICBpZihpbnB1dFNpemUgPCAxKSB7CisgICAgICAgIGlmIChpbnB1dFNpemUgPCAxKSB7CiAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbnB1dCBmaWxlIGNvbnRhaW5zIG5vIGRhdGEiKTsKICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKICAgICAgICAgfQpAQCAtMjM0LDI3ICsyNTMsMjggQEAKICAgICAgICAgZmlzLmNsb3NlKCk7CiAKICAgICAgICAgVEpEZWNvbXByZXNzb3IgdGpkOwotICAgICAgICBpZih4Zm9ybS5vcCAhPSBUSlRyYW5zZm9ybS5PUF9OT05FIHx8IHhmb3JtLm9wdGlvbnMgIT0gMAotICAgICAgICAgIHx8IHhmb3JtLmNmICE9IG51bGwpIHsKKyAgICAgICAgaWYgKHhmb3JtLm9wICE9IFRKVHJhbnNmb3JtLk9QX05PTkUgfHwgeGZvcm0ub3B0aW9ucyAhPSAwIHx8CisgICAgICAgICAgICB4Zm9ybS5jZiAhPSBudWxsKSB7CiAgICAgICAgICAgVEpUcmFuc2Zvcm1lciB0anQgPSBuZXcgVEpUcmFuc2Zvcm1lcihpbnB1dEJ1Zik7Ci0gICAgICAgICAgVEpUcmFuc2Zvcm0gdFtdID0gbmV3IFRKVHJhbnNmb3JtWzFdOworICAgICAgICAgIFRKVHJhbnNmb3JtW10gdCA9IG5ldyBUSlRyYW5zZm9ybVsxXTsKICAgICAgICAgICB0WzBdID0geGZvcm07CiAgICAgICAgICAgdFswXS5vcHRpb25zIHw9IFRKVHJhbnNmb3JtLk9QVF9UUklNOwogICAgICAgICAgIFRKRGVjb21wcmVzc29yW10gdGpkeCA9IHRqdC50cmFuc2Zvcm0odCwgMCk7CiAgICAgICAgICAgdGpkID0gdGpkeFswXTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHRqZCA9IG5ldyBUSkRlY29tcHJlc3NvcihpbnB1dEJ1Zik7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgIHRqZCA9IG5ldyBUSkRlY29tcHJlc3NvcihpbnB1dEJ1Zik7CiAKICAgICAgICAgd2lkdGggPSB0amQuZ2V0V2lkdGgoKTsKICAgICAgICAgaGVpZ2h0ID0gdGpkLmdldEhlaWdodCgpOwogICAgICAgICBpbnQgaW5TdWJzYW1wID0gdGpkLmdldFN1YnNhbXAoKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTb3VyY2UgSW1hZ2U6ICIgKyB3aWR0aCArICIgeCAiICsgaGVpZ2h0Ci0gICAgICAgICAgKyAiIHBpeGVscywgIiArIHNhbXBOYW1lW2luU3Vic2FtcF0gKyAiIHN1YnNhbXBsaW5nIik7Ci0gICAgICAgIGlmKG91dFN1YnNhbXAgPCAwKSBvdXRTdWJzYW1wID0gaW5TdWJzYW1wOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNvdXJjZSBJbWFnZTogIiArIHdpZHRoICsgIiB4ICIgKyBoZWlnaHQgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBwaXhlbHMsICIgKyBzYW1wTmFtZVtpblN1YnNhbXBdICsgIiBzdWJzYW1wbGluZyIpOworICAgICAgICBpZiAob3V0U3Vic2FtcCA8IDApCisgICAgICAgICAgb3V0U3Vic2FtcCA9IGluU3Vic2FtcDsKIAotICAgICAgICBpZihvdXRGb3JtYXQuZXF1YWxzSWdub3JlQ2FzZSgianBnIikKLSAgICAgICAgICAmJiAoeGZvcm0ub3AgIT0gVEpUcmFuc2Zvcm0uT1BfTk9ORSB8fCB4Zm9ybS5vcHRpb25zICE9IDApCi0gICAgICAgICAgJiYgc2NhbGVGYWN0b3IuaXNPbmUoKSkgeworICAgICAgICBpZiAob3V0Rm9ybWF0LmVxdWFsc0lnbm9yZUNhc2UoImpwZyIpICYmCisgICAgICAgICAgICAoeGZvcm0ub3AgIT0gVEpUcmFuc2Zvcm0uT1BfTk9ORSB8fCB4Zm9ybS5vcHRpb25zICE9IDApICYmCisgICAgICAgICAgICBzY2FsZUZhY3Rvci5pc09uZSgpKSB7CiAgICAgICAgICAgZmlsZSA9IG5ldyBGaWxlKGFyZ3ZbMV0pOwogICAgICAgICAgIEZpbGVPdXRwdXRTdHJlYW0gZm9zID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oZmlsZSk7CiAgICAgICAgICAgZm9zLndyaXRlKHRqZC5nZXRKUEVHQnVmKCksIDAsIHRqZC5nZXRKUEVHU2l6ZSgpKTsKQEAgLTI2NSw0NiArMjg1LDQ4IEBACiAgICAgICAgIHdpZHRoID0gc2NhbGVGYWN0b3IuZ2V0U2NhbGVkKHdpZHRoKTsKICAgICAgICAgaGVpZ2h0ID0gc2NhbGVGYWN0b3IuZ2V0U2NhbGVkKGhlaWdodCk7CiAKLSAgICAgICAgaWYoIW91dEZvcm1hdC5lcXVhbHNJZ25vcmVDYXNlKCJqcGciKSkKKyAgICAgICAgaWYgKCFvdXRGb3JtYXQuZXF1YWxzSWdub3JlQ2FzZSgianBnIikpCiAgICAgICAgICAgaW1nID0gdGpkLmRlY29tcHJlc3Mod2lkdGgsIGhlaWdodCwgQnVmZmVyZWRJbWFnZS5UWVBFX0lOVF9SR0IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpOwotICAgICAgICBlbHNlIGJtcEJ1ZiA9IHRqZC5kZWNvbXByZXNzKHdpZHRoLCAwLCBoZWlnaHQsIFRKLlBGX0JHUlgsIGZsYWdzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIGJtcEJ1ZiA9IHRqZC5kZWNvbXByZXNzKHdpZHRoLCAwLCBoZWlnaHQsIFRKLlBGX0JHUlgsIGZsYWdzKTsKICAgICAgICAgdGpkLmNsb3NlKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKKyAgICAgIH0gZWxzZSB7CiAgICAgICAgIGltZyA9IEltYWdlSU8ucmVhZChmaWxlKTsKKyAgICAgICAgaWYgKGltZyA9PSBudWxsKQorICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIklucHV0IGltYWdlIHR5cGUgbm90IHN1cHBvcnRlZC4iKTsKICAgICAgICAgd2lkdGggPSBpbWcuZ2V0V2lkdGgoKTsKICAgICAgICAgaGVpZ2h0ID0gaW1nLmdldEhlaWdodCgpOwotICAgICAgICBpZihvdXRTdWJzYW1wIDwgMCkgewotICAgICAgICAgIGlmKGltZy5nZXRUeXBlKCkgPT0gQnVmZmVyZWRJbWFnZS5UWVBFX0JZVEVfR1JBWSkKKyAgICAgICAgaWYgKG91dFN1YnNhbXAgPCAwKSB7CisgICAgICAgICAgaWYgKGltZy5nZXRUeXBlKCkgPT0gQnVmZmVyZWRJbWFnZS5UWVBFX0JZVEVfR1JBWSkKICAgICAgICAgICAgIG91dFN1YnNhbXAgPSBUSi5TQU1QX0dSQVk7Ci0gICAgICAgICAgZWxzZSBvdXRTdWJzYW1wID0gVEouU0FNUF80NDQ7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0U3Vic2FtcCA9IFRKLlNBTVBfNDQ0OwogICAgICAgICB9CiAgICAgICB9CiAgICAgICBTeXN0ZW0uZ2MoKTsKLSAgICAgIGlmKCFkaXNwbGF5KQotICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJEZXN0LiBJbWFnZSAoIiArIG91dEZvcm1hdCArICIpOiAgIiArIHdpZHRoICsgIiB4ICIKLSAgICAgICAgICArIGhlaWdodCArICIgcGl4ZWxzIik7CisgICAgICBpZiAoIWRpc3BsYXkpCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIkRlc3QuIEltYWdlICgiICsgb3V0Rm9ybWF0ICsgIik6ICAiICsgd2lkdGggKyAiIHggIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ICsgIiBwaXhlbHMiKTsKIAotICAgICAgaWYoZGlzcGxheSkgeworICAgICAgaWYgKGRpc3BsYXkpIHsKICAgICAgICAgSW1hZ2VJY29uIGljb24gPSBuZXcgSW1hZ2VJY29uKGltZyk7CiAgICAgICAgIEpMYWJlbCBsYWJlbCA9IG5ldyBKTGFiZWwoaWNvbiwgSkxhYmVsLkNFTlRFUik7CiAgICAgICAgIEpPcHRpb25QYW5lLnNob3dNZXNzYWdlRGlhbG9nKG51bGwsIGxhYmVsLCAiT3V0cHV0IEltYWdlIiwKLSAgICAgICAgICBKT3B0aW9uUGFuZS5QTEFJTl9NRVNTQUdFKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYob3V0Rm9ybWF0LmVxdWFsc0lnbm9yZUNhc2UoImpwZyIpKSB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLCAiICsgc2FtcE5hbWVbb3V0U3Vic2FtcF0KLSAgICAgICAgICArICIgc3Vic2FtcGxpbmcsIHF1YWxpdHkgPSAiICsgb3V0UXVhbCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpPcHRpb25QYW5lLlBMQUlOX01FU1NBR0UpOworICAgICAgfSBlbHNlIGlmIChvdXRGb3JtYXQuZXF1YWxzSWdub3JlQ2FzZSgianBnIikpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIsICIgKyBzYW1wTmFtZVtvdXRTdWJzYW1wXSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHN1YnNhbXBsaW5nLCBxdWFsaXR5ID0gIiArIG91dFF1YWwpOwogICAgICAgICBUSkNvbXByZXNzb3IgdGpjID0gbmV3IFRKQ29tcHJlc3NvcigpOwogICAgICAgICBpbnQganBlZ1NpemU7CiAgICAgICAgIGJ5dGVbXSBqcGVnQnVmOwogCiAgICAgICAgIHRqYy5zZXRTdWJzYW1wKG91dFN1YnNhbXApOwogICAgICAgICB0amMuc2V0SlBFR1F1YWxpdHkob3V0UXVhbCk7Ci0gICAgICAgIGlmKGltZyAhPSBudWxsKQorICAgICAgICBpZiAoaW1nICE9IG51bGwpCiAgICAgICAgICAganBlZ0J1ZiA9IHRqYy5jb21wcmVzcyhpbWcsIGZsYWdzKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgdGpjLnNldFNvdXJjZUltYWdlKGJtcEJ1Ziwgd2lkdGgsIDAsIGhlaWdodCwgVEouUEZfQkdSWCk7CisgICAgICAgICAgdGpjLnNldFNvdXJjZUltYWdlKGJtcEJ1ZiwgMCwgMCwgd2lkdGgsIDAsIGhlaWdodCwgVEouUEZfQkdSWCk7CiAgICAgICAgICAganBlZ0J1ZiA9IHRqYy5jb21wcmVzcyhmbGFncyk7CiAgICAgICAgIH0KICAgICAgICAganBlZ1NpemUgPSB0amMuZ2V0Q29tcHJlc3NlZFNpemUoKTsKQEAgLTMxNCwyNyArMzM2LDI2IEBACiAgICAgICAgIEZpbGVPdXRwdXRTdHJlYW0gZm9zID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oZmlsZSk7CiAgICAgICAgIGZvcy53cml0ZShqcGVnQnVmLCAwLCBqcGVnU2l6ZSk7CiAgICAgICAgIGZvcy5jbG9zZSgpOwotICAgICAgfQotICAgICAgZWxzZSB7CisgICAgICB9IGVsc2UgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJcbiIpOwogICAgICAgICBmaWxlID0gbmV3IEZpbGUoYXJndlsxXSk7CiAgICAgICAgIEltYWdlSU8ud3JpdGUoaW1nLCBvdXRGb3JtYXQsIGZpbGUpOwogICAgICAgfQogCi0gICAgfQotICAgIGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgIFN5c3RlbS5leGl0KC0xKTsKICAgICB9CiAgIH0KIAogICBwdWJsaWMgdm9pZCBjdXN0b21GaWx0ZXIoU2hvcnRCdWZmZXIgY29lZmZCdWZmZXIsIFJlY3RhbmdsZSBidWZmZXJSZWdpb24sCi0gICAgUmVjdGFuZ2xlIHBsYW5lUmVnaW9uLCBpbnQgY29tcG9uZW50SW5kZXgsIGludCB0cmFuc2Zvcm1JbmRleCwKLSAgICBUSlRyYW5zZm9ybSB0cmFuc2Zvcm0pIHRocm93cyBFeGNlcHRpb24gewotICAgIGZvcihpbnQgaT0wOyBpPGJ1ZmZlclJlZ2lvbi53aWR0aCpidWZmZXJSZWdpb24uaGVpZ2h0OyBpKyspIHsKLQkgICAgY29lZmZCdWZmZXIucHV0KGksIChzaG9ydCkoLWNvZWZmQnVmZmVyLmdldChpKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVjdGFuZ2xlIHBsYW5lUmVnaW9uLCBpbnQgY29tcG9uZW50SW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdHJhbnNmb3JtSW5kZXgsIFRKVHJhbnNmb3JtIHRyYW5zZm9ybSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBFeGNlcHRpb24geworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYnVmZmVyUmVnaW9uLndpZHRoICogYnVmZmVyUmVnaW9uLmhlaWdodDsgaSsrKSB7CisgICAgICBjb2VmZkJ1ZmZlci5wdXQoaSwgKHNob3J0KSgtY29lZmZCdWZmZXIuZ2V0KGkpKSk7CiAgICAgfQogICB9CiAKLSAgc3RhdGljIFRKU2NhbGluZ0ZhY3RvciBzZiBbXSA9IG51bGw7CisgIHN0YXRpYyBUSlNjYWxpbmdGYWN0b3JbXSBzZiA9IG51bGw7CiB9OwpkaWZmIC0tZ2l0IGEvamF2YS9USlVuaXRUZXN0LmphdmEgYi9qYXZhL1RKVW5pdFRlc3QuamF2YQppbmRleCBlYWViZjIwLi5hYzkxYTNkIDEwMDY0NAotLS0gYS9qYXZhL1RKVW5pdFRlc3QuamF2YQorKysgYi9qYXZhL1RKVW5pdFRlc3QuamF2YQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpMjAxMS0yMDEyLCAyMDE0IEQuIFIuIENvbW1hbmRlci4gIAorICogQ29weXJpZ2h0IChDKTIwMTEtMjAxMiwgMjAxNC0yMDE1IEQuIFIuIENvbW1hbmRlci4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKQEAgLTUwLDQ4ICs1MCw0OCBAQAogICAgIFN5c3RlbS5leGl0KDEpOwogICB9CiAKLSAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIHN1Yk5hbWVMb25nW10gPSB7CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIHN1Yk5hbWVMb25nID0gewogICAgICI0OjQ6NCIsICI0OjI6MiIsICI0OjI6MCIsICJHUkFZIiwgIjQ6NDowIgogICB9OwotICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgc3ViTmFtZVtdID0geworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBzdWJOYW1lID0gewogICAgICI0NDQiLCAiNDIyIiwgIjQyMCIsICJHUkFZIiwgIjQ0MCIKICAgfTsKIAotICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgcGl4Rm9ybWF0U3RyW10gPSB7CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIHBpeEZvcm1hdFN0ciA9IHsKICAgICAiUkdCIiwgIkJHUiIsICJSR0JYIiwgIkJHUlgiLCAiWEJHUiIsICJYUkdCIiwgIkdyYXlzY2FsZSIsCiAgICAgIlJHQkEiLCAiQkdSQSIsICJBQkdSIiwgIkFSR0IiCiAgIH07CiAKLSAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IGFscGhhT2Zmc2V0W10gPSB7CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludFtdIGFscGhhT2Zmc2V0ID0gewogICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAzLCAzLCAwLCAwCiAgIH07CiAKLSAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IF8zYnl0ZUZvcm1hdHNbXSA9IHsKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50W10gXzNieXRlRm9ybWF0cyA9IHsKICAgICBUSi5QRl9SR0IsIFRKLlBGX0JHUgogICB9OwotICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQgXzNieXRlRm9ybWF0c0JJW10gPSB7CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludFtdIF8zYnl0ZUZvcm1hdHNCSSA9IHsKICAgICBCdWZmZXJlZEltYWdlLlRZUEVfM0JZVEVfQkdSCiAgIH07Ci0gIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBfNGJ5dGVGb3JtYXRzW10gPSB7CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludFtdIF80Ynl0ZUZvcm1hdHMgPSB7CiAgICAgVEouUEZfUkdCWCwgVEouUEZfQkdSWCwgVEouUEZfWEJHUiwgVEouUEZfWFJHQgogICB9OwotICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQgXzRieXRlRm9ybWF0c0JJW10gPSB7CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludFtdIF80Ynl0ZUZvcm1hdHNCSSA9IHsKICAgICBCdWZmZXJlZEltYWdlLlRZUEVfSU5UX0JHUiwgQnVmZmVyZWRJbWFnZS5UWVBFX0lOVF9SR0IsCiAgICAgQnVmZmVyZWRJbWFnZS5UWVBFXzRCWVRFX0FCR1IsIEJ1ZmZlcmVkSW1hZ2UuVFlQRV80QllURV9BQkdSX1BSRSwKICAgICBCdWZmZXJlZEltYWdlLlRZUEVfSU5UX0FSR0IsIEJ1ZmZlcmVkSW1hZ2UuVFlQRV9JTlRfQVJHQl9QUkUKICAgfTsKLSAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IG9ubHlHcmF5W10gPSB7CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludFtdIG9ubHlHcmF5ID0gewogICAgIFRKLlBGX0dSQVkKICAgfTsKLSAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IG9ubHlHcmF5QklbXSA9IHsKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50W10gb25seUdyYXlCSSA9IHsKICAgICBCdWZmZXJlZEltYWdlLlRZUEVfQllURV9HUkFZCiAgIH07Ci0gIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBvbmx5UkdCW10gPSB7CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludFtdIG9ubHlSR0IgPSB7CiAgICAgVEouUEZfUkdCCiAgIH07CiAKLSAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IFlVVkVOQ09ERSA9IDE7Ci0gIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBZVVZERUNPREUgPSAyOworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgWVVWRU5DT0RFID0gMTsKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFlVVkRFQ09ERSA9IDI7CiAgIHByaXZhdGUgc3RhdGljIGludCB5dXYgPSAwOwogICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGJpID0gZmFsc2U7CiAKQEAgLTEwNCwyMiArMTA0LDIyIEBACiAgICAgICAgIHJldHVybiBUSi5QRl9CR1I7CiAgICAgICBjYXNlIEJ1ZmZlcmVkSW1hZ2UuVFlQRV80QllURV9BQkdSOgogICAgICAgY2FzZSBCdWZmZXJlZEltYWdlLlRZUEVfNEJZVEVfQUJHUl9QUkU6Ci0gICAgICAgIHJldHVybiBUSi5QRl9YQkdSOworICAgICAgICByZXR1cm4gVEouUEZfQUJHUjsKICAgICAgIGNhc2UgQnVmZmVyZWRJbWFnZS5UWVBFX0JZVEVfR1JBWToKICAgICAgICAgcmV0dXJuIFRKLlBGX0dSQVk7CiAgICAgICBjYXNlIEJ1ZmZlcmVkSW1hZ2UuVFlQRV9JTlRfQkdSOgotICAgICAgICBpZihieXRlT3JkZXIgPT0gQnl0ZU9yZGVyLkJJR19FTkRJQU4pCisgICAgICAgIGlmIChieXRlT3JkZXIgPT0gQnl0ZU9yZGVyLkJJR19FTkRJQU4pCiAgICAgICAgICAgcmV0dXJuIFRKLlBGX1hCR1I7CiAgICAgICAgIGVsc2UKICAgICAgICAgICByZXR1cm4gVEouUEZfUkdCWDsKICAgICAgIGNhc2UgQnVmZmVyZWRJbWFnZS5UWVBFX0lOVF9SR0I6Ci0gICAgICAgIGlmKGJ5dGVPcmRlciA9PSBCeXRlT3JkZXIuQklHX0VORElBTikKKyAgICAgICAgaWYgKGJ5dGVPcmRlciA9PSBCeXRlT3JkZXIuQklHX0VORElBTikKICAgICAgICAgICByZXR1cm4gVEouUEZfWFJHQjsKICAgICAgICAgZWxzZQogICAgICAgICAgIHJldHVybiBUSi5QRl9CR1JYOwogICAgICAgY2FzZSBCdWZmZXJlZEltYWdlLlRZUEVfSU5UX0FSR0I6CiAgICAgICBjYXNlIEJ1ZmZlcmVkSW1hZ2UuVFlQRV9JTlRfQVJHQl9QUkU6Ci0gICAgICAgIGlmKGJ5dGVPcmRlciA9PSBCeXRlT3JkZXIuQklHX0VORElBTikKKyAgICAgICAgaWYgKGJ5dGVPcmRlciA9PSBCeXRlT3JkZXIuQklHX0VORElBTikKICAgICAgICAgICByZXR1cm4gVEouUEZfQVJHQjsKICAgICAgICAgZWxzZQogICAgICAgICAgIHJldHVybiBUSi5QRl9CR1JBOwpAQCAtMTQ4LDE0ICsxNDgsMTMgQEAKICAgICB9CiAgICAgcmV0dXJuICJVbmtub3duIjsKICAgfQotICAKIAogICBwcml2YXRlIHN0YXRpYyBkb3VibGUgZ2V0VGltZSgpIHsKICAgICByZXR1cm4gKGRvdWJsZSlTeXN0ZW0ubmFub1RpbWUoKSAvIDEuMGU5OwogICB9CiAKICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBpbml0QnVmKGJ5dGVbXSBidWYsIGludCB3LCBpbnQgcGl0Y2gsIGludCBoLCBpbnQgcGYsCi0gICAgaW50IGZsYWdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbGFncykgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgaW50IHJvZmZzZXQgPSBUSi5nZXRSZWRPZmZzZXQocGYpOwogICAgIGludCBnb2Zmc2V0ID0gVEouZ2V0R3JlZW5PZmZzZXQocGYpOwogICAgIGludCBib2Zmc2V0ID0gVEouZ2V0Qmx1ZU9mZnNldChwZik7CkBAIC0xNjQsNDIgKzE2Myw0NiBAQAogICAgIGludCBpbmRleCwgcm93LCBjb2wsIGhhbGZ3YXkgPSAxNjsKIAogICAgIEFycmF5cy5maWxsKGJ1ZiwgKGJ5dGUpMCk7Ci0gICAgaWYocGYgPT0gVEouUEZfR1JBWSkgewotICAgICAgZm9yKHJvdyA9IDA7IHJvdyA8IGg7IHJvdysrKSB7Ci0gICAgICAgIGZvcihjb2wgPSAwOyBjb2wgPCB3OyBjb2wrKykgewotICAgICAgICAgIGlmKChmbGFncyAmIFRKLkZMQUdfQk9UVE9NVVApICE9IDApCisgICAgaWYgKHBmID09IFRKLlBGX0dSQVkpIHsKKyAgICAgIGZvciAocm93ID0gMDsgcm93IDwgaDsgcm93KyspIHsKKyAgICAgICAgZm9yIChjb2wgPSAwOyBjb2wgPCB3OyBjb2wrKykgeworICAgICAgICAgIGlmICgoZmxhZ3MgJiBUSi5GTEFHX0JPVFRPTVVQKSAhPSAwKQogICAgICAgICAgICAgaW5kZXggPSBwaXRjaCAqIChoIC0gcm93IC0gMSkgKyBjb2w7Ci0gICAgICAgICAgZWxzZSBpbmRleCA9IHBpdGNoICogcm93ICsgY29sOwotICAgICAgICAgIGlmKCgocm93IC8gOCkgKyAoY29sIC8gOCkpICUgMiA9PSAwKQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGluZGV4ID0gcGl0Y2ggKiByb3cgKyBjb2w7CisgICAgICAgICAgaWYgKCgocm93IC8gOCkgKyAoY29sIC8gOCkpICUgMiA9PSAwKQogICAgICAgICAgICAgYnVmW2luZGV4XSA9IChyb3cgPCBoYWxmd2F5KSA/IChieXRlKTI1NSA6IDA7Ci0gICAgICAgICAgZWxzZSBidWZbaW5kZXhdID0gKHJvdyA8IGhhbGZ3YXkpID8gNzYgOiAoYnl0ZSkyMjY7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgYnVmW2luZGV4XSA9IChyb3cgPCBoYWxmd2F5KSA/IDc2IDogKGJ5dGUpMjI2OwogICAgICAgICB9CiAgICAgICB9CiAgICAgICByZXR1cm47CiAgICAgfQotICAgIGZvcihyb3cgPSAwOyByb3cgPCBoOyByb3crKykgewotICAgICAgZm9yKGNvbCA9IDA7IGNvbCA8IHc7IGNvbCsrKSB7Ci0gICAgICAgIGlmKChmbGFncyAmIFRKLkZMQUdfQk9UVE9NVVApICE9IDApCisgICAgZm9yIChyb3cgPSAwOyByb3cgPCBoOyByb3crKykgeworICAgICAgZm9yIChjb2wgPSAwOyBjb2wgPCB3OyBjb2wrKykgeworICAgICAgICBpZiAoKGZsYWdzICYgVEouRkxBR19CT1RUT01VUCkgIT0gMCkKICAgICAgICAgICBpbmRleCA9IHBpdGNoICogKGggLSByb3cgLSAxKSArIGNvbCAqIHBzOwotICAgICAgICBlbHNlIGluZGV4ID0gcGl0Y2ggKiByb3cgKyBjb2wgKiBwczsKLSAgICAgICAgaWYoKChyb3cgLyA4KSArIChjb2wgLyA4KSkgJSAyID09IDApIHsKLSAgICAgICAgICBpZihyb3cgPCBoYWxmd2F5KSB7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBpbmRleCA9IHBpdGNoICogcm93ICsgY29sICogcHM7CisgICAgICAgIGlmICgoKHJvdyAvIDgpICsgKGNvbCAvIDgpKSAlIDIgPT0gMCkgeworICAgICAgICAgIGlmIChyb3cgPCBoYWxmd2F5KSB7CiAgICAgICAgICAgICBidWZbaW5kZXggKyByb2Zmc2V0XSA9IChieXRlKTI1NTsKICAgICAgICAgICAgIGJ1ZltpbmRleCArIGdvZmZzZXRdID0gKGJ5dGUpMjU1OwogICAgICAgICAgICAgYnVmW2luZGV4ICsgYm9mZnNldF0gPSAoYnl0ZSkyNTU7CiAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgeworICAgICAgICB9IGVsc2UgewogICAgICAgICAgIGJ1ZltpbmRleCArIHJvZmZzZXRdID0gKGJ5dGUpMjU1OwotICAgICAgICAgIGlmKHJvdyA+PSBoYWxmd2F5KSBidWZbaW5kZXggKyBnb2Zmc2V0XSA9IChieXRlKTI1NTsKKyAgICAgICAgICBpZiAocm93ID49IGhhbGZ3YXkpCisgICAgICAgICAgICBidWZbaW5kZXggKyBnb2Zmc2V0XSA9IChieXRlKTI1NTsKICAgICAgICAgfQotICAgICAgICBpZiAoYW9mZnNldCA+PSAwKSBidWZbaW5kZXggKyBhb2Zmc2V0XSA9IChieXRlKTI1NTsKKyAgICAgICAgaWYgKGFvZmZzZXQgPj0gMCkKKyAgICAgICAgICBidWZbaW5kZXggKyBhb2Zmc2V0XSA9IChieXRlKTI1NTsKICAgICAgIH0KICAgICB9CiAgIH0KIAogICBwcml2YXRlIHN0YXRpYyB2b2lkIGluaXRJbnRCdWYoaW50W10gYnVmLCBpbnQgdywgaW50IHBpdGNoLCBpbnQgaCwgaW50IHBmLAotICAgIGludCBmbGFncykgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MpIHRocm93cyBFeGNlcHRpb24gewogICAgIGludCByc2hpZnQgPSBUSi5nZXRSZWRPZmZzZXQocGYpICogODsKICAgICBpbnQgZ3NoaWZ0ID0gVEouZ2V0R3JlZW5PZmZzZXQocGYpICogODsKICAgICBpbnQgYnNoaWZ0ID0gVEouZ2V0Qmx1ZU9mZnNldChwZikgKiA4OwpAQCAtMjA3LDQzICsyMTAsNDQgQEAKICAgICBpbnQgaW5kZXgsIHJvdywgY29sLCBoYWxmd2F5ID0gMTY7CiAKICAgICBBcnJheXMuZmlsbChidWYsIDApOwotICAgIGZvcihyb3cgPSAwOyByb3cgPCBoOyByb3crKykgewotICAgICAgZm9yKGNvbCA9IDA7IGNvbCA8IHc7IGNvbCsrKSB7Ci0gICAgICAgIGlmKChmbGFncyAmIFRKLkZMQUdfQk9UVE9NVVApICE9IDApCisgICAgZm9yIChyb3cgPSAwOyByb3cgPCBoOyByb3crKykgeworICAgICAgZm9yIChjb2wgPSAwOyBjb2wgPCB3OyBjb2wrKykgeworICAgICAgICBpZiAoKGZsYWdzICYgVEouRkxBR19CT1RUT01VUCkgIT0gMCkKICAgICAgICAgICBpbmRleCA9IHBpdGNoICogKGggLSByb3cgLSAxKSArIGNvbDsKLSAgICAgICAgZWxzZSBpbmRleCA9IHBpdGNoICogcm93ICsgY29sOwotICAgICAgICBpZigoKHJvdyAvIDgpICsgKGNvbCAvIDgpKSAlIDIgPT0gMCkgewotICAgICAgICAgIGlmKHJvdyA8IGhhbGZ3YXkpIHsKKyAgICAgICAgZWxzZQorICAgICAgICAgIGluZGV4ID0gcGl0Y2ggKiByb3cgKyBjb2w7CisgICAgICAgIGlmICgoKHJvdyAvIDgpICsgKGNvbCAvIDgpKSAlIDIgPT0gMCkgeworICAgICAgICAgIGlmIChyb3cgPCBoYWxmd2F5KSB7CiAgICAgICAgICAgICBidWZbaW5kZXhdIHw9ICgyNTUgPDwgcnNoaWZ0KTsKICAgICAgICAgICAgIGJ1ZltpbmRleF0gfD0gKDI1NSA8PCBnc2hpZnQpOwogICAgICAgICAgICAgYnVmW2luZGV4XSB8PSAoMjU1IDw8IGJzaGlmdCk7CiAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgeworICAgICAgICB9IGVsc2UgewogICAgICAgICAgIGJ1ZltpbmRleF0gfD0gKDI1NSA8PCByc2hpZnQpOwotICAgICAgICAgIGlmKHJvdyA+PSBoYWxmd2F5KSBidWZbaW5kZXhdIHw9ICgyNTUgPDwgZ3NoaWZ0KTsKKyAgICAgICAgICBpZiAocm93ID49IGhhbGZ3YXkpCisgICAgICAgICAgICBidWZbaW5kZXhdIHw9ICgyNTUgPDwgZ3NoaWZ0KTsKICAgICAgICAgfQotICAgICAgICBpZiAoYXNoaWZ0ID49IDApIGJ1ZltpbmRleF0gfD0gKDI1NSA8PCBhc2hpZnQpOworICAgICAgICBpZiAoYXNoaWZ0ID49IDApCisgICAgICAgICAgYnVmW2luZGV4XSB8PSAoMjU1IDw8IGFzaGlmdCk7CiAgICAgICB9CiAgICAgfQogICB9CiAKICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBpbml0SW1nKEJ1ZmZlcmVkSW1hZ2UgaW1nLCBpbnQgcGYsIGludCBmbGFncykKLSAgICB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogICAgIFdyaXRhYmxlUmFzdGVyIHdyID0gaW1nLmdldFJhc3RlcigpOwogICAgIGludCBpbWdUeXBlID0gaW1nLmdldFR5cGUoKTsKLSAgICBpZihpbWdUeXBlID09IEJ1ZmZlcmVkSW1hZ2UuVFlQRV9JTlRfUkdCCi0gICAgICB8fCBpbWdUeXBlID09IEJ1ZmZlcmVkSW1hZ2UuVFlQRV9JTlRfQkdSCi0gICAgICB8fCBpbWdUeXBlID09IEJ1ZmZlcmVkSW1hZ2UuVFlQRV9JTlRfQVJHQgotICAgICAgfHwgaW1nVHlwZSA9PSBCdWZmZXJlZEltYWdlLlRZUEVfSU5UX0FSR0JfUFJFKSB7CisgICAgaWYgKGltZ1R5cGUgPT0gQnVmZmVyZWRJbWFnZS5UWVBFX0lOVF9SR0IgfHwKKyAgICAgICAgaW1nVHlwZSA9PSBCdWZmZXJlZEltYWdlLlRZUEVfSU5UX0JHUiB8fAorICAgICAgICBpbWdUeXBlID09IEJ1ZmZlcmVkSW1hZ2UuVFlQRV9JTlRfQVJHQiB8fAorICAgICAgICBpbWdUeXBlID09IEJ1ZmZlcmVkSW1hZ2UuVFlQRV9JTlRfQVJHQl9QUkUpIHsKICAgICAgIFNpbmdsZVBpeGVsUGFja2VkU2FtcGxlTW9kZWwgc20gPQogICAgICAgICAoU2luZ2xlUGl4ZWxQYWNrZWRTYW1wbGVNb2RlbClpbWcuZ2V0U2FtcGxlTW9kZWwoKTsKICAgICAgIGludCBwaXRjaCA9IHNtLmdldFNjYW5saW5lU3RyaWRlKCk7CiAgICAgICBEYXRhQnVmZmVySW50IGRiID0gKERhdGFCdWZmZXJJbnQpd3IuZ2V0RGF0YUJ1ZmZlcigpOwogICAgICAgaW50W10gYnVmID0gZGIuZ2V0RGF0YSgpOwogICAgICAgaW5pdEludEJ1ZihidWYsIGltZy5nZXRXaWR0aCgpLCBwaXRjaCwgaW1nLmdldEhlaWdodCgpLCBwZiwgZmxhZ3MpOwotICAgIH0KLSAgICBlbHNlIHsKKyAgICB9IGVsc2UgewogICAgICAgQ29tcG9uZW50U2FtcGxlTW9kZWwgc20gPSAoQ29tcG9uZW50U2FtcGxlTW9kZWwpaW1nLmdldFNhbXBsZU1vZGVsKCk7CiAgICAgICBpbnQgcGl0Y2ggPSBzbS5nZXRTY2FubGluZVN0cmlkZSgpOwogICAgICAgRGF0YUJ1ZmZlckJ5dGUgZGIgPSAoRGF0YUJ1ZmZlckJ5dGUpd3IuZ2V0RGF0YUJ1ZmZlcigpOwpAQCAtMjUzLDM0ICsyNTcsMzUgQEAKICAgfQogCiAgIHByaXZhdGUgc3RhdGljIHZvaWQgY2hlY2tWYWwoaW50IHJvdywgaW50IGNvbCwgaW50IHYsIFN0cmluZyB2bmFtZSwgaW50IGN2KQotICAgIHRocm93cyBFeGNlcHRpb24geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogICAgIHYgPSAodiA8IDApID8gdiArIDI1NiA6IHY7Ci0gICAgaWYodiA8IGN2IC0gMSB8fCB2ID4gY3YgKyAxKSB7Ci0gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJcbkNvbXAuICIgKyB2bmFtZSArICIgYXQgIiArIHJvdyArICIsIiArIGNvbAotICAgICAgICArICIgc2hvdWxkIGJlICIgKyBjdiArICIsIG5vdCAiICsgdiArICJcbiIpOworICAgIGlmICh2IDwgY3YgLSAxIHx8IHYgPiBjdiArIDEpIHsKKyAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkNvbXAuICIgKyB2bmFtZSArICIgYXQgIiArIHJvdyArICIsIiArIGNvbCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICIgc2hvdWxkIGJlICIgKyBjdiArICIsIG5vdCAiICsgdik7CiAgICAgfQogICB9CiAKICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBjaGVja1ZhbDAoaW50IHJvdywgaW50IGNvbCwgaW50IHYsIFN0cmluZyB2bmFtZSkKLSAgICB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgdiA9ICh2IDwgMCkgPyB2ICsgMjU2IDogdjsKLSAgICBpZih2ID4gMSkgewotICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiXG5Db21wLiAiICsgdm5hbWUgKyAiIGF0ICIgKyByb3cgKyAiLCIgKyBjb2wKLSAgICAgICAgKyAiIHNob3VsZCBiZSAwLCBub3QgIiArIHYgKyAiXG4iKTsKKyAgICBpZiAodiA+IDEpIHsKKyAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkNvbXAuICIgKyB2bmFtZSArICIgYXQgIiArIHJvdyArICIsIiArIGNvbCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICIgc2hvdWxkIGJlIDAsIG5vdCAiICsgdik7CiAgICAgfQogICB9CiAKICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBjaGVja1ZhbDI1NShpbnQgcm93LCBpbnQgY29sLCBpbnQgdiwgU3RyaW5nIHZuYW1lKQotICAgIHRocm93cyBFeGNlcHRpb24geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogICAgIHYgPSAodiA8IDApID8gdiArIDI1NiA6IHY7Ci0gICAgaWYodiA8IDI1NCkgewotICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiXG5Db21wLiAiICsgdm5hbWUgKyAiIGF0ICIgKyByb3cgKyAiLCIgKyBjb2wKLSAgICAgICAgKyAiIHNob3VsZCBiZSAyNTUsIG5vdCAiICsgdiArICJcbiIpOworICAgIGlmICh2IDwgMjU0KSB7CisgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJDb21wLiAiICsgdm5hbWUgKyAiIGF0ICIgKyByb3cgKyAiLCIgKyBjb2wgKworICAgICAgICAgICAgICAgICAgICAgICAgICAiIHNob3VsZCBiZSAyNTUsIG5vdCAiICsgdik7CiAgICAgfQogICB9CiAKICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNoZWNrQnVmKGJ5dGVbXSBidWYsIGludCB3LCBpbnQgcGl0Y2gsIGludCBoLCBpbnQgcGYsCi0gICAgaW50IHN1YnNhbXAsIFRKU2NhbGluZ0ZhY3RvciBzZiwgaW50IGZsYWdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdWJzYW1wLCBUSlNjYWxpbmdGYWN0b3Igc2YsIGludCBmbGFncykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogICAgIGludCByb2Zmc2V0ID0gVEouZ2V0UmVkT2Zmc2V0KHBmKTsKICAgICBpbnQgZ29mZnNldCA9IFRKLmdldEdyZWVuT2Zmc2V0KHBmKTsKICAgICBpbnQgYm9mZnNldCA9IFRKLmdldEJsdWVPZmZzZXQocGYpOwpAQCAtMjkxLDY4ICsyOTYsNjQgQEAKICAgICBpbnQgYmxvY2tTaXplID0gOCAqIHNmLmdldE51bSgpIC8gc2YuZ2V0RGVub20oKTsKIAogICAgIHRyeSB7Ci0gICAgICBmb3Iocm93ID0gMDsgcm93IDwgaGFsZndheTsgcm93KyspIHsKLSAgICAgICAgZm9yKGNvbCA9IDA7IGNvbCA8IHc7IGNvbCsrKSB7Ci0gICAgICAgICAgaWYoKGZsYWdzICYgVEouRkxBR19CT1RUT01VUCkgIT0gMCkKKyAgICAgIGZvciAocm93ID0gMDsgcm93IDwgaGFsZndheTsgcm93KyspIHsKKyAgICAgICAgZm9yIChjb2wgPSAwOyBjb2wgPCB3OyBjb2wrKykgeworICAgICAgICAgIGlmICgoZmxhZ3MgJiBUSi5GTEFHX0JPVFRPTVVQKSAhPSAwKQogICAgICAgICAgICAgaW5kZXggPSBwaXRjaCAqIChoIC0gcm93IC0gMSkgKyBjb2wgKiBwczsKLSAgICAgICAgICBlbHNlIGluZGV4ID0gcGl0Y2ggKiByb3cgKyBjb2wgKiBwczsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBpbmRleCA9IHBpdGNoICogcm93ICsgY29sICogcHM7CiAgICAgICAgICAgYnl0ZSByID0gYnVmW2luZGV4ICsgcm9mZnNldF07CiAgICAgICAgICAgYnl0ZSBnID0gYnVmW2luZGV4ICsgZ29mZnNldF07CiAgICAgICAgICAgYnl0ZSBiID0gYnVmW2luZGV4ICsgYm9mZnNldF07CiAgICAgICAgICAgYnl0ZSBhID0gYW9mZnNldCA+PSAwID8gYnVmW2luZGV4ICsgYW9mZnNldF0gOiAoYnl0ZSkyNTU7Ci0gICAgICAgICAgaWYoKChyb3cgLyBibG9ja1NpemUpICsgKGNvbCAvIGJsb2NrU2l6ZSkpICUgMiA9PSAwKSB7Ci0gICAgICAgICAgICBpZihyb3cgPCBoYWxmd2F5KSB7CisgICAgICAgICAgaWYgKCgocm93IC8gYmxvY2tTaXplKSArIChjb2wgLyBibG9ja1NpemUpKSAlIDIgPT0gMCkgeworICAgICAgICAgICAgaWYgKHJvdyA8IGhhbGZ3YXkpIHsKICAgICAgICAgICAgICAgY2hlY2tWYWwyNTUocm93LCBjb2wsIHIsICJSIik7CiAgICAgICAgICAgICAgIGNoZWNrVmFsMjU1KHJvdywgY29sLCBnLCAiRyIpOwogICAgICAgICAgICAgICBjaGVja1ZhbDI1NShyb3csIGNvbCwgYiwgIkIiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgY2hlY2tWYWwwKHJvdywgY29sLCByLCAiUiIpOwogICAgICAgICAgICAgICBjaGVja1ZhbDAocm93LCBjb2wsIGcsICJHIik7CiAgICAgICAgICAgICAgIGNoZWNrVmFsMChyb3csIGNvbCwgYiwgIkIiKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZihzdWJzYW1wID09IFRKLlNBTVBfR1JBWSkgewotICAgICAgICAgICAgICBpZihyb3cgPCBoYWxmd2F5KSB7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChzdWJzYW1wID09IFRKLlNBTVBfR1JBWSkgeworICAgICAgICAgICAgICBpZiAocm93IDwgaGFsZndheSkgewogICAgICAgICAgICAgICAgIGNoZWNrVmFsKHJvdywgY29sLCByLCAiUiIsIDc2KTsKICAgICAgICAgICAgICAgICBjaGVja1ZhbChyb3csIGNvbCwgZywgIkciLCA3Nik7CiAgICAgICAgICAgICAgICAgY2hlY2tWYWwocm93LCBjb2wsIGIsICJCIiwgNzYpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGNoZWNrVmFsKHJvdywgY29sLCByLCAiUiIsIDIyNik7CiAgICAgICAgICAgICAgICAgY2hlY2tWYWwocm93LCBjb2wsIGcsICJHIiwgMjI2KTsKICAgICAgICAgICAgICAgICBjaGVja1ZhbChyb3csIGNvbCwgYiwgIkIiLCAyMjYpOwogICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgIGNoZWNrVmFsMjU1KHJvdywgY29sLCByLCAiUiIpOwotICAgICAgICAgICAgICBpZihyb3cgPCBoYWxmd2F5KSB7CisgICAgICAgICAgICAgIGlmIChyb3cgPCBoYWxmd2F5KSB7CiAgICAgICAgICAgICAgICAgY2hlY2tWYWwwKHJvdywgY29sLCBnLCAiRyIpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGNoZWNrVmFsMjU1KHJvdywgY29sLCBnLCAiRyIpOwogICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGNoZWNrVmFsMChyb3csIGNvbCwgYiwgIkIiKTsJCQkJCQkJCisgICAgICAgICAgICAgIGNoZWNrVmFsMChyb3csIGNvbCwgYiwgIkIiKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICB9CiAgICAgICAgICAgY2hlY2tWYWwyNTUocm93LCBjb2wsIGEsICJBIik7CiAgICAgICAgIH0KICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goRXhjZXB0aW9uIGUpIHsKLSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihlKTsKKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuIiArIGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgIHJldHZhbCA9IDA7CiAgICAgfQogCi0gICAgaWYocmV0dmFsID09IDApIHsKLSAgICAgIFN5c3RlbS5vdXQucHJpbnQoIlxuIik7Ci0gICAgICBmb3Iocm93ID0gMDsgcm93IDwgaDsgcm93KyspIHsKLSAgICAgICAgZm9yKGNvbCA9IDA7IGNvbCA8IHc7IGNvbCsrKSB7CisgICAgaWYgKHJldHZhbCA9PSAwKSB7CisgICAgICBmb3IgKHJvdyA9IDA7IHJvdyA8IGg7IHJvdysrKSB7CisgICAgICAgIGZvciAoY29sID0gMDsgY29sIDwgdzsgY29sKyspIHsKICAgICAgICAgICBpbnQgciA9IGJ1ZltwaXRjaCAqIHJvdyArIGNvbCAqIHBzICsgcm9mZnNldF07CiAgICAgICAgICAgaW50IGcgPSBidWZbcGl0Y2ggKiByb3cgKyBjb2wgKiBwcyArIGdvZmZzZXRdOwogICAgICAgICAgIGludCBiID0gYnVmW3BpdGNoICogcm93ICsgY29sICogcHMgKyBib2Zmc2V0XTsKLSAgICAgICAgICBpZihyIDwgMCkgciArPSAyNTY7ICBpZihnIDwgMCkgZyArPSAyNTY7ICBpZihiIDwgMCkgYiArPSAyNTY7CisgICAgICAgICAgaWYgKHIgPCAwKSByICs9IDI1NjsKKyAgICAgICAgICBpZiAoZyA8IDApIGcgKz0gMjU2OworICAgICAgICAgIGlmIChiIDwgMCkgYiArPSAyNTY7CiAgICAgICAgICAgU3lzdGVtLm91dC5mb3JtYXQoIiUzZC8lM2QvJTNkICIsIHIsIGcsIGIpOwogICAgICAgICB9CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIlxuIik7CkBAIC0zNjIsNyArMzYzLDggQEAKICAgfQogCiAgIHByaXZhdGUgc3RhdGljIGludCBjaGVja0ludEJ1ZihpbnRbXSBidWYsIGludCB3LCBpbnQgcGl0Y2gsIGludCBoLCBpbnQgcGYsCi0gICAgaW50IHN1YnNhbXAsIFRKU2NhbGluZ0ZhY3RvciBzZiwgaW50IGZsYWdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdWJzYW1wLCBUSlNjYWxpbmdGYWN0b3Igc2YsIGludCBmbGFncykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogICAgIGludCByc2hpZnQgPSBUSi5nZXRSZWRPZmZzZXQocGYpICogODsKICAgICBpbnQgZ3NoaWZ0ID0gVEouZ2V0R3JlZW5PZmZzZXQocGYpICogODsKICAgICBpbnQgYnNoaWZ0ID0gVEouZ2V0Qmx1ZU9mZnNldChwZikgKiA4OwpAQCAtMzcyLDQ2ICszNzQsNDIgQEAKICAgICBpbnQgYmxvY2tTaXplID0gOCAqIHNmLmdldE51bSgpIC8gc2YuZ2V0RGVub20oKTsKIAogICAgIHRyeSB7Ci0gICAgICBmb3Iocm93ID0gMDsgcm93IDwgaGFsZndheTsgcm93KyspIHsKLSAgICAgICAgZm9yKGNvbCA9IDA7IGNvbCA8IHc7IGNvbCsrKSB7Ci0gICAgICAgICAgaWYoKGZsYWdzICYgVEouRkxBR19CT1RUT01VUCkgIT0gMCkKKyAgICAgIGZvciAocm93ID0gMDsgcm93IDwgaGFsZndheTsgcm93KyspIHsKKyAgICAgICAgZm9yIChjb2wgPSAwOyBjb2wgPCB3OyBjb2wrKykgeworICAgICAgICAgIGlmICgoZmxhZ3MgJiBUSi5GTEFHX0JPVFRPTVVQKSAhPSAwKQogICAgICAgICAgICAgaW5kZXggPSBwaXRjaCAqIChoIC0gcm93IC0gMSkgKyBjb2w7Ci0gICAgICAgICAgZWxzZSBpbmRleCA9IHBpdGNoICogcm93ICsgY29sOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGluZGV4ID0gcGl0Y2ggKiByb3cgKyBjb2w7CiAgICAgICAgICAgaW50IHIgPSAoYnVmW2luZGV4XSA+PiByc2hpZnQpICYgMHhGRjsKICAgICAgICAgICBpbnQgZyA9IChidWZbaW5kZXhdID4+IGdzaGlmdCkgJiAweEZGOwogICAgICAgICAgIGludCBiID0gKGJ1ZltpbmRleF0gPj4gYnNoaWZ0KSAmIDB4RkY7CiAgICAgICAgICAgaW50IGEgPSBhc2hpZnQgPj0gMCA/IChidWZbaW5kZXhdID4+IGFzaGlmdCkgJiAweEZGIDogMjU1OwotICAgICAgICAgIGlmKCgocm93IC8gYmxvY2tTaXplKSArIChjb2wgLyBibG9ja1NpemUpKSAlIDIgPT0gMCkgewotICAgICAgICAgICAgaWYocm93IDwgaGFsZndheSkgeworICAgICAgICAgIGlmICgoKHJvdyAvIGJsb2NrU2l6ZSkgKyAoY29sIC8gYmxvY2tTaXplKSkgJSAyID09IDApIHsKKyAgICAgICAgICAgIGlmIChyb3cgPCBoYWxmd2F5KSB7CiAgICAgICAgICAgICAgIGNoZWNrVmFsMjU1KHJvdywgY29sLCByLCAiUiIpOwogICAgICAgICAgICAgICBjaGVja1ZhbDI1NShyb3csIGNvbCwgZywgIkciKTsKICAgICAgICAgICAgICAgY2hlY2tWYWwyNTUocm93LCBjb2wsIGIsICJCIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgIGNoZWNrVmFsMChyb3csIGNvbCwgciwgIlIiKTsKICAgICAgICAgICAgICAgY2hlY2tWYWwwKHJvdywgY29sLCBnLCAiRyIpOwogICAgICAgICAgICAgICBjaGVja1ZhbDAocm93LCBjb2wsIGIsICJCIik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgaWYoc3Vic2FtcCA9PSBUSi5TQU1QX0dSQVkpIHsKLSAgICAgICAgICAgICAgaWYocm93IDwgaGFsZndheSkgeworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoc3Vic2FtcCA9PSBUSi5TQU1QX0dSQVkpIHsKKyAgICAgICAgICAgICAgaWYgKHJvdyA8IGhhbGZ3YXkpIHsKICAgICAgICAgICAgICAgICBjaGVja1ZhbChyb3csIGNvbCwgciwgIlIiLCA3Nik7CiAgICAgICAgICAgICAgICAgY2hlY2tWYWwocm93LCBjb2wsIGcsICJHIiwgNzYpOwogICAgICAgICAgICAgICAgIGNoZWNrVmFsKHJvdywgY29sLCBiLCAiQiIsIDc2KTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBjaGVja1ZhbChyb3csIGNvbCwgciwgIlIiLCAyMjYpOwogICAgICAgICAgICAgICAgIGNoZWNrVmFsKHJvdywgY29sLCBnLCAiRyIsIDIyNik7CiAgICAgICAgICAgICAgICAgY2hlY2tWYWwocm93LCBjb2wsIGIsICJCIiwgMjI2KTsKICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICBjaGVja1ZhbDI1NShyb3csIGNvbCwgciwgIlIiKTsKLSAgICAgICAgICAgICAgaWYocm93IDwgaGFsZndheSkgeworICAgICAgICAgICAgICBpZiAocm93IDwgaGFsZndheSkgewogICAgICAgICAgICAgICAgIGNoZWNrVmFsMChyb3csIGNvbCwgZywgIkciKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBjaGVja1ZhbDI1NShyb3csIGNvbCwgZywgIkciKTsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBjaGVja1ZhbDAocm93LCBjb2wsIGIsICJCIik7CkBAIC00MjAsMjAgKzQxOCwyMCBAQAogICAgICAgICAgIGNoZWNrVmFsMjU1KHJvdywgY29sLCBhLCAiQSIpOwogICAgICAgICB9CiAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZSk7CisgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcbiIgKyBlLmdldE1lc3NhZ2UoKSk7CiAgICAgICByZXR2YWwgPSAwOwogICAgIH0KIAotICAgIGlmKHJldHZhbCA9PSAwKSB7Ci0gICAgICBTeXN0ZW0ub3V0LnByaW50KCJcbiIpOwotICAgICAgZm9yKHJvdyA9IDA7IHJvdyA8IGg7IHJvdysrKSB7Ci0gICAgICAgIGZvcihjb2wgPSAwOyBjb2wgPCB3OyBjb2wrKykgeworICAgIGlmIChyZXR2YWwgPT0gMCkgeworICAgICAgZm9yIChyb3cgPSAwOyByb3cgPCBoOyByb3crKykgeworICAgICAgICBmb3IgKGNvbCA9IDA7IGNvbCA8IHc7IGNvbCsrKSB7CiAgICAgICAgICAgaW50IHIgPSAoYnVmW3BpdGNoICogcm93ICsgY29sXSA+PiByc2hpZnQpICYgMHhGRjsKICAgICAgICAgICBpbnQgZyA9IChidWZbcGl0Y2ggKiByb3cgKyBjb2xdID4+IGdzaGlmdCkgJiAweEZGOwogICAgICAgICAgIGludCBiID0gKGJ1ZltwaXRjaCAqIHJvdyArIGNvbF0gPj4gYnNoaWZ0KSAmIDB4RkY7Ci0gICAgICAgICAgaWYociA8IDApIHIgKz0gMjU2OyAgaWYoZyA8IDApIGcgKz0gMjU2OyAgaWYoYiA8IDApIGIgKz0gMjU2OworICAgICAgICAgIGlmIChyIDwgMCkgciArPSAyNTY7CisgICAgICAgICAgaWYgKGcgPCAwKSBnICs9IDI1NjsKKyAgICAgICAgICBpZiAoYiA8IDApIGIgKz0gMjU2OwogICAgICAgICAgIFN5c3RlbS5vdXQuZm9ybWF0KCIlM2QvJTNkLyUzZCAiLCByLCBnLCBiKTsKICAgICAgICAgfQogICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJcbiIpOwpAQCAtNDQyLDI5ICs0NDAsMjggQEAKICAgICByZXR1cm4gcmV0dmFsOwogICB9CiAKLSAgcHJpdmF0ZSBzdGF0aWMgaW50IGNoZWNrSW1nKEJ1ZmZlcmVkSW1hZ2UgaW1nLCBpbnQgcGYsCi0gICAgaW50IHN1YnNhbXAsIFRKU2NhbGluZ0ZhY3RvciBzZiwgaW50IGZsYWdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgcHJpdmF0ZSBzdGF0aWMgaW50IGNoZWNrSW1nKEJ1ZmZlcmVkSW1hZ2UgaW1nLCBpbnQgcGYsIGludCBzdWJzYW1wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEpTY2FsaW5nRmFjdG9yIHNmLCBpbnQgZmxhZ3MpIHRocm93cyBFeGNlcHRpb24gewogICAgIFdyaXRhYmxlUmFzdGVyIHdyID0gaW1nLmdldFJhc3RlcigpOwogICAgIGludCBpbWdUeXBlID0gaW1nLmdldFR5cGUoKTsKLSAgICBpZihpbWdUeXBlID09IEJ1ZmZlcmVkSW1hZ2UuVFlQRV9JTlRfUkdCCi0gICAgICB8fCBpbWdUeXBlID09IEJ1ZmZlcmVkSW1hZ2UuVFlQRV9JTlRfQkdSCi0gICAgICB8fCBpbWdUeXBlID09IEJ1ZmZlcmVkSW1hZ2UuVFlQRV9JTlRfQVJHQgotICAgICAgfHwgaW1nVHlwZSA9PSBCdWZmZXJlZEltYWdlLlRZUEVfSU5UX0FSR0JfUFJFKSB7Ci0gICAgICAgU2luZ2xlUGl4ZWxQYWNrZWRTYW1wbGVNb2RlbCBzbSA9CisgICAgaWYgKGltZ1R5cGUgPT0gQnVmZmVyZWRJbWFnZS5UWVBFX0lOVF9SR0IgfHwKKyAgICAgICAgaW1nVHlwZSA9PSBCdWZmZXJlZEltYWdlLlRZUEVfSU5UX0JHUiB8fAorICAgICAgICBpbWdUeXBlID09IEJ1ZmZlcmVkSW1hZ2UuVFlQRV9JTlRfQVJHQiB8fAorICAgICAgICBpbWdUeXBlID09IEJ1ZmZlcmVkSW1hZ2UuVFlQRV9JTlRfQVJHQl9QUkUpIHsKKyAgICAgIFNpbmdsZVBpeGVsUGFja2VkU2FtcGxlTW9kZWwgc20gPQogICAgICAgICAoU2luZ2xlUGl4ZWxQYWNrZWRTYW1wbGVNb2RlbClpbWcuZ2V0U2FtcGxlTW9kZWwoKTsKICAgICAgIGludCBwaXRjaCA9IHNtLmdldFNjYW5saW5lU3RyaWRlKCk7CiAgICAgICBEYXRhQnVmZmVySW50IGRiID0gKERhdGFCdWZmZXJJbnQpd3IuZ2V0RGF0YUJ1ZmZlcigpOwogICAgICAgaW50W10gYnVmID0gZGIuZ2V0RGF0YSgpOwogICAgICAgcmV0dXJuIGNoZWNrSW50QnVmKGJ1ZiwgaW1nLmdldFdpZHRoKCksIHBpdGNoLCBpbWcuZ2V0SGVpZ2h0KCksIHBmLAotICAgICAgICBzdWJzYW1wLCBzZiwgZmxhZ3MpOwotICAgIH0KLSAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzYW1wLCBzZiwgZmxhZ3MpOworICAgIH0gZWxzZSB7CiAgICAgICBDb21wb25lbnRTYW1wbGVNb2RlbCBzbSA9IChDb21wb25lbnRTYW1wbGVNb2RlbClpbWcuZ2V0U2FtcGxlTW9kZWwoKTsKICAgICAgIGludCBwaXRjaCA9IHNtLmdldFNjYW5saW5lU3RyaWRlKCk7CiAgICAgICBEYXRhQnVmZmVyQnl0ZSBkYiA9IChEYXRhQnVmZmVyQnl0ZSl3ci5nZXREYXRhQnVmZmVyKCk7CiAgICAgICBieXRlW10gYnVmID0gZGIuZ2V0RGF0YSgpOwogICAgICAgcmV0dXJuIGNoZWNrQnVmKGJ1ZiwgaW1nLmdldFdpZHRoKCksIHBpdGNoLCBpbWcuZ2V0SGVpZ2h0KCksIHBmLCBzdWJzYW1wLAotICAgICAgICBzZiwgZmxhZ3MpOworICAgICAgICAgICAgICAgICAgICAgIHNmLCBmbGFncyk7CiAgICAgfQogICB9CiAKQEAgLTQ3Myw1MSArNDcwLDUyIEBACiAgIH0KIAogICBwcml2YXRlIHN0YXRpYyBpbnQgY2hlY2tCdWZZVVYoYnl0ZVtdIGJ1ZiwgaW50IHNpemUsIGludCB3LCBpbnQgaCwKLSAgICBpbnQgc3Vic2FtcCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3Vic2FtcCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgaW50IHJvdywgY29sOwotICAgIGludCBoc2YgPSBUSi5nZXRNQ1VXaWR0aChzdWJzYW1wKS84LCB2c2YgPSBUSi5nZXRNQ1VIZWlnaHQoc3Vic2FtcCkvODsKKyAgICBpbnQgaHNmID0gVEouZ2V0TUNVV2lkdGgoc3Vic2FtcCkgLyA4LCB2c2YgPSBUSi5nZXRNQ1VIZWlnaHQoc3Vic2FtcCkgLyA4OwogICAgIGludCBwdyA9IFBBRCh3LCBoc2YpLCBwaCA9IFBBRChoLCB2c2YpOwogICAgIGludCBjdyA9IHB3IC8gaHNmLCBjaCA9IHBoIC8gdnNmOwogICAgIGludCB5cGl0Y2ggPSBQQUQocHcsIDQpLCB1dnBpdGNoID0gUEFEKGN3LCA0KTsKICAgICBpbnQgcmV0dmFsID0gMTsKLSAgICBpbnQgY29ycmVjdHNpemUgPSB5cGl0Y2ggKiBwaAotICAgICAgKyAoc3Vic2FtcCA9PSBUSi5TQU1QX0dSQVkgPyAwIDogdXZwaXRjaCAqIGNoICogMik7CisgICAgaW50IGNvcnJlY3RzaXplID0geXBpdGNoICogcGggKworICAgICAgICAgICAgICAgICAgICAgIChzdWJzYW1wID09IFRKLlNBTVBfR1JBWSA/IDAgOiB1dnBpdGNoICogY2ggKiAyKTsKICAgICBpbnQgaGFsZndheSA9IDE2OwogCiAgICAgdHJ5IHsKLSAgICAgIGlmKHNpemUgIT0gY29ycmVjdHNpemUpCi0gICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlxuSW5jb3JyZWN0IHNpemUgIiArIHNpemUgKyAiLiAgU2hvdWxkIGJlICIKLSAgICAgICAgICArIGNvcnJlY3RzaXplKTsKKyAgICAgIGlmIChzaXplICE9IGNvcnJlY3RzaXplKQorICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJJbmNvcnJlY3Qgc2l6ZSAiICsgc2l6ZSArICIuICBTaG91bGQgYmUgIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVjdHNpemUpOwogCi0gICAgICBmb3Iocm93ID0gMDsgcm93IDwgcGg7IHJvdysrKSB7Ci0gICAgICAgIGZvcihjb2wgPSAwOyBjb2wgPCBwdzsgY29sKyspIHsKKyAgICAgIGZvciAocm93ID0gMDsgcm93IDwgcGg7IHJvdysrKSB7CisgICAgICAgIGZvciAoY29sID0gMDsgY29sIDwgcHc7IGNvbCsrKSB7CiAgICAgICAgICAgYnl0ZSB5ID0gYnVmW3lwaXRjaCAqIHJvdyArIGNvbF07Ci0gICAgICAgICAgaWYoKChyb3cgLyA4KSArIChjb2wgLyA4KSkgJSAyID09IDApIHsKLSAgICAgICAgICAgIGlmKHJvdyA8IGhhbGZ3YXkpIGNoZWNrVmFsMjU1KHJvdywgY29sLCB5LCAiWSIpOwotICAgICAgICAgICAgZWxzZSBjaGVja1ZhbDAocm93LCBjb2wsIHksICJZIik7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgaWYocm93IDwgaGFsZndheSkgY2hlY2tWYWwocm93LCBjb2wsIHksICJZIiwgNzYpOwotICAgICAgICAgICAgZWxzZSBjaGVja1ZhbChyb3csIGNvbCwgeSwgIlkiLCAyMjYpOworICAgICAgICAgIGlmICgoKHJvdyAvIDgpICsgKGNvbCAvIDgpKSAlIDIgPT0gMCkgeworICAgICAgICAgICAgaWYgKHJvdyA8IGhhbGZ3YXkpCisgICAgICAgICAgICAgIGNoZWNrVmFsMjU1KHJvdywgY29sLCB5LCAiWSIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBjaGVja1ZhbDAocm93LCBjb2wsIHksICJZIik7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChyb3cgPCBoYWxmd2F5KQorICAgICAgICAgICAgICBjaGVja1ZhbChyb3csIGNvbCwgeSwgIlkiLCA3Nik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGNoZWNrVmFsKHJvdywgY29sLCB5LCAiWSIsIDIyNik7CiAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICB9Ci0gICAgICBpZihzdWJzYW1wICE9IFRKLlNBTVBfR1JBWSkgeworICAgICAgaWYgKHN1YnNhbXAgIT0gVEouU0FNUF9HUkFZKSB7CiAgICAgICAgIGhhbGZ3YXkgPSAxNiAvIHZzZjsKLSAgICAgICAgZm9yKHJvdyA9IDA7IHJvdyA8IGNoOyByb3crKykgewotICAgICAgICAgIGZvcihjb2wgPSAwOyBjb2wgPCBjdzsgY29sKyspIHsKKyAgICAgICAgZm9yIChyb3cgPSAwOyByb3cgPCBjaDsgcm93KyspIHsKKyAgICAgICAgICBmb3IgKGNvbCA9IDA7IGNvbCA8IGN3OyBjb2wrKykgewogICAgICAgICAgICAgYnl0ZSB1ID0gYnVmW3lwaXRjaCAqIHBoICsgKHV2cGl0Y2ggKiByb3cgKyBjb2wpXSwKLSAgICAgICAgICAgICAgdiA9IGJ1Zlt5cGl0Y2ggKiBwaCArIHV2cGl0Y2ggKiBjaCArICh1dnBpdGNoICogcm93ICsgY29sKV07Ci0gICAgICAgICAgICBpZigoKHJvdyAqIHZzZiAvIDgpICsgKGNvbCAqIGhzZiAvIDgpKSAlIDIgPT0gMCkgeworICAgICAgICAgICAgICAgICB2ID0gYnVmW3lwaXRjaCAqIHBoICsgdXZwaXRjaCAqIGNoICsgKHV2cGl0Y2ggKiByb3cgKyBjb2wpXTsKKyAgICAgICAgICAgIGlmICgoKHJvdyAqIHZzZiAvIDgpICsgKGNvbCAqIGhzZiAvIDgpKSAlIDIgPT0gMCkgewogICAgICAgICAgICAgICBjaGVja1ZhbChyb3csIGNvbCwgdSwgIlUiLCAxMjgpOwogICAgICAgICAgICAgICBjaGVja1ZhbChyb3csIGNvbCwgdiwgIlYiLCAxMjgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgIGlmKHJvdyA8IGhhbGZ3YXkpIHsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIGlmIChyb3cgPCBoYWxmd2F5KSB7CiAgICAgICAgICAgICAgICAgY2hlY2tWYWwocm93LCBjb2wsIHUsICJVIiwgODUpOwogICAgICAgICAgICAgICAgIGNoZWNrVmFsMjU1KHJvdywgY29sLCB2LCAiViIpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGNoZWNrVmFsMChyb3csIGNvbCwgdSwgIlUiKTsKICAgICAgICAgICAgICAgICBjaGVja1ZhbChyb3csIGNvbCwgdiwgIlYiLCAxNDkpOwogICAgICAgICAgICAgICB9CkBAIC01MjUsNDcgKzUyMyw0NSBAQAogICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgfQotICAgIH0KLSAgICBjYXRjaChFeGNlcHRpb24gZSkgewotICAgICAgU3lzdGVtLm91dC5wcmludGxuKGUpOworICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG4iICsgZS5nZXRNZXNzYWdlKCkpOwogICAgICAgcmV0dmFsID0gMDsKICAgICB9CiAKLSAgICBpZihyZXR2YWwgPT0gMCkgewotICAgICAgZm9yKHJvdyA9IDA7IHJvdyA8IHBoOyByb3crKykgewotICAgICAgICBmb3IoY29sID0gMDsgY29sIDwgcHc7IGNvbCsrKSB7CisgICAgaWYgKHJldHZhbCA9PSAwKSB7CisgICAgICBmb3IgKHJvdyA9IDA7IHJvdyA8IHBoOyByb3crKykgeworICAgICAgICBmb3IgKGNvbCA9IDA7IGNvbCA8IHB3OyBjb2wrKykgewogICAgICAgICAgIGludCB5ID0gYnVmW3lwaXRjaCAqIHJvdyArIGNvbF07Ci0gICAgICAgICAgaWYoeSA8IDApIHkgKz0gMjU2OworICAgICAgICAgIGlmICh5IDwgMCkgeSArPSAyNTY7CiAgICAgICAgICAgU3lzdGVtLm91dC5mb3JtYXQoIiUzZCAiLCB5KTsKICAgICAgICAgfQogICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJcbiIpOwogICAgICAgfQogICAgICAgU3lzdGVtLm91dC5wcmludCgiXG4iKTsKLSAgICAgIGZvcihyb3cgPSAwOyByb3cgPCBjaDsgcm93KyspIHsKLSAgICAgICAgZm9yKGNvbCA9IDA7IGNvbCA8IGN3OyBjb2wrKykgeworICAgICAgZm9yIChyb3cgPSAwOyByb3cgPCBjaDsgcm93KyspIHsKKyAgICAgICAgZm9yIChjb2wgPSAwOyBjb2wgPCBjdzsgY29sKyspIHsKICAgICAgICAgICBpbnQgdSA9IGJ1Zlt5cGl0Y2ggKiBwaCArICh1dnBpdGNoICogcm93ICsgY29sKV07Ci0gICAgICAgICAgaWYodSA8IDApIHUgKz0gMjU2OworICAgICAgICAgIGlmICh1IDwgMCkgdSArPSAyNTY7CiAgICAgICAgICAgU3lzdGVtLm91dC5mb3JtYXQoIiUzZCAiLCB1KTsKICAgICAgICAgfQogICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJcbiIpOwogICAgICAgfQogICAgICAgU3lzdGVtLm91dC5wcmludCgiXG4iKTsKLSAgICAgIGZvcihyb3cgPSAwOyByb3cgPCBjaDsgcm93KyspIHsKLSAgICAgICAgZm9yKGNvbCA9IDA7IGNvbCA8IGN3OyBjb2wrKykgeworICAgICAgZm9yIChyb3cgPSAwOyByb3cgPCBjaDsgcm93KyspIHsKKyAgICAgICAgZm9yIChjb2wgPSAwOyBjb2wgPCBjdzsgY29sKyspIHsKICAgICAgICAgICBpbnQgdiA9IGJ1Zlt5cGl0Y2ggKiBwaCArIHV2cGl0Y2ggKiBjaCArICh1dnBpdGNoICogcm93ICsgY29sKV07Ci0gICAgICAgICAgaWYodiA8IDApIHYgKz0gMjU2OworICAgICAgICAgIGlmICh2IDwgMCkgdiArPSAyNTY7CiAgICAgICAgICAgU3lzdGVtLm91dC5mb3JtYXQoIiUzZCAiLCB2KTsKICAgICAgICAgfQogICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJcbiIpOwogICAgICAgfQotICAgICAgU3lzdGVtLm91dC5wcmludCgiXG4iKTsKICAgICB9CiAKICAgICByZXR1cm4gcmV0dmFsOwogICB9CiAKICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCB3cml0ZUpQRUcoYnl0ZVtdIGpwZWdCdWYsIGludCBqcGVnQnVmU2l6ZSwKLSAgICBTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBFeGNlcHRpb24gewogICAgIEZpbGUgZmlsZSA9IG5ldyBGaWxlKGZpbGVuYW1lKTsKICAgICBGaWxlT3V0cHV0U3RyZWFtIGZvcyA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKGZpbGUpOwogICAgIGZvcy53cml0ZShqcGVnQnVmLCAwLCBqcGVnQnVmU2l6ZSk7CkBAIC01NzMsOCArNTY5LDggQEAKICAgfQogCiAgIHByaXZhdGUgc3RhdGljIGludCBjb21wVGVzdChUSkNvbXByZXNzb3IgdGpjLCBieXRlW10gZHN0QnVmLCBpbnQgdywKLSAgICBpbnQgaCwgaW50IHBmLCBTdHJpbmcgYmFzZU5hbWUsIGludCBzdWJzYW1wLCBpbnQganBlZ1F1YWwsCi0gICAgaW50IGZsYWdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBoLCBpbnQgcGYsIFN0cmluZyBiYXNlTmFtZSwgaW50IHN1YnNhbXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQganBlZ1F1YWwsIGludCBmbGFncykgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgU3RyaW5nIHRlbXBzdHI7CiAgICAgYnl0ZVtdIHNyY0J1ZiA9IG51bGw7CiAgICAgQnVmZmVyZWRJbWFnZSBpbWcgPSBudWxsOwpAQCAtNTg1LDI4ICs1ODEsMzIgQEAKICAgICBpZiAoYmkpIHsKICAgICAgIHBmID0gYmlUeXBlUEYoaW1nVHlwZSk7CiAgICAgICBwZlN0ciA9IGJpVHlwZVN0cihpbWdUeXBlKTsKLSAgICB9Ci0gICAgZWxzZSBwZlN0ciA9IHBpeEZvcm1hdFN0cltwZl07CisgICAgfSBlbHNlCisgICAgICBwZlN0ciA9IHBpeEZvcm1hdFN0cltwZl07CiAgICAgcHMgPSAgVEouZ2V0UGl4ZWxTaXplKHBmKTsKIAogICAgIFN5c3RlbS5vdXQucHJpbnQocGZTdHIgKyAiICIpOwotICAgIGlmKGJpKSBTeXN0ZW0ub3V0LnByaW50KCIoIiArIHBpeEZvcm1hdFN0cltwZl0gKyAiKSAiKTsKLSAgICBpZigoZmxhZ3MgJiBUSi5GTEFHX0JPVFRPTVVQKSAhPSAwKSBTeXN0ZW0ub3V0LnByaW50KCJCb3R0b20tVXAiKTsKLSAgICBlbHNlIFN5c3RlbS5vdXQucHJpbnQoIlRvcC1Eb3duICIpOworICAgIGlmIChiaSkKKyAgICAgIFN5c3RlbS5vdXQucHJpbnQoIigiICsgcGl4Rm9ybWF0U3RyW3BmXSArICIpICIpOworICAgIGlmICgoZmxhZ3MgJiBUSi5GTEFHX0JPVFRPTVVQKSAhPSAwKQorICAgICAgU3lzdGVtLm91dC5wcmludCgiQm90dG9tLVVwIik7CisgICAgZWxzZQorICAgICAgU3lzdGVtLm91dC5wcmludCgiVG9wLURvd24gIik7CiAgICAgU3lzdGVtLm91dC5wcmludCgiIC0+ICIgKyBzdWJOYW1lTG9uZ1tzdWJzYW1wXSArICIgIik7Ci0gICAgaWYoeXV2ID09IFlVVkVOQ09ERSkgU3lzdGVtLm91dC5wcmludCgiWVVWIC4uLiAiKTsKLSAgICBlbHNlIFN5c3RlbS5vdXQucHJpbnQoIlEiICsganBlZ1F1YWwgKyAiIC4uLiAiKTsKKyAgICBpZiAoeXV2ID09IFlVVkVOQ09ERSkKKyAgICAgIFN5c3RlbS5vdXQucHJpbnQoIllVViAuLi4gIik7CisgICAgZWxzZQorICAgICAgU3lzdGVtLm91dC5wcmludCgiUSIgKyBqcGVnUXVhbCArICIgLi4uICIpOwogCi0gICAgaWYoYmkpIHsKKyAgICBpZiAoYmkpIHsKICAgICAgIGltZyA9IG5ldyBCdWZmZXJlZEltYWdlKHcsIGgsIGltZ1R5cGUpOwogICAgICAgaW5pdEltZyhpbWcsIHBmLCBmbGFncyk7Ci0gICAgICB0ZW1wc3RyID0gYmFzZU5hbWUgKyAiX2VuY18iICsgcGZTdHIgKyAiXyIKLSAgICAgICAgKyAoKChmbGFncyAmIFRKLkZMQUdfQk9UVE9NVVApICE9IDApID8gIkJVIiA6ICJURCIpICsgIl8iCi0gICAgICAgICsgc3ViTmFtZVtzdWJzYW1wXSArICJfUSIgKyBqcGVnUXVhbCArICIucG5nIjsKKyAgICAgIHRlbXBzdHIgPSBiYXNlTmFtZSArICJfZW5jXyIgKyBwZlN0ciArICJfIiArCisgICAgICAgICAgICAgICAgKCgoZmxhZ3MgJiBUSi5GTEFHX0JPVFRPTVVQKSAhPSAwKSA/ICJCVSIgOiAiVEQiKSArICJfIiArCisgICAgICAgICAgICAgICAgc3ViTmFtZVtzdWJzYW1wXSArICJfUSIgKyBqcGVnUXVhbCArICIucG5nIjsKICAgICAgIEZpbGUgZmlsZSA9IG5ldyBGaWxlKHRlbXBzdHIpOwogICAgICAgSW1hZ2VJTy53cml0ZShpbWcsICJwbmciLCBmaWxlKTsKLSAgICB9Ci0gICAgZWxzZSB7CisgICAgfSBlbHNlIHsKICAgICAgIHNyY0J1ZiA9IG5ldyBieXRlW3cgKiBoICogcHMgKyAxXTsKICAgICAgIGluaXRCdWYoc3JjQnVmLCB3LCB3ICogcHMsIGgsIHBmLCBmbGFncyk7CiAgICAgfQpAQCAtNjE1LDM2ICs2MTUsNDAgQEAKICAgICB0ID0gZ2V0VGltZSgpOwogICAgIHRqYy5zZXRTdWJzYW1wKHN1YnNhbXApOwogICAgIHRqYy5zZXRKUEVHUXVhbGl0eShqcGVnUXVhbCk7Ci0gICAgaWYoYmkpIHsKLSAgICAgIGlmKHl1diA9PSBZVVZFTkNPREUpIHRqYy5lbmNvZGVZVVYoaW1nLCBkc3RCdWYsIGZsYWdzKTsKLSAgICAgIGVsc2UgdGpjLmNvbXByZXNzKGltZywgZHN0QnVmLCBmbGFncyk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgdGpjLnNldFNvdXJjZUltYWdlKHNyY0J1ZiwgdywgMCwgaCwgcGYpOwotICAgICAgaWYoeXV2ID09IFlVVkVOQ09ERSkgdGpjLmVuY29kZVlVVihkc3RCdWYsIGZsYWdzKTsKLSAgICAgIGVsc2UgdGpjLmNvbXByZXNzKGRzdEJ1ZiwgZmxhZ3MpOworICAgIGlmIChiaSkgeworICAgICAgaWYgKHl1diA9PSBZVVZFTkNPREUpCisgICAgICAgIHRqYy5lbmNvZGVZVVYoaW1nLCBkc3RCdWYsIGZsYWdzKTsKKyAgICAgIGVsc2UKKyAgICAgICAgdGpjLmNvbXByZXNzKGltZywgZHN0QnVmLCBmbGFncyk7CisgICAgfSBlbHNlIHsKKyAgICAgIHRqYy5zZXRTb3VyY2VJbWFnZShzcmNCdWYsIDAsIDAsIHcsIDAsIGgsIHBmKTsKKyAgICAgIGlmICh5dXYgPT0gWVVWRU5DT0RFKQorICAgICAgICB0amMuZW5jb2RlWVVWKGRzdEJ1ZiwgZmxhZ3MpOworICAgICAgZWxzZQorICAgICAgICB0amMuY29tcHJlc3MoZHN0QnVmLCBmbGFncyk7CiAgICAgfQogICAgIHNpemUgPSB0amMuZ2V0Q29tcHJlc3NlZFNpemUoKTsKICAgICB0ID0gZ2V0VGltZSgpIC0gdDsKIAotICAgIGlmKHl1diA9PSBZVVZFTkNPREUpCi0gICAgICB0ZW1wc3RyID0gYmFzZU5hbWUgKyAiX2VuY18iICsgcGZTdHIgKyAiXyIKLSAgICAgICAgKyAoKChmbGFncyAmIFRKLkZMQUdfQk9UVE9NVVApICE9IDApID8gIkJVIiA6ICJURCIpICsgIl8iCi0gICAgICAgICsgc3ViTmFtZVtzdWJzYW1wXSArICIueXV2IjsKKyAgICBpZiAoeXV2ID09IFlVVkVOQ09ERSkKKyAgICAgIHRlbXBzdHIgPSBiYXNlTmFtZSArICJfZW5jXyIgKyBwZlN0ciArICJfIiArCisgICAgICAgICAgICAgICAgKCgoZmxhZ3MgJiBUSi5GTEFHX0JPVFRPTVVQKSAhPSAwKSA/ICJCVSIgOiAiVEQiKSArICJfIiArCisgICAgICAgICAgICAgICAgc3ViTmFtZVtzdWJzYW1wXSArICIueXV2IjsKICAgICBlbHNlCi0gICAgICB0ZW1wc3RyID0gYmFzZU5hbWUgKyAiX2VuY18iICsgcGZTdHIgKyAiXyIKLSAgICAgICAgKyAoKChmbGFncyAmIFRKLkZMQUdfQk9UVE9NVVApICE9IDApID8gIkJVIiA6ICJURCIpICsgIl8iCi0gICAgICAgICsgc3ViTmFtZVtzdWJzYW1wXSArICJfUSIgKyBqcGVnUXVhbCArICIuanBnIjsKKyAgICAgIHRlbXBzdHIgPSBiYXNlTmFtZSArICJfZW5jXyIgKyBwZlN0ciArICJfIiArCisgICAgICAgICAgICAgICAgKCgoZmxhZ3MgJiBUSi5GTEFHX0JPVFRPTVVQKSAhPSAwKSA/ICJCVSIgOiAiVEQiKSArICJfIiArCisgICAgICAgICAgICAgICAgc3ViTmFtZVtzdWJzYW1wXSArICJfUSIgKyBqcGVnUXVhbCArICIuanBnIjsKICAgICB3cml0ZUpQRUcoZHN0QnVmLCBzaXplLCB0ZW1wc3RyKTsKIAotICAgIGlmKHl1diA9PSBZVVZFTkNPREUpIHsKLSAgICAgIGlmKGNoZWNrQnVmWVVWKGRzdEJ1Ziwgc2l6ZSwgdywgaCwgc3Vic2FtcCkgPT0gMSkKKyAgICBpZiAoeXV2ID09IFlVVkVOQ09ERSkgeworICAgICAgaWYgKGNoZWNrQnVmWVVWKGRzdEJ1Ziwgc2l6ZSwgdywgaCwgc3Vic2FtcCkgPT0gMSkKICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiUGFzc2VkLiIpOwogICAgICAgZWxzZSB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIkZBSUxFRCEiKTsgIGV4aXRTdGF0dXMgPSAtMTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludCgiRkFJTEVEISIpOworICAgICAgICBleGl0U3RhdHVzID0gLTE7CiAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgU3lzdGVtLm91dC5wcmludCgiRG9uZS4iKTsKKyAgICB9IGVsc2UKKyAgICAgIFN5c3RlbS5vdXQucHJpbnQoIkRvbmUuIik7CiAgICAgU3lzdGVtLm91dC5mb3JtYXQoIiAgJS42ZiBtc1xuIiwgdCAqIDEwMDAuKTsKICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgUmVzdWx0IGluICIgKyB0ZW1wc3RyKTsKIApAQCAtNjUyLDggKzY1Niw5IEBACiAgIH0KIAogICBwcml2YXRlIHN0YXRpYyB2b2lkIGRlY29tcFRlc3QoVEpEZWNvbXByZXNzb3IgdGpkLCBieXRlW10ganBlZ0J1ZiwKLSAgICBpbnQganBlZ1NpemUsIGludCB3LCBpbnQgaCwgaW50IHBmLCBTdHJpbmcgYmFzZU5hbWUsIGludCBzdWJzYW1wLAotICAgIGludCBmbGFncywgVEpTY2FsaW5nRmFjdG9yIHNmKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBqcGVnU2l6ZSwgaW50IHcsIGludCBoLCBpbnQgcGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgYmFzZU5hbWUsIGludCBzdWJzYW1wLCBpbnQgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSlNjYWxpbmdGYWN0b3Igc2YpIHRocm93cyBFeGNlcHRpb24gewogICAgIFN0cmluZyBwZlN0ciwgdGVtcHN0cjsKICAgICBkb3VibGUgdDsKICAgICBpbnQgc2NhbGVkV2lkdGggPSBzZi5nZXRTY2FsZWQodyk7CkBAIC02NjIsMTM0ICs2NjcsMTQ1IEBACiAgICAgQnVmZmVyZWRJbWFnZSBpbWcgPSBudWxsOwogICAgIGJ5dGVbXSBkc3RCdWYgPSBudWxsOwogCi0gICAgaWYoeXV2ID09IFlVVkVOQ09ERSkgcmV0dXJuOworICAgIGlmICh5dXYgPT0gWVVWRU5DT0RFKSByZXR1cm47CiAKICAgICBpZiAoYmkpIHsKICAgICAgIHBmID0gYmlUeXBlUEYoaW1nVHlwZSk7CiAgICAgICBwZlN0ciA9IGJpVHlwZVN0cihpbWdUeXBlKTsKLSAgICB9Ci0gICAgZWxzZSBwZlN0ciA9IHBpeEZvcm1hdFN0cltwZl07CisgICAgfSBlbHNlCisgICAgICBwZlN0ciA9IHBpeEZvcm1hdFN0cltwZl07CiAKICAgICBTeXN0ZW0ub3V0LnByaW50KCJKUEVHIC0+ICIpOwotICAgIGlmKHl1diA9PSBZVVZERUNPREUpCi0gICAgICBTeXN0ZW0ub3V0LnByaW50KCJZVVYgIiArIHN1Yk5hbWVbc3Vic2FtcF0gKyAiIC4uLiAiKTsKKyAgICBpZiAoeXV2ID09IFlVVkRFQ09ERSkKKyAgICAgIFN5c3RlbS5vdXQucHJpbnQoIllVViAiICsgc3ViTmFtZUxvbmdbc3Vic2FtcF0gKyAiIC4uLiAiKTsKICAgICBlbHNlIHsKICAgICAgIFN5c3RlbS5vdXQucHJpbnQocGZTdHIgKyAiICIpOwotICAgICAgaWYoYmkpIFN5c3RlbS5vdXQucHJpbnQoIigiICsgcGl4Rm9ybWF0U3RyW3BmXSArICIpICIpOwotICAgICAgaWYoKGZsYWdzICYgVEouRkxBR19CT1RUT01VUCkgIT0gMCkgU3lzdGVtLm91dC5wcmludCgiQm90dG9tLVVwICIpOwotICAgICAgZWxzZSBTeXN0ZW0ub3V0LnByaW50KCJUb3AtRG93biAgIik7Ci0gICAgICBpZighc2YuaXNPbmUoKSkKKyAgICAgIGlmIChiaSkKKyAgICAgICAgU3lzdGVtLm91dC5wcmludCgiKCIgKyBwaXhGb3JtYXRTdHJbcGZdICsgIikgIik7CisgICAgICBpZiAoKGZsYWdzICYgVEouRkxBR19CT1RUT01VUCkgIT0gMCkKKyAgICAgICAgU3lzdGVtLm91dC5wcmludCgiQm90dG9tLVVwICIpOworICAgICAgZWxzZQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJUb3AtRG93biAgIik7CisgICAgICBpZiAoIXNmLmlzT25lKCkpCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoc2YuZ2V0TnVtKCkgKyAiLyIgKyBzZi5nZXREZW5vbSgpICsgIiAuLi4gIik7Ci0gICAgICBlbHNlIFN5c3RlbS5vdXQucHJpbnQoIi4uLiAiKTsKKyAgICAgIGVsc2UKKyAgICAgICAgU3lzdGVtLm91dC5wcmludCgiLi4uICIpOwogICAgIH0KIAogICAgIHQgPSBnZXRUaW1lKCk7CiAgICAgdGpkLnNldEpQRUdJbWFnZShqcGVnQnVmLCBqcGVnU2l6ZSk7Ci0gICAgaWYodGpkLmdldFdpZHRoKCkgIT0gdyB8fCB0amQuZ2V0SGVpZ2h0KCkgIT0gaAotICAgICAgfHwgdGpkLmdldFN1YnNhbXAoKSAhPSBzdWJzYW1wKQorICAgIGlmICh0amQuZ2V0V2lkdGgoKSAhPSB3IHx8IHRqZC5nZXRIZWlnaHQoKSAhPSBoIHx8CisgICAgICAgIHRqZC5nZXRTdWJzYW1wKCkgIT0gc3Vic2FtcCkKICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkluY29ycmVjdCBKUEVHIGhlYWRlciIpOwogCiAgICAgdGVtcDEgPSBzY2FsZWRXaWR0aDsKICAgICB0ZW1wMiA9IHNjYWxlZEhlaWdodDsKICAgICB0ZW1wMSA9IHRqZC5nZXRTY2FsZWRXaWR0aCh0ZW1wMSwgdGVtcDIpOwogICAgIHRlbXAyID0gdGpkLmdldFNjYWxlZEhlaWdodCh0ZW1wMSwgdGVtcDIpOwotICAgIGlmKHRlbXAxICE9IHNjYWxlZFdpZHRoIHx8IHRlbXAyICE9IHNjYWxlZEhlaWdodCkKKyAgICBpZiAodGVtcDEgIT0gc2NhbGVkV2lkdGggfHwgdGVtcDIgIT0gc2NhbGVkSGVpZ2h0KQogICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiU2NhbGVkIHNpemUgbWlzbWF0Y2giKTsKIAotICAgIGlmKHl1diA9PSBZVVZERUNPREUpIGRzdEJ1ZiA9IHRqZC5kZWNvbXByZXNzVG9ZVVYoZmxhZ3MpOworICAgIGlmICh5dXYgPT0gWVVWREVDT0RFKQorICAgICAgZHN0QnVmID0gdGpkLmRlY29tcHJlc3NUb1lVVihmbGFncyk7CiAgICAgZWxzZSB7Ci0gICAgICBpZihiaSkKKyAgICAgIGlmIChiaSkKICAgICAgICAgaW1nID0gdGpkLmRlY29tcHJlc3Moc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCwgaW1nVHlwZSwgZmxhZ3MpOwotICAgICAgZWxzZSBkc3RCdWYgPSB0amQuZGVjb21wcmVzcyhzY2FsZWRXaWR0aCwgMCwgc2NhbGVkSGVpZ2h0LCBwZiwgZmxhZ3MpOworICAgICAgZWxzZQorICAgICAgICBkc3RCdWYgPSB0amQuZGVjb21wcmVzcyhzY2FsZWRXaWR0aCwgMCwgc2NhbGVkSGVpZ2h0LCBwZiwgZmxhZ3MpOwogICAgIH0KICAgICB0ID0gZ2V0VGltZSgpIC0gdDsKIAotICAgIGlmKGJpKSB7Ci0gICAgICB0ZW1wc3RyID0gYmFzZU5hbWUgKyAiX2RlY18iICsgcGZTdHIgKyAiXyIKLSAgICAgICAgKyAoKChmbGFncyAmIFRKLkZMQUdfQk9UVE9NVVApICE9IDApID8gIkJVIiA6ICJURCIpICsgIl8iCi0gICAgICAgICsgc3ViTmFtZVtzdWJzYW1wXSArICJfIiArIChkb3VibGUpc2YuZ2V0TnVtKCkgLyAoZG91YmxlKXNmLmdldERlbm9tKCkKLSAgICAgICAgKyAieCIgKyAiLnBuZyI7CisgICAgaWYgKGJpKSB7CisgICAgICB0ZW1wc3RyID0gYmFzZU5hbWUgKyAiX2RlY18iICsgcGZTdHIgKyAiXyIgKworICAgICAgICAgICAgICAgICgoKGZsYWdzICYgVEouRkxBR19CT1RUT01VUCkgIT0gMCkgPyAiQlUiIDogIlREIikgKyAiXyIgKworICAgICAgICAgICAgICAgIHN1Yk5hbWVbc3Vic2FtcF0gKyAiXyIgKworICAgICAgICAgICAgICAgIChkb3VibGUpc2YuZ2V0TnVtKCkgLyAoZG91YmxlKXNmLmdldERlbm9tKCkgKyAieCIgKyAiLnBuZyI7CiAgICAgICBGaWxlIGZpbGUgPSBuZXcgRmlsZSh0ZW1wc3RyKTsKICAgICAgIEltYWdlSU8ud3JpdGUoaW1nLCAicG5nIiwgZmlsZSk7CiAgICAgfQogCi0gICAgaWYoeXV2ID09IFlVVkRFQ09ERSkgewotICAgICAgaWYoY2hlY2tCdWZZVVYoZHN0QnVmLCBkc3RCdWYubGVuZ3RoLCB3LCBoLCBzdWJzYW1wKSA9PSAxKQorICAgIGlmICh5dXYgPT0gWVVWREVDT0RFKSB7CisgICAgICBpZiAoY2hlY2tCdWZZVVYoZHN0QnVmLCBkc3RCdWYubGVuZ3RoLCB3LCBoLCBzdWJzYW1wKSA9PSAxKQogICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJQYXNzZWQuIik7CiAgICAgICBlbHNlIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiRkFJTEVEISIpOyAgZXhpdFN0YXR1cyA9IC0xOwogICAgICAgfQotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIGlmKChiaSAmJiBjaGVja0ltZyhpbWcsIHBmLCBzdWJzYW1wLCBzZiwgZmxhZ3MpID09IDEpCi0gICAgICAgIHx8ICghYmkgJiYgY2hlY2tCdWYoZHN0QnVmLCBzY2FsZWRXaWR0aCwgc2NhbGVkV2lkdGgKLSAgICAgICAgICAqIFRKLmdldFBpeGVsU2l6ZShwZiksIHNjYWxlZEhlaWdodCwgcGYsIHN1YnNhbXAsIHNmLCBmbGFncykgPT0gMSkpCisgICAgfSBlbHNlIHsKKyAgICAgIGlmICgoYmkgJiYgY2hlY2tJbWcoaW1nLCBwZiwgc3Vic2FtcCwgc2YsIGZsYWdzKSA9PSAxKSB8fAorICAgICAgICAgICghYmkgJiYgY2hlY2tCdWYoZHN0QnVmLCBzY2FsZWRXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlZFdpZHRoICogVEouZ2V0UGl4ZWxTaXplKHBmKSwgc2NhbGVkSGVpZ2h0LCBwZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNhbXAsIHNmLCBmbGFncykgPT0gMSkpCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIlBhc3NlZC4iKTsKICAgICAgIGVsc2UgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJGQUlMRUQhIik7ICBleGl0U3RhdHVzID0gLTE7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIkZBSUxFRCEiKTsKKyAgICAgICAgZXhpdFN0YXR1cyA9IC0xOwogICAgICAgfQogICAgIH0KICAgICBTeXN0ZW0ub3V0LmZvcm1hdCgiICAlLjZmIG1zXG4iLCB0ICogMTAwMC4pOwogICB9CiAKICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBkZWNvbXBUZXN0KFRKRGVjb21wcmVzc29yIHRqZCwgYnl0ZVtdIGpwZWdCdWYsCi0gICAgaW50IGpwZWdTaXplLCBpbnQgdywgaW50IGgsIGludCBwZiwgU3RyaW5nIGJhc2VOYW1lLCBpbnQgc3Vic2FtcCwKLSAgICBpbnQgZmxhZ3MpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGpwZWdTaXplLCBpbnQgdywgaW50IGgsIGludCBwZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBiYXNlTmFtZSwgaW50IHN1YnNhbXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MpIHRocm93cyBFeGNlcHRpb24gewogICAgIGludCBpOwotICAgIGlmKChzdWJzYW1wID09IFRKLlNBTVBfNDQ0IHx8IHN1YnNhbXAgPT0gVEouU0FNUF9HUkFZKSAmJiB5dXYgPT0gMCkgewotICAgICAgVEpTY2FsaW5nRmFjdG9yIHNmW10gPSBUSi5nZXRTY2FsaW5nRmFjdG9ycygpOwotICAgICAgZm9yKGkgPSAwOyBpIDwgc2YubGVuZ3RoOyBpKyspCisgICAgaWYgKChzdWJzYW1wID09IFRKLlNBTVBfNDQ0IHx8IHN1YnNhbXAgPT0gVEouU0FNUF9HUkFZKSAmJiB5dXYgPT0gMCkgeworICAgICAgVEpTY2FsaW5nRmFjdG9yW10gc2YgPSBUSi5nZXRTY2FsaW5nRmFjdG9ycygpOworICAgICAgZm9yIChpID0gMDsgaSA8IHNmLmxlbmd0aDsgaSsrKQogICAgICAgICBkZWNvbXBUZXN0KHRqZCwganBlZ0J1ZiwganBlZ1NpemUsIHcsIGgsIHBmLCBiYXNlTmFtZSwgc3Vic2FtcCwKLSAgICAgICAgICBmbGFncywgc2ZbaV0pOwotICAgIH0KLSAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgZmxhZ3MsIHNmW2ldKTsKKyAgICB9IGVsc2UKICAgICAgIGRlY29tcFRlc3QodGpkLCBqcGVnQnVmLCBqcGVnU2l6ZSwgdywgaCwgcGYsIGJhc2VOYW1lLCBzdWJzYW1wLAotICAgICAgICBmbGFncywgbmV3IFRKU2NhbGluZ0ZhY3RvcigxLCAxKSk7Ci0gICAgU3lzdGVtLm91dC5wcmludCgiXG4iKTsKKyAgICAgICAgICAgICAgICAgZmxhZ3MsIG5ldyBUSlNjYWxpbmdGYWN0b3IoMSwgMSkpOwogICB9CiAKICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBkb1Rlc3QoaW50IHcsIGludCBoLCBpbnRbXSBmb3JtYXRzLCBpbnQgc3Vic2FtcCwKLSAgICBTdHJpbmcgYmFzZU5hbWUpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgYmFzZU5hbWUpIHRocm93cyBFeGNlcHRpb24gewogICAgIFRKQ29tcHJlc3NvciB0amMgPSBudWxsOwogICAgIFRKRGVjb21wcmVzc29yIHRqZCA9IG51bGw7CiAgICAgaW50IHNpemU7CiAgICAgYnl0ZVtdIGRzdEJ1ZjsKIAotICAgIGlmKHl1diA9PSBZVVZFTkNPREUpIGRzdEJ1ZiA9IG5ldyBieXRlW1RKLmJ1ZlNpemVZVVYodywgaCwgc3Vic2FtcCldOwotICAgIGVsc2UgZHN0QnVmID0gbmV3IGJ5dGVbVEouYnVmU2l6ZSh3LCBoLCBzdWJzYW1wKV07CisgICAgaWYgKHl1diA9PSBZVVZFTkNPREUpCisgICAgICBkc3RCdWYgPSBuZXcgYnl0ZVtUSi5idWZTaXplWVVWKHcsIGgsIHN1YnNhbXApXTsKKyAgICBlbHNlCisgICAgICBkc3RCdWYgPSBuZXcgYnl0ZVtUSi5idWZTaXplKHcsIGgsIHN1YnNhbXApXTsKIAogICAgIHRyeSB7CiAgICAgICB0amMgPSBuZXcgVEpDb21wcmVzc29yKCk7Ci0gICAgICB0amQgPSBuZXcgVEpEZWNvbXByZXNzb3IoKTsgIAorICAgICAgdGpkID0gbmV3IFRKRGVjb21wcmVzc29yKCk7CiAKLSAgICAgIGZvcihpbnQgcGYgOiBmb3JtYXRzKSB7Ci0gICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKKyAgICAgIGZvciAoaW50IHBmIDogZm9ybWF0cykgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgewogICAgICAgICAgIGludCBmbGFncyA9IDA7Ci0gICAgICAgICAgaWYgKHN1YnNhbXAgPT0gVEouU0FNUF80MjIgfHwgc3Vic2FtcCA9PSBUSi5TQU1QXzQyMAotICAgICAgICAgICAgfHwgc3Vic2FtcCA9PSBUSi5TQU1QXzQ0MCkKKyAgICAgICAgICBpZiAoc3Vic2FtcCA9PSBUSi5TQU1QXzQyMiB8fCBzdWJzYW1wID09IFRKLlNBTVBfNDIwIHx8CisgICAgICAgICAgICAgIHN1YnNhbXAgPT0gVEouU0FNUF80NDApCiAgICAgICAgICAgICBmbGFncyB8PSBUSi5GTEFHX0ZBU1RVUFNBTVBMRTsKLSAgICAgICAgICBpZihpID09IDEpIHsKLSAgICAgICAgICAgIGlmKHl1diA9PSBZVVZERUNPREUpIHsKLSAgICAgICAgICAgICAgdGpjLmNsb3NlKCk7ICB0amQuY2xvc2UoKTsgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgZmxhZ3MgfD0gVEouRkxBR19CT1RUT01VUDsKKyAgICAgICAgICBpZiAoaSA9PSAxKSB7CisgICAgICAgICAgICBpZiAoeXV2ID09IFlVVkRFQ09ERSkgeworICAgICAgICAgICAgICB0amMuY2xvc2UoKTsKKyAgICAgICAgICAgICAgdGpkLmNsb3NlKCk7CisgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICBmbGFncyB8PSBUSi5GTEFHX0JPVFRPTVVQOwogICAgICAgICAgIH0KICAgICAgICAgICBzaXplID0gY29tcFRlc3QodGpjLCBkc3RCdWYsIHcsIGgsIHBmLCBiYXNlTmFtZSwgc3Vic2FtcCwgMTAwLAotICAgICAgICAgICAgZmxhZ3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyk7CiAgICAgICAgICAgZGVjb21wVGVzdCh0amQsIGRzdEJ1Ziwgc2l6ZSwgdywgaCwgcGYsIGJhc2VOYW1lLCBzdWJzYW1wLCBmbGFncyk7Ci0gICAgICAgICAgaWYocGYgPj0gVEouUEZfUkdCWCAmJiBwZiA8PSBUSi5QRl9YUkdCICYmICFiaSkKKyAgICAgICAgICBpZiAocGYgPj0gVEouUEZfUkdCWCAmJiBwZiA8PSBUSi5QRl9YUkdCICYmICFiaSkKICAgICAgICAgICAgIGRlY29tcFRlc3QodGpkLCBkc3RCdWYsIHNpemUsIHcsIGgsIHBmICsgKFRKLlBGX1JHQkEgLSBUSi5QRl9SR0JYKSwKLSAgICAgICAgICAgICAgYmFzZU5hbWUsIHN1YnNhbXAsIGZsYWdzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgYmFzZU5hbWUsIHN1YnNhbXAsIGZsYWdzKTsKKyAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJcbiIpOwogICAgICAgICB9CiAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBpZih0amMgIT0gbnVsbCkgdGpjLmNsb3NlKCk7Ci0gICAgICBpZih0amQgIT0gbnVsbCkgdGpkLmNsb3NlKCk7CisgICAgICBTeXN0ZW0ub3V0LnByaW50KCItLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4iKTsKKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICBpZiAodGpjICE9IG51bGwpIHRqYy5jbG9zZSgpOworICAgICAgaWYgKHRqZCAhPSBudWxsKSB0amQuY2xvc2UoKTsKICAgICAgIHRocm93IGU7CiAgICAgfQotICAgIGlmKHRqYyAhPSBudWxsKSB0amMuY2xvc2UoKTsKLSAgICBpZih0amQgIT0gbnVsbCkgdGpkLmNsb3NlKCk7CisgICAgaWYgKHRqYyAhPSBudWxsKSB0amMuY2xvc2UoKTsKKyAgICBpZiAodGpkICE9IG51bGwpIHRqZC5jbG9zZSgpOwogICB9CiAKICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBidWZTaXplVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewpAQCAtODAxLDIxICs4MTcsMjEgQEAKICAgICB0cnkgewogICAgICAgdGpjID0gbmV3IFRKQ29tcHJlc3NvcigpOwogICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCdWZmZXIgc2l6ZSByZWdyZXNzaW9uIHRlc3QiKTsKLSAgICAgIGZvcihzdWJzYW1wID0gMDsgc3Vic2FtcCA8IFRKLk5VTVNBTVA7IHN1YnNhbXArKykgewotICAgICAgICBmb3IodyA9IDE7IHcgPCA0ODsgdysrKSB7CisgICAgICBmb3IgKHN1YnNhbXAgPSAwOyBzdWJzYW1wIDwgVEouTlVNU0FNUDsgc3Vic2FtcCsrKSB7CisgICAgICAgIGZvciAodyA9IDE7IHcgPCA0ODsgdysrKSB7CiAgICAgICAgICAgaW50IG1heGggPSAodyA9PSAxKSA/IDIwNDggOiA0ODsKLSAgICAgICAgICBmb3IoaCA9IDE7IGggPCBtYXhoOyBoKyspIHsKLSAgICAgICAgICAgIGlmKGggJSAxMDAgPT0gMCkKKyAgICAgICAgICBmb3IgKGggPSAxOyBoIDwgbWF4aDsgaCsrKSB7CisgICAgICAgICAgICBpZiAoaCAlIDEwMCA9PSAwKQogICAgICAgICAgICAgICBTeXN0ZW0ub3V0LmZvcm1hdCgiJTA0ZCB4ICUwNGRcYlxiXGJcYlxiXGJcYlxiXGJcYlxiIiwgdywgaCk7CiAgICAgICAgICAgICBzcmNCdWYgPSBuZXcgYnl0ZVt3ICogaCAqIDRdOwogICAgICAgICAgICAgaWYgKHl1diA9PSBZVVZFTkNPREUpCiAgICAgICAgICAgICAgIGRzdEJ1ZiA9IG5ldyBieXRlW1RKLmJ1ZlNpemVZVVYodywgaCwgc3Vic2FtcCldOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICBkc3RCdWYgPSBuZXcgYnl0ZVtUSi5idWZTaXplKHcsIGgsIHN1YnNhbXApXTsKLSAgICAgICAgICAgIGZvcihpID0gMDsgaSA8IHcgKiBoICogNDsgaSsrKSB7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdyAqIGggKiA0OyBpKyspIHsKICAgICAgICAgICAgICAgc3JjQnVmW2ldID0gKGJ5dGUpKHIubmV4dEludCgyKSAqIDI1NSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB0amMuc2V0U291cmNlSW1hZ2Uoc3JjQnVmLCB3LCAwLCBoLCBUSi5QRl9CR1JYKTsKKyAgICAgICAgICAgIHRqYy5zZXRTb3VyY2VJbWFnZShzcmNCdWYsIDAsIDAsIHcsIDAsIGgsIFRKLlBGX0JHUlgpOwogICAgICAgICAgICAgdGpjLnNldFN1YnNhbXAoc3Vic2FtcCk7CiAgICAgICAgICAgICB0amMuc2V0SlBFR1F1YWxpdHkoMTAwKTsKICAgICAgICAgICAgIGlmICh5dXYgPT0gWVVWRU5DT0RFKQpAQCAtODI4LDEwICs4NDQsMTAgQEAKICAgICAgICAgICAgICAgZHN0QnVmID0gbmV3IGJ5dGVbVEouYnVmU2l6ZVlVVihoLCB3LCBzdWJzYW1wKV07CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgIGRzdEJ1ZiA9IG5ldyBieXRlW1RKLmJ1ZlNpemUoaCwgdywgc3Vic2FtcCldOwotICAgICAgICAgICAgZm9yKGkgPSAwOyBpIDwgaCAqIHcgKiA0OyBpKyspIHsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBoICogdyAqIDQ7IGkrKykgewogICAgICAgICAgICAgICBzcmNCdWZbaV0gPSAoYnl0ZSkoci5uZXh0SW50KDIpICogMjU1KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRqYy5zZXRTb3VyY2VJbWFnZShzcmNCdWYsIGgsIDAsIHcsIFRKLlBGX0JHUlgpOworICAgICAgICAgICAgdGpjLnNldFNvdXJjZUltYWdlKHNyY0J1ZiwgMCwgMCwgaCwgMCwgdywgVEouUEZfQkdSWCk7CiAgICAgICAgICAgICBpZiAoeXV2ID09IFlVVkVOQ09ERSkKICAgICAgICAgICAgICAgdGpjLmVuY29kZVlVVihkc3RCdWYsIDApOwogICAgICAgICAgICAgZWxzZQpAQCAtODQwLDUyICs4NTYsNTQgQEAKICAgICAgICAgfQogICAgICAgfQogICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEb25lLiAgICAgICIpOwotICAgIH0KLSAgICBjYXRjaChFeGNlcHRpb24gZSkgewotICAgICAgaWYodGpjICE9IG51bGwpIHRqYy5jbG9zZSgpOworICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgIGlmICh0amMgIT0gbnVsbCkgdGpjLmNsb3NlKCk7CiAgICAgICB0aHJvdyBlOwogICAgIH0KLSAgICBpZih0amMgIT0gbnVsbCkgdGpjLmNsb3NlKCk7CisgICAgaWYgKHRqYyAhPSBudWxsKSB0amMuY2xvc2UoKTsKICAgfQogCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmd2W10pIHsKKyAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJndikgewogICAgIHRyeSB7CiAgICAgICBTdHJpbmcgdGVzdE5hbWUgPSAiamF2YXRlc3QiOwogICAgICAgYm9vbGVhbiBkb3l1diA9IGZhbHNlOwotICAgICAgZm9yKGludCBpID0gMDsgaSA8IGFyZ3YubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgaWYoYXJndltpXS5lcXVhbHNJZ25vcmVDYXNlKCIteXV2IikpIGRveXV2ID0gdHJ1ZTsKLSAgICAgICAgaWYoYXJndltpXS5zdWJzdHJpbmcoMCwgMSkuZXF1YWxzSWdub3JlQ2FzZSgiLWgiKQotICAgICAgICAgIHx8IGFyZ3ZbaV0uZXF1YWxzSWdub3JlQ2FzZSgiLT8iKSkKKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJndi5sZW5ndGg7IGkrKykgeworICAgICAgICBpZiAoYXJndltpXS5lcXVhbHNJZ25vcmVDYXNlKCIteXV2IikpCisgICAgICAgICAgZG95dXYgPSB0cnVlOworICAgICAgICBpZiAoYXJndltpXS5zdWJzdHJpbmcoMCwgMSkuZXF1YWxzSWdub3JlQ2FzZSgiLWgiKSB8fAorICAgICAgICAgICAgYXJndltpXS5lcXVhbHNJZ25vcmVDYXNlKCItPyIpKQogICAgICAgICAgIHVzYWdlKCk7Ci0gICAgICAgIGlmKGFyZ3ZbaV0uZXF1YWxzSWdub3JlQ2FzZSgiLWJpIikpIHsKKyAgICAgICAgaWYgKGFyZ3ZbaV0uZXF1YWxzSWdub3JlQ2FzZSgiLWJpIikpIHsKICAgICAgICAgICBiaSA9IHRydWU7CiAgICAgICAgICAgdGVzdE5hbWUgPSAiamF2YWJpdGVzdCI7CiAgICAgICAgIH0KICAgICAgIH0KLSAgICAgIGlmKGRveXV2KSB5dXYgPSBZVVZFTkNPREU7Ci0gICAgICBkb1Rlc3QoMzUsIDM5LCBiaSA/IF8zYnl0ZUZvcm1hdHNCSSA6IF8zYnl0ZUZvcm1hdHMsIFRKLlNBTVBfNDQ0LCB0ZXN0TmFtZSk7Ci0gICAgICBkb1Rlc3QoMzksIDQxLCBiaSA/IF80Ynl0ZUZvcm1hdHNCSSA6IF80Ynl0ZUZvcm1hdHMsIFRKLlNBTVBfNDQ0LCB0ZXN0TmFtZSk7CisgICAgICBpZiAoZG95dXYpIHl1diA9IFlVVkVOQ09ERTsKKyAgICAgIGRvVGVzdCgzNSwgMzksIGJpID8gXzNieXRlRm9ybWF0c0JJIDogXzNieXRlRm9ybWF0cywgVEouU0FNUF80NDQsCisgICAgICAgICAgICAgdGVzdE5hbWUpOworICAgICAgZG9UZXN0KDM5LCA0MSwgYmkgPyBfNGJ5dGVGb3JtYXRzQkkgOiBfNGJ5dGVGb3JtYXRzLCBUSi5TQU1QXzQ0NCwKKyAgICAgICAgICAgICB0ZXN0TmFtZSk7CiAgICAgICBkb1Rlc3QoNDEsIDM1LCBiaSA/IF8zYnl0ZUZvcm1hdHNCSSA6IF8zYnl0ZUZvcm1hdHMsIFRKLlNBTVBfNDIyLAotICAgICAgICB0ZXN0TmFtZSk7CisgICAgICAgICAgICAgdGVzdE5hbWUpOwogICAgICAgZG9UZXN0KDM1LCAzOSwgYmkgPyBfNGJ5dGVGb3JtYXRzQkkgOiBfNGJ5dGVGb3JtYXRzLCBUSi5TQU1QXzQyMiwKLSAgICAgICAgdGVzdE5hbWUpOworICAgICAgICAgICAgIHRlc3ROYW1lKTsKICAgICAgIGRvVGVzdCgzOSwgNDEsIGJpID8gXzNieXRlRm9ybWF0c0JJIDogXzNieXRlRm9ybWF0cywgVEouU0FNUF80MjAsCi0gICAgICAgIHRlc3ROYW1lKTsKKyAgICAgICAgICAgICB0ZXN0TmFtZSk7CiAgICAgICBkb1Rlc3QoNDEsIDM1LCBiaSA/IF80Ynl0ZUZvcm1hdHNCSSA6IF80Ynl0ZUZvcm1hdHMsIFRKLlNBTVBfNDIwLAotICAgICAgICB0ZXN0TmFtZSk7CisgICAgICAgICAgICAgdGVzdE5hbWUpOwogICAgICAgZG9UZXN0KDM1LCAzOSwgYmkgPyBfM2J5dGVGb3JtYXRzQkkgOiBfM2J5dGVGb3JtYXRzLCBUSi5TQU1QXzQ0MCwKLSAgICAgICAgdGVzdE5hbWUpOworICAgICAgICAgICAgIHRlc3ROYW1lKTsKICAgICAgIGRvVGVzdCgzOSwgNDEsIGJpID8gXzRieXRlRm9ybWF0c0JJIDogXzRieXRlRm9ybWF0cywgVEouU0FNUF80NDAsCi0gICAgICAgIHRlc3ROYW1lKTsKKyAgICAgICAgICAgICB0ZXN0TmFtZSk7CiAgICAgICBkb1Rlc3QoMzUsIDM5LCBiaSA/IG9ubHlHcmF5QkkgOiBvbmx5R3JheSwgVEouU0FNUF9HUkFZLCB0ZXN0TmFtZSk7CiAgICAgICBkb1Rlc3QoMzksIDQxLCBiaSA/IF8zYnl0ZUZvcm1hdHNCSSA6IF8zYnl0ZUZvcm1hdHMsIFRKLlNBTVBfR1JBWSwKLSAgICAgICAgdGVzdE5hbWUpOworICAgICAgICAgICAgIHRlc3ROYW1lKTsKICAgICAgIGRvVGVzdCg0MSwgMzUsIGJpID8gXzRieXRlRm9ybWF0c0JJIDogXzRieXRlRm9ybWF0cywgVEouU0FNUF9HUkFZLAotICAgICAgICB0ZXN0TmFtZSk7Ci0gICAgICBpZighYmkpCisgICAgICAgICAgICAgdGVzdE5hbWUpOworICAgICAgaWYgKCFiaSkKICAgICAgICAgYnVmU2l6ZVRlc3QoKTsKICAgICAgIGlmIChkb3l1diAmJiAhYmkpIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludCgiXG5cbiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJcbi0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiIpOwogICAgICAgICB5dXYgPSBZVVZERUNPREU7CiAgICAgICAgIGRvVGVzdCg0OCwgNDgsIG9ubHlSR0IsIFRKLlNBTVBfNDQ0LCAiamF2YXRlc3RfeXV2MCIpOwogICAgICAgICBkb1Rlc3QoMzUsIDM5LCBvbmx5UkdCLCBUSi5TQU1QXzQ0NCwgImphdmF0ZXN0X3l1djEiKTsKQEAgLTkwMCw4ICs5MTgsNyBAQAogICAgICAgICBkb1Rlc3QoNDgsIDQ4LCBvbmx5R3JheSwgVEouU0FNUF9HUkFZLCAiamF2YXRlc3RfeXV2MCIpOwogICAgICAgICBkb1Rlc3QoMzksIDQxLCBvbmx5R3JheSwgVEouU0FNUF9HUkFZLCAiamF2YXRlc3RfeXV2MSIpOwogICAgICAgfQotICAgIH0KLSAgICBjYXRjaChFeGNlcHRpb24gZSkgeworICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICBleGl0U3RhdHVzID0gLTE7CiAgICAgfQpkaWZmIC0tZ2l0IGEvamF2YS9kb2MvYWxsY2xhc3Nlcy1mcmFtZS5odG1sIGIvamF2YS9kb2MvYWxsY2xhc3Nlcy1mcmFtZS5odG1sCmluZGV4IDQ4NjBkMjkuLmIyODEwYjUgMTAwNjQ0Ci0tLSBhL2phdmEvZG9jL2FsbGNsYXNzZXMtZnJhbWUuaHRtbAorKysgYi9qYXZhL2RvYy9hbGxjbGFzc2VzLWZyYW1lLmh0bWwKQEAgLTIsMTIgKzIsMTAgQEAKIDwhLS1OZXdQYWdlLS0+CiA8SFRNTD4KIDxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS42LjBfMzMpIG9uIEZyaSBKdW4gMjkgMTQ6Mjk6MTQgQ0RUIDIwMTIgLS0+CiA8VElUTEU+CiBBbGwgQ2xhc3NlcwogPC9USVRMRT4KIAotPE1FVEEgTkFNRT0iZGF0ZSIgQ09OVEVOVD0iMjAxMi0wNi0yOSI+CiAKIDxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSJzdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KIApkaWZmIC0tZ2l0IGEvamF2YS9kb2MvYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwgYi9qYXZhL2RvYy9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbAppbmRleCBhY2NmYTNmLi5kZGMzZDYzIDEwMDY0NAotLS0gYS9qYXZhL2RvYy9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbAorKysgYi9qYXZhL2RvYy9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbApAQCAtMiwxMiArMiwxMCBAQAogPCEtLU5ld1BhZ2UtLT4KIDxIVE1MPgogPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjYuMF8zMykgb24gRnJpIEp1biAyOSAxNDoyOToxNCBDRFQgMjAxMiAtLT4KIDxUSVRMRT4KIEFsbCBDbGFzc2VzCiA8L1RJVExFPgogCi08TUVUQSBOQU1FPSJkYXRlIiBDT05URU5UPSIyMDEyLTA2LTI5Ij4KIAogPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9InN0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgogCmRpZmYgLS1naXQgYS9qYXZhL2RvYy9jb25zdGFudC12YWx1ZXMuaHRtbCBiL2phdmEvZG9jL2NvbnN0YW50LXZhbHVlcy5odG1sCmluZGV4IDI2ZDZkOTUuLmU0YWRiNjcgMTAwNjQ0Ci0tLSBhL2phdmEvZG9jL2NvbnN0YW50LXZhbHVlcy5odG1sCisrKyBiL2phdmEvZG9jL2NvbnN0YW50LXZhbHVlcy5odG1sCkBAIC0yLDEyICsyLDEwIEBACiA8IS0tTmV3UGFnZS0tPgogPEhUTUw+CiA8SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNi4wXzMzKSBvbiBGcmkgSnVuIDI5IDE0OjI5OjE0IENEVCAyMDEyIC0tPgogPFRJVExFPgogQ29uc3RhbnQgRmllbGQgVmFsdWVzCiA8L1RJVExFPgogCi08TUVUQSBOQU1FPSJkYXRlIiBDT05URU5UPSIyMDEyLTA2LTI5Ij4KIAogPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9InN0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgogCmRpZmYgLS1naXQgYS9qYXZhL2RvYy9kZXByZWNhdGVkLWxpc3QuaHRtbCBiL2phdmEvZG9jL2RlcHJlY2F0ZWQtbGlzdC5odG1sCmluZGV4IDI3ZjZjYWYuLjY1OTUxZDIgMTAwNjQ0Ci0tLSBhL2phdmEvZG9jL2RlcHJlY2F0ZWQtbGlzdC5odG1sCisrKyBiL2phdmEvZG9jL2RlcHJlY2F0ZWQtbGlzdC5odG1sCkBAIC0yLDEyICsyLDEwIEBACiA8IS0tTmV3UGFnZS0tPgogPEhUTUw+CiA8SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNi4wXzMzKSBvbiBGcmkgSnVuIDI5IDE0OjI5OjE0IENEVCAyMDEyIC0tPgogPFRJVExFPgogRGVwcmVjYXRlZCBMaXN0CiA8L1RJVExFPgogCi08TUVUQSBOQU1FPSJkYXRlIiBDT05URU5UPSIyMDEyLTA2LTI5Ij4KIAogPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9InN0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgogCkBAIC04Myw4ICs4MSw0NiBAQAogPC9DRU5URVI+CiA8SFIgU0laRT0iNCIgTk9TSEFERT4KIDxCPkNvbnRlbnRzPC9CPjxVTD4KKzxMST48QSBIUkVGPSIjbWV0aG9kIj5EZXByZWNhdGVkIE1ldGhvZHM8L0E+Cis8TEk+PEEgSFJFRj0iI2NvbnN0cnVjdG9yIj5EZXByZWNhdGVkIENvbnN0cnVjdG9yczwvQT4KIDwvVUw+CiAKKzxBIE5BTUU9Im1ldGhvZCI+PCEtLSAtLT48L0E+Cis8VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgorPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Cis8VEggQUxJR049ImxlZnQiIENPTFNQQU49IjIiPjxGT05UIFNJWkU9IisyIj4KKzxCPkRlcHJlY2F0ZWQgTWV0aG9kczwvQj48L0ZPTlQ+PC9USD4KKzwvVFI+Cis8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KKzxURD48QSBIUkVGPSJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI2RlY29tcHJlc3MoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQsIGludCkiPm9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKRGVjb21wcmVzc29yLmRlY29tcHJlc3MoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQsIGludCk8L0E+Cis8QlI+CismbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8ST5Vc2UKKyA8QSBIUkVGPSJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI2RlY29tcHJlc3MoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIj48Q09ERT5USkRlY29tcHJlc3Nvci5kZWNvbXByZXNzKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KTwvQ09ERT48L0E+IGluc3RlYWQuPC9JPiZuYnNwOzwvVEQ+Cis8L1RSPgorPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Cis8VEQ+PEEgSFJFRj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjc2V0U291cmNlSW1hZ2UoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQpIj5vcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USkNvbXByZXNzb3Iuc2V0U291cmNlSW1hZ2UoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQpPC9BPgorPEJSPgorJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEk+VXNlCisgPEEgSFJFRj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjc2V0U291cmNlSW1hZ2UoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KSI+PENPREU+VEpDb21wcmVzc29yLnNldFNvdXJjZUltYWdlKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCk8L0NPREU+PC9BPiBpbnN0ZWFkLjwvST4mbmJzcDs8L1REPgorPC9UUj4KKzwvVEFCTEU+CismbmJzcDsKKzxQPgorPEEgTkFNRT0iY29uc3RydWN0b3IiPjwhLS0gLS0+PC9BPgorPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KKzxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgorPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+Cis8Qj5EZXByZWNhdGVkIENvbnN0cnVjdG9yczwvQj48L0ZPTlQ+PC9USD4KKzwvVFI+Cis8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KKzxURD48QSBIUkVGPSJvcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNUSkNvbXByZXNzb3IoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQpIj5vcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USkNvbXByZXNzb3IoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQpPC9BPgorPEJSPgorJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEk+VXNlCisgPEEgSFJFRj0ib3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjVEpDb21wcmVzc29yKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCkiPjxDT0RFPlRKQ29tcHJlc3Nvci5USkNvbXByZXNzb3IoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KTwvQ09ERT48L0E+IGluc3RlYWQuPC9JPiZuYnNwOzwvVEQ+Cis8L1RSPgorPC9UQUJMRT4KKyZuYnNwOworPFA+CiA8SFI+CiAKIApkaWZmIC0tZ2l0IGEvamF2YS9kb2MvaGVscC1kb2MuaHRtbCBiL2phdmEvZG9jL2hlbHAtZG9jLmh0bWwKaW5kZXggODcyNGFmOC4uYjkxOWQwYSAxMDA2NDQKLS0tIGEvamF2YS9kb2MvaGVscC1kb2MuaHRtbAorKysgYi9qYXZhL2RvYy9oZWxwLWRvYy5odG1sCkBAIC0yLDEyICsyLDEwIEBACiA8IS0tTmV3UGFnZS0tPgogPEhUTUw+CiA8SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNi4wXzMzKSBvbiBGcmkgSnVuIDI5IDE0OjI5OjE0IENEVCAyMDEyIC0tPgogPFRJVExFPgogQVBJIEhlbHAKIDwvVElUTEU+CiAKLTxNRVRBIE5BTUU9ImRhdGUiIENPTlRFTlQ9IjIwMTItMDYtMjkiPgogCiA8TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0ic3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+CiAKZGlmZiAtLWdpdCBhL2phdmEvZG9jL2luZGV4LWFsbC5odG1sIGIvamF2YS9kb2MvaW5kZXgtYWxsLmh0bWwKaW5kZXggNTIxMzU0MS4uNjY0Mjc2OSAxMDA2NDQKLS0tIGEvamF2YS9kb2MvaW5kZXgtYWxsLmh0bWwKKysrIGIvamF2YS9kb2MvaW5kZXgtYWxsLmh0bWwKQEAgLTIsMTIgKzIsMTAgQEAKIDwhLS1OZXdQYWdlLS0+CiA8SFRNTD4KIDxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS42LjBfMzMpIG9uIEZyaSBKdW4gMjkgMTQ6Mjk6MTQgQ0RUIDIwMTIgLS0+CiA8VElUTEU+CiBJbmRleAogPC9USVRMRT4KIAotPE1FVEEgTkFNRT0iZGF0ZSIgQ09OVEVOVD0iMjAxMi0wNi0yOSI+CiAKIDxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgogCkBAIC04Myw4ICs4MSw3IEBACiA8RFQ+PEEgSFJFRj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI2J1ZlNpemUoaW50LCBpbnQsIGludCkiPjxCPmJ1ZlNpemUoaW50LCBpbnQsIGludCk8L0I+PC9BPiAtIAogU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48QSBIUkVGPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEo8L0E+CiA8REQ+UmV0dXJucyB0aGUgbWF4aW11bSBzaXplIG9mIHRoZSBidWZmZXIgKGluIGJ5dGVzKSByZXF1aXJlZCB0byBob2xkIGEgSlBFRwotIGltYWdlIHdpdGggdGhlIGdpdmVuIHdpZHRoIGFuZCBoZWlnaHQsIGFuZCBsZXZlbCBvZiBjaHJvbWluYW5jZQotIHN1YnNhbXBsaW5nLgorIGltYWdlIHdpdGggdGhlIGdpdmVuIHdpZHRoLCBoZWlnaHQsIGFuZCBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZy4KIDxEVD48QSBIUkVGPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjYnVmU2l6ZVlVVihpbnQsIGludCwgaW50KSI+PEI+YnVmU2l6ZVlVVihpbnQsIGludCwgaW50KTwvQj48L0E+IC0gCiBTdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxBIEhSRUY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USjwvQT4KIDxERD5SZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgKGluIGJ5dGVzKSByZXF1aXJlZCB0byBob2xkIGEgWVVWIHBsYW5hcgpAQCAtMTIzLDIwICsxMjAsMjggQEAKIE1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPEEgSFJFRj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkN1c3RvbUZpbHRlci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkN1c3RvbUZpbHRlcjwvQT4KIDxERD5BIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdG8gbW9kaWZ5IHRoZSBEQ1QgY29lZmZpY2llbnRzIGFmdGVyCiAgdGhleSBhcmUgbG9zc2xlc3NseSB0cmFuc2Zvcm1lZCBidXQgYmVmb3JlIHRoZXkgYXJlIHRyYW5zY29kZWQgdG8gYSBuZXcKLSBKUEVHIGZpbGUuCisgSlBFRyBpbWFnZS4KIDwvREw+CiA8SFI+CiA8QSBOQU1FPSJfRF8iPjwhLS0gLS0+PC9BPjxIMj4KIDxCPkQ8L0I+PC9IMj4KIDxETD4KLTxEVD48QSBIUkVGPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjZGVjb21wcmVzcyhieXRlW10sIGludCwgaW50LCBpbnQsIGludCwgaW50KSI+PEI+ZGVjb21wcmVzcyhieXRlW10sIGludCwgaW50LCBpbnQsIGludCwgaW50KTwvQj48L0E+IC0gCis8RFQ+PEEgSFJFRj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI2RlY29tcHJlc3MoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIj48Qj5kZWNvbXByZXNzKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KTwvQj48L0E+IC0gCiBNZXRob2QgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPEEgSFJFRj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRGVjb21wcmVzc29yPC9BPgogPEREPkRlY29tcHJlc3MgdGhlIEpQRUcgc291cmNlIGltYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRlY29tcHJlc3NvcgogIGluc3RhbmNlIGFuZCBvdXRwdXQgYSBkZWNvbXByZXNzZWQgaW1hZ2UgdG8gdGhlIGdpdmVuIGRlc3RpbmF0aW9uIGJ1ZmZlci4KKzxEVD48QSBIUkVGPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjZGVjb21wcmVzcyhieXRlW10sIGludCwgaW50LCBpbnQsIGludCwgaW50KSI+PEI+ZGVjb21wcmVzcyhieXRlW10sIGludCwgaW50LCBpbnQsIGludCwgaW50KTwvQj48L0E+IC0gCitNZXRob2QgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPEEgSFJFRj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRGVjb21wcmVzc29yPC9BPgorPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPlVzZQorIDxBIEhSRUY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNkZWNvbXByZXNzKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KSI+PENPREU+VEpEZWNvbXByZXNzb3IuZGVjb21wcmVzcyhieXRlW10sIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCk8L0NPREU+PC9BPiBpbnN0ZWFkLjwvST4KIDxEVD48QSBIUkVGPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjZGVjb21wcmVzcyhpbnQsIGludCwgaW50LCBpbnQsIGludCkiPjxCPmRlY29tcHJlc3MoaW50LCBpbnQsIGludCwgaW50LCBpbnQpPC9CPjwvQT4gLSAKIE1ldGhvZCBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48QSBIUkVGPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpEZWNvbXByZXNzb3I8L0E+CiA8REQ+RGVjb21wcmVzcyB0aGUgSlBFRyBzb3VyY2UgaW1hZ2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGVjb21wcmVzc29yCiAgaW5zdGFuY2UgYW5kIHJldHVybiBhIGJ1ZmZlciBjb250YWluaW5nIHRoZSBkZWNvbXByZXNzZWQgaW1hZ2UuCis8RFQ+PEEgSFJFRj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI2RlY29tcHJlc3MoaW50W10sIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCkiPjxCPmRlY29tcHJlc3MoaW50W10sIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCk8L0I+PC9BPiAtIAorTWV0aG9kIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxBIEhSRUY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkRlY29tcHJlc3NvcjwvQT4KKzxERD5EZWNvbXByZXNzIHRoZSBKUEVHIHNvdXJjZSBpbWFnZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBkZWNvbXByZXNzb3IKKyBpbnN0YW5jZSBhbmQgb3V0cHV0IGEgZGVjb21wcmVzc2VkIGltYWdlIHRvIHRoZSBnaXZlbiBkZXN0aW5hdGlvbiBidWZmZXIuCiA8RFQ+PEEgSFJFRj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI2RlY29tcHJlc3MoamF2YS5hd3QuaW1hZ2UuQnVmZmVyZWRJbWFnZSwgaW50KSI+PEI+ZGVjb21wcmVzcyhCdWZmZXJlZEltYWdlLCBpbnQpPC9CPjwvQT4gLSAKIE1ldGhvZCBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48QSBIUkVGPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpEZWNvbXByZXNzb3I8L0E+CiA8REQ+RGVjb21wcmVzcyB0aGUgSlBFRyBzb3VyY2UgaW1hZ2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGVjb21wcmVzc29yCkBAIC0yMDQsOCArMjA5LDkgQEAKIDxERD5Vc2UgdGhlIGZhc3Rlc3QgRENUL0lEQ1QgYWxnb3JpdGhtIGF2YWlsYWJsZSBpbiB0aGUgdW5kZXJseWluZyBjb2RlYy4KIDxEVD48QSBIUkVGPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjRkxBR19GQVNUVVBTQU1QTEUiPjxCPkZMQUdfRkFTVFVQU0FNUExFPC9CPjwvQT4gLSAKIFN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48QSBIUkVGPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEo8L0E+Ci08REQ+V2hlbiBkZWNvbXByZXNzaW5nLCB1c2UgdGhlIGZhc3Rlc3QgY2hyb21pbmFuY2UgdXBzYW1wbGluZyBhbGdvcml0aG0KLSBhdmFpbGFibGUgaW4gdGhlIHVuZGVybHlpbmcgY29kZWMuCis8REQ+V2hlbiBkZWNvbXByZXNzaW5nIGFuIGltYWdlIHRoYXQgd2FzIGNvbXByZXNzZWQgdXNpbmcgY2hyb21pbmFuY2UKKyBzdWJzYW1wbGluZywgdXNlIHRoZSBmYXN0ZXN0IGNocm9taW5hbmNlIHVwc2FtcGxpbmcgYWxnb3JpdGhtIGF2YWlsYWJsZSBpbgorIHRoZSB1bmRlcmx5aW5nIGNvZGVjLgogPERUPjxBIEhSRUY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNGTEFHX0ZPUkNFTU1YIj48Qj5GTEFHX0ZPUkNFTU1YPC9CPjwvQT4gLSAKIFN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48QSBIUkVGPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEo8L0E+CiA8REQ+VHVybiBvZmYgQ1BVIGF1dG8tZGV0ZWN0aW9uIGFuZCBmb3JjZSBUdXJib0pQRUcgdG8gdXNlIE1NWCBjb2RlCkBAIC0yNjYsNyArMjcyLDcgQEAKIDxERD5SZXR1cm5zIG51bWVyYXRvcgogPERUPjxBIEhSRUY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNnZXRQaXhlbFNpemUoaW50KSI+PEI+Z2V0UGl4ZWxTaXplKGludCk8L0I+PC9BPiAtIAogU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48QSBIUkVGPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEo8L0E+Ci08REQ+UmV0dXJucyB0aGUgcGl4ZWwgc2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSBnaXZlbiBwaXhlbCBmb3JtYXQuCis8REQ+UmV0dXJucyB0aGUgcGl4ZWwgc2l6ZSAoaW4gYnl0ZXMpIGZvciB0aGUgZ2l2ZW4gcGl4ZWwgZm9ybWF0LgogPERUPjxBIEhSRUY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNnZXRSZWRPZmZzZXQoaW50KSI+PEI+Z2V0UmVkT2Zmc2V0KGludCk8L0I+PC9BPiAtIAogU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48QSBIUkVGPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEo8L0E+CiA8REQ+Rm9yIHRoZSBnaXZlbiBwaXhlbCBmb3JtYXQsIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHRoZSByZWQKQEAgLTI3NiwxMiArMjgyLDEyIEBACiA8REQ+UmV0dXJucyB0aGUgc2NhbGVkIHZhbHVlIG9mIDxjb2RlPmRpbWVuc2lvbjwvY29kZT4uCiA8RFQ+PEEgSFJFRj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI2dldFNjYWxlZEhlaWdodChpbnQsIGludCkiPjxCPmdldFNjYWxlZEhlaWdodChpbnQsIGludCk8L0I+PC9BPiAtIAogTWV0aG9kIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxBIEhSRUY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkRlY29tcHJlc3NvcjwvQT4KLTxERD5SZXR1cm5zIHRoZSBoZWlnaHQgb2YgdGhlIGxhcmdlc3Qgc2NhbGVkIGRvd24gaW1hZ2UgdGhhdCB0aGUgVHVyYm9KUEVHCis8REQ+UmV0dXJucyB0aGUgaGVpZ2h0IG9mIHRoZSBsYXJnZXN0IHNjYWxlZC1kb3duIGltYWdlIHRoYXQgdGhlIFR1cmJvSlBFRwogIGRlY29tcHJlc3NvciBjYW4gZ2VuZXJhdGUgd2l0aG91dCBleGNlZWRpbmcgdGhlIGRlc2lyZWQgaW1hZ2Ugd2lkdGggYW5kCiAgaGVpZ2h0LgogPERUPjxBIEhSRUY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNnZXRTY2FsZWRXaWR0aChpbnQsIGludCkiPjxCPmdldFNjYWxlZFdpZHRoKGludCwgaW50KTwvQj48L0E+IC0gCiBNZXRob2QgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPEEgSFJFRj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRGVjb21wcmVzc29yPC9BPgotPEREPlJldHVybnMgdGhlIHdpZHRoIG9mIHRoZSBsYXJnZXN0IHNjYWxlZCBkb3duIGltYWdlIHRoYXQgdGhlIFR1cmJvSlBFRworPEREPlJldHVybnMgdGhlIHdpZHRoIG9mIHRoZSBsYXJnZXN0IHNjYWxlZC1kb3duIGltYWdlIHRoYXQgdGhlIFR1cmJvSlBFRwogIGRlY29tcHJlc3NvciBjYW4gZ2VuZXJhdGUgd2l0aG91dCBleGNlZWRpbmcgdGhlIGRlc2lyZWQgaW1hZ2Ugd2lkdGggYW5kCiAgaGVpZ2h0LgogPERUPjxBIEhSRUY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNnZXRTY2FsaW5nRmFjdG9ycygpIj48Qj5nZXRTY2FsaW5nRmFjdG9ycygpPC9CPjwvQT4gLSAKQEAgLTI5NCw4ICszMDAsOCBAQAogIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRlY29tcHJlc3NvciBpbnN0YW5jZS4KIDxEVD48QSBIUkVGPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtZXIuaHRtbCNnZXRUcmFuc2Zvcm1lZFNpemVzKCkiPjxCPmdldFRyYW5zZm9ybWVkU2l6ZXMoKTwvQj48L0E+IC0gCiBNZXRob2QgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPEEgSFJFRj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybWVyLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpUcmFuc2Zvcm1lcjwvQT4KLTxERD5SZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIHNpemVzIG9mIHRoZSB0cmFuc2Zvcm1lZCBKUEVHIGltYWdlcyBmcm9tCi0gdGhlIG1vc3QgcmVjZW50IGNhbGwgdG8gPEEgSFJFRj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybWVyLmh0bWwjdHJhbnNmb3JtKGJ5dGVbXVtdLCBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USlRyYW5zZm9ybVtdLCBpbnQpIj48Q09ERT50cmFuc2Zvcm0oKTwvQ09ERT48L0E+LgorPEREPlJldHVybnMgYW4gYXJyYXkgY29udGFpbmluZyB0aGUgc2l6ZXMgb2YgdGhlIHRyYW5zZm9ybWVkIEpQRUcgaW1hZ2VzCisgZ2VuZXJhdGVkIGJ5IHRoZSBtb3N0IHJlY2VudCB0cmFuc2Zvcm0gb3BlcmF0aW9uLgogPERUPjxBIEhSRUY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNnZXRXaWR0aCgpIj48Qj5nZXRXaWR0aCgpPC9CPjwvQT4gLSAKIE1ldGhvZCBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48QSBIUkVGPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpEZWNvbXByZXNzb3I8L0E+CiA8REQ+UmV0dXJucyB0aGUgd2lkdGggb2YgdGhlIEpQRUcgaW1hZ2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGVjb21wcmVzc29yCkBAIC00NzEsOSArNDc3LDEzIEBACiA8RFQ+PEEgSFJFRj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNzZXRKUEVHUXVhbGl0eShpbnQpIj48Qj5zZXRKUEVHUXVhbGl0eShpbnQpPC9CPjwvQT4gLSAKIE1ldGhvZCBpbiBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48QSBIUkVGPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKQ29tcHJlc3NvcjwvQT4KIDxERD5TZXQgdGhlIEpQRUcgaW1hZ2UgcXVhbGl0eSBsZXZlbCBmb3Igc3Vic2VxdWVudCBjb21wcmVzcyBvcGVyYXRpb25zLgotPERUPjxBIEhSRUY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjc2V0U291cmNlSW1hZ2UoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQpIj48Qj5zZXRTb3VyY2VJbWFnZShieXRlW10sIGludCwgaW50LCBpbnQsIGludCk8L0I+PC9BPiAtIAorPERUPjxBIEhSRUY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjc2V0U291cmNlSW1hZ2UoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KSI+PEI+c2V0U291cmNlSW1hZ2UoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KTwvQj48L0E+IC0gCiBNZXRob2QgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPEEgSFJFRj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkNvbXByZXNzb3I8L0E+CiA8REQ+QXNzb2NpYXRlIGFuIHVuY29tcHJlc3NlZCBzb3VyY2UgaW1hZ2Ugd2l0aCB0aGlzIGNvbXByZXNzb3IgaW5zdGFuY2UuCis8RFQ+PEEgSFJFRj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNzZXRTb3VyY2VJbWFnZShieXRlW10sIGludCwgaW50LCBpbnQsIGludCkiPjxCPnNldFNvdXJjZUltYWdlKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50KTwvQj48L0E+IC0gCitNZXRob2QgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPEEgSFJFRj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkNvbXByZXNzb3I8L0E+Cis8REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+VXNlCisgPEEgSFJFRj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNzZXRTb3VyY2VJbWFnZShieXRlW10sIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIj48Q09ERT5USkNvbXByZXNzb3Iuc2V0U291cmNlSW1hZ2UoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KTwvQ09ERT48L0E+IGluc3RlYWQuPC9JPgogPERUPjxBIEhSRUY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjc2V0U3Vic2FtcChpbnQpIj48Qj5zZXRTdWJzYW1wKGludCk8L0I+PC9BPiAtIAogTWV0aG9kIGluIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxBIEhSRUY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpDb21wcmVzc29yPC9BPgogPEREPlNldCB0aGUgbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcgZm9yIHN1YnNlcXVlbnQgY29tcHJlc3MvZW5jb2RlCkBAIC00ODksMjMgKzQ5OSwyNyBAQAogPERUPjxBIEhSRUY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+PEI+VEpDb21wcmVzc29yPC9CPjwvQT4gLSBDbGFzcyBpbiA8QSBIUkVGPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZzwvQT48REQ+VHVyYm9KUEVHIGNvbXByZXNzb3I8RFQ+PEEgSFJFRj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNUSkNvbXByZXNzb3IoKSI+PEI+VEpDb21wcmVzc29yKCk8L0I+PC9BPiAtIAogQ29uc3RydWN0b3IgZm9yIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxBIEhSRUY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpDb21wcmVzc29yPC9BPgogPEREPkNyZWF0ZSBhIFR1cmJvSlBFRyBjb21wcmVzc29yIGluc3RhbmNlLgotPERUPjxBIEhSRUY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjVEpDb21wcmVzc29yKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50KSI+PEI+VEpDb21wcmVzc29yKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50KTwvQj48L0E+IC0gCis8RFQ+PEEgSFJFRj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNUSkNvbXByZXNzb3IoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KSI+PEI+VEpDb21wcmVzc29yKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCk8L0I+PC9BPiAtIAogQ29uc3RydWN0b3IgZm9yIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxBIEhSRUY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpDb21wcmVzc29yPC9BPgogPEREPkNyZWF0ZSBhIFR1cmJvSlBFRyBjb21wcmVzc29yIGluc3RhbmNlIGFuZCBhc3NvY2lhdGUgdGhlIHVuY29tcHJlc3NlZAotIHNvdXJjZSBpbWFnZSBzdG9yZWQgaW4gPGNvZGU+c3JjSW1hZ2U8L2NvZGU+IHdpdGggdGhlIG5ld2x5LWNyZWF0ZWQKKyBzb3VyY2UgaW1hZ2Ugc3RvcmVkIGluIDxjb2RlPnNyY0ltYWdlPC9jb2RlPiB3aXRoIHRoZSBuZXdseSBjcmVhdGVkCiAgaW5zdGFuY2UuCis8RFQ+PEEgSFJFRj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNUSkNvbXByZXNzb3IoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQpIj48Qj5USkNvbXByZXNzb3IoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQpPC9CPjwvQT4gLSAKK0NvbnN0cnVjdG9yIGZvciBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48QSBIUkVGPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKQ29tcHJlc3NvcjwvQT4KKzxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5Vc2UKKyA8QSBIUkVGPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sI1RKQ29tcHJlc3NvcihieXRlW10sIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIj48Q09ERT5USkNvbXByZXNzb3IuVEpDb21wcmVzc29yKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCk8L0NPREU+PC9BPiBpbnN0ZWFkLjwvST4KIDxEVD48QSBIUkVGPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ3VzdG9tRmlsdGVyLmh0bWwiIHRpdGxlPSJpbnRlcmZhY2UgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPjxCPlRKQ3VzdG9tRmlsdGVyPC9CPjwvQT4gLSBJbnRlcmZhY2UgaW4gPEEgSFJFRj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWc8L0E+PEREPkN1c3RvbSBmaWx0ZXIgY2FsbGJhY2sgaW50ZXJmYWNlPERUPjxBIEhSRUY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj48Qj5USkRlY29tcHJlc3NvcjwvQj48L0E+IC0gQ2xhc3MgaW4gPEEgSFJFRj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWc8L0E+PEREPlR1cmJvSlBFRyBkZWNvbXByZXNzb3I8RFQ+PEEgSFJFRj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI1RKRGVjb21wcmVzc29yKCkiPjxCPlRKRGVjb21wcmVzc29yKCk8L0I+PC9BPiAtIAogQ29uc3RydWN0b3IgZm9yIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxBIEhSRUY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkRlY29tcHJlc3NvcjwvQT4KIDxERD5DcmVhdGUgYSBUdXJib0pQRUcgZGVjb21wcmVzc3NvciBpbnN0YW5jZS4KIDxEVD48QSBIUkVGPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjVEpEZWNvbXByZXNzb3IoYnl0ZVtdKSI+PEI+VEpEZWNvbXByZXNzb3IoYnl0ZVtdKTwvQj48L0E+IC0gCiBDb25zdHJ1Y3RvciBmb3IgY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPEEgSFJFRj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRGVjb21wcmVzc29yPC9BPgogPEREPkNyZWF0ZSBhIFR1cmJvSlBFRyBkZWNvbXByZXNzb3IgaW5zdGFuY2UgYW5kIGFzc29jaWF0ZSB0aGUgSlBFRyBpbWFnZQotIHN0b3JlZCBpbiA8Y29kZT5qcGVnSW1hZ2U8L2NvZGU+IHdpdGggdGhlIG5ld2x5LWNyZWF0ZWQgaW5zdGFuY2UuCisgc3RvcmVkIGluIDxjb2RlPmpwZWdJbWFnZTwvY29kZT4gd2l0aCB0aGUgbmV3bHkgY3JlYXRlZCBpbnN0YW5jZS4KIDxEVD48QSBIUkVGPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjVEpEZWNvbXByZXNzb3IoYnl0ZVtdLCBpbnQpIj48Qj5USkRlY29tcHJlc3NvcihieXRlW10sIGludCk8L0I+PC9BPiAtIAogQ29uc3RydWN0b3IgZm9yIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxBIEhSRUY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USkRlY29tcHJlc3NvcjwvQT4KIDxERD5DcmVhdGUgYSBUdXJib0pQRUcgZGVjb21wcmVzc29yIGluc3RhbmNlIGFuZCBhc3NvY2lhdGUgdGhlIEpQRUcgaW1hZ2UKICBvZiBsZW5ndGggPGNvZGU+aW1hZ2VTaXplPC9jb2RlPiBieXRlcyBzdG9yZWQgaW4gPGNvZGU+anBlZ0ltYWdlPC9jb2RlPgotIHdpdGggdGhlIG5ld2x5LWNyZWF0ZWQgaW5zdGFuY2UuCisgd2l0aCB0aGUgbmV3bHkgY3JlYXRlZCBpbnN0YW5jZS4KIDxEVD48QSBIUkVGPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKU2NhbGluZ0ZhY3Rvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPjxCPlRKU2NhbGluZ0ZhY3RvcjwvQj48L0E+IC0gQ2xhc3MgaW4gPEEgSFJFRj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9wYWNrYWdlLXN1bW1hcnkuaHRtbCI+b3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWc8L0E+PEREPkZyYWN0aW9uYWwgc2NhbGluZyBmYWN0b3I8RFQ+PEEgSFJFRj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlNjYWxpbmdGYWN0b3IuaHRtbCNUSlNjYWxpbmdGYWN0b3IoaW50LCBpbnQpIj48Qj5USlNjYWxpbmdGYWN0b3IoaW50LCBpbnQpPC9CPjwvQT4gLSAKIENvbnN0cnVjdG9yIGZvciBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48QSBIUkVGPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKU2NhbGluZ0ZhY3Rvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKU2NhbGluZ0ZhY3RvcjwvQT4KIDxERD4mbmJzcDsKQEAgLTUyNCwxMiArNTM4LDEyIEBACiA8RFQ+PEEgSFJFRj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybWVyLmh0bWwjVEpUcmFuc2Zvcm1lcihieXRlW10pIj48Qj5USlRyYW5zZm9ybWVyKGJ5dGVbXSk8L0I+PC9BPiAtIAogQ29uc3RydWN0b3IgZm9yIGNsYXNzIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLjxBIEhSRUY9Ii4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm1lci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKVHJhbnNmb3JtZXI8L0E+CiA8REQ+Q3JlYXRlIGEgVHVyYm9KUEVHIGxvc3NsZXNzIHRyYW5zZm9ybWVyIGluc3RhbmNlIGFuZCBhc3NvY2lhdGUgdGhlIEpQRUcKLSBpbWFnZSBzdG9yZWQgaW4gPGNvZGU+anBlZ0ltYWdlPC9jb2RlPiB3aXRoIHRoZSBuZXdseS1jcmVhdGVkIGluc3RhbmNlLgorIGltYWdlIHN0b3JlZCBpbiA8Y29kZT5qcGVnSW1hZ2U8L2NvZGU+IHdpdGggdGhlIG5ld2x5IGNyZWF0ZWQgaW5zdGFuY2UuCiA8RFQ+PEEgSFJFRj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybWVyLmh0bWwjVEpUcmFuc2Zvcm1lcihieXRlW10sIGludCkiPjxCPlRKVHJhbnNmb3JtZXIoYnl0ZVtdLCBpbnQpPC9CPjwvQT4gLSAKIENvbnN0cnVjdG9yIGZvciBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48QSBIUkVGPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtZXIuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj5USlRyYW5zZm9ybWVyPC9BPgogPEREPkNyZWF0ZSBhIFR1cmJvSlBFRyBsb3NzbGVzcyB0cmFuc2Zvcm1lciBpbnN0YW5jZSBhbmQgYXNzb2NpYXRlIHRoZSBKUEVHCiAgaW1hZ2Ugb2YgbGVuZ3RoIDxjb2RlPmltYWdlU2l6ZTwvY29kZT4gYnl0ZXMgc3RvcmVkIGluCi0gPGNvZGU+anBlZ0ltYWdlPC9jb2RlPiB3aXRoIHRoZSBuZXdseS1jcmVhdGVkIGluc3RhbmNlLgorIDxjb2RlPmpwZWdJbWFnZTwvY29kZT4gd2l0aCB0aGUgbmV3bHkgY3JlYXRlZCBpbnN0YW5jZS4KIDxEVD48QSBIUkVGPSIuL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtZXIuaHRtbCN0cmFuc2Zvcm0oYnl0ZVtdW10sIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKVHJhbnNmb3JtW10sIGludCkiPjxCPnRyYW5zZm9ybShieXRlW11bXSwgVEpUcmFuc2Zvcm1bXSwgaW50KTwvQj48L0E+IC0gCiBNZXRob2QgaW4gY2xhc3Mgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuPEEgSFJFRj0iLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybWVyLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+VEpUcmFuc2Zvcm1lcjwvQT4KIDxERD5Mb3NzbGVzc2x5IHRyYW5zZm9ybSB0aGUgSlBFRyBpbWFnZSBhc3NvY2lhdGVkIHdpdGggdGhpcyB0cmFuc2Zvcm1lcgpkaWZmIC0tZ2l0IGEvamF2YS9kb2MvaW5kZXguaHRtbCBiL2phdmEvZG9jL2luZGV4Lmh0bWwKaW5kZXggOTNjNTBhZi4uMzU2Y2QxZCAxMDA2NDQKLS0tIGEvamF2YS9kb2MvaW5kZXguaHRtbAorKysgYi9qYXZhL2RvYy9pbmRleC5odG1sCkBAIC0yLDcgKzIsNiBAQAogPCEtLU5ld1BhZ2UtLT4KIDxIVE1MPgogPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIEZyaSBKdW4gMjkgMTQ6Mjk6MTQgQ0RUIDIwMTItLT4KIDxUSVRMRT4KIEdlbmVyYXRlZCBEb2N1bWVudGF0aW9uIChVbnRpdGxlZCkKIDwvVElUTEU+CkBAIC0xMCw4ICs5LDQyIEBACiAgICAgdGFyZ2V0UGFnZSA9ICIiICsgd2luZG93LmxvY2F0aW9uLnNlYXJjaDsKICAgICBpZiAodGFyZ2V0UGFnZSAhPSAiIiAmJiB0YXJnZXRQYWdlICE9ICJ1bmRlZmluZWQiKQogICAgICAgICB0YXJnZXRQYWdlID0gdGFyZ2V0UGFnZS5zdWJzdHJpbmcoMSk7Ci0gICAgaWYgKHRhcmdldFBhZ2UuaW5kZXhPZigiOiIpICE9IC0xKQorICAgIGlmICh0YXJnZXRQYWdlLmluZGV4T2YoIjoiKSAhPSAtMSB8fCAodGFyZ2V0UGFnZSAhPSAiIiAmJiAhdmFsaWRVUkwodGFyZ2V0UGFnZSkpKQogICAgICAgICB0YXJnZXRQYWdlID0gInVuZGVmaW5lZCI7CisgICAgZnVuY3Rpb24gdmFsaWRVUkwodXJsKSB7CisgICAgICAgIHZhciBwb3MgPSB1cmwuaW5kZXhPZigiLmh0bWwiKTsKKyAgICAgICAgaWYgKHBvcyA9PSAtMSB8fCBwb3MgIT0gdXJsLmxlbmd0aCAtIDUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHZhciBhbGxvd051bWJlciA9IGZhbHNlOworICAgICAgICB2YXIgYWxsb3dTZXAgPSBmYWxzZTsKKyAgICAgICAgdmFyIHNlZW5Eb3QgPSBmYWxzZTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1cmwubGVuZ3RoIC0gNTsgaSsrKSB7CisgICAgICAgICAgICB2YXIgY2ggPSB1cmwuY2hhckF0KGkpOworICAgICAgICAgICAgaWYgKCdhJyA8PSBjaCAmJiBjaCA8PSAneicgfHwKKyAgICAgICAgICAgICAgICAgICAgJ0EnIDw9IGNoICYmIGNoIDw9ICdaJyB8fAorICAgICAgICAgICAgICAgICAgICBjaCA9PSAnJCcgfHwKKyAgICAgICAgICAgICAgICAgICAgY2ggPT0gJ18nKSB7CisgICAgICAgICAgICAgICAgYWxsb3dOdW1iZXIgPSB0cnVlOworICAgICAgICAgICAgICAgIGFsbG93U2VwID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoJzAnIDw9IGNoICYmIGNoIDw9ICc5JworICAgICAgICAgICAgICAgICAgICB8fCBjaCA9PSAnLScpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWFsbG93TnVtYmVyKQorICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAnLycgfHwgY2ggPT0gJy4nKSB7CisgICAgICAgICAgICAgICAgaWYgKCFhbGxvd1NlcCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGFsbG93TnVtYmVyID0gZmFsc2U7CisgICAgICAgICAgICAgICAgYWxsb3dTZXAgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJy4nKQorICAgICAgICAgICAgICAgICAgICAgc2VlbkRvdCA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKGNoID09ICcvJyAmJiBzZWVuRG90KQorICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogICAgIGZ1bmN0aW9uIGxvYWRGcmFtZXMoKSB7CiAgICAgICAgIGlmICh0YXJnZXRQYWdlICE9ICIiICYmIHRhcmdldFBhZ2UgIT0gInVuZGVmaW5lZCIpCiAgICAgICAgICAgICAgdG9wLmNsYXNzRnJhbWUubG9jYXRpb24gPSB0b3AudGFyZ2V0UGFnZTsKZGlmZiAtLWdpdCBhL2phdmEvZG9jL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwgYi9qYXZhL2RvYy9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sCmluZGV4IDMyNmIyMmYuLmY5MDU0MDYgMTAwNjQ0Ci0tLSBhL2phdmEvZG9jL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwKKysrIGIvamF2YS9kb2Mvb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbApAQCAtMiwxMiArMiwxMCBAQAogPCEtLU5ld1BhZ2UtLT4KIDxIVE1MPgogPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjYuMF8zMykgb24gRnJpIEp1biAyOSAxNDoyOToxMyBDRFQgMjAxMiAtLT4KIDxUSVRMRT4KIFRKCiA8L1RJVExFPgogCi08TUVUQSBOQU1FPSJkYXRlIiBDT05URU5UPSIyMDEyLTA2LTI5Ij4KIAogPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgogCkBAIC0xNDYsOCArMTQ0LDkgQEAKIDxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI0ZMQUdfRkFTVFVQU0FNUExFIj5GTEFHX0ZBU1RVUFNBTVBMRTwvQT48L0I+PC9DT0RFPgogCiA8QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtXaGVuIGRlY29tcHJlc3NpbmcsIHVzZSB0aGUgZmFzdGVzdCBjaHJvbWluYW5jZSB1cHNhbXBsaW5nIGFsZ29yaXRobQotIGF2YWlsYWJsZSBpbiB0aGUgdW5kZXJseWluZyBjb2RlYy48L1REPgorJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7V2hlbiBkZWNvbXByZXNzaW5nIGFuIGltYWdlIHRoYXQgd2FzIGNvbXByZXNzZWQgdXNpbmcgY2hyb21pbmFuY2UKKyBzdWJzYW1wbGluZywgdXNlIHRoZSBmYXN0ZXN0IGNocm9taW5hbmNlIHVwc2FtcGxpbmcgYWxnb3JpdGhtIGF2YWlsYWJsZSBpbgorIHRoZSB1bmRlcmx5aW5nIGNvZGVjLjwvVEQ+CiA8L1RSPgogPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CiA8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CkBAIC0zNjQsOCArMzYzLDcgQEAKIAogPEJSPgogJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWF4aW11bSBzaXplIG9mIHRoZSBidWZmZXIgKGluIGJ5dGVzKSByZXF1aXJlZCB0byBob2xkIGEgSlBFRwotIGltYWdlIHdpdGggdGhlIGdpdmVuIHdpZHRoIGFuZCBoZWlnaHQsIGFuZCBsZXZlbCBvZiBjaHJvbWluYW5jZQotIHN1YnNhbXBsaW5nLjwvVEQ+CisgaW1hZ2Ugd2l0aCB0aGUgZ2l2ZW4gd2lkdGgsIGhlaWdodCwgYW5kIGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nLjwvVEQ+CiA8L1RSPgogPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CiA8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CkBAIC00MjAsNyArNDE4LDcgQEAKIDxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI2dldFBpeGVsU2l6ZShpbnQpIj5nZXRQaXhlbFNpemU8L0E+PC9CPihpbnQmbmJzcDtwaXhlbEZvcm1hdCk8L0NPREU+CiAKIDxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHBpeGVsIHNpemUgKGluIGJ5dGVzKSBvZiB0aGUgZ2l2ZW4gcGl4ZWwgZm9ybWF0LjwvVEQ+CismbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBwaXhlbCBzaXplIChpbiBieXRlcykgZm9yIHRoZSBnaXZlbiBwaXhlbCBmb3JtYXQuPC9URD4KIDwvVFI+CiA8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KIDxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KQEAgLTUzNCw2ICs1MzIsNyBAQAogPERMPgogPEREPjQ6NDowIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nLiAgVGhlIEpQRUcgb3IgWVVWIGltYWdlIHdpbGwgY29udGFpbiBvbmUKICBjaHJvbWluYW5jZSBjb21wb25lbnQgZm9yIGV2ZXJ5IDF4MiBibG9jayBvZiBwaXhlbHMgaW4gdGhlIHNvdXJjZSBpbWFnZS4KKyBOb3RlIHRoYXQgNDo0OjAgc3Vic2FtcGxpbmcgaXMgbm90IGZ1bGx5IGFjY2VsZXJhdGVkIGluIGxpYmpwZWctdHVyYm8uCiA8UD4KIDxETD4KIDxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKLlNBTVBfNDQwIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KQEAgLTc3OSwxMSArNzc4LDExIEBACiA8UFJFPgogcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+RkxBR19GQVNUVVBTQU1QTEU8L0I+PC9QUkU+CiA8REw+Ci08REQ+V2hlbiBkZWNvbXByZXNzaW5nLCB1c2UgdGhlIGZhc3Rlc3QgY2hyb21pbmFuY2UgdXBzYW1wbGluZyBhbGdvcml0aG0KLSBhdmFpbGFibGUgaW4gdGhlIHVuZGVybHlpbmcgY29kZWMuICBUaGUgZGVmYXVsdCBpcyB0byB1c2Ugc21vb3RoCi0gdXBzYW1wbGluZywgd2hpY2ggY3JlYXRlcyBhIHNtb290aCB0cmFuc2l0aW9uIGJldHdlZW4gbmVpZ2hib3JpbmcKLSBjaHJvbWluYW5jZSBjb21wb25lbnRzIGluIG9yZGVyIHRvIHJlZHVjZSB1cHNhbXBsaW5nIGFydGlmYWN0cyBpbiB0aGUKLSBkZWNvbXByZXNzZWQgaW1hZ2UuCis8REQ+V2hlbiBkZWNvbXByZXNzaW5nIGFuIGltYWdlIHRoYXQgd2FzIGNvbXByZXNzZWQgdXNpbmcgY2hyb21pbmFuY2UKKyBzdWJzYW1wbGluZywgdXNlIHRoZSBmYXN0ZXN0IGNocm9taW5hbmNlIHVwc2FtcGxpbmcgYWxnb3JpdGhtIGF2YWlsYWJsZSBpbgorIHRoZSB1bmRlcmx5aW5nIGNvZGVjLiAgVGhlIGRlZmF1bHQgaXMgdG8gdXNlIHNtb290aCB1cHNhbXBsaW5nLCB3aGljaAorIGNyZWF0ZXMgYSBzbW9vdGggdHJhbnNpdGlvbiBiZXR3ZWVuIG5laWdoYm9yaW5nIGNocm9taW5hbmNlIGNvbXBvbmVudHMgaW4KKyBvcmRlciB0byByZWR1Y2UgdXBzYW1wbGluZyBhcnRpZmFjdHMgaW4gdGhlIGRlY29tcHJlc3NlZCBpbWFnZS4KIDxQPgogPERMPgogPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEouRkxBR19GQVNUVVBTQU1QTEUiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgpAQCAtNzk2LDExICs3OTUsMTEgQEAKIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPkZMQUdfRkFTVERDVDwvQj48L1BSRT4KIDxETD4KIDxERD5Vc2UgdGhlIGZhc3Rlc3QgRENUL0lEQ1QgYWxnb3JpdGhtIGF2YWlsYWJsZSBpbiB0aGUgdW5kZXJseWluZyBjb2RlYy4gIFRoZQotIGRlZmF1bHQgaWYgdGhpcyBmbGFnIGlzIG5vdCBzcGVjaWZpZWQgaXMgaW1wbGVtZW50YXRpb24tc3BlY2lmaWMuICBUaGUKLSBsaWJqcGVnIGltcGxlbWVudGF0aW9uLCBmb3IgZXhhbXBsZSwgdXNlcyB0aGUgZmFzdCBhbGdvcml0aG0gYnkgZGVmYXVsdAotIHdoZW4gY29tcHJlc3NpbmcsIGJlY2F1c2UgdGhpcyBoYXMgYmVlbiBzaG93biB0byBoYXZlIG9ubHkgYSB2ZXJ5IHNsaWdodAotIGVmZmVjdCBvbiBhY2N1cmFjeSwgYnV0IGl0IHVzZXMgdGhlIGFjY3VyYXRlIGFsZ29yaXRobSB3aGVuIGRlY29tcHJlc3NpbmcsCi0gYmVjYXVzZSB0aGlzIGhhcyBiZWVuIHNob3duIHRvIGhhdmUgYSBsYXJnZXIgZWZmZWN0LgorIGRlZmF1bHQgaWYgdGhpcyBmbGFnIGlzIG5vdCBzcGVjaWZpZWQgaXMgaW1wbGVtZW50YXRpb24tc3BlY2lmaWMuICBGb3IKKyBleGFtcGxlLCB0aGUgaW1wbGVtZW50YXRpb24gb2YgVHVyYm9KUEVHIGZvciBsaWJqcGVnWy10dXJib10gdXNlcyB0aGUgZmFzdAorIGFsZ29yaXRobSBieSBkZWZhdWx0IHdoZW4gY29tcHJlc3NpbmcsIGJlY2F1c2UgdGhpcyBoYXMgYmVlbiBzaG93biB0byBoYXZlCisgb25seSBhIHZlcnkgc2xpZ2h0IGVmZmVjdCBvbiBhY2N1cmFjeSwgYnV0IGl0IHVzZXMgdGhlIGFjY3VyYXRlIGFsZ29yaXRobQorIHdoZW4gZGVjb21wcmVzc2luZywgYmVjYXVzZSB0aGlzIGhhcyBiZWVuIHNob3duIHRvIGhhdmUgYSBsYXJnZXIgZWZmZWN0LgogPFA+CiA8REw+CiA8RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USi5GTEFHX0ZBU1REQ1QiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgpAQCAtODE0LDExICs4MTMsMTEgQEAKIDxETD4KIDxERD5Vc2UgdGhlIG1vc3QgYWNjdXJhdGUgRENUL0lEQ1QgYWxnb3JpdGhtIGF2YWlsYWJsZSBpbiB0aGUgdW5kZXJseWluZwogIGNvZGVjLiAgVGhlIGRlZmF1bHQgaWYgdGhpcyBmbGFnIGlzIG5vdCBzcGVjaWZpZWQgaXMKLSBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYy4gIFRoZSBsaWJqcGVnIGltcGxlbWVudGF0aW9uLCBmb3IgZXhhbXBsZSwgdXNlcwotIHRoZSBmYXN0IGFsZ29yaXRobSBieSBkZWZhdWx0IHdoZW4gY29tcHJlc3NpbmcsIGJlY2F1c2UgdGhpcyBoYXMgYmVlbgotIHNob3duIHRvIGhhdmUgb25seSBhIHZlcnkgc2xpZ2h0IGVmZmVjdCBvbiBhY2N1cmFjeSwgYnV0IGl0IHVzZXMgdGhlCi0gYWNjdXJhdGUgYWxnb3JpdGhtIHdoZW4gZGVjb21wcmVzc2luZywgYmVjYXVzZSB0aGlzIGhhcyBiZWVuIHNob3duIHRvIGhhdmUKLSBhIGxhcmdlciBlZmZlY3QuCisgaW1wbGVtZW50YXRpb24tc3BlY2lmaWMuICBGb3IgZXhhbXBsZSwgdGhlIGltcGxlbWVudGF0aW9uIG9mIFR1cmJvSlBFRyBmb3IKKyBsaWJqcGVnWy10dXJib10gdXNlcyB0aGUgZmFzdCBhbGdvcml0aG0gYnkgZGVmYXVsdCB3aGVuIGNvbXByZXNzaW5nLAorIGJlY2F1c2UgdGhpcyBoYXMgYmVlbiBzaG93biB0byBoYXZlIG9ubHkgYSB2ZXJ5IHNsaWdodCBlZmZlY3Qgb24gYWNjdXJhY3ksCisgYnV0IGl0IHVzZXMgdGhlIGFjY3VyYXRlIGFsZ29yaXRobSB3aGVuIGRlY29tcHJlc3NpbmcsIGJlY2F1c2UgdGhpcyBoYXMKKyBiZWVuIHNob3duIHRvIGhhdmUgYSBsYXJnZXIgZWZmZWN0LgogPFA+CiA8REw+CiA8RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy5USi5GTEFHX0FDQ1VSQVRFRENUIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KQEAgLTg5NiwxMSArODk1LDExIEBACiBwdWJsaWMgc3RhdGljIGludCA8Qj5nZXRQaXhlbFNpemU8L0I+KGludCZuYnNwO3BpeGVsRm9ybWF0KQogICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb248L1BSRT4KIDxETD4KLTxERD5SZXR1cm5zIHRoZSBwaXhlbCBzaXplIChpbiBieXRlcykgb2YgdGhlIGdpdmVuIHBpeGVsIGZvcm1hdC4KKzxERD5SZXR1cm5zIHRoZSBwaXhlbCBzaXplIChpbiBieXRlcykgZm9yIHRoZSBnaXZlbiBwaXhlbCBmb3JtYXQuCiA8UD4KIDxERD48REw+CiA8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnBpeGVsRm9ybWF0PC9DT0RFPiAtIHRoZSBwaXhlbCBmb3JtYXQgKG9uZSBvZiA8Y29kZT5QRl8qPC9jb2RlPikKLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHBpeGVsIHNpemUgKGluIGJ5dGVzKSBvZiB0aGUgZ2l2ZW4gcGl4ZWwgZm9ybWF0Cis8RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBwaXhlbCBzaXplIChpbiBieXRlcykgZm9yIHRoZSBnaXZlbiBwaXhlbCBmb3JtYXQKIDxEVD48Qj5UaHJvd3M6PC9CPgogPEREPjxDT0RFPmphdmEubGFuZy5FeGNlcHRpb248L0NPREU+PC9ETD4KIDwvREQ+CkBAIC05NzksMTUgKzk3OCwxMyBAQAogICAgICAgICAgICAgICAgICAgIHRocm93cyBqYXZhLmxhbmcuRXhjZXB0aW9uPC9QUkU+CiA8REw+CiA8REQ+UmV0dXJucyB0aGUgbWF4aW11bSBzaXplIG9mIHRoZSBidWZmZXIgKGluIGJ5dGVzKSByZXF1aXJlZCB0byBob2xkIGEgSlBFRwotIGltYWdlIHdpdGggdGhlIGdpdmVuIHdpZHRoIGFuZCBoZWlnaHQsIGFuZCBsZXZlbCBvZiBjaHJvbWluYW5jZQotIHN1YnNhbXBsaW5nLgorIGltYWdlIHdpdGggdGhlIGdpdmVuIHdpZHRoLCBoZWlnaHQsIGFuZCBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZy4KIDxQPgogPEREPjxETD4KIDxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+d2lkdGg8L0NPREU+IC0gdGhlIHdpZHRoIChpbiBwaXhlbHMpIG9mIHRoZSBKUEVHIGltYWdlPEREPjxDT0RFPmhlaWdodDwvQ09ERT4gLSB0aGUgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIHRoZSBKUEVHIGltYWdlPEREPjxDT0RFPmpwZWdTdWJzYW1wPC9DT0RFPiAtIHRoZSBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZyB0byBiZSB1c2VkIHdoZW4KICBnZW5lcmF0aW5nIHRoZSBKUEVHIGltYWdlIChvbmUgb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj48Q09ERT5USi5TQU1QXyo8L0NPREU+PC9BPikKIDxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgYnVmZmVyIChpbiBieXRlcykgcmVxdWlyZWQgdG8gaG9sZCBhIEpQRUcKLSBpbWFnZSB3aXRoIHRoZSBnaXZlbiB3aWR0aCBhbmQgaGVpZ2h0LCBhbmQgbGV2ZWwgb2YgY2hyb21pbmFuY2UKLSBzdWJzYW1wbGluZworIGltYWdlIHdpdGggdGhlIGdpdmVuIHdpZHRoLCBoZWlnaHQsIGFuZCBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZwogPERUPjxCPlRocm93czo8L0I+CiA8REQ+PENPREU+amF2YS5sYW5nLkV4Y2VwdGlvbjwvQ09ERT48L0RMPgogPC9ERD4KZGlmZiAtLWdpdCBhL2phdmEvZG9jL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sIGIvamF2YS9kb2Mvb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwKaW5kZXggMWM3MDg4YS4uOTM1ZGIwZSAxMDA2NDQKLS0tIGEvamF2YS9kb2Mvb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwKKysrIGIvamF2YS9kb2Mvb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwKQEAgLTIsMTIgKzIsMTAgQEAKIDwhLS1OZXdQYWdlLS0+CiA8SFRNTD4KIDxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS42LjBfMzMpIG9uIEZyaSBKdW4gMjkgMTQ6Mjk6MTMgQ0RUIDIwMTIgLS0+CiA8VElUTEU+CiBUSkNvbXByZXNzb3IKIDwvVElUTEU+CiAKLTxNRVRBIE5BTUU9ImRhdGUiIENPTlRFTlQ9IjIwMTItMDYtMjkiPgogCiA8TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+CiAKQEAgLTEyOSw4ICsxMjcsMjEgQEAKICAgICAgICAgICAgICBpbnQmbmJzcDtwaXhlbEZvcm1hdCk8L0NPREU+CiAKIDxCUj4KKyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPlVzZQorIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sI1RKQ29tcHJlc3NvcihieXRlW10sIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIj48Q09ERT5USkNvbXByZXNzb3IoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KTwvQ09ERT48L0E+IGluc3RlYWQuPC9JPjwvVEQ+Cis8L1RSPgorPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Cis8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjVEpDb21wcmVzc29yKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCkiPlRKQ29tcHJlc3NvcjwvQT48L0I+KGJ5dGVbXSZuYnNwO3NyY0ltYWdlLAorICAgICAgICAgICAgIGludCZuYnNwO3gsCisgICAgICAgICAgICAgaW50Jm5ic3A7eSwKKyAgICAgICAgICAgICBpbnQmbmJzcDt3aWR0aCwKKyAgICAgICAgICAgICBpbnQmbmJzcDtwaXRjaCwKKyAgICAgICAgICAgICBpbnQmbmJzcDtoZWlnaHQsCisgICAgICAgICAgICAgaW50Jm5ic3A7cGl4ZWxGb3JtYXQpPC9DT0RFPgorCis8QlI+CiAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDcmVhdGUgYSBUdXJib0pQRUcgY29tcHJlc3NvciBpbnN0YW5jZSBhbmQgYXNzb2NpYXRlIHRoZSB1bmNvbXByZXNzZWQKLSBzb3VyY2UgaW1hZ2Ugc3RvcmVkIGluIDxjb2RlPnNyY0ltYWdlPC9jb2RlPiB3aXRoIHRoZSBuZXdseS1jcmVhdGVkCisgc291cmNlIGltYWdlIHN0b3JlZCBpbiA8Y29kZT5zcmNJbWFnZTwvY29kZT4gd2l0aCB0aGUgbmV3bHkgY3JlYXRlZAogIGluc3RhbmNlLjwvVEQ+CiA8L1RSPgogPC9UQUJMRT4KQEAgLTI2Niw2ICsyNzcsMjEgQEAKICAgICAgICAgICAgICAgIGludCZuYnNwO3BpeGVsRm9ybWF0KTwvQ09ERT4KIAogPEJSPgorJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+VXNlCisgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjc2V0U291cmNlSW1hZ2UoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KSI+PENPREU+c2V0U291cmNlSW1hZ2UoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KTwvQ09ERT48L0E+IGluc3RlYWQuPC9JPjwvVEQ+Cis8L1RSPgorPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Cis8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Cis8Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgorPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sI3NldFNvdXJjZUltYWdlKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCkiPnNldFNvdXJjZUltYWdlPC9BPjwvQj4oYnl0ZVtdJm5ic3A7c3JjSW1hZ2UsCisgICAgICAgICAgICAgICBpbnQmbmJzcDt4LAorICAgICAgICAgICAgICAgaW50Jm5ic3A7eSwKKyAgICAgICAgICAgICAgIGludCZuYnNwO3dpZHRoLAorICAgICAgICAgICAgICAgaW50Jm5ic3A7cGl0Y2gsCisgICAgICAgICAgICAgICBpbnQmbmJzcDtoZWlnaHQsCisgICAgICAgICAgICAgICBpbnQmbmJzcDtwaXhlbEZvcm1hdCk8L0NPREU+CisKKzxCUj4KICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0Fzc29jaWF0ZSBhbiB1bmNvbXByZXNzZWQgc291cmNlIGltYWdlIHdpdGggdGhpcyBjb21wcmVzc29yIGluc3RhbmNlLjwvVEQ+CiA8L1RSPgogPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CkBAIC0zMTUsMTAgKzM0MSwxMiBAQAogPC9ETD4KIDxIUj4KIAotPEEgTkFNRT0iVEpDb21wcmVzc29yKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50KSI+PCEtLSAtLT48L0E+PEgzPgorPEEgTkFNRT0iVEpDb21wcmVzc29yKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCkiPjwhLS0gLS0+PC9BPjxIMz4KIFRKQ29tcHJlc3NvcjwvSDM+CiA8UFJFPgogcHVibGljIDxCPlRKQ29tcHJlc3NvcjwvQj4oYnl0ZVtdJm5ic3A7c3JjSW1hZ2UsCisgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO3gsCisgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO3ksCiAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO3dpZHRoLAogICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtwaXRjaCwKICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7aGVpZ2h0LApAQCAtMzI2LDExICszNTQsMzMgQEAKICAgICAgICAgICAgICB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbjwvUFJFPgogPERMPgogPEREPkNyZWF0ZSBhIFR1cmJvSlBFRyBjb21wcmVzc29yIGluc3RhbmNlIGFuZCBhc3NvY2lhdGUgdGhlIHVuY29tcHJlc3NlZAotIHNvdXJjZSBpbWFnZSBzdG9yZWQgaW4gPGNvZGU+c3JjSW1hZ2U8L2NvZGU+IHdpdGggdGhlIG5ld2x5LWNyZWF0ZWQKKyBzb3VyY2UgaW1hZ2Ugc3RvcmVkIGluIDxjb2RlPnNyY0ltYWdlPC9jb2RlPiB3aXRoIHRoZSBuZXdseSBjcmVhdGVkCiAgaW5zdGFuY2UuCiA8UD4KIDxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+c3JjSW1hZ2U8L0NPREU+IC0gc2VlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sI3NldFNvdXJjZUltYWdlKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50KSI+PENPREU+c2V0U291cmNlSW1hZ2UoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQpPC9DT0RFPjwvQT4gZm9yIGRlc2NyaXB0aW9uPEREPjxDT0RFPndpZHRoPC9DT0RFPiAtIHNlZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNzZXRTb3VyY2VJbWFnZShieXRlW10sIGludCwgaW50LCBpbnQsIGludCkiPjxDT0RFPnNldFNvdXJjZUltYWdlKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50KTwvQ09ERT48L0E+IGZvciBkZXNjcmlwdGlvbjxERD48Q09ERT5waXRjaDwvQ09ERT4gLSBzZWUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjc2V0U291cmNlSW1hZ2UoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQpIj48Q09ERT5zZXRTb3VyY2VJbWFnZShieXRlW10sIGludCwgaW50LCBpbnQsIGludCk8L0NPREU+PC9BPiBmb3IgZGVzY3JpcHRpb248REQ+PENPREU+aGVpZ2h0PC9DT0RFPiAtIHNlZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNzZXRTb3VyY2VJbWFnZShieXRlW10sIGludCwgaW50LCBpbnQsIGludCkiPjxDT0RFPnNldFNvdXJjZUltYWdlKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50KTwvQ09ERT48L0E+IGZvciBkZXNjcmlwdGlvbjxERD48Q09ERT5waXhlbEZvcm1hdDwvQ09ERT4gLSBzZWUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjc2V0U291cmNlSW1hZ2UoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQpIj48Q09ERT5zZXRTb3VyY2VJbWFnZShieXRlW10sIGludCwgaW50LCBpbnQsIGludCk8L0NPREU+PC9BPiBmb3IgZGVzY3JpcHRpb24KKzxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+c3JjSW1hZ2U8L0NPREU+IC0gc2VlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sI3NldFNvdXJjZUltYWdlKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCkiPjxDT0RFPnNldFNvdXJjZUltYWdlKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCk8L0NPREU+PC9BPiBmb3IgZGVzY3JpcHRpb248REQ+PENPREU+eDwvQ09ERT4gLSBzZWUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjc2V0U291cmNlSW1hZ2UoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KSI+PENPREU+c2V0U291cmNlSW1hZ2UoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KTwvQ09ERT48L0E+IGZvciBkZXNjcmlwdGlvbjxERD48Q09ERT55PC9DT0RFPiAtIHNlZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNzZXRTb3VyY2VJbWFnZShieXRlW10sIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIj48Q09ERT5zZXRTb3VyY2VJbWFnZShieXRlW10sIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpPC9DT0RFPjwvQT4gZm9yIGRlc2NyaXB0aW9uPEREPjxDT0RFPndpZHRoPC9DT0RFPiAtIHNlZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNzZXRTb3VyY2VJbWFnZShieXRlW10sIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIj48Q09ERT5zZXRTb3VyY2VJbWFnZShieXRlW10sIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpPC9DT0RFPjwvQT4gZm9yIGRlc2NyaXB0aW9uPEREPjxDT0RFPnBpdGNoPC9DT0RFPiAtIHNlZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNzZXRTb3VyY2VJbWFnZShieXRlW10sIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIj48Q09ERT5zZXRTb3VyY2VJbWFnZShieXRlW10sIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpPC9DT0RFPjwvQT4gZm9yIGRlc2NyaXB0aW9uPEREPjxDT0RFPmhlaWdodDwvQ09ERT4gLSBzZWUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjc2V0U291cmNlSW1hZ2UoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KSI+PENPREU+c2V0U291cmNlSW1hZ2UoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KTwvQ09ERT48L0E+IGZvciBkZXNjcmlwdGlvbjxERD48Q09ERT5waXhlbEZvcm1hdDwvQ09ERT4gLSBwaXhlbCBmb3JtYXQgb2YgdGhlIHNvdXJjZSBpbWFnZSAob25lIG9mCisgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNQRl9SR0IiPjxDT0RFPlRKLlBGXyo8L0NPREU+PC9BPikKKzxEVD48Qj5UaHJvd3M6PC9CPgorPEREPjxDT0RFPmphdmEubGFuZy5FeGNlcHRpb248L0NPREU+PC9ETD4KKzwvREw+Cis8SFI+CisKKzxBIE5BTUU9IlRKQ29tcHJlc3NvcihieXRlW10sIGludCwgaW50LCBpbnQsIGludCkiPjwhLS0gLS0+PC9BPjxIMz4KK1RKQ29tcHJlc3NvcjwvSDM+Cis8UFJFPgorPEZPTlQgU0laRT0iLTEiPkBEZXByZWNhdGVkCis8L0ZPTlQ+cHVibGljIDxCPlRKQ29tcHJlc3NvcjwvQj4oYnl0ZVtdJm5ic3A7c3JjSW1hZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7d2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7cGl0Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7aGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO3BpeGVsRm9ybWF0KQorICAgICAgICAgICAgIHRocm93cyBqYXZhLmxhbmcuRXhjZXB0aW9uPC9QUkU+Cis8REw+Cis8REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+VXNlCisgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjVEpDb21wcmVzc29yKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCkiPjxDT0RFPlRKQ29tcHJlc3NvcihieXRlW10sIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpPC9DT0RFPjwvQT4gaW5zdGVhZC48L0k+Cis8UD4KKzxETD4KKwogPERUPjxCPlRocm93czo8L0I+CiA8REQ+PENPREU+amF2YS5sYW5nLkV4Y2VwdGlvbjwvQ09ERT48L0RMPgogPC9ETD4KQEAgLTM0NSwxMCArMzk1LDEyIEBACiA8L1RSPgogPC9UQUJMRT4KIAotPEEgTkFNRT0ic2V0U291cmNlSW1hZ2UoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQpIj48IS0tIC0tPjwvQT48SDM+Cis8QSBOQU1FPSJzZXRTb3VyY2VJbWFnZShieXRlW10sIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIj48IS0tIC0tPjwvQT48SDM+CiBzZXRTb3VyY2VJbWFnZTwvSDM+CiA8UFJFPgogcHVibGljIHZvaWQgPEI+c2V0U291cmNlSW1hZ2U8L0I+KGJ5dGVbXSZuYnNwO3NyY0ltYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO3ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDt3aWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO3BpdGNoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7aGVpZ2h0LApAQCAtMzU5LDE1ICs0MTEsNDEgQEAKIDxQPgogPEREPjxETD4KIDxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+c3JjSW1hZ2U8L0NPREU+IC0gaW1hZ2UgYnVmZmVyIGNvbnRhaW5pbmcgUkdCIG9yIGdyYXlzY2FsZSBwaXhlbHMgdG8gYmUKLSBjb21wcmVzc2VkPEREPjxDT0RFPndpZHRoPC9DT0RFPiAtIHdpZHRoIChpbiBwaXhlbHMpIG9mIHRoZSBzb3VyY2UgaW1hZ2U8REQ+PENPREU+cGl0Y2g8L0NPREU+IC0gYnl0ZXMgcGVyIGxpbmUgb2YgdGhlIHNvdXJjZSBpbWFnZS4gIE5vcm1hbGx5LCB0aGlzIHNob3VsZCBiZQorIGNvbXByZXNzZWQgb3IgZW5jb2RlZDxERD48Q09ERT54PC9DT0RFPiAtIHggb2Zmc2V0IChpbiBwaXhlbHMpIG9mIHRoZSByZWdpb24gaW4gdGhlIHNvdXJjZSBpbWFnZSBmcm9tIHdoaWNoCisgdGhlIEpQRUcgb3IgWVVWIGltYWdlIHNob3VsZCBiZSBjb21wcmVzc2VkL2VuY29kZWQ8REQ+PENPREU+eTwvQ09ERT4gLSB5IG9mZnNldCAoaW4gcGl4ZWxzKSBvZiB0aGUgcmVnaW9uIGluIHRoZSBzb3VyY2UgaW1hZ2UgZnJvbSB3aGljaAorIHRoZSBKUEVHIG9yIFlVViBpbWFnZSBzaG91bGQgYmUgY29tcHJlc3NlZC9lbmNvZGVkPEREPjxDT0RFPndpZHRoPC9DT0RFPiAtIHdpZHRoIChpbiBwaXhlbHMpIG9mIHRoZSByZWdpb24gaW4gdGhlIHNvdXJjZSBpbWFnZSBmcm9tCisgd2hpY2ggdGhlIEpQRUcgb3IgWVVWIGltYWdlIHNob3VsZCBiZSBjb21wcmVzc2VkL2VuY29kZWQ8REQ+PENPREU+cGl0Y2g8L0NPREU+IC0gYnl0ZXMgcGVyIGxpbmUgb2YgdGhlIHNvdXJjZSBpbWFnZS4gIE5vcm1hbGx5LCB0aGlzIHNob3VsZCBiZQogIDxjb2RlPndpZHRoICogVEoucGl4ZWxTaXplKHBpeGVsRm9ybWF0KTwvY29kZT4gaWYgdGhlIHNvdXJjZSBpbWFnZSBpcwogIHVucGFkZGVkLCBidXQgeW91IGNhbiB1c2UgdGhpcyBwYXJhbWV0ZXIgdG8sIGZvciBpbnN0YW5jZSwgc3BlY2lmeSB0aGF0Ci0gdGhlIHNjYW5saW5lcyBpbiB0aGUgc291cmNlIGltYWdlIGFyZSBwYWRkZWQgdG8gNC1ieXRlIGJvdW5kYXJpZXMsIGFzIGlzCi0gdGhlIGNhc2UgZm9yIFdpbmRvd3MgYml0bWFwcy4gIFlvdSBjYW4gYWxzbyBiZSBjbGV2ZXIgYW5kIHVzZSB0aGlzCi0gcGFyYW1ldGVyIHRvIHNraXAgbGluZXMsIGV0Yy4gIFNldHRpbmcgdGhpcyBwYXJhbWV0ZXIgdG8gMCBpcyB0aGUKLSBlcXVpdmFsZW50IG9mIHNldHRpbmcgaXQgdG8gPGNvZGU+d2lkdGggKgotIFRKLnBpeGVsU2l6ZShwaXhlbEZvcm1hdCk8L2NvZGU+LjxERD48Q09ERT5oZWlnaHQ8L0NPREU+IC0gaGVpZ2h0IChpbiBwaXhlbHMpIG9mIHRoZSBzb3VyY2UgaW1hZ2U8REQ+PENPREU+cGl4ZWxGb3JtYXQ8L0NPREU+IC0gcGl4ZWwgZm9ybWF0IG9mIHRoZSBzb3VyY2UgaW1hZ2UgKG9uZSBvZgotIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+PENPREU+VEouUEZfKjwvQ09ERT48L0E+KQorIHRoZSBzY2FubGluZXMgaW4gdGhlIHNvdXJjZSBpbWFnZSBhcmUgcGFkZGVkIHRvIGEgNC1ieXRlIGJvdW5kYXJ5IG9yIHRvCisgY29tcHJlc3MvZW5jb2RlIGEgSlBFRyBvciBZVVYgaW1hZ2UgZnJvbSBhIHJlZ2lvbiBvZiBhIGxhcmdlciBzb3VyY2UKKyBpbWFnZS4gIFlvdSBjYW4gYWxzbyBiZSBjbGV2ZXIgYW5kIHVzZSB0aGlzIHBhcmFtZXRlciB0byBza2lwIGxpbmVzLCBldGMuCisgU2V0dGluZyB0aGlzIHBhcmFtZXRlciB0byAwIGlzIHRoZSBlcXVpdmFsZW50IG9mIHNldHRpbmcgaXQgdG8KKyA8Y29kZT53aWR0aCAqIFRKLnBpeGVsU2l6ZShwaXhlbEZvcm1hdCk8L2NvZGU+LjxERD48Q09ERT5oZWlnaHQ8L0NPREU+IC0gaGVpZ2h0IChpbiBwaXhlbHMpIG9mIHRoZSByZWdpb24gaW4gdGhlIHNvdXJjZSBpbWFnZSBmcm9tCisgd2hpY2ggdGhlIEpQRUcgb3IgWVVWIGltYWdlIHNob3VsZCBiZSBjb21wcmVzc2VkL2VuY29kZWQ8REQ+PENPREU+cGl4ZWxGb3JtYXQ8L0NPREU+IC0gcGl4ZWwgZm9ybWF0IG9mIHRoZSBzb3VyY2UgaW1hZ2UgKG9uZSBvZgorIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjUEZfUkdCIj48Q09ERT5USi5QRl8qPC9DT0RFPjwvQT4pCis8RFQ+PEI+VGhyb3dzOjwvQj4KKzxERD48Q09ERT5qYXZhLmxhbmcuRXhjZXB0aW9uPC9DT0RFPjwvREw+Cis8L0REPgorPC9ETD4KKzxIUj4KKworPEEgTkFNRT0ic2V0U291cmNlSW1hZ2UoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQpIj48IS0tIC0tPjwvQT48SDM+CitzZXRTb3VyY2VJbWFnZTwvSDM+Cis8UFJFPgorPEZPTlQgU0laRT0iLTEiPkBEZXByZWNhdGVkCis8L0ZPTlQ+cHVibGljIHZvaWQgPEI+c2V0U291cmNlSW1hZ2U8L0I+KGJ5dGVbXSZuYnNwO3NyY0ltYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDt3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7cGl0Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO2hlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7cGl4ZWxGb3JtYXQpCisgICAgICAgICAgICAgICAgICAgIHRocm93cyBqYXZhLmxhbmcuRXhjZXB0aW9uPC9QUkU+Cis8REw+Cis8REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+VXNlCisgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjc2V0U291cmNlSW1hZ2UoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KSI+PENPREU+c2V0U291cmNlSW1hZ2UoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KTwvQ09ERT48L0E+IGluc3RlYWQuPC9JPgorPFA+Cis8REQ+PERMPgorCiA8RFQ+PEI+VGhyb3dzOjwvQj4KIDxERD48Q09ERT5qYXZhLmxhbmcuRXhjZXB0aW9uPC9DT0RFPjwvREw+CiA8L0REPgpAQCAtMzg0LDggKzQ2Miw5IEBACiAgb3BlcmF0aW9ucy4KIDxQPgogPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+bmV3U3Vic2FtcDwvQ09ERT4gLSB0aGUgbmV3IGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nIChvbmUgb2YKLSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPjxDT0RFPlRKLlNBTVBfKjwvQ09ERT48L0E+KQorPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5uZXdTdWJzYW1wPC9DT0RFPiAtIHRoZSBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZyB0byB1c2UgaW4KKyBzdWJzZXF1ZW50IGNvbXByZXNzL2VuY29kZSBvcGVyYXRpb25zIChvbmUgb2YKKyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI1NBTVBfNDQ0Ij48Q09ERT5USi5TQU1QXyo8L0NPREU+PC9BPikKIDxEVD48Qj5UaHJvd3M6PC9CPgogPEREPjxDT0RFPmphdmEubGFuZy5FeGNlcHRpb248L0NPREU+PC9ETD4KIDwvREQ+CkBAIC00MjIsNyArNTAxLDkgQEAKIDxERD48REw+CiA8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmRzdEJ1ZjwvQ09ERT4gLSBidWZmZXIgdGhhdCB3aWxsIHJlY2VpdmUgdGhlIEpQRUcgaW1hZ2UuICBVc2UKICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI2J1ZlNpemUoaW50LCBpbnQsIGludCkiPjxDT0RFPlRKLmJ1ZlNpemUoaW50LCBpbnQsIGludCk8L0NPREU+PC9BPiB0byBkZXRlcm1pbmUgdGhlIG1heGltdW0gc2l6ZSBmb3IgdGhpcyBidWZmZXIgYmFzZWQgb24KLSB0aGUgaW1hZ2Ugd2lkdGggYW5kIGhlaWdodC48REQ+PENPREU+ZmxhZ3M8L0NPREU+IC0gdGhlIGJpdHdpc2UgT1Igb2Ygb25lIG9yIG1vcmUgb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj48Q09ERT5USi5GTEFHXyo8L0NPREU+PC9BPgorIHRoZSBzb3VyY2UgaW1hZ2UncyB3aWR0aCBhbmQgaGVpZ2h0IGFuZCB0aGUgZGVzaXJlZCBsZXZlbCBvZiBjaHJvbWluYW5jZQorIHN1YnNhbXBsaW5nLjxERD48Q09ERT5mbGFnczwvQ09ERT4gLSB0aGUgYml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZgorIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjRkxBR19CT1RUT01VUCI+PENPREU+VEouRkxBR18qPC9DT0RFPjwvQT4KIDxEVD48Qj5UaHJvd3M6PC9CPgogPEREPjxDT0RFPmphdmEubGFuZy5FeGNlcHRpb248L0NPREU+PC9ETD4KIDwvREQ+CkBAIC00MzksNyArNTIwLDggQEAKICBpbnN0YW5jZSBhbmQgcmV0dXJuIGEgYnVmZmVyIGNvbnRhaW5pbmcgYSBKUEVHIGltYWdlLgogPFA+CiA8REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5mbGFnczwvQ09ERT4gLSB0aGUgYml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPjxDT0RFPlRKLkZMQUdfKjwvQ09ERT48L0E+Cis8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmZsYWdzPC9DT0RFPiAtIHRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mCisgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNGTEFHX0JPVFRPTVVQIj48Q09ERT5USi5GTEFHXyo8L0NPREU+PC9BPgogPERUPjxCPlJldHVybnM6PC9CPjxERD5hIGJ1ZmZlciBjb250YWluaW5nIGEgSlBFRyBpbWFnZS4gIFRoZSBsZW5ndGggb2YgdGhpcyBidWZmZXIgd2lsbAogIG5vdCBiZSBlcXVhbCB0byB0aGUgc2l6ZSBvZiB0aGUgSlBFRyBpbWFnZS4gIFVzZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNnZXRDb21wcmVzc2VkU2l6ZSgpIj48Q09ERT5nZXRDb21wcmVzc2VkU2l6ZSgpPC9DT0RFPjwvQT4gdG8gb2J0YWluIHRoZSBzaXplIG9mIHRoZSBKUEVHIGltYWdlLgogPERUPjxCPlRocm93czo8L0I+CkBAIC00NjMsNyArNTQ1LDggQEAKIDxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+c3JjSW1hZ2U8L0NPREU+IC0gYSA8Y29kZT5CdWZmZXJlZEltYWdlPC9jb2RlPiBpbnN0YW5jZSBjb250YWluaW5nIFJHQiBvcgogIGdyYXlzY2FsZSBwaXhlbHMgdG8gYmUgY29tcHJlc3NlZDxERD48Q09ERT5kc3RCdWY8L0NPREU+IC0gYnVmZmVyIHRoYXQgd2lsbCByZWNlaXZlIHRoZSBKUEVHIGltYWdlLiAgVXNlCiAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNidWZTaXplKGludCwgaW50LCBpbnQpIj48Q09ERT5USi5idWZTaXplKGludCwgaW50LCBpbnQpPC9DT0RFPjwvQT4gdG8gZGV0ZXJtaW5lIHRoZSBtYXhpbXVtIHNpemUgZm9yIHRoaXMgYnVmZmVyIGJhc2VkIG9uCi0gdGhlIGltYWdlIHdpZHRoIGFuZCBoZWlnaHQuPEREPjxDT0RFPmZsYWdzPC9DT0RFPiAtIHRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+PENPREU+VEouRkxBR18qPC9DT0RFPjwvQT4KKyB0aGUgaW1hZ2Ugd2lkdGgsIGhlaWdodCwgYW5kIGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nLjxERD48Q09ERT5mbGFnczwvQ09ERT4gLSB0aGUgYml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZgorIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjRkxBR19CT1RUT01VUCI+PENPREU+VEouRkxBR18qPC9DT0RFPjwvQT4KIDxEVD48Qj5UaHJvd3M6PC9CPgogPEREPjxDT0RFPmphdmEubGFuZy5FeGNlcHRpb248L0NPREU+PC9ETD4KIDwvREQ+CkBAIC00ODIsNyArNTY1LDggQEAKIDxQPgogPEREPjxETD4KIDxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+c3JjSW1hZ2U8L0NPREU+IC0gYSA8Y29kZT5CdWZmZXJlZEltYWdlPC9jb2RlPiBpbnN0YW5jZSBjb250YWluaW5nIFJHQiBvcgotIGdyYXlzY2FsZSBwaXhlbHMgdG8gYmUgY29tcHJlc3NlZDxERD48Q09ERT5mbGFnczwvQ09ERT4gLSB0aGUgYml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPjxDT0RFPlRKLkZMQUdfKjwvQ09ERT48L0E+CisgZ3JheXNjYWxlIHBpeGVscyB0byBiZSBjb21wcmVzc2VkPEREPjxDT0RFPmZsYWdzPC9DT0RFPiAtIHRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mCisgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNGTEFHX0JPVFRPTVVQIj48Q09ERT5USi5GTEFHXyo8L0NPREU+PC9BPgogPERUPjxCPlJldHVybnM6PC9CPjxERD5hIGJ1ZmZlciBjb250YWluaW5nIGEgSlBFRyBpbWFnZS4gIFRoZSBsZW5ndGggb2YgdGhpcyBidWZmZXIgd2lsbAogIG5vdCBiZSBlcXVhbCB0byB0aGUgc2l6ZSBvZiB0aGUgSlBFRyBpbWFnZS4gIFVzZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuaHRtbCNnZXRDb21wcmVzc2VkU2l6ZSgpIj48Q09ERT5nZXRDb21wcmVzc2VkU2l6ZSgpPC9DT0RFPjwvQT4gdG8gb2J0YWluIHRoZSBzaXplIG9mIHRoZSBKUEVHIGltYWdlLgogPERUPjxCPlRocm93czo8L0I+CkBAIC01MDQsMTggKzU4OCwyMyBAQAogIFR1cmJvSlBFRydzIHVuZGVybHlpbmcgY29kZWMgdG8gcHJvZHVjZSBhIHBsYW5hciBZVVYgaW1hZ2UgdGhhdCBpcwogIHN1aXRhYmxlIGZvciBkaXJlY3QgdmlkZW8gZGlzcGxheS4gIFNwZWNpZmljYWxseSwgaWYgdGhlIGNocm9taW5hbmNlCiAgY29tcG9uZW50cyBhcmUgc3Vic2FtcGxlZCBhbG9uZyB0aGUgaG9yaXpvbnRhbCBkaW1lbnNpb24sIHRoZW4gdGhlIHdpZHRoCi0gb2YgdGhlIGx1bWluYW5jZSBwbGFuZSBpcyBwYWRkZWQgdG8gMiBpbiB0aGUgb3V0cHV0IGltYWdlIChzYW1lIGdvZXMgZm9yCi0gdGhlIGhlaWdodCBvZiB0aGUgbHVtaW5hbmNlIHBsYW5lLCBpZiB0aGUgY2hyb21pbmFuY2UgY29tcG9uZW50cyBhcmUKLSBzdWJzYW1wbGVkIGFsb25nIHRoZSB2ZXJ0aWNhbCBkaW1lbnNpb24uKSAgQWxzbywgZWFjaCBsaW5lIG9mIGVhY2ggcGxhbmUKLSBpbiB0aGUgb3V0cHV0IGltYWdlIGlzIHBhZGRlZCB0byA0IGJ5dGVzLiAgQWx0aG91Z2ggdGhpcyB3aWxsIHdvcmsgd2l0aAotIGFueSBzdWJzYW1wbGluZyBvcHRpb24sIGl0IGlzIHJlYWxseSBvbmx5IHVzZWZ1bCBpbiBjb21iaW5hdGlvbiB3aXRoCi0gPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNTQU1QXzQyMCI+PENPREU+VEouU0FNUF80MjA8L0NPREU+PC9BPiwgd2hpY2ggcHJvZHVjZXMgYW4gaW1hZ2UgY29tcGF0aWJsZSB3aXRoIHRoZSBJNDIwIChBS0EKLSAiWVVWNDIwUCIpIGZvcm1hdC4KKyBvZiB0aGUgbHVtaW5hbmNlIHBsYW5lIGlzIHBhZGRlZCB0byB0aGUgbmVhcmVzdCBtdWx0aXBsZSBvZiAyIGluIHRoZQorIG91dHB1dCBpbWFnZSAoc2FtZSBnb2VzIGZvciB0aGUgaGVpZ2h0IG9mIHRoZSBsdW1pbmFuY2UgcGxhbmUsIGlmIHRoZQorIGNocm9taW5hbmNlIGNvbXBvbmVudHMgYXJlIHN1YnNhbXBsZWQgYWxvbmcgdGhlIHZlcnRpY2FsIGRpbWVuc2lvbi4pCisgQWxzbywgZWFjaCBsaW5lIG9mIGVhY2ggcGxhbmUgaW4gdGhlIG91dHB1dCBpbWFnZSBpcyBwYWRkZWQgdG8gNCBieXRlcy4KKyBBbHRob3VnaCB0aGlzIHdpbGwgd29yayB3aXRoIGFueSBzdWJzYW1wbGluZyBvcHRpb24sIGl0IGlzIHJlYWxseSBvbmx5CisgdXNlZnVsIGluIGNvbWJpbmF0aW9uIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNTQU1QXzQyMCI+PENPREU+VEouU0FNUF80MjA8L0NPREU+PC9BPiwgd2hpY2ggcHJvZHVjZXMgYW4gaW1hZ2UKKyBjb21wYXRpYmxlIHdpdGggdGhlIEk0MjAgKEFLQSAiWVVWNDIwUCIpIGZvcm1hdC4KKyA8cD4KKyBOT1RFOiBUZWNobmljYWxseSwgdGhlIEpQRUcgZm9ybWF0IHVzZXMgdGhlIFlDYkNyIGNvbG9yc3BhY2UsIGJ1dCBwZXIgdGhlCisgY29udmVudGlvbiBvZiB0aGUgZGlnaXRhbCB2aWRlbyBjb21tdW5pdHksIHRoZSBUdXJib0pQRUcgQVBJIHVzZXMgIllVViIgdG8KKyByZWZlciB0byBhbiBpbWFnZSBmb3JtYXQgY29uc2lzdGluZyBvZiBZLCBDYiwgYW5kIENyIGltYWdlIHBsYW5lcy4KIDxQPgogPEREPjxETD4KIDxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+ZHN0QnVmPC9DT0RFPiAtIGJ1ZmZlciB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUgWVVWIHBsYW5hciBpbWFnZS4gIFVzZQogIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjYnVmU2l6ZVlVVihpbnQsIGludCwgaW50KSI+PENPREU+VEouYnVmU2l6ZVlVVihpbnQsIGludCwgaW50KTwvQ09ERT48L0E+IHRvIGRldGVybWluZSB0aGUgYXBwcm9wcmlhdGUgc2l6ZSBmb3IgdGhpcyBidWZmZXIKLSBiYXNlZCBvbiB0aGUgaW1hZ2Ugd2lkdGgsIGhlaWdodCwgYW5kIGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nLjxERD48Q09ERT5mbGFnczwvQ09ERT4gLSB0aGUgYml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPjxDT0RFPlRKLkZMQUdfKjwvQ09ERT48L0E+CisgYmFzZWQgb24gdGhlIGltYWdlIHdpZHRoLCBoZWlnaHQsIGFuZCBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZy48REQ+PENPREU+ZmxhZ3M8L0NPREU+IC0gdGhlIGJpdHdpc2UgT1Igb2Ygb25lIG9yIG1vcmUgb2YKKyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI0ZMQUdfQk9UVE9NVVAiPjxDT0RFPlRKLkZMQUdfKjwvQ09ERT48L0E+CiA8RFQ+PEI+VGhyb3dzOjwvQj4KIDxERD48Q09ERT5qYXZhLmxhbmcuRXhjZXB0aW9uPC9DT0RFPjwvREw+CiA8L0REPgpAQCAtNTMzLDcgKzYyMiw4IEBACiAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmh0bWwjZW5jb2RlWVVWKGJ5dGVbXSwgaW50KSI+PENPREU+ZW5jb2RlWVVWKGJ5dGVbXSwgaW50KTwvQ09ERT48L0E+IGZvciBtb3JlIGRldGFpbC4KIDxQPgogPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+ZmxhZ3M8L0NPREU+IC0gdGhlIGJpdHdpc2UgT1Igb2Ygb25lIG9yIG1vcmUgb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj48Q09ERT5USi5GTEFHXyo8L0NPREU+PC9BPgorPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5mbGFnczwvQ09ERT4gLSB0aGUgYml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZgorIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjRkxBR19CT1RUT01VUCI+PENPREU+VEouRkxBR18qPC9DT0RFPjwvQT4KIDxEVD48Qj5SZXR1cm5zOjwvQj48REQ+YSBidWZmZXIgY29udGFpbmluZyBhIFlVViBwbGFuYXIgaW1hZ2UKIDxEVD48Qj5UaHJvd3M6PC9CPgogPEREPjxDT0RFPmphdmEubGFuZy5FeGNlcHRpb248L0NPREU+PC9ETD4KQEAgLTU1Nyw3ICs2NDcsOCBAQAogPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5zcmNJbWFnZTwvQ09ERT4gLSBhIDxjb2RlPkJ1ZmZlcmVkSW1hZ2U8L2NvZGU+IGluc3RhbmNlIGNvbnRhaW5pbmcgUkdCIG9yCiAgZ3JheXNjYWxlIHBpeGVscyB0byBiZSBlbmNvZGVkPEREPjxDT0RFPmRzdEJ1ZjwvQ09ERT4gLSBidWZmZXIgdGhhdCB3aWxsIHJlY2VpdmUgdGhlIFlVViBwbGFuYXIgaW1hZ2UuICBVc2UKICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI2J1ZlNpemVZVVYoaW50LCBpbnQsIGludCkiPjxDT0RFPlRKLmJ1ZlNpemVZVVYoaW50LCBpbnQsIGludCk8L0NPREU+PC9BPiB0byBkZXRlcm1pbmUgdGhlIGFwcHJvcHJpYXRlIHNpemUgZm9yIHRoaXMgYnVmZmVyCi0gYmFzZWQgb24gdGhlIGltYWdlIHdpZHRoLCBoZWlnaHQsIGFuZCBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZy48REQ+PENPREU+ZmxhZ3M8L0NPREU+IC0gdGhlIGJpdHdpc2UgT1Igb2Ygb25lIG9yIG1vcmUgb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj48Q09ERT5USi5GTEFHXyo8L0NPREU+PC9BPgorIGJhc2VkIG9uIHRoZSBpbWFnZSB3aWR0aCwgaGVpZ2h0LCBhbmQgbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcuPEREPjxDT0RFPmZsYWdzPC9DT0RFPiAtIHRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mCisgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNGTEFHX0JPVFRPTVVQIj48Q09ERT5USi5GTEFHXyo8L0NPREU+PC9BPgogPERUPjxCPlRocm93czo8L0I+CiA8REQ+PENPREU+amF2YS5sYW5nLkV4Y2VwdGlvbjwvQ09ERT48L0RMPgogPC9ERD4KQEAgLTU3Nyw3ICs2NjgsOCBAQAogPFA+CiA8REQ+PERMPgogPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5zcmNJbWFnZTwvQ09ERT4gLSBhIDxjb2RlPkJ1ZmZlcmVkSW1hZ2U8L2NvZGU+IGluc3RhbmNlIGNvbnRhaW5pbmcgUkdCIG9yCi0gZ3JheXNjYWxlIHBpeGVscyB0byBiZSBlbmNvZGVkPEREPjxDT0RFPmZsYWdzPC9DT0RFPiAtIHRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+PENPREU+VEouRkxBR18qPC9DT0RFPjwvQT4KKyBncmF5c2NhbGUgcGl4ZWxzIHRvIGJlIGVuY29kZWQ8REQ+PENPREU+ZmxhZ3M8L0NPREU+IC0gdGhlIGJpdHdpc2UgT1Igb2Ygb25lIG9yIG1vcmUgb2YKKyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI0ZMQUdfQk9UVE9NVVAiPjxDT0RFPlRKLkZMQUdfKjwvQ09ERT48L0E+CiA8RFQ+PEI+UmV0dXJuczo8L0I+PEREPmEgYnVmZmVyIGNvbnRhaW5pbmcgYSBZVVYgcGxhbmFyIGltYWdlCiA8RFQ+PEI+VGhyb3dzOjwvQj4KIDxERD48Q09ERT5qYXZhLmxhbmcuRXhjZXB0aW9uPC9DT0RFPjwvREw+CmRpZmYgLS1naXQgYS9qYXZhL2RvYy9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkN1c3RvbUZpbHRlci5odG1sIGIvamF2YS9kb2Mvb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDdXN0b21GaWx0ZXIuaHRtbAppbmRleCA5YTNiNTZlLi4zMjkxYzcxIDEwMDY0NAotLS0gYS9qYXZhL2RvYy9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkN1c3RvbUZpbHRlci5odG1sCisrKyBiL2phdmEvZG9jL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ3VzdG9tRmlsdGVyLmh0bWwKQEAgLTIsMTIgKzIsMTAgQEAKIDwhLS1OZXdQYWdlLS0+CiA8SFRNTD4KIDxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS42LjBfMzMpIG9uIEZyaSBKdW4gMjkgMTQ6Mjk6MTMgQ0RUIDIwMTIgLS0+CiA8VElUTEU+CiBUSkN1c3RvbUZpbHRlcgogPC9USVRMRT4KIAotPE1FVEEgTkFNRT0iZGF0ZSIgQ09OVEVOVD0iMjAxMi0wNi0yOSI+CiAKIDxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KIApAQCAtMTI0LDcgKzEyMiw3IEBACiA8QlI+CiAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdG8gbW9kaWZ5IHRoZSBEQ1QgY29lZmZpY2llbnRzIGFmdGVyCiAgdGhleSBhcmUgbG9zc2xlc3NseSB0cmFuc2Zvcm1lZCBidXQgYmVmb3JlIHRoZXkgYXJlIHRyYW5zY29kZWQgdG8gYSBuZXcKLSBKUEVHIGZpbGUuPC9URD4KKyBKUEVHIGltYWdlLjwvVEQ+CiA8L1RSPgogPC9UQUJMRT4KICZuYnNwOwpAQCAtMTUzLDcgKzE1MSw3IEBACiA8REw+CiA8REQ+QSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHRvIG1vZGlmeSB0aGUgRENUIGNvZWZmaWNpZW50cyBhZnRlcgogIHRoZXkgYXJlIGxvc3NsZXNzbHkgdHJhbnNmb3JtZWQgYnV0IGJlZm9yZSB0aGV5IGFyZSB0cmFuc2NvZGVkIHRvIGEgbmV3Ci0gSlBFRyBmaWxlLiAgVGhpcyBhbGxvd3MgZm9yIGN1c3RvbSBmaWx0ZXJzIG9yIG90aGVyIHRyYW5zZm9ybWF0aW9ucyB0byBiZQorIEpQRUcgaW1hZ2UuICBUaGlzIGFsbG93cyBmb3IgY3VzdG9tIGZpbHRlcnMgb3Igb3RoZXIgdHJhbnNmb3JtYXRpb25zIHRvIGJlCiAgYXBwbGllZCBpbiB0aGUgZnJlcXVlbmN5IGRvbWFpbi4KIDxQPgogPEREPjxETD4KQEAgLTE2NywxMCArMTY1LDEwIEBACiAgaW50byBtdWx0aXBsZSBEQ1QgY29lZmZpY2llbnQgYnVmZmVycyBhbmQgY2FsbCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gb25jZQogIGZvciBlYWNoIGJ1ZmZlci48REQ+PENPREU+cGxhbmVSZWdpb248L0NPREU+IC0gcmVjdGFuZ2xlIGNvbnRhaW5pbmcgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlCiAgY29tcG9uZW50IHBsYW5lIHRvIHdoaWNoIDxjb2RlPmNvZWZmQnVmZmVyPC9jb2RlPiBiZWxvbmdzPEREPjxDT0RFPmNvbXBvbmVudElEPC9DT0RFPiAtIElEIG51bWJlciBvZiB0aGUgY29tcG9uZW50IHBsYW5lIHRvIHdoaWNoCi0gPGNvZGU+Y29lZmZCdWZmZXI8L2NvZGU+YmVsb25ncyAoWSwgQ2IsIGFuZCBDciBoYXZlLCByZXNwZWN0aXZlbHksIElEJ3Mgb2YKLSAwLCAxLCBhbmQgMiBpbiB0eXBpY2FsIEpQRUcgaW1hZ2VzLik8REQ+PENPREU+dHJhbnNmb3JtSUQ8L0NPREU+IC0gSUQgbnVtYmVyIG9mIHRoZSB0cmFuc2Zvcm1lZCBpbWFnZSB0byB3aGljaAorIDxjb2RlPmNvZWZmQnVmZmVyPC9jb2RlPiBiZWxvbmdzIChZLCBDYiwgYW5kIENyIGhhdmUsIHJlc3BlY3RpdmVseSwgSUQncworIG9mIDAsIDEsIGFuZCAyIGluIHR5cGljYWwgSlBFRyBpbWFnZXMuKTxERD48Q09ERT50cmFuc2Zvcm1JRDwvQ09ERT4gLSBJRCBudW1iZXIgb2YgdGhlIHRyYW5zZm9ybWVkIGltYWdlIHRvIHdoaWNoCiAgPGNvZGU+Y29lZmZCdWZmZXI8L2NvZGU+IGJlbG9uZ3MuICBUaGlzIGlzIHRoZSBzYW1lIGFzIHRoZSBpbmRleCBvZiB0aGUKLSB0cmFuc2Zvcm0gaW4gdGhlIHRyYW5zZm9ybXMgYXJyYXkgdGhhdCB3YXMgcGFzc2VkIHRvIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtZXIuaHRtbCN0cmFuc2Zvcm0oYnl0ZVtdW10sIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKVHJhbnNmb3JtW10sIGludCkiPjxDT0RFPlRKVHJhbnNmb3JtZXIudHJhbnNmb3JtKCk8L0NPREU+PC9BPi48REQ+PENPREU+dHJhbnNmb3JtPC9DT0RFPiAtIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj48Q09ERT5USlRyYW5zZm9ybTwvQ09ERT48L0E+IGluc3RhbmNlIHRoYXQgc3BlY2lmaWVzIHRoZQorIHRyYW5zZm9ybSBpbiB0aGUgPGNvZGU+dHJhbnNmb3JtczwvY29kZT4gYXJyYXkgdGhhdCB3YXMgcGFzc2VkIHRvIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtZXIuaHRtbCN0cmFuc2Zvcm0oYnl0ZVtdW10sIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKVHJhbnNmb3JtW10sIGludCkiPjxDT0RFPlRKVHJhbnNmb3JtZXIudHJhbnNmb3JtKCk8L0NPREU+PC9BPi48REQ+PENPREU+dHJhbnNmb3JtPC9DT0RFPiAtIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj48Q09ERT5USlRyYW5zZm9ybTwvQ09ERT48L0E+IGluc3RhbmNlIHRoYXQgc3BlY2lmaWVzIHRoZQogIHBhcmFtZXRlcnMgYW5kL29yIGNyb3BwaW5nIHJlZ2lvbiBmb3IgdGhpcyB0cmFuc2Zvcm0KIDxEVD48Qj5UaHJvd3M6PC9CPgogPEREPjxDT0RFPmphdmEubGFuZy5FeGNlcHRpb248L0NPREU+PC9ETD4KZGlmZiAtLWdpdCBhL2phdmEvZG9jL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwgYi9qYXZhL2RvYy9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sCmluZGV4IDI1MDU0NzAuLmQ2OWY5NDMgMTAwNjQ0Ci0tLSBhL2phdmEvZG9jL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwKKysrIGIvamF2YS9kb2Mvb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbApAQCAtMiwxMiArMiwxMCBAQAogPCEtLU5ld1BhZ2UtLT4KIDxIVE1MPgogPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjYuMF8zMykgb24gRnJpIEp1biAyOSAxNDoyOToxMyBDRFQgMjAxMiAtLT4KIDxUSVRMRT4KIFRKRGVjb21wcmVzc29yCiA8L1RJVExFPgogCi08TUVUQSBOQU1FPSJkYXRlIiBDT05URU5UPSIyMDEyLTA2LTI5Ij4KIAogPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgogCkBAIC0xODYsNyArMTg0LDcgQEAKIAogPEJSPgogJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlIGEgVHVyYm9KUEVHIGRlY29tcHJlc3NvciBpbnN0YW5jZSBhbmQgYXNzb2NpYXRlIHRoZSBKUEVHIGltYWdlCi0gc3RvcmVkIGluIDxjb2RlPmpwZWdJbWFnZTwvY29kZT4gd2l0aCB0aGUgbmV3bHktY3JlYXRlZCBpbnN0YW5jZS48L1REPgorIHN0b3JlZCBpbiA8Y29kZT5qcGVnSW1hZ2U8L2NvZGU+IHdpdGggdGhlIG5ld2x5IGNyZWF0ZWQgaW5zdGFuY2UuPC9URD4KIDwvVFI+CiA8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KIDxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI1RKRGVjb21wcmVzc29yKGJ5dGVbXSwgaW50KSI+VEpEZWNvbXByZXNzb3I8L0E+PC9CPihieXRlW10mbmJzcDtqcGVnSW1hZ2UsCkBAIC0xOTUsNyArMTkzLDcgQEAKIDxCUj4KICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NyZWF0ZSBhIFR1cmJvSlBFRyBkZWNvbXByZXNzb3IgaW5zdGFuY2UgYW5kIGFzc29jaWF0ZSB0aGUgSlBFRyBpbWFnZQogIG9mIGxlbmd0aCA8Y29kZT5pbWFnZVNpemU8L2NvZGU+IGJ5dGVzIHN0b3JlZCBpbiA8Y29kZT5qcGVnSW1hZ2U8L2NvZGU+Ci0gd2l0aCB0aGUgbmV3bHktY3JlYXRlZCBpbnN0YW5jZS48L1REPgorIHdpdGggdGhlIG5ld2x5IGNyZWF0ZWQgaW5zdGFuY2UuPC9URD4KIDwvVFI+CiA8L1RBQkxFPgogJm5ic3A7CkBAIC0yMzcsNiArMjM1LDM4IEBACiAgICAgICAgICAgIGludCZuYnNwO2ZsYWdzKTwvQ09ERT4KIAogPEJSPgorJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+VXNlCisgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNkZWNvbXByZXNzKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KSI+PENPREU+ZGVjb21wcmVzcyhieXRlW10sIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCk8L0NPREU+PC9BPiBpbnN0ZWFkLjwvST48L1REPgorPC9UUj4KKzxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgorPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgorPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KKzxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI2RlY29tcHJlc3MoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIj5kZWNvbXByZXNzPC9BPjwvQj4oYnl0ZVtdJm5ic3A7ZHN0QnVmLAorICAgICAgICAgICBpbnQmbmJzcDt4LAorICAgICAgICAgICBpbnQmbmJzcDt5LAorICAgICAgICAgICBpbnQmbmJzcDtkZXNpcmVkV2lkdGgsCisgICAgICAgICAgIGludCZuYnNwO3BpdGNoLAorICAgICAgICAgICBpbnQmbmJzcDtkZXNpcmVkSGVpZ2h0LAorICAgICAgICAgICBpbnQmbmJzcDtwaXhlbEZvcm1hdCwKKyAgICAgICAgICAgaW50Jm5ic3A7ZmxhZ3MpPC9DT0RFPgorCis8QlI+CismbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtEZWNvbXByZXNzIHRoZSBKUEVHIHNvdXJjZSBpbWFnZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBkZWNvbXByZXNzb3IKKyBpbnN0YW5jZSBhbmQgb3V0cHV0IGEgZGVjb21wcmVzc2VkIGltYWdlIHRvIHRoZSBnaXZlbiBkZXN0aW5hdGlvbiBidWZmZXIuPC9URD4KKzwvVFI+Cis8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KKzxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KKzxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Cis8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNkZWNvbXByZXNzKGludFtdLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIj5kZWNvbXByZXNzPC9BPjwvQj4oaW50W10mbmJzcDtkc3RCdWYsCisgICAgICAgICAgIGludCZuYnNwO3gsCisgICAgICAgICAgIGludCZuYnNwO3ksCisgICAgICAgICAgIGludCZuYnNwO2Rlc2lyZWRXaWR0aCwKKyAgICAgICAgICAgaW50Jm5ic3A7c3RyaWRlLAorICAgICAgICAgICBpbnQmbmJzcDtkZXNpcmVkSGVpZ2h0LAorICAgICAgICAgICBpbnQmbmJzcDtwaXhlbEZvcm1hdCwKKyAgICAgICAgICAgaW50Jm5ic3A7ZmxhZ3MpPC9DT0RFPgorCis8QlI+CiAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtEZWNvbXByZXNzIHRoZSBKUEVHIHNvdXJjZSBpbWFnZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBkZWNvbXByZXNzb3IKICBpbnN0YW5jZSBhbmQgb3V0cHV0IGEgZGVjb21wcmVzc2VkIGltYWdlIHRvIHRoZSBnaXZlbiBkZXN0aW5hdGlvbiBidWZmZXIuPC9URD4KIDwvVFI+CkBAIC0zMjYsNyArMzU2LDcgQEAKICAgICAgICAgICAgICAgICBpbnQmbmJzcDtkZXNpcmVkSGVpZ2h0KTwvQ09ERT4KIAogPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgaGVpZ2h0IG9mIHRoZSBsYXJnZXN0IHNjYWxlZCBkb3duIGltYWdlIHRoYXQgdGhlIFR1cmJvSlBFRworJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgaGVpZ2h0IG9mIHRoZSBsYXJnZXN0IHNjYWxlZC1kb3duIGltYWdlIHRoYXQgdGhlIFR1cmJvSlBFRwogIGRlY29tcHJlc3NvciBjYW4gZ2VuZXJhdGUgd2l0aG91dCBleGNlZWRpbmcgdGhlIGRlc2lyZWQgaW1hZ2Ugd2lkdGggYW5kCiAgaGVpZ2h0LjwvVEQ+CiA8L1RSPgpAQCAtMzM3LDcgKzM2Nyw3IEBACiAgICAgICAgICAgICAgICBpbnQmbmJzcDtkZXNpcmVkSGVpZ2h0KTwvQ09ERT4KIAogPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgd2lkdGggb2YgdGhlIGxhcmdlc3Qgc2NhbGVkIGRvd24gaW1hZ2UgdGhhdCB0aGUgVHVyYm9KUEVHCismbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB3aWR0aCBvZiB0aGUgbGFyZ2VzdCBzY2FsZWQtZG93biBpbWFnZSB0aGF0IHRoZSBUdXJib0pQRUcKICBkZWNvbXByZXNzb3IgY2FuIGdlbmVyYXRlIHdpdGhvdXQgZXhjZWVkaW5nIHRoZSBkZXNpcmVkIGltYWdlIHdpZHRoIGFuZAogIGhlaWdodC48L1REPgogPC9UUj4KQEAgLTQ4Myw3ICs1MTMsNyBAQAogICAgICAgICAgICAgICAgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb248L1BSRT4KIDxETD4KIDxERD5DcmVhdGUgYSBUdXJib0pQRUcgZGVjb21wcmVzc29yIGluc3RhbmNlIGFuZCBhc3NvY2lhdGUgdGhlIEpQRUcgaW1hZ2UKLSBzdG9yZWQgaW4gPGNvZGU+anBlZ0ltYWdlPC9jb2RlPiB3aXRoIHRoZSBuZXdseS1jcmVhdGVkIGluc3RhbmNlLgorIHN0b3JlZCBpbiA8Y29kZT5qcGVnSW1hZ2U8L2NvZGU+IHdpdGggdGhlIG5ld2x5IGNyZWF0ZWQgaW5zdGFuY2UuCiA8UD4KIDxETD4KIDxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+anBlZ0ltYWdlPC9DT0RFPiAtIEpQRUcgaW1hZ2UgYnVmZmVyIChzaXplIG9mIHRoZSBKUEVHIGltYWdlIGlzIGFzc3VtZWQgdG8KQEAgLTUwMiw3ICs1MzIsNyBAQAogPERMPgogPEREPkNyZWF0ZSBhIFR1cmJvSlBFRyBkZWNvbXByZXNzb3IgaW5zdGFuY2UgYW5kIGFzc29jaWF0ZSB0aGUgSlBFRyBpbWFnZQogIG9mIGxlbmd0aCA8Y29kZT5pbWFnZVNpemU8L2NvZGU+IGJ5dGVzIHN0b3JlZCBpbiA8Y29kZT5qcGVnSW1hZ2U8L2NvZGU+Ci0gd2l0aCB0aGUgbmV3bHktY3JlYXRlZCBpbnN0YW5jZS4KKyB3aXRoIHRoZSBuZXdseSBjcmVhdGVkIGluc3RhbmNlLgogPFA+CiA8REw+CiA8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmpwZWdJbWFnZTwvQ09ERT4gLSBKUEVHIGltYWdlIGJ1ZmZlcjxERD48Q09ERT5pbWFnZVNpemU8L0NPREU+IC0gc2l6ZSBvZiB0aGUgSlBFRyBpbWFnZSAoaW4gYnl0ZXMpCkBAIC01ODQsNyArNjE0LDcgQEAKICAgICAgICAgICAgICAgIHRocm93cyBqYXZhLmxhbmcuRXhjZXB0aW9uPC9QUkU+CiA8REw+CiA8REQ+UmV0dXJucyB0aGUgbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcgdXNlZCBpbiB0aGUgSlBFRyBpbWFnZQotIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRlY29tcHJlc3NvciBpbnN0YW5jZS4KKyBhc3NvY2lhdGVkIHdpdGggdGhpcyBkZWNvbXByZXNzb3IgaW5zdGFuY2UuICBTZWUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj48Q09ERT5USi5TQU1QXyo8L0NPREU+PC9BPi4KIDxQPgogPEREPjxETD4KIApAQCAtNjM5LDcgKzY2OSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO2Rlc2lyZWRIZWlnaHQpCiAgICAgICAgICAgICAgICAgICAgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb248L1BSRT4KIDxETD4KLTxERD5SZXR1cm5zIHRoZSB3aWR0aCBvZiB0aGUgbGFyZ2VzdCBzY2FsZWQgZG93biBpbWFnZSB0aGF0IHRoZSBUdXJib0pQRUcKKzxERD5SZXR1cm5zIHRoZSB3aWR0aCBvZiB0aGUgbGFyZ2VzdCBzY2FsZWQtZG93biBpbWFnZSB0aGF0IHRoZSBUdXJib0pQRUcKICBkZWNvbXByZXNzb3IgY2FuIGdlbmVyYXRlIHdpdGhvdXQgZXhjZWVkaW5nIHRoZSBkZXNpcmVkIGltYWdlIHdpZHRoIGFuZAogIGhlaWdodC4KIDxQPgpAQCAtNjUxLDcgKzY4MSw3IEBACiAgU2V0dGluZyB0aGlzIHRvIDAgaXMgdGhlIHNhbWUgYXMgc2V0dGluZyBpdCB0byB0aGUgaGVpZ2h0IG9mIHRoZSBKUEVHCiAgaW1hZ2UgKGluIG90aGVyIHdvcmRzLCB0aGUgaGVpZ2h0IHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgd2hlbiBkZXRlcm1pbmluZwogIHRoZSBzY2FsZWQgaW1hZ2Ugc2l6ZS4pCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSB3aWR0aCBvZiB0aGUgbGFyZ2VzdCBzY2FsZWQgZG93biBpbWFnZSB0aGF0IHRoZSBUdXJib0pQRUcKKzxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHdpZHRoIG9mIHRoZSBsYXJnZXN0IHNjYWxlZC1kb3duIGltYWdlIHRoYXQgdGhlIFR1cmJvSlBFRwogIGRlY29tcHJlc3NvciBjYW4gZ2VuZXJhdGUgd2l0aG91dCBleGNlZWRpbmcgdGhlIGRlc2lyZWQgaW1hZ2Ugd2lkdGggYW5kCiAgaGVpZ2h0CiA8RFQ+PEI+VGhyb3dzOjwvQj4KQEAgLTY2Nyw3ICs2OTcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7ZGVzaXJlZEhlaWdodCkKICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb248L1BSRT4KIDxETD4KLTxERD5SZXR1cm5zIHRoZSBoZWlnaHQgb2YgdGhlIGxhcmdlc3Qgc2NhbGVkIGRvd24gaW1hZ2UgdGhhdCB0aGUgVHVyYm9KUEVHCis8REQ+UmV0dXJucyB0aGUgaGVpZ2h0IG9mIHRoZSBsYXJnZXN0IHNjYWxlZC1kb3duIGltYWdlIHRoYXQgdGhlIFR1cmJvSlBFRwogIGRlY29tcHJlc3NvciBjYW4gZ2VuZXJhdGUgd2l0aG91dCBleGNlZWRpbmcgdGhlIGRlc2lyZWQgaW1hZ2Ugd2lkdGggYW5kCiAgaGVpZ2h0LgogPFA+CkBAIC02NzksNyArNzA5LDcgQEAKICBTZXR0aW5nIHRoaXMgdG8gMCBpcyB0aGUgc2FtZSBhcyBzZXR0aW5nIGl0IHRvIHRoZSBoZWlnaHQgb2YgdGhlIEpQRUcKICBpbWFnZSAoaW4gb3RoZXIgd29yZHMsIHRoZSBoZWlnaHQgd2lsbCBub3QgYmUgY29uc2lkZXJlZCB3aGVuIGRldGVybWluaW5nCiAgdGhlIHNjYWxlZCBpbWFnZSBzaXplLikKLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIGhlaWdodCBvZiB0aGUgbGFyZ2VzdCBzY2FsZWQgZG93biBpbWFnZSB0aGF0IHRoZSBUdXJib0pQRUcKKzxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIGhlaWdodCBvZiB0aGUgbGFyZ2VzdCBzY2FsZWQtZG93biBpbWFnZSB0aGF0IHRoZSBUdXJib0pQRUcKICBkZWNvbXByZXNzb3IgY2FuIGdlbmVyYXRlIHdpdGhvdXQgZXhjZWVkaW5nIHRoZSBkZXNpcmVkIGltYWdlIHdpZHRoIGFuZAogIGhlaWdodAogPERUPjxCPlRocm93czo8L0I+CkBAIC02ODgsMTAgKzcxOCwxMiBAQAogPC9ETD4KIDxIUj4KIAotPEEgTkFNRT0iZGVjb21wcmVzcyhieXRlW10sIGludCwgaW50LCBpbnQsIGludCwgaW50KSI+PCEtLSAtLT48L0E+PEgzPgorPEEgTkFNRT0iZGVjb21wcmVzcyhieXRlW10sIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCkiPjwhLS0gLS0+PC9BPjxIMz4KIGRlY29tcHJlc3M8L0gzPgogPFBSRT4KIHB1YmxpYyB2b2lkIDxCPmRlY29tcHJlc3M8L0I+KGJ5dGVbXSZuYnNwO2RzdEJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7eCwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7eSwKICAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7ZGVzaXJlZFdpZHRoLAogICAgICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtwaXRjaCwKICAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7ZGVzaXJlZEhlaWdodCwKQEAgLTcwNywyOCArNzM5LDU5IEBACiAgYnVmZmVyIHNob3VsZCBub3JtYWxseSBiZSA8Y29kZT5waXRjaCAqIHNjYWxlZEhlaWdodDwvY29kZT4gYnl0ZXMgaW4gc2l6ZSwKICB3aGVyZSA8Y29kZT5zY2FsZWRIZWlnaHQ8L2NvZGU+IGNhbiBiZSBkZXRlcm1pbmVkIGJ5IGNhbGxpbmcgPGNvZGU+CiAgc2NhbGluZ0ZhY3Rvci48QSBIUkVGPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlNjYWxpbmdGYWN0b3IuaHRtbCNnZXRTY2FsZWQoaW50KSI+PENPREU+Z2V0U2NhbGVkPC9DT0RFPjwvQT4oanBlZ0hlaWdodCkKLSA8L2NvZGU+IHdpdGggb25lIG9mIHRoZSBzY2FsaW5nIGZhY3RvcnMgcmV0dXJuZWQgZnJvbSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI2dldFNjYWxpbmdGYWN0b3JzKCkiPjxDT0RFPlRKLmdldFNjYWxpbmdGYWN0b3JzKCk8L0NPREU+PC9BPiBvciBieSBjYWxsaW5nIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjZ2V0U2NhbGVkSGVpZ2h0KGludCwgaW50KSI+PENPREU+Z2V0U2NhbGVkSGVpZ2h0KGludCwgaW50KTwvQ09ERT48L0E+LjxERD48Q09ERT5kZXNpcmVkV2lkdGg8L0NPREU+IC0gZGVzaXJlZCB3aWR0aCAoaW4gcGl4ZWxzKSBvZiB0aGUgZGVjb21wcmVzc2VkIGltYWdlLgotIElmIHRoZSBkZXNpcmVkIGltYWdlIGRpbWVuc2lvbnMgYXJlIHNtYWxsZXIgdGhhbiB0aGUgZGltZW5zaW9ucyBvZiB0aGUKLSBKUEVHIGltYWdlIGJlaW5nIGRlY29tcHJlc3NlZCwgdGhlbiBUdXJib0pQRUcgd2lsbCB1c2Ugc2NhbGluZyBpbiB0aGUgSlBFRwotIGRlY29tcHJlc3NvciB0byBnZW5lcmF0ZSB0aGUgbGFyZ2VzdCBwb3NzaWJsZSBpbWFnZSB0aGF0IHdpbGwgZml0IHdpdGhpbgotIHRoZSBkZXNpcmVkIGRpbWVuc2lvbnMuICBTZXR0aW5nIHRoaXMgdG8gMCBpcyB0aGUgc2FtZSBhcyBzZXR0aW5nIGl0IHRvCi0gdGhlIHdpZHRoIG9mIHRoZSBKUEVHIGltYWdlIChpbiBvdGhlciB3b3JkcywgdGhlIHdpZHRoIHdpbGwgbm90IGJlCi0gY29uc2lkZXJlZCB3aGVuIGRldGVybWluaW5nIHRoZSBzY2FsZWQgaW1hZ2Ugc2l6ZS4pPEREPjxDT0RFPnBpdGNoPC9DT0RFPiAtIGJ5dGVzIHBlciBsaW5lIG9mIHRoZSBkZXN0aW5hdGlvbiBpbWFnZS4gIE5vcm1hbGx5LCB0aGlzCisgPC9jb2RlPiB3aXRoIG9uZSBvZiB0aGUgc2NhbGluZyBmYWN0b3JzIHJldHVybmVkIGZyb20gPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNnZXRTY2FsaW5nRmFjdG9ycygpIj48Q09ERT5USi5nZXRTY2FsaW5nRmFjdG9ycygpPC9DT0RFPjwvQT4gb3IgYnkgY2FsbGluZyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI2dldFNjYWxlZEhlaWdodChpbnQsIGludCkiPjxDT0RFPmdldFNjYWxlZEhlaWdodChpbnQsIGludCk8L0NPREU+PC9BPi4gIEhvd2V2ZXIsCisgdGhlIGJ1ZmZlciBtYXkgYWxzbyBiZSBsYXJnZXIgdGhhbiB0aGUgZGltZW5zaW9ucyBvZiB0aGUgSlBFRyBpbWFnZSwgaW4KKyB3aGljaCBjYXNlIHRoZSA8Y29kZT54PC9jb2RlPiwgPGNvZGU+eTwvY29kZT4sIGFuZCA8Y29kZT5waXRjaDwvY29kZT4KKyBwYXJhbWV0ZXJzIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIHJlZ2lvbiBpbnRvIHdoaWNoIHRoZSBKUEVHIGltYWdlCisgc2hvdWxkIGJlIGRlY29tcHJlc3NlZC48REQ+PENPREU+eDwvQ09ERT4gLSB4IG9mZnNldCAoaW4gcGl4ZWxzKSBvZiB0aGUgcmVnaW9uIGludG8gd2hpY2ggdGhlIEpQRUcgaW1hZ2UKKyBzaG91bGQgYmUgZGVjb21wcmVzc2VkLCByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgPGNvZGU+ZHN0QnVmPC9jb2RlPi48REQ+PENPREU+eTwvQ09ERT4gLSB5IG9mZnNldCAoaW4gcGl4ZWxzKSBvZiB0aGUgcmVnaW9uIGludG8gd2hpY2ggdGhlIEpQRUcgaW1hZ2UKKyBzaG91bGQgYmUgZGVjb21wcmVzc2VkLCByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgPGNvZGU+ZHN0QnVmPC9jb2RlPi48REQ+PENPREU+ZGVzaXJlZFdpZHRoPC9DT0RFPiAtIGRlc2lyZWQgd2lkdGggKGluIHBpeGVscykgb2YgdGhlIGRlY29tcHJlc3NlZCBpbWFnZQorIChvciBpbWFnZSByZWdpb24uKSAgSWYgdGhlIGRlc2lyZWQgaW1hZ2UgZGltZW5zaW9ucyBhcmUgZGlmZmVyZW50IHRoYW4gdGhlCisgZGltZW5zaW9ucyBvZiB0aGUgSlBFRyBpbWFnZSBiZWluZyBkZWNvbXByZXNzZWQsIHRoZW4gVHVyYm9KUEVHIHdpbGwgdXNlCisgc2NhbGluZyBpbiB0aGUgSlBFRyBkZWNvbXByZXNzb3IgdG8gZ2VuZXJhdGUgdGhlIGxhcmdlc3QgcG9zc2libGUgaW1hZ2UKKyB0aGF0IHdpbGwgZml0IHdpdGhpbiB0aGUgZGVzaXJlZCBkaW1lbnNpb25zLiAgU2V0dGluZyB0aGlzIHRvIDAgaXMgdGhlCisgc2FtZSBhcyBzZXR0aW5nIGl0IHRvIHRoZSB3aWR0aCBvZiB0aGUgSlBFRyBpbWFnZSAoaW4gb3RoZXIgd29yZHMsIHRoZQorIHdpZHRoIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgd2hlbiBkZXRlcm1pbmluZyB0aGUgc2NhbGVkIGltYWdlIHNpemUuKTxERD48Q09ERT5waXRjaDwvQ09ERT4gLSBieXRlcyBwZXIgbGluZSBvZiB0aGUgZGVzdGluYXRpb24gaW1hZ2UuICBOb3JtYWxseSwgdGhpcwogIHNob3VsZCBiZSBzZXQgdG8gPGNvZGU+c2NhbGVkV2lkdGggKiBUSi5waXhlbFNpemUocGl4ZWxGb3JtYXQpPC9jb2RlPiBpZgogIHRoZSBkZWNvbXByZXNzZWQgaW1hZ2UgaXMgdW5wYWRkZWQsIGJ1dCB5b3UgY2FuIHVzZSB0aGlzIHRvLCBmb3IgaW5zdGFuY2UsCi0gcGFkIGVhY2ggbGluZSBvZiB0aGUgZGVjb21wcmVzc2VkIGltYWdlIHRvIGEgNC1ieXRlIGJvdW5kYXJ5LiAgTk9URToKKyBwYWQgZWFjaCBsaW5lIG9mIHRoZSBkZWNvbXByZXNzZWQgaW1hZ2UgdG8gYSA0LWJ5dGUgYm91bmRhcnkgb3IgdG8KKyBkZWNvbXByZXNzIHRoZSBKUEVHIGltYWdlIGludG8gYSByZWdpb24gb2YgYSBsYXJnZXIgaW1hZ2UuICBOT1RFOgogIDxjb2RlPnNjYWxlZFdpZHRoPC9jb2RlPiBjYW4gYmUgZGV0ZXJtaW5lZCBieSBjYWxsaW5nIDxjb2RlPgogIHNjYWxpbmdGYWN0b3IuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpTY2FsaW5nRmFjdG9yLmh0bWwjZ2V0U2NhbGVkKGludCkiPjxDT0RFPmdldFNjYWxlZDwvQ09ERT48L0E+KGpwZWdXaWR0aCkKICA8L2NvZGU+IG9yIGJ5IGNhbGxpbmcgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNnZXRTY2FsZWRXaWR0aChpbnQsIGludCkiPjxDT0RFPmdldFNjYWxlZFdpZHRoKGludCwgaW50KTwvQ09ERT48L0E+LiAgU2V0dGluZyB0aGlzIHBhcmFtZXRlciB0bwogIDAgaXMgdGhlIGVxdWl2YWxlbnQgb2Ygc2V0dGluZyBpdCB0byA8Y29kZT5zY2FsZWRXaWR0aCAqCi0gVEoucGl4ZWxTaXplKHBpeGVsRm9ybWF0KTwvY29kZT4uPEREPjxDT0RFPmRlc2lyZWRIZWlnaHQ8L0NPREU+IC0gZGVzaXJlZCBoZWlnaHQgKGluIHBpeGVscykgb2YgdGhlIGRlY29tcHJlc3NlZCBpbWFnZS4KLSBJZiB0aGUgZGVzaXJlZCBpbWFnZSBkaW1lbnNpb25zIGFyZSBzbWFsbGVyIHRoYW4gdGhlIGRpbWVuc2lvbnMgb2YgdGhlCi0gSlBFRyBpbWFnZSBiZWluZyBkZWNvbXByZXNzZWQsIHRoZW4gVHVyYm9KUEVHIHdpbGwgdXNlIHNjYWxpbmcgaW4gdGhlIEpQRUcKLSBkZWNvbXByZXNzb3IgdG8gZ2VuZXJhdGUgdGhlIGxhcmdlc3QgcG9zc2libGUgaW1hZ2UgdGhhdCB3aWxsIGZpdCB3aXRoaW4KLSB0aGUgZGVzaXJlZCBkaW1lbnNpb25zLiAgU2V0dGluZyB0aGlzIHRvIDAgaXMgdGhlIHNhbWUgYXMgc2V0dGluZyBpdCB0bwotIHRoZSBoZWlnaHQgb2YgdGhlIEpQRUcgaW1hZ2UgKGluIG90aGVyIHdvcmRzLCB0aGUgaGVpZ2h0IHdpbGwgbm90IGJlCi0gY29uc2lkZXJlZCB3aGVuIGRldGVybWluaW5nIHRoZSBzY2FsZWQgaW1hZ2Ugc2l6ZS4pPEREPjxDT0RFPnBpeGVsRm9ybWF0PC9DT0RFPiAtIHBpeGVsIGZvcm1hdCBvZiB0aGUgZGVjb21wcmVzc2VkIGltYWdlIChvbmUgb2YKLSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPjxDT0RFPlRKLlBGXyo8L0NPREU+PC9BPik8REQ+PENPREU+ZmxhZ3M8L0NPREU+IC0gdGhlIGJpdHdpc2UgT1Igb2Ygb25lIG9yIG1vcmUgb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj48Q09ERT5USi5GTEFHXyo8L0NPREU+PC9BPgorIFRKLnBpeGVsU2l6ZShwaXhlbEZvcm1hdCk8L2NvZGU+LjxERD48Q09ERT5kZXNpcmVkSGVpZ2h0PC9DT0RFPiAtIGRlc2lyZWQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIHRoZSBkZWNvbXByZXNzZWQgaW1hZ2UKKyAob3IgaW1hZ2UgcmVnaW9uLikgIElmIHRoZSBkZXNpcmVkIGltYWdlIGRpbWVuc2lvbnMgYXJlIGRpZmZlcmVudCB0aGFuIHRoZQorIGRpbWVuc2lvbnMgb2YgdGhlIEpQRUcgaW1hZ2UgYmVpbmcgZGVjb21wcmVzc2VkLCB0aGVuIFR1cmJvSlBFRyB3aWxsIHVzZQorIHNjYWxpbmcgaW4gdGhlIEpQRUcgZGVjb21wcmVzc29yIHRvIGdlbmVyYXRlIHRoZSBsYXJnZXN0IHBvc3NpYmxlIGltYWdlCisgdGhhdCB3aWxsIGZpdCB3aXRoaW4gdGhlIGRlc2lyZWQgZGltZW5zaW9ucy4gIFNldHRpbmcgdGhpcyB0byAwIGlzIHRoZQorIHNhbWUgYXMgc2V0dGluZyBpdCB0byB0aGUgaGVpZ2h0IG9mIHRoZSBKUEVHIGltYWdlIChpbiBvdGhlciB3b3JkcywgdGhlCisgaGVpZ2h0IHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgd2hlbiBkZXRlcm1pbmluZyB0aGUgc2NhbGVkIGltYWdlIHNpemUuKTxERD48Q09ERT5waXhlbEZvcm1hdDwvQ09ERT4gLSBwaXhlbCBmb3JtYXQgb2YgdGhlIGRlY29tcHJlc3NlZC9kZWNvZGVkIGltYWdlIChvbmUgb2YKKyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI1BGX1JHQiI+PENPREU+VEouUEZfKjwvQ09ERT48L0E+KTxERD48Q09ERT5mbGFnczwvQ09ERT4gLSB0aGUgYml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZgorIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjRkxBR19CT1RUT01VUCI+PENPREU+VEouRkxBR18qPC9DT0RFPjwvQT4KKzxEVD48Qj5UaHJvd3M6PC9CPgorPEREPjxDT0RFPmphdmEubGFuZy5FeGNlcHRpb248L0NPREU+PC9ETD4KKzwvREQ+Cis8L0RMPgorPEhSPgorCis8QSBOQU1FPSJkZWNvbXByZXNzKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIj48IS0tIC0tPjwvQT48SDM+CitkZWNvbXByZXNzPC9IMz4KKzxQUkU+Cis8Rk9OVCBTSVpFPSItMSI+QERlcHJlY2F0ZWQKKzwvRk9OVD5wdWJsaWMgdm9pZCA8Qj5kZWNvbXByZXNzPC9CPihieXRlW10mbmJzcDtkc3RCdWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7ZGVzaXJlZFdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO3BpdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO2Rlc2lyZWRIZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7cGl4ZWxGb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7ZmxhZ3MpCisgICAgICAgICAgICAgICAgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb248L1BSRT4KKzxETD4KKzxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5Vc2UKKyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI2RlY29tcHJlc3MoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIj48Q09ERT5kZWNvbXByZXNzKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KTwvQ09ERT48L0E+IGluc3RlYWQuPC9JPgorPFA+Cis8REQ+PERMPgorCiA8RFQ+PEI+VGhyb3dzOjwvQj4KIDxERD48Q09ERT5qYXZhLmxhbmcuRXhjZXB0aW9uPC9DT0RFPjwvREw+CiA8L0REPgpAQCAtNzUwLDEwICs4MTMsMTQgQEAKIDxQPgogPEREPjxETD4KIDxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+ZGVzaXJlZFdpZHRoPC9DT0RFPiAtIHNlZQotIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjZGVjb21wcmVzcyhieXRlW10sIGludCwgaW50LCBpbnQsIGludCwgaW50KSI+PENPREU+ZGVjb21wcmVzcyhieXRlW10sIGludCwgaW50LCBpbnQsIGludCwgaW50KTwvQ09ERT48L0E+IGZvciBkZXNjcmlwdGlvbjxERD48Q09ERT5waXRjaDwvQ09ERT4gLSBzZWUKLSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI2RlY29tcHJlc3MoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQsIGludCkiPjxDT0RFPmRlY29tcHJlc3MoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQsIGludCk8L0NPREU+PC9BPiBmb3IgZGVzY3JpcHRpb248REQ+PENPREU+ZGVzaXJlZEhlaWdodDwvQ09ERT4gLSBzZWUKLSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI2RlY29tcHJlc3MoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQsIGludCkiPjxDT0RFPmRlY29tcHJlc3MoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQsIGludCk8L0NPREU+PC9BPiBmb3IgZGVzY3JpcHRpb248REQ+PENPREU+cGl4ZWxGb3JtYXQ8L0NPREU+IC0gcGl4ZWwgZm9ybWF0IG9mIHRoZSBkZWNvbXByZXNzZWQgaW1hZ2UgKG9uZSBvZgotIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+PENPREU+VEouUEZfKjwvQ09ERT48L0E+KTxERD48Q09ERT5mbGFnczwvQ09ERT4gLSB0aGUgYml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPjxDT0RFPlRKLkZMQUdfKjwvQ09ERT48L0E+CisgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNkZWNvbXByZXNzKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KSI+PENPREU+ZGVjb21wcmVzcyhieXRlW10sIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCk8L0NPREU+PC9BPgorIGZvciBkZXNjcmlwdGlvbjxERD48Q09ERT5waXRjaDwvQ09ERT4gLSBzZWUKKyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI2RlY29tcHJlc3MoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIj48Q09ERT5kZWNvbXByZXNzKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KTwvQ09ERT48L0E+CisgZm9yIGRlc2NyaXB0aW9uPEREPjxDT0RFPmRlc2lyZWRIZWlnaHQ8L0NPREU+IC0gc2VlCisgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNkZWNvbXByZXNzKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KSI+PENPREU+ZGVjb21wcmVzcyhieXRlW10sIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCk8L0NPREU+PC9BPgorIGZvciBkZXNjcmlwdGlvbjxERD48Q09ERT5waXhlbEZvcm1hdDwvQ09ERT4gLSBwaXhlbCBmb3JtYXQgb2YgdGhlIGRlY29tcHJlc3NlZCBpbWFnZSAob25lIG9mCisgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNQRl9SR0IiPjxDT0RFPlRKLlBGXyo8L0NPREU+PC9BPik8REQ+PENPREU+ZmxhZ3M8L0NPREU+IC0gdGhlIGJpdHdpc2UgT1Igb2Ygb25lIG9yIG1vcmUgb2YKKyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI0ZMQUdfQk9UVE9NVVAiPjxDT0RFPlRKLkZMQUdfKjwvQ09ERT48L0E+CiA8RFQ+PEI+UmV0dXJuczo8L0I+PEREPmEgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGRlY29tcHJlc3NlZCBpbWFnZQogPERUPjxCPlRocm93czo8L0I+CiA8REQ+PENPREU+amF2YS5sYW5nLkV4Y2VwdGlvbjwvQ09ERT48L0RMPgpAQCAtNzcyLDE2ICs4MzksMTggQEAKICBpbnN0YW5jZSBhbmQgb3V0cHV0IGEgWVVWIHBsYW5hciBpbWFnZSB0byB0aGUgZ2l2ZW4gZGVzdGluYXRpb24gYnVmZmVyLgogIFRoaXMgbWV0aG9kIHBlcmZvcm1zIEpQRUcgZGVjb21wcmVzc2lvbiBidXQgbGVhdmVzIG91dCB0aGUgY29sb3IKICBjb252ZXJzaW9uIHN0ZXAsIHNvIGEgcGxhbmFyIFlVViBpbWFnZSBpcyBnZW5lcmF0ZWQgaW5zdGVhZCBvZiBhbiBSR0IKLSBpbWFnZS4gIFRoZSBwYWRkaW5nIG9mIHRoZSBwbGFuZXMgaW4gdGhpcyBpbWFnZSBpcyB0aGUgc2FtZSBhcyB0aGUgaW1hZ2VzCi0gZ2VuZXJhdGVkIGJ5IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sI2VuY29kZVlVVihieXRlW10sIGludCkiPjxDT0RFPlRKQ29tcHJlc3Nvci5lbmNvZGVZVVYoYnl0ZVtdLCBpbnQpPC9DT0RFPjwvQT4uICBOb3RlIHRoYXQsIGlmCi0gdGhlIHdpZHRoIG9yIGhlaWdodCBvZiB0aGUgaW1hZ2UgaXMgbm90IGFuIGV2ZW4gbXVsdGlwbGUgb2YgdGhlIE1DVSBibG9jawotIHNpemUgKHNlZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI2dldE1DVVdpZHRoKGludCkiPjxDT0RFPlRKLmdldE1DVVdpZHRoKGludCk8L0NPREU+PC9BPiBhbmQgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNnZXRNQ1VIZWlnaHQoaW50KSI+PENPREU+VEouZ2V0TUNVSGVpZ2h0KGludCk8L0NPREU+PC9BPiksIHRoZW4gYW4KLSBpbnRlcm1lZGlhdGUgYnVmZmVyIGNvcHkgd2lsbCBiZSBwZXJmb3JtZWQgd2l0aGluIFR1cmJvSlBFRy4KKyBpbWFnZS4gIFRoZSBwYWRkaW5nIG9mIHRoZSBwbGFuZXMgaW4gdGhpcyBpbWFnZSBpcyB0aGUgc2FtZSBhcyBpbiB0aGUKKyBpbWFnZXMgZ2VuZXJhdGVkIGJ5IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5odG1sI2VuY29kZVlVVihieXRlW10sIGludCkiPjxDT0RFPlRKQ29tcHJlc3Nvci5lbmNvZGVZVVYoYnl0ZVtdLCBpbnQpPC9DT0RFPjwvQT4uCisgPHA+CisgTk9URTogVGVjaG5pY2FsbHksIHRoZSBKUEVHIGZvcm1hdCB1c2VzIHRoZSBZQ2JDciBjb2xvcnNwYWNlLCBidXQgcGVyIHRoZQorIGNvbnZlbnRpb24gb2YgdGhlIGRpZ2l0YWwgdmlkZW8gY29tbXVuaXR5LCB0aGUgVHVyYm9KUEVHIEFQSSB1c2VzICJZVVYiIHRvCisgcmVmZXIgdG8gYW4gaW1hZ2UgZm9ybWF0IGNvbnNpc3Rpbmcgb2YgWSwgQ2IsIGFuZCBDciBpbWFnZSBwbGFuZXMuCiA8UD4KIDxERD48REw+CiA8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmRzdEJ1ZjwvQ09ERT4gLSBidWZmZXIgdGhhdCB3aWxsIHJlY2VpdmUgdGhlIFlVViBwbGFuYXIgaW1hZ2UuICBVc2UKICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI2J1ZlNpemVZVVYoaW50LCBpbnQsIGludCkiPjxDT0RFPlRKLmJ1ZlNpemVZVVYoaW50LCBpbnQsIGludCk8L0NPREU+PC9BPiB0byBkZXRlcm1pbmUgdGhlIGFwcHJvcHJpYXRlIHNpemUgZm9yIHRoaXMgYnVmZmVyCi0gYmFzZWQgb24gdGhlIGltYWdlIHdpZHRoLCBoZWlnaHQsIGFuZCBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZy48REQ+PENPREU+ZmxhZ3M8L0NPREU+IC0gdGhlIGJpdHdpc2UgT1Igb2Ygb25lIG9yIG1vcmUgb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj48Q09ERT5USi5GTEFHXyo8L0NPREU+PC9BPgorIGJhc2VkIG9uIHRoZSBpbWFnZSB3aWR0aCwgaGVpZ2h0LCBhbmQgbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcuPEREPjxDT0RFPmZsYWdzPC9DT0RFPiAtIHRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mCisgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNGTEFHX0JPVFRPTVVQIj48Q09ERT5USi5GTEFHXyo8L0NPREU+PC9BPgogPERUPjxCPlRocm93czo8L0I+CiA8REQ+PENPREU+amF2YS5sYW5nLkV4Y2VwdGlvbjwvQ09ERT48L0RMPgogPC9ERD4KQEAgLTc5OCw3ICs4NjcsOCBAQAogIGluc3RhbmNlIGFuZCByZXR1cm4gYSBidWZmZXIgY29udGFpbmluZyBhIFlVViBwbGFuYXIgaW1hZ2UuICBTZWUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNkZWNvbXByZXNzVG9ZVVYoYnl0ZVtdLCBpbnQpIj48Q09ERT5kZWNvbXByZXNzVG9ZVVYoYnl0ZVtdLCBpbnQpPC9DT0RFPjwvQT4gZm9yIG1vcmUgZGV0YWlsLgogPFA+CiA8REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5mbGFnczwvQ09ERT4gLSB0aGUgYml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPjxDT0RFPlRKLkZMQUdfKjwvQ09ERT48L0E+Cis8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmZsYWdzPC9DT0RFPiAtIHRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mCisgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNGTEFHX0JPVFRPTVVQIj48Q09ERT5USi5GTEFHXyo8L0NPREU+PC9BPgogPERUPjxCPlJldHVybnM6PC9CPjxERD5hIGJ1ZmZlciBjb250YWluaW5nIGEgWVVWIHBsYW5hciBpbWFnZQogPERUPjxCPlRocm93czo8L0I+CiA8REQ+PENPREU+amF2YS5sYW5nLkV4Y2VwdGlvbjwvQ09ERT48L0RMPgpAQCAtODA2LDYgKzg3Niw2MCBAQAogPC9ETD4KIDxIUj4KIAorPEEgTkFNRT0iZGVjb21wcmVzcyhpbnRbXSwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KSI+PCEtLSAtLT48L0E+PEgzPgorZGVjb21wcmVzczwvSDM+Cis8UFJFPgorcHVibGljIHZvaWQgPEI+ZGVjb21wcmVzczwvQj4oaW50W10mbmJzcDtkc3RCdWYsCisgICAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO3gsCisgICAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO3ksCisgICAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO2Rlc2lyZWRXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7c3RyaWRlLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtkZXNpcmVkSGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtwaXhlbEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7ZmxhZ3MpCisgICAgICAgICAgICAgICAgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb248L1BSRT4KKzxETD4KKzxERD5EZWNvbXByZXNzIHRoZSBKUEVHIHNvdXJjZSBpbWFnZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBkZWNvbXByZXNzb3IKKyBpbnN0YW5jZSBhbmQgb3V0cHV0IGEgZGVjb21wcmVzc2VkIGltYWdlIHRvIHRoZSBnaXZlbiBkZXN0aW5hdGlvbiBidWZmZXIuCis8UD4KKzxERD48REw+Cis8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmRzdEJ1ZjwvQ09ERT4gLSBidWZmZXIgdGhhdCB3aWxsIHJlY2VpdmUgdGhlIGRlY29tcHJlc3NlZCBpbWFnZS4gIFRoaXMKKyBidWZmZXIgc2hvdWxkIG5vcm1hbGx5IGJlIDxjb2RlPnN0cmlkZSAqIHNjYWxlZEhlaWdodDwvY29kZT4gcGl4ZWxzIGluCisgc2l6ZSwgd2hlcmUgPGNvZGU+c2NhbGVkSGVpZ2h0PC9jb2RlPiBjYW4gYmUgZGV0ZXJtaW5lZCBieSBjYWxsaW5nIDxjb2RlPgorIHNjYWxpbmdGYWN0b3IuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpTY2FsaW5nRmFjdG9yLmh0bWwjZ2V0U2NhbGVkKGludCkiPjxDT0RFPmdldFNjYWxlZDwvQ09ERT48L0E+KGpwZWdIZWlnaHQpCisgPC9jb2RlPiB3aXRoIG9uZSBvZiB0aGUgc2NhbGluZyBmYWN0b3JzIHJldHVybmVkIGZyb20gPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNnZXRTY2FsaW5nRmFjdG9ycygpIj48Q09ERT5USi5nZXRTY2FsaW5nRmFjdG9ycygpPC9DT0RFPjwvQT4gb3IgYnkgY2FsbGluZyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI2dldFNjYWxlZEhlaWdodChpbnQsIGludCkiPjxDT0RFPmdldFNjYWxlZEhlaWdodChpbnQsIGludCk8L0NPREU+PC9BPi4gIEhvd2V2ZXIsCisgdGhlIGJ1ZmZlciBtYXkgYWxzbyBiZSBsYXJnZXIgdGhhbiB0aGUgZGltZW5zaW9ucyBvZiB0aGUgSlBFRyBpbWFnZSwgaW4KKyB3aGljaCBjYXNlIHRoZSA8Y29kZT54PC9jb2RlPiwgPGNvZGU+eTwvY29kZT4sIGFuZCA8Y29kZT5zdHJpZGU8L2NvZGU+CisgcGFyYW1ldGVycyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSByZWdpb24gaW50byB3aGljaCB0aGUgSlBFRyBpbWFnZQorIHNob3VsZCBiZSBkZWNvbXByZXNzZWQuPEREPjxDT0RFPng8L0NPREU+IC0geCBvZmZzZXQgKGluIHBpeGVscykgb2YgdGhlIHJlZ2lvbiBpbnRvIHdoaWNoIHRoZSBKUEVHIGltYWdlCisgc2hvdWxkIGJlIGRlY29tcHJlc3NlZCwgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIDxjb2RlPmRzdEJ1ZjwvY29kZT4uPEREPjxDT0RFPnk8L0NPREU+IC0geSBvZmZzZXQgKGluIHBpeGVscykgb2YgdGhlIHJlZ2lvbiBpbnRvIHdoaWNoIHRoZSBKUEVHIGltYWdlCisgc2hvdWxkIGJlIGRlY29tcHJlc3NlZCwgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIDxjb2RlPmRzdEJ1ZjwvY29kZT4uPEREPjxDT0RFPmRlc2lyZWRXaWR0aDwvQ09ERT4gLSBkZXNpcmVkIHdpZHRoIChpbiBwaXhlbHMpIG9mIHRoZSBkZWNvbXByZXNzZWQgaW1hZ2UKKyAob3IgaW1hZ2UgcmVnaW9uLikgIElmIHRoZSBkZXNpcmVkIGltYWdlIGRpbWVuc2lvbnMgYXJlIGRpZmZlcmVudCB0aGFuIHRoZQorIGRpbWVuc2lvbnMgb2YgdGhlIEpQRUcgaW1hZ2UgYmVpbmcgZGVjb21wcmVzc2VkLCB0aGVuIFR1cmJvSlBFRyB3aWxsIHVzZQorIHNjYWxpbmcgaW4gdGhlIEpQRUcgZGVjb21wcmVzc29yIHRvIGdlbmVyYXRlIHRoZSBsYXJnZXN0IHBvc3NpYmxlIGltYWdlCisgdGhhdCB3aWxsIGZpdCB3aXRoaW4gdGhlIGRlc2lyZWQgZGltZW5zaW9ucy4gIFNldHRpbmcgdGhpcyB0byAwIGlzIHRoZQorIHNhbWUgYXMgc2V0dGluZyBpdCB0byB0aGUgd2lkdGggb2YgdGhlIEpQRUcgaW1hZ2UgKGluIG90aGVyIHdvcmRzLCB0aGUKKyB3aWR0aCB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIHdoZW4gZGV0ZXJtaW5pbmcgdGhlIHNjYWxlZCBpbWFnZSBzaXplLik8REQ+PENPREU+c3RyaWRlPC9DT0RFPiAtIHBpeGVscyBwZXIgbGluZSBvZiB0aGUgZGVzdGluYXRpb24gaW1hZ2UuICBOb3JtYWxseSwgdGhpcworIHNob3VsZCBiZSBzZXQgdG8gPGNvZGU+c2NhbGVkV2lkdGg8L2NvZGU+LCBidXQgeW91IGNhbiB1c2UgdGhpcyB0bywgZm9yCisgaW5zdGFuY2UsIGRlY29tcHJlc3MgdGhlIEpQRUcgaW1hZ2UgaW50byBhIHJlZ2lvbiBvZiBhIGxhcmdlciBpbWFnZS4KKyBOT1RFOiA8Y29kZT5zY2FsZWRXaWR0aDwvY29kZT4gY2FuIGJlIGRldGVybWluZWQgYnkgY2FsbGluZyA8Y29kZT4KKyBzY2FsaW5nRmFjdG9yLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKU2NhbGluZ0ZhY3Rvci5odG1sI2dldFNjYWxlZChpbnQpIj48Q09ERT5nZXRTY2FsZWQ8L0NPREU+PC9BPihqcGVnV2lkdGgpCisgPC9jb2RlPiBvciBieSBjYWxsaW5nIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjZ2V0U2NhbGVkV2lkdGgoaW50LCBpbnQpIj48Q09ERT5nZXRTY2FsZWRXaWR0aChpbnQsIGludCk8L0NPREU+PC9BPi4gIFNldHRpbmcgdGhpcyBwYXJhbWV0ZXIgdG8KKyAwIGlzIHRoZSBlcXVpdmFsZW50IG9mIHNldHRpbmcgaXQgdG8gPGNvZGU+c2NhbGVkV2lkdGg8L2NvZGU+LjxERD48Q09ERT5kZXNpcmVkSGVpZ2h0PC9DT0RFPiAtIGRlc2lyZWQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIHRoZSBkZWNvbXByZXNzZWQgaW1hZ2UKKyAob3IgaW1hZ2UgcmVnaW9uLikgIElmIHRoZSBkZXNpcmVkIGltYWdlIGRpbWVuc2lvbnMgYXJlIGRpZmZlcmVudCB0aGFuIHRoZQorIGRpbWVuc2lvbnMgb2YgdGhlIEpQRUcgaW1hZ2UgYmVpbmcgZGVjb21wcmVzc2VkLCB0aGVuIFR1cmJvSlBFRyB3aWxsIHVzZQorIHNjYWxpbmcgaW4gdGhlIEpQRUcgZGVjb21wcmVzc29yIHRvIGdlbmVyYXRlIHRoZSBsYXJnZXN0IHBvc3NpYmxlIGltYWdlCisgdGhhdCB3aWxsIGZpdCB3aXRoaW4gdGhlIGRlc2lyZWQgZGltZW5zaW9ucy4gIFNldHRpbmcgdGhpcyB0byAwIGlzIHRoZQorIHNhbWUgYXMgc2V0dGluZyBpdCB0byB0aGUgaGVpZ2h0IG9mIHRoZSBKUEVHIGltYWdlIChpbiBvdGhlciB3b3JkcywgdGhlCisgaGVpZ2h0IHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgd2hlbiBkZXRlcm1pbmluZyB0aGUgc2NhbGVkIGltYWdlIHNpemUuKTxERD48Q09ERT5waXhlbEZvcm1hdDwvQ09ERT4gLSBwaXhlbCBmb3JtYXQgb2YgdGhlIGRlY29tcHJlc3NlZCBpbWFnZSAob25lIG9mCisgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNQRl9SR0IiPjxDT0RFPlRKLlBGXyo8L0NPREU+PC9BPik8REQ+PENPREU+ZmxhZ3M8L0NPREU+IC0gdGhlIGJpdHdpc2UgT1Igb2Ygb25lIG9yIG1vcmUgb2YKKyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI0ZMQUdfQk9UVE9NVVAiPjxDT0RFPlRKLkZMQUdfKjwvQ09ERT48L0E+Cis8RFQ+PEI+VGhyb3dzOjwvQj4KKzxERD48Q09ERT5qYXZhLmxhbmcuRXhjZXB0aW9uPC9DT0RFPjwvREw+Cis8L0REPgorPC9ETD4KKzxIUj4KKwogPEEgTkFNRT0iZGVjb21wcmVzcyhqYXZhLmF3dC5pbWFnZS5CdWZmZXJlZEltYWdlLCBpbnQpIj48IS0tIC0tPjwvQT48SDM+CiBkZWNvbXByZXNzPC9IMz4KIDxQUkU+CkBAIC04MTksNyArOTQzLDEwIEBACiA8UD4KIDxERD48REw+CiA8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmRzdEltYWdlPC9DT0RFPiAtIGEgPGNvZGU+QnVmZmVyZWRJbWFnZTwvY29kZT4gaW5zdGFuY2UgdGhhdCB3aWxsIHJlY2VpdmUKLSB0aGUgZGVjb21wcmVzc2VkIGltYWdlPEREPjxDT0RFPmZsYWdzPC9DT0RFPiAtIHRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+PENPREU+VEouRkxBR18qPC9DT0RFPjwvQT4KKyB0aGUgZGVjb21wcmVzc2VkIGltYWdlLiAgVGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlCisgPGNvZGU+QnVmZmVyZWRJbWFnZTwvY29kZT4gaW5zdGFuY2UgbXVzdCBtYXRjaCBvbmUgb2YgdGhlIHNjYWxlZCBpbWFnZQorIHNpemVzIHRoYXQgVHVyYm9KUEVHIGlzIGNhcGFibGUgb2YgZ2VuZXJhdGluZyBmcm9tIHRoZSBKUEVHIGltYWdlLjxERD48Q09ERT5mbGFnczwvQ09ERT4gLSB0aGUgYml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZgorIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwjRkxBR19CT1RUT01VUCI+PENPREU+VEouRkxBR18qPC9DT0RFPjwvQT4KIDxEVD48Qj5UaHJvd3M6PC9CPgogPEREPjxDT0RFPmphdmEubGFuZy5FeGNlcHRpb248L0NPREU+PC9ETD4KIDwvREQ+CkBAIC04NDEsMTAgKzk2OCwxMyBAQAogPFA+CiA8REQ+PERMPgogPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5kZXNpcmVkV2lkdGg8L0NPREU+IC0gc2VlCi0gPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNkZWNvbXByZXNzKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIj48Q09ERT5kZWNvbXByZXNzKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpPC9DT0RFPjwvQT4gZm9yIGRlc2NyaXB0aW9uPEREPjxDT0RFPmRlc2lyZWRIZWlnaHQ8L0NPREU+IC0gc2VlCi0gPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNkZWNvbXByZXNzKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIj48Q09ERT5kZWNvbXByZXNzKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpPC9DT0RFPjwvQT4gZm9yIGRlc2NyaXB0aW9uPEREPjxDT0RFPmJ1ZmZlcmVkSW1hZ2VUeXBlPC9DT0RFPiAtIHRoZSBpbWFnZSB0eXBlIG9mIHRoZSBuZXdseS1jcmVhdGVkCi0gPGNvZGU+QnVmZmVyZWRJbWFnZTwvY29kZT4gaW5zdGFuY2UgKGZvciBpbnN0YW5jZSwKLSA8Y29kZT5CdWZmZXJlZEltYWdlLlRZUEVfSU5UX1JHQjwvY29kZT4pPEREPjxDT0RFPmZsYWdzPC9DT0RFPiAtIHRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+PENPREU+VEouRkxBR18qPC9DT0RFPjwvQT4KKyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI2RlY29tcHJlc3MoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIj48Q09ERT5kZWNvbXByZXNzKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KTwvQ09ERT48L0E+IGZvcgorIGRlc2NyaXB0aW9uPEREPjxDT0RFPmRlc2lyZWRIZWlnaHQ8L0NPREU+IC0gc2VlCisgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNkZWNvbXByZXNzKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KSI+PENPREU+ZGVjb21wcmVzcyhieXRlW10sIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCk8L0NPREU+PC9BPiBmb3IKKyBkZXNjcmlwdGlvbjxERD48Q09ERT5idWZmZXJlZEltYWdlVHlwZTwvQ09ERT4gLSB0aGUgaW1hZ2UgdHlwZSBvZiB0aGUgPGNvZGU+QnVmZmVyZWRJbWFnZTwvY29kZT4KKyBpbnN0YW5jZSB0aGF0IHdpbGwgYmUgY3JlYXRlZCAoZm9yIGluc3RhbmNlLAorIDxjb2RlPkJ1ZmZlcmVkSW1hZ2UuVFlQRV9JTlRfUkdCPC9jb2RlPik8REQ+PENPREU+ZmxhZ3M8L0NPREU+IC0gdGhlIGJpdHdpc2UgT1Igb2Ygb25lIG9yIG1vcmUgb2YKKyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI0ZMQUdfQk9UVE9NVVAiPjxDT0RFPlRKLkZMQUdfKjwvQ09ERT48L0E+CiA8RFQ+PEI+UmV0dXJuczo8L0I+PEREPmEgPGNvZGU+QnVmZmVyZWRJbWFnZTwvY29kZT4gaW5zdGFuY2UgY29udGFpbmluZyB0aGUKICBkZWNvbXByZXNzZWQgaW1hZ2UKIDxEVD48Qj5UaHJvd3M6PC9CPgpkaWZmIC0tZ2l0IGEvamF2YS9kb2Mvb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpTY2FsaW5nRmFjdG9yLmh0bWwgYi9qYXZhL2RvYy9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlNjYWxpbmdGYWN0b3IuaHRtbAppbmRleCA0OTY0YTI5Li5hZjI5ZmM1IDEwMDY0NAotLS0gYS9qYXZhL2RvYy9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlNjYWxpbmdGYWN0b3IuaHRtbAorKysgYi9qYXZhL2RvYy9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlNjYWxpbmdGYWN0b3IuaHRtbApAQCAtMiwxMiArMiwxMCBAQAogPCEtLU5ld1BhZ2UtLT4KIDxIVE1MPgogPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjYuMF8zMykgb24gRnJpIEp1biAyOSAxNDoyOToxMyBDRFQgMjAxMiAtLT4KIDxUSVRMRT4KIFRKU2NhbGluZ0ZhY3RvcgogPC9USVRMRT4KIAotPE1FVEEgTkFNRT0iZGF0ZSIgQ09OVEVOVD0iMjAxMi0wNi0yOSI+CiAKIDxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KIApkaWZmIC0tZ2l0IGEvamF2YS9kb2Mvb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm0uaHRtbCBiL2phdmEvZG9jL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtLmh0bWwKaW5kZXggZWJiOTY0NC4uM2E2OGM5ZiAxMDA2NDQKLS0tIGEvamF2YS9kb2Mvb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm0uaHRtbAorKysgYi9qYXZhL2RvYy9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5odG1sCkBAIC0yLDEyICsyLDEwIEBACiA8IS0tTmV3UGFnZS0tPgogPEhUTUw+CiA8SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNi4wXzMzKSBvbiBGcmkgSnVuIDI5IDE0OjI5OjEzIENEVCAyMDEyIC0tPgogPFRJVExFPgogVEpUcmFuc2Zvcm0KIDwvVElUTEU+CiAKLTxNRVRBIE5BTUU9ImRhdGUiIENPTlRFTlQ9IjIwMTItMDYtMjkiPgogCiA8TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+CiAKQEAgLTY3Niw4ICs2NzQsMTAgQEAKIDxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+eDwvQ09ERT4gLSB0aGUgbGVmdCBib3VuZGFyeSBvZiB0aGUgY3JvcHBpbmcgcmVnaW9uLiAgVGhpcyBtdXN0IGJlIGV2ZW5seQogIGRpdmlzaWJsZSBieSB0aGUgTUNVIGJsb2NrIHdpZHRoIChzZWUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNnZXRNQ1VXaWR0aChpbnQpIj48Q09ERT5USi5nZXRNQ1VXaWR0aChpbnQpPC9DT0RFPjwvQT4pPEREPjxDT0RFPnk8L0NPREU+IC0gdGhlIHVwcGVyIGJvdW5kYXJ5IG9mIHRoZSBjcm9wcGluZyByZWdpb24uICBUaGlzIG11c3QgYmUgZXZlbmx5CiAgZGl2aXNpYmxlIGJ5IHRoZSBNQ1UgYmxvY2sgaGVpZ2h0IChzZWUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNnZXRNQ1VIZWlnaHQoaW50KSI+PENPREU+VEouZ2V0TUNVSGVpZ2h0KGludCk8L0NPREU+PC9BPik8REQ+PENPREU+dzwvQ09ERT4gLSB0aGUgd2lkdGggb2YgdGhlIGNyb3BwaW5nIHJlZ2lvbi4gIFNldHRpbmcgdGhpcyB0byAwIGlzIHRoZQotIGVxdWl2YWxlbnQgb2Ygc2V0dGluZyBpdCB0byB0aGUgd2lkdGggb2YgdGhlIHNvdXJjZSBKUEVHIGltYWdlIC0geC48REQ+PENPREU+aDwvQ09ERT4gLSB0aGUgaGVpZ2h0IG9mIHRoZSBjcm9wcGluZyByZWdpb24uICBTZXR0aW5nIHRoaXMgdG8gMCBpcyB0aGUKLSBlcXVpdmFsZW50IG9mIHNldHRpbmcgaXQgdG8gdGhlIGhlaWdodCBvZiB0aGUgc291cmNlIEpQRUcgaW1hZ2UgLSB5LjxERD48Q09ERT5vcDwvQ09ERT4gLSBvbmUgb2YgdGhlIHRyYW5zZm9ybSBvcGVyYXRpb25zICg8Y29kZT5PUF8qPC9jb2RlPik8REQ+PENPREU+b3B0aW9uczwvQ09ERT4gLSB0aGUgYml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZiB0aGUgdHJhbnNmb3JtIG9wdGlvbnMKKyBlcXVpdmFsZW50IG9mIHNldHRpbmcgaXQgdG8gKHdpZHRoIG9mIHRoZSBzb3VyY2UgSlBFRyBpbWFnZSAtCisgPGNvZGU+eDwvY29kZT4pLjxERD48Q09ERT5oPC9DT0RFPiAtIHRoZSBoZWlnaHQgb2YgdGhlIGNyb3BwaW5nIHJlZ2lvbi4gIFNldHRpbmcgdGhpcyB0byAwIGlzIHRoZQorIGVxdWl2YWxlbnQgb2Ygc2V0dGluZyBpdCB0byAoaGVpZ2h0IG9mIHRoZSBzb3VyY2UgSlBFRyBpbWFnZSAtCisgPGNvZGU+eTwvY29kZT4pLjxERD48Q09ERT5vcDwvQ09ERT4gLSBvbmUgb2YgdGhlIHRyYW5zZm9ybSBvcGVyYXRpb25zICg8Y29kZT5PUF8qPC9jb2RlPik8REQ+PENPREU+b3B0aW9uczwvQ09ERT4gLSB0aGUgYml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZiB0aGUgdHJhbnNmb3JtIG9wdGlvbnMKICAoPGNvZGU+T1BUXyo8L2NvZGU+KTxERD48Q09ERT5jZjwvQ09ERT4gLSBhbiBpbnN0YW5jZSBvZiBhbiBvYmplY3QgdGhhdCBpbXBsZW1lbnRzIHRoZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkN1c3RvbUZpbHRlci5odG1sIiB0aXRsZT0iaW50ZXJmYWNlIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj48Q09ERT5USkN1c3RvbUZpbHRlcjwvQ09ERT48L0E+IGludGVyZmFjZSwgb3IgbnVsbCBpZiBubyBjdXN0b20gZmlsdGVyIGlzIG5lZWRlZAogPERUPjxCPlRocm93czo8L0I+CiA8REQ+PENPREU+amF2YS5sYW5nLkV4Y2VwdGlvbjwvQ09ERT48L0RMPgpkaWZmIC0tZ2l0IGEvamF2YS9kb2Mvb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm1lci5odG1sIGIvamF2YS9kb2Mvb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm1lci5odG1sCmluZGV4IGRmODFjOWMuLmMwOGYzNTggMTAwNjQ0Ci0tLSBhL2phdmEvZG9jL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtZXIuaHRtbAorKysgYi9qYXZhL2RvYy9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybWVyLmh0bWwKQEAgLTIsMTIgKzIsMTAgQEAKIDwhLS1OZXdQYWdlLS0+CiA8SFRNTD4KIDxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS42LjBfMzMpIG9uIEZyaSBKdW4gMjkgMTQ6Mjk6MTMgQ0RUIDIwMTIgLS0+CiA8VElUTEU+CiBUSlRyYW5zZm9ybWVyCiA8L1RJVExFPgogCi08TUVUQSBOQU1FPSJkYXRlIiBDT05URU5UPSIyMDEyLTA2LTI5Ij4KIAogPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgogCkBAIC0xNDUsNyArMTQzLDcgQEAKIAogPEJSPgogJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlIGEgVHVyYm9KUEVHIGxvc3NsZXNzIHRyYW5zZm9ybWVyIGluc3RhbmNlIGFuZCBhc3NvY2lhdGUgdGhlIEpQRUcKLSBpbWFnZSBzdG9yZWQgaW4gPGNvZGU+anBlZ0ltYWdlPC9jb2RlPiB3aXRoIHRoZSBuZXdseS1jcmVhdGVkIGluc3RhbmNlLjwvVEQ+CisgaW1hZ2Ugc3RvcmVkIGluIDxjb2RlPmpwZWdJbWFnZTwvY29kZT4gd2l0aCB0aGUgbmV3bHkgY3JlYXRlZCBpbnN0YW5jZS48L1REPgogPC9UUj4KIDxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgogPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtZXIuaHRtbCNUSlRyYW5zZm9ybWVyKGJ5dGVbXSwgaW50KSI+VEpUcmFuc2Zvcm1lcjwvQT48L0I+KGJ5dGVbXSZuYnNwO2pwZWdJbWFnZSwKQEAgLTE1NCw3ICsxNTIsNyBAQAogPEJSPgogJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlIGEgVHVyYm9KUEVHIGxvc3NsZXNzIHRyYW5zZm9ybWVyIGluc3RhbmNlIGFuZCBhc3NvY2lhdGUgdGhlIEpQRUcKICBpbWFnZSBvZiBsZW5ndGggPGNvZGU+aW1hZ2VTaXplPC9jb2RlPiBieXRlcyBzdG9yZWQgaW4KLSA8Y29kZT5qcGVnSW1hZ2U8L2NvZGU+IHdpdGggdGhlIG5ld2x5LWNyZWF0ZWQgaW5zdGFuY2UuPC9URD4KKyA8Y29kZT5qcGVnSW1hZ2U8L2NvZGU+IHdpdGggdGhlIG5ld2x5IGNyZWF0ZWQgaW5zdGFuY2UuPC9URD4KIDwvVFI+CiA8L1RBQkxFPgogJm5ic3A7CkBAIC0xNzIsOCArMTcwLDggQEAKIDxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybWVyLmh0bWwjZ2V0VHJhbnNmb3JtZWRTaXplcygpIj5nZXRUcmFuc2Zvcm1lZFNpemVzPC9BPjwvQj4oKTwvQ09ERT4KIAogPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBzaXplcyBvZiB0aGUgdHJhbnNmb3JtZWQgSlBFRyBpbWFnZXMgZnJvbQotIHRoZSBtb3N0IHJlY2VudCBjYWxsIHRvIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtZXIuaHRtbCN0cmFuc2Zvcm0oYnl0ZVtdW10sIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKVHJhbnNmb3JtW10sIGludCkiPjxDT0RFPnRyYW5zZm9ybSgpPC9DT0RFPjwvQT4uPC9URD4KKyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYW4gYXJyYXkgY29udGFpbmluZyB0aGUgc2l6ZXMgb2YgdGhlIHRyYW5zZm9ybWVkIEpQRUcgaW1hZ2VzCisgZ2VuZXJhdGVkIGJ5IHRoZSBtb3N0IHJlY2VudCB0cmFuc2Zvcm0gb3BlcmF0aW9uLjwvVEQ+CiA8L1RSPgogPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CiA8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CkBAIC0yMDUsNyArMjAzLDcgQEAKIDxUSCBBTElHTj0ibGVmdCI+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPlRKRGVjb21wcmVzc29yPC9BPjwvQj48L1RIPgogPC9UUj4KIDxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjY2xvc2UoKSI+Y2xvc2U8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI2RlY29tcHJlc3MoamF2YS5hd3QuaW1hZ2UuQnVmZmVyZWRJbWFnZSwgaW50KSI+ZGVjb21wcmVzczwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjZGVjb21wcmVzcyhieXRlW10sIGludCwgaW50LCBpbnQsIGludCwgaW50KSI+ZGVjb21wcmVzczwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjZGVjb21wcmVzcyhpbnQsIGludCwgaW50LCBpbnQpIj5kZWNvbXByZXNzPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNkZWNvbXByZXNzKGludCwgaW50LCBpbnQsIGludCwgaW50KSI+ZGVjb21wcmVzczwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjZGVjb21wcmVzc1RvWVVWKGJ5dGVbXSwgaW50KSI+ZGVjb21wcmVzc1RvWVVWPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNkZWNvbXByZXNzVG9ZVVYoaW50KSI+ZGVjb21wcmVzc1RvWVVWPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNmaW5hbGl6ZSgpIj5maW5hbGl6ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjZ2V0SGVpZ2h0KCkiPmdldEhlaWdodDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjZ2V0SlBFR0J1ZigpIj5nZXRKUEVHQnVmPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNnZXRKUEVHU2l6ZSgpIj5nZXRKUEVHU2l6ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjZ2V0U2NhbGVkSGVpZ2h0KGludCwgaW50KSI+Z2V0U2NhbGVkSGVpZ2h0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNnZXRTY2FsZWRXaWR0aChpbnQsIGludCkiPmdldFNjYWxlZFdpZHRoPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNnZXRTdWJzYW1wKCkiPmdldFN1YnNhbXA8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI2dldFdpZHRoKCkiPmdldFdpZHRoPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNzZXRKUEVHSW1hZ2UoYnl0ZVtdLCBpbnQpIj5zZXRKUEVHSW1hZ2U8L0E+PC9DT0RFPjwvVEQ+Cis8VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNjbG9zZSgpIj5jbG9zZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjZGVjb21wcmVzcyhqYXZhLmF3dC5pbWFnZS5CdWZmZXJlZEltYWdlLCBpbnQpIj5kZWNvbXByZXNzPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNkZWNvbXByZXNzKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIj5kZWNvbXByZXNzPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNkZWNvbXByZXNzKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KSI+ZGVjb21wcmVzczwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjZGVjb21wcmVzcyhpbnRbXSwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KSI+ZGVjb21wcmVzczwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjZGVjb21wcmVzcyhpbnQsIGludCwgaW50LCBpbnQpIj5kZWNvbXByZXNzPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNkZWNvbXByZXNzKGludCwgaW50LCBpbnQsIGludCwgaW50KSI+ZGVjb21wcmVzczwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjZGVjb21wcmVzc1RvWVVWKGJ5dGVbXSwgaW50KSI+ZGVjb21wcmVzc1RvWVVWPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNkZWNvbXByZXNzVG9ZVVYoaW50KSI+ZGVjb21wcmVzc1RvWVVWPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNmaW5hbGl6ZSgpIj5maW5hbGl6ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjZ2V0SGVpZ2h0KCkiPmdldEhlaWdodDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjZ2V0SlBFR0J1ZigpIj5nZXRKUEVHQnVmPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNnZXRKUEVHU2l6ZSgpIj5nZXRKUEVHU2l6ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwjZ2V0U2NhbGVkSGVpZ2h0KGludCwgaW50KSI+Z2V0U2NhbGVkSGVpZ2h0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNnZXRTY2FsZWRXaWR0aChpbnQsIGludCkiPmdldFNjYWxlZFdpZHRoPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNnZXRTdWJzYW1wKCkiPmdldFN1YnNhbXA8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5odG1sI2dldFdpZHRoKCkiPmdldFdpZHRoPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuaHRtbCNzZXRKUEVHSW1hZ2UoYnl0ZVtdLCBpbnQpIj5zZXRKUEVHSW1hZ2U8L0E+PC9DT0RFPjwvVEQ+CiA8L1RSPgogPC9UQUJMRT4KICZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS5sYW5nLk9iamVjdCI+PCEtLSAtLT48L0E+CkBAIC0yNTIsNyArMjUwLDcgQEAKICAgICAgICAgICAgICAgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb248L1BSRT4KIDxETD4KIDxERD5DcmVhdGUgYSBUdXJib0pQRUcgbG9zc2xlc3MgdHJhbnNmb3JtZXIgaW5zdGFuY2UgYW5kIGFzc29jaWF0ZSB0aGUgSlBFRwotIGltYWdlIHN0b3JlZCBpbiA8Y29kZT5qcGVnSW1hZ2U8L2NvZGU+IHdpdGggdGhlIG5ld2x5LWNyZWF0ZWQgaW5zdGFuY2UuCisgaW1hZ2Ugc3RvcmVkIGluIDxjb2RlPmpwZWdJbWFnZTwvY29kZT4gd2l0aCB0aGUgbmV3bHkgY3JlYXRlZCBpbnN0YW5jZS4KIDxQPgogPERMPgogPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5qcGVnSW1hZ2U8L0NPREU+IC0gSlBFRyBpbWFnZSBidWZmZXIgKHNpemUgb2YgdGhlIEpQRUcgaW1hZ2UgaXMgYXNzdW1lZCB0bwpAQCAtMjcxLDcgKzI2OSw3IEBACiA8REw+CiA8REQ+Q3JlYXRlIGEgVHVyYm9KUEVHIGxvc3NsZXNzIHRyYW5zZm9ybWVyIGluc3RhbmNlIGFuZCBhc3NvY2lhdGUgdGhlIEpQRUcKICBpbWFnZSBvZiBsZW5ndGggPGNvZGU+aW1hZ2VTaXplPC9jb2RlPiBieXRlcyBzdG9yZWQgaW4KLSA8Y29kZT5qcGVnSW1hZ2U8L2NvZGU+IHdpdGggdGhlIG5ld2x5LWNyZWF0ZWQgaW5zdGFuY2UuCisgPGNvZGU+anBlZ0ltYWdlPC9jb2RlPiB3aXRoIHRoZSBuZXdseSBjcmVhdGVkIGluc3RhbmNlLgogPFA+CiA8REw+CiA8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmpwZWdJbWFnZTwvQ09ERT4gLSBKUEVHIGltYWdlIGJ1ZmZlcjxERD48Q09ERT5pbWFnZVNpemU8L0NPREU+IC0gc2l6ZSBvZiB0aGUgSlBFRyBpbWFnZSAoaW4gYnl0ZXMpCkBAIC0zMDMsMjAgKzMwMSwyMiBAQAogIEpQRUcgaW1hZ2Ugc3RydWN0dXJlIHRvIGFub3RoZXIgd2l0aG91dCBhbHRlcmluZyB0aGUgdmFsdWVzIG9mIHRoZQogIGNvZWZmaWNpZW50cy4gIFdoaWxlIHRoaXMgaXMgdHlwaWNhbGx5IGZhc3RlciB0aGFuIGRlY29tcHJlc3NpbmcgdGhlCiAgaW1hZ2UsIHRyYW5zZm9ybWluZyBpdCwgYW5kIHJlLWNvbXByZXNzaW5nIGl0LCBsb3NzbGVzcyB0cmFuc2Zvcm1zIGFyZSBub3QKLSBmcmVlLiAgRWFjaCBsb3NzbGVzcyB0cmFuc2Zvcm0gcmVxdWlyZXMgcmVhZGluZyBhbmQgSHVmZm1hbiBkZWNvZGluZyBhbGwKLSBvZiB0aGUgY29lZmZpY2llbnRzIGluIHRoZSBzb3VyY2UgaW1hZ2UsIHJlZ2FyZGxlc3Mgb2YgdGhlIHNpemUgb2YgdGhlCi0gZGVzdGluYXRpb24gaW1hZ2UuICBUaHVzLCB0aGlzIG1ldGhvZCBwcm92aWRlcyBhIG1lYW5zIG9mIGdlbmVyYXRpbmcKLSBtdWx0aXBsZSB0cmFuc2Zvcm1lZCBpbWFnZXMgZnJvbSB0aGUgc2FtZSBzb3VyY2Ugb3Igb2YgYXBwbHlpbmcgbXVsdGlwbGUKLSB0cmFuc2Zvcm1hdGlvbnMgc2ltdWx0YW5lb3VzbHksIGluIG9yZGVyIHRvIGVsaW1pbmF0ZSB0aGUgbmVlZCB0byByZWFkIHRoZQotIHNvdXJjZSBjb2VmZmljaWVudHMgbXVsdGlwbGUgdGltZXMuCisgZnJlZS4gIEVhY2ggbG9zc2xlc3MgdHJhbnNmb3JtIHJlcXVpcmVzIHJlYWRpbmcgYW5kIHBlcmZvcm1pbmcgSHVmZm1hbgorIGRlY29kaW5nIG9uIGFsbCBvZiB0aGUgY29lZmZpY2llbnRzIGluIHRoZSBzb3VyY2UgaW1hZ2UsIHJlZ2FyZGxlc3Mgb2YgdGhlCisgc2l6ZSBvZiB0aGUgZGVzdGluYXRpb24gaW1hZ2UuICBUaHVzLCB0aGlzIG1ldGhvZCBwcm92aWRlcyBhIG1lYW5zIG9mCisgZ2VuZXJhdGluZyBtdWx0aXBsZSB0cmFuc2Zvcm1lZCBpbWFnZXMgZnJvbSB0aGUgc2FtZSBzb3VyY2Ugb3Igb2YgYXBwbHlpbmcKKyBtdWx0aXBsZSB0cmFuc2Zvcm1hdGlvbnMgc2ltdWx0YW5lb3VzbHksIGluIG9yZGVyIHRvIGVsaW1pbmF0ZSB0aGUgbmVlZCB0bworIHJlYWQgdGhlIHNvdXJjZSBjb2VmZmljaWVudHMgbXVsdGlwbGUgdGltZXMuCiA8UD4KIDxERD48REw+CiA8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmRzdEJ1ZnM8L0NPREU+IC0gYW4gYXJyYXkgb2YgaW1hZ2UgYnVmZmVycy4gIDxjb2RlPmRzdGJ1ZnNbaV08L2NvZGU+IHdpbGwKICByZWNlaXZlIGEgSlBFRyBpbWFnZSB0aGF0IGhhcyBiZWVuIHRyYW5zZm9ybWVkIHVzaW5nIHRoZSBwYXJhbWV0ZXJzIGluCiAgPGNvZGU+dHJhbnNmb3Jtc1tpXTwvY29kZT4uICBVc2UgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNidWZTaXplKGludCwgaW50LCBpbnQpIj48Q09ERT5USi5idWZTaXplKGludCwgaW50LCBpbnQpPC9DT0RFPjwvQT4gdG8gZGV0ZXJtaW5lIHRoZQotIG1heGltdW0gc2l6ZSBmb3IgZWFjaCBidWZmZXIgYmFzZWQgb24gdGhlIGNyb3BwZWQgd2lkdGggYW5kIGhlaWdodC48REQ+PENPREU+dHJhbnNmb3JtczwvQ09ERT4gLSBhbiBhcnJheSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPjxDT0RFPlRKVHJhbnNmb3JtPC9DT0RFPjwvQT4gaW5zdGFuY2VzLCBlYWNoIG9mCisgbWF4aW11bSBzaXplIGZvciBlYWNoIGJ1ZmZlciBiYXNlZCBvbiB0aGUgdHJhbnNmb3JtZWQgb3IgY3JvcHBlZCB3aWR0aCBhbmQKKyBoZWlnaHQgYW5kIHRoZSBsZXZlbCBvZiBzdWJzYW1wbGluZyB1c2VkIGluIHRoZSBzb3VyY2UgaW1hZ2UuPEREPjxDT0RFPnRyYW5zZm9ybXM8L0NPREU+IC0gYW4gYXJyYXkgb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj48Q09ERT5USlRyYW5zZm9ybTwvQ09ERT48L0E+IGluc3RhbmNlcywgZWFjaCBvZgogIHdoaWNoIHNwZWNpZmllcyB0aGUgdHJhbnNmb3JtIHBhcmFtZXRlcnMgYW5kL29yIGNyb3BwaW5nIHJlZ2lvbiBmb3IgdGhlCi0gY29ycmVzcG9uZGluZyB0cmFuc2Zvcm1lZCBvdXRwdXQgaW1hZ2U8REQ+PENPREU+ZmxhZ3M8L0NPREU+IC0gdGhlIGJpdHdpc2UgT1Igb2Ygb25lIG9yIG1vcmUgb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnIj48Q09ERT5USi5GTEFHXyo8L0NPREU+PC9BPgorIGNvcnJlc3BvbmRpbmcgdHJhbnNmb3JtZWQgb3V0cHV0IGltYWdlPEREPjxDT0RFPmZsYWdzPC9DT0RFPiAtIHRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mCisgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouaHRtbCNGTEFHX0JPVFRPTVVQIj48Q09ERT5USi5GTEFHXyo8L0NPREU+PC9BPgogPERUPjxCPlRocm93czo8L0I+CiA8REQ+PENPREU+amF2YS5sYW5nLkV4Y2VwdGlvbjwvQ09ERT48L0RMPgogPC9ERD4KQEAgLTMzNyw3ICszMzcsOCBAQAogPEREPjxETD4KIDxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+dHJhbnNmb3JtczwvQ09ERT4gLSBhbiBhcnJheSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPjxDT0RFPlRKVHJhbnNmb3JtPC9DT0RFPjwvQT4gaW5zdGFuY2VzLCBlYWNoIG9mCiAgd2hpY2ggc3BlY2lmaWVzIHRoZSB0cmFuc2Zvcm0gcGFyYW1ldGVycyBhbmQvb3IgY3JvcHBpbmcgcmVnaW9uIGZvciB0aGUKLSBjb3JyZXNwb25kaW5nIHRyYW5zZm9ybWVkIG91dHB1dCBpbWFnZTxERD48Q09ERT5mbGFnczwvQ09ERT4gLSB0aGUgYml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sIiB0aXRsZT0iY2xhc3MgaW4gb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWciPjxDT0RFPlRKLkZMQUdfKjwvQ09ERT48L0E+CisgY29ycmVzcG9uZGluZyB0cmFuc2Zvcm1lZCBvdXRwdXQgaW1hZ2U8REQ+PENPREU+ZmxhZ3M8L0NPREU+IC0gdGhlIGJpdHdpc2UgT1Igb2Ygb25lIG9yIG1vcmUgb2YKKyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5odG1sI0ZMQUdfQk9UVE9NVVAiPjxDT0RFPlRKLkZMQUdfKjwvQ09ERT48L0E+CiA8RFQ+PEI+UmV0dXJuczo8L0I+PEREPmFuIGFycmF5IG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZyI+PENPREU+VEpEZWNvbXByZXNzb3I8L0NPREU+PC9BPiBpbnN0YW5jZXMsIGVhY2ggb2YKICB3aGljaCBoYXMgYSB0cmFuc2Zvcm1lZCBKUEVHIGltYWdlIGFzc29jaWF0ZWQgd2l0aCBpdAogPERUPjxCPlRocm93czo8L0I+CkBAIC0zNTIsMTMgKzM1MywxMyBAQAogcHVibGljIGludFtdIDxCPmdldFRyYW5zZm9ybWVkU2l6ZXM8L0I+KCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb248L1BSRT4KIDxETD4KLTxERD5SZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIHNpemVzIG9mIHRoZSB0cmFuc2Zvcm1lZCBKUEVHIGltYWdlcyBmcm9tCi0gdGhlIG1vc3QgcmVjZW50IGNhbGwgdG8gPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm1lci5odG1sI3RyYW5zZm9ybShieXRlW11bXSwgb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcuVEpUcmFuc2Zvcm1bXSwgaW50KSI+PENPREU+dHJhbnNmb3JtKCk8L0NPREU+PC9BPi4KKzxERD5SZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIHNpemVzIG9mIHRoZSB0cmFuc2Zvcm1lZCBKUEVHIGltYWdlcworIGdlbmVyYXRlZCBieSB0aGUgbW9zdCByZWNlbnQgdHJhbnNmb3JtIG9wZXJhdGlvbi4KIDxQPgogPEREPjxETD4KIAotPERUPjxCPlJldHVybnM6PC9CPjxERD5hbiBhcnJheSBjb250YWluaW5nIHRoZSBzaXplcyBvZiB0aGUgdHJhbnNmb3JtZWQgSlBFRyBpbWFnZXMgZnJvbQotIHRoZSBtb3N0IHJlY2VudCBjYWxsIHRvIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtZXIuaHRtbCN0cmFuc2Zvcm0oYnl0ZVtdW10sIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnLlRKVHJhbnNmb3JtW10sIGludCkiPjxDT0RFPnRyYW5zZm9ybSgpPC9DT0RFPjwvQT4KKzxEVD48Qj5SZXR1cm5zOjwvQj48REQ+YW4gYXJyYXkgY29udGFpbmluZyB0aGUgc2l6ZXMgb2YgdGhlIHRyYW5zZm9ybWVkIEpQRUcgaW1hZ2VzCisgZ2VuZXJhdGVkIGJ5IHRoZSBtb3N0IHJlY2VudCB0cmFuc2Zvcm0gb3BlcmF0aW9uCiA8RFQ+PEI+VGhyb3dzOjwvQj4KIDxERD48Q09ERT5qYXZhLmxhbmcuRXhjZXB0aW9uPC9DT0RFPjwvREw+CiA8L0REPgpkaWZmIC0tZ2l0IGEvamF2YS9kb2Mvb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvcGFja2FnZS1mcmFtZS5odG1sIGIvamF2YS9kb2Mvb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvcGFja2FnZS1mcmFtZS5odG1sCmluZGV4IDU2MmU1NzAuLmYxNjA0MTggMTAwNjQ0Ci0tLSBhL2phdmEvZG9jL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL3BhY2thZ2UtZnJhbWUuaHRtbAorKysgYi9qYXZhL2RvYy9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9wYWNrYWdlLWZyYW1lLmh0bWwKQEAgLTIsMTIgKzIsMTAgQEAKIDwhLS1OZXdQYWdlLS0+CiA8SFRNTD4KIDxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS42LjBfMzMpIG9uIEZyaSBKdW4gMjkgMTQ6Mjk6MTMgQ0RUIDIwMTIgLS0+CiA8VElUTEU+CiBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZwogPC9USVRMRT4KIAotPE1FVEEgTkFNRT0iZGF0ZSIgQ09OVEVOVD0iMjAxMi0wNi0yOSI+CiAKIDxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KIApkaWZmIC0tZ2l0IGEvamF2YS9kb2Mvb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvcGFja2FnZS1zdW1tYXJ5Lmh0bWwgYi9qYXZhL2RvYy9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9wYWNrYWdlLXN1bW1hcnkuaHRtbAppbmRleCA2MDA1NDZjLi41MDU1MTJjIDEwMDY0NAotLS0gYS9qYXZhL2RvYy9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9wYWNrYWdlLXN1bW1hcnkuaHRtbAorKysgYi9qYXZhL2RvYy9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9wYWNrYWdlLXN1bW1hcnkuaHRtbApAQCAtMiwxMiArMiwxMCBAQAogPCEtLU5ld1BhZ2UtLT4KIDxIVE1MPgogPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjYuMF8zMykgb24gRnJpIEp1biAyOSAxNDoyOToxMyBDRFQgMjAxMiAtLT4KIDxUSVRMRT4KIG9yZy5saWJqcGVndHVyYm8udHVyYm9qcGVnCiA8L1RJVExFPgogCi08TUVUQSBOQU1FPSJkYXRlIiBDT05URU5UPSIyMDEyLTA2LTI5Ij4KIAogPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgogCmRpZmYgLS1naXQgYS9qYXZhL2RvYy9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9wYWNrYWdlLXRyZWUuaHRtbCBiL2phdmEvZG9jL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL3BhY2thZ2UtdHJlZS5odG1sCmluZGV4IGUzMzM1NWIuLmUxMzE0M2QgMTAwNjQ0Ci0tLSBhL2phdmEvZG9jL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL3BhY2thZ2UtdHJlZS5odG1sCisrKyBiL2phdmEvZG9jL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL3BhY2thZ2UtdHJlZS5odG1sCkBAIC0yLDEyICsyLDEwIEBACiA8IS0tTmV3UGFnZS0tPgogPEhUTUw+CiA8SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKGJ1aWxkIDEuNi4wXzMzKSBvbiBGcmkgSnVuIDI5IDE0OjI5OjEzIENEVCAyMDEyIC0tPgogPFRJVExFPgogb3JnLmxpYmpwZWd0dXJiby50dXJib2pwZWcgQ2xhc3MgSGllcmFyY2h5CiA8L1RJVExFPgogCi08TUVUQSBOQU1FPSJkYXRlIiBDT05URU5UPSIyMDEyLTA2LTI5Ij4KIAogPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgogCmRpZmYgLS1naXQgYS9qYXZhL2RvYy9vdmVydmlldy10cmVlLmh0bWwgYi9qYXZhL2RvYy9vdmVydmlldy10cmVlLmh0bWwKaW5kZXggZmM1NDY3YS4uMWMxMmIxMCAxMDA2NDQKLS0tIGEvamF2YS9kb2Mvb3ZlcnZpZXctdHJlZS5odG1sCisrKyBiL2phdmEvZG9jL292ZXJ2aWV3LXRyZWUuaHRtbApAQCAtMiwxMiArMiwxMCBAQAogPCEtLU5ld1BhZ2UtLT4KIDxIVE1MPgogPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjYuMF8zMykgb24gRnJpIEp1biAyOSAxNDoyOToxNCBDRFQgMjAxMiAtLT4KIDxUSVRMRT4KIENsYXNzIEhpZXJhcmNoeQogPC9USVRMRT4KIAotPE1FVEEgTkFNRT0iZGF0ZSIgQ09OVEVOVD0iMjAxMi0wNi0yOSI+CiAKIDxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSJzdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KIApkaWZmIC0tZ2l0IGEvamF2YS9kb2Mvc2VyaWFsaXplZC1mb3JtLmh0bWwgYi9qYXZhL2RvYy9zZXJpYWxpemVkLWZvcm0uaHRtbAppbmRleCA4YzdlMDg5Li44YmEwNjYxIDEwMDY0NAotLS0gYS9qYXZhL2RvYy9zZXJpYWxpemVkLWZvcm0uaHRtbAorKysgYi9qYXZhL2RvYy9zZXJpYWxpemVkLWZvcm0uaHRtbApAQCAtMiwxMiArMiwxMCBAQAogPCEtLU5ld1BhZ2UtLT4KIDxIVE1MPgogPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIChidWlsZCAxLjYuMF8zMykgb24gRnJpIEp1biAyOSAxNDoyOToxNCBDRFQgMjAxMiAtLT4KIDxUSVRMRT4KIFNlcmlhbGl6ZWQgRm9ybQogPC9USVRMRT4KIAotPE1FVEEgTkFNRT0iZGF0ZSIgQ09OVEVOVD0iMjAxMi0wNi0yOSI+CiAKIDxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSJzdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KIApkaWZmIC0tZ2l0IGEvamF2YS9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5qYXZhIGIvamF2YS9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USi5qYXZhCmluZGV4IDc4YTcyZjYuLjZjNmE5NWQgMTAwNjQ0Ci0tLSBhL2phdmEvb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEouamF2YQorKysgYi9qYXZhL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKLmphdmEKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKTIwMTEtMjAxMiBELiBSLiBDb21tYW5kZXIuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKTIwMTEtMjAxMyBELiBSLiBDb21tYW5kZXIuICBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CkBAIC0zMSwzOCArMzEsMzkgQEAKIC8qKgogICogVHVyYm9KUEVHIHV0aWxpdHkgY2xhc3MgKGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQpCiAgKi8KLWZpbmFsIHB1YmxpYyBjbGFzcyBUSiB7CitwdWJsaWMgZmluYWwgY2xhc3MgVEogewogCiAKICAgLyoqCiAgICAqIFRoZSBudW1iZXIgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcgb3B0aW9ucwogICAgKi8KLSAgZmluYWwgcHVibGljIHN0YXRpYyBpbnQgTlVNU0FNUCAgID0gNTsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTlVNU0FNUCAgID0gNTsKICAgLyoqCiAgICAqIDQ6NDo0IGNocm9taW5hbmNlIHN1YnNhbXBsaW5nIChubyBjaHJvbWluYW5jZSBzdWJzYW1wbGluZykuICBUaGUgSlBFRwogICAgKiBvciBZVVYgaW1hZ2Ugd2lsbCBjb250YWluIG9uZSBjaHJvbWluYW5jZSBjb21wb25lbnQgZm9yIGV2ZXJ5IHBpeGVsIGluIHRoZQogICAgKiBzb3VyY2UgaW1hZ2UuCiAgICAqLwotICBmaW5hbCBwdWJsaWMgc3RhdGljIGludCBTQU1QXzQ0NCAgPSAwOworICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTQU1QXzQ0NCAgPSAwOwogICAvKioKICAgICogNDoyOjIgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcuICBUaGUgSlBFRyBvciBZVVYgaW1hZ2Ugd2lsbCBjb250YWluIG9uZQogICAgKiBjaHJvbWluYW5jZSBjb21wb25lbnQgZm9yIGV2ZXJ5IDJ4MSBibG9jayBvZiBwaXhlbHMgaW4gdGhlIHNvdXJjZSBpbWFnZS4KICAgICovCi0gIGZpbmFsIHB1YmxpYyBzdGF0aWMgaW50IFNBTVBfNDIyICA9IDE7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNBTVBfNDIyICA9IDE7CiAgIC8qKgogICAgKiA0OjI6MCBjaHJvbWluYW5jZSBzdWJzYW1wbGluZy4gIFRoZSBKUEVHIG9yIFlVViBpbWFnZSB3aWxsIGNvbnRhaW4gb25lCiAgICAqIGNocm9taW5hbmNlIGNvbXBvbmVudCBmb3IgZXZlcnkgMngyIGJsb2NrIG9mIHBpeGVscyBpbiB0aGUgc291cmNlIGltYWdlLgogICAgKi8KLSAgZmluYWwgcHVibGljIHN0YXRpYyBpbnQgU0FNUF80MjAgID0gMjsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0FNUF80MjAgID0gMjsKICAgLyoqCiAgICAqIEdyYXlzY2FsZS4gIFRoZSBKUEVHIG9yIFlVViBpbWFnZSB3aWxsIGNvbnRhaW4gbm8gY2hyb21pbmFuY2UgY29tcG9uZW50cy4KICAgICovCi0gIGZpbmFsIHB1YmxpYyBzdGF0aWMgaW50IFNBTVBfR1JBWSA9IDM7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNBTVBfR1JBWSA9IDM7CiAgIC8qKgogICAgKiA0OjQ6MCBjaHJvbWluYW5jZSBzdWJzYW1wbGluZy4gIFRoZSBKUEVHIG9yIFlVViBpbWFnZSB3aWxsIGNvbnRhaW4gb25lCiAgICAqIGNocm9taW5hbmNlIGNvbXBvbmVudCBmb3IgZXZlcnkgMXgyIGJsb2NrIG9mIHBpeGVscyBpbiB0aGUgc291cmNlIGltYWdlLgorICAgKiBOb3RlIHRoYXQgNDo0OjAgc3Vic2FtcGxpbmcgaXMgbm90IGZ1bGx5IGFjY2VsZXJhdGVkIGluIGxpYmpwZWctdHVyYm8uCiAgICAqLwotICBmaW5hbCBwdWJsaWMgc3RhdGljIGludCBTQU1QXzQ0MCAgPSA0OworICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTQU1QXzQ0MCAgPSA0OwogCiAKICAgLyoqCkBAIC03NSwxMiArNzYsMTIgQEAKICAgICogQHJldHVybiB0aGUgTUNVIGJsb2NrIHdpZHRoIGZvciB0aGUgZ2l2ZW4gbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcKICAgICovCiAgIHB1YmxpYyBzdGF0aWMgaW50IGdldE1DVVdpZHRoKGludCBzdWJzYW1wKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBpZihzdWJzYW1wIDwgMCB8fCBzdWJzYW1wID49IE5VTVNBTVApCisgICAgaWYgKHN1YnNhbXAgPCAwIHx8IHN1YnNhbXAgPj0gTlVNU0FNUCkKICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkludmFsaWQgc3Vic2FtcGxpbmcgdHlwZSIpOwogICAgIHJldHVybiBtY3VXaWR0aFtzdWJzYW1wXTsKICAgfQogCi0gIGZpbmFsIHByaXZhdGUgc3RhdGljIGludCBtY3VXaWR0aFtdID0geworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnRbXSBtY3VXaWR0aCA9IHsKICAgICA4LCAxNiwgMTYsIDgsIDgKICAgfTsKIApAQCAtOTYsMTIgKzk3LDEyIEBACiAgICAqIHN1YnNhbXBsaW5nCiAgICAqLwogICBwdWJsaWMgc3RhdGljIGludCBnZXRNQ1VIZWlnaHQoaW50IHN1YnNhbXApIHRocm93cyBFeGNlcHRpb24gewotICAgIGlmKHN1YnNhbXAgPCAwIHx8IHN1YnNhbXAgPj0gTlVNU0FNUCkKKyAgICBpZiAoc3Vic2FtcCA8IDAgfHwgc3Vic2FtcCA+PSBOVU1TQU1QKQogICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiSW52YWxpZCBzdWJzYW1wbGluZyB0eXBlIik7CiAgICAgcmV0dXJuIG1jdUhlaWdodFtzdWJzYW1wXTsKICAgfQogCi0gIGZpbmFsIHByaXZhdGUgc3RhdGljIGludCBtY3VIZWlnaHRbXSA9IHsKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50W10gbWN1SGVpZ2h0ID0gewogICAgIDgsIDgsIDE2LCA4LCAxNgogICB9OwogCkBAIC0xMDksOTIgKzExMCw5MiBAQAogICAvKioKICAgICogVGhlIG51bWJlciBvZiBwaXhlbCBmb3JtYXRzCiAgICAqLwotICBmaW5hbCBwdWJsaWMgc3RhdGljIGludCBOVU1QRiAgID0gMTE7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5VTVBGICAgPSAxMTsKICAgLyoqCiAgICAqIFJHQiBwaXhlbCBmb3JtYXQuICBUaGUgcmVkLCBncmVlbiwgYW5kIGJsdWUgY29tcG9uZW50cyBpbiB0aGUgaW1hZ2UgYXJlCiAgICAqIHN0b3JlZCBpbiAzLWJ5dGUgcGl4ZWxzIGluIHRoZSBvcmRlciBSLCBHLCBCIGZyb20gbG93ZXN0IHRvIGhpZ2hlc3QgYnl0ZQogICAgKiBhZGRyZXNzIHdpdGhpbiBlYWNoIHBpeGVsLgogICAgKi8KLSAgZmluYWwgcHVibGljIHN0YXRpYyBpbnQgUEZfUkdCICA9IDA7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBGX1JHQiAgPSAwOwogICAvKioKICAgICogQkdSIHBpeGVsIGZvcm1hdC4gIFRoZSByZWQsIGdyZWVuLCBhbmQgYmx1ZSBjb21wb25lbnRzIGluIHRoZSBpbWFnZSBhcmUKICAgICogc3RvcmVkIGluIDMtYnl0ZSBwaXhlbHMgaW4gdGhlIG9yZGVyIEIsIEcsIFIgZnJvbSBsb3dlc3QgdG8gaGlnaGVzdCBieXRlCiAgICAqIGFkZHJlc3Mgd2l0aGluIGVhY2ggcGl4ZWwuCiAgICAqLwotICBmaW5hbCBwdWJsaWMgc3RhdGljIGludCBQRl9CR1IgID0gMTsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUEZfQkdSICA9IDE7CiAgIC8qKgogICAgKiBSR0JYIHBpeGVsIGZvcm1hdC4gIFRoZSByZWQsIGdyZWVuLCBhbmQgYmx1ZSBjb21wb25lbnRzIGluIHRoZSBpbWFnZSBhcmUKICAgICogc3RvcmVkIGluIDQtYnl0ZSBwaXhlbHMgaW4gdGhlIG9yZGVyIFIsIEcsIEIgZnJvbSBsb3dlc3QgdG8gaGlnaGVzdCBieXRlCiAgICAqIGFkZHJlc3Mgd2l0aGluIGVhY2ggcGl4ZWwuICBUaGUgWCBjb21wb25lbnQgaXMgaWdub3JlZCB3aGVuIGNvbXByZXNzaW5nCiAgICAqIGFuZCB1bmRlZmluZWQgd2hlbiBkZWNvbXByZXNzaW5nLgogICAgKi8KLSAgZmluYWwgcHVibGljIHN0YXRpYyBpbnQgUEZfUkdCWCA9IDI7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBGX1JHQlggPSAyOwogICAvKioKICAgICogQkdSWCBwaXhlbCBmb3JtYXQuICBUaGUgcmVkLCBncmVlbiwgYW5kIGJsdWUgY29tcG9uZW50cyBpbiB0aGUgaW1hZ2UgYXJlCiAgICAqIHN0b3JlZCBpbiA0LWJ5dGUgcGl4ZWxzIGluIHRoZSBvcmRlciBCLCBHLCBSIGZyb20gbG93ZXN0IHRvIGhpZ2hlc3QgYnl0ZQogICAgKiBhZGRyZXNzIHdpdGhpbiBlYWNoIHBpeGVsLiAgVGhlIFggY29tcG9uZW50IGlzIGlnbm9yZWQgd2hlbiBjb21wcmVzc2luZwogICAgKiBhbmQgdW5kZWZpbmVkIHdoZW4gZGVjb21wcmVzc2luZy4KICAgICovCi0gIGZpbmFsIHB1YmxpYyBzdGF0aWMgaW50IFBGX0JHUlggPSAzOworICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQRl9CR1JYID0gMzsKICAgLyoqCiAgICAqIFhCR1IgcGl4ZWwgZm9ybWF0LiAgVGhlIHJlZCwgZ3JlZW4sIGFuZCBibHVlIGNvbXBvbmVudHMgaW4gdGhlIGltYWdlIGFyZQogICAgKiBzdG9yZWQgaW4gNC1ieXRlIHBpeGVscyBpbiB0aGUgb3JkZXIgUiwgRywgQiBmcm9tIGhpZ2hlc3QgdG8gbG93ZXN0IGJ5dGUKICAgICogYWRkcmVzcyB3aXRoaW4gZWFjaCBwaXhlbC4gIFRoZSBYIGNvbXBvbmVudCBpcyBpZ25vcmVkIHdoZW4gY29tcHJlc3NpbmcKICAgICogYW5kIHVuZGVmaW5lZCB3aGVuIGRlY29tcHJlc3NpbmcuCiAgICAqLwotICBmaW5hbCBwdWJsaWMgc3RhdGljIGludCBQRl9YQkdSID0gNDsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUEZfWEJHUiA9IDQ7CiAgIC8qKgogICAgKiBYUkdCIHBpeGVsIGZvcm1hdC4gIFRoZSByZWQsIGdyZWVuLCBhbmQgYmx1ZSBjb21wb25lbnRzIGluIHRoZSBpbWFnZSBhcmUKICAgICogc3RvcmVkIGluIDQtYnl0ZSBwaXhlbHMgaW4gdGhlIG9yZGVyIEIsIEcsIFIgZnJvbSBoaWdoZXN0IHRvIGxvd2VzdCBieXRlCiAgICAqIGFkZHJlc3Mgd2l0aGluIGVhY2ggcGl4ZWwuICBUaGUgWCBjb21wb25lbnQgaXMgaWdub3JlZCB3aGVuIGNvbXByZXNzaW5nCiAgICAqIGFuZCB1bmRlZmluZWQgd2hlbiBkZWNvbXByZXNzaW5nLgogICAgKi8KLSAgZmluYWwgcHVibGljIHN0YXRpYyBpbnQgUEZfWFJHQiA9IDU7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBGX1hSR0IgPSA1OwogICAvKioKICAgICogR3JheXNjYWxlIHBpeGVsIGZvcm1hdC4gIEVhY2ggMS1ieXRlIHBpeGVsIHJlcHJlc2VudHMgYSBsdW1pbmFuY2UKICAgICogKGJyaWdodG5lc3MpIGxldmVsIGZyb20gMCB0byAyNTUuCiAgICAqLwotICBmaW5hbCBwdWJsaWMgc3RhdGljIGludCBQRl9HUkFZID0gNjsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUEZfR1JBWSA9IDY7CiAgIC8qKgogICAgKiBSR0JBIHBpeGVsIGZvcm1hdC4gIFRoaXMgaXMgdGhlIHNhbWUgYXMge0BsaW5rICNQRl9SR0JYfSwgZXhjZXB0IHRoYXQgd2hlbgogICAgKiBkZWNvbXByZXNzaW5nLCB0aGUgWCBieXRlIGlzIGd1YXJhbnRlZWQgdG8gYmUgMHhGRiwgd2hpY2ggY2FuIGJlCiAgICAqIGludGVycHJldGVkIGFzIGFuIG9wYXF1ZSBhbHBoYSBjaGFubmVsLgogICAgKi8KLSAgZmluYWwgcHVibGljIHN0YXRpYyBpbnQgUEZfUkdCQSA9IDc7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBGX1JHQkEgPSA3OwogICAvKioKICAgICogQkdSQSBwaXhlbCBmb3JtYXQuICBUaGlzIGlzIHRoZSBzYW1lIGFzIHtAbGluayAjUEZfQkdSWH0sIGV4Y2VwdCB0aGF0IHdoZW4KICAgICogZGVjb21wcmVzc2luZywgdGhlIFggYnl0ZSBpcyBndWFyYW50ZWVkIHRvIGJlIDB4RkYsIHdoaWNoIGNhbiBiZQogICAgKiBpbnRlcnByZXRlZCBhcyBhbiBvcGFxdWUgYWxwaGEgY2hhbm5lbC4KICAgICovCi0gIGZpbmFsIHB1YmxpYyBzdGF0aWMgaW50IFBGX0JHUkEgPSA4OworICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQRl9CR1JBID0gODsKICAgLyoqCiAgICAqIEFCR1IgcGl4ZWwgZm9ybWF0LiAgVGhpcyBpcyB0aGUgc2FtZSBhcyB7QGxpbmsgI1BGX1hCR1J9LCBleGNlcHQgdGhhdCB3aGVuCiAgICAqIGRlY29tcHJlc3NpbmcsIHRoZSBYIGJ5dGUgaXMgZ3VhcmFudGVlZCB0byBiZSAweEZGLCB3aGljaCBjYW4gYmUKICAgICogaW50ZXJwcmV0ZWQgYXMgYW4gb3BhcXVlIGFscGhhIGNoYW5uZWwuCiAgICAqLwotICBmaW5hbCBwdWJsaWMgc3RhdGljIGludCBQRl9BQkdSID0gOTsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUEZfQUJHUiA9IDk7CiAgIC8qKgogICAgKiBBUkdCIHBpeGVsIGZvcm1hdC4gIFRoaXMgaXMgdGhlIHNhbWUgYXMge0BsaW5rICNQRl9YUkdCfSwgZXhjZXB0IHRoYXQgd2hlbgogICAgKiBkZWNvbXByZXNzaW5nLCB0aGUgWCBieXRlIGlzIGd1YXJhbnRlZWQgdG8gYmUgMHhGRiwgd2hpY2ggY2FuIGJlCiAgICAqIGludGVycHJldGVkIGFzIGFuIG9wYXF1ZSBhbHBoYSBjaGFubmVsLgogICAgKi8KLSAgZmluYWwgcHVibGljIHN0YXRpYyBpbnQgUEZfQVJHQiA9IDEwOworICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQRl9BUkdCID0gMTA7CiAKIAogICAvKioKLSAgICogUmV0dXJucyB0aGUgcGl4ZWwgc2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSBnaXZlbiBwaXhlbCBmb3JtYXQuCisgICAqIFJldHVybnMgdGhlIHBpeGVsIHNpemUgKGluIGJ5dGVzKSBmb3IgdGhlIGdpdmVuIHBpeGVsIGZvcm1hdC4KICAgICoKICAgICogQHBhcmFtIHBpeGVsRm9ybWF0IHRoZSBwaXhlbCBmb3JtYXQgKG9uZSBvZiA8Y29kZT5QRl8qPC9jb2RlPikKICAgICoKLSAgICogQHJldHVybiB0aGUgcGl4ZWwgc2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSBnaXZlbiBwaXhlbCBmb3JtYXQKKyAgICogQHJldHVybiB0aGUgcGl4ZWwgc2l6ZSAoaW4gYnl0ZXMpIGZvciB0aGUgZ2l2ZW4gcGl4ZWwgZm9ybWF0CiAgICAqLwogICBwdWJsaWMgc3RhdGljIGludCBnZXRQaXhlbFNpemUoaW50IHBpeGVsRm9ybWF0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBpZihwaXhlbEZvcm1hdCA8IDAgfHwgcGl4ZWxGb3JtYXQgPj0gTlVNUEYpCisgICAgaWYgKHBpeGVsRm9ybWF0IDwgMCB8fCBwaXhlbEZvcm1hdCA+PSBOVU1QRikKICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkludmFsaWQgcGl4ZWwgZm9ybWF0Iik7CiAgICAgcmV0dXJuIHBpeGVsU2l6ZVtwaXhlbEZvcm1hdF07CiAgIH0KIAotICBmaW5hbCBwcml2YXRlIHN0YXRpYyBpbnQgcGl4ZWxTaXplW10gPSB7CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludFtdIHBpeGVsU2l6ZSA9IHsKICAgICAzLCAzLCA0LCA0LCA0LCA0LCAxLCA0LCA0LCA0LCA0CiAgIH07CiAKQEAgLTIxMSwxMiArMjEyLDEyIEBACiAgICAqIEByZXR1cm4gdGhlIHJlZCBvZmZzZXQgZm9yIHRoZSBnaXZlbiBwaXhlbCBmb3JtYXQKICAgICovCiAgIHB1YmxpYyBzdGF0aWMgaW50IGdldFJlZE9mZnNldChpbnQgcGl4ZWxGb3JtYXQpIHRocm93cyBFeGNlcHRpb24gewotICAgIGlmKHBpeGVsRm9ybWF0IDwgMCB8fCBwaXhlbEZvcm1hdCA+PSBOVU1QRikKKyAgICBpZiAocGl4ZWxGb3JtYXQgPCAwIHx8IHBpeGVsRm9ybWF0ID49IE5VTVBGKQogICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiSW52YWxpZCBwaXhlbCBmb3JtYXQiKTsKICAgICByZXR1cm4gcmVkT2Zmc2V0W3BpeGVsRm9ybWF0XTsKICAgfQogCi0gIGZpbmFsIHByaXZhdGUgc3RhdGljIGludCByZWRPZmZzZXRbXSA9IHsKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50W10gcmVkT2Zmc2V0ID0gewogICAgIDAsIDIsIDAsIDIsIDMsIDEsIDAsIDAsIDIsIDMsIDEKICAgfTsKIApAQCAtMjMzLDEyICsyMzQsMTIgQEAKICAgICogQHJldHVybiB0aGUgZ3JlZW4gb2Zmc2V0IGZvciB0aGUgZ2l2ZW4gcGl4ZWwgZm9ybWF0CiAgICAqLwogICBwdWJsaWMgc3RhdGljIGludCBnZXRHcmVlbk9mZnNldChpbnQgcGl4ZWxGb3JtYXQpIHRocm93cyBFeGNlcHRpb24gewotICAgIGlmKHBpeGVsRm9ybWF0IDwgMCB8fCBwaXhlbEZvcm1hdCA+PSBOVU1QRikKKyAgICBpZiAocGl4ZWxGb3JtYXQgPCAwIHx8IHBpeGVsRm9ybWF0ID49IE5VTVBGKQogICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiSW52YWxpZCBwaXhlbCBmb3JtYXQiKTsKICAgICByZXR1cm4gZ3JlZW5PZmZzZXRbcGl4ZWxGb3JtYXRdOwogICB9CiAKLSAgZmluYWwgcHJpdmF0ZSBzdGF0aWMgaW50IGdyZWVuT2Zmc2V0W10gPSB7CisgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludFtdIGdyZWVuT2Zmc2V0ID0gewogICAgIDEsIDEsIDEsIDEsIDIsIDIsIDAsIDEsIDEsIDIsIDIKICAgfTsKIApAQCAtMjU1LDEyICsyNTYsMTIgQEAKICAgICogQHJldHVybiB0aGUgYmx1ZSBvZmZzZXQgZm9yIHRoZSBnaXZlbiBwaXhlbCBmb3JtYXQKICAgICovCiAgIHB1YmxpYyBzdGF0aWMgaW50IGdldEJsdWVPZmZzZXQoaW50IHBpeGVsRm9ybWF0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBpZihwaXhlbEZvcm1hdCA8IDAgfHwgcGl4ZWxGb3JtYXQgPj0gTlVNUEYpCisgICAgaWYgKHBpeGVsRm9ybWF0IDwgMCB8fCBwaXhlbEZvcm1hdCA+PSBOVU1QRikKICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkludmFsaWQgcGl4ZWwgZm9ybWF0Iik7CiAgICAgcmV0dXJuIGJsdWVPZmZzZXRbcGl4ZWxGb3JtYXRdOwogICB9CiAKLSAgZmluYWwgcHJpdmF0ZSBzdGF0aWMgaW50IGJsdWVPZmZzZXRbXSA9IHsKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50W10gYmx1ZU9mZnNldCA9IHsKICAgICAyLCAwLCAyLCAwLCAxLCAzLCAwLCAyLCAwLCAxLCAzCiAgIH07CiAKQEAgLTI2OSw2MCArMjcwLDU5IEBACiAgICAqIFRoZSB1bmNvbXByZXNzZWQgc291cmNlL2Rlc3RpbmF0aW9uIGltYWdlIGlzIHN0b3JlZCBpbiBib3R0b20tdXAgKFdpbmRvd3MsCiAgICAqIE9wZW5HTCkgb3JkZXIsIG5vdCB0b3AtZG93biAoWDExKSBvcmRlci4KICAgICovCi0gIGZpbmFsIHB1YmxpYyBzdGF0aWMgaW50IEZMQUdfQk9UVE9NVVAgICAgID0gMjsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19CT1RUT01VUCAgICAgPSAyOwogICAvKioKICAgICogVHVybiBvZmYgQ1BVIGF1dG8tZGV0ZWN0aW9uIGFuZCBmb3JjZSBUdXJib0pQRUcgdG8gdXNlIE1NWCBjb2RlCiAgICAqIChpZiB0aGUgdW5kZXJseWluZyBjb2RlYyBzdXBwb3J0cyBpdC4pCiAgICAqLwotICBmaW5hbCBwdWJsaWMgc3RhdGljIGludCBGTEFHX0ZPUkNFTU1YICAgICA9IDg7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfRk9SQ0VNTVggICAgID0gODsKICAgLyoqCiAgICAqIFR1cm4gb2ZmIENQVSBhdXRvLWRldGVjdGlvbiBhbmQgZm9yY2UgVHVyYm9KUEVHIHRvIHVzZSBTU0UgY29kZQogICAgKiAoaWYgdGhlIHVuZGVybHlpbmcgY29kZWMgc3VwcG9ydHMgaXQuKQogICAgKi8KLSAgZmluYWwgcHVibGljIHN0YXRpYyBpbnQgRkxBR19GT1JDRVNTRSAgICAgPSAxNjsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19GT1JDRVNTRSAgICAgPSAxNjsKICAgLyoqCiAgICAqIFR1cm4gb2ZmIENQVSBhdXRvLWRldGVjdGlvbiBhbmQgZm9yY2UgVHVyYm9KUEVHIHRvIHVzZSBTU0UyIGNvZGUKICAgICogKGlmIHRoZSB1bmRlcmx5aW5nIGNvZGVjIHN1cHBvcnRzIGl0LikKICAgICovCi0gIGZpbmFsIHB1YmxpYyBzdGF0aWMgaW50IEZMQUdfRk9SQ0VTU0UyICAgID0gMzI7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfRk9SQ0VTU0UyICAgID0gMzI7CiAgIC8qKgogICAgKiBUdXJuIG9mZiBDUFUgYXV0by1kZXRlY3Rpb24gYW5kIGZvcmNlIFR1cmJvSlBFRyB0byB1c2UgU1NFMyBjb2RlCiAgICAqIChpZiB0aGUgdW5kZXJseWluZyBjb2RlYyBzdXBwb3J0cyBpdC4pCiAgICAqLwotICBmaW5hbCBwdWJsaWMgc3RhdGljIGludCBGTEFHX0ZPUkNFU1NFMyAgICA9IDEyODsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19GT1JDRVNTRTMgICAgPSAxMjg7CiAgIC8qKgotICAgKiBXaGVuIGRlY29tcHJlc3NpbmcsIHVzZSB0aGUgZmFzdGVzdCBjaHJvbWluYW5jZSB1cHNhbXBsaW5nIGFsZ29yaXRobQotICAgKiBhdmFpbGFibGUgaW4gdGhlIHVuZGVybHlpbmcgY29kZWMuICBUaGUgZGVmYXVsdCBpcyB0byB1c2Ugc21vb3RoCi0gICAqIHVwc2FtcGxpbmcsIHdoaWNoIGNyZWF0ZXMgYSBzbW9vdGggdHJhbnNpdGlvbiBiZXR3ZWVuIG5laWdoYm9yaW5nCi0gICAqIGNocm9taW5hbmNlIGNvbXBvbmVudHMgaW4gb3JkZXIgdG8gcmVkdWNlIHVwc2FtcGxpbmcgYXJ0aWZhY3RzIGluIHRoZQotICAgKiBkZWNvbXByZXNzZWQgaW1hZ2UuCisgICAqIFdoZW4gZGVjb21wcmVzc2luZyBhbiBpbWFnZSB0aGF0IHdhcyBjb21wcmVzc2VkIHVzaW5nIGNocm9taW5hbmNlCisgICAqIHN1YnNhbXBsaW5nLCB1c2UgdGhlIGZhc3Rlc3QgY2hyb21pbmFuY2UgdXBzYW1wbGluZyBhbGdvcml0aG0gYXZhaWxhYmxlIGluCisgICAqIHRoZSB1bmRlcmx5aW5nIGNvZGVjLiAgVGhlIGRlZmF1bHQgaXMgdG8gdXNlIHNtb290aCB1cHNhbXBsaW5nLCB3aGljaAorICAgKiBjcmVhdGVzIGEgc21vb3RoIHRyYW5zaXRpb24gYmV0d2VlbiBuZWlnaGJvcmluZyBjaHJvbWluYW5jZSBjb21wb25lbnRzIGluCisgICAqIG9yZGVyIHRvIHJlZHVjZSB1cHNhbXBsaW5nIGFydGlmYWN0cyBpbiB0aGUgZGVjb21wcmVzc2VkIGltYWdlLgogICAgKi8KLSAgZmluYWwgcHVibGljIHN0YXRpYyBpbnQgRkxBR19GQVNUVVBTQU1QTEUgPSAyNTY7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfRkFTVFVQU0FNUExFID0gMjU2OwogICAvKioKICAgICogVXNlIHRoZSBmYXN0ZXN0IERDVC9JRENUIGFsZ29yaXRobSBhdmFpbGFibGUgaW4gdGhlIHVuZGVybHlpbmcgY29kZWMuICBUaGUKLSAgICogZGVmYXVsdCBpZiB0aGlzIGZsYWcgaXMgbm90IHNwZWNpZmllZCBpcyBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYy4gIFRoZQotICAgKiBsaWJqcGVnIGltcGxlbWVudGF0aW9uLCBmb3IgZXhhbXBsZSwgdXNlcyB0aGUgZmFzdCBhbGdvcml0aG0gYnkgZGVmYXVsdAotICAgKiB3aGVuIGNvbXByZXNzaW5nLCBiZWNhdXNlIHRoaXMgaGFzIGJlZW4gc2hvd24gdG8gaGF2ZSBvbmx5IGEgdmVyeSBzbGlnaHQKLSAgICogZWZmZWN0IG9uIGFjY3VyYWN5LCBidXQgaXQgdXNlcyB0aGUgYWNjdXJhdGUgYWxnb3JpdGhtIHdoZW4gZGVjb21wcmVzc2luZywKLSAgICogYmVjYXVzZSB0aGlzIGhhcyBiZWVuIHNob3duIHRvIGhhdmUgYSBsYXJnZXIgZWZmZWN0LgorICAgKiBkZWZhdWx0IGlmIHRoaXMgZmxhZyBpcyBub3Qgc3BlY2lmaWVkIGlzIGltcGxlbWVudGF0aW9uLXNwZWNpZmljLiAgRm9yCisgICAqIGV4YW1wbGUsIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBUdXJib0pQRUcgZm9yIGxpYmpwZWdbLXR1cmJvXSB1c2VzIHRoZSBmYXN0CisgICAqIGFsZ29yaXRobSBieSBkZWZhdWx0IHdoZW4gY29tcHJlc3NpbmcsIGJlY2F1c2UgdGhpcyBoYXMgYmVlbiBzaG93biB0byBoYXZlCisgICAqIG9ubHkgYSB2ZXJ5IHNsaWdodCBlZmZlY3Qgb24gYWNjdXJhY3ksIGJ1dCBpdCB1c2VzIHRoZSBhY2N1cmF0ZSBhbGdvcml0aG0KKyAgICogd2hlbiBkZWNvbXByZXNzaW5nLCBiZWNhdXNlIHRoaXMgaGFzIGJlZW4gc2hvd24gdG8gaGF2ZSBhIGxhcmdlciBlZmZlY3QuCiAgICAqLwotICBmaW5hbCBwdWJsaWMgc3RhdGljIGludCBGTEFHX0ZBU1REQ1QgICAgICA9ICAyMDQ4OworICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX0ZBU1REQ1QgICAgICA9ICAyMDQ4OwogICAvKioKICAgICogVXNlIHRoZSBtb3N0IGFjY3VyYXRlIERDVC9JRENUIGFsZ29yaXRobSBhdmFpbGFibGUgaW4gdGhlIHVuZGVybHlpbmcKICAgICogY29kZWMuICBUaGUgZGVmYXVsdCBpZiB0aGlzIGZsYWcgaXMgbm90IHNwZWNpZmllZCBpcwotICAgKiBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYy4gIFRoZSBsaWJqcGVnIGltcGxlbWVudGF0aW9uLCBmb3IgZXhhbXBsZSwgdXNlcwotICAgKiB0aGUgZmFzdCBhbGdvcml0aG0gYnkgZGVmYXVsdCB3aGVuIGNvbXByZXNzaW5nLCBiZWNhdXNlIHRoaXMgaGFzIGJlZW4KLSAgICogc2hvd24gdG8gaGF2ZSBvbmx5IGEgdmVyeSBzbGlnaHQgZWZmZWN0IG9uIGFjY3VyYWN5LCBidXQgaXQgdXNlcyB0aGUKLSAgICogYWNjdXJhdGUgYWxnb3JpdGhtIHdoZW4gZGVjb21wcmVzc2luZywgYmVjYXVzZSB0aGlzIGhhcyBiZWVuIHNob3duIHRvIGhhdmUKLSAgICogYSBsYXJnZXIgZWZmZWN0LgorICAgKiBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYy4gIEZvciBleGFtcGxlLCB0aGUgaW1wbGVtZW50YXRpb24gb2YgVHVyYm9KUEVHIGZvcgorICAgKiBsaWJqcGVnWy10dXJib10gdXNlcyB0aGUgZmFzdCBhbGdvcml0aG0gYnkgZGVmYXVsdCB3aGVuIGNvbXByZXNzaW5nLAorICAgKiBiZWNhdXNlIHRoaXMgaGFzIGJlZW4gc2hvd24gdG8gaGF2ZSBvbmx5IGEgdmVyeSBzbGlnaHQgZWZmZWN0IG9uIGFjY3VyYWN5LAorICAgKiBidXQgaXQgdXNlcyB0aGUgYWNjdXJhdGUgYWxnb3JpdGhtIHdoZW4gZGVjb21wcmVzc2luZywgYmVjYXVzZSB0aGlzIGhhcworICAgKiBiZWVuIHNob3duIHRvIGhhdmUgYSBsYXJnZXIgZWZmZWN0LgogICAgKi8KLSAgZmluYWwgcHVibGljIHN0YXRpYyBpbnQgRkxBR19BQ0NVUkFURURDVCAgPSAgNDA5NjsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19BQ0NVUkFURURDVCAgPSAgNDA5NjsKIAogCiAgIC8qKgogICAgKiBSZXR1cm5zIHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIGJ1ZmZlciAoaW4gYnl0ZXMpIHJlcXVpcmVkIHRvIGhvbGQgYSBKUEVHCi0gICAqIGltYWdlIHdpdGggdGhlIGdpdmVuIHdpZHRoIGFuZCBoZWlnaHQsIGFuZCBsZXZlbCBvZiBjaHJvbWluYW5jZQotICAgKiBzdWJzYW1wbGluZy4KKyAgICogaW1hZ2Ugd2l0aCB0aGUgZ2l2ZW4gd2lkdGgsIGhlaWdodCwgYW5kIGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nLgogICAgKgogICAgKiBAcGFyYW0gd2lkdGggdGhlIHdpZHRoIChpbiBwaXhlbHMpIG9mIHRoZSBKUEVHIGltYWdlCiAgICAqCkBAIC0zMzIsMTAgKzMzMiw5IEBACiAgICAqIGdlbmVyYXRpbmcgdGhlIEpQRUcgaW1hZ2UgKG9uZSBvZiB7QGxpbmsgVEogVEouU0FNUF8qfSkKICAgICoKICAgICogQHJldHVybiB0aGUgbWF4aW11bSBzaXplIG9mIHRoZSBidWZmZXIgKGluIGJ5dGVzKSByZXF1aXJlZCB0byBob2xkIGEgSlBFRwotICAgKiBpbWFnZSB3aXRoIHRoZSBnaXZlbiB3aWR0aCBhbmQgaGVpZ2h0LCBhbmQgbGV2ZWwgb2YgY2hyb21pbmFuY2UKLSAgICogc3Vic2FtcGxpbmcKKyAgICogaW1hZ2Ugd2l0aCB0aGUgZ2l2ZW4gd2lkdGgsIGhlaWdodCwgYW5kIGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nCiAgICAqLwotICBwdWJsaWMgbmF0aXZlIHN0YXRpYyBpbnQgYnVmU2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBqcGVnU3Vic2FtcCkKKyAgcHVibGljIHN0YXRpYyBuYXRpdmUgaW50IGJ1ZlNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQganBlZ1N1YnNhbXApCiAgICAgdGhyb3dzIEV4Y2VwdGlvbjsKIAogICAvKioKQEAgLTM1Miw4ICszNTEsNyBAQAogICAgKiBAcmV0dXJuIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgKGluIGJ5dGVzKSByZXF1aXJlZCB0byBob2xkIGEgWVVWIHBsYW5hcgogICAgKiBpbWFnZSB3aXRoIHRoZSBnaXZlbiB3aWR0aCwgaGVpZ2h0LCBhbmQgbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcKICAgICovCi0gIHB1YmxpYyBuYXRpdmUgc3RhdGljIGludCBidWZTaXplWVVWKGludCB3aWR0aCwgaW50IGhlaWdodCwKLSAgICBpbnQgc3Vic2FtcCkKKyAgcHVibGljIHN0YXRpYyBuYXRpdmUgaW50IGJ1ZlNpemVZVVYoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgc3Vic2FtcCkKICAgICB0aHJvd3MgRXhjZXB0aW9uOwogCiAgIC8qKgpAQCAtMzYzLDcgKzM2MSw3IEBACiAgICAqIEByZXR1cm4gYSBsaXN0IG9mIGZyYWN0aW9uYWwgc2NhbGluZyBmYWN0b3JzIHRoYXQgdGhlIEpQRUcgZGVjb21wcmVzc29yIGluCiAgICAqIHRoaXMgaW1wbGVtZW50YXRpb24gb2YgVHVyYm9KUEVHIHN1cHBvcnRzCiAgICAqLwotICBwdWJsaWMgbmF0aXZlIHN0YXRpYyBUSlNjYWxpbmdGYWN0b3JbXSBnZXRTY2FsaW5nRmFjdG9ycygpCisgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIFRKU2NhbGluZ0ZhY3RvcltdIGdldFNjYWxpbmdGYWN0b3JzKCkKICAgICB0aHJvd3MgRXhjZXB0aW9uOwogCiAgIHN0YXRpYyB7CmRpZmYgLS1naXQgYS9qYXZhL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5qYXZhIGIvamF2YS9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkNvbXByZXNzb3IuamF2YQppbmRleCBiM2M5Yjk1Li4yOWM4YjJhIDEwMDY0NAotLS0gYS9qYXZhL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ29tcHJlc3Nvci5qYXZhCisrKyBiL2phdmEvb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDb21wcmVzc29yLmphdmEKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKTIwMTEgRC4gUi4gQ29tbWFuZGVyLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykyMDExLTIwMTQgRC4gUi4gQ29tbWFuZGVyLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgpAQCAtMzYsNyArMzYsNyBAQAogICovCiBwdWJsaWMgY2xhc3MgVEpDb21wcmVzc29yIHsKIAotICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgTk9fQVNTT0NfRVJST1IgPQorICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9fQVNTT0NfRVJST1IgPQogICAgICJObyBzb3VyY2UgaW1hZ2UgaXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgaW5zdGFuY2UiOwogCiAgIC8qKgpAQCAtNDgsMjEgKzQ4LDM2IEBACiAKICAgLyoqCiAgICAqIENyZWF0ZSBhIFR1cmJvSlBFRyBjb21wcmVzc29yIGluc3RhbmNlIGFuZCBhc3NvY2lhdGUgdGhlIHVuY29tcHJlc3NlZAotICAgKiBzb3VyY2UgaW1hZ2Ugc3RvcmVkIGluIDxjb2RlPnNyY0ltYWdlPC9jb2RlPiB3aXRoIHRoZSBuZXdseS1jcmVhdGVkCisgICAqIHNvdXJjZSBpbWFnZSBzdG9yZWQgaW4gPGNvZGU+c3JjSW1hZ2U8L2NvZGU+IHdpdGggdGhlIG5ld2x5IGNyZWF0ZWQKICAgICogaW5zdGFuY2UuCiAgICAqCiAgICAqIEBwYXJhbSBzcmNJbWFnZSBzZWUge0BsaW5rICNzZXRTb3VyY2VJbWFnZX0gZm9yIGRlc2NyaXB0aW9uCiAgICAqCisgICAqIEBwYXJhbSB4IHNlZSB7QGxpbmsgI3NldFNvdXJjZUltYWdlfSBmb3IgZGVzY3JpcHRpb24KKyAgICoKKyAgICogQHBhcmFtIHkgc2VlIHtAbGluayAjc2V0U291cmNlSW1hZ2V9IGZvciBkZXNjcmlwdGlvbgorICAgKgogICAgKiBAcGFyYW0gd2lkdGggc2VlIHtAbGluayAjc2V0U291cmNlSW1hZ2V9IGZvciBkZXNjcmlwdGlvbgogICAgKgogICAgKiBAcGFyYW0gcGl0Y2ggc2VlIHtAbGluayAjc2V0U291cmNlSW1hZ2V9IGZvciBkZXNjcmlwdGlvbgogICAgKgogICAgKiBAcGFyYW0gaGVpZ2h0IHNlZSB7QGxpbmsgI3NldFNvdXJjZUltYWdlfSBmb3IgZGVzY3JpcHRpb24KICAgICoKLSAgICogQHBhcmFtIHBpeGVsRm9ybWF0IHNlZSB7QGxpbmsgI3NldFNvdXJjZUltYWdlfSBmb3IgZGVzY3JpcHRpb24KKyAgICogQHBhcmFtIHBpeGVsRm9ybWF0IHBpeGVsIGZvcm1hdCBvZiB0aGUgc291cmNlIGltYWdlIChvbmUgb2YKKyAgICoge0BsaW5rIFRKI1BGX1JHQiBUSi5QRl8qfSkKICAgICovCisgIHB1YmxpYyBUSkNvbXByZXNzb3IoYnl0ZVtdIHNyY0ltYWdlLCBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IHBpdGNoLAorICAgICAgICAgICAgICAgICAgICAgIGludCBoZWlnaHQsIGludCBwaXhlbEZvcm1hdCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgc2V0U291cmNlSW1hZ2Uoc3JjSW1hZ2UsIHgsIHksIHdpZHRoLCBwaXRjaCwgaGVpZ2h0LCBwaXhlbEZvcm1hdCk7CisgIH0KKworICAvKioKKyAgICogQGRlcHJlY2F0ZWQgVXNlCisgICAqIHtAbGluayAjVEpDb21wcmVzc29yKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCl9IGluc3RlYWQuCisgICAqLworICBARGVwcmVjYXRlZAogICBwdWJsaWMgVEpDb21wcmVzc29yKGJ5dGVbXSBzcmNJbWFnZSwgaW50IHdpZHRoLCBpbnQgcGl0Y2gsIGludCBoZWlnaHQsCi0gICAgaW50IHBpeGVsRm9ybWF0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgcGl4ZWxGb3JtYXQpIHRocm93cyBFeGNlcHRpb24gewogICAgIHNldFNvdXJjZUltYWdlKHNyY0ltYWdlLCB3aWR0aCwgcGl0Y2gsIGhlaWdodCwgcGl4ZWxGb3JtYXQpOwogICB9CiAKQEAgLTcwLDQ3ICs4NSw3MyBAQAogICAgKiBBc3NvY2lhdGUgYW4gdW5jb21wcmVzc2VkIHNvdXJjZSBpbWFnZSB3aXRoIHRoaXMgY29tcHJlc3NvciBpbnN0YW5jZS4KICAgICoKICAgICogQHBhcmFtIHNyY0ltYWdlIGltYWdlIGJ1ZmZlciBjb250YWluaW5nIFJHQiBvciBncmF5c2NhbGUgcGl4ZWxzIHRvIGJlCi0gICAqIGNvbXByZXNzZWQKKyAgICogY29tcHJlc3NlZCBvciBlbmNvZGVkCiAgICAqCi0gICAqIEBwYXJhbSB3aWR0aCB3aWR0aCAoaW4gcGl4ZWxzKSBvZiB0aGUgc291cmNlIGltYWdlCisgICAqIEBwYXJhbSB4IHggb2Zmc2V0IChpbiBwaXhlbHMpIG9mIHRoZSByZWdpb24gaW4gdGhlIHNvdXJjZSBpbWFnZSBmcm9tIHdoaWNoCisgICAqIHRoZSBKUEVHIG9yIFlVViBpbWFnZSBzaG91bGQgYmUgY29tcHJlc3NlZC9lbmNvZGVkCisgICAqCisgICAqIEBwYXJhbSB5IHkgb2Zmc2V0IChpbiBwaXhlbHMpIG9mIHRoZSByZWdpb24gaW4gdGhlIHNvdXJjZSBpbWFnZSBmcm9tIHdoaWNoCisgICAqIHRoZSBKUEVHIG9yIFlVViBpbWFnZSBzaG91bGQgYmUgY29tcHJlc3NlZC9lbmNvZGVkCisgICAqCisgICAqIEBwYXJhbSB3aWR0aCB3aWR0aCAoaW4gcGl4ZWxzKSBvZiB0aGUgcmVnaW9uIGluIHRoZSBzb3VyY2UgaW1hZ2UgZnJvbQorICAgKiB3aGljaCB0aGUgSlBFRyBvciBZVVYgaW1hZ2Ugc2hvdWxkIGJlIGNvbXByZXNzZWQvZW5jb2RlZAogICAgKgogICAgKiBAcGFyYW0gcGl0Y2ggYnl0ZXMgcGVyIGxpbmUgb2YgdGhlIHNvdXJjZSBpbWFnZS4gIE5vcm1hbGx5LCB0aGlzIHNob3VsZCBiZQogICAgKiA8Y29kZT53aWR0aCAqIFRKLnBpeGVsU2l6ZShwaXhlbEZvcm1hdCk8L2NvZGU+IGlmIHRoZSBzb3VyY2UgaW1hZ2UgaXMKICAgICogdW5wYWRkZWQsIGJ1dCB5b3UgY2FuIHVzZSB0aGlzIHBhcmFtZXRlciB0bywgZm9yIGluc3RhbmNlLCBzcGVjaWZ5IHRoYXQKLSAgICogdGhlIHNjYW5saW5lcyBpbiB0aGUgc291cmNlIGltYWdlIGFyZSBwYWRkZWQgdG8gNC1ieXRlIGJvdW5kYXJpZXMsIGFzIGlzCi0gICAqIHRoZSBjYXNlIGZvciBXaW5kb3dzIGJpdG1hcHMuICBZb3UgY2FuIGFsc28gYmUgY2xldmVyIGFuZCB1c2UgdGhpcwotICAgKiBwYXJhbWV0ZXIgdG8gc2tpcCBsaW5lcywgZXRjLiAgU2V0dGluZyB0aGlzIHBhcmFtZXRlciB0byAwIGlzIHRoZQotICAgKiBlcXVpdmFsZW50IG9mIHNldHRpbmcgaXQgdG8gPGNvZGU+d2lkdGggKgotICAgKiBUSi5waXhlbFNpemUocGl4ZWxGb3JtYXQpPC9jb2RlPi4KKyAgICogdGhlIHNjYW5saW5lcyBpbiB0aGUgc291cmNlIGltYWdlIGFyZSBwYWRkZWQgdG8gYSA0LWJ5dGUgYm91bmRhcnkgb3IgdG8KKyAgICogY29tcHJlc3MvZW5jb2RlIGEgSlBFRyBvciBZVVYgaW1hZ2UgZnJvbSBhIHJlZ2lvbiBvZiBhIGxhcmdlciBzb3VyY2UKKyAgICogaW1hZ2UuICBZb3UgY2FuIGFsc28gYmUgY2xldmVyIGFuZCB1c2UgdGhpcyBwYXJhbWV0ZXIgdG8gc2tpcCBsaW5lcywgZXRjLgorICAgKiBTZXR0aW5nIHRoaXMgcGFyYW1ldGVyIHRvIDAgaXMgdGhlIGVxdWl2YWxlbnQgb2Ygc2V0dGluZyBpdCB0bworICAgKiA8Y29kZT53aWR0aCAqIFRKLnBpeGVsU2l6ZShwaXhlbEZvcm1hdCk8L2NvZGU+LgogICAgKgotICAgKiBAcGFyYW0gaGVpZ2h0IGhlaWdodCAoaW4gcGl4ZWxzKSBvZiB0aGUgc291cmNlIGltYWdlCisgICAqIEBwYXJhbSBoZWlnaHQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIHRoZSByZWdpb24gaW4gdGhlIHNvdXJjZSBpbWFnZSBmcm9tCisgICAqIHdoaWNoIHRoZSBKUEVHIG9yIFlVViBpbWFnZSBzaG91bGQgYmUgY29tcHJlc3NlZC9lbmNvZGVkCiAgICAqCiAgICAqIEBwYXJhbSBwaXhlbEZvcm1hdCBwaXhlbCBmb3JtYXQgb2YgdGhlIHNvdXJjZSBpbWFnZSAob25lIG9mCi0gICAqIHtAbGluayBUSiBUSi5QRl8qfSkKKyAgICoge0BsaW5rIFRKI1BGX1JHQiBUSi5QRl8qfSkKICAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNvdXJjZUltYWdlKGJ5dGVbXSBzcmNJbWFnZSwgaW50IHdpZHRoLCBpbnQgcGl0Y2gsCi0gICAgaW50IGhlaWdodCwgaW50IHBpeGVsRm9ybWF0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBpZihoYW5kbGUgPT0gMCkgaW5pdCgpOwotICAgIGlmKHNyY0ltYWdlID09IG51bGwgfHwgd2lkdGggPCAxIHx8IGhlaWdodCA8IDEgfHwgcGl0Y2ggPCAwCi0gICAgICB8fCBwaXhlbEZvcm1hdCA8IDAgfHwgcGl4ZWxGb3JtYXQgPj0gVEouTlVNUEYpCisgIHB1YmxpYyB2b2lkIHNldFNvdXJjZUltYWdlKGJ5dGVbXSBzcmNJbWFnZSwgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwaXRjaCwgaW50IGhlaWdodCwgaW50IHBpeGVsRm9ybWF0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBpZiAoaGFuZGxlID09IDApIGluaXQoKTsKKyAgICBpZiAoc3JjSW1hZ2UgPT0gbnVsbCB8fCB4IDwgMCB8fCB5IDwgMCB8fCB3aWR0aCA8IDEgfHwgaGVpZ2h0IDwgMSB8fAorICAgICAgICBwaXRjaCA8IDAgfHwgcGl4ZWxGb3JtYXQgPCAwIHx8IHBpeGVsRm9ybWF0ID49IFRKLk5VTVBGKQogICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiSW52YWxpZCBhcmd1bWVudCBpbiBzZXRTb3VyY2VJbWFnZSgpIik7CiAgICAgc3JjQnVmID0gc3JjSW1hZ2U7CiAgICAgc3JjV2lkdGggPSB3aWR0aDsKLSAgICBpZihwaXRjaCA9PSAwKSBzcmNQaXRjaCA9IHdpZHRoICogVEouZ2V0UGl4ZWxTaXplKHBpeGVsRm9ybWF0KTsKLSAgICBlbHNlIHNyY1BpdGNoID0gcGl0Y2g7CisgICAgaWYgKHBpdGNoID09IDApCisgICAgICBzcmNQaXRjaCA9IHdpZHRoICogVEouZ2V0UGl4ZWxTaXplKHBpeGVsRm9ybWF0KTsKKyAgICBlbHNlCisgICAgICBzcmNQaXRjaCA9IHBpdGNoOwogICAgIHNyY0hlaWdodCA9IGhlaWdodDsKICAgICBzcmNQaXhlbEZvcm1hdCA9IHBpeGVsRm9ybWF0OworICAgIHNyY1ggPSB4OworICAgIHNyY1kgPSB5OwogICB9CiAKICAgLyoqCisgICAqIEBkZXByZWNhdGVkIFVzZQorICAgKiB7QGxpbmsgI3NldFNvdXJjZUltYWdlKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCl9IGluc3RlYWQuCisgICAqLworICBARGVwcmVjYXRlZAorICBwdWJsaWMgdm9pZCBzZXRTb3VyY2VJbWFnZShieXRlW10gc3JjSW1hZ2UsIGludCB3aWR0aCwgaW50IHBpdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaGVpZ2h0LCBpbnQgcGl4ZWxGb3JtYXQpIHRocm93cyBFeGNlcHRpb24geworICAgIHNldFNvdXJjZUltYWdlKHNyY0ltYWdlLCAwLCAwLCB3aWR0aCwgcGl0Y2gsIGhlaWdodCwgcGl4ZWxGb3JtYXQpOworICAgIHNyY1ggPSBzcmNZID0gLTE7CisgIH0KKworCisgIC8qKgogICAgKiBTZXQgdGhlIGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nIGZvciBzdWJzZXF1ZW50IGNvbXByZXNzL2VuY29kZQogICAgKiBvcGVyYXRpb25zLgogICAgKgotICAgKiBAcGFyYW0gbmV3U3Vic2FtcCB0aGUgbmV3IGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nIChvbmUgb2YKLSAgICoge0BsaW5rIFRKIFRKLlNBTVBfKn0pCisgICAqIEBwYXJhbSBuZXdTdWJzYW1wIHRoZSBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZyB0byB1c2UgaW4KKyAgICogc3Vic2VxdWVudCBjb21wcmVzcy9lbmNvZGUgb3BlcmF0aW9ucyAob25lIG9mCisgICAqIHtAbGluayBUSiNTQU1QXzQ0NCBUSi5TQU1QXyp9KQogICAgKi8KICAgcHVibGljIHZvaWQgc2V0U3Vic2FtcChpbnQgbmV3U3Vic2FtcCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgaWYobmV3U3Vic2FtcCA8IDAgfHwgbmV3U3Vic2FtcCA+PSBUSi5OVU1TQU1QKQorICAgIGlmIChuZXdTdWJzYW1wIDwgMCB8fCBuZXdTdWJzYW1wID49IFRKLk5VTVNBTVApCiAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJJbnZhbGlkIGFyZ3VtZW50IGluIHNldFN1YnNhbXAoKSIpOwogICAgIHN1YnNhbXAgPSBuZXdTdWJzYW1wOwogICB9CkBAIC0xMjIsNyArMTYzLDcgQEAKICAgICogMTAwID0gYmVzdCkKICAgICovCiAgIHB1YmxpYyB2b2lkIHNldEpQRUdRdWFsaXR5KGludCBxdWFsaXR5KSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBpZihxdWFsaXR5IDwgMSB8fCBxdWFsaXR5ID4gMTAwKQorICAgIGlmIChxdWFsaXR5IDwgMSB8fCBxdWFsaXR5ID4gMTAwKQogICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiSW52YWxpZCBhcmd1bWVudCBpbiBzZXRKUEVHUXVhbGl0eSgpIik7CiAgICAganBlZ1F1YWxpdHkgPSBxdWFsaXR5OwogICB9CkBAIC0xMzMsMzIgKzE3NCw0NCBAQAogICAgKgogICAgKiBAcGFyYW0gZHN0QnVmIGJ1ZmZlciB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUgSlBFRyBpbWFnZS4gIFVzZQogICAgKiB7QGxpbmsgVEojYnVmU2l6ZX0gdG8gZGV0ZXJtaW5lIHRoZSBtYXhpbXVtIHNpemUgZm9yIHRoaXMgYnVmZmVyIGJhc2VkIG9uCi0gICAqIHRoZSBpbWFnZSB3aWR0aCBhbmQgaGVpZ2h0LgorICAgKiB0aGUgc291cmNlIGltYWdlJ3Mgd2lkdGggYW5kIGhlaWdodCBhbmQgdGhlIGRlc2lyZWQgbGV2ZWwgb2YgY2hyb21pbmFuY2UKKyAgICogc3Vic2FtcGxpbmcuCiAgICAqCi0gICAqIEBwYXJhbSBmbGFncyB0aGUgYml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZiB7QGxpbmsgVEogVEouRkxBR18qfQorICAgKiBAcGFyYW0gZmxhZ3MgdGhlIGJpdHdpc2UgT1Igb2Ygb25lIG9yIG1vcmUgb2YKKyAgICoge0BsaW5rIFRKI0ZMQUdfQk9UVE9NVVAgVEouRkxBR18qfQogICAgKi8KICAgcHVibGljIHZvaWQgY29tcHJlc3MoYnl0ZVtdIGRzdEJ1ZiwgaW50IGZsYWdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBpZihkc3RCdWYgPT0gbnVsbCB8fCBmbGFncyA8IDApCisgICAgaWYgKGRzdEJ1ZiA9PSBudWxsIHx8IGZsYWdzIDwgMCkKICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkludmFsaWQgYXJndW1lbnQgaW4gY29tcHJlc3MoKSIpOwotICAgIGlmKHNyY0J1ZiA9PSBudWxsKSB0aHJvdyBuZXcgRXhjZXB0aW9uKE5PX0FTU09DX0VSUk9SKTsKLSAgICBpZihqcGVnUXVhbGl0eSA8IDApIHRocm93IG5ldyBFeGNlcHRpb24oIkpQRUcgUXVhbGl0eSBub3Qgc2V0Iik7Ci0gICAgaWYoc3Vic2FtcCA8IDApIHRocm93IG5ldyBFeGNlcHRpb24oIlN1YnNhbXBsaW5nIGxldmVsIG5vdCBzZXQiKTsKLSAgICBjb21wcmVzc2VkU2l6ZSA9IGNvbXByZXNzKHNyY0J1Ziwgc3JjV2lkdGgsIHNyY1BpdGNoLAotICAgICAgc3JjSGVpZ2h0LCBzcmNQaXhlbEZvcm1hdCwgZHN0QnVmLCBzdWJzYW1wLCBqcGVnUXVhbGl0eSwgZmxhZ3MpOworICAgIGlmIChzcmNCdWYgPT0gbnVsbCkKKyAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oTk9fQVNTT0NfRVJST1IpOworICAgIGlmIChqcGVnUXVhbGl0eSA8IDApCisgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJKUEVHIFF1YWxpdHkgbm90IHNldCIpOworICAgIGlmIChzdWJzYW1wIDwgMCkKKyAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlN1YnNhbXBsaW5nIGxldmVsIG5vdCBzZXQiKTsKKyAgICBpZiAoc3JjWCA+PSAwICYmIHNyY1kgPj0gMCkKKyAgICAgIGNvbXByZXNzZWRTaXplID0gY29tcHJlc3Moc3JjQnVmLCBzcmNYLCBzcmNZLCBzcmNXaWR0aCwgc3JjUGl0Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY0hlaWdodCwgc3JjUGl4ZWxGb3JtYXQsIGRzdEJ1Ziwgc3Vic2FtcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganBlZ1F1YWxpdHksIGZsYWdzKTsKKyAgICBlbHNlCisgICAgICBjb21wcmVzc2VkU2l6ZSA9IGNvbXByZXNzKHNyY0J1Ziwgc3JjV2lkdGgsIHNyY1BpdGNoLCBzcmNIZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1BpeGVsRm9ybWF0LCBkc3RCdWYsIHN1YnNhbXAsIGpwZWdRdWFsaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyk7CiAgIH0KIAogICAvKioKICAgICogQ29tcHJlc3MgdGhlIHVuY29tcHJlc3NlZCBzb3VyY2UgaW1hZ2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29tcHJlc3NvcgogICAgKiBpbnN0YW5jZSBhbmQgcmV0dXJuIGEgYnVmZmVyIGNvbnRhaW5pbmcgYSBKUEVHIGltYWdlLgogICAgKgotICAgKiBAcGFyYW0gZmxhZ3MgdGhlIGJpdHdpc2UgT1Igb2Ygb25lIG9yIG1vcmUgb2Yge0BsaW5rIFRKIFRKLkZMQUdfKn0KKyAgICogQHBhcmFtIGZsYWdzIHRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mCisgICAqIHtAbGluayBUSiNGTEFHX0JPVFRPTVVQIFRKLkZMQUdfKn0KICAgICoKICAgICogQHJldHVybiBhIGJ1ZmZlciBjb250YWluaW5nIGEgSlBFRyBpbWFnZS4gIFRoZSBsZW5ndGggb2YgdGhpcyBidWZmZXIgd2lsbAogICAgKiBub3QgYmUgZXF1YWwgdG8gdGhlIHNpemUgb2YgdGhlIEpQRUcgaW1hZ2UuICBVc2Uge0BsaW5rCiAgICAqICNnZXRDb21wcmVzc2VkU2l6ZX0gdG8gb2J0YWluIHRoZSBzaXplIG9mIHRoZSBKUEVHIGltYWdlLgogICAgKi8KICAgcHVibGljIGJ5dGVbXSBjb21wcmVzcyhpbnQgZmxhZ3MpIHRocm93cyBFeGNlcHRpb24gewotICAgIGlmKHNyY1dpZHRoIDwgMSB8fCBzcmNIZWlnaHQgPCAxKQorICAgIGlmIChzcmNXaWR0aCA8IDEgfHwgc3JjSGVpZ2h0IDwgMSkKICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oTk9fQVNTT0NfRVJST1IpOwogICAgIGJ5dGVbXSBidWYgPSBuZXcgYnl0ZVtUSi5idWZTaXplKHNyY1dpZHRoLCBzcmNIZWlnaHQsIHN1YnNhbXApXTsKICAgICBjb21wcmVzcyhidWYsIGZsYWdzKTsKQEAgLTE3NCwxOCArMjI3LDIwIEBACiAgICAqCiAgICAqIEBwYXJhbSBkc3RCdWYgYnVmZmVyIHRoYXQgd2lsbCByZWNlaXZlIHRoZSBKUEVHIGltYWdlLiAgVXNlCiAgICAqIHtAbGluayBUSiNidWZTaXplfSB0byBkZXRlcm1pbmUgdGhlIG1heGltdW0gc2l6ZSBmb3IgdGhpcyBidWZmZXIgYmFzZWQgb24KLSAgICogdGhlIGltYWdlIHdpZHRoIGFuZCBoZWlnaHQuCisgICAqIHRoZSBpbWFnZSB3aWR0aCwgaGVpZ2h0LCBhbmQgbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcuCiAgICAqCi0gICAqIEBwYXJhbSBmbGFncyB0aGUgYml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZiB7QGxpbmsgVEogVEouRkxBR18qfQorICAgKiBAcGFyYW0gZmxhZ3MgdGhlIGJpdHdpc2UgT1Igb2Ygb25lIG9yIG1vcmUgb2YKKyAgICoge0BsaW5rIFRKI0ZMQUdfQk9UVE9NVVAgVEouRkxBR18qfQogICAgKi8KICAgcHVibGljIHZvaWQgY29tcHJlc3MoQnVmZmVyZWRJbWFnZSBzcmNJbWFnZSwgYnl0ZVtdIGRzdEJ1ZiwgaW50IGZsYWdzKQotICAgIHRocm93cyBFeGNlcHRpb24gewotICAgIGlmKHNyY0ltYWdlID09IG51bGwgfHwgZHN0QnVmID09IG51bGwgfHwgZmxhZ3MgPCAwKQorICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBpZiAoc3JjSW1hZ2UgPT0gbnVsbCB8fCBkc3RCdWYgPT0gbnVsbCB8fCBmbGFncyA8IDApCiAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJJbnZhbGlkIGFyZ3VtZW50IGluIGNvbXByZXNzKCkiKTsKICAgICBpbnQgd2lkdGggPSBzcmNJbWFnZS5nZXRXaWR0aCgpOwogICAgIGludCBoZWlnaHQgPSBzcmNJbWFnZS5nZXRIZWlnaHQoKTsKLSAgICBpbnQgcGl4ZWxGb3JtYXQ7ICBib29sZWFuIGludFBpeGVscyA9IGZhbHNlOwotICAgIGlmKGJ5dGVPcmRlciA9PSBudWxsKQorICAgIGludCBwaXhlbEZvcm1hdDsKKyAgICBib29sZWFuIGludFBpeGVscyA9IGZhbHNlOworICAgIGlmIChieXRlT3JkZXIgPT0gbnVsbCkKICAgICAgIGJ5dGVPcmRlciA9IEJ5dGVPcmRlci5uYXRpdmVPcmRlcigpOwogICAgIHN3aXRjaChzcmNJbWFnZS5nZXRUeXBlKCkpIHsKICAgICAgIGNhc2UgQnVmZmVyZWRJbWFnZS5UWVBFXzNCWVRFX0JHUjoKQEAgLTE5Niw3ICsyNTEsNyBAQAogICAgICAgY2FzZSBCdWZmZXJlZEltYWdlLlRZUEVfQllURV9HUkFZOgogICAgICAgICBwaXhlbEZvcm1hdCA9IFRKLlBGX0dSQVk7ICBicmVhazsKICAgICAgIGNhc2UgQnVmZmVyZWRJbWFnZS5UWVBFX0lOVF9CR1I6Ci0gICAgICAgIGlmKGJ5dGVPcmRlciA9PSBCeXRlT3JkZXIuQklHX0VORElBTikKKyAgICAgICAgaWYgKGJ5dGVPcmRlciA9PSBCeXRlT3JkZXIuQklHX0VORElBTikKICAgICAgICAgICBwaXhlbEZvcm1hdCA9IFRKLlBGX1hCR1I7CiAgICAgICAgIGVsc2UKICAgICAgICAgICBwaXhlbEZvcm1hdCA9IFRKLlBGX1JHQlg7CkBAIC0yMDQsNyArMjU5LDcgQEAKICAgICAgIGNhc2UgQnVmZmVyZWRJbWFnZS5UWVBFX0lOVF9SR0I6CiAgICAgICBjYXNlIEJ1ZmZlcmVkSW1hZ2UuVFlQRV9JTlRfQVJHQjoKICAgICAgIGNhc2UgQnVmZmVyZWRJbWFnZS5UWVBFX0lOVF9BUkdCX1BSRToKLSAgICAgICAgaWYoYnl0ZU9yZGVyID09IEJ5dGVPcmRlci5CSUdfRU5ESUFOKQorICAgICAgICBpZiAoYnl0ZU9yZGVyID09IEJ5dGVPcmRlci5CSUdfRU5ESUFOKQogICAgICAgICAgIHBpeGVsRm9ybWF0ID0gVEouUEZfWFJHQjsKICAgICAgICAgZWxzZQogICAgICAgICAgIHBpeGVsRm9ybWF0ID0gVEouUEZfQkdSWDsKQEAgLTIxMywyOCArMjY4LDM5IEBACiAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlVuc3VwcG9ydGVkIEJ1ZmZlcmVkSW1hZ2UgZm9ybWF0Iik7CiAgICAgfQogICAgIFdyaXRhYmxlUmFzdGVyIHdyID0gc3JjSW1hZ2UuZ2V0UmFzdGVyKCk7Ci0gICAgaWYoanBlZ1F1YWxpdHkgPCAwKSB0aHJvdyBuZXcgRXhjZXB0aW9uKCJKUEVHIFF1YWxpdHkgbm90IHNldCIpOwotICAgIGlmKHN1YnNhbXAgPCAwKSB0aHJvdyBuZXcgRXhjZXB0aW9uKCJTdWJzYW1wbGluZyBsZXZlbCBub3Qgc2V0Iik7Ci0gICAgaWYoaW50UGl4ZWxzKSB7CisgICAgaWYgKGpwZWdRdWFsaXR5IDwgMCkKKyAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkpQRUcgUXVhbGl0eSBub3Qgc2V0Iik7CisgICAgaWYgKHN1YnNhbXAgPCAwKQorICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiU3Vic2FtcGxpbmcgbGV2ZWwgbm90IHNldCIpOworICAgIGlmIChpbnRQaXhlbHMpIHsKICAgICAgIFNpbmdsZVBpeGVsUGFja2VkU2FtcGxlTW9kZWwgc20gPQogICAgICAgICAoU2luZ2xlUGl4ZWxQYWNrZWRTYW1wbGVNb2RlbClzcmNJbWFnZS5nZXRTYW1wbGVNb2RlbCgpOwotICAgICAgaW50IHBpdGNoID0gc20uZ2V0U2NhbmxpbmVTdHJpZGUoKTsKKyAgICAgIGludCBzdHJpZGUgPSBzbS5nZXRTY2FubGluZVN0cmlkZSgpOwogICAgICAgRGF0YUJ1ZmZlckludCBkYiA9IChEYXRhQnVmZmVySW50KXdyLmdldERhdGFCdWZmZXIoKTsKICAgICAgIGludFtdIGJ1ZiA9IGRiLmdldERhdGEoKTsKLSAgICAgIGNvbXByZXNzZWRTaXplID0gY29tcHJlc3MoYnVmLCB3aWR0aCwgcGl0Y2gsIGhlaWdodCwgcGl4ZWxGb3JtYXQsIGRzdEJ1ZiwKLSAgICAgICAgc3Vic2FtcCwganBlZ1F1YWxpdHksIGZsYWdzKTsKLSAgICB9Ci0gICAgZWxzZSB7CisgICAgICBpZiAoc3JjWCA+PSAwICYmIHNyY1kgPj0gMCkKKyAgICAgICAgY29tcHJlc3NlZFNpemUgPSBjb21wcmVzcyhidWYsIHNyY1gsIHNyY1ksIHdpZHRoLCBzdHJpZGUsIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbEZvcm1hdCwgZHN0QnVmLCBzdWJzYW1wLCBqcGVnUXVhbGl0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyk7CisgICAgICBlbHNlCisgICAgICAgIGNvbXByZXNzZWRTaXplID0gY29tcHJlc3MoYnVmLCB3aWR0aCwgc3RyaWRlLCBoZWlnaHQsIHBpeGVsRm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdEJ1Ziwgc3Vic2FtcCwganBlZ1F1YWxpdHksIGZsYWdzKTsKKyAgICB9IGVsc2UgewogICAgICAgQ29tcG9uZW50U2FtcGxlTW9kZWwgc20gPQogICAgICAgICAoQ29tcG9uZW50U2FtcGxlTW9kZWwpc3JjSW1hZ2UuZ2V0U2FtcGxlTW9kZWwoKTsKICAgICAgIGludCBwaXhlbFNpemUgPSBzbS5nZXRQaXhlbFN0cmlkZSgpOwotICAgICAgaWYocGl4ZWxTaXplICE9IFRKLmdldFBpeGVsU2l6ZShwaXhlbEZvcm1hdCkpCisgICAgICBpZiAocGl4ZWxTaXplICE9IFRKLmdldFBpeGVsU2l6ZShwaXhlbEZvcm1hdCkpCiAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkluY29uc2lzdGVuY3kgYmV0d2VlbiBwaXhlbCBmb3JtYXQgYW5kIHBpeGVsIHNpemUgaW4gQnVmZmVyZWRJbWFnZSIpOwogICAgICAgaW50IHBpdGNoID0gc20uZ2V0U2NhbmxpbmVTdHJpZGUoKTsKICAgICAgIERhdGFCdWZmZXJCeXRlIGRiID0gKERhdGFCdWZmZXJCeXRlKXdyLmdldERhdGFCdWZmZXIoKTsKICAgICAgIGJ5dGVbXSBidWYgPSBkYi5nZXREYXRhKCk7Ci0gICAgICBjb21wcmVzc2VkU2l6ZSA9IGNvbXByZXNzKGJ1Ziwgd2lkdGgsIHBpdGNoLCBoZWlnaHQsIHBpeGVsRm9ybWF0LCBkc3RCdWYsCi0gICAgICAgIHN1YnNhbXAsIGpwZWdRdWFsaXR5LCBmbGFncyk7CisgICAgICBpZiAoc3JjWCA+PSAwICYmIHNyY1kgPj0gMCkKKyAgICAgICAgY29tcHJlc3NlZFNpemUgPSBjb21wcmVzcyhidWYsIHNyY1gsIHNyY1ksIHdpZHRoLCBwaXRjaCwgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsRm9ybWF0LCBkc3RCdWYsIHN1YnNhbXAsIGpwZWdRdWFsaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzKTsKKyAgICAgIGVsc2UKKyAgICAgICAgY29tcHJlc3NlZFNpemUgPSBjb21wcmVzcyhidWYsIHdpZHRoLCBwaXRjaCwgaGVpZ2h0LCBwaXhlbEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RCdWYsIHN1YnNhbXAsIGpwZWdRdWFsaXR5LCBmbGFncyk7CiAgICAgfQogICB9CiAKQEAgLTI0NSw3ICszMTEsOCBAQAogICAgKiBAcGFyYW0gc3JjSW1hZ2UgYSA8Y29kZT5CdWZmZXJlZEltYWdlPC9jb2RlPiBpbnN0YW5jZSBjb250YWluaW5nIFJHQiBvcgogICAgKiBncmF5c2NhbGUgcGl4ZWxzIHRvIGJlIGNvbXByZXNzZWQKICAgICoKLSAgICogQHBhcmFtIGZsYWdzIHRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mIHtAbGluayBUSiBUSi5GTEFHXyp9CisgICAqIEBwYXJhbSBmbGFncyB0aGUgYml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZgorICAgKiB7QGxpbmsgVEojRkxBR19CT1RUT01VUCBUSi5GTEFHXyp9CiAgICAqCiAgICAqIEByZXR1cm4gYSBidWZmZXIgY29udGFpbmluZyBhIEpQRUcgaW1hZ2UuICBUaGUgbGVuZ3RoIG9mIHRoaXMgYnVmZmVyIHdpbGwKICAgICogbm90IGJlIGVxdWFsIHRvIHRoZSBzaXplIG9mIHRoZSBKUEVHIGltYWdlLiAgVXNlIHtAbGluawpAQCAtMjY2LDI3ICszMzMsMzQgQEAKICAgICogVHVyYm9KUEVHJ3MgdW5kZXJseWluZyBjb2RlYyB0byBwcm9kdWNlIGEgcGxhbmFyIFlVViBpbWFnZSB0aGF0IGlzCiAgICAqIHN1aXRhYmxlIGZvciBkaXJlY3QgdmlkZW8gZGlzcGxheS4gIFNwZWNpZmljYWxseSwgaWYgdGhlIGNocm9taW5hbmNlCiAgICAqIGNvbXBvbmVudHMgYXJlIHN1YnNhbXBsZWQgYWxvbmcgdGhlIGhvcml6b250YWwgZGltZW5zaW9uLCB0aGVuIHRoZSB3aWR0aAotICAgKiBvZiB0aGUgbHVtaW5hbmNlIHBsYW5lIGlzIHBhZGRlZCB0byAyIGluIHRoZSBvdXRwdXQgaW1hZ2UgKHNhbWUgZ29lcyBmb3IKLSAgICogdGhlIGhlaWdodCBvZiB0aGUgbHVtaW5hbmNlIHBsYW5lLCBpZiB0aGUgY2hyb21pbmFuY2UgY29tcG9uZW50cyBhcmUKLSAgICogc3Vic2FtcGxlZCBhbG9uZyB0aGUgdmVydGljYWwgZGltZW5zaW9uLikgIEFsc28sIGVhY2ggbGluZSBvZiBlYWNoIHBsYW5lCi0gICAqIGluIHRoZSBvdXRwdXQgaW1hZ2UgaXMgcGFkZGVkIHRvIDQgYnl0ZXMuICBBbHRob3VnaCB0aGlzIHdpbGwgd29yayB3aXRoCi0gICAqIGFueSBzdWJzYW1wbGluZyBvcHRpb24sIGl0IGlzIHJlYWxseSBvbmx5IHVzZWZ1bCBpbiBjb21iaW5hdGlvbiB3aXRoCi0gICAqIHtAbGluayBUSiNTQU1QXzQyMH0sIHdoaWNoIHByb2R1Y2VzIGFuIGltYWdlIGNvbXBhdGlibGUgd2l0aCB0aGUgSTQyMCAoQUtBCi0gICAqICJZVVY0MjBQIikgZm9ybWF0LgorICAgKiBvZiB0aGUgbHVtaW5hbmNlIHBsYW5lIGlzIHBhZGRlZCB0byB0aGUgbmVhcmVzdCBtdWx0aXBsZSBvZiAyIGluIHRoZQorICAgKiBvdXRwdXQgaW1hZ2UgKHNhbWUgZ29lcyBmb3IgdGhlIGhlaWdodCBvZiB0aGUgbHVtaW5hbmNlIHBsYW5lLCBpZiB0aGUKKyAgICogY2hyb21pbmFuY2UgY29tcG9uZW50cyBhcmUgc3Vic2FtcGxlZCBhbG9uZyB0aGUgdmVydGljYWwgZGltZW5zaW9uLikKKyAgICogQWxzbywgZWFjaCBsaW5lIG9mIGVhY2ggcGxhbmUgaW4gdGhlIG91dHB1dCBpbWFnZSBpcyBwYWRkZWQgdG8gNCBieXRlcy4KKyAgICogQWx0aG91Z2ggdGhpcyB3aWxsIHdvcmsgd2l0aCBhbnkgc3Vic2FtcGxpbmcgb3B0aW9uLCBpdCBpcyByZWFsbHkgb25seQorICAgKiB1c2VmdWwgaW4gY29tYmluYXRpb24gd2l0aCB7QGxpbmsgVEojU0FNUF80MjB9LCB3aGljaCBwcm9kdWNlcyBhbiBpbWFnZQorICAgKiBjb21wYXRpYmxlIHdpdGggdGhlIEk0MjAgKEFLQSAiWVVWNDIwUCIpIGZvcm1hdC4KKyAgICogPHA+CisgICAqIE5PVEU6IFRlY2huaWNhbGx5LCB0aGUgSlBFRyBmb3JtYXQgdXNlcyB0aGUgWUNiQ3IgY29sb3JzcGFjZSwgYnV0IHBlciB0aGUKKyAgICogY29udmVudGlvbiBvZiB0aGUgZGlnaXRhbCB2aWRlbyBjb21tdW5pdHksIHRoZSBUdXJib0pQRUcgQVBJIHVzZXMgIllVViIgdG8KKyAgICogcmVmZXIgdG8gYW4gaW1hZ2UgZm9ybWF0IGNvbnNpc3Rpbmcgb2YgWSwgQ2IsIGFuZCBDciBpbWFnZSBwbGFuZXMuCiAgICAqCiAgICAqIEBwYXJhbSBkc3RCdWYgYnVmZmVyIHRoYXQgd2lsbCByZWNlaXZlIHRoZSBZVVYgcGxhbmFyIGltYWdlLiAgVXNlCiAgICAqIHtAbGluayBUSiNidWZTaXplWVVWfSB0byBkZXRlcm1pbmUgdGhlIGFwcHJvcHJpYXRlIHNpemUgZm9yIHRoaXMgYnVmZmVyCiAgICAqIGJhc2VkIG9uIHRoZSBpbWFnZSB3aWR0aCwgaGVpZ2h0LCBhbmQgbGV2ZWwgb2YgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcuCiAgICAqCi0gICAqIEBwYXJhbSBmbGFncyB0aGUgYml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZiB7QGxpbmsgVEogVEouRkxBR18qfQorICAgKiBAcGFyYW0gZmxhZ3MgdGhlIGJpdHdpc2UgT1Igb2Ygb25lIG9yIG1vcmUgb2YKKyAgICoge0BsaW5rIFRKI0ZMQUdfQk9UVE9NVVAgVEouRkxBR18qfQogICAgKi8KICAgcHVibGljIHZvaWQgZW5jb2RlWVVWKGJ5dGVbXSBkc3RCdWYsIGludCBmbGFncykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgaWYoZHN0QnVmID09IG51bGwgfHwgZmxhZ3MgPCAwKQorICAgIGlmIChkc3RCdWYgPT0gbnVsbCB8fCBmbGFncyA8IDApCiAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJJbnZhbGlkIGFyZ3VtZW50IGluIGNvbXByZXNzKCkiKTsKLSAgICBpZihzcmNCdWYgPT0gbnVsbCkgdGhyb3cgbmV3IEV4Y2VwdGlvbihOT19BU1NPQ19FUlJPUik7Ci0gICAgaWYoc3Vic2FtcCA8IDApIHRocm93IG5ldyBFeGNlcHRpb24oIlN1YnNhbXBsaW5nIGxldmVsIG5vdCBzZXQiKTsKKyAgICBpZiAoc3JjQnVmID09IG51bGwpCisgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKE5PX0FTU09DX0VSUk9SKTsKKyAgICBpZiAoc3Vic2FtcCA8IDApCisgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJTdWJzYW1wbGluZyBsZXZlbCBub3Qgc2V0Iik7CiAgICAgZW5jb2RlWVVWKHNyY0J1Ziwgc3JjV2lkdGgsIHNyY1BpdGNoLCBzcmNIZWlnaHQsCi0gICAgICBzcmNQaXhlbEZvcm1hdCwgZHN0QnVmLCBzdWJzYW1wLCBmbGFncyk7CisgICAgICAgICAgICAgIHNyY1BpeGVsRm9ybWF0LCBkc3RCdWYsIHN1YnNhbXAsIGZsYWdzKTsKICAgICBjb21wcmVzc2VkU2l6ZSA9IFRKLmJ1ZlNpemVZVVYoc3JjV2lkdGgsIHNyY0hlaWdodCwgc3Vic2FtcCk7CiAgIH0KIApAQCAtMjk1LDE0ICszNjksMTYgQEAKICAgICogaW5zdGFuY2UgYW5kIHJldHVybiBhIGJ1ZmZlciBjb250YWluaW5nIGEgWVVWIHBsYW5hciBpbWFnZS4gIFNlZQogICAgKiB7QGxpbmsgI2VuY29kZVlVVihieXRlW10sIGludCl9IGZvciBtb3JlIGRldGFpbC4KICAgICoKLSAgICogQHBhcmFtIGZsYWdzIHRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mIHtAbGluayBUSiBUSi5GTEFHXyp9CisgICAqIEBwYXJhbSBmbGFncyB0aGUgYml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZgorICAgKiB7QGxpbmsgVEojRkxBR19CT1RUT01VUCBUSi5GTEFHXyp9CiAgICAqCiAgICAqIEByZXR1cm4gYSBidWZmZXIgY29udGFpbmluZyBhIFlVViBwbGFuYXIgaW1hZ2UKICAgICovCiAgIHB1YmxpYyBieXRlW10gZW5jb2RlWVVWKGludCBmbGFncykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgaWYoc3JjV2lkdGggPCAxIHx8IHNyY0hlaWdodCA8IDEpCisgICAgaWYgKHNyY1dpZHRoIDwgMSB8fCBzcmNIZWlnaHQgPCAxKQogICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihOT19BU1NPQ19FUlJPUik7Ci0gICAgaWYoc3Vic2FtcCA8IDApIHRocm93IG5ldyBFeGNlcHRpb24oIlN1YnNhbXBsaW5nIGxldmVsIG5vdCBzZXQiKTsKKyAgICBpZiAoc3Vic2FtcCA8IDApCisgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJTdWJzYW1wbGluZyBsZXZlbCBub3Qgc2V0Iik7CiAgICAgYnl0ZVtdIGJ1ZiA9IG5ldyBieXRlW1RKLmJ1ZlNpemVZVVYoc3JjV2lkdGgsIHNyY0hlaWdodCwgc3Vic2FtcCldOwogICAgIGVuY29kZVlVVihidWYsIGZsYWdzKTsKICAgICByZXR1cm4gYnVmOwpAQCAtMzIwLDE2ICszOTYsMTcgQEAKICAgICoge0BsaW5rIFRKI2J1ZlNpemVZVVZ9IHRvIGRldGVybWluZSB0aGUgYXBwcm9wcmlhdGUgc2l6ZSBmb3IgdGhpcyBidWZmZXIKICAgICogYmFzZWQgb24gdGhlIGltYWdlIHdpZHRoLCBoZWlnaHQsIGFuZCBsZXZlbCBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZy4KICAgICoKLSAgICogQHBhcmFtIGZsYWdzIHRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mIHtAbGluayBUSiBUSi5GTEFHXyp9CisgICAqIEBwYXJhbSBmbGFncyB0aGUgYml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZgorICAgKiB7QGxpbmsgVEojRkxBR19CT1RUT01VUCBUSi5GTEFHXyp9CiAgICAqLwogICBwdWJsaWMgdm9pZCBlbmNvZGVZVVYoQnVmZmVyZWRJbWFnZSBzcmNJbWFnZSwgYnl0ZVtdIGRzdEJ1ZiwgaW50IGZsYWdzKQogICAgIHRocm93cyBFeGNlcHRpb24gewotICAgIGlmKHNyY0ltYWdlID09IG51bGwgfHwgZHN0QnVmID09IG51bGwgfHwgZmxhZ3MgPCAwKQorICAgIGlmIChzcmNJbWFnZSA9PSBudWxsIHx8IGRzdEJ1ZiA9PSBudWxsIHx8IGZsYWdzIDwgMCkKICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkludmFsaWQgYXJndW1lbnQgaW4gZW5jb2RlWVVWKCkiKTsKICAgICBpbnQgd2lkdGggPSBzcmNJbWFnZS5nZXRXaWR0aCgpOwogICAgIGludCBoZWlnaHQgPSBzcmNJbWFnZS5nZXRIZWlnaHQoKTsKICAgICBpbnQgcGl4ZWxGb3JtYXQ7ICBib29sZWFuIGludFBpeGVscyA9IGZhbHNlOwotICAgIGlmKGJ5dGVPcmRlciA9PSBudWxsKQorICAgIGlmIChieXRlT3JkZXIgPT0gbnVsbCkKICAgICAgIGJ5dGVPcmRlciA9IEJ5dGVPcmRlci5uYXRpdmVPcmRlcigpOwogICAgIHN3aXRjaChzcmNJbWFnZS5nZXRUeXBlKCkpIHsKICAgICAgIGNhc2UgQnVmZmVyZWRJbWFnZS5UWVBFXzNCWVRFX0JHUjoKQEAgLTM0MCw3ICs0MTcsNyBAQAogICAgICAgY2FzZSBCdWZmZXJlZEltYWdlLlRZUEVfQllURV9HUkFZOgogICAgICAgICBwaXhlbEZvcm1hdCA9IFRKLlBGX0dSQVk7ICBicmVhazsKICAgICAgIGNhc2UgQnVmZmVyZWRJbWFnZS5UWVBFX0lOVF9CR1I6Ci0gICAgICAgIGlmKGJ5dGVPcmRlciA9PSBCeXRlT3JkZXIuQklHX0VORElBTikKKyAgICAgICAgaWYgKGJ5dGVPcmRlciA9PSBCeXRlT3JkZXIuQklHX0VORElBTikKICAgICAgICAgICBwaXhlbEZvcm1hdCA9IFRKLlBGX1hCR1I7CiAgICAgICAgIGVsc2UKICAgICAgICAgICBwaXhlbEZvcm1hdCA9IFRKLlBGX1JHQlg7CkBAIC0zNDgsNyArNDI1LDcgQEAKICAgICAgIGNhc2UgQnVmZmVyZWRJbWFnZS5UWVBFX0lOVF9SR0I6CiAgICAgICBjYXNlIEJ1ZmZlcmVkSW1hZ2UuVFlQRV9JTlRfQVJHQjoKICAgICAgIGNhc2UgQnVmZmVyZWRJbWFnZS5UWVBFX0lOVF9BUkdCX1BSRToKLSAgICAgICAgaWYoYnl0ZU9yZGVyID09IEJ5dGVPcmRlci5CSUdfRU5ESUFOKQorICAgICAgICBpZiAoYnl0ZU9yZGVyID09IEJ5dGVPcmRlci5CSUdfRU5ESUFOKQogICAgICAgICAgIHBpeGVsRm9ybWF0ID0gVEouUEZfWFJHQjsKICAgICAgICAgZWxzZQogICAgICAgICAgIHBpeGVsRm9ybWF0ID0gVEouUEZfQkdSWDsKQEAgLTM1NywyNyArNDM0LDI2IEBACiAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlVuc3VwcG9ydGVkIEJ1ZmZlcmVkSW1hZ2UgZm9ybWF0Iik7CiAgICAgfQogICAgIFdyaXRhYmxlUmFzdGVyIHdyID0gc3JjSW1hZ2UuZ2V0UmFzdGVyKCk7Ci0gICAgaWYoc3Vic2FtcCA8IDApIHRocm93IG5ldyBFeGNlcHRpb24oIlN1YnNhbXBsaW5nIGxldmVsIG5vdCBzZXQiKTsKLSAgICBpZihpbnRQaXhlbHMpIHsKKyAgICBpZiAoc3Vic2FtcCA8IDApIHRocm93IG5ldyBFeGNlcHRpb24oIlN1YnNhbXBsaW5nIGxldmVsIG5vdCBzZXQiKTsKKyAgICBpZiAoaW50UGl4ZWxzKSB7CiAgICAgICBTaW5nbGVQaXhlbFBhY2tlZFNhbXBsZU1vZGVsIHNtID0KICAgICAgICAgKFNpbmdsZVBpeGVsUGFja2VkU2FtcGxlTW9kZWwpc3JjSW1hZ2UuZ2V0U2FtcGxlTW9kZWwoKTsKLSAgICAgIGludCBwaXRjaCA9IHNtLmdldFNjYW5saW5lU3RyaWRlKCk7CisgICAgICBpbnQgc3RyaWRlID0gc20uZ2V0U2NhbmxpbmVTdHJpZGUoKTsKICAgICAgIERhdGFCdWZmZXJJbnQgZGIgPSAoRGF0YUJ1ZmZlckludCl3ci5nZXREYXRhQnVmZmVyKCk7CiAgICAgICBpbnRbXSBidWYgPSBkYi5nZXREYXRhKCk7Ci0gICAgICBlbmNvZGVZVVYoYnVmLCB3aWR0aCwgcGl0Y2gsIGhlaWdodCwgcGl4ZWxGb3JtYXQsIGRzdEJ1Ziwgc3Vic2FtcCwKLSAgICAgICAgZmxhZ3MpOwotICAgIH0KLSAgICBlbHNlIHsKKyAgICAgIGVuY29kZVlVVihidWYsIHdpZHRoLCBzdHJpZGUsIGhlaWdodCwgcGl4ZWxGb3JtYXQsIGRzdEJ1Ziwgc3Vic2FtcCwKKyAgICAgICAgICAgICAgICBmbGFncyk7CisgICAgfSBlbHNlIHsKICAgICAgIENvbXBvbmVudFNhbXBsZU1vZGVsIHNtID0KICAgICAgICAgKENvbXBvbmVudFNhbXBsZU1vZGVsKXNyY0ltYWdlLmdldFNhbXBsZU1vZGVsKCk7CiAgICAgICBpbnQgcGl4ZWxTaXplID0gc20uZ2V0UGl4ZWxTdHJpZGUoKTsKLSAgICAgIGlmKHBpeGVsU2l6ZSAhPSBUSi5nZXRQaXhlbFNpemUocGl4ZWxGb3JtYXQpKQorICAgICAgaWYgKHBpeGVsU2l6ZSAhPSBUSi5nZXRQaXhlbFNpemUocGl4ZWxGb3JtYXQpKQogICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJJbmNvbnNpc3RlbmN5IGJldHdlZW4gcGl4ZWwgZm9ybWF0IGFuZCBwaXhlbCBzaXplIGluIEJ1ZmZlcmVkSW1hZ2UiKTsKICAgICAgIGludCBwaXRjaCA9IHNtLmdldFNjYW5saW5lU3RyaWRlKCk7CiAgICAgICBEYXRhQnVmZmVyQnl0ZSBkYiA9IChEYXRhQnVmZmVyQnl0ZSl3ci5nZXREYXRhQnVmZmVyKCk7CiAgICAgICBieXRlW10gYnVmID0gZGIuZ2V0RGF0YSgpOwogICAgICAgZW5jb2RlWVVWKGJ1Ziwgd2lkdGgsIHBpdGNoLCBoZWlnaHQsIHBpeGVsRm9ybWF0LCBkc3RCdWYsIHN1YnNhbXAsCi0gICAgICAgIGZsYWdzKTsKKyAgICAgICAgICAgICAgICBmbGFncyk7CiAgICAgfQogICAgIGNvbXByZXNzZWRTaXplID0gVEouYnVmU2l6ZVlVVih3aWR0aCwgaGVpZ2h0LCBzdWJzYW1wKTsKICAgfQpAQCAtMzkwLDEzICs0NjYsMTQgQEAKICAgICogQHBhcmFtIHNyY0ltYWdlIGEgPGNvZGU+QnVmZmVyZWRJbWFnZTwvY29kZT4gaW5zdGFuY2UgY29udGFpbmluZyBSR0Igb3IKICAgICogZ3JheXNjYWxlIHBpeGVscyB0byBiZSBlbmNvZGVkCiAgICAqCi0gICAqIEBwYXJhbSBmbGFncyB0aGUgYml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZiB7QGxpbmsgVEogVEouRkxBR18qfQorICAgKiBAcGFyYW0gZmxhZ3MgdGhlIGJpdHdpc2UgT1Igb2Ygb25lIG9yIG1vcmUgb2YKKyAgICoge0BsaW5rIFRKI0ZMQUdfQk9UVE9NVVAgVEouRkxBR18qfQogICAgKgogICAgKiBAcmV0dXJuIGEgYnVmZmVyIGNvbnRhaW5pbmcgYSBZVVYgcGxhbmFyIGltYWdlCiAgICAqLwotICBwdWJsaWMgYnl0ZVtdIGVuY29kZVlVVihCdWZmZXJlZEltYWdlIHNyY0ltYWdlLCBpbnQgZmxhZ3MpCi0gICAgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgaWYoc3Vic2FtcCA8IDApIHRocm93IG5ldyBFeGNlcHRpb24oIlN1YnNhbXBsaW5nIGxldmVsIG5vdCBzZXQiKTsKKyAgcHVibGljIGJ5dGVbXSBlbmNvZGVZVVYoQnVmZmVyZWRJbWFnZSBzcmNJbWFnZSwgaW50IGZsYWdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBpZiAoc3Vic2FtcCA8IDApCisgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJTdWJzYW1wbGluZyBsZXZlbCBub3Qgc2V0Iik7CiAgICAgaW50IHdpZHRoID0gc3JjSW1hZ2UuZ2V0V2lkdGgoKTsKICAgICBpbnQgaGVpZ2h0ID0gc3JjSW1hZ2UuZ2V0SGVpZ2h0KCk7CiAgICAgYnl0ZVtdIGJ1ZiA9IG5ldyBieXRlW1RKLmJ1ZlNpemVZVVYod2lkdGgsIGhlaWdodCwgc3Vic2FtcCldOwpAQCAtNDE5LDE1ICs0OTYsMTUgQEAKICAgICogRnJlZSB0aGUgbmF0aXZlIHN0cnVjdHVyZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29tcHJlc3NvciBpbnN0YW5jZS4KICAgICovCiAgIHB1YmxpYyB2b2lkIGNsb3NlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgZGVzdHJveSgpOworICAgIGlmIChoYW5kbGUgIT0gMCkKKyAgICAgIGRlc3Ryb3koKTsKICAgfQogCiAgIHByb3RlY3RlZCB2b2lkIGZpbmFsaXplKCkgdGhyb3dzIFRocm93YWJsZSB7CiAgICAgdHJ5IHsKICAgICAgIGNsb3NlKCk7Ci0gICAgfQotICAgIGNhdGNoKEV4Y2VwdGlvbiBlKSB7fQotICAgIGZpbmFsbHkgeworICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICB9IGZpbmFsbHkgewogICAgICAgc3VwZXIuZmluYWxpemUoKTsKICAgICB9CiAgIH07CkBAIC00MzgsMTkgKzUxNSwyNyBAQAogCiAgIC8vIEpQRUcgc2l6ZSBpbiBieXRlcyBpcyByZXR1cm5lZAogICBwcml2YXRlIG5hdGl2ZSBpbnQgY29tcHJlc3MoYnl0ZVtdIHNyY0J1ZiwgaW50IHdpZHRoLCBpbnQgcGl0Y2gsCi0gICAgaW50IGhlaWdodCwgaW50IHBpeGVsRm9ybWF0LCBieXRlW10gZHN0YnVmLCBpbnQganBlZ1N1YnNhbXAsIGludCBqcGVnUXVhbCwKLSAgICBpbnQgZmxhZ3MpIHRocm93cyBFeGNlcHRpb247CisgICAgaW50IGhlaWdodCwgaW50IHBpeGVsRm9ybWF0LCBieXRlW10gZHN0QnVmLCBpbnQganBlZ1N1YnNhbXAsIGludCBqcGVnUXVhbCwKKyAgICBpbnQgZmxhZ3MpIHRocm93cyBFeGNlcHRpb247IC8vIGRlcHJlY2F0ZWQKIAotICBwcml2YXRlIG5hdGl2ZSBpbnQgY29tcHJlc3MoaW50W10gc3JjQnVmLCBpbnQgd2lkdGgsIGludCBwaXRjaCwKLSAgICBpbnQgaGVpZ2h0LCBpbnQgcGl4ZWxGb3JtYXQsIGJ5dGVbXSBkc3RidWYsIGludCBqcGVnU3Vic2FtcCwgaW50IGpwZWdRdWFsLAotICAgIGludCBmbGFncykgdGhyb3dzIEV4Y2VwdGlvbjsKKyAgcHJpdmF0ZSBuYXRpdmUgaW50IGNvbXByZXNzKGJ5dGVbXSBzcmNCdWYsIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLAorICAgIGludCBwaXRjaCwgaW50IGhlaWdodCwgaW50IHBpeGVsRm9ybWF0LCBieXRlW10gZHN0QnVmLCBpbnQganBlZ1N1YnNhbXAsCisgICAgaW50IGpwZWdRdWFsLCBpbnQgZmxhZ3MpIHRocm93cyBFeGNlcHRpb247CisKKyAgcHJpdmF0ZSBuYXRpdmUgaW50IGNvbXByZXNzKGludFtdIHNyY0J1ZiwgaW50IHdpZHRoLCBpbnQgc3RyaWRlLAorICAgIGludCBoZWlnaHQsIGludCBwaXhlbEZvcm1hdCwgYnl0ZVtdIGRzdEJ1ZiwgaW50IGpwZWdTdWJzYW1wLCBpbnQganBlZ1F1YWwsCisgICAgaW50IGZsYWdzKSB0aHJvd3MgRXhjZXB0aW9uOyAvLyBkZXByZWNhdGVkCisKKyAgcHJpdmF0ZSBuYXRpdmUgaW50IGNvbXByZXNzKGludFtdIHNyY0J1ZiwgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsCisgICAgaW50IHN0cmlkZSwgaW50IGhlaWdodCwgaW50IHBpeGVsRm9ybWF0LCBieXRlW10gZHN0QnVmLCBpbnQganBlZ1N1YnNhbXAsCisgICAgaW50IGpwZWdRdWFsLCBpbnQgZmxhZ3MpIHRocm93cyBFeGNlcHRpb247CiAKICAgcHJpdmF0ZSBuYXRpdmUgdm9pZCBlbmNvZGVZVVYoYnl0ZVtdIHNyY0J1ZiwgaW50IHdpZHRoLCBpbnQgcGl0Y2gsCi0gICAgaW50IGhlaWdodCwgaW50IHBpeGVsRm9ybWF0LCBieXRlW10gZHN0YnVmLCBpbnQgc3Vic2FtcCwgaW50IGZsYWdzKQorICAgIGludCBoZWlnaHQsIGludCBwaXhlbEZvcm1hdCwgYnl0ZVtdIGRzdEJ1ZiwgaW50IHN1YnNhbXAsIGludCBmbGFncykKICAgICB0aHJvd3MgRXhjZXB0aW9uOwogCi0gIHByaXZhdGUgbmF0aXZlIHZvaWQgZW5jb2RlWVVWKGludFtdIHNyY0J1ZiwgaW50IHdpZHRoLCBpbnQgcGl0Y2gsCi0gICAgaW50IGhlaWdodCwgaW50IHBpeGVsRm9ybWF0LCBieXRlW10gZHN0YnVmLCBpbnQgc3Vic2FtcCwgaW50IGZsYWdzKQorICBwcml2YXRlIG5hdGl2ZSB2b2lkIGVuY29kZVlVVihpbnRbXSBzcmNCdWYsIGludCB3aWR0aCwgaW50IHN0cmlkZSwKKyAgICBpbnQgaGVpZ2h0LCBpbnQgcGl4ZWxGb3JtYXQsIGJ5dGVbXSBkc3RCdWYsIGludCBzdWJzYW1wLCBpbnQgZmxhZ3MpCiAgICAgdGhyb3dzIEV4Y2VwdGlvbjsKIAogICBzdGF0aWMgewpAQCAtNDYxLDYgKzU0Niw4IEBACiAgIHByaXZhdGUgYnl0ZVtdIHNyY0J1ZiA9IG51bGw7CiAgIHByaXZhdGUgaW50IHNyY1dpZHRoID0gMDsKICAgcHJpdmF0ZSBpbnQgc3JjSGVpZ2h0ID0gMDsKKyAgcHJpdmF0ZSBpbnQgc3JjWCA9IC0xOworICBwcml2YXRlIGludCBzcmNZID0gLTE7CiAgIHByaXZhdGUgaW50IHNyY1BpdGNoID0gMDsKICAgcHJpdmF0ZSBpbnQgc3JjUGl4ZWxGb3JtYXQgPSAtMTsKICAgcHJpdmF0ZSBpbnQgc3Vic2FtcCA9IC0xOwpkaWZmIC0tZ2l0IGEvamF2YS9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkN1c3RvbUZpbHRlci5qYXZhIGIvamF2YS9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkN1c3RvbUZpbHRlci5qYXZhCmluZGV4IDcxMTIyNWIuLmJmNzhmMmUgMTAwNjQ0Ci0tLSBhL2phdmEvb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpDdXN0b21GaWx0ZXIuamF2YQorKysgYi9qYXZhL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKQ3VzdG9tRmlsdGVyLmphdmEKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKTIwMTEgRC4gUi4gQ29tbWFuZGVyLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykyMDExLCAyMDEzIEQuIFIuIENvbW1hbmRlci4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKQEAgLTM5LDcgKzM5LDcgQEAKICAgLyoqCiAgICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB0byBtb2RpZnkgdGhlIERDVCBjb2VmZmljaWVudHMgYWZ0ZXIKICAgICogdGhleSBhcmUgbG9zc2xlc3NseSB0cmFuc2Zvcm1lZCBidXQgYmVmb3JlIHRoZXkgYXJlIHRyYW5zY29kZWQgdG8gYSBuZXcKLSAgICogSlBFRyBmaWxlLiAgVGhpcyBhbGxvd3MgZm9yIGN1c3RvbSBmaWx0ZXJzIG9yIG90aGVyIHRyYW5zZm9ybWF0aW9ucyB0byBiZQorICAgKiBKUEVHIGltYWdlLiAgVGhpcyBhbGxvd3MgZm9yIGN1c3RvbSBmaWx0ZXJzIG9yIG90aGVyIHRyYW5zZm9ybWF0aW9ucyB0byBiZQogICAgKiBhcHBsaWVkIGluIHRoZSBmcmVxdWVuY3kgZG9tYWluLgogICAgKgogICAgKiBAcGFyYW0gY29lZmZCdWZmZXIgYSBidWZmZXIgY29udGFpbmluZyB0cmFuc2Zvcm1lZCBEQ1QgY29lZmZpY2llbnRzLgpAQCAtNTgsMTkgKzU4LDE5IEBACiAgICAqIGNvbXBvbmVudCBwbGFuZSB0byB3aGljaCA8Y29kZT5jb2VmZkJ1ZmZlcjwvY29kZT4gYmVsb25ncwogICAgKgogICAgKiBAcGFyYW0gY29tcG9uZW50SUQgSUQgbnVtYmVyIG9mIHRoZSBjb21wb25lbnQgcGxhbmUgdG8gd2hpY2gKLSAgICogPGNvZGU+Y29lZmZCdWZmZXI8L2NvZGU+YmVsb25ncyAoWSwgQ2IsIGFuZCBDciBoYXZlLCByZXNwZWN0aXZlbHksIElEJ3Mgb2YKLSAgICogMCwgMSwgYW5kIDIgaW4gdHlwaWNhbCBKUEVHIGltYWdlcy4pCisgICAqIDxjb2RlPmNvZWZmQnVmZmVyPC9jb2RlPiBiZWxvbmdzIChZLCBDYiwgYW5kIENyIGhhdmUsIHJlc3BlY3RpdmVseSwgSUQncworICAgKiBvZiAwLCAxLCBhbmQgMiBpbiB0eXBpY2FsIEpQRUcgaW1hZ2VzLikKICAgICoKICAgICogQHBhcmFtIHRyYW5zZm9ybUlEIElEIG51bWJlciBvZiB0aGUgdHJhbnNmb3JtZWQgaW1hZ2UgdG8gd2hpY2gKICAgICogPGNvZGU+Y29lZmZCdWZmZXI8L2NvZGU+IGJlbG9uZ3MuICBUaGlzIGlzIHRoZSBzYW1lIGFzIHRoZSBpbmRleCBvZiB0aGUKLSAgICogdHJhbnNmb3JtIGluIHRoZSB0cmFuc2Zvcm1zIGFycmF5IHRoYXQgd2FzIHBhc3NlZCB0byB7QGxpbmsKKyAgICogdHJhbnNmb3JtIGluIHRoZSA8Y29kZT50cmFuc2Zvcm1zPC9jb2RlPiBhcnJheSB0aGF0IHdhcyBwYXNzZWQgdG8ge0BsaW5rCiAgICAqIFRKVHJhbnNmb3JtZXIjdHJhbnNmb3JtIFRKVHJhbnNmb3JtZXIudHJhbnNmb3JtKCl9LgogICAgKgogICAgKiBAcGFyYW0gdHJhbnNmb3JtIGEge0BsaW5rIFRKVHJhbnNmb3JtfSBpbnN0YW5jZSB0aGF0IHNwZWNpZmllcyB0aGUKICAgICogcGFyYW1ldGVycyBhbmQvb3IgY3JvcHBpbmcgcmVnaW9uIGZvciB0aGlzIHRyYW5zZm9ybQogICAgKi8KLSAgcHVibGljIHZvaWQgY3VzdG9tRmlsdGVyKFNob3J0QnVmZmVyIGNvZWZmQnVmZmVyLCBSZWN0YW5nbGUgYnVmZmVyUmVnaW9uLAotICAgIFJlY3RhbmdsZSBwbGFuZVJlZ2lvbiwgaW50IGNvbXBvbmVudElELCBpbnQgdHJhbnNmb3JtSUQsCi0gICAgVEpUcmFuc2Zvcm0gdHJhbnNmb3JtKQorICB2b2lkIGN1c3RvbUZpbHRlcihTaG9ydEJ1ZmZlciBjb2VmZkJ1ZmZlciwgUmVjdGFuZ2xlIGJ1ZmZlclJlZ2lvbiwKKyAgICAgICAgICAgICAgICAgICAgUmVjdGFuZ2xlIHBsYW5lUmVnaW9uLCBpbnQgY29tcG9uZW50SUQsIGludCB0cmFuc2Zvcm1JRCwKKyAgICAgICAgICAgICAgICAgICAgVEpUcmFuc2Zvcm0gdHJhbnNmb3JtKQogICAgIHRocm93cyBFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9qYXZhL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmphdmEgYi9qYXZhL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKRGVjb21wcmVzc29yLmphdmEKaW5kZXggZGU2Y2FjYy4uOGI5OGRjZiAxMDA2NDQKLS0tIGEvamF2YS9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkRlY29tcHJlc3Nvci5qYXZhCisrKyBiL2phdmEvb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpEZWNvbXByZXNzb3IuamF2YQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpMjAxMSBELiBSLiBDb21tYW5kZXIuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKTIwMTEtMjAxNCBELiBSLiBDb21tYW5kZXIuICBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CkBAIC0zNiw3ICszNiw3IEBACiAgKi8KIHB1YmxpYyBjbGFzcyBUSkRlY29tcHJlc3NvciB7CiAKLSAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIE5PX0FTU09DX0VSUk9SID0KKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE5PX0FTU09DX0VSUk9SID0KICAgICAiTm8gSlBFRyBpbWFnZSBpcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBpbnN0YW5jZSI7CiAKICAgLyoqCkBAIC00OCw3ICs0OCw3IEBACiAKICAgLyoqCiAgICAqIENyZWF0ZSBhIFR1cmJvSlBFRyBkZWNvbXByZXNzb3IgaW5zdGFuY2UgYW5kIGFzc29jaWF0ZSB0aGUgSlBFRyBpbWFnZQotICAgKiBzdG9yZWQgaW4gPGNvZGU+anBlZ0ltYWdlPC9jb2RlPiB3aXRoIHRoZSBuZXdseS1jcmVhdGVkIGluc3RhbmNlLgorICAgKiBzdG9yZWQgaW4gPGNvZGU+anBlZ0ltYWdlPC9jb2RlPiB3aXRoIHRoZSBuZXdseSBjcmVhdGVkIGluc3RhbmNlLgogICAgKgogICAgKiBAcGFyYW0ganBlZ0ltYWdlIEpQRUcgaW1hZ2UgYnVmZmVyIChzaXplIG9mIHRoZSBKUEVHIGltYWdlIGlzIGFzc3VtZWQgdG8KICAgICogYmUgdGhlIGxlbmd0aCBvZiB0aGUgYXJyYXkpCkBAIC02MSw3ICs2MSw3IEBACiAgIC8qKgogICAgKiBDcmVhdGUgYSBUdXJib0pQRUcgZGVjb21wcmVzc29yIGluc3RhbmNlIGFuZCBhc3NvY2lhdGUgdGhlIEpQRUcgaW1hZ2UKICAgICogb2YgbGVuZ3RoIDxjb2RlPmltYWdlU2l6ZTwvY29kZT4gYnl0ZXMgc3RvcmVkIGluIDxjb2RlPmpwZWdJbWFnZTwvY29kZT4KLSAgICogd2l0aCB0aGUgbmV3bHktY3JlYXRlZCBpbnN0YW5jZS4KKyAgICogd2l0aCB0aGUgbmV3bHkgY3JlYXRlZCBpbnN0YW5jZS4KICAgICoKICAgICogQHBhcmFtIGpwZWdJbWFnZSBKUEVHIGltYWdlIGJ1ZmZlcgogICAgKgpAQCAtODIsNyArODIsNyBAQAogICAgKiBAcGFyYW0gaW1hZ2VTaXplIHNpemUgb2YgdGhlIEpQRUcgaW1hZ2UgKGluIGJ5dGVzKQogICAgKi8KICAgcHVibGljIHZvaWQgc2V0SlBFR0ltYWdlKGJ5dGVbXSBqcGVnSW1hZ2UsIGludCBpbWFnZVNpemUpIHRocm93cyBFeGNlcHRpb24gewotICAgIGlmKGpwZWdJbWFnZSA9PSBudWxsIHx8IGltYWdlU2l6ZSA8IDEpCisgICAgaWYgKGpwZWdJbWFnZSA9PSBudWxsIHx8IGltYWdlU2l6ZSA8IDEpCiAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJJbnZhbGlkIGFyZ3VtZW50IGluIHNldEpQRUdJbWFnZSgpIik7CiAgICAganBlZ0J1ZiA9IGpwZWdJbWFnZTsKICAgICBqcGVnQnVmU2l6ZSA9IGltYWdlU2l6ZTsKQEAgLTk3LDcgKzk3LDggQEAKICAgICogaW5zdGFuY2UKICAgICovCiAgIHB1YmxpYyBpbnQgZ2V0V2lkdGgoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBpZihqcGVnV2lkdGggPCAxKSB0aHJvdyBuZXcgRXhjZXB0aW9uKE5PX0FTU09DX0VSUk9SKTsKKyAgICBpZiAoanBlZ1dpZHRoIDwgMSkKKyAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oTk9fQVNTT0NfRVJST1IpOwogICAgIHJldHVybiBqcGVnV2lkdGg7CiAgIH0KIApAQCAtMTA5LDIwICsxMTAsMjIgQEAKICAgICogaW5zdGFuY2UKICAgICovCiAgIHB1YmxpYyBpbnQgZ2V0SGVpZ2h0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgaWYoanBlZ0hlaWdodCA8IDEpIHRocm93IG5ldyBFeGNlcHRpb24oTk9fQVNTT0NfRVJST1IpOworICAgIGlmIChqcGVnSGVpZ2h0IDwgMSkKKyAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oTk9fQVNTT0NfRVJST1IpOwogICAgIHJldHVybiBqcGVnSGVpZ2h0OwogICB9CiAKICAgLyoqCiAgICAqIFJldHVybnMgdGhlIGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nIHVzZWQgaW4gdGhlIEpQRUcgaW1hZ2UKLSAgICogYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGVjb21wcmVzc29yIGluc3RhbmNlLgorICAgKiBhc3NvY2lhdGVkIHdpdGggdGhpcyBkZWNvbXByZXNzb3IgaW5zdGFuY2UuICBTZWUge0BsaW5rIFRKIFRKLlNBTVBfKn0uCiAgICAqCiAgICAqIEByZXR1cm4gdGhlIGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nIHVzZWQgaW4gdGhlIEpQRUcgaW1hZ2UKICAgICogYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGVjb21wcmVzc29yIGluc3RhbmNlCiAgICAqLwogICBwdWJsaWMgaW50IGdldFN1YnNhbXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBpZihqcGVnU3Vic2FtcCA8IDApIHRocm93IG5ldyBFeGNlcHRpb24oTk9fQVNTT0NfRVJST1IpOwotICAgIGlmKGpwZWdTdWJzYW1wID49IFRKLk5VTVNBTVApCisgICAgaWYgKGpwZWdTdWJzYW1wIDwgMCkKKyAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oTk9fQVNTT0NfRVJST1IpOworICAgIGlmIChqcGVnU3Vic2FtcCA+PSBUSi5OVU1TQU1QKQogICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiSlBFRyBoZWFkZXIgaW5mb3JtYXRpb24gaXMgaW52YWxpZCIpOwogICAgIHJldHVybiBqcGVnU3Vic2FtcDsKICAgfQpAQCAtMTMzLDcgKzEzNiw4IEBACiAgICAqIEByZXR1cm4gdGhlIEpQRUcgaW1hZ2UgYnVmZmVyIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRlY29tcHJlc3NvciBpbnN0YW5jZQogICAgKi8KICAgcHVibGljIGJ5dGVbXSBnZXRKUEVHQnVmKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgaWYoanBlZ0J1ZiA9PSBudWxsKSB0aHJvdyBuZXcgRXhjZXB0aW9uKE5PX0FTU09DX0VSUk9SKTsKKyAgICBpZiAoanBlZ0J1ZiA9PSBudWxsKQorICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihOT19BU1NPQ19FUlJPUik7CiAgICAgcmV0dXJuIGpwZWdCdWY7CiAgIH0KIApAQCAtMTQ1LDEzICsxNDksMTMgQEAKICAgICogZGVjb21wcmVzc29yIGluc3RhbmNlCiAgICAqLwogICBwdWJsaWMgaW50IGdldEpQRUdTaXplKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgaWYoanBlZ0J1ZlNpemUgPCAxKSB0aHJvdyBuZXcgRXhjZXB0aW9uKE5PX0FTU09DX0VSUk9SKTsKKyAgICBpZiAoanBlZ0J1ZlNpemUgPCAxKQorICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihOT19BU1NPQ19FUlJPUik7CiAgICAgcmV0dXJuIGpwZWdCdWZTaXplOwogICB9CiAKLQogICAvKioKLSAgICogUmV0dXJucyB0aGUgd2lkdGggb2YgdGhlIGxhcmdlc3Qgc2NhbGVkIGRvd24gaW1hZ2UgdGhhdCB0aGUgVHVyYm9KUEVHCisgICAqIFJldHVybnMgdGhlIHdpZHRoIG9mIHRoZSBsYXJnZXN0IHNjYWxlZC1kb3duIGltYWdlIHRoYXQgdGhlIFR1cmJvSlBFRwogICAgKiBkZWNvbXByZXNzb3IgY2FuIGdlbmVyYXRlIHdpdGhvdXQgZXhjZWVkaW5nIHRoZSBkZXNpcmVkIGltYWdlIHdpZHRoIGFuZAogICAgKiBoZWlnaHQuCiAgICAqCkBAIC0xNjUsMzMgKzE2OSwzNSBAQAogICAgKiBpbWFnZSAoaW4gb3RoZXIgd29yZHMsIHRoZSBoZWlnaHQgd2lsbCBub3QgYmUgY29uc2lkZXJlZCB3aGVuIGRldGVybWluaW5nCiAgICAqIHRoZSBzY2FsZWQgaW1hZ2Ugc2l6ZS4pCiAgICAqCi0gICAqIEByZXR1cm4gdGhlIHdpZHRoIG9mIHRoZSBsYXJnZXN0IHNjYWxlZCBkb3duIGltYWdlIHRoYXQgdGhlIFR1cmJvSlBFRworICAgKiBAcmV0dXJuIHRoZSB3aWR0aCBvZiB0aGUgbGFyZ2VzdCBzY2FsZWQtZG93biBpbWFnZSB0aGF0IHRoZSBUdXJib0pQRUcKICAgICogZGVjb21wcmVzc29yIGNhbiBnZW5lcmF0ZSB3aXRob3V0IGV4Y2VlZGluZyB0aGUgZGVzaXJlZCBpbWFnZSB3aWR0aCBhbmQKICAgICogaGVpZ2h0CiAgICAqLwogICBwdWJsaWMgaW50IGdldFNjYWxlZFdpZHRoKGludCBkZXNpcmVkV2lkdGgsIGludCBkZXNpcmVkSGVpZ2h0KQotICAgIHRocm93cyBFeGNlcHRpb24gewotICAgIGlmKGpwZWdXaWR0aCA8IDEgfHwganBlZ0hlaWdodCA8IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgaWYgKGpwZWdXaWR0aCA8IDEgfHwganBlZ0hlaWdodCA8IDEpCiAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKE5PX0FTU09DX0VSUk9SKTsKLSAgICBpZihkZXNpcmVkV2lkdGggPCAwIHx8IGRlc2lyZWRIZWlnaHQgPCAwKQorICAgIGlmIChkZXNpcmVkV2lkdGggPCAwIHx8IGRlc2lyZWRIZWlnaHQgPCAwKQogICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiSW52YWxpZCBhcmd1bWVudCBpbiBnZXRTY2FsZWRXaWR0aCgpIik7Ci0gICAgVEpTY2FsaW5nRmFjdG9yIHNmW10gPSBUSi5nZXRTY2FsaW5nRmFjdG9ycygpOwotICAgIGlmKGRlc2lyZWRXaWR0aCA9PSAwKSBkZXNpcmVkV2lkdGggPSBqcGVnV2lkdGg7Ci0gICAgaWYoZGVzaXJlZEhlaWdodCA9PSAwKSBkZXNpcmVkSGVpZ2h0ID0ganBlZ0hlaWdodDsKKyAgICBUSlNjYWxpbmdGYWN0b3JbXSBzZiA9IFRKLmdldFNjYWxpbmdGYWN0b3JzKCk7CisgICAgaWYgKGRlc2lyZWRXaWR0aCA9PSAwKQorICAgICAgZGVzaXJlZFdpZHRoID0ganBlZ1dpZHRoOworICAgIGlmIChkZXNpcmVkSGVpZ2h0ID09IDApCisgICAgICBkZXNpcmVkSGVpZ2h0ID0ganBlZ0hlaWdodDsKICAgICBpbnQgc2NhbGVkV2lkdGggPSBqcGVnV2lkdGgsIHNjYWxlZEhlaWdodCA9IGpwZWdIZWlnaHQ7Ci0gICAgZm9yKGludCBpID0gMDsgaSA8IHNmLmxlbmd0aDsgaSsrKSB7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZi5sZW5ndGg7IGkrKykgewogICAgICAgc2NhbGVkV2lkdGggPSBzZltpXS5nZXRTY2FsZWQoanBlZ1dpZHRoKTsKICAgICAgIHNjYWxlZEhlaWdodCA9IHNmW2ldLmdldFNjYWxlZChqcGVnSGVpZ2h0KTsKLSAgICAgIGlmKHNjYWxlZFdpZHRoIDw9IGRlc2lyZWRXaWR0aCAmJiBzY2FsZWRIZWlnaHQgPD0gZGVzaXJlZEhlaWdodCkKKyAgICAgIGlmIChzY2FsZWRXaWR0aCA8PSBkZXNpcmVkV2lkdGggJiYgc2NhbGVkSGVpZ2h0IDw9IGRlc2lyZWRIZWlnaHQpCiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBpZihzY2FsZWRXaWR0aCA+IGRlc2lyZWRXaWR0aCB8fCBzY2FsZWRIZWlnaHQgPiBkZXNpcmVkSGVpZ2h0KQorICAgIGlmIChzY2FsZWRXaWR0aCA+IGRlc2lyZWRXaWR0aCB8fCBzY2FsZWRIZWlnaHQgPiBkZXNpcmVkSGVpZ2h0KQogICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiQ291bGQgbm90IHNjYWxlIGRvd24gdG8gZGVzaXJlZCBpbWFnZSBkaW1lbnNpb25zIik7CiAgICAgcmV0dXJuIHNjYWxlZFdpZHRoOwogICB9CiAKICAgLyoqCi0gICAqIFJldHVybnMgdGhlIGhlaWdodCBvZiB0aGUgbGFyZ2VzdCBzY2FsZWQgZG93biBpbWFnZSB0aGF0IHRoZSBUdXJib0pQRUcKKyAgICogUmV0dXJucyB0aGUgaGVpZ2h0IG9mIHRoZSBsYXJnZXN0IHNjYWxlZC1kb3duIGltYWdlIHRoYXQgdGhlIFR1cmJvSlBFRwogICAgKiBkZWNvbXByZXNzb3IgY2FuIGdlbmVyYXRlIHdpdGhvdXQgZXhjZWVkaW5nIHRoZSBkZXNpcmVkIGltYWdlIHdpZHRoIGFuZAogICAgKiBoZWlnaHQuCiAgICAqCkBAIC0yMDUsMjcgKzIxMSwyOSBAQAogICAgKiBpbWFnZSAoaW4gb3RoZXIgd29yZHMsIHRoZSBoZWlnaHQgd2lsbCBub3QgYmUgY29uc2lkZXJlZCB3aGVuIGRldGVybWluaW5nCiAgICAqIHRoZSBzY2FsZWQgaW1hZ2Ugc2l6ZS4pCiAgICAqCi0gICAqIEByZXR1cm4gdGhlIGhlaWdodCBvZiB0aGUgbGFyZ2VzdCBzY2FsZWQgZG93biBpbWFnZSB0aGF0IHRoZSBUdXJib0pQRUcKKyAgICogQHJldHVybiB0aGUgaGVpZ2h0IG9mIHRoZSBsYXJnZXN0IHNjYWxlZC1kb3duIGltYWdlIHRoYXQgdGhlIFR1cmJvSlBFRwogICAgKiBkZWNvbXByZXNzb3IgY2FuIGdlbmVyYXRlIHdpdGhvdXQgZXhjZWVkaW5nIHRoZSBkZXNpcmVkIGltYWdlIHdpZHRoIGFuZAogICAgKiBoZWlnaHQKICAgICovCiAgIHB1YmxpYyBpbnQgZ2V0U2NhbGVkSGVpZ2h0KGludCBkZXNpcmVkV2lkdGgsIGludCBkZXNpcmVkSGVpZ2h0KQotICAgIHRocm93cyBFeGNlcHRpb24gewotICAgIGlmKGpwZWdXaWR0aCA8IDEgfHwganBlZ0hlaWdodCA8IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBFeGNlcHRpb24geworICAgIGlmIChqcGVnV2lkdGggPCAxIHx8IGpwZWdIZWlnaHQgPCAxKQogICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihOT19BU1NPQ19FUlJPUik7Ci0gICAgaWYoZGVzaXJlZFdpZHRoIDwgMCB8fCBkZXNpcmVkSGVpZ2h0IDwgMCkKKyAgICBpZiAoZGVzaXJlZFdpZHRoIDwgMCB8fCBkZXNpcmVkSGVpZ2h0IDwgMCkKICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkludmFsaWQgYXJndW1lbnQgaW4gZ2V0U2NhbGVkSGVpZ2h0KCkiKTsKLSAgICBUSlNjYWxpbmdGYWN0b3Igc2ZbXSA9IFRKLmdldFNjYWxpbmdGYWN0b3JzKCk7Ci0gICAgaWYoZGVzaXJlZFdpZHRoID09IDApIGRlc2lyZWRXaWR0aCA9IGpwZWdXaWR0aDsKLSAgICBpZihkZXNpcmVkSGVpZ2h0ID09IDApIGRlc2lyZWRIZWlnaHQgPSBqcGVnSGVpZ2h0OworICAgIFRKU2NhbGluZ0ZhY3RvcltdIHNmID0gVEouZ2V0U2NhbGluZ0ZhY3RvcnMoKTsKKyAgICBpZiAoZGVzaXJlZFdpZHRoID09IDApCisgICAgICBkZXNpcmVkV2lkdGggPSBqcGVnV2lkdGg7CisgICAgaWYgKGRlc2lyZWRIZWlnaHQgPT0gMCkKKyAgICAgIGRlc2lyZWRIZWlnaHQgPSBqcGVnSGVpZ2h0OwogICAgIGludCBzY2FsZWRXaWR0aCA9IGpwZWdXaWR0aCwgc2NhbGVkSGVpZ2h0ID0ganBlZ0hlaWdodDsKLSAgICBmb3IoaW50IGkgPSAwOyBpIDwgc2YubGVuZ3RoOyBpKyspIHsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNmLmxlbmd0aDsgaSsrKSB7CiAgICAgICBzY2FsZWRXaWR0aCA9IHNmW2ldLmdldFNjYWxlZChqcGVnV2lkdGgpOwogICAgICAgc2NhbGVkSGVpZ2h0ID0gc2ZbaV0uZ2V0U2NhbGVkKGpwZWdIZWlnaHQpOwotICAgICAgaWYoc2NhbGVkV2lkdGggPD0gZGVzaXJlZFdpZHRoICYmIHNjYWxlZEhlaWdodCA8PSBkZXNpcmVkSGVpZ2h0KQorICAgICAgaWYgKHNjYWxlZFdpZHRoIDw9IGRlc2lyZWRXaWR0aCAmJiBzY2FsZWRIZWlnaHQgPD0gZGVzaXJlZEhlaWdodCkKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGlmKHNjYWxlZFdpZHRoID4gZGVzaXJlZFdpZHRoIHx8IHNjYWxlZEhlaWdodCA+IGRlc2lyZWRIZWlnaHQpCisgICAgaWYgKHNjYWxlZFdpZHRoID4gZGVzaXJlZFdpZHRoIHx8IHNjYWxlZEhlaWdodCA+IGRlc2lyZWRIZWlnaHQpCiAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJDb3VsZCBub3Qgc2NhbGUgZG93biB0byBkZXNpcmVkIGltYWdlIGRpbWVuc2lvbnMiKTsKICAgICByZXR1cm4gc2NhbGVkSGVpZ2h0OwogICB9CkBAIC0yMzksNDcgKzI0Nyw3OCBAQAogICAgKiB3aGVyZSA8Y29kZT5zY2FsZWRIZWlnaHQ8L2NvZGU+IGNhbiBiZSBkZXRlcm1pbmVkIGJ5IGNhbGxpbmcgPGNvZGU+CiAgICAqIHNjYWxpbmdGYWN0b3Iue0BsaW5rIFRKU2NhbGluZ0ZhY3RvciNnZXRTY2FsZWQgZ2V0U2NhbGVkfShqcGVnSGVpZ2h0KQogICAgKiA8L2NvZGU+IHdpdGggb25lIG9mIHRoZSBzY2FsaW5nIGZhY3RvcnMgcmV0dXJuZWQgZnJvbSB7QGxpbmsKLSAgICogVEojZ2V0U2NhbGluZ0ZhY3RvcnN9IG9yIGJ5IGNhbGxpbmcge0BsaW5rICNnZXRTY2FsZWRIZWlnaHR9LgorICAgKiBUSiNnZXRTY2FsaW5nRmFjdG9yc30gb3IgYnkgY2FsbGluZyB7QGxpbmsgI2dldFNjYWxlZEhlaWdodH0uICBIb3dldmVyLAorICAgKiB0aGUgYnVmZmVyIG1heSBhbHNvIGJlIGxhcmdlciB0aGFuIHRoZSBkaW1lbnNpb25zIG9mIHRoZSBKUEVHIGltYWdlLCBpbgorICAgKiB3aGljaCBjYXNlIHRoZSA8Y29kZT54PC9jb2RlPiwgPGNvZGU+eTwvY29kZT4sIGFuZCA8Y29kZT5waXRjaDwvY29kZT4KKyAgICogcGFyYW1ldGVycyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSByZWdpb24gaW50byB3aGljaCB0aGUgSlBFRyBpbWFnZQorICAgKiBzaG91bGQgYmUgZGVjb21wcmVzc2VkLgogICAgKgotICAgKiBAcGFyYW0gZGVzaXJlZFdpZHRoIGRlc2lyZWQgd2lkdGggKGluIHBpeGVscykgb2YgdGhlIGRlY29tcHJlc3NlZCBpbWFnZS4KLSAgICogSWYgdGhlIGRlc2lyZWQgaW1hZ2UgZGltZW5zaW9ucyBhcmUgc21hbGxlciB0aGFuIHRoZSBkaW1lbnNpb25zIG9mIHRoZQotICAgKiBKUEVHIGltYWdlIGJlaW5nIGRlY29tcHJlc3NlZCwgdGhlbiBUdXJib0pQRUcgd2lsbCB1c2Ugc2NhbGluZyBpbiB0aGUgSlBFRwotICAgKiBkZWNvbXByZXNzb3IgdG8gZ2VuZXJhdGUgdGhlIGxhcmdlc3QgcG9zc2libGUgaW1hZ2UgdGhhdCB3aWxsIGZpdCB3aXRoaW4KLSAgICogdGhlIGRlc2lyZWQgZGltZW5zaW9ucy4gIFNldHRpbmcgdGhpcyB0byAwIGlzIHRoZSBzYW1lIGFzIHNldHRpbmcgaXQgdG8KLSAgICogdGhlIHdpZHRoIG9mIHRoZSBKUEVHIGltYWdlIChpbiBvdGhlciB3b3JkcywgdGhlIHdpZHRoIHdpbGwgbm90IGJlCi0gICAqIGNvbnNpZGVyZWQgd2hlbiBkZXRlcm1pbmluZyB0aGUgc2NhbGVkIGltYWdlIHNpemUuKQorICAgKiBAcGFyYW0geCB4IG9mZnNldCAoaW4gcGl4ZWxzKSBvZiB0aGUgcmVnaW9uIGludG8gd2hpY2ggdGhlIEpQRUcgaW1hZ2UKKyAgICogc2hvdWxkIGJlIGRlY29tcHJlc3NlZCwgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIDxjb2RlPmRzdEJ1ZjwvY29kZT4uCisgICAqCisgICAqIEBwYXJhbSB5IHkgb2Zmc2V0IChpbiBwaXhlbHMpIG9mIHRoZSByZWdpb24gaW50byB3aGljaCB0aGUgSlBFRyBpbWFnZQorICAgKiBzaG91bGQgYmUgZGVjb21wcmVzc2VkLCByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgPGNvZGU+ZHN0QnVmPC9jb2RlPi4KKyAgICoKKyAgICogQHBhcmFtIGRlc2lyZWRXaWR0aCBkZXNpcmVkIHdpZHRoIChpbiBwaXhlbHMpIG9mIHRoZSBkZWNvbXByZXNzZWQgaW1hZ2UKKyAgICogKG9yIGltYWdlIHJlZ2lvbi4pICBJZiB0aGUgZGVzaXJlZCBpbWFnZSBkaW1lbnNpb25zIGFyZSBkaWZmZXJlbnQgdGhhbiB0aGUKKyAgICogZGltZW5zaW9ucyBvZiB0aGUgSlBFRyBpbWFnZSBiZWluZyBkZWNvbXByZXNzZWQsIHRoZW4gVHVyYm9KUEVHIHdpbGwgdXNlCisgICAqIHNjYWxpbmcgaW4gdGhlIEpQRUcgZGVjb21wcmVzc29yIHRvIGdlbmVyYXRlIHRoZSBsYXJnZXN0IHBvc3NpYmxlIGltYWdlCisgICAqIHRoYXQgd2lsbCBmaXQgd2l0aGluIHRoZSBkZXNpcmVkIGRpbWVuc2lvbnMuICBTZXR0aW5nIHRoaXMgdG8gMCBpcyB0aGUKKyAgICogc2FtZSBhcyBzZXR0aW5nIGl0IHRvIHRoZSB3aWR0aCBvZiB0aGUgSlBFRyBpbWFnZSAoaW4gb3RoZXIgd29yZHMsIHRoZQorICAgKiB3aWR0aCB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIHdoZW4gZGV0ZXJtaW5pbmcgdGhlIHNjYWxlZCBpbWFnZSBzaXplLikKICAgICoKICAgICogQHBhcmFtIHBpdGNoIGJ5dGVzIHBlciBsaW5lIG9mIHRoZSBkZXN0aW5hdGlvbiBpbWFnZS4gIE5vcm1hbGx5LCB0aGlzCiAgICAqIHNob3VsZCBiZSBzZXQgdG8gPGNvZGU+c2NhbGVkV2lkdGggKiBUSi5waXhlbFNpemUocGl4ZWxGb3JtYXQpPC9jb2RlPiBpZgogICAgKiB0aGUgZGVjb21wcmVzc2VkIGltYWdlIGlzIHVucGFkZGVkLCBidXQgeW91IGNhbiB1c2UgdGhpcyB0bywgZm9yIGluc3RhbmNlLAotICAgKiBwYWQgZWFjaCBsaW5lIG9mIHRoZSBkZWNvbXByZXNzZWQgaW1hZ2UgdG8gYSA0LWJ5dGUgYm91bmRhcnkuICBOT1RFOgorICAgKiBwYWQgZWFjaCBsaW5lIG9mIHRoZSBkZWNvbXByZXNzZWQgaW1hZ2UgdG8gYSA0LWJ5dGUgYm91bmRhcnkgb3IgdG8KKyAgICogZGVjb21wcmVzcyB0aGUgSlBFRyBpbWFnZSBpbnRvIGEgcmVnaW9uIG9mIGEgbGFyZ2VyIGltYWdlLiAgTk9URToKICAgICogPGNvZGU+c2NhbGVkV2lkdGg8L2NvZGU+IGNhbiBiZSBkZXRlcm1pbmVkIGJ5IGNhbGxpbmcgPGNvZGU+CiAgICAqIHNjYWxpbmdGYWN0b3Iue0BsaW5rIFRKU2NhbGluZ0ZhY3RvciNnZXRTY2FsZWQgZ2V0U2NhbGVkfShqcGVnV2lkdGgpCiAgICAqIDwvY29kZT4gb3IgYnkgY2FsbGluZyB7QGxpbmsgI2dldFNjYWxlZFdpZHRofS4gIFNldHRpbmcgdGhpcyBwYXJhbWV0ZXIgdG8KICAgICogMCBpcyB0aGUgZXF1aXZhbGVudCBvZiBzZXR0aW5nIGl0IHRvIDxjb2RlPnNjYWxlZFdpZHRoICoKICAgICogVEoucGl4ZWxTaXplKHBpeGVsRm9ybWF0KTwvY29kZT4uCiAgICAqCi0gICAqIEBwYXJhbSBkZXNpcmVkSGVpZ2h0IGRlc2lyZWQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIHRoZSBkZWNvbXByZXNzZWQgaW1hZ2UuCi0gICAqIElmIHRoZSBkZXNpcmVkIGltYWdlIGRpbWVuc2lvbnMgYXJlIHNtYWxsZXIgdGhhbiB0aGUgZGltZW5zaW9ucyBvZiB0aGUKLSAgICogSlBFRyBpbWFnZSBiZWluZyBkZWNvbXByZXNzZWQsIHRoZW4gVHVyYm9KUEVHIHdpbGwgdXNlIHNjYWxpbmcgaW4gdGhlIEpQRUcKLSAgICogZGVjb21wcmVzc29yIHRvIGdlbmVyYXRlIHRoZSBsYXJnZXN0IHBvc3NpYmxlIGltYWdlIHRoYXQgd2lsbCBmaXQgd2l0aGluCi0gICAqIHRoZSBkZXNpcmVkIGRpbWVuc2lvbnMuICBTZXR0aW5nIHRoaXMgdG8gMCBpcyB0aGUgc2FtZSBhcyBzZXR0aW5nIGl0IHRvCi0gICAqIHRoZSBoZWlnaHQgb2YgdGhlIEpQRUcgaW1hZ2UgKGluIG90aGVyIHdvcmRzLCB0aGUgaGVpZ2h0IHdpbGwgbm90IGJlCi0gICAqIGNvbnNpZGVyZWQgd2hlbiBkZXRlcm1pbmluZyB0aGUgc2NhbGVkIGltYWdlIHNpemUuKQorICAgKiBAcGFyYW0gZGVzaXJlZEhlaWdodCBkZXNpcmVkIGhlaWdodCAoaW4gcGl4ZWxzKSBvZiB0aGUgZGVjb21wcmVzc2VkIGltYWdlCisgICAqIChvciBpbWFnZSByZWdpb24uKSAgSWYgdGhlIGRlc2lyZWQgaW1hZ2UgZGltZW5zaW9ucyBhcmUgZGlmZmVyZW50IHRoYW4gdGhlCisgICAqIGRpbWVuc2lvbnMgb2YgdGhlIEpQRUcgaW1hZ2UgYmVpbmcgZGVjb21wcmVzc2VkLCB0aGVuIFR1cmJvSlBFRyB3aWxsIHVzZQorICAgKiBzY2FsaW5nIGluIHRoZSBKUEVHIGRlY29tcHJlc3NvciB0byBnZW5lcmF0ZSB0aGUgbGFyZ2VzdCBwb3NzaWJsZSBpbWFnZQorICAgKiB0aGF0IHdpbGwgZml0IHdpdGhpbiB0aGUgZGVzaXJlZCBkaW1lbnNpb25zLiAgU2V0dGluZyB0aGlzIHRvIDAgaXMgdGhlCisgICAqIHNhbWUgYXMgc2V0dGluZyBpdCB0byB0aGUgaGVpZ2h0IG9mIHRoZSBKUEVHIGltYWdlIChpbiBvdGhlciB3b3JkcywgdGhlCisgICAqIGhlaWdodCB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIHdoZW4gZGV0ZXJtaW5pbmcgdGhlIHNjYWxlZCBpbWFnZSBzaXplLikKICAgICoKLSAgICogQHBhcmFtIHBpeGVsRm9ybWF0IHBpeGVsIGZvcm1hdCBvZiB0aGUgZGVjb21wcmVzc2VkIGltYWdlIChvbmUgb2YKLSAgICoge0BsaW5rIFRKIFRKLlBGXyp9KQorICAgKiBAcGFyYW0gcGl4ZWxGb3JtYXQgcGl4ZWwgZm9ybWF0IG9mIHRoZSBkZWNvbXByZXNzZWQvZGVjb2RlZCBpbWFnZSAob25lIG9mCisgICAqIHtAbGluayBUSiNQRl9SR0IgVEouUEZfKn0pCiAgICAqCi0gICAqIEBwYXJhbSBmbGFncyB0aGUgYml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZiB7QGxpbmsgVEogVEouRkxBR18qfQorICAgKiBAcGFyYW0gZmxhZ3MgdGhlIGJpdHdpc2UgT1Igb2Ygb25lIG9yIG1vcmUgb2YKKyAgICoge0BsaW5rIFRKI0ZMQUdfQk9UVE9NVVAgVEouRkxBR18qfQogICAgKi8KLSAgcHVibGljIHZvaWQgZGVjb21wcmVzcyhieXRlW10gZHN0QnVmLCBpbnQgZGVzaXJlZFdpZHRoLCBpbnQgcGl0Y2gsCi0gICAgaW50IGRlc2lyZWRIZWlnaHQsIGludCBwaXhlbEZvcm1hdCwgaW50IGZsYWdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBpZihqcGVnQnVmID09IG51bGwpIHRocm93IG5ldyBFeGNlcHRpb24oTk9fQVNTT0NfRVJST1IpOwotICAgIGlmKGRzdEJ1ZiA9PSBudWxsIHx8IGRlc2lyZWRXaWR0aCA8IDAgfHwgcGl0Y2ggPCAwIHx8IGRlc2lyZWRIZWlnaHQgPCAwCi0gICAgICB8fCBwaXhlbEZvcm1hdCA8IDAgfHwgcGl4ZWxGb3JtYXQgPj0gVEouTlVNUEYgfHwgZmxhZ3MgPCAwKQorICBwdWJsaWMgdm9pZCBkZWNvbXByZXNzKGJ5dGVbXSBkc3RCdWYsIGludCB4LCBpbnQgeSwgaW50IGRlc2lyZWRXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGl0Y2gsIGludCBkZXNpcmVkSGVpZ2h0LCBpbnQgcGl4ZWxGb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBpZiAoanBlZ0J1ZiA9PSBudWxsKQorICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihOT19BU1NPQ19FUlJPUik7CisgICAgaWYgKGRzdEJ1ZiA9PSBudWxsIHx8IHggPCAwIHx8IHkgPCAwIHx8IGRlc2lyZWRXaWR0aCA8IDAgfHwgcGl0Y2ggPCAwIHx8CisgICAgICAgIGRlc2lyZWRIZWlnaHQgPCAwIHx8IHBpeGVsRm9ybWF0IDwgMCB8fCBwaXhlbEZvcm1hdCA+PSBUSi5OVU1QRiB8fAorICAgICAgICBmbGFncyA8IDApCiAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJJbnZhbGlkIGFyZ3VtZW50IGluIGRlY29tcHJlc3MoKSIpOwotICAgIGRlY29tcHJlc3MoanBlZ0J1ZiwganBlZ0J1ZlNpemUsIGRzdEJ1ZiwgZGVzaXJlZFdpZHRoLCBwaXRjaCwKLSAgICAgIGRlc2lyZWRIZWlnaHQsIHBpeGVsRm9ybWF0LCBmbGFncyk7CisgICAgaWYgKHggPiAwIHx8IHkgPiAwKQorICAgICAgZGVjb21wcmVzcyhqcGVnQnVmLCBqcGVnQnVmU2l6ZSwgZHN0QnVmLCB4LCB5LCBkZXNpcmVkV2lkdGgsIHBpdGNoLAorICAgICAgICAgICAgICAgICBkZXNpcmVkSGVpZ2h0LCBwaXhlbEZvcm1hdCwgZmxhZ3MpOworICAgIGVsc2UKKyAgICAgIGRlY29tcHJlc3MoanBlZ0J1ZiwganBlZ0J1ZlNpemUsIGRzdEJ1ZiwgZGVzaXJlZFdpZHRoLCBwaXRjaCwKKyAgICAgICAgICAgICAgICAgZGVzaXJlZEhlaWdodCwgcGl4ZWxGb3JtYXQsIGZsYWdzKTsKKyAgfQorCisgIC8qKgorICAgKiBAZGVwcmVjYXRlZCBVc2UKKyAgICoge0BsaW5rICNkZWNvbXByZXNzKGJ5dGVbXSwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KX0gaW5zdGVhZC4KKyAgICovCisgIEBEZXByZWNhdGVkCisgIHB1YmxpYyB2b2lkIGRlY29tcHJlc3MoYnl0ZVtdIGRzdEJ1ZiwgaW50IGRlc2lyZWRXaWR0aCwgaW50IHBpdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXNpcmVkSGVpZ2h0LCBpbnQgcGl4ZWxGb3JtYXQsIGludCBmbGFncykKKyAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBkZWNvbXByZXNzKGRzdEJ1ZiwgMCwgMCwgZGVzaXJlZFdpZHRoLCBwaXRjaCwgZGVzaXJlZEhlaWdodCwgcGl4ZWxGb3JtYXQsCisgICAgICAgICAgICAgICBmbGFncyk7CiAgIH0KIAogICAvKioKQEAgLTI4NywzMCArMzI2LDM1IEBACiAgICAqIGluc3RhbmNlIGFuZCByZXR1cm4gYSBidWZmZXIgY29udGFpbmluZyB0aGUgZGVjb21wcmVzc2VkIGltYWdlLgogICAgKgogICAgKiBAcGFyYW0gZGVzaXJlZFdpZHRoIHNlZQotICAgKiB7QGxpbmsgI2RlY29tcHJlc3MoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQsIGludCl9IGZvciBkZXNjcmlwdGlvbgorICAgKiB7QGxpbmsgI2RlY29tcHJlc3MoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpfQorICAgKiBmb3IgZGVzY3JpcHRpb24KICAgICoKICAgICogQHBhcmFtIHBpdGNoIHNlZQotICAgKiB7QGxpbmsgI2RlY29tcHJlc3MoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQsIGludCl9IGZvciBkZXNjcmlwdGlvbgorICAgKiB7QGxpbmsgI2RlY29tcHJlc3MoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpfQorICAgKiBmb3IgZGVzY3JpcHRpb24KICAgICoKICAgICogQHBhcmFtIGRlc2lyZWRIZWlnaHQgc2VlCi0gICAqIHtAbGluayAjZGVjb21wcmVzcyhieXRlW10sIGludCwgaW50LCBpbnQsIGludCwgaW50KX0gZm9yIGRlc2NyaXB0aW9uCisgICAqIHtAbGluayAjZGVjb21wcmVzcyhieXRlW10sIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCl9CisgICAqIGZvciBkZXNjcmlwdGlvbgogICAgKgogICAgKiBAcGFyYW0gcGl4ZWxGb3JtYXQgcGl4ZWwgZm9ybWF0IG9mIHRoZSBkZWNvbXByZXNzZWQgaW1hZ2UgKG9uZSBvZgotICAgKiB7QGxpbmsgVEogVEouUEZfKn0pCisgICAqIHtAbGluayBUSiNQRl9SR0IgVEouUEZfKn0pCiAgICAqCi0gICAqIEBwYXJhbSBmbGFncyB0aGUgYml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZiB7QGxpbmsgVEogVEouRkxBR18qfQorICAgKiBAcGFyYW0gZmxhZ3MgdGhlIGJpdHdpc2UgT1Igb2Ygb25lIG9yIG1vcmUgb2YKKyAgICoge0BsaW5rIFRKI0ZMQUdfQk9UVE9NVVAgVEouRkxBR18qfQogICAgKgogICAgKiBAcmV0dXJuIGEgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGRlY29tcHJlc3NlZCBpbWFnZQogICAgKi8KICAgcHVibGljIGJ5dGVbXSBkZWNvbXByZXNzKGludCBkZXNpcmVkV2lkdGgsIGludCBwaXRjaCwgaW50IGRlc2lyZWRIZWlnaHQsCi0gICAgaW50IHBpeGVsRm9ybWF0LCBpbnQgZmxhZ3MpIHRocm93cyBFeGNlcHRpb24gewotICAgIGlmKGRlc2lyZWRXaWR0aCA8IDAgfHwgcGl0Y2ggPCAwIHx8IGRlc2lyZWRIZWlnaHQgPCAwCi0gICAgICB8fCBwaXhlbEZvcm1hdCA8IDAgfHwgcGl4ZWxGb3JtYXQgPj0gVEouTlVNUEYgfHwgZmxhZ3MgPCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBpeGVsRm9ybWF0LCBpbnQgZmxhZ3MpIHRocm93cyBFeGNlcHRpb24geworICAgIGlmIChkZXNpcmVkV2lkdGggPCAwIHx8IHBpdGNoIDwgMCB8fCBkZXNpcmVkSGVpZ2h0IDwgMCB8fAorICAgICAgICBwaXhlbEZvcm1hdCA8IDAgfHwgcGl4ZWxGb3JtYXQgPj0gVEouTlVNUEYgfHwgZmxhZ3MgPCAwKQogICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiSW52YWxpZCBhcmd1bWVudCBpbiBkZWNvbXByZXNzKCkiKTsKICAgICBpbnQgcGl4ZWxTaXplID0gVEouZ2V0UGl4ZWxTaXplKHBpeGVsRm9ybWF0KTsKICAgICBpbnQgc2NhbGVkV2lkdGggPSBnZXRTY2FsZWRXaWR0aChkZXNpcmVkV2lkdGgsIGRlc2lyZWRIZWlnaHQpOwogICAgIGludCBzY2FsZWRIZWlnaHQgPSBnZXRTY2FsZWRIZWlnaHQoZGVzaXJlZFdpZHRoLCBkZXNpcmVkSGVpZ2h0KTsKLSAgICBpZihwaXRjaCA9PSAwKSBwaXRjaCA9IHNjYWxlZFdpZHRoICogcGl4ZWxTaXplOworICAgIGlmIChwaXRjaCA9PSAwKQorICAgICAgcGl0Y2ggPSBzY2FsZWRXaWR0aCAqIHBpeGVsU2l6ZTsKICAgICBieXRlW10gYnVmID0gbmV3IGJ5dGVbcGl0Y2ggKiBzY2FsZWRIZWlnaHRdOwogICAgIGRlY29tcHJlc3MoYnVmLCBkZXNpcmVkV2lkdGgsIHBpdGNoLCBkZXNpcmVkSGVpZ2h0LCBwaXhlbEZvcm1hdCwgZmxhZ3MpOwogICAgIHJldHVybiBidWY7CkBAIC0zMjEsNDEgKzM2NSw0NSBAQAogICAgKiBpbnN0YW5jZSBhbmQgb3V0cHV0IGEgWVVWIHBsYW5hciBpbWFnZSB0byB0aGUgZ2l2ZW4gZGVzdGluYXRpb24gYnVmZmVyLgogICAgKiBUaGlzIG1ldGhvZCBwZXJmb3JtcyBKUEVHIGRlY29tcHJlc3Npb24gYnV0IGxlYXZlcyBvdXQgdGhlIGNvbG9yCiAgICAqIGNvbnZlcnNpb24gc3RlcCwgc28gYSBwbGFuYXIgWVVWIGltYWdlIGlzIGdlbmVyYXRlZCBpbnN0ZWFkIG9mIGFuIFJHQgotICAgKiBpbWFnZS4gIFRoZSBwYWRkaW5nIG9mIHRoZSBwbGFuZXMgaW4gdGhpcyBpbWFnZSBpcyB0aGUgc2FtZSBhcyB0aGUgaW1hZ2VzCi0gICAqIGdlbmVyYXRlZCBieSB7QGxpbmsgVEpDb21wcmVzc29yI2VuY29kZVlVVihieXRlW10sIGludCl9LiAgTm90ZSB0aGF0LCBpZgotICAgKiB0aGUgd2lkdGggb3IgaGVpZ2h0IG9mIHRoZSBpbWFnZSBpcyBub3QgYW4gZXZlbiBtdWx0aXBsZSBvZiB0aGUgTUNVIGJsb2NrCi0gICAqIHNpemUgKHNlZSB7QGxpbmsgVEojZ2V0TUNVV2lkdGh9IGFuZCB7QGxpbmsgVEojZ2V0TUNVSGVpZ2h0fSksIHRoZW4gYW4KLSAgICogaW50ZXJtZWRpYXRlIGJ1ZmZlciBjb3B5IHdpbGwgYmUgcGVyZm9ybWVkIHdpdGhpbiBUdXJib0pQRUcuCisgICAqIGltYWdlLiAgVGhlIHBhZGRpbmcgb2YgdGhlIHBsYW5lcyBpbiB0aGlzIGltYWdlIGlzIHRoZSBzYW1lIGFzIGluIHRoZQorICAgKiBpbWFnZXMgZ2VuZXJhdGVkIGJ5IHtAbGluayBUSkNvbXByZXNzb3IjZW5jb2RlWVVWKGJ5dGVbXSwgaW50KX0uCisgICAqIDxwPgorICAgKiBOT1RFOiBUZWNobmljYWxseSwgdGhlIEpQRUcgZm9ybWF0IHVzZXMgdGhlIFlDYkNyIGNvbG9yc3BhY2UsIGJ1dCBwZXIgdGhlCisgICAqIGNvbnZlbnRpb24gb2YgdGhlIGRpZ2l0YWwgdmlkZW8gY29tbXVuaXR5LCB0aGUgVHVyYm9KUEVHIEFQSSB1c2VzICJZVVYiIHRvCisgICAqIHJlZmVyIHRvIGFuIGltYWdlIGZvcm1hdCBjb25zaXN0aW5nIG9mIFksIENiLCBhbmQgQ3IgaW1hZ2UgcGxhbmVzLgogICAgKgogICAgKiBAcGFyYW0gZHN0QnVmIGJ1ZmZlciB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUgWVVWIHBsYW5hciBpbWFnZS4gIFVzZQogICAgKiB7QGxpbmsgVEojYnVmU2l6ZVlVVn0gdG8gZGV0ZXJtaW5lIHRoZSBhcHByb3ByaWF0ZSBzaXplIGZvciB0aGlzIGJ1ZmZlcgogICAgKiBiYXNlZCBvbiB0aGUgaW1hZ2Ugd2lkdGgsIGhlaWdodCwgYW5kIGxldmVsIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nLgogICAgKgotICAgKiBAcGFyYW0gZmxhZ3MgdGhlIGJpdHdpc2UgT1Igb2Ygb25lIG9yIG1vcmUgb2Yge0BsaW5rIFRKIFRKLkZMQUdfKn0KKyAgICogQHBhcmFtIGZsYWdzIHRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mCisgICAqIHtAbGluayBUSiNGTEFHX0JPVFRPTVVQIFRKLkZMQUdfKn0KICAgICovCiAgIHB1YmxpYyB2b2lkIGRlY29tcHJlc3NUb1lVVihieXRlW10gZHN0QnVmLCBpbnQgZmxhZ3MpIHRocm93cyBFeGNlcHRpb24gewotICAgIGlmKGpwZWdCdWYgPT0gbnVsbCkgdGhyb3cgbmV3IEV4Y2VwdGlvbihOT19BU1NPQ19FUlJPUik7Ci0gICAgaWYoZHN0QnVmID09IG51bGwgfHwgZmxhZ3MgPCAwKQorICAgIGlmIChqcGVnQnVmID09IG51bGwpCisgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKE5PX0FTU09DX0VSUk9SKTsKKyAgICBpZiAoZHN0QnVmID09IG51bGwgfHwgZmxhZ3MgPCAwKQogICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiSW52YWxpZCBhcmd1bWVudCBpbiBkZWNvbXByZXNzVG9ZVVYoKSIpOwogICAgIGRlY29tcHJlc3NUb1lVVihqcGVnQnVmLCBqcGVnQnVmU2l6ZSwgZHN0QnVmLCBmbGFncyk7CiAgIH0KIAotICAKKwogICAvKioKICAgICogRGVjb21wcmVzcyB0aGUgSlBFRyBzb3VyY2UgaW1hZ2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGVjb21wcmVzc29yCiAgICAqIGluc3RhbmNlIGFuZCByZXR1cm4gYSBidWZmZXIgY29udGFpbmluZyBhIFlVViBwbGFuYXIgaW1hZ2UuICBTZWUge0BsaW5rCiAgICAqICNkZWNvbXByZXNzVG9ZVVYoYnl0ZVtdLCBpbnQpfSBmb3IgbW9yZSBkZXRhaWwuCiAgICAqCi0gICAqIEBwYXJhbSBmbGFncyB0aGUgYml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZiB7QGxpbmsgVEogVEouRkxBR18qfQorICAgKiBAcGFyYW0gZmxhZ3MgdGhlIGJpdHdpc2UgT1Igb2Ygb25lIG9yIG1vcmUgb2YKKyAgICoge0BsaW5rIFRKI0ZMQUdfQk9UVE9NVVAgVEouRkxBR18qfQogICAgKgogICAgKiBAcmV0dXJuIGEgYnVmZmVyIGNvbnRhaW5pbmcgYSBZVVYgcGxhbmFyIGltYWdlCiAgICAqLwogICBwdWJsaWMgYnl0ZVtdIGRlY29tcHJlc3NUb1lVVihpbnQgZmxhZ3MpIHRocm93cyBFeGNlcHRpb24gewotICAgIGlmKGZsYWdzIDwgMCkKKyAgICBpZiAoZmxhZ3MgPCAwKQogICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiSW52YWxpZCBhcmd1bWVudCBpbiBkZWNvbXByZXNzVG9ZVVYoKSIpOwotICAgIGlmKGpwZWdXaWR0aCA8IDEgfHwganBlZ0hlaWdodCA8IDEgfHwganBlZ1N1YnNhbXAgPCAwKQorICAgIGlmIChqcGVnV2lkdGggPCAxIHx8IGpwZWdIZWlnaHQgPCAxIHx8IGpwZWdTdWJzYW1wIDwgMCkKICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oTk9fQVNTT0NfRVJST1IpOwotICAgIGlmKGpwZWdTdWJzYW1wID49IFRKLk5VTVNBTVApCisgICAgaWYgKGpwZWdTdWJzYW1wID49IFRKLk5VTVNBTVApCiAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJKUEVHIGhlYWRlciBpbmZvcm1hdGlvbiBpcyBpbnZhbGlkIik7CiAgICAgYnl0ZVtdIGJ1ZiA9IG5ldyBieXRlW1RKLmJ1ZlNpemVZVVYoanBlZ1dpZHRoLCBqcGVnSGVpZ2h0LCBqcGVnU3Vic2FtcCldOwogICAgIGRlY29tcHJlc3NUb1lVVihidWYsIGZsYWdzKTsKQEAgLTM2NCwyNSArNDEyLDkzIEBACiAKICAgLyoqCiAgICAqIERlY29tcHJlc3MgdGhlIEpQRUcgc291cmNlIGltYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRlY29tcHJlc3NvcgorICAgKiBpbnN0YW5jZSBhbmQgb3V0cHV0IGEgZGVjb21wcmVzc2VkIGltYWdlIHRvIHRoZSBnaXZlbiBkZXN0aW5hdGlvbiBidWZmZXIuCisgICAqCisgICAqIEBwYXJhbSBkc3RCdWYgYnVmZmVyIHRoYXQgd2lsbCByZWNlaXZlIHRoZSBkZWNvbXByZXNzZWQgaW1hZ2UuICBUaGlzCisgICAqIGJ1ZmZlciBzaG91bGQgbm9ybWFsbHkgYmUgPGNvZGU+c3RyaWRlICogc2NhbGVkSGVpZ2h0PC9jb2RlPiBwaXhlbHMgaW4KKyAgICogc2l6ZSwgd2hlcmUgPGNvZGU+c2NhbGVkSGVpZ2h0PC9jb2RlPiBjYW4gYmUgZGV0ZXJtaW5lZCBieSBjYWxsaW5nIDxjb2RlPgorICAgKiBzY2FsaW5nRmFjdG9yLntAbGluayBUSlNjYWxpbmdGYWN0b3IjZ2V0U2NhbGVkIGdldFNjYWxlZH0oanBlZ0hlaWdodCkKKyAgICogPC9jb2RlPiB3aXRoIG9uZSBvZiB0aGUgc2NhbGluZyBmYWN0b3JzIHJldHVybmVkIGZyb20ge0BsaW5rCisgICAqIFRKI2dldFNjYWxpbmdGYWN0b3JzfSBvciBieSBjYWxsaW5nIHtAbGluayAjZ2V0U2NhbGVkSGVpZ2h0fS4gIEhvd2V2ZXIsCisgICAqIHRoZSBidWZmZXIgbWF5IGFsc28gYmUgbGFyZ2VyIHRoYW4gdGhlIGRpbWVuc2lvbnMgb2YgdGhlIEpQRUcgaW1hZ2UsIGluCisgICAqIHdoaWNoIGNhc2UgdGhlIDxjb2RlPng8L2NvZGU+LCA8Y29kZT55PC9jb2RlPiwgYW5kIDxjb2RlPnN0cmlkZTwvY29kZT4KKyAgICogcGFyYW1ldGVycyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSByZWdpb24gaW50byB3aGljaCB0aGUgSlBFRyBpbWFnZQorICAgKiBzaG91bGQgYmUgZGVjb21wcmVzc2VkLgorICAgKgorICAgKiBAcGFyYW0geCB4IG9mZnNldCAoaW4gcGl4ZWxzKSBvZiB0aGUgcmVnaW9uIGludG8gd2hpY2ggdGhlIEpQRUcgaW1hZ2UKKyAgICogc2hvdWxkIGJlIGRlY29tcHJlc3NlZCwgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIDxjb2RlPmRzdEJ1ZjwvY29kZT4uCisgICAqCisgICAqIEBwYXJhbSB5IHkgb2Zmc2V0IChpbiBwaXhlbHMpIG9mIHRoZSByZWdpb24gaW50byB3aGljaCB0aGUgSlBFRyBpbWFnZQorICAgKiBzaG91bGQgYmUgZGVjb21wcmVzc2VkLCByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgPGNvZGU+ZHN0QnVmPC9jb2RlPi4KKyAgICoKKyAgICogQHBhcmFtIGRlc2lyZWRXaWR0aCBkZXNpcmVkIHdpZHRoIChpbiBwaXhlbHMpIG9mIHRoZSBkZWNvbXByZXNzZWQgaW1hZ2UKKyAgICogKG9yIGltYWdlIHJlZ2lvbi4pICBJZiB0aGUgZGVzaXJlZCBpbWFnZSBkaW1lbnNpb25zIGFyZSBkaWZmZXJlbnQgdGhhbiB0aGUKKyAgICogZGltZW5zaW9ucyBvZiB0aGUgSlBFRyBpbWFnZSBiZWluZyBkZWNvbXByZXNzZWQsIHRoZW4gVHVyYm9KUEVHIHdpbGwgdXNlCisgICAqIHNjYWxpbmcgaW4gdGhlIEpQRUcgZGVjb21wcmVzc29yIHRvIGdlbmVyYXRlIHRoZSBsYXJnZXN0IHBvc3NpYmxlIGltYWdlCisgICAqIHRoYXQgd2lsbCBmaXQgd2l0aGluIHRoZSBkZXNpcmVkIGRpbWVuc2lvbnMuICBTZXR0aW5nIHRoaXMgdG8gMCBpcyB0aGUKKyAgICogc2FtZSBhcyBzZXR0aW5nIGl0IHRvIHRoZSB3aWR0aCBvZiB0aGUgSlBFRyBpbWFnZSAoaW4gb3RoZXIgd29yZHMsIHRoZQorICAgKiB3aWR0aCB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIHdoZW4gZGV0ZXJtaW5pbmcgdGhlIHNjYWxlZCBpbWFnZSBzaXplLikKKyAgICoKKyAgICogQHBhcmFtIHN0cmlkZSBwaXhlbHMgcGVyIGxpbmUgb2YgdGhlIGRlc3RpbmF0aW9uIGltYWdlLiAgTm9ybWFsbHksIHRoaXMKKyAgICogc2hvdWxkIGJlIHNldCB0byA8Y29kZT5zY2FsZWRXaWR0aDwvY29kZT4sIGJ1dCB5b3UgY2FuIHVzZSB0aGlzIHRvLCBmb3IKKyAgICogaW5zdGFuY2UsIGRlY29tcHJlc3MgdGhlIEpQRUcgaW1hZ2UgaW50byBhIHJlZ2lvbiBvZiBhIGxhcmdlciBpbWFnZS4KKyAgICogTk9URTogPGNvZGU+c2NhbGVkV2lkdGg8L2NvZGU+IGNhbiBiZSBkZXRlcm1pbmVkIGJ5IGNhbGxpbmcgPGNvZGU+CisgICAqIHNjYWxpbmdGYWN0b3Iue0BsaW5rIFRKU2NhbGluZ0ZhY3RvciNnZXRTY2FsZWQgZ2V0U2NhbGVkfShqcGVnV2lkdGgpCisgICAqIDwvY29kZT4gb3IgYnkgY2FsbGluZyB7QGxpbmsgI2dldFNjYWxlZFdpZHRofS4gIFNldHRpbmcgdGhpcyBwYXJhbWV0ZXIgdG8KKyAgICogMCBpcyB0aGUgZXF1aXZhbGVudCBvZiBzZXR0aW5nIGl0IHRvIDxjb2RlPnNjYWxlZFdpZHRoPC9jb2RlPi4KKyAgICoKKyAgICogQHBhcmFtIGRlc2lyZWRIZWlnaHQgZGVzaXJlZCBoZWlnaHQgKGluIHBpeGVscykgb2YgdGhlIGRlY29tcHJlc3NlZCBpbWFnZQorICAgKiAob3IgaW1hZ2UgcmVnaW9uLikgIElmIHRoZSBkZXNpcmVkIGltYWdlIGRpbWVuc2lvbnMgYXJlIGRpZmZlcmVudCB0aGFuIHRoZQorICAgKiBkaW1lbnNpb25zIG9mIHRoZSBKUEVHIGltYWdlIGJlaW5nIGRlY29tcHJlc3NlZCwgdGhlbiBUdXJib0pQRUcgd2lsbCB1c2UKKyAgICogc2NhbGluZyBpbiB0aGUgSlBFRyBkZWNvbXByZXNzb3IgdG8gZ2VuZXJhdGUgdGhlIGxhcmdlc3QgcG9zc2libGUgaW1hZ2UKKyAgICogdGhhdCB3aWxsIGZpdCB3aXRoaW4gdGhlIGRlc2lyZWQgZGltZW5zaW9ucy4gIFNldHRpbmcgdGhpcyB0byAwIGlzIHRoZQorICAgKiBzYW1lIGFzIHNldHRpbmcgaXQgdG8gdGhlIGhlaWdodCBvZiB0aGUgSlBFRyBpbWFnZSAoaW4gb3RoZXIgd29yZHMsIHRoZQorICAgKiBoZWlnaHQgd2lsbCBub3QgYmUgY29uc2lkZXJlZCB3aGVuIGRldGVybWluaW5nIHRoZSBzY2FsZWQgaW1hZ2Ugc2l6ZS4pCisgICAqCisgICAqIEBwYXJhbSBwaXhlbEZvcm1hdCBwaXhlbCBmb3JtYXQgb2YgdGhlIGRlY29tcHJlc3NlZCBpbWFnZSAob25lIG9mCisgICAqIHtAbGluayBUSiNQRl9SR0IgVEouUEZfKn0pCisgICAqCisgICAqIEBwYXJhbSBmbGFncyB0aGUgYml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZgorICAgKiB7QGxpbmsgVEojRkxBR19CT1RUT01VUCBUSi5GTEFHXyp9CisgICAqLworICBwdWJsaWMgdm9pZCBkZWNvbXByZXNzKGludFtdIGRzdEJ1ZiwgaW50IHgsIGludCB5LCBpbnQgZGVzaXJlZFdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdHJpZGUsIGludCBkZXNpcmVkSGVpZ2h0LCBpbnQgcGl4ZWxGb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBpZiAoanBlZ0J1ZiA9PSBudWxsKQorICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihOT19BU1NPQ19FUlJPUik7CisgICAgaWYgKGRzdEJ1ZiA9PSBudWxsIHx8IHggPCAwIHx8IHkgPCAwIHx8IGRlc2lyZWRXaWR0aCA8IDAgfHwgc3RyaWRlIDwgMCB8fAorICAgICAgICBkZXNpcmVkSGVpZ2h0IDwgMCB8fCBwaXhlbEZvcm1hdCA8IDAgfHwgcGl4ZWxGb3JtYXQgPj0gVEouTlVNUEYgfHwKKyAgICAgICAgZmxhZ3MgPCAwKQorICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiSW52YWxpZCBhcmd1bWVudCBpbiBkZWNvbXByZXNzKCkiKTsKKyAgICBkZWNvbXByZXNzKGpwZWdCdWYsIGpwZWdCdWZTaXplLCBkc3RCdWYsIHgsIHksIGRlc2lyZWRXaWR0aCwgc3RyaWRlLAorICAgICAgICAgICAgICAgZGVzaXJlZEhlaWdodCwgcGl4ZWxGb3JtYXQsIGZsYWdzKTsKKyAgfQorCisgIC8qKgorICAgKiBEZWNvbXByZXNzIHRoZSBKUEVHIHNvdXJjZSBpbWFnZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBkZWNvbXByZXNzb3IKICAgICogaW5zdGFuY2UgYW5kIG91dHB1dCBhIGRlY29tcHJlc3NlZCBpbWFnZSB0byB0aGUgZ2l2ZW4KICAgICogPGNvZGU+QnVmZmVyZWRJbWFnZTwvY29kZT4gaW5zdGFuY2UuCiAgICAqCiAgICAqIEBwYXJhbSBkc3RJbWFnZSBhIDxjb2RlPkJ1ZmZlcmVkSW1hZ2U8L2NvZGU+IGluc3RhbmNlIHRoYXQgd2lsbCByZWNlaXZlCi0gICAqIHRoZSBkZWNvbXByZXNzZWQgaW1hZ2UKKyAgICogdGhlIGRlY29tcHJlc3NlZCBpbWFnZS4gIFRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZQorICAgKiA8Y29kZT5CdWZmZXJlZEltYWdlPC9jb2RlPiBpbnN0YW5jZSBtdXN0IG1hdGNoIG9uZSBvZiB0aGUgc2NhbGVkIGltYWdlCisgICAqIHNpemVzIHRoYXQgVHVyYm9KUEVHIGlzIGNhcGFibGUgb2YgZ2VuZXJhdGluZyBmcm9tIHRoZSBKUEVHIGltYWdlLgogICAgKgotICAgKiBAcGFyYW0gZmxhZ3MgdGhlIGJpdHdpc2UgT1Igb2Ygb25lIG9yIG1vcmUgb2Yge0BsaW5rIFRKIFRKLkZMQUdfKn0KKyAgICoKKyAgICogQHBhcmFtIGZsYWdzIHRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mCisgICAqIHtAbGluayBUSiNGTEFHX0JPVFRPTVVQIFRKLkZMQUdfKn0KICAgICovCiAgIHB1YmxpYyB2b2lkIGRlY29tcHJlc3MoQnVmZmVyZWRJbWFnZSBkc3RJbWFnZSwgaW50IGZsYWdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBpZihkc3RJbWFnZSA9PSBudWxsIHx8IGZsYWdzIDwgMCkKKyAgICBpZiAoZHN0SW1hZ2UgPT0gbnVsbCB8fCBmbGFncyA8IDApCiAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJJbnZhbGlkIGFyZ3VtZW50IGluIGRlY29tcHJlc3MoKSIpOwogICAgIGludCBkZXNpcmVkV2lkdGggPSBkc3RJbWFnZS5nZXRXaWR0aCgpOwogICAgIGludCBkZXNpcmVkSGVpZ2h0ID0gZHN0SW1hZ2UuZ2V0SGVpZ2h0KCk7CiAgICAgaW50IHNjYWxlZFdpZHRoID0gZ2V0U2NhbGVkV2lkdGgoZGVzaXJlZFdpZHRoLCBkZXNpcmVkSGVpZ2h0KTsKICAgICBpbnQgc2NhbGVkSGVpZ2h0ID0gZ2V0U2NhbGVkSGVpZ2h0KGRlc2lyZWRXaWR0aCwgZGVzaXJlZEhlaWdodCk7Ci0gICAgaWYoc2NhbGVkV2lkdGggIT0gZGVzaXJlZFdpZHRoIHx8IHNjYWxlZEhlaWdodCAhPSBkZXNpcmVkSGVpZ2h0KQotICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiQnVmZmVyZWRJbWFnZSBkaW1lbnNpb25zIGRvIG5vdCBtYXRjaCBhIHNjYWxlZCBpbWFnZSBzaXplIHRoYXQgVHVyYm9KUEVHIGlzIGNhcGFibGUgb2YgZ2VuZXJhdGluZy4iKTsKKyAgICBpZiAoc2NhbGVkV2lkdGggIT0gZGVzaXJlZFdpZHRoIHx8IHNjYWxlZEhlaWdodCAhPSBkZXNpcmVkSGVpZ2h0KQorICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiQnVmZmVyZWRJbWFnZSBkaW1lbnNpb25zIGRvIG5vdCBtYXRjaCBvbmUgb2YgdGhlIHNjYWxlZCBpbWFnZSBzaXplcyB0aGF0IFR1cmJvSlBFRyBpcyBjYXBhYmxlIG9mIGdlbmVyYXRpbmcuIik7CiAgICAgaW50IHBpeGVsRm9ybWF0OyAgYm9vbGVhbiBpbnRQaXhlbHMgPSBmYWxzZTsKLSAgICBpZihieXRlT3JkZXIgPT0gbnVsbCkKKyAgICBpZiAoYnl0ZU9yZGVyID09IG51bGwpCiAgICAgICBieXRlT3JkZXIgPSBCeXRlT3JkZXIubmF0aXZlT3JkZXIoKTsKICAgICBzd2l0Y2goZHN0SW1hZ2UuZ2V0VHlwZSgpKSB7CiAgICAgICBjYXNlIEJ1ZmZlcmVkSW1hZ2UuVFlQRV8zQllURV9CR1I6CkBAIC0zOTMsMjAgKzUwOSwyMCBAQAogICAgICAgY2FzZSBCdWZmZXJlZEltYWdlLlRZUEVfQllURV9HUkFZOgogICAgICAgICBwaXhlbEZvcm1hdCA9IFRKLlBGX0dSQVk7ICBicmVhazsKICAgICAgIGNhc2UgQnVmZmVyZWRJbWFnZS5UWVBFX0lOVF9CR1I6Ci0gICAgICAgIGlmKGJ5dGVPcmRlciA9PSBCeXRlT3JkZXIuQklHX0VORElBTikKKyAgICAgICAgaWYgKGJ5dGVPcmRlciA9PSBCeXRlT3JkZXIuQklHX0VORElBTikKICAgICAgICAgICBwaXhlbEZvcm1hdCA9IFRKLlBGX1hCR1I7CiAgICAgICAgIGVsc2UKICAgICAgICAgICBwaXhlbEZvcm1hdCA9IFRKLlBGX1JHQlg7CiAgICAgICAgIGludFBpeGVscyA9IHRydWU7ICBicmVhazsKICAgICAgIGNhc2UgQnVmZmVyZWRJbWFnZS5UWVBFX0lOVF9SR0I6Ci0gICAgICAgIGlmKGJ5dGVPcmRlciA9PSBCeXRlT3JkZXIuQklHX0VORElBTikKKyAgICAgICAgaWYgKGJ5dGVPcmRlciA9PSBCeXRlT3JkZXIuQklHX0VORElBTikKICAgICAgICAgICBwaXhlbEZvcm1hdCA9IFRKLlBGX1hSR0I7CiAgICAgICAgIGVsc2UKICAgICAgICAgICBwaXhlbEZvcm1hdCA9IFRKLlBGX0JHUlg7CiAgICAgICAgIGludFBpeGVscyA9IHRydWU7ICBicmVhazsKICAgICAgIGNhc2UgQnVmZmVyZWRJbWFnZS5UWVBFX0lOVF9BUkdCOgogICAgICAgY2FzZSBCdWZmZXJlZEltYWdlLlRZUEVfSU5UX0FSR0JfUFJFOgotICAgICAgICBpZihieXRlT3JkZXIgPT0gQnl0ZU9yZGVyLkJJR19FTkRJQU4pCisgICAgICAgIGlmIChieXRlT3JkZXIgPT0gQnl0ZU9yZGVyLkJJR19FTkRJQU4pCiAgICAgICAgICAgcGl4ZWxGb3JtYXQgPSBUSi5QRl9BUkdCOwogICAgICAgICBlbHNlCiAgICAgICAgICAgcGl4ZWxGb3JtYXQgPSBUSi5QRl9CR1JBOwpAQCAtNDE1LDIxICs1MzEsMjEgQEAKICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiVW5zdXBwb3J0ZWQgQnVmZmVyZWRJbWFnZSBmb3JtYXQiKTsKICAgICB9CiAgICAgV3JpdGFibGVSYXN0ZXIgd3IgPSBkc3RJbWFnZS5nZXRSYXN0ZXIoKTsKLSAgICBpZihpbnRQaXhlbHMpIHsKKyAgICBpZiAoaW50UGl4ZWxzKSB7CiAgICAgICBTaW5nbGVQaXhlbFBhY2tlZFNhbXBsZU1vZGVsIHNtID0KICAgICAgICAgKFNpbmdsZVBpeGVsUGFja2VkU2FtcGxlTW9kZWwpZHN0SW1hZ2UuZ2V0U2FtcGxlTW9kZWwoKTsKLSAgICAgIGludCBwaXRjaCA9IHNtLmdldFNjYW5saW5lU3RyaWRlKCk7CisgICAgICBpbnQgc3RyaWRlID0gc20uZ2V0U2NhbmxpbmVTdHJpZGUoKTsKICAgICAgIERhdGFCdWZmZXJJbnQgZGIgPSAoRGF0YUJ1ZmZlckludCl3ci5nZXREYXRhQnVmZmVyKCk7CiAgICAgICBpbnRbXSBidWYgPSBkYi5nZXREYXRhKCk7Ci0gICAgICBpZihqcGVnQnVmID09IG51bGwpIHRocm93IG5ldyBFeGNlcHRpb24oTk9fQVNTT0NfRVJST1IpOwotICAgICAgZGVjb21wcmVzcyhqcGVnQnVmLCBqcGVnQnVmU2l6ZSwgYnVmLCBzY2FsZWRXaWR0aCwgcGl0Y2gsIHNjYWxlZEhlaWdodCwKLSAgICAgICAgcGl4ZWxGb3JtYXQsIGZsYWdzKTsKLSAgICB9Ci0gICAgZWxzZSB7CisgICAgICBpZiAoanBlZ0J1ZiA9PSBudWxsKQorICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKE5PX0FTU09DX0VSUk9SKTsKKyAgICAgIGRlY29tcHJlc3MoanBlZ0J1ZiwganBlZ0J1ZlNpemUsIGJ1Ziwgc2NhbGVkV2lkdGgsIHN0cmlkZSwgc2NhbGVkSGVpZ2h0LAorICAgICAgICAgICAgICAgICBwaXhlbEZvcm1hdCwgZmxhZ3MpOworICAgIH0gZWxzZSB7CiAgICAgICBDb21wb25lbnRTYW1wbGVNb2RlbCBzbSA9CiAgICAgICAgIChDb21wb25lbnRTYW1wbGVNb2RlbClkc3RJbWFnZS5nZXRTYW1wbGVNb2RlbCgpOwogICAgICAgaW50IHBpeGVsU2l6ZSA9IHNtLmdldFBpeGVsU3RyaWRlKCk7Ci0gICAgICBpZihwaXhlbFNpemUgIT0gVEouZ2V0UGl4ZWxTaXplKHBpeGVsRm9ybWF0KSkKKyAgICAgIGlmIChwaXhlbFNpemUgIT0gVEouZ2V0UGl4ZWxTaXplKHBpeGVsRm9ybWF0KSkKICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiSW5jb25zaXN0ZW5jeSBiZXR3ZWVuIHBpeGVsIGZvcm1hdCBhbmQgcGl4ZWwgc2l6ZSBpbiBCdWZmZXJlZEltYWdlIik7CiAgICAgICBpbnQgcGl0Y2ggPSBzbS5nZXRTY2FubGluZVN0cmlkZSgpOwogICAgICAgRGF0YUJ1ZmZlckJ5dGUgZGIgPSAoRGF0YUJ1ZmZlckJ5dGUpd3IuZ2V0RGF0YUJ1ZmZlcigpOwpAQCAtNDQ0LDI4ICs1NjAsMzIgQEAKICAgICogZGVjb21wcmVzc2VkIGltYWdlLgogICAgKgogICAgKiBAcGFyYW0gZGVzaXJlZFdpZHRoIHNlZQotICAgKiB7QGxpbmsgI2RlY29tcHJlc3MoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQsIGludCl9IGZvciBkZXNjcmlwdGlvbgorICAgKiB7QGxpbmsgI2RlY29tcHJlc3MoYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpfSBmb3IKKyAgICogZGVzY3JpcHRpb24KICAgICoKICAgICogQHBhcmFtIGRlc2lyZWRIZWlnaHQgc2VlCi0gICAqIHtAbGluayAjZGVjb21wcmVzcyhieXRlW10sIGludCwgaW50LCBpbnQsIGludCwgaW50KX0gZm9yIGRlc2NyaXB0aW9uCisgICAqIHtAbGluayAjZGVjb21wcmVzcyhieXRlW10sIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCl9IGZvcgorICAgKiBkZXNjcmlwdGlvbgogICAgKgotICAgKiBAcGFyYW0gYnVmZmVyZWRJbWFnZVR5cGUgdGhlIGltYWdlIHR5cGUgb2YgdGhlIG5ld2x5LWNyZWF0ZWQKLSAgICogPGNvZGU+QnVmZmVyZWRJbWFnZTwvY29kZT4gaW5zdGFuY2UgKGZvciBpbnN0YW5jZSwKKyAgICogQHBhcmFtIGJ1ZmZlcmVkSW1hZ2VUeXBlIHRoZSBpbWFnZSB0eXBlIG9mIHRoZSA8Y29kZT5CdWZmZXJlZEltYWdlPC9jb2RlPgorICAgKiBpbnN0YW5jZSB0aGF0IHdpbGwgYmUgY3JlYXRlZCAoZm9yIGluc3RhbmNlLAogICAgKiA8Y29kZT5CdWZmZXJlZEltYWdlLlRZUEVfSU5UX1JHQjwvY29kZT4pCiAgICAqCi0gICAqIEBwYXJhbSBmbGFncyB0aGUgYml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZiB7QGxpbmsgVEogVEouRkxBR18qfQorICAgKiBAcGFyYW0gZmxhZ3MgdGhlIGJpdHdpc2UgT1Igb2Ygb25lIG9yIG1vcmUgb2YKKyAgICoge0BsaW5rIFRKI0ZMQUdfQk9UVE9NVVAgVEouRkxBR18qfQogICAgKgogICAgKiBAcmV0dXJuIGEgPGNvZGU+QnVmZmVyZWRJbWFnZTwvY29kZT4gaW5zdGFuY2UgY29udGFpbmluZyB0aGUKICAgICogZGVjb21wcmVzc2VkIGltYWdlCiAgICAqLwogICBwdWJsaWMgQnVmZmVyZWRJbWFnZSBkZWNvbXByZXNzKGludCBkZXNpcmVkV2lkdGgsIGludCBkZXNpcmVkSGVpZ2h0LAotICAgIGludCBidWZmZXJlZEltYWdlVHlwZSwgaW50IGZsYWdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBpZihkZXNpcmVkV2lkdGggPCAwIHx8IGRlc2lyZWRIZWlnaHQgPCAwIHx8IGZsYWdzIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnVmZmVyZWRJbWFnZVR5cGUsIGludCBmbGFncykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBpZiAoZGVzaXJlZFdpZHRoIDwgMCB8fCBkZXNpcmVkSGVpZ2h0IDwgMCB8fCBmbGFncyA8IDApCiAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJJbnZhbGlkIGFyZ3VtZW50IGluIGRlY29tcHJlc3MoKSIpOwogICAgIGludCBzY2FsZWRXaWR0aCA9IGdldFNjYWxlZFdpZHRoKGRlc2lyZWRXaWR0aCwgZGVzaXJlZEhlaWdodCk7CiAgICAgaW50IHNjYWxlZEhlaWdodCA9IGdldFNjYWxlZEhlaWdodChkZXNpcmVkV2lkdGgsIGRlc2lyZWRIZWlnaHQpOwogICAgIEJ1ZmZlcmVkSW1hZ2UgaW1nID0gbmV3IEJ1ZmZlcmVkSW1hZ2Uoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCwKLSAgICAgIGJ1ZmZlcmVkSW1hZ2VUeXBlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcmVkSW1hZ2VUeXBlKTsKICAgICBkZWNvbXByZXNzKGltZywgZmxhZ3MpOwogICAgIHJldHVybiBpbWc7CiAgIH0KQEAgLTQ3NCwxNSArNTk0LDE1IEBACiAgICAqIEZyZWUgdGhlIG5hdGl2ZSBzdHJ1Y3R1cmVzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRlY29tcHJlc3NvciBpbnN0YW5jZS4KICAgICovCiAgIHB1YmxpYyB2b2lkIGNsb3NlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgZGVzdHJveSgpOworICAgIGlmIChoYW5kbGUgIT0gMCkKKyAgICAgIGRlc3Ryb3koKTsKICAgfQogCiAgIHByb3RlY3RlZCB2b2lkIGZpbmFsaXplKCkgdGhyb3dzIFRocm93YWJsZSB7CiAgICAgdHJ5IHsKICAgICAgIGNsb3NlKCk7Ci0gICAgfQotICAgIGNhdGNoKEV4Y2VwdGlvbiBlKSB7fQotICAgIGZpbmFsbHkgeworICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICB9IGZpbmFsbHkgewogICAgICAgc3VwZXIuZmluYWxpemUoKTsKICAgICB9CiAgIH07CkBAIC00OTYsMTUgKzYxNiwyMiBAQAogCiAgIHByaXZhdGUgbmF0aXZlIHZvaWQgZGVjb21wcmVzcyhieXRlW10gc3JjQnVmLCBpbnQgc2l6ZSwgYnl0ZVtdIGRzdEJ1ZiwKICAgICBpbnQgZGVzaXJlZFdpZHRoLCBpbnQgcGl0Y2gsIGludCBkZXNpcmVkSGVpZ2h0LCBpbnQgcGl4ZWxGb3JtYXQsIGludCBmbGFncykKLSAgICB0aHJvd3MgRXhjZXB0aW9uOworICAgIHRocm93cyBFeGNlcHRpb247IC8vIGRlcHJlY2F0ZWQKKworICBwcml2YXRlIG5hdGl2ZSB2b2lkIGRlY29tcHJlc3MoYnl0ZVtdIHNyY0J1ZiwgaW50IHNpemUsIGJ5dGVbXSBkc3RCdWYsIGludCB4LAorICAgIGludCB5LCBpbnQgZGVzaXJlZFdpZHRoLCBpbnQgcGl0Y2gsIGludCBkZXNpcmVkSGVpZ2h0LCBpbnQgcGl4ZWxGb3JtYXQsCisgICAgaW50IGZsYWdzKSB0aHJvd3MgRXhjZXB0aW9uOwogCiAgIHByaXZhdGUgbmF0aXZlIHZvaWQgZGVjb21wcmVzcyhieXRlW10gc3JjQnVmLCBpbnQgc2l6ZSwgaW50W10gZHN0QnVmLAotICAgIGludCBkZXNpcmVkV2lkdGgsIGludCBwaXRjaCwgaW50IGRlc2lyZWRIZWlnaHQsIGludCBwaXhlbEZvcm1hdCwgaW50IGZsYWdzKQotICAgIHRocm93cyBFeGNlcHRpb247CisgICAgaW50IGRlc2lyZWRXaWR0aCwgaW50IHN0cmlkZSwgaW50IGRlc2lyZWRIZWlnaHQsIGludCBwaXhlbEZvcm1hdCwKKyAgICBpbnQgZmxhZ3MpIHRocm93cyBFeGNlcHRpb247IC8vIGRlcHJlY2F0ZWQKKworICBwcml2YXRlIG5hdGl2ZSB2b2lkIGRlY29tcHJlc3MoYnl0ZVtdIHNyY0J1ZiwgaW50IHNpemUsIGludFtdIGRzdEJ1ZiwgaW50IHgsCisgICAgaW50IHksIGludCBkZXNpcmVkV2lkdGgsIGludCBzdHJpZGUsIGludCBkZXNpcmVkSGVpZ2h0LCBpbnQgcGl4ZWxGb3JtYXQsCisgICAgaW50IGZsYWdzKSB0aHJvd3MgRXhjZXB0aW9uOwogCiAgIHByaXZhdGUgbmF0aXZlIHZvaWQgZGVjb21wcmVzc1RvWVVWKGJ5dGVbXSBzcmNCdWYsIGludCBzaXplLCBieXRlW10gZHN0QnVmLAotICAgIGludCBmbGFncykKLSAgICB0aHJvd3MgRXhjZXB0aW9uOworICAgIGludCBmbGFncykgdGhyb3dzIEV4Y2VwdGlvbjsKIAogICBzdGF0aWMgewogICAgIFRKTG9hZGVyLmxvYWQoKTsKZGlmZiAtLWdpdCBhL2phdmEvb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpMb2FkZXIuamF2YSBiL2phdmEvb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpMb2FkZXIuamF2YS50bXBsCnNpbWlsYXJpdHkgaW5kZXggNjIlCmNvcHkgZnJvbSBqYXZhL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKTG9hZGVyLmphdmEKY29weSB0byBqYXZhL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKTG9hZGVyLmphdmEudG1wbAppbmRleCBkYjc3YmJhLi5hNGYxYzg3IDEwMDY0NAotLS0gYS9qYXZhL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKTG9hZGVyLmphdmEKKysrIGIvamF2YS9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkxvYWRlci5qYXZhLnRtcGwKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKTIwMTEgRC4gUi4gQ29tbWFuZGVyLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykyMDExLTIwMTMgRC4gUi4gQ29tbWFuZGVyLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgpAQCAtMzAsNiArMzAsMzAgQEAKIAogZmluYWwgY2xhc3MgVEpMb2FkZXIgewogICBzdGF0aWMgdm9pZCBsb2FkKCkgewotICAgIFN5c3RlbS5sb2FkTGlicmFyeSgidHVyYm9qcGVnIik7CisgICAgdHJ5IHsKKyAgICAgIFN5c3RlbS5sb2FkTGlicmFyeSgidHVyYm9qcGVnIik7CisgICAgfSBjYXRjaCAoamF2YS5sYW5nLlVuc2F0aXNmaWVkTGlua0Vycm9yIGUpIHsKKyAgICAgIFN0cmluZyBvcyA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgib3MubmFtZSIpLnRvTG93ZXJDYXNlKCk7CisgICAgICBpZiAob3MuaW5kZXhPZigibWFjIikgPj0gMCkgeworICAgICAgICB0cnkgeworICAgICAgICAgIFN5c3RlbS5sb2FkKCIle19fbGliZGlyfS9saWJ0dXJib2pwZWcuam5pbGliIik7CisgICAgICAgIH0gY2F0Y2ggKGphdmEubGFuZy5VbnNhdGlzZmllZExpbmtFcnJvciBlMikgeworICAgICAgICAgIFN5c3RlbS5sb2FkKCIvdXNyL2xpYi9saWJ0dXJib2pwZWcuam5pbGliIik7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgU3lzdGVtLmxvYWQoIiV7X19saWJkaXJ9L2xpYnR1cmJvanBlZy5zbyIpOworICAgICAgICB9IGNhdGNoIChqYXZhLmxhbmcuVW5zYXRpc2ZpZWRMaW5rRXJyb3IgZTMpIHsKKyAgICAgICAgICBTdHJpbmcgbGliZGlyID0gIiV7X19saWJkaXJ9IjsKKyAgICAgICAgICBpZiAobGliZGlyLmVxdWFscygiL29wdC9saWJqcGVnLXR1cmJvL2xpYjY0IikpIHsKKyAgICAgICAgICAgIFN5c3RlbS5sb2FkKCIvb3B0L2xpYmpwZWctdHVyYm8vbGliMzIvbGlidHVyYm9qcGVnLnNvIik7CisgICAgICAgICAgfSBlbHNlIGlmIChsaWJkaXIuZXF1YWxzKCIvb3B0L2xpYmpwZWctdHVyYm8vbGliMzIiKSkgeworICAgICAgICAgICAgU3lzdGVtLmxvYWQoIi9vcHQvbGlianBlZy10dXJiby9saWI2NC9saWJ0dXJib2pwZWcuc28iKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhyb3cgZTM7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQogICB9CiB9OwpkaWZmIC0tZ2l0IGEvamF2YS9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlNjYWxpbmdGYWN0b3IuamF2YSBiL2phdmEvb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpTY2FsaW5nRmFjdG9yLmphdmEKaW5kZXggZDcxY2VlZS4uNGU3MzYzZiAxMDA2NDQKLS0tIGEvamF2YS9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlNjYWxpbmdGYWN0b3IuamF2YQorKysgYi9qYXZhL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKU2NhbGluZ0ZhY3Rvci5qYXZhCkBAIC0zNCw3ICszNCw3IEBACiBwdWJsaWMgY2xhc3MgVEpTY2FsaW5nRmFjdG9yIHsKIAogICBwdWJsaWMgVEpTY2FsaW5nRmFjdG9yKGludCBudW0sIGludCBkZW5vbSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgaWYobnVtIDwgMSB8fCBkZW5vbSA8IDEpCisgICAgaWYgKG51bSA8IDEgfHwgZGVub20gPCAxKQogICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiTnVtZXJhdG9yIGFuZCBkZW5vbWluYXRvciBtdXN0IGJlID49IDEiKTsKICAgICB0aGlzLm51bSA9IG51bTsKICAgICB0aGlzLmRlbm9tID0gZGVub207CmRpZmYgLS1naXQgYS9qYXZhL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtLmphdmEgYi9qYXZhL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtLmphdmEKaW5kZXggMzk5Y2YzYS4uYjQ2NGZmZCAxMDA2NDQKLS0tIGEvamF2YS9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USlRyYW5zZm9ybS5qYXZhCisrKyBiL2phdmEvb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm0uamF2YQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpMjAxMSBELiBSLiBDb21tYW5kZXIuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKTIwMTEsIDIwMTMgRC4gUi4gQ29tbWFuZGVyLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgpAQCAtNDAsNTQgKzQwLDU0IEBACiAgIC8qKgogICAgKiBUaGUgbnVtYmVyIG9mIGxvc3NsZXNzIHRyYW5zZm9ybSBvcGVyYXRpb25zCiAgICAqLwotICBmaW5hbCBwdWJsaWMgc3RhdGljIGludCBOVU1PUCAgICAgICAgID0gODsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTlVNT1AgICAgICAgICA9IDg7CiAgIC8qKgogICAgKiBEbyBub3QgdHJhbnNmb3JtIHRoZSBwb3NpdGlvbiBvZiB0aGUgaW1hZ2UgcGl4ZWxzLgogICAgKi8KLSAgZmluYWwgcHVibGljIHN0YXRpYyBpbnQgT1BfTk9ORSAgICAgICA9IDA7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QX05PTkUgICAgICAgPSAwOwogICAvKioKICAgICogRmxpcCAobWlycm9yKSBpbWFnZSBob3Jpem9udGFsbHkuICBUaGlzIHRyYW5zZm9ybSBpcyBpbXBlcmZlY3QgaWYgdGhlcmUKICAgICogYXJlIGFueSBwYXJ0aWFsIE1DVSBibG9ja3Mgb24gdGhlIHJpZ2h0IGVkZ2UuCiAgICAqIEBzZWUgI09QVF9QRVJGRUNUCiAgICAqLwotICBmaW5hbCBwdWJsaWMgc3RhdGljIGludCBPUF9IRkxJUCAgICAgID0gMTsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BfSEZMSVAgICAgICA9IDE7CiAgIC8qKgogICAgKiBGbGlwIChtaXJyb3IpIGltYWdlIHZlcnRpY2FsbHkuICBUaGlzIHRyYW5zZm9ybSBpcyBpbXBlcmZlY3QgaWYgdGhlcmUgYXJlCiAgICAqIGFueSBwYXJ0aWFsIE1DVSBibG9ja3Mgb24gdGhlIGJvdHRvbSBlZGdlLgogICAgKiBAc2VlICNPUFRfUEVSRkVDVAogICAgKi8KLSAgZmluYWwgcHVibGljIHN0YXRpYyBpbnQgT1BfVkZMSVAgICAgICA9IDI7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QX1ZGTElQICAgICAgPSAyOwogICAvKioKICAgICogVHJhbnNwb3NlIGltYWdlIChmbGlwL21pcnJvciBhbG9uZyB1cHBlciBsZWZ0IHRvIGxvd2VyIHJpZ2h0IGF4aXMpLiAgVGhpcwogICAgKiB0cmFuc2Zvcm0gaXMgYWx3YXlzIHBlcmZlY3QuCiAgICAqIEBzZWUgI09QVF9QRVJGRUNUCiAgICAqLwotICBmaW5hbCBwdWJsaWMgc3RhdGljIGludCBPUF9UUkFOU1BPU0UgID0gMzsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BfVFJBTlNQT1NFICA9IDM7CiAgIC8qKgogICAgKiBUcmFuc3ZlcnNlIHRyYW5zcG9zZSBpbWFnZSAoZmxpcC9taXJyb3IgYWxvbmcgdXBwZXIgcmlnaHQgdG8gbG93ZXIgbGVmdAogICAgKiBheGlzKS4gIFRoaXMgdHJhbnNmb3JtIGlzIGltcGVyZmVjdCBpZiB0aGVyZSBhcmUgYW55IHBhcnRpYWwgTUNVIGJsb2NrcyBpbgogICAgKiB0aGUgaW1hZ2UuCiAgICAqIEBzZWUgI09QVF9QRVJGRUNUCiAgICAqLwotICBmaW5hbCBwdWJsaWMgc3RhdGljIGludCBPUF9UUkFOU1ZFUlNFID0gNDsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BfVFJBTlNWRVJTRSA9IDQ7CiAgIC8qKgogICAgKiBSb3RhdGUgaW1hZ2UgY2xvY2t3aXNlIGJ5IDkwIGRlZ3JlZXMuICBUaGlzIHRyYW5zZm9ybSBpcyBpbXBlcmZlY3QgaWYKICAgICogdGhlcmUgYXJlIGFueSBwYXJ0aWFsIE1DVSBibG9ja3Mgb24gdGhlIGJvdHRvbSBlZGdlLgogICAgKiBAc2VlICNPUFRfUEVSRkVDVAogICAgKi8KLSAgZmluYWwgcHVibGljIHN0YXRpYyBpbnQgT1BfUk9UOTAgICAgICA9IDU7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QX1JPVDkwICAgICAgPSA1OwogICAvKioKICAgICogUm90YXRlIGltYWdlIDE4MCBkZWdyZWVzLiAgVGhpcyB0cmFuc2Zvcm0gaXMgaW1wZXJmZWN0IGlmIHRoZXJlIGFyZSBhbnkKICAgICogcGFydGlhbCBNQ1UgYmxvY2tzIGluIHRoZSBpbWFnZS4KICAgICogQHNlZSAjT1BUX1BFUkZFQ1QKICAgICovCi0gIGZpbmFsIHB1YmxpYyBzdGF0aWMgaW50IE9QX1JPVDE4MCAgICAgPSA2OworICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUF9ST1QxODAgICAgID0gNjsKICAgLyoqCiAgICAqIFJvdGF0ZSBpbWFnZSBjb3VudGVyLWNsb2Nrd2lzZSBieSA5MCBkZWdyZWVzLiAgVGhpcyB0cmFuc2Zvcm0gaXMgaW1wZXJmZWN0CiAgICAqIGlmIHRoZXJlIGFyZSBhbnkgcGFydGlhbCBNQ1UgYmxvY2tzIG9uIHRoZSByaWdodCBlZGdlLgogICAgKiBAc2VlICNPUFRfUEVSRkVDVAogICAgKi8KLSAgZmluYWwgcHVibGljIHN0YXRpYyBpbnQgT1BfUk9UMjcwICAgICA9IDc7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QX1JPVDI3MCAgICAgPSA3OwogCiAKICAgLyoqCkBAIC0xMDMsMjEgKzEwMywyMSBAQAogICAgKiBwYXJ0aWFsIE1DVSBibG9ja3MgdGhhdCBjYW5ub3QgYmUgdHJhbnNmb3JtZWQgd2lsbCBiZSBsZWZ0IGluIHBsYWNlLCB3aGljaAogICAgKiB3aWxsIGNyZWF0ZSBvZGQtbG9va2luZyBzdHJpcHMgb24gdGhlIHJpZ2h0IG9yIGJvdHRvbSBlZGdlIG9mIHRoZSBpbWFnZS4KICAgICovCi0gIGZpbmFsIHB1YmxpYyBzdGF0aWMgaW50IE9QVF9QRVJGRUNUICA9IDE7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QVF9QRVJGRUNUICA9IDE7CiAgIC8qKgogICAgKiBUaGlzIG9wdGlvbiB3aWxsIGRpc2NhcmQgYW55IHBhcnRpYWwgTUNVIGJsb2NrcyB0aGF0IGNhbm5vdCBiZQogICAgKiB0cmFuc2Zvcm1lZC4KICAgICovCi0gIGZpbmFsIHB1YmxpYyBzdGF0aWMgaW50IE9QVF9UUklNICAgICA9IDI7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QVF9UUklNICAgICA9IDI7CiAgIC8qKgogICAgKiBUaGlzIG9wdGlvbiB3aWxsIGVuYWJsZSBsb3NzbGVzcyBjcm9wcGluZy4KICAgICovCi0gIGZpbmFsIHB1YmxpYyBzdGF0aWMgaW50IE9QVF9DUk9QICAgICA9IDQ7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QVF9DUk9QICAgICA9IDQ7CiAgIC8qKgogICAgKiBUaGlzIG9wdGlvbiB3aWxsIGRpc2NhcmQgdGhlIGNvbG9yIGRhdGEgaW4gdGhlIGlucHV0IGltYWdlIGFuZCBwcm9kdWNlCiAgICAqIGEgZ3JheXNjYWxlIG91dHB1dCBpbWFnZS4KICAgICovCi0gIGZpbmFsIHB1YmxpYyBzdGF0aWMgaW50IE9QVF9HUkFZICAgICA9IDg7CisgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QVF9HUkFZICAgICA9IDg7CiAgIC8qKgogICAgKiBUaGlzIG9wdGlvbiB3aWxsIHByZXZlbnQge0BsaW5rIFRKVHJhbnNmb3JtZXIjdHJhbnNmb3JtCiAgICAqIFRKVHJhbnNmb3JtZXIudHJhbnNmb3JtKCl9IGZyb20gb3V0cHV0dGluZyBhIEpQRUcgaW1hZ2UgZm9yIHRoaXMKQEAgLTEyNSw5ICsxMjUsOSBAQAogICAgKiBmaWx0ZXIgdG8gY2FwdHVyZSB0aGUgdHJhbnNmb3JtZWQgRENUIGNvZWZmaWNpZW50cyB3aXRob3V0IHRyYW5zY29kaW5nCiAgICAqIHRoZW0uCiAgICAqLwotICBmaW5hbCBwdWJsaWMgc3RhdGljIGludCBPUFRfTk9PVVRQVVQgPSAxNjsKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BUX05PT1VUUFVUID0gMTY7CiAKLSAgCisKICAgLyoqCiAgICAqIENyZWF0ZSBhIG5ldyBsb3NzbGVzcyB0cmFuc2Zvcm0gaW5zdGFuY2UuCiAgICAqLwpAQCAtMTQ0LDEwICsxNDQsMTIgQEAKICAgICogZGl2aXNpYmxlIGJ5IHRoZSBNQ1UgYmxvY2sgaGVpZ2h0IChzZWUge0BsaW5rIFRKI2dldE1DVUhlaWdodH0pCiAgICAqCiAgICAqIEBwYXJhbSB3IHRoZSB3aWR0aCBvZiB0aGUgY3JvcHBpbmcgcmVnaW9uLiAgU2V0dGluZyB0aGlzIHRvIDAgaXMgdGhlCi0gICAqIGVxdWl2YWxlbnQgb2Ygc2V0dGluZyBpdCB0byB0aGUgd2lkdGggb2YgdGhlIHNvdXJjZSBKUEVHIGltYWdlIC0geC4KKyAgICogZXF1aXZhbGVudCBvZiBzZXR0aW5nIGl0IHRvICh3aWR0aCBvZiB0aGUgc291cmNlIEpQRUcgaW1hZ2UgLQorICAgKiA8Y29kZT54PC9jb2RlPikuCiAgICAqCiAgICAqIEBwYXJhbSBoIHRoZSBoZWlnaHQgb2YgdGhlIGNyb3BwaW5nIHJlZ2lvbi4gIFNldHRpbmcgdGhpcyB0byAwIGlzIHRoZQotICAgKiBlcXVpdmFsZW50IG9mIHNldHRpbmcgaXQgdG8gdGhlIGhlaWdodCBvZiB0aGUgc291cmNlIEpQRUcgaW1hZ2UgLSB5LgorICAgKiBlcXVpdmFsZW50IG9mIHNldHRpbmcgaXQgdG8gKGhlaWdodCBvZiB0aGUgc291cmNlIEpQRUcgaW1hZ2UgLQorICAgKiA8Y29kZT55PC9jb2RlPikuCiAgICAqCiAgICAqIEBwYXJhbSBvcCBvbmUgb2YgdGhlIHRyYW5zZm9ybSBvcGVyYXRpb25zICg8Y29kZT5PUF8qPC9jb2RlPikKICAgICoKQEAgLTE1OCw5ICsxNjAsMTEgQEAKICAgICogVEpDdXN0b21GaWx0ZXJ9IGludGVyZmFjZSwgb3IgbnVsbCBpZiBubyBjdXN0b20gZmlsdGVyIGlzIG5lZWRlZAogICAgKi8KICAgcHVibGljIFRKVHJhbnNmb3JtKGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLCBpbnQgb3AsIGludCBvcHRpb25zLAotICAgIFRKQ3VzdG9tRmlsdGVyIGNmKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgICAgICAgICAgICAgIFRKQ3VzdG9tRmlsdGVyIGNmKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICBzdXBlcih4LCB5LCB3LCBoKTsKLSAgICB0aGlzLm9wID0gb3A7ICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zOyAgdGhpcy5jZiA9IGNmOworICAgIHRoaXMub3AgPSBvcDsKKyAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zOworICAgIHRoaXMuY2YgPSBjZjsKICAgfQogCiAgIC8qKgpAQCAtMTgwLDkgKzE4NCwxMSBAQAogICAgKiBUSkN1c3RvbUZpbHRlcn0gaW50ZXJmYWNlLCBvciBudWxsIGlmIG5vIGN1c3RvbSBmaWx0ZXIgaXMgbmVlZGVkCiAgICAqLwogICBwdWJsaWMgVEpUcmFuc2Zvcm0oUmVjdGFuZ2xlIHIsIGludCBvcCwgaW50IG9wdGlvbnMsCi0gICAgVEpDdXN0b21GaWx0ZXIgY2YpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICAgICAgICAgICAgICAgVEpDdXN0b21GaWx0ZXIgY2YpIHRocm93cyBFeGNlcHRpb24gewogICAgIHN1cGVyKHIpOwotICAgIHRoaXMub3AgPSBvcDsgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7ICB0aGlzLmNmID0gY2Y7CisgICAgdGhpcy5vcCA9IG9wOworICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7CisgICAgdGhpcy5jZiA9IGNmOwogICB9CiAKICAgLyoqCmRpZmYgLS1naXQgYS9qYXZhL29yZy9saWJqcGVndHVyYm8vdHVyYm9qcGVnL1RKVHJhbnNmb3JtZXIuamF2YSBiL2phdmEvb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm1lci5qYXZhCmluZGV4IDZjMDc0ODMuLjMyNDBiMDcgMTAwNjQ0Ci0tLSBhL2phdmEvb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm1lci5qYXZhCisrKyBiL2phdmEvb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpUcmFuc2Zvcm1lci5qYXZhCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykyMDExIEQuIFIuIENvbW1hbmRlci4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpMjAxMSwgMjAxMy0yMDE0IEQuIFIuIENvbW1hbmRlci4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKQEAgLTQyLDcgKzQyLDcgQEAKIAogICAvKioKICAgICogQ3JlYXRlIGEgVHVyYm9KUEVHIGxvc3NsZXNzIHRyYW5zZm9ybWVyIGluc3RhbmNlIGFuZCBhc3NvY2lhdGUgdGhlIEpQRUcKLSAgICogaW1hZ2Ugc3RvcmVkIGluIDxjb2RlPmpwZWdJbWFnZTwvY29kZT4gd2l0aCB0aGUgbmV3bHktY3JlYXRlZCBpbnN0YW5jZS4KKyAgICogaW1hZ2Ugc3RvcmVkIGluIDxjb2RlPmpwZWdJbWFnZTwvY29kZT4gd2l0aCB0aGUgbmV3bHkgY3JlYXRlZCBpbnN0YW5jZS4KICAgICoKICAgICogQHBhcmFtIGpwZWdJbWFnZSBKUEVHIGltYWdlIGJ1ZmZlciAoc2l6ZSBvZiB0aGUgSlBFRyBpbWFnZSBpcyBhc3N1bWVkIHRvCiAgICAqIGJlIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5KQpAQCAtNTUsNyArNTUsNyBAQAogICAvKioKICAgICogQ3JlYXRlIGEgVHVyYm9KUEVHIGxvc3NsZXNzIHRyYW5zZm9ybWVyIGluc3RhbmNlIGFuZCBhc3NvY2lhdGUgdGhlIEpQRUcKICAgICogaW1hZ2Ugb2YgbGVuZ3RoIDxjb2RlPmltYWdlU2l6ZTwvY29kZT4gYnl0ZXMgc3RvcmVkIGluCi0gICAqIDxjb2RlPmpwZWdJbWFnZTwvY29kZT4gd2l0aCB0aGUgbmV3bHktY3JlYXRlZCBpbnN0YW5jZS4KKyAgICogPGNvZGU+anBlZ0ltYWdlPC9jb2RlPiB3aXRoIHRoZSBuZXdseSBjcmVhdGVkIGluc3RhbmNlLgogICAgKgogICAgKiBAcGFyYW0ganBlZ0ltYWdlIEpQRUcgaW1hZ2UgYnVmZmVyCiAgICAqCkBAIC03MywzMSArNzMsMzQgQEAKICAgICogSlBFRyBpbWFnZSBzdHJ1Y3R1cmUgdG8gYW5vdGhlciB3aXRob3V0IGFsdGVyaW5nIHRoZSB2YWx1ZXMgb2YgdGhlCiAgICAqIGNvZWZmaWNpZW50cy4gIFdoaWxlIHRoaXMgaXMgdHlwaWNhbGx5IGZhc3RlciB0aGFuIGRlY29tcHJlc3NpbmcgdGhlCiAgICAqIGltYWdlLCB0cmFuc2Zvcm1pbmcgaXQsIGFuZCByZS1jb21wcmVzc2luZyBpdCwgbG9zc2xlc3MgdHJhbnNmb3JtcyBhcmUgbm90Ci0gICAqIGZyZWUuICBFYWNoIGxvc3NsZXNzIHRyYW5zZm9ybSByZXF1aXJlcyByZWFkaW5nIGFuZCBIdWZmbWFuIGRlY29kaW5nIGFsbAotICAgKiBvZiB0aGUgY29lZmZpY2llbnRzIGluIHRoZSBzb3VyY2UgaW1hZ2UsIHJlZ2FyZGxlc3Mgb2YgdGhlIHNpemUgb2YgdGhlCi0gICAqIGRlc3RpbmF0aW9uIGltYWdlLiAgVGh1cywgdGhpcyBtZXRob2QgcHJvdmlkZXMgYSBtZWFucyBvZiBnZW5lcmF0aW5nCi0gICAqIG11bHRpcGxlIHRyYW5zZm9ybWVkIGltYWdlcyBmcm9tIHRoZSBzYW1lIHNvdXJjZSBvciBvZiBhcHBseWluZyBtdWx0aXBsZQotICAgKiB0cmFuc2Zvcm1hdGlvbnMgc2ltdWx0YW5lb3VzbHksIGluIG9yZGVyIHRvIGVsaW1pbmF0ZSB0aGUgbmVlZCB0byByZWFkIHRoZQotICAgKiBzb3VyY2UgY29lZmZpY2llbnRzIG11bHRpcGxlIHRpbWVzLgorICAgKiBmcmVlLiAgRWFjaCBsb3NzbGVzcyB0cmFuc2Zvcm0gcmVxdWlyZXMgcmVhZGluZyBhbmQgcGVyZm9ybWluZyBIdWZmbWFuCisgICAqIGRlY29kaW5nIG9uIGFsbCBvZiB0aGUgY29lZmZpY2llbnRzIGluIHRoZSBzb3VyY2UgaW1hZ2UsIHJlZ2FyZGxlc3Mgb2YgdGhlCisgICAqIHNpemUgb2YgdGhlIGRlc3RpbmF0aW9uIGltYWdlLiAgVGh1cywgdGhpcyBtZXRob2QgcHJvdmlkZXMgYSBtZWFucyBvZgorICAgKiBnZW5lcmF0aW5nIG11bHRpcGxlIHRyYW5zZm9ybWVkIGltYWdlcyBmcm9tIHRoZSBzYW1lIHNvdXJjZSBvciBvZiBhcHBseWluZworICAgKiBtdWx0aXBsZSB0cmFuc2Zvcm1hdGlvbnMgc2ltdWx0YW5lb3VzbHksIGluIG9yZGVyIHRvIGVsaW1pbmF0ZSB0aGUgbmVlZCB0bworICAgKiByZWFkIHRoZSBzb3VyY2UgY29lZmZpY2llbnRzIG11bHRpcGxlIHRpbWVzLgogICAgKgogICAgKiBAcGFyYW0gZHN0QnVmcyBhbiBhcnJheSBvZiBpbWFnZSBidWZmZXJzLiAgPGNvZGU+ZHN0YnVmc1tpXTwvY29kZT4gd2lsbAogICAgKiByZWNlaXZlIGEgSlBFRyBpbWFnZSB0aGF0IGhhcyBiZWVuIHRyYW5zZm9ybWVkIHVzaW5nIHRoZSBwYXJhbWV0ZXJzIGluCiAgICAqIDxjb2RlPnRyYW5zZm9ybXNbaV08L2NvZGU+LiAgVXNlIHtAbGluayBUSiNidWZTaXplfSB0byBkZXRlcm1pbmUgdGhlCi0gICAqIG1heGltdW0gc2l6ZSBmb3IgZWFjaCBidWZmZXIgYmFzZWQgb24gdGhlIGNyb3BwZWQgd2lkdGggYW5kIGhlaWdodC4KKyAgICogbWF4aW11bSBzaXplIGZvciBlYWNoIGJ1ZmZlciBiYXNlZCBvbiB0aGUgdHJhbnNmb3JtZWQgb3IgY3JvcHBlZCB3aWR0aCBhbmQKKyAgICogaGVpZ2h0IGFuZCB0aGUgbGV2ZWwgb2Ygc3Vic2FtcGxpbmcgdXNlZCBpbiB0aGUgc291cmNlIGltYWdlLgogICAgKgogICAgKiBAcGFyYW0gdHJhbnNmb3JtcyBhbiBhcnJheSBvZiB7QGxpbmsgVEpUcmFuc2Zvcm19IGluc3RhbmNlcywgZWFjaCBvZgogICAgKiB3aGljaCBzcGVjaWZpZXMgdGhlIHRyYW5zZm9ybSBwYXJhbWV0ZXJzIGFuZC9vciBjcm9wcGluZyByZWdpb24gZm9yIHRoZQogICAgKiBjb3JyZXNwb25kaW5nIHRyYW5zZm9ybWVkIG91dHB1dCBpbWFnZQogICAgKgotICAgKiBAcGFyYW0gZmxhZ3MgdGhlIGJpdHdpc2UgT1Igb2Ygb25lIG9yIG1vcmUgb2Yge0BsaW5rIFRKIFRKLkZMQUdfKn0KKyAgICogQHBhcmFtIGZsYWdzIHRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mCisgICAqIHtAbGluayBUSiNGTEFHX0JPVFRPTVVQIFRKLkZMQUdfKn0KICAgICovCiAgIHB1YmxpYyB2b2lkIHRyYW5zZm9ybShieXRlW11bXSBkc3RCdWZzLCBUSlRyYW5zZm9ybVtdIHRyYW5zZm9ybXMsCi0gICAgaW50IGZsYWdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBpZihqcGVnQnVmID09IG51bGwpIHRocm93IG5ldyBFeGNlcHRpb24oIkpQRUcgYnVmZmVyIG5vdCBpbml0aWFsaXplZCIpOworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBpZiAoanBlZ0J1ZiA9PSBudWxsKQorICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiSlBFRyBidWZmZXIgbm90IGluaXRpYWxpemVkIik7CiAgICAgdHJhbnNmb3JtZWRTaXplcyA9IHRyYW5zZm9ybShqcGVnQnVmLCBqcGVnQnVmU2l6ZSwgZHN0QnVmcywgdHJhbnNmb3JtcywKLSAgICAgIGZsYWdzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzKTsKICAgfQotICAKKwogICAvKioKICAgICogTG9zc2xlc3NseSB0cmFuc2Zvcm0gdGhlIEpQRUcgaW1hZ2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdHJhbnNmb3JtZXIKICAgICogaW5zdGFuY2UgYW5kIHJldHVybiBhbiBhcnJheSBvZiB7QGxpbmsgVEpEZWNvbXByZXNzb3J9IGluc3RhbmNlcywgZWFjaCBvZgpAQCAtMTEwLDM3ICsxMTMsMzggQEAKICAgICogQHJldHVybiBhbiBhcnJheSBvZiB7QGxpbmsgVEpEZWNvbXByZXNzb3J9IGluc3RhbmNlcywgZWFjaCBvZgogICAgKiB3aGljaCBoYXMgYSB0cmFuc2Zvcm1lZCBKUEVHIGltYWdlIGFzc29jaWF0ZWQgd2l0aCBpdAogICAgKgotICAgKiBAcGFyYW0gZmxhZ3MgdGhlIGJpdHdpc2UgT1Igb2Ygb25lIG9yIG1vcmUgb2Yge0BsaW5rIFRKIFRKLkZMQUdfKn0KKyAgICogQHBhcmFtIGZsYWdzIHRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mCisgICAqIHtAbGluayBUSiNGTEFHX0JPVFRPTVVQIFRKLkZMQUdfKn0KICAgICovCiAgIHB1YmxpYyBUSkRlY29tcHJlc3NvcltdIHRyYW5zZm9ybShUSlRyYW5zZm9ybVtdIHRyYW5zZm9ybXMsIGludCBmbGFncykKICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICBieXRlW11bXSBkc3RCdWZzID0gbmV3IGJ5dGVbdHJhbnNmb3Jtcy5sZW5ndGhdW107Ci0gICAgaWYoanBlZ1dpZHRoIDwgMSB8fCBqcGVnSGVpZ2h0IDwgMSkKKyAgICBpZiAoanBlZ1dpZHRoIDwgMSB8fCBqcGVnSGVpZ2h0IDwgMSkKICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkpQRUcgYnVmZmVyIG5vdCBpbml0aWFsaXplZCIpOwotICAgIGZvcihpbnQgaSA9IDA7IGkgPCB0cmFuc2Zvcm1zLmxlbmd0aDsgaSsrKSB7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0cmFuc2Zvcm1zLmxlbmd0aDsgaSsrKSB7CiAgICAgICBpbnQgdyA9IGpwZWdXaWR0aCwgaCA9IGpwZWdIZWlnaHQ7Ci0gICAgICBpZigodHJhbnNmb3Jtc1tpXS5vcHRpb25zICYgVEpUcmFuc2Zvcm0uT1BUX0NST1ApICE9IDApIHsKLSAgICAgICAgaWYodHJhbnNmb3Jtc1tpXS53aWR0aCAhPSAwKSB3ID0gdHJhbnNmb3Jtc1tpXS53aWR0aDsKLSAgICAgICAgaWYodHJhbnNmb3Jtc1tpXS5oZWlnaHQgIT0gMCkgaCA9IHRyYW5zZm9ybXNbaV0uaGVpZ2h0OworICAgICAgaWYgKCh0cmFuc2Zvcm1zW2ldLm9wdGlvbnMgJiBUSlRyYW5zZm9ybS5PUFRfQ1JPUCkgIT0gMCkgeworICAgICAgICBpZiAodHJhbnNmb3Jtc1tpXS53aWR0aCAhPSAwKSB3ID0gdHJhbnNmb3Jtc1tpXS53aWR0aDsKKyAgICAgICAgaWYgKHRyYW5zZm9ybXNbaV0uaGVpZ2h0ICE9IDApIGggPSB0cmFuc2Zvcm1zW2ldLmhlaWdodDsKICAgICAgIH0KICAgICAgIGRzdEJ1ZnNbaV0gPSBuZXcgYnl0ZVtUSi5idWZTaXplKHcsIGgsIGpwZWdTdWJzYW1wKV07CiAgICAgfQogICAgIFRKRGVjb21wcmVzc29yW10gdGpkID0gbmV3IFRKRGVjb21wcmVzc29yW3RyYW5zZm9ybXMubGVuZ3RoXTsKICAgICB0cmFuc2Zvcm0oZHN0QnVmcywgdHJhbnNmb3JtcywgZmxhZ3MpOwotICAgIGZvcihpbnQgaSA9IDA7IGkgPCB0cmFuc2Zvcm1zLmxlbmd0aDsgaSsrKQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHJhbnNmb3Jtcy5sZW5ndGg7IGkrKykKICAgICAgIHRqZFtpXSA9IG5ldyBUSkRlY29tcHJlc3Nvcihkc3RCdWZzW2ldLCB0cmFuc2Zvcm1lZFNpemVzW2ldKTsKICAgICByZXR1cm4gdGpkOwogICB9Ci0gIAorCiAgIC8qKgotICAgKiBSZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIHNpemVzIG9mIHRoZSB0cmFuc2Zvcm1lZCBKUEVHIGltYWdlcyBmcm9tCi0gICAqIHRoZSBtb3N0IHJlY2VudCBjYWxsIHRvIHtAbGluayAjdHJhbnNmb3JtIHRyYW5zZm9ybSgpfS4KKyAgICogUmV0dXJucyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBzaXplcyBvZiB0aGUgdHJhbnNmb3JtZWQgSlBFRyBpbWFnZXMKKyAgICogZ2VuZXJhdGVkIGJ5IHRoZSBtb3N0IHJlY2VudCB0cmFuc2Zvcm0gb3BlcmF0aW9uLgogICAgKgotICAgKiBAcmV0dXJuIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIHNpemVzIG9mIHRoZSB0cmFuc2Zvcm1lZCBKUEVHIGltYWdlcyBmcm9tCi0gICAqIHRoZSBtb3N0IHJlY2VudCBjYWxsIHRvIHtAbGluayAjdHJhbnNmb3JtIHRyYW5zZm9ybSgpfQorICAgKiBAcmV0dXJuIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIHNpemVzIG9mIHRoZSB0cmFuc2Zvcm1lZCBKUEVHIGltYWdlcworICAgKiBnZW5lcmF0ZWQgYnkgdGhlIG1vc3QgcmVjZW50IHRyYW5zZm9ybSBvcGVyYXRpb24KICAgICovCiAgIHB1YmxpYyBpbnRbXSBnZXRUcmFuc2Zvcm1lZFNpemVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgaWYodHJhbnNmb3JtZWRTaXplcyA9PSBudWxsKQorICAgIGlmICh0cmFuc2Zvcm1lZFNpemVzID09IG51bGwpCiAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJObyBpbWFnZSBoYXMgYmVlbiB0cmFuc2Zvcm1lZCB5ZXQiKTsKICAgICByZXR1cm4gdHJhbnNmb3JtZWRTaXplczsKICAgfQpkaWZmIC0tZ2l0IGEvamF2YS9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USi5oIGIvamF2YS9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USi5oCmluZGV4IGM4OTIwODYuLmQ3YjAzMmEgMTAwNjQ0Ci0tLSBhL2phdmEvb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEouaAorKysgYi9qYXZhL29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKLmgKQEAgLTU1LDYgKzU1LDEwIEBACiAjZGVmaW5lIG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKX0ZMQUdfRk9SQ0VTU0UzIDEyOEwKICN1bmRlZiBvcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9GTEFHX0ZBU1RVUFNBTVBMRQogI2RlZmluZSBvcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9GTEFHX0ZBU1RVUFNBTVBMRSAyNTZMCisjdW5kZWYgb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpfRkxBR19GQVNURENUCisjZGVmaW5lIG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKX0ZMQUdfRkFTVERDVCAyMDQ4TAorI3VuZGVmIG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKX0ZMQUdfQUNDVVJBVEVEQ1QKKyNkZWZpbmUgb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpfRkxBR19BQ0NVUkFURURDVCA0MDk2TAogLyoKICAqIENsYXNzOiAgICAgb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEoKICAqIE1ldGhvZDogICAgYnVmU2l6ZQpkaWZmIC0tZ2l0IGEvamF2YS9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkNvbXByZXNzb3IuaCBiL2phdmEvb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpDb21wcmVzc29yLmgKaW5kZXggNTlmODFlMy4uMmZjOTEzNiAxMDA2NDQKLS0tIGEvamF2YS9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkNvbXByZXNzb3IuaAorKysgYi9qYXZhL29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKQ29tcHJlc3Nvci5oCkBAIC0zNCw2ICszNCwxNCBAQAogLyoKICAqIENsYXNzOiAgICAgb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpDb21wcmVzc29yCiAgKiBNZXRob2Q6ICAgIGNvbXByZXNzCisgKiBTaWduYXR1cmU6IChbQklJSUlJSVtCSUlJKUkKKyAqLworSk5JRVhQT1JUIGppbnQgSk5JQ0FMTCBKYXZhX29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKQ29tcHJlc3Nvcl9jb21wcmVzc19fXzNCSUlJSUlJXzNCSUlJCisgIChKTklFbnYgKiwgam9iamVjdCwgamJ5dGVBcnJheSwgamludCwgamludCwgamludCwgamludCwgamludCwgamludCwgamJ5dGVBcnJheSwgamludCwgamludCwgamludCk7CisKKy8qCisgKiBDbGFzczogICAgIG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKQ29tcHJlc3NvcgorICogTWV0aG9kOiAgICBjb21wcmVzcwogICogU2lnbmF0dXJlOiAoW0lJSUlJW0JJSUkpSQogICovCiBKTklFWFBPUlQgamludCBKTklDQUxMIEphdmFfb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpDb21wcmVzc29yX2NvbXByZXNzX19fM0lJSUlJXzNCSUlJCkBAIC00MSw2ICs0OSwxNCBAQAogCiAvKgogICogQ2xhc3M6ICAgICBvcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkNvbXByZXNzb3IKKyAqIE1ldGhvZDogICAgY29tcHJlc3MKKyAqIFNpZ25hdHVyZTogKFtJSUlJSUlJW0JJSUkpSQorICovCitKTklFWFBPUlQgamludCBKTklDQUxMIEphdmFfb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpDb21wcmVzc29yX2NvbXByZXNzX19fM0lJSUlJSUlfM0JJSUkKKyAgKEpOSUVudiAqLCBqb2JqZWN0LCBqaW50QXJyYXksIGppbnQsIGppbnQsIGppbnQsIGppbnQsIGppbnQsIGppbnQsIGpieXRlQXJyYXksIGppbnQsIGppbnQsIGppbnQpOworCisvKgorICogQ2xhc3M6ICAgICBvcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkNvbXByZXNzb3IKICAqIE1ldGhvZDogICAgZW5jb2RlWVVWCiAgKiBTaWduYXR1cmU6IChbQklJSUlbQklJKVYKICAqLwpkaWZmIC0tZ2l0IGEvamF2YS9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkRlY29tcHJlc3Nvci5oIGIvamF2YS9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkRlY29tcHJlc3Nvci5oCmluZGV4IDZiNjcyOTYuLmY3OThhNzcgMTAwNjQ0Ci0tLSBhL2phdmEvb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpEZWNvbXByZXNzb3IuaAorKysgYi9qYXZhL29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKRGVjb21wcmVzc29yLmgKQEAgLTQyLDYgKzQyLDE0IEBACiAvKgogICogQ2xhc3M6ICAgICBvcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkRlY29tcHJlc3NvcgogICogTWV0aG9kOiAgICBkZWNvbXByZXNzCisgKiBTaWduYXR1cmU6IChbQklbQklJSUlJSUkpVgorICovCitKTklFWFBPUlQgdm9pZCBKTklDQUxMIEphdmFfb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpEZWNvbXByZXNzb3JfZGVjb21wcmVzc19fXzNCSV8zQklJSUlJSUkKKyAgKEpOSUVudiAqLCBqb2JqZWN0LCBqYnl0ZUFycmF5LCBqaW50LCBqYnl0ZUFycmF5LCBqaW50LCBqaW50LCBqaW50LCBqaW50LCBqaW50LCBqaW50LCBqaW50KTsKKworLyoKKyAqIENsYXNzOiAgICAgb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpEZWNvbXByZXNzb3IKKyAqIE1ldGhvZDogICAgZGVjb21wcmVzcwogICogU2lnbmF0dXJlOiAoW0JJW0lJSUlJSSlWCiAgKi8KIEpOSUVYUE9SVCB2b2lkIEpOSUNBTEwgSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkRlY29tcHJlc3Nvcl9kZWNvbXByZXNzX19fM0JJXzNJSUlJSUkKQEAgLTQ5LDYgKzU3LDE0IEBACiAKIC8qCiAgKiBDbGFzczogICAgIG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKRGVjb21wcmVzc29yCisgKiBNZXRob2Q6ICAgIGRlY29tcHJlc3MKKyAqIFNpZ25hdHVyZTogKFtCSVtJSUlJSUlJSSlWCisgKi8KK0pOSUVYUE9SVCB2b2lkIEpOSUNBTEwgSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkRlY29tcHJlc3Nvcl9kZWNvbXByZXNzX19fM0JJXzNJSUlJSUlJSQorICAoSk5JRW52ICosIGpvYmplY3QsIGpieXRlQXJyYXksIGppbnQsIGppbnRBcnJheSwgamludCwgamludCwgamludCwgamludCwgamludCwgamludCwgamludCk7CisKKy8qCisgKiBDbGFzczogICAgIG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKRGVjb21wcmVzc29yCiAgKiBNZXRob2Q6ICAgIGRlY29tcHJlc3NUb1lVVgogICogU2lnbmF0dXJlOiAoW0JJW0JJKVYKICAqLwpkaWZmIC0tZ2l0IGEvamNhcGltaW4uYyBiL2pjYXBpbWluLmMKaW5kZXggMjBiYTllOS4uNjAxYmI3MSAxMDA2NDQKLS0tIGEvamNhcGltaW4uYworKysgYi9qY2FwaW1pbi5jCkBAIC0zMywxMiArMzMsMTIgQEAKICAgaW50IGk7CiAKICAgLyogR3VhcmQgYWdhaW5zdCB2ZXJzaW9uIG1pc21hdGNoZXMgYmV0d2VlbiBsaWJyYXJ5IGFuZCBjYWxsZXIuICovCi0gIGNpbmZvLT5tZW0gPSBOVUxMOwkJLyogc28ganBlZ19kZXN0cm95IGtub3dzIG1lbSBtZ3Igbm90IGNhbGxlZCAqLworICBjaW5mby0+bWVtID0gTlVMTDsgICAgICAgICAgICAvKiBzbyBqcGVnX2Rlc3Ryb3kga25vd3MgbWVtIG1nciBub3QgY2FsbGVkICovCiAgIGlmICh2ZXJzaW9uICE9IEpQRUdfTElCX1ZFUlNJT04pCiAgICAgRVJSRVhJVDIoY2luZm8sIEpFUlJfQkFEX0xJQl9WRVJTSU9OLCBKUEVHX0xJQl9WRVJTSU9OLCB2ZXJzaW9uKTsKICAgaWYgKHN0cnVjdHNpemUgIT0gU0laRU9GKHN0cnVjdCBqcGVnX2NvbXByZXNzX3N0cnVjdCkpCi0gICAgRVJSRVhJVDIoY2luZm8sIEpFUlJfQkFEX1NUUlVDVF9TSVpFLCAKLQkgICAgIChpbnQpIFNJWkVPRihzdHJ1Y3QganBlZ19jb21wcmVzc19zdHJ1Y3QpLCAoaW50KSBzdHJ1Y3RzaXplKTsKKyAgICBFUlJFWElUMihjaW5mbywgSkVSUl9CQURfU1RSVUNUX1NJWkUsCisgICAgICAgICAgICAgKGludCkgU0laRU9GKHN0cnVjdCBqcGVnX2NvbXByZXNzX3N0cnVjdCksIChpbnQpIHN0cnVjdHNpemUpOwogCiAgIC8qIEZvciBkZWJ1Z2dpbmcgcHVycG9zZXMsIHdlIHplcm8gdGhlIHdob2xlIG1hc3RlciBzdHJ1Y3R1cmUuCiAgICAqIEJ1dCB0aGUgYXBwbGljYXRpb24gaGFzIGFscmVhZHkgc2V0IHRoZSBlcnIgcG9pbnRlciwgYW5kIG1heSBoYXZlIHNldApAQCAtODUsNyArODUsNyBAQAogCiAgIGNpbmZvLT5zY3JpcHRfc3BhY2UgPSBOVUxMOwogCi0gIGNpbmZvLT5pbnB1dF9nYW1tYSA9IDEuMDsJLyogaW4gY2FzZSBhcHBsaWNhdGlvbiBmb3JnZXRzICovCisgIGNpbmZvLT5pbnB1dF9nYW1tYSA9IDEuMDsgICAgIC8qIGluIGNhc2UgYXBwbGljYXRpb24gZm9yZ2V0cyAqLwogCiAgIC8qIE9LLCBJJ20gcmVhZHkgKi8KICAgY2luZm8tPmdsb2JhbF9zdGF0ZSA9IENTVEFURV9TVEFSVDsKQEAgLTE3MywxNSArMTczLDE1IEBACiAgICAgKCpjaW5mby0+bWFzdGVyLT5wcmVwYXJlX2Zvcl9wYXNzKSAoY2luZm8pOwogICAgIGZvciAoaU1DVV9yb3cgPSAwOyBpTUNVX3JvdyA8IGNpbmZvLT50b3RhbF9pTUNVX3Jvd3M7IGlNQ1Vfcm93KyspIHsKICAgICAgIGlmIChjaW5mby0+cHJvZ3Jlc3MgIT0gTlVMTCkgewotCWNpbmZvLT5wcm9ncmVzcy0+cGFzc19jb3VudGVyID0gKGxvbmcpIGlNQ1Vfcm93OwotCWNpbmZvLT5wcm9ncmVzcy0+cGFzc19saW1pdCA9IChsb25nKSBjaW5mby0+dG90YWxfaU1DVV9yb3dzOwotCSgqY2luZm8tPnByb2dyZXNzLT5wcm9ncmVzc19tb25pdG9yKSAoKGpfY29tbW9uX3B0cikgY2luZm8pOworICAgICAgICBjaW5mby0+cHJvZ3Jlc3MtPnBhc3NfY291bnRlciA9IChsb25nKSBpTUNVX3JvdzsKKyAgICAgICAgY2luZm8tPnByb2dyZXNzLT5wYXNzX2xpbWl0ID0gKGxvbmcpIGNpbmZvLT50b3RhbF9pTUNVX3Jvd3M7CisgICAgICAgICgqY2luZm8tPnByb2dyZXNzLT5wcm9ncmVzc19tb25pdG9yKSAoKGpfY29tbW9uX3B0cikgY2luZm8pOwogICAgICAgfQogICAgICAgLyogV2UgYnlwYXNzIHRoZSBtYWluIGNvbnRyb2xsZXIgYW5kIGludm9rZSBjb2VmIGNvbnRyb2xsZXIgZGlyZWN0bHk7CiAgICAgICAgKiBhbGwgd29yayBpcyBiZWluZyBkb25lIGZyb20gdGhlIGNvZWZmaWNpZW50IGJ1ZmZlci4KICAgICAgICAqLwogICAgICAgaWYgKCEgKCpjaW5mby0+Y29lZi0+Y29tcHJlc3NfZGF0YSkgKGNpbmZvLCAoSlNBTVBJTUFHRSkgTlVMTCkpCi0JRVJSRVhJVChjaW5mbywgSkVSUl9DQU5UX1NVU1BFTkQpOworICAgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0NBTlRfU1VTUEVORCk7CiAgICAgfQogICAgICgqY2luZm8tPm1hc3Rlci0+ZmluaXNoX3Bhc3MpIChjaW5mbyk7CiAgIH0KQEAgLTIwMiw3ICsyMDIsNyBAQAogCiBHTE9CQUwodm9pZCkKIGpwZWdfd3JpdGVfbWFya2VyIChqX2NvbXByZXNzX3B0ciBjaW5mbywgaW50IG1hcmtlciwKLQkJICAgY29uc3QgSk9DVEVUICpkYXRhcHRyLCB1bnNpZ25lZCBpbnQgZGF0YWxlbikKKyAgICAgICAgICAgICAgICAgICBjb25zdCBKT0NURVQgKmRhdGFwdHIsIHVuc2lnbmVkIGludCBkYXRhbGVuKQogewogICBKTUVUSE9EKHZvaWQsIHdyaXRlX21hcmtlcl9ieXRlLCAoal9jb21wcmVzc19wdHIgaW5mbywgaW50IHZhbCkpOwogCkBAIC0yMTMsNyArMjEzLDcgQEAKICAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfU1RBVEUsIGNpbmZvLT5nbG9iYWxfc3RhdGUpOwogCiAgICgqY2luZm8tPm1hcmtlci0+d3JpdGVfbWFya2VyX2hlYWRlcikgKGNpbmZvLCBtYXJrZXIsIGRhdGFsZW4pOwotICB3cml0ZV9tYXJrZXJfYnl0ZSA9IGNpbmZvLT5tYXJrZXItPndyaXRlX21hcmtlcl9ieXRlOwkvKiBjb3B5IGZvciBzcGVlZCAqLworICB3cml0ZV9tYXJrZXJfYnl0ZSA9IGNpbmZvLT5tYXJrZXItPndyaXRlX21hcmtlcl9ieXRlOyAvKiBjb3B5IGZvciBzcGVlZCAqLwogICB3aGlsZSAoZGF0YWxlbi0tKSB7CiAgICAgKCp3cml0ZV9tYXJrZXJfYnl0ZSkgKGNpbmZvLCAqZGF0YXB0cik7CiAgICAgZGF0YXB0cisrOwpAQCAtMjQ4LDE0ICsyNDgsMTQgQEAKICAqIFRvIHByb2R1Y2UgYSBwYWlyIG9mIGZpbGVzIGNvbnRhaW5pbmcgYWJicmV2aWF0ZWQgdGFibGVzIGFuZCBhYmJyZXZpYXRlZAogICogaW1hZ2UgZGF0YSwgb25lIHdvdWxkIHByb2NlZWQgYXMgZm9sbG93czoKICAqCi0gKgkJaW5pdGlhbGl6ZSBKUEVHIG9iamVjdAotICoJCXNldCBKUEVHIHBhcmFtZXRlcnMKLSAqCQlzZXQgZGVzdGluYXRpb24gdG8gdGFibGUgZmlsZQotICoJCWpwZWdfd3JpdGVfdGFibGVzKGNpbmZvKTsKLSAqCQlzZXQgZGVzdGluYXRpb24gdG8gaW1hZ2UgZmlsZQotICoJCWpwZWdfc3RhcnRfY29tcHJlc3MoY2luZm8sIEZBTFNFKTsKLSAqCQl3cml0ZSBkYXRhLi4uCi0gKgkJanBlZ19maW5pc2hfY29tcHJlc3MoY2luZm8pOworICogICAgICAgICAgICAgIGluaXRpYWxpemUgSlBFRyBvYmplY3QKKyAqICAgICAgICAgICAgICBzZXQgSlBFRyBwYXJhbWV0ZXJzCisgKiAgICAgICAgICAgICAgc2V0IGRlc3RpbmF0aW9uIHRvIHRhYmxlIGZpbGUKKyAqICAgICAgICAgICAgICBqcGVnX3dyaXRlX3RhYmxlcyhjaW5mbyk7CisgKiAgICAgICAgICAgICAgc2V0IGRlc3RpbmF0aW9uIHRvIGltYWdlIGZpbGUKKyAqICAgICAgICAgICAgICBqcGVnX3N0YXJ0X2NvbXByZXNzKGNpbmZvLCBGQUxTRSk7CisgKiAgICAgICAgICAgICAgd3JpdGUgZGF0YS4uLgorICogICAgICAgICAgICAgIGpwZWdfZmluaXNoX2NvbXByZXNzKGNpbmZvKTsKICAqCiAgKiBqcGVnX3dyaXRlX3RhYmxlcyBoYXMgdGhlIHNpZGUgZWZmZWN0IG9mIG1hcmtpbmcgYWxsIHRhYmxlcyB3cml0dGVuCiAgKiAoc2FtZSBhcyBqcGVnX3N1cHByZXNzX3RhYmxlcyguLi4sIFRSVUUpKS4gIFRodXMgYSBzdWJzZXF1ZW50IHN0YXJ0X2NvbXByZXNzCmRpZmYgLS1naXQgYS9qY2FwaXN0ZC5jIGIvamNhcGlzdGQuYwppbmRleCBjMDMyMGIxLi4xNjdmMDIwIDEwMDY0NAotLS0gYS9qY2FwaXN0ZC5jCisrKyBiL2pjYXBpc3RkLmMKQEAgLTQxLDcgKzQxLDcgQEAKICAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfU1RBVEUsIGNpbmZvLT5nbG9iYWxfc3RhdGUpOwogCiAgIGlmICh3cml0ZV9hbGxfdGFibGVzKQotICAgIGpwZWdfc3VwcHJlc3NfdGFibGVzKGNpbmZvLCBGQUxTRSk7CS8qIG1hcmsgYWxsIHRhYmxlcyB0byBiZSB3cml0dGVuICovCisgICAganBlZ19zdXBwcmVzc190YWJsZXMoY2luZm8sIEZBTFNFKTsgLyogbWFyayBhbGwgdGFibGVzIHRvIGJlIHdyaXR0ZW4gKi8KIAogICAvKiAoUmUpaW5pdGlhbGl6ZSBlcnJvciBtZ3IgYW5kIGRlc3RpbmF0aW9uIG1vZHVsZXMgKi8KICAgKCpjaW5mby0+ZXJyLT5yZXNldF9lcnJvcl9tZ3IpICgoal9jb21tb25fcHRyKSBjaW5mbyk7CkBAIC03NSw3ICs3NSw3IEBACiAKIEdMT0JBTChKRElNRU5TSU9OKQoganBlZ193cml0ZV9zY2FubGluZXMgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUEFSUkFZIHNjYW5saW5lcywKLQkJICAgICAgSkRJTUVOU0lPTiBudW1fbGluZXMpCisgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBudW1fbGluZXMpCiB7CiAgIEpESU1FTlNJT04gcm93X2N0ciwgcm93c19sZWZ0OwogCkBAIC0xMTgsNyArMTE4LDcgQEAKIAogR0xPQkFMKEpESU1FTlNJT04pCiBqcGVnX3dyaXRlX3Jhd19kYXRhIChqX2NvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBJTUFHRSBkYXRhLAotCQkgICAgIEpESU1FTlNJT04gbnVtX2xpbmVzKQorICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBudW1fbGluZXMpCiB7CiAgIEpESU1FTlNJT04gbGluZXNfcGVyX2lNQ1Vfcm93OwogCmRpZmYgLS1naXQgYS9qY2FyaXRoLmMgYi9qY2FyaXRoLmMKaW5kZXggYTljYTFjMy4uZThiYjI4MSAxMDA2NDQKLS0tIGEvamNhcml0aC5jCisrKyBiL2pjYXJpdGguYwpAQCAtMzQsOCArMzQsOCBAQAogICBpbnQgbGFzdF9kY192YWxbTUFYX0NPTVBTX0lOX1NDQU5dOyAvKiBsYXN0IERDIGNvZWYgZm9yIGVhY2ggY29tcG9uZW50ICovCiAgIGludCBkY19jb250ZXh0W01BWF9DT01QU19JTl9TQ0FOXTsgLyogY29udGV4dCBpbmRleCBmb3IgREMgY29uZGl0aW9uaW5nICovCiAKLSAgdW5zaWduZWQgaW50IHJlc3RhcnRzX3RvX2dvOwkvKiBNQ1VzIGxlZnQgaW4gdGhpcyByZXN0YXJ0IGludGVydmFsICovCi0gIGludCBuZXh0X3Jlc3RhcnRfbnVtOwkJLyogbmV4dCByZXN0YXJ0IG51bWJlciB0byB3cml0ZSAoMC03KSAqLworICB1bnNpZ25lZCBpbnQgcmVzdGFydHNfdG9fZ287ICAvKiBNQ1VzIGxlZnQgaW4gdGhpcyByZXN0YXJ0IGludGVydmFsICovCisgIGludCBuZXh0X3Jlc3RhcnRfbnVtOyAgICAgICAgIC8qIG5leHQgcmVzdGFydCBudW1iZXIgdG8gd3JpdGUgKDAtNykgKi8KIAogICAvKiBQb2ludGVycyB0byBzdGF0aXN0aWNzIGFyZWFzICh0aGVzZSB3b3Jrc3BhY2VzIGhhdmUgaW1hZ2UgbGlmZXNwYW4pICovCiAgIHVuc2lnbmVkIGNoYXIgKiBkY19zdGF0c1tOVU1fQVJJVEhfVEJMU107CkBAIC0xMDEsMTQgKzEwMSwxNCBAQAogICovCiAKICNpZmRlZiBSSUdIVF9TSElGVF9JU19VTlNJR05FRAotI2RlZmluZSBJU0hJRlRfVEVNUFMJaW50IGlzaGlmdF90ZW1wOworI2RlZmluZSBJU0hJRlRfVEVNUFMgICAgaW50IGlzaGlmdF90ZW1wOwogI2RlZmluZSBJUklHSFRfU0hJRlQoeCxzaGZ0KSAgXAotCSgoaXNoaWZ0X3RlbXAgPSAoeCkpIDwgMCA/IFwKLQkgKGlzaGlmdF90ZW1wID4+IChzaGZ0KSkgfCAoKH4wKSA8PCAoMTYtKHNoZnQpKSkgOiBcCi0JIChpc2hpZnRfdGVtcCA+PiAoc2hmdCkpKQorICAgICAgICAoKGlzaGlmdF90ZW1wID0gKHgpKSA8IDAgPyBcCisgICAgICAgICAoaXNoaWZ0X3RlbXAgPj4gKHNoZnQpKSB8ICgofjApIDw8ICgxNi0oc2hmdCkpKSA6IFwKKyAgICAgICAgIChpc2hpZnRfdGVtcCA+PiAoc2hmdCkpKQogI2Vsc2UKICNkZWZpbmUgSVNISUZUX1RFTVBTCi0jZGVmaW5lIElSSUdIVF9TSElGVCh4LHNoZnQpCSgoeCkgPj4gKHNoZnQpKQorI2RlZmluZSBJUklHSFRfU0hJRlQoeCxzaGZ0KSAgICAoKHgpID4+IChzaGZ0KSkKICNlbmRpZgogCiAKQEAgLTE0OSwxMSArMTQ5LDExIEBACiAgICAgLyogT25lIGZpbmFsIG92ZXJmbG93IGhhcyB0byBiZSBoYW5kbGVkICovCiAgICAgaWYgKGUtPmJ1ZmZlciA+PSAwKSB7CiAgICAgICBpZiAoZS0+emMpCi0JZG8gZW1pdF9ieXRlKDB4MDAsIGNpbmZvKTsKLQl3aGlsZSAoLS1lLT56Yyk7CisgICAgICAgIGRvIGVtaXRfYnl0ZSgweDAwLCBjaW5mbyk7CisgICAgICAgIHdoaWxlICgtLWUtPnpjKTsKICAgICAgIGVtaXRfYnl0ZShlLT5idWZmZXIgKyAxLCBjaW5mbyk7CiAgICAgICBpZiAoZS0+YnVmZmVyICsgMSA9PSAweEZGKQotCWVtaXRfYnl0ZSgweDAwLCBjaW5mbyk7CisgICAgICAgIGVtaXRfYnl0ZSgweDAwLCBjaW5mbyk7CiAgICAgfQogICAgIGUtPnpjICs9IGUtPnNjOyAgLyogY2Fycnktb3ZlciBjb252ZXJ0cyBzdGFja2VkIDB4RkYgYnl0ZXMgdG8gMHgwMCAqLwogICAgIGUtPnNjID0gMDsKQEAgLTE2MiwxNyArMTYyLDE3IEBACiAgICAgICArK2UtPnpjOwogICAgIGVsc2UgaWYgKGUtPmJ1ZmZlciA+PSAwKSB7CiAgICAgICBpZiAoZS0+emMpCi0JZG8gZW1pdF9ieXRlKDB4MDAsIGNpbmZvKTsKLQl3aGlsZSAoLS1lLT56Yyk7CisgICAgICAgIGRvIGVtaXRfYnl0ZSgweDAwLCBjaW5mbyk7CisgICAgICAgIHdoaWxlICgtLWUtPnpjKTsKICAgICAgIGVtaXRfYnl0ZShlLT5idWZmZXIsIGNpbmZvKTsKICAgICB9CiAgICAgaWYgKGUtPnNjKSB7CiAgICAgICBpZiAoZS0+emMpCi0JZG8gZW1pdF9ieXRlKDB4MDAsIGNpbmZvKTsKLQl3aGlsZSAoLS1lLT56Yyk7CisgICAgICAgIGRvIGVtaXRfYnl0ZSgweDAwLCBjaW5mbyk7CisgICAgICAgIHdoaWxlICgtLWUtPnpjKTsKICAgICAgIGRvIHsKLQllbWl0X2J5dGUoMHhGRiwgY2luZm8pOwotCWVtaXRfYnl0ZSgweDAwLCBjaW5mbyk7CisgICAgICAgIGVtaXRfYnl0ZSgweEZGLCBjaW5mbyk7CisgICAgICAgIGVtaXRfYnl0ZSgweDAwLCBjaW5mbyk7CiAgICAgICB9IHdoaWxlICgtLWUtPnNjKTsKICAgICB9CiAgIH0KQEAgLTE4Nyw3ICsxODcsNyBAQAogICAgIGlmIChlLT5jICYgMHg3RjgwMEwpIHsKICAgICAgIGVtaXRfYnl0ZSgoZS0+YyA+PiAxMSkgJiAweEZGLCBjaW5mbyk7CiAgICAgICBpZiAoKChlLT5jID4+IDExKSAmIDB4RkYpID09IDB4RkYpCi0JZW1pdF9ieXRlKDB4MDAsIGNpbmZvKTsKKyAgICAgICAgZW1pdF9ieXRlKDB4MDAsIGNpbmZvKTsKICAgICB9CiAgIH0KIH0KQEAgLTIxNiw3ICsyMTYsNyBAQAogICovCiAKIExPQ0FMKHZvaWQpCi1hcml0aF9lbmNvZGUgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCB1bnNpZ25lZCBjaGFyICpzdCwgaW50IHZhbCkgCithcml0aF9lbmNvZGUgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCB1bnNpZ25lZCBjaGFyICpzdCwgaW50IHZhbCkKIHsKICAgcmVnaXN0ZXIgYXJpdGhfZW50cm9weV9wdHIgZSA9IChhcml0aF9lbnRyb3B5X3B0cikgY2luZm8tPmVudHJvcHk7CiAgIHJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIgbmwsIG5tOwpAQCAtMjI3LDkgKzIyNyw5IEBACiAgICAqIFFlIHZhbHVlcyBhbmQgcHJvYmFiaWxpdHkgZXN0aW1hdGlvbiBzdGF0ZSBtYWNoaW5lCiAgICAqLwogICBzdiA9ICpzdDsKLSAgcWUgPSBqcGVnX2FyaXRhYltzdiAmIDB4N0ZdOwkvKiA9PiBRZV9WYWx1ZSAqLwotICBubCA9IHFlICYgMHhGRjsgcWUgPj49IDg7CS8qIE5leHRfSW5kZXhfTFBTICsgU3dpdGNoX01QUyAqLwotICBubSA9IHFlICYgMHhGRjsgcWUgPj49IDg7CS8qIE5leHRfSW5kZXhfTVBTICovCisgIHFlID0ganBlZ19hcml0YWJbc3YgJiAweDdGXTsgIC8qID0+IFFlX1ZhbHVlICovCisgIG5sID0gcWUgJiAweEZGOyBxZSA+Pj0gODsgICAgIC8qIE5leHRfSW5kZXhfTFBTICsgU3dpdGNoX01QUyAqLworICBubSA9IHFlICYgMHhGRjsgcWUgPj49IDg7ICAgICAvKiBOZXh0X0luZGV4X01QUyAqLwogCiAgIC8qIEVuY29kZSAmIGVzdGltYXRpb24gcHJvY2VkdXJlcyBwZXIgc2VjdGlvbnMgRC4xLjQgJiBELjEuNSAqLwogICBlLT5hIC09IHFlOwpAQCAtMjQzLDcgKzI0Myw3IEBACiAgICAgICBlLT5jICs9IGUtPmE7CiAgICAgICBlLT5hID0gcWU7CiAgICAgfQotICAgICpzdCA9IChzdiAmIDB4ODApIF4gbmw7CS8qIEVzdGltYXRlX2FmdGVyX0xQUyAqLworICAgICpzdCA9IChzdiAmIDB4ODApIF4gbmw7ICAgICAvKiBFc3RpbWF0ZV9hZnRlcl9MUFMgKi8KICAgfSBlbHNlIHsKICAgICAvKiBFbmNvZGUgdGhlIG1vcmUgcHJvYmFibGUgc3ltYm9sICovCiAgICAgaWYgKGUtPmEgPj0gMHg4MDAwTCkKQEAgLTI1NSw3ICsyNTUsNyBAQAogICAgICAgZS0+YyArPSBlLT5hOwogICAgICAgZS0+YSA9IHFlOwogICAgIH0KLSAgICAqc3QgPSAoc3YgJiAweDgwKSBeIG5tOwkvKiBFc3RpbWF0ZV9hZnRlcl9NUFMgKi8KKyAgICAqc3QgPSAoc3YgJiAweDgwKSBeIG5tOyAgICAgLyogRXN0aW1hdGVfYWZ0ZXJfTVBTICovCiAgIH0KIAogICAvKiBSZW5vcm1hbGl6YXRpb24gJiBkYXRhIG91dHB1dCBwZXIgc2VjdGlvbiBELjEuNiAqLwpAQCAtMjY2LDQzICsyNjYsNDMgQEAKICAgICAgIC8qIEFub3RoZXIgYnl0ZSBpcyByZWFkeSBmb3Igb3V0cHV0ICovCiAgICAgICB0ZW1wID0gZS0+YyA+PiAxOTsKICAgICAgIGlmICh0ZW1wID4gMHhGRikgewotCS8qIEhhbmRsZSBvdmVyZmxvdyBvdmVyIGFsbCBzdGFja2VkIDB4RkYgYnl0ZXMgKi8KLQlpZiAoZS0+YnVmZmVyID49IDApIHsKLQkgIGlmIChlLT56YykKLQkgICAgZG8gZW1pdF9ieXRlKDB4MDAsIGNpbmZvKTsKLQkgICAgd2hpbGUgKC0tZS0+emMpOwotCSAgZW1pdF9ieXRlKGUtPmJ1ZmZlciArIDEsIGNpbmZvKTsKLQkgIGlmIChlLT5idWZmZXIgKyAxID09IDB4RkYpCi0JICAgIGVtaXRfYnl0ZSgweDAwLCBjaW5mbyk7Ci0JfQotCWUtPnpjICs9IGUtPnNjOyAgLyogY2Fycnktb3ZlciBjb252ZXJ0cyBzdGFja2VkIDB4RkYgYnl0ZXMgdG8gMHgwMCAqLwotCWUtPnNjID0gMDsKLQkvKiBOb3RlOiBUaGUgMyBzcGFjZXIgYml0cyBpbiB0aGUgQyByZWdpc3RlciBndWFyYW50ZWUKLQkgKiB0aGF0IHRoZSBuZXcgYnVmZmVyIGJ5dGUgY2FuJ3QgYmUgMHhGRiBoZXJlCi0JICogKHNlZSBwYWdlIDE2MCBpbiB0aGUgUCZNIEpQRUcgYm9vaykuICovCi0JZS0+YnVmZmVyID0gdGVtcCAmIDB4RkY7ICAvKiBuZXcgb3V0cHV0IGJ5dGUsIG1pZ2h0IG92ZXJmbG93IGxhdGVyICovCisgICAgICAgIC8qIEhhbmRsZSBvdmVyZmxvdyBvdmVyIGFsbCBzdGFja2VkIDB4RkYgYnl0ZXMgKi8KKyAgICAgICAgaWYgKGUtPmJ1ZmZlciA+PSAwKSB7CisgICAgICAgICAgaWYgKGUtPnpjKQorICAgICAgICAgICAgZG8gZW1pdF9ieXRlKDB4MDAsIGNpbmZvKTsKKyAgICAgICAgICAgIHdoaWxlICgtLWUtPnpjKTsKKyAgICAgICAgICBlbWl0X2J5dGUoZS0+YnVmZmVyICsgMSwgY2luZm8pOworICAgICAgICAgIGlmIChlLT5idWZmZXIgKyAxID09IDB4RkYpCisgICAgICAgICAgICBlbWl0X2J5dGUoMHgwMCwgY2luZm8pOworICAgICAgICB9CisgICAgICAgIGUtPnpjICs9IGUtPnNjOyAgLyogY2Fycnktb3ZlciBjb252ZXJ0cyBzdGFja2VkIDB4RkYgYnl0ZXMgdG8gMHgwMCAqLworICAgICAgICBlLT5zYyA9IDA7CisgICAgICAgIC8qIE5vdGU6IFRoZSAzIHNwYWNlciBiaXRzIGluIHRoZSBDIHJlZ2lzdGVyIGd1YXJhbnRlZQorICAgICAgICAgKiB0aGF0IHRoZSBuZXcgYnVmZmVyIGJ5dGUgY2FuJ3QgYmUgMHhGRiBoZXJlCisgICAgICAgICAqIChzZWUgcGFnZSAxNjAgaW4gdGhlIFAmTSBKUEVHIGJvb2spLiAqLworICAgICAgICBlLT5idWZmZXIgPSB0ZW1wICYgMHhGRjsgIC8qIG5ldyBvdXRwdXQgYnl0ZSwgbWlnaHQgb3ZlcmZsb3cgbGF0ZXIgKi8KICAgICAgIH0gZWxzZSBpZiAodGVtcCA9PSAweEZGKSB7Ci0JKytlLT5zYzsgIC8qIHN0YWNrIDB4RkYgYnl0ZSAod2hpY2ggbWlnaHQgb3ZlcmZsb3cgbGF0ZXIpICovCisgICAgICAgICsrZS0+c2M7ICAvKiBzdGFjayAweEZGIGJ5dGUgKHdoaWNoIG1pZ2h0IG92ZXJmbG93IGxhdGVyKSAqLwogICAgICAgfSBlbHNlIHsKLQkvKiBPdXRwdXQgYWxsIHN0YWNrZWQgMHhGRiBieXRlcywgdGhleSB3aWxsIG5vdCBvdmVyZmxvdyBhbnkgbW9yZSAqLwotCWlmIChlLT5idWZmZXIgPT0gMCkKLQkgICsrZS0+emM7Ci0JZWxzZSBpZiAoZS0+YnVmZmVyID49IDApIHsKLQkgIGlmIChlLT56YykKLQkgICAgZG8gZW1pdF9ieXRlKDB4MDAsIGNpbmZvKTsKLQkgICAgd2hpbGUgKC0tZS0+emMpOwotCSAgZW1pdF9ieXRlKGUtPmJ1ZmZlciwgY2luZm8pOwotCX0KLQlpZiAoZS0+c2MpIHsKLQkgIGlmIChlLT56YykKLQkgICAgZG8gZW1pdF9ieXRlKDB4MDAsIGNpbmZvKTsKLQkgICAgd2hpbGUgKC0tZS0+emMpOwotCSAgZG8gewotCSAgICBlbWl0X2J5dGUoMHhGRiwgY2luZm8pOwotCSAgICBlbWl0X2J5dGUoMHgwMCwgY2luZm8pOwotCSAgfSB3aGlsZSAoLS1lLT5zYyk7Ci0JfQotCWUtPmJ1ZmZlciA9IHRlbXAgJiAweEZGOyAgLyogbmV3IG91dHB1dCBieXRlIChjYW4gc3RpbGwgb3ZlcmZsb3cpICovCisgICAgICAgIC8qIE91dHB1dCBhbGwgc3RhY2tlZCAweEZGIGJ5dGVzLCB0aGV5IHdpbGwgbm90IG92ZXJmbG93IGFueSBtb3JlICovCisgICAgICAgIGlmIChlLT5idWZmZXIgPT0gMCkKKyAgICAgICAgICArK2UtPnpjOworICAgICAgICBlbHNlIGlmIChlLT5idWZmZXIgPj0gMCkgeworICAgICAgICAgIGlmIChlLT56YykKKyAgICAgICAgICAgIGRvIGVtaXRfYnl0ZSgweDAwLCBjaW5mbyk7CisgICAgICAgICAgICB3aGlsZSAoLS1lLT56Yyk7CisgICAgICAgICAgZW1pdF9ieXRlKGUtPmJ1ZmZlciwgY2luZm8pOworICAgICAgICB9CisgICAgICAgIGlmIChlLT5zYykgeworICAgICAgICAgIGlmIChlLT56YykKKyAgICAgICAgICAgIGRvIGVtaXRfYnl0ZSgweDAwLCBjaW5mbyk7CisgICAgICAgICAgICB3aGlsZSAoLS1lLT56Yyk7CisgICAgICAgICAgZG8geworICAgICAgICAgICAgZW1pdF9ieXRlKDB4RkYsIGNpbmZvKTsKKyAgICAgICAgICAgIGVtaXRfYnl0ZSgweDAwLCBjaW5mbyk7CisgICAgICAgICAgfSB3aGlsZSAoLS1lLT5zYyk7CisgICAgICAgIH0KKyAgICAgICAgZS0+YnVmZmVyID0gdGVtcCAmIDB4RkY7ICAvKiBuZXcgb3V0cHV0IGJ5dGUgKGNhbiBzdGlsbCBvdmVyZmxvdykgKi8KICAgICAgIH0KICAgICAgIGUtPmMgJj0gMHg3RkZGRkw7CiAgICAgICBlLT5jdCArPSA4OwpAQCAtMzk4LDQ1ICszOTgsNDUgQEAKICAgICAvKiBGaWd1cmUgRi40OiBFbmNvZGVfRENfRElGRiAqLwogICAgIGlmICgodiA9IG0gLSBlbnRyb3B5LT5sYXN0X2RjX3ZhbFtjaV0pID09IDApIHsKICAgICAgIGFyaXRoX2VuY29kZShjaW5mbywgc3QsIDApOwotICAgICAgZW50cm9weS0+ZGNfY29udGV4dFtjaV0gPSAwOwkvKiB6ZXJvIGRpZmYgY2F0ZWdvcnkgKi8KKyAgICAgIGVudHJvcHktPmRjX2NvbnRleHRbY2ldID0gMDsgICAgICAvKiB6ZXJvIGRpZmYgY2F0ZWdvcnkgKi8KICAgICB9IGVsc2UgewogICAgICAgZW50cm9weS0+bGFzdF9kY192YWxbY2ldID0gbTsKICAgICAgIGFyaXRoX2VuY29kZShjaW5mbywgc3QsIDEpOwogICAgICAgLyogRmlndXJlIEYuNjogRW5jb2Rpbmcgbm9uemVybyB2YWx1ZSB2ICovCiAgICAgICAvKiBGaWd1cmUgRi43OiBFbmNvZGluZyB0aGUgc2lnbiBvZiB2ICovCiAgICAgICBpZiAodiA+IDApIHsKLQlhcml0aF9lbmNvZGUoY2luZm8sIHN0ICsgMSwgMCk7CS8qIFRhYmxlIEYuNDogU1MgPSBTMCArIDEgKi8KLQlzdCArPSAyOwkJCS8qIFRhYmxlIEYuNDogU1AgPSBTMCArIDIgKi8KLQllbnRyb3B5LT5kY19jb250ZXh0W2NpXSA9IDQ7CS8qIHNtYWxsIHBvc2l0aXZlIGRpZmYgY2F0ZWdvcnkgKi8KKyAgICAgICAgYXJpdGhfZW5jb2RlKGNpbmZvLCBzdCArIDEsIDApOyAvKiBUYWJsZSBGLjQ6IFNTID0gUzAgKyAxICovCisgICAgICAgIHN0ICs9IDI7ICAgICAgICAgICAgICAgICAgICAgICAgLyogVGFibGUgRi40OiBTUCA9IFMwICsgMiAqLworICAgICAgICBlbnRyb3B5LT5kY19jb250ZXh0W2NpXSA9IDQ7ICAgIC8qIHNtYWxsIHBvc2l0aXZlIGRpZmYgY2F0ZWdvcnkgKi8KICAgICAgIH0gZWxzZSB7Ci0JdiA9IC12OwotCWFyaXRoX2VuY29kZShjaW5mbywgc3QgKyAxLCAxKTsJLyogVGFibGUgRi40OiBTUyA9IFMwICsgMSAqLwotCXN0ICs9IDM7CQkJLyogVGFibGUgRi40OiBTTiA9IFMwICsgMyAqLwotCWVudHJvcHktPmRjX2NvbnRleHRbY2ldID0gODsJLyogc21hbGwgbmVnYXRpdmUgZGlmZiBjYXRlZ29yeSAqLworICAgICAgICB2ID0gLXY7CisgICAgICAgIGFyaXRoX2VuY29kZShjaW5mbywgc3QgKyAxLCAxKTsgLyogVGFibGUgRi40OiBTUyA9IFMwICsgMSAqLworICAgICAgICBzdCArPSAzOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRhYmxlIEYuNDogU04gPSBTMCArIDMgKi8KKyAgICAgICAgZW50cm9weS0+ZGNfY29udGV4dFtjaV0gPSA4OyAgICAvKiBzbWFsbCBuZWdhdGl2ZSBkaWZmIGNhdGVnb3J5ICovCiAgICAgICB9CiAgICAgICAvKiBGaWd1cmUgRi44OiBFbmNvZGluZyB0aGUgbWFnbml0dWRlIGNhdGVnb3J5IG9mIHYgKi8KICAgICAgIG0gPSAwOwogICAgICAgaWYgKHYgLT0gMSkgewotCWFyaXRoX2VuY29kZShjaW5mbywgc3QsIDEpOwotCW0gPSAxOwotCXYyID0gdjsKLQlzdCA9IGVudHJvcHktPmRjX3N0YXRzW3RibF0gKyAyMDsgLyogVGFibGUgRi40OiBYMSA9IDIwICovCi0Jd2hpbGUgKHYyID4+PSAxKSB7Ci0JICBhcml0aF9lbmNvZGUoY2luZm8sIHN0LCAxKTsKLQkgIG0gPDw9IDE7Ci0JICBzdCArPSAxOwotCX0KKyAgICAgICAgYXJpdGhfZW5jb2RlKGNpbmZvLCBzdCwgMSk7CisgICAgICAgIG0gPSAxOworICAgICAgICB2MiA9IHY7CisgICAgICAgIHN0ID0gZW50cm9weS0+ZGNfc3RhdHNbdGJsXSArIDIwOyAvKiBUYWJsZSBGLjQ6IFgxID0gMjAgKi8KKyAgICAgICAgd2hpbGUgKHYyID4+PSAxKSB7CisgICAgICAgICAgYXJpdGhfZW5jb2RlKGNpbmZvLCBzdCwgMSk7CisgICAgICAgICAgbSA8PD0gMTsKKyAgICAgICAgICBzdCArPSAxOworICAgICAgICB9CiAgICAgICB9CiAgICAgICBhcml0aF9lbmNvZGUoY2luZm8sIHN0LCAwKTsKICAgICAgIC8qIFNlY3Rpb24gRi4xLjQuNC4xLjI6IEVzdGFibGlzaCBkY19jb250ZXh0IGNvbmRpdGlvbmluZyBjYXRlZ29yeSAqLwogICAgICAgaWYgKG0gPCAoaW50KSAoKDFMIDw8IGNpbmZvLT5hcml0aF9kY19MW3RibF0pID4+IDEpKQotCWVudHJvcHktPmRjX2NvbnRleHRbY2ldID0gMDsJLyogemVybyBkaWZmIGNhdGVnb3J5ICovCisgICAgICAgIGVudHJvcHktPmRjX2NvbnRleHRbY2ldID0gMDsgICAgLyogemVybyBkaWZmIGNhdGVnb3J5ICovCiAgICAgICBlbHNlIGlmIChtID4gKGludCkgKCgxTCA8PCBjaW5mby0+YXJpdGhfZGNfVVt0YmxdKSA+PiAxKSkKLQllbnRyb3B5LT5kY19jb250ZXh0W2NpXSArPSA4OwkvKiBsYXJnZSBkaWZmIGNhdGVnb3J5ICovCisgICAgICAgIGVudHJvcHktPmRjX2NvbnRleHRbY2ldICs9IDg7ICAgLyogbGFyZ2UgZGlmZiBjYXRlZ29yeSAqLwogICAgICAgLyogRmlndXJlIEYuOTogRW5jb2RpbmcgdGhlIG1hZ25pdHVkZSBiaXQgcGF0dGVybiBvZiB2ICovCiAgICAgICBzdCArPSAxNDsKICAgICAgIHdoaWxlIChtID4+PSAxKQotCWFyaXRoX2VuY29kZShjaW5mbywgc3QsIChtICYgdikgPyAxIDogMCk7CisgICAgICAgIGFyaXRoX2VuY29kZShjaW5mbywgc3QsIChtICYgdikgPyAxIDogMCk7CiAgICAgfQogICB9CiAKQEAgLTQ5MSwyMSArNDkxLDIxIEBACiAgIC8qIEZpZ3VyZSBGLjU6IEVuY29kZV9BQ19Db2VmZmljaWVudHMgKi8KICAgZm9yIChrID0gY2luZm8tPlNzOyBrIDw9IGtlOyBrKyspIHsKICAgICBzdCA9IGVudHJvcHktPmFjX3N0YXRzW3RibF0gKyAzICogKGsgLSAxKTsKLSAgICBhcml0aF9lbmNvZGUoY2luZm8sIHN0LCAwKTsJCS8qIEVPQiBkZWNpc2lvbiAqLworICAgIGFyaXRoX2VuY29kZShjaW5mbywgc3QsIDApOyAgICAgICAgIC8qIEVPQiBkZWNpc2lvbiAqLwogICAgIGZvciAoOzspIHsKICAgICAgIGlmICgodiA9ICgqYmxvY2spW2pwZWdfbmF0dXJhbF9vcmRlcltrXV0pID49IDApIHsKLQlpZiAodiA+Pj0gY2luZm8tPkFsKSB7Ci0JICBhcml0aF9lbmNvZGUoY2luZm8sIHN0ICsgMSwgMSk7Ci0JICBhcml0aF9lbmNvZGUoY2luZm8sIGVudHJvcHktPmZpeGVkX2JpbiwgMCk7Ci0JICBicmVhazsKLQl9CisgICAgICAgIGlmICh2ID4+PSBjaW5mby0+QWwpIHsKKyAgICAgICAgICBhcml0aF9lbmNvZGUoY2luZm8sIHN0ICsgMSwgMSk7CisgICAgICAgICAgYXJpdGhfZW5jb2RlKGNpbmZvLCBlbnRyb3B5LT5maXhlZF9iaW4sIDApOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICB9IGVsc2UgewotCXYgPSAtdjsKLQlpZiAodiA+Pj0gY2luZm8tPkFsKSB7Ci0JICBhcml0aF9lbmNvZGUoY2luZm8sIHN0ICsgMSwgMSk7Ci0JICBhcml0aF9lbmNvZGUoY2luZm8sIGVudHJvcHktPmZpeGVkX2JpbiwgMSk7Ci0JICBicmVhazsKLQl9CisgICAgICAgIHYgPSAtdjsKKyAgICAgICAgaWYgKHYgPj49IGNpbmZvLT5BbCkgeworICAgICAgICAgIGFyaXRoX2VuY29kZShjaW5mbywgc3QgKyAxLCAxKTsKKyAgICAgICAgICBhcml0aF9lbmNvZGUoY2luZm8sIGVudHJvcHktPmZpeGVkX2JpbiwgMSk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgIH0KICAgICAgIGFyaXRoX2VuY29kZShjaW5mbywgc3QgKyAxLCAwKTsgc3QgKz0gMzsgaysrOwogICAgIH0KQEAgLTUxNywxNSArNTE3LDE1IEBACiAgICAgICBtID0gMTsKICAgICAgIHYyID0gdjsKICAgICAgIGlmICh2MiA+Pj0gMSkgewotCWFyaXRoX2VuY29kZShjaW5mbywgc3QsIDEpOwotCW0gPDw9IDE7Ci0Jc3QgPSBlbnRyb3B5LT5hY19zdGF0c1t0YmxdICsKLQkgICAgIChrIDw9IGNpbmZvLT5hcml0aF9hY19LW3RibF0gPyAxODkgOiAyMTcpOwotCXdoaWxlICh2MiA+Pj0gMSkgewotCSAgYXJpdGhfZW5jb2RlKGNpbmZvLCBzdCwgMSk7Ci0JICBtIDw8PSAxOwotCSAgc3QgKz0gMTsKLQl9CisgICAgICAgIGFyaXRoX2VuY29kZShjaW5mbywgc3QsIDEpOworICAgICAgICBtIDw8PSAxOworICAgICAgICBzdCA9IGVudHJvcHktPmFjX3N0YXRzW3RibF0gKworICAgICAgICAgICAgIChrIDw9IGNpbmZvLT5hcml0aF9hY19LW3RibF0gPyAxODkgOiAyMTcpOworICAgICAgICB3aGlsZSAodjIgPj49IDEpIHsKKyAgICAgICAgICBhcml0aF9lbmNvZGUoY2luZm8sIHN0LCAxKTsKKyAgICAgICAgICBtIDw8PSAxOworICAgICAgICAgIHN0ICs9IDE7CisgICAgICAgIH0KICAgICAgIH0KICAgICB9CiAgICAgYXJpdGhfZW5jb2RlKGNpbmZvLCBzdCwgMCk7CkBAIC01NjYsNyArNTY2LDcgQEAKICAgICBlbnRyb3B5LT5yZXN0YXJ0c190b19nby0tOwogICB9CiAKLSAgc3QgPSBlbnRyb3B5LT5maXhlZF9iaW47CS8qIHVzZSBmaXhlZCBwcm9iYWJpbGl0eSBlc3RpbWF0aW9uICovCisgIHN0ID0gZW50cm9weS0+Zml4ZWRfYmluOyAgICAgIC8qIHVzZSBmaXhlZCBwcm9iYWJpbGl0eSBlc3RpbWF0aW9uICovCiAgIEFsID0gY2luZm8tPkFsOwogCiAgIC8qIEVuY29kZSB0aGUgTUNVIGRhdGEgYmxvY2tzICovCkBAIC02MzUsMjkgKzYzNSwyOSBAQAogICBmb3IgKGsgPSBjaW5mby0+U3M7IGsgPD0ga2U7IGsrKykgewogICAgIHN0ID0gZW50cm9weS0+YWNfc3RhdHNbdGJsXSArIDMgKiAoayAtIDEpOwogICAgIGlmIChrID4ga2V4KQotICAgICAgYXJpdGhfZW5jb2RlKGNpbmZvLCBzdCwgMCk7CS8qIEVPQiBkZWNpc2lvbiAqLworICAgICAgYXJpdGhfZW5jb2RlKGNpbmZvLCBzdCwgMCk7ICAgICAgIC8qIEVPQiBkZWNpc2lvbiAqLwogICAgIGZvciAoOzspIHsKICAgICAgIGlmICgodiA9ICgqYmxvY2spW2pwZWdfbmF0dXJhbF9vcmRlcltrXV0pID49IDApIHsKLQlpZiAodiA+Pj0gY2luZm8tPkFsKSB7Ci0JICBpZiAodiA+PiAxKQkJCS8qIHByZXZpb3VzbHkgbm9uemVybyBjb2VmICovCi0JICAgIGFyaXRoX2VuY29kZShjaW5mbywgc3QgKyAyLCAodiAmIDEpKTsKLQkgIGVsc2UgewkJCS8qIG5ld2x5IG5vbnplcm8gY29lZiAqLwotCSAgICBhcml0aF9lbmNvZGUoY2luZm8sIHN0ICsgMSwgMSk7Ci0JICAgIGFyaXRoX2VuY29kZShjaW5mbywgZW50cm9weS0+Zml4ZWRfYmluLCAwKTsKLQkgIH0KLQkgIGJyZWFrOwotCX0KKyAgICAgICAgaWYgKHYgPj49IGNpbmZvLT5BbCkgeworICAgICAgICAgIGlmICh2ID4+IDEpICAgICAgICAgICAgICAgICAgIC8qIHByZXZpb3VzbHkgbm9uemVybyBjb2VmICovCisgICAgICAgICAgICBhcml0aF9lbmNvZGUoY2luZm8sIHN0ICsgMiwgKHYgJiAxKSk7CisgICAgICAgICAgZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogbmV3bHkgbm9uemVybyBjb2VmICovCisgICAgICAgICAgICBhcml0aF9lbmNvZGUoY2luZm8sIHN0ICsgMSwgMSk7CisgICAgICAgICAgICBhcml0aF9lbmNvZGUoY2luZm8sIGVudHJvcHktPmZpeGVkX2JpbiwgMCk7CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICB9IGVsc2UgewotCXYgPSAtdjsKLQlpZiAodiA+Pj0gY2luZm8tPkFsKSB7Ci0JICBpZiAodiA+PiAxKQkJCS8qIHByZXZpb3VzbHkgbm9uemVybyBjb2VmICovCi0JICAgIGFyaXRoX2VuY29kZShjaW5mbywgc3QgKyAyLCAodiAmIDEpKTsKLQkgIGVsc2UgewkJCS8qIG5ld2x5IG5vbnplcm8gY29lZiAqLwotCSAgICBhcml0aF9lbmNvZGUoY2luZm8sIHN0ICsgMSwgMSk7Ci0JICAgIGFyaXRoX2VuY29kZShjaW5mbywgZW50cm9weS0+Zml4ZWRfYmluLCAxKTsKLQkgIH0KLQkgIGJyZWFrOwotCX0KKyAgICAgICAgdiA9IC12OworICAgICAgICBpZiAodiA+Pj0gY2luZm8tPkFsKSB7CisgICAgICAgICAgaWYgKHYgPj4gMSkgICAgICAgICAgICAgICAgICAgLyogcHJldmlvdXNseSBub256ZXJvIGNvZWYgKi8KKyAgICAgICAgICAgIGFyaXRoX2VuY29kZShjaW5mbywgc3QgKyAyLCAodiAmIDEpKTsKKyAgICAgICAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBuZXdseSBub256ZXJvIGNvZWYgKi8KKyAgICAgICAgICAgIGFyaXRoX2VuY29kZShjaW5mbywgc3QgKyAxLCAxKTsKKyAgICAgICAgICAgIGFyaXRoX2VuY29kZShjaW5mbywgZW50cm9weS0+Zml4ZWRfYmluLCAxKTsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgIH0KICAgICAgIGFyaXRoX2VuY29kZShjaW5mbywgc3QgKyAxLCAwKTsgc3QgKz0gMzsgaysrOwogICAgIH0KQEAgLTcxMyw0NSArNzEzLDQ1IEBACiAgICAgLyogRmlndXJlIEYuNDogRW5jb2RlX0RDX0RJRkYgKi8KICAgICBpZiAoKHYgPSAoKmJsb2NrKVswXSAtIGVudHJvcHktPmxhc3RfZGNfdmFsW2NpXSkgPT0gMCkgewogICAgICAgYXJpdGhfZW5jb2RlKGNpbmZvLCBzdCwgMCk7Ci0gICAgICBlbnRyb3B5LT5kY19jb250ZXh0W2NpXSA9IDA7CS8qIHplcm8gZGlmZiBjYXRlZ29yeSAqLworICAgICAgZW50cm9weS0+ZGNfY29udGV4dFtjaV0gPSAwOyAgICAgIC8qIHplcm8gZGlmZiBjYXRlZ29yeSAqLwogICAgIH0gZWxzZSB7CiAgICAgICBlbnRyb3B5LT5sYXN0X2RjX3ZhbFtjaV0gPSAoKmJsb2NrKVswXTsKICAgICAgIGFyaXRoX2VuY29kZShjaW5mbywgc3QsIDEpOwogICAgICAgLyogRmlndXJlIEYuNjogRW5jb2Rpbmcgbm9uemVybyB2YWx1ZSB2ICovCiAgICAgICAvKiBGaWd1cmUgRi43OiBFbmNvZGluZyB0aGUgc2lnbiBvZiB2ICovCiAgICAgICBpZiAodiA+IDApIHsKLQlhcml0aF9lbmNvZGUoY2luZm8sIHN0ICsgMSwgMCk7CS8qIFRhYmxlIEYuNDogU1MgPSBTMCArIDEgKi8KLQlzdCArPSAyOwkJCS8qIFRhYmxlIEYuNDogU1AgPSBTMCArIDIgKi8KLQllbnRyb3B5LT5kY19jb250ZXh0W2NpXSA9IDQ7CS8qIHNtYWxsIHBvc2l0aXZlIGRpZmYgY2F0ZWdvcnkgKi8KKyAgICAgICAgYXJpdGhfZW5jb2RlKGNpbmZvLCBzdCArIDEsIDApOyAvKiBUYWJsZSBGLjQ6IFNTID0gUzAgKyAxICovCisgICAgICAgIHN0ICs9IDI7ICAgICAgICAgICAgICAgICAgICAgICAgLyogVGFibGUgRi40OiBTUCA9IFMwICsgMiAqLworICAgICAgICBlbnRyb3B5LT5kY19jb250ZXh0W2NpXSA9IDQ7ICAgIC8qIHNtYWxsIHBvc2l0aXZlIGRpZmYgY2F0ZWdvcnkgKi8KICAgICAgIH0gZWxzZSB7Ci0JdiA9IC12OwotCWFyaXRoX2VuY29kZShjaW5mbywgc3QgKyAxLCAxKTsJLyogVGFibGUgRi40OiBTUyA9IFMwICsgMSAqLwotCXN0ICs9IDM7CQkJLyogVGFibGUgRi40OiBTTiA9IFMwICsgMyAqLwotCWVudHJvcHktPmRjX2NvbnRleHRbY2ldID0gODsJLyogc21hbGwgbmVnYXRpdmUgZGlmZiBjYXRlZ29yeSAqLworICAgICAgICB2ID0gLXY7CisgICAgICAgIGFyaXRoX2VuY29kZShjaW5mbywgc3QgKyAxLCAxKTsgLyogVGFibGUgRi40OiBTUyA9IFMwICsgMSAqLworICAgICAgICBzdCArPSAzOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRhYmxlIEYuNDogU04gPSBTMCArIDMgKi8KKyAgICAgICAgZW50cm9weS0+ZGNfY29udGV4dFtjaV0gPSA4OyAgICAvKiBzbWFsbCBuZWdhdGl2ZSBkaWZmIGNhdGVnb3J5ICovCiAgICAgICB9CiAgICAgICAvKiBGaWd1cmUgRi44OiBFbmNvZGluZyB0aGUgbWFnbml0dWRlIGNhdGVnb3J5IG9mIHYgKi8KICAgICAgIG0gPSAwOwogICAgICAgaWYgKHYgLT0gMSkgewotCWFyaXRoX2VuY29kZShjaW5mbywgc3QsIDEpOwotCW0gPSAxOwotCXYyID0gdjsKLQlzdCA9IGVudHJvcHktPmRjX3N0YXRzW3RibF0gKyAyMDsgLyogVGFibGUgRi40OiBYMSA9IDIwICovCi0Jd2hpbGUgKHYyID4+PSAxKSB7Ci0JICBhcml0aF9lbmNvZGUoY2luZm8sIHN0LCAxKTsKLQkgIG0gPDw9IDE7Ci0JICBzdCArPSAxOwotCX0KKyAgICAgICAgYXJpdGhfZW5jb2RlKGNpbmZvLCBzdCwgMSk7CisgICAgICAgIG0gPSAxOworICAgICAgICB2MiA9IHY7CisgICAgICAgIHN0ID0gZW50cm9weS0+ZGNfc3RhdHNbdGJsXSArIDIwOyAvKiBUYWJsZSBGLjQ6IFgxID0gMjAgKi8KKyAgICAgICAgd2hpbGUgKHYyID4+PSAxKSB7CisgICAgICAgICAgYXJpdGhfZW5jb2RlKGNpbmZvLCBzdCwgMSk7CisgICAgICAgICAgbSA8PD0gMTsKKyAgICAgICAgICBzdCArPSAxOworICAgICAgICB9CiAgICAgICB9CiAgICAgICBhcml0aF9lbmNvZGUoY2luZm8sIHN0LCAwKTsKICAgICAgIC8qIFNlY3Rpb24gRi4xLjQuNC4xLjI6IEVzdGFibGlzaCBkY19jb250ZXh0IGNvbmRpdGlvbmluZyBjYXRlZ29yeSAqLwogICAgICAgaWYgKG0gPCAoaW50KSAoKDFMIDw8IGNpbmZvLT5hcml0aF9kY19MW3RibF0pID4+IDEpKQotCWVudHJvcHktPmRjX2NvbnRleHRbY2ldID0gMDsJLyogemVybyBkaWZmIGNhdGVnb3J5ICovCisgICAgICAgIGVudHJvcHktPmRjX2NvbnRleHRbY2ldID0gMDsgICAgLyogemVybyBkaWZmIGNhdGVnb3J5ICovCiAgICAgICBlbHNlIGlmIChtID4gKGludCkgKCgxTCA8PCBjaW5mby0+YXJpdGhfZGNfVVt0YmxdKSA+PiAxKSkKLQllbnRyb3B5LT5kY19jb250ZXh0W2NpXSArPSA4OwkvKiBsYXJnZSBkaWZmIGNhdGVnb3J5ICovCisgICAgICAgIGVudHJvcHktPmRjX2NvbnRleHRbY2ldICs9IDg7ICAgLyogbGFyZ2UgZGlmZiBjYXRlZ29yeSAqLwogICAgICAgLyogRmlndXJlIEYuOTogRW5jb2RpbmcgdGhlIG1hZ25pdHVkZSBiaXQgcGF0dGVybiBvZiB2ICovCiAgICAgICBzdCArPSAxNDsKICAgICAgIHdoaWxlIChtID4+PSAxKQotCWFyaXRoX2VuY29kZShjaW5mbywgc3QsIChtICYgdikgPyAxIDogMCk7CisgICAgICAgIGFyaXRoX2VuY29kZShjaW5mbywgc3QsIChtICYgdikgPyAxIDogMCk7CiAgICAgfQogCiAgICAgLyogU2VjdGlvbnMgRi4xLjQuMiAmIEYuMS40LjQuMjogRW5jb2Rpbmcgb2YgQUMgY29lZmZpY2llbnRzICovCkBAIC03NjUsNDMgKzc2NSw0MyBAQAogICAgIC8qIEZpZ3VyZSBGLjU6IEVuY29kZV9BQ19Db2VmZmljaWVudHMgKi8KICAgICBmb3IgKGsgPSAxOyBrIDw9IGtlOyBrKyspIHsKICAgICAgIHN0ID0gZW50cm9weS0+YWNfc3RhdHNbdGJsXSArIDMgKiAoayAtIDEpOwotICAgICAgYXJpdGhfZW5jb2RlKGNpbmZvLCBzdCwgMCk7CS8qIEVPQiBkZWNpc2lvbiAqLworICAgICAgYXJpdGhfZW5jb2RlKGNpbmZvLCBzdCwgMCk7ICAgICAgIC8qIEVPQiBkZWNpc2lvbiAqLwogICAgICAgd2hpbGUgKCh2ID0gKCpibG9jaylbanBlZ19uYXR1cmFsX29yZGVyW2tdXSkgPT0gMCkgewotCWFyaXRoX2VuY29kZShjaW5mbywgc3QgKyAxLCAwKTsgc3QgKz0gMzsgaysrOworICAgICAgICBhcml0aF9lbmNvZGUoY2luZm8sIHN0ICsgMSwgMCk7IHN0ICs9IDM7IGsrKzsKICAgICAgIH0KICAgICAgIGFyaXRoX2VuY29kZShjaW5mbywgc3QgKyAxLCAxKTsKICAgICAgIC8qIEZpZ3VyZSBGLjY6IEVuY29kaW5nIG5vbnplcm8gdmFsdWUgdiAqLwogICAgICAgLyogRmlndXJlIEYuNzogRW5jb2RpbmcgdGhlIHNpZ24gb2YgdiAqLwogICAgICAgaWYgKHYgPiAwKSB7Ci0JYXJpdGhfZW5jb2RlKGNpbmZvLCBlbnRyb3B5LT5maXhlZF9iaW4sIDApOworICAgICAgICBhcml0aF9lbmNvZGUoY2luZm8sIGVudHJvcHktPmZpeGVkX2JpbiwgMCk7CiAgICAgICB9IGVsc2UgewotCXYgPSAtdjsKLQlhcml0aF9lbmNvZGUoY2luZm8sIGVudHJvcHktPmZpeGVkX2JpbiwgMSk7CisgICAgICAgIHYgPSAtdjsKKyAgICAgICAgYXJpdGhfZW5jb2RlKGNpbmZvLCBlbnRyb3B5LT5maXhlZF9iaW4sIDEpOwogICAgICAgfQogICAgICAgc3QgKz0gMjsKICAgICAgIC8qIEZpZ3VyZSBGLjg6IEVuY29kaW5nIHRoZSBtYWduaXR1ZGUgY2F0ZWdvcnkgb2YgdiAqLwogICAgICAgbSA9IDA7CiAgICAgICBpZiAodiAtPSAxKSB7Ci0JYXJpdGhfZW5jb2RlKGNpbmZvLCBzdCwgMSk7Ci0JbSA9IDE7Ci0JdjIgPSB2OwotCWlmICh2MiA+Pj0gMSkgewotCSAgYXJpdGhfZW5jb2RlKGNpbmZvLCBzdCwgMSk7Ci0JICBtIDw8PSAxOwotCSAgc3QgPSBlbnRyb3B5LT5hY19zdGF0c1t0YmxdICsKLQkgICAgICAgKGsgPD0gY2luZm8tPmFyaXRoX2FjX0tbdGJsXSA/IDE4OSA6IDIxNyk7Ci0JICB3aGlsZSAodjIgPj49IDEpIHsKLQkgICAgYXJpdGhfZW5jb2RlKGNpbmZvLCBzdCwgMSk7Ci0JICAgIG0gPDw9IDE7Ci0JICAgIHN0ICs9IDE7Ci0JICB9Ci0JfQorICAgICAgICBhcml0aF9lbmNvZGUoY2luZm8sIHN0LCAxKTsKKyAgICAgICAgbSA9IDE7CisgICAgICAgIHYyID0gdjsKKyAgICAgICAgaWYgKHYyID4+PSAxKSB7CisgICAgICAgICAgYXJpdGhfZW5jb2RlKGNpbmZvLCBzdCwgMSk7CisgICAgICAgICAgbSA8PD0gMTsKKyAgICAgICAgICBzdCA9IGVudHJvcHktPmFjX3N0YXRzW3RibF0gKworICAgICAgICAgICAgICAgKGsgPD0gY2luZm8tPmFyaXRoX2FjX0tbdGJsXSA/IDE4OSA6IDIxNyk7CisgICAgICAgICAgd2hpbGUgKHYyID4+PSAxKSB7CisgICAgICAgICAgICBhcml0aF9lbmNvZGUoY2luZm8sIHN0LCAxKTsKKyAgICAgICAgICAgIG0gPDw9IDE7CisgICAgICAgICAgICBzdCArPSAxOworICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgfQogICAgICAgYXJpdGhfZW5jb2RlKGNpbmZvLCBzdCwgMCk7CiAgICAgICAvKiBGaWd1cmUgRi45OiBFbmNvZGluZyB0aGUgbWFnbml0dWRlIGJpdCBwYXR0ZXJuIG9mIHYgKi8KICAgICAgIHN0ICs9IDE0OwogICAgICAgd2hpbGUgKG0gPj49IDEpCi0JYXJpdGhfZW5jb2RlKGNpbmZvLCBzdCwgKG0gJiB2KSA/IDEgOiAwKTsKKyAgICAgICAgYXJpdGhfZW5jb2RlKGNpbmZvLCBzdCwgKG0gJiB2KSA/IDEgOiAwKTsKICAgICB9CiAgICAgLyogRW5jb2RlIEVPQiBkZWNpc2lvbiBvbmx5IGlmIGsgPD0gRENUU0laRTIgLSAxICovCiAgICAgaWYgKGsgPD0gRENUU0laRTIgLSAxKSB7CkBAIC04MzgsMTQgKzgzOCwxNCBAQAogICBpZiAoY2luZm8tPnByb2dyZXNzaXZlX21vZGUpIHsKICAgICBpZiAoY2luZm8tPkFoID09IDApIHsKICAgICAgIGlmIChjaW5mby0+U3MgPT0gMCkKLQllbnRyb3B5LT5wdWIuZW5jb2RlX21jdSA9IGVuY29kZV9tY3VfRENfZmlyc3Q7CisgICAgICAgIGVudHJvcHktPnB1Yi5lbmNvZGVfbWN1ID0gZW5jb2RlX21jdV9EQ19maXJzdDsKICAgICAgIGVsc2UKLQllbnRyb3B5LT5wdWIuZW5jb2RlX21jdSA9IGVuY29kZV9tY3VfQUNfZmlyc3Q7CisgICAgICAgIGVudHJvcHktPnB1Yi5lbmNvZGVfbWN1ID0gZW5jb2RlX21jdV9BQ19maXJzdDsKICAgICB9IGVsc2UgewogICAgICAgaWYgKGNpbmZvLT5TcyA9PSAwKQotCWVudHJvcHktPnB1Yi5lbmNvZGVfbWN1ID0gZW5jb2RlX21jdV9EQ19yZWZpbmU7CisgICAgICAgIGVudHJvcHktPnB1Yi5lbmNvZGVfbWN1ID0gZW5jb2RlX21jdV9EQ19yZWZpbmU7CiAgICAgICBlbHNlCi0JZW50cm9weS0+cHViLmVuY29kZV9tY3UgPSBlbmNvZGVfbWN1X0FDX3JlZmluZTsKKyAgICAgICAgZW50cm9weS0+cHViLmVuY29kZV9tY3UgPSBlbmNvZGVfbWN1X0FDX3JlZmluZTsKICAgICB9CiAgIH0gZWxzZQogICAgIGVudHJvcHktPnB1Yi5lbmNvZGVfbWN1ID0gZW5jb2RlX21jdTsKQEAgLTg1NywxMCArODU3LDEwIEBACiAgICAgaWYgKGNpbmZvLT5wcm9ncmVzc2l2ZV9tb2RlID09IDAgfHwgKGNpbmZvLT5TcyA9PSAwICYmIGNpbmZvLT5BaCA9PSAwKSkgewogICAgICAgdGJsID0gY29tcHB0ci0+ZGNfdGJsX25vOwogICAgICAgaWYgKHRibCA8IDAgfHwgdGJsID49IE5VTV9BUklUSF9UQkxTKQotCUVSUkVYSVQxKGNpbmZvLCBKRVJSX05PX0FSSVRIX1RBQkxFLCB0YmwpOworICAgICAgICBFUlJFWElUMShjaW5mbywgSkVSUl9OT19BUklUSF9UQUJMRSwgdGJsKTsKICAgICAgIGlmIChlbnRyb3B5LT5kY19zdGF0c1t0YmxdID09IE5VTEwpCi0JZW50cm9weS0+ZGNfc3RhdHNbdGJsXSA9ICh1bnNpZ25lZCBjaGFyICopICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpCi0JICAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLCBEQ19TVEFUX0JJTlMpOworICAgICAgICBlbnRyb3B5LT5kY19zdGF0c1t0YmxdID0gKHVuc2lnbmVkIGNoYXIgKikgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkKKyAgICAgICAgICAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLCBEQ19TVEFUX0JJTlMpOwogICAgICAgTUVNWkVSTyhlbnRyb3B5LT5kY19zdGF0c1t0YmxdLCBEQ19TVEFUX0JJTlMpOwogICAgICAgLyogSW5pdGlhbGl6ZSBEQyBwcmVkaWN0aW9ucyB0byAwICovCiAgICAgICBlbnRyb3B5LT5sYXN0X2RjX3ZhbFtjaV0gPSAwOwpAQCAtODcwLDE1ICs4NzAsMTUgQEAKICAgICBpZiAoY2luZm8tPnByb2dyZXNzaXZlX21vZGUgPT0gMCB8fCBjaW5mby0+U2UpIHsKICAgICAgIHRibCA9IGNvbXBwdHItPmFjX3RibF9ubzsKICAgICAgIGlmICh0YmwgPCAwIHx8IHRibCA+PSBOVU1fQVJJVEhfVEJMUykKLQlFUlJFWElUMShjaW5mbywgSkVSUl9OT19BUklUSF9UQUJMRSwgdGJsKTsKKyAgICAgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfTk9fQVJJVEhfVEFCTEUsIHRibCk7CiAgICAgICBpZiAoZW50cm9weS0+YWNfc3RhdHNbdGJsXSA9PSBOVUxMKQotCWVudHJvcHktPmFjX3N0YXRzW3RibF0gPSAodW5zaWduZWQgY2hhciAqKSAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKQotCSAgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwgQUNfU1RBVF9CSU5TKTsKKyAgICAgICAgZW50cm9weS0+YWNfc3RhdHNbdGJsXSA9ICh1bnNpZ25lZCBjaGFyICopICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpCisgICAgICAgICAgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwgQUNfU1RBVF9CSU5TKTsKICAgICAgIE1FTVpFUk8oZW50cm9weS0+YWNfc3RhdHNbdGJsXSwgQUNfU1RBVF9CSU5TKTsKICNpZmRlZiBDQUxDVUxBVEVfU1BFQ1RSQUxfQ09ORElUSU9OSU5HCiAgICAgICBpZiAoY2luZm8tPnByb2dyZXNzaXZlX21vZGUpCi0JLyogU2VjdGlvbiBHLjEuMy4yOiBTZXQgYXBwcm9wcmlhdGUgYXJpdGhtZXRpYyBjb25kaXRpb25pbmcgdmFsdWUgS3ggKi8KLQljaW5mby0+YXJpdGhfYWNfS1t0YmxdID0gY2luZm8tPlNzICsgKCg4ICsgY2luZm8tPlNlIC0gY2luZm8tPlNzKSA+PiA0KTsKKyAgICAgICAgLyogU2VjdGlvbiBHLjEuMy4yOiBTZXQgYXBwcm9wcmlhdGUgYXJpdGhtZXRpYyBjb25kaXRpb25pbmcgdmFsdWUgS3ggKi8KKyAgICAgICAgY2luZm8tPmFyaXRoX2FjX0tbdGJsXSA9IGNpbmZvLT5TcyArICgoOCArIGNpbmZvLT5TZSAtIGNpbmZvLT5TcykgPj4gNCk7CiAjZW5kaWYKICAgICB9CiAgIH0KQEAgLTkwOSw3ICs5MDksNyBAQAogCiAgIGVudHJvcHkgPSAoYXJpdGhfZW50cm9weV9wdHIpCiAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKLQkJCQlTSVpFT0YoYXJpdGhfZW50cm9weV9lbmNvZGVyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJWkVPRihhcml0aF9lbnRyb3B5X2VuY29kZXIpKTsKICAgY2luZm8tPmVudHJvcHkgPSAoc3RydWN0IGpwZWdfZW50cm9weV9lbmNvZGVyICopIGVudHJvcHk7CiAgIGVudHJvcHktPnB1Yi5zdGFydF9wYXNzID0gc3RhcnRfcGFzczsKICAgZW50cm9weS0+cHViLmZpbmlzaF9wYXNzID0gZmluaXNoX3Bhc3M7CmRpZmYgLS1naXQgYS9qY2NvZWZjdC5jIGIvamNjb2VmY3QuYwppbmRleCAxOTYzZGRiLi5mZmM5YjdlIDEwMDY0NAotLS0gYS9qY2NvZWZjdC5jCisrKyBiL2pjY29lZmN0LmMKQEAgLTM0LDEwICszNCwxMCBAQAogdHlwZWRlZiBzdHJ1Y3QgewogICBzdHJ1Y3QganBlZ19jX2NvZWZfY29udHJvbGxlciBwdWI7IC8qIHB1YmxpYyBmaWVsZHMgKi8KIAotICBKRElNRU5TSU9OIGlNQ1Vfcm93X251bTsJLyogaU1DVSByb3cgIyB3aXRoaW4gaW1hZ2UgKi8KLSAgSkRJTUVOU0lPTiBtY3VfY3RyOwkJLyogY291bnRzIE1DVXMgcHJvY2Vzc2VkIGluIGN1cnJlbnQgcm93ICovCi0gIGludCBNQ1VfdmVydF9vZmZzZXQ7CQkvKiBjb3VudHMgTUNVIHJvd3Mgd2l0aGluIGlNQ1Ugcm93ICovCi0gIGludCBNQ1Vfcm93c19wZXJfaU1DVV9yb3c7CS8qIG51bWJlciBvZiBzdWNoIHJvd3MgbmVlZGVkICovCisgIEpESU1FTlNJT04gaU1DVV9yb3dfbnVtOyAgICAgIC8qIGlNQ1Ugcm93ICMgd2l0aGluIGltYWdlICovCisgIEpESU1FTlNJT04gbWN1X2N0cjsgICAgICAgICAgIC8qIGNvdW50cyBNQ1VzIHByb2Nlc3NlZCBpbiBjdXJyZW50IHJvdyAqLworICBpbnQgTUNVX3ZlcnRfb2Zmc2V0OyAgICAgICAgICAvKiBjb3VudHMgTUNVIHJvd3Mgd2l0aGluIGlNQ1Ugcm93ICovCisgIGludCBNQ1Vfcm93c19wZXJfaU1DVV9yb3c7ICAgIC8qIG51bWJlciBvZiBzdWNoIHJvd3MgbmVlZGVkICovCiAKICAgLyogRm9yIHNpbmdsZS1wYXNzIGNvbXByZXNzaW9uLCBpdCdzIHN1ZmZpY2llbnQgdG8gYnVmZmVyIGp1c3Qgb25lIE1DVQogICAgKiAoYWx0aG91Z2ggdGhpcyBtYXkgcHJvdmUgYSBiaXQgc2xvdyBpbiBwcmFjdGljZSkuICBXZSBhbGxvY2F0ZSBhCkBAIC0xNDMsNyArMTQzLDcgQEAKIGNvbXByZXNzX2RhdGEgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUElNQUdFIGlucHV0X2J1ZikKIHsKICAgbXlfY29lZl9wdHIgY29lZiA9IChteV9jb2VmX3B0cikgY2luZm8tPmNvZWY7Ci0gIEpESU1FTlNJT04gTUNVX2NvbF9udW07CS8qIGluZGV4IG9mIGN1cnJlbnQgTUNVIHdpdGhpbiByb3cgKi8KKyAgSkRJTUVOU0lPTiBNQ1VfY29sX251bTsgICAgICAgLyogaW5kZXggb2YgY3VycmVudCBNQ1Ugd2l0aGluIHJvdyAqLwogICBKRElNRU5TSU9OIGxhc3RfTUNVX2NvbCA9IGNpbmZvLT5NQ1VzX3Blcl9yb3cgLSAxOwogICBKRElNRU5TSU9OIGxhc3RfaU1DVV9yb3cgPSBjaW5mby0+dG90YWxfaU1DVV9yb3dzIC0gMTsKICAgaW50IGJsa24sIGJpLCBjaSwgeWluZGV4LCB5b2Zmc2V0LCBibG9ja2NudDsKQEAgLTE1NCw3ICsxNTQsNyBAQAogICBmb3IgKHlvZmZzZXQgPSBjb2VmLT5NQ1VfdmVydF9vZmZzZXQ7IHlvZmZzZXQgPCBjb2VmLT5NQ1Vfcm93c19wZXJfaU1DVV9yb3c7CiAgICAgICAgeW9mZnNldCsrKSB7CiAgICAgZm9yIChNQ1VfY29sX251bSA9IGNvZWYtPm1jdV9jdHI7IE1DVV9jb2xfbnVtIDw9IGxhc3RfTUNVX2NvbDsKLQkgTUNVX2NvbF9udW0rKykgeworICAgICAgICAgTUNVX2NvbF9udW0rKykgewogICAgICAgLyogRGV0ZXJtaW5lIHdoZXJlIGRhdGEgY29tZXMgZnJvbSBpbiBpbnB1dF9idWYgYW5kIGRvIHRoZSBEQ1QgdGhpbmcuCiAgICAgICAgKiBFYWNoIGNhbGwgb24gZm9yd2FyZF9EQ1QgcHJvY2Vzc2VzIGEgaG9yaXpvbnRhbCByb3cgb2YgRENUIGJsb2NrcwogICAgICAgICogYXMgd2lkZSBhcyBhbiBNQ1U7IHdlIHJlbHkgb24gaGF2aW5nIGFsbG9jYXRlZCB0aGUgTUNVX2J1ZmZlcltdIGJsb2NrcwpAQCAtMTY2LDQ2ICsxNjYsNDYgQEAKICAgICAgICAqLwogICAgICAgYmxrbiA9IDA7CiAgICAgICBmb3IgKGNpID0gMDsgY2kgPCBjaW5mby0+Y29tcHNfaW5fc2NhbjsgY2krKykgewotCWNvbXBwdHIgPSBjaW5mby0+Y3VyX2NvbXBfaW5mb1tjaV07Ci0JYmxvY2tjbnQgPSAoTUNVX2NvbF9udW0gPCBsYXN0X01DVV9jb2wpID8gY29tcHB0ci0+TUNVX3dpZHRoCi0JCQkJCQk6IGNvbXBwdHItPmxhc3RfY29sX3dpZHRoOwotCXhwb3MgPSBNQ1VfY29sX251bSAqIGNvbXBwdHItPk1DVV9zYW1wbGVfd2lkdGg7Ci0JeXBvcyA9IHlvZmZzZXQgKiBEQ1RTSVpFOyAvKiB5cG9zID09ICh5b2Zmc2V0K3lpbmRleCkgKiBEQ1RTSVpFICovCi0JZm9yICh5aW5kZXggPSAwOyB5aW5kZXggPCBjb21wcHRyLT5NQ1VfaGVpZ2h0OyB5aW5kZXgrKykgewotCSAgaWYgKGNvZWYtPmlNQ1Vfcm93X251bSA8IGxhc3RfaU1DVV9yb3cgfHwKLQkgICAgICB5b2Zmc2V0K3lpbmRleCA8IGNvbXBwdHItPmxhc3Rfcm93X2hlaWdodCkgewotCSAgICAoKmNpbmZvLT5mZGN0LT5mb3J3YXJkX0RDVCkgKGNpbmZvLCBjb21wcHRyLAotCQkJCQkgaW5wdXRfYnVmW2NvbXBwdHItPmNvbXBvbmVudF9pbmRleF0sCi0JCQkJCSBjb2VmLT5NQ1VfYnVmZmVyW2Jsa25dLAotCQkJCQkgeXBvcywgeHBvcywgKEpESU1FTlNJT04pIGJsb2NrY250KTsKLQkgICAgaWYgKGJsb2NrY250IDwgY29tcHB0ci0+TUNVX3dpZHRoKSB7Ci0JICAgICAgLyogQ3JlYXRlIHNvbWUgZHVtbXkgYmxvY2tzIGF0IHRoZSByaWdodCBlZGdlIG9mIHRoZSBpbWFnZS4gKi8KLQkgICAgICBqemVyb19mYXIoKHZvaWQgRkFSICopIGNvZWYtPk1DVV9idWZmZXJbYmxrbiArIGJsb2NrY250XSwKLQkJCShjb21wcHRyLT5NQ1Vfd2lkdGggLSBibG9ja2NudCkgKiBTSVpFT0YoSkJMT0NLKSk7Ci0JICAgICAgZm9yIChiaSA9IGJsb2NrY250OyBiaSA8IGNvbXBwdHItPk1DVV93aWR0aDsgYmkrKykgewotCQljb2VmLT5NQ1VfYnVmZmVyW2Jsa24rYmldWzBdWzBdID0gY29lZi0+TUNVX2J1ZmZlcltibGtuK2JpLTFdWzBdWzBdOwotCSAgICAgIH0KLQkgICAgfQotCSAgfSBlbHNlIHsKLQkgICAgLyogQ3JlYXRlIGEgcm93IG9mIGR1bW15IGJsb2NrcyBhdCB0aGUgYm90dG9tIG9mIHRoZSBpbWFnZS4gKi8KLQkgICAganplcm9fZmFyKCh2b2lkIEZBUiAqKSBjb2VmLT5NQ1VfYnVmZmVyW2Jsa25dLAotCQkgICAgICBjb21wcHRyLT5NQ1Vfd2lkdGggKiBTSVpFT0YoSkJMT0NLKSk7Ci0JICAgIGZvciAoYmkgPSAwOyBiaSA8IGNvbXBwdHItPk1DVV93aWR0aDsgYmkrKykgewotCSAgICAgIGNvZWYtPk1DVV9idWZmZXJbYmxrbitiaV1bMF1bMF0gPSBjb2VmLT5NQ1VfYnVmZmVyW2Jsa24tMV1bMF1bMF07Ci0JICAgIH0KLQkgIH0KLQkgIGJsa24gKz0gY29tcHB0ci0+TUNVX3dpZHRoOwotCSAgeXBvcyArPSBEQ1RTSVpFOwotCX0KKyAgICAgICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsKKyAgICAgICAgYmxvY2tjbnQgPSAoTUNVX2NvbF9udW0gPCBsYXN0X01DVV9jb2wpID8gY29tcHB0ci0+TUNVX3dpZHRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNvbXBwdHItPmxhc3RfY29sX3dpZHRoOworICAgICAgICB4cG9zID0gTUNVX2NvbF9udW0gKiBjb21wcHRyLT5NQ1Vfc2FtcGxlX3dpZHRoOworICAgICAgICB5cG9zID0geW9mZnNldCAqIERDVFNJWkU7IC8qIHlwb3MgPT0gKHlvZmZzZXQreWluZGV4KSAqIERDVFNJWkUgKi8KKyAgICAgICAgZm9yICh5aW5kZXggPSAwOyB5aW5kZXggPCBjb21wcHRyLT5NQ1VfaGVpZ2h0OyB5aW5kZXgrKykgeworICAgICAgICAgIGlmIChjb2VmLT5pTUNVX3Jvd19udW0gPCBsYXN0X2lNQ1Vfcm93IHx8CisgICAgICAgICAgICAgIHlvZmZzZXQreWluZGV4IDwgY29tcHB0ci0+bGFzdF9yb3dfaGVpZ2h0KSB7CisgICAgICAgICAgICAoKmNpbmZvLT5mZGN0LT5mb3J3YXJkX0RDVCkgKGNpbmZvLCBjb21wcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9idWZbY29tcHB0ci0+Y29tcG9uZW50X2luZGV4XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29lZi0+TUNVX2J1ZmZlcltibGtuXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeXBvcywgeHBvcywgKEpESU1FTlNJT04pIGJsb2NrY250KTsKKyAgICAgICAgICAgIGlmIChibG9ja2NudCA8IGNvbXBwdHItPk1DVV93aWR0aCkgeworICAgICAgICAgICAgICAvKiBDcmVhdGUgc29tZSBkdW1teSBibG9ja3MgYXQgdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhlIGltYWdlLiAqLworICAgICAgICAgICAgICBqemVyb19mYXIoKHZvaWQgRkFSICopIGNvZWYtPk1DVV9idWZmZXJbYmxrbiArIGJsb2NrY250XSwKKyAgICAgICAgICAgICAgICAgICAgICAgIChjb21wcHRyLT5NQ1Vfd2lkdGggLSBibG9ja2NudCkgKiBTSVpFT0YoSkJMT0NLKSk7CisgICAgICAgICAgICAgIGZvciAoYmkgPSBibG9ja2NudDsgYmkgPCBjb21wcHRyLT5NQ1Vfd2lkdGg7IGJpKyspIHsKKyAgICAgICAgICAgICAgICBjb2VmLT5NQ1VfYnVmZmVyW2Jsa24rYmldWzBdWzBdID0gY29lZi0+TUNVX2J1ZmZlcltibGtuK2JpLTFdWzBdWzBdOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qIENyZWF0ZSBhIHJvdyBvZiBkdW1teSBibG9ja3MgYXQgdGhlIGJvdHRvbSBvZiB0aGUgaW1hZ2UuICovCisgICAgICAgICAgICBqemVyb19mYXIoKHZvaWQgRkFSICopIGNvZWYtPk1DVV9idWZmZXJbYmxrbl0sCisgICAgICAgICAgICAgICAgICAgICAgY29tcHB0ci0+TUNVX3dpZHRoICogU0laRU9GKEpCTE9DSykpOworICAgICAgICAgICAgZm9yIChiaSA9IDA7IGJpIDwgY29tcHB0ci0+TUNVX3dpZHRoOyBiaSsrKSB7CisgICAgICAgICAgICAgIGNvZWYtPk1DVV9idWZmZXJbYmxrbitiaV1bMF1bMF0gPSBjb2VmLT5NQ1VfYnVmZmVyW2Jsa24tMV1bMF1bMF07CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGJsa24gKz0gY29tcHB0ci0+TUNVX3dpZHRoOworICAgICAgICAgIHlwb3MgKz0gRENUU0laRTsKKyAgICAgICAgfQogICAgICAgfQogICAgICAgLyogVHJ5IHRvIHdyaXRlIHRoZSBNQ1UuICBJbiBldmVudCBvZiBhIHN1c3BlbnNpb24gZmFpbHVyZSwgd2Ugd2lsbAogICAgICAgICogcmUtRENUIHRoZSBNQ1Ugb24gcmVzdGFydCAoYSBiaXQgaW5lZmZpY2llbnQsIGNvdWxkIGJlIGZpeGVkLi4uKQogICAgICAgICovCiAgICAgICBpZiAoISAoKmNpbmZvLT5lbnRyb3B5LT5lbmNvZGVfbWN1KSAoY2luZm8sIGNvZWYtPk1DVV9idWZmZXIpKSB7Ci0JLyogU3VzcGVuc2lvbiBmb3JjZWQ7IHVwZGF0ZSBzdGF0ZSBjb3VudGVycyBhbmQgZXhpdCAqLwotCWNvZWYtPk1DVV92ZXJ0X29mZnNldCA9IHlvZmZzZXQ7Ci0JY29lZi0+bWN1X2N0ciA9IE1DVV9jb2xfbnVtOwotCXJldHVybiBGQUxTRTsKKyAgICAgICAgLyogU3VzcGVuc2lvbiBmb3JjZWQ7IHVwZGF0ZSBzdGF0ZSBjb3VudGVycyBhbmQgZXhpdCAqLworICAgICAgICBjb2VmLT5NQ1VfdmVydF9vZmZzZXQgPSB5b2Zmc2V0OworICAgICAgICBjb2VmLT5tY3VfY3RyID0gTUNVX2NvbF9udW07CisgICAgICAgIHJldHVybiBGQUxTRTsKICAgICAgIH0KICAgICB9CiAgICAgLyogQ29tcGxldGVkIGFuIE1DVSByb3csIGJ1dCBwZXJoYXBzIG5vdCBhbiBpTUNVIHJvdyAqLwpAQCAtMjgwLDE3ICsyODAsMTcgQEAKICAgICBmb3IgKGJsb2NrX3JvdyA9IDA7IGJsb2NrX3JvdyA8IGJsb2NrX3Jvd3M7IGJsb2NrX3JvdysrKSB7CiAgICAgICB0aGlzYmxvY2tyb3cgPSBidWZmZXJbYmxvY2tfcm93XTsKICAgICAgICgqY2luZm8tPmZkY3QtPmZvcndhcmRfRENUKSAoY2luZm8sIGNvbXBwdHIsCi0JCQkJICAgaW5wdXRfYnVmW2NpXSwgdGhpc2Jsb2Nrcm93LAotCQkJCSAgIChKRElNRU5TSU9OKSAoYmxvY2tfcm93ICogRENUU0laRSksCi0JCQkJICAgKEpESU1FTlNJT04pIDAsIGJsb2Nrc19hY3Jvc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9idWZbY2ldLCB0aGlzYmxvY2tyb3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChKRElNRU5TSU9OKSAoYmxvY2tfcm93ICogRENUU0laRSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChKRElNRU5TSU9OKSAwLCBibG9ja3NfYWNyb3NzKTsKICAgICAgIGlmIChuZHVtbXkgPiAwKSB7Ci0JLyogQ3JlYXRlIGR1bW15IGJsb2NrcyBhdCB0aGUgcmlnaHQgZWRnZSBvZiB0aGUgaW1hZ2UuICovCi0JdGhpc2Jsb2Nrcm93ICs9IGJsb2Nrc19hY3Jvc3M7IC8qID0+IGZpcnN0IGR1bW15IGJsb2NrICovCi0Janplcm9fZmFyKCh2b2lkIEZBUiAqKSB0aGlzYmxvY2tyb3csIG5kdW1teSAqIFNJWkVPRihKQkxPQ0spKTsKLQlsYXN0REMgPSB0aGlzYmxvY2tyb3dbLTFdWzBdOwotCWZvciAoYmkgPSAwOyBiaSA8IG5kdW1teTsgYmkrKykgewotCSAgdGhpc2Jsb2Nrcm93W2JpXVswXSA9IGxhc3REQzsKLQl9CisgICAgICAgIC8qIENyZWF0ZSBkdW1teSBibG9ja3MgYXQgdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhlIGltYWdlLiAqLworICAgICAgICB0aGlzYmxvY2tyb3cgKz0gYmxvY2tzX2Fjcm9zczsgLyogPT4gZmlyc3QgZHVtbXkgYmxvY2sgKi8KKyAgICAgICAganplcm9fZmFyKCh2b2lkIEZBUiAqKSB0aGlzYmxvY2tyb3csIG5kdW1teSAqIFNJWkVPRihKQkxPQ0spKTsKKyAgICAgICAgbGFzdERDID0gdGhpc2Jsb2Nrcm93Wy0xXVswXTsKKyAgICAgICAgZm9yIChiaSA9IDA7IGJpIDwgbmR1bW15OyBiaSsrKSB7CisgICAgICAgICAgdGhpc2Jsb2Nrcm93W2JpXVswXSA9IGxhc3REQzsKKyAgICAgICAgfQogICAgICAgfQogICAgIH0KICAgICAvKiBJZiBhdCBlbmQgb2YgaW1hZ2UsIGNyZWF0ZSBkdW1teSBibG9jayByb3dzIGFzIG5lZWRlZC4KQEAgLTI5OSwyMiArMjk5LDIyIEBACiAgICAgICogVGhpcyBzcXVlZXplcyBhIGZldyBtb3JlIGJ5dGVzIG91dCBvZiB0aGUgcmVzdWx0aW5nIGZpbGUuLi4KICAgICAgKi8KICAgICBpZiAoY29lZi0+aU1DVV9yb3dfbnVtID09IGxhc3RfaU1DVV9yb3cpIHsKLSAgICAgIGJsb2Nrc19hY3Jvc3MgKz0gbmR1bW15OwkvKiBpbmNsdWRlIGxvd2VyIHJpZ2h0IGNvcm5lciAqLworICAgICAgYmxvY2tzX2Fjcm9zcyArPSBuZHVtbXk7ICAvKiBpbmNsdWRlIGxvd2VyIHJpZ2h0IGNvcm5lciAqLwogICAgICAgTUNVc19hY3Jvc3MgPSBibG9ja3NfYWNyb3NzIC8gaF9zYW1wX2ZhY3RvcjsKICAgICAgIGZvciAoYmxvY2tfcm93ID0gYmxvY2tfcm93czsgYmxvY2tfcm93IDwgY29tcHB0ci0+dl9zYW1wX2ZhY3RvcjsKLQkgICBibG9ja19yb3crKykgewotCXRoaXNibG9ja3JvdyA9IGJ1ZmZlcltibG9ja19yb3ddOwotCWxhc3RibG9ja3JvdyA9IGJ1ZmZlcltibG9ja19yb3ctMV07Ci0Janplcm9fZmFyKCh2b2lkIEZBUiAqKSB0aGlzYmxvY2tyb3csCi0JCSAgKHNpemVfdCkgKGJsb2Nrc19hY3Jvc3MgKiBTSVpFT0YoSkJMT0NLKSkpOwotCWZvciAoTUNVaW5kZXggPSAwOyBNQ1VpbmRleCA8IE1DVXNfYWNyb3NzOyBNQ1VpbmRleCsrKSB7Ci0JICBsYXN0REMgPSBsYXN0YmxvY2tyb3dbaF9zYW1wX2ZhY3Rvci0xXVswXTsKLQkgIGZvciAoYmkgPSAwOyBiaSA8IGhfc2FtcF9mYWN0b3I7IGJpKyspIHsKLQkgICAgdGhpc2Jsb2Nrcm93W2JpXVswXSA9IGxhc3REQzsKLQkgIH0KLQkgIHRoaXNibG9ja3JvdyArPSBoX3NhbXBfZmFjdG9yOyAvKiBhZHZhbmNlIHRvIG5leHQgTUNVIGluIHJvdyAqLwotCSAgbGFzdGJsb2Nrcm93ICs9IGhfc2FtcF9mYWN0b3I7Ci0JfQorICAgICAgICAgICBibG9ja19yb3crKykgeworICAgICAgICB0aGlzYmxvY2tyb3cgPSBidWZmZXJbYmxvY2tfcm93XTsKKyAgICAgICAgbGFzdGJsb2Nrcm93ID0gYnVmZmVyW2Jsb2NrX3Jvdy0xXTsKKyAgICAgICAganplcm9fZmFyKCh2b2lkIEZBUiAqKSB0aGlzYmxvY2tyb3csCisgICAgICAgICAgICAgICAgICAoc2l6ZV90KSAoYmxvY2tzX2Fjcm9zcyAqIFNJWkVPRihKQkxPQ0spKSk7CisgICAgICAgIGZvciAoTUNVaW5kZXggPSAwOyBNQ1VpbmRleCA8IE1DVXNfYWNyb3NzOyBNQ1VpbmRleCsrKSB7CisgICAgICAgICAgbGFzdERDID0gbGFzdGJsb2Nrcm93W2hfc2FtcF9mYWN0b3ItMV1bMF07CisgICAgICAgICAgZm9yIChiaSA9IDA7IGJpIDwgaF9zYW1wX2ZhY3RvcjsgYmkrKykgeworICAgICAgICAgICAgdGhpc2Jsb2Nrcm93W2JpXVswXSA9IGxhc3REQzsKKyAgICAgICAgICB9CisgICAgICAgICAgdGhpc2Jsb2Nrcm93ICs9IGhfc2FtcF9mYWN0b3I7IC8qIGFkdmFuY2UgdG8gbmV4dCBNQ1UgaW4gcm93ICovCisgICAgICAgICAgbGFzdGJsb2Nrcm93ICs9IGhfc2FtcF9mYWN0b3I7CisgICAgICAgIH0KICAgICAgIH0KICAgICB9CiAgIH0KQEAgLTM0MSw3ICszNDEsNyBAQAogY29tcHJlc3Nfb3V0cHV0IChqX2NvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBJTUFHRSBpbnB1dF9idWYpCiB7CiAgIG15X2NvZWZfcHRyIGNvZWYgPSAobXlfY29lZl9wdHIpIGNpbmZvLT5jb2VmOwotICBKRElNRU5TSU9OIE1DVV9jb2xfbnVtOwkvKiBpbmRleCBvZiBjdXJyZW50IE1DVSB3aXRoaW4gcm93ICovCisgIEpESU1FTlNJT04gTUNVX2NvbF9udW07ICAgICAgIC8qIGluZGV4IG9mIGN1cnJlbnQgTUNVIHdpdGhpbiByb3cgKi8KICAgaW50IGJsa24sIGNpLCB4aW5kZXgsIHlpbmRleCwgeW9mZnNldDsKICAgSkRJTUVOU0lPTiBzdGFydF9jb2w7CiAgIEpCTE9DS0FSUkFZIGJ1ZmZlcltNQVhfQ09NUFNfSU5fU0NBTl07CkBAIC0zNjQsMjUgKzM2NCwyNSBAQAogICBmb3IgKHlvZmZzZXQgPSBjb2VmLT5NQ1VfdmVydF9vZmZzZXQ7IHlvZmZzZXQgPCBjb2VmLT5NQ1Vfcm93c19wZXJfaU1DVV9yb3c7CiAgICAgICAgeW9mZnNldCsrKSB7CiAgICAgZm9yIChNQ1VfY29sX251bSA9IGNvZWYtPm1jdV9jdHI7IE1DVV9jb2xfbnVtIDwgY2luZm8tPk1DVXNfcGVyX3JvdzsKLQkgTUNVX2NvbF9udW0rKykgeworICAgICAgICAgTUNVX2NvbF9udW0rKykgewogICAgICAgLyogQ29uc3RydWN0IGxpc3Qgb2YgcG9pbnRlcnMgdG8gRENUIGJsb2NrcyBiZWxvbmdpbmcgdG8gdGhpcyBNQ1UgKi8KLSAgICAgIGJsa24gPSAwOwkJCS8qIGluZGV4IG9mIGN1cnJlbnQgRENUIGJsb2NrIHdpdGhpbiBNQ1UgKi8KKyAgICAgIGJsa24gPSAwOyAgICAgICAgICAgICAgICAgLyogaW5kZXggb2YgY3VycmVudCBEQ1QgYmxvY2sgd2l0aGluIE1DVSAqLwogICAgICAgZm9yIChjaSA9IDA7IGNpIDwgY2luZm8tPmNvbXBzX2luX3NjYW47IGNpKyspIHsKLQljb21wcHRyID0gY2luZm8tPmN1cl9jb21wX2luZm9bY2ldOwotCXN0YXJ0X2NvbCA9IE1DVV9jb2xfbnVtICogY29tcHB0ci0+TUNVX3dpZHRoOwotCWZvciAoeWluZGV4ID0gMDsgeWluZGV4IDwgY29tcHB0ci0+TUNVX2hlaWdodDsgeWluZGV4KyspIHsKLQkgIGJ1ZmZlcl9wdHIgPSBidWZmZXJbY2ldW3lpbmRleCt5b2Zmc2V0XSArIHN0YXJ0X2NvbDsKLQkgIGZvciAoeGluZGV4ID0gMDsgeGluZGV4IDwgY29tcHB0ci0+TUNVX3dpZHRoOyB4aW5kZXgrKykgewotCSAgICBjb2VmLT5NQ1VfYnVmZmVyW2Jsa24rK10gPSBidWZmZXJfcHRyKys7Ci0JICB9Ci0JfQorICAgICAgICBjb21wcHRyID0gY2luZm8tPmN1cl9jb21wX2luZm9bY2ldOworICAgICAgICBzdGFydF9jb2wgPSBNQ1VfY29sX251bSAqIGNvbXBwdHItPk1DVV93aWR0aDsKKyAgICAgICAgZm9yICh5aW5kZXggPSAwOyB5aW5kZXggPCBjb21wcHRyLT5NQ1VfaGVpZ2h0OyB5aW5kZXgrKykgeworICAgICAgICAgIGJ1ZmZlcl9wdHIgPSBidWZmZXJbY2ldW3lpbmRleCt5b2Zmc2V0XSArIHN0YXJ0X2NvbDsKKyAgICAgICAgICBmb3IgKHhpbmRleCA9IDA7IHhpbmRleCA8IGNvbXBwdHItPk1DVV93aWR0aDsgeGluZGV4KyspIHsKKyAgICAgICAgICAgIGNvZWYtPk1DVV9idWZmZXJbYmxrbisrXSA9IGJ1ZmZlcl9wdHIrKzsKKyAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgIH0KICAgICAgIC8qIFRyeSB0byB3cml0ZSB0aGUgTUNVLiAqLwogICAgICAgaWYgKCEgKCpjaW5mby0+ZW50cm9weS0+ZW5jb2RlX21jdSkgKGNpbmZvLCBjb2VmLT5NQ1VfYnVmZmVyKSkgewotCS8qIFN1c3BlbnNpb24gZm9yY2VkOyB1cGRhdGUgc3RhdGUgY291bnRlcnMgYW5kIGV4aXQgKi8KLQljb2VmLT5NQ1VfdmVydF9vZmZzZXQgPSB5b2Zmc2V0OwotCWNvZWYtPm1jdV9jdHIgPSBNQ1VfY29sX251bTsKLQlyZXR1cm4gRkFMU0U7CisgICAgICAgIC8qIFN1c3BlbnNpb24gZm9yY2VkOyB1cGRhdGUgc3RhdGUgY291bnRlcnMgYW5kIGV4aXQgKi8KKyAgICAgICAgY29lZi0+TUNVX3ZlcnRfb2Zmc2V0ID0geW9mZnNldDsKKyAgICAgICAgY29lZi0+bWN1X2N0ciA9IE1DVV9jb2xfbnVtOworICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgICB9CiAgICAgfQogICAgIC8qIENvbXBsZXRlZCBhbiBNQ1Ugcm93LCBidXQgcGVyaGFwcyBub3QgYW4gaU1DVSByb3cgKi8KQEAgLTQwOCw3ICs0MDgsNyBAQAogCiAgIGNvZWYgPSAobXlfY29lZl9wdHIpCiAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKLQkJCQlTSVpFT0YobXlfY29lZl9jb250cm9sbGVyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJWkVPRihteV9jb2VmX2NvbnRyb2xsZXIpKTsKICAgY2luZm8tPmNvZWYgPSAoc3RydWN0IGpwZWdfY19jb2VmX2NvbnRyb2xsZXIgKikgY29lZjsKICAgY29lZi0+cHViLnN0YXJ0X3Bhc3MgPSBzdGFydF9wYXNzX2NvZWY7CiAKQEAgLTQyMSwxNCArNDIxLDE0IEBACiAgICAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cjsKIAogICAgIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7Ci0JIGNpKyssIGNvbXBwdHIrKykgeworICAgICAgICAgY2krKywgY29tcHB0cisrKSB7CiAgICAgICBjb2VmLT53aG9sZV9pbWFnZVtjaV0gPSAoKmNpbmZvLT5tZW0tPnJlcXVlc3RfdmlydF9iYXJyYXkpCi0JKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwgRkFMU0UsCi0JIChKRElNRU5TSU9OKSBqcm91bmRfdXAoKGxvbmcpIGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcywKLQkJCQkobG9uZykgY29tcHB0ci0+aF9zYW1wX2ZhY3RvciksCi0JIChKRElNRU5TSU9OKSBqcm91bmRfdXAoKGxvbmcpIGNvbXBwdHItPmhlaWdodF9pbl9ibG9ja3MsCi0JCQkJKGxvbmcpIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IpLAotCSAoSkRJTUVOU0lPTikgY29tcHB0ci0+dl9zYW1wX2ZhY3Rvcik7CisgICAgICAgICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsIEZBTFNFLAorICAgICAgICAgKEpESU1FTlNJT04pIGpyb3VuZF91cCgobG9uZykgY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgY29tcHB0ci0+aF9zYW1wX2ZhY3RvciksCisgICAgICAgICAoSkRJTUVOU0lPTikganJvdW5kX3VwKChsb25nKSBjb21wcHRyLT5oZWlnaHRfaW5fYmxvY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciksCisgICAgICAgICAoSkRJTUVOU0lPTikgY29tcHB0ci0+dl9zYW1wX2ZhY3Rvcik7CiAgICAgfQogI2Vsc2UKICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9CVUZGRVJfTU9ERSk7CkBAIC00NDAsNyArNDQwLDcgQEAKIAogICAgIGJ1ZmZlciA9IChKQkxPQ0tST1cpCiAgICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX2xhcmdlKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAotCQkJCSAgQ19NQVhfQkxPQ0tTX0lOX01DVSAqIFNJWkVPRihKQkxPQ0spKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDX01BWF9CTE9DS1NfSU5fTUNVICogU0laRU9GKEpCTE9DSykpOwogICAgIGZvciAoaSA9IDA7IGkgPCBDX01BWF9CTE9DS1NfSU5fTUNVOyBpKyspIHsKICAgICAgIGNvZWYtPk1DVV9idWZmZXJbaV0gPSBidWZmZXIgKyBpOwogICAgIH0KZGlmZiAtLWdpdCBhL2pjY29sZXh0LmMgYi9qY2NvbGV4dC5jCmluZGV4IDg0ZGE4Y2QuLjJjNmI3YWMgMTAwNjQ0Ci0tLSBhL2pjY29sZXh0LmMKKysrIGIvamNjb2xleHQuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBUaGlzIGZpbGUgd2FzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZToKICAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk2LCBUaG9tYXMgRy4gTGFuZS4KLSAqIE1vZGlmaWNhdGlvbnM6CisgKiBsaWJqcGVnLXR1cmJvIE1vZGlmaWNhdGlvbnM6CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMiwgRC4gUi4gQ29tbWFuZGVyLgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgogICoKQEAgLTU4LDE2ICs1OCwxNiBAQAogICAgICAgICovCiAgICAgICAvKiBZICovCiAgICAgICBvdXRwdHIwW2NvbF0gPSAoSlNBTVBMRSkKLQkJKChjdGFiW3IrUl9ZX09GRl0gKyBjdGFiW2crR19ZX09GRl0gKyBjdGFiW2IrQl9ZX09GRl0pCi0JCSA+PiBTQ0FMRUJJVFMpOworICAgICAgICAgICAgICAgICgoY3RhYltyK1JfWV9PRkZdICsgY3RhYltnK0dfWV9PRkZdICsgY3RhYltiK0JfWV9PRkZdKQorICAgICAgICAgICAgICAgICA+PiBTQ0FMRUJJVFMpOwogICAgICAgLyogQ2IgKi8KICAgICAgIG91dHB0cjFbY29sXSA9IChKU0FNUExFKQotCQkoKGN0YWJbcitSX0NCX09GRl0gKyBjdGFiW2crR19DQl9PRkZdICsgY3RhYltiK0JfQ0JfT0ZGXSkKLQkJID4+IFNDQUxFQklUUyk7CisgICAgICAgICAgICAgICAgKChjdGFiW3IrUl9DQl9PRkZdICsgY3RhYltnK0dfQ0JfT0ZGXSArIGN0YWJbYitCX0NCX09GRl0pCisgICAgICAgICAgICAgICAgID4+IFNDQUxFQklUUyk7CiAgICAgICAvKiBDciAqLwogICAgICAgb3V0cHRyMltjb2xdID0gKEpTQU1QTEUpCi0JCSgoY3RhYltyK1JfQ1JfT0ZGXSArIGN0YWJbZytHX0NSX09GRl0gKyBjdGFiW2IrQl9DUl9PRkZdKQotCQkgPj4gU0NBTEVCSVRTKTsKKyAgICAgICAgICAgICAgICAoKGN0YWJbcitSX0NSX09GRl0gKyBjdGFiW2crR19DUl9PRkZdICsgY3RhYltiK0JfQ1JfT0ZGXSkKKyAgICAgICAgICAgICAgICAgPj4gU0NBTEVCSVRTKTsKICAgICB9CiAgIH0KIH0KQEAgLTEwOCw4ICsxMDgsOCBAQAogICAgICAgaW5wdHIgKz0gUkdCX1BJWEVMU0laRTsKICAgICAgIC8qIFkgKi8KICAgICAgIG91dHB0cltjb2xdID0gKEpTQU1QTEUpCi0JCSgoY3RhYltyK1JfWV9PRkZdICsgY3RhYltnK0dfWV9PRkZdICsgY3RhYltiK0JfWV9PRkZdKQotCQkgPj4gU0NBTEVCSVRTKTsKKyAgICAgICAgICAgICAgICAoKGN0YWJbcitSX1lfT0ZGXSArIGN0YWJbZytHX1lfT0ZGXSArIGN0YWJbYitCX1lfT0ZGXSkKKyAgICAgICAgICAgICAgICAgPj4gU0NBTEVCSVRTKTsKICAgICB9CiAgIH0KIH0KZGlmZiAtLWdpdCBhL2pjY29sb3IuYyBiL2pjY29sb3IuYwppbmRleCAyMTljNWRhLi5mZTk0MjJhIDEwMDY0NAotLS0gYS9qY2NvbG9yLmMKKysrIGIvamNjb2xvci5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIFRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlOgogICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTYsIFRob21hcyBHLiBMYW5lLgotICogTW9kaWZpY2F0aW9uczoKKyAqIGxpYmpwZWctdHVyYm8gTW9kaWZpY2F0aW9uczoKICAqIENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKICAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEyLCBELiBSLiBDb21tYW5kZXIuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuCkBAIC0xNSw3ICsxNSw3IEBACiAjaW5jbHVkZSAiamluY2x1ZGUuaCIKICNpbmNsdWRlICJqcGVnbGliLmgiCiAjaW5jbHVkZSAianNpbWQuaCIKLSNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJqY29uZmlnaW50LmgiCiAKIAogLyogUHJpdmF0ZSBzdWJvYmplY3QgKi8KQEAgLTI0LDcgKzI0LDcgQEAKICAgc3RydWN0IGpwZWdfY29sb3JfY29udmVydGVyIHB1YjsgLyogcHVibGljIGZpZWxkcyAqLwogCiAgIC8qIFByaXZhdGUgc3RhdGUgZm9yIFJHQi0+WUNDIGNvbnZlcnNpb24gKi8KLSAgSU5UMzIgKiByZ2JfeWNjX3RhYjsJCS8qID0+IHRhYmxlIGZvciBSR0IgdG8gWUNiQ3IgY29udmVyc2lvbiAqLworICBJTlQzMiAqIHJnYl95Y2NfdGFiOyAgICAgICAgICAvKiA9PiB0YWJsZSBmb3IgUkdCIHRvIFlDYkNyIGNvbnZlcnNpb24gKi8KIH0gbXlfY29sb3JfY29udmVydGVyOwogCiB0eXBlZGVmIG15X2NvbG9yX2NvbnZlcnRlciAqIG15X2Njb252ZXJ0X3B0cjsKQEAgLTM2LDkgKzM2LDkgQEAKICAqIFlDYkNyIGlzIGRlZmluZWQgcGVyIENDSVIgNjAxLTEsIGV4Y2VwdCB0aGF0IENiIGFuZCBDciBhcmUKICAqIG5vcm1hbGl6ZWQgdG8gdGhlIHJhbmdlIDAuLk1BWEpTQU1QTEUgcmF0aGVyIHRoYW4gLTAuNSAuLiAwLjUuCiAgKiBUaGUgY29udmVyc2lvbiBlcXVhdGlvbnMgdG8gYmUgaW1wbGVtZW50ZWQgYXJlIHRoZXJlZm9yZQotICoJWSAgPSAgMC4yOTkwMCAqIFIgKyAwLjU4NzAwICogRyArIDAuMTE0MDAgKiBCCi0gKglDYiA9IC0wLjE2ODc0ICogUiAtIDAuMzMxMjYgKiBHICsgMC41MDAwMCAqIEIgICsgQ0VOVEVSSlNBTVBMRQotICoJQ3IgPSAgMC41MDAwMCAqIFIgLSAwLjQxODY5ICogRyAtIDAuMDgxMzEgKiBCICArIENFTlRFUkpTQU1QTEUKKyAqICAgICAgWSAgPSAgMC4yOTkwMCAqIFIgKyAwLjU4NzAwICogRyArIDAuMTE0MDAgKiBCCisgKiAgICAgIENiID0gLTAuMTY4NzQgKiBSIC0gMC4zMzEyNiAqIEcgKyAwLjUwMDAwICogQiAgKyBDRU5URVJKU0FNUExFCisgKiAgICAgIENyID0gIDAuNTAwMDAgKiBSIC0gMC40MTg2OSAqIEcgLSAwLjA4MTMxICogQiAgKyBDRU5URVJKU0FNUExFCiAgKiAoVGhlc2UgbnVtYmVycyBhcmUgZGVyaXZlZCBmcm9tIFRJRkYgNi4wIHNlY3Rpb24gMjEsIGRhdGVkIDMtSnVuZS05Mi4pCiAgKiBOb3RlOiBvbGRlciB2ZXJzaW9ucyBvZiB0aGUgSUpHIGNvZGUgdXNlZCBhIHplcm8gb2Zmc2V0IG9mIE1BWEpTQU1QTEUvMiwKICAqIHJhdGhlciB0aGFuIENFTlRFUkpTQU1QTEUsIGZvciBDYiBhbmQgQ3IuICBUaGlzIGdhdmUgZXF1YWwgcG9zaXRpdmUgYW5kCkBAIC02MCwxMCArNjAsMTAgQEAKICAqIGluIHRoZSB0YWJsZXMgdG8gc2F2ZSBhZGRpbmcgdGhlbSBzZXBhcmF0ZWx5IGluIHRoZSBpbm5lciBsb29wLgogICovCiAKLSNkZWZpbmUgU0NBTEVCSVRTCTE2CS8qIHNwZWVkaWVzdCByaWdodC1zaGlmdCBvbiBzb21lIG1hY2hpbmVzICovCi0jZGVmaW5lIENCQ1JfT0ZGU0VUCSgoSU5UMzIpIENFTlRFUkpTQU1QTEUgPDwgU0NBTEVCSVRTKQotI2RlZmluZSBPTkVfSEFMRgkoKElOVDMyKSAxIDw8IChTQ0FMRUJJVFMtMSkpCi0jZGVmaW5lIEZJWCh4KQkJKChJTlQzMikgKCh4KSAqICgxTDw8U0NBTEVCSVRTKSArIDAuNSkpCisjZGVmaW5lIFNDQUxFQklUUyAgICAgICAxNiAgICAgIC8qIHNwZWVkaWVzdCByaWdodC1zaGlmdCBvbiBzb21lIG1hY2hpbmVzICovCisjZGVmaW5lIENCQ1JfT0ZGU0VUICAgICAoKElOVDMyKSBDRU5URVJKU0FNUExFIDw8IFNDQUxFQklUUykKKyNkZWZpbmUgT05FX0hBTEYgICAgICAgICgoSU5UMzIpIDEgPDwgKFNDQUxFQklUUy0xKSkKKyNkZWZpbmUgRklYKHgpICAgICAgICAgICgoSU5UMzIpICgoeCkgKiAoMUw8PFNDQUxFQklUUykgKyAwLjUpKQogCiAvKiBXZSBhbGxvY2F0ZSBvbmUgYmlnIHRhYmxlIGFuZCBkaXZpZGUgaXQgdXAgaW50byBlaWdodCBwYXJ0cywgaW5zdGVhZCBvZgogICogZG9pbmcgZWlnaHQgYWxsb2Nfc21hbGwgcmVxdWVzdHMuICBUaGlzIGxldHMgdXMgdXNlIGEgc2luZ2xlIHRhYmxlIGJhc2UKQEAgLTcxLDE2ICs3MSwxNiBAQAogICogbWFjaGluZXMgKG1vcmUgdGhhbiBjYW4gaG9sZCBhbGwgZWlnaHQgYWRkcmVzc2VzLCBhbnl3YXkpLgogICovCiAKLSNkZWZpbmUgUl9ZX09GRgkJMAkJCS8qIG9mZnNldCB0byBSID0+IFkgc2VjdGlvbiAqLwotI2RlZmluZSBHX1lfT0ZGCQkoMSooTUFYSlNBTVBMRSsxKSkJLyogb2Zmc2V0IHRvIEcgPT4gWSBzZWN0aW9uICovCi0jZGVmaW5lIEJfWV9PRkYJCSgyKihNQVhKU0FNUExFKzEpKQkvKiBldGMuICovCi0jZGVmaW5lIFJfQ0JfT0ZGCSgzKihNQVhKU0FNUExFKzEpKQotI2RlZmluZSBHX0NCX09GRgkoNCooTUFYSlNBTVBMRSsxKSkKLSNkZWZpbmUgQl9DQl9PRkYJKDUqKE1BWEpTQU1QTEUrMSkpCi0jZGVmaW5lIFJfQ1JfT0ZGCUJfQ0JfT0ZGCQkvKiBCPT5DYiwgUj0+Q3IgYXJlIHRoZSBzYW1lICovCi0jZGVmaW5lIEdfQ1JfT0ZGCSg2KihNQVhKU0FNUExFKzEpKQotI2RlZmluZSBCX0NSX09GRgkoNyooTUFYSlNBTVBMRSsxKSkKLSNkZWZpbmUgVEFCTEVfU0laRQkoOCooTUFYSlNBTVBMRSsxKSkKKyNkZWZpbmUgUl9ZX09GRiAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9mZnNldCB0byBSID0+IFkgc2VjdGlvbiAqLworI2RlZmluZSBHX1lfT0ZGICAgICAgICAgKDEqKE1BWEpTQU1QTEUrMSkpICAgICAgLyogb2Zmc2V0IHRvIEcgPT4gWSBzZWN0aW9uICovCisjZGVmaW5lIEJfWV9PRkYgICAgICAgICAoMiooTUFYSlNBTVBMRSsxKSkgICAgICAvKiBldGMuICovCisjZGVmaW5lIFJfQ0JfT0ZGICAgICAgICAoMyooTUFYSlNBTVBMRSsxKSkKKyNkZWZpbmUgR19DQl9PRkYgICAgICAgICg0KihNQVhKU0FNUExFKzEpKQorI2RlZmluZSBCX0NCX09GRiAgICAgICAgKDUqKE1BWEpTQU1QTEUrMSkpCisjZGVmaW5lIFJfQ1JfT0ZGICAgICAgICBCX0NCX09GRiAgICAgICAgICAgICAgICAvKiBCPT5DYiwgUj0+Q3IgYXJlIHRoZSBzYW1lICovCisjZGVmaW5lIEdfQ1JfT0ZGICAgICAgICAoNiooTUFYSlNBTVBMRSsxKSkKKyNkZWZpbmUgQl9DUl9PRkYgICAgICAgICg3KihNQVhKU0FNUExFKzEpKQorI2RlZmluZSBUQUJMRV9TSVpFICAgICAgKDgqKE1BWEpTQU1QTEUrMSkpCiAKIAogLyogSW5jbHVkZSBpbmxpbmUgcm91dGluZXMgZm9yIGNvbG9yc3BhY2UgZXh0ZW5zaW9ucyAqLwpAQCAtMjAyLDcgKzIwMiw3IEBACiAgIC8qIEFsbG9jYXRlIGFuZCBmaWxsIGluIHRoZSBjb252ZXJzaW9uIHRhYmxlcy4gKi8KICAgY2NvbnZlcnQtPnJnYl95Y2NfdGFiID0gcmdiX3ljY190YWIgPSAoSU5UMzIgKikKICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAotCQkJCShUQUJMRV9TSVpFICogU0laRU9GKElOVDMyKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVEFCTEVfU0laRSAqIFNJWkVPRihJTlQzMikpKTsKIAogICBmb3IgKGkgPSAwOyBpIDw9IE1BWEpTQU1QTEU7IGkrKykgewogICAgIHJnYl95Y2NfdGFiW2krUl9ZX09GRl0gPSBGSVgoMC4yOTkwMCkgKiBpOwpAQCAtMjMwLDggKzIzMCw4IEBACiAKIE1FVEhPRERFRih2b2lkKQogcmdiX3ljY19jb252ZXJ0IChqX2NvbXByZXNzX3B0ciBjaW5mbywKLQkJIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKU0FNUElNQUdFIG91dHB1dF9idWYsCi0JCSBKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cykKKyAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfcm93LCBpbnQgbnVtX3Jvd3MpCiB7CiAgIHN3aXRjaCAoY2luZm8tPmluX2NvbG9yX3NwYWNlKSB7CiAgICAgY2FzZSBKQ1NfRVhUX1JHQjoKQEAgLTI3OSw4ICsyNzksOCBAQAogCiBNRVRIT0RERUYodm9pZCkKIHJnYl9ncmF5X2NvbnZlcnQgKGpfY29tcHJlc3NfcHRyIGNpbmZvLAotCQkgIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKU0FNUElNQUdFIG91dHB1dF9idWYsCi0JCSAgSkRJTUVOU0lPTiBvdXRwdXRfcm93LCBpbnQgbnVtX3Jvd3MpCisgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfcm93LCBpbnQgbnVtX3Jvd3MpCiB7CiAgIHN3aXRjaCAoY2luZm8tPmluX2NvbG9yX3NwYWNlKSB7CiAgICAgY2FzZSBKQ1NfRVhUX1JHQjoKQEAgLTMyNSw4ICszMjUsOCBAQAogCiBNRVRIT0RERUYodm9pZCkKIHJnYl9yZ2JfY29udmVydCAoal9jb21wcmVzc19wdHIgY2luZm8sCi0JCSAgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKLQkJICBKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cykKKyAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKU0FNUElNQUdFIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cykKIHsKICAgc3dpdGNoIChjaW5mby0+aW5fY29sb3Jfc3BhY2UpIHsKICAgICBjYXNlIEpDU19FWFRfUkdCOgpAQCAtMzc1LDggKzM3NSw4IEBACiAKIE1FVEhPRERFRih2b2lkKQogY215a195Y2NrX2NvbnZlcnQgKGpfY29tcHJlc3NfcHRyIGNpbmZvLAotCQkgICBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLAotCQkgICBKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cykKKyAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKQogewogICBteV9jY29udmVydF9wdHIgY2NvbnZlcnQgPSAobXlfY2NvbnZlcnRfcHRyKSBjaW5mby0+Y2NvbnZlcnQ7CiAgIHJlZ2lzdGVyIGludCByLCBnLCBiOwpAQCAtMzk4LDcgKzM5OCw3IEBACiAgICAgICBnID0gTUFYSlNBTVBMRSAtIEdFVEpTQU1QTEUoaW5wdHJbMV0pOwogICAgICAgYiA9IE1BWEpTQU1QTEUgLSBHRVRKU0FNUExFKGlucHRyWzJdKTsKICAgICAgIC8qIEsgcGFzc2VzIHRocm91Z2ggYXMtaXMgKi8KLSAgICAgIG91dHB0cjNbY29sXSA9IGlucHRyWzNdOwkvKiBkb24ndCBuZWVkIEdFVEpTQU1QTEUgaGVyZSAqLworICAgICAgb3V0cHRyM1tjb2xdID0gaW5wdHJbM107ICAvKiBkb24ndCBuZWVkIEdFVEpTQU1QTEUgaGVyZSAqLwogICAgICAgaW5wdHIgKz0gNDsKICAgICAgIC8qIElmIHRoZSBpbnB1dHMgYXJlIDAuLk1BWEpTQU1QTEUsIHRoZSBvdXRwdXRzIG9mIHRoZXNlIGVxdWF0aW9ucwogICAgICAgICogbXVzdCBiZSB0b287IHdlIGRvIG5vdCBuZWVkIGFuIGV4cGxpY2l0IHJhbmdlLWxpbWl0aW5nIG9wZXJhdGlvbi4KQEAgLTQwNywxNiArNDA3LDE2IEBACiAgICAgICAgKi8KICAgICAgIC8qIFkgKi8KICAgICAgIG91dHB0cjBbY29sXSA9IChKU0FNUExFKQotCQkoKGN0YWJbcitSX1lfT0ZGXSArIGN0YWJbZytHX1lfT0ZGXSArIGN0YWJbYitCX1lfT0ZGXSkKLQkJID4+IFNDQUxFQklUUyk7CisgICAgICAgICAgICAgICAgKChjdGFiW3IrUl9ZX09GRl0gKyBjdGFiW2crR19ZX09GRl0gKyBjdGFiW2IrQl9ZX09GRl0pCisgICAgICAgICAgICAgICAgID4+IFNDQUxFQklUUyk7CiAgICAgICAvKiBDYiAqLwogICAgICAgb3V0cHRyMVtjb2xdID0gKEpTQU1QTEUpCi0JCSgoY3RhYltyK1JfQ0JfT0ZGXSArIGN0YWJbZytHX0NCX09GRl0gKyBjdGFiW2IrQl9DQl9PRkZdKQotCQkgPj4gU0NBTEVCSVRTKTsKKyAgICAgICAgICAgICAgICAoKGN0YWJbcitSX0NCX09GRl0gKyBjdGFiW2crR19DQl9PRkZdICsgY3RhYltiK0JfQ0JfT0ZGXSkKKyAgICAgICAgICAgICAgICAgPj4gU0NBTEVCSVRTKTsKICAgICAgIC8qIENyICovCiAgICAgICBvdXRwdHIyW2NvbF0gPSAoSlNBTVBMRSkKLQkJKChjdGFiW3IrUl9DUl9PRkZdICsgY3RhYltnK0dfQ1JfT0ZGXSArIGN0YWJbYitCX0NSX09GRl0pCi0JCSA+PiBTQ0FMRUJJVFMpOworICAgICAgICAgICAgICAgICgoY3RhYltyK1JfQ1JfT0ZGXSArIGN0YWJbZytHX0NSX09GRl0gKyBjdGFiW2IrQl9DUl9PRkZdKQorICAgICAgICAgICAgICAgICA+PiBTQ0FMRUJJVFMpOwogICAgIH0KICAgfQogfQpAQCAtNDMwLDggKzQzMCw4IEBACiAKIE1FVEhPRERFRih2b2lkKQogZ3JheXNjYWxlX2NvbnZlcnQgKGpfY29tcHJlc3NfcHRyIGNpbmZvLAotCQkgICBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLAotCQkgICBKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cykKKyAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKQogewogICByZWdpc3RlciBKU0FNUFJPVyBpbnB0cjsKICAgcmVnaXN0ZXIgSlNBTVBST1cgb3V0cHRyOwpAQCAtNDQ0LDcgKzQ0NCw3IEBACiAgICAgb3V0cHRyID0gb3V0cHV0X2J1ZlswXVtvdXRwdXRfcm93XTsKICAgICBvdXRwdXRfcm93Kys7CiAgICAgZm9yIChjb2wgPSAwOyBjb2wgPCBudW1fY29sczsgY29sKyspIHsKLSAgICAgIG91dHB0cltjb2xdID0gaW5wdHJbMF07CS8qIGRvbid0IG5lZWQgR0VUSlNBTVBMRSgpIGhlcmUgKi8KKyAgICAgIG91dHB0cltjb2xdID0gaW5wdHJbMF07ICAgLyogZG9uJ3QgbmVlZCBHRVRKU0FNUExFKCkgaGVyZSAqLwogICAgICAgaW5wdHIgKz0gaW5zdHJpZGU7CiAgICAgfQogICB9CkBAIC00NTksOCArNDU5LDggQEAKIAogTUVUSE9EREVGKHZvaWQpCiBudWxsX2NvbnZlcnQgKGpfY29tcHJlc3NfcHRyIGNpbmZvLAotCSAgICAgIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKU0FNUElNQUdFIG91dHB1dF9idWYsCi0JICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfcm93LCBpbnQgbnVtX3Jvd3MpCisgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKU0FNUElNQUdFIG91dHB1dF9idWYsCisgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKQogewogICByZWdpc3RlciBKU0FNUFJPVyBpbnB0cjsKICAgcmVnaXN0ZXIgSlNBTVBST1cgb3V0cHRyOwpAQCAtNDc1LDggKzQ3NSw4IEBACiAgICAgICBpbnB0ciA9ICppbnB1dF9idWY7CiAgICAgICBvdXRwdHIgPSBvdXRwdXRfYnVmW2NpXVtvdXRwdXRfcm93XTsKICAgICAgIGZvciAoY29sID0gMDsgY29sIDwgbnVtX2NvbHM7IGNvbCsrKSB7Ci0Jb3V0cHRyW2NvbF0gPSBpbnB0cltjaV07IC8qIGRvbid0IG5lZWQgR0VUSlNBTVBMRSgpIGhlcmUgKi8KLQlpbnB0ciArPSBuYzsKKyAgICAgICAgb3V0cHRyW2NvbF0gPSBpbnB0cltjaV07IC8qIGRvbid0IG5lZWQgR0VUSlNBTVBMRSgpIGhlcmUgKi8KKyAgICAgICAgaW5wdHIgKz0gbmM7CiAgICAgICB9CiAgICAgfQogICAgIGlucHV0X2J1ZisrOwpAQCAtNTA3LDcgKzUwNyw3IEBACiAKICAgY2NvbnZlcnQgPSAobXlfY2NvbnZlcnRfcHRyKQogICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCi0JCQkJU0laRU9GKG15X2NvbG9yX2NvbnZlcnRlcikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSVpFT0YobXlfY29sb3JfY29udmVydGVyKSk7CiAgIGNpbmZvLT5jY29udmVydCA9IChzdHJ1Y3QganBlZ19jb2xvcl9jb252ZXJ0ZXIgKikgY2NvbnZlcnQ7CiAgIC8qIHNldCBzdGFydF9wYXNzIHRvIG51bGwgbWV0aG9kIHVudGlsIHdlIGZpbmQgb3V0IGRpZmZlcmVudGx5ICovCiAgIGNjb252ZXJ0LT5wdWIuc3RhcnRfcGFzcyA9IG51bGxfbWV0aG9kOwpAQCAtNTQ1LDcgKzU0NSw3IEBACiAgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9JTl9DT0xPUlNQQUNFKTsKICAgICBicmVhazsKIAotICBkZWZhdWx0OgkJCS8qIEpDU19VTktOT1dOIGNhbiBiZSBhbnl0aGluZyAqLworICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAvKiBKQ1NfVU5LTk9XTiBjYW4gYmUgYW55dGhpbmcgKi8KICAgICBpZiAoY2luZm8tPmlucHV0X2NvbXBvbmVudHMgPCAxKQogICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfSU5fQ09MT1JTUEFDRSk7CiAgICAgYnJlYWs7CkBAIC02NTIsOSArNjUyLDkgQEAKICAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQ09OVkVSU0lPTl9OT1RJTVBMKTsKICAgICBicmVhazsKIAotICBkZWZhdWx0OgkJCS8qIGFsbG93IG51bGwgY29udmVyc2lvbiBvZiBKQ1NfVU5LTk9XTiAqLworICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAvKiBhbGxvdyBudWxsIGNvbnZlcnNpb24gb2YgSkNTX1VOS05PV04gKi8KICAgICBpZiAoY2luZm8tPmpwZWdfY29sb3Jfc3BhY2UgIT0gY2luZm8tPmluX2NvbG9yX3NwYWNlIHx8Ci0JY2luZm8tPm51bV9jb21wb25lbnRzICE9IGNpbmZvLT5pbnB1dF9jb21wb25lbnRzKQorICAgICAgICBjaW5mby0+bnVtX2NvbXBvbmVudHMgIT0gY2luZm8tPmlucHV0X2NvbXBvbmVudHMpCiAgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0NPTlZFUlNJT05fTk9USU1QTCk7CiAgICAgY2NvbnZlcnQtPnB1Yi5jb2xvcl9jb252ZXJ0ID0gbnVsbF9jb252ZXJ0OwogICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvamNkY3RtZ3IuYyBiL2pjZGN0bWdyLmMKaW5kZXggNDNkYjAzYS4uYmY0MGZmNyAxMDA2NDQKLS0tIGEvamNkY3RtZ3IuYworKysgYi9qY2RjdG1nci5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIFRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlOgogICogQ29weXJpZ2h0IChDKSAxOTk0LTE5OTYsIFRob21hcyBHLiBMYW5lLgotICogTW9kaWZpY2F0aW9uczoKKyAqIGxpYmpwZWctdHVyYm8gTW9kaWZpY2F0aW9uczoKICAqIENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCiAgKiBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgRC4gUi4gQ29tbWFuZGVyCkBAIC0xOCw3ICsxOCw3IEBACiAjZGVmaW5lIEpQRUdfSU5URVJOQUxTCiAjaW5jbHVkZSAiamluY2x1ZGUuaCIKICNpbmNsdWRlICJqcGVnbGliLmgiCi0jaW5jbHVkZSAiamRjdC5oIgkJLyogUHJpdmF0ZSBkZWNsYXJhdGlvbnMgZm9yIERDVCBzdWJzeXN0ZW0gKi8KKyNpbmNsdWRlICJqZGN0LmgiICAgICAgICAgICAgICAgLyogUHJpdmF0ZSBkZWNsYXJhdGlvbnMgZm9yIERDVCBzdWJzeXN0ZW0gKi8KICNpbmNsdWRlICJqc2ltZGRjdC5oIgogCiAKQEAgLTQ0LDcgKzQ0LDcgQEAKIE1FVEhPRERFRih2b2lkKSBxdWFudGl6ZSAoSkNPRUZQVFIsIERDVEVMRU0gKiwgRENURUxFTSAqKTsKIAogdHlwZWRlZiBzdHJ1Y3QgewotICBzdHJ1Y3QganBlZ19mb3J3YXJkX2RjdCBwdWI7CS8qIHB1YmxpYyBmaWVsZHMgKi8KKyAgc3RydWN0IGpwZWdfZm9yd2FyZF9kY3QgcHViOyAgLyogcHVibGljIGZpZWxkcyAqLwogCiAgIC8qIFBvaW50ZXIgdG8gdGhlIERDVCByb3V0aW5lIGFjdHVhbGx5IGluIHVzZSAqLwogICBmb3J3YXJkX0RDVF9tZXRob2RfcHRyIGRjdDsKQEAgLTE0Nyw3ICsxNDcsNyBAQAogICoKICAqIEluIG9yZGVyIHRvIGFsbG93IFNJTUQgaW1wbGVtZW50YXRpb25zIHdlIGFsc28gdHdlYWsgdGhlIHZhbHVlcyB0bwogICogYWxsb3cgdGhlIHNhbWUgY2FsY3VsYXRpb24gdG8gYmUgbWFkZSBhdCBhbGwgdGltZXM6Ci0gKiAKKyAqCiAgKiAgIGRjdGJsWzBdID0gZiByb3VuZGVkIHRvIG5lYXJlc3QgaW50ZWdlcgogICogICBkY3RibFsxXSA9IGRpdmlzb3IgLyAyICgrIDEgaWYgZnJhY3Rpb25hbCBwYXJ0IG9mIGYgPCAwLjUpCiAgKiAgIGRjdGJsWzJdID0gMSA8PCAoKHdvcmQgc2l6ZSkgKiAyIC0gcikKQEAgLTIyMSw3ICsyMjEsNyBAQAogICAgIHF0YmxubyA9IGNvbXBwdHItPnF1YW50X3RibF9ubzsKICAgICAvKiBNYWtlIHN1cmUgc3BlY2lmaWVkIHF1YW50aXphdGlvbiB0YWJsZSBpcyBwcmVzZW50ICovCiAgICAgaWYgKHF0YmxubyA8IDAgfHwgcXRibG5vID49IE5VTV9RVUFOVF9UQkxTIHx8Ci0JY2luZm8tPnF1YW50X3RibF9wdHJzW3F0Ymxub10gPT0gTlVMTCkKKyAgICAgICAgY2luZm8tPnF1YW50X3RibF9wdHJzW3F0Ymxub10gPT0gTlVMTCkKICAgICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX05PX1FVQU5UX1RBQkxFLCBxdGJsbm8pOwogICAgIHF0YmwgPSBjaW5mby0+cXVhbnRfdGJsX3B0cnNbcXRibG5vXTsKICAgICAvKiBDb21wdXRlIGRpdmlzb3JzIGZvciB0aGlzIHF1YW50IHRhYmxlICovCkBAIC0yMzMsOTEgKzIzMyw5MSBAQAogICAgICAgICogY29lZmZpY2llbnRzIG11bHRpcGxpZWQgYnkgOCAodG8gY291bnRlcmFjdCBzY2FsaW5nKS4KICAgICAgICAqLwogICAgICAgaWYgKGZkY3QtPmRpdmlzb3JzW3F0Ymxub10gPT0gTlVMTCkgewotCWZkY3QtPmRpdmlzb3JzW3F0Ymxub10gPSAoRENURUxFTSAqKQotCSAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKLQkJCQkgICAgICAoRENUU0laRTIgKiA0KSAqIFNJWkVPRihEQ1RFTEVNKSk7CisgICAgICAgIGZkY3QtPmRpdmlzb3JzW3F0Ymxub10gPSAoRENURUxFTSAqKQorICAgICAgICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChEQ1RTSVpFMiAqIDQpICogU0laRU9GKERDVEVMRU0pKTsKICAgICAgIH0KICAgICAgIGR0YmwgPSBmZGN0LT5kaXZpc29yc1txdGJsbm9dOwogICAgICAgZm9yIChpID0gMDsgaSA8IERDVFNJWkUyOyBpKyspIHsKLQlpZighY29tcHV0ZV9yZWNpcHJvY2FsKHF0YmwtPnF1YW50dmFsW2ldIDw8IDMsICZkdGJsW2ldKQotCSAgJiYgZmRjdC0+cXVhbnRpemUgPT0ganNpbWRfcXVhbnRpemUpCi0JICBmZGN0LT5xdWFudGl6ZSA9IHF1YW50aXplOworICAgICAgICBpZighY29tcHV0ZV9yZWNpcHJvY2FsKHF0YmwtPnF1YW50dmFsW2ldIDw8IDMsICZkdGJsW2ldKQorICAgICAgICAgICYmIGZkY3QtPnF1YW50aXplID09IGpzaW1kX3F1YW50aXplKQorICAgICAgICAgIGZkY3QtPnF1YW50aXplID0gcXVhbnRpemU7CiAgICAgICB9CiAgICAgICBicmVhazsKICNlbmRpZgogI2lmZGVmIERDVF9JRkFTVF9TVVBQT1JURUQKICAgICBjYXNlIEpEQ1RfSUZBU1Q6CiAgICAgICB7Ci0JLyogRm9yIEFBJk4gSURDVCBtZXRob2QsIGRpdmlzb3JzIGFyZSBlcXVhbCB0byBxdWFudGl6YXRpb24KLQkgKiBjb2VmZmljaWVudHMgc2NhbGVkIGJ5IHNjYWxlZmFjdG9yW3Jvd10qc2NhbGVmYWN0b3JbY29sXSwgd2hlcmUKLQkgKiAgIHNjYWxlZmFjdG9yWzBdID0gMQotCSAqICAgc2NhbGVmYWN0b3Jba10gPSBjb3MoaypQSS8xNikgKiBzcXJ0KDIpICAgIGZvciBrPTEuLjcKLQkgKiBXZSBhcHBseSBhIGZ1cnRoZXIgc2NhbGUgZmFjdG9yIG9mIDguCi0JICovCisgICAgICAgIC8qIEZvciBBQSZOIElEQ1QgbWV0aG9kLCBkaXZpc29ycyBhcmUgZXF1YWwgdG8gcXVhbnRpemF0aW9uCisgICAgICAgICAqIGNvZWZmaWNpZW50cyBzY2FsZWQgYnkgc2NhbGVmYWN0b3Jbcm93XSpzY2FsZWZhY3Rvcltjb2xdLCB3aGVyZQorICAgICAgICAgKiAgIHNjYWxlZmFjdG9yWzBdID0gMQorICAgICAgICAgKiAgIHNjYWxlZmFjdG9yW2tdID0gY29zKGsqUEkvMTYpICogc3FydCgyKSAgICBmb3Igaz0xLi43CisgICAgICAgICAqIFdlIGFwcGx5IGEgZnVydGhlciBzY2FsZSBmYWN0b3Igb2YgOC4KKyAgICAgICAgICovCiAjZGVmaW5lIENPTlNUX0JJVFMgMTQKLQlzdGF0aWMgY29uc3QgSU5UMTYgYWFuc2NhbGVzW0RDVFNJWkUyXSA9IHsKLQkgIC8qIHByZWNvbXB1dGVkIHZhbHVlcyBzY2FsZWQgdXAgYnkgMTQgYml0cyAqLwotCSAgMTYzODQsIDIyNzI1LCAyMTQwNywgMTkyNjYsIDE2Mzg0LCAxMjg3MywgIDg4NjcsICA0NTIwLAotCSAgMjI3MjUsIDMxNTIxLCAyOTY5MiwgMjY3MjIsIDIyNzI1LCAxNzg1NSwgMTIyOTksICA2MjcwLAotCSAgMjE0MDcsIDI5NjkyLCAyNzk2OSwgMjUxNzIsIDIxNDA3LCAxNjgxOSwgMTE1ODUsICA1OTA2LAotCSAgMTkyNjYsIDI2NzIyLCAyNTE3MiwgMjI2NTQsIDE5MjY2LCAxNTEzNywgMTA0MjYsICA1MzE1LAotCSAgMTYzODQsIDIyNzI1LCAyMTQwNywgMTkyNjYsIDE2Mzg0LCAxMjg3MywgIDg4NjcsICA0NTIwLAotCSAgMTI4NzMsIDE3ODU1LCAxNjgxOSwgMTUxMzcsIDEyODczLCAxMDExNCwgIDY5NjcsICAzNTUyLAotCSAgIDg4NjcsIDEyMjk5LCAxMTU4NSwgMTA0MjYsICA4ODY3LCAgNjk2NywgIDQ3OTksICAyNDQ2LAotCSAgIDQ1MjAsICA2MjcwLCAgNTkwNiwgIDUzMTUsICA0NTIwLCAgMzU1MiwgIDI0NDYsICAxMjQ3Ci0JfTsKLQlTSElGVF9URU1QUworICAgICAgICBzdGF0aWMgY29uc3QgSU5UMTYgYWFuc2NhbGVzW0RDVFNJWkUyXSA9IHsKKyAgICAgICAgICAvKiBwcmVjb21wdXRlZCB2YWx1ZXMgc2NhbGVkIHVwIGJ5IDE0IGJpdHMgKi8KKyAgICAgICAgICAxNjM4NCwgMjI3MjUsIDIxNDA3LCAxOTI2NiwgMTYzODQsIDEyODczLCAgODg2NywgIDQ1MjAsCisgICAgICAgICAgMjI3MjUsIDMxNTIxLCAyOTY5MiwgMjY3MjIsIDIyNzI1LCAxNzg1NSwgMTIyOTksICA2MjcwLAorICAgICAgICAgIDIxNDA3LCAyOTY5MiwgMjc5NjksIDI1MTcyLCAyMTQwNywgMTY4MTksIDExNTg1LCAgNTkwNiwKKyAgICAgICAgICAxOTI2NiwgMjY3MjIsIDI1MTcyLCAyMjY1NCwgMTkyNjYsIDE1MTM3LCAxMDQyNiwgIDUzMTUsCisgICAgICAgICAgMTYzODQsIDIyNzI1LCAyMTQwNywgMTkyNjYsIDE2Mzg0LCAxMjg3MywgIDg4NjcsICA0NTIwLAorICAgICAgICAgIDEyODczLCAxNzg1NSwgMTY4MTksIDE1MTM3LCAxMjg3MywgMTAxMTQsICA2OTY3LCAgMzU1MiwKKyAgICAgICAgICAgODg2NywgMTIyOTksIDExNTg1LCAxMDQyNiwgIDg4NjcsICA2OTY3LCAgNDc5OSwgIDI0NDYsCisgICAgICAgICAgIDQ1MjAsICA2MjcwLCAgNTkwNiwgIDUzMTUsICA0NTIwLCAgMzU1MiwgIDI0NDYsICAxMjQ3CisgICAgICAgIH07CisgICAgICAgIFNISUZUX1RFTVBTCiAKLQlpZiAoZmRjdC0+ZGl2aXNvcnNbcXRibG5vXSA9PSBOVUxMKSB7Ci0JICBmZGN0LT5kaXZpc29yc1txdGJsbm9dID0gKERDVEVMRU0gKikKLQkgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKLQkJCQkJKERDVFNJWkUyICogNCkgKiBTSVpFT0YoRENURUxFTSkpOwotCX0KLQlkdGJsID0gZmRjdC0+ZGl2aXNvcnNbcXRibG5vXTsKLQlmb3IgKGkgPSAwOyBpIDwgRENUU0laRTI7IGkrKykgewotCSAgaWYoIWNvbXB1dGVfcmVjaXByb2NhbCgKLQkgICAgREVTQ0FMRShNVUxUSVBMWTE2VjE2KChJTlQzMikgcXRibC0+cXVhbnR2YWxbaV0sCi0JCQkJICAoSU5UMzIpIGFhbnNjYWxlc1tpXSksCi0JCSAgICBDT05TVF9CSVRTLTMpLCAmZHRibFtpXSkKLQkgICAgJiYgZmRjdC0+cXVhbnRpemUgPT0ganNpbWRfcXVhbnRpemUpCi0JICAgIGZkY3QtPnF1YW50aXplID0gcXVhbnRpemU7Ci0JfQorICAgICAgICBpZiAoZmRjdC0+ZGl2aXNvcnNbcXRibG5vXSA9PSBOVUxMKSB7CisgICAgICAgICAgZmRjdC0+ZGl2aXNvcnNbcXRibG5vXSA9IChEQ1RFTEVNICopCisgICAgICAgICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChEQ1RTSVpFMiAqIDQpICogU0laRU9GKERDVEVMRU0pKTsKKyAgICAgICAgfQorICAgICAgICBkdGJsID0gZmRjdC0+ZGl2aXNvcnNbcXRibG5vXTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IERDVFNJWkUyOyBpKyspIHsKKyAgICAgICAgICBpZighY29tcHV0ZV9yZWNpcHJvY2FsKAorICAgICAgICAgICAgREVTQ0FMRShNVUxUSVBMWTE2VjE2KChJTlQzMikgcXRibC0+cXVhbnR2YWxbaV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKElOVDMyKSBhYW5zY2FsZXNbaV0pLAorICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTLTMpLCAmZHRibFtpXSkKKyAgICAgICAgICAgICYmIGZkY3QtPnF1YW50aXplID09IGpzaW1kX3F1YW50aXplKQorICAgICAgICAgICAgZmRjdC0+cXVhbnRpemUgPSBxdWFudGl6ZTsKKyAgICAgICAgfQogICAgICAgfQogICAgICAgYnJlYWs7CiAjZW5kaWYKICNpZmRlZiBEQ1RfRkxPQVRfU1VQUE9SVEVECiAgICAgY2FzZSBKRENUX0ZMT0FUOgogICAgICAgewotCS8qIEZvciBmbG9hdCBBQSZOIElEQ1QgbWV0aG9kLCBkaXZpc29ycyBhcmUgZXF1YWwgdG8gcXVhbnRpemF0aW9uCi0JICogY29lZmZpY2llbnRzIHNjYWxlZCBieSBzY2FsZWZhY3Rvcltyb3ddKnNjYWxlZmFjdG9yW2NvbF0sIHdoZXJlCi0JICogICBzY2FsZWZhY3RvclswXSA9IDEKLQkgKiAgIHNjYWxlZmFjdG9yW2tdID0gY29zKGsqUEkvMTYpICogc3FydCgyKSAgICBmb3Igaz0xLi43Ci0JICogV2UgYXBwbHkgYSBmdXJ0aGVyIHNjYWxlIGZhY3RvciBvZiA4LgotCSAqIFdoYXQncyBhY3R1YWxseSBzdG9yZWQgaXMgMS9kaXZpc29yIHNvIHRoYXQgdGhlIGlubmVyIGxvb3AgY2FuCi0JICogdXNlIGEgbXVsdGlwbGljYXRpb24gcmF0aGVyIHRoYW4gYSBkaXZpc2lvbi4KLQkgKi8KLQlGQVNUX0ZMT0FUICogZmR0Ymw7Ci0JaW50IHJvdywgY29sOwotCXN0YXRpYyBjb25zdCBkb3VibGUgYWFuc2NhbGVmYWN0b3JbRENUU0laRV0gPSB7Ci0JICAxLjAsIDEuMzg3MDM5ODQ1LCAxLjMwNjU2Mjk2NSwgMS4xNzU4NzU2MDIsCi0JICAxLjAsIDAuNzg1Njk0OTU4LCAwLjU0MTE5NjEwMCwgMC4yNzU4OTkzNzkKLQl9OworICAgICAgICAvKiBGb3IgZmxvYXQgQUEmTiBJRENUIG1ldGhvZCwgZGl2aXNvcnMgYXJlIGVxdWFsIHRvIHF1YW50aXphdGlvbgorICAgICAgICAgKiBjb2VmZmljaWVudHMgc2NhbGVkIGJ5IHNjYWxlZmFjdG9yW3Jvd10qc2NhbGVmYWN0b3JbY29sXSwgd2hlcmUKKyAgICAgICAgICogICBzY2FsZWZhY3RvclswXSA9IDEKKyAgICAgICAgICogICBzY2FsZWZhY3RvcltrXSA9IGNvcyhrKlBJLzE2KSAqIHNxcnQoMikgICAgZm9yIGs9MS4uNworICAgICAgICAgKiBXZSBhcHBseSBhIGZ1cnRoZXIgc2NhbGUgZmFjdG9yIG9mIDguCisgICAgICAgICAqIFdoYXQncyBhY3R1YWxseSBzdG9yZWQgaXMgMS9kaXZpc29yIHNvIHRoYXQgdGhlIGlubmVyIGxvb3AgY2FuCisgICAgICAgICAqIHVzZSBhIG11bHRpcGxpY2F0aW9uIHJhdGhlciB0aGFuIGEgZGl2aXNpb24uCisgICAgICAgICAqLworICAgICAgICBGQVNUX0ZMT0FUICogZmR0Ymw7CisgICAgICAgIGludCByb3csIGNvbDsKKyAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBhYW5zY2FsZWZhY3RvcltEQ1RTSVpFXSA9IHsKKyAgICAgICAgICAxLjAsIDEuMzg3MDM5ODQ1LCAxLjMwNjU2Mjk2NSwgMS4xNzU4NzU2MDIsCisgICAgICAgICAgMS4wLCAwLjc4NTY5NDk1OCwgMC41NDExOTYxMDAsIDAuMjc1ODk5Mzc5CisgICAgICAgIH07CiAKLQlpZiAoZmRjdC0+ZmxvYXRfZGl2aXNvcnNbcXRibG5vXSA9PSBOVUxMKSB7Ci0JICBmZGN0LT5mbG9hdF9kaXZpc29yc1txdGJsbm9dID0gKEZBU1RfRkxPQVQgKikKLQkgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKLQkJCQkJRENUU0laRTIgKiBTSVpFT0YoRkFTVF9GTE9BVCkpOwotCX0KLQlmZHRibCA9IGZkY3QtPmZsb2F0X2Rpdmlzb3JzW3F0Ymxub107Ci0JaSA9IDA7Ci0JZm9yIChyb3cgPSAwOyByb3cgPCBEQ1RTSVpFOyByb3crKykgewotCSAgZm9yIChjb2wgPSAwOyBjb2wgPCBEQ1RTSVpFOyBjb2wrKykgewotCSAgICBmZHRibFtpXSA9IChGQVNUX0ZMT0FUKQotCSAgICAgICgxLjAgLyAoKChkb3VibGUpIHF0YmwtPnF1YW50dmFsW2ldICoKLQkJICAgICAgIGFhbnNjYWxlZmFjdG9yW3Jvd10gKiBhYW5zY2FsZWZhY3Rvcltjb2xdICogOC4wKSkpOwotCSAgICBpKys7Ci0JICB9Ci0JfQorICAgICAgICBpZiAoZmRjdC0+ZmxvYXRfZGl2aXNvcnNbcXRibG5vXSA9PSBOVUxMKSB7CisgICAgICAgICAgZmRjdC0+ZmxvYXRfZGl2aXNvcnNbcXRibG5vXSA9IChGQVNUX0ZMT0FUICopCisgICAgICAgICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERDVFNJWkUyICogU0laRU9GKEZBU1RfRkxPQVQpKTsKKyAgICAgICAgfQorICAgICAgICBmZHRibCA9IGZkY3QtPmZsb2F0X2Rpdmlzb3JzW3F0Ymxub107CisgICAgICAgIGkgPSAwOworICAgICAgICBmb3IgKHJvdyA9IDA7IHJvdyA8IERDVFNJWkU7IHJvdysrKSB7CisgICAgICAgICAgZm9yIChjb2wgPSAwOyBjb2wgPCBEQ1RTSVpFOyBjb2wrKykgeworICAgICAgICAgICAgZmR0YmxbaV0gPSAoRkFTVF9GTE9BVCkKKyAgICAgICAgICAgICAgKDEuMCAvICgoKGRvdWJsZSkgcXRibC0+cXVhbnR2YWxbaV0gKgorICAgICAgICAgICAgICAgICAgICAgICBhYW5zY2FsZWZhY3Rvcltyb3ddICogYWFuc2NhbGVmYWN0b3JbY29sXSAqIDguMCkpKTsKKyAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgIH0KICAgICAgIGJyZWFrOwogI2VuZGlmCkBAIC0zNDQsNyArMzQ0LDcgQEAKICAgZm9yIChlbGVtciA9IDA7IGVsZW1yIDwgRENUU0laRTsgZWxlbXIrKykgewogICAgIGVsZW1wdHIgPSBzYW1wbGVfZGF0YVtlbGVtcl0gKyBzdGFydF9jb2w7CiAKLSNpZiBEQ1RTSVpFID09IDgJCS8qIHVucm9sbCB0aGUgaW5uZXIgbG9vcCAqLworI2lmIERDVFNJWkUgPT0gOCAgICAgICAgICAgICAgICAvKiB1bnJvbGwgdGhlIGlubmVyIGxvb3AgKi8KICAgICAqd29ya3NwYWNlcHRyKysgPSBHRVRKU0FNUExFKCplbGVtcHRyKyspIC0gQ0VOVEVSSlNBTVBMRTsKICAgICAqd29ya3NwYWNlcHRyKysgPSBHRVRKU0FNUExFKCplbGVtcHRyKyspIC0gQ0VOVEVSSlNBTVBMRTsKICAgICAqd29ya3NwYWNlcHRyKysgPSBHRVRKU0FNUExFKCplbGVtcHRyKyspIC0gQ0VOVEVSSlNBTVBMRTsKQEAgLTQxMCw5ICs0MTAsOSBAQAogCiBNRVRIT0RERUYodm9pZCkKIGZvcndhcmRfRENUIChqX2NvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCi0JICAgICBKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKQkxPQ0tST1cgY29lZl9ibG9ja3MsCi0JICAgICBKRElNRU5TSU9OIHN0YXJ0X3JvdywgSkRJTUVOU0lPTiBzdGFydF9jb2wsCi0JICAgICBKRElNRU5TSU9OIG51bV9ibG9ja3MpCisgICAgICAgICAgICAgSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkJMT0NLUk9XIGNvZWZfYmxvY2tzLAorICAgICAgICAgICAgIEpESU1FTlNJT04gc3RhcnRfcm93LCBKRElNRU5TSU9OIHN0YXJ0X2NvbCwKKyAgICAgICAgICAgICBKRElNRU5TSU9OIG51bV9ibG9ja3MpCiAvKiBUaGlzIHZlcnNpb24gaXMgdXNlZCBmb3IgaW50ZWdlciBEQ1QgaW1wbGVtZW50YXRpb25zLiAqLwogewogICAvKiBUaGlzIHJvdXRpbmUgaXMgaGVhdmlseSB1c2VkLCBzbyBpdCdzIHdvcnRoIGNvZGluZyBpdCB0aWdodGx5LiAqLwpAQCAtNDI3LDcgKzQyNyw3IEBACiAgIHF1YW50aXplX21ldGhvZF9wdHIgZG9fcXVhbnRpemUgPSBmZGN0LT5xdWFudGl6ZTsKICAgd29ya3NwYWNlID0gZmRjdC0+d29ya3NwYWNlOwogCi0gIHNhbXBsZV9kYXRhICs9IHN0YXJ0X3JvdzsJLyogZm9sZCBpbiB0aGUgdmVydGljYWwgb2Zmc2V0IG9uY2UgKi8KKyAgc2FtcGxlX2RhdGEgKz0gc3RhcnRfcm93OyAgICAgLyogZm9sZCBpbiB0aGUgdmVydGljYWwgb2Zmc2V0IG9uY2UgKi8KIAogICBmb3IgKGJpID0gMDsgYmkgPCBudW1fYmxvY2tzOyBiaSsrLCBzdGFydF9jb2wgKz0gRENUU0laRSkgewogICAgIC8qIExvYWQgZGF0YSBpbnRvIHdvcmtzcGFjZSwgYXBwbHlpbmcgdW5zaWduZWQtPnNpZ25lZCBjb252ZXJzaW9uICovCkBAIC00NTUsNyArNDU1LDcgQEAKICAgd29ya3NwYWNlcHRyID0gd29ya3NwYWNlOwogICBmb3IgKGVsZW1yID0gMDsgZWxlbXIgPCBEQ1RTSVpFOyBlbGVtcisrKSB7CiAgICAgZWxlbXB0ciA9IHNhbXBsZV9kYXRhW2VsZW1yXSArIHN0YXJ0X2NvbDsKLSNpZiBEQ1RTSVpFID09IDgJCS8qIHVucm9sbCB0aGUgaW5uZXIgbG9vcCAqLworI2lmIERDVFNJWkUgPT0gOCAgICAgICAgICAgICAgICAvKiB1bnJvbGwgdGhlIGlubmVyIGxvb3AgKi8KICAgICAqd29ya3NwYWNlcHRyKysgPSAoRkFTVF9GTE9BVCkoR0VUSlNBTVBMRSgqZWxlbXB0cisrKSAtIENFTlRFUkpTQU1QTEUpOwogICAgICp3b3Jrc3BhY2VwdHIrKyA9IChGQVNUX0ZMT0FUKShHRVRKU0FNUExFKCplbGVtcHRyKyspIC0gQ0VOVEVSSlNBTVBMRSk7CiAgICAgKndvcmtzcGFjZXB0cisrID0gKEZBU1RfRkxPQVQpKEdFVEpTQU1QTEUoKmVsZW1wdHIrKykgLSBDRU5URVJKU0FNUExFKTsKQEAgLTUwMCw5ICs1MDAsOSBAQAogCiBNRVRIT0RERUYodm9pZCkKIGZvcndhcmRfRENUX2Zsb2F0IChqX2NvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCi0JCSAgIEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsIEpCTE9DS1JPVyBjb2VmX2Jsb2NrcywKLQkJICAgSkRJTUVOU0lPTiBzdGFydF9yb3csIEpESU1FTlNJT04gc3RhcnRfY29sLAotCQkgICBKRElNRU5TSU9OIG51bV9ibG9ja3MpCisgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkJMT0NLUk9XIGNvZWZfYmxvY2tzLAorICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gc3RhcnRfcm93LCBKRElNRU5TSU9OIHN0YXJ0X2NvbCwKKyAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG51bV9ibG9ja3MpCiAvKiBUaGlzIHZlcnNpb24gaXMgdXNlZCBmb3IgZmxvYXRpbmctcG9pbnQgRENUIGltcGxlbWVudGF0aW9ucy4gKi8KIHsKICAgLyogVGhpcyByb3V0aW5lIGlzIGhlYXZpbHkgdXNlZCwgc28gaXQncyB3b3J0aCBjb2RpbmcgaXQgdGlnaHRseS4gKi8KQEAgLTUxOCw3ICs1MTgsNyBAQAogICBmbG9hdF9xdWFudGl6ZV9tZXRob2RfcHRyIGRvX3F1YW50aXplID0gZmRjdC0+ZmxvYXRfcXVhbnRpemU7CiAgIHdvcmtzcGFjZSA9IGZkY3QtPmZsb2F0X3dvcmtzcGFjZTsKIAotICBzYW1wbGVfZGF0YSArPSBzdGFydF9yb3c7CS8qIGZvbGQgaW4gdGhlIHZlcnRpY2FsIG9mZnNldCBvbmNlICovCisgIHNhbXBsZV9kYXRhICs9IHN0YXJ0X3JvdzsgICAgIC8qIGZvbGQgaW4gdGhlIHZlcnRpY2FsIG9mZnNldCBvbmNlICovCiAKICAgZm9yIChiaSA9IDA7IGJpIDwgbnVtX2Jsb2NrczsgYmkrKywgc3RhcnRfY29sICs9IERDVFNJWkUpIHsKICAgICAvKiBMb2FkIGRhdGEgaW50byB3b3Jrc3BhY2UsIGFwcGx5aW5nIHVuc2lnbmVkLT5zaWduZWQgY29udmVyc2lvbiAqLwpAQCAtNTQ3LDcgKzU0Nyw3IEBACiAKICAgZmRjdCA9IChteV9mZGN0X3B0cikKICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAotCQkJCVNJWkVPRihteV9mZGN0X2NvbnRyb2xsZXIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0laRU9GKG15X2ZkY3RfY29udHJvbGxlcikpOwogICBjaW5mby0+ZmRjdCA9IChzdHJ1Y3QganBlZ19mb3J3YXJkX2RjdCAqKSBmZGN0OwogICBmZGN0LT5wdWIuc3RhcnRfcGFzcyA9IHN0YXJ0X3Bhc3NfZmRjdG1ncjsKIApAQCAtNjI2LDEyICs2MjYsMTIgQEAKICAgaWYgKGNpbmZvLT5kY3RfbWV0aG9kID09IEpEQ1RfRkxPQVQpCiAgICAgZmRjdC0+ZmxvYXRfd29ya3NwYWNlID0gKEZBU1RfRkxPQVQgKikKICAgICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCi0JCQkJICBTSVpFT0YoRkFTVF9GTE9BVCkgKiBEQ1RTSVpFMik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0laRU9GKEZBU1RfRkxPQVQpICogRENUU0laRTIpOwogICBlbHNlCiAjZW5kaWYKICAgICBmZGN0LT53b3Jrc3BhY2UgPSAoRENURUxFTSAqKQogICAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKLQkJCQkgIFNJWkVPRihEQ1RFTEVNKSAqIERDVFNJWkUyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSVpFT0YoRENURUxFTSkgKiBEQ1RTSVpFMik7CiAKICAgLyogTWFyayBkaXZpc29yIHRhYmxlcyB1bmFsbG9jYXRlZCAqLwogICBmb3IgKGkgPSAwOyBpIDwgTlVNX1FVQU5UX1RCTFM7IGkrKykgewpkaWZmIC0tZ2l0IGEvamNodWZmLmMgYi9qY2h1ZmYuYwppbmRleCA4ODc2MTRkLi4xODgwY2MyIDEwMDY0NAotLS0gYS9qY2h1ZmYuYworKysgYi9qY2h1ZmYuYwpAQCAtMyw4ICszLDggQEAKICAqCiAgKiBUaGlzIGZpbGUgd2FzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZToKICAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk3LCBUaG9tYXMgRy4gTGFuZS4KLSAqIE1vZGlmaWNhdGlvbnM6Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMSwgRC4gUi4gQ29tbWFuZGVyLgorICogbGlianBlZy10dXJibyBNb2RpZmljYXRpb25zOgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTEsIDIwMTQgRC4gUi4gQ29tbWFuZGVyLgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgogICoKICAqIFRoaXMgZmlsZSBjb250YWlucyBIdWZmbWFuIGVudHJvcHkgZW5jb2Rpbmcgcm91dGluZXMuCkBAIC0xOSw3ICsxOSw3IEBACiAjZGVmaW5lIEpQRUdfSU5URVJOQUxTCiAjaW5jbHVkZSAiamluY2x1ZGUuaCIKICNpbmNsdWRlICJqcGVnbGliLmgiCi0jaW5jbHVkZSAiamNodWZmLmgiCQkvKiBEZWNsYXJhdGlvbnMgc2hhcmVkIHdpdGggamNwaHVmZi5jICovCisjaW5jbHVkZSAiamNodWZmLmgiICAgICAgICAgICAgIC8qIERlY2xhcmF0aW9ucyBzaGFyZWQgd2l0aCBqY3BodWZmLmMgKi8KICNpbmNsdWRlIDxsaW1pdHMuaD4KIAogc3RhdGljIHVuc2lnbmVkIGNoYXIganBlZ19uYml0c190YWJsZVs2NTUzNl07CkBAIC0zNyw4ICszNyw4IEBACiAgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgewotICBzaXplX3QgcHV0X2J1ZmZlcjsJCS8qIGN1cnJlbnQgYml0LWFjY3VtdWxhdGlvbiBidWZmZXIgKi8KLSAgaW50IHB1dF9iaXRzOwkJCS8qICMgb2YgYml0cyBub3cgaW4gaXQgKi8KKyAgc2l6ZV90IHB1dF9idWZmZXI7ICAgICAgICAgICAgLyogY3VycmVudCBiaXQtYWNjdW11bGF0aW9uIGJ1ZmZlciAqLworICBpbnQgcHV0X2JpdHM7ICAgICAgICAgICAgICAgICAvKiAjIG9mIGJpdHMgbm93IGluIGl0ICovCiAgIGludCBsYXN0X2RjX3ZhbFtNQVhfQ09NUFNfSU5fU0NBTl07IC8qIGxhc3QgREMgY29lZiBmb3IgZWFjaCBjb21wb25lbnQgKi8KIH0gc2F2YWJsZV9zdGF0ZTsKIApAQCAtNTIsMTIgKzUyLDEyIEBACiAjZWxzZQogI2lmIE1BWF9DT01QU19JTl9TQ0FOID09IDQKICNkZWZpbmUgQVNTSUdOX1NUQVRFKGRlc3Qsc3JjKSAgXAotCSgoZGVzdCkucHV0X2J1ZmZlciA9IChzcmMpLnB1dF9idWZmZXIsIFwKLQkgKGRlc3QpLnB1dF9iaXRzID0gKHNyYykucHV0X2JpdHMsIFwKLQkgKGRlc3QpLmxhc3RfZGNfdmFsWzBdID0gKHNyYykubGFzdF9kY192YWxbMF0sIFwKLQkgKGRlc3QpLmxhc3RfZGNfdmFsWzFdID0gKHNyYykubGFzdF9kY192YWxbMV0sIFwKLQkgKGRlc3QpLmxhc3RfZGNfdmFsWzJdID0gKHNyYykubGFzdF9kY192YWxbMl0sIFwKLQkgKGRlc3QpLmxhc3RfZGNfdmFsWzNdID0gKHNyYykubGFzdF9kY192YWxbM10pCisgICAgICAgICgoZGVzdCkucHV0X2J1ZmZlciA9IChzcmMpLnB1dF9idWZmZXIsIFwKKyAgICAgICAgIChkZXN0KS5wdXRfYml0cyA9IChzcmMpLnB1dF9iaXRzLCBcCisgICAgICAgICAoZGVzdCkubGFzdF9kY192YWxbMF0gPSAoc3JjKS5sYXN0X2RjX3ZhbFswXSwgXAorICAgICAgICAgKGRlc3QpLmxhc3RfZGNfdmFsWzFdID0gKHNyYykubGFzdF9kY192YWxbMV0sIFwKKyAgICAgICAgIChkZXN0KS5sYXN0X2RjX3ZhbFsyXSA9IChzcmMpLmxhc3RfZGNfdmFsWzJdLCBcCisgICAgICAgICAoZGVzdCkubGFzdF9kY192YWxbM10gPSAoc3JjKS5sYXN0X2RjX3ZhbFszXSkKICNlbmRpZgogI2VuZGlmCiAKQEAgLTY1LDE3ICs2NSwxNyBAQAogdHlwZWRlZiBzdHJ1Y3QgewogICBzdHJ1Y3QganBlZ19lbnRyb3B5X2VuY29kZXIgcHViOyAvKiBwdWJsaWMgZmllbGRzICovCiAKLSAgc2F2YWJsZV9zdGF0ZSBzYXZlZDsJCS8qIEJpdCBidWZmZXIgJiBEQyBzdGF0ZSBhdCBzdGFydCBvZiBNQ1UgKi8KKyAgc2F2YWJsZV9zdGF0ZSBzYXZlZDsgICAgICAgICAgLyogQml0IGJ1ZmZlciAmIERDIHN0YXRlIGF0IHN0YXJ0IG9mIE1DVSAqLwogCiAgIC8qIFRoZXNlIGZpZWxkcyBhcmUgTk9UIGxvYWRlZCBpbnRvIGxvY2FsIHdvcmtpbmcgc3RhdGUuICovCi0gIHVuc2lnbmVkIGludCByZXN0YXJ0c190b19nbzsJLyogTUNVcyBsZWZ0IGluIHRoaXMgcmVzdGFydCBpbnRlcnZhbCAqLwotICBpbnQgbmV4dF9yZXN0YXJ0X251bTsJCS8qIG5leHQgcmVzdGFydCBudW1iZXIgdG8gd3JpdGUgKDAtNykgKi8KKyAgdW5zaWduZWQgaW50IHJlc3RhcnRzX3RvX2dvOyAgLyogTUNVcyBsZWZ0IGluIHRoaXMgcmVzdGFydCBpbnRlcnZhbCAqLworICBpbnQgbmV4dF9yZXN0YXJ0X251bTsgICAgICAgICAvKiBuZXh0IHJlc3RhcnQgbnVtYmVyIHRvIHdyaXRlICgwLTcpICovCiAKICAgLyogUG9pbnRlcnMgdG8gZGVyaXZlZCB0YWJsZXMgKHRoZXNlIHdvcmtzcGFjZXMgaGF2ZSBpbWFnZSBsaWZlc3BhbikgKi8KICAgY19kZXJpdmVkX3RibCAqIGRjX2Rlcml2ZWRfdGJsc1tOVU1fSFVGRl9UQkxTXTsKICAgY19kZXJpdmVkX3RibCAqIGFjX2Rlcml2ZWRfdGJsc1tOVU1fSFVGRl9UQkxTXTsKIAotI2lmZGVmIEVOVFJPUFlfT1BUX1NVUFBPUlRFRAkvKiBTdGF0aXN0aWNzIHRhYmxlcyBmb3Igb3B0aW1pemF0aW9uICovCisjaWZkZWYgRU5UUk9QWV9PUFRfU1VQUE9SVEVEICAgIC8qIFN0YXRpc3RpY3MgdGFibGVzIGZvciBvcHRpbWl6YXRpb24gKi8KICAgbG9uZyAqIGRjX2NvdW50X3B0cnNbTlVNX0hVRkZfVEJMU107CiAgIGxvbmcgKiBhY19jb3VudF9wdHJzW05VTV9IVUZGX1RCTFNdOwogI2VuZGlmCkBAIC04OCwyMCArODgsMjAgQEAKICAqLwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gIEpPQ1RFVCAqIG5leHRfb3V0cHV0X2J5dGU7CS8qID0+IG5leHQgYnl0ZSB0byB3cml0ZSBpbiBidWZmZXIgKi8KLSAgc2l6ZV90IGZyZWVfaW5fYnVmZmVyOwkvKiAjIG9mIGJ5dGUgc3BhY2VzIHJlbWFpbmluZyBpbiBidWZmZXIgKi8KLSAgc2F2YWJsZV9zdGF0ZSBjdXI7CQkvKiBDdXJyZW50IGJpdCBidWZmZXIgJiBEQyBzdGF0ZSAqLwotICBqX2NvbXByZXNzX3B0ciBjaW5mbzsJCS8qIGR1bXBfYnVmZmVyIG5lZWRzIGFjY2VzcyB0byB0aGlzICovCisgIEpPQ1RFVCAqIG5leHRfb3V0cHV0X2J5dGU7ICAgIC8qID0+IG5leHQgYnl0ZSB0byB3cml0ZSBpbiBidWZmZXIgKi8KKyAgc2l6ZV90IGZyZWVfaW5fYnVmZmVyOyAgICAgICAgLyogIyBvZiBieXRlIHNwYWNlcyByZW1haW5pbmcgaW4gYnVmZmVyICovCisgIHNhdmFibGVfc3RhdGUgY3VyOyAgICAgICAgICAgIC8qIEN1cnJlbnQgYml0IGJ1ZmZlciAmIERDIHN0YXRlICovCisgIGpfY29tcHJlc3NfcHRyIGNpbmZvOyAgICAgICAgIC8qIGR1bXBfYnVmZmVyIG5lZWRzIGFjY2VzcyB0byB0aGlzICovCiB9IHdvcmtpbmdfc3RhdGU7CiAKIAogLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KIE1FVEhPRERFRihib29sZWFuKSBlbmNvZGVfbWN1X2h1ZmYgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywKLQkJCQkJSkJMT0NLUk9XICpNQ1VfZGF0YSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpCTE9DS1JPVyAqTUNVX2RhdGEpKTsKIE1FVEhPRERFRih2b2lkKSBmaW5pc2hfcGFzc19odWZmIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8pKTsKICNpZmRlZiBFTlRST1BZX09QVF9TVVBQT1JURUQKIE1FVEhPRERFRihib29sZWFuKSBlbmNvZGVfbWN1X2dhdGhlciBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLAotCQkJCQkgIEpCTE9DS1JPVyAqTUNVX2RhdGEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpCTE9DS1JPVyAqTUNVX2RhdGEpKTsKIE1FVEhPRERFRih2b2lkKSBmaW5pc2hfcGFzc19nYXRoZXIgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbykpOwogI2VuZGlmCiAKQEAgLTE0MCwyOSArMTQwLDI5IEBACiAgICAgICAvKiBDaGVjayBmb3IgaW52YWxpZCB0YWJsZSBpbmRleGVzICovCiAgICAgICAvKiAobWFrZV9jX2Rlcml2ZWRfdGJsIGRvZXMgdGhpcyBpbiB0aGUgb3RoZXIgcGF0aCkgKi8KICAgICAgIGlmIChkY3RibCA8IDAgfHwgZGN0YmwgPj0gTlVNX0hVRkZfVEJMUykKLQlFUlJFWElUMShjaW5mbywgSkVSUl9OT19IVUZGX1RBQkxFLCBkY3RibCk7CisgICAgICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX05PX0hVRkZfVEFCTEUsIGRjdGJsKTsKICAgICAgIGlmIChhY3RibCA8IDAgfHwgYWN0YmwgPj0gTlVNX0hVRkZfVEJMUykKLQlFUlJFWElUMShjaW5mbywgSkVSUl9OT19IVUZGX1RBQkxFLCBhY3RibCk7CisgICAgICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX05PX0hVRkZfVEFCTEUsIGFjdGJsKTsKICAgICAgIC8qIEFsbG9jYXRlIGFuZCB6ZXJvIHRoZSBzdGF0aXN0aWNzIHRhYmxlcyAqLwogICAgICAgLyogTm90ZSB0aGF0IGpwZWdfZ2VuX29wdGltYWxfdGFibGUgZXhwZWN0cyAyNTcgZW50cmllcyBpbiBlYWNoIHRhYmxlISAqLwogICAgICAgaWYgKGVudHJvcHktPmRjX2NvdW50X3B0cnNbZGN0YmxdID09IE5VTEwpCi0JZW50cm9weS0+ZGNfY291bnRfcHRyc1tkY3RibF0gPSAobG9uZyAqKQotCSAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKLQkJCQkgICAgICAyNTcgKiBTSVpFT0YobG9uZykpOworICAgICAgICBlbnRyb3B5LT5kY19jb3VudF9wdHJzW2RjdGJsXSA9IChsb25nICopCisgICAgICAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU3ICogU0laRU9GKGxvbmcpKTsKICAgICAgIE1FTVpFUk8oZW50cm9weS0+ZGNfY291bnRfcHRyc1tkY3RibF0sIDI1NyAqIFNJWkVPRihsb25nKSk7CiAgICAgICBpZiAoZW50cm9weS0+YWNfY291bnRfcHRyc1thY3RibF0gPT0gTlVMTCkKLQllbnRyb3B5LT5hY19jb3VudF9wdHJzW2FjdGJsXSA9IChsb25nICopCi0JICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAotCQkJCSAgICAgIDI1NyAqIFNJWkVPRihsb25nKSk7CisgICAgICAgIGVudHJvcHktPmFjX2NvdW50X3B0cnNbYWN0YmxdID0gKGxvbmcgKikKKyAgICAgICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTcgKiBTSVpFT0YobG9uZykpOwogICAgICAgTUVNWkVSTyhlbnRyb3B5LT5hY19jb3VudF9wdHJzW2FjdGJsXSwgMjU3ICogU0laRU9GKGxvbmcpKTsKICNlbmRpZgogICAgIH0gZWxzZSB7CiAgICAgICAvKiBDb21wdXRlIGRlcml2ZWQgdmFsdWVzIGZvciBIdWZmbWFuIHRhYmxlcyAqLwogICAgICAgLyogV2UgbWF5IGRvIHRoaXMgbW9yZSB0aGFuIG9uY2UgZm9yIGEgdGFibGUsIGJ1dCBpdCdzIG5vdCBleHBlbnNpdmUgKi8KICAgICAgIGpwZWdfbWFrZV9jX2Rlcml2ZWRfdGJsKGNpbmZvLCBUUlVFLCBkY3RibCwKLQkJCSAgICAgICYgZW50cm9weS0+ZGNfZGVyaXZlZF90YmxzW2RjdGJsXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIGVudHJvcHktPmRjX2Rlcml2ZWRfdGJsc1tkY3RibF0pOwogICAgICAganBlZ19tYWtlX2NfZGVyaXZlZF90YmwoY2luZm8sIEZBTFNFLCBhY3RibCwKLQkJCSAgICAgICYgZW50cm9weS0+YWNfZGVyaXZlZF90YmxzW2FjdGJsXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIGVudHJvcHktPmFjX2Rlcml2ZWRfdGJsc1thY3RibF0pOwogICAgIH0KICAgICAvKiBJbml0aWFsaXplIERDIHByZWRpY3Rpb25zIHRvIDAgKi8KICAgICBlbnRyb3B5LT5zYXZlZC5sYXN0X2RjX3ZhbFtjaV0gPSAwOwpAQCAtMTg3LDcgKzE4Nyw3IEBACiAKIEdMT0JBTCh2b2lkKQoganBlZ19tYWtlX2NfZGVyaXZlZF90YmwgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBib29sZWFuIGlzREMsIGludCB0YmxubywKLQkJCSBjX2Rlcml2ZWRfdGJsICoqIHBkdGJsKQorICAgICAgICAgICAgICAgICAgICAgICAgIGNfZGVyaXZlZF90YmwgKiogcGR0YmwpCiB7CiAgIEpIVUZGX1RCTCAqaHRibDsKICAgY19kZXJpdmVkX3RibCAqZHRibDsKQEAgLTIxMiwyMiArMjEyLDIyIEBACiAgIGlmICgqcGR0YmwgPT0gTlVMTCkKICAgICAqcGR0YmwgPSAoY19kZXJpdmVkX3RibCAqKQogICAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKLQkJCQkgIFNJWkVPRihjX2Rlcml2ZWRfdGJsKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0laRU9GKGNfZGVyaXZlZF90YmwpKTsKICAgZHRibCA9ICpwZHRibDsKLSAgCisKICAgLyogRmlndXJlIEMuMTogbWFrZSB0YWJsZSBvZiBIdWZmbWFuIGNvZGUgbGVuZ3RoIGZvciBlYWNoIHN5bWJvbCAqLwogCiAgIHAgPSAwOwogICBmb3IgKGwgPSAxOyBsIDw9IDE2OyBsKyspIHsKICAgICBpID0gKGludCkgaHRibC0+Yml0c1tsXTsKLSAgICBpZiAoaSA8IDAgfHwgcCArIGkgPiAyNTYpCS8qIHByb3RlY3QgYWdhaW5zdCB0YWJsZSBvdmVycnVuICovCisgICAgaWYgKGkgPCAwIHx8IHAgKyBpID4gMjU2KSAgIC8qIHByb3RlY3QgYWdhaW5zdCB0YWJsZSBvdmVycnVuICovCiAgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9IVUZGX1RBQkxFKTsKICAgICB3aGlsZSAoaS0tKQogICAgICAgaHVmZnNpemVbcCsrXSA9IChjaGFyKSBsOwogICB9CiAgIGh1ZmZzaXplW3BdID0gMDsKICAgbGFzdHAgPSBwOwotICAKKwogICAvKiBGaWd1cmUgQy4yOiBnZW5lcmF0ZSB0aGUgY29kZXMgdGhlbXNlbHZlcyAqLwogICAvKiBXZSBhbHNvIHZhbGlkYXRlIHRoYXQgdGhlIGNvdW50cyByZXByZXNlbnQgYSBsZWdhbCBIdWZmbWFuIGNvZGUgdHJlZS4gKi8KIApAQCAtMjQ3LDcgKzI0Nyw3IEBACiAgICAgY29kZSA8PD0gMTsKICAgICBzaSsrOwogICB9Ci0gIAorCiAgIC8qIEZpZ3VyZSBDLjM6IGdlbmVyYXRlIGVuY29kaW5nIHRhYmxlcyAqLwogICAvKiBUaGVzZSBhcmUgY29kZSBhbmQgc2l6ZSBpbmRleGVkIGJ5IHN5bWJvbCB2YWx1ZSAqLwogCkBAIC0yODcsMTAgKzI4NywxMCBAQAogCiAvKiBFbWl0IGEgYnl0ZSwgdGFraW5nICdhY3Rpb24nIGlmIG11c3Qgc3VzcGVuZC4gKi8KICNkZWZpbmUgZW1pdF9ieXRlKHN0YXRlLHZhbCxhY3Rpb24pICBcCi0JeyAqKHN0YXRlKS0+bmV4dF9vdXRwdXRfYnl0ZSsrID0gKEpPQ1RFVCkgKHZhbCk7ICBcCi0JICBpZiAoLS0oc3RhdGUpLT5mcmVlX2luX2J1ZmZlciA9PSAwKSAgXAotCSAgICBpZiAoISBkdW1wX2J1ZmZlcihzdGF0ZSkpICBcCi0JICAgICAgeyBhY3Rpb247IH0gfQorICAgICAgICB7ICooc3RhdGUpLT5uZXh0X291dHB1dF9ieXRlKysgPSAoSk9DVEVUKSAodmFsKTsgIFwKKyAgICAgICAgICBpZiAoLS0oc3RhdGUpLT5mcmVlX2luX2J1ZmZlciA9PSAwKSAgXAorICAgICAgICAgICAgaWYgKCEgZHVtcF9idWZmZXIoc3RhdGUpKSAgXAorICAgICAgICAgICAgICB7IGFjdGlvbjsgfSB9CiAKIAogTE9DQUwoYm9vbGVhbikKQEAgLTM5MSw3ICszOTEsMTYgQEAKICNlbmRpZgogCiAKLSNkZWZpbmUgQlVGU0laRSAoRENUU0laRTIgKiAyKQorLyogQWx0aG91Z2ggaXQgaXMgZXhjZWVkaW5nbHkgcmFyZSwgaXQgaXMgcG9zc2libGUgZm9yIGEgSHVmZm1hbi1lbmNvZGVkCisgKiBjb2VmZmljaWVudCBibG9jayB0byBiZSBsYXJnZXIgdGhhbiB0aGUgMTI4LWJ5dGUgdW5lbmNvZGVkIGJsb2NrLiAgRm9yIGVhY2gKKyAqIG9mIHRoZSA2NCBjb2VmZmljaWVudHMsIFBVVF9CSVRTIGlzIGludm9rZWQgdHdpY2UsIGFuZCBlYWNoIGludm9jYXRpb24gY2FuCisgKiB0aGVvcmV0aWNhbGx5IHN0b3JlIDE2IGJpdHMgKGZvciBhIG1heGltdW0gb2YgMjA0OCBiaXRzIG9yIDI1NiBieXRlcyBwZXIKKyAqIGVuY29kZWQgYmxvY2suKSAgSWYsIGZvciBpbnN0YW5jZSwgb25lIGFydGlmaWNpYWxseSBzZXRzIHRoZSBBQworICogY29lZmZpY2llbnRzIHRvIGFsdGVybmF0aW5nIHZhbHVlcyBvZiAzMjc2NyBhbmQgLTMyNzY4ICh1c2luZyB0aGUgSlBFRworICogc2Nhbm5pbmcgb3JkZXItLSAxLCA4LCAxNiwgZXRjLiksIHRoZW4gdGhpcyB3aWxsIHByb2R1Y2UgYW4gZW5jb2RlZCBibG9jaworICogbGFyZ2VyIHRoYW4gMjAwIGJ5dGVzLgorICovCisjZGVmaW5lIEJVRlNJWkUgKERDVFNJWkUyICogNCkKIAogI2RlZmluZSBMT0FEX0JVRkZFUigpIHsgXAogICBpZiAoc3RhdGUtPmZyZWVfaW5fYnVmZmVyIDwgQlVGU0laRSkgeyBcCkBAIC00MzgsNyArNDQ3LDcgQEAKICAgUFVUX0JJVFMoMHg3RiwgNykKICAgd2hpbGUgKHB1dF9iaXRzID49IDgpIEVNSVRfQllURSgpCiAKLSAgc3RhdGUtPmN1ci5wdXRfYnVmZmVyID0gMDsJLyogYW5kIHJlc2V0IGJpdC1idWZmZXIgdG8gZW1wdHkgKi8KKyAgc3RhdGUtPmN1ci5wdXRfYnVmZmVyID0gMDsgICAgLyogYW5kIHJlc2V0IGJpdC1idWZmZXIgdG8gZW1wdHkgKi8KICAgc3RhdGUtPmN1ci5wdXRfYml0cyA9IDA7CiAgIFNUT1JFX0JVRkZFUigpCiAKQEAgLTQ1MCw3ICs0NTksNyBAQAogCiBMT0NBTChib29sZWFuKQogZW5jb2RlX29uZV9ibG9jayAod29ya2luZ19zdGF0ZSAqIHN0YXRlLCBKQ09FRlBUUiBibG9jaywgaW50IGxhc3RfZGNfdmFsLAotCQkgIGNfZGVyaXZlZF90YmwgKmRjdGJsLCBjX2Rlcml2ZWRfdGJsICphY3RibCkKKyAgICAgICAgICAgICAgICAgIGNfZGVyaXZlZF90YmwgKmRjdGJsLCBjX2Rlcml2ZWRfdGJsICphY3RibCkKIHsKICAgaW50IHRlbXAsIHRlbXAyLCB0ZW1wMzsKICAgaW50IG5iaXRzOwpAQCAtNDY1LDcgKzQ3NCw3IEBACiAgIExPQURfQlVGRkVSKCkKIAogICAvKiBFbmNvZGUgdGhlIERDIGNvZWZmaWNpZW50IGRpZmZlcmVuY2UgcGVyIHNlY3Rpb24gRi4xLjIuMSAqLwotICAKKwogICB0ZW1wID0gdGVtcDIgPSBibG9ja1swXSAtIGxhc3RfZGNfdmFsOwogCiAgLyogVGhpcyBpcyBhIHdlbGwta25vd24gdGVjaG5pcXVlIGZvciBvYnRhaW5pbmcgdGhlIGFic29sdXRlIHZhbHVlIHdpdGhvdXQgYQpAQCAtNDk5LDggKzUwOCw4IEBACiAgIENIRUNLQlVGMTUoKQogCiAgIC8qIEVuY29kZSB0aGUgQUMgY29lZmZpY2llbnRzIHBlciBzZWN0aW9uIEYuMS4yLjIgKi8KLSAgCi0gIHIgPSAwOwkJCS8qIHIgPSBydW4gbGVuZ3RoIG9mIHplcm9zICovCisKKyAgciA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogciA9IHJ1biBsZW5ndGggb2YgemVyb3MgKi8KIAogLyogTWFudWFsbHkgdW5yb2xsIHRoZSBrIGxvb3AgdG8gZWxpbWluYXRlIHRoZSBjb3VudGVyIHZhcmlhYmxlLiAgVGhpcwogICogaW1wcm92ZXMgcGVyZm9ybWFuY2UgZ3JlYXRseSBvbiBzeXN0ZW1zIHdpdGggYSBsaW1pdGVkIG51bWJlciBvZgpAQCAtNjA2LDcgKzYxNSw3IEBACiAgIGlmIChjaW5mby0+cmVzdGFydF9pbnRlcnZhbCkgewogICAgIGlmIChlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9PSAwKQogICAgICAgaWYgKCEgZW1pdF9yZXN0YXJ0KCZzdGF0ZSwgZW50cm9weS0+bmV4dF9yZXN0YXJ0X251bSkpCi0JcmV0dXJuIEZBTFNFOworICAgICAgICByZXR1cm4gRkFMU0U7CiAgIH0KIAogICAvKiBFbmNvZGUgdGhlIE1DVSBkYXRhIGJsb2NrcyAqLwpAQCAtNjE0LDkgKzYyMyw5IEBACiAgICAgY2kgPSBjaW5mby0+TUNVX21lbWJlcnNoaXBbYmxrbl07CiAgICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsKICAgICBpZiAoISBlbmNvZGVfb25lX2Jsb2NrKCZzdGF0ZSwKLQkJCSAgIE1DVV9kYXRhW2Jsa25dWzBdLCBzdGF0ZS5jdXIubGFzdF9kY192YWxbY2ldLAotCQkJICAgZW50cm9weS0+ZGNfZGVyaXZlZF90YmxzW2NvbXBwdHItPmRjX3RibF9ub10sCi0JCQkgICBlbnRyb3B5LT5hY19kZXJpdmVkX3RibHNbY29tcHB0ci0+YWNfdGJsX25vXSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBNQ1VfZGF0YVtibGtuXVswXSwgc3RhdGUuY3VyLmxhc3RfZGNfdmFsW2NpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJvcHktPmRjX2Rlcml2ZWRfdGJsc1tjb21wcHRyLT5kY190Ymxfbm9dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cm9weS0+YWNfZGVyaXZlZF90YmxzW2NvbXBwdHItPmFjX3RibF9ub10pKQogICAgICAgcmV0dXJuIEZBTFNFOwogICAgIC8qIFVwZGF0ZSBsYXN0X2RjX3ZhbCAqLwogICAgIHN0YXRlLmN1ci5sYXN0X2RjX3ZhbFtjaV0gPSBNQ1VfZGF0YVtibGtuXVswXVswXTsKQEAgLTY4NiwxOCArNjk1LDE4IEBACiAKIExPQ0FMKHZvaWQpCiBodGVzdF9vbmVfYmxvY2sgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKQ09FRlBUUiBibG9jaywgaW50IGxhc3RfZGNfdmFsLAotCQkgbG9uZyBkY19jb3VudHNbXSwgbG9uZyBhY19jb3VudHNbXSkKKyAgICAgICAgICAgICAgICAgbG9uZyBkY19jb3VudHNbXSwgbG9uZyBhY19jb3VudHNbXSkKIHsKICAgcmVnaXN0ZXIgaW50IHRlbXA7CiAgIHJlZ2lzdGVyIGludCBuYml0czsKICAgcmVnaXN0ZXIgaW50IGssIHI7Ci0gIAorCiAgIC8qIEVuY29kZSB0aGUgREMgY29lZmZpY2llbnQgZGlmZmVyZW5jZSBwZXIgc2VjdGlvbiBGLjEuMi4xICovCi0gIAorCiAgIHRlbXAgPSBibG9ja1swXSAtIGxhc3RfZGNfdmFsOwogICBpZiAodGVtcCA8IDApCiAgICAgdGVtcCA9IC10ZW1wOwotICAKKwogICAvKiBGaW5kIHRoZSBudW1iZXIgb2YgYml0cyBuZWVkZWQgZm9yIHRoZSBtYWduaXR1ZGUgb2YgdGhlIGNvZWZmaWNpZW50ICovCiAgIG5iaXRzID0gMDsKICAgd2hpbGUgKHRlbXApIHsKQEAgLTcxMiwzNiArNzIxLDM2IEBACiAKICAgLyogQ291bnQgdGhlIEh1ZmZtYW4gc3ltYm9sIGZvciB0aGUgbnVtYmVyIG9mIGJpdHMgKi8KICAgZGNfY291bnRzW25iaXRzXSsrOwotICAKKwogICAvKiBFbmNvZGUgdGhlIEFDIGNvZWZmaWNpZW50cyBwZXIgc2VjdGlvbiBGLjEuMi4yICovCi0gIAotICByID0gMDsJCQkvKiByID0gcnVuIGxlbmd0aCBvZiB6ZXJvcyAqLwotICAKKworICByID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiByID0gcnVuIGxlbmd0aCBvZiB6ZXJvcyAqLworCiAgIGZvciAoayA9IDE7IGsgPCBEQ1RTSVpFMjsgaysrKSB7CiAgICAgaWYgKCh0ZW1wID0gYmxvY2tbanBlZ19uYXR1cmFsX29yZGVyW2tdXSkgPT0gMCkgewogICAgICAgcisrOwogICAgIH0gZWxzZSB7CiAgICAgICAvKiBpZiBydW4gbGVuZ3RoID4gMTUsIG11c3QgZW1pdCBzcGVjaWFsIHJ1bi1sZW5ndGgtMTYgY29kZXMgKDB4RjApICovCiAgICAgICB3aGlsZSAociA+IDE1KSB7Ci0JYWNfY291bnRzWzB4RjBdKys7Ci0JciAtPSAxNjsKKyAgICAgICAgYWNfY291bnRzWzB4RjBdKys7CisgICAgICAgIHIgLT0gMTY7CiAgICAgICB9Ci0gICAgICAKKwogICAgICAgLyogRmluZCB0aGUgbnVtYmVyIG9mIGJpdHMgbmVlZGVkIGZvciB0aGUgbWFnbml0dWRlIG9mIHRoZSBjb2VmZmljaWVudCAqLwogICAgICAgaWYgKHRlbXAgPCAwKQotCXRlbXAgPSAtdGVtcDsKLSAgICAgIAorICAgICAgICB0ZW1wID0gLXRlbXA7CisKICAgICAgIC8qIEZpbmQgdGhlIG51bWJlciBvZiBiaXRzIG5lZWRlZCBmb3IgdGhlIG1hZ25pdHVkZSBvZiB0aGUgY29lZmZpY2llbnQgKi8KLSAgICAgIG5iaXRzID0gMTsJCS8qIHRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIDEgYml0ICovCisgICAgICBuYml0cyA9IDE7ICAgICAgICAgICAgICAgIC8qIHRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIDEgYml0ICovCiAgICAgICB3aGlsZSAoKHRlbXAgPj49IDEpKQotCW5iaXRzKys7CisgICAgICAgIG5iaXRzKys7CiAgICAgICAvKiBDaGVjayBmb3Igb3V0LW9mLXJhbmdlIGNvZWZmaWNpZW50IHZhbHVlcyAqLwogICAgICAgaWYgKG5iaXRzID4gTUFYX0NPRUZfQklUUykKLQlFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9EQ1RfQ09FRik7Ci0gICAgICAKKyAgICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfRENUX0NPRUYpOworCiAgICAgICAvKiBDb3VudCBIdWZmbWFuIHN5bWJvbCBmb3IgcnVuIGxlbmd0aCAvIG51bWJlciBvZiBiaXRzICovCiAgICAgICBhY19jb3VudHNbKHIgPDwgNCkgKyBuYml0c10rKzsKLSAgICAgIAorCiAgICAgICByID0gMDsKICAgICB9CiAgIH0KQEAgLTc2OSw3ICs3NzgsNyBAQAogICAgIGlmIChlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9PSAwKSB7CiAgICAgICAvKiBSZS1pbml0aWFsaXplIERDIHByZWRpY3Rpb25zIHRvIDAgKi8KICAgICAgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5jb21wc19pbl9zY2FuOyBjaSsrKQotCWVudHJvcHktPnNhdmVkLmxhc3RfZGNfdmFsW2NpXSA9IDA7CisgICAgICAgIGVudHJvcHktPnNhdmVkLmxhc3RfZGNfdmFsW2NpXSA9IDA7CiAgICAgICAvKiBVcGRhdGUgcmVzdGFydCBzdGF0ZSAqLwogICAgICAgZW50cm9weS0+cmVzdGFydHNfdG9fZ28gPSBjaW5mby0+cmVzdGFydF9pbnRlcnZhbDsKICAgICB9CkBAIC03ODAsOCArNzg5LDggQEAKICAgICBjaSA9IGNpbmZvLT5NQ1VfbWVtYmVyc2hpcFtibGtuXTsKICAgICBjb21wcHRyID0gY2luZm8tPmN1cl9jb21wX2luZm9bY2ldOwogICAgIGh0ZXN0X29uZV9ibG9jayhjaW5mbywgTUNVX2RhdGFbYmxrbl1bMF0sIGVudHJvcHktPnNhdmVkLmxhc3RfZGNfdmFsW2NpXSwKLQkJICAgIGVudHJvcHktPmRjX2NvdW50X3B0cnNbY29tcHB0ci0+ZGNfdGJsX25vXSwKLQkJICAgIGVudHJvcHktPmFjX2NvdW50X3B0cnNbY29tcHB0ci0+YWNfdGJsX25vXSk7CisgICAgICAgICAgICAgICAgICAgIGVudHJvcHktPmRjX2NvdW50X3B0cnNbY29tcHB0ci0+ZGNfdGJsX25vXSwKKyAgICAgICAgICAgICAgICAgICAgZW50cm9weS0+YWNfY291bnRfcHRyc1tjb21wcHRyLT5hY190Ymxfbm9dKTsKICAgICBlbnRyb3B5LT5zYXZlZC5sYXN0X2RjX3ZhbFtjaV0gPSBNQ1VfZGF0YVtibGtuXVswXVswXTsKICAgfQogCkBAIC04MjAsMTAgKzgyOSwxMCBAQAogR0xPQkFMKHZvaWQpCiBqcGVnX2dlbl9vcHRpbWFsX3RhYmxlIChqX2NvbXByZXNzX3B0ciBjaW5mbywgSkhVRkZfVEJMICogaHRibCwgbG9uZyBmcmVxW10pCiB7Ci0jZGVmaW5lIE1BWF9DTEVOIDMyCQkvKiBhc3N1bWVkIG1heGltdW0gaW5pdGlhbCBjb2RlIGxlbmd0aCAqLwotICBVSU5UOCBiaXRzW01BWF9DTEVOKzFdOwkvKiBiaXRzW2tdID0gIyBvZiBzeW1ib2xzIHdpdGggY29kZSBsZW5ndGggayAqLwotICBpbnQgY29kZXNpemVbMjU3XTsJCS8qIGNvZGVzaXplW2tdID0gY29kZSBsZW5ndGggb2Ygc3ltYm9sIGsgKi8KLSAgaW50IG90aGVyc1syNTddOwkJLyogbmV4dCBzeW1ib2wgaW4gY3VycmVudCBicmFuY2ggb2YgdHJlZSAqLworI2RlZmluZSBNQVhfQ0xFTiAzMiAgICAgICAgICAgICAvKiBhc3N1bWVkIG1heGltdW0gaW5pdGlhbCBjb2RlIGxlbmd0aCAqLworICBVSU5UOCBiaXRzW01BWF9DTEVOKzFdOyAgICAgICAvKiBiaXRzW2tdID0gIyBvZiBzeW1ib2xzIHdpdGggY29kZSBsZW5ndGggayAqLworICBpbnQgY29kZXNpemVbMjU3XTsgICAgICAgICAgICAvKiBjb2Rlc2l6ZVtrXSA9IGNvZGUgbGVuZ3RoIG9mIHN5bWJvbCBrICovCisgIGludCBvdGhlcnNbMjU3XTsgICAgICAgICAgICAgIC8qIG5leHQgc3ltYm9sIGluIGN1cnJlbnQgYnJhbmNoIG9mIHRyZWUgKi8KICAgaW50IGMxLCBjMjsKICAgaW50IHAsIGksIGo7CiAgIGxvbmcgdjsKQEAgLTgzMyw5ICs4NDIsOSBAQAogICBNRU1aRVJPKGJpdHMsIFNJWkVPRihiaXRzKSk7CiAgIE1FTVpFUk8oY29kZXNpemUsIFNJWkVPRihjb2Rlc2l6ZSkpOwogICBmb3IgKGkgPSAwOyBpIDwgMjU3OyBpKyspCi0gICAgb3RoZXJzW2ldID0gLTE7CQkvKiBpbml0IGxpbmtzIHRvIGVtcHR5ICovCi0gIAotICBmcmVxWzI1Nl0gPSAxOwkJLyogbWFrZSBzdXJlIDI1NiBoYXMgYSBub256ZXJvIGNvdW50ICovCisgICAgb3RoZXJzW2ldID0gLTE7ICAgICAgICAgICAgIC8qIGluaXQgbGlua3MgdG8gZW1wdHkgKi8KKworICBmcmVxWzI1Nl0gPSAxOyAgICAgICAgICAgICAgICAvKiBtYWtlIHN1cmUgMjU2IGhhcyBhIG5vbnplcm8gY291bnQgKi8KICAgLyogSW5jbHVkaW5nIHRoZSBwc2V1ZG8tc3ltYm9sIDI1NiBpbiB0aGUgSHVmZm1hbiBwcm9jZWR1cmUgZ3VhcmFudGVlcwogICAgKiB0aGF0IG5vIHJlYWwgc3ltYm9sIGlzIGdpdmVuIGNvZGUtdmFsdWUgb2YgYWxsIG9uZXMsIGJlY2F1c2UgMjU2CiAgICAqIHdpbGwgYmUgcGxhY2VkIGxhc3QgaW4gdGhlIGxhcmdlc3QgY29kZXdvcmQgY2F0ZWdvcnkuCkBAIC04NTAsOCArODU5LDggQEAKICAgICB2ID0gMTAwMDAwMDAwMEw7CiAgICAgZm9yIChpID0gMDsgaSA8PSAyNTY7IGkrKykgewogICAgICAgaWYgKGZyZXFbaV0gJiYgZnJlcVtpXSA8PSB2KSB7Ci0JdiA9IGZyZXFbaV07Ci0JYzEgPSBpOworICAgICAgICB2ID0gZnJlcVtpXTsKKyAgICAgICAgYzEgPSBpOwogICAgICAgfQogICAgIH0KIApAQCAtODYxLDE1ICs4NzAsMTUgQEAKICAgICB2ID0gMTAwMDAwMDAwMEw7CiAgICAgZm9yIChpID0gMDsgaSA8PSAyNTY7IGkrKykgewogICAgICAgaWYgKGZyZXFbaV0gJiYgZnJlcVtpXSA8PSB2ICYmIGkgIT0gYzEpIHsKLQl2ID0gZnJlcVtpXTsKLQljMiA9IGk7CisgICAgICAgIHYgPSBmcmVxW2ldOworICAgICAgICBjMiA9IGk7CiAgICAgICB9CiAgICAgfQogCiAgICAgLyogRG9uZSBpZiB3ZSd2ZSBtZXJnZWQgZXZlcnl0aGluZyBpbnRvIG9uZSBmcmVxdWVuY3kgKi8KICAgICBpZiAoYzIgPCAwKQogICAgICAgYnJlYWs7Ci0gICAgCisKICAgICAvKiBFbHNlIG1lcmdlIHRoZSB0d28gY291bnRzL3RyZWVzICovCiAgICAgZnJlcVtjMV0gKz0gZnJlcVtjMl07CiAgICAgZnJlcVtjMl0gPSAwOwpAQCAtODgwLDkgKzg4OSw5IEBACiAgICAgICBjMSA9IG90aGVyc1tjMV07CiAgICAgICBjb2Rlc2l6ZVtjMV0rKzsKICAgICB9Ci0gICAgCi0gICAgb3RoZXJzW2MxXSA9IGMyOwkJLyogY2hhaW4gYzIgb250byBjMSdzIHRyZWUgYnJhbmNoICovCi0gICAgCisKKyAgICBvdGhlcnNbYzFdID0gYzI7ICAgICAgICAgICAgLyogY2hhaW4gYzIgb250byBjMSdzIHRyZWUgYnJhbmNoICovCisKICAgICAvKiBJbmNyZW1lbnQgdGhlIGNvZGVzaXplIG9mIGV2ZXJ5dGhpbmcgaW4gYzIncyB0cmVlIGJyYW5jaCAqLwogICAgIGNvZGVzaXplW2MyXSsrOwogICAgIHdoaWxlIChvdGhlcnNbYzJdID49IDApIHsKQEAgLTg5Nyw3ICs5MDYsNyBAQAogICAgICAgLyogVGhlIEpQRUcgc3RhbmRhcmQgc2VlbXMgdG8gdGhpbmsgdGhhdCB0aGlzIGNhbid0IGhhcHBlbiwgKi8KICAgICAgIC8qIGJ1dCBJJ20gcGFyYW5vaWQuLi4gKi8KICAgICAgIGlmIChjb2Rlc2l6ZVtpXSA+IE1BWF9DTEVOKQotCUVSUkVYSVQoY2luZm8sIEpFUlJfSFVGRl9DTEVOX09WRVJGTE9XKTsKKyAgICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9IVUZGX0NMRU5fT1ZFUkZMT1cpOwogCiAgICAgICBiaXRzW2NvZGVzaXplW2ldXSsrOwogICAgIH0KQEAgLTkxMywyOCArOTIyLDI4IEBACiAgICAqIHNob3J0ZXN0IG5vbnplcm8gQklUUyBlbnRyeSBpcyBjb252ZXJ0ZWQgaW50byBhIHByZWZpeCBmb3IgdHdvIGNvZGUgd29yZHMKICAgICogb25lIGJpdCBsb25nZXIuCiAgICAqLwotICAKKwogICBmb3IgKGkgPSBNQVhfQ0xFTjsgaSA+IDE2OyBpLS0pIHsKICAgICB3aGlsZSAoYml0c1tpXSA+IDApIHsKLSAgICAgIGogPSBpIC0gMjsJCS8qIGZpbmQgbGVuZ3RoIG9mIG5ldyBwcmVmaXggdG8gYmUgdXNlZCAqLworICAgICAgaiA9IGkgLSAyOyAgICAgICAgICAgICAgICAvKiBmaW5kIGxlbmd0aCBvZiBuZXcgcHJlZml4IHRvIGJlIHVzZWQgKi8KICAgICAgIHdoaWxlIChiaXRzW2pdID09IDApCi0Jai0tOwotICAgICAgCi0gICAgICBiaXRzW2ldIC09IDI7CQkvKiByZW1vdmUgdHdvIHN5bWJvbHMgKi8KLSAgICAgIGJpdHNbaS0xXSsrOwkJLyogb25lIGdvZXMgaW4gdGhpcyBsZW5ndGggKi8KLSAgICAgIGJpdHNbaisxXSArPSAyOwkJLyogdHdvIG5ldyBzeW1ib2xzIGluIHRoaXMgbGVuZ3RoICovCi0gICAgICBiaXRzW2pdLS07CQkvKiBzeW1ib2wgb2YgdGhpcyBsZW5ndGggaXMgbm93IGEgcHJlZml4ICovCisgICAgICAgIGotLTsKKworICAgICAgYml0c1tpXSAtPSAyOyAgICAgICAgICAgICAvKiByZW1vdmUgdHdvIHN5bWJvbHMgKi8KKyAgICAgIGJpdHNbaS0xXSsrOyAgICAgICAgICAgICAgLyogb25lIGdvZXMgaW4gdGhpcyBsZW5ndGggKi8KKyAgICAgIGJpdHNbaisxXSArPSAyOyAgICAgICAgICAgLyogdHdvIG5ldyBzeW1ib2xzIGluIHRoaXMgbGVuZ3RoICovCisgICAgICBiaXRzW2pdLS07ICAgICAgICAgICAgICAgIC8qIHN5bWJvbCBvZiB0aGlzIGxlbmd0aCBpcyBub3cgYSBwcmVmaXggKi8KICAgICB9CiAgIH0KIAogICAvKiBSZW1vdmUgdGhlIGNvdW50IGZvciB0aGUgcHNldWRvLXN5bWJvbCAyNTYgZnJvbSB0aGUgbGFyZ2VzdCBjb2RlbGVuZ3RoICovCi0gIHdoaWxlIChiaXRzW2ldID09IDApCQkvKiBmaW5kIGxhcmdlc3QgY29kZWxlbmd0aCBzdGlsbCBpbiB1c2UgKi8KKyAgd2hpbGUgKGJpdHNbaV0gPT0gMCkgICAgICAgICAgLyogZmluZCBsYXJnZXN0IGNvZGVsZW5ndGggc3RpbGwgaW4gdXNlICovCiAgICAgaS0tOwogICBiaXRzW2ldLS07Ci0gIAorCiAgIC8qIFJldHVybiBmaW5hbCBzeW1ib2wgY291bnRzIChvbmx5IGZvciBsZW5ndGhzIDAuLjE2KSAqLwogICBNRU1DT1BZKGh0YmwtPmJpdHMsIGJpdHMsIFNJWkVPRihodGJsLT5iaXRzKSk7Ci0gIAorCiAgIC8qIFJldHVybiBhIGxpc3Qgb2YgdGhlIHN5bWJvbHMgc29ydGVkIGJ5IGNvZGUgbGVuZ3RoICovCiAgIC8qIEl0J3Mgbm90IHJlYWwgY2xlYXIgdG8gbWUgd2h5IHdlIGRvbid0IG5lZWQgdG8gY29uc2lkZXIgdGhlIGNvZGVsZW5ndGgKICAgICogY2hhbmdlcyBtYWRlIGFib3ZlLCBidXQgdGhlIEpQRUcgc3BlYyBzZWVtcyB0byB0aGluayB0aGlzIHdvcmtzLgpAQCAtOTQzLDggKzk1Miw4IEBACiAgIGZvciAoaSA9IDE7IGkgPD0gTUFYX0NMRU47IGkrKykgewogICAgIGZvciAoaiA9IDA7IGogPD0gMjU1OyBqKyspIHsKICAgICAgIGlmIChjb2Rlc2l6ZVtqXSA9PSBpKSB7Ci0JaHRibC0+aHVmZnZhbFtwXSA9IChVSU5UOCkgajsKLQlwKys7CisgICAgICAgIGh0YmwtPmh1ZmZ2YWxbcF0gPSAoVUlOVDgpIGo7CisgICAgICAgIHArKzsKICAgICAgIH0KICAgICB9CiAgIH0KQEAgLTk4MSwxNCArOTkwLDE0IEBACiAgICAgaWYgKCEgZGlkX2RjW2RjdGJsXSkgewogICAgICAgaHRibHB0ciA9ICYgY2luZm8tPmRjX2h1ZmZfdGJsX3B0cnNbZGN0YmxdOwogICAgICAgaWYgKCpodGJscHRyID09IE5VTEwpCi0JKmh0YmxwdHIgPSBqcGVnX2FsbG9jX2h1ZmZfdGFibGUoKGpfY29tbW9uX3B0cikgY2luZm8pOworICAgICAgICAqaHRibHB0ciA9IGpwZWdfYWxsb2NfaHVmZl90YWJsZSgoal9jb21tb25fcHRyKSBjaW5mbyk7CiAgICAgICBqcGVnX2dlbl9vcHRpbWFsX3RhYmxlKGNpbmZvLCAqaHRibHB0ciwgZW50cm9weS0+ZGNfY291bnRfcHRyc1tkY3RibF0pOwogICAgICAgZGlkX2RjW2RjdGJsXSA9IFRSVUU7CiAgICAgfQogICAgIGlmICghIGRpZF9hY1thY3RibF0pIHsKICAgICAgIGh0YmxwdHIgPSAmIGNpbmZvLT5hY19odWZmX3RibF9wdHJzW2FjdGJsXTsKICAgICAgIGlmICgqaHRibHB0ciA9PSBOVUxMKQotCSpodGJscHRyID0ganBlZ19hbGxvY19odWZmX3RhYmxlKChqX2NvbW1vbl9wdHIpIGNpbmZvKTsKKyAgICAgICAgKmh0YmxwdHIgPSBqcGVnX2FsbG9jX2h1ZmZfdGFibGUoKGpfY29tbW9uX3B0cikgY2luZm8pOwogICAgICAganBlZ19nZW5fb3B0aW1hbF90YWJsZShjaW5mbywgKmh0YmxwdHIsIGVudHJvcHktPmFjX2NvdW50X3B0cnNbYWN0YmxdKTsKICAgICAgIGRpZF9hY1thY3RibF0gPSBUUlVFOwogICAgIH0KQEAgLTEwMTEsNyArMTAyMCw3IEBACiAKICAgZW50cm9weSA9IChodWZmX2VudHJvcHlfcHRyKQogICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCi0JCQkJU0laRU9GKGh1ZmZfZW50cm9weV9lbmNvZGVyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJWkVPRihodWZmX2VudHJvcHlfZW5jb2RlcikpOwogICBjaW5mby0+ZW50cm9weSA9IChzdHJ1Y3QganBlZ19lbnRyb3B5X2VuY29kZXIgKikgZW50cm9weTsKICAgZW50cm9weS0+cHViLnN0YXJ0X3Bhc3MgPSBzdGFydF9wYXNzX2h1ZmY7CiAKZGlmZiAtLWdpdCBhL2pjaHVmZi5oIGIvamNodWZmLmgKaW5kZXggYTk1OTlmYy4uYTFhNTI4MCAxMDA2NDQKLS0tIGEvamNodWZmLmgKKysrIGIvamNodWZmLmgKQEAgLTI1LDIzICsyNSwyMyBAQAogLyogRGVyaXZlZCBkYXRhIGNvbnN0cnVjdGVkIGZvciBlYWNoIEh1ZmZtYW4gdGFibGUgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgewotICB1bnNpZ25lZCBpbnQgZWh1ZmNvWzI1Nl07CS8qIGNvZGUgZm9yIGVhY2ggc3ltYm9sICovCi0gIGNoYXIgZWh1ZnNpWzI1Nl07CQkvKiBsZW5ndGggb2YgY29kZSBmb3IgZWFjaCBzeW1ib2wgKi8KKyAgdW5zaWduZWQgaW50IGVodWZjb1syNTZdOyAgICAgLyogY29kZSBmb3IgZWFjaCBzeW1ib2wgKi8KKyAgY2hhciBlaHVmc2lbMjU2XTsgICAgICAgICAgICAgLyogbGVuZ3RoIG9mIGNvZGUgZm9yIGVhY2ggc3ltYm9sICovCiAgIC8qIElmIG5vIGNvZGUgaGFzIGJlZW4gYWxsb2NhdGVkIGZvciBhIHN5bWJvbCBTLCBlaHVmc2lbU10gY29udGFpbnMgMCAqLwogfSBjX2Rlcml2ZWRfdGJsOwogCiAvKiBTaG9ydCBmb3JtcyBvZiBleHRlcm5hbCBuYW1lcyBmb3Igc3lzdGVtcyB3aXRoIGJyYWluLWRhbWFnZWQgbGlua2Vycy4gKi8KIAogI2lmZGVmIE5FRURfU0hPUlRfRVhURVJOQUxfTkFNRVMKLSNkZWZpbmUganBlZ19tYWtlX2NfZGVyaXZlZF90YmwJak1rQ0Rlcml2ZWQKLSNkZWZpbmUganBlZ19nZW5fb3B0aW1hbF90YWJsZQlqR2VuT3B0VGJsCisjZGVmaW5lIGpwZWdfbWFrZV9jX2Rlcml2ZWRfdGJsIGpNa0NEZXJpdmVkCisjZGVmaW5lIGpwZWdfZ2VuX29wdGltYWxfdGFibGUgIGpHZW5PcHRUYmwKICNlbmRpZiAvKiBORUVEX1NIT1JUX0VYVEVSTkFMX05BTUVTICovCiAKIC8qIEV4cGFuZCBhIEh1ZmZtYW4gdGFibGUgZGVmaW5pdGlvbiBpbnRvIHRoZSBkZXJpdmVkIGZvcm1hdCAqLwogRVhURVJOKHZvaWQpIGpwZWdfbWFrZV9jX2Rlcml2ZWRfdGJsCi0JSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywgYm9vbGVhbiBpc0RDLCBpbnQgdGJsbm8sCi0JICAgICBjX2Rlcml2ZWRfdGJsICoqIHBkdGJsKSk7CisgICAgICAgIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sIGJvb2xlYW4gaXNEQywgaW50IHRibG5vLAorICAgICAgICAgICAgIGNfZGVyaXZlZF90YmwgKiogcGR0YmwpKTsKIAogLyogR2VuZXJhdGUgYW4gb3B0aW1hbCB0YWJsZSBkZWZpbml0aW9uIGdpdmVuIHRoZSBzcGVjaWZpZWQgY291bnRzICovCiBFWFRFUk4odm9pZCkganBlZ19nZW5fb3B0aW1hbF90YWJsZQotCUpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sIEpIVUZGX1RCTCAqIGh0YmwsIGxvbmcgZnJlcVtdKSk7CisgICAgICAgIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sIEpIVUZGX1RCTCAqIGh0YmwsIGxvbmcgZnJlcVtdKSk7CmRpZmYgLS1naXQgYS9qY2luaXQuYyBiL2pjaW5pdC5jCmluZGV4IGRlMGFkZTIuLjM0N2NmNmQgMTAwNjQ0Ci0tLSBhL2pjaW5pdC5jCisrKyBiL2pjaW5pdC5jCkBAIC02MCw3ICs2MCw3IEBACiAKICAgLyogTmVlZCBhIGZ1bGwtaW1hZ2UgY29lZmZpY2llbnQgYnVmZmVyIGluIGFueSBtdWx0aS1wYXNzIG1vZGUuICovCiAgIGppbml0X2NfY29lZl9jb250cm9sbGVyKGNpbmZvLAotCQkoYm9vbGVhbikgKGNpbmZvLT5udW1fc2NhbnMgPiAxIHx8IGNpbmZvLT5vcHRpbWl6ZV9jb2RpbmcpKTsKKyAgICAgICAgICAgICAgICAoYm9vbGVhbikgKGNpbmZvLT5udW1fc2NhbnMgPiAxIHx8IGNpbmZvLT5vcHRpbWl6ZV9jb2RpbmcpKTsKICAgamluaXRfY19tYWluX2NvbnRyb2xsZXIoY2luZm8sIEZBTFNFIC8qIG5ldmVyIG5lZWQgZnVsbCBidWZmZXIgaGVyZSAqLyk7CiAKICAgamluaXRfbWFya2VyX3dyaXRlcihjaW5mbyk7CmRpZmYgLS1naXQgYS9qY21haW5jdC5jIGIvamNtYWluY3QuYwppbmRleCA1YjdmZjIxLi41YTA1NDlhIDEwMDY0NAotLS0gYS9qY21haW5jdC5jCisrKyBiL2pjbWFpbmN0LmMKQEAgLTI4LDEwICsyOCwxMCBAQAogdHlwZWRlZiBzdHJ1Y3QgewogICBzdHJ1Y3QganBlZ19jX21haW5fY29udHJvbGxlciBwdWI7IC8qIHB1YmxpYyBmaWVsZHMgKi8KIAotICBKRElNRU5TSU9OIGN1cl9pTUNVX3JvdzsJLyogbnVtYmVyIG9mIGN1cnJlbnQgaU1DVSByb3cgKi8KLSAgSkRJTUVOU0lPTiByb3dncm91cF9jdHI7CS8qIGNvdW50cyByb3cgZ3JvdXBzIHJlY2VpdmVkIGluIGlNQ1Ugcm93ICovCi0gIGJvb2xlYW4gc3VzcGVuZGVkOwkJLyogcmVtZW1iZXIgaWYgd2Ugc3VzcGVuZGVkIG91dHB1dCAqLwotICBKX0JVRl9NT0RFIHBhc3NfbW9kZTsJCS8qIGN1cnJlbnQgb3BlcmF0aW5nIG1vZGUgKi8KKyAgSkRJTUVOU0lPTiBjdXJfaU1DVV9yb3c7ICAgICAgLyogbnVtYmVyIG9mIGN1cnJlbnQgaU1DVSByb3cgKi8KKyAgSkRJTUVOU0lPTiByb3dncm91cF9jdHI7ICAgICAgLyogY291bnRzIHJvdyBncm91cHMgcmVjZWl2ZWQgaW4gaU1DVSByb3cgKi8KKyAgYm9vbGVhbiBzdXNwZW5kZWQ7ICAgICAgICAgICAgLyogcmVtZW1iZXIgaWYgd2Ugc3VzcGVuZGVkIG91dHB1dCAqLworICBKX0JVRl9NT0RFIHBhc3NfbW9kZTsgICAgICAgICAvKiBjdXJyZW50IG9wZXJhdGluZyBtb2RlICovCiAKICAgLyogSWYgdXNpbmcganVzdCBhIHN0cmlwIGJ1ZmZlciwgdGhpcyBwb2ludHMgdG8gdGhlIGVudGlyZSBzZXQgb2YgYnVmZmVycwogICAgKiAod2UgYWxsb2NhdGUgb25lIGZvciBlYWNoIGNvbXBvbmVudCkuICBJbiB0aGUgZnVsbC1pbWFnZSBjYXNlLCB0aGlzCkBAIC01MiwxMiArNTIsMTIgQEAKIAogLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KIE1FVEhPRERFRih2b2lkKSBwcm9jZXNzX2RhdGFfc2ltcGxlX21haW4KLQlKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwKLQkgICAgIEpESU1FTlNJT04gKmluX3Jvd19jdHIsIEpESU1FTlNJT04gaW5fcm93c19hdmFpbCkpOworICAgICAgICBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICBKRElNRU5TSU9OICppbl9yb3dfY3RyLCBKRElNRU5TSU9OIGluX3Jvd3NfYXZhaWwpKTsKICNpZmRlZiBGVUxMX01BSU5fQlVGRkVSX1NVUFBPUlRFRAogTUVUSE9EREVGKHZvaWQpIHByb2Nlc3NfZGF0YV9idWZmZXJfbWFpbgotCUpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sIEpTQU1QQVJSQVkgaW5wdXRfYnVmLAotCSAgICAgSkRJTUVOU0lPTiAqaW5fcm93X2N0ciwgSkRJTUVOU0lPTiBpbl9yb3dzX2F2YWlsKSk7CisgICAgICAgIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sIEpTQU1QQVJSQVkgaW5wdXRfYnVmLAorICAgICAgICAgICAgIEpESU1FTlNJT04gKmluX3Jvd19jdHIsIEpESU1FTlNJT04gaW5fcm93c19hdmFpbCkpOwogI2VuZGlmCiAKIApAQCAtNzQsMTAgKzc0LDEwIEBACiAgIGlmIChjaW5mby0+cmF3X2RhdGFfaW4pCiAgICAgcmV0dXJuOwogCi0gIG1haW5fcHRyLT5jdXJfaU1DVV9yb3cgPSAwOwkvKiBpbml0aWFsaXplIGNvdW50ZXJzICovCisgIG1haW5fcHRyLT5jdXJfaU1DVV9yb3cgPSAwOyAgIC8qIGluaXRpYWxpemUgY291bnRlcnMgKi8KICAgbWFpbl9wdHItPnJvd2dyb3VwX2N0ciA9IDA7CiAgIG1haW5fcHRyLT5zdXNwZW5kZWQgPSBGQUxTRTsKLSAgbWFpbl9wdHItPnBhc3NfbW9kZSA9IHBhc3NfbW9kZTsJLyogc2F2ZSBtb2RlIGZvciB1c2UgYnkgcHJvY2Vzc19kYXRhICovCisgIG1haW5fcHRyLT5wYXNzX21vZGUgPSBwYXNzX21vZGU7ICAgICAgLyogc2F2ZSBtb2RlIGZvciB1c2UgYnkgcHJvY2Vzc19kYXRhICovCiAKICAgc3dpdGNoIChwYXNzX21vZGUpIHsKICAgY2FzZSBKQlVGX1BBU1NfVEhSVToKQEAgLTExMSw4ICsxMTEsOCBAQAogCiBNRVRIT0RERUYodm9pZCkKIHByb2Nlc3NfZGF0YV9zaW1wbGVfbWFpbiAoal9jb21wcmVzc19wdHIgY2luZm8sCi0JCQkgIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKRElNRU5TSU9OICppbl9yb3dfY3RyLAotCQkJICBKRElNRU5TSU9OIGluX3Jvd3NfYXZhaWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKRElNRU5TSU9OICppbl9yb3dfY3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGluX3Jvd3NfYXZhaWwpCiB7CiAgIG15X21haW5fcHRyIG1haW5fcHRyID0gKG15X21haW5fcHRyKSBjaW5mby0+bWFpbjsKIApAQCAtMTIwLDkgKzEyMCw5IEBACiAgICAgLyogUmVhZCBpbnB1dCBkYXRhIGlmIHdlIGhhdmVuJ3QgZmlsbGVkIHRoZSBtYWluIGJ1ZmZlciB5ZXQgKi8KICAgICBpZiAobWFpbl9wdHItPnJvd2dyb3VwX2N0ciA8IERDVFNJWkUpCiAgICAgICAoKmNpbmZvLT5wcmVwLT5wcmVfcHJvY2Vzc19kYXRhKSAoY2luZm8sCi0JCQkJCWlucHV0X2J1ZiwgaW5fcm93X2N0ciwgaW5fcm93c19hdmFpbCwKLQkJCQkJbWFpbl9wdHItPmJ1ZmZlciwgJm1haW5fcHRyLT5yb3dncm91cF9jdHIsCi0JCQkJCShKRElNRU5TSU9OKSBEQ1RTSVpFKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9idWYsIGluX3Jvd19jdHIsIGluX3Jvd3NfYXZhaWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbl9wdHItPmJ1ZmZlciwgJm1haW5fcHRyLT5yb3dncm91cF9jdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEpESU1FTlNJT04pIERDVFNJWkUpOwogCiAgICAgLyogSWYgd2UgZG9uJ3QgaGF2ZSBhIGZ1bGwgaU1DVSByb3cgYnVmZmVyZWQsIHJldHVybiB0byBhcHBsaWNhdGlvbiBmb3IKICAgICAgKiBtb3JlIGRhdGEuICBOb3RlIHRoYXQgcHJlcHJvY2Vzc29yIHdpbGwgYWx3YXlzIHBhZCB0byBmaWxsIHRoZSBpTUNVIHJvdwpAQCAtMTQwLDggKzE0MCw4IEBACiAgICAgICAgKiB0aGluayB3ZSB3ZXJlIGRvbmUuCiAgICAgICAgKi8KICAgICAgIGlmICghIG1haW5fcHRyLT5zdXNwZW5kZWQpIHsKLQkoKmluX3Jvd19jdHIpLS07Ci0JbWFpbl9wdHItPnN1c3BlbmRlZCA9IFRSVUU7CisgICAgICAgICgqaW5fcm93X2N0ciktLTsKKyAgICAgICAgbWFpbl9wdHItPnN1c3BlbmRlZCA9IFRSVUU7CiAgICAgICB9CiAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTY3LDggKzE2Nyw4IEBACiAKIE1FVEhPRERFRih2b2lkKQogcHJvY2Vzc19kYXRhX2J1ZmZlcl9tYWluIChqX2NvbXByZXNzX3B0ciBjaW5mbywKLQkJCSAgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpESU1FTlNJT04gKmluX3Jvd19jdHIsCi0JCQkgIEpESU1FTlNJT04gaW5fcm93c19hdmFpbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpESU1FTlNJT04gKmluX3Jvd19jdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gaW5fcm93c19hdmFpbCkKIHsKICAgbXlfbWFpbl9wdHIgbWFpbl9wdHIgPSAobXlfbWFpbl9wdHIpIGNpbmZvLT5tYWluOwogICBpbnQgY2k7CkBAIC0xNzksMTYgKzE3OSwxNiBAQAogICAgIC8qIFJlYWxpZ24gdGhlIHZpcnR1YWwgYnVmZmVycyBpZiBhdCB0aGUgc3RhcnQgb2YgYW4gaU1DVSByb3cuICovCiAgICAgaWYgKG1haW5fcHRyLT5yb3dncm91cF9jdHIgPT0gMCkgewogICAgICAgZm9yIChjaSA9IDAsIGNvbXBwdHIgPSBjaW5mby0+Y29tcF9pbmZvOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsKLQkgICBjaSsrLCBjb21wcHRyKyspIHsKLQltYWluX3B0ci0+YnVmZmVyW2NpXSA9ICgqY2luZm8tPm1lbS0+YWNjZXNzX3ZpcnRfc2FycmF5KQotCSAgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBtYWluX3B0ci0+d2hvbGVfaW1hZ2VbY2ldLAotCSAgIG1haW5fcHRyLT5jdXJfaU1DVV9yb3cgKiAoY29tcHB0ci0+dl9zYW1wX2ZhY3RvciAqIERDVFNJWkUpLAotCSAgIChKRElNRU5TSU9OKSAoY29tcHB0ci0+dl9zYW1wX2ZhY3RvciAqIERDVFNJWkUpLCB3cml0aW5nKTsKKyAgICAgICAgICAgY2krKywgY29tcHB0cisrKSB7CisgICAgICAgIG1haW5fcHRyLT5idWZmZXJbY2ldID0gKCpjaW5mby0+bWVtLT5hY2Nlc3NfdmlydF9zYXJyYXkpCisgICAgICAgICAgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBtYWluX3B0ci0+d2hvbGVfaW1hZ2VbY2ldLAorICAgICAgICAgICBtYWluX3B0ci0+Y3VyX2lNQ1Vfcm93ICogKGNvbXBwdHItPnZfc2FtcF9mYWN0b3IgKiBEQ1RTSVpFKSwKKyAgICAgICAgICAgKEpESU1FTlNJT04pIChjb21wcHRyLT52X3NhbXBfZmFjdG9yICogRENUU0laRSksIHdyaXRpbmcpOwogICAgICAgfQogICAgICAgLyogSW4gYSByZWFkIHBhc3MsIHByZXRlbmQgd2UganVzdCByZWFkIHNvbWUgc291cmNlIGRhdGEuICovCiAgICAgICBpZiAoISB3cml0aW5nKSB7Ci0JKmluX3Jvd19jdHIgKz0gY2luZm8tPm1heF92X3NhbXBfZmFjdG9yICogRENUU0laRTsKLQltYWluX3B0ci0+cm93Z3JvdXBfY3RyID0gRENUU0laRTsKKyAgICAgICAgKmluX3Jvd19jdHIgKz0gY2luZm8tPm1heF92X3NhbXBfZmFjdG9yICogRENUU0laRTsKKyAgICAgICAgbWFpbl9wdHItPnJvd2dyb3VwX2N0ciA9IERDVFNJWkU7CiAgICAgICB9CiAgICAgfQogCkBAIC0xOTYsMzUgKzE5NiwzNSBAQAogICAgIC8qIE5vdGU6IHByZXByb2Nlc3NvciB3aWxsIHBhZCBpZiBuZWNlc3NhcnkgdG8gZmlsbCB0aGUgbGFzdCBpTUNVIHJvdy4gKi8KICAgICBpZiAod3JpdGluZykgewogICAgICAgKCpjaW5mby0+cHJlcC0+cHJlX3Byb2Nlc3NfZGF0YSkgKGNpbmZvLAotCQkJCQlpbnB1dF9idWYsIGluX3Jvd19jdHIsIGluX3Jvd3NfYXZhaWwsCi0JCQkJCW1haW5fcHRyLT5idWZmZXIsICZtYWluX3B0ci0+cm93Z3JvdXBfY3RyLAotCQkJCQkoSkRJTUVOU0lPTikgRENUU0laRSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfYnVmLCBpbl9yb3dfY3RyLCBpbl9yb3dzX2F2YWlsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5fcHRyLT5idWZmZXIsICZtYWluX3B0ci0+cm93Z3JvdXBfY3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChKRElNRU5TSU9OKSBEQ1RTSVpFKTsKICAgICAgIC8qIFJldHVybiB0byBhcHBsaWNhdGlvbiBpZiB3ZSBuZWVkIG1vcmUgZGF0YSB0byBmaWxsIHRoZSBpTUNVIHJvdy4gKi8KICAgICAgIGlmIChtYWluX3B0ci0+cm93Z3JvdXBfY3RyIDwgRENUU0laRSkKLQlyZXR1cm47CisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvKiBFbWl0IGRhdGEsIHVubGVzcyB0aGlzIGlzIGEgc2luay1vbmx5IHBhc3MuICovCiAgICAgaWYgKG1haW5fcHRyLT5wYXNzX21vZGUgIT0gSkJVRl9TQVZFX1NPVVJDRSkgewogICAgICAgaWYgKCEgKCpjaW5mby0+Y29lZi0+Y29tcHJlc3NfZGF0YSkgKGNpbmZvLCBtYWluX3B0ci0+YnVmZmVyKSkgewotCS8qIElmIGNvbXByZXNzb3IgZGlkIG5vdCBjb25zdW1lIHRoZSB3aG9sZSByb3csIHRoZW4gd2UgbXVzdCBuZWVkIHRvCi0JICogc3VzcGVuZCBwcm9jZXNzaW5nIGFuZCByZXR1cm4gdG8gdGhlIGFwcGxpY2F0aW9uLiAgSW4gdGhpcyBzaXR1YXRpb24KLQkgKiB3ZSBwcmV0ZW5kIHdlIGRpZG4ndCB5ZXQgY29uc3VtZSB0aGUgbGFzdCBpbnB1dCByb3c7IG90aGVyd2lzZSwgaWYKLQkgKiBpdCBoYXBwZW5lZCB0byBiZSB0aGUgbGFzdCByb3cgb2YgdGhlIGltYWdlLCB0aGUgYXBwbGljYXRpb24gd291bGQKLQkgKiB0aGluayB3ZSB3ZXJlIGRvbmUuCi0JICovCi0JaWYgKCEgbWFpbl9wdHItPnN1c3BlbmRlZCkgewotCSAgKCppbl9yb3dfY3RyKS0tOwotCSAgbWFpbl9wdHItPnN1c3BlbmRlZCA9IFRSVUU7Ci0JfQotCXJldHVybjsKKyAgICAgICAgLyogSWYgY29tcHJlc3NvciBkaWQgbm90IGNvbnN1bWUgdGhlIHdob2xlIHJvdywgdGhlbiB3ZSBtdXN0IG5lZWQgdG8KKyAgICAgICAgICogc3VzcGVuZCBwcm9jZXNzaW5nIGFuZCByZXR1cm4gdG8gdGhlIGFwcGxpY2F0aW9uLiAgSW4gdGhpcyBzaXR1YXRpb24KKyAgICAgICAgICogd2UgcHJldGVuZCB3ZSBkaWRuJ3QgeWV0IGNvbnN1bWUgdGhlIGxhc3QgaW5wdXQgcm93OyBvdGhlcndpc2UsIGlmCisgICAgICAgICAqIGl0IGhhcHBlbmVkIHRvIGJlIHRoZSBsYXN0IHJvdyBvZiB0aGUgaW1hZ2UsIHRoZSBhcHBsaWNhdGlvbiB3b3VsZAorICAgICAgICAgKiB0aGluayB3ZSB3ZXJlIGRvbmUuCisgICAgICAgICAqLworICAgICAgICBpZiAoISBtYWluX3B0ci0+c3VzcGVuZGVkKSB7CisgICAgICAgICAgKCppbl9yb3dfY3RyKS0tOworICAgICAgICAgIG1haW5fcHRyLT5zdXNwZW5kZWQgPSBUUlVFOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKICAgICAgIH0KICAgICAgIC8qIFdlIGRpZCBmaW5pc2ggdGhlIHJvdy4gIFVuZG8gb3VyIGxpdHRsZSBzdXNwZW5zaW9uIGhhY2sgaWYgYSBwcmV2aW91cwogICAgICAgICogY2FsbCBzdXNwZW5kZWQ7IHRoZW4gbWFyayB0aGUgbWFpbiBidWZmZXIgZW1wdHkuCiAgICAgICAgKi8KICAgICAgIGlmIChtYWluX3B0ci0+c3VzcGVuZGVkKSB7Ci0JKCppbl9yb3dfY3RyKSsrOwotCW1haW5fcHRyLT5zdXNwZW5kZWQgPSBGQUxTRTsKKyAgICAgICAgKCppbl9yb3dfY3RyKSsrOworICAgICAgICBtYWluX3B0ci0+c3VzcGVuZGVkID0gRkFMU0U7CiAgICAgICB9CiAgICAgfQogCkBAIC0yNTAsNyArMjUwLDcgQEAKIAogICBtYWluX3B0ciA9IChteV9tYWluX3B0cikKICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAotCQkJCVNJWkVPRihteV9tYWluX2NvbnRyb2xsZXIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0laRU9GKG15X21haW5fY29udHJvbGxlcikpOwogICBjaW5mby0+bWFpbiA9IChzdHJ1Y3QganBlZ19jX21haW5fY29udHJvbGxlciAqKSBtYWluX3B0cjsKICAgbWFpbl9wdHItPnB1Yi5zdGFydF9wYXNzID0gc3RhcnRfcGFzc19tYWluOwogCkBAIC0yNjYsMTMgKzI2NiwxMyBAQAogICAgIC8qIEFsbG9jYXRlIGEgZnVsbC1pbWFnZSB2aXJ0dWFsIGFycmF5IGZvciBlYWNoIGNvbXBvbmVudCAqLwogICAgIC8qIE5vdGUgd2UgcGFkIHRoZSBib3R0b20gdG8gYSBtdWx0aXBsZSBvZiB0aGUgaU1DVSBoZWlnaHQgKi8KICAgICBmb3IgKGNpID0gMCwgY29tcHB0ciA9IGNpbmZvLT5jb21wX2luZm87IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOwotCSBjaSsrLCBjb21wcHRyKyspIHsKKyAgICAgICAgIGNpKyssIGNvbXBwdHIrKykgewogICAgICAgbWFpbl9wdHItPndob2xlX2ltYWdlW2NpXSA9ICgqY2luZm8tPm1lbS0+cmVxdWVzdF92aXJ0X3NhcnJheSkKLQkoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLCBGQUxTRSwKLQkgY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzICogRENUU0laRSwKLQkgKEpESU1FTlNJT04pIGpyb3VuZF91cCgobG9uZykgY29tcHB0ci0+aGVpZ2h0X2luX2Jsb2NrcywKLQkJCQkobG9uZykgY29tcHB0ci0+dl9zYW1wX2ZhY3RvcikgKiBEQ1RTSVpFLAotCSAoSkRJTUVOU0lPTikgKGNvbXBwdHItPnZfc2FtcF9mYWN0b3IgKiBEQ1RTSVpFKSk7CisgICAgICAgICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsIEZBTFNFLAorICAgICAgICAgY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzICogRENUU0laRSwKKyAgICAgICAgIChKRElNRU5TSU9OKSBqcm91bmRfdXAoKGxvbmcpIGNvbXBwdHItPmhlaWdodF9pbl9ibG9ja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBjb21wcHRyLT52X3NhbXBfZmFjdG9yKSAqIERDVFNJWkUsCisgICAgICAgICAoSkRJTUVOU0lPTikgKGNvbXBwdHItPnZfc2FtcF9mYWN0b3IgKiBEQ1RTSVpFKSk7CiAgICAgfQogI2Vsc2UKICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9CVUZGRVJfTU9ERSk7CkBAIC0yODMsMTEgKzI4MywxMSBAQAogI2VuZGlmCiAgICAgLyogQWxsb2NhdGUgYSBzdHJpcCBidWZmZXIgZm9yIGVhY2ggY29tcG9uZW50ICovCiAgICAgZm9yIChjaSA9IDAsIGNvbXBwdHIgPSBjaW5mby0+Y29tcF9pbmZvOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsKLQkgY2krKywgY29tcHB0cisrKSB7CisgICAgICAgICBjaSsrLCBjb21wcHRyKyspIHsKICAgICAgIG1haW5fcHRyLT5idWZmZXJbY2ldID0gKCpjaW5mby0+bWVtLT5hbGxvY19zYXJyYXkpCi0JKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKLQkgY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzICogRENUU0laRSwKLQkgKEpESU1FTlNJT04pIChjb21wcHRyLT52X3NhbXBfZmFjdG9yICogRENUU0laRSkpOworICAgICAgICAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAorICAgICAgICAgY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzICogRENUU0laRSwKKyAgICAgICAgIChKRElNRU5TSU9OKSAoY29tcHB0ci0+dl9zYW1wX2ZhY3RvciAqIERDVFNJWkUpKTsKICAgICB9CiAgIH0KIH0KZGlmZiAtLWdpdCBhL2pjbWFya2VyLmMgYi9qY21hcmtlci5jCmluZGV4IGUyMDM3YzMuLjYyYWViNTkgMTAwNjQ0Ci0tLSBhL2pjbWFya2VyLmMKKysrIGIvamNtYXJrZXIuYwpAQCAtNCw3ICs0LDcgQEAKICAqIFRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlOgogICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTgsIFRob21hcyBHLiBMYW5lLgogICogTW9kaWZpZWQgMjAwMy0yMDEwIGJ5IEd1aWRvIFZvbGxiZWRpbmcuCi0gKiBNb2RpZmljYXRpb25zOgorICogbGlianBlZy10dXJibyBNb2RpZmljYXRpb25zOgogICogQ29weXJpZ2h0IChDKSAyMDEwLCBELiBSLiBDb21tYW5kZXIuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuCiAgKgpAQCAtMTcsNyArMTcsNyBAQAogI2luY2x1ZGUgImpwZWdjb21wLmgiCiAKIAotdHlwZWRlZiBlbnVtIHsJCQkvKiBKUEVHIG1hcmtlciBjb2RlcyAqLwordHlwZWRlZiBlbnVtIHsgICAgICAgICAgICAgICAgICAvKiBKUEVHIG1hcmtlciBjb2RlcyAqLwogICBNX1NPRjAgID0gMHhjMCwKICAgTV9TT0YxICA9IDB4YzEsCiAgIE1fU09GMiAgPSAweGMyLApAQCAtMTczLDcgKzE3Myw3IEBACiAgICAgICAvKiBUaGUgdGFibGUgZW50cmllcyBtdXN0IGJlIGVtaXR0ZWQgaW4gemlnemFnIG9yZGVyLiAqLwogICAgICAgdW5zaWduZWQgaW50IHF2YWwgPSBxdGJsLT5xdWFudHZhbFtqcGVnX25hdHVyYWxfb3JkZXJbaV1dOwogICAgICAgaWYgKHByZWMpCi0JZW1pdF9ieXRlKGNpbmZvLCAoaW50KSAocXZhbCA+PiA4KSk7CisgICAgICAgIGVtaXRfYnl0ZShjaW5mbywgKGludCkgKHF2YWwgPj4gOCkpOwogICAgICAgZW1pdF9ieXRlKGNpbmZvLCAoaW50KSAocXZhbCAmIDB4RkYpKTsKICAgICB9CiAKQEAgLTE5MCwzMyArMTkwLDMzIEBACiB7CiAgIEpIVUZGX1RCTCAqIGh0Ymw7CiAgIGludCBsZW5ndGgsIGk7Ci0gIAorCiAgIGlmIChpc19hYykgewogICAgIGh0YmwgPSBjaW5mby0+YWNfaHVmZl90YmxfcHRyc1tpbmRleF07Ci0gICAgaW5kZXggKz0gMHgxMDsJCS8qIG91dHB1dCBpbmRleCBoYXMgQUMgYml0IHNldCAqLworICAgIGluZGV4ICs9IDB4MTA7ICAgICAgICAgICAgICAvKiBvdXRwdXQgaW5kZXggaGFzIEFDIGJpdCBzZXQgKi8KICAgfSBlbHNlIHsKICAgICBodGJsID0gY2luZm8tPmRjX2h1ZmZfdGJsX3B0cnNbaW5kZXhdOwogICB9CiAKICAgaWYgKGh0YmwgPT0gTlVMTCkKICAgICBFUlJFWElUMShjaW5mbywgSkVSUl9OT19IVUZGX1RBQkxFLCBpbmRleCk7Ci0gIAorCiAgIGlmICghIGh0YmwtPnNlbnRfdGFibGUpIHsKICAgICBlbWl0X21hcmtlcihjaW5mbywgTV9ESFQpOwotICAgIAorCiAgICAgbGVuZ3RoID0gMDsKICAgICBmb3IgKGkgPSAxOyBpIDw9IDE2OyBpKyspCiAgICAgICBsZW5ndGggKz0gaHRibC0+Yml0c1tpXTsKLSAgICAKKwogICAgIGVtaXRfMmJ5dGVzKGNpbmZvLCBsZW5ndGggKyAyICsgMSArIDE2KTsKICAgICBlbWl0X2J5dGUoY2luZm8sIGluZGV4KTsKLSAgICAKKwogICAgIGZvciAoaSA9IDE7IGkgPD0gMTY7IGkrKykKICAgICAgIGVtaXRfYnl0ZShjaW5mbywgaHRibC0+Yml0c1tpXSk7Ci0gICAgCisKICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCiAgICAgICBlbWl0X2J5dGUoY2luZm8sIGh0YmwtPmh1ZmZ2YWxbaV0pOwotICAgIAorCiAgICAgaHRibC0+c2VudF90YWJsZSA9IFRSVUU7CiAgIH0KIH0KQEAgLTI1OCwxMiArMjU4LDEyIEBACiAKICAgICBmb3IgKGkgPSAwOyBpIDwgTlVNX0FSSVRIX1RCTFM7IGkrKykgewogICAgICAgaWYgKGRjX2luX3VzZVtpXSkgewotCWVtaXRfYnl0ZShjaW5mbywgaSk7Ci0JZW1pdF9ieXRlKGNpbmZvLCBjaW5mby0+YXJpdGhfZGNfTFtpXSArIChjaW5mby0+YXJpdGhfZGNfVVtpXTw8NCkpOworICAgICAgICBlbWl0X2J5dGUoY2luZm8sIGkpOworICAgICAgICBlbWl0X2J5dGUoY2luZm8sIGNpbmZvLT5hcml0aF9kY19MW2ldICsgKGNpbmZvLT5hcml0aF9kY19VW2ldPDw0KSk7CiAgICAgICB9CiAgICAgICBpZiAoYWNfaW5fdXNlW2ldKSB7Ci0JZW1pdF9ieXRlKGNpbmZvLCBpICsgMHgxMCk7Ci0JZW1pdF9ieXRlKGNpbmZvLCBjaW5mby0+YXJpdGhfYWNfS1tpXSk7CisgICAgICAgIGVtaXRfYnl0ZShjaW5mbywgaSArIDB4MTApOworICAgICAgICBlbWl0X2J5dGUoY2luZm8sIGNpbmZvLT5hcml0aF9hY19LW2ldKTsKICAgICAgIH0KICAgICB9CiAgIH0KQEAgLTI3Niw4ICsyNzYsOCBAQAogLyogRW1pdCBhIERSSSBtYXJrZXIgKi8KIHsKICAgZW1pdF9tYXJrZXIoY2luZm8sIE1fRFJJKTsKLSAgCi0gIGVtaXRfMmJ5dGVzKGNpbmZvLCA0KTsJLyogZml4ZWQgbGVuZ3RoICovCisKKyAgZW1pdF8yYnl0ZXMoY2luZm8sIDQpOyAgICAgICAgLyogZml4ZWQgbGVuZ3RoICovCiAKICAgZW1pdF8yYnl0ZXMoY2luZm8sIChpbnQpIGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsKTsKIH0KQEAgLTI4OSw5ICsyODksOSBAQAogewogICBpbnQgY2k7CiAgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7Ci0gIAorCiAgIGVtaXRfbWFya2VyKGNpbmZvLCBjb2RlKTsKLSAgCisKICAgZW1pdF8yYnl0ZXMoY2luZm8sIDMgKiBjaW5mby0+bnVtX2NvbXBvbmVudHMgKyAyICsgNSArIDEpOyAvKiBsZW5ndGggKi8KIAogICAvKiBNYWtlIHN1cmUgaW1hZ2UgaXNuJ3QgYmlnZ2VyIHRoYW4gU09GIGZpZWxkIGNhbiBoYW5kbGUgKi8KQEAgLTMyMCwxMyArMzIwLDEzIEBACiB7CiAgIGludCBpLCB0ZCwgdGE7CiAgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7Ci0gIAorCiAgIGVtaXRfbWFya2VyKGNpbmZvLCBNX1NPUyk7Ci0gIAorCiAgIGVtaXRfMmJ5dGVzKGNpbmZvLCAyICogY2luZm8tPmNvbXBzX2luX3NjYW4gKyAyICsgMSArIDMpOyAvKiBsZW5ndGggKi8KLSAgCisKICAgZW1pdF9ieXRlKGNpbmZvLCBjaW5mby0+Y29tcHNfaW5fc2Nhbik7Ci0gIAorCiAgIGZvciAoaSA9IDA7IGkgPCBjaW5mby0+Y29tcHNfaW5fc2NhbjsgaSsrKSB7CiAgICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2ldOwogICAgIGVtaXRfYnl0ZShjaW5mbywgY29tcHB0ci0+Y29tcG9uZW50X2lkKTsKQEAgLTM1NCwyMiArMzU0LDIyIEBACiAvKiBFbWl0IGEgSkZJRi1jb21wbGlhbnQgQVBQMCBtYXJrZXIgKi8KIHsKICAgLyoKLSAgICogTGVuZ3RoIG9mIEFQUDAgYmxvY2sJKDIgYnl0ZXMpCi0gICAqIEJsb2NrIElECQkJKDQgYnl0ZXMgLSBBU0NJSSAiSkZJRiIpCi0gICAqIFplcm8gYnl0ZQkJCSgxIGJ5dGUgdG8gdGVybWluYXRlIHRoZSBJRCBzdHJpbmcpCi0gICAqIFZlcnNpb24gTWFqb3IsIE1pbm9yCSgyIGJ5dGVzIC0gbWFqb3IgZmlyc3QpCi0gICAqIFVuaXRzCQkJKDEgYnl0ZSAtIDB4MDAgPSBub25lLCAweDAxID0gaW5jaCwgMHgwMiA9IGNtKQotICAgKiBYZHB1CQkJKDIgYnl0ZXMgLSBkb3RzIHBlciB1bml0IGhvcml6b250YWwpCi0gICAqIFlkcHUJCQkoMiBieXRlcyAtIGRvdHMgcGVyIHVuaXQgdmVydGljYWwpCi0gICAqIFRodW1ibmFpbCBYIHNpemUJCSgxIGJ5dGUpCi0gICAqIFRodW1ibmFpbCBZIHNpemUJCSgxIGJ5dGUpCisgICAqIExlbmd0aCBvZiBBUFAwIGJsb2NrICAgICAgICgyIGJ5dGVzKQorICAgKiBCbG9jayBJRCAgICAgICAgICAgICAgICAgICAoNCBieXRlcyAtIEFTQ0lJICJKRklGIikKKyAgICogWmVybyBieXRlICAgICAgICAgICAgICAgICAgKDEgYnl0ZSB0byB0ZXJtaW5hdGUgdGhlIElEIHN0cmluZykKKyAgICogVmVyc2lvbiBNYWpvciwgTWlub3IgICAgICAgKDIgYnl0ZXMgLSBtYWpvciBmaXJzdCkKKyAgICogVW5pdHMgICAgICAgICAgICAgICAgICAgICAgKDEgYnl0ZSAtIDB4MDAgPSBub25lLCAweDAxID0gaW5jaCwgMHgwMiA9IGNtKQorICAgKiBYZHB1ICAgICAgICAgICAgICAgICAgICAgICAoMiBieXRlcyAtIGRvdHMgcGVyIHVuaXQgaG9yaXpvbnRhbCkKKyAgICogWWRwdSAgICAgICAgICAgICAgICAgICAgICAgKDIgYnl0ZXMgLSBkb3RzIHBlciB1bml0IHZlcnRpY2FsKQorICAgKiBUaHVtYm5haWwgWCBzaXplICAgICAgICAgICAoMSBieXRlKQorICAgKiBUaHVtYm5haWwgWSBzaXplICAgICAgICAgICAoMSBieXRlKQogICAgKi8KLSAgCisKICAgZW1pdF9tYXJrZXIoY2luZm8sIE1fQVBQMCk7Ci0gIAorCiAgIGVtaXRfMmJ5dGVzKGNpbmZvLCAyICsgNCArIDEgKyAyICsgMSArIDIgKyAyICsgMSArIDEpOyAvKiBsZW5ndGggKi8KIAotICBlbWl0X2J5dGUoY2luZm8sIDB4NEEpOwkvKiBJZGVudGlmaWVyOiBBU0NJSSAiSkZJRiIgKi8KKyAgZW1pdF9ieXRlKGNpbmZvLCAweDRBKTsgICAgICAgLyogSWRlbnRpZmllcjogQVNDSUkgIkpGSUYiICovCiAgIGVtaXRfYnl0ZShjaW5mbywgMHg0Nik7CiAgIGVtaXRfYnl0ZShjaW5mbywgMHg0OSk7CiAgIGVtaXRfYnl0ZShjaW5mbywgMHg0Nik7CkBAIC0zNzksNyArMzc5LDcgQEAKICAgZW1pdF9ieXRlKGNpbmZvLCBjaW5mby0+ZGVuc2l0eV91bml0KTsgLyogUGl4ZWwgc2l6ZSBpbmZvcm1hdGlvbiAqLwogICBlbWl0XzJieXRlcyhjaW5mbywgKGludCkgY2luZm8tPlhfZGVuc2l0eSk7CiAgIGVtaXRfMmJ5dGVzKGNpbmZvLCAoaW50KSBjaW5mby0+WV9kZW5zaXR5KTsKLSAgZW1pdF9ieXRlKGNpbmZvLCAwKTsJCS8qIE5vIHRodW1ibmFpbCBpbWFnZSAqLworICBlbWl0X2J5dGUoY2luZm8sIDApOyAgICAgICAgICAvKiBObyB0aHVtYm5haWwgaW1hZ2UgKi8KICAgZW1pdF9ieXRlKGNpbmZvLCAwKTsKIH0KIApAQCAtMzg5LDEyICszODksMTIgQEAKIC8qIEVtaXQgYW4gQWRvYmUgQVBQMTQgbWFya2VyICovCiB7CiAgIC8qCi0gICAqIExlbmd0aCBvZiBBUFAxNCBibG9jawkoMiBieXRlcykKLSAgICogQmxvY2sgSUQJCQkoNSBieXRlcyAtIEFTQ0lJICJBZG9iZSIpCi0gICAqIFZlcnNpb24gTnVtYmVyCQkoMiBieXRlcyAtIGN1cnJlbnRseSAxMDApCi0gICAqIEZsYWdzMAkJCSgyIGJ5dGVzIC0gY3VycmVudGx5IDApCi0gICAqIEZsYWdzMQkJCSgyIGJ5dGVzIC0gY3VycmVudGx5IDApCi0gICAqIENvbG9yIHRyYW5zZm9ybQkJKDEgYnl0ZSkKKyAgICogTGVuZ3RoIG9mIEFQUDE0IGJsb2NrICAgICAgKDIgYnl0ZXMpCisgICAqIEJsb2NrIElEICAgICAgICAgICAgICAgICAgICg1IGJ5dGVzIC0gQVNDSUkgIkFkb2JlIikKKyAgICogVmVyc2lvbiBOdW1iZXIgICAgICAgICAgICAgKDIgYnl0ZXMgLSBjdXJyZW50bHkgMTAwKQorICAgKiBGbGFnczAgICAgICAgICAgICAgICAgICAgICAoMiBieXRlcyAtIGN1cnJlbnRseSAwKQorICAgKiBGbGFnczEgICAgICAgICAgICAgICAgICAgICAoMiBieXRlcyAtIGN1cnJlbnRseSAwKQorICAgKiBDb2xvciB0cmFuc2Zvcm0gICAgICAgICAgICAoMSBieXRlKQogICAgKgogICAgKiBBbHRob3VnaCBBZG9iZSBUTiA1MTE2IG1lbnRpb25zIFZlcnNpb24gPSAxMDEsIGFsbCB0aGUgQWRvYmUgZmlsZXMKICAgICogbm93IGluIGNpcmN1bGF0aW9uIHNlZW0gdG8gdXNlIFZlcnNpb24gPSAxMDAsIHNvIHRoYXQncyB3aGF0IHdlIHdyaXRlLgpAQCAtNDAzLDI4ICs0MDMsMjggQEAKICAgICogWUNiQ3IsIDIgaWYgaXQncyBZQ0NLLCAwIG90aGVyd2lzZS4gIEFkb2JlJ3MgZGVmaW5pdGlvbiBoYXMgdG8gZG8gd2l0aAogICAgKiB3aGV0aGVyIHRoZSBlbmNvZGVyIHBlcmZvcm1lZCBhIHRyYW5zZm9ybWF0aW9uLCB3aGljaCBpcyBwcmV0dHkgdXNlbGVzcy4KICAgICovCi0gIAorCiAgIGVtaXRfbWFya2VyKGNpbmZvLCBNX0FQUDE0KTsKLSAgCisKICAgZW1pdF8yYnl0ZXMoY2luZm8sIDIgKyA1ICsgMiArIDIgKyAyICsgMSk7IC8qIGxlbmd0aCAqLwogCi0gIGVtaXRfYnl0ZShjaW5mbywgMHg0MSk7CS8qIElkZW50aWZpZXI6IEFTQ0lJICJBZG9iZSIgKi8KKyAgZW1pdF9ieXRlKGNpbmZvLCAweDQxKTsgICAgICAgLyogSWRlbnRpZmllcjogQVNDSUkgIkFkb2JlIiAqLwogICBlbWl0X2J5dGUoY2luZm8sIDB4NjQpOwogICBlbWl0X2J5dGUoY2luZm8sIDB4NkYpOwogICBlbWl0X2J5dGUoY2luZm8sIDB4NjIpOwogICBlbWl0X2J5dGUoY2luZm8sIDB4NjUpOwotICBlbWl0XzJieXRlcyhjaW5mbywgMTAwKTsJLyogVmVyc2lvbiAqLwotICBlbWl0XzJieXRlcyhjaW5mbywgMCk7CS8qIEZsYWdzMCAqLwotICBlbWl0XzJieXRlcyhjaW5mbywgMCk7CS8qIEZsYWdzMSAqLworICBlbWl0XzJieXRlcyhjaW5mbywgMTAwKTsgICAgICAvKiBWZXJzaW9uICovCisgIGVtaXRfMmJ5dGVzKGNpbmZvLCAwKTsgICAgICAgIC8qIEZsYWdzMCAqLworICBlbWl0XzJieXRlcyhjaW5mbywgMCk7ICAgICAgICAvKiBGbGFnczEgKi8KICAgc3dpdGNoIChjaW5mby0+anBlZ19jb2xvcl9zcGFjZSkgewogICBjYXNlIEpDU19ZQ2JDcjoKLSAgICBlbWl0X2J5dGUoY2luZm8sIDEpOwkvKiBDb2xvciB0cmFuc2Zvcm0gPSAxICovCisgICAgZW1pdF9ieXRlKGNpbmZvLCAxKTsgICAgICAgIC8qIENvbG9yIHRyYW5zZm9ybSA9IDEgKi8KICAgICBicmVhazsKICAgY2FzZSBKQ1NfWUNDSzoKLSAgICBlbWl0X2J5dGUoY2luZm8sIDIpOwkvKiBDb2xvciB0cmFuc2Zvcm0gPSAyICovCisgICAgZW1pdF9ieXRlKGNpbmZvLCAyKTsgICAgICAgIC8qIENvbG9yIHRyYW5zZm9ybSA9IDIgKi8KICAgICBicmVhazsKICAgZGVmYXVsdDoKLSAgICBlbWl0X2J5dGUoY2luZm8sIDApOwkvKiBDb2xvciB0cmFuc2Zvcm0gPSAwICovCisgICAgZW1pdF9ieXRlKGNpbmZvLCAwKTsgICAgICAgIC8qIENvbG9yIHRyYW5zZm9ybSA9IDAgKi8KICAgICBicmVhazsKICAgfQogfQpAQCAtNDQyLDEyICs0NDIsMTIgQEAKIHdyaXRlX21hcmtlcl9oZWFkZXIgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgbWFya2VyLCB1bnNpZ25lZCBpbnQgZGF0YWxlbikKIC8qIEVtaXQgYW4gYXJiaXRyYXJ5IG1hcmtlciBoZWFkZXIgKi8KIHsKLSAgaWYgKGRhdGFsZW4gPiAodW5zaWduZWQgaW50KSA2NTUzMykJCS8qIHNhZmV0eSBjaGVjayAqLworICBpZiAoZGF0YWxlbiA+ICh1bnNpZ25lZCBpbnQpIDY1NTMzKSAgICAgICAgICAgLyogc2FmZXR5IGNoZWNrICovCiAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfTEVOR1RIKTsKIAogICBlbWl0X21hcmtlcihjaW5mbywgKEpQRUdfTUFSS0VSKSBtYXJrZXIpOwogCi0gIGVtaXRfMmJ5dGVzKGNpbmZvLCAoaW50KSAoZGF0YWxlbiArIDIpKTsJLyogdG90YWwgbGVuZ3RoICovCisgIGVtaXRfMmJ5dGVzKGNpbmZvLCAoaW50KSAoZGF0YWxlbiArIDIpKTsgICAgICAvKiB0b3RhbCBsZW5ndGggKi8KIH0KIAogTUVUSE9EREVGKHZvaWQpCkBAIC00NzQsMTIgKzQ3NCwxMiBAQAogewogICBteV9tYXJrZXJfcHRyIG1hcmtlciA9IChteV9tYXJrZXJfcHRyKSBjaW5mby0+bWFya2VyOwogCi0gIGVtaXRfbWFya2VyKGNpbmZvLCBNX1NPSSk7CS8qIGZpcnN0IHRoZSBTT0kgKi8KKyAgZW1pdF9tYXJrZXIoY2luZm8sIE1fU09JKTsgICAgLyogZmlyc3QgdGhlIFNPSSAqLwogCiAgIC8qIFNPSSBpcyBkZWZpbmVkIHRvIHJlc2V0IHJlc3RhcnQgaW50ZXJ2YWwgdG8gMCAqLwogICBtYXJrZXItPmxhc3RfcmVzdGFydF9pbnRlcnZhbCA9IDA7CiAKLSAgaWYgKGNpbmZvLT53cml0ZV9KRklGX2hlYWRlcikJLyogbmV4dCBhbiBvcHRpb25hbCBKRklGIEFQUDAgKi8KKyAgaWYgKGNpbmZvLT53cml0ZV9KRklGX2hlYWRlcikgLyogbmV4dCBhbiBvcHRpb25hbCBKRklGIEFQUDAgKi8KICAgICBlbWl0X2pmaWZfYXBwMChjaW5mbyk7CiAgIGlmIChjaW5mby0+d3JpdGVfQWRvYmVfbWFya2VyKSAvKiBuZXh0IGFuIG9wdGlvbmFsIEFkb2JlIEFQUDE0ICovCiAgICAgZW1pdF9hZG9iZV9hcHAxNChjaW5mbyk7CkBAIC01MDAsNyArNTAwLDcgQEAKICAgaW50IGNpLCBwcmVjOwogICBib29sZWFuIGlzX2Jhc2VsaW5lOwogICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOwotICAKKwogICAvKiBFbWl0IERRVCBmb3IgZWFjaCBxdWFudGl6YXRpb24gdGFibGUuCiAgICAqIE5vdGUgdGhhdCBlbWl0X2RxdCgpIHN1cHByZXNzZXMgYW55IGR1cGxpY2F0ZSB0YWJsZXMuCiAgICAqLwpAQCAtNTIwLDkgKzUyMCw5IEBACiAgIH0gZWxzZSB7CiAgICAgaXNfYmFzZWxpbmUgPSBUUlVFOwogICAgIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7Ci0JIGNpKyssIGNvbXBwdHIrKykgeworICAgICAgICAgY2krKywgY29tcHB0cisrKSB7CiAgICAgICBpZiAoY29tcHB0ci0+ZGNfdGJsX25vID4gMSB8fCBjb21wcHRyLT5hY190Ymxfbm8gPiAxKQotCWlzX2Jhc2VsaW5lID0gRkFMU0U7CisgICAgICAgIGlzX2Jhc2VsaW5lID0gRkFMU0U7CiAgICAgfQogICAgIGlmIChwcmVjICYmIGlzX2Jhc2VsaW5lKSB7CiAgICAgICBpc19iYXNlbGluZSA9IEZBTFNFOwpAQCAtNTM5LDExICs1MzksMTEgQEAKICAgICAgIGVtaXRfc29mKGNpbmZvLCBNX1NPRjkpOyAgLyogU09GIGNvZGUgZm9yIHNlcXVlbnRpYWwgYXJpdGhtZXRpYyAqLwogICB9IGVsc2UgewogICAgIGlmIChjaW5mby0+cHJvZ3Jlc3NpdmVfbW9kZSkKLSAgICAgIGVtaXRfc29mKGNpbmZvLCBNX1NPRjIpOwkvKiBTT0YgY29kZSBmb3IgcHJvZ3Jlc3NpdmUgSHVmZm1hbiAqLworICAgICAgZW1pdF9zb2YoY2luZm8sIE1fU09GMik7ICAvKiBTT0YgY29kZSBmb3IgcHJvZ3Jlc3NpdmUgSHVmZm1hbiAqLwogICAgIGVsc2UgaWYgKGlzX2Jhc2VsaW5lKQotICAgICAgZW1pdF9zb2YoY2luZm8sIE1fU09GMCk7CS8qIFNPRiBjb2RlIGZvciBiYXNlbGluZSBpbXBsZW1lbnRhdGlvbiAqLworICAgICAgZW1pdF9zb2YoY2luZm8sIE1fU09GMCk7ICAvKiBTT0YgY29kZSBmb3IgYmFzZWxpbmUgaW1wbGVtZW50YXRpb24gKi8KICAgICBlbHNlCi0gICAgICBlbWl0X3NvZihjaW5mbywgTV9TT0YxKTsJLyogU09GIGNvZGUgZm9yIG5vbi1iYXNlbGluZSBIdWZmbWFuIGZpbGUgKi8KKyAgICAgIGVtaXRfc29mKGNpbmZvLCBNX1NPRjEpOyAgLyogU09GIGNvZGUgZm9yIG5vbi1iYXNlbGluZSBIdWZmbWFuIGZpbGUgKi8KICAgfQogfQogCkBAIC01NzUsMTAgKzU3NSwxMCBAQAogICAgICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2ldOwogICAgICAgLyogREMgbmVlZHMgbm8gdGFibGUgZm9yIHJlZmluZW1lbnQgc2NhbiAqLwogICAgICAgaWYgKGNpbmZvLT5TcyA9PSAwICYmIGNpbmZvLT5BaCA9PSAwKQotCWVtaXRfZGh0KGNpbmZvLCBjb21wcHRyLT5kY190Ymxfbm8sIEZBTFNFKTsKKyAgICAgICAgZW1pdF9kaHQoY2luZm8sIGNvbXBwdHItPmRjX3RibF9ubywgRkFMU0UpOwogICAgICAgLyogQUMgbmVlZHMgbm8gdGFibGUgd2hlbiBub3QgcHJlc2VudCAqLwogICAgICAgaWYgKGNpbmZvLT5TZSkKLQllbWl0X2RodChjaW5mbywgY29tcHB0ci0+YWNfdGJsX25vLCBUUlVFKTsKKyAgICAgICAgZW1pdF9kaHQoY2luZm8sIGNvbXBwdHItPmFjX3RibF9ubywgVFJVRSk7CiAgICAgfQogICB9CiAKQEAgLTYyNyw5ICs2MjcsOSBAQAogICBpZiAoISBjaW5mby0+YXJpdGhfY29kZSkgewogICAgIGZvciAoaSA9IDA7IGkgPCBOVU1fSFVGRl9UQkxTOyBpKyspIHsKICAgICAgIGlmIChjaW5mby0+ZGNfaHVmZl90YmxfcHRyc1tpXSAhPSBOVUxMKQotCWVtaXRfZGh0KGNpbmZvLCBpLCBGQUxTRSk7CisgICAgICAgIGVtaXRfZGh0KGNpbmZvLCBpLCBGQUxTRSk7CiAgICAgICBpZiAoY2luZm8tPmFjX2h1ZmZfdGJsX3B0cnNbaV0gIT0gTlVMTCkKLQllbWl0X2RodChjaW5mbywgaSwgVFJVRSk7CisgICAgICAgIGVtaXRfZGh0KGNpbmZvLCBpLCBUUlVFKTsKICAgICB9CiAgIH0KIApAQCAtNjQ5LDcgKzY0OSw3IEBACiAgIC8qIENyZWF0ZSB0aGUgc3Vib2JqZWN0ICovCiAgIG1hcmtlciA9IChteV9tYXJrZXJfcHRyKQogICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCi0JCQkJU0laRU9GKG15X21hcmtlcl93cml0ZXIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0laRU9GKG15X21hcmtlcl93cml0ZXIpKTsKICAgY2luZm8tPm1hcmtlciA9IChzdHJ1Y3QganBlZ19tYXJrZXJfd3JpdGVyICopIG1hcmtlcjsKICAgLyogSW5pdGlhbGl6ZSBtZXRob2QgcG9pbnRlcnMgKi8KICAgbWFya2VyLT5wdWIud3JpdGVfZmlsZV9oZWFkZXIgPSB3cml0ZV9maWxlX2hlYWRlcjsKZGlmZiAtLWdpdCBhL2pjbWFzdGVyLmMgYi9qY21hc3Rlci5jCmluZGV4IGFjY2ZjNzAuLmNmNTFjMWUgMTAwNjQ0Ci0tLSBhL2pjbWFzdGVyLmMKKysrIGIvamNtYXN0ZXIuYwpAQCAtNCwxMyArNCwxMyBAQAogICogVGhpcyBmaWxlIHdhcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmU6CiAgKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5NywgVGhvbWFzIEcuIExhbmUuCiAgKiBNb2RpZmllZCAyMDAzLTIwMTAgYnkgR3VpZG8gVm9sbGJlZGluZy4KLSAqIE1vZGlmaWNhdGlvbnM6CisgKiBsaWJqcGVnLXR1cmJvIE1vZGlmaWNhdGlvbnM6CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEQuIFIuIENvbW1hbmRlci4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KICAqCiAgKiBUaGlzIGZpbGUgY29udGFpbnMgbWFzdGVyIGNvbnRyb2wgbG9naWMgZm9yIHRoZSBKUEVHIGNvbXByZXNzb3IuCiAgKiBUaGVzZSByb3V0aW5lcyBhcmUgY29uY2VybmVkIHdpdGggcGFyYW1ldGVyIHZhbGlkYXRpb24sIGluaXRpYWwgc2V0dXAsCi0gKiBhbmQgaW50ZXItcGFzcyBjb250cm9sIChkZXRlcm1pbmluZyB0aGUgbnVtYmVyIG9mIHBhc3NlcyBhbmQgdGhlIHdvcmsgCisgKiBhbmQgaW50ZXItcGFzcyBjb250cm9sIChkZXRlcm1pbmluZyB0aGUgbnVtYmVyIG9mIHBhc3NlcyBhbmQgdGhlIHdvcmsKICAqIHRvIGJlIGRvbmUgaW4gZWFjaCBwYXNzKS4KICAqLwogCkBAIC0yMywyMCArMjMsMjAgQEAKIC8qIFByaXZhdGUgc3RhdGUgKi8KIAogdHlwZWRlZiBlbnVtIHsKLQltYWluX3Bhc3MsCQkvKiBpbnB1dCBkYXRhLCBhbHNvIGRvIGZpcnN0IG91dHB1dCBzdGVwICovCi0JaHVmZl9vcHRfcGFzcywJCS8qIEh1ZmZtYW4gY29kZSBvcHRpbWl6YXRpb24gcGFzcyAqLwotCW91dHB1dF9wYXNzCQkvKiBkYXRhIG91dHB1dCBwYXNzICovCisgICAgICAgIG1haW5fcGFzcywgICAgICAgICAgICAgIC8qIGlucHV0IGRhdGEsIGFsc28gZG8gZmlyc3Qgb3V0cHV0IHN0ZXAgKi8KKyAgICAgICAgaHVmZl9vcHRfcGFzcywgICAgICAgICAgLyogSHVmZm1hbiBjb2RlIG9wdGltaXphdGlvbiBwYXNzICovCisgICAgICAgIG91dHB1dF9wYXNzICAgICAgICAgICAgIC8qIGRhdGEgb3V0cHV0IHBhc3MgKi8KIH0gY19wYXNzX3R5cGU7CiAKIHR5cGVkZWYgc3RydWN0IHsKLSAgc3RydWN0IGpwZWdfY29tcF9tYXN0ZXIgcHViOwkvKiBwdWJsaWMgZmllbGRzICovCisgIHN0cnVjdCBqcGVnX2NvbXBfbWFzdGVyIHB1YjsgIC8qIHB1YmxpYyBmaWVsZHMgKi8KIAotICBjX3Bhc3NfdHlwZSBwYXNzX3R5cGU7CS8qIHRoZSB0eXBlIG9mIHRoZSBjdXJyZW50IHBhc3MgKi8KKyAgY19wYXNzX3R5cGUgcGFzc190eXBlOyAgICAgICAgLyogdGhlIHR5cGUgb2YgdGhlIGN1cnJlbnQgcGFzcyAqLwogCi0gIGludCBwYXNzX251bWJlcjsJCS8qICMgb2YgcGFzc2VzIGNvbXBsZXRlZCAqLwotICBpbnQgdG90YWxfcGFzc2VzOwkJLyogdG90YWwgIyBvZiBwYXNzZXMgbmVlZGVkICovCisgIGludCBwYXNzX251bWJlcjsgICAgICAgICAgICAgIC8qICMgb2YgcGFzc2VzIGNvbXBsZXRlZCAqLworICBpbnQgdG90YWxfcGFzc2VzOyAgICAgICAgICAgICAvKiB0b3RhbCAjIG9mIHBhc3NlcyBuZWVkZWQgKi8KIAotICBpbnQgc2Nhbl9udW1iZXI7CQkvKiBjdXJyZW50IGluZGV4IGluIHNjYW5faW5mb1tdICovCisgIGludCBzY2FuX251bWJlcjsgICAgICAgICAgICAgIC8qIGN1cnJlbnQgaW5kZXggaW4gc2Nhbl9pbmZvW10gKi8KIH0gbXlfY29tcF9tYXN0ZXI7CiAKIHR5cGVkZWYgbXlfY29tcF9tYXN0ZXIgKiBteV9tYXN0ZXJfcHRyOwpAQCAtMTA1LDcgKzEwNSw3IEBACiAgIC8qIENoZWNrIHRoYXQgbnVtYmVyIG9mIGNvbXBvbmVudHMgd29uJ3QgZXhjZWVkIGludGVybmFsIGFycmF5IHNpemVzICovCiAgIGlmIChjaW5mby0+bnVtX2NvbXBvbmVudHMgPiBNQVhfQ09NUE9ORU5UUykKICAgICBFUlJFWElUMihjaW5mbywgSkVSUl9DT01QT05FTlRfQ09VTlQsIGNpbmZvLT5udW1fY29tcG9uZW50cywKLQkgICAgIE1BWF9DT01QT05FTlRTKTsKKyAgICAgICAgICAgICBNQVhfQ09NUE9ORU5UUyk7CiAKICAgLyogQ29tcHV0ZSBtYXhpbXVtIHNhbXBsaW5nIGZhY3RvcnM7IGNoZWNrIGZhY3RvciB2YWxpZGl0eSAqLwogICBjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IgPSAxOwpAQCAtMTEzLDEyICsxMTMsMTIgQEAKICAgZm9yIChjaSA9IDAsIGNvbXBwdHIgPSBjaW5mby0+Y29tcF9pbmZvOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsKICAgICAgICBjaSsrLCBjb21wcHRyKyspIHsKICAgICBpZiAoY29tcHB0ci0+aF9zYW1wX2ZhY3Rvcjw9MCB8fCBjb21wcHRyLT5oX3NhbXBfZmFjdG9yPk1BWF9TQU1QX0ZBQ1RPUiB8fAotCWNvbXBwdHItPnZfc2FtcF9mYWN0b3I8PTAgfHwgY29tcHB0ci0+dl9zYW1wX2ZhY3Rvcj5NQVhfU0FNUF9GQUNUT1IpCisgICAgICAgIGNvbXBwdHItPnZfc2FtcF9mYWN0b3I8PTAgfHwgY29tcHB0ci0+dl9zYW1wX2ZhY3Rvcj5NQVhfU0FNUF9GQUNUT1IpCiAgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9TQU1QTElORyk7CiAgICAgY2luZm8tPm1heF9oX3NhbXBfZmFjdG9yID0gTUFYKGNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvciwKLQkJCQkgICBjb21wcHRyLT5oX3NhbXBfZmFjdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHB0ci0+aF9zYW1wX2ZhY3Rvcik7CiAgICAgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yID0gTUFYKGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwKLQkJCQkgICBjb21wcHRyLT52X3NhbXBfZmFjdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHB0ci0+dl9zYW1wX2ZhY3Rvcik7CiAgIH0KIAogICAvKiBDb21wdXRlIGRpbWVuc2lvbnMgb2YgY29tcG9uZW50cyAqLwpAQCAtMTM1LDE3ICsxMzUsMTcgQEAKICAgICAvKiBTaXplIGluIERDVCBibG9ja3MgKi8KICAgICBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MgPSAoSkRJTUVOU0lPTikKICAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5fanBlZ193aWR0aCAqIChsb25nKSBjb21wcHRyLT5oX3NhbXBfZmFjdG9yLAotCQkgICAgKGxvbmcpIChjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IgKiBEQ1RTSVpFKSk7CisgICAgICAgICAgICAgICAgICAgIChsb25nKSAoY2luZm8tPm1heF9oX3NhbXBfZmFjdG9yICogRENUU0laRSkpOwogICAgIGNvbXBwdHItPmhlaWdodF9pbl9ibG9ja3MgPSAoSkRJTUVOU0lPTikKICAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5fanBlZ19oZWlnaHQgKiAobG9uZykgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciwKLQkJICAgIChsb25nKSAoY2luZm8tPm1heF92X3NhbXBfZmFjdG9yICogRENUU0laRSkpOworICAgICAgICAgICAgICAgICAgICAobG9uZykgKGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciAqIERDVFNJWkUpKTsKICAgICAvKiBTaXplIGluIHNhbXBsZXMgKi8KICAgICBjb21wcHRyLT5kb3duc2FtcGxlZF93aWR0aCA9IChKRElNRU5TSU9OKQogICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPl9qcGVnX3dpZHRoICogKGxvbmcpIGNvbXBwdHItPmhfc2FtcF9mYWN0b3IsCi0JCSAgICAobG9uZykgY2luZm8tPm1heF9oX3NhbXBfZmFjdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGNpbmZvLT5tYXhfaF9zYW1wX2ZhY3Rvcik7CiAgICAgY29tcHB0ci0+ZG93bnNhbXBsZWRfaGVpZ2h0ID0gKEpESU1FTlNJT04pCiAgICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+X2pwZWdfaGVpZ2h0ICogKGxvbmcpIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IsCi0JCSAgICAobG9uZykgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3Rvcik7CiAgICAgLyogTWFyayBjb21wb25lbnQgbmVlZGVkICh0aGlzIGZsYWcgaXNuJ3QgYWN0dWFsbHkgdXNlZCBmb3IgY29tcHJlc3Npb24pICovCiAgICAgY29tcHB0ci0+Y29tcG9uZW50X25lZWRlZCA9IFRSVUU7CiAgIH0KQEAgLTE1NSw3ICsxNTUsNyBAQAogICAgKi8KICAgY2luZm8tPnRvdGFsX2lNQ1Vfcm93cyA9IChKRElNRU5TSU9OKQogICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5fanBlZ19oZWlnaHQsCi0JCSAgKGxvbmcpIChjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IqRENUU0laRSkpOworICAgICAgICAgICAgICAgICAgKGxvbmcpIChjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IqRENUU0laRSkpOwogfQogCiAKQEAgLTE4OCwxNSArMTg4LDE1IEBACiAjaWZkZWYgQ19QUk9HUkVTU0lWRV9TVVBQT1JURUQKICAgICBjaW5mby0+cHJvZ3Jlc3NpdmVfbW9kZSA9IFRSVUU7CiAgICAgbGFzdF9iaXRwb3NfcHRyID0gJiBsYXN0X2JpdHBvc1swXVswXTsKLSAgICBmb3IgKGNpID0gMDsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7IGNpKyspIAorICAgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsgY2krKykKICAgICAgIGZvciAoY29lZmkgPSAwOyBjb2VmaSA8IERDVFNJWkUyOyBjb2VmaSsrKQotCSpsYXN0X2JpdHBvc19wdHIrKyA9IC0xOworICAgICAgICAqbGFzdF9iaXRwb3NfcHRyKysgPSAtMTsKICNlbHNlCiAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9OT1RfQ09NUElMRUQpOwogI2VuZGlmCiAgIH0gZWxzZSB7CiAgICAgY2luZm8tPnByb2dyZXNzaXZlX21vZGUgPSBGQUxTRTsKLSAgICBmb3IgKGNpID0gMDsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7IGNpKyspIAorICAgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsgY2krKykKICAgICAgIGNvbXBvbmVudF9zZW50W2NpXSA9IEZBTFNFOwogICB9CiAKQEAgLTIwOCwxMCArMjA4LDEwIEBACiAgICAgZm9yIChjaSA9IDA7IGNpIDwgbmNvbXBzOyBjaSsrKSB7CiAgICAgICB0aGlzaSA9IHNjYW5wdHItPmNvbXBvbmVudF9pbmRleFtjaV07CiAgICAgICBpZiAodGhpc2kgPCAwIHx8IHRoaXNpID49IGNpbmZvLT5udW1fY29tcG9uZW50cykKLQlFUlJFWElUMShjaW5mbywgSkVSUl9CQURfU0NBTl9TQ1JJUFQsIHNjYW5ubyk7CisgICAgICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9TQ0FOX1NDUklQVCwgc2Nhbm5vKTsKICAgICAgIC8qIENvbXBvbmVudHMgbXVzdCBhcHBlYXIgaW4gU09GIG9yZGVyIHdpdGhpbiBlYWNoIHNjYW4gKi8KICAgICAgIGlmIChjaSA+IDAgJiYgdGhpc2kgPD0gc2NhbnB0ci0+Y29tcG9uZW50X2luZGV4W2NpLTFdKQotCUVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9TQ0FOX1NDUklQVCwgc2Nhbm5vKTsKKyAgICAgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1NDQU5fU0NSSVBULCBzY2Fubm8pOwogICAgIH0KICAgICAvKiBWYWxpZGF0ZSBwcm9ncmVzc2lvbiBwYXJhbWV0ZXJzICovCiAgICAgU3MgPSBzY2FucHRyLT5TczsKQEAgLTIzMyw0MyArMjMzLDQzIEBACiAjZGVmaW5lIE1BWF9BSF9BTCAxMwogI2VuZGlmCiAgICAgICBpZiAoU3MgPCAwIHx8IFNzID49IERDVFNJWkUyIHx8IFNlIDwgU3MgfHwgU2UgPj0gRENUU0laRTIgfHwKLQkgIEFoIDwgMCB8fCBBaCA+IE1BWF9BSF9BTCB8fCBBbCA8IDAgfHwgQWwgPiBNQVhfQUhfQUwpCi0JRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1BST0dfU0NSSVBULCBzY2Fubm8pOworICAgICAgICAgIEFoIDwgMCB8fCBBaCA+IE1BWF9BSF9BTCB8fCBBbCA8IDAgfHwgQWwgPiBNQVhfQUhfQUwpCisgICAgICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9QUk9HX1NDUklQVCwgc2Nhbm5vKTsKICAgICAgIGlmIChTcyA9PSAwKSB7Ci0JaWYgKFNlICE9IDApCQkvKiBEQyBhbmQgQUMgdG9nZXRoZXIgbm90IE9LICovCi0JICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfUFJPR19TQ1JJUFQsIHNjYW5ubyk7CisgICAgICAgIGlmIChTZSAhPSAwKSAgICAgICAgICAgIC8qIERDIGFuZCBBQyB0b2dldGhlciBub3QgT0sgKi8KKyAgICAgICAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfUFJPR19TQ1JJUFQsIHNjYW5ubyk7CiAgICAgICB9IGVsc2UgewotCWlmIChuY29tcHMgIT0gMSkJLyogQUMgc2NhbnMgbXVzdCBiZSBmb3Igb25seSBvbmUgY29tcG9uZW50ICovCi0JICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfUFJPR19TQ1JJUFQsIHNjYW5ubyk7CisgICAgICAgIGlmIChuY29tcHMgIT0gMSkgICAgICAgIC8qIEFDIHNjYW5zIG11c3QgYmUgZm9yIG9ubHkgb25lIGNvbXBvbmVudCAqLworICAgICAgICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9QUk9HX1NDUklQVCwgc2Nhbm5vKTsKICAgICAgIH0KICAgICAgIGZvciAoY2kgPSAwOyBjaSA8IG5jb21wczsgY2krKykgewotCWxhc3RfYml0cG9zX3B0ciA9ICYgbGFzdF9iaXRwb3Nbc2NhbnB0ci0+Y29tcG9uZW50X2luZGV4W2NpXV1bMF07Ci0JaWYgKFNzICE9IDAgJiYgbGFzdF9iaXRwb3NfcHRyWzBdIDwgMCkgLyogQUMgd2l0aG91dCBwcmlvciBEQyBzY2FuICovCi0JICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfUFJPR19TQ1JJUFQsIHNjYW5ubyk7Ci0JZm9yIChjb2VmaSA9IFNzOyBjb2VmaSA8PSBTZTsgY29lZmkrKykgewotCSAgaWYgKGxhc3RfYml0cG9zX3B0cltjb2VmaV0gPCAwKSB7Ci0JICAgIC8qIGZpcnN0IHNjYW4gb2YgdGhpcyBjb2VmZmljaWVudCAqLwotCSAgICBpZiAoQWggIT0gMCkKLQkgICAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfUFJPR19TQ1JJUFQsIHNjYW5ubyk7Ci0JICB9IGVsc2UgewotCSAgICAvKiBub3QgZmlyc3Qgc2NhbiAqLwotCSAgICBpZiAoQWggIT0gbGFzdF9iaXRwb3NfcHRyW2NvZWZpXSB8fCBBbCAhPSBBaC0xKQotCSAgICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9QUk9HX1NDUklQVCwgc2Nhbm5vKTsKLQkgIH0KLQkgIGxhc3RfYml0cG9zX3B0cltjb2VmaV0gPSBBbDsKLQl9CisgICAgICAgIGxhc3RfYml0cG9zX3B0ciA9ICYgbGFzdF9iaXRwb3Nbc2NhbnB0ci0+Y29tcG9uZW50X2luZGV4W2NpXV1bMF07CisgICAgICAgIGlmIChTcyAhPSAwICYmIGxhc3RfYml0cG9zX3B0clswXSA8IDApIC8qIEFDIHdpdGhvdXQgcHJpb3IgREMgc2NhbiAqLworICAgICAgICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9QUk9HX1NDUklQVCwgc2Nhbm5vKTsKKyAgICAgICAgZm9yIChjb2VmaSA9IFNzOyBjb2VmaSA8PSBTZTsgY29lZmkrKykgeworICAgICAgICAgIGlmIChsYXN0X2JpdHBvc19wdHJbY29lZmldIDwgMCkgeworICAgICAgICAgICAgLyogZmlyc3Qgc2NhbiBvZiB0aGlzIGNvZWZmaWNpZW50ICovCisgICAgICAgICAgICBpZiAoQWggIT0gMCkKKyAgICAgICAgICAgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1BST0dfU0NSSVBULCBzY2Fubm8pOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKiBub3QgZmlyc3Qgc2NhbiAqLworICAgICAgICAgICAgaWYgKEFoICE9IGxhc3RfYml0cG9zX3B0cltjb2VmaV0gfHwgQWwgIT0gQWgtMSkKKyAgICAgICAgICAgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1BST0dfU0NSSVBULCBzY2Fubm8pOworICAgICAgICAgIH0KKyAgICAgICAgICBsYXN0X2JpdHBvc19wdHJbY29lZmldID0gQWw7CisgICAgICAgIH0KICAgICAgIH0KICNlbmRpZgogICAgIH0gZWxzZSB7CiAgICAgICAvKiBGb3Igc2VxdWVudGlhbCBKUEVHLCBhbGwgcHJvZ3Jlc3Npb24gcGFyYW1ldGVycyBtdXN0IGJlIHRoZXNlOiAqLwogICAgICAgaWYgKFNzICE9IDAgfHwgU2UgIT0gRENUU0laRTItMSB8fCBBaCAhPSAwIHx8IEFsICE9IDApCi0JRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1BST0dfU0NSSVBULCBzY2Fubm8pOworICAgICAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfUFJPR19TQ1JJUFQsIHNjYW5ubyk7CiAgICAgICAvKiBNYWtlIHN1cmUgY29tcG9uZW50cyBhcmUgbm90IHNlbnQgdHdpY2UgKi8KICAgICAgIGZvciAoY2kgPSAwOyBjaSA8IG5jb21wczsgY2krKykgewotCXRoaXNpID0gc2NhbnB0ci0+Y29tcG9uZW50X2luZGV4W2NpXTsKLQlpZiAoY29tcG9uZW50X3NlbnRbdGhpc2ldKQotCSAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1NDQU5fU0NSSVBULCBzY2Fubm8pOwotCWNvbXBvbmVudF9zZW50W3RoaXNpXSA9IFRSVUU7CisgICAgICAgIHRoaXNpID0gc2NhbnB0ci0+Y29tcG9uZW50X2luZGV4W2NpXTsKKyAgICAgICAgaWYgKGNvbXBvbmVudF9zZW50W3RoaXNpXSkKKyAgICAgICAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfU0NBTl9TQ1JJUFQsIHNjYW5ubyk7CisgICAgICAgIGNvbXBvbmVudF9zZW50W3RoaXNpXSA9IFRSVUU7CiAgICAgICB9CiAgICAgfQogICB9CkBAIC0yODQsMTMgKzI4NCwxMyBAQAogICAgICAqLwogICAgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsgY2krKykgewogICAgICAgaWYgKGxhc3RfYml0cG9zW2NpXVswXSA8IDApCi0JRVJSRVhJVChjaW5mbywgSkVSUl9NSVNTSU5HX0RBVEEpOworICAgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX01JU1NJTkdfREFUQSk7CiAgICAgfQogI2VuZGlmCiAgIH0gZWxzZSB7CiAgICAgZm9yIChjaSA9IDA7IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOyBjaSsrKSB7CiAgICAgICBpZiAoISBjb21wb25lbnRfc2VudFtjaV0pCi0JRVJSRVhJVChjaW5mbywgSkVSUl9NSVNTSU5HX0RBVEEpOworICAgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX01JU1NJTkdfREFUQSk7CiAgICAgfQogICB9CiB9CkBAIC0zMTMsNyArMzEzLDcgQEAKICAgICBjaW5mby0+Y29tcHNfaW5fc2NhbiA9IHNjYW5wdHItPmNvbXBzX2luX3NjYW47CiAgICAgZm9yIChjaSA9IDA7IGNpIDwgc2NhbnB0ci0+Y29tcHNfaW5fc2NhbjsgY2krKykgewogICAgICAgY2luZm8tPmN1cl9jb21wX2luZm9bY2ldID0KLQkmY2luZm8tPmNvbXBfaW5mb1tzY2FucHRyLT5jb21wb25lbnRfaW5kZXhbY2ldXTsKKyAgICAgICAgJmNpbmZvLT5jb21wX2luZm9bc2NhbnB0ci0+Y29tcG9uZW50X2luZGV4W2NpXV07CiAgICAgfQogICAgIGNpbmZvLT5TcyA9IHNjYW5wdHItPlNzOwogICAgIGNpbmZvLT5TZSA9IHNjYW5wdHItPlNlOwpAQCAtMzI2LDcgKzMyNiw3IEBACiAgICAgLyogUHJlcGFyZSBmb3Igc2luZ2xlIHNlcXVlbnRpYWwtSlBFRyBzY2FuIGNvbnRhaW5pbmcgYWxsIGNvbXBvbmVudHMgKi8KICAgICBpZiAoY2luZm8tPm51bV9jb21wb25lbnRzID4gTUFYX0NPTVBTX0lOX1NDQU4pCiAgICAgICBFUlJFWElUMihjaW5mbywgSkVSUl9DT01QT05FTlRfQ09VTlQsIGNpbmZvLT5udW1fY29tcG9uZW50cywKLQkgICAgICAgTUFYX0NPTVBTX0lOX1NDQU4pOworICAgICAgICAgICAgICAgTUFYX0NPTVBTX0lOX1NDQU4pOwogICAgIGNpbmZvLT5jb21wc19pbl9zY2FuID0gY2luZm8tPm51bV9jb21wb25lbnRzOwogICAgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsgY2krKykgewogICAgICAgY2luZm8tPmN1cl9jb21wX2luZm9bY2ldID0gJmNpbmZvLT5jb21wX2luZm9bY2ldOwpAQCAtMzQ2LDE2ICszNDYsMTYgQEAKIHsKICAgaW50IGNpLCBtY3VibGtzLCB0bXA7CiAgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7Ci0gIAorCiAgIGlmIChjaW5mby0+Y29tcHNfaW5fc2NhbiA9PSAxKSB7Ci0gICAgCisKICAgICAvKiBOb25pbnRlcmxlYXZlZCAoc2luZ2xlLWNvbXBvbmVudCkgc2NhbiAqLwogICAgIGNvbXBwdHIgPSBjaW5mby0+Y3VyX2NvbXBfaW5mb1swXTsKLSAgICAKKwogICAgIC8qIE92ZXJhbGwgaW1hZ2Ugc2l6ZSBpbiBNQ1VzICovCiAgICAgY2luZm8tPk1DVXNfcGVyX3JvdyA9IGNvbXBwdHItPndpZHRoX2luX2Jsb2NrczsKICAgICBjaW5mby0+TUNVX3Jvd3NfaW5fc2NhbiA9IGNvbXBwdHItPmhlaWdodF9pbl9ibG9ja3M7Ci0gICAgCisKICAgICAvKiBGb3Igbm9uaW50ZXJsZWF2ZWQgc2NhbiwgYWx3YXlzIG9uZSBibG9jayBwZXIgTUNVICovCiAgICAgY29tcHB0ci0+TUNVX3dpZHRoID0gMTsKICAgICBjb21wcHRyLT5NQ1VfaGVpZ2h0ID0gMTsKQEAgLTM2OCwyOCArMzY4LDI4IEBACiAgICAgdG1wID0gKGludCkgKGNvbXBwdHItPmhlaWdodF9pbl9ibG9ja3MgJSBjb21wcHRyLT52X3NhbXBfZmFjdG9yKTsKICAgICBpZiAodG1wID09IDApIHRtcCA9IGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7CiAgICAgY29tcHB0ci0+bGFzdF9yb3dfaGVpZ2h0ID0gdG1wOwotICAgIAorCiAgICAgLyogUHJlcGFyZSBhcnJheSBkZXNjcmliaW5nIE1DVSBjb21wb3NpdGlvbiAqLwogICAgIGNpbmZvLT5ibG9ja3NfaW5fTUNVID0gMTsKICAgICBjaW5mby0+TUNVX21lbWJlcnNoaXBbMF0gPSAwOwotICAgIAorCiAgIH0gZWxzZSB7Ci0gICAgCisKICAgICAvKiBJbnRlcmxlYXZlZCAobXVsdGktY29tcG9uZW50KSBzY2FuICovCiAgICAgaWYgKGNpbmZvLT5jb21wc19pbl9zY2FuIDw9IDAgfHwgY2luZm8tPmNvbXBzX2luX3NjYW4gPiBNQVhfQ09NUFNfSU5fU0NBTikKICAgICAgIEVSUkVYSVQyKGNpbmZvLCBKRVJSX0NPTVBPTkVOVF9DT1VOVCwgY2luZm8tPmNvbXBzX2luX3NjYW4sCi0JICAgICAgIE1BWF9DT01QU19JTl9TQ0FOKTsKLSAgICAKKyAgICAgICAgICAgICAgIE1BWF9DT01QU19JTl9TQ0FOKTsKKwogICAgIC8qIE92ZXJhbGwgaW1hZ2Ugc2l6ZSBpbiBNQ1VzICovCiAgICAgY2luZm8tPk1DVXNfcGVyX3JvdyA9IChKRElNRU5TSU9OKQogICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPl9qcGVnX3dpZHRoLAotCQkgICAgKGxvbmcpIChjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IqRENUU0laRSkpOworICAgICAgICAgICAgICAgICAgICAobG9uZykgKGNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvcipEQ1RTSVpFKSk7CiAgICAgY2luZm8tPk1DVV9yb3dzX2luX3NjYW4gPSAoSkRJTUVOU0lPTikKICAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5fanBlZ19oZWlnaHQsCi0JCSAgICAobG9uZykgKGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcipEQ1RTSVpFKSk7Ci0gICAgCisgICAgICAgICAgICAgICAgICAgIChsb25nKSAoY2luZm8tPm1heF92X3NhbXBfZmFjdG9yKkRDVFNJWkUpKTsKKwogICAgIGNpbmZvLT5ibG9ja3NfaW5fTUNVID0gMDsKLSAgICAKKwogICAgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5jb21wc19pbl9zY2FuOyBjaSsrKSB7CiAgICAgICBjb21wcHRyID0gY2luZm8tPmN1cl9jb21wX2luZm9bY2ldOwogICAgICAgLyogU2FtcGxpbmcgZmFjdG9ycyBnaXZlICMgb2YgYmxvY2tzIG9mIGNvbXBvbmVudCBpbiBlYWNoIE1DVSAqLwpAQCAtNDA3LDEyICs0MDcsMTIgQEAKICAgICAgIC8qIFByZXBhcmUgYXJyYXkgZGVzY3JpYmluZyBNQ1UgY29tcG9zaXRpb24gKi8KICAgICAgIG1jdWJsa3MgPSBjb21wcHRyLT5NQ1VfYmxvY2tzOwogICAgICAgaWYgKGNpbmZvLT5ibG9ja3NfaW5fTUNVICsgbWN1YmxrcyA+IENfTUFYX0JMT0NLU19JTl9NQ1UpCi0JRVJSRVhJVChjaW5mbywgSkVSUl9CQURfTUNVX1NJWkUpOworICAgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9NQ1VfU0laRSk7CiAgICAgICB3aGlsZSAobWN1Ymxrcy0tID4gMCkgewotCWNpbmZvLT5NQ1VfbWVtYmVyc2hpcFtjaW5mby0+YmxvY2tzX2luX01DVSsrXSA9IGNpOworICAgICAgICBjaW5mby0+TUNVX21lbWJlcnNoaXBbY2luZm8tPmJsb2Nrc19pbl9NQ1UrK10gPSBjaTsKICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgfQogCiAgIC8qIENvbnZlcnQgcmVzdGFydCBzcGVjaWZpZWQgaW4gcm93cyB0byBhY3R1YWwgTUNVIGNvdW50LiAqLwpAQCAtNDUyLDggKzQ1Miw4IEBACiAgICAgKCpjaW5mby0+ZmRjdC0+c3RhcnRfcGFzcykgKGNpbmZvKTsKICAgICAoKmNpbmZvLT5lbnRyb3B5LT5zdGFydF9wYXNzKSAoY2luZm8sIGNpbmZvLT5vcHRpbWl6ZV9jb2RpbmcpOwogICAgICgqY2luZm8tPmNvZWYtPnN0YXJ0X3Bhc3MpIChjaW5mbywKLQkJCQkobWFzdGVyLT50b3RhbF9wYXNzZXMgPiAxID8KLQkJCQkgSkJVRl9TQVZFX0FORF9QQVNTIDogSkJVRl9QQVNTX1RIUlUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hc3Rlci0+dG90YWxfcGFzc2VzID4gMSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKQlVGX1NBVkVfQU5EX1BBU1MgOiBKQlVGX1BBU1NfVEhSVSkpOwogICAgICgqY2luZm8tPm1haW4tPnN0YXJ0X3Bhc3MpIChjaW5mbywgSkJVRl9QQVNTX1RIUlUpOwogICAgIGlmIChjaW5mby0+b3B0aW1pemVfY29kaW5nKSB7CiAgICAgICAvKiBObyBpbW1lZGlhdGUgZGF0YSBvdXRwdXQ7IHBvc3Rwb25lIHdyaXRpbmcgZnJhbWUvc2NhbiBoZWFkZXJzICovCkBAIC01ODEsNyArNTgxLDcgQEAKIAogICBtYXN0ZXIgPSAobXlfbWFzdGVyX3B0cikKICAgICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCi0JCQkJICBTSVpFT0YobXlfY29tcF9tYXN0ZXIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSVpFT0YobXlfY29tcF9tYXN0ZXIpKTsKICAgY2luZm8tPm1hc3RlciA9IChzdHJ1Y3QganBlZ19jb21wX21hc3RlciAqKSBtYXN0ZXI7CiAgIG1hc3Rlci0+cHViLnByZXBhcmVfZm9yX3Bhc3MgPSBwcmVwYXJlX2Zvcl9wYXNzOwogICBtYXN0ZXItPnB1Yi5wYXNzX3N0YXJ0dXAgPSBwYXNzX3N0YXJ0dXA7CkBAIC02MDIsNyArNjAyLDcgQEAKICAgICBjaW5mby0+bnVtX3NjYW5zID0gMTsKICAgfQogCi0gIGlmIChjaW5mby0+cHJvZ3Jlc3NpdmVfbW9kZSAmJiAhY2luZm8tPmFyaXRoX2NvZGUpCS8qICBURU1QT1JBUlkgSEFDSyA/Pz8gKi8KKyAgaWYgKGNpbmZvLT5wcm9ncmVzc2l2ZV9tb2RlICYmICFjaW5mby0+YXJpdGhfY29kZSkgICAgLyogIFRFTVBPUkFSWSBIQUNLID8/PyAqLwogICAgIGNpbmZvLT5vcHRpbWl6ZV9jb2RpbmcgPSBUUlVFOyAvKiBhc3N1bWUgZGVmYXVsdCB0YWJsZXMgbm8gZ29vZCBmb3IgcHJvZ3Jlc3NpdmUgbW9kZSAqLwogCiAgIC8qIEluaXRpYWxpemUgbXkgcHJpdmF0ZSBzdGF0ZSAqLwpkaWZmIC0tZ2l0IGEvamNvbWFwaS5jIGIvamNvbWFwaS5jCmluZGV4IDliMWZhNzUuLjRjYTIwNDIgMTAwNjQ0Ci0tLSBhL2pjb21hcGkuYworKysgYi9qY29tYXBpLmMKQEAgLTcyLDggKzcyLDggQEAKICAgLyogTkI6IG1lbSBwb2ludGVyIGlzIE5VTEwgaWYgbWVtb3J5IG1nciBmYWlsZWQgdG8gaW5pdGlhbGl6ZS4gKi8KICAgaWYgKGNpbmZvLT5tZW0gIT0gTlVMTCkKICAgICAoKmNpbmZvLT5tZW0tPnNlbGZfZGVzdHJ1Y3QpIChjaW5mbyk7Ci0gIGNpbmZvLT5tZW0gPSBOVUxMOwkJLyogYmUgc2FmZSBpZiBqcGVnX2Rlc3Ryb3kgaXMgY2FsbGVkIHR3aWNlICovCi0gIGNpbmZvLT5nbG9iYWxfc3RhdGUgPSAwOwkvKiBtYXJrIGl0IGRlc3Ryb3llZCAqLworICBjaW5mby0+bWVtID0gTlVMTDsgICAgICAgICAgICAvKiBiZSBzYWZlIGlmIGpwZWdfZGVzdHJveSBpcyBjYWxsZWQgdHdpY2UgKi8KKyAgY2luZm8tPmdsb2JhbF9zdGF0ZSA9IDA7ICAgICAgLyogbWFyayBpdCBkZXN0cm95ZWQgKi8KIH0KIAogCkBAIC04OSw3ICs4OSw3IEBACiAKICAgdGJsID0gKEpRVUFOVF9UQkwgKikKICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoY2luZm8sIEpQT09MX1BFUk1BTkVOVCwgU0laRU9GKEpRVUFOVF9UQkwpKTsKLSAgdGJsLT5zZW50X3RhYmxlID0gRkFMU0U7CS8qIG1ha2Ugc3VyZSB0aGlzIGlzIGZhbHNlIGluIGFueSBuZXcgdGFibGUgKi8KKyAgdGJsLT5zZW50X3RhYmxlID0gRkFMU0U7ICAgICAgLyogbWFrZSBzdXJlIHRoaXMgaXMgZmFsc2UgaW4gYW55IG5ldyB0YWJsZSAqLwogICByZXR1cm4gdGJsOwogfQogCkBAIC0xMDEsNiArMTAxLDYgQEAKIAogICB0YmwgPSAoSkhVRkZfVEJMICopCiAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKGNpbmZvLCBKUE9PTF9QRVJNQU5FTlQsIFNJWkVPRihKSFVGRl9UQkwpKTsKLSAgdGJsLT5zZW50X3RhYmxlID0gRkFMU0U7CS8qIG1ha2Ugc3VyZSB0aGlzIGlzIGZhbHNlIGluIGFueSBuZXcgdGFibGUgKi8KKyAgdGJsLT5zZW50X3RhYmxlID0gRkFMU0U7ICAgICAgLyogbWFrZSBzdXJlIHRoaXMgaXMgZmFsc2UgaW4gYW55IG5ldyB0YWJsZSAqLwogICByZXR1cm4gdGJsOwogfQpkaWZmIC0tZ2l0IGEvamNvbmZpZy5oLmluIGIvamNvbmZpZy5oLmluCmluZGV4IDI3ZDRjYzkuLjc4MDIzYzEgMTAwNjQ0Ci0tLSBhL2pjb25maWcuaC5pbgorKysgYi9qY29uZmlnLmguaW4KQEAgLTEyLDcgKzEyLDEwIEBACiAvKiBTdXBwb3J0IGFyaXRobWV0aWMgZGVjb2RpbmcgKi8KICN1bmRlZiBEX0FSSVRIX0NPRElOR19TVVBQT1JURUQKIAotLyogQ29tcGlsZXIgc3VwcG9ydHMgZnVuY3Rpb24gcHJvdG90eXBlcy4gKi8KKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bG9jYWxlLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTE9DQUxFX0gKKworLyogRGVmaW5lIGlmIHlvdXIgY29tcGlsZXIgc3VwcG9ydHMgcHJvdG90eXBlcyAqLwogI3VuZGVmIEhBVkVfUFJPVE9UWVBFUwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGRlZi5oPiBoZWFkZXIgZmlsZS4gKi8KQEAgLTIxLDI1ICsyNCwzMSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRsaWIuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9TVERMSUJfSAogCi0vKiBDb21waWxlciBzdXBwb3J0cyAndW5zaWduZWQgY2hhcicuICovCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgdW5zaWduZWQgY2hhcicuICovCiAjdW5kZWYgSEFWRV9VTlNJR05FRF9DSEFSCiAKLS8qIENvbXBpbGVyIHN1cHBvcnRzICd1bnNpZ25lZCBzaG9ydCcuICovCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgdW5zaWduZWQgc2hvcnQnLiAqLwogI3VuZGVmIEhBVkVfVU5TSUdORURfU0hPUlQKIAotLyogQ29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCBwb2ludGVycyB0byB1bnNwZWNpZmllZCBzdHJ1Y3R1cmVzLiAqLworLyogQ29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCBwb2ludGVycyB0byB1bmRlZmluZWQgc3RydWN0dXJlcy4gKi8KICN1bmRlZiBJTkNPTVBMRVRFX1RZUEVTX0JST0tFTgogCi0vKiBDb21waWxlciBoYXMgPHN0cmluZ3MuaD4gcmF0aGVyIHRoYW4gc3RhbmRhcmQgPHN0cmluZy5oPi4gKi8KKy8qIFN1cHBvcnQgaW4tbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBtYW5hZ2VycyAqLworI3VuZGVmIE1FTV9TUkNEU1RfU1VQUE9SVEVECisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSBCU0QtbGlrZSBiemVybyBhbmQgYmNvcHkgaW4gPHN0cmluZ3MuaD4gcmF0aGVyIHRoYW4KKyAgIG1lbXNldC9tZW1jcHkgaW4gPHN0cmluZy5oPi4gKi8KICN1bmRlZiBORUVEX0JTRF9TVFJJTkdTCiAKLS8qIExpbmtlciByZXF1aXJlcyB0aGF0IGdsb2JhbCBuYW1lcyBiZSB1bmlxdWUgaW4gZmlyc3QgMTUgY2hhcmFjdGVycy4gKi8KKy8qIERlZmluZSBpZiBsaW5rZXIgcmVxdWlyZXMgdGhhdCB0aGUgZmlyc3QgMTUgY2hhcmFjdGVycyBvZiBnbG9iYWwgbmFtZXMgYmUKKyAgIHVuaXF1ZS4gKi8KICN1bmRlZiBORUVEX1NIT1JUX0VYVEVSTkFMX05BTUVTCiAKLS8qIE5lZWQgdG8gaW5jbHVkZSA8c3lzL3R5cGVzLmg+IGluIG9yZGVyIHRvIG9idGFpbiBzaXplX3QuICovCisvKiBEZWZpbmUgaWYgeW91IG5lZWQgdG8gaW5jbHVkZSA8c3lzL3R5cGVzLmg+IHRvIGdldCBzaXplX3QuICovCiAjdW5kZWYgTkVFRF9TWVNfVFlQRVNfSAogCi0vKiBCcm9rZW4gY29tcGlsZXIgc2hpZnRzIHNpZ25lZCB2YWx1ZXMgYXMgYW4gdW5zaWduZWQgc2hpZnQuICovCisvKiBEZWZpbmUgaWYgeW91ciAoYnJva2VuKSBjb21waWxlciBzaGlmdHMgc2lnbmVkIHZhbHVlcyBhcyBpZiB0aGV5IHdlcmUKKyAgIHVuc2lnbmVkLiAqLwogI3VuZGVmIFJJR0hUX1NISUZUX0lTX1VOU0lHTkVECiAKIC8qIFVzZSBhY2NlbGVyYXRlZCBTSU1EIHJvdXRpbmVzLiAqLwpkaWZmIC0tZ2l0IGEvamNvbmZpZy50eHQgYi9qY29uZmlnLnR4dAppbmRleCBiOTZkMzEyLi5iYTgyOWFkIDEwMDY0NAotLS0gYS9qY29uZmlnLnR4dAorKysgYi9qY29uZmlnLnR4dApAQCAtNDgsNyArNDgsNyBAQAogICogSWYgeW91J3JlIG5vdCBzdXJlLCBsZWF2aW5nIGl0IHVuZGVmaW5lZCB3aWxsIHdvcmsgYXQgc29tZSBjb3N0IGluIHNwZWVkLgogICogSWYgeW91IGRlZmluZWQgSEFWRV9VTlNJR05FRF9DSEFSIHRoZW4gdGhlIHNwZWVkIGRpZmZlcmVuY2UgaXMgbWluaW1hbC4KICAqLwotI3VuZGVmIENIQVJfSVNfVU5TSUdORUQKKyN1bmRlZiBfX0NIQVJfVU5TSUdORURfXwogCiAvKiBEZWZpbmUgdGhpcyBpZiB5b3VyIHN5c3RlbSBoYXMgYW4gQU5TSS1jb25mb3JtaW5nIDxzdGRkZWYuaD4gZmlsZS4KICAqLwpAQCAtOTQsMTAgKzk0LDEwIEBACiAvKiBEZWZpbmUgImJvb2xlYW4iIGFzIHVuc2lnbmVkIGNoYXIsIG5vdCBpbnQsIG9uIFdpbmRvd3Mgc3lzdGVtcy4KICAqLwogI2lmZGVmIF9XSU4zMgotI2lmbmRlZiBfX1JQQ05EUl9IX18JCS8qIGRvbid0IGNvbmZsaWN0IGlmIHJwY25kci5oIGFscmVhZHkgcmVhZCAqLworI2lmbmRlZiBfX1JQQ05EUl9IX18gICAgICAgICAgICAvKiBkb24ndCBjb25mbGljdCBpZiBycGNuZHIuaCBhbHJlYWR5IHJlYWQgKi8KIHR5cGVkZWYgdW5zaWduZWQgY2hhciBib29sZWFuOwogI2VuZGlmCi0jZGVmaW5lIEhBVkVfQk9PTEVBTgkJLyogcHJldmVudCBqbW9yZWNmZy5oIGZyb20gcmVkZWZpbmluZyBpdCAqLworI2RlZmluZSBIQVZFX0JPT0xFQU4gICAgICAgICAgICAvKiBwcmV2ZW50IGptb3JlY2ZnLmggZnJvbSByZWRlZmluaW5nIGl0ICovCiAjZW5kaWYKIAogCkBAIC0xMzAsMTEgKzEzMCwxMSBAQAogCiAvKiBUaGVzZSBkZWZpbmVzIGluZGljYXRlIHdoaWNoIGltYWdlIChub24tSlBFRykgZmlsZSBmb3JtYXRzIGFyZSBhbGxvd2VkLiAqLwogCi0jZGVmaW5lIEJNUF9TVVBQT1JURUQJCS8qIEJNUCBpbWFnZSBmaWxlIGZvcm1hdCAqLwotI2RlZmluZSBHSUZfU1VQUE9SVEVECQkvKiBHSUYgaW1hZ2UgZmlsZSBmb3JtYXQgKi8KLSNkZWZpbmUgUFBNX1NVUFBPUlRFRAkJLyogUEJNUExVUyBQUE0vUEdNIGltYWdlIGZpbGUgZm9ybWF0ICovCi0jdW5kZWYgUkxFX1NVUFBPUlRFRAkJLyogVXRhaCBSTEUgaW1hZ2UgZmlsZSBmb3JtYXQgKi8KLSNkZWZpbmUgVEFSR0FfU1VQUE9SVEVECQkvKiBUYXJnYSBpbWFnZSBmaWxlIGZvcm1hdCAqLworI2RlZmluZSBCTVBfU1VQUE9SVEVEICAgICAgICAgICAvKiBCTVAgaW1hZ2UgZmlsZSBmb3JtYXQgKi8KKyNkZWZpbmUgR0lGX1NVUFBPUlRFRCAgICAgICAgICAgLyogR0lGIGltYWdlIGZpbGUgZm9ybWF0ICovCisjZGVmaW5lIFBQTV9TVVBQT1JURUQgICAgICAgICAgIC8qIFBCTVBMVVMgUFBNL1BHTSBpbWFnZSBmaWxlIGZvcm1hdCAqLworI3VuZGVmIFJMRV9TVVBQT1JURUQgICAgICAgICAgICAvKiBVdGFoIFJMRSBpbWFnZSBmaWxlIGZvcm1hdCAqLworI2RlZmluZSBUQVJHQV9TVVBQT1JURUQgICAgICAgICAvKiBUYXJnYSBpbWFnZSBmaWxlIGZvcm1hdCAqLwogCiAvKiBEZWZpbmUgdGhpcyBpZiB5b3Ugd2FudCB0byBuYW1lIGJvdGggaW5wdXQgYW5kIG91dHB1dCBmaWxlcyBvbiB0aGUgY29tbWFuZAogICogbGluZSwgcmF0aGVyIHRoYW4gdXNpbmcgc3Rkb3V0IGFuZCBvcHRpb25hbGx5IHN0ZGluLiAgWW91IE1VU1QgZG8gdGhpcyBpZgpkaWZmIC0tZ2l0IGEvamNvbmZpZ2ludC5oLmluIGIvamNvbmZpZ2ludC5oLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMjE2ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9qY29uZmlnaW50LmguaW4KQEAgLTAsMCArMSwxMSBAQAorLyogbGlianBlZy10dXJibyBidWlsZCBudW1iZXIgKi8KKyN1bmRlZiBCVUlMRAorCisvKiBIb3cgdG8gb2J0YWluIGZ1bmN0aW9uIGlubGluaW5nLiAqLworI3VuZGVmIElOTElORQorCisvKiBEZWZpbmUgdG8gdGhlIGZ1bGwgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCisjdW5kZWYgUEFDS0FHRV9OQU1FCisKKy8qIFZlcnNpb24gbnVtYmVyIG9mIHBhY2thZ2UgKi8KKyN1bmRlZiBWRVJTSU9OCmRpZmYgLS1naXQgYS9qY3BhcmFtLmMgYi9qY3BhcmFtLmMKaW5kZXggMzIwNzUyMC4uMTgzMmQ5ZiAxMDA2NDQKLS0tIGEvamNwYXJhbS5jCisrKyBiL2pjcGFyYW0uYwpAQCAtNCw3ICs0LDcgQEAKICAqIFRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlOgogICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTgsIFRob21hcyBHLiBMYW5lLgogICogTW9kaWZpZWQgMjAwMy0yMDA4IGJ5IEd1aWRvIFZvbGxiZWRpbmcuCi0gKiBNb2RpZmljYXRpb25zOgorICogbGlianBlZy10dXJibyBNb2RpZmljYXRpb25zOgogICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTEsIEQuIFIuIENvbW1hbmRlci4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KICAqCkBAIC0yNCw4ICsyNCw4IEBACiAKIEdMT0JBTCh2b2lkKQoganBlZ19hZGRfcXVhbnRfdGFibGUgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgd2hpY2hfdGJsLAotCQkgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgKmJhc2ljX3RhYmxlLAotCQkgICAgICBpbnQgc2NhbGVfZmFjdG9yLCBib29sZWFuIGZvcmNlX2Jhc2VsaW5lKQorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCAqYmFzaWNfdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgaW50IHNjYWxlX2ZhY3RvciwgYm9vbGVhbiBmb3JjZV9iYXNlbGluZSkKIC8qIERlZmluZSBhIHF1YW50aXphdGlvbiB0YWJsZSBlcXVhbCB0byB0aGUgYmFzaWNfdGFibGUgdGltZXMKICAqIGEgc2NhbGUgZmFjdG9yIChnaXZlbiBhcyBhIHBlcmNlbnRhZ2UpLgogICogSWYgZm9yY2VfYmFzZWxpbmUgaXMgVFJVRSwgdGhlIGNvbXB1dGVkIHF1YW50aXphdGlvbiB0YWJsZSBlbnRyaWVzCkBAIC01NCw3ICs1NCw3IEBACiAgICAgaWYgKHRlbXAgPD0gMEwpIHRlbXAgPSAxTDsKICAgICBpZiAodGVtcCA+IDMyNzY3TCkgdGVtcCA9IDMyNzY3TDsgLyogbWF4IHF1YW50aXplciBuZWVkZWQgZm9yIDEyIGJpdHMgKi8KICAgICBpZiAoZm9yY2VfYmFzZWxpbmUgJiYgdGVtcCA+IDI1NUwpCi0gICAgICB0ZW1wID0gMjU1TDsJCS8qIGxpbWl0IHRvIGJhc2VsaW5lIHJhbmdlIGlmIHJlcXVlc3RlZCAqLworICAgICAgdGVtcCA9IDI1NUw7ICAgICAgICAgICAgICAvKiBsaW1pdCB0byBiYXNlbGluZSByYW5nZSBpZiByZXF1ZXN0ZWQgKi8KICAgICAoKnF0YmxwdHIpLT5xdWFudHZhbFtpXSA9IChVSU5UMTYpIHRlbXA7CiAgIH0KIApAQCAtOTksMTYgKzk5LDE2IEBACiB7CiAgIC8qIFNldCB1cCB0d28gcXVhbnRpemF0aW9uIHRhYmxlcyB1c2luZyB0aGUgc3BlY2lmaWVkIHNjYWxpbmcgKi8KICAganBlZ19hZGRfcXVhbnRfdGFibGUoY2luZm8sIDAsIHN0ZF9sdW1pbmFuY2VfcXVhbnRfdGJsLAotCQkgICAgICAgY2luZm8tPnFfc2NhbGVfZmFjdG9yWzBdLCBmb3JjZV9iYXNlbGluZSk7CisgICAgICAgICAgICAgICAgICAgICAgIGNpbmZvLT5xX3NjYWxlX2ZhY3RvclswXSwgZm9yY2VfYmFzZWxpbmUpOwogICBqcGVnX2FkZF9xdWFudF90YWJsZShjaW5mbywgMSwgc3RkX2Nocm9taW5hbmNlX3F1YW50X3RibCwKLQkJICAgICAgIGNpbmZvLT5xX3NjYWxlX2ZhY3RvclsxXSwgZm9yY2VfYmFzZWxpbmUpOworICAgICAgICAgICAgICAgICAgICAgICBjaW5mby0+cV9zY2FsZV9mYWN0b3JbMV0sIGZvcmNlX2Jhc2VsaW5lKTsKIH0KICNlbmRpZgogCiAKIEdMT0JBTCh2b2lkKQoganBlZ19zZXRfbGluZWFyX3F1YWxpdHkgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgc2NhbGVfZmFjdG9yLAotCQkJIGJvb2xlYW4gZm9yY2VfYmFzZWxpbmUpCisgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBmb3JjZV9iYXNlbGluZSkKIC8qIFNldCBvciBjaGFuZ2UgdGhlICdxdWFsaXR5JyAocXVhbnRpemF0aW9uKSBzZXR0aW5nLCB1c2luZyBkZWZhdWx0IHRhYmxlcwogICogYW5kIGEgc3RyYWlnaHQgcGVyY2VudGFnZS1zY2FsaW5nIHF1YWxpdHkgc2NhbGUuICBJbiBtb3N0IGNhc2VzIGl0J3MgYmV0dGVyCiAgKiB0byB1c2UganBlZ19zZXRfcXVhbGl0eSAoYmVsb3cpOyB0aGlzIGVudHJ5IHBvaW50IGlzIHByb3ZpZGVkIGZvcgpAQCAtMTE3LDkgKzExNyw5IEBACiB7CiAgIC8qIFNldCB1cCB0d28gcXVhbnRpemF0aW9uIHRhYmxlcyB1c2luZyB0aGUgc3BlY2lmaWVkIHNjYWxpbmcgKi8KICAganBlZ19hZGRfcXVhbnRfdGFibGUoY2luZm8sIDAsIHN0ZF9sdW1pbmFuY2VfcXVhbnRfdGJsLAotCQkgICAgICAgc2NhbGVfZmFjdG9yLCBmb3JjZV9iYXNlbGluZSk7CisgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlX2ZhY3RvciwgZm9yY2VfYmFzZWxpbmUpOwogICBqcGVnX2FkZF9xdWFudF90YWJsZShjaW5mbywgMSwgc3RkX2Nocm9taW5hbmNlX3F1YW50X3RibCwKLQkJICAgICAgIHNjYWxlX2ZhY3RvciwgZm9yY2VfYmFzZWxpbmUpOworICAgICAgICAgICAgICAgICAgICAgICBzY2FsZV9mYWN0b3IsIGZvcmNlX2Jhc2VsaW5lKTsKIH0KIAogCkBAIC0zMDEsMTIgKzMwMSwxMiBAQAogICBpZiAoY2luZm8tPmNvbXBfaW5mbyA9PSBOVUxMKQogICAgIGNpbmZvLT5jb21wX2luZm8gPSAoanBlZ19jb21wb25lbnRfaW5mbyAqKQogICAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9QRVJNQU5FTlQsCi0JCQkJICBNQVhfQ09NUE9ORU5UUyAqIFNJWkVPRihqcGVnX2NvbXBvbmVudF9pbmZvKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFYX0NPTVBPTkVOVFMgKiBTSVpFT0YoanBlZ19jb21wb25lbnRfaW5mbykpOwogCiAgIC8qIEluaXRpYWxpemUgZXZlcnl0aGluZyBub3QgZGVwZW5kZW50IG9uIHRoZSBjb2xvciBzcGFjZSAqLwogCiAjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA3MAotICBjaW5mby0+c2NhbGVfbnVtID0gMTsJCS8qIDE6MSBzY2FsaW5nICovCisgIGNpbmZvLT5zY2FsZV9udW0gPSAxOyAgICAgICAgIC8qIDE6MSBzY2FsaW5nICovCiAgIGNpbmZvLT5zY2FsZV9kZW5vbSA9IDE7CiAjZW5kaWYKICAgY2luZm8tPmRhdGFfcHJlY2lzaW9uID0gQklUU19JTl9KU0FNUExFOwpAQCAtMzcxLDggKzM3MSw4IEBACiAgICAqLwogICBjaW5mby0+SkZJRl9tYWpvcl92ZXJzaW9uID0gMTsgLyogRGVmYXVsdCBKRklGIHZlcnNpb24gPSAxLjAxICovCiAgIGNpbmZvLT5KRklGX21pbm9yX3ZlcnNpb24gPSAxOwotICBjaW5mby0+ZGVuc2l0eV91bml0ID0gMDsJLyogUGl4ZWwgc2l6ZSBpcyB1bmtub3duIGJ5IGRlZmF1bHQgKi8KLSAgY2luZm8tPlhfZGVuc2l0eSA9IDE7CQkvKiBQaXhlbCBhc3BlY3QgcmF0aW8gaXMgc3F1YXJlIGJ5IGRlZmF1bHQgKi8KKyAgY2luZm8tPmRlbnNpdHlfdW5pdCA9IDA7ICAgICAgLyogUGl4ZWwgc2l6ZSBpcyB1bmtub3duIGJ5IGRlZmF1bHQgKi8KKyAgY2luZm8tPlhfZGVuc2l0eSA9IDE7ICAgICAgICAgLyogUGl4ZWwgYXNwZWN0IHJhdGlvIGlzIHNxdWFyZSBieSBkZWZhdWx0ICovCiAgIGNpbmZvLT5ZX2RlbnNpdHkgPSAxOwogCiAgIC8qIENob29zZSBKUEVHIGNvbG9yc3BhY2UgYmFzZWQgb24gaW5wdXQgc3BhY2UsIHNldCBkZWZhdWx0cyBhY2NvcmRpbmdseSAqLwpAQCAtNDk4LDcgKzQ5OCw3IEBACiAgICAgY2luZm8tPm51bV9jb21wb25lbnRzID0gY2luZm8tPmlucHV0X2NvbXBvbmVudHM7CiAgICAgaWYgKGNpbmZvLT5udW1fY29tcG9uZW50cyA8IDEgfHwgY2luZm8tPm51bV9jb21wb25lbnRzID4gTUFYX0NPTVBPTkVOVFMpCiAgICAgICBFUlJFWElUMihjaW5mbywgSkVSUl9DT01QT05FTlRfQ09VTlQsIGNpbmZvLT5udW1fY29tcG9uZW50cywKLQkgICAgICAgTUFYX0NPTVBPTkVOVFMpOworICAgICAgICAgICAgICAgTUFYX0NPTVBPTkVOVFMpOwogICAgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsgY2krKykgewogICAgICAgU0VUX0NPTVAoY2ksIGNpLCAxLDEsIDAsIDAsMCk7CiAgICAgfQpAQCAtNTEzLDcgKzUxMyw3IEBACiAKIExPQ0FMKGpwZWdfc2Nhbl9pbmZvICopCiBmaWxsX2Ffc2NhbiAoanBlZ19zY2FuX2luZm8gKiBzY2FucHRyLCBpbnQgY2ksCi0JICAgICBpbnQgU3MsIGludCBTZSwgaW50IEFoLCBpbnQgQWwpCisgICAgICAgICAgICAgaW50IFNzLCBpbnQgU2UsIGludCBBaCwgaW50IEFsKQogLyogU3VwcG9ydCByb3V0aW5lOiBnZW5lcmF0ZSBvbmUgc2NhbiBmb3Igc3BlY2lmaWVkIGNvbXBvbmVudCAqLwogewogICBzY2FucHRyLT5jb21wc19pbl9zY2FuID0gMTsKQEAgLTUyOCw3ICs1MjgsNyBAQAogCiBMT0NBTChqcGVnX3NjYW5faW5mbyAqKQogZmlsbF9zY2FucyAoanBlZ19zY2FuX2luZm8gKiBzY2FucHRyLCBpbnQgbmNvbXBzLAotCSAgICBpbnQgU3MsIGludCBTZSwgaW50IEFoLCBpbnQgQWwpCisgICAgICAgICAgICBpbnQgU3MsIGludCBTZSwgaW50IEFoLCBpbnQgQWwpCiAvKiBTdXBwb3J0IHJvdXRpbmU6IGdlbmVyYXRlIG9uZSBzY2FuIGZvciBlYWNoIGNvbXBvbmVudCAqLwogewogICBpbnQgY2k7CkBAIC01OTEsOSArNTkxLDkgQEAKICAgfSBlbHNlIHsKICAgICAvKiBBbGwtcHVycG9zZSBzY3JpcHQgZm9yIG90aGVyIGNvbG9yIHNwYWNlcy4gKi8KICAgICBpZiAobmNvbXBzID4gTUFYX0NPTVBTX0lOX1NDQU4pCi0gICAgICBuc2NhbnMgPSA2ICogbmNvbXBzOwkvKiAyIERDICsgNCBBQyBzY2FucyBwZXIgY29tcG9uZW50ICovCisgICAgICBuc2NhbnMgPSA2ICogbmNvbXBzOyAgICAgIC8qIDIgREMgKyA0IEFDIHNjYW5zIHBlciBjb21wb25lbnQgKi8KICAgICBlbHNlCi0gICAgICBuc2NhbnMgPSAyICsgNCAqIG5jb21wczsJLyogMiBEQyBzY2FuczsgNCBBQyBzY2FucyBwZXIgY29tcG9uZW50ICovCisgICAgICBuc2NhbnMgPSAyICsgNCAqIG5jb21wczsgIC8qIDIgREMgc2NhbnM7IDQgQUMgc2NhbnMgcGVyIGNvbXBvbmVudCAqLwogICB9CiAKICAgLyogQWxsb2NhdGUgc3BhY2UgZm9yIHNjcmlwdC4KQEAgLTYwNyw3ICs2MDcsNyBAQAogICAgIGNpbmZvLT5zY3JpcHRfc3BhY2Vfc2l6ZSA9IE1BWChuc2NhbnMsIDEwKTsKICAgICBjaW5mby0+c2NyaXB0X3NwYWNlID0gKGpwZWdfc2Nhbl9pbmZvICopCiAgICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX1BFUk1BTkVOVCwKLQkJCWNpbmZvLT5zY3JpcHRfc3BhY2Vfc2l6ZSAqIFNJWkVPRihqcGVnX3NjYW5faW5mbykpOworICAgICAgICAgICAgICAgICAgICAgICAgY2luZm8tPnNjcmlwdF9zcGFjZV9zaXplICogU0laRU9GKGpwZWdfc2Nhbl9pbmZvKSk7CiAgIH0KICAgc2NhbnB0ciA9IGNpbmZvLT5zY3JpcHRfc3BhY2U7CiAgIGNpbmZvLT5zY2FuX2luZm8gPSBzY2FucHRyOwpkaWZmIC0tZ2l0IGEvamNwaHVmZi5jIGIvamNwaHVmZi5jCmluZGV4IDMxMDI4NzEuLmI3NjRiNjUgMTAwNjQ0Ci0tLSBhL2pjcGh1ZmYuYworKysgYi9qY3BodWZmLmMKQEAgLTE1LDcgKzE1LDcgQEAKICNkZWZpbmUgSlBFR19JTlRFUk5BTFMKICNpbmNsdWRlICJqaW5jbHVkZS5oIgogI2luY2x1ZGUgImpwZWdsaWIuaCIKLSNpbmNsdWRlICJqY2h1ZmYuaCIJCS8qIERlY2xhcmF0aW9ucyBzaGFyZWQgd2l0aCBqY2h1ZmYuYyAqLworI2luY2x1ZGUgImpjaHVmZi5oIiAgICAgICAgICAgICAvKiBEZWNsYXJhdGlvbnMgc2hhcmVkIHdpdGggamNodWZmLmMgKi8KIAogI2lmZGVmIENfUFJPR1JFU1NJVkVfU1VQUE9SVEVECiAKQEAgLTMwLDI0ICszMCwyNCBAQAogICAvKiBCaXQtbGV2ZWwgY29kaW5nIHN0YXR1cy4KICAgICogbmV4dF9vdXRwdXRfYnl0ZS9mcmVlX2luX2J1ZmZlciBhcmUgbG9jYWwgY29waWVzIG9mIGNpbmZvLT5kZXN0IGZpZWxkcy4KICAgICovCi0gIEpPQ1RFVCAqIG5leHRfb3V0cHV0X2J5dGU7CS8qID0+IG5leHQgYnl0ZSB0byB3cml0ZSBpbiBidWZmZXIgKi8KLSAgc2l6ZV90IGZyZWVfaW5fYnVmZmVyOwkvKiAjIG9mIGJ5dGUgc3BhY2VzIHJlbWFpbmluZyBpbiBidWZmZXIgKi8KLSAgSU5UMzIgcHV0X2J1ZmZlcjsJCS8qIGN1cnJlbnQgYml0LWFjY3VtdWxhdGlvbiBidWZmZXIgKi8KLSAgaW50IHB1dF9iaXRzOwkJCS8qICMgb2YgYml0cyBub3cgaW4gaXQgKi8KLSAgal9jb21wcmVzc19wdHIgY2luZm87CQkvKiBsaW5rIHRvIGNpbmZvIChuZWVkZWQgZm9yIGR1bXBfYnVmZmVyKSAqLworICBKT0NURVQgKiBuZXh0X291dHB1dF9ieXRlOyAgICAvKiA9PiBuZXh0IGJ5dGUgdG8gd3JpdGUgaW4gYnVmZmVyICovCisgIHNpemVfdCBmcmVlX2luX2J1ZmZlcjsgICAgICAgIC8qICMgb2YgYnl0ZSBzcGFjZXMgcmVtYWluaW5nIGluIGJ1ZmZlciAqLworICBJTlQzMiBwdXRfYnVmZmVyOyAgICAgICAgICAgICAvKiBjdXJyZW50IGJpdC1hY2N1bXVsYXRpb24gYnVmZmVyICovCisgIGludCBwdXRfYml0czsgICAgICAgICAgICAgICAgIC8qICMgb2YgYml0cyBub3cgaW4gaXQgKi8KKyAgal9jb21wcmVzc19wdHIgY2luZm87ICAgICAgICAgLyogbGluayB0byBjaW5mbyAobmVlZGVkIGZvciBkdW1wX2J1ZmZlcikgKi8KIAogICAvKiBDb2Rpbmcgc3RhdHVzIGZvciBEQyBjb21wb25lbnRzICovCiAgIGludCBsYXN0X2RjX3ZhbFtNQVhfQ09NUFNfSU5fU0NBTl07IC8qIGxhc3QgREMgY29lZiBmb3IgZWFjaCBjb21wb25lbnQgKi8KIAogICAvKiBDb2Rpbmcgc3RhdHVzIGZvciBBQyBjb21wb25lbnRzICovCi0gIGludCBhY190Ymxfbm87CQkvKiB0aGUgdGFibGUgbnVtYmVyIG9mIHRoZSBzaW5nbGUgY29tcG9uZW50ICovCi0gIHVuc2lnbmVkIGludCBFT0JSVU47CQkvKiBydW4gbGVuZ3RoIG9mIEVPQnMgKi8KLSAgdW5zaWduZWQgaW50IEJFOwkJLyogIyBvZiBidWZmZXJlZCBjb3JyZWN0aW9uIGJpdHMgYmVmb3JlIE1DVSAqLwotICBjaGFyICogYml0X2J1ZmZlcjsJCS8qIGJ1ZmZlciBmb3IgY29ycmVjdGlvbiBiaXRzICgxIHBlciBjaGFyKSAqLworICBpbnQgYWNfdGJsX25vOyAgICAgICAgICAgICAgICAvKiB0aGUgdGFibGUgbnVtYmVyIG9mIHRoZSBzaW5nbGUgY29tcG9uZW50ICovCisgIHVuc2lnbmVkIGludCBFT0JSVU47ICAgICAgICAgIC8qIHJ1biBsZW5ndGggb2YgRU9CcyAqLworICB1bnNpZ25lZCBpbnQgQkU7ICAgICAgICAgICAgICAvKiAjIG9mIGJ1ZmZlcmVkIGNvcnJlY3Rpb24gYml0cyBiZWZvcmUgTUNVICovCisgIGNoYXIgKiBiaXRfYnVmZmVyOyAgICAgICAgICAgIC8qIGJ1ZmZlciBmb3IgY29ycmVjdGlvbiBiaXRzICgxIHBlciBjaGFyKSAqLwogICAvKiBwYWNraW5nIGNvcnJlY3Rpb24gYml0cyB0aWdodGx5IHdvdWxkIHNhdmUgc29tZSBzcGFjZSBidXQgY29zdCB0aW1lLi4uICovCiAKLSAgdW5zaWduZWQgaW50IHJlc3RhcnRzX3RvX2dvOwkvKiBNQ1VzIGxlZnQgaW4gdGhpcyByZXN0YXJ0IGludGVydmFsICovCi0gIGludCBuZXh0X3Jlc3RhcnRfbnVtOwkJLyogbmV4dCByZXN0YXJ0IG51bWJlciB0byB3cml0ZSAoMC03KSAqLworICB1bnNpZ25lZCBpbnQgcmVzdGFydHNfdG9fZ287ICAvKiBNQ1VzIGxlZnQgaW4gdGhpcyByZXN0YXJ0IGludGVydmFsICovCisgIGludCBuZXh0X3Jlc3RhcnRfbnVtOyAgICAgICAgIC8qIG5leHQgcmVzdGFydCBudW1iZXIgdG8gd3JpdGUgKDAtNykgKi8KIAogICAvKiBQb2ludGVycyB0byBkZXJpdmVkIHRhYmxlcyAodGhlc2Ugd29ya3NwYWNlcyBoYXZlIGltYWdlIGxpZmVzcGFuKS4KICAgICogU2luY2UgYW55IG9uZSBzY2FuIGNvZGVzIG9ubHkgREMgb3Igb25seSBBQywgd2Ugb25seSBuZWVkIG9uZSBzZXQKQEAgLTY3LDcgKzY3LDcgQEAKICAqIFRoZSBtaW5pbXVtIHNhZmUgc2l6ZSBpcyA2NCBiaXRzLgogICovCiAKLSNkZWZpbmUgTUFYX0NPUlJfQklUUyAgMTAwMAkvKiBNYXggIyBvZiBjb3JyZWN0aW9uIGJpdHMgSSBjYW4gYnVmZmVyICovCisjZGVmaW5lIE1BWF9DT1JSX0JJVFMgIDEwMDAgICAgIC8qIE1heCAjIG9mIGNvcnJlY3Rpb24gYml0cyBJIGNhbiBidWZmZXIgKi8KIAogLyogSVJJR0hUX1NISUZUIGlzIGxpa2UgUklHSFRfU0hJRlQsIGJ1dCB3b3JrcyBvbiBpbnQgcmF0aGVyIHRoYW4gSU5UMzIuCiAgKiBXZSBhc3N1bWUgdGhhdCBpbnQgcmlnaHQgc2hpZnQgaXMgdW5zaWduZWQgaWYgSU5UMzIgcmlnaHQgc2hpZnQgaXMsCkBAIC03NSwyNSArNzUsMjUgQEAKICAqLwogCiAjaWZkZWYgUklHSFRfU0hJRlRfSVNfVU5TSUdORUQKLSNkZWZpbmUgSVNISUZUX1RFTVBTCWludCBpc2hpZnRfdGVtcDsKKyNkZWZpbmUgSVNISUZUX1RFTVBTICAgIGludCBpc2hpZnRfdGVtcDsKICNkZWZpbmUgSVJJR0hUX1NISUZUKHgsc2hmdCkgIFwKLQkoKGlzaGlmdF90ZW1wID0gKHgpKSA8IDAgPyBcCi0JIChpc2hpZnRfdGVtcCA+PiAoc2hmdCkpIHwgKCh+MCkgPDwgKDE2LShzaGZ0KSkpIDogXAotCSAoaXNoaWZ0X3RlbXAgPj4gKHNoZnQpKSkKKyAgICAgICAgKChpc2hpZnRfdGVtcCA9ICh4KSkgPCAwID8gXAorICAgICAgICAgKGlzaGlmdF90ZW1wID4+IChzaGZ0KSkgfCAoKH4wKSA8PCAoMTYtKHNoZnQpKSkgOiBcCisgICAgICAgICAoaXNoaWZ0X3RlbXAgPj4gKHNoZnQpKSkKICNlbHNlCiAjZGVmaW5lIElTSElGVF9URU1QUwotI2RlZmluZSBJUklHSFRfU0hJRlQoeCxzaGZ0KQkoKHgpID4+IChzaGZ0KSkKKyNkZWZpbmUgSVJJR0hUX1NISUZUKHgsc2hmdCkgICAgKCh4KSA+PiAoc2hmdCkpCiAjZW5kaWYKIAogLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KIE1FVEhPRERFRihib29sZWFuKSBlbmNvZGVfbWN1X0RDX2ZpcnN0IEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sCi0JCQkJCSAgICBKQkxPQ0tST1cgKk1DVV9kYXRhKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpCTE9DS1JPVyAqTUNVX2RhdGEpKTsKIE1FVEhPRERFRihib29sZWFuKSBlbmNvZGVfbWN1X0FDX2ZpcnN0IEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sCi0JCQkJCSAgICBKQkxPQ0tST1cgKk1DVV9kYXRhKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpCTE9DS1JPVyAqTUNVX2RhdGEpKTsKIE1FVEhPRERFRihib29sZWFuKSBlbmNvZGVfbWN1X0RDX3JlZmluZSBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLAotCQkJCQkgICAgIEpCTE9DS1JPVyAqTUNVX2RhdGEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpCTE9DS1JPVyAqTUNVX2RhdGEpKTsKIE1FVEhPRERFRihib29sZWFuKSBlbmNvZGVfbWN1X0FDX3JlZmluZSBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLAotCQkJCQkgICAgIEpCTE9DS1JPVyAqTUNVX2RhdGEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpCTE9DS1JPVyAqTUNVX2RhdGEpKTsKIE1FVEhPRERFRih2b2lkKSBmaW5pc2hfcGFzc19waHVmZiBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7CiBNRVRIT0RERUYodm9pZCkgZmluaXNoX3Bhc3NfZ2F0aGVyX3BodWZmIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8pKTsKIApAQCAtMTA0LDcgKzEwNCw3IEBACiAKIE1FVEhPRERFRih2b2lkKQogc3RhcnRfcGFzc19waHVmZiAoal9jb21wcmVzc19wdHIgY2luZm8sIGJvb2xlYW4gZ2F0aGVyX3N0YXRpc3RpY3MpCi17ICAKK3sKICAgcGh1ZmZfZW50cm9weV9wdHIgZW50cm9weSA9IChwaHVmZl9lbnRyb3B5X3B0cikgY2luZm8tPmVudHJvcHk7CiAgIGJvb2xlYW4gaXNfRENfYmFuZDsKICAgaW50IGNpLCB0Ymw7CkBAIC0xMzAsOSArMTMwLDkgQEAKICAgICAgIGVudHJvcHktPnB1Yi5lbmNvZGVfbWN1ID0gZW5jb2RlX21jdV9BQ19yZWZpbmU7CiAgICAgICAvKiBBQyByZWZpbmVtZW50IG5lZWRzIGEgY29ycmVjdGlvbiBiaXQgYnVmZmVyICovCiAgICAgICBpZiAoZW50cm9weS0+Yml0X2J1ZmZlciA9PSBOVUxMKQotCWVudHJvcHktPmJpdF9idWZmZXIgPSAoY2hhciAqKQotCSAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKLQkJCQkgICAgICBNQVhfQ09SUl9CSVRTICogU0laRU9GKGNoYXIpKTsKKyAgICAgICAgZW50cm9weS0+Yml0X2J1ZmZlciA9IChjaGFyICopCisgICAgICAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFYX0NPUlJfQklUUyAqIFNJWkVPRihjaGFyKSk7CiAgICAgfQogICB9CiAgIGlmIChnYXRoZXJfc3RhdGlzdGljcykKQEAgLTE0OSw4ICsxNDksOCBAQAogICAgIGVudHJvcHktPmxhc3RfZGNfdmFsW2NpXSA9IDA7CiAgICAgLyogR2V0IHRhYmxlIGluZGV4ICovCiAgICAgaWYgKGlzX0RDX2JhbmQpIHsKLSAgICAgIGlmIChjaW5mby0+QWggIT0gMCkJLyogREMgcmVmaW5lbWVudCBuZWVkcyBubyB0YWJsZSAqLwotCWNvbnRpbnVlOworICAgICAgaWYgKGNpbmZvLT5BaCAhPSAwKSAgICAgICAvKiBEQyByZWZpbmVtZW50IG5lZWRzIG5vIHRhYmxlICovCisgICAgICAgIGNvbnRpbnVlOwogICAgICAgdGJsID0gY29tcHB0ci0+ZGNfdGJsX25vOwogICAgIH0gZWxzZSB7CiAgICAgICBlbnRyb3B5LT5hY190Ymxfbm8gPSB0YmwgPSBjb21wcHRyLT5hY190Ymxfbm87CkBAIC0xNjMsMTUgKzE2MywxNSBAQAogICAgICAgLyogQWxsb2NhdGUgYW5kIHplcm8gdGhlIHN0YXRpc3RpY3MgdGFibGVzICovCiAgICAgICAvKiBOb3RlIHRoYXQganBlZ19nZW5fb3B0aW1hbF90YWJsZSBleHBlY3RzIDI1NyBlbnRyaWVzIGluIGVhY2ggdGFibGUhICovCiAgICAgICBpZiAoZW50cm9weS0+Y291bnRfcHRyc1t0YmxdID09IE5VTEwpCi0JZW50cm9weS0+Y291bnRfcHRyc1t0YmxdID0gKGxvbmcgKikKLQkgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCi0JCQkJICAgICAgMjU3ICogU0laRU9GKGxvbmcpKTsKKyAgICAgICAgZW50cm9weS0+Y291bnRfcHRyc1t0YmxdID0gKGxvbmcgKikKKyAgICAgICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTcgKiBTSVpFT0YobG9uZykpOwogICAgICAgTUVNWkVSTyhlbnRyb3B5LT5jb3VudF9wdHJzW3RibF0sIDI1NyAqIFNJWkVPRihsb25nKSk7CiAgICAgfSBlbHNlIHsKICAgICAgIC8qIENvbXB1dGUgZGVyaXZlZCB2YWx1ZXMgZm9yIEh1ZmZtYW4gdGFibGUgKi8KICAgICAgIC8qIFdlIG1heSBkbyB0aGlzIG1vcmUgdGhhbiBvbmNlIGZvciBhIHRhYmxlLCBidXQgaXQncyBub3QgZXhwZW5zaXZlICovCiAgICAgICBqcGVnX21ha2VfY19kZXJpdmVkX3RibChjaW5mbywgaXNfRENfYmFuZCwgdGJsLAotCQkJICAgICAgJiBlbnRyb3B5LT5kZXJpdmVkX3RibHNbdGJsXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIGVudHJvcHktPmRlcml2ZWRfdGJsc1t0YmxdKTsKICAgICB9CiAgIH0KIApAQCAtMTk2LDkgKzE5Niw5IEBACiAKIC8qIEVtaXQgYSBieXRlICovCiAjZGVmaW5lIGVtaXRfYnl0ZShlbnRyb3B5LHZhbCkgIFwKLQl7ICooZW50cm9weSktPm5leHRfb3V0cHV0X2J5dGUrKyA9IChKT0NURVQpICh2YWwpOyAgXAotCSAgaWYgKC0tKGVudHJvcHkpLT5mcmVlX2luX2J1ZmZlciA9PSAwKSAgXAotCSAgICBkdW1wX2J1ZmZlcihlbnRyb3B5KTsgfQorICAgICAgICB7ICooZW50cm9weSktPm5leHRfb3V0cHV0X2J5dGUrKyA9IChKT0NURVQpICh2YWwpOyAgXAorICAgICAgICAgIGlmICgtLShlbnRyb3B5KS0+ZnJlZV9pbl9idWZmZXIgPT0gMCkgIFwKKyAgICAgICAgICAgIGR1bXBfYnVmZmVyKGVudHJvcHkpOyB9CiAKIAogTE9DQUwodm9pZCkKQEAgLTIzNiwyMSArMjM2LDIxIEBACiAgICAgRVJSRVhJVChlbnRyb3B5LT5jaW5mbywgSkVSUl9IVUZGX01JU1NJTkdfQ09ERSk7CiAKICAgaWYgKGVudHJvcHktPmdhdGhlcl9zdGF0aXN0aWNzKQotICAgIHJldHVybjsJCQkvKiBkbyBub3RoaW5nIGlmIHdlJ3JlIG9ubHkgZ2V0dGluZyBzdGF0cyAqLworICAgIHJldHVybjsgICAgICAgICAgICAgICAgICAgICAvKiBkbyBub3RoaW5nIGlmIHdlJ3JlIG9ubHkgZ2V0dGluZyBzdGF0cyAqLwogCiAgIHB1dF9idWZmZXIgJj0gKCgoSU5UMzIpIDEpPDxzaXplKSAtIDE7IC8qIG1hc2sgb2ZmIGFueSBleHRyYSBiaXRzIGluIGNvZGUgKi8KLSAgCi0gIHB1dF9iaXRzICs9IHNpemU7CQkvKiBuZXcgbnVtYmVyIG9mIGJpdHMgaW4gYnVmZmVyICovCi0gIAorCisgIHB1dF9iaXRzICs9IHNpemU7ICAgICAgICAgICAgIC8qIG5ldyBudW1iZXIgb2YgYml0cyBpbiBidWZmZXIgKi8KKwogICBwdXRfYnVmZmVyIDw8PSAyNCAtIHB1dF9iaXRzOyAvKiBhbGlnbiBpbmNvbWluZyBiaXRzICovCiAKICAgcHV0X2J1ZmZlciB8PSBlbnRyb3B5LT5wdXRfYnVmZmVyOyAvKiBhbmQgbWVyZ2Ugd2l0aCBvbGQgYnVmZmVyIGNvbnRlbnRzICovCiAKICAgd2hpbGUgKHB1dF9iaXRzID49IDgpIHsKICAgICBpbnQgYyA9IChpbnQpICgocHV0X2J1ZmZlciA+PiAxNikgJiAweEZGKTsKLSAgICAKKwogICAgIGVtaXRfYnl0ZShlbnRyb3B5LCBjKTsKLSAgICBpZiAoYyA9PSAweEZGKSB7CQkvKiBuZWVkIHRvIHN0dWZmIGEgemVybyBieXRlPyAqLworICAgIGlmIChjID09IDB4RkYpIHsgICAgICAgICAgICAvKiBuZWVkIHRvIHN0dWZmIGEgemVybyBieXRlPyAqLwogICAgICAgZW1pdF9ieXRlKGVudHJvcHksIDApOwogICAgIH0KICAgICBwdXRfYnVmZmVyIDw8PSA4OwpAQCAtMjkzLDEwICsyOTMsMTAgQEAKIAogTE9DQUwodm9pZCkKIGVtaXRfYnVmZmVyZWRfYml0cyAocGh1ZmZfZW50cm9weV9wdHIgZW50cm9weSwgY2hhciAqIGJ1ZnN0YXJ0LAotCQkgICAgdW5zaWduZWQgaW50IG5iaXRzKQorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbmJpdHMpCiB7CiAgIGlmIChlbnRyb3B5LT5nYXRoZXJfc3RhdGlzdGljcykKLSAgICByZXR1cm47CQkJLyogbm8gcmVhbCB3b3JrICovCisgICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgICAgIC8qIG5vIHJlYWwgd29yayAqLwogCiAgIHdoaWxlIChuYml0cyA+IDApIHsKICAgICBlbWl0X2JpdHMoZW50cm9weSwgKHVuc2lnbmVkIGludCkgKCpidWZzdGFydCksIDEpOwpAQCAtMzE1LDcgKzMxNSw3IEBACiB7CiAgIHJlZ2lzdGVyIGludCB0ZW1wLCBuYml0czsKIAotICBpZiAoZW50cm9weS0+RU9CUlVOID4gMCkgewkvKiBpZiB0aGVyZSBpcyBhbnkgcGVuZGluZyBFT0JSVU4gKi8KKyAgaWYgKGVudHJvcHktPkVPQlJVTiA+IDApIHsgICAgLyogaWYgdGhlcmUgaXMgYW55IHBlbmRpbmcgRU9CUlVOICovCiAgICAgdGVtcCA9IGVudHJvcHktPkVPQlJVTjsKICAgICBuYml0cyA9IDA7CiAgICAgd2hpbGUgKCh0ZW1wID4+PSAxKSkKQEAgLTQwOSwxMiArNDA5LDEyIEBACiAgICAgLyogRW5jb2RlIHRoZSBEQyBjb2VmZmljaWVudCBkaWZmZXJlbmNlIHBlciBzZWN0aW9uIEcuMS4yLjEgKi8KICAgICB0ZW1wMiA9IHRlbXA7CiAgICAgaWYgKHRlbXAgPCAwKSB7Ci0gICAgICB0ZW1wID0gLXRlbXA7CQkvKiB0ZW1wIGlzIGFicyB2YWx1ZSBvZiBpbnB1dCAqLworICAgICAgdGVtcCA9IC10ZW1wOyAgICAgICAgICAgICAvKiB0ZW1wIGlzIGFicyB2YWx1ZSBvZiBpbnB1dCAqLwogICAgICAgLyogRm9yIGEgbmVnYXRpdmUgaW5wdXQsIHdhbnQgdGVtcDIgPSBiaXR3aXNlIGNvbXBsZW1lbnQgb2YgYWJzKGlucHV0KSAqLwogICAgICAgLyogVGhpcyBjb2RlIGFzc3VtZXMgd2UgYXJlIG9uIGEgdHdvJ3MgY29tcGxlbWVudCBtYWNoaW5lICovCiAgICAgICB0ZW1wMi0tOwogICAgIH0KLSAgICAKKwogICAgIC8qIEZpbmQgdGhlIG51bWJlciBvZiBiaXRzIG5lZWRlZCBmb3IgdGhlIG1hZ25pdHVkZSBvZiB0aGUgY29lZmZpY2llbnQgKi8KICAgICBuYml0cyA9IDA7CiAgICAgd2hpbGUgKHRlbXApIHsKQEAgLTQyNiwxMyArNDI2LDEzIEBACiAgICAgICovCiAgICAgaWYgKG5iaXRzID4gTUFYX0NPRUZfQklUUysxKQogICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfRENUX0NPRUYpOwotICAgIAorCiAgICAgLyogQ291bnQvZW1pdCB0aGUgSHVmZm1hbi1jb2RlZCBzeW1ib2wgZm9yIHRoZSBudW1iZXIgb2YgYml0cyAqLwogICAgIGVtaXRfc3ltYm9sKGVudHJvcHksIGNvbXBwdHItPmRjX3RibF9ubywgbmJpdHMpOwotICAgIAorCiAgICAgLyogRW1pdCB0aGF0IG51bWJlciBvZiBiaXRzIG9mIHRoZSB2YWx1ZSwgaWYgcG9zaXRpdmUsICovCiAgICAgLyogb3IgdGhlIGNvbXBsZW1lbnQgb2YgaXRzIG1hZ25pdHVkZSwgaWYgbmVnYXRpdmUuICovCi0gICAgaWYgKG5iaXRzKQkJCS8qIGVtaXRfYml0cyByZWplY3RzIGNhbGxzIHdpdGggc2l6ZSAwICovCisgICAgaWYgKG5iaXRzKSAgICAgICAgICAgICAgICAgIC8qIGVtaXRfYml0cyByZWplY3RzIGNhbGxzIHdpdGggc2l6ZSAwICovCiAgICAgICBlbWl0X2JpdHMoZW50cm9weSwgKHVuc2lnbmVkIGludCkgdGVtcDIsIG5iaXRzKTsKICAgfQogCkBAIC00ODEsOSArNDgxLDkgQEAKICAgYmxvY2sgPSBNQ1VfZGF0YVswXTsKIAogICAvKiBFbmNvZGUgdGhlIEFDIGNvZWZmaWNpZW50cyBwZXIgc2VjdGlvbiBHLjEuMi4yLCBmaWcuIEcuMyAqLwotICAKLSAgciA9IDA7CQkJLyogciA9IHJ1biBsZW5ndGggb2YgemVyb3MgKi8KLSAgIAorCisgIHIgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHIgPSBydW4gbGVuZ3RoIG9mIHplcm9zICovCisKICAgZm9yIChrID0gY2luZm8tPlNzOyBrIDw9IFNlOyBrKyspIHsKICAgICBpZiAoKHRlbXAgPSAoKmJsb2NrKVtqcGVnX25hdHVyYWxfb3JkZXJba11dKSA9PSAwKSB7CiAgICAgICByKys7CkBAIC00OTUsMTIgKzQ5NSwxMiBAQAogICAgICAqIGludGVyd292ZW4gd2l0aCBmaW5kaW5nIHRoZSBhYnMgdmFsdWUgKHRlbXApIGFuZCBvdXRwdXQgYml0cyAodGVtcDIpLgogICAgICAqLwogICAgIGlmICh0ZW1wIDwgMCkgewotICAgICAgdGVtcCA9IC10ZW1wOwkJLyogdGVtcCBpcyBhYnMgdmFsdWUgb2YgaW5wdXQgKi8KLSAgICAgIHRlbXAgPj49IEFsOwkJLyogYXBwbHkgdGhlIHBvaW50IHRyYW5zZm9ybSAqLworICAgICAgdGVtcCA9IC10ZW1wOyAgICAgICAgICAgICAvKiB0ZW1wIGlzIGFicyB2YWx1ZSBvZiBpbnB1dCAqLworICAgICAgdGVtcCA+Pj0gQWw7ICAgICAgICAgICAgICAvKiBhcHBseSB0aGUgcG9pbnQgdHJhbnNmb3JtICovCiAgICAgICAvKiBGb3IgYSBuZWdhdGl2ZSBjb2VmLCB3YW50IHRlbXAyID0gYml0d2lzZSBjb21wbGVtZW50IG9mIGFicyhjb2VmKSAqLwogICAgICAgdGVtcDIgPSB+dGVtcDsKICAgICB9IGVsc2UgewotICAgICAgdGVtcCA+Pj0gQWw7CQkvKiBhcHBseSB0aGUgcG9pbnQgdHJhbnNmb3JtICovCisgICAgICB0ZW1wID4+PSBBbDsgICAgICAgICAgICAgIC8qIGFwcGx5IHRoZSBwb2ludCB0cmFuc2Zvcm0gKi8KICAgICAgIHRlbXAyID0gdGVtcDsKICAgICB9CiAgICAgLyogV2F0Y2ggb3V0IGZvciBjYXNlIHRoYXQgbm9uemVybyBjb2VmIGlzIHplcm8gYWZ0ZXIgcG9pbnQgdHJhbnNmb3JtICovCkBAIC01MTksNyArNTE5LDcgQEAKICAgICB9CiAKICAgICAvKiBGaW5kIHRoZSBudW1iZXIgb2YgYml0cyBuZWVkZWQgZm9yIHRoZSBtYWduaXR1ZGUgb2YgdGhlIGNvZWZmaWNpZW50ICovCi0gICAgbmJpdHMgPSAxOwkJCS8qIHRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIDEgYml0ICovCisgICAgbmJpdHMgPSAxOyAgICAgICAgICAgICAgICAgIC8qIHRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIDEgYml0ICovCiAgICAgd2hpbGUgKCh0ZW1wID4+PSAxKSkKICAgICAgIG5iaXRzKys7CiAgICAgLyogQ2hlY2sgZm9yIG91dC1vZi1yYW5nZSBjb2VmZmljaWVudCB2YWx1ZXMgKi8KQEAgLTUzMywxMyArNTMzLDEzIEBACiAgICAgLyogb3IgdGhlIGNvbXBsZW1lbnQgb2YgaXRzIG1hZ25pdHVkZSwgaWYgbmVnYXRpdmUuICovCiAgICAgZW1pdF9iaXRzKGVudHJvcHksICh1bnNpZ25lZCBpbnQpIHRlbXAyLCBuYml0cyk7CiAKLSAgICByID0gMDsJCQkvKiByZXNldCB6ZXJvIHJ1biBsZW5ndGggKi8KKyAgICByID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyogcmVzZXQgemVybyBydW4gbGVuZ3RoICovCiAgIH0KIAotICBpZiAociA+IDApIHsJCQkvKiBJZiB0aGVyZSBhcmUgdHJhaWxpbmcgemVyb2VzLCAqLwotICAgIGVudHJvcHktPkVPQlJVTisrOwkJLyogY291bnQgYW4gRU9CICovCisgIGlmIChyID4gMCkgeyAgICAgICAgICAgICAgICAgIC8qIElmIHRoZXJlIGFyZSB0cmFpbGluZyB6ZXJvZXMsICovCisgICAgZW50cm9weS0+RU9CUlVOKys7ICAgICAgICAgIC8qIGNvdW50IGFuIEVPQiAqLwogICAgIGlmIChlbnRyb3B5LT5FT0JSVU4gPT0gMHg3RkZGKQotICAgICAgZW1pdF9lb2JydW4oZW50cm9weSk7CS8qIGZvcmNlIGl0IG91dCB0byBhdm9pZCBvdmVyZmxvdyAqLworICAgICAgZW1pdF9lb2JydW4oZW50cm9weSk7ICAgICAvKiBmb3JjZSBpdCBvdXQgdG8gYXZvaWQgb3ZlcmZsb3cgKi8KICAgfQogCiAgIGNpbmZvLT5kZXN0LT5uZXh0X291dHB1dF9ieXRlID0gZW50cm9weS0+bmV4dF9vdXRwdXRfYnl0ZTsKQEAgLTY0OCwxNyArNjQ4LDE3IEBACiAgICAgICogaW4gQywgd2Ugc2hpZnQgYWZ0ZXIgb2J0YWluaW5nIHRoZSBhYnNvbHV0ZSB2YWx1ZS4KICAgICAgKi8KICAgICBpZiAodGVtcCA8IDApCi0gICAgICB0ZW1wID0gLXRlbXA7CQkvKiB0ZW1wIGlzIGFicyB2YWx1ZSBvZiBpbnB1dCAqLwotICAgIHRlbXAgPj49IEFsOwkJLyogYXBwbHkgdGhlIHBvaW50IHRyYW5zZm9ybSAqLwotICAgIGFic3ZhbHVlc1trXSA9IHRlbXA7CS8qIHNhdmUgYWJzIHZhbHVlIGZvciBtYWluIHBhc3MgKi8KKyAgICAgIHRlbXAgPSAtdGVtcDsgICAgICAgICAgICAgLyogdGVtcCBpcyBhYnMgdmFsdWUgb2YgaW5wdXQgKi8KKyAgICB0ZW1wID4+PSBBbDsgICAgICAgICAgICAgICAgLyogYXBwbHkgdGhlIHBvaW50IHRyYW5zZm9ybSAqLworICAgIGFic3ZhbHVlc1trXSA9IHRlbXA7ICAgICAgICAvKiBzYXZlIGFicyB2YWx1ZSBmb3IgbWFpbiBwYXNzICovCiAgICAgaWYgKHRlbXAgPT0gMSkKLSAgICAgIEVPQiA9IGs7CQkJLyogRU9CID0gaW5kZXggb2YgbGFzdCBuZXdseS1ub256ZXJvIGNvZWYgKi8KKyAgICAgIEVPQiA9IGs7ICAgICAgICAgICAgICAgICAgLyogRU9CID0gaW5kZXggb2YgbGFzdCBuZXdseS1ub256ZXJvIGNvZWYgKi8KICAgfQogCiAgIC8qIEVuY29kZSB0aGUgQUMgY29lZmZpY2llbnRzIHBlciBzZWN0aW9uIEcuMS4yLjMsIGZpZy4gRy43ICovCi0gIAotICByID0gMDsJCQkvKiByID0gcnVuIGxlbmd0aCBvZiB6ZXJvcyAqLwotICBCUiA9IDA7CQkJLyogQlIgPSBjb3VudCBvZiBidWZmZXJlZCBiaXRzIGFkZGVkIG5vdyAqLworCisgIHIgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHIgPSBydW4gbGVuZ3RoIG9mIHplcm9zICovCisgIEJSID0gMDsgICAgICAgICAgICAgICAgICAgICAgIC8qIEJSID0gY291bnQgb2YgYnVmZmVyZWQgYml0cyBhZGRlZCBub3cgKi8KICAgQlJfYnVmZmVyID0gZW50cm9weS0+Yml0X2J1ZmZlciArIGVudHJvcHktPkJFOyAvKiBBcHBlbmQgYml0cyB0byBidWZmZXIgKi8KIAogICBmb3IgKGsgPSBjaW5mby0+U3M7IGsgPD0gU2U7IGsrKykgewpAQCAtNzA1LDEyICs3MDUsMTIgQEAKICAgICBlbWl0X2J1ZmZlcmVkX2JpdHMoZW50cm9weSwgQlJfYnVmZmVyLCBCUik7CiAgICAgQlJfYnVmZmVyID0gZW50cm9weS0+Yml0X2J1ZmZlcjsgLyogQkUgYml0cyBhcmUgZ29uZSBub3cgKi8KICAgICBCUiA9IDA7Ci0gICAgciA9IDA7CQkJLyogcmVzZXQgemVybyBydW4gbGVuZ3RoICovCisgICAgciA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIHJlc2V0IHplcm8gcnVuIGxlbmd0aCAqLwogICB9CiAKLSAgaWYgKHIgPiAwIHx8IEJSID4gMCkgewkvKiBJZiB0aGVyZSBhcmUgdHJhaWxpbmcgemVyb2VzLCAqLwotICAgIGVudHJvcHktPkVPQlJVTisrOwkJLyogY291bnQgYW4gRU9CICovCi0gICAgZW50cm9weS0+QkUgKz0gQlI7CQkvKiBjb25jYXQgbXkgY29ycmVjdGlvbiBiaXRzIHRvIG9sZGVyIG9uZXMgKi8KKyAgaWYgKHIgPiAwIHx8IEJSID4gMCkgeyAgICAgICAgLyogSWYgdGhlcmUgYXJlIHRyYWlsaW5nIHplcm9lcywgKi8KKyAgICBlbnRyb3B5LT5FT0JSVU4rKzsgICAgICAgICAgLyogY291bnQgYW4gRU9CICovCisgICAgZW50cm9weS0+QkUgKz0gQlI7ICAgICAgICAgIC8qIGNvbmNhdCBteSBjb3JyZWN0aW9uIGJpdHMgdG8gb2xkZXIgb25lcyAqLwogICAgIC8qIFdlIGZvcmNlIG91dCB0aGUgRU9CIGlmIHdlIHJpc2sgZWl0aGVyOgogICAgICAqIDEuIG92ZXJmbG93IG9mIHRoZSBFT0IgY291bnRlcjsKICAgICAgKiAyLiBvdmVyZmxvdyBvZiB0aGUgY29ycmVjdGlvbiBiaXQgYnVmZmVyIGR1cmluZyB0aGUgbmV4dCBNQ1UuCkBAIC03NDIsNyArNzQyLDcgQEAKIAogTUVUSE9EREVGKHZvaWQpCiBmaW5pc2hfcGFzc19waHVmZiAoal9jb21wcmVzc19wdHIgY2luZm8pCi17ICAgCit7CiAgIHBodWZmX2VudHJvcHlfcHRyIGVudHJvcHkgPSAocGh1ZmZfZW50cm9weV9wdHIpIGNpbmZvLT5lbnRyb3B5OwogCiAgIGVudHJvcHktPm5leHRfb3V0cHV0X2J5dGUgPSBjaW5mby0+ZGVzdC0+bmV4dF9vdXRwdXRfYnl0ZTsKQEAgLTc4NCw4ICs3ODQsOCBAQAogICBmb3IgKGNpID0gMDsgY2kgPCBjaW5mby0+Y29tcHNfaW5fc2NhbjsgY2krKykgewogICAgIGNvbXBwdHIgPSBjaW5mby0+Y3VyX2NvbXBfaW5mb1tjaV07CiAgICAgaWYgKGlzX0RDX2JhbmQpIHsKLSAgICAgIGlmIChjaW5mby0+QWggIT0gMCkJLyogREMgcmVmaW5lbWVudCBuZWVkcyBubyB0YWJsZSAqLwotCWNvbnRpbnVlOworICAgICAgaWYgKGNpbmZvLT5BaCAhPSAwKSAgICAgICAvKiBEQyByZWZpbmVtZW50IG5lZWRzIG5vIHRhYmxlICovCisgICAgICAgIGNvbnRpbnVlOwogICAgICAgdGJsID0gY29tcHB0ci0+ZGNfdGJsX25vOwogICAgIH0gZWxzZSB7CiAgICAgICB0YmwgPSBjb21wcHRyLT5hY190Ymxfbm87CkBAIC04MTYsNyArODE2LDcgQEAKIAogICBlbnRyb3B5ID0gKHBodWZmX2VudHJvcHlfcHRyKQogICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCi0JCQkJU0laRU9GKHBodWZmX2VudHJvcHlfZW5jb2RlcikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSVpFT0YocGh1ZmZfZW50cm9weV9lbmNvZGVyKSk7CiAgIGNpbmZvLT5lbnRyb3B5ID0gKHN0cnVjdCBqcGVnX2VudHJvcHlfZW5jb2RlciAqKSBlbnRyb3B5OwogICBlbnRyb3B5LT5wdWIuc3RhcnRfcGFzcyA9IHN0YXJ0X3Bhc3NfcGh1ZmY7CiAKQEAgLTgyNSw3ICs4MjUsNyBAQAogICAgIGVudHJvcHktPmRlcml2ZWRfdGJsc1tpXSA9IE5VTEw7CiAgICAgZW50cm9weS0+Y291bnRfcHRyc1tpXSA9IE5VTEw7CiAgIH0KLSAgZW50cm9weS0+Yml0X2J1ZmZlciA9IE5VTEw7CS8qIG5lZWRlZCBvbmx5IGluIEFDIHJlZmluZW1lbnQgc2NhbiAqLworICBlbnRyb3B5LT5iaXRfYnVmZmVyID0gTlVMTDsgICAvKiBuZWVkZWQgb25seSBpbiBBQyByZWZpbmVtZW50IHNjYW4gKi8KIH0KIAogI2VuZGlmIC8qIENfUFJPR1JFU1NJVkVfU1VQUE9SVEVEICovCmRpZmYgLS1naXQgYS9qY3ByZXBjdC5jIGIvamNwcmVwY3QuYwppbmRleCBmYTkzMzMzLi43ODVmZjg4IDEwMDY0NAotLS0gYS9qY3ByZXBjdC5jCisrKyBiL2pjcHJlcGN0LmMKQEAgLTU4LDEyICs1OCwxMiBAQAogICAgKi8KICAgSlNBTVBBUlJBWSBjb2xvcl9idWZbTUFYX0NPTVBPTkVOVFNdOwogCi0gIEpESU1FTlNJT04gcm93c190b19nbzsJLyogY291bnRzIHJvd3MgcmVtYWluaW5nIGluIHNvdXJjZSBpbWFnZSAqLwotICBpbnQgbmV4dF9idWZfcm93OwkJLyogaW5kZXggb2YgbmV4dCByb3cgdG8gc3RvcmUgaW4gY29sb3JfYnVmICovCisgIEpESU1FTlNJT04gcm93c190b19nbzsgICAgICAgIC8qIGNvdW50cyByb3dzIHJlbWFpbmluZyBpbiBzb3VyY2UgaW1hZ2UgKi8KKyAgaW50IG5leHRfYnVmX3JvdzsgICAgICAgICAgICAgLyogaW5kZXggb2YgbmV4dCByb3cgdG8gc3RvcmUgaW4gY29sb3JfYnVmICovCiAKLSNpZmRlZiBDT05URVhUX1JPV1NfU1VQUE9SVEVECS8qIG9ubHkgbmVlZGVkIGZvciBjb250ZXh0IGNhc2UgKi8KLSAgaW50IHRoaXNfcm93X2dyb3VwOwkJLyogc3RhcnRpbmcgcm93IGluZGV4IG9mIGdyb3VwIHRvIHByb2Nlc3MgKi8KLSAgaW50IG5leHRfYnVmX3N0b3A7CQkvKiBkb3duc2FtcGxlIHdoZW4gd2UgcmVhY2ggdGhpcyBpbmRleCAqLworI2lmZGVmIENPTlRFWFRfUk9XU19TVVBQT1JURUQgICAvKiBvbmx5IG5lZWRlZCBmb3IgY29udGV4dCBjYXNlICovCisgIGludCB0aGlzX3Jvd19ncm91cDsgICAgICAgICAgIC8qIHN0YXJ0aW5nIHJvdyBpbmRleCBvZiBncm91cCB0byBwcm9jZXNzICovCisgIGludCBuZXh0X2J1Zl9zdG9wOyAgICAgICAgICAgIC8qIGRvd25zYW1wbGUgd2hlbiB3ZSByZWFjaCB0aGlzIGluZGV4ICovCiAjZW5kaWYKIH0gbXlfcHJlcF9jb250cm9sbGVyOwogCkBAIC0xMDQsMTMgKzEwNCwxMyBAQAogCiBMT0NBTCh2b2lkKQogZXhwYW5kX2JvdHRvbV9lZGdlIChKU0FNUEFSUkFZIGltYWdlX2RhdGEsIEpESU1FTlNJT04gbnVtX2NvbHMsCi0JCSAgICBpbnQgaW5wdXRfcm93cywgaW50IG91dHB1dF9yb3dzKQorICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRfcm93cywgaW50IG91dHB1dF9yb3dzKQogewogICByZWdpc3RlciBpbnQgcm93OwogCiAgIGZvciAocm93ID0gaW5wdXRfcm93czsgcm93IDwgb3V0cHV0X3Jvd3M7IHJvdysrKSB7CiAgICAgamNvcHlfc2FtcGxlX3Jvd3MoaW1hZ2VfZGF0YSwgaW5wdXRfcm93cy0xLCBpbWFnZV9kYXRhLCByb3csCi0JCSAgICAgIDEsIG51bV9jb2xzKTsKKyAgICAgICAgICAgICAgICAgICAgICAxLCBudW1fY29scyk7CiAgIH0KIH0KIApAQCAtMTI2LDEwICsxMjYsMTAgQEAKIAogTUVUSE9EREVGKHZvaWQpCiBwcmVfcHJvY2Vzc19kYXRhIChqX2NvbXByZXNzX3B0ciBjaW5mbywKLQkJICBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiAqaW5fcm93X2N0ciwKLQkJICBKRElNRU5TSU9OIGluX3Jvd3NfYXZhaWwsCi0JCSAgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OICpvdXRfcm93X2dyb3VwX2N0ciwKLQkJICBKRElNRU5TSU9OIG91dF9yb3dfZ3JvdXBzX2F2YWlsKQorICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpESU1FTlNJT04gKmluX3Jvd19jdHIsCisgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGluX3Jvd3NfYXZhaWwsCisgICAgICAgICAgICAgICAgICBKU0FNUElNQUdFIG91dHB1dF9idWYsIEpESU1FTlNJT04gKm91dF9yb3dfZ3JvdXBfY3RyLAorICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRfcm93X2dyb3Vwc19hdmFpbCkKIHsKICAgbXlfcHJlcF9wdHIgcHJlcCA9IChteV9wcmVwX3B0cikgY2luZm8tPnByZXA7CiAgIGludCBudW1yb3dzLCBjaTsKQEAgLTEzNywzMiArMTM3LDMyIEBACiAgIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyOwogCiAgIHdoaWxlICgqaW5fcm93X2N0ciA8IGluX3Jvd3NfYXZhaWwgJiYKLQkgKm91dF9yb3dfZ3JvdXBfY3RyIDwgb3V0X3Jvd19ncm91cHNfYXZhaWwpIHsKKyAgICAgICAgICpvdXRfcm93X2dyb3VwX2N0ciA8IG91dF9yb3dfZ3JvdXBzX2F2YWlsKSB7CiAgICAgLyogRG8gY29sb3IgY29udmVyc2lvbiB0byBmaWxsIHRoZSBjb252ZXJzaW9uIGJ1ZmZlci4gKi8KICAgICBpbnJvd3MgPSBpbl9yb3dzX2F2YWlsIC0gKmluX3Jvd19jdHI7CiAgICAgbnVtcm93cyA9IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciAtIHByZXAtPm5leHRfYnVmX3JvdzsKICAgICBudW1yb3dzID0gKGludCkgTUlOKChKRElNRU5TSU9OKSBudW1yb3dzLCBpbnJvd3MpOwogICAgICgqY2luZm8tPmNjb252ZXJ0LT5jb2xvcl9jb252ZXJ0KSAoY2luZm8sIGlucHV0X2J1ZiArICppbl9yb3dfY3RyLAotCQkJCSAgICAgICBwcmVwLT5jb2xvcl9idWYsCi0JCQkJICAgICAgIChKRElNRU5TSU9OKSBwcmVwLT5uZXh0X2J1Zl9yb3csCi0JCQkJICAgICAgIG51bXJvd3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlcC0+Y29sb3JfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEpESU1FTlNJT04pIHByZXAtPm5leHRfYnVmX3JvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bXJvd3MpOwogICAgICppbl9yb3dfY3RyICs9IG51bXJvd3M7CiAgICAgcHJlcC0+bmV4dF9idWZfcm93ICs9IG51bXJvd3M7CiAgICAgcHJlcC0+cm93c190b19nbyAtPSBudW1yb3dzOwogICAgIC8qIElmIGF0IGJvdHRvbSBvZiBpbWFnZSwgcGFkIHRvIGZpbGwgdGhlIGNvbnZlcnNpb24gYnVmZmVyLiAqLwogICAgIGlmIChwcmVwLT5yb3dzX3RvX2dvID09IDAgJiYKLQlwcmVwLT5uZXh0X2J1Zl9yb3cgPCBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IpIHsKKyAgICAgICAgcHJlcC0+bmV4dF9idWZfcm93IDwgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yKSB7CiAgICAgICBmb3IgKGNpID0gMDsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7IGNpKyspIHsKLQlleHBhbmRfYm90dG9tX2VkZ2UocHJlcC0+Y29sb3JfYnVmW2NpXSwgY2luZm8tPmltYWdlX3dpZHRoLAotCQkJICAgcHJlcC0+bmV4dF9idWZfcm93LCBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IpOworICAgICAgICBleHBhbmRfYm90dG9tX2VkZ2UocHJlcC0+Y29sb3JfYnVmW2NpXSwgY2luZm8tPmltYWdlX3dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlcC0+bmV4dF9idWZfcm93LCBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IpOwogICAgICAgfQogICAgICAgcHJlcC0+bmV4dF9idWZfcm93ID0gY2luZm8tPm1heF92X3NhbXBfZmFjdG9yOwogICAgIH0KICAgICAvKiBJZiB3ZSd2ZSBmaWxsZWQgdGhlIGNvbnZlcnNpb24gYnVmZmVyLCBlbXB0eSBpdC4gKi8KICAgICBpZiAocHJlcC0+bmV4dF9idWZfcm93ID09IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcikgewogICAgICAgKCpjaW5mby0+ZG93bnNhbXBsZS0+ZG93bnNhbXBsZSkgKGNpbmZvLAotCQkJCQlwcmVwLT5jb2xvcl9idWYsIChKRElNRU5TSU9OKSAwLAotCQkJCQlvdXRwdXRfYnVmLCAqb3V0X3Jvd19ncm91cF9jdHIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXAtPmNvbG9yX2J1ZiwgKEpESU1FTlNJT04pIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2J1ZiwgKm91dF9yb3dfZ3JvdXBfY3RyKTsKICAgICAgIHByZXAtPm5leHRfYnVmX3JvdyA9IDA7CiAgICAgICAoKm91dF9yb3dfZ3JvdXBfY3RyKSsrOwogICAgIH0KQEAgLTE3MCwxNiArMTcwLDE2IEBACiAgICAgICogTm90ZSB3ZSBhc3N1bWUgdGhlIGNhbGxlciBpcyBwcm92aWRpbmcgYSBvbmUtaU1DVS1oZWlnaHQgb3V0cHV0IGJ1ZmZlciEKICAgICAgKi8KICAgICBpZiAocHJlcC0+cm93c190b19nbyA9PSAwICYmCi0JKm91dF9yb3dfZ3JvdXBfY3RyIDwgb3V0X3Jvd19ncm91cHNfYXZhaWwpIHsKKyAgICAgICAgKm91dF9yb3dfZ3JvdXBfY3RyIDwgb3V0X3Jvd19ncm91cHNfYXZhaWwpIHsKICAgICAgIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7Ci0JICAgY2krKywgY29tcHB0cisrKSB7Ci0JZXhwYW5kX2JvdHRvbV9lZGdlKG91dHB1dF9idWZbY2ldLAotCQkJICAgY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzICogRENUU0laRSwKLQkJCSAgIChpbnQpICgqb3V0X3Jvd19ncm91cF9jdHIgKiBjb21wcHRyLT52X3NhbXBfZmFjdG9yKSwKLQkJCSAgIChpbnQpIChvdXRfcm93X2dyb3Vwc19hdmFpbCAqIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IpKTsKKyAgICAgICAgICAgY2krKywgY29tcHB0cisrKSB7CisgICAgICAgIGV4cGFuZF9ib3R0b21fZWRnZShvdXRwdXRfYnVmW2NpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcyAqIERDVFNJWkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSAoKm91dF9yb3dfZ3JvdXBfY3RyICogY29tcHB0ci0+dl9zYW1wX2ZhY3RvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSAob3V0X3Jvd19ncm91cHNfYXZhaWwgKiBjb21wcHRyLT52X3NhbXBfZmFjdG9yKSk7CiAgICAgICB9CiAgICAgICAqb3V0X3Jvd19ncm91cF9jdHIgPSBvdXRfcm93X2dyb3Vwc19hdmFpbDsKLSAgICAgIGJyZWFrOwkJCS8qIGNhbiBleGl0IG91dGVyIGxvb3Agd2l0aG91dCB0ZXN0ICovCisgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgIC8qIGNhbiBleGl0IG91dGVyIGxvb3Agd2l0aG91dCB0ZXN0ICovCiAgICAgfQogICB9CiB9CkBAIC0xOTMsMTAgKzE5MywxMCBAQAogCiBNRVRIT0RERUYodm9pZCkKIHByZV9wcm9jZXNzX2NvbnRleHQgKGpfY29tcHJlc3NfcHRyIGNpbmZvLAotCQkgICAgIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKRElNRU5TSU9OICppbl9yb3dfY3RyLAotCQkgICAgIEpESU1FTlNJT04gaW5fcm93c19hdmFpbCwKLQkJICAgICBKU0FNUElNQUdFIG91dHB1dF9idWYsIEpESU1FTlNJT04gKm91dF9yb3dfZ3JvdXBfY3RyLAotCQkgICAgIEpESU1FTlNJT04gb3V0X3Jvd19ncm91cHNfYXZhaWwpCisgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiAqaW5fcm93X2N0ciwKKyAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gaW5fcm93c19hdmFpbCwKKyAgICAgICAgICAgICAgICAgICAgIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiAqb3V0X3Jvd19ncm91cF9jdHIsCisgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dF9yb3dfZ3JvdXBzX2F2YWlsKQogewogICBteV9wcmVwX3B0ciBwcmVwID0gKG15X3ByZXBfcHRyKSBjaW5mby0+cHJlcDsKICAgaW50IG51bXJvd3MsIGNpOwpAQCAtMjEwLDE5ICsyMTAsMTkgQEAKICAgICAgIG51bXJvd3MgPSBwcmVwLT5uZXh0X2J1Zl9zdG9wIC0gcHJlcC0+bmV4dF9idWZfcm93OwogICAgICAgbnVtcm93cyA9IChpbnQpIE1JTigoSkRJTUVOU0lPTikgbnVtcm93cywgaW5yb3dzKTsKICAgICAgICgqY2luZm8tPmNjb252ZXJ0LT5jb2xvcl9jb252ZXJ0KSAoY2luZm8sIGlucHV0X2J1ZiArICppbl9yb3dfY3RyLAotCQkJCQkgcHJlcC0+Y29sb3JfYnVmLAotCQkJCQkgKEpESU1FTlNJT04pIHByZXAtPm5leHRfYnVmX3JvdywKLQkJCQkJIG51bXJvd3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVwLT5jb2xvcl9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChKRElNRU5TSU9OKSBwcmVwLT5uZXh0X2J1Zl9yb3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bXJvd3MpOwogICAgICAgLyogUGFkIGF0IHRvcCBvZiBpbWFnZSwgaWYgZmlyc3QgdGltZSB0aHJvdWdoICovCiAgICAgICBpZiAocHJlcC0+cm93c190b19nbyA9PSBjaW5mby0+aW1hZ2VfaGVpZ2h0KSB7Ci0JZm9yIChjaSA9IDA7IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOyBjaSsrKSB7Ci0JICBpbnQgcm93OwotCSAgZm9yIChyb3cgPSAxOyByb3cgPD0gY2luZm8tPm1heF92X3NhbXBfZmFjdG9yOyByb3crKykgewotCSAgICBqY29weV9zYW1wbGVfcm93cyhwcmVwLT5jb2xvcl9idWZbY2ldLCAwLAotCQkJICAgICAgcHJlcC0+Y29sb3JfYnVmW2NpXSwgLXJvdywKLQkJCSAgICAgIDEsIGNpbmZvLT5pbWFnZV93aWR0aCk7Ci0JICB9Ci0JfQorICAgICAgICBmb3IgKGNpID0gMDsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7IGNpKyspIHsKKyAgICAgICAgICBpbnQgcm93OworICAgICAgICAgIGZvciAocm93ID0gMTsgcm93IDw9IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3Rvcjsgcm93KyspIHsKKyAgICAgICAgICAgIGpjb3B5X3NhbXBsZV9yb3dzKHByZXAtPmNvbG9yX2J1ZltjaV0sIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVwLT5jb2xvcl9idWZbY2ldLCAtcm93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgY2luZm8tPmltYWdlX3dpZHRoKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgIH0KICAgICAgICppbl9yb3dfY3RyICs9IG51bXJvd3M7CiAgICAgICBwcmVwLT5uZXh0X2J1Zl9yb3cgKz0gbnVtcm93czsKQEAgLTIzMCwyOSArMjMwLDI5IEBACiAgICAgfSBlbHNlIHsKICAgICAgIC8qIFJldHVybiBmb3IgbW9yZSBkYXRhLCB1bmxlc3Mgd2UgYXJlIGF0IHRoZSBib3R0b20gb2YgdGhlIGltYWdlLiAqLwogICAgICAgaWYgKHByZXAtPnJvd3NfdG9fZ28gIT0gMCkKLQlicmVhazsKKyAgICAgICAgYnJlYWs7CiAgICAgICAvKiBXaGVuIGF0IGJvdHRvbSBvZiBpbWFnZSwgcGFkIHRvIGZpbGwgdGhlIGNvbnZlcnNpb24gYnVmZmVyLiAqLwogICAgICAgaWYgKHByZXAtPm5leHRfYnVmX3JvdyA8IHByZXAtPm5leHRfYnVmX3N0b3ApIHsKLQlmb3IgKGNpID0gMDsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7IGNpKyspIHsKLQkgIGV4cGFuZF9ib3R0b21fZWRnZShwcmVwLT5jb2xvcl9idWZbY2ldLCBjaW5mby0+aW1hZ2Vfd2lkdGgsCi0JCQkgICAgIHByZXAtPm5leHRfYnVmX3JvdywgcHJlcC0+bmV4dF9idWZfc3RvcCk7Ci0JfQotCXByZXAtPm5leHRfYnVmX3JvdyA9IHByZXAtPm5leHRfYnVmX3N0b3A7CisgICAgICAgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsgY2krKykgeworICAgICAgICAgIGV4cGFuZF9ib3R0b21fZWRnZShwcmVwLT5jb2xvcl9idWZbY2ldLCBjaW5mby0+aW1hZ2Vfd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXAtPm5leHRfYnVmX3JvdywgcHJlcC0+bmV4dF9idWZfc3RvcCk7CisgICAgICAgIH0KKyAgICAgICAgcHJlcC0+bmV4dF9idWZfcm93ID0gcHJlcC0+bmV4dF9idWZfc3RvcDsKICAgICAgIH0KICAgICB9CiAgICAgLyogSWYgd2UndmUgZ290dGVuIGVub3VnaCBkYXRhLCBkb3duc2FtcGxlIGEgcm93IGdyb3VwLiAqLwogICAgIGlmIChwcmVwLT5uZXh0X2J1Zl9yb3cgPT0gcHJlcC0+bmV4dF9idWZfc3RvcCkgewogICAgICAgKCpjaW5mby0+ZG93bnNhbXBsZS0+ZG93bnNhbXBsZSkgKGNpbmZvLAotCQkJCQlwcmVwLT5jb2xvcl9idWYsCi0JCQkJCShKRElNRU5TSU9OKSBwcmVwLT50aGlzX3Jvd19ncm91cCwKLQkJCQkJb3V0cHV0X2J1ZiwgKm91dF9yb3dfZ3JvdXBfY3RyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVwLT5jb2xvcl9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEpESU1FTlNJT04pIHByZXAtPnRoaXNfcm93X2dyb3VwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9idWYsICpvdXRfcm93X2dyb3VwX2N0cik7CiAgICAgICAoKm91dF9yb3dfZ3JvdXBfY3RyKSsrOwogICAgICAgLyogQWR2YW5jZSBwb2ludGVycyB3aXRoIHdyYXBhcm91bmQgYXMgbmVjZXNzYXJ5LiAqLwogICAgICAgcHJlcC0+dGhpc19yb3dfZ3JvdXAgKz0gY2luZm8tPm1heF92X3NhbXBfZmFjdG9yOwogICAgICAgaWYgKHByZXAtPnRoaXNfcm93X2dyb3VwID49IGJ1Zl9oZWlnaHQpCi0JcHJlcC0+dGhpc19yb3dfZ3JvdXAgPSAwOworICAgICAgICBwcmVwLT50aGlzX3Jvd19ncm91cCA9IDA7CiAgICAgICBpZiAocHJlcC0+bmV4dF9idWZfcm93ID49IGJ1Zl9oZWlnaHQpCi0JcHJlcC0+bmV4dF9idWZfcm93ID0gMDsKKyAgICAgICAgcHJlcC0+bmV4dF9idWZfcm93ID0gMDsKICAgICAgIHByZXAtPm5leHRfYnVmX3N0b3AgPSBwcmVwLT5uZXh0X2J1Zl9yb3cgKyBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3I7CiAgICAgfQogICB9CkBAIC0yNzcsOCArMjc3LDggQEAKICAgICovCiAgIGZha2VfYnVmZmVyID0gKEpTQU1QQVJSQVkpCiAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKLQkJCQkoY2luZm8tPm51bV9jb21wb25lbnRzICogNSAqIHJncm91cF9oZWlnaHQpICoKLQkJCQlTSVpFT0YoSlNBTVBST1cpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNpbmZvLT5udW1fY29tcG9uZW50cyAqIDUgKiByZ3JvdXBfaGVpZ2h0KSAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJWkVPRihKU0FNUFJPVykpOwogCiAgIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7CiAgICAgICAgY2krKywgY29tcHB0cisrKSB7CkBAIC0yODksMTEgKzI4OSwxMSBAQAogICAgIHRydWVfYnVmZmVyID0gKCpjaW5mby0+bWVtLT5hbGxvY19zYXJyYXkpCiAgICAgICAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAogICAgICAgIChKRElNRU5TSU9OKSAoKChsb25nKSBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MgKiBEQ1RTSVpFICoKLQkJICAgICAgY2luZm8tPm1heF9oX3NhbXBfZmFjdG9yKSAvIGNvbXBwdHItPmhfc2FtcF9mYWN0b3IpLAorICAgICAgICAgICAgICAgICAgICAgIGNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvcikgLyBjb21wcHRyLT5oX3NhbXBfZmFjdG9yKSwKICAgICAgICAoSkRJTUVOU0lPTikgKDMgKiByZ3JvdXBfaGVpZ2h0KSk7CiAgICAgLyogQ29weSB0cnVlIGJ1ZmZlciByb3cgcG9pbnRlcnMgaW50byB0aGUgbWlkZGxlIG9mIHRoZSBmYWtlIHJvdyBhcnJheSAqLwogICAgIE1FTUNPUFkoZmFrZV9idWZmZXIgKyByZ3JvdXBfaGVpZ2h0LCB0cnVlX2J1ZmZlciwKLQkgICAgMyAqIHJncm91cF9oZWlnaHQgKiBTSVpFT0YoSlNBTVBST1cpKTsKKyAgICAgICAgICAgIDMgKiByZ3JvdXBfaGVpZ2h0ICogU0laRU9GKEpTQU1QUk9XKSk7CiAgICAgLyogRmlsbCBpbiB0aGUgYWJvdmUgYW5kIGJlbG93IHdyYXBhcm91bmQgcG9pbnRlcnMgKi8KICAgICBmb3IgKGkgPSAwOyBpIDwgcmdyb3VwX2hlaWdodDsgaSsrKSB7CiAgICAgICBmYWtlX2J1ZmZlcltpXSA9IHRydWVfYnVmZmVyWzIgKiByZ3JvdXBfaGVpZ2h0ICsgaV07CkBAIC0zMTgsMTIgKzMxOCwxMiBAQAogICBpbnQgY2k7CiAgIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyOwogCi0gIGlmIChuZWVkX2Z1bGxfYnVmZmVyKQkJLyogc2FmZXR5IGNoZWNrICovCisgIGlmIChuZWVkX2Z1bGxfYnVmZmVyKSAgICAgICAgIC8qIHNhZmV0eSBjaGVjayAqLwogICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0JVRkZFUl9NT0RFKTsKIAogICBwcmVwID0gKG15X3ByZXBfcHRyKQogICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCi0JCQkJU0laRU9GKG15X3ByZXBfY29udHJvbGxlcikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSVpFT0YobXlfcHJlcF9jb250cm9sbGVyKSk7CiAgIGNpbmZvLT5wcmVwID0gKHN0cnVjdCBqcGVnX2NfcHJlcF9jb250cm9sbGVyICopIHByZXA7CiAgIHByZXAtPnB1Yi5zdGFydF9wYXNzID0gc3RhcnRfcGFzc19wcmVwOwogCkBAIC0zNDMsMTIgKzM0MywxMiBAQAogICAgIC8qIE5vIGNvbnRleHQsIGp1c3QgbWFrZSBpdCB0YWxsIGVub3VnaCBmb3Igb25lIHJvdyBncm91cCAqLwogICAgIHByZXAtPnB1Yi5wcmVfcHJvY2Vzc19kYXRhID0gcHJlX3Byb2Nlc3NfZGF0YTsKICAgICBmb3IgKGNpID0gMCwgY29tcHB0ciA9IGNpbmZvLT5jb21wX2luZm87IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOwotCSBjaSsrLCBjb21wcHRyKyspIHsKKyAgICAgICAgIGNpKyssIGNvbXBwdHIrKykgewogICAgICAgcHJlcC0+Y29sb3JfYnVmW2NpXSA9ICgqY2luZm8tPm1lbS0+YWxsb2Nfc2FycmF5KQotCSgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCi0JIChKRElNRU5TSU9OKSAoKChsb25nKSBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MgKiBEQ1RTSVpFICoKLQkJCWNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvcikgLyBjb21wcHRyLT5oX3NhbXBfZmFjdG9yKSwKLQkgKEpESU1FTlNJT04pIGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3Rvcik7CisgICAgICAgICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCisgICAgICAgICAoSkRJTUVOU0lPTikgKCgobG9uZykgY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzICogRENUU0laRSAqCisgICAgICAgICAgICAgICAgICAgICAgICBjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IpIC8gY29tcHB0ci0+aF9zYW1wX2ZhY3RvciksCisgICAgICAgICAoSkRJTUVOU0lPTikgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yKTsKICAgICB9CiAgIH0KIH0KZGlmZiAtLWdpdCBhL2pjc2FtcGxlLmMgYi9qY3NhbXBsZS5jCmluZGV4IGVlYTM3NmYuLmY3Yjg0MTkgMTAwNjQ0Ci0tLSBhL2pjc2FtcGxlLmMKKysrIGIvamNzYW1wbGUuYwpAQCAtMSw5ICsxLDEwIEBACiAvKgogICogamNzYW1wbGUuYwogICoKKyAqIFRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlOgogICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTYsIFRob21hcyBHLiBMYW5lLgorICogbGlianBlZy10dXJibyBNb2RpZmljYXRpb25zOgogICogQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KICAqCiAgKiBUaGlzIGZpbGUgY29udGFpbnMgZG93bnNhbXBsaW5nIHJvdXRpbmVzLgpAQCAtNTQsMTMgKzU1LDEzIEBACiAKIC8qIFBvaW50ZXIgdG8gcm91dGluZSB0byBkb3duc2FtcGxlIGEgc2luZ2xlIGNvbXBvbmVudCAqLwogdHlwZWRlZiBKTUVUSE9EKHZvaWQsIGRvd25zYW1wbGUxX3B0ciwKLQkJKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKLQkJIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSkpOworICAgICAgICAgICAgICAgIChqX2NvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCisgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSkpOwogCiAvKiBQcml2YXRlIHN1Ym9iamVjdCAqLwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gIHN0cnVjdCBqcGVnX2Rvd25zYW1wbGVyIHB1YjsJLyogcHVibGljIGZpZWxkcyAqLworICBzdHJ1Y3QganBlZ19kb3duc2FtcGxlciBwdWI7ICAvKiBwdWJsaWMgZmllbGRzICovCiAKICAgLyogRG93bnNhbXBsaW5nIG1ldGhvZCBwb2ludGVycywgb25lIHBlciBjb21wb25lbnQgKi8KICAgZG93bnNhbXBsZTFfcHRyIG1ldGhvZHNbTUFYX0NPTVBPTkVOVFNdOwpAQCAtODcsNyArODgsNyBAQAogCiBMT0NBTCh2b2lkKQogZXhwYW5kX3JpZ2h0X2VkZ2UgKEpTQU1QQVJSQVkgaW1hZ2VfZGF0YSwgaW50IG51bV9yb3dzLAotCQkgICBKRElNRU5TSU9OIGlucHV0X2NvbHMsIEpESU1FTlNJT04gb3V0cHV0X2NvbHMpCisgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbnB1dF9jb2xzLCBKRElNRU5TSU9OIG91dHB1dF9jb2xzKQogewogICByZWdpc3RlciBKU0FNUFJPVyBwdHI7CiAgIHJlZ2lzdGVyIEpTQU1QTEUgcGl4dmFsOwpAQCAtOTgsOSArOTksOSBAQAogICBpZiAobnVtY29scyA+IDApIHsKICAgICBmb3IgKHJvdyA9IDA7IHJvdyA8IG51bV9yb3dzOyByb3crKykgewogICAgICAgcHRyID0gaW1hZ2VfZGF0YVtyb3ddICsgaW5wdXRfY29sczsKLSAgICAgIHBpeHZhbCA9IHB0clstMV07CQkvKiBkb24ndCBuZWVkIEdFVEpTQU1QTEUoKSBoZXJlICovCisgICAgICBwaXh2YWwgPSBwdHJbLTFdOyAgICAgICAgIC8qIGRvbid0IG5lZWQgR0VUSlNBTVBMRSgpIGhlcmUgKi8KICAgICAgIGZvciAoY291bnQgPSBudW1jb2xzOyBjb3VudCA+IDA7IGNvdW50LS0pCi0JKnB0cisrID0gcGl4dmFsOworICAgICAgICAqcHRyKysgPSBwaXh2YWw7CiAgICAgfQogICB9CiB9CkBAIC0xMTQsOCArMTE1LDggQEAKIAogTUVUSE9EREVGKHZvaWQpCiBzZXBfZG93bnNhbXBsZSAoal9jb21wcmVzc19wdHIgY2luZm8sCi0JCUpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGluX3Jvd19pbmRleCwKLQkJSlNBTVBJTUFHRSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dF9yb3dfZ3JvdXBfaW5kZXgpCisgICAgICAgICAgICAgICAgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5fcm93X2luZGV4LAorICAgICAgICAgICAgICAgIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRfcm93X2dyb3VwX2luZGV4KQogewogICBteV9kb3duc2FtcGxlX3B0ciBkb3duc2FtcGxlID0gKG15X2Rvd25zYW1wbGVfcHRyKSBjaW5mby0+ZG93bnNhbXBsZTsKICAgaW50IGNpOwpAQCAtMTQwLDEwICsxNDEsMTAgQEAKIAogTUVUSE9EREVGKHZvaWQpCiBpbnRfZG93bnNhbXBsZSAoal9jb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAotCQlKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEpCisgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZIG91dHB1dF9kYXRhKQogewogICBpbnQgaW5yb3csIG91dHJvdywgaF9leHBhbmQsIHZfZXhwYW5kLCBudW1waXgsIG51bXBpeDIsIGgsIHY7Ci0gIEpESU1FTlNJT04gb3V0Y29sLCBvdXRjb2xfaDsJLyogb3V0Y29sX2ggPT0gb3V0Y29sKmhfZXhwYW5kICovCisgIEpESU1FTlNJT04gb3V0Y29sLCBvdXRjb2xfaDsgIC8qIG91dGNvbF9oID09IG91dGNvbCpoX2V4cGFuZCAqLwogICBKRElNRU5TSU9OIG91dHB1dF9jb2xzID0gY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzICogRENUU0laRTsKICAgSlNBTVBST1cgaW5wdHIsIG91dHB0cjsKICAgSU5UMzIgb3V0dmFsdWU7CkBAIC0xNTgsMTkgKzE1OSwxOSBAQAogICAgKiBlZmZpY2llbnQuCiAgICAqLwogICBleHBhbmRfcmlnaHRfZWRnZShpbnB1dF9kYXRhLCBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IsCi0JCSAgICBjaW5mby0+aW1hZ2Vfd2lkdGgsIG91dHB1dF9jb2xzICogaF9leHBhbmQpOworICAgICAgICAgICAgICAgICAgICBjaW5mby0+aW1hZ2Vfd2lkdGgsIG91dHB1dF9jb2xzICogaF9leHBhbmQpOwogCiAgIGlucm93ID0gMDsKICAgZm9yIChvdXRyb3cgPSAwOyBvdXRyb3cgPCBjb21wcHRyLT52X3NhbXBfZmFjdG9yOyBvdXRyb3crKykgewogICAgIG91dHB0ciA9IG91dHB1dF9kYXRhW291dHJvd107CiAgICAgZm9yIChvdXRjb2wgPSAwLCBvdXRjb2xfaCA9IDA7IG91dGNvbCA8IG91dHB1dF9jb2xzOwotCSBvdXRjb2wrKywgb3V0Y29sX2ggKz0gaF9leHBhbmQpIHsKKyAgICAgICAgIG91dGNvbCsrLCBvdXRjb2xfaCArPSBoX2V4cGFuZCkgewogICAgICAgb3V0dmFsdWUgPSAwOwogICAgICAgZm9yICh2ID0gMDsgdiA8IHZfZXhwYW5kOyB2KyspIHsKLQlpbnB0ciA9IGlucHV0X2RhdGFbaW5yb3crdl0gKyBvdXRjb2xfaDsKLQlmb3IgKGggPSAwOyBoIDwgaF9leHBhbmQ7IGgrKykgewotCSAgb3V0dmFsdWUgKz0gKElOVDMyKSBHRVRKU0FNUExFKCppbnB0cisrKTsKLQl9CisgICAgICAgIGlucHRyID0gaW5wdXRfZGF0YVtpbnJvdyt2XSArIG91dGNvbF9oOworICAgICAgICBmb3IgKGggPSAwOyBoIDwgaF9leHBhbmQ7IGgrKykgeworICAgICAgICAgIG91dHZhbHVlICs9IChJTlQzMikgR0VUSlNBTVBMRSgqaW5wdHIrKyk7CisgICAgICAgIH0KICAgICAgIH0KICAgICAgICpvdXRwdHIrKyA9IChKU0FNUExFKSAoKG91dHZhbHVlICsgbnVtcGl4MikgLyBudW1waXgpOwogICAgIH0KQEAgLTE4NywxNCArMTg4LDE0IEBACiAKIE1FVEhPRERFRih2b2lkKQogZnVsbHNpemVfZG93bnNhbXBsZSAoal9jb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAotCQkgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSkKKyAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSkKIHsKICAgLyogQ29weSB0aGUgZGF0YSAqLwogICBqY29weV9zYW1wbGVfcm93cyhpbnB1dF9kYXRhLCAwLCBvdXRwdXRfZGF0YSwgMCwKLQkJICAgIGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwgY2luZm8tPmltYWdlX3dpZHRoKTsKKyAgICAgICAgICAgICAgICAgICAgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yLCBjaW5mby0+aW1hZ2Vfd2lkdGgpOwogICAvKiBFZGdlLWV4cGFuZCAqLwogICBleHBhbmRfcmlnaHRfZWRnZShvdXRwdXRfZGF0YSwgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yLAotCQkgICAgY2luZm8tPmltYWdlX3dpZHRoLCBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MgKiBEQ1RTSVpFKTsKKyAgICAgICAgICAgICAgICAgICAgY2luZm8tPmltYWdlX3dpZHRoLCBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MgKiBEQ1RTSVpFKTsKIH0KIAogCkBAIC0yMTIsNyArMjEzLDcgQEAKIAogTUVUSE9EREVGKHZvaWQpCiBoMnYxX2Rvd25zYW1wbGUgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKLQkJIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSkKKyAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZIG91dHB1dF9kYXRhKQogewogICBpbnQgb3V0cm93OwogICBKRElNRU5TSU9OIG91dGNvbDsKQEAgLTIyNSwxNiArMjI2LDE2IEBACiAgICAqIGVmZmljaWVudC4KICAgICovCiAgIGV4cGFuZF9yaWdodF9lZGdlKGlucHV0X2RhdGEsIGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwKLQkJICAgIGNpbmZvLT5pbWFnZV93aWR0aCwgb3V0cHV0X2NvbHMgKiAyKTsKKyAgICAgICAgICAgICAgICAgICAgY2luZm8tPmltYWdlX3dpZHRoLCBvdXRwdXRfY29scyAqIDIpOwogCiAgIGZvciAob3V0cm93ID0gMDsgb3V0cm93IDwgY29tcHB0ci0+dl9zYW1wX2ZhY3Rvcjsgb3V0cm93KyspIHsKICAgICBvdXRwdHIgPSBvdXRwdXRfZGF0YVtvdXRyb3ddOwogICAgIGlucHRyID0gaW5wdXRfZGF0YVtvdXRyb3ddOwotICAgIGJpYXMgPSAwOwkJCS8qIGJpYXMgPSAwLDEsMCwxLC4uLiBmb3Igc3VjY2Vzc2l2ZSBzYW1wbGVzICovCisgICAgYmlhcyA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIGJpYXMgPSAwLDEsMCwxLC4uLiBmb3Igc3VjY2Vzc2l2ZSBzYW1wbGVzICovCiAgICAgZm9yIChvdXRjb2wgPSAwOyBvdXRjb2wgPCBvdXRwdXRfY29sczsgb3V0Y29sKyspIHsKICAgICAgICpvdXRwdHIrKyA9IChKU0FNUExFKSAoKEdFVEpTQU1QTEUoKmlucHRyKSArIEdFVEpTQU1QTEUoaW5wdHJbMV0pCi0JCQkgICAgICArIGJpYXMpID4+IDEpOwotICAgICAgYmlhcyBePSAxOwkJLyogMD0+MSwgMT0+MCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBiaWFzKSA+PiAxKTsKKyAgICAgIGJpYXMgXj0gMTsgICAgICAgICAgICAgICAgLyogMD0+MSwgMT0+MCAqLwogICAgICAgaW5wdHIgKz0gMjsKICAgICB9CiAgIH0KQEAgLTI0OSw3ICsyNTAsNyBAQAogCiBNRVRIT0RERUYodm9pZCkKIGgydjJfZG93bnNhbXBsZSAoal9jb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAotCQkgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZIG91dHB1dF9kYXRhKQorICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEpCiB7CiAgIGludCBpbnJvdywgb3V0cm93OwogICBKRElNRU5TSU9OIG91dGNvbDsKQEAgLTI2MiwxOSArMjYzLDE5IEBACiAgICAqIGVmZmljaWVudC4KICAgICovCiAgIGV4cGFuZF9yaWdodF9lZGdlKGlucHV0X2RhdGEsIGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwKLQkJICAgIGNpbmZvLT5pbWFnZV93aWR0aCwgb3V0cHV0X2NvbHMgKiAyKTsKKyAgICAgICAgICAgICAgICAgICAgY2luZm8tPmltYWdlX3dpZHRoLCBvdXRwdXRfY29scyAqIDIpOwogCiAgIGlucm93ID0gMDsKICAgZm9yIChvdXRyb3cgPSAwOyBvdXRyb3cgPCBjb21wcHRyLT52X3NhbXBfZmFjdG9yOyBvdXRyb3crKykgewogICAgIG91dHB0ciA9IG91dHB1dF9kYXRhW291dHJvd107CiAgICAgaW5wdHIwID0gaW5wdXRfZGF0YVtpbnJvd107CiAgICAgaW5wdHIxID0gaW5wdXRfZGF0YVtpbnJvdysxXTsKLSAgICBiaWFzID0gMTsJCQkvKiBiaWFzID0gMSwyLDEsMiwuLi4gZm9yIHN1Y2Nlc3NpdmUgc2FtcGxlcyAqLworICAgIGJpYXMgPSAxOyAgICAgICAgICAgICAgICAgICAvKiBiaWFzID0gMSwyLDEsMiwuLi4gZm9yIHN1Y2Nlc3NpdmUgc2FtcGxlcyAqLwogICAgIGZvciAob3V0Y29sID0gMDsgb3V0Y29sIDwgb3V0cHV0X2NvbHM7IG91dGNvbCsrKSB7CiAgICAgICAqb3V0cHRyKysgPSAoSlNBTVBMRSkgKChHRVRKU0FNUExFKCppbnB0cjApICsgR0VUSlNBTVBMRShpbnB0cjBbMV0pICsKLQkJCSAgICAgIEdFVEpTQU1QTEUoKmlucHRyMSkgKyBHRVRKU0FNUExFKGlucHRyMVsxXSkKLQkJCSAgICAgICsgYmlhcykgPj4gMik7Ci0gICAgICBiaWFzIF49IDM7CQkvKiAxPT4yLCAyPT4xICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRVRKU0FNUExFKCppbnB0cjEpICsgR0VUSlNBTVBMRShpbnB0cjFbMV0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGJpYXMpID4+IDIpOworICAgICAgYmlhcyBePSAzOyAgICAgICAgICAgICAgICAvKiAxPT4yLCAyPT4xICovCiAgICAgICBpbnB0cjAgKz0gMjsgaW5wdHIxICs9IDI7CiAgICAgfQogICAgIGlucm93ICs9IDI7CkBAIC0yOTIsNyArMjkzLDcgQEAKIAogTUVUSE9EREVGKHZvaWQpCiBoMnYyX3Ntb290aF9kb3duc2FtcGxlIChqX2NvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCi0JCQlKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEpCisgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEpCiB7CiAgIGludCBpbnJvdywgb3V0cm93OwogICBKRElNRU5TSU9OIGNvbGN0cjsKQEAgLTMwNSw3ICszMDYsNyBAQAogICAgKiBlZmZpY2llbnQuCiAgICAqLwogICBleHBhbmRfcmlnaHRfZWRnZShpbnB1dF9kYXRhIC0gMSwgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yICsgMiwKLQkJICAgIGNpbmZvLT5pbWFnZV93aWR0aCwgb3V0cHV0X2NvbHMgKiAyKTsKKyAgICAgICAgICAgICAgICAgICAgY2luZm8tPmltYWdlX3dpZHRoLCBvdXRwdXRfY29scyAqIDIpOwogCiAgIC8qIFdlIGRvbid0IGJvdGhlciB0byBmb3JtIHRoZSBpbmRpdmlkdWFsICJzbW9vdGhlZCIgaW5wdXQgcGl4ZWwgdmFsdWVzOwogICAgKiB3ZSBjYW4gZGlyZWN0bHkgY29tcHV0ZSB0aGUgb3V0cHV0IHdoaWNoIGlzIHRoZSBhdmVyYWdlIG9mIHRoZSBmb3VyCkBAIC0zMzMsMTQgKzMzNCwxNCBAQAogCiAgICAgLyogU3BlY2lhbCBjYXNlIGZvciBmaXJzdCBjb2x1bW46IHByZXRlbmQgY29sdW1uIC0xIGlzIHNhbWUgYXMgY29sdW1uIDAgKi8KICAgICBtZW1iZXJzdW0gPSBHRVRKU0FNUExFKCppbnB0cjApICsgR0VUSlNBTVBMRShpbnB0cjBbMV0pICsKLQkJR0VUSlNBTVBMRSgqaW5wdHIxKSArIEdFVEpTQU1QTEUoaW5wdHIxWzFdKTsKKyAgICAgICAgICAgICAgICBHRVRKU0FNUExFKCppbnB0cjEpICsgR0VUSlNBTVBMRShpbnB0cjFbMV0pOwogICAgIG5laWdoc3VtID0gR0VUSlNBTVBMRSgqYWJvdmVfcHRyKSArIEdFVEpTQU1QTEUoYWJvdmVfcHRyWzFdKSArCi0JICAgICAgIEdFVEpTQU1QTEUoKmJlbG93X3B0cikgKyBHRVRKU0FNUExFKGJlbG93X3B0clsxXSkgKwotCSAgICAgICBHRVRKU0FNUExFKCppbnB0cjApICsgR0VUSlNBTVBMRShpbnB0cjBbMl0pICsKLQkgICAgICAgR0VUSlNBTVBMRSgqaW5wdHIxKSArIEdFVEpTQU1QTEUoaW5wdHIxWzJdKTsKKyAgICAgICAgICAgICAgIEdFVEpTQU1QTEUoKmJlbG93X3B0cikgKyBHRVRKU0FNUExFKGJlbG93X3B0clsxXSkgKworICAgICAgICAgICAgICAgR0VUSlNBTVBMRSgqaW5wdHIwKSArIEdFVEpTQU1QTEUoaW5wdHIwWzJdKSArCisgICAgICAgICAgICAgICBHRVRKU0FNUExFKCppbnB0cjEpICsgR0VUSlNBTVBMRShpbnB0cjFbMl0pOwogICAgIG5laWdoc3VtICs9IG5laWdoc3VtOwogICAgIG5laWdoc3VtICs9IEdFVEpTQU1QTEUoKmFib3ZlX3B0cikgKyBHRVRKU0FNUExFKGFib3ZlX3B0clsyXSkgKwotCQlHRVRKU0FNUExFKCpiZWxvd19wdHIpICsgR0VUSlNBTVBMRShiZWxvd19wdHJbMl0pOworICAgICAgICAgICAgICAgIEdFVEpTQU1QTEUoKmJlbG93X3B0cikgKyBHRVRKU0FNUExFKGJlbG93X3B0clsyXSk7CiAgICAgbWVtYmVyc3VtID0gbWVtYmVyc3VtICogbWVtYmVyc2NhbGUgKyBuZWlnaHN1bSAqIG5laWdoc2NhbGU7CiAgICAgKm91dHB0cisrID0gKEpTQU1QTEUpICgobWVtYmVyc3VtICsgMzI3NjgpID4+IDE2KTsKICAgICBpbnB0cjAgKz0gMjsgaW5wdHIxICs9IDI7IGFib3ZlX3B0ciArPSAyOyBiZWxvd19wdHIgKz0gMjsKQEAgLTM0OCwxNyArMzQ5LDE3IEBACiAgICAgZm9yIChjb2xjdHIgPSBvdXRwdXRfY29scyAtIDI7IGNvbGN0ciA+IDA7IGNvbGN0ci0tKSB7CiAgICAgICAvKiBzdW0gb2YgcGl4ZWxzIGRpcmVjdGx5IG1hcHBlZCB0byB0aGlzIG91dHB1dCBlbGVtZW50ICovCiAgICAgICBtZW1iZXJzdW0gPSBHRVRKU0FNUExFKCppbnB0cjApICsgR0VUSlNBTVBMRShpbnB0cjBbMV0pICsKLQkJICBHRVRKU0FNUExFKCppbnB0cjEpICsgR0VUSlNBTVBMRShpbnB0cjFbMV0pOworICAgICAgICAgICAgICAgICAgR0VUSlNBTVBMRSgqaW5wdHIxKSArIEdFVEpTQU1QTEUoaW5wdHIxWzFdKTsKICAgICAgIC8qIHN1bSBvZiBlZGdlLW5laWdoYm9yIHBpeGVscyAqLwogICAgICAgbmVpZ2hzdW0gPSBHRVRKU0FNUExFKCphYm92ZV9wdHIpICsgR0VUSlNBTVBMRShhYm92ZV9wdHJbMV0pICsKLQkJIEdFVEpTQU1QTEUoKmJlbG93X3B0cikgKyBHRVRKU0FNUExFKGJlbG93X3B0clsxXSkgKwotCQkgR0VUSlNBTVBMRShpbnB0cjBbLTFdKSArIEdFVEpTQU1QTEUoaW5wdHIwWzJdKSArCi0JCSBHRVRKU0FNUExFKGlucHRyMVstMV0pICsgR0VUSlNBTVBMRShpbnB0cjFbMl0pOworICAgICAgICAgICAgICAgICBHRVRKU0FNUExFKCpiZWxvd19wdHIpICsgR0VUSlNBTVBMRShiZWxvd19wdHJbMV0pICsKKyAgICAgICAgICAgICAgICAgR0VUSlNBTVBMRShpbnB0cjBbLTFdKSArIEdFVEpTQU1QTEUoaW5wdHIwWzJdKSArCisgICAgICAgICAgICAgICAgIEdFVEpTQU1QTEUoaW5wdHIxWy0xXSkgKyBHRVRKU0FNUExFKGlucHRyMVsyXSk7CiAgICAgICAvKiBUaGUgZWRnZS1uZWlnaGJvcnMgY291bnQgdHdpY2UgYXMgbXVjaCBhcyBjb3JuZXItbmVpZ2hib3JzICovCiAgICAgICBuZWlnaHN1bSArPSBuZWlnaHN1bTsKICAgICAgIC8qIEFkZCBpbiB0aGUgY29ybmVyLW5laWdoYm9ycyAqLwogICAgICAgbmVpZ2hzdW0gKz0gR0VUSlNBTVBMRShhYm92ZV9wdHJbLTFdKSArIEdFVEpTQU1QTEUoYWJvdmVfcHRyWzJdKSArCi0JCSAgR0VUSlNBTVBMRShiZWxvd19wdHJbLTFdKSArIEdFVEpTQU1QTEUoYmVsb3dfcHRyWzJdKTsKKyAgICAgICAgICAgICAgICAgIEdFVEpTQU1QTEUoYmVsb3dfcHRyWy0xXSkgKyBHRVRKU0FNUExFKGJlbG93X3B0clsyXSk7CiAgICAgICAvKiBmb3JtIGZpbmFsIG91dHB1dCBzY2FsZWQgdXAgYnkgMl4xNiAqLwogICAgICAgbWVtYmVyc3VtID0gbWVtYmVyc3VtICogbWVtYmVyc2NhbGUgKyBuZWlnaHN1bSAqIG5laWdoc2NhbGU7CiAgICAgICAvKiByb3VuZCwgZGVzY2FsZSBhbmQgb3V0cHV0IGl0ICovCkBAIC0zNjgsMTQgKzM2OSwxNCBAQAogCiAgICAgLyogU3BlY2lhbCBjYXNlIGZvciBsYXN0IGNvbHVtbiAqLwogICAgIG1lbWJlcnN1bSA9IEdFVEpTQU1QTEUoKmlucHRyMCkgKyBHRVRKU0FNUExFKGlucHRyMFsxXSkgKwotCQlHRVRKU0FNUExFKCppbnB0cjEpICsgR0VUSlNBTVBMRShpbnB0cjFbMV0pOworICAgICAgICAgICAgICAgIEdFVEpTQU1QTEUoKmlucHRyMSkgKyBHRVRKU0FNUExFKGlucHRyMVsxXSk7CiAgICAgbmVpZ2hzdW0gPSBHRVRKU0FNUExFKCphYm92ZV9wdHIpICsgR0VUSlNBTVBMRShhYm92ZV9wdHJbMV0pICsKLQkgICAgICAgR0VUSlNBTVBMRSgqYmVsb3dfcHRyKSArIEdFVEpTQU1QTEUoYmVsb3dfcHRyWzFdKSArCi0JICAgICAgIEdFVEpTQU1QTEUoaW5wdHIwWy0xXSkgKyBHRVRKU0FNUExFKGlucHRyMFsxXSkgKwotCSAgICAgICBHRVRKU0FNUExFKGlucHRyMVstMV0pICsgR0VUSlNBTVBMRShpbnB0cjFbMV0pOworICAgICAgICAgICAgICAgR0VUSlNBTVBMRSgqYmVsb3dfcHRyKSArIEdFVEpTQU1QTEUoYmVsb3dfcHRyWzFdKSArCisgICAgICAgICAgICAgICBHRVRKU0FNUExFKGlucHRyMFstMV0pICsgR0VUSlNBTVBMRShpbnB0cjBbMV0pICsKKyAgICAgICAgICAgICAgIEdFVEpTQU1QTEUoaW5wdHIxWy0xXSkgKyBHRVRKU0FNUExFKGlucHRyMVsxXSk7CiAgICAgbmVpZ2hzdW0gKz0gbmVpZ2hzdW07CiAgICAgbmVpZ2hzdW0gKz0gR0VUSlNBTVBMRShhYm92ZV9wdHJbLTFdKSArIEdFVEpTQU1QTEUoYWJvdmVfcHRyWzFdKSArCi0JCUdFVEpTQU1QTEUoYmVsb3dfcHRyWy0xXSkgKyBHRVRKU0FNUExFKGJlbG93X3B0clsxXSk7CisgICAgICAgICAgICAgICAgR0VUSlNBTVBMRShiZWxvd19wdHJbLTFdKSArIEdFVEpTQU1QTEUoYmVsb3dfcHRyWzFdKTsKICAgICBtZW1iZXJzdW0gPSBtZW1iZXJzdW0gKiBtZW1iZXJzY2FsZSArIG5laWdoc3VtICogbmVpZ2hzY2FsZTsKICAgICAqb3V0cHRyID0gKEpTQU1QTEUpICgobWVtYmVyc3VtICsgMzI3NjgpID4+IDE2KTsKIApAQCAtMzkyLDcgKzM5Myw3IEBACiAKIE1FVEhPRERFRih2b2lkKQogZnVsbHNpemVfc21vb3RoX2Rvd25zYW1wbGUgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAotCQkJICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEpCiB7CiAgIGludCBvdXRyb3c7CiAgIEpESU1FTlNJT04gY29sY3RyOwpAQCAtNDA2LDcgKzQwNyw3IEBACiAgICAqIGVmZmljaWVudC4KICAgICovCiAgIGV4cGFuZF9yaWdodF9lZGdlKGlucHV0X2RhdGEgLSAxLCBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IgKyAyLAotCQkgICAgY2luZm8tPmltYWdlX3dpZHRoLCBvdXRwdXRfY29scyk7CisgICAgICAgICAgICAgICAgICAgIGNpbmZvLT5pbWFnZV93aWR0aCwgb3V0cHV0X2NvbHMpOwogCiAgIC8qIEVhY2ggb2YgdGhlIGVpZ2h0IG5laWdoYm9yIHBpeGVscyBjb250cmlidXRlcyBhIGZyYWN0aW9uIFNGIHRvIHRoZQogICAgKiBzbW9vdGhlZCBwaXhlbCwgd2hpbGUgdGhlIG1haW4gcGl4ZWwgY29udHJpYnV0ZXMgKDEtOCpTRikuICBJbiBvcmRlcgpAQCAtNDI1LDEwICs0MjYsMTAgQEAKIAogICAgIC8qIFNwZWNpYWwgY2FzZSBmb3IgZmlyc3QgY29sdW1uICovCiAgICAgY29sc3VtID0gR0VUSlNBTVBMRSgqYWJvdmVfcHRyKyspICsgR0VUSlNBTVBMRSgqYmVsb3dfcHRyKyspICsKLQkgICAgIEdFVEpTQU1QTEUoKmlucHRyKTsKKyAgICAgICAgICAgICBHRVRKU0FNUExFKCppbnB0cik7CiAgICAgbWVtYmVyc3VtID0gR0VUSlNBTVBMRSgqaW5wdHIrKyk7CiAgICAgbmV4dGNvbHN1bSA9IEdFVEpTQU1QTEUoKmFib3ZlX3B0cikgKyBHRVRKU0FNUExFKCpiZWxvd19wdHIpICsKLQkJIEdFVEpTQU1QTEUoKmlucHRyKTsKKyAgICAgICAgICAgICAgICAgR0VUSlNBTVBMRSgqaW5wdHIpOwogICAgIG5laWdoc3VtID0gY29sc3VtICsgKGNvbHN1bSAtIG1lbWJlcnN1bSkgKyBuZXh0Y29sc3VtOwogICAgIG1lbWJlcnN1bSA9IG1lbWJlcnN1bSAqIG1lbWJlcnNjYWxlICsgbmVpZ2hzdW0gKiBuZWlnaHNjYWxlOwogICAgICpvdXRwdHIrKyA9IChKU0FNUExFKSAoKG1lbWJlcnN1bSArIDMyNzY4KSA+PiAxNik7CkBAIC00MzgsNyArNDM5LDcgQEAKICAgICAgIG1lbWJlcnN1bSA9IEdFVEpTQU1QTEUoKmlucHRyKyspOwogICAgICAgYWJvdmVfcHRyKys7IGJlbG93X3B0cisrOwogICAgICAgbmV4dGNvbHN1bSA9IEdFVEpTQU1QTEUoKmFib3ZlX3B0cikgKyBHRVRKU0FNUExFKCpiZWxvd19wdHIpICsKLQkJICAgR0VUSlNBTVBMRSgqaW5wdHIpOworICAgICAgICAgICAgICAgICAgIEdFVEpTQU1QTEUoKmlucHRyKTsKICAgICAgIG5laWdoc3VtID0gbGFzdGNvbHN1bSArIChjb2xzdW0gLSBtZW1iZXJzdW0pICsgbmV4dGNvbHN1bTsKICAgICAgIG1lbWJlcnN1bSA9IG1lbWJlcnN1bSAqIG1lbWJlcnNjYWxlICsgbmVpZ2hzdW0gKiBuZWlnaHNjYWxlOwogICAgICAgKm91dHB0cisrID0gKEpTQU1QTEUpICgobWVtYmVyc3VtICsgMzI3NjgpID4+IDE2KTsKQEAgLTQ3Miw3ICs0NzMsNyBAQAogCiAgIGRvd25zYW1wbGUgPSAobXlfZG93bnNhbXBsZV9wdHIpCiAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKLQkJCQlTSVpFT0YobXlfZG93bnNhbXBsZXIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0laRU9GKG15X2Rvd25zYW1wbGVyKSk7CiAgIGNpbmZvLT5kb3duc2FtcGxlID0gKHN0cnVjdCBqcGVnX2Rvd25zYW1wbGVyICopIGRvd25zYW1wbGU7CiAgIGRvd25zYW1wbGUtPnB1Yi5zdGFydF9wYXNzID0gc3RhcnRfcGFzc19kb3duc2FtcGxlOwogICBkb3duc2FtcGxlLT5wdWIuZG93bnNhbXBsZSA9IHNlcF9kb3duc2FtcGxlOwpAQCAtNDg1LDM1ICs0ODYsMzYgQEAKICAgZm9yIChjaSA9IDAsIGNvbXBwdHIgPSBjaW5mby0+Y29tcF9pbmZvOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsKICAgICAgICBjaSsrLCBjb21wcHRyKyspIHsKICAgICBpZiAoY29tcHB0ci0+aF9zYW1wX2ZhY3RvciA9PSBjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IgJiYKLQljb21wcHRyLT52X3NhbXBfZmFjdG9yID09IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcikgeworICAgICAgICBjb21wcHRyLT52X3NhbXBfZmFjdG9yID09IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcikgewogI2lmZGVmIElOUFVUX1NNT09USElOR19TVVBQT1JURUQKICAgICAgIGlmIChjaW5mby0+c21vb3RoaW5nX2ZhY3RvcikgewotCWRvd25zYW1wbGUtPm1ldGhvZHNbY2ldID0gZnVsbHNpemVfc21vb3RoX2Rvd25zYW1wbGU7Ci0JZG93bnNhbXBsZS0+cHViLm5lZWRfY29udGV4dF9yb3dzID0gVFJVRTsKKyAgICAgICAgZG93bnNhbXBsZS0+bWV0aG9kc1tjaV0gPSBmdWxsc2l6ZV9zbW9vdGhfZG93bnNhbXBsZTsKKyAgICAgICAgZG93bnNhbXBsZS0+cHViLm5lZWRfY29udGV4dF9yb3dzID0gVFJVRTsKICAgICAgIH0gZWxzZQogI2VuZGlmCi0JZG93bnNhbXBsZS0+bWV0aG9kc1tjaV0gPSBmdWxsc2l6ZV9kb3duc2FtcGxlOworICAgICAgICBkb3duc2FtcGxlLT5tZXRob2RzW2NpXSA9IGZ1bGxzaXplX2Rvd25zYW1wbGU7CiAgICAgfSBlbHNlIGlmIChjb21wcHRyLT5oX3NhbXBfZmFjdG9yICogMiA9PSBjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IgJiYKLQkgICAgICAgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciA9PSBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IpIHsKKyAgICAgICAgICAgICAgIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IgPT0gY2luZm8tPm1heF92X3NhbXBfZmFjdG9yKSB7CiAgICAgICBzbW9vdGhvayA9IEZBTFNFOwogICAgICAgaWYgKGpzaW1kX2Nhbl9oMnYxX2Rvd25zYW1wbGUoKSkKICAgICAgICAgZG93bnNhbXBsZS0+bWV0aG9kc1tjaV0gPSBqc2ltZF9oMnYxX2Rvd25zYW1wbGU7CiAgICAgICBlbHNlCiAgICAgICAgIGRvd25zYW1wbGUtPm1ldGhvZHNbY2ldID0gaDJ2MV9kb3duc2FtcGxlOwogICAgIH0gZWxzZSBpZiAoY29tcHB0ci0+aF9zYW1wX2ZhY3RvciAqIDIgPT0gY2luZm8tPm1heF9oX3NhbXBfZmFjdG9yICYmCi0JICAgICAgIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IgKiAyID09IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcikgeworICAgICAgICAgICAgICAgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciAqIDIgPT0gY2luZm8tPm1heF92X3NhbXBfZmFjdG9yKSB7CiAjaWZkZWYgSU5QVVRfU01PT1RISU5HX1NVUFBPUlRFRAogICAgICAgaWYgKGNpbmZvLT5zbW9vdGhpbmdfZmFjdG9yKSB7Ci0JZG93bnNhbXBsZS0+bWV0aG9kc1tjaV0gPSBoMnYyX3Ntb290aF9kb3duc2FtcGxlOwotCWRvd25zYW1wbGUtPnB1Yi5uZWVkX2NvbnRleHRfcm93cyA9IFRSVUU7Ci0gICAgICB9IGVsc2UKKyAgICAgICAgZG93bnNhbXBsZS0+bWV0aG9kc1tjaV0gPSBoMnYyX3Ntb290aF9kb3duc2FtcGxlOworICAgICAgICBkb3duc2FtcGxlLT5wdWIubmVlZF9jb250ZXh0X3Jvd3MgPSBUUlVFOworICAgICAgfSBlbHNlIHsKICNlbmRpZgotCWlmIChqc2ltZF9jYW5faDJ2Ml9kb3duc2FtcGxlKCkpCi0JICBkb3duc2FtcGxlLT5tZXRob2RzW2NpXSA9IGpzaW1kX2gydjJfZG93bnNhbXBsZTsKLQllbHNlCi0JICBkb3duc2FtcGxlLT5tZXRob2RzW2NpXSA9IGgydjJfZG93bnNhbXBsZTsKKyAgICAgICAgaWYgKGpzaW1kX2Nhbl9oMnYyX2Rvd25zYW1wbGUoKSkKKyAgICAgICAgICBkb3duc2FtcGxlLT5tZXRob2RzW2NpXSA9IGpzaW1kX2gydjJfZG93bnNhbXBsZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIGRvd25zYW1wbGUtPm1ldGhvZHNbY2ldID0gaDJ2Ml9kb3duc2FtcGxlOworICAgICAgfQogICAgIH0gZWxzZSBpZiAoKGNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvciAlIGNvbXBwdHItPmhfc2FtcF9mYWN0b3IpID09IDAgJiYKLQkgICAgICAgKGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciAlIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IpID09IDApIHsKKyAgICAgICAgICAgICAgIChjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IgJSBjb21wcHRyLT52X3NhbXBfZmFjdG9yKSA9PSAwKSB7CiAgICAgICBzbW9vdGhvayA9IEZBTFNFOwogICAgICAgZG93bnNhbXBsZS0+bWV0aG9kc1tjaV0gPSBpbnRfZG93bnNhbXBsZTsKICAgICB9IGVsc2UKZGlmZiAtLWdpdCBhL2pjc3Rlc3QuYyBiL2pjc3Rlc3QuYwppbmRleCA5OGYxNmRhLi4zNThlZDI1IDEwMDY0NAotLS0gYS9qY3N0ZXN0LmMKKysrIGIvamNzdGVzdC5jCkBAIC03OCw3ICs3OCw3IEBACiAgIGplcnIucHViLm91dHB1dF9tZXNzYWdlID0gbXlfb3V0cHV0X21lc3NhZ2U7CiAKICAgaWYoc2V0am1wKGplcnIuamIpKSB7Ci0gICAgLy8gdGhpcyB3aWxsIGV4ZWN1dGUgaWYgbGlianBlZyBoYXMgYW4gZXJyb3IKKyAgICAvKiB0aGlzIHdpbGwgZXhlY3V0ZSBpZiBsaWJqcGVnIGhhcyBhbiBlcnJvciAqLwogICAgIGpjc192YWxpZCA9IDA7CiAgICAgZ290byBkb25lOwogICB9CkBAIC0xMDUsNyArMTA1LDcgQEAKICAgI2VuZGlmCiAKICAgaWYoc2V0am1wKGplcnIuamIpKSB7Ci0gICAgLy8gdGhpcyB3aWxsIGV4ZWN1dGUgaWYgbGlianBlZyBoYXMgYW4gZXJyb3IKKyAgICAvKiB0aGlzIHdpbGwgZXhlY3V0ZSBpZiBsaWJqcGVnIGhhcyBhbiBlcnJvciAqLwogICAgIGpjc19hbHBoYV92YWxpZCA9IDA7CiAgICAgZ290byBkb25lMjsKICAgfQpkaWZmIC0tZ2l0IGEvamN0cmFucy5jIGIvamN0cmFucy5jCmluZGV4IDkxNmU4NzIuLmMzNTMyOTMgMTAwNjQ0Ci0tLSBhL2pjdHJhbnMuYworKysgYi9qY3RyYW5zLmMKQEAgLTE4LDkgKzE4LDkgQEAKIAogLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KIExPQ0FMKHZvaWQpIHRyYW5zZW5jb2RlX21hc3Rlcl9zZWxlY3Rpb24KLQlKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBqdmlydF9iYXJyYXlfcHRyICogY29lZl9hcnJheXMpKTsKKyAgICAgICAgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywganZpcnRfYmFycmF5X3B0ciAqIGNvZWZfYXJyYXlzKSk7CiBMT0NBTCh2b2lkKSB0cmFuc2VuY29kZV9jb2VmX2NvbnRyb2xsZXIKLQlKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBqdmlydF9iYXJyYXlfcHRyICogY29lZl9hcnJheXMpKTsKKyAgICAgICAgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywganZpcnRfYmFycmF5X3B0ciAqIGNvZWZfYXJyYXlzKSk7CiAKIAogLyoKQEAgLTQ4LDcgKzQ4LDcgQEAKICAgLyogUGVyZm9ybSBtYXN0ZXIgc2VsZWN0aW9uIG9mIGFjdGl2ZSBtb2R1bGVzICovCiAgIHRyYW5zZW5jb2RlX21hc3Rlcl9zZWxlY3Rpb24oY2luZm8sIGNvZWZfYXJyYXlzKTsKICAgLyogV2FpdCBmb3IganBlZ19maW5pc2hfY29tcHJlc3MoKSBjYWxsICovCi0gIGNpbmZvLT5uZXh0X3NjYW5saW5lID0gMDsJLyogc28ganBlZ193cml0ZV9tYXJrZXIgd29ya3MgKi8KKyAgY2luZm8tPm5leHRfc2NhbmxpbmUgPSAwOyAgICAgLyogc28ganBlZ193cml0ZV9tYXJrZXIgd29ya3MgKi8KICAgY2luZm8tPmdsb2JhbF9zdGF0ZSA9IENTVEFURV9XUkNPRUZTOwogfQogCkBAIC02Miw3ICs2Miw3IEBACiAKIEdMT0JBTCh2b2lkKQoganBlZ19jb3B5X2NyaXRpY2FsX3BhcmFtZXRlcnMgKGpfZGVjb21wcmVzc19wdHIgc3JjaW5mbywKLQkJCSAgICAgICBqX2NvbXByZXNzX3B0ciBkc3RpbmZvKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpfY29tcHJlc3NfcHRyIGRzdGluZm8pCiB7CiAgIEpRVUFOVF9UQkwgKiogcXRibHB0cjsKICAganBlZ19jb21wb25lbnRfaW5mbyAqaW5jb21wLCAqb3V0Y29tcDsKQEAgLTk2LDEwICs5NiwxMCBAQAogICAgIGlmIChzcmNpbmZvLT5xdWFudF90YmxfcHRyc1t0Ymxub10gIT0gTlVMTCkgewogICAgICAgcXRibHB0ciA9ICYgZHN0aW5mby0+cXVhbnRfdGJsX3B0cnNbdGJsbm9dOwogICAgICAgaWYgKCpxdGJscHRyID09IE5VTEwpCi0JKnF0YmxwdHIgPSBqcGVnX2FsbG9jX3F1YW50X3RhYmxlKChqX2NvbW1vbl9wdHIpIGRzdGluZm8pOworICAgICAgICAqcXRibHB0ciA9IGpwZWdfYWxsb2NfcXVhbnRfdGFibGUoKGpfY29tbW9uX3B0cikgZHN0aW5mbyk7CiAgICAgICBNRU1DT1BZKCgqcXRibHB0ciktPnF1YW50dmFsLAotCSAgICAgIHNyY2luZm8tPnF1YW50X3RibF9wdHJzW3RibG5vXS0+cXVhbnR2YWwsCi0JICAgICAgU0laRU9GKCgqcXRibHB0ciktPnF1YW50dmFsKSk7CisgICAgICAgICAgICAgIHNyY2luZm8tPnF1YW50X3RibF9wdHJzW3RibG5vXS0+cXVhbnR2YWwsCisgICAgICAgICAgICAgIFNJWkVPRigoKnF0YmxwdHIpLT5xdWFudHZhbCkpOwogICAgICAgKCpxdGJscHRyKS0+c2VudF90YWJsZSA9IEZBTFNFOwogICAgIH0KICAgfQpAQCAtMTA5LDcgKzEwOSw3IEBACiAgIGRzdGluZm8tPm51bV9jb21wb25lbnRzID0gc3JjaW5mby0+bnVtX2NvbXBvbmVudHM7CiAgIGlmIChkc3RpbmZvLT5udW1fY29tcG9uZW50cyA8IDEgfHwgZHN0aW5mby0+bnVtX2NvbXBvbmVudHMgPiBNQVhfQ09NUE9ORU5UUykKICAgICBFUlJFWElUMihkc3RpbmZvLCBKRVJSX0NPTVBPTkVOVF9DT1VOVCwgZHN0aW5mby0+bnVtX2NvbXBvbmVudHMsCi0JICAgICBNQVhfQ09NUE9ORU5UUyk7CisgICAgICAgICAgICAgTUFYX0NPTVBPTkVOVFMpOwogICBmb3IgKGNpID0gMCwgaW5jb21wID0gc3JjaW5mby0+Y29tcF9pbmZvLCBvdXRjb21wID0gZHN0aW5mby0+Y29tcF9pbmZvOwogICAgICAgIGNpIDwgZHN0aW5mby0+bnVtX2NvbXBvbmVudHM7IGNpKyssIGluY29tcCsrLCBvdXRjb21wKyspIHsKICAgICBvdXRjb21wLT5jb21wb25lbnRfaWQgPSBpbmNvbXAtPmNvbXBvbmVudF9pZDsKQEAgLTEyMiwxNCArMTIyLDE0IEBACiAgICAgICovCiAgICAgdGJsbm8gPSBvdXRjb21wLT5xdWFudF90Ymxfbm87CiAgICAgaWYgKHRibG5vIDwgMCB8fCB0YmxubyA+PSBOVU1fUVVBTlRfVEJMUyB8fAotCXNyY2luZm8tPnF1YW50X3RibF9wdHJzW3RibG5vXSA9PSBOVUxMKQorICAgICAgICBzcmNpbmZvLT5xdWFudF90YmxfcHRyc1t0Ymxub10gPT0gTlVMTCkKICAgICAgIEVSUkVYSVQxKGRzdGluZm8sIEpFUlJfTk9fUVVBTlRfVEFCTEUsIHRibG5vKTsKICAgICBzbG90X3F1YW50ID0gc3JjaW5mby0+cXVhbnRfdGJsX3B0cnNbdGJsbm9dOwogICAgIGNfcXVhbnQgPSBpbmNvbXAtPnF1YW50X3RhYmxlOwogICAgIGlmIChjX3F1YW50ICE9IE5VTEwpIHsKICAgICAgIGZvciAoY29lZmkgPSAwOyBjb2VmaSA8IERDVFNJWkUyOyBjb2VmaSsrKSB7Ci0JaWYgKGNfcXVhbnQtPnF1YW50dmFsW2NvZWZpXSAhPSBzbG90X3F1YW50LT5xdWFudHZhbFtjb2VmaV0pCi0JICBFUlJFWElUMShkc3RpbmZvLCBKRVJSX01JU01BVENIRURfUVVBTlRfVEFCTEUsIHRibG5vKTsKKyAgICAgICAgaWYgKGNfcXVhbnQtPnF1YW50dmFsW2NvZWZpXSAhPSBzbG90X3F1YW50LT5xdWFudHZhbFtjb2VmaV0pCisgICAgICAgICAgRVJSRVhJVDEoZHN0aW5mbywgSkVSUl9NSVNNQVRDSEVEX1FVQU5UX1RBQkxFLCB0Ymxubyk7CiAgICAgICB9CiAgICAgfQogICAgIC8qIE5vdGU6IHdlIGRvIG5vdCBjb3B5IHRoZSBzb3VyY2UncyBIdWZmbWFuIHRhYmxlIGFzc2lnbm1lbnRzOwpAQCAtMTYzLDcgKzE2Myw3IEBACiAKIExPQ0FMKHZvaWQpCiB0cmFuc2VuY29kZV9tYXN0ZXJfc2VsZWN0aW9uIChqX2NvbXByZXNzX3B0ciBjaW5mbywKLQkJCSAgICAgIGp2aXJ0X2JhcnJheV9wdHIgKiBjb2VmX2FycmF5cykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp2aXJ0X2JhcnJheV9wdHIgKiBjb2VmX2FycmF5cykKIHsKICAgLyogQWx0aG91Z2ggd2UgZG9uJ3QgYWN0dWFsbHkgdXNlIGlucHV0X2NvbXBvbmVudHMgZm9yIHRyYW5zY29kaW5nLAogICAgKiBqY21hc3Rlci5jJ3MgaW5pdGlhbF9zZXR1cCB3aWxsIGNvbXBsYWluIGlmIGlucHV0X2NvbXBvbmVudHMgaXMgMC4KQEAgLTIxOSwxMCArMjE5LDEwIEBACiB0eXBlZGVmIHN0cnVjdCB7CiAgIHN0cnVjdCBqcGVnX2NfY29lZl9jb250cm9sbGVyIHB1YjsgLyogcHVibGljIGZpZWxkcyAqLwogCi0gIEpESU1FTlNJT04gaU1DVV9yb3dfbnVtOwkvKiBpTUNVIHJvdyAjIHdpdGhpbiBpbWFnZSAqLwotICBKRElNRU5TSU9OIG1jdV9jdHI7CQkvKiBjb3VudHMgTUNVcyBwcm9jZXNzZWQgaW4gY3VycmVudCByb3cgKi8KLSAgaW50IE1DVV92ZXJ0X29mZnNldDsJCS8qIGNvdW50cyBNQ1Ugcm93cyB3aXRoaW4gaU1DVSByb3cgKi8KLSAgaW50IE1DVV9yb3dzX3Blcl9pTUNVX3JvdzsJLyogbnVtYmVyIG9mIHN1Y2ggcm93cyBuZWVkZWQgKi8KKyAgSkRJTUVOU0lPTiBpTUNVX3Jvd19udW07ICAgICAgLyogaU1DVSByb3cgIyB3aXRoaW4gaW1hZ2UgKi8KKyAgSkRJTUVOU0lPTiBtY3VfY3RyOyAgICAgICAgICAgLyogY291bnRzIE1DVXMgcHJvY2Vzc2VkIGluIGN1cnJlbnQgcm93ICovCisgIGludCBNQ1VfdmVydF9vZmZzZXQ7ICAgICAgICAgIC8qIGNvdW50cyBNQ1Ugcm93cyB3aXRoaW4gaU1DVSByb3cgKi8KKyAgaW50IE1DVV9yb3dzX3Blcl9pTUNVX3JvdzsgICAgLyogbnVtYmVyIG9mIHN1Y2ggcm93cyBuZWVkZWQgKi8KIAogICAvKiBWaXJ0dWFsIGJsb2NrIGFycmF5IGZvciBlYWNoIGNvbXBvbmVudC4gKi8KICAganZpcnRfYmFycmF5X3B0ciAqIHdob2xlX2ltYWdlOwpAQCAtMjg5LDcgKzI4OSw3IEBACiBjb21wcmVzc19vdXRwdXQgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUElNQUdFIGlucHV0X2J1ZikKIHsKICAgbXlfY29lZl9wdHIgY29lZiA9IChteV9jb2VmX3B0cikgY2luZm8tPmNvZWY7Ci0gIEpESU1FTlNJT04gTUNVX2NvbF9udW07CS8qIGluZGV4IG9mIGN1cnJlbnQgTUNVIHdpdGhpbiByb3cgKi8KKyAgSkRJTUVOU0lPTiBNQ1VfY29sX251bTsgICAgICAgLyogaW5kZXggb2YgY3VycmVudCBNQ1Ugd2l0aGluIHJvdyAqLwogICBKRElNRU5TSU9OIGxhc3RfTUNVX2NvbCA9IGNpbmZvLT5NQ1VzX3Blcl9yb3cgLSAxOwogICBKRElNRU5TSU9OIGxhc3RfaU1DVV9yb3cgPSBjaW5mby0+dG90YWxfaU1DVV9yb3dzIC0gMTsKICAgaW50IGJsa24sIGNpLCB4aW5kZXgsIHlpbmRleCwgeW9mZnNldCwgYmxvY2tjbnQ7CkBAIC0zMTIsNDQgKzMxMiw0NCBAQAogICBmb3IgKHlvZmZzZXQgPSBjb2VmLT5NQ1VfdmVydF9vZmZzZXQ7IHlvZmZzZXQgPCBjb2VmLT5NQ1Vfcm93c19wZXJfaU1DVV9yb3c7CiAgICAgICAgeW9mZnNldCsrKSB7CiAgICAgZm9yIChNQ1VfY29sX251bSA9IGNvZWYtPm1jdV9jdHI7IE1DVV9jb2xfbnVtIDwgY2luZm8tPk1DVXNfcGVyX3JvdzsKLQkgTUNVX2NvbF9udW0rKykgeworICAgICAgICAgTUNVX2NvbF9udW0rKykgewogICAgICAgLyogQ29uc3RydWN0IGxpc3Qgb2YgcG9pbnRlcnMgdG8gRENUIGJsb2NrcyBiZWxvbmdpbmcgdG8gdGhpcyBNQ1UgKi8KLSAgICAgIGJsa24gPSAwOwkJCS8qIGluZGV4IG9mIGN1cnJlbnQgRENUIGJsb2NrIHdpdGhpbiBNQ1UgKi8KKyAgICAgIGJsa24gPSAwOyAgICAgICAgICAgICAgICAgLyogaW5kZXggb2YgY3VycmVudCBEQ1QgYmxvY2sgd2l0aGluIE1DVSAqLwogICAgICAgZm9yIChjaSA9IDA7IGNpIDwgY2luZm8tPmNvbXBzX2luX3NjYW47IGNpKyspIHsKLQljb21wcHRyID0gY2luZm8tPmN1cl9jb21wX2luZm9bY2ldOwotCXN0YXJ0X2NvbCA9IE1DVV9jb2xfbnVtICogY29tcHB0ci0+TUNVX3dpZHRoOwotCWJsb2NrY250ID0gKE1DVV9jb2xfbnVtIDwgbGFzdF9NQ1VfY29sKSA/IGNvbXBwdHItPk1DVV93aWR0aAotCQkJCQkJOiBjb21wcHRyLT5sYXN0X2NvbF93aWR0aDsKLQlmb3IgKHlpbmRleCA9IDA7IHlpbmRleCA8IGNvbXBwdHItPk1DVV9oZWlnaHQ7IHlpbmRleCsrKSB7Ci0JICBpZiAoY29lZi0+aU1DVV9yb3dfbnVtIDwgbGFzdF9pTUNVX3JvdyB8fAotCSAgICAgIHlpbmRleCt5b2Zmc2V0IDwgY29tcHB0ci0+bGFzdF9yb3dfaGVpZ2h0KSB7Ci0JICAgIC8qIEZpbGwgaW4gcG9pbnRlcnMgdG8gcmVhbCBibG9ja3MgaW4gdGhpcyByb3cgKi8KLQkgICAgYnVmZmVyX3B0ciA9IGJ1ZmZlcltjaV1beWluZGV4K3lvZmZzZXRdICsgc3RhcnRfY29sOwotCSAgICBmb3IgKHhpbmRleCA9IDA7IHhpbmRleCA8IGJsb2NrY250OyB4aW5kZXgrKykKLQkgICAgICBNQ1VfYnVmZmVyW2Jsa24rK10gPSBidWZmZXJfcHRyKys7Ci0JICB9IGVsc2UgewotCSAgICAvKiBBdCBib3R0b20gb2YgaW1hZ2UsIG5lZWQgYSB3aG9sZSByb3cgb2YgZHVtbXkgYmxvY2tzICovCi0JICAgIHhpbmRleCA9IDA7Ci0JICB9Ci0JICAvKiBGaWxsIGluIGFueSBkdW1teSBibG9ja3MgbmVlZGVkIGluIHRoaXMgcm93LgotCSAgICogRHVtbXkgYmxvY2tzIGFyZSBmaWxsZWQgaW4gdGhlIHNhbWUgd2F5IGFzIGluIGpjY29lZmN0LmM6Ci0JICAgKiBhbGwgemVyb2VzIGluIHRoZSBBQyBlbnRyaWVzLCBEQyBlbnRyaWVzIGVxdWFsIHRvIHByZXZpb3VzCi0JICAgKiBibG9jaydzIERDIHZhbHVlLiAgVGhlIGluaXQgcm91dGluZSBoYXMgYWxyZWFkeSB6ZXJvZWQgdGhlCi0JICAgKiBBQyBlbnRyaWVzLCBzbyB3ZSBuZWVkIG9ubHkgc2V0IHRoZSBEQyBlbnRyaWVzIGNvcnJlY3RseS4KLQkgICAqLwotCSAgZm9yICg7IHhpbmRleCA8IGNvbXBwdHItPk1DVV93aWR0aDsgeGluZGV4KyspIHsKLQkgICAgTUNVX2J1ZmZlcltibGtuXSA9IGNvZWYtPmR1bW15X2J1ZmZlcltibGtuXTsKLQkgICAgTUNVX2J1ZmZlcltibGtuXVswXVswXSA9IE1DVV9idWZmZXJbYmxrbi0xXVswXVswXTsKLQkgICAgYmxrbisrOwotCSAgfQotCX0KKyAgICAgICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsKKyAgICAgICAgc3RhcnRfY29sID0gTUNVX2NvbF9udW0gKiBjb21wcHRyLT5NQ1Vfd2lkdGg7CisgICAgICAgIGJsb2NrY250ID0gKE1DVV9jb2xfbnVtIDwgbGFzdF9NQ1VfY29sKSA/IGNvbXBwdHItPk1DVV93aWR0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjb21wcHRyLT5sYXN0X2NvbF93aWR0aDsKKyAgICAgICAgZm9yICh5aW5kZXggPSAwOyB5aW5kZXggPCBjb21wcHRyLT5NQ1VfaGVpZ2h0OyB5aW5kZXgrKykgeworICAgICAgICAgIGlmIChjb2VmLT5pTUNVX3Jvd19udW0gPCBsYXN0X2lNQ1Vfcm93IHx8CisgICAgICAgICAgICAgIHlpbmRleCt5b2Zmc2V0IDwgY29tcHB0ci0+bGFzdF9yb3dfaGVpZ2h0KSB7CisgICAgICAgICAgICAvKiBGaWxsIGluIHBvaW50ZXJzIHRvIHJlYWwgYmxvY2tzIGluIHRoaXMgcm93ICovCisgICAgICAgICAgICBidWZmZXJfcHRyID0gYnVmZmVyW2NpXVt5aW5kZXgreW9mZnNldF0gKyBzdGFydF9jb2w7CisgICAgICAgICAgICBmb3IgKHhpbmRleCA9IDA7IHhpbmRleCA8IGJsb2NrY250OyB4aW5kZXgrKykKKyAgICAgICAgICAgICAgTUNVX2J1ZmZlcltibGtuKytdID0gYnVmZmVyX3B0cisrOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKiBBdCBib3R0b20gb2YgaW1hZ2UsIG5lZWQgYSB3aG9sZSByb3cgb2YgZHVtbXkgYmxvY2tzICovCisgICAgICAgICAgICB4aW5kZXggPSAwOworICAgICAgICAgIH0KKyAgICAgICAgICAvKiBGaWxsIGluIGFueSBkdW1teSBibG9ja3MgbmVlZGVkIGluIHRoaXMgcm93LgorICAgICAgICAgICAqIER1bW15IGJsb2NrcyBhcmUgZmlsbGVkIGluIHRoZSBzYW1lIHdheSBhcyBpbiBqY2NvZWZjdC5jOgorICAgICAgICAgICAqIGFsbCB6ZXJvZXMgaW4gdGhlIEFDIGVudHJpZXMsIERDIGVudHJpZXMgZXF1YWwgdG8gcHJldmlvdXMKKyAgICAgICAgICAgKiBibG9jaydzIERDIHZhbHVlLiAgVGhlIGluaXQgcm91dGluZSBoYXMgYWxyZWFkeSB6ZXJvZWQgdGhlCisgICAgICAgICAgICogQUMgZW50cmllcywgc28gd2UgbmVlZCBvbmx5IHNldCB0aGUgREMgZW50cmllcyBjb3JyZWN0bHkuCisgICAgICAgICAgICovCisgICAgICAgICAgZm9yICg7IHhpbmRleCA8IGNvbXBwdHItPk1DVV93aWR0aDsgeGluZGV4KyspIHsKKyAgICAgICAgICAgIE1DVV9idWZmZXJbYmxrbl0gPSBjb2VmLT5kdW1teV9idWZmZXJbYmxrbl07CisgICAgICAgICAgICBNQ1VfYnVmZmVyW2Jsa25dWzBdWzBdID0gTUNVX2J1ZmZlcltibGtuLTFdWzBdWzBdOworICAgICAgICAgICAgYmxrbisrOworICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgfQogICAgICAgLyogVHJ5IHRvIHdyaXRlIHRoZSBNQ1UuICovCiAgICAgICBpZiAoISAoKmNpbmZvLT5lbnRyb3B5LT5lbmNvZGVfbWN1KSAoY2luZm8sIE1DVV9idWZmZXIpKSB7Ci0JLyogU3VzcGVuc2lvbiBmb3JjZWQ7IHVwZGF0ZSBzdGF0ZSBjb3VudGVycyBhbmQgZXhpdCAqLwotCWNvZWYtPk1DVV92ZXJ0X29mZnNldCA9IHlvZmZzZXQ7Ci0JY29lZi0+bWN1X2N0ciA9IE1DVV9jb2xfbnVtOwotCXJldHVybiBGQUxTRTsKKyAgICAgICAgLyogU3VzcGVuc2lvbiBmb3JjZWQ7IHVwZGF0ZSBzdGF0ZSBjb3VudGVycyBhbmQgZXhpdCAqLworICAgICAgICBjb2VmLT5NQ1VfdmVydF9vZmZzZXQgPSB5b2Zmc2V0OworICAgICAgICBjb2VmLT5tY3VfY3RyID0gTUNVX2NvbF9udW07CisgICAgICAgIHJldHVybiBGQUxTRTsKICAgICAgIH0KICAgICB9CiAgICAgLyogQ29tcGxldGVkIGFuIE1DVSByb3csIGJ1dCBwZXJoYXBzIG5vdCBhbiBpTUNVIHJvdyAqLwpAQCAtMzcyLDcgKzM3Miw3IEBACiAKIExPQ0FMKHZvaWQpCiB0cmFuc2VuY29kZV9jb2VmX2NvbnRyb2xsZXIgKGpfY29tcHJlc3NfcHRyIGNpbmZvLAotCQkJICAgICBqdmlydF9iYXJyYXlfcHRyICogY29lZl9hcnJheXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp2aXJ0X2JhcnJheV9wdHIgKiBjb2VmX2FycmF5cykKIHsKICAgbXlfY29lZl9wdHIgY29lZjsKICAgSkJMT0NLUk9XIGJ1ZmZlcjsKQEAgLTM4MCw3ICszODAsNyBAQAogCiAgIGNvZWYgPSAobXlfY29lZl9wdHIpCiAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKLQkJCQlTSVpFT0YobXlfY29lZl9jb250cm9sbGVyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJWkVPRihteV9jb2VmX2NvbnRyb2xsZXIpKTsKICAgY2luZm8tPmNvZWYgPSAoc3RydWN0IGpwZWdfY19jb2VmX2NvbnRyb2xsZXIgKikgY29lZjsKICAgY29lZi0+cHViLnN0YXJ0X3Bhc3MgPSBzdGFydF9wYXNzX2NvZWY7CiAgIGNvZWYtPnB1Yi5jb21wcmVzc19kYXRhID0gY29tcHJlc3Nfb3V0cHV0OwpAQCAtMzkxLDcgKzM5MSw3IEBACiAgIC8qIEFsbG9jYXRlIGFuZCBwcmUtemVybyBzcGFjZSBmb3IgZHVtbXkgRENUIGJsb2Nrcy4gKi8KICAgYnVmZmVyID0gKEpCTE9DS1JPVykKICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX2xhcmdlKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAotCQkJCUNfTUFYX0JMT0NLU19JTl9NQ1UgKiBTSVpFT0YoSkJMT0NLKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENfTUFYX0JMT0NLU19JTl9NQ1UgKiBTSVpFT0YoSkJMT0NLKSk7CiAgIGp6ZXJvX2Zhcigodm9pZCBGQVIgKikgYnVmZmVyLCBDX01BWF9CTE9DS1NfSU5fTUNVICogU0laRU9GKEpCTE9DSykpOwogICBmb3IgKGkgPSAwOyBpIDwgQ19NQVhfQkxPQ0tTX0lOX01DVTsgaSsrKSB7CiAgICAgY29lZi0+ZHVtbXlfYnVmZmVyW2ldID0gYnVmZmVyICsgaTsKZGlmZiAtLWdpdCBhL2pkYXBpbWluLmMgYi9qZGFwaW1pbi5jCmluZGV4IGNhZGI1OWYuLmRiNTNmZGMgMTAwNjQ0Ci0tLSBhL2pkYXBpbWluLmMKKysrIGIvamRhcGltaW4uYwpAQCAtMzIsMTIgKzMyLDEyIEBACiAgIGludCBpOwogCiAgIC8qIEd1YXJkIGFnYWluc3QgdmVyc2lvbiBtaXNtYXRjaGVzIGJldHdlZW4gbGlicmFyeSBhbmQgY2FsbGVyLiAqLwotICBjaW5mby0+bWVtID0gTlVMTDsJCS8qIHNvIGpwZWdfZGVzdHJveSBrbm93cyBtZW0gbWdyIG5vdCBjYWxsZWQgKi8KKyAgY2luZm8tPm1lbSA9IE5VTEw7ICAgICAgICAgICAgLyogc28ganBlZ19kZXN0cm95IGtub3dzIG1lbSBtZ3Igbm90IGNhbGxlZCAqLwogICBpZiAodmVyc2lvbiAhPSBKUEVHX0xJQl9WRVJTSU9OKQogICAgIEVSUkVYSVQyKGNpbmZvLCBKRVJSX0JBRF9MSUJfVkVSU0lPTiwgSlBFR19MSUJfVkVSU0lPTiwgdmVyc2lvbik7CiAgIGlmIChzdHJ1Y3RzaXplICE9IFNJWkVPRihzdHJ1Y3QganBlZ19kZWNvbXByZXNzX3N0cnVjdCkpCi0gICAgRVJSRVhJVDIoY2luZm8sIEpFUlJfQkFEX1NUUlVDVF9TSVpFLCAKLQkgICAgIChpbnQpIFNJWkVPRihzdHJ1Y3QganBlZ19kZWNvbXByZXNzX3N0cnVjdCksIChpbnQpIHN0cnVjdHNpemUpOworICAgIEVSUkVYSVQyKGNpbmZvLCBKRVJSX0JBRF9TVFJVQ1RfU0laRSwKKyAgICAgICAgICAgICAoaW50KSBTSVpFT0Yoc3RydWN0IGpwZWdfZGVjb21wcmVzc19zdHJ1Y3QpLCAoaW50KSBzdHJ1Y3RzaXplKTsKIAogICAvKiBGb3IgZGVidWdnaW5nIHB1cnBvc2VzLCB3ZSB6ZXJvIHRoZSB3aG9sZSBtYXN0ZXIgc3RydWN0dXJlLgogICAgKiBCdXQgdGhlIGFwcGxpY2F0aW9uIGhhcyBhbHJlYWR5IHNldCB0aGUgZXJyIHBvaW50ZXIsIGFuZCBtYXkgaGF2ZSBzZXQKQEAgLTEyMSwyMiArMTIxLDIyIEBACiAgICAgY2luZm8tPmpwZWdfY29sb3Jfc3BhY2UgPSBKQ1NfR1JBWVNDQUxFOwogICAgIGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UgPSBKQ1NfR1JBWVNDQUxFOwogICAgIGJyZWFrOwotICAgIAorCiAgIGNhc2UgMzoKICAgICBpZiAoY2luZm8tPnNhd19KRklGX21hcmtlcikgewogICAgICAgY2luZm8tPmpwZWdfY29sb3Jfc3BhY2UgPSBKQ1NfWUNiQ3I7IC8qIEpGSUYgaW1wbGllcyBZQ2JDciAqLwogICAgIH0gZWxzZSBpZiAoY2luZm8tPnNhd19BZG9iZV9tYXJrZXIpIHsKICAgICAgIHN3aXRjaCAoY2luZm8tPkFkb2JlX3RyYW5zZm9ybSkgewogICAgICAgY2FzZSAwOgotCWNpbmZvLT5qcGVnX2NvbG9yX3NwYWNlID0gSkNTX1JHQjsKLQlicmVhazsKKyAgICAgICAgY2luZm8tPmpwZWdfY29sb3Jfc3BhY2UgPSBKQ1NfUkdCOworICAgICAgICBicmVhazsKICAgICAgIGNhc2UgMToKLQljaW5mby0+anBlZ19jb2xvcl9zcGFjZSA9IEpDU19ZQ2JDcjsKLQlicmVhazsKKyAgICAgICAgY2luZm8tPmpwZWdfY29sb3Jfc3BhY2UgPSBKQ1NfWUNiQ3I7CisgICAgICAgIGJyZWFrOwogICAgICAgZGVmYXVsdDoKLQlXQVJOTVMxKGNpbmZvLCBKV1JOX0FET0JFX1hGT1JNLCBjaW5mby0+QWRvYmVfdHJhbnNmb3JtKTsKLQljaW5mby0+anBlZ19jb2xvcl9zcGFjZSA9IEpDU19ZQ2JDcjsgLyogYXNzdW1lIGl0J3MgWUNiQ3IgKi8KLQlicmVhazsKKyAgICAgICAgV0FSTk1TMShjaW5mbywgSldSTl9BRE9CRV9YRk9STSwgY2luZm8tPkFkb2JlX3RyYW5zZm9ybSk7CisgICAgICAgIGNpbmZvLT5qcGVnX2NvbG9yX3NwYWNlID0gSkNTX1lDYkNyOyAvKiBhc3N1bWUgaXQncyBZQ2JDciAqLworICAgICAgICBicmVhazsKICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgLyogU2F3IG5vIHNwZWNpYWwgbWFya2VycywgdHJ5IHRvIGd1ZXNzIGZyb20gdGhlIGNvbXBvbmVudCBJRHMgKi8KQEAgLTE0NSwzMSArMTQ1LDMxIEBACiAgICAgICBpbnQgY2lkMiA9IGNpbmZvLT5jb21wX2luZm9bMl0uY29tcG9uZW50X2lkOwogCiAgICAgICBpZiAoY2lkMCA9PSAxICYmIGNpZDEgPT0gMiAmJiBjaWQyID09IDMpCi0JY2luZm8tPmpwZWdfY29sb3Jfc3BhY2UgPSBKQ1NfWUNiQ3I7IC8qIGFzc3VtZSBKRklGIHcvb3V0IG1hcmtlciAqLworICAgICAgICBjaW5mby0+anBlZ19jb2xvcl9zcGFjZSA9IEpDU19ZQ2JDcjsgLyogYXNzdW1lIEpGSUYgdy9vdXQgbWFya2VyICovCiAgICAgICBlbHNlIGlmIChjaWQwID09IDgyICYmIGNpZDEgPT0gNzEgJiYgY2lkMiA9PSA2NikKLQljaW5mby0+anBlZ19jb2xvcl9zcGFjZSA9IEpDU19SR0I7IC8qIEFTQ0lJICdSJywgJ0cnLCAnQicgKi8KKyAgICAgICAgY2luZm8tPmpwZWdfY29sb3Jfc3BhY2UgPSBKQ1NfUkdCOyAvKiBBU0NJSSAnUicsICdHJywgJ0InICovCiAgICAgICBlbHNlIHsKLQlUUkFDRU1TMyhjaW5mbywgMSwgSlRSQ19VTktOT1dOX0lEUywgY2lkMCwgY2lkMSwgY2lkMik7Ci0JY2luZm8tPmpwZWdfY29sb3Jfc3BhY2UgPSBKQ1NfWUNiQ3I7IC8qIGFzc3VtZSBpdCdzIFlDYkNyICovCisgICAgICAgIFRSQUNFTVMzKGNpbmZvLCAxLCBKVFJDX1VOS05PV05fSURTLCBjaWQwLCBjaWQxLCBjaWQyKTsKKyAgICAgICAgY2luZm8tPmpwZWdfY29sb3Jfc3BhY2UgPSBKQ1NfWUNiQ3I7IC8qIGFzc3VtZSBpdCdzIFlDYkNyICovCiAgICAgICB9CiAgICAgfQogICAgIC8qIEFsd2F5cyBndWVzcyBSR0IgaXMgcHJvcGVyIG91dHB1dCBjb2xvcnNwYWNlLiAqLwogICAgIGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UgPSBKQ1NfUkdCOwogICAgIGJyZWFrOwotICAgIAorCiAgIGNhc2UgNDoKICAgICBpZiAoY2luZm8tPnNhd19BZG9iZV9tYXJrZXIpIHsKICAgICAgIHN3aXRjaCAoY2luZm8tPkFkb2JlX3RyYW5zZm9ybSkgewogICAgICAgY2FzZSAwOgotCWNpbmZvLT5qcGVnX2NvbG9yX3NwYWNlID0gSkNTX0NNWUs7Ci0JYnJlYWs7CisgICAgICAgIGNpbmZvLT5qcGVnX2NvbG9yX3NwYWNlID0gSkNTX0NNWUs7CisgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSAyOgotCWNpbmZvLT5qcGVnX2NvbG9yX3NwYWNlID0gSkNTX1lDQ0s7Ci0JYnJlYWs7CisgICAgICAgIGNpbmZvLT5qcGVnX2NvbG9yX3NwYWNlID0gSkNTX1lDQ0s7CisgICAgICAgIGJyZWFrOwogICAgICAgZGVmYXVsdDoKLQlXQVJOTVMxKGNpbmZvLCBKV1JOX0FET0JFX1hGT1JNLCBjaW5mby0+QWRvYmVfdHJhbnNmb3JtKTsKLQljaW5mby0+anBlZ19jb2xvcl9zcGFjZSA9IEpDU19ZQ0NLOyAvKiBhc3N1bWUgaXQncyBZQ0NLICovCi0JYnJlYWs7CisgICAgICAgIFdBUk5NUzEoY2luZm8sIEpXUk5fQURPQkVfWEZPUk0sIGNpbmZvLT5BZG9iZV90cmFuc2Zvcm0pOworICAgICAgICBjaW5mby0+anBlZ19jb2xvcl9zcGFjZSA9IEpDU19ZQ0NLOyAvKiBhc3N1bWUgaXQncyBZQ0NLICovCisgICAgICAgIGJyZWFrOwogICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAvKiBObyBzcGVjaWFsIG1hcmtlcnMsIGFzc3VtZSBzdHJhaWdodCBDTVlLLiAqLwpAQCAtMTc3LDcgKzE3Nyw3IEBACiAgICAgfQogICAgIGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UgPSBKQ1NfQ01ZSzsKICAgICBicmVhazsKLSAgICAKKwogICBkZWZhdWx0OgogICAgIGNpbmZvLT5qcGVnX2NvbG9yX3NwYWNlID0gSkNTX1VOS05PV047CiAgICAgY2luZm8tPm91dF9jb2xvcl9zcGFjZSA9IEpDU19VTktOT1dOOwpAQCAtMTg1LDcgKzE4NSw3IEBACiAgIH0KIAogICAvKiBTZXQgZGVmYXVsdHMgZm9yIG90aGVyIGRlY29tcHJlc3Npb24gcGFyYW1ldGVycy4gKi8KLSAgY2luZm8tPnNjYWxlX251bSA9IDE7CQkvKiAxOjEgc2NhbGluZyAqLworICBjaW5mby0+c2NhbGVfbnVtID0gMTsgICAgICAgICAvKiAxOjEgc2NhbGluZyAqLwogICBjaW5mby0+c2NhbGVfZGVub20gPSAxOwogICBjaW5mby0+b3V0cHV0X2dhbW1hID0gMS4wOwogICBjaW5mby0+YnVmZmVyZWRfaW1hZ2UgPSBGQUxTRTsKQEAgLTI1Myw3ICsyNTMsNyBAQAogICAgIHJldGNvZGUgPSBKUEVHX0hFQURFUl9PSzsKICAgICBicmVhazsKICAgY2FzZSBKUEVHX1JFQUNIRURfRU9JOgotICAgIGlmIChyZXF1aXJlX2ltYWdlKQkJLyogQ29tcGxhaW4gaWYgYXBwbGljYXRpb24gd2FudGVkIGFuIGltYWdlICovCisgICAgaWYgKHJlcXVpcmVfaW1hZ2UpICAgICAgICAgIC8qIENvbXBsYWluIGlmIGFwcGxpY2F0aW9uIHdhbnRlZCBhbiBpbWFnZSAqLwogICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9OT19JTUFHRSk7CiAgICAgLyogUmVzZXQgdG8gc3RhcnQgc3RhdGU7IGl0IHdvdWxkIGJlIHNhZmVyIHRvIHJlcXVpcmUgdGhlIGFwcGxpY2F0aW9uIHRvCiAgICAgICogY2FsbCBqcGVnX2Fib3J0LCBidXQgd2UgY2FuJ3QgY2hhbmdlIGl0IG5vdyBmb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLgpAQCAtMzg1LDcgKzM4NSw3IEBACiAgIC8qIFJlYWQgdW50aWwgRU9JICovCiAgIHdoaWxlICghIGNpbmZvLT5pbnB1dGN0bC0+ZW9pX3JlYWNoZWQpIHsKICAgICBpZiAoKCpjaW5mby0+aW5wdXRjdGwtPmNvbnN1bWVfaW5wdXQpIChjaW5mbykgPT0gSlBFR19TVVNQRU5ERUQpCi0gICAgICByZXR1cm4gRkFMU0U7CQkvKiBTdXNwZW5kLCBjb21lIGJhY2sgbGF0ZXIgKi8KKyAgICAgIHJldHVybiBGQUxTRTsgICAgICAgICAgICAgLyogU3VzcGVuZCwgY29tZSBiYWNrIGxhdGVyICovCiAgIH0KICAgLyogRG8gZmluYWwgY2xlYW51cCAqLwogICAoKmNpbmZvLT5zcmMtPnRlcm1fc291cmNlKSAoY2luZm8pOwpkaWZmIC0tZ2l0IGEvamRhcGlzdGQuYyBiL2pkYXBpc3RkLmMKaW5kZXggODlkMmM3Yy4uZjRhYzUwZCAxMDA2NDQKLS0tIGEvamRhcGlzdGQuYworKysgYi9qZGFwaXN0ZC5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIFRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlOgogICogQ29weXJpZ2h0IChDKSAxOTk0LTE5OTYsIFRob21hcyBHLiBMYW5lLgotICogTW9kaWZpY2F0aW9uczoKKyAqIGxpYmpwZWctdHVyYm8gTW9kaWZpY2F0aW9uczoKICAqIENvcHlyaWdodCAoQykgMjAxMCwgRC4gUi4gQ29tbWFuZGVyLgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgogICoKQEAgLTU1LDI0ICs1NSwyNCBAQAogICAgIGlmIChjaW5mby0+aW5wdXRjdGwtPmhhc19tdWx0aXBsZV9zY2FucykgewogI2lmZGVmIERfTVVMVElTQ0FOX0ZJTEVTX1NVUFBPUlRFRAogICAgICAgZm9yICg7OykgewotCWludCByZXRjb2RlOwotCS8qIENhbGwgcHJvZ3Jlc3MgbW9uaXRvciBob29rIGlmIHByZXNlbnQgKi8KLQlpZiAoY2luZm8tPnByb2dyZXNzICE9IE5VTEwpCi0JICAoKmNpbmZvLT5wcm9ncmVzcy0+cHJvZ3Jlc3NfbW9uaXRvcikgKChqX2NvbW1vbl9wdHIpIGNpbmZvKTsKLQkvKiBBYnNvcmIgc29tZSBtb3JlIGlucHV0ICovCi0JcmV0Y29kZSA9ICgqY2luZm8tPmlucHV0Y3RsLT5jb25zdW1lX2lucHV0KSAoY2luZm8pOwotCWlmIChyZXRjb2RlID09IEpQRUdfU1VTUEVOREVEKQotCSAgcmV0dXJuIEZBTFNFOwotCWlmIChyZXRjb2RlID09IEpQRUdfUkVBQ0hFRF9FT0kpCi0JICBicmVhazsKLQkvKiBBZHZhbmNlIHByb2dyZXNzIGNvdW50ZXIgaWYgYXBwcm9wcmlhdGUgKi8KLQlpZiAoY2luZm8tPnByb2dyZXNzICE9IE5VTEwgJiYKLQkgICAgKHJldGNvZGUgPT0gSlBFR19ST1dfQ09NUExFVEVEIHx8IHJldGNvZGUgPT0gSlBFR19SRUFDSEVEX1NPUykpIHsKLQkgIGlmICgrK2NpbmZvLT5wcm9ncmVzcy0+cGFzc19jb3VudGVyID49IGNpbmZvLT5wcm9ncmVzcy0+cGFzc19saW1pdCkgewotCSAgICAvKiBqZG1hc3RlciB1bmRlcmVzdGltYXRlZCBudW1iZXIgb2Ygc2NhbnM7IHJhdGNoZXQgdXAgb25lIHNjYW4gKi8KLQkgICAgY2luZm8tPnByb2dyZXNzLT5wYXNzX2xpbWl0ICs9IChsb25nKSBjaW5mby0+dG90YWxfaU1DVV9yb3dzOwotCSAgfQotCX0KKyAgICAgICAgaW50IHJldGNvZGU7CisgICAgICAgIC8qIENhbGwgcHJvZ3Jlc3MgbW9uaXRvciBob29rIGlmIHByZXNlbnQgKi8KKyAgICAgICAgaWYgKGNpbmZvLT5wcm9ncmVzcyAhPSBOVUxMKQorICAgICAgICAgICgqY2luZm8tPnByb2dyZXNzLT5wcm9ncmVzc19tb25pdG9yKSAoKGpfY29tbW9uX3B0cikgY2luZm8pOworICAgICAgICAvKiBBYnNvcmIgc29tZSBtb3JlIGlucHV0ICovCisgICAgICAgIHJldGNvZGUgPSAoKmNpbmZvLT5pbnB1dGN0bC0+Y29uc3VtZV9pbnB1dCkgKGNpbmZvKTsKKyAgICAgICAgaWYgKHJldGNvZGUgPT0gSlBFR19TVVNQRU5ERUQpCisgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICBpZiAocmV0Y29kZSA9PSBKUEVHX1JFQUNIRURfRU9JKQorICAgICAgICAgIGJyZWFrOworICAgICAgICAvKiBBZHZhbmNlIHByb2dyZXNzIGNvdW50ZXIgaWYgYXBwcm9wcmlhdGUgKi8KKyAgICAgICAgaWYgKGNpbmZvLT5wcm9ncmVzcyAhPSBOVUxMICYmCisgICAgICAgICAgICAocmV0Y29kZSA9PSBKUEVHX1JPV19DT01QTEVURUQgfHwgcmV0Y29kZSA9PSBKUEVHX1JFQUNIRURfU09TKSkgeworICAgICAgICAgIGlmICgrK2NpbmZvLT5wcm9ncmVzcy0+cGFzc19jb3VudGVyID49IGNpbmZvLT5wcm9ncmVzcy0+cGFzc19saW1pdCkgeworICAgICAgICAgICAgLyogamRtYXN0ZXIgdW5kZXJlc3RpbWF0ZWQgbnVtYmVyIG9mIHNjYW5zOyByYXRjaGV0IHVwIG9uZSBzY2FuICovCisgICAgICAgICAgICBjaW5mby0+cHJvZ3Jlc3MtPnBhc3NfbGltaXQgKz0gKGxvbmcpIGNpbmZvLT50b3RhbF9pTUNVX3Jvd3M7CisgICAgICAgICAgfQorICAgICAgICB9CiAgICAgICB9CiAjZWxzZQogICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9OT1RfQ09NUElMRUQpOwpAQCAtMTExLDE2ICsxMTEsMTYgQEAKICAgICAgIEpESU1FTlNJT04gbGFzdF9zY2FubGluZTsKICAgICAgIC8qIENhbGwgcHJvZ3Jlc3MgbW9uaXRvciBob29rIGlmIHByZXNlbnQgKi8KICAgICAgIGlmIChjaW5mby0+cHJvZ3Jlc3MgIT0gTlVMTCkgewotCWNpbmZvLT5wcm9ncmVzcy0+cGFzc19jb3VudGVyID0gKGxvbmcpIGNpbmZvLT5vdXRwdXRfc2NhbmxpbmU7Ci0JY2luZm8tPnByb2dyZXNzLT5wYXNzX2xpbWl0ID0gKGxvbmcpIGNpbmZvLT5vdXRwdXRfaGVpZ2h0OwotCSgqY2luZm8tPnByb2dyZXNzLT5wcm9ncmVzc19tb25pdG9yKSAoKGpfY29tbW9uX3B0cikgY2luZm8pOworICAgICAgICBjaW5mby0+cHJvZ3Jlc3MtPnBhc3NfY291bnRlciA9IChsb25nKSBjaW5mby0+b3V0cHV0X3NjYW5saW5lOworICAgICAgICBjaW5mby0+cHJvZ3Jlc3MtPnBhc3NfbGltaXQgPSAobG9uZykgY2luZm8tPm91dHB1dF9oZWlnaHQ7CisgICAgICAgICgqY2luZm8tPnByb2dyZXNzLT5wcm9ncmVzc19tb25pdG9yKSAoKGpfY29tbW9uX3B0cikgY2luZm8pOwogICAgICAgfQogICAgICAgLyogUHJvY2VzcyBzb21lIGRhdGEgKi8KICAgICAgIGxhc3Rfc2NhbmxpbmUgPSBjaW5mby0+b3V0cHV0X3NjYW5saW5lOwogICAgICAgKCpjaW5mby0+bWFpbi0+cHJvY2Vzc19kYXRhKSAoY2luZm8sIChKU0FNUEFSUkFZKSBOVUxMLAotCQkJCSAgICAmY2luZm8tPm91dHB1dF9zY2FubGluZSwgKEpESU1FTlNJT04pIDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNpbmZvLT5vdXRwdXRfc2NhbmxpbmUsIChKRElNRU5TSU9OKSAwKTsKICAgICAgIGlmIChjaW5mby0+b3V0cHV0X3NjYW5saW5lID09IGxhc3Rfc2NhbmxpbmUpCi0JcmV0dXJuIEZBTFNFOwkJLyogTm8gcHJvZ3Jlc3MgbWFkZSwgbXVzdCBzdXNwZW5kICovCisgICAgICAgIHJldHVybiBGQUxTRTsgICAgICAgICAgIC8qIE5vIHByb2dyZXNzIG1hZGUsIG11c3Qgc3VzcGVuZCAqLwogICAgIH0KICAgICAvKiBGaW5pc2ggdXAgZHVtbXkgcGFzcywgYW5kIHNldCB1cCBmb3IgYW5vdGhlciBvbmUgKi8KICAgICAoKmNpbmZvLT5tYXN0ZXItPmZpbmlzaF9vdXRwdXRfcGFzcykgKGNpbmZvKTsKQEAgLTE1Myw3ICsxNTMsNyBAQAogCiBHTE9CQUwoSkRJTUVOU0lPTikKIGpwZWdfcmVhZF9zY2FubGluZXMgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QQVJSQVkgc2NhbmxpbmVzLAotCQkgICAgIEpESU1FTlNJT04gbWF4X2xpbmVzKQorICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBtYXhfbGluZXMpCiB7CiAgIEpESU1FTlNJT04gcm93X2N0cjsKIApAQCAtMTg2LDcgKzE4Niw3IEBACiAKIEdMT0JBTChKRElNRU5TSU9OKQoganBlZ19yZWFkX3Jhd19kYXRhIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUElNQUdFIGRhdGEsCi0JCSAgICBKRElNRU5TSU9OIG1heF9saW5lcykKKyAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBtYXhfbGluZXMpCiB7CiAgIEpESU1FTlNJT04gbGluZXNfcGVyX2lNQ1Vfcm93OwogCkBAIC0yMTEsNyArMjExLDcgQEAKIAogICAvKiBEZWNvbXByZXNzIGRpcmVjdGx5IGludG8gdXNlcidzIGJ1ZmZlci4gKi8KICAgaWYgKCEgKCpjaW5mby0+Y29lZi0+ZGVjb21wcmVzc19kYXRhKSAoY2luZm8sIGRhdGEpKQotICAgIHJldHVybiAwOwkJCS8qIHN1c3BlbnNpb24gZm9yY2VkLCBjYW4gZG8gbm90aGluZyBtb3JlICovCisgICAgcmV0dXJuIDA7ICAgICAgICAgICAgICAgICAgIC8qIHN1c3BlbnNpb24gZm9yY2VkLCBjYW4gZG8gbm90aGluZyBtb3JlICovCiAKICAgLyogT0ssIHdlIHByb2Nlc3NlZCBvbmUgaU1DVSByb3cuICovCiAgIGNpbmZvLT5vdXRwdXRfc2NhbmxpbmUgKz0gbGluZXNfcGVyX2lNQ1Vfcm93OwpAQCAtMjY3LDkgKzI2Nyw5IEBACiAgIH0KICAgLyogUmVhZCBtYXJrZXJzIGxvb2tpbmcgZm9yIFNPUyBvciBFT0kgKi8KICAgd2hpbGUgKGNpbmZvLT5pbnB1dF9zY2FuX251bWJlciA8PSBjaW5mby0+b3V0cHV0X3NjYW5fbnVtYmVyICYmCi0JICEgY2luZm8tPmlucHV0Y3RsLT5lb2lfcmVhY2hlZCkgeworICAgICAgICAgISBjaW5mby0+aW5wdXRjdGwtPmVvaV9yZWFjaGVkKSB7CiAgICAgaWYgKCgqY2luZm8tPmlucHV0Y3RsLT5jb25zdW1lX2lucHV0KSAoY2luZm8pID09IEpQRUdfU1VTUEVOREVEKQotICAgICAgcmV0dXJuIEZBTFNFOwkJLyogU3VzcGVuZCwgY29tZSBiYWNrIGxhdGVyICovCisgICAgICByZXR1cm4gRkFMU0U7ICAgICAgICAgICAgIC8qIFN1c3BlbmQsIGNvbWUgYmFjayBsYXRlciAqLwogICB9CiAgIGNpbmZvLT5nbG9iYWxfc3RhdGUgPSBEU1RBVEVfQlVGSU1BR0U7CiAgIHJldHVybiBUUlVFOwpkaWZmIC0tZ2l0IGEvamRhcml0aC5jIGIvamRhcml0aC5jCmluZGV4IGQ1NTY3MzMuLmI5NDVkNjQgMTAwNjQ0Ci0tLSBhL2pkYXJpdGguYworKysgYi9qZGFyaXRoLmMKQEAgLTMyLDcgKzMyLDcgQEAKICAgaW50IGxhc3RfZGNfdmFsW01BWF9DT01QU19JTl9TQ0FOXTsgLyogbGFzdCBEQyBjb2VmIGZvciBlYWNoIGNvbXBvbmVudCAqLwogICBpbnQgZGNfY29udGV4dFtNQVhfQ09NUFNfSU5fU0NBTl07IC8qIGNvbnRleHQgaW5kZXggZm9yIERDIGNvbmRpdGlvbmluZyAqLwogCi0gIHVuc2lnbmVkIGludCByZXN0YXJ0c190b19nbzsJLyogTUNVcyBsZWZ0IGluIHRoaXMgcmVzdGFydCBpbnRlcnZhbCAqLworICB1bnNpZ25lZCBpbnQgcmVzdGFydHNfdG9fZ287ICAvKiBNQ1VzIGxlZnQgaW4gdGhpcyByZXN0YXJ0IGludGVydmFsICovCiAKICAgLyogUG9pbnRlcnMgdG8gc3RhdGlzdGljcyBhcmVhcyAodGhlc2Ugd29ya3NwYWNlcyBoYXZlIGltYWdlIGxpZmVzcGFuKSAqLwogICB1bnNpZ25lZCBjaGFyICogZGNfc3RhdHNbTlVNX0FSSVRIX1RCTFNdOwpAQCAtMTE1LDMyICsxMTUsMzIgQEAKICAgICBpZiAoLS1lLT5jdCA8IDApIHsKICAgICAgIC8qIE5lZWQgdG8gZmV0Y2ggbmV4dCBkYXRhIGJ5dGUgKi8KICAgICAgIGlmIChjaW5mby0+dW5yZWFkX21hcmtlcikKLQlkYXRhID0gMDsJCS8qIHN0dWZmIHplcm8gZGF0YSAqLworICAgICAgICBkYXRhID0gMDsgICAgICAgICAgICAgICAvKiBzdHVmZiB6ZXJvIGRhdGEgKi8KICAgICAgIGVsc2UgewotCWRhdGEgPSBnZXRfYnl0ZShjaW5mbyk7CS8qIHJlYWQgbmV4dCBpbnB1dCBieXRlICovCi0JaWYgKGRhdGEgPT0gMHhGRikgewkvKiB6ZXJvIHN0dWZmIG9yIG1hcmtlciBjb2RlICovCi0JICBkbyBkYXRhID0gZ2V0X2J5dGUoY2luZm8pOwotCSAgd2hpbGUgKGRhdGEgPT0gMHhGRik7CS8qIHN3YWxsb3cgZXh0cmEgMHhGRiBieXRlcyAqLwotCSAgaWYgKGRhdGEgPT0gMCkKLQkgICAgZGF0YSA9IDB4RkY7CS8qIGRpc2NhcmQgc3R1ZmZlZCB6ZXJvIGJ5dGUgKi8KLQkgIGVsc2UgewotCSAgICAvKiBOb3RlOiBEaWZmZXJlbnQgZnJvbSB0aGUgSHVmZm1hbiBkZWNvZGVyLCBoaXR0aW5nCi0JICAgICAqIGEgbWFya2VyIHdoaWxlIHByb2Nlc3NpbmcgdGhlIGNvbXByZXNzZWQgZGF0YQotCSAgICAgKiBzZWdtZW50IGlzIGxlZ2FsIGluIGFyaXRobWV0aWMgY29kaW5nLgotCSAgICAgKiBUaGUgY29udmVudGlvbiBpcyB0byBzdXBwbHkgemVybyBkYXRhCi0JICAgICAqIHRoZW4gdW50aWwgZGVjb2RpbmcgaXMgY29tcGxldGUuCi0JICAgICAqLwotCSAgICBjaW5mby0+dW5yZWFkX21hcmtlciA9IGRhdGE7Ci0JICAgIGRhdGEgPSAwOwotCSAgfQotCX0KKyAgICAgICAgZGF0YSA9IGdldF9ieXRlKGNpbmZvKTsgLyogcmVhZCBuZXh0IGlucHV0IGJ5dGUgKi8KKyAgICAgICAgaWYgKGRhdGEgPT0gMHhGRikgeyAgICAgLyogemVybyBzdHVmZiBvciBtYXJrZXIgY29kZSAqLworICAgICAgICAgIGRvIGRhdGEgPSBnZXRfYnl0ZShjaW5mbyk7CisgICAgICAgICAgd2hpbGUgKGRhdGEgPT0gMHhGRik7IC8qIHN3YWxsb3cgZXh0cmEgMHhGRiBieXRlcyAqLworICAgICAgICAgIGlmIChkYXRhID09IDApCisgICAgICAgICAgICBkYXRhID0gMHhGRjsgICAgICAgIC8qIGRpc2NhcmQgc3R1ZmZlZCB6ZXJvIGJ5dGUgKi8KKyAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8qIE5vdGU6IERpZmZlcmVudCBmcm9tIHRoZSBIdWZmbWFuIGRlY29kZXIsIGhpdHRpbmcKKyAgICAgICAgICAgICAqIGEgbWFya2VyIHdoaWxlIHByb2Nlc3NpbmcgdGhlIGNvbXByZXNzZWQgZGF0YQorICAgICAgICAgICAgICogc2VnbWVudCBpcyBsZWdhbCBpbiBhcml0aG1ldGljIGNvZGluZy4KKyAgICAgICAgICAgICAqIFRoZSBjb252ZW50aW9uIGlzIHRvIHN1cHBseSB6ZXJvIGRhdGEKKyAgICAgICAgICAgICAqIHRoZW4gdW50aWwgZGVjb2RpbmcgaXMgY29tcGxldGUuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGNpbmZvLT51bnJlYWRfbWFya2VyID0gZGF0YTsKKyAgICAgICAgICAgIGRhdGEgPSAwOworICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgfQogICAgICAgZS0+YyA9IChlLT5jIDw8IDgpIHwgZGF0YTsgLyogaW5zZXJ0IGRhdGEgaW50byBDIHJlZ2lzdGVyICovCi0gICAgICBpZiAoKGUtPmN0ICs9IDgpIDwgMCkJIC8qIHVwZGF0ZSBiaXQgc2hpZnQgY291bnRlciAqLwotCS8qIE5lZWQgbW9yZSBpbml0aWFsIGJ5dGVzICovCi0JaWYgKCsrZS0+Y3QgPT0gMCkKLQkgIC8qIEdvdCAyIGluaXRpYWwgYnl0ZXMgLT4gcmUtaW5pdCBBIGFuZCBleGl0IGxvb3AgKi8KLQkgIGUtPmEgPSAweDgwMDBMOyAvKiA9PiBlLT5hID0gMHgxMDAwMEwgYWZ0ZXIgbG9vcCBleGl0ICovCisgICAgICBpZiAoKGUtPmN0ICs9IDgpIDwgMCkgICAgICAvKiB1cGRhdGUgYml0IHNoaWZ0IGNvdW50ZXIgKi8KKyAgICAgICAgLyogTmVlZCBtb3JlIGluaXRpYWwgYnl0ZXMgKi8KKyAgICAgICAgaWYgKCsrZS0+Y3QgPT0gMCkKKyAgICAgICAgICAvKiBHb3QgMiBpbml0aWFsIGJ5dGVzIC0+IHJlLWluaXQgQSBhbmQgZXhpdCBsb29wICovCisgICAgICAgICAgZS0+YSA9IDB4ODAwMEw7IC8qID0+IGUtPmEgPSAweDEwMDAwTCBhZnRlciBsb29wIGV4aXQgKi8KICAgICB9CiAgICAgZS0+YSA8PD0gMTsKICAgfQpAQCAtMTQ5LDkgKzE0OSw5IEBACiAgICAqIFFlIHZhbHVlcyBhbmQgcHJvYmFiaWxpdHkgZXN0aW1hdGlvbiBzdGF0ZSBtYWNoaW5lCiAgICAqLwogICBzdiA9ICpzdDsKLSAgcWUgPSBqcGVnX2FyaXRhYltzdiAmIDB4N0ZdOwkvKiA9PiBRZV9WYWx1ZSAqLwotICBubCA9IHFlICYgMHhGRjsgcWUgPj49IDg7CS8qIE5leHRfSW5kZXhfTFBTICsgU3dpdGNoX01QUyAqLwotICBubSA9IHFlICYgMHhGRjsgcWUgPj49IDg7CS8qIE5leHRfSW5kZXhfTVBTICovCisgIHFlID0ganBlZ19hcml0YWJbc3YgJiAweDdGXTsgIC8qID0+IFFlX1ZhbHVlICovCisgIG5sID0gcWUgJiAweEZGOyBxZSA+Pj0gODsgICAgIC8qIE5leHRfSW5kZXhfTFBTICsgU3dpdGNoX01QUyAqLworICBubSA9IHFlICYgMHhGRjsgcWUgPj49IDg7ICAgICAvKiBOZXh0X0luZGV4X01QUyAqLwogCiAgIC8qIERlY29kZSAmIGVzdGltYXRpb24gcHJvY2VkdXJlcyBwZXIgc2VjdGlvbnMgRC4yLjQgJiBELjIuNSAqLwogICB0ZW1wID0gZS0+YSAtIHFlOwpAQCAtMTYyLDE5ICsxNjIsMTkgQEAKICAgICAvKiBDb25kaXRpb25hbCBMUFMgKGxlc3MgcHJvYmFibGUgc3ltYm9sKSBleGNoYW5nZSAqLwogICAgIGlmIChlLT5hIDwgcWUpIHsKICAgICAgIGUtPmEgPSBxZTsKLSAgICAgICpzdCA9IChzdiAmIDB4ODApIF4gbm07CS8qIEVzdGltYXRlX2FmdGVyX01QUyAqLworICAgICAgKnN0ID0gKHN2ICYgMHg4MCkgXiBubTsgICAvKiBFc3RpbWF0ZV9hZnRlcl9NUFMgKi8KICAgICB9IGVsc2UgewogICAgICAgZS0+YSA9IHFlOwotICAgICAgKnN0ID0gKHN2ICYgMHg4MCkgXiBubDsJLyogRXN0aW1hdGVfYWZ0ZXJfTFBTICovCi0gICAgICBzdiBePSAweDgwOwkJLyogRXhjaGFuZ2UgTFBTL01QUyAqLworICAgICAgKnN0ID0gKHN2ICYgMHg4MCkgXiBubDsgICAvKiBFc3RpbWF0ZV9hZnRlcl9MUFMgKi8KKyAgICAgIHN2IF49IDB4ODA7ICAgICAgICAgICAgICAgLyogRXhjaGFuZ2UgTFBTL01QUyAqLwogICAgIH0KICAgfSBlbHNlIGlmIChlLT5hIDwgMHg4MDAwTCkgewogICAgIC8qIENvbmRpdGlvbmFsIE1QUyAobW9yZSBwcm9iYWJsZSBzeW1ib2wpIGV4Y2hhbmdlICovCiAgICAgaWYgKGUtPmEgPCBxZSkgewotICAgICAgKnN0ID0gKHN2ICYgMHg4MCkgXiBubDsJLyogRXN0aW1hdGVfYWZ0ZXJfTFBTICovCi0gICAgICBzdiBePSAweDgwOwkJLyogRXhjaGFuZ2UgTFBTL01QUyAqLworICAgICAgKnN0ID0gKHN2ICYgMHg4MCkgXiBubDsgICAvKiBFc3RpbWF0ZV9hZnRlcl9MUFMgKi8KKyAgICAgIHN2IF49IDB4ODA7ICAgICAgICAgICAgICAgLyogRXhjaGFuZ2UgTFBTL01QUyAqLwogICAgIH0gZWxzZSB7Ci0gICAgICAqc3QgPSAoc3YgJiAweDgwKSBeIG5tOwkvKiBFc3RpbWF0ZV9hZnRlcl9NUFMgKi8KKyAgICAgICpzdCA9IChzdiAmIDB4ODApIF4gbm07ICAgLyogRXN0aW1hdGVfYWZ0ZXJfTVBTICovCiAgICAgfQogICB9CiAKQEAgLTIxNCw3ICsyMTQsNyBAQAogICAvKiBSZXNldCBhcml0aG1ldGljIGRlY29kaW5nIHZhcmlhYmxlcyAqLwogICBlbnRyb3B5LT5jID0gMDsKICAgZW50cm9weS0+YSA9IDA7Ci0gIGVudHJvcHktPmN0ID0gLTE2OwkvKiBmb3JjZSByZWFkaW5nIDIgaW5pdGlhbCBieXRlcyB0byBmaWxsIEMgKi8KKyAgZW50cm9weS0+Y3QgPSAtMTY7ICAgIC8qIGZvcmNlIHJlYWRpbmcgMiBpbml0aWFsIGJ5dGVzIHRvIGZpbGwgQyAqLwogCiAgIC8qIFJlc2V0IHJlc3RhcnQgY291bnRlciAqLwogICBlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9IGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsOwpAQCAtMjUzLDcgKzI1Myw3IEBACiAgICAgZW50cm9weS0+cmVzdGFydHNfdG9fZ28tLTsKICAgfQogCi0gIGlmIChlbnRyb3B5LT5jdCA9PSAtMSkgcmV0dXJuIFRSVUU7CS8qIGlmIGVycm9yIGRvIG5vdGhpbmcgKi8KKyAgaWYgKGVudHJvcHktPmN0ID09IC0xKSByZXR1cm4gVFJVRTsgICAvKiBpZiBlcnJvciBkbyBub3RoaW5nICovCiAKICAgLyogT3V0ZXIgbG9vcCBoYW5kbGVzIGVhY2ggYmxvY2sgaW4gdGhlIE1DVSAqLwogCkBAIC0yNzcsMjggKzI3NywyOCBAQAogICAgICAgc3QgKz0gMjsgc3QgKz0gc2lnbjsKICAgICAgIC8qIEZpZ3VyZSBGLjIzOiBEZWNvZGluZyB0aGUgbWFnbml0dWRlIGNhdGVnb3J5IG9mIHYgKi8KICAgICAgIGlmICgobSA9IGFyaXRoX2RlY29kZShjaW5mbywgc3QpKSAhPSAwKSB7Ci0Jc3QgPSBlbnRyb3B5LT5kY19zdGF0c1t0YmxdICsgMjA7CS8qIFRhYmxlIEYuNDogWDEgPSAyMCAqLwotCXdoaWxlIChhcml0aF9kZWNvZGUoY2luZm8sIHN0KSkgewotCSAgaWYgKChtIDw8PSAxKSA9PSAweDgwMDApIHsKLQkgICAgV0FSTk1TKGNpbmZvLCBKV1JOX0FSSVRIX0JBRF9DT0RFKTsKLQkgICAgZW50cm9weS0+Y3QgPSAtMTsJCQkvKiBtYWduaXR1ZGUgb3ZlcmZsb3cgKi8KLQkgICAgcmV0dXJuIFRSVUU7Ci0JICB9Ci0JICBzdCArPSAxOwotCX0KKyAgICAgICAgc3QgPSBlbnRyb3B5LT5kY19zdGF0c1t0YmxdICsgMjA7ICAgICAgIC8qIFRhYmxlIEYuNDogWDEgPSAyMCAqLworICAgICAgICB3aGlsZSAoYXJpdGhfZGVjb2RlKGNpbmZvLCBzdCkpIHsKKyAgICAgICAgICBpZiAoKG0gPDw9IDEpID09IDB4ODAwMCkgeworICAgICAgICAgICAgV0FSTk1TKGNpbmZvLCBKV1JOX0FSSVRIX0JBRF9DT0RFKTsKKyAgICAgICAgICAgIGVudHJvcHktPmN0ID0gLTE7ICAgICAgICAgICAgICAgICAgIC8qIG1hZ25pdHVkZSBvdmVyZmxvdyAqLworICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgICAgfQorICAgICAgICAgIHN0ICs9IDE7CisgICAgICAgIH0KICAgICAgIH0KICAgICAgIC8qIFNlY3Rpb24gRi4xLjQuNC4xLjI6IEVzdGFibGlzaCBkY19jb250ZXh0IGNvbmRpdGlvbmluZyBjYXRlZ29yeSAqLwogICAgICAgaWYgKG0gPCAoaW50KSAoKDFMIDw8IGNpbmZvLT5hcml0aF9kY19MW3RibF0pID4+IDEpKQotCWVudHJvcHktPmRjX2NvbnRleHRbY2ldID0gMDsJCSAgIC8qIHplcm8gZGlmZiBjYXRlZ29yeSAqLworICAgICAgICBlbnRyb3B5LT5kY19jb250ZXh0W2NpXSA9IDA7ICAgICAgICAgICAgICAgLyogemVybyBkaWZmIGNhdGVnb3J5ICovCiAgICAgICBlbHNlIGlmIChtID4gKGludCkgKCgxTCA8PCBjaW5mby0+YXJpdGhfZGNfVVt0YmxdKSA+PiAxKSkKLQllbnRyb3B5LT5kY19jb250ZXh0W2NpXSA9IDEyICsgKHNpZ24gKiA0KTsgLyogbGFyZ2UgZGlmZiBjYXRlZ29yeSAqLworICAgICAgICBlbnRyb3B5LT5kY19jb250ZXh0W2NpXSA9IDEyICsgKHNpZ24gKiA0KTsgLyogbGFyZ2UgZGlmZiBjYXRlZ29yeSAqLwogICAgICAgZWxzZQotCWVudHJvcHktPmRjX2NvbnRleHRbY2ldID0gNCArIChzaWduICogNCk7ICAvKiBzbWFsbCBkaWZmIGNhdGVnb3J5ICovCisgICAgICAgIGVudHJvcHktPmRjX2NvbnRleHRbY2ldID0gNCArIChzaWduICogNCk7ICAvKiBzbWFsbCBkaWZmIGNhdGVnb3J5ICovCiAgICAgICB2ID0gbTsKICAgICAgIC8qIEZpZ3VyZSBGLjI0OiBEZWNvZGluZyB0aGUgbWFnbml0dWRlIGJpdCBwYXR0ZXJuIG9mIHYgKi8KICAgICAgIHN0ICs9IDE0OwogICAgICAgd2hpbGUgKG0gPj49IDEpCi0JaWYgKGFyaXRoX2RlY29kZShjaW5mbywgc3QpKSB2IHw9IG07CisgICAgICAgIGlmIChhcml0aF9kZWNvZGUoY2luZm8sIHN0KSkgdiB8PSBtOwogICAgICAgdiArPSAxOyBpZiAoc2lnbikgdiA9IC12OwogICAgICAgZW50cm9weS0+bGFzdF9kY192YWxbY2ldICs9IHY7CiAgICAgfQpAQCAtMzMyLDcgKzMzMiw3IEBACiAgICAgZW50cm9weS0+cmVzdGFydHNfdG9fZ28tLTsKICAgfQogCi0gIGlmIChlbnRyb3B5LT5jdCA9PSAtMSkgcmV0dXJuIFRSVUU7CS8qIGlmIGVycm9yIGRvIG5vdGhpbmcgKi8KKyAgaWYgKGVudHJvcHktPmN0ID09IC0xKSByZXR1cm4gVFJVRTsgICAvKiBpZiBlcnJvciBkbyBub3RoaW5nICovCiAKICAgLyogVGhlcmUgaXMgYWx3YXlzIG9ubHkgb25lIGJsb2NrIHBlciBNQ1UgKi8KICAgYmxvY2sgPSBNQ1VfZGF0YVswXTsKQEAgLTM0MywxMyArMzQzLDEzIEBACiAgIC8qIEZpZ3VyZSBGLjIwOiBEZWNvZGVfQUNfY29lZmZpY2llbnRzICovCiAgIGZvciAoayA9IGNpbmZvLT5TczsgayA8PSBjaW5mby0+U2U7IGsrKykgewogICAgIHN0ID0gZW50cm9weS0+YWNfc3RhdHNbdGJsXSArIDMgKiAoayAtIDEpOwotICAgIGlmIChhcml0aF9kZWNvZGUoY2luZm8sIHN0KSkgYnJlYWs7CQkvKiBFT0IgZmxhZyAqLworICAgIGlmIChhcml0aF9kZWNvZGUoY2luZm8sIHN0KSkgYnJlYWs7ICAgICAgICAgLyogRU9CIGZsYWcgKi8KICAgICB3aGlsZSAoYXJpdGhfZGVjb2RlKGNpbmZvLCBzdCArIDEpID09IDApIHsKICAgICAgIHN0ICs9IDM7IGsrKzsKICAgICAgIGlmIChrID4gY2luZm8tPlNlKSB7Ci0JV0FSTk1TKGNpbmZvLCBKV1JOX0FSSVRIX0JBRF9DT0RFKTsKLQllbnRyb3B5LT5jdCA9IC0xOwkJCS8qIHNwZWN0cmFsIG92ZXJmbG93ICovCi0JcmV0dXJuIFRSVUU7CisgICAgICAgIFdBUk5NUyhjaW5mbywgSldSTl9BUklUSF9CQURfQ09ERSk7CisgICAgICAgIGVudHJvcHktPmN0ID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAvKiBzcGVjdHJhbCBvdmVyZmxvdyAqLworICAgICAgICByZXR1cm4gVFJVRTsKICAgICAgIH0KICAgICB9CiAgICAgLyogRmlndXJlIEYuMjE6IERlY29kaW5nIG5vbnplcm8gdmFsdWUgdiAqLwpAQCAtMzU5LDE3ICszNTksMTcgQEAKICAgICAvKiBGaWd1cmUgRi4yMzogRGVjb2RpbmcgdGhlIG1hZ25pdHVkZSBjYXRlZ29yeSBvZiB2ICovCiAgICAgaWYgKChtID0gYXJpdGhfZGVjb2RlKGNpbmZvLCBzdCkpICE9IDApIHsKICAgICAgIGlmIChhcml0aF9kZWNvZGUoY2luZm8sIHN0KSkgewotCW0gPDw9IDE7Ci0Jc3QgPSBlbnRyb3B5LT5hY19zdGF0c1t0YmxdICsKLQkgICAgIChrIDw9IGNpbmZvLT5hcml0aF9hY19LW3RibF0gPyAxODkgOiAyMTcpOwotCXdoaWxlIChhcml0aF9kZWNvZGUoY2luZm8sIHN0KSkgewotCSAgaWYgKChtIDw8PSAxKSA9PSAweDgwMDApIHsKLQkgICAgV0FSTk1TKGNpbmZvLCBKV1JOX0FSSVRIX0JBRF9DT0RFKTsKLQkgICAgZW50cm9weS0+Y3QgPSAtMTsJCQkvKiBtYWduaXR1ZGUgb3ZlcmZsb3cgKi8KLQkgICAgcmV0dXJuIFRSVUU7Ci0JICB9Ci0JICBzdCArPSAxOwotCX0KKyAgICAgICAgbSA8PD0gMTsKKyAgICAgICAgc3QgPSBlbnRyb3B5LT5hY19zdGF0c1t0YmxdICsKKyAgICAgICAgICAgICAoayA8PSBjaW5mby0+YXJpdGhfYWNfS1t0YmxdID8gMTg5IDogMjE3KTsKKyAgICAgICAgd2hpbGUgKGFyaXRoX2RlY29kZShjaW5mbywgc3QpKSB7CisgICAgICAgICAgaWYgKChtIDw8PSAxKSA9PSAweDgwMDApIHsKKyAgICAgICAgICAgIFdBUk5NUyhjaW5mbywgSldSTl9BUklUSF9CQURfQ09ERSk7CisgICAgICAgICAgICBlbnRyb3B5LT5jdCA9IC0xOyAgICAgICAgICAgICAgICAgICAvKiBtYWduaXR1ZGUgb3ZlcmZsb3cgKi8KKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICAgIH0KKyAgICAgICAgICBzdCArPSAxOworICAgICAgICB9CiAgICAgICB9CiAgICAgfQogICAgIHYgPSBtOwpAQCAtNDA0LDggKzQwNCw4IEBACiAgICAgZW50cm9weS0+cmVzdGFydHNfdG9fZ28tLTsKICAgfQogCi0gIHN0ID0gZW50cm9weS0+Zml4ZWRfYmluOwkvKiB1c2UgZml4ZWQgcHJvYmFiaWxpdHkgZXN0aW1hdGlvbiAqLwotICBwMSA9IDEgPDwgY2luZm8tPkFsOwkJLyogMSBpbiB0aGUgYml0IHBvc2l0aW9uIGJlaW5nIGNvZGVkICovCisgIHN0ID0gZW50cm9weS0+Zml4ZWRfYmluOyAgICAgIC8qIHVzZSBmaXhlZCBwcm9iYWJpbGl0eSBlc3RpbWF0aW9uICovCisgIHAxID0gMSA8PCBjaW5mby0+QWw7ICAgICAgICAgIC8qIDEgaW4gdGhlIGJpdCBwb3NpdGlvbiBiZWluZyBjb2RlZCAqLwogCiAgIC8qIE91dGVyIGxvb3AgaGFuZGxlcyBlYWNoIGJsb2NrIGluIHRoZSBNQ1UgKi8KIApAQCAtNDQwLDE0ICs0NDAsMTQgQEAKICAgICBlbnRyb3B5LT5yZXN0YXJ0c190b19nby0tOwogICB9CiAKLSAgaWYgKGVudHJvcHktPmN0ID09IC0xKSByZXR1cm4gVFJVRTsJLyogaWYgZXJyb3IgZG8gbm90aGluZyAqLworICBpZiAoZW50cm9weS0+Y3QgPT0gLTEpIHJldHVybiBUUlVFOyAgIC8qIGlmIGVycm9yIGRvIG5vdGhpbmcgKi8KIAogICAvKiBUaGVyZSBpcyBhbHdheXMgb25seSBvbmUgYmxvY2sgcGVyIE1DVSAqLwogICBibG9jayA9IE1DVV9kYXRhWzBdOwogICB0YmwgPSBjaW5mby0+Y3VyX2NvbXBfaW5mb1swXS0+YWNfdGJsX25vOwogCi0gIHAxID0gMSA8PCBjaW5mby0+QWw7CQkvKiAxIGluIHRoZSBiaXQgcG9zaXRpb24gYmVpbmcgY29kZWQgKi8KLSAgbTEgPSAoLTEpIDw8IGNpbmZvLT5BbDsJLyogLTEgaW4gdGhlIGJpdCBwb3NpdGlvbiBiZWluZyBjb2RlZCAqLworICBwMSA9IDEgPDwgY2luZm8tPkFsOyAgICAgICAgICAvKiAxIGluIHRoZSBiaXQgcG9zaXRpb24gYmVpbmcgY29kZWQgKi8KKyAgbTEgPSAoLTEpIDw8IGNpbmZvLT5BbDsgICAgICAgLyogLTEgaW4gdGhlIGJpdCBwb3NpdGlvbiBiZWluZyBjb2RlZCAqLwogCiAgIC8qIEVzdGFibGlzaCBFT0J4IChwcmV2aW91cyBzdGFnZSBlbmQtb2YtYmxvY2spIGluZGV4ICovCiAgIGZvciAoa2V4ID0gY2luZm8tPlNlOyBrZXggPiAwOyBrZXgtLSkKQEAgLTQ1NiwzMCArNDU2LDMwIEBACiAgIGZvciAoayA9IGNpbmZvLT5TczsgayA8PSBjaW5mby0+U2U7IGsrKykgewogICAgIHN0ID0gZW50cm9weS0+YWNfc3RhdHNbdGJsXSArIDMgKiAoayAtIDEpOwogICAgIGlmIChrID4ga2V4KQotICAgICAgaWYgKGFyaXRoX2RlY29kZShjaW5mbywgc3QpKSBicmVhazsJLyogRU9CIGZsYWcgKi8KKyAgICAgIGlmIChhcml0aF9kZWNvZGUoY2luZm8sIHN0KSkgYnJlYWs7ICAgICAgIC8qIEVPQiBmbGFnICovCiAgICAgZm9yICg7OykgewogICAgICAgdGhpc2NvZWYgPSAqYmxvY2sgKyBqcGVnX25hdHVyYWxfb3JkZXJba107Ci0gICAgICBpZiAoKnRoaXNjb2VmKSB7CQkJCS8qIHByZXZpb3VzbHkgbm9uemVybyBjb2VmICovCi0JaWYgKGFyaXRoX2RlY29kZShjaW5mbywgc3QgKyAyKSkgewotCSAgaWYgKCp0aGlzY29lZiA8IDApCi0JICAgICp0aGlzY29lZiArPSBtMTsKLQkgIGVsc2UKLQkgICAgKnRoaXNjb2VmICs9IHAxOwotCX0KLQlicmVhazsKKyAgICAgIGlmICgqdGhpc2NvZWYpIHsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByZXZpb3VzbHkgbm9uemVybyBjb2VmICovCisgICAgICAgIGlmIChhcml0aF9kZWNvZGUoY2luZm8sIHN0ICsgMikpIHsKKyAgICAgICAgICBpZiAoKnRoaXNjb2VmIDwgMCkKKyAgICAgICAgICAgICp0aGlzY29lZiArPSBtMTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICAqdGhpc2NvZWYgKz0gcDE7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CiAgICAgICB9Ci0gICAgICBpZiAoYXJpdGhfZGVjb2RlKGNpbmZvLCBzdCArIDEpKSB7CS8qIG5ld2x5IG5vbnplcm8gY29lZiAqLwotCWlmIChhcml0aF9kZWNvZGUoY2luZm8sIGVudHJvcHktPmZpeGVkX2JpbikpCi0JICAqdGhpc2NvZWYgPSBtMTsKLQllbHNlCi0JICAqdGhpc2NvZWYgPSBwMTsKLQlicmVhazsKKyAgICAgIGlmIChhcml0aF9kZWNvZGUoY2luZm8sIHN0ICsgMSkpIHsgICAgICAgIC8qIG5ld2x5IG5vbnplcm8gY29lZiAqLworICAgICAgICBpZiAoYXJpdGhfZGVjb2RlKGNpbmZvLCBlbnRyb3B5LT5maXhlZF9iaW4pKQorICAgICAgICAgICp0aGlzY29lZiA9IG0xOworICAgICAgICBlbHNlCisgICAgICAgICAgKnRoaXNjb2VmID0gcDE7CisgICAgICAgIGJyZWFrOwogICAgICAgfQogICAgICAgc3QgKz0gMzsgaysrOwogICAgICAgaWYgKGsgPiBjaW5mby0+U2UpIHsKLQlXQVJOTVMoY2luZm8sIEpXUk5fQVJJVEhfQkFEX0NPREUpOwotCWVudHJvcHktPmN0ID0gLTE7CQkJLyogc3BlY3RyYWwgb3ZlcmZsb3cgKi8KLQlyZXR1cm4gVFJVRTsKKyAgICAgICAgV0FSTk1TKGNpbmZvLCBKV1JOX0FSSVRIX0JBRF9DT0RFKTsKKyAgICAgICAgZW50cm9weS0+Y3QgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgIC8qIHNwZWN0cmFsIG92ZXJmbG93ICovCisgICAgICAgIHJldHVybiBUUlVFOwogICAgICAgfQogICAgIH0KICAgfQpAQCAtNTA5LDcgKzUwOSw3IEBACiAgICAgZW50cm9weS0+cmVzdGFydHNfdG9fZ28tLTsKICAgfQogCi0gIGlmIChlbnRyb3B5LT5jdCA9PSAtMSkgcmV0dXJuIFRSVUU7CS8qIGlmIGVycm9yIGRvIG5vdGhpbmcgKi8KKyAgaWYgKGVudHJvcHktPmN0ID09IC0xKSByZXR1cm4gVFJVRTsgICAvKiBpZiBlcnJvciBkbyBub3RoaW5nICovCiAKICAgLyogT3V0ZXIgbG9vcCBoYW5kbGVzIGVhY2ggYmxvY2sgaW4gdGhlIE1DVSAqLwogCkBAIC01MzUsMjggKzUzNSwyOCBAQAogICAgICAgc3QgKz0gMjsgc3QgKz0gc2lnbjsKICAgICAgIC8qIEZpZ3VyZSBGLjIzOiBEZWNvZGluZyB0aGUgbWFnbml0dWRlIGNhdGVnb3J5IG9mIHYgKi8KICAgICAgIGlmICgobSA9IGFyaXRoX2RlY29kZShjaW5mbywgc3QpKSAhPSAwKSB7Ci0Jc3QgPSBlbnRyb3B5LT5kY19zdGF0c1t0YmxdICsgMjA7CS8qIFRhYmxlIEYuNDogWDEgPSAyMCAqLwotCXdoaWxlIChhcml0aF9kZWNvZGUoY2luZm8sIHN0KSkgewotCSAgaWYgKChtIDw8PSAxKSA9PSAweDgwMDApIHsKLQkgICAgV0FSTk1TKGNpbmZvLCBKV1JOX0FSSVRIX0JBRF9DT0RFKTsKLQkgICAgZW50cm9weS0+Y3QgPSAtMTsJCQkvKiBtYWduaXR1ZGUgb3ZlcmZsb3cgKi8KLQkgICAgcmV0dXJuIFRSVUU7Ci0JICB9Ci0JICBzdCArPSAxOwotCX0KKyAgICAgICAgc3QgPSBlbnRyb3B5LT5kY19zdGF0c1t0YmxdICsgMjA7ICAgICAgIC8qIFRhYmxlIEYuNDogWDEgPSAyMCAqLworICAgICAgICB3aGlsZSAoYXJpdGhfZGVjb2RlKGNpbmZvLCBzdCkpIHsKKyAgICAgICAgICBpZiAoKG0gPDw9IDEpID09IDB4ODAwMCkgeworICAgICAgICAgICAgV0FSTk1TKGNpbmZvLCBKV1JOX0FSSVRIX0JBRF9DT0RFKTsKKyAgICAgICAgICAgIGVudHJvcHktPmN0ID0gLTE7ICAgICAgICAgICAgICAgICAgIC8qIG1hZ25pdHVkZSBvdmVyZmxvdyAqLworICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgICAgfQorICAgICAgICAgIHN0ICs9IDE7CisgICAgICAgIH0KICAgICAgIH0KICAgICAgIC8qIFNlY3Rpb24gRi4xLjQuNC4xLjI6IEVzdGFibGlzaCBkY19jb250ZXh0IGNvbmRpdGlvbmluZyBjYXRlZ29yeSAqLwogICAgICAgaWYgKG0gPCAoaW50KSAoKDFMIDw8IGNpbmZvLT5hcml0aF9kY19MW3RibF0pID4+IDEpKQotCWVudHJvcHktPmRjX2NvbnRleHRbY2ldID0gMDsJCSAgIC8qIHplcm8gZGlmZiBjYXRlZ29yeSAqLworICAgICAgICBlbnRyb3B5LT5kY19jb250ZXh0W2NpXSA9IDA7ICAgICAgICAgICAgICAgLyogemVybyBkaWZmIGNhdGVnb3J5ICovCiAgICAgICBlbHNlIGlmIChtID4gKGludCkgKCgxTCA8PCBjaW5mby0+YXJpdGhfZGNfVVt0YmxdKSA+PiAxKSkKLQllbnRyb3B5LT5kY19jb250ZXh0W2NpXSA9IDEyICsgKHNpZ24gKiA0KTsgLyogbGFyZ2UgZGlmZiBjYXRlZ29yeSAqLworICAgICAgICBlbnRyb3B5LT5kY19jb250ZXh0W2NpXSA9IDEyICsgKHNpZ24gKiA0KTsgLyogbGFyZ2UgZGlmZiBjYXRlZ29yeSAqLwogICAgICAgZWxzZQotCWVudHJvcHktPmRjX2NvbnRleHRbY2ldID0gNCArIChzaWduICogNCk7ICAvKiBzbWFsbCBkaWZmIGNhdGVnb3J5ICovCisgICAgICAgIGVudHJvcHktPmRjX2NvbnRleHRbY2ldID0gNCArIChzaWduICogNCk7ICAvKiBzbWFsbCBkaWZmIGNhdGVnb3J5ICovCiAgICAgICB2ID0gbTsKICAgICAgIC8qIEZpZ3VyZSBGLjI0OiBEZWNvZGluZyB0aGUgbWFnbml0dWRlIGJpdCBwYXR0ZXJuIG9mIHYgKi8KICAgICAgIHN0ICs9IDE0OwogICAgICAgd2hpbGUgKG0gPj49IDEpCi0JaWYgKGFyaXRoX2RlY29kZShjaW5mbywgc3QpKSB2IHw9IG07CisgICAgICAgIGlmIChhcml0aF9kZWNvZGUoY2luZm8sIHN0KSkgdiB8PSBtOwogICAgICAgdiArPSAxOyBpZiAoc2lnbikgdiA9IC12OwogICAgICAgZW50cm9weS0+bGFzdF9kY192YWxbY2ldICs9IHY7CiAgICAgfQpAQCAtNTcwLDE0ICs1NzAsMTQgQEAKICAgICAvKiBGaWd1cmUgRi4yMDogRGVjb2RlX0FDX2NvZWZmaWNpZW50cyAqLwogICAgIGZvciAoayA9IDE7IGsgPD0gRENUU0laRTIgLSAxOyBrKyspIHsKICAgICAgIHN0ID0gZW50cm9weS0+YWNfc3RhdHNbdGJsXSArIDMgKiAoayAtIDEpOwotICAgICAgaWYgKGFyaXRoX2RlY29kZShjaW5mbywgc3QpKSBicmVhazsJLyogRU9CIGZsYWcgKi8KKyAgICAgIGlmIChhcml0aF9kZWNvZGUoY2luZm8sIHN0KSkgYnJlYWs7ICAgICAgIC8qIEVPQiBmbGFnICovCiAgICAgICB3aGlsZSAoYXJpdGhfZGVjb2RlKGNpbmZvLCBzdCArIDEpID09IDApIHsKLQlzdCArPSAzOyBrKys7Ci0JaWYgKGsgPiBEQ1RTSVpFMiAtIDEpIHsKLQkgIFdBUk5NUyhjaW5mbywgSldSTl9BUklUSF9CQURfQ09ERSk7Ci0JICBlbnRyb3B5LT5jdCA9IC0xOwkJCS8qIHNwZWN0cmFsIG92ZXJmbG93ICovCi0JICByZXR1cm4gVFJVRTsKLQl9CisgICAgICAgIHN0ICs9IDM7IGsrKzsKKyAgICAgICAgaWYgKGsgPiBEQ1RTSVpFMiAtIDEpIHsKKyAgICAgICAgICBXQVJOTVMoY2luZm8sIEpXUk5fQVJJVEhfQkFEX0NPREUpOworICAgICAgICAgIGVudHJvcHktPmN0ID0gLTE7ICAgICAgICAgICAgICAgICAgICAgLyogc3BlY3RyYWwgb3ZlcmZsb3cgKi8KKyAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQogICAgICAgfQogICAgICAgLyogRmlndXJlIEYuMjE6IERlY29kaW5nIG5vbnplcm8gdmFsdWUgdiAqLwogICAgICAgLyogRmlndXJlIEYuMjI6IERlY29kaW5nIHRoZSBzaWduIG9mIHYgKi8KQEAgLTU4NSwyNSArNTg1LDI1IEBACiAgICAgICBzdCArPSAyOwogICAgICAgLyogRmlndXJlIEYuMjM6IERlY29kaW5nIHRoZSBtYWduaXR1ZGUgY2F0ZWdvcnkgb2YgdiAqLwogICAgICAgaWYgKChtID0gYXJpdGhfZGVjb2RlKGNpbmZvLCBzdCkpICE9IDApIHsKLQlpZiAoYXJpdGhfZGVjb2RlKGNpbmZvLCBzdCkpIHsKLQkgIG0gPDw9IDE7Ci0JICBzdCA9IGVudHJvcHktPmFjX3N0YXRzW3RibF0gKwotCSAgICAgICAoayA8PSBjaW5mby0+YXJpdGhfYWNfS1t0YmxdID8gMTg5IDogMjE3KTsKLQkgIHdoaWxlIChhcml0aF9kZWNvZGUoY2luZm8sIHN0KSkgewotCSAgICBpZiAoKG0gPDw9IDEpID09IDB4ODAwMCkgewotCSAgICAgIFdBUk5NUyhjaW5mbywgSldSTl9BUklUSF9CQURfQ09ERSk7Ci0JICAgICAgZW50cm9weS0+Y3QgPSAtMTsJCQkvKiBtYWduaXR1ZGUgb3ZlcmZsb3cgKi8KLQkgICAgICByZXR1cm4gVFJVRTsKLQkgICAgfQotCSAgICBzdCArPSAxOwotCSAgfQotCX0KKyAgICAgICAgaWYgKGFyaXRoX2RlY29kZShjaW5mbywgc3QpKSB7CisgICAgICAgICAgbSA8PD0gMTsKKyAgICAgICAgICBzdCA9IGVudHJvcHktPmFjX3N0YXRzW3RibF0gKworICAgICAgICAgICAgICAgKGsgPD0gY2luZm8tPmFyaXRoX2FjX0tbdGJsXSA/IDE4OSA6IDIxNyk7CisgICAgICAgICAgd2hpbGUgKGFyaXRoX2RlY29kZShjaW5mbywgc3QpKSB7CisgICAgICAgICAgICBpZiAoKG0gPDw9IDEpID09IDB4ODAwMCkgeworICAgICAgICAgICAgICBXQVJOTVMoY2luZm8sIEpXUk5fQVJJVEhfQkFEX0NPREUpOworICAgICAgICAgICAgICBlbnRyb3B5LT5jdCA9IC0xOyAgICAgICAgICAgICAgICAgLyogbWFnbml0dWRlIG92ZXJmbG93ICovCisgICAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3QgKz0gMTsKKyAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgIH0KICAgICAgIHYgPSBtOwogICAgICAgLyogRmlndXJlIEYuMjQ6IERlY29kaW5nIHRoZSBtYWduaXR1ZGUgYml0IHBhdHRlcm4gb2YgdiAqLwogICAgICAgc3QgKz0gMTQ7CiAgICAgICB3aGlsZSAobSA+Pj0gMSkKLQlpZiAoYXJpdGhfZGVjb2RlKGNpbmZvLCBzdCkpIHYgfD0gbTsKKyAgICAgICAgaWYgKGFyaXRoX2RlY29kZShjaW5mbywgc3QpKSB2IHw9IG07CiAgICAgICB2ICs9IDE7IGlmIChzaWduKSB2ID0gLXY7CiAgICAgICAoKmJsb2NrKVtqcGVnX25hdHVyYWxfb3JkZXJba11dID0gKEpDT0VGKSB2OwogICAgIH0KQEAgLTYyOCwyNCArNjI4LDI0IEBACiAgICAgLyogVmFsaWRhdGUgcHJvZ3Jlc3NpdmUgc2NhbiBwYXJhbWV0ZXJzICovCiAgICAgaWYgKGNpbmZvLT5TcyA9PSAwKSB7CiAgICAgICBpZiAoY2luZm8tPlNlICE9IDApCi0JZ290byBiYWQ7CisgICAgICAgIGdvdG8gYmFkOwogICAgIH0gZWxzZSB7CiAgICAgICAvKiBuZWVkIG5vdCBjaGVjayBTcy9TZSA8IDAgc2luY2UgdGhleSBjYW1lIGZyb20gdW5zaWduZWQgYnl0ZXMgKi8KICAgICAgIGlmIChjaW5mby0+U2UgPCBjaW5mby0+U3MgfHwgY2luZm8tPlNlID4gRENUU0laRTIgLSAxKQotCWdvdG8gYmFkOworICAgICAgICBnb3RvIGJhZDsKICAgICAgIC8qIEFDIHNjYW5zIG1heSBoYXZlIG9ubHkgb25lIGNvbXBvbmVudCAqLwogICAgICAgaWYgKGNpbmZvLT5jb21wc19pbl9zY2FuICE9IDEpCi0JZ290byBiYWQ7CisgICAgICAgIGdvdG8gYmFkOwogICAgIH0KICAgICBpZiAoY2luZm8tPkFoICE9IDApIHsKICAgICAgIC8qIFN1Y2Nlc3NpdmUgYXBwcm94aW1hdGlvbiByZWZpbmVtZW50IHNjYW46IG11c3QgaGF2ZSBBbCA9IEFoLTEuICovCiAgICAgICBpZiAoY2luZm8tPkFoLTEgIT0gY2luZm8tPkFsKQotCWdvdG8gYmFkOworICAgICAgICBnb3RvIGJhZDsKICAgICB9Ci0gICAgaWYgKGNpbmZvLT5BbCA+IDEzKSB7CS8qIG5lZWQgbm90IGNoZWNrIGZvciA8IDAgKi8KKyAgICBpZiAoY2luZm8tPkFsID4gMTMpIHsgICAgICAgLyogbmVlZCBub3QgY2hlY2sgZm9yIDwgMCAqLwogICAgICAgYmFkOgogICAgICAgRVJSRVhJVDQoY2luZm8sIEpFUlJfQkFEX1BST0dSRVNTSU9OLAotCSAgICAgICBjaW5mby0+U3MsIGNpbmZvLT5TZSwgY2luZm8tPkFoLCBjaW5mby0+QWwpOworICAgICAgICAgICAgICAgY2luZm8tPlNzLCBjaW5mby0+U2UsIGNpbmZvLT5BaCwgY2luZm8tPkFsKTsKICAgICB9CiAgICAgLyogVXBkYXRlIHByb2dyZXNzaW9uIHN0YXR1cywgYW5kIHZlcmlmeSB0aGF0IHNjYW4gb3JkZXIgaXMgbGVnYWwuCiAgICAgICogTm90ZSB0aGF0IGludGVyLXNjYW4gaW5jb25zaXN0ZW5jaWVzIGFyZSB0cmVhdGVkIGFzIHdhcm5pbmdzCkBAIC02NTUsMzIgKzY1NSwzMiBAQAogICAgICAgaW50IGNvZWZpLCBjaW5kZXggPSBjaW5mby0+Y3VyX2NvbXBfaW5mb1tjaV0tPmNvbXBvbmVudF9pbmRleDsKICAgICAgIGludCAqY29lZl9iaXRfcHRyID0gJiBjaW5mby0+Y29lZl9iaXRzW2NpbmRleF1bMF07CiAgICAgICBpZiAoY2luZm8tPlNzICYmIGNvZWZfYml0X3B0clswXSA8IDApIC8qIEFDIHdpdGhvdXQgcHJpb3IgREMgc2NhbiAqLwotCVdBUk5NUzIoY2luZm8sIEpXUk5fQk9HVVNfUFJPR1JFU1NJT04sIGNpbmRleCwgMCk7CisgICAgICAgIFdBUk5NUzIoY2luZm8sIEpXUk5fQk9HVVNfUFJPR1JFU1NJT04sIGNpbmRleCwgMCk7CiAgICAgICBmb3IgKGNvZWZpID0gY2luZm8tPlNzOyBjb2VmaSA8PSBjaW5mby0+U2U7IGNvZWZpKyspIHsKLQlpbnQgZXhwZWN0ZWQgPSAoY29lZl9iaXRfcHRyW2NvZWZpXSA8IDApID8gMCA6IGNvZWZfYml0X3B0cltjb2VmaV07Ci0JaWYgKGNpbmZvLT5BaCAhPSBleHBlY3RlZCkKLQkgIFdBUk5NUzIoY2luZm8sIEpXUk5fQk9HVVNfUFJPR1JFU1NJT04sIGNpbmRleCwgY29lZmkpOwotCWNvZWZfYml0X3B0cltjb2VmaV0gPSBjaW5mby0+QWw7CisgICAgICAgIGludCBleHBlY3RlZCA9IChjb2VmX2JpdF9wdHJbY29lZmldIDwgMCkgPyAwIDogY29lZl9iaXRfcHRyW2NvZWZpXTsKKyAgICAgICAgaWYgKGNpbmZvLT5BaCAhPSBleHBlY3RlZCkKKyAgICAgICAgICBXQVJOTVMyKGNpbmZvLCBKV1JOX0JPR1VTX1BST0dSRVNTSU9OLCBjaW5kZXgsIGNvZWZpKTsKKyAgICAgICAgY29lZl9iaXRfcHRyW2NvZWZpXSA9IGNpbmZvLT5BbDsKICAgICAgIH0KICAgICB9CiAgICAgLyogU2VsZWN0IE1DVSBkZWNvZGluZyByb3V0aW5lICovCiAgICAgaWYgKGNpbmZvLT5BaCA9PSAwKSB7CiAgICAgICBpZiAoY2luZm8tPlNzID09IDApCi0JZW50cm9weS0+cHViLmRlY29kZV9tY3UgPSBkZWNvZGVfbWN1X0RDX2ZpcnN0OworICAgICAgICBlbnRyb3B5LT5wdWIuZGVjb2RlX21jdSA9IGRlY29kZV9tY3VfRENfZmlyc3Q7CiAgICAgICBlbHNlCi0JZW50cm9weS0+cHViLmRlY29kZV9tY3UgPSBkZWNvZGVfbWN1X0FDX2ZpcnN0OworICAgICAgICBlbnRyb3B5LT5wdWIuZGVjb2RlX21jdSA9IGRlY29kZV9tY3VfQUNfZmlyc3Q7CiAgICAgfSBlbHNlIHsKICAgICAgIGlmIChjaW5mby0+U3MgPT0gMCkKLQllbnRyb3B5LT5wdWIuZGVjb2RlX21jdSA9IGRlY29kZV9tY3VfRENfcmVmaW5lOworICAgICAgICBlbnRyb3B5LT5wdWIuZGVjb2RlX21jdSA9IGRlY29kZV9tY3VfRENfcmVmaW5lOwogICAgICAgZWxzZQotCWVudHJvcHktPnB1Yi5kZWNvZGVfbWN1ID0gZGVjb2RlX21jdV9BQ19yZWZpbmU7CisgICAgICAgIGVudHJvcHktPnB1Yi5kZWNvZGVfbWN1ID0gZGVjb2RlX21jdV9BQ19yZWZpbmU7CiAgICAgfQogICB9IGVsc2UgewogICAgIC8qIENoZWNrIHRoYXQgdGhlIHNjYW4gcGFyYW1ldGVycyBTcywgU2UsIEFoL0FsIGFyZSBPSyBmb3Igc2VxdWVudGlhbCBKUEVHLgogICAgICAqIFRoaXMgb3VnaHQgdG8gYmUgYW4gZXJyb3IgY29uZGl0aW9uLCBidXQgd2UgbWFrZSBpdCBhIHdhcm5pbmcuCiAgICAgICovCiAgICAgaWYgKGNpbmZvLT5TcyAhPSAwIHx8IGNpbmZvLT5BaCAhPSAwIHx8IGNpbmZvLT5BbCAhPSAwIHx8Ci0JKGNpbmZvLT5TZSA8IERDVFNJWkUyICYmIGNpbmZvLT5TZSAhPSBEQ1RTSVpFMiAtIDEpKQorICAgICAgICAoY2luZm8tPlNlIDwgRENUU0laRTIgJiYgY2luZm8tPlNlICE9IERDVFNJWkUyIC0gMSkpCiAgICAgICBXQVJOTVMoY2luZm8sIEpXUk5fTk9UX1NFUVVFTlRJQUwpOwogICAgIC8qIFNlbGVjdCBNQ1UgZGVjb2Rpbmcgcm91dGluZSAqLwogICAgIGVudHJvcHktPnB1Yi5kZWNvZGVfbWN1ID0gZGVjb2RlX21jdTsKQEAgLTY5MiwxMCArNjkyLDEwIEBACiAgICAgaWYgKCEgY2luZm8tPnByb2dyZXNzaXZlX21vZGUgfHwgKGNpbmZvLT5TcyA9PSAwICYmIGNpbmZvLT5BaCA9PSAwKSkgewogICAgICAgdGJsID0gY29tcHB0ci0+ZGNfdGJsX25vOwogICAgICAgaWYgKHRibCA8IDAgfHwgdGJsID49IE5VTV9BUklUSF9UQkxTKQotCUVSUkVYSVQxKGNpbmZvLCBKRVJSX05PX0FSSVRIX1RBQkxFLCB0YmwpOworICAgICAgICBFUlJFWElUMShjaW5mbywgSkVSUl9OT19BUklUSF9UQUJMRSwgdGJsKTsKICAgICAgIGlmIChlbnRyb3B5LT5kY19zdGF0c1t0YmxdID09IE5VTEwpCi0JZW50cm9weS0+ZGNfc3RhdHNbdGJsXSA9ICh1bnNpZ25lZCBjaGFyICopICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpCi0JICAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLCBEQ19TVEFUX0JJTlMpOworICAgICAgICBlbnRyb3B5LT5kY19zdGF0c1t0YmxdID0gKHVuc2lnbmVkIGNoYXIgKikgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkKKyAgICAgICAgICAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLCBEQ19TVEFUX0JJTlMpOwogICAgICAgTUVNWkVSTyhlbnRyb3B5LT5kY19zdGF0c1t0YmxdLCBEQ19TVEFUX0JJTlMpOwogICAgICAgLyogSW5pdGlhbGl6ZSBEQyBwcmVkaWN0aW9ucyB0byAwICovCiAgICAgICBlbnRyb3B5LT5sYXN0X2RjX3ZhbFtjaV0gPSAwOwpAQCAtNzA0LDEwICs3MDQsMTAgQEAKICAgICBpZiAoISBjaW5mby0+cHJvZ3Jlc3NpdmVfbW9kZSB8fCBjaW5mby0+U3MpIHsKICAgICAgIHRibCA9IGNvbXBwdHItPmFjX3RibF9ubzsKICAgICAgIGlmICh0YmwgPCAwIHx8IHRibCA+PSBOVU1fQVJJVEhfVEJMUykKLQlFUlJFWElUMShjaW5mbywgSkVSUl9OT19BUklUSF9UQUJMRSwgdGJsKTsKKyAgICAgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfTk9fQVJJVEhfVEFCTEUsIHRibCk7CiAgICAgICBpZiAoZW50cm9weS0+YWNfc3RhdHNbdGJsXSA9PSBOVUxMKQotCWVudHJvcHktPmFjX3N0YXRzW3RibF0gPSAodW5zaWduZWQgY2hhciAqKSAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKQotCSAgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwgQUNfU1RBVF9CSU5TKTsKKyAgICAgICAgZW50cm9weS0+YWNfc3RhdHNbdGJsXSA9ICh1bnNpZ25lZCBjaGFyICopICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpCisgICAgICAgICAgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwgQUNfU1RBVF9CSU5TKTsKICAgICAgIE1FTVpFUk8oZW50cm9weS0+YWNfc3RhdHNbdGJsXSwgQUNfU1RBVF9CSU5TKTsKICAgICB9CiAgIH0KQEAgLTcxNSw3ICs3MTUsNyBAQAogICAvKiBJbml0aWFsaXplIGFyaXRobWV0aWMgZGVjb2RpbmcgdmFyaWFibGVzICovCiAgIGVudHJvcHktPmMgPSAwOwogICBlbnRyb3B5LT5hID0gMDsKLSAgZW50cm9weS0+Y3QgPSAtMTY7CS8qIGZvcmNlIHJlYWRpbmcgMiBpbml0aWFsIGJ5dGVzIHRvIGZpbGwgQyAqLworICBlbnRyb3B5LT5jdCA9IC0xNjsgICAgLyogZm9yY2UgcmVhZGluZyAyIGluaXRpYWwgYnl0ZXMgdG8gZmlsbCBDICovCiAKICAgLyogSW5pdGlhbGl6ZSByZXN0YXJ0IGNvdW50ZXIgKi8KICAgZW50cm9weS0+cmVzdGFydHNfdG9fZ28gPSBjaW5mby0+cmVzdGFydF9pbnRlcnZhbDsKQEAgLTczNCw3ICs3MzQsNyBAQAogCiAgIGVudHJvcHkgPSAoYXJpdGhfZW50cm9weV9wdHIpCiAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKLQkJCQlTSVpFT0YoYXJpdGhfZW50cm9weV9kZWNvZGVyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJWkVPRihhcml0aF9lbnRyb3B5X2RlY29kZXIpKTsKICAgY2luZm8tPmVudHJvcHkgPSAoc3RydWN0IGpwZWdfZW50cm9weV9kZWNvZGVyICopIGVudHJvcHk7CiAgIGVudHJvcHktPnB1Yi5zdGFydF9wYXNzID0gc3RhcnRfcGFzczsKIApAQCAtNzUyLDEwICs3NTIsMTAgQEAKICAgICBpbnQgKmNvZWZfYml0X3B0ciwgY2k7CiAgICAgY2luZm8tPmNvZWZfYml0cyA9IChpbnQgKCopW0RDVFNJWkUyXSkKICAgICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCi0JCQkJICBjaW5mby0+bnVtX2NvbXBvbmVudHMqRENUU0laRTIqU0laRU9GKGludCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpbmZvLT5udW1fY29tcG9uZW50cypEQ1RTSVpFMipTSVpFT0YoaW50KSk7CiAgICAgY29lZl9iaXRfcHRyID0gJiBjaW5mby0+Y29lZl9iaXRzWzBdWzBdOwotICAgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsgY2krKykgCisgICAgZm9yIChjaSA9IDA7IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOyBjaSsrKQogICAgICAgZm9yIChpID0gMDsgaSA8IERDVFNJWkUyOyBpKyspCi0JKmNvZWZfYml0X3B0cisrID0gLTE7CisgICAgICAgICpjb2VmX2JpdF9wdHIrKyA9IC0xOwogICB9CiB9CmRpZmYgLS1naXQgYS9qZGF0YWRzdC10ai5jIGIvamRhdGFkc3QtdGouYwppbmRleCAxOTM5ZjIzLi45NWQ5ODIzIDEwMDY0NAotLS0gYS9qZGF0YWRzdC10ai5jCisrKyBiL2pkYXRhZHN0LXRqLmMKQEAgLTMsOCArMyw4IEBACiAgKgogICogVGhpcyBmaWxlIHdhcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmU6CiAgKiBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5NiwgVGhvbWFzIEcuIExhbmUuCi0gKiBNb2RpZmllZCAyMDA5IGJ5IEd1aWRvIFZvbGxiZWRpbmcuCi0gKiBNb2RpZmljYXRpb25zOgorICogTW9kaWZpZWQgMjAwOS0yMDEyIGJ5IEd1aWRvIFZvbGxiZWRpbmcuCisgKiBsaWJqcGVnLXR1cmJvIE1vZGlmaWNhdGlvbnM6CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIEQuIFIuIENvbW1hbmRlci4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KICAqCkBAIC0yMiwxMyArMjIsMTMgQEAKICNpbmNsdWRlICJqcGVnbGliLmgiCiAjaW5jbHVkZSAiamVycm9yLmgiCiAKLSNpZm5kZWYgSEFWRV9TVERMSUJfSAkJLyogPHN0ZGxpYi5oPiBzaG91bGQgZGVjbGFyZSBtYWxsb2MoKSxmcmVlKCkgKi8KKyNpZm5kZWYgSEFWRV9TVERMSUJfSCAgICAgICAgICAgLyogPHN0ZGxpYi5oPiBzaG91bGQgZGVjbGFyZSBtYWxsb2MoKSxmcmVlKCkgKi8KIGV4dGVybiB2b2lkICogbWFsbG9jIEpQUCgoc2l6ZV90IHNpemUpKTsKIGV4dGVybiB2b2lkIGZyZWUgSlBQKCh2b2lkICpwdHIpKTsKICNlbmRpZgogCiAKLSNkZWZpbmUgT1VUUFVUX0JVRl9TSVpFICA0MDk2CS8qIGNob29zZSBhbiBlZmZpY2llbnRseSBmd3JpdGUnYWJsZSBzaXplICovCisjZGVmaW5lIE9VVFBVVF9CVUZfU0laRSAgNDA5NiAgIC8qIGNob29zZSBhbiBlZmZpY2llbnRseSBmd3JpdGUnYWJsZSBzaXplICovCiAKIAogLyogRXhwYW5kZWQgZGF0YSBkZXN0aW5hdGlvbiBvYmplY3QgZm9yIG1lbW9yeSBvdXRwdXQgKi8KQEAgLTM2LDEwICszNiwxMCBAQAogdHlwZWRlZiBzdHJ1Y3QgewogICBzdHJ1Y3QganBlZ19kZXN0aW5hdGlvbl9tZ3IgcHViOyAvKiBwdWJsaWMgZmllbGRzICovCiAKLSAgdW5zaWduZWQgY2hhciAqKiBvdXRidWZmZXI7CS8qIHRhcmdldCBidWZmZXIgKi8KKyAgdW5zaWduZWQgY2hhciAqKiBvdXRidWZmZXI7ICAgLyogdGFyZ2V0IGJ1ZmZlciAqLwogICB1bnNpZ25lZCBsb25nICogb3V0c2l6ZTsKLSAgdW5zaWduZWQgY2hhciAqIG5ld2J1ZmZlcjsJLyogbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciAqLwotICBKT0NURVQgKiBidWZmZXI7CQkvKiBzdGFydCBvZiBidWZmZXIgKi8KKyAgdW5zaWduZWQgY2hhciAqIG5ld2J1ZmZlcjsgICAgLyogbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciAqLworICBKT0NURVQgKiBidWZmZXI7ICAgICAgICAgICAgICAvKiBzdGFydCBvZiBidWZmZXIgKi8KICAgc2l6ZV90IGJ1ZnNpemU7CiAgIGJvb2xlYW4gYWxsb2M7CiB9IG15X21lbV9kZXN0aW5hdGlvbl9tZ3I7CkBAIC05Myw3ICs5Myw3IEBACiAKICAgLyogVHJ5IHRvIGFsbG9jYXRlIG5ldyBidWZmZXIgd2l0aCBkb3VibGUgc2l6ZSAqLwogICBuZXh0c2l6ZSA9IGRlc3QtPmJ1ZnNpemUgKiAyOwotICBuZXh0YnVmZmVyID0gbWFsbG9jKG5leHRzaXplKTsKKyAgbmV4dGJ1ZmZlciA9IChKT0NURVQgKikgbWFsbG9jKG5leHRzaXplKTsKIAogICBpZiAobmV4dGJ1ZmZlciA9PSBOVUxMKQogICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX09VVF9PRl9NRU1PUlksIDEwKTsKQEAgLTE0NywyMSArMTQ3LDIxIEBACiAKIEdMT0JBTCh2b2lkKQoganBlZ19tZW1fZGVzdF90aiAoal9jb21wcmVzc19wdHIgY2luZm8sCi0JICAgICAgIHVuc2lnbmVkIGNoYXIgKiogb3V0YnVmZmVyLCB1bnNpZ25lZCBsb25nICogb3V0c2l6ZSwKLQkgICAgICAgYm9vbGVhbiBhbGxvYykKKyAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiogb3V0YnVmZmVyLCB1bnNpZ25lZCBsb25nICogb3V0c2l6ZSwKKyAgICAgICAgICAgICAgIGJvb2xlYW4gYWxsb2MpCiB7CiAgIG15X21lbV9kZXN0X3B0ciBkZXN0OwogCi0gIGlmIChvdXRidWZmZXIgPT0gTlVMTCB8fCBvdXRzaXplID09IE5VTEwpCS8qIHNhbml0eSBjaGVjayAqLworICBpZiAob3V0YnVmZmVyID09IE5VTEwgfHwgb3V0c2l6ZSA9PSBOVUxMKSAgICAgLyogc2FuaXR5IGNoZWNrICovCiAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CVUZGRVJfU0laRSk7CiAKICAgLyogVGhlIGRlc3RpbmF0aW9uIG9iamVjdCBpcyBtYWRlIHBlcm1hbmVudCBzbyB0aGF0IG11bHRpcGxlIEpQRUcgaW1hZ2VzCiAgICAqIGNhbiBiZSB3cml0dGVuIHRvIHRoZSBzYW1lIGJ1ZmZlciB3aXRob3V0IHJlLWV4ZWN1dGluZyBqcGVnX21lbV9kZXN0LgogICAgKi8KLSAgaWYgKGNpbmZvLT5kZXN0ID09IE5VTEwpIHsJLyogZmlyc3QgdGltZSBmb3IgdGhpcyBKUEVHIG9iamVjdD8gKi8KKyAgaWYgKGNpbmZvLT5kZXN0ID09IE5VTEwpIHsgICAgLyogZmlyc3QgdGltZSBmb3IgdGhpcyBKUEVHIG9iamVjdD8gKi8KICAgICBjaW5mby0+ZGVzdCA9IChzdHJ1Y3QganBlZ19kZXN0aW5hdGlvbl9tZ3IgKikKICAgICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfUEVSTUFORU5ULAotCQkJCSAgU0laRU9GKG15X21lbV9kZXN0aW5hdGlvbl9tZ3IpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSVpFT0YobXlfbWVtX2Rlc3RpbmF0aW9uX21ncikpOwogICAgIGRlc3QgPSAobXlfbWVtX2Rlc3RfcHRyKSBjaW5mby0+ZGVzdDsKICAgICBkZXN0LT5uZXdidWZmZXIgPSBOVUxMOwogICB9CkBAIC0xNzcsNyArMTc3LDcgQEAKICAgaWYgKCpvdXRidWZmZXIgPT0gTlVMTCB8fCAqb3V0c2l6ZSA9PSAwKSB7CiAgICAgaWYgKGFsbG9jKSB7CiAgICAgICAvKiBBbGxvY2F0ZSBpbml0aWFsIGJ1ZmZlciAqLwotICAgICAgZGVzdC0+bmV3YnVmZmVyID0gKm91dGJ1ZmZlciA9IG1hbGxvYyhPVVRQVVRfQlVGX1NJWkUpOworICAgICAgZGVzdC0+bmV3YnVmZmVyID0gKm91dGJ1ZmZlciA9ICh1bnNpZ25lZCBjaGFyICopIG1hbGxvYyhPVVRQVVRfQlVGX1NJWkUpOwogICAgICAgaWYgKGRlc3QtPm5ld2J1ZmZlciA9PSBOVUxMKQogICAgICAgICBFUlJFWElUMShjaW5mbywgSkVSUl9PVVRfT0ZfTUVNT1JZLCAxMCk7CiAgICAgICAqb3V0c2l6ZSA9IE9VVFBVVF9CVUZfU0laRTsKZGlmZiAtLWdpdCBhL2pkYXRhZHN0LmMgYi9qZGF0YWRzdC5jCmluZGV4IDJmNDg4NjkuLjNmYmM0NDkgMTAwNjQ0Ci0tLSBhL2pkYXRhZHN0LmMKKysrIGIvamRhdGFkc3QuYwpAQCAtMSw5ICsxLDExIEBACiAvKgogICogamRhdGFkc3QuYwogICoKKyAqIFRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlOgogICogQ29weXJpZ2h0IChDKSAxOTk0LTE5OTYsIFRob21hcyBHLiBMYW5lLgotICogTW9kaWZpZWQgMjAwOSBieSBHdWlkbyBWb2xsYmVkaW5nLgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KKyAqIE1vZGlmaWVkIDIwMDktMjAxMiBieSBHdWlkbyBWb2xsYmVkaW5nLgorICogbGlianBlZy10dXJibyBNb2RpZmljYXRpb25zOgorICogQ29weXJpZ2h0IChDKSAyMDEzLCBELiBSLiBDb21tYW5kZXIuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuCiAgKgogICogVGhpcyBmaWxlIGNvbnRhaW5zIGNvbXByZXNzaW9uIGRhdGEgZGVzdGluYXRpb24gcm91dGluZXMgZm9yIHRoZSBjYXNlIG9mCkBAIC0yMCw3ICsyMiw3IEBACiAjaW5jbHVkZSAianBlZ2xpYi5oIgogI2luY2x1ZGUgImplcnJvci5oIgogCi0jaWZuZGVmIEhBVkVfU1RETElCX0gJCS8qIDxzdGRsaWIuaD4gc2hvdWxkIGRlY2xhcmUgbWFsbG9jKCksZnJlZSgpICovCisjaWZuZGVmIEhBVkVfU1RETElCX0ggICAgICAgICAgIC8qIDxzdGRsaWIuaD4gc2hvdWxkIGRlY2xhcmUgbWFsbG9jKCksZnJlZSgpICovCiBleHRlcm4gdm9pZCAqIG1hbGxvYyBKUFAoKHNpemVfdCBzaXplKSk7CiBleHRlcm4gdm9pZCBmcmVlIEpQUCgodm9pZCAqcHRyKSk7CiAjZW5kaWYKQEAgLTMxLDI1ICszMywyNSBAQAogdHlwZWRlZiBzdHJ1Y3QgewogICBzdHJ1Y3QganBlZ19kZXN0aW5hdGlvbl9tZ3IgcHViOyAvKiBwdWJsaWMgZmllbGRzICovCiAKLSAgRklMRSAqIG91dGZpbGU7CQkvKiB0YXJnZXQgc3RyZWFtICovCi0gIEpPQ1RFVCAqIGJ1ZmZlcjsJCS8qIHN0YXJ0IG9mIGJ1ZmZlciAqLworICBGSUxFICogb3V0ZmlsZTsgICAgICAgICAgICAgICAvKiB0YXJnZXQgc3RyZWFtICovCisgIEpPQ1RFVCAqIGJ1ZmZlcjsgICAgICAgICAgICAgIC8qIHN0YXJ0IG9mIGJ1ZmZlciAqLwogfSBteV9kZXN0aW5hdGlvbl9tZ3I7CiAKIHR5cGVkZWYgbXlfZGVzdGluYXRpb25fbWdyICogbXlfZGVzdF9wdHI7CiAKLSNkZWZpbmUgT1VUUFVUX0JVRl9TSVpFICA0MDk2CS8qIGNob29zZSBhbiBlZmZpY2llbnRseSBmd3JpdGUnYWJsZSBzaXplICovCisjZGVmaW5lIE9VVFBVVF9CVUZfU0laRSAgNDA5NiAgIC8qIGNob29zZSBhbiBlZmZpY2llbnRseSBmd3JpdGUnYWJsZSBzaXplICovCiAKIAotI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gODAKKyNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDgwIHx8IGRlZmluZWQoTUVNX1NSQ0RTVF9TVVBQT1JURUQpCiAvKiBFeHBhbmRlZCBkYXRhIGRlc3RpbmF0aW9uIG9iamVjdCBmb3IgbWVtb3J5IG91dHB1dCAqLwogCiB0eXBlZGVmIHN0cnVjdCB7CiAgIHN0cnVjdCBqcGVnX2Rlc3RpbmF0aW9uX21nciBwdWI7IC8qIHB1YmxpYyBmaWVsZHMgKi8KIAotICB1bnNpZ25lZCBjaGFyICoqIG91dGJ1ZmZlcjsJLyogdGFyZ2V0IGJ1ZmZlciAqLworICB1bnNpZ25lZCBjaGFyICoqIG91dGJ1ZmZlcjsgICAvKiB0YXJnZXQgYnVmZmVyICovCiAgIHVuc2lnbmVkIGxvbmcgKiBvdXRzaXplOwotICB1bnNpZ25lZCBjaGFyICogbmV3YnVmZmVyOwkvKiBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyICovCi0gIEpPQ1RFVCAqIGJ1ZmZlcjsJCS8qIHN0YXJ0IG9mIGJ1ZmZlciAqLworICB1bnNpZ25lZCBjaGFyICogbmV3YnVmZmVyOyAgICAvKiBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyICovCisgIEpPQ1RFVCAqIGJ1ZmZlcjsgICAgICAgICAgICAgIC8qIHN0YXJ0IG9mIGJ1ZmZlciAqLwogICBzaXplX3QgYnVmc2l6ZTsKIH0gbXlfbWVtX2Rlc3RpbmF0aW9uX21ncjsKIApAQCAtNzAsMTMgKzcyLDEzIEBACiAgIC8qIEFsbG9jYXRlIHRoZSBvdXRwdXQgYnVmZmVyIC0tLSBpdCB3aWxsIGJlIHJlbGVhc2VkIHdoZW4gZG9uZSB3aXRoIGltYWdlICovCiAgIGRlc3QtPmJ1ZmZlciA9IChKT0NURVQgKikKICAgICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCi0JCQkJICBPVVRQVVRfQlVGX1NJWkUgKiBTSVpFT0YoSk9DVEVUKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1VUUFVUX0JVRl9TSVpFICogU0laRU9GKEpPQ1RFVCkpOwogCiAgIGRlc3QtPnB1Yi5uZXh0X291dHB1dF9ieXRlID0gZGVzdC0+YnVmZmVyOwogICBkZXN0LT5wdWIuZnJlZV9pbl9idWZmZXIgPSBPVVRQVVRfQlVGX1NJWkU7CiB9CiAKLSNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDgwCisjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA4MCB8fCBkZWZpbmVkKE1FTV9TUkNEU1RfU1VQUE9SVEVEKQogTUVUSE9EREVGKHZvaWQpCiBpbml0X21lbV9kZXN0aW5hdGlvbiAoal9jb21wcmVzc19wdHIgY2luZm8pCiB7CkBAIC0xMjMsNyArMTI1LDcgQEAKICAgcmV0dXJuIFRSVUU7CiB9CiAKLSNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDgwCisjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA4MCB8fCBkZWZpbmVkKE1FTV9TUkNEU1RfU1VQUE9SVEVEKQogTUVUSE9EREVGKGJvb2xlYW4pCiBlbXB0eV9tZW1fb3V0cHV0X2J1ZmZlciAoal9jb21wcmVzc19wdHIgY2luZm8pCiB7CkBAIC0xMzMsNyArMTM1LDcgQEAKIAogICAvKiBUcnkgdG8gYWxsb2NhdGUgbmV3IGJ1ZmZlciB3aXRoIGRvdWJsZSBzaXplICovCiAgIG5leHRzaXplID0gZGVzdC0+YnVmc2l6ZSAqIDI7Ci0gIG5leHRidWZmZXIgPSBtYWxsb2MobmV4dHNpemUpOworICBuZXh0YnVmZmVyID0gKEpPQ1RFVCAqKSBtYWxsb2MobmV4dHNpemUpOwogCiAgIGlmIChuZXh0YnVmZmVyID09IE5VTEwpCiAgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfT1VUX09GX01FTU9SWSwgMTApOwpAQCAtMTgyLDE0ICsxODQsMTQgQEAKICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0ZJTEVfV1JJVEUpOwogfQogCi0jaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA4MAorI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gODAgfHwgZGVmaW5lZChNRU1fU1JDRFNUX1NVUFBPUlRFRCkKIE1FVEhPRERFRih2b2lkKQogdGVybV9tZW1fZGVzdGluYXRpb24gKGpfY29tcHJlc3NfcHRyIGNpbmZvKQogewogICBteV9tZW1fZGVzdF9wdHIgZGVzdCA9IChteV9tZW1fZGVzdF9wdHIpIGNpbmZvLT5kZXN0OwogCiAgICpkZXN0LT5vdXRidWZmZXIgPSBkZXN0LT5idWZmZXI7Ci0gICpkZXN0LT5vdXRzaXplID0gZGVzdC0+YnVmc2l6ZSAtIGRlc3QtPnB1Yi5mcmVlX2luX2J1ZmZlcjsKKyAgKmRlc3QtPm91dHNpemUgPSAodW5zaWduZWQgbG9uZykoZGVzdC0+YnVmc2l6ZSAtIGRlc3QtPnB1Yi5mcmVlX2luX2J1ZmZlcik7CiB9CiAjZW5kaWYKIApAQCAtMjExLDEwICsyMTMsMTAgQEAKICAgICogbWFuYWdlciBzZXJpYWxseSB3aXRoIHRoZSBzYW1lIEpQRUcgb2JqZWN0LCBiZWNhdXNlIHRoZWlyIHByaXZhdGUgb2JqZWN0CiAgICAqIHNpemVzIG1heSBiZSBkaWZmZXJlbnQuICBDYXZlYXQgcHJvZ3JhbW1lci4KICAgICovCi0gIGlmIChjaW5mby0+ZGVzdCA9PSBOVUxMKSB7CS8qIGZpcnN0IHRpbWUgZm9yIHRoaXMgSlBFRyBvYmplY3Q/ICovCisgIGlmIChjaW5mby0+ZGVzdCA9PSBOVUxMKSB7ICAgIC8qIGZpcnN0IHRpbWUgZm9yIHRoaXMgSlBFRyBvYmplY3Q/ICovCiAgICAgY2luZm8tPmRlc3QgPSAoc3RydWN0IGpwZWdfZGVzdGluYXRpb25fbWdyICopCiAgICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX1BFUk1BTkVOVCwKLQkJCQkgIFNJWkVPRihteV9kZXN0aW5hdGlvbl9tZ3IpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSVpFT0YobXlfZGVzdGluYXRpb25fbWdyKSk7CiAgIH0KIAogICBkZXN0ID0gKG15X2Rlc3RfcHRyKSBjaW5mby0+ZGVzdDsKQEAgLTIyNSw3ICsyMjcsNyBAQAogfQogCiAKLSNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDgwCisjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA4MCB8fCBkZWZpbmVkKE1FTV9TUkNEU1RfU1VQUE9SVEVEKQogLyoKICAqIFByZXBhcmUgZm9yIG91dHB1dCB0byBhIG1lbW9yeSBidWZmZXIuCiAgKiBUaGUgY2FsbGVyIG1heSBzdXBwbHkgYW4gb3duIGluaXRpYWwgYnVmZmVyIHdpdGggYXBwcm9wcmlhdGUgc2l6ZS4KQEAgLTIzOSwyMCArMjQxLDIwIEBACiAKIEdMT0JBTCh2b2lkKQoganBlZ19tZW1fZGVzdCAoal9jb21wcmVzc19wdHIgY2luZm8sCi0JICAgICAgIHVuc2lnbmVkIGNoYXIgKiogb3V0YnVmZmVyLCB1bnNpZ25lZCBsb25nICogb3V0c2l6ZSkKKyAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiogb3V0YnVmZmVyLCB1bnNpZ25lZCBsb25nICogb3V0c2l6ZSkKIHsKICAgbXlfbWVtX2Rlc3RfcHRyIGRlc3Q7CiAKLSAgaWYgKG91dGJ1ZmZlciA9PSBOVUxMIHx8IG91dHNpemUgPT0gTlVMTCkJLyogc2FuaXR5IGNoZWNrICovCisgIGlmIChvdXRidWZmZXIgPT0gTlVMTCB8fCBvdXRzaXplID09IE5VTEwpICAgICAvKiBzYW5pdHkgY2hlY2sgKi8KICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JVRkZFUl9TSVpFKTsKIAogICAvKiBUaGUgZGVzdGluYXRpb24gb2JqZWN0IGlzIG1hZGUgcGVybWFuZW50IHNvIHRoYXQgbXVsdGlwbGUgSlBFRyBpbWFnZXMKICAgICogY2FuIGJlIHdyaXR0ZW4gdG8gdGhlIHNhbWUgYnVmZmVyIHdpdGhvdXQgcmUtZXhlY3V0aW5nIGpwZWdfbWVtX2Rlc3QuCiAgICAqLwotICBpZiAoY2luZm8tPmRlc3QgPT0gTlVMTCkgewkvKiBmaXJzdCB0aW1lIGZvciB0aGlzIEpQRUcgb2JqZWN0PyAqLworICBpZiAoY2luZm8tPmRlc3QgPT0gTlVMTCkgeyAgICAvKiBmaXJzdCB0aW1lIGZvciB0aGlzIEpQRUcgb2JqZWN0PyAqLwogICAgIGNpbmZvLT5kZXN0ID0gKHN0cnVjdCBqcGVnX2Rlc3RpbmF0aW9uX21nciAqKQogICAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9QRVJNQU5FTlQsCi0JCQkJICBTSVpFT0YobXlfbWVtX2Rlc3RpbmF0aW9uX21ncikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJWkVPRihteV9tZW1fZGVzdGluYXRpb25fbWdyKSk7CiAgIH0KIAogICBkZXN0ID0gKG15X21lbV9kZXN0X3B0cikgY2luZm8tPmRlc3Q7CkBAIC0yNjUsNyArMjY3LDcgQEAKIAogICBpZiAoKm91dGJ1ZmZlciA9PSBOVUxMIHx8ICpvdXRzaXplID09IDApIHsKICAgICAvKiBBbGxvY2F0ZSBpbml0aWFsIGJ1ZmZlciAqLwotICAgIGRlc3QtPm5ld2J1ZmZlciA9ICpvdXRidWZmZXIgPSBtYWxsb2MoT1VUUFVUX0JVRl9TSVpFKTsKKyAgICBkZXN0LT5uZXdidWZmZXIgPSAqb3V0YnVmZmVyID0gKHVuc2lnbmVkIGNoYXIgKikgbWFsbG9jKE9VVFBVVF9CVUZfU0laRSk7CiAgICAgaWYgKGRlc3QtPm5ld2J1ZmZlciA9PSBOVUxMKQogICAgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfT1VUX09GX01FTU9SWSwgMTApOwogICAgICpvdXRzaXplID0gT1VUUFVUX0JVRl9TSVpFOwpkaWZmIC0tZ2l0IGEvamRhdGFzcmMtdGouYyBiL2pkYXRhc3JjLXRqLmMKaW5kZXggZTk4MDUyOS4uZjAyM2E4YiAxMDA2NDQKLS0tIGEvamRhdGFzcmMtdGouYworKysgYi9qZGF0YXNyYy10ai5jCkBAIC0zLDggKzMsOCBAQAogICoKICAqIFRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlOgogICogQ29weXJpZ2h0IChDKSAxOTk0LTE5OTYsIFRob21hcyBHLiBMYW5lLgotICogTW9kaWZpZWQgMjAwOS0yMDEwIGJ5IEd1aWRvIFZvbGxiZWRpbmcuCi0gKiBNb2RpZmljYXRpb25zOgorICogTW9kaWZpZWQgMjAwOS0yMDExIGJ5IEd1aWRvIFZvbGxiZWRpbmcuCisgKiBsaWJqcGVnLXR1cmJvIE1vZGlmaWNhdGlvbnM6CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIEQuIFIuIENvbW1hbmRlci4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KICAqCkBAIC03MSwxNiArNzEsMTcgQEAKIE1FVEhPRERFRihib29sZWFuKQogZmlsbF9tZW1faW5wdXRfYnVmZmVyIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQogewotICBzdGF0aWMgSk9DVEVUIG15YnVmZmVyWzRdOworICBzdGF0aWMgY29uc3QgSk9DVEVUIG15YnVmZmVyWzRdID0geworICAgIChKT0NURVQpIDB4RkYsIChKT0NURVQpIEpQRUdfRU9JLCAwLCAwCisgIH07CiAKICAgLyogVGhlIHdob2xlIEpQRUcgZGF0YSBpcyBleHBlY3RlZCB0byByZXNpZGUgaW4gdGhlIHN1cHBsaWVkIG1lbW9yeQogICAgKiBidWZmZXIsIHNvIGFueSByZXF1ZXN0IGZvciBtb3JlIGRhdGEgYmV5b25kIHRoZSBnaXZlbiBidWZmZXIgc2l6ZQogICAgKiBpcyB0cmVhdGVkIGFzIGFuIGVycm9yLgogICAgKi8KICAgV0FSTk1TKGNpbmZvLCBKV1JOX0pQRUdfRU9GKTsKKwogICAvKiBJbnNlcnQgYSBmYWtlIEVPSSBtYXJrZXIgKi8KLSAgbXlidWZmZXJbMF0gPSAoSk9DVEVUKSAweEZGOwotICBteWJ1ZmZlclsxXSA9IChKT0NURVQpIEpQRUdfRU9JOwogCiAgIGNpbmZvLT5zcmMtPm5leHRfaW5wdXRfYnl0ZSA9IG15YnVmZmVyOwogICBjaW5mby0+c3JjLT5ieXRlc19pbl9idWZmZXIgPSAyOwpAQCAtMTU2LDIxICsxNTcsMjEgQEAKIAogR0xPQkFMKHZvaWQpCiBqcGVnX21lbV9zcmNfdGogKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCi0JICAgICAgdW5zaWduZWQgY2hhciAqIGluYnVmZmVyLCB1bnNpZ25lZCBsb25nIGluc2l6ZSkKKyAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqIGluYnVmZmVyLCB1bnNpZ25lZCBsb25nIGluc2l6ZSkKIHsKICAgc3RydWN0IGpwZWdfc291cmNlX21nciAqIHNyYzsKIAotICBpZiAoaW5idWZmZXIgPT0gTlVMTCB8fCBpbnNpemUgPT0gMCkJLyogVHJlYXQgZW1wdHkgaW5wdXQgYXMgZmF0YWwgZXJyb3IgKi8KKyAgaWYgKGluYnVmZmVyID09IE5VTEwgfHwgaW5zaXplID09IDApICAvKiBUcmVhdCBlbXB0eSBpbnB1dCBhcyBmYXRhbCBlcnJvciAqLwogICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfSU5QVVRfRU1QVFkpOwogCiAgIC8qIFRoZSBzb3VyY2Ugb2JqZWN0IGlzIG1hZGUgcGVybWFuZW50IHNvIHRoYXQgYSBzZXJpZXMgb2YgSlBFRyBpbWFnZXMKICAgICogY2FuIGJlIHJlYWQgZnJvbSB0aGUgc2FtZSBidWZmZXIgYnkgY2FsbGluZyBqcGVnX21lbV9zcmMgb25seSBiZWZvcmUKICAgICogdGhlIGZpcnN0IG9uZS4KICAgICovCi0gIGlmIChjaW5mby0+c3JjID09IE5VTEwpIHsJLyogZmlyc3QgdGltZSBmb3IgdGhpcyBKUEVHIG9iamVjdD8gKi8KKyAgaWYgKGNpbmZvLT5zcmMgPT0gTlVMTCkgeyAgICAgLyogZmlyc3QgdGltZSBmb3IgdGhpcyBKUEVHIG9iamVjdD8gKi8KICAgICBjaW5mby0+c3JjID0gKHN0cnVjdCBqcGVnX3NvdXJjZV9tZ3IgKikKICAgICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfUEVSTUFORU5ULAotCQkJCSAgU0laRU9GKHN0cnVjdCBqcGVnX3NvdXJjZV9tZ3IpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSVpFT0Yoc3RydWN0IGpwZWdfc291cmNlX21ncikpOwogICB9CiAKICAgc3JjID0gY2luZm8tPnNyYzsKZGlmZiAtLWdpdCBhL2pkYXRhc3JjLmMgYi9qZGF0YXNyYy5jCmluZGV4IDc2MDlmNzYuLjViNGMxN2QgMTAwNjQ0Ci0tLSBhL2pkYXRhc3JjLmMKKysrIGIvamRhdGFzcmMuYwpAQCAtMSw5ICsxLDExIEBACiAvKgogICogamRhdGFzcmMuYwogICoKKyAqIFRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlOgogICogQ29weXJpZ2h0IChDKSAxOTk0LTE5OTYsIFRob21hcyBHLiBMYW5lLgotICogTW9kaWZpZWQgMjAwOS0yMDEwIGJ5IEd1aWRvIFZvbGxiZWRpbmcuCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgorICogTW9kaWZpZWQgMjAwOS0yMDExIGJ5IEd1aWRvIFZvbGxiZWRpbmcuCisgKiBsaWJqcGVnLXR1cmJvIE1vZGlmaWNhdGlvbnM6CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIEQuIFIuIENvbW1hbmRlci4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KICAqCiAgKiBUaGlzIGZpbGUgY29udGFpbnMgZGVjb21wcmVzc2lvbiBkYXRhIHNvdXJjZSByb3V0aW5lcyBmb3IgdGhlIGNhc2Ugb2YKQEAgLTI0LDE2ICsyNiwxNiBAQAogLyogRXhwYW5kZWQgZGF0YSBzb3VyY2Ugb2JqZWN0IGZvciBzdGRpbyBpbnB1dCAqLwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gIHN0cnVjdCBqcGVnX3NvdXJjZV9tZ3IgcHViOwkvKiBwdWJsaWMgZmllbGRzICovCisgIHN0cnVjdCBqcGVnX3NvdXJjZV9tZ3IgcHViOyAgIC8qIHB1YmxpYyBmaWVsZHMgKi8KIAotICBGSUxFICogaW5maWxlOwkJLyogc291cmNlIHN0cmVhbSAqLwotICBKT0NURVQgKiBidWZmZXI7CQkvKiBzdGFydCBvZiBidWZmZXIgKi8KLSAgYm9vbGVhbiBzdGFydF9vZl9maWxlOwkvKiBoYXZlIHdlIGdvdHRlbiBhbnkgZGF0YSB5ZXQ/ICovCisgIEZJTEUgKiBpbmZpbGU7ICAgICAgICAgICAgICAgIC8qIHNvdXJjZSBzdHJlYW0gKi8KKyAgSk9DVEVUICogYnVmZmVyOyAgICAgICAgICAgICAgLyogc3RhcnQgb2YgYnVmZmVyICovCisgIGJvb2xlYW4gc3RhcnRfb2ZfZmlsZTsgICAgICAgIC8qIGhhdmUgd2UgZ290dGVuIGFueSBkYXRhIHlldD8gKi8KIH0gbXlfc291cmNlX21ncjsKIAogdHlwZWRlZiBteV9zb3VyY2VfbWdyICogbXlfc3JjX3B0cjsKIAotI2RlZmluZSBJTlBVVF9CVUZfU0laRSAgNDA5NgkvKiBjaG9vc2UgYW4gZWZmaWNpZW50bHkgZnJlYWQnYWJsZSBzaXplICovCisjZGVmaW5lIElOUFVUX0JVRl9TSVpFICA0MDk2ICAgIC8qIGNob29zZSBhbiBlZmZpY2llbnRseSBmcmVhZCdhYmxlIHNpemUgKi8KIAogCiAvKgpAQCAtNTMsNyArNTUsNyBAQAogICBzcmMtPnN0YXJ0X29mX2ZpbGUgPSBUUlVFOwogfQogCi0jaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA4MAorI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gODAgfHwgZGVmaW5lZChNRU1fU1JDRFNUX1NVUFBPUlRFRCkKIE1FVEhPRERFRih2b2lkKQogaW5pdF9tZW1fc291cmNlIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQogewpAQCAtMTA0LDcgKzEwNiw3IEBACiAgIG5ieXRlcyA9IEpGUkVBRChzcmMtPmluZmlsZSwgc3JjLT5idWZmZXIsIElOUFVUX0JVRl9TSVpFKTsKIAogICBpZiAobmJ5dGVzIDw9IDApIHsKLSAgICBpZiAoc3JjLT5zdGFydF9vZl9maWxlKQkvKiBUcmVhdCBlbXB0eSBpbnB1dCBmaWxlIGFzIGZhdGFsIGVycm9yICovCisgICAgaWYgKHNyYy0+c3RhcnRfb2ZfZmlsZSkgICAgIC8qIFRyZWF0IGVtcHR5IGlucHV0IGZpbGUgYXMgZmF0YWwgZXJyb3IgKi8KICAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfSU5QVVRfRU1QVFkpOwogICAgIFdBUk5NUyhjaW5mbywgSldSTl9KUEVHX0VPRik7CiAgICAgLyogSW5zZXJ0IGEgZmFrZSBFT0kgbWFya2VyICovCkBAIC0xMjAsMjAgKzEyMiwyMSBAQAogICByZXR1cm4gVFJVRTsKIH0KIAotI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gODAKKyNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDgwIHx8IGRlZmluZWQoTUVNX1NSQ0RTVF9TVVBQT1JURUQpCiBNRVRIT0RERUYoYm9vbGVhbikKIGZpbGxfbWVtX2lucHV0X2J1ZmZlciAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKIHsKLSAgc3RhdGljIEpPQ1RFVCBteWJ1ZmZlcls0XTsKKyAgc3RhdGljIGNvbnN0IEpPQ1RFVCBteWJ1ZmZlcls0XSA9IHsKKyAgICAoSk9DVEVUKSAweEZGLCAoSk9DVEVUKSBKUEVHX0VPSSwgMCwgMAorICB9OwogCiAgIC8qIFRoZSB3aG9sZSBKUEVHIGRhdGEgaXMgZXhwZWN0ZWQgdG8gcmVzaWRlIGluIHRoZSBzdXBwbGllZCBtZW1vcnkKICAgICogYnVmZmVyLCBzbyBhbnkgcmVxdWVzdCBmb3IgbW9yZSBkYXRhIGJleW9uZCB0aGUgZ2l2ZW4gYnVmZmVyIHNpemUKICAgICogaXMgdHJlYXRlZCBhcyBhbiBlcnJvci4KICAgICovCiAgIFdBUk5NUyhjaW5mbywgSldSTl9KUEVHX0VPRik7CisKICAgLyogSW5zZXJ0IGEgZmFrZSBFT0kgbWFya2VyICovCi0gIG15YnVmZmVyWzBdID0gKEpPQ1RFVCkgMHhGRjsKLSAgbXlidWZmZXJbMV0gPSAoSk9DVEVUKSBKUEVHX0VPSTsKIAogICBjaW5mby0+c3JjLT5uZXh0X2lucHV0X2J5dGUgPSBteWJ1ZmZlcjsKICAgY2luZm8tPnNyYy0+Ynl0ZXNfaW5fYnVmZmVyID0gMjsKQEAgLTIyMSwxNCArMjI0LDE0IEBACiAgICAqIFRoaXMgbWFrZXMgaXQgdW5zYWZlIHRvIHVzZSB0aGlzIG1hbmFnZXIgYW5kIGEgZGlmZmVyZW50IHNvdXJjZQogICAgKiBtYW5hZ2VyIHNlcmlhbGx5IHdpdGggdGhlIHNhbWUgSlBFRyBvYmplY3QuICBDYXZlYXQgcHJvZ3JhbW1lci4KICAgICovCi0gIGlmIChjaW5mby0+c3JjID09IE5VTEwpIHsJLyogZmlyc3QgdGltZSBmb3IgdGhpcyBKUEVHIG9iamVjdD8gKi8KKyAgaWYgKGNpbmZvLT5zcmMgPT0gTlVMTCkgeyAgICAgLyogZmlyc3QgdGltZSBmb3IgdGhpcyBKUEVHIG9iamVjdD8gKi8KICAgICBjaW5mby0+c3JjID0gKHN0cnVjdCBqcGVnX3NvdXJjZV9tZ3IgKikKICAgICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfUEVSTUFORU5ULAotCQkJCSAgU0laRU9GKG15X3NvdXJjZV9tZ3IpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSVpFT0YobXlfc291cmNlX21ncikpOwogICAgIHNyYyA9IChteV9zcmNfcHRyKSBjaW5mby0+c3JjOwogICAgIHNyYy0+YnVmZmVyID0gKEpPQ1RFVCAqKQogICAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9QRVJNQU5FTlQsCi0JCQkJICBJTlBVVF9CVUZfU0laRSAqIFNJWkVPRihKT0NURVQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlBVVF9CVUZfU0laRSAqIFNJWkVPRihKT0NURVQpKTsKICAgfQogCiAgIHNyYyA9IChteV9zcmNfcHRyKSBjaW5mby0+c3JjOwpAQCAtMjQzLDcgKzI0Niw3IEBACiB9CiAKIAotI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gODAKKyNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDgwIHx8IGRlZmluZWQoTUVNX1NSQ0RTVF9TVVBQT1JURUQpCiAvKgogICogUHJlcGFyZSBmb3IgaW5wdXQgZnJvbSBhIHN1cHBsaWVkIG1lbW9yeSBidWZmZXIuCiAgKiBUaGUgYnVmZmVyIG11c3QgY29udGFpbiB0aGUgd2hvbGUgSlBFRyBkYXRhLgpAQCAtMjUxLDIxICsyNTQsMjEgQEAKIAogR0xPQkFMKHZvaWQpCiBqcGVnX21lbV9zcmMgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCi0JICAgICAgdW5zaWduZWQgY2hhciAqIGluYnVmZmVyLCB1bnNpZ25lZCBsb25nIGluc2l6ZSkKKyAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqIGluYnVmZmVyLCB1bnNpZ25lZCBsb25nIGluc2l6ZSkKIHsKICAgc3RydWN0IGpwZWdfc291cmNlX21nciAqIHNyYzsKIAotICBpZiAoaW5idWZmZXIgPT0gTlVMTCB8fCBpbnNpemUgPT0gMCkJLyogVHJlYXQgZW1wdHkgaW5wdXQgYXMgZmF0YWwgZXJyb3IgKi8KKyAgaWYgKGluYnVmZmVyID09IE5VTEwgfHwgaW5zaXplID09IDApICAvKiBUcmVhdCBlbXB0eSBpbnB1dCBhcyBmYXRhbCBlcnJvciAqLwogICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfSU5QVVRfRU1QVFkpOwogCiAgIC8qIFRoZSBzb3VyY2Ugb2JqZWN0IGlzIG1hZGUgcGVybWFuZW50IHNvIHRoYXQgYSBzZXJpZXMgb2YgSlBFRyBpbWFnZXMKICAgICogY2FuIGJlIHJlYWQgZnJvbSB0aGUgc2FtZSBidWZmZXIgYnkgY2FsbGluZyBqcGVnX21lbV9zcmMgb25seSBiZWZvcmUKICAgICogdGhlIGZpcnN0IG9uZS4KICAgICovCi0gIGlmIChjaW5mby0+c3JjID09IE5VTEwpIHsJLyogZmlyc3QgdGltZSBmb3IgdGhpcyBKUEVHIG9iamVjdD8gKi8KKyAgaWYgKGNpbmZvLT5zcmMgPT0gTlVMTCkgeyAgICAgLyogZmlyc3QgdGltZSBmb3IgdGhpcyBKUEVHIG9iamVjdD8gKi8KICAgICBjaW5mby0+c3JjID0gKHN0cnVjdCBqcGVnX3NvdXJjZV9tZ3IgKikKICAgICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfUEVSTUFORU5ULAotCQkJCSAgU0laRU9GKHN0cnVjdCBqcGVnX3NvdXJjZV9tZ3IpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSVpFT0Yoc3RydWN0IGpwZWdfc291cmNlX21ncikpOwogICB9CiAKICAgc3JjID0gY2luZm8tPnNyYzsKZGlmZiAtLWdpdCBhL2pkY29lZmN0LmMgYi9qZGNvZWZjdC5jCmluZGV4IDUzMTVlODAuLjFkMThhNzQgMTAwNjQ0Ci0tLSBhL2pkY29lZmN0LmMKKysrIGIvamRjb2VmY3QuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBUaGlzIGZpbGUgd2FzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZToKICAqIENvcHlyaWdodCAoQykgMTk5NC0xOTk3LCBUaG9tYXMgRy4gTGFuZS4KLSAqIE1vZGlmaWNhdGlvbnM6CisgKiBsaWJqcGVnLXR1cmJvIE1vZGlmaWNhdGlvbnM6CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEQuIFIuIENvbW1hbmRlci4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KICAqCkBAIC0zMyw5ICszMyw5IEBACiAKICAgLyogVGhlc2UgdmFyaWFibGVzIGtlZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnQgbG9jYXRpb24gb2YgdGhlIGlucHV0IHNpZGUuICovCiAgIC8qIGNpbmZvLT5pbnB1dF9pTUNVX3JvdyBpcyBhbHNvIHVzZWQgZm9yIHRoaXMuICovCi0gIEpESU1FTlNJT04gTUNVX2N0cjsJCS8qIGNvdW50cyBNQ1VzIHByb2Nlc3NlZCBpbiBjdXJyZW50IHJvdyAqLwotICBpbnQgTUNVX3ZlcnRfb2Zmc2V0OwkJLyogY291bnRzIE1DVSByb3dzIHdpdGhpbiBpTUNVIHJvdyAqLwotICBpbnQgTUNVX3Jvd3NfcGVyX2lNQ1Vfcm93OwkvKiBudW1iZXIgb2Ygc3VjaCByb3dzIG5lZWRlZCAqLworICBKRElNRU5TSU9OIE1DVV9jdHI7ICAgICAgICAgICAvKiBjb3VudHMgTUNVcyBwcm9jZXNzZWQgaW4gY3VycmVudCByb3cgKi8KKyAgaW50IE1DVV92ZXJ0X29mZnNldDsgICAgICAgICAgLyogY291bnRzIE1DVSByb3dzIHdpdGhpbiBpTUNVIHJvdyAqLworICBpbnQgTUNVX3Jvd3NfcGVyX2lNQ1Vfcm93OyAgICAvKiBudW1iZXIgb2Ygc3VjaCByb3dzIG5lZWRlZCAqLwogCiAgIC8qIFRoZSBvdXRwdXQgc2lkZSdzIGxvY2F0aW9uIGlzIHJlcHJlc2VudGVkIGJ5IGNpbmZvLT5vdXRwdXRfaU1DVV9yb3cuICovCiAKQEAgLTYxLDcgKzYxLDcgQEAKICNpZmRlZiBCTE9DS19TTU9PVEhJTkdfU1VQUE9SVEVECiAgIC8qIFdoZW4gZG9pbmcgYmxvY2sgc21vb3RoaW5nLCB3ZSBsYXRjaCBjb2VmZmljaWVudCBBbCB2YWx1ZXMgaGVyZSAqLwogICBpbnQgKiBjb2VmX2JpdHNfbGF0Y2g7Ci0jZGVmaW5lIFNBVkVEX0NPRUZTICA2CQkvKiB3ZSBzYXZlIGNvZWZfYml0c1swLi41XSAqLworI2RlZmluZSBTQVZFRF9DT0VGUyAgNiAgICAgICAgICAvKiB3ZSBzYXZlIGNvZWZfYml0c1swLi41XSAqLwogI2VuZGlmCiB9IG15X2NvZWZfY29udHJvbGxlcjsKIApAQCAtNjksMTUgKzY5LDE1IEBACiAKIC8qIEZvcndhcmQgZGVjbGFyYXRpb25zICovCiBNRVRIT0RERUYoaW50KSBkZWNvbXByZXNzX29uZXBhc3MKLQlKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZikpOworICAgICAgICBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZikpOwogI2lmZGVmIERfTVVMVElTQ0FOX0ZJTEVTX1NVUFBPUlRFRAogTUVUSE9EREVGKGludCkgZGVjb21wcmVzc19kYXRhCi0JSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUElNQUdFIG91dHB1dF9idWYpKTsKKyAgICAgICAgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUElNQUdFIG91dHB1dF9idWYpKTsKICNlbmRpZgogI2lmZGVmIEJMT0NLX1NNT09USElOR19TVVBQT1JURUQKIExPQ0FMKGJvb2xlYW4pIHNtb290aGluZ19vayBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsKIE1FVEhPRERFRihpbnQpIGRlY29tcHJlc3Nfc21vb3RoX2RhdGEKLQlKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZikpOworICAgICAgICBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZikpOwogI2VuZGlmCiAKIApAQCAtMTUzLDcgKzE1Myw3IEBACiBkZWNvbXByZXNzX29uZXBhc3MgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZikKIHsKICAgbXlfY29lZl9wdHIgY29lZiA9IChteV9jb2VmX3B0cikgY2luZm8tPmNvZWY7Ci0gIEpESU1FTlNJT04gTUNVX2NvbF9udW07CS8qIGluZGV4IG9mIGN1cnJlbnQgTUNVIHdpdGhpbiByb3cgKi8KKyAgSkRJTUVOU0lPTiBNQ1VfY29sX251bTsgICAgICAgLyogaW5kZXggb2YgY3VycmVudCBNQ1Ugd2l0aGluIHJvdyAqLwogICBKRElNRU5TSU9OIGxhc3RfTUNVX2NvbCA9IGNpbmZvLT5NQ1VzX3Blcl9yb3cgLSAxOwogICBKRElNRU5TSU9OIGxhc3RfaU1DVV9yb3cgPSBjaW5mby0+dG90YWxfaU1DVV9yb3dzIC0gMTsKICAgaW50IGJsa24sIGNpLCB4aW5kZXgsIHlpbmRleCwgeW9mZnNldCwgdXNlZnVsX3dpZHRoOwpAQCAtMTY2LDQ5ICsxNjYsNDkgQEAKICAgZm9yICh5b2Zmc2V0ID0gY29lZi0+TUNVX3ZlcnRfb2Zmc2V0OyB5b2Zmc2V0IDwgY29lZi0+TUNVX3Jvd3NfcGVyX2lNQ1Vfcm93OwogICAgICAgIHlvZmZzZXQrKykgewogICAgIGZvciAoTUNVX2NvbF9udW0gPSBjb2VmLT5NQ1VfY3RyOyBNQ1VfY29sX251bSA8PSBsYXN0X01DVV9jb2w7Ci0JIE1DVV9jb2xfbnVtKyspIHsKKyAgICAgICAgIE1DVV9jb2xfbnVtKyspIHsKICAgICAgIC8qIFRyeSB0byBmZXRjaCBhbiBNQ1UuICBFbnRyb3B5IGRlY29kZXIgZXhwZWN0cyBidWZmZXIgdG8gYmUgemVyb2VkLiAqLwogICAgICAganplcm9fZmFyKCh2b2lkIEZBUiAqKSBjb2VmLT5NQ1VfYnVmZmVyWzBdLAotCQkoc2l6ZV90KSAoY2luZm8tPmJsb2Nrc19pbl9NQ1UgKiBTSVpFT0YoSkJMT0NLKSkpOworICAgICAgICAgICAgICAgIChzaXplX3QpIChjaW5mby0+YmxvY2tzX2luX01DVSAqIFNJWkVPRihKQkxPQ0spKSk7CiAgICAgICBpZiAoISAoKmNpbmZvLT5lbnRyb3B5LT5kZWNvZGVfbWN1KSAoY2luZm8sIGNvZWYtPk1DVV9idWZmZXIpKSB7Ci0JLyogU3VzcGVuc2lvbiBmb3JjZWQ7IHVwZGF0ZSBzdGF0ZSBjb3VudGVycyBhbmQgZXhpdCAqLwotCWNvZWYtPk1DVV92ZXJ0X29mZnNldCA9IHlvZmZzZXQ7Ci0JY29lZi0+TUNVX2N0ciA9IE1DVV9jb2xfbnVtOwotCXJldHVybiBKUEVHX1NVU1BFTkRFRDsKKyAgICAgICAgLyogU3VzcGVuc2lvbiBmb3JjZWQ7IHVwZGF0ZSBzdGF0ZSBjb3VudGVycyBhbmQgZXhpdCAqLworICAgICAgICBjb2VmLT5NQ1VfdmVydF9vZmZzZXQgPSB5b2Zmc2V0OworICAgICAgICBjb2VmLT5NQ1VfY3RyID0gTUNVX2NvbF9udW07CisgICAgICAgIHJldHVybiBKUEVHX1NVU1BFTkRFRDsKICAgICAgIH0KICAgICAgIC8qIERldGVybWluZSB3aGVyZSBkYXRhIHNob3VsZCBnbyBpbiBvdXRwdXRfYnVmIGFuZCBkbyB0aGUgSURDVCB0aGluZy4KICAgICAgICAqIFdlIHNraXAgZHVtbXkgYmxvY2tzIGF0IHRoZSByaWdodCBhbmQgYm90dG9tIGVkZ2VzIChidXQgYmxrbiBnZXRzCiAgICAgICAgKiBpbmNyZW1lbnRlZCBwYXN0IHRoZW0hKS4gIE5vdGUgdGhlIGlubmVyIGxvb3AgcmVsaWVzIG9uIGhhdmluZwogICAgICAgICogYWxsb2NhdGVkIHRoZSBNQ1VfYnVmZmVyW10gYmxvY2tzIHNlcXVlbnRpYWxseS4KICAgICAgICAqLwotICAgICAgYmxrbiA9IDA7CQkJLyogaW5kZXggb2YgY3VycmVudCBEQ1QgYmxvY2sgd2l0aGluIE1DVSAqLworICAgICAgYmxrbiA9IDA7ICAgICAgICAgICAgICAgICAvKiBpbmRleCBvZiBjdXJyZW50IERDVCBibG9jayB3aXRoaW4gTUNVICovCiAgICAgICBmb3IgKGNpID0gMDsgY2kgPCBjaW5mby0+Y29tcHNfaW5fc2NhbjsgY2krKykgewotCWNvbXBwdHIgPSBjaW5mby0+Y3VyX2NvbXBfaW5mb1tjaV07Ci0JLyogRG9uJ3QgYm90aGVyIHRvIElEQ1QgYW4gdW5pbnRlcmVzdGluZyBjb21wb25lbnQuICovCi0JaWYgKCEgY29tcHB0ci0+Y29tcG9uZW50X25lZWRlZCkgewotCSAgYmxrbiArPSBjb21wcHRyLT5NQ1VfYmxvY2tzOwotCSAgY29udGludWU7Ci0JfQotCWludmVyc2VfRENUID0gY2luZm8tPmlkY3QtPmludmVyc2VfRENUW2NvbXBwdHItPmNvbXBvbmVudF9pbmRleF07Ci0JdXNlZnVsX3dpZHRoID0gKE1DVV9jb2xfbnVtIDwgbGFzdF9NQ1VfY29sKSA/IGNvbXBwdHItPk1DVV93aWR0aAotCQkJCQkJICAgIDogY29tcHB0ci0+bGFzdF9jb2xfd2lkdGg7Ci0Jb3V0cHV0X3B0ciA9IG91dHB1dF9idWZbY29tcHB0ci0+Y29tcG9uZW50X2luZGV4XSArCi0JICB5b2Zmc2V0ICogY29tcHB0ci0+X0RDVF9zY2FsZWRfc2l6ZTsKLQlzdGFydF9jb2wgPSBNQ1VfY29sX251bSAqIGNvbXBwdHItPk1DVV9zYW1wbGVfd2lkdGg7Ci0JZm9yICh5aW5kZXggPSAwOyB5aW5kZXggPCBjb21wcHRyLT5NQ1VfaGVpZ2h0OyB5aW5kZXgrKykgewotCSAgaWYgKGNpbmZvLT5pbnB1dF9pTUNVX3JvdyA8IGxhc3RfaU1DVV9yb3cgfHwKLQkgICAgICB5b2Zmc2V0K3lpbmRleCA8IGNvbXBwdHItPmxhc3Rfcm93X2hlaWdodCkgewotCSAgICBvdXRwdXRfY29sID0gc3RhcnRfY29sOwotCSAgICBmb3IgKHhpbmRleCA9IDA7IHhpbmRleCA8IHVzZWZ1bF93aWR0aDsgeGluZGV4KyspIHsKLQkgICAgICAoKmludmVyc2VfRENUKSAoY2luZm8sIGNvbXBwdHIsCi0JCQkgICAgICAoSkNPRUZQVFIpIGNvZWYtPk1DVV9idWZmZXJbYmxrbit4aW5kZXhdLAotCQkJICAgICAgb3V0cHV0X3B0ciwgb3V0cHV0X2NvbCk7Ci0JICAgICAgb3V0cHV0X2NvbCArPSBjb21wcHRyLT5fRENUX3NjYWxlZF9zaXplOwotCSAgICB9Ci0JICB9Ci0JICBibGtuICs9IGNvbXBwdHItPk1DVV93aWR0aDsKLQkgIG91dHB1dF9wdHIgKz0gY29tcHB0ci0+X0RDVF9zY2FsZWRfc2l6ZTsKLQl9CisgICAgICAgIGNvbXBwdHIgPSBjaW5mby0+Y3VyX2NvbXBfaW5mb1tjaV07CisgICAgICAgIC8qIERvbid0IGJvdGhlciB0byBJRENUIGFuIHVuaW50ZXJlc3RpbmcgY29tcG9uZW50LiAqLworICAgICAgICBpZiAoISBjb21wcHRyLT5jb21wb25lbnRfbmVlZGVkKSB7CisgICAgICAgICAgYmxrbiArPSBjb21wcHRyLT5NQ1VfYmxvY2tzOworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGludmVyc2VfRENUID0gY2luZm8tPmlkY3QtPmludmVyc2VfRENUW2NvbXBwdHItPmNvbXBvbmVudF9pbmRleF07CisgICAgICAgIHVzZWZ1bF93aWR0aCA9IChNQ1VfY29sX251bSA8IGxhc3RfTUNVX2NvbCkgPyBjb21wcHRyLT5NQ1Vfd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNvbXBwdHItPmxhc3RfY29sX3dpZHRoOworICAgICAgICBvdXRwdXRfcHRyID0gb3V0cHV0X2J1Zltjb21wcHRyLT5jb21wb25lbnRfaW5kZXhdICsKKyAgICAgICAgICB5b2Zmc2V0ICogY29tcHB0ci0+X0RDVF9zY2FsZWRfc2l6ZTsKKyAgICAgICAgc3RhcnRfY29sID0gTUNVX2NvbF9udW0gKiBjb21wcHRyLT5NQ1Vfc2FtcGxlX3dpZHRoOworICAgICAgICBmb3IgKHlpbmRleCA9IDA7IHlpbmRleCA8IGNvbXBwdHItPk1DVV9oZWlnaHQ7IHlpbmRleCsrKSB7CisgICAgICAgICAgaWYgKGNpbmZvLT5pbnB1dF9pTUNVX3JvdyA8IGxhc3RfaU1DVV9yb3cgfHwKKyAgICAgICAgICAgICAgeW9mZnNldCt5aW5kZXggPCBjb21wcHRyLT5sYXN0X3Jvd19oZWlnaHQpIHsKKyAgICAgICAgICAgIG91dHB1dF9jb2wgPSBzdGFydF9jb2w7CisgICAgICAgICAgICBmb3IgKHhpbmRleCA9IDA7IHhpbmRleCA8IHVzZWZ1bF93aWR0aDsgeGluZGV4KyspIHsKKyAgICAgICAgICAgICAgKCppbnZlcnNlX0RDVCkgKGNpbmZvLCBjb21wcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEpDT0VGUFRSKSBjb2VmLT5NQ1VfYnVmZmVyW2Jsa24reGluZGV4XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9wdHIsIG91dHB1dF9jb2wpOworICAgICAgICAgICAgICBvdXRwdXRfY29sICs9IGNvbXBwdHItPl9EQ1Rfc2NhbGVkX3NpemU7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGJsa24gKz0gY29tcHB0ci0+TUNVX3dpZHRoOworICAgICAgICAgIG91dHB1dF9wdHIgKz0gY29tcHB0ci0+X0RDVF9zY2FsZWRfc2l6ZTsKKyAgICAgICAgfQogICAgICAgfQogICAgIH0KICAgICAvKiBDb21wbGV0ZWQgYW4gTUNVIHJvdywgYnV0IHBlcmhhcHMgbm90IGFuIGlNQ1Ugcm93ICovCkBAIC0yMzMsNyArMjMzLDcgQEAKIE1FVEhPRERFRihpbnQpCiBkdW1teV9jb25zdW1lX2RhdGEgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCiB7Ci0gIHJldHVybiBKUEVHX1NVU1BFTkRFRDsJLyogQWx3YXlzIGluZGljYXRlIG5vdGhpbmcgd2FzIGRvbmUgKi8KKyAgcmV0dXJuIEpQRUdfU1VTUEVOREVEOyAgICAgICAgLyogQWx3YXlzIGluZGljYXRlIG5vdGhpbmcgd2FzIGRvbmUgKi8KIH0KIAogCkBAIC0yNTAsNyArMjUwLDcgQEAKIGNvbnN1bWVfZGF0YSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKIHsKICAgbXlfY29lZl9wdHIgY29lZiA9IChteV9jb2VmX3B0cikgY2luZm8tPmNvZWY7Ci0gIEpESU1FTlNJT04gTUNVX2NvbF9udW07CS8qIGluZGV4IG9mIGN1cnJlbnQgTUNVIHdpdGhpbiByb3cgKi8KKyAgSkRJTUVOU0lPTiBNQ1VfY29sX251bTsgICAgICAgLyogaW5kZXggb2YgY3VycmVudCBNQ1Ugd2l0aGluIHJvdyAqLwogICBpbnQgYmxrbiwgY2ksIHhpbmRleCwgeWluZGV4LCB5b2Zmc2V0OwogICBKRElNRU5TSU9OIHN0YXJ0X2NvbDsKICAgSkJMT0NLQVJSQVkgYnVmZmVyW01BWF9DT01QU19JTl9TQ0FOXTsKQEAgLTI3NCwyNSArMjc0LDI1IEBACiAgIGZvciAoeW9mZnNldCA9IGNvZWYtPk1DVV92ZXJ0X29mZnNldDsgeW9mZnNldCA8IGNvZWYtPk1DVV9yb3dzX3Blcl9pTUNVX3JvdzsKICAgICAgICB5b2Zmc2V0KyspIHsKICAgICBmb3IgKE1DVV9jb2xfbnVtID0gY29lZi0+TUNVX2N0cjsgTUNVX2NvbF9udW0gPCBjaW5mby0+TUNVc19wZXJfcm93OwotCSBNQ1VfY29sX251bSsrKSB7CisgICAgICAgICBNQ1VfY29sX251bSsrKSB7CiAgICAgICAvKiBDb25zdHJ1Y3QgbGlzdCBvZiBwb2ludGVycyB0byBEQ1QgYmxvY2tzIGJlbG9uZ2luZyB0byB0aGlzIE1DVSAqLwotICAgICAgYmxrbiA9IDA7CQkJLyogaW5kZXggb2YgY3VycmVudCBEQ1QgYmxvY2sgd2l0aGluIE1DVSAqLworICAgICAgYmxrbiA9IDA7ICAgICAgICAgICAgICAgICAvKiBpbmRleCBvZiBjdXJyZW50IERDVCBibG9jayB3aXRoaW4gTUNVICovCiAgICAgICBmb3IgKGNpID0gMDsgY2kgPCBjaW5mby0+Y29tcHNfaW5fc2NhbjsgY2krKykgewotCWNvbXBwdHIgPSBjaW5mby0+Y3VyX2NvbXBfaW5mb1tjaV07Ci0Jc3RhcnRfY29sID0gTUNVX2NvbF9udW0gKiBjb21wcHRyLT5NQ1Vfd2lkdGg7Ci0JZm9yICh5aW5kZXggPSAwOyB5aW5kZXggPCBjb21wcHRyLT5NQ1VfaGVpZ2h0OyB5aW5kZXgrKykgewotCSAgYnVmZmVyX3B0ciA9IGJ1ZmZlcltjaV1beWluZGV4K3lvZmZzZXRdICsgc3RhcnRfY29sOwotCSAgZm9yICh4aW5kZXggPSAwOyB4aW5kZXggPCBjb21wcHRyLT5NQ1Vfd2lkdGg7IHhpbmRleCsrKSB7Ci0JICAgIGNvZWYtPk1DVV9idWZmZXJbYmxrbisrXSA9IGJ1ZmZlcl9wdHIrKzsKLQkgIH0KLQl9CisgICAgICAgIGNvbXBwdHIgPSBjaW5mby0+Y3VyX2NvbXBfaW5mb1tjaV07CisgICAgICAgIHN0YXJ0X2NvbCA9IE1DVV9jb2xfbnVtICogY29tcHB0ci0+TUNVX3dpZHRoOworICAgICAgICBmb3IgKHlpbmRleCA9IDA7IHlpbmRleCA8IGNvbXBwdHItPk1DVV9oZWlnaHQ7IHlpbmRleCsrKSB7CisgICAgICAgICAgYnVmZmVyX3B0ciA9IGJ1ZmZlcltjaV1beWluZGV4K3lvZmZzZXRdICsgc3RhcnRfY29sOworICAgICAgICAgIGZvciAoeGluZGV4ID0gMDsgeGluZGV4IDwgY29tcHB0ci0+TUNVX3dpZHRoOyB4aW5kZXgrKykgeworICAgICAgICAgICAgY29lZi0+TUNVX2J1ZmZlcltibGtuKytdID0gYnVmZmVyX3B0cisrOworICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgfQogICAgICAgLyogVHJ5IHRvIGZldGNoIHRoZSBNQ1UuICovCiAgICAgICBpZiAoISAoKmNpbmZvLT5lbnRyb3B5LT5kZWNvZGVfbWN1KSAoY2luZm8sIGNvZWYtPk1DVV9idWZmZXIpKSB7Ci0JLyogU3VzcGVuc2lvbiBmb3JjZWQ7IHVwZGF0ZSBzdGF0ZSBjb3VudGVycyBhbmQgZXhpdCAqLwotCWNvZWYtPk1DVV92ZXJ0X29mZnNldCA9IHlvZmZzZXQ7Ci0JY29lZi0+TUNVX2N0ciA9IE1DVV9jb2xfbnVtOwotCXJldHVybiBKUEVHX1NVU1BFTkRFRDsKKyAgICAgICAgLyogU3VzcGVuc2lvbiBmb3JjZWQ7IHVwZGF0ZSBzdGF0ZSBjb3VudGVycyBhbmQgZXhpdCAqLworICAgICAgICBjb2VmLT5NQ1VfdmVydF9vZmZzZXQgPSB5b2Zmc2V0OworICAgICAgICBjb2VmLT5NQ1VfY3RyID0gTUNVX2NvbF9udW07CisgICAgICAgIHJldHVybiBKUEVHX1NVU1BFTkRFRDsKICAgICAgIH0KICAgICB9CiAgICAgLyogQ29tcGxldGVkIGFuIE1DVSByb3csIGJ1dCBwZXJoYXBzIG5vdCBhbiBpTUNVIHJvdyAqLwpAQCAtMzMzLDggKzMzMyw4IEBACiAKICAgLyogRm9yY2Ugc29tZSBpbnB1dCB0byBiZSBkb25lIGlmIHdlIGFyZSBnZXR0aW5nIGFoZWFkIG9mIHRoZSBpbnB1dC4gKi8KICAgd2hpbGUgKGNpbmZvLT5pbnB1dF9zY2FuX251bWJlciA8IGNpbmZvLT5vdXRwdXRfc2Nhbl9udW1iZXIgfHwKLQkgKGNpbmZvLT5pbnB1dF9zY2FuX251bWJlciA9PSBjaW5mby0+b3V0cHV0X3NjYW5fbnVtYmVyICYmCi0JICBjaW5mby0+aW5wdXRfaU1DVV9yb3cgPD0gY2luZm8tPm91dHB1dF9pTUNVX3JvdykpIHsKKyAgICAgICAgIChjaW5mby0+aW5wdXRfc2Nhbl9udW1iZXIgPT0gY2luZm8tPm91dHB1dF9zY2FuX251bWJlciAmJgorICAgICAgICAgIGNpbmZvLT5pbnB1dF9pTUNVX3JvdyA8PSBjaW5mby0+b3V0cHV0X2lNQ1Vfcm93KSkgewogICAgIGlmICgoKmNpbmZvLT5pbnB1dGN0bC0+Y29uc3VtZV9pbnB1dCkoY2luZm8pID09IEpQRUdfU1VTUEVOREVEKQogICAgICAgcmV0dXJuIEpQRUdfU1VTUEVOREVEOwogICB9CkBAIC0zNjUsMTAgKzM2NSwxMCBAQAogICAgICAgYnVmZmVyX3B0ciA9IGJ1ZmZlcltibG9ja19yb3ddOwogICAgICAgb3V0cHV0X2NvbCA9IDA7CiAgICAgICBmb3IgKGJsb2NrX251bSA9IDA7IGJsb2NrX251bSA8IGNvbXBwdHItPndpZHRoX2luX2Jsb2NrczsgYmxvY2tfbnVtKyspIHsKLQkoKmludmVyc2VfRENUKSAoY2luZm8sIGNvbXBwdHIsIChKQ09FRlBUUikgYnVmZmVyX3B0ciwKLQkJCW91dHB1dF9wdHIsIG91dHB1dF9jb2wpOwotCWJ1ZmZlcl9wdHIrKzsKLQlvdXRwdXRfY29sICs9IGNvbXBwdHItPl9EQ1Rfc2NhbGVkX3NpemU7CisgICAgICAgICgqaW52ZXJzZV9EQ1QpIChjaW5mbywgY29tcHB0ciwgKEpDT0VGUFRSKSBidWZmZXJfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3B0ciwgb3V0cHV0X2NvbCk7CisgICAgICAgIGJ1ZmZlcl9wdHIrKzsKKyAgICAgICAgb3V0cHV0X2NvbCArPSBjb21wcHRyLT5fRENUX3NjYWxlZF9zaXplOwogICAgICAgfQogICAgICAgb3V0cHV0X3B0ciArPSBjb21wcHRyLT5fRENUX3NjYWxlZF9zaXplOwogICAgIH0KQEAgLTQyNSw4ICs0MjUsOCBAQAogICBpZiAoY29lZi0+Y29lZl9iaXRzX2xhdGNoID09IE5VTEwpCiAgICAgY29lZi0+Y29lZl9iaXRzX2xhdGNoID0gKGludCAqKQogICAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKLQkJCQkgIGNpbmZvLT5udW1fY29tcG9uZW50cyAqCi0JCQkJICAoU0FWRURfQ09FRlMgKiBTSVpFT0YoaW50KSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpbmZvLT5udW1fY29tcG9uZW50cyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNBVkVEX0NPRUZTICogU0laRU9GKGludCkpKTsKICAgY29lZl9iaXRzX2xhdGNoID0gY29lZi0+Y29lZl9iaXRzX2xhdGNoOwogCiAgIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7CkBAIC00MzYsMTEgKzQzNiwxMSBAQAogICAgICAgcmV0dXJuIEZBTFNFOwogICAgIC8qIFZlcmlmeSBEQyAmIGZpcnN0IDUgQUMgcXVhbnRpemVycyBhcmUgbm9uemVybyB0byBhdm9pZCB6ZXJvLWRpdmlkZS4gKi8KICAgICBpZiAocXRhYmxlLT5xdWFudHZhbFswXSA9PSAwIHx8Ci0JcXRhYmxlLT5xdWFudHZhbFtRMDFfUE9TXSA9PSAwIHx8Ci0JcXRhYmxlLT5xdWFudHZhbFtRMTBfUE9TXSA9PSAwIHx8Ci0JcXRhYmxlLT5xdWFudHZhbFtRMjBfUE9TXSA9PSAwIHx8Ci0JcXRhYmxlLT5xdWFudHZhbFtRMTFfUE9TXSA9PSAwIHx8Ci0JcXRhYmxlLT5xdWFudHZhbFtRMDJfUE9TXSA9PSAwKQorICAgICAgICBxdGFibGUtPnF1YW50dmFsW1EwMV9QT1NdID09IDAgfHwKKyAgICAgICAgcXRhYmxlLT5xdWFudHZhbFtRMTBfUE9TXSA9PSAwIHx8CisgICAgICAgIHF0YWJsZS0+cXVhbnR2YWxbUTIwX1BPU10gPT0gMCB8fAorICAgICAgICBxdGFibGUtPnF1YW50dmFsW1ExMV9QT1NdID09IDAgfHwKKyAgICAgICAgcXRhYmxlLT5xdWFudHZhbFtRMDJfUE9TXSA9PSAwKQogICAgICAgcmV0dXJuIEZBTFNFOwogICAgIC8qIERDIHZhbHVlcyBtdXN0IGJlIGF0IGxlYXN0IHBhcnRseSBrbm93biBmb3IgYWxsIGNvbXBvbmVudHMuICovCiAgICAgY29lZl9iaXRzID0gY2luZm8tPmNvZWZfYml0c1tjaV07CkBAIC00NTAsNyArNDUwLDcgQEAKICAgICBmb3IgKGNvZWZpID0gMTsgY29lZmkgPD0gNTsgY29lZmkrKykgewogICAgICAgY29lZl9iaXRzX2xhdGNoW2NvZWZpXSA9IGNvZWZfYml0c1tjb2VmaV07CiAgICAgICBpZiAoY29lZl9iaXRzW2NvZWZpXSAhPSAwKQotCXNtb290aGluZ191c2VmdWwgPSBUUlVFOworICAgICAgICBzbW9vdGhpbmdfdXNlZnVsID0gVFJVRTsKICAgICB9CiAgICAgY29lZl9iaXRzX2xhdGNoICs9IFNBVkVEX0NPRUZTOwogICB9CkBAIC00ODksNyArNDg5LDcgQEAKIAogICAvKiBGb3JjZSBzb21lIGlucHV0IHRvIGJlIGRvbmUgaWYgd2UgYXJlIGdldHRpbmcgYWhlYWQgb2YgdGhlIGlucHV0LiAqLwogICB3aGlsZSAoY2luZm8tPmlucHV0X3NjYW5fbnVtYmVyIDw9IGNpbmZvLT5vdXRwdXRfc2Nhbl9udW1iZXIgJiYKLQkgISBjaW5mby0+aW5wdXRjdGwtPmVvaV9yZWFjaGVkKSB7CisgICAgICAgICAhIGNpbmZvLT5pbnB1dGN0bC0+ZW9pX3JlYWNoZWQpIHsKICAgICBpZiAoY2luZm8tPmlucHV0X3NjYW5fbnVtYmVyID09IGNpbmZvLT5vdXRwdXRfc2Nhbl9udW1iZXIpIHsKICAgICAgIC8qIElmIGlucHV0IGlzIHdvcmtpbmcgb24gY3VycmVudCBzY2FuLCB3ZSBvcmRpbmFyaWx5IHdhbnQgaXQgdG8KICAgICAgICAqIGhhdmUgY29tcGxldGVkIHRoZSBjdXJyZW50IHJvdy4gIEJ1dCBpZiBpbnB1dCBzY2FuIGlzIERDLApAQCAtNDk4LDcgKzQ5OCw3IEBACiAgICAgICAgKi8KICAgICAgIEpESU1FTlNJT04gZGVsdGEgPSAoY2luZm8tPlNzID09IDApID8gMSA6IDA7CiAgICAgICBpZiAoY2luZm8tPmlucHV0X2lNQ1Vfcm93ID4gY2luZm8tPm91dHB1dF9pTUNVX3JvdytkZWx0YSkKLQlicmVhazsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGlmICgoKmNpbmZvLT5pbnB1dGN0bC0+Y29uc3VtZV9pbnB1dCkoY2luZm8pID09IEpQRUdfU1VTUEVOREVEKQogICAgICAgcmV0dXJuIEpQRUdfU1VTUEVOREVEOwpAQCAtNTI2LDE1ICs1MjYsMTUgQEAKICAgICBpZiAoY2luZm8tPm91dHB1dF9pTUNVX3JvdyA+IDApIHsKICAgICAgIGFjY2Vzc19yb3dzICs9IGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7IC8qIHByaW9yIGlNQ1Ugcm93IHRvbyAqLwogICAgICAgYnVmZmVyID0gKCpjaW5mby0+bWVtLT5hY2Nlc3NfdmlydF9iYXJyYXkpCi0JKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBjb2VmLT53aG9sZV9pbWFnZVtjaV0sCi0JIChjaW5mby0+b3V0cHV0X2lNQ1Vfcm93IC0gMSkgKiBjb21wcHRyLT52X3NhbXBfZmFjdG9yLAotCSAoSkRJTUVOU0lPTikgYWNjZXNzX3Jvd3MsIEZBTFNFKTsKLSAgICAgIGJ1ZmZlciArPSBjb21wcHRyLT52X3NhbXBfZmFjdG9yOwkvKiBwb2ludCB0byBjdXJyZW50IGlNQ1Ugcm93ICovCisgICAgICAgICgoal9jb21tb25fcHRyKSBjaW5mbywgY29lZi0+d2hvbGVfaW1hZ2VbY2ldLAorICAgICAgICAgKGNpbmZvLT5vdXRwdXRfaU1DVV9yb3cgLSAxKSAqIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IsCisgICAgICAgICAoSkRJTUVOU0lPTikgYWNjZXNzX3Jvd3MsIEZBTFNFKTsKKyAgICAgIGJ1ZmZlciArPSBjb21wcHRyLT52X3NhbXBfZmFjdG9yOyAvKiBwb2ludCB0byBjdXJyZW50IGlNQ1Ugcm93ICovCiAgICAgICBmaXJzdF9yb3cgPSBGQUxTRTsKICAgICB9IGVsc2UgewogICAgICAgYnVmZmVyID0gKCpjaW5mby0+bWVtLT5hY2Nlc3NfdmlydF9iYXJyYXkpCi0JKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBjb2VmLT53aG9sZV9pbWFnZVtjaV0sCi0JIChKRElNRU5TSU9OKSAwLCAoSkRJTUVOU0lPTikgYWNjZXNzX3Jvd3MsIEZBTFNFKTsKKyAgICAgICAgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBjb2VmLT53aG9sZV9pbWFnZVtjaV0sCisgICAgICAgICAoSkRJTUVOU0lPTikgMCwgKEpESU1FTlNJT04pIGFjY2Vzc19yb3dzLCBGQUxTRSk7CiAgICAgICBmaXJzdF9yb3cgPSBUUlVFOwogICAgIH0KICAgICAvKiBGZXRjaCBjb21wb25lbnQtZGVwZW5kZW50IGluZm8gKi8KQEAgLTU1MiwxMyArNTUyLDEzIEBACiAgICAgZm9yIChibG9ja19yb3cgPSAwOyBibG9ja19yb3cgPCBibG9ja19yb3dzOyBibG9ja19yb3crKykgewogICAgICAgYnVmZmVyX3B0ciA9IGJ1ZmZlcltibG9ja19yb3ddOwogICAgICAgaWYgKGZpcnN0X3JvdyAmJiBibG9ja19yb3cgPT0gMCkKLQlwcmV2X2Jsb2NrX3JvdyA9IGJ1ZmZlcl9wdHI7CisgICAgICAgIHByZXZfYmxvY2tfcm93ID0gYnVmZmVyX3B0cjsKICAgICAgIGVsc2UKLQlwcmV2X2Jsb2NrX3JvdyA9IGJ1ZmZlcltibG9ja19yb3ctMV07CisgICAgICAgIHByZXZfYmxvY2tfcm93ID0gYnVmZmVyW2Jsb2NrX3Jvdy0xXTsKICAgICAgIGlmIChsYXN0X3JvdyAmJiBibG9ja19yb3cgPT0gYmxvY2tfcm93cy0xKQotCW5leHRfYmxvY2tfcm93ID0gYnVmZmVyX3B0cjsKKyAgICAgICAgbmV4dF9ibG9ja19yb3cgPSBidWZmZXJfcHRyOwogICAgICAgZWxzZQotCW5leHRfYmxvY2tfcm93ID0gYnVmZmVyW2Jsb2NrX3JvdysxXTsKKyAgICAgICAgbmV4dF9ibG9ja19yb3cgPSBidWZmZXJbYmxvY2tfcm93KzFdOwogICAgICAgLyogV2UgZmV0Y2ggdGhlIHN1cnJvdW5kaW5nIERDIHZhbHVlcyB1c2luZyBhIHNsaWRpbmctcmVnaXN0ZXIgYXBwcm9hY2guCiAgICAgICAgKiBJbml0aWFsaXplIGFsbCBuaW5lIGhlcmUgc28gYXMgdG8gZG8gdGhlIHJpZ2h0IHRoaW5nIG9uIG5hcnJvdyBwaWNzLgogICAgICAgICovCkBAIC01NjgsMTAyICs1NjgsMTAyIEBACiAgICAgICBvdXRwdXRfY29sID0gMDsKICAgICAgIGxhc3RfYmxvY2tfY29sdW1uID0gY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzIC0gMTsKICAgICAgIGZvciAoYmxvY2tfbnVtID0gMDsgYmxvY2tfbnVtIDw9IGxhc3RfYmxvY2tfY29sdW1uOyBibG9ja19udW0rKykgewotCS8qIEZldGNoIGN1cnJlbnQgRENUIGJsb2NrIGludG8gd29ya3NwYWNlIHNvIHdlIGNhbiBtb2RpZnkgaXQuICovCi0JamNvcHlfYmxvY2tfcm93KGJ1ZmZlcl9wdHIsIChKQkxPQ0tST1cpIHdvcmtzcGFjZSwgKEpESU1FTlNJT04pIDEpOwotCS8qIFVwZGF0ZSBEQyB2YWx1ZXMgKi8KLQlpZiAoYmxvY2tfbnVtIDwgbGFzdF9ibG9ja19jb2x1bW4pIHsKLQkgIERDMyA9IChpbnQpIHByZXZfYmxvY2tfcm93WzFdWzBdOwotCSAgREM2ID0gKGludCkgYnVmZmVyX3B0clsxXVswXTsKLQkgIERDOSA9IChpbnQpIG5leHRfYmxvY2tfcm93WzFdWzBdOwotCX0KLQkvKiBDb21wdXRlIGNvZWZmaWNpZW50IGVzdGltYXRlcyBwZXIgSy44LgotCSAqIEFuIGVzdGltYXRlIGlzIGFwcGxpZWQgb25seSBpZiBjb2VmZmljaWVudCBpcyBzdGlsbCB6ZXJvLAotCSAqIGFuZCBpcyBub3Qga25vd24gdG8gYmUgZnVsbHkgYWNjdXJhdGUuCi0JICovCi0JLyogQUMwMSAqLwotCWlmICgoQWw9Y29lZl9iaXRzWzFdKSAhPSAwICYmIHdvcmtzcGFjZVsxXSA9PSAwKSB7Ci0JICBudW0gPSAzNiAqIFEwMCAqIChEQzQgLSBEQzYpOwotCSAgaWYgKG51bSA+PSAwKSB7Ci0JICAgIHByZWQgPSAoaW50KSAoKChRMDE8PDcpICsgbnVtKSAvIChRMDE8PDgpKTsKLQkgICAgaWYgKEFsID4gMCAmJiBwcmVkID49ICgxPDxBbCkpCi0JICAgICAgcHJlZCA9ICgxPDxBbCktMTsKLQkgIH0gZWxzZSB7Ci0JICAgIHByZWQgPSAoaW50KSAoKChRMDE8PDcpIC0gbnVtKSAvIChRMDE8PDgpKTsKLQkgICAgaWYgKEFsID4gMCAmJiBwcmVkID49ICgxPDxBbCkpCi0JICAgICAgcHJlZCA9ICgxPDxBbCktMTsKLQkgICAgcHJlZCA9IC1wcmVkOwotCSAgfQotCSAgd29ya3NwYWNlWzFdID0gKEpDT0VGKSBwcmVkOwotCX0KLQkvKiBBQzEwICovCi0JaWYgKChBbD1jb2VmX2JpdHNbMl0pICE9IDAgJiYgd29ya3NwYWNlWzhdID09IDApIHsKLQkgIG51bSA9IDM2ICogUTAwICogKERDMiAtIERDOCk7Ci0JICBpZiAobnVtID49IDApIHsKLQkgICAgcHJlZCA9IChpbnQpICgoKFExMDw8NykgKyBudW0pIC8gKFExMDw8OCkpOwotCSAgICBpZiAoQWwgPiAwICYmIHByZWQgPj0gKDE8PEFsKSkKLQkgICAgICBwcmVkID0gKDE8PEFsKS0xOwotCSAgfSBlbHNlIHsKLQkgICAgcHJlZCA9IChpbnQpICgoKFExMDw8NykgLSBudW0pIC8gKFExMDw8OCkpOwotCSAgICBpZiAoQWwgPiAwICYmIHByZWQgPj0gKDE8PEFsKSkKLQkgICAgICBwcmVkID0gKDE8PEFsKS0xOwotCSAgICBwcmVkID0gLXByZWQ7Ci0JICB9Ci0JICB3b3Jrc3BhY2VbOF0gPSAoSkNPRUYpIHByZWQ7Ci0JfQotCS8qIEFDMjAgKi8KLQlpZiAoKEFsPWNvZWZfYml0c1szXSkgIT0gMCAmJiB3b3Jrc3BhY2VbMTZdID09IDApIHsKLQkgIG51bSA9IDkgKiBRMDAgKiAoREMyICsgREM4IC0gMipEQzUpOwotCSAgaWYgKG51bSA+PSAwKSB7Ci0JICAgIHByZWQgPSAoaW50KSAoKChRMjA8PDcpICsgbnVtKSAvIChRMjA8PDgpKTsKLQkgICAgaWYgKEFsID4gMCAmJiBwcmVkID49ICgxPDxBbCkpCi0JICAgICAgcHJlZCA9ICgxPDxBbCktMTsKLQkgIH0gZWxzZSB7Ci0JICAgIHByZWQgPSAoaW50KSAoKChRMjA8PDcpIC0gbnVtKSAvIChRMjA8PDgpKTsKLQkgICAgaWYgKEFsID4gMCAmJiBwcmVkID49ICgxPDxBbCkpCi0JICAgICAgcHJlZCA9ICgxPDxBbCktMTsKLQkgICAgcHJlZCA9IC1wcmVkOwotCSAgfQotCSAgd29ya3NwYWNlWzE2XSA9IChKQ09FRikgcHJlZDsKLQl9Ci0JLyogQUMxMSAqLwotCWlmICgoQWw9Y29lZl9iaXRzWzRdKSAhPSAwICYmIHdvcmtzcGFjZVs5XSA9PSAwKSB7Ci0JICBudW0gPSA1ICogUTAwICogKERDMSAtIERDMyAtIERDNyArIERDOSk7Ci0JICBpZiAobnVtID49IDApIHsKLQkgICAgcHJlZCA9IChpbnQpICgoKFExMTw8NykgKyBudW0pIC8gKFExMTw8OCkpOwotCSAgICBpZiAoQWwgPiAwICYmIHByZWQgPj0gKDE8PEFsKSkKLQkgICAgICBwcmVkID0gKDE8PEFsKS0xOwotCSAgfSBlbHNlIHsKLQkgICAgcHJlZCA9IChpbnQpICgoKFExMTw8NykgLSBudW0pIC8gKFExMTw8OCkpOwotCSAgICBpZiAoQWwgPiAwICYmIHByZWQgPj0gKDE8PEFsKSkKLQkgICAgICBwcmVkID0gKDE8PEFsKS0xOwotCSAgICBwcmVkID0gLXByZWQ7Ci0JICB9Ci0JICB3b3Jrc3BhY2VbOV0gPSAoSkNPRUYpIHByZWQ7Ci0JfQotCS8qIEFDMDIgKi8KLQlpZiAoKEFsPWNvZWZfYml0c1s1XSkgIT0gMCAmJiB3b3Jrc3BhY2VbMl0gPT0gMCkgewotCSAgbnVtID0gOSAqIFEwMCAqIChEQzQgKyBEQzYgLSAyKkRDNSk7Ci0JICBpZiAobnVtID49IDApIHsKLQkgICAgcHJlZCA9IChpbnQpICgoKFEwMjw8NykgKyBudW0pIC8gKFEwMjw8OCkpOwotCSAgICBpZiAoQWwgPiAwICYmIHByZWQgPj0gKDE8PEFsKSkKLQkgICAgICBwcmVkID0gKDE8PEFsKS0xOwotCSAgfSBlbHNlIHsKLQkgICAgcHJlZCA9IChpbnQpICgoKFEwMjw8NykgLSBudW0pIC8gKFEwMjw8OCkpOwotCSAgICBpZiAoQWwgPiAwICYmIHByZWQgPj0gKDE8PEFsKSkKLQkgICAgICBwcmVkID0gKDE8PEFsKS0xOwotCSAgICBwcmVkID0gLXByZWQ7Ci0JICB9Ci0JICB3b3Jrc3BhY2VbMl0gPSAoSkNPRUYpIHByZWQ7Ci0JfQotCS8qIE9LLCBkbyB0aGUgSURDVCAqLwotCSgqaW52ZXJzZV9EQ1QpIChjaW5mbywgY29tcHB0ciwgKEpDT0VGUFRSKSB3b3Jrc3BhY2UsCi0JCQlvdXRwdXRfcHRyLCBvdXRwdXRfY29sKTsKLQkvKiBBZHZhbmNlIGZvciBuZXh0IGNvbHVtbiAqLwotCURDMSA9IERDMjsgREMyID0gREMzOwotCURDNCA9IERDNTsgREM1ID0gREM2OwotCURDNyA9IERDODsgREM4ID0gREM5OwotCWJ1ZmZlcl9wdHIrKywgcHJldl9ibG9ja19yb3crKywgbmV4dF9ibG9ja19yb3crKzsKLQlvdXRwdXRfY29sICs9IGNvbXBwdHItPl9EQ1Rfc2NhbGVkX3NpemU7CisgICAgICAgIC8qIEZldGNoIGN1cnJlbnQgRENUIGJsb2NrIGludG8gd29ya3NwYWNlIHNvIHdlIGNhbiBtb2RpZnkgaXQuICovCisgICAgICAgIGpjb3B5X2Jsb2NrX3JvdyhidWZmZXJfcHRyLCAoSkJMT0NLUk9XKSB3b3Jrc3BhY2UsIChKRElNRU5TSU9OKSAxKTsKKyAgICAgICAgLyogVXBkYXRlIERDIHZhbHVlcyAqLworICAgICAgICBpZiAoYmxvY2tfbnVtIDwgbGFzdF9ibG9ja19jb2x1bW4pIHsKKyAgICAgICAgICBEQzMgPSAoaW50KSBwcmV2X2Jsb2NrX3Jvd1sxXVswXTsKKyAgICAgICAgICBEQzYgPSAoaW50KSBidWZmZXJfcHRyWzFdWzBdOworICAgICAgICAgIERDOSA9IChpbnQpIG5leHRfYmxvY2tfcm93WzFdWzBdOworICAgICAgICB9CisgICAgICAgIC8qIENvbXB1dGUgY29lZmZpY2llbnQgZXN0aW1hdGVzIHBlciBLLjguCisgICAgICAgICAqIEFuIGVzdGltYXRlIGlzIGFwcGxpZWQgb25seSBpZiBjb2VmZmljaWVudCBpcyBzdGlsbCB6ZXJvLAorICAgICAgICAgKiBhbmQgaXMgbm90IGtub3duIHRvIGJlIGZ1bGx5IGFjY3VyYXRlLgorICAgICAgICAgKi8KKyAgICAgICAgLyogQUMwMSAqLworICAgICAgICBpZiAoKEFsPWNvZWZfYml0c1sxXSkgIT0gMCAmJiB3b3Jrc3BhY2VbMV0gPT0gMCkgeworICAgICAgICAgIG51bSA9IDM2ICogUTAwICogKERDNCAtIERDNik7CisgICAgICAgICAgaWYgKG51bSA+PSAwKSB7CisgICAgICAgICAgICBwcmVkID0gKGludCkgKCgoUTAxPDw3KSArIG51bSkgLyAoUTAxPDw4KSk7CisgICAgICAgICAgICBpZiAoQWwgPiAwICYmIHByZWQgPj0gKDE8PEFsKSkKKyAgICAgICAgICAgICAgcHJlZCA9ICgxPDxBbCktMTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHJlZCA9IChpbnQpICgoKFEwMTw8NykgLSBudW0pIC8gKFEwMTw8OCkpOworICAgICAgICAgICAgaWYgKEFsID4gMCAmJiBwcmVkID49ICgxPDxBbCkpCisgICAgICAgICAgICAgIHByZWQgPSAoMTw8QWwpLTE7CisgICAgICAgICAgICBwcmVkID0gLXByZWQ7CisgICAgICAgICAgfQorICAgICAgICAgIHdvcmtzcGFjZVsxXSA9IChKQ09FRikgcHJlZDsKKyAgICAgICAgfQorICAgICAgICAvKiBBQzEwICovCisgICAgICAgIGlmICgoQWw9Y29lZl9iaXRzWzJdKSAhPSAwICYmIHdvcmtzcGFjZVs4XSA9PSAwKSB7CisgICAgICAgICAgbnVtID0gMzYgKiBRMDAgKiAoREMyIC0gREM4KTsKKyAgICAgICAgICBpZiAobnVtID49IDApIHsKKyAgICAgICAgICAgIHByZWQgPSAoaW50KSAoKChRMTA8PDcpICsgbnVtKSAvIChRMTA8PDgpKTsKKyAgICAgICAgICAgIGlmIChBbCA+IDAgJiYgcHJlZCA+PSAoMTw8QWwpKQorICAgICAgICAgICAgICBwcmVkID0gKDE8PEFsKS0xOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwcmVkID0gKGludCkgKCgoUTEwPDw3KSAtIG51bSkgLyAoUTEwPDw4KSk7CisgICAgICAgICAgICBpZiAoQWwgPiAwICYmIHByZWQgPj0gKDE8PEFsKSkKKyAgICAgICAgICAgICAgcHJlZCA9ICgxPDxBbCktMTsKKyAgICAgICAgICAgIHByZWQgPSAtcHJlZDsKKyAgICAgICAgICB9CisgICAgICAgICAgd29ya3NwYWNlWzhdID0gKEpDT0VGKSBwcmVkOworICAgICAgICB9CisgICAgICAgIC8qIEFDMjAgKi8KKyAgICAgICAgaWYgKChBbD1jb2VmX2JpdHNbM10pICE9IDAgJiYgd29ya3NwYWNlWzE2XSA9PSAwKSB7CisgICAgICAgICAgbnVtID0gOSAqIFEwMCAqIChEQzIgKyBEQzggLSAyKkRDNSk7CisgICAgICAgICAgaWYgKG51bSA+PSAwKSB7CisgICAgICAgICAgICBwcmVkID0gKGludCkgKCgoUTIwPDw3KSArIG51bSkgLyAoUTIwPDw4KSk7CisgICAgICAgICAgICBpZiAoQWwgPiAwICYmIHByZWQgPj0gKDE8PEFsKSkKKyAgICAgICAgICAgICAgcHJlZCA9ICgxPDxBbCktMTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHJlZCA9IChpbnQpICgoKFEyMDw8NykgLSBudW0pIC8gKFEyMDw8OCkpOworICAgICAgICAgICAgaWYgKEFsID4gMCAmJiBwcmVkID49ICgxPDxBbCkpCisgICAgICAgICAgICAgIHByZWQgPSAoMTw8QWwpLTE7CisgICAgICAgICAgICBwcmVkID0gLXByZWQ7CisgICAgICAgICAgfQorICAgICAgICAgIHdvcmtzcGFjZVsxNl0gPSAoSkNPRUYpIHByZWQ7CisgICAgICAgIH0KKyAgICAgICAgLyogQUMxMSAqLworICAgICAgICBpZiAoKEFsPWNvZWZfYml0c1s0XSkgIT0gMCAmJiB3b3Jrc3BhY2VbOV0gPT0gMCkgeworICAgICAgICAgIG51bSA9IDUgKiBRMDAgKiAoREMxIC0gREMzIC0gREM3ICsgREM5KTsKKyAgICAgICAgICBpZiAobnVtID49IDApIHsKKyAgICAgICAgICAgIHByZWQgPSAoaW50KSAoKChRMTE8PDcpICsgbnVtKSAvIChRMTE8PDgpKTsKKyAgICAgICAgICAgIGlmIChBbCA+IDAgJiYgcHJlZCA+PSAoMTw8QWwpKQorICAgICAgICAgICAgICBwcmVkID0gKDE8PEFsKS0xOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwcmVkID0gKGludCkgKCgoUTExPDw3KSAtIG51bSkgLyAoUTExPDw4KSk7CisgICAgICAgICAgICBpZiAoQWwgPiAwICYmIHByZWQgPj0gKDE8PEFsKSkKKyAgICAgICAgICAgICAgcHJlZCA9ICgxPDxBbCktMTsKKyAgICAgICAgICAgIHByZWQgPSAtcHJlZDsKKyAgICAgICAgICB9CisgICAgICAgICAgd29ya3NwYWNlWzldID0gKEpDT0VGKSBwcmVkOworICAgICAgICB9CisgICAgICAgIC8qIEFDMDIgKi8KKyAgICAgICAgaWYgKChBbD1jb2VmX2JpdHNbNV0pICE9IDAgJiYgd29ya3NwYWNlWzJdID09IDApIHsKKyAgICAgICAgICBudW0gPSA5ICogUTAwICogKERDNCArIERDNiAtIDIqREM1KTsKKyAgICAgICAgICBpZiAobnVtID49IDApIHsKKyAgICAgICAgICAgIHByZWQgPSAoaW50KSAoKChRMDI8PDcpICsgbnVtKSAvIChRMDI8PDgpKTsKKyAgICAgICAgICAgIGlmIChBbCA+IDAgJiYgcHJlZCA+PSAoMTw8QWwpKQorICAgICAgICAgICAgICBwcmVkID0gKDE8PEFsKS0xOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwcmVkID0gKGludCkgKCgoUTAyPDw3KSAtIG51bSkgLyAoUTAyPDw4KSk7CisgICAgICAgICAgICBpZiAoQWwgPiAwICYmIHByZWQgPj0gKDE8PEFsKSkKKyAgICAgICAgICAgICAgcHJlZCA9ICgxPDxBbCktMTsKKyAgICAgICAgICAgIHByZWQgPSAtcHJlZDsKKyAgICAgICAgICB9CisgICAgICAgICAgd29ya3NwYWNlWzJdID0gKEpDT0VGKSBwcmVkOworICAgICAgICB9CisgICAgICAgIC8qIE9LLCBkbyB0aGUgSURDVCAqLworICAgICAgICAoKmludmVyc2VfRENUKSAoY2luZm8sIGNvbXBwdHIsIChKQ09FRlBUUikgd29ya3NwYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3B0ciwgb3V0cHV0X2NvbCk7CisgICAgICAgIC8qIEFkdmFuY2UgZm9yIG5leHQgY29sdW1uICovCisgICAgICAgIERDMSA9IERDMjsgREMyID0gREMzOworICAgICAgICBEQzQgPSBEQzU7IERDNSA9IERDNjsKKyAgICAgICAgREM3ID0gREM4OyBEQzggPSBEQzk7CisgICAgICAgIGJ1ZmZlcl9wdHIrKywgcHJldl9ibG9ja19yb3crKywgbmV4dF9ibG9ja19yb3crKzsKKyAgICAgICAgb3V0cHV0X2NvbCArPSBjb21wcHRyLT5fRENUX3NjYWxlZF9zaXplOwogICAgICAgfQogICAgICAgb3V0cHV0X3B0ciArPSBjb21wcHRyLT5fRENUX3NjYWxlZF9zaXplOwogICAgIH0KQEAgLTY4OCw3ICs2ODgsNyBAQAogCiAgIGNvZWYgPSAobXlfY29lZl9wdHIpCiAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKLQkJCQlTSVpFT0YobXlfY29lZl9jb250cm9sbGVyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJWkVPRihteV9jb2VmX2NvbnRyb2xsZXIpKTsKICAgY2luZm8tPmNvZWYgPSAoc3RydWN0IGpwZWdfZF9jb2VmX2NvbnRyb2xsZXIgKikgY29lZjsKICAgY29lZi0+cHViLnN0YXJ0X2lucHV0X3Bhc3MgPSBzdGFydF9pbnB1dF9wYXNzOwogICBjb2VmLT5wdWIuc3RhcnRfb3V0cHV0X3Bhc3MgPSBzdGFydF9vdXRwdXRfcGFzczsKQEAgLTcwNiwyMCArNzA2LDIwIEBACiAgICAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cjsKIAogICAgIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7Ci0JIGNpKyssIGNvbXBwdHIrKykgeworICAgICAgICAgY2krKywgY29tcHB0cisrKSB7CiAgICAgICBhY2Nlc3Nfcm93cyA9IGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7CiAjaWZkZWYgQkxPQ0tfU01PT1RISU5HX1NVUFBPUlRFRAogICAgICAgLyogSWYgYmxvY2sgc21vb3RoaW5nIGNvdWxkIGJlIHVzZWQsIG5lZWQgYSBiaWdnZXIgd2luZG93ICovCiAgICAgICBpZiAoY2luZm8tPnByb2dyZXNzaXZlX21vZGUpCi0JYWNjZXNzX3Jvd3MgKj0gMzsKKyAgICAgICAgYWNjZXNzX3Jvd3MgKj0gMzsKICNlbmRpZgogICAgICAgY29lZi0+d2hvbGVfaW1hZ2VbY2ldID0gKCpjaW5mby0+bWVtLT5yZXF1ZXN0X3ZpcnRfYmFycmF5KQotCSgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsIFRSVUUsCi0JIChKRElNRU5TSU9OKSBqcm91bmRfdXAoKGxvbmcpIGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcywKLQkJCQkobG9uZykgY29tcHB0ci0+aF9zYW1wX2ZhY3RvciksCi0JIChKRElNRU5TSU9OKSBqcm91bmRfdXAoKGxvbmcpIGNvbXBwdHItPmhlaWdodF9pbl9ibG9ja3MsCi0JCQkJKGxvbmcpIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IpLAotCSAoSkRJTUVOU0lPTikgYWNjZXNzX3Jvd3MpOworICAgICAgICAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLCBUUlVFLAorICAgICAgICAgKEpESU1FTlNJT04pIGpyb3VuZF91cCgobG9uZykgY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgY29tcHB0ci0+aF9zYW1wX2ZhY3RvciksCisgICAgICAgICAoSkRJTUVOU0lPTikganJvdW5kX3VwKChsb25nKSBjb21wcHRyLT5oZWlnaHRfaW5fYmxvY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciksCisgICAgICAgICAoSkRJTUVOU0lPTikgYWNjZXNzX3Jvd3MpOwogICAgIH0KICAgICBjb2VmLT5wdWIuY29uc3VtZV9kYXRhID0gY29uc3VtZV9kYXRhOwogICAgIGNvZWYtPnB1Yi5kZWNvbXByZXNzX2RhdGEgPSBkZWNvbXByZXNzX2RhdGE7CkBAIC03MzQsNyArNzM0LDcgQEAKIAogICAgIGJ1ZmZlciA9IChKQkxPQ0tST1cpCiAgICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX2xhcmdlKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAotCQkJCSAgRF9NQVhfQkxPQ0tTX0lOX01DVSAqIFNJWkVPRihKQkxPQ0spKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEX01BWF9CTE9DS1NfSU5fTUNVICogU0laRU9GKEpCTE9DSykpOwogICAgIGZvciAoaSA9IDA7IGkgPCBEX01BWF9CTE9DS1NfSU5fTUNVOyBpKyspIHsKICAgICAgIGNvZWYtPk1DVV9idWZmZXJbaV0gPSBidWZmZXIgKyBpOwogICAgIH0KZGlmZiAtLWdpdCBhL2pkY29sZXh0LmMgYi9qZGNvbGV4dC5jCmluZGV4IGE4ZTY3YzMuLmY3MmNhYjAgMTAwNjQ0Ci0tLSBhL2pkY29sZXh0LmMKKysrIGIvamRjb2xleHQuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBUaGlzIGZpbGUgd2FzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZToKICAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk3LCBUaG9tYXMgRy4gTGFuZS4KLSAqIE1vZGlmaWNhdGlvbnM6CisgKiBsaWJqcGVnLXR1cmJvIE1vZGlmaWNhdGlvbnM6CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEsIEQuIFIuIENvbW1hbmRlci4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KICAqCkBAIC01OCw4ICs1OCw4IEBACiAgICAgICAvKiBSYW5nZS1saW1pdGluZyBpcyBlc3NlbnRpYWwgZHVlIHRvIG5vaXNlIGludHJvZHVjZWQgYnkgRENUIGxvc3Nlcy4gKi8KICAgICAgIG91dHB0cltSR0JfUkVEXSA9ICAgcmFuZ2VfbGltaXRbeSArIENycnRhYltjcl1dOwogICAgICAgb3V0cHRyW1JHQl9HUkVFTl0gPSByYW5nZV9saW1pdFt5ICsKLQkJCSAgICAgICgoaW50KSBSSUdIVF9TSElGVChDYmd0YWJbY2JdICsgQ3JndGFiW2NyXSwKLQkJCQkJCSBTQ0FMRUJJVFMpKV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGludCkgUklHSFRfU0hJRlQoQ2JndGFiW2NiXSArIENyZ3RhYltjcl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NBTEVCSVRTKSldOwogICAgICAgb3V0cHRyW1JHQl9CTFVFXSA9ICByYW5nZV9saW1pdFt5ICsgQ2JidGFiW2NiXV07CiAgICAgICAvKiBTZXQgdW51c2VkIGJ5dGUgdG8gMHhGRiBzbyBpdCBjYW4gYmUgaW50ZXJwcmV0ZWQgYXMgYW4gb3BhcXVlICovCiAgICAgICAvKiBhbHBoYSBjaGFubmVsIHZhbHVlICovCmRpZmYgLS1naXQgYS9qZGNvbG9yLmMgYi9qZGNvbG9yLmMKaW5kZXggN2E4ZWQyMi4uOGRhZTA4ZCAxMDA2NDQKLS0tIGEvamRjb2xvci5jCisrKyBiL2pkY29sb3IuYwpAQCAtMyw3ICszLDggQEAKICAqCiAgKiBUaGlzIGZpbGUgd2FzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZToKICAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk3LCBUaG9tYXMgRy4gTGFuZS4KLSAqIE1vZGlmaWNhdGlvbnM6CisgKiBNb2RpZmllZCAyMDExIGJ5IEd1aWRvIFZvbGxiZWRpbmcuCisgKiBsaWJqcGVnLXR1cmJvIE1vZGlmaWNhdGlvbnM6CiAgKiBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEtMjAxMiwgRC4gUi4gQ29tbWFuZGVyLgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgpAQCAtMTUsNyArMTYsNyBAQAogI2luY2x1ZGUgImppbmNsdWRlLmgiCiAjaW5jbHVkZSAianBlZ2xpYi5oIgogI2luY2x1ZGUgImpzaW1kLmgiCi0jaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiamNvbmZpZ2ludC5oIgogCiAKIC8qIFByaXZhdGUgc3Vib2JqZWN0ICovCkBAIC0yNCwyNCArMjUsMzIgQEAKICAgc3RydWN0IGpwZWdfY29sb3JfZGVjb252ZXJ0ZXIgcHViOyAvKiBwdWJsaWMgZmllbGRzICovCiAKICAgLyogUHJpdmF0ZSBzdGF0ZSBmb3IgWUNDLT5SR0IgY29udmVyc2lvbiAqLwotICBpbnQgKiBDcl9yX3RhYjsJCS8qID0+IHRhYmxlIGZvciBDciB0byBSIGNvbnZlcnNpb24gKi8KLSAgaW50ICogQ2JfYl90YWI7CQkvKiA9PiB0YWJsZSBmb3IgQ2IgdG8gQiBjb252ZXJzaW9uICovCi0gIElOVDMyICogQ3JfZ190YWI7CQkvKiA9PiB0YWJsZSBmb3IgQ3IgdG8gRyBjb252ZXJzaW9uICovCi0gIElOVDMyICogQ2JfZ190YWI7CQkvKiA9PiB0YWJsZSBmb3IgQ2IgdG8gRyBjb252ZXJzaW9uICovCisgIGludCAqIENyX3JfdGFiOyAgICAgICAgICAgICAgIC8qID0+IHRhYmxlIGZvciBDciB0byBSIGNvbnZlcnNpb24gKi8KKyAgaW50ICogQ2JfYl90YWI7ICAgICAgICAgICAgICAgLyogPT4gdGFibGUgZm9yIENiIHRvIEIgY29udmVyc2lvbiAqLworICBJTlQzMiAqIENyX2dfdGFiOyAgICAgICAgICAgICAvKiA9PiB0YWJsZSBmb3IgQ3IgdG8gRyBjb252ZXJzaW9uICovCisgIElOVDMyICogQ2JfZ190YWI7ICAgICAgICAgICAgIC8qID0+IHRhYmxlIGZvciBDYiB0byBHIGNvbnZlcnNpb24gKi8KKworICAvKiBQcml2YXRlIHN0YXRlIGZvciBSR0ItPlkgY29udmVyc2lvbiAqLworICBJTlQzMiAqIHJnYl95X3RhYjsgICAgICAgICAgICAvKiA9PiB0YWJsZSBmb3IgUkdCIHRvIFkgY29udmVyc2lvbiAqLwogfSBteV9jb2xvcl9kZWNvbnZlcnRlcjsKIAogdHlwZWRlZiBteV9jb2xvcl9kZWNvbnZlcnRlciAqIG15X2Njb252ZXJ0X3B0cjsKIAogCiAvKioqKioqKioqKioqKioqKiBZQ2JDciAtPiBSR0IgY29udmVyc2lvbjogbW9zdCBjb21tb24gY2FzZSAqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqICAgUkdCIC0+IFkgICBjb252ZXJzaW9uOiBsZXNzIGNvbW1vbiBjYXNlICoqKioqKioqKioqKioqLwogCiAvKgogICogWUNiQ3IgaXMgZGVmaW5lZCBwZXIgQ0NJUiA2MDEtMSwgZXhjZXB0IHRoYXQgQ2IgYW5kIENyIGFyZQogICogbm9ybWFsaXplZCB0byB0aGUgcmFuZ2UgMC4uTUFYSlNBTVBMRSByYXRoZXIgdGhhbiAtMC41IC4uIDAuNS4KICAqIFRoZSBjb252ZXJzaW9uIGVxdWF0aW9ucyB0byBiZSBpbXBsZW1lbnRlZCBhcmUgdGhlcmVmb3JlCi0gKglSID0gWSAgICAgICAgICAgICAgICArIDEuNDAyMDAgKiBDcgotICoJRyA9IFkgLSAwLjM0NDE0ICogQ2IgLSAwLjcxNDE0ICogQ3IKLSAqCUIgPSBZICsgMS43NzIwMCAqIENiCisgKgorICogICAgICBSID0gWSAgICAgICAgICAgICAgICArIDEuNDAyMDAgKiBDcgorICogICAgICBHID0gWSAtIDAuMzQ0MTQgKiBDYiAtIDAuNzE0MTQgKiBDcgorICogICAgICBCID0gWSArIDEuNzcyMDAgKiBDYgorICoKKyAqICAgICAgWSA9IDAuMjk5MDAgKiBSICsgMC41ODcwMCAqIEcgKyAwLjExNDAwICogQgorICoKICAqIHdoZXJlIENiIGFuZCBDciByZXByZXNlbnQgdGhlIGluY29taW5nIHZhbHVlcyBsZXNzIENFTlRFUkpTQU1QTEUuCiAgKiAoVGhlc2UgbnVtYmVycyBhcmUgZGVyaXZlZCBmcm9tIFRJRkYgNi4wIHNlY3Rpb24gMjEsIGRhdGVkIDMtSnVuZS05Mi4pCiAgKgpAQCAtNjIsOSArNzEsMjEgQEAKICAqIHRvZ2V0aGVyIGJlZm9yZSByb3VuZGluZy4KICAqLwogCi0jZGVmaW5lIFNDQUxFQklUUwkxNgkvKiBzcGVlZGllc3QgcmlnaHQtc2hpZnQgb24gc29tZSBtYWNoaW5lcyAqLwotI2RlZmluZSBPTkVfSEFMRgkoKElOVDMyKSAxIDw8IChTQ0FMRUJJVFMtMSkpCi0jZGVmaW5lIEZJWCh4KQkJKChJTlQzMikgKCh4KSAqICgxTDw8U0NBTEVCSVRTKSArIDAuNSkpCisjZGVmaW5lIFNDQUxFQklUUyAgICAgICAxNiAgICAgIC8qIHNwZWVkaWVzdCByaWdodC1zaGlmdCBvbiBzb21lIG1hY2hpbmVzICovCisjZGVmaW5lIE9ORV9IQUxGICAgICAgICAoKElOVDMyKSAxIDw8IChTQ0FMRUJJVFMtMSkpCisjZGVmaW5lIEZJWCh4KSAgICAgICAgICAoKElOVDMyKSAoKHgpICogKDFMPDxTQ0FMRUJJVFMpICsgMC41KSkKKworLyogV2UgYWxsb2NhdGUgb25lIGJpZyB0YWJsZSBmb3IgUkdCLT5ZIGNvbnZlcnNpb24gYW5kIGRpdmlkZSBpdCB1cCBpbnRvCisgKiB0aHJlZSBwYXJ0cywgaW5zdGVhZCBvZiBkb2luZyB0aHJlZSBhbGxvY19zbWFsbCByZXF1ZXN0cy4gIFRoaXMgbGV0cyB1cworICogdXNlIGEgc2luZ2xlIHRhYmxlIGJhc2UgYWRkcmVzcywgd2hpY2ggY2FuIGJlIGhlbGQgaW4gYSByZWdpc3RlciBpbiB0aGUKKyAqIGlubmVyIGxvb3BzIG9uIG1hbnkgbWFjaGluZXMgKG1vcmUgdGhhbiBjYW4gaG9sZCBhbGwgdGhyZWUgYWRkcmVzc2VzLAorICogYW55d2F5KS4KKyAqLworCisjZGVmaW5lIFJfWV9PRkYgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAvKiBvZmZzZXQgdG8gUiA9PiBZIHNlY3Rpb24gKi8KKyNkZWZpbmUgR19ZX09GRiAgICAgICAgICgxKihNQVhKU0FNUExFKzEpKSAgICAgIC8qIG9mZnNldCB0byBHID0+IFkgc2VjdGlvbiAqLworI2RlZmluZSBCX1lfT0ZGICAgICAgICAgKDIqKE1BWEpTQU1QTEUrMSkpICAgICAgLyogZXRjLiAqLworI2RlZmluZSBUQUJMRV9TSVpFICAgICAgKDMqKE1BWEpTQU1QTEUrMSkpCiAKIAogLyogSW5jbHVkZSBpbmxpbmUgcm91dGluZXMgZm9yIGNvbG9yc3BhY2UgZXh0ZW5zaW9ucyAqLwpAQCAtMTk0LDI2ICsyMTUsMjYgQEAKIAogICBjY29udmVydC0+Q3Jfcl90YWIgPSAoaW50ICopCiAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKLQkJCQkoTUFYSlNBTVBMRSsxKSAqIFNJWkVPRihpbnQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE1BWEpTQU1QTEUrMSkgKiBTSVpFT0YoaW50KSk7CiAgIGNjb252ZXJ0LT5DYl9iX3RhYiA9IChpbnQgKikKICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAotCQkJCShNQVhKU0FNUExFKzEpICogU0laRU9GKGludCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTUFYSlNBTVBMRSsxKSAqIFNJWkVPRihpbnQpKTsKICAgY2NvbnZlcnQtPkNyX2dfdGFiID0gKElOVDMyICopCiAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKLQkJCQkoTUFYSlNBTVBMRSsxKSAqIFNJWkVPRihJTlQzMikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTUFYSlNBTVBMRSsxKSAqIFNJWkVPRihJTlQzMikpOwogICBjY29udmVydC0+Q2JfZ190YWIgPSAoSU5UMzIgKikKICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAotCQkJCShNQVhKU0FNUExFKzEpICogU0laRU9GKElOVDMyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChNQVhKU0FNUExFKzEpICogU0laRU9GKElOVDMyKSk7CiAKICAgZm9yIChpID0gMCwgeCA9IC1DRU5URVJKU0FNUExFOyBpIDw9IE1BWEpTQU1QTEU7IGkrKywgeCsrKSB7CiAgICAgLyogaSBpcyB0aGUgYWN0dWFsIGlucHV0IHBpeGVsIHZhbHVlLCBpbiB0aGUgcmFuZ2UgMC4uTUFYSlNBTVBMRSAqLwogICAgIC8qIFRoZSBDYiBvciBDciB2YWx1ZSB3ZSBhcmUgdGhpbmtpbmcgb2YgaXMgeCA9IGkgLSBDRU5URVJKU0FNUExFICovCiAgICAgLyogQ3I9PlIgdmFsdWUgaXMgbmVhcmVzdCBpbnQgdG8gMS40MDIwMCAqIHggKi8KICAgICBjY29udmVydC0+Q3Jfcl90YWJbaV0gPSAoaW50KQotCQkgICAgUklHSFRfU0hJRlQoRklYKDEuNDAyMDApICogeCArIE9ORV9IQUxGLCBTQ0FMRUJJVFMpOworICAgICAgICAgICAgICAgICAgICBSSUdIVF9TSElGVChGSVgoMS40MDIwMCkgKiB4ICsgT05FX0hBTEYsIFNDQUxFQklUUyk7CiAgICAgLyogQ2I9PkIgdmFsdWUgaXMgbmVhcmVzdCBpbnQgdG8gMS43NzIwMCAqIHggKi8KICAgICBjY29udmVydC0+Q2JfYl90YWJbaV0gPSAoaW50KQotCQkgICAgUklHSFRfU0hJRlQoRklYKDEuNzcyMDApICogeCArIE9ORV9IQUxGLCBTQ0FMRUJJVFMpOworICAgICAgICAgICAgICAgICAgICBSSUdIVF9TSElGVChGSVgoMS43NzIwMCkgKiB4ICsgT05FX0hBTEYsIFNDQUxFQklUUyk7CiAgICAgLyogQ3I9PkcgdmFsdWUgaXMgc2NhbGVkLXVwIC0wLjcxNDE0ICogeCAqLwogICAgIGNjb252ZXJ0LT5Dcl9nX3RhYltpXSA9ICgtIEZJWCgwLjcxNDE0KSkgKiB4OwogICAgIC8qIENiPT5HIHZhbHVlIGlzIHNjYWxlZC11cCAtMC4zNDQxNCAqIHggKi8KQEAgLTIyOSw4ICsyNTAsOCBAQAogCiBNRVRIT0RERUYodm9pZCkKIHljY19yZ2JfY29udmVydCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKLQkJIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGlucHV0X3JvdywKLQkJIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKQorICAgICAgICAgICAgICAgICBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbnB1dF9yb3csCisgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKQogewogICBzd2l0Y2ggKGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UpIHsKICAgICBjYXNlIEpDU19FWFRfUkdCOgpAQCAtMjczLDE0ICsyOTQsNzQgQEAKIAogCiAvKgorICogSW5pdGlhbGl6ZSBmb3IgUkdCLT5ncmF5c2NhbGUgY29sb3JzcGFjZSBjb252ZXJzaW9uLgorICovCisKK0xPQ0FMKHZvaWQpCitidWlsZF9yZ2JfeV90YWJsZSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgbXlfY2NvbnZlcnRfcHRyIGNjb252ZXJ0ID0gKG15X2Njb252ZXJ0X3B0cikgY2luZm8tPmNjb252ZXJ0OworICBJTlQzMiAqIHJnYl95X3RhYjsKKyAgSU5UMzIgaTsKKworICAvKiBBbGxvY2F0ZSBhbmQgZmlsbCBpbiB0aGUgY29udmVyc2lvbiB0YWJsZXMuICovCisgIGNjb252ZXJ0LT5yZ2JfeV90YWIgPSByZ2JfeV90YWIgPSAoSU5UMzIgKikKKyAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVEFCTEVfU0laRSAqIFNJWkVPRihJTlQzMikpKTsKKworICBmb3IgKGkgPSAwOyBpIDw9IE1BWEpTQU1QTEU7IGkrKykgeworICAgIHJnYl95X3RhYltpK1JfWV9PRkZdID0gRklYKDAuMjk5MDApICogaTsKKyAgICByZ2JfeV90YWJbaStHX1lfT0ZGXSA9IEZJWCgwLjU4NzAwKSAqIGk7CisgICAgcmdiX3lfdGFiW2krQl9ZX09GRl0gPSBGSVgoMC4xMTQwMCkgKiBpICsgT05FX0hBTEY7CisgIH0KK30KKworCisvKgorICogQ29udmVydCBSR0IgdG8gZ3JheXNjYWxlLgorICovCisKK01FVEhPRERFRih2b2lkKQorcmdiX2dyYXlfY29udmVydCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKyAgICAgICAgICAgICAgICAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGlucHV0X3JvdywKKyAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKQoreworICBteV9jY29udmVydF9wdHIgY2NvbnZlcnQgPSAobXlfY2NvbnZlcnRfcHRyKSBjaW5mby0+Y2NvbnZlcnQ7CisgIHJlZ2lzdGVyIGludCByLCBnLCBiOworICByZWdpc3RlciBJTlQzMiAqIGN0YWIgPSBjY29udmVydC0+cmdiX3lfdGFiOworICByZWdpc3RlciBKU0FNUFJPVyBvdXRwdHI7CisgIHJlZ2lzdGVyIEpTQU1QUk9XIGlucHRyMCwgaW5wdHIxLCBpbnB0cjI7CisgIHJlZ2lzdGVyIEpESU1FTlNJT04gY29sOworICBKRElNRU5TSU9OIG51bV9jb2xzID0gY2luZm8tPm91dHB1dF93aWR0aDsKKworICB3aGlsZSAoLS1udW1fcm93cyA+PSAwKSB7CisgICAgaW5wdHIwID0gaW5wdXRfYnVmWzBdW2lucHV0X3Jvd107CisgICAgaW5wdHIxID0gaW5wdXRfYnVmWzFdW2lucHV0X3Jvd107CisgICAgaW5wdHIyID0gaW5wdXRfYnVmWzJdW2lucHV0X3Jvd107CisgICAgaW5wdXRfcm93Kys7CisgICAgb3V0cHRyID0gKm91dHB1dF9idWYrKzsKKyAgICBmb3IgKGNvbCA9IDA7IGNvbCA8IG51bV9jb2xzOyBjb2wrKykgeworICAgICAgciA9IEdFVEpTQU1QTEUoaW5wdHIwW2NvbF0pOworICAgICAgZyA9IEdFVEpTQU1QTEUoaW5wdHIxW2NvbF0pOworICAgICAgYiA9IEdFVEpTQU1QTEUoaW5wdHIyW2NvbF0pOworICAgICAgLyogWSAqLworICAgICAgb3V0cHRyW2NvbF0gPSAoSlNBTVBMRSkKKyAgICAgICAgICAgICAgICAoKGN0YWJbcitSX1lfT0ZGXSArIGN0YWJbZytHX1lfT0ZGXSArIGN0YWJbYitCX1lfT0ZGXSkKKyAgICAgICAgICAgICAgICAgPj4gU0NBTEVCSVRTKTsKKyAgICB9CisgIH0KK30KKworCisvKgogICogQ29sb3IgY29udmVyc2lvbiBmb3Igbm8gY29sb3JzcGFjZSBjaGFuZ2U6IGp1c3QgY29weSB0aGUgZGF0YSwKICAqIGNvbnZlcnRpbmcgZnJvbSBzZXBhcmF0ZS1wbGFuZXMgdG8gaW50ZXJsZWF2ZWQgcmVwcmVzZW50YXRpb24uCiAgKi8KIAogTUVUSE9EREVGKHZvaWQpCiBudWxsX2NvbnZlcnQgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCi0JICAgICAgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5wdXRfcm93LAotCSAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKQorICAgICAgICAgICAgICBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbnB1dF9yb3csCisgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKQogewogICByZWdpc3RlciBKU0FNUFJPVyBpbnB0ciwgb3V0cHRyOwogICByZWdpc3RlciBKRElNRU5TSU9OIGNvdW50OwpAQCAtMjkzLDggKzM3NCw4IEBACiAgICAgICBpbnB0ciA9IGlucHV0X2J1ZltjaV1baW5wdXRfcm93XTsKICAgICAgIG91dHB0ciA9IG91dHB1dF9idWZbMF0gKyBjaTsKICAgICAgIGZvciAoY291bnQgPSBudW1fY29sczsgY291bnQgPiAwOyBjb3VudC0tKSB7Ci0JKm91dHB0ciA9ICppbnB0cisrOwkvKiBuZWVkbid0IGJvdGhlciB3aXRoIEdFVEpTQU1QTEUoKSBoZXJlICovCi0Jb3V0cHRyICs9IG51bV9jb21wb25lbnRzOworICAgICAgICAqb3V0cHRyID0gKmlucHRyKys7ICAgICAvKiBuZWVkbid0IGJvdGhlciB3aXRoIEdFVEpTQU1QTEUoKSBoZXJlICovCisgICAgICAgIG91dHB0ciArPSBudW1fY29tcG9uZW50czsKICAgICAgIH0KICAgICB9CiAgICAgaW5wdXRfcm93Kys7CkBAIC0zMTEsMTEgKzM5MiwxMSBAQAogCiBNRVRIT0RERUYodm9pZCkKIGdyYXlzY2FsZV9jb252ZXJ0IChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAotCQkgICBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbnB1dF9yb3csCi0JCSAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKQorICAgICAgICAgICAgICAgICAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGlucHV0X3JvdywKKyAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIGludCBudW1fcm93cykKIHsKICAgamNvcHlfc2FtcGxlX3Jvd3MoaW5wdXRfYnVmWzBdLCAoaW50KSBpbnB1dF9yb3csIG91dHB1dF9idWYsIDAsCi0JCSAgICBudW1fcm93cywgY2luZm8tPm91dHB1dF93aWR0aCk7CisgICAgICAgICAgICAgICAgICAgIG51bV9yb3dzLCBjaW5mby0+b3V0cHV0X3dpZHRoKTsKIH0KIAogCkBAIC0zMjUsOCArNDA2LDggQEAKIAogTUVUSE9EREVGKHZvaWQpCiBncmF5X3JnYl9jb252ZXJ0IChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAotCQkgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGlucHV0X3JvdywKLQkJICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIGludCBudW1fcm93cykKKyAgICAgICAgICAgICAgICAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGlucHV0X3JvdywKKyAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKQogewogICBzd2l0Y2ggKGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UpIHsKICAgICBjYXNlIEpDU19FWFRfUkdCOgpAQCAtMzcxLDggKzQ1Miw4IEBACiAKIE1FVEhPRERFRih2b2lkKQogcmdiX3JnYl9jb252ZXJ0IChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAotCQkgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGlucHV0X3JvdywKLQkJICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIGludCBudW1fcm93cykKKyAgICAgICAgICAgICAgICAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGlucHV0X3JvdywKKyAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKQogewogICBzd2l0Y2ggKGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UpIHsKICAgICBjYXNlIEpDU19FWFRfUkdCOgpAQCAtNDEwLDYgKzQ5MSw3IEBACiAgIH0KIH0KIAorCiAvKgogICogQWRvYmUtc3R5bGUgWUNDSy0+Q01ZSyBjb252ZXJzaW9uLgogICogV2UgY29udmVydCBZQ2JDciB0byBSPTEtQywgRz0xLU0sIGFuZCBCPTEtWSB1c2luZyB0aGUgc2FtZQpAQCAtNDE5LDggKzUwMSw4IEBACiAKIE1FVEhPRERFRih2b2lkKQogeWNja19jbXlrX2NvbnZlcnQgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCi0JCSAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGlucHV0X3JvdywKLQkJICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBpbnQgbnVtX3Jvd3MpCisgICAgICAgICAgICAgICAgICAgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5wdXRfcm93LAorICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKQogewogICBteV9jY29udmVydF9wdHIgY2NvbnZlcnQgPSAobXlfY2NvbnZlcnRfcHRyKSBjaW5mby0+Y2NvbnZlcnQ7CiAgIHJlZ2lzdGVyIGludCB5LCBjYiwgY3I7CkBAIC00NDgsMTMgKzUzMCwxMyBAQAogICAgICAgY2IgPSBHRVRKU0FNUExFKGlucHRyMVtjb2xdKTsKICAgICAgIGNyID0gR0VUSlNBTVBMRShpbnB0cjJbY29sXSk7CiAgICAgICAvKiBSYW5nZS1saW1pdGluZyBpcyBlc3NlbnRpYWwgZHVlIHRvIG5vaXNlIGludHJvZHVjZWQgYnkgRENUIGxvc3Nlcy4gKi8KLSAgICAgIG91dHB0clswXSA9IHJhbmdlX2xpbWl0W01BWEpTQU1QTEUgLSAoeSArIENycnRhYltjcl0pXTsJLyogcmVkICovCi0gICAgICBvdXRwdHJbMV0gPSByYW5nZV9saW1pdFtNQVhKU0FNUExFIC0gKHkgKwkJCS8qIGdyZWVuICovCi0JCQkgICAgICAoKGludCkgUklHSFRfU0hJRlQoQ2JndGFiW2NiXSArIENyZ3RhYltjcl0sCi0JCQkJCQkgU0NBTEVCSVRTKSkpXTsKLSAgICAgIG91dHB0clsyXSA9IHJhbmdlX2xpbWl0W01BWEpTQU1QTEUgLSAoeSArIENiYnRhYltjYl0pXTsJLyogYmx1ZSAqLworICAgICAgb3V0cHRyWzBdID0gcmFuZ2VfbGltaXRbTUFYSlNBTVBMRSAtICh5ICsgQ3JydGFiW2NyXSldOyAgIC8qIHJlZCAqLworICAgICAgb3V0cHRyWzFdID0gcmFuZ2VfbGltaXRbTUFYSlNBTVBMRSAtICh5ICsgICAgICAgICAgICAgICAgIC8qIGdyZWVuICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGludCkgUklHSFRfU0hJRlQoQ2JndGFiW2NiXSArIENyZ3RhYltjcl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NBTEVCSVRTKSkpXTsKKyAgICAgIG91dHB0clsyXSA9IHJhbmdlX2xpbWl0W01BWEpTQU1QTEUgLSAoeSArIENiYnRhYltjYl0pXTsgICAvKiBibHVlICovCiAgICAgICAvKiBLIHBhc3NlcyB0aHJvdWdoIHVuY2hhbmdlZCAqLwotICAgICAgb3V0cHRyWzNdID0gaW5wdHIzW2NvbF07CS8qIGRvbid0IG5lZWQgR0VUSlNBTVBMRSBoZXJlICovCisgICAgICBvdXRwdHJbM10gPSBpbnB0cjNbY29sXTsgIC8qIGRvbid0IG5lZWQgR0VUSlNBTVBMRSBoZXJlICovCiAgICAgICBvdXRwdHIgKz0gNDsKICAgICB9CiAgIH0KQEAgLTQ4NCw3ICs1NjYsNyBAQAogCiAgIGNjb252ZXJ0ID0gKG15X2Njb252ZXJ0X3B0cikKICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAotCQkJCVNJWkVPRihteV9jb2xvcl9kZWNvbnZlcnRlcikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSVpFT0YobXlfY29sb3JfZGVjb252ZXJ0ZXIpKTsKICAgY2luZm8tPmNjb252ZXJ0ID0gKHN0cnVjdCBqcGVnX2NvbG9yX2RlY29udmVydGVyICopIGNjb252ZXJ0OwogICBjY29udmVydC0+cHViLnN0YXJ0X3Bhc3MgPSBzdGFydF9wYXNzX2Rjb2xvcjsKIApAQCAtNTA3LDcgKzU4OSw3IEBACiAgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9KX0NPTE9SU1BBQ0UpOwogICAgIGJyZWFrOwogCi0gIGRlZmF1bHQ6CQkJLyogSkNTX1VOS05PV04gY2FuIGJlIGFueXRoaW5nICovCisgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIEpDU19VTktOT1dOIGNhbiBiZSBhbnl0aGluZyAqLwogICAgIGlmIChjaW5mby0+bnVtX2NvbXBvbmVudHMgPCAxKQogICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfSl9DT0xPUlNQQUNFKTsKICAgICBicmVhazsKQEAgLTUyMiwxMSArNjA0LDE0IEBACiAgIGNhc2UgSkNTX0dSQVlTQ0FMRToKICAgICBjaW5mby0+b3V0X2NvbG9yX2NvbXBvbmVudHMgPSAxOwogICAgIGlmIChjaW5mby0+anBlZ19jb2xvcl9zcGFjZSA9PSBKQ1NfR1JBWVNDQUxFIHx8Ci0JY2luZm8tPmpwZWdfY29sb3Jfc3BhY2UgPT0gSkNTX1lDYkNyKSB7CisgICAgICAgIGNpbmZvLT5qcGVnX2NvbG9yX3NwYWNlID09IEpDU19ZQ2JDcikgewogICAgICAgY2NvbnZlcnQtPnB1Yi5jb2xvcl9jb252ZXJ0ID0gZ3JheXNjYWxlX2NvbnZlcnQ7CiAgICAgICAvKiBGb3IgY29sb3ItPmdyYXlzY2FsZSBjb252ZXJzaW9uLCBvbmx5IHRoZSBZICgwKSBjb21wb25lbnQgaXMgbmVlZGVkICovCiAgICAgICBmb3IgKGNpID0gMTsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7IGNpKyspCi0JY2luZm8tPmNvbXBfaW5mb1tjaV0uY29tcG9uZW50X25lZWRlZCA9IEZBTFNFOworICAgICAgICBjaW5mby0+Y29tcF9pbmZvW2NpXS5jb21wb25lbnRfbmVlZGVkID0gRkFMU0U7CisgICAgfSBlbHNlIGlmIChjaW5mby0+anBlZ19jb2xvcl9zcGFjZSA9PSBKQ1NfUkdCKSB7CisgICAgICBjY29udmVydC0+cHViLmNvbG9yX2NvbnZlcnQgPSByZ2JfZ3JheV9jb252ZXJ0OworICAgICAgYnVpbGRfcmdiX3lfdGFibGUoY2luZm8pOwogICAgIH0gZWxzZQogICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9DT05WRVJTSU9OX05PVElNUEwpOwogICAgIGJyZWFrOwpAQCAtNTgwLDcgKzY2NSw3IEBACiAgICAgaWYgKGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UgPT0gY2luZm8tPmpwZWdfY29sb3Jfc3BhY2UpIHsKICAgICAgIGNpbmZvLT5vdXRfY29sb3JfY29tcG9uZW50cyA9IGNpbmZvLT5udW1fY29tcG9uZW50czsKICAgICAgIGNjb252ZXJ0LT5wdWIuY29sb3JfY29udmVydCA9IG51bGxfY29udmVydDsKLSAgICB9IGVsc2UJCQkvKiB1bnN1cHBvcnRlZCBub24tbnVsbCBjb252ZXJzaW9uICovCisgICAgfSBlbHNlICAgICAgICAgICAgICAgICAgICAgIC8qIHVuc3VwcG9ydGVkIG5vbi1udWxsIGNvbnZlcnNpb24gKi8KICAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQ09OVkVSU0lPTl9OT1RJTVBMKTsKICAgICBicmVhazsKICAgfQpkaWZmIC0tZ2l0IGEvamRjdC5oIGIvamRjdC5oCmluZGV4IDdiNDlhOTcuLjMxMGYyY2EgMTAwNjQ0Ci0tLSBhL2pkY3QuaAorKysgYi9qZGN0LmgKQEAgLTgsNyArOCw3IEBACiAgKiBUaGlzIGluY2x1ZGUgZmlsZSBjb250YWlucyBjb21tb24gZGVjbGFyYXRpb25zIGZvciB0aGUgZm9yd2FyZCBhbmQKICAqIGludmVyc2UgRENUIG1vZHVsZXMuICBUaGVzZSBkZWNsYXJhdGlvbnMgYXJlIHByaXZhdGUgdG8gdGhlIERDVCBtYW5hZ2VycwogICogKGpjZGN0bWdyLmMsIGpkZGN0bWdyLmMpIGFuZCB0aGUgaW5kaXZpZHVhbCBEQ1QgYWxnb3JpdGhtcy4KLSAqIFRoZSBpbmRpdmlkdWFsIERDVCBhbGdvcml0aG1zIGFyZSBrZXB0IGluIHNlcGFyYXRlIGZpbGVzIHRvIGVhc2UgCisgKiBUaGUgaW5kaXZpZHVhbCBEQ1QgYWxnb3JpdGhtcyBhcmUga2VwdCBpbiBzZXBhcmF0ZSBmaWxlcyB0byBlYXNlCiAgKiBtYWNoaW5lLWRlcGVuZGVudCB0dW5pbmcgKGUuZy4sIGFzc2VtYmx5IGNvZGluZykuCiAgKi8KIApAQCAtMjksNyArMjksNyBAQAogCiAjaWYgQklUU19JTl9KU0FNUExFID09IDgKICNpZm5kZWYgV0lUSF9TSU1ECi10eXBlZGVmIGludCBEQ1RFTEVNOwkJLyogMTYgb3IgMzIgYml0cyBpcyBmaW5lICovCit0eXBlZGVmIGludCBEQ1RFTEVNOyAgICAgICAgICAgIC8qIDE2IG9yIDMyIGJpdHMgaXMgZmluZSAqLwogdHlwZWRlZiB1bnNpZ25lZCBpbnQgVURDVEVMRU07CiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBVRENURUxFTTI7CiAjZWxzZQpAQCAtMzgsNyArMzgsNyBAQAogdHlwZWRlZiB1bnNpZ25lZCBpbnQgVURDVEVMRU0yOwogI2VuZGlmCiAjZWxzZQotdHlwZWRlZiBJTlQzMiBEQ1RFTEVNOwkJLyogbXVzdCBoYXZlIDMyIGJpdHMgKi8KK3R5cGVkZWYgSU5UMzIgRENURUxFTTsgICAgICAgICAgLyogbXVzdCBoYXZlIDMyIGJpdHMgKi8KIHR5cGVkZWYgVUlOVDMyIFVEQ1RFTEVNOwogdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgVURDVEVMRU0yOwogI2VuZGlmCkBAIC02NCwxMCArNjQsMTAgQEAKIHR5cGVkZWYgTVVMVElQTElFUiBJU0xPV19NVUxUX1RZUEU7IC8qIHNob3J0IG9yIGludCwgd2hpY2hldmVyIGlzIGZhc3RlciAqLwogI2lmIEJJVFNfSU5fSlNBTVBMRSA9PSA4CiB0eXBlZGVmIE1VTFRJUExJRVIgSUZBU1RfTVVMVF9UWVBFOyAvKiAxNiBiaXRzIGlzIE9LLCB1c2Ugc2hvcnQgaWYgZmFzdGVyICovCi0jZGVmaW5lIElGQVNUX1NDQUxFX0JJVFMgIDIJLyogZnJhY3Rpb25hbCBiaXRzIGluIHNjYWxlIGZhY3RvcnMgKi8KKyNkZWZpbmUgSUZBU1RfU0NBTEVfQklUUyAgMiAgICAgLyogZnJhY3Rpb25hbCBiaXRzIGluIHNjYWxlIGZhY3RvcnMgKi8KICNlbHNlCi10eXBlZGVmIElOVDMyIElGQVNUX01VTFRfVFlQRTsJLyogbmVlZCAzMiBiaXRzIGZvciBzY2FsZWQgcXVhbnRpemVycyAqLwotI2RlZmluZSBJRkFTVF9TQ0FMRV9CSVRTICAxMwkvKiBmcmFjdGlvbmFsIGJpdHMgaW4gc2NhbGUgZmFjdG9ycyAqLwordHlwZWRlZiBJTlQzMiBJRkFTVF9NVUxUX1RZUEU7ICAvKiBuZWVkIDMyIGJpdHMgZm9yIHNjYWxlZCBxdWFudGl6ZXJzICovCisjZGVmaW5lIElGQVNUX1NDQUxFX0JJVFMgIDEzICAgIC8qIGZyYWN0aW9uYWwgYml0cyBpbiBzY2FsZSBmYWN0b3JzICovCiAjZW5kaWYKIHR5cGVkZWYgRkFTVF9GTE9BVCBGTE9BVF9NVUxUX1RZUEU7IC8qIHByZWZlcnJlZCBmbG9hdGluZyB0eXBlICovCiAKQEAgLTg5LDE1ICs4OSwyNyBAQAogLyogU2hvcnQgZm9ybXMgb2YgZXh0ZXJuYWwgbmFtZXMgZm9yIHN5c3RlbXMgd2l0aCBicmFpbi1kYW1hZ2VkIGxpbmtlcnMuICovCiAKICNpZmRlZiBORUVEX1NIT1JUX0VYVEVSTkFMX05BTUVTCi0jZGVmaW5lIGpwZWdfZmRjdF9pc2xvdwkJakZEaXNsb3cKLSNkZWZpbmUganBlZ19mZGN0X2lmYXN0CQlqRkRpZmFzdAotI2RlZmluZSBqcGVnX2ZkY3RfZmxvYXQJCWpGRGZsb2F0Ci0jZGVmaW5lIGpwZWdfaWRjdF9pc2xvdwkJalJEaXNsb3cKLSNkZWZpbmUganBlZ19pZGN0X2lmYXN0CQlqUkRpZmFzdAotI2RlZmluZSBqcGVnX2lkY3RfZmxvYXQJCWpSRGZsb2F0Ci0jZGVmaW5lIGpwZWdfaWRjdF80eDQJCWpSRDR4NAotI2RlZmluZSBqcGVnX2lkY3RfMngyCQlqUkQyeDIKLSNkZWZpbmUganBlZ19pZGN0XzF4MQkJalJEMXgxCisjZGVmaW5lIGpwZWdfZmRjdF9pc2xvdyAgICAgICAgIGpGRGlzbG93CisjZGVmaW5lIGpwZWdfZmRjdF9pZmFzdCAgICAgICAgIGpGRGlmYXN0CisjZGVmaW5lIGpwZWdfZmRjdF9mbG9hdCAgICAgICAgIGpGRGZsb2F0CisjZGVmaW5lIGpwZWdfaWRjdF9pc2xvdyAgICAgICAgIGpSRGlzbG93CisjZGVmaW5lIGpwZWdfaWRjdF9pZmFzdCAgICAgICAgIGpSRGlmYXN0CisjZGVmaW5lIGpwZWdfaWRjdF9mbG9hdCAgICAgICAgIGpSRGZsb2F0CisjZGVmaW5lIGpwZWdfaWRjdF83eDcgICAgICAgICAgIGpSRDd4NworI2RlZmluZSBqcGVnX2lkY3RfNng2ICAgICAgICAgICBqUkQ2eDYKKyNkZWZpbmUganBlZ19pZGN0XzV4NSAgICAgICAgICAgalJENXg1CisjZGVmaW5lIGpwZWdfaWRjdF80eDQgICAgICAgICAgIGpSRDR4NAorI2RlZmluZSBqcGVnX2lkY3RfM3gzICAgICAgICAgICBqUkQzeDMKKyNkZWZpbmUganBlZ19pZGN0XzJ4MiAgICAgICAgICAgalJEMngyCisjZGVmaW5lIGpwZWdfaWRjdF8xeDEgICAgICAgICAgIGpSRDF4MQorI2RlZmluZSBqcGVnX2lkY3RfOXg5ICAgICAgICAgICBqUkQ5eDkKKyNkZWZpbmUganBlZ19pZGN0XzEweDEwICAgICAgICAgalJEMTB4MTAKKyNkZWZpbmUganBlZ19pZGN0XzExeDExICAgICAgICAgalJEMTF4MTEKKyNkZWZpbmUganBlZ19pZGN0XzEyeDEyICAgICAgICAgalJEMTJ4MTIKKyNkZWZpbmUganBlZ19pZGN0XzEzeDEzICAgICAgICAgalJEMTN4MTMKKyNkZWZpbmUganBlZ19pZGN0XzE0eDE0ICAgICAgICAgalJEMTR4MTQKKyNkZWZpbmUganBlZ19pZGN0XzE1eDE1ICAgICAgICAgalJEMTV4MTUKKyNkZWZpbmUganBlZ19pZGN0XzE2eDE2ICAgICAgICAgalJEMTZ4MTYKICNlbmRpZiAvKiBORUVEX1NIT1JUX0VYVEVSTkFMX05BTUVTICovCiAKIC8qIEV4dGVybiBkZWNsYXJhdGlvbnMgZm9yIHRoZSBmb3J3YXJkIGFuZCBpbnZlcnNlIERDVCByb3V0aW5lcy4gKi8KQEAgLTEwOCwyMiArMTIwLDU4IEBACiAKIEVYVEVSTih2b2lkKSBqcGVnX2lkY3RfaXNsb3cKICAgICBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAotCSBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkpOworICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpKTsKIEVYVEVSTih2b2lkKSBqcGVnX2lkY3RfaWZhc3QKICAgICBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAotCSBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkpOworICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpKTsKIEVYVEVSTih2b2lkKSBqcGVnX2lkY3RfZmxvYXQKICAgICBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAotCSBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkpOworICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpKTsKK0VYVEVSTih2b2lkKSBqcGVnX2lkY3RfN3g3CisgICAgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKyAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKSk7CitFWFRFUk4odm9pZCkganBlZ19pZGN0XzZ4NgorICAgIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCisgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkpOworRVhURVJOKHZvaWQpIGpwZWdfaWRjdF81eDUKKyAgICBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAorICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpKTsKIEVYVEVSTih2b2lkKSBqcGVnX2lkY3RfNHg0CiAgICAgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKLQkgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpKTsKKyAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKSk7CitFWFRFUk4odm9pZCkganBlZ19pZGN0XzN4MworICAgIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCisgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkpOwogRVhURVJOKHZvaWQpIGpwZWdfaWRjdF8yeDIKICAgICBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAotCSBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkpOworICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpKTsKIEVYVEVSTih2b2lkKSBqcGVnX2lkY3RfMXgxCiAgICAgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKLQkgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpKTsKKyAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKSk7CitFWFRFUk4odm9pZCkganBlZ19pZGN0Xzl4OQorICAgIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCisgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkpOworRVhURVJOKHZvaWQpIGpwZWdfaWRjdF8xMHgxMAorICAgIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCisgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkpOworRVhURVJOKHZvaWQpIGpwZWdfaWRjdF8xMXgxMQorICAgIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCisgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkpOworRVhURVJOKHZvaWQpIGpwZWdfaWRjdF8xMngxMgorICAgIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCisgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkpOworRVhURVJOKHZvaWQpIGpwZWdfaWRjdF8xM3gxMworICAgIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCisgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkpOworRVhURVJOKHZvaWQpIGpwZWdfaWRjdF8xNHgxNAorICAgIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCisgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkpOworRVhURVJOKHZvaWQpIGpwZWdfaWRjdF8xNXgxNQorICAgIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCisgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkpOworRVhURVJOKHZvaWQpIGpwZWdfaWRjdF8xNngxNgorICAgIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCisgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkpOwogCiAKIC8qCkBAIC0xMzYsNyArMTg0LDcgQEAKICAqIGFuZCBtYXkgZGlmZmVyIGZyb20gb25lIG1vZHVsZSB0byB0aGUgbmV4dC4KICAqLwogCi0jZGVmaW5lIE9ORQkoKElOVDMyKSAxKQorI2RlZmluZSBPTkUgICAgICgoSU5UMzIpIDEpCiAjZGVmaW5lIENPTlNUX1NDQUxFIChPTkUgPDwgQ09OU1RfQklUUykKIAogLyogQ29udmVydCBhIHBvc2l0aXZlIHJlYWwgY29uc3RhbnQgdG8gYW4gaW50ZWdlciBzY2FsZWQgYnkgQ09OU1RfU0NBTEUuCkBAIC0xNDQsNyArMTkyLDcgQEAKICAqIHRodXMgY2F1c2luZyBhIGxvdCBvZiB1c2VsZXNzIGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMgYXQgcnVuIHRpbWUuCiAgKi8KIAotI2RlZmluZSBGSVgoeCkJKChJTlQzMikgKCh4KSAqIENPTlNUX1NDQUxFICsgMC41KSkKKyNkZWZpbmUgRklYKHgpICAoKElOVDMyKSAoKHgpICogQ09OU1RfU0NBTEUgKyAwLjUpKQogCiAvKiBEZXNjYWxlIGFuZCBjb3JyZWN0bHkgcm91bmQgYW4gSU5UMzIgdmFsdWUgdGhhdCdzIHNjYWxlZCBieSBOIGJpdHMuCiAgKiBXZSBhc3N1bWUgUklHSFRfU0hJRlQgcm91bmRzIHRvd2FyZHMgbWludXMgaW5maW5pdHksIHNvIGFkZGluZwpAQCAtMTYyLDIzICsyMTAsMjMgQEAKICAqIGNvcnJlY3QgY29tYmluYXRpb24gb2YgY2FzdHMuCiAgKi8KIAotI2lmZGVmIFNIT1JUeFNIT1JUXzMyCQkvKiBtYXkgd29yayBpZiAnaW50JyBpcyAzMiBiaXRzICovCisjaWZkZWYgU0hPUlR4U0hPUlRfMzIgICAgICAgICAgIC8qIG1heSB3b3JrIGlmICdpbnQnIGlzIDMyIGJpdHMgKi8KICNkZWZpbmUgTVVMVElQTFkxNkMxNih2YXIsY29uc3QpICAoKChJTlQxNikgKHZhcikpICogKChJTlQxNikgKGNvbnN0KSkpCiAjZW5kaWYKLSNpZmRlZiBTSE9SVHhMQ09OU1RfMzIJCS8qIGtub3duIHRvIHdvcmsgd2l0aCBNaWNyb3NvZnQgQyA2LjAgKi8KKyNpZmRlZiBTSE9SVHhMQ09OU1RfMzIgICAgICAgICAgLyoga25vd24gdG8gd29yayB3aXRoIE1pY3Jvc29mdCBDIDYuMCAqLwogI2RlZmluZSBNVUxUSVBMWTE2QzE2KHZhcixjb25zdCkgICgoKElOVDE2KSAodmFyKSkgKiAoKElOVDMyKSAoY29uc3QpKSkKICNlbmRpZgogCi0jaWZuZGVmIE1VTFRJUExZMTZDMTYJCS8qIGRlZmF1bHQgZGVmaW5pdGlvbiAqLworI2lmbmRlZiBNVUxUSVBMWTE2QzE2ICAgICAgICAgICAvKiBkZWZhdWx0IGRlZmluaXRpb24gKi8KICNkZWZpbmUgTVVMVElQTFkxNkMxNih2YXIsY29uc3QpICAoKHZhcikgKiAoY29uc3QpKQogI2VuZGlmCiAKIC8qIFNhbWUgZXhjZXB0IGJvdGggaW5wdXRzIGFyZSB2YXJpYWJsZXMuICovCiAKLSNpZmRlZiBTSE9SVHhTSE9SVF8zMgkJLyogbWF5IHdvcmsgaWYgJ2ludCcgaXMgMzIgYml0cyAqLworI2lmZGVmIFNIT1JUeFNIT1JUXzMyICAgICAgICAgICAvKiBtYXkgd29yayBpZiAnaW50JyBpcyAzMiBiaXRzICovCiAjZGVmaW5lIE1VTFRJUExZMTZWMTYodmFyMSx2YXIyKSAgKCgoSU5UMTYpICh2YXIxKSkgKiAoKElOVDE2KSAodmFyMikpKQogI2VuZGlmCiAKLSNpZm5kZWYgTVVMVElQTFkxNlYxNgkJLyogZGVmYXVsdCBkZWZpbml0aW9uICovCisjaWZuZGVmIE1VTFRJUExZMTZWMTYgICAgICAgICAgIC8qIGRlZmF1bHQgZGVmaW5pdGlvbiAqLwogI2RlZmluZSBNVUxUSVBMWTE2VjE2KHZhcjEsdmFyMikgICgodmFyMSkgKiAodmFyMikpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2pkZGN0bWdyLmMgYi9qZGRjdG1nci5jCmluZGV4IGJlNDAxZDUuLjFhNjAzMmQgMTAwNjQ0Ci0tLSBhL2pkZGN0bWdyLmMKKysrIGIvamRkY3RtZ3IuYwpAQCAtMyw3ICszLDggQEAKICAqCiAgKiBUaGlzIGZpbGUgd2FzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZToKICAqIENvcHlyaWdodCAoQykgMTk5NC0xOTk2LCBUaG9tYXMgRy4gTGFuZS4KLSAqIE1vZGlmaWNhdGlvbnM6CisgKiBNb2RpZmllZCAyMDAyLTIwMTAgYnkgR3VpZG8gVm9sbGJlZGluZy4KKyAqIGxpYmpwZWctdHVyYm8gTW9kaWZpY2F0aW9uczoKICAqIENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKICAqIENvcHlyaWdodCAoQykgMjAxMCwgRC4gUi4gQ29tbWFuZGVyLgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgpAQCAtMjEsNyArMjIsNyBAQAogI2RlZmluZSBKUEVHX0lOVEVSTkFMUwogI2luY2x1ZGUgImppbmNsdWRlLmgiCiAjaW5jbHVkZSAianBlZ2xpYi5oIgotI2luY2x1ZGUgImpkY3QuaCIJCS8qIFByaXZhdGUgZGVjbGFyYXRpb25zIGZvciBEQ1Qgc3Vic3lzdGVtICovCisjaW5jbHVkZSAiamRjdC5oIiAgICAgICAgICAgICAgIC8qIFByaXZhdGUgZGVjbGFyYXRpb25zIGZvciBEQ1Qgc3Vic3lzdGVtICovCiAjaW5jbHVkZSAianNpbWRkY3QuaCIKICNpbmNsdWRlICJqcGVnY29tcC5oIgogCkBAIC00Niw3ICs0Nyw3IEBACiAvKiBQcml2YXRlIHN1Ym9iamVjdCBmb3IgdGhpcyBtb2R1bGUgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgewotICBzdHJ1Y3QganBlZ19pbnZlcnNlX2RjdCBwdWI7CS8qIHB1YmxpYyBmaWVsZHMgKi8KKyAgc3RydWN0IGpwZWdfaW52ZXJzZV9kY3QgcHViOyAgLyogcHVibGljIGZpZWxkcyAqLwogCiAgIC8qIFRoaXMgYXJyYXkgY29udGFpbnMgdGhlIElEQ1QgbWV0aG9kIGNvZGUgdGhhdCBlYWNoIG11bHRpcGxpZXIgdGFibGUKICAgICogaXMgY3VycmVudGx5IHNldCB1cCBmb3IsIG9yIC0xIGlmIGl0J3Mgbm90IHlldCBzZXQgdXAuCkBAIC0xMDcsNTcgKzEwOCwxMDUgQEAKICNpZmRlZiBJRENUX1NDQUxJTkdfU1VQUE9SVEVECiAgICAgY2FzZSAxOgogICAgICAgbWV0aG9kX3B0ciA9IGpwZWdfaWRjdF8xeDE7Ci0gICAgICBtZXRob2QgPSBKRENUX0lTTE9XOwkvKiBqaWRjdHJlZCB1c2VzIGlzbG93LXN0eWxlIHRhYmxlICovCisgICAgICBtZXRob2QgPSBKRENUX0lTTE9XOyAgICAgIC8qIGppZGN0cmVkIHVzZXMgaXNsb3ctc3R5bGUgdGFibGUgKi8KICAgICAgIGJyZWFrOwogICAgIGNhc2UgMjoKICAgICAgIGlmIChqc2ltZF9jYW5faWRjdF8yeDIoKSkKICAgICAgICAgbWV0aG9kX3B0ciA9IGpzaW1kX2lkY3RfMngyOwogICAgICAgZWxzZQogICAgICAgICBtZXRob2RfcHRyID0ganBlZ19pZGN0XzJ4MjsKLSAgICAgIG1ldGhvZCA9IEpEQ1RfSVNMT1c7CS8qIGppZGN0cmVkIHVzZXMgaXNsb3ctc3R5bGUgdGFibGUgKi8KKyAgICAgIG1ldGhvZCA9IEpEQ1RfSVNMT1c7ICAgICAgLyogamlkY3RyZWQgdXNlcyBpc2xvdy1zdHlsZSB0YWJsZSAqLworICAgICAgYnJlYWs7CisgICAgY2FzZSAzOgorICAgICAgbWV0aG9kX3B0ciA9IGpwZWdfaWRjdF8zeDM7CisgICAgICBtZXRob2QgPSBKRENUX0lTTE9XOyAgICAgIC8qIGppZGN0aW50IHVzZXMgaXNsb3ctc3R5bGUgdGFibGUgKi8KICAgICAgIGJyZWFrOwogICAgIGNhc2UgNDoKICAgICAgIGlmIChqc2ltZF9jYW5faWRjdF80eDQoKSkKICAgICAgICAgbWV0aG9kX3B0ciA9IGpzaW1kX2lkY3RfNHg0OwogICAgICAgZWxzZQogICAgICAgICBtZXRob2RfcHRyID0ganBlZ19pZGN0XzR4NDsKLSAgICAgIG1ldGhvZCA9IEpEQ1RfSVNMT1c7CS8qIGppZGN0cmVkIHVzZXMgaXNsb3ctc3R5bGUgdGFibGUgKi8KKyAgICAgIG1ldGhvZCA9IEpEQ1RfSVNMT1c7ICAgICAgLyogamlkY3RyZWQgdXNlcyBpc2xvdy1zdHlsZSB0YWJsZSAqLworICAgICAgYnJlYWs7CisgICAgY2FzZSA1OgorICAgICAgbWV0aG9kX3B0ciA9IGpwZWdfaWRjdF81eDU7CisgICAgICBtZXRob2QgPSBKRENUX0lTTE9XOyAgICAgIC8qIGppZGN0aW50IHVzZXMgaXNsb3ctc3R5bGUgdGFibGUgKi8KKyAgICAgIGJyZWFrOworICAgIGNhc2UgNjoKKyAgICAgIG1ldGhvZF9wdHIgPSBqcGVnX2lkY3RfNng2OworICAgICAgbWV0aG9kID0gSkRDVF9JU0xPVzsgICAgICAvKiBqaWRjdGludCB1c2VzIGlzbG93LXN0eWxlIHRhYmxlICovCisgICAgICBicmVhazsKKyAgICBjYXNlIDc6CisgICAgICBtZXRob2RfcHRyID0ganBlZ19pZGN0Xzd4NzsKKyAgICAgIG1ldGhvZCA9IEpEQ1RfSVNMT1c7ICAgICAgLyogamlkY3RpbnQgdXNlcyBpc2xvdy1zdHlsZSB0YWJsZSAqLwogICAgICAgYnJlYWs7CiAjZW5kaWYKICAgICBjYXNlIERDVFNJWkU6CiAgICAgICBzd2l0Y2ggKGNpbmZvLT5kY3RfbWV0aG9kKSB7CiAjaWZkZWYgRENUX0lTTE9XX1NVUFBPUlRFRAogICAgICAgY2FzZSBKRENUX0lTTE9XOgotCWlmIChqc2ltZF9jYW5faWRjdF9pc2xvdygpKQotCSAgbWV0aG9kX3B0ciA9IGpzaW1kX2lkY3RfaXNsb3c7Ci0JZWxzZQotCSAgbWV0aG9kX3B0ciA9IGpwZWdfaWRjdF9pc2xvdzsKLQltZXRob2QgPSBKRENUX0lTTE9XOwotCWJyZWFrOworICAgICAgICBpZiAoanNpbWRfY2FuX2lkY3RfaXNsb3coKSkKKyAgICAgICAgICBtZXRob2RfcHRyID0ganNpbWRfaWRjdF9pc2xvdzsKKyAgICAgICAgZWxzZQorICAgICAgICAgIG1ldGhvZF9wdHIgPSBqcGVnX2lkY3RfaXNsb3c7CisgICAgICAgIG1ldGhvZCA9IEpEQ1RfSVNMT1c7CisgICAgICAgIGJyZWFrOwogI2VuZGlmCiAjaWZkZWYgRENUX0lGQVNUX1NVUFBPUlRFRAogICAgICAgY2FzZSBKRENUX0lGQVNUOgotCWlmIChqc2ltZF9jYW5faWRjdF9pZmFzdCgpKQotCSAgbWV0aG9kX3B0ciA9IGpzaW1kX2lkY3RfaWZhc3Q7Ci0JZWxzZQotCSAgbWV0aG9kX3B0ciA9IGpwZWdfaWRjdF9pZmFzdDsKLQltZXRob2QgPSBKRENUX0lGQVNUOwotCWJyZWFrOworICAgICAgICBpZiAoanNpbWRfY2FuX2lkY3RfaWZhc3QoKSkKKyAgICAgICAgICBtZXRob2RfcHRyID0ganNpbWRfaWRjdF9pZmFzdDsKKyAgICAgICAgZWxzZQorICAgICAgICAgIG1ldGhvZF9wdHIgPSBqcGVnX2lkY3RfaWZhc3Q7CisgICAgICAgIG1ldGhvZCA9IEpEQ1RfSUZBU1Q7CisgICAgICAgIGJyZWFrOwogI2VuZGlmCiAjaWZkZWYgRENUX0ZMT0FUX1NVUFBPUlRFRAogICAgICAgY2FzZSBKRENUX0ZMT0FUOgotCWlmIChqc2ltZF9jYW5faWRjdF9mbG9hdCgpKQotCSAgbWV0aG9kX3B0ciA9IGpzaW1kX2lkY3RfZmxvYXQ7Ci0JZWxzZQotCSAgbWV0aG9kX3B0ciA9IGpwZWdfaWRjdF9mbG9hdDsKLQltZXRob2QgPSBKRENUX0ZMT0FUOwotCWJyZWFrOworICAgICAgICBpZiAoanNpbWRfY2FuX2lkY3RfZmxvYXQoKSkKKyAgICAgICAgICBtZXRob2RfcHRyID0ganNpbWRfaWRjdF9mbG9hdDsKKyAgICAgICAgZWxzZQorICAgICAgICAgIG1ldGhvZF9wdHIgPSBqcGVnX2lkY3RfZmxvYXQ7CisgICAgICAgIG1ldGhvZCA9IEpEQ1RfRkxPQVQ7CisgICAgICAgIGJyZWFrOwogI2VuZGlmCiAgICAgICBkZWZhdWx0OgotCUVSUkVYSVQoY2luZm8sIEpFUlJfTk9UX0NPTVBJTEVEKTsKLQlicmVhazsKKyAgICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9OT1RfQ09NUElMRUQpOworICAgICAgICBicmVhazsKICAgICAgIH0KICAgICAgIGJyZWFrOworICAgIGNhc2UgOToKKyAgICAgIG1ldGhvZF9wdHIgPSBqcGVnX2lkY3RfOXg5OworICAgICAgbWV0aG9kID0gSkRDVF9JU0xPVzsgICAgICAvKiBqaWRjdGludCB1c2VzIGlzbG93LXN0eWxlIHRhYmxlICovCisgICAgICBicmVhazsKKyAgICBjYXNlIDEwOgorICAgICAgbWV0aG9kX3B0ciA9IGpwZWdfaWRjdF8xMHgxMDsKKyAgICAgIG1ldGhvZCA9IEpEQ1RfSVNMT1c7ICAgICAgLyogamlkY3RpbnQgdXNlcyBpc2xvdy1zdHlsZSB0YWJsZSAqLworICAgICAgYnJlYWs7CisgICAgY2FzZSAxMToKKyAgICAgIG1ldGhvZF9wdHIgPSBqcGVnX2lkY3RfMTF4MTE7CisgICAgICBtZXRob2QgPSBKRENUX0lTTE9XOyAgICAgIC8qIGppZGN0aW50IHVzZXMgaXNsb3ctc3R5bGUgdGFibGUgKi8KKyAgICAgIGJyZWFrOworICAgIGNhc2UgMTI6CisgICAgICBtZXRob2RfcHRyID0ganBlZ19pZGN0XzEyeDEyOworICAgICAgbWV0aG9kID0gSkRDVF9JU0xPVzsgICAgICAvKiBqaWRjdGludCB1c2VzIGlzbG93LXN0eWxlIHRhYmxlICovCisgICAgICBicmVhazsKKyAgICBjYXNlIDEzOgorICAgICAgbWV0aG9kX3B0ciA9IGpwZWdfaWRjdF8xM3gxMzsKKyAgICAgIG1ldGhvZCA9IEpEQ1RfSVNMT1c7ICAgICAgLyogamlkY3RpbnQgdXNlcyBpc2xvdy1zdHlsZSB0YWJsZSAqLworICAgICAgYnJlYWs7CisgICAgY2FzZSAxNDoKKyAgICAgIG1ldGhvZF9wdHIgPSBqcGVnX2lkY3RfMTR4MTQ7CisgICAgICBtZXRob2QgPSBKRENUX0lTTE9XOyAgICAgIC8qIGppZGN0aW50IHVzZXMgaXNsb3ctc3R5bGUgdGFibGUgKi8KKyAgICAgIGJyZWFrOworICAgIGNhc2UgMTU6CisgICAgICBtZXRob2RfcHRyID0ganBlZ19pZGN0XzE1eDE1OworICAgICAgbWV0aG9kID0gSkRDVF9JU0xPVzsgICAgICAvKiBqaWRjdGludCB1c2VzIGlzbG93LXN0eWxlIHRhYmxlICovCisgICAgICBicmVhazsKKyAgICBjYXNlIDE2OgorICAgICAgbWV0aG9kX3B0ciA9IGpwZWdfaWRjdF8xNngxNjsKKyAgICAgIG1ldGhvZCA9IEpEQ1RfSVNMT1c7ICAgICAgLyogamlkY3RpbnQgdXNlcyBpc2xvdy1zdHlsZSB0YWJsZSAqLworICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9EQ1RTSVpFLCBjb21wcHRyLT5fRENUX3NjYWxlZF9zaXplKTsKICAgICAgIGJyZWFrOwpAQCAtMTczLDgxICsyMjIsODEgQEAKICAgICBpZiAoISBjb21wcHRyLT5jb21wb25lbnRfbmVlZGVkIHx8IGlkY3QtPmN1cl9tZXRob2RbY2ldID09IG1ldGhvZCkKICAgICAgIGNvbnRpbnVlOwogICAgIHF0YmwgPSBjb21wcHRyLT5xdWFudF90YWJsZTsKLSAgICBpZiAocXRibCA9PSBOVUxMKQkJLyogaGFwcGVucyBpZiBubyBkYXRhIHlldCBmb3IgY29tcG9uZW50ICovCisgICAgaWYgKHF0YmwgPT0gTlVMTCkgICAgICAgICAgIC8qIGhhcHBlbnMgaWYgbm8gZGF0YSB5ZXQgZm9yIGNvbXBvbmVudCAqLwogICAgICAgY29udGludWU7CiAgICAgaWRjdC0+Y3VyX21ldGhvZFtjaV0gPSBtZXRob2Q7CiAgICAgc3dpdGNoIChtZXRob2QpIHsKICNpZmRlZiBQUk9WSURFX0lTTE9XX1RBQkxFUwogICAgIGNhc2UgSkRDVF9JU0xPVzoKICAgICAgIHsKLQkvKiBGb3IgTEwmTSBJRENUIG1ldGhvZCwgbXVsdGlwbGllcnMgYXJlIGVxdWFsIHRvIHJhdyBxdWFudGl6YXRpb24KLQkgKiBjb2VmZmljaWVudHMsIGJ1dCBhcmUgc3RvcmVkIGFzIGludHMgdG8gZW5zdXJlIGFjY2VzcyBlZmZpY2llbmN5LgotCSAqLwotCUlTTE9XX01VTFRfVFlQRSAqIGlzbXRibCA9IChJU0xPV19NVUxUX1RZUEUgKikgY29tcHB0ci0+ZGN0X3RhYmxlOwotCWZvciAoaSA9IDA7IGkgPCBEQ1RTSVpFMjsgaSsrKSB7Ci0JICBpc210YmxbaV0gPSAoSVNMT1dfTVVMVF9UWVBFKSBxdGJsLT5xdWFudHZhbFtpXTsKLQl9CisgICAgICAgIC8qIEZvciBMTCZNIElEQ1QgbWV0aG9kLCBtdWx0aXBsaWVycyBhcmUgZXF1YWwgdG8gcmF3IHF1YW50aXphdGlvbgorICAgICAgICAgKiBjb2VmZmljaWVudHMsIGJ1dCBhcmUgc3RvcmVkIGFzIGludHMgdG8gZW5zdXJlIGFjY2VzcyBlZmZpY2llbmN5LgorICAgICAgICAgKi8KKyAgICAgICAgSVNMT1dfTVVMVF9UWVBFICogaXNtdGJsID0gKElTTE9XX01VTFRfVFlQRSAqKSBjb21wcHRyLT5kY3RfdGFibGU7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBEQ1RTSVpFMjsgaSsrKSB7CisgICAgICAgICAgaXNtdGJsW2ldID0gKElTTE9XX01VTFRfVFlQRSkgcXRibC0+cXVhbnR2YWxbaV07CisgICAgICAgIH0KICAgICAgIH0KICAgICAgIGJyZWFrOwogI2VuZGlmCiAjaWZkZWYgRENUX0lGQVNUX1NVUFBPUlRFRAogICAgIGNhc2UgSkRDVF9JRkFTVDoKICAgICAgIHsKLQkvKiBGb3IgQUEmTiBJRENUIG1ldGhvZCwgbXVsdGlwbGllcnMgYXJlIGVxdWFsIHRvIHF1YW50aXphdGlvbgotCSAqIGNvZWZmaWNpZW50cyBzY2FsZWQgYnkgc2NhbGVmYWN0b3Jbcm93XSpzY2FsZWZhY3Rvcltjb2xdLCB3aGVyZQotCSAqICAgc2NhbGVmYWN0b3JbMF0gPSAxCi0JICogICBzY2FsZWZhY3RvcltrXSA9IGNvcyhrKlBJLzE2KSAqIHNxcnQoMikgICAgZm9yIGs9MS4uNwotCSAqIEZvciBpbnRlZ2VyIG9wZXJhdGlvbiwgdGhlIG11bHRpcGxpZXIgdGFibGUgaXMgdG8gYmUgc2NhbGVkIGJ5Ci0JICogSUZBU1RfU0NBTEVfQklUUy4KLQkgKi8KLQlJRkFTVF9NVUxUX1RZUEUgKiBpZm10YmwgPSAoSUZBU1RfTVVMVF9UWVBFICopIGNvbXBwdHItPmRjdF90YWJsZTsKKyAgICAgICAgLyogRm9yIEFBJk4gSURDVCBtZXRob2QsIG11bHRpcGxpZXJzIGFyZSBlcXVhbCB0byBxdWFudGl6YXRpb24KKyAgICAgICAgICogY29lZmZpY2llbnRzIHNjYWxlZCBieSBzY2FsZWZhY3Rvcltyb3ddKnNjYWxlZmFjdG9yW2NvbF0sIHdoZXJlCisgICAgICAgICAqICAgc2NhbGVmYWN0b3JbMF0gPSAxCisgICAgICAgICAqICAgc2NhbGVmYWN0b3Jba10gPSBjb3MoaypQSS8xNikgKiBzcXJ0KDIpICAgIGZvciBrPTEuLjcKKyAgICAgICAgICogRm9yIGludGVnZXIgb3BlcmF0aW9uLCB0aGUgbXVsdGlwbGllciB0YWJsZSBpcyB0byBiZSBzY2FsZWQgYnkKKyAgICAgICAgICogSUZBU1RfU0NBTEVfQklUUy4KKyAgICAgICAgICovCisgICAgICAgIElGQVNUX01VTFRfVFlQRSAqIGlmbXRibCA9IChJRkFTVF9NVUxUX1RZUEUgKikgY29tcHB0ci0+ZGN0X3RhYmxlOwogI2RlZmluZSBDT05TVF9CSVRTIDE0Ci0Jc3RhdGljIGNvbnN0IElOVDE2IGFhbnNjYWxlc1tEQ1RTSVpFMl0gPSB7Ci0JICAvKiBwcmVjb21wdXRlZCB2YWx1ZXMgc2NhbGVkIHVwIGJ5IDE0IGJpdHMgKi8KLQkgIDE2Mzg0LCAyMjcyNSwgMjE0MDcsIDE5MjY2LCAxNjM4NCwgMTI4NzMsICA4ODY3LCAgNDUyMCwKLQkgIDIyNzI1LCAzMTUyMSwgMjk2OTIsIDI2NzIyLCAyMjcyNSwgMTc4NTUsIDEyMjk5LCAgNjI3MCwKLQkgIDIxNDA3LCAyOTY5MiwgMjc5NjksIDI1MTcyLCAyMTQwNywgMTY4MTksIDExNTg1LCAgNTkwNiwKLQkgIDE5MjY2LCAyNjcyMiwgMjUxNzIsIDIyNjU0LCAxOTI2NiwgMTUxMzcsIDEwNDI2LCAgNTMxNSwKLQkgIDE2Mzg0LCAyMjcyNSwgMjE0MDcsIDE5MjY2LCAxNjM4NCwgMTI4NzMsICA4ODY3LCAgNDUyMCwKLQkgIDEyODczLCAxNzg1NSwgMTY4MTksIDE1MTM3LCAxMjg3MywgMTAxMTQsICA2OTY3LCAgMzU1MiwKLQkgICA4ODY3LCAxMjI5OSwgMTE1ODUsIDEwNDI2LCAgODg2NywgIDY5NjcsICA0Nzk5LCAgMjQ0NiwKLQkgICA0NTIwLCAgNjI3MCwgIDU5MDYsICA1MzE1LCAgNDUyMCwgIDM1NTIsICAyNDQ2LCAgMTI0NwotCX07Ci0JU0hJRlRfVEVNUFMKKyAgICAgICAgc3RhdGljIGNvbnN0IElOVDE2IGFhbnNjYWxlc1tEQ1RTSVpFMl0gPSB7CisgICAgICAgICAgLyogcHJlY29tcHV0ZWQgdmFsdWVzIHNjYWxlZCB1cCBieSAxNCBiaXRzICovCisgICAgICAgICAgMTYzODQsIDIyNzI1LCAyMTQwNywgMTkyNjYsIDE2Mzg0LCAxMjg3MywgIDg4NjcsICA0NTIwLAorICAgICAgICAgIDIyNzI1LCAzMTUyMSwgMjk2OTIsIDI2NzIyLCAyMjcyNSwgMTc4NTUsIDEyMjk5LCAgNjI3MCwKKyAgICAgICAgICAyMTQwNywgMjk2OTIsIDI3OTY5LCAyNTE3MiwgMjE0MDcsIDE2ODE5LCAxMTU4NSwgIDU5MDYsCisgICAgICAgICAgMTkyNjYsIDI2NzIyLCAyNTE3MiwgMjI2NTQsIDE5MjY2LCAxNTEzNywgMTA0MjYsICA1MzE1LAorICAgICAgICAgIDE2Mzg0LCAyMjcyNSwgMjE0MDcsIDE5MjY2LCAxNjM4NCwgMTI4NzMsICA4ODY3LCAgNDUyMCwKKyAgICAgICAgICAxMjg3MywgMTc4NTUsIDE2ODE5LCAxNTEzNywgMTI4NzMsIDEwMTE0LCAgNjk2NywgIDM1NTIsCisgICAgICAgICAgIDg4NjcsIDEyMjk5LCAxMTU4NSwgMTA0MjYsICA4ODY3LCAgNjk2NywgIDQ3OTksICAyNDQ2LAorICAgICAgICAgICA0NTIwLCAgNjI3MCwgIDU5MDYsICA1MzE1LCAgNDUyMCwgIDM1NTIsICAyNDQ2LCAgMTI0NworICAgICAgICB9OworICAgICAgICBTSElGVF9URU1QUwogCi0JZm9yIChpID0gMDsgaSA8IERDVFNJWkUyOyBpKyspIHsKLQkgIGlmbXRibFtpXSA9IChJRkFTVF9NVUxUX1RZUEUpCi0JICAgIERFU0NBTEUoTVVMVElQTFkxNlYxNigoSU5UMzIpIHF0YmwtPnF1YW50dmFsW2ldLAotCQkJCSAgKElOVDMyKSBhYW5zY2FsZXNbaV0pLAotCQkgICAgQ09OU1RfQklUUy1JRkFTVF9TQ0FMRV9CSVRTKTsKLQl9CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBEQ1RTSVpFMjsgaSsrKSB7CisgICAgICAgICAgaWZtdGJsW2ldID0gKElGQVNUX01VTFRfVFlQRSkKKyAgICAgICAgICAgIERFU0NBTEUoTVVMVElQTFkxNlYxNigoSU5UMzIpIHF0YmwtPnF1YW50dmFsW2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJTlQzMikgYWFuc2NhbGVzW2ldKSwKKyAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUy1JRkFTVF9TQ0FMRV9CSVRTKTsKKyAgICAgICAgfQogICAgICAgfQogICAgICAgYnJlYWs7CiAjZW5kaWYKICNpZmRlZiBEQ1RfRkxPQVRfU1VQUE9SVEVECiAgICAgY2FzZSBKRENUX0ZMT0FUOgogICAgICAgewotCS8qIEZvciBmbG9hdCBBQSZOIElEQ1QgbWV0aG9kLCBtdWx0aXBsaWVycyBhcmUgZXF1YWwgdG8gcXVhbnRpemF0aW9uCi0JICogY29lZmZpY2llbnRzIHNjYWxlZCBieSBzY2FsZWZhY3Rvcltyb3ddKnNjYWxlZmFjdG9yW2NvbF0sIHdoZXJlCi0JICogICBzY2FsZWZhY3RvclswXSA9IDEKLQkgKiAgIHNjYWxlZmFjdG9yW2tdID0gY29zKGsqUEkvMTYpICogc3FydCgyKSAgICBmb3Igaz0xLi43Ci0JICovCi0JRkxPQVRfTVVMVF9UWVBFICogZm10YmwgPSAoRkxPQVRfTVVMVF9UWVBFICopIGNvbXBwdHItPmRjdF90YWJsZTsKLQlpbnQgcm93LCBjb2w7Ci0Jc3RhdGljIGNvbnN0IGRvdWJsZSBhYW5zY2FsZWZhY3RvcltEQ1RTSVpFXSA9IHsKLQkgIDEuMCwgMS4zODcwMzk4NDUsIDEuMzA2NTYyOTY1LCAxLjE3NTg3NTYwMiwKLQkgIDEuMCwgMC43ODU2OTQ5NTgsIDAuNTQxMTk2MTAwLCAwLjI3NTg5OTM3OQotCX07CisgICAgICAgIC8qIEZvciBmbG9hdCBBQSZOIElEQ1QgbWV0aG9kLCBtdWx0aXBsaWVycyBhcmUgZXF1YWwgdG8gcXVhbnRpemF0aW9uCisgICAgICAgICAqIGNvZWZmaWNpZW50cyBzY2FsZWQgYnkgc2NhbGVmYWN0b3Jbcm93XSpzY2FsZWZhY3Rvcltjb2xdLCB3aGVyZQorICAgICAgICAgKiAgIHNjYWxlZmFjdG9yWzBdID0gMQorICAgICAgICAgKiAgIHNjYWxlZmFjdG9yW2tdID0gY29zKGsqUEkvMTYpICogc3FydCgyKSAgICBmb3Igaz0xLi43CisgICAgICAgICAqLworICAgICAgICBGTE9BVF9NVUxUX1RZUEUgKiBmbXRibCA9IChGTE9BVF9NVUxUX1RZUEUgKikgY29tcHB0ci0+ZGN0X3RhYmxlOworICAgICAgICBpbnQgcm93LCBjb2w7CisgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgYWFuc2NhbGVmYWN0b3JbRENUU0laRV0gPSB7CisgICAgICAgICAgMS4wLCAxLjM4NzAzOTg0NSwgMS4zMDY1NjI5NjUsIDEuMTc1ODc1NjAyLAorICAgICAgICAgIDEuMCwgMC43ODU2OTQ5NTgsIDAuNTQxMTk2MTAwLCAwLjI3NTg5OTM3OQorICAgICAgICB9OwogCi0JaSA9IDA7Ci0JZm9yIChyb3cgPSAwOyByb3cgPCBEQ1RTSVpFOyByb3crKykgewotCSAgZm9yIChjb2wgPSAwOyBjb2wgPCBEQ1RTSVpFOyBjb2wrKykgewotCSAgICBmbXRibFtpXSA9IChGTE9BVF9NVUxUX1RZUEUpCi0JICAgICAgKChkb3VibGUpIHF0YmwtPnF1YW50dmFsW2ldICoKLQkgICAgICAgYWFuc2NhbGVmYWN0b3Jbcm93XSAqIGFhbnNjYWxlZmFjdG9yW2NvbF0pOwotCSAgICBpKys7Ci0JICB9Ci0JfQorICAgICAgICBpID0gMDsKKyAgICAgICAgZm9yIChyb3cgPSAwOyByb3cgPCBEQ1RTSVpFOyByb3crKykgeworICAgICAgICAgIGZvciAoY29sID0gMDsgY29sIDwgRENUU0laRTsgY29sKyspIHsKKyAgICAgICAgICAgIGZtdGJsW2ldID0gKEZMT0FUX01VTFRfVFlQRSkKKyAgICAgICAgICAgICAgKChkb3VibGUpIHF0YmwtPnF1YW50dmFsW2ldICoKKyAgICAgICAgICAgICAgIGFhbnNjYWxlZmFjdG9yW3Jvd10gKiBhYW5zY2FsZWZhY3Rvcltjb2xdKTsKKyAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgIH0KICAgICAgIGJyZWFrOwogI2VuZGlmCkBAIC0yNzIsNyArMzIxLDcgQEAKIAogICBpZGN0ID0gKG15X2lkY3RfcHRyKQogICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCi0JCQkJU0laRU9GKG15X2lkY3RfY29udHJvbGxlcikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSVpFT0YobXlfaWRjdF9jb250cm9sbGVyKSk7CiAgIGNpbmZvLT5pZGN0ID0gKHN0cnVjdCBqcGVnX2ludmVyc2VfZGN0ICopIGlkY3Q7CiAgIGlkY3QtPnB1Yi5zdGFydF9wYXNzID0gc3RhcnRfcGFzczsKIApAQCAtMjgxLDcgKzMzMCw3IEBACiAgICAgLyogQWxsb2NhdGUgYW5kIHByZS16ZXJvIGEgbXVsdGlwbGllciB0YWJsZSBmb3IgZWFjaCBjb21wb25lbnQgKi8KICAgICBjb21wcHRyLT5kY3RfdGFibGUgPQogICAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKLQkJCQkgIFNJWkVPRihtdWx0aXBsaWVyX3RhYmxlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0laRU9GKG11bHRpcGxpZXJfdGFibGUpKTsKICAgICBNRU1aRVJPKGNvbXBwdHItPmRjdF90YWJsZSwgU0laRU9GKG11bHRpcGxpZXJfdGFibGUpKTsKICAgICAvKiBNYXJrIG11bHRpcGxpZXIgdGFibGUgbm90IHlldCBzZXQgdXAgZm9yIGFueSBtZXRob2QgKi8KICAgICBpZGN0LT5jdXJfbWV0aG9kW2NpXSA9IC0xOwpkaWZmIC0tZ2l0IGEvamRodWZmLmMgYi9qZGh1ZmYuYwppbmRleCA0MTk3Y2M1Li5iNTQ1ZTY2IDEwMDY0NAotLS0gYS9qZGh1ZmYuYworKysgYi9qZGh1ZmYuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBUaGlzIGZpbGUgd2FzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZToKICAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk3LCBUaG9tYXMgRy4gTGFuZS4KLSAqIE1vZGlmaWNhdGlvbnM6CisgKiBsaWJqcGVnLXR1cmJvIE1vZGlmaWNhdGlvbnM6CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMSwgRC4gUi4gQ29tbWFuZGVyLgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgogICoKQEAgLTE5LDcgKzE5LDcgQEAKICNkZWZpbmUgSlBFR19JTlRFUk5BTFMKICNpbmNsdWRlICJqaW5jbHVkZS5oIgogI2luY2x1ZGUgImpwZWdsaWIuaCIKLSNpbmNsdWRlICJqZGh1ZmYuaCIJCS8qIERlY2xhcmF0aW9ucyBzaGFyZWQgd2l0aCBqZHBodWZmLmMgKi8KKyNpbmNsdWRlICJqZGh1ZmYuaCIgICAgICAgICAgICAgLyogRGVjbGFyYXRpb25zIHNoYXJlZCB3aXRoIGpkcGh1ZmYuYyAqLwogI2luY2x1ZGUgImpwZWdjb21wLmgiCiAKIApAQCAtNDQsMTAgKzQ0LDEwIEBACiAjZWxzZQogI2lmIE1BWF9DT01QU19JTl9TQ0FOID09IDQKICNkZWZpbmUgQVNTSUdOX1NUQVRFKGRlc3Qsc3JjKSAgXAotCSgoZGVzdCkubGFzdF9kY192YWxbMF0gPSAoc3JjKS5sYXN0X2RjX3ZhbFswXSwgXAotCSAoZGVzdCkubGFzdF9kY192YWxbMV0gPSAoc3JjKS5sYXN0X2RjX3ZhbFsxXSwgXAotCSAoZGVzdCkubGFzdF9kY192YWxbMl0gPSAoc3JjKS5sYXN0X2RjX3ZhbFsyXSwgXAotCSAoZGVzdCkubGFzdF9kY192YWxbM10gPSAoc3JjKS5sYXN0X2RjX3ZhbFszXSkKKyAgICAgICAgKChkZXN0KS5sYXN0X2RjX3ZhbFswXSA9IChzcmMpLmxhc3RfZGNfdmFsWzBdLCBcCisgICAgICAgICAoZGVzdCkubGFzdF9kY192YWxbMV0gPSAoc3JjKS5sYXN0X2RjX3ZhbFsxXSwgXAorICAgICAgICAgKGRlc3QpLmxhc3RfZGNfdmFsWzJdID0gKHNyYykubGFzdF9kY192YWxbMl0sIFwKKyAgICAgICAgIChkZXN0KS5sYXN0X2RjX3ZhbFszXSA9IChzcmMpLmxhc3RfZGNfdmFsWzNdKQogI2VuZGlmCiAjZW5kaWYKIApAQCAtNTgsMTEgKzU4LDExIEBACiAgIC8qIFRoZXNlIGZpZWxkcyBhcmUgbG9hZGVkIGludG8gbG9jYWwgdmFyaWFibGVzIGF0IHN0YXJ0IG9mIGVhY2ggTUNVLgogICAgKiBJbiBjYXNlIG9mIHN1c3BlbnNpb24sIHdlIGV4aXQgV0lUSE9VVCB1cGRhdGluZyB0aGVtLgogICAgKi8KLSAgYml0cmVhZF9wZXJtX3N0YXRlIGJpdHN0YXRlOwkvKiBCaXQgYnVmZmVyIGF0IHN0YXJ0IG9mIE1DVSAqLwotICBzYXZhYmxlX3N0YXRlIHNhdmVkOwkJLyogT3RoZXIgc3RhdGUgYXQgc3RhcnQgb2YgTUNVICovCisgIGJpdHJlYWRfcGVybV9zdGF0ZSBiaXRzdGF0ZTsgIC8qIEJpdCBidWZmZXIgYXQgc3RhcnQgb2YgTUNVICovCisgIHNhdmFibGVfc3RhdGUgc2F2ZWQ7ICAgICAgICAgIC8qIE90aGVyIHN0YXRlIGF0IHN0YXJ0IG9mIE1DVSAqLwogCiAgIC8qIFRoZXNlIGZpZWxkcyBhcmUgTk9UIGxvYWRlZCBpbnRvIGxvY2FsIHdvcmtpbmcgc3RhdGUuICovCi0gIHVuc2lnbmVkIGludCByZXN0YXJ0c190b19nbzsJLyogTUNVcyBsZWZ0IGluIHRoaXMgcmVzdGFydCBpbnRlcnZhbCAqLworICB1bnNpZ25lZCBpbnQgcmVzdGFydHNfdG9fZ287ICAvKiBNQ1VzIGxlZnQgaW4gdGhpcyByZXN0YXJ0IGludGVydmFsICovCiAKICAgLyogUG9pbnRlcnMgdG8gZGVyaXZlZCB0YWJsZXMgKHRoZXNlIHdvcmtzcGFjZXMgaGF2ZSBpbWFnZSBsaWZlc3BhbikgKi8KICAgZF9kZXJpdmVkX3RibCAqIGRjX2Rlcml2ZWRfdGJsc1tOVU1fSFVGRl9UQkxTXTsKQEAgLTEwNyw5ICsxMDcsOSBAQAogICAgIC8qIENvbXB1dGUgZGVyaXZlZCB2YWx1ZXMgZm9yIEh1ZmZtYW4gdGFibGVzICovCiAgICAgLyogV2UgbWF5IGRvIHRoaXMgbW9yZSB0aGFuIG9uY2UgZm9yIGEgdGFibGUsIGJ1dCBpdCdzIG5vdCBleHBlbnNpdmUgKi8KICAgICBqcGVnX21ha2VfZF9kZXJpdmVkX3RibChjaW5mbywgVFJVRSwgZGN0YmwsCi0JCQkgICAgJiBlbnRyb3B5LT5kY19kZXJpdmVkX3RibHNbZGN0YmxdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIGVudHJvcHktPmRjX2Rlcml2ZWRfdGJsc1tkY3RibF0pOwogICAgIGpwZWdfbWFrZV9kX2Rlcml2ZWRfdGJsKGNpbmZvLCBGQUxTRSwgYWN0YmwsCi0JCQkgICAgJiBlbnRyb3B5LT5hY19kZXJpdmVkX3RibHNbYWN0YmxdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIGVudHJvcHktPmFjX2Rlcml2ZWRfdGJsc1thY3RibF0pOwogICAgIC8qIEluaXRpYWxpemUgREMgcHJlZGljdGlvbnMgdG8gMCAqLwogICAgIGVudHJvcHktPnNhdmVkLmxhc3RfZGNfdmFsW2NpXSA9IDA7CiAgIH0KQEAgLTE1MCw3ICsxNTAsNyBAQAogCiBHTE9CQUwodm9pZCkKIGpwZWdfbWFrZV9kX2Rlcml2ZWRfdGJsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBib29sZWFuIGlzREMsIGludCB0YmxubywKLQkJCSBkX2Rlcml2ZWRfdGJsICoqIHBkdGJsKQorICAgICAgICAgICAgICAgICAgICAgICAgIGRfZGVyaXZlZF90YmwgKiogcGR0YmwpCiB7CiAgIEpIVUZGX1RCTCAqaHRibDsKICAgZF9kZXJpdmVkX3RibCAqZHRibDsKQEAgLTE3NiwyNiArMTc2LDI2IEBACiAgIGlmICgqcGR0YmwgPT0gTlVMTCkKICAgICAqcGR0YmwgPSAoZF9kZXJpdmVkX3RibCAqKQogICAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKLQkJCQkgIFNJWkVPRihkX2Rlcml2ZWRfdGJsKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0laRU9GKGRfZGVyaXZlZF90YmwpKTsKICAgZHRibCA9ICpwZHRibDsKLSAgZHRibC0+cHViID0gaHRibDsJCS8qIGZpbGwgaW4gYmFjayBsaW5rICovCi0gIAorICBkdGJsLT5wdWIgPSBodGJsOyAgICAgICAgICAgICAvKiBmaWxsIGluIGJhY2sgbGluayAqLworCiAgIC8qIEZpZ3VyZSBDLjE6IG1ha2UgdGFibGUgb2YgSHVmZm1hbiBjb2RlIGxlbmd0aCBmb3IgZWFjaCBzeW1ib2wgKi8KIAogICBwID0gMDsKICAgZm9yIChsID0gMTsgbCA8PSAxNjsgbCsrKSB7CiAgICAgaSA9IChpbnQpIGh0YmwtPmJpdHNbbF07Ci0gICAgaWYgKGkgPCAwIHx8IHAgKyBpID4gMjU2KQkvKiBwcm90ZWN0IGFnYWluc3QgdGFibGUgb3ZlcnJ1biAqLworICAgIGlmIChpIDwgMCB8fCBwICsgaSA+IDI1NikgICAvKiBwcm90ZWN0IGFnYWluc3QgdGFibGUgb3ZlcnJ1biAqLwogICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfSFVGRl9UQUJMRSk7CiAgICAgd2hpbGUgKGktLSkKICAgICAgIGh1ZmZzaXplW3ArK10gPSAoY2hhcikgbDsKICAgfQogICBodWZmc2l6ZVtwXSA9IDA7CiAgIG51bXN5bWJvbHMgPSBwOwotICAKKwogICAvKiBGaWd1cmUgQy4yOiBnZW5lcmF0ZSB0aGUgY29kZXMgdGhlbXNlbHZlcyAqLwogICAvKiBXZSBhbHNvIHZhbGlkYXRlIHRoYXQgdGhlIGNvdW50cyByZXByZXNlbnQgYSBsZWdhbCBIdWZmbWFuIGNvZGUgdHJlZS4gKi8KLSAgCisKICAgY29kZSA9IDA7CiAgIHNpID0gaHVmZnNpemVbMF07CiAgIHAgPSAwOwpAQCAtMjI1LDcgKzIyNSw3IEBACiAgICAgICBwICs9IGh0YmwtPmJpdHNbbF07CiAgICAgICBkdGJsLT5tYXhjb2RlW2xdID0gaHVmZmNvZGVbcC0xXTsgLyogbWF4aW11bSBjb2RlIG9mIGxlbmd0aCBsICovCiAgICAgfSBlbHNlIHsKLSAgICAgIGR0YmwtPm1heGNvZGVbbF0gPSAtMTsJLyogLTEgaWYgbm8gY29kZXMgb2YgdGhpcyBsZW5ndGggKi8KKyAgICAgIGR0YmwtPm1heGNvZGVbbF0gPSAtMTsgICAgLyogLTEgaWYgbm8gY29kZXMgb2YgdGhpcyBsZW5ndGggKi8KICAgICB9CiAgIH0KICAgZHRibC0+dmFsb2Zmc2V0WzE3XSA9IDA7CkBAIC0yNDgsOCArMjQ4LDggQEAKICAgICAgIC8qIEdlbmVyYXRlIGxlZnQtanVzdGlmaWVkIGNvZGUgZm9sbG93ZWQgYnkgYWxsIHBvc3NpYmxlIGJpdCBzZXF1ZW5jZXMgKi8KICAgICAgIGxvb2tiaXRzID0gaHVmZmNvZGVbcF0gPDwgKEhVRkZfTE9PS0FIRUFELWwpOwogICAgICAgZm9yIChjdHIgPSAxIDw8IChIVUZGX0xPT0tBSEVBRC1sKTsgY3RyID4gMDsgY3RyLS0pIHsKLQlkdGJsLT5sb29rdXBbbG9va2JpdHNdID0gKGwgPDwgSFVGRl9MT09LQUhFQUQpIHwgaHRibC0+aHVmZnZhbFtwXTsKLQlsb29rYml0cysrOworICAgICAgICBkdGJsLT5sb29rdXBbbG9va2JpdHNdID0gKGwgPDwgSFVGRl9MT09LQUhFQUQpIHwgaHRibC0+aHVmZnZhbFtwXTsKKyAgICAgICAgbG9va2JpdHMrKzsKICAgICAgIH0KICAgICB9CiAgIH0KQEAgLTI2NCw3ICsyNjQsNyBAQAogICAgIGZvciAoaSA9IDA7IGkgPCBudW1zeW1ib2xzOyBpKyspIHsKICAgICAgIGludCBzeW0gPSBodGJsLT5odWZmdmFsW2ldOwogICAgICAgaWYgKHN5bSA8IDAgfHwgc3ltID4gMTUpCi0JRVJSRVhJVChjaW5mbywgSkVSUl9CQURfSFVGRl9UQUJMRSk7CisgICAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0hVRkZfVEFCTEUpOwogICAgIH0KICAgfQogfQpAQCAtMjg2LDcgKzI4Niw3IEBACiAgKi8KIAogI2lmZGVmIFNMT1dfU0hJRlRfMzIKLSNkZWZpbmUgTUlOX0dFVF9CSVRTICAxNQkvKiBtaW5pbXVtIGFsbG93YWJsZSB2YWx1ZSAqLworI2RlZmluZSBNSU5fR0VUX0JJVFMgIDE1ICAgICAgICAvKiBtaW5pbXVtIGFsbG93YWJsZSB2YWx1ZSAqLwogI2Vsc2UKICNkZWZpbmUgTUlOX0dFVF9CSVRTICAoQklUX0JVRl9TSVpFLTcpCiAjZW5kaWYKQEAgLTI5NCw4ICsyOTQsOCBAQAogCiBHTE9CQUwoYm9vbGVhbikKIGpwZWdfZmlsbF9iaXRfYnVmZmVyIChiaXRyZWFkX3dvcmtpbmdfc3RhdGUgKiBzdGF0ZSwKLQkJICAgICAgcmVnaXN0ZXIgYml0X2J1Zl90eXBlIGdldF9idWZmZXIsIHJlZ2lzdGVyIGludCBiaXRzX2xlZnQsCi0JCSAgICAgIGludCBuYml0cykKKyAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlciBiaXRfYnVmX3R5cGUgZ2V0X2J1ZmZlciwgcmVnaXN0ZXIgaW50IGJpdHNfbGVmdCwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgbmJpdHMpCiAvKiBMb2FkIHVwIHRoZSBiaXQgYnVmZmVyIHRvIGEgZGVwdGggb2YgYXQgbGVhc3QgbmJpdHMgKi8KIHsKICAgLyogQ29weSBoZWF2aWx5IHVzZWQgc3RhdGUgZmllbGRzIGludG8gbG9jYWxzIChob3BlZnVsbHkgcmVnaXN0ZXJzKSAqLwpAQCAtMzA3LDU0ICszMDcsNTQgQEAKICAgLyogKEl0IGlzIGFzc3VtZWQgdGhhdCBubyByZXF1ZXN0IHdpbGwgYmUgZm9yIG1vcmUgdGhhbiB0aGF0IG1hbnkgYml0cy4pICovCiAgIC8qIFdlIGZhaWwgdG8gZG8gc28gb25seSBpZiB3ZSBoaXQgYSBtYXJrZXIgb3IgYXJlIGZvcmNlZCB0byBzdXNwZW5kLiAqLwogCi0gIGlmIChjaW5mby0+dW5yZWFkX21hcmtlciA9PSAwKSB7CS8qIGNhbm5vdCBhZHZhbmNlIHBhc3QgYSBtYXJrZXIgKi8KKyAgaWYgKGNpbmZvLT51bnJlYWRfbWFya2VyID09IDApIHsgICAgICAvKiBjYW5ub3QgYWR2YW5jZSBwYXN0IGEgbWFya2VyICovCiAgICAgd2hpbGUgKGJpdHNfbGVmdCA8IE1JTl9HRVRfQklUUykgewogICAgICAgcmVnaXN0ZXIgaW50IGM7CiAKICAgICAgIC8qIEF0dGVtcHQgdG8gcmVhZCBhIGJ5dGUgKi8KICAgICAgIGlmIChieXRlc19pbl9idWZmZXIgPT0gMCkgewotCWlmICghICgqY2luZm8tPnNyYy0+ZmlsbF9pbnB1dF9idWZmZXIpIChjaW5mbykpCi0JICByZXR1cm4gRkFMU0U7Ci0JbmV4dF9pbnB1dF9ieXRlID0gY2luZm8tPnNyYy0+bmV4dF9pbnB1dF9ieXRlOwotCWJ5dGVzX2luX2J1ZmZlciA9IGNpbmZvLT5zcmMtPmJ5dGVzX2luX2J1ZmZlcjsKKyAgICAgICAgaWYgKCEgKCpjaW5mby0+c3JjLT5maWxsX2lucHV0X2J1ZmZlcikgKGNpbmZvKSkKKyAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIG5leHRfaW5wdXRfYnl0ZSA9IGNpbmZvLT5zcmMtPm5leHRfaW5wdXRfYnl0ZTsKKyAgICAgICAgYnl0ZXNfaW5fYnVmZmVyID0gY2luZm8tPnNyYy0+Ynl0ZXNfaW5fYnVmZmVyOwogICAgICAgfQogICAgICAgYnl0ZXNfaW5fYnVmZmVyLS07CiAgICAgICBjID0gR0VUSk9DVEVUKCpuZXh0X2lucHV0X2J5dGUrKyk7CiAKICAgICAgIC8qIElmIGl0J3MgMHhGRiwgY2hlY2sgYW5kIGRpc2NhcmQgc3R1ZmZlZCB6ZXJvIGJ5dGUgKi8KICAgICAgIGlmIChjID09IDB4RkYpIHsKLQkvKiBMb29wIGhlcmUgdG8gZGlzY2FyZCBhbnkgcGFkZGluZyBGRidzIG9uIHRlcm1pbmF0aW5nIG1hcmtlciwKLQkgKiBzbyB0aGF0IHdlIGNhbiBzYXZlIGEgdmFsaWQgdW5yZWFkX21hcmtlciB2YWx1ZS4gIE5PVEU6IHdlIHdpbGwKLQkgKiBhY2NlcHQgbXVsdGlwbGUgRkYncyBmb2xsb3dlZCBieSBhIDAgYXMgbWVhbmluZyBhIHNpbmdsZSBGRiBkYXRhCi0JICogYnl0ZS4gIFRoaXMgZGF0YSBwYXR0ZXJuIGlzIG5vdCB2YWxpZCBhY2NvcmRpbmcgdG8gdGhlIHN0YW5kYXJkLgotCSAqLwotCWRvIHsKLQkgIGlmIChieXRlc19pbl9idWZmZXIgPT0gMCkgewotCSAgICBpZiAoISAoKmNpbmZvLT5zcmMtPmZpbGxfaW5wdXRfYnVmZmVyKSAoY2luZm8pKQotCSAgICAgIHJldHVybiBGQUxTRTsKLQkgICAgbmV4dF9pbnB1dF9ieXRlID0gY2luZm8tPnNyYy0+bmV4dF9pbnB1dF9ieXRlOwotCSAgICBieXRlc19pbl9idWZmZXIgPSBjaW5mby0+c3JjLT5ieXRlc19pbl9idWZmZXI7Ci0JICB9Ci0JICBieXRlc19pbl9idWZmZXItLTsKLQkgIGMgPSBHRVRKT0NURVQoKm5leHRfaW5wdXRfYnl0ZSsrKTsKLQl9IHdoaWxlIChjID09IDB4RkYpOworICAgICAgICAvKiBMb29wIGhlcmUgdG8gZGlzY2FyZCBhbnkgcGFkZGluZyBGRidzIG9uIHRlcm1pbmF0aW5nIG1hcmtlciwKKyAgICAgICAgICogc28gdGhhdCB3ZSBjYW4gc2F2ZSBhIHZhbGlkIHVucmVhZF9tYXJrZXIgdmFsdWUuICBOT1RFOiB3ZSB3aWxsCisgICAgICAgICAqIGFjY2VwdCBtdWx0aXBsZSBGRidzIGZvbGxvd2VkIGJ5IGEgMCBhcyBtZWFuaW5nIGEgc2luZ2xlIEZGIGRhdGEKKyAgICAgICAgICogYnl0ZS4gIFRoaXMgZGF0YSBwYXR0ZXJuIGlzIG5vdCB2YWxpZCBhY2NvcmRpbmcgdG8gdGhlIHN0YW5kYXJkLgorICAgICAgICAgKi8KKyAgICAgICAgZG8geworICAgICAgICAgIGlmIChieXRlc19pbl9idWZmZXIgPT0gMCkgeworICAgICAgICAgICAgaWYgKCEgKCpjaW5mby0+c3JjLT5maWxsX2lucHV0X2J1ZmZlcikgKGNpbmZvKSkKKyAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgbmV4dF9pbnB1dF9ieXRlID0gY2luZm8tPnNyYy0+bmV4dF9pbnB1dF9ieXRlOworICAgICAgICAgICAgYnl0ZXNfaW5fYnVmZmVyID0gY2luZm8tPnNyYy0+Ynl0ZXNfaW5fYnVmZmVyOworICAgICAgICAgIH0KKyAgICAgICAgICBieXRlc19pbl9idWZmZXItLTsKKyAgICAgICAgICBjID0gR0VUSk9DVEVUKCpuZXh0X2lucHV0X2J5dGUrKyk7CisgICAgICAgIH0gd2hpbGUgKGMgPT0gMHhGRik7CiAKLQlpZiAoYyA9PSAwKSB7Ci0JICAvKiBGb3VuZCBGRi8wMCwgd2hpY2ggcmVwcmVzZW50cyBhbiBGRiBkYXRhIGJ5dGUgKi8KLQkgIGMgPSAweEZGOwotCX0gZWxzZSB7Ci0JICAvKiBPb3BzLCBpdCdzIGFjdHVhbGx5IGEgbWFya2VyIGluZGljYXRpbmcgZW5kIG9mIGNvbXByZXNzZWQgZGF0YS4KLQkgICAqIFNhdmUgdGhlIG1hcmtlciBjb2RlIGZvciBsYXRlciB1c2UuCi0JICAgKiBGaW5lIHBvaW50OiBpdCBtaWdodCBhcHBlYXIgdGhhdCB3ZSBzaG91bGQgc2F2ZSB0aGUgbWFya2VyIGludG8KLQkgICAqIGJpdHJlYWQgd29ya2luZyBzdGF0ZSwgbm90IHN0cmFpZ2h0IGludG8gcGVybWFuZW50IHN0YXRlLiAgQnV0Ci0JICAgKiBvbmNlIHdlIGhhdmUgaGl0IGEgbWFya2VyLCB3ZSBjYW5ub3QgbmVlZCB0byBzdXNwZW5kIHdpdGhpbiB0aGUKLQkgICAqIGN1cnJlbnQgTUNVLCBiZWNhdXNlIHdlIHdpbGwgcmVhZCBubyBtb3JlIGJ5dGVzIGZyb20gdGhlIGRhdGEKLQkgICAqIHNvdXJjZS4gIFNvIGl0IGlzIE9LIHRvIHVwZGF0ZSBwZXJtYW5lbnQgc3RhdGUgcmlnaHQgYXdheS4KLQkgICAqLwotCSAgY2luZm8tPnVucmVhZF9tYXJrZXIgPSBjOwotCSAgLyogU2VlIGlmIHdlIG5lZWQgdG8gaW5zZXJ0IHNvbWUgZmFrZSB6ZXJvIGJpdHMuICovCi0JICBnb3RvIG5vX21vcmVfYnl0ZXM7Ci0JfQorICAgICAgICBpZiAoYyA9PSAwKSB7CisgICAgICAgICAgLyogRm91bmQgRkYvMDAsIHdoaWNoIHJlcHJlc2VudHMgYW4gRkYgZGF0YSBieXRlICovCisgICAgICAgICAgYyA9IDB4RkY7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgLyogT29wcywgaXQncyBhY3R1YWxseSBhIG1hcmtlciBpbmRpY2F0aW5nIGVuZCBvZiBjb21wcmVzc2VkIGRhdGEuCisgICAgICAgICAgICogU2F2ZSB0aGUgbWFya2VyIGNvZGUgZm9yIGxhdGVyIHVzZS4KKyAgICAgICAgICAgKiBGaW5lIHBvaW50OiBpdCBtaWdodCBhcHBlYXIgdGhhdCB3ZSBzaG91bGQgc2F2ZSB0aGUgbWFya2VyIGludG8KKyAgICAgICAgICAgKiBiaXRyZWFkIHdvcmtpbmcgc3RhdGUsIG5vdCBzdHJhaWdodCBpbnRvIHBlcm1hbmVudCBzdGF0ZS4gIEJ1dAorICAgICAgICAgICAqIG9uY2Ugd2UgaGF2ZSBoaXQgYSBtYXJrZXIsIHdlIGNhbm5vdCBuZWVkIHRvIHN1c3BlbmQgd2l0aGluIHRoZQorICAgICAgICAgICAqIGN1cnJlbnQgTUNVLCBiZWNhdXNlIHdlIHdpbGwgcmVhZCBubyBtb3JlIGJ5dGVzIGZyb20gdGhlIGRhdGEKKyAgICAgICAgICAgKiBzb3VyY2UuICBTbyBpdCBpcyBPSyB0byB1cGRhdGUgcGVybWFuZW50IHN0YXRlIHJpZ2h0IGF3YXkuCisgICAgICAgICAgICovCisgICAgICAgICAgY2luZm8tPnVucmVhZF9tYXJrZXIgPSBjOworICAgICAgICAgIC8qIFNlZSBpZiB3ZSBuZWVkIHRvIGluc2VydCBzb21lIGZha2UgemVybyBiaXRzLiAqLworICAgICAgICAgIGdvdG8gbm9fbW9yZV9ieXRlczsKKyAgICAgICAgfQogICAgICAgfQogCiAgICAgICAvKiBPSywgbG9hZCBjIGludG8gZ2V0X2J1ZmZlciAqLwpAQCAtMzc0LDggKzM3NCw4IEBACiAgICAgICAgKiBhcHBlYXJzIHBlciBkYXRhIHNlZ21lbnQuCiAgICAgICAgKi8KICAgICAgIGlmICghIGNpbmZvLT5lbnRyb3B5LT5pbnN1ZmZpY2llbnRfZGF0YSkgewotCVdBUk5NUyhjaW5mbywgSldSTl9ISVRfTUFSS0VSKTsKLQljaW5mby0+ZW50cm9weS0+aW5zdWZmaWNpZW50X2RhdGEgPSBUUlVFOworICAgICAgICBXQVJOTVMoY2luZm8sIEpXUk5fSElUX01BUktFUik7CisgICAgICAgIGNpbmZvLT5lbnRyb3B5LT5pbnN1ZmZpY2llbnRfZGF0YSA9IFRSVUU7CiAgICAgICB9CiAgICAgICAvKiBGaWxsIHRoZSBidWZmZXIgd2l0aCB6ZXJvIGJpdHMgKi8KICAgICAgIGdldF9idWZmZXIgPDw9IE1JTl9HRVRfQklUUyAtIGJpdHNfbGVmdDsKQEAgLTQ0NCw4ICs0NDQsOCBAQAogCiBHTE9CQUwoaW50KQoganBlZ19odWZmX2RlY29kZSAoYml0cmVhZF93b3JraW5nX3N0YXRlICogc3RhdGUsCi0JCSAgcmVnaXN0ZXIgYml0X2J1Zl90eXBlIGdldF9idWZmZXIsIHJlZ2lzdGVyIGludCBiaXRzX2xlZnQsCi0JCSAgZF9kZXJpdmVkX3RibCAqIGh0YmwsIGludCBtaW5fYml0cykKKyAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGJpdF9idWZfdHlwZSBnZXRfYnVmZmVyLCByZWdpc3RlciBpbnQgYml0c19sZWZ0LAorICAgICAgICAgICAgICAgICAgZF9kZXJpdmVkX3RibCAqIGh0YmwsIGludCBtaW5fYml0cykKIHsKICAgcmVnaXN0ZXIgaW50IGwgPSBtaW5fYml0czsKICAgcmVnaXN0ZXIgSU5UMzIgY29kZTsKQEAgLTQ3NCw3ICs0NzQsNyBAQAogCiAgIGlmIChsID4gMTYpIHsKICAgICBXQVJOTVMoc3RhdGUtPmNpbmZvLCBKV1JOX0hVRkZfQkFEX0NPREUpOwotICAgIHJldHVybiAwOwkJCS8qIGZha2UgYSB6ZXJvIGFzIHRoZSBzYWZlc3QgcmVzdWx0ICovCisgICAgcmV0dXJuIDA7ICAgICAgICAgICAgICAgICAgIC8qIGZha2UgYSB6ZXJvIGFzIHRoZSBzYWZlc3QgcmVzdWx0ICovCiAgIH0KIAogICByZXR1cm4gaHRibC0+cHViLT5odWZmdmFsWyAoaW50KSAoY29kZSArIGh0YmwtPnZhbG9mZnNldFtsXSkgXTsKQEAgLTU5NCw3ICs1OTQsNyBAQAogCiAgICAgICAgIHIgPSBzID4+IDQ7CiAgICAgICAgIHMgJj0gMTU7Ci0gICAgICAKKwogICAgICAgICBpZiAocykgewogICAgICAgICAgIGsgKz0gcjsKICAgICAgICAgICBDSEVDS19CSVRfQlVGRkVSKGJyX3N0YXRlLCBzLCByZXR1cm4gRkFMU0UpOwpAQCAtNjgzLDcgKzY4Myw3IEBACiAgICAgICAgIEhVRkZfREVDT0RFX0ZBU1QocywgbCwgYWN0YmwpOwogICAgICAgICByID0gcyA+PiA0OwogICAgICAgICBzICY9IDE1OwotICAgICAgCisKICAgICAgICAgaWYgKHMpIHsKICAgICAgICAgICBrICs9IHI7CiAgICAgICAgICAgRklMTF9CSVRfQlVGRkVSX0ZBU1QKQEAgLTc1NSw3ICs3NTUsNyBAQAogICBpZiAoY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWwpIHsKICAgICBpZiAoZW50cm9weS0+cmVzdGFydHNfdG9fZ28gPT0gMCkKICAgICAgIGlmICghIHByb2Nlc3NfcmVzdGFydChjaW5mbykpCi0JcmV0dXJuIEZBTFNFOworICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgdXNlZmFzdCA9IDA7CiAgIH0KIApAQCAtNzk3LDcgKzc5Nyw3IEBACiAKICAgZW50cm9weSA9IChodWZmX2VudHJvcHlfcHRyKQogICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCi0JCQkJU0laRU9GKGh1ZmZfZW50cm9weV9kZWNvZGVyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJWkVPRihodWZmX2VudHJvcHlfZGVjb2RlcikpOwogICBjaW5mby0+ZW50cm9weSA9IChzdHJ1Y3QganBlZ19lbnRyb3B5X2RlY29kZXIgKikgZW50cm9weTsKICAgZW50cm9weS0+cHViLnN0YXJ0X3Bhc3MgPSBzdGFydF9wYXNzX2h1ZmZfZGVjb2RlcjsKICAgZW50cm9weS0+cHViLmRlY29kZV9tY3UgPSBkZWNvZGVfbWN1OwpkaWZmIC0tZ2l0IGEvamRodWZmLmggYi9qZGh1ZmYuaAppbmRleCAyMjAxNDM2Li45Y2UzMzk5IDEwMDY0NAotLS0gYS9qZGh1ZmYuaAorKysgYi9qZGh1ZmYuaApAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBUaGlzIGZpbGUgd2FzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZToKICAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk3LCBUaG9tYXMgRy4gTGFuZS4KLSAqIE1vZGlmaWNhdGlvbnM6CisgKiBsaWJqcGVnLXR1cmJvIE1vZGlmaWNhdGlvbnM6CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMSwgRC4gUi4gQ29tbWFuZGVyLgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgogICoKQEAgLTE1LDIxICsxNSwyMSBAQAogLyogU2hvcnQgZm9ybXMgb2YgZXh0ZXJuYWwgbmFtZXMgZm9yIHN5c3RlbXMgd2l0aCBicmFpbi1kYW1hZ2VkIGxpbmtlcnMuICovCiAKICNpZmRlZiBORUVEX1NIT1JUX0VYVEVSTkFMX05BTUVTCi0jZGVmaW5lIGpwZWdfbWFrZV9kX2Rlcml2ZWRfdGJsCWpNa0REZXJpdmVkCi0jZGVmaW5lIGpwZWdfZmlsbF9iaXRfYnVmZmVyCWpGaWxCaXRCdWYKLSNkZWZpbmUganBlZ19odWZmX2RlY29kZQlqSHVmRGVjb2RlCisjZGVmaW5lIGpwZWdfbWFrZV9kX2Rlcml2ZWRfdGJsIGpNa0REZXJpdmVkCisjZGVmaW5lIGpwZWdfZmlsbF9iaXRfYnVmZmVyICAgIGpGaWxCaXRCdWYKKyNkZWZpbmUganBlZ19odWZmX2RlY29kZSAgICAgICAgakh1ZkRlY29kZQogI2VuZGlmIC8qIE5FRURfU0hPUlRfRVhURVJOQUxfTkFNRVMgKi8KIAogCiAvKiBEZXJpdmVkIGRhdGEgY29uc3RydWN0ZWQgZm9yIGVhY2ggSHVmZm1hbiB0YWJsZSAqLwogCi0jZGVmaW5lIEhVRkZfTE9PS0FIRUFECTgJLyogIyBvZiBiaXRzIG9mIGxvb2thaGVhZCAqLworI2RlZmluZSBIVUZGX0xPT0tBSEVBRCAgOCAgICAgICAvKiAjIG9mIGJpdHMgb2YgbG9va2FoZWFkICovCiAKIHR5cGVkZWYgc3RydWN0IHsKICAgLyogQmFzaWMgdGFibGVzOiAoZWxlbWVudCBbMF0gb2YgZWFjaCBhcnJheSBpcyB1bnVzZWQpICovCi0gIElOVDMyIG1heGNvZGVbMThdOwkJLyogbGFyZ2VzdCBjb2RlIG9mIGxlbmd0aCBrICgtMSBpZiBub25lKSAqLworICBJTlQzMiBtYXhjb2RlWzE4XTsgICAgICAgICAgICAvKiBsYXJnZXN0IGNvZGUgb2YgbGVuZ3RoIGsgKC0xIGlmIG5vbmUpICovCiAgIC8qIChtYXhjb2RlWzE3XSBpcyBhIHNlbnRpbmVsIHRvIGVuc3VyZSBqcGVnX2h1ZmZfZGVjb2RlIHRlcm1pbmF0ZXMpICovCi0gIElOVDMyIHZhbG9mZnNldFsxOF07CQkvKiBodWZmdmFsW10gb2Zmc2V0IGZvciBjb2RlcyBvZiBsZW5ndGggayAqLworICBJTlQzMiB2YWxvZmZzZXRbMThdOyAgICAgICAgICAvKiBodWZmdmFsW10gb2Zmc2V0IGZvciBjb2RlcyBvZiBsZW5ndGggayAqLwogICAvKiB2YWxvZmZzZXRba10gPSBodWZmdmFsW10gaW5kZXggb2YgMXN0IHN5bWJvbCBvZiBjb2RlIGxlbmd0aCBrLCBsZXNzCiAgICAqIHRoZSBzbWFsbGVzdCBjb2RlIG9mIGxlbmd0aCBrOyBzbyBnaXZlbiBhIGNvZGUgb2YgbGVuZ3RoIGssIHRoZQogICAgKiBjb3JyZXNwb25kaW5nIHN5bWJvbCBpcyBodWZmdmFsW2NvZGUgKyB2YWxvZmZzZXRba11dCkBAIC01Myw4ICs1Myw4IEBACiAKIC8qIEV4cGFuZCBhIEh1ZmZtYW4gdGFibGUgZGVmaW5pdGlvbiBpbnRvIHRoZSBkZXJpdmVkIGZvcm1hdCAqLwogRVhURVJOKHZvaWQpIGpwZWdfbWFrZV9kX2Rlcml2ZWRfdGJsCi0JSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBib29sZWFuIGlzREMsIGludCB0YmxubywKLQkgICAgIGRfZGVyaXZlZF90YmwgKiogcGR0YmwpKTsKKyAgICAgICAgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBib29sZWFuIGlzREMsIGludCB0YmxubywKKyAgICAgICAgICAgICBkX2Rlcml2ZWRfdGJsICoqIHBkdGJsKSk7CiAKIAogLyoKQEAgLTc3LDEzICs3NywxMyBAQAogCiAjaWYgX19XT1JEU0laRSA9PSA2NCB8fCBkZWZpbmVkKF9XSU42NCkKIAotdHlwZWRlZiBzaXplX3QgYml0X2J1Zl90eXBlOwkvKiB0eXBlIG9mIGJpdC1leHRyYWN0aW9uIGJ1ZmZlciAqLwotI2RlZmluZSBCSVRfQlVGX1NJWkUgIDY0CQkvKiBzaXplIG9mIGJ1ZmZlciBpbiBiaXRzICovCit0eXBlZGVmIHNpemVfdCBiaXRfYnVmX3R5cGU7ICAgIC8qIHR5cGUgb2YgYml0LWV4dHJhY3Rpb24gYnVmZmVyICovCisjZGVmaW5lIEJJVF9CVUZfU0laRSAgNjQgICAgICAgICAgICAgICAgLyogc2l6ZSBvZiBidWZmZXIgaW4gYml0cyAqLwogCiAjZWxzZQogCi10eXBlZGVmIElOVDMyIGJpdF9idWZfdHlwZTsJLyogdHlwZSBvZiBiaXQtZXh0cmFjdGlvbiBidWZmZXIgKi8KLSNkZWZpbmUgQklUX0JVRl9TSVpFICAzMgkJLyogc2l6ZSBvZiBidWZmZXIgaW4gYml0cyAqLwordHlwZWRlZiBJTlQzMiBiaXRfYnVmX3R5cGU7ICAgICAvKiB0eXBlIG9mIGJpdC1leHRyYWN0aW9uIGJ1ZmZlciAqLworI2RlZmluZSBCSVRfQlVGX1NJWkUgIDMyICAgICAgICAgICAgICAgIC8qIHNpemUgb2YgYnVmZmVyIGluIGJpdHMgKi8KIAogI2VuZGlmCiAKQEAgLTk0LDQzICs5NCw0MyBAQAogICogYmVjYXVzZSBub3QgYWxsIG1hY2hpbmVzIG1lYXN1cmUgc2l6ZW9mIGluIDgtYml0IGJ5dGVzLgogICovCiAKLXR5cGVkZWYgc3RydWN0IHsJCS8qIEJpdHJlYWRpbmcgc3RhdGUgc2F2ZWQgYWNyb3NzIE1DVXMgKi8KLSAgYml0X2J1Zl90eXBlIGdldF9idWZmZXI7CS8qIGN1cnJlbnQgYml0LWV4dHJhY3Rpb24gYnVmZmVyICovCi0gIGludCBiaXRzX2xlZnQ7CQkvKiAjIG9mIHVudXNlZCBiaXRzIGluIGl0ICovCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgIC8qIEJpdHJlYWRpbmcgc3RhdGUgc2F2ZWQgYWNyb3NzIE1DVXMgKi8KKyAgYml0X2J1Zl90eXBlIGdldF9idWZmZXI7ICAgICAgLyogY3VycmVudCBiaXQtZXh0cmFjdGlvbiBidWZmZXIgKi8KKyAgaW50IGJpdHNfbGVmdDsgICAgICAgICAgICAgICAgLyogIyBvZiB1bnVzZWQgYml0cyBpbiBpdCAqLwogfSBiaXRyZWFkX3Blcm1fc3RhdGU7CiAKLXR5cGVkZWYgc3RydWN0IHsJCS8qIEJpdHJlYWRpbmcgd29ya2luZyBzdGF0ZSB3aXRoaW4gYW4gTUNVICovCit0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgIC8qIEJpdHJlYWRpbmcgd29ya2luZyBzdGF0ZSB3aXRoaW4gYW4gTUNVICovCiAgIC8qIEN1cnJlbnQgZGF0YSBzb3VyY2UgbG9jYXRpb24gKi8KICAgLyogV2UgbmVlZCBhIGNvcHksIHJhdGhlciB0aGFuIG11bmdpbmcgdGhlIG9yaWdpbmFsLCBpbiBjYXNlIG9mIHN1c3BlbnNpb24gKi8KICAgY29uc3QgSk9DVEVUICogbmV4dF9pbnB1dF9ieXRlOyAvKiA9PiBuZXh0IGJ5dGUgdG8gcmVhZCBmcm9tIHNvdXJjZSAqLwotICBzaXplX3QgYnl0ZXNfaW5fYnVmZmVyOwkvKiAjIG9mIGJ5dGVzIHJlbWFpbmluZyBpbiBzb3VyY2UgYnVmZmVyICovCisgIHNpemVfdCBieXRlc19pbl9idWZmZXI7ICAgICAgIC8qICMgb2YgYnl0ZXMgcmVtYWluaW5nIGluIHNvdXJjZSBidWZmZXIgKi8KICAgLyogQml0IGlucHV0IGJ1ZmZlciAtLS0gbm90ZSB0aGVzZSB2YWx1ZXMgYXJlIGtlcHQgaW4gcmVnaXN0ZXIgdmFyaWFibGVzLAogICAgKiBub3QgaW4gdGhpcyBzdHJ1Y3QsIGluc2lkZSB0aGUgaW5uZXIgbG9vcHMuCiAgICAqLwotICBiaXRfYnVmX3R5cGUgZ2V0X2J1ZmZlcjsJLyogY3VycmVudCBiaXQtZXh0cmFjdGlvbiBidWZmZXIgKi8KLSAgaW50IGJpdHNfbGVmdDsJCS8qICMgb2YgdW51c2VkIGJpdHMgaW4gaXQgKi8KKyAgYml0X2J1Zl90eXBlIGdldF9idWZmZXI7ICAgICAgLyogY3VycmVudCBiaXQtZXh0cmFjdGlvbiBidWZmZXIgKi8KKyAgaW50IGJpdHNfbGVmdDsgICAgICAgICAgICAgICAgLyogIyBvZiB1bnVzZWQgYml0cyBpbiBpdCAqLwogICAvKiBQb2ludGVyIG5lZWRlZCBieSBqcGVnX2ZpbGxfYml0X2J1ZmZlci4gKi8KLSAgal9kZWNvbXByZXNzX3B0ciBjaW5mbzsJLyogYmFjayBsaW5rIHRvIGRlY29tcHJlc3MgbWFzdGVyIHJlY29yZCAqLworICBqX2RlY29tcHJlc3NfcHRyIGNpbmZvOyAgICAgICAvKiBiYWNrIGxpbmsgdG8gZGVjb21wcmVzcyBtYXN0ZXIgcmVjb3JkICovCiB9IGJpdHJlYWRfd29ya2luZ19zdGF0ZTsKIAogLyogTWFjcm9zIHRvIGRlY2xhcmUgYW5kIGxvYWQvc2F2ZSBiaXRyZWFkIGxvY2FsIHZhcmlhYmxlcy4gKi8KICNkZWZpbmUgQklUUkVBRF9TVEFURV9WQVJTICBcCi0JcmVnaXN0ZXIgYml0X2J1Zl90eXBlIGdldF9idWZmZXI7ICBcCi0JcmVnaXN0ZXIgaW50IGJpdHNfbGVmdDsgIFwKLQliaXRyZWFkX3dvcmtpbmdfc3RhdGUgYnJfc3RhdGUKKyAgICAgICAgcmVnaXN0ZXIgYml0X2J1Zl90eXBlIGdldF9idWZmZXI7ICBcCisgICAgICAgIHJlZ2lzdGVyIGludCBiaXRzX2xlZnQ7ICBcCisgICAgICAgIGJpdHJlYWRfd29ya2luZ19zdGF0ZSBicl9zdGF0ZQogCiAjZGVmaW5lIEJJVFJFQURfTE9BRF9TVEFURShjaW5mb3AscGVybXN0YXRlKSAgXAotCWJyX3N0YXRlLmNpbmZvID0gY2luZm9wOyBcCi0JYnJfc3RhdGUubmV4dF9pbnB1dF9ieXRlID0gY2luZm9wLT5zcmMtPm5leHRfaW5wdXRfYnl0ZTsgXAotCWJyX3N0YXRlLmJ5dGVzX2luX2J1ZmZlciA9IGNpbmZvcC0+c3JjLT5ieXRlc19pbl9idWZmZXI7IFwKLQlnZXRfYnVmZmVyID0gcGVybXN0YXRlLmdldF9idWZmZXI7IFwKLQliaXRzX2xlZnQgPSBwZXJtc3RhdGUuYml0c19sZWZ0OworICAgICAgICBicl9zdGF0ZS5jaW5mbyA9IGNpbmZvcDsgXAorICAgICAgICBicl9zdGF0ZS5uZXh0X2lucHV0X2J5dGUgPSBjaW5mb3AtPnNyYy0+bmV4dF9pbnB1dF9ieXRlOyBcCisgICAgICAgIGJyX3N0YXRlLmJ5dGVzX2luX2J1ZmZlciA9IGNpbmZvcC0+c3JjLT5ieXRlc19pbl9idWZmZXI7IFwKKyAgICAgICAgZ2V0X2J1ZmZlciA9IHBlcm1zdGF0ZS5nZXRfYnVmZmVyOyBcCisgICAgICAgIGJpdHNfbGVmdCA9IHBlcm1zdGF0ZS5iaXRzX2xlZnQ7CiAKICNkZWZpbmUgQklUUkVBRF9TQVZFX1NUQVRFKGNpbmZvcCxwZXJtc3RhdGUpICBcCi0JY2luZm9wLT5zcmMtPm5leHRfaW5wdXRfYnl0ZSA9IGJyX3N0YXRlLm5leHRfaW5wdXRfYnl0ZTsgXAotCWNpbmZvcC0+c3JjLT5ieXRlc19pbl9idWZmZXIgPSBicl9zdGF0ZS5ieXRlc19pbl9idWZmZXI7IFwKLQlwZXJtc3RhdGUuZ2V0X2J1ZmZlciA9IGdldF9idWZmZXI7IFwKLQlwZXJtc3RhdGUuYml0c19sZWZ0ID0gYml0c19sZWZ0CisgICAgICAgIGNpbmZvcC0+c3JjLT5uZXh0X2lucHV0X2J5dGUgPSBicl9zdGF0ZS5uZXh0X2lucHV0X2J5dGU7IFwKKyAgICAgICAgY2luZm9wLT5zcmMtPmJ5dGVzX2luX2J1ZmZlciA9IGJyX3N0YXRlLmJ5dGVzX2luX2J1ZmZlcjsgXAorICAgICAgICBwZXJtc3RhdGUuZ2V0X2J1ZmZlciA9IGdldF9idWZmZXI7IFwKKyAgICAgICAgcGVybXN0YXRlLmJpdHNfbGVmdCA9IGJpdHNfbGVmdAogCiAvKgogICogVGhlc2UgbWFjcm9zIHByb3ZpZGUgdGhlIGluLWxpbmUgcG9ydGlvbiBvZiBiaXQgZmV0Y2hpbmcuCkBAIC0xMzgsMzcgKzEzOCwzNyBAQAogICogYmVmb3JlIHVzaW5nIEdFVF9CSVRTLCBQRUVLX0JJVFMsIG9yIERST1BfQklUUy4KICAqIFRoZSB2YXJpYWJsZXMgZ2V0X2J1ZmZlciBhbmQgYml0c19sZWZ0IGFyZSBhc3N1bWVkIHRvIGJlIGxvY2FscywKICAqIGJ1dCB0aGUgc3RhdGUgc3RydWN0IG1pZ2h0IG5vdCBiZSAoanBlZ19odWZmX2RlY29kZSBuZWVkcyB0aGlzKS4KLSAqCUNIRUNLX0JJVF9CVUZGRVIoc3RhdGUsbixhY3Rpb24pOwotICoJCUVuc3VyZSB0aGVyZSBhcmUgTiBiaXRzIGluIGdldF9idWZmZXI7IGlmIHN1c3BlbmQsIHRha2UgYWN0aW9uLgorICogICAgICBDSEVDS19CSVRfQlVGRkVSKHN0YXRlLG4sYWN0aW9uKTsKKyAqICAgICAgICAgICAgICBFbnN1cmUgdGhlcmUgYXJlIE4gYml0cyBpbiBnZXRfYnVmZmVyOyBpZiBzdXNwZW5kLCB0YWtlIGFjdGlvbi4KICAqICAgICAgdmFsID0gR0VUX0JJVFMobik7Ci0gKgkJRmV0Y2ggbmV4dCBOIGJpdHMuCisgKiAgICAgICAgICAgICAgRmV0Y2ggbmV4dCBOIGJpdHMuCiAgKiAgICAgIHZhbCA9IFBFRUtfQklUUyhuKTsKLSAqCQlGZXRjaCBuZXh0IE4gYml0cyB3aXRob3V0IHJlbW92aW5nIHRoZW0gZnJvbSB0aGUgYnVmZmVyLgotICoJRFJPUF9CSVRTKG4pOwotICoJCURpc2NhcmQgbmV4dCBOIGJpdHMuCisgKiAgICAgICAgICAgICAgRmV0Y2ggbmV4dCBOIGJpdHMgd2l0aG91dCByZW1vdmluZyB0aGVtIGZyb20gdGhlIGJ1ZmZlci4KKyAqICAgICAgRFJPUF9CSVRTKG4pOworICogICAgICAgICAgICAgIERpc2NhcmQgbmV4dCBOIGJpdHMuCiAgKiBUaGUgdmFsdWUgTiBzaG91bGQgYmUgYSBzaW1wbGUgdmFyaWFibGUsIG5vdCBhbiBleHByZXNzaW9uLCBiZWNhdXNlIGl0CiAgKiBpcyBldmFsdWF0ZWQgbXVsdGlwbGUgdGltZXMuCiAgKi8KIAogI2RlZmluZSBDSEVDS19CSVRfQlVGRkVSKHN0YXRlLG5iaXRzLGFjdGlvbikgXAotCXsgaWYgKGJpdHNfbGVmdCA8IChuYml0cykpIHsgIFwKLQkgICAgaWYgKCEganBlZ19maWxsX2JpdF9idWZmZXIoJihzdGF0ZSksZ2V0X2J1ZmZlcixiaXRzX2xlZnQsbmJpdHMpKSAgXAotCSAgICAgIHsgYWN0aW9uOyB9ICBcCi0JICAgIGdldF9idWZmZXIgPSAoc3RhdGUpLmdldF9idWZmZXI7IGJpdHNfbGVmdCA9IChzdGF0ZSkuYml0c19sZWZ0OyB9IH0KKyAgICAgICAgeyBpZiAoYml0c19sZWZ0IDwgKG5iaXRzKSkgeyAgXAorICAgICAgICAgICAgaWYgKCEganBlZ19maWxsX2JpdF9idWZmZXIoJihzdGF0ZSksZ2V0X2J1ZmZlcixiaXRzX2xlZnQsbmJpdHMpKSAgXAorICAgICAgICAgICAgICB7IGFjdGlvbjsgfSAgXAorICAgICAgICAgICAgZ2V0X2J1ZmZlciA9IChzdGF0ZSkuZ2V0X2J1ZmZlcjsgYml0c19sZWZ0ID0gKHN0YXRlKS5iaXRzX2xlZnQ7IH0gfQogCiAjZGVmaW5lIEdFVF9CSVRTKG5iaXRzKSBcCi0JKCgoaW50KSAoZ2V0X2J1ZmZlciA+PiAoYml0c19sZWZ0IC09IChuYml0cykpKSkgJiAoKDE8PChuYml0cykpLTEpKQorICAgICAgICAoKChpbnQpIChnZXRfYnVmZmVyID4+IChiaXRzX2xlZnQgLT0gKG5iaXRzKSkpKSAmICgoMTw8KG5iaXRzKSktMSkpCiAKICNkZWZpbmUgUEVFS19CSVRTKG5iaXRzKSBcCi0JKCgoaW50KSAoZ2V0X2J1ZmZlciA+PiAoYml0c19sZWZ0IC0gIChuYml0cykpKSkgJiAoKDE8PChuYml0cykpLTEpKQorICAgICAgICAoKChpbnQpIChnZXRfYnVmZmVyID4+IChiaXRzX2xlZnQgLSAgKG5iaXRzKSkpKSAmICgoMTw8KG5iaXRzKSktMSkpCiAKICNkZWZpbmUgRFJPUF9CSVRTKG5iaXRzKSBcCi0JKGJpdHNfbGVmdCAtPSAobmJpdHMpKQorICAgICAgICAoYml0c19sZWZ0IC09IChuYml0cykpCiAKIC8qIExvYWQgdXAgdGhlIGJpdCBidWZmZXIgdG8gYSBkZXB0aCBvZiBhdCBsZWFzdCBuYml0cyAqLwogRVhURVJOKGJvb2xlYW4pIGpwZWdfZmlsbF9iaXRfYnVmZmVyCi0JSlBQKChiaXRyZWFkX3dvcmtpbmdfc3RhdGUgKiBzdGF0ZSwgcmVnaXN0ZXIgYml0X2J1Zl90eXBlIGdldF9idWZmZXIsCi0JICAgICByZWdpc3RlciBpbnQgYml0c19sZWZ0LCBpbnQgbmJpdHMpKTsKKyAgICAgICAgSlBQKChiaXRyZWFkX3dvcmtpbmdfc3RhdGUgKiBzdGF0ZSwgcmVnaXN0ZXIgYml0X2J1Zl90eXBlIGdldF9idWZmZXIsCisgICAgICAgICAgICAgcmVnaXN0ZXIgaW50IGJpdHNfbGVmdCwgaW50IG5iaXRzKSk7CiAKIAogLyoKQEAgLTIwNCw3ICsyMDQsNyBAQAogICB9IGVsc2UgeyBcCiBzbG93bGFiZWw6IFwKICAgICBpZiAoKHJlc3VsdD1qcGVnX2h1ZmZfZGVjb2RlKCZzdGF0ZSxnZXRfYnVmZmVyLGJpdHNfbGVmdCxodGJsLG5iKSkgPCAwKSBcCi0JeyBmYWlsYWN0aW9uOyB9IFwKKyAgICAgICAgeyBmYWlsYWN0aW9uOyB9IFwKICAgICBnZXRfYnVmZmVyID0gc3RhdGUuZ2V0X2J1ZmZlcjsgYml0c19sZWZ0ID0gc3RhdGUuYml0c19sZWZ0OyBcCiAgIH0gXAogfQpAQCAtMjMxLDUgKzIzMSw1IEBACiAKIC8qIE91dC1vZi1saW5lIGNhc2UgZm9yIEh1ZmZtYW4gY29kZSBmZXRjaGluZyAqLwogRVhURVJOKGludCkganBlZ19odWZmX2RlY29kZQotCUpQUCgoYml0cmVhZF93b3JraW5nX3N0YXRlICogc3RhdGUsIHJlZ2lzdGVyIGJpdF9idWZfdHlwZSBnZXRfYnVmZmVyLAotCSAgICAgcmVnaXN0ZXIgaW50IGJpdHNfbGVmdCwgZF9kZXJpdmVkX3RibCAqIGh0YmwsIGludCBtaW5fYml0cykpOworICAgICAgICBKUFAoKGJpdHJlYWRfd29ya2luZ19zdGF0ZSAqIHN0YXRlLCByZWdpc3RlciBiaXRfYnVmX3R5cGUgZ2V0X2J1ZmZlciwKKyAgICAgICAgICAgICByZWdpc3RlciBpbnQgYml0c19sZWZ0LCBkX2Rlcml2ZWRfdGJsICogaHRibCwgaW50IG1pbl9iaXRzKSk7CmRpZmYgLS1naXQgYS9qZGlucHV0LmMgYi9qZGlucHV0LmMKaW5kZXggYWExN2QyNS4uNGFmYjA3NCAxMDA2NDQKLS0tIGEvamRpbnB1dC5jCisrKyBiL2pkaW5wdXQuYwpAQCAtMyw4ICszLDcgQEAKICAqCiAgKiBUaGlzIGZpbGUgd2FzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZToKICAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk3LCBUaG9tYXMgRy4gTGFuZS4KLSAqIE1vZGlmaWVkIDIwMDItMjAwOSBieSBHdWlkbyBWb2xsYmVkaW5nLgotICogTW9kaWZpY2F0aW9uczoKKyAqIGxpYmpwZWctdHVyYm8gTW9kaWZpY2F0aW9uczoKICAqIENvcHlyaWdodCAoQykgMjAxMCwgRC4gUi4gQ29tbWFuZGVyLgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgogICoKQEAgLTI1LDcgKzI0LDcgQEAKIHR5cGVkZWYgc3RydWN0IHsKICAgc3RydWN0IGpwZWdfaW5wdXRfY29udHJvbGxlciBwdWI7IC8qIHB1YmxpYyBmaWVsZHMgKi8KIAotICBib29sZWFuIGluaGVhZGVyczsJCS8qIFRSVUUgdW50aWwgZmlyc3QgU09TIGlzIHJlYWNoZWQgKi8KKyAgYm9vbGVhbiBpbmhlYWRlcnM7ICAgICAgICAgICAgLyogVFJVRSB1bnRpbCBmaXJzdCBTT1MgaXMgcmVhY2hlZCAqLwogfSBteV9pbnB1dF9jb250cm9sbGVyOwogCiB0eXBlZGVmIG15X2lucHV0X2NvbnRyb2xsZXIgKiBteV9pbnB1dGN0bF9wdHI7CkBAIC0zOSw3OSArMzgsNiBAQAogICogUm91dGluZXMgdG8gY2FsY3VsYXRlIHZhcmlvdXMgcXVhbnRpdGllcyByZWxhdGVkIHRvIHRoZSBzaXplIG9mIHRoZSBpbWFnZS4KICAqLwogCi0KLSNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDgwCi0vKgotICogQ29tcHV0ZSBvdXRwdXQgaW1hZ2UgZGltZW5zaW9ucyBhbmQgcmVsYXRlZCB2YWx1ZXMuCi0gKiBOT1RFOiB0aGlzIGlzIGV4cG9ydGVkIGZvciBwb3NzaWJsZSB1c2UgYnkgYXBwbGljYXRpb24uCi0gKiBIZW5jZSBpdCBtdXN0bid0IGRvIGFueXRoaW5nIHRoYXQgY2FuJ3QgYmUgZG9uZSB0d2ljZS4KLSAqLwotCi1HTE9CQUwodm9pZCkKLWpwZWdfY29yZV9vdXRwdXRfZGltZW5zaW9ucyAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKLS8qIERvIGNvbXB1dGF0aW9ucyB0aGF0IGFyZSBuZWVkZWQgYmVmb3JlIG1hc3RlciBzZWxlY3Rpb24gcGhhc2UuCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIHRyYW5zY29kaW5nIGFuZCBmdWxsIGRlY29tcHJlc3Npb24uCi0gKi8KLXsKLSNpZmRlZiBJRENUX1NDQUxJTkdfU1VQUE9SVEVECi0gIGludCBjaTsKLSAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cjsKLQotICAvKiBDb21wdXRlIGFjdHVhbCBvdXRwdXQgaW1hZ2UgZGltZW5zaW9ucyBhbmQgRENUIHNjYWxpbmcgY2hvaWNlcy4gKi8KLSAgaWYgKGNpbmZvLT5zY2FsZV9udW0gKiBjaW5mby0+YmxvY2tfc2l6ZSA8PSBjaW5mby0+c2NhbGVfZGVub20pIHsKLSAgICAvKiBQcm92aWRlIDEvYmxvY2tfc2l6ZSBzY2FsaW5nICovCi0gICAgY2luZm8tPm91dHB1dF93aWR0aCA9IChKRElNRU5TSU9OKQotICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX3dpZHRoLCAobG9uZykgY2luZm8tPmJsb2NrX3NpemUpOwotICAgIGNpbmZvLT5vdXRwdXRfaGVpZ2h0ID0gKEpESU1FTlNJT04pCi0gICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2VfaGVpZ2h0LCAobG9uZykgY2luZm8tPmJsb2NrX3NpemUpOwotICAgIGNpbmZvLT5taW5fRENUX2hfc2NhbGVkX3NpemUgPSAxOwotICAgIGNpbmZvLT5taW5fRENUX3Zfc2NhbGVkX3NpemUgPSAxOwotICB9IGVsc2UgaWYgKGNpbmZvLT5zY2FsZV9udW0gKiBjaW5mby0+YmxvY2tfc2l6ZSA8PSBjaW5mby0+c2NhbGVfZGVub20gKiAyKSB7Ci0gICAgLyogUHJvdmlkZSAyL2Jsb2NrX3NpemUgc2NhbGluZyAqLwotICAgIGNpbmZvLT5vdXRwdXRfd2lkdGggPSAoSkRJTUVOU0lPTikKLSAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV93aWR0aCAqIDJMLCAobG9uZykgY2luZm8tPmJsb2NrX3NpemUpOwotICAgIGNpbmZvLT5vdXRwdXRfaGVpZ2h0ID0gKEpESU1FTlNJT04pCi0gICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2VfaGVpZ2h0ICogMkwsIChsb25nKSBjaW5mby0+YmxvY2tfc2l6ZSk7Ci0gICAgY2luZm8tPm1pbl9EQ1RfaF9zY2FsZWRfc2l6ZSA9IDI7Ci0gICAgY2luZm8tPm1pbl9EQ1Rfdl9zY2FsZWRfc2l6ZSA9IDI7Ci0gIH0gZWxzZSBpZiAoY2luZm8tPnNjYWxlX251bSAqIGNpbmZvLT5ibG9ja19zaXplIDw9IGNpbmZvLT5zY2FsZV9kZW5vbSAqIDQpIHsKLSAgICAvKiBQcm92aWRlIDQvYmxvY2tfc2l6ZSBzY2FsaW5nICovCi0gICAgY2luZm8tPm91dHB1dF93aWR0aCA9IChKRElNRU5TSU9OKQotICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX3dpZHRoICogNEwsIChsb25nKSBjaW5mby0+YmxvY2tfc2l6ZSk7Ci0gICAgY2luZm8tPm91dHB1dF9oZWlnaHQgPSAoSkRJTUVOU0lPTikKLSAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV9oZWlnaHQgKiA0TCwgKGxvbmcpIGNpbmZvLT5ibG9ja19zaXplKTsKLSAgICBjaW5mby0+bWluX0RDVF9oX3NjYWxlZF9zaXplID0gNDsKLSAgICBjaW5mby0+bWluX0RDVF92X3NjYWxlZF9zaXplID0gNDsKLSAgfSBlbHNlIGlmIChjaW5mby0+c2NhbGVfbnVtICogY2luZm8tPmJsb2NrX3NpemUgPD0gY2luZm8tPnNjYWxlX2Rlbm9tICogOCkgewotICAgIC8qIFByb3ZpZGUgOC9ibG9ja19zaXplIHNjYWxpbmcgKi8KLSAgICBjaW5mby0+b3V0cHV0X3dpZHRoID0gKEpESU1FTlNJT04pCi0gICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2Vfd2lkdGggKiA4TCwgKGxvbmcpIGNpbmZvLT5ibG9ja19zaXplKTsKLSAgICBjaW5mby0+b3V0cHV0X2hlaWdodCA9IChKRElNRU5TSU9OKQotICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX2hlaWdodCAqIDhMLCAobG9uZykgY2luZm8tPmJsb2NrX3NpemUpOwotICAgIGNpbmZvLT5taW5fRENUX2hfc2NhbGVkX3NpemUgPSA4OwotICAgIGNpbmZvLT5taW5fRENUX3Zfc2NhbGVkX3NpemUgPSA4OwotICB9Ci0gIC8qIFJlY29tcHV0ZSBkaW1lbnNpb25zIG9mIGNvbXBvbmVudHMgKi8KLSAgZm9yIChjaSA9IDAsIGNvbXBwdHIgPSBjaW5mby0+Y29tcF9pbmZvOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsKLSAgICAgICBjaSsrLCBjb21wcHRyKyspIHsKLSAgICBjb21wcHRyLT5EQ1RfaF9zY2FsZWRfc2l6ZSA9IGNpbmZvLT5taW5fRENUX2hfc2NhbGVkX3NpemU7Ci0gICAgY29tcHB0ci0+RENUX3Zfc2NhbGVkX3NpemUgPSBjaW5mby0+bWluX0RDVF92X3NjYWxlZF9zaXplOwotICB9Ci0KLSNlbHNlIC8qICFJRENUX1NDQUxJTkdfU1VQUE9SVEVEICovCi0KLSAgLyogSGFyZHdpcmUgaXQgdG8gIm5vIHNjYWxpbmciICovCi0gIGNpbmZvLT5vdXRwdXRfd2lkdGggPSBjaW5mby0+aW1hZ2Vfd2lkdGg7Ci0gIGNpbmZvLT5vdXRwdXRfaGVpZ2h0ID0gY2luZm8tPmltYWdlX2hlaWdodDsKLSAgLyogamRpbnB1dC5jIGhhcyBhbHJlYWR5IGluaXRpYWxpemVkIERDVF9zY2FsZWRfc2l6ZSwKLSAgICogYW5kIGhhcyBjb21wdXRlZCB1bnNjYWxlZCBkb3duc2FtcGxlZF93aWR0aCBhbmQgZG93bnNhbXBsZWRfaGVpZ2h0LgotICAgKi8KLQotI2VuZGlmIC8qIElEQ1RfU0NBTElOR19TVVBQT1JURUQgKi8KLX0KLSNlbmRpZgotCi0KIExPQ0FMKHZvaWQpCiBpbml0aWFsX3NldHVwIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQogLyogQ2FsbGVkIG9uY2UsIHdoZW4gZmlyc3QgU09TIG1hcmtlciBpcyByZWFjaGVkICovCkBAIC0xMzEsNyArNTcsNyBAQAogICAvKiBDaGVjayB0aGF0IG51bWJlciBvZiBjb21wb25lbnRzIHdvbid0IGV4Y2VlZCBpbnRlcm5hbCBhcnJheSBzaXplcyAqLwogICBpZiAoY2luZm8tPm51bV9jb21wb25lbnRzID4gTUFYX0NPTVBPTkVOVFMpCiAgICAgRVJSRVhJVDIoY2luZm8sIEpFUlJfQ09NUE9ORU5UX0NPVU5ULCBjaW5mby0+bnVtX2NvbXBvbmVudHMsCi0JICAgICBNQVhfQ09NUE9ORU5UUyk7CisgICAgICAgICAgICAgTUFYX0NPTVBPTkVOVFMpOwogCiAgIC8qIENvbXB1dGUgbWF4aW11bSBzYW1wbGluZyBmYWN0b3JzOyBjaGVjayBmYWN0b3IgdmFsaWRpdHkgKi8KICAgY2luZm8tPm1heF9oX3NhbXBfZmFjdG9yID0gMTsKQEAgLTEzOSwxMiArNjUsMTIgQEAKICAgZm9yIChjaSA9IDAsIGNvbXBwdHIgPSBjaW5mby0+Y29tcF9pbmZvOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsKICAgICAgICBjaSsrLCBjb21wcHRyKyspIHsKICAgICBpZiAoY29tcHB0ci0+aF9zYW1wX2ZhY3Rvcjw9MCB8fCBjb21wcHRyLT5oX3NhbXBfZmFjdG9yPk1BWF9TQU1QX0ZBQ1RPUiB8fAotCWNvbXBwdHItPnZfc2FtcF9mYWN0b3I8PTAgfHwgY29tcHB0ci0+dl9zYW1wX2ZhY3Rvcj5NQVhfU0FNUF9GQUNUT1IpCisgICAgICAgIGNvbXBwdHItPnZfc2FtcF9mYWN0b3I8PTAgfHwgY29tcHB0ci0+dl9zYW1wX2ZhY3Rvcj5NQVhfU0FNUF9GQUNUT1IpCiAgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9TQU1QTElORyk7CiAgICAgY2luZm8tPm1heF9oX3NhbXBfZmFjdG9yID0gTUFYKGNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvciwKLQkJCQkgICBjb21wcHRyLT5oX3NhbXBfZmFjdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHB0ci0+aF9zYW1wX2ZhY3Rvcik7CiAgICAgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yID0gTUFYKGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwKLQkJCQkgICBjb21wcHRyLT52X3NhbXBfZmFjdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHB0ci0+dl9zYW1wX2ZhY3Rvcik7CiAgIH0KIAogI2lmIEpQRUdfTElCX1ZFUlNJT04gPj04MApAQCAtMTc0LDEwICsxMDAsMTAgQEAKICAgICAvKiBTaXplIGluIERDVCBibG9ja3MgKi8KICAgICBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MgPSAoSkRJTUVOU0lPTikKICAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV93aWR0aCAqIChsb25nKSBjb21wcHRyLT5oX3NhbXBfZmFjdG9yLAotCQkgICAgKGxvbmcpIChjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IgKiBEQ1RTSVpFKSk7CisgICAgICAgICAgICAgICAgICAgIChsb25nKSAoY2luZm8tPm1heF9oX3NhbXBfZmFjdG9yICogRENUU0laRSkpOwogICAgIGNvbXBwdHItPmhlaWdodF9pbl9ibG9ja3MgPSAoSkRJTUVOU0lPTikKICAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV9oZWlnaHQgKiAobG9uZykgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciwKLQkJICAgIChsb25nKSAoY2luZm8tPm1heF92X3NhbXBfZmFjdG9yICogRENUU0laRSkpOworICAgICAgICAgICAgICAgICAgICAobG9uZykgKGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciAqIERDVFNJWkUpKTsKICAgICAvKiBkb3duc2FtcGxlZF93aWR0aCBhbmQgZG93bnNhbXBsZWRfaGVpZ2h0IHdpbGwgYWxzbyBiZSBvdmVycmlkZGVuIGJ5CiAgICAgICogamRtYXN0ZXIuYyBpZiB3ZSBhcmUgZG9pbmcgZnVsbCBkZWNvbXByZXNzaW9uLiAgVGhlIHRyYW5zY29kZXIgbGlicmFyeQogICAgICAqIGRvZXNuJ3QgdXNlIHRoZXNlIHZhbHVlcywgYnV0IHRoZSBjYWxsaW5nIGFwcGxpY2F0aW9uIG1pZ2h0LgpAQCAtMTg1LDEwICsxMTEsMTAgQEAKICAgICAvKiBTaXplIGluIHNhbXBsZXMgKi8KICAgICBjb21wcHRyLT5kb3duc2FtcGxlZF93aWR0aCA9IChKRElNRU5TSU9OKQogICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX3dpZHRoICogKGxvbmcpIGNvbXBwdHItPmhfc2FtcF9mYWN0b3IsCi0JCSAgICAobG9uZykgY2luZm8tPm1heF9oX3NhbXBfZmFjdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGNpbmZvLT5tYXhfaF9zYW1wX2ZhY3Rvcik7CiAgICAgY29tcHB0ci0+ZG93bnNhbXBsZWRfaGVpZ2h0ID0gKEpESU1FTlNJT04pCiAgICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2VfaGVpZ2h0ICogKGxvbmcpIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IsCi0JCSAgICAobG9uZykgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3Rvcik7CiAgICAgLyogTWFyayBjb21wb25lbnQgbmVlZGVkLCB1bnRpbCBjb2xvciBjb252ZXJzaW9uIHNheXMgb3RoZXJ3aXNlICovCiAgICAgY29tcHB0ci0+Y29tcG9uZW50X25lZWRlZCA9IFRSVUU7CiAgICAgLyogTWFyayBubyBxdWFudGl6YXRpb24gdGFibGUgeWV0IHNhdmVkIGZvciBjb21wb25lbnQgKi8KQEAgLTE5OCw3ICsxMjQsNyBAQAogICAvKiBDb21wdXRlIG51bWJlciBvZiBmdWxseSBpbnRlcmxlYXZlZCBNQ1Ugcm93cy4gKi8KICAgY2luZm8tPnRvdGFsX2lNQ1Vfcm93cyA9IChKRElNRU5TSU9OKQogICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV9oZWlnaHQsCi0JCSAgKGxvbmcpIChjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IqRENUU0laRSkpOworICAgICAgICAgICAgICAgICAgKGxvbmcpIChjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IqRENUU0laRSkpOwogCiAgIC8qIERlY2lkZSB3aGV0aGVyIGZpbGUgY29udGFpbnMgbXVsdGlwbGUgc2NhbnMgKi8KICAgaWYgKGNpbmZvLT5jb21wc19pbl9zY2FuIDwgY2luZm8tPm51bV9jb21wb25lbnRzIHx8IGNpbmZvLT5wcm9ncmVzc2l2ZV9tb2RlKQpAQCAtMjE1LDE2ICsxNDEsMTYgQEAKIHsKICAgaW50IGNpLCBtY3VibGtzLCB0bXA7CiAgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7Ci0gIAorCiAgIGlmIChjaW5mby0+Y29tcHNfaW5fc2NhbiA9PSAxKSB7Ci0gICAgCisKICAgICAvKiBOb25pbnRlcmxlYXZlZCAoc2luZ2xlLWNvbXBvbmVudCkgc2NhbiAqLwogICAgIGNvbXBwdHIgPSBjaW5mby0+Y3VyX2NvbXBfaW5mb1swXTsKLSAgICAKKwogICAgIC8qIE92ZXJhbGwgaW1hZ2Ugc2l6ZSBpbiBNQ1VzICovCiAgICAgY2luZm8tPk1DVXNfcGVyX3JvdyA9IGNvbXBwdHItPndpZHRoX2luX2Jsb2NrczsKICAgICBjaW5mby0+TUNVX3Jvd3NfaW5fc2NhbiA9IGNvbXBwdHItPmhlaWdodF9pbl9ibG9ja3M7Ci0gICAgCisKICAgICAvKiBGb3Igbm9uaW50ZXJsZWF2ZWQgc2NhbiwgYWx3YXlzIG9uZSBibG9jayBwZXIgTUNVICovCiAgICAgY29tcHB0ci0+TUNVX3dpZHRoID0gMTsKICAgICBjb21wcHRyLT5NQ1VfaGVpZ2h0ID0gMTsKQEAgLTIzNywyOCArMTYzLDI4IEBACiAgICAgdG1wID0gKGludCkgKGNvbXBwdHItPmhlaWdodF9pbl9ibG9ja3MgJSBjb21wcHRyLT52X3NhbXBfZmFjdG9yKTsKICAgICBpZiAodG1wID09IDApIHRtcCA9IGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7CiAgICAgY29tcHB0ci0+bGFzdF9yb3dfaGVpZ2h0ID0gdG1wOwotICAgIAorCiAgICAgLyogUHJlcGFyZSBhcnJheSBkZXNjcmliaW5nIE1DVSBjb21wb3NpdGlvbiAqLwogICAgIGNpbmZvLT5ibG9ja3NfaW5fTUNVID0gMTsKICAgICBjaW5mby0+TUNVX21lbWJlcnNoaXBbMF0gPSAwOwotICAgIAorCiAgIH0gZWxzZSB7Ci0gICAgCisKICAgICAvKiBJbnRlcmxlYXZlZCAobXVsdGktY29tcG9uZW50KSBzY2FuICovCiAgICAgaWYgKGNpbmZvLT5jb21wc19pbl9zY2FuIDw9IDAgfHwgY2luZm8tPmNvbXBzX2luX3NjYW4gPiBNQVhfQ09NUFNfSU5fU0NBTikKICAgICAgIEVSUkVYSVQyKGNpbmZvLCBKRVJSX0NPTVBPTkVOVF9DT1VOVCwgY2luZm8tPmNvbXBzX2luX3NjYW4sCi0JICAgICAgIE1BWF9DT01QU19JTl9TQ0FOKTsKLSAgICAKKyAgICAgICAgICAgICAgIE1BWF9DT01QU19JTl9TQ0FOKTsKKwogICAgIC8qIE92ZXJhbGwgaW1hZ2Ugc2l6ZSBpbiBNQ1VzICovCiAgICAgY2luZm8tPk1DVXNfcGVyX3JvdyA9IChKRElNRU5TSU9OKQogICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX3dpZHRoLAotCQkgICAgKGxvbmcpIChjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IqRENUU0laRSkpOworICAgICAgICAgICAgICAgICAgICAobG9uZykgKGNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvcipEQ1RTSVpFKSk7CiAgICAgY2luZm8tPk1DVV9yb3dzX2luX3NjYW4gPSAoSkRJTUVOU0lPTikKICAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV9oZWlnaHQsCi0JCSAgICAobG9uZykgKGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcipEQ1RTSVpFKSk7Ci0gICAgCisgICAgICAgICAgICAgICAgICAgIChsb25nKSAoY2luZm8tPm1heF92X3NhbXBfZmFjdG9yKkRDVFNJWkUpKTsKKwogICAgIGNpbmZvLT5ibG9ja3NfaW5fTUNVID0gMDsKLSAgICAKKwogICAgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5jb21wc19pbl9zY2FuOyBjaSsrKSB7CiAgICAgICBjb21wcHRyID0gY2luZm8tPmN1cl9jb21wX2luZm9bY2ldOwogICAgICAgLyogU2FtcGxpbmcgZmFjdG9ycyBnaXZlICMgb2YgYmxvY2tzIG9mIGNvbXBvbmVudCBpbiBlYWNoIE1DVSAqLwpAQCAtMjc2LDEyICsyMDIsMTIgQEAKICAgICAgIC8qIFByZXBhcmUgYXJyYXkgZGVzY3JpYmluZyBNQ1UgY29tcG9zaXRpb24gKi8KICAgICAgIG1jdWJsa3MgPSBjb21wcHRyLT5NQ1VfYmxvY2tzOwogICAgICAgaWYgKGNpbmZvLT5ibG9ja3NfaW5fTUNVICsgbWN1YmxrcyA+IERfTUFYX0JMT0NLU19JTl9NQ1UpCi0JRVJSRVhJVChjaW5mbywgSkVSUl9CQURfTUNVX1NJWkUpOworICAgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9NQ1VfU0laRSk7CiAgICAgICB3aGlsZSAobWN1Ymxrcy0tID4gMCkgewotCWNpbmZvLT5NQ1VfbWVtYmVyc2hpcFtjaW5mby0+YmxvY2tzX2luX01DVSsrXSA9IGNpOworICAgICAgICBjaW5mby0+TUNVX21lbWJlcnNoaXBbY2luZm8tPmJsb2Nrc19pbl9NQ1UrK10gPSBjaTsKICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgfQogfQogCkBAIC0zMjIsMTIgKzI0OCwxMiBAQAogICAgIC8qIE1ha2Ugc3VyZSBzcGVjaWZpZWQgcXVhbnRpemF0aW9uIHRhYmxlIGlzIHByZXNlbnQgKi8KICAgICBxdGJsbm8gPSBjb21wcHRyLT5xdWFudF90Ymxfbm87CiAgICAgaWYgKHF0YmxubyA8IDAgfHwgcXRibG5vID49IE5VTV9RVUFOVF9UQkxTIHx8Ci0JY2luZm8tPnF1YW50X3RibF9wdHJzW3F0Ymxub10gPT0gTlVMTCkKKyAgICAgICAgY2luZm8tPnF1YW50X3RibF9wdHJzW3F0Ymxub10gPT0gTlVMTCkKICAgICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX05PX1FVQU5UX1RBQkxFLCBxdGJsbm8pOwogICAgIC8qIE9LLCBzYXZlIGF3YXkgdGhlIHF1YW50aXphdGlvbiB0YWJsZSAqLwogICAgIHF0YmwgPSAoSlFVQU5UX1RCTCAqKQogICAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKLQkJCQkgIFNJWkVPRihKUVVBTlRfVEJMKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0laRU9GKEpRVUFOVF9UQkwpKTsKICAgICBNRU1DT1BZKHF0YmwsIGNpbmZvLT5xdWFudF90YmxfcHRyc1txdGJsbm9dLCBTSVpFT0YoSlFVQU5UX1RCTCkpOwogICAgIGNvbXBwdHItPnF1YW50X3RhYmxlID0gcXRibDsKICAgfQpAQCAtMzg3LDMxICszMTMsMzEgQEAKICAgdmFsID0gKCpjaW5mby0+bWFya2VyLT5yZWFkX21hcmtlcnMpIChjaW5mbyk7CiAKICAgc3dpdGNoICh2YWwpIHsKLSAgY2FzZSBKUEVHX1JFQUNIRURfU09TOgkvKiBGb3VuZCBTT1MgKi8KLSAgICBpZiAoaW5wdXRjdGwtPmluaGVhZGVycykgewkvKiAxc3QgU09TICovCisgIGNhc2UgSlBFR19SRUFDSEVEX1NPUzogICAgICAgIC8qIEZvdW5kIFNPUyAqLworICAgIGlmIChpbnB1dGN0bC0+aW5oZWFkZXJzKSB7ICAvKiAxc3QgU09TICovCiAgICAgICBpbml0aWFsX3NldHVwKGNpbmZvKTsKICAgICAgIGlucHV0Y3RsLT5pbmhlYWRlcnMgPSBGQUxTRTsKICAgICAgIC8qIE5vdGU6IHN0YXJ0X2lucHV0X3Bhc3MgbXVzdCBiZSBjYWxsZWQgYnkgamRtYXN0ZXIuYwogICAgICAgICogYmVmb3JlIGFueSBtb3JlIGlucHV0IGNhbiBiZSBjb25zdW1lZC4gIGpkYXBpbWluLmMgaXMKICAgICAgICAqIHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgdGhpcyBzZXF1ZW5jaW5nLgogICAgICAgICovCi0gICAgfSBlbHNlIHsJCQkvKiAybmQgb3IgbGF0ZXIgU09TIG1hcmtlciAqLworICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAvKiAybmQgb3IgbGF0ZXIgU09TIG1hcmtlciAqLwogICAgICAgaWYgKCEgaW5wdXRjdGwtPnB1Yi5oYXNfbXVsdGlwbGVfc2NhbnMpCi0JRVJSRVhJVChjaW5mbywgSkVSUl9FT0lfRVhQRUNURUQpOyAvKiBPb3BzLCBJIHdhc24ndCBleHBlY3RpbmcgdGhpcyEgKi8KKyAgICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9FT0lfRVhQRUNURUQpOyAvKiBPb3BzLCBJIHdhc24ndCBleHBlY3RpbmcgdGhpcyEgKi8KICAgICAgIHN0YXJ0X2lucHV0X3Bhc3MoY2luZm8pOwogICAgIH0KICAgICBicmVhazsKLSAgY2FzZSBKUEVHX1JFQUNIRURfRU9JOgkvKiBGb3VuZCBFT0kgKi8KKyAgY2FzZSBKUEVHX1JFQUNIRURfRU9JOiAgICAgICAgLyogRm91bmQgRU9JICovCiAgICAgaW5wdXRjdGwtPnB1Yi5lb2lfcmVhY2hlZCA9IFRSVUU7Ci0gICAgaWYgKGlucHV0Y3RsLT5pbmhlYWRlcnMpIHsJLyogVGFibGVzLW9ubHkgZGF0YXN0cmVhbSwgYXBwYXJlbnRseSAqLworICAgIGlmIChpbnB1dGN0bC0+aW5oZWFkZXJzKSB7ICAvKiBUYWJsZXMtb25seSBkYXRhc3RyZWFtLCBhcHBhcmVudGx5ICovCiAgICAgICBpZiAoY2luZm8tPm1hcmtlci0+c2F3X1NPRikKLQlFUlJFWElUKGNpbmZvLCBKRVJSX1NPRl9OT19TT1MpOworICAgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX1NPRl9OT19TT1MpOwogICAgIH0gZWxzZSB7CiAgICAgICAvKiBQcmV2ZW50IGluZmluaXRlIGxvb3AgaW4gY29lZiBjdGxyJ3MgZGVjb21wcmVzc19kYXRhIHJvdXRpbmUKICAgICAgICAqIGlmIHVzZXIgc2V0IG91dHB1dF9zY2FuX251bWJlciBsYXJnZXIgdGhhbiBudW1iZXIgb2Ygc2NhbnMuCiAgICAgICAgKi8KICAgICAgIGlmIChjaW5mby0+b3V0cHV0X3NjYW5fbnVtYmVyID4gY2luZm8tPmlucHV0X3NjYW5fbnVtYmVyKQotCWNpbmZvLT5vdXRwdXRfc2Nhbl9udW1iZXIgPSBjaW5mby0+aW5wdXRfc2Nhbl9udW1iZXI7CisgICAgICAgIGNpbmZvLT5vdXRwdXRfc2Nhbl9udW1iZXIgPSBjaW5mby0+aW5wdXRfc2Nhbl9udW1iZXI7CiAgICAgfQogICAgIGJyZWFrOwogICBjYXNlIEpQRUdfU1VTUEVOREVEOgpAQCAtNDU2LDcgKzM4Miw3IEBACiAgIC8qIENyZWF0ZSBzdWJvYmplY3QgaW4gcGVybWFuZW50IHBvb2wgKi8KICAgaW5wdXRjdGwgPSAobXlfaW5wdXRjdGxfcHRyKQogICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfUEVSTUFORU5ULAotCQkJCVNJWkVPRihteV9pbnB1dF9jb250cm9sbGVyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJWkVPRihteV9pbnB1dF9jb250cm9sbGVyKSk7CiAgIGNpbmZvLT5pbnB1dGN0bCA9IChzdHJ1Y3QganBlZ19pbnB1dF9jb250cm9sbGVyICopIGlucHV0Y3RsOwogICAvKiBJbml0aWFsaXplIG1ldGhvZCBwb2ludGVycyAqLwogICBpbnB1dGN0bC0+cHViLmNvbnN1bWVfaW5wdXQgPSBjb25zdW1lX21hcmtlcnM7CmRpZmYgLS1naXQgYS9qZG1haW5jdC5jIGIvamRtYWluY3QuYwppbmRleCAyYTY5YzUzLi45MjJmNjQ5IDEwMDY0NAotLS0gYS9qZG1haW5jdC5jCisrKyBiL2pkbWFpbmN0LmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogVGhpcyBmaWxlIHdhcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmU6CiAgKiBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5NiwgVGhvbWFzIEcuIExhbmUuCi0gKiBNb2RpZmljYXRpb25zOgorICogbGlianBlZy10dXJibyBNb2RpZmljYXRpb25zOgogICogQ29weXJpZ2h0IChDKSAyMDEwLCBELiBSLiBDb21tYW5kZXIuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuCiAgKgpAQCAtMTIwLDM5ICsxMjAsMzkgQEAKICAgLyogUG9pbnRlciB0byBhbGxvY2F0ZWQgd29ya3NwYWNlIChNIG9yIE0rMiByb3cgZ3JvdXBzKS4gKi8KICAgSlNBTVBBUlJBWSBidWZmZXJbTUFYX0NPTVBPTkVOVFNdOwogCi0gIGJvb2xlYW4gYnVmZmVyX2Z1bGw7CQkvKiBIYXZlIHdlIGdvdHRlbiBhbiBpTUNVIHJvdyBmcm9tIGRlY29kZXI/ICovCi0gIEpESU1FTlNJT04gcm93Z3JvdXBfY3RyOwkvKiBjb3VudHMgcm93IGdyb3VwcyBvdXRwdXQgdG8gcG9zdHByb2Nlc3NvciAqLworICBib29sZWFuIGJ1ZmZlcl9mdWxsOyAgICAgICAgICAvKiBIYXZlIHdlIGdvdHRlbiBhbiBpTUNVIHJvdyBmcm9tIGRlY29kZXI/ICovCisgIEpESU1FTlNJT04gcm93Z3JvdXBfY3RyOyAgICAgIC8qIGNvdW50cyByb3cgZ3JvdXBzIG91dHB1dCB0byBwb3N0cHJvY2Vzc29yICovCiAKICAgLyogUmVtYWluaW5nIGZpZWxkcyBhcmUgb25seSB1c2VkIGluIHRoZSBjb250ZXh0IGNhc2UuICovCiAKICAgLyogVGhlc2UgYXJlIHRoZSBtYXN0ZXIgcG9pbnRlcnMgdG8gdGhlIGZ1bm55LW9yZGVyIHBvaW50ZXIgbGlzdHMuICovCi0gIEpTQU1QSU1BR0UgeGJ1ZmZlclsyXTsJLyogcG9pbnRlcnMgdG8gd2VpcmQgcG9pbnRlciBsaXN0cyAqLworICBKU0FNUElNQUdFIHhidWZmZXJbMl07ICAgICAgICAvKiBwb2ludGVycyB0byB3ZWlyZCBwb2ludGVyIGxpc3RzICovCiAKLSAgaW50IHdoaWNocHRyOwkJCS8qIGluZGljYXRlcyB3aGljaCBwb2ludGVyIHNldCBpcyBub3cgaW4gdXNlICovCi0gIGludCBjb250ZXh0X3N0YXRlOwkJLyogcHJvY2Vzc19kYXRhIHN0YXRlIG1hY2hpbmUgc3RhdHVzICovCi0gIEpESU1FTlNJT04gcm93Z3JvdXBzX2F2YWlsOwkvKiByb3cgZ3JvdXBzIGF2YWlsYWJsZSB0byBwb3N0cHJvY2Vzc29yICovCi0gIEpESU1FTlNJT04gaU1DVV9yb3dfY3RyOwkvKiBjb3VudHMgaU1DVSByb3dzIHRvIGRldGVjdCBpbWFnZSB0b3AvYm90ICovCisgIGludCB3aGljaHB0cjsgICAgICAgICAgICAgICAgIC8qIGluZGljYXRlcyB3aGljaCBwb2ludGVyIHNldCBpcyBub3cgaW4gdXNlICovCisgIGludCBjb250ZXh0X3N0YXRlOyAgICAgICAgICAgIC8qIHByb2Nlc3NfZGF0YSBzdGF0ZSBtYWNoaW5lIHN0YXR1cyAqLworICBKRElNRU5TSU9OIHJvd2dyb3Vwc19hdmFpbDsgICAvKiByb3cgZ3JvdXBzIGF2YWlsYWJsZSB0byBwb3N0cHJvY2Vzc29yICovCisgIEpESU1FTlNJT04gaU1DVV9yb3dfY3RyOyAgICAgIC8qIGNvdW50cyBpTUNVIHJvd3MgdG8gZGV0ZWN0IGltYWdlIHRvcC9ib3QgKi8KIH0gbXlfbWFpbl9jb250cm9sbGVyOwogCiB0eXBlZGVmIG15X21haW5fY29udHJvbGxlciAqIG15X21haW5fcHRyOwogCiAvKiBjb250ZXh0X3N0YXRlIHZhbHVlczogKi8KLSNkZWZpbmUgQ1RYX1BSRVBBUkVfRk9SX0lNQ1UJMAkvKiBuZWVkIHRvIHByZXBhcmUgZm9yIE1DVSByb3cgKi8KLSNkZWZpbmUgQ1RYX1BST0NFU1NfSU1DVQkxCS8qIGZlZWRpbmcgaU1DVSB0byBwb3N0cHJvY2Vzc29yICovCi0jZGVmaW5lIENUWF9QT1NUUE9ORURfUk9XCTIJLyogZmVlZGluZyBwb3N0cG9uZWQgcm93IGdyb3VwICovCisjZGVmaW5lIENUWF9QUkVQQVJFX0ZPUl9JTUNVICAgIDAgICAgICAgLyogbmVlZCB0byBwcmVwYXJlIGZvciBNQ1Ugcm93ICovCisjZGVmaW5lIENUWF9QUk9DRVNTX0lNQ1UgICAgICAgIDEgICAgICAgLyogZmVlZGluZyBpTUNVIHRvIHBvc3Rwcm9jZXNzb3IgKi8KKyNkZWZpbmUgQ1RYX1BPU1RQT05FRF9ST1cgICAgICAgMiAgICAgICAvKiBmZWVkaW5nIHBvc3Rwb25lZCByb3cgZ3JvdXAgKi8KIAogCiAvKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyAqLwogTUVUSE9EREVGKHZvaWQpIHByb2Nlc3NfZGF0YV9zaW1wbGVfbWFpbgotCUpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAotCSAgICAgSkRJTUVOU0lPTiAqb3V0X3Jvd19jdHIsIEpESU1FTlNJT04gb3V0X3Jvd3NfYXZhaWwpKTsKKyAgICAgICAgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgSkRJTUVOU0lPTiAqb3V0X3Jvd19jdHIsIEpESU1FTlNJT04gb3V0X3Jvd3NfYXZhaWwpKTsKIE1FVEhPRERFRih2b2lkKSBwcm9jZXNzX2RhdGFfY29udGV4dF9tYWluCi0JSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCi0JICAgICBKRElNRU5TSU9OICpvdXRfcm93X2N0ciwgSkRJTUVOU0lPTiBvdXRfcm93c19hdmFpbCkpOworICAgICAgICBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICBKRElNRU5TSU9OICpvdXRfcm93X2N0ciwgSkRJTUVOU0lPTiBvdXRfcm93c19hdmFpbCkpOwogI2lmZGVmIFFVQU5UXzJQQVNTX1NVUFBPUlRFRAogTUVUSE9EREVGKHZvaWQpIHByb2Nlc3NfZGF0YV9jcmFua19wb3N0Ci0JSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCi0JICAgICBKRElNRU5TSU9OICpvdXRfcm93X2N0ciwgSkRJTUVOU0lPTiBvdXRfcm93c19hdmFpbCkpOworICAgICAgICBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICBKRElNRU5TSU9OICpvdXRfcm93X2N0ciwgSkRJTUVOU0lPTiBvdXRfcm93c19hdmFpbCkpOwogI2VuZGlmCiAKIApAQCAtMTczLDcgKzE3Myw3IEBACiAgICAqLwogICBtYWluX3B0ci0+eGJ1ZmZlclswXSA9IChKU0FNUElNQUdFKQogICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCi0JCQkJY2luZm8tPm51bV9jb21wb25lbnRzICogMiAqIFNJWkVPRihKU0FNUEFSUkFZKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpbmZvLT5udW1fY29tcG9uZW50cyAqIDIgKiBTSVpFT0YoSlNBTVBBUlJBWSkpOwogICBtYWluX3B0ci0+eGJ1ZmZlclsxXSA9IG1haW5fcHRyLT54YnVmZmVyWzBdICsgY2luZm8tPm51bV9jb21wb25lbnRzOwogCiAgIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7CkBAIC0xODUsOCArMTg1LDggQEAKICAgICAgKi8KICAgICB4YnVmID0gKEpTQU1QQVJSQVkpCiAgICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAotCQkJCSAgMiAqIChyZ3JvdXAgKiAoTSArIDQpKSAqIFNJWkVPRihKU0FNUFJPVykpOwotICAgIHhidWYgKz0gcmdyb3VwOwkJLyogd2FudCBvbmUgcm93IGdyb3VwIGF0IG5lZ2F0aXZlIG9mZnNldHMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICogKHJncm91cCAqIChNICsgNCkpICogU0laRU9GKEpTQU1QUk9XKSk7CisgICAgeGJ1ZiArPSByZ3JvdXA7ICAgICAgICAgICAgIC8qIHdhbnQgb25lIHJvdyBncm91cCBhdCBuZWdhdGl2ZSBvZmZzZXRzICovCiAgICAgbWFpbl9wdHItPnhidWZmZXJbMF1bY2ldID0geGJ1ZjsKICAgICB4YnVmICs9IHJncm91cCAqIChNICsgNCk7CiAgICAgbWFpbl9wdHItPnhidWZmZXJbMV1bY2ldID0geGJ1ZjsKQEAgLTMxNiwxNCArMzE2LDE0IEBACiAgICAgaWYgKGNpbmZvLT51cHNhbXBsZS0+bmVlZF9jb250ZXh0X3Jvd3MpIHsKICAgICAgIG1haW5fcHRyLT5wdWIucHJvY2Vzc19kYXRhID0gcHJvY2Vzc19kYXRhX2NvbnRleHRfbWFpbjsKICAgICAgIG1ha2VfZnVubnlfcG9pbnRlcnMoY2luZm8pOyAvKiBDcmVhdGUgdGhlIHhidWZmZXJbXSBsaXN0cyAqLwotICAgICAgbWFpbl9wdHItPndoaWNocHRyID0gMDsJLyogUmVhZCBmaXJzdCBpTUNVIHJvdyBpbnRvIHhidWZmZXJbMF0gKi8KKyAgICAgIG1haW5fcHRyLT53aGljaHB0ciA9IDA7ICAgLyogUmVhZCBmaXJzdCBpTUNVIHJvdyBpbnRvIHhidWZmZXJbMF0gKi8KICAgICAgIG1haW5fcHRyLT5jb250ZXh0X3N0YXRlID0gQ1RYX1BSRVBBUkVfRk9SX0lNQ1U7CiAgICAgICBtYWluX3B0ci0+aU1DVV9yb3dfY3RyID0gMDsKICAgICB9IGVsc2UgewogICAgICAgLyogU2ltcGxlIGNhc2Ugd2l0aCBubyBjb250ZXh0IG5lZWRlZCAqLwogICAgICAgbWFpbl9wdHItPnB1Yi5wcm9jZXNzX2RhdGEgPSBwcm9jZXNzX2RhdGFfc2ltcGxlX21haW47CiAgICAgfQotICAgIG1haW5fcHRyLT5idWZmZXJfZnVsbCA9IEZBTFNFOwkvKiBNYXJrIGJ1ZmZlciBlbXB0eSAqLworICAgIG1haW5fcHRyLT5idWZmZXJfZnVsbCA9IEZBTFNFOyAgICAgIC8qIE1hcmsgYnVmZmVyIGVtcHR5ICovCiAgICAgbWFpbl9wdHItPnJvd2dyb3VwX2N0ciA9IDA7CiAgICAgYnJlYWs7CiAjaWZkZWYgUVVBTlRfMlBBU1NfU1VQUE9SVEVECkBAIC0zNDYsOCArMzQ2LDggQEAKIAogTUVUSE9EREVGKHZvaWQpCiBwcm9jZXNzX2RhdGFfc2ltcGxlX21haW4gKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCi0JCQkgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiAqb3V0X3Jvd19jdHIsCi0JCQkgIEpESU1FTlNJT04gb3V0X3Jvd3NfYXZhaWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiAqb3V0X3Jvd19jdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0X3Jvd3NfYXZhaWwpCiB7CiAgIG15X21haW5fcHRyIG1haW5fcHRyID0gKG15X21haW5fcHRyKSBjaW5mby0+bWFpbjsKICAgSkRJTUVOU0lPTiByb3dncm91cHNfYXZhaWw7CkBAIC0zNTUsOCArMzU1LDggQEAKICAgLyogUmVhZCBpbnB1dCBkYXRhIGlmIHdlIGhhdmVuJ3QgZmlsbGVkIHRoZSBtYWluIGJ1ZmZlciB5ZXQgKi8KICAgaWYgKCEgbWFpbl9wdHItPmJ1ZmZlcl9mdWxsKSB7CiAgICAgaWYgKCEgKCpjaW5mby0+Y29lZi0+ZGVjb21wcmVzc19kYXRhKSAoY2luZm8sIG1haW5fcHRyLT5idWZmZXIpKQotICAgICAgcmV0dXJuOwkJCS8qIHN1c3BlbnNpb24gZm9yY2VkLCBjYW4gZG8gbm90aGluZyBtb3JlICovCi0gICAgbWFpbl9wdHItPmJ1ZmZlcl9mdWxsID0gVFJVRTsJLyogT0ssIHdlIGhhdmUgYW4gaU1DVSByb3cgdG8gd29yayB3aXRoICovCisgICAgICByZXR1cm47ICAgICAgICAgICAgICAgICAgIC8qIHN1c3BlbnNpb24gZm9yY2VkLCBjYW4gZG8gbm90aGluZyBtb3JlICovCisgICAgbWFpbl9wdHItPmJ1ZmZlcl9mdWxsID0gVFJVRTsgICAgICAgLyogT0ssIHdlIGhhdmUgYW4gaU1DVSByb3cgdG8gd29yayB3aXRoICovCiAgIH0KIAogICAvKiBUaGVyZSBhcmUgYWx3YXlzIG1pbl9EQ1Rfc2NhbGVkX3NpemUgcm93IGdyb3VwcyBpbiBhbiBpTUNVIHJvdy4gKi8KQEAgLTM2OCw4ICszNjgsOCBAQAogCiAgIC8qIEZlZWQgdGhlIHBvc3Rwcm9jZXNzb3IgKi8KICAgKCpjaW5mby0+cG9zdC0+cG9zdF9wcm9jZXNzX2RhdGEpIChjaW5mbywgbWFpbl9wdHItPmJ1ZmZlciwKLQkJCQkgICAgICZtYWluX3B0ci0+cm93Z3JvdXBfY3RyLCByb3dncm91cHNfYXZhaWwsCi0JCQkJICAgICBvdXRwdXRfYnVmLCBvdXRfcm93X2N0ciwgb3V0X3Jvd3NfYXZhaWwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtYWluX3B0ci0+cm93Z3JvdXBfY3RyLCByb3dncm91cHNfYXZhaWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2J1Ziwgb3V0X3Jvd19jdHIsIG91dF9yb3dzX2F2YWlsKTsKIAogICAvKiBIYXMgcG9zdHByb2Nlc3NvciBjb25zdW1lZCBhbGwgdGhlIGRhdGEgeWV0PyBJZiBzbywgbWFyayBidWZmZXIgZW1wdHkgKi8KICAgaWYgKG1haW5fcHRyLT5yb3dncm91cF9jdHIgPj0gcm93Z3JvdXBzX2F2YWlsKSB7CkBAIC0zODYsMTggKzM4NiwxOCBAQAogCiBNRVRIT0RERUYodm9pZCkKIHByb2Nlc3NfZGF0YV9jb250ZXh0X21haW4gKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCi0JCQkgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gKm91dF9yb3dfY3RyLAotCQkJICAgSkRJTUVOU0lPTiBvdXRfcm93c19hdmFpbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiAqb3V0X3Jvd19jdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dF9yb3dzX2F2YWlsKQogewogICBteV9tYWluX3B0ciBtYWluX3B0ciA9IChteV9tYWluX3B0cikgY2luZm8tPm1haW47CiAKICAgLyogUmVhZCBpbnB1dCBkYXRhIGlmIHdlIGhhdmVuJ3QgZmlsbGVkIHRoZSBtYWluIGJ1ZmZlciB5ZXQgKi8KICAgaWYgKCEgbWFpbl9wdHItPmJ1ZmZlcl9mdWxsKSB7CiAgICAgaWYgKCEgKCpjaW5mby0+Y29lZi0+ZGVjb21wcmVzc19kYXRhKSAoY2luZm8sCi0JCQkJCSAgIG1haW5fcHRyLT54YnVmZmVyW21haW5fcHRyLT53aGljaHB0cl0pKQotICAgICAgcmV0dXJuOwkJCS8qIHN1c3BlbnNpb24gZm9yY2VkLCBjYW4gZG8gbm90aGluZyBtb3JlICovCi0gICAgbWFpbl9wdHItPmJ1ZmZlcl9mdWxsID0gVFJVRTsJLyogT0ssIHdlIGhhdmUgYW4gaU1DVSByb3cgdG8gd29yayB3aXRoICovCi0gICAgbWFpbl9wdHItPmlNQ1Vfcm93X2N0cisrOwkvKiBjb3VudCByb3dzIHJlY2VpdmVkICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbl9wdHItPnhidWZmZXJbbWFpbl9wdHItPndoaWNocHRyXSkpCisgICAgICByZXR1cm47ICAgICAgICAgICAgICAgICAgIC8qIHN1c3BlbnNpb24gZm9yY2VkLCBjYW4gZG8gbm90aGluZyBtb3JlICovCisgICAgbWFpbl9wdHItPmJ1ZmZlcl9mdWxsID0gVFJVRTsgICAgICAgLyogT0ssIHdlIGhhdmUgYW4gaU1DVSByb3cgdG8gd29yayB3aXRoICovCisgICAgbWFpbl9wdHItPmlNQ1Vfcm93X2N0cisrOyAgIC8qIGNvdW50IHJvd3MgcmVjZWl2ZWQgKi8KICAgfQogCiAgIC8qIFBvc3Rwcm9jZXNzb3IgdHlwaWNhbGx5IHdpbGwgbm90IHN3YWxsb3cgYWxsIHRoZSBpbnB1dCBkYXRhIGl0IGlzIGhhbmRlZApAQCAtNDA5LDEzICs0MDksMTMgQEAKICAgY2FzZSBDVFhfUE9TVFBPTkVEX1JPVzoKICAgICAvKiBDYWxsIHBvc3Rwcm9jZXNzb3IgdXNpbmcgcHJldmlvdXNseSBzZXQgcG9pbnRlcnMgZm9yIHBvc3Rwb25lZCByb3cgKi8KICAgICAoKmNpbmZvLT5wb3N0LT5wb3N0X3Byb2Nlc3NfZGF0YSkgKGNpbmZvLCBtYWluX3B0ci0+eGJ1ZmZlclttYWluX3B0ci0+d2hpY2hwdHJdLAotCQkJJm1haW5fcHRyLT5yb3dncm91cF9jdHIsIG1haW5fcHRyLT5yb3dncm91cHNfYXZhaWwsCi0JCQlvdXRwdXRfYnVmLCBvdXRfcm93X2N0ciwgb3V0X3Jvd3NfYXZhaWwpOworICAgICAgICAgICAgICAgICAgICAgICAgJm1haW5fcHRyLT5yb3dncm91cF9jdHIsIG1haW5fcHRyLT5yb3dncm91cHNfYXZhaWwsCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfYnVmLCBvdXRfcm93X2N0ciwgb3V0X3Jvd3NfYXZhaWwpOwogICAgIGlmIChtYWluX3B0ci0+cm93Z3JvdXBfY3RyIDwgbWFpbl9wdHItPnJvd2dyb3Vwc19hdmFpbCkKLSAgICAgIHJldHVybjsJCQkvKiBOZWVkIHRvIHN1c3BlbmQgKi8KKyAgICAgIHJldHVybjsgICAgICAgICAgICAgICAgICAgLyogTmVlZCB0byBzdXNwZW5kICovCiAgICAgbWFpbl9wdHItPmNvbnRleHRfc3RhdGUgPSBDVFhfUFJFUEFSRV9GT1JfSU1DVTsKICAgICBpZiAoKm91dF9yb3dfY3RyID49IG91dF9yb3dzX2F2YWlsKQotICAgICAgcmV0dXJuOwkJCS8qIFBvc3Rwcm9jZXNzb3IgZXhhY3RseSBmaWxsZWQgb3V0cHV0IGJ1ZiAqLworICAgICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgICAvKiBQb3N0cHJvY2Vzc29yIGV4YWN0bHkgZmlsbGVkIG91dHB1dCBidWYgKi8KICAgICAvKkZBTExUSFJPVUdIKi8KICAgY2FzZSBDVFhfUFJFUEFSRV9GT1JfSU1DVToKICAgICAvKiBQcmVwYXJlIHRvIHByb2Nlc3MgZmlyc3QgTS0xIHJvdyBncm91cHMgb2YgdGhpcyBpTUNVIHJvdyAqLwpAQCAtNDMxLDE1ICs0MzEsMTUgQEAKICAgY2FzZSBDVFhfUFJPQ0VTU19JTUNVOgogICAgIC8qIENhbGwgcG9zdHByb2Nlc3NvciB1c2luZyBwcmV2aW91c2x5IHNldCBwb2ludGVycyAqLwogICAgICgqY2luZm8tPnBvc3QtPnBvc3RfcHJvY2Vzc19kYXRhKSAoY2luZm8sIG1haW5fcHRyLT54YnVmZmVyW21haW5fcHRyLT53aGljaHB0cl0sCi0JCQkmbWFpbl9wdHItPnJvd2dyb3VwX2N0ciwgbWFpbl9wdHItPnJvd2dyb3Vwc19hdmFpbCwKLQkJCW91dHB1dF9idWYsIG91dF9yb3dfY3RyLCBvdXRfcm93c19hdmFpbCk7CisgICAgICAgICAgICAgICAgICAgICAgICAmbWFpbl9wdHItPnJvd2dyb3VwX2N0ciwgbWFpbl9wdHItPnJvd2dyb3Vwc19hdmFpbCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9idWYsIG91dF9yb3dfY3RyLCBvdXRfcm93c19hdmFpbCk7CiAgICAgaWYgKG1haW5fcHRyLT5yb3dncm91cF9jdHIgPCBtYWluX3B0ci0+cm93Z3JvdXBzX2F2YWlsKQotICAgICAgcmV0dXJuOwkJCS8qIE5lZWQgdG8gc3VzcGVuZCAqLworICAgICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgICAvKiBOZWVkIHRvIHN1c3BlbmQgKi8KICAgICAvKiBBZnRlciB0aGUgZmlyc3QgaU1DVSwgY2hhbmdlIHdyYXBhcm91bmQgcG9pbnRlcnMgdG8gbm9ybWFsIHN0YXRlICovCiAgICAgaWYgKG1haW5fcHRyLT5pTUNVX3Jvd19jdHIgPT0gMSkKICAgICAgIHNldF93cmFwYXJvdW5kX3BvaW50ZXJzKGNpbmZvKTsKICAgICAvKiBQcmVwYXJlIHRvIGxvYWQgbmV3IGlNQ1Ugcm93IHVzaW5nIG90aGVyIHhidWZmZXIgbGlzdCAqLwotICAgIG1haW5fcHRyLT53aGljaHB0ciBePSAxOwkvKiAwPT4xIG9yIDE9PjAgKi8KKyAgICBtYWluX3B0ci0+d2hpY2hwdHIgXj0gMTsgICAgLyogMD0+MSBvciAxPT4wICovCiAgICAgbWFpbl9wdHItPmJ1ZmZlcl9mdWxsID0gRkFMU0U7CiAgICAgLyogU3RpbGwgbmVlZCB0byBwcm9jZXNzIGxhc3Qgcm93IGdyb3VwIG9mIHRoaXMgaU1DVSByb3csICovCiAgICAgLyogd2hpY2ggaXMgc2F2ZWQgYXQgaW5kZXggTSsxIG9mIHRoZSBvdGhlciB4YnVmZmVyICovCkBAIC00NjAsMTIgKzQ2MCwxMiBAQAogCiBNRVRIT0RERUYodm9pZCkKIHByb2Nlc3NfZGF0YV9jcmFua19wb3N0IChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAotCQkJIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiAqb3V0X3Jvd19jdHIsCi0JCQkgSkRJTUVOU0lPTiBvdXRfcm93c19hdmFpbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gKm91dF9yb3dfY3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0X3Jvd3NfYXZhaWwpCiB7CiAgICgqY2luZm8tPnBvc3QtPnBvc3RfcHJvY2Vzc19kYXRhKSAoY2luZm8sIChKU0FNUElNQUdFKSBOVUxMLAotCQkJCSAgICAgKEpESU1FTlNJT04gKikgTlVMTCwgKEpESU1FTlNJT04pIDAsCi0JCQkJICAgICBvdXRwdXRfYnVmLCBvdXRfcm93X2N0ciwgb3V0X3Jvd3NfYXZhaWwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChKRElNRU5TSU9OICopIE5VTEwsIChKRElNRU5TSU9OKSAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9idWYsIG91dF9yb3dfY3RyLCBvdXRfcm93c19hdmFpbCk7CiB9CiAKICNlbmRpZiAvKiBRVUFOVF8yUEFTU19TVVBQT1JURUQgKi8KQEAgLTQ4NCwxMSArNDg0LDExIEBACiAKICAgbWFpbl9wdHIgPSAobXlfbWFpbl9wdHIpCiAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKLQkJCQlTSVpFT0YobXlfbWFpbl9jb250cm9sbGVyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJWkVPRihteV9tYWluX2NvbnRyb2xsZXIpKTsKICAgY2luZm8tPm1haW4gPSAoc3RydWN0IGpwZWdfZF9tYWluX2NvbnRyb2xsZXIgKikgbWFpbl9wdHI7CiAgIG1haW5fcHRyLT5wdWIuc3RhcnRfcGFzcyA9IHN0YXJ0X3Bhc3NfbWFpbjsKIAotICBpZiAobmVlZF9mdWxsX2J1ZmZlcikJCS8qIHNob3VsZG4ndCBoYXBwZW4gKi8KKyAgaWYgKG5lZWRfZnVsbF9idWZmZXIpICAgICAgICAgLyogc2hvdWxkbid0IGhhcHBlbiAqLwogICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0JVRkZFUl9NT0RFKTsKIAogICAvKiBBbGxvY2F0ZSB0aGUgd29ya3NwYWNlLgpAQCAtNTA4LDggKzUwOCw4IEBACiAgICAgcmdyb3VwID0gKGNvbXBwdHItPnZfc2FtcF9mYWN0b3IgKiBjb21wcHRyLT5fRENUX3NjYWxlZF9zaXplKSAvCiAgICAgICBjaW5mby0+X21pbl9EQ1Rfc2NhbGVkX3NpemU7IC8qIGhlaWdodCBvZiBhIHJvdyBncm91cCBvZiBjb21wb25lbnQgKi8KICAgICBtYWluX3B0ci0+YnVmZmVyW2NpXSA9ICgqY2luZm8tPm1lbS0+YWxsb2Nfc2FycmF5KQotCQkJKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKLQkJCSBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MgKiBjb21wcHRyLT5fRENUX3NjYWxlZF9zaXplLAotCQkJIChKRElNRU5TSU9OKSAocmdyb3VwICogbmdyb3VwcykpOworICAgICAgICAgICAgICAgICAgICAgICAgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MgKiBjb21wcHRyLT5fRENUX3NjYWxlZF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgIChKRElNRU5TSU9OKSAocmdyb3VwICogbmdyb3VwcykpOwogICB9CiB9CmRpZmYgLS1naXQgYS9qZG1hcmtlci5jIGIvamRtYXJrZXIuYwppbmRleCA5MTRlMjk4Li5kOTk2ZjZiIDEwMDY0NAotLS0gYS9qZG1hcmtlci5jCisrKyBiL2pkbWFya2VyLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogVGhpcyBmaWxlIHdhcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmU6CiAgKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5OCwgVGhvbWFzIEcuIExhbmUuCi0gKiBNb2RpZmljYXRpb25zOgorICogbGlianBlZy10dXJibyBNb2RpZmljYXRpb25zOgogICogQ29weXJpZ2h0IChDKSAyMDEyLCBELiBSLiBDb21tYW5kZXIuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuCiAgKgpAQCAtMTksMjkgKzE5LDI5IEBACiAjaW5jbHVkZSAianBlZ2xpYi5oIgogCiAKLXR5cGVkZWYgZW51bSB7CQkJLyogSlBFRyBtYXJrZXIgY29kZXMgKi8KK3R5cGVkZWYgZW51bSB7ICAgICAgICAgICAgICAgICAgLyogSlBFRyBtYXJrZXIgY29kZXMgKi8KICAgTV9TT0YwICA9IDB4YzAsCiAgIE1fU09GMSAgPSAweGMxLAogICBNX1NPRjIgID0gMHhjMiwKICAgTV9TT0YzICA9IDB4YzMsCi0gIAorCiAgIE1fU09GNSAgPSAweGM1LAogICBNX1NPRjYgID0gMHhjNiwKICAgTV9TT0Y3ICA9IDB4YzcsCi0gIAorCiAgIE1fSlBHICAgPSAweGM4LAogICBNX1NPRjkgID0gMHhjOSwKICAgTV9TT0YxMCA9IDB4Y2EsCiAgIE1fU09GMTEgPSAweGNiLAotICAKKwogICBNX1NPRjEzID0gMHhjZCwKICAgTV9TT0YxNCA9IDB4Y2UsCiAgIE1fU09GMTUgPSAweGNmLAotICAKKwogICBNX0RIVCAgID0gMHhjNCwKLSAgCisKICAgTV9EQUMgICA9IDB4Y2MsCi0gIAorCiAgIE1fUlNUMCAgPSAweGQwLAogICBNX1JTVDEgID0gMHhkMSwKICAgTV9SU1QyICA9IDB4ZDIsCkBAIC01MCw3ICs1MCw3IEBACiAgIE1fUlNUNSAgPSAweGQ1LAogICBNX1JTVDYgID0gMHhkNiwKICAgTV9SU1Q3ICA9IDB4ZDcsCi0gIAorCiAgIE1fU09JICAgPSAweGQ4LAogICBNX0VPSSAgID0gMHhkOSwKICAgTV9TT1MgICA9IDB4ZGEsCkBAIC01OSw3ICs1OSw3IEBACiAgIE1fRFJJICAgPSAweGRkLAogICBNX0RIUCAgID0gMHhkZSwKICAgTV9FWFAgICA9IDB4ZGYsCi0gIAorCiAgIE1fQVBQMCAgPSAweGUwLAogICBNX0FQUDEgID0gMHhlMSwKICAgTV9BUFAyICA9IDB4ZTIsCkBAIC03NiwxMyArNzYsMTMgQEAKICAgTV9BUFAxMyA9IDB4ZWQsCiAgIE1fQVBQMTQgPSAweGVlLAogICBNX0FQUDE1ID0gMHhlZiwKLSAgCisKICAgTV9KUEcwICA9IDB4ZjAsCiAgIE1fSlBHMTMgPSAweGZkLAogICBNX0NPTSAgID0gMHhmZSwKLSAgCisKICAgTV9URU0gICA9IDB4MDEsCi0gIAorCiAgIE1fRVJST1IgPSAweDEwMAogfSBKUEVHX01BUktFUjsKIApAQCAtMTAxLDggKzEwMSw4IEBACiAgIHVuc2lnbmVkIGludCBsZW5ndGhfbGltaXRfQVBQblsxNl07CiAKICAgLyogU3RhdHVzIG9mIENPTS9BUFBuIG1hcmtlciBzYXZpbmcgKi8KLSAganBlZ19zYXZlZF9tYXJrZXJfcHRyIGN1cl9tYXJrZXI7CS8qIE5VTEwgaWYgbm90IHByb2Nlc3NpbmcgYSBtYXJrZXIgKi8KLSAgdW5zaWduZWQgaW50IGJ5dGVzX3JlYWQ7CQkvKiBkYXRhIGJ5dGVzIHJlYWQgc28gZmFyIGluIG1hcmtlciAqLworICBqcGVnX3NhdmVkX21hcmtlcl9wdHIgY3VyX21hcmtlcjsgICAgIC8qIE5VTEwgaWYgbm90IHByb2Nlc3NpbmcgYSBtYXJrZXIgKi8KKyAgdW5zaWduZWQgaW50IGJ5dGVzX3JlYWQ7ICAgICAgICAgICAgICAvKiBkYXRhIGJ5dGVzIHJlYWQgc28gZmFyIGluIG1hcmtlciAqLwogICAvKiBOb3RlOiBjdXJfbWFya2VyIGlzIG5vdCBsaW5rZWQgaW50byBtYXJrZXJfbGlzdCB1bnRpbCBpdCdzIGFsbCByZWFkLiAqLwogfSBteV9tYXJrZXJfcmVhZGVyOwogCkBAIC0xMTksNDkgKzExOSw0OSBAQAogCiAvKiBEZWNsYXJlIGFuZCBpbml0aWFsaXplIGxvY2FsIGNvcGllcyBvZiBpbnB1dCBwb2ludGVyL2NvdW50ICovCiAjZGVmaW5lIElOUFVUX1ZBUlMoY2luZm8pICBcCi0Jc3RydWN0IGpwZWdfc291cmNlX21nciAqIGRhdGFzcmMgPSAoY2luZm8pLT5zcmM7ICBcCi0JY29uc3QgSk9DVEVUICogbmV4dF9pbnB1dF9ieXRlID0gZGF0YXNyYy0+bmV4dF9pbnB1dF9ieXRlOyAgXAotCXNpemVfdCBieXRlc19pbl9idWZmZXIgPSBkYXRhc3JjLT5ieXRlc19pbl9idWZmZXIKKyAgICAgICAgc3RydWN0IGpwZWdfc291cmNlX21nciAqIGRhdGFzcmMgPSAoY2luZm8pLT5zcmM7ICBcCisgICAgICAgIGNvbnN0IEpPQ1RFVCAqIG5leHRfaW5wdXRfYnl0ZSA9IGRhdGFzcmMtPm5leHRfaW5wdXRfYnl0ZTsgIFwKKyAgICAgICAgc2l6ZV90IGJ5dGVzX2luX2J1ZmZlciA9IGRhdGFzcmMtPmJ5dGVzX2luX2J1ZmZlcgogCiAvKiBVbmxvYWQgdGhlIGxvY2FsIGNvcGllcyAtLS0gZG8gdGhpcyBvbmx5IGF0IGEgcmVzdGFydCBib3VuZGFyeSAqLwogI2RlZmluZSBJTlBVVF9TWU5DKGNpbmZvKSAgXAotCSggZGF0YXNyYy0+bmV4dF9pbnB1dF9ieXRlID0gbmV4dF9pbnB1dF9ieXRlLCAgXAotCSAgZGF0YXNyYy0+Ynl0ZXNfaW5fYnVmZmVyID0gYnl0ZXNfaW5fYnVmZmVyICkKKyAgICAgICAgKCBkYXRhc3JjLT5uZXh0X2lucHV0X2J5dGUgPSBuZXh0X2lucHV0X2J5dGUsICBcCisgICAgICAgICAgZGF0YXNyYy0+Ynl0ZXNfaW5fYnVmZmVyID0gYnl0ZXNfaW5fYnVmZmVyICkKIAogLyogUmVsb2FkIHRoZSBsb2NhbCBjb3BpZXMgLS0tIHVzZWQgb25seSBpbiBNQUtFX0JZVEVfQVZBSUwgKi8KICNkZWZpbmUgSU5QVVRfUkVMT0FEKGNpbmZvKSAgXAotCSggbmV4dF9pbnB1dF9ieXRlID0gZGF0YXNyYy0+bmV4dF9pbnB1dF9ieXRlLCAgXAotCSAgYnl0ZXNfaW5fYnVmZmVyID0gZGF0YXNyYy0+Ynl0ZXNfaW5fYnVmZmVyICkKKyAgICAgICAgKCBuZXh0X2lucHV0X2J5dGUgPSBkYXRhc3JjLT5uZXh0X2lucHV0X2J5dGUsICBcCisgICAgICAgICAgYnl0ZXNfaW5fYnVmZmVyID0gZGF0YXNyYy0+Ynl0ZXNfaW5fYnVmZmVyICkKIAogLyogSW50ZXJuYWwgbWFjcm8gZm9yIElOUFVUX0JZVEUgYW5kIElOUFVUXzJCWVRFUzogbWFrZSBhIGJ5dGUgYXZhaWxhYmxlLgogICogTm90ZSB3ZSBkbyAqbm90KiBkbyBJTlBVVF9TWU5DIGJlZm9yZSBjYWxsaW5nIGZpbGxfaW5wdXRfYnVmZmVyLAogICogYnV0IHdlIG11c3QgcmVsb2FkIHRoZSBsb2NhbCBjb3BpZXMgYWZ0ZXIgYSBzdWNjZXNzZnVsIGZpbGwuCiAgKi8KICNkZWZpbmUgTUFLRV9CWVRFX0FWQUlMKGNpbmZvLGFjdGlvbikgIFwKLQlpZiAoYnl0ZXNfaW5fYnVmZmVyID09IDApIHsgIFwKLQkgIGlmICghICgqZGF0YXNyYy0+ZmlsbF9pbnB1dF9idWZmZXIpIChjaW5mbykpICBcCi0JICAgIHsgYWN0aW9uOyB9ICBcCi0JICBJTlBVVF9SRUxPQUQoY2luZm8pOyAgXAotCX0KKyAgICAgICAgaWYgKGJ5dGVzX2luX2J1ZmZlciA9PSAwKSB7ICBcCisgICAgICAgICAgaWYgKCEgKCpkYXRhc3JjLT5maWxsX2lucHV0X2J1ZmZlcikgKGNpbmZvKSkgIFwKKyAgICAgICAgICAgIHsgYWN0aW9uOyB9ICBcCisgICAgICAgICAgSU5QVVRfUkVMT0FEKGNpbmZvKTsgIFwKKyAgICAgICAgfQogCiAvKiBSZWFkIGEgYnl0ZSBpbnRvIHZhcmlhYmxlIFYuCiAgKiBJZiBtdXN0IHN1c3BlbmQsIHRha2UgdGhlIHNwZWNpZmllZCBhY3Rpb24gKHR5cGljYWxseSAicmV0dXJuIEZBTFNFIikuCiAgKi8KICNkZWZpbmUgSU5QVVRfQllURShjaW5mbyxWLGFjdGlvbikgIFwKLQlNQUtFU1RNVCggTUFLRV9CWVRFX0FWQUlMKGNpbmZvLGFjdGlvbik7IFwKLQkJICBieXRlc19pbl9idWZmZXItLTsgXAotCQkgIFYgPSBHRVRKT0NURVQoKm5leHRfaW5wdXRfYnl0ZSsrKTsgKQorICAgICAgICBNQUtFU1RNVCggTUFLRV9CWVRFX0FWQUlMKGNpbmZvLGFjdGlvbik7IFwKKyAgICAgICAgICAgICAgICAgIGJ5dGVzX2luX2J1ZmZlci0tOyBcCisgICAgICAgICAgICAgICAgICBWID0gR0VUSk9DVEVUKCpuZXh0X2lucHV0X2J5dGUrKyk7ICkKIAogLyogQXMgYWJvdmUsIGJ1dCByZWFkIHR3byBieXRlcyBpbnRlcnByZXRlZCBhcyBhbiB1bnNpZ25lZCAxNi1iaXQgaW50ZWdlci4KICAqIFYgc2hvdWxkIGJlIGRlY2xhcmVkIHVuc2lnbmVkIGludCBvciBwZXJoYXBzIElOVDMyLgogICovCiAjZGVmaW5lIElOUFVUXzJCWVRFUyhjaW5mbyxWLGFjdGlvbikgIFwKLQlNQUtFU1RNVCggTUFLRV9CWVRFX0FWQUlMKGNpbmZvLGFjdGlvbik7IFwKLQkJICBieXRlc19pbl9idWZmZXItLTsgXAotCQkgIFYgPSAoKHVuc2lnbmVkIGludCkgR0VUSk9DVEVUKCpuZXh0X2lucHV0X2J5dGUrKykpIDw8IDg7IFwKLQkJICBNQUtFX0JZVEVfQVZBSUwoY2luZm8sYWN0aW9uKTsgXAotCQkgIGJ5dGVzX2luX2J1ZmZlci0tOyBcCi0JCSAgViArPSBHRVRKT0NURVQoKm5leHRfaW5wdXRfYnl0ZSsrKTsgKQorICAgICAgICBNQUtFU1RNVCggTUFLRV9CWVRFX0FWQUlMKGNpbmZvLGFjdGlvbik7IFwKKyAgICAgICAgICAgICAgICAgIGJ5dGVzX2luX2J1ZmZlci0tOyBcCisgICAgICAgICAgICAgICAgICBWID0gKCh1bnNpZ25lZCBpbnQpIEdFVEpPQ1RFVCgqbmV4dF9pbnB1dF9ieXRlKyspKSA8PCA4OyBcCisgICAgICAgICAgICAgICAgICBNQUtFX0JZVEVfQVZBSUwoY2luZm8sYWN0aW9uKTsgXAorICAgICAgICAgICAgICAgICAgYnl0ZXNfaW5fYnVmZmVyLS07IFwKKyAgICAgICAgICAgICAgICAgIFYgKz0gR0VUSk9DVEVUKCpuZXh0X2lucHV0X2J5dGUrKyk7ICkKIAogCiAvKgpAQCAtMjAwLDcgKzIwMCw3IEBACiAvKiBQcm9jZXNzIGFuIFNPSSBtYXJrZXIgKi8KIHsKICAgaW50IGk7Ci0gIAorCiAgIFRSQUNFTVMoY2luZm8sIDEsIEpUUkNfU09JKTsKIAogICBpZiAoY2luZm8tPm1hcmtlci0+c2F3X1NPSSkKQEAgLTI1Nyw4ICsyNTcsOCBAQAogICBsZW5ndGggLT0gODsKIAogICBUUkFDRU1TNChjaW5mbywgMSwgSlRSQ19TT0YsIGNpbmZvLT51bnJlYWRfbWFya2VyLAotCSAgIChpbnQpIGNpbmZvLT5pbWFnZV93aWR0aCwgKGludCkgY2luZm8tPmltYWdlX2hlaWdodCwKLQkgICBjaW5mby0+bnVtX2NvbXBvbmVudHMpOworICAgICAgICAgICAoaW50KSBjaW5mby0+aW1hZ2Vfd2lkdGgsIChpbnQpIGNpbmZvLT5pbWFnZV9oZWlnaHQsCisgICAgICAgICAgIGNpbmZvLT5udW1fY29tcG9uZW50cyk7CiAKICAgaWYgKGNpbmZvLT5tYXJrZXItPnNhd19TT0YpCiAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9TT0ZfRFVQTElDQVRFKTsKQEAgLTI3MywxMSArMjczLDExIEBACiAgIGlmIChsZW5ndGggIT0gKGNpbmZvLT5udW1fY29tcG9uZW50cyAqIDMpKQogICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0xFTkdUSCk7CiAKLSAgaWYgKGNpbmZvLT5jb21wX2luZm8gPT0gTlVMTCkJLyogZG8gb25seSBvbmNlLCBldmVuIGlmIHN1c3BlbmQgKi8KKyAgaWYgKGNpbmZvLT5jb21wX2luZm8gPT0gTlVMTCkgLyogZG8gb25seSBvbmNlLCBldmVuIGlmIHN1c3BlbmQgKi8KICAgICBjaW5mby0+Y29tcF9pbmZvID0gKGpwZWdfY29tcG9uZW50X2luZm8gKikgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkKLQkJCSgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCi0JCQkgY2luZm8tPm51bV9jb21wb25lbnRzICogU0laRU9GKGpwZWdfY29tcG9uZW50X2luZm8pKTsKLSAgCisgICAgICAgICAgICAgICAgICAgICAgICAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNpbmZvLT5udW1fY29tcG9uZW50cyAqIFNJWkVPRihqcGVnX2NvbXBvbmVudF9pbmZvKSk7CisKICAgZm9yIChjaSA9IDAsIGNvbXBwdHIgPSBjaW5mby0+Y29tcF9pbmZvOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsKICAgICAgICBjaSsrLCBjb21wcHRyKyspIHsKICAgICBjb21wcHRyLT5jb21wb25lbnRfaW5kZXggPSBjaTsKQEAgLTI4OCw4ICsyODgsOCBAQAogICAgIElOUFVUX0JZVEUoY2luZm8sIGNvbXBwdHItPnF1YW50X3RibF9ubywgcmV0dXJuIEZBTFNFKTsKIAogICAgIFRSQUNFTVM0KGNpbmZvLCAxLCBKVFJDX1NPRl9DT01QT05FTlQsCi0JICAgICBjb21wcHRyLT5jb21wb25lbnRfaWQsIGNvbXBwdHItPmhfc2FtcF9mYWN0b3IsCi0JICAgICBjb21wcHRyLT52X3NhbXBfZmFjdG9yLCBjb21wcHRyLT5xdWFudF90Ymxfbm8pOworICAgICAgICAgICAgIGNvbXBwdHItPmNvbXBvbmVudF9pZCwgY29tcHB0ci0+aF9zYW1wX2ZhY3RvciwKKyAgICAgICAgICAgICBjb21wcHRyLT52X3NhbXBfZmFjdG9yLCBjb21wcHRyLT5xdWFudF90Ymxfbm8pOwogICB9CiAKICAgY2luZm8tPm1hcmtlci0+c2F3X1NPRiA9IFRSVUU7CkBAIC0zMzAsMTIgKzMzMCwxMiBAQAogICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgSU5QVVRfQllURShjaW5mbywgY2MsIHJldHVybiBGQUxTRSk7CiAgICAgSU5QVVRfQllURShjaW5mbywgYywgcmV0dXJuIEZBTFNFKTsKLSAgICAKKwogICAgIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsKLQkgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHMgJiYgY2kgPCBNQVhfQ09NUFNfSU5fU0NBTjsKLQkgY2krKywgY29tcHB0cisrKSB7CisgICAgICAgICBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50cyAmJiBjaSA8IE1BWF9DT01QU19JTl9TQ0FOOworICAgICAgICAgY2krKywgY29tcHB0cisrKSB7CiAgICAgICBpZiAoY2MgPT0gY29tcHB0ci0+Y29tcG9uZW50X2lkICYmICFjaW5mby0+Y3VyX2NvbXBfaW5mb1tjaV0pCi0JZ290byBpZF9mb3VuZDsKKyAgICAgICAgZ290byBpZF9mb3VuZDsKICAgICB9CiAKICAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfQ09NUE9ORU5UX0lELCBjYyk7CkBAIC0zNDUsOSArMzQ1LDkgQEAKICAgICBjaW5mby0+Y3VyX2NvbXBfaW5mb1tpXSA9IGNvbXBwdHI7CiAgICAgY29tcHB0ci0+ZGNfdGJsX25vID0gKGMgPj4gNCkgJiAxNTsKICAgICBjb21wcHRyLT5hY190Ymxfbm8gPSAoYyAgICAgKSAmIDE1OwotICAgIAorCiAgICAgVFJBQ0VNUzMoY2luZm8sIDEsIEpUUkNfU09TX0NPTVBPTkVOVCwgY2MsCi0JICAgICBjb21wcHRyLT5kY190Ymxfbm8sIGNvbXBwdHItPmFjX3RibF9ubyk7CisgICAgICAgICAgICAgY29tcHB0ci0+ZGNfdGJsX25vLCBjb21wcHRyLT5hY190Ymxfbm8pOwogCiAgICAgLyogVGhpcyBDU2kgKGNjKSBzaG91bGQgZGlmZmVyIGZyb20gdGhlIHByZXZpb3VzIENTaSAqLwogICAgIGZvciAocGkgPSAwOyBwaSA8IGk7IHBpKyspIHsKQEAgLTM2Nyw3ICszNjcsNyBAQAogICBjaW5mby0+QWwgPSAoYyAgICAgKSAmIDE1OwogCiAgIFRSQUNFTVM0KGNpbmZvLCAxLCBKVFJDX1NPU19QQVJBTVMsIGNpbmZvLT5TcywgY2luZm8tPlNlLAotCSAgIGNpbmZvLT5BaCwgY2luZm8tPkFsKTsKKyAgICAgICAgICAgY2luZm8tPkFoLCBjaW5mby0+QWwpOwogCiAgIC8qIFByZXBhcmUgdG8gc2NhbiBkYXRhICYgcmVzdGFydCBtYXJrZXJzICovCiAgIGNpbmZvLT5tYXJrZXItPm5leHRfcmVzdGFydF9udW0gPSAwOwpAQCAtMzkyLDcgKzM5Miw3IEBACiAKICAgSU5QVVRfMkJZVEVTKGNpbmZvLCBsZW5ndGgsIHJldHVybiBGQUxTRSk7CiAgIGxlbmd0aCAtPSAyOwotICAKKwogICB3aGlsZSAobGVuZ3RoID4gMCkgewogICAgIElOUFVUX0JZVEUoY2luZm8sIGluZGV4LCByZXR1cm4gRkFMU0UpOwogICAgIElOUFVUX0JZVEUoY2luZm8sIHZhbCwgcmV0dXJuIEZBTFNFKTsKQEAgLTQwNiwxMSArNDA2LDExIEBACiAKICAgICBpZiAoaW5kZXggPj0gTlVNX0FSSVRIX1RCTFMpIHsgLyogZGVmaW5lIEFDIHRhYmxlICovCiAgICAgICBjaW5mby0+YXJpdGhfYWNfS1tpbmRleC1OVU1fQVJJVEhfVEJMU10gPSAoVUlOVDgpIHZhbDsKLSAgICB9IGVsc2UgewkJCS8qIGRlZmluZSBEQyB0YWJsZSAqLworICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAvKiBkZWZpbmUgREMgdGFibGUgKi8KICAgICAgIGNpbmZvLT5hcml0aF9kY19MW2luZGV4XSA9IChVSU5UOCkgKHZhbCAmIDB4MEYpOwogICAgICAgY2luZm8tPmFyaXRoX2RjX1VbaW5kZXhdID0gKFVJTlQ4KSAodmFsID4+IDQpOwogICAgICAgaWYgKGNpbmZvLT5hcml0aF9kY19MW2luZGV4XSA+IGNpbmZvLT5hcml0aF9kY19VW2luZGV4XSkKLQlFUlJFWElUMShjaW5mbywgSkVSUl9EQUNfVkFMVUUsIHZhbCk7CisgICAgICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0RBQ19WQUxVRSwgdmFsKTsKICAgICB9CiAgIH0KIApAQCAtNDQxLDEyICs0NDEsMTIgQEAKIAogICBJTlBVVF8yQllURVMoY2luZm8sIGxlbmd0aCwgcmV0dXJuIEZBTFNFKTsKICAgbGVuZ3RoIC09IDI7Ci0gIAorCiAgIHdoaWxlIChsZW5ndGggPiAxNikgewogICAgIElOUFVUX0JZVEUoY2luZm8sIGluZGV4LCByZXR1cm4gRkFMU0UpOwogCiAgICAgVFJBQ0VNUzEoY2luZm8sIDEsIEpUUkNfREhULCBpbmRleCk7Ci0gICAgICAKKwogICAgIGJpdHNbMF0gPSAwOwogICAgIGNvdW50ID0gMDsKICAgICBmb3IgKGkgPSAxOyBpIDw9IDE2OyBpKyspIHsKQEAgLTQ1NywxMSArNDU3LDExIEBACiAgICAgbGVuZ3RoIC09IDEgKyAxNjsKIAogICAgIFRSQUNFTVM4KGNpbmZvLCAyLCBKVFJDX0hVRkZCSVRTLAotCSAgICAgYml0c1sxXSwgYml0c1syXSwgYml0c1szXSwgYml0c1s0XSwKLQkgICAgIGJpdHNbNV0sIGJpdHNbNl0sIGJpdHNbN10sIGJpdHNbOF0pOworICAgICAgICAgICAgIGJpdHNbMV0sIGJpdHNbMl0sIGJpdHNbM10sIGJpdHNbNF0sCisgICAgICAgICAgICAgYml0c1s1XSwgYml0c1s2XSwgYml0c1s3XSwgYml0c1s4XSk7CiAgICAgVFJBQ0VNUzgoY2luZm8sIDIsIEpUUkNfSFVGRkJJVFMsCi0JICAgICBiaXRzWzldLCBiaXRzWzEwXSwgYml0c1sxMV0sIGJpdHNbMTJdLAotCSAgICAgYml0c1sxM10sIGJpdHNbMTRdLCBiaXRzWzE1XSwgYml0c1sxNl0pOworICAgICAgICAgICAgIGJpdHNbOV0sIGJpdHNbMTBdLCBiaXRzWzExXSwgYml0c1sxMl0sCisgICAgICAgICAgICAgYml0c1sxM10sIGJpdHNbMTRdLCBiaXRzWzE1XSwgYml0c1sxNl0pOwogCiAgICAgLyogSGVyZSB3ZSBqdXN0IGRvIG1pbmltYWwgdmFsaWRhdGlvbiBvZiB0aGUgY291bnRzIHRvIGF2b2lkIHdhbGtpbmcKICAgICAgKiBvZmYgdGhlIGVuZCBvZiBvdXIgdGFibGUgc3BhY2UuICBqZGh1ZmYuYyB3aWxsIGNoZWNrIG1vcmUgY2FyZWZ1bGx5LgpAQCAtNDc2LDE5ICs0NzYsMjAgQEAKIAogICAgIGxlbmd0aCAtPSBjb3VudDsKIAotICAgIGlmIChpbmRleCAmIDB4MTApIHsJCS8qIEFDIHRhYmxlIGRlZmluaXRpb24gKi8KKyAgICBpZiAoaW5kZXggJiAweDEwKSB7ICAgICAgICAgLyogQUMgdGFibGUgZGVmaW5pdGlvbiAqLwogICAgICAgaW5kZXggLT0gMHgxMDsKKyAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gTlVNX0hVRkZfVEJMUykKKyAgICAgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfREhUX0lOREVYLCBpbmRleCk7CiAgICAgICBodGJscHRyID0gJmNpbmZvLT5hY19odWZmX3RibF9wdHJzW2luZGV4XTsKLSAgICB9IGVsc2UgewkJCS8qIERDIHRhYmxlIGRlZmluaXRpb24gKi8KKyAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgLyogREMgdGFibGUgZGVmaW5pdGlvbiAqLworICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBOVU1fSFVGRl9UQkxTKQorICAgICAgICBFUlJFWElUMShjaW5mbywgSkVSUl9ESFRfSU5ERVgsIGluZGV4KTsKICAgICAgIGh0YmxwdHIgPSAmY2luZm8tPmRjX2h1ZmZfdGJsX3B0cnNbaW5kZXhdOwogICAgIH0KIAotICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gTlVNX0hVRkZfVEJMUykKLSAgICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0RIVF9JTkRFWCwgaW5kZXgpOwotCiAgICAgaWYgKCpodGJscHRyID09IE5VTEwpCiAgICAgICAqaHRibHB0ciA9IGpwZWdfYWxsb2NfaHVmZl90YWJsZSgoal9jb21tb25fcHRyKSBjaW5mbyk7Ci0gIAorCiAgICAgTUVNQ09QWSgoKmh0YmxwdHIpLT5iaXRzLCBiaXRzLCBTSVpFT0YoKCpodGJscHRyKS0+Yml0cykpOwogICAgIE1FTUNPUFkoKCpodGJscHRyKS0+aHVmZnZhbCwgaHVmZnZhbCwgU0laRU9GKCgqaHRibHB0ciktPmh1ZmZ2YWwpKTsKICAgfQpAQCAtNTIzLDI3ICs1MjQsMjcgQEAKIAogICAgIGlmIChuID49IE5VTV9RVUFOVF9UQkxTKQogICAgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfRFFUX0lOREVYLCBuKTsKLSAgICAgIAorCiAgICAgaWYgKGNpbmZvLT5xdWFudF90YmxfcHRyc1tuXSA9PSBOVUxMKQogICAgICAgY2luZm8tPnF1YW50X3RibF9wdHJzW25dID0ganBlZ19hbGxvY19xdWFudF90YWJsZSgoal9jb21tb25fcHRyKSBjaW5mbyk7CiAgICAgcXVhbnRfcHRyID0gY2luZm8tPnF1YW50X3RibF9wdHJzW25dOwogCiAgICAgZm9yIChpID0gMDsgaSA8IERDVFNJWkUyOyBpKyspIHsKICAgICAgIGlmIChwcmVjKQotCUlOUFVUXzJCWVRFUyhjaW5mbywgdG1wLCByZXR1cm4gRkFMU0UpOworICAgICAgICBJTlBVVF8yQllURVMoY2luZm8sIHRtcCwgcmV0dXJuIEZBTFNFKTsKICAgICAgIGVsc2UKLQlJTlBVVF9CWVRFKGNpbmZvLCB0bXAsIHJldHVybiBGQUxTRSk7CisgICAgICAgIElOUFVUX0JZVEUoY2luZm8sIHRtcCwgcmV0dXJuIEZBTFNFKTsKICAgICAgIC8qIFdlIGNvbnZlcnQgdGhlIHppZ3phZy1vcmRlciB0YWJsZSB0byBuYXR1cmFsIGFycmF5IG9yZGVyLiAqLwogICAgICAgcXVhbnRfcHRyLT5xdWFudHZhbFtqcGVnX25hdHVyYWxfb3JkZXJbaV1dID0gKFVJTlQxNikgdG1wOwogICAgIH0KIAogICAgIGlmIChjaW5mby0+ZXJyLT50cmFjZV9sZXZlbCA+PSAyKSB7CiAgICAgICBmb3IgKGkgPSAwOyBpIDwgRENUU0laRTI7IGkgKz0gOCkgewotCVRSQUNFTVM4KGNpbmZvLCAyLCBKVFJDX1FVQU5UVkFMUywKLQkJIHF1YW50X3B0ci0+cXVhbnR2YWxbaV0sICAgcXVhbnRfcHRyLT5xdWFudHZhbFtpKzFdLAotCQkgcXVhbnRfcHRyLT5xdWFudHZhbFtpKzJdLCBxdWFudF9wdHItPnF1YW50dmFsW2krM10sCi0JCSBxdWFudF9wdHItPnF1YW50dmFsW2krNF0sIHF1YW50X3B0ci0+cXVhbnR2YWxbaSs1XSwKLQkJIHF1YW50X3B0ci0+cXVhbnR2YWxbaSs2XSwgcXVhbnRfcHRyLT5xdWFudHZhbFtpKzddKTsKKyAgICAgICAgVFJBQ0VNUzgoY2luZm8sIDIsIEpUUkNfUVVBTlRWQUxTLAorICAgICAgICAgICAgICAgICBxdWFudF9wdHItPnF1YW50dmFsW2ldLCAgIHF1YW50X3B0ci0+cXVhbnR2YWxbaSsxXSwKKyAgICAgICAgICAgICAgICAgcXVhbnRfcHRyLT5xdWFudHZhbFtpKzJdLCBxdWFudF9wdHItPnF1YW50dmFsW2krM10sCisgICAgICAgICAgICAgICAgIHF1YW50X3B0ci0+cXVhbnR2YWxbaSs0XSwgcXVhbnRfcHRyLT5xdWFudHZhbFtpKzVdLAorICAgICAgICAgICAgICAgICBxdWFudF9wdHItPnF1YW50dmFsW2krNl0sIHF1YW50X3B0ci0+cXVhbnR2YWxbaSs3XSk7CiAgICAgICB9CiAgICAgfQogCkBAIC01NjgsNyArNTY5LDcgQEAKICAgSU5QVVRfVkFSUyhjaW5mbyk7CiAKICAgSU5QVVRfMkJZVEVTKGNpbmZvLCBsZW5ndGgsIHJldHVybiBGQUxTRSk7Ci0gIAorCiAgIGlmIChsZW5ndGggIT0gNCkKICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9MRU5HVEgpOwogCkBAIC01OTAsMTQgKzU5MSwxNCBAQAogICogSkZJRiBhbmQgQWRvYmUgbWFya2VycywgcmVzcGVjdGl2ZWx5LgogICovCiAKLSNkZWZpbmUgQVBQMF9EQVRBX0xFTgkxNAkvKiBMZW5ndGggb2YgaW50ZXJlc3RpbmcgZGF0YSBpbiBBUFAwICovCi0jZGVmaW5lIEFQUDE0X0RBVEFfTEVOCTEyCS8qIExlbmd0aCBvZiBpbnRlcmVzdGluZyBkYXRhIGluIEFQUDE0ICovCi0jZGVmaW5lIEFQUE5fREFUQV9MRU4JMTQJLyogTXVzdCBiZSB0aGUgbGFyZ2VzdCBvZiB0aGUgYWJvdmUhISAqLworI2RlZmluZSBBUFAwX0RBVEFfTEVOICAgMTQgICAgICAvKiBMZW5ndGggb2YgaW50ZXJlc3RpbmcgZGF0YSBpbiBBUFAwICovCisjZGVmaW5lIEFQUDE0X0RBVEFfTEVOICAxMiAgICAgIC8qIExlbmd0aCBvZiBpbnRlcmVzdGluZyBkYXRhIGluIEFQUDE0ICovCisjZGVmaW5lIEFQUE5fREFUQV9MRU4gICAxNCAgICAgIC8qIE11c3QgYmUgdGhlIGxhcmdlc3Qgb2YgdGhlIGFib3ZlISEgKi8KIAogCiBMT0NBTCh2b2lkKQogZXhhbWluZV9hcHAwIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKT0NURVQgRkFSICogZGF0YSwKLQkgICAgICB1bnNpZ25lZCBpbnQgZGF0YWxlbiwgSU5UMzIgcmVtYWluaW5nKQorICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZGF0YWxlbiwgSU5UMzIgcmVtYWluaW5nKQogLyogRXhhbWluZSBmaXJzdCBmZXcgYnl0ZXMgZnJvbSBhbiBBUFAwLgogICogVGFrZSBhcHByb3ByaWF0ZSBhY3Rpb24gaWYgaXQgaXMgYSBKRklGIG1hcmtlci4KICAqIGRhdGFsZW4gaXMgIyBvZiBieXRlcyBhdCBkYXRhW10sIHJlbWFpbmluZyBpcyBsZW5ndGggb2YgcmVzdCBvZiBtYXJrZXIgZGF0YS4KQEAgLTYyNiwxOCArNjI3LDE4IEBACiAgICAgICovCiAgICAgaWYgKGNpbmZvLT5KRklGX21ham9yX3ZlcnNpb24gIT0gMSkKICAgICAgIFdBUk5NUzIoY2luZm8sIEpXUk5fSkZJRl9NQUpPUiwKLQkgICAgICBjaW5mby0+SkZJRl9tYWpvcl92ZXJzaW9uLCBjaW5mby0+SkZJRl9taW5vcl92ZXJzaW9uKTsKKyAgICAgICAgICAgICAgY2luZm8tPkpGSUZfbWFqb3JfdmVyc2lvbiwgY2luZm8tPkpGSUZfbWlub3JfdmVyc2lvbik7CiAgICAgLyogR2VuZXJhdGUgdHJhY2UgbWVzc2FnZXMgKi8KICAgICBUUkFDRU1TNShjaW5mbywgMSwgSlRSQ19KRklGLAotCSAgICAgY2luZm8tPkpGSUZfbWFqb3JfdmVyc2lvbiwgY2luZm8tPkpGSUZfbWlub3JfdmVyc2lvbiwKLQkgICAgIGNpbmZvLT5YX2RlbnNpdHksIGNpbmZvLT5ZX2RlbnNpdHksIGNpbmZvLT5kZW5zaXR5X3VuaXQpOworICAgICAgICAgICAgIGNpbmZvLT5KRklGX21ham9yX3ZlcnNpb24sIGNpbmZvLT5KRklGX21pbm9yX3ZlcnNpb24sCisgICAgICAgICAgICAgY2luZm8tPlhfZGVuc2l0eSwgY2luZm8tPllfZGVuc2l0eSwgY2luZm8tPmRlbnNpdHlfdW5pdCk7CiAgICAgLyogVmFsaWRhdGUgdGh1bWJuYWlsIGRpbWVuc2lvbnMgYW5kIGlzc3VlIGFwcHJvcHJpYXRlIG1lc3NhZ2VzICovCiAgICAgaWYgKEdFVEpPQ1RFVChkYXRhWzEyXSkgfCBHRVRKT0NURVQoZGF0YVsxM10pKQogICAgICAgVFJBQ0VNUzIoY2luZm8sIDEsIEpUUkNfSkZJRl9USFVNQk5BSUwsCi0JICAgICAgIEdFVEpPQ1RFVChkYXRhWzEyXSksIEdFVEpPQ1RFVChkYXRhWzEzXSkpOworICAgICAgICAgICAgICAgR0VUSk9DVEVUKGRhdGFbMTJdKSwgR0VUSk9DVEVUKGRhdGFbMTNdKSk7CiAgICAgdG90YWxsZW4gLT0gQVBQMF9EQVRBX0xFTjsKICAgICBpZiAodG90YWxsZW4gIT0KLQkoKElOVDMyKUdFVEpPQ1RFVChkYXRhWzEyXSkgKiAoSU5UMzIpR0VUSk9DVEVUKGRhdGFbMTNdKSAqIChJTlQzMikgMykpCisgICAgICAgICgoSU5UMzIpR0VUSk9DVEVUKGRhdGFbMTJdKSAqIChJTlQzMilHRVRKT0NURVQoZGF0YVsxM10pICogKElOVDMyKSAzKSkKICAgICAgIFRSQUNFTVMxKGNpbmZvLCAxLCBKVFJDX0pGSUZfQkFEVEhVTUJOQUlMU0laRSwgKGludCkgdG90YWxsZW4pOwogICB9IGVsc2UgaWYgKGRhdGFsZW4gPj0gNiAmJgogICAgICAgR0VUSk9DVEVUKGRhdGFbMF0pID09IDB4NEEgJiYKQEAgLTY2MSw3ICs2NjIsNyBAQAogICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgIFRSQUNFTVMyKGNpbmZvLCAxLCBKVFJDX0pGSUZfRVhURU5TSU9OLAotCSAgICAgICBHRVRKT0NURVQoZGF0YVs1XSksIChpbnQpIHRvdGFsbGVuKTsKKyAgICAgICAgICAgICAgIEdFVEpPQ1RFVChkYXRhWzVdKSwgKGludCkgdG90YWxsZW4pOwogICAgICAgYnJlYWs7CiAgICAgfQogICB9IGVsc2UgewpAQCAtNjczLDcgKzY3NCw3IEBACiAKIExPQ0FMKHZvaWQpCiBleGFtaW5lX2FwcDE0IChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKT0NURVQgRkFSICogZGF0YSwKLQkgICAgICAgdW5zaWduZWQgaW50IGRhdGFsZW4sIElOVDMyIHJlbWFpbmluZykKKyAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBkYXRhbGVuLCBJTlQzMiByZW1haW5pbmcpCiAvKiBFeGFtaW5lIGZpcnN0IGZldyBieXRlcyBmcm9tIGFuIEFQUDE0LgogICogVGFrZSBhcHByb3ByaWF0ZSBhY3Rpb24gaWYgaXQgaXMgYW4gQWRvYmUgbWFya2VyLgogICogZGF0YWxlbiBpcyAjIG9mIGJ5dGVzIGF0IGRhdGFbXSwgcmVtYWluaW5nIGlzIGxlbmd0aCBvZiByZXN0IG9mIG1hcmtlciBkYXRhLgpAQCAtNzY1LDE5ICs3NjYsMTkgQEAKICAgICAvKiBiZWdpbiByZWFkaW5nIGEgbWFya2VyICovCiAgICAgSU5QVVRfMkJZVEVTKGNpbmZvLCBsZW5ndGgsIHJldHVybiBGQUxTRSk7CiAgICAgbGVuZ3RoIC09IDI7Ci0gICAgaWYgKGxlbmd0aCA+PSAwKSB7CQkvKiB3YXRjaCBvdXQgZm9yIGJvZ3VzIGxlbmd0aCB3b3JkICovCisgICAgaWYgKGxlbmd0aCA+PSAwKSB7ICAgICAgICAgIC8qIHdhdGNoIG91dCBmb3IgYm9ndXMgbGVuZ3RoIHdvcmQgKi8KICAgICAgIC8qIGZpZ3VyZSBvdXQgaG93IG11Y2ggd2Ugd2FudCB0byBzYXZlICovCiAgICAgICB1bnNpZ25lZCBpbnQgbGltaXQ7CiAgICAgICBpZiAoY2luZm8tPnVucmVhZF9tYXJrZXIgPT0gKGludCkgTV9DT00pCi0JbGltaXQgPSBtYXJrZXItPmxlbmd0aF9saW1pdF9DT007CisgICAgICAgIGxpbWl0ID0gbWFya2VyLT5sZW5ndGhfbGltaXRfQ09NOwogICAgICAgZWxzZQotCWxpbWl0ID0gbWFya2VyLT5sZW5ndGhfbGltaXRfQVBQbltjaW5mby0+dW5yZWFkX21hcmtlciAtIChpbnQpIE1fQVBQMF07CisgICAgICAgIGxpbWl0ID0gbWFya2VyLT5sZW5ndGhfbGltaXRfQVBQbltjaW5mby0+dW5yZWFkX21hcmtlciAtIChpbnQpIE1fQVBQMF07CiAgICAgICBpZiAoKHVuc2lnbmVkIGludCkgbGVuZ3RoIDwgbGltaXQpCi0JbGltaXQgPSAodW5zaWduZWQgaW50KSBsZW5ndGg7CisgICAgICAgIGxpbWl0ID0gKHVuc2lnbmVkIGludCkgbGVuZ3RoOwogICAgICAgLyogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgdGhlIG1hcmtlciBpdGVtICovCiAgICAgICBjdXJfbWFya2VyID0gKGpwZWdfc2F2ZWRfbWFya2VyX3B0cikKLQkoKmNpbmZvLT5tZW0tPmFsbG9jX2xhcmdlKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAotCQkJCSAgICBTSVpFT0Yoc3RydWN0IGpwZWdfbWFya2VyX3N0cnVjdCkgKyBsaW1pdCk7CisgICAgICAgICgqY2luZm8tPm1lbS0+YWxsb2NfbGFyZ2UpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSVpFT0Yoc3RydWN0IGpwZWdfbWFya2VyX3N0cnVjdCkgKyBsaW1pdCk7CiAgICAgICBjdXJfbWFya2VyLT5uZXh0ID0gTlVMTDsKICAgICAgIGN1cl9tYXJrZXItPm1hcmtlciA9IChVSU5UOCkgY2luZm8tPnVucmVhZF9tYXJrZXI7CiAgICAgICBjdXJfbWFya2VyLT5vcmlnaW5hbF9sZW5ndGggPSAodW5zaWduZWQgaW50KSBsZW5ndGg7CkBAIC04MDEsNyArODAyLDcgQEAKICAgfQogCiAgIHdoaWxlIChieXRlc19yZWFkIDwgZGF0YV9sZW5ndGgpIHsKLSAgICBJTlBVVF9TWU5DKGNpbmZvKTsJCS8qIG1vdmUgdGhlIHJlc3RhcnQgcG9pbnQgdG8gaGVyZSAqLworICAgIElOUFVUX1NZTkMoY2luZm8pOyAgICAgICAgICAvKiBtb3ZlIHRoZSByZXN0YXJ0IHBvaW50IHRvIGhlcmUgKi8KICAgICBtYXJrZXItPmJ5dGVzX3JlYWQgPSBieXRlc19yZWFkOwogICAgIC8qIElmIHRoZXJlJ3Mgbm90IGF0IGxlYXN0IG9uZSBieXRlIGluIGJ1ZmZlciwgc3VzcGVuZCAqLwogICAgIE1BS0VfQllURV9BVkFJTChjaW5mbywgcmV0dXJuIEZBTFNFKTsKQEAgLTgxNCwxNCArODE1LDE0IEBACiAgIH0KIAogICAvKiBEb25lIHJlYWRpbmcgd2hhdCB3ZSB3YW50IHRvIHJlYWQgKi8KLSAgaWYgKGN1cl9tYXJrZXIgIT0gTlVMTCkgewkvKiB3aWxsIGJlIE5VTEwgaWYgYm9ndXMgbGVuZ3RoIHdvcmQgKi8KKyAgaWYgKGN1cl9tYXJrZXIgIT0gTlVMTCkgeyAgICAgLyogd2lsbCBiZSBOVUxMIGlmIGJvZ3VzIGxlbmd0aCB3b3JkICovCiAgICAgLyogQWRkIG5ldyBtYXJrZXIgdG8gZW5kIG9mIGxpc3QgKi8KICAgICBpZiAoY2luZm8tPm1hcmtlcl9saXN0ID09IE5VTEwpIHsKICAgICAgIGNpbmZvLT5tYXJrZXJfbGlzdCA9IGN1cl9tYXJrZXI7CiAgICAgfSBlbHNlIHsKICAgICAgIGpwZWdfc2F2ZWRfbWFya2VyX3B0ciBwcmV2ID0gY2luZm8tPm1hcmtlcl9saXN0OwogICAgICAgd2hpbGUgKHByZXYtPm5leHQgIT0gTlVMTCkKLQlwcmV2ID0gcHJldi0+bmV4dDsKKyAgICAgICAgcHJldiA9IHByZXYtPm5leHQ7CiAgICAgICBwcmV2LT5uZXh0ID0gY3VyX21hcmtlcjsKICAgICB9CiAgICAgLyogUmVzZXQgcG9pbnRlciAmIGNhbGMgcmVtYWluaW5nIGRhdGEgbGVuZ3RoICovCkBAIC04NDEsMTIgKzg0MiwxMiBAQAogICAgIGJyZWFrOwogICBkZWZhdWx0OgogICAgIFRSQUNFTVMyKGNpbmZvLCAxLCBKVFJDX01JU0NfTUFSS0VSLCBjaW5mby0+dW5yZWFkX21hcmtlciwKLQkgICAgIChpbnQpIChkYXRhX2xlbmd0aCArIGxlbmd0aCkpOworICAgICAgICAgICAgIChpbnQpIChkYXRhX2xlbmd0aCArIGxlbmd0aCkpOwogICAgIGJyZWFrOwogICB9CiAKICAgLyogc2tpcCBhbnkgcmVtYWluaW5nIGRhdGEgLS0gY291bGQgYmUgbG90cyAqLwotICBJTlBVVF9TWU5DKGNpbmZvKTsJCS8qIGRvIGJlZm9yZSBza2lwX2lucHV0X2RhdGEgKi8KKyAgSU5QVVRfU1lOQyhjaW5mbyk7ICAgICAgICAgICAgLyogZG8gYmVmb3JlIHNraXBfaW5wdXRfZGF0YSAqLwogICBpZiAobGVuZ3RoID4gMCkKICAgICAoKmNpbmZvLT5zcmMtPnNraXBfaW5wdXRfZGF0YSkgKGNpbmZvLCAobG9uZykgbGVuZ3RoKTsKIApAQCAtODY1LDEwICs4NjYsMTAgQEAKIAogICBJTlBVVF8yQllURVMoY2luZm8sIGxlbmd0aCwgcmV0dXJuIEZBTFNFKTsKICAgbGVuZ3RoIC09IDI7Ci0gIAorCiAgIFRSQUNFTVMyKGNpbmZvLCAxLCBKVFJDX01JU0NfTUFSS0VSLCBjaW5mby0+dW5yZWFkX21hcmtlciwgKGludCkgbGVuZ3RoKTsKIAotICBJTlBVVF9TWU5DKGNpbmZvKTsJCS8qIGRvIGJlZm9yZSBza2lwX2lucHV0X2RhdGEgKi8KKyAgSU5QVVRfU1lOQyhjaW5mbyk7ICAgICAgICAgICAgLyogZG8gYmVmb3JlIHNraXBfaW5wdXRfZGF0YSAqLwogICBpZiAobGVuZ3RoID4gMCkKICAgICAoKmNpbmZvLT5zcmMtPnNraXBfaW5wdXRfZGF0YSkgKGNpbmZvLCAobG9uZykgbGVuZ3RoKTsKIApAQCAtOTEyLDcgKzkxMyw3IEBACiAgICAgICBJTlBVVF9CWVRFKGNpbmZvLCBjLCByZXR1cm4gRkFMU0UpOwogICAgIH0gd2hpbGUgKGMgPT0gMHhGRik7CiAgICAgaWYgKGMgIT0gMCkKLSAgICAgIGJyZWFrOwkJCS8qIGZvdW5kIGEgdmFsaWQgbWFya2VyLCBleGl0IGxvb3AgKi8KKyAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgLyogZm91bmQgYSB2YWxpZCBtYXJrZXIsIGV4aXQgbG9vcCAqLwogICAgIC8qIFJlYWNoIGhlcmUgaWYgd2UgZm91bmQgYSBzdHVmZmVkLXplcm8gZGF0YSBzZXF1ZW5jZSAoRkYvMDApLgogICAgICAqIERpc2NhcmQgaXQgYW5kIGxvb3AgYmFjayB0byB0cnkgYWdhaW4uCiAgICAgICovCkBAIC05NzIsMTEgKzk3MywxMSBAQAogICAgIC8qIE5COiBmaXJzdF9tYXJrZXIoKSBlbmZvcmNlcyB0aGUgcmVxdWlyZW1lbnQgdGhhdCBTT0kgYXBwZWFyIGZpcnN0LiAqLwogICAgIGlmIChjaW5mby0+dW5yZWFkX21hcmtlciA9PSAwKSB7CiAgICAgICBpZiAoISBjaW5mby0+bWFya2VyLT5zYXdfU09JKSB7Ci0JaWYgKCEgZmlyc3RfbWFya2VyKGNpbmZvKSkKLQkgIHJldHVybiBKUEVHX1NVU1BFTkRFRDsKKyAgICAgICAgaWYgKCEgZmlyc3RfbWFya2VyKGNpbmZvKSkKKyAgICAgICAgICByZXR1cm4gSlBFR19TVVNQRU5ERUQ7CiAgICAgICB9IGVsc2UgewotCWlmICghIG5leHRfbWFya2VyKGNpbmZvKSkKLQkgIHJldHVybiBKUEVHX1NVU1BFTkRFRDsKKyAgICAgICAgaWYgKCEgbmV4dF9tYXJrZXIoY2luZm8pKQorICAgICAgICAgIHJldHVybiBKUEVHX1NVU1BFTkRFRDsKICAgICAgIH0KICAgICB9CiAgICAgLyogQXQgdGhpcyBwb2ludCBjaW5mby0+dW5yZWFkX21hcmtlciBjb250YWlucyB0aGUgbWFya2VyIGNvZGUgYW5kIHRoZQpAQCAtOTg2LDc0ICs5ODcsNzQgQEAKICAgICBzd2l0Y2ggKGNpbmZvLT51bnJlYWRfbWFya2VyKSB7CiAgICAgY2FzZSBNX1NPSToKICAgICAgIGlmICghIGdldF9zb2koY2luZm8pKQotCXJldHVybiBKUEVHX1NVU1BFTkRFRDsKKyAgICAgICAgcmV0dXJuIEpQRUdfU1VTUEVOREVEOwogICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIE1fU09GMDoJCS8qIEJhc2VsaW5lICovCi0gICAgY2FzZSBNX1NPRjE6CQkvKiBFeHRlbmRlZCBzZXF1ZW50aWFsLCBIdWZmbWFuICovCisgICAgY2FzZSBNX1NPRjA6ICAgICAgICAgICAgICAgIC8qIEJhc2VsaW5lICovCisgICAgY2FzZSBNX1NPRjE6ICAgICAgICAgICAgICAgIC8qIEV4dGVuZGVkIHNlcXVlbnRpYWwsIEh1ZmZtYW4gKi8KICAgICAgIGlmICghIGdldF9zb2YoY2luZm8sIEZBTFNFLCBGQUxTRSkpCi0JcmV0dXJuIEpQRUdfU1VTUEVOREVEOworICAgICAgICByZXR1cm4gSlBFR19TVVNQRU5ERUQ7CiAgICAgICBicmVhazsKIAotICAgIGNhc2UgTV9TT0YyOgkJLyogUHJvZ3Jlc3NpdmUsIEh1ZmZtYW4gKi8KKyAgICBjYXNlIE1fU09GMjogICAgICAgICAgICAgICAgLyogUHJvZ3Jlc3NpdmUsIEh1ZmZtYW4gKi8KICAgICAgIGlmICghIGdldF9zb2YoY2luZm8sIFRSVUUsIEZBTFNFKSkKLQlyZXR1cm4gSlBFR19TVVNQRU5ERUQ7CisgICAgICAgIHJldHVybiBKUEVHX1NVU1BFTkRFRDsKICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBNX1NPRjk6CQkvKiBFeHRlbmRlZCBzZXF1ZW50aWFsLCBhcml0aG1ldGljICovCisgICAgY2FzZSBNX1NPRjk6ICAgICAgICAgICAgICAgIC8qIEV4dGVuZGVkIHNlcXVlbnRpYWwsIGFyaXRobWV0aWMgKi8KICAgICAgIGlmICghIGdldF9zb2YoY2luZm8sIEZBTFNFLCBUUlVFKSkKLQlyZXR1cm4gSlBFR19TVVNQRU5ERUQ7CisgICAgICAgIHJldHVybiBKUEVHX1NVU1BFTkRFRDsKICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBNX1NPRjEwOgkJLyogUHJvZ3Jlc3NpdmUsIGFyaXRobWV0aWMgKi8KKyAgICBjYXNlIE1fU09GMTA6ICAgICAgICAgICAgICAgLyogUHJvZ3Jlc3NpdmUsIGFyaXRobWV0aWMgKi8KICAgICAgIGlmICghIGdldF9zb2YoY2luZm8sIFRSVUUsIFRSVUUpKQotCXJldHVybiBKUEVHX1NVU1BFTkRFRDsKKyAgICAgICAgcmV0dXJuIEpQRUdfU1VTUEVOREVEOwogICAgICAgYnJlYWs7CiAKICAgICAvKiBDdXJyZW50bHkgdW5zdXBwb3J0ZWQgU09GbiB0eXBlcyAqLwotICAgIGNhc2UgTV9TT0YzOgkJLyogTG9zc2xlc3MsIEh1ZmZtYW4gKi8KLSAgICBjYXNlIE1fU09GNToJCS8qIERpZmZlcmVudGlhbCBzZXF1ZW50aWFsLCBIdWZmbWFuICovCi0gICAgY2FzZSBNX1NPRjY6CQkvKiBEaWZmZXJlbnRpYWwgcHJvZ3Jlc3NpdmUsIEh1ZmZtYW4gKi8KLSAgICBjYXNlIE1fU09GNzoJCS8qIERpZmZlcmVudGlhbCBsb3NzbGVzcywgSHVmZm1hbiAqLwotICAgIGNhc2UgTV9KUEc6CQkJLyogUmVzZXJ2ZWQgZm9yIEpQRUcgZXh0ZW5zaW9ucyAqLwotICAgIGNhc2UgTV9TT0YxMToJCS8qIExvc3NsZXNzLCBhcml0aG1ldGljICovCi0gICAgY2FzZSBNX1NPRjEzOgkJLyogRGlmZmVyZW50aWFsIHNlcXVlbnRpYWwsIGFyaXRobWV0aWMgKi8KLSAgICBjYXNlIE1fU09GMTQ6CQkvKiBEaWZmZXJlbnRpYWwgcHJvZ3Jlc3NpdmUsIGFyaXRobWV0aWMgKi8KLSAgICBjYXNlIE1fU09GMTU6CQkvKiBEaWZmZXJlbnRpYWwgbG9zc2xlc3MsIGFyaXRobWV0aWMgKi8KKyAgICBjYXNlIE1fU09GMzogICAgICAgICAgICAgICAgLyogTG9zc2xlc3MsIEh1ZmZtYW4gKi8KKyAgICBjYXNlIE1fU09GNTogICAgICAgICAgICAgICAgLyogRGlmZmVyZW50aWFsIHNlcXVlbnRpYWwsIEh1ZmZtYW4gKi8KKyAgICBjYXNlIE1fU09GNjogICAgICAgICAgICAgICAgLyogRGlmZmVyZW50aWFsIHByb2dyZXNzaXZlLCBIdWZmbWFuICovCisgICAgY2FzZSBNX1NPRjc6ICAgICAgICAgICAgICAgIC8qIERpZmZlcmVudGlhbCBsb3NzbGVzcywgSHVmZm1hbiAqLworICAgIGNhc2UgTV9KUEc6ICAgICAgICAgICAgICAgICAvKiBSZXNlcnZlZCBmb3IgSlBFRyBleHRlbnNpb25zICovCisgICAgY2FzZSBNX1NPRjExOiAgICAgICAgICAgICAgIC8qIExvc3NsZXNzLCBhcml0aG1ldGljICovCisgICAgY2FzZSBNX1NPRjEzOiAgICAgICAgICAgICAgIC8qIERpZmZlcmVudGlhbCBzZXF1ZW50aWFsLCBhcml0aG1ldGljICovCisgICAgY2FzZSBNX1NPRjE0OiAgICAgICAgICAgICAgIC8qIERpZmZlcmVudGlhbCBwcm9ncmVzc2l2ZSwgYXJpdGhtZXRpYyAqLworICAgIGNhc2UgTV9TT0YxNTogICAgICAgICAgICAgICAvKiBEaWZmZXJlbnRpYWwgbG9zc2xlc3MsIGFyaXRobWV0aWMgKi8KICAgICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX1NPRl9VTlNVUFBPUlRFRCwgY2luZm8tPnVucmVhZF9tYXJrZXIpOwogICAgICAgYnJlYWs7CiAKICAgICBjYXNlIE1fU09TOgogICAgICAgaWYgKCEgZ2V0X3NvcyhjaW5mbykpCi0JcmV0dXJuIEpQRUdfU1VTUEVOREVEOwotICAgICAgY2luZm8tPnVucmVhZF9tYXJrZXIgPSAwOwkvKiBwcm9jZXNzZWQgdGhlIG1hcmtlciAqLworICAgICAgICByZXR1cm4gSlBFR19TVVNQRU5ERUQ7CisgICAgICBjaW5mby0+dW5yZWFkX21hcmtlciA9IDA7IC8qIHByb2Nlc3NlZCB0aGUgbWFya2VyICovCiAgICAgICByZXR1cm4gSlBFR19SRUFDSEVEX1NPUzsKLSAgICAKKwogICAgIGNhc2UgTV9FT0k6CiAgICAgICBUUkFDRU1TKGNpbmZvLCAxLCBKVFJDX0VPSSk7Ci0gICAgICBjaW5mby0+dW5yZWFkX21hcmtlciA9IDA7CS8qIHByb2Nlc3NlZCB0aGUgbWFya2VyICovCisgICAgICBjaW5mby0+dW5yZWFkX21hcmtlciA9IDA7IC8qIHByb2Nlc3NlZCB0aGUgbWFya2VyICovCiAgICAgICByZXR1cm4gSlBFR19SRUFDSEVEX0VPSTsKLSAgICAgIAorCiAgICAgY2FzZSBNX0RBQzoKICAgICAgIGlmICghIGdldF9kYWMoY2luZm8pKQotCXJldHVybiBKUEVHX1NVU1BFTkRFRDsKKyAgICAgICAgcmV0dXJuIEpQRUdfU1VTUEVOREVEOwogICAgICAgYnJlYWs7Ci0gICAgICAKKwogICAgIGNhc2UgTV9ESFQ6CiAgICAgICBpZiAoISBnZXRfZGh0KGNpbmZvKSkKLQlyZXR1cm4gSlBFR19TVVNQRU5ERUQ7CisgICAgICAgIHJldHVybiBKUEVHX1NVU1BFTkRFRDsKICAgICAgIGJyZWFrOwotICAgICAgCisKICAgICBjYXNlIE1fRFFUOgogICAgICAgaWYgKCEgZ2V0X2RxdChjaW5mbykpCi0JcmV0dXJuIEpQRUdfU1VTUEVOREVEOworICAgICAgICByZXR1cm4gSlBFR19TVVNQRU5ERUQ7CiAgICAgICBicmVhazsKLSAgICAgIAorCiAgICAgY2FzZSBNX0RSSToKICAgICAgIGlmICghIGdldF9kcmkoY2luZm8pKQotCXJldHVybiBKUEVHX1NVU1BFTkRFRDsKKyAgICAgICAgcmV0dXJuIEpQRUdfU1VTUEVOREVEOwogICAgICAgYnJlYWs7Ci0gICAgICAKKwogICAgIGNhc2UgTV9BUFAwOgogICAgIGNhc2UgTV9BUFAxOgogICAgIGNhc2UgTV9BUFAyOgpAQCAtMTA3MSwxNiArMTA3MiwxNiBAQAogICAgIGNhc2UgTV9BUFAxNDoKICAgICBjYXNlIE1fQVBQMTU6CiAgICAgICBpZiAoISAoKigobXlfbWFya2VyX3B0cikgY2luZm8tPm1hcmtlciktPnByb2Nlc3NfQVBQblsKLQkJY2luZm8tPnVucmVhZF9tYXJrZXIgLSAoaW50KSBNX0FQUDBdKSAoY2luZm8pKQotCXJldHVybiBKUEVHX1NVU1BFTkRFRDsKLSAgICAgIGJyZWFrOwotICAgICAgCi0gICAgY2FzZSBNX0NPTToKLSAgICAgIGlmICghICgqKChteV9tYXJrZXJfcHRyKSBjaW5mby0+bWFya2VyKS0+cHJvY2Vzc19DT00pIChjaW5mbykpCi0JcmV0dXJuIEpQRUdfU1VTUEVOREVEOworICAgICAgICAgICAgICAgIGNpbmZvLT51bnJlYWRfbWFya2VyIC0gKGludCkgTV9BUFAwXSkgKGNpbmZvKSkKKyAgICAgICAgcmV0dXJuIEpQRUdfU1VTUEVOREVEOwogICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIE1fUlNUMDoJCS8qIHRoZXNlIGFyZSBhbGwgcGFyYW1ldGVybGVzcyAqLworICAgIGNhc2UgTV9DT006CisgICAgICBpZiAoISAoKigobXlfbWFya2VyX3B0cikgY2luZm8tPm1hcmtlciktPnByb2Nlc3NfQ09NKSAoY2luZm8pKQorICAgICAgICByZXR1cm4gSlBFR19TVVNQRU5ERUQ7CisgICAgICBicmVhazsKKworICAgIGNhc2UgTV9SU1QwOiAgICAgICAgICAgICAgICAvKiB0aGVzZSBhcmUgYWxsIHBhcmFtZXRlcmxlc3MgKi8KICAgICBjYXNlIE1fUlNUMToKICAgICBjYXNlIE1fUlNUMjoKICAgICBjYXNlIE1fUlNUMzoKQEAgLTEwOTIsMTIgKzEwOTMsMTIgQEAKICAgICAgIFRSQUNFTVMxKGNpbmZvLCAxLCBKVFJDX1BBUk1MRVNTX01BUktFUiwgY2luZm8tPnVucmVhZF9tYXJrZXIpOwogICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIE1fRE5MOgkJCS8qIElnbm9yZSBETkwgLi4uIHBlcmhhcHMgdGhlIHdyb25nIHRoaW5nICovCisgICAgY2FzZSBNX0ROTDogICAgICAgICAgICAgICAgIC8qIElnbm9yZSBETkwgLi4uIHBlcmhhcHMgdGhlIHdyb25nIHRoaW5nICovCiAgICAgICBpZiAoISBza2lwX3ZhcmlhYmxlKGNpbmZvKSkKLQlyZXR1cm4gSlBFR19TVVNQRU5ERUQ7CisgICAgICAgIHJldHVybiBKUEVHX1NVU1BFTkRFRDsKICAgICAgIGJyZWFrOwogCi0gICAgZGVmYXVsdDoJCQkvKiBtdXN0IGJlIERIUCwgRVhQLCBKUEduLCBvciBSRVNuICovCisgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgIC8qIG11c3QgYmUgREhQLCBFWFAsIEpQR24sIG9yIFJFU24gKi8KICAgICAgIC8qIEZvciBub3csIHdlIHRyZWF0IHRoZSByZXNlcnZlZCBtYXJrZXJzIGFzIGZhdGFsIGVycm9ycyBzaW5jZSB0aGV5IGFyZQogICAgICAgICogbGlrZWx5IHRvIGJlIHVzZWQgdG8gc2lnbmFsIGluY29tcGF0aWJsZSBKUEVHIFBhcnQgMyBleHRlbnNpb25zLgogICAgICAgICogT25jZSB0aGUgSlBFRyAzIHZlcnNpb24tbnVtYmVyIG1hcmtlciBpcyB3ZWxsIGRlZmluZWQsIHRoaXMgY29kZQpAQCAtMTE0Myw3ICsxMTQ0LDcgQEAKICAgICAvKiBVaC1vaCwgdGhlIHJlc3RhcnQgbWFya2VycyBoYXZlIGJlZW4gbWVzc2VkIHVwLiAqLwogICAgIC8qIExldCB0aGUgZGF0YSBzb3VyY2UgbWFuYWdlciBkZXRlcm1pbmUgaG93IHRvIHJlc3luYy4gKi8KICAgICBpZiAoISAoKmNpbmZvLT5zcmMtPnJlc3luY190b19yZXN0YXJ0KSAoY2luZm8sCi0JCQkJCSAgICBjaW5mby0+bWFya2VyLT5uZXh0X3Jlc3RhcnRfbnVtKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2luZm8tPm1hcmtlci0+bmV4dF9yZXN0YXJ0X251bSkpCiAgICAgICByZXR1cm4gRkFMU0U7CiAgIH0KIApAQCAtMTIwOCwyNSArMTIwOSwyNSBAQAogewogICBpbnQgbWFya2VyID0gY2luZm8tPnVucmVhZF9tYXJrZXI7CiAgIGludCBhY3Rpb24gPSAxOwotICAKKwogICAvKiBBbHdheXMgcHV0IHVwIGEgd2FybmluZy4gKi8KICAgV0FSTk1TMihjaW5mbywgSldSTl9NVVNUX1JFU1lOQywgbWFya2VyLCBkZXNpcmVkKTsKLSAgCisKICAgLyogT3V0ZXIgbG9vcCBoYW5kbGVzIHJlcGVhdGVkIGRlY2lzaW9uIGFmdGVyIHNjYW5uaW5nIGZvcndhcmQuICovCiAgIGZvciAoOzspIHsKICAgICBpZiAobWFya2VyIDwgKGludCkgTV9TT0YwKQotICAgICAgYWN0aW9uID0gMjsJCS8qIGludmFsaWQgbWFya2VyICovCisgICAgICBhY3Rpb24gPSAyOyAgICAgICAgICAgICAgIC8qIGludmFsaWQgbWFya2VyICovCiAgICAgZWxzZSBpZiAobWFya2VyIDwgKGludCkgTV9SU1QwIHx8IG1hcmtlciA+IChpbnQpIE1fUlNUNykKLSAgICAgIGFjdGlvbiA9IDM7CQkvKiB2YWxpZCBub24tcmVzdGFydCBtYXJrZXIgKi8KKyAgICAgIGFjdGlvbiA9IDM7ICAgICAgICAgICAgICAgLyogdmFsaWQgbm9uLXJlc3RhcnQgbWFya2VyICovCiAgICAgZWxzZSB7CiAgICAgICBpZiAobWFya2VyID09ICgoaW50KSBNX1JTVDAgKyAoKGRlc2lyZWQrMSkgJiA3KSkgfHwKLQkgIG1hcmtlciA9PSAoKGludCkgTV9SU1QwICsgKChkZXNpcmVkKzIpICYgNykpKQotCWFjdGlvbiA9IDM7CQkvKiBvbmUgb2YgdGhlIG5leHQgdHdvIGV4cGVjdGVkIHJlc3RhcnRzICovCisgICAgICAgICAgbWFya2VyID09ICgoaW50KSBNX1JTVDAgKyAoKGRlc2lyZWQrMikgJiA3KSkpCisgICAgICAgIGFjdGlvbiA9IDM7ICAgICAgICAgICAgIC8qIG9uZSBvZiB0aGUgbmV4dCB0d28gZXhwZWN0ZWQgcmVzdGFydHMgKi8KICAgICAgIGVsc2UgaWYgKG1hcmtlciA9PSAoKGludCkgTV9SU1QwICsgKChkZXNpcmVkLTEpICYgNykpIHx8Ci0JICAgICAgIG1hcmtlciA9PSAoKGludCkgTV9SU1QwICsgKChkZXNpcmVkLTIpICYgNykpKQotCWFjdGlvbiA9IDI7CQkvKiBhIHByaW9yIHJlc3RhcnQsIHNvIGFkdmFuY2UgKi8KKyAgICAgICAgICAgICAgIG1hcmtlciA9PSAoKGludCkgTV9SU1QwICsgKChkZXNpcmVkLTIpICYgNykpKQorICAgICAgICBhY3Rpb24gPSAyOyAgICAgICAgICAgICAvKiBhIHByaW9yIHJlc3RhcnQsIHNvIGFkdmFuY2UgKi8KICAgICAgIGVsc2UKLQlhY3Rpb24gPSAxOwkJLyogZGVzaXJlZCByZXN0YXJ0IG9yIHRvbyBmYXIgYXdheSAqLworICAgICAgICBhY3Rpb24gPSAxOyAgICAgICAgICAgICAvKiBkZXNpcmVkIHJlc3RhcnQgb3IgdG9vIGZhciBhd2F5ICovCiAgICAgfQogICAgIFRSQUNFTVMyKGNpbmZvLCA0LCBKVFJDX1JFQ09WRVJZX0FDVElPTiwgbWFya2VyLCBhY3Rpb24pOwogICAgIHN3aXRjaCAoYWN0aW9uKSB7CkBAIC0xMjM3LDcgKzEyMzgsNyBAQAogICAgIGNhc2UgMjoKICAgICAgIC8qIFNjYW4gdG8gdGhlIG5leHQgbWFya2VyLCBhbmQgcmVwZWF0IHRoZSBkZWNpc2lvbiBsb29wLiAqLwogICAgICAgaWYgKCEgbmV4dF9tYXJrZXIoY2luZm8pKQotCXJldHVybiBGQUxTRTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgbWFya2VyID0gY2luZm8tPnVucmVhZF9tYXJrZXI7CiAgICAgICBicmVhazsKICAgICBjYXNlIDM6CkBAIC0xMjU4LDEwICsxMjU5LDEwIEBACiB7CiAgIG15X21hcmtlcl9wdHIgbWFya2VyID0gKG15X21hcmtlcl9wdHIpIGNpbmZvLT5tYXJrZXI7CiAKLSAgY2luZm8tPmNvbXBfaW5mbyA9IE5VTEw7CQkvKiB1bnRpbCBhbGxvY2F0ZWQgYnkgZ2V0X3NvZiAqLwotICBjaW5mby0+aW5wdXRfc2Nhbl9udW1iZXIgPSAwOwkJLyogbm8gU09TIHNlZW4geWV0ICovCi0gIGNpbmZvLT51bnJlYWRfbWFya2VyID0gMDsJCS8qIG5vIHBlbmRpbmcgbWFya2VyICovCi0gIG1hcmtlci0+cHViLnNhd19TT0kgPSBGQUxTRTsJCS8qIHNldCBpbnRlcm5hbCBzdGF0ZSB0b28gKi8KKyAgY2luZm8tPmNvbXBfaW5mbyA9IE5VTEw7ICAgICAgICAgICAgICAvKiB1bnRpbCBhbGxvY2F0ZWQgYnkgZ2V0X3NvZiAqLworICBjaW5mby0+aW5wdXRfc2Nhbl9udW1iZXIgPSAwOyAgICAgICAgIC8qIG5vIFNPUyBzZWVuIHlldCAqLworICBjaW5mby0+dW5yZWFkX21hcmtlciA9IDA7ICAgICAgICAgICAgIC8qIG5vIHBlbmRpbmcgbWFya2VyICovCisgIG1hcmtlci0+cHViLnNhd19TT0kgPSBGQUxTRTsgICAgICAgICAgLyogc2V0IGludGVybmFsIHN0YXRlIHRvbyAqLwogICBtYXJrZXItPnB1Yi5zYXdfU09GID0gRkFMU0U7CiAgIG1hcmtlci0+cHViLmRpc2NhcmRlZF9ieXRlcyA9IDA7CiAgIG1hcmtlci0+Y3VyX21hcmtlciA9IE5VTEw7CkBAIC0xMjgyLDcgKzEyODMsNyBAQAogICAvKiBDcmVhdGUgc3Vib2JqZWN0IGluIHBlcm1hbmVudCBwb29sICovCiAgIG1hcmtlciA9IChteV9tYXJrZXJfcHRyKQogICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfUEVSTUFORU5ULAotCQkJCVNJWkVPRihteV9tYXJrZXJfcmVhZGVyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJWkVPRihteV9tYXJrZXJfcmVhZGVyKSk7CiAgIGNpbmZvLT5tYXJrZXIgPSAoc3RydWN0IGpwZWdfbWFya2VyX3JlYWRlciAqKSBtYXJrZXI7CiAgIC8qIEluaXRpYWxpemUgcHVibGljIG1ldGhvZCBwb2ludGVycyAqLwogICBtYXJrZXItPnB1Yi5yZXNldF9tYXJrZXJfcmVhZGVyID0gcmVzZXRfbWFya2VyX3JlYWRlcjsKQEAgLTEzMTMsNyArMTMxNCw3IEBACiAKIEdMT0JBTCh2b2lkKQoganBlZ19zYXZlX21hcmtlcnMgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGludCBtYXJrZXJfY29kZSwKLQkJICAgdW5zaWduZWQgaW50IGxlbmd0aF9saW1pdCkKKyAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoX2xpbWl0KQogewogICBteV9tYXJrZXJfcHRyIG1hcmtlciA9IChteV9tYXJrZXJfcHRyKSBjaW5mby0+bWFya2VyOwogICBsb25nIG1heGxlbmd0aDsKQEAgLTEzNjIsNyArMTM2Myw3IEBACiAKIEdMT0JBTCh2b2lkKQoganBlZ19zZXRfbWFya2VyX3Byb2Nlc3NvciAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgaW50IG1hcmtlcl9jb2RlLAotCQkJICAganBlZ19tYXJrZXJfcGFyc2VyX21ldGhvZCByb3V0aW5lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAganBlZ19tYXJrZXJfcGFyc2VyX21ldGhvZCByb3V0aW5lKQogewogICBteV9tYXJrZXJfcHRyIG1hcmtlciA9IChteV9tYXJrZXJfcHRyKSBjaW5mby0+bWFya2VyOwogCmRpZmYgLS1naXQgYS9qZG1hc3Rlci5jIGIvamRtYXN0ZXIuYwppbmRleCAyNWFkNDE2Li5iOWY3OGZkIDEwMDY0NAotLS0gYS9qZG1hc3Rlci5jCisrKyBiL2pkbWFzdGVyLmMKQEAgLTMsNyArMyw4IEBACiAgKgogICogVGhpcyBmaWxlIHdhcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmU6CiAgKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5NywgVGhvbWFzIEcuIExhbmUuCi0gKiBNb2RpZmljYXRpb25zOgorICogTW9kaWZpZWQgMjAwMi0yMDA5IGJ5IEd1aWRvIFZvbGxiZWRpbmcuCisgKiBsaWJqcGVnLXR1cmJvIE1vZGlmaWNhdGlvbnM6CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMSwgRC4gUi4gQ29tbWFuZGVyLgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgogICoKQEAgLTI0LDcgKzI1LDcgQEAKIHR5cGVkZWYgc3RydWN0IHsKICAgc3RydWN0IGpwZWdfZGVjb21wX21hc3RlciBwdWI7IC8qIHB1YmxpYyBmaWVsZHMgKi8KIAotICBpbnQgcGFzc19udW1iZXI7CQkvKiAjIG9mIHBhc3NlcyBjb21wbGV0ZWQgKi8KKyAgaW50IHBhc3NfbnVtYmVyOyAgICAgICAgICAgICAgLyogIyBvZiBwYXNzZXMgY29tcGxldGVkICovCiAKICAgYm9vbGVhbiB1c2luZ19tZXJnZWRfdXBzYW1wbGU7IC8qIFRSVUUgaWYgdXNpbmcgbWVyZ2VkIHVwc2FtcGxlL2Njb252ZXJ0ICovCiAKQEAgLTc5LDcgKzgwLDcgQEAKICAgICAgIGNpbmZvLT5jb21wX2luZm9bMl0uX0RDVF9zY2FsZWRfc2l6ZSAhPSBjaW5mby0+X21pbl9EQ1Rfc2NhbGVkX3NpemUpCiAgICAgcmV0dXJuIEZBTFNFOwogICAvKiA/Pz8gYWxzbyBuZWVkIHRvIHRlc3QgZm9yIHVwc2FtcGxlLXRpbWUgcmVzY2FsaW5nLCB3aGVuICYgaWYgc3VwcG9ydGVkICovCi0gIHJldHVybiBUUlVFOwkJCS8qIGJ5IGdvbGx5LCBpdCdsbCB3b3JrLi4uICovCisgIHJldHVybiBUUlVFOyAgICAgICAgICAgICAgICAgIC8qIGJ5IGdvbGx5LCBpdCdsbCB3b3JrLi4uICovCiAjZWxzZQogICByZXR1cm4gRkFMU0U7CiAjZW5kaWYKQEAgLTkwLDYgKzkxLDE3NyBAQAogICogQ29tcHV0ZSBvdXRwdXQgaW1hZ2UgZGltZW5zaW9ucyBhbmQgcmVsYXRlZCB2YWx1ZXMuCiAgKiBOT1RFOiB0aGlzIGlzIGV4cG9ydGVkIGZvciBwb3NzaWJsZSB1c2UgYnkgYXBwbGljYXRpb24uCiAgKiBIZW5jZSBpdCBtdXN0bid0IGRvIGFueXRoaW5nIHRoYXQgY2FuJ3QgYmUgZG9uZSB0d2ljZS4KKyAqLworCisjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA4MAorR0xPQkFMKHZvaWQpCisjZWxzZQorTE9DQUwodm9pZCkKKyNlbmRpZgoranBlZ19jb3JlX291dHB1dF9kaW1lbnNpb25zIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQorLyogRG8gY29tcHV0YXRpb25zIHRoYXQgYXJlIG5lZWRlZCBiZWZvcmUgbWFzdGVyIHNlbGVjdGlvbiBwaGFzZS4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBmb3IgdHJhbnNjb2RpbmcgYW5kIGZ1bGwgZGVjb21wcmVzc2lvbi4KKyAqLworeworI2lmZGVmIElEQ1RfU0NBTElOR19TVVBQT1JURUQKKyAgaW50IGNpOworICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOworCisgIC8qIENvbXB1dGUgYWN0dWFsIG91dHB1dCBpbWFnZSBkaW1lbnNpb25zIGFuZCBEQ1Qgc2NhbGluZyBjaG9pY2VzLiAqLworICBpZiAoY2luZm8tPnNjYWxlX251bSAqIERDVFNJWkUgPD0gY2luZm8tPnNjYWxlX2Rlbm9tKSB7CisgICAgLyogUHJvdmlkZSAxL2Jsb2NrX3NpemUgc2NhbGluZyAqLworICAgIGNpbmZvLT5vdXRwdXRfd2lkdGggPSAoSkRJTUVOU0lPTikKKyAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV93aWR0aCwgKGxvbmcpIERDVFNJWkUpOworICAgIGNpbmZvLT5vdXRwdXRfaGVpZ2h0ID0gKEpESU1FTlNJT04pCisgICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2VfaGVpZ2h0LCAobG9uZykgRENUU0laRSk7CisgICAgY2luZm8tPl9taW5fRENUX2hfc2NhbGVkX3NpemUgPSAxOworICAgIGNpbmZvLT5fbWluX0RDVF92X3NjYWxlZF9zaXplID0gMTsKKyAgfSBlbHNlIGlmIChjaW5mby0+c2NhbGVfbnVtICogRENUU0laRSA8PSBjaW5mby0+c2NhbGVfZGVub20gKiAyKSB7CisgICAgLyogUHJvdmlkZSAyL2Jsb2NrX3NpemUgc2NhbGluZyAqLworICAgIGNpbmZvLT5vdXRwdXRfd2lkdGggPSAoSkRJTUVOU0lPTikKKyAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV93aWR0aCAqIDJMLCAobG9uZykgRENUU0laRSk7CisgICAgY2luZm8tPm91dHB1dF9oZWlnaHQgPSAoSkRJTUVOU0lPTikKKyAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV9oZWlnaHQgKiAyTCwgKGxvbmcpIERDVFNJWkUpOworICAgIGNpbmZvLT5fbWluX0RDVF9oX3NjYWxlZF9zaXplID0gMjsKKyAgICBjaW5mby0+X21pbl9EQ1Rfdl9zY2FsZWRfc2l6ZSA9IDI7CisgIH0gZWxzZSBpZiAoY2luZm8tPnNjYWxlX251bSAqIERDVFNJWkUgPD0gY2luZm8tPnNjYWxlX2Rlbm9tICogMykgeworICAgIC8qIFByb3ZpZGUgMy9ibG9ja19zaXplIHNjYWxpbmcgKi8KKyAgICBjaW5mby0+b3V0cHV0X3dpZHRoID0gKEpESU1FTlNJT04pCisgICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2Vfd2lkdGggKiAzTCwgKGxvbmcpIERDVFNJWkUpOworICAgIGNpbmZvLT5vdXRwdXRfaGVpZ2h0ID0gKEpESU1FTlNJT04pCisgICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2VfaGVpZ2h0ICogM0wsIChsb25nKSBEQ1RTSVpFKTsKKyAgICBjaW5mby0+X21pbl9EQ1RfaF9zY2FsZWRfc2l6ZSA9IDM7CisgICAgY2luZm8tPl9taW5fRENUX3Zfc2NhbGVkX3NpemUgPSAzOworICB9IGVsc2UgaWYgKGNpbmZvLT5zY2FsZV9udW0gKiBEQ1RTSVpFIDw9IGNpbmZvLT5zY2FsZV9kZW5vbSAqIDQpIHsKKyAgICAvKiBQcm92aWRlIDQvYmxvY2tfc2l6ZSBzY2FsaW5nICovCisgICAgY2luZm8tPm91dHB1dF93aWR0aCA9IChKRElNRU5TSU9OKQorICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX3dpZHRoICogNEwsIChsb25nKSBEQ1RTSVpFKTsKKyAgICBjaW5mby0+b3V0cHV0X2hlaWdodCA9IChKRElNRU5TSU9OKQorICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX2hlaWdodCAqIDRMLCAobG9uZykgRENUU0laRSk7CisgICAgY2luZm8tPl9taW5fRENUX2hfc2NhbGVkX3NpemUgPSA0OworICAgIGNpbmZvLT5fbWluX0RDVF92X3NjYWxlZF9zaXplID0gNDsKKyAgfSBlbHNlIGlmIChjaW5mby0+c2NhbGVfbnVtICogRENUU0laRSA8PSBjaW5mby0+c2NhbGVfZGVub20gKiA1KSB7CisgICAgLyogUHJvdmlkZSA1L2Jsb2NrX3NpemUgc2NhbGluZyAqLworICAgIGNpbmZvLT5vdXRwdXRfd2lkdGggPSAoSkRJTUVOU0lPTikKKyAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV93aWR0aCAqIDVMLCAobG9uZykgRENUU0laRSk7CisgICAgY2luZm8tPm91dHB1dF9oZWlnaHQgPSAoSkRJTUVOU0lPTikKKyAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV9oZWlnaHQgKiA1TCwgKGxvbmcpIERDVFNJWkUpOworICAgIGNpbmZvLT5fbWluX0RDVF9oX3NjYWxlZF9zaXplID0gNTsKKyAgICBjaW5mby0+X21pbl9EQ1Rfdl9zY2FsZWRfc2l6ZSA9IDU7CisgIH0gZWxzZSBpZiAoY2luZm8tPnNjYWxlX251bSAqIERDVFNJWkUgPD0gY2luZm8tPnNjYWxlX2Rlbm9tICogNikgeworICAgIC8qIFByb3ZpZGUgNi9ibG9ja19zaXplIHNjYWxpbmcgKi8KKyAgICBjaW5mby0+b3V0cHV0X3dpZHRoID0gKEpESU1FTlNJT04pCisgICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2Vfd2lkdGggKiA2TCwgKGxvbmcpIERDVFNJWkUpOworICAgIGNpbmZvLT5vdXRwdXRfaGVpZ2h0ID0gKEpESU1FTlNJT04pCisgICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2VfaGVpZ2h0ICogNkwsIChsb25nKSBEQ1RTSVpFKTsKKyAgICBjaW5mby0+X21pbl9EQ1RfaF9zY2FsZWRfc2l6ZSA9IDY7CisgICAgY2luZm8tPl9taW5fRENUX3Zfc2NhbGVkX3NpemUgPSA2OworICB9IGVsc2UgaWYgKGNpbmZvLT5zY2FsZV9udW0gKiBEQ1RTSVpFIDw9IGNpbmZvLT5zY2FsZV9kZW5vbSAqIDcpIHsKKyAgICAvKiBQcm92aWRlIDcvYmxvY2tfc2l6ZSBzY2FsaW5nICovCisgICAgY2luZm8tPm91dHB1dF93aWR0aCA9IChKRElNRU5TSU9OKQorICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX3dpZHRoICogN0wsIChsb25nKSBEQ1RTSVpFKTsKKyAgICBjaW5mby0+b3V0cHV0X2hlaWdodCA9IChKRElNRU5TSU9OKQorICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX2hlaWdodCAqIDdMLCAobG9uZykgRENUU0laRSk7CisgICAgY2luZm8tPl9taW5fRENUX2hfc2NhbGVkX3NpemUgPSA3OworICAgIGNpbmZvLT5fbWluX0RDVF92X3NjYWxlZF9zaXplID0gNzsKKyAgfSBlbHNlIGlmIChjaW5mby0+c2NhbGVfbnVtICogRENUU0laRSA8PSBjaW5mby0+c2NhbGVfZGVub20gKiA4KSB7CisgICAgLyogUHJvdmlkZSA4L2Jsb2NrX3NpemUgc2NhbGluZyAqLworICAgIGNpbmZvLT5vdXRwdXRfd2lkdGggPSAoSkRJTUVOU0lPTikKKyAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV93aWR0aCAqIDhMLCAobG9uZykgRENUU0laRSk7CisgICAgY2luZm8tPm91dHB1dF9oZWlnaHQgPSAoSkRJTUVOU0lPTikKKyAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV9oZWlnaHQgKiA4TCwgKGxvbmcpIERDVFNJWkUpOworICAgIGNpbmZvLT5fbWluX0RDVF9oX3NjYWxlZF9zaXplID0gODsKKyAgICBjaW5mby0+X21pbl9EQ1Rfdl9zY2FsZWRfc2l6ZSA9IDg7CisgIH0gZWxzZSBpZiAoY2luZm8tPnNjYWxlX251bSAqIERDVFNJWkUgPD0gY2luZm8tPnNjYWxlX2Rlbm9tICogOSkgeworICAgIC8qIFByb3ZpZGUgOS9ibG9ja19zaXplIHNjYWxpbmcgKi8KKyAgICBjaW5mby0+b3V0cHV0X3dpZHRoID0gKEpESU1FTlNJT04pCisgICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2Vfd2lkdGggKiA5TCwgKGxvbmcpIERDVFNJWkUpOworICAgIGNpbmZvLT5vdXRwdXRfaGVpZ2h0ID0gKEpESU1FTlNJT04pCisgICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2VfaGVpZ2h0ICogOUwsIChsb25nKSBEQ1RTSVpFKTsKKyAgICBjaW5mby0+X21pbl9EQ1RfaF9zY2FsZWRfc2l6ZSA9IDk7CisgICAgY2luZm8tPl9taW5fRENUX3Zfc2NhbGVkX3NpemUgPSA5OworICB9IGVsc2UgaWYgKGNpbmZvLT5zY2FsZV9udW0gKiBEQ1RTSVpFIDw9IGNpbmZvLT5zY2FsZV9kZW5vbSAqIDEwKSB7CisgICAgLyogUHJvdmlkZSAxMC9ibG9ja19zaXplIHNjYWxpbmcgKi8KKyAgICBjaW5mby0+b3V0cHV0X3dpZHRoID0gKEpESU1FTlNJT04pCisgICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2Vfd2lkdGggKiAxMEwsIChsb25nKSBEQ1RTSVpFKTsKKyAgICBjaW5mby0+b3V0cHV0X2hlaWdodCA9IChKRElNRU5TSU9OKQorICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX2hlaWdodCAqIDEwTCwgKGxvbmcpIERDVFNJWkUpOworICAgIGNpbmZvLT5fbWluX0RDVF9oX3NjYWxlZF9zaXplID0gMTA7CisgICAgY2luZm8tPl9taW5fRENUX3Zfc2NhbGVkX3NpemUgPSAxMDsKKyAgfSBlbHNlIGlmIChjaW5mby0+c2NhbGVfbnVtICogRENUU0laRSA8PSBjaW5mby0+c2NhbGVfZGVub20gKiAxMSkgeworICAgIC8qIFByb3ZpZGUgMTEvYmxvY2tfc2l6ZSBzY2FsaW5nICovCisgICAgY2luZm8tPm91dHB1dF93aWR0aCA9IChKRElNRU5TSU9OKQorICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX3dpZHRoICogMTFMLCAobG9uZykgRENUU0laRSk7CisgICAgY2luZm8tPm91dHB1dF9oZWlnaHQgPSAoSkRJTUVOU0lPTikKKyAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV9oZWlnaHQgKiAxMUwsIChsb25nKSBEQ1RTSVpFKTsKKyAgICBjaW5mby0+X21pbl9EQ1RfaF9zY2FsZWRfc2l6ZSA9IDExOworICAgIGNpbmZvLT5fbWluX0RDVF92X3NjYWxlZF9zaXplID0gMTE7CisgIH0gZWxzZSBpZiAoY2luZm8tPnNjYWxlX251bSAqIERDVFNJWkUgPD0gY2luZm8tPnNjYWxlX2Rlbm9tICogMTIpIHsKKyAgICAvKiBQcm92aWRlIDEyL2Jsb2NrX3NpemUgc2NhbGluZyAqLworICAgIGNpbmZvLT5vdXRwdXRfd2lkdGggPSAoSkRJTUVOU0lPTikKKyAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV93aWR0aCAqIDEyTCwgKGxvbmcpIERDVFNJWkUpOworICAgIGNpbmZvLT5vdXRwdXRfaGVpZ2h0ID0gKEpESU1FTlNJT04pCisgICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2VfaGVpZ2h0ICogMTJMLCAobG9uZykgRENUU0laRSk7CisgICAgY2luZm8tPl9taW5fRENUX2hfc2NhbGVkX3NpemUgPSAxMjsKKyAgICBjaW5mby0+X21pbl9EQ1Rfdl9zY2FsZWRfc2l6ZSA9IDEyOworICB9IGVsc2UgaWYgKGNpbmZvLT5zY2FsZV9udW0gKiBEQ1RTSVpFIDw9IGNpbmZvLT5zY2FsZV9kZW5vbSAqIDEzKSB7CisgICAgLyogUHJvdmlkZSAxMy9ibG9ja19zaXplIHNjYWxpbmcgKi8KKyAgICBjaW5mby0+b3V0cHV0X3dpZHRoID0gKEpESU1FTlNJT04pCisgICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2Vfd2lkdGggKiAxM0wsIChsb25nKSBEQ1RTSVpFKTsKKyAgICBjaW5mby0+b3V0cHV0X2hlaWdodCA9IChKRElNRU5TSU9OKQorICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX2hlaWdodCAqIDEzTCwgKGxvbmcpIERDVFNJWkUpOworICAgIGNpbmZvLT5fbWluX0RDVF9oX3NjYWxlZF9zaXplID0gMTM7CisgICAgY2luZm8tPl9taW5fRENUX3Zfc2NhbGVkX3NpemUgPSAxMzsKKyAgfSBlbHNlIGlmIChjaW5mby0+c2NhbGVfbnVtICogRENUU0laRSA8PSBjaW5mby0+c2NhbGVfZGVub20gKiAxNCkgeworICAgIC8qIFByb3ZpZGUgMTQvYmxvY2tfc2l6ZSBzY2FsaW5nICovCisgICAgY2luZm8tPm91dHB1dF93aWR0aCA9IChKRElNRU5TSU9OKQorICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX3dpZHRoICogMTRMLCAobG9uZykgRENUU0laRSk7CisgICAgY2luZm8tPm91dHB1dF9oZWlnaHQgPSAoSkRJTUVOU0lPTikKKyAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV9oZWlnaHQgKiAxNEwsIChsb25nKSBEQ1RTSVpFKTsKKyAgICBjaW5mby0+X21pbl9EQ1RfaF9zY2FsZWRfc2l6ZSA9IDE0OworICAgIGNpbmZvLT5fbWluX0RDVF92X3NjYWxlZF9zaXplID0gMTQ7CisgIH0gZWxzZSBpZiAoY2luZm8tPnNjYWxlX251bSAqIERDVFNJWkUgPD0gY2luZm8tPnNjYWxlX2Rlbm9tICogMTUpIHsKKyAgICAvKiBQcm92aWRlIDE1L2Jsb2NrX3NpemUgc2NhbGluZyAqLworICAgIGNpbmZvLT5vdXRwdXRfd2lkdGggPSAoSkRJTUVOU0lPTikKKyAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV93aWR0aCAqIDE1TCwgKGxvbmcpIERDVFNJWkUpOworICAgIGNpbmZvLT5vdXRwdXRfaGVpZ2h0ID0gKEpESU1FTlNJT04pCisgICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2VfaGVpZ2h0ICogMTVMLCAobG9uZykgRENUU0laRSk7CisgICAgY2luZm8tPl9taW5fRENUX2hfc2NhbGVkX3NpemUgPSAxNTsKKyAgICBjaW5mby0+X21pbl9EQ1Rfdl9zY2FsZWRfc2l6ZSA9IDE1OworICB9IGVsc2UgeworICAgIC8qIFByb3ZpZGUgMTYvYmxvY2tfc2l6ZSBzY2FsaW5nICovCisgICAgY2luZm8tPm91dHB1dF93aWR0aCA9IChKRElNRU5TSU9OKQorICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX3dpZHRoICogMTZMLCAobG9uZykgRENUU0laRSk7CisgICAgY2luZm8tPm91dHB1dF9oZWlnaHQgPSAoSkRJTUVOU0lPTikKKyAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV9oZWlnaHQgKiAxNkwsIChsb25nKSBEQ1RTSVpFKTsKKyAgICBjaW5mby0+X21pbl9EQ1RfaF9zY2FsZWRfc2l6ZSA9IDE2OworICAgIGNpbmZvLT5fbWluX0RDVF92X3NjYWxlZF9zaXplID0gMTY7CisgIH0KKworICAvKiBSZWNvbXB1dGUgZGltZW5zaW9ucyBvZiBjb21wb25lbnRzICovCisgIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7CisgICAgICAgY2krKywgY29tcHB0cisrKSB7CisgICAgY29tcHB0ci0+X0RDVF9oX3NjYWxlZF9zaXplID0gY2luZm8tPl9taW5fRENUX2hfc2NhbGVkX3NpemU7CisgICAgY29tcHB0ci0+X0RDVF92X3NjYWxlZF9zaXplID0gY2luZm8tPl9taW5fRENUX3Zfc2NhbGVkX3NpemU7CisgIH0KKworI2Vsc2UgLyogIUlEQ1RfU0NBTElOR19TVVBQT1JURUQgKi8KKworICAvKiBIYXJkd2lyZSBpdCB0byAibm8gc2NhbGluZyIgKi8KKyAgY2luZm8tPm91dHB1dF93aWR0aCA9IGNpbmZvLT5pbWFnZV93aWR0aDsKKyAgY2luZm8tPm91dHB1dF9oZWlnaHQgPSBjaW5mby0+aW1hZ2VfaGVpZ2h0OworICAvKiBqZGlucHV0LmMgaGFzIGFscmVhZHkgaW5pdGlhbGl6ZWQgRENUX3NjYWxlZF9zaXplLAorICAgKiBhbmQgaGFzIGNvbXB1dGVkIHVuc2NhbGVkIGRvd25zYW1wbGVkX3dpZHRoIGFuZCBkb3duc2FtcGxlZF9oZWlnaHQuCisgICAqLworCisjZW5kaWYgLyogSURDVF9TQ0FMSU5HX1NVUFBPUlRFRCAqLworfQorCisKKy8qCisgKiBDb21wdXRlIG91dHB1dCBpbWFnZSBkaW1lbnNpb25zIGFuZCByZWxhdGVkIHZhbHVlcy4KKyAqIE5PVEU6IHRoaXMgaXMgZXhwb3J0ZWQgZm9yIHBvc3NpYmxlIHVzZSBieSBhcHBsaWNhdGlvbi4KKyAqIEhlbmNlIGl0IG11c3RuJ3QgZG8gYW55dGhpbmcgdGhhdCBjYW4ndCBiZSBkb25lIHR3aWNlLgogICogQWxzbyBub3RlIHRoYXQgaXQgbWF5IGJlIGNhbGxlZCBiZWZvcmUgdGhlIG1hc3RlciBtb2R1bGUgaXMgaW5pdGlhbGl6ZWQhCiAgKi8KIApAQCAtMTA2LDY1ICsyNzgsMjQgQEAKICAgaWYgKGNpbmZvLT5nbG9iYWxfc3RhdGUgIT0gRFNUQVRFX1JFQURZKQogICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9TVEFURSwgY2luZm8tPmdsb2JhbF9zdGF0ZSk7CiAKKyAgLyogQ29tcHV0ZSBjb3JlIG91dHB1dCBpbWFnZSBkaW1lbnNpb25zIGFuZCBEQ1Qgc2NhbGluZyBjaG9pY2VzLiAqLworICBqcGVnX2NvcmVfb3V0cHV0X2RpbWVuc2lvbnMoY2luZm8pOworCiAjaWZkZWYgSURDVF9TQ0FMSU5HX1NVUFBPUlRFRAogCi0gIC8qIENvbXB1dGUgYWN0dWFsIG91dHB1dCBpbWFnZSBkaW1lbnNpb25zIGFuZCBEQ1Qgc2NhbGluZyBjaG9pY2VzLiAqLwotICBpZiAoY2luZm8tPnNjYWxlX251bSAqIDggPD0gY2luZm8tPnNjYWxlX2Rlbm9tKSB7Ci0gICAgLyogUHJvdmlkZSAxLzggc2NhbGluZyAqLwotICAgIGNpbmZvLT5vdXRwdXRfd2lkdGggPSAoSkRJTUVOU0lPTikKLSAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV93aWR0aCwgOEwpOwotICAgIGNpbmZvLT5vdXRwdXRfaGVpZ2h0ID0gKEpESU1FTlNJT04pCi0gICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2VfaGVpZ2h0LCA4TCk7Ci0jaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA3MAotICAgIGNpbmZvLT5taW5fRENUX2hfc2NhbGVkX3NpemUgPSBjaW5mby0+bWluX0RDVF92X3NjYWxlZF9zaXplID0gMTsKLSNlbHNlCi0gICAgY2luZm8tPm1pbl9EQ1Rfc2NhbGVkX3NpemUgPSAxOwotI2VuZGlmCi0gIH0gZWxzZSBpZiAoY2luZm8tPnNjYWxlX251bSAqIDQgPD0gY2luZm8tPnNjYWxlX2Rlbm9tKSB7Ci0gICAgLyogUHJvdmlkZSAxLzQgc2NhbGluZyAqLwotICAgIGNpbmZvLT5vdXRwdXRfd2lkdGggPSAoSkRJTUVOU0lPTikKLSAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV93aWR0aCwgNEwpOwotICAgIGNpbmZvLT5vdXRwdXRfaGVpZ2h0ID0gKEpESU1FTlNJT04pCi0gICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2VfaGVpZ2h0LCA0TCk7Ci0jaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA3MAotICAgIGNpbmZvLT5taW5fRENUX2hfc2NhbGVkX3NpemUgPSBjaW5mby0+bWluX0RDVF92X3NjYWxlZF9zaXplID0gMjsKLSNlbHNlCi0gICAgY2luZm8tPm1pbl9EQ1Rfc2NhbGVkX3NpemUgPSAyOwotI2VuZGlmCi0gIH0gZWxzZSBpZiAoY2luZm8tPnNjYWxlX251bSAqIDIgPD0gY2luZm8tPnNjYWxlX2Rlbm9tKSB7Ci0gICAgLyogUHJvdmlkZSAxLzIgc2NhbGluZyAqLwotICAgIGNpbmZvLT5vdXRwdXRfd2lkdGggPSAoSkRJTUVOU0lPTikKLSAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV93aWR0aCwgMkwpOwotICAgIGNpbmZvLT5vdXRwdXRfaGVpZ2h0ID0gKEpESU1FTlNJT04pCi0gICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2VfaGVpZ2h0LCAyTCk7Ci0jaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA3MAotICAgIGNpbmZvLT5taW5fRENUX2hfc2NhbGVkX3NpemUgPSBjaW5mby0+bWluX0RDVF92X3NjYWxlZF9zaXplID0gNDsKLSNlbHNlCi0gICAgY2luZm8tPm1pbl9EQ1Rfc2NhbGVkX3NpemUgPSA0OwotI2VuZGlmCi0gIH0gZWxzZSB7Ci0gICAgLyogUHJvdmlkZSAxLzEgc2NhbGluZyAqLwotICAgIGNpbmZvLT5vdXRwdXRfd2lkdGggPSBjaW5mby0+aW1hZ2Vfd2lkdGg7Ci0gICAgY2luZm8tPm91dHB1dF9oZWlnaHQgPSBjaW5mby0+aW1hZ2VfaGVpZ2h0OwotI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gNzAKLSAgICBjaW5mby0+bWluX0RDVF9oX3NjYWxlZF9zaXplID0gY2luZm8tPm1pbl9EQ1Rfdl9zY2FsZWRfc2l6ZSA9IERDVFNJWkU7Ci0jZWxzZQotICAgIGNpbmZvLT5taW5fRENUX3NjYWxlZF9zaXplID0gRENUU0laRTsKLSNlbmRpZgotICB9CiAgIC8qIEluIHNlbGVjdGluZyB0aGUgYWN0dWFsIERDVCBzY2FsaW5nIGZvciBlYWNoIGNvbXBvbmVudCwgd2UgdHJ5IHRvCiAgICAqIHNjYWxlIHVwIHRoZSBjaHJvbWEgY29tcG9uZW50cyB2aWEgSURDVCBzY2FsaW5nIHJhdGhlciB0aGFuIHVwc2FtcGxpbmcuCiAgICAqIFRoaXMgc2F2ZXMgdGltZSBpZiB0aGUgdXBzYW1wbGVyIGdldHMgdG8gdXNlIDE6MSBzY2FsaW5nLgotICAgKiBOb3RlIHRoaXMgY29kZSBhc3N1bWVzIHRoYXQgdGhlIHN1cHBvcnRlZCBEQ1Qgc2NhbGluZ3MgYXJlIHBvd2VycyBvZiAyLgorICAgKiBOb3RlIHRoaXMgY29kZSBhZGFwdHMgc3Vic2FtcGxpbmcgcmF0aW9zIHdoaWNoIGFyZSBwb3dlcnMgb2YgMi4KICAgICovCiAgIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7CiAgICAgICAgY2krKywgY29tcHB0cisrKSB7CiAgICAgaW50IHNzaXplID0gY2luZm8tPl9taW5fRENUX3NjYWxlZF9zaXplOwogICAgIHdoaWxlIChzc2l6ZSA8IERDVFNJWkUgJiYKLQkgICAoY29tcHB0ci0+aF9zYW1wX2ZhY3RvciAqIHNzaXplICogMiA8PQotCSAgICBjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IgKiBjaW5mby0+X21pbl9EQ1Rfc2NhbGVkX3NpemUpICYmCi0JICAgKGNvbXBwdHItPnZfc2FtcF9mYWN0b3IgKiBzc2l6ZSAqIDIgPD0KLQkgICAgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yICogY2luZm8tPl9taW5fRENUX3NjYWxlZF9zaXplKSkgeworICAgICAgICAgICAoKGNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvciAqIGNpbmZvLT5fbWluX0RDVF9zY2FsZWRfc2l6ZSkgJQorICAgICAgICAgICAgKGNvbXBwdHItPmhfc2FtcF9mYWN0b3IgKiBzc2l6ZSAqIDIpID09IDApICYmCisgICAgICAgICAgICgoY2luZm8tPm1heF92X3NhbXBfZmFjdG9yICogY2luZm8tPl9taW5fRENUX3NjYWxlZF9zaXplKSAlCisgICAgICAgICAgICAoY29tcHB0ci0+dl9zYW1wX2ZhY3RvciAqIHNzaXplICogMikgPT0gMCkpIHsKICAgICAgIHNzaXplID0gc3NpemUgKiAyOwogICAgIH0KICNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDcwCkBAIC0xODIsMTIgKzMxMywxMiBAQAogICAgIC8qIFNpemUgaW4gc2FtcGxlcywgYWZ0ZXIgSURDVCBzY2FsaW5nICovCiAgICAgY29tcHB0ci0+ZG93bnNhbXBsZWRfd2lkdGggPSAoSkRJTUVOU0lPTikKICAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV93aWR0aCAqCi0JCSAgICAobG9uZykgKGNvbXBwdHItPmhfc2FtcF9mYWN0b3IgKiBjb21wcHRyLT5fRENUX3NjYWxlZF9zaXplKSwKLQkJICAgIChsb25nKSAoY2luZm8tPm1heF9oX3NhbXBfZmFjdG9yICogRENUU0laRSkpOworICAgICAgICAgICAgICAgICAgICAobG9uZykgKGNvbXBwdHItPmhfc2FtcF9mYWN0b3IgKiBjb21wcHRyLT5fRENUX3NjYWxlZF9zaXplKSwKKyAgICAgICAgICAgICAgICAgICAgKGxvbmcpIChjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IgKiBEQ1RTSVpFKSk7CiAgICAgY29tcHB0ci0+ZG93bnNhbXBsZWRfaGVpZ2h0ID0gKEpESU1FTlNJT04pCiAgICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2VfaGVpZ2h0ICoKLQkJICAgIChsb25nKSAoY29tcHB0ci0+dl9zYW1wX2ZhY3RvciAqIGNvbXBwdHItPl9EQ1Rfc2NhbGVkX3NpemUpLAotCQkgICAgKGxvbmcpIChjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IgKiBEQ1RTSVpFKSk7CisgICAgICAgICAgICAgICAgICAgIChsb25nKSAoY29tcHB0ci0+dl9zYW1wX2ZhY3RvciAqIGNvbXBwdHItPl9EQ1Rfc2NhbGVkX3NpemUpLAorICAgICAgICAgICAgICAgICAgICAobG9uZykgKGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciAqIERDVFNJWkUpKTsKICAgfQogCiAjZWxzZSAvKiAhSURDVF9TQ0FMSU5HX1NVUFBPUlRFRCAqLwpAQCAtMjI3LDEyICszNTgsMTIgQEAKICAgY2FzZSBKQ1NfWUNDSzoKICAgICBjaW5mby0+b3V0X2NvbG9yX2NvbXBvbmVudHMgPSA0OwogICAgIGJyZWFrOwotICBkZWZhdWx0OgkJCS8qIGVsc2UgbXVzdCBiZSBzYW1lIGNvbG9yc3BhY2UgYXMgaW4gZmlsZSAqLworICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAvKiBlbHNlIG11c3QgYmUgc2FtZSBjb2xvcnNwYWNlIGFzIGluIGZpbGUgKi8KICAgICBjaW5mby0+b3V0X2NvbG9yX2NvbXBvbmVudHMgPSBjaW5mby0+bnVtX2NvbXBvbmVudHM7CiAgICAgYnJlYWs7CiAgIH0KICAgY2luZm8tPm91dHB1dF9jb21wb25lbnRzID0gKGNpbmZvLT5xdWFudGl6ZV9jb2xvcnMgPyAxIDoKLQkJCSAgICAgIGNpbmZvLT5vdXRfY29sb3JfY29tcG9uZW50cyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaW5mby0+b3V0X2NvbG9yX2NvbXBvbmVudHMpOwogCiAgIC8qIFNlZSBpZiB1cHNhbXBsZXIgd2lsbCB3YW50IHRvIGVtaXQgbW9yZSB0aGFuIG9uZSByb3cgYXQgYSB0aW1lICovCiAgIGlmICh1c2VfbWVyZ2VkX3Vwc2FtcGxlKGNpbmZvKSkKQEAgLTI0OSwyMCArMzgwLDIwIEBACiAgKiBwcm9jZXNzZXMgYXJlIGlubmVyIGxvb3BzIGFuZCBuZWVkIHRvIGJlIGFzIGZhc3QgYXMgcG9zc2libGUuICBPbiBtb3N0CiAgKiBtYWNoaW5lcywgcGFydGljdWxhcmx5IENQVXMgd2l0aCBwaXBlbGluZXMgb3IgaW5zdHJ1Y3Rpb24gcHJlZmV0Y2gsCiAgKiBhIChzdWJzY3JpcHQtY2hlY2stbGVzcykgQyB0YWJsZSBsb29rdXAKLSAqCQl4ID0gc2FtcGxlX3JhbmdlX2xpbWl0W3hdOworICogICAgICAgICAgICAgIHggPSBzYW1wbGVfcmFuZ2VfbGltaXRbeF07CiAgKiBpcyBmYXN0ZXIgdGhhbiBleHBsaWNpdCB0ZXN0cwotICoJCWlmICh4IDwgMCkgIHggPSAwOwotICoJCWVsc2UgaWYgKHggPiBNQVhKU0FNUExFKSAgeCA9IE1BWEpTQU1QTEU7CisgKiAgICAgICAgICAgICAgaWYgKHggPCAwKSAgeCA9IDA7CisgKiAgICAgICAgICAgICAgZWxzZSBpZiAoeCA+IE1BWEpTQU1QTEUpICB4ID0gTUFYSlNBTVBMRTsKICAqIFRoZXNlIHByb2Nlc3NlcyBhbGwgdXNlIGEgY29tbW9uIHRhYmxlIHByZXBhcmVkIGJ5IHRoZSByb3V0aW5lIGJlbG93LgogICoKICAqIEZvciBtb3N0IHN0ZXBzIHdlIGNhbiBtYXRoZW1hdGljYWxseSBndWFyYW50ZWUgdGhhdCB0aGUgaW5pdGlhbCB2YWx1ZQogICogb2YgeCBpcyB3aXRoaW4gTUFYSlNBTVBMRSsxIG9mIHRoZSBsZWdhbCByYW5nZSwgc28gYSB0YWJsZSBydW5uaW5nIGZyb20KICAqIC0oTUFYSlNBTVBMRSsxKSB0byAyKk1BWEpTQU1QTEUrMSBpcyBzdWZmaWNpZW50LiAgQnV0IGZvciB0aGUgaW5pdGlhbAotICogbGltaXRpbmcgc3RlcCAoanVzdCBhZnRlciB0aGUgSURDVCksIGEgd2lsZGx5IG91dC1vZi1yYW5nZSB2YWx1ZSBpcyAKKyAqIGxpbWl0aW5nIHN0ZXAgKGp1c3QgYWZ0ZXIgdGhlIElEQ1QpLCBhIHdpbGRseSBvdXQtb2YtcmFuZ2UgdmFsdWUgaXMKICAqIHBvc3NpYmxlIGlmIHRoZSBpbnB1dCBkYXRhIGlzIGNvcnJ1cHQuICBUbyBhdm9pZCBhbnkgY2hhbmNlIG9mIGluZGV4aW5nCiAgKiBvZmYgdGhlIGVuZCBvZiBtZW1vcnkgYW5kIGdldHRpbmcgYSBiYWQtcG9pbnRlciB0cmFwLCB3ZSBwZXJmb3JtIHRoZQogICogcG9zdC1JRENUIGxpbWl0aW5nIHRodXM6Ci0gKgkJeCA9IHJhbmdlX2xpbWl0W3ggJiBNQVNLXTsKKyAqICAgICAgICAgICAgICB4ID0gcmFuZ2VfbGltaXRbeCAmIE1BU0tdOwogICogd2hlcmUgTUFTSyBpcyAyIGJpdHMgd2lkZXIgdGhhbiBsZWdhbCBzYW1wbGUgZGF0YSwgaWUgMTAgYml0cyBmb3IgOC1iaXQKICAqIHNhbXBsZXMuICBVbmRlciBub3JtYWwgY2lyY3Vtc3RhbmNlcyB0aGlzIGlzIG1vcmUgdGhhbiBlbm91Z2ggcmFuZ2UgYW5kCiAgKiBhIGNvcnJlY3Qgb3V0cHV0IHdpbGwgYmUgZ2VuZXJhdGVkOyB3aXRoIGJvZ3VzIGlucHV0IGRhdGEgdGhlIG1hc2sgd2lsbApAQCAtMjk0LDIzICs0MjUsMjMgQEAKIAogICB0YWJsZSA9IChKU0FNUExFICopCiAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKLQkJKDUgKiAoTUFYSlNBTVBMRSsxKSArIENFTlRFUkpTQU1QTEUpICogU0laRU9GKEpTQU1QTEUpKTsKLSAgdGFibGUgKz0gKE1BWEpTQU1QTEUrMSk7CS8qIGFsbG93IG5lZ2F0aXZlIHN1YnNjcmlwdHMgb2Ygc2ltcGxlIHRhYmxlICovCisgICAgICAgICAgICAgICAgKDUgKiAoTUFYSlNBTVBMRSsxKSArIENFTlRFUkpTQU1QTEUpICogU0laRU9GKEpTQU1QTEUpKTsKKyAgdGFibGUgKz0gKE1BWEpTQU1QTEUrMSk7ICAgICAgLyogYWxsb3cgbmVnYXRpdmUgc3Vic2NyaXB0cyBvZiBzaW1wbGUgdGFibGUgKi8KICAgY2luZm8tPnNhbXBsZV9yYW5nZV9saW1pdCA9IHRhYmxlOwogICAvKiBGaXJzdCBzZWdtZW50IG9mICJzaW1wbGUiIHRhYmxlOiBsaW1pdFt4XSA9IDAgZm9yIHggPCAwICovCiAgIE1FTVpFUk8odGFibGUgLSAoTUFYSlNBTVBMRSsxKSwgKE1BWEpTQU1QTEUrMSkgKiBTSVpFT0YoSlNBTVBMRSkpOwogICAvKiBNYWluIHBhcnQgb2YgInNpbXBsZSIgdGFibGU6IGxpbWl0W3hdID0geCAqLwogICBmb3IgKGkgPSAwOyBpIDw9IE1BWEpTQU1QTEU7IGkrKykKICAgICB0YWJsZVtpXSA9IChKU0FNUExFKSBpOwotICB0YWJsZSArPSBDRU5URVJKU0FNUExFOwkvKiBQb2ludCB0byB3aGVyZSBwb3N0LUlEQ1QgdGFibGUgc3RhcnRzICovCisgIHRhYmxlICs9IENFTlRFUkpTQU1QTEU7ICAgICAgIC8qIFBvaW50IHRvIHdoZXJlIHBvc3QtSURDVCB0YWJsZSBzdGFydHMgKi8KICAgLyogRW5kIG9mIHNpbXBsZSB0YWJsZSwgcmVzdCBvZiBmaXJzdCBoYWxmIG9mIHBvc3QtSURDVCB0YWJsZSAqLwogICBmb3IgKGkgPSBDRU5URVJKU0FNUExFOyBpIDwgMiooTUFYSlNBTVBMRSsxKTsgaSsrKQogICAgIHRhYmxlW2ldID0gTUFYSlNBTVBMRTsKICAgLyogU2Vjb25kIGhhbGYgb2YgcG9zdC1JRENUIHRhYmxlICovCiAgIE1FTVpFUk8odGFibGUgKyAoMiAqIChNQVhKU0FNUExFKzEpKSwKLQkgICgyICogKE1BWEpTQU1QTEUrMSkgLSBDRU5URVJKU0FNUExFKSAqIFNJWkVPRihKU0FNUExFKSk7CisgICAgICAgICAgKDIgKiAoTUFYSlNBTVBMRSsxKSAtIENFTlRFUkpTQU1QTEUpICogU0laRU9GKEpTQU1QTEUpKTsKICAgTUVNQ09QWSh0YWJsZSArICg0ICogKE1BWEpTQU1QTEUrMSkgLSBDRU5URVJKU0FNUExFKSwKLQkgIGNpbmZvLT5zYW1wbGVfcmFuZ2VfbGltaXQsIENFTlRFUkpTQU1QTEUgKiBTSVpFT0YoSlNBTVBMRSkpOworICAgICAgICAgIGNpbmZvLT5zYW1wbGVfcmFuZ2VfbGltaXQsIENFTlRFUkpTQU1QTEUgKiBTSVpFT0YoSlNBTVBMRSkpOwogfQogCiAKQEAgLTQ5OCwyNCArNjI5LDI0IEBACiAgICAgaWYgKGNpbmZvLT5xdWFudGl6ZV9jb2xvcnMgJiYgY2luZm8tPmNvbG9ybWFwID09IE5VTEwpIHsKICAgICAgIC8qIFNlbGVjdCBuZXcgcXVhbnRpemF0aW9uIG1ldGhvZCAqLwogICAgICAgaWYgKGNpbmZvLT50d29fcGFzc19xdWFudGl6ZSAmJiBjaW5mby0+ZW5hYmxlXzJwYXNzX3F1YW50KSB7Ci0JY2luZm8tPmNxdWFudGl6ZSA9IG1hc3Rlci0+cXVhbnRpemVyXzJwYXNzOwotCW1hc3Rlci0+cHViLmlzX2R1bW15X3Bhc3MgPSBUUlVFOworICAgICAgICBjaW5mby0+Y3F1YW50aXplID0gbWFzdGVyLT5xdWFudGl6ZXJfMnBhc3M7CisgICAgICAgIG1hc3Rlci0+cHViLmlzX2R1bW15X3Bhc3MgPSBUUlVFOwogICAgICAgfSBlbHNlIGlmIChjaW5mby0+ZW5hYmxlXzFwYXNzX3F1YW50KSB7Ci0JY2luZm8tPmNxdWFudGl6ZSA9IG1hc3Rlci0+cXVhbnRpemVyXzFwYXNzOworICAgICAgICBjaW5mby0+Y3F1YW50aXplID0gbWFzdGVyLT5xdWFudGl6ZXJfMXBhc3M7CiAgICAgICB9IGVsc2UgewotCUVSUkVYSVQoY2luZm8sIEpFUlJfTU9ERV9DSEFOR0UpOworICAgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX01PREVfQ0hBTkdFKTsKICAgICAgIH0KICAgICB9CiAgICAgKCpjaW5mby0+aWRjdC0+c3RhcnRfcGFzcykgKGNpbmZvKTsKICAgICAoKmNpbmZvLT5jb2VmLT5zdGFydF9vdXRwdXRfcGFzcykgKGNpbmZvKTsKICAgICBpZiAoISBjaW5mby0+cmF3X2RhdGFfb3V0KSB7CiAgICAgICBpZiAoISBtYXN0ZXItPnVzaW5nX21lcmdlZF91cHNhbXBsZSkKLQkoKmNpbmZvLT5jY29udmVydC0+c3RhcnRfcGFzcykgKGNpbmZvKTsKKyAgICAgICAgKCpjaW5mby0+Y2NvbnZlcnQtPnN0YXJ0X3Bhc3MpIChjaW5mbyk7CiAgICAgICAoKmNpbmZvLT51cHNhbXBsZS0+c3RhcnRfcGFzcykgKGNpbmZvKTsKICAgICAgIGlmIChjaW5mby0+cXVhbnRpemVfY29sb3JzKQotCSgqY2luZm8tPmNxdWFudGl6ZS0+c3RhcnRfcGFzcykgKGNpbmZvLCBtYXN0ZXItPnB1Yi5pc19kdW1teV9wYXNzKTsKKyAgICAgICAgKCpjaW5mby0+Y3F1YW50aXplLT5zdGFydF9wYXNzKSAoY2luZm8sIG1hc3Rlci0+cHViLmlzX2R1bW15X3Bhc3MpOwogICAgICAgKCpjaW5mby0+cG9zdC0+c3RhcnRfcGFzcykgKGNpbmZvLAotCSAgICAobWFzdGVyLT5wdWIuaXNfZHVtbXlfcGFzcyA/IEpCVUZfU0FWRV9BTkRfUEFTUyA6IEpCVUZfUEFTU19USFJVKSk7CisgICAgICAgICAgICAobWFzdGVyLT5wdWIuaXNfZHVtbXlfcGFzcyA/IEpCVUZfU0FWRV9BTkRfUEFTUyA6IEpCVUZfUEFTU19USFJVKSk7CiAgICAgICAoKmNpbmZvLT5tYWluLT5zdGFydF9wYXNzKSAoY2luZm8sIEpCVUZfUEFTU19USFJVKTsKICAgICB9CiAgIH0KQEAgLTUyNCw3ICs2NTUsNyBAQAogICBpZiAoY2luZm8tPnByb2dyZXNzICE9IE5VTEwpIHsKICAgICBjaW5mby0+cHJvZ3Jlc3MtPmNvbXBsZXRlZF9wYXNzZXMgPSBtYXN0ZXItPnBhc3NfbnVtYmVyOwogICAgIGNpbmZvLT5wcm9ncmVzcy0+dG90YWxfcGFzc2VzID0gbWFzdGVyLT5wYXNzX251bWJlciArCi0JCQkJICAgIChtYXN0ZXItPnB1Yi5pc19kdW1teV9wYXNzID8gMiA6IDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hc3Rlci0+cHViLmlzX2R1bW15X3Bhc3MgPyAyIDogMSk7CiAgICAgLyogSW4gYnVmZmVyZWQtaW1hZ2UgbW9kZSwgd2UgYXNzdW1lIG9uZSBtb3JlIG91dHB1dCBwYXNzIGlmIEVPSSBub3QKICAgICAgKiB5ZXQgcmVhY2hlZCwgYnV0IG5vIG1vcmUgcGFzc2VzIGlmIEVPSSBoYXMgYmVlbiByZWFjaGVkLgogICAgICAqLwpAQCAtNTkxLDcgKzcyMiw3IEBACiAKICAgbWFzdGVyID0gKG15X21hc3Rlcl9wdHIpCiAgICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAotCQkJCSAgU0laRU9GKG15X2RlY29tcF9tYXN0ZXIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSVpFT0YobXlfZGVjb21wX21hc3RlcikpOwogICBjaW5mby0+bWFzdGVyID0gKHN0cnVjdCBqcGVnX2RlY29tcF9tYXN0ZXIgKikgbWFzdGVyOwogICBtYXN0ZXItPnB1Yi5wcmVwYXJlX2Zvcl9vdXRwdXRfcGFzcyA9IHByZXBhcmVfZm9yX291dHB1dF9wYXNzOwogICBtYXN0ZXItPnB1Yi5maW5pc2hfb3V0cHV0X3Bhc3MgPSBmaW5pc2hfb3V0cHV0X3Bhc3M7CmRpZmYgLS1naXQgYS9qZG1lcmdlLmMgYi9qZG1lcmdlLmMKaW5kZXggMTdkMjhmMS4uYzY2OWIxNyAxMDA2NDQKLS0tIGEvamRtZXJnZS5jCisrKyBiL2pkbWVyZ2UuYwpAQCAtNCw3ICs0LDcgQEAKICAqIFRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlOgogICogQ29weXJpZ2h0IChDKSAxOTk0LTE5OTYsIFRob21hcyBHLiBMYW5lLgogICogQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgotICogTW9kaWZpY2F0aW9uczoKKyAqIGxpYmpwZWctdHVyYm8gTW9kaWZpY2F0aW9uczoKICAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSwgRC4gUi4gQ29tbWFuZGVyLgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgogICoKQEAgLTE3LDE5ICsxNywxOSBAQAogICogKGllLCBib3ggZmlsdGVyaW5nKSwgd2UgY2FuIHNhdmUgc29tZSB3b3JrIGluIGNvbG9yIGNvbnZlcnNpb24gYnkKICAqIGNhbGN1bGF0aW5nIGFsbCB0aGUgb3V0cHV0IHBpeGVscyBjb3JyZXNwb25kaW5nIHRvIGEgcGFpciBvZiBjaHJvbWEKICAqIHNhbXBsZXMgYXQgb25lIHRpbWUuICBJbiB0aGUgY29udmVyc2lvbiBlcXVhdGlvbnMKLSAqCVIgPSBZICAgICAgICAgICArIEsxICogQ3IKLSAqCUcgPSBZICsgSzIgKiBDYiArIEszICogQ3IKLSAqCUIgPSBZICsgSzQgKiBDYgorICogICAgICBSID0gWSAgICAgICAgICAgKyBLMSAqIENyCisgKiAgICAgIEcgPSBZICsgSzIgKiBDYiArIEszICogQ3IKKyAqICAgICAgQiA9IFkgKyBLNCAqIENiCiAgKiBvbmx5IHRoZSBZIHRlcm0gdmFyaWVzIGFtb25nIHRoZSBncm91cCBvZiBwaXhlbHMgY29ycmVzcG9uZGluZyB0byBhIHBhaXIKICAqIG9mIGNocm9tYSBzYW1wbGVzLCBzbyB0aGUgcmVzdCBvZiB0aGUgdGVybXMgY2FuIGJlIGNhbGN1bGF0ZWQganVzdCBvbmNlLgogICogQXQgdHlwaWNhbCBzYW1wbGluZyByYXRpb3MsIHRoaXMgZWxpbWluYXRlcyBoYWxmIG9yIHRocmVlLXF1YXJ0ZXJzIG9mIHRoZQogICogbXVsdGlwbGljYXRpb25zIG5lZWRlZCBmb3IgY29sb3IgY29udmVyc2lvbi4KICAqCiAgKiBUaGlzIGZpbGUgY3VycmVudGx5IHByb3ZpZGVzIGltcGxlbWVudGF0aW9ucyBmb3IgdGhlIGZvbGxvd2luZyBjYXNlczoKLSAqCVlDYkNyID0+IFJHQiBjb2xvciBjb252ZXJzaW9uIG9ubHkuCi0gKglTYW1wbGluZyByYXRpb3Mgb2YgMmgxdiBvciAyaDJ2LgotICoJTm8gc2NhbGluZyBuZWVkZWQgYXQgdXBzYW1wbGUgdGltZS4KLSAqCUNvcm5lci1hbGlnbmVkIChub24tQ0NJUjYwMSkgc2FtcGxpbmcgYWxpZ25tZW50LgorICogICAgICBZQ2JDciA9PiBSR0IgY29sb3IgY29udmVyc2lvbiBvbmx5LgorICogICAgICBTYW1wbGluZyByYXRpb3Mgb2YgMmgxdiBvciAyaDJ2LgorICogICAgICBObyBzY2FsaW5nIG5lZWRlZCBhdCB1cHNhbXBsZSB0aW1lLgorICogICAgICBDb3JuZXItYWxpZ25lZCAobm9uLUNDSVI2MDEpIHNhbXBsaW5nIGFsaWdubWVudC4KICAqIE90aGVyIHNwZWNpYWwgY2FzZXMgY291bGQgYmUgYWRkZWQsIGJ1dCBpbiBtb3N0IGFwcGxpY2F0aW9ucyB0aGVzZSBhcmUKICAqIHRoZSBvbmx5IGNvbW1vbiBjYXNlcy4gIChGb3IgdW5jb21tb24gY2FzZXMgd2UgZmFsbCBiYWNrIG9uIHRoZSBtb3JlCiAgKiBnZW5lcmFsIGNvZGUgaW4gamRzYW1wbGUuYyBhbmQgamRjb2xvci5jLikKQEAgLTM5LDcgKzM5LDcgQEAKICNpbmNsdWRlICJqaW5jbHVkZS5oIgogI2luY2x1ZGUgImpwZWdsaWIuaCIKICNpbmNsdWRlICJqc2ltZC5oIgotI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImpjb25maWdpbnQuaCIKIAogI2lmZGVmIFVQU0FNUExFX01FUkdJTkdfU1VQUE9SVEVECiAKQEAgLTQ3LDE4ICs0NywxOCBAQAogLyogUHJpdmF0ZSBzdWJvYmplY3QgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgewotICBzdHJ1Y3QganBlZ191cHNhbXBsZXIgcHViOwkvKiBwdWJsaWMgZmllbGRzICovCisgIHN0cnVjdCBqcGVnX3Vwc2FtcGxlciBwdWI7ICAgIC8qIHB1YmxpYyBmaWVsZHMgKi8KIAogICAvKiBQb2ludGVyIHRvIHJvdXRpbmUgdG8gZG8gYWN0dWFsIHVwc2FtcGxpbmcvY29udmVyc2lvbiBvZiBvbmUgcm93IGdyb3VwICovCiAgIEpNRVRIT0Qodm9pZCwgdXBtZXRob2QsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAotCQkJICAgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwKLQkJCSAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZikpOwogCiAgIC8qIFByaXZhdGUgc3RhdGUgZm9yIFlDQy0+UkdCIGNvbnZlcnNpb24gKi8KLSAgaW50ICogQ3Jfcl90YWI7CQkvKiA9PiB0YWJsZSBmb3IgQ3IgdG8gUiBjb252ZXJzaW9uICovCi0gIGludCAqIENiX2JfdGFiOwkJLyogPT4gdGFibGUgZm9yIENiIHRvIEIgY29udmVyc2lvbiAqLwotICBJTlQzMiAqIENyX2dfdGFiOwkJLyogPT4gdGFibGUgZm9yIENyIHRvIEcgY29udmVyc2lvbiAqLwotICBJTlQzMiAqIENiX2dfdGFiOwkJLyogPT4gdGFibGUgZm9yIENiIHRvIEcgY29udmVyc2lvbiAqLworICBpbnQgKiBDcl9yX3RhYjsgICAgICAgICAgICAgICAvKiA9PiB0YWJsZSBmb3IgQ3IgdG8gUiBjb252ZXJzaW9uICovCisgIGludCAqIENiX2JfdGFiOyAgICAgICAgICAgICAgIC8qID0+IHRhYmxlIGZvciBDYiB0byBCIGNvbnZlcnNpb24gKi8KKyAgSU5UMzIgKiBDcl9nX3RhYjsgICAgICAgICAgICAgLyogPT4gdGFibGUgZm9yIENyIHRvIEcgY29udmVyc2lvbiAqLworICBJTlQzMiAqIENiX2dfdGFiOyAgICAgICAgICAgICAvKiA9PiB0YWJsZSBmb3IgQ2IgdG8gRyBjb252ZXJzaW9uICovCiAKICAgLyogRm9yIDI6MSB2ZXJ0aWNhbCBzYW1wbGluZywgd2UgcHJvZHVjZSB0d28gb3V0cHV0IHJvd3MgYXQgYSB0aW1lLgogICAgKiBXZSBuZWVkIGEgInNwYXJlIiByb3cgYnVmZmVyIHRvIGhvbGQgdGhlIHNlY29uZCBvdXRwdXQgcm93IGlmIHRoZQpAQCAtNjYsMTcgKzY2LDE3IEBACiAgICAqIHRvIGRpc2NhcmQgdGhlIGR1bW15IGxhc3Qgcm93IGlmIHRoZSBpbWFnZSBoZWlnaHQgaXMgb2RkLgogICAgKi8KICAgSlNBTVBST1cgc3BhcmVfcm93OwotICBib29sZWFuIHNwYXJlX2Z1bGw7CQkvKiBUIGlmIHNwYXJlIGJ1ZmZlciBpcyBvY2N1cGllZCAqLworICBib29sZWFuIHNwYXJlX2Z1bGw7ICAgICAgICAgICAvKiBUIGlmIHNwYXJlIGJ1ZmZlciBpcyBvY2N1cGllZCAqLwogCi0gIEpESU1FTlNJT04gb3V0X3Jvd193aWR0aDsJLyogc2FtcGxlcyBwZXIgb3V0cHV0IHJvdyAqLwotICBKRElNRU5TSU9OIHJvd3NfdG9fZ287CS8qIGNvdW50cyByb3dzIHJlbWFpbmluZyBpbiBpbWFnZSAqLworICBKRElNRU5TSU9OIG91dF9yb3dfd2lkdGg7ICAgICAvKiBzYW1wbGVzIHBlciBvdXRwdXQgcm93ICovCisgIEpESU1FTlNJT04gcm93c190b19nbzsgICAgICAgIC8qIGNvdW50cyByb3dzIHJlbWFpbmluZyBpbiBpbWFnZSAqLwogfSBteV91cHNhbXBsZXI7CiAKIHR5cGVkZWYgbXlfdXBzYW1wbGVyICogbXlfdXBzYW1wbGVfcHRyOwogCi0jZGVmaW5lIFNDQUxFQklUUwkxNgkvKiBzcGVlZGllc3QgcmlnaHQtc2hpZnQgb24gc29tZSBtYWNoaW5lcyAqLwotI2RlZmluZSBPTkVfSEFMRgkoKElOVDMyKSAxIDw8IChTQ0FMRUJJVFMtMSkpCi0jZGVmaW5lIEZJWCh4KQkJKChJTlQzMikgKCh4KSAqICgxTDw8U0NBTEVCSVRTKSArIDAuNSkpCisjZGVmaW5lIFNDQUxFQklUUyAgICAgICAxNiAgICAgIC8qIHNwZWVkaWVzdCByaWdodC1zaGlmdCBvbiBzb21lIG1hY2hpbmVzICovCisjZGVmaW5lIE9ORV9IQUxGICAgICAgICAoKElOVDMyKSAxIDw8IChTQ0FMRUJJVFMtMSkpCisjZGVmaW5lIEZJWCh4KSAgICAgICAgICAoKElOVDMyKSAoKHgpICogKDFMPDxTQ0FMRUJJVFMpICsgMC41KSkKIAogCiAvKiBJbmNsdWRlIGlubGluZSByb3V0aW5lcyBmb3IgY29sb3JzcGFjZSBleHRlbnNpb25zICovCkBAIC0xOTUsMjYgKzE5NSwyNiBAQAogCiAgIHVwc2FtcGxlLT5Dcl9yX3RhYiA9IChpbnQgKikKICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAotCQkJCShNQVhKU0FNUExFKzEpICogU0laRU9GKGludCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTUFYSlNBTVBMRSsxKSAqIFNJWkVPRihpbnQpKTsKICAgdXBzYW1wbGUtPkNiX2JfdGFiID0gKGludCAqKQogICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCi0JCQkJKE1BWEpTQU1QTEUrMSkgKiBTSVpFT0YoaW50KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChNQVhKU0FNUExFKzEpICogU0laRU9GKGludCkpOwogICB1cHNhbXBsZS0+Q3JfZ190YWIgPSAoSU5UMzIgKikKICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAotCQkJCShNQVhKU0FNUExFKzEpICogU0laRU9GKElOVDMyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChNQVhKU0FNUExFKzEpICogU0laRU9GKElOVDMyKSk7CiAgIHVwc2FtcGxlLT5DYl9nX3RhYiA9IChJTlQzMiAqKQogICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCi0JCQkJKE1BWEpTQU1QTEUrMSkgKiBTSVpFT0YoSU5UMzIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE1BWEpTQU1QTEUrMSkgKiBTSVpFT0YoSU5UMzIpKTsKIAogICBmb3IgKGkgPSAwLCB4ID0gLUNFTlRFUkpTQU1QTEU7IGkgPD0gTUFYSlNBTVBMRTsgaSsrLCB4KyspIHsKICAgICAvKiBpIGlzIHRoZSBhY3R1YWwgaW5wdXQgcGl4ZWwgdmFsdWUsIGluIHRoZSByYW5nZSAwLi5NQVhKU0FNUExFICovCiAgICAgLyogVGhlIENiIG9yIENyIHZhbHVlIHdlIGFyZSB0aGlua2luZyBvZiBpcyB4ID0gaSAtIENFTlRFUkpTQU1QTEUgKi8KICAgICAvKiBDcj0+UiB2YWx1ZSBpcyBuZWFyZXN0IGludCB0byAxLjQwMjAwICogeCAqLwogICAgIHVwc2FtcGxlLT5Dcl9yX3RhYltpXSA9IChpbnQpCi0JCSAgICBSSUdIVF9TSElGVChGSVgoMS40MDIwMCkgKiB4ICsgT05FX0hBTEYsIFNDQUxFQklUUyk7CisgICAgICAgICAgICAgICAgICAgIFJJR0hUX1NISUZUKEZJWCgxLjQwMjAwKSAqIHggKyBPTkVfSEFMRiwgU0NBTEVCSVRTKTsKICAgICAvKiBDYj0+QiB2YWx1ZSBpcyBuZWFyZXN0IGludCB0byAxLjc3MjAwICogeCAqLwogICAgIHVwc2FtcGxlLT5DYl9iX3RhYltpXSA9IChpbnQpCi0JCSAgICBSSUdIVF9TSElGVChGSVgoMS43NzIwMCkgKiB4ICsgT05FX0hBTEYsIFNDQUxFQklUUyk7CisgICAgICAgICAgICAgICAgICAgIFJJR0hUX1NISUZUKEZJWCgxLjc3MjAwKSAqIHggKyBPTkVfSEFMRiwgU0NBTEVCSVRTKTsKICAgICAvKiBDcj0+RyB2YWx1ZSBpcyBzY2FsZWQtdXAgLTAuNzE0MTQgKiB4ICovCiAgICAgdXBzYW1wbGUtPkNyX2dfdGFiW2ldID0gKC0gRklYKDAuNzE0MTQpKSAqIHg7CiAgICAgLyogQ2I9PkcgdmFsdWUgaXMgc2NhbGVkLXVwIC0wLjM0NDE0ICogeCAqLwpAQCAtMjQ4LDIwICsyNDgsMjAgQEAKIAogTUVUSE9EREVGKHZvaWQpCiBtZXJnZWRfMnZfdXBzYW1wbGUgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCi0JCSAgICBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiAqaW5fcm93X2dyb3VwX2N0ciwKLQkJICAgIEpESU1FTlNJT04gaW5fcm93X2dyb3Vwc19hdmFpbCwKLQkJICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiAqb3V0X3Jvd19jdHIsCi0JCSAgICBKRElNRU5TSU9OIG91dF9yb3dzX2F2YWlsKQorICAgICAgICAgICAgICAgICAgICBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiAqaW5fcm93X2dyb3VwX2N0ciwKKyAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBzX2F2YWlsLAorICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gKm91dF9yb3dfY3RyLAorICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dF9yb3dzX2F2YWlsKQogLyogMjoxIHZlcnRpY2FsIHNhbXBsaW5nIGNhc2U6IG1heSBuZWVkIGEgc3BhcmUgcm93LiAqLwogewogICBteV91cHNhbXBsZV9wdHIgdXBzYW1wbGUgPSAobXlfdXBzYW1wbGVfcHRyKSBjaW5mby0+dXBzYW1wbGU7CiAgIEpTQU1QUk9XIHdvcmtfcHRyc1syXTsKLSAgSkRJTUVOU0lPTiBudW1fcm93czsJCS8qIG51bWJlciBvZiByb3dzIHJldHVybmVkIHRvIGNhbGxlciAqLworICBKRElNRU5TSU9OIG51bV9yb3dzOyAgICAgICAgICAvKiBudW1iZXIgb2Ygcm93cyByZXR1cm5lZCB0byBjYWxsZXIgKi8KIAogICBpZiAodXBzYW1wbGUtPnNwYXJlX2Z1bGwpIHsKICAgICAvKiBJZiB3ZSBoYXZlIGEgc3BhcmUgcm93IHNhdmVkIGZyb20gYSBwcmV2aW91cyBjeWNsZSwganVzdCByZXR1cm4gaXQuICovCiAgICAgamNvcHlfc2FtcGxlX3Jvd3MoJiB1cHNhbXBsZS0+c3BhcmVfcm93LCAwLCBvdXRwdXRfYnVmICsgKm91dF9yb3dfY3RyLCAwLAotCQkgICAgICAxLCB1cHNhbXBsZS0+b3V0X3Jvd193aWR0aCk7CisgICAgICAgICAgICAgICAgICAgICAgMSwgdXBzYW1wbGUtPm91dF9yb3dfd2lkdGgpOwogICAgIG51bV9yb3dzID0gMTsKICAgICB1cHNhbXBsZS0+c3BhcmVfZnVsbCA9IEZBTFNFOwogICB9IGVsc2UgewpAQCAtMjk3LDE3ICsyOTcsMTcgQEAKIAogTUVUSE9EREVGKHZvaWQpCiBtZXJnZWRfMXZfdXBzYW1wbGUgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCi0JCSAgICBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiAqaW5fcm93X2dyb3VwX2N0ciwKLQkJICAgIEpESU1FTlNJT04gaW5fcm93X2dyb3Vwc19hdmFpbCwKLQkJICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiAqb3V0X3Jvd19jdHIsCi0JCSAgICBKRElNRU5TSU9OIG91dF9yb3dzX2F2YWlsKQorICAgICAgICAgICAgICAgICAgICBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiAqaW5fcm93X2dyb3VwX2N0ciwKKyAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBzX2F2YWlsLAorICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gKm91dF9yb3dfY3RyLAorICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dF9yb3dzX2F2YWlsKQogLyogMToxIHZlcnRpY2FsIHNhbXBsaW5nIGNhc2U6IG11Y2ggZWFzaWVyLCBuZXZlciBuZWVkIGEgc3BhcmUgcm93LiAqLwogewogICBteV91cHNhbXBsZV9wdHIgdXBzYW1wbGUgPSAobXlfdXBzYW1wbGVfcHRyKSBjaW5mby0+dXBzYW1wbGU7CiAKICAgLyogSnVzdCBkbyB0aGUgdXBzYW1wbGluZy4gKi8KICAgKCp1cHNhbXBsZS0+dXBtZXRob2QpIChjaW5mbywgaW5wdXRfYnVmLCAqaW5fcm93X2dyb3VwX2N0ciwKLQkJCSBvdXRwdXRfYnVmICsgKm91dF9yb3dfY3RyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfYnVmICsgKm91dF9yb3dfY3RyKTsKICAgLyogQWRqdXN0IGNvdW50cyAqLwogICAoKm91dF9yb3dfY3RyKSsrOwogICAoKmluX3Jvd19ncm91cF9jdHIpKys7CkBAIC0zMzAsOCArMzMwLDggQEAKIAogTUVUSE9EREVGKHZvaWQpCiBoMnYxX21lcmdlZF91cHNhbXBsZSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKLQkJICAgICAgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwKLQkJICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKQorICAgICAgICAgICAgICAgICAgICAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsCisgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKQogewogICBzd2l0Y2ggKGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UpIHsKICAgICBjYXNlIEpDU19FWFRfUkdCOgpAQCAtMzc2LDggKzM3Niw4IEBACiAKIE1FVEhPRERFRih2b2lkKQogaDJ2Ml9tZXJnZWRfdXBzYW1wbGUgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCi0JCSAgICAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsCi0JCSAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZikKKyAgICAgICAgICAgICAgICAgICAgICBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLAorICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZikKIHsKICAgc3dpdGNoIChjaW5mby0+b3V0X2NvbG9yX3NwYWNlKSB7CiAgICAgY2FzZSBKQ1NfRVhUX1JHQjoKQEAgLTQzMSw3ICs0MzEsNyBAQAogCiAgIHVwc2FtcGxlID0gKG15X3Vwc2FtcGxlX3B0cikKICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAotCQkJCVNJWkVPRihteV91cHNhbXBsZXIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0laRU9GKG15X3Vwc2FtcGxlcikpOwogICBjaW5mby0+dXBzYW1wbGUgPSAoc3RydWN0IGpwZWdfdXBzYW1wbGVyICopIHVwc2FtcGxlOwogICB1cHNhbXBsZS0+cHViLnN0YXJ0X3Bhc3MgPSBzdGFydF9wYXNzX21lcmdlZF91cHNhbXBsZTsKICAgdXBzYW1wbGUtPnB1Yi5uZWVkX2NvbnRleHRfcm93cyA9IEZBTFNFOwpAQCAtNDQ3LDcgKzQ0Nyw3IEBACiAgICAgLyogQWxsb2NhdGUgYSBzcGFyZSByb3cgYnVmZmVyICovCiAgICAgdXBzYW1wbGUtPnNwYXJlX3JvdyA9IChKU0FNUFJPVykKICAgICAgICgqY2luZm8tPm1lbS0+YWxsb2NfbGFyZ2UpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCi0JCShzaXplX3QpICh1cHNhbXBsZS0+b3V0X3Jvd193aWR0aCAqIFNJWkVPRihKU0FNUExFKSkpOworICAgICAgICAgICAgICAgIChzaXplX3QpICh1cHNhbXBsZS0+b3V0X3Jvd193aWR0aCAqIFNJWkVPRihKU0FNUExFKSkpOwogICB9IGVsc2UgewogICAgIHVwc2FtcGxlLT5wdWIudXBzYW1wbGUgPSBtZXJnZWRfMXZfdXBzYW1wbGU7CiAgICAgaWYgKGpzaW1kX2Nhbl9oMnYxX21lcmdlZF91cHNhbXBsZSgpKQpkaWZmIC0tZ2l0IGEvamRtcmdleHQuYyBiL2pkbXJnZXh0LmMKaW5kZXggZTFhYjFlNS4uMWYwYTU1MCAxMDA2NDQKLS0tIGEvamRtcmdleHQuYworKysgYi9qZG1yZ2V4dC5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIFRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlOgogICogQ29weXJpZ2h0IChDKSAxOTk0LTE5OTYsIFRob21hcyBHLiBMYW5lLgotICogTW9kaWZpY2F0aW9uczoKKyAqIGxpYmpwZWctdHVyYm8gTW9kaWZpY2F0aW9uczoKICAqIENvcHlyaWdodCAoQykgMjAxMSwgRC4gUi4gQ29tbWFuZGVyLgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgogICoKZGlmZiAtLWdpdCBhL2pkcGh1ZmYuYyBiL2pkcGh1ZmYuYwppbmRleCAyMjY3ODA5Li43ODNkOGE4IDEwMDY0NAotLS0gYS9qZHBodWZmLmMKKysrIGIvamRwaHVmZi5jCkBAIC0xNyw3ICsxNyw3IEBACiAjZGVmaW5lIEpQRUdfSU5URVJOQUxTCiAjaW5jbHVkZSAiamluY2x1ZGUuaCIKICNpbmNsdWRlICJqcGVnbGliLmgiCi0jaW5jbHVkZSAiamRodWZmLmgiCQkvKiBEZWNsYXJhdGlvbnMgc2hhcmVkIHdpdGggamRodWZmLmMgKi8KKyNpbmNsdWRlICJqZGh1ZmYuaCIgICAgICAgICAgICAgLyogRGVjbGFyYXRpb25zIHNoYXJlZCB3aXRoIGpkaHVmZi5jICovCiAKIAogI2lmZGVmIERfUFJPR1JFU1NJVkVfU1VQUE9SVEVECkBAIC0zMCw4ICszMCw4IEBACiAgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgewotICB1bnNpZ25lZCBpbnQgRU9CUlVOOwkJCS8qIHJlbWFpbmluZyBFT0JzIGluIEVPQlJVTiAqLwotICBpbnQgbGFzdF9kY192YWxbTUFYX0NPTVBTX0lOX1NDQU5dOwkvKiBsYXN0IERDIGNvZWYgZm9yIGVhY2ggY29tcG9uZW50ICovCisgIHVuc2lnbmVkIGludCBFT0JSVU47ICAgICAgICAgICAgICAgICAgLyogcmVtYWluaW5nIEVPQnMgaW4gRU9CUlVOICovCisgIGludCBsYXN0X2RjX3ZhbFtNQVhfQ09NUFNfSU5fU0NBTl07ICAgLyogbGFzdCBEQyBjb2VmIGZvciBlYWNoIGNvbXBvbmVudCAqLwogfSBzYXZhYmxlX3N0YXRlOwogCiAvKiBUaGlzIG1hY3JvIGlzIHRvIHdvcmsgYXJvdW5kIGNvbXBpbGVycyB3aXRoIG1pc3Npbmcgb3IgYnJva2VuCkBAIC00NCwxMSArNDQsMTEgQEAKICNlbHNlCiAjaWYgTUFYX0NPTVBTX0lOX1NDQU4gPT0gNAogI2RlZmluZSBBU1NJR05fU1RBVEUoZGVzdCxzcmMpICBcCi0JKChkZXN0KS5FT0JSVU4gPSAoc3JjKS5FT0JSVU4sIFwKLQkgKGRlc3QpLmxhc3RfZGNfdmFsWzBdID0gKHNyYykubGFzdF9kY192YWxbMF0sIFwKLQkgKGRlc3QpLmxhc3RfZGNfdmFsWzFdID0gKHNyYykubGFzdF9kY192YWxbMV0sIFwKLQkgKGRlc3QpLmxhc3RfZGNfdmFsWzJdID0gKHNyYykubGFzdF9kY192YWxbMl0sIFwKLQkgKGRlc3QpLmxhc3RfZGNfdmFsWzNdID0gKHNyYykubGFzdF9kY192YWxbM10pCisgICAgICAgICgoZGVzdCkuRU9CUlVOID0gKHNyYykuRU9CUlVOLCBcCisgICAgICAgICAoZGVzdCkubGFzdF9kY192YWxbMF0gPSAoc3JjKS5sYXN0X2RjX3ZhbFswXSwgXAorICAgICAgICAgKGRlc3QpLmxhc3RfZGNfdmFsWzFdID0gKHNyYykubGFzdF9kY192YWxbMV0sIFwKKyAgICAgICAgIChkZXN0KS5sYXN0X2RjX3ZhbFsyXSA9IChzcmMpLmxhc3RfZGNfdmFsWzJdLCBcCisgICAgICAgICAoZGVzdCkubGFzdF9kY192YWxbM10gPSAoc3JjKS5sYXN0X2RjX3ZhbFszXSkKICNlbmRpZgogI2VuZGlmCiAKQEAgLTU5LDExICs1OSwxMSBAQAogICAvKiBUaGVzZSBmaWVsZHMgYXJlIGxvYWRlZCBpbnRvIGxvY2FsIHZhcmlhYmxlcyBhdCBzdGFydCBvZiBlYWNoIE1DVS4KICAgICogSW4gY2FzZSBvZiBzdXNwZW5zaW9uLCB3ZSBleGl0IFdJVEhPVVQgdXBkYXRpbmcgdGhlbS4KICAgICovCi0gIGJpdHJlYWRfcGVybV9zdGF0ZSBiaXRzdGF0ZTsJLyogQml0IGJ1ZmZlciBhdCBzdGFydCBvZiBNQ1UgKi8KLSAgc2F2YWJsZV9zdGF0ZSBzYXZlZDsJCS8qIE90aGVyIHN0YXRlIGF0IHN0YXJ0IG9mIE1DVSAqLworICBiaXRyZWFkX3Blcm1fc3RhdGUgYml0c3RhdGU7ICAvKiBCaXQgYnVmZmVyIGF0IHN0YXJ0IG9mIE1DVSAqLworICBzYXZhYmxlX3N0YXRlIHNhdmVkOyAgICAgICAgICAvKiBPdGhlciBzdGF0ZSBhdCBzdGFydCBvZiBNQ1UgKi8KIAogICAvKiBUaGVzZSBmaWVsZHMgYXJlIE5PVCBsb2FkZWQgaW50byBsb2NhbCB3b3JraW5nIHN0YXRlLiAqLwotICB1bnNpZ25lZCBpbnQgcmVzdGFydHNfdG9fZ287CS8qIE1DVXMgbGVmdCBpbiB0aGlzIHJlc3RhcnQgaW50ZXJ2YWwgKi8KKyAgdW5zaWduZWQgaW50IHJlc3RhcnRzX3RvX2dvOyAgLyogTUNVcyBsZWZ0IGluIHRoaXMgcmVzdGFydCBpbnRlcnZhbCAqLwogCiAgIC8qIFBvaW50ZXJzIHRvIGRlcml2ZWQgdGFibGVzICh0aGVzZSB3b3Jrc3BhY2VzIGhhdmUgaW1hZ2UgbGlmZXNwYW4pICovCiAgIGRfZGVyaXZlZF90YmwgKiBkZXJpdmVkX3RibHNbTlVNX0hVRkZfVEJMU107CkBAIC03NSwxMyArNzUsMTMgQEAKIAogLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KIE1FVEhPRERFRihib29sZWFuKSBkZWNvZGVfbWN1X0RDX2ZpcnN0IEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKLQkJCQkJICAgIEpCTE9DS1JPVyAqTUNVX2RhdGEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkJMT0NLUk9XICpNQ1VfZGF0YSkpOwogTUVUSE9EREVGKGJvb2xlYW4pIGRlY29kZV9tY3VfQUNfZmlyc3QgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAotCQkJCQkgICAgSkJMT0NLUk9XICpNQ1VfZGF0YSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKQkxPQ0tST1cgKk1DVV9kYXRhKSk7CiBNRVRIT0RERUYoYm9vbGVhbikgZGVjb2RlX21jdV9EQ19yZWZpbmUgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAotCQkJCQkgICAgIEpCTE9DS1JPVyAqTUNVX2RhdGEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpCTE9DS1JPVyAqTUNVX2RhdGEpKTsKIE1FVEhPRERFRihib29sZWFuKSBkZWNvZGVfbWN1X0FDX3JlZmluZSBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCi0JCQkJCSAgICAgSkJMT0NLUk9XICpNQ1VfZGF0YSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkJMT0NLUk9XICpNQ1VfZGF0YSkpOwogCiAKIC8qCkBAIC0xMTcsNyArMTE3LDcgQEAKICAgICBpZiAoY2luZm8tPkFsICE9IGNpbmZvLT5BaC0xKQogICAgICAgYmFkID0gVFJVRTsKICAgfQotICBpZiAoY2luZm8tPkFsID4gMTMpCQkvKiBuZWVkIG5vdCBjaGVjayBmb3IgPCAwICovCisgIGlmIChjaW5mby0+QWwgPiAxMykgICAgICAgICAgIC8qIG5lZWQgbm90IGNoZWNrIGZvciA8IDAgKi8KICAgICBiYWQgPSBUUlVFOwogICAvKiBBcmd1YWJseSB0aGUgbWF4aW11bSBBbCB2YWx1ZSBzaG91bGQgYmUgbGVzcyB0aGFuIDEzIGZvciA4LWJpdCBwcmVjaXNpb24sCiAgICAqIGJ1dCB0aGUgc3BlYyBkb2Vzbid0IHNheSBzbywgYW5kIHdlIHRyeSB0byBiZSBsaWJlcmFsIGFib3V0IHdoYXQgd2UKQEAgLTEyNyw3ICsxMjcsNyBAQAogICAgKi8KICAgaWYgKGJhZCkKICAgICBFUlJFWElUNChjaW5mbywgSkVSUl9CQURfUFJPR1JFU1NJT04sCi0JICAgICBjaW5mby0+U3MsIGNpbmZvLT5TZSwgY2luZm8tPkFoLCBjaW5mby0+QWwpOworICAgICAgICAgICAgIGNpbmZvLT5TcywgY2luZm8tPlNlLCBjaW5mby0+QWgsIGNpbmZvLT5BbCk7CiAgIC8qIFVwZGF0ZSBwcm9ncmVzc2lvbiBzdGF0dXMsIGFuZCB2ZXJpZnkgdGhhdCBzY2FuIG9yZGVyIGlzIGxlZ2FsLgogICAgKiBOb3RlIHRoYXQgaW50ZXItc2NhbiBpbmNvbnNpc3RlbmNpZXMgYXJlIHRyZWF0ZWQgYXMgd2FybmluZ3MKICAgICogbm90IGZhdGFsIGVycm9ycyAuLi4gbm90IGNsZWFyIGlmIHRoaXMgaXMgcmlnaHQgd2F5IHRvIGJlaGF2ZS4KQEAgLTE0MCw3ICsxNDAsNyBAQAogICAgIGZvciAoY29lZmkgPSBjaW5mby0+U3M7IGNvZWZpIDw9IGNpbmZvLT5TZTsgY29lZmkrKykgewogICAgICAgaW50IGV4cGVjdGVkID0gKGNvZWZfYml0X3B0cltjb2VmaV0gPCAwKSA/IDAgOiBjb2VmX2JpdF9wdHJbY29lZmldOwogICAgICAgaWYgKGNpbmZvLT5BaCAhPSBleHBlY3RlZCkKLQlXQVJOTVMyKGNpbmZvLCBKV1JOX0JPR1VTX1BST0dSRVNTSU9OLCBjaW5kZXgsIGNvZWZpKTsKKyAgICAgICAgV0FSTk1TMihjaW5mbywgSldSTl9CT0dVU19QUk9HUkVTU0lPTiwgY2luZGV4LCBjb2VmaSk7CiAgICAgICBjb2VmX2JpdF9wdHJbY29lZmldID0gY2luZm8tPkFsOwogICAgIH0KICAgfQpAQCAtMTY0LDE1ICsxNjQsMTUgQEAKICAgICAgKiBXZSBtYXkgYnVpbGQgc2FtZSBkZXJpdmVkIHRhYmxlIG1vcmUgdGhhbiBvbmNlLCBidXQgaXQncyBub3QgZXhwZW5zaXZlLgogICAgICAqLwogICAgIGlmIChpc19EQ19iYW5kKSB7Ci0gICAgICBpZiAoY2luZm8tPkFoID09IDApIHsJLyogREMgcmVmaW5lbWVudCBuZWVkcyBubyB0YWJsZSAqLwotCXRibCA9IGNvbXBwdHItPmRjX3RibF9ubzsKLQlqcGVnX21ha2VfZF9kZXJpdmVkX3RibChjaW5mbywgVFJVRSwgdGJsLAotCQkJCSYgZW50cm9weS0+ZGVyaXZlZF90YmxzW3RibF0pOworICAgICAgaWYgKGNpbmZvLT5BaCA9PSAwKSB7ICAgICAvKiBEQyByZWZpbmVtZW50IG5lZWRzIG5vIHRhYmxlICovCisgICAgICAgIHRibCA9IGNvbXBwdHItPmRjX3RibF9ubzsKKyAgICAgICAganBlZ19tYWtlX2RfZGVyaXZlZF90YmwoY2luZm8sIFRSVUUsIHRibCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBlbnRyb3B5LT5kZXJpdmVkX3RibHNbdGJsXSk7CiAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgIHRibCA9IGNvbXBwdHItPmFjX3RibF9ubzsKICAgICAgIGpwZWdfbWFrZV9kX2Rlcml2ZWRfdGJsKGNpbmZvLCBGQUxTRSwgdGJsLAotCQkJICAgICAgJiBlbnRyb3B5LT5kZXJpdmVkX3RibHNbdGJsXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIGVudHJvcHktPmRlcml2ZWRfdGJsc1t0YmxdKTsKICAgICAgIC8qIHJlbWVtYmVyIHRoZSBzaW5nbGUgYWN0aXZlIHRhYmxlICovCiAgICAgICBlbnRyb3B5LT5hY19kZXJpdmVkX3RibCA9IGVudHJvcHktPmRlcml2ZWRfdGJsc1t0YmxdOwogICAgIH0KQEAgLTE5OCw2ICsxOTgsNyBAQAogICogT24gc29tZSBtYWNoaW5lcywgYSBzaGlmdCBhbmQgYWRkIHdpbGwgYmUgZmFzdGVyIHRoYW4gYSB0YWJsZSBsb29rdXAuCiAgKi8KIAorI2RlZmluZSBBVk9JRF9UQUJMRVMKICNpZmRlZiBBVk9JRF9UQUJMRVMKIAogI2RlZmluZSBIVUZGX0VYVEVORCh4LHMpICAoKHgpIDwgKDE8PCgocyktMSkpID8gKHgpICsgKCgoLTEpPDwocykpICsgMSkgOiAoeCkpCkBAIC0yNjMsNyArMjY0LDcgQEAKIC8qCiAgKiBIdWZmbWFuIE1DVSBkZWNvZGluZy4KICAqIEVhY2ggb2YgdGhlc2Ugcm91dGluZXMgZGVjb2RlcyBhbmQgcmV0dXJucyBvbmUgTUNVJ3Mgd29ydGggb2YKLSAqIEh1ZmZtYW4tY29tcHJlc3NlZCBjb2VmZmljaWVudHMuIAorICogSHVmZm1hbi1jb21wcmVzc2VkIGNvZWZmaWNpZW50cy4KICAqIFRoZSBjb2VmZmljaWVudHMgYXJlIHJlb3JkZXJlZCBmcm9tIHppZ3phZyBvcmRlciBpbnRvIG5hdHVyYWwgYXJyYXkgb3JkZXIsCiAgKiBidXQgYXJlIG5vdCBkZXF1YW50aXplZC4KICAqCkBAIC0yODQsNyArMjg1LDcgQEAKIAogTUVUSE9EREVGKGJvb2xlYW4pCiBkZWNvZGVfbWN1X0RDX2ZpcnN0IChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKQkxPQ0tST1cgKk1DVV9kYXRhKQoteyAgIAorewogICBwaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5ID0gKHBodWZmX2VudHJvcHlfcHRyKSBjaW5mby0+ZW50cm9weTsKICAgaW50IEFsID0gY2luZm8tPkFsOwogICByZWdpc3RlciBpbnQgcywgcjsKQEAgLTI5OSw3ICszMDAsNyBAQAogICBpZiAoY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWwpIHsKICAgICBpZiAoZW50cm9weS0+cmVzdGFydHNfdG9fZ28gPT0gMCkKICAgICAgIGlmICghIHByb2Nlc3NfcmVzdGFydChjaW5mbykpCi0JcmV0dXJuIEZBTFNFOworICAgICAgICByZXR1cm4gRkFMU0U7CiAgIH0KIAogICAvKiBJZiB3ZSd2ZSBydW4gb3V0IG9mIGRhdGEsIGp1c3QgbGVhdmUgdGhlIE1DVSBzZXQgdG8gemVyb2VzLgpAQCAtMzI0LDkgKzMyNSw5IEBACiAgICAgICAvKiBTZWN0aW9uIEYuMi4yLjE6IGRlY29kZSB0aGUgREMgY29lZmZpY2llbnQgZGlmZmVyZW5jZSAqLwogICAgICAgSFVGRl9ERUNPREUocywgYnJfc3RhdGUsIHRibCwgcmV0dXJuIEZBTFNFLCBsYWJlbDEpOwogICAgICAgaWYgKHMpIHsKLQlDSEVDS19CSVRfQlVGRkVSKGJyX3N0YXRlLCBzLCByZXR1cm4gRkFMU0UpOwotCXIgPSBHRVRfQklUUyhzKTsKLQlzID0gSFVGRl9FWFRFTkQociwgcyk7CisgICAgICAgIENIRUNLX0JJVF9CVUZGRVIoYnJfc3RhdGUsIHMsIHJldHVybiBGQUxTRSk7CisgICAgICAgIHIgPSBHRVRfQklUUyhzKTsKKyAgICAgICAgcyA9IEhVRkZfRVhURU5EKHIsIHMpOwogICAgICAgfQogCiAgICAgICAvKiBDb252ZXJ0IERDIGRpZmZlcmVuY2UgdG8gYWN0dWFsIHZhbHVlLCB1cGRhdGUgbGFzdF9kY192YWwgKi8KQEAgLTM1NSw3ICszNTYsNyBAQAogCiBNRVRIT0RERUYoYm9vbGVhbikKIGRlY29kZV9tY3VfQUNfZmlyc3QgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpCTE9DS1JPVyAqTUNVX2RhdGEpCi17ICAgCit7CiAgIHBodWZmX2VudHJvcHlfcHRyIGVudHJvcHkgPSAocGh1ZmZfZW50cm9weV9wdHIpIGNpbmZvLT5lbnRyb3B5OwogICBpbnQgU2UgPSBjaW5mby0+U2U7CiAgIGludCBBbCA9IGNpbmZvLT5BbDsKQEAgLTM2OSw3ICszNzAsNyBAQAogICBpZiAoY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWwpIHsKICAgICBpZiAoZW50cm9weS0+cmVzdGFydHNfdG9fZ28gPT0gMCkKICAgICAgIGlmICghIHByb2Nlc3NfcmVzdGFydChjaW5mbykpCi0JcmV0dXJuIEZBTFNFOworICAgICAgICByZXR1cm4gRkFMU0U7CiAgIH0KIAogICAvKiBJZiB3ZSd2ZSBydW4gb3V0IG9mIGRhdGEsIGp1c3QgbGVhdmUgdGhlIE1DVSBzZXQgdG8gemVyb2VzLgpAQCAtMzgwLDQ5ICszODEsNDkgQEAKICAgICAvKiBMb2FkIHVwIHdvcmtpbmcgc3RhdGUuCiAgICAgICogV2UgY2FuIGF2b2lkIGxvYWRpbmcvc2F2aW5nIGJpdHJlYWQgc3RhdGUgaWYgaW4gYW4gRU9CIHJ1bi4KICAgICAgKi8KLSAgICBFT0JSVU4gPSBlbnRyb3B5LT5zYXZlZC5FT0JSVU47CS8qIG9ubHkgcGFydCBvZiBzYXZlZCBzdGF0ZSB3ZSBuZWVkICovCisgICAgRU9CUlVOID0gZW50cm9weS0+c2F2ZWQuRU9CUlVOOyAgICAgLyogb25seSBwYXJ0IG9mIHNhdmVkIHN0YXRlIHdlIG5lZWQgKi8KIAogICAgIC8qIFRoZXJlIGlzIGFsd2F5cyBvbmx5IG9uZSBibG9jayBwZXIgTUNVICovCiAKLSAgICBpZiAoRU9CUlVOID4gMCkJCS8qIGlmIGl0J3MgYSBiYW5kIG9mIHplcm9lcy4uLiAqLwotICAgICAgRU9CUlVOLS07CQkJLyogLi4ucHJvY2VzcyBpdCBub3cgKHdlIGRvIG5vdGhpbmcpICovCisgICAgaWYgKEVPQlJVTiA+IDApICAgICAgICAgICAgIC8qIGlmIGl0J3MgYSBiYW5kIG9mIHplcm9lcy4uLiAqLworICAgICAgRU9CUlVOLS07ICAgICAgICAgICAgICAgICAvKiAuLi5wcm9jZXNzIGl0IG5vdyAod2UgZG8gbm90aGluZykgKi8KICAgICBlbHNlIHsKICAgICAgIEJJVFJFQURfTE9BRF9TVEFURShjaW5mbyxlbnRyb3B5LT5iaXRzdGF0ZSk7CiAgICAgICBibG9jayA9IE1DVV9kYXRhWzBdOwogICAgICAgdGJsID0gZW50cm9weS0+YWNfZGVyaXZlZF90Ymw7CiAKICAgICAgIGZvciAoayA9IGNpbmZvLT5TczsgayA8PSBTZTsgaysrKSB7Ci0JSFVGRl9ERUNPREUocywgYnJfc3RhdGUsIHRibCwgcmV0dXJuIEZBTFNFLCBsYWJlbDIpOwotCXIgPSBzID4+IDQ7Ci0JcyAmPSAxNTsKLQlpZiAocykgewotCSAgayArPSByOwotCSAgQ0hFQ0tfQklUX0JVRkZFUihicl9zdGF0ZSwgcywgcmV0dXJuIEZBTFNFKTsKLQkgIHIgPSBHRVRfQklUUyhzKTsKLQkgIHMgPSBIVUZGX0VYVEVORChyLCBzKTsKLQkgIC8qIFNjYWxlIGFuZCBvdXRwdXQgY29lZmZpY2llbnQgaW4gbmF0dXJhbCAoZGV6aWd6YWdnZWQpIG9yZGVyICovCi0JICAoKmJsb2NrKVtqcGVnX25hdHVyYWxfb3JkZXJba11dID0gKEpDT0VGKSAocyA8PCBBbCk7Ci0JfSBlbHNlIHsKLQkgIGlmIChyID09IDE1KSB7CS8qIFpSTCAqLwotCSAgICBrICs9IDE1OwkJLyogc2tpcCAxNSB6ZXJvZXMgaW4gYmFuZCAqLwotCSAgfSBlbHNlIHsJCS8qIEVPQnIsIHJ1biBsZW5ndGggaXMgMl5yICsgYXBwZW5kZWQgYml0cyAqLwotCSAgICBFT0JSVU4gPSAxIDw8IHI7Ci0JICAgIGlmIChyKSB7CQkvKiBFT0JyLCByID4gMCAqLwotCSAgICAgIENIRUNLX0JJVF9CVUZGRVIoYnJfc3RhdGUsIHIsIHJldHVybiBGQUxTRSk7Ci0JICAgICAgciA9IEdFVF9CSVRTKHIpOwotCSAgICAgIEVPQlJVTiArPSByOwotCSAgICB9Ci0JICAgIEVPQlJVTi0tOwkJLyogdGhpcyBiYW5kIGlzIHByb2Nlc3NlZCBhdCB0aGlzIG1vbWVudCAqLwotCSAgICBicmVhazsJCS8qIGZvcmNlIGVuZC1vZi1iYW5kICovCi0JICB9Ci0JfQorICAgICAgICBIVUZGX0RFQ09ERShzLCBicl9zdGF0ZSwgdGJsLCByZXR1cm4gRkFMU0UsIGxhYmVsMik7CisgICAgICAgIHIgPSBzID4+IDQ7CisgICAgICAgIHMgJj0gMTU7CisgICAgICAgIGlmIChzKSB7CisgICAgICAgICAgayArPSByOworICAgICAgICAgIENIRUNLX0JJVF9CVUZGRVIoYnJfc3RhdGUsIHMsIHJldHVybiBGQUxTRSk7CisgICAgICAgICAgciA9IEdFVF9CSVRTKHMpOworICAgICAgICAgIHMgPSBIVUZGX0VYVEVORChyLCBzKTsKKyAgICAgICAgICAvKiBTY2FsZSBhbmQgb3V0cHV0IGNvZWZmaWNpZW50IGluIG5hdHVyYWwgKGRlemlnemFnZ2VkKSBvcmRlciAqLworICAgICAgICAgICgqYmxvY2spW2pwZWdfbmF0dXJhbF9vcmRlcltrXV0gPSAoSkNPRUYpIChzIDw8IEFsKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBpZiAociA9PSAxNSkgeyAgICAgICAgLyogWlJMICovCisgICAgICAgICAgICBrICs9IDE1OyAgICAgICAgICAgIC8qIHNraXAgMTUgemVyb2VzIGluIGJhbmQgKi8KKyAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgLyogRU9CciwgcnVuIGxlbmd0aCBpcyAyXnIgKyBhcHBlbmRlZCBiaXRzICovCisgICAgICAgICAgICBFT0JSVU4gPSAxIDw8IHI7CisgICAgICAgICAgICBpZiAocikgeyAgICAgICAgICAgIC8qIEVPQnIsIHIgPiAwICovCisgICAgICAgICAgICAgIENIRUNLX0JJVF9CVUZGRVIoYnJfc3RhdGUsIHIsIHJldHVybiBGQUxTRSk7CisgICAgICAgICAgICAgIHIgPSBHRVRfQklUUyhyKTsKKyAgICAgICAgICAgICAgRU9CUlVOICs9IHI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBFT0JSVU4tLTsgICAgICAgICAgIC8qIHRoaXMgYmFuZCBpcyBwcm9jZXNzZWQgYXQgdGhpcyBtb21lbnQgKi8KKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgLyogZm9yY2UgZW5kLW9mLWJhbmQgKi8KKyAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgIH0KIAogICAgICAgQklUUkVBRF9TQVZFX1NUQVRFKGNpbmZvLGVudHJvcHktPmJpdHN0YXRlKTsKICAgICB9CiAKICAgICAvKiBDb21wbGV0ZWQgTUNVLCBzbyB1cGRhdGUgc3RhdGUgKi8KLSAgICBlbnRyb3B5LT5zYXZlZC5FT0JSVU4gPSBFT0JSVU47CS8qIG9ubHkgcGFydCBvZiBzYXZlZCBzdGF0ZSB3ZSBuZWVkICovCisgICAgZW50cm9weS0+c2F2ZWQuRU9CUlVOID0gRU9CUlVOOyAgICAgLyogb25seSBwYXJ0IG9mIHNhdmVkIHN0YXRlIHdlIG5lZWQgKi8KICAgfQogCiAgIC8qIEFjY291bnQgZm9yIHJlc3RhcnQgaW50ZXJ2YWwgKG5vLW9wIGlmIG5vdCB1c2luZyByZXN0YXJ0cykgKi8KQEAgLTQ0MCw5ICs0NDEsOSBAQAogCiBNRVRIT0RERUYoYm9vbGVhbikKIGRlY29kZV9tY3VfRENfcmVmaW5lIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKQkxPQ0tST1cgKk1DVV9kYXRhKQoteyAgIAorewogICBwaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5ID0gKHBodWZmX2VudHJvcHlfcHRyKSBjaW5mby0+ZW50cm9weTsKLSAgaW50IHAxID0gMSA8PCBjaW5mby0+QWw7CS8qIDEgaW4gdGhlIGJpdCBwb3NpdGlvbiBiZWluZyBjb2RlZCAqLworICBpbnQgcDEgPSAxIDw8IGNpbmZvLT5BbDsgICAgICAvKiAxIGluIHRoZSBiaXQgcG9zaXRpb24gYmVpbmcgY29kZWQgKi8KICAgaW50IGJsa247CiAgIEpCTE9DS1JPVyBibG9jazsKICAgQklUUkVBRF9TVEFURV9WQVJTOwpAQCAtNDUxLDcgKzQ1Miw3IEBACiAgIGlmIChjaW5mby0+cmVzdGFydF9pbnRlcnZhbCkgewogICAgIGlmIChlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9PSAwKQogICAgICAgaWYgKCEgcHJvY2Vzc19yZXN0YXJ0KGNpbmZvKSkKLQlyZXR1cm4gRkFMU0U7CisgICAgICAgIHJldHVybiBGQUxTRTsKICAgfQogCiAgIC8qIE5vdCB3b3J0aCB0aGUgY3ljbGVzIHRvIGNoZWNrIGluc3VmZmljaWVudF9kYXRhIGhlcmUsCkBAIC00ODksMTEgKzQ5MCwxMSBAQAogCiBNRVRIT0RERUYoYm9vbGVhbikKIGRlY29kZV9tY3VfQUNfcmVmaW5lIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKQkxPQ0tST1cgKk1DVV9kYXRhKQoteyAgIAorewogICBwaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5ID0gKHBodWZmX2VudHJvcHlfcHRyKSBjaW5mby0+ZW50cm9weTsKICAgaW50IFNlID0gY2luZm8tPlNlOwotICBpbnQgcDEgPSAxIDw8IGNpbmZvLT5BbDsJLyogMSBpbiB0aGUgYml0IHBvc2l0aW9uIGJlaW5nIGNvZGVkICovCi0gIGludCBtMSA9ICgtMSkgPDwgY2luZm8tPkFsOwkvKiAtMSBpbiB0aGUgYml0IHBvc2l0aW9uIGJlaW5nIGNvZGVkICovCisgIGludCBwMSA9IDEgPDwgY2luZm8tPkFsOyAgICAgIC8qIDEgaW4gdGhlIGJpdCBwb3NpdGlvbiBiZWluZyBjb2RlZCAqLworICBpbnQgbTEgPSAoLTEpIDw8IGNpbmZvLT5BbDsgICAvKiAtMSBpbiB0aGUgYml0IHBvc2l0aW9uIGJlaW5nIGNvZGVkICovCiAgIHJlZ2lzdGVyIGludCBzLCBrLCByOwogICB1bnNpZ25lZCBpbnQgRU9CUlVOOwogICBKQkxPQ0tST1cgYmxvY2s7CkBAIC01MDcsNyArNTA4LDcgQEAKICAgaWYgKGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsKSB7CiAgICAgaWYgKGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID09IDApCiAgICAgICBpZiAoISBwcm9jZXNzX3Jlc3RhcnQoY2luZm8pKQotCXJldHVybiBGQUxTRTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOwogICB9CiAKICAgLyogSWYgd2UndmUgcnVuIG91dCBvZiBkYXRhLCBkb24ndCBtb2RpZnkgdGhlIE1DVS4KQEAgLTUzNSw1OCArNTM2LDU4IEBACiAKICAgICBpZiAoRU9CUlVOID09IDApIHsKICAgICAgIGZvciAoOyBrIDw9IFNlOyBrKyspIHsKLQlIVUZGX0RFQ09ERShzLCBicl9zdGF0ZSwgdGJsLCBnb3RvIHVuZG9pdCwgbGFiZWwzKTsKLQlyID0gcyA+PiA0OwotCXMgJj0gMTU7Ci0JaWYgKHMpIHsKLQkgIGlmIChzICE9IDEpCQkvKiBzaXplIG9mIG5ldyBjb2VmIHNob3VsZCBhbHdheXMgYmUgMSAqLwotCSAgICBXQVJOTVMoY2luZm8sIEpXUk5fSFVGRl9CQURfQ09ERSk7Ci0JICBDSEVDS19CSVRfQlVGRkVSKGJyX3N0YXRlLCAxLCBnb3RvIHVuZG9pdCk7Ci0JICBpZiAoR0VUX0JJVFMoMSkpCi0JICAgIHMgPSBwMTsJCS8qIG5ld2x5IG5vbnplcm8gY29lZiBpcyBwb3NpdGl2ZSAqLwotCSAgZWxzZQotCSAgICBzID0gbTE7CQkvKiBuZXdseSBub256ZXJvIGNvZWYgaXMgbmVnYXRpdmUgKi8KLQl9IGVsc2UgewotCSAgaWYgKHIgIT0gMTUpIHsKLQkgICAgRU9CUlVOID0gMSA8PCByOwkvKiBFT0JyLCBydW4gbGVuZ3RoIGlzIDJeciArIGFwcGVuZGVkIGJpdHMgKi8KLQkgICAgaWYgKHIpIHsKLQkgICAgICBDSEVDS19CSVRfQlVGRkVSKGJyX3N0YXRlLCByLCBnb3RvIHVuZG9pdCk7Ci0JICAgICAgciA9IEdFVF9CSVRTKHIpOwotCSAgICAgIEVPQlJVTiArPSByOwotCSAgICB9Ci0JICAgIGJyZWFrOwkJLyogcmVzdCBvZiBibG9jayBpcyBoYW5kbGVkIGJ5IEVPQiBsb2dpYyAqLwotCSAgfQotCSAgLyogbm90ZSBzID0gMCBmb3IgcHJvY2Vzc2luZyBaUkwgKi8KLQl9Ci0JLyogQWR2YW5jZSBvdmVyIGFscmVhZHktbm9uemVybyBjb2VmcyBhbmQgciBzdGlsbC16ZXJvIGNvZWZzLAotCSAqIGFwcGVuZGluZyBjb3JyZWN0aW9uIGJpdHMgdG8gdGhlIG5vbnplcm9lcy4gIEEgY29ycmVjdGlvbiBiaXQgaXMgMQotCSAqIGlmIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgY29lZmZpY2llbnQgbXVzdCBiZSBpbmNyZWFzZWQuCi0JICovCi0JZG8gewotCSAgdGhpc2NvZWYgPSAqYmxvY2sgKyBqcGVnX25hdHVyYWxfb3JkZXJba107Ci0JICBpZiAoKnRoaXNjb2VmICE9IDApIHsKLQkgICAgQ0hFQ0tfQklUX0JVRkZFUihicl9zdGF0ZSwgMSwgZ290byB1bmRvaXQpOwotCSAgICBpZiAoR0VUX0JJVFMoMSkpIHsKLQkgICAgICBpZiAoKCp0aGlzY29lZiAmIHAxKSA9PSAwKSB7IC8qIGRvIG5vdGhpbmcgaWYgYWxyZWFkeSBzZXQgaXQgKi8KLQkJaWYgKCp0aGlzY29lZiA+PSAwKQotCQkgICp0aGlzY29lZiArPSBwMTsKLQkJZWxzZQotCQkgICp0aGlzY29lZiArPSBtMTsKLQkgICAgICB9Ci0JICAgIH0KLQkgIH0gZWxzZSB7Ci0JICAgIGlmICgtLXIgPCAwKQotCSAgICAgIGJyZWFrOwkJLyogcmVhY2hlZCB0YXJnZXQgemVybyBjb2VmZmljaWVudCAqLwotCSAgfQotCSAgaysrOwotCX0gd2hpbGUgKGsgPD0gU2UpOwotCWlmIChzKSB7Ci0JICBpbnQgcG9zID0ganBlZ19uYXR1cmFsX29yZGVyW2tdOwotCSAgLyogT3V0cHV0IG5ld2x5IG5vbnplcm8gY29lZmZpY2llbnQgKi8KLQkgICgqYmxvY2spW3Bvc10gPSAoSkNPRUYpIHM7Ci0JICAvKiBSZW1lbWJlciBpdHMgcG9zaXRpb24gaW4gY2FzZSB3ZSBoYXZlIHRvIHN1c3BlbmQgKi8KLQkgIG5ld256X3Bvc1tudW1fbmV3bnorK10gPSBwb3M7Ci0JfQorICAgICAgICBIVUZGX0RFQ09ERShzLCBicl9zdGF0ZSwgdGJsLCBnb3RvIHVuZG9pdCwgbGFiZWwzKTsKKyAgICAgICAgciA9IHMgPj4gNDsKKyAgICAgICAgcyAmPSAxNTsKKyAgICAgICAgaWYgKHMpIHsKKyAgICAgICAgICBpZiAocyAhPSAxKSAgICAgICAgICAgLyogc2l6ZSBvZiBuZXcgY29lZiBzaG91bGQgYWx3YXlzIGJlIDEgKi8KKyAgICAgICAgICAgIFdBUk5NUyhjaW5mbywgSldSTl9IVUZGX0JBRF9DT0RFKTsKKyAgICAgICAgICBDSEVDS19CSVRfQlVGRkVSKGJyX3N0YXRlLCAxLCBnb3RvIHVuZG9pdCk7CisgICAgICAgICAgaWYgKEdFVF9CSVRTKDEpKQorICAgICAgICAgICAgcyA9IHAxOyAgICAgICAgICAgICAvKiBuZXdseSBub256ZXJvIGNvZWYgaXMgcG9zaXRpdmUgKi8KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBzID0gbTE7ICAgICAgICAgICAgIC8qIG5ld2x5IG5vbnplcm8gY29lZiBpcyBuZWdhdGl2ZSAqLworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGlmIChyICE9IDE1KSB7CisgICAgICAgICAgICBFT0JSVU4gPSAxIDw8IHI7ICAgIC8qIEVPQnIsIHJ1biBsZW5ndGggaXMgMl5yICsgYXBwZW5kZWQgYml0cyAqLworICAgICAgICAgICAgaWYgKHIpIHsKKyAgICAgICAgICAgICAgQ0hFQ0tfQklUX0JVRkZFUihicl9zdGF0ZSwgciwgZ290byB1bmRvaXQpOworICAgICAgICAgICAgICByID0gR0VUX0JJVFMocik7CisgICAgICAgICAgICAgIEVPQlJVTiArPSByOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAvKiByZXN0IG9mIGJsb2NrIGlzIGhhbmRsZWQgYnkgRU9CIGxvZ2ljICovCisgICAgICAgICAgfQorICAgICAgICAgIC8qIG5vdGUgcyA9IDAgZm9yIHByb2Nlc3NpbmcgWlJMICovCisgICAgICAgIH0KKyAgICAgICAgLyogQWR2YW5jZSBvdmVyIGFscmVhZHktbm9uemVybyBjb2VmcyBhbmQgciBzdGlsbC16ZXJvIGNvZWZzLAorICAgICAgICAgKiBhcHBlbmRpbmcgY29ycmVjdGlvbiBiaXRzIHRvIHRoZSBub256ZXJvZXMuICBBIGNvcnJlY3Rpb24gYml0IGlzIDEKKyAgICAgICAgICogaWYgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZSBjb2VmZmljaWVudCBtdXN0IGJlIGluY3JlYXNlZC4KKyAgICAgICAgICovCisgICAgICAgIGRvIHsKKyAgICAgICAgICB0aGlzY29lZiA9ICpibG9jayArIGpwZWdfbmF0dXJhbF9vcmRlcltrXTsKKyAgICAgICAgICBpZiAoKnRoaXNjb2VmICE9IDApIHsKKyAgICAgICAgICAgIENIRUNLX0JJVF9CVUZGRVIoYnJfc3RhdGUsIDEsIGdvdG8gdW5kb2l0KTsKKyAgICAgICAgICAgIGlmIChHRVRfQklUUygxKSkgeworICAgICAgICAgICAgICBpZiAoKCp0aGlzY29lZiAmIHAxKSA9PSAwKSB7IC8qIGRvIG5vdGhpbmcgaWYgYWxyZWFkeSBzZXQgaXQgKi8KKyAgICAgICAgICAgICAgICBpZiAoKnRoaXNjb2VmID49IDApCisgICAgICAgICAgICAgICAgICAqdGhpc2NvZWYgKz0gcDE7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgKnRoaXNjb2VmICs9IG0xOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICgtLXIgPCAwKQorICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAvKiByZWFjaGVkIHRhcmdldCB6ZXJvIGNvZWZmaWNpZW50ICovCisgICAgICAgICAgfQorICAgICAgICAgIGsrKzsKKyAgICAgICAgfSB3aGlsZSAoayA8PSBTZSk7CisgICAgICAgIGlmIChzKSB7CisgICAgICAgICAgaW50IHBvcyA9IGpwZWdfbmF0dXJhbF9vcmRlcltrXTsKKyAgICAgICAgICAvKiBPdXRwdXQgbmV3bHkgbm9uemVybyBjb2VmZmljaWVudCAqLworICAgICAgICAgICgqYmxvY2spW3Bvc10gPSAoSkNPRUYpIHM7CisgICAgICAgICAgLyogUmVtZW1iZXIgaXRzIHBvc2l0aW9uIGluIGNhc2Ugd2UgaGF2ZSB0byBzdXNwZW5kICovCisgICAgICAgICAgbmV3bnpfcG9zW251bV9uZXdueisrXSA9IHBvczsKKyAgICAgICAgfQogICAgICAgfQogICAgIH0KIApAQCAtNTk3LDE4ICs1OTgsMTggQEAKICAgICAgICAqIGlmIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgY29lZmZpY2llbnQgbXVzdCBiZSBpbmNyZWFzZWQuCiAgICAgICAgKi8KICAgICAgIGZvciAoOyBrIDw9IFNlOyBrKyspIHsKLQl0aGlzY29lZiA9ICpibG9jayArIGpwZWdfbmF0dXJhbF9vcmRlcltrXTsKLQlpZiAoKnRoaXNjb2VmICE9IDApIHsKLQkgIENIRUNLX0JJVF9CVUZGRVIoYnJfc3RhdGUsIDEsIGdvdG8gdW5kb2l0KTsKLQkgIGlmIChHRVRfQklUUygxKSkgewotCSAgICBpZiAoKCp0aGlzY29lZiAmIHAxKSA9PSAwKSB7IC8qIGRvIG5vdGhpbmcgaWYgYWxyZWFkeSBjaGFuZ2VkIGl0ICovCi0JICAgICAgaWYgKCp0aGlzY29lZiA+PSAwKQotCQkqdGhpc2NvZWYgKz0gcDE7Ci0JICAgICAgZWxzZQotCQkqdGhpc2NvZWYgKz0gbTE7Ci0JICAgIH0KLQkgIH0KLQl9CisgICAgICAgIHRoaXNjb2VmID0gKmJsb2NrICsganBlZ19uYXR1cmFsX29yZGVyW2tdOworICAgICAgICBpZiAoKnRoaXNjb2VmICE9IDApIHsKKyAgICAgICAgICBDSEVDS19CSVRfQlVGRkVSKGJyX3N0YXRlLCAxLCBnb3RvIHVuZG9pdCk7CisgICAgICAgICAgaWYgKEdFVF9CSVRTKDEpKSB7CisgICAgICAgICAgICBpZiAoKCp0aGlzY29lZiAmIHAxKSA9PSAwKSB7IC8qIGRvIG5vdGhpbmcgaWYgYWxyZWFkeSBjaGFuZ2VkIGl0ICovCisgICAgICAgICAgICAgIGlmICgqdGhpc2NvZWYgPj0gMCkKKyAgICAgICAgICAgICAgICAqdGhpc2NvZWYgKz0gcDE7CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAqdGhpc2NvZWYgKz0gbTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CiAgICAgICB9CiAgICAgICAvKiBDb3VudCBvbmUgYmxvY2sgY29tcGxldGVkIGluIEVPQiBydW4gKi8KICAgICAgIEVPQlJVTi0tOwpAQCAtNjQ2LDcgKzY0Nyw3IEBACiAKICAgZW50cm9weSA9IChwaHVmZl9lbnRyb3B5X3B0cikKICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAotCQkJCVNJWkVPRihwaHVmZl9lbnRyb3B5X2RlY29kZXIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0laRU9GKHBodWZmX2VudHJvcHlfZGVjb2RlcikpOwogICBjaW5mby0+ZW50cm9weSA9IChzdHJ1Y3QganBlZ19lbnRyb3B5X2RlY29kZXIgKikgZW50cm9weTsKICAgZW50cm9weS0+cHViLnN0YXJ0X3Bhc3MgPSBzdGFydF9wYXNzX3BodWZmX2RlY29kZXI7CiAKQEAgLTY1OCw5ICs2NTksOSBAQAogICAvKiBDcmVhdGUgcHJvZ3Jlc3Npb24gc3RhdHVzIHRhYmxlICovCiAgIGNpbmZvLT5jb2VmX2JpdHMgPSAoaW50ICgqKVtEQ1RTSVpFMl0pCiAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKLQkJCQljaW5mby0+bnVtX2NvbXBvbmVudHMqRENUU0laRTIqU0laRU9GKGludCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaW5mby0+bnVtX2NvbXBvbmVudHMqRENUU0laRTIqU0laRU9GKGludCkpOwogICBjb2VmX2JpdF9wdHIgPSAmIGNpbmZvLT5jb2VmX2JpdHNbMF1bMF07Ci0gIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsgY2krKykgCisgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsgY2krKykKICAgICBmb3IgKGkgPSAwOyBpIDwgRENUU0laRTI7IGkrKykKICAgICAgICpjb2VmX2JpdF9wdHIrKyA9IC0xOwogfQpkaWZmIC0tZ2l0IGEvamRwb3N0Y3QuYyBiL2pkcG9zdGN0LmMKaW5kZXggNTcxNTYzZC4uYWEyYWYwNyAxMDA2NDQKLS0tIGEvamRwb3N0Y3QuYworKysgYi9qZHBvc3RjdC5jCkBAIC0zMSwxMiArMzEsMTIgQEAKICAgICogRm9yIHR3by1wYXNzIGNvbG9yIHF1YW50aXphdGlvbiwgd2UgbmVlZCBhIGZ1bGwtaW1hZ2UgYnVmZmVyOwogICAgKiBmb3Igb25lLXBhc3Mgb3BlcmF0aW9uLCBhIHN0cmlwIGJ1ZmZlciBpcyBzdWZmaWNpZW50LgogICAgKi8KLSAganZpcnRfc2FycmF5X3B0ciB3aG9sZV9pbWFnZTsJLyogdmlydHVhbCBhcnJheSwgb3IgTlVMTCBpZiBvbmUtcGFzcyAqLwotICBKU0FNUEFSUkFZIGJ1ZmZlcjsJCS8qIHN0cmlwIGJ1ZmZlciwgb3IgY3VycmVudCBzdHJpcCBvZiB2aXJ0dWFsICovCi0gIEpESU1FTlNJT04gc3RyaXBfaGVpZ2h0OwkvKiBidWZmZXIgc2l6ZSBpbiByb3dzICovCisgIGp2aXJ0X3NhcnJheV9wdHIgd2hvbGVfaW1hZ2U7IC8qIHZpcnR1YWwgYXJyYXksIG9yIE5VTEwgaWYgb25lLXBhc3MgKi8KKyAgSlNBTVBBUlJBWSBidWZmZXI7ICAgICAgICAgICAgLyogc3RyaXAgYnVmZmVyLCBvciBjdXJyZW50IHN0cmlwIG9mIHZpcnR1YWwgKi8KKyAgSkRJTUVOU0lPTiBzdHJpcF9oZWlnaHQ7ICAgICAgLyogYnVmZmVyIHNpemUgaW4gcm93cyAqLwogICAvKiBmb3IgdHdvLXBhc3MgbW9kZSBvbmx5OiAqLwotICBKRElNRU5TSU9OIHN0YXJ0aW5nX3JvdzsJLyogcm93ICMgb2YgZmlyc3Qgcm93IGluIGN1cnJlbnQgc3RyaXAgKi8KLSAgSkRJTUVOU0lPTiBuZXh0X3JvdzsJCS8qIGluZGV4IG9mIG5leHQgcm93IHRvIGZpbGwvZW1wdHkgaW4gc3RyaXAgKi8KKyAgSkRJTUVOU0lPTiBzdGFydGluZ19yb3c7ICAgICAgLyogcm93ICMgb2YgZmlyc3Qgcm93IGluIGN1cnJlbnQgc3RyaXAgKi8KKyAgSkRJTUVOU0lPTiBuZXh0X3JvdzsgICAgICAgICAgLyogaW5kZXggb2YgbmV4dCByb3cgdG8gZmlsbC9lbXB0eSBpbiBzdHJpcCAqLwogfSBteV9wb3N0X2NvbnRyb2xsZXI7CiAKIHR5cGVkZWYgbXlfcG9zdF9jb250cm9sbGVyICogbXlfcG9zdF9wdHI7CkBAIC00NCwyNCArNDQsMjQgQEAKIAogLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KIE1FVEhPRERFRih2b2lkKSBwb3N0X3Byb2Nlc3NfMXBhc3MKLQlKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCi0JICAgICBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiAqaW5fcm93X2dyb3VwX2N0ciwKLQkgICAgIEpESU1FTlNJT04gaW5fcm93X2dyb3Vwc19hdmFpbCwKLQkgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiAqb3V0X3Jvd19jdHIsCi0JICAgICBKRElNRU5TSU9OIG91dF9yb3dzX2F2YWlsKSk7CisgICAgICAgIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKyAgICAgICAgICAgICBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiAqaW5fcm93X2dyb3VwX2N0ciwKKyAgICAgICAgICAgICBKRElNRU5TSU9OIGluX3Jvd19ncm91cHNfYXZhaWwsCisgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OICpvdXRfcm93X2N0ciwKKyAgICAgICAgICAgICBKRElNRU5TSU9OIG91dF9yb3dzX2F2YWlsKSk7CiAjaWZkZWYgUVVBTlRfMlBBU1NfU1VQUE9SVEVECiBNRVRIT0RERUYodm9pZCkgcG9zdF9wcm9jZXNzX3ByZXBhc3MKLQlKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCi0JICAgICBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiAqaW5fcm93X2dyb3VwX2N0ciwKLQkgICAgIEpESU1FTlNJT04gaW5fcm93X2dyb3Vwc19hdmFpbCwKLQkgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiAqb3V0X3Jvd19jdHIsCi0JICAgICBKRElNRU5TSU9OIG91dF9yb3dzX2F2YWlsKSk7CisgICAgICAgIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKyAgICAgICAgICAgICBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiAqaW5fcm93X2dyb3VwX2N0ciwKKyAgICAgICAgICAgICBKRElNRU5TSU9OIGluX3Jvd19ncm91cHNfYXZhaWwsCisgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OICpvdXRfcm93X2N0ciwKKyAgICAgICAgICAgICBKRElNRU5TSU9OIG91dF9yb3dzX2F2YWlsKSk7CiBNRVRIT0RERUYodm9pZCkgcG9zdF9wcm9jZXNzXzJwYXNzCi0JSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAotCSAgICAgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gKmluX3Jvd19ncm91cF9jdHIsCi0JICAgICBKRElNRU5TSU9OIGluX3Jvd19ncm91cHNfYXZhaWwsCi0JICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gKm91dF9yb3dfY3RyLAotCSAgICAgSkRJTUVOU0lPTiBvdXRfcm93c19hdmFpbCkpOworICAgICAgICBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisgICAgICAgICAgICAgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gKmluX3Jvd19ncm91cF9jdHIsCisgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBzX2F2YWlsLAorICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiAqb3V0X3Jvd19jdHIsCisgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRfcm93c19hdmFpbCkpOwogI2VuZGlmCiAKIApAQCAtODQsOSArODQsOSBAQAogICAgICAgICogYWxsb2NhdGUgYSBzdHJpcCBidWZmZXIuICBVc2UgdGhlIHZpcnR1YWwtYXJyYXkgYnVmZmVyIGFzIHdvcmtzcGFjZS4KICAgICAgICAqLwogICAgICAgaWYgKHBvc3QtPmJ1ZmZlciA9PSBOVUxMKSB7Ci0JcG9zdC0+YnVmZmVyID0gKCpjaW5mby0+bWVtLT5hY2Nlc3NfdmlydF9zYXJyYXkpCi0JICAoKGpfY29tbW9uX3B0cikgY2luZm8sIHBvc3QtPndob2xlX2ltYWdlLAotCSAgIChKRElNRU5TSU9OKSAwLCBwb3N0LT5zdHJpcF9oZWlnaHQsIFRSVUUpOworICAgICAgICBwb3N0LT5idWZmZXIgPSAoKmNpbmZvLT5tZW0tPmFjY2Vzc192aXJ0X3NhcnJheSkKKyAgICAgICAgICAoKGpfY29tbW9uX3B0cikgY2luZm8sIHBvc3QtPndob2xlX2ltYWdlLAorICAgICAgICAgICAoSkRJTUVOU0lPTikgMCwgcG9zdC0+c3RyaXBfaGVpZ2h0LCBUUlVFKTsKICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgLyogRm9yIHNpbmdsZS1wYXNzIHByb2Nlc3Npbmcgd2l0aG91dCBjb2xvciBxdWFudGl6YXRpb24sCkBAIC0xMjQsMTAgKzEyNCwxMCBAQAogCiBNRVRIT0RERUYodm9pZCkKIHBvc3RfcHJvY2Vzc18xcGFzcyAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKLQkJICAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OICppbl9yb3dfZ3JvdXBfY3RyLAotCQkgICAgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBzX2F2YWlsLAotCQkgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OICpvdXRfcm93X2N0ciwKLQkJICAgIEpESU1FTlNJT04gb3V0X3Jvd3NfYXZhaWwpCisgICAgICAgICAgICAgICAgICAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OICppbl9yb3dfZ3JvdXBfY3RyLAorICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGluX3Jvd19ncm91cHNfYXZhaWwsCisgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiAqb3V0X3Jvd19jdHIsCisgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0X3Jvd3NfYXZhaWwpCiB7CiAgIG15X3Bvc3RfcHRyIHBvc3QgPSAobXlfcG9zdF9wdHIpIGNpbmZvLT5wb3N0OwogICBKRElNRU5TSU9OIG51bV9yb3dzLCBtYXhfcm93czsKQEAgLTEzOSwxMSArMTM5LDExIEBACiAgICAgbWF4X3Jvd3MgPSBwb3N0LT5zdHJpcF9oZWlnaHQ7CiAgIG51bV9yb3dzID0gMDsKICAgKCpjaW5mby0+dXBzYW1wbGUtPnVwc2FtcGxlKSAoY2luZm8sCi0JCWlucHV0X2J1ZiwgaW5fcm93X2dyb3VwX2N0ciwgaW5fcm93X2dyb3Vwc19hdmFpbCwKLQkJcG9zdC0+YnVmZmVyLCAmbnVtX3Jvd3MsIG1heF9yb3dzKTsKKyAgICAgICAgICAgICAgICBpbnB1dF9idWYsIGluX3Jvd19ncm91cF9jdHIsIGluX3Jvd19ncm91cHNfYXZhaWwsCisgICAgICAgICAgICAgICAgcG9zdC0+YnVmZmVyLCAmbnVtX3Jvd3MsIG1heF9yb3dzKTsKICAgLyogUXVhbnRpemUgYW5kIGVtaXQgZGF0YS4gKi8KICAgKCpjaW5mby0+Y3F1YW50aXplLT5jb2xvcl9xdWFudGl6ZSkgKGNpbmZvLAotCQlwb3N0LT5idWZmZXIsIG91dHB1dF9idWYgKyAqb3V0X3Jvd19jdHIsIChpbnQpIG51bV9yb3dzKTsKKyAgICAgICAgICAgICAgICBwb3N0LT5idWZmZXIsIG91dHB1dF9idWYgKyAqb3V0X3Jvd19jdHIsIChpbnQpIG51bV9yb3dzKTsKICAgKm91dF9yb3dfY3RyICs9IG51bV9yb3dzOwogfQogCkBAIC0xNTYsMTAgKzE1NiwxMCBAQAogCiBNRVRIT0RERUYodm9pZCkKIHBvc3RfcHJvY2Vzc19wcmVwYXNzIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAotCQkgICAgICBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiAqaW5fcm93X2dyb3VwX2N0ciwKLQkJICAgICAgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBzX2F2YWlsLAotCQkgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gKm91dF9yb3dfY3RyLAotCQkgICAgICBKRElNRU5TSU9OIG91dF9yb3dzX2F2YWlsKQorICAgICAgICAgICAgICAgICAgICAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OICppbl9yb3dfZ3JvdXBfY3RyLAorICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gaW5fcm93X2dyb3Vwc19hdmFpbCwKKyAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gKm91dF9yb3dfY3RyLAorICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0X3Jvd3NfYXZhaWwpCiB7CiAgIG15X3Bvc3RfcHRyIHBvc3QgPSAobXlfcG9zdF9wdHIpIGNpbmZvLT5wb3N0OwogICBKRElNRU5TSU9OIG9sZF9uZXh0X3JvdywgbnVtX3Jvd3M7CkBAIC0xNjcsMjIgKzE2NywyMiBAQAogICAvKiBSZXBvc2l0aW9uIHZpcnR1YWwgYnVmZmVyIGlmIGF0IHN0YXJ0IG9mIHN0cmlwLiAqLwogICBpZiAocG9zdC0+bmV4dF9yb3cgPT0gMCkgewogICAgIHBvc3QtPmJ1ZmZlciA9ICgqY2luZm8tPm1lbS0+YWNjZXNzX3ZpcnRfc2FycmF5KQotCSgoal9jb21tb25fcHRyKSBjaW5mbywgcG9zdC0+d2hvbGVfaW1hZ2UsCi0JIHBvc3QtPnN0YXJ0aW5nX3JvdywgcG9zdC0+c3RyaXBfaGVpZ2h0LCBUUlVFKTsKKyAgICAgICAgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBwb3N0LT53aG9sZV9pbWFnZSwKKyAgICAgICAgIHBvc3QtPnN0YXJ0aW5nX3JvdywgcG9zdC0+c3RyaXBfaGVpZ2h0LCBUUlVFKTsKICAgfQogCiAgIC8qIFVwc2FtcGxlIHNvbWUgZGF0YSAodXAgdG8gYSBzdHJpcCBoZWlnaHQncyB3b3J0aCkuICovCiAgIG9sZF9uZXh0X3JvdyA9IHBvc3QtPm5leHRfcm93OwogICAoKmNpbmZvLT51cHNhbXBsZS0+dXBzYW1wbGUpIChjaW5mbywKLQkJaW5wdXRfYnVmLCBpbl9yb3dfZ3JvdXBfY3RyLCBpbl9yb3dfZ3JvdXBzX2F2YWlsLAotCQlwb3N0LT5idWZmZXIsICZwb3N0LT5uZXh0X3JvdywgcG9zdC0+c3RyaXBfaGVpZ2h0KTsKKyAgICAgICAgICAgICAgICBpbnB1dF9idWYsIGluX3Jvd19ncm91cF9jdHIsIGluX3Jvd19ncm91cHNfYXZhaWwsCisgICAgICAgICAgICAgICAgcG9zdC0+YnVmZmVyLCAmcG9zdC0+bmV4dF9yb3csIHBvc3QtPnN0cmlwX2hlaWdodCk7CiAKICAgLyogQWxsb3cgcXVhbnRpemVyIHRvIHNjYW4gbmV3IGRhdGEuICBObyBkYXRhIGlzIGVtaXR0ZWQsICovCiAgIC8qIGJ1dCB3ZSBhZHZhbmNlIG91dF9yb3dfY3RyIHNvIG91dGVyIGxvb3AgY2FuIHRlbGwgd2hlbiB3ZSdyZSBkb25lLiAqLwogICBpZiAocG9zdC0+bmV4dF9yb3cgPiBvbGRfbmV4dF9yb3cpIHsKICAgICBudW1fcm93cyA9IHBvc3QtPm5leHRfcm93IC0gb2xkX25leHRfcm93OwogICAgICgqY2luZm8tPmNxdWFudGl6ZS0+Y29sb3JfcXVhbnRpemUpIChjaW5mbywgcG9zdC0+YnVmZmVyICsgb2xkX25leHRfcm93LAotCQkJCQkgKEpTQU1QQVJSQVkpIE5VTEwsIChpbnQpIG51bV9yb3dzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEpTQU1QQVJSQVkpIE5VTEwsIChpbnQpIG51bV9yb3dzKTsKICAgICAqb3V0X3Jvd19jdHIgKz0gbnVtX3Jvd3M7CiAgIH0KIApAQCAtMjAwLDEwICsyMDAsMTAgQEAKIAogTUVUSE9EREVGKHZvaWQpCiBwb3N0X3Byb2Nlc3NfMnBhc3MgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCi0JCSAgICBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiAqaW5fcm93X2dyb3VwX2N0ciwKLQkJICAgIEpESU1FTlNJT04gaW5fcm93X2dyb3Vwc19hdmFpbCwKLQkJICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiAqb3V0X3Jvd19jdHIsCi0JCSAgICBKRElNRU5TSU9OIG91dF9yb3dzX2F2YWlsKQorICAgICAgICAgICAgICAgICAgICBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiAqaW5fcm93X2dyb3VwX2N0ciwKKyAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBzX2F2YWlsLAorICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gKm91dF9yb3dfY3RyLAorICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dF9yb3dzX2F2YWlsKQogewogICBteV9wb3N0X3B0ciBwb3N0ID0gKG15X3Bvc3RfcHRyKSBjaW5mby0+cG9zdDsKICAgSkRJTUVOU0lPTiBudW1fcm93cywgbWF4X3Jvd3M7CkBAIC0yMTEsOCArMjExLDggQEAKICAgLyogUmVwb3NpdGlvbiB2aXJ0dWFsIGJ1ZmZlciBpZiBhdCBzdGFydCBvZiBzdHJpcC4gKi8KICAgaWYgKHBvc3QtPm5leHRfcm93ID09IDApIHsKICAgICBwb3N0LT5idWZmZXIgPSAoKmNpbmZvLT5tZW0tPmFjY2Vzc192aXJ0X3NhcnJheSkKLQkoKGpfY29tbW9uX3B0cikgY2luZm8sIHBvc3QtPndob2xlX2ltYWdlLAotCSBwb3N0LT5zdGFydGluZ19yb3csIHBvc3QtPnN0cmlwX2hlaWdodCwgRkFMU0UpOworICAgICAgICAoKGpfY29tbW9uX3B0cikgY2luZm8sIHBvc3QtPndob2xlX2ltYWdlLAorICAgICAgICAgcG9zdC0+c3RhcnRpbmdfcm93LCBwb3N0LT5zdHJpcF9oZWlnaHQsIEZBTFNFKTsKICAgfQogCiAgIC8qIERldGVybWluZSBudW1iZXIgb2Ygcm93cyB0byBlbWl0LiAqLwpAQCAtMjI3LDggKzIyNyw4IEBACiAKICAgLyogUXVhbnRpemUgYW5kIGVtaXQgZGF0YS4gKi8KICAgKCpjaW5mby0+Y3F1YW50aXplLT5jb2xvcl9xdWFudGl6ZSkgKGNpbmZvLAotCQlwb3N0LT5idWZmZXIgKyBwb3N0LT5uZXh0X3Jvdywgb3V0cHV0X2J1ZiArICpvdXRfcm93X2N0ciwKLQkJKGludCkgbnVtX3Jvd3MpOworICAgICAgICAgICAgICAgIHBvc3QtPmJ1ZmZlciArIHBvc3QtPm5leHRfcm93LCBvdXRwdXRfYnVmICsgKm91dF9yb3dfY3RyLAorICAgICAgICAgICAgICAgIChpbnQpIG51bV9yb3dzKTsKICAgKm91dF9yb3dfY3RyICs9IG51bV9yb3dzOwogCiAgIC8qIEFkdmFuY2UgaWYgd2UgZmlsbGVkIHRoZSBzdHJpcC4gKi8KQEAgLTI1MywxMSArMjUzLDExIEBACiAKICAgcG9zdCA9IChteV9wb3N0X3B0cikKICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAotCQkJCVNJWkVPRihteV9wb3N0X2NvbnRyb2xsZXIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0laRU9GKG15X3Bvc3RfY29udHJvbGxlcikpOwogICBjaW5mby0+cG9zdCA9IChzdHJ1Y3QganBlZ19kX3Bvc3RfY29udHJvbGxlciAqKSBwb3N0OwogICBwb3N0LT5wdWIuc3RhcnRfcGFzcyA9IHN0YXJ0X3Bhc3NfZHBvc3Q7Ci0gIHBvc3QtPndob2xlX2ltYWdlID0gTlVMTDsJLyogZmxhZyBmb3Igbm8gdmlydHVhbCBhcnJheXMgKi8KLSAgcG9zdC0+YnVmZmVyID0gTlVMTDsJCS8qIGZsYWcgZm9yIG5vIHN0cmlwIGJ1ZmZlciAqLworICBwb3N0LT53aG9sZV9pbWFnZSA9IE5VTEw7ICAgICAvKiBmbGFnIGZvciBubyB2aXJ0dWFsIGFycmF5cyAqLworICBwb3N0LT5idWZmZXIgPSBOVUxMOyAgICAgICAgICAvKiBmbGFnIGZvciBubyBzdHJpcCBidWZmZXIgKi8KIAogICAvKiBDcmVhdGUgdGhlIHF1YW50aXphdGlvbiBidWZmZXIsIGlmIG5lZWRlZCAqLwogICBpZiAoY2luZm8tPnF1YW50aXplX2NvbG9ycykgewpAQCAtMjcxLDIwICsyNzEsMjAgQEAKICAgICAgIC8qIFdlIHJvdW5kIHVwIHRoZSBudW1iZXIgb2Ygcm93cyB0byBhIG11bHRpcGxlIG9mIHRoZSBzdHJpcCBoZWlnaHQuICovCiAjaWZkZWYgUVVBTlRfMlBBU1NfU1VQUE9SVEVECiAgICAgICBwb3N0LT53aG9sZV9pbWFnZSA9ICgqY2luZm8tPm1lbS0+cmVxdWVzdF92aXJ0X3NhcnJheSkKLQkoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLCBGQUxTRSwKLQkgY2luZm8tPm91dHB1dF93aWR0aCAqIGNpbmZvLT5vdXRfY29sb3JfY29tcG9uZW50cywKLQkgKEpESU1FTlNJT04pIGpyb3VuZF91cCgobG9uZykgY2luZm8tPm91dHB1dF9oZWlnaHQsCi0JCQkJKGxvbmcpIHBvc3QtPnN0cmlwX2hlaWdodCksCi0JIHBvc3QtPnN0cmlwX2hlaWdodCk7CisgICAgICAgICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsIEZBTFNFLAorICAgICAgICAgY2luZm8tPm91dHB1dF93aWR0aCAqIGNpbmZvLT5vdXRfY29sb3JfY29tcG9uZW50cywKKyAgICAgICAgIChKRElNRU5TSU9OKSBqcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5vdXRwdXRfaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgcG9zdC0+c3RyaXBfaGVpZ2h0KSwKKyAgICAgICAgIHBvc3QtPnN0cmlwX2hlaWdodCk7CiAjZWxzZQogICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfQlVGRkVSX01PREUpOwogI2VuZGlmIC8qIFFVQU5UXzJQQVNTX1NVUFBPUlRFRCAqLwogICAgIH0gZWxzZSB7CiAgICAgICAvKiBPbmUtcGFzcyBjb2xvciBxdWFudGl6YXRpb246IGp1c3QgbWFrZSBhIHN0cmlwIGJ1ZmZlci4gKi8KICAgICAgIHBvc3QtPmJ1ZmZlciA9ICgqY2luZm8tPm1lbS0+YWxsb2Nfc2FycmF5KQotCSgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCi0JIGNpbmZvLT5vdXRwdXRfd2lkdGggKiBjaW5mby0+b3V0X2NvbG9yX2NvbXBvbmVudHMsCi0JIHBvc3QtPnN0cmlwX2hlaWdodCk7CisgICAgICAgICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCisgICAgICAgICBjaW5mby0+b3V0cHV0X3dpZHRoICogY2luZm8tPm91dF9jb2xvcl9jb21wb25lbnRzLAorICAgICAgICAgcG9zdC0+c3RyaXBfaGVpZ2h0KTsKICAgICB9CiAgIH0KIH0KZGlmZiAtLWdpdCBhL2pkc2FtcGxlLmMgYi9qZHNhbXBsZS5jCmluZGV4IDUyMTE3ODUuLjNkYTFkMDYgMTAwNjQ0Ci0tLSBhL2pkc2FtcGxlLmMKKysrIGIvamRzYW1wbGUuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBUaGlzIGZpbGUgd2FzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZToKICAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk2LCBUaG9tYXMgRy4gTGFuZS4KLSAqIE1vZGlmaWNhdGlvbnM6CisgKiBsaWJqcGVnLXR1cmJvIE1vZGlmaWNhdGlvbnM6CiAgKiBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEQuIFIuIENvbW1hbmRlci4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KQEAgLTMwLDEzICszMCwxMyBAQAogCiAvKiBQb2ludGVyIHRvIHJvdXRpbmUgdG8gdXBzYW1wbGUgYSBzaW5nbGUgY29tcG9uZW50ICovCiB0eXBlZGVmIEpNRVRIT0Qodm9pZCwgdXBzYW1wbGUxX3B0ciwKLQkJKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAotCQkgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyKSk7CisgICAgICAgICAgICAgICAgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAorICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIpKTsKIAogLyogUHJpdmF0ZSBzdWJvYmplY3QgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgewotICBzdHJ1Y3QganBlZ191cHNhbXBsZXIgcHViOwkvKiBwdWJsaWMgZmllbGRzICovCisgIHN0cnVjdCBqcGVnX3Vwc2FtcGxlciBwdWI7ICAgIC8qIHB1YmxpYyBmaWVsZHMgKi8KIAogICAvKiBDb2xvciBjb252ZXJzaW9uIGJ1ZmZlci4gIFdoZW4gdXNpbmcgc2VwYXJhdGUgdXBzYW1wbGluZyBhbmQgY29sb3IKICAgICogY29udmVyc2lvbiBzdGVwcywgdGhpcyBidWZmZXIgaG9sZHMgb25lIHVwc2FtcGxlZCByb3cgZ3JvdXAgdW50aWwgaXQKQEAgLTUwLDggKzUwLDggQEAKICAgLyogUGVyLWNvbXBvbmVudCB1cHNhbXBsaW5nIG1ldGhvZCBwb2ludGVycyAqLwogICB1cHNhbXBsZTFfcHRyIG1ldGhvZHNbTUFYX0NPTVBPTkVOVFNdOwogCi0gIGludCBuZXh0X3Jvd19vdXQ7CQkvKiBjb3VudHMgcm93cyBlbWl0dGVkIGZyb20gY29sb3JfYnVmICovCi0gIEpESU1FTlNJT04gcm93c190b19nbzsJLyogY291bnRzIHJvd3MgcmVtYWluaW5nIGluIGltYWdlICovCisgIGludCBuZXh0X3Jvd19vdXQ7ICAgICAgICAgICAgIC8qIGNvdW50cyByb3dzIGVtaXR0ZWQgZnJvbSBjb2xvcl9idWYgKi8KKyAgSkRJTUVOU0lPTiByb3dzX3RvX2dvOyAgICAgICAgLyogY291bnRzIHJvd3MgcmVtYWluaW5nIGluIGltYWdlICovCiAKICAgLyogSGVpZ2h0IG9mIGFuIGlucHV0IHJvdyBncm91cCBmb3IgZWFjaCBjb21wb25lbnQuICovCiAgIGludCByb3dncm91cF9oZWlnaHRbTUFYX0NPTVBPTkVOVFNdOwpAQCAtOTIsMTAgKzkyLDEwIEBACiAKIE1FVEhPRERFRih2b2lkKQogc2VwX3Vwc2FtcGxlIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAotCSAgICAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OICppbl9yb3dfZ3JvdXBfY3RyLAotCSAgICAgIEpESU1FTlNJT04gaW5fcm93X2dyb3Vwc19hdmFpbCwKLQkgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gKm91dF9yb3dfY3RyLAotCSAgICAgIEpESU1FTlNJT04gb3V0X3Jvd3NfYXZhaWwpCisgICAgICAgICAgICAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OICppbl9yb3dfZ3JvdXBfY3RyLAorICAgICAgICAgICAgICBKRElNRU5TSU9OIGluX3Jvd19ncm91cHNfYXZhaWwsCisgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiAqb3V0X3Jvd19jdHIsCisgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0X3Jvd3NfYXZhaWwpCiB7CiAgIG15X3Vwc2FtcGxlX3B0ciB1cHNhbXBsZSA9IChteV91cHNhbXBsZV9wdHIpIGNpbmZvLT51cHNhbXBsZTsKICAgaW50IGNpOwpAQCAtMTA1LDEzICsxMDUsMTMgQEAKICAgLyogRmlsbCB0aGUgY29udmVyc2lvbiBidWZmZXIsIGlmIGl0J3MgZW1wdHkgKi8KICAgaWYgKHVwc2FtcGxlLT5uZXh0X3Jvd19vdXQgPj0gY2luZm8tPm1heF92X3NhbXBfZmFjdG9yKSB7CiAgICAgZm9yIChjaSA9IDAsIGNvbXBwdHIgPSBjaW5mby0+Y29tcF9pbmZvOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsKLQkgY2krKywgY29tcHB0cisrKSB7CisgICAgICAgICBjaSsrLCBjb21wcHRyKyspIHsKICAgICAgIC8qIEludm9rZSBwZXItY29tcG9uZW50IHVwc2FtcGxlIG1ldGhvZC4gIE5vdGljZSB3ZSBwYXNzIGEgUE9JTlRFUgogICAgICAgICogdG8gY29sb3JfYnVmW2NpXSwgc28gdGhhdCBmdWxsc2l6ZV91cHNhbXBsZSBjYW4gY2hhbmdlIGl0LgogICAgICAgICovCiAgICAgICAoKnVwc2FtcGxlLT5tZXRob2RzW2NpXSkgKGNpbmZvLCBjb21wcHRyLAotCWlucHV0X2J1ZltjaV0gKyAoKmluX3Jvd19ncm91cF9jdHIgKiB1cHNhbXBsZS0+cm93Z3JvdXBfaGVpZ2h0W2NpXSksCi0JdXBzYW1wbGUtPmNvbG9yX2J1ZiArIGNpKTsKKyAgICAgICAgaW5wdXRfYnVmW2NpXSArICgqaW5fcm93X2dyb3VwX2N0ciAqIHVwc2FtcGxlLT5yb3dncm91cF9oZWlnaHRbY2ldKSwKKyAgICAgICAgdXBzYW1wbGUtPmNvbG9yX2J1ZiArIGNpKTsKICAgICB9CiAgICAgdXBzYW1wbGUtPm5leHRfcm93X291dCA9IDA7CiAgIH0KQEAgLTEyMyw3ICsxMjMsNyBAQAogICAvKiBOb3QgbW9yZSB0aGFuIHRoZSBkaXN0YW5jZSB0byB0aGUgZW5kIG9mIHRoZSBpbWFnZS4gIE5lZWQgdGhpcyB0ZXN0CiAgICAqIGluIGNhc2UgdGhlIGltYWdlIGhlaWdodCBpcyBub3QgYSBtdWx0aXBsZSBvZiBtYXhfdl9zYW1wX2ZhY3RvcjoKICAgICovCi0gIGlmIChudW1fcm93cyA+IHVwc2FtcGxlLT5yb3dzX3RvX2dvKSAKKyAgaWYgKG51bV9yb3dzID4gdXBzYW1wbGUtPnJvd3NfdG9fZ28pCiAgICAgbnVtX3Jvd3MgPSB1cHNhbXBsZS0+cm93c190b19nbzsKICAgLyogQW5kIG5vdCBtb3JlIHRoYW4gd2hhdCB0aGUgY2xpZW50IGNhbiBhY2NlcHQ6ICovCiAgIG91dF9yb3dzX2F2YWlsIC09ICpvdXRfcm93X2N0cjsKQEAgLTEzMSw5ICsxMzEsOSBAQAogICAgIG51bV9yb3dzID0gb3V0X3Jvd3NfYXZhaWw7CiAKICAgKCpjaW5mby0+Y2NvbnZlcnQtPmNvbG9yX2NvbnZlcnQpIChjaW5mbywgdXBzYW1wbGUtPmNvbG9yX2J1ZiwKLQkJCQkgICAgIChKRElNRU5TSU9OKSB1cHNhbXBsZS0+bmV4dF9yb3dfb3V0LAotCQkJCSAgICAgb3V0cHV0X2J1ZiArICpvdXRfcm93X2N0ciwKLQkJCQkgICAgIChpbnQpIG51bV9yb3dzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSkRJTUVOU0lPTikgdXBzYW1wbGUtPm5leHRfcm93X291dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfYnVmICsgKm91dF9yb3dfY3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpIG51bV9yb3dzKTsKIAogICAvKiBBZGp1c3QgY291bnRzICovCiAgICpvdXRfcm93X2N0ciArPSBudW1fcm93czsKQEAgLTE2MCw3ICsxNjAsNyBAQAogCiBNRVRIT0RERUYodm9pZCkKIGZ1bGxzaXplX3Vwc2FtcGxlIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKLQkJICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyKQorICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSAqIG91dHB1dF9kYXRhX3B0cikKIHsKICAgKm91dHB1dF9kYXRhX3B0ciA9IGlucHV0X2RhdGE7CiB9CkBAIC0xNzMsOSArMTczLDkgQEAKIAogTUVUSE9EREVGKHZvaWQpCiBub29wX3Vwc2FtcGxlIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKLQkgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyKQorICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyKQogewotICAqb3V0cHV0X2RhdGFfcHRyID0gTlVMTDsJLyogc2FmZXR5IGNoZWNrICovCisgICpvdXRwdXRfZGF0YV9wdHIgPSBOVUxMOyAgICAgIC8qIHNhZmV0eSBjaGVjayAqLwogfQogCiAKQEAgLTE5Miw3ICsxOTIsNyBAQAogCiBNRVRIT0RERUYodm9pZCkKIGludF91cHNhbXBsZSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCi0JICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyKQorICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIpCiB7CiAgIG15X3Vwc2FtcGxlX3B0ciB1cHNhbXBsZSA9IChteV91cHNhbXBsZV9wdHIpIGNpbmZvLT51cHNhbXBsZTsKICAgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSA9ICpvdXRwdXRfZGF0YV9wdHI7CkBAIC0yMTMsMTUgKzIxMywxNSBAQAogICAgIG91dHB0ciA9IG91dHB1dF9kYXRhW291dHJvd107CiAgICAgb3V0ZW5kID0gb3V0cHRyICsgY2luZm8tPm91dHB1dF93aWR0aDsKICAgICB3aGlsZSAob3V0cHRyIDwgb3V0ZW5kKSB7Ci0gICAgICBpbnZhbHVlID0gKmlucHRyKys7CS8qIGRvbid0IG5lZWQgR0VUSlNBTVBMRSgpIGhlcmUgKi8KKyAgICAgIGludmFsdWUgPSAqaW5wdHIrKzsgICAgICAgLyogZG9uJ3QgbmVlZCBHRVRKU0FNUExFKCkgaGVyZSAqLwogICAgICAgZm9yIChoID0gaF9leHBhbmQ7IGggPiAwOyBoLS0pIHsKLQkqb3V0cHRyKysgPSBpbnZhbHVlOworICAgICAgICAqb3V0cHRyKysgPSBpbnZhbHVlOwogICAgICAgfQogICAgIH0KICAgICAvKiBHZW5lcmF0ZSBhbnkgYWRkaXRpb25hbCBvdXRwdXQgcm93cyBieSBkdXBsaWNhdGluZyB0aGUgZmlyc3Qgb25lICovCiAgICAgaWYgKHZfZXhwYW5kID4gMSkgewogICAgICAgamNvcHlfc2FtcGxlX3Jvd3Mob3V0cHV0X2RhdGEsIG91dHJvdywgb3V0cHV0X2RhdGEsIG91dHJvdysxLAotCQkJdl9leHBhbmQtMSwgY2luZm8tPm91dHB1dF93aWR0aCk7CisgICAgICAgICAgICAgICAgICAgICAgICB2X2V4cGFuZC0xLCBjaW5mby0+b3V0cHV0X3dpZHRoKTsKICAgICB9CiAgICAgaW5yb3crKzsKICAgICBvdXRyb3cgKz0gdl9leHBhbmQ7CkBAIC0yMzYsNyArMjM2LDcgQEAKIAogTUVUSE9EREVGKHZvaWQpCiBoMnYxX3Vwc2FtcGxlIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKLQkgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyKQorICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyKQogewogICBKU0FNUEFSUkFZIG91dHB1dF9kYXRhID0gKm91dHB1dF9kYXRhX3B0cjsKICAgcmVnaXN0ZXIgSlNBTVBST1cgaW5wdHIsIG91dHB0cjsKQEAgLTI0OSw3ICsyNDksNyBAQAogICAgIG91dHB0ciA9IG91dHB1dF9kYXRhW2lucm93XTsKICAgICBvdXRlbmQgPSBvdXRwdHIgKyBjaW5mby0+b3V0cHV0X3dpZHRoOwogICAgIHdoaWxlIChvdXRwdHIgPCBvdXRlbmQpIHsKLSAgICAgIGludmFsdWUgPSAqaW5wdHIrKzsJLyogZG9uJ3QgbmVlZCBHRVRKU0FNUExFKCkgaGVyZSAqLworICAgICAgaW52YWx1ZSA9ICppbnB0cisrOyAgICAgICAvKiBkb24ndCBuZWVkIEdFVEpTQU1QTEUoKSBoZXJlICovCiAgICAgICAqb3V0cHRyKysgPSBpbnZhbHVlOwogICAgICAgKm91dHB0cisrID0gaW52YWx1ZTsKICAgICB9CkBAIC0yNjQsNyArMjY0LDcgQEAKIAogTUVUSE9EREVGKHZvaWQpCiBoMnYyX3Vwc2FtcGxlIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKLQkgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyKQorICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyKQogewogICBKU0FNUEFSUkFZIG91dHB1dF9kYXRhID0gKm91dHB1dF9kYXRhX3B0cjsKICAgcmVnaXN0ZXIgSlNBTVBST1cgaW5wdHIsIG91dHB0cjsKQEAgLTI3OCwxMiArMjc4LDEyIEBACiAgICAgb3V0cHRyID0gb3V0cHV0X2RhdGFbb3V0cm93XTsKICAgICBvdXRlbmQgPSBvdXRwdHIgKyBjaW5mby0+b3V0cHV0X3dpZHRoOwogICAgIHdoaWxlIChvdXRwdHIgPCBvdXRlbmQpIHsKLSAgICAgIGludmFsdWUgPSAqaW5wdHIrKzsJLyogZG9uJ3QgbmVlZCBHRVRKU0FNUExFKCkgaGVyZSAqLworICAgICAgaW52YWx1ZSA9ICppbnB0cisrOyAgICAgICAvKiBkb24ndCBuZWVkIEdFVEpTQU1QTEUoKSBoZXJlICovCiAgICAgICAqb3V0cHRyKysgPSBpbnZhbHVlOwogICAgICAgKm91dHB0cisrID0gaW52YWx1ZTsKICAgICB9CiAgICAgamNvcHlfc2FtcGxlX3Jvd3Mob3V0cHV0X2RhdGEsIG91dHJvdywgb3V0cHV0X2RhdGEsIG91dHJvdysxLAotCQkgICAgICAxLCBjaW5mby0+b3V0cHV0X3dpZHRoKTsKKyAgICAgICAgICAgICAgICAgICAgICAxLCBjaW5mby0+b3V0cHV0X3dpZHRoKTsKICAgICBpbnJvdysrOwogICAgIG91dHJvdyArPSAyOwogICB9CkBAIC0zMDcsNyArMzA3LDcgQEAKIAogTUVUSE9EREVGKHZvaWQpCiBoMnYxX2ZhbmN5X3Vwc2FtcGxlIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKLQkJICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIpCisgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIpCiB7CiAgIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEgPSAqb3V0cHV0X2RhdGFfcHRyOwogICByZWdpc3RlciBKU0FNUFJPVyBpbnB0ciwgb3V0cHRyOwpAQCAtMzQ4LDcgKzM0OCw3IEBACiAKIE1FVEhPRERFRih2b2lkKQogaDJ2Ml9mYW5jeV91cHNhbXBsZSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCi0JCSAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyKQorICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyKQogewogICBKU0FNUEFSUkFZIG91dHB1dF9kYXRhID0gKm91dHB1dF9kYXRhX3B0cjsKICAgcmVnaXN0ZXIgSlNBTVBST1cgaW5wdHIwLCBpbnB0cjEsIG91dHB0cjsKQEAgLTM2NSwxMCArMzY1LDEwIEBACiAgICAgZm9yICh2ID0gMDsgdiA8IDI7IHYrKykgewogICAgICAgLyogaW5wdHIwIHBvaW50cyB0byBuZWFyZXN0IGlucHV0IHJvdywgaW5wdHIxIHBvaW50cyB0byBuZXh0IG5lYXJlc3QgKi8KICAgICAgIGlucHRyMCA9IGlucHV0X2RhdGFbaW5yb3ddOwotICAgICAgaWYgKHYgPT0gMCkJCS8qIG5leHQgbmVhcmVzdCBpcyByb3cgYWJvdmUgKi8KLQlpbnB0cjEgPSBpbnB1dF9kYXRhW2lucm93LTFdOwotICAgICAgZWxzZQkJCS8qIG5leHQgbmVhcmVzdCBpcyByb3cgYmVsb3cgKi8KLQlpbnB0cjEgPSBpbnB1dF9kYXRhW2lucm93KzFdOworICAgICAgaWYgKHYgPT0gMCkgICAgICAgICAgICAgICAvKiBuZXh0IG5lYXJlc3QgaXMgcm93IGFib3ZlICovCisgICAgICAgIGlucHRyMSA9IGlucHV0X2RhdGFbaW5yb3ctMV07CisgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgIC8qIG5leHQgbmVhcmVzdCBpcyByb3cgYmVsb3cgKi8KKyAgICAgICAgaW5wdHIxID0gaW5wdXRfZGF0YVtpbnJvdysxXTsKICAgICAgIG91dHB0ciA9IG91dHB1dF9kYXRhW291dHJvdysrXTsKIAogICAgICAgLyogU3BlY2lhbCBjYXNlIGZvciBmaXJzdCBjb2x1bW4gKi8KQEAgLTM3OSwxMiArMzc5LDEyIEBACiAgICAgICBsYXN0Y29sc3VtID0gdGhpc2NvbHN1bTsgdGhpc2NvbHN1bSA9IG5leHRjb2xzdW07CiAKICAgICAgIGZvciAoY29sY3RyID0gY29tcHB0ci0+ZG93bnNhbXBsZWRfd2lkdGggLSAyOyBjb2xjdHIgPiAwOyBjb2xjdHItLSkgewotCS8qIEdlbmVyYWwgY2FzZTogMy80ICogbmVhcmVyIHBpeGVsICsgMS80ICogZnVydGhlciBwaXhlbCBpbiBlYWNoICovCi0JLyogZGltZW5zaW9uLCB0aHVzIDkvMTYsIDMvMTYsIDMvMTYsIDEvMTYgb3ZlcmFsbCAqLwotCW5leHRjb2xzdW0gPSBHRVRKU0FNUExFKCppbnB0cjArKykgKiAzICsgR0VUSlNBTVBMRSgqaW5wdHIxKyspOwotCSpvdXRwdHIrKyA9IChKU0FNUExFKSAoKHRoaXNjb2xzdW0gKiAzICsgbGFzdGNvbHN1bSArIDgpID4+IDQpOwotCSpvdXRwdHIrKyA9IChKU0FNUExFKSAoKHRoaXNjb2xzdW0gKiAzICsgbmV4dGNvbHN1bSArIDcpID4+IDQpOwotCWxhc3Rjb2xzdW0gPSB0aGlzY29sc3VtOyB0aGlzY29sc3VtID0gbmV4dGNvbHN1bTsKKyAgICAgICAgLyogR2VuZXJhbCBjYXNlOiAzLzQgKiBuZWFyZXIgcGl4ZWwgKyAxLzQgKiBmdXJ0aGVyIHBpeGVsIGluIGVhY2ggKi8KKyAgICAgICAgLyogZGltZW5zaW9uLCB0aHVzIDkvMTYsIDMvMTYsIDMvMTYsIDEvMTYgb3ZlcmFsbCAqLworICAgICAgICBuZXh0Y29sc3VtID0gR0VUSlNBTVBMRSgqaW5wdHIwKyspICogMyArIEdFVEpTQU1QTEUoKmlucHRyMSsrKTsKKyAgICAgICAgKm91dHB0cisrID0gKEpTQU1QTEUpICgodGhpc2NvbHN1bSAqIDMgKyBsYXN0Y29sc3VtICsgOCkgPj4gNCk7CisgICAgICAgICpvdXRwdHIrKyA9IChKU0FNUExFKSAoKHRoaXNjb2xzdW0gKiAzICsgbmV4dGNvbHN1bSArIDcpID4+IDQpOworICAgICAgICBsYXN0Y29sc3VtID0gdGhpc2NvbHN1bTsgdGhpc2NvbHN1bSA9IG5leHRjb2xzdW07CiAgICAgICB9CiAKICAgICAgIC8qIFNwZWNpYWwgY2FzZSBmb3IgbGFzdCBjb2x1bW4gKi8KQEAgLTQxMSwxMyArNDExLDEzIEBACiAKICAgdXBzYW1wbGUgPSAobXlfdXBzYW1wbGVfcHRyKQogICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCi0JCQkJU0laRU9GKG15X3Vwc2FtcGxlcikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSVpFT0YobXlfdXBzYW1wbGVyKSk7CiAgIGNpbmZvLT51cHNhbXBsZSA9IChzdHJ1Y3QganBlZ191cHNhbXBsZXIgKikgdXBzYW1wbGU7CiAgIHVwc2FtcGxlLT5wdWIuc3RhcnRfcGFzcyA9IHN0YXJ0X3Bhc3NfdXBzYW1wbGU7CiAgIHVwc2FtcGxlLT5wdWIudXBzYW1wbGUgPSBzZXBfdXBzYW1wbGU7CiAgIHVwc2FtcGxlLT5wdWIubmVlZF9jb250ZXh0X3Jvd3MgPSBGQUxTRTsgLyogdW50aWwgd2UgZmluZCBvdXQgZGlmZmVyZW50bHkgKi8KIAotICBpZiAoY2luZm8tPkNDSVI2MDFfc2FtcGxpbmcpCS8qIHRoaXMgaXNuJ3Qgc3VwcG9ydGVkICovCisgIGlmIChjaW5mby0+Q0NJUjYwMV9zYW1wbGluZykgIC8qIHRoaXMgaXNuJ3Qgc3VwcG9ydGVkICovCiAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9DQ0lSNjAxX05PVElNUEwpOwogCiAgIC8qIGpkbWFpbmN0LmMgZG9lc24ndCBzdXBwb3J0IGNvbnRleHQgcm93cyB3aGVuIG1pbl9EQ1Rfc2NhbGVkX3NpemUgPSAxLApAQCAtNDM0LDkgKzQzNCw5IEBACiAgICAgICogYXJlIHRvIGJlIGNvbnZlcnRlZCB0byBtYXhfaF9zYW1wX2ZhY3RvciAqIG1heF92X3NhbXBfZmFjdG9yIHBpeGVscy4KICAgICAgKi8KICAgICBoX2luX2dyb3VwID0gKGNvbXBwdHItPmhfc2FtcF9mYWN0b3IgKiBjb21wcHRyLT5fRENUX3NjYWxlZF9zaXplKSAvCi0JCSBjaW5mby0+X21pbl9EQ1Rfc2NhbGVkX3NpemU7CisgICAgICAgICAgICAgICAgIGNpbmZvLT5fbWluX0RDVF9zY2FsZWRfc2l6ZTsKICAgICB2X2luX2dyb3VwID0gKGNvbXBwdHItPnZfc2FtcF9mYWN0b3IgKiBjb21wcHRyLT5fRENUX3NjYWxlZF9zaXplKSAvCi0JCSBjaW5mby0+X21pbl9EQ1Rfc2NhbGVkX3NpemU7CisgICAgICAgICAgICAgICAgIGNpbmZvLT5fbWluX0RDVF9zY2FsZWRfc2l6ZTsKICAgICBoX291dF9ncm91cCA9IGNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvcjsKICAgICB2X291dF9ncm91cCA9IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcjsKICAgICB1cHNhbXBsZS0+cm93Z3JvdXBfaGVpZ2h0W2NpXSA9IHZfaW5fZ3JvdXA7IC8qIHNhdmUgZm9yIHVzZSBsYXRlciAqLwpAQCAtNDUwLDM2ICs0NTAsMzYgQEAKICAgICAgIHVwc2FtcGxlLT5tZXRob2RzW2NpXSA9IGZ1bGxzaXplX3Vwc2FtcGxlOwogICAgICAgbmVlZF9idWZmZXIgPSBGQUxTRTsKICAgICB9IGVsc2UgaWYgKGhfaW5fZ3JvdXAgKiAyID09IGhfb3V0X2dyb3VwICYmCi0JICAgICAgIHZfaW5fZ3JvdXAgPT0gdl9vdXRfZ3JvdXApIHsKKyAgICAgICAgICAgICAgIHZfaW5fZ3JvdXAgPT0gdl9vdXRfZ3JvdXApIHsKICAgICAgIC8qIFNwZWNpYWwgY2FzZXMgZm9yIDJoMXYgdXBzYW1wbGluZyAqLwogICAgICAgaWYgKGRvX2ZhbmN5ICYmIGNvbXBwdHItPmRvd25zYW1wbGVkX3dpZHRoID4gMikgewotCWlmIChqc2ltZF9jYW5faDJ2MV9mYW5jeV91cHNhbXBsZSgpKQotCSAgdXBzYW1wbGUtPm1ldGhvZHNbY2ldID0ganNpbWRfaDJ2MV9mYW5jeV91cHNhbXBsZTsKLQllbHNlCi0JICB1cHNhbXBsZS0+bWV0aG9kc1tjaV0gPSBoMnYxX2ZhbmN5X3Vwc2FtcGxlOworICAgICAgICBpZiAoanNpbWRfY2FuX2gydjFfZmFuY3lfdXBzYW1wbGUoKSkKKyAgICAgICAgICB1cHNhbXBsZS0+bWV0aG9kc1tjaV0gPSBqc2ltZF9oMnYxX2ZhbmN5X3Vwc2FtcGxlOworICAgICAgICBlbHNlCisgICAgICAgICAgdXBzYW1wbGUtPm1ldGhvZHNbY2ldID0gaDJ2MV9mYW5jeV91cHNhbXBsZTsKICAgICAgIH0gZWxzZSB7Ci0JaWYgKGpzaW1kX2Nhbl9oMnYxX3Vwc2FtcGxlKCkpCi0JICB1cHNhbXBsZS0+bWV0aG9kc1tjaV0gPSBqc2ltZF9oMnYxX3Vwc2FtcGxlOwotCWVsc2UKLQkgIHVwc2FtcGxlLT5tZXRob2RzW2NpXSA9IGgydjFfdXBzYW1wbGU7CisgICAgICAgIGlmIChqc2ltZF9jYW5faDJ2MV91cHNhbXBsZSgpKQorICAgICAgICAgIHVwc2FtcGxlLT5tZXRob2RzW2NpXSA9IGpzaW1kX2gydjFfdXBzYW1wbGU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICB1cHNhbXBsZS0+bWV0aG9kc1tjaV0gPSBoMnYxX3Vwc2FtcGxlOwogICAgICAgfQogICAgIH0gZWxzZSBpZiAoaF9pbl9ncm91cCAqIDIgPT0gaF9vdXRfZ3JvdXAgJiYKLQkgICAgICAgdl9pbl9ncm91cCAqIDIgPT0gdl9vdXRfZ3JvdXApIHsKKyAgICAgICAgICAgICAgIHZfaW5fZ3JvdXAgKiAyID09IHZfb3V0X2dyb3VwKSB7CiAgICAgICAvKiBTcGVjaWFsIGNhc2VzIGZvciAyaDJ2IHVwc2FtcGxpbmcgKi8KICAgICAgIGlmIChkb19mYW5jeSAmJiBjb21wcHRyLT5kb3duc2FtcGxlZF93aWR0aCA+IDIpIHsKLQlpZiAoanNpbWRfY2FuX2gydjJfZmFuY3lfdXBzYW1wbGUoKSkKLQkgIHVwc2FtcGxlLT5tZXRob2RzW2NpXSA9IGpzaW1kX2gydjJfZmFuY3lfdXBzYW1wbGU7Ci0JZWxzZQotCSAgdXBzYW1wbGUtPm1ldGhvZHNbY2ldID0gaDJ2Ml9mYW5jeV91cHNhbXBsZTsKLQl1cHNhbXBsZS0+cHViLm5lZWRfY29udGV4dF9yb3dzID0gVFJVRTsKKyAgICAgICAgaWYgKGpzaW1kX2Nhbl9oMnYyX2ZhbmN5X3Vwc2FtcGxlKCkpCisgICAgICAgICAgdXBzYW1wbGUtPm1ldGhvZHNbY2ldID0ganNpbWRfaDJ2Ml9mYW5jeV91cHNhbXBsZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHVwc2FtcGxlLT5tZXRob2RzW2NpXSA9IGgydjJfZmFuY3lfdXBzYW1wbGU7CisgICAgICAgIHVwc2FtcGxlLT5wdWIubmVlZF9jb250ZXh0X3Jvd3MgPSBUUlVFOwogICAgICAgfSBlbHNlIHsKLQlpZiAoanNpbWRfY2FuX2gydjJfdXBzYW1wbGUoKSkKLQkgIHVwc2FtcGxlLT5tZXRob2RzW2NpXSA9IGpzaW1kX2gydjJfdXBzYW1wbGU7Ci0JZWxzZQotCSAgdXBzYW1wbGUtPm1ldGhvZHNbY2ldID0gaDJ2Ml91cHNhbXBsZTsKKyAgICAgICAgaWYgKGpzaW1kX2Nhbl9oMnYyX3Vwc2FtcGxlKCkpCisgICAgICAgICAgdXBzYW1wbGUtPm1ldGhvZHNbY2ldID0ganNpbWRfaDJ2Ml91cHNhbXBsZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHVwc2FtcGxlLT5tZXRob2RzW2NpXSA9IGgydjJfdXBzYW1wbGU7CiAgICAgICB9CiAgICAgfSBlbHNlIGlmICgoaF9vdXRfZ3JvdXAgJSBoX2luX2dyb3VwKSA9PSAwICYmCi0JICAgICAgICh2X291dF9ncm91cCAlIHZfaW5fZ3JvdXApID09IDApIHsKKyAgICAgICAgICAgICAgICh2X291dF9ncm91cCAlIHZfaW5fZ3JvdXApID09IDApIHsKICAgICAgIC8qIEdlbmVyaWMgaW50ZWdyYWwtZmFjdG9ycyB1cHNhbXBsaW5nIG1ldGhvZCAqLwogICAgICAgdXBzYW1wbGUtPm1ldGhvZHNbY2ldID0gaW50X3Vwc2FtcGxlOwogICAgICAgdXBzYW1wbGUtPmhfZXhwYW5kW2NpXSA9IChVSU5UOCkgKGhfb3V0X2dyb3VwIC8gaF9pbl9ncm91cCk7CkBAIC00ODgsMTAgKzQ4OCwxMCBAQAogICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9GUkFDVF9TQU1QTEVfTk9USU1QTCk7CiAgICAgaWYgKG5lZWRfYnVmZmVyKSB7CiAgICAgICB1cHNhbXBsZS0+Y29sb3JfYnVmW2NpXSA9ICgqY2luZm8tPm1lbS0+YWxsb2Nfc2FycmF5KQotCSgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCi0JIChKRElNRU5TSU9OKSBqcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5vdXRwdXRfd2lkdGgsCi0JCQkJKGxvbmcpIGNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvciksCi0JIChKRElNRU5TSU9OKSBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IpOworICAgICAgICAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAorICAgICAgICAgKEpESU1FTlNJT04pIGpyb3VuZF91cCgobG9uZykgY2luZm8tPm91dHB1dF93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvciksCisgICAgICAgICAoSkRJTUVOU0lPTikgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yKTsKICAgICB9CiAgIH0KIH0KZGlmZiAtLWdpdCBhL2pkdHJhbnMuYyBiL2pkdHJhbnMuYwppbmRleCBmMGNkMGFlLi4wYTE2M2MwIDEwMDY0NAotLS0gYS9qZHRyYW5zLmMKKysrIGIvamR0cmFucy5jCkBAIC01NSwyMCArNTUsMjAgQEAKICAgICAgIGludCByZXRjb2RlOwogICAgICAgLyogQ2FsbCBwcm9ncmVzcyBtb25pdG9yIGhvb2sgaWYgcHJlc2VudCAqLwogICAgICAgaWYgKGNpbmZvLT5wcm9ncmVzcyAhPSBOVUxMKQotCSgqY2luZm8tPnByb2dyZXNzLT5wcm9ncmVzc19tb25pdG9yKSAoKGpfY29tbW9uX3B0cikgY2luZm8pOworICAgICAgICAoKmNpbmZvLT5wcm9ncmVzcy0+cHJvZ3Jlc3NfbW9uaXRvcikgKChqX2NvbW1vbl9wdHIpIGNpbmZvKTsKICAgICAgIC8qIEFic29yYiBzb21lIG1vcmUgaW5wdXQgKi8KICAgICAgIHJldGNvZGUgPSAoKmNpbmZvLT5pbnB1dGN0bC0+Y29uc3VtZV9pbnB1dCkgKGNpbmZvKTsKICAgICAgIGlmIChyZXRjb2RlID09IEpQRUdfU1VTUEVOREVEKQotCXJldHVybiBOVUxMOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgIGlmIChyZXRjb2RlID09IEpQRUdfUkVBQ0hFRF9FT0kpCi0JYnJlYWs7CisgICAgICAgIGJyZWFrOwogICAgICAgLyogQWR2YW5jZSBwcm9ncmVzcyBjb3VudGVyIGlmIGFwcHJvcHJpYXRlICovCiAgICAgICBpZiAoY2luZm8tPnByb2dyZXNzICE9IE5VTEwgJiYKLQkgIChyZXRjb2RlID09IEpQRUdfUk9XX0NPTVBMRVRFRCB8fCByZXRjb2RlID09IEpQRUdfUkVBQ0hFRF9TT1MpKSB7Ci0JaWYgKCsrY2luZm8tPnByb2dyZXNzLT5wYXNzX2NvdW50ZXIgPj0gY2luZm8tPnByb2dyZXNzLT5wYXNzX2xpbWl0KSB7Ci0JICAvKiBzdGFydHVwIHVuZGVyZXN0aW1hdGVkIG51bWJlciBvZiBzY2FuczsgcmF0Y2hldCB1cCBvbmUgc2NhbiAqLwotCSAgY2luZm8tPnByb2dyZXNzLT5wYXNzX2xpbWl0ICs9IChsb25nKSBjaW5mby0+dG90YWxfaU1DVV9yb3dzOwotCX0KKyAgICAgICAgICAocmV0Y29kZSA9PSBKUEVHX1JPV19DT01QTEVURUQgfHwgcmV0Y29kZSA9PSBKUEVHX1JFQUNIRURfU09TKSkgeworICAgICAgICBpZiAoKytjaW5mby0+cHJvZ3Jlc3MtPnBhc3NfY291bnRlciA+PSBjaW5mby0+cHJvZ3Jlc3MtPnBhc3NfbGltaXQpIHsKKyAgICAgICAgICAvKiBzdGFydHVwIHVuZGVyZXN0aW1hdGVkIG51bWJlciBvZiBzY2FuczsgcmF0Y2hldCB1cCBvbmUgc2NhbiAqLworICAgICAgICAgIGNpbmZvLT5wcm9ncmVzcy0+cGFzc19saW1pdCArPSAobG9uZykgY2luZm8tPnRvdGFsX2lNQ1Vfcm93czsKKyAgICAgICAgfQogICAgICAgfQogICAgIH0KICAgICAvKiBTZXQgc3RhdGUgc28gdGhhdCBqcGVnX2ZpbmlzaF9kZWNvbXByZXNzIGRvZXMgdGhlIHJpZ2h0IHRoaW5nICovCkBAIC04NCw3ICs4NCw3IEBACiAgIH0KICAgLyogT29wcywgaW1wcm9wZXIgdXNhZ2UgKi8KICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1NUQVRFLCBjaW5mby0+Z2xvYmFsX3N0YXRlKTsKLSAgcmV0dXJuIE5VTEw7CQkJLyoga2VlcCBjb21waWxlciBoYXBweSAqLworICByZXR1cm4gTlVMTDsgICAgICAgICAgICAgICAgICAvKiBrZWVwIGNvbXBpbGVyIGhhcHB5ICovCiB9CiAKIApkaWZmIC0tZ2l0IGEvamVycm9yLmMgYi9qZXJyb3IuYwppbmRleCAzZGE3YmU4Li5jZDRjMmEzIDEwMDY0NAotLS0gYS9qZXJyb3IuYworKysgYi9qZXJyb3IuYwpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNlbmRpZgogCi0jaWZuZGVmIEVYSVRfRkFJTFVSRQkJLyogZGVmaW5lIGV4aXQoKSBjb2RlcyBpZiBub3QgcHJvdmlkZWQgKi8KKyNpZm5kZWYgRVhJVF9GQUlMVVJFICAgICAgICAgICAgLyogZGVmaW5lIGV4aXQoKSBjb2RlcyBpZiBub3QgcHJvdmlkZWQgKi8KICNkZWZpbmUgRVhJVF9GQUlMVVJFICAxCiAjZW5kaWYKIApAQCAtNDIsMTAgKzQyLDEwIEBACiAgKi8KIAogI2lmZGVmIE5FRURfU0hPUlRfRVhURVJOQUxfTkFNRVMKLSNkZWZpbmUganBlZ19zdGRfbWVzc2FnZV90YWJsZQlqTXNnVGFibGUKKyNkZWZpbmUganBlZ19zdGRfbWVzc2FnZV90YWJsZSAgak1zZ1RhYmxlCiAjZW5kaWYKIAotI2RlZmluZSBKTUVTU0FHRShjb2RlLHN0cmluZykJc3RyaW5nICwKKyNkZWZpbmUgSk1FU1NBR0UoY29kZSxzdHJpbmcpICAgc3RyaW5nICwKIAogY29uc3QgY2hhciAqIGNvbnN0IGpwZWdfc3RkX21lc3NhZ2VfdGFibGVbXSA9IHsKICNpbmNsdWRlICJqZXJyb3IuaCIKQEAgLTEwNSw3ICsxMDUsNyBAQAogI2lmZGVmIFVTRV9XSU5ET1dTX01FU1NBR0VCT1gKICAgLyogRGlzcGxheSBpdCBpbiBhIG1lc3NhZ2UgZGlhbG9nIGJveCAqLwogICBNZXNzYWdlQm94KEdldEFjdGl2ZVdpbmRvdygpLCBidWZmZXIsICJKUEVHIExpYnJhcnkgRXJyb3IiLAotCSAgICAgTUJfT0sgfCBNQl9JQ09ORVJST1IpOworICAgICAgICAgICAgIE1CX09LIHwgTUJfSUNPTkVSUk9SKTsKICNlbHNlCiAgIC8qIFNlbmQgaXQgdG8gc3RkZXJyLCBhZGRpbmcgYSBuZXdsaW5lICovCiAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsIGJ1ZmZlcik7CkBAIC0xNjcsOCArMTY3LDggQEAKICAgaWYgKG1zZ19jb2RlID4gMCAmJiBtc2dfY29kZSA8PSBlcnItPmxhc3RfanBlZ19tZXNzYWdlKSB7CiAgICAgbXNndGV4dCA9IGVyci0+anBlZ19tZXNzYWdlX3RhYmxlW21zZ19jb2RlXTsKICAgfSBlbHNlIGlmIChlcnItPmFkZG9uX21lc3NhZ2VfdGFibGUgIT0gTlVMTCAmJgotCSAgICAgbXNnX2NvZGUgPj0gZXJyLT5maXJzdF9hZGRvbl9tZXNzYWdlICYmCi0JICAgICBtc2dfY29kZSA8PSBlcnItPmxhc3RfYWRkb25fbWVzc2FnZSkgeworICAgICAgICAgICAgIG1zZ19jb2RlID49IGVyci0+Zmlyc3RfYWRkb25fbWVzc2FnZSAmJgorICAgICAgICAgICAgIG1zZ19jb2RlIDw9IGVyci0+bGFzdF9hZGRvbl9tZXNzYWdlKSB7CiAgICAgbXNndGV4dCA9IGVyci0+YWRkb25fbWVzc2FnZV90YWJsZVttc2dfY29kZSAtIGVyci0+Zmlyc3RfYWRkb25fbWVzc2FnZV07CiAgIH0KIApAQCAtMTkzLDEwICsxOTMsMTAgQEAKICAgICBzcHJpbnRmKGJ1ZmZlciwgbXNndGV4dCwgZXJyLT5tc2dfcGFybS5zKTsKICAgZWxzZQogICAgIHNwcmludGYoYnVmZmVyLCBtc2d0ZXh0LAotCSAgICBlcnItPm1zZ19wYXJtLmlbMF0sIGVyci0+bXNnX3Bhcm0uaVsxXSwKLQkgICAgZXJyLT5tc2dfcGFybS5pWzJdLCBlcnItPm1zZ19wYXJtLmlbM10sCi0JICAgIGVyci0+bXNnX3Bhcm0uaVs0XSwgZXJyLT5tc2dfcGFybS5pWzVdLAotCSAgICBlcnItPm1zZ19wYXJtLmlbNl0sIGVyci0+bXNnX3Bhcm0uaVs3XSk7CisgICAgICAgICAgICBlcnItPm1zZ19wYXJtLmlbMF0sIGVyci0+bXNnX3Bhcm0uaVsxXSwKKyAgICAgICAgICAgIGVyci0+bXNnX3Bhcm0uaVsyXSwgZXJyLT5tc2dfcGFybS5pWzNdLAorICAgICAgICAgICAgZXJyLT5tc2dfcGFybS5pWzRdLCBlcnItPm1zZ19wYXJtLmlbNV0sCisgICAgICAgICAgICBlcnItPm1zZ19wYXJtLmlbNl0sIGVyci0+bXNnX3Bhcm0uaVs3XSk7CiB9CiAKIApAQCAtMjEzLDE3ICsyMTMsMTcgQEAKIHsKICAgY2luZm8tPmVyci0+bnVtX3dhcm5pbmdzID0gMDsKICAgLyogdHJhY2VfbGV2ZWwgaXMgbm90IHJlc2V0IHNpbmNlIGl0IGlzIGFuIGFwcGxpY2F0aW9uLXN1cHBsaWVkIHBhcmFtZXRlciAqLwotICBjaW5mby0+ZXJyLT5tc2dfY29kZSA9IDA7CS8qIG1heSBiZSB1c2VmdWwgYXMgYSBmbGFnIGZvciAibm8gZXJyb3IiICovCisgIGNpbmZvLT5lcnItPm1zZ19jb2RlID0gMDsgICAgIC8qIG1heSBiZSB1c2VmdWwgYXMgYSBmbGFnIGZvciAibm8gZXJyb3IiICovCiB9CiAKIAogLyoKICAqIEZpbGwgaW4gdGhlIHN0YW5kYXJkIGVycm9yLWhhbmRsaW5nIG1ldGhvZHMgaW4gYSBqcGVnX2Vycm9yX21nciBvYmplY3QuCiAgKiBUeXBpY2FsIGNhbGwgaXM6Ci0gKglzdHJ1Y3QganBlZ19jb21wcmVzc19zdHJ1Y3QgY2luZm87Ci0gKglzdHJ1Y3QganBlZ19lcnJvcl9tZ3IgZXJyOworICogICAgICBzdHJ1Y3QganBlZ19jb21wcmVzc19zdHJ1Y3QgY2luZm87CisgKiAgICAgIHN0cnVjdCBqcGVnX2Vycm9yX21nciBlcnI7CiAgKgotICoJY2luZm8uZXJyID0ganBlZ19zdGRfZXJyb3IoJmVycik7CisgKiAgICAgIGNpbmZvLmVyciA9IGpwZWdfc3RkX2Vycm9yKCZlcnIpOwogICogYWZ0ZXIgd2hpY2ggdGhlIGFwcGxpY2F0aW9uIG1heSBvdmVycmlkZSBzb21lIG9mIHRoZSBtZXRob2RzLgogICovCiAKQEAgLTIzNiwxNiArMjM2LDE2IEBACiAgIGVyci0+Zm9ybWF0X21lc3NhZ2UgPSBmb3JtYXRfbWVzc2FnZTsKICAgZXJyLT5yZXNldF9lcnJvcl9tZ3IgPSByZXNldF9lcnJvcl9tZ3I7CiAKLSAgZXJyLT50cmFjZV9sZXZlbCA9IDA7CQkvKiBkZWZhdWx0ID0gbm8gdHJhY2luZyAqLwotICBlcnItPm51bV93YXJuaW5ncyA9IDA7CS8qIG5vIHdhcm5pbmdzIGVtaXR0ZWQgeWV0ICovCi0gIGVyci0+bXNnX2NvZGUgPSAwOwkJLyogbWF5IGJlIHVzZWZ1bCBhcyBhIGZsYWcgZm9yICJubyBlcnJvciIgKi8KKyAgZXJyLT50cmFjZV9sZXZlbCA9IDA7ICAgICAgICAgLyogZGVmYXVsdCA9IG5vIHRyYWNpbmcgKi8KKyAgZXJyLT5udW1fd2FybmluZ3MgPSAwOyAgICAgICAgLyogbm8gd2FybmluZ3MgZW1pdHRlZCB5ZXQgKi8KKyAgZXJyLT5tc2dfY29kZSA9IDA7ICAgICAgICAgICAgLyogbWF5IGJlIHVzZWZ1bCBhcyBhIGZsYWcgZm9yICJubyBlcnJvciIgKi8KIAogICAvKiBJbml0aWFsaXplIG1lc3NhZ2UgdGFibGUgcG9pbnRlcnMgKi8KICAgZXJyLT5qcGVnX21lc3NhZ2VfdGFibGUgPSBqcGVnX3N0ZF9tZXNzYWdlX3RhYmxlOwogICBlcnItPmxhc3RfanBlZ19tZXNzYWdlID0gKGludCkgSk1TR19MQVNUTVNHQ09ERSAtIDE7CiAKICAgZXJyLT5hZGRvbl9tZXNzYWdlX3RhYmxlID0gTlVMTDsKLSAgZXJyLT5maXJzdF9hZGRvbl9tZXNzYWdlID0gMDsJLyogZm9yIHNhZmV0eSAqLworICBlcnItPmZpcnN0X2FkZG9uX21lc3NhZ2UgPSAwOyAvKiBmb3Igc2FmZXR5ICovCiAgIGVyci0+bGFzdF9hZGRvbl9tZXNzYWdlID0gMDsKIAogICByZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvamVycm9yLmggYi9qZXJyb3IuaAppbmRleCBlYTZjYTRlLi40MDI2MTNlIDEwMDY0NAotLS0gYS9qZXJyb3IuaAorKysgYi9qZXJyb3IuaApAQCAtMzUsNyArMzUsNyBAQAogCiB0eXBlZGVmIGVudW0gewogCi0jZGVmaW5lIEpNRVNTQUdFKGNvZGUsc3RyaW5nKQljb2RlICwKKyNkZWZpbmUgSk1FU1NBR0UoY29kZSxzdHJpbmcpICAgY29kZSAsCiAKICNlbmRpZiAvKiBKTUFLRV9FTlVNX0xJU1QgKi8KIApAQCAtNDQsNyArNDQsNyBAQAogLyogRm9yIG1haW50ZW5hbmNlIGNvbnZlbmllbmNlLCBsaXN0IGlzIGFscGhhYmV0aWNhbCBieSBtZXNzYWdlIGNvZGUgbmFtZSAqLwogI2lmIEpQRUdfTElCX1ZFUlNJT04gPCA3MAogSk1FU1NBR0UoSkVSUl9BUklUSF9OT1RJTVBMLAotCSAiU29ycnksIGFyaXRobWV0aWMgY29kaW5nIGlzIG5vdCBpbXBsZW1lbnRlZCIpCisgICAgICAgICAiU29ycnksIGFyaXRobWV0aWMgY29kaW5nIGlzIG5vdCBpbXBsZW1lbnRlZCIpCiAjZW5kaWYKIEpNRVNTQUdFKEpFUlJfQkFEX0FMSUdOX1RZUEUsICJBTElHTl9UWVBFIGlzIHdyb25nLCBwbGVhc2UgZml4IikKIEpNRVNTQUdFKEpFUlJfQkFEX0FMTE9DX0NIVU5LLCAiTUFYX0FMTE9DX0NIVU5LIGlzIHdyb25nLCBwbGVhc2UgZml4IikKQEAgLTU3LDI2ICs1NywyNiBAQAogSk1FU1NBR0UoSkVSUl9CQURfRENUU0laRSwgIklEQ1Qgb3V0cHV0IGJsb2NrIHNpemUgJWQgbm90IHN1cHBvcnRlZCIpCiAjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA3MAogSk1FU1NBR0UoSkVSUl9CQURfRFJPUF9TQU1QTElORywKLQkgIkNvbXBvbmVudCBpbmRleCAlZDogbWlzbWF0Y2hpbmcgc2FtcGxpbmcgcmF0aW8gJWQ6JWQsICVkOiVkLCAlYyIpCisgICAgICAgICAiQ29tcG9uZW50IGluZGV4ICVkOiBtaXNtYXRjaGluZyBzYW1wbGluZyByYXRpbyAlZDolZCwgJWQ6JWQsICVjIikKICNlbmRpZgogSk1FU1NBR0UoSkVSUl9CQURfSFVGRl9UQUJMRSwgIkJvZ3VzIEh1ZmZtYW4gdGFibGUgZGVmaW5pdGlvbiIpCiBKTUVTU0FHRShKRVJSX0JBRF9JTl9DT0xPUlNQQUNFLCAiQm9ndXMgaW5wdXQgY29sb3JzcGFjZSIpCiBKTUVTU0FHRShKRVJSX0JBRF9KX0NPTE9SU1BBQ0UsICJCb2d1cyBKUEVHIGNvbG9yc3BhY2UiKQogSk1FU1NBR0UoSkVSUl9CQURfTEVOR1RILCAiQm9ndXMgbWFya2VyIGxlbmd0aCIpCiBKTUVTU0FHRShKRVJSX0JBRF9MSUJfVkVSU0lPTiwKLQkgIldyb25nIEpQRUcgbGlicmFyeSB2ZXJzaW9uOiBsaWJyYXJ5IGlzICVkLCBjYWxsZXIgZXhwZWN0cyAlZCIpCisgICAgICAgICAiV3JvbmcgSlBFRyBsaWJyYXJ5IHZlcnNpb246IGxpYnJhcnkgaXMgJWQsIGNhbGxlciBleHBlY3RzICVkIikKIEpNRVNTQUdFKEpFUlJfQkFEX01DVV9TSVpFLCAiU2FtcGxpbmcgZmFjdG9ycyB0b28gbGFyZ2UgZm9yIGludGVybGVhdmVkIHNjYW4iKQogSk1FU1NBR0UoSkVSUl9CQURfUE9PTF9JRCwgIkludmFsaWQgbWVtb3J5IHBvb2wgY29kZSAlZCIpCiBKTUVTU0FHRShKRVJSX0JBRF9QUkVDSVNJT04sICJVbnN1cHBvcnRlZCBKUEVHIGRhdGEgcHJlY2lzaW9uICVkIikKIEpNRVNTQUdFKEpFUlJfQkFEX1BST0dSRVNTSU9OLAotCSAiSW52YWxpZCBwcm9ncmVzc2l2ZSBwYXJhbWV0ZXJzIFNzPSVkIFNlPSVkIEFoPSVkIEFsPSVkIikKKyAgICAgICAgICJJbnZhbGlkIHByb2dyZXNzaXZlIHBhcmFtZXRlcnMgU3M9JWQgU2U9JWQgQWg9JWQgQWw9JWQiKQogSk1FU1NBR0UoSkVSUl9CQURfUFJPR19TQ1JJUFQsCi0JICJJbnZhbGlkIHByb2dyZXNzaXZlIHBhcmFtZXRlcnMgYXQgc2NhbiBzY3JpcHQgZW50cnkgJWQiKQorICAgICAgICAgIkludmFsaWQgcHJvZ3Jlc3NpdmUgcGFyYW1ldGVycyBhdCBzY2FuIHNjcmlwdCBlbnRyeSAlZCIpCiBKTUVTU0FHRShKRVJSX0JBRF9TQU1QTElORywgIkJvZ3VzIHNhbXBsaW5nIGZhY3RvcnMiKQogSk1FU1NBR0UoSkVSUl9CQURfU0NBTl9TQ1JJUFQsICJJbnZhbGlkIHNjYW4gc2NyaXB0IGF0IGVudHJ5ICVkIikKIEpNRVNTQUdFKEpFUlJfQkFEX1NUQVRFLCAiSW1wcm9wZXIgY2FsbCB0byBKUEVHIGxpYnJhcnkgaW4gc3RhdGUgJWQiKQogSk1FU1NBR0UoSkVSUl9CQURfU1RSVUNUX1NJWkUsCi0JICJKUEVHIHBhcmFtZXRlciBzdHJ1Y3QgbWlzbWF0Y2g6IGxpYnJhcnkgdGhpbmtzIHNpemUgaXMgJXUsIGNhbGxlciBleHBlY3RzICV1IikKKyAgICAgICAgICJKUEVHIHBhcmFtZXRlciBzdHJ1Y3QgbWlzbWF0Y2g6IGxpYnJhcnkgdGhpbmtzIHNpemUgaXMgJXUsIGNhbGxlciBleHBlY3RzICV1IikKIEpNRVNTQUdFKEpFUlJfQkFEX1ZJUlRVQUxfQUNDRVNTLCAiQm9ndXMgdmlydHVhbCBhcnJheSBhY2Nlc3MiKQogSk1FU1NBR0UoSkVSUl9CVUZGRVJfU0laRSwgIkJ1ZmZlciBwYXNzZWQgdG8gSlBFRyBsaWJyYXJ5IGlzIHRvbyBzbWFsbCIpCiBKTUVTU0FHRShKRVJSX0NBTlRfU1VTUEVORCwgIlN1c3BlbnNpb24gbm90IGFsbG93ZWQgaGVyZSIpCkBAIC0xMDAsNyArMTAwLDcgQEAKIEpNRVNTQUdFKEpFUlJfSU5QVVRfRU1QVFksICJFbXB0eSBpbnB1dCBmaWxlIikKIEpNRVNTQUdFKEpFUlJfSU5QVVRfRU9GLCAiUHJlbWF0dXJlIGVuZCBvZiBpbnB1dCBmaWxlIikKIEpNRVNTQUdFKEpFUlJfTUlTTUFUQ0hFRF9RVUFOVF9UQUJMRSwKLQkgIkNhbm5vdCB0cmFuc2NvZGUgZHVlIHRvIG11bHRpcGxlIHVzZSBvZiBxdWFudGl6YXRpb24gdGFibGUgJWQiKQorICAgICAgICAgIkNhbm5vdCB0cmFuc2NvZGUgZHVlIHRvIG11bHRpcGxlIHVzZSBvZiBxdWFudGl6YXRpb24gdGFibGUgJWQiKQogSk1FU1NBR0UoSkVSUl9NSVNTSU5HX0RBVEEsICJTY2FuIHNjcmlwdCBkb2VzIG5vdCB0cmFuc21pdCBhbGwgZGF0YSIpCiBKTUVTU0FHRShKRVJSX01PREVfQ0hBTkdFLCAiSW52YWxpZCBjb2xvciBxdWFudGl6YXRpb24gbW9kZSBjaGFuZ2UiKQogSk1FU1NBR0UoSkVSUl9OT1RJTVBMLCAiTm90IGltcGxlbWVudGVkIHlldCIpCkBAIC0xMTUsNyArMTE1LDcgQEAKIEpNRVNTQUdFKEpFUlJfTk9fU09JLCAiTm90IGEgSlBFRyBmaWxlOiBzdGFydHMgd2l0aCAweCUwMnggMHglMDJ4IikKIEpNRVNTQUdFKEpFUlJfT1VUX09GX01FTU9SWSwgIkluc3VmZmljaWVudCBtZW1vcnkgKGNhc2UgJWQpIikKIEpNRVNTQUdFKEpFUlJfUVVBTlRfQ09NUE9ORU5UUywKLQkgIkNhbm5vdCBxdWFudGl6ZSBtb3JlIHRoYW4gJWQgY29sb3IgY29tcG9uZW50cyIpCisgICAgICAgICAiQ2Fubm90IHF1YW50aXplIG1vcmUgdGhhbiAlZCBjb2xvciBjb21wb25lbnRzIikKIEpNRVNTQUdFKEpFUlJfUVVBTlRfRkVXX0NPTE9SUywgIkNhbm5vdCBxdWFudGl6ZSB0byBmZXdlciB0aGFuICVkIGNvbG9ycyIpCiBKTUVTU0FHRShKRVJSX1FVQU5UX01BTllfQ09MT1JTLCAiQ2Fubm90IHF1YW50aXplIHRvIG1vcmUgdGhhbiAlZCBjb2xvcnMiKQogSk1FU1NBR0UoSkVSUl9TT0ZfRFVQTElDQVRFLCAiSW52YWxpZCBKUEVHIGZpbGUgc3RydWN0dXJlOiB0d28gU09GIG1hcmtlcnMiKQpAQCAtMTI3LDcgKzEyNyw3IEBACiBKTUVTU0FHRShKRVJSX1RGSUxFX1JFQUQsICJSZWFkIGZhaWxlZCBvbiB0ZW1wb3JhcnkgZmlsZSIpCiBKTUVTU0FHRShKRVJSX1RGSUxFX1NFRUssICJTZWVrIGZhaWxlZCBvbiB0ZW1wb3JhcnkgZmlsZSIpCiBKTUVTU0FHRShKRVJSX1RGSUxFX1dSSVRFLAotCSAiV3JpdGUgZmFpbGVkIG9uIHRlbXBvcmFyeSBmaWxlIC0tLSBvdXQgb2YgZGlzayBzcGFjZT8iKQorICAgICAgICAgIldyaXRlIGZhaWxlZCBvbiB0ZW1wb3JhcnkgZmlsZSAtLS0gb3V0IG9mIGRpc2sgc3BhY2U/IikKIEpNRVNTQUdFKEpFUlJfVE9PX0xJVFRMRV9EQVRBLCAiQXBwbGljYXRpb24gdHJhbnNmZXJyZWQgdG9vIGZldyBzY2FubGluZXMiKQogSk1FU1NBR0UoSkVSUl9VTktOT1dOX01BUktFUiwgIlVuc3VwcG9ydGVkIG1hcmtlciB0eXBlIDB4JTAyeCIpCiBKTUVTU0FHRShKRVJSX1ZJUlRVQUxfQlVHLCAiVmlydHVhbCBhcnJheSBjb250cm9sbGVyIG1lc3NlZCB1cCIpCkBAIC0xMzcsOSArMTM3LDkgQEAKIEpNRVNTQUdFKEpNU0dfQ09QWVJJR0hULCBKQ09QWVJJR0hUX1NIT1JUKQogSk1FU1NBR0UoSk1TR19WRVJTSU9OLCBKVkVSU0lPTikKIEpNRVNTQUdFKEpUUkNfMTZCSVRfVEFCTEVTLAotCSAiQ2F1dGlvbjogcXVhbnRpemF0aW9uIHRhYmxlcyBhcmUgdG9vIGNvYXJzZSBmb3IgYmFzZWxpbmUgSlBFRyIpCisgICAgICAgICAiQ2F1dGlvbjogcXVhbnRpemF0aW9uIHRhYmxlcyBhcmUgdG9vIGNvYXJzZSBmb3IgYmFzZWxpbmUgSlBFRyIpCiBKTUVTU0FHRShKVFJDX0FET0JFLAotCSAiQWRvYmUgQVBQMTQgbWFya2VyOiB2ZXJzaW9uICVkLCBmbGFncyAweCUwNHggMHglMDR4LCB0cmFuc2Zvcm0gJWQiKQorICAgICAgICAgIkFkb2JlIEFQUDE0IG1hcmtlcjogdmVyc2lvbiAlZCwgZmxhZ3MgMHglMDR4IDB4JTA0eCwgdHJhbnNmb3JtICVkIikKIEpNRVNTQUdFKEpUUkNfQVBQMCwgIlVua25vd24gQVBQMCBtYXJrZXIgKG5vdCBKRklGKSwgbGVuZ3RoICV1IikKIEpNRVNTQUdFKEpUUkNfQVBQMTQsICJVbmtub3duIEFQUDE0IG1hcmtlciAobm90IEFkb2JlKSwgbGVuZ3RoICV1IikKIEpNRVNTQUdFKEpUUkNfREFDLCAiRGVmaW5lIEFyaXRobWV0aWMgVGFibGUgMHglMDJ4OiAweCUwMngiKQpAQCAtMTUyLDkgKzE1Miw5IEBACiBKTUVTU0FHRShKVFJDX0hVRkZCSVRTLCAiICAgICAgICAlM2QgJTNkICUzZCAlM2QgJTNkICUzZCAlM2QgJTNkIikKIEpNRVNTQUdFKEpUUkNfSkZJRiwgIkpGSUYgQVBQMCBtYXJrZXI6IHZlcnNpb24gJWQuJTAyZCwgZGVuc2l0eSAlZHglZCAgJWQiKQogSk1FU1NBR0UoSlRSQ19KRklGX0JBRFRIVU1CTkFJTFNJWkUsCi0JICJXYXJuaW5nOiB0aHVtYm5haWwgaW1hZ2Ugc2l6ZSBkb2VzIG5vdCBtYXRjaCBkYXRhIGxlbmd0aCAldSIpCisgICAgICAgICAiV2FybmluZzogdGh1bWJuYWlsIGltYWdlIHNpemUgZG9lcyBub3QgbWF0Y2ggZGF0YSBsZW5ndGggJXUiKQogSk1FU1NBR0UoSlRSQ19KRklGX0VYVEVOU0lPTiwKLQkgIkpGSUYgZXh0ZW5zaW9uIG1hcmtlcjogdHlwZSAweCUwMngsIGxlbmd0aCAldSIpCisgICAgICAgICAiSkZJRiBleHRlbnNpb24gbWFya2VyOiB0eXBlIDB4JTAyeCwgbGVuZ3RoICV1IikKIEpNRVNTQUdFKEpUUkNfSkZJRl9USFVNQk5BSUwsICIgICAgd2l0aCAlZCB4ICVkIHRodW1ibmFpbCBpbWFnZSIpCiBKTUVTU0FHRShKVFJDX01JU0NfTUFSS0VSLCAiTWlzY2VsbGFuZW91cyBtYXJrZXIgMHglMDJ4LCBsZW5ndGggJXUiKQogSk1FU1NBR0UoSlRSQ19QQVJNTEVTU19NQVJLRVIsICJVbmV4cGVjdGVkIG1hcmtlciAweCUwMngiKQpAQCAtMTY1LDcgKzE2NSw3IEBACiBKTUVTU0FHRShKVFJDX1JFQ09WRVJZX0FDVElPTiwgIkF0IG1hcmtlciAweCUwMngsIHJlY292ZXJ5IGFjdGlvbiAlZCIpCiBKTUVTU0FHRShKVFJDX1JTVCwgIlJTVCVkIikKIEpNRVNTQUdFKEpUUkNfU01PT1RIX05PVElNUEwsCi0JICJTbW9vdGhpbmcgbm90IHN1cHBvcnRlZCB3aXRoIG5vbnN0YW5kYXJkIHNhbXBsaW5nIHJhdGlvcyIpCisgICAgICAgICAiU21vb3RoaW5nIG5vdCBzdXBwb3J0ZWQgd2l0aCBub25zdGFuZGFyZCBzYW1wbGluZyByYXRpb3MiKQogSk1FU1NBR0UoSlRSQ19TT0YsICJTdGFydCBPZiBGcmFtZSAweCUwMng6IHdpZHRoPSV1LCBoZWlnaHQ9JXUsIGNvbXBvbmVudHM9JWQiKQogSk1FU1NBR0UoSlRSQ19TT0ZfQ09NUE9ORU5ULCAiICAgIENvbXBvbmVudCAlZDogJWRoeCVkdiBxPSVkIikKIEpNRVNTQUdFKEpUUkNfU09JLCAiU3RhcnQgb2YgSW1hZ2UiKQpAQCAtMTc1LDEzICsxNzUsMTMgQEAKIEpNRVNTQUdFKEpUUkNfVEZJTEVfQ0xPU0UsICJDbG9zZWQgdGVtcG9yYXJ5IGZpbGUgJXMiKQogSk1FU1NBR0UoSlRSQ19URklMRV9PUEVOLCAiT3BlbmVkIHRlbXBvcmFyeSBmaWxlICVzIikKIEpNRVNTQUdFKEpUUkNfVEhVTUJfSlBFRywKLQkgIkpGSUYgZXh0ZW5zaW9uIG1hcmtlcjogSlBFRy1jb21wcmVzc2VkIHRodW1ibmFpbCBpbWFnZSwgbGVuZ3RoICV1IikKKyAgICAgICAgICJKRklGIGV4dGVuc2lvbiBtYXJrZXI6IEpQRUctY29tcHJlc3NlZCB0aHVtYm5haWwgaW1hZ2UsIGxlbmd0aCAldSIpCiBKTUVTU0FHRShKVFJDX1RIVU1CX1BBTEVUVEUsCi0JICJKRklGIGV4dGVuc2lvbiBtYXJrZXI6IHBhbGV0dGUgdGh1bWJuYWlsIGltYWdlLCBsZW5ndGggJXUiKQorICAgICAgICAgIkpGSUYgZXh0ZW5zaW9uIG1hcmtlcjogcGFsZXR0ZSB0aHVtYm5haWwgaW1hZ2UsIGxlbmd0aCAldSIpCiBKTUVTU0FHRShKVFJDX1RIVU1CX1JHQiwKLQkgIkpGSUYgZXh0ZW5zaW9uIG1hcmtlcjogUkdCIHRodW1ibmFpbCBpbWFnZSwgbGVuZ3RoICV1IikKKyAgICAgICAgICJKRklGIGV4dGVuc2lvbiBtYXJrZXI6IFJHQiB0aHVtYm5haWwgaW1hZ2UsIGxlbmd0aCAldSIpCiBKTUVTU0FHRShKVFJDX1VOS05PV05fSURTLAotCSAiVW5yZWNvZ25pemVkIGNvbXBvbmVudCBJRHMgJWQgJWQgJWQsIGFzc3VtaW5nIFlDYkNyIikKKyAgICAgICAgICJVbnJlY29nbml6ZWQgY29tcG9uZW50IElEcyAlZCAlZCAlZCwgYXNzdW1pbmcgWUNiQ3IiKQogSk1FU1NBR0UoSlRSQ19YTVNfQ0xPU0UsICJGcmVlZCBYTVMgaGFuZGxlICV1IikKIEpNRVNTQUdFKEpUUkNfWE1TX09QRU4sICJPYnRhaW5lZCBYTVMgaGFuZGxlICV1IikKIEpNRVNTQUdFKEpXUk5fQURPQkVfWEZPUk0sICJVbmtub3duIEFkb2JlIGNvbG9yIHRyYW5zZm9ybSBjb2RlICVkIikKQEAgLTE4OSwxNSArMTg5LDE1IEBACiBKTUVTU0FHRShKV1JOX0FSSVRIX0JBRF9DT0RFLCAiQ29ycnVwdCBKUEVHIGRhdGE6IGJhZCBhcml0aG1ldGljIGNvZGUiKQogI2VuZGlmCiBKTUVTU0FHRShKV1JOX0JPR1VTX1BST0dSRVNTSU9OLAotCSAiSW5jb25zaXN0ZW50IHByb2dyZXNzaW9uIHNlcXVlbmNlIGZvciBjb21wb25lbnQgJWQgY29lZmZpY2llbnQgJWQiKQorICAgICAgICAgIkluY29uc2lzdGVudCBwcm9ncmVzc2lvbiBzZXF1ZW5jZSBmb3IgY29tcG9uZW50ICVkIGNvZWZmaWNpZW50ICVkIikKIEpNRVNTQUdFKEpXUk5fRVhUUkFORU9VU19EQVRBLAotCSAiQ29ycnVwdCBKUEVHIGRhdGE6ICV1IGV4dHJhbmVvdXMgYnl0ZXMgYmVmb3JlIG1hcmtlciAweCUwMngiKQorICAgICAgICAgIkNvcnJ1cHQgSlBFRyBkYXRhOiAldSBleHRyYW5lb3VzIGJ5dGVzIGJlZm9yZSBtYXJrZXIgMHglMDJ4IikKIEpNRVNTQUdFKEpXUk5fSElUX01BUktFUiwgIkNvcnJ1cHQgSlBFRyBkYXRhOiBwcmVtYXR1cmUgZW5kIG9mIGRhdGEgc2VnbWVudCIpCiBKTUVTU0FHRShKV1JOX0hVRkZfQkFEX0NPREUsICJDb3JydXB0IEpQRUcgZGF0YTogYmFkIEh1ZmZtYW4gY29kZSIpCiBKTUVTU0FHRShKV1JOX0pGSUZfTUFKT1IsICJXYXJuaW5nOiB1bmtub3duIEpGSUYgcmV2aXNpb24gbnVtYmVyICVkLiUwMmQiKQogSk1FU1NBR0UoSldSTl9KUEVHX0VPRiwgIlByZW1hdHVyZSBlbmQgb2YgSlBFRyBmaWxlIikKIEpNRVNTQUdFKEpXUk5fTVVTVF9SRVNZTkMsCi0JICJDb3JydXB0IEpQRUcgZGF0YTogZm91bmQgbWFya2VyIDB4JTAyeCBpbnN0ZWFkIG9mIFJTVCVkIikKKyAgICAgICAgICJDb3JydXB0IEpQRUcgZGF0YTogZm91bmQgbWFya2VyIDB4JTAyeCBpbnN0ZWFkIG9mIFJTVCVkIikKIEpNRVNTQUdFKEpXUk5fTk9UX1NFUVVFTlRJQUwsICJJbnZhbGlkIFNPUyBwYXJhbWV0ZXJzIGZvciBzZXF1ZW50aWFsIEpQRUciKQogSk1FU1NBR0UoSldSTl9UT09fTVVDSF9EQVRBLCAiQXBwbGljYXRpb24gdHJhbnNmZXJyZWQgdG9vIG1hbnkgc2NhbmxpbmVzIikKICNpZiBKUEVHX0xJQl9WRVJTSU9OIDwgNzAKQEAgLTI1Nyw3ICsyNTcsNyBAQAogICAgc3RybmNweSgoY2luZm8pLT5lcnItPm1zZ19wYXJtLnMsIChzdHIpLCBKTVNHX1NUUl9QQVJNX01BWCksIFwKICAgICgqKGNpbmZvKS0+ZXJyLT5lcnJvcl9leGl0KSAoKGpfY29tbW9uX3B0cikgKGNpbmZvKSkpCiAKLSNkZWZpbmUgTUFLRVNUTVQoc3R1ZmYpCQlkbyB7IHN0dWZmIH0gd2hpbGUgKDApCisjZGVmaW5lIE1BS0VTVE1UKHN0dWZmKSAgICAgICAgIGRvIHsgc3R1ZmYgfSB3aGlsZSAoMCkKIAogLyogTm9uZmF0YWwgZXJyb3JzICh3ZSBjYW4ga2VlcCBnb2luZywgYnV0IHRoZSBkYXRhIGlzIHByb2JhYmx5IGNvcnJ1cHQpICovCiAjZGVmaW5lIFdBUk5NUyhjaW5mbyxjb2RlKSAgXApAQCAtMjg4LDI2ICsyODgsMjYgQEAKICAgICgqKGNpbmZvKS0+ZXJyLT5lbWl0X21lc3NhZ2UpICgoal9jb21tb25fcHRyKSAoY2luZm8pLCAobHZsKSkpCiAjZGVmaW5lIFRSQUNFTVMzKGNpbmZvLGx2bCxjb2RlLHAxLHAyLHAzKSAgXAogICBNQUtFU1RNVChpbnQgKiBfbXAgPSAoY2luZm8pLT5lcnItPm1zZ19wYXJtLmk7IFwKLQkgICBfbXBbMF0gPSAocDEpOyBfbXBbMV0gPSAocDIpOyBfbXBbMl0gPSAocDMpOyBcCi0JICAgKGNpbmZvKS0+ZXJyLT5tc2dfY29kZSA9IChjb2RlKTsgXAotCSAgICgqKGNpbmZvKS0+ZXJyLT5lbWl0X21lc3NhZ2UpICgoal9jb21tb25fcHRyKSAoY2luZm8pLCAobHZsKSk7ICkKKyAgICAgICAgICAgX21wWzBdID0gKHAxKTsgX21wWzFdID0gKHAyKTsgX21wWzJdID0gKHAzKTsgXAorICAgICAgICAgICAoY2luZm8pLT5lcnItPm1zZ19jb2RlID0gKGNvZGUpOyBcCisgICAgICAgICAgICgqKGNpbmZvKS0+ZXJyLT5lbWl0X21lc3NhZ2UpICgoal9jb21tb25fcHRyKSAoY2luZm8pLCAobHZsKSk7ICkKICNkZWZpbmUgVFJBQ0VNUzQoY2luZm8sbHZsLGNvZGUscDEscDIscDMscDQpICBcCiAgIE1BS0VTVE1UKGludCAqIF9tcCA9IChjaW5mbyktPmVyci0+bXNnX3Bhcm0uaTsgXAotCSAgIF9tcFswXSA9IChwMSk7IF9tcFsxXSA9IChwMik7IF9tcFsyXSA9IChwMyk7IF9tcFszXSA9IChwNCk7IFwKLQkgICAoY2luZm8pLT5lcnItPm1zZ19jb2RlID0gKGNvZGUpOyBcCi0JICAgKCooY2luZm8pLT5lcnItPmVtaXRfbWVzc2FnZSkgKChqX2NvbW1vbl9wdHIpIChjaW5mbyksIChsdmwpKTsgKQorICAgICAgICAgICBfbXBbMF0gPSAocDEpOyBfbXBbMV0gPSAocDIpOyBfbXBbMl0gPSAocDMpOyBfbXBbM10gPSAocDQpOyBcCisgICAgICAgICAgIChjaW5mbyktPmVyci0+bXNnX2NvZGUgPSAoY29kZSk7IFwKKyAgICAgICAgICAgKCooY2luZm8pLT5lcnItPmVtaXRfbWVzc2FnZSkgKChqX2NvbW1vbl9wdHIpIChjaW5mbyksIChsdmwpKTsgKQogI2RlZmluZSBUUkFDRU1TNShjaW5mbyxsdmwsY29kZSxwMSxwMixwMyxwNCxwNSkgIFwKICAgTUFLRVNUTVQoaW50ICogX21wID0gKGNpbmZvKS0+ZXJyLT5tc2dfcGFybS5pOyBcCi0JICAgX21wWzBdID0gKHAxKTsgX21wWzFdID0gKHAyKTsgX21wWzJdID0gKHAzKTsgX21wWzNdID0gKHA0KTsgXAotCSAgIF9tcFs0XSA9IChwNSk7IFwKLQkgICAoY2luZm8pLT5lcnItPm1zZ19jb2RlID0gKGNvZGUpOyBcCi0JICAgKCooY2luZm8pLT5lcnItPmVtaXRfbWVzc2FnZSkgKChqX2NvbW1vbl9wdHIpIChjaW5mbyksIChsdmwpKTsgKQorICAgICAgICAgICBfbXBbMF0gPSAocDEpOyBfbXBbMV0gPSAocDIpOyBfbXBbMl0gPSAocDMpOyBfbXBbM10gPSAocDQpOyBcCisgICAgICAgICAgIF9tcFs0XSA9IChwNSk7IFwKKyAgICAgICAgICAgKGNpbmZvKS0+ZXJyLT5tc2dfY29kZSA9IChjb2RlKTsgXAorICAgICAgICAgICAoKihjaW5mbyktPmVyci0+ZW1pdF9tZXNzYWdlKSAoKGpfY29tbW9uX3B0cikgKGNpbmZvKSwgKGx2bCkpOyApCiAjZGVmaW5lIFRSQUNFTVM4KGNpbmZvLGx2bCxjb2RlLHAxLHAyLHAzLHA0LHA1LHA2LHA3LHA4KSAgXAogICBNQUtFU1RNVChpbnQgKiBfbXAgPSAoY2luZm8pLT5lcnItPm1zZ19wYXJtLmk7IFwKLQkgICBfbXBbMF0gPSAocDEpOyBfbXBbMV0gPSAocDIpOyBfbXBbMl0gPSAocDMpOyBfbXBbM10gPSAocDQpOyBcCi0JICAgX21wWzRdID0gKHA1KTsgX21wWzVdID0gKHA2KTsgX21wWzZdID0gKHA3KTsgX21wWzddID0gKHA4KTsgXAotCSAgIChjaW5mbyktPmVyci0+bXNnX2NvZGUgPSAoY29kZSk7IFwKLQkgICAoKihjaW5mbyktPmVyci0+ZW1pdF9tZXNzYWdlKSAoKGpfY29tbW9uX3B0cikgKGNpbmZvKSwgKGx2bCkpOyApCisgICAgICAgICAgIF9tcFswXSA9IChwMSk7IF9tcFsxXSA9IChwMik7IF9tcFsyXSA9IChwMyk7IF9tcFszXSA9IChwNCk7IFwKKyAgICAgICAgICAgX21wWzRdID0gKHA1KTsgX21wWzVdID0gKHA2KTsgX21wWzZdID0gKHA3KTsgX21wWzddID0gKHA4KTsgXAorICAgICAgICAgICAoY2luZm8pLT5lcnItPm1zZ19jb2RlID0gKGNvZGUpOyBcCisgICAgICAgICAgICgqKGNpbmZvKS0+ZXJyLT5lbWl0X21lc3NhZ2UpICgoal9jb21tb25fcHRyKSAoY2luZm8pLCAobHZsKSk7ICkKICNkZWZpbmUgVFJBQ0VNU1MoY2luZm8sbHZsLGNvZGUsc3RyKSAgXAogICAoKGNpbmZvKS0+ZXJyLT5tc2dfY29kZSA9IChjb2RlKSwgXAogICAgc3RybmNweSgoY2luZm8pLT5lcnItPm1zZ19wYXJtLnMsIChzdHIpLCBKTVNHX1NUUl9QQVJNX01BWCksIFwKZGlmZiAtLWdpdCBhL2pmZGN0Zmx0LmMgYi9qZmRjdGZsdC5jCmluZGV4IDc5ZDdhMDAuLmE4MzY3YzYgMTAwNjQ0Ci0tLSBhL2pmZGN0Zmx0LmMKKysrIGIvamZkY3RmbHQuYwpAQCAtMzcsNyArMzcsNyBAQAogI2RlZmluZSBKUEVHX0lOVEVSTkFMUwogI2luY2x1ZGUgImppbmNsdWRlLmgiCiAjaW5jbHVkZSAianBlZ2xpYi5oIgotI2luY2x1ZGUgImpkY3QuaCIJCS8qIFByaXZhdGUgZGVjbGFyYXRpb25zIGZvciBEQ1Qgc3Vic3lzdGVtICovCisjaW5jbHVkZSAiamRjdC5oIiAgICAgICAgICAgICAgIC8qIFByaXZhdGUgZGVjbGFyYXRpb25zIGZvciBEQ1Qgc3Vic3lzdGVtICovCiAKICNpZmRlZiBEQ1RfRkxPQVRfU1VQUE9SVEVECiAKQEAgLTc2LDI0ICs3NiwyNCBAQAogICAgIHRtcDUgPSBkYXRhcHRyWzJdIC0gZGF0YXB0cls1XTsKICAgICB0bXAzID0gZGF0YXB0clszXSArIGRhdGFwdHJbNF07CiAgICAgdG1wNCA9IGRhdGFwdHJbM10gLSBkYXRhcHRyWzRdOwotICAgIAorCiAgICAgLyogRXZlbiBwYXJ0ICovCi0gICAgCi0gICAgdG1wMTAgPSB0bXAwICsgdG1wMzsJLyogcGhhc2UgMiAqLworCisgICAgdG1wMTAgPSB0bXAwICsgdG1wMzsgICAgICAgIC8qIHBoYXNlIDIgKi8KICAgICB0bXAxMyA9IHRtcDAgLSB0bXAzOwogICAgIHRtcDExID0gdG1wMSArIHRtcDI7CiAgICAgdG1wMTIgPSB0bXAxIC0gdG1wMjsKLSAgICAKKwogICAgIGRhdGFwdHJbMF0gPSB0bXAxMCArIHRtcDExOyAvKiBwaGFzZSAzICovCiAgICAgZGF0YXB0cls0XSA9IHRtcDEwIC0gdG1wMTE7Ci0gICAgCisKICAgICB6MSA9ICh0bXAxMiArIHRtcDEzKSAqICgoRkFTVF9GTE9BVCkgMC43MDcxMDY3ODEpOyAvKiBjNCAqLwotICAgIGRhdGFwdHJbMl0gPSB0bXAxMyArIHoxOwkvKiBwaGFzZSA1ICovCisgICAgZGF0YXB0clsyXSA9IHRtcDEzICsgejE7ICAgIC8qIHBoYXNlIDUgKi8KICAgICBkYXRhcHRyWzZdID0gdG1wMTMgLSB6MTsKLSAgICAKKwogICAgIC8qIE9kZCBwYXJ0ICovCiAKLSAgICB0bXAxMCA9IHRtcDQgKyB0bXA1OwkvKiBwaGFzZSAyICovCisgICAgdG1wMTAgPSB0bXA0ICsgdG1wNTsgICAgICAgIC8qIHBoYXNlIDIgKi8KICAgICB0bXAxMSA9IHRtcDUgKyB0bXA2OwogICAgIHRtcDEyID0gdG1wNiArIHRtcDc7CiAKQEAgLTEwMywxNSArMTAzLDE1IEBACiAgICAgejQgPSAoKEZBU1RfRkxPQVQpIDEuMzA2NTYyOTY1KSAqIHRtcDEyICsgejU7IC8qIGMyK2M2ICovCiAgICAgejMgPSB0bXAxMSAqICgoRkFTVF9GTE9BVCkgMC43MDcxMDY3ODEpOyAvKiBjNCAqLwogCi0gICAgejExID0gdG1wNyArIHozOwkJLyogcGhhc2UgNSAqLworICAgIHoxMSA9IHRtcDcgKyB6MzsgICAgICAgICAgICAvKiBwaGFzZSA1ICovCiAgICAgejEzID0gdG1wNyAtIHozOwogCi0gICAgZGF0YXB0cls1XSA9IHoxMyArIHoyOwkvKiBwaGFzZSA2ICovCisgICAgZGF0YXB0cls1XSA9IHoxMyArIHoyOyAgICAgIC8qIHBoYXNlIDYgKi8KICAgICBkYXRhcHRyWzNdID0gejEzIC0gejI7CiAgICAgZGF0YXB0clsxXSA9IHoxMSArIHo0OwogICAgIGRhdGFwdHJbN10gPSB6MTEgLSB6NDsKIAotICAgIGRhdGFwdHIgKz0gRENUU0laRTsJCS8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLworICAgIGRhdGFwdHIgKz0gRENUU0laRTsgICAgICAgICAvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCByb3cgKi8KICAgfQogCiAgIC8qIFBhc3MgMjogcHJvY2VzcyBjb2x1bW5zLiAqLwpAQCAtMTI2LDI0ICsxMjYsMjQgQEAKICAgICB0bXA1ID0gZGF0YXB0cltEQ1RTSVpFKjJdIC0gZGF0YXB0cltEQ1RTSVpFKjVdOwogICAgIHRtcDMgPSBkYXRhcHRyW0RDVFNJWkUqM10gKyBkYXRhcHRyW0RDVFNJWkUqNF07CiAgICAgdG1wNCA9IGRhdGFwdHJbRENUU0laRSozXSAtIGRhdGFwdHJbRENUU0laRSo0XTsKLSAgICAKKwogICAgIC8qIEV2ZW4gcGFydCAqLwotICAgIAotICAgIHRtcDEwID0gdG1wMCArIHRtcDM7CS8qIHBoYXNlIDIgKi8KKworICAgIHRtcDEwID0gdG1wMCArIHRtcDM7ICAgICAgICAvKiBwaGFzZSAyICovCiAgICAgdG1wMTMgPSB0bXAwIC0gdG1wMzsKICAgICB0bXAxMSA9IHRtcDEgKyB0bXAyOwogICAgIHRtcDEyID0gdG1wMSAtIHRtcDI7Ci0gICAgCisKICAgICBkYXRhcHRyW0RDVFNJWkUqMF0gPSB0bXAxMCArIHRtcDExOyAvKiBwaGFzZSAzICovCiAgICAgZGF0YXB0cltEQ1RTSVpFKjRdID0gdG1wMTAgLSB0bXAxMTsKLSAgICAKKwogICAgIHoxID0gKHRtcDEyICsgdG1wMTMpICogKChGQVNUX0ZMT0FUKSAwLjcwNzEwNjc4MSk7IC8qIGM0ICovCiAgICAgZGF0YXB0cltEQ1RTSVpFKjJdID0gdG1wMTMgKyB6MTsgLyogcGhhc2UgNSAqLwogICAgIGRhdGFwdHJbRENUU0laRSo2XSA9IHRtcDEzIC0gejE7Ci0gICAgCisKICAgICAvKiBPZGQgcGFydCAqLwogCi0gICAgdG1wMTAgPSB0bXA0ICsgdG1wNTsJLyogcGhhc2UgMiAqLworICAgIHRtcDEwID0gdG1wNCArIHRtcDU7ICAgICAgICAvKiBwaGFzZSAyICovCiAgICAgdG1wMTEgPSB0bXA1ICsgdG1wNjsKICAgICB0bXAxMiA9IHRtcDYgKyB0bXA3OwogCkBAIC0xNTMsNyArMTUzLDcgQEAKICAgICB6NCA9ICgoRkFTVF9GTE9BVCkgMS4zMDY1NjI5NjUpICogdG1wMTIgKyB6NTsgLyogYzIrYzYgKi8KICAgICB6MyA9IHRtcDExICogKChGQVNUX0ZMT0FUKSAwLjcwNzEwNjc4MSk7IC8qIGM0ICovCiAKLSAgICB6MTEgPSB0bXA3ICsgejM7CQkvKiBwaGFzZSA1ICovCisgICAgejExID0gdG1wNyArIHozOyAgICAgICAgICAgIC8qIHBoYXNlIDUgKi8KICAgICB6MTMgPSB0bXA3IC0gejM7CiAKICAgICBkYXRhcHRyW0RDVFNJWkUqNV0gPSB6MTMgKyB6MjsgLyogcGhhc2UgNiAqLwpAQCAtMTYxLDcgKzE2MSw3IEBACiAgICAgZGF0YXB0cltEQ1RTSVpFKjFdID0gejExICsgejQ7CiAgICAgZGF0YXB0cltEQ1RTSVpFKjddID0gejExIC0gejQ7CiAKLSAgICBkYXRhcHRyKys7CQkJLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgY29sdW1uICovCisgICAgZGF0YXB0cisrOyAgICAgICAgICAgICAgICAgIC8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IGNvbHVtbiAqLwogICB9CiB9CiAKZGlmZiAtLWdpdCBhL2pmZGN0ZnN0LmMgYi9qZmRjdGZzdC5jCmluZGV4IGNjYjM3OGEuLjQ5MzZkNDcgMTAwNjQ0Ci0tLSBhL2pmZGN0ZnN0LmMKKysrIGIvamZkY3Rmc3QuYwpAQCAtMzMsNyArMzMsNyBAQAogI2RlZmluZSBKUEVHX0lOVEVSTkFMUwogI2luY2x1ZGUgImppbmNsdWRlLmgiCiAjaW5jbHVkZSAianBlZ2xpYi5oIgotI2luY2x1ZGUgImpkY3QuaCIJCS8qIFByaXZhdGUgZGVjbGFyYXRpb25zIGZvciBEQ1Qgc3Vic3lzdGVtICovCisjaW5jbHVkZSAiamRjdC5oIiAgICAgICAgICAgICAgIC8qIFByaXZhdGUgZGVjbGFyYXRpb25zIGZvciBEQ1Qgc3Vic3lzdGVtICovCiAKICNpZmRlZiBEQ1RfSUZBU1RfU1VQUE9SVEVECiAKQEAgLTc2LDEwICs3NiwxMCBAQAogICovCiAKICNpZiBDT05TVF9CSVRTID09IDgKLSNkZWZpbmUgRklYXzBfMzgyNjgzNDMzICAoKElOVDMyKSAgIDk4KQkJLyogRklYKDAuMzgyNjgzNDMzKSAqLwotI2RlZmluZSBGSVhfMF81NDExOTYxMDAgICgoSU5UMzIpICAxMzkpCQkvKiBGSVgoMC41NDExOTYxMDApICovCi0jZGVmaW5lIEZJWF8wXzcwNzEwNjc4MSAgKChJTlQzMikgIDE4MSkJCS8qIEZJWCgwLjcwNzEwNjc4MSkgKi8KLSNkZWZpbmUgRklYXzFfMzA2NTYyOTY1ICAoKElOVDMyKSAgMzM0KQkJLyogRklYKDEuMzA2NTYyOTY1KSAqLworI2RlZmluZSBGSVhfMF8zODI2ODM0MzMgICgoSU5UMzIpICAgOTgpICAgICAgICAgLyogRklYKDAuMzgyNjgzNDMzKSAqLworI2RlZmluZSBGSVhfMF81NDExOTYxMDAgICgoSU5UMzIpICAxMzkpICAgICAgICAgLyogRklYKDAuNTQxMTk2MTAwKSAqLworI2RlZmluZSBGSVhfMF83MDcxMDY3ODEgICgoSU5UMzIpICAxODEpICAgICAgICAgLyogRklYKDAuNzA3MTA2NzgxKSAqLworI2RlZmluZSBGSVhfMV8zMDY1NjI5NjUgICgoSU5UMzIpICAzMzQpICAgICAgICAgLyogRklYKDEuMzA2NTYyOTY1KSAqLwogI2Vsc2UKICNkZWZpbmUgRklYXzBfMzgyNjgzNDMzICBGSVgoMC4zODI2ODM0MzMpCiAjZGVmaW5lIEZJWF8wXzU0MTE5NjEwMCAgRklYKDAuNTQxMTk2MTAwKQpAQCAtMTMyLDI0ICsxMzIsMjQgQEAKICAgICB0bXA1ID0gZGF0YXB0clsyXSAtIGRhdGFwdHJbNV07CiAgICAgdG1wMyA9IGRhdGFwdHJbM10gKyBkYXRhcHRyWzRdOwogICAgIHRtcDQgPSBkYXRhcHRyWzNdIC0gZGF0YXB0cls0XTsKLSAgICAKKwogICAgIC8qIEV2ZW4gcGFydCAqLwotICAgIAotICAgIHRtcDEwID0gdG1wMCArIHRtcDM7CS8qIHBoYXNlIDIgKi8KKworICAgIHRtcDEwID0gdG1wMCArIHRtcDM7ICAgICAgICAvKiBwaGFzZSAyICovCiAgICAgdG1wMTMgPSB0bXAwIC0gdG1wMzsKICAgICB0bXAxMSA9IHRtcDEgKyB0bXAyOwogICAgIHRtcDEyID0gdG1wMSAtIHRtcDI7Ci0gICAgCisKICAgICBkYXRhcHRyWzBdID0gdG1wMTAgKyB0bXAxMTsgLyogcGhhc2UgMyAqLwogICAgIGRhdGFwdHJbNF0gPSB0bXAxMCAtIHRtcDExOwotICAgIAorCiAgICAgejEgPSBNVUxUSVBMWSh0bXAxMiArIHRtcDEzLCBGSVhfMF83MDcxMDY3ODEpOyAvKiBjNCAqLwotICAgIGRhdGFwdHJbMl0gPSB0bXAxMyArIHoxOwkvKiBwaGFzZSA1ICovCisgICAgZGF0YXB0clsyXSA9IHRtcDEzICsgejE7ICAgIC8qIHBoYXNlIDUgKi8KICAgICBkYXRhcHRyWzZdID0gdG1wMTMgLSB6MTsKLSAgICAKKwogICAgIC8qIE9kZCBwYXJ0ICovCiAKLSAgICB0bXAxMCA9IHRtcDQgKyB0bXA1OwkvKiBwaGFzZSAyICovCisgICAgdG1wMTAgPSB0bXA0ICsgdG1wNTsgICAgICAgIC8qIHBoYXNlIDIgKi8KICAgICB0bXAxMSA9IHRtcDUgKyB0bXA2OwogICAgIHRtcDEyID0gdG1wNiArIHRtcDc7CiAKQEAgLTE1OSwxNSArMTU5LDE1IEBACiAgICAgejQgPSBNVUxUSVBMWSh0bXAxMiwgRklYXzFfMzA2NTYyOTY1KSArIHo1OyAvKiBjMitjNiAqLwogICAgIHozID0gTVVMVElQTFkodG1wMTEsIEZJWF8wXzcwNzEwNjc4MSk7IC8qIGM0ICovCiAKLSAgICB6MTEgPSB0bXA3ICsgejM7CQkvKiBwaGFzZSA1ICovCisgICAgejExID0gdG1wNyArIHozOyAgICAgICAgICAgIC8qIHBoYXNlIDUgKi8KICAgICB6MTMgPSB0bXA3IC0gejM7CiAKLSAgICBkYXRhcHRyWzVdID0gejEzICsgejI7CS8qIHBoYXNlIDYgKi8KKyAgICBkYXRhcHRyWzVdID0gejEzICsgejI7ICAgICAgLyogcGhhc2UgNiAqLwogICAgIGRhdGFwdHJbM10gPSB6MTMgLSB6MjsKICAgICBkYXRhcHRyWzFdID0gejExICsgejQ7CiAgICAgZGF0YXB0cls3XSA9IHoxMSAtIHo0OwogCi0gICAgZGF0YXB0ciArPSBEQ1RTSVpFOwkJLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgcm93ICovCisgICAgZGF0YXB0ciArPSBEQ1RTSVpFOyAgICAgICAgIC8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLwogICB9CiAKICAgLyogUGFzcyAyOiBwcm9jZXNzIGNvbHVtbnMuICovCkBAIC0xODIsMjQgKzE4MiwyNCBAQAogICAgIHRtcDUgPSBkYXRhcHRyW0RDVFNJWkUqMl0gLSBkYXRhcHRyW0RDVFNJWkUqNV07CiAgICAgdG1wMyA9IGRhdGFwdHJbRENUU0laRSozXSArIGRhdGFwdHJbRENUU0laRSo0XTsKICAgICB0bXA0ID0gZGF0YXB0cltEQ1RTSVpFKjNdIC0gZGF0YXB0cltEQ1RTSVpFKjRdOwotICAgIAorCiAgICAgLyogRXZlbiBwYXJ0ICovCi0gICAgCi0gICAgdG1wMTAgPSB0bXAwICsgdG1wMzsJLyogcGhhc2UgMiAqLworCisgICAgdG1wMTAgPSB0bXAwICsgdG1wMzsgICAgICAgIC8qIHBoYXNlIDIgKi8KICAgICB0bXAxMyA9IHRtcDAgLSB0bXAzOwogICAgIHRtcDExID0gdG1wMSArIHRtcDI7CiAgICAgdG1wMTIgPSB0bXAxIC0gdG1wMjsKLSAgICAKKwogICAgIGRhdGFwdHJbRENUU0laRSowXSA9IHRtcDEwICsgdG1wMTE7IC8qIHBoYXNlIDMgKi8KICAgICBkYXRhcHRyW0RDVFNJWkUqNF0gPSB0bXAxMCAtIHRtcDExOwotICAgIAorCiAgICAgejEgPSBNVUxUSVBMWSh0bXAxMiArIHRtcDEzLCBGSVhfMF83MDcxMDY3ODEpOyAvKiBjNCAqLwogICAgIGRhdGFwdHJbRENUU0laRSoyXSA9IHRtcDEzICsgejE7IC8qIHBoYXNlIDUgKi8KICAgICBkYXRhcHRyW0RDVFNJWkUqNl0gPSB0bXAxMyAtIHoxOwotICAgIAorCiAgICAgLyogT2RkIHBhcnQgKi8KIAotICAgIHRtcDEwID0gdG1wNCArIHRtcDU7CS8qIHBoYXNlIDIgKi8KKyAgICB0bXAxMCA9IHRtcDQgKyB0bXA1OyAgICAgICAgLyogcGhhc2UgMiAqLwogICAgIHRtcDExID0gdG1wNSArIHRtcDY7CiAgICAgdG1wMTIgPSB0bXA2ICsgdG1wNzsKIApAQCAtMjA5LDcgKzIwOSw3IEBACiAgICAgejQgPSBNVUxUSVBMWSh0bXAxMiwgRklYXzFfMzA2NTYyOTY1KSArIHo1OyAvKiBjMitjNiAqLwogICAgIHozID0gTVVMVElQTFkodG1wMTEsIEZJWF8wXzcwNzEwNjc4MSk7IC8qIGM0ICovCiAKLSAgICB6MTEgPSB0bXA3ICsgejM7CQkvKiBwaGFzZSA1ICovCisgICAgejExID0gdG1wNyArIHozOyAgICAgICAgICAgIC8qIHBoYXNlIDUgKi8KICAgICB6MTMgPSB0bXA3IC0gejM7CiAKICAgICBkYXRhcHRyW0RDVFNJWkUqNV0gPSB6MTMgKyB6MjsgLyogcGhhc2UgNiAqLwpAQCAtMjE3LDcgKzIxNyw3IEBACiAgICAgZGF0YXB0cltEQ1RTSVpFKjFdID0gejExICsgejQ7CiAgICAgZGF0YXB0cltEQ1RTSVpFKjddID0gejExIC0gejQ7CiAKLSAgICBkYXRhcHRyKys7CQkJLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgY29sdW1uICovCisgICAgZGF0YXB0cisrOyAgICAgICAgICAgICAgICAgIC8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IGNvbHVtbiAqLwogICB9CiB9CiAKZGlmZiAtLWdpdCBhL2pmZGN0aW50LmMgYi9qZmRjdGludC5jCmluZGV4IDBhNzhiNjQuLjE0ZjQ4NmMgMTAwNjQ0Ci0tLSBhL2pmZGN0aW50LmMKKysrIGIvamZkY3RpbnQuYwpAQCAtMjYsNyArMjYsNyBAQAogI2RlZmluZSBKUEVHX0lOVEVSTkFMUwogI2luY2x1ZGUgImppbmNsdWRlLmgiCiAjaW5jbHVkZSAianBlZ2xpYi5oIgotI2luY2x1ZGUgImpkY3QuaCIJCS8qIFByaXZhdGUgZGVjbGFyYXRpb25zIGZvciBEQ1Qgc3Vic3lzdGVtICovCisjaW5jbHVkZSAiamRjdC5oIiAgICAgICAgICAgICAgIC8qIFByaXZhdGUgZGVjbGFyYXRpb25zIGZvciBEQ1Qgc3Vic3lzdGVtICovCiAKICNpZmRlZiBEQ1RfSVNMT1dfU1VQUE9SVEVECiAKQEAgLTc5LDcgKzc5LDcgQEAKICNkZWZpbmUgUEFTUzFfQklUUyAgMgogI2Vsc2UKICNkZWZpbmUgQ09OU1RfQklUUyAgMTMKLSNkZWZpbmUgUEFTUzFfQklUUyAgMQkJLyogbG9zZSBhIGxpdHRsZSBwcmVjaXNpb24gdG8gYXZvaWQgb3ZlcmZsb3cgKi8KKyNkZWZpbmUgUEFTUzFfQklUUyAgMSAgICAgICAgICAgLyogbG9zZSBhIGxpdHRsZSBwcmVjaXNpb24gdG8gYXZvaWQgb3ZlcmZsb3cgKi8KICNlbmRpZgogCiAvKiBTb21lIEMgY29tcGlsZXJzIGZhaWwgdG8gcmVkdWNlICJGSVgoY29uc3RhbnQpIiBhdCBjb21waWxlIHRpbWUsIHRodXMKQEAgLTkwLDE4ICs5MCwxOCBAQAogICovCiAKICNpZiBDT05TVF9CSVRTID09IDEzCi0jZGVmaW5lIEZJWF8wXzI5ODYzMTMzNiAgKChJTlQzMikgIDI0NDYpCS8qIEZJWCgwLjI5ODYzMTMzNikgKi8KLSNkZWZpbmUgRklYXzBfMzkwMTgwNjQ0ICAoKElOVDMyKSAgMzE5NikJLyogRklYKDAuMzkwMTgwNjQ0KSAqLwotI2RlZmluZSBGSVhfMF81NDExOTYxMDAgICgoSU5UMzIpICA0NDMzKQkvKiBGSVgoMC41NDExOTYxMDApICovCi0jZGVmaW5lIEZJWF8wXzc2NTM2Njg2NSAgKChJTlQzMikgIDYyNzApCS8qIEZJWCgwLjc2NTM2Njg2NSkgKi8KLSNkZWZpbmUgRklYXzBfODk5OTc2MjIzICAoKElOVDMyKSAgNzM3MykJLyogRklYKDAuODk5OTc2MjIzKSAqLwotI2RlZmluZSBGSVhfMV8xNzU4NzU2MDIgICgoSU5UMzIpICA5NjMzKQkvKiBGSVgoMS4xNzU4NzU2MDIpICovCi0jZGVmaW5lIEZJWF8xXzUwMTMyMTExMCAgKChJTlQzMikgIDEyMjk5KQkvKiBGSVgoMS41MDEzMjExMTApICovCi0jZGVmaW5lIEZJWF8xXzg0Nzc1OTA2NSAgKChJTlQzMikgIDE1MTM3KQkvKiBGSVgoMS44NDc3NTkwNjUpICovCi0jZGVmaW5lIEZJWF8xXzk2MTU3MDU2MCAgKChJTlQzMikgIDE2MDY5KQkvKiBGSVgoMS45NjE1NzA1NjApICovCi0jZGVmaW5lIEZJWF8yXzA1MzExOTg2OSAgKChJTlQzMikgIDE2ODE5KQkvKiBGSVgoMi4wNTMxMTk4NjkpICovCi0jZGVmaW5lIEZJWF8yXzU2MjkxNTQ0NyAgKChJTlQzMikgIDIwOTk1KQkvKiBGSVgoMi41NjI5MTU0NDcpICovCi0jZGVmaW5lIEZJWF8zXzA3MjcxMTAyNiAgKChJTlQzMikgIDI1MTcyKQkvKiBGSVgoMy4wNzI3MTEwMjYpICovCisjZGVmaW5lIEZJWF8wXzI5ODYzMTMzNiAgKChJTlQzMikgIDI0NDYpICAgICAgICAvKiBGSVgoMC4yOTg2MzEzMzYpICovCisjZGVmaW5lIEZJWF8wXzM5MDE4MDY0NCAgKChJTlQzMikgIDMxOTYpICAgICAgICAvKiBGSVgoMC4zOTAxODA2NDQpICovCisjZGVmaW5lIEZJWF8wXzU0MTE5NjEwMCAgKChJTlQzMikgIDQ0MzMpICAgICAgICAvKiBGSVgoMC41NDExOTYxMDApICovCisjZGVmaW5lIEZJWF8wXzc2NTM2Njg2NSAgKChJTlQzMikgIDYyNzApICAgICAgICAvKiBGSVgoMC43NjUzNjY4NjUpICovCisjZGVmaW5lIEZJWF8wXzg5OTk3NjIyMyAgKChJTlQzMikgIDczNzMpICAgICAgICAvKiBGSVgoMC44OTk5NzYyMjMpICovCisjZGVmaW5lIEZJWF8xXzE3NTg3NTYwMiAgKChJTlQzMikgIDk2MzMpICAgICAgICAvKiBGSVgoMS4xNzU4NzU2MDIpICovCisjZGVmaW5lIEZJWF8xXzUwMTMyMTExMCAgKChJTlQzMikgIDEyMjk5KSAgICAgICAvKiBGSVgoMS41MDEzMjExMTApICovCisjZGVmaW5lIEZJWF8xXzg0Nzc1OTA2NSAgKChJTlQzMikgIDE1MTM3KSAgICAgICAvKiBGSVgoMS44NDc3NTkwNjUpICovCisjZGVmaW5lIEZJWF8xXzk2MTU3MDU2MCAgKChJTlQzMikgIDE2MDY5KSAgICAgICAvKiBGSVgoMS45NjE1NzA1NjApICovCisjZGVmaW5lIEZJWF8yXzA1MzExOTg2OSAgKChJTlQzMikgIDE2ODE5KSAgICAgICAvKiBGSVgoMi4wNTMxMTk4NjkpICovCisjZGVmaW5lIEZJWF8yXzU2MjkxNTQ0NyAgKChJTlQzMikgIDIwOTk1KSAgICAgICAvKiBGSVgoMi41NjI5MTU0NDcpICovCisjZGVmaW5lIEZJWF8zXzA3MjcxMTAyNiAgKChJTlQzMikgIDI1MTcyKSAgICAgICAvKiBGSVgoMy4wNzI3MTEwMjYpICovCiAjZWxzZQogI2RlZmluZSBGSVhfMF8yOTg2MzEzMzYgIEZJWCgwLjI5ODYzMTMzNikKICNkZWZpbmUgRklYXzBfMzkwMTgwNjQ0ICBGSVgoMC4zOTAxODA2NDQpCkBAIC0xNjAsMzYgKzE2MCwzNiBAQAogICAgIHRtcDUgPSBkYXRhcHRyWzJdIC0gZGF0YXB0cls1XTsKICAgICB0bXAzID0gZGF0YXB0clszXSArIGRhdGFwdHJbNF07CiAgICAgdG1wNCA9IGRhdGFwdHJbM10gLSBkYXRhcHRyWzRdOwotICAgIAorCiAgICAgLyogRXZlbiBwYXJ0IHBlciBMTCZNIGZpZ3VyZSAxIC0tLSBub3RlIHRoYXQgcHVibGlzaGVkIGZpZ3VyZSBpcyBmYXVsdHk7CiAgICAgICogcm90YXRvciAic3FydCgyKSpjMSIgc2hvdWxkIGJlICJzcXJ0KDIpKmM2Ii4KICAgICAgKi8KLSAgICAKKwogICAgIHRtcDEwID0gdG1wMCArIHRtcDM7CiAgICAgdG1wMTMgPSB0bXAwIC0gdG1wMzsKICAgICB0bXAxMSA9IHRtcDEgKyB0bXAyOwogICAgIHRtcDEyID0gdG1wMSAtIHRtcDI7Ci0gICAgCisKICAgICBkYXRhcHRyWzBdID0gKERDVEVMRU0pICgodG1wMTAgKyB0bXAxMSkgPDwgUEFTUzFfQklUUyk7CiAgICAgZGF0YXB0cls0XSA9IChEQ1RFTEVNKSAoKHRtcDEwIC0gdG1wMTEpIDw8IFBBU1MxX0JJVFMpOwotICAgIAorCiAgICAgejEgPSBNVUxUSVBMWSh0bXAxMiArIHRtcDEzLCBGSVhfMF81NDExOTYxMDApOwogICAgIGRhdGFwdHJbMl0gPSAoRENURUxFTSkgREVTQ0FMRSh6MSArIE1VTFRJUExZKHRtcDEzLCBGSVhfMF83NjUzNjY4NjUpLAotCQkJCSAgIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7CiAgICAgZGF0YXB0cls2XSA9IChEQ1RFTEVNKSBERVNDQUxFKHoxICsgTVVMVElQTFkodG1wMTIsIC0gRklYXzFfODQ3NzU5MDY1KSwKLQkJCQkgICBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworCiAgICAgLyogT2RkIHBhcnQgcGVyIGZpZ3VyZSA4IC0tLSBub3RlIHBhcGVyIG9taXRzIGZhY3RvciBvZiBzcXJ0KDIpLgogICAgICAqIGNLIHJlcHJlc2VudHMgY29zKEsqcGkvMTYpLgogICAgICAqIGkwLi5pMyBpbiB0aGUgcGFwZXIgYXJlIHRtcDQuLnRtcDcgaGVyZS4KICAgICAgKi8KLSAgICAKKwogICAgIHoxID0gdG1wNCArIHRtcDc7CiAgICAgejIgPSB0bXA1ICsgdG1wNjsKICAgICB6MyA9IHRtcDQgKyB0bXA2OwogICAgIHo0ID0gdG1wNSArIHRtcDc7CiAgICAgejUgPSBNVUxUSVBMWSh6MyArIHo0LCBGSVhfMV8xNzU4NzU2MDIpOyAvKiBzcXJ0KDIpICogYzMgKi8KLSAgICAKKwogICAgIHRtcDQgPSBNVUxUSVBMWSh0bXA0LCBGSVhfMF8yOTg2MzEzMzYpOyAvKiBzcXJ0KDIpICogKC1jMStjMytjNS1jNykgKi8KICAgICB0bXA1ID0gTVVMVElQTFkodG1wNSwgRklYXzJfMDUzMTE5ODY5KTsgLyogc3FydCgyKSAqICggYzErYzMtYzUrYzcpICovCiAgICAgdG1wNiA9IE1VTFRJUExZKHRtcDYsIEZJWF8zXzA3MjcxMTAyNik7IC8qIHNxcnQoMikgKiAoIGMxK2MzK2M1LWM3KSAqLwpAQCAtMTk4LDE2ICsxOTgsMTYgQEAKICAgICB6MiA9IE1VTFRJUExZKHoyLCAtIEZJWF8yXzU2MjkxNTQ0Nyk7IC8qIHNxcnQoMikgKiAoLWMxLWMzKSAqLwogICAgIHozID0gTVVMVElQTFkoejMsIC0gRklYXzFfOTYxNTcwNTYwKTsgLyogc3FydCgyKSAqICgtYzMtYzUpICovCiAgICAgejQgPSBNVUxUSVBMWSh6NCwgLSBGSVhfMF8zOTAxODA2NDQpOyAvKiBzcXJ0KDIpICogKGM1LWMzKSAqLwotICAgIAorCiAgICAgejMgKz0gejU7CiAgICAgejQgKz0gejU7Ci0gICAgCisKICAgICBkYXRhcHRyWzddID0gKERDVEVMRU0pIERFU0NBTEUodG1wNCArIHoxICsgejMsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7CiAgICAgZGF0YXB0cls1XSA9IChEQ1RFTEVNKSBERVNDQUxFKHRtcDUgKyB6MiArIHo0LCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwogICAgIGRhdGFwdHJbM10gPSAoRENURUxFTSkgREVTQ0FMRSh0bXA2ICsgejIgKyB6MywgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKICAgICBkYXRhcHRyWzFdID0gKERDVEVMRU0pIERFU0NBTEUodG1wNyArIHoxICsgejQsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgCi0gICAgZGF0YXB0ciArPSBEQ1RTSVpFOwkJLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgcm93ICovCisKKyAgICBkYXRhcHRyICs9IERDVFNJWkU7ICAgICAgICAgLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgcm93ICovCiAgIH0KIAogICAvKiBQYXNzIDI6IHByb2Nlc3MgY29sdW1ucy4KQEAgLTIyNSwzNiArMjI1LDM2IEBACiAgICAgdG1wNSA9IGRhdGFwdHJbRENUU0laRSoyXSAtIGRhdGFwdHJbRENUU0laRSo1XTsKICAgICB0bXAzID0gZGF0YXB0cltEQ1RTSVpFKjNdICsgZGF0YXB0cltEQ1RTSVpFKjRdOwogICAgIHRtcDQgPSBkYXRhcHRyW0RDVFNJWkUqM10gLSBkYXRhcHRyW0RDVFNJWkUqNF07Ci0gICAgCisKICAgICAvKiBFdmVuIHBhcnQgcGVyIExMJk0gZmlndXJlIDEgLS0tIG5vdGUgdGhhdCBwdWJsaXNoZWQgZmlndXJlIGlzIGZhdWx0eTsKICAgICAgKiByb3RhdG9yICJzcXJ0KDIpKmMxIiBzaG91bGQgYmUgInNxcnQoMikqYzYiLgogICAgICAqLwotICAgIAorCiAgICAgdG1wMTAgPSB0bXAwICsgdG1wMzsKICAgICB0bXAxMyA9IHRtcDAgLSB0bXAzOwogICAgIHRtcDExID0gdG1wMSArIHRtcDI7CiAgICAgdG1wMTIgPSB0bXAxIC0gdG1wMjsKLSAgICAKKwogICAgIGRhdGFwdHJbRENUU0laRSowXSA9IChEQ1RFTEVNKSBERVNDQUxFKHRtcDEwICsgdG1wMTEsIFBBU1MxX0JJVFMpOwogICAgIGRhdGFwdHJbRENUU0laRSo0XSA9IChEQ1RFTEVNKSBERVNDQUxFKHRtcDEwIC0gdG1wMTEsIFBBU1MxX0JJVFMpOwotICAgIAorCiAgICAgejEgPSBNVUxUSVBMWSh0bXAxMiArIHRtcDEzLCBGSVhfMF81NDExOTYxMDApOwogICAgIGRhdGFwdHJbRENUU0laRSoyXSA9IChEQ1RFTEVNKSBERVNDQUxFKHoxICsgTVVMVElQTFkodG1wMTMsIEZJWF8wXzc2NTM2Njg2NSksCi0JCQkJCSAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKTsKICAgICBkYXRhcHRyW0RDVFNJWkUqNl0gPSAoRENURUxFTSkgREVTQ0FMRSh6MSArIE1VTFRJUExZKHRtcDEyLCAtIEZJWF8xXzg0Nzc1OTA2NSksCi0JCQkJCSAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyk7Ci0gICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKTsKKwogICAgIC8qIE9kZCBwYXJ0IHBlciBmaWd1cmUgOCAtLS0gbm90ZSBwYXBlciBvbWl0cyBmYWN0b3Igb2Ygc3FydCgyKS4KICAgICAgKiBjSyByZXByZXNlbnRzIGNvcyhLKnBpLzE2KS4KICAgICAgKiBpMC4uaTMgaW4gdGhlIHBhcGVyIGFyZSB0bXA0Li50bXA3IGhlcmUuCiAgICAgICovCi0gICAgCisKICAgICB6MSA9IHRtcDQgKyB0bXA3OwogICAgIHoyID0gdG1wNSArIHRtcDY7CiAgICAgejMgPSB0bXA0ICsgdG1wNjsKICAgICB6NCA9IHRtcDUgKyB0bXA3OwogICAgIHo1ID0gTVVMVElQTFkoejMgKyB6NCwgRklYXzFfMTc1ODc1NjAyKTsgLyogc3FydCgyKSAqIGMzICovCi0gICAgCisKICAgICB0bXA0ID0gTVVMVElQTFkodG1wNCwgRklYXzBfMjk4NjMxMzM2KTsgLyogc3FydCgyKSAqICgtYzErYzMrYzUtYzcpICovCiAgICAgdG1wNSA9IE1VTFRJUExZKHRtcDUsIEZJWF8yXzA1MzExOTg2OSk7IC8qIHNxcnQoMikgKiAoIGMxK2MzLWM1K2M3KSAqLwogICAgIHRtcDYgPSBNVUxUSVBMWSh0bXA2LCBGSVhfM18wNzI3MTEwMjYpOyAvKiBzcXJ0KDIpICogKCBjMStjMytjNS1jNykgKi8KQEAgLTI2MywyMCArMjYzLDIwIEBACiAgICAgejIgPSBNVUxUSVBMWSh6MiwgLSBGSVhfMl81NjI5MTU0NDcpOyAvKiBzcXJ0KDIpICogKC1jMS1jMykgKi8KICAgICB6MyA9IE1VTFRJUExZKHozLCAtIEZJWF8xXzk2MTU3MDU2MCk7IC8qIHNxcnQoMikgKiAoLWMzLWM1KSAqLwogICAgIHo0ID0gTVVMVElQTFkoejQsIC0gRklYXzBfMzkwMTgwNjQ0KTsgLyogc3FydCgyKSAqIChjNS1jMykgKi8KLSAgICAKKwogICAgIHozICs9IHo1OwogICAgIHo0ICs9IHo1OwotICAgIAorCiAgICAgZGF0YXB0cltEQ1RTSVpFKjddID0gKERDVEVMRU0pIERFU0NBTEUodG1wNCArIHoxICsgejMsCi0JCQkJCSAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKTsKICAgICBkYXRhcHRyW0RDVFNJWkUqNV0gPSAoRENURUxFTSkgREVTQ0FMRSh0bXA1ICsgejIgKyB6NCwKLQkJCQkJICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMpOwogICAgIGRhdGFwdHJbRENUU0laRSozXSA9IChEQ1RFTEVNKSBERVNDQUxFKHRtcDYgKyB6MiArIHozLAotCQkJCQkgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyk7CiAgICAgZGF0YXB0cltEQ1RTSVpFKjFdID0gKERDVEVMRU0pIERFU0NBTEUodG1wNyArIHoxICsgejQsCi0JCQkJCSAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyk7Ci0gICAgCi0gICAgZGF0YXB0cisrOwkJCS8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IGNvbHVtbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyk7CisKKyAgICBkYXRhcHRyKys7ICAgICAgICAgICAgICAgICAgLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgY29sdW1uICovCiAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvamlkY3RmbHQuYyBiL2ppZGN0Zmx0LmMKaW5kZXggMDE4OGNlMy4uYzE3MmVhMSAxMDA2NDQKLS0tIGEvamlkY3RmbHQuYworKysgYi9qaWRjdGZsdC5jCkBAIC0zOSw3ICszOSw3IEBACiAjZGVmaW5lIEpQRUdfSU5URVJOQUxTCiAjaW5jbHVkZSAiamluY2x1ZGUuaCIKICNpbmNsdWRlICJqcGVnbGliLmgiCi0jaW5jbHVkZSAiamRjdC5oIgkJLyogUHJpdmF0ZSBkZWNsYXJhdGlvbnMgZm9yIERDVCBzdWJzeXN0ZW0gKi8KKyNpbmNsdWRlICJqZGN0LmgiICAgICAgICAgICAgICAgLyogUHJpdmF0ZSBkZWNsYXJhdGlvbnMgZm9yIERDVCBzdWJzeXN0ZW0gKi8KIAogI2lmZGVmIERDVF9GTE9BVF9TVVBQT1JURUQKIApAQCAtNjYsOCArNjYsOCBAQAogCiBHTE9CQUwodm9pZCkKIGpwZWdfaWRjdF9mbG9hdCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCi0JCSBKQ09FRlBUUiBjb2VmX2Jsb2NrLAotCQkgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpCisgICAgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssCisgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQogewogICBGQVNUX0ZMT0FUIHRtcDAsIHRtcDEsIHRtcDIsIHRtcDMsIHRtcDQsIHRtcDUsIHRtcDYsIHRtcDc7CiAgIEZBU1RfRkxPQVQgdG1wMTAsIHRtcDExLCB0bXAxMiwgdG1wMTM7CkBAIC05NSwxNCArOTUsMTQgQEAKICAgICAgKiBXaXRoIHR5cGljYWwgaW1hZ2VzIGFuZCBxdWFudGl6YXRpb24gdGFibGVzLCBoYWxmIG9yIG1vcmUgb2YgdGhlCiAgICAgICogY29sdW1uIERDVCBjYWxjdWxhdGlvbnMgY2FuIGJlIHNpbXBsaWZpZWQgdGhpcyB3YXkuCiAgICAgICovCi0gICAgCisKICAgICBpZiAoaW5wdHJbRENUU0laRSoxXSA9PSAwICYmIGlucHRyW0RDVFNJWkUqMl0gPT0gMCAmJgotCWlucHRyW0RDVFNJWkUqM10gPT0gMCAmJiBpbnB0cltEQ1RTSVpFKjRdID09IDAgJiYKLQlpbnB0cltEQ1RTSVpFKjVdID09IDAgJiYgaW5wdHJbRENUU0laRSo2XSA9PSAwICYmCi0JaW5wdHJbRENUU0laRSo3XSA9PSAwKSB7CisgICAgICAgIGlucHRyW0RDVFNJWkUqM10gPT0gMCAmJiBpbnB0cltEQ1RTSVpFKjRdID09IDAgJiYKKyAgICAgICAgaW5wdHJbRENUU0laRSo1XSA9PSAwICYmIGlucHRyW0RDVFNJWkUqNl0gPT0gMCAmJgorICAgICAgICBpbnB0cltEQ1RTSVpFKjddID09IDApIHsKICAgICAgIC8qIEFDIHRlcm1zIGFsbCB6ZXJvICovCiAgICAgICBGQVNUX0ZMT0FUIGRjdmFsID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjBdLCBxdWFudHB0cltEQ1RTSVpFKjBdKTsKLSAgICAgIAorCiAgICAgICB3c3B0cltEQ1RTSVpFKjBdID0gZGN2YWw7CiAgICAgICB3c3B0cltEQ1RTSVpFKjFdID0gZGN2YWw7CiAgICAgICB3c3B0cltEQ1RTSVpFKjJdID0gZGN2YWw7CkBAIC0xMTEsMTMgKzExMSwxMyBAQAogICAgICAgd3NwdHJbRENUU0laRSo1XSA9IGRjdmFsOwogICAgICAgd3NwdHJbRENUU0laRSo2XSA9IGRjdmFsOwogICAgICAgd3NwdHJbRENUU0laRSo3XSA9IGRjdmFsOwotICAgICAgCi0gICAgICBpbnB0cisrOwkJCS8qIGFkdmFuY2UgcG9pbnRlcnMgdG8gbmV4dCBjb2x1bW4gKi8KKworICAgICAgaW5wdHIrKzsgICAgICAgICAgICAgICAgICAvKiBhZHZhbmNlIHBvaW50ZXJzIHRvIG5leHQgY29sdW1uICovCiAgICAgICBxdWFudHB0cisrOwogICAgICAgd3NwdHIrKzsKICAgICAgIGNvbnRpbnVlOwogICAgIH0KLSAgICAKKwogICAgIC8qIEV2ZW4gcGFydCAqLwogCiAgICAgdG1wMCA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSowXSwgcXVhbnRwdHJbRENUU0laRSowXSk7CkBAIC0xMjUsMTcgKzEyNSwxNyBAQAogICAgIHRtcDIgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqNF0sIHF1YW50cHRyW0RDVFNJWkUqNF0pOwogICAgIHRtcDMgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqNl0sIHF1YW50cHRyW0RDVFNJWkUqNl0pOwogCi0gICAgdG1wMTAgPSB0bXAwICsgdG1wMjsJLyogcGhhc2UgMyAqLworICAgIHRtcDEwID0gdG1wMCArIHRtcDI7ICAgICAgICAvKiBwaGFzZSAzICovCiAgICAgdG1wMTEgPSB0bXAwIC0gdG1wMjsKIAotICAgIHRtcDEzID0gdG1wMSArIHRtcDM7CS8qIHBoYXNlcyA1LTMgKi8KKyAgICB0bXAxMyA9IHRtcDEgKyB0bXAzOyAgICAgICAgLyogcGhhc2VzIDUtMyAqLwogICAgIHRtcDEyID0gKHRtcDEgLSB0bXAzKSAqICgoRkFTVF9GTE9BVCkgMS40MTQyMTM1NjIpIC0gdG1wMTM7IC8qIDIqYzQgKi8KIAotICAgIHRtcDAgPSB0bXAxMCArIHRtcDEzOwkvKiBwaGFzZSAyICovCisgICAgdG1wMCA9IHRtcDEwICsgdG1wMTM7ICAgICAgIC8qIHBoYXNlIDIgKi8KICAgICB0bXAzID0gdG1wMTAgLSB0bXAxMzsKICAgICB0bXAxID0gdG1wMTEgKyB0bXAxMjsKICAgICB0bXAyID0gdG1wMTEgLSB0bXAxMjsKLSAgICAKKwogICAgIC8qIE9kZCBwYXJ0ICovCiAKICAgICB0bXA0ID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjFdLCBxdWFudHB0cltEQ1RTSVpFKjFdKTsKQEAgLTE0MywxOSArMTQzLDE5IEBACiAgICAgdG1wNiA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo1XSwgcXVhbnRwdHJbRENUU0laRSo1XSk7CiAgICAgdG1wNyA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo3XSwgcXVhbnRwdHJbRENUU0laRSo3XSk7CiAKLSAgICB6MTMgPSB0bXA2ICsgdG1wNTsJCS8qIHBoYXNlIDYgKi8KKyAgICB6MTMgPSB0bXA2ICsgdG1wNTsgICAgICAgICAgLyogcGhhc2UgNiAqLwogICAgIHoxMCA9IHRtcDYgLSB0bXA1OwogICAgIHoxMSA9IHRtcDQgKyB0bXA3OwogICAgIHoxMiA9IHRtcDQgLSB0bXA3OwogCi0gICAgdG1wNyA9IHoxMSArIHoxMzsJCS8qIHBoYXNlIDUgKi8KKyAgICB0bXA3ID0gejExICsgejEzOyAgICAgICAgICAgLyogcGhhc2UgNSAqLwogICAgIHRtcDExID0gKHoxMSAtIHoxMykgKiAoKEZBU1RfRkxPQVQpIDEuNDE0MjEzNTYyKTsgLyogMipjNCAqLwogCiAgICAgejUgPSAoejEwICsgejEyKSAqICgoRkFTVF9GTE9BVCkgMS44NDc3NTkwNjUpOyAvKiAyKmMyICovCiAgICAgdG1wMTAgPSAoKEZBU1RfRkxPQVQpIDEuMDgyMzkyMjAwKSAqIHoxMiAtIHo1OyAvKiAyKihjMi1jNikgKi8KICAgICB0bXAxMiA9ICgoRkFTVF9GTE9BVCkgLTIuNjEzMTI1OTMwKSAqIHoxMCArIHo1OyAvKiAtMiooYzIrYzYpICovCiAKLSAgICB0bXA2ID0gdG1wMTIgLSB0bXA3OwkvKiBwaGFzZSAyICovCisgICAgdG1wNiA9IHRtcDEyIC0gdG1wNzsgICAgICAgIC8qIHBoYXNlIDIgKi8KICAgICB0bXA1ID0gdG1wMTEgLSB0bXA2OwogICAgIHRtcDQgPSB0bXAxMCArIHRtcDU7CiAKQEAgLTE2OCwxMSArMTY4LDExIEBACiAgICAgd3NwdHJbRENUU0laRSo0XSA9IHRtcDMgKyB0bXA0OwogICAgIHdzcHRyW0RDVFNJWkUqM10gPSB0bXAzIC0gdG1wNDsKIAotICAgIGlucHRyKys7CQkJLyogYWR2YW5jZSBwb2ludGVycyB0byBuZXh0IGNvbHVtbiAqLworICAgIGlucHRyKys7ICAgICAgICAgICAgICAgICAgICAvKiBhZHZhbmNlIHBvaW50ZXJzIHRvIG5leHQgY29sdW1uICovCiAgICAgcXVhbnRwdHIrKzsKICAgICB3c3B0cisrOwogICB9Ci0gIAorCiAgIC8qIFBhc3MgMjogcHJvY2VzcyByb3dzIGZyb20gd29yayBhcnJheSwgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuICovCiAgIC8qIE5vdGUgdGhhdCB3ZSBtdXN0IGRlc2NhbGUgdGhlIHJlc3VsdHMgYnkgYSBmYWN0b3Igb2YgOCA9PSAyKiozLiAqLwogCkBAIC0xODQsNyArMTg0LDcgQEAKICAgICAgKiB0aGUgc2ltcGxpZmljYXRpb24gYXBwbGllcyBsZXNzIG9mdGVuICh0eXBpY2FsbHkgNSUgdG8gMTAlIG9mIHRoZSB0aW1lKS4KICAgICAgKiBBbmQgdGVzdGluZyBmbG9hdHMgZm9yIHplcm8gaXMgcmVsYXRpdmVseSBleHBlbnNpdmUsIHNvIHdlIGRvbid0IGJvdGhlci4KICAgICAgKi8KLSAgICAKKwogICAgIC8qIEV2ZW4gcGFydCAqLwogCiAgICAgdG1wMTAgPSB3c3B0clswXSArIHdzcHRyWzRdOwpAQCAtMjE5LDIzICsyMTksMjMgQEAKICAgICAvKiBGaW5hbCBvdXRwdXQgc3RhZ2U6IHNjYWxlIGRvd24gYnkgYSBmYWN0b3Igb2YgOCBhbmQgcmFuZ2UtbGltaXQgKi8KIAogICAgIG91dHB0clswXSA9IHJhbmdlX2xpbWl0WyhpbnQpIERFU0NBTEUoKElOVDMyKSAodG1wMCArIHRtcDcpLCAzKQotCQkJICAgICYgUkFOR0VfTUFTS107CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBSQU5HRV9NQVNLXTsKICAgICBvdXRwdHJbN10gPSByYW5nZV9saW1pdFsoaW50KSBERVNDQUxFKChJTlQzMikgKHRtcDAgLSB0bXA3KSwgMykKLQkJCSAgICAmIFJBTkdFX01BU0tdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CiAgICAgb3V0cHRyWzFdID0gcmFuZ2VfbGltaXRbKGludCkgREVTQ0FMRSgoSU5UMzIpICh0bXAxICsgdG1wNiksIDMpCi0JCQkgICAgJiBSQU5HRV9NQVNLXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOwogICAgIG91dHB0cls2XSA9IHJhbmdlX2xpbWl0WyhpbnQpIERFU0NBTEUoKElOVDMyKSAodG1wMSAtIHRtcDYpLCAzKQotCQkJICAgICYgUkFOR0VfTUFTS107CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBSQU5HRV9NQVNLXTsKICAgICBvdXRwdHJbMl0gPSByYW5nZV9saW1pdFsoaW50KSBERVNDQUxFKChJTlQzMikgKHRtcDIgKyB0bXA1KSwgMykKLQkJCSAgICAmIFJBTkdFX01BU0tdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CiAgICAgb3V0cHRyWzVdID0gcmFuZ2VfbGltaXRbKGludCkgREVTQ0FMRSgoSU5UMzIpICh0bXAyIC0gdG1wNSksIDMpCi0JCQkgICAgJiBSQU5HRV9NQVNLXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOwogICAgIG91dHB0cls0XSA9IHJhbmdlX2xpbWl0WyhpbnQpIERFU0NBTEUoKElOVDMyKSAodG1wMyArIHRtcDQpLCAzKQotCQkJICAgICYgUkFOR0VfTUFTS107CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBSQU5HRV9NQVNLXTsKICAgICBvdXRwdHJbM10gPSByYW5nZV9saW1pdFsoaW50KSBERVNDQUxFKChJTlQzMikgKHRtcDMgLSB0bXA0KSwgMykKLQkJCSAgICAmIFJBTkdFX01BU0tdOwotICAgIAotICAgIHdzcHRyICs9IERDVFNJWkU7CQkvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCByb3cgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOworCisgICAgd3NwdHIgKz0gRENUU0laRTsgICAgICAgICAgIC8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLwogICB9CiB9CiAKZGlmZiAtLWdpdCBhL2ppZGN0ZnN0LmMgYi9qaWRjdGZzdC5jCmluZGV4IGRiYTQyMTYuLmNhZTIyYjkgMTAwNjQ0Ci0tLSBhL2ppZGN0ZnN0LmMKKysrIGIvamlkY3Rmc3QuYwpAQCAtMzUsNyArMzUsNyBAQAogI2RlZmluZSBKUEVHX0lOVEVSTkFMUwogI2luY2x1ZGUgImppbmNsdWRlLmgiCiAjaW5jbHVkZSAianBlZ2xpYi5oIgotI2luY2x1ZGUgImpkY3QuaCIJCS8qIFByaXZhdGUgZGVjbGFyYXRpb25zIGZvciBEQ1Qgc3Vic3lzdGVtICovCisjaW5jbHVkZSAiamRjdC5oIiAgICAgICAgICAgICAgIC8qIFByaXZhdGUgZGVjbGFyYXRpb25zIGZvciBEQ1Qgc3Vic3lzdGVtICovCiAKICNpZmRlZiBEQ1RfSUZBU1RfU1VQUE9SVEVECiAKQEAgLTc4LDcgKzc4LDcgQEAKICNkZWZpbmUgUEFTUzFfQklUUyAgMgogI2Vsc2UKICNkZWZpbmUgQ09OU1RfQklUUyAgOAotI2RlZmluZSBQQVNTMV9CSVRTICAxCQkvKiBsb3NlIGEgbGl0dGxlIHByZWNpc2lvbiB0byBhdm9pZCBvdmVyZmxvdyAqLworI2RlZmluZSBQQVNTMV9CSVRTICAxICAgICAgICAgICAvKiBsb3NlIGEgbGl0dGxlIHByZWNpc2lvbiB0byBhdm9pZCBvdmVyZmxvdyAqLwogI2VuZGlmCiAKIC8qIFNvbWUgQyBjb21waWxlcnMgZmFpbCB0byByZWR1Y2UgIkZJWChjb25zdGFudCkiIGF0IGNvbXBpbGUgdGltZSwgdGh1cwpAQCAtODksMTAgKzg5LDEwIEBACiAgKi8KIAogI2lmIENPTlNUX0JJVFMgPT0gOAotI2RlZmluZSBGSVhfMV8wODIzOTIyMDAgICgoSU5UMzIpICAyNzcpCQkvKiBGSVgoMS4wODIzOTIyMDApICovCi0jZGVmaW5lIEZJWF8xXzQxNDIxMzU2MiAgKChJTlQzMikgIDM2MikJCS8qIEZJWCgxLjQxNDIxMzU2MikgKi8KLSNkZWZpbmUgRklYXzFfODQ3NzU5MDY1ICAoKElOVDMyKSAgNDczKQkJLyogRklYKDEuODQ3NzU5MDY1KSAqLwotI2RlZmluZSBGSVhfMl82MTMxMjU5MzAgICgoSU5UMzIpICA2NjkpCQkvKiBGSVgoMi42MTMxMjU5MzApICovCisjZGVmaW5lIEZJWF8xXzA4MjM5MjIwMCAgKChJTlQzMikgIDI3NykgICAgICAgICAvKiBGSVgoMS4wODIzOTIyMDApICovCisjZGVmaW5lIEZJWF8xXzQxNDIxMzU2MiAgKChJTlQzMikgIDM2MikgICAgICAgICAvKiBGSVgoMS40MTQyMTM1NjIpICovCisjZGVmaW5lIEZJWF8xXzg0Nzc1OTA2NSAgKChJTlQzMikgIDQ3MykgICAgICAgICAvKiBGSVgoMS44NDc3NTkwNjUpICovCisjZGVmaW5lIEZJWF8yXzYxMzEyNTkzMCAgKChJTlQzMikgIDY2OSkgICAgICAgICAvKiBGSVgoMi42MTMxMjU5MzApICovCiAjZWxzZQogI2RlZmluZSBGSVhfMV8wODIzOTIyMDAgIEZJWCgxLjA4MjM5MjIwMCkKICNkZWZpbmUgRklYXzFfNDE0MjEzNTYyICBGSVgoMS40MTQyMTM1NjIpCkBAIC0xMjksNyArMTI5LDcgQEAKICNkZWZpbmUgREVRVUFOVElaRShjb2VmLHF1YW50dmFsKSAgKCgoSUZBU1RfTVVMVF9UWVBFKSAoY29lZikpICogKHF1YW50dmFsKSkKICNlbHNlCiAjZGVmaW5lIERFUVVBTlRJWkUoY29lZixxdWFudHZhbCkgIFwKLQlERVNDQUxFKChjb2VmKSoocXVhbnR2YWwpLCBJRkFTVF9TQ0FMRV9CSVRTLVBBU1MxX0JJVFMpCisgICAgICAgIERFU0NBTEUoKGNvZWYpKihxdWFudHZhbCksIElGQVNUX1NDQUxFX0JJVFMtUEFTUzFfQklUUykKICNlbmRpZgogCiAKQEAgLTEzOCwxMSArMTM4LDExIEBACiAgKi8KIAogI2lmZGVmIFJJR0hUX1NISUZUX0lTX1VOU0lHTkVECi0jZGVmaW5lIElTSElGVF9URU1QUwlEQ1RFTEVNIGlzaGlmdF90ZW1wOworI2RlZmluZSBJU0hJRlRfVEVNUFMgICAgRENURUxFTSBpc2hpZnRfdGVtcDsKICNpZiBCSVRTX0lOX0pTQU1QTEUgPT0gOAotI2RlZmluZSBEQ1RFTEVNQklUUyAgMTYJCS8qIERDVEVMRU0gbWF5IGJlIDE2IG9yIDMyIGJpdHMgKi8KKyNkZWZpbmUgRENURUxFTUJJVFMgIDE2ICAgICAgICAgLyogRENURUxFTSBtYXkgYmUgMTYgb3IgMzIgYml0cyAqLwogI2Vsc2UKLSNkZWZpbmUgRENURUxFTUJJVFMgIDMyCQkvKiBEQ1RFTEVNIG11c3QgYmUgMzIgYml0cyAqLworI2RlZmluZSBEQ1RFTEVNQklUUyAgMzIgICAgICAgICAvKiBEQ1RFTEVNIG11c3QgYmUgMzIgYml0cyAqLwogI2VuZGlmCiAjZGVmaW5lIElSSUdIVF9TSElGVCh4LHNoZnQpICBcCiAgICAgKChpc2hpZnRfdGVtcCA9ICh4KSkgPCAwID8gXApAQCAtMTUwLDcgKzE1MCw3IEBACiAgICAgIChpc2hpZnRfdGVtcCA+PiAoc2hmdCkpKQogI2Vsc2UKICNkZWZpbmUgSVNISUZUX1RFTVBTCi0jZGVmaW5lIElSSUdIVF9TSElGVCh4LHNoZnQpCSgoeCkgPj4gKHNoZnQpKQorI2RlZmluZSBJUklHSFRfU0hJRlQoeCxzaGZ0KSAgICAoKHgpID4+IChzaGZ0KSkKICNlbmRpZgogCiAjaWZkZWYgVVNFX0FDQ1VSQVRFX1JPVU5ESU5HCkBAIC0xNjYsOCArMTY2LDggQEAKIAogR0xPQkFMKHZvaWQpCiBqcGVnX2lkY3RfaWZhc3QgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAotCQkgSkNPRUZQVFIgY29lZl9ibG9jaywKLQkJIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQorICAgICAgICAgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLAorICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKIHsKICAgRENURUxFTSB0bXAwLCB0bXAxLCB0bXAyLCB0bXAzLCB0bXA0LCB0bXA1LCB0bXA2LCB0bXA3OwogICBEQ1RFTEVNIHRtcDEwLCB0bXAxMSwgdG1wMTIsIHRtcDEzOwpAQCAtMTc4LDkgKzE3OCw5IEBACiAgIEpTQU1QUk9XIG91dHB0cjsKICAgSlNBTVBMRSAqcmFuZ2VfbGltaXQgPSBJRENUX3JhbmdlX2xpbWl0KGNpbmZvKTsKICAgaW50IGN0cjsKLSAgaW50IHdvcmtzcGFjZVtEQ1RTSVpFMl07CS8qIGJ1ZmZlcnMgZGF0YSBiZXR3ZWVuIHBhc3NlcyAqLwotICBTSElGVF9URU1QUwkJCS8qIGZvciBERVNDQUxFICovCi0gIElTSElGVF9URU1QUwkJCS8qIGZvciBJREVTQ0FMRSAqLworICBpbnQgd29ya3NwYWNlW0RDVFNJWkUyXTsgICAgICAvKiBidWZmZXJzIGRhdGEgYmV0d2VlbiBwYXNzZXMgKi8KKyAgU0hJRlRfVEVNUFMgICAgICAgICAgICAgICAgICAgLyogZm9yIERFU0NBTEUgKi8KKyAgSVNISUZUX1RFTVBTICAgICAgICAgICAgICAgICAgLyogZm9yIElERVNDQUxFICovCiAKICAgLyogUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMgZnJvbSBpbnB1dCwgc3RvcmUgaW50byB3b3JrIGFycmF5LiAqLwogCkBAIC0xOTYsMTEgKzE5NiwxMSBAQAogICAgICAqIFdpdGggdHlwaWNhbCBpbWFnZXMgYW5kIHF1YW50aXphdGlvbiB0YWJsZXMsIGhhbGYgb3IgbW9yZSBvZiB0aGUKICAgICAgKiBjb2x1bW4gRENUIGNhbGN1bGF0aW9ucyBjYW4gYmUgc2ltcGxpZmllZCB0aGlzIHdheS4KICAgICAgKi8KLSAgICAKKwogICAgIGlmIChpbnB0cltEQ1RTSVpFKjFdID09IDAgJiYgaW5wdHJbRENUU0laRSoyXSA9PSAwICYmCi0JaW5wdHJbRENUU0laRSozXSA9PSAwICYmIGlucHRyW0RDVFNJWkUqNF0gPT0gMCAmJgotCWlucHRyW0RDVFNJWkUqNV0gPT0gMCAmJiBpbnB0cltEQ1RTSVpFKjZdID09IDAgJiYKLQlpbnB0cltEQ1RTSVpFKjddID09IDApIHsKKyAgICAgICAgaW5wdHJbRENUU0laRSozXSA9PSAwICYmIGlucHRyW0RDVFNJWkUqNF0gPT0gMCAmJgorICAgICAgICBpbnB0cltEQ1RTSVpFKjVdID09IDAgJiYgaW5wdHJbRENUU0laRSo2XSA9PSAwICYmCisgICAgICAgIGlucHRyW0RDVFNJWkUqN10gPT0gMCkgewogICAgICAgLyogQUMgdGVybXMgYWxsIHplcm8gKi8KICAgICAgIGludCBkY3ZhbCA9IChpbnQpIERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSowXSwgcXVhbnRwdHJbRENUU0laRSowXSk7CiAKQEAgLTIxMiwxMyArMjEyLDEzIEBACiAgICAgICB3c3B0cltEQ1RTSVpFKjVdID0gZGN2YWw7CiAgICAgICB3c3B0cltEQ1RTSVpFKjZdID0gZGN2YWw7CiAgICAgICB3c3B0cltEQ1RTSVpFKjddID0gZGN2YWw7Ci0gICAgICAKLSAgICAgIGlucHRyKys7CQkJLyogYWR2YW5jZSBwb2ludGVycyB0byBuZXh0IGNvbHVtbiAqLworCisgICAgICBpbnB0cisrOyAgICAgICAgICAgICAgICAgIC8qIGFkdmFuY2UgcG9pbnRlcnMgdG8gbmV4dCBjb2x1bW4gKi8KICAgICAgIHF1YW50cHRyKys7CiAgICAgICB3c3B0cisrOwogICAgICAgY29udGludWU7CiAgICAgfQotICAgIAorCiAgICAgLyogRXZlbiBwYXJ0ICovCiAKICAgICB0bXAwID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjBdLCBxdWFudHB0cltEQ1RTSVpFKjBdKTsKQEAgLTIyNiwxNyArMjI2LDE3IEBACiAgICAgdG1wMiA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo0XSwgcXVhbnRwdHJbRENUU0laRSo0XSk7CiAgICAgdG1wMyA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo2XSwgcXVhbnRwdHJbRENUU0laRSo2XSk7CiAKLSAgICB0bXAxMCA9IHRtcDAgKyB0bXAyOwkvKiBwaGFzZSAzICovCisgICAgdG1wMTAgPSB0bXAwICsgdG1wMjsgICAgICAgIC8qIHBoYXNlIDMgKi8KICAgICB0bXAxMSA9IHRtcDAgLSB0bXAyOwogCi0gICAgdG1wMTMgPSB0bXAxICsgdG1wMzsJLyogcGhhc2VzIDUtMyAqLworICAgIHRtcDEzID0gdG1wMSArIHRtcDM7ICAgICAgICAvKiBwaGFzZXMgNS0zICovCiAgICAgdG1wMTIgPSBNVUxUSVBMWSh0bXAxIC0gdG1wMywgRklYXzFfNDE0MjEzNTYyKSAtIHRtcDEzOyAvKiAyKmM0ICovCiAKLSAgICB0bXAwID0gdG1wMTAgKyB0bXAxMzsJLyogcGhhc2UgMiAqLworICAgIHRtcDAgPSB0bXAxMCArIHRtcDEzOyAgICAgICAvKiBwaGFzZSAyICovCiAgICAgdG1wMyA9IHRtcDEwIC0gdG1wMTM7CiAgICAgdG1wMSA9IHRtcDExICsgdG1wMTI7CiAgICAgdG1wMiA9IHRtcDExIC0gdG1wMTI7Ci0gICAgCisKICAgICAvKiBPZGQgcGFydCAqLwogCiAgICAgdG1wNCA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSoxXSwgcXVhbnRwdHJbRENUU0laRSoxXSk7CkBAIC0yNDQsMTkgKzI0NCwxOSBAQAogICAgIHRtcDYgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqNV0sIHF1YW50cHRyW0RDVFNJWkUqNV0pOwogICAgIHRtcDcgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqN10sIHF1YW50cHRyW0RDVFNJWkUqN10pOwogCi0gICAgejEzID0gdG1wNiArIHRtcDU7CQkvKiBwaGFzZSA2ICovCisgICAgejEzID0gdG1wNiArIHRtcDU7ICAgICAgICAgIC8qIHBoYXNlIDYgKi8KICAgICB6MTAgPSB0bXA2IC0gdG1wNTsKICAgICB6MTEgPSB0bXA0ICsgdG1wNzsKICAgICB6MTIgPSB0bXA0IC0gdG1wNzsKIAotICAgIHRtcDcgPSB6MTEgKyB6MTM7CQkvKiBwaGFzZSA1ICovCisgICAgdG1wNyA9IHoxMSArIHoxMzsgICAgICAgICAgIC8qIHBoYXNlIDUgKi8KICAgICB0bXAxMSA9IE1VTFRJUExZKHoxMSAtIHoxMywgRklYXzFfNDE0MjEzNTYyKTsgLyogMipjNCAqLwogCiAgICAgejUgPSBNVUxUSVBMWSh6MTAgKyB6MTIsIEZJWF8xXzg0Nzc1OTA2NSk7IC8qIDIqYzIgKi8KICAgICB0bXAxMCA9IE1VTFRJUExZKHoxMiwgRklYXzFfMDgyMzkyMjAwKSAtIHo1OyAvKiAyKihjMi1jNikgKi8KICAgICB0bXAxMiA9IE1VTFRJUExZKHoxMCwgLSBGSVhfMl82MTMxMjU5MzApICsgejU7IC8qIC0yKihjMitjNikgKi8KIAotICAgIHRtcDYgPSB0bXAxMiAtIHRtcDc7CS8qIHBoYXNlIDIgKi8KKyAgICB0bXA2ID0gdG1wMTIgLSB0bXA3OyAgICAgICAgLyogcGhhc2UgMiAqLwogICAgIHRtcDUgPSB0bXAxMSAtIHRtcDY7CiAgICAgdG1wNCA9IHRtcDEwICsgdG1wNTsKIApAQCAtMjY5LDExICsyNjksMTEgQEAKICAgICB3c3B0cltEQ1RTSVpFKjRdID0gKGludCkgKHRtcDMgKyB0bXA0KTsKICAgICB3c3B0cltEQ1RTSVpFKjNdID0gKGludCkgKHRtcDMgLSB0bXA0KTsKIAotICAgIGlucHRyKys7CQkJLyogYWR2YW5jZSBwb2ludGVycyB0byBuZXh0IGNvbHVtbiAqLworICAgIGlucHRyKys7ICAgICAgICAgICAgICAgICAgICAvKiBhZHZhbmNlIHBvaW50ZXJzIHRvIG5leHQgY29sdW1uICovCiAgICAgcXVhbnRwdHIrKzsKICAgICB3c3B0cisrOwogICB9Ci0gIAorCiAgIC8qIFBhc3MgMjogcHJvY2VzcyByb3dzIGZyb20gd29yayBhcnJheSwgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuICovCiAgIC8qIE5vdGUgdGhhdCB3ZSBtdXN0IGRlc2NhbGUgdGhlIHJlc3VsdHMgYnkgYSBmYWN0b3Igb2YgOCA9PSAyKiozLCAqLwogICAvKiBhbmQgYWxzbyB1bmRvIHRoZSBQQVNTMV9CSVRTIHNjYWxpbmcuICovCkBAIC0yODgsMTQgKzI4OCwxNCBAQAogICAgICAqIHRlc3QgdGFrZXMgbW9yZSB0aW1lIHRoYW4gaXQncyB3b3J0aC4gIEluIHRoYXQgY2FzZSB0aGlzIHNlY3Rpb24KICAgICAgKiBtYXkgYmUgY29tbWVudGVkIG91dC4KICAgICAgKi8KLSAgICAKKwogI2lmbmRlZiBOT19aRVJPX1JPV19URVNUCiAgICAgaWYgKHdzcHRyWzFdID09IDAgJiYgd3NwdHJbMl0gPT0gMCAmJiB3c3B0clszXSA9PSAwICYmIHdzcHRyWzRdID09IDAgJiYKLQl3c3B0cls1XSA9PSAwICYmIHdzcHRyWzZdID09IDAgJiYgd3NwdHJbN10gPT0gMCkgeworICAgICAgICB3c3B0cls1XSA9PSAwICYmIHdzcHRyWzZdID09IDAgJiYgd3NwdHJbN10gPT0gMCkgewogICAgICAgLyogQUMgdGVybXMgYWxsIHplcm8gKi8KICAgICAgIEpTQU1QTEUgZGN2YWwgPSByYW5nZV9saW1pdFtJREVTQ0FMRSh3c3B0clswXSwgUEFTUzFfQklUUyszKQotCQkJCSAgJiBSQU5HRV9NQVNLXTsKLSAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CisKICAgICAgIG91dHB0clswXSA9IGRjdmFsOwogICAgICAgb3V0cHRyWzFdID0gZGN2YWw7CiAgICAgICBvdXRwdHJbMl0gPSBkY3ZhbDsKQEAgLTMwNSwxMSArMzA1LDExIEBACiAgICAgICBvdXRwdHJbNl0gPSBkY3ZhbDsKICAgICAgIG91dHB0cls3XSA9IGRjdmFsOwogCi0gICAgICB3c3B0ciArPSBEQ1RTSVpFOwkJLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgcm93ICovCisgICAgICB3c3B0ciArPSBEQ1RTSVpFOyAgICAgICAgIC8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLwogICAgICAgY29udGludWU7CiAgICAgfQogI2VuZGlmCi0gICAgCisKICAgICAvKiBFdmVuIHBhcnQgKi8KIAogICAgIHRtcDEwID0gKChEQ1RFTEVNKSB3c3B0clswXSArIChEQ1RFTEVNKSB3c3B0cls0XSk7CkBAIC0zMTcsNyArMzE3LDcgQEAKIAogICAgIHRtcDEzID0gKChEQ1RFTEVNKSB3c3B0clsyXSArIChEQ1RFTEVNKSB3c3B0cls2XSk7CiAgICAgdG1wMTIgPSBNVUxUSVBMWSgoRENURUxFTSkgd3NwdHJbMl0gLSAoRENURUxFTSkgd3NwdHJbNl0sIEZJWF8xXzQxNDIxMzU2MikKLQkgICAgLSB0bXAxMzsKKyAgICAgICAgICAgIC0gdG1wMTM7CiAKICAgICB0bXAwID0gdG1wMTAgKyB0bXAxMzsKICAgICB0bXAzID0gdG1wMTAgLSB0bXAxMzsKQEAgLTMzMSwzNyArMzMxLDM3IEBACiAgICAgejExID0gKERDVEVMRU0pIHdzcHRyWzFdICsgKERDVEVMRU0pIHdzcHRyWzddOwogICAgIHoxMiA9IChEQ1RFTEVNKSB3c3B0clsxXSAtIChEQ1RFTEVNKSB3c3B0cls3XTsKIAotICAgIHRtcDcgPSB6MTEgKyB6MTM7CQkvKiBwaGFzZSA1ICovCisgICAgdG1wNyA9IHoxMSArIHoxMzsgICAgICAgICAgIC8qIHBoYXNlIDUgKi8KICAgICB0bXAxMSA9IE1VTFRJUExZKHoxMSAtIHoxMywgRklYXzFfNDE0MjEzNTYyKTsgLyogMipjNCAqLwogCiAgICAgejUgPSBNVUxUSVBMWSh6MTAgKyB6MTIsIEZJWF8xXzg0Nzc1OTA2NSk7IC8qIDIqYzIgKi8KICAgICB0bXAxMCA9IE1VTFRJUExZKHoxMiwgRklYXzFfMDgyMzkyMjAwKSAtIHo1OyAvKiAyKihjMi1jNikgKi8KICAgICB0bXAxMiA9IE1VTFRJUExZKHoxMCwgLSBGSVhfMl82MTMxMjU5MzApICsgejU7IC8qIC0yKihjMitjNikgKi8KIAotICAgIHRtcDYgPSB0bXAxMiAtIHRtcDc7CS8qIHBoYXNlIDIgKi8KKyAgICB0bXA2ID0gdG1wMTIgLSB0bXA3OyAgICAgICAgLyogcGhhc2UgMiAqLwogICAgIHRtcDUgPSB0bXAxMSAtIHRtcDY7CiAgICAgdG1wNCA9IHRtcDEwICsgdG1wNTsKIAogICAgIC8qIEZpbmFsIG91dHB1dCBzdGFnZTogc2NhbGUgZG93biBieSBhIGZhY3RvciBvZiA4IGFuZCByYW5nZS1saW1pdCAqLwogCiAgICAgb3V0cHRyWzBdID0gcmFuZ2VfbGltaXRbSURFU0NBTEUodG1wMCArIHRtcDcsIFBBU1MxX0JJVFMrMykKLQkJCSAgICAmIFJBTkdFX01BU0tdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CiAgICAgb3V0cHRyWzddID0gcmFuZ2VfbGltaXRbSURFU0NBTEUodG1wMCAtIHRtcDcsIFBBU1MxX0JJVFMrMykKLQkJCSAgICAmIFJBTkdFX01BU0tdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CiAgICAgb3V0cHRyWzFdID0gcmFuZ2VfbGltaXRbSURFU0NBTEUodG1wMSArIHRtcDYsIFBBU1MxX0JJVFMrMykKLQkJCSAgICAmIFJBTkdFX01BU0tdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CiAgICAgb3V0cHRyWzZdID0gcmFuZ2VfbGltaXRbSURFU0NBTEUodG1wMSAtIHRtcDYsIFBBU1MxX0JJVFMrMykKLQkJCSAgICAmIFJBTkdFX01BU0tdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CiAgICAgb3V0cHRyWzJdID0gcmFuZ2VfbGltaXRbSURFU0NBTEUodG1wMiArIHRtcDUsIFBBU1MxX0JJVFMrMykKLQkJCSAgICAmIFJBTkdFX01BU0tdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CiAgICAgb3V0cHRyWzVdID0gcmFuZ2VfbGltaXRbSURFU0NBTEUodG1wMiAtIHRtcDUsIFBBU1MxX0JJVFMrMykKLQkJCSAgICAmIFJBTkdFX01BU0tdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CiAgICAgb3V0cHRyWzRdID0gcmFuZ2VfbGltaXRbSURFU0NBTEUodG1wMyArIHRtcDQsIFBBU1MxX0JJVFMrMykKLQkJCSAgICAmIFJBTkdFX01BU0tdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CiAgICAgb3V0cHRyWzNdID0gcmFuZ2VfbGltaXRbSURFU0NBTEUodG1wMyAtIHRtcDQsIFBBU1MxX0JJVFMrMykKLQkJCSAgICAmIFJBTkdFX01BU0tdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CiAKLSAgICB3c3B0ciArPSBEQ1RTSVpFOwkJLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgcm93ICovCisgICAgd3NwdHIgKz0gRENUU0laRTsgICAgICAgICAgIC8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLwogICB9CiB9CiAKZGlmZiAtLWdpdCBhL2ppZGN0aW50LmMgYi9qaWRjdGludC5jCmluZGV4IGE3MmIzMjAuLjY4OGZkMjIgMTAwNjQ0Ci0tLSBhL2ppZGN0aW50LmMKKysrIGIvamlkY3RpbnQuYwpAQCAtMiw2ICsyLDcgQEAKICAqIGppZGN0aW50LmMKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5OCwgVGhvbWFzIEcuIExhbmUuCisgKiBNb2RpZmljYXRpb24gZGV2ZWxvcGVkIDIwMDItMjAwOSBieSBHdWlkbyBWb2xsYmVkaW5nLgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KICAqCkBAIC0yMywxMiArMjQsMzMgQEAKICAqIFRoZSBhZHZhbnRhZ2Ugb2YgdGhpcyBtZXRob2QgaXMgdGhhdCBubyBkYXRhIHBhdGggY29udGFpbnMgbW9yZSB0aGFuIG9uZQogICogbXVsdGlwbGljYXRpb247IHRoaXMgYWxsb3dzIGEgdmVyeSBzaW1wbGUgYW5kIGFjY3VyYXRlIGltcGxlbWVudGF0aW9uIGluCiAgKiBzY2FsZWQgZml4ZWQtcG9pbnQgYXJpdGhtZXRpYywgd2l0aCBhIG1pbmltYWwgbnVtYmVyIG9mIHNoaWZ0cy4KKyAqCisgKiBXZSBhbHNvIHByb3ZpZGUgSURDVCByb3V0aW5lcyB3aXRoIHZhcmlvdXMgb3V0cHV0IHNhbXBsZSBibG9jayBzaXplcyBmb3IKKyAqIGRpcmVjdCByZXNvbHV0aW9uIHJlZHVjdGlvbiBvciBlbmxhcmdlbWVudCB3aXRob3V0IGFkZGl0aW9uYWwgcmVzYW1wbGluZzoKKyAqIE54TiAoTj0xLi4uMTYpIHBpeGVscyBmb3Igb25lIDh4OCBpbnB1dCBEQ1QgYmxvY2suCisgKgorICogRm9yIE48OCB3ZSBzaW1wbHkgdGFrZSB0aGUgY29ycmVzcG9uZGluZyBsb3ctZnJlcXVlbmN5IGNvZWZmaWNpZW50cyBvZgorICogdGhlIDh4OCBpbnB1dCBEQ1QgYmxvY2sgYW5kIGFwcGx5IGFuIE54TiBwb2ludCBJRENUIG9uIHRoZSBzdWItYmxvY2sKKyAqIHRvIHlpZWxkIHRoZSBkb3duc2NhbGVkIG91dHB1dHMuCisgKiBUaGlzIGNhbiBiZSBzZWVuIGFzIGRpcmVjdCBsb3ctcGFzcyBkb3duc2FtcGxpbmcgZnJvbSB0aGUgRENUIGRvbWFpbgorICogcG9pbnQgb2YgdmlldyByYXRoZXIgdGhhbiB0aGUgdXN1YWwgc3BhdGlhbCBkb21haW4gcG9pbnQgb2YgdmlldywKKyAqIHlpZWxkaW5nIHNpZ25pZmljYW50IGNvbXB1dGF0aW9uYWwgc2F2aW5ncyBhbmQgcmVzdWx0cyBhdCBsZWFzdAorICogYXMgZ29vZCBhcyBjb21tb24gYmlsaW5lYXIgKGF2ZXJhZ2luZykgc3BhdGlhbCBkb3duc2FtcGxpbmcuCisgKgorICogRm9yIE4+OCB3ZSBhcHBseSBhIHBhcnRpYWwgTnhOIElEQ1Qgb24gdGhlIDggaW5wdXQgY29lZmZpY2llbnRzIGFzCisgKiBsb3dlciBmcmVxdWVuY2llcyBhbmQgaGlnaGVyIGZyZXF1ZW5jaWVzIGFzc3VtZWQgdG8gYmUgemVyby4KKyAqIEl0IHR1cm5zIG91dCB0aGF0IHRoZSBjb21wdXRhdGlvbmFsIGVmZm9ydCBpcyBzaW1pbGFyIHRvIHRoZSA4eDggSURDVAorICogcmVnYXJkaW5nIHRoZSBvdXRwdXQgc2l6ZS4KKyAqIEZ1cnRoZXJtb3JlLCB0aGUgc2NhbGluZyBhbmQgZGVzY2FsaW5nIGlzIHRoZSBzYW1lIGZvciBhbGwgSURDVCBzaXplcy4KKyAqCisgKiBDQVVUSU9OOiBXZSByZWx5IG9uIHRoZSBGSVgoKSBtYWNybyBleGNlcHQgZm9yIHRoZSBOPTEsMiw0LDggY2FzZXMKKyAqIHNpbmNlIHRoZXJlIHdvdWxkIGJlIHRvbyBtYW55IGFkZGl0aW9uYWwgY29uc3RhbnRzIHRvIHByZS1jYWxjdWxhdGUuCiAgKi8KIAogI2RlZmluZSBKUEVHX0lOVEVSTkFMUwogI2luY2x1ZGUgImppbmNsdWRlLmgiCiAjaW5jbHVkZSAianBlZ2xpYi5oIgotI2luY2x1ZGUgImpkY3QuaCIJCS8qIFByaXZhdGUgZGVjbGFyYXRpb25zIGZvciBEQ1Qgc3Vic3lzdGVtICovCisjaW5jbHVkZSAiamRjdC5oIiAgICAgICAgICAgICAgIC8qIFByaXZhdGUgZGVjbGFyYXRpb25zIGZvciBEQ1Qgc3Vic3lzdGVtICovCiAKICNpZmRlZiBEQ1RfSVNMT1dfU1VQUE9SVEVECiAKQEAgLTM4LDcgKzYwLDcgQEAKICAqLwogCiAjaWYgRENUU0laRSAhPSA4Ci0gIFNvcnJ5LCB0aGlzIGNvZGUgb25seSBjb3BlcyB3aXRoIDh4OCBEQ1RzLiAvKiBkZWxpYmVyYXRlIHN5bnRheCBlcnIgKi8KKyAgU29ycnksIHRoaXMgY29kZSBvbmx5IGNvcGVzIHdpdGggOHg4IERDVCBibG9ja3MuIC8qIGRlbGliZXJhdGUgc3ludGF4IGVyciAqLwogI2VuZGlmCiAKIApAQCAtNzksNyArMTAxLDcgQEAKICNkZWZpbmUgUEFTUzFfQklUUyAgMgogI2Vsc2UKICNkZWZpbmUgQ09OU1RfQklUUyAgMTMKLSNkZWZpbmUgUEFTUzFfQklUUyAgMQkJLyogbG9zZSBhIGxpdHRsZSBwcmVjaXNpb24gdG8gYXZvaWQgb3ZlcmZsb3cgKi8KKyNkZWZpbmUgUEFTUzFfQklUUyAgMSAgICAgICAgICAgLyogbG9zZSBhIGxpdHRsZSBwcmVjaXNpb24gdG8gYXZvaWQgb3ZlcmZsb3cgKi8KICNlbmRpZgogCiAvKiBTb21lIEMgY29tcGlsZXJzIGZhaWwgdG8gcmVkdWNlICJGSVgoY29uc3RhbnQpIiBhdCBjb21waWxlIHRpbWUsIHRodXMKQEAgLTkwLDE4ICsxMTIsMTggQEAKICAqLwogCiAjaWYgQ09OU1RfQklUUyA9PSAxMwotI2RlZmluZSBGSVhfMF8yOTg2MzEzMzYgICgoSU5UMzIpICAyNDQ2KQkvKiBGSVgoMC4yOTg2MzEzMzYpICovCi0jZGVmaW5lIEZJWF8wXzM5MDE4MDY0NCAgKChJTlQzMikgIDMxOTYpCS8qIEZJWCgwLjM5MDE4MDY0NCkgKi8KLSNkZWZpbmUgRklYXzBfNTQxMTk2MTAwICAoKElOVDMyKSAgNDQzMykJLyogRklYKDAuNTQxMTk2MTAwKSAqLwotI2RlZmluZSBGSVhfMF83NjUzNjY4NjUgICgoSU5UMzIpICA2MjcwKQkvKiBGSVgoMC43NjUzNjY4NjUpICovCi0jZGVmaW5lIEZJWF8wXzg5OTk3NjIyMyAgKChJTlQzMikgIDczNzMpCS8qIEZJWCgwLjg5OTk3NjIyMykgKi8KLSNkZWZpbmUgRklYXzFfMTc1ODc1NjAyICAoKElOVDMyKSAgOTYzMykJLyogRklYKDEuMTc1ODc1NjAyKSAqLwotI2RlZmluZSBGSVhfMV81MDEzMjExMTAgICgoSU5UMzIpICAxMjI5OSkJLyogRklYKDEuNTAxMzIxMTEwKSAqLwotI2RlZmluZSBGSVhfMV84NDc3NTkwNjUgICgoSU5UMzIpICAxNTEzNykJLyogRklYKDEuODQ3NzU5MDY1KSAqLwotI2RlZmluZSBGSVhfMV85NjE1NzA1NjAgICgoSU5UMzIpICAxNjA2OSkJLyogRklYKDEuOTYxNTcwNTYwKSAqLwotI2RlZmluZSBGSVhfMl8wNTMxMTk4NjkgICgoSU5UMzIpICAxNjgxOSkJLyogRklYKDIuMDUzMTE5ODY5KSAqLwotI2RlZmluZSBGSVhfMl81NjI5MTU0NDcgICgoSU5UMzIpICAyMDk5NSkJLyogRklYKDIuNTYyOTE1NDQ3KSAqLwotI2RlZmluZSBGSVhfM18wNzI3MTEwMjYgICgoSU5UMzIpICAyNTE3MikJLyogRklYKDMuMDcyNzExMDI2KSAqLworI2RlZmluZSBGSVhfMF8yOTg2MzEzMzYgICgoSU5UMzIpICAyNDQ2KSAgICAgICAgLyogRklYKDAuMjk4NjMxMzM2KSAqLworI2RlZmluZSBGSVhfMF8zOTAxODA2NDQgICgoSU5UMzIpICAzMTk2KSAgICAgICAgLyogRklYKDAuMzkwMTgwNjQ0KSAqLworI2RlZmluZSBGSVhfMF81NDExOTYxMDAgICgoSU5UMzIpICA0NDMzKSAgICAgICAgLyogRklYKDAuNTQxMTk2MTAwKSAqLworI2RlZmluZSBGSVhfMF83NjUzNjY4NjUgICgoSU5UMzIpICA2MjcwKSAgICAgICAgLyogRklYKDAuNzY1MzY2ODY1KSAqLworI2RlZmluZSBGSVhfMF84OTk5NzYyMjMgICgoSU5UMzIpICA3MzczKSAgICAgICAgLyogRklYKDAuODk5OTc2MjIzKSAqLworI2RlZmluZSBGSVhfMV8xNzU4NzU2MDIgICgoSU5UMzIpICA5NjMzKSAgICAgICAgLyogRklYKDEuMTc1ODc1NjAyKSAqLworI2RlZmluZSBGSVhfMV81MDEzMjExMTAgICgoSU5UMzIpICAxMjI5OSkgICAgICAgLyogRklYKDEuNTAxMzIxMTEwKSAqLworI2RlZmluZSBGSVhfMV84NDc3NTkwNjUgICgoSU5UMzIpICAxNTEzNykgICAgICAgLyogRklYKDEuODQ3NzU5MDY1KSAqLworI2RlZmluZSBGSVhfMV85NjE1NzA1NjAgICgoSU5UMzIpICAxNjA2OSkgICAgICAgLyogRklYKDEuOTYxNTcwNTYwKSAqLworI2RlZmluZSBGSVhfMl8wNTMxMTk4NjkgICgoSU5UMzIpICAxNjgxOSkgICAgICAgLyogRklYKDIuMDUzMTE5ODY5KSAqLworI2RlZmluZSBGSVhfMl81NjI5MTU0NDcgICgoSU5UMzIpICAyMDk5NSkgICAgICAgLyogRklYKDIuNTYyOTE1NDQ3KSAqLworI2RlZmluZSBGSVhfM18wNzI3MTEwMjYgICgoSU5UMzIpICAyNTE3MikgICAgICAgLyogRklYKDMuMDcyNzExMDI2KSAqLwogI2Vsc2UKICNkZWZpbmUgRklYXzBfMjk4NjMxMzM2ICBGSVgoMC4yOTg2MzEzMzYpCiAjZGVmaW5lIEZJWF8wXzM5MDE4MDY0NCAgRklYKDAuMzkwMTgwNjQ0KQpAQCAtMTQ2LDggKzE2OCw4IEBACiAKIEdMT0JBTCh2b2lkKQoganBlZ19pZGN0X2lzbG93IChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKLQkJIEpDT0VGUFRSIGNvZWZfYmxvY2ssCi0JCSBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKKyAgICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywKKyAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpCiB7CiAgIElOVDMyIHRtcDAsIHRtcDEsIHRtcDIsIHRtcDM7CiAgIElOVDMyIHRtcDEwLCB0bXAxMSwgdG1wMTIsIHRtcDEzOwpAQCAtMTU4LDcgKzE4MCw3IEBACiAgIEpTQU1QUk9XIG91dHB0cjsKICAgSlNBTVBMRSAqcmFuZ2VfbGltaXQgPSBJRENUX3JhbmdlX2xpbWl0KGNpbmZvKTsKICAgaW50IGN0cjsKLSAgaW50IHdvcmtzcGFjZVtEQ1RTSVpFMl07CS8qIGJ1ZmZlcnMgZGF0YSBiZXR3ZWVuIHBhc3NlcyAqLworICBpbnQgd29ya3NwYWNlW0RDVFNJWkUyXTsgICAgICAvKiBidWZmZXJzIGRhdGEgYmV0d2VlbiBwYXNzZXMgKi8KICAgU0hJRlRfVEVNUFMKIAogICAvKiBQYXNzIDE6IHByb2Nlc3MgY29sdW1ucyBmcm9tIGlucHV0LCBzdG9yZSBpbnRvIHdvcmsgYXJyYXkuICovCkBAIC0xNzcsMTQgKzE5OSwxNCBAQAogICAgICAqIFdpdGggdHlwaWNhbCBpbWFnZXMgYW5kIHF1YW50aXphdGlvbiB0YWJsZXMsIGhhbGYgb3IgbW9yZSBvZiB0aGUKICAgICAgKiBjb2x1bW4gRENUIGNhbGN1bGF0aW9ucyBjYW4gYmUgc2ltcGxpZmllZCB0aGlzIHdheS4KICAgICAgKi8KLSAgICAKKwogICAgIGlmIChpbnB0cltEQ1RTSVpFKjFdID09IDAgJiYgaW5wdHJbRENUU0laRSoyXSA9PSAwICYmCi0JaW5wdHJbRENUU0laRSozXSA9PSAwICYmIGlucHRyW0RDVFNJWkUqNF0gPT0gMCAmJgotCWlucHRyW0RDVFNJWkUqNV0gPT0gMCAmJiBpbnB0cltEQ1RTSVpFKjZdID09IDAgJiYKLQlpbnB0cltEQ1RTSVpFKjddID09IDApIHsKKyAgICAgICAgaW5wdHJbRENUU0laRSozXSA9PSAwICYmIGlucHRyW0RDVFNJWkUqNF0gPT0gMCAmJgorICAgICAgICBpbnB0cltEQ1RTSVpFKjVdID09IDAgJiYgaW5wdHJbRENUU0laRSo2XSA9PSAwICYmCisgICAgICAgIGlucHRyW0RDVFNJWkUqN10gPT0gMCkgewogICAgICAgLyogQUMgdGVybXMgYWxsIHplcm8gKi8KICAgICAgIGludCBkY3ZhbCA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSowXSwgcXVhbnRwdHJbRENUU0laRSowXSkgPDwgUEFTUzFfQklUUzsKLSAgICAgIAorCiAgICAgICB3c3B0cltEQ1RTSVpFKjBdID0gZGN2YWw7CiAgICAgICB3c3B0cltEQ1RTSVpFKjFdID0gZGN2YWw7CiAgICAgICB3c3B0cltEQ1RTSVpFKjJdID0gZGN2YWw7CkBAIC0xOTMsNDkgKzIxNSw0OSBAQAogICAgICAgd3NwdHJbRENUU0laRSo1XSA9IGRjdmFsOwogICAgICAgd3NwdHJbRENUU0laRSo2XSA9IGRjdmFsOwogICAgICAgd3NwdHJbRENUU0laRSo3XSA9IGRjdmFsOwotICAgICAgCi0gICAgICBpbnB0cisrOwkJCS8qIGFkdmFuY2UgcG9pbnRlcnMgdG8gbmV4dCBjb2x1bW4gKi8KKworICAgICAgaW5wdHIrKzsgICAgICAgICAgICAgICAgICAvKiBhZHZhbmNlIHBvaW50ZXJzIHRvIG5leHQgY29sdW1uICovCiAgICAgICBxdWFudHB0cisrOwogICAgICAgd3NwdHIrKzsKICAgICAgIGNvbnRpbnVlOwogICAgIH0KLSAgICAKKwogICAgIC8qIEV2ZW4gcGFydDogcmV2ZXJzZSB0aGUgZXZlbiBwYXJ0IG9mIHRoZSBmb3J3YXJkIERDVC4gKi8KICAgICAvKiBUaGUgcm90YXRvciBpcyBzcXJ0KDIpKmMoLTYpLiAqLwotICAgIAorCiAgICAgejIgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMl0sIHF1YW50cHRyW0RDVFNJWkUqMl0pOwogICAgIHozID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjZdLCBxdWFudHB0cltEQ1RTSVpFKjZdKTsKLSAgICAKKwogICAgIHoxID0gTVVMVElQTFkoejIgKyB6MywgRklYXzBfNTQxMTk2MTAwKTsKICAgICB0bXAyID0gejEgKyBNVUxUSVBMWSh6MywgLSBGSVhfMV84NDc3NTkwNjUpOwogICAgIHRtcDMgPSB6MSArIE1VTFRJUExZKHoyLCBGSVhfMF83NjUzNjY4NjUpOwotICAgIAorCiAgICAgejIgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMF0sIHF1YW50cHRyW0RDVFNJWkUqMF0pOwogICAgIHozID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjRdLCBxdWFudHB0cltEQ1RTSVpFKjRdKTsKIAogICAgIHRtcDAgPSAoejIgKyB6MykgPDwgQ09OU1RfQklUUzsKICAgICB0bXAxID0gKHoyIC0gejMpIDw8IENPTlNUX0JJVFM7Ci0gICAgCisKICAgICB0bXAxMCA9IHRtcDAgKyB0bXAzOwogICAgIHRtcDEzID0gdG1wMCAtIHRtcDM7CiAgICAgdG1wMTEgPSB0bXAxICsgdG1wMjsKICAgICB0bXAxMiA9IHRtcDEgLSB0bXAyOwotICAgIAorCiAgICAgLyogT2RkIHBhcnQgcGVyIGZpZ3VyZSA4OyB0aGUgbWF0cml4IGlzIHVuaXRhcnkgYW5kIGhlbmNlIGl0cwogICAgICAqIHRyYW5zcG9zZSBpcyBpdHMgaW52ZXJzZS4gIGkwLi5pMyBhcmUgeTcseTUseTMseTEgcmVzcGVjdGl2ZWx5LgogICAgICAqLwotICAgIAorCiAgICAgdG1wMCA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo3XSwgcXVhbnRwdHJbRENUU0laRSo3XSk7CiAgICAgdG1wMSA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo1XSwgcXVhbnRwdHJbRENUU0laRSo1XSk7CiAgICAgdG1wMiA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSozXSwgcXVhbnRwdHJbRENUU0laRSozXSk7CiAgICAgdG1wMyA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSoxXSwgcXVhbnRwdHJbRENUU0laRSoxXSk7Ci0gICAgCisKICAgICB6MSA9IHRtcDAgKyB0bXAzOwogICAgIHoyID0gdG1wMSArIHRtcDI7CiAgICAgejMgPSB0bXAwICsgdG1wMjsKICAgICB6NCA9IHRtcDEgKyB0bXAzOwogICAgIHo1ID0gTVVMVElQTFkoejMgKyB6NCwgRklYXzFfMTc1ODc1NjAyKTsgLyogc3FydCgyKSAqIGMzICovCi0gICAgCisKICAgICB0bXAwID0gTVVMVElQTFkodG1wMCwgRklYXzBfMjk4NjMxMzM2KTsgLyogc3FydCgyKSAqICgtYzErYzMrYzUtYzcpICovCiAgICAgdG1wMSA9IE1VTFRJUExZKHRtcDEsIEZJWF8yXzA1MzExOTg2OSk7IC8qIHNxcnQoMikgKiAoIGMxK2MzLWM1K2M3KSAqLwogICAgIHRtcDIgPSBNVUxUSVBMWSh0bXAyLCBGSVhfM18wNzI3MTEwMjYpOyAvKiBzcXJ0KDIpICogKCBjMStjMytjNS1jNykgKi8KQEAgLTI0NCwxNyArMjY2LDE3IEBACiAgICAgejIgPSBNVUxUSVBMWSh6MiwgLSBGSVhfMl81NjI5MTU0NDcpOyAvKiBzcXJ0KDIpICogKC1jMS1jMykgKi8KICAgICB6MyA9IE1VTFRJUExZKHozLCAtIEZJWF8xXzk2MTU3MDU2MCk7IC8qIHNxcnQoMikgKiAoLWMzLWM1KSAqLwogICAgIHo0ID0gTVVMVElQTFkoejQsIC0gRklYXzBfMzkwMTgwNjQ0KTsgLyogc3FydCgyKSAqIChjNS1jMykgKi8KLSAgICAKKwogICAgIHozICs9IHo1OwogICAgIHo0ICs9IHo1OwotICAgIAorCiAgICAgdG1wMCArPSB6MSArIHozOwogICAgIHRtcDEgKz0gejIgKyB6NDsKICAgICB0bXAyICs9IHoyICsgejM7CiAgICAgdG1wMyArPSB6MSArIHo0OwotICAgIAorCiAgICAgLyogRmluYWwgb3V0cHV0IHN0YWdlOiBpbnB1dHMgYXJlIHRtcDEwLi50bXAxMywgdG1wMC4udG1wMyAqLwotICAgIAorCiAgICAgd3NwdHJbRENUU0laRSowXSA9IChpbnQpIERFU0NBTEUodG1wMTAgKyB0bXAzLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwogICAgIHdzcHRyW0RDVFNJWkUqN10gPSAoaW50KSBERVNDQUxFKHRtcDEwIC0gdG1wMywgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKICAgICB3c3B0cltEQ1RTSVpFKjFdID0gKGludCkgREVTQ0FMRSh0bXAxMSArIHRtcDIsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7CkBAIC0yNjMsMTIgKzI4NSwxMiBAQAogICAgIHdzcHRyW0RDVFNJWkUqNV0gPSAoaW50KSBERVNDQUxFKHRtcDEyIC0gdG1wMSwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKICAgICB3c3B0cltEQ1RTSVpFKjNdID0gKGludCkgREVTQ0FMRSh0bXAxMyArIHRtcDAsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7CiAgICAgd3NwdHJbRENUU0laRSo0XSA9IChpbnQpIERFU0NBTEUodG1wMTMgLSB0bXAwLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIAotICAgIGlucHRyKys7CQkJLyogYWR2YW5jZSBwb2ludGVycyB0byBuZXh0IGNvbHVtbiAqLworCisgICAgaW5wdHIrKzsgICAgICAgICAgICAgICAgICAgIC8qIGFkdmFuY2UgcG9pbnRlcnMgdG8gbmV4dCBjb2x1bW4gKi8KICAgICBxdWFudHB0cisrOwogICAgIHdzcHRyKys7CiAgIH0KLSAgCisKICAgLyogUGFzcyAyOiBwcm9jZXNzIHJvd3MgZnJvbSB3b3JrIGFycmF5LCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4gKi8KICAgLyogTm90ZSB0aGF0IHdlIG11c3QgZGVzY2FsZSB0aGUgcmVzdWx0cyBieSBhIGZhY3RvciBvZiA4ID09IDIqKjMsICovCiAgIC8qIGFuZCBhbHNvIHVuZG8gdGhlIFBBU1MxX0JJVFMgc2NhbGluZy4gKi8KQEAgLTI4MywxNCArMzA1LDE0IEBACiAgICAgICogdGVzdCB0YWtlcyBtb3JlIHRpbWUgdGhhbiBpdCdzIHdvcnRoLiAgSW4gdGhhdCBjYXNlIHRoaXMgc2VjdGlvbgogICAgICAqIG1heSBiZSBjb21tZW50ZWQgb3V0LgogICAgICAqLwotICAgIAorCiAjaWZuZGVmIE5PX1pFUk9fUk9XX1RFU1QKICAgICBpZiAod3NwdHJbMV0gPT0gMCAmJiB3c3B0clsyXSA9PSAwICYmIHdzcHRyWzNdID09IDAgJiYgd3NwdHJbNF0gPT0gMCAmJgotCXdzcHRyWzVdID09IDAgJiYgd3NwdHJbNl0gPT0gMCAmJiB3c3B0cls3XSA9PSAwKSB7CisgICAgICAgIHdzcHRyWzVdID09IDAgJiYgd3NwdHJbNl0gPT0gMCAmJiB3c3B0cls3XSA9PSAwKSB7CiAgICAgICAvKiBBQyB0ZXJtcyBhbGwgemVybyAqLwogICAgICAgSlNBTVBMRSBkY3ZhbCA9IHJhbmdlX2xpbWl0WyhpbnQpIERFU0NBTEUoKElOVDMyKSB3c3B0clswXSwgUEFTUzFfQklUUyszKQotCQkJCSAgJiBSQU5HRV9NQVNLXTsKLSAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CisKICAgICAgIG91dHB0clswXSA9IGRjdmFsOwogICAgICAgb3V0cHRyWzFdID0gZGN2YWw7CiAgICAgICBvdXRwdHJbMl0gPSBkY3ZhbDsKQEAgLTMwMCw0NCArMzIyLDQ0IEBACiAgICAgICBvdXRwdHJbNl0gPSBkY3ZhbDsKICAgICAgIG91dHB0cls3XSA9IGRjdmFsOwogCi0gICAgICB3c3B0ciArPSBEQ1RTSVpFOwkJLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgcm93ICovCisgICAgICB3c3B0ciArPSBEQ1RTSVpFOyAgICAgICAgIC8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLwogICAgICAgY29udGludWU7CiAgICAgfQogI2VuZGlmCi0gICAgCisKICAgICAvKiBFdmVuIHBhcnQ6IHJldmVyc2UgdGhlIGV2ZW4gcGFydCBvZiB0aGUgZm9yd2FyZCBEQ1QuICovCiAgICAgLyogVGhlIHJvdGF0b3IgaXMgc3FydCgyKSpjKC02KS4gKi8KLSAgICAKKwogICAgIHoyID0gKElOVDMyKSB3c3B0clsyXTsKICAgICB6MyA9IChJTlQzMikgd3NwdHJbNl07Ci0gICAgCisKICAgICB6MSA9IE1VTFRJUExZKHoyICsgejMsIEZJWF8wXzU0MTE5NjEwMCk7CiAgICAgdG1wMiA9IHoxICsgTVVMVElQTFkoejMsIC0gRklYXzFfODQ3NzU5MDY1KTsKICAgICB0bXAzID0gejEgKyBNVUxUSVBMWSh6MiwgRklYXzBfNzY1MzY2ODY1KTsKLSAgICAKKwogICAgIHRtcDAgPSAoKElOVDMyKSB3c3B0clswXSArIChJTlQzMikgd3NwdHJbNF0pIDw8IENPTlNUX0JJVFM7CiAgICAgdG1wMSA9ICgoSU5UMzIpIHdzcHRyWzBdIC0gKElOVDMyKSB3c3B0cls0XSkgPDwgQ09OU1RfQklUUzsKLSAgICAKKwogICAgIHRtcDEwID0gdG1wMCArIHRtcDM7CiAgICAgdG1wMTMgPSB0bXAwIC0gdG1wMzsKICAgICB0bXAxMSA9IHRtcDEgKyB0bXAyOwogICAgIHRtcDEyID0gdG1wMSAtIHRtcDI7Ci0gICAgCisKICAgICAvKiBPZGQgcGFydCBwZXIgZmlndXJlIDg7IHRoZSBtYXRyaXggaXMgdW5pdGFyeSBhbmQgaGVuY2UgaXRzCiAgICAgICogdHJhbnNwb3NlIGlzIGl0cyBpbnZlcnNlLiAgaTAuLmkzIGFyZSB5Nyx5NSx5Myx5MSByZXNwZWN0aXZlbHkuCiAgICAgICovCi0gICAgCisKICAgICB0bXAwID0gKElOVDMyKSB3c3B0cls3XTsKICAgICB0bXAxID0gKElOVDMyKSB3c3B0cls1XTsKICAgICB0bXAyID0gKElOVDMyKSB3c3B0clszXTsKICAgICB0bXAzID0gKElOVDMyKSB3c3B0clsxXTsKLSAgICAKKwogICAgIHoxID0gdG1wMCArIHRtcDM7CiAgICAgejIgPSB0bXAxICsgdG1wMjsKICAgICB6MyA9IHRtcDAgKyB0bXAyOwogICAgIHo0ID0gdG1wMSArIHRtcDM7CiAgICAgejUgPSBNVUxUSVBMWSh6MyArIHo0LCBGSVhfMV8xNzU4NzU2MDIpOyAvKiBzcXJ0KDIpICogYzMgKi8KLSAgICAKKwogICAgIHRtcDAgPSBNVUxUSVBMWSh0bXAwLCBGSVhfMF8yOTg2MzEzMzYpOyAvKiBzcXJ0KDIpICogKC1jMStjMytjNS1jNykgKi8KICAgICB0bXAxID0gTVVMVElQTFkodG1wMSwgRklYXzJfMDUzMTE5ODY5KTsgLyogc3FydCgyKSAqICggYzErYzMtYzUrYzcpICovCiAgICAgdG1wMiA9IE1VTFRJUExZKHRtcDIsIEZJWF8zXzA3MjcxMTAyNik7IC8qIHNxcnQoMikgKiAoIGMxK2MzK2M1LWM3KSAqLwpAQCAtMzQ2LDQ0ICszNjgsMjI1NiBAQAogICAgIHoyID0gTVVMVElQTFkoejIsIC0gRklYXzJfNTYyOTE1NDQ3KTsgLyogc3FydCgyKSAqICgtYzEtYzMpICovCiAgICAgejMgPSBNVUxUSVBMWSh6MywgLSBGSVhfMV85NjE1NzA1NjApOyAvKiBzcXJ0KDIpICogKC1jMy1jNSkgKi8KICAgICB6NCA9IE1VTFRJUExZKHo0LCAtIEZJWF8wXzM5MDE4MDY0NCk7IC8qIHNxcnQoMikgKiAoYzUtYzMpICovCi0gICAgCisKICAgICB6MyArPSB6NTsKICAgICB6NCArPSB6NTsKLSAgICAKKwogICAgIHRtcDAgKz0gejEgKyB6MzsKICAgICB0bXAxICs9IHoyICsgejQ7CiAgICAgdG1wMiArPSB6MiArIHozOwogICAgIHRtcDMgKz0gejEgKyB6NDsKLSAgICAKKwogICAgIC8qIEZpbmFsIG91dHB1dCBzdGFnZTogaW5wdXRzIGFyZSB0bXAxMC4udG1wMTMsIHRtcDAuLnRtcDMgKi8KLSAgICAKKwogICAgIG91dHB0clswXSA9IHJhbmdlX2xpbWl0WyhpbnQpIERFU0NBTEUodG1wMTAgKyB0bXAzLAotCQkJCQkgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICYgUkFOR0VfTUFTS107CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOwogICAgIG91dHB0cls3XSA9IHJhbmdlX2xpbWl0WyhpbnQpIERFU0NBTEUodG1wMTAgLSB0bXAzLAotCQkJCQkgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICYgUkFOR0VfTUFTS107CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOwogICAgIG91dHB0clsxXSA9IHJhbmdlX2xpbWl0WyhpbnQpIERFU0NBTEUodG1wMTEgKyB0bXAyLAotCQkJCQkgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICYgUkFOR0VfTUFTS107CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOwogICAgIG91dHB0cls2XSA9IHJhbmdlX2xpbWl0WyhpbnQpIERFU0NBTEUodG1wMTEgLSB0bXAyLAotCQkJCQkgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICYgUkFOR0VfTUFTS107CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOwogICAgIG91dHB0clsyXSA9IHJhbmdlX2xpbWl0WyhpbnQpIERFU0NBTEUodG1wMTIgKyB0bXAxLAotCQkJCQkgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICYgUkFOR0VfTUFTS107CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOwogICAgIG91dHB0cls1XSA9IHJhbmdlX2xpbWl0WyhpbnQpIERFU0NBTEUodG1wMTIgLSB0bXAxLAotCQkJCQkgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICYgUkFOR0VfTUFTS107CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOwogICAgIG91dHB0clszXSA9IHJhbmdlX2xpbWl0WyhpbnQpIERFU0NBTEUodG1wMTMgKyB0bXAwLAotCQkJCQkgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICYgUkFOR0VfTUFTS107CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOwogICAgIG91dHB0cls0XSA9IHJhbmdlX2xpbWl0WyhpbnQpIERFU0NBTEUodG1wMTMgLSB0bXAwLAotCQkJCQkgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICYgUkFOR0VfTUFTS107Ci0gICAgCi0gICAgd3NwdHIgKz0gRENUU0laRTsJCS8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBSQU5HRV9NQVNLXTsKKworICAgIHdzcHRyICs9IERDVFNJWkU7ICAgICAgICAgICAvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCByb3cgKi8KICAgfQogfQogCisjaWZkZWYgSURDVF9TQ0FMSU5HX1NVUFBPUlRFRAorCisKKy8qCisgKiBQZXJmb3JtIGRlcXVhbnRpemF0aW9uIGFuZCBpbnZlcnNlIERDVCBvbiBvbmUgYmxvY2sgb2YgY29lZmZpY2llbnRzLAorICogcHJvZHVjaW5nIGEgN3g3IG91dHB1dCBibG9jay4KKyAqCisgKiBPcHRpbWl6ZWQgYWxnb3JpdGhtIHdpdGggMTIgbXVsdGlwbGljYXRpb25zIGluIHRoZSAxLUQga2VybmVsLgorICogY0sgcmVwcmVzZW50cyBzcXJ0KDIpICogY29zKEsqcGkvMTQpLgorICovCisKK0dMT0JBTCh2b2lkKQoranBlZ19pZGN0Xzd4NyAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCisgICAgICAgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLAorICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpCit7CisgIElOVDMyIHRtcDAsIHRtcDEsIHRtcDIsIHRtcDEwLCB0bXAxMSwgdG1wMTIsIHRtcDEzOworICBJTlQzMiB6MSwgejIsIHozOworICBKQ09FRlBUUiBpbnB0cjsKKyAgSVNMT1dfTVVMVF9UWVBFICogcXVhbnRwdHI7CisgIGludCAqIHdzcHRyOworICBKU0FNUFJPVyBvdXRwdHI7CisgIEpTQU1QTEUgKnJhbmdlX2xpbWl0ID0gSURDVF9yYW5nZV9saW1pdChjaW5mbyk7CisgIGludCBjdHI7CisgIGludCB3b3Jrc3BhY2VbNyo3XTsgICAvKiBidWZmZXJzIGRhdGEgYmV0d2VlbiBwYXNzZXMgKi8KKyAgU0hJRlRfVEVNUFMKKworICAvKiBQYXNzIDE6IHByb2Nlc3MgY29sdW1ucyBmcm9tIGlucHV0LCBzdG9yZSBpbnRvIHdvcmsgYXJyYXkuICovCisKKyAgaW5wdHIgPSBjb2VmX2Jsb2NrOworICBxdWFudHB0ciA9IChJU0xPV19NVUxUX1RZUEUgKikgY29tcHB0ci0+ZGN0X3RhYmxlOworICB3c3B0ciA9IHdvcmtzcGFjZTsKKyAgZm9yIChjdHIgPSAwOyBjdHIgPCA3OyBjdHIrKywgaW5wdHIrKywgcXVhbnRwdHIrKywgd3NwdHIrKykgeworICAgIC8qIEV2ZW4gcGFydCAqLworCisgICAgdG1wMTMgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMF0sIHF1YW50cHRyW0RDVFNJWkUqMF0pOworICAgIHRtcDEzIDw8PSBDT05TVF9CSVRTOworICAgIC8qIEFkZCBmdWRnZSBmYWN0b3IgaGVyZSBmb3IgZmluYWwgZGVzY2FsZS4gKi8KKyAgICB0bXAxMyArPSBPTkUgPDwgKENPTlNUX0JJVFMtUEFTUzFfQklUUy0xKTsKKworICAgIHoxID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjJdLCBxdWFudHB0cltEQ1RTSVpFKjJdKTsKKyAgICB6MiA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo0XSwgcXVhbnRwdHJbRENUU0laRSo0XSk7CisgICAgejMgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqNl0sIHF1YW50cHRyW0RDVFNJWkUqNl0pOworCisgICAgdG1wMTAgPSBNVUxUSVBMWSh6MiAtIHozLCBGSVgoMC44ODE3NDc3MzQpKTsgICAgIC8qIGM0ICovCisgICAgdG1wMTIgPSBNVUxUSVBMWSh6MSAtIHoyLCBGSVgoMC4zMTQ2OTIxMjMpKTsgICAgIC8qIGM2ICovCisgICAgdG1wMTEgPSB0bXAxMCArIHRtcDEyICsgdG1wMTMgLSBNVUxUSVBMWSh6MiwgRklYKDEuODQxMjE4MDAzKSk7IC8qIGMyK2M0LWM2ICovCisgICAgdG1wMCA9IHoxICsgejM7CisgICAgejIgLT0gdG1wMDsKKyAgICB0bXAwID0gTVVMVElQTFkodG1wMCwgRklYKDEuMjc0MTYyMzkyKSkgKyB0bXAxMzsgLyogYzIgKi8KKyAgICB0bXAxMCArPSB0bXAwIC0gTVVMVElQTFkoejMsIEZJWCgwLjA3NzcyMjUzNikpOyAgLyogYzItYzQtYzYgKi8KKyAgICB0bXAxMiArPSB0bXAwIC0gTVVMVElQTFkoejEsIEZJWCgyLjQ3MDYwMjI0OSkpOyAgLyogYzIrYzQrYzYgKi8KKyAgICB0bXAxMyArPSBNVUxUSVBMWSh6MiwgRklYKDEuNDE0MjEzNTYyKSk7ICAgICAgICAgLyogYzAgKi8KKworICAgIC8qIE9kZCBwYXJ0ICovCisKKyAgICB6MSA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSoxXSwgcXVhbnRwdHJbRENUU0laRSoxXSk7CisgICAgejIgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqM10sIHF1YW50cHRyW0RDVFNJWkUqM10pOworICAgIHozID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjVdLCBxdWFudHB0cltEQ1RTSVpFKjVdKTsKKworICAgIHRtcDEgPSBNVUxUSVBMWSh6MSArIHoyLCBGSVgoMC45MzU0MTQzNDcpKTsgICAgICAvKiAoYzMrYzEtYzUpLzIgKi8KKyAgICB0bXAyID0gTVVMVElQTFkoejEgLSB6MiwgRklYKDAuMTcwMjYyMzM5KSk7ICAgICAgLyogKGMzK2M1LWMxKS8yICovCisgICAgdG1wMCA9IHRtcDEgLSB0bXAyOworICAgIHRtcDEgKz0gdG1wMjsKKyAgICB0bXAyID0gTVVMVElQTFkoejIgKyB6MywgLSBGSVgoMS4zNzg3NTYyNzYpKTsgICAgLyogLWMxICovCisgICAgdG1wMSArPSB0bXAyOworICAgIHoyID0gTVVMVElQTFkoejEgKyB6MywgRklYKDAuNjEzNjA0MjY4KSk7ICAgICAgICAvKiBjNSAqLworICAgIHRtcDAgKz0gejI7CisgICAgdG1wMiArPSB6MiArIE1VTFRJUExZKHozLCBGSVgoMS44NzA4Mjg2OTMpKTsgICAgIC8qIGMzK2MxLWM1ICovCisKKyAgICAvKiBGaW5hbCBvdXRwdXQgc3RhZ2UgKi8KKworICAgIHdzcHRyWzcqMF0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAxMCArIHRtcDAsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7CisgICAgd3NwdHJbNyo2XSA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDEwIC0gdG1wMCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgICB3c3B0cls3KjFdID0gKGludCkgUklHSFRfU0hJRlQodG1wMTEgKyB0bXAxLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICAgIHdzcHRyWzcqNV0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAxMSAtIHRtcDEsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7CisgICAgd3NwdHJbNyoyXSA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDEyICsgdG1wMiwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgICB3c3B0cls3KjRdID0gKGludCkgUklHSFRfU0hJRlQodG1wMTIgLSB0bXAyLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICAgIHdzcHRyWzcqM10gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAxMywgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgfQorCisgIC8qIFBhc3MgMjogcHJvY2VzcyA3IHJvd3MgZnJvbSB3b3JrIGFycmF5LCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4gKi8KKworICB3c3B0ciA9IHdvcmtzcGFjZTsKKyAgZm9yIChjdHIgPSAwOyBjdHIgPCA3OyBjdHIrKykgeworICAgIG91dHB0ciA9IG91dHB1dF9idWZbY3RyXSArIG91dHB1dF9jb2w7CisKKyAgICAvKiBFdmVuIHBhcnQgKi8KKworICAgIC8qIEFkZCBmdWRnZSBmYWN0b3IgaGVyZSBmb3IgZmluYWwgZGVzY2FsZS4gKi8KKyAgICB0bXAxMyA9IChJTlQzMikgd3NwdHJbMF0gKyAoT05FIDw8IChQQVNTMV9CSVRTKzIpKTsKKyAgICB0bXAxMyA8PD0gQ09OU1RfQklUUzsKKworICAgIHoxID0gKElOVDMyKSB3c3B0clsyXTsKKyAgICB6MiA9IChJTlQzMikgd3NwdHJbNF07CisgICAgejMgPSAoSU5UMzIpIHdzcHRyWzZdOworCisgICAgdG1wMTAgPSBNVUxUSVBMWSh6MiAtIHozLCBGSVgoMC44ODE3NDc3MzQpKTsgICAgIC8qIGM0ICovCisgICAgdG1wMTIgPSBNVUxUSVBMWSh6MSAtIHoyLCBGSVgoMC4zMTQ2OTIxMjMpKTsgICAgIC8qIGM2ICovCisgICAgdG1wMTEgPSB0bXAxMCArIHRtcDEyICsgdG1wMTMgLSBNVUxUSVBMWSh6MiwgRklYKDEuODQxMjE4MDAzKSk7IC8qIGMyK2M0LWM2ICovCisgICAgdG1wMCA9IHoxICsgejM7CisgICAgejIgLT0gdG1wMDsKKyAgICB0bXAwID0gTVVMVElQTFkodG1wMCwgRklYKDEuMjc0MTYyMzkyKSkgKyB0bXAxMzsgLyogYzIgKi8KKyAgICB0bXAxMCArPSB0bXAwIC0gTVVMVElQTFkoejMsIEZJWCgwLjA3NzcyMjUzNikpOyAgLyogYzItYzQtYzYgKi8KKyAgICB0bXAxMiArPSB0bXAwIC0gTVVMVElQTFkoejEsIEZJWCgyLjQ3MDYwMjI0OSkpOyAgLyogYzIrYzQrYzYgKi8KKyAgICB0bXAxMyArPSBNVUxUSVBMWSh6MiwgRklYKDEuNDE0MjEzNTYyKSk7ICAgICAgICAgLyogYzAgKi8KKworICAgIC8qIE9kZCBwYXJ0ICovCisKKyAgICB6MSA9IChJTlQzMikgd3NwdHJbMV07CisgICAgejIgPSAoSU5UMzIpIHdzcHRyWzNdOworICAgIHozID0gKElOVDMyKSB3c3B0cls1XTsKKworICAgIHRtcDEgPSBNVUxUSVBMWSh6MSArIHoyLCBGSVgoMC45MzU0MTQzNDcpKTsgICAgICAvKiAoYzMrYzEtYzUpLzIgKi8KKyAgICB0bXAyID0gTVVMVElQTFkoejEgLSB6MiwgRklYKDAuMTcwMjYyMzM5KSk7ICAgICAgLyogKGMzK2M1LWMxKS8yICovCisgICAgdG1wMCA9IHRtcDEgLSB0bXAyOworICAgIHRtcDEgKz0gdG1wMjsKKyAgICB0bXAyID0gTVVMVElQTFkoejIgKyB6MywgLSBGSVgoMS4zNzg3NTYyNzYpKTsgICAgLyogLWMxICovCisgICAgdG1wMSArPSB0bXAyOworICAgIHoyID0gTVVMVElQTFkoejEgKyB6MywgRklYKDAuNjEzNjA0MjY4KSk7ICAgICAgICAvKiBjNSAqLworICAgIHRtcDAgKz0gejI7CisgICAgdG1wMiArPSB6MiArIE1VTFRJUExZKHozLCBGSVgoMS44NzA4Mjg2OTMpKTsgICAgIC8qIGMzK2MxLWM1ICovCisKKyAgICAvKiBGaW5hbCBvdXRwdXQgc3RhZ2UgKi8KKworICAgIG91dHB0clswXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDEwICsgdG1wMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOworICAgIG91dHB0cls2XSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDEwIC0gdG1wMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOworICAgIG91dHB0clsxXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDExICsgdG1wMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOworICAgIG91dHB0cls1XSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDExIC0gdG1wMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOworICAgIG91dHB0clsyXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDEyICsgdG1wMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOworICAgIG91dHB0cls0XSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDEyIC0gdG1wMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOworICAgIG91dHB0clszXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDEzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CisKKyAgICB3c3B0ciArPSA3OyAgICAgICAgIC8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLworICB9Cit9CisKKworLyoKKyAqIFBlcmZvcm0gZGVxdWFudGl6YXRpb24gYW5kIGludmVyc2UgRENUIG9uIG9uZSBibG9jayBvZiBjb2VmZmljaWVudHMsCisgKiBwcm9kdWNpbmcgYSByZWR1Y2VkLXNpemUgNng2IG91dHB1dCBibG9jay4KKyAqCisgKiBPcHRpbWl6ZWQgYWxnb3JpdGhtIHdpdGggMyBtdWx0aXBsaWNhdGlvbnMgaW4gdGhlIDEtRCBrZXJuZWwuCisgKiBjSyByZXByZXNlbnRzIHNxcnQoMikgKiBjb3MoSypwaS8xMikuCisgKi8KKworR0xPQkFMKHZvaWQpCitqcGVnX2lkY3RfNng2IChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKyAgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssCisgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKK3sKKyAgSU5UMzIgdG1wMCwgdG1wMSwgdG1wMiwgdG1wMTAsIHRtcDExLCB0bXAxMjsKKyAgSU5UMzIgejEsIHoyLCB6MzsKKyAgSkNPRUZQVFIgaW5wdHI7CisgIElTTE9XX01VTFRfVFlQRSAqIHF1YW50cHRyOworICBpbnQgKiB3c3B0cjsKKyAgSlNBTVBST1cgb3V0cHRyOworICBKU0FNUExFICpyYW5nZV9saW1pdCA9IElEQ1RfcmFuZ2VfbGltaXQoY2luZm8pOworICBpbnQgY3RyOworICBpbnQgd29ya3NwYWNlWzYqNl07ICAgLyogYnVmZmVycyBkYXRhIGJldHdlZW4gcGFzc2VzICovCisgIFNISUZUX1RFTVBTCisKKyAgLyogUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMgZnJvbSBpbnB1dCwgc3RvcmUgaW50byB3b3JrIGFycmF5LiAqLworCisgIGlucHRyID0gY29lZl9ibG9jazsKKyAgcXVhbnRwdHIgPSAoSVNMT1dfTVVMVF9UWVBFICopIGNvbXBwdHItPmRjdF90YWJsZTsKKyAgd3NwdHIgPSB3b3Jrc3BhY2U7CisgIGZvciAoY3RyID0gMDsgY3RyIDwgNjsgY3RyKyssIGlucHRyKyssIHF1YW50cHRyKyssIHdzcHRyKyspIHsKKyAgICAvKiBFdmVuIHBhcnQgKi8KKworICAgIHRtcDAgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMF0sIHF1YW50cHRyW0RDVFNJWkUqMF0pOworICAgIHRtcDAgPDw9IENPTlNUX0JJVFM7CisgICAgLyogQWRkIGZ1ZGdlIGZhY3RvciBoZXJlIGZvciBmaW5hbCBkZXNjYWxlLiAqLworICAgIHRtcDAgKz0gT05FIDw8IChDT05TVF9CSVRTLVBBU1MxX0JJVFMtMSk7CisgICAgdG1wMiA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo0XSwgcXVhbnRwdHJbRENUU0laRSo0XSk7CisgICAgdG1wMTAgPSBNVUxUSVBMWSh0bXAyLCBGSVgoMC43MDcxMDY3ODEpKTsgICAvKiBjNCAqLworICAgIHRtcDEgPSB0bXAwICsgdG1wMTA7CisgICAgdG1wMTEgPSBSSUdIVF9TSElGVCh0bXAwIC0gdG1wMTAgLSB0bXAxMCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgICB0bXAxMCA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSoyXSwgcXVhbnRwdHJbRENUU0laRSoyXSk7CisgICAgdG1wMCA9IE1VTFRJUExZKHRtcDEwLCBGSVgoMS4yMjQ3NDQ4NzEpKTsgICAvKiBjMiAqLworICAgIHRtcDEwID0gdG1wMSArIHRtcDA7CisgICAgdG1wMTIgPSB0bXAxIC0gdG1wMDsKKworICAgIC8qIE9kZCBwYXJ0ICovCisKKyAgICB6MSA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSoxXSwgcXVhbnRwdHJbRENUU0laRSoxXSk7CisgICAgejIgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqM10sIHF1YW50cHRyW0RDVFNJWkUqM10pOworICAgIHozID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjVdLCBxdWFudHB0cltEQ1RTSVpFKjVdKTsKKyAgICB0bXAxID0gTVVMVElQTFkoejEgKyB6MywgRklYKDAuMzY2MDI1NDA0KSk7IC8qIGM1ICovCisgICAgdG1wMCA9IHRtcDEgKyAoKHoxICsgejIpIDw8IENPTlNUX0JJVFMpOworICAgIHRtcDIgPSB0bXAxICsgKCh6MyAtIHoyKSA8PCBDT05TVF9CSVRTKTsKKyAgICB0bXAxID0gKHoxIC0gejIgLSB6MykgPDwgUEFTUzFfQklUUzsKKworICAgIC8qIEZpbmFsIG91dHB1dCBzdGFnZSAqLworCisgICAgd3NwdHJbNiowXSA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDEwICsgdG1wMCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgICB3c3B0cls2KjVdID0gKGludCkgUklHSFRfU0hJRlQodG1wMTAgLSB0bXAwLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICAgIHdzcHRyWzYqMV0gPSAoaW50KSAodG1wMTEgKyB0bXAxKTsKKyAgICB3c3B0cls2KjRdID0gKGludCkgKHRtcDExIC0gdG1wMSk7CisgICAgd3NwdHJbNioyXSA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDEyICsgdG1wMiwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgICB3c3B0cls2KjNdID0gKGludCkgUklHSFRfU0hJRlQodG1wMTIgLSB0bXAyLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICB9CisKKyAgLyogUGFzcyAyOiBwcm9jZXNzIDYgcm93cyBmcm9tIHdvcmsgYXJyYXksIHN0b3JlIGludG8gb3V0cHV0IGFycmF5LiAqLworCisgIHdzcHRyID0gd29ya3NwYWNlOworICBmb3IgKGN0ciA9IDA7IGN0ciA8IDY7IGN0cisrKSB7CisgICAgb3V0cHRyID0gb3V0cHV0X2J1ZltjdHJdICsgb3V0cHV0X2NvbDsKKworICAgIC8qIEV2ZW4gcGFydCAqLworCisgICAgLyogQWRkIGZ1ZGdlIGZhY3RvciBoZXJlIGZvciBmaW5hbCBkZXNjYWxlLiAqLworICAgIHRtcDAgPSAoSU5UMzIpIHdzcHRyWzBdICsgKE9ORSA8PCAoUEFTUzFfQklUUysyKSk7CisgICAgdG1wMCA8PD0gQ09OU1RfQklUUzsKKyAgICB0bXAyID0gKElOVDMyKSB3c3B0cls0XTsKKyAgICB0bXAxMCA9IE1VTFRJUExZKHRtcDIsIEZJWCgwLjcwNzEwNjc4MSkpOyAgIC8qIGM0ICovCisgICAgdG1wMSA9IHRtcDAgKyB0bXAxMDsKKyAgICB0bXAxMSA9IHRtcDAgLSB0bXAxMCAtIHRtcDEwOworICAgIHRtcDEwID0gKElOVDMyKSB3c3B0clsyXTsKKyAgICB0bXAwID0gTVVMVElQTFkodG1wMTAsIEZJWCgxLjIyNDc0NDg3MSkpOyAgIC8qIGMyICovCisgICAgdG1wMTAgPSB0bXAxICsgdG1wMDsKKyAgICB0bXAxMiA9IHRtcDEgLSB0bXAwOworCisgICAgLyogT2RkIHBhcnQgKi8KKworICAgIHoxID0gKElOVDMyKSB3c3B0clsxXTsKKyAgICB6MiA9IChJTlQzMikgd3NwdHJbM107CisgICAgejMgPSAoSU5UMzIpIHdzcHRyWzVdOworICAgIHRtcDEgPSBNVUxUSVBMWSh6MSArIHozLCBGSVgoMC4zNjYwMjU0MDQpKTsgLyogYzUgKi8KKyAgICB0bXAwID0gdG1wMSArICgoejEgKyB6MikgPDwgQ09OU1RfQklUUyk7CisgICAgdG1wMiA9IHRtcDEgKyAoKHozIC0gejIpIDw8IENPTlNUX0JJVFMpOworICAgIHRtcDEgPSAoejEgLSB6MiAtIHozKSA8PCBDT05TVF9CSVRTOworCisgICAgLyogRmluYWwgb3V0cHV0IHN0YWdlICovCisKKyAgICBvdXRwdHJbMF0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAxMCArIHRtcDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbNV0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAxMCAtIHRtcDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbMV0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAxMSArIHRtcDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbNF0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAxMSAtIHRtcDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbMl0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAxMiArIHRtcDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbM10gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAxMiAtIHRtcDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBSQU5HRV9NQVNLXTsKKworICAgIHdzcHRyICs9IDY7ICAgICAgICAgLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgcm93ICovCisgIH0KK30KKworCisvKgorICogUGVyZm9ybSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Qgb24gb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cywKKyAqIHByb2R1Y2luZyBhIHJlZHVjZWQtc2l6ZSA1eDUgb3V0cHV0IGJsb2NrLgorICoKKyAqIE9wdGltaXplZCBhbGdvcml0aG0gd2l0aCA1IG11bHRpcGxpY2F0aW9ucyBpbiB0aGUgMS1EIGtlcm5lbC4KKyAqIGNLIHJlcHJlc2VudHMgc3FydCgyKSAqIGNvcyhLKnBpLzEwKS4KKyAqLworCitHTE9CQUwodm9pZCkKK2pwZWdfaWRjdF81eDUgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAorICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywKKyAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQoreworICBJTlQzMiB0bXAwLCB0bXAxLCB0bXAxMCwgdG1wMTEsIHRtcDEyOworICBJTlQzMiB6MSwgejIsIHozOworICBKQ09FRlBUUiBpbnB0cjsKKyAgSVNMT1dfTVVMVF9UWVBFICogcXVhbnRwdHI7CisgIGludCAqIHdzcHRyOworICBKU0FNUFJPVyBvdXRwdHI7CisgIEpTQU1QTEUgKnJhbmdlX2xpbWl0ID0gSURDVF9yYW5nZV9saW1pdChjaW5mbyk7CisgIGludCBjdHI7CisgIGludCB3b3Jrc3BhY2VbNSo1XTsgICAvKiBidWZmZXJzIGRhdGEgYmV0d2VlbiBwYXNzZXMgKi8KKyAgU0hJRlRfVEVNUFMKKworICAvKiBQYXNzIDE6IHByb2Nlc3MgY29sdW1ucyBmcm9tIGlucHV0LCBzdG9yZSBpbnRvIHdvcmsgYXJyYXkuICovCisKKyAgaW5wdHIgPSBjb2VmX2Jsb2NrOworICBxdWFudHB0ciA9IChJU0xPV19NVUxUX1RZUEUgKikgY29tcHB0ci0+ZGN0X3RhYmxlOworICB3c3B0ciA9IHdvcmtzcGFjZTsKKyAgZm9yIChjdHIgPSAwOyBjdHIgPCA1OyBjdHIrKywgaW5wdHIrKywgcXVhbnRwdHIrKywgd3NwdHIrKykgeworICAgIC8qIEV2ZW4gcGFydCAqLworCisgICAgdG1wMTIgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMF0sIHF1YW50cHRyW0RDVFNJWkUqMF0pOworICAgIHRtcDEyIDw8PSBDT05TVF9CSVRTOworICAgIC8qIEFkZCBmdWRnZSBmYWN0b3IgaGVyZSBmb3IgZmluYWwgZGVzY2FsZS4gKi8KKyAgICB0bXAxMiArPSBPTkUgPDwgKENPTlNUX0JJVFMtUEFTUzFfQklUUy0xKTsKKyAgICB0bXAwID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjJdLCBxdWFudHB0cltEQ1RTSVpFKjJdKTsKKyAgICB0bXAxID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjRdLCBxdWFudHB0cltEQ1RTSVpFKjRdKTsKKyAgICB6MSA9IE1VTFRJUExZKHRtcDAgKyB0bXAxLCBGSVgoMC43OTA1Njk0MTUpKTsgLyogKGMyK2M0KS8yICovCisgICAgejIgPSBNVUxUSVBMWSh0bXAwIC0gdG1wMSwgRklYKDAuMzUzNTUzMzkxKSk7IC8qIChjMi1jNCkvMiAqLworICAgIHozID0gdG1wMTIgKyB6MjsKKyAgICB0bXAxMCA9IHozICsgejE7CisgICAgdG1wMTEgPSB6MyAtIHoxOworICAgIHRtcDEyIC09IHoyIDw8IDI7CisKKyAgICAvKiBPZGQgcGFydCAqLworCisgICAgejIgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMV0sIHF1YW50cHRyW0RDVFNJWkUqMV0pOworICAgIHozID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjNdLCBxdWFudHB0cltEQ1RTSVpFKjNdKTsKKworICAgIHoxID0gTVVMVElQTFkoejIgKyB6MywgRklYKDAuODMxMjUzODc2KSk7ICAgICAvKiBjMyAqLworICAgIHRtcDAgPSB6MSArIE1VTFRJUExZKHoyLCBGSVgoMC41MTM3NDMxNDgpKTsgICAvKiBjMS1jMyAqLworICAgIHRtcDEgPSB6MSAtIE1VTFRJUExZKHozLCBGSVgoMi4xNzYyNTA4OTkpKTsgICAvKiBjMStjMyAqLworCisgICAgLyogRmluYWwgb3V0cHV0IHN0YWdlICovCisKKyAgICB3c3B0cls1KjBdID0gKGludCkgUklHSFRfU0hJRlQodG1wMTAgKyB0bXAwLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICAgIHdzcHRyWzUqNF0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAxMCAtIHRtcDAsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7CisgICAgd3NwdHJbNSoxXSA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDExICsgdG1wMSwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgICB3c3B0cls1KjNdID0gKGludCkgUklHSFRfU0hJRlQodG1wMTEgLSB0bXAxLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICAgIHdzcHRyWzUqMl0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAxMiwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgfQorCisgIC8qIFBhc3MgMjogcHJvY2VzcyA1IHJvd3MgZnJvbSB3b3JrIGFycmF5LCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4gKi8KKworICB3c3B0ciA9IHdvcmtzcGFjZTsKKyAgZm9yIChjdHIgPSAwOyBjdHIgPCA1OyBjdHIrKykgeworICAgIG91dHB0ciA9IG91dHB1dF9idWZbY3RyXSArIG91dHB1dF9jb2w7CisKKyAgICAvKiBFdmVuIHBhcnQgKi8KKworICAgIC8qIEFkZCBmdWRnZSBmYWN0b3IgaGVyZSBmb3IgZmluYWwgZGVzY2FsZS4gKi8KKyAgICB0bXAxMiA9IChJTlQzMikgd3NwdHJbMF0gKyAoT05FIDw8IChQQVNTMV9CSVRTKzIpKTsKKyAgICB0bXAxMiA8PD0gQ09OU1RfQklUUzsKKyAgICB0bXAwID0gKElOVDMyKSB3c3B0clsyXTsKKyAgICB0bXAxID0gKElOVDMyKSB3c3B0cls0XTsKKyAgICB6MSA9IE1VTFRJUExZKHRtcDAgKyB0bXAxLCBGSVgoMC43OTA1Njk0MTUpKTsgLyogKGMyK2M0KS8yICovCisgICAgejIgPSBNVUxUSVBMWSh0bXAwIC0gdG1wMSwgRklYKDAuMzUzNTUzMzkxKSk7IC8qIChjMi1jNCkvMiAqLworICAgIHozID0gdG1wMTIgKyB6MjsKKyAgICB0bXAxMCA9IHozICsgejE7CisgICAgdG1wMTEgPSB6MyAtIHoxOworICAgIHRtcDEyIC09IHoyIDw8IDI7CisKKyAgICAvKiBPZGQgcGFydCAqLworCisgICAgejIgPSAoSU5UMzIpIHdzcHRyWzFdOworICAgIHozID0gKElOVDMyKSB3c3B0clszXTsKKworICAgIHoxID0gTVVMVElQTFkoejIgKyB6MywgRklYKDAuODMxMjUzODc2KSk7ICAgICAvKiBjMyAqLworICAgIHRtcDAgPSB6MSArIE1VTFRJUExZKHoyLCBGSVgoMC41MTM3NDMxNDgpKTsgICAvKiBjMS1jMyAqLworICAgIHRtcDEgPSB6MSAtIE1VTFRJUExZKHozLCBGSVgoMi4xNzYyNTA4OTkpKTsgICAvKiBjMStjMyAqLworCisgICAgLyogRmluYWwgb3V0cHV0IHN0YWdlICovCisKKyAgICBvdXRwdHJbMF0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAxMCArIHRtcDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbNF0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAxMCAtIHRtcDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbMV0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAxMSArIHRtcDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbM10gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAxMSAtIHRtcDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbMl0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOworCisgICAgd3NwdHIgKz0gNTsgICAgICAgICAvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCByb3cgKi8KKyAgfQorfQorCisKKy8qCisgKiBQZXJmb3JtIGRlcXVhbnRpemF0aW9uIGFuZCBpbnZlcnNlIERDVCBvbiBvbmUgYmxvY2sgb2YgY29lZmZpY2llbnRzLAorICogcHJvZHVjaW5nIGEgcmVkdWNlZC1zaXplIDN4MyBvdXRwdXQgYmxvY2suCisgKgorICogT3B0aW1pemVkIGFsZ29yaXRobSB3aXRoIDIgbXVsdGlwbGljYXRpb25zIGluIHRoZSAxLUQga2VybmVsLgorICogY0sgcmVwcmVzZW50cyBzcXJ0KDIpICogY29zKEsqcGkvNikuCisgKi8KKworR0xPQkFMKHZvaWQpCitqcGVnX2lkY3RfM3gzIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKyAgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssCisgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKK3sKKyAgSU5UMzIgdG1wMCwgdG1wMiwgdG1wMTAsIHRtcDEyOworICBKQ09FRlBUUiBpbnB0cjsKKyAgSVNMT1dfTVVMVF9UWVBFICogcXVhbnRwdHI7CisgIGludCAqIHdzcHRyOworICBKU0FNUFJPVyBvdXRwdHI7CisgIEpTQU1QTEUgKnJhbmdlX2xpbWl0ID0gSURDVF9yYW5nZV9saW1pdChjaW5mbyk7CisgIGludCBjdHI7CisgIGludCB3b3Jrc3BhY2VbMyozXTsgICAvKiBidWZmZXJzIGRhdGEgYmV0d2VlbiBwYXNzZXMgKi8KKyAgU0hJRlRfVEVNUFMKKworICAvKiBQYXNzIDE6IHByb2Nlc3MgY29sdW1ucyBmcm9tIGlucHV0LCBzdG9yZSBpbnRvIHdvcmsgYXJyYXkuICovCisKKyAgaW5wdHIgPSBjb2VmX2Jsb2NrOworICBxdWFudHB0ciA9IChJU0xPV19NVUxUX1RZUEUgKikgY29tcHB0ci0+ZGN0X3RhYmxlOworICB3c3B0ciA9IHdvcmtzcGFjZTsKKyAgZm9yIChjdHIgPSAwOyBjdHIgPCAzOyBjdHIrKywgaW5wdHIrKywgcXVhbnRwdHIrKywgd3NwdHIrKykgeworICAgIC8qIEV2ZW4gcGFydCAqLworCisgICAgdG1wMCA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSowXSwgcXVhbnRwdHJbRENUU0laRSowXSk7CisgICAgdG1wMCA8PD0gQ09OU1RfQklUUzsKKyAgICAvKiBBZGQgZnVkZ2UgZmFjdG9yIGhlcmUgZm9yIGZpbmFsIGRlc2NhbGUuICovCisgICAgdG1wMCArPSBPTkUgPDwgKENPTlNUX0JJVFMtUEFTUzFfQklUUy0xKTsKKyAgICB0bXAyID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjJdLCBxdWFudHB0cltEQ1RTSVpFKjJdKTsKKyAgICB0bXAxMiA9IE1VTFRJUExZKHRtcDIsIEZJWCgwLjcwNzEwNjc4MSkpOyAvKiBjMiAqLworICAgIHRtcDEwID0gdG1wMCArIHRtcDEyOworICAgIHRtcDIgPSB0bXAwIC0gdG1wMTIgLSB0bXAxMjsKKworICAgIC8qIE9kZCBwYXJ0ICovCisKKyAgICB0bXAxMiA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSoxXSwgcXVhbnRwdHJbRENUU0laRSoxXSk7CisgICAgdG1wMCA9IE1VTFRJUExZKHRtcDEyLCBGSVgoMS4yMjQ3NDQ4NzEpKTsgLyogYzEgKi8KKworICAgIC8qIEZpbmFsIG91dHB1dCBzdGFnZSAqLworCisgICAgd3NwdHJbMyowXSA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDEwICsgdG1wMCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgICB3c3B0clszKjJdID0gKGludCkgUklHSFRfU0hJRlQodG1wMTAgLSB0bXAwLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICAgIHdzcHRyWzMqMV0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICB9CisKKyAgLyogUGFzcyAyOiBwcm9jZXNzIDMgcm93cyBmcm9tIHdvcmsgYXJyYXksIHN0b3JlIGludG8gb3V0cHV0IGFycmF5LiAqLworCisgIHdzcHRyID0gd29ya3NwYWNlOworICBmb3IgKGN0ciA9IDA7IGN0ciA8IDM7IGN0cisrKSB7CisgICAgb3V0cHRyID0gb3V0cHV0X2J1ZltjdHJdICsgb3V0cHV0X2NvbDsKKworICAgIC8qIEV2ZW4gcGFydCAqLworCisgICAgLyogQWRkIGZ1ZGdlIGZhY3RvciBoZXJlIGZvciBmaW5hbCBkZXNjYWxlLiAqLworICAgIHRtcDAgPSAoSU5UMzIpIHdzcHRyWzBdICsgKE9ORSA8PCAoUEFTUzFfQklUUysyKSk7CisgICAgdG1wMCA8PD0gQ09OU1RfQklUUzsKKyAgICB0bXAyID0gKElOVDMyKSB3c3B0clsyXTsKKyAgICB0bXAxMiA9IE1VTFRJUExZKHRtcDIsIEZJWCgwLjcwNzEwNjc4MSkpOyAvKiBjMiAqLworICAgIHRtcDEwID0gdG1wMCArIHRtcDEyOworICAgIHRtcDIgPSB0bXAwIC0gdG1wMTIgLSB0bXAxMjsKKworICAgIC8qIE9kZCBwYXJ0ICovCisKKyAgICB0bXAxMiA9IChJTlQzMikgd3NwdHJbMV07CisgICAgdG1wMCA9IE1VTFRJUExZKHRtcDEyLCBGSVgoMS4yMjQ3NDQ4NzEpKTsgLyogYzEgKi8KKworICAgIC8qIEZpbmFsIG91dHB1dCBzdGFnZSAqLworCisgICAgb3V0cHRyWzBdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMTAgKyB0bXAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzJdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMTAgLSB0bXAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzFdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOworCisgICAgd3NwdHIgKz0gMzsgICAgICAgICAvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCByb3cgKi8KKyAgfQorfQorCisKKy8qCisgKiBQZXJmb3JtIGRlcXVhbnRpemF0aW9uIGFuZCBpbnZlcnNlIERDVCBvbiBvbmUgYmxvY2sgb2YgY29lZmZpY2llbnRzLAorICogcHJvZHVjaW5nIGEgOXg5IG91dHB1dCBibG9jay4KKyAqCisgKiBPcHRpbWl6ZWQgYWxnb3JpdGhtIHdpdGggMTAgbXVsdGlwbGljYXRpb25zIGluIHRoZSAxLUQga2VybmVsLgorICogY0sgcmVwcmVzZW50cyBzcXJ0KDIpICogY29zKEsqcGkvMTgpLgorICovCisKK0dMT0JBTCh2b2lkKQoranBlZ19pZGN0Xzl4OSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCisgICAgICAgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLAorICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpCit7CisgIElOVDMyIHRtcDAsIHRtcDEsIHRtcDIsIHRtcDMsIHRtcDEwLCB0bXAxMSwgdG1wMTIsIHRtcDEzLCB0bXAxNDsKKyAgSU5UMzIgejEsIHoyLCB6MywgejQ7CisgIEpDT0VGUFRSIGlucHRyOworICBJU0xPV19NVUxUX1RZUEUgKiBxdWFudHB0cjsKKyAgaW50ICogd3NwdHI7CisgIEpTQU1QUk9XIG91dHB0cjsKKyAgSlNBTVBMRSAqcmFuZ2VfbGltaXQgPSBJRENUX3JhbmdlX2xpbWl0KGNpbmZvKTsKKyAgaW50IGN0cjsKKyAgaW50IHdvcmtzcGFjZVs4KjldOyAgIC8qIGJ1ZmZlcnMgZGF0YSBiZXR3ZWVuIHBhc3NlcyAqLworICBTSElGVF9URU1QUworCisgIC8qIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQsIHN0b3JlIGludG8gd29yayBhcnJheS4gKi8KKworICBpbnB0ciA9IGNvZWZfYmxvY2s7CisgIHF1YW50cHRyID0gKElTTE9XX01VTFRfVFlQRSAqKSBjb21wcHRyLT5kY3RfdGFibGU7CisgIHdzcHRyID0gd29ya3NwYWNlOworICBmb3IgKGN0ciA9IDA7IGN0ciA8IDg7IGN0cisrLCBpbnB0cisrLCBxdWFudHB0cisrLCB3c3B0cisrKSB7CisgICAgLyogRXZlbiBwYXJ0ICovCisKKyAgICB0bXAwID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjBdLCBxdWFudHB0cltEQ1RTSVpFKjBdKTsKKyAgICB0bXAwIDw8PSBDT05TVF9CSVRTOworICAgIC8qIEFkZCBmdWRnZSBmYWN0b3IgaGVyZSBmb3IgZmluYWwgZGVzY2FsZS4gKi8KKyAgICB0bXAwICs9IE9ORSA8PCAoQ09OU1RfQklUUy1QQVNTMV9CSVRTLTEpOworCisgICAgejEgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMl0sIHF1YW50cHRyW0RDVFNJWkUqMl0pOworICAgIHoyID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjRdLCBxdWFudHB0cltEQ1RTSVpFKjRdKTsKKyAgICB6MyA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo2XSwgcXVhbnRwdHJbRENUU0laRSo2XSk7CisKKyAgICB0bXAzID0gTVVMVElQTFkoejMsIEZJWCgwLjcwNzEwNjc4MSkpOyAgICAgIC8qIGM2ICovCisgICAgdG1wMSA9IHRtcDAgKyB0bXAzOworICAgIHRtcDIgPSB0bXAwIC0gdG1wMyAtIHRtcDM7CisKKyAgICB0bXAwID0gTVVMVElQTFkoejEgLSB6MiwgRklYKDAuNzA3MTA2NzgxKSk7IC8qIGM2ICovCisgICAgdG1wMTEgPSB0bXAyICsgdG1wMDsKKyAgICB0bXAxNCA9IHRtcDIgLSB0bXAwIC0gdG1wMDsKKworICAgIHRtcDAgPSBNVUxUSVBMWSh6MSArIHoyLCBGSVgoMS4zMjg5MjYwNDkpKTsgLyogYzIgKi8KKyAgICB0bXAyID0gTVVMVElQTFkoejEsIEZJWCgxLjA4MzM1MDQ0MSkpOyAgICAgIC8qIGM0ICovCisgICAgdG1wMyA9IE1VTFRJUExZKHoyLCBGSVgoMC4yNDU1NzU2MDgpKTsgICAgICAvKiBjOCAqLworCisgICAgdG1wMTAgPSB0bXAxICsgdG1wMCAtIHRtcDM7CisgICAgdG1wMTIgPSB0bXAxIC0gdG1wMCArIHRtcDI7CisgICAgdG1wMTMgPSB0bXAxIC0gdG1wMiArIHRtcDM7CisKKyAgICAvKiBPZGQgcGFydCAqLworCisgICAgejEgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMV0sIHF1YW50cHRyW0RDVFNJWkUqMV0pOworICAgIHoyID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjNdLCBxdWFudHB0cltEQ1RTSVpFKjNdKTsKKyAgICB6MyA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo1XSwgcXVhbnRwdHJbRENUU0laRSo1XSk7CisgICAgejQgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqN10sIHF1YW50cHRyW0RDVFNJWkUqN10pOworCisgICAgejIgPSBNVUxUSVBMWSh6MiwgLSBGSVgoMS4yMjQ3NDQ4NzEpKTsgICAgICAgICAgIC8qIC1jMyAqLworCisgICAgdG1wMiA9IE1VTFRJUExZKHoxICsgejMsIEZJWCgwLjkwOTAzODk1NSkpOyAgICAgIC8qIGM1ICovCisgICAgdG1wMyA9IE1VTFRJUExZKHoxICsgejQsIEZJWCgwLjQ4MzY4OTUyNSkpOyAgICAgIC8qIGM3ICovCisgICAgdG1wMCA9IHRtcDIgKyB0bXAzIC0gejI7CisgICAgdG1wMSA9IE1VTFRJUExZKHozIC0gejQsIEZJWCgxLjM5MjcyODQ4MSkpOyAgICAgIC8qIGMxICovCisgICAgdG1wMiArPSB6MiAtIHRtcDE7CisgICAgdG1wMyArPSB6MiArIHRtcDE7CisgICAgdG1wMSA9IE1VTFRJUExZKHoxIC0gejMgLSB6NCwgRklYKDEuMjI0NzQ0ODcxKSk7IC8qIGMzICovCisKKyAgICAvKiBGaW5hbCBvdXRwdXQgc3RhZ2UgKi8KKworICAgIHdzcHRyWzgqMF0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAxMCArIHRtcDAsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCo4XSA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDEwIC0gdG1wMCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4KjFdID0gKGludCkgUklHSFRfU0hJRlQodG1wMTEgKyB0bXAxLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICAgIHdzcHRyWzgqN10gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAxMSAtIHRtcDEsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCoyXSA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDEyICsgdG1wMiwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4KjZdID0gKGludCkgUklHSFRfU0hJRlQodG1wMTIgLSB0bXAyLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICAgIHdzcHRyWzgqM10gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAxMyArIHRtcDMsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCo1XSA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDEzIC0gdG1wMywgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4KjRdID0gKGludCkgUklHSFRfU0hJRlQodG1wMTQsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7CisgIH0KKworICAvKiBQYXNzIDI6IHByb2Nlc3MgOSByb3dzIGZyb20gd29yayBhcnJheSwgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuICovCisKKyAgd3NwdHIgPSB3b3Jrc3BhY2U7CisgIGZvciAoY3RyID0gMDsgY3RyIDwgOTsgY3RyKyspIHsKKyAgICBvdXRwdHIgPSBvdXRwdXRfYnVmW2N0cl0gKyBvdXRwdXRfY29sOworCisgICAgLyogRXZlbiBwYXJ0ICovCisKKyAgICAvKiBBZGQgZnVkZ2UgZmFjdG9yIGhlcmUgZm9yIGZpbmFsIGRlc2NhbGUuICovCisgICAgdG1wMCA9IChJTlQzMikgd3NwdHJbMF0gKyAoT05FIDw8IChQQVNTMV9CSVRTKzIpKTsKKyAgICB0bXAwIDw8PSBDT05TVF9CSVRTOworCisgICAgejEgPSAoSU5UMzIpIHdzcHRyWzJdOworICAgIHoyID0gKElOVDMyKSB3c3B0cls0XTsKKyAgICB6MyA9IChJTlQzMikgd3NwdHJbNl07CisKKyAgICB0bXAzID0gTVVMVElQTFkoejMsIEZJWCgwLjcwNzEwNjc4MSkpOyAgICAgIC8qIGM2ICovCisgICAgdG1wMSA9IHRtcDAgKyB0bXAzOworICAgIHRtcDIgPSB0bXAwIC0gdG1wMyAtIHRtcDM7CisKKyAgICB0bXAwID0gTVVMVElQTFkoejEgLSB6MiwgRklYKDAuNzA3MTA2NzgxKSk7IC8qIGM2ICovCisgICAgdG1wMTEgPSB0bXAyICsgdG1wMDsKKyAgICB0bXAxNCA9IHRtcDIgLSB0bXAwIC0gdG1wMDsKKworICAgIHRtcDAgPSBNVUxUSVBMWSh6MSArIHoyLCBGSVgoMS4zMjg5MjYwNDkpKTsgLyogYzIgKi8KKyAgICB0bXAyID0gTVVMVElQTFkoejEsIEZJWCgxLjA4MzM1MDQ0MSkpOyAgICAgIC8qIGM0ICovCisgICAgdG1wMyA9IE1VTFRJUExZKHoyLCBGSVgoMC4yNDU1NzU2MDgpKTsgICAgICAvKiBjOCAqLworCisgICAgdG1wMTAgPSB0bXAxICsgdG1wMCAtIHRtcDM7CisgICAgdG1wMTIgPSB0bXAxIC0gdG1wMCArIHRtcDI7CisgICAgdG1wMTMgPSB0bXAxIC0gdG1wMiArIHRtcDM7CisKKyAgICAvKiBPZGQgcGFydCAqLworCisgICAgejEgPSAoSU5UMzIpIHdzcHRyWzFdOworICAgIHoyID0gKElOVDMyKSB3c3B0clszXTsKKyAgICB6MyA9IChJTlQzMikgd3NwdHJbNV07CisgICAgejQgPSAoSU5UMzIpIHdzcHRyWzddOworCisgICAgejIgPSBNVUxUSVBMWSh6MiwgLSBGSVgoMS4yMjQ3NDQ4NzEpKTsgICAgICAgICAgIC8qIC1jMyAqLworCisgICAgdG1wMiA9IE1VTFRJUExZKHoxICsgejMsIEZJWCgwLjkwOTAzODk1NSkpOyAgICAgIC8qIGM1ICovCisgICAgdG1wMyA9IE1VTFRJUExZKHoxICsgejQsIEZJWCgwLjQ4MzY4OTUyNSkpOyAgICAgIC8qIGM3ICovCisgICAgdG1wMCA9IHRtcDIgKyB0bXAzIC0gejI7CisgICAgdG1wMSA9IE1VTFRJUExZKHozIC0gejQsIEZJWCgxLjM5MjcyODQ4MSkpOyAgICAgIC8qIGMxICovCisgICAgdG1wMiArPSB6MiAtIHRtcDE7CisgICAgdG1wMyArPSB6MiArIHRtcDE7CisgICAgdG1wMSA9IE1VTFRJUExZKHoxIC0gejMgLSB6NCwgRklYKDEuMjI0NzQ0ODcxKSk7IC8qIGMzICovCisKKyAgICAvKiBGaW5hbCBvdXRwdXQgc3RhZ2UgKi8KKworICAgIG91dHB0clswXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDEwICsgdG1wMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOworICAgIG91dHB0cls4XSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDEwIC0gdG1wMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOworICAgIG91dHB0clsxXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDExICsgdG1wMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOworICAgIG91dHB0cls3XSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDExIC0gdG1wMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOworICAgIG91dHB0clsyXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDEyICsgdG1wMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOworICAgIG91dHB0cls2XSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDEyIC0gdG1wMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOworICAgIG91dHB0clszXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDEzICsgdG1wMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOworICAgIG91dHB0cls1XSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDEzIC0gdG1wMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOworICAgIG91dHB0cls0XSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDE0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CisKKyAgICB3c3B0ciArPSA4OyAgICAgICAgIC8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLworICB9Cit9CisKKworLyoKKyAqIFBlcmZvcm0gZGVxdWFudGl6YXRpb24gYW5kIGludmVyc2UgRENUIG9uIG9uZSBibG9jayBvZiBjb2VmZmljaWVudHMsCisgKiBwcm9kdWNpbmcgYSAxMHgxMCBvdXRwdXQgYmxvY2suCisgKgorICogT3B0aW1pemVkIGFsZ29yaXRobSB3aXRoIDEyIG11bHRpcGxpY2F0aW9ucyBpbiB0aGUgMS1EIGtlcm5lbC4KKyAqIGNLIHJlcHJlc2VudHMgc3FydCgyKSAqIGNvcyhLKnBpLzIwKS4KKyAqLworCitHTE9CQUwodm9pZCkKK2pwZWdfaWRjdF8xMHgxMCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCisgICAgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssCisgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQoreworICBJTlQzMiB0bXAxMCwgdG1wMTEsIHRtcDEyLCB0bXAxMywgdG1wMTQ7CisgIElOVDMyIHRtcDIwLCB0bXAyMSwgdG1wMjIsIHRtcDIzLCB0bXAyNDsKKyAgSU5UMzIgejEsIHoyLCB6MywgejQsIHo1OworICBKQ09FRlBUUiBpbnB0cjsKKyAgSVNMT1dfTVVMVF9UWVBFICogcXVhbnRwdHI7CisgIGludCAqIHdzcHRyOworICBKU0FNUFJPVyBvdXRwdHI7CisgIEpTQU1QTEUgKnJhbmdlX2xpbWl0ID0gSURDVF9yYW5nZV9saW1pdChjaW5mbyk7CisgIGludCBjdHI7CisgIGludCB3b3Jrc3BhY2VbOCoxMF07ICAvKiBidWZmZXJzIGRhdGEgYmV0d2VlbiBwYXNzZXMgKi8KKyAgU0hJRlRfVEVNUFMKKworICAvKiBQYXNzIDE6IHByb2Nlc3MgY29sdW1ucyBmcm9tIGlucHV0LCBzdG9yZSBpbnRvIHdvcmsgYXJyYXkuICovCisKKyAgaW5wdHIgPSBjb2VmX2Jsb2NrOworICBxdWFudHB0ciA9IChJU0xPV19NVUxUX1RZUEUgKikgY29tcHB0ci0+ZGN0X3RhYmxlOworICB3c3B0ciA9IHdvcmtzcGFjZTsKKyAgZm9yIChjdHIgPSAwOyBjdHIgPCA4OyBjdHIrKywgaW5wdHIrKywgcXVhbnRwdHIrKywgd3NwdHIrKykgeworICAgIC8qIEV2ZW4gcGFydCAqLworCisgICAgejMgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMF0sIHF1YW50cHRyW0RDVFNJWkUqMF0pOworICAgIHozIDw8PSBDT05TVF9CSVRTOworICAgIC8qIEFkZCBmdWRnZSBmYWN0b3IgaGVyZSBmb3IgZmluYWwgZGVzY2FsZS4gKi8KKyAgICB6MyArPSBPTkUgPDwgKENPTlNUX0JJVFMtUEFTUzFfQklUUy0xKTsKKyAgICB6NCA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo0XSwgcXVhbnRwdHJbRENUU0laRSo0XSk7CisgICAgejEgPSBNVUxUSVBMWSh6NCwgRklYKDEuMTQ0MTIyODA2KSk7ICAgICAgICAgLyogYzQgKi8KKyAgICB6MiA9IE1VTFRJUExZKHo0LCBGSVgoMC40MzcwMTYwMjQpKTsgICAgICAgICAvKiBjOCAqLworICAgIHRtcDEwID0gejMgKyB6MTsKKyAgICB0bXAxMSA9IHozIC0gejI7CisKKyAgICB0bXAyMiA9IFJJR0hUX1NISUZUKHozIC0gKCh6MSAtIHoyKSA8PCAxKSwgICAvKiBjMCA9IChjNC1jOCkqMiAqLworICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKworICAgIHoyID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjJdLCBxdWFudHB0cltEQ1RTSVpFKjJdKTsKKyAgICB6MyA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo2XSwgcXVhbnRwdHJbRENUU0laRSo2XSk7CisKKyAgICB6MSA9IE1VTFRJUExZKHoyICsgejMsIEZJWCgwLjgzMTI1Mzg3NikpOyAgICAvKiBjNiAqLworICAgIHRtcDEyID0gejEgKyBNVUxUSVBMWSh6MiwgRklYKDAuNTEzNzQzMTQ4KSk7IC8qIGMyLWM2ICovCisgICAgdG1wMTMgPSB6MSAtIE1VTFRJUExZKHozLCBGSVgoMi4xNzYyNTA4OTkpKTsgLyogYzIrYzYgKi8KKworICAgIHRtcDIwID0gdG1wMTAgKyB0bXAxMjsKKyAgICB0bXAyNCA9IHRtcDEwIC0gdG1wMTI7CisgICAgdG1wMjEgPSB0bXAxMSArIHRtcDEzOworICAgIHRtcDIzID0gdG1wMTEgLSB0bXAxMzsKKworICAgIC8qIE9kZCBwYXJ0ICovCisKKyAgICB6MSA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSoxXSwgcXVhbnRwdHJbRENUU0laRSoxXSk7CisgICAgejIgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqM10sIHF1YW50cHRyW0RDVFNJWkUqM10pOworICAgIHozID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjVdLCBxdWFudHB0cltEQ1RTSVpFKjVdKTsKKyAgICB6NCA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo3XSwgcXVhbnRwdHJbRENUU0laRSo3XSk7CisKKyAgICB0bXAxMSA9IHoyICsgejQ7CisgICAgdG1wMTMgPSB6MiAtIHo0OworCisgICAgdG1wMTIgPSBNVUxUSVBMWSh0bXAxMywgRklYKDAuMzA5MDE2OTk0KSk7ICAgICAgICAvKiAoYzMtYzcpLzIgKi8KKyAgICB6NSA9IHozIDw8IENPTlNUX0JJVFM7CisKKyAgICB6MiA9IE1VTFRJUExZKHRtcDExLCBGSVgoMC45NTEwNTY1MTYpKTsgICAgICAgICAgIC8qIChjMytjNykvMiAqLworICAgIHo0ID0gejUgKyB0bXAxMjsKKworICAgIHRtcDEwID0gTVVMVElQTFkoejEsIEZJWCgxLjM5NjgwMjI0NykpICsgejIgKyB6NDsgLyogYzEgKi8KKyAgICB0bXAxNCA9IE1VTFRJUExZKHoxLCBGSVgoMC4yMjEyMzE3NDIpKSAtIHoyICsgejQ7IC8qIGM5ICovCisKKyAgICB6MiA9IE1VTFRJUExZKHRtcDExLCBGSVgoMC41ODc3ODUyNTIpKTsgICAgICAgICAgIC8qIChjMS1jOSkvMiAqLworICAgIHo0ID0gejUgLSB0bXAxMiAtICh0bXAxMyA8PCAoQ09OU1RfQklUUyAtIDEpKTsKKworICAgIHRtcDEyID0gKHoxIC0gdG1wMTMgLSB6MykgPDwgUEFTUzFfQklUUzsKKworICAgIHRtcDExID0gTVVMVElQTFkoejEsIEZJWCgxLjI2MDA3MzUxMSkpIC0gejIgLSB6NDsgLyogYzMgKi8KKyAgICB0bXAxMyA9IE1VTFRJUExZKHoxLCBGSVgoMC42NDIwMzk1MjIpKSAtIHoyICsgejQ7IC8qIGM3ICovCisKKyAgICAvKiBGaW5hbCBvdXRwdXQgc3RhZ2UgKi8KKworICAgIHdzcHRyWzgqMF0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMCArIHRtcDEwLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICAgIHdzcHRyWzgqOV0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMCAtIHRtcDEwLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICAgIHdzcHRyWzgqMV0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMSArIHRtcDExLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICAgIHdzcHRyWzgqOF0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMSAtIHRtcDExLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICAgIHdzcHRyWzgqMl0gPSAoaW50KSAodG1wMjIgKyB0bXAxMik7CisgICAgd3NwdHJbOCo3XSA9IChpbnQpICh0bXAyMiAtIHRtcDEyKTsKKyAgICB3c3B0cls4KjNdID0gKGludCkgUklHSFRfU0hJRlQodG1wMjMgKyB0bXAxMywgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4KjZdID0gKGludCkgUklHSFRfU0hJRlQodG1wMjMgLSB0bXAxMywgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4KjRdID0gKGludCkgUklHSFRfU0hJRlQodG1wMjQgKyB0bXAxNCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4KjVdID0gKGludCkgUklHSFRfU0hJRlQodG1wMjQgLSB0bXAxNCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgfQorCisgIC8qIFBhc3MgMjogcHJvY2VzcyAxMCByb3dzIGZyb20gd29yayBhcnJheSwgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuICovCisKKyAgd3NwdHIgPSB3b3Jrc3BhY2U7CisgIGZvciAoY3RyID0gMDsgY3RyIDwgMTA7IGN0cisrKSB7CisgICAgb3V0cHRyID0gb3V0cHV0X2J1ZltjdHJdICsgb3V0cHV0X2NvbDsKKworICAgIC8qIEV2ZW4gcGFydCAqLworCisgICAgLyogQWRkIGZ1ZGdlIGZhY3RvciBoZXJlIGZvciBmaW5hbCBkZXNjYWxlLiAqLworICAgIHozID0gKElOVDMyKSB3c3B0clswXSArIChPTkUgPDwgKFBBU1MxX0JJVFMrMikpOworICAgIHozIDw8PSBDT05TVF9CSVRTOworICAgIHo0ID0gKElOVDMyKSB3c3B0cls0XTsKKyAgICB6MSA9IE1VTFRJUExZKHo0LCBGSVgoMS4xNDQxMjI4MDYpKTsgICAgICAgICAvKiBjNCAqLworICAgIHoyID0gTVVMVElQTFkoejQsIEZJWCgwLjQzNzAxNjAyNCkpOyAgICAgICAgIC8qIGM4ICovCisgICAgdG1wMTAgPSB6MyArIHoxOworICAgIHRtcDExID0gejMgLSB6MjsKKworICAgIHRtcDIyID0gejMgLSAoKHoxIC0gejIpIDw8IDEpOyAgICAgICAgICAgICAgIC8qIGMwID0gKGM0LWM4KSoyICovCisKKyAgICB6MiA9IChJTlQzMikgd3NwdHJbMl07CisgICAgejMgPSAoSU5UMzIpIHdzcHRyWzZdOworCisgICAgejEgPSBNVUxUSVBMWSh6MiArIHozLCBGSVgoMC44MzEyNTM4NzYpKTsgICAgLyogYzYgKi8KKyAgICB0bXAxMiA9IHoxICsgTVVMVElQTFkoejIsIEZJWCgwLjUxMzc0MzE0OCkpOyAvKiBjMi1jNiAqLworICAgIHRtcDEzID0gejEgLSBNVUxUSVBMWSh6MywgRklYKDIuMTc2MjUwODk5KSk7IC8qIGMyK2M2ICovCisKKyAgICB0bXAyMCA9IHRtcDEwICsgdG1wMTI7CisgICAgdG1wMjQgPSB0bXAxMCAtIHRtcDEyOworICAgIHRtcDIxID0gdG1wMTEgKyB0bXAxMzsKKyAgICB0bXAyMyA9IHRtcDExIC0gdG1wMTM7CisKKyAgICAvKiBPZGQgcGFydCAqLworCisgICAgejEgPSAoSU5UMzIpIHdzcHRyWzFdOworICAgIHoyID0gKElOVDMyKSB3c3B0clszXTsKKyAgICB6MyA9IChJTlQzMikgd3NwdHJbNV07CisgICAgejMgPDw9IENPTlNUX0JJVFM7CisgICAgejQgPSAoSU5UMzIpIHdzcHRyWzddOworCisgICAgdG1wMTEgPSB6MiArIHo0OworICAgIHRtcDEzID0gejIgLSB6NDsKKworICAgIHRtcDEyID0gTVVMVElQTFkodG1wMTMsIEZJWCgwLjMwOTAxNjk5NCkpOyAgICAgICAgLyogKGMzLWM3KS8yICovCisKKyAgICB6MiA9IE1VTFRJUExZKHRtcDExLCBGSVgoMC45NTEwNTY1MTYpKTsgICAgICAgICAgIC8qIChjMytjNykvMiAqLworICAgIHo0ID0gejMgKyB0bXAxMjsKKworICAgIHRtcDEwID0gTVVMVElQTFkoejEsIEZJWCgxLjM5NjgwMjI0NykpICsgejIgKyB6NDsgLyogYzEgKi8KKyAgICB0bXAxNCA9IE1VTFRJUExZKHoxLCBGSVgoMC4yMjEyMzE3NDIpKSAtIHoyICsgejQ7IC8qIGM5ICovCisKKyAgICB6MiA9IE1VTFRJUExZKHRtcDExLCBGSVgoMC41ODc3ODUyNTIpKTsgICAgICAgICAgIC8qIChjMS1jOSkvMiAqLworICAgIHo0ID0gejMgLSB0bXAxMiAtICh0bXAxMyA8PCAoQ09OU1RfQklUUyAtIDEpKTsKKworICAgIHRtcDEyID0gKCh6MSAtIHRtcDEzKSA8PCBDT05TVF9CSVRTKSAtIHozOworCisgICAgdG1wMTEgPSBNVUxUSVBMWSh6MSwgRklYKDEuMjYwMDczNTExKSkgLSB6MiAtIHo0OyAvKiBjMyAqLworICAgIHRtcDEzID0gTVVMVElQTFkoejEsIEZJWCgwLjY0MjAzOTUyMikpIC0gejIgKyB6NDsgLyogYzcgKi8KKworICAgIC8qIEZpbmFsIG91dHB1dCBzdGFnZSAqLworCisgICAgb3V0cHRyWzBdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjAgKyB0bXAxMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOworICAgIG91dHB0cls5XSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIwIC0gdG1wMTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbMV0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyMSArIHRtcDExLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzhdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjEgLSB0bXAxMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOworICAgIG91dHB0clsyXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIyICsgdG1wMTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbN10gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyMiAtIHRtcDEyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzNdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjMgKyB0bXAxMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOworICAgIG91dHB0cls2XSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIzIC0gdG1wMTMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbNF0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyNCArIHRtcDE0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzVdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjQgLSB0bXAxNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOworCisgICAgd3NwdHIgKz0gODsgICAgICAgICAvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCByb3cgKi8KKyAgfQorfQorCisKKy8qCisgKiBQZXJmb3JtIGRlcXVhbnRpemF0aW9uIGFuZCBpbnZlcnNlIERDVCBvbiBvbmUgYmxvY2sgb2YgY29lZmZpY2llbnRzLAorICogcHJvZHVjaW5nIGEgMTF4MTEgb3V0cHV0IGJsb2NrLgorICoKKyAqIE9wdGltaXplZCBhbGdvcml0aG0gd2l0aCAyNCBtdWx0aXBsaWNhdGlvbnMgaW4gdGhlIDEtRCBrZXJuZWwuCisgKiBjSyByZXByZXNlbnRzIHNxcnQoMikgKiBjb3MoSypwaS8yMikuCisgKi8KKworR0xPQkFMKHZvaWQpCitqcGVnX2lkY3RfMTF4MTEgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAorICAgICAgICAgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLAorICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKK3sKKyAgSU5UMzIgdG1wMTAsIHRtcDExLCB0bXAxMiwgdG1wMTMsIHRtcDE0OworICBJTlQzMiB0bXAyMCwgdG1wMjEsIHRtcDIyLCB0bXAyMywgdG1wMjQsIHRtcDI1OworICBJTlQzMiB6MSwgejIsIHozLCB6NDsKKyAgSkNPRUZQVFIgaW5wdHI7CisgIElTTE9XX01VTFRfVFlQRSAqIHF1YW50cHRyOworICBpbnQgKiB3c3B0cjsKKyAgSlNBTVBST1cgb3V0cHRyOworICBKU0FNUExFICpyYW5nZV9saW1pdCA9IElEQ1RfcmFuZ2VfbGltaXQoY2luZm8pOworICBpbnQgY3RyOworICBpbnQgd29ya3NwYWNlWzgqMTFdOyAgLyogYnVmZmVycyBkYXRhIGJldHdlZW4gcGFzc2VzICovCisgIFNISUZUX1RFTVBTCisKKyAgLyogUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMgZnJvbSBpbnB1dCwgc3RvcmUgaW50byB3b3JrIGFycmF5LiAqLworCisgIGlucHRyID0gY29lZl9ibG9jazsKKyAgcXVhbnRwdHIgPSAoSVNMT1dfTVVMVF9UWVBFICopIGNvbXBwdHItPmRjdF90YWJsZTsKKyAgd3NwdHIgPSB3b3Jrc3BhY2U7CisgIGZvciAoY3RyID0gMDsgY3RyIDwgODsgY3RyKyssIGlucHRyKyssIHF1YW50cHRyKyssIHdzcHRyKyspIHsKKyAgICAvKiBFdmVuIHBhcnQgKi8KKworICAgIHRtcDEwID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjBdLCBxdWFudHB0cltEQ1RTSVpFKjBdKTsKKyAgICB0bXAxMCA8PD0gQ09OU1RfQklUUzsKKyAgICAvKiBBZGQgZnVkZ2UgZmFjdG9yIGhlcmUgZm9yIGZpbmFsIGRlc2NhbGUuICovCisgICAgdG1wMTAgKz0gT05FIDw8IChDT05TVF9CSVRTLVBBU1MxX0JJVFMtMSk7CisKKyAgICB6MSA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSoyXSwgcXVhbnRwdHJbRENUU0laRSoyXSk7CisgICAgejIgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqNF0sIHF1YW50cHRyW0RDVFNJWkUqNF0pOworICAgIHozID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjZdLCBxdWFudHB0cltEQ1RTSVpFKjZdKTsKKworICAgIHRtcDIwID0gTVVMVElQTFkoejIgLSB6MywgRklYKDIuNTQ2NjQwMTMyKSk7ICAgICAvKiBjMitjNCAqLworICAgIHRtcDIzID0gTVVMVElQTFkoejIgLSB6MSwgRklYKDAuNDMwODE1MDQ1KSk7ICAgICAvKiBjMi1jNiAqLworICAgIHo0ID0gejEgKyB6MzsKKyAgICB0bXAyNCA9IE1VTFRJUExZKHo0LCAtIEZJWCgxLjE1NTY2NDQwMikpOyAgICAgICAgLyogLShjMi1jMTApICovCisgICAgejQgLT0gejI7CisgICAgdG1wMjUgPSB0bXAxMCArIE1VTFRJUExZKHo0LCBGSVgoMS4zNTY5Mjc5NzYpKTsgIC8qIGMyICovCisgICAgdG1wMjEgPSB0bXAyMCArIHRtcDIzICsgdG1wMjUgLQorICAgICAgICAgICAgTVVMVElQTFkoejIsIEZJWCgxLjgyMTc5MDc3NSkpOyAgICAgICAgICAvKiBjMitjNCtjMTAtYzYgKi8KKyAgICB0bXAyMCArPSB0bXAyNSArIE1VTFRJUExZKHozLCBGSVgoMi4xMTU4MjUwODcpKTsgLyogYzQrYzYgKi8KKyAgICB0bXAyMyArPSB0bXAyNSAtIE1VTFRJUExZKHoxLCBGSVgoMS41MTM1OTg0NzcpKTsgLyogYzYrYzggKi8KKyAgICB0bXAyNCArPSB0bXAyNTsKKyAgICB0bXAyMiA9IHRtcDI0IC0gTVVMVElQTFkoejMsIEZJWCgwLjc4ODc0OTEyMCkpOyAgLyogYzgrYzEwICovCisgICAgdG1wMjQgKz0gTVVMVElQTFkoejIsIEZJWCgxLjk0NDQxMzUyMikpIC0gICAgICAgIC8qIGMyK2M4ICovCisgICAgICAgICAgICAgTVVMVElQTFkoejEsIEZJWCgxLjM5MDk3NTczMCkpOyAgICAgICAgIC8qIGM0K2MxMCAqLworICAgIHRtcDI1ID0gdG1wMTAgLSBNVUxUSVBMWSh6NCwgRklYKDEuNDE0MjEzNTYyKSk7ICAvKiBjMCAqLworCisgICAgLyogT2RkIHBhcnQgKi8KKworICAgIHoxID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjFdLCBxdWFudHB0cltEQ1RTSVpFKjFdKTsKKyAgICB6MiA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSozXSwgcXVhbnRwdHJbRENUU0laRSozXSk7CisgICAgejMgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqNV0sIHF1YW50cHRyW0RDVFNJWkUqNV0pOworICAgIHo0ID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjddLCBxdWFudHB0cltEQ1RTSVpFKjddKTsKKworICAgIHRtcDExID0gejEgKyB6MjsKKyAgICB0bXAxNCA9IE1VTFRJUExZKHRtcDExICsgejMgKyB6NCwgRklYKDAuMzk4NDMwMDAzKSk7IC8qIGM5ICovCisgICAgdG1wMTEgPSBNVUxUSVBMWSh0bXAxMSwgRklYKDAuODg3OTgzOTAyKSk7ICAgICAgICAgICAvKiBjMy1jOSAqLworICAgIHRtcDEyID0gTVVMVElQTFkoejEgKyB6MywgRklYKDAuNjcwMzYxMjk1KSk7ICAgICAgICAgLyogYzUtYzkgKi8KKyAgICB0bXAxMyA9IHRtcDE0ICsgTVVMVElQTFkoejEgKyB6NCwgRklYKDAuMzY2MTUxNTc0KSk7IC8qIGM3LWM5ICovCisgICAgdG1wMTAgPSB0bXAxMSArIHRtcDEyICsgdG1wMTMgLQorICAgICAgICAgICAgTVVMVElQTFkoejEsIEZJWCgwLjkyMzEwNzg2NikpOyAgICAgICAgICAgICAgLyogYzcrYzUrYzMtYzEtMipjOSAqLworICAgIHoxICAgID0gdG1wMTQgLSBNVUxUSVBMWSh6MiArIHozLCBGSVgoMS4xNjMwMTE1NzkpKTsgLyogYzcrYzkgKi8KKyAgICB0bXAxMSArPSB6MSArIE1VTFRJUExZKHoyLCBGSVgoMi4wNzMyNzY1ODgpKTsgICAgICAgIC8qIGMxK2M3KzMqYzktYzMgKi8KKyAgICB0bXAxMiArPSB6MSAtIE1VTFRJUExZKHozLCBGSVgoMS4xOTIxOTM2MjMpKTsgICAgICAgIC8qIGMzK2M1LWM3LWM5ICovCisgICAgejEgICAgPSBNVUxUSVBMWSh6MiArIHo0LCAtIEZJWCgxLjc5ODI0ODkxMCkpOyAgICAgICAvKiAtKGMxK2M5KSAqLworICAgIHRtcDExICs9IHoxOworICAgIHRtcDEzICs9IHoxICsgTVVMVElQTFkoejQsIEZJWCgyLjEwMjQ1ODYzMikpOyAgICAgICAgLyogYzErYzUrYzktYzcgKi8KKyAgICB0bXAxNCArPSBNVUxUSVBMWSh6MiwgLSBGSVgoMS40NjcyMjEzMDEpKSArICAgICAgICAgIC8qIC0oYzUrYzkpICovCisgICAgICAgICAgICAgTVVMVElQTFkoejMsIEZJWCgxLjAwMTM4ODkwNSkpIC0gICAgICAgICAgICAvKiBjMS1jOSAqLworICAgICAgICAgICAgIE1VTFRJUExZKHo0LCBGSVgoMS42ODQ4NDM5MDcpKTsgICAgICAgICAgICAgLyogYzMrYzkgKi8KKworICAgIC8qIEZpbmFsIG91dHB1dCBzdGFnZSAqLworCisgICAgd3NwdHJbOCowXSAgPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMCArIHRtcDEwLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICAgIHdzcHRyWzgqMTBdID0gKGludCkgUklHSFRfU0hJRlQodG1wMjAgLSB0bXAxMCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4KjFdICA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDIxICsgdG1wMTEsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCo5XSAgPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMSAtIHRtcDExLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICAgIHdzcHRyWzgqMl0gID0gKGludCkgUklHSFRfU0hJRlQodG1wMjIgKyB0bXAxMiwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4KjhdICA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDIyIC0gdG1wMTIsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCozXSAgPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMyArIHRtcDEzLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICAgIHdzcHRyWzgqN10gID0gKGludCkgUklHSFRfU0hJRlQodG1wMjMgLSB0bXAxMywgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4KjRdICA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDI0ICsgdG1wMTQsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCo2XSAgPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyNCAtIHRtcDE0LCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICAgIHdzcHRyWzgqNV0gID0gKGludCkgUklHSFRfU0hJRlQodG1wMjUsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7CisgIH0KKworICAvKiBQYXNzIDI6IHByb2Nlc3MgMTEgcm93cyBmcm9tIHdvcmsgYXJyYXksIHN0b3JlIGludG8gb3V0cHV0IGFycmF5LiAqLworCisgIHdzcHRyID0gd29ya3NwYWNlOworICBmb3IgKGN0ciA9IDA7IGN0ciA8IDExOyBjdHIrKykgeworICAgIG91dHB0ciA9IG91dHB1dF9idWZbY3RyXSArIG91dHB1dF9jb2w7CisKKyAgICAvKiBFdmVuIHBhcnQgKi8KKworICAgIC8qIEFkZCBmdWRnZSBmYWN0b3IgaGVyZSBmb3IgZmluYWwgZGVzY2FsZS4gKi8KKyAgICB0bXAxMCA9IChJTlQzMikgd3NwdHJbMF0gKyAoT05FIDw8IChQQVNTMV9CSVRTKzIpKTsKKyAgICB0bXAxMCA8PD0gQ09OU1RfQklUUzsKKworICAgIHoxID0gKElOVDMyKSB3c3B0clsyXTsKKyAgICB6MiA9IChJTlQzMikgd3NwdHJbNF07CisgICAgejMgPSAoSU5UMzIpIHdzcHRyWzZdOworCisgICAgdG1wMjAgPSBNVUxUSVBMWSh6MiAtIHozLCBGSVgoMi41NDY2NDAxMzIpKTsgICAgIC8qIGMyK2M0ICovCisgICAgdG1wMjMgPSBNVUxUSVBMWSh6MiAtIHoxLCBGSVgoMC40MzA4MTUwNDUpKTsgICAgIC8qIGMyLWM2ICovCisgICAgejQgPSB6MSArIHozOworICAgIHRtcDI0ID0gTVVMVElQTFkoejQsIC0gRklYKDEuMTU1NjY0NDAyKSk7ICAgICAgICAvKiAtKGMyLWMxMCkgKi8KKyAgICB6NCAtPSB6MjsKKyAgICB0bXAyNSA9IHRtcDEwICsgTVVMVElQTFkoejQsIEZJWCgxLjM1NjkyNzk3NikpOyAgLyogYzIgKi8KKyAgICB0bXAyMSA9IHRtcDIwICsgdG1wMjMgKyB0bXAyNSAtCisgICAgICAgICAgICBNVUxUSVBMWSh6MiwgRklYKDEuODIxNzkwNzc1KSk7ICAgICAgICAgIC8qIGMyK2M0K2MxMC1jNiAqLworICAgIHRtcDIwICs9IHRtcDI1ICsgTVVMVElQTFkoejMsIEZJWCgyLjExNTgyNTA4NykpOyAvKiBjNCtjNiAqLworICAgIHRtcDIzICs9IHRtcDI1IC0gTVVMVElQTFkoejEsIEZJWCgxLjUxMzU5ODQ3NykpOyAvKiBjNitjOCAqLworICAgIHRtcDI0ICs9IHRtcDI1OworICAgIHRtcDIyID0gdG1wMjQgLSBNVUxUSVBMWSh6MywgRklYKDAuNzg4NzQ5MTIwKSk7ICAvKiBjOCtjMTAgKi8KKyAgICB0bXAyNCArPSBNVUxUSVBMWSh6MiwgRklYKDEuOTQ0NDEzNTIyKSkgLSAgICAgICAgLyogYzIrYzggKi8KKyAgICAgICAgICAgICBNVUxUSVBMWSh6MSwgRklYKDEuMzkwOTc1NzMwKSk7ICAgICAgICAgLyogYzQrYzEwICovCisgICAgdG1wMjUgPSB0bXAxMCAtIE1VTFRJUExZKHo0LCBGSVgoMS40MTQyMTM1NjIpKTsgIC8qIGMwICovCisKKyAgICAvKiBPZGQgcGFydCAqLworCisgICAgejEgPSAoSU5UMzIpIHdzcHRyWzFdOworICAgIHoyID0gKElOVDMyKSB3c3B0clszXTsKKyAgICB6MyA9IChJTlQzMikgd3NwdHJbNV07CisgICAgejQgPSAoSU5UMzIpIHdzcHRyWzddOworCisgICAgdG1wMTEgPSB6MSArIHoyOworICAgIHRtcDE0ID0gTVVMVElQTFkodG1wMTEgKyB6MyArIHo0LCBGSVgoMC4zOTg0MzAwMDMpKTsgLyogYzkgKi8KKyAgICB0bXAxMSA9IE1VTFRJUExZKHRtcDExLCBGSVgoMC44ODc5ODM5MDIpKTsgICAgICAgICAgIC8qIGMzLWM5ICovCisgICAgdG1wMTIgPSBNVUxUSVBMWSh6MSArIHozLCBGSVgoMC42NzAzNjEyOTUpKTsgICAgICAgICAvKiBjNS1jOSAqLworICAgIHRtcDEzID0gdG1wMTQgKyBNVUxUSVBMWSh6MSArIHo0LCBGSVgoMC4zNjYxNTE1NzQpKTsgLyogYzctYzkgKi8KKyAgICB0bXAxMCA9IHRtcDExICsgdG1wMTIgKyB0bXAxMyAtCisgICAgICAgICAgICBNVUxUSVBMWSh6MSwgRklYKDAuOTIzMTA3ODY2KSk7ICAgICAgICAgICAgICAvKiBjNytjNStjMy1jMS0yKmM5ICovCisgICAgejEgICAgPSB0bXAxNCAtIE1VTFRJUExZKHoyICsgejMsIEZJWCgxLjE2MzAxMTU3OSkpOyAvKiBjNytjOSAqLworICAgIHRtcDExICs9IHoxICsgTVVMVElQTFkoejIsIEZJWCgyLjA3MzI3NjU4OCkpOyAgICAgICAgLyogYzErYzcrMypjOS1jMyAqLworICAgIHRtcDEyICs9IHoxIC0gTVVMVElQTFkoejMsIEZJWCgxLjE5MjE5MzYyMykpOyAgICAgICAgLyogYzMrYzUtYzctYzkgKi8KKyAgICB6MSAgICA9IE1VTFRJUExZKHoyICsgejQsIC0gRklYKDEuNzk4MjQ4OTEwKSk7ICAgICAgIC8qIC0oYzErYzkpICovCisgICAgdG1wMTEgKz0gejE7CisgICAgdG1wMTMgKz0gejEgKyBNVUxUSVBMWSh6NCwgRklYKDIuMTAyNDU4NjMyKSk7ICAgICAgICAvKiBjMStjNStjOS1jNyAqLworICAgIHRtcDE0ICs9IE1VTFRJUExZKHoyLCAtIEZJWCgxLjQ2NzIyMTMwMSkpICsgICAgICAgICAgLyogLShjNStjOSkgKi8KKyAgICAgICAgICAgICBNVUxUSVBMWSh6MywgRklYKDEuMDAxMzg4OTA1KSkgLSAgICAgICAgICAgIC8qIGMxLWM5ICovCisgICAgICAgICAgICAgTVVMVElQTFkoejQsIEZJWCgxLjY4NDg0MzkwNykpOyAgICAgICAgICAgICAvKiBjMytjOSAqLworCisgICAgLyogRmluYWwgb3V0cHV0IHN0YWdlICovCisKKyAgICBvdXRwdHJbMF0gID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjAgKyB0bXAxMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzEwXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIwIC0gdG1wMTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOworICAgIG91dHB0clsxXSAgPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyMSArIHRtcDExLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbOV0gID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjEgLSB0bXAxMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzJdICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIyICsgdG1wMTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOworICAgIG91dHB0cls4XSAgPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyMiAtIHRtcDEyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbM10gID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjMgKyB0bXAxMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzddICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIzIC0gdG1wMTMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOworICAgIG91dHB0cls0XSAgPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyNCArIHRtcDE0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbNl0gID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjQgLSB0bXAxNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzVdICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDI1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBSQU5HRV9NQVNLXTsKKworICAgIHdzcHRyICs9IDg7ICAgICAgICAgLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgcm93ICovCisgIH0KK30KKworCisvKgorICogUGVyZm9ybSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Qgb24gb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cywKKyAqIHByb2R1Y2luZyBhIDEyeDEyIG91dHB1dCBibG9jay4KKyAqCisgKiBPcHRpbWl6ZWQgYWxnb3JpdGhtIHdpdGggMTUgbXVsdGlwbGljYXRpb25zIGluIHRoZSAxLUQga2VybmVsLgorICogY0sgcmVwcmVzZW50cyBzcXJ0KDIpICogY29zKEsqcGkvMjQpLgorICovCisKK0dMT0JBTCh2b2lkKQoranBlZ19pZGN0XzEyeDEyIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKyAgICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywKKyAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpCit7CisgIElOVDMyIHRtcDEwLCB0bXAxMSwgdG1wMTIsIHRtcDEzLCB0bXAxNCwgdG1wMTU7CisgIElOVDMyIHRtcDIwLCB0bXAyMSwgdG1wMjIsIHRtcDIzLCB0bXAyNCwgdG1wMjU7CisgIElOVDMyIHoxLCB6MiwgejMsIHo0OworICBKQ09FRlBUUiBpbnB0cjsKKyAgSVNMT1dfTVVMVF9UWVBFICogcXVhbnRwdHI7CisgIGludCAqIHdzcHRyOworICBKU0FNUFJPVyBvdXRwdHI7CisgIEpTQU1QTEUgKnJhbmdlX2xpbWl0ID0gSURDVF9yYW5nZV9saW1pdChjaW5mbyk7CisgIGludCBjdHI7CisgIGludCB3b3Jrc3BhY2VbOCoxMl07ICAvKiBidWZmZXJzIGRhdGEgYmV0d2VlbiBwYXNzZXMgKi8KKyAgU0hJRlRfVEVNUFMKKworICAvKiBQYXNzIDE6IHByb2Nlc3MgY29sdW1ucyBmcm9tIGlucHV0LCBzdG9yZSBpbnRvIHdvcmsgYXJyYXkuICovCisKKyAgaW5wdHIgPSBjb2VmX2Jsb2NrOworICBxdWFudHB0ciA9IChJU0xPV19NVUxUX1RZUEUgKikgY29tcHB0ci0+ZGN0X3RhYmxlOworICB3c3B0ciA9IHdvcmtzcGFjZTsKKyAgZm9yIChjdHIgPSAwOyBjdHIgPCA4OyBjdHIrKywgaW5wdHIrKywgcXVhbnRwdHIrKywgd3NwdHIrKykgeworICAgIC8qIEV2ZW4gcGFydCAqLworCisgICAgejMgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMF0sIHF1YW50cHRyW0RDVFNJWkUqMF0pOworICAgIHozIDw8PSBDT05TVF9CSVRTOworICAgIC8qIEFkZCBmdWRnZSBmYWN0b3IgaGVyZSBmb3IgZmluYWwgZGVzY2FsZS4gKi8KKyAgICB6MyArPSBPTkUgPDwgKENPTlNUX0JJVFMtUEFTUzFfQklUUy0xKTsKKworICAgIHo0ID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjRdLCBxdWFudHB0cltEQ1RTSVpFKjRdKTsKKyAgICB6NCA9IE1VTFRJUExZKHo0LCBGSVgoMS4yMjQ3NDQ4NzEpKTsgLyogYzQgKi8KKworICAgIHRtcDEwID0gejMgKyB6NDsKKyAgICB0bXAxMSA9IHozIC0gejQ7CisKKyAgICB6MSA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSoyXSwgcXVhbnRwdHJbRENUU0laRSoyXSk7CisgICAgejQgPSBNVUxUSVBMWSh6MSwgRklYKDEuMzY2MDI1NDA0KSk7IC8qIGMyICovCisgICAgejEgPDw9IENPTlNUX0JJVFM7CisgICAgejIgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqNl0sIHF1YW50cHRyW0RDVFNJWkUqNl0pOworICAgIHoyIDw8PSBDT05TVF9CSVRTOworCisgICAgdG1wMTIgPSB6MSAtIHoyOworCisgICAgdG1wMjEgPSB6MyArIHRtcDEyOworICAgIHRtcDI0ID0gejMgLSB0bXAxMjsKKworICAgIHRtcDEyID0gejQgKyB6MjsKKworICAgIHRtcDIwID0gdG1wMTAgKyB0bXAxMjsKKyAgICB0bXAyNSA9IHRtcDEwIC0gdG1wMTI7CisKKyAgICB0bXAxMiA9IHo0IC0gejEgLSB6MjsKKworICAgIHRtcDIyID0gdG1wMTEgKyB0bXAxMjsKKyAgICB0bXAyMyA9IHRtcDExIC0gdG1wMTI7CisKKyAgICAvKiBPZGQgcGFydCAqLworCisgICAgejEgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMV0sIHF1YW50cHRyW0RDVFNJWkUqMV0pOworICAgIHoyID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjNdLCBxdWFudHB0cltEQ1RTSVpFKjNdKTsKKyAgICB6MyA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo1XSwgcXVhbnRwdHJbRENUU0laRSo1XSk7CisgICAgejQgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqN10sIHF1YW50cHRyW0RDVFNJWkUqN10pOworCisgICAgdG1wMTEgPSBNVUxUSVBMWSh6MiwgRklYKDEuMzA2NTYyOTY1KSk7ICAgICAgICAgICAgICAgICAgLyogYzMgKi8KKyAgICB0bXAxNCA9IE1VTFRJUExZKHoyLCAtIEZJWF8wXzU0MTE5NjEwMCk7ICAgICAgICAgICAgICAgICAvKiAtYzkgKi8KKworICAgIHRtcDEwID0gejEgKyB6MzsKKyAgICB0bXAxNSA9IE1VTFRJUExZKHRtcDEwICsgejQsIEZJWCgwLjg2MDkxODY2OSkpOyAgICAgICAgICAvKiBjNyAqLworICAgIHRtcDEyID0gdG1wMTUgKyBNVUxUSVBMWSh0bXAxMCwgRklYKDAuMjYxMDUyMzg0KSk7ICAgICAgIC8qIGM1LWM3ICovCisgICAgdG1wMTAgPSB0bXAxMiArIHRtcDExICsgTVVMVElQTFkoejEsIEZJWCgwLjI4MDE0MzcxNikpOyAgLyogYzEtYzUgKi8KKyAgICB0bXAxMyA9IE1VTFRJUExZKHozICsgejQsIC0gRklYKDEuMDQ1NTEwNTgwKSk7ICAgICAgICAgICAvKiAtKGM3K2MxMSkgKi8KKyAgICB0bXAxMiArPSB0bXAxMyArIHRtcDE0IC0gTVVMVElQTFkoejMsIEZJWCgxLjQ3ODU3NTI0MikpOyAvKiBjMStjNS1jNy1jMTEgKi8KKyAgICB0bXAxMyArPSB0bXAxNSAtIHRtcDExICsgTVVMVElQTFkoejQsIEZJWCgxLjU4NjcwNjY4MSkpOyAvKiBjMStjMTEgKi8KKyAgICB0bXAxNSArPSB0bXAxNCAtIE1VTFRJUExZKHoxLCBGSVgoMC42NzYzMjY3NTgpKSAtICAgICAgICAvKiBjNy1jMTEgKi8KKyAgICAgICAgICAgICBNVUxUSVBMWSh6NCwgRklYKDEuOTgyODg5NzIzKSk7ICAgICAgICAgICAgICAgICAvKiBjNStjNyAqLworCisgICAgejEgLT0gejQ7CisgICAgejIgLT0gejM7CisgICAgejMgPSBNVUxUSVBMWSh6MSArIHoyLCBGSVhfMF81NDExOTYxMDApOyAgICAgICAgICAgICAgICAgLyogYzkgKi8KKyAgICB0bXAxMSA9IHozICsgTVVMVElQTFkoejEsIEZJWF8wXzc2NTM2Njg2NSk7ICAgICAgICAgICAgICAvKiBjMy1jOSAqLworICAgIHRtcDE0ID0gejMgLSBNVUxUSVBMWSh6MiwgRklYXzFfODQ3NzU5MDY1KTsgICAgICAgICAgICAgIC8qIGMzK2M5ICovCisKKyAgICAvKiBGaW5hbCBvdXRwdXQgc3RhZ2UgKi8KKworICAgIHdzcHRyWzgqMF0gID0gKGludCkgUklHSFRfU0hJRlQodG1wMjAgKyB0bXAxMCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4KjExXSA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDIwIC0gdG1wMTAsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCoxXSAgPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMSArIHRtcDExLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICAgIHdzcHRyWzgqMTBdID0gKGludCkgUklHSFRfU0hJRlQodG1wMjEgLSB0bXAxMSwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4KjJdICA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDIyICsgdG1wMTIsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCo5XSAgPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMiAtIHRtcDEyLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICAgIHdzcHRyWzgqM10gID0gKGludCkgUklHSFRfU0hJRlQodG1wMjMgKyB0bXAxMywgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4KjhdICA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDIzIC0gdG1wMTMsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCo0XSAgPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyNCArIHRtcDE0LCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICAgIHdzcHRyWzgqN10gID0gKGludCkgUklHSFRfU0hJRlQodG1wMjQgLSB0bXAxNCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4KjVdICA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDI1ICsgdG1wMTUsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCo2XSAgPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyNSAtIHRtcDE1LCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICB9CisKKyAgLyogUGFzcyAyOiBwcm9jZXNzIDEyIHJvd3MgZnJvbSB3b3JrIGFycmF5LCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4gKi8KKworICB3c3B0ciA9IHdvcmtzcGFjZTsKKyAgZm9yIChjdHIgPSAwOyBjdHIgPCAxMjsgY3RyKyspIHsKKyAgICBvdXRwdHIgPSBvdXRwdXRfYnVmW2N0cl0gKyBvdXRwdXRfY29sOworCisgICAgLyogRXZlbiBwYXJ0ICovCisKKyAgICAvKiBBZGQgZnVkZ2UgZmFjdG9yIGhlcmUgZm9yIGZpbmFsIGRlc2NhbGUuICovCisgICAgejMgPSAoSU5UMzIpIHdzcHRyWzBdICsgKE9ORSA8PCAoUEFTUzFfQklUUysyKSk7CisgICAgejMgPDw9IENPTlNUX0JJVFM7CisKKyAgICB6NCA9IChJTlQzMikgd3NwdHJbNF07CisgICAgejQgPSBNVUxUSVBMWSh6NCwgRklYKDEuMjI0NzQ0ODcxKSk7IC8qIGM0ICovCisKKyAgICB0bXAxMCA9IHozICsgejQ7CisgICAgdG1wMTEgPSB6MyAtIHo0OworCisgICAgejEgPSAoSU5UMzIpIHdzcHRyWzJdOworICAgIHo0ID0gTVVMVElQTFkoejEsIEZJWCgxLjM2NjAyNTQwNCkpOyAvKiBjMiAqLworICAgIHoxIDw8PSBDT05TVF9CSVRTOworICAgIHoyID0gKElOVDMyKSB3c3B0cls2XTsKKyAgICB6MiA8PD0gQ09OU1RfQklUUzsKKworICAgIHRtcDEyID0gejEgLSB6MjsKKworICAgIHRtcDIxID0gejMgKyB0bXAxMjsKKyAgICB0bXAyNCA9IHozIC0gdG1wMTI7CisKKyAgICB0bXAxMiA9IHo0ICsgejI7CisKKyAgICB0bXAyMCA9IHRtcDEwICsgdG1wMTI7CisgICAgdG1wMjUgPSB0bXAxMCAtIHRtcDEyOworCisgICAgdG1wMTIgPSB6NCAtIHoxIC0gejI7CisKKyAgICB0bXAyMiA9IHRtcDExICsgdG1wMTI7CisgICAgdG1wMjMgPSB0bXAxMSAtIHRtcDEyOworCisgICAgLyogT2RkIHBhcnQgKi8KKworICAgIHoxID0gKElOVDMyKSB3c3B0clsxXTsKKyAgICB6MiA9IChJTlQzMikgd3NwdHJbM107CisgICAgejMgPSAoSU5UMzIpIHdzcHRyWzVdOworICAgIHo0ID0gKElOVDMyKSB3c3B0cls3XTsKKworICAgIHRtcDExID0gTVVMVElQTFkoejIsIEZJWCgxLjMwNjU2Mjk2NSkpOyAgICAgICAgICAgICAgICAgIC8qIGMzICovCisgICAgdG1wMTQgPSBNVUxUSVBMWSh6MiwgLSBGSVhfMF81NDExOTYxMDApOyAgICAgICAgICAgICAgICAgLyogLWM5ICovCisKKyAgICB0bXAxMCA9IHoxICsgejM7CisgICAgdG1wMTUgPSBNVUxUSVBMWSh0bXAxMCArIHo0LCBGSVgoMC44NjA5MTg2NjkpKTsgICAgICAgICAgLyogYzcgKi8KKyAgICB0bXAxMiA9IHRtcDE1ICsgTVVMVElQTFkodG1wMTAsIEZJWCgwLjI2MTA1MjM4NCkpOyAgICAgICAvKiBjNS1jNyAqLworICAgIHRtcDEwID0gdG1wMTIgKyB0bXAxMSArIE1VTFRJUExZKHoxLCBGSVgoMC4yODAxNDM3MTYpKTsgIC8qIGMxLWM1ICovCisgICAgdG1wMTMgPSBNVUxUSVBMWSh6MyArIHo0LCAtIEZJWCgxLjA0NTUxMDU4MCkpOyAgICAgICAgICAgLyogLShjNytjMTEpICovCisgICAgdG1wMTIgKz0gdG1wMTMgKyB0bXAxNCAtIE1VTFRJUExZKHozLCBGSVgoMS40Nzg1NzUyNDIpKTsgLyogYzErYzUtYzctYzExICovCisgICAgdG1wMTMgKz0gdG1wMTUgLSB0bXAxMSArIE1VTFRJUExZKHo0LCBGSVgoMS41ODY3MDY2ODEpKTsgLyogYzErYzExICovCisgICAgdG1wMTUgKz0gdG1wMTQgLSBNVUxUSVBMWSh6MSwgRklYKDAuNjc2MzI2NzU4KSkgLSAgICAgICAgLyogYzctYzExICovCisgICAgICAgICAgICAgTVVMVElQTFkoejQsIEZJWCgxLjk4Mjg4OTcyMykpOyAgICAgICAgICAgICAgICAgLyogYzUrYzcgKi8KKworICAgIHoxIC09IHo0OworICAgIHoyIC09IHozOworICAgIHozID0gTVVMVElQTFkoejEgKyB6MiwgRklYXzBfNTQxMTk2MTAwKTsgICAgICAgICAgICAgICAgIC8qIGM5ICovCisgICAgdG1wMTEgPSB6MyArIE1VTFRJUExZKHoxLCBGSVhfMF83NjUzNjY4NjUpOyAgICAgICAgICAgICAgLyogYzMtYzkgKi8KKyAgICB0bXAxNCA9IHozIC0gTVVMVElQTFkoejIsIEZJWF8xXzg0Nzc1OTA2NSk7ICAgICAgICAgICAgICAvKiBjMytjOSAqLworCisgICAgLyogRmluYWwgb3V0cHV0IHN0YWdlICovCisKKyAgICBvdXRwdHJbMF0gID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjAgKyB0bXAxMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzExXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIwIC0gdG1wMTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOworICAgIG91dHB0clsxXSAgPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyMSArIHRtcDExLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbMTBdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjEgLSB0bXAxMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzJdICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIyICsgdG1wMTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOworICAgIG91dHB0cls5XSAgPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyMiAtIHRtcDEyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbM10gID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjMgKyB0bXAxMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzhdICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIzIC0gdG1wMTMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOworICAgIG91dHB0cls0XSAgPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyNCArIHRtcDE0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbN10gID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjQgLSB0bXAxNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzVdICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDI1ICsgdG1wMTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOworICAgIG91dHB0cls2XSAgPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyNSAtIHRtcDE1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBSQU5HRV9NQVNLXTsKKworICAgIHdzcHRyICs9IDg7ICAgICAgICAgLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgcm93ICovCisgIH0KK30KKworCisvKgorICogUGVyZm9ybSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Qgb24gb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cywKKyAqIHByb2R1Y2luZyBhIDEzeDEzIG91dHB1dCBibG9jay4KKyAqCisgKiBPcHRpbWl6ZWQgYWxnb3JpdGhtIHdpdGggMjkgbXVsdGlwbGljYXRpb25zIGluIHRoZSAxLUQga2VybmVsLgorICogY0sgcmVwcmVzZW50cyBzcXJ0KDIpICogY29zKEsqcGkvMjYpLgorICovCisKK0dMT0JBTCh2b2lkKQoranBlZ19pZGN0XzEzeDEzIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKyAgICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywKKyAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpCit7CisgIElOVDMyIHRtcDEwLCB0bXAxMSwgdG1wMTIsIHRtcDEzLCB0bXAxNCwgdG1wMTU7CisgIElOVDMyIHRtcDIwLCB0bXAyMSwgdG1wMjIsIHRtcDIzLCB0bXAyNCwgdG1wMjUsIHRtcDI2OworICBJTlQzMiB6MSwgejIsIHozLCB6NDsKKyAgSkNPRUZQVFIgaW5wdHI7CisgIElTTE9XX01VTFRfVFlQRSAqIHF1YW50cHRyOworICBpbnQgKiB3c3B0cjsKKyAgSlNBTVBST1cgb3V0cHRyOworICBKU0FNUExFICpyYW5nZV9saW1pdCA9IElEQ1RfcmFuZ2VfbGltaXQoY2luZm8pOworICBpbnQgY3RyOworICBpbnQgd29ya3NwYWNlWzgqMTNdOyAgLyogYnVmZmVycyBkYXRhIGJldHdlZW4gcGFzc2VzICovCisgIFNISUZUX1RFTVBTCisKKyAgLyogUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMgZnJvbSBpbnB1dCwgc3RvcmUgaW50byB3b3JrIGFycmF5LiAqLworCisgIGlucHRyID0gY29lZl9ibG9jazsKKyAgcXVhbnRwdHIgPSAoSVNMT1dfTVVMVF9UWVBFICopIGNvbXBwdHItPmRjdF90YWJsZTsKKyAgd3NwdHIgPSB3b3Jrc3BhY2U7CisgIGZvciAoY3RyID0gMDsgY3RyIDwgODsgY3RyKyssIGlucHRyKyssIHF1YW50cHRyKyssIHdzcHRyKyspIHsKKyAgICAvKiBFdmVuIHBhcnQgKi8KKworICAgIHoxID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjBdLCBxdWFudHB0cltEQ1RTSVpFKjBdKTsKKyAgICB6MSA8PD0gQ09OU1RfQklUUzsKKyAgICAvKiBBZGQgZnVkZ2UgZmFjdG9yIGhlcmUgZm9yIGZpbmFsIGRlc2NhbGUuICovCisgICAgejEgKz0gT05FIDw8IChDT05TVF9CSVRTLVBBU1MxX0JJVFMtMSk7CisKKyAgICB6MiA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSoyXSwgcXVhbnRwdHJbRENUU0laRSoyXSk7CisgICAgejMgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqNF0sIHF1YW50cHRyW0RDVFNJWkUqNF0pOworICAgIHo0ID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjZdLCBxdWFudHB0cltEQ1RTSVpFKjZdKTsKKworICAgIHRtcDEwID0gejMgKyB6NDsKKyAgICB0bXAxMSA9IHozIC0gejQ7CisKKyAgICB0bXAxMiA9IE1VTFRJUExZKHRtcDEwLCBGSVgoMS4xNTUzODg5ODYpKTsgICAgICAgICAgICAgICAgLyogKGM0K2M2KS8yICovCisgICAgdG1wMTMgPSBNVUxUSVBMWSh0bXAxMSwgRklYKDAuMDk2ODM0OTM0KSkgKyB6MTsgICAgICAgICAgIC8qIChjNC1jNikvMiAqLworCisgICAgdG1wMjAgPSBNVUxUSVBMWSh6MiwgRklYKDEuMzczMTE5MDg2KSkgKyB0bXAxMiArIHRtcDEzOyAgIC8qIGMyICovCisgICAgdG1wMjIgPSBNVUxUSVBMWSh6MiwgRklYKDAuNTAxNDg3MDQxKSkgLSB0bXAxMiArIHRtcDEzOyAgIC8qIGMxMCAqLworCisgICAgdG1wMTIgPSBNVUxUSVBMWSh0bXAxMCwgRklYKDAuMzE2NDUwMTMxKSk7ICAgICAgICAgICAgICAgIC8qIChjOC1jMTIpLzIgKi8KKyAgICB0bXAxMyA9IE1VTFRJUExZKHRtcDExLCBGSVgoMC40ODY5MTQ3MzkpKSArIHoxOyAgICAgICAgICAgLyogKGM4K2MxMikvMiAqLworCisgICAgdG1wMjEgPSBNVUxUSVBMWSh6MiwgRklYKDEuMDU4NTU0MDUyKSkgLSB0bXAxMiArIHRtcDEzOyAgIC8qIGM2ICovCisgICAgdG1wMjUgPSBNVUxUSVBMWSh6MiwgLSBGSVgoMS4yNTIyMjM5MjApKSArIHRtcDEyICsgdG1wMTM7IC8qIGM0ICovCisKKyAgICB0bXAxMiA9IE1VTFRJUExZKHRtcDEwLCBGSVgoMC40MzU4MTYwMjMpKTsgICAgICAgICAgICAgICAgLyogKGMyLWMxMCkvMiAqLworICAgIHRtcDEzID0gTVVMVElQTFkodG1wMTEsIEZJWCgwLjkzNzMwMzA2NCkpIC0gejE7ICAgICAgICAgICAvKiAoYzIrYzEwKS8yICovCisKKyAgICB0bXAyMyA9IE1VTFRJUExZKHoyLCAtIEZJWCgwLjE3MDQ2NDYwOCkpIC0gdG1wMTIgLSB0bXAxMzsgLyogYzEyICovCisgICAgdG1wMjQgPSBNVUxUSVBMWSh6MiwgLSBGSVgoMC44MDMzNjQ4NjkpKSArIHRtcDEyIC0gdG1wMTM7IC8qIGM4ICovCisKKyAgICB0bXAyNiA9IE1VTFRJUExZKHRtcDExIC0gejIsIEZJWCgxLjQxNDIxMzU2MikpICsgejE7ICAgICAgLyogYzAgKi8KKworICAgIC8qIE9kZCBwYXJ0ICovCisKKyAgICB6MSA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSoxXSwgcXVhbnRwdHJbRENUU0laRSoxXSk7CisgICAgejIgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqM10sIHF1YW50cHRyW0RDVFNJWkUqM10pOworICAgIHozID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjVdLCBxdWFudHB0cltEQ1RTSVpFKjVdKTsKKyAgICB6NCA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo3XSwgcXVhbnRwdHJbRENUU0laRSo3XSk7CisKKyAgICB0bXAxMSA9IE1VTFRJUExZKHoxICsgejIsIEZJWCgxLjMyMjMxMjY1MSkpOyAgICAgLyogYzMgKi8KKyAgICB0bXAxMiA9IE1VTFRJUExZKHoxICsgejMsIEZJWCgxLjE2Mzg3NDk0NSkpOyAgICAgLyogYzUgKi8KKyAgICB0bXAxNSA9IHoxICsgejQ7CisgICAgdG1wMTMgPSBNVUxUSVBMWSh0bXAxNSwgRklYKDAuOTM3Nzk3MDU3KSk7ICAgICAgIC8qIGM3ICovCisgICAgdG1wMTAgPSB0bXAxMSArIHRtcDEyICsgdG1wMTMgLQorICAgICAgICAgICAgTVVMVElQTFkoejEsIEZJWCgyLjAyMDA4MjMwMCkpOyAgICAgICAgICAvKiBjNytjNStjMy1jMSAqLworICAgIHRtcDE0ID0gTVVMVElQTFkoejIgKyB6MywgLSBGSVgoMC4zMzg0NDM0NTgpKTsgICAvKiAtYzExICovCisgICAgdG1wMTEgKz0gdG1wMTQgKyBNVUxUSVBMWSh6MiwgRklYKDAuODM3MjIzNTY0KSk7IC8qIGM1K2M5K2MxMS1jMyAqLworICAgIHRtcDEyICs9IHRtcDE0IC0gTVVMVElQTFkoejMsIEZJWCgxLjU3MjExNjAyNykpOyAvKiBjMStjNS1jOS1jMTEgKi8KKyAgICB0bXAxNCA9IE1VTFRJUExZKHoyICsgejQsIC0gRklYKDEuMTYzODc0OTQ1KSk7ICAgLyogLWM1ICovCisgICAgdG1wMTEgKz0gdG1wMTQ7CisgICAgdG1wMTMgKz0gdG1wMTQgKyBNVUxUSVBMWSh6NCwgRklYKDIuMjA1NjA4MzUyKSk7IC8qIGMzK2M1K2M5LWM3ICovCisgICAgdG1wMTQgPSBNVUxUSVBMWSh6MyArIHo0LCAtIEZJWCgwLjY1NzIxNzgxMykpOyAgIC8qIC1jOSAqLworICAgIHRtcDEyICs9IHRtcDE0OworICAgIHRtcDEzICs9IHRtcDE0OworICAgIHRtcDE1ID0gTVVMVElQTFkodG1wMTUsIEZJWCgwLjMzODQ0MzQ1OCkpOyAgICAgICAvKiBjMTEgKi8KKyAgICB0bXAxNCA9IHRtcDE1ICsgTVVMVElQTFkoejEsIEZJWCgwLjMxODc3NDM1NSkpIC0gLyogYzktYzExICovCisgICAgICAgICAgICBNVUxUSVBMWSh6MiwgRklYKDAuNDY2MTA1Mjk2KSk7ICAgICAgICAgIC8qIGMxLWM3ICovCisgICAgejEgICAgPSBNVUxUSVBMWSh6MyAtIHoyLCBGSVgoMC45Mzc3OTcwNTcpKTsgICAgIC8qIGM3ICovCisgICAgdG1wMTQgKz0gejE7CisgICAgdG1wMTUgKz0gejEgKyBNVUxUSVBMWSh6MywgRklYKDAuMzg0NTE1NTk1KSkgLSAgIC8qIGMzLWM3ICovCisgICAgICAgICAgICAgTVVMVElQTFkoejQsIEZJWCgxLjc0MjM0NTgxMSkpOyAgICAgICAgIC8qIGMxK2MxMSAqLworCisgICAgLyogRmluYWwgb3V0cHV0IHN0YWdlICovCisKKyAgICB3c3B0cls4KjBdICA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDIwICsgdG1wMTAsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCoxMl0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMCAtIHRtcDEwLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICAgIHdzcHRyWzgqMV0gID0gKGludCkgUklHSFRfU0hJRlQodG1wMjEgKyB0bXAxMSwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4KjExXSA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDIxIC0gdG1wMTEsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCoyXSAgPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMiArIHRtcDEyLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICAgIHdzcHRyWzgqMTBdID0gKGludCkgUklHSFRfU0hJRlQodG1wMjIgLSB0bXAxMiwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4KjNdICA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDIzICsgdG1wMTMsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCo5XSAgPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMyAtIHRtcDEzLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICAgIHdzcHRyWzgqNF0gID0gKGludCkgUklHSFRfU0hJRlQodG1wMjQgKyB0bXAxNCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4KjhdICA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDI0IC0gdG1wMTQsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCo1XSAgPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyNSArIHRtcDE1LCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICAgIHdzcHRyWzgqN10gID0gKGludCkgUklHSFRfU0hJRlQodG1wMjUgLSB0bXAxNSwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4KjZdICA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDI2LCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICB9CisKKyAgLyogUGFzcyAyOiBwcm9jZXNzIDEzIHJvd3MgZnJvbSB3b3JrIGFycmF5LCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4gKi8KKworICB3c3B0ciA9IHdvcmtzcGFjZTsKKyAgZm9yIChjdHIgPSAwOyBjdHIgPCAxMzsgY3RyKyspIHsKKyAgICBvdXRwdHIgPSBvdXRwdXRfYnVmW2N0cl0gKyBvdXRwdXRfY29sOworCisgICAgLyogRXZlbiBwYXJ0ICovCisKKyAgICAvKiBBZGQgZnVkZ2UgZmFjdG9yIGhlcmUgZm9yIGZpbmFsIGRlc2NhbGUuICovCisgICAgejEgPSAoSU5UMzIpIHdzcHRyWzBdICsgKE9ORSA8PCAoUEFTUzFfQklUUysyKSk7CisgICAgejEgPDw9IENPTlNUX0JJVFM7CisKKyAgICB6MiA9IChJTlQzMikgd3NwdHJbMl07CisgICAgejMgPSAoSU5UMzIpIHdzcHRyWzRdOworICAgIHo0ID0gKElOVDMyKSB3c3B0cls2XTsKKworICAgIHRtcDEwID0gejMgKyB6NDsKKyAgICB0bXAxMSA9IHozIC0gejQ7CisKKyAgICB0bXAxMiA9IE1VTFRJUExZKHRtcDEwLCBGSVgoMS4xNTUzODg5ODYpKTsgICAgICAgICAgICAgICAgLyogKGM0K2M2KS8yICovCisgICAgdG1wMTMgPSBNVUxUSVBMWSh0bXAxMSwgRklYKDAuMDk2ODM0OTM0KSkgKyB6MTsgICAgICAgICAgIC8qIChjNC1jNikvMiAqLworCisgICAgdG1wMjAgPSBNVUxUSVBMWSh6MiwgRklYKDEuMzczMTE5MDg2KSkgKyB0bXAxMiArIHRtcDEzOyAgIC8qIGMyICovCisgICAgdG1wMjIgPSBNVUxUSVBMWSh6MiwgRklYKDAuNTAxNDg3MDQxKSkgLSB0bXAxMiArIHRtcDEzOyAgIC8qIGMxMCAqLworCisgICAgdG1wMTIgPSBNVUxUSVBMWSh0bXAxMCwgRklYKDAuMzE2NDUwMTMxKSk7ICAgICAgICAgICAgICAgIC8qIChjOC1jMTIpLzIgKi8KKyAgICB0bXAxMyA9IE1VTFRJUExZKHRtcDExLCBGSVgoMC40ODY5MTQ3MzkpKSArIHoxOyAgICAgICAgICAgLyogKGM4K2MxMikvMiAqLworCisgICAgdG1wMjEgPSBNVUxUSVBMWSh6MiwgRklYKDEuMDU4NTU0MDUyKSkgLSB0bXAxMiArIHRtcDEzOyAgIC8qIGM2ICovCisgICAgdG1wMjUgPSBNVUxUSVBMWSh6MiwgLSBGSVgoMS4yNTIyMjM5MjApKSArIHRtcDEyICsgdG1wMTM7IC8qIGM0ICovCisKKyAgICB0bXAxMiA9IE1VTFRJUExZKHRtcDEwLCBGSVgoMC40MzU4MTYwMjMpKTsgICAgICAgICAgICAgICAgLyogKGMyLWMxMCkvMiAqLworICAgIHRtcDEzID0gTVVMVElQTFkodG1wMTEsIEZJWCgwLjkzNzMwMzA2NCkpIC0gejE7ICAgICAgICAgICAvKiAoYzIrYzEwKS8yICovCisKKyAgICB0bXAyMyA9IE1VTFRJUExZKHoyLCAtIEZJWCgwLjE3MDQ2NDYwOCkpIC0gdG1wMTIgLSB0bXAxMzsgLyogYzEyICovCisgICAgdG1wMjQgPSBNVUxUSVBMWSh6MiwgLSBGSVgoMC44MDMzNjQ4NjkpKSArIHRtcDEyIC0gdG1wMTM7IC8qIGM4ICovCisKKyAgICB0bXAyNiA9IE1VTFRJUExZKHRtcDExIC0gejIsIEZJWCgxLjQxNDIxMzU2MikpICsgejE7ICAgICAgLyogYzAgKi8KKworICAgIC8qIE9kZCBwYXJ0ICovCisKKyAgICB6MSA9IChJTlQzMikgd3NwdHJbMV07CisgICAgejIgPSAoSU5UMzIpIHdzcHRyWzNdOworICAgIHozID0gKElOVDMyKSB3c3B0cls1XTsKKyAgICB6NCA9IChJTlQzMikgd3NwdHJbN107CisKKyAgICB0bXAxMSA9IE1VTFRJUExZKHoxICsgejIsIEZJWCgxLjMyMjMxMjY1MSkpOyAgICAgLyogYzMgKi8KKyAgICB0bXAxMiA9IE1VTFRJUExZKHoxICsgejMsIEZJWCgxLjE2Mzg3NDk0NSkpOyAgICAgLyogYzUgKi8KKyAgICB0bXAxNSA9IHoxICsgejQ7CisgICAgdG1wMTMgPSBNVUxUSVBMWSh0bXAxNSwgRklYKDAuOTM3Nzk3MDU3KSk7ICAgICAgIC8qIGM3ICovCisgICAgdG1wMTAgPSB0bXAxMSArIHRtcDEyICsgdG1wMTMgLQorICAgICAgICAgICAgTVVMVElQTFkoejEsIEZJWCgyLjAyMDA4MjMwMCkpOyAgICAgICAgICAvKiBjNytjNStjMy1jMSAqLworICAgIHRtcDE0ID0gTVVMVElQTFkoejIgKyB6MywgLSBGSVgoMC4zMzg0NDM0NTgpKTsgICAvKiAtYzExICovCisgICAgdG1wMTEgKz0gdG1wMTQgKyBNVUxUSVBMWSh6MiwgRklYKDAuODM3MjIzNTY0KSk7IC8qIGM1K2M5K2MxMS1jMyAqLworICAgIHRtcDEyICs9IHRtcDE0IC0gTVVMVElQTFkoejMsIEZJWCgxLjU3MjExNjAyNykpOyAvKiBjMStjNS1jOS1jMTEgKi8KKyAgICB0bXAxNCA9IE1VTFRJUExZKHoyICsgejQsIC0gRklYKDEuMTYzODc0OTQ1KSk7ICAgLyogLWM1ICovCisgICAgdG1wMTEgKz0gdG1wMTQ7CisgICAgdG1wMTMgKz0gdG1wMTQgKyBNVUxUSVBMWSh6NCwgRklYKDIuMjA1NjA4MzUyKSk7IC8qIGMzK2M1K2M5LWM3ICovCisgICAgdG1wMTQgPSBNVUxUSVBMWSh6MyArIHo0LCAtIEZJWCgwLjY1NzIxNzgxMykpOyAgIC8qIC1jOSAqLworICAgIHRtcDEyICs9IHRtcDE0OworICAgIHRtcDEzICs9IHRtcDE0OworICAgIHRtcDE1ID0gTVVMVElQTFkodG1wMTUsIEZJWCgwLjMzODQ0MzQ1OCkpOyAgICAgICAvKiBjMTEgKi8KKyAgICB0bXAxNCA9IHRtcDE1ICsgTVVMVElQTFkoejEsIEZJWCgwLjMxODc3NDM1NSkpIC0gLyogYzktYzExICovCisgICAgICAgICAgICBNVUxUSVBMWSh6MiwgRklYKDAuNDY2MTA1Mjk2KSk7ICAgICAgICAgIC8qIGMxLWM3ICovCisgICAgejEgICAgPSBNVUxUSVBMWSh6MyAtIHoyLCBGSVgoMC45Mzc3OTcwNTcpKTsgICAgIC8qIGM3ICovCisgICAgdG1wMTQgKz0gejE7CisgICAgdG1wMTUgKz0gejEgKyBNVUxUSVBMWSh6MywgRklYKDAuMzg0NTE1NTk1KSkgLSAgIC8qIGMzLWM3ICovCisgICAgICAgICAgICAgTVVMVElQTFkoejQsIEZJWCgxLjc0MjM0NTgxMSkpOyAgICAgICAgIC8qIGMxK2MxMSAqLworCisgICAgLyogRmluYWwgb3V0cHV0IHN0YWdlICovCisKKyAgICBvdXRwdHJbMF0gID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjAgKyB0bXAxMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzEyXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIwIC0gdG1wMTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOworICAgIG91dHB0clsxXSAgPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyMSArIHRtcDExLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbMTFdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjEgLSB0bXAxMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzJdICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIyICsgdG1wMTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOworICAgIG91dHB0clsxMF0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyMiAtIHRtcDEyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbM10gID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjMgKyB0bXAxMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzldICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIzIC0gdG1wMTMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOworICAgIG91dHB0cls0XSAgPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyNCArIHRtcDE0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbOF0gID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjQgLSB0bXAxNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzVdICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDI1ICsgdG1wMTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOworICAgIG91dHB0cls3XSAgPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyNSAtIHRtcDE1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbNl0gID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOworCisgICAgd3NwdHIgKz0gODsgICAgICAgICAvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCByb3cgKi8KKyAgfQorfQorCisKKy8qCisgKiBQZXJmb3JtIGRlcXVhbnRpemF0aW9uIGFuZCBpbnZlcnNlIERDVCBvbiBvbmUgYmxvY2sgb2YgY29lZmZpY2llbnRzLAorICogcHJvZHVjaW5nIGEgMTR4MTQgb3V0cHV0IGJsb2NrLgorICoKKyAqIE9wdGltaXplZCBhbGdvcml0aG0gd2l0aCAyMCBtdWx0aXBsaWNhdGlvbnMgaW4gdGhlIDEtRCBrZXJuZWwuCisgKiBjSyByZXByZXNlbnRzIHNxcnQoMikgKiBjb3MoSypwaS8yOCkuCisgKi8KKworR0xPQkFMKHZvaWQpCitqcGVnX2lkY3RfMTR4MTQgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAorICAgICAgICAgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLAorICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKK3sKKyAgSU5UMzIgdG1wMTAsIHRtcDExLCB0bXAxMiwgdG1wMTMsIHRtcDE0LCB0bXAxNSwgdG1wMTY7CisgIElOVDMyIHRtcDIwLCB0bXAyMSwgdG1wMjIsIHRtcDIzLCB0bXAyNCwgdG1wMjUsIHRtcDI2OworICBJTlQzMiB6MSwgejIsIHozLCB6NDsKKyAgSkNPRUZQVFIgaW5wdHI7CisgIElTTE9XX01VTFRfVFlQRSAqIHF1YW50cHRyOworICBpbnQgKiB3c3B0cjsKKyAgSlNBTVBST1cgb3V0cHRyOworICBKU0FNUExFICpyYW5nZV9saW1pdCA9IElEQ1RfcmFuZ2VfbGltaXQoY2luZm8pOworICBpbnQgY3RyOworICBpbnQgd29ya3NwYWNlWzgqMTRdOyAgLyogYnVmZmVycyBkYXRhIGJldHdlZW4gcGFzc2VzICovCisgIFNISUZUX1RFTVBTCisKKyAgLyogUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMgZnJvbSBpbnB1dCwgc3RvcmUgaW50byB3b3JrIGFycmF5LiAqLworCisgIGlucHRyID0gY29lZl9ibG9jazsKKyAgcXVhbnRwdHIgPSAoSVNMT1dfTVVMVF9UWVBFICopIGNvbXBwdHItPmRjdF90YWJsZTsKKyAgd3NwdHIgPSB3b3Jrc3BhY2U7CisgIGZvciAoY3RyID0gMDsgY3RyIDwgODsgY3RyKyssIGlucHRyKyssIHF1YW50cHRyKyssIHdzcHRyKyspIHsKKyAgICAvKiBFdmVuIHBhcnQgKi8KKworICAgIHoxID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjBdLCBxdWFudHB0cltEQ1RTSVpFKjBdKTsKKyAgICB6MSA8PD0gQ09OU1RfQklUUzsKKyAgICAvKiBBZGQgZnVkZ2UgZmFjdG9yIGhlcmUgZm9yIGZpbmFsIGRlc2NhbGUuICovCisgICAgejEgKz0gT05FIDw8IChDT05TVF9CSVRTLVBBU1MxX0JJVFMtMSk7CisgICAgejQgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqNF0sIHF1YW50cHRyW0RDVFNJWkUqNF0pOworICAgIHoyID0gTVVMVElQTFkoejQsIEZJWCgxLjI3NDE2MjM5MikpOyAgICAgICAgIC8qIGM0ICovCisgICAgejMgPSBNVUxUSVBMWSh6NCwgRklYKDAuMzE0NjkyMTIzKSk7ICAgICAgICAgLyogYzEyICovCisgICAgejQgPSBNVUxUSVBMWSh6NCwgRklYKDAuODgxNzQ3NzM0KSk7ICAgICAgICAgLyogYzggKi8KKworICAgIHRtcDEwID0gejEgKyB6MjsKKyAgICB0bXAxMSA9IHoxICsgejM7CisgICAgdG1wMTIgPSB6MSAtIHo0OworCisgICAgdG1wMjMgPSBSSUdIVF9TSElGVCh6MSAtICgoejIgKyB6MyAtIHo0KSA8PCAxKSwgLyogYzAgPSAoYzQrYzEyLWM4KSoyICovCisgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworCisgICAgejEgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMl0sIHF1YW50cHRyW0RDVFNJWkUqMl0pOworICAgIHoyID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjZdLCBxdWFudHB0cltEQ1RTSVpFKjZdKTsKKworICAgIHozID0gTVVMVElQTFkoejEgKyB6MiwgRklYKDEuMTA1Njc2Njg2KSk7ICAgIC8qIGM2ICovCisKKyAgICB0bXAxMyA9IHozICsgTVVMVElQTFkoejEsIEZJWCgwLjI3MzA3OTU5MCkpOyAvKiBjMi1jNiAqLworICAgIHRtcDE0ID0gejMgLSBNVUxUSVBMWSh6MiwgRklYKDEuNzE5MjgwOTU0KSk7IC8qIGM2K2MxMCAqLworICAgIHRtcDE1ID0gTVVMVElQTFkoejEsIEZJWCgwLjYxMzYwNDI2OCkpIC0gICAgIC8qIGMxMCAqLworICAgICAgICAgICAgTVVMVElQTFkoejIsIEZJWCgxLjM3ODc1NjI3NikpOyAgICAgIC8qIGMyICovCisKKyAgICB0bXAyMCA9IHRtcDEwICsgdG1wMTM7CisgICAgdG1wMjYgPSB0bXAxMCAtIHRtcDEzOworICAgIHRtcDIxID0gdG1wMTEgKyB0bXAxNDsKKyAgICB0bXAyNSA9IHRtcDExIC0gdG1wMTQ7CisgICAgdG1wMjIgPSB0bXAxMiArIHRtcDE1OworICAgIHRtcDI0ID0gdG1wMTIgLSB0bXAxNTsKKworICAgIC8qIE9kZCBwYXJ0ICovCisKKyAgICB6MSA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSoxXSwgcXVhbnRwdHJbRENUU0laRSoxXSk7CisgICAgejIgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqM10sIHF1YW50cHRyW0RDVFNJWkUqM10pOworICAgIHozID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjVdLCBxdWFudHB0cltEQ1RTSVpFKjVdKTsKKyAgICB6NCA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo3XSwgcXVhbnRwdHJbRENUU0laRSo3XSk7CisgICAgdG1wMTMgPSB6NCA8PCBDT05TVF9CSVRTOworCisgICAgdG1wMTQgPSB6MSArIHozOworICAgIHRtcDExID0gTVVMVElQTFkoejEgKyB6MiwgRklYKDEuMzM0ODUyNjA3KSk7ICAgICAgICAgICAvKiBjMyAqLworICAgIHRtcDEyID0gTVVMVElQTFkodG1wMTQsIEZJWCgxLjE5NzQ0ODg0NikpOyAgICAgICAgICAgICAvKiBjNSAqLworICAgIHRtcDEwID0gdG1wMTEgKyB0bXAxMiArIHRtcDEzIC0gTVVMVElQTFkoejEsIEZJWCgxLjEyNjk4MDE2OSkpOyAvKiBjMytjNS1jMSAqLworICAgIHRtcDE0ID0gTVVMVElQTFkodG1wMTQsIEZJWCgwLjc1MjQwNjk3OCkpOyAgICAgICAgICAgICAvKiBjOSAqLworICAgIHRtcDE2ID0gdG1wMTQgLSBNVUxUSVBMWSh6MSwgRklYKDEuMDYxMTUwNDI2KSk7ICAgICAgICAvKiBjOStjMTEtYzEzICovCisgICAgejEgICAgLT0gejI7CisgICAgdG1wMTUgPSBNVUxUSVBMWSh6MSwgRklYKDAuNDY3MDg1MTI5KSkgLSB0bXAxMzsgICAgICAgIC8qIGMxMSAqLworICAgIHRtcDE2ICs9IHRtcDE1OworICAgIHoxICAgICs9IHo0OworICAgIHo0ICAgID0gTVVMVElQTFkoejIgKyB6MywgLSBGSVgoMC4xNTgzNDE2ODEpKSAtIHRtcDEzOyAvKiAtYzEzICovCisgICAgdG1wMTEgKz0gejQgLSBNVUxUSVBMWSh6MiwgRklYKDAuNDI0MTAzOTQ4KSk7ICAgICAgICAgIC8qIGMzLWM5LWMxMyAqLworICAgIHRtcDEyICs9IHo0IC0gTVVMVElQTFkoejMsIEZJWCgyLjM3Mzk1OTc3MykpOyAgICAgICAgICAvKiBjMytjNS1jMTMgKi8KKyAgICB6NCAgICA9IE1VTFRJUExZKHozIC0gejIsIEZJWCgxLjQwNTMyMTI4NCkpOyAgICAgICAgICAgLyogYzEgKi8KKyAgICB0bXAxNCArPSB6NCArIHRtcDEzIC0gTVVMVElQTFkoejMsIEZJWCgxLjY5MDY0MzEzMzQpKTsgLyogYzErYzktYzExICovCisgICAgdG1wMTUgKz0gejQgKyBNVUxUSVBMWSh6MiwgRklYKDAuNjc0OTU3NTY3KSk7ICAgICAgICAgIC8qIGMxK2MxMS1jNSAqLworCisgICAgdG1wMTMgPSAoejEgLSB6MykgPDwgUEFTUzFfQklUUzsKKworICAgIC8qIEZpbmFsIG91dHB1dCBzdGFnZSAqLworCisgICAgd3NwdHJbOCowXSAgPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMCArIHRtcDEwLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICAgIHdzcHRyWzgqMTNdID0gKGludCkgUklHSFRfU0hJRlQodG1wMjAgLSB0bXAxMCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4KjFdICA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDIxICsgdG1wMTEsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCoxMl0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMSAtIHRtcDExLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICAgIHdzcHRyWzgqMl0gID0gKGludCkgUklHSFRfU0hJRlQodG1wMjIgKyB0bXAxMiwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4KjExXSA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDIyIC0gdG1wMTIsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCozXSAgPSAoaW50KSAodG1wMjMgKyB0bXAxMyk7CisgICAgd3NwdHJbOCoxMF0gPSAoaW50KSAodG1wMjMgLSB0bXAxMyk7CisgICAgd3NwdHJbOCo0XSAgPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyNCArIHRtcDE0LCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICAgIHdzcHRyWzgqOV0gID0gKGludCkgUklHSFRfU0hJRlQodG1wMjQgLSB0bXAxNCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4KjVdICA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDI1ICsgdG1wMTUsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCo4XSAgPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyNSAtIHRtcDE1LCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICAgIHdzcHRyWzgqNl0gID0gKGludCkgUklHSFRfU0hJRlQodG1wMjYgKyB0bXAxNiwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4KjddICA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDI2IC0gdG1wMTYsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7CisgIH0KKworICAvKiBQYXNzIDI6IHByb2Nlc3MgMTQgcm93cyBmcm9tIHdvcmsgYXJyYXksIHN0b3JlIGludG8gb3V0cHV0IGFycmF5LiAqLworCisgIHdzcHRyID0gd29ya3NwYWNlOworICBmb3IgKGN0ciA9IDA7IGN0ciA8IDE0OyBjdHIrKykgeworICAgIG91dHB0ciA9IG91dHB1dF9idWZbY3RyXSArIG91dHB1dF9jb2w7CisKKyAgICAvKiBFdmVuIHBhcnQgKi8KKworICAgIC8qIEFkZCBmdWRnZSBmYWN0b3IgaGVyZSBmb3IgZmluYWwgZGVzY2FsZS4gKi8KKyAgICB6MSA9IChJTlQzMikgd3NwdHJbMF0gKyAoT05FIDw8IChQQVNTMV9CSVRTKzIpKTsKKyAgICB6MSA8PD0gQ09OU1RfQklUUzsKKyAgICB6NCA9IChJTlQzMikgd3NwdHJbNF07CisgICAgejIgPSBNVUxUSVBMWSh6NCwgRklYKDEuMjc0MTYyMzkyKSk7ICAgICAgICAgLyogYzQgKi8KKyAgICB6MyA9IE1VTFRJUExZKHo0LCBGSVgoMC4zMTQ2OTIxMjMpKTsgICAgICAgICAvKiBjMTIgKi8KKyAgICB6NCA9IE1VTFRJUExZKHo0LCBGSVgoMC44ODE3NDc3MzQpKTsgICAgICAgICAvKiBjOCAqLworCisgICAgdG1wMTAgPSB6MSArIHoyOworICAgIHRtcDExID0gejEgKyB6MzsKKyAgICB0bXAxMiA9IHoxIC0gejQ7CisKKyAgICB0bXAyMyA9IHoxIC0gKCh6MiArIHozIC0gejQpIDw8IDEpOyAgICAgICAgICAvKiBjMCA9IChjNCtjMTItYzgpKjIgKi8KKworICAgIHoxID0gKElOVDMyKSB3c3B0clsyXTsKKyAgICB6MiA9IChJTlQzMikgd3NwdHJbNl07CisKKyAgICB6MyA9IE1VTFRJUExZKHoxICsgejIsIEZJWCgxLjEwNTY3NjY4NikpOyAgICAvKiBjNiAqLworCisgICAgdG1wMTMgPSB6MyArIE1VTFRJUExZKHoxLCBGSVgoMC4yNzMwNzk1OTApKTsgLyogYzItYzYgKi8KKyAgICB0bXAxNCA9IHozIC0gTVVMVElQTFkoejIsIEZJWCgxLjcxOTI4MDk1NCkpOyAvKiBjNitjMTAgKi8KKyAgICB0bXAxNSA9IE1VTFRJUExZKHoxLCBGSVgoMC42MTM2MDQyNjgpKSAtICAgICAvKiBjMTAgKi8KKyAgICAgICAgICAgIE1VTFRJUExZKHoyLCBGSVgoMS4zNzg3NTYyNzYpKTsgICAgICAvKiBjMiAqLworCisgICAgdG1wMjAgPSB0bXAxMCArIHRtcDEzOworICAgIHRtcDI2ID0gdG1wMTAgLSB0bXAxMzsKKyAgICB0bXAyMSA9IHRtcDExICsgdG1wMTQ7CisgICAgdG1wMjUgPSB0bXAxMSAtIHRtcDE0OworICAgIHRtcDIyID0gdG1wMTIgKyB0bXAxNTsKKyAgICB0bXAyNCA9IHRtcDEyIC0gdG1wMTU7CisKKyAgICAvKiBPZGQgcGFydCAqLworCisgICAgejEgPSAoSU5UMzIpIHdzcHRyWzFdOworICAgIHoyID0gKElOVDMyKSB3c3B0clszXTsKKyAgICB6MyA9IChJTlQzMikgd3NwdHJbNV07CisgICAgejQgPSAoSU5UMzIpIHdzcHRyWzddOworICAgIHo0IDw8PSBDT05TVF9CSVRTOworCisgICAgdG1wMTQgPSB6MSArIHozOworICAgIHRtcDExID0gTVVMVElQTFkoejEgKyB6MiwgRklYKDEuMzM0ODUyNjA3KSk7ICAgICAgICAgICAvKiBjMyAqLworICAgIHRtcDEyID0gTVVMVElQTFkodG1wMTQsIEZJWCgxLjE5NzQ0ODg0NikpOyAgICAgICAgICAgICAvKiBjNSAqLworICAgIHRtcDEwID0gdG1wMTEgKyB0bXAxMiArIHo0IC0gTVVMVElQTFkoejEsIEZJWCgxLjEyNjk4MDE2OSkpOyAvKiBjMytjNS1jMSAqLworICAgIHRtcDE0ID0gTVVMVElQTFkodG1wMTQsIEZJWCgwLjc1MjQwNjk3OCkpOyAgICAgICAgICAgICAvKiBjOSAqLworICAgIHRtcDE2ID0gdG1wMTQgLSBNVUxUSVBMWSh6MSwgRklYKDEuMDYxMTUwNDI2KSk7ICAgICAgICAvKiBjOStjMTEtYzEzICovCisgICAgejEgICAgLT0gejI7CisgICAgdG1wMTUgPSBNVUxUSVBMWSh6MSwgRklYKDAuNDY3MDg1MTI5KSkgLSB6NDsgICAgICAgICAgIC8qIGMxMSAqLworICAgIHRtcDE2ICs9IHRtcDE1OworICAgIHRtcDEzID0gTVVMVElQTFkoejIgKyB6MywgLSBGSVgoMC4xNTgzNDE2ODEpKSAtIHo0OyAgICAvKiAtYzEzICovCisgICAgdG1wMTEgKz0gdG1wMTMgLSBNVUxUSVBMWSh6MiwgRklYKDAuNDI0MTAzOTQ4KSk7ICAgICAgIC8qIGMzLWM5LWMxMyAqLworICAgIHRtcDEyICs9IHRtcDEzIC0gTVVMVElQTFkoejMsIEZJWCgyLjM3Mzk1OTc3MykpOyAgICAgICAvKiBjMytjNS1jMTMgKi8KKyAgICB0bXAxMyA9IE1VTFRJUExZKHozIC0gejIsIEZJWCgxLjQwNTMyMTI4NCkpOyAgICAgICAgICAgLyogYzEgKi8KKyAgICB0bXAxNCArPSB0bXAxMyArIHo0IC0gTVVMVElQTFkoejMsIEZJWCgxLjY5MDY0MzEzMzQpKTsgLyogYzErYzktYzExICovCisgICAgdG1wMTUgKz0gdG1wMTMgKyBNVUxUSVBMWSh6MiwgRklYKDAuNjc0OTU3NTY3KSk7ICAgICAgIC8qIGMxK2MxMS1jNSAqLworCisgICAgdG1wMTMgPSAoKHoxIC0gejMpIDw8IENPTlNUX0JJVFMpICsgejQ7CisKKyAgICAvKiBGaW5hbCBvdXRwdXQgc3RhZ2UgKi8KKworICAgIG91dHB0clswXSAgPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyMCArIHRtcDEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbMTNdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjAgLSB0bXAxMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzFdICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIxICsgdG1wMTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOworICAgIG91dHB0clsxMl0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyMSAtIHRtcDExLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbMl0gID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjIgKyB0bXAxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzExXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIyIC0gdG1wMTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOworICAgIG91dHB0clszXSAgPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyMyArIHRtcDEzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbMTBdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjMgLSB0bXAxMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzRdICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDI0ICsgdG1wMTQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOworICAgIG91dHB0cls5XSAgPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyNCAtIHRtcDE0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbNV0gID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjUgKyB0bXAxNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzhdICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDI1IC0gdG1wMTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOworICAgIG91dHB0cls2XSAgPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyNiArIHRtcDE2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbN10gID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjYgLSB0bXAxNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CisKKyAgICB3c3B0ciArPSA4OyAgICAgICAgIC8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLworICB9Cit9CisKKworLyoKKyAqIFBlcmZvcm0gZGVxdWFudGl6YXRpb24gYW5kIGludmVyc2UgRENUIG9uIG9uZSBibG9jayBvZiBjb2VmZmljaWVudHMsCisgKiBwcm9kdWNpbmcgYSAxNXgxNSBvdXRwdXQgYmxvY2suCisgKgorICogT3B0aW1pemVkIGFsZ29yaXRobSB3aXRoIDIyIG11bHRpcGxpY2F0aW9ucyBpbiB0aGUgMS1EIGtlcm5lbC4KKyAqIGNLIHJlcHJlc2VudHMgc3FydCgyKSAqIGNvcyhLKnBpLzMwKS4KKyAqLworCitHTE9CQUwodm9pZCkKK2pwZWdfaWRjdF8xNXgxNSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCisgICAgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssCisgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQoreworICBJTlQzMiB0bXAxMCwgdG1wMTEsIHRtcDEyLCB0bXAxMywgdG1wMTQsIHRtcDE1LCB0bXAxNjsKKyAgSU5UMzIgdG1wMjAsIHRtcDIxLCB0bXAyMiwgdG1wMjMsIHRtcDI0LCB0bXAyNSwgdG1wMjYsIHRtcDI3OworICBJTlQzMiB6MSwgejIsIHozLCB6NDsKKyAgSkNPRUZQVFIgaW5wdHI7CisgIElTTE9XX01VTFRfVFlQRSAqIHF1YW50cHRyOworICBpbnQgKiB3c3B0cjsKKyAgSlNBTVBST1cgb3V0cHRyOworICBKU0FNUExFICpyYW5nZV9saW1pdCA9IElEQ1RfcmFuZ2VfbGltaXQoY2luZm8pOworICBpbnQgY3RyOworICBpbnQgd29ya3NwYWNlWzgqMTVdOyAgLyogYnVmZmVycyBkYXRhIGJldHdlZW4gcGFzc2VzICovCisgIFNISUZUX1RFTVBTCisKKyAgLyogUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMgZnJvbSBpbnB1dCwgc3RvcmUgaW50byB3b3JrIGFycmF5LiAqLworCisgIGlucHRyID0gY29lZl9ibG9jazsKKyAgcXVhbnRwdHIgPSAoSVNMT1dfTVVMVF9UWVBFICopIGNvbXBwdHItPmRjdF90YWJsZTsKKyAgd3NwdHIgPSB3b3Jrc3BhY2U7CisgIGZvciAoY3RyID0gMDsgY3RyIDwgODsgY3RyKyssIGlucHRyKyssIHF1YW50cHRyKyssIHdzcHRyKyspIHsKKyAgICAvKiBFdmVuIHBhcnQgKi8KKworICAgIHoxID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjBdLCBxdWFudHB0cltEQ1RTSVpFKjBdKTsKKyAgICB6MSA8PD0gQ09OU1RfQklUUzsKKyAgICAvKiBBZGQgZnVkZ2UgZmFjdG9yIGhlcmUgZm9yIGZpbmFsIGRlc2NhbGUuICovCisgICAgejEgKz0gT05FIDw8IChDT05TVF9CSVRTLVBBU1MxX0JJVFMtMSk7CisKKyAgICB6MiA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSoyXSwgcXVhbnRwdHJbRENUU0laRSoyXSk7CisgICAgejMgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqNF0sIHF1YW50cHRyW0RDVFNJWkUqNF0pOworICAgIHo0ID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjZdLCBxdWFudHB0cltEQ1RTSVpFKjZdKTsKKworICAgIHRtcDEwID0gTVVMVElQTFkoejQsIEZJWCgwLjQzNzAxNjAyNCkpOyAvKiBjMTIgKi8KKyAgICB0bXAxMSA9IE1VTFRJUExZKHo0LCBGSVgoMS4xNDQxMjI4MDYpKTsgLyogYzYgKi8KKworICAgIHRtcDEyID0gejEgLSB0bXAxMDsKKyAgICB0bXAxMyA9IHoxICsgdG1wMTE7CisgICAgejEgLT0gKHRtcDExIC0gdG1wMTApIDw8IDE7ICAgICAgICAgICAgIC8qIGMwID0gKGM2LWMxMikqMiAqLworCisgICAgejQgPSB6MiAtIHozOworICAgIHozICs9IHoyOworICAgIHRtcDEwID0gTVVMVElQTFkoejMsIEZJWCgxLjMzNzYyODk5MCkpOyAvKiAoYzIrYzQpLzIgKi8KKyAgICB0bXAxMSA9IE1VTFRJUExZKHo0LCBGSVgoMC4wNDU2ODA2MTMpKTsgLyogKGMyLWM0KS8yICovCisgICAgejIgPSBNVUxUSVBMWSh6MiwgRklYKDEuNDM5NzczOTQ2KSk7ICAgIC8qIGM0K2MxNCAqLworCisgICAgdG1wMjAgPSB0bXAxMyArIHRtcDEwICsgdG1wMTE7CisgICAgdG1wMjMgPSB0bXAxMiAtIHRtcDEwICsgdG1wMTEgKyB6MjsKKworICAgIHRtcDEwID0gTVVMVElQTFkoejMsIEZJWCgwLjU0NzA1OTU3NCkpOyAvKiAoYzgrYzE0KS8yICovCisgICAgdG1wMTEgPSBNVUxUSVBMWSh6NCwgRklYKDAuMzk5MjM0MDA0KSk7IC8qIChjOC1jMTQpLzIgKi8KKworICAgIHRtcDI1ID0gdG1wMTMgLSB0bXAxMCAtIHRtcDExOworICAgIHRtcDI2ID0gdG1wMTIgKyB0bXAxMCAtIHRtcDExIC0gejI7CisKKyAgICB0bXAxMCA9IE1VTFRJUExZKHozLCBGSVgoMC43OTA1Njk0MTUpKTsgLyogKGM2K2MxMikvMiAqLworICAgIHRtcDExID0gTVVMVElQTFkoejQsIEZJWCgwLjM1MzU1MzM5MSkpOyAvKiAoYzYtYzEyKS8yICovCisKKyAgICB0bXAyMSA9IHRtcDEyICsgdG1wMTAgKyB0bXAxMTsKKyAgICB0bXAyNCA9IHRtcDEzIC0gdG1wMTAgKyB0bXAxMTsKKyAgICB0bXAxMSArPSB0bXAxMTsKKyAgICB0bXAyMiA9IHoxICsgdG1wMTE7ICAgICAgICAgICAgICAgICAgICAgLyogYzEwID0gYzYtYzEyICovCisgICAgdG1wMjcgPSB6MSAtIHRtcDExIC0gdG1wMTE7ICAgICAgICAgICAgIC8qIGMwID0gKGM2LWMxMikqMiAqLworCisgICAgLyogT2RkIHBhcnQgKi8KKworICAgIHoxID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjFdLCBxdWFudHB0cltEQ1RTSVpFKjFdKTsKKyAgICB6MiA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSozXSwgcXVhbnRwdHJbRENUU0laRSozXSk7CisgICAgejQgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqNV0sIHF1YW50cHRyW0RDVFNJWkUqNV0pOworICAgIHozID0gTVVMVElQTFkoejQsIEZJWCgxLjIyNDc0NDg3MSkpOyAgICAgICAgICAgICAgICAgICAgLyogYzUgKi8KKyAgICB6NCA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo3XSwgcXVhbnRwdHJbRENUU0laRSo3XSk7CisKKyAgICB0bXAxMyA9IHoyIC0gejQ7CisgICAgdG1wMTUgPSBNVUxUSVBMWSh6MSArIHRtcDEzLCBGSVgoMC44MzEyNTM4NzYpKTsgICAgICAgICAvKiBjOSAqLworICAgIHRtcDExID0gdG1wMTUgKyBNVUxUSVBMWSh6MSwgRklYKDAuNTEzNzQzMTQ4KSk7ICAgICAgICAgLyogYzMtYzkgKi8KKyAgICB0bXAxNCA9IHRtcDE1IC0gTVVMVElQTFkodG1wMTMsIEZJWCgyLjE3NjI1MDg5OSkpOyAgICAgIC8qIGMzK2M5ICovCisKKyAgICB0bXAxMyA9IE1VTFRJUExZKHoyLCAtIEZJWCgwLjgzMTI1Mzg3NikpOyAgICAgICAgICAgICAgIC8qIC1jOSAqLworICAgIHRtcDE1ID0gTVVMVElQTFkoejIsIC0gRklYKDEuMzQ0OTk3MDI0KSk7ICAgICAgICAgICAgICAgLyogLWMzICovCisgICAgejIgPSB6MSAtIHo0OworICAgIHRtcDEyID0gejMgKyBNVUxUSVBMWSh6MiwgRklYKDEuNDA2NDY2MzUzKSk7ICAgICAgICAgICAgLyogYzEgKi8KKworICAgIHRtcDEwID0gdG1wMTIgKyBNVUxUSVBMWSh6NCwgRklYKDIuNDU3NDMxODQ0KSkgLSB0bXAxNTsgLyogYzErYzcgKi8KKyAgICB0bXAxNiA9IHRtcDEyIC0gTVVMVElQTFkoejEsIEZJWCgxLjExMjQzNDgyMCkpICsgdG1wMTM7IC8qIGMxLWMxMyAqLworICAgIHRtcDEyID0gTVVMVElQTFkoejIsIEZJWCgxLjIyNDc0NDg3MSkpIC0gejM7ICAgICAgICAgICAgLyogYzUgKi8KKyAgICB6MiA9IE1VTFRJUExZKHoxICsgejQsIEZJWCgwLjU3NTIxMjQ3NykpOyAgICAgICAgICAgICAgIC8qIGMxMSAqLworICAgIHRtcDEzICs9IHoyICsgTVVMVElQTFkoejEsIEZJWCgwLjQ3NTc1MzAxNCkpIC0gejM7ICAgICAgLyogYzctYzExICovCisgICAgdG1wMTUgKz0gejIgLSBNVUxUSVBMWSh6NCwgRklYKDAuODY5MjQ0MDEwKSkgKyB6MzsgICAgICAvKiBjMTErYzEzICovCisKKyAgICAvKiBGaW5hbCBvdXRwdXQgc3RhZ2UgKi8KKworICAgIHdzcHRyWzgqMF0gID0gKGludCkgUklHSFRfU0hJRlQodG1wMjAgKyB0bXAxMCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4KjE0XSA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDIwIC0gdG1wMTAsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCoxXSAgPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMSArIHRtcDExLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICAgIHdzcHRyWzgqMTNdID0gKGludCkgUklHSFRfU0hJRlQodG1wMjEgLSB0bXAxMSwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4KjJdICA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDIyICsgdG1wMTIsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCoxMl0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMiAtIHRtcDEyLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICAgIHdzcHRyWzgqM10gID0gKGludCkgUklHSFRfU0hJRlQodG1wMjMgKyB0bXAxMywgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4KjExXSA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDIzIC0gdG1wMTMsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCo0XSAgPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyNCArIHRtcDE0LCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICAgIHdzcHRyWzgqMTBdID0gKGludCkgUklHSFRfU0hJRlQodG1wMjQgLSB0bXAxNCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4KjVdICA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDI1ICsgdG1wMTUsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCo5XSAgPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyNSAtIHRtcDE1LCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICAgIHdzcHRyWzgqNl0gID0gKGludCkgUklHSFRfU0hJRlQodG1wMjYgKyB0bXAxNiwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4KjhdICA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDI2IC0gdG1wMTYsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCo3XSAgPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyNywgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgfQorCisgIC8qIFBhc3MgMjogcHJvY2VzcyAxNSByb3dzIGZyb20gd29yayBhcnJheSwgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuICovCisKKyAgd3NwdHIgPSB3b3Jrc3BhY2U7CisgIGZvciAoY3RyID0gMDsgY3RyIDwgMTU7IGN0cisrKSB7CisgICAgb3V0cHRyID0gb3V0cHV0X2J1ZltjdHJdICsgb3V0cHV0X2NvbDsKKworICAgIC8qIEV2ZW4gcGFydCAqLworCisgICAgLyogQWRkIGZ1ZGdlIGZhY3RvciBoZXJlIGZvciBmaW5hbCBkZXNjYWxlLiAqLworICAgIHoxID0gKElOVDMyKSB3c3B0clswXSArIChPTkUgPDwgKFBBU1MxX0JJVFMrMikpOworICAgIHoxIDw8PSBDT05TVF9CSVRTOworCisgICAgejIgPSAoSU5UMzIpIHdzcHRyWzJdOworICAgIHozID0gKElOVDMyKSB3c3B0cls0XTsKKyAgICB6NCA9IChJTlQzMikgd3NwdHJbNl07CisKKyAgICB0bXAxMCA9IE1VTFRJUExZKHo0LCBGSVgoMC40MzcwMTYwMjQpKTsgLyogYzEyICovCisgICAgdG1wMTEgPSBNVUxUSVBMWSh6NCwgRklYKDEuMTQ0MTIyODA2KSk7IC8qIGM2ICovCisKKyAgICB0bXAxMiA9IHoxIC0gdG1wMTA7CisgICAgdG1wMTMgPSB6MSArIHRtcDExOworICAgIHoxIC09ICh0bXAxMSAtIHRtcDEwKSA8PCAxOyAgICAgICAgICAgICAvKiBjMCA9IChjNi1jMTIpKjIgKi8KKworICAgIHo0ID0gejIgLSB6MzsKKyAgICB6MyArPSB6MjsKKyAgICB0bXAxMCA9IE1VTFRJUExZKHozLCBGSVgoMS4zMzc2Mjg5OTApKTsgLyogKGMyK2M0KS8yICovCisgICAgdG1wMTEgPSBNVUxUSVBMWSh6NCwgRklYKDAuMDQ1NjgwNjEzKSk7IC8qIChjMi1jNCkvMiAqLworICAgIHoyID0gTVVMVElQTFkoejIsIEZJWCgxLjQzOTc3Mzk0NikpOyAgICAvKiBjNCtjMTQgKi8KKworICAgIHRtcDIwID0gdG1wMTMgKyB0bXAxMCArIHRtcDExOworICAgIHRtcDIzID0gdG1wMTIgLSB0bXAxMCArIHRtcDExICsgejI7CisKKyAgICB0bXAxMCA9IE1VTFRJUExZKHozLCBGSVgoMC41NDcwNTk1NzQpKTsgLyogKGM4K2MxNCkvMiAqLworICAgIHRtcDExID0gTVVMVElQTFkoejQsIEZJWCgwLjM5OTIzNDAwNCkpOyAvKiAoYzgtYzE0KS8yICovCisKKyAgICB0bXAyNSA9IHRtcDEzIC0gdG1wMTAgLSB0bXAxMTsKKyAgICB0bXAyNiA9IHRtcDEyICsgdG1wMTAgLSB0bXAxMSAtIHoyOworCisgICAgdG1wMTAgPSBNVUxUSVBMWSh6MywgRklYKDAuNzkwNTY5NDE1KSk7IC8qIChjNitjMTIpLzIgKi8KKyAgICB0bXAxMSA9IE1VTFRJUExZKHo0LCBGSVgoMC4zNTM1NTMzOTEpKTsgLyogKGM2LWMxMikvMiAqLworCisgICAgdG1wMjEgPSB0bXAxMiArIHRtcDEwICsgdG1wMTE7CisgICAgdG1wMjQgPSB0bXAxMyAtIHRtcDEwICsgdG1wMTE7CisgICAgdG1wMTEgKz0gdG1wMTE7CisgICAgdG1wMjIgPSB6MSArIHRtcDExOyAgICAgICAgICAgICAgICAgICAgIC8qIGMxMCA9IGM2LWMxMiAqLworICAgIHRtcDI3ID0gejEgLSB0bXAxMSAtIHRtcDExOyAgICAgICAgICAgICAvKiBjMCA9IChjNi1jMTIpKjIgKi8KKworICAgIC8qIE9kZCBwYXJ0ICovCisKKyAgICB6MSA9IChJTlQzMikgd3NwdHJbMV07CisgICAgejIgPSAoSU5UMzIpIHdzcHRyWzNdOworICAgIHo0ID0gKElOVDMyKSB3c3B0cls1XTsKKyAgICB6MyA9IE1VTFRJUExZKHo0LCBGSVgoMS4yMjQ3NDQ4NzEpKTsgICAgICAgICAgICAgICAgICAgIC8qIGM1ICovCisgICAgejQgPSAoSU5UMzIpIHdzcHRyWzddOworCisgICAgdG1wMTMgPSB6MiAtIHo0OworICAgIHRtcDE1ID0gTVVMVElQTFkoejEgKyB0bXAxMywgRklYKDAuODMxMjUzODc2KSk7ICAgICAgICAgLyogYzkgKi8KKyAgICB0bXAxMSA9IHRtcDE1ICsgTVVMVElQTFkoejEsIEZJWCgwLjUxMzc0MzE0OCkpOyAgICAgICAgIC8qIGMzLWM5ICovCisgICAgdG1wMTQgPSB0bXAxNSAtIE1VTFRJUExZKHRtcDEzLCBGSVgoMi4xNzYyNTA4OTkpKTsgICAgICAvKiBjMytjOSAqLworCisgICAgdG1wMTMgPSBNVUxUSVBMWSh6MiwgLSBGSVgoMC44MzEyNTM4NzYpKTsgICAgICAgICAgICAgICAvKiAtYzkgKi8KKyAgICB0bXAxNSA9IE1VTFRJUExZKHoyLCAtIEZJWCgxLjM0NDk5NzAyNCkpOyAgICAgICAgICAgICAgIC8qIC1jMyAqLworICAgIHoyID0gejEgLSB6NDsKKyAgICB0bXAxMiA9IHozICsgTVVMVElQTFkoejIsIEZJWCgxLjQwNjQ2NjM1MykpOyAgICAgICAgICAgIC8qIGMxICovCisKKyAgICB0bXAxMCA9IHRtcDEyICsgTVVMVElQTFkoejQsIEZJWCgyLjQ1NzQzMTg0NCkpIC0gdG1wMTU7IC8qIGMxK2M3ICovCisgICAgdG1wMTYgPSB0bXAxMiAtIE1VTFRJUExZKHoxLCBGSVgoMS4xMTI0MzQ4MjApKSArIHRtcDEzOyAvKiBjMS1jMTMgKi8KKyAgICB0bXAxMiA9IE1VTFRJUExZKHoyLCBGSVgoMS4yMjQ3NDQ4NzEpKSAtIHozOyAgICAgICAgICAgIC8qIGM1ICovCisgICAgejIgPSBNVUxUSVBMWSh6MSArIHo0LCBGSVgoMC41NzUyMTI0NzcpKTsgICAgICAgICAgICAgICAvKiBjMTEgKi8KKyAgICB0bXAxMyArPSB6MiArIE1VTFRJUExZKHoxLCBGSVgoMC40NzU3NTMwMTQpKSAtIHozOyAgICAgIC8qIGM3LWMxMSAqLworICAgIHRtcDE1ICs9IHoyIC0gTVVMVElQTFkoejQsIEZJWCgwLjg2OTI0NDAxMCkpICsgejM7ICAgICAgLyogYzExK2MxMyAqLworCisgICAgLyogRmluYWwgb3V0cHV0IHN0YWdlICovCisKKyAgICBvdXRwdHJbMF0gID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjAgKyB0bXAxMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzE0XSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIwIC0gdG1wMTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOworICAgIG91dHB0clsxXSAgPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyMSArIHRtcDExLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbMTNdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjEgLSB0bXAxMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzJdICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIyICsgdG1wMTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOworICAgIG91dHB0clsxMl0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyMiAtIHRtcDEyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbM10gID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjMgKyB0bXAxMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzExXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIzIC0gdG1wMTMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOworICAgIG91dHB0cls0XSAgPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyNCArIHRtcDE0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbMTBdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjQgLSB0bXAxNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzVdICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDI1ICsgdG1wMTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOworICAgIG91dHB0cls5XSAgPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyNSAtIHRtcDE1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbNl0gID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjYgKyB0bXAxNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzhdICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDI2IC0gdG1wMTYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOworICAgIG91dHB0cls3XSAgPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyNywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CisKKyAgICB3c3B0ciArPSA4OyAgICAgICAgIC8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLworICB9Cit9CisKKworLyoKKyAqIFBlcmZvcm0gZGVxdWFudGl6YXRpb24gYW5kIGludmVyc2UgRENUIG9uIG9uZSBibG9jayBvZiBjb2VmZmljaWVudHMsCisgKiBwcm9kdWNpbmcgYSAxNngxNiBvdXRwdXQgYmxvY2suCisgKgorICogT3B0aW1pemVkIGFsZ29yaXRobSB3aXRoIDI4IG11bHRpcGxpY2F0aW9ucyBpbiB0aGUgMS1EIGtlcm5lbC4KKyAqIGNLIHJlcHJlc2VudHMgc3FydCgyKSAqIGNvcyhLKnBpLzMyKS4KKyAqLworCitHTE9CQUwodm9pZCkKK2pwZWdfaWRjdF8xNngxNiAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCisgICAgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssCisgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQoreworICBJTlQzMiB0bXAwLCB0bXAxLCB0bXAyLCB0bXAzLCB0bXAxMCwgdG1wMTEsIHRtcDEyLCB0bXAxMzsKKyAgSU5UMzIgdG1wMjAsIHRtcDIxLCB0bXAyMiwgdG1wMjMsIHRtcDI0LCB0bXAyNSwgdG1wMjYsIHRtcDI3OworICBJTlQzMiB6MSwgejIsIHozLCB6NDsKKyAgSkNPRUZQVFIgaW5wdHI7CisgIElTTE9XX01VTFRfVFlQRSAqIHF1YW50cHRyOworICBpbnQgKiB3c3B0cjsKKyAgSlNBTVBST1cgb3V0cHRyOworICBKU0FNUExFICpyYW5nZV9saW1pdCA9IElEQ1RfcmFuZ2VfbGltaXQoY2luZm8pOworICBpbnQgY3RyOworICBpbnQgd29ya3NwYWNlWzgqMTZdOyAgLyogYnVmZmVycyBkYXRhIGJldHdlZW4gcGFzc2VzICovCisgIFNISUZUX1RFTVBTCisKKyAgLyogUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMgZnJvbSBpbnB1dCwgc3RvcmUgaW50byB3b3JrIGFycmF5LiAqLworCisgIGlucHRyID0gY29lZl9ibG9jazsKKyAgcXVhbnRwdHIgPSAoSVNMT1dfTVVMVF9UWVBFICopIGNvbXBwdHItPmRjdF90YWJsZTsKKyAgd3NwdHIgPSB3b3Jrc3BhY2U7CisgIGZvciAoY3RyID0gMDsgY3RyIDwgODsgY3RyKyssIGlucHRyKyssIHF1YW50cHRyKyssIHdzcHRyKyspIHsKKyAgICAvKiBFdmVuIHBhcnQgKi8KKworICAgIHRtcDAgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMF0sIHF1YW50cHRyW0RDVFNJWkUqMF0pOworICAgIHRtcDAgPDw9IENPTlNUX0JJVFM7CisgICAgLyogQWRkIGZ1ZGdlIGZhY3RvciBoZXJlIGZvciBmaW5hbCBkZXNjYWxlLiAqLworICAgIHRtcDAgKz0gMSA8PCAoQ09OU1RfQklUUy1QQVNTMV9CSVRTLTEpOworCisgICAgejEgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqNF0sIHF1YW50cHRyW0RDVFNJWkUqNF0pOworICAgIHRtcDEgPSBNVUxUSVBMWSh6MSwgRklYKDEuMzA2NTYyOTY1KSk7ICAgICAgLyogYzRbMTZdID0gYzJbOF0gKi8KKyAgICB0bXAyID0gTVVMVElQTFkoejEsIEZJWF8wXzU0MTE5NjEwMCk7ICAgICAgIC8qIGMxMlsxNl0gPSBjNls4XSAqLworCisgICAgdG1wMTAgPSB0bXAwICsgdG1wMTsKKyAgICB0bXAxMSA9IHRtcDAgLSB0bXAxOworICAgIHRtcDEyID0gdG1wMCArIHRtcDI7CisgICAgdG1wMTMgPSB0bXAwIC0gdG1wMjsKKworICAgIHoxID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjJdLCBxdWFudHB0cltEQ1RTSVpFKjJdKTsKKyAgICB6MiA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo2XSwgcXVhbnRwdHJbRENUU0laRSo2XSk7CisgICAgejMgPSB6MSAtIHoyOworICAgIHo0ID0gTVVMVElQTFkoejMsIEZJWCgwLjI3NTg5OTM3OSkpOyAgICAgICAgLyogYzE0WzE2XSA9IGM3WzhdICovCisgICAgejMgPSBNVUxUSVBMWSh6MywgRklYKDEuMzg3MDM5ODQ1KSk7ICAgICAgICAvKiBjMlsxNl0gPSBjMVs4XSAqLworCisgICAgdG1wMCA9IHozICsgTVVMVElQTFkoejIsIEZJWF8yXzU2MjkxNTQ0Nyk7ICAvKiAoYzYrYzIpWzE2XSA9IChjMytjMSlbOF0gKi8KKyAgICB0bXAxID0gejQgKyBNVUxUSVBMWSh6MSwgRklYXzBfODk5OTc2MjIzKTsgIC8qIChjNi1jMTQpWzE2XSA9IChjMy1jNylbOF0gKi8KKyAgICB0bXAyID0gejMgLSBNVUxUSVBMWSh6MSwgRklYKDAuNjAxMzQ0ODg3KSk7IC8qIChjMi1jMTApWzE2XSA9IChjMS1jNSlbOF0gKi8KKyAgICB0bXAzID0gejQgLSBNVUxUSVBMWSh6MiwgRklYKDAuNTA5Nzk1NTc5KSk7IC8qIChjMTAtYzE0KVsxNl0gPSAoYzUtYzcpWzhdICovCisKKyAgICB0bXAyMCA9IHRtcDEwICsgdG1wMDsKKyAgICB0bXAyNyA9IHRtcDEwIC0gdG1wMDsKKyAgICB0bXAyMSA9IHRtcDEyICsgdG1wMTsKKyAgICB0bXAyNiA9IHRtcDEyIC0gdG1wMTsKKyAgICB0bXAyMiA9IHRtcDEzICsgdG1wMjsKKyAgICB0bXAyNSA9IHRtcDEzIC0gdG1wMjsKKyAgICB0bXAyMyA9IHRtcDExICsgdG1wMzsKKyAgICB0bXAyNCA9IHRtcDExIC0gdG1wMzsKKworICAgIC8qIE9kZCBwYXJ0ICovCisKKyAgICB6MSA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSoxXSwgcXVhbnRwdHJbRENUU0laRSoxXSk7CisgICAgejIgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqM10sIHF1YW50cHRyW0RDVFNJWkUqM10pOworICAgIHozID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjVdLCBxdWFudHB0cltEQ1RTSVpFKjVdKTsKKyAgICB6NCA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo3XSwgcXVhbnRwdHJbRENUU0laRSo3XSk7CisKKyAgICB0bXAxMSA9IHoxICsgejM7CisKKyAgICB0bXAxICA9IE1VTFRJUExZKHoxICsgejIsIEZJWCgxLjM1MzMxODAwMSkpOyAgIC8qIGMzICovCisgICAgdG1wMiAgPSBNVUxUSVBMWSh0bXAxMSwgICBGSVgoMS4yNDcyMjUwMTMpKTsgICAvKiBjNSAqLworICAgIHRtcDMgID0gTVVMVElQTFkoejEgKyB6NCwgRklYKDEuMDkzMjAxODY3KSk7ICAgLyogYzcgKi8KKyAgICB0bXAxMCA9IE1VTFRJUExZKHoxIC0gejQsIEZJWCgwLjg5NzE2NzU4NikpOyAgIC8qIGM5ICovCisgICAgdG1wMTEgPSBNVUxUSVBMWSh0bXAxMSwgICBGSVgoMC42NjY2NTU2NTgpKTsgICAvKiBjMTEgKi8KKyAgICB0bXAxMiA9IE1VTFRJUExZKHoxIC0gejIsIEZJWCgwLjQxMDUyNDUyOCkpOyAgIC8qIGMxMyAqLworICAgIHRtcDAgID0gdG1wMSArIHRtcDIgKyB0bXAzIC0KKyAgICAgICAgICAgIE1VTFRJUExZKHoxLCBGSVgoMi4yODYzNDExNDQpKTsgICAgICAgIC8qIGM3K2M1K2MzLWMxICovCisgICAgdG1wMTMgPSB0bXAxMCArIHRtcDExICsgdG1wMTIgLQorICAgICAgICAgICAgTVVMVElQTFkoejEsIEZJWCgxLjgzNTczMDYwMykpOyAgICAgICAgLyogYzkrYzExK2MxMy1jMTUgKi8KKyAgICB6MSAgICA9IE1VTFRJUExZKHoyICsgejMsIEZJWCgwLjEzODYxNzE2OSkpOyAgIC8qIGMxNSAqLworICAgIHRtcDEgICs9IHoxICsgTVVMVElQTFkoejIsIEZJWCgwLjA3MTg4ODA3NCkpOyAgLyogYzkrYzExLWMzLWMxNSAqLworICAgIHRtcDIgICs9IHoxIC0gTVVMVElQTFkoejMsIEZJWCgxLjEyNTcyNjA0OCkpOyAgLyogYzUrYzcrYzE1LWMzICovCisgICAgejEgICAgPSBNVUxUSVBMWSh6MyAtIHoyLCBGSVgoMS40MDc0MDM3MzgpKTsgICAvKiBjMSAqLworICAgIHRtcDExICs9IHoxIC0gTVVMVElQTFkoejMsIEZJWCgwLjc2NjM2NzI4MikpOyAgLyogYzErYzExLWM5LWMxMyAqLworICAgIHRtcDEyICs9IHoxICsgTVVMVElQTFkoejIsIEZJWCgxLjk3MTk1MTQxMSkpOyAgLyogYzErYzUrYzEzLWM3ICovCisgICAgejIgICAgKz0gejQ7CisgICAgejEgICAgPSBNVUxUSVBMWSh6MiwgLSBGSVgoMC42NjY2NTU2NTgpKTsgICAgICAvKiAtYzExICovCisgICAgdG1wMSAgKz0gejE7CisgICAgdG1wMyAgKz0gejEgKyBNVUxUSVBMWSh6NCwgRklYKDEuMDY1Mzg4OTYyKSk7ICAvKiBjMytjMTErYzE1LWM3ICovCisgICAgejIgICAgPSBNVUxUSVBMWSh6MiwgLSBGSVgoMS4yNDcyMjUwMTMpKTsgICAgICAvKiAtYzUgKi8KKyAgICB0bXAxMCArPSB6MiArIE1VTFRJUExZKHo0LCBGSVgoMy4xNDEyNzE4MDkpKTsgIC8qIGMxK2M1K2M5LWMxMyAqLworICAgIHRtcDEyICs9IHoyOworICAgIHoyICAgID0gTVVMVElQTFkoejMgKyB6NCwgLSBGSVgoMS4zNTMzMTgwMDEpKTsgLyogLWMzICovCisgICAgdG1wMiAgKz0gejI7CisgICAgdG1wMyAgKz0gejI7CisgICAgejIgICAgPSBNVUxUSVBMWSh6NCAtIHozLCBGSVgoMC40MTA1MjQ1MjgpKTsgICAvKiBjMTMgKi8KKyAgICB0bXAxMCArPSB6MjsKKyAgICB0bXAxMSArPSB6MjsKKworICAgIC8qIEZpbmFsIG91dHB1dCBzdGFnZSAqLworCisgICAgd3NwdHJbOCowXSAgPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMCArIHRtcDAsICBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICAgIHdzcHRyWzgqMTVdID0gKGludCkgUklHSFRfU0hJRlQodG1wMjAgLSB0bXAwLCAgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4KjFdICA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDIxICsgdG1wMSwgIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCoxNF0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMSAtIHRtcDEsICBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICAgIHdzcHRyWzgqMl0gID0gKGludCkgUklHSFRfU0hJRlQodG1wMjIgKyB0bXAyLCAgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4KjEzXSA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDIyIC0gdG1wMiwgIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCozXSAgPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMyArIHRtcDMsICBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICAgIHdzcHRyWzgqMTJdID0gKGludCkgUklHSFRfU0hJRlQodG1wMjMgLSB0bXAzLCAgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4KjRdICA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDI0ICsgdG1wMTAsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCoxMV0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyNCAtIHRtcDEwLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICAgIHdzcHRyWzgqNV0gID0gKGludCkgUklHSFRfU0hJRlQodG1wMjUgKyB0bXAxMSwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4KjEwXSA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDI1IC0gdG1wMTEsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCo2XSAgPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyNiArIHRtcDEyLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICAgIHdzcHRyWzgqOV0gID0gKGludCkgUklHSFRfU0hJRlQodG1wMjYgLSB0bXAxMiwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgICB3c3B0cls4KjddICA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDI3ICsgdG1wMTMsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7CisgICAgd3NwdHJbOCo4XSAgPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyNyAtIHRtcDEzLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICB9CisKKyAgLyogUGFzcyAyOiBwcm9jZXNzIDE2IHJvd3MgZnJvbSB3b3JrIGFycmF5LCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4gKi8KKworICB3c3B0ciA9IHdvcmtzcGFjZTsKKyAgZm9yIChjdHIgPSAwOyBjdHIgPCAxNjsgY3RyKyspIHsKKyAgICBvdXRwdHIgPSBvdXRwdXRfYnVmW2N0cl0gKyBvdXRwdXRfY29sOworCisgICAgLyogRXZlbiBwYXJ0ICovCisKKyAgICAvKiBBZGQgZnVkZ2UgZmFjdG9yIGhlcmUgZm9yIGZpbmFsIGRlc2NhbGUuICovCisgICAgdG1wMCA9IChJTlQzMikgd3NwdHJbMF0gKyAoT05FIDw8IChQQVNTMV9CSVRTKzIpKTsKKyAgICB0bXAwIDw8PSBDT05TVF9CSVRTOworCisgICAgejEgPSAoSU5UMzIpIHdzcHRyWzRdOworICAgIHRtcDEgPSBNVUxUSVBMWSh6MSwgRklYKDEuMzA2NTYyOTY1KSk7ICAgICAgLyogYzRbMTZdID0gYzJbOF0gKi8KKyAgICB0bXAyID0gTVVMVElQTFkoejEsIEZJWF8wXzU0MTE5NjEwMCk7ICAgICAgIC8qIGMxMlsxNl0gPSBjNls4XSAqLworCisgICAgdG1wMTAgPSB0bXAwICsgdG1wMTsKKyAgICB0bXAxMSA9IHRtcDAgLSB0bXAxOworICAgIHRtcDEyID0gdG1wMCArIHRtcDI7CisgICAgdG1wMTMgPSB0bXAwIC0gdG1wMjsKKworICAgIHoxID0gKElOVDMyKSB3c3B0clsyXTsKKyAgICB6MiA9IChJTlQzMikgd3NwdHJbNl07CisgICAgejMgPSB6MSAtIHoyOworICAgIHo0ID0gTVVMVElQTFkoejMsIEZJWCgwLjI3NTg5OTM3OSkpOyAgICAgICAgLyogYzE0WzE2XSA9IGM3WzhdICovCisgICAgejMgPSBNVUxUSVBMWSh6MywgRklYKDEuMzg3MDM5ODQ1KSk7ICAgICAgICAvKiBjMlsxNl0gPSBjMVs4XSAqLworCisgICAgdG1wMCA9IHozICsgTVVMVElQTFkoejIsIEZJWF8yXzU2MjkxNTQ0Nyk7ICAvKiAoYzYrYzIpWzE2XSA9IChjMytjMSlbOF0gKi8KKyAgICB0bXAxID0gejQgKyBNVUxUSVBMWSh6MSwgRklYXzBfODk5OTc2MjIzKTsgIC8qIChjNi1jMTQpWzE2XSA9IChjMy1jNylbOF0gKi8KKyAgICB0bXAyID0gejMgLSBNVUxUSVBMWSh6MSwgRklYKDAuNjAxMzQ0ODg3KSk7IC8qIChjMi1jMTApWzE2XSA9IChjMS1jNSlbOF0gKi8KKyAgICB0bXAzID0gejQgLSBNVUxUSVBMWSh6MiwgRklYKDAuNTA5Nzk1NTc5KSk7IC8qIChjMTAtYzE0KVsxNl0gPSAoYzUtYzcpWzhdICovCisKKyAgICB0bXAyMCA9IHRtcDEwICsgdG1wMDsKKyAgICB0bXAyNyA9IHRtcDEwIC0gdG1wMDsKKyAgICB0bXAyMSA9IHRtcDEyICsgdG1wMTsKKyAgICB0bXAyNiA9IHRtcDEyIC0gdG1wMTsKKyAgICB0bXAyMiA9IHRtcDEzICsgdG1wMjsKKyAgICB0bXAyNSA9IHRtcDEzIC0gdG1wMjsKKyAgICB0bXAyMyA9IHRtcDExICsgdG1wMzsKKyAgICB0bXAyNCA9IHRtcDExIC0gdG1wMzsKKworICAgIC8qIE9kZCBwYXJ0ICovCisKKyAgICB6MSA9IChJTlQzMikgd3NwdHJbMV07CisgICAgejIgPSAoSU5UMzIpIHdzcHRyWzNdOworICAgIHozID0gKElOVDMyKSB3c3B0cls1XTsKKyAgICB6NCA9IChJTlQzMikgd3NwdHJbN107CisKKyAgICB0bXAxMSA9IHoxICsgejM7CisKKyAgICB0bXAxICA9IE1VTFRJUExZKHoxICsgejIsIEZJWCgxLjM1MzMxODAwMSkpOyAgIC8qIGMzICovCisgICAgdG1wMiAgPSBNVUxUSVBMWSh0bXAxMSwgICBGSVgoMS4yNDcyMjUwMTMpKTsgICAvKiBjNSAqLworICAgIHRtcDMgID0gTVVMVElQTFkoejEgKyB6NCwgRklYKDEuMDkzMjAxODY3KSk7ICAgLyogYzcgKi8KKyAgICB0bXAxMCA9IE1VTFRJUExZKHoxIC0gejQsIEZJWCgwLjg5NzE2NzU4NikpOyAgIC8qIGM5ICovCisgICAgdG1wMTEgPSBNVUxUSVBMWSh0bXAxMSwgICBGSVgoMC42NjY2NTU2NTgpKTsgICAvKiBjMTEgKi8KKyAgICB0bXAxMiA9IE1VTFRJUExZKHoxIC0gejIsIEZJWCgwLjQxMDUyNDUyOCkpOyAgIC8qIGMxMyAqLworICAgIHRtcDAgID0gdG1wMSArIHRtcDIgKyB0bXAzIC0KKyAgICAgICAgICAgIE1VTFRJUExZKHoxLCBGSVgoMi4yODYzNDExNDQpKTsgICAgICAgIC8qIGM3K2M1K2MzLWMxICovCisgICAgdG1wMTMgPSB0bXAxMCArIHRtcDExICsgdG1wMTIgLQorICAgICAgICAgICAgTVVMVElQTFkoejEsIEZJWCgxLjgzNTczMDYwMykpOyAgICAgICAgLyogYzkrYzExK2MxMy1jMTUgKi8KKyAgICB6MSAgICA9IE1VTFRJUExZKHoyICsgejMsIEZJWCgwLjEzODYxNzE2OSkpOyAgIC8qIGMxNSAqLworICAgIHRtcDEgICs9IHoxICsgTVVMVElQTFkoejIsIEZJWCgwLjA3MTg4ODA3NCkpOyAgLyogYzkrYzExLWMzLWMxNSAqLworICAgIHRtcDIgICs9IHoxIC0gTVVMVElQTFkoejMsIEZJWCgxLjEyNTcyNjA0OCkpOyAgLyogYzUrYzcrYzE1LWMzICovCisgICAgejEgICAgPSBNVUxUSVBMWSh6MyAtIHoyLCBGSVgoMS40MDc0MDM3MzgpKTsgICAvKiBjMSAqLworICAgIHRtcDExICs9IHoxIC0gTVVMVElQTFkoejMsIEZJWCgwLjc2NjM2NzI4MikpOyAgLyogYzErYzExLWM5LWMxMyAqLworICAgIHRtcDEyICs9IHoxICsgTVVMVElQTFkoejIsIEZJWCgxLjk3MTk1MTQxMSkpOyAgLyogYzErYzUrYzEzLWM3ICovCisgICAgejIgICAgKz0gejQ7CisgICAgejEgICAgPSBNVUxUSVBMWSh6MiwgLSBGSVgoMC42NjY2NTU2NTgpKTsgICAgICAvKiAtYzExICovCisgICAgdG1wMSAgKz0gejE7CisgICAgdG1wMyAgKz0gejEgKyBNVUxUSVBMWSh6NCwgRklYKDEuMDY1Mzg4OTYyKSk7ICAvKiBjMytjMTErYzE1LWM3ICovCisgICAgejIgICAgPSBNVUxUSVBMWSh6MiwgLSBGSVgoMS4yNDcyMjUwMTMpKTsgICAgICAvKiAtYzUgKi8KKyAgICB0bXAxMCArPSB6MiArIE1VTFRJUExZKHo0LCBGSVgoMy4xNDEyNzE4MDkpKTsgIC8qIGMxK2M1K2M5LWMxMyAqLworICAgIHRtcDEyICs9IHoyOworICAgIHoyICAgID0gTVVMVElQTFkoejMgKyB6NCwgLSBGSVgoMS4zNTMzMTgwMDEpKTsgLyogLWMzICovCisgICAgdG1wMiAgKz0gejI7CisgICAgdG1wMyAgKz0gejI7CisgICAgejIgICAgPSBNVUxUSVBMWSh6NCAtIHozLCBGSVgoMC40MTA1MjQ1MjgpKTsgICAvKiBjMTMgKi8KKyAgICB0bXAxMCArPSB6MjsKKyAgICB0bXAxMSArPSB6MjsKKworICAgIC8qIEZpbmFsIG91dHB1dCBzdGFnZSAqLworCisgICAgb3V0cHRyWzBdICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIwICsgdG1wMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzE1XSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIwIC0gdG1wMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzFdICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIxICsgdG1wMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzE0XSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIxIC0gdG1wMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzJdICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIyICsgdG1wMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzEzXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIyIC0gdG1wMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzNdICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIzICsgdG1wMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzEyXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIzIC0gdG1wMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzRdICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDI0ICsgdG1wMTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOworICAgIG91dHB0clsxMV0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyNCAtIHRtcDEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbNV0gID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjUgKyB0bXAxMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzEwXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDI1IC0gdG1wMTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOworICAgIG91dHB0cls2XSAgPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyNiArIHRtcDEyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbOV0gID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjYgLSB0bXAxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzddICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDI3ICsgdG1wMTMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOworICAgIG91dHB0cls4XSAgPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyNyAtIHRtcDEzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBSQU5HRV9NQVNLXTsKKworICAgIHdzcHRyICs9IDg7ICAgICAgICAgLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgcm93ICovCisgIH0KK30KKworI2VuZGlmIC8qIElEQ1RfU0NBTElOR19TVVBQT1JURUQgKi8KICNlbmRpZiAvKiBEQ1RfSVNMT1dfU1VQUE9SVEVEICovCmRpZmYgLS1naXQgYS9qaWRjdHJlZC5jIGIvamlkY3RyZWQuYwppbmRleCA0MjFmM2M3Li4yYjM4NWY4IDEwMDY0NAotLS0gYS9qaWRjdHJlZC5jCisrKyBiL2ppZGN0cmVkLmMKQEAgLTIzLDcgKzIzLDcgQEAKICNkZWZpbmUgSlBFR19JTlRFUk5BTFMKICNpbmNsdWRlICJqaW5jbHVkZS5oIgogI2luY2x1ZGUgImpwZWdsaWIuaCIKLSNpbmNsdWRlICJqZGN0LmgiCQkvKiBQcml2YXRlIGRlY2xhcmF0aW9ucyBmb3IgRENUIHN1YnN5c3RlbSAqLworI2luY2x1ZGUgImpkY3QuaCIgICAgICAgICAgICAgICAvKiBQcml2YXRlIGRlY2xhcmF0aW9ucyBmb3IgRENUIHN1YnN5c3RlbSAqLwogCiAjaWZkZWYgSURDVF9TQ0FMSU5HX1NVUFBPUlRFRAogCkBAIC00NCw3ICs0NCw3IEBACiAjZGVmaW5lIFBBU1MxX0JJVFMgIDIKICNlbHNlCiAjZGVmaW5lIENPTlNUX0JJVFMgIDEzCi0jZGVmaW5lIFBBU1MxX0JJVFMgIDEJCS8qIGxvc2UgYSBsaXR0bGUgcHJlY2lzaW9uIHRvIGF2b2lkIG92ZXJmbG93ICovCisjZGVmaW5lIFBBU1MxX0JJVFMgIDEgICAgICAgICAgIC8qIGxvc2UgYSBsaXR0bGUgcHJlY2lzaW9uIHRvIGF2b2lkIG92ZXJmbG93ICovCiAjZW5kaWYKIAogLyogU29tZSBDIGNvbXBpbGVycyBmYWlsIHRvIHJlZHVjZSAiRklYKGNvbnN0YW50KSIgYXQgY29tcGlsZSB0aW1lLCB0aHVzCkBAIC01NSwyMCArNTUsMjAgQEAKICAqLwogCiAjaWYgQ09OU1RfQklUUyA9PSAxMwotI2RlZmluZSBGSVhfMF8yMTExNjQyNDMgICgoSU5UMzIpICAxNzMwKQkvKiBGSVgoMC4yMTExNjQyNDMpICovCi0jZGVmaW5lIEZJWF8wXzUwOTc5NTU3OSAgKChJTlQzMikgIDQxNzYpCS8qIEZJWCgwLjUwOTc5NTU3OSkgKi8KLSNkZWZpbmUgRklYXzBfNjAxMzQ0ODg3ICAoKElOVDMyKSAgNDkyNikJLyogRklYKDAuNjAxMzQ0ODg3KSAqLwotI2RlZmluZSBGSVhfMF83MjA5NTk4MjIgICgoSU5UMzIpICA1OTA2KQkvKiBGSVgoMC43MjA5NTk4MjIpICovCi0jZGVmaW5lIEZJWF8wXzc2NTM2Njg2NSAgKChJTlQzMikgIDYyNzApCS8qIEZJWCgwLjc2NTM2Njg2NSkgKi8KLSNkZWZpbmUgRklYXzBfODUwNDMwMDk1ICAoKElOVDMyKSAgNjk2NykJLyogRklYKDAuODUwNDMwMDk1KSAqLwotI2RlZmluZSBGSVhfMF84OTk5NzYyMjMgICgoSU5UMzIpICA3MzczKQkvKiBGSVgoMC44OTk5NzYyMjMpICovCi0jZGVmaW5lIEZJWF8xXzA2MTU5NDMzNyAgKChJTlQzMikgIDg2OTcpCS8qIEZJWCgxLjA2MTU5NDMzNykgKi8KLSNkZWZpbmUgRklYXzFfMjcyNzU4NTgwICAoKElOVDMyKSAgMTA0MjYpCS8qIEZJWCgxLjI3Mjc1ODU4MCkgKi8KLSNkZWZpbmUgRklYXzFfNDUxNzc0OTgxICAoKElOVDMyKSAgMTE4OTMpCS8qIEZJWCgxLjQ1MTc3NDk4MSkgKi8KLSNkZWZpbmUgRklYXzFfODQ3NzU5MDY1ICAoKElOVDMyKSAgMTUxMzcpCS8qIEZJWCgxLjg0Nzc1OTA2NSkgKi8KLSNkZWZpbmUgRklYXzJfMTcyNzM0ODAzICAoKElOVDMyKSAgMTc3OTkpCS8qIEZJWCgyLjE3MjczNDgwMykgKi8KLSNkZWZpbmUgRklYXzJfNTYyOTE1NDQ3ICAoKElOVDMyKSAgMjA5OTUpCS8qIEZJWCgyLjU2MjkxNTQ0NykgKi8KLSNkZWZpbmUgRklYXzNfNjI0NTA5Nzg1ICAoKElOVDMyKSAgMjk2OTIpCS8qIEZJWCgzLjYyNDUwOTc4NSkgKi8KKyNkZWZpbmUgRklYXzBfMjExMTY0MjQzICAoKElOVDMyKSAgMTczMCkgICAgICAgIC8qIEZJWCgwLjIxMTE2NDI0MykgKi8KKyNkZWZpbmUgRklYXzBfNTA5Nzk1NTc5ICAoKElOVDMyKSAgNDE3NikgICAgICAgIC8qIEZJWCgwLjUwOTc5NTU3OSkgKi8KKyNkZWZpbmUgRklYXzBfNjAxMzQ0ODg3ICAoKElOVDMyKSAgNDkyNikgICAgICAgIC8qIEZJWCgwLjYwMTM0NDg4NykgKi8KKyNkZWZpbmUgRklYXzBfNzIwOTU5ODIyICAoKElOVDMyKSAgNTkwNikgICAgICAgIC8qIEZJWCgwLjcyMDk1OTgyMikgKi8KKyNkZWZpbmUgRklYXzBfNzY1MzY2ODY1ICAoKElOVDMyKSAgNjI3MCkgICAgICAgIC8qIEZJWCgwLjc2NTM2Njg2NSkgKi8KKyNkZWZpbmUgRklYXzBfODUwNDMwMDk1ICAoKElOVDMyKSAgNjk2NykgICAgICAgIC8qIEZJWCgwLjg1MDQzMDA5NSkgKi8KKyNkZWZpbmUgRklYXzBfODk5OTc2MjIzICAoKElOVDMyKSAgNzM3MykgICAgICAgIC8qIEZJWCgwLjg5OTk3NjIyMykgKi8KKyNkZWZpbmUgRklYXzFfMDYxNTk0MzM3ICAoKElOVDMyKSAgODY5NykgICAgICAgIC8qIEZJWCgxLjA2MTU5NDMzNykgKi8KKyNkZWZpbmUgRklYXzFfMjcyNzU4NTgwICAoKElOVDMyKSAgMTA0MjYpICAgICAgIC8qIEZJWCgxLjI3Mjc1ODU4MCkgKi8KKyNkZWZpbmUgRklYXzFfNDUxNzc0OTgxICAoKElOVDMyKSAgMTE4OTMpICAgICAgIC8qIEZJWCgxLjQ1MTc3NDk4MSkgKi8KKyNkZWZpbmUgRklYXzFfODQ3NzU5MDY1ICAoKElOVDMyKSAgMTUxMzcpICAgICAgIC8qIEZJWCgxLjg0Nzc1OTA2NSkgKi8KKyNkZWZpbmUgRklYXzJfMTcyNzM0ODAzICAoKElOVDMyKSAgMTc3OTkpICAgICAgIC8qIEZJWCgyLjE3MjczNDgwMykgKi8KKyNkZWZpbmUgRklYXzJfNTYyOTE1NDQ3ICAoKElOVDMyKSAgMjA5OTUpICAgICAgIC8qIEZJWCgyLjU2MjkxNTQ0NykgKi8KKyNkZWZpbmUgRklYXzNfNjI0NTA5Nzg1ICAoKElOVDMyKSAgMjk2OTIpICAgICAgIC8qIEZJWCgzLjYyNDUwOTc4NSkgKi8KICNlbHNlCiAjZGVmaW5lIEZJWF8wXzIxMTE2NDI0MyAgRklYKDAuMjExMTY0MjQzKQogI2RlZmluZSBGSVhfMF81MDk3OTU1NzkgIEZJWCgwLjUwOTc5NTU3OSkKQEAgLTExNiw4ICsxMTYsOCBAQAogCiBHTE9CQUwodm9pZCkKIGpwZWdfaWRjdF80eDQgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAotCSAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLAotCSAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKKyAgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssCisgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKIHsKICAgSU5UMzIgdG1wMCwgdG1wMiwgdG1wMTAsIHRtcDEyOwogICBJTlQzMiB6MSwgejIsIHozLCB6NDsKQEAgLTEyNyw3ICsxMjcsNyBAQAogICBKU0FNUFJPVyBvdXRwdHI7CiAgIEpTQU1QTEUgKnJhbmdlX2xpbWl0ID0gSURDVF9yYW5nZV9saW1pdChjaW5mbyk7CiAgIGludCBjdHI7Ci0gIGludCB3b3Jrc3BhY2VbRENUU0laRSo0XTsJLyogYnVmZmVycyBkYXRhIGJldHdlZW4gcGFzc2VzICovCisgIGludCB3b3Jrc3BhY2VbRENUU0laRSo0XTsgICAgIC8qIGJ1ZmZlcnMgZGF0YSBiZXR3ZWVuIHBhc3NlcyAqLwogICBTSElGVF9URU1QUwogCiAgIC8qIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQsIHN0b3JlIGludG8gd29yayBhcnJheS4gKi8KQEAgLTE0MCw1NyArMTQwLDU3IEBACiAgICAgaWYgKGN0ciA9PSBEQ1RTSVpFLTQpCiAgICAgICBjb250aW51ZTsKICAgICBpZiAoaW5wdHJbRENUU0laRSoxXSA9PSAwICYmIGlucHRyW0RDVFNJWkUqMl0gPT0gMCAmJgotCWlucHRyW0RDVFNJWkUqM10gPT0gMCAmJiBpbnB0cltEQ1RTSVpFKjVdID09IDAgJiYKLQlpbnB0cltEQ1RTSVpFKjZdID09IDAgJiYgaW5wdHJbRENUU0laRSo3XSA9PSAwKSB7CisgICAgICAgIGlucHRyW0RDVFNJWkUqM10gPT0gMCAmJiBpbnB0cltEQ1RTSVpFKjVdID09IDAgJiYKKyAgICAgICAgaW5wdHJbRENUU0laRSo2XSA9PSAwICYmIGlucHRyW0RDVFNJWkUqN10gPT0gMCkgewogICAgICAgLyogQUMgdGVybXMgYWxsIHplcm87IHdlIG5lZWQgbm90IGV4YW1pbmUgdGVybSA0IGZvciA0eDQgb3V0cHV0ICovCiAgICAgICBpbnQgZGN2YWwgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMF0sIHF1YW50cHRyW0RDVFNJWkUqMF0pIDw8IFBBU1MxX0JJVFM7Ci0gICAgICAKKwogICAgICAgd3NwdHJbRENUU0laRSowXSA9IGRjdmFsOwogICAgICAgd3NwdHJbRENUU0laRSoxXSA9IGRjdmFsOwogICAgICAgd3NwdHJbRENUU0laRSoyXSA9IGRjdmFsOwogICAgICAgd3NwdHJbRENUU0laRSozXSA9IGRjdmFsOwotICAgICAgCisKICAgICAgIGNvbnRpbnVlOwogICAgIH0KLSAgICAKKwogICAgIC8qIEV2ZW4gcGFydCAqLwotICAgIAorCiAgICAgdG1wMCA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSowXSwgcXVhbnRwdHJbRENUU0laRSowXSk7CiAgICAgdG1wMCA8PD0gKENPTlNUX0JJVFMrMSk7Ci0gICAgCisKICAgICB6MiA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSoyXSwgcXVhbnRwdHJbRENUU0laRSoyXSk7CiAgICAgejMgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqNl0sIHF1YW50cHRyW0RDVFNJWkUqNl0pOwogCiAgICAgdG1wMiA9IE1VTFRJUExZKHoyLCBGSVhfMV84NDc3NTkwNjUpICsgTVVMVElQTFkoejMsIC0gRklYXzBfNzY1MzY2ODY1KTsKLSAgICAKKwogICAgIHRtcDEwID0gdG1wMCArIHRtcDI7CiAgICAgdG1wMTIgPSB0bXAwIC0gdG1wMjsKLSAgICAKKwogICAgIC8qIE9kZCBwYXJ0ICovCi0gICAgCisKICAgICB6MSA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo3XSwgcXVhbnRwdHJbRENUU0laRSo3XSk7CiAgICAgejIgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqNV0sIHF1YW50cHRyW0RDVFNJWkUqNV0pOwogICAgIHozID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjNdLCBxdWFudHB0cltEQ1RTSVpFKjNdKTsKICAgICB6NCA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSoxXSwgcXVhbnRwdHJbRENUU0laRSoxXSk7Ci0gICAgCisKICAgICB0bXAwID0gTVVMVElQTFkoejEsIC0gRklYXzBfMjExMTY0MjQzKSAvKiBzcXJ0KDIpICogKGMzLWMxKSAqLwotCSArIE1VTFRJUExZKHoyLCBGSVhfMV80NTE3NzQ5ODEpIC8qIHNxcnQoMikgKiAoYzMrYzcpICovCi0JICsgTVVMVElQTFkoejMsIC0gRklYXzJfMTcyNzM0ODAzKSAvKiBzcXJ0KDIpICogKC1jMS1jNSkgKi8KLQkgKyBNVUxUSVBMWSh6NCwgRklYXzFfMDYxNTk0MzM3KTsgLyogc3FydCgyKSAqIChjNStjNykgKi8KLSAgICAKKyAgICAgICAgICsgTVVMVElQTFkoejIsIEZJWF8xXzQ1MTc3NDk4MSkgLyogc3FydCgyKSAqIChjMytjNykgKi8KKyAgICAgICAgICsgTVVMVElQTFkoejMsIC0gRklYXzJfMTcyNzM0ODAzKSAvKiBzcXJ0KDIpICogKC1jMS1jNSkgKi8KKyAgICAgICAgICsgTVVMVElQTFkoejQsIEZJWF8xXzA2MTU5NDMzNyk7IC8qIHNxcnQoMikgKiAoYzUrYzcpICovCisKICAgICB0bXAyID0gTVVMVElQTFkoejEsIC0gRklYXzBfNTA5Nzk1NTc5KSAvKiBzcXJ0KDIpICogKGM3LWM1KSAqLwotCSArIE1VTFRJUExZKHoyLCAtIEZJWF8wXzYwMTM0NDg4NykgLyogc3FydCgyKSAqIChjNS1jMSkgKi8KLQkgKyBNVUxUSVBMWSh6MywgRklYXzBfODk5OTc2MjIzKSAvKiBzcXJ0KDIpICogKGMzLWM3KSAqLwotCSArIE1VTFRJUExZKHo0LCBGSVhfMl81NjI5MTU0NDcpOyAvKiBzcXJ0KDIpICogKGMxK2MzKSAqLworICAgICAgICAgKyBNVUxUSVBMWSh6MiwgLSBGSVhfMF82MDEzNDQ4ODcpIC8qIHNxcnQoMikgKiAoYzUtYzEpICovCisgICAgICAgICArIE1VTFRJUExZKHozLCBGSVhfMF84OTk5NzYyMjMpIC8qIHNxcnQoMikgKiAoYzMtYzcpICovCisgICAgICAgICArIE1VTFRJUExZKHo0LCBGSVhfMl81NjI5MTU0NDcpOyAvKiBzcXJ0KDIpICogKGMxK2MzKSAqLwogCiAgICAgLyogRmluYWwgb3V0cHV0IHN0YWdlICovCi0gICAgCisKICAgICB3c3B0cltEQ1RTSVpFKjBdID0gKGludCkgREVTQ0FMRSh0bXAxMCArIHRtcDIsIENPTlNUX0JJVFMtUEFTUzFfQklUUysxKTsKICAgICB3c3B0cltEQ1RTSVpFKjNdID0gKGludCkgREVTQ0FMRSh0bXAxMCAtIHRtcDIsIENPTlNUX0JJVFMtUEFTUzFfQklUUysxKTsKICAgICB3c3B0cltEQ1RTSVpFKjFdID0gKGludCkgREVTQ0FMRSh0bXAxMiArIHRtcDAsIENPTlNUX0JJVFMtUEFTUzFfQklUUysxKTsKICAgICB3c3B0cltEQ1RTSVpFKjJdID0gKGludCkgREVTQ0FMRSh0bXAxMiAtIHRtcDAsIENPTlNUX0JJVFMtUEFTUzFfQklUUysxKTsKICAgfQotICAKKwogICAvKiBQYXNzIDI6IHByb2Nlc3MgNCByb3dzIGZyb20gd29yayBhcnJheSwgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuICovCiAKICAgd3NwdHIgPSB3b3Jrc3BhY2U7CkBAIC0yMDAsNjQgKzIwMCw2NCBAQAogCiAjaWZuZGVmIE5PX1pFUk9fUk9XX1RFU1QKICAgICBpZiAod3NwdHJbMV0gPT0gMCAmJiB3c3B0clsyXSA9PSAwICYmIHdzcHRyWzNdID09IDAgJiYKLQl3c3B0cls1XSA9PSAwICYmIHdzcHRyWzZdID09IDAgJiYgd3NwdHJbN10gPT0gMCkgeworICAgICAgICB3c3B0cls1XSA9PSAwICYmIHdzcHRyWzZdID09IDAgJiYgd3NwdHJbN10gPT0gMCkgewogICAgICAgLyogQUMgdGVybXMgYWxsIHplcm8gKi8KICAgICAgIEpTQU1QTEUgZGN2YWwgPSByYW5nZV9saW1pdFsoaW50KSBERVNDQUxFKChJTlQzMikgd3NwdHJbMF0sIFBBU1MxX0JJVFMrMykKLQkJCQkgICYgUkFOR0VfTUFTS107Ci0gICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOworCiAgICAgICBvdXRwdHJbMF0gPSBkY3ZhbDsKICAgICAgIG91dHB0clsxXSA9IGRjdmFsOwogICAgICAgb3V0cHRyWzJdID0gZGN2YWw7CiAgICAgICBvdXRwdHJbM10gPSBkY3ZhbDsKLSAgICAgIAotICAgICAgd3NwdHIgKz0gRENUU0laRTsJCS8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLworCisgICAgICB3c3B0ciArPSBEQ1RTSVpFOyAgICAgICAgIC8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLwogICAgICAgY29udGludWU7CiAgICAgfQogI2VuZGlmCi0gICAgCisKICAgICAvKiBFdmVuIHBhcnQgKi8KLSAgICAKKwogICAgIHRtcDAgPSAoKElOVDMyKSB3c3B0clswXSkgPDwgKENPTlNUX0JJVFMrMSk7Ci0gICAgCisKICAgICB0bXAyID0gTVVMVElQTFkoKElOVDMyKSB3c3B0clsyXSwgRklYXzFfODQ3NzU5MDY1KQotCSArIE1VTFRJUExZKChJTlQzMikgd3NwdHJbNl0sIC0gRklYXzBfNzY1MzY2ODY1KTsKLSAgICAKKyAgICAgICAgICsgTVVMVElQTFkoKElOVDMyKSB3c3B0cls2XSwgLSBGSVhfMF83NjUzNjY4NjUpOworCiAgICAgdG1wMTAgPSB0bXAwICsgdG1wMjsKICAgICB0bXAxMiA9IHRtcDAgLSB0bXAyOwotICAgIAorCiAgICAgLyogT2RkIHBhcnQgKi8KLSAgICAKKwogICAgIHoxID0gKElOVDMyKSB3c3B0cls3XTsKICAgICB6MiA9IChJTlQzMikgd3NwdHJbNV07CiAgICAgejMgPSAoSU5UMzIpIHdzcHRyWzNdOwogICAgIHo0ID0gKElOVDMyKSB3c3B0clsxXTsKLSAgICAKKwogICAgIHRtcDAgPSBNVUxUSVBMWSh6MSwgLSBGSVhfMF8yMTExNjQyNDMpIC8qIHNxcnQoMikgKiAoYzMtYzEpICovCi0JICsgTVVMVElQTFkoejIsIEZJWF8xXzQ1MTc3NDk4MSkgLyogc3FydCgyKSAqIChjMytjNykgKi8KLQkgKyBNVUxUSVBMWSh6MywgLSBGSVhfMl8xNzI3MzQ4MDMpIC8qIHNxcnQoMikgKiAoLWMxLWM1KSAqLwotCSArIE1VTFRJUExZKHo0LCBGSVhfMV8wNjE1OTQzMzcpOyAvKiBzcXJ0KDIpICogKGM1K2M3KSAqLwotICAgIAorICAgICAgICAgKyBNVUxUSVBMWSh6MiwgRklYXzFfNDUxNzc0OTgxKSAvKiBzcXJ0KDIpICogKGMzK2M3KSAqLworICAgICAgICAgKyBNVUxUSVBMWSh6MywgLSBGSVhfMl8xNzI3MzQ4MDMpIC8qIHNxcnQoMikgKiAoLWMxLWM1KSAqLworICAgICAgICAgKyBNVUxUSVBMWSh6NCwgRklYXzFfMDYxNTk0MzM3KTsgLyogc3FydCgyKSAqIChjNStjNykgKi8KKwogICAgIHRtcDIgPSBNVUxUSVBMWSh6MSwgLSBGSVhfMF81MDk3OTU1NzkpIC8qIHNxcnQoMikgKiAoYzctYzUpICovCi0JICsgTVVMVElQTFkoejIsIC0gRklYXzBfNjAxMzQ0ODg3KSAvKiBzcXJ0KDIpICogKGM1LWMxKSAqLwotCSArIE1VTFRJUExZKHozLCBGSVhfMF84OTk5NzYyMjMpIC8qIHNxcnQoMikgKiAoYzMtYzcpICovCi0JICsgTVVMVElQTFkoejQsIEZJWF8yXzU2MjkxNTQ0Nyk7IC8qIHNxcnQoMikgKiAoYzErYzMpICovCisgICAgICAgICArIE1VTFRJUExZKHoyLCAtIEZJWF8wXzYwMTM0NDg4NykgLyogc3FydCgyKSAqIChjNS1jMSkgKi8KKyAgICAgICAgICsgTVVMVElQTFkoejMsIEZJWF8wXzg5OTk3NjIyMykgLyogc3FydCgyKSAqIChjMy1jNykgKi8KKyAgICAgICAgICsgTVVMVElQTFkoejQsIEZJWF8yXzU2MjkxNTQ0Nyk7IC8qIHNxcnQoMikgKiAoYzErYzMpICovCiAKICAgICAvKiBGaW5hbCBvdXRwdXQgc3RhZ2UgKi8KLSAgICAKKwogICAgIG91dHB0clswXSA9IHJhbmdlX2xpbWl0WyhpbnQpIERFU0NBTEUodG1wMTAgKyB0bXAyLAotCQkJCQkgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKzEpCi0JCQkgICAgJiBSQU5HRV9NQVNLXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKzEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBSQU5HRV9NQVNLXTsKICAgICBvdXRwdHJbM10gPSByYW5nZV9saW1pdFsoaW50KSBERVNDQUxFKHRtcDEwIC0gdG1wMiwKLQkJCQkJICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMysxKQotCQkJICAgICYgUkFOR0VfTUFTS107CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMysxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CiAgICAgb3V0cHRyWzFdID0gcmFuZ2VfbGltaXRbKGludCkgREVTQ0FMRSh0bXAxMiArIHRtcDAsCi0JCQkJCSAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMrMSkKLQkJCSAgICAmIFJBTkdFX01BU0tdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMrMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOwogICAgIG91dHB0clsyXSA9IHJhbmdlX2xpbWl0WyhpbnQpIERFU0NBTEUodG1wMTIgLSB0bXAwLAotCQkJCQkgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKzEpCi0JCQkgICAgJiBSQU5HRV9NQVNLXTsKLSAgICAKLSAgICB3c3B0ciArPSBEQ1RTSVpFOwkJLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgcm93ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMysxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgUkFOR0VfTUFTS107CisKKyAgICB3c3B0ciArPSBEQ1RTSVpFOyAgICAgICAgICAgLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgcm93ICovCiAgIH0KIH0KIApAQCAtMjY5LDggKzI2OSw4IEBACiAKIEdMT0JBTCh2b2lkKQoganBlZ19pZGN0XzJ4MiAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCi0JICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssCi0JICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQorICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywKKyAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQogewogICBJTlQzMiB0bXAwLCB0bXAxMCwgejE7CiAgIEpDT0VGUFRSIGlucHRyOwpAQCAtMjc5LDcgKzI3OSw3IEBACiAgIEpTQU1QUk9XIG91dHB0cjsKICAgSlNBTVBMRSAqcmFuZ2VfbGltaXQgPSBJRENUX3JhbmdlX2xpbWl0KGNpbmZvKTsKICAgaW50IGN0cjsKLSAgaW50IHdvcmtzcGFjZVtEQ1RTSVpFKjJdOwkvKiBidWZmZXJzIGRhdGEgYmV0d2VlbiBwYXNzZXMgKi8KKyAgaW50IHdvcmtzcGFjZVtEQ1RTSVpFKjJdOyAgICAgLyogYnVmZmVycyBkYXRhIGJldHdlZW4gcGFzc2VzICovCiAgIFNISUZUX1RFTVBTCiAKICAgLyogUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMgZnJvbSBpbnB1dCwgc3RvcmUgaW50byB3b3JrIGFycmF5LiAqLwpAQCAtMjkyLDIxICsyOTIsMjEgQEAKICAgICBpZiAoY3RyID09IERDVFNJWkUtMiB8fCBjdHIgPT0gRENUU0laRS00IHx8IGN0ciA9PSBEQ1RTSVpFLTYpCiAgICAgICBjb250aW51ZTsKICAgICBpZiAoaW5wdHJbRENUU0laRSoxXSA9PSAwICYmIGlucHRyW0RDVFNJWkUqM10gPT0gMCAmJgotCWlucHRyW0RDVFNJWkUqNV0gPT0gMCAmJiBpbnB0cltEQ1RTSVpFKjddID09IDApIHsKKyAgICAgICAgaW5wdHJbRENUU0laRSo1XSA9PSAwICYmIGlucHRyW0RDVFNJWkUqN10gPT0gMCkgewogICAgICAgLyogQUMgdGVybXMgYWxsIHplcm87IHdlIG5lZWQgbm90IGV4YW1pbmUgdGVybXMgMiw0LDYgZm9yIDJ4MiBvdXRwdXQgKi8KICAgICAgIGludCBkY3ZhbCA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSowXSwgcXVhbnRwdHJbRENUU0laRSowXSkgPDwgUEFTUzFfQklUUzsKLSAgICAgIAorCiAgICAgICB3c3B0cltEQ1RTSVpFKjBdID0gZGN2YWw7CiAgICAgICB3c3B0cltEQ1RTSVpFKjFdID0gZGN2YWw7Ci0gICAgICAKKwogICAgICAgY29udGludWU7CiAgICAgfQotICAgIAorCiAgICAgLyogRXZlbiBwYXJ0ICovCi0gICAgCisKICAgICB6MSA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSowXSwgcXVhbnRwdHJbRENUU0laRSowXSk7CiAgICAgdG1wMTAgPSB6MSA8PCAoQ09OU1RfQklUUysyKTsKLSAgICAKKwogICAgIC8qIE9kZCBwYXJ0ICovCiAKICAgICB6MSA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo3XSwgcXVhbnRwdHJbRENUU0laRSo3XSk7CkBAIC0zMTksMTEgKzMxOSwxMSBAQAogICAgIHRtcDAgKz0gTVVMVElQTFkoejEsIEZJWF8zXzYyNDUwOTc4NSk7IC8qIHNxcnQoMikgKiAoYzErYzMrYzUrYzcpICovCiAKICAgICAvKiBGaW5hbCBvdXRwdXQgc3RhZ2UgKi8KLSAgICAKKwogICAgIHdzcHRyW0RDVFNJWkUqMF0gPSAoaW50KSBERVNDQUxFKHRtcDEwICsgdG1wMCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKzIpOwogICAgIHdzcHRyW0RDVFNJWkUqMV0gPSAoaW50KSBERVNDQUxFKHRtcDEwIC0gdG1wMCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKzIpOwogICB9Ci0gIAorCiAgIC8qIFBhc3MgMjogcHJvY2VzcyAyIHJvd3MgZnJvbSB3b3JrIGFycmF5LCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4gKi8KIAogICB3c3B0ciA9IHdvcmtzcGFjZTsKQEAgLTMzNSwzNyArMzM1LDM3IEBACiAgICAgaWYgKHdzcHRyWzFdID09IDAgJiYgd3NwdHJbM10gPT0gMCAmJiB3c3B0cls1XSA9PSAwICYmIHdzcHRyWzddID09IDApIHsKICAgICAgIC8qIEFDIHRlcm1zIGFsbCB6ZXJvICovCiAgICAgICBKU0FNUExFIGRjdmFsID0gcmFuZ2VfbGltaXRbKGludCkgREVTQ0FMRSgoSU5UMzIpIHdzcHRyWzBdLCBQQVNTMV9CSVRTKzMpCi0JCQkJICAmIFJBTkdFX01BU0tdOwotICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBSQU5HRV9NQVNLXTsKKwogICAgICAgb3V0cHRyWzBdID0gZGN2YWw7CiAgICAgICBvdXRwdHJbMV0gPSBkY3ZhbDsKLSAgICAgIAotICAgICAgd3NwdHIgKz0gRENUU0laRTsJCS8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLworCisgICAgICB3c3B0ciArPSBEQ1RTSVpFOyAgICAgICAgIC8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLwogICAgICAgY29udGludWU7CiAgICAgfQogI2VuZGlmCi0gICAgCisKICAgICAvKiBFdmVuIHBhcnQgKi8KLSAgICAKKwogICAgIHRtcDEwID0gKChJTlQzMikgd3NwdHJbMF0pIDw8IChDT05TVF9CSVRTKzIpOwotICAgIAorCiAgICAgLyogT2RkIHBhcnQgKi8KIAogICAgIHRtcDAgPSBNVUxUSVBMWSgoSU5UMzIpIHdzcHRyWzddLCAtIEZJWF8wXzcyMDk1OTgyMikgLyogc3FydCgyKSAqIChjNy1jNStjMy1jMSkgKi8KLQkgKyBNVUxUSVBMWSgoSU5UMzIpIHdzcHRyWzVdLCBGSVhfMF84NTA0MzAwOTUpIC8qIHNxcnQoMikgKiAoLWMxK2MzK2M1K2M3KSAqLwotCSArIE1VTFRJUExZKChJTlQzMikgd3NwdHJbM10sIC0gRklYXzFfMjcyNzU4NTgwKSAvKiBzcXJ0KDIpICogKC1jMStjMy1jNS1jNykgKi8KLQkgKyBNVUxUSVBMWSgoSU5UMzIpIHdzcHRyWzFdLCBGSVhfM182MjQ1MDk3ODUpOyAvKiBzcXJ0KDIpICogKGMxK2MzK2M1K2M3KSAqLworICAgICAgICAgKyBNVUxUSVBMWSgoSU5UMzIpIHdzcHRyWzVdLCBGSVhfMF84NTA0MzAwOTUpIC8qIHNxcnQoMikgKiAoLWMxK2MzK2M1K2M3KSAqLworICAgICAgICAgKyBNVUxUSVBMWSgoSU5UMzIpIHdzcHRyWzNdLCAtIEZJWF8xXzI3Mjc1ODU4MCkgLyogc3FydCgyKSAqICgtYzErYzMtYzUtYzcpICovCisgICAgICAgICArIE1VTFRJUExZKChJTlQzMikgd3NwdHJbMV0sIEZJWF8zXzYyNDUwOTc4NSk7IC8qIHNxcnQoMikgKiAoYzErYzMrYzUrYzcpICovCiAKICAgICAvKiBGaW5hbCBvdXRwdXQgc3RhZ2UgKi8KLSAgICAKKwogICAgIG91dHB0clswXSA9IHJhbmdlX2xpbWl0WyhpbnQpIERFU0NBTEUodG1wMTAgKyB0bXAwLAotCQkJCQkgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKzIpCi0JCQkgICAgJiBSQU5HRV9NQVNLXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKzIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBSQU5HRV9NQVNLXTsKICAgICBvdXRwdHJbMV0gPSByYW5nZV9saW1pdFsoaW50KSBERVNDQUxFKHRtcDEwIC0gdG1wMCwKLQkJCQkJICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMysyKQotCQkJICAgICYgUkFOR0VfTUFTS107Ci0gICAgCi0gICAgd3NwdHIgKz0gRENUU0laRTsJCS8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMrMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFJBTkdFX01BU0tdOworCisgICAgd3NwdHIgKz0gRENUU0laRTsgICAgICAgICAgIC8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLwogICB9CiB9CiAKQEAgLTM3Nyw4ICszNzcsOCBAQAogCiBHTE9CQUwodm9pZCkKIGpwZWdfaWRjdF8xeDEgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAotCSAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLAotCSAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKKyAgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssCisgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKIHsKICAgaW50IGRjdmFsOwogICBJU0xPV19NVUxUX1RZUEUgKiBxdWFudHB0cjsKZGlmZiAtLWdpdCBhL2ppbmNsdWRlLmggYi9qaW5jbHVkZS5oCmluZGV4IDBhNGYxNTEuLmIxNGEzZmMgMTAwNjQ0Ci0tLSBhL2ppbmNsdWRlLmgKKysrIGIvamluY2x1ZGUuaApAQCAtMTcsOCArMTcsOCBAQAogCiAvKiBJbmNsdWRlIGF1dG8tY29uZmlnIGZpbGUgdG8gZmluZCBvdXQgd2hpY2ggc3lzdGVtIGluY2x1ZGUgZmlsZXMgd2UgbmVlZC4gKi8KIAotI2luY2x1ZGUgImpjb25maWcuaCIJCS8qIGF1dG8gY29uZmlndXJhdGlvbiBvcHRpb25zICovCi0jZGVmaW5lIEpDT05GSUdfSU5DTFVERUQJLyogc28gdGhhdCBqcGVnbGliLmggZG9lc24ndCBkbyBpdCBhZ2FpbiAqLworI2luY2x1ZGUgImpjb25maWcuaCIgICAgICAgICAgICAvKiBhdXRvIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyAqLworI2RlZmluZSBKQ09ORklHX0lOQ0xVREVEICAgICAgICAvKiBzbyB0aGF0IGpwZWdsaWIuaCBkb2Vzbid0IGRvIGl0IGFnYWluICovCiAKIC8qCiAgKiBXZSBuZWVkIHRoZSBOVUxMIG1hY3JvIGFuZCBzaXplX3QgdHlwZWRlZi4KQEAgLTU4LDE0ICs1OCwxNCBAQAogI2lmZGVmIE5FRURfQlNEX1NUUklOR1MKIAogI2luY2x1ZGUgPHN0cmluZ3MuaD4KLSNkZWZpbmUgTUVNWkVSTyh0YXJnZXQsc2l6ZSkJYnplcm8oKHZvaWQgKikodGFyZ2V0KSwgKHNpemVfdCkoc2l6ZSkpCi0jZGVmaW5lIE1FTUNPUFkoZGVzdCxzcmMsc2l6ZSkJYmNvcHkoKGNvbnN0IHZvaWQgKikoc3JjKSwgKHZvaWQgKikoZGVzdCksIChzaXplX3QpKHNpemUpKQorI2RlZmluZSBNRU1aRVJPKHRhcmdldCxzaXplKSAgICBiemVybygodm9pZCAqKSh0YXJnZXQpLCAoc2l6ZV90KShzaXplKSkKKyNkZWZpbmUgTUVNQ09QWShkZXN0LHNyYyxzaXplKSAgYmNvcHkoKGNvbnN0IHZvaWQgKikoc3JjKSwgKHZvaWQgKikoZGVzdCksIChzaXplX3QpKHNpemUpKQogCiAjZWxzZSAvKiBub3QgQlNELCBhc3N1bWUgQU5TSS9TeXNWIHN0cmluZyBsaWIgKi8KIAogI2luY2x1ZGUgPHN0cmluZy5oPgotI2RlZmluZSBNRU1aRVJPKHRhcmdldCxzaXplKQltZW1zZXQoKHZvaWQgKikodGFyZ2V0KSwgMCwgKHNpemVfdCkoc2l6ZSkpCi0jZGVmaW5lIE1FTUNPUFkoZGVzdCxzcmMsc2l6ZSkJbWVtY3B5KCh2b2lkICopKGRlc3QpLCAoY29uc3Qgdm9pZCAqKShzcmMpLCAoc2l6ZV90KShzaXplKSkKKyNkZWZpbmUgTUVNWkVSTyh0YXJnZXQsc2l6ZSkgICAgbWVtc2V0KCh2b2lkICopKHRhcmdldCksIDAsIChzaXplX3QpKHNpemUpKQorI2RlZmluZSBNRU1DT1BZKGRlc3Qsc3JjLHNpemUpICBtZW1jcHkoKHZvaWQgKikoZGVzdCksIChjb25zdCB2b2lkICopKHNyYyksIChzaXplX3QpKHNpemUpKQogCiAjZW5kaWYKIApAQCAtNzcsNyArNzcsNyBAQAogICogd2UgYWx3YXlzIHVzZSB0aGlzIFNJWkVPRigpIG1hY3JvIGluIHBsYWNlIG9mIHVzaW5nIHNpemVvZigpIGRpcmVjdGx5LgogICovCiAKLSNkZWZpbmUgU0laRU9GKG9iamVjdCkJKChzaXplX3QpIHNpemVvZihvYmplY3QpKQorI2RlZmluZSBTSVpFT0Yob2JqZWN0KSAgKChzaXplX3QpIHNpemVvZihvYmplY3QpKQogCiAvKgogICogVGhlIG1vZHVsZXMgdGhhdCB1c2UgZnJlYWQoKSBhbmQgZndyaXRlKCkgYWx3YXlzIGludm9rZSB0aGVtIHRocm91Z2gKZGlmZiAtLWdpdCBhL2ptZW1tZ3IuYyBiL2ptZW1tZ3IuYwppbmRleCBjZjMyNTI0Li4xNWI2MzI1IDEwMDY0NAotLS0gYS9qbWVtbWdyLmMKKysrIGIvam1lbW1nci5jCkBAIC0yNSwxMyArMjUsMTMgQEAKICAqLwogCiAjZGVmaW5lIEpQRUdfSU5URVJOQUxTCi0jZGVmaW5lIEFNX01FTU9SWV9NQU5BR0VSCS8qIHdlIGRlZmluZSBqdmlydF9YYXJyYXlfY29udHJvbCBzdHJ1Y3RzICovCisjZGVmaW5lIEFNX01FTU9SWV9NQU5BR0VSICAgICAgIC8qIHdlIGRlZmluZSBqdmlydF9YYXJyYXlfY29udHJvbCBzdHJ1Y3RzICovCiAjaW5jbHVkZSAiamluY2x1ZGUuaCIKICNpbmNsdWRlICJqcGVnbGliLmgiCi0jaW5jbHVkZSAiam1lbXN5cy5oIgkJLyogaW1wb3J0IHRoZSBzeXN0ZW0tZGVwZW5kZW50IGRlY2xhcmF0aW9ucyAqLworI2luY2x1ZGUgImptZW1zeXMuaCIgICAgICAgICAgICAvKiBpbXBvcnQgdGhlIHN5c3RlbS1kZXBlbmRlbnQgZGVjbGFyYXRpb25zICovCiAKICNpZm5kZWYgTk9fR0VURU5WCi0jaWZuZGVmIEhBVkVfU1RETElCX0gJCS8qIDxzdGRsaWIuaD4gc2hvdWxkIGRlY2xhcmUgZ2V0ZW52KCkgKi8KKyNpZm5kZWYgSEFWRV9TVERMSUJfSCAgICAgICAgICAgLyogPHN0ZGxpYi5oPiBzaG91bGQgZGVjbGFyZSBnZXRlbnYoKSAqLwogZXh0ZXJuIGNoYXIgKiBnZXRlbnYgSlBQKChjb25zdCBjaGFyICogbmFtZSkpOwogI2VuZGlmCiAjZW5kaWYKQEAgLTc4LDcgKzc4LDcgQEAKICAqIHN1Y2ggYSBjb21waWxlci4KICAqLwogCi0jaWZuZGVmIEFMSUdOX1NJWkUJCS8qIHNvIGNhbiBvdmVycmlkZSBmcm9tIGpjb25maWcuaCAqLworI2lmbmRlZiBBTElHTl9TSVpFICAgICAgICAgICAgICAvKiBzbyBjYW4gb3ZlcnJpZGUgZnJvbSBqY29uZmlnLmggKi8KICNpZm5kZWYgV0lUSF9TSU1ECiAjZGVmaW5lIEFMSUdOX1NJWkUgIFNJWkVPRihkb3VibGUpCiAjZWxzZQpAQCAtOTgsMTcgKzk4LDE3IEBACiB0eXBlZGVmIHN0cnVjdCBzbWFsbF9wb29sX3N0cnVjdCAqIHNtYWxsX3Bvb2xfcHRyOwogCiB0eXBlZGVmIHN0cnVjdCBzbWFsbF9wb29sX3N0cnVjdCB7Ci0gIHNtYWxsX3Bvb2xfcHRyIG5leHQ7CS8qIG5leHQgaW4gbGlzdCBvZiBwb29scyAqLwotICBzaXplX3QgYnl0ZXNfdXNlZDsJCS8qIGhvdyBtYW55IGJ5dGVzIGFscmVhZHkgdXNlZCB3aXRoaW4gcG9vbCAqLwotICBzaXplX3QgYnl0ZXNfbGVmdDsJCS8qIGJ5dGVzIHN0aWxsIGF2YWlsYWJsZSBpbiB0aGlzIHBvb2wgKi8KKyAgc21hbGxfcG9vbF9wdHIgbmV4dDsgIC8qIG5leHQgaW4gbGlzdCBvZiBwb29scyAqLworICBzaXplX3QgYnl0ZXNfdXNlZDsgICAgICAgICAgICAvKiBob3cgbWFueSBieXRlcyBhbHJlYWR5IHVzZWQgd2l0aGluIHBvb2wgKi8KKyAgc2l6ZV90IGJ5dGVzX2xlZnQ7ICAgICAgICAgICAgLyogYnl0ZXMgc3RpbGwgYXZhaWxhYmxlIGluIHRoaXMgcG9vbCAqLwogfSBzbWFsbF9wb29sX2hkcjsKIAogdHlwZWRlZiBzdHJ1Y3QgbGFyZ2VfcG9vbF9zdHJ1Y3QgRkFSICogbGFyZ2VfcG9vbF9wdHI7CiAKIHR5cGVkZWYgc3RydWN0IGxhcmdlX3Bvb2xfc3RydWN0IHsKLSAgbGFyZ2VfcG9vbF9wdHIgbmV4dDsJLyogbmV4dCBpbiBsaXN0IG9mIHBvb2xzICovCi0gIHNpemVfdCBieXRlc191c2VkOwkJLyogaG93IG1hbnkgYnl0ZXMgYWxyZWFkeSB1c2VkIHdpdGhpbiBwb29sICovCi0gIHNpemVfdCBieXRlc19sZWZ0OwkJLyogYnl0ZXMgc3RpbGwgYXZhaWxhYmxlIGluIHRoaXMgcG9vbCAqLworICBsYXJnZV9wb29sX3B0ciBuZXh0OyAgLyogbmV4dCBpbiBsaXN0IG9mIHBvb2xzICovCisgIHNpemVfdCBieXRlc191c2VkOyAgICAgICAgICAgIC8qIGhvdyBtYW55IGJ5dGVzIGFscmVhZHkgdXNlZCB3aXRoaW4gcG9vbCAqLworICBzaXplX3QgYnl0ZXNfbGVmdDsgICAgICAgICAgICAvKiBieXRlcyBzdGlsbCBhdmFpbGFibGUgaW4gdGhpcyBwb29sICovCiB9IGxhcmdlX3Bvb2xfaGRyOwogCiAvKgpAQCAtMTE2LDcgKzExNiw3IEBACiAgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgewotICBzdHJ1Y3QganBlZ19tZW1vcnlfbWdyIHB1YjsJLyogcHVibGljIGZpZWxkcyAqLworICBzdHJ1Y3QganBlZ19tZW1vcnlfbWdyIHB1YjsgICAvKiBwdWJsaWMgZmllbGRzICovCiAKICAgLyogRWFjaCBwb29sIGlkZW50aWZpZXIgKGxpZmV0aW1lIGNsYXNzKSBuYW1lcyBhIGxpbmtlZCBsaXN0IG9mIHBvb2xzLiAqLwogICBzbWFsbF9wb29sX3B0ciBzbWFsbF9saXN0W0pQT09MX05VTVBPT0xTXTsKQEAgLTEzNiw3ICsxMzYsNyBAQAogICAvKiBhbGxvY19zYXJyYXkgYW5kIGFsbG9jX2JhcnJheSBzZXQgdGhpcyB2YWx1ZSBmb3IgdXNlIGJ5IHZpcnR1YWwKICAgICogYXJyYXkgcm91dGluZXMuCiAgICAqLwotICBKRElNRU5TSU9OIGxhc3Rfcm93c3BlcmNodW5rOwkvKiBmcm9tIG1vc3QgcmVjZW50IGFsbG9jX3NhcnJheS9iYXJyYXkgKi8KKyAgSkRJTUVOU0lPTiBsYXN0X3Jvd3NwZXJjaHVuazsgLyogZnJvbSBtb3N0IHJlY2VudCBhbGxvY19zYXJyYXkvYmFycmF5ICovCiB9IG15X21lbW9yeV9tZ3I7CiAKIHR5cGVkZWYgbXlfbWVtb3J5X21nciAqIG15X21lbV9wdHI7CkBAIC0xNTAsMzkgKzE1MCwzOSBAQAogICovCiAKIHN0cnVjdCBqdmlydF9zYXJyYXlfY29udHJvbCB7Ci0gIEpTQU1QQVJSQVkgbWVtX2J1ZmZlcjsJLyogPT4gdGhlIGluLW1lbW9yeSBidWZmZXIgKi8KLSAgSkRJTUVOU0lPTiByb3dzX2luX2FycmF5OwkvKiB0b3RhbCB2aXJ0dWFsIGFycmF5IGhlaWdodCAqLwotICBKRElNRU5TSU9OIHNhbXBsZXNwZXJyb3c7CS8qIHdpZHRoIG9mIGFycmF5IChhbmQgb2YgbWVtb3J5IGJ1ZmZlcikgKi8KLSAgSkRJTUVOU0lPTiBtYXhhY2Nlc3M7CQkvKiBtYXggcm93cyBhY2Nlc3NlZCBieSBhY2Nlc3NfdmlydF9zYXJyYXkgKi8KLSAgSkRJTUVOU0lPTiByb3dzX2luX21lbTsJLyogaGVpZ2h0IG9mIG1lbW9yeSBidWZmZXIgKi8KLSAgSkRJTUVOU0lPTiByb3dzcGVyY2h1bms7CS8qIGFsbG9jYXRpb24gY2h1bmsgc2l6ZSBpbiBtZW1fYnVmZmVyICovCi0gIEpESU1FTlNJT04gY3VyX3N0YXJ0X3JvdzsJLyogZmlyc3QgbG9naWNhbCByb3cgIyBpbiB0aGUgYnVmZmVyICovCi0gIEpESU1FTlNJT04gZmlyc3RfdW5kZWZfcm93OwkvKiByb3cgIyBvZiBmaXJzdCB1bmluaXRpYWxpemVkIHJvdyAqLwotICBib29sZWFuIHByZV96ZXJvOwkJLyogcHJlLXplcm8gbW9kZSByZXF1ZXN0ZWQ/ICovCi0gIGJvb2xlYW4gZGlydHk7CQkvKiBkbyBjdXJyZW50IGJ1ZmZlciBjb250ZW50cyBuZWVkIHdyaXR0ZW4/ICovCi0gIGJvb2xlYW4gYl9zX29wZW47CQkvKiBpcyBiYWNraW5nLXN0b3JlIGRhdGEgdmFsaWQ/ICovCi0gIGp2aXJ0X3NhcnJheV9wdHIgbmV4dDsJLyogbGluayB0byBuZXh0IHZpcnR1YWwgc2FycmF5IGNvbnRyb2wgYmxvY2sgKi8KLSAgYmFja2luZ19zdG9yZV9pbmZvIGJfc19pbmZvOwkvKiBTeXN0ZW0tZGVwZW5kZW50IGNvbnRyb2wgaW5mbyAqLworICBKU0FNUEFSUkFZIG1lbV9idWZmZXI7ICAgICAgICAvKiA9PiB0aGUgaW4tbWVtb3J5IGJ1ZmZlciAqLworICBKRElNRU5TSU9OIHJvd3NfaW5fYXJyYXk7ICAgICAvKiB0b3RhbCB2aXJ0dWFsIGFycmF5IGhlaWdodCAqLworICBKRElNRU5TSU9OIHNhbXBsZXNwZXJyb3c7ICAgICAvKiB3aWR0aCBvZiBhcnJheSAoYW5kIG9mIG1lbW9yeSBidWZmZXIpICovCisgIEpESU1FTlNJT04gbWF4YWNjZXNzOyAgICAgICAgIC8qIG1heCByb3dzIGFjY2Vzc2VkIGJ5IGFjY2Vzc192aXJ0X3NhcnJheSAqLworICBKRElNRU5TSU9OIHJvd3NfaW5fbWVtOyAgICAgICAvKiBoZWlnaHQgb2YgbWVtb3J5IGJ1ZmZlciAqLworICBKRElNRU5TSU9OIHJvd3NwZXJjaHVuazsgICAgICAvKiBhbGxvY2F0aW9uIGNodW5rIHNpemUgaW4gbWVtX2J1ZmZlciAqLworICBKRElNRU5TSU9OIGN1cl9zdGFydF9yb3c7ICAgICAvKiBmaXJzdCBsb2dpY2FsIHJvdyAjIGluIHRoZSBidWZmZXIgKi8KKyAgSkRJTUVOU0lPTiBmaXJzdF91bmRlZl9yb3c7ICAgLyogcm93ICMgb2YgZmlyc3QgdW5pbml0aWFsaXplZCByb3cgKi8KKyAgYm9vbGVhbiBwcmVfemVybzsgICAgICAgICAgICAgLyogcHJlLXplcm8gbW9kZSByZXF1ZXN0ZWQ/ICovCisgIGJvb2xlYW4gZGlydHk7ICAgICAgICAgICAgICAgIC8qIGRvIGN1cnJlbnQgYnVmZmVyIGNvbnRlbnRzIG5lZWQgd3JpdHRlbj8gKi8KKyAgYm9vbGVhbiBiX3Nfb3BlbjsgICAgICAgICAgICAgLyogaXMgYmFja2luZy1zdG9yZSBkYXRhIHZhbGlkPyAqLworICBqdmlydF9zYXJyYXlfcHRyIG5leHQ7ICAgICAgICAvKiBsaW5rIHRvIG5leHQgdmlydHVhbCBzYXJyYXkgY29udHJvbCBibG9jayAqLworICBiYWNraW5nX3N0b3JlX2luZm8gYl9zX2luZm87ICAvKiBTeXN0ZW0tZGVwZW5kZW50IGNvbnRyb2wgaW5mbyAqLwogfTsKIAogc3RydWN0IGp2aXJ0X2JhcnJheV9jb250cm9sIHsKLSAgSkJMT0NLQVJSQVkgbWVtX2J1ZmZlcjsJLyogPT4gdGhlIGluLW1lbW9yeSBidWZmZXIgKi8KLSAgSkRJTUVOU0lPTiByb3dzX2luX2FycmF5OwkvKiB0b3RhbCB2aXJ0dWFsIGFycmF5IGhlaWdodCAqLwotICBKRElNRU5TSU9OIGJsb2Nrc3BlcnJvdzsJLyogd2lkdGggb2YgYXJyYXkgKGFuZCBvZiBtZW1vcnkgYnVmZmVyKSAqLwotICBKRElNRU5TSU9OIG1heGFjY2VzczsJCS8qIG1heCByb3dzIGFjY2Vzc2VkIGJ5IGFjY2Vzc192aXJ0X2JhcnJheSAqLwotICBKRElNRU5TSU9OIHJvd3NfaW5fbWVtOwkvKiBoZWlnaHQgb2YgbWVtb3J5IGJ1ZmZlciAqLwotICBKRElNRU5TSU9OIHJvd3NwZXJjaHVuazsJLyogYWxsb2NhdGlvbiBjaHVuayBzaXplIGluIG1lbV9idWZmZXIgKi8KLSAgSkRJTUVOU0lPTiBjdXJfc3RhcnRfcm93OwkvKiBmaXJzdCBsb2dpY2FsIHJvdyAjIGluIHRoZSBidWZmZXIgKi8KLSAgSkRJTUVOU0lPTiBmaXJzdF91bmRlZl9yb3c7CS8qIHJvdyAjIG9mIGZpcnN0IHVuaW5pdGlhbGl6ZWQgcm93ICovCi0gIGJvb2xlYW4gcHJlX3plcm87CQkvKiBwcmUtemVybyBtb2RlIHJlcXVlc3RlZD8gKi8KLSAgYm9vbGVhbiBkaXJ0eTsJCS8qIGRvIGN1cnJlbnQgYnVmZmVyIGNvbnRlbnRzIG5lZWQgd3JpdHRlbj8gKi8KLSAgYm9vbGVhbiBiX3Nfb3BlbjsJCS8qIGlzIGJhY2tpbmctc3RvcmUgZGF0YSB2YWxpZD8gKi8KLSAganZpcnRfYmFycmF5X3B0ciBuZXh0OwkvKiBsaW5rIHRvIG5leHQgdmlydHVhbCBiYXJyYXkgY29udHJvbCBibG9jayAqLwotICBiYWNraW5nX3N0b3JlX2luZm8gYl9zX2luZm87CS8qIFN5c3RlbS1kZXBlbmRlbnQgY29udHJvbCBpbmZvICovCisgIEpCTE9DS0FSUkFZIG1lbV9idWZmZXI7ICAgICAgIC8qID0+IHRoZSBpbi1tZW1vcnkgYnVmZmVyICovCisgIEpESU1FTlNJT04gcm93c19pbl9hcnJheTsgICAgIC8qIHRvdGFsIHZpcnR1YWwgYXJyYXkgaGVpZ2h0ICovCisgIEpESU1FTlNJT04gYmxvY2tzcGVycm93OyAgICAgIC8qIHdpZHRoIG9mIGFycmF5IChhbmQgb2YgbWVtb3J5IGJ1ZmZlcikgKi8KKyAgSkRJTUVOU0lPTiBtYXhhY2Nlc3M7ICAgICAgICAgLyogbWF4IHJvd3MgYWNjZXNzZWQgYnkgYWNjZXNzX3ZpcnRfYmFycmF5ICovCisgIEpESU1FTlNJT04gcm93c19pbl9tZW07ICAgICAgIC8qIGhlaWdodCBvZiBtZW1vcnkgYnVmZmVyICovCisgIEpESU1FTlNJT04gcm93c3BlcmNodW5rOyAgICAgIC8qIGFsbG9jYXRpb24gY2h1bmsgc2l6ZSBpbiBtZW1fYnVmZmVyICovCisgIEpESU1FTlNJT04gY3VyX3N0YXJ0X3JvdzsgICAgIC8qIGZpcnN0IGxvZ2ljYWwgcm93ICMgaW4gdGhlIGJ1ZmZlciAqLworICBKRElNRU5TSU9OIGZpcnN0X3VuZGVmX3JvdzsgICAvKiByb3cgIyBvZiBmaXJzdCB1bmluaXRpYWxpemVkIHJvdyAqLworICBib29sZWFuIHByZV96ZXJvOyAgICAgICAgICAgICAvKiBwcmUtemVybyBtb2RlIHJlcXVlc3RlZD8gKi8KKyAgYm9vbGVhbiBkaXJ0eTsgICAgICAgICAgICAgICAgLyogZG8gY3VycmVudCBidWZmZXIgY29udGVudHMgbmVlZCB3cml0dGVuPyAqLworICBib29sZWFuIGJfc19vcGVuOyAgICAgICAgICAgICAvKiBpcyBiYWNraW5nLXN0b3JlIGRhdGEgdmFsaWQ/ICovCisgIGp2aXJ0X2JhcnJheV9wdHIgbmV4dDsgICAgICAgIC8qIGxpbmsgdG8gbmV4dCB2aXJ0dWFsIGJhcnJheSBjb250cm9sIGJsb2NrICovCisgIGJhY2tpbmdfc3RvcmVfaW5mbyBiX3NfaW5mbzsgIC8qIFN5c3RlbS1kZXBlbmRlbnQgY29udHJvbCBpbmZvICovCiB9OwogCiAKLSNpZmRlZiBNRU1fU1RBVFMJCS8qIG9wdGlvbmFsIGV4dHJhIHN0dWZmIGZvciBzdGF0aXN0aWNzICovCisjaWZkZWYgTUVNX1NUQVRTICAgICAgICAgICAgICAgIC8qIG9wdGlvbmFsIGV4dHJhIHN0dWZmIGZvciBzdGF0aXN0aWNzICovCiAKIExPQ0FMKHZvaWQpCiBwcmludF9tZW1fc3RhdHMgKGpfY29tbW9uX3B0ciBjaW5mbywgaW50IHBvb2xfaWQpCkBAIC0xOTYsMTkgKzE5NiwxOSBAQAogICAgKiBUaGlzIGlzIGhlbHBmdWwgYmVjYXVzZSBtZXNzYWdlIHBhcm0gYXJyYXkgY2FuJ3QgaGFuZGxlIGxvbmdzLgogICAgKi8KICAgZnByaW50ZihzdGRlcnIsICJGcmVlaW5nIHBvb2wgJWQsIHRvdGFsIHNwYWNlID0gJWxkXG4iLAotCSAgcG9vbF9pZCwgbWVtLT50b3RhbF9zcGFjZV9hbGxvY2F0ZWQpOworICAgICAgICAgIHBvb2xfaWQsIG1lbS0+dG90YWxfc3BhY2VfYWxsb2NhdGVkKTsKIAogICBmb3IgKGxoZHJfcHRyID0gbWVtLT5sYXJnZV9saXN0W3Bvb2xfaWRdOyBsaGRyX3B0ciAhPSBOVUxMOwogICAgICAgIGxoZHJfcHRyID0gbGhkcl9wdHItPm5leHQpIHsKICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgTGFyZ2UgY2h1bmsgdXNlZCAlbGRcbiIsCi0JICAgIChsb25nKSBsaGRyX3B0ci0+Ynl0ZXNfdXNlZCk7CisgICAgICAgICAgICAobG9uZykgbGhkcl9wdHItPmJ5dGVzX3VzZWQpOwogICB9CiAKICAgZm9yIChzaGRyX3B0ciA9IG1lbS0+c21hbGxfbGlzdFtwb29sX2lkXTsgc2hkcl9wdHIgIT0gTlVMTDsKICAgICAgICBzaGRyX3B0ciA9IHNoZHJfcHRyLT5uZXh0KSB7CiAgICAgZnByaW50ZihzdGRlcnIsICIgIFNtYWxsIGNodW5rIHVzZWQgJWxkIGZyZWUgJWxkXG4iLAotCSAgICAobG9uZykgc2hkcl9wdHItPmJ5dGVzX3VzZWQsCi0JICAgIChsb25nKSBzaGRyX3B0ci0+Ynl0ZXNfbGVmdCk7CisgICAgICAgICAgICAobG9uZykgc2hkcl9wdHItPmJ5dGVzX3VzZWQsCisgICAgICAgICAgICAobG9uZykgc2hkcl9wdHItPmJ5dGVzX2xlZnQpOwogICB9CiB9CiAKQEAgLTIyMSw3ICsyMjEsNyBAQAogLyogSWYgd2UgY29tcGlsZWQgTUVNX1NUQVRTIHN1cHBvcnQsIHJlcG9ydCBhbGxvYyByZXF1ZXN0cyBiZWZvcmUgZHlpbmcgKi8KIHsKICNpZmRlZiBNRU1fU1RBVFMKLSAgY2luZm8tPmVyci0+dHJhY2VfbGV2ZWwgPSAyOwkvKiBmb3JjZSBzZWxmX2Rlc3RydWN0IHRvIHJlcG9ydCBzdGF0cyAqLworICBjaW5mby0+ZXJyLT50cmFjZV9sZXZlbCA9IDI7ICAvKiBmb3JjZSBzZWxmX2Rlc3RydWN0IHRvIHJlcG9ydCBzdGF0cyAqLwogI2VuZGlmCiAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX09VVF9PRl9NRU1PUlksIHdoaWNoKTsKIH0KQEAgLTI0NCwxOSArMjQ0LDE5IEBACiAgKiBhZGp1c3RtZW50LgogICovCiAKLXN0YXRpYyBjb25zdCBzaXplX3QgZmlyc3RfcG9vbF9zbG9wW0pQT09MX05VTVBPT0xTXSA9IAorc3RhdGljIGNvbnN0IHNpemVfdCBmaXJzdF9wb29sX3Nsb3BbSlBPT0xfTlVNUE9PTFNdID0KIHsKLQkxNjAwLAkJCS8qIGZpcnN0IFBFUk1BTkVOVCBwb29sICovCi0JMTYwMDAJCQkvKiBmaXJzdCBJTUFHRSBwb29sICovCisgICAgICAgIDE2MDAsICAgICAgICAgICAgICAgICAgIC8qIGZpcnN0IFBFUk1BTkVOVCBwb29sICovCisgICAgICAgIDE2MDAwICAgICAgICAgICAgICAgICAgIC8qIGZpcnN0IElNQUdFIHBvb2wgKi8KIH07CiAKLXN0YXRpYyBjb25zdCBzaXplX3QgZXh0cmFfcG9vbF9zbG9wW0pQT09MX05VTVBPT0xTXSA9IAorc3RhdGljIGNvbnN0IHNpemVfdCBleHRyYV9wb29sX3Nsb3BbSlBPT0xfTlVNUE9PTFNdID0KIHsKLQkwLAkJCS8qIGFkZGl0aW9uYWwgUEVSTUFORU5UIHBvb2xzICovCi0JNTAwMAkJCS8qIGFkZGl0aW9uYWwgSU1BR0UgcG9vbHMgKi8KKyAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgLyogYWRkaXRpb25hbCBQRVJNQU5FTlQgcG9vbHMgKi8KKyAgICAgICAgNTAwMCAgICAgICAgICAgICAgICAgICAgLyogYWRkaXRpb25hbCBJTUFHRSBwb29scyAqLwogfTsKIAotI2RlZmluZSBNSU5fU0xPUCAgNTAJCS8qIGdyZWF0ZXIgdGhhbiAwIHRvIGF2b2lkIGZ1dGlsZSBsb29waW5nICovCisjZGVmaW5lIE1JTl9TTE9QICA1MCAgICAgICAgICAgIC8qIGdyZWF0ZXIgdGhhbiAwIHRvIGF2b2lkIGZ1dGlsZSBsb29waW5nICovCiAKIAogTUVUSE9EREVGKHZvaWQgKikKQEAgLTI3OCwxNiArMjc4LDE2IEBACiAKICAgLyogQ2hlY2sgZm9yIHVuc2F0aXNmaWFibGUgcmVxdWVzdCAoZG8gbm93IHRvIGVuc3VyZSBubyBvdmVyZmxvdyBiZWxvdykgKi8KICAgaWYgKChTSVpFT0Yoc21hbGxfcG9vbF9oZHIpICsgc2l6ZW9mb2JqZWN0ICsgQUxJR05fU0laRSAtIDEpID4gTUFYX0FMTE9DX0NIVU5LKQotICAgIG91dF9vZl9tZW1vcnkoY2luZm8sIDEpOwkvKiByZXF1ZXN0IGV4Y2VlZHMgbWFsbG9jJ3MgYWJpbGl0eSAqLworICAgIG91dF9vZl9tZW1vcnkoY2luZm8sIDEpOyAgICAvKiByZXF1ZXN0IGV4Y2VlZHMgbWFsbG9jJ3MgYWJpbGl0eSAqLwogCiAgIC8qIFNlZSBpZiBzcGFjZSBpcyBhdmFpbGFibGUgaW4gYW55IGV4aXN0aW5nIHBvb2wgKi8KICAgaWYgKHBvb2xfaWQgPCAwIHx8IHBvb2xfaWQgPj0gSlBPT0xfTlVNUE9PTFMpCi0gICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1BPT0xfSUQsIHBvb2xfaWQpOwkvKiBzYWZldHkgY2hlY2sgKi8KKyAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfUE9PTF9JRCwgcG9vbF9pZCk7IC8qIHNhZmV0eSBjaGVjayAqLwogICBwcmV2X2hkcl9wdHIgPSBOVUxMOwogICBoZHJfcHRyID0gbWVtLT5zbWFsbF9saXN0W3Bvb2xfaWRdOwogICB3aGlsZSAoaGRyX3B0ciAhPSBOVUxMKSB7CiAgICAgaWYgKGhkcl9wdHItPmJ5dGVzX2xlZnQgPj0gc2l6ZW9mb2JqZWN0KQotICAgICAgYnJlYWs7CQkJLyogZm91bmQgcG9vbCB3aXRoIGVub3VnaCBzcGFjZSAqLworICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAvKiBmb3VuZCBwb29sIHdpdGggZW5vdWdoIHNwYWNlICovCiAgICAgcHJldl9oZHJfcHRyID0gaGRyX3B0cjsKICAgICBoZHJfcHRyID0gaGRyX3B0ci0+bmV4dDsKICAgfQpAQCAtMjk2LDcgKzI5Niw3IEBACiAgIGlmIChoZHJfcHRyID09IE5VTEwpIHsKICAgICAvKiBtaW5fcmVxdWVzdCBpcyB3aGF0IHdlIG5lZWQgbm93LCBzbG9wIGlzIHdoYXQgd2lsbCBiZSBsZWZ0b3ZlciAqLwogICAgIG1pbl9yZXF1ZXN0ID0gU0laRU9GKHNtYWxsX3Bvb2xfaGRyKSArIHNpemVvZm9iamVjdCArIEFMSUdOX1NJWkUgLSAxOwotICAgIGlmIChwcmV2X2hkcl9wdHIgPT0gTlVMTCkJLyogZmlyc3QgcG9vbCBpbiBjbGFzcz8gKi8KKyAgICBpZiAocHJldl9oZHJfcHRyID09IE5VTEwpICAgLyogZmlyc3QgcG9vbCBpbiBjbGFzcz8gKi8KICAgICAgIHNsb3AgPSBmaXJzdF9wb29sX3Nsb3BbcG9vbF9pZF07CiAgICAgZWxzZQogICAgICAgc2xvcCA9IGV4dHJhX3Bvb2xfc2xvcFtwb29sX2lkXTsKQEAgLTMwNywxNyArMzA3LDE3IEBACiAgICAgZm9yICg7OykgewogICAgICAgaGRyX3B0ciA9IChzbWFsbF9wb29sX3B0cikganBlZ19nZXRfc21hbGwoY2luZm8sIG1pbl9yZXF1ZXN0ICsgc2xvcCk7CiAgICAgICBpZiAoaGRyX3B0ciAhPSBOVUxMKQotCWJyZWFrOworICAgICAgICBicmVhazsKICAgICAgIHNsb3AgLz0gMjsKLSAgICAgIGlmIChzbG9wIDwgTUlOX1NMT1ApCS8qIGdpdmUgdXAgd2hlbiBpdCBnZXRzIHJlYWwgc21hbGwgKi8KLQlvdXRfb2ZfbWVtb3J5KGNpbmZvLCAyKTsgLyoganBlZ19nZXRfc21hbGwgZmFpbGVkICovCisgICAgICBpZiAoc2xvcCA8IE1JTl9TTE9QKSAgICAgIC8qIGdpdmUgdXAgd2hlbiBpdCBnZXRzIHJlYWwgc21hbGwgKi8KKyAgICAgICAgb3V0X29mX21lbW9yeShjaW5mbywgMik7IC8qIGpwZWdfZ2V0X3NtYWxsIGZhaWxlZCAqLwogICAgIH0KICAgICBtZW0tPnRvdGFsX3NwYWNlX2FsbG9jYXRlZCArPSBtaW5fcmVxdWVzdCArIHNsb3A7CiAgICAgLyogU3VjY2VzcywgaW5pdGlhbGl6ZSB0aGUgbmV3IHBvb2wgaGVhZGVyIGFuZCBhZGQgdG8gZW5kIG9mIGxpc3QgKi8KICAgICBoZHJfcHRyLT5uZXh0ID0gTlVMTDsKICAgICBoZHJfcHRyLT5ieXRlc191c2VkID0gMDsKICAgICBoZHJfcHRyLT5ieXRlc19sZWZ0ID0gc2l6ZW9mb2JqZWN0ICsgc2xvcDsKLSAgICBpZiAocHJldl9oZHJfcHRyID09IE5VTEwpCS8qIGZpcnN0IHBvb2wgaW4gY2xhc3M/ICovCisgICAgaWYgKHByZXZfaGRyX3B0ciA9PSBOVUxMKSAgIC8qIGZpcnN0IHBvb2wgaW4gY2xhc3M/ICovCiAgICAgICBtZW0tPnNtYWxsX2xpc3RbcG9vbF9pZF0gPSBoZHJfcHRyOwogICAgIGVsc2UKICAgICAgIHByZXZfaGRyX3B0ci0+bmV4dCA9IGhkcl9wdHI7CkBAIC0zNjcsMTcgKzM2NywxNyBAQAogCiAgIC8qIENoZWNrIGZvciB1bnNhdGlzZmlhYmxlIHJlcXVlc3QgKGRvIG5vdyB0byBlbnN1cmUgbm8gb3ZlcmZsb3cgYmVsb3cpICovCiAgIGlmICgoU0laRU9GKGxhcmdlX3Bvb2xfaGRyKSArIHNpemVvZm9iamVjdCArIEFMSUdOX1NJWkUgLSAxKSA+IE1BWF9BTExPQ19DSFVOSykKLSAgICBvdXRfb2ZfbWVtb3J5KGNpbmZvLCAzKTsJLyogcmVxdWVzdCBleGNlZWRzIG1hbGxvYydzIGFiaWxpdHkgKi8KKyAgICBvdXRfb2ZfbWVtb3J5KGNpbmZvLCAzKTsgICAgLyogcmVxdWVzdCBleGNlZWRzIG1hbGxvYydzIGFiaWxpdHkgKi8KIAogICAvKiBBbHdheXMgbWFrZSBhIG5ldyBwb29sICovCiAgIGlmIChwb29sX2lkIDwgMCB8fCBwb29sX2lkID49IEpQT09MX05VTVBPT0xTKQotICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9QT09MX0lELCBwb29sX2lkKTsJLyogc2FmZXR5IGNoZWNrICovCisgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1BPT0xfSUQsIHBvb2xfaWQpOyAvKiBzYWZldHkgY2hlY2sgKi8KIAogICBoZHJfcHRyID0gKGxhcmdlX3Bvb2xfcHRyKSBqcGVnX2dldF9sYXJnZShjaW5mbywgc2l6ZW9mb2JqZWN0ICsKLQkJCQkJICAgIFNJWkVPRihsYXJnZV9wb29sX2hkcikgKwotCQkJCQkgICAgQUxJR05fU0laRSAtIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSVpFT0YobGFyZ2VfcG9vbF9oZHIpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUxJR05fU0laRSAtIDEpOwogICBpZiAoaGRyX3B0ciA9PSBOVUxMKQotICAgIG91dF9vZl9tZW1vcnkoY2luZm8sIDQpOwkvKiBqcGVnX2dldF9sYXJnZSBmYWlsZWQgKi8KKyAgICBvdXRfb2ZfbWVtb3J5KGNpbmZvLCA0KTsgICAgLyoganBlZ19nZXRfbGFyZ2UgZmFpbGVkICovCiAgIG1lbS0+dG90YWxfc3BhY2VfYWxsb2NhdGVkICs9IHNpemVvZm9iamVjdCArIFNJWkVPRihsYXJnZV9wb29sX2hkcikgKyBBTElHTl9TSVpFIC0gMTsKIAogICAvKiBTdWNjZXNzLCBpbml0aWFsaXplIHRoZSBuZXcgcG9vbCBoZWFkZXIgYW5kIGFkZCB0byBsaXN0ICovCkBAIC00MTcsNyArNDE3LDcgQEAKIAogTUVUSE9EREVGKEpTQU1QQVJSQVkpCiBhbGxvY19zYXJyYXkgKGpfY29tbW9uX3B0ciBjaW5mbywgaW50IHBvb2xfaWQsCi0JICAgICAgSkRJTUVOU0lPTiBzYW1wbGVzcGVycm93LCBKRElNRU5TSU9OIG51bXJvd3MpCisgICAgICAgICAgICAgIEpESU1FTlNJT04gc2FtcGxlc3BlcnJvdywgSkRJTUVOU0lPTiBudW1yb3dzKQogLyogQWxsb2NhdGUgYSAyLUQgc2FtcGxlIGFycmF5ICovCiB7CiAgIG15X21lbV9wdHIgbWVtID0gKG15X21lbV9wdHIpIGNpbmZvLT5tZW07CkBAIC00MjgsMTIgKzQyOCwxMiBAQAogCiAgIC8qIE1ha2Ugc3VyZSBlYWNoIHJvdyBpcyBwcm9wZXJseSBhbGlnbmVkICovCiAgIGlmICgoQUxJR05fU0laRSAlIFNJWkVPRihKU0FNUExFKSkgIT0gMCkKLSAgICBvdXRfb2ZfbWVtb3J5KGNpbmZvLCA1KTsJLyogc2FmZXR5IGNoZWNrICovCisgICAgb3V0X29mX21lbW9yeShjaW5mbywgNSk7ICAgIC8qIHNhZmV0eSBjaGVjayAqLwogICBzYW1wbGVzcGVycm93ID0gKEpESU1FTlNJT04pcm91bmRfdXBfcG93MihzYW1wbGVzcGVycm93LCAoMiAqIEFMSUdOX1NJWkUpIC8gU0laRU9GKEpTQU1QTEUpKTsKIAogICAvKiBDYWxjdWxhdGUgbWF4ICMgb2Ygcm93cyBhbGxvd2VkIGluIG9uZSBhbGxvY2F0aW9uIGNodW5rICovCiAgIGx0ZW1wID0gKE1BWF9BTExPQ19DSFVOSy1TSVpFT0YobGFyZ2VfcG9vbF9oZHIpKSAvCi0JICAoKGxvbmcpIHNhbXBsZXNwZXJyb3cgKiBTSVpFT0YoSlNBTVBMRSkpOworICAgICAgICAgICgobG9uZykgc2FtcGxlc3BlcnJvdyAqIFNJWkVPRihKU0FNUExFKSk7CiAgIGlmIChsdGVtcCA8PSAwKQogICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfV0lEVEhfT1ZFUkZMT1cpOwogICBpZiAobHRlbXAgPCAobG9uZykgbnVtcm93cykKQEAgLTQ0NCwxNSArNDQ0LDE1IEBACiAKICAgLyogR2V0IHNwYWNlIGZvciByb3cgcG9pbnRlcnMgKHNtYWxsIG9iamVjdCkgKi8KICAgcmVzdWx0ID0gKEpTQU1QQVJSQVkpIGFsbG9jX3NtYWxsKGNpbmZvLCBwb29sX2lkLAotCQkJCSAgICAoc2l6ZV90KSAobnVtcm93cyAqIFNJWkVPRihKU0FNUFJPVykpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaXplX3QpIChudW1yb3dzICogU0laRU9GKEpTQU1QUk9XKSkpOwogCiAgIC8qIEdldCB0aGUgcm93cyB0aGVtc2VsdmVzIChsYXJnZSBvYmplY3RzKSAqLwogICBjdXJyb3cgPSAwOwogICB3aGlsZSAoY3Vycm93IDwgbnVtcm93cykgewogICAgIHJvd3NwZXJjaHVuayA9IE1JTihyb3dzcGVyY2h1bmssIG51bXJvd3MgLSBjdXJyb3cpOwogICAgIHdvcmtzcGFjZSA9IChKU0FNUFJPVykgYWxsb2NfbGFyZ2UoY2luZm8sIHBvb2xfaWQsCi0JKHNpemVfdCkgKChzaXplX3QpIHJvd3NwZXJjaHVuayAqIChzaXplX3QpIHNhbXBsZXNwZXJyb3cKLQkJICAqIFNJWkVPRihKU0FNUExFKSkpOworICAgICAgICAoc2l6ZV90KSAoKHNpemVfdCkgcm93c3BlcmNodW5rICogKHNpemVfdCkgc2FtcGxlc3BlcnJvdworICAgICAgICAgICAgICAgICAgKiBTSVpFT0YoSlNBTVBMRSkpKTsKICAgICBmb3IgKGkgPSByb3dzcGVyY2h1bms7IGkgPiAwOyBpLS0pIHsKICAgICAgIHJlc3VsdFtjdXJyb3crK10gPSB3b3Jrc3BhY2U7CiAgICAgICB3b3Jrc3BhY2UgKz0gc2FtcGxlc3BlcnJvdzsKQEAgLTQ3MCw3ICs0NzAsNyBAQAogCiBNRVRIT0RERUYoSkJMT0NLQVJSQVkpCiBhbGxvY19iYXJyYXkgKGpfY29tbW9uX3B0ciBjaW5mbywgaW50IHBvb2xfaWQsCi0JICAgICAgSkRJTUVOU0lPTiBibG9ja3NwZXJyb3csIEpESU1FTlNJT04gbnVtcm93cykKKyAgICAgICAgICAgICAgSkRJTUVOU0lPTiBibG9ja3NwZXJyb3csIEpESU1FTlNJT04gbnVtcm93cykKIC8qIEFsbG9jYXRlIGEgMi1EIGNvZWZmaWNpZW50LWJsb2NrIGFycmF5ICovCiB7CiAgIG15X21lbV9wdHIgbWVtID0gKG15X21lbV9wdHIpIGNpbmZvLT5tZW07CkBAIC00ODEsMTEgKzQ4MSwxMSBAQAogCiAgIC8qIE1ha2Ugc3VyZSBlYWNoIHJvdyBpcyBwcm9wZXJseSBhbGlnbmVkICovCiAgIGlmICgoU0laRU9GKEpCTE9DSykgJSBBTElHTl9TSVpFKSAhPSAwKQotICAgIG91dF9vZl9tZW1vcnkoY2luZm8sIDYpOwkvKiBzYWZldHkgY2hlY2sgKi8KKyAgICBvdXRfb2ZfbWVtb3J5KGNpbmZvLCA2KTsgICAgLyogc2FmZXR5IGNoZWNrICovCiAKICAgLyogQ2FsY3VsYXRlIG1heCAjIG9mIHJvd3MgYWxsb3dlZCBpbiBvbmUgYWxsb2NhdGlvbiBjaHVuayAqLwogICBsdGVtcCA9IChNQVhfQUxMT0NfQ0hVTkstU0laRU9GKGxhcmdlX3Bvb2xfaGRyKSkgLwotCSAgKChsb25nKSBibG9ja3NwZXJyb3cgKiBTSVpFT0YoSkJMT0NLKSk7CisgICAgICAgICAgKChsb25nKSBibG9ja3NwZXJyb3cgKiBTSVpFT0YoSkJMT0NLKSk7CiAgIGlmIChsdGVtcCA8PSAwKQogICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfV0lEVEhfT1ZFUkZMT1cpOwogICBpZiAobHRlbXAgPCAobG9uZykgbnVtcm93cykKQEAgLTQ5NiwxNSArNDk2LDE1IEBACiAKICAgLyogR2V0IHNwYWNlIGZvciByb3cgcG9pbnRlcnMgKHNtYWxsIG9iamVjdCkgKi8KICAgcmVzdWx0ID0gKEpCTE9DS0FSUkFZKSBhbGxvY19zbWFsbChjaW5mbywgcG9vbF9pZCwKLQkJCQkgICAgIChzaXplX3QpIChudW1yb3dzICogU0laRU9GKEpCTE9DS1JPVykpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2l6ZV90KSAobnVtcm93cyAqIFNJWkVPRihKQkxPQ0tST1cpKSk7CiAKICAgLyogR2V0IHRoZSByb3dzIHRoZW1zZWx2ZXMgKGxhcmdlIG9iamVjdHMpICovCiAgIGN1cnJvdyA9IDA7CiAgIHdoaWxlIChjdXJyb3cgPCBudW1yb3dzKSB7CiAgICAgcm93c3BlcmNodW5rID0gTUlOKHJvd3NwZXJjaHVuaywgbnVtcm93cyAtIGN1cnJvdyk7CiAgICAgd29ya3NwYWNlID0gKEpCTE9DS1JPVykgYWxsb2NfbGFyZ2UoY2luZm8sIHBvb2xfaWQsCi0JKHNpemVfdCkgKChzaXplX3QpIHJvd3NwZXJjaHVuayAqIChzaXplX3QpIGJsb2Nrc3BlcnJvdwotCQkgICogU0laRU9GKEpCTE9DSykpKTsKKyAgICAgICAgKHNpemVfdCkgKChzaXplX3QpIHJvd3NwZXJjaHVuayAqIChzaXplX3QpIGJsb2Nrc3BlcnJvdworICAgICAgICAgICAgICAgICAgKiBTSVpFT0YoSkJMT0NLKSkpOwogICAgIGZvciAoaSA9IHJvd3NwZXJjaHVuazsgaSA+IDA7IGktLSkgewogICAgICAgcmVzdWx0W2N1cnJvdysrXSA9IHdvcmtzcGFjZTsKICAgICAgIHdvcmtzcGFjZSArPSBibG9ja3NwZXJyb3c7CkBAIC01NTQsOCArNTU0LDggQEAKIAogTUVUSE9EREVGKGp2aXJ0X3NhcnJheV9wdHIpCiByZXF1ZXN0X3ZpcnRfc2FycmF5IChqX2NvbW1vbl9wdHIgY2luZm8sIGludCBwb29sX2lkLCBib29sZWFuIHByZV96ZXJvLAotCQkgICAgIEpESU1FTlNJT04gc2FtcGxlc3BlcnJvdywgSkRJTUVOU0lPTiBudW1yb3dzLAotCQkgICAgIEpESU1FTlNJT04gbWF4YWNjZXNzKQorICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBzYW1wbGVzcGVycm93LCBKRElNRU5TSU9OIG51bXJvd3MsCisgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG1heGFjY2VzcykKIC8qIFJlcXVlc3QgYSB2aXJ0dWFsIDItRCBzYW1wbGUgYXJyYXkgKi8KIHsKICAgbXlfbWVtX3B0ciBtZW0gPSAobXlfbWVtX3B0cikgY2luZm8tPm1lbTsKQEAgLTU2MywxOCArNTYzLDE4IEBACiAKICAgLyogT25seSBJTUFHRS1saWZldGltZSB2aXJ0dWFsIGFycmF5cyBhcmUgY3VycmVudGx5IHN1cHBvcnRlZCAqLwogICBpZiAocG9vbF9pZCAhPSBKUE9PTF9JTUFHRSkKLSAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfUE9PTF9JRCwgcG9vbF9pZCk7CS8qIHNhZmV0eSBjaGVjayAqLworICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9QT09MX0lELCBwb29sX2lkKTsgLyogc2FmZXR5IGNoZWNrICovCiAKICAgLyogZ2V0IGNvbnRyb2wgYmxvY2sgKi8KICAgcmVzdWx0ID0gKGp2aXJ0X3NhcnJheV9wdHIpIGFsbG9jX3NtYWxsKGNpbmZvLCBwb29sX2lkLAotCQkJCQkgIFNJWkVPRihzdHJ1Y3QganZpcnRfc2FycmF5X2NvbnRyb2wpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJWkVPRihzdHJ1Y3QganZpcnRfc2FycmF5X2NvbnRyb2wpKTsKIAotICByZXN1bHQtPm1lbV9idWZmZXIgPSBOVUxMOwkvKiBtYXJrcyBhcnJheSBub3QgeWV0IHJlYWxpemVkICovCisgIHJlc3VsdC0+bWVtX2J1ZmZlciA9IE5VTEw7ICAgIC8qIG1hcmtzIGFycmF5IG5vdCB5ZXQgcmVhbGl6ZWQgKi8KICAgcmVzdWx0LT5yb3dzX2luX2FycmF5ID0gbnVtcm93czsKICAgcmVzdWx0LT5zYW1wbGVzcGVycm93ID0gc2FtcGxlc3BlcnJvdzsKICAgcmVzdWx0LT5tYXhhY2Nlc3MgPSBtYXhhY2Nlc3M7CiAgIHJlc3VsdC0+cHJlX3plcm8gPSBwcmVfemVybzsKLSAgcmVzdWx0LT5iX3Nfb3BlbiA9IEZBTFNFOwkvKiBubyBhc3NvY2lhdGVkIGJhY2tpbmctc3RvcmUgb2JqZWN0ICovCisgIHJlc3VsdC0+Yl9zX29wZW4gPSBGQUxTRTsgICAgIC8qIG5vIGFzc29jaWF0ZWQgYmFja2luZy1zdG9yZSBvYmplY3QgKi8KICAgcmVzdWx0LT5uZXh0ID0gbWVtLT52aXJ0X3NhcnJheV9saXN0OyAvKiBhZGQgdG8gbGlzdCBvZiB2aXJ0dWFsIGFycmF5cyAqLwogICBtZW0tPnZpcnRfc2FycmF5X2xpc3QgPSByZXN1bHQ7CiAKQEAgLTU4NCw4ICs1ODQsOCBAQAogCiBNRVRIT0RERUYoanZpcnRfYmFycmF5X3B0cikKIHJlcXVlc3RfdmlydF9iYXJyYXkgKGpfY29tbW9uX3B0ciBjaW5mbywgaW50IHBvb2xfaWQsIGJvb2xlYW4gcHJlX3plcm8sCi0JCSAgICAgSkRJTUVOU0lPTiBibG9ja3NwZXJyb3csIEpESU1FTlNJT04gbnVtcm93cywKLQkJICAgICBKRElNRU5TSU9OIG1heGFjY2VzcykKKyAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gYmxvY2tzcGVycm93LCBKRElNRU5TSU9OIG51bXJvd3MsCisgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG1heGFjY2VzcykKIC8qIFJlcXVlc3QgYSB2aXJ0dWFsIDItRCBjb2VmZmljaWVudC1ibG9jayBhcnJheSAqLwogewogICBteV9tZW1fcHRyIG1lbSA9IChteV9tZW1fcHRyKSBjaW5mby0+bWVtOwpAQCAtNTkzLDE4ICs1OTMsMTggQEAKIAogICAvKiBPbmx5IElNQUdFLWxpZmV0aW1lIHZpcnR1YWwgYXJyYXlzIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkICovCiAgIGlmIChwb29sX2lkICE9IEpQT09MX0lNQUdFKQotICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9QT09MX0lELCBwb29sX2lkKTsJLyogc2FmZXR5IGNoZWNrICovCisgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1BPT0xfSUQsIHBvb2xfaWQpOyAvKiBzYWZldHkgY2hlY2sgKi8KIAogICAvKiBnZXQgY29udHJvbCBibG9jayAqLwogICByZXN1bHQgPSAoanZpcnRfYmFycmF5X3B0cikgYWxsb2Nfc21hbGwoY2luZm8sIHBvb2xfaWQsCi0JCQkJCSAgU0laRU9GKHN0cnVjdCBqdmlydF9iYXJyYXlfY29udHJvbCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0laRU9GKHN0cnVjdCBqdmlydF9iYXJyYXlfY29udHJvbCkpOwogCi0gIHJlc3VsdC0+bWVtX2J1ZmZlciA9IE5VTEw7CS8qIG1hcmtzIGFycmF5IG5vdCB5ZXQgcmVhbGl6ZWQgKi8KKyAgcmVzdWx0LT5tZW1fYnVmZmVyID0gTlVMTDsgICAgLyogbWFya3MgYXJyYXkgbm90IHlldCByZWFsaXplZCAqLwogICByZXN1bHQtPnJvd3NfaW5fYXJyYXkgPSBudW1yb3dzOwogICByZXN1bHQtPmJsb2Nrc3BlcnJvdyA9IGJsb2Nrc3BlcnJvdzsKICAgcmVzdWx0LT5tYXhhY2Nlc3MgPSBtYXhhY2Nlc3M7CiAgIHJlc3VsdC0+cHJlX3plcm8gPSBwcmVfemVybzsKLSAgcmVzdWx0LT5iX3Nfb3BlbiA9IEZBTFNFOwkvKiBubyBhc3NvY2lhdGVkIGJhY2tpbmctc3RvcmUgb2JqZWN0ICovCisgIHJlc3VsdC0+Yl9zX29wZW4gPSBGQUxTRTsgICAgIC8qIG5vIGFzc29jaWF0ZWQgYmFja2luZy1zdG9yZSBvYmplY3QgKi8KICAgcmVzdWx0LT5uZXh0ID0gbWVtLT52aXJ0X2JhcnJheV9saXN0OyAvKiBhZGQgdG8gbGlzdCBvZiB2aXJ0dWFsIGFycmF5cyAqLwogICBtZW0tPnZpcnRfYmFycmF5X2xpc3QgPSByZXN1bHQ7CiAKQEAgLTYzMSwyNiArNjMxLDI2IEBACiAgIGZvciAoc3B0ciA9IG1lbS0+dmlydF9zYXJyYXlfbGlzdDsgc3B0ciAhPSBOVUxMOyBzcHRyID0gc3B0ci0+bmV4dCkgewogICAgIGlmIChzcHRyLT5tZW1fYnVmZmVyID09IE5VTEwpIHsgLyogaWYgbm90IHJlYWxpemVkIHlldCAqLwogICAgICAgc3BhY2VfcGVyX21pbmhlaWdodCArPSAobG9uZykgc3B0ci0+bWF4YWNjZXNzICoKLQkJCSAgICAgKGxvbmcpIHNwdHItPnNhbXBsZXNwZXJyb3cgKiBTSVpFT0YoSlNBTVBMRSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBzcHRyLT5zYW1wbGVzcGVycm93ICogU0laRU9GKEpTQU1QTEUpOwogICAgICAgbWF4aW11bV9zcGFjZSArPSAobG9uZykgc3B0ci0+cm93c19pbl9hcnJheSAqCi0JCSAgICAgICAobG9uZykgc3B0ci0+c2FtcGxlc3BlcnJvdyAqIFNJWkVPRihKU0FNUExFKTsKKyAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIHNwdHItPnNhbXBsZXNwZXJyb3cgKiBTSVpFT0YoSlNBTVBMRSk7CiAgICAgfQogICB9CiAgIGZvciAoYnB0ciA9IG1lbS0+dmlydF9iYXJyYXlfbGlzdDsgYnB0ciAhPSBOVUxMOyBicHRyID0gYnB0ci0+bmV4dCkgewogICAgIGlmIChicHRyLT5tZW1fYnVmZmVyID09IE5VTEwpIHsgLyogaWYgbm90IHJlYWxpemVkIHlldCAqLwogICAgICAgc3BhY2VfcGVyX21pbmhlaWdodCArPSAobG9uZykgYnB0ci0+bWF4YWNjZXNzICoKLQkJCSAgICAgKGxvbmcpIGJwdHItPmJsb2Nrc3BlcnJvdyAqIFNJWkVPRihKQkxPQ0spOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgYnB0ci0+YmxvY2tzcGVycm93ICogU0laRU9GKEpCTE9DSyk7CiAgICAgICBtYXhpbXVtX3NwYWNlICs9IChsb25nKSBicHRyLT5yb3dzX2luX2FycmF5ICoKLQkJICAgICAgIChsb25nKSBicHRyLT5ibG9ja3NwZXJyb3cgKiBTSVpFT0YoSkJMT0NLKTsKKyAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGJwdHItPmJsb2Nrc3BlcnJvdyAqIFNJWkVPRihKQkxPQ0spOwogICAgIH0KICAgfQogCiAgIGlmIChzcGFjZV9wZXJfbWluaGVpZ2h0IDw9IDApCi0gICAgcmV0dXJuOwkJCS8qIG5vIHVucmVhbGl6ZWQgYXJyYXlzLCBubyB3b3JrICovCisgICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgICAgIC8qIG5vIHVucmVhbGl6ZWQgYXJyYXlzLCBubyB3b3JrICovCiAKICAgLyogRGV0ZXJtaW5lIGFtb3VudCBvZiBtZW1vcnkgdG8gYWN0dWFsbHkgdXNlOyB0aGlzIGlzIHN5c3RlbS1kZXBlbmRlbnQuICovCiAgIGF2YWlsX21lbSA9IGpwZWdfbWVtX2F2YWlsYWJsZShjaW5mbywgc3BhY2VfcGVyX21pbmhlaWdodCwgbWF4aW11bV9zcGFjZSwKLQkJCQkgbWVtLT50b3RhbF9zcGFjZV9hbGxvY2F0ZWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtLT50b3RhbF9zcGFjZV9hbGxvY2F0ZWQpOwogCiAgIC8qIElmIHRoZSBtYXhpbXVtIHNwYWNlIG5lZWRlZCBpcyBhdmFpbGFibGUsIG1ha2UgYWxsIHRoZSBidWZmZXJzIGZ1bGwKICAgICogaGVpZ2h0OyBvdGhlcndpc2UgcGFyY2VsIGl0IG91dCB3aXRoIHRoZSBzYW1lIG51bWJlciBvZiBtaW5oZWlnaHRzCkBAIC02NzMsMTkgKzY3MywxOSBAQAogICAgIGlmIChzcHRyLT5tZW1fYnVmZmVyID09IE5VTEwpIHsgLyogaWYgbm90IHJlYWxpemVkIHlldCAqLwogICAgICAgbWluaGVpZ2h0cyA9ICgobG9uZykgc3B0ci0+cm93c19pbl9hcnJheSAtIDFMKSAvIHNwdHItPm1heGFjY2VzcyArIDFMOwogICAgICAgaWYgKG1pbmhlaWdodHMgPD0gbWF4X21pbmhlaWdodHMpIHsKLQkvKiBUaGlzIGJ1ZmZlciBmaXRzIGluIG1lbW9yeSAqLwotCXNwdHItPnJvd3NfaW5fbWVtID0gc3B0ci0+cm93c19pbl9hcnJheTsKKyAgICAgICAgLyogVGhpcyBidWZmZXIgZml0cyBpbiBtZW1vcnkgKi8KKyAgICAgICAgc3B0ci0+cm93c19pbl9tZW0gPSBzcHRyLT5yb3dzX2luX2FycmF5OwogICAgICAgfSBlbHNlIHsKLQkvKiBJdCBkb2Vzbid0IGZpdCBpbiBtZW1vcnksIGNyZWF0ZSBiYWNraW5nIHN0b3JlLiAqLwotCXNwdHItPnJvd3NfaW5fbWVtID0gKEpESU1FTlNJT04pIChtYXhfbWluaGVpZ2h0cyAqIHNwdHItPm1heGFjY2Vzcyk7Ci0JanBlZ19vcGVuX2JhY2tpbmdfc3RvcmUoY2luZm8sICYgc3B0ci0+Yl9zX2luZm8sCi0JCQkJKGxvbmcpIHNwdHItPnJvd3NfaW5fYXJyYXkgKgotCQkJCShsb25nKSBzcHRyLT5zYW1wbGVzcGVycm93ICoKLQkJCQkobG9uZykgU0laRU9GKEpTQU1QTEUpKTsKLQlzcHRyLT5iX3Nfb3BlbiA9IFRSVUU7CisgICAgICAgIC8qIEl0IGRvZXNuJ3QgZml0IGluIG1lbW9yeSwgY3JlYXRlIGJhY2tpbmcgc3RvcmUuICovCisgICAgICAgIHNwdHItPnJvd3NfaW5fbWVtID0gKEpESU1FTlNJT04pIChtYXhfbWluaGVpZ2h0cyAqIHNwdHItPm1heGFjY2Vzcyk7CisgICAgICAgIGpwZWdfb3Blbl9iYWNraW5nX3N0b3JlKGNpbmZvLCAmIHNwdHItPmJfc19pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgc3B0ci0+cm93c19pbl9hcnJheSAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBzcHRyLT5zYW1wbGVzcGVycm93ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIFNJWkVPRihKU0FNUExFKSk7CisgICAgICAgIHNwdHItPmJfc19vcGVuID0gVFJVRTsKICAgICAgIH0KICAgICAgIHNwdHItPm1lbV9idWZmZXIgPSBhbGxvY19zYXJyYXkoY2luZm8sIEpQT09MX0lNQUdFLAotCQkJCSAgICAgIHNwdHItPnNhbXBsZXNwZXJyb3csIHNwdHItPnJvd3NfaW5fbWVtKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3B0ci0+c2FtcGxlc3BlcnJvdywgc3B0ci0+cm93c19pbl9tZW0pOwogICAgICAgc3B0ci0+cm93c3BlcmNodW5rID0gbWVtLT5sYXN0X3Jvd3NwZXJjaHVuazsKICAgICAgIHNwdHItPmN1cl9zdGFydF9yb3cgPSAwOwogICAgICAgc3B0ci0+Zmlyc3RfdW5kZWZfcm93ID0gMDsKQEAgLTY5NywxOSArNjk3LDE5IEBACiAgICAgaWYgKGJwdHItPm1lbV9idWZmZXIgPT0gTlVMTCkgeyAvKiBpZiBub3QgcmVhbGl6ZWQgeWV0ICovCiAgICAgICBtaW5oZWlnaHRzID0gKChsb25nKSBicHRyLT5yb3dzX2luX2FycmF5IC0gMUwpIC8gYnB0ci0+bWF4YWNjZXNzICsgMUw7CiAgICAgICBpZiAobWluaGVpZ2h0cyA8PSBtYXhfbWluaGVpZ2h0cykgewotCS8qIFRoaXMgYnVmZmVyIGZpdHMgaW4gbWVtb3J5ICovCi0JYnB0ci0+cm93c19pbl9tZW0gPSBicHRyLT5yb3dzX2luX2FycmF5OworICAgICAgICAvKiBUaGlzIGJ1ZmZlciBmaXRzIGluIG1lbW9yeSAqLworICAgICAgICBicHRyLT5yb3dzX2luX21lbSA9IGJwdHItPnJvd3NfaW5fYXJyYXk7CiAgICAgICB9IGVsc2UgewotCS8qIEl0IGRvZXNuJ3QgZml0IGluIG1lbW9yeSwgY3JlYXRlIGJhY2tpbmcgc3RvcmUuICovCi0JYnB0ci0+cm93c19pbl9tZW0gPSAoSkRJTUVOU0lPTikgKG1heF9taW5oZWlnaHRzICogYnB0ci0+bWF4YWNjZXNzKTsKLQlqcGVnX29wZW5fYmFja2luZ19zdG9yZShjaW5mbywgJiBicHRyLT5iX3NfaW5mbywKLQkJCQkobG9uZykgYnB0ci0+cm93c19pbl9hcnJheSAqCi0JCQkJKGxvbmcpIGJwdHItPmJsb2Nrc3BlcnJvdyAqCi0JCQkJKGxvbmcpIFNJWkVPRihKQkxPQ0spKTsKLQlicHRyLT5iX3Nfb3BlbiA9IFRSVUU7CisgICAgICAgIC8qIEl0IGRvZXNuJ3QgZml0IGluIG1lbW9yeSwgY3JlYXRlIGJhY2tpbmcgc3RvcmUuICovCisgICAgICAgIGJwdHItPnJvd3NfaW5fbWVtID0gKEpESU1FTlNJT04pIChtYXhfbWluaGVpZ2h0cyAqIGJwdHItPm1heGFjY2Vzcyk7CisgICAgICAgIGpwZWdfb3Blbl9iYWNraW5nX3N0b3JlKGNpbmZvLCAmIGJwdHItPmJfc19pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgYnB0ci0+cm93c19pbl9hcnJheSAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBicHRyLT5ibG9ja3NwZXJyb3cgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgU0laRU9GKEpCTE9DSykpOworICAgICAgICBicHRyLT5iX3Nfb3BlbiA9IFRSVUU7CiAgICAgICB9CiAgICAgICBicHRyLT5tZW1fYnVmZmVyID0gYWxsb2NfYmFycmF5KGNpbmZvLCBKUE9PTF9JTUFHRSwKLQkJCQkgICAgICBicHRyLT5ibG9ja3NwZXJyb3csIGJwdHItPnJvd3NfaW5fbWVtKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnB0ci0+YmxvY2tzcGVycm93LCBicHRyLT5yb3dzX2luX21lbSk7CiAgICAgICBicHRyLT5yb3dzcGVyY2h1bmsgPSBtZW0tPmxhc3Rfcm93c3BlcmNodW5rOwogICAgICAgYnB0ci0+Y3VyX3N0YXJ0X3JvdyA9IDA7CiAgICAgICBicHRyLT5maXJzdF91bmRlZl9yb3cgPSAwOwpAQCAtNzM2LDE3ICs3MzYsMTcgQEAKICAgICByb3dzID0gTUlOKHJvd3MsIChsb25nKSBwdHItPmZpcnN0X3VuZGVmX3JvdyAtIHRoaXNyb3cpOwogICAgIC8qIFRyYW5zZmVyIG5vIG1vcmUgdGhhbiBmaXRzIGluIGZpbGUgKi8KICAgICByb3dzID0gTUlOKHJvd3MsIChsb25nKSBwdHItPnJvd3NfaW5fYXJyYXkgLSB0aGlzcm93KTsKLSAgICBpZiAocm93cyA8PSAwKQkJLyogdGhpcyBjaHVuayBtaWdodCBiZSBwYXN0IGVuZCBvZiBmaWxlISAqLworICAgIGlmIChyb3dzIDw9IDApICAgICAgICAgICAgICAvKiB0aGlzIGNodW5rIG1pZ2h0IGJlIHBhc3QgZW5kIG9mIGZpbGUhICovCiAgICAgICBicmVhazsKICAgICBieXRlX2NvdW50ID0gcm93cyAqIGJ5dGVzcGVycm93OwogICAgIGlmICh3cml0aW5nKQogICAgICAgKCpwdHItPmJfc19pbmZvLndyaXRlX2JhY2tpbmdfc3RvcmUpIChjaW5mbywgJiBwdHItPmJfc19pbmZvLAotCQkJCQkgICAgKHZvaWQgRkFSICopIHB0ci0+bWVtX2J1ZmZlcltpXSwKLQkJCQkJICAgIGZpbGVfb2Zmc2V0LCBieXRlX2NvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgRkFSICopIHB0ci0+bWVtX2J1ZmZlcltpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9vZmZzZXQsIGJ5dGVfY291bnQpOwogICAgIGVsc2UKICAgICAgICgqcHRyLT5iX3NfaW5mby5yZWFkX2JhY2tpbmdfc3RvcmUpIChjaW5mbywgJiBwdHItPmJfc19pbmZvLAotCQkJCQkgICAodm9pZCBGQVIgKikgcHRyLT5tZW1fYnVmZmVyW2ldLAotCQkJCQkgICBmaWxlX29mZnNldCwgYnl0ZV9jb3VudCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgRkFSICopIHB0ci0+bWVtX2J1ZmZlcltpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX29mZnNldCwgYnl0ZV9jb3VudCk7CiAgICAgZmlsZV9vZmZzZXQgKz0gYnl0ZV9jb3VudDsKICAgfQogfQpAQCAtNzY5LDE3ICs3NjksMTcgQEAKICAgICByb3dzID0gTUlOKHJvd3MsIChsb25nKSBwdHItPmZpcnN0X3VuZGVmX3JvdyAtIHRoaXNyb3cpOwogICAgIC8qIFRyYW5zZmVyIG5vIG1vcmUgdGhhbiBmaXRzIGluIGZpbGUgKi8KICAgICByb3dzID0gTUlOKHJvd3MsIChsb25nKSBwdHItPnJvd3NfaW5fYXJyYXkgLSB0aGlzcm93KTsKLSAgICBpZiAocm93cyA8PSAwKQkJLyogdGhpcyBjaHVuayBtaWdodCBiZSBwYXN0IGVuZCBvZiBmaWxlISAqLworICAgIGlmIChyb3dzIDw9IDApICAgICAgICAgICAgICAvKiB0aGlzIGNodW5rIG1pZ2h0IGJlIHBhc3QgZW5kIG9mIGZpbGUhICovCiAgICAgICBicmVhazsKICAgICBieXRlX2NvdW50ID0gcm93cyAqIGJ5dGVzcGVycm93OwogICAgIGlmICh3cml0aW5nKQogICAgICAgKCpwdHItPmJfc19pbmZvLndyaXRlX2JhY2tpbmdfc3RvcmUpIChjaW5mbywgJiBwdHItPmJfc19pbmZvLAotCQkJCQkgICAgKHZvaWQgRkFSICopIHB0ci0+bWVtX2J1ZmZlcltpXSwKLQkJCQkJICAgIGZpbGVfb2Zmc2V0LCBieXRlX2NvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgRkFSICopIHB0ci0+bWVtX2J1ZmZlcltpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9vZmZzZXQsIGJ5dGVfY291bnQpOwogICAgIGVsc2UKICAgICAgICgqcHRyLT5iX3NfaW5mby5yZWFkX2JhY2tpbmdfc3RvcmUpIChjaW5mbywgJiBwdHItPmJfc19pbmZvLAotCQkJCQkgICAodm9pZCBGQVIgKikgcHRyLT5tZW1fYnVmZmVyW2ldLAotCQkJCQkgICBmaWxlX29mZnNldCwgYnl0ZV9jb3VudCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgRkFSICopIHB0ci0+bWVtX2J1ZmZlcltpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX29mZnNldCwgYnl0ZV9jb3VudCk7CiAgICAgZmlsZV9vZmZzZXQgKz0gYnl0ZV9jb3VudDsKICAgfQogfQpAQCAtNzg3LDggKzc4Nyw4IEBACiAKIE1FVEhPRERFRihKU0FNUEFSUkFZKQogYWNjZXNzX3ZpcnRfc2FycmF5IChqX2NvbW1vbl9wdHIgY2luZm8sIGp2aXJ0X3NhcnJheV9wdHIgcHRyLAotCQkgICAgSkRJTUVOU0lPTiBzdGFydF9yb3csIEpESU1FTlNJT04gbnVtX3Jvd3MsCi0JCSAgICBib29sZWFuIHdyaXRhYmxlKQorICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIHN0YXJ0X3JvdywgSkRJTUVOU0lPTiBudW1fcm93cywKKyAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiB3cml0YWJsZSkKIC8qIEFjY2VzcyB0aGUgcGFydCBvZiBhIHZpcnR1YWwgc2FtcGxlIGFycmF5IHN0YXJ0aW5nIGF0IHN0YXJ0X3JvdyAqLwogLyogYW5kIGV4dGVuZGluZyBmb3IgbnVtX3Jvd3Mgcm93cy4gIHdyaXRhYmxlIGlzIHRydWUgaWYgICovCiAvKiBjYWxsZXIgaW50ZW5kcyB0byBtb2RpZnkgdGhlIGFjY2Vzc2VkIGFyZWEuICovCkBAIC04MjYsNyArODI2LDcgQEAKIAogICAgICAgbHRlbXAgPSAobG9uZykgZW5kX3JvdyAtIChsb25nKSBwdHItPnJvd3NfaW5fbWVtOwogICAgICAgaWYgKGx0ZW1wIDwgMCkKLQlsdGVtcCA9IDA7CQkvKiBkb24ndCBmYWxsIG9mZiBmcm9udCBlbmQgb2YgZmlsZSAqLworICAgICAgICBsdGVtcCA9IDA7ICAgICAgICAgICAgICAvKiBkb24ndCBmYWxsIG9mZiBmcm9udCBlbmQgb2YgZmlsZSAqLwogICAgICAgcHRyLT5jdXJfc3RhcnRfcm93ID0gKEpESU1FTlNJT04pIGx0ZW1wOwogICAgIH0KICAgICAvKiBSZWFkIGluIHRoZSBzZWxlY3RlZCBwYXJ0IG9mIHRoZSBhcnJheS4KQEAgLTg0MSw5ICs4NDEsOSBAQAogICAgKi8KICAgaWYgKHB0ci0+Zmlyc3RfdW5kZWZfcm93IDwgZW5kX3JvdykgewogICAgIGlmIChwdHItPmZpcnN0X3VuZGVmX3JvdyA8IHN0YXJ0X3JvdykgewotICAgICAgaWYgKHdyaXRhYmxlKQkJLyogd3JpdGVyIHNraXBwZWQgb3ZlciBhIHNlY3Rpb24gb2YgYXJyYXkgKi8KLQlFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9WSVJUVUFMX0FDQ0VTUyk7Ci0gICAgICB1bmRlZl9yb3cgPSBzdGFydF9yb3c7CS8qIGJ1dCByZWFkZXIgaXMgYWxsb3dlZCB0byByZWFkIGFoZWFkICovCisgICAgICBpZiAod3JpdGFibGUpICAgICAgICAgICAgIC8qIHdyaXRlciBza2lwcGVkIG92ZXIgYSBzZWN0aW9uIG9mIGFycmF5ICovCisgICAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX1ZJUlRVQUxfQUNDRVNTKTsKKyAgICAgIHVuZGVmX3JvdyA9IHN0YXJ0X3JvdzsgICAgLyogYnV0IHJlYWRlciBpcyBhbGxvd2VkIHRvIHJlYWQgYWhlYWQgKi8KICAgICB9IGVsc2UgewogICAgICAgdW5kZWZfcm93ID0gcHRyLT5maXJzdF91bmRlZl9yb3c7CiAgICAgfQpAQCAtODU0LDEyICs4NTQsMTIgQEAKICAgICAgIHVuZGVmX3JvdyAtPSBwdHItPmN1cl9zdGFydF9yb3c7IC8qIG1ha2UgaW5kZXhlcyByZWxhdGl2ZSB0byBidWZmZXIgKi8KICAgICAgIGVuZF9yb3cgLT0gcHRyLT5jdXJfc3RhcnRfcm93OwogICAgICAgd2hpbGUgKHVuZGVmX3JvdyA8IGVuZF9yb3cpIHsKLQlqemVyb19mYXIoKHZvaWQgRkFSICopIHB0ci0+bWVtX2J1ZmZlclt1bmRlZl9yb3ddLCBieXRlc3BlcnJvdyk7Ci0JdW5kZWZfcm93Kys7CisgICAgICAgIGp6ZXJvX2Zhcigodm9pZCBGQVIgKikgcHRyLT5tZW1fYnVmZmVyW3VuZGVmX3Jvd10sIGJ5dGVzcGVycm93KTsKKyAgICAgICAgdW5kZWZfcm93Kys7CiAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgIGlmICghIHdyaXRhYmxlKQkJLyogcmVhZGVyIGxvb2tpbmcgYXQgdW5kZWZpbmVkIGRhdGEgKi8KLQlFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9WSVJUVUFMX0FDQ0VTUyk7CisgICAgICBpZiAoISB3cml0YWJsZSkgICAgICAgICAgIC8qIHJlYWRlciBsb29raW5nIGF0IHVuZGVmaW5lZCBkYXRhICovCisgICAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX1ZJUlRVQUxfQUNDRVNTKTsKICAgICB9CiAgIH0KICAgLyogRmxhZyB0aGUgYnVmZmVyIGRpcnR5IGlmIGNhbGxlciB3aWxsIHdyaXRlIGluIGl0ICovCkBAIC04NzIsOCArODcyLDggQEAKIAogTUVUSE9EREVGKEpCTE9DS0FSUkFZKQogYWNjZXNzX3ZpcnRfYmFycmF5IChqX2NvbW1vbl9wdHIgY2luZm8sIGp2aXJ0X2JhcnJheV9wdHIgcHRyLAotCQkgICAgSkRJTUVOU0lPTiBzdGFydF9yb3csIEpESU1FTlNJT04gbnVtX3Jvd3MsCi0JCSAgICBib29sZWFuIHdyaXRhYmxlKQorICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIHN0YXJ0X3JvdywgSkRJTUVOU0lPTiBudW1fcm93cywKKyAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiB3cml0YWJsZSkKIC8qIEFjY2VzcyB0aGUgcGFydCBvZiBhIHZpcnR1YWwgYmxvY2sgYXJyYXkgc3RhcnRpbmcgYXQgc3RhcnRfcm93ICovCiAvKiBhbmQgZXh0ZW5kaW5nIGZvciBudW1fcm93cyByb3dzLiAgd3JpdGFibGUgaXMgdHJ1ZSBpZiAgKi8KIC8qIGNhbGxlciBpbnRlbmRzIHRvIG1vZGlmeSB0aGUgYWNjZXNzZWQgYXJlYS4gKi8KQEAgLTkxMSw3ICs5MTEsNyBAQAogCiAgICAgICBsdGVtcCA9IChsb25nKSBlbmRfcm93IC0gKGxvbmcpIHB0ci0+cm93c19pbl9tZW07CiAgICAgICBpZiAobHRlbXAgPCAwKQotCWx0ZW1wID0gMDsJCS8qIGRvbid0IGZhbGwgb2ZmIGZyb250IGVuZCBvZiBmaWxlICovCisgICAgICAgIGx0ZW1wID0gMDsgICAgICAgICAgICAgIC8qIGRvbid0IGZhbGwgb2ZmIGZyb250IGVuZCBvZiBmaWxlICovCiAgICAgICBwdHItPmN1cl9zdGFydF9yb3cgPSAoSkRJTUVOU0lPTikgbHRlbXA7CiAgICAgfQogICAgIC8qIFJlYWQgaW4gdGhlIHNlbGVjdGVkIHBhcnQgb2YgdGhlIGFycmF5LgpAQCAtOTI2LDkgKzkyNiw5IEBACiAgICAqLwogICBpZiAocHRyLT5maXJzdF91bmRlZl9yb3cgPCBlbmRfcm93KSB7CiAgICAgaWYgKHB0ci0+Zmlyc3RfdW5kZWZfcm93IDwgc3RhcnRfcm93KSB7Ci0gICAgICBpZiAod3JpdGFibGUpCQkvKiB3cml0ZXIgc2tpcHBlZCBvdmVyIGEgc2VjdGlvbiBvZiBhcnJheSAqLwotCUVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX1ZJUlRVQUxfQUNDRVNTKTsKLSAgICAgIHVuZGVmX3JvdyA9IHN0YXJ0X3JvdzsJLyogYnV0IHJlYWRlciBpcyBhbGxvd2VkIHRvIHJlYWQgYWhlYWQgKi8KKyAgICAgIGlmICh3cml0YWJsZSkgICAgICAgICAgICAgLyogd3JpdGVyIHNraXBwZWQgb3ZlciBhIHNlY3Rpb24gb2YgYXJyYXkgKi8KKyAgICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfVklSVFVBTF9BQ0NFU1MpOworICAgICAgdW5kZWZfcm93ID0gc3RhcnRfcm93OyAgICAvKiBidXQgcmVhZGVyIGlzIGFsbG93ZWQgdG8gcmVhZCBhaGVhZCAqLwogICAgIH0gZWxzZSB7CiAgICAgICB1bmRlZl9yb3cgPSBwdHItPmZpcnN0X3VuZGVmX3JvdzsKICAgICB9CkBAIC05MzksMTIgKzkzOSwxMiBAQAogICAgICAgdW5kZWZfcm93IC09IHB0ci0+Y3VyX3N0YXJ0X3JvdzsgLyogbWFrZSBpbmRleGVzIHJlbGF0aXZlIHRvIGJ1ZmZlciAqLwogICAgICAgZW5kX3JvdyAtPSBwdHItPmN1cl9zdGFydF9yb3c7CiAgICAgICB3aGlsZSAodW5kZWZfcm93IDwgZW5kX3JvdykgewotCWp6ZXJvX2Zhcigodm9pZCBGQVIgKikgcHRyLT5tZW1fYnVmZmVyW3VuZGVmX3Jvd10sIGJ5dGVzcGVycm93KTsKLQl1bmRlZl9yb3crKzsKKyAgICAgICAganplcm9fZmFyKCh2b2lkIEZBUiAqKSBwdHItPm1lbV9idWZmZXJbdW5kZWZfcm93XSwgYnl0ZXNwZXJyb3cpOworICAgICAgICB1bmRlZl9yb3crKzsKICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgaWYgKCEgd3JpdGFibGUpCQkvKiByZWFkZXIgbG9va2luZyBhdCB1bmRlZmluZWQgZGF0YSAqLwotCUVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX1ZJUlRVQUxfQUNDRVNTKTsKKyAgICAgIGlmICghIHdyaXRhYmxlKSAgICAgICAgICAgLyogcmVhZGVyIGxvb2tpbmcgYXQgdW5kZWZpbmVkIGRhdGEgKi8KKyAgICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfVklSVFVBTF9BQ0NFU1MpOwogICAgIH0KICAgfQogICAvKiBGbGFnIHRoZSBidWZmZXIgZGlydHkgaWYgY2FsbGVyIHdpbGwgd3JpdGUgaW4gaXQgKi8KQEAgLTk2OCw3ICs5NjgsNyBAQAogICBzaXplX3Qgc3BhY2VfZnJlZWQ7CiAKICAgaWYgKHBvb2xfaWQgPCAwIHx8IHBvb2xfaWQgPj0gSlBPT0xfTlVNUE9PTFMpCi0gICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1BPT0xfSUQsIHBvb2xfaWQpOwkvKiBzYWZldHkgY2hlY2sgKi8KKyAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfUE9PTF9JRCwgcG9vbF9pZCk7IC8qIHNhZmV0eSBjaGVjayAqLwogCiAjaWZkZWYgTUVNX1NUQVRTCiAgIGlmIChjaW5mby0+ZXJyLT50cmFjZV9sZXZlbCA+IDEpCkBAIC05ODEsMTYgKzk4MSwxNiBAQAogICAgIGp2aXJ0X2JhcnJheV9wdHIgYnB0cjsKIAogICAgIGZvciAoc3B0ciA9IG1lbS0+dmlydF9zYXJyYXlfbGlzdDsgc3B0ciAhPSBOVUxMOyBzcHRyID0gc3B0ci0+bmV4dCkgewotICAgICAgaWYgKHNwdHItPmJfc19vcGVuKSB7CS8qIHRoZXJlIG1heSBiZSBubyBiYWNraW5nIHN0b3JlICovCi0Jc3B0ci0+Yl9zX29wZW4gPSBGQUxTRTsJLyogcHJldmVudCByZWN1cnNpdmUgY2xvc2UgaWYgZXJyb3IgKi8KLQkoKnNwdHItPmJfc19pbmZvLmNsb3NlX2JhY2tpbmdfc3RvcmUpIChjaW5mbywgJiBzcHRyLT5iX3NfaW5mbyk7CisgICAgICBpZiAoc3B0ci0+Yl9zX29wZW4pIHsgICAgIC8qIHRoZXJlIG1heSBiZSBubyBiYWNraW5nIHN0b3JlICovCisgICAgICAgIHNwdHItPmJfc19vcGVuID0gRkFMU0U7IC8qIHByZXZlbnQgcmVjdXJzaXZlIGNsb3NlIGlmIGVycm9yICovCisgICAgICAgICgqc3B0ci0+Yl9zX2luZm8uY2xvc2VfYmFja2luZ19zdG9yZSkgKGNpbmZvLCAmIHNwdHItPmJfc19pbmZvKTsKICAgICAgIH0KICAgICB9CiAgICAgbWVtLT52aXJ0X3NhcnJheV9saXN0ID0gTlVMTDsKICAgICBmb3IgKGJwdHIgPSBtZW0tPnZpcnRfYmFycmF5X2xpc3Q7IGJwdHIgIT0gTlVMTDsgYnB0ciA9IGJwdHItPm5leHQpIHsKLSAgICAgIGlmIChicHRyLT5iX3Nfb3BlbikgewkvKiB0aGVyZSBtYXkgYmUgbm8gYmFja2luZyBzdG9yZSAqLwotCWJwdHItPmJfc19vcGVuID0gRkFMU0U7CS8qIHByZXZlbnQgcmVjdXJzaXZlIGNsb3NlIGlmIGVycm9yICovCi0JKCpicHRyLT5iX3NfaW5mby5jbG9zZV9iYWNraW5nX3N0b3JlKSAoY2luZm8sICYgYnB0ci0+Yl9zX2luZm8pOworICAgICAgaWYgKGJwdHItPmJfc19vcGVuKSB7ICAgICAvKiB0aGVyZSBtYXkgYmUgbm8gYmFja2luZyBzdG9yZSAqLworICAgICAgICBicHRyLT5iX3Nfb3BlbiA9IEZBTFNFOyAvKiBwcmV2ZW50IHJlY3Vyc2l2ZSBjbG9zZSBpZiBlcnJvciAqLworICAgICAgICAoKmJwdHItPmJfc19pbmZvLmNsb3NlX2JhY2tpbmdfc3RvcmUpIChjaW5mbywgJiBicHRyLT5iX3NfaW5mbyk7CiAgICAgICB9CiAgICAgfQogICAgIG1lbS0+dmlydF9iYXJyYXlfbGlzdCA9IE5VTEw7CkBAIC0xMDAzLDggKzEwMDMsOCBAQAogICB3aGlsZSAobGhkcl9wdHIgIT0gTlVMTCkgewogICAgIGxhcmdlX3Bvb2xfcHRyIG5leHRfbGhkcl9wdHIgPSBsaGRyX3B0ci0+bmV4dDsKICAgICBzcGFjZV9mcmVlZCA9IGxoZHJfcHRyLT5ieXRlc191c2VkICsKLQkJICBsaGRyX3B0ci0+Ynl0ZXNfbGVmdCArCi0JCSAgU0laRU9GKGxhcmdlX3Bvb2xfaGRyKTsKKyAgICAgICAgICAgICAgICAgIGxoZHJfcHRyLT5ieXRlc19sZWZ0ICsKKyAgICAgICAgICAgICAgICAgIFNJWkVPRihsYXJnZV9wb29sX2hkcik7CiAgICAganBlZ19mcmVlX2xhcmdlKGNpbmZvLCAodm9pZCBGQVIgKikgbGhkcl9wdHIsIHNwYWNlX2ZyZWVkKTsKICAgICBtZW0tPnRvdGFsX3NwYWNlX2FsbG9jYXRlZCAtPSBzcGFjZV9mcmVlZDsKICAgICBsaGRyX3B0ciA9IG5leHRfbGhkcl9wdHI7CkBAIC0xMDE3LDggKzEwMTcsOCBAQAogICB3aGlsZSAoc2hkcl9wdHIgIT0gTlVMTCkgewogICAgIHNtYWxsX3Bvb2xfcHRyIG5leHRfc2hkcl9wdHIgPSBzaGRyX3B0ci0+bmV4dDsKICAgICBzcGFjZV9mcmVlZCA9IHNoZHJfcHRyLT5ieXRlc191c2VkICsKLQkJICBzaGRyX3B0ci0+Ynl0ZXNfbGVmdCArCi0JCSAgU0laRU9GKHNtYWxsX3Bvb2xfaGRyKTsKKyAgICAgICAgICAgICAgICAgIHNoZHJfcHRyLT5ieXRlc19sZWZ0ICsKKyAgICAgICAgICAgICAgICAgIFNJWkVPRihzbWFsbF9wb29sX2hkcik7CiAgICAganBlZ19mcmVlX3NtYWxsKGNpbmZvLCAodm9pZCAqKSBzaGRyX3B0ciwgc3BhY2VfZnJlZWQpOwogICAgIG1lbS0+dG90YWxfc3BhY2VfYWxsb2NhdGVkIC09IHNwYWNlX2ZyZWVkOwogICAgIHNoZHJfcHRyID0gbmV4dF9zaGRyX3B0cjsKQEAgLTEwNDYsOSArMTA0Niw5IEBACiAKICAgLyogUmVsZWFzZSB0aGUgbWVtb3J5IG1hbmFnZXIgY29udHJvbCBibG9jayB0b28uICovCiAgIGpwZWdfZnJlZV9zbWFsbChjaW5mbywgKHZvaWQgKikgY2luZm8tPm1lbSwgU0laRU9GKG15X21lbW9yeV9tZ3IpKTsKLSAgY2luZm8tPm1lbSA9IE5VTEw7CQkvKiBlbnN1cmVzIEkgd2lsbCBiZSBjYWxsZWQgb25seSBvbmNlICovCisgIGNpbmZvLT5tZW0gPSBOVUxMOyAgICAgICAgICAgIC8qIGVuc3VyZXMgSSB3aWxsIGJlIGNhbGxlZCBvbmx5IG9uY2UgKi8KIAotICBqcGVnX21lbV90ZXJtKGNpbmZvKTsJCS8qIHN5c3RlbS1kZXBlbmRlbnQgY2xlYW51cCAqLworICBqcGVnX21lbV90ZXJtKGNpbmZvKTsgICAgICAgICAvKiBzeXN0ZW0tZGVwZW5kZW50IGNsZWFudXAgKi8KIH0KIAogCkBAIC0xMDY1LDcgKzEwNjUsNyBAQAogICBpbnQgcG9vbDsKICAgc2l6ZV90IHRlc3RfbWFjOwogCi0gIGNpbmZvLT5tZW0gPSBOVUxMOwkJLyogZm9yIHNhZmV0eSBpZiBpbml0IGZhaWxzICovCisgIGNpbmZvLT5tZW0gPSBOVUxMOyAgICAgICAgICAgIC8qIGZvciBzYWZldHkgaWYgaW5pdCBmYWlscyAqLwogCiAgIC8qIENoZWNrIGZvciBjb25maWd1cmF0aW9uIGVycm9ycy4KICAgICogU0laRU9GKEFMSUdOX1RZUEUpIHNob3VsZCBiZSBhIHBvd2VyIG9mIDI7IG90aGVyd2lzZSwgaXQgcHJvYmFibHkKQEAgLTEwOTIsNyArMTA5Miw3IEBACiAgIG1lbSA9IChteV9tZW1fcHRyKSBqcGVnX2dldF9zbWFsbChjaW5mbywgU0laRU9GKG15X21lbW9yeV9tZ3IpKTsKIAogICBpZiAobWVtID09IE5VTEwpIHsKLSAgICBqcGVnX21lbV90ZXJtKGNpbmZvKTsJLyogc3lzdGVtLWRlcGVuZGVudCBjbGVhbnVwICovCisgICAganBlZ19tZW1fdGVybShjaW5mbyk7ICAgICAgIC8qIHN5c3RlbS1kZXBlbmRlbnQgY2xlYW51cCAqLwogICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX09VVF9PRl9NRU1PUlksIDApOwogICB9CiAKQEAgLTExNDAsOSArMTE0MCw5IEBACiAgICAgICBjaGFyIGNoID0gJ3gnOwogCiAgICAgICBpZiAoc3NjYW5mKG1lbWVudiwgIiVsZCVjIiwgJm1heF90b191c2UsICZjaCkgPiAwKSB7Ci0JaWYgKGNoID09ICdtJyB8fCBjaCA9PSAnTScpCi0JICBtYXhfdG9fdXNlICo9IDEwMDBMOwotCW1lbS0+cHViLm1heF9tZW1vcnlfdG9fdXNlID0gbWF4X3RvX3VzZSAqIDEwMDBMOworICAgICAgICBpZiAoY2ggPT0gJ20nIHx8IGNoID09ICdNJykKKyAgICAgICAgICBtYXhfdG9fdXNlICo9IDEwMDBMOworICAgICAgICBtZW0tPnB1Yi5tYXhfbWVtb3J5X3RvX3VzZSA9IG1heF90b191c2UgKiAxMDAwTDsKICAgICAgIH0KICAgICB9CiAgIH0KZGlmZiAtLWdpdCBhL2ptZW1ub2JzLmMgYi9qbWVtbm9icy5jCmluZGV4IDM0YjE4OTUuLjJlNGRlMDkgMTAwNjQ0Ci0tLSBhL2ptZW1ub2JzLmMKKysrIGIvam1lbW5vYnMuYwpAQCAtMTgsOSArMTgsOSBAQAogI2RlZmluZSBKUEVHX0lOVEVSTkFMUwogI2luY2x1ZGUgImppbmNsdWRlLmgiCiAjaW5jbHVkZSAianBlZ2xpYi5oIgotI2luY2x1ZGUgImptZW1zeXMuaCIJCS8qIGltcG9ydCB0aGUgc3lzdGVtLWRlcGVuZGVudCBkZWNsYXJhdGlvbnMgKi8KKyNpbmNsdWRlICJqbWVtc3lzLmgiICAgICAgICAgICAgLyogaW1wb3J0IHRoZSBzeXN0ZW0tZGVwZW5kZW50IGRlY2xhcmF0aW9ucyAqLwogCi0jaWZuZGVmIEhBVkVfU1RETElCX0gJCS8qIDxzdGRsaWIuaD4gc2hvdWxkIGRlY2xhcmUgbWFsbG9jKCksZnJlZSgpICovCisjaWZuZGVmIEhBVkVfU1RETElCX0ggICAgICAgICAgIC8qIDxzdGRsaWIuaD4gc2hvdWxkIGRlY2xhcmUgbWFsbG9jKCksZnJlZSgpICovCiBleHRlcm4gdm9pZCAqIG1hbGxvYyBKUFAoKHNpemVfdCBzaXplKSk7CiBleHRlcm4gdm9pZCBmcmVlIEpQUCgodm9pZCAqcHRyKSk7CiAjZW5kaWYKQEAgLTcxLDcgKzcxLDcgQEAKIAogR0xPQkFMKHNpemVfdCkKIGpwZWdfbWVtX2F2YWlsYWJsZSAoal9jb21tb25fcHRyIGNpbmZvLCBzaXplX3QgbWluX2J5dGVzX25lZWRlZCwKLQkJICAgIHNpemVfdCBtYXhfYnl0ZXNfbmVlZGVkLCBzaXplX3QgYWxyZWFkeV9hbGxvY2F0ZWQpCisgICAgICAgICAgICAgICAgICAgIHNpemVfdCBtYXhfYnl0ZXNfbmVlZGVkLCBzaXplX3QgYWxyZWFkeV9hbGxvY2F0ZWQpCiB7CiAgIHJldHVybiBtYXhfYnl0ZXNfbmVlZGVkOwogfQpAQCAtODUsNyArODUsNyBAQAogCiBHTE9CQUwodm9pZCkKIGpwZWdfb3Blbl9iYWNraW5nX3N0b3JlIChqX2NvbW1vbl9wdHIgY2luZm8sIGJhY2tpbmdfc3RvcmVfcHRyIGluZm8sCi0JCQkgbG9uZyB0b3RhbF9ieXRlc19uZWVkZWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB0b3RhbF9ieXRlc19uZWVkZWQpCiB7CiAgIEVSUkVYSVQoY2luZm8sIEpFUlJfTk9fQkFDS0lOR19TVE9SRSk7CiB9CkBAIC05OSw3ICs5OSw3IEBACiBHTE9CQUwobG9uZykKIGpwZWdfbWVtX2luaXQgKGpfY29tbW9uX3B0ciBjaW5mbykKIHsKLSAgcmV0dXJuIDA7CQkJLyoganVzdCBzZXQgbWF4X21lbW9yeV90b191c2UgdG8gMCAqLworICByZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgICAvKiBqdXN0IHNldCBtYXhfbWVtb3J5X3RvX3VzZSB0byAwICovCiB9CiAKIEdMT0JBTCh2b2lkKQpkaWZmIC0tZ2l0IGEvam1lbXN5cy5oIGIvam1lbXN5cy5oCmluZGV4IGIxOTA5NDUuLjViNmI3YzQgMTAwNjQ0Ci0tLSBhL2ptZW1zeXMuaAorKysgYi9qbWVtc3lzLmgKQEAgLTIyLDE0ICsyMiwxNCBAQAogLyogU2hvcnQgZm9ybXMgb2YgZXh0ZXJuYWwgbmFtZXMgZm9yIHN5c3RlbXMgd2l0aCBicmFpbi1kYW1hZ2VkIGxpbmtlcnMuICovCiAKICNpZmRlZiBORUVEX1NIT1JUX0VYVEVSTkFMX05BTUVTCi0jZGVmaW5lIGpwZWdfZ2V0X3NtYWxsCQlqR2V0U21hbGwKLSNkZWZpbmUganBlZ19mcmVlX3NtYWxsCQlqRnJlZVNtYWxsCi0jZGVmaW5lIGpwZWdfZ2V0X2xhcmdlCQlqR2V0TGFyZ2UKLSNkZWZpbmUganBlZ19mcmVlX2xhcmdlCQlqRnJlZUxhcmdlCi0jZGVmaW5lIGpwZWdfbWVtX2F2YWlsYWJsZQlqTWVtQXZhaWwKLSNkZWZpbmUganBlZ19vcGVuX2JhY2tpbmdfc3RvcmUJak9wZW5CYWNrU3RvcmUKLSNkZWZpbmUganBlZ19tZW1faW5pdAkJak1lbUluaXQKLSNkZWZpbmUganBlZ19tZW1fdGVybQkJak1lbVRlcm0KKyNkZWZpbmUganBlZ19nZXRfc21hbGwgICAgICAgICAgakdldFNtYWxsCisjZGVmaW5lIGpwZWdfZnJlZV9zbWFsbCAgICAgICAgIGpGcmVlU21hbGwKKyNkZWZpbmUganBlZ19nZXRfbGFyZ2UgICAgICAgICAgakdldExhcmdlCisjZGVmaW5lIGpwZWdfZnJlZV9sYXJnZSAgICAgICAgIGpGcmVlTGFyZ2UKKyNkZWZpbmUganBlZ19tZW1fYXZhaWxhYmxlICAgICAgak1lbUF2YWlsCisjZGVmaW5lIGpwZWdfb3Blbl9iYWNraW5nX3N0b3JlIGpPcGVuQmFja1N0b3JlCisjZGVmaW5lIGpwZWdfbWVtX2luaXQgICAgICAgICAgIGpNZW1Jbml0CisjZGVmaW5lIGpwZWdfbWVtX3Rlcm0gICAgICAgICAgIGpNZW1UZXJtCiAjZW5kaWYgLyogTkVFRF9TSE9SVF9FWFRFUk5BTF9OQU1FUyAqLwogCiAKQEAgLTQ2LDcgKzQ2LDcgQEAKIAogRVhURVJOKHZvaWQgKikganBlZ19nZXRfc21hbGwgSlBQKChqX2NvbW1vbl9wdHIgY2luZm8sIHNpemVfdCBzaXplb2ZvYmplY3QpKTsKIEVYVEVSTih2b2lkKSBqcGVnX2ZyZWVfc21hbGwgSlBQKChqX2NvbW1vbl9wdHIgY2luZm8sIHZvaWQgKiBvYmplY3QsCi0JCQkJICBzaXplX3Qgc2l6ZW9mb2JqZWN0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemVvZm9iamVjdCkpOwogCiAvKgogICogVGhlc2UgdHdvIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byBhbGxvY2F0ZSBhbmQgcmVsZWFzZSBsYXJnZSBjaHVua3Mgb2YKQEAgLTU4LDkgKzU4LDkgQEAKICAqLwogCiBFWFRFUk4odm9pZCBGQVIgKikganBlZ19nZXRfbGFyZ2UgSlBQKChqX2NvbW1vbl9wdHIgY2luZm8sCi0JCQkJICAgICAgIHNpemVfdCBzaXplb2ZvYmplY3QpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplb2ZvYmplY3QpKTsKIEVYVEVSTih2b2lkKSBqcGVnX2ZyZWVfbGFyZ2UgSlBQKChqX2NvbW1vbl9wdHIgY2luZm8sIHZvaWQgRkFSICogb2JqZWN0LAotCQkJCSAgc2l6ZV90IHNpemVvZm9iamVjdCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplb2ZvYmplY3QpKTsKIAogLyoKICAqIFRoZSBtYWNybyBNQVhfQUxMT0NfQ0hVTksgZGVzaWduYXRlcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBtYXkKQEAgLTc0LDcgKzc0LDcgQEAKICAqIHNpemVfdCBhbmQgd2lsbCBiZSBhIG11bHRpcGxlIG9mIHNpemVvZihhbGlnbl90eXBlKS4KICAqLwogCi0jaWZuZGVmIE1BWF9BTExPQ19DSFVOSwkJLyogbWF5IGJlIG92ZXJyaWRkZW4gaW4gamNvbmZpZy5oICovCisjaWZuZGVmIE1BWF9BTExPQ19DSFVOSyAgICAgICAgIC8qIG1heSBiZSBvdmVycmlkZGVuIGluIGpjb25maWcuaCAqLwogI2RlZmluZSBNQVhfQUxMT0NfQ0hVTksgIDEwMDAwMDAwMDBMCiAjZW5kaWYKIApAQCAtMTAxLDkgKzEwMSw5IEBACiAgKi8KIAogRVhURVJOKHNpemVfdCkganBlZ19tZW1fYXZhaWxhYmxlIEpQUCgoal9jb21tb25fcHRyIGNpbmZvLAotCQkJCSAgICAgc2l6ZV90IG1pbl9ieXRlc19uZWVkZWQsCi0JCQkJICAgICBzaXplX3QgbWF4X2J5dGVzX25lZWRlZCwKLQkJCQkgICAgIHNpemVfdCBhbHJlYWR5X2FsbG9jYXRlZCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBtaW5fYnl0ZXNfbmVlZGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBtYXhfYnl0ZXNfbmVlZGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBhbHJlYWR5X2FsbG9jYXRlZCkpOwogCiAKIC8qCkBAIC0xMTMsMjMgKzExMywyMyBAQAogICogYXJlIHByaXZhdGUgdG8gdGhlIHN5c3RlbS1kZXBlbmRlbnQgYmFja2luZyBzdG9yZSByb3V0aW5lcy4KICAqLwogCi0jZGVmaW5lIFRFTVBfTkFNRV9MRU5HVEggICA2NAkvKiBtYXggbGVuZ3RoIG9mIGEgdGVtcG9yYXJ5IGZpbGUncyBuYW1lICovCisjZGVmaW5lIFRFTVBfTkFNRV9MRU5HVEggICA2NCAgIC8qIG1heCBsZW5ndGggb2YgYSB0ZW1wb3JhcnkgZmlsZSdzIG5hbWUgKi8KIAogCi0jaWZkZWYgVVNFX01TRE9TX01FTU1HUgkJLyogRE9TLXNwZWNpZmljIGp1bmsgKi8KKyNpZmRlZiBVU0VfTVNET1NfTUVNTUdSICAgICAgICAgLyogRE9TLXNwZWNpZmljIGp1bmsgKi8KIAotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBYTVNIOwkvKiB0eXBlIG9mIGV4dGVuZGVkLW1lbW9yeSBoYW5kbGVzICovCi10eXBlZGVmIHVuc2lnbmVkIHNob3J0IEVNU0g7CS8qIHR5cGUgb2YgZXhwYW5kZWQtbWVtb3J5IGhhbmRsZXMgKi8KK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgWE1TSDsgICAgLyogdHlwZSBvZiBleHRlbmRlZC1tZW1vcnkgaGFuZGxlcyAqLwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBFTVNIOyAgICAvKiB0eXBlIG9mIGV4cGFuZGVkLW1lbW9yeSBoYW5kbGVzICovCiAKIHR5cGVkZWYgdW5pb24gewotICBzaG9ydCBmaWxlX2hhbmRsZTsJCS8qIERPUyBmaWxlIGhhbmRsZSBpZiBpdCdzIGEgdGVtcCBmaWxlICovCi0gIFhNU0ggeG1zX2hhbmRsZTsJCS8qIGhhbmRsZSBpZiBpdCdzIGEgY2h1bmsgb2YgWE1TICovCi0gIEVNU0ggZW1zX2hhbmRsZTsJCS8qIGhhbmRsZSBpZiBpdCdzIGEgY2h1bmsgb2YgRU1TICovCisgIHNob3J0IGZpbGVfaGFuZGxlOyAgICAgICAgICAgIC8qIERPUyBmaWxlIGhhbmRsZSBpZiBpdCdzIGEgdGVtcCBmaWxlICovCisgIFhNU0ggeG1zX2hhbmRsZTsgICAgICAgICAgICAgIC8qIGhhbmRsZSBpZiBpdCdzIGEgY2h1bmsgb2YgWE1TICovCisgIEVNU0ggZW1zX2hhbmRsZTsgICAgICAgICAgICAgIC8qIGhhbmRsZSBpZiBpdCdzIGEgY2h1bmsgb2YgRU1TICovCiB9IGhhbmRsZV91bmlvbjsKIAogI2VuZGlmIC8qIFVTRV9NU0RPU19NRU1NR1IgKi8KIAotI2lmZGVmIFVTRV9NQUNfTUVNTUdSCQkvKiBNYWMtc3BlY2lmaWMganVuayAqLworI2lmZGVmIFVTRV9NQUNfTUVNTUdSICAgICAgICAgICAvKiBNYWMtc3BlY2lmaWMganVuayAqLwogI2luY2x1ZGUgPEZpbGVzLmg+CiAjZW5kaWYgLyogVVNFX01BQ19NRU1NR1IgKi8KIApAQCAtMTM5LDMwICsxMzksMzAgQEAKIHR5cGVkZWYgc3RydWN0IGJhY2tpbmdfc3RvcmVfc3RydWN0IHsKICAgLyogTWV0aG9kcyBmb3IgcmVhZGluZy93cml0aW5nL2Nsb3NpbmcgdGhpcyBiYWNraW5nLXN0b3JlIG9iamVjdCAqLwogICBKTUVUSE9EKHZvaWQsIHJlYWRfYmFja2luZ19zdG9yZSwgKGpfY29tbW9uX3B0ciBjaW5mbywKLQkJCQkgICAgIGJhY2tpbmdfc3RvcmVfcHRyIGluZm8sCi0JCQkJICAgICB2b2lkIEZBUiAqIGJ1ZmZlcl9hZGRyZXNzLAotCQkJCSAgICAgbG9uZyBmaWxlX29mZnNldCwgbG9uZyBieXRlX2NvdW50KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2luZ19zdG9yZV9wdHIgaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIEZBUiAqIGJ1ZmZlcl9hZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmlsZV9vZmZzZXQsIGxvbmcgYnl0ZV9jb3VudCkpOwogICBKTUVUSE9EKHZvaWQsIHdyaXRlX2JhY2tpbmdfc3RvcmUsIChqX2NvbW1vbl9wdHIgY2luZm8sCi0JCQkJICAgICAgYmFja2luZ19zdG9yZV9wdHIgaW5mbywKLQkJCQkgICAgICB2b2lkIEZBUiAqIGJ1ZmZlcl9hZGRyZXNzLAotCQkJCSAgICAgIGxvbmcgZmlsZV9vZmZzZXQsIGxvbmcgYnl0ZV9jb3VudCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNraW5nX3N0b3JlX3B0ciBpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIEZBUiAqIGJ1ZmZlcl9hZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGZpbGVfb2Zmc2V0LCBsb25nIGJ5dGVfY291bnQpKTsKICAgSk1FVEhPRCh2b2lkLCBjbG9zZV9iYWNraW5nX3N0b3JlLCAoal9jb21tb25fcHRyIGNpbmZvLAotCQkJCSAgICAgIGJhY2tpbmdfc3RvcmVfcHRyIGluZm8pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2luZ19zdG9yZV9wdHIgaW5mbykpOwogCiAgIC8qIFByaXZhdGUgZmllbGRzIGZvciBzeXN0ZW0tZGVwZW5kZW50IGJhY2tpbmctc3RvcmUgbWFuYWdlbWVudCAqLwogI2lmZGVmIFVTRV9NU0RPU19NRU1NR1IKICAgLyogRm9yIHRoZSBNUy1ET1MgbWFuYWdlciAoam1lbWRvcy5jKSwgd2UgbmVlZDogKi8KLSAgaGFuZGxlX3VuaW9uIGhhbmRsZTsJCS8qIHJlZmVyZW5jZSB0byBiYWNraW5nLXN0b3JlIHN0b3JhZ2Ugb2JqZWN0ICovCisgIGhhbmRsZV91bmlvbiBoYW5kbGU7ICAgICAgICAgIC8qIHJlZmVyZW5jZSB0byBiYWNraW5nLXN0b3JlIHN0b3JhZ2Ugb2JqZWN0ICovCiAgIGNoYXIgdGVtcF9uYW1lW1RFTVBfTkFNRV9MRU5HVEhdOyAvKiBuYW1lIGlmIGl0J3MgYSBmaWxlICovCiAjZWxzZQogI2lmZGVmIFVTRV9NQUNfTUVNTUdSCiAgIC8qIEZvciB0aGUgTWFjIG1hbmFnZXIgKGptZW1tYWMuYyksIHdlIG5lZWQ6ICovCi0gIHNob3J0IHRlbXBfZmlsZTsJCS8qIGZpbGUgcmVmZXJlbmNlIG51bWJlciB0byB0ZW1wIGZpbGUgKi8KLSAgRlNTcGVjIHRlbXBTcGVjOwkJLyogdGhlIEZTU3BlYyBmb3IgdGhlIHRlbXAgZmlsZSAqLworICBzaG9ydCB0ZW1wX2ZpbGU7ICAgICAgICAgICAgICAvKiBmaWxlIHJlZmVyZW5jZSBudW1iZXIgdG8gdGVtcCBmaWxlICovCisgIEZTU3BlYyB0ZW1wU3BlYzsgICAgICAgICAgICAgIC8qIHRoZSBGU1NwZWMgZm9yIHRoZSB0ZW1wIGZpbGUgKi8KICAgY2hhciB0ZW1wX25hbWVbVEVNUF9OQU1FX0xFTkdUSF07IC8qIG5hbWUgaWYgaXQncyBhIGZpbGUgKi8KICNlbHNlCiAgIC8qIEZvciBhIHR5cGljYWwgaW1wbGVtZW50YXRpb24gd2l0aCB0ZW1wIGZpbGVzLCB3ZSBuZWVkOiAqLwotICBGSUxFICogdGVtcF9maWxlOwkJLyogc3RkaW8gcmVmZXJlbmNlIHRvIHRlbXAgZmlsZSAqLworICBGSUxFICogdGVtcF9maWxlOyAgICAgICAgICAgICAvKiBzdGRpbyByZWZlcmVuY2UgdG8gdGVtcCBmaWxlICovCiAgIGNoYXIgdGVtcF9uYW1lW1RFTVBfTkFNRV9MRU5HVEhdOyAvKiBuYW1lIG9mIHRlbXAgZmlsZSAqLwogI2VuZGlmCiAjZW5kaWYKQEAgLTE3OCw4ICsxNzgsOCBAQAogICovCiAKIEVYVEVSTih2b2lkKSBqcGVnX29wZW5fYmFja2luZ19zdG9yZSBKUFAoKGpfY29tbW9uX3B0ciBjaW5mbywKLQkJCQkJICBiYWNraW5nX3N0b3JlX3B0ciBpbmZvLAotCQkJCQkgIGxvbmcgdG90YWxfYnl0ZXNfbmVlZGVkKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNraW5nX3N0b3JlX3B0ciBpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB0b3RhbF9ieXRlc19uZWVkZWQpKTsKIAogCiAvKgpkaWZmIC0tZ2l0IGEvam1vcmVjZmcuaCBiL2ptb3JlY2ZnLmgKaW5kZXggNTVhZjA1Ni4uMjM1ZjUwNyAxMDA2NDQKLS0tIGEvam1vcmVjZmcuaAorKysgYi9qbW9yZWNmZy5oCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIFRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlOgogICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTcsIFRob21hcyBHLiBMYW5lLgotICogTW9kaWZpY2F0aW9uczoKKyAqIGxpYmpwZWctdHVyYm8gTW9kaWZpY2F0aW9uczoKICAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSwgRC4gUi4gQ29tbWFuZGVyLgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgogICoKQEAgLTIyLDcgKzIyLDcgQEAKICAqIFdlIGRvIG5vdCBzdXBwb3J0IHJ1bi10aW1lIHNlbGVjdGlvbiBvZiBkYXRhIHByZWNpc2lvbiwgc29ycnkuCiAgKi8KIAotI2RlZmluZSBCSVRTX0lOX0pTQU1QTEUgIDgJLyogdXNlIDggb3IgMTIgKi8KKyNkZWZpbmUgQklUU19JTl9KU0FNUExFICA4ICAgICAgLyogdXNlIDggb3IgMTIgKi8KIAogCiAvKgpAQCAtMzQsNyArMzQsNyBAQAogICogYnl0ZXMgb2Ygc3RvcmFnZSwgd2hldGhlciBhY3R1YWxseSB1c2VkIGluIGFuIGltYWdlIG9yIG5vdC4pCiAgKi8KIAotI2RlZmluZSBNQVhfQ09NUE9ORU5UUyAgMTAJLyogbWF4aW11bSBudW1iZXIgb2YgaW1hZ2UgY29tcG9uZW50cyAqLworI2RlZmluZSBNQVhfQ09NUE9ORU5UUyAgMTAgICAgICAvKiBtYXhpbXVtIG51bWJlciBvZiBpbWFnZSBjb21wb25lbnRzICovCiAKIAogLyoKQEAgLTcyLDggKzcyLDggQEAKIAogI2VuZGlmIC8qIEhBVkVfVU5TSUdORURfQ0hBUiAqLwogCi0jZGVmaW5lIE1BWEpTQU1QTEUJMjU1Ci0jZGVmaW5lIENFTlRFUkpTQU1QTEUJMTI4CisjZGVmaW5lIE1BWEpTQU1QTEUgICAgICAyNTUKKyNkZWZpbmUgQ0VOVEVSSlNBTVBMRSAgIDEyOAogCiAjZW5kaWYgLyogQklUU19JTl9KU0FNUExFID09IDggKi8KIApAQCAtODYsOCArODYsOCBAQAogdHlwZWRlZiBzaG9ydCBKU0FNUExFOwogI2RlZmluZSBHRVRKU0FNUExFKHZhbHVlKSAgKChpbnQpICh2YWx1ZSkpCiAKLSNkZWZpbmUgTUFYSlNBTVBMRQk0MDk1Ci0jZGVmaW5lIENFTlRFUkpTQU1QTEUJMjA0OAorI2RlZmluZSBNQVhKU0FNUExFICAgICAgNDA5NQorI2RlZmluZSBDRU5URVJKU0FNUExFICAgMjA0OAogCiAjZW5kaWYgLyogQklUU19JTl9KU0FNUExFID09IDEyICovCiAKQEAgLTE1MywxMyArMTUzLDEzIEBACiAKIC8qIElOVDE2IG11c3QgaG9sZCBhdCBsZWFzdCB0aGUgdmFsdWVzIC0zMjc2OC4uMzI3NjcuICovCiAKLSNpZm5kZWYgWE1EX0gJCQkvKiBYMTEveG1kLmggY29ycmVjdGx5IGRlZmluZXMgSU5UMTYgKi8KKyNpZm5kZWYgWE1EX0ggICAgICAgICAgICAgICAgICAgLyogWDExL3htZC5oIGNvcnJlY3RseSBkZWZpbmVzIElOVDE2ICovCiB0eXBlZGVmIHNob3J0IElOVDE2OwogI2VuZGlmCiAKIC8qIElOVDMyIG11c3QgaG9sZCBhdCBsZWFzdCBzaWduZWQgMzItYml0IHZhbHVlcy4gKi8KIAotI2lmbmRlZiBYTURfSAkJCS8qIFgxMS94bWQuaCBjb3JyZWN0bHkgZGVmaW5lcyBJTlQzMiAqLworI2lmbmRlZiBYTURfSCAgICAgICAgICAgICAgICAgICAvKiBYMTEveG1kLmggY29ycmVjdGx5IGRlZmluZXMgSU5UMzIgKi8KIHR5cGVkZWYgbG9uZyBJTlQzMjsKICNlbmRpZgogCkBAIC0xODMsMTMgKzE4MywxMyBAQAogICovCiAKIC8qIGEgZnVuY3Rpb24gY2FsbGVkIHRocm91Z2ggbWV0aG9kIHBvaW50ZXJzOiAqLwotI2RlZmluZSBNRVRIT0RERUYodHlwZSkJCXN0YXRpYyB0eXBlCisjZGVmaW5lIE1FVEhPRERFRih0eXBlKSAgICAgICAgIHN0YXRpYyB0eXBlCiAvKiBhIGZ1bmN0aW9uIHVzZWQgb25seSBpbiBpdHMgbW9kdWxlOiAqLwotI2RlZmluZSBMT0NBTCh0eXBlKQkJc3RhdGljIHR5cGUKKyNkZWZpbmUgTE9DQUwodHlwZSkgICAgICAgICAgICAgc3RhdGljIHR5cGUKIC8qIGEgZnVuY3Rpb24gcmVmZXJlbmNlZCB0aHJ1IEVYVEVSTnM6ICovCi0jZGVmaW5lIEdMT0JBTCh0eXBlKQkJdHlwZQorI2RlZmluZSBHTE9CQUwodHlwZSkgICAgICAgICAgICB0eXBlCiAvKiBhIHJlZmVyZW5jZSB0byBhIEdMT0JBTCBmdW5jdGlvbjogKi8KLSNkZWZpbmUgRVhURVJOKHR5cGUpCQlleHRlcm4gdHlwZQorI2RlZmluZSBFWFRFUk4odHlwZSkgICAgICAgICAgICBleHRlcm4gdHlwZQogCiAKIC8qIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBkZWNsYXJlIGEgIm1ldGhvZCIsIHRoYXQgaXMsIGEgZnVuY3Rpb24gcG9pbnRlci4KQEAgLTIzMSwxMSArMjMxLDExIEBACiAjaWZuZGVmIEhBVkVfQk9PTEVBTgogdHlwZWRlZiBpbnQgYm9vbGVhbjsKICNlbmRpZgotI2lmbmRlZiBGQUxTRQkJCS8qIGluIGNhc2UgdGhlc2UgbWFjcm9zIGFscmVhZHkgZXhpc3QgKi8KLSNkZWZpbmUgRkFMU0UJMAkJLyogdmFsdWVzIG9mIGJvb2xlYW4gKi8KKyNpZm5kZWYgRkFMU0UgICAgICAgICAgICAgICAgICAgLyogaW4gY2FzZSB0aGVzZSBtYWNyb3MgYWxyZWFkeSBleGlzdCAqLworI2RlZmluZSBGQUxTRSAgIDAgICAgICAgICAgICAgICAvKiB2YWx1ZXMgb2YgYm9vbGVhbiAqLwogI2VuZGlmCiAjaWZuZGVmIFRSVUUKLSNkZWZpbmUgVFJVRQkxCisjZGVmaW5lIFRSVUUgICAgMQogI2VuZGlmCiAKIApAQCAtMjYzLDE1ICsyNjMsMTUgQEAKIAogLyogQ2FwYWJpbGl0eSBvcHRpb25zIGNvbW1vbiB0byBlbmNvZGVyIGFuZCBkZWNvZGVyOiAqLwogCi0jZGVmaW5lIERDVF9JU0xPV19TVVBQT1JURUQJLyogc2xvdyBidXQgYWNjdXJhdGUgaW50ZWdlciBhbGdvcml0aG0gKi8KLSNkZWZpbmUgRENUX0lGQVNUX1NVUFBPUlRFRAkvKiBmYXN0ZXIsIGxlc3MgYWNjdXJhdGUgaW50ZWdlciBtZXRob2QgKi8KLSNkZWZpbmUgRENUX0ZMT0FUX1NVUFBPUlRFRAkvKiBmbG9hdGluZy1wb2ludDogYWNjdXJhdGUsIGZhc3Qgb24gZmFzdCBIVyAqLworI2RlZmluZSBEQ1RfSVNMT1dfU1VQUE9SVEVEICAgICAvKiBzbG93IGJ1dCBhY2N1cmF0ZSBpbnRlZ2VyIGFsZ29yaXRobSAqLworI2RlZmluZSBEQ1RfSUZBU1RfU1VQUE9SVEVEICAgICAvKiBmYXN0ZXIsIGxlc3MgYWNjdXJhdGUgaW50ZWdlciBtZXRob2QgKi8KKyNkZWZpbmUgRENUX0ZMT0FUX1NVUFBPUlRFRCAgICAgLyogZmxvYXRpbmctcG9pbnQ6IGFjY3VyYXRlLCBmYXN0IG9uIGZhc3QgSFcgKi8KIAogLyogRW5jb2RlciBjYXBhYmlsaXR5IG9wdGlvbnM6ICovCiAKICNkZWZpbmUgQ19NVUxUSVNDQU5fRklMRVNfU1VQUE9SVEVEIC8qIE11bHRpcGxlLXNjYW4gSlBFRyBmaWxlcz8gKi8KLSNkZWZpbmUgQ19QUk9HUkVTU0lWRV9TVVBQT1JURUQJICAgIC8qIFByb2dyZXNzaXZlIEpQRUc/IChSZXF1aXJlcyBNVUxUSVNDQU4pKi8KLSNkZWZpbmUgRU5UUk9QWV9PUFRfU1VQUE9SVEVECSAgICAvKiBPcHRpbWl6YXRpb24gb2YgZW50cm9weSBjb2RpbmcgcGFybXM/ICovCisjZGVmaW5lIENfUFJPR1JFU1NJVkVfU1VQUE9SVEVEICAgICAvKiBQcm9ncmVzc2l2ZSBKUEVHPyAoUmVxdWlyZXMgTVVMVElTQ0FOKSovCisjZGVmaW5lIEVOVFJPUFlfT1BUX1NVUFBPUlRFRCAgICAgICAvKiBPcHRpbWl6YXRpb24gb2YgZW50cm9weSBjb2RpbmcgcGFybXM/ICovCiAvKiBOb3RlOiBpZiB5b3Ugc2VsZWN0ZWQgMTItYml0IGRhdGEgcHJlY2lzaW9uLCBpdCBpcyBkYW5nZXJvdXMgdG8gdHVybiBvZmYKICAqIEVOVFJPUFlfT1BUX1NVUFBPUlRFRC4gIFRoZSBzdGFuZGFyZCBIdWZmbWFuIHRhYmxlcyBhcmUgb25seSBnb29kIGZvciA4LWJpdAogICogcHJlY2lzaW9uLCBzbyBqY2h1ZmYuYyBub3JtYWxseSB1c2VzIGVudHJvcHkgb3B0aW1pemF0aW9uIHRvIGNvbXB1dGUKQEAgLTI4NSwzNyArMjg1LDQzIEBACiAvKiBEZWNvZGVyIGNhcGFiaWxpdHkgb3B0aW9uczogKi8KIAogI2RlZmluZSBEX01VTFRJU0NBTl9GSUxFU19TVVBQT1JURUQgLyogTXVsdGlwbGUtc2NhbiBKUEVHIGZpbGVzPyAqLwotI2RlZmluZSBEX1BST0dSRVNTSVZFX1NVUFBPUlRFRAkgICAgLyogUHJvZ3Jlc3NpdmUgSlBFRz8gKFJlcXVpcmVzIE1VTFRJU0NBTikqLwotI2RlZmluZSBTQVZFX01BUktFUlNfU1VQUE9SVEVECSAgICAvKiBqcGVnX3NhdmVfbWFya2VycygpIG5lZWRlZD8gKi8KKyNkZWZpbmUgRF9QUk9HUkVTU0lWRV9TVVBQT1JURUQgICAgIC8qIFByb2dyZXNzaXZlIEpQRUc/IChSZXF1aXJlcyBNVUxUSVNDQU4pKi8KKyNkZWZpbmUgU0FWRV9NQVJLRVJTX1NVUFBPUlRFRCAgICAgIC8qIGpwZWdfc2F2ZV9tYXJrZXJzKCkgbmVlZGVkPyAqLwogI2RlZmluZSBCTE9DS19TTU9PVEhJTkdfU1VQUE9SVEVEICAgLyogQmxvY2sgc21vb3RoaW5nPyAoUHJvZ3Jlc3NpdmUgb25seSkgKi8KLSNkZWZpbmUgSURDVF9TQ0FMSU5HX1NVUFBPUlRFRAkgICAgLyogT3V0cHV0IHJlc2NhbGluZyB2aWEgSURDVD8gKi8KKyNkZWZpbmUgSURDVF9TQ0FMSU5HX1NVUFBPUlRFRCAgICAgIC8qIE91dHB1dCByZXNjYWxpbmcgdmlhIElEQ1Q/ICovCiAjdW5kZWYgIFVQU0FNUExFX1NDQUxJTkdfU1VQUE9SVEVEICAvKiBPdXRwdXQgcmVzY2FsaW5nIGF0IHVwc2FtcGxlIHN0YWdlPyAqLwogI2RlZmluZSBVUFNBTVBMRV9NRVJHSU5HX1NVUFBPUlRFRCAgLyogRmFzdCBwYXRoIGZvciBzbG9wcHkgdXBzYW1wbGluZz8gKi8KLSNkZWZpbmUgUVVBTlRfMVBBU1NfU1VQUE9SVEVECSAgICAvKiAxLXBhc3MgY29sb3IgcXVhbnRpemF0aW9uPyAqLwotI2RlZmluZSBRVUFOVF8yUEFTU19TVVBQT1JURUQJICAgIC8qIDItcGFzcyBjb2xvciBxdWFudGl6YXRpb24/ICovCisjZGVmaW5lIFFVQU5UXzFQQVNTX1NVUFBPUlRFRCAgICAgICAvKiAxLXBhc3MgY29sb3IgcXVhbnRpemF0aW9uPyAqLworI2RlZmluZSBRVUFOVF8yUEFTU19TVVBQT1JURUQgICAgICAgLyogMi1wYXNzIGNvbG9yIHF1YW50aXphdGlvbj8gKi8KIAogLyogbW9yZSBjYXBhYmlsaXR5IG9wdGlvbnMgbGF0ZXIsIG5vIGRvdWJ0ICovCiAKIAogLyoKLSAqIE9yZGVyaW5nIG9mIFJHQiBkYXRhIGluIHNjYW5saW5lcyBwYXNzZWQgdG8gb3IgZnJvbSB0aGUgYXBwbGljYXRpb24uCi0gKiBJZiB5b3VyIGFwcGxpY2F0aW9uIHdhbnRzIHRvIGRlYWwgd2l0aCBkYXRhIGluIHRoZSBvcmRlciBCLEcsUiwganVzdAotICogY2hhbmdlIHRoZXNlIG1hY3Jvcy4gIFlvdSBjYW4gYWxzbyBkZWFsIHdpdGggZm9ybWF0cyBzdWNoIGFzIFIsRyxCLFgKLSAqIChvbmUgZXh0cmEgYnl0ZSBwZXIgcGl4ZWwpIGJ5IGNoYW5naW5nIFJHQl9QSVhFTFNJWkUuICBOb3RlIHRoYXQgY2hhbmdpbmcKLSAqIHRoZSBvZmZzZXRzIHdpbGwgYWxzbyBjaGFuZ2UgdGhlIG9yZGVyIGluIHdoaWNoIGNvbG9ybWFwIGRhdGEgaXMgb3JnYW5pemVkLgotICogUkVTVFJJQ1RJT05TOgotICogMS4gVGhlIHNhbXBsZSBhcHBsaWNhdGlvbnMgY2pwZWcsZGpwZWcgZG8gTk9UIHN1cHBvcnQgbW9kaWZpZWQgUkdCIGZvcm1hdHMuCi0gKiAyLiBUaGVzZSBtYWNyb3Mgb25seSBhZmZlY3QgUkdCPD0+WUNiQ3IgY29sb3IgY29udmVyc2lvbiwgc28gdGhleSBhcmUgbm90Ci0gKiAgICB1c2VmdWwgaWYgeW91IGFyZSB1c2luZyBKUEVHIGNvbG9yIHNwYWNlcyBvdGhlciB0aGFuIFlDYkNyIG9yIGdyYXlzY2FsZS4KLSAqIDMuIFRoZSBjb2xvciBxdWFudGl6ZXIgbW9kdWxlcyB3aWxsIG5vdCBiZWhhdmUgZGVzaXJhYmx5IGlmIFJHQl9QSVhFTFNJWkUKLSAqICAgIGlzIG5vdCAzICh0aGV5IGRvbid0IHVuZGVyc3RhbmQgYWJvdXQgZHVtbXkgY29sb3IgY29tcG9uZW50cyEpLiAgU28geW91Ci0gKiAgICBjYW4ndCB1c2UgY29sb3IgcXVhbnRpemF0aW9uIGlmIHlvdSBjaGFuZ2UgdGhhdCB2YWx1ZS4KKyAqIFRoZSBSR0JfUkVELCBSR0JfR1JFRU4sIFJHQl9CTFVFLCBhbmQgUkdCX1BJWEVMU0laRSBtYWNyb3MgYXJlIGEgdmVzdGlnaWFsCisgKiBmZWF0dXJlIG9mIGxpYmpwZWcuICBUaGUgaWRlYSB3YXMgdGhhdCwgaWYgYW4gYXBwbGljYXRpb24gZGV2ZWxvcGVyIG5lZWRlZAorICogdG8gY29tcHJlc3MgZnJvbS9kZWNvbXByZXNzIHRvIGEgQkdSL0JHUlgvUkdCWC9YQkdSL1hSR0IgYnVmZmVyLCB0aGV5IGNvdWxkCisgKiBjaGFuZ2UgdGhlc2UgbWFjcm9zLCByZWJ1aWxkIGxpYmpwZWcsIGFuZCBsaW5rIHRoZWlyIGFwcGxpY2F0aW9uIHN0YXRpY2FsbHkKKyAqIHdpdGggaXQuICBJbiByZWFsaXR5LCBmZXcgcGVvcGxlIGV2ZXIgZGlkIHRoaXMsIGJlY2F1c2UgdGhlcmUgd2VyZSBzb21lCisgKiBzZXZlcmUgcmVzdHJpY3Rpb25zIGludm9sdmVkIChjanBlZyBhbmQgZGpwZWcgbm8gbG9uZ2VyIHdvcmtlZCBwcm9wZXJseSwKKyAqIGNvbXByZXNzaW5nL2RlY29tcHJlc3NpbmcgUkdCIEpQRUdzIG5vIGxvbmdlciB3b3JrZWQgcHJvcGVybHksIGFuZCB0aGUgY29sb3IKKyAqIHF1YW50aXplciB3b3VsZG4ndCB3b3JrIHdpdGggcGl4ZWwgc2l6ZXMgb3RoZXIgdGhhbiAzLikgIEZ1cnRoZXIsIHNpbmNlIGFsbAorICogb2YgdGhlIE8vUy1zdXBwbGllZCB2ZXJzaW9ucyBvZiBsaWJqcGVnIHdlcmUgYnVpbHQgd2l0aCB0aGUgZGVmYXVsdCB2YWx1ZXMKKyAqIG9mIFJHQl9SRUQsIFJHQl9HUkVFTiwgUkdCX0JMVUUsIGFuZCBSR0JfUElYRUxTSVpFLCBtYW55IGFwcGxpY2F0aW9ucyBoYXZlCisgKiBjb21lIHRvIHJlZ2FyZCB0aGVzZSB2YWx1ZXMgYXMgaW1tdXRhYmxlLgorICoKKyAqIFRoZSBsaWJqcGVnLXR1cmJvIGNvbG9yc3BhY2UgZXh0ZW5zaW9ucyBwcm92aWRlIGEgbXVjaCBjbGVhbmVyIHdheSBvZgorICogY29tcHJlc3NpbmcgZnJvbS9kZWNvbXByZXNzaW5nIHRvIGJ1ZmZlcnMgd2l0aCBhcmJpdHJhcnkgY29tcG9uZW50IG9yZGVycworICogYW5kIHBpeGVsIHNpemVzLiAgVGh1cywgd2UgZG8gbm90IHN1cHBvcnQgY2hhbmdpbmcgdGhlIHZhbHVlcyBvZiBSR0JfUkVELAorICogUkdCX0dSRUVOLCBSR0JfQkxVRSwgb3IgUkdCX1BJWEVMU0laRS4gIEluIGFkZGl0aW9uIHRvIHRoZSByZXN0cmljdGlvbnMKKyAqIGxpc3RlZCBhYm92ZSwgY2hhbmdpbmcgdGhlc2UgdmFsdWVzIHdpbGwgYWxzbyBicmVhayB0aGUgU0lNRCBleHRlbnNpb25zIGFuZAorICogdGhlIHJlZ3Jlc3Npb24gdGVzdHMuCiAgKi8KIAotI2RlZmluZSBSR0JfUkVECQkwCS8qIE9mZnNldCBvZiBSZWQgaW4gYW4gUkdCIHNjYW5saW5lIGVsZW1lbnQgKi8KLSNkZWZpbmUgUkdCX0dSRUVOCTEJLyogT2Zmc2V0IG9mIEdyZWVuICovCi0jZGVmaW5lIFJHQl9CTFVFCTIJLyogT2Zmc2V0IG9mIEJsdWUgKi8KLSNkZWZpbmUgUkdCX1BJWEVMU0laRQkzCS8qIEpTQU1QTEVzIHBlciBSR0Igc2NhbmxpbmUgZWxlbWVudCAqLworI2RlZmluZSBSR0JfUkVEICAgICAgICAgMCAgICAgICAvKiBPZmZzZXQgb2YgUmVkIGluIGFuIFJHQiBzY2FubGluZSBlbGVtZW50ICovCisjZGVmaW5lIFJHQl9HUkVFTiAgICAgICAxICAgICAgIC8qIE9mZnNldCBvZiBHcmVlbiAqLworI2RlZmluZSBSR0JfQkxVRSAgICAgICAgMiAgICAgICAvKiBPZmZzZXQgb2YgQmx1ZSAqLworI2RlZmluZSBSR0JfUElYRUxTSVpFICAgMyAgICAgICAvKiBKU0FNUExFcyBwZXIgUkdCIHNjYW5saW5lIGVsZW1lbnQgKi8KIAogI2RlZmluZSBKUEVHX05VTUNTIDE2CiAKQEAgLTM4Miw3ICszODgsNyBAQAogCiAjaWZuZGVmIE1VTFRJUExJRVIKICNpZm5kZWYgV0lUSF9TSU1ECi0jZGVmaW5lIE1VTFRJUExJRVIgIGludAkJLyogdHlwZSBmb3IgZmFzdGVzdCBpbnRlZ2VyIG11bHRpcGx5ICovCisjZGVmaW5lIE1VTFRJUExJRVIgIGludCAgICAgICAgIC8qIHR5cGUgZm9yIGZhc3Rlc3QgaW50ZWdlciBtdWx0aXBseSAqLwogI2Vsc2UKICNkZWZpbmUgTVVMVElQTElFUiBzaG9ydCAgLyogcHJlZmVyIDE2LWJpdCB3aXRoIFNJTUQgZm9yIHBhcmVsbGVsaXNtICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2pwZWdjb21wLmggYi9qcGVnY29tcC5oCmluZGV4IDFiOWUwYTQuLmVkOWVlYWIgMTAwNjQ0Ci0tLSBhL2pwZWdjb21wLmgKKysrIGIvanBlZ2NvbXAuaApAQCAtMTEsNiArMTEsOCBAQAogCiAjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA3MAogI2RlZmluZSBfRENUX3NjYWxlZF9zaXplIERDVF9oX3NjYWxlZF9zaXplCisjZGVmaW5lIF9EQ1RfaF9zY2FsZWRfc2l6ZSBEQ1RfaF9zY2FsZWRfc2l6ZQorI2RlZmluZSBfRENUX3Zfc2NhbGVkX3NpemUgRENUX3Zfc2NhbGVkX3NpemUKICNkZWZpbmUgX21pbl9EQ1Rfc2NhbGVkX3NpemUgbWluX0RDVF9oX3NjYWxlZF9zaXplCiAjZGVmaW5lIF9taW5fRENUX2hfc2NhbGVkX3NpemUgbWluX0RDVF9oX3NjYWxlZF9zaXplCiAjZGVmaW5lIF9taW5fRENUX3Zfc2NhbGVkX3NpemUgbWluX0RDVF92X3NjYWxlZF9zaXplCkBAIC0xOCw2ICsyMCw4IEBACiAjZGVmaW5lIF9qcGVnX2hlaWdodCBqcGVnX2hlaWdodAogI2Vsc2UKICNkZWZpbmUgX0RDVF9zY2FsZWRfc2l6ZSBEQ1Rfc2NhbGVkX3NpemUKKyNkZWZpbmUgX0RDVF9oX3NjYWxlZF9zaXplIERDVF9zY2FsZWRfc2l6ZQorI2RlZmluZSBfRENUX3Zfc2NhbGVkX3NpemUgRENUX3NjYWxlZF9zaXplCiAjZGVmaW5lIF9taW5fRENUX3NjYWxlZF9zaXplIG1pbl9EQ1Rfc2NhbGVkX3NpemUKICNkZWZpbmUgX21pbl9EQ1RfaF9zY2FsZWRfc2l6ZSBtaW5fRENUX3NjYWxlZF9zaXplCiAjZGVmaW5lIF9taW5fRENUX3Zfc2NhbGVkX3NpemUgbWluX0RDVF9zY2FsZWRfc2l6ZQpkaWZmIC0tZ2l0IGEvanBlZ2ludC5oIGIvanBlZ2ludC5oCmluZGV4IDc4NzE3NDguLjQ0YTMzMGQgMTAwNjQ0Ci0tLSBhL2pwZWdpbnQuaAorKysgYi9qcGVnaW50LmgKQEAgLTE0LDMwICsxNCwzMCBAQAogCiAvKiBEZWNsYXJhdGlvbnMgZm9yIGJvdGggY29tcHJlc3Npb24gJiBkZWNvbXByZXNzaW9uICovCiAKLXR5cGVkZWYgZW51bSB7CQkJLyogT3BlcmF0aW5nIG1vZGVzIGZvciBidWZmZXIgY29udHJvbGxlcnMgKi8KLQlKQlVGX1BBU1NfVEhSVSwJCS8qIFBsYWluIHN0cmlwd2lzZSBvcGVyYXRpb24gKi8KLQkvKiBSZW1haW5pbmcgbW9kZXMgcmVxdWlyZSBhIGZ1bGwtaW1hZ2UgYnVmZmVyIHRvIGhhdmUgYmVlbiBjcmVhdGVkICovCi0JSkJVRl9TQVZFX1NPVVJDRSwJLyogUnVuIHNvdXJjZSBzdWJvYmplY3Qgb25seSwgc2F2ZSBvdXRwdXQgKi8KLQlKQlVGX0NSQU5LX0RFU1QsCS8qIFJ1biBkZXN0IHN1Ym9iamVjdCBvbmx5LCB1c2luZyBzYXZlZCBkYXRhICovCi0JSkJVRl9TQVZFX0FORF9QQVNTCS8qIFJ1biBib3RoIHN1Ym9iamVjdHMsIHNhdmUgb3V0cHV0ICovCit0eXBlZGVmIGVudW0geyAgICAgICAgICAgIC8qIE9wZXJhdGluZyBtb2RlcyBmb3IgYnVmZmVyIGNvbnRyb2xsZXJzICovCisgIEpCVUZfUEFTU19USFJVLCAgICAgICAgIC8qIFBsYWluIHN0cmlwd2lzZSBvcGVyYXRpb24gKi8KKyAgLyogUmVtYWluaW5nIG1vZGVzIHJlcXVpcmUgYSBmdWxsLWltYWdlIGJ1ZmZlciB0byBoYXZlIGJlZW4gY3JlYXRlZCAqLworICBKQlVGX1NBVkVfU09VUkNFLCAgICAgICAvKiBSdW4gc291cmNlIHN1Ym9iamVjdCBvbmx5LCBzYXZlIG91dHB1dCAqLworICBKQlVGX0NSQU5LX0RFU1QsICAgICAgICAvKiBSdW4gZGVzdCBzdWJvYmplY3Qgb25seSwgdXNpbmcgc2F2ZWQgZGF0YSAqLworICBKQlVGX1NBVkVfQU5EX1BBU1MgICAgICAvKiBSdW4gYm90aCBzdWJvYmplY3RzLCBzYXZlIG91dHB1dCAqLwogfSBKX0JVRl9NT0RFOwogCiAvKiBWYWx1ZXMgb2YgZ2xvYmFsX3N0YXRlIGZpZWxkIChqZGFwaS5jIGhhcyBzb21lIGRlcGVuZGVuY2llcyBvbiBvcmRlcmluZyEpICovCi0jZGVmaW5lIENTVEFURV9TVEFSVAkxMDAJLyogYWZ0ZXIgY3JlYXRlX2NvbXByZXNzICovCi0jZGVmaW5lIENTVEFURV9TQ0FOTklORwkxMDEJLyogc3RhcnRfY29tcHJlc3MgZG9uZSwgd3JpdGVfc2NhbmxpbmVzIE9LICovCi0jZGVmaW5lIENTVEFURV9SQVdfT0sJMTAyCS8qIHN0YXJ0X2NvbXByZXNzIGRvbmUsIHdyaXRlX3Jhd19kYXRhIE9LICovCi0jZGVmaW5lIENTVEFURV9XUkNPRUZTCTEwMwkvKiBqcGVnX3dyaXRlX2NvZWZmaWNpZW50cyBkb25lICovCi0jZGVmaW5lIERTVEFURV9TVEFSVAkyMDAJLyogYWZ0ZXIgY3JlYXRlX2RlY29tcHJlc3MgKi8KLSNkZWZpbmUgRFNUQVRFX0lOSEVBREVSCTIwMQkvKiByZWFkaW5nIGhlYWRlciBtYXJrZXJzLCBubyBTT1MgeWV0ICovCi0jZGVmaW5lIERTVEFURV9SRUFEWQkyMDIJLyogZm91bmQgU09TLCByZWFkeSBmb3Igc3RhcnRfZGVjb21wcmVzcyAqLwotI2RlZmluZSBEU1RBVEVfUFJFTE9BRAkyMDMJLyogcmVhZGluZyBtdWx0aXNjYW4gZmlsZSBpbiBzdGFydF9kZWNvbXByZXNzKi8KLSNkZWZpbmUgRFNUQVRFX1BSRVNDQU4JMjA0CS8qIHBlcmZvcm1pbmcgZHVtbXkgcGFzcyBmb3IgMi1wYXNzIHF1YW50ICovCi0jZGVmaW5lIERTVEFURV9TQ0FOTklORwkyMDUJLyogc3RhcnRfZGVjb21wcmVzcyBkb25lLCByZWFkX3NjYW5saW5lcyBPSyAqLwotI2RlZmluZSBEU1RBVEVfUkFXX09LCTIwNgkvKiBzdGFydF9kZWNvbXByZXNzIGRvbmUsIHJlYWRfcmF3X2RhdGEgT0sgKi8KLSNkZWZpbmUgRFNUQVRFX0JVRklNQUdFCTIwNwkvKiBleHBlY3RpbmcganBlZ19zdGFydF9vdXRwdXQgKi8KLSNkZWZpbmUgRFNUQVRFX0JVRlBPU1QJMjA4CS8qIGxvb2tpbmcgZm9yIFNPUy9FT0kgaW4ganBlZ19maW5pc2hfb3V0cHV0ICovCi0jZGVmaW5lIERTVEFURV9SRENPRUZTCTIwOQkvKiByZWFkaW5nIGZpbGUgaW4ganBlZ19yZWFkX2NvZWZmaWNpZW50cyAqLwotI2RlZmluZSBEU1RBVEVfU1RPUFBJTkcJMjEwCS8qIGxvb2tpbmcgZm9yIEVPSSBpbiBqcGVnX2ZpbmlzaF9kZWNvbXByZXNzICovCisjZGVmaW5lIENTVEFURV9TVEFSVCAgICAxMDAgICAgIC8qIGFmdGVyIGNyZWF0ZV9jb21wcmVzcyAqLworI2RlZmluZSBDU1RBVEVfU0NBTk5JTkcgMTAxICAgICAvKiBzdGFydF9jb21wcmVzcyBkb25lLCB3cml0ZV9zY2FubGluZXMgT0sgKi8KKyNkZWZpbmUgQ1NUQVRFX1JBV19PSyAgIDEwMiAgICAgLyogc3RhcnRfY29tcHJlc3MgZG9uZSwgd3JpdGVfcmF3X2RhdGEgT0sgKi8KKyNkZWZpbmUgQ1NUQVRFX1dSQ09FRlMgIDEwMyAgICAgLyoganBlZ193cml0ZV9jb2VmZmljaWVudHMgZG9uZSAqLworI2RlZmluZSBEU1RBVEVfU1RBUlQgICAgMjAwICAgICAvKiBhZnRlciBjcmVhdGVfZGVjb21wcmVzcyAqLworI2RlZmluZSBEU1RBVEVfSU5IRUFERVIgMjAxICAgICAvKiByZWFkaW5nIGhlYWRlciBtYXJrZXJzLCBubyBTT1MgeWV0ICovCisjZGVmaW5lIERTVEFURV9SRUFEWSAgICAyMDIgICAgIC8qIGZvdW5kIFNPUywgcmVhZHkgZm9yIHN0YXJ0X2RlY29tcHJlc3MgKi8KKyNkZWZpbmUgRFNUQVRFX1BSRUxPQUQgIDIwMyAgICAgLyogcmVhZGluZyBtdWx0aXNjYW4gZmlsZSBpbiBzdGFydF9kZWNvbXByZXNzKi8KKyNkZWZpbmUgRFNUQVRFX1BSRVNDQU4gIDIwNCAgICAgLyogcGVyZm9ybWluZyBkdW1teSBwYXNzIGZvciAyLXBhc3MgcXVhbnQgKi8KKyNkZWZpbmUgRFNUQVRFX1NDQU5OSU5HIDIwNSAgICAgLyogc3RhcnRfZGVjb21wcmVzcyBkb25lLCByZWFkX3NjYW5saW5lcyBPSyAqLworI2RlZmluZSBEU1RBVEVfUkFXX09LICAgMjA2ICAgICAvKiBzdGFydF9kZWNvbXByZXNzIGRvbmUsIHJlYWRfcmF3X2RhdGEgT0sgKi8KKyNkZWZpbmUgRFNUQVRFX0JVRklNQUdFIDIwNyAgICAgLyogZXhwZWN0aW5nIGpwZWdfc3RhcnRfb3V0cHV0ICovCisjZGVmaW5lIERTVEFURV9CVUZQT1NUICAyMDggICAgIC8qIGxvb2tpbmcgZm9yIFNPUy9FT0kgaW4ganBlZ19maW5pc2hfb3V0cHV0ICovCisjZGVmaW5lIERTVEFURV9SRENPRUZTICAyMDkgICAgIC8qIHJlYWRpbmcgZmlsZSBpbiBqcGVnX3JlYWRfY29lZmZpY2llbnRzICovCisjZGVmaW5lIERTVEFURV9TVE9QUElORyAyMTAgICAgIC8qIGxvb2tpbmcgZm9yIEVPSSBpbiBqcGVnX2ZpbmlzaF9kZWNvbXByZXNzICovCiAKIAogLyogRGVjbGFyYXRpb25zIGZvciBjb21wcmVzc2lvbiBtb2R1bGVzICovCkBAIC00OSw1NCArNDksNTQgQEAKICAgSk1FVEhPRCh2b2lkLCBmaW5pc2hfcGFzcywgKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7CiAKICAgLyogU3RhdGUgdmFyaWFibGVzIG1hZGUgdmlzaWJsZSB0byBvdGhlciBtb2R1bGVzICovCi0gIGJvb2xlYW4gY2FsbF9wYXNzX3N0YXJ0dXA7CS8qIFRydWUgaWYgcGFzc19zdGFydHVwIG11c3QgYmUgY2FsbGVkICovCi0gIGJvb2xlYW4gaXNfbGFzdF9wYXNzOwkJLyogVHJ1ZSBkdXJpbmcgbGFzdCBwYXNzICovCisgIGJvb2xlYW4gY2FsbF9wYXNzX3N0YXJ0dXA7ICAgIC8qIFRydWUgaWYgcGFzc19zdGFydHVwIG11c3QgYmUgY2FsbGVkICovCisgIGJvb2xlYW4gaXNfbGFzdF9wYXNzOyAgICAgICAgIC8qIFRydWUgZHVyaW5nIGxhc3QgcGFzcyAqLwogfTsKIAogLyogTWFpbiBidWZmZXIgY29udHJvbCAoZG93bnNhbXBsZWQtZGF0YSBidWZmZXIpICovCiBzdHJ1Y3QganBlZ19jX21haW5fY29udHJvbGxlciB7CiAgIEpNRVRIT0Qodm9pZCwgc3RhcnRfcGFzcywgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKX0JVRl9NT0RFIHBhc3NfbW9kZSkpOwogICBKTUVUSE9EKHZvaWQsIHByb2Nlc3NfZGF0YSwgKGpfY29tcHJlc3NfcHRyIGNpbmZvLAotCQkJICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKRElNRU5TSU9OICppbl9yb3dfY3RyLAotCQkJICAgICAgIEpESU1FTlNJT04gaW5fcm93c19hdmFpbCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKRElNRU5TSU9OICppbl9yb3dfY3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gaW5fcm93c19hdmFpbCkpOwogfTsKIAogLyogQ29tcHJlc3Npb24gcHJlcHJvY2Vzc2luZyAoZG93bnNhbXBsaW5nIGlucHV0IGJ1ZmZlciBjb250cm9sKSAqLwogc3RydWN0IGpwZWdfY19wcmVwX2NvbnRyb2xsZXIgewogICBKTUVUSE9EKHZvaWQsIHN0YXJ0X3Bhc3MsIChqX2NvbXByZXNzX3B0ciBjaW5mbywgSl9CVUZfTU9ERSBwYXNzX21vZGUpKTsKICAgSk1FVEhPRCh2b2lkLCBwcmVfcHJvY2Vzc19kYXRhLCAoal9jb21wcmVzc19wdHIgY2luZm8sCi0JCQkJICAgSlNBTVBBUlJBWSBpbnB1dF9idWYsCi0JCQkJICAgSkRJTUVOU0lPTiAqaW5fcm93X2N0ciwKLQkJCQkgICBKRElNRU5TSU9OIGluX3Jvd3NfYXZhaWwsCi0JCQkJICAgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLAotCQkJCSAgIEpESU1FTlNJT04gKm91dF9yb3dfZ3JvdXBfY3RyLAotCQkJCSAgIEpESU1FTlNJT04gb3V0X3Jvd19ncm91cHNfYXZhaWwpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gKmluX3Jvd19jdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gaW5fcm93c19hdmFpbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OICpvdXRfcm93X2dyb3VwX2N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRfcm93X2dyb3Vwc19hdmFpbCkpOwogfTsKIAogLyogQ29lZmZpY2llbnQgYnVmZmVyIGNvbnRyb2wgKi8KIHN0cnVjdCBqcGVnX2NfY29lZl9jb250cm9sbGVyIHsKICAgSk1FVEhPRCh2b2lkLCBzdGFydF9wYXNzLCAoal9jb21wcmVzc19wdHIgY2luZm8sIEpfQlVGX01PREUgcGFzc19tb2RlKSk7CiAgIEpNRVRIT0QoYm9vbGVhbiwgY29tcHJlc3NfZGF0YSwgKGpfY29tcHJlc3NfcHRyIGNpbmZvLAotCQkJCSAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmKSk7CiB9OwogCiAvKiBDb2xvcnNwYWNlIGNvbnZlcnNpb24gKi8KIHN0cnVjdCBqcGVnX2NvbG9yX2NvbnZlcnRlciB7CiAgIEpNRVRIT0Qodm9pZCwgc3RhcnRfcGFzcywgKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7CiAgIEpNRVRIT0Qodm9pZCwgY29sb3JfY29udmVydCwgKGpfY29tcHJlc3NfcHRyIGNpbmZvLAotCQkJCUpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKU0FNUElNQUdFIG91dHB1dF9idWYsCi0JCQkJSkRJTUVOU0lPTiBvdXRwdXRfcm93LCBpbnQgbnVtX3Jvd3MpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfcm93LCBpbnQgbnVtX3Jvd3MpKTsKIH07CiAKIC8qIERvd25zYW1wbGluZyAqLwogc3RydWN0IGpwZWdfZG93bnNhbXBsZXIgewogICBKTUVUSE9EKHZvaWQsIHN0YXJ0X3Bhc3MsIChqX2NvbXByZXNzX3B0ciBjaW5mbykpOwogICBKTUVUSE9EKHZvaWQsIGRvd25zYW1wbGUsIChqX2NvbXByZXNzX3B0ciBjaW5mbywKLQkJCSAgICAgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5fcm93X2luZGV4LAotCQkJICAgICBKU0FNUElNQUdFIG91dHB1dF9idWYsCi0JCQkgICAgIEpESU1FTlNJT04gb3V0X3Jvd19ncm91cF9pbmRleCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbl9yb3dfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRfcm93X2dyb3VwX2luZGV4KSk7CiAKLSAgYm9vbGVhbiBuZWVkX2NvbnRleHRfcm93czsJLyogVFJVRSBpZiBuZWVkIHJvd3MgYWJvdmUgJiBiZWxvdyAqLworICBib29sZWFuIG5lZWRfY29udGV4dF9yb3dzOyAgICAvKiBUUlVFIGlmIG5lZWQgcm93cyBhYm92ZSAmIGJlbG93ICovCiB9OwogCiAvKiBGb3J3YXJkIERDVCAoYWxzbyBjb250cm9scyBjb2VmZmljaWVudCBxdWFudGl6YXRpb24pICovCkBAIC0xMDQsMTAgKzEwNCwxMCBAQAogICBKTUVUSE9EKHZvaWQsIHN0YXJ0X3Bhc3MsIChqX2NvbXByZXNzX3B0ciBjaW5mbykpOwogICAvKiBwZXJoYXBzIHRoaXMgc2hvdWxkIGJlIGFuIGFycmF5Pz8/ICovCiAgIEpNRVRIT0Qodm9pZCwgZm9yd2FyZF9EQ1QsIChqX2NvbXByZXNzX3B0ciBjaW5mbywKLQkJCSAgICAgIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAotCQkJICAgICAgSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkJMT0NLUk9XIGNvZWZfYmxvY2tzLAotCQkJICAgICAgSkRJTUVOU0lPTiBzdGFydF9yb3csIEpESU1FTlNJT04gc3RhcnRfY29sLAotCQkJICAgICAgSkRJTUVOU0lPTiBudW1fYmxvY2tzKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsIEpCTE9DS1JPVyBjb2VmX2Jsb2NrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gc3RhcnRfcm93LCBKRElNRU5TSU9OIHN0YXJ0X2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gbnVtX2Jsb2NrcykpOwogfTsKIAogLyogRW50cm9weSBlbmNvZGluZyAqLwpAQCAtMTI3LDcgKzEyNyw3IEBACiAgIC8qIFRoZXNlIHJvdXRpbmVzIGFyZSBleHBvcnRlZCB0byBhbGxvdyBpbnNlcnRpb24gb2YgZXh0cmEgbWFya2VycyAqLwogICAvKiBQcm9iYWJseSBvbmx5IENPTSBhbmQgQVBQbiBtYXJrZXJzIHNob3VsZCBiZSB3cml0dGVuIHRoaXMgd2F5ICovCiAgIEpNRVRIT0Qodm9pZCwgd3JpdGVfbWFya2VyX2hlYWRlciwgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgbWFya2VyLAotCQkJCSAgICAgIHVuc2lnbmVkIGludCBkYXRhbGVuKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBkYXRhbGVuKSk7CiAgIEpNRVRIT0Qodm9pZCwgd3JpdGVfbWFya2VyX2J5dGUsIChqX2NvbXByZXNzX3B0ciBjaW5mbywgaW50IHZhbCkpOwogfTsKIApAQCAtMTQwLDcgKzE0MCw3IEBACiAgIEpNRVRIT0Qodm9pZCwgZmluaXNoX291dHB1dF9wYXNzLCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOwogCiAgIC8qIFN0YXRlIHZhcmlhYmxlcyBtYWRlIHZpc2libGUgdG8gb3RoZXIgbW9kdWxlcyAqLwotICBib29sZWFuIGlzX2R1bW15X3Bhc3M7CS8qIFRydWUgZHVyaW5nIDFzdCBwYXNzIGZvciAyLXBhc3MgcXVhbnQgKi8KKyAgYm9vbGVhbiBpc19kdW1teV9wYXNzOyAgICAgICAgLyogVHJ1ZSBkdXJpbmcgMXN0IHBhc3MgZm9yIDItcGFzcyBxdWFudCAqLwogfTsKIAogLyogSW5wdXQgY29udHJvbCBtb2R1bGUgKi8KQEAgLTE1MSwxNiArMTUxLDE2IEBACiAgIEpNRVRIT0Qodm9pZCwgZmluaXNoX2lucHV0X3Bhc3MsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7CiAKICAgLyogU3RhdGUgdmFyaWFibGVzIG1hZGUgdmlzaWJsZSB0byBvdGhlciBtb2R1bGVzICovCi0gIGJvb2xlYW4gaGFzX211bHRpcGxlX3NjYW5zOwkvKiBUcnVlIGlmIGZpbGUgaGFzIG11bHRpcGxlIHNjYW5zICovCi0gIGJvb2xlYW4gZW9pX3JlYWNoZWQ7CQkvKiBUcnVlIHdoZW4gRU9JIGhhcyBiZWVuIGNvbnN1bWVkICovCisgIGJvb2xlYW4gaGFzX211bHRpcGxlX3NjYW5zOyAgIC8qIFRydWUgaWYgZmlsZSBoYXMgbXVsdGlwbGUgc2NhbnMgKi8KKyAgYm9vbGVhbiBlb2lfcmVhY2hlZDsgICAgICAgICAgLyogVHJ1ZSB3aGVuIEVPSSBoYXMgYmVlbiBjb25zdW1lZCAqLwogfTsKIAogLyogTWFpbiBidWZmZXIgY29udHJvbCAoZG93bnNhbXBsZWQtZGF0YSBidWZmZXIpICovCiBzdHJ1Y3QganBlZ19kX21haW5fY29udHJvbGxlciB7CiAgIEpNRVRIT0Qodm9pZCwgc3RhcnRfcGFzcywgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpfQlVGX01PREUgcGFzc19tb2RlKSk7CiAgIEpNRVRIT0Qodm9pZCwgcHJvY2Vzc19kYXRhLCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKLQkJCSAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gKm91dF9yb3dfY3RyLAotCQkJICAgICAgIEpESU1FTlNJT04gb3V0X3Jvd3NfYXZhaWwpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gKm91dF9yb3dfY3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0X3Jvd3NfYXZhaWwpKTsKIH07CiAKIC8qIENvZWZmaWNpZW50IGJ1ZmZlciBjb250cm9sICovCkBAIC0xNjksNyArMTY5LDcgQEAKICAgSk1FVEhPRChpbnQsIGNvbnN1bWVfZGF0YSwgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsKICAgSk1FVEhPRCh2b2lkLCBzdGFydF9vdXRwdXRfcGFzcywgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsKICAgSk1FVEhPRChpbnQsIGRlY29tcHJlc3NfZGF0YSwgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCi0JCQkJIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBJTUFHRSBvdXRwdXRfYnVmKSk7CiAgIC8qIFBvaW50ZXIgdG8gYXJyYXkgb2YgY29lZmZpY2llbnQgdmlydHVhbCBhcnJheXMsIG9yIE5VTEwgaWYgbm9uZSAqLwogICBqdmlydF9iYXJyYXlfcHRyICpjb2VmX2FycmF5czsKIH07CkBAIC0xNzgsMTIgKzE3OCwxMiBAQAogc3RydWN0IGpwZWdfZF9wb3N0X2NvbnRyb2xsZXIgewogICBKTUVUSE9EKHZvaWQsIHN0YXJ0X3Bhc3MsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKX0JVRl9NT0RFIHBhc3NfbW9kZSkpOwogICBKTUVUSE9EKHZvaWQsIHBvc3RfcHJvY2Vzc19kYXRhLCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKLQkJCQkgICAgSlNBTVBJTUFHRSBpbnB1dF9idWYsCi0JCQkJICAgIEpESU1FTlNJT04gKmluX3Jvd19ncm91cF9jdHIsCi0JCQkJICAgIEpESU1FTlNJT04gaW5fcm93X2dyb3Vwc19hdmFpbCwKLQkJCQkgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAotCQkJCSAgICBKRElNRU5TSU9OICpvdXRfcm93X2N0ciwKLQkJCQkgICAgSkRJTUVOU0lPTiBvdXRfcm93c19hdmFpbCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBJTUFHRSBpbnB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OICppbl9yb3dfZ3JvdXBfY3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBzX2F2YWlsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiAqb3V0X3Jvd19jdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dF9yb3dzX2F2YWlsKSk7CiB9OwogCiAvKiBNYXJrZXIgcmVhZGluZyAmIHBhcnNpbmcgKi8KQEAgLTIwMCwyOCArMjAwLDI4IEBACiAgIC8qIFN0YXRlIG9mIG1hcmtlciByZWFkZXIgLS0tIG5vbWluYWxseSBpbnRlcm5hbCwgYnV0IGFwcGxpY2F0aW9ucwogICAgKiBzdXBwbHlpbmcgQ09NIG9yIEFQUG4gaGFuZGxlcnMgbWlnaHQgbGlrZSB0byBrbm93IHRoZSBzdGF0ZS4KICAgICovCi0gIGJvb2xlYW4gc2F3X1NPSTsJCS8qIGZvdW5kIFNPST8gKi8KLSAgYm9vbGVhbiBzYXdfU09GOwkJLyogZm91bmQgU09GPyAqLwotICBpbnQgbmV4dF9yZXN0YXJ0X251bTsJCS8qIG5leHQgcmVzdGFydCBudW1iZXIgZXhwZWN0ZWQgKDAtNykgKi8KLSAgdW5zaWduZWQgaW50IGRpc2NhcmRlZF9ieXRlczsJLyogIyBvZiBieXRlcyBza2lwcGVkIGxvb2tpbmcgZm9yIGEgbWFya2VyICovCisgIGJvb2xlYW4gc2F3X1NPSTsgICAgICAgICAgICAgIC8qIGZvdW5kIFNPST8gKi8KKyAgYm9vbGVhbiBzYXdfU09GOyAgICAgICAgICAgICAgLyogZm91bmQgU09GPyAqLworICBpbnQgbmV4dF9yZXN0YXJ0X251bTsgICAgICAgICAvKiBuZXh0IHJlc3RhcnQgbnVtYmVyIGV4cGVjdGVkICgwLTcpICovCisgIHVuc2lnbmVkIGludCBkaXNjYXJkZWRfYnl0ZXM7IC8qICMgb2YgYnl0ZXMgc2tpcHBlZCBsb29raW5nIGZvciBhIG1hcmtlciAqLwogfTsKIAogLyogRW50cm9weSBkZWNvZGluZyAqLwogc3RydWN0IGpwZWdfZW50cm9weV9kZWNvZGVyIHsKICAgSk1FVEhPRCh2b2lkLCBzdGFydF9wYXNzLCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOwogICBKTUVUSE9EKGJvb2xlYW4sIGRlY29kZV9tY3UsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAotCQkJCUpCTE9DS1JPVyAqTUNVX2RhdGEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkJMT0NLUk9XICpNQ1VfZGF0YSkpOwogCiAgIC8qIFRoaXMgaXMgaGVyZSB0byBzaGFyZSBjb2RlIGJldHdlZW4gYmFzZWxpbmUgYW5kIHByb2dyZXNzaXZlIGRlY29kZXJzOyAqLwogICAvKiBvdGhlciBtb2R1bGVzIHByb2JhYmx5IHNob3VsZCBub3QgdXNlIGl0ICovCi0gIGJvb2xlYW4gaW5zdWZmaWNpZW50X2RhdGE7CS8qIHNldCBUUlVFIGFmdGVyIGVtaXR0aW5nIHdhcm5pbmcgKi8KKyAgYm9vbGVhbiBpbnN1ZmZpY2llbnRfZGF0YTsgICAgLyogc2V0IFRSVUUgYWZ0ZXIgZW1pdHRpbmcgd2FybmluZyAqLwogfTsKIAogLyogSW52ZXJzZSBEQ1QgKGFsc28gcGVyZm9ybXMgZGVxdWFudGl6YXRpb24pICovCiB0eXBlZGVmIEpNRVRIT0Qodm9pZCwgaW52ZXJzZV9EQ1RfbWV0aG9kX3B0ciwKLQkJKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAotCQkgSkNPRUZQVFIgY29lZl9ibG9jaywKLQkJIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKSk7CisgICAgICAgICAgICAgICAgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAorICAgICAgICAgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLAorICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkpOwogCiBzdHJ1Y3QganBlZ19pbnZlcnNlX2RjdCB7CiAgIEpNRVRIT0Qodm9pZCwgc3RhcnRfcGFzcywgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsKQEAgLTIzMywzMCArMjMzLDMwIEBACiBzdHJ1Y3QganBlZ191cHNhbXBsZXIgewogICBKTUVUSE9EKHZvaWQsIHN0YXJ0X3Bhc3MsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7CiAgIEpNRVRIT0Qodm9pZCwgdXBzYW1wbGUsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAotCQkJICAgSlNBTVBJTUFHRSBpbnB1dF9idWYsCi0JCQkgICBKRElNRU5TSU9OICppbl9yb3dfZ3JvdXBfY3RyLAotCQkJICAgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBzX2F2YWlsLAotCQkJICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAotCQkJICAgSkRJTUVOU0lPTiAqb3V0X3Jvd19jdHIsCi0JCQkgICBKRElNRU5TSU9OIG91dF9yb3dzX2F2YWlsKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUElNQUdFIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gKmluX3Jvd19ncm91cF9jdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGluX3Jvd19ncm91cHNfYXZhaWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OICpvdXRfcm93X2N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0X3Jvd3NfYXZhaWwpKTsKIAotICBib29sZWFuIG5lZWRfY29udGV4dF9yb3dzOwkvKiBUUlVFIGlmIG5lZWQgcm93cyBhYm92ZSAmIGJlbG93ICovCisgIGJvb2xlYW4gbmVlZF9jb250ZXh0X3Jvd3M7ICAgIC8qIFRSVUUgaWYgbmVlZCByb3dzIGFib3ZlICYgYmVsb3cgKi8KIH07CiAKIC8qIENvbG9yc3BhY2UgY29udmVyc2lvbiAqLwogc3RydWN0IGpwZWdfY29sb3JfZGVjb252ZXJ0ZXIgewogICBKTUVUSE9EKHZvaWQsIHN0YXJ0X3Bhc3MsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7CiAgIEpNRVRIT0Qodm9pZCwgY29sb3JfY29udmVydCwgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCi0JCQkJSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5wdXRfcm93LAotCQkJCUpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGlucHV0X3JvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBpbnQgbnVtX3Jvd3MpKTsKIH07CiAKIC8qIENvbG9yIHF1YW50aXphdGlvbiBvciBjb2xvciBwcmVjaXNpb24gcmVkdWN0aW9uICovCiBzdHJ1Y3QganBlZ19jb2xvcl9xdWFudGl6ZXIgewogICBKTUVUSE9EKHZvaWQsIHN0YXJ0X3Bhc3MsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBib29sZWFuIGlzX3ByZV9zY2FuKSk7CiAgIEpNRVRIT0Qodm9pZCwgY29sb3JfcXVhbnRpemUsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAotCQkJCSBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAotCQkJCSBpbnQgbnVtX3Jvd3MpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtX3Jvd3MpKTsKICAgSk1FVEhPRCh2b2lkLCBmaW5pc2hfcGFzcywgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsKICAgSk1FVEhPRCh2b2lkLCBuZXdfY29sb3JfbWFwLCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOwogfTsKQEAgLTI2NSw5ICsyNjUsOSBAQAogLyogTWlzY2VsbGFuZW91cyB1c2VmdWwgbWFjcm9zICovCiAKICN1bmRlZiBNQVgKLSNkZWZpbmUgTUFYKGEsYikJKChhKSA+IChiKSA/IChhKSA6IChiKSkKKyNkZWZpbmUgTUFYKGEsYikgICAgICAgICgoYSkgPiAoYikgPyAoYSkgOiAoYikpCiAjdW5kZWYgTUlOCi0jZGVmaW5lIE1JTihhLGIpCSgoYSkgPCAoYikgPyAoYSkgOiAoYikpCisjZGVmaW5lIE1JTihhLGIpICAgICAgICAoKGEpIDwgKGIpID8gKGEpIDogKGIpKQogCiAKIC8qIFdlIGFzc3VtZSB0aGF0IHJpZ2h0IHNoaWZ0IGNvcnJlc3BvbmRzIHRvIHNpZ25lZCBkaXZpc2lvbiBieSAyIHdpdGgKQEAgLTI4MSw2OSArMjgxLDY5IEBACiAgKi8KIAogI2lmZGVmIFJJR0hUX1NISUZUX0lTX1VOU0lHTkVECi0jZGVmaW5lIFNISUZUX1RFTVBTCUlOVDMyIHNoaWZ0X3RlbXA7CisjZGVmaW5lIFNISUZUX1RFTVBTICAgICBJTlQzMiBzaGlmdF90ZW1wOwogI2RlZmluZSBSSUdIVF9TSElGVCh4LHNoZnQpICBcCi0JKChzaGlmdF90ZW1wID0gKHgpKSA8IDAgPyBcCi0JIChzaGlmdF90ZW1wID4+IChzaGZ0KSkgfCAoKH4oKElOVDMyKSAwKSkgPDwgKDMyLShzaGZ0KSkpIDogXAotCSAoc2hpZnRfdGVtcCA+PiAoc2hmdCkpKQorICAgICAgICAoKHNoaWZ0X3RlbXAgPSAoeCkpIDwgMCA/IFwKKyAgICAgICAgIChzaGlmdF90ZW1wID4+IChzaGZ0KSkgfCAoKH4oKElOVDMyKSAwKSkgPDwgKDMyLShzaGZ0KSkpIDogXAorICAgICAgICAgKHNoaWZ0X3RlbXAgPj4gKHNoZnQpKSkKICNlbHNlCiAjZGVmaW5lIFNISUZUX1RFTVBTCi0jZGVmaW5lIFJJR0hUX1NISUZUKHgsc2hmdCkJKCh4KSA+PiAoc2hmdCkpCisjZGVmaW5lIFJJR0hUX1NISUZUKHgsc2hmdCkgICAgICgoeCkgPj4gKHNoZnQpKQogI2VuZGlmCiAKIAogLyogU2hvcnQgZm9ybXMgb2YgZXh0ZXJuYWwgbmFtZXMgZm9yIHN5c3RlbXMgd2l0aCBicmFpbi1kYW1hZ2VkIGxpbmtlcnMuICovCiAKICNpZmRlZiBORUVEX1NIT1JUX0VYVEVSTkFMX05BTUVTCi0jZGVmaW5lIGppbml0X2NvbXByZXNzX21hc3RlcglqSUNvbXByZXNzCi0jZGVmaW5lIGppbml0X2NfbWFzdGVyX2NvbnRyb2wJaklDTWFzdGVyCi0jZGVmaW5lIGppbml0X2NfbWFpbl9jb250cm9sbGVyCWpJQ01haW5DCi0jZGVmaW5lIGppbml0X2NfcHJlcF9jb250cm9sbGVyCWpJQ1ByZXBDCi0jZGVmaW5lIGppbml0X2NfY29lZl9jb250cm9sbGVyCWpJQ0NvZWZDCi0jZGVmaW5lIGppbml0X2NvbG9yX2NvbnZlcnRlcglqSUNDb2xvcgotI2RlZmluZSBqaW5pdF9kb3duc2FtcGxlcglqSURvd25zYW1wbGVyCi0jZGVmaW5lIGppbml0X2ZvcndhcmRfZGN0CWpJRkRDVAotI2RlZmluZSBqaW5pdF9odWZmX2VuY29kZXIJaklIRW5jb2RlcgotI2RlZmluZSBqaW5pdF9waHVmZl9lbmNvZGVyCWpJUEhFbmNvZGVyCi0jZGVmaW5lIGppbml0X2FyaXRoX2VuY29kZXIJaklBRW5jb2RlcgotI2RlZmluZSBqaW5pdF9tYXJrZXJfd3JpdGVyCWpJTVdyaXRlcgotI2RlZmluZSBqaW5pdF9tYXN0ZXJfZGVjb21wcmVzcwlqSURNYXN0ZXIKLSNkZWZpbmUgamluaXRfZF9tYWluX2NvbnRyb2xsZXIJaklETWFpbkMKLSNkZWZpbmUgamluaXRfZF9jb2VmX2NvbnRyb2xsZXIJaklEQ29lZkMKLSNkZWZpbmUgamluaXRfZF9wb3N0X2NvbnRyb2xsZXIJaklEUG9zdEMKLSNkZWZpbmUgamluaXRfaW5wdXRfY29udHJvbGxlcglqSUluQ3RscgotI2RlZmluZSBqaW5pdF9tYXJrZXJfcmVhZGVyCWpJTVJlYWRlcgotI2RlZmluZSBqaW5pdF9odWZmX2RlY29kZXIJaklIRGVjb2RlcgotI2RlZmluZSBqaW5pdF9waHVmZl9kZWNvZGVyCWpJUEhEZWNvZGVyCi0jZGVmaW5lIGppbml0X2FyaXRoX2RlY29kZXIJaklBRGVjb2RlcgotI2RlZmluZSBqaW5pdF9pbnZlcnNlX2RjdAlqSUlEQ1QKLSNkZWZpbmUgamluaXRfdXBzYW1wbGVyCQlqSVVwc2FtcGxlcgotI2RlZmluZSBqaW5pdF9jb2xvcl9kZWNvbnZlcnRlcglqSURDb2xvcgotI2RlZmluZSBqaW5pdF8xcGFzc19xdWFudGl6ZXIJakkxUXVhbnQKLSNkZWZpbmUgamluaXRfMnBhc3NfcXVhbnRpemVyCWpJMlF1YW50Ci0jZGVmaW5lIGppbml0X21lcmdlZF91cHNhbXBsZXIJaklNVXBzYW1wbGVyCi0jZGVmaW5lIGppbml0X21lbW9yeV9tZ3IJaklNZW1NZ3IKLSNkZWZpbmUgamRpdl9yb3VuZF91cAkJakRpdlJvdW5kCi0jZGVmaW5lIGpyb3VuZF91cAkJalJvdW5kCi0jZGVmaW5lIGpjb3B5X3NhbXBsZV9yb3dzCWpDb3B5U2FtcGxlcwotI2RlZmluZSBqY29weV9ibG9ja19yb3cJCWpDb3B5QmxvY2tzCi0jZGVmaW5lIGp6ZXJvX2ZhcgkJalplcm9GYXIKLSNkZWZpbmUganBlZ196aWd6YWdfb3JkZXIJalpJR1RhYmxlCi0jZGVmaW5lIGpwZWdfbmF0dXJhbF9vcmRlcglqWkFHVGFibGUKLSNkZWZpbmUganBlZ19hcml0YWIJCWpBcmlUYWIKKyNkZWZpbmUgamluaXRfY29tcHJlc3NfbWFzdGVyICAgaklDb21wcmVzcworI2RlZmluZSBqaW5pdF9jX21hc3Rlcl9jb250cm9sICBqSUNNYXN0ZXIKKyNkZWZpbmUgamluaXRfY19tYWluX2NvbnRyb2xsZXIgaklDTWFpbkMKKyNkZWZpbmUgamluaXRfY19wcmVwX2NvbnRyb2xsZXIgaklDUHJlcEMKKyNkZWZpbmUgamluaXRfY19jb2VmX2NvbnRyb2xsZXIgaklDQ29lZkMKKyNkZWZpbmUgamluaXRfY29sb3JfY29udmVydGVyICAgaklDQ29sb3IKKyNkZWZpbmUgamluaXRfZG93bnNhbXBsZXIgICAgICAgaklEb3duc2FtcGxlcgorI2RlZmluZSBqaW5pdF9mb3J3YXJkX2RjdCAgICAgICBqSUZEQ1QKKyNkZWZpbmUgamluaXRfaHVmZl9lbmNvZGVyICAgICAgaklIRW5jb2RlcgorI2RlZmluZSBqaW5pdF9waHVmZl9lbmNvZGVyICAgICBqSVBIRW5jb2RlcgorI2RlZmluZSBqaW5pdF9hcml0aF9lbmNvZGVyICAgICBqSUFFbmNvZGVyCisjZGVmaW5lIGppbml0X21hcmtlcl93cml0ZXIgICAgIGpJTVdyaXRlcgorI2RlZmluZSBqaW5pdF9tYXN0ZXJfZGVjb21wcmVzcyBqSURNYXN0ZXIKKyNkZWZpbmUgamluaXRfZF9tYWluX2NvbnRyb2xsZXIgaklETWFpbkMKKyNkZWZpbmUgamluaXRfZF9jb2VmX2NvbnRyb2xsZXIgaklEQ29lZkMKKyNkZWZpbmUgamluaXRfZF9wb3N0X2NvbnRyb2xsZXIgaklEUG9zdEMKKyNkZWZpbmUgamluaXRfaW5wdXRfY29udHJvbGxlciAgaklJbkN0bHIKKyNkZWZpbmUgamluaXRfbWFya2VyX3JlYWRlciAgICAgaklNUmVhZGVyCisjZGVmaW5lIGppbml0X2h1ZmZfZGVjb2RlciAgICAgIGpJSERlY29kZXIKKyNkZWZpbmUgamluaXRfcGh1ZmZfZGVjb2RlciAgICAgaklQSERlY29kZXIKKyNkZWZpbmUgamluaXRfYXJpdGhfZGVjb2RlciAgICAgaklBRGVjb2RlcgorI2RlZmluZSBqaW5pdF9pbnZlcnNlX2RjdCAgICAgICBqSUlEQ1QKKyNkZWZpbmUgamluaXRfdXBzYW1wbGVyICAgICAgICAgaklVcHNhbXBsZXIKKyNkZWZpbmUgamluaXRfY29sb3JfZGVjb252ZXJ0ZXIgaklEQ29sb3IKKyNkZWZpbmUgamluaXRfMXBhc3NfcXVhbnRpemVyICAgakkxUXVhbnQKKyNkZWZpbmUgamluaXRfMnBhc3NfcXVhbnRpemVyICAgakkyUXVhbnQKKyNkZWZpbmUgamluaXRfbWVyZ2VkX3Vwc2FtcGxlciAgaklNVXBzYW1wbGVyCisjZGVmaW5lIGppbml0X21lbW9yeV9tZ3IgICAgICAgIGpJTWVtTWdyCisjZGVmaW5lIGpkaXZfcm91bmRfdXAgICAgICAgICAgIGpEaXZSb3VuZAorI2RlZmluZSBqcm91bmRfdXAgICAgICAgICAgICAgICBqUm91bmQKKyNkZWZpbmUgamNvcHlfc2FtcGxlX3Jvd3MgICAgICAgakNvcHlTYW1wbGVzCisjZGVmaW5lIGpjb3B5X2Jsb2NrX3JvdyAgICAgICAgIGpDb3B5QmxvY2tzCisjZGVmaW5lIGp6ZXJvX2ZhciAgICAgICAgICAgICAgIGpaZXJvRmFyCisjZGVmaW5lIGpwZWdfemlnemFnX29yZGVyICAgICAgIGpaSUdUYWJsZQorI2RlZmluZSBqcGVnX25hdHVyYWxfb3JkZXIgICAgICBqWkFHVGFibGUKKyNkZWZpbmUganBlZ19hcml0YWIgICAgICAgICAgICAgakFyaVRhYgogI2VuZGlmIC8qIE5FRURfU0hPUlRfRVhURVJOQUxfTkFNRVMgKi8KIAogCiAvKiBDb21wcmVzc2lvbiBtb2R1bGUgaW5pdGlhbGl6YXRpb24gcm91dGluZXMgKi8KIEVYVEVSTih2b2lkKSBqaW5pdF9jb21wcmVzc19tYXN0ZXIgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbykpOwogRVhURVJOKHZvaWQpIGppbml0X2NfbWFzdGVyX2NvbnRyb2wgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywKLQkJCQkJIGJvb2xlYW4gdHJhbnNjb2RlX29ubHkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiB0cmFuc2NvZGVfb25seSkpOwogRVhURVJOKHZvaWQpIGppbml0X2NfbWFpbl9jb250cm9sbGVyIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sCi0JCQkJCSAgYm9vbGVhbiBuZWVkX2Z1bGxfYnVmZmVyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIG5lZWRfZnVsbF9idWZmZXIpKTsKIEVYVEVSTih2b2lkKSBqaW5pdF9jX3ByZXBfY29udHJvbGxlciBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLAotCQkJCQkgIGJvb2xlYW4gbmVlZF9mdWxsX2J1ZmZlcikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBuZWVkX2Z1bGxfYnVmZmVyKSk7CiBFWFRFUk4odm9pZCkgamluaXRfY19jb2VmX2NvbnRyb2xsZXIgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywKLQkJCQkJICBib29sZWFuIG5lZWRfZnVsbF9idWZmZXIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gbmVlZF9mdWxsX2J1ZmZlcikpOwogRVhURVJOKHZvaWQpIGppbml0X2NvbG9yX2NvbnZlcnRlciBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7CiBFWFRFUk4odm9pZCkgamluaXRfZG93bnNhbXBsZXIgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbykpOwogRVhURVJOKHZvaWQpIGppbml0X2ZvcndhcmRfZGN0IEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8pKTsKQEAgLTM1NCwxMSArMzU0LDExIEBACiAvKiBEZWNvbXByZXNzaW9uIG1vZHVsZSBpbml0aWFsaXphdGlvbiByb3V0aW5lcyAqLwogRVhURVJOKHZvaWQpIGppbml0X21hc3Rlcl9kZWNvbXByZXNzIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOwogRVhURVJOKHZvaWQpIGppbml0X2RfbWFpbl9jb250cm9sbGVyIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKLQkJCQkJICBib29sZWFuIG5lZWRfZnVsbF9idWZmZXIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gbmVlZF9mdWxsX2J1ZmZlcikpOwogRVhURVJOKHZvaWQpIGppbml0X2RfY29lZl9jb250cm9sbGVyIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKLQkJCQkJICBib29sZWFuIG5lZWRfZnVsbF9idWZmZXIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gbmVlZF9mdWxsX2J1ZmZlcikpOwogRVhURVJOKHZvaWQpIGppbml0X2RfcG9zdF9jb250cm9sbGVyIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKLQkJCQkJICBib29sZWFuIG5lZWRfZnVsbF9idWZmZXIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gbmVlZF9mdWxsX2J1ZmZlcikpOwogRVhURVJOKHZvaWQpIGppbml0X2lucHV0X2NvbnRyb2xsZXIgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7CiBFWFRFUk4odm9pZCkgamluaXRfbWFya2VyX3JlYWRlciBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsKIEVYVEVSTih2b2lkKSBqaW5pdF9odWZmX2RlY29kZXIgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7CkBAIC0zNzcsMTMgKzM3NywxMyBAQAogRVhURVJOKGxvbmcpIGpkaXZfcm91bmRfdXAgSlBQKChsb25nIGEsIGxvbmcgYikpOwogRVhURVJOKGxvbmcpIGpyb3VuZF91cCBKUFAoKGxvbmcgYSwgbG9uZyBiKSk7CiBFWFRFUk4odm9pZCkgamNvcHlfc2FtcGxlX3Jvd3MgSlBQKChKU0FNUEFSUkFZIGlucHV0X2FycmF5LCBpbnQgc291cmNlX3JvdywKLQkJCQkgICAgSlNBTVBBUlJBWSBvdXRwdXRfYXJyYXksIGludCBkZXN0X3JvdywKLQkJCQkgICAgaW50IG51bV9yb3dzLCBKRElNRU5TSU9OIG51bV9jb2xzKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9hcnJheSwgaW50IGRlc3Rfcm93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bV9yb3dzLCBKRElNRU5TSU9OIG51bV9jb2xzKSk7CiBFWFRFUk4odm9pZCkgamNvcHlfYmxvY2tfcm93IEpQUCgoSkJMT0NLUk9XIGlucHV0X3JvdywgSkJMT0NLUk9XIG91dHB1dF9yb3csCi0JCQkJICBKRElNRU5TSU9OIG51bV9ibG9ja3MpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG51bV9ibG9ja3MpKTsKIEVYVEVSTih2b2lkKSBqemVyb19mYXIgSlBQKCh2b2lkIEZBUiAqIHRhcmdldCwgc2l6ZV90IGJ5dGVzdG96ZXJvKSk7CiAvKiBDb25zdGFudCB0YWJsZXMgaW4ganV0aWxzLmMgKi8KLSNpZiAwCQkJCS8qIFRoaXMgdGFibGUgaXMgbm90IGFjdHVhbGx5IG5lZWRlZCBpbiB2NmEgKi8KKyNpZiAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhpcyB0YWJsZSBpcyBub3QgYWN0dWFsbHkgbmVlZGVkIGluIHY2YSAqLwogZXh0ZXJuIGNvbnN0IGludCBqcGVnX3ppZ3phZ19vcmRlcltdOyAvKiBuYXR1cmFsIGNvZWYgb3JkZXIgdG8gemlnemFnIG9yZGVyICovCiAjZW5kaWYKIGV4dGVybiBjb25zdCBpbnQganBlZ19uYXR1cmFsX29yZGVyW107IC8qIHppZ3phZyBjb2VmIG9yZGVyIHRvIG5hdHVyYWwgb3JkZXIgKi8KQEAgLTM5NCw3ICszOTQsNyBAQAogLyogU3VwcHJlc3MgdW5kZWZpbmVkLXN0cnVjdHVyZSBjb21wbGFpbnRzIGlmIG5lY2Vzc2FyeS4gKi8KIAogI2lmZGVmIElOQ09NUExFVEVfVFlQRVNfQlJPS0VOCi0jaWZuZGVmIEFNX01FTU9SWV9NQU5BR0VSCS8qIG9ubHkgam1lbW1nci5jIGRlZmluZXMgdGhlc2UgKi8KKyNpZm5kZWYgQU1fTUVNT1JZX01BTkFHRVIgICAgICAgLyogb25seSBqbWVtbWdyLmMgZGVmaW5lcyB0aGVzZSAqLwogc3RydWN0IGp2aXJ0X3NhcnJheV9jb250cm9sIHsgbG9uZyBkdW1teTsgfTsKIHN0cnVjdCBqdmlydF9iYXJyYXlfY29udHJvbCB7IGxvbmcgZHVtbXk7IH07CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2pwZWdsaWIuaCBiL2pwZWdsaWIuaAppbmRleCA2YmYwYjc4Li40YjM2Zjg3IDEwMDY0NAotLS0gYS9qcGVnbGliLmgKKysrIGIvanBlZ2xpYi5oCkBAIC00LDggKzQsOCBAQAogICogVGhpcyBmaWxlIHdhcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmU6CiAgKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5OCwgVGhvbWFzIEcuIExhbmUuCiAgKiBNb2RpZmllZCAyMDAyLTIwMDkgYnkgR3VpZG8gVm9sbGJlZGluZy4KLSAqIE1vZGlmaWNhdGlvbnM6Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMSwgRC4gUi4gQ29tbWFuZGVyLgorICogbGlianBlZy10dXJibyBNb2RpZmljYXRpb25zOgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTEsIDIwMTMsIEQuIFIuIENvbW1hbmRlci4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KICAqCiAgKiBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgYXBwbGljYXRpb24gaW50ZXJmYWNlIGZvciB0aGUgSlBFRyBsaWJyYXJ5LgpAQCAtMjMsMTAgKzIzLDEwIEBACiAgKiBtYW51YWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbW9zdCBwZW9wbGUgbmVlZCBub3Qgd29ycnkgYWJvdXQuCiAgKi8KIAotI2lmbmRlZiBKQ09ORklHX0lOQ0xVREVECS8qIGluIGNhc2UgamluY2x1ZGUuaCBhbHJlYWR5IGRpZCAqLwotI2luY2x1ZGUgImpjb25maWcuaCIJCS8qIHdpZGVseSB1c2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyAqLworI2lmbmRlZiBKQ09ORklHX0lOQ0xVREVEICAgICAgICAvKiBpbiBjYXNlIGppbmNsdWRlLmggYWxyZWFkeSBkaWQgKi8KKyNpbmNsdWRlICJqY29uZmlnLmgiICAgICAgICAgICAgLyogd2lkZWx5IHVzZWQgY29uZmlndXJhdGlvbiBvcHRpb25zICovCiAjZW5kaWYKLSNpbmNsdWRlICJqbW9yZWNmZy5oIgkJLyogc2VsZG9tIGNoYW5nZWQgb3B0aW9ucyAqLworI2luY2x1ZGUgImptb3JlY2ZnLmgiICAgICAgICAgICAvKiBzZWxkb20gY2hhbmdlZCBvcHRpb25zICovCiAKIAogI2lmZGVmIF9fY3BsdXNwbHVzCkBAIC00MSwxMyArNDEsMTMgQEAKICAqIGlmIHlvdSB3YW50IHRvIGJlIGNvbXBhdGlibGUuCiAgKi8KIAotI2RlZmluZSBEQ1RTSVpFCQkgICAgOAkvKiBUaGUgYmFzaWMgRENUIGJsb2NrIGlzIDh4OCBzYW1wbGVzICovCi0jZGVmaW5lIERDVFNJWkUyCSAgICA2NAkvKiBEQ1RTSVpFIHNxdWFyZWQ7ICMgb2YgZWxlbWVudHMgaW4gYSBibG9jayAqLwotI2RlZmluZSBOVU1fUVVBTlRfVEJMUyAgICAgIDQJLyogUXVhbnRpemF0aW9uIHRhYmxlcyBhcmUgbnVtYmVyZWQgMC4uMyAqLwotI2RlZmluZSBOVU1fSFVGRl9UQkxTICAgICAgIDQJLyogSHVmZm1hbiB0YWJsZXMgYXJlIG51bWJlcmVkIDAuLjMgKi8KLSNkZWZpbmUgTlVNX0FSSVRIX1RCTFMgICAgICAxNgkvKiBBcml0aC1jb2RpbmcgdGFibGVzIGFyZSBudW1iZXJlZCAwLi4xNSAqLwotI2RlZmluZSBNQVhfQ09NUFNfSU5fU0NBTiAgIDQJLyogSlBFRyBsaW1pdCBvbiAjIG9mIGNvbXBvbmVudHMgaW4gb25lIHNjYW4gKi8KLSNkZWZpbmUgTUFYX1NBTVBfRkFDVE9SICAgICA0CS8qIEpQRUcgbGltaXQgb24gc2FtcGxpbmcgZmFjdG9ycyAqLworI2RlZmluZSBEQ1RTSVpFICAgICAgICAgICAgIDggICAvKiBUaGUgYmFzaWMgRENUIGJsb2NrIGlzIDh4OCBzYW1wbGVzICovCisjZGVmaW5lIERDVFNJWkUyICAgICAgICAgICAgNjQgIC8qIERDVFNJWkUgc3F1YXJlZDsgIyBvZiBlbGVtZW50cyBpbiBhIGJsb2NrICovCisjZGVmaW5lIE5VTV9RVUFOVF9UQkxTICAgICAgNCAgIC8qIFF1YW50aXphdGlvbiB0YWJsZXMgYXJlIG51bWJlcmVkIDAuLjMgKi8KKyNkZWZpbmUgTlVNX0hVRkZfVEJMUyAgICAgICA0ICAgLyogSHVmZm1hbiB0YWJsZXMgYXJlIG51bWJlcmVkIDAuLjMgKi8KKyNkZWZpbmUgTlVNX0FSSVRIX1RCTFMgICAgICAxNiAgLyogQXJpdGgtY29kaW5nIHRhYmxlcyBhcmUgbnVtYmVyZWQgMC4uMTUgKi8KKyNkZWZpbmUgTUFYX0NPTVBTX0lOX1NDQU4gICA0ICAgLyogSlBFRyBsaW1pdCBvbiAjIG9mIGNvbXBvbmVudHMgaW4gb25lIHNjYW4gKi8KKyNkZWZpbmUgTUFYX1NBTVBfRkFDVE9SICAgICA0ICAgLyogSlBFRyBsaW1pdCBvbiBzYW1wbGluZyBmYWN0b3JzICovCiAvKiBVbmZvcnR1bmF0ZWx5LCBzb21lIGJvem8gYXQgQWRvYmUgc2F3IG5vIHJlYXNvbiB0byBiZSBib3VuZCBieSB0aGUgc3RhbmRhcmQ7CiAgKiB0aGUgUG9zdFNjcmlwdCBEQ1QgZmlsdGVyIGNhbiBlbWl0IGZpbGVzIHdpdGggbWFueSBtb3JlIHRoYW4gMTAgYmxvY2tzL01DVS4KICAqIElmIHlvdSBoYXBwZW4gdG8gcnVuIGFjcm9zcyBzdWNoIGEgZmlsZSwgeW91IGNhbiB1cCBEX01BWF9CTE9DS1NfSU5fTUNVCkBAIC02NiwxNiArNjYsMTYgQEAKICAqIGJ1dCB0aGUgcG9pbnRlciBhcnJheXMgY2FuIGZpdCBpbiBuZWFyIG1lbW9yeS4KICAqLwogCi10eXBlZGVmIEpTQU1QTEUgRkFSICpKU0FNUFJPVzsJLyogcHRyIHRvIG9uZSBpbWFnZSByb3cgb2YgcGl4ZWwgc2FtcGxlcy4gKi8KLXR5cGVkZWYgSlNBTVBST1cgKkpTQU1QQVJSQVk7CS8qIHB0ciB0byBzb21lIHJvd3MgKGEgMi1EIHNhbXBsZSBhcnJheSkgKi8KLXR5cGVkZWYgSlNBTVBBUlJBWSAqSlNBTVBJTUFHRTsJLyogYSAzLUQgc2FtcGxlIGFycmF5OiB0b3AgaW5kZXggaXMgY29sb3IgKi8KK3R5cGVkZWYgSlNBTVBMRSBGQVIgKkpTQU1QUk9XOyAgLyogcHRyIHRvIG9uZSBpbWFnZSByb3cgb2YgcGl4ZWwgc2FtcGxlcy4gKi8KK3R5cGVkZWYgSlNBTVBST1cgKkpTQU1QQVJSQVk7ICAgLyogcHRyIHRvIHNvbWUgcm93cyAoYSAyLUQgc2FtcGxlIGFycmF5KSAqLwordHlwZWRlZiBKU0FNUEFSUkFZICpKU0FNUElNQUdFOyAvKiBhIDMtRCBzYW1wbGUgYXJyYXk6IHRvcCBpbmRleCBpcyBjb2xvciAqLwogCi10eXBlZGVmIEpDT0VGIEpCTE9DS1tEQ1RTSVpFMl07CS8qIG9uZSBibG9jayBvZiBjb2VmZmljaWVudHMgKi8KLXR5cGVkZWYgSkJMT0NLIEZBUiAqSkJMT0NLUk9XOwkvKiBwb2ludGVyIHRvIG9uZSByb3cgb2YgY29lZmZpY2llbnQgYmxvY2tzICovCi10eXBlZGVmIEpCTE9DS1JPVyAqSkJMT0NLQVJSQVk7CQkvKiBhIDItRCBhcnJheSBvZiBjb2VmZmljaWVudCBibG9ja3MgKi8KLXR5cGVkZWYgSkJMT0NLQVJSQVkgKkpCTE9DS0lNQUdFOwkvKiBhIDMtRCBhcnJheSBvZiBjb2VmZmljaWVudCBibG9ja3MgKi8KK3R5cGVkZWYgSkNPRUYgSkJMT0NLW0RDVFNJWkUyXTsgLyogb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cyAqLwordHlwZWRlZiBKQkxPQ0sgRkFSICpKQkxPQ0tST1c7ICAvKiBwb2ludGVyIHRvIG9uZSByb3cgb2YgY29lZmZpY2llbnQgYmxvY2tzICovCit0eXBlZGVmIEpCTE9DS1JPVyAqSkJMT0NLQVJSQVk7ICAgICAgICAgLyogYSAyLUQgYXJyYXkgb2YgY29lZmZpY2llbnQgYmxvY2tzICovCit0eXBlZGVmIEpCTE9DS0FSUkFZICpKQkxPQ0tJTUFHRTsgICAgICAgLyogYSAzLUQgYXJyYXkgb2YgY29lZmZpY2llbnQgYmxvY2tzICovCiAKLXR5cGVkZWYgSkNPRUYgRkFSICpKQ09FRlBUUjsJLyogdXNlZnVsIGluIGEgY291cGxlIG9mIHBsYWNlcyAqLwordHlwZWRlZiBKQ09FRiBGQVIgKkpDT0VGUFRSOyAgICAvKiB1c2VmdWwgaW4gYSBjb3VwbGUgb2YgcGxhY2VzICovCiAKIAogLyogVHlwZXMgZm9yIEpQRUcgY29tcHJlc3Npb24gcGFyYW1ldGVycyBhbmQgd29ya2luZyB0YWJsZXMuICovCkBAIC04OCwxMyArODgsMTMgQEAKICAgICogKG5vdCB0aGUgemlnemFnIG9yZGVyIGluIHdoaWNoIHRoZXkgYXJlIHN0b3JlZCBpbiBhIEpQRUcgRFFUIG1hcmtlcikuCiAgICAqIENBVVRJT046IElKRyB2ZXJzaW9ucyBwcmlvciB0byB2NmEga2VwdCB0aGlzIGFycmF5IGluIHppZ3phZyBvcmRlci4KICAgICovCi0gIFVJTlQxNiBxdWFudHZhbFtEQ1RTSVpFMl07CS8qIHF1YW50aXphdGlvbiBzdGVwIGZvciBlYWNoIGNvZWZmaWNpZW50ICovCisgIFVJTlQxNiBxdWFudHZhbFtEQ1RTSVpFMl07ICAgIC8qIHF1YW50aXphdGlvbiBzdGVwIGZvciBlYWNoIGNvZWZmaWNpZW50ICovCiAgIC8qIFRoaXMgZmllbGQgaXMgdXNlZCBvbmx5IGR1cmluZyBjb21wcmVzc2lvbi4gIEl0J3MgaW5pdGlhbGl6ZWQgRkFMU0Ugd2hlbgogICAgKiB0aGUgdGFibGUgaXMgY3JlYXRlZCwgYW5kIHNldCBUUlVFIHdoZW4gaXQncyBiZWVuIG91dHB1dCB0byB0aGUgZmlsZS4KICAgICogWW91IGNvdWxkIHN1cHByZXNzIG91dHB1dCBvZiBhIHRhYmxlIGJ5IHNldHRpbmcgdGhpcyB0byBUUlVFLgogICAgKiAoU2VlIGpwZWdfc3VwcHJlc3NfdGFibGVzIGZvciBhbiBleGFtcGxlLikKICAgICovCi0gIGJvb2xlYW4gc2VudF90YWJsZTsJCS8qIFRSVUUgd2hlbiB0YWJsZSBoYXMgYmVlbiBvdXRwdXQgKi8KKyAgYm9vbGVhbiBzZW50X3RhYmxlOyAgICAgICAgICAgLyogVFJVRSB3aGVuIHRhYmxlIGhhcyBiZWVuIG91dHB1dCAqLwogfSBKUVVBTlRfVEJMOwogCiAKQEAgLTEwMiwxNSArMTAyLDE1IEBACiAKIHR5cGVkZWYgc3RydWN0IHsKICAgLyogVGhlc2UgdHdvIGZpZWxkcyBkaXJlY3RseSByZXByZXNlbnQgdGhlIGNvbnRlbnRzIG9mIGEgSlBFRyBESFQgbWFya2VyICovCi0gIFVJTlQ4IGJpdHNbMTddOwkJLyogYml0c1trXSA9ICMgb2Ygc3ltYm9scyB3aXRoIGNvZGVzIG9mICovCi0JCQkJLyogbGVuZ3RoIGsgYml0czsgYml0c1swXSBpcyB1bnVzZWQgKi8KLSAgVUlOVDggaHVmZnZhbFsyNTZdOwkJLyogVGhlIHN5bWJvbHMsIGluIG9yZGVyIG9mIGluY3IgY29kZSBsZW5ndGggKi8KKyAgVUlOVDggYml0c1sxN107ICAgICAgICAgICAgICAgLyogYml0c1trXSA9ICMgb2Ygc3ltYm9scyB3aXRoIGNvZGVzIG9mICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxlbmd0aCBrIGJpdHM7IGJpdHNbMF0gaXMgdW51c2VkICovCisgIFVJTlQ4IGh1ZmZ2YWxbMjU2XTsgICAgICAgICAgIC8qIFRoZSBzeW1ib2xzLCBpbiBvcmRlciBvZiBpbmNyIGNvZGUgbGVuZ3RoICovCiAgIC8qIFRoaXMgZmllbGQgaXMgdXNlZCBvbmx5IGR1cmluZyBjb21wcmVzc2lvbi4gIEl0J3MgaW5pdGlhbGl6ZWQgRkFMU0Ugd2hlbgogICAgKiB0aGUgdGFibGUgaXMgY3JlYXRlZCwgYW5kIHNldCBUUlVFIHdoZW4gaXQncyBiZWVuIG91dHB1dCB0byB0aGUgZmlsZS4KICAgICogWW91IGNvdWxkIHN1cHByZXNzIG91dHB1dCBvZiBhIHRhYmxlIGJ5IHNldHRpbmcgdGhpcyB0byBUUlVFLgogICAgKiAoU2VlIGpwZWdfc3VwcHJlc3NfdGFibGVzIGZvciBhbiBleGFtcGxlLikKICAgICovCi0gIGJvb2xlYW4gc2VudF90YWJsZTsJCS8qIFRSVUUgd2hlbiB0YWJsZSBoYXMgYmVlbiBvdXRwdXQgKi8KKyAgYm9vbGVhbiBzZW50X3RhYmxlOyAgICAgICAgICAgLyogVFJVRSB3aGVuIHRhYmxlIGhhcyBiZWVuIG91dHB1dCAqLwogfSBKSFVGRl9UQkw7CiAKIApAQCAtMTIwLDIwICsxMjAsMjAgQEAKICAgLyogVGhlc2UgdmFsdWVzIGFyZSBmaXhlZCBvdmVyIHRoZSB3aG9sZSBpbWFnZS4gKi8KICAgLyogRm9yIGNvbXByZXNzaW9uLCB0aGV5IG11c3QgYmUgc3VwcGxpZWQgYnkgcGFyYW1ldGVyIHNldHVwOyAqLwogICAvKiBmb3IgZGVjb21wcmVzc2lvbiwgdGhleSBhcmUgcmVhZCBmcm9tIHRoZSBTT0YgbWFya2VyLiAqLwotICBpbnQgY29tcG9uZW50X2lkOwkJLyogaWRlbnRpZmllciBmb3IgdGhpcyBjb21wb25lbnQgKDAuLjI1NSkgKi8KLSAgaW50IGNvbXBvbmVudF9pbmRleDsJCS8qIGl0cyBpbmRleCBpbiBTT0Ygb3IgY2luZm8tPmNvbXBfaW5mb1tdICovCi0gIGludCBoX3NhbXBfZmFjdG9yOwkJLyogaG9yaXpvbnRhbCBzYW1wbGluZyBmYWN0b3IgKDEuLjQpICovCi0gIGludCB2X3NhbXBfZmFjdG9yOwkJLyogdmVydGljYWwgc2FtcGxpbmcgZmFjdG9yICgxLi40KSAqLwotICBpbnQgcXVhbnRfdGJsX25vOwkJLyogcXVhbnRpemF0aW9uIHRhYmxlIHNlbGVjdG9yICgwLi4zKSAqLworICBpbnQgY29tcG9uZW50X2lkOyAgICAgICAgICAgICAvKiBpZGVudGlmaWVyIGZvciB0aGlzIGNvbXBvbmVudCAoMC4uMjU1KSAqLworICBpbnQgY29tcG9uZW50X2luZGV4OyAgICAgICAgICAvKiBpdHMgaW5kZXggaW4gU09GIG9yIGNpbmZvLT5jb21wX2luZm9bXSAqLworICBpbnQgaF9zYW1wX2ZhY3RvcjsgICAgICAgICAgICAvKiBob3Jpem9udGFsIHNhbXBsaW5nIGZhY3RvciAoMS4uNCkgKi8KKyAgaW50IHZfc2FtcF9mYWN0b3I7ICAgICAgICAgICAgLyogdmVydGljYWwgc2FtcGxpbmcgZmFjdG9yICgxLi40KSAqLworICBpbnQgcXVhbnRfdGJsX25vOyAgICAgICAgICAgICAvKiBxdWFudGl6YXRpb24gdGFibGUgc2VsZWN0b3IgKDAuLjMpICovCiAgIC8qIFRoZXNlIHZhbHVlcyBtYXkgdmFyeSBiZXR3ZWVuIHNjYW5zLiAqLwogICAvKiBGb3IgY29tcHJlc3Npb24sIHRoZXkgbXVzdCBiZSBzdXBwbGllZCBieSBwYXJhbWV0ZXIgc2V0dXA7ICovCiAgIC8qIGZvciBkZWNvbXByZXNzaW9uLCB0aGV5IGFyZSByZWFkIGZyb20gdGhlIFNPUyBtYXJrZXIuICovCiAgIC8qIFRoZSBkZWNvbXByZXNzb3Igb3V0cHV0IHNpZGUgbWF5IG5vdCB1c2UgdGhlc2UgdmFyaWFibGVzLiAqLwotICBpbnQgZGNfdGJsX25vOwkJLyogREMgZW50cm9weSB0YWJsZSBzZWxlY3RvciAoMC4uMykgKi8KLSAgaW50IGFjX3RibF9ubzsJCS8qIEFDIGVudHJvcHkgdGFibGUgc2VsZWN0b3IgKDAuLjMpICovCi0gIAorICBpbnQgZGNfdGJsX25vOyAgICAgICAgICAgICAgICAvKiBEQyBlbnRyb3B5IHRhYmxlIHNlbGVjdG9yICgwLi4zKSAqLworICBpbnQgYWNfdGJsX25vOyAgICAgICAgICAgICAgICAvKiBBQyBlbnRyb3B5IHRhYmxlIHNlbGVjdG9yICgwLi4zKSAqLworCiAgIC8qIFJlbWFpbmluZyBmaWVsZHMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgcHJpdmF0ZSBieSBhcHBsaWNhdGlvbnMuICovCi0gIAorCiAgIC8qIFRoZXNlIHZhbHVlcyBhcmUgY29tcHV0ZWQgZHVyaW5nIGNvbXByZXNzaW9uIG9yIGRlY29tcHJlc3Npb24gc3RhcnR1cDogKi8KICAgLyogQ29tcG9uZW50J3Mgc2l6ZSBpbiBEQ1QgYmxvY2tzLgogICAgKiBBbnkgZHVtbXkgYmxvY2tzIGFkZGVkIHRvIGNvbXBsZXRlIGFuIE1DVSBhcmUgbm90IGNvdW50ZWQ7IHRoZXJlZm9yZQpAQCAtMTQ0LDggKzE0NCw4IEBACiAgIC8qIFNpemUgb2YgYSBEQ1QgYmxvY2sgaW4gc2FtcGxlcy4gIEFsd2F5cyBEQ1RTSVpFIGZvciBjb21wcmVzc2lvbi4KICAgICogRm9yIGRlY29tcHJlc3Npb24gdGhpcyBpcyB0aGUgc2l6ZSBvZiB0aGUgb3V0cHV0IGZyb20gb25lIERDVCBibG9jaywKICAgICogcmVmbGVjdGluZyBhbnkgc2NhbGluZyB3ZSBjaG9vc2UgdG8gYXBwbHkgZHVyaW5nIHRoZSBJRENUIHN0ZXAuCi0gICAqIFZhbHVlcyBvZiAxLDIsNCw4IGFyZSBsaWtlbHkgdG8gYmUgc3VwcG9ydGVkLiAgTm90ZSB0aGF0IGRpZmZlcmVudAotICAgKiBjb21wb25lbnRzIG1heSByZWNlaXZlIGRpZmZlcmVudCBJRENUIHNjYWxpbmdzLgorICAgKiBWYWx1ZXMgZnJvbSAxIHRvIDE2IGFyZSBzdXBwb3J0ZWQuCisgICAqIE5vdGUgdGhhdCBkaWZmZXJlbnQgY29tcG9uZW50cyBtYXkgcmVjZWl2ZSBkaWZmZXJlbnQgSURDVCBzY2FsaW5ncy4KICAgICovCiAjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA3MAogICBpbnQgRENUX2hfc2NhbGVkX3NpemU7CkBAIC0xNTksMjIgKzE1OSwyMiBAQAogICAgKiBhbmQgc2ltaWxhcmx5IGZvciBoZWlnaHQuICBGb3IgZGVjb21wcmVzc2lvbiwgSURDVCBzY2FsaW5nIGlzIGluY2x1ZGVkLCBzbwogICAgKiBkb3duc2FtcGxlZF93aWR0aCA9IGNlaWwoaW1hZ2Vfd2lkdGggKiBIaS9IbWF4ICogRENUX1toX11zY2FsZWRfc2l6ZS9EQ1RTSVpFKQogICAgKi8KLSAgSkRJTUVOU0lPTiBkb3duc2FtcGxlZF93aWR0aDsJIC8qIGFjdHVhbCB3aWR0aCBpbiBzYW1wbGVzICovCisgIEpESU1FTlNJT04gZG93bnNhbXBsZWRfd2lkdGg7ICAvKiBhY3R1YWwgd2lkdGggaW4gc2FtcGxlcyAqLwogICBKRElNRU5TSU9OIGRvd25zYW1wbGVkX2hlaWdodDsgLyogYWN0dWFsIGhlaWdodCBpbiBzYW1wbGVzICovCiAgIC8qIFRoaXMgZmxhZyBpcyB1c2VkIG9ubHkgZm9yIGRlY29tcHJlc3Npb24uICBJbiBjYXNlcyB3aGVyZSBzb21lIG9mIHRoZQogICAgKiBjb21wb25lbnRzIHdpbGwgYmUgaWdub3JlZCAoZWcgZ3JheXNjYWxlIG91dHB1dCBmcm9tIFlDYkNyIGltYWdlKSwKICAgICogd2UgY2FuIHNraXAgbW9zdCBjb21wdXRhdGlvbnMgZm9yIHRoZSB1bnVzZWQgY29tcG9uZW50cy4KICAgICovCi0gIGJvb2xlYW4gY29tcG9uZW50X25lZWRlZDsJLyogZG8gd2UgbmVlZCB0aGUgdmFsdWUgb2YgdGhpcyBjb21wb25lbnQ/ICovCisgIGJvb2xlYW4gY29tcG9uZW50X25lZWRlZDsgICAgIC8qIGRvIHdlIG5lZWQgdGhlIHZhbHVlIG9mIHRoaXMgY29tcG9uZW50PyAqLwogCiAgIC8qIFRoZXNlIHZhbHVlcyBhcmUgY29tcHV0ZWQgYmVmb3JlIHN0YXJ0aW5nIGEgc2NhbiBvZiB0aGUgY29tcG9uZW50LiAqLwogICAvKiBUaGUgZGVjb21wcmVzc29yIG91dHB1dCBzaWRlIG1heSBub3QgdXNlIHRoZXNlIHZhcmlhYmxlcy4gKi8KLSAgaW50IE1DVV93aWR0aDsJCS8qIG51bWJlciBvZiBibG9ja3MgcGVyIE1DVSwgaG9yaXpvbnRhbGx5ICovCi0gIGludCBNQ1VfaGVpZ2h0OwkJLyogbnVtYmVyIG9mIGJsb2NrcyBwZXIgTUNVLCB2ZXJ0aWNhbGx5ICovCi0gIGludCBNQ1VfYmxvY2tzOwkJLyogTUNVX3dpZHRoICogTUNVX2hlaWdodCAqLwotICBpbnQgTUNVX3NhbXBsZV93aWR0aDsJCS8qIE1DVSB3aWR0aCBpbiBzYW1wbGVzLCBNQ1Vfd2lkdGgqRENUX1toX11zY2FsZWRfc2l6ZSAqLwotICBpbnQgbGFzdF9jb2xfd2lkdGg7CQkvKiAjIG9mIG5vbi1kdW1teSBibG9ja3MgYWNyb3NzIGluIGxhc3QgTUNVICovCi0gIGludCBsYXN0X3Jvd19oZWlnaHQ7CQkvKiAjIG9mIG5vbi1kdW1teSBibG9ja3MgZG93biBpbiBsYXN0IE1DVSAqLworICBpbnQgTUNVX3dpZHRoOyAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgYmxvY2tzIHBlciBNQ1UsIGhvcml6b250YWxseSAqLworICBpbnQgTUNVX2hlaWdodDsgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgYmxvY2tzIHBlciBNQ1UsIHZlcnRpY2FsbHkgKi8KKyAgaW50IE1DVV9ibG9ja3M7ICAgICAgICAgICAgICAgLyogTUNVX3dpZHRoICogTUNVX2hlaWdodCAqLworICBpbnQgTUNVX3NhbXBsZV93aWR0aDsgICAgICAgICAvKiBNQ1Ugd2lkdGggaW4gc2FtcGxlcywgTUNVX3dpZHRoKkRDVF9baF9dc2NhbGVkX3NpemUgKi8KKyAgaW50IGxhc3RfY29sX3dpZHRoOyAgICAgICAgICAgLyogIyBvZiBub24tZHVtbXkgYmxvY2tzIGFjcm9zcyBpbiBsYXN0IE1DVSAqLworICBpbnQgbGFzdF9yb3dfaGVpZ2h0OyAgICAgICAgICAvKiAjIG9mIG5vbi1kdW1teSBibG9ja3MgZG93biBpbiBsYXN0IE1DVSAqLwogCiAgIC8qIFNhdmVkIHF1YW50aXphdGlvbiB0YWJsZSBmb3IgY29tcG9uZW50OyBOVUxMIGlmIG5vbmUgeWV0IHNhdmVkLgogICAgKiBTZWUgamRpbnB1dC5jIGNvbW1lbnRzIGFib3V0IHRoZSBuZWVkIGZvciB0aGlzIGluZm9ybWF0aW9uLgpAQCAtMTkwLDEwICsxOTAsMTAgQEAKIC8qIFRoZSBzY3JpcHQgZm9yIGVuY29kaW5nIGEgbXVsdGlwbGUtc2NhbiBmaWxlIGlzIGFuIGFycmF5IG9mIHRoZXNlOiAqLwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gIGludCBjb21wc19pbl9zY2FuOwkJLyogbnVtYmVyIG9mIGNvbXBvbmVudHMgZW5jb2RlZCBpbiB0aGlzIHNjYW4gKi8KKyAgaW50IGNvbXBzX2luX3NjYW47ICAgICAgICAgICAgLyogbnVtYmVyIG9mIGNvbXBvbmVudHMgZW5jb2RlZCBpbiB0aGlzIHNjYW4gKi8KICAgaW50IGNvbXBvbmVudF9pbmRleFtNQVhfQ09NUFNfSU5fU0NBTl07IC8qIHRoZWlyIFNPRi9jb21wX2luZm9bXSBpbmRleGVzICovCi0gIGludCBTcywgU2U7CQkJLyogcHJvZ3Jlc3NpdmUgSlBFRyBzcGVjdHJhbCBzZWxlY3Rpb24gcGFybXMgKi8KLSAgaW50IEFoLCBBbDsJCQkvKiBwcm9ncmVzc2l2ZSBKUEVHIHN1Y2Nlc3NpdmUgYXBwcm94LiBwYXJtcyAqLworICBpbnQgU3MsIFNlOyAgICAgICAgICAgICAgICAgICAvKiBwcm9ncmVzc2l2ZSBKUEVHIHNwZWN0cmFsIHNlbGVjdGlvbiBwYXJtcyAqLworICBpbnQgQWgsIEFsOyAgICAgICAgICAgICAgICAgICAvKiBwcm9ncmVzc2l2ZSBKUEVHIHN1Y2Nlc3NpdmUgYXBwcm94LiBwYXJtcyAqLwogfSBqcGVnX3NjYW5faW5mbzsKIAogLyogVGhlIGRlY29tcHJlc3NvciBjYW4gc2F2ZSBBUFBuIGFuZCBDT00gbWFya2VycyBpbiBhIGxpc3Qgb2YgdGhlc2U6ICovCkBAIC0yMDEsMTEgKzIwMSwxMSBAQAogdHlwZWRlZiBzdHJ1Y3QganBlZ19tYXJrZXJfc3RydWN0IEZBUiAqIGpwZWdfc2F2ZWRfbWFya2VyX3B0cjsKIAogc3RydWN0IGpwZWdfbWFya2VyX3N0cnVjdCB7Ci0gIGpwZWdfc2F2ZWRfbWFya2VyX3B0ciBuZXh0OwkvKiBuZXh0IGluIGxpc3QsIG9yIE5VTEwgKi8KLSAgVUlOVDggbWFya2VyOwkJCS8qIG1hcmtlciBjb2RlOiBKUEVHX0NPTSwgb3IgSlBFR19BUFAwK24gKi8KLSAgdW5zaWduZWQgaW50IG9yaWdpbmFsX2xlbmd0aDsJLyogIyBieXRlcyBvZiBkYXRhIGluIHRoZSBmaWxlICovCi0gIHVuc2lnbmVkIGludCBkYXRhX2xlbmd0aDsJLyogIyBieXRlcyBvZiBkYXRhIHNhdmVkIGF0IGRhdGFbXSAqLwotICBKT0NURVQgRkFSICogZGF0YTsJCS8qIHRoZSBkYXRhIGNvbnRhaW5lZCBpbiB0aGUgbWFya2VyICovCisgIGpwZWdfc2F2ZWRfbWFya2VyX3B0ciBuZXh0OyAgIC8qIG5leHQgaW4gbGlzdCwgb3IgTlVMTCAqLworICBVSU5UOCBtYXJrZXI7ICAgICAgICAgICAgICAgICAvKiBtYXJrZXIgY29kZTogSlBFR19DT00sIG9yIEpQRUdfQVBQMCtuICovCisgIHVuc2lnbmVkIGludCBvcmlnaW5hbF9sZW5ndGg7IC8qICMgYnl0ZXMgb2YgZGF0YSBpbiB0aGUgZmlsZSAqLworICB1bnNpZ25lZCBpbnQgZGF0YV9sZW5ndGg7ICAgICAvKiAjIGJ5dGVzIG9mIGRhdGEgc2F2ZWQgYXQgZGF0YVtdICovCisgIEpPQ1RFVCBGQVIgKiBkYXRhOyAgICAgICAgICAgIC8qIHRoZSBkYXRhIGNvbnRhaW5lZCBpbiB0aGUgbWFya2VyICovCiAgIC8qIHRoZSBtYXJrZXIgbGVuZ3RoIHdvcmQgaXMgbm90IGNvdW50ZWQgaW4gZGF0YV9sZW5ndGggb3Igb3JpZ2luYWxfbGVuZ3RoICovCiB9OwogCkBAIC0yMTUsNzIgKzIxNSw3MSBAQAogI2RlZmluZSBKQ1NfQUxQSEFfRVhURU5TSU9OUyAxCiAKIHR5cGVkZWYgZW51bSB7Ci0JSkNTX1VOS05PV04sCQkvKiBlcnJvci91bnNwZWNpZmllZCAqLwotCUpDU19HUkFZU0NBTEUsCQkvKiBtb25vY2hyb21lICovCi0JSkNTX1JHQiwJCS8qIHJlZC9ncmVlbi9ibHVlIGFzIHNwZWNpZmllZCBieSB0aGUgUkdCX1JFRCwgUkdCX0dSRUVOLAotCQkJCSAgIFJHQl9CTFVFLCBhbmQgUkdCX1BJWEVMU0laRSBtYWNyb3MgKi8KLQlKQ1NfWUNiQ3IsCQkvKiBZL0NiL0NyIChhbHNvIGtub3duIGFzIFlVVikgKi8KLQlKQ1NfQ01ZSywJCS8qIEMvTS9ZL0sgKi8KLQlKQ1NfWUNDSywJCS8qIFkvQ2IvQ3IvSyAqLwotCUpDU19FWFRfUkdCLAkJLyogcmVkL2dyZWVuL2JsdWUgKi8KLQlKQ1NfRVhUX1JHQlgsCQkvKiByZWQvZ3JlZW4vYmx1ZS94ICovCi0JSkNTX0VYVF9CR1IsCQkvKiBibHVlL2dyZWVuL3JlZCAqLwotCUpDU19FWFRfQkdSWCwJCS8qIGJsdWUvZ3JlZW4vcmVkL3ggKi8KLQlKQ1NfRVhUX1hCR1IsCQkvKiB4L2JsdWUvZ3JlZW4vcmVkICovCi0JSkNTX0VYVF9YUkdCLAkJLyogeC9yZWQvZ3JlZW4vYmx1ZSAqLwotCS8qIFdoZW4gb3V0X2NvbG9yX3NwYWNlIGl0IHNldCB0byBKQ1NfRVhUX1JHQlgsIEpDU19FWFRfQkdSWCwKLQkgICBKQ1NfRVhUX1hCR1IsIG9yIEpDU19FWFRfWFJHQiBkdXJpbmcgZGVjb21wcmVzc2lvbiwgdGhlIFggYnl0ZSBpcwotCSAgIHVuZGVmaW5lZCwgYW5kIGluIG9yZGVyIHRvIGVuc3VyZSB0aGUgYmVzdCBwZXJmb3JtYW5jZSwKLQkgICBsaWJqcGVnLXR1cmJvIGNhbiBzZXQgdGhhdCBieXRlIHRvIHdoYXRldmVyIHZhbHVlIGl0IHdpc2hlcy4gIFVzZQotCSAgIHRoZSBmb2xsb3dpbmcgY29sb3JzcGFjZSBjb25zdGFudHMgdG8gZW5zdXJlIHRoYXQgdGhlIFggYnl0ZSBpcyBzZXQKLQkgICB0byAweEZGLCBzbyB0aGF0IGl0IGNhbiBiZSBpbnRlcnByZXRlZCBhcyBhbiBvcGFxdWUgYWxwaGEKLQkgICBjaGFubmVsLiAqLwotCUpDU19FWFRfUkdCQSwJCS8qIHJlZC9ncmVlbi9ibHVlL2FscGhhICovCi0JSkNTX0VYVF9CR1JBLAkJLyogYmx1ZS9ncmVlbi9yZWQvYWxwaGEgKi8KLQlKQ1NfRVhUX0FCR1IsCQkvKiBhbHBoYS9ibHVlL2dyZWVuL3JlZCAqLwotCUpDU19FWFRfQVJHQgkJLyogYWxwaGEvcmVkL2dyZWVuL2JsdWUgKi8KKyAgSkNTX1VOS05PV04sICAgICAgICAgICAgLyogZXJyb3IvdW5zcGVjaWZpZWQgKi8KKyAgSkNTX0dSQVlTQ0FMRSwgICAgICAgICAgLyogbW9ub2Nocm9tZSAqLworICBKQ1NfUkdCLCAgICAgICAgICAgICAgICAvKiByZWQvZ3JlZW4vYmx1ZSBhcyBzcGVjaWZpZWQgYnkgdGhlIFJHQl9SRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJHQl9HUkVFTiwgUkdCX0JMVUUsIGFuZCBSR0JfUElYRUxTSVpFIG1hY3JvcyAqLworICBKQ1NfWUNiQ3IsICAgICAgICAgICAgICAvKiBZL0NiL0NyIChhbHNvIGtub3duIGFzIFlVVikgKi8KKyAgSkNTX0NNWUssICAgICAgICAgICAgICAgLyogQy9NL1kvSyAqLworICBKQ1NfWUNDSywgICAgICAgICAgICAgICAvKiBZL0NiL0NyL0sgKi8KKyAgSkNTX0VYVF9SR0IsICAgICAgICAgICAgLyogcmVkL2dyZWVuL2JsdWUgKi8KKyAgSkNTX0VYVF9SR0JYLCAgICAgICAgICAgLyogcmVkL2dyZWVuL2JsdWUveCAqLworICBKQ1NfRVhUX0JHUiwgICAgICAgICAgICAvKiBibHVlL2dyZWVuL3JlZCAqLworICBKQ1NfRVhUX0JHUlgsICAgICAgICAgICAvKiBibHVlL2dyZWVuL3JlZC94ICovCisgIEpDU19FWFRfWEJHUiwgICAgICAgICAgIC8qIHgvYmx1ZS9ncmVlbi9yZWQgKi8KKyAgSkNTX0VYVF9YUkdCLCAgICAgICAgICAgLyogeC9yZWQvZ3JlZW4vYmx1ZSAqLworICAvKiBXaGVuIG91dF9jb2xvcl9zcGFjZSBpdCBzZXQgdG8gSkNTX0VYVF9SR0JYLCBKQ1NfRVhUX0JHUlgsIEpDU19FWFRfWEJHUiwKKyAgICAgb3IgSkNTX0VYVF9YUkdCIGR1cmluZyBkZWNvbXByZXNzaW9uLCB0aGUgWCBieXRlIGlzIHVuZGVmaW5lZCwgYW5kIGluCisgICAgIG9yZGVyIHRvIGVuc3VyZSB0aGUgYmVzdCBwZXJmb3JtYW5jZSwgbGlianBlZy10dXJibyBjYW4gc2V0IHRoYXQgYnl0ZSB0bworICAgICB3aGF0ZXZlciB2YWx1ZSBpdCB3aXNoZXMuICBVc2UgdGhlIGZvbGxvd2luZyBjb2xvcnNwYWNlIGNvbnN0YW50cyB0bworICAgICBlbnN1cmUgdGhhdCB0aGUgWCBieXRlIGlzIHNldCB0byAweEZGLCBzbyB0aGF0IGl0IGNhbiBiZSBpbnRlcnByZXRlZCBhcyBhbgorICAgICBvcGFxdWUgYWxwaGEgY2hhbm5lbC4gKi8KKyAgSkNTX0VYVF9SR0JBLCAgICAgICAgICAgLyogcmVkL2dyZWVuL2JsdWUvYWxwaGEgKi8KKyAgSkNTX0VYVF9CR1JBLCAgICAgICAgICAgLyogYmx1ZS9ncmVlbi9yZWQvYWxwaGEgKi8KKyAgSkNTX0VYVF9BQkdSLCAgICAgICAgICAgLyogYWxwaGEvYmx1ZS9ncmVlbi9yZWQgKi8KKyAgSkNTX0VYVF9BUkdCICAgICAgICAgICAgLyogYWxwaGEvcmVkL2dyZWVuL2JsdWUgKi8KIH0gSl9DT0xPUl9TUEFDRTsKIAogLyogRENUL0lEQ1QgYWxnb3JpdGhtIG9wdGlvbnMuICovCiAKIHR5cGVkZWYgZW51bSB7Ci0JSkRDVF9JU0xPVywJCS8qIHNsb3cgYnV0IGFjY3VyYXRlIGludGVnZXIgYWxnb3JpdGhtICovCi0JSkRDVF9JRkFTVCwJCS8qIGZhc3RlciwgbGVzcyBhY2N1cmF0ZSBpbnRlZ2VyIG1ldGhvZCAqLwotCUpEQ1RfRkxPQVQJCS8qIGZsb2F0aW5nLXBvaW50OiBhY2N1cmF0ZSwgZmFzdCBvbiBmYXN0IEhXICovCisgIEpEQ1RfSVNMT1csICAgICAgICAgICAgIC8qIHNsb3cgYnV0IGFjY3VyYXRlIGludGVnZXIgYWxnb3JpdGhtICovCisgIEpEQ1RfSUZBU1QsICAgICAgICAgICAgIC8qIGZhc3RlciwgbGVzcyBhY2N1cmF0ZSBpbnRlZ2VyIG1ldGhvZCAqLworICBKRENUX0ZMT0FUICAgICAgICAgICAgICAvKiBmbG9hdGluZy1wb2ludDogYWNjdXJhdGUsIGZhc3Qgb24gZmFzdCBIVyAqLwogfSBKX0RDVF9NRVRIT0Q7CiAKLSNpZm5kZWYgSkRDVF9ERUZBVUxUCQkvKiBtYXkgYmUgb3ZlcnJpZGRlbiBpbiBqY29uZmlnLmggKi8KKyNpZm5kZWYgSkRDVF9ERUZBVUxUICAgICAgICAgICAgLyogbWF5IGJlIG92ZXJyaWRkZW4gaW4gamNvbmZpZy5oICovCiAjZGVmaW5lIEpEQ1RfREVGQVVMVCAgSkRDVF9JU0xPVwogI2VuZGlmCi0jaWZuZGVmIEpEQ1RfRkFTVEVTVAkJLyogbWF5IGJlIG92ZXJyaWRkZW4gaW4gamNvbmZpZy5oICovCisjaWZuZGVmIEpEQ1RfRkFTVEVTVCAgICAgICAgICAgIC8qIG1heSBiZSBvdmVycmlkZGVuIGluIGpjb25maWcuaCAqLwogI2RlZmluZSBKRENUX0ZBU1RFU1QgIEpEQ1RfSUZBU1QKICNlbmRpZgogCiAvKiBEaXRoZXJpbmcgb3B0aW9ucyBmb3IgZGVjb21wcmVzc2lvbi4gKi8KIAogdHlwZWRlZiBlbnVtIHsKLQlKRElUSEVSX05PTkUsCQkvKiBubyBkaXRoZXJpbmcgKi8KLQlKRElUSEVSX09SREVSRUQsCS8qIHNpbXBsZSBvcmRlcmVkIGRpdGhlciAqLwotCUpESVRIRVJfRlMJCS8qIEZsb3lkLVN0ZWluYmVyZyBlcnJvciBkaWZmdXNpb24gZGl0aGVyICovCisgIEpESVRIRVJfTk9ORSwgICAgICAgICAgIC8qIG5vIGRpdGhlcmluZyAqLworICBKRElUSEVSX09SREVSRUQsICAgICAgICAvKiBzaW1wbGUgb3JkZXJlZCBkaXRoZXIgKi8KKyAgSkRJVEhFUl9GUyAgICAgICAgICAgICAgLyogRmxveWQtU3RlaW5iZXJnIGVycm9yIGRpZmZ1c2lvbiBkaXRoZXIgKi8KIH0gSl9ESVRIRVJfTU9ERTsKIAogCiAvKiBDb21tb24gZmllbGRzIGJldHdlZW4gSlBFRyBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiBtYXN0ZXIgc3RydWN0cy4gKi8KIAogI2RlZmluZSBqcGVnX2NvbW1vbl9maWVsZHMgXAotICBzdHJ1Y3QganBlZ19lcnJvcl9tZ3IgKiBlcnI7CS8qIEVycm9yIGhhbmRsZXIgbW9kdWxlICovXAotICBzdHJ1Y3QganBlZ19tZW1vcnlfbWdyICogbWVtOwkvKiBNZW1vcnkgbWFuYWdlciBtb2R1bGUgKi9cCisgIHN0cnVjdCBqcGVnX2Vycm9yX21nciAqIGVycjsgIC8qIEVycm9yIGhhbmRsZXIgbW9kdWxlICovXAorICBzdHJ1Y3QganBlZ19tZW1vcnlfbWdyICogbWVtOyAvKiBNZW1vcnkgbWFuYWdlciBtb2R1bGUgKi9cCiAgIHN0cnVjdCBqcGVnX3Byb2dyZXNzX21nciAqIHByb2dyZXNzOyAvKiBQcm9ncmVzcyBtb25pdG9yLCBvciBOVUxMIGlmIG5vbmUgKi9cCi0gIHZvaWQgKiBjbGllbnRfZGF0YTsJCS8qIEF2YWlsYWJsZSBmb3IgdXNlIGJ5IGFwcGxpY2F0aW9uICovXAotICBib29sZWFuIGlzX2RlY29tcHJlc3NvcjsJLyogU28gY29tbW9uIGNvZGUgY2FuIHRlbGwgd2hpY2ggaXMgd2hpY2ggKi9cCi0gIGludCBnbG9iYWxfc3RhdGUJCS8qIEZvciBjaGVja2luZyBjYWxsIHNlcXVlbmNlIHZhbGlkaXR5ICovCisgIHZvaWQgKiBjbGllbnRfZGF0YTsgICAgICAgICAgIC8qIEF2YWlsYWJsZSBmb3IgdXNlIGJ5IGFwcGxpY2F0aW9uICovXAorICBib29sZWFuIGlzX2RlY29tcHJlc3NvcjsgICAgICAvKiBTbyBjb21tb24gY29kZSBjYW4gdGVsbCB3aGljaCBpcyB3aGljaCAqL1wKKyAgaW50IGdsb2JhbF9zdGF0ZSAgICAgICAgICAgICAgLyogRm9yIGNoZWNraW5nIGNhbGwgc2VxdWVuY2UgdmFsaWRpdHkgKi8KIAogLyogUm91dGluZXMgdGhhdCBhcmUgdG8gYmUgdXNlZCBieSBib3RoIGhhbHZlcyBvZiB0aGUgbGlicmFyeSBhcmUgZGVjbGFyZWQKICAqIHRvIHJlY2VpdmUgYSBwb2ludGVyIHRvIHRoaXMgc3RydWN0dXJlLiAgVGhlcmUgYXJlIG5vIGFjdHVhbCBpbnN0YW5jZXMgb2YKICAqIGpwZWdfY29tbW9uX3N0cnVjdCwgb25seSBvZiBqcGVnX2NvbXByZXNzX3N0cnVjdCBhbmQganBlZ19kZWNvbXByZXNzX3N0cnVjdC4KICAqLwogc3RydWN0IGpwZWdfY29tbW9uX3N0cnVjdCB7Ci0gIGpwZWdfY29tbW9uX2ZpZWxkczsJCS8qIEZpZWxkcyBjb21tb24gdG8gYm90aCBtYXN0ZXIgc3RydWN0IHR5cGVzICovCisgIGpwZWdfY29tbW9uX2ZpZWxkczsgICAgICAgICAgIC8qIEZpZWxkcyBjb21tb24gdG8gYm90aCBtYXN0ZXIgc3RydWN0IHR5cGVzICovCiAgIC8qIEFkZGl0aW9uYWwgZmllbGRzIGZvbGxvdyBpbiBhbiBhY3R1YWwganBlZ19jb21wcmVzc19zdHJ1Y3Qgb3IKICAgICoganBlZ19kZWNvbXByZXNzX3N0cnVjdC4gIEFsbCB0aHJlZSBzdHJ1Y3RzIG11c3QgYWdyZWUgb24gdGhlc2UKICAgICogaW5pdGlhbCBmaWVsZHMhICAoVGhpcyB3b3VsZCBiZSBhIGxvdCBjbGVhbmVyIGluIEMrKy4pCkBAIC0yOTUsNyArMjk0LDcgQEAKIC8qIE1hc3RlciByZWNvcmQgZm9yIGEgY29tcHJlc3Npb24gaW5zdGFuY2UgKi8KIAogc3RydWN0IGpwZWdfY29tcHJlc3Nfc3RydWN0IHsKLSAganBlZ19jb21tb25fZmllbGRzOwkJLyogRmllbGRzIHNoYXJlZCB3aXRoIGpwZWdfZGVjb21wcmVzc19zdHJ1Y3QgKi8KKyAganBlZ19jb21tb25fZmllbGRzOyAgICAgICAgICAgLyogRmllbGRzIHNoYXJlZCB3aXRoIGpwZWdfZGVjb21wcmVzc19zdHJ1Y3QgKi8KIAogICAvKiBEZXN0aW5hdGlvbiBmb3IgY29tcHJlc3NlZCBkYXRhICovCiAgIHN0cnVjdCBqcGVnX2Rlc3RpbmF0aW9uX21nciAqIGRlc3Q7CkBAIC0zMDUsMTIgKzMwNCwxMiBAQAogICAgKiBiZSBjb3JyZWN0IGJlZm9yZSB5b3UgY2FuIGV2ZW4gY2FsbCBqcGVnX3NldF9kZWZhdWx0cygpLgogICAgKi8KIAotICBKRElNRU5TSU9OIGltYWdlX3dpZHRoOwkvKiBpbnB1dCBpbWFnZSB3aWR0aCAqLwotICBKRElNRU5TSU9OIGltYWdlX2hlaWdodDsJLyogaW5wdXQgaW1hZ2UgaGVpZ2h0ICovCi0gIGludCBpbnB1dF9jb21wb25lbnRzOwkJLyogIyBvZiBjb2xvciBjb21wb25lbnRzIGluIGlucHV0IGltYWdlICovCi0gIEpfQ09MT1JfU1BBQ0UgaW5fY29sb3Jfc3BhY2U7CS8qIGNvbG9yc3BhY2Ugb2YgaW5wdXQgaW1hZ2UgKi8KKyAgSkRJTUVOU0lPTiBpbWFnZV93aWR0aDsgICAgICAgLyogaW5wdXQgaW1hZ2Ugd2lkdGggKi8KKyAgSkRJTUVOU0lPTiBpbWFnZV9oZWlnaHQ7ICAgICAgLyogaW5wdXQgaW1hZ2UgaGVpZ2h0ICovCisgIGludCBpbnB1dF9jb21wb25lbnRzOyAgICAgICAgIC8qICMgb2YgY29sb3IgY29tcG9uZW50cyBpbiBpbnB1dCBpbWFnZSAqLworICBKX0NPTE9SX1NQQUNFIGluX2NvbG9yX3NwYWNlOyAvKiBjb2xvcnNwYWNlIG9mIGlucHV0IGltYWdlICovCiAKLSAgZG91YmxlIGlucHV0X2dhbW1hOwkJLyogaW1hZ2UgZ2FtbWEgb2YgaW5wdXQgaW1hZ2UgKi8KKyAgZG91YmxlIGlucHV0X2dhbW1hOyAgICAgICAgICAgLyogaW1hZ2UgZ2FtbWEgb2YgaW5wdXQgaW1hZ2UgKi8KIAogICAvKiBDb21wcmVzc2lvbiBwYXJhbWV0ZXJzIC0tLSB0aGVzZSBmaWVsZHMgbXVzdCBiZSBzZXQgYmVmb3JlIGNhbGxpbmcKICAgICoganBlZ19zdGFydF9jb21wcmVzcygpLiAgV2UgcmVjb21tZW5kIGNhbGxpbmcganBlZ19zZXRfZGVmYXVsdHMoKSB0bwpAQCAtMzIzLDggKzMyMiw4IEBACiAjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA3MAogICB1bnNpZ25lZCBpbnQgc2NhbGVfbnVtLCBzY2FsZV9kZW5vbTsgLyogZnJhY3Rpb24gYnkgd2hpY2ggdG8gc2NhbGUgaW1hZ2UgKi8KIAotICBKRElNRU5TSU9OIGpwZWdfd2lkdGg7CS8qIHNjYWxlZCBKUEVHIGltYWdlIHdpZHRoICovCi0gIEpESU1FTlNJT04ganBlZ19oZWlnaHQ7CS8qIHNjYWxlZCBKUEVHIGltYWdlIGhlaWdodCAqLworICBKRElNRU5TSU9OIGpwZWdfd2lkdGg7ICAgICAgICAvKiBzY2FsZWQgSlBFRyBpbWFnZSB3aWR0aCAqLworICBKRElNRU5TSU9OIGpwZWdfaGVpZ2h0OyAgICAgICAvKiBzY2FsZWQgSlBFRyBpbWFnZSBoZWlnaHQgKi8KICAgLyogRGltZW5zaW9ucyBvZiBhY3R1YWwgSlBFRyBpbWFnZSB0aGF0IHdpbGwgYmUgd3JpdHRlbiB0byBmaWxlLAogICAgKiBkZXJpdmVkIGZyb20gaW5wdXQgZGltZW5zaW9ucyBieSBzY2FsaW5nIGZhY3RvcnMgYWJvdmUuCiAgICAqIFRoZXNlIGZpZWxkcyBhcmUgY29tcHV0ZWQgYnkganBlZ19zdGFydF9jb21wcmVzcygpLgpAQCAtMzMzLDkgKzMzMiw5IEBACiAgICAqLwogI2VuZGlmCiAKLSAgaW50IGRhdGFfcHJlY2lzaW9uOwkJLyogYml0cyBvZiBwcmVjaXNpb24gaW4gaW1hZ2UgZGF0YSAqLworICBpbnQgZGF0YV9wcmVjaXNpb247ICAgICAgICAgICAvKiBiaXRzIG9mIHByZWNpc2lvbiBpbiBpbWFnZSBkYXRhICovCiAKLSAgaW50IG51bV9jb21wb25lbnRzOwkJLyogIyBvZiBjb2xvciBjb21wb25lbnRzIGluIEpQRUcgaW1hZ2UgKi8KKyAgaW50IG51bV9jb21wb25lbnRzOyAgICAgICAgICAgLyogIyBvZiBjb2xvciBjb21wb25lbnRzIGluIEpQRUcgaW1hZ2UgKi8KICAgSl9DT0xPUl9TUEFDRSBqcGVnX2NvbG9yX3NwYWNlOyAvKiBjb2xvcnNwYWNlIG9mIEpQRUcgaW1hZ2UgKi8KIAogICBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcF9pbmZvOwpAQCAtMzU3LDIyICszNTYsMjIgQEAKICAgVUlOVDggYXJpdGhfZGNfVVtOVU1fQVJJVEhfVEJMU107IC8qIFUgdmFsdWVzIGZvciBEQyBhcml0aC1jb2RpbmcgdGFibGVzICovCiAgIFVJTlQ4IGFyaXRoX2FjX0tbTlVNX0FSSVRIX1RCTFNdOyAvKiBLeCB2YWx1ZXMgZm9yIEFDIGFyaXRoLWNvZGluZyB0YWJsZXMgKi8KIAotICBpbnQgbnVtX3NjYW5zOwkJLyogIyBvZiBlbnRyaWVzIGluIHNjYW5faW5mbyBhcnJheSAqLworICBpbnQgbnVtX3NjYW5zOyAgICAgICAgICAgICAgICAvKiAjIG9mIGVudHJpZXMgaW4gc2Nhbl9pbmZvIGFycmF5ICovCiAgIGNvbnN0IGpwZWdfc2Nhbl9pbmZvICogc2Nhbl9pbmZvOyAvKiBzY3JpcHQgZm9yIG11bHRpLXNjYW4gZmlsZSwgb3IgTlVMTCAqLwogICAvKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiBzY2FuX2luZm8gaXMgTlVMTCwgd2hpY2ggY2F1c2VzIGEgc2luZ2xlLXNjYW4KICAgICogc2VxdWVudGlhbCBKUEVHIGZpbGUgdG8gYmUgZW1pdHRlZC4gIFRvIGNyZWF0ZSBhIG11bHRpLXNjYW4gZmlsZSwKICAgICogc2V0IG51bV9zY2FucyBhbmQgc2Nhbl9pbmZvIHRvIHBvaW50IHRvIGFuIGFycmF5IG9mIHNjYW4gZGVmaW5pdGlvbnMuCiAgICAqLwogCi0gIGJvb2xlYW4gcmF3X2RhdGFfaW47CQkvKiBUUlVFPWNhbGxlciBzdXBwbGllcyBkb3duc2FtcGxlZCBkYXRhICovCi0gIGJvb2xlYW4gYXJpdGhfY29kZTsJCS8qIFRSVUU9YXJpdGhtZXRpYyBjb2RpbmcsIEZBTFNFPUh1ZmZtYW4gKi8KLSAgYm9vbGVhbiBvcHRpbWl6ZV9jb2Rpbmc7CS8qIFRSVUU9b3B0aW1pemUgZW50cm9weSBlbmNvZGluZyBwYXJtcyAqLwotICBib29sZWFuIENDSVI2MDFfc2FtcGxpbmc7CS8qIFRSVUU9Zmlyc3Qgc2FtcGxlcyBhcmUgY29zaXRlZCAqLworICBib29sZWFuIHJhd19kYXRhX2luOyAgICAgICAgICAvKiBUUlVFPWNhbGxlciBzdXBwbGllcyBkb3duc2FtcGxlZCBkYXRhICovCisgIGJvb2xlYW4gYXJpdGhfY29kZTsgICAgICAgICAgIC8qIFRSVUU9YXJpdGhtZXRpYyBjb2RpbmcsIEZBTFNFPUh1ZmZtYW4gKi8KKyAgYm9vbGVhbiBvcHRpbWl6ZV9jb2Rpbmc7ICAgICAgLyogVFJVRT1vcHRpbWl6ZSBlbnRyb3B5IGVuY29kaW5nIHBhcm1zICovCisgIGJvb2xlYW4gQ0NJUjYwMV9zYW1wbGluZzsgICAgIC8qIFRSVUU9Zmlyc3Qgc2FtcGxlcyBhcmUgY29zaXRlZCAqLwogI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gNzAKICAgYm9vbGVhbiBkb19mYW5jeV9kb3duc2FtcGxpbmc7IC8qIFRSVUU9YXBwbHkgZmFuY3kgZG93bnNhbXBsaW5nICovCiAjZW5kaWYKLSAgaW50IHNtb290aGluZ19mYWN0b3I7CQkvKiAxLi4xMDAsIG9yIDAgZm9yIG5vIGlucHV0IHNtb290aGluZyAqLwotICBKX0RDVF9NRVRIT0QgZGN0X21ldGhvZDsJLyogRENUIGFsZ29yaXRobSBzZWxlY3RvciAqLworICBpbnQgc21vb3RoaW5nX2ZhY3RvcjsgICAgICAgICAvKiAxLi4xMDAsIG9yIDAgZm9yIG5vIGlucHV0IHNtb290aGluZyAqLworICBKX0RDVF9NRVRIT0QgZGN0X21ldGhvZDsgICAgICAvKiBEQ1QgYWxnb3JpdGhtIHNlbGVjdG9yICovCiAKICAgLyogVGhlIHJlc3RhcnQgaW50ZXJ2YWwgY2FuIGJlIHNwZWNpZmllZCBpbiBhYnNvbHV0ZSBNQ1VzIGJ5IHNldHRpbmcKICAgICogcmVzdGFydF9pbnRlcnZhbCwgb3IgaW4gTUNVIHJvd3MgYnkgc2V0dGluZyByZXN0YXJ0X2luX3Jvd3MKQEAgLTM4MCwyOCArMzc5LDI4IEBACiAgICAqIGZvciBlYWNoIHNjYW4pLgogICAgKi8KICAgdW5zaWduZWQgaW50IHJlc3RhcnRfaW50ZXJ2YWw7IC8qIE1DVXMgcGVyIHJlc3RhcnQsIG9yIDAgZm9yIG5vIHJlc3RhcnQgKi8KLSAgaW50IHJlc3RhcnRfaW5fcm93czsJCS8qIGlmID4gMCwgTUNVIHJvd3MgcGVyIHJlc3RhcnQgaW50ZXJ2YWwgKi8KKyAgaW50IHJlc3RhcnRfaW5fcm93czsgICAgICAgICAgLyogaWYgPiAwLCBNQ1Ugcm93cyBwZXIgcmVzdGFydCBpbnRlcnZhbCAqLwogCiAgIC8qIFBhcmFtZXRlcnMgY29udHJvbGxpbmcgZW1pc3Npb24gb2Ygc3BlY2lhbCBtYXJrZXJzLiAqLwogCi0gIGJvb2xlYW4gd3JpdGVfSkZJRl9oZWFkZXI7CS8qIHNob3VsZCBhIEpGSUYgbWFya2VyIGJlIHdyaXR0ZW4/ICovCi0gIFVJTlQ4IEpGSUZfbWFqb3JfdmVyc2lvbjsJLyogV2hhdCB0byB3cml0ZSBmb3IgdGhlIEpGSUYgdmVyc2lvbiBudW1iZXIgKi8KKyAgYm9vbGVhbiB3cml0ZV9KRklGX2hlYWRlcjsgICAgLyogc2hvdWxkIGEgSkZJRiBtYXJrZXIgYmUgd3JpdHRlbj8gKi8KKyAgVUlOVDggSkZJRl9tYWpvcl92ZXJzaW9uOyAgICAgLyogV2hhdCB0byB3cml0ZSBmb3IgdGhlIEpGSUYgdmVyc2lvbiBudW1iZXIgKi8KICAgVUlOVDggSkZJRl9taW5vcl92ZXJzaW9uOwogICAvKiBUaGVzZSB0aHJlZSB2YWx1ZXMgYXJlIG5vdCB1c2VkIGJ5IHRoZSBKUEVHIGNvZGUsIG1lcmVseSBjb3BpZWQgKi8KICAgLyogaW50byB0aGUgSkZJRiBBUFAwIG1hcmtlci4gIGRlbnNpdHlfdW5pdCBjYW4gYmUgMCBmb3IgdW5rbm93biwgKi8KICAgLyogMSBmb3IgZG90cy9pbmNoLCBvciAyIGZvciBkb3RzL2NtLiAgTm90ZSB0aGF0IHRoZSBwaXhlbCBhc3BlY3QgKi8KICAgLyogcmF0aW8gaXMgZGVmaW5lZCBieSBYX2RlbnNpdHkvWV9kZW5zaXR5IGV2ZW4gd2hlbiBkZW5zaXR5X3VuaXQ9MC4gKi8KLSAgVUlOVDggZGVuc2l0eV91bml0OwkJLyogSkZJRiBjb2RlIGZvciBwaXhlbCBzaXplIHVuaXRzICovCi0gIFVJTlQxNiBYX2RlbnNpdHk7CQkvKiBIb3Jpem9udGFsIHBpeGVsIGRlbnNpdHkgKi8KLSAgVUlOVDE2IFlfZGVuc2l0eTsJCS8qIFZlcnRpY2FsIHBpeGVsIGRlbnNpdHkgKi8KLSAgYm9vbGVhbiB3cml0ZV9BZG9iZV9tYXJrZXI7CS8qIHNob3VsZCBhbiBBZG9iZSBtYXJrZXIgYmUgd3JpdHRlbj8gKi8KLSAgCisgIFVJTlQ4IGRlbnNpdHlfdW5pdDsgICAgICAgICAgIC8qIEpGSUYgY29kZSBmb3IgcGl4ZWwgc2l6ZSB1bml0cyAqLworICBVSU5UMTYgWF9kZW5zaXR5OyAgICAgICAgICAgICAvKiBIb3Jpem9udGFsIHBpeGVsIGRlbnNpdHkgKi8KKyAgVUlOVDE2IFlfZGVuc2l0eTsgICAgICAgICAgICAgLyogVmVydGljYWwgcGl4ZWwgZGVuc2l0eSAqLworICBib29sZWFuIHdyaXRlX0Fkb2JlX21hcmtlcjsgICAvKiBzaG91bGQgYW4gQWRvYmUgbWFya2VyIGJlIHdyaXR0ZW4/ICovCisKICAgLyogU3RhdGUgdmFyaWFibGU6IGluZGV4IG9mIG5leHQgc2NhbmxpbmUgdG8gYmUgd3JpdHRlbiB0bwogICAgKiBqcGVnX3dyaXRlX3NjYW5saW5lcygpLiAgQXBwbGljYXRpb24gbWF5IHVzZSB0aGlzIHRvIGNvbnRyb2wgaXRzCiAgICAqIHByb2Nlc3NpbmcgbG9vcCwgZS5nLiwgIndoaWxlIChuZXh0X3NjYW5saW5lIDwgaW1hZ2VfaGVpZ2h0KSIuCiAgICAqLwogCi0gIEpESU1FTlNJT04gbmV4dF9zY2FubGluZTsJLyogMCAuLiBpbWFnZV9oZWlnaHQtMSAgKi8KKyAgSkRJTUVOU0lPTiBuZXh0X3NjYW5saW5lOyAgICAgLyogMCAuLiBpbWFnZV9oZWlnaHQtMSAgKi8KIAogICAvKiBSZW1haW5pbmcgZmllbGRzIGFyZSBrbm93biB0aHJvdWdob3V0IGNvbXByZXNzb3IsIGJ1dCBnZW5lcmFsbHkKICAgICogc2hvdWxkIG5vdCBiZSB0b3VjaGVkIGJ5IGEgc3Vycm91bmRpbmcgYXBwbGljYXRpb24uCkBAIC00MTAsNDQgKzQwOSw0NCBAQAogICAvKgogICAgKiBUaGVzZSBmaWVsZHMgYXJlIGNvbXB1dGVkIGR1cmluZyBjb21wcmVzc2lvbiBzdGFydHVwCiAgICAqLwotICBib29sZWFuIHByb2dyZXNzaXZlX21vZGU7CS8qIFRSVUUgaWYgc2NhbiBzY3JpcHQgdXNlcyBwcm9ncmVzc2l2ZSBtb2RlICovCi0gIGludCBtYXhfaF9zYW1wX2ZhY3RvcjsJLyogbGFyZ2VzdCBoX3NhbXBfZmFjdG9yICovCi0gIGludCBtYXhfdl9zYW1wX2ZhY3RvcjsJLyogbGFyZ2VzdCB2X3NhbXBfZmFjdG9yICovCisgIGJvb2xlYW4gcHJvZ3Jlc3NpdmVfbW9kZTsgICAgIC8qIFRSVUUgaWYgc2NhbiBzY3JpcHQgdXNlcyBwcm9ncmVzc2l2ZSBtb2RlICovCisgIGludCBtYXhfaF9zYW1wX2ZhY3RvcjsgICAgICAgIC8qIGxhcmdlc3QgaF9zYW1wX2ZhY3RvciAqLworICBpbnQgbWF4X3Zfc2FtcF9mYWN0b3I7ICAgICAgICAvKiBsYXJnZXN0IHZfc2FtcF9mYWN0b3IgKi8KIAogI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gNzAKLSAgaW50IG1pbl9EQ1RfaF9zY2FsZWRfc2l6ZTsJLyogc21hbGxlc3QgRENUX2hfc2NhbGVkX3NpemUgb2YgYW55IGNvbXBvbmVudCAqLwotICBpbnQgbWluX0RDVF92X3NjYWxlZF9zaXplOwkvKiBzbWFsbGVzdCBEQ1Rfdl9zY2FsZWRfc2l6ZSBvZiBhbnkgY29tcG9uZW50ICovCisgIGludCBtaW5fRENUX2hfc2NhbGVkX3NpemU7ICAgIC8qIHNtYWxsZXN0IERDVF9oX3NjYWxlZF9zaXplIG9mIGFueSBjb21wb25lbnQgKi8KKyAgaW50IG1pbl9EQ1Rfdl9zY2FsZWRfc2l6ZTsgICAgLyogc21hbGxlc3QgRENUX3Zfc2NhbGVkX3NpemUgb2YgYW55IGNvbXBvbmVudCAqLwogI2VuZGlmCiAKLSAgSkRJTUVOU0lPTiB0b3RhbF9pTUNVX3Jvd3M7CS8qICMgb2YgaU1DVSByb3dzIHRvIGJlIGlucHV0IHRvIGNvZWYgY3RsciAqLworICBKRElNRU5TSU9OIHRvdGFsX2lNQ1Vfcm93czsgICAvKiAjIG9mIGlNQ1Ugcm93cyB0byBiZSBpbnB1dCB0byBjb2VmIGN0bHIgKi8KICAgLyogVGhlIGNvZWZmaWNpZW50IGNvbnRyb2xsZXIgcmVjZWl2ZXMgZGF0YSBpbiB1bml0cyBvZiBNQ1Ugcm93cyBhcyBkZWZpbmVkCiAgICAqIGZvciBmdWxseSBpbnRlcmxlYXZlZCBzY2FucyAod2hldGhlciB0aGUgSlBFRyBmaWxlIGlzIGludGVybGVhdmVkIG9yIG5vdCkuCiAgICAqIFRoZXJlIGFyZSB2X3NhbXBfZmFjdG9yICogRENUU0laRSBzYW1wbGUgcm93cyBvZiBlYWNoIGNvbXBvbmVudCBpbiBhbgogICAgKiAiaU1DVSIgKGludGVybGVhdmVkIE1DVSkgcm93LgogICAgKi8KLSAgCisKICAgLyoKICAgICogVGhlc2UgZmllbGRzIGFyZSB2YWxpZCBkdXJpbmcgYW55IG9uZSBzY2FuLgogICAgKiBUaGV5IGRlc2NyaWJlIHRoZSBjb21wb25lbnRzIGFuZCBNQ1VzIGFjdHVhbGx5IGFwcGVhcmluZyBpbiB0aGUgc2Nhbi4KICAgICovCi0gIGludCBjb21wc19pbl9zY2FuOwkJLyogIyBvZiBKUEVHIGNvbXBvbmVudHMgaW4gdGhpcyBzY2FuICovCisgIGludCBjb21wc19pbl9zY2FuOyAgICAgICAgICAgIC8qICMgb2YgSlBFRyBjb21wb25lbnRzIGluIHRoaXMgc2NhbiAqLwogICBqcGVnX2NvbXBvbmVudF9pbmZvICogY3VyX2NvbXBfaW5mb1tNQVhfQ09NUFNfSU5fU0NBTl07CiAgIC8qICpjdXJfY29tcF9pbmZvW2ldIGRlc2NyaWJlcyBjb21wb25lbnQgdGhhdCBhcHBlYXJzIGkndGggaW4gU09TICovCi0gIAotICBKRElNRU5TSU9OIE1DVXNfcGVyX3JvdzsJLyogIyBvZiBNQ1VzIGFjcm9zcyB0aGUgaW1hZ2UgKi8KLSAgSkRJTUVOU0lPTiBNQ1Vfcm93c19pbl9zY2FuOwkvKiAjIG9mIE1DVSByb3dzIGluIHRoZSBpbWFnZSAqLwotICAKLSAgaW50IGJsb2Nrc19pbl9NQ1U7CQkvKiAjIG9mIERDVCBibG9ja3MgcGVyIE1DVSAqLworCisgIEpESU1FTlNJT04gTUNVc19wZXJfcm93OyAgICAgIC8qICMgb2YgTUNVcyBhY3Jvc3MgdGhlIGltYWdlICovCisgIEpESU1FTlNJT04gTUNVX3Jvd3NfaW5fc2NhbjsgIC8qICMgb2YgTUNVIHJvd3MgaW4gdGhlIGltYWdlICovCisKKyAgaW50IGJsb2Nrc19pbl9NQ1U7ICAgICAgICAgICAgLyogIyBvZiBEQ1QgYmxvY2tzIHBlciBNQ1UgKi8KICAgaW50IE1DVV9tZW1iZXJzaGlwW0NfTUFYX0JMT0NLU19JTl9NQ1VdOwogICAvKiBNQ1VfbWVtYmVyc2hpcFtpXSBpcyBpbmRleCBpbiBjdXJfY29tcF9pbmZvIG9mIGNvbXBvbmVudCBvd25pbmcgKi8KICAgLyogaSd0aCBibG9jayBpbiBhbiBNQ1UgKi8KIAotICBpbnQgU3MsIFNlLCBBaCwgQWw7CQkvKiBwcm9ncmVzc2l2ZSBKUEVHIHBhcmFtZXRlcnMgZm9yIHNjYW4gKi8KKyAgaW50IFNzLCBTZSwgQWgsIEFsOyAgICAgICAgICAgLyogcHJvZ3Jlc3NpdmUgSlBFRyBwYXJhbWV0ZXJzIGZvciBzY2FuICovCiAKICNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDgwCi0gIGludCBibG9ja19zaXplOwkJLyogdGhlIGJhc2ljIERDVCBibG9jayBzaXplOiAxLi4xNiAqLwotICBjb25zdCBpbnQgKiBuYXR1cmFsX29yZGVyOwkvKiBuYXR1cmFsLW9yZGVyIHBvc2l0aW9uIGFycmF5ICovCi0gIGludCBsaW1fU2U7CQkJLyogbWluKCBTZSwgRENUU0laRTItMSApICovCisgIGludCBibG9ja19zaXplOyAgICAgICAgICAgICAgIC8qIHRoZSBiYXNpYyBEQ1QgYmxvY2sgc2l6ZTogMS4uMTYgKi8KKyAgY29uc3QgaW50ICogbmF0dXJhbF9vcmRlcjsgICAgLyogbmF0dXJhbC1vcmRlciBwb3NpdGlvbiBhcnJheSAqLworICBpbnQgbGltX1NlOyAgICAgICAgICAgICAgICAgICAvKiBtaW4oIFNlLCBEQ1RTSVpFMi0xICkgKi8KICNlbmRpZgogCiAgIC8qCkBAIC00NzAsNyArNDY5LDcgQEAKIC8qIE1hc3RlciByZWNvcmQgZm9yIGEgZGVjb21wcmVzc2lvbiBpbnN0YW5jZSAqLwogCiBzdHJ1Y3QganBlZ19kZWNvbXByZXNzX3N0cnVjdCB7Ci0gIGpwZWdfY29tbW9uX2ZpZWxkczsJCS8qIEZpZWxkcyBzaGFyZWQgd2l0aCBqcGVnX2NvbXByZXNzX3N0cnVjdCAqLworICBqcGVnX2NvbW1vbl9maWVsZHM7ICAgICAgICAgICAvKiBGaWVsZHMgc2hhcmVkIHdpdGgganBlZ19jb21wcmVzc19zdHJ1Y3QgKi8KIAogICAvKiBTb3VyY2Ugb2YgY29tcHJlc3NlZCBkYXRhICovCiAgIHN0cnVjdCBqcGVnX3NvdXJjZV9tZ3IgKiBzcmM7CkBAIC00NzgsOSArNDc3LDkgQEAKICAgLyogQmFzaWMgZGVzY3JpcHRpb24gb2YgaW1hZ2UgLS0tIGZpbGxlZCBpbiBieSBqcGVnX3JlYWRfaGVhZGVyKCkuICovCiAgIC8qIEFwcGxpY2F0aW9uIG1heSBpbnNwZWN0IHRoZXNlIHZhbHVlcyB0byBkZWNpZGUgaG93IHRvIHByb2Nlc3MgaW1hZ2UuICovCiAKLSAgSkRJTUVOU0lPTiBpbWFnZV93aWR0aDsJLyogbm9taW5hbCBpbWFnZSB3aWR0aCAoZnJvbSBTT0YgbWFya2VyKSAqLwotICBKRElNRU5TSU9OIGltYWdlX2hlaWdodDsJLyogbm9taW5hbCBpbWFnZSBoZWlnaHQgKi8KLSAgaW50IG51bV9jb21wb25lbnRzOwkJLyogIyBvZiBjb2xvciBjb21wb25lbnRzIGluIEpQRUcgaW1hZ2UgKi8KKyAgSkRJTUVOU0lPTiBpbWFnZV93aWR0aDsgICAgICAgLyogbm9taW5hbCBpbWFnZSB3aWR0aCAoZnJvbSBTT0YgbWFya2VyKSAqLworICBKRElNRU5TSU9OIGltYWdlX2hlaWdodDsgICAgICAvKiBub21pbmFsIGltYWdlIGhlaWdodCAqLworICBpbnQgbnVtX2NvbXBvbmVudHM7ICAgICAgICAgICAvKiAjIG9mIGNvbG9yIGNvbXBvbmVudHMgaW4gSlBFRyBpbWFnZSAqLwogICBKX0NPTE9SX1NQQUNFIGpwZWdfY29sb3Jfc3BhY2U7IC8qIGNvbG9yc3BhY2Ugb2YgSlBFRyBpbWFnZSAqLwogCiAgIC8qIERlY29tcHJlc3Npb24gcHJvY2Vzc2luZyBwYXJhbWV0ZXJzIC0tLSB0aGVzZSBmaWVsZHMgbXVzdCBiZSBzZXQgYmVmb3JlCkBAIC00OTIsMjQgKzQ5MSwyNCBAQAogCiAgIHVuc2lnbmVkIGludCBzY2FsZV9udW0sIHNjYWxlX2Rlbm9tOyAvKiBmcmFjdGlvbiBieSB3aGljaCB0byBzY2FsZSBpbWFnZSAqLwogCi0gIGRvdWJsZSBvdXRwdXRfZ2FtbWE7CQkvKiBpbWFnZSBnYW1tYSB3YW50ZWQgaW4gb3V0cHV0ICovCisgIGRvdWJsZSBvdXRwdXRfZ2FtbWE7ICAgICAgICAgIC8qIGltYWdlIGdhbW1hIHdhbnRlZCBpbiBvdXRwdXQgKi8KIAotICBib29sZWFuIGJ1ZmZlcmVkX2ltYWdlOwkvKiBUUlVFPW11bHRpcGxlIG91dHB1dCBwYXNzZXMgKi8KLSAgYm9vbGVhbiByYXdfZGF0YV9vdXQ7CQkvKiBUUlVFPWRvd25zYW1wbGVkIGRhdGEgd2FudGVkICovCisgIGJvb2xlYW4gYnVmZmVyZWRfaW1hZ2U7ICAgICAgIC8qIFRSVUU9bXVsdGlwbGUgb3V0cHV0IHBhc3NlcyAqLworICBib29sZWFuIHJhd19kYXRhX291dDsgICAgICAgICAvKiBUUlVFPWRvd25zYW1wbGVkIGRhdGEgd2FudGVkICovCiAKLSAgSl9EQ1RfTUVUSE9EIGRjdF9tZXRob2Q7CS8qIElEQ1QgYWxnb3JpdGhtIHNlbGVjdG9yICovCi0gIGJvb2xlYW4gZG9fZmFuY3lfdXBzYW1wbGluZzsJLyogVFJVRT1hcHBseSBmYW5jeSB1cHNhbXBsaW5nICovCi0gIGJvb2xlYW4gZG9fYmxvY2tfc21vb3RoaW5nOwkvKiBUUlVFPWFwcGx5IGludGVyYmxvY2sgc21vb3RoaW5nICovCisgIEpfRENUX01FVEhPRCBkY3RfbWV0aG9kOyAgICAgIC8qIElEQ1QgYWxnb3JpdGhtIHNlbGVjdG9yICovCisgIGJvb2xlYW4gZG9fZmFuY3lfdXBzYW1wbGluZzsgIC8qIFRSVUU9YXBwbHkgZmFuY3kgdXBzYW1wbGluZyAqLworICBib29sZWFuIGRvX2Jsb2NrX3Ntb290aGluZzsgICAvKiBUUlVFPWFwcGx5IGludGVyYmxvY2sgc21vb3RoaW5nICovCiAKLSAgYm9vbGVhbiBxdWFudGl6ZV9jb2xvcnM7CS8qIFRSVUU9Y29sb3JtYXBwZWQgb3V0cHV0IHdhbnRlZCAqLworICBib29sZWFuIHF1YW50aXplX2NvbG9yczsgICAgICAvKiBUUlVFPWNvbG9ybWFwcGVkIG91dHB1dCB3YW50ZWQgKi8KICAgLyogdGhlIGZvbGxvd2luZyBhcmUgaWdub3JlZCBpZiBub3QgcXVhbnRpemVfY29sb3JzOiAqLwotICBKX0RJVEhFUl9NT0RFIGRpdGhlcl9tb2RlOwkvKiB0eXBlIG9mIGNvbG9yIGRpdGhlcmluZyB0byB1c2UgKi8KLSAgYm9vbGVhbiB0d29fcGFzc19xdWFudGl6ZTsJLyogVFJVRT11c2UgdHdvLXBhc3MgY29sb3IgcXVhbnRpemF0aW9uICovCi0gIGludCBkZXNpcmVkX251bWJlcl9vZl9jb2xvcnM7CS8qIG1heCAjIGNvbG9ycyB0byB1c2UgaW4gY3JlYXRlZCBjb2xvcm1hcCAqLworICBKX0RJVEhFUl9NT0RFIGRpdGhlcl9tb2RlOyAgICAvKiB0eXBlIG9mIGNvbG9yIGRpdGhlcmluZyB0byB1c2UgKi8KKyAgYm9vbGVhbiB0d29fcGFzc19xdWFudGl6ZTsgICAgLyogVFJVRT11c2UgdHdvLXBhc3MgY29sb3IgcXVhbnRpemF0aW9uICovCisgIGludCBkZXNpcmVkX251bWJlcl9vZl9jb2xvcnM7IC8qIG1heCAjIGNvbG9ycyB0byB1c2UgaW4gY3JlYXRlZCBjb2xvcm1hcCAqLwogICAvKiB0aGVzZSBhcmUgc2lnbmlmaWNhbnQgb25seSBpbiBidWZmZXJlZC1pbWFnZSBtb2RlOiAqLwotICBib29sZWFuIGVuYWJsZV8xcGFzc19xdWFudDsJLyogZW5hYmxlIGZ1dHVyZSB1c2Ugb2YgMS1wYXNzIHF1YW50aXplciAqLworICBib29sZWFuIGVuYWJsZV8xcGFzc19xdWFudDsgICAvKiBlbmFibGUgZnV0dXJlIHVzZSBvZiAxLXBhc3MgcXVhbnRpemVyICovCiAgIGJvb2xlYW4gZW5hYmxlX2V4dGVybmFsX3F1YW50Oy8qIGVuYWJsZSBmdXR1cmUgdXNlIG9mIGV4dGVybmFsIGNvbG9ybWFwICovCi0gIGJvb2xlYW4gZW5hYmxlXzJwYXNzX3F1YW50OwkvKiBlbmFibGUgZnV0dXJlIHVzZSBvZiAyLXBhc3MgcXVhbnRpemVyICovCisgIGJvb2xlYW4gZW5hYmxlXzJwYXNzX3F1YW50OyAgIC8qIGVuYWJsZSBmdXR1cmUgdXNlIG9mIDItcGFzcyBxdWFudGl6ZXIgKi8KIAogICAvKiBEZXNjcmlwdGlvbiBvZiBhY3R1YWwgb3V0cHV0IGltYWdlIHRoYXQgd2lsbCBiZSByZXR1cm5lZCB0byBhcHBsaWNhdGlvbi4KICAgICogVGhlc2UgZmllbGRzIGFyZSBjb21wdXRlZCBieSBqcGVnX3N0YXJ0X2RlY29tcHJlc3MoKS4KQEAgLTUxNywxNCArNTE2LDE0IEBACiAgICAqIGluIGFkdmFuY2Ugb2YgY2FsbGluZyBqcGVnX3N0YXJ0X2RlY29tcHJlc3MoKS4KICAgICovCiAKLSAgSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGg7CS8qIHNjYWxlZCBpbWFnZSB3aWR0aCAqLwotICBKRElNRU5TSU9OIG91dHB1dF9oZWlnaHQ7CS8qIHNjYWxlZCBpbWFnZSBoZWlnaHQgKi8KLSAgaW50IG91dF9jb2xvcl9jb21wb25lbnRzOwkvKiAjIG9mIGNvbG9yIGNvbXBvbmVudHMgaW4gb3V0X2NvbG9yX3NwYWNlICovCi0gIGludCBvdXRwdXRfY29tcG9uZW50czsJLyogIyBvZiBjb2xvciBjb21wb25lbnRzIHJldHVybmVkICovCisgIEpESU1FTlNJT04gb3V0cHV0X3dpZHRoOyAgICAgIC8qIHNjYWxlZCBpbWFnZSB3aWR0aCAqLworICBKRElNRU5TSU9OIG91dHB1dF9oZWlnaHQ7ICAgICAvKiBzY2FsZWQgaW1hZ2UgaGVpZ2h0ICovCisgIGludCBvdXRfY29sb3JfY29tcG9uZW50czsgICAgIC8qICMgb2YgY29sb3IgY29tcG9uZW50cyBpbiBvdXRfY29sb3Jfc3BhY2UgKi8KKyAgaW50IG91dHB1dF9jb21wb25lbnRzOyAgICAgICAgLyogIyBvZiBjb2xvciBjb21wb25lbnRzIHJldHVybmVkICovCiAgIC8qIG91dHB1dF9jb21wb25lbnRzIGlzIDEgKGEgY29sb3JtYXAgaW5kZXgpIHdoZW4gcXVhbnRpemluZyBjb2xvcnM7CiAgICAqIG90aGVyd2lzZSBpdCBlcXVhbHMgb3V0X2NvbG9yX2NvbXBvbmVudHMuCiAgICAqLwotICBpbnQgcmVjX291dGJ1Zl9oZWlnaHQ7CS8qIG1pbiByZWNvbW1lbmRlZCBoZWlnaHQgb2Ygc2NhbmxpbmUgYnVmZmVyICovCisgIGludCByZWNfb3V0YnVmX2hlaWdodDsgICAgICAgIC8qIG1pbiByZWNvbW1lbmRlZCBoZWlnaHQgb2Ygc2NhbmxpbmUgYnVmZmVyICovCiAgIC8qIElmIHRoZSBidWZmZXIgcGFzc2VkIHRvIGpwZWdfcmVhZF9zY2FubGluZXMoKSBpcyBsZXNzIHRoYW4gdGhpcyBtYW55IHJvd3MKICAgICogaGlnaCwgc3BhY2UgYW5kIHRpbWUgd2lsbCBiZSB3YXN0ZWQgZHVlIHRvIHVubmVjZXNzYXJ5IGRhdGEgY29weWluZy4KICAgICogVXN1YWxseSByZWNfb3V0YnVmX2hlaWdodCB3aWxsIGJlIDEgb3IgMiwgYXQgbW9zdCA0LgpAQCAtNTM2LDggKzUzNSw4IEBACiAgICAqIGpwZWdfc3RhcnRfZGVjb21wcmVzcyBvciBqcGVnX3N0YXJ0X291dHB1dC4KICAgICogVGhlIG1hcCBoYXMgb3V0X2NvbG9yX2NvbXBvbmVudHMgcm93cyBhbmQgYWN0dWFsX251bWJlcl9vZl9jb2xvcnMgY29sdW1ucy4KICAgICovCi0gIGludCBhY3R1YWxfbnVtYmVyX29mX2NvbG9yczsJLyogbnVtYmVyIG9mIGVudHJpZXMgaW4gdXNlICovCi0gIEpTQU1QQVJSQVkgY29sb3JtYXA7CQkvKiBUaGUgY29sb3IgbWFwIGFzIGEgMi1EIHBpeGVsIGFycmF5ICovCisgIGludCBhY3R1YWxfbnVtYmVyX29mX2NvbG9yczsgIC8qIG51bWJlciBvZiBlbnRyaWVzIGluIHVzZSAqLworICBKU0FNUEFSUkFZIGNvbG9ybWFwOyAgICAgICAgICAvKiBUaGUgY29sb3IgbWFwIGFzIGEgMi1EIHBpeGVsIGFycmF5ICovCiAKICAgLyogU3RhdGUgdmFyaWFibGVzOiB0aGVzZSB2YXJpYWJsZXMgaW5kaWNhdGUgdGhlIHByb2dyZXNzIG9mIGRlY29tcHJlc3Npb24uCiAgICAqIFRoZSBhcHBsaWNhdGlvbiBtYXkgZXhhbWluZSB0aGVzZSBidXQgbXVzdCBub3QgbW9kaWZ5IHRoZW0uCkBAIC01NDcsMjAgKzU0NiwyMCBAQAogICAgKiBBcHBsaWNhdGlvbiBtYXkgdXNlIHRoaXMgdG8gY29udHJvbCBpdHMgcHJvY2Vzc2luZyBsb29wLCBlLmcuLAogICAgKiAid2hpbGUgKG91dHB1dF9zY2FubGluZSA8IG91dHB1dF9oZWlnaHQpIi4KICAgICovCi0gIEpESU1FTlNJT04gb3V0cHV0X3NjYW5saW5lOwkvKiAwIC4uIG91dHB1dF9oZWlnaHQtMSAgKi8KKyAgSkRJTUVOU0lPTiBvdXRwdXRfc2NhbmxpbmU7ICAgLyogMCAuLiBvdXRwdXRfaGVpZ2h0LTEgICovCiAKICAgLyogQ3VycmVudCBpbnB1dCBzY2FuIG51bWJlciBhbmQgbnVtYmVyIG9mIGlNQ1Ugcm93cyBjb21wbGV0ZWQgaW4gc2Nhbi4KICAgICogVGhlc2UgaW5kaWNhdGUgdGhlIHByb2dyZXNzIG9mIHRoZSBkZWNvbXByZXNzb3IgaW5wdXQgc2lkZS4KICAgICovCi0gIGludCBpbnB1dF9zY2FuX251bWJlcjsJLyogTnVtYmVyIG9mIFNPUyBtYXJrZXJzIHNlZW4gc28gZmFyICovCi0gIEpESU1FTlNJT04gaW5wdXRfaU1DVV9yb3c7CS8qIE51bWJlciBvZiBpTUNVIHJvd3MgY29tcGxldGVkICovCisgIGludCBpbnB1dF9zY2FuX251bWJlcjsgICAgICAgIC8qIE51bWJlciBvZiBTT1MgbWFya2VycyBzZWVuIHNvIGZhciAqLworICBKRElNRU5TSU9OIGlucHV0X2lNQ1Vfcm93OyAgICAvKiBOdW1iZXIgb2YgaU1DVSByb3dzIGNvbXBsZXRlZCAqLwogCiAgIC8qIFRoZSAib3V0cHV0IHNjYW4gbnVtYmVyIiBpcyB0aGUgbm90aW9uYWwgc2NhbiBiZWluZyBkaXNwbGF5ZWQgYnkgdGhlCiAgICAqIG91dHB1dCBzaWRlLiAgVGhlIGRlY29tcHJlc3NvciB3aWxsIG5vdCBhbGxvdyBvdXRwdXQgc2Nhbi9yb3cgbnVtYmVyCiAgICAqIHRvIGdldCBhaGVhZCBvZiBpbnB1dCBzY2FuL3JvdywgYnV0IGl0IGNhbiBmYWxsIGFyYml0cmFyaWx5IGZhciBiZWhpbmQuCiAgICAqLwotICBpbnQgb3V0cHV0X3NjYW5fbnVtYmVyOwkvKiBOb21pbmFsIHNjYW4gbnVtYmVyIGJlaW5nIGRpc3BsYXllZCAqLwotICBKRElNRU5TSU9OIG91dHB1dF9pTUNVX3JvdzsJLyogTnVtYmVyIG9mIGlNQ1Ugcm93cyByZWFkICovCisgIGludCBvdXRwdXRfc2Nhbl9udW1iZXI7ICAgICAgIC8qIE5vbWluYWwgc2NhbiBudW1iZXIgYmVpbmcgZGlzcGxheWVkICovCisgIEpESU1FTlNJT04gb3V0cHV0X2lNQ1Vfcm93OyAgIC8qIE51bWJlciBvZiBpTUNVIHJvd3MgcmVhZCAqLwogCiAgIC8qIEN1cnJlbnQgcHJvZ3Jlc3Npb24gc3RhdHVzLiAgY29lZl9iaXRzW2NdW2ldIGluZGljYXRlcyB0aGUgcHJlY2lzaW9uCiAgICAqIHdpdGggd2hpY2ggY29tcG9uZW50IGMncyBEQ1QgY29lZmZpY2llbnQgaSAoaW4gemlnemFnIG9yZGVyKSBpcyBrbm93bi4KQEAgLTU2OSw3ICs1NjgsNyBAQAogICAgKiAodGh1cywgMCBhdCBjb21wbGV0aW9uIG9mIHRoZSBwcm9ncmVzc2lvbikuCiAgICAqIFRoaXMgcG9pbnRlciBpcyBOVUxMIHdoZW4gcmVhZGluZyBhIG5vbi1wcm9ncmVzc2l2ZSBmaWxlLgogICAgKi8KLSAgaW50ICgqY29lZl9iaXRzKVtEQ1RTSVpFMl07CS8qIC0xIG9yIGN1cnJlbnQgQWwgdmFsdWUgZm9yIGVhY2ggY29lZiAqLworICBpbnQgKCpjb2VmX2JpdHMpW0RDVFNJWkUyXTsgICAvKiAtMSBvciBjdXJyZW50IEFsIHZhbHVlIGZvciBlYWNoIGNvZWYgKi8KIAogICAvKiBJbnRlcm5hbCBKUEVHIHBhcmFtZXRlcnMgLS0tIHRoZSBhcHBsaWNhdGlvbiB1c3VhbGx5IG5lZWQgbm90IGxvb2sgYXQKICAgICogdGhlc2UgZmllbGRzLiAgTm90ZSB0aGF0IHRoZSBkZWNvbXByZXNzb3Igb3V0cHV0IHNpZGUgbWF5IG5vdCB1c2UKQEAgLTU5MSwxNiArNTkwLDE2IEBACiAgICAqIGFyZSBnaXZlbiBpbiBTT0YvU09TIG1hcmtlcnMgb3IgZGVmaW5lZCB0byBiZSByZXNldCBieSBTT0kuCiAgICAqLwogCi0gIGludCBkYXRhX3ByZWNpc2lvbjsJCS8qIGJpdHMgb2YgcHJlY2lzaW9uIGluIGltYWdlIGRhdGEgKi8KKyAgaW50IGRhdGFfcHJlY2lzaW9uOyAgICAgICAgICAgLyogYml0cyBvZiBwcmVjaXNpb24gaW4gaW1hZ2UgZGF0YSAqLwogCiAgIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wX2luZm87CiAgIC8qIGNvbXBfaW5mb1tpXSBkZXNjcmliZXMgY29tcG9uZW50IHRoYXQgYXBwZWFycyBpJ3RoIGluIFNPRiAqLwogCiAjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA4MAotICBib29sZWFuIGlzX2Jhc2VsaW5lOwkJLyogVFJVRSBpZiBCYXNlbGluZSBTT0YwIGVuY291bnRlcmVkICovCisgIGJvb2xlYW4gaXNfYmFzZWxpbmU7ICAgICAgICAgIC8qIFRSVUUgaWYgQmFzZWxpbmUgU09GMCBlbmNvdW50ZXJlZCAqLwogI2VuZGlmCi0gIGJvb2xlYW4gcHJvZ3Jlc3NpdmVfbW9kZTsJLyogVFJVRSBpZiBTT0ZuIHNwZWNpZmllcyBwcm9ncmVzc2l2ZSBtb2RlICovCi0gIGJvb2xlYW4gYXJpdGhfY29kZTsJCS8qIFRSVUU9YXJpdGhtZXRpYyBjb2RpbmcsIEZBTFNFPUh1ZmZtYW4gKi8KKyAgYm9vbGVhbiBwcm9ncmVzc2l2ZV9tb2RlOyAgICAgLyogVFJVRSBpZiBTT0ZuIHNwZWNpZmllcyBwcm9ncmVzc2l2ZSBtb2RlICovCisgIGJvb2xlYW4gYXJpdGhfY29kZTsgICAgICAgICAgIC8qIFRSVUU9YXJpdGhtZXRpYyBjb2RpbmcsIEZBTFNFPUh1ZmZtYW4gKi8KIAogICBVSU5UOCBhcml0aF9kY19MW05VTV9BUklUSF9UQkxTXTsgLyogTCB2YWx1ZXMgZm9yIERDIGFyaXRoLWNvZGluZyB0YWJsZXMgKi8KICAgVUlOVDggYXJpdGhfZGNfVVtOVU1fQVJJVEhfVEJMU107IC8qIFUgdmFsdWVzIGZvciBEQyBhcml0aC1jb2RpbmcgdGFibGVzICovCkBAIC02MTEsMTcgKzYxMCwxNyBAQAogICAvKiBUaGVzZSBmaWVsZHMgcmVjb3JkIGRhdGEgb2J0YWluZWQgZnJvbSBvcHRpb25hbCBtYXJrZXJzIHJlY29nbml6ZWQgYnkKICAgICogdGhlIEpQRUcgbGlicmFyeS4KICAgICovCi0gIGJvb2xlYW4gc2F3X0pGSUZfbWFya2VyOwkvKiBUUlVFIGlmZiBhIEpGSUYgQVBQMCBtYXJrZXIgd2FzIGZvdW5kICovCisgIGJvb2xlYW4gc2F3X0pGSUZfbWFya2VyOyAgICAgIC8qIFRSVUUgaWZmIGEgSkZJRiBBUFAwIG1hcmtlciB3YXMgZm91bmQgKi8KICAgLyogRGF0YSBjb3BpZWQgZnJvbSBKRklGIG1hcmtlcjsgb25seSB2YWxpZCBpZiBzYXdfSkZJRl9tYXJrZXIgaXMgVFJVRTogKi8KLSAgVUlOVDggSkZJRl9tYWpvcl92ZXJzaW9uOwkvKiBKRklGIHZlcnNpb24gbnVtYmVyICovCisgIFVJTlQ4IEpGSUZfbWFqb3JfdmVyc2lvbjsgICAgIC8qIEpGSUYgdmVyc2lvbiBudW1iZXIgKi8KICAgVUlOVDggSkZJRl9taW5vcl92ZXJzaW9uOwotICBVSU5UOCBkZW5zaXR5X3VuaXQ7CQkvKiBKRklGIGNvZGUgZm9yIHBpeGVsIHNpemUgdW5pdHMgKi8KLSAgVUlOVDE2IFhfZGVuc2l0eTsJCS8qIEhvcml6b250YWwgcGl4ZWwgZGVuc2l0eSAqLwotICBVSU5UMTYgWV9kZW5zaXR5OwkJLyogVmVydGljYWwgcGl4ZWwgZGVuc2l0eSAqLwotICBib29sZWFuIHNhd19BZG9iZV9tYXJrZXI7CS8qIFRSVUUgaWZmIGFuIEFkb2JlIEFQUDE0IG1hcmtlciB3YXMgZm91bmQgKi8KLSAgVUlOVDggQWRvYmVfdHJhbnNmb3JtOwkvKiBDb2xvciB0cmFuc2Zvcm0gY29kZSBmcm9tIEFkb2JlIG1hcmtlciAqLworICBVSU5UOCBkZW5zaXR5X3VuaXQ7ICAgICAgICAgICAvKiBKRklGIGNvZGUgZm9yIHBpeGVsIHNpemUgdW5pdHMgKi8KKyAgVUlOVDE2IFhfZGVuc2l0eTsgICAgICAgICAgICAgLyogSG9yaXpvbnRhbCBwaXhlbCBkZW5zaXR5ICovCisgIFVJTlQxNiBZX2RlbnNpdHk7ICAgICAgICAgICAgIC8qIFZlcnRpY2FsIHBpeGVsIGRlbnNpdHkgKi8KKyAgYm9vbGVhbiBzYXdfQWRvYmVfbWFya2VyOyAgICAgLyogVFJVRSBpZmYgYW4gQWRvYmUgQVBQMTQgbWFya2VyIHdhcyBmb3VuZCAqLworICBVSU5UOCBBZG9iZV90cmFuc2Zvcm07ICAgICAgICAvKiBDb2xvciB0cmFuc2Zvcm0gY29kZSBmcm9tIEFkb2JlIG1hcmtlciAqLwogCi0gIGJvb2xlYW4gQ0NJUjYwMV9zYW1wbGluZzsJLyogVFJVRT1maXJzdCBzYW1wbGVzIGFyZSBjb3NpdGVkICovCisgIGJvb2xlYW4gQ0NJUjYwMV9zYW1wbGluZzsgICAgIC8qIFRSVUU9Zmlyc3Qgc2FtcGxlcyBhcmUgY29zaXRlZCAqLwogCiAgIC8qIEFzaWRlIGZyb20gdGhlIHNwZWNpZmljIGRhdGEgcmV0YWluZWQgZnJvbSBBUFBuIG1hcmtlcnMga25vd24gdG8gdGhlCiAgICAqIGxpYnJhcnksIHRoZSB1bmludGVycHJldGVkIGNvbnRlbnRzIG9mIGFueSBvciBhbGwgQVBQbiBhbmQgQ09NIG1hcmtlcnMKQEAgLTYzNiwxNyArNjM1LDE3IEBACiAgIC8qCiAgICAqIFRoZXNlIGZpZWxkcyBhcmUgY29tcHV0ZWQgZHVyaW5nIGRlY29tcHJlc3Npb24gc3RhcnR1cAogICAgKi8KLSAgaW50IG1heF9oX3NhbXBfZmFjdG9yOwkvKiBsYXJnZXN0IGhfc2FtcF9mYWN0b3IgKi8KLSAgaW50IG1heF92X3NhbXBfZmFjdG9yOwkvKiBsYXJnZXN0IHZfc2FtcF9mYWN0b3IgKi8KKyAgaW50IG1heF9oX3NhbXBfZmFjdG9yOyAgICAgICAgLyogbGFyZ2VzdCBoX3NhbXBfZmFjdG9yICovCisgIGludCBtYXhfdl9zYW1wX2ZhY3RvcjsgICAgICAgIC8qIGxhcmdlc3Qgdl9zYW1wX2ZhY3RvciAqLwogCiAjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA3MAotICBpbnQgbWluX0RDVF9oX3NjYWxlZF9zaXplOwkvKiBzbWFsbGVzdCBEQ1RfaF9zY2FsZWRfc2l6ZSBvZiBhbnkgY29tcG9uZW50ICovCi0gIGludCBtaW5fRENUX3Zfc2NhbGVkX3NpemU7CS8qIHNtYWxsZXN0IERDVF92X3NjYWxlZF9zaXplIG9mIGFueSBjb21wb25lbnQgKi8KKyAgaW50IG1pbl9EQ1RfaF9zY2FsZWRfc2l6ZTsgICAgLyogc21hbGxlc3QgRENUX2hfc2NhbGVkX3NpemUgb2YgYW55IGNvbXBvbmVudCAqLworICBpbnQgbWluX0RDVF92X3NjYWxlZF9zaXplOyAgICAvKiBzbWFsbGVzdCBEQ1Rfdl9zY2FsZWRfc2l6ZSBvZiBhbnkgY29tcG9uZW50ICovCiAjZWxzZQotICBpbnQgbWluX0RDVF9zY2FsZWRfc2l6ZTsJLyogc21hbGxlc3QgRENUX3NjYWxlZF9zaXplIG9mIGFueSBjb21wb25lbnQgKi8KKyAgaW50IG1pbl9EQ1Rfc2NhbGVkX3NpemU7ICAgICAgLyogc21hbGxlc3QgRENUX3NjYWxlZF9zaXplIG9mIGFueSBjb21wb25lbnQgKi8KICNlbmRpZgogCi0gIEpESU1FTlNJT04gdG90YWxfaU1DVV9yb3dzOwkvKiAjIG9mIGlNQ1Ugcm93cyBpbiBpbWFnZSAqLworICBKRElNRU5TSU9OIHRvdGFsX2lNQ1Vfcm93czsgICAvKiAjIG9mIGlNQ1Ugcm93cyBpbiBpbWFnZSAqLwogICAvKiBUaGUgY29lZmZpY2llbnQgY29udHJvbGxlcidzIGlucHV0IGFuZCBvdXRwdXQgcHJvZ3Jlc3MgaXMgbWVhc3VyZWQgaW4KICAgICogdW5pdHMgb2YgImlNQ1UiIChpbnRlcmxlYXZlZCBNQ1UpIHJvd3MuICBUaGVzZSBhcmUgdGhlIHNhbWUgYXMgTUNVIHJvd3MKICAgICogaW4gZnVsbHkgaW50ZXJsZWF2ZWQgSlBFRyBzY2FucywgYnV0IGFyZSB1c2VkIHdoZXRoZXIgdGhlIHNjYW4gaXMKQEAgLTY2MiwyNiArNjYxLDI2IEBACiAgICAqIFRoZXkgZGVzY3JpYmUgdGhlIGNvbXBvbmVudHMgYW5kIE1DVXMgYWN0dWFsbHkgYXBwZWFyaW5nIGluIHRoZSBzY2FuLgogICAgKiBOb3RlIHRoYXQgdGhlIGRlY29tcHJlc3NvciBvdXRwdXQgc2lkZSBtdXN0IG5vdCB1c2UgdGhlc2UgZmllbGRzLgogICAgKi8KLSAgaW50IGNvbXBzX2luX3NjYW47CQkvKiAjIG9mIEpQRUcgY29tcG9uZW50cyBpbiB0aGlzIHNjYW4gKi8KKyAgaW50IGNvbXBzX2luX3NjYW47ICAgICAgICAgICAgLyogIyBvZiBKUEVHIGNvbXBvbmVudHMgaW4gdGhpcyBzY2FuICovCiAgIGpwZWdfY29tcG9uZW50X2luZm8gKiBjdXJfY29tcF9pbmZvW01BWF9DT01QU19JTl9TQ0FOXTsKICAgLyogKmN1cl9jb21wX2luZm9baV0gZGVzY3JpYmVzIGNvbXBvbmVudCB0aGF0IGFwcGVhcnMgaSd0aCBpbiBTT1MgKi8KIAotICBKRElNRU5TSU9OIE1DVXNfcGVyX3JvdzsJLyogIyBvZiBNQ1VzIGFjcm9zcyB0aGUgaW1hZ2UgKi8KLSAgSkRJTUVOU0lPTiBNQ1Vfcm93c19pbl9zY2FuOwkvKiAjIG9mIE1DVSByb3dzIGluIHRoZSBpbWFnZSAqLworICBKRElNRU5TSU9OIE1DVXNfcGVyX3JvdzsgICAgICAvKiAjIG9mIE1DVXMgYWNyb3NzIHRoZSBpbWFnZSAqLworICBKRElNRU5TSU9OIE1DVV9yb3dzX2luX3NjYW47ICAvKiAjIG9mIE1DVSByb3dzIGluIHRoZSBpbWFnZSAqLwogCi0gIGludCBibG9ja3NfaW5fTUNVOwkJLyogIyBvZiBEQ1QgYmxvY2tzIHBlciBNQ1UgKi8KKyAgaW50IGJsb2Nrc19pbl9NQ1U7ICAgICAgICAgICAgLyogIyBvZiBEQ1QgYmxvY2tzIHBlciBNQ1UgKi8KICAgaW50IE1DVV9tZW1iZXJzaGlwW0RfTUFYX0JMT0NLU19JTl9NQ1VdOwogICAvKiBNQ1VfbWVtYmVyc2hpcFtpXSBpcyBpbmRleCBpbiBjdXJfY29tcF9pbmZvIG9mIGNvbXBvbmVudCBvd25pbmcgKi8KICAgLyogaSd0aCBibG9jayBpbiBhbiBNQ1UgKi8KIAotICBpbnQgU3MsIFNlLCBBaCwgQWw7CQkvKiBwcm9ncmVzc2l2ZSBKUEVHIHBhcmFtZXRlcnMgZm9yIHNjYW4gKi8KKyAgaW50IFNzLCBTZSwgQWgsIEFsOyAgICAgICAgICAgLyogcHJvZ3Jlc3NpdmUgSlBFRyBwYXJhbWV0ZXJzIGZvciBzY2FuICovCiAKICNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDgwCiAgIC8qIFRoZXNlIGZpZWxkcyBhcmUgZGVyaXZlZCBmcm9tIFNlIG9mIGZpcnN0IFNPUyBtYXJrZXIuCiAgICAqLwotICBpbnQgYmxvY2tfc2l6ZTsJCS8qIHRoZSBiYXNpYyBEQ1QgYmxvY2sgc2l6ZTogMS4uMTYgKi8KKyAgaW50IGJsb2NrX3NpemU7ICAgICAgICAgICAgICAgLyogdGhlIGJhc2ljIERDVCBibG9jayBzaXplOiAxLi4xNiAqLwogICBjb25zdCBpbnQgKiBuYXR1cmFsX29yZGVyOyAvKiBuYXR1cmFsLW9yZGVyIHBvc2l0aW9uIGFycmF5IGZvciBlbnRyb3B5IGRlY29kZSAqLwotICBpbnQgbGltX1NlOwkJCS8qIG1pbiggU2UsIERDVFNJWkUyLTEgKSBmb3IgZW50cm9weSBkZWNvZGUgKi8KKyAgaW50IGxpbV9TZTsgICAgICAgICAgICAgICAgICAgLyogbWluKCBTZSwgRENUU0laRTItMSApIGZvciBlbnRyb3B5IGRlY29kZSAqLwogI2VuZGlmCiAKICAgLyogVGhpcyBmaWVsZCBpcyBzaGFyZWQgYmV0d2VlbiBlbnRyb3B5IGRlY29kZXIgYW5kIG1hcmtlciBwYXJzZXIuCkBAIC03MjYsMTAgKzcyNSwxMCBAQAogICBKTUVUSE9EKHZvaWQsIG91dHB1dF9tZXNzYWdlLCAoal9jb21tb25fcHRyIGNpbmZvKSk7CiAgIC8qIEZvcm1hdCBhIG1lc3NhZ2Ugc3RyaW5nIGZvciB0aGUgbW9zdCByZWNlbnQgSlBFRyBlcnJvciBvciBtZXNzYWdlICovCiAgIEpNRVRIT0Qodm9pZCwgZm9ybWF0X21lc3NhZ2UsIChqX2NvbW1vbl9wdHIgY2luZm8sIGNoYXIgKiBidWZmZXIpKTsKLSNkZWZpbmUgSk1TR19MRU5HVEhfTUFYICAyMDAJLyogcmVjb21tZW5kZWQgc2l6ZSBvZiBmb3JtYXRfbWVzc2FnZSBidWZmZXIgKi8KKyNkZWZpbmUgSk1TR19MRU5HVEhfTUFYICAyMDAgICAgLyogcmVjb21tZW5kZWQgc2l6ZSBvZiBmb3JtYXRfbWVzc2FnZSBidWZmZXIgKi8KICAgLyogUmVzZXQgZXJyb3Igc3RhdGUgdmFyaWFibGVzIGF0IHN0YXJ0IG9mIGEgbmV3IGltYWdlICovCiAgIEpNRVRIT0Qodm9pZCwgcmVzZXRfZXJyb3JfbWdyLCAoal9jb21tb25fcHRyIGNpbmZvKSk7Ci0gIAorCiAgIC8qIFRoZSBtZXNzYWdlIElEIGNvZGUgYW5kIGFueSBwYXJhbWV0ZXJzIGFyZSBzYXZlZCBoZXJlLgogICAgKiBBIG1lc3NhZ2UgY2FuIGhhdmUgb25lIHN0cmluZyBwYXJhbWV0ZXIgb3IgdXAgdG8gOCBpbnQgcGFyYW1ldGVycy4KICAgICovCkBAIC03MzksMTggKzczOCwxOCBAQAogICAgIGludCBpWzhdOwogICAgIGNoYXIgc1tKTVNHX1NUUl9QQVJNX01BWF07CiAgIH0gbXNnX3Bhcm07Ci0gIAorCiAgIC8qIFN0YW5kYXJkIHN0YXRlIHZhcmlhYmxlcyBmb3IgZXJyb3IgZmFjaWxpdHkgKi8KLSAgCi0gIGludCB0cmFjZV9sZXZlbDsJCS8qIG1heCBtc2dfbGV2ZWwgdGhhdCB3aWxsIGJlIGRpc3BsYXllZCAqLwotICAKKworICBpbnQgdHJhY2VfbGV2ZWw7ICAgICAgICAgICAgICAvKiBtYXggbXNnX2xldmVsIHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQgKi8KKwogICAvKiBGb3IgcmVjb3ZlcmFibGUgY29ycnVwdC1kYXRhIGVycm9ycywgd2UgZW1pdCBhIHdhcm5pbmcgbWVzc2FnZSwKICAgICogYnV0IGtlZXAgZ29pbmcgdW5sZXNzIGVtaXRfbWVzc2FnZSBjaG9vc2VzIHRvIGFib3J0LiAgZW1pdF9tZXNzYWdlCiAgICAqIHNob3VsZCBjb3VudCB3YXJuaW5ncyBpbiBudW1fd2FybmluZ3MuICBUaGUgc3Vycm91bmRpbmcgYXBwbGljYXRpb24KICAgICogY2FuIGNoZWNrIGZvciBiYWQgZGF0YSBieSBzZWVpbmcgaWYgbnVtX3dhcm5pbmdzIGlzIG5vbnplcm8gYXQgdGhlCiAgICAqIGVuZCBvZiBwcm9jZXNzaW5nLgogICAgKi8KLSAgbG9uZyBudW1fd2FybmluZ3M7CQkvKiBudW1iZXIgb2YgY29ycnVwdC1kYXRhIHdhcm5pbmdzICovCisgIGxvbmcgbnVtX3dhcm5pbmdzOyAgICAgICAgICAgIC8qIG51bWJlciBvZiBjb3JydXB0LWRhdGEgd2FybmluZ3MgKi8KIAogICAvKiBUaGVzZSBmaWVsZHMgcG9pbnQgdG8gdGhlIHRhYmxlKHMpIG9mIGVycm9yIG1lc3NhZ2Ugc3RyaW5ncy4KICAgICogQW4gYXBwbGljYXRpb24gY2FuIGNoYW5nZSB0aGUgdGFibGUgcG9pbnRlciB0byBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQKQEAgLTc2OCw4ICs3NjcsOCBAQAogICAgKiBJdCBjb250YWlucyBzdHJpbmdzIG51bWJlcmVkIGZpcnN0X2FkZG9uX21lc3NhZ2UuLmxhc3RfYWRkb25fbWVzc2FnZS4KICAgICovCiAgIGNvbnN0IGNoYXIgKiBjb25zdCAqIGFkZG9uX21lc3NhZ2VfdGFibGU7IC8qIE5vbi1saWJyYXJ5IGVycm9ycyAqLwotICBpbnQgZmlyc3RfYWRkb25fbWVzc2FnZTsJLyogY29kZSBmb3IgZmlyc3Qgc3RyaW5nIGluIGFkZG9uIHRhYmxlICovCi0gIGludCBsYXN0X2FkZG9uX21lc3NhZ2U7CS8qIGNvZGUgZm9yIGxhc3Qgc3RyaW5nIGluIGFkZG9uIHRhYmxlICovCisgIGludCBmaXJzdF9hZGRvbl9tZXNzYWdlOyAgICAgIC8qIGNvZGUgZm9yIGZpcnN0IHN0cmluZyBpbiBhZGRvbiB0YWJsZSAqLworICBpbnQgbGFzdF9hZGRvbl9tZXNzYWdlOyAgICAgICAvKiBjb2RlIGZvciBsYXN0IHN0cmluZyBpbiBhZGRvbiB0YWJsZSAqLwogfTsKIAogCkBAIC03NzgsMTggKzc3NywxOCBAQAogc3RydWN0IGpwZWdfcHJvZ3Jlc3NfbWdyIHsKICAgSk1FVEhPRCh2b2lkLCBwcm9ncmVzc19tb25pdG9yLCAoal9jb21tb25fcHRyIGNpbmZvKSk7CiAKLSAgbG9uZyBwYXNzX2NvdW50ZXI7CQkvKiB3b3JrIHVuaXRzIGNvbXBsZXRlZCBpbiB0aGlzIHBhc3MgKi8KLSAgbG9uZyBwYXNzX2xpbWl0OwkJLyogdG90YWwgbnVtYmVyIG9mIHdvcmsgdW5pdHMgaW4gdGhpcyBwYXNzICovCi0gIGludCBjb21wbGV0ZWRfcGFzc2VzOwkJLyogcGFzc2VzIGNvbXBsZXRlZCBzbyBmYXIgKi8KLSAgaW50IHRvdGFsX3Bhc3NlczsJCS8qIHRvdGFsIG51bWJlciBvZiBwYXNzZXMgZXhwZWN0ZWQgKi8KKyAgbG9uZyBwYXNzX2NvdW50ZXI7ICAgICAgICAgICAgLyogd29yayB1bml0cyBjb21wbGV0ZWQgaW4gdGhpcyBwYXNzICovCisgIGxvbmcgcGFzc19saW1pdDsgICAgICAgICAgICAgIC8qIHRvdGFsIG51bWJlciBvZiB3b3JrIHVuaXRzIGluIHRoaXMgcGFzcyAqLworICBpbnQgY29tcGxldGVkX3Bhc3NlczsgICAgICAgICAvKiBwYXNzZXMgY29tcGxldGVkIHNvIGZhciAqLworICBpbnQgdG90YWxfcGFzc2VzOyAgICAgICAgICAgICAvKiB0b3RhbCBudW1iZXIgb2YgcGFzc2VzIGV4cGVjdGVkICovCiB9OwogCiAKIC8qIERhdGEgZGVzdGluYXRpb24gb2JqZWN0IGZvciBjb21wcmVzc2lvbiAqLwogCiBzdHJ1Y3QganBlZ19kZXN0aW5hdGlvbl9tZ3IgewotICBKT0NURVQgKiBuZXh0X291dHB1dF9ieXRlOwkvKiA9PiBuZXh0IGJ5dGUgdG8gd3JpdGUgaW4gYnVmZmVyICovCi0gIHNpemVfdCBmcmVlX2luX2J1ZmZlcjsJLyogIyBvZiBieXRlIHNwYWNlcyByZW1haW5pbmcgaW4gYnVmZmVyICovCisgIEpPQ1RFVCAqIG5leHRfb3V0cHV0X2J5dGU7ICAgIC8qID0+IG5leHQgYnl0ZSB0byB3cml0ZSBpbiBidWZmZXIgKi8KKyAgc2l6ZV90IGZyZWVfaW5fYnVmZmVyOyAgICAgICAgLyogIyBvZiBieXRlIHNwYWNlcyByZW1haW5pbmcgaW4gYnVmZmVyICovCiAKICAgSk1FVEhPRCh2b2lkLCBpbml0X2Rlc3RpbmF0aW9uLCAoal9jb21wcmVzc19wdHIgY2luZm8pKTsKICAgSk1FVEhPRChib29sZWFuLCBlbXB0eV9vdXRwdXRfYnVmZmVyLCAoal9jb21wcmVzc19wdHIgY2luZm8pKTsKQEAgLTgwMSw3ICs4MDAsNyBAQAogCiBzdHJ1Y3QganBlZ19zb3VyY2VfbWdyIHsKICAgY29uc3QgSk9DVEVUICogbmV4dF9pbnB1dF9ieXRlOyAvKiA9PiBuZXh0IGJ5dGUgdG8gcmVhZCBmcm9tIGJ1ZmZlciAqLwotICBzaXplX3QgYnl0ZXNfaW5fYnVmZmVyOwkvKiAjIG9mIGJ5dGVzIHJlbWFpbmluZyBpbiBidWZmZXIgKi8KKyAgc2l6ZV90IGJ5dGVzX2luX2J1ZmZlcjsgICAgICAgLyogIyBvZiBieXRlcyByZW1haW5pbmcgaW4gYnVmZmVyICovCiAKICAgSk1FVEhPRCh2b2lkLCBpbml0X3NvdXJjZSwgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsKICAgSk1FVEhPRChib29sZWFuLCBmaWxsX2lucHV0X2J1ZmZlciwgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsKQEAgLTgyMiw5ICs4MjEsOSBAQAogICogc3VjY2Vzc2Z1bC4KICAqLwogCi0jZGVmaW5lIEpQT09MX1BFUk1BTkVOVAkwCS8qIGxhc3RzIHVudGlsIG1hc3RlciByZWNvcmQgaXMgZGVzdHJveWVkICovCi0jZGVmaW5lIEpQT09MX0lNQUdFCTEJLyogbGFzdHMgdW50aWwgZG9uZSB3aXRoIGltYWdlL2RhdGFzdHJlYW0gKi8KLSNkZWZpbmUgSlBPT0xfTlVNUE9PTFMJMgorI2RlZmluZSBKUE9PTF9QRVJNQU5FTlQgMCAgICAgICAvKiBsYXN0cyB1bnRpbCBtYXN0ZXIgcmVjb3JkIGlzIGRlc3Ryb3llZCAqLworI2RlZmluZSBKUE9PTF9JTUFHRSAgICAgMSAgICAgICAvKiBsYXN0cyB1bnRpbCBkb25lIHdpdGggaW1hZ2UvZGF0YXN0cmVhbSAqLworI2RlZmluZSBKUE9PTF9OVU1QT09MUyAgMgogCiB0eXBlZGVmIHN0cnVjdCBqdmlydF9zYXJyYXlfY29udHJvbCAqIGp2aXJ0X3NhcnJheV9wdHI7CiB0eXBlZGVmIHN0cnVjdCBqdmlydF9iYXJyYXlfY29udHJvbCAqIGp2aXJ0X2JhcnJheV9wdHI7CkBAIC04MzMsMzggKzgzMiwzOCBAQAogc3RydWN0IGpwZWdfbWVtb3J5X21nciB7CiAgIC8qIE1ldGhvZCBwb2ludGVycyAqLwogICBKTUVUSE9EKHZvaWQgKiwgYWxsb2Nfc21hbGwsIChqX2NvbW1vbl9wdHIgY2luZm8sIGludCBwb29sX2lkLAotCQkJCXNpemVfdCBzaXplb2ZvYmplY3QpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemVvZm9iamVjdCkpOwogICBKTUVUSE9EKHZvaWQgRkFSICosIGFsbG9jX2xhcmdlLCAoal9jb21tb25fcHRyIGNpbmZvLCBpbnQgcG9vbF9pZCwKLQkJCQkgICAgIHNpemVfdCBzaXplb2ZvYmplY3QpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZW9mb2JqZWN0KSk7CiAgIEpNRVRIT0QoSlNBTVBBUlJBWSwgYWxsb2Nfc2FycmF5LCAoal9jb21tb25fcHRyIGNpbmZvLCBpbnQgcG9vbF9pZCwKLQkJCQkgICAgIEpESU1FTlNJT04gc2FtcGxlc3BlcnJvdywKLQkJCQkgICAgIEpESU1FTlNJT04gbnVtcm93cykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gc2FtcGxlc3BlcnJvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG51bXJvd3MpKTsKICAgSk1FVEhPRChKQkxPQ0tBUlJBWSwgYWxsb2NfYmFycmF5LCAoal9jb21tb25fcHRyIGNpbmZvLCBpbnQgcG9vbF9pZCwKLQkJCQkgICAgICBKRElNRU5TSU9OIGJsb2Nrc3BlcnJvdywKLQkJCQkgICAgICBKRElNRU5TSU9OIG51bXJvd3MpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBibG9ja3NwZXJyb3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gbnVtcm93cykpOwogICBKTUVUSE9EKGp2aXJ0X3NhcnJheV9wdHIsIHJlcXVlc3RfdmlydF9zYXJyYXksIChqX2NvbW1vbl9wdHIgY2luZm8sCi0JCQkJCQkgIGludCBwb29sX2lkLAotCQkJCQkJICBib29sZWFuIHByZV96ZXJvLAotCQkJCQkJICBKRElNRU5TSU9OIHNhbXBsZXNwZXJyb3csCi0JCQkJCQkgIEpESU1FTlNJT04gbnVtcm93cywKLQkJCQkJCSAgSkRJTUVOU0lPTiBtYXhhY2Nlc3MpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBvb2xfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gcHJlX3plcm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gc2FtcGxlc3BlcnJvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBudW1yb3dzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG1heGFjY2VzcykpOwogICBKTUVUSE9EKGp2aXJ0X2JhcnJheV9wdHIsIHJlcXVlc3RfdmlydF9iYXJyYXksIChqX2NvbW1vbl9wdHIgY2luZm8sCi0JCQkJCQkgIGludCBwb29sX2lkLAotCQkJCQkJICBib29sZWFuIHByZV96ZXJvLAotCQkJCQkJICBKRElNRU5TSU9OIGJsb2Nrc3BlcnJvdywKLQkJCQkJCSAgSkRJTUVOU0lPTiBudW1yb3dzLAotCQkJCQkJICBKRElNRU5TSU9OIG1heGFjY2VzcykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9vbF9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBwcmVfemVybywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBibG9ja3NwZXJyb3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gbnVtcm93cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBtYXhhY2Nlc3MpKTsKICAgSk1FVEhPRCh2b2lkLCByZWFsaXplX3ZpcnRfYXJyYXlzLCAoal9jb21tb25fcHRyIGNpbmZvKSk7CiAgIEpNRVRIT0QoSlNBTVBBUlJBWSwgYWNjZXNzX3ZpcnRfc2FycmF5LCAoal9jb21tb25fcHRyIGNpbmZvLAotCQkJCQkgICBqdmlydF9zYXJyYXlfcHRyIHB0ciwKLQkJCQkJICAgSkRJTUVOU0lPTiBzdGFydF9yb3csCi0JCQkJCSAgIEpESU1FTlNJT04gbnVtX3Jvd3MsCi0JCQkJCSAgIGJvb2xlYW4gd3JpdGFibGUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdmlydF9zYXJyYXlfcHRyIHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIHN0YXJ0X3JvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG51bV9yb3dzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gd3JpdGFibGUpKTsKICAgSk1FVEhPRChKQkxPQ0tBUlJBWSwgYWNjZXNzX3ZpcnRfYmFycmF5LCAoal9jb21tb25fcHRyIGNpbmZvLAotCQkJCQkgICAganZpcnRfYmFycmF5X3B0ciBwdHIsCi0JCQkJCSAgICBKRElNRU5TSU9OIHN0YXJ0X3JvdywKLQkJCQkJICAgIEpESU1FTlNJT04gbnVtX3Jvd3MsCi0JCQkJCSAgICBib29sZWFuIHdyaXRhYmxlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp2aXJ0X2JhcnJheV9wdHIgcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIHN0YXJ0X3JvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBudW1fcm93cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiB3cml0YWJsZSkpOwogICBKTUVUSE9EKHZvaWQsIGZyZWVfcG9vbCwgKGpfY29tbW9uX3B0ciBjaW5mbywgaW50IHBvb2xfaWQpKTsKICAgSk1FVEhPRCh2b2lkLCBzZWxmX2Rlc3RydWN0LCAoal9jb21tb25fcHRyIGNpbmZvKSk7CiAKQEAgLTg5Miw4NyArODkxLDg3IEBACiAgKi8KIAogI2lmZGVmIEhBVkVfUFJPVE9UWVBFUwotI2RlZmluZSBKUFAoYXJnbGlzdCkJYXJnbGlzdAorI2RlZmluZSBKUFAoYXJnbGlzdCkgICAgYXJnbGlzdAogI2Vsc2UKLSNkZWZpbmUgSlBQKGFyZ2xpc3QpCSgpCisjZGVmaW5lIEpQUChhcmdsaXN0KSAgICAoKQogI2VuZGlmCiAKIAogLyogU2hvcnQgZm9ybXMgb2YgZXh0ZXJuYWwgbmFtZXMgZm9yIHN5c3RlbXMgd2l0aCBicmFpbi1kYW1hZ2VkIGxpbmtlcnMuCiAgKiBXZSBzaG9ydGVuIGV4dGVybmFsIG5hbWVzIHRvIGJlIHVuaXF1ZSBpbiB0aGUgZmlyc3Qgc2l4IGxldHRlcnMsIHdoaWNoCiAgKiBpcyBnb29kIGVub3VnaCBmb3IgYWxsIGtub3duIHN5c3RlbXMuCi0gKiAoSWYgeW91ciBjb21waWxlciBpdHNlbGYgbmVlZHMgbmFtZXMgdG8gYmUgdW5pcXVlIGluIGxlc3MgdGhhbiAxNSAKKyAqIChJZiB5b3VyIGNvbXBpbGVyIGl0c2VsZiBuZWVkcyBuYW1lcyB0byBiZSB1bmlxdWUgaW4gbGVzcyB0aGFuIDE1CiAgKiBjaGFyYWN0ZXJzLCB5b3UgYXJlIG91dCBvZiBsdWNrLiAgR2V0IGEgYmV0dGVyIGNvbXBpbGVyLikKICAqLwogCiAjaWZkZWYgTkVFRF9TSE9SVF9FWFRFUk5BTF9OQU1FUwotI2RlZmluZSBqcGVnX3N0ZF9lcnJvcgkJalN0ZEVycm9yCi0jZGVmaW5lIGpwZWdfQ3JlYXRlQ29tcHJlc3MJakNyZWFDb21wcmVzcwotI2RlZmluZSBqcGVnX0NyZWF0ZURlY29tcHJlc3MJakNyZWFEZWNvbXByZXNzCi0jZGVmaW5lIGpwZWdfZGVzdHJveV9jb21wcmVzcwlqRGVzdENvbXByZXNzCi0jZGVmaW5lIGpwZWdfZGVzdHJveV9kZWNvbXByZXNzCWpEZXN0RGVjb21wcmVzcwotI2RlZmluZSBqcGVnX3N0ZGlvX2Rlc3QJCWpTdGREZXN0Ci0jZGVmaW5lIGpwZWdfc3RkaW9fc3JjCQlqU3RkU3JjCi0jaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA4MAotI2RlZmluZSBqcGVnX21lbV9kZXN0CQlqTWVtRGVzdAotI2RlZmluZSBqcGVnX21lbV9zcmMJCWpNZW1TcmMKKyNkZWZpbmUganBlZ19zdGRfZXJyb3IgICAgICAgICAgalN0ZEVycm9yCisjZGVmaW5lIGpwZWdfQ3JlYXRlQ29tcHJlc3MgICAgIGpDcmVhQ29tcHJlc3MKKyNkZWZpbmUganBlZ19DcmVhdGVEZWNvbXByZXNzICAgakNyZWFEZWNvbXByZXNzCisjZGVmaW5lIGpwZWdfZGVzdHJveV9jb21wcmVzcyAgIGpEZXN0Q29tcHJlc3MKKyNkZWZpbmUganBlZ19kZXN0cm95X2RlY29tcHJlc3MgakRlc3REZWNvbXByZXNzCisjZGVmaW5lIGpwZWdfc3RkaW9fZGVzdCAgICAgICAgIGpTdGREZXN0CisjZGVmaW5lIGpwZWdfc3RkaW9fc3JjICAgICAgICAgIGpTdGRTcmMKKyNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDgwIHx8IGRlZmluZWQoTUVNX1NSQ0RTVF9TVVBQT1JURUQpCisjZGVmaW5lIGpwZWdfbWVtX2Rlc3QgICAgICAgICAgIGpNZW1EZXN0CisjZGVmaW5lIGpwZWdfbWVtX3NyYyAgICAgICAgICAgIGpNZW1TcmMKICNlbmRpZgotI2RlZmluZSBqcGVnX3NldF9kZWZhdWx0cwlqU2V0RGVmYXVsdHMKLSNkZWZpbmUganBlZ19zZXRfY29sb3JzcGFjZQlqU2V0Q29sb3JzcGFjZQotI2RlZmluZSBqcGVnX2RlZmF1bHRfY29sb3JzcGFjZQlqRGVmQ29sb3JzcGFjZQotI2RlZmluZSBqcGVnX3NldF9xdWFsaXR5CWpTZXRRdWFsaXR5Ci0jZGVmaW5lIGpwZWdfc2V0X2xpbmVhcl9xdWFsaXR5CWpTZXRMUXVhbGl0eQorI2RlZmluZSBqcGVnX3NldF9kZWZhdWx0cyAgICAgICBqU2V0RGVmYXVsdHMKKyNkZWZpbmUganBlZ19zZXRfY29sb3JzcGFjZSAgICAgalNldENvbG9yc3BhY2UKKyNkZWZpbmUganBlZ19kZWZhdWx0X2NvbG9yc3BhY2UgakRlZkNvbG9yc3BhY2UKKyNkZWZpbmUganBlZ19zZXRfcXVhbGl0eSAgICAgICAgalNldFF1YWxpdHkKKyNkZWZpbmUganBlZ19zZXRfbGluZWFyX3F1YWxpdHkgalNldExRdWFsaXR5CiAjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA3MAotI2RlZmluZSBqcGVnX2RlZmF1bHRfcXRhYmxlcwlqRGVmUVRhYmxlcworI2RlZmluZSBqcGVnX2RlZmF1bHRfcXRhYmxlcyAgICBqRGVmUVRhYmxlcwogI2VuZGlmCi0jZGVmaW5lIGpwZWdfYWRkX3F1YW50X3RhYmxlCWpBZGRRdWFudFRhYmxlCi0jZGVmaW5lIGpwZWdfcXVhbGl0eV9zY2FsaW5nCWpRdWFsaXR5U2NhbGluZwotI2RlZmluZSBqcGVnX3NpbXBsZV9wcm9ncmVzc2lvbglqU2ltUHJvZ3Jlc3MKLSNkZWZpbmUganBlZ19zdXBwcmVzc190YWJsZXMJalN1cHByZXNzVGFibGVzCi0jZGVmaW5lIGpwZWdfYWxsb2NfcXVhbnRfdGFibGUJakFsY1FUYWJsZQotI2RlZmluZSBqcGVnX2FsbG9jX2h1ZmZfdGFibGUJakFsY0hUYWJsZQotI2RlZmluZSBqcGVnX3N0YXJ0X2NvbXByZXNzCWpTdHJ0Q29tcHJlc3MKLSNkZWZpbmUganBlZ193cml0ZV9zY2FubGluZXMJaldydFNjYW5saW5lcwotI2RlZmluZSBqcGVnX2ZpbmlzaF9jb21wcmVzcwlqRmluQ29tcHJlc3MKKyNkZWZpbmUganBlZ19hZGRfcXVhbnRfdGFibGUgICAgakFkZFF1YW50VGFibGUKKyNkZWZpbmUganBlZ19xdWFsaXR5X3NjYWxpbmcgICAgalF1YWxpdHlTY2FsaW5nCisjZGVmaW5lIGpwZWdfc2ltcGxlX3Byb2dyZXNzaW9uIGpTaW1Qcm9ncmVzcworI2RlZmluZSBqcGVnX3N1cHByZXNzX3RhYmxlcyAgICBqU3VwcHJlc3NUYWJsZXMKKyNkZWZpbmUganBlZ19hbGxvY19xdWFudF90YWJsZSAgakFsY1FUYWJsZQorI2RlZmluZSBqcGVnX2FsbG9jX2h1ZmZfdGFibGUgICBqQWxjSFRhYmxlCisjZGVmaW5lIGpwZWdfc3RhcnRfY29tcHJlc3MgICAgIGpTdHJ0Q29tcHJlc3MKKyNkZWZpbmUganBlZ193cml0ZV9zY2FubGluZXMgICAgaldydFNjYW5saW5lcworI2RlZmluZSBqcGVnX2ZpbmlzaF9jb21wcmVzcyAgICBqRmluQ29tcHJlc3MKICNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDcwCi0jZGVmaW5lIGpwZWdfY2FsY19qcGVnX2RpbWVuc2lvbnMJakNqcGVnRGltZW5zaW9ucworI2RlZmluZSBqcGVnX2NhbGNfanBlZ19kaW1lbnNpb25zICAgICAgIGpDanBlZ0RpbWVuc2lvbnMKICNlbmRpZgotI2RlZmluZSBqcGVnX3dyaXRlX3Jhd19kYXRhCWpXcnRSYXdEYXRhCi0jZGVmaW5lIGpwZWdfd3JpdGVfbWFya2VyCWpXcnRNYXJrZXIKLSNkZWZpbmUganBlZ193cml0ZV9tX2hlYWRlcglqV3J0TUhlYWRlcgotI2RlZmluZSBqcGVnX3dyaXRlX21fYnl0ZQlqV3J0TUJ5dGUKLSNkZWZpbmUganBlZ193cml0ZV90YWJsZXMJaldydFRhYmxlcwotI2RlZmluZSBqcGVnX3JlYWRfaGVhZGVyCWpSZWFkSGVhZGVyCi0jZGVmaW5lIGpwZWdfc3RhcnRfZGVjb21wcmVzcwlqU3RydERlY29tcHJlc3MKLSNkZWZpbmUganBlZ19yZWFkX3NjYW5saW5lcwlqUmVhZFNjYW5saW5lcwotI2RlZmluZSBqcGVnX2ZpbmlzaF9kZWNvbXByZXNzCWpGaW5EZWNvbXByZXNzCi0jZGVmaW5lIGpwZWdfcmVhZF9yYXdfZGF0YQlqUmVhZFJhd0RhdGEKLSNkZWZpbmUganBlZ19oYXNfbXVsdGlwbGVfc2NhbnMJakhhc011bHRTY24KLSNkZWZpbmUganBlZ19zdGFydF9vdXRwdXQJalN0cnRPdXRwdXQKLSNkZWZpbmUganBlZ19maW5pc2hfb3V0cHV0CWpGaW5PdXRwdXQKLSNkZWZpbmUganBlZ19pbnB1dF9jb21wbGV0ZQlqSW5Db21wbGV0ZQotI2RlZmluZSBqcGVnX25ld19jb2xvcm1hcAlqTmV3Q01hcAotI2RlZmluZSBqcGVnX2NvbnN1bWVfaW5wdXQJakNvbnN1bWVJbnB1dAorI2RlZmluZSBqcGVnX3dyaXRlX3Jhd19kYXRhICAgICBqV3J0UmF3RGF0YQorI2RlZmluZSBqcGVnX3dyaXRlX21hcmtlciAgICAgICBqV3J0TWFya2VyCisjZGVmaW5lIGpwZWdfd3JpdGVfbV9oZWFkZXIgICAgIGpXcnRNSGVhZGVyCisjZGVmaW5lIGpwZWdfd3JpdGVfbV9ieXRlICAgICAgIGpXcnRNQnl0ZQorI2RlZmluZSBqcGVnX3dyaXRlX3RhYmxlcyAgICAgICBqV3J0VGFibGVzCisjZGVmaW5lIGpwZWdfcmVhZF9oZWFkZXIgICAgICAgIGpSZWFkSGVhZGVyCisjZGVmaW5lIGpwZWdfc3RhcnRfZGVjb21wcmVzcyAgIGpTdHJ0RGVjb21wcmVzcworI2RlZmluZSBqcGVnX3JlYWRfc2NhbmxpbmVzICAgICBqUmVhZFNjYW5saW5lcworI2RlZmluZSBqcGVnX2ZpbmlzaF9kZWNvbXByZXNzICBqRmluRGVjb21wcmVzcworI2RlZmluZSBqcGVnX3JlYWRfcmF3X2RhdGEgICAgICBqUmVhZFJhd0RhdGEKKyNkZWZpbmUganBlZ19oYXNfbXVsdGlwbGVfc2NhbnMgakhhc011bHRTY24KKyNkZWZpbmUganBlZ19zdGFydF9vdXRwdXQgICAgICAgalN0cnRPdXRwdXQKKyNkZWZpbmUganBlZ19maW5pc2hfb3V0cHV0ICAgICAgakZpbk91dHB1dAorI2RlZmluZSBqcGVnX2lucHV0X2NvbXBsZXRlICAgICBqSW5Db21wbGV0ZQorI2RlZmluZSBqcGVnX25ld19jb2xvcm1hcCAgICAgICBqTmV3Q01hcAorI2RlZmluZSBqcGVnX2NvbnN1bWVfaW5wdXQgICAgICBqQ29uc3VtZUlucHV0CiAjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA4MAotI2RlZmluZSBqcGVnX2NvcmVfb3V0cHV0X2RpbWVuc2lvbnMJakNvcmVEaW1lbnNpb25zCisjZGVmaW5lIGpwZWdfY29yZV9vdXRwdXRfZGltZW5zaW9ucyAgICAgakNvcmVEaW1lbnNpb25zCiAjZW5kaWYKLSNkZWZpbmUganBlZ19jYWxjX291dHB1dF9kaW1lbnNpb25zCWpDYWxjRGltZW5zaW9ucwotI2RlZmluZSBqcGVnX3NhdmVfbWFya2VycwlqU2F2ZU1hcmtlcnMKLSNkZWZpbmUganBlZ19zZXRfbWFya2VyX3Byb2Nlc3NvcglqU2V0TWFya2VyCi0jZGVmaW5lIGpwZWdfcmVhZF9jb2VmZmljaWVudHMJalJlYWRDb2VmcwotI2RlZmluZSBqcGVnX3dyaXRlX2NvZWZmaWNpZW50cwlqV3J0Q29lZnMKLSNkZWZpbmUganBlZ19jb3B5X2NyaXRpY2FsX3BhcmFtZXRlcnMJakNvcHlDcml0Ci0jZGVmaW5lIGpwZWdfYWJvcnRfY29tcHJlc3MJakFicnRDb21wcmVzcwotI2RlZmluZSBqcGVnX2Fib3J0X2RlY29tcHJlc3MJakFicnREZWNvbXByZXNzCi0jZGVmaW5lIGpwZWdfYWJvcnQJCWpBYm9ydAotI2RlZmluZSBqcGVnX2Rlc3Ryb3kJCWpEZXN0cm95Ci0jZGVmaW5lIGpwZWdfcmVzeW5jX3RvX3Jlc3RhcnQJalJlc3luY1Jlc3RhcnQKKyNkZWZpbmUganBlZ19jYWxjX291dHB1dF9kaW1lbnNpb25zICAgICBqQ2FsY0RpbWVuc2lvbnMKKyNkZWZpbmUganBlZ19zYXZlX21hcmtlcnMgICAgICAgalNhdmVNYXJrZXJzCisjZGVmaW5lIGpwZWdfc2V0X21hcmtlcl9wcm9jZXNzb3IgICAgICAgalNldE1hcmtlcgorI2RlZmluZSBqcGVnX3JlYWRfY29lZmZpY2llbnRzICBqUmVhZENvZWZzCisjZGVmaW5lIGpwZWdfd3JpdGVfY29lZmZpY2llbnRzIGpXcnRDb2VmcworI2RlZmluZSBqcGVnX2NvcHlfY3JpdGljYWxfcGFyYW1ldGVycyAgIGpDb3B5Q3JpdAorI2RlZmluZSBqcGVnX2Fib3J0X2NvbXByZXNzICAgICBqQWJydENvbXByZXNzCisjZGVmaW5lIGpwZWdfYWJvcnRfZGVjb21wcmVzcyAgIGpBYnJ0RGVjb21wcmVzcworI2RlZmluZSBqcGVnX2Fib3J0ICAgICAgICAgICAgICBqQWJvcnQKKyNkZWZpbmUganBlZ19kZXN0cm95ICAgICAgICAgICAgakRlc3Ryb3kKKyNkZWZpbmUganBlZ19yZXN5bmNfdG9fcmVzdGFydCAgalJlc3luY1Jlc3RhcnQKICNlbmRpZiAvKiBORUVEX1NIT1JUX0VYVEVSTkFMX05BTUVTICovCiAKIAogLyogRGVmYXVsdCBlcnJvci1tYW5hZ2VtZW50IHNldHVwICovCiBFWFRFUk4oc3RydWN0IGpwZWdfZXJyb3JfbWdyICopIGpwZWdfc3RkX2Vycm9yCi0JSlBQKChzdHJ1Y3QganBlZ19lcnJvcl9tZ3IgKiBlcnIpKTsKKyAgICAgICAgSlBQKChzdHJ1Y3QganBlZ19lcnJvcl9tZ3IgKiBlcnIpKTsKIAogLyogSW5pdGlhbGl6YXRpb24gb2YgSlBFRyBjb21wcmVzc2lvbiBvYmplY3RzLgogICoganBlZ19jcmVhdGVfY29tcHJlc3MoKSBhbmQganBlZ19jcmVhdGVfZGVjb21wcmVzcygpIGFyZSB0aGUgZXhwb3J0ZWQKQEAgLTk4MywxNCArOTgyLDE0IEBACiAgKi8KICNkZWZpbmUganBlZ19jcmVhdGVfY29tcHJlc3MoY2luZm8pIFwKICAgICBqcGVnX0NyZWF0ZUNvbXByZXNzKChjaW5mbyksIEpQRUdfTElCX1ZFUlNJT04sIFwKLQkJCShzaXplX3QpIHNpemVvZihzdHJ1Y3QganBlZ19jb21wcmVzc19zdHJ1Y3QpKQorICAgICAgICAgICAgICAgICAgICAgICAgKHNpemVfdCkgc2l6ZW9mKHN0cnVjdCBqcGVnX2NvbXByZXNzX3N0cnVjdCkpCiAjZGVmaW5lIGpwZWdfY3JlYXRlX2RlY29tcHJlc3MoY2luZm8pIFwKICAgICBqcGVnX0NyZWF0ZURlY29tcHJlc3MoKGNpbmZvKSwgSlBFR19MSUJfVkVSU0lPTiwgXAotCQkJICAoc2l6ZV90KSBzaXplb2Yoc3RydWN0IGpwZWdfZGVjb21wcmVzc19zdHJ1Y3QpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAoc2l6ZV90KSBzaXplb2Yoc3RydWN0IGpwZWdfZGVjb21wcmVzc19zdHJ1Y3QpKQogRVhURVJOKHZvaWQpIGpwZWdfQ3JlYXRlQ29tcHJlc3MgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywKLQkJCQkgICAgICBpbnQgdmVyc2lvbiwgc2l6ZV90IHN0cnVjdHNpemUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZlcnNpb24sIHNpemVfdCBzdHJ1Y3RzaXplKSk7CiBFWFRFUk4odm9pZCkganBlZ19DcmVhdGVEZWNvbXByZXNzIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKLQkJCQkJaW50IHZlcnNpb24sIHNpemVfdCBzdHJ1Y3RzaXplKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZlcnNpb24sIHNpemVfdCBzdHJ1Y3RzaXplKSk7CiAvKiBEZXN0cnVjdGlvbiBvZiBKUEVHIGNvbXByZXNzaW9uIG9iamVjdHMgKi8KIEVYVEVSTih2b2lkKSBqcGVnX2Rlc3Ryb3lfY29tcHJlc3MgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbykpOwogRVhURVJOKHZvaWQpIGpwZWdfZGVzdHJveV9kZWNvbXByZXNzIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOwpAQCAtMTAwMCw0OCArOTk5LDQ4IEBACiBFWFRFUk4odm9pZCkganBlZ19zdGRpb19kZXN0IEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sIEZJTEUgKiBvdXRmaWxlKSk7CiBFWFRFUk4odm9pZCkganBlZ19zdGRpb19zcmMgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBGSUxFICogaW5maWxlKSk7CiAKLSNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDgwCisjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA4MCB8fCBkZWZpbmVkKE1FTV9TUkNEU1RfU1VQUE9SVEVEKQogLyogRGF0YSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIG1hbmFnZXJzOiBtZW1vcnkgYnVmZmVycy4gKi8KIEVYVEVSTih2b2lkKSBqcGVnX21lbV9kZXN0IEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sCi0JCQkgICAgICAgdW5zaWduZWQgY2hhciAqKiBvdXRidWZmZXIsCi0JCQkgICAgICAgdW5zaWduZWQgbG9uZyAqIG91dHNpemUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqIG91dGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICogb3V0c2l6ZSkpOwogRVhURVJOKHZvaWQpIGpwZWdfbWVtX3NyYyBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCi0JCQkgICAgICB1bnNpZ25lZCBjaGFyICogaW5idWZmZXIsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nIGluc2l6ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqIGluYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBpbnNpemUpKTsKICNlbmRpZgogCiAvKiBEZWZhdWx0IHBhcmFtZXRlciBzZXR1cCBmb3IgY29tcHJlc3Npb24gKi8KIEVYVEVSTih2b2lkKSBqcGVnX3NldF9kZWZhdWx0cyBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7CiAvKiBDb21wcmVzc2lvbiBwYXJhbWV0ZXIgc2V0dXAgYWlkcyAqLwogRVhURVJOKHZvaWQpIGpwZWdfc2V0X2NvbG9yc3BhY2UgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywKLQkJCQkgICAgICBKX0NPTE9SX1NQQUNFIGNvbG9yc3BhY2UpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSl9DT0xPUl9TUEFDRSBjb2xvcnNwYWNlKSk7CiBFWFRFUk4odm9pZCkganBlZ19kZWZhdWx0X2NvbG9yc3BhY2UgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbykpOwogRVhURVJOKHZvaWQpIGpwZWdfc2V0X3F1YWxpdHkgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywgaW50IHF1YWxpdHksCi0JCQkJICAgYm9vbGVhbiBmb3JjZV9iYXNlbGluZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGZvcmNlX2Jhc2VsaW5lKSk7CiBFWFRFUk4odm9pZCkganBlZ19zZXRfbGluZWFyX3F1YWxpdHkgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywKLQkJCQkJICBpbnQgc2NhbGVfZmFjdG9yLAotCQkJCQkgIGJvb2xlYW4gZm9yY2VfYmFzZWxpbmUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzY2FsZV9mYWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGZvcmNlX2Jhc2VsaW5lKSk7CiAjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA3MAogRVhURVJOKHZvaWQpIGpwZWdfZGVmYXVsdF9xdGFibGVzIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sCi0JCQkJICAgICAgIGJvb2xlYW4gZm9yY2VfYmFzZWxpbmUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gZm9yY2VfYmFzZWxpbmUpKTsKICNlbmRpZgogRVhURVJOKHZvaWQpIGpwZWdfYWRkX3F1YW50X3RhYmxlIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sIGludCB3aGljaF90YmwsCi0JCQkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCAqYmFzaWNfdGFibGUsCi0JCQkJICAgICAgIGludCBzY2FsZV9mYWN0b3IsCi0JCQkJICAgICAgIGJvb2xlYW4gZm9yY2VfYmFzZWxpbmUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCAqYmFzaWNfdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2NhbGVfZmFjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBmb3JjZV9iYXNlbGluZSkpOwogRVhURVJOKGludCkganBlZ19xdWFsaXR5X3NjYWxpbmcgSlBQKChpbnQgcXVhbGl0eSkpOwogRVhURVJOKHZvaWQpIGpwZWdfc2ltcGxlX3Byb2dyZXNzaW9uIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8pKTsKIEVYVEVSTih2b2lkKSBqcGVnX3N1cHByZXNzX3RhYmxlcyBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLAotCQkJCSAgICAgICBib29sZWFuIHN1cHByZXNzKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIHN1cHByZXNzKSk7CiBFWFRFUk4oSlFVQU5UX1RCTCAqKSBqcGVnX2FsbG9jX3F1YW50X3RhYmxlIEpQUCgoal9jb21tb25fcHRyIGNpbmZvKSk7CiBFWFRFUk4oSkhVRkZfVEJMICopIGpwZWdfYWxsb2NfaHVmZl90YWJsZSBKUFAoKGpfY29tbW9uX3B0ciBjaW5mbykpOwogCiAvKiBNYWluIGVudHJ5IHBvaW50cyBmb3IgY29tcHJlc3Npb24gKi8KIEVYVEVSTih2b2lkKSBqcGVnX3N0YXJ0X2NvbXByZXNzIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sCi0JCQkJICAgICAgYm9vbGVhbiB3cml0ZV9hbGxfdGFibGVzKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gd3JpdGVfYWxsX3RhYmxlcykpOwogRVhURVJOKEpESU1FTlNJT04pIGpwZWdfd3JpdGVfc2NhbmxpbmVzIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sCi0JCQkJCSAgICAgSlNBTVBBUlJBWSBzY2FubGluZXMsCi0JCQkJCSAgICAgSkRJTUVOU0lPTiBudW1fbGluZXMpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgc2NhbmxpbmVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBudW1fbGluZXMpKTsKIEVYVEVSTih2b2lkKSBqcGVnX2ZpbmlzaF9jb21wcmVzcyBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7CiAKICNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDcwCkBAIC0xMDUxLDI5ICsxMDUwLDI5IEBACiAKIC8qIFJlcGxhY2VzIGpwZWdfd3JpdGVfc2NhbmxpbmVzIHdoZW4gd3JpdGluZyByYXcgZG93bnNhbXBsZWQgZGF0YS4gKi8KIEVYVEVSTihKRElNRU5TSU9OKSBqcGVnX3dyaXRlX3Jhd19kYXRhIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sCi0JCQkJCSAgICBKU0FNUElNQUdFIGRhdGEsCi0JCQkJCSAgICBKRElNRU5TSU9OIG51bV9saW5lcykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUElNQUdFIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gbnVtX2xpbmVzKSk7CiAKIC8qIFdyaXRlIGEgc3BlY2lhbCBtYXJrZXIuICBTZWUgbGlianBlZy50eHQgY29uY2VybmluZyBzYWZlIHVzYWdlLiAqLwogRVhURVJOKHZvaWQpIGpwZWdfd3JpdGVfbWFya2VyCi0JSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywgaW50IG1hcmtlciwKLQkgICAgIGNvbnN0IEpPQ1RFVCAqIGRhdGFwdHIsIHVuc2lnbmVkIGludCBkYXRhbGVuKSk7CisgICAgICAgIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sIGludCBtYXJrZXIsCisgICAgICAgICAgICAgY29uc3QgSk9DVEVUICogZGF0YXB0ciwgdW5zaWduZWQgaW50IGRhdGFsZW4pKTsKIC8qIFNhbWUsIGJ1dCBwaWVjZW1lYWwuICovCiBFWFRFUk4odm9pZCkganBlZ193cml0ZV9tX2hlYWRlcgotCUpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sIGludCBtYXJrZXIsIHVuc2lnbmVkIGludCBkYXRhbGVuKSk7CisgICAgICAgIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sIGludCBtYXJrZXIsIHVuc2lnbmVkIGludCBkYXRhbGVuKSk7CiBFWFRFUk4odm9pZCkganBlZ193cml0ZV9tX2J5dGUKLQlKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgdmFsKSk7CisgICAgICAgIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sIGludCB2YWwpKTsKIAogLyogQWx0ZXJuYXRlIGNvbXByZXNzaW9uIGZ1bmN0aW9uOiBqdXN0IHdyaXRlIGFuIGFiYnJldmlhdGVkIHRhYmxlIGZpbGUgKi8KIEVYVEVSTih2b2lkKSBqcGVnX3dyaXRlX3RhYmxlcyBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7CiAKIC8qIERlY29tcHJlc3Npb24gc3RhcnR1cDogcmVhZCBzdGFydCBvZiBKUEVHIGRhdGFzdHJlYW0gdG8gc2VlIHdoYXQncyB0aGVyZSAqLwogRVhURVJOKGludCkganBlZ19yZWFkX2hlYWRlciBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCi0JCQkJICBib29sZWFuIHJlcXVpcmVfaW1hZ2UpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIHJlcXVpcmVfaW1hZ2UpKTsKIC8qIFJldHVybiB2YWx1ZSBpcyBvbmUgb2Y6ICovCi0jZGVmaW5lIEpQRUdfU1VTUEVOREVECQkwIC8qIFN1c3BlbmRlZCBkdWUgdG8gbGFjayBvZiBpbnB1dCBkYXRhICovCi0jZGVmaW5lIEpQRUdfSEVBREVSX09LCQkxIC8qIEZvdW5kIHZhbGlkIGltYWdlIGRhdGFzdHJlYW0gKi8KLSNkZWZpbmUgSlBFR19IRUFERVJfVEFCTEVTX09OTFkJMiAvKiBGb3VuZCB2YWxpZCB0YWJsZS1zcGVjcy1vbmx5IGRhdGFzdHJlYW0gKi8KKyNkZWZpbmUgSlBFR19TVVNQRU5ERUQgICAgICAgICAgMCAvKiBTdXNwZW5kZWQgZHVlIHRvIGxhY2sgb2YgaW5wdXQgZGF0YSAqLworI2RlZmluZSBKUEVHX0hFQURFUl9PSyAgICAgICAgICAxIC8qIEZvdW5kIHZhbGlkIGltYWdlIGRhdGFzdHJlYW0gKi8KKyNkZWZpbmUgSlBFR19IRUFERVJfVEFCTEVTX09OTFkgMiAvKiBGb3VuZCB2YWxpZCB0YWJsZS1zcGVjcy1vbmx5IGRhdGFzdHJlYW0gKi8KIC8qIElmIHlvdSBwYXNzIHJlcXVpcmVfaW1hZ2UgPSBUUlVFIChub3JtYWwgY2FzZSksIHlvdSBuZWVkIG5vdCBjaGVjayBmb3IKICAqIGEgVEFCTEVTX09OTFkgcmV0dXJuIGNvZGU7IGFuIGFiYnJldmlhdGVkIGZpbGUgd2lsbCBjYXVzZSBhbiBlcnJvciBleGl0LgogICogSlBFR19TVVNQRU5ERUQgaXMgb25seSBwb3NzaWJsZSBpZiB5b3UgdXNlIGEgZGF0YSBzb3VyY2UgbW9kdWxlIHRoYXQgY2FuCkBAIC0xMDgzLDI5ICsxMDgyLDI5IEBACiAvKiBNYWluIGVudHJ5IHBvaW50cyBmb3IgZGVjb21wcmVzc2lvbiAqLwogRVhURVJOKGJvb2xlYW4pIGpwZWdfc3RhcnRfZGVjb21wcmVzcyBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsKIEVYVEVSTihKRElNRU5TSU9OKSBqcGVnX3JlYWRfc2NhbmxpbmVzIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKLQkJCQkJICAgIEpTQU1QQVJSQVkgc2NhbmxpbmVzLAotCQkJCQkgICAgSkRJTUVOU0lPTiBtYXhfbGluZXMpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBzY2FubGluZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gbWF4X2xpbmVzKSk7CiBFWFRFUk4oYm9vbGVhbikganBlZ19maW5pc2hfZGVjb21wcmVzcyBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsKIAogLyogUmVwbGFjZXMganBlZ19yZWFkX3NjYW5saW5lcyB3aGVuIHJlYWRpbmcgcmF3IGRvd25zYW1wbGVkIGRhdGEuICovCiBFWFRFUk4oSkRJTUVOU0lPTikganBlZ19yZWFkX3Jhd19kYXRhIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKLQkJCQkJICAgSlNBTVBJTUFHRSBkYXRhLAotCQkJCQkgICBKRElNRU5TSU9OIG1heF9saW5lcykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QSU1BR0UgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG1heF9saW5lcykpOwogCiAvKiBBZGRpdGlvbmFsIGVudHJ5IHBvaW50cyBmb3IgYnVmZmVyZWQtaW1hZ2UgbW9kZS4gKi8KIEVYVEVSTihib29sZWFuKSBqcGVnX2hhc19tdWx0aXBsZV9zY2FucyBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsKIEVYVEVSTihib29sZWFuKSBqcGVnX3N0YXJ0X291dHB1dCBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCi0JCQkJICAgICAgIGludCBzY2FuX251bWJlcikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNjYW5fbnVtYmVyKSk7CiBFWFRFUk4oYm9vbGVhbikganBlZ19maW5pc2hfb3V0cHV0IEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOwogRVhURVJOKGJvb2xlYW4pIGpwZWdfaW5wdXRfY29tcGxldGUgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7CiBFWFRFUk4odm9pZCkganBlZ19uZXdfY29sb3JtYXAgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7CiBFWFRFUk4oaW50KSBqcGVnX2NvbnN1bWVfaW5wdXQgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7CiAvKiBSZXR1cm4gdmFsdWUgaXMgb25lIG9mOiAqLwotLyogI2RlZmluZSBKUEVHX1NVU1BFTkRFRAkwICAgIFN1c3BlbmRlZCBkdWUgdG8gbGFjayBvZiBpbnB1dCBkYXRhICovCi0jZGVmaW5lIEpQRUdfUkVBQ0hFRF9TT1MJMSAvKiBSZWFjaGVkIHN0YXJ0IG9mIG5ldyBzY2FuICovCi0jZGVmaW5lIEpQRUdfUkVBQ0hFRF9FT0kJMiAvKiBSZWFjaGVkIGVuZCBvZiBpbWFnZSAqLwotI2RlZmluZSBKUEVHX1JPV19DT01QTEVURUQJMyAvKiBDb21wbGV0ZWQgb25lIGlNQ1Ugcm93ICovCi0jZGVmaW5lIEpQRUdfU0NBTl9DT01QTEVURUQJNCAvKiBDb21wbGV0ZWQgbGFzdCBpTUNVIHJvdyBvZiBhIHNjYW4gKi8KKy8qICNkZWZpbmUgSlBFR19TVVNQRU5ERUQgICAgICAgMCAgICBTdXNwZW5kZWQgZHVlIHRvIGxhY2sgb2YgaW5wdXQgZGF0YSAqLworI2RlZmluZSBKUEVHX1JFQUNIRURfU09TICAgICAgICAxIC8qIFJlYWNoZWQgc3RhcnQgb2YgbmV3IHNjYW4gKi8KKyNkZWZpbmUgSlBFR19SRUFDSEVEX0VPSSAgICAgICAgMiAvKiBSZWFjaGVkIGVuZCBvZiBpbWFnZSAqLworI2RlZmluZSBKUEVHX1JPV19DT01QTEVURUQgICAgICAzIC8qIENvbXBsZXRlZCBvbmUgaU1DVSByb3cgKi8KKyNkZWZpbmUgSlBFR19TQ0FOX0NPTVBMRVRFRCAgICAgNCAvKiBDb21wbGV0ZWQgbGFzdCBpTUNVIHJvdyBvZiBhIHNjYW4gKi8KIAogLyogUHJlY2FsY3VsYXRlIG91dHB1dCBkaW1lbnNpb25zIGZvciBjdXJyZW50IGRlY29tcHJlc3Npb24gcGFyYW1ldGVycy4gKi8KICNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDgwCkBAIC0xMTE1LDIwICsxMTE0LDIwIEBACiAKIC8qIENvbnRyb2wgc2F2aW5nIG9mIENPTSBhbmQgQVBQbiBtYXJrZXJzIGludG8gbWFya2VyX2xpc3QuICovCiBFWFRFUk4odm9pZCkganBlZ19zYXZlX21hcmtlcnMKLQlKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGludCBtYXJrZXJfY29kZSwKLQkgICAgIHVuc2lnbmVkIGludCBsZW5ndGhfbGltaXQpKTsKKyAgICAgICAgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgbWFya2VyX2NvZGUsCisgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxlbmd0aF9saW1pdCkpOwogCiAvKiBJbnN0YWxsIGEgc3BlY2lhbCBwcm9jZXNzaW5nIG1ldGhvZCBmb3IgQ09NIG9yIEFQUG4gbWFya2Vycy4gKi8KIEVYVEVSTih2b2lkKSBqcGVnX3NldF9tYXJrZXJfcHJvY2Vzc29yCi0JSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgbWFya2VyX2NvZGUsCi0JICAgICBqcGVnX21hcmtlcl9wYXJzZXJfbWV0aG9kIHJvdXRpbmUpKTsKKyAgICAgICAgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgbWFya2VyX2NvZGUsCisgICAgICAgICAgICAganBlZ19tYXJrZXJfcGFyc2VyX21ldGhvZCByb3V0aW5lKSk7CiAKIC8qIFJlYWQgb3Igd3JpdGUgcmF3IERDVCBjb2VmZmljaWVudHMgLS0tIHVzZWZ1bCBmb3IgbG9zc2xlc3MgdHJhbnNjb2RpbmcuICovCiBFWFRFUk4oanZpcnRfYmFycmF5X3B0ciAqKSBqcGVnX3JlYWRfY29lZmZpY2llbnRzIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOwogRVhURVJOKHZvaWQpIGpwZWdfd3JpdGVfY29lZmZpY2llbnRzIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sCi0JCQkJCSAganZpcnRfYmFycmF5X3B0ciAqIGNvZWZfYXJyYXlzKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdmlydF9iYXJyYXlfcHRyICogY29lZl9hcnJheXMpKTsKIEVYVEVSTih2b2lkKSBqcGVnX2NvcHlfY3JpdGljYWxfcGFyYW1ldGVycyBKUFAoKGpfZGVjb21wcmVzc19wdHIgc3JjaW5mbywKLQkJCQkJCWpfY29tcHJlc3NfcHRyIGRzdGluZm8pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpfY29tcHJlc3NfcHRyIGRzdGluZm8pKTsKIAogLyogSWYgeW91IGNob29zZSB0byBhYm9ydCBjb21wcmVzc2lvbiBvciBkZWNvbXByZXNzaW9uIGJlZm9yZSBjb21wbGV0aW5nCiAgKiBqcGVnX2ZpbmlzaF8oZGUpY29tcHJlc3MsIHRoZW4geW91IG5lZWQgdG8gY2xlYW4gdXAgdG8gcmVsZWFzZSBtZW1vcnksCkBAIC0xMTQ3LDE3ICsxMTQ2LDE3IEBACiAKIC8qIERlZmF1bHQgcmVzdGFydC1tYXJrZXItcmVzeW5jIHByb2NlZHVyZSBmb3IgdXNlIGJ5IGRhdGEgc291cmNlIG1vZHVsZXMgKi8KIEVYVEVSTihib29sZWFuKSBqcGVnX3Jlc3luY190b19yZXN0YXJ0IEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKLQkJCQkJICAgIGludCBkZXNpcmVkKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXNpcmVkKSk7CiAKIAogLyogVGhlc2UgbWFya2VyIGNvZGVzIGFyZSBleHBvcnRlZCBzaW5jZSBhcHBsaWNhdGlvbnMgYW5kIGRhdGEgc291cmNlIG1vZHVsZXMKICAqIGFyZSBsaWtlbHkgdG8gd2FudCB0byB1c2UgdGhlbS4KICAqLwogCi0jZGVmaW5lIEpQRUdfUlNUMAkweEQwCS8qIFJTVDAgbWFya2VyIGNvZGUgKi8KLSNkZWZpbmUgSlBFR19FT0kJMHhEOQkvKiBFT0kgbWFya2VyIGNvZGUgKi8KLSNkZWZpbmUgSlBFR19BUFAwCTB4RTAJLyogQVBQMCBtYXJrZXIgY29kZSAqLwotI2RlZmluZSBKUEVHX0NPTQkweEZFCS8qIENPTSBtYXJrZXIgY29kZSAqLworI2RlZmluZSBKUEVHX1JTVDAgICAgICAgMHhEMCAgICAvKiBSU1QwIG1hcmtlciBjb2RlICovCisjZGVmaW5lIEpQRUdfRU9JICAgICAgICAweEQ5ICAgIC8qIEVPSSBtYXJrZXIgY29kZSAqLworI2RlZmluZSBKUEVHX0FQUDAgICAgICAgMHhFMCAgICAvKiBBUFAwIG1hcmtlciBjb2RlICovCisjZGVmaW5lIEpQRUdfQ09NICAgICAgICAweEZFICAgIC8qIENPTSBtYXJrZXIgY29kZSAqLwogCiAKIC8qIElmIHdlIGhhdmUgYSBicmFpbi1kYW1hZ2VkIGNvbXBpbGVyIHRoYXQgZW1pdHMgd2FybmluZ3MgKG9yIHdvcnNlLCBlcnJvcnMpCkBAIC0xMTY2LDcgKzExNjUsNyBAQAogICovCiAKICNpZmRlZiBJTkNPTVBMRVRFX1RZUEVTX0JST0tFTgotI2lmbmRlZiBKUEVHX0lOVEVSTkFMUwkJLyogd2lsbCBiZSBkZWZpbmVkIGluIGpwZWdpbnQuaCAqLworI2lmbmRlZiBKUEVHX0lOVEVSTkFMUyAgICAgICAgICAvKiB3aWxsIGJlIGRlZmluZWQgaW4ganBlZ2ludC5oICovCiBzdHJ1Y3QganZpcnRfc2FycmF5X2NvbnRyb2wgeyBsb25nIGR1bW15OyB9Owogc3RydWN0IGp2aXJ0X2JhcnJheV9jb250cm9sIHsgbG9uZyBkdW1teTsgfTsKIHN0cnVjdCBqcGVnX2NvbXBfbWFzdGVyIHsgbG9uZyBkdW1teTsgfTsKQEAgLTEyMDEsOCArMTIwMCw4IEBACiAgKi8KIAogI2lmZGVmIEpQRUdfSU5URVJOQUxTCi0jaW5jbHVkZSAianBlZ2ludC5oIgkJLyogZmV0Y2ggcHJpdmF0ZSBkZWNsYXJhdGlvbnMgKi8KLSNpbmNsdWRlICJqZXJyb3IuaCIJCS8qIGZldGNoIGVycm9yIGNvZGVzIHRvbyAqLworI2luY2x1ZGUgImpwZWdpbnQuaCIgICAgICAgICAgICAvKiBmZXRjaCBwcml2YXRlIGRlY2xhcmF0aW9ucyAqLworI2luY2x1ZGUgImplcnJvci5oIiAgICAgICAgICAgICAvKiBmZXRjaCBlcnJvciBjb2RlcyB0b28gKi8KICNlbmRpZgogCiAjaWZkZWYgX19jcGx1c3BsdXMKZGlmZiAtLWdpdCBhL2pwZWd0cmFuLmMgYi9qcGVndHJhbi5jCmluZGV4IDE5YzA2OGIuLmM3OTA2ZjQgMTAwNjQ0Ci0tLSBhL2pwZWd0cmFuLmMKKysrIGIvanBlZ3RyYW4uYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBUaGlzIGZpbGUgd2FzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZToKICAqIENvcHlyaWdodCAoQykgMTk5NS0yMDEwLCBUaG9tYXMgRy4gTGFuZSwgR3VpZG8gVm9sbGJlZGluZy4KLSAqIE1vZGlmaWNhdGlvbnM6CisgKiBsaWJqcGVnLXR1cmJvIE1vZGlmaWNhdGlvbnM6CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEQuIFIuIENvbW1hbmRlci4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KICAqCkBAIC0xMywxOCArMTMsMTggQEAKICAqIHByb3ZpZGVzIHNvbWUgbG9zc2xlc3MgYW5kIHNvcnQtb2YtbG9zc2xlc3MgdHJhbnNmb3JtYXRpb25zIG9mIEpQRUcgZGF0YS4KICAqLwogCi0jaW5jbHVkZSAiY2RqcGVnLmgiCQkvKiBDb21tb24gZGVjbHMgZm9yIGNqcGVnL2RqcGVnIGFwcGxpY2F0aW9ucyAqLwotI2luY2x1ZGUgInRyYW5zdXBwLmgiCQkvKiBTdXBwb3J0IHJvdXRpbmVzIGZvciBqcGVndHJhbiAqLwotI2luY2x1ZGUgImp2ZXJzaW9uLmgiCQkvKiBmb3IgdmVyc2lvbiBtZXNzYWdlICovCi0jaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiY2RqcGVnLmgiICAgICAgICAgICAgIC8qIENvbW1vbiBkZWNscyBmb3IgY2pwZWcvZGpwZWcgYXBwbGljYXRpb25zICovCisjaW5jbHVkZSAidHJhbnN1cHAuaCIgICAgICAgICAgIC8qIFN1cHBvcnQgcm91dGluZXMgZm9yIGpwZWd0cmFuICovCisjaW5jbHVkZSAianZlcnNpb24uaCIgICAgICAgICAgIC8qIGZvciB2ZXJzaW9uIG1lc3NhZ2UgKi8KKyNpbmNsdWRlICJqY29uZmlnaW50LmgiCiAKLSNpZmRlZiBVU0VfQ0NPTU1BTkQJCS8qIGNvbW1hbmQtbGluZSByZWFkZXIgZm9yIE1hY2ludG9zaCAqLworI2lmZGVmIFVTRV9DQ09NTUFORCAgICAgICAgICAgICAvKiBjb21tYW5kLWxpbmUgcmVhZGVyIGZvciBNYWNpbnRvc2ggKi8KICNpZmRlZiBfX01XRVJLU19fCiAjaW5jbHVkZSA8U0lPVVguaD4gICAgICAgICAgICAgIC8qIE1ldHJvd2Vya3MgbmVlZHMgdGhpcyAqLwotI2luY2x1ZGUgPGNvbnNvbGUuaD4JCS8qIC4uLiBhbmQgdGhpcyAqLworI2luY2x1ZGUgPGNvbnNvbGUuaD4gICAgICAgICAgICAvKiAuLi4gYW5kIHRoaXMgKi8KICNlbmRpZgogI2lmZGVmIFRISU5LX0MKLSNpbmNsdWRlIDxjb25zb2xlLmg+CQkvKiBUaGluayBkZWNsYXJlcyBpdCBoZXJlICovCisjaW5jbHVkZSA8Y29uc29sZS5oPiAgICAgICAgICAgIC8qIFRoaW5rIGRlY2xhcmVzIGl0IGhlcmUgKi8KICNlbmRpZgogI2VuZGlmCiAKQEAgLTM4LDkgKzM4LDkgQEAKICAqLwogCiAKLXN0YXRpYyBjb25zdCBjaGFyICogcHJvZ25hbWU7CS8qIHByb2dyYW0gbmFtZSBmb3IgZXJyb3IgbWVzc2FnZXMgKi8KLXN0YXRpYyBjaGFyICogb3V0ZmlsZW5hbWU7CS8qIGZvciAtb3V0ZmlsZSBzd2l0Y2ggKi8KLXN0YXRpYyBKQ09QWV9PUFRJT04gY29weW9wdGlvbjsJLyogLWNvcHkgc3dpdGNoICovCitzdGF0aWMgY29uc3QgY2hhciAqIHByb2duYW1lOyAgIC8qIHByb2dyYW0gbmFtZSBmb3IgZXJyb3IgbWVzc2FnZXMgKi8KK3N0YXRpYyBjaGFyICogb3V0ZmlsZW5hbWU7ICAgICAgLyogZm9yIC1vdXRmaWxlIHN3aXRjaCAqLworc3RhdGljIEpDT1BZX09QVElPTiBjb3B5b3B0aW9uOyAvKiAtY29weSBzd2l0Y2ggKi8KIHN0YXRpYyBqcGVnX3RyYW5zZm9ybV9pbmZvIHRyYW5zZm9ybW9wdGlvbjsgLyogaW1hZ2UgdHJhbnNmb3JtYXRpb24gb3B0aW9ucyAqLwogCiAKQEAgLTEwNiwxMiArMTA2LDEyIEBACiAgICAgdHJhbnNmb3Jtb3B0aW9uLnRyYW5zZm9ybSA9IHRyYW5zZm9ybTsKICAgfSBlbHNlIHsKICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBjYW4gb25seSBkbyBvbmUgaW1hZ2UgdHJhbnNmb3JtYXRpb24gYXQgYSB0aW1lXG4iLAotCSAgICBwcm9nbmFtZSk7CisgICAgICAgICAgICBwcm9nbmFtZSk7CiAgICAgdXNhZ2UoKTsKICAgfQogI2Vsc2UKICAgZnByaW50ZihzdGRlcnIsICIlczogc29ycnksIGltYWdlIHRyYW5zZm9ybWF0aW9uIHdhcyBub3QgY29tcGlsZWRcbiIsCi0JICBwcm9nbmFtZSk7CisgICAgICAgICAgcHJvZ25hbWUpOwogICBleGl0KEVYSVRfRkFJTFVSRSk7CiAjZW5kaWYKIH0KQEAgLTExOSw3ICsxMTksNyBAQAogCiBMT0NBTChpbnQpCiBwYXJzZV9zd2l0Y2hlcyAoal9jb21wcmVzc19wdHIgY2luZm8sIGludCBhcmdjLCBjaGFyICoqYXJndiwKLQkJaW50IGxhc3RfZmlsZV9hcmdfc2VlbiwgYm9vbGVhbiBmb3JfcmVhbCkKKyAgICAgICAgICAgICAgICBpbnQgbGFzdF9maWxlX2FyZ19zZWVuLCBib29sZWFuIGZvcl9yZWFsKQogLyogUGFyc2Ugb3B0aW9uYWwgc3dpdGNoZXMuCiAgKiBSZXR1cm5zIGFyZ3ZbXSBpbmRleCBvZiBmaXJzdCBmaWxlLW5hbWUgYXJndW1lbnQgKD09IGFyZ2MgaWYgbm9uZSkuCiAgKiBBbnkgZmlsZSBuYW1lcyB3aXRoIGluZGV4ZXMgPD0gbGFzdF9maWxlX2FyZ19zZWVuIGFyZSBpZ25vcmVkOwpAQCAtMTMyLDcgKzEzMiw3IEBACiAgIGludCBhcmduOwogICBjaGFyICogYXJnOwogICBib29sZWFuIHNpbXBsZV9wcm9ncmVzc2l2ZTsKLSAgY2hhciAqIHNjYW5zYXJnID0gTlVMTDsJLyogc2F2ZXMgLXNjYW5zIHBhcm0gaWYgYW55ICovCisgIGNoYXIgKiBzY2Fuc2FyZyA9IE5VTEw7ICAgICAgIC8qIHNhdmVzIC1zY2FucyBwYXJtIGlmIGFueSAqLwogCiAgIC8qIFNldCB1cCBkZWZhdWx0IEpQRUcgcGFyYW1ldGVycy4gKi8KICAgc2ltcGxlX3Byb2dyZXNzaXZlID0gRkFMU0U7CkBAIC0xNTMsMTIgKzE1MywxMiBAQAogICAgIGlmICgqYXJnICE9ICctJykgewogICAgICAgLyogTm90IGEgc3dpdGNoLCBtdXN0IGJlIGEgZmlsZSBuYW1lIGFyZ3VtZW50ICovCiAgICAgICBpZiAoYXJnbiA8PSBsYXN0X2ZpbGVfYXJnX3NlZW4pIHsKLQlvdXRmaWxlbmFtZSA9IE5VTEw7CS8qIC1vdXRmaWxlIGFwcGxpZXMgdG8ganVzdCBvbmUgaW5wdXQgZmlsZSAqLwotCWNvbnRpbnVlOwkJLyogaWdub3JlIHRoaXMgbmFtZSBpZiBwcmV2aW91c2x5IHByb2Nlc3NlZCAqLworICAgICAgICBvdXRmaWxlbmFtZSA9IE5VTEw7ICAgICAvKiAtb3V0ZmlsZSBhcHBsaWVzIHRvIGp1c3Qgb25lIGlucHV0IGZpbGUgKi8KKyAgICAgICAgY29udGludWU7ICAgICAgICAgICAgICAgLyogaWdub3JlIHRoaXMgbmFtZSBpZiBwcmV2aW91c2x5IHByb2Nlc3NlZCAqLwogICAgICAgfQotICAgICAgYnJlYWs7CQkJLyogZWxzZSBkb25lIHBhcnNpbmcgc3dpdGNoZXMgKi8KKyAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgLyogZWxzZSBkb25lIHBhcnNpbmcgc3dpdGNoZXMgKi8KICAgICB9Ci0gICAgYXJnKys7CQkJLyogYWR2YW5jZSBwYXN0IHN3aXRjaCBtYXJrZXIgY2hhcmFjdGVyICovCisgICAgYXJnKys7ICAgICAgICAgICAgICAgICAgICAgIC8qIGFkdmFuY2UgcGFzdCBzd2l0Y2ggbWFya2VyIGNoYXJhY3RlciAqLwogCiAgICAgaWYgKGtleW1hdGNoKGFyZywgImFyaXRobWV0aWMiLCAxKSkgewogICAgICAgLyogVXNlIGFyaXRobWV0aWMgY29kaW5nLiAqLwpAQCAtMTY2LDM1ICsxNjYsMzUgQEAKICAgICAgIGNpbmZvLT5hcml0aF9jb2RlID0gVFJVRTsKICNlbHNlCiAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBzb3JyeSwgYXJpdGhtZXRpYyBjb2Rpbmcgbm90IHN1cHBvcnRlZFxuIiwKLQkgICAgICBwcm9nbmFtZSk7CisgICAgICAgICAgICAgIHByb2duYW1lKTsKICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKICNlbmRpZgogCiAgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJjb3B5IiwgMikpIHsKICAgICAgIC8qIFNlbGVjdCB3aGljaCBleHRyYSBtYXJrZXJzIHRvIGNvcHkuICovCi0gICAgICBpZiAoKythcmduID49IGFyZ2MpCS8qIGFkdmFuY2UgdG8gbmV4dCBhcmd1bWVudCAqLwotCXVzYWdlKCk7CisgICAgICBpZiAoKythcmduID49IGFyZ2MpICAgICAgIC8qIGFkdmFuY2UgdG8gbmV4dCBhcmd1bWVudCAqLworICAgICAgICB1c2FnZSgpOwogICAgICAgaWYgKGtleW1hdGNoKGFyZ3ZbYXJnbl0sICJub25lIiwgMSkpIHsKLQljb3B5b3B0aW9uID0gSkNPUFlPUFRfTk9ORTsKKyAgICAgICAgY29weW9wdGlvbiA9IEpDT1BZT1BUX05PTkU7CiAgICAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZ3ZbYXJnbl0sICJjb21tZW50cyIsIDEpKSB7Ci0JY29weW9wdGlvbiA9IEpDT1BZT1BUX0NPTU1FTlRTOworICAgICAgICBjb3B5b3B0aW9uID0gSkNPUFlPUFRfQ09NTUVOVFM7CiAgICAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZ3ZbYXJnbl0sICJhbGwiLCAxKSkgewotCWNvcHlvcHRpb24gPSBKQ09QWU9QVF9BTEw7CisgICAgICAgIGNvcHlvcHRpb24gPSBKQ09QWU9QVF9BTEw7CiAgICAgICB9IGVsc2UKLQl1c2FnZSgpOworICAgICAgICB1c2FnZSgpOwogCiAgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJjcm9wIiwgMikpIHsKICAgICAgIC8qIFBlcmZvcm0gbG9zc2xlc3MgY3JvcHBpbmcuICovCiAjaWYgVFJBTlNGT1JNU19TVVBQT1JURUQKLSAgICAgIGlmICgrK2FyZ24gPj0gYXJnYykJLyogYWR2YW5jZSB0byBuZXh0IGFyZ3VtZW50ICovCi0JdXNhZ2UoKTsKKyAgICAgIGlmICgrK2FyZ24gPj0gYXJnYykgICAgICAgLyogYWR2YW5jZSB0byBuZXh0IGFyZ3VtZW50ICovCisgICAgICAgIHVzYWdlKCk7CiAgICAgICBpZiAoISBqdHJhbnNmb3JtX3BhcnNlX2Nyb3Bfc3BlYygmdHJhbnNmb3Jtb3B0aW9uLCBhcmd2W2FyZ25dKSkgewotCWZwcmludGYoc3RkZXJyLCAiJXM6IGJvZ3VzIC1jcm9wIGFyZ3VtZW50ICclcydcbiIsCi0JCXByb2duYW1lLCBhcmd2W2FyZ25dKTsKLQlleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGJvZ3VzIC1jcm9wIGFyZ3VtZW50ICclcydcbiIsCisgICAgICAgICAgICAgICAgcHJvZ25hbWUsIGFyZ3ZbYXJnbl0pOworICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CiAgICAgICB9CiAjZWxzZQotICAgICAgc2VsZWN0X3RyYW5zZm9ybShKWEZPUk1fTk9ORSk7CS8qIGZvcmNlIGFuIGVycm9yICovCisgICAgICBzZWxlY3RfdHJhbnNmb3JtKEpYRk9STV9OT05FKTsgICAgLyogZm9yY2UgYW4gZXJyb3IgKi8KICNlbmRpZgogCiAgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJkZWJ1ZyIsIDEpIHx8IGtleW1hdGNoKGFyZywgInZlcmJvc2UiLCAxKSkgewpAQCAtMjAzLDMyICsyMDMsMzIgQEAKICAgICAgIHN0YXRpYyBib29sZWFuIHByaW50ZWRfdmVyc2lvbiA9IEZBTFNFOwogCiAgICAgICBpZiAoISBwcmludGVkX3ZlcnNpb24pIHsKLQlmcHJpbnRmKHN0ZGVyciwgIiVzIHZlcnNpb24gJXMgKGJ1aWxkICVzKVxuIiwKLQkJUEFDS0FHRV9OQU1FLCBWRVJTSU9OLCBCVUlMRCk7Ci0JZnByaW50ZihzdGRlcnIsICIlc1xuXG4iLCBKQ09QWVJJR0hUKTsKLQlmcHJpbnRmKHN0ZGVyciwgIkVtdWxhdGluZyBUaGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIGxpYmpwZWcsIHZlcnNpb24gJXNcblxuIiwKLQkJSlZFUlNJT04pOwotCXByaW50ZWRfdmVyc2lvbiA9IFRSVUU7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMgdmVyc2lvbiAlcyAoYnVpbGQgJXMpXG4iLAorICAgICAgICAgICAgICAgIFBBQ0tBR0VfTkFNRSwgVkVSU0lPTiwgQlVJTEQpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG5cbiIsIEpDT1BZUklHSFQpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVtdWxhdGluZyBUaGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLCB2ZXJzaW9uICVzXG5cbiIsCisgICAgICAgICAgICAgICAgSlZFUlNJT04pOworICAgICAgICBwcmludGVkX3ZlcnNpb24gPSBUUlVFOwogICAgICAgfQogICAgICAgY2luZm8tPmVyci0+dHJhY2VfbGV2ZWwrKzsKIAogICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAiZmxpcCIsIDEpKSB7CiAgICAgICAvKiBNaXJyb3IgbGVmdC1yaWdodCBvciB0b3AtYm90dG9tLiAqLwotICAgICAgaWYgKCsrYXJnbiA+PSBhcmdjKQkvKiBhZHZhbmNlIHRvIG5leHQgYXJndW1lbnQgKi8KLQl1c2FnZSgpOworICAgICAgaWYgKCsrYXJnbiA+PSBhcmdjKSAgICAgICAvKiBhZHZhbmNlIHRvIG5leHQgYXJndW1lbnQgKi8KKyAgICAgICAgdXNhZ2UoKTsKICAgICAgIGlmIChrZXltYXRjaChhcmd2W2FyZ25dLCAiaG9yaXpvbnRhbCIsIDEpKQotCXNlbGVjdF90cmFuc2Zvcm0oSlhGT1JNX0ZMSVBfSCk7CisgICAgICAgIHNlbGVjdF90cmFuc2Zvcm0oSlhGT1JNX0ZMSVBfSCk7CiAgICAgICBlbHNlIGlmIChrZXltYXRjaChhcmd2W2FyZ25dLCAidmVydGljYWwiLCAxKSkKLQlzZWxlY3RfdHJhbnNmb3JtKEpYRk9STV9GTElQX1YpOworICAgICAgICBzZWxlY3RfdHJhbnNmb3JtKEpYRk9STV9GTElQX1YpOwogICAgICAgZWxzZQotCXVzYWdlKCk7CisgICAgICAgIHVzYWdlKCk7CiAKICAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZywgImdyYXlzY2FsZSIsIDEpIHx8IGtleW1hdGNoKGFyZywgImdyZXlzY2FsZSIsMSkpIHsKICAgICAgIC8qIEZvcmNlIHRvIGdyYXlzY2FsZS4gKi8KICNpZiBUUkFOU0ZPUk1TX1NVUFBPUlRFRAogICAgICAgdHJhbnNmb3Jtb3B0aW9uLmZvcmNlX2dyYXlzY2FsZSA9IFRSVUU7CiAjZWxzZQotICAgICAgc2VsZWN0X3RyYW5zZm9ybShKWEZPUk1fTk9ORSk7CS8qIGZvcmNlIGFuIGVycm9yICovCisgICAgICBzZWxlY3RfdHJhbnNmb3JtKEpYRk9STV9OT05FKTsgICAgLyogZm9yY2UgYW4gZXJyb3IgKi8KICNlbmRpZgogCiAgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJtYXhtZW1vcnkiLCAzKSkgewpAQCAtMjM2LDEyICsyMzYsMTIgQEAKICAgICAgIGxvbmcgbHZhbDsKICAgICAgIGNoYXIgY2ggPSAneCc7CiAKLSAgICAgIGlmICgrK2FyZ24gPj0gYXJnYykJLyogYWR2YW5jZSB0byBuZXh0IGFyZ3VtZW50ICovCi0JdXNhZ2UoKTsKKyAgICAgIGlmICgrK2FyZ24gPj0gYXJnYykgICAgICAgLyogYWR2YW5jZSB0byBuZXh0IGFyZ3VtZW50ICovCisgICAgICAgIHVzYWdlKCk7CiAgICAgICBpZiAoc3NjYW5mKGFyZ3ZbYXJnbl0sICIlbGQlYyIsICZsdmFsLCAmY2gpIDwgMSkKLQl1c2FnZSgpOworICAgICAgICB1c2FnZSgpOwogICAgICAgaWYgKGNoID09ICdtJyB8fCBjaCA9PSAnTScpCi0JbHZhbCAqPSAxMDAwTDsKKyAgICAgICAgbHZhbCAqPSAxMDAwTDsKICAgICAgIGNpbmZvLT5tZW0tPm1heF9tZW1vcnlfdG9fdXNlID0gbHZhbCAqIDEwMDBMOwogCiAgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJvcHRpbWl6ZSIsIDEpIHx8IGtleW1hdGNoKGFyZywgIm9wdGltaXNlIiwgMSkpIHsKQEAgLTI1MCwxNSArMjUwLDE1IEBACiAgICAgICBjaW5mby0+b3B0aW1pemVfY29kaW5nID0gVFJVRTsKICNlbHNlCiAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBzb3JyeSwgZW50cm9weSBvcHRpbWl6YXRpb24gd2FzIG5vdCBjb21waWxlZFxuIiwKLQkgICAgICBwcm9nbmFtZSk7CisgICAgICAgICAgICAgIHByb2duYW1lKTsKICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKICNlbmRpZgogCiAgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJvdXRmaWxlIiwgNCkpIHsKICAgICAgIC8qIFNldCBvdXRwdXQgZmlsZSBuYW1lLiAqLwotICAgICAgaWYgKCsrYXJnbiA+PSBhcmdjKQkvKiBhZHZhbmNlIHRvIG5leHQgYXJndW1lbnQgKi8KLQl1c2FnZSgpOwotICAgICAgb3V0ZmlsZW5hbWUgPSBhcmd2W2FyZ25dOwkvKiBzYXZlIGl0IGF3YXkgZm9yIGxhdGVyIHVzZSAqLworICAgICAgaWYgKCsrYXJnbiA+PSBhcmdjKSAgICAgICAvKiBhZHZhbmNlIHRvIG5leHQgYXJndW1lbnQgKi8KKyAgICAgICAgdXNhZ2UoKTsKKyAgICAgIG91dGZpbGVuYW1lID0gYXJndlthcmduXTsgLyogc2F2ZSBpdCBhd2F5IGZvciBsYXRlciB1c2UgKi8KIAogICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAicGVyZmVjdCIsIDIpKSB7CiAgICAgICAvKiBGYWlsIGlmIHRoZXJlIGlzIGFueSBwYXJ0aWFsIGVkZ2UgTUNVcyB0aGF0IHRoZSB0cmFuc2Zvcm0gY2FuJ3QKQEAgLTI3Miw3ICsyNzIsNyBAQAogICAgICAgLyogV2UgbXVzdCBwb3N0cG9uZSBleGVjdXRpb24gdW50aWwgbnVtX2NvbXBvbmVudHMgaXMga25vd24uICovCiAjZWxzZQogICAgICAgZnByaW50ZihzdGRlcnIsICIlczogc29ycnksIHByb2dyZXNzaXZlIG91dHB1dCB3YXMgbm90IGNvbXBpbGVkXG4iLAotCSAgICAgIHByb2duYW1lKTsKKyAgICAgICAgICAgICAgcHJvZ25hbWUpOwogICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwogI2VuZGlmCiAKQEAgLTI4MSw0MyArMjgxLDQzIEBACiAgICAgICBsb25nIGx2YWw7CiAgICAgICBjaGFyIGNoID0gJ3gnOwogCi0gICAgICBpZiAoKythcmduID49IGFyZ2MpCS8qIGFkdmFuY2UgdG8gbmV4dCBhcmd1bWVudCAqLwotCXVzYWdlKCk7CisgICAgICBpZiAoKythcmduID49IGFyZ2MpICAgICAgIC8qIGFkdmFuY2UgdG8gbmV4dCBhcmd1bWVudCAqLworICAgICAgICB1c2FnZSgpOwogICAgICAgaWYgKHNzY2FuZihhcmd2W2FyZ25dLCAiJWxkJWMiLCAmbHZhbCwgJmNoKSA8IDEpCi0JdXNhZ2UoKTsKKyAgICAgICAgdXNhZ2UoKTsKICAgICAgIGlmIChsdmFsIDwgMCB8fCBsdmFsID4gNjU1MzVMKQotCXVzYWdlKCk7CisgICAgICAgIHVzYWdlKCk7CiAgICAgICBpZiAoY2ggPT0gJ2InIHx8IGNoID09ICdCJykgewotCWNpbmZvLT5yZXN0YXJ0X2ludGVydmFsID0gKHVuc2lnbmVkIGludCkgbHZhbDsKLQljaW5mby0+cmVzdGFydF9pbl9yb3dzID0gMDsgLyogZWxzZSBwcmlvciAnLXJlc3RhcnQgbicgb3ZlcnJpZGVzIG1lICovCisgICAgICAgIGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsID0gKHVuc2lnbmVkIGludCkgbHZhbDsKKyAgICAgICAgY2luZm8tPnJlc3RhcnRfaW5fcm93cyA9IDA7IC8qIGVsc2UgcHJpb3IgJy1yZXN0YXJ0IG4nIG92ZXJyaWRlcyBtZSAqLwogICAgICAgfSBlbHNlIHsKLQljaW5mby0+cmVzdGFydF9pbl9yb3dzID0gKGludCkgbHZhbDsKLQkvKiByZXN0YXJ0X2ludGVydmFsIHdpbGwgYmUgY29tcHV0ZWQgZHVyaW5nIHN0YXJ0dXAgKi8KKyAgICAgICAgY2luZm8tPnJlc3RhcnRfaW5fcm93cyA9IChpbnQpIGx2YWw7CisgICAgICAgIC8qIHJlc3RhcnRfaW50ZXJ2YWwgd2lsbCBiZSBjb21wdXRlZCBkdXJpbmcgc3RhcnR1cCAqLwogICAgICAgfQogCiAgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJyb3RhdGUiLCAyKSkgewogICAgICAgLyogUm90YXRlIDkwLCAxODAsIG9yIDI3MCBkZWdyZWVzIChtZWFzdXJlZCBjbG9ja3dpc2UpLiAqLwotICAgICAgaWYgKCsrYXJnbiA+PSBhcmdjKQkvKiBhZHZhbmNlIHRvIG5leHQgYXJndW1lbnQgKi8KLQl1c2FnZSgpOworICAgICAgaWYgKCsrYXJnbiA+PSBhcmdjKSAgICAgICAvKiBhZHZhbmNlIHRvIG5leHQgYXJndW1lbnQgKi8KKyAgICAgICAgdXNhZ2UoKTsKICAgICAgIGlmIChrZXltYXRjaChhcmd2W2FyZ25dLCAiOTAiLCAyKSkKLQlzZWxlY3RfdHJhbnNmb3JtKEpYRk9STV9ST1RfOTApOworICAgICAgICBzZWxlY3RfdHJhbnNmb3JtKEpYRk9STV9ST1RfOTApOwogICAgICAgZWxzZSBpZiAoa2V5bWF0Y2goYXJndlthcmduXSwgIjE4MCIsIDMpKQotCXNlbGVjdF90cmFuc2Zvcm0oSlhGT1JNX1JPVF8xODApOworICAgICAgICBzZWxlY3RfdHJhbnNmb3JtKEpYRk9STV9ST1RfMTgwKTsKICAgICAgIGVsc2UgaWYgKGtleW1hdGNoKGFyZ3ZbYXJnbl0sICIyNzAiLCAzKSkKLQlzZWxlY3RfdHJhbnNmb3JtKEpYRk9STV9ST1RfMjcwKTsKKyAgICAgICAgc2VsZWN0X3RyYW5zZm9ybShKWEZPUk1fUk9UXzI3MCk7CiAgICAgICBlbHNlCi0JdXNhZ2UoKTsKKyAgICAgICAgdXNhZ2UoKTsKIAogICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAic2NhbnMiLCAxKSkgewogICAgICAgLyogU2V0IHNjYW4gc2NyaXB0LiAqLwogI2lmZGVmIENfTVVMVElTQ0FOX0ZJTEVTX1NVUFBPUlRFRAotICAgICAgaWYgKCsrYXJnbiA+PSBhcmdjKQkvKiBhZHZhbmNlIHRvIG5leHQgYXJndW1lbnQgKi8KLQl1c2FnZSgpOworICAgICAgaWYgKCsrYXJnbiA+PSBhcmdjKSAgICAgICAvKiBhZHZhbmNlIHRvIG5leHQgYXJndW1lbnQgKi8KKyAgICAgICAgdXNhZ2UoKTsKICAgICAgIHNjYW5zYXJnID0gYXJndlthcmduXTsKICAgICAgIC8qIFdlIG11c3QgcG9zdHBvbmUgcmVhZGluZyB0aGUgZmlsZSBpbiBjYXNlIC1wcm9ncmVzc2l2ZSBhcHBlYXJzLiAqLwogI2Vsc2UKICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IHNvcnJ5LCBtdWx0aS1zY2FuIG91dHB1dCB3YXMgbm90IGNvbXBpbGVkXG4iLAotCSAgICAgIHByb2duYW1lKTsKKyAgICAgICAgICAgICAgcHJvZ25hbWUpOwogICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwogI2VuZGlmCiAKQEAgLTMzNCw3ICszMzQsNyBAQAogICAgICAgdHJhbnNmb3Jtb3B0aW9uLnRyaW0gPSBUUlVFOwogCiAgICAgfSBlbHNlIHsKLSAgICAgIHVzYWdlKCk7CQkJLyogYm9ndXMgc3dpdGNoICovCisgICAgICB1c2FnZSgpOyAgICAgICAgICAgICAgICAgIC8qIGJvZ3VzIHN3aXRjaCAqLwogICAgIH0KICAgfQogCkBAIC0zNDMsMTggKzM0MywxOCBAQAogICBpZiAoZm9yX3JlYWwpIHsKIAogI2lmZGVmIENfUFJPR1JFU1NJVkVfU1VQUE9SVEVECi0gICAgaWYgKHNpbXBsZV9wcm9ncmVzc2l2ZSkJLyogcHJvY2VzcyAtcHJvZ3Jlc3NpdmU7IC1zY2FucyBjYW4gb3ZlcnJpZGUgKi8KKyAgICBpZiAoc2ltcGxlX3Byb2dyZXNzaXZlKSAgICAgLyogcHJvY2VzcyAtcHJvZ3Jlc3NpdmU7IC1zY2FucyBjYW4gb3ZlcnJpZGUgKi8KICAgICAgIGpwZWdfc2ltcGxlX3Byb2dyZXNzaW9uKGNpbmZvKTsKICNlbmRpZgogCiAjaWZkZWYgQ19NVUxUSVNDQU5fRklMRVNfU1VQUE9SVEVECi0gICAgaWYgKHNjYW5zYXJnICE9IE5VTEwpCS8qIHByb2Nlc3MgLXNjYW5zIGlmIGl0IHdhcyBwcmVzZW50ICovCisgICAgaWYgKHNjYW5zYXJnICE9IE5VTEwpICAgICAgIC8qIHByb2Nlc3MgLXNjYW5zIGlmIGl0IHdhcyBwcmVzZW50ICovCiAgICAgICBpZiAoISByZWFkX3NjYW5fc2NyaXB0KGNpbmZvLCBzY2Fuc2FyZykpCi0JdXNhZ2UoKTsKKyAgICAgICAgdXNhZ2UoKTsKICNlbmRpZgogICB9CiAKLSAgcmV0dXJuIGFyZ247CQkJLyogcmV0dXJuIGluZGV4IG9mIG5leHQgYXJnIChmaWxlIG5hbWUpICovCisgIHJldHVybiBhcmduOyAgICAgICAgICAgICAgICAgIC8qIHJldHVybiBpbmRleCBvZiBuZXh0IGFyZyAoZmlsZSBuYW1lKSAqLwogfQogCiAKQEAgLTM3NSw3ICszNzUsNyBAQAogICBqdmlydF9iYXJyYXlfcHRyICogZHN0X2NvZWZfYXJyYXlzOwogICBpbnQgZmlsZV9pbmRleDsKICAgLyogV2UgYXNzdW1lIGFsbC1pbi1tZW1vcnkgcHJvY2Vzc2luZyBhbmQgY2FuIHRoZXJlZm9yZSB1c2Ugb25seSBhCi0gICAqIHNpbmdsZSBmaWxlIHBvaW50ZXIgZm9yIHNlcXVlbnRpYWwgaW5wdXQgYW5kIG91dHB1dCBvcGVyYXRpb24uIAorICAgKiBzaW5nbGUgZmlsZSBwb2ludGVyIGZvciBzZXF1ZW50aWFsIGlucHV0IGFuZCBvdXRwdXQgb3BlcmF0aW9uLgogICAgKi8KICAgRklMRSAqIGZwOwogCkBAIC0zODYsNyArMzg2LDcgQEAKIAogICBwcm9nbmFtZSA9IGFyZ3ZbMF07CiAgIGlmIChwcm9nbmFtZSA9PSBOVUxMIHx8IHByb2duYW1lWzBdID09IDApCi0gICAgcHJvZ25hbWUgPSAianBlZ3RyYW4iOwkvKiBpbiBjYXNlIEMgbGlicmFyeSBkb2Vzbid0IHByb3ZpZGUgaXQgKi8KKyAgICBwcm9nbmFtZSA9ICJqcGVndHJhbiI7ICAgICAgLyogaW4gY2FzZSBDIGxpYnJhcnkgZG9lc24ndCBwcm92aWRlIGl0ICovCiAKICAgLyogSW5pdGlhbGl6ZSB0aGUgSlBFRyBkZWNvbXByZXNzaW9uIG9iamVjdCB3aXRoIGRlZmF1bHQgZXJyb3IgaGFuZGxpbmcuICovCiAgIHNyY2luZm8uZXJyID0ganBlZ19zdGRfZXJyb3IoJmpzcmNlcnIpOwpAQCAtNDE5LDE0ICs0MTksMTQgQEAKICAgaWYgKG91dGZpbGVuYW1lID09IE5VTEwpIHsKICAgICBpZiAoZmlsZV9pbmRleCAhPSBhcmdjLTIpIHsKICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IG11c3QgbmFtZSBvbmUgaW5wdXQgYW5kIG9uZSBvdXRwdXQgZmlsZVxuIiwKLQkgICAgICBwcm9nbmFtZSk7CisgICAgICAgICAgICAgIHByb2duYW1lKTsKICAgICAgIHVzYWdlKCk7CiAgICAgfQogICAgIG91dGZpbGVuYW1lID0gYXJndltmaWxlX2luZGV4KzFdOwogICB9IGVsc2UgewogICAgIGlmIChmaWxlX2luZGV4ICE9IGFyZ2MtMSkgewogICAgICAgZnByaW50ZihzdGRlcnIsICIlczogbXVzdCBuYW1lIG9uZSBpbnB1dCBhbmQgb25lIG91dHB1dCBmaWxlXG4iLAotCSAgICAgIHByb2duYW1lKTsKKyAgICAgICAgICAgICAgcHJvZ25hbWUpOwogICAgICAgdXNhZ2UoKTsKICAgICB9CiAgIH0KQEAgLTQ4NSw4ICs0ODUsOCBAQAogICAgKi8KICNpZiBUUkFOU0ZPUk1TX1NVUFBPUlRFRAogICBkc3RfY29lZl9hcnJheXMgPSBqdHJhbnNmb3JtX2FkanVzdF9wYXJhbWV0ZXJzKCZzcmNpbmZvLCAmZHN0aW5mbywKLQkJCQkJCSBzcmNfY29lZl9hcnJheXMsCi0JCQkJCQkgJnRyYW5zZm9ybW9wdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2NvZWZfYXJyYXlzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0cmFuc2Zvcm1vcHRpb24pOwogI2Vsc2UKICAgZHN0X2NvZWZfYXJyYXlzID0gc3JjX2NvZWZfYXJyYXlzOwogI2VuZGlmCkBAIC01MjcsOCArNTI3LDggQEAKICAgLyogRXhlY3V0ZSBpbWFnZSB0cmFuc2Zvcm1hdGlvbiwgaWYgYW55ICovCiAjaWYgVFJBTlNGT1JNU19TVVBQT1JURUQKICAganRyYW5zZm9ybV9leGVjdXRlX3RyYW5zZm9ybWF0aW9uKCZzcmNpbmZvLCAmZHN0aW5mbywKLQkJCQkgICAgc3JjX2NvZWZfYXJyYXlzLAotCQkJCSAgICAmdHJhbnNmb3Jtb3B0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19jb2VmX2FycmF5cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0cmFuc2Zvcm1vcHRpb24pOwogI2VuZGlmCiAKICAgLyogRmluaXNoIGNvbXByZXNzaW9uIGFuZCByZWxlYXNlIG1lbW9yeSAqLwpAQCAtNTQ3LDUgKzU0Nyw1IEBACiAKICAgLyogQWxsIGRvbmUuICovCiAgIGV4aXQoanNyY2Vyci5udW1fd2FybmluZ3MgKyBqZHN0ZXJyLm51bV93YXJuaW5ncyA/RVhJVF9XQVJOSU5HOkVYSVRfU1VDQ0VTUyk7Ci0gIHJldHVybiAwOwkJCS8qIHN1cHByZXNzIG5vLXJldHVybi12YWx1ZSB3YXJuaW5ncyAqLworICByZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgICAvKiBzdXBwcmVzcyBuby1yZXR1cm4tdmFsdWUgd2FybmluZ3MgKi8KIH0KZGlmZiAtLWdpdCBhL2pxdWFudDEuYyBiL2pxdWFudDEuYwppbmRleCA5ZGE0MjBkLi5kYmNkZDI3IDEwMDY0NAotLS0gYS9qcXVhbnQxLmMKKysrIGIvanF1YW50MS5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIFRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlOgogICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTYsIFRob21hcyBHLiBMYW5lLgotICogTW9kaWZpY2F0aW9uczoKKyAqIGxpYmpwZWctdHVyYm8gTW9kaWZpY2F0aW9uczoKICAqIENvcHlyaWdodCAoQykgMjAwOSwgRC4gUi4gQ29tbWFuZGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuCiAgKgpAQCAtNzAsOSArNzAsOSBAQAogICogdGFibGUgaW4gYm90aCBkaXJlY3Rpb25zLgogICovCiAKLSNkZWZpbmUgT0RJVEhFUl9TSVpFICAxNgkvKiBkaW1lbnNpb24gb2YgZGl0aGVyIG1hdHJpeCAqLworI2RlZmluZSBPRElUSEVSX1NJWkUgIDE2ICAgICAgICAvKiBkaW1lbnNpb24gb2YgZGl0aGVyIG1hdHJpeCAqLwogLyogTkI6IGlmIE9ESVRIRVJfU0laRSBpcyBub3QgYSBwb3dlciBvZiAyLCBPRElUSEVSX01BU0sgdXNlcyB3aWxsIGJyZWFrICovCi0jZGVmaW5lIE9ESVRIRVJfQ0VMTFMgKE9ESVRIRVJfU0laRSpPRElUSEVSX1NJWkUpCS8qICMgY2VsbHMgaW4gbWF0cml4ICovCisjZGVmaW5lIE9ESVRIRVJfQ0VMTFMgKE9ESVRIRVJfU0laRSpPRElUSEVSX1NJWkUpICAgICAgIC8qICMgY2VsbHMgaW4gbWF0cml4ICovCiAjZGVmaW5lIE9ESVRIRVJfTUFTSyAgKE9ESVRIRVJfU0laRS0xKSAvKiBtYXNrIGZvciB3cmFwcGluZyBhcm91bmQgY291bnRlcnMgKi8KIAogdHlwZWRlZiBpbnQgT0RJVEhFUl9NQVRSSVhbT0RJVEhFUl9TSVpFXVtPRElUSEVSX1NJWkVdOwpAQCAtMTA3LDggKzEwNyw4IEBACiAgKiBFcnJvcnMgYXJlIGFjY3VtdWxhdGVkIGludG8gdGhlIGFycmF5IGZzZXJyb3JzW10sIGF0IGEgcmVzb2x1dGlvbiBvZgogICogMS8xNnRoIG9mIGEgcGl4ZWwgY291bnQuICBUaGUgZXJyb3IgYXQgYSBnaXZlbiBwaXhlbCBpcyBwcm9wYWdhdGVkCiAgKiB0byBpdHMgbm90LXlldC1wcm9jZXNzZWQgbmVpZ2hib3JzIHVzaW5nIHRoZSBzdGFuZGFyZCBGLVMgZnJhY3Rpb25zLAotICoJCS4uLgkoaGVyZSkJNy8xNgotICoJCTMvMTYJNS8xNgkxLzE2CisgKiAgICAgICAgICAgICAgLi4uICAgICAoaGVyZSkgIDcvMTYKKyAqICAgICAgICAgICAgICAzLzE2ICAgIDUvMTYgICAgMS8xNgogICogV2Ugd29yayBsZWZ0LXRvLXJpZ2h0IG9uIGV2ZW4gcm93cywgcmlnaHQtdG8tbGVmdCBvbiBvZGQgcm93cy4KICAqCiAgKiBXZSBjYW4gZ2V0IGF3YXkgd2l0aCBhIHNpbmdsZSBhcnJheSAoaG9sZGluZyBvbmUgcm93J3Mgd29ydGggb2YgZXJyb3JzKQpAQCAtMTI3LDQzICsxMjcsNDMgQEAKICAqLwogCiAjaWYgQklUU19JTl9KU0FNUExFID09IDgKLXR5cGVkZWYgSU5UMTYgRlNFUlJPUjsJCS8qIDE2IGJpdHMgc2hvdWxkIGJlIGVub3VnaCAqLwotdHlwZWRlZiBpbnQgTE9DRlNFUlJPUjsJCS8qIHVzZSAnaW50JyBmb3IgY2FsY3VsYXRpb24gdGVtcHMgKi8KK3R5cGVkZWYgSU5UMTYgRlNFUlJPUjsgICAgICAgICAgLyogMTYgYml0cyBzaG91bGQgYmUgZW5vdWdoICovCit0eXBlZGVmIGludCBMT0NGU0VSUk9SOyAgICAgICAgIC8qIHVzZSAnaW50JyBmb3IgY2FsY3VsYXRpb24gdGVtcHMgKi8KICNlbHNlCi10eXBlZGVmIElOVDMyIEZTRVJST1I7CQkvKiBtYXkgbmVlZCBtb3JlIHRoYW4gMTYgYml0cyAqLwotdHlwZWRlZiBJTlQzMiBMT0NGU0VSUk9SOwkvKiBiZSBzdXJlIGNhbGN1bGF0aW9uIHRlbXBzIGFyZSBiaWcgZW5vdWdoICovCit0eXBlZGVmIElOVDMyIEZTRVJST1I7ICAgICAgICAgIC8qIG1heSBuZWVkIG1vcmUgdGhhbiAxNiBiaXRzICovCit0eXBlZGVmIElOVDMyIExPQ0ZTRVJST1I7ICAgICAgIC8qIGJlIHN1cmUgY2FsY3VsYXRpb24gdGVtcHMgYXJlIGJpZyBlbm91Z2ggKi8KICNlbmRpZgogCi10eXBlZGVmIEZTRVJST1IgRkFSICpGU0VSUlBUUjsJLyogcG9pbnRlciB0byBlcnJvciBhcnJheSAoaW4gRkFSIHN0b3JhZ2UhKSAqLwordHlwZWRlZiBGU0VSUk9SIEZBUiAqRlNFUlJQVFI7ICAvKiBwb2ludGVyIHRvIGVycm9yIGFycmF5IChpbiBGQVIgc3RvcmFnZSEpICovCiAKIAogLyogUHJpdmF0ZSBzdWJvYmplY3QgKi8KIAotI2RlZmluZSBNQVhfUV9DT01QUyA0CQkvKiBtYXggY29tcG9uZW50cyBJIGNhbiBoYW5kbGUgKi8KKyNkZWZpbmUgTUFYX1FfQ09NUFMgNCAgICAgICAgICAgLyogbWF4IGNvbXBvbmVudHMgSSBjYW4gaGFuZGxlICovCiAKIHR5cGVkZWYgc3RydWN0IHsKICAgc3RydWN0IGpwZWdfY29sb3JfcXVhbnRpemVyIHB1YjsgLyogcHVibGljIGZpZWxkcyAqLwogCiAgIC8qIEluaXRpYWxseSBhbGxvY2F0ZWQgY29sb3JtYXAgaXMgc2F2ZWQgaGVyZSAqLwotICBKU0FNUEFSUkFZIHN2X2NvbG9ybWFwOwkvKiBUaGUgY29sb3IgbWFwIGFzIGEgMi1EIHBpeGVsIGFycmF5ICovCi0gIGludCBzdl9hY3R1YWw7CQkvKiBudW1iZXIgb2YgZW50cmllcyBpbiB1c2UgKi8KKyAgSlNBTVBBUlJBWSBzdl9jb2xvcm1hcDsgICAgICAgLyogVGhlIGNvbG9yIG1hcCBhcyBhIDItRCBwaXhlbCBhcnJheSAqLworICBpbnQgc3ZfYWN0dWFsOyAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgZW50cmllcyBpbiB1c2UgKi8KIAotICBKU0FNUEFSUkFZIGNvbG9yaW5kZXg7CS8qIFByZWNvbXB1dGVkIG1hcHBpbmcgZm9yIHNwZWVkICovCisgIEpTQU1QQVJSQVkgY29sb3JpbmRleDsgICAgICAgIC8qIFByZWNvbXB1dGVkIG1hcHBpbmcgZm9yIHNwZWVkICovCiAgIC8qIGNvbG9yaW5kZXhbaV1bal0gPSBpbmRleCBvZiBjb2xvciBjbG9zZXN0IHRvIHBpeGVsIHZhbHVlIGogaW4gY29tcG9uZW50IGksCiAgICAqIHByZW11bHRpcGxpZWQgYXMgZGVzY3JpYmVkIGFib3ZlLiAgU2luY2UgY29sb3JtYXAgaW5kZXhlcyBtdXN0IGZpdCBpbnRvCiAgICAqIEpTQU1QTEVzLCB0aGUgZW50cmllcyBvZiB0aGlzIGFycmF5IHdpbGwgdG9vLgogICAgKi8KLSAgYm9vbGVhbiBpc19wYWRkZWQ7CQkvKiBpcyB0aGUgY29sb3JpbmRleCBwYWRkZWQgZm9yIG9kaXRoZXI/ICovCisgIGJvb2xlYW4gaXNfcGFkZGVkOyAgICAgICAgICAgIC8qIGlzIHRoZSBjb2xvcmluZGV4IHBhZGRlZCBmb3Igb2RpdGhlcj8gKi8KIAotICBpbnQgTmNvbG9yc1tNQVhfUV9DT01QU107CS8qICMgb2YgdmFsdWVzIGFsbG9jZWQgdG8gZWFjaCBjb21wb25lbnQgKi8KKyAgaW50IE5jb2xvcnNbTUFYX1FfQ09NUFNdOyAgICAgLyogIyBvZiB2YWx1ZXMgYWxsb2NlZCB0byBlYWNoIGNvbXBvbmVudCAqLwogCiAgIC8qIFZhcmlhYmxlcyBmb3Igb3JkZXJlZCBkaXRoZXJpbmcgKi8KLSAgaW50IHJvd19pbmRleDsJCS8qIGN1ciByb3cncyB2ZXJ0aWNhbCBpbmRleCBpbiBkaXRoZXIgbWF0cml4ICovCisgIGludCByb3dfaW5kZXg7ICAgICAgICAgICAgICAgIC8qIGN1ciByb3cncyB2ZXJ0aWNhbCBpbmRleCBpbiBkaXRoZXIgbWF0cml4ICovCiAgIE9ESVRIRVJfTUFUUklYX1BUUiBvZGl0aGVyW01BWF9RX0NPTVBTXTsgLyogb25lIGRpdGhlciBhcnJheSBwZXIgY29tcG9uZW50ICovCiAKICAgLyogVmFyaWFibGVzIGZvciBGbG95ZC1TdGVpbmJlcmcgZGl0aGVyaW5nICovCiAgIEZTRVJSUFRSIGZzZXJyb3JzW01BWF9RX0NPTVBTXTsgLyogYWNjdW11bGF0ZWQgZXJyb3JzICovCi0gIGJvb2xlYW4gb25fb2RkX3JvdzsJCS8qIGZsYWcgdG8gcmVtZW1iZXIgd2hpY2ggcm93IHdlIGFyZSBvbiAqLworICBib29sZWFuIG9uX29kZF9yb3c7ICAgICAgICAgICAvKiBmbGFnIHRvIHJlbWVtYmVyIHdoaWNoIHJvdyB3ZSBhcmUgb24gKi8KIH0gbXlfY3F1YW50aXplcjsKIAogdHlwZWRlZiBteV9jcXVhbnRpemVyICogbXlfY3F1YW50aXplX3B0cjsKQEAgLTIwNSwxMSArMjA1LDExIEBACiAgIGlyb290ID0gMTsKICAgZG8gewogICAgIGlyb290Kys7Ci0gICAgdGVtcCA9IGlyb290OwkJLyogc2V0IHRlbXAgPSBpcm9vdCAqKiBuYyAqLworICAgIHRlbXAgPSBpcm9vdDsgICAgICAgICAgICAgICAvKiBzZXQgdGVtcCA9IGlyb290ICoqIG5jICovCiAgICAgZm9yIChpID0gMTsgaSA8IG5jOyBpKyspCiAgICAgICB0ZW1wICo9IGlyb290OwogICB9IHdoaWxlICh0ZW1wIDw9IChsb25nKSBtYXhfY29sb3JzKTsgLyogcmVwZWF0IHRpbGwgaXJvb3QgZXhjZWVkcyByb290ICovCi0gIGlyb290LS07CQkJLyogbm93IGlyb290ID0gZmxvb3Iocm9vdCkgKi8KKyAgaXJvb3QtLTsgICAgICAgICAgICAgICAgICAgICAgLyogbm93IGlyb290ID0gZmxvb3Iocm9vdCkgKi8KIAogICAvKiBNdXN0IGhhdmUgYXQgbGVhc3QgMiBjb2xvciB2YWx1ZXMgcGVyIGNvbXBvbmVudCAqLwogICBpZiAoaXJvb3QgPCAyKQpAQCAtMjMzLDEwICsyMzMsMTAgQEAKICAgICAgIGogPSAoY2luZm8tPm91dF9jb2xvcl9zcGFjZSA9PSBKQ1NfUkdCID8gUkdCX29yZGVyW2ldIDogaSk7CiAgICAgICAvKiBjYWxjdWxhdGUgbmV3IHRvdGFsX2NvbG9ycyBpZiBOY29sb3JzW2pdIGlzIGluY3JlbWVudGVkICovCiAgICAgICB0ZW1wID0gdG90YWxfY29sb3JzIC8gTmNvbG9yc1tqXTsKLSAgICAgIHRlbXAgKj0gTmNvbG9yc1tqXSsxOwkvKiBkb25lIGluIGxvbmcgYXJpdGggdG8gYXZvaWQgb2ZsbyAqLworICAgICAgdGVtcCAqPSBOY29sb3JzW2pdKzE7ICAgICAvKiBkb25lIGluIGxvbmcgYXJpdGggdG8gYXZvaWQgb2ZsbyAqLwogICAgICAgaWYgKHRlbXAgPiAobG9uZykgbWF4X2NvbG9ycykKLQlicmVhazsJCQkvKiB3b24ndCBmaXQsIGRvbmUgd2l0aCB0aGlzIHBhc3MgKi8KLSAgICAgIE5jb2xvcnNbal0rKzsJCS8qIE9LLCBhcHBseSB0aGUgaW5jcmVtZW50ICovCisgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgIC8qIHdvbid0IGZpdCwgZG9uZSB3aXRoIHRoaXMgcGFzcyAqLworICAgICAgTmNvbG9yc1tqXSsrOyAgICAgICAgICAgICAvKiBPSywgYXBwbHkgdGhlIGluY3JlbWVudCAqLwogICAgICAgdG90YWxfY29sb3JzID0gKGludCkgdGVtcDsKICAgICAgIGNoYW5nZWQgPSBUUlVFOwogICAgIH0KQEAgLTI3OCw4ICsyNzgsOCBAQAogY3JlYXRlX2NvbG9ybWFwIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQogewogICBteV9jcXVhbnRpemVfcHRyIGNxdWFudGl6ZSA9IChteV9jcXVhbnRpemVfcHRyKSBjaW5mby0+Y3F1YW50aXplOwotICBKU0FNUEFSUkFZIGNvbG9ybWFwOwkJLyogQ3JlYXRlZCBjb2xvcm1hcCAqLwotICBpbnQgdG90YWxfY29sb3JzOwkJLyogTnVtYmVyIG9mIGRpc3RpbmN0IG91dHB1dCBjb2xvcnMgKi8KKyAgSlNBTVBBUlJBWSBjb2xvcm1hcDsgICAgICAgICAgLyogQ3JlYXRlZCBjb2xvcm1hcCAqLworICBpbnQgdG90YWxfY29sb3JzOyAgICAgICAgICAgICAvKiBOdW1iZXIgb2YgZGlzdGluY3Qgb3V0cHV0IGNvbG9ycyAqLwogICBpbnQgaSxqLGssIG5jaSwgYmxrc2l6ZSwgYmxrZGlzdCwgcHRyLCB2YWw7CiAKICAgLyogU2VsZWN0IG51bWJlciBvZiBjb2xvcnMgZm9yIGVhY2ggY29tcG9uZW50ICovCkBAIC0yODgsOCArMjg4LDggQEAKICAgLyogUmVwb3J0IHNlbGVjdGVkIGNvbG9yIGNvdW50cyAqLwogICBpZiAoY2luZm8tPm91dF9jb2xvcl9jb21wb25lbnRzID09IDMpCiAgICAgVFJBQ0VNUzQoY2luZm8sIDEsIEpUUkNfUVVBTlRfM19OQ09MT1JTLAotCSAgICAgdG90YWxfY29sb3JzLCBjcXVhbnRpemUtPk5jb2xvcnNbMF0sCi0JICAgICBjcXVhbnRpemUtPk5jb2xvcnNbMV0sIGNxdWFudGl6ZS0+TmNvbG9yc1syXSk7CisgICAgICAgICAgICAgdG90YWxfY29sb3JzLCBjcXVhbnRpemUtPk5jb2xvcnNbMF0sCisgICAgICAgICAgICAgY3F1YW50aXplLT5OY29sb3JzWzFdLCBjcXVhbnRpemUtPk5jb2xvcnNbMl0pOwogICBlbHNlCiAgICAgVFJBQ0VNUzEoY2luZm8sIDEsIEpUUkNfUVVBTlRfTkNPTE9SUywgdG90YWxfY29sb3JzKTsKIApAQCAtMzE0LDEyICszMTQsMTIgQEAKICAgICAgIHZhbCA9IG91dHB1dF92YWx1ZShjaW5mbywgaSwgaiwgbmNpLTEpOwogICAgICAgLyogRmlsbCBpbiBhbGwgY29sb3JtYXAgZW50cmllcyB0aGF0IGhhdmUgdGhpcyB2YWx1ZSBvZiB0aGlzIGNvbXBvbmVudCAqLwogICAgICAgZm9yIChwdHIgPSBqICogYmxrc2l6ZTsgcHRyIDwgdG90YWxfY29sb3JzOyBwdHIgKz0gYmxrZGlzdCkgewotCS8qIGZpbGwgaW4gYmxrc2l6ZSBlbnRyaWVzIGJlZ2lubmluZyBhdCBwdHIgKi8KLQlmb3IgKGsgPSAwOyBrIDwgYmxrc2l6ZTsgaysrKQotCSAgY29sb3JtYXBbaV1bcHRyK2tdID0gKEpTQU1QTEUpIHZhbDsKKyAgICAgICAgLyogZmlsbCBpbiBibGtzaXplIGVudHJpZXMgYmVnaW5uaW5nIGF0IHB0ciAqLworICAgICAgICBmb3IgKGsgPSAwOyBrIDwgYmxrc2l6ZTsgaysrKQorICAgICAgICAgIGNvbG9ybWFwW2ldW3B0citrXSA9IChKU0FNUExFKSB2YWw7CiAgICAgICB9CiAgICAgfQotICAgIGJsa2Rpc3QgPSBibGtzaXplOwkJLyogYmxrc2l6ZSBvZiB0aGlzIGNvbG9yIGlzIGJsa2Rpc3Qgb2YgbmV4dCAqLworICAgIGJsa2Rpc3QgPSBibGtzaXplOyAgICAgICAgICAvKiBibGtzaXplIG9mIHRoaXMgY29sb3IgaXMgYmxrZGlzdCBvZiBuZXh0ICovCiAgIH0KIAogICAvKiBTYXZlIHRoZSBjb2xvcm1hcCBpbiBwcml2YXRlIHN0b3JhZ2UsCkBAIC0zNzcsMTYgKzM3NywxNiBAQAogICAgIHZhbCA9IDA7CiAgICAgayA9IGxhcmdlc3RfaW5wdXRfdmFsdWUoY2luZm8sIGksIDAsIG5jaS0xKTsKICAgICBmb3IgKGogPSAwOyBqIDw9IE1BWEpTQU1QTEU7IGorKykgewotICAgICAgd2hpbGUgKGogPiBrKQkJLyogYWR2YW5jZSB2YWwgaWYgcGFzdCBib3VuZGFyeSAqLwotCWsgPSBsYXJnZXN0X2lucHV0X3ZhbHVlKGNpbmZvLCBpLCArK3ZhbCwgbmNpLTEpOworICAgICAgd2hpbGUgKGogPiBrKSAgICAgICAgICAgICAvKiBhZHZhbmNlIHZhbCBpZiBwYXN0IGJvdW5kYXJ5ICovCisgICAgICAgIGsgPSBsYXJnZXN0X2lucHV0X3ZhbHVlKGNpbmZvLCBpLCArK3ZhbCwgbmNpLTEpOwogICAgICAgLyogcHJlbXVsdGlwbHkgc28gdGhhdCBubyBtdWx0aXBsaWNhdGlvbiBuZWVkZWQgaW4gbWFpbiBwcm9jZXNzaW5nICovCiAgICAgICBpbmRleHB0cltqXSA9IChKU0FNUExFKSAodmFsICogYmxrc2l6ZSk7CiAgICAgfQogICAgIC8qIFBhZCBhdCBib3RoIGVuZHMgaWYgbmVjZXNzYXJ5ICovCiAgICAgaWYgKHBhZCkKICAgICAgIGZvciAoaiA9IDE7IGogPD0gTUFYSlNBTVBMRTsgaisrKSB7Ci0JaW5kZXhwdHJbLWpdID0gaW5kZXhwdHJbMF07Ci0JaW5kZXhwdHJbTUFYSlNBTVBMRStqXSA9IGluZGV4cHRyW01BWEpTQU1QTEVdOworICAgICAgICBpbmRleHB0clstal0gPSBpbmRleHB0clswXTsKKyAgICAgICAgaW5kZXhwdHJbTUFYSlNBTVBMRStqXSA9IGluZGV4cHRyW01BWEpTQU1QTEVdOwogICAgICAgfQogICB9CiB9CkBAIC00MDYsNyArNDA2LDcgQEAKIAogICBvZGl0aGVyID0gKE9ESVRIRVJfTUFUUklYX1BUUikKICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAotCQkJCVNJWkVPRihPRElUSEVSX01BVFJJWCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSVpFT0YoT0RJVEhFUl9NQVRSSVgpKTsKICAgLyogVGhlIGludGVyLXZhbHVlIGRpc3RhbmNlIGZvciB0aGlzIGNvbG9yIGlzIE1BWEpTQU1QTEUvKG5jb2xvcnMtMSkuCiAgICAqIEhlbmNlIHRoZSBkaXRoZXIgdmFsdWUgZm9yIHRoZSBtYXRyaXggY2VsbCB3aXRoIGZpbGwgb3JkZXIgZgogICAgKiAoZj0wLi5OLTEpIHNob3VsZCBiZSAoTi0xLTIqZikvKDIqTikgKiBNQVhKU0FNUExFLyhuY29sb3JzLTEpLgpAQCAtNDE2LDcgKzQxNiw3IEBACiAgIGZvciAoaiA9IDA7IGogPCBPRElUSEVSX1NJWkU7IGorKykgewogICAgIGZvciAoayA9IDA7IGsgPCBPRElUSEVSX1NJWkU7IGsrKykgewogICAgICAgbnVtID0gKChJTlQzMikgKE9ESVRIRVJfQ0VMTFMtMSAtIDIqKChpbnQpYmFzZV9kaXRoZXJfbWF0cml4W2pdW2tdKSkpCi0JICAgICogTUFYSlNBTVBMRTsKKyAgICAgICAgICAgICogTUFYSlNBTVBMRTsKICAgICAgIC8qIEVuc3VyZSByb3VuZCB0b3dhcmRzIHplcm8gZGVzcGl0ZSBDJ3MgbGFjayBvZiBjb25zaXN0ZW5jeQogICAgICAgICogYWJvdXQgcm91bmRpbmcgbmVnYXRpdmUgdmFsdWVzIGluIGludGVnZXIgZGl2aXNpb24uLi4KICAgICAgICAqLwpAQCAtNDI5LDcgKzQyOSw3IEBACiAKIC8qCiAgKiBDcmVhdGUgdGhlIG9yZGVyZWQtZGl0aGVyIHRhYmxlcy4KLSAqIENvbXBvbmVudHMgaGF2aW5nIHRoZSBzYW1lIG51bWJlciBvZiByZXByZXNlbnRhdGl2ZSBjb2xvcnMgbWF5IAorICogQ29tcG9uZW50cyBoYXZpbmcgdGhlIHNhbWUgbnVtYmVyIG9mIHJlcHJlc2VudGF0aXZlIGNvbG9ycyBtYXkKICAqIHNoYXJlIGEgZGl0aGVyIHRhYmxlLgogICovCiAKQEAgLTQ0MiwxNCArNDQyLDE0IEBACiAKICAgZm9yIChpID0gMDsgaSA8IGNpbmZvLT5vdXRfY29sb3JfY29tcG9uZW50czsgaSsrKSB7CiAgICAgbmNpID0gY3F1YW50aXplLT5OY29sb3JzW2ldOyAvKiAjIG9mIGRpc3RpbmN0IHZhbHVlcyBmb3IgdGhpcyBjb2xvciAqLwotICAgIG9kaXRoZXIgPSBOVUxMOwkJLyogc2VhcmNoIGZvciBtYXRjaGluZyBwcmlvciBjb21wb25lbnQgKi8KKyAgICBvZGl0aGVyID0gTlVMTDsgICAgICAgICAgICAgLyogc2VhcmNoIGZvciBtYXRjaGluZyBwcmlvciBjb21wb25lbnQgKi8KICAgICBmb3IgKGogPSAwOyBqIDwgaTsgaisrKSB7CiAgICAgICBpZiAobmNpID09IGNxdWFudGl6ZS0+TmNvbG9yc1tqXSkgewotCW9kaXRoZXIgPSBjcXVhbnRpemUtPm9kaXRoZXJbal07Ci0JYnJlYWs7CisgICAgICAgIG9kaXRoZXIgPSBjcXVhbnRpemUtPm9kaXRoZXJbal07CisgICAgICAgIGJyZWFrOwogICAgICAgfQogICAgIH0KLSAgICBpZiAob2RpdGhlciA9PSBOVUxMKQkvKiBuZWVkIGEgbmV3IHRhYmxlPyAqLworICAgIGlmIChvZGl0aGVyID09IE5VTEwpICAgICAgICAvKiBuZWVkIGEgbmV3IHRhYmxlPyAqLwogICAgICAgb2RpdGhlciA9IG1ha2Vfb2RpdGhlcl9hcnJheShjaW5mbywgbmNpKTsKICAgICBjcXVhbnRpemUtPm9kaXRoZXJbaV0gPSBvZGl0aGVyOwogICB9CkBAIC00NjIsNyArNDYyLDcgQEAKIAogTUVUSE9EREVGKHZvaWQpCiBjb2xvcl9xdWFudGl6ZSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBBUlJBWSBpbnB1dF9idWYsCi0JCUpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKQorICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKQogLyogR2VuZXJhbCBjYXNlLCBubyBkaXRoZXJpbmcgKi8KIHsKICAgbXlfY3F1YW50aXplX3B0ciBjcXVhbnRpemUgPSAobXlfY3F1YW50aXplX3B0cikgY2luZm8tPmNxdWFudGl6ZTsKQEAgLTQ4MCw3ICs0ODAsNyBAQAogICAgIGZvciAoY29sID0gd2lkdGg7IGNvbCA+IDA7IGNvbC0tKSB7CiAgICAgICBwaXhjb2RlID0gMDsKICAgICAgIGZvciAoY2kgPSAwOyBjaSA8IG5jOyBjaSsrKSB7Ci0JcGl4Y29kZSArPSBHRVRKU0FNUExFKGNvbG9yaW5kZXhbY2ldW0dFVEpTQU1QTEUoKnB0cmluKyspXSk7CisgICAgICAgIHBpeGNvZGUgKz0gR0VUSlNBTVBMRShjb2xvcmluZGV4W2NpXVtHRVRKU0FNUExFKCpwdHJpbisrKV0pOwogICAgICAgfQogICAgICAgKnB0cm91dCsrID0gKEpTQU1QTEUpIHBpeGNvZGU7CiAgICAgfQpAQCAtNDkwLDcgKzQ5MCw3IEBACiAKIE1FVEhPRERFRih2b2lkKQogY29sb3JfcXVhbnRpemUzIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwKLQkJIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKQorICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIGludCBudW1fcm93cykKIC8qIEZhc3QgcGF0aCBmb3Igb3V0X2NvbG9yX2NvbXBvbmVudHM9PTMsIG5vIGRpdGhlcmluZyAqLwogewogICBteV9jcXVhbnRpemVfcHRyIGNxdWFudGl6ZSA9IChteV9jcXVhbnRpemVfcHRyKSBjaW5mby0+Y3F1YW50aXplOwpAQCAtNTE4LDE1ICs1MTgsMTUgQEAKIAogTUVUSE9EREVGKHZvaWQpCiBxdWFudGl6ZV9vcmRfZGl0aGVyIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwKLQkJICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIGludCBudW1fcm93cykKKyAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKQogLyogR2VuZXJhbCBjYXNlLCB3aXRoIG9yZGVyZWQgZGl0aGVyaW5nICovCiB7CiAgIG15X2NxdWFudGl6ZV9wdHIgY3F1YW50aXplID0gKG15X2NxdWFudGl6ZV9wdHIpIGNpbmZvLT5jcXVhbnRpemU7CiAgIHJlZ2lzdGVyIEpTQU1QUk9XIGlucHV0X3B0cjsKICAgcmVnaXN0ZXIgSlNBTVBST1cgb3V0cHV0X3B0cjsKICAgSlNBTVBST1cgY29sb3JpbmRleF9jaTsKLSAgaW50ICogZGl0aGVyOwkJCS8qIHBvaW50cyB0byBhY3RpdmUgcm93IG9mIGRpdGhlciBtYXRyaXggKi8KLSAgaW50IHJvd19pbmRleCwgY29sX2luZGV4OwkvKiBjdXJyZW50IGluZGV4ZXMgaW50byBkaXRoZXIgbWF0cml4ICovCisgIGludCAqIGRpdGhlcjsgICAgICAgICAgICAgICAgIC8qIHBvaW50cyB0byBhY3RpdmUgcm93IG9mIGRpdGhlciBtYXRyaXggKi8KKyAgaW50IHJvd19pbmRleCwgY29sX2luZGV4OyAgICAgLyogY3VycmVudCBpbmRleGVzIGludG8gZGl0aGVyIG1hdHJpeCAqLwogICBpbnQgbmMgPSBjaW5mby0+b3V0X2NvbG9yX2NvbXBvbmVudHM7CiAgIGludCBjaTsKICAgaW50IHJvdzsKQEAgLTUzNiw3ICs1MzYsNyBAQAogICBmb3IgKHJvdyA9IDA7IHJvdyA8IG51bV9yb3dzOyByb3crKykgewogICAgIC8qIEluaXRpYWxpemUgb3V0cHV0IHZhbHVlcyB0byAwIHNvIGNhbiBwcm9jZXNzIGNvbXBvbmVudHMgc2VwYXJhdGVseSAqLwogICAgIGp6ZXJvX2Zhcigodm9pZCBGQVIgKikgb3V0cHV0X2J1Zltyb3ddLAotCSAgICAgIChzaXplX3QpICh3aWR0aCAqIFNJWkVPRihKU0FNUExFKSkpOworICAgICAgICAgICAgICAoc2l6ZV90KSAod2lkdGggKiBTSVpFT0YoSlNBTVBMRSkpKTsKICAgICByb3dfaW5kZXggPSBjcXVhbnRpemUtPnJvd19pbmRleDsKICAgICBmb3IgKGNpID0gMDsgY2kgPCBuYzsgY2krKykgewogICAgICAgaW5wdXRfcHRyID0gaW5wdXRfYnVmW3Jvd10gKyBjaTsKQEAgLTU0NiwxNyArNTQ2LDE3IEBACiAgICAgICBjb2xfaW5kZXggPSAwOwogCiAgICAgICBmb3IgKGNvbCA9IHdpZHRoOyBjb2wgPiAwOyBjb2wtLSkgewotCS8qIEZvcm0gcGl4ZWwgdmFsdWUgKyBkaXRoZXIsIHJhbmdlLWxpbWl0IHRvIDAuLk1BWEpTQU1QTEUsCi0JICogc2VsZWN0IG91dHB1dCB2YWx1ZSwgYWNjdW11bGF0ZSBpbnRvIG91dHB1dCBjb2RlIGZvciB0aGlzIHBpeGVsLgotCSAqIFJhbmdlLWxpbWl0aW5nIG5lZWQgbm90IGJlIGRvbmUgZXhwbGljaXRseSwgYXMgd2UgaGF2ZSBleHRlbmRlZAotCSAqIHRoZSBjb2xvcmluZGV4IHRhYmxlIHRvIHByb2R1Y2UgdGhlIHJpZ2h0IGFuc3dlcnMgZm9yIG91dC1vZi1yYW5nZQotCSAqIGlucHV0cy4gIFRoZSBtYXhpbXVtIGRpdGhlciBpcyArLSBNQVhKU0FNUExFOyB0aGlzIHNldHMgdGhlCi0JICogcmVxdWlyZWQgYW1vdW50IG9mIHBhZGRpbmcuCi0JICovCi0JKm91dHB1dF9wdHIgKz0gY29sb3JpbmRleF9jaVtHRVRKU0FNUExFKCppbnB1dF9wdHIpK2RpdGhlcltjb2xfaW5kZXhdXTsKLQlpbnB1dF9wdHIgKz0gbmM7Ci0Jb3V0cHV0X3B0cisrOwotCWNvbF9pbmRleCA9IChjb2xfaW5kZXggKyAxKSAmIE9ESVRIRVJfTUFTSzsKKyAgICAgICAgLyogRm9ybSBwaXhlbCB2YWx1ZSArIGRpdGhlciwgcmFuZ2UtbGltaXQgdG8gMC4uTUFYSlNBTVBMRSwKKyAgICAgICAgICogc2VsZWN0IG91dHB1dCB2YWx1ZSwgYWNjdW11bGF0ZSBpbnRvIG91dHB1dCBjb2RlIGZvciB0aGlzIHBpeGVsLgorICAgICAgICAgKiBSYW5nZS1saW1pdGluZyBuZWVkIG5vdCBiZSBkb25lIGV4cGxpY2l0bHksIGFzIHdlIGhhdmUgZXh0ZW5kZWQKKyAgICAgICAgICogdGhlIGNvbG9yaW5kZXggdGFibGUgdG8gcHJvZHVjZSB0aGUgcmlnaHQgYW5zd2VycyBmb3Igb3V0LW9mLXJhbmdlCisgICAgICAgICAqIGlucHV0cy4gIFRoZSBtYXhpbXVtIGRpdGhlciBpcyArLSBNQVhKU0FNUExFOyB0aGlzIHNldHMgdGhlCisgICAgICAgICAqIHJlcXVpcmVkIGFtb3VudCBvZiBwYWRkaW5nLgorICAgICAgICAgKi8KKyAgICAgICAgKm91dHB1dF9wdHIgKz0gY29sb3JpbmRleF9jaVtHRVRKU0FNUExFKCppbnB1dF9wdHIpK2RpdGhlcltjb2xfaW5kZXhdXTsKKyAgICAgICAgaW5wdXRfcHRyICs9IG5jOworICAgICAgICBvdXRwdXRfcHRyKys7CisgICAgICAgIGNvbF9pbmRleCA9IChjb2xfaW5kZXggKyAxKSAmIE9ESVRIRVJfTUFTSzsKICAgICAgIH0KICAgICB9CiAgICAgLyogQWR2YW5jZSByb3cgaW5kZXggZm9yIG5leHQgcm93ICovCkBAIC01NjgsNyArNTY4LDcgQEAKIAogTUVUSE9EREVGKHZvaWQpCiBxdWFudGl6ZTNfb3JkX2RpdGhlciAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBBUlJBWSBpbnB1dF9idWYsCi0JCSAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKQorICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKQogLyogRmFzdCBwYXRoIGZvciBvdXRfY29sb3JfY29tcG9uZW50cz09Mywgd2l0aCBvcmRlcmVkIGRpdGhlcmluZyAqLwogewogICBteV9jcXVhbnRpemVfcHRyIGNxdWFudGl6ZSA9IChteV9jcXVhbnRpemVfcHRyKSBjaW5mby0+Y3F1YW50aXplOwpAQCAtNTc4LDEwICs1NzgsMTAgQEAKICAgSlNBTVBST1cgY29sb3JpbmRleDAgPSBjcXVhbnRpemUtPmNvbG9yaW5kZXhbMF07CiAgIEpTQU1QUk9XIGNvbG9yaW5kZXgxID0gY3F1YW50aXplLT5jb2xvcmluZGV4WzFdOwogICBKU0FNUFJPVyBjb2xvcmluZGV4MiA9IGNxdWFudGl6ZS0+Y29sb3JpbmRleFsyXTsKLSAgaW50ICogZGl0aGVyMDsJCS8qIHBvaW50cyB0byBhY3RpdmUgcm93IG9mIGRpdGhlciBtYXRyaXggKi8KKyAgaW50ICogZGl0aGVyMDsgICAgICAgICAgICAgICAgLyogcG9pbnRzIHRvIGFjdGl2ZSByb3cgb2YgZGl0aGVyIG1hdHJpeCAqLwogICBpbnQgKiBkaXRoZXIxOwogICBpbnQgKiBkaXRoZXIyOwotICBpbnQgcm93X2luZGV4LCBjb2xfaW5kZXg7CS8qIGN1cnJlbnQgaW5kZXhlcyBpbnRvIGRpdGhlciBtYXRyaXggKi8KKyAgaW50IHJvd19pbmRleCwgY29sX2luZGV4OyAgICAgLyogY3VycmVudCBpbmRleGVzIGludG8gZGl0aGVyIG1hdHJpeCAqLwogICBpbnQgcm93OwogICBKRElNRU5TSU9OIGNvbDsKICAgSkRJTUVOU0lPTiB3aWR0aCA9IGNpbmZvLT5vdXRwdXRfd2lkdGg7CkBAIC01OTcsMTEgKzU5NywxMSBAQAogCiAgICAgZm9yIChjb2wgPSB3aWR0aDsgY29sID4gMDsgY29sLS0pIHsKICAgICAgIHBpeGNvZGUgID0gR0VUSlNBTVBMRShjb2xvcmluZGV4MFtHRVRKU0FNUExFKCppbnB1dF9wdHIrKykgKwotCQkJCQlkaXRoZXIwW2NvbF9pbmRleF1dKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXRoZXIwW2NvbF9pbmRleF1dKTsKICAgICAgIHBpeGNvZGUgKz0gR0VUSlNBTVBMRShjb2xvcmluZGV4MVtHRVRKU0FNUExFKCppbnB1dF9wdHIrKykgKwotCQkJCQlkaXRoZXIxW2NvbF9pbmRleF1dKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXRoZXIxW2NvbF9pbmRleF1dKTsKICAgICAgIHBpeGNvZGUgKz0gR0VUSlNBTVBMRShjb2xvcmluZGV4MltHRVRKU0FNUExFKCppbnB1dF9wdHIrKykgKwotCQkJCQlkaXRoZXIyW2NvbF9pbmRleF1dKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXRoZXIyW2NvbF9pbmRleF1dKTsKICAgICAgICpvdXRwdXRfcHRyKysgPSAoSlNBTVBMRSkgcGl4Y29kZTsKICAgICAgIGNvbF9pbmRleCA9IChjb2xfaW5kZXggKyAxKSAmIE9ESVRIRVJfTUFTSzsKICAgICB9CkBAIC02MTMsMjQgKzYxMywyNCBAQAogCiBNRVRIT0RERUYodm9pZCkKIHF1YW50aXplX2ZzX2RpdGhlciAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBBUlJBWSBpbnB1dF9idWYsCi0JCSAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIGludCBudW1fcm93cykKKyAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBpbnQgbnVtX3Jvd3MpCiAvKiBHZW5lcmFsIGNhc2UsIHdpdGggRmxveWQtU3RlaW5iZXJnIGRpdGhlcmluZyAqLwogewogICBteV9jcXVhbnRpemVfcHRyIGNxdWFudGl6ZSA9IChteV9jcXVhbnRpemVfcHRyKSBjaW5mby0+Y3F1YW50aXplOwotICByZWdpc3RlciBMT0NGU0VSUk9SIGN1cjsJLyogY3VycmVudCBlcnJvciBvciBwaXhlbCB2YWx1ZSAqLwotICBMT0NGU0VSUk9SIGJlbG93ZXJyOwkJLyogZXJyb3IgZm9yIHBpeGVsIGJlbG93IGN1ciAqLwotICBMT0NGU0VSUk9SIGJwcmV2ZXJyOwkJLyogZXJyb3IgZm9yIGJlbG93L3ByZXYgY29sICovCi0gIExPQ0ZTRVJST1IgYm5leHRlcnI7CQkvKiBlcnJvciBmb3IgYmVsb3cvbmV4dCBjb2wgKi8KKyAgcmVnaXN0ZXIgTE9DRlNFUlJPUiBjdXI7ICAgICAgLyogY3VycmVudCBlcnJvciBvciBwaXhlbCB2YWx1ZSAqLworICBMT0NGU0VSUk9SIGJlbG93ZXJyOyAgICAgICAgICAvKiBlcnJvciBmb3IgcGl4ZWwgYmVsb3cgY3VyICovCisgIExPQ0ZTRVJST1IgYnByZXZlcnI7ICAgICAgICAgIC8qIGVycm9yIGZvciBiZWxvdy9wcmV2IGNvbCAqLworICBMT0NGU0VSUk9SIGJuZXh0ZXJyOyAgICAgICAgICAvKiBlcnJvciBmb3IgYmVsb3cvbmV4dCBjb2wgKi8KICAgTE9DRlNFUlJPUiBkZWx0YTsKLSAgcmVnaXN0ZXIgRlNFUlJQVFIgZXJyb3JwdHI7CS8qID0+IGZzZXJyb3JzW10gYXQgY29sdW1uIGJlZm9yZSBjdXJyZW50ICovCisgIHJlZ2lzdGVyIEZTRVJSUFRSIGVycm9ycHRyOyAgIC8qID0+IGZzZXJyb3JzW10gYXQgY29sdW1uIGJlZm9yZSBjdXJyZW50ICovCiAgIHJlZ2lzdGVyIEpTQU1QUk9XIGlucHV0X3B0cjsKICAgcmVnaXN0ZXIgSlNBTVBST1cgb3V0cHV0X3B0cjsKICAgSlNBTVBST1cgY29sb3JpbmRleF9jaTsKICAgSlNBTVBST1cgY29sb3JtYXBfY2k7CiAgIGludCBwaXhjb2RlOwogICBpbnQgbmMgPSBjaW5mby0+b3V0X2NvbG9yX2NvbXBvbmVudHM7Ci0gIGludCBkaXI7CQkJLyogMSBmb3IgbGVmdC10by1yaWdodCwgLTEgZm9yIHJpZ2h0LXRvLWxlZnQgKi8KLSAgaW50IGRpcm5jOwkJCS8qIGRpciAqIG5jICovCisgIGludCBkaXI7ICAgICAgICAgICAgICAgICAgICAgIC8qIDEgZm9yIGxlZnQtdG8tcmlnaHQsIC0xIGZvciByaWdodC10by1sZWZ0ICovCisgIGludCBkaXJuYzsgICAgICAgICAgICAgICAgICAgIC8qIGRpciAqIG5jICovCiAgIGludCBjaTsKICAgaW50IHJvdzsKICAgSkRJTUVOU0lPTiBjb2w7CkBAIC02NDEsMjIgKzY0MSwyMiBAQAogICBmb3IgKHJvdyA9IDA7IHJvdyA8IG51bV9yb3dzOyByb3crKykgewogICAgIC8qIEluaXRpYWxpemUgb3V0cHV0IHZhbHVlcyB0byAwIHNvIGNhbiBwcm9jZXNzIGNvbXBvbmVudHMgc2VwYXJhdGVseSAqLwogICAgIGp6ZXJvX2Zhcigodm9pZCBGQVIgKikgb3V0cHV0X2J1Zltyb3ddLAotCSAgICAgIChzaXplX3QpICh3aWR0aCAqIFNJWkVPRihKU0FNUExFKSkpOworICAgICAgICAgICAgICAoc2l6ZV90KSAod2lkdGggKiBTSVpFT0YoSlNBTVBMRSkpKTsKICAgICBmb3IgKGNpID0gMDsgY2kgPCBuYzsgY2krKykgewogICAgICAgaW5wdXRfcHRyID0gaW5wdXRfYnVmW3Jvd10gKyBjaTsKICAgICAgIG91dHB1dF9wdHIgPSBvdXRwdXRfYnVmW3Jvd107CiAgICAgICBpZiAoY3F1YW50aXplLT5vbl9vZGRfcm93KSB7Ci0JLyogd29yayByaWdodCB0byBsZWZ0IGluIHRoaXMgcm93ICovCi0JaW5wdXRfcHRyICs9ICh3aWR0aC0xKSAqIG5jOyAvKiBzbyBwb2ludCB0byByaWdodG1vc3QgcGl4ZWwgKi8KLQlvdXRwdXRfcHRyICs9IHdpZHRoLTE7Ci0JZGlyID0gLTE7Ci0JZGlybmMgPSAtbmM7Ci0JZXJyb3JwdHIgPSBjcXVhbnRpemUtPmZzZXJyb3JzW2NpXSArICh3aWR0aCsxKTsgLyogPT4gZW50cnkgYWZ0ZXIgbGFzdCBjb2x1bW4gKi8KKyAgICAgICAgLyogd29yayByaWdodCB0byBsZWZ0IGluIHRoaXMgcm93ICovCisgICAgICAgIGlucHV0X3B0ciArPSAod2lkdGgtMSkgKiBuYzsgLyogc28gcG9pbnQgdG8gcmlnaHRtb3N0IHBpeGVsICovCisgICAgICAgIG91dHB1dF9wdHIgKz0gd2lkdGgtMTsKKyAgICAgICAgZGlyID0gLTE7CisgICAgICAgIGRpcm5jID0gLW5jOworICAgICAgICBlcnJvcnB0ciA9IGNxdWFudGl6ZS0+ZnNlcnJvcnNbY2ldICsgKHdpZHRoKzEpOyAvKiA9PiBlbnRyeSBhZnRlciBsYXN0IGNvbHVtbiAqLwogICAgICAgfSBlbHNlIHsKLQkvKiB3b3JrIGxlZnQgdG8gcmlnaHQgaW4gdGhpcyByb3cgKi8KLQlkaXIgPSAxOwotCWRpcm5jID0gbmM7Ci0JZXJyb3JwdHIgPSBjcXVhbnRpemUtPmZzZXJyb3JzW2NpXTsgLyogPT4gZW50cnkgYmVmb3JlIGZpcnN0IGNvbHVtbiAqLworICAgICAgICAvKiB3b3JrIGxlZnQgdG8gcmlnaHQgaW4gdGhpcyByb3cgKi8KKyAgICAgICAgZGlyID0gMTsKKyAgICAgICAgZGlybmMgPSBuYzsKKyAgICAgICAgZXJyb3JwdHIgPSBjcXVhbnRpemUtPmZzZXJyb3JzW2NpXTsgLyogPT4gZW50cnkgYmVmb3JlIGZpcnN0IGNvbHVtbiAqLwogICAgICAgfQogICAgICAgY29sb3JpbmRleF9jaSA9IGNxdWFudGl6ZS0+Y29sb3JpbmRleFtjaV07CiAgICAgICBjb2xvcm1hcF9jaSA9IGNxdWFudGl6ZS0+c3ZfY29sb3JtYXBbY2ldOwpAQCAtNjY2LDQ3ICs2NjYsNDcgQEAKICAgICAgIGJlbG93ZXJyID0gYnByZXZlcnIgPSAwOwogCiAgICAgICBmb3IgKGNvbCA9IHdpZHRoOyBjb2wgPiAwOyBjb2wtLSkgewotCS8qIGN1ciBob2xkcyB0aGUgZXJyb3IgcHJvcGFnYXRlZCBmcm9tIHRoZSBwcmV2aW91cyBwaXhlbCBvbiB0aGUKLQkgKiBjdXJyZW50IGxpbmUuICBBZGQgdGhlIGVycm9yIHByb3BhZ2F0ZWQgZnJvbSB0aGUgcHJldmlvdXMgbGluZQotCSAqIHRvIGZvcm0gdGhlIGNvbXBsZXRlIGVycm9yIGNvcnJlY3Rpb24gdGVybSBmb3IgdGhpcyBwaXhlbCwgYW5kCi0JICogcm91bmQgdGhlIGVycm9yIHRlcm0gKHdoaWNoIGlzIGV4cHJlc3NlZCAqIDE2KSB0byBhbiBpbnRlZ2VyLgotCSAqIFJJR0hUX1NISUZUIHJvdW5kcyB0b3dhcmRzIG1pbnVzIGluZmluaXR5LCBzbyBhZGRpbmcgOCBpcyBjb3JyZWN0Ci0JICogZm9yIGVpdGhlciBzaWduIG9mIHRoZSBlcnJvciB2YWx1ZS4KLQkgKiBOb3RlOiBlcnJvcnB0ciBwb2ludHMgdG8gKnByZXZpb3VzKiBjb2x1bW4ncyBhcnJheSBlbnRyeS4KLQkgKi8KLQljdXIgPSBSSUdIVF9TSElGVChjdXIgKyBlcnJvcnB0cltkaXJdICsgOCwgNCk7Ci0JLyogRm9ybSBwaXhlbCB2YWx1ZSArIGVycm9yLCBhbmQgcmFuZ2UtbGltaXQgdG8gMC4uTUFYSlNBTVBMRS4KLQkgKiBUaGUgbWF4aW11bSBlcnJvciBpcyArLSBNQVhKU0FNUExFOyB0aGlzIHNldHMgdGhlIHJlcXVpcmVkIHNpemUKLQkgKiBvZiB0aGUgcmFuZ2VfbGltaXQgYXJyYXkuCi0JICovCi0JY3VyICs9IEdFVEpTQU1QTEUoKmlucHV0X3B0cik7Ci0JY3VyID0gR0VUSlNBTVBMRShyYW5nZV9saW1pdFtjdXJdKTsKLQkvKiBTZWxlY3Qgb3V0cHV0IHZhbHVlLCBhY2N1bXVsYXRlIGludG8gb3V0cHV0IGNvZGUgZm9yIHRoaXMgcGl4ZWwgKi8KLQlwaXhjb2RlID0gR0VUSlNBTVBMRShjb2xvcmluZGV4X2NpW2N1cl0pOwotCSpvdXRwdXRfcHRyICs9IChKU0FNUExFKSBwaXhjb2RlOwotCS8qIENvbXB1dGUgYWN0dWFsIHJlcHJlc2VudGF0aW9uIGVycm9yIGF0IHRoaXMgcGl4ZWwgKi8KLQkvKiBOb3RlOiB3ZSBjYW4gZG8gdGhpcyBldmVuIHRob3VnaCB3ZSBkb24ndCBoYXZlIHRoZSBmaW5hbCAqLwotCS8qIHBpeGVsIGNvZGUsIGJlY2F1c2UgdGhlIGNvbG9ybWFwIGlzIG9ydGhvZ29uYWwuICovCi0JY3VyIC09IEdFVEpTQU1QTEUoY29sb3JtYXBfY2lbcGl4Y29kZV0pOwotCS8qIENvbXB1dGUgZXJyb3IgZnJhY3Rpb25zIHRvIGJlIHByb3BhZ2F0ZWQgdG8gYWRqYWNlbnQgcGl4ZWxzLgotCSAqIEFkZCB0aGVzZSBpbnRvIHRoZSBydW5uaW5nIHN1bXMsIGFuZCBzaW11bHRhbmVvdXNseSBzaGlmdCB0aGUKLQkgKiBuZXh0LWxpbmUgZXJyb3Igc3VtcyBsZWZ0IGJ5IDEgY29sdW1uLgotCSAqLwotCWJuZXh0ZXJyID0gY3VyOwotCWRlbHRhID0gY3VyICogMjsKLQljdXIgKz0gZGVsdGE7CQkvKiBmb3JtIGVycm9yICogMyAqLwotCWVycm9ycHRyWzBdID0gKEZTRVJST1IpIChicHJldmVyciArIGN1cik7Ci0JY3VyICs9IGRlbHRhOwkJLyogZm9ybSBlcnJvciAqIDUgKi8KLQlicHJldmVyciA9IGJlbG93ZXJyICsgY3VyOwotCWJlbG93ZXJyID0gYm5leHRlcnI7Ci0JY3VyICs9IGRlbHRhOwkJLyogZm9ybSBlcnJvciAqIDcgKi8KLQkvKiBBdCB0aGlzIHBvaW50IGN1ciBjb250YWlucyB0aGUgNy8xNiBlcnJvciB2YWx1ZSB0byBiZSBwcm9wYWdhdGVkCi0JICogdG8gdGhlIG5leHQgcGl4ZWwgb24gdGhlIGN1cnJlbnQgbGluZSwgYW5kIGFsbCB0aGUgZXJyb3JzIGZvciB0aGUKLQkgKiBuZXh0IGxpbmUgaGF2ZSBiZWVuIHNoaWZ0ZWQgb3Zlci4gV2UgYXJlIHRoZXJlZm9yZSByZWFkeSB0byBtb3ZlIG9uLgotCSAqLwotCWlucHV0X3B0ciArPSBkaXJuYzsJLyogYWR2YW5jZSBpbnB1dCBwdHIgdG8gbmV4dCBjb2x1bW4gKi8KLQlvdXRwdXRfcHRyICs9IGRpcjsJLyogYWR2YW5jZSBvdXRwdXQgcHRyIHRvIG5leHQgY29sdW1uICovCi0JZXJyb3JwdHIgKz0gZGlyOwkvKiBhZHZhbmNlIGVycm9ycHRyIHRvIGN1cnJlbnQgY29sdW1uICovCisgICAgICAgIC8qIGN1ciBob2xkcyB0aGUgZXJyb3IgcHJvcGFnYXRlZCBmcm9tIHRoZSBwcmV2aW91cyBwaXhlbCBvbiB0aGUKKyAgICAgICAgICogY3VycmVudCBsaW5lLiAgQWRkIHRoZSBlcnJvciBwcm9wYWdhdGVkIGZyb20gdGhlIHByZXZpb3VzIGxpbmUKKyAgICAgICAgICogdG8gZm9ybSB0aGUgY29tcGxldGUgZXJyb3IgY29ycmVjdGlvbiB0ZXJtIGZvciB0aGlzIHBpeGVsLCBhbmQKKyAgICAgICAgICogcm91bmQgdGhlIGVycm9yIHRlcm0gKHdoaWNoIGlzIGV4cHJlc3NlZCAqIDE2KSB0byBhbiBpbnRlZ2VyLgorICAgICAgICAgKiBSSUdIVF9TSElGVCByb3VuZHMgdG93YXJkcyBtaW51cyBpbmZpbml0eSwgc28gYWRkaW5nIDggaXMgY29ycmVjdAorICAgICAgICAgKiBmb3IgZWl0aGVyIHNpZ24gb2YgdGhlIGVycm9yIHZhbHVlLgorICAgICAgICAgKiBOb3RlOiBlcnJvcnB0ciBwb2ludHMgdG8gKnByZXZpb3VzKiBjb2x1bW4ncyBhcnJheSBlbnRyeS4KKyAgICAgICAgICovCisgICAgICAgIGN1ciA9IFJJR0hUX1NISUZUKGN1ciArIGVycm9ycHRyW2Rpcl0gKyA4LCA0KTsKKyAgICAgICAgLyogRm9ybSBwaXhlbCB2YWx1ZSArIGVycm9yLCBhbmQgcmFuZ2UtbGltaXQgdG8gMC4uTUFYSlNBTVBMRS4KKyAgICAgICAgICogVGhlIG1heGltdW0gZXJyb3IgaXMgKy0gTUFYSlNBTVBMRTsgdGhpcyBzZXRzIHRoZSByZXF1aXJlZCBzaXplCisgICAgICAgICAqIG9mIHRoZSByYW5nZV9saW1pdCBhcnJheS4KKyAgICAgICAgICovCisgICAgICAgIGN1ciArPSBHRVRKU0FNUExFKCppbnB1dF9wdHIpOworICAgICAgICBjdXIgPSBHRVRKU0FNUExFKHJhbmdlX2xpbWl0W2N1cl0pOworICAgICAgICAvKiBTZWxlY3Qgb3V0cHV0IHZhbHVlLCBhY2N1bXVsYXRlIGludG8gb3V0cHV0IGNvZGUgZm9yIHRoaXMgcGl4ZWwgKi8KKyAgICAgICAgcGl4Y29kZSA9IEdFVEpTQU1QTEUoY29sb3JpbmRleF9jaVtjdXJdKTsKKyAgICAgICAgKm91dHB1dF9wdHIgKz0gKEpTQU1QTEUpIHBpeGNvZGU7CisgICAgICAgIC8qIENvbXB1dGUgYWN0dWFsIHJlcHJlc2VudGF0aW9uIGVycm9yIGF0IHRoaXMgcGl4ZWwgKi8KKyAgICAgICAgLyogTm90ZTogd2UgY2FuIGRvIHRoaXMgZXZlbiB0aG91Z2ggd2UgZG9uJ3QgaGF2ZSB0aGUgZmluYWwgKi8KKyAgICAgICAgLyogcGl4ZWwgY29kZSwgYmVjYXVzZSB0aGUgY29sb3JtYXAgaXMgb3J0aG9nb25hbC4gKi8KKyAgICAgICAgY3VyIC09IEdFVEpTQU1QTEUoY29sb3JtYXBfY2lbcGl4Y29kZV0pOworICAgICAgICAvKiBDb21wdXRlIGVycm9yIGZyYWN0aW9ucyB0byBiZSBwcm9wYWdhdGVkIHRvIGFkamFjZW50IHBpeGVscy4KKyAgICAgICAgICogQWRkIHRoZXNlIGludG8gdGhlIHJ1bm5pbmcgc3VtcywgYW5kIHNpbXVsdGFuZW91c2x5IHNoaWZ0IHRoZQorICAgICAgICAgKiBuZXh0LWxpbmUgZXJyb3Igc3VtcyBsZWZ0IGJ5IDEgY29sdW1uLgorICAgICAgICAgKi8KKyAgICAgICAgYm5leHRlcnIgPSBjdXI7CisgICAgICAgIGRlbHRhID0gY3VyICogMjsKKyAgICAgICAgY3VyICs9IGRlbHRhOyAgICAgICAgICAgLyogZm9ybSBlcnJvciAqIDMgKi8KKyAgICAgICAgZXJyb3JwdHJbMF0gPSAoRlNFUlJPUikgKGJwcmV2ZXJyICsgY3VyKTsKKyAgICAgICAgY3VyICs9IGRlbHRhOyAgICAgICAgICAgLyogZm9ybSBlcnJvciAqIDUgKi8KKyAgICAgICAgYnByZXZlcnIgPSBiZWxvd2VyciArIGN1cjsKKyAgICAgICAgYmVsb3dlcnIgPSBibmV4dGVycjsKKyAgICAgICAgY3VyICs9IGRlbHRhOyAgICAgICAgICAgLyogZm9ybSBlcnJvciAqIDcgKi8KKyAgICAgICAgLyogQXQgdGhpcyBwb2ludCBjdXIgY29udGFpbnMgdGhlIDcvMTYgZXJyb3IgdmFsdWUgdG8gYmUgcHJvcGFnYXRlZAorICAgICAgICAgKiB0byB0aGUgbmV4dCBwaXhlbCBvbiB0aGUgY3VycmVudCBsaW5lLCBhbmQgYWxsIHRoZSBlcnJvcnMgZm9yIHRoZQorICAgICAgICAgKiBuZXh0IGxpbmUgaGF2ZSBiZWVuIHNoaWZ0ZWQgb3Zlci4gV2UgYXJlIHRoZXJlZm9yZSByZWFkeSB0byBtb3ZlIG9uLgorICAgICAgICAgKi8KKyAgICAgICAgaW5wdXRfcHRyICs9IGRpcm5jOyAgICAgLyogYWR2YW5jZSBpbnB1dCBwdHIgdG8gbmV4dCBjb2x1bW4gKi8KKyAgICAgICAgb3V0cHV0X3B0ciArPSBkaXI7ICAgICAgLyogYWR2YW5jZSBvdXRwdXQgcHRyIHRvIG5leHQgY29sdW1uICovCisgICAgICAgIGVycm9ycHRyICs9IGRpcjsgICAgICAgIC8qIGFkdmFuY2UgZXJyb3JwdHIgdG8gY3VycmVudCBjb2x1bW4gKi8KICAgICAgIH0KICAgICAgIC8qIFBvc3QtbG9vcCBjbGVhbnVwOiB3ZSBtdXN0IHVubG9hZCB0aGUgZmluYWwgZXJyb3IgdmFsdWUgaW50byB0aGUKICAgICAgICAqIGZpbmFsIGZzZXJyb3JzW10gZW50cnkuICBOb3RlIHdlIG5lZWQgbm90IHVubG9hZCBiZWxvd2VyciBiZWNhdXNlCkBAIC03NjYsNyArNzY2LDcgQEAKICAgICAgIGNxdWFudGl6ZS0+cHViLmNvbG9yX3F1YW50aXplID0gcXVhbnRpemUzX29yZF9kaXRoZXI7CiAgICAgZWxzZQogICAgICAgY3F1YW50aXplLT5wdWIuY29sb3JfcXVhbnRpemUgPSBxdWFudGl6ZV9vcmRfZGl0aGVyOwotICAgIGNxdWFudGl6ZS0+cm93X2luZGV4ID0gMDsJLyogaW5pdGlhbGl6ZSBzdGF0ZSBmb3Igb3JkZXJlZCBkaXRoZXIgKi8KKyAgICBjcXVhbnRpemUtPnJvd19pbmRleCA9IDA7ICAgLyogaW5pdGlhbGl6ZSBzdGF0ZSBmb3Igb3JkZXJlZCBkaXRoZXIgKi8KICAgICAvKiBJZiB1c2VyIGNoYW5nZWQgdG8gb3JkZXJlZCBkaXRoZXIgZnJvbSBhbm90aGVyIG1vZGUsCiAgICAgICogd2UgbXVzdCByZWNyZWF0ZSB0aGUgY29sb3IgaW5kZXggdGFibGUgd2l0aCBwYWRkaW5nLgogICAgICAqIFRoaXMgd2lsbCBjb3N0IGV4dHJhIHNwYWNlLCBidXQgcHJvYmFibHkgaXNuJ3QgdmVyeSBsaWtlbHkuCkBAIC04MjksMTMgKzgyOSwxMyBAQAogCiAgIGNxdWFudGl6ZSA9IChteV9jcXVhbnRpemVfcHRyKQogICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCi0JCQkJU0laRU9GKG15X2NxdWFudGl6ZXIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0laRU9GKG15X2NxdWFudGl6ZXIpKTsKICAgY2luZm8tPmNxdWFudGl6ZSA9IChzdHJ1Y3QganBlZ19jb2xvcl9xdWFudGl6ZXIgKikgY3F1YW50aXplOwogICBjcXVhbnRpemUtPnB1Yi5zdGFydF9wYXNzID0gc3RhcnRfcGFzc18xX3F1YW50OwogICBjcXVhbnRpemUtPnB1Yi5maW5pc2hfcGFzcyA9IGZpbmlzaF9wYXNzXzFfcXVhbnQ7CiAgIGNxdWFudGl6ZS0+cHViLm5ld19jb2xvcl9tYXAgPSBuZXdfY29sb3JfbWFwXzFfcXVhbnQ7CiAgIGNxdWFudGl6ZS0+ZnNlcnJvcnNbMF0gPSBOVUxMOyAvKiBGbGFnIEZTIHdvcmtzcGFjZSBub3QgYWxsb2NhdGVkICovCi0gIGNxdWFudGl6ZS0+b2RpdGhlclswXSA9IE5VTEw7CS8qIEFsc28gZmxhZyBvZGl0aGVyIGFycmF5cyBub3QgYWxsb2NhdGVkICovCisgIGNxdWFudGl6ZS0+b2RpdGhlclswXSA9IE5VTEw7IC8qIEFsc28gZmxhZyBvZGl0aGVyIGFycmF5cyBub3QgYWxsb2NhdGVkICovCiAKICAgLyogTWFrZSBzdXJlIG15IGludGVybmFsIGFycmF5cyB3b24ndCBvdmVyZmxvdyAqLwogICBpZiAoY2luZm8tPm91dF9jb2xvcl9jb21wb25lbnRzID4gTUFYX1FfQ09NUFMpCmRpZmYgLS1naXQgYS9qcXVhbnQyLmMgYi9qcXVhbnQyLmMKaW5kZXggMzk1MmUxYy4uMGZkYjE5NyAxMDA2NDQKLS0tIGEvanF1YW50Mi5jCisrKyBiL2pxdWFudDIuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBUaGlzIGZpbGUgd2FzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZToKICAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk2LCBUaG9tYXMgRy4gTGFuZS4KLSAqIE1vZGlmaWNhdGlvbnM6CisgKiBsaWJqcGVnLXR1cmJvIE1vZGlmaWNhdGlvbnM6CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTQsIEQuIFIuIENvbW1hbmRlci4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KICAqCkBAIC03Miw5ICs3Miw5IEBACiAgKiBwcm9iYWJseSBuZWVkIHRvIGNoYW5nZSB0aGVzZSBzY2FsZSBmYWN0b3JzLgogICovCiAKLSNkZWZpbmUgUl9TQ0FMRSAyCQkvKiBzY2FsZSBSIGRpc3RhbmNlcyBieSB0aGlzIG11Y2ggKi8KLSNkZWZpbmUgR19TQ0FMRSAzCQkvKiBzY2FsZSBHIGRpc3RhbmNlcyBieSB0aGlzIG11Y2ggKi8KLSNkZWZpbmUgQl9TQ0FMRSAxCQkvKiBhbmQgQiBieSB0aGlzIG11Y2ggKi8KKyNkZWZpbmUgUl9TQ0FMRSAyICAgICAgICAgICAgICAgLyogc2NhbGUgUiBkaXN0YW5jZXMgYnkgdGhpcyBtdWNoICovCisjZGVmaW5lIEdfU0NBTEUgMyAgICAgICAgICAgICAgIC8qIHNjYWxlIEcgZGlzdGFuY2VzIGJ5IHRoaXMgbXVjaCAqLworI2RlZmluZSBCX1NDQUxFIDEgICAgICAgICAgICAgICAvKiBhbmQgQiBieSB0aGlzIG11Y2ggKi8KIAogc3RhdGljIGNvbnN0IGludCBjX3NjYWxlc1szXT17Ul9TQ0FMRSwgR19TQ0FMRSwgQl9TQ0FMRX07CiAjZGVmaW5lIEMwX1NDQUxFIGNfc2NhbGVzW3JnYl9yZWRbY2luZm8tPm91dF9jb2xvcl9zcGFjZV1dCkBAIC0xMTIsOSArMTEyLDkgQEAKIC8qIFRoZXNlIHdpbGwgZG8gdGhlIHJpZ2h0IHRoaW5nIGZvciBlaXRoZXIgUixHLEIgb3IgQixHLFIgY29sb3Igb3JkZXIsCiAgKiBidXQgeW91IG1heSBub3QgbGlrZSB0aGUgcmVzdWx0cyBmb3Igb3RoZXIgY29sb3Igb3JkZXJzLgogICovCi0jZGVmaW5lIEhJU1RfQzBfQklUUyAgNQkJLyogYml0cyBvZiBwcmVjaXNpb24gaW4gUi9CIGhpc3RvZ3JhbSAqLwotI2RlZmluZSBISVNUX0MxX0JJVFMgIDYJCS8qIGJpdHMgb2YgcHJlY2lzaW9uIGluIEcgaGlzdG9ncmFtICovCi0jZGVmaW5lIEhJU1RfQzJfQklUUyAgNQkJLyogYml0cyBvZiBwcmVjaXNpb24gaW4gQi9SIGhpc3RvZ3JhbSAqLworI2RlZmluZSBISVNUX0MwX0JJVFMgIDUgICAgICAgICAvKiBiaXRzIG9mIHByZWNpc2lvbiBpbiBSL0IgaGlzdG9ncmFtICovCisjZGVmaW5lIEhJU1RfQzFfQklUUyAgNiAgICAgICAgIC8qIGJpdHMgb2YgcHJlY2lzaW9uIGluIEcgaGlzdG9ncmFtICovCisjZGVmaW5lIEhJU1RfQzJfQklUUyAgNSAgICAgICAgIC8qIGJpdHMgb2YgcHJlY2lzaW9uIGluIEIvUiBoaXN0b2dyYW0gKi8KIAogLyogTnVtYmVyIG9mIGVsZW1lbnRzIGFsb25nIGhpc3RvZ3JhbSBheGVzLiAqLwogI2RlZmluZSBISVNUX0MwX0VMRU1TICAoMTw8SElTVF9DMF9CSVRTKQpAQCAtMTI3LDEzICsxMjcsMTMgQEAKICNkZWZpbmUgQzJfU0hJRlQgIChCSVRTX0lOX0pTQU1QTEUtSElTVF9DMl9CSVRTKQogCiAKLXR5cGVkZWYgVUlOVDE2IGhpc3RjZWxsOwkvKiBoaXN0b2dyYW0gY2VsbDsgcHJlZmVyIGFuIHVuc2lnbmVkIHR5cGUgKi8KK3R5cGVkZWYgVUlOVDE2IGhpc3RjZWxsOyAgICAgICAgLyogaGlzdG9ncmFtIGNlbGw7IHByZWZlciBhbiB1bnNpZ25lZCB0eXBlICovCiAKLXR5cGVkZWYgaGlzdGNlbGwgRkFSICogaGlzdHB0cjsJLyogZm9yIHBvaW50ZXJzIHRvIGhpc3RvZ3JhbSBjZWxscyAqLwordHlwZWRlZiBoaXN0Y2VsbCBGQVIgKiBoaXN0cHRyOyAvKiBmb3IgcG9pbnRlcnMgdG8gaGlzdG9ncmFtIGNlbGxzICovCiAKIHR5cGVkZWYgaGlzdGNlbGwgaGlzdDFkW0hJU1RfQzJfRUxFTVNdOyAvKiB0eXBlZGVmcyBmb3IgdGhlIGFycmF5ICovCi10eXBlZGVmIGhpc3QxZCBGQVIgKiBoaXN0MmQ7CS8qIHR5cGUgZm9yIHRoZSAybmQtbGV2ZWwgcG9pbnRlcnMgKi8KLXR5cGVkZWYgaGlzdDJkICogaGlzdDNkOwkvKiB0eXBlIGZvciB0b3AtbGV2ZWwgcG9pbnRlciAqLwordHlwZWRlZiBoaXN0MWQgRkFSICogaGlzdDJkOyAgICAvKiB0eXBlIGZvciB0aGUgMm5kLWxldmVsIHBvaW50ZXJzICovCit0eXBlZGVmIGhpc3QyZCAqIGhpc3QzZDsgICAgICAgIC8qIHR5cGUgZm9yIHRvcC1sZXZlbCBwb2ludGVyICovCiAKIAogLyogRGVjbGFyYXRpb25zIGZvciBGbG95ZC1TdGVpbmJlcmcgZGl0aGVyaW5nLgpAQCAtMTQxLDggKzE0MSw4IEBACiAgKiBFcnJvcnMgYXJlIGFjY3VtdWxhdGVkIGludG8gdGhlIGFycmF5IGZzZXJyb3JzW10sIGF0IGEgcmVzb2x1dGlvbiBvZgogICogMS8xNnRoIG9mIGEgcGl4ZWwgY291bnQuICBUaGUgZXJyb3IgYXQgYSBnaXZlbiBwaXhlbCBpcyBwcm9wYWdhdGVkCiAgKiB0byBpdHMgbm90LXlldC1wcm9jZXNzZWQgbmVpZ2hib3JzIHVzaW5nIHRoZSBzdGFuZGFyZCBGLVMgZnJhY3Rpb25zLAotICoJCS4uLgkoaGVyZSkJNy8xNgotICoJCTMvMTYJNS8xNgkxLzE2CisgKiAgICAgICAgICAgICAgLi4uICAgICAoaGVyZSkgIDcvMTYKKyAqICAgICAgICAgICAgICAzLzE2ICAgIDUvMTYgICAgMS8xNgogICogV2Ugd29yayBsZWZ0LXRvLXJpZ2h0IG9uIGV2ZW4gcm93cywgcmlnaHQtdG8tbGVmdCBvbiBvZGQgcm93cy4KICAqCiAgKiBXZSBjYW4gZ2V0IGF3YXkgd2l0aCBhIHNpbmdsZSBhcnJheSAoaG9sZGluZyBvbmUgcm93J3Mgd29ydGggb2YgZXJyb3JzKQpAQCAtMTYxLDE0ICsxNjEsMTQgQEAKICAqLwogCiAjaWYgQklUU19JTl9KU0FNUExFID09IDgKLXR5cGVkZWYgSU5UMTYgRlNFUlJPUjsJCS8qIDE2IGJpdHMgc2hvdWxkIGJlIGVub3VnaCAqLwotdHlwZWRlZiBpbnQgTE9DRlNFUlJPUjsJCS8qIHVzZSAnaW50JyBmb3IgY2FsY3VsYXRpb24gdGVtcHMgKi8KK3R5cGVkZWYgSU5UMTYgRlNFUlJPUjsgICAgICAgICAgLyogMTYgYml0cyBzaG91bGQgYmUgZW5vdWdoICovCit0eXBlZGVmIGludCBMT0NGU0VSUk9SOyAgICAgICAgIC8qIHVzZSAnaW50JyBmb3IgY2FsY3VsYXRpb24gdGVtcHMgKi8KICNlbHNlCi10eXBlZGVmIElOVDMyIEZTRVJST1I7CQkvKiBtYXkgbmVlZCBtb3JlIHRoYW4gMTYgYml0cyAqLwotdHlwZWRlZiBJTlQzMiBMT0NGU0VSUk9SOwkvKiBiZSBzdXJlIGNhbGN1bGF0aW9uIHRlbXBzIGFyZSBiaWcgZW5vdWdoICovCit0eXBlZGVmIElOVDMyIEZTRVJST1I7ICAgICAgICAgIC8qIG1heSBuZWVkIG1vcmUgdGhhbiAxNiBiaXRzICovCit0eXBlZGVmIElOVDMyIExPQ0ZTRVJST1I7ICAgICAgIC8qIGJlIHN1cmUgY2FsY3VsYXRpb24gdGVtcHMgYXJlIGJpZyBlbm91Z2ggKi8KICNlbmRpZgogCi10eXBlZGVmIEZTRVJST1IgRkFSICpGU0VSUlBUUjsJLyogcG9pbnRlciB0byBlcnJvciBhcnJheSAoaW4gRkFSIHN0b3JhZ2UhKSAqLwordHlwZWRlZiBGU0VSUk9SIEZBUiAqRlNFUlJQVFI7ICAvKiBwb2ludGVyIHRvIGVycm9yIGFycmF5IChpbiBGQVIgc3RvcmFnZSEpICovCiAKIAogLyogUHJpdmF0ZSBzdWJvYmplY3QgKi8KQEAgLTE3NywxOCArMTc3LDE4IEBACiAgIHN0cnVjdCBqcGVnX2NvbG9yX3F1YW50aXplciBwdWI7IC8qIHB1YmxpYyBmaWVsZHMgKi8KIAogICAvKiBTcGFjZSBmb3IgdGhlIGV2ZW50dWFsbHkgY3JlYXRlZCBjb2xvcm1hcCBpcyBzdGFzaGVkIGhlcmUgKi8KLSAgSlNBTVBBUlJBWSBzdl9jb2xvcm1hcDsJLyogY29sb3JtYXAgYWxsb2NhdGVkIGF0IGluaXQgdGltZSAqLwotICBpbnQgZGVzaXJlZDsJCQkvKiBkZXNpcmVkICMgb2YgY29sb3JzID0gc2l6ZSBvZiBjb2xvcm1hcCAqLworICBKU0FNUEFSUkFZIHN2X2NvbG9ybWFwOyAgICAgICAvKiBjb2xvcm1hcCBhbGxvY2F0ZWQgYXQgaW5pdCB0aW1lICovCisgIGludCBkZXNpcmVkOyAgICAgICAgICAgICAgICAgIC8qIGRlc2lyZWQgIyBvZiBjb2xvcnMgPSBzaXplIG9mIGNvbG9ybWFwICovCiAKICAgLyogVmFyaWFibGVzIGZvciBhY2N1bXVsYXRpbmcgaW1hZ2Ugc3RhdGlzdGljcyAqLwotICBoaXN0M2QgaGlzdG9ncmFtOwkJLyogcG9pbnRlciB0byB0aGUgaGlzdG9ncmFtICovCisgIGhpc3QzZCBoaXN0b2dyYW07ICAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gdGhlIGhpc3RvZ3JhbSAqLwogCi0gIGJvb2xlYW4gbmVlZHNfemVyb2VkOwkJLyogVFJVRSBpZiBuZXh0IHBhc3MgbXVzdCB6ZXJvIGhpc3RvZ3JhbSAqLworICBib29sZWFuIG5lZWRzX3plcm9lZDsgICAgICAgICAvKiBUUlVFIGlmIG5leHQgcGFzcyBtdXN0IHplcm8gaGlzdG9ncmFtICovCiAKICAgLyogVmFyaWFibGVzIGZvciBGbG95ZC1TdGVpbmJlcmcgZGl0aGVyaW5nICovCi0gIEZTRVJSUFRSIGZzZXJyb3JzOwkJLyogYWNjdW11bGF0ZWQgZXJyb3JzICovCi0gIGJvb2xlYW4gb25fb2RkX3JvdzsJCS8qIGZsYWcgdG8gcmVtZW1iZXIgd2hpY2ggcm93IHdlIGFyZSBvbiAqLwotICBpbnQgKiBlcnJvcl9saW1pdGVyOwkJLyogdGFibGUgZm9yIGNsYW1waW5nIHRoZSBhcHBsaWVkIGVycm9yICovCisgIEZTRVJSUFRSIGZzZXJyb3JzOyAgICAgICAgICAgIC8qIGFjY3VtdWxhdGVkIGVycm9ycyAqLworICBib29sZWFuIG9uX29kZF9yb3c7ICAgICAgICAgICAvKiBmbGFnIHRvIHJlbWVtYmVyIHdoaWNoIHJvdyB3ZSBhcmUgb24gKi8KKyAgaW50ICogZXJyb3JfbGltaXRlcjsgICAgICAgICAgLyogdGFibGUgZm9yIGNsYW1waW5nIHRoZSBhcHBsaWVkIGVycm9yICovCiB9IG15X2NxdWFudGl6ZXI7CiAKIHR5cGVkZWYgbXlfY3F1YW50aXplciAqIG15X2NxdWFudGl6ZV9wdHI7CkBAIC0yMDUsNyArMjA1LDcgQEAKIAogTUVUSE9EREVGKHZvaWQpCiBwcmVzY2FuX3F1YW50aXplIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwKLQkJICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIGludCBudW1fcm93cykKKyAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKQogewogICBteV9jcXVhbnRpemVfcHRyIGNxdWFudGl6ZSA9IChteV9jcXVhbnRpemVfcHRyKSBjaW5mby0+Y3F1YW50aXplOwogICByZWdpc3RlciBKU0FNUFJPVyBwdHI7CkBAIC0yMjAsMTEgKzIyMCwxMSBAQAogICAgIGZvciAoY29sID0gd2lkdGg7IGNvbCA+IDA7IGNvbC0tKSB7CiAgICAgICAvKiBnZXQgcGl4ZWwgdmFsdWUgYW5kIGluZGV4IGludG8gdGhlIGhpc3RvZ3JhbSAqLwogICAgICAgaGlzdHAgPSAmIGhpc3RvZ3JhbVtHRVRKU0FNUExFKHB0clswXSkgPj4gQzBfU0hJRlRdCi0JCQkgW0dFVEpTQU1QTEUocHRyWzFdKSA+PiBDMV9TSElGVF0KLQkJCSBbR0VUSlNBTVBMRShwdHJbMl0pID4+IEMyX1NISUZUXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBbR0VUSlNBTVBMRShwdHJbMV0pID4+IEMxX1NISUZUXQorICAgICAgICAgICAgICAgICAgICAgICAgIFtHRVRKU0FNUExFKHB0clsyXSkgPj4gQzJfU0hJRlRdOwogICAgICAgLyogaW5jcmVtZW50LCBjaGVjayBmb3Igb3ZlcmZsb3cgYW5kIHVuZG8gaW5jcmVtZW50IGlmIHNvLiAqLwogICAgICAgaWYgKCsrKCpoaXN0cCkgPD0gMCkKLQkoKmhpc3RwKS0tOworICAgICAgICAoKmhpc3RwKS0tOwogICAgICAgcHRyICs9IDM7CiAgICAgfQogICB9CkBAIC0zMTIsNjcgKzMxMiw2NyBAQAogICBpZiAoYzBtYXggPiBjMG1pbikKICAgICBmb3IgKGMwID0gYzBtaW47IGMwIDw9IGMwbWF4OyBjMCsrKQogICAgICAgZm9yIChjMSA9IGMxbWluOyBjMSA8PSBjMW1heDsgYzErKykgewotCWhpc3RwID0gJiBoaXN0b2dyYW1bYzBdW2MxXVtjMm1pbl07Ci0JZm9yIChjMiA9IGMybWluOyBjMiA8PSBjMm1heDsgYzIrKykKLQkgIGlmICgqaGlzdHArKyAhPSAwKSB7Ci0JICAgIGJveHAtPmMwbWluID0gYzBtaW4gPSBjMDsKLQkgICAgZ290byBoYXZlX2MwbWluOwotCSAgfQorICAgICAgICBoaXN0cCA9ICYgaGlzdG9ncmFtW2MwXVtjMV1bYzJtaW5dOworICAgICAgICBmb3IgKGMyID0gYzJtaW47IGMyIDw9IGMybWF4OyBjMisrKQorICAgICAgICAgIGlmICgqaGlzdHArKyAhPSAwKSB7CisgICAgICAgICAgICBib3hwLT5jMG1pbiA9IGMwbWluID0gYzA7CisgICAgICAgICAgICBnb3RvIGhhdmVfYzBtaW47CisgICAgICAgICAgfQogICAgICAgfQogIGhhdmVfYzBtaW46CiAgIGlmIChjMG1heCA+IGMwbWluKQogICAgIGZvciAoYzAgPSBjMG1heDsgYzAgPj0gYzBtaW47IGMwLS0pCiAgICAgICBmb3IgKGMxID0gYzFtaW47IGMxIDw9IGMxbWF4OyBjMSsrKSB7Ci0JaGlzdHAgPSAmIGhpc3RvZ3JhbVtjMF1bYzFdW2MybWluXTsKLQlmb3IgKGMyID0gYzJtaW47IGMyIDw9IGMybWF4OyBjMisrKQotCSAgaWYgKCpoaXN0cCsrICE9IDApIHsKLQkgICAgYm94cC0+YzBtYXggPSBjMG1heCA9IGMwOwotCSAgICBnb3RvIGhhdmVfYzBtYXg7Ci0JICB9CisgICAgICAgIGhpc3RwID0gJiBoaXN0b2dyYW1bYzBdW2MxXVtjMm1pbl07CisgICAgICAgIGZvciAoYzIgPSBjMm1pbjsgYzIgPD0gYzJtYXg7IGMyKyspCisgICAgICAgICAgaWYgKCpoaXN0cCsrICE9IDApIHsKKyAgICAgICAgICAgIGJveHAtPmMwbWF4ID0gYzBtYXggPSBjMDsKKyAgICAgICAgICAgIGdvdG8gaGF2ZV9jMG1heDsKKyAgICAgICAgICB9CiAgICAgICB9CiAgaGF2ZV9jMG1heDoKICAgaWYgKGMxbWF4ID4gYzFtaW4pCiAgICAgZm9yIChjMSA9IGMxbWluOyBjMSA8PSBjMW1heDsgYzErKykKICAgICAgIGZvciAoYzAgPSBjMG1pbjsgYzAgPD0gYzBtYXg7IGMwKyspIHsKLQloaXN0cCA9ICYgaGlzdG9ncmFtW2MwXVtjMV1bYzJtaW5dOwotCWZvciAoYzIgPSBjMm1pbjsgYzIgPD0gYzJtYXg7IGMyKyspCi0JICBpZiAoKmhpc3RwKysgIT0gMCkgewotCSAgICBib3hwLT5jMW1pbiA9IGMxbWluID0gYzE7Ci0JICAgIGdvdG8gaGF2ZV9jMW1pbjsKLQkgIH0KKyAgICAgICAgaGlzdHAgPSAmIGhpc3RvZ3JhbVtjMF1bYzFdW2MybWluXTsKKyAgICAgICAgZm9yIChjMiA9IGMybWluOyBjMiA8PSBjMm1heDsgYzIrKykKKyAgICAgICAgICBpZiAoKmhpc3RwKysgIT0gMCkgeworICAgICAgICAgICAgYm94cC0+YzFtaW4gPSBjMW1pbiA9IGMxOworICAgICAgICAgICAgZ290byBoYXZlX2MxbWluOworICAgICAgICAgIH0KICAgICAgIH0KICBoYXZlX2MxbWluOgogICBpZiAoYzFtYXggPiBjMW1pbikKICAgICBmb3IgKGMxID0gYzFtYXg7IGMxID49IGMxbWluOyBjMS0tKQogICAgICAgZm9yIChjMCA9IGMwbWluOyBjMCA8PSBjMG1heDsgYzArKykgewotCWhpc3RwID0gJiBoaXN0b2dyYW1bYzBdW2MxXVtjMm1pbl07Ci0JZm9yIChjMiA9IGMybWluOyBjMiA8PSBjMm1heDsgYzIrKykKLQkgIGlmICgqaGlzdHArKyAhPSAwKSB7Ci0JICAgIGJveHAtPmMxbWF4ID0gYzFtYXggPSBjMTsKLQkgICAgZ290byBoYXZlX2MxbWF4OwotCSAgfQorICAgICAgICBoaXN0cCA9ICYgaGlzdG9ncmFtW2MwXVtjMV1bYzJtaW5dOworICAgICAgICBmb3IgKGMyID0gYzJtaW47IGMyIDw9IGMybWF4OyBjMisrKQorICAgICAgICAgIGlmICgqaGlzdHArKyAhPSAwKSB7CisgICAgICAgICAgICBib3hwLT5jMW1heCA9IGMxbWF4ID0gYzE7CisgICAgICAgICAgICBnb3RvIGhhdmVfYzFtYXg7CisgICAgICAgICAgfQogICAgICAgfQogIGhhdmVfYzFtYXg6CiAgIGlmIChjMm1heCA+IGMybWluKQogICAgIGZvciAoYzIgPSBjMm1pbjsgYzIgPD0gYzJtYXg7IGMyKyspCiAgICAgICBmb3IgKGMwID0gYzBtaW47IGMwIDw9IGMwbWF4OyBjMCsrKSB7Ci0JaGlzdHAgPSAmIGhpc3RvZ3JhbVtjMF1bYzFtaW5dW2MyXTsKLQlmb3IgKGMxID0gYzFtaW47IGMxIDw9IGMxbWF4OyBjMSsrLCBoaXN0cCArPSBISVNUX0MyX0VMRU1TKQotCSAgaWYgKCpoaXN0cCAhPSAwKSB7Ci0JICAgIGJveHAtPmMybWluID0gYzJtaW4gPSBjMjsKLQkgICAgZ290byBoYXZlX2MybWluOwotCSAgfQorICAgICAgICBoaXN0cCA9ICYgaGlzdG9ncmFtW2MwXVtjMW1pbl1bYzJdOworICAgICAgICBmb3IgKGMxID0gYzFtaW47IGMxIDw9IGMxbWF4OyBjMSsrLCBoaXN0cCArPSBISVNUX0MyX0VMRU1TKQorICAgICAgICAgIGlmICgqaGlzdHAgIT0gMCkgeworICAgICAgICAgICAgYm94cC0+YzJtaW4gPSBjMm1pbiA9IGMyOworICAgICAgICAgICAgZ290byBoYXZlX2MybWluOworICAgICAgICAgIH0KICAgICAgIH0KICBoYXZlX2MybWluOgogICBpZiAoYzJtYXggPiBjMm1pbikKICAgICBmb3IgKGMyID0gYzJtYXg7IGMyID49IGMybWluOyBjMi0tKQogICAgICAgZm9yIChjMCA9IGMwbWluOyBjMCA8PSBjMG1heDsgYzArKykgewotCWhpc3RwID0gJiBoaXN0b2dyYW1bYzBdW2MxbWluXVtjMl07Ci0JZm9yIChjMSA9IGMxbWluOyBjMSA8PSBjMW1heDsgYzErKywgaGlzdHAgKz0gSElTVF9DMl9FTEVNUykKLQkgIGlmICgqaGlzdHAgIT0gMCkgewotCSAgICBib3hwLT5jMm1heCA9IGMybWF4ID0gYzI7Ci0JICAgIGdvdG8gaGF2ZV9jMm1heDsKLQkgIH0KKyAgICAgICAgaGlzdHAgPSAmIGhpc3RvZ3JhbVtjMF1bYzFtaW5dW2MyXTsKKyAgICAgICAgZm9yIChjMSA9IGMxbWluOyBjMSA8PSBjMW1heDsgYzErKywgaGlzdHAgKz0gSElTVF9DMl9FTEVNUykKKyAgICAgICAgICBpZiAoKmhpc3RwICE9IDApIHsKKyAgICAgICAgICAgIGJveHAtPmMybWF4ID0gYzJtYXggPSBjMjsKKyAgICAgICAgICAgIGdvdG8gaGF2ZV9jMm1heDsKKyAgICAgICAgICB9CiAgICAgICB9CiAgaGF2ZV9jMm1heDoKIApAQCAtMzk1LDkgKzM5NSw5IEBACiAgICAgZm9yIChjMSA9IGMxbWluOyBjMSA8PSBjMW1heDsgYzErKykgewogICAgICAgaGlzdHAgPSAmIGhpc3RvZ3JhbVtjMF1bYzFdW2MybWluXTsKICAgICAgIGZvciAoYzIgPSBjMm1pbjsgYzIgPD0gYzJtYXg7IGMyKyssIGhpc3RwKyspCi0JaWYgKCpoaXN0cCAhPSAwKSB7Ci0JICBjY291bnQrKzsKLQl9CisgICAgICAgIGlmICgqaGlzdHAgIT0gMCkgeworICAgICAgICAgIGNjb3VudCsrOworICAgICAgICB9CiAgICAgfQogICBib3hwLT5jb2xvcmNvdW50ID0gY2NvdW50OwogfQpAQCAtNDA1LDcgKzQwNSw3IEBACiAKIExPQ0FMKGludCkKIG1lZGlhbl9jdXQgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGJveHB0ciBib3hsaXN0LCBpbnQgbnVtYm94ZXMsCi0JICAgIGludCBkZXNpcmVkX2NvbG9ycykKKyAgICAgICAgICAgIGludCBkZXNpcmVkX2NvbG9ycykKIC8qIFJlcGVhdGVkbHkgc2VsZWN0IGFuZCBzcGxpdCB0aGUgbGFyZ2VzdCBib3ggdW50aWwgd2UgaGF2ZSBlbm91Z2ggYm94ZXMgKi8KIHsKICAgaW50IG4sbGI7CkBAIC00MjEsOSArNDIxLDkgQEAKICAgICB9IGVsc2UgewogICAgICAgYjEgPSBmaW5kX2JpZ2dlc3Rfdm9sdW1lKGJveGxpc3QsIG51bWJveGVzKTsKICAgICB9Ci0gICAgaWYgKGIxID09IE5VTEwpCQkvKiBubyBzcGxpdHRhYmxlIGJveGVzIGxlZnQhICovCisgICAgaWYgKGIxID09IE5VTEwpICAgICAgICAgICAgIC8qIG5vIHNwbGl0dGFibGUgYm94ZXMgbGVmdCEgKi8KICAgICAgIGJyZWFrOwotICAgIGIyID0gJmJveGxpc3RbbnVtYm94ZXNdOwkvKiB3aGVyZSBuZXcgYm94IHdpbGwgZ28gKi8KKyAgICBiMiA9ICZib3hsaXN0W251bWJveGVzXTsgICAgLyogd2hlcmUgbmV3IGJveCB3aWxsIGdvICovCiAgICAgLyogQ29weSB0aGUgY29sb3IgYm91bmRzIHRvIHRoZSBuZXcgYm94LiAqLwogICAgIGIyLT5jMG1heCA9IGIxLT5jMG1heDsgYjItPmMxbWF4ID0gYjEtPmMxbWF4OyBiMi0+YzJtYXggPSBiMS0+YzJtYXg7CiAgICAgYjItPmMwbWluID0gYjEtPmMwbWluOyBiMi0+YzFtaW4gPSBiMS0+YzFtaW47IGIyLT5jMm1pbiA9IGIxLT5jMm1pbjsKQEAgLTUwNCwxMiArNTA0LDEyIEBACiAgICAgZm9yIChjMSA9IGMxbWluOyBjMSA8PSBjMW1heDsgYzErKykgewogICAgICAgaGlzdHAgPSAmIGhpc3RvZ3JhbVtjMF1bYzFdW2MybWluXTsKICAgICAgIGZvciAoYzIgPSBjMm1pbjsgYzIgPD0gYzJtYXg7IGMyKyspIHsKLQlpZiAoKGNvdW50ID0gKmhpc3RwKyspICE9IDApIHsKLQkgIHRvdGFsICs9IGNvdW50OwotCSAgYzB0b3RhbCArPSAoKGMwIDw8IEMwX1NISUZUKSArICgoMTw8QzBfU0hJRlQpPj4xKSkgKiBjb3VudDsKLQkgIGMxdG90YWwgKz0gKChjMSA8PCBDMV9TSElGVCkgKyAoKDE8PEMxX1NISUZUKT4+MSkpICogY291bnQ7Ci0JICBjMnRvdGFsICs9ICgoYzIgPDwgQzJfU0hJRlQpICsgKCgxPDxDMl9TSElGVCk+PjEpKSAqIGNvdW50OwotCX0KKyAgICAgICAgaWYgKChjb3VudCA9ICpoaXN0cCsrKSAhPSAwKSB7CisgICAgICAgICAgdG90YWwgKz0gY291bnQ7CisgICAgICAgICAgYzB0b3RhbCArPSAoKGMwIDw8IEMwX1NISUZUKSArICgoMTw8QzBfU0hJRlQpPj4xKSkgKiBjb3VudDsKKyAgICAgICAgICBjMXRvdGFsICs9ICgoYzEgPDwgQzFfU0hJRlQpICsgKCgxPDxDMV9TSElGVCk+PjEpKSAqIGNvdW50OworICAgICAgICAgIGMydG90YWwgKz0gKChjMiA8PCBDMl9TSElGVCkgKyAoKDE8PEMyX1NISUZUKT4+MSkpICogY291bnQ7CisgICAgICAgIH0KICAgICAgIH0KICAgICB9CiAKQEAgLTYyOCw3ICs2MjgsNyBAQAogCiBMT0NBTChpbnQpCiBmaW5kX25lYXJieV9jb2xvcnMgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGludCBtaW5jMCwgaW50IG1pbmMxLCBpbnQgbWluYzIsCi0JCSAgICBKU0FNUExFIGNvbG9ybGlzdFtdKQorICAgICAgICAgICAgICAgICAgICBKU0FNUExFIGNvbG9ybGlzdFtdKQogLyogTG9jYXRlIHRoZSBjb2xvcm1hcCBlbnRyaWVzIGNsb3NlIGVub3VnaCB0byBhbiB1cGRhdGUgYm94IHRvIGJlIGNhbmRpZGF0ZXMKICAqIGZvciB0aGUgbmVhcmVzdCBlbnRyeSB0byBzb21lIGNlbGwocykgaW4gdGhlIHVwZGF0ZSBib3guICBUaGUgdXBkYXRlIGJveAogICogaXMgc3BlY2lmaWVkIGJ5IHRoZSBjZW50ZXIgY29vcmRpbmF0ZXMgb2YgaXRzIGZpcnN0IGNlbGwuICBUaGUgbnVtYmVyIG9mCkBAIC02NDMsNyArNjQzLDcgQEAKICAgaW50IGNlbnRlcmMwLCBjZW50ZXJjMSwgY2VudGVyYzI7CiAgIGludCBpLCB4LCBuY29sb3JzOwogICBJTlQzMiBtaW5tYXhkaXN0LCBtaW5fZGlzdCwgbWF4X2Rpc3QsIHRkaXN0OwotICBJTlQzMiBtaW5kaXN0W01BWE5VTUNPTE9SU107CS8qIG1pbiBkaXN0YW5jZSB0byBjb2xvcm1hcCBlbnRyeSBpICovCisgIElOVDMyIG1pbmRpc3RbTUFYTlVNQ09MT1JTXTsgIC8qIG1pbiBkaXN0YW5jZSB0byBjb2xvcm1hcCBlbnRyeSBpICovCiAKICAgLyogQ29tcHV0ZSB0cnVlIGNvb3JkaW5hdGVzIG9mIHVwZGF0ZSBib3gncyB1cHBlciBjb3JuZXIgYW5kIGNlbnRlci4KICAgICogQWN0dWFsbHkgd2UgY29tcHV0ZSB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIGNlbnRlciBvZiB0aGUgdXBwZXItY29ybmVyCkBAIC02ODUsMTEgKzY4NSwxMSBAQAogICAgICAgLyogd2l0aGluIGNlbGwgcmFuZ2Ugc28gbm8gY29udHJpYnV0aW9uIHRvIG1pbl9kaXN0ICovCiAgICAgICBtaW5fZGlzdCA9IDA7CiAgICAgICBpZiAoeCA8PSBjZW50ZXJjMCkgewotCXRkaXN0ID0gKHggLSBtYXhjMCkgKiBDMF9TQ0FMRTsKLQltYXhfZGlzdCA9IHRkaXN0KnRkaXN0OworICAgICAgICB0ZGlzdCA9ICh4IC0gbWF4YzApICogQzBfU0NBTEU7CisgICAgICAgIG1heF9kaXN0ID0gdGRpc3QqdGRpc3Q7CiAgICAgICB9IGVsc2UgewotCXRkaXN0ID0gKHggLSBtaW5jMCkgKiBDMF9TQ0FMRTsKLQltYXhfZGlzdCA9IHRkaXN0KnRkaXN0OworICAgICAgICB0ZGlzdCA9ICh4IC0gbWluYzApICogQzBfU0NBTEU7CisgICAgICAgIG1heF9kaXN0ID0gdGRpc3QqdGRpc3Q7CiAgICAgICB9CiAgICAgfQogCkBAIC03MDcsMTEgKzcwNywxMSBAQAogICAgIH0gZWxzZSB7CiAgICAgICAvKiB3aXRoaW4gY2VsbCByYW5nZSBzbyBubyBjb250cmlidXRpb24gdG8gbWluX2Rpc3QgKi8KICAgICAgIGlmICh4IDw9IGNlbnRlcmMxKSB7Ci0JdGRpc3QgPSAoeCAtIG1heGMxKSAqIEMxX1NDQUxFOwotCW1heF9kaXN0ICs9IHRkaXN0KnRkaXN0OworICAgICAgICB0ZGlzdCA9ICh4IC0gbWF4YzEpICogQzFfU0NBTEU7CisgICAgICAgIG1heF9kaXN0ICs9IHRkaXN0KnRkaXN0OwogICAgICAgfSBlbHNlIHsKLQl0ZGlzdCA9ICh4IC0gbWluYzEpICogQzFfU0NBTEU7Ci0JbWF4X2Rpc3QgKz0gdGRpc3QqdGRpc3Q7CisgICAgICAgIHRkaXN0ID0gKHggLSBtaW5jMSkgKiBDMV9TQ0FMRTsKKyAgICAgICAgbWF4X2Rpc3QgKz0gdGRpc3QqdGRpc3Q7CiAgICAgICB9CiAgICAgfQogCkBAIC03MjksMTUgKzcyOSwxNSBAQAogICAgIH0gZWxzZSB7CiAgICAgICAvKiB3aXRoaW4gY2VsbCByYW5nZSBzbyBubyBjb250cmlidXRpb24gdG8gbWluX2Rpc3QgKi8KICAgICAgIGlmICh4IDw9IGNlbnRlcmMyKSB7Ci0JdGRpc3QgPSAoeCAtIG1heGMyKSAqIEMyX1NDQUxFOwotCW1heF9kaXN0ICs9IHRkaXN0KnRkaXN0OworICAgICAgICB0ZGlzdCA9ICh4IC0gbWF4YzIpICogQzJfU0NBTEU7CisgICAgICAgIG1heF9kaXN0ICs9IHRkaXN0KnRkaXN0OwogICAgICAgfSBlbHNlIHsKLQl0ZGlzdCA9ICh4IC0gbWluYzIpICogQzJfU0NBTEU7Ci0JbWF4X2Rpc3QgKz0gdGRpc3QqdGRpc3Q7CisgICAgICAgIHRkaXN0ID0gKHggLSBtaW5jMikgKiBDMl9TQ0FMRTsKKyAgICAgICAgbWF4X2Rpc3QgKz0gdGRpc3QqdGRpc3Q7CiAgICAgICB9CiAgICAgfQogCi0gICAgbWluZGlzdFtpXSA9IG1pbl9kaXN0OwkvKiBzYXZlIGF3YXkgdGhlIHJlc3VsdHMgKi8KKyAgICBtaW5kaXN0W2ldID0gbWluX2Rpc3Q7ICAgICAgLyogc2F2ZSBhd2F5IHRoZSByZXN1bHRzICovCiAgICAgaWYgKG1heF9kaXN0IDwgbWlubWF4ZGlzdCkKICAgICAgIG1pbm1heGRpc3QgPSBtYXhfZGlzdDsKICAgfQpAQCAtNzU3LDcgKzc1Nyw3IEBACiAKIExPQ0FMKHZvaWQpCiBmaW5kX2Jlc3RfY29sb3JzIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgbWluYzAsIGludCBtaW5jMSwgaW50IG1pbmMyLAotCQkgIGludCBudW1jb2xvcnMsIEpTQU1QTEUgY29sb3JsaXN0W10sIEpTQU1QTEUgYmVzdGNvbG9yW10pCisgICAgICAgICAgICAgICAgICBpbnQgbnVtY29sb3JzLCBKU0FNUExFIGNvbG9ybGlzdFtdLCBKU0FNUExFIGJlc3Rjb2xvcltdKQogLyogRmluZCB0aGUgY2xvc2VzdCBjb2xvcm1hcCBlbnRyeSBmb3IgZWFjaCBjZWxsIGluIHRoZSB1cGRhdGUgYm94LAogICogZ2l2ZW4gdGhlIGxpc3Qgb2YgY2FuZGlkYXRlIGNvbG9ycyBwcmVwYXJlZCBieSBmaW5kX25lYXJieV9jb2xvcnMuCiAgKiBSZXR1cm4gdGhlIGluZGV4ZXMgb2YgdGhlIGNsb3Nlc3QgZW50cmllcyBpbiB0aGUgYmVzdGNvbG9yW10gYXJyYXkuCkBAIC03NjcsMTMgKzc2NywxMyBAQAogewogICBpbnQgaWMwLCBpYzEsIGljMjsKICAgaW50IGksIGljb2xvcjsKLSAgcmVnaXN0ZXIgSU5UMzIgKiBicHRyOwkvKiBwb2ludGVyIGludG8gYmVzdGRpc3RbXSBhcnJheSAqLwotICBKU0FNUExFICogY3B0cjsJCS8qIHBvaW50ZXIgaW50byBiZXN0Y29sb3JbXSBhcnJheSAqLwotICBJTlQzMiBkaXN0MCwgZGlzdDE7CQkvKiBpbml0aWFsIGRpc3RhbmNlIHZhbHVlcyAqLwotICByZWdpc3RlciBJTlQzMiBkaXN0MjsJCS8qIGN1cnJlbnQgZGlzdGFuY2UgaW4gaW5uZXIgbG9vcCAqLwotICBJTlQzMiB4eDAsIHh4MTsJCS8qIGRpc3RhbmNlIGluY3JlbWVudHMgKi8KKyAgcmVnaXN0ZXIgSU5UMzIgKiBicHRyOyAgICAgICAgLyogcG9pbnRlciBpbnRvIGJlc3RkaXN0W10gYXJyYXkgKi8KKyAgSlNBTVBMRSAqIGNwdHI7ICAgICAgICAgICAgICAgLyogcG9pbnRlciBpbnRvIGJlc3Rjb2xvcltdIGFycmF5ICovCisgIElOVDMyIGRpc3QwLCBkaXN0MTsgICAgICAgICAgIC8qIGluaXRpYWwgZGlzdGFuY2UgdmFsdWVzICovCisgIHJlZ2lzdGVyIElOVDMyIGRpc3QyOyAgICAgICAgIC8qIGN1cnJlbnQgZGlzdGFuY2UgaW4gaW5uZXIgbG9vcCAqLworICBJTlQzMiB4eDAsIHh4MTsgICAgICAgICAgICAgICAvKiBkaXN0YW5jZSBpbmNyZW1lbnRzICovCiAgIHJlZ2lzdGVyIElOVDMyIHh4MjsKLSAgSU5UMzIgaW5jMCwgaW5jMSwgaW5jMjsJLyogaW5pdGlhbCB2YWx1ZXMgZm9yIGluY3JlbWVudHMgKi8KKyAgSU5UMzIgaW5jMCwgaW5jMSwgaW5jMjsgICAgICAgLyogaW5pdGlhbCB2YWx1ZXMgZm9yIGluY3JlbWVudHMgKi8KICAgLyogVGhpcyBhcnJheSBob2xkcyB0aGUgZGlzdGFuY2UgdG8gdGhlIG5lYXJlc3Qtc28tZmFyIGNvbG9yIGZvciBlYWNoIGNlbGwgKi8KICAgSU5UMzIgYmVzdGRpc3RbQk9YX0MwX0VMRU1TICogQk9YX0MxX0VMRU1TICogQk9YX0MyX0VMRU1TXTsKIApAQCAtODEzLDIwICs4MTMsMjAgQEAKICAgICAgIGRpc3QxID0gZGlzdDA7CiAgICAgICB4eDEgPSBpbmMxOwogICAgICAgZm9yIChpYzEgPSBCT1hfQzFfRUxFTVMtMTsgaWMxID49IDA7IGljMS0tKSB7Ci0JZGlzdDIgPSBkaXN0MTsKLQl4eDIgPSBpbmMyOwotCWZvciAoaWMyID0gQk9YX0MyX0VMRU1TLTE7IGljMiA+PSAwOyBpYzItLSkgewotCSAgaWYgKGRpc3QyIDwgKmJwdHIpIHsKLQkgICAgKmJwdHIgPSBkaXN0MjsKLQkgICAgKmNwdHIgPSAoSlNBTVBMRSkgaWNvbG9yOwotCSAgfQotCSAgZGlzdDIgKz0geHgyOwotCSAgeHgyICs9IDIgKiBTVEVQX0MyICogU1RFUF9DMjsKLQkgIGJwdHIrKzsKLQkgIGNwdHIrKzsKLQl9Ci0JZGlzdDEgKz0geHgxOwotCXh4MSArPSAyICogU1RFUF9DMSAqIFNURVBfQzE7CisgICAgICAgIGRpc3QyID0gZGlzdDE7CisgICAgICAgIHh4MiA9IGluYzI7CisgICAgICAgIGZvciAoaWMyID0gQk9YX0MyX0VMRU1TLTE7IGljMiA+PSAwOyBpYzItLSkgeworICAgICAgICAgIGlmIChkaXN0MiA8ICpicHRyKSB7CisgICAgICAgICAgICAqYnB0ciA9IGRpc3QyOworICAgICAgICAgICAgKmNwdHIgPSAoSlNBTVBMRSkgaWNvbG9yOworICAgICAgICAgIH0KKyAgICAgICAgICBkaXN0MiArPSB4eDI7CisgICAgICAgICAgeHgyICs9IDIgKiBTVEVQX0MyICogU1RFUF9DMjsKKyAgICAgICAgICBicHRyKys7CisgICAgICAgICAgY3B0cisrOworICAgICAgICB9CisgICAgICAgIGRpc3QxICs9IHh4MTsKKyAgICAgICAgeHgxICs9IDIgKiBTVEVQX0MxICogU1RFUF9DMTsKICAgICAgIH0KICAgICAgIGRpc3QwICs9IHh4MDsKICAgICAgIHh4MCArPSAyICogU1RFUF9DMCAqIFNURVBfQzA7CkBAIC04NDMsMTMgKzg0MywxMyBAQAogewogICBteV9jcXVhbnRpemVfcHRyIGNxdWFudGl6ZSA9IChteV9jcXVhbnRpemVfcHRyKSBjaW5mby0+Y3F1YW50aXplOwogICBoaXN0M2QgaGlzdG9ncmFtID0gY3F1YW50aXplLT5oaXN0b2dyYW07Ci0gIGludCBtaW5jMCwgbWluYzEsIG1pbmMyOwkvKiBsb3dlciBsZWZ0IGNvcm5lciBvZiB1cGRhdGUgYm94ICovCisgIGludCBtaW5jMCwgbWluYzEsIG1pbmMyOyAgICAgIC8qIGxvd2VyIGxlZnQgY29ybmVyIG9mIHVwZGF0ZSBib3ggKi8KICAgaW50IGljMCwgaWMxLCBpYzI7Ci0gIHJlZ2lzdGVyIEpTQU1QTEUgKiBjcHRyOwkvKiBwb2ludGVyIGludG8gYmVzdGNvbG9yW10gYXJyYXkgKi8KLSAgcmVnaXN0ZXIgaGlzdHB0ciBjYWNoZXA7CS8qIHBvaW50ZXIgaW50byBtYWluIGNhY2hlIGFycmF5ICovCisgIHJlZ2lzdGVyIEpTQU1QTEUgKiBjcHRyOyAgICAgIC8qIHBvaW50ZXIgaW50byBiZXN0Y29sb3JbXSBhcnJheSAqLworICByZWdpc3RlciBoaXN0cHRyIGNhY2hlcDsgICAgICAvKiBwb2ludGVyIGludG8gbWFpbiBjYWNoZSBhcnJheSAqLwogICAvKiBUaGlzIGFycmF5IGxpc3RzIHRoZSBjYW5kaWRhdGUgY29sb3JtYXAgaW5kZXhlcy4gKi8KICAgSlNBTVBMRSBjb2xvcmxpc3RbTUFYTlVNQ09MT1JTXTsKLSAgaW50IG51bWNvbG9yczsJCS8qIG51bWJlciBvZiBjYW5kaWRhdGUgY29sb3JzICovCisgIGludCBudW1jb2xvcnM7ICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBjYW5kaWRhdGUgY29sb3JzICovCiAgIC8qIFRoaXMgYXJyYXkgaG9sZHMgdGhlIGFjdHVhbGx5IGNsb3Nlc3QgY29sb3JtYXAgaW5kZXggZm9yIGVhY2ggY2VsbC4gKi8KICAgSlNBTVBMRSBiZXN0Y29sb3JbQk9YX0MwX0VMRU1TICogQk9YX0MxX0VMRU1TICogQk9YX0MyX0VMRU1TXTsKIApAQCAtODczLDEwICs4NzMsMTAgQEAKIAogICAvKiBEZXRlcm1pbmUgdGhlIGFjdHVhbGx5IG5lYXJlc3QgY29sb3JzLiAqLwogICBmaW5kX2Jlc3RfY29sb3JzKGNpbmZvLCBtaW5jMCwgbWluYzEsIG1pbmMyLCBudW1jb2xvcnMsIGNvbG9ybGlzdCwKLQkJICAgYmVzdGNvbG9yKTsKKyAgICAgICAgICAgICAgICAgICBiZXN0Y29sb3IpOwogCiAgIC8qIFNhdmUgdGhlIGJlc3QgY29sb3IgbnVtYmVycyAocGx1cyAxKSBpbiB0aGUgbWFpbiBjYWNoZSBhcnJheSAqLwotICBjMCA8PD0gQk9YX0MwX0xPRzsJCS8qIGNvbnZlcnQgSUQgYmFjayB0byBiYXNlIGNlbGwgaW5kZXhlcyAqLworICBjMCA8PD0gQk9YX0MwX0xPRzsgICAgICAgICAgICAvKiBjb252ZXJ0IElEIGJhY2sgdG8gYmFzZSBjZWxsIGluZGV4ZXMgKi8KICAgYzEgPDw9IEJPWF9DMV9MT0c7CiAgIGMyIDw8PSBCT1hfQzJfTE9HOwogICBjcHRyID0gYmVzdGNvbG9yOwpAQCAtODg0LDcgKzg4NCw3IEBACiAgICAgZm9yIChpYzEgPSAwOyBpYzEgPCBCT1hfQzFfRUxFTVM7IGljMSsrKSB7CiAgICAgICBjYWNoZXAgPSAmIGhpc3RvZ3JhbVtjMCtpYzBdW2MxK2ljMV1bYzJdOwogICAgICAgZm9yIChpYzIgPSAwOyBpYzIgPCBCT1hfQzJfRUxFTVM7IGljMisrKSB7Ci0JKmNhY2hlcCsrID0gKGhpc3RjZWxsKSAoR0VUSlNBTVBMRSgqY3B0cisrKSArIDEpOworICAgICAgICAqY2FjaGVwKysgPSAoaGlzdGNlbGwpIChHRVRKU0FNUExFKCpjcHRyKyspICsgMSk7CiAgICAgICB9CiAgICAgfQogICB9CkBAIC04OTcsNyArODk3LDcgQEAKIAogTUVUSE9EREVGKHZvaWQpCiBwYXNzMl9ub19kaXRoZXIgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCi0JCSBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBpbnQgbnVtX3Jvd3MpCisgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsIGludCBudW1fcm93cykKIC8qIFRoaXMgdmVyc2lvbiBwZXJmb3JtcyBubyBkaXRoZXJpbmcgKi8KIHsKICAgbXlfY3F1YW50aXplX3B0ciBjcXVhbnRpemUgPSAobXlfY3F1YW50aXplX3B0cikgY2luZm8tPmNxdWFudGl6ZTsKQEAgLTkyMSw3ICs5MjEsNyBAQAogICAgICAgLyogSWYgd2UgaGF2ZSBub3Qgc2VlbiB0aGlzIGNvbG9yIGJlZm9yZSwgZmluZCBuZWFyZXN0IGNvbG9ybWFwIGVudHJ5ICovCiAgICAgICAvKiBhbmQgdXBkYXRlIHRoZSBjYWNoZSAqLwogICAgICAgaWYgKCpjYWNoZXAgPT0gMCkKLQlmaWxsX2ludmVyc2VfY21hcChjaW5mbywgYzAsYzEsYzIpOworICAgICAgICBmaWxsX2ludmVyc2VfY21hcChjaW5mbywgYzAsYzEsYzIpOwogICAgICAgLyogTm93IGVtaXQgdGhlIGNvbG9ybWFwIGluZGV4IGZvciB0aGlzIGNlbGwgKi8KICAgICAgICpvdXRwdHIrKyA9IChKU0FNUExFKSAoKmNhY2hlcCAtIDEpOwogICAgIH0KQEAgLTkzMSwyMCArOTMxLDIwIEBACiAKIE1FVEhPRERFRih2b2lkKQogcGFzczJfZnNfZGl0aGVyIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAotCQkgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKQorICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBpbnQgbnVtX3Jvd3MpCiAvKiBUaGlzIHZlcnNpb24gcGVyZm9ybXMgRmxveWQtU3RlaW5iZXJnIGRpdGhlcmluZyAqLwogewogICBteV9jcXVhbnRpemVfcHRyIGNxdWFudGl6ZSA9IChteV9jcXVhbnRpemVfcHRyKSBjaW5mby0+Y3F1YW50aXplOwogICBoaXN0M2QgaGlzdG9ncmFtID0gY3F1YW50aXplLT5oaXN0b2dyYW07Ci0gIHJlZ2lzdGVyIExPQ0ZTRVJST1IgY3VyMCwgY3VyMSwgY3VyMjsJLyogY3VycmVudCBlcnJvciBvciBwaXhlbCB2YWx1ZSAqLworICByZWdpc3RlciBMT0NGU0VSUk9SIGN1cjAsIGN1cjEsIGN1cjI7IC8qIGN1cnJlbnQgZXJyb3Igb3IgcGl4ZWwgdmFsdWUgKi8KICAgTE9DRlNFUlJPUiBiZWxvd2VycjAsIGJlbG93ZXJyMSwgYmVsb3dlcnIyOyAvKiBlcnJvciBmb3IgcGl4ZWwgYmVsb3cgY3VyICovCiAgIExPQ0ZTRVJST1IgYnByZXZlcnIwLCBicHJldmVycjEsIGJwcmV2ZXJyMjsgLyogZXJyb3IgZm9yIGJlbG93L3ByZXYgY29sICovCi0gIHJlZ2lzdGVyIEZTRVJSUFRSIGVycm9ycHRyOwkvKiA9PiBmc2Vycm9yc1tdIGF0IGNvbHVtbiBiZWZvcmUgY3VycmVudCAqLwotICBKU0FNUFJPVyBpbnB0cjsJCS8qID0+IGN1cnJlbnQgaW5wdXQgcGl4ZWwgKi8KLSAgSlNBTVBST1cgb3V0cHRyOwkJLyogPT4gY3VycmVudCBvdXRwdXQgcGl4ZWwgKi8KKyAgcmVnaXN0ZXIgRlNFUlJQVFIgZXJyb3JwdHI7ICAgLyogPT4gZnNlcnJvcnNbXSBhdCBjb2x1bW4gYmVmb3JlIGN1cnJlbnQgKi8KKyAgSlNBTVBST1cgaW5wdHI7ICAgICAgICAgICAgICAgLyogPT4gY3VycmVudCBpbnB1dCBwaXhlbCAqLworICBKU0FNUFJPVyBvdXRwdHI7ICAgICAgICAgICAgICAvKiA9PiBjdXJyZW50IG91dHB1dCBwaXhlbCAqLwogICBoaXN0cHRyIGNhY2hlcDsKLSAgaW50IGRpcjsJCQkvKiArMSBvciAtMSBkZXBlbmRpbmcgb24gZGlyZWN0aW9uICovCi0gIGludCBkaXIzOwkJCS8qIDMqZGlyLCBmb3IgYWR2YW5jaW5nIGlucHRyICYgZXJyb3JwdHIgKi8KKyAgaW50IGRpcjsgICAgICAgICAgICAgICAgICAgICAgLyogKzEgb3IgLTEgZGVwZW5kaW5nIG9uIGRpcmVjdGlvbiAqLworICBpbnQgZGlyMzsgICAgICAgICAgICAgICAgICAgICAvKiAzKmRpciwgZm9yIGFkdmFuY2luZyBpbnB0ciAmIGVycm9ycHRyICovCiAgIGludCByb3c7CiAgIEpESU1FTlNJT04gY29sOwogICBKRElNRU5TSU9OIHdpZHRoID0gY2luZm8tPm91dHB1dF93aWR0aDsKQEAgLTk2MCw3ICs5NjAsNyBAQAogICAgIG91dHB0ciA9IG91dHB1dF9idWZbcm93XTsKICAgICBpZiAoY3F1YW50aXplLT5vbl9vZGRfcm93KSB7CiAgICAgICAvKiB3b3JrIHJpZ2h0IHRvIGxlZnQgaW4gdGhpcyByb3cgKi8KLSAgICAgIGlucHRyICs9ICh3aWR0aC0xKSAqIDM7CS8qIHNvIHBvaW50IHRvIHJpZ2h0bW9zdCBwaXhlbCAqLworICAgICAgaW5wdHIgKz0gKHdpZHRoLTEpICogMzsgICAvKiBzbyBwb2ludCB0byByaWdodG1vc3QgcGl4ZWwgKi8KICAgICAgIG91dHB0ciArPSB3aWR0aC0xOwogICAgICAgZGlyID0gLTE7CiAgICAgICBkaXIzID0gLTM7CkBAIC0xMDEyLDE0ICsxMDEyLDE0IEBACiAgICAgICAvKiBJZiB3ZSBoYXZlIG5vdCBzZWVuIHRoaXMgY29sb3IgYmVmb3JlLCBmaW5kIG5lYXJlc3QgY29sb3JtYXAgKi8KICAgICAgIC8qIGVudHJ5IGFuZCB1cGRhdGUgdGhlIGNhY2hlICovCiAgICAgICBpZiAoKmNhY2hlcCA9PSAwKQotCWZpbGxfaW52ZXJzZV9jbWFwKGNpbmZvLCBjdXIwPj5DMF9TSElGVCxjdXIxPj5DMV9TSElGVCxjdXIyPj5DMl9TSElGVCk7CisgICAgICAgIGZpbGxfaW52ZXJzZV9jbWFwKGNpbmZvLCBjdXIwPj5DMF9TSElGVCxjdXIxPj5DMV9TSElGVCxjdXIyPj5DMl9TSElGVCk7CiAgICAgICAvKiBOb3cgZW1pdCB0aGUgY29sb3JtYXAgaW5kZXggZm9yIHRoaXMgY2VsbCAqLwogICAgICAgeyByZWdpc3RlciBpbnQgcGl4Y29kZSA9ICpjYWNoZXAgLSAxOwotCSpvdXRwdHIgPSAoSlNBTVBMRSkgcGl4Y29kZTsKLQkvKiBDb21wdXRlIHJlcHJlc2VudGF0aW9uIGVycm9yIGZvciB0aGlzIHBpeGVsICovCi0JY3VyMCAtPSBHRVRKU0FNUExFKGNvbG9ybWFwMFtwaXhjb2RlXSk7Ci0JY3VyMSAtPSBHRVRKU0FNUExFKGNvbG9ybWFwMVtwaXhjb2RlXSk7Ci0JY3VyMiAtPSBHRVRKU0FNUExFKGNvbG9ybWFwMltwaXhjb2RlXSk7CisgICAgICAgICpvdXRwdHIgPSAoSlNBTVBMRSkgcGl4Y29kZTsKKyAgICAgICAgLyogQ29tcHV0ZSByZXByZXNlbnRhdGlvbiBlcnJvciBmb3IgdGhpcyBwaXhlbCAqLworICAgICAgICBjdXIwIC09IEdFVEpTQU1QTEUoY29sb3JtYXAwW3BpeGNvZGVdKTsKKyAgICAgICAgY3VyMSAtPSBHRVRKU0FNUExFKGNvbG9ybWFwMVtwaXhjb2RlXSk7CisgICAgICAgIGN1cjIgLT0gR0VUSlNBTVBMRShjb2xvcm1hcDJbcGl4Y29kZV0pOwogICAgICAgfQogICAgICAgLyogQ29tcHV0ZSBlcnJvciBmcmFjdGlvbnMgdG8gYmUgcHJvcGFnYXRlZCB0byBhZGphY2VudCBwaXhlbHMuCiAgICAgICAgKiBBZGQgdGhlc2UgaW50byB0aGUgcnVubmluZyBzdW1zLCBhbmQgc2ltdWx0YW5lb3VzbHkgc2hpZnQgdGhlCkBAIC0xMDI3LDI5ICsxMDI3LDI5IEBACiAgICAgICAgKi8KICAgICAgIHsgcmVnaXN0ZXIgTE9DRlNFUlJPUiBibmV4dGVycjsKIAotCWJuZXh0ZXJyID0gY3VyMDsJLyogUHJvY2VzcyBjb21wb25lbnQgMCAqLwotCWVycm9ycHRyWzBdID0gKEZTRVJST1IpIChicHJldmVycjAgKyBjdXIwICogMyk7Ci0JYnByZXZlcnIwID0gYmVsb3dlcnIwICsgY3VyMCAqIDU7Ci0JYmVsb3dlcnIwID0gYm5leHRlcnI7Ci0JY3VyMCAqPSA3OwotCWJuZXh0ZXJyID0gY3VyMTsJLyogUHJvY2VzcyBjb21wb25lbnQgMSAqLwotCWVycm9ycHRyWzFdID0gKEZTRVJST1IpIChicHJldmVycjEgKyBjdXIxICogMyk7Ci0JYnByZXZlcnIxID0gYmVsb3dlcnIxICsgY3VyMSAqIDU7Ci0JYmVsb3dlcnIxID0gYm5leHRlcnI7Ci0JY3VyMSAqPSA3OwotCWJuZXh0ZXJyID0gY3VyMjsJLyogUHJvY2VzcyBjb21wb25lbnQgMiAqLwotCWVycm9ycHRyWzJdID0gKEZTRVJST1IpIChicHJldmVycjIgKyBjdXIyICogMyk7Ci0JYnByZXZlcnIyID0gYmVsb3dlcnIyICsgY3VyMiAqIDU7Ci0JYmVsb3dlcnIyID0gYm5leHRlcnI7Ci0JY3VyMiAqPSA3OworICAgICAgICBibmV4dGVyciA9IGN1cjA7ICAgICAgICAvKiBQcm9jZXNzIGNvbXBvbmVudCAwICovCisgICAgICAgIGVycm9ycHRyWzBdID0gKEZTRVJST1IpIChicHJldmVycjAgKyBjdXIwICogMyk7CisgICAgICAgIGJwcmV2ZXJyMCA9IGJlbG93ZXJyMCArIGN1cjAgKiA1OworICAgICAgICBiZWxvd2VycjAgPSBibmV4dGVycjsKKyAgICAgICAgY3VyMCAqPSA3OworICAgICAgICBibmV4dGVyciA9IGN1cjE7ICAgICAgICAvKiBQcm9jZXNzIGNvbXBvbmVudCAxICovCisgICAgICAgIGVycm9ycHRyWzFdID0gKEZTRVJST1IpIChicHJldmVycjEgKyBjdXIxICogMyk7CisgICAgICAgIGJwcmV2ZXJyMSA9IGJlbG93ZXJyMSArIGN1cjEgKiA1OworICAgICAgICBiZWxvd2VycjEgPSBibmV4dGVycjsKKyAgICAgICAgY3VyMSAqPSA3OworICAgICAgICBibmV4dGVyciA9IGN1cjI7ICAgICAgICAvKiBQcm9jZXNzIGNvbXBvbmVudCAyICovCisgICAgICAgIGVycm9ycHRyWzJdID0gKEZTRVJST1IpIChicHJldmVycjIgKyBjdXIyICogMyk7CisgICAgICAgIGJwcmV2ZXJyMiA9IGJlbG93ZXJyMiArIGN1cjIgKiA1OworICAgICAgICBiZWxvd2VycjIgPSBibmV4dGVycjsKKyAgICAgICAgY3VyMiAqPSA3OwogICAgICAgfQogICAgICAgLyogQXQgdGhpcyBwb2ludCBjdXJOIGNvbnRhaW5zIHRoZSA3LzE2IGVycm9yIHZhbHVlIHRvIGJlIHByb3BhZ2F0ZWQKICAgICAgICAqIHRvIHRoZSBuZXh0IHBpeGVsIG9uIHRoZSBjdXJyZW50IGxpbmUsIGFuZCBhbGwgdGhlIGVycm9ycyBmb3IgdGhlCiAgICAgICAgKiBuZXh0IGxpbmUgaGF2ZSBiZWVuIHNoaWZ0ZWQgb3Zlci4gIFdlIGFyZSB0aGVyZWZvcmUgcmVhZHkgdG8gbW92ZSBvbi4KICAgICAgICAqLwotICAgICAgaW5wdHIgKz0gZGlyMzsJCS8qIEFkdmFuY2UgcGl4ZWwgcG9pbnRlcnMgdG8gbmV4dCBjb2x1bW4gKi8KKyAgICAgIGlucHRyICs9IGRpcjM7ICAgICAgICAgICAgLyogQWR2YW5jZSBwaXhlbCBwb2ludGVycyB0byBuZXh0IGNvbHVtbiAqLwogICAgICAgb3V0cHRyICs9IGRpcjsKLSAgICAgIGVycm9ycHRyICs9IGRpcjM7CQkvKiBhZHZhbmNlIGVycm9ycHRyIHRvIGN1cnJlbnQgY29sdW1uICovCisgICAgICBlcnJvcnB0ciArPSBkaXIzOyAgICAgICAgIC8qIGFkdmFuY2UgZXJyb3JwdHIgdG8gY3VycmVudCBjb2x1bW4gKi8KICAgICB9CiAgICAgLyogUG9zdC1sb29wIGNsZWFudXA6IHdlIG11c3QgdW5sb2FkIHRoZSBmaW5hbCBlcnJvciB2YWx1ZXMgaW50byB0aGUKICAgICAgKiBmaW5hbCBmc2Vycm9yc1tdIGVudHJ5LiAgTm90ZSB3ZSBuZWVkIG5vdCB1bmxvYWQgYmVsb3dlcnJOIGJlY2F1c2UKQEAgLTEwODksNyArMTA4OSw3IEBACiAKICAgdGFibGUgPSAoaW50ICopICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpCiAgICAgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwgKE1BWEpTQU1QTEUqMisxKSAqIFNJWkVPRihpbnQpKTsKLSAgdGFibGUgKz0gTUFYSlNBTVBMRTsJCS8qIHNvIGNhbiBpbmRleCAtTUFYSlNBTVBMRSAuLiArTUFYSlNBTVBMRSAqLworICB0YWJsZSArPSBNQVhKU0FNUExFOyAgICAgICAgICAvKiBzbyBjYW4gaW5kZXggLU1BWEpTQU1QTEUgLi4gK01BWEpTQU1QTEUgKi8KICAgY3F1YW50aXplLT5lcnJvcl9saW1pdGVyID0gdGFibGU7CiAKICNkZWZpbmUgU1RFUFNJWkUgKChNQVhKU0FNUExFKzEpLzE2KQpAQCAtMTE3MiwxNiArMTE3MiwxNiBAQAogCiAgICAgaWYgKGNpbmZvLT5kaXRoZXJfbW9kZSA9PSBKRElUSEVSX0ZTKSB7CiAgICAgICBzaXplX3QgYXJyYXlzaXplID0gKHNpemVfdCkgKChjaW5mby0+b3V0cHV0X3dpZHRoICsgMikgKgotCQkJCSAgICgzICogU0laRU9GKEZTRVJST1IpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgzICogU0laRU9GKEZTRVJST1IpKSk7CiAgICAgICAvKiBBbGxvY2F0ZSBGbG95ZC1TdGVpbmJlcmcgd29ya3NwYWNlIGlmIHdlIGRpZG4ndCBhbHJlYWR5LiAqLwogICAgICAgaWYgKGNxdWFudGl6ZS0+ZnNlcnJvcnMgPT0gTlVMTCkKLQljcXVhbnRpemUtPmZzZXJyb3JzID0gKEZTRVJSUFRSKSAoKmNpbmZvLT5tZW0tPmFsbG9jX2xhcmdlKQotCSAgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwgYXJyYXlzaXplKTsKKyAgICAgICAgY3F1YW50aXplLT5mc2Vycm9ycyA9IChGU0VSUlBUUikgKCpjaW5mby0+bWVtLT5hbGxvY19sYXJnZSkKKyAgICAgICAgICAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLCBhcnJheXNpemUpOwogICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgcHJvcGFnYXRlZCBlcnJvcnMgdG8gemVyby4gKi8KICAgICAgIGp6ZXJvX2Zhcigodm9pZCBGQVIgKikgY3F1YW50aXplLT5mc2Vycm9ycywgYXJyYXlzaXplKTsKICAgICAgIC8qIE1ha2UgdGhlIGVycm9yLWxpbWl0IHRhYmxlIGlmIHdlIGRpZG4ndCBhbHJlYWR5LiAqLwogICAgICAgaWYgKGNxdWFudGl6ZS0+ZXJyb3JfbGltaXRlciA9PSBOVUxMKQotCWluaXRfZXJyb3JfbGltaXQoY2luZm8pOworICAgICAgICBpbml0X2Vycm9yX2xpbWl0KGNpbmZvKTsKICAgICAgIGNxdWFudGl6ZS0+b25fb2RkX3JvdyA9IEZBTFNFOwogICAgIH0KIApAQCAtMTE5MCw3ICsxMTkwLDcgQEAKICAgaWYgKGNxdWFudGl6ZS0+bmVlZHNfemVyb2VkKSB7CiAgICAgZm9yIChpID0gMDsgaSA8IEhJU1RfQzBfRUxFTVM7IGkrKykgewogICAgICAganplcm9fZmFyKCh2b2lkIEZBUiAqKSBoaXN0b2dyYW1baV0sCi0JCUhJU1RfQzFfRUxFTVMqSElTVF9DMl9FTEVNUyAqIFNJWkVPRihoaXN0Y2VsbCkpOworICAgICAgICAgICAgICAgIEhJU1RfQzFfRUxFTVMqSElTVF9DMl9FTEVNUyAqIFNJWkVPRihoaXN0Y2VsbCkpOwogICAgIH0KICAgICBjcXVhbnRpemUtPm5lZWRzX3plcm9lZCA9IEZBTFNFOwogICB9CkBAIC0xMjIzLDExICsxMjIzLDExIEBACiAKICAgY3F1YW50aXplID0gKG15X2NxdWFudGl6ZV9wdHIpCiAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKLQkJCQlTSVpFT0YobXlfY3F1YW50aXplcikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSVpFT0YobXlfY3F1YW50aXplcikpOwogICBjaW5mby0+Y3F1YW50aXplID0gKHN0cnVjdCBqcGVnX2NvbG9yX3F1YW50aXplciAqKSBjcXVhbnRpemU7CiAgIGNxdWFudGl6ZS0+cHViLnN0YXJ0X3Bhc3MgPSBzdGFydF9wYXNzXzJfcXVhbnQ7CiAgIGNxdWFudGl6ZS0+cHViLm5ld19jb2xvcl9tYXAgPSBuZXdfY29sb3JfbWFwXzJfcXVhbnQ7Ci0gIGNxdWFudGl6ZS0+ZnNlcnJvcnMgPSBOVUxMOwkvKiBmbGFnIG9wdGlvbmFsIGFycmF5cyBub3QgYWxsb2NhdGVkICovCisgIGNxdWFudGl6ZS0+ZnNlcnJvcnMgPSBOVUxMOyAgIC8qIGZsYWcgb3B0aW9uYWwgYXJyYXlzIG5vdCBhbGxvY2F0ZWQgKi8KICAgY3F1YW50aXplLT5lcnJvcl9saW1pdGVyID0gTlVMTDsKIAogICAvKiBNYWtlIHN1cmUgamRtYXN0ZXIgZGlkbid0IGdpdmUgbWUgYSBjYXNlIEkgY2FuJ3QgaGFuZGxlICovCmRpZmYgLS1naXQgYS9qc2ltZC5oIGIvanNpbWQuaAppbmRleCAzZmEyYzQzLi5hZTA3MjE1IDEwMDY0NAotLS0gYS9qc2ltZC5oCisrKyBiL2pzaW1kLmgKQEAgLTMsNyArMyw3IEBACiAgKgogICogQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgogICogQ29weXJpZ2h0IDIwMTEgRC4gUi4gQ29tbWFuZGVyCi0gKiAKKyAqCiAgKiBCYXNlZCBvbiB0aGUgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5LAogICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKZGlmZiAtLWdpdCBhL2pzaW1kX25vbmUuYyBiL2pzaW1kX25vbmUuYwppbmRleCA5Nzg3OTAyLi41NDEzMGRiIDEwMDY0NAotLS0gYS9qc2ltZF9ub25lLmMKKysrIGIvanNpbWRfbm9uZS5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKICAqIENvcHlyaWdodCAyMDA5LTIwMTEgRC4gUi4gQ29tbWFuZGVyCi0gKiAKKyAqCiAgKiBCYXNlZCBvbiB0aGUgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5LAogICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKQEAgLTk1LDcgKzk1LDcgQEAKIAogR0xPQkFMKHZvaWQpCiBqc2ltZF9oMnYyX3Vwc2FtcGxlIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAotICAgICAgICAgICAgICAgICAgICAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsIAorICAgICAgICAgICAgICAgICAgICAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCiAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyKQogewpAQCAtMTAzLDcgKzEwMyw3IEBACiAKIEdMT0JBTCh2b2lkKQoganNpbWRfaDJ2MV91cHNhbXBsZSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKLSAgICAgICAgICAgICAgICAgICAgIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLCAKKyAgICAgICAgICAgICAgICAgICAgIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAogICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLAogICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSAqIG91dHB1dF9kYXRhX3B0cikKIHsKQEAgLTEyMyw3ICsxMjMsNyBAQAogCiBHTE9CQUwodm9pZCkKIGpzaW1kX2gydjJfZmFuY3lfdXBzYW1wbGUgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIpCiB7CkBAIC0xMzEsNyArMTMxLDcgQEAKIAogR0xPQkFMKHZvaWQpCiBqc2ltZF9oMnYxX2ZhbmN5X3Vwc2FtcGxlIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyKQogewpAQCAtMjkyLDIyICsyOTIsMjIgQEAKIAogR0xPQkFMKHZvaWQpCiBqc2ltZF9pZGN0X2lzbG93IChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKLSAgICAgICAgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCi0gICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQorICAgICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQogewogfQogCiBHTE9CQUwodm9pZCkKIGpzaW1kX2lkY3RfaWZhc3QgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAotICAgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKLSAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9jb2wpCisgICAgICAgICAgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9jb2wpCiB7CiB9CiAKIEdMT0JBTCh2b2lkKQoganNpbWRfaWRjdF9mbG9hdCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCi0gICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAotICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKKyAgICAgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvanNpbWRkY3QuaCBiL2pzaW1kZGN0LmgKaW5kZXggYTFjNzQ0MC4uMGQ4ODA0YyAxMDA2NDQKLS0tIGEvanNpbWRkY3QuaAorKysgYi9qc2ltZGRjdC5oCkBAIC0yLDcgKzIsNyBAQAogICoganNpbWRkY3QuaAogICoKICAqIENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKLSAqIAorICoKICAqIEJhc2VkIG9uIHRoZSB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnksCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYwpkaWZmIC0tZ2l0IGEvanV0aWxzLmMgYi9qdXRpbHMuYwppbmRleCBkMThhOTU1Li5iOTk5N2EzIDEwMDY0NAotLS0gYS9qdXRpbHMuYworKysgYi9qdXRpbHMuYwpAQCAtMjEsNyArMjEsNyBAQAogICogb2YgYSBEQ1QgYmxvY2sgcmVhZCBpbiBuYXR1cmFsIG9yZGVyIChsZWZ0IHRvIHJpZ2h0LCB0b3AgdG8gYm90dG9tKS4KICAqLwogCi0jaWYgMAkJCQkvKiBUaGlzIHRhYmxlIGlzIG5vdCBhY3R1YWxseSBuZWVkZWQgaW4gdjZhICovCisjaWYgMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoaXMgdGFibGUgaXMgbm90IGFjdHVhbGx5IG5lZWRlZCBpbiB2NmEgKi8KIAogY29uc3QgaW50IGpwZWdfemlnemFnX29yZGVyW0RDVFNJWkUyXSA9IHsKICAgIDAsICAxLCAgNSwgIDYsIDE0LCAxNSwgMjcsIDI4LApAQCAtOTYsMjEgKzk2LDIxIEBACiAgKiBpcyBub3QgYWxsIHRoYXQgZ3JlYXQsIGJlY2F1c2UgdGhlc2Ugcm91dGluZXMgYXJlbid0IHZlcnkgaGVhdmlseSB1c2VkLikKICAqLwogCi0jaWZuZGVmIE5FRURfRkFSX1BPSU5URVJTCS8qIG5vcm1hbCBjYXNlLCBzYW1lIGFzIHJlZ3VsYXIgbWFjcm9zICovCi0jZGVmaW5lIEZNRU1DT1BZKGRlc3Qsc3JjLHNpemUpCU1FTUNPUFkoZGVzdCxzcmMsc2l6ZSkKLSNkZWZpbmUgRk1FTVpFUk8odGFyZ2V0LHNpemUpCU1FTVpFUk8odGFyZ2V0LHNpemUpCi0jZWxzZQkJCQkvKiA4MHg4NiBjYXNlLCBkZWZpbmUgaWYgd2UgY2FuICovCisjaWZuZGVmIE5FRURfRkFSX1BPSU5URVJTICAgICAgIC8qIG5vcm1hbCBjYXNlLCBzYW1lIGFzIHJlZ3VsYXIgbWFjcm9zICovCisjZGVmaW5lIEZNRU1DT1BZKGRlc3Qsc3JjLHNpemUpIE1FTUNPUFkoZGVzdCxzcmMsc2l6ZSkKKyNkZWZpbmUgRk1FTVpFUk8odGFyZ2V0LHNpemUpICAgTUVNWkVSTyh0YXJnZXQsc2l6ZSkKKyNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogODB4ODYgY2FzZSwgZGVmaW5lIGlmIHdlIGNhbiAqLwogI2lmZGVmIFVTRV9GTUVNCi0jZGVmaW5lIEZNRU1DT1BZKGRlc3Qsc3JjLHNpemUpCV9mbWVtY3B5KCh2b2lkIEZBUiAqKShkZXN0KSwgKGNvbnN0IHZvaWQgRkFSICopKHNyYyksIChzaXplX3QpKHNpemUpKQotI2RlZmluZSBGTUVNWkVSTyh0YXJnZXQsc2l6ZSkJX2ZtZW1zZXQoKHZvaWQgRkFSICopKHRhcmdldCksIDAsIChzaXplX3QpKHNpemUpKQorI2RlZmluZSBGTUVNQ09QWShkZXN0LHNyYyxzaXplKSBfZm1lbWNweSgodm9pZCBGQVIgKikoZGVzdCksIChjb25zdCB2b2lkIEZBUiAqKShzcmMpLCAoc2l6ZV90KShzaXplKSkKKyNkZWZpbmUgRk1FTVpFUk8odGFyZ2V0LHNpemUpICAgX2ZtZW1zZXQoKHZvaWQgRkFSICopKHRhcmdldCksIDAsIChzaXplX3QpKHNpemUpKQogI2VuZGlmCiAjZW5kaWYKIAogCiBHTE9CQUwodm9pZCkKIGpjb3B5X3NhbXBsZV9yb3dzIChKU0FNUEFSUkFZIGlucHV0X2FycmF5LCBpbnQgc291cmNlX3JvdywKLQkJICAgSlNBTVBBUlJBWSBvdXRwdXRfYXJyYXksIGludCBkZXN0X3JvdywKLQkJICAgaW50IG51bV9yb3dzLCBKRElNRU5TSU9OIG51bV9jb2xzKQorICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2FycmF5LCBpbnQgZGVzdF9yb3csCisgICAgICAgICAgICAgICAgICAgaW50IG51bV9yb3dzLCBKRElNRU5TSU9OIG51bV9jb2xzKQogLyogQ29weSBzb21lIHJvd3Mgb2Ygc2FtcGxlcyBmcm9tIG9uZSBwbGFjZSB0byBhbm90aGVyLgogICogbnVtX3Jvd3Mgcm93cyBhcmUgY29waWVkIGZyb20gaW5wdXRfYXJyYXlbc291cmNlX3JvdysrXQogICogdG8gb3V0cHV0X2FycmF5W2Rlc3Rfcm93KytdOyB0aGVzZSBhcmVhcyBtYXkgb3ZlcmxhcCBmb3IgZHVwbGljYXRpb24uCkBAIC0xMzUsNyArMTM1LDcgQEAKICAgICBGTUVNQ09QWShvdXRwdHIsIGlucHRyLCBjb3VudCk7CiAjZWxzZQogICAgIGZvciAoY291bnQgPSBudW1fY29sczsgY291bnQgPiAwOyBjb3VudC0tKQotICAgICAgKm91dHB0cisrID0gKmlucHRyKys7CS8qIG5lZWRuJ3QgYm90aGVyIHdpdGggR0VUSlNBTVBMRSgpIGhlcmUgKi8KKyAgICAgICpvdXRwdHIrKyA9ICppbnB0cisrOyAgICAgLyogbmVlZG4ndCBib3RoZXIgd2l0aCBHRVRKU0FNUExFKCkgaGVyZSAqLwogI2VuZGlmCiAgIH0KIH0KQEAgLTE0Myw3ICsxNDMsNyBAQAogCiBHTE9CQUwodm9pZCkKIGpjb3B5X2Jsb2NrX3JvdyAoSkJMT0NLUk9XIGlucHV0X3JvdywgSkJMT0NLUk9XIG91dHB1dF9yb3csCi0JCSBKRElNRU5TSU9OIG51bV9ibG9ja3MpCisgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gbnVtX2Jsb2NrcykKIC8qIENvcHkgYSByb3cgb2YgY29lZmZpY2llbnQgYmxvY2tzIGZyb20gb25lIHBsYWNlIHRvIGFub3RoZXIuICovCiB7CiAjaWZkZWYgRk1FTUNPUFkKZGlmZiAtLWdpdCBhL2p2ZXJzaW9uLmggYi9qdmVyc2lvbi5oCmluZGV4IDhkM2E1ZjcuLjFiZDRkYmEgMTAwNjQ0Ci0tLSBhL2p2ZXJzaW9uLmgKKysrIGIvanZlcnNpb24uaApAQCAtMiw4ICsyLDggQEAKICAqIGp2ZXJzaW9uLmgKICAqCiAgKiBUaGlzIGZpbGUgd2FzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZToKLSAqIENvcHlyaWdodCAoQykgMTk5MS0yMDEwLCBUaG9tYXMgRy4gTGFuZSwgR3VpZG8gVm9sbGJlZGluZy4KLSAqIE1vZGlmaWNhdGlvbnM6CisgKiBDb3B5cmlnaHQgKEMpIDE5OTEtMjAxMiwgVGhvbWFzIEcuIExhbmUsIEd1aWRvIFZvbGxiZWRpbmcuCisgKiBsaWJqcGVnLXR1cmJvIE1vZGlmaWNhdGlvbnM6CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTItMjAxNCwgRC4gUi4gQ29tbWFuZGVyLgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgogICoKQEAgLTEzLDIyICsxMywyMiBAQAogCiAjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA4MAogCi0jZGVmaW5lIEpWRVJTSU9OCSI4YiAgMTYtTWF5LTIwMTAiCisjZGVmaW5lIEpWRVJTSU9OICAgICAgICAiOGQgIDE1LUphbi0yMDEyIgogCiAjZWxpZiBKUEVHX0xJQl9WRVJTSU9OID49IDcwCiAKLSNkZWZpbmUgSlZFUlNJT04JIjcgIDI3LUp1bi0yMDA5IgorI2RlZmluZSBKVkVSU0lPTiAgICAgICAgIjcgIDI3LUp1bi0yMDA5IgogCiAjZWxzZQogCi0jZGVmaW5lIEpWRVJTSU9OCSI2YiAgMjctTWFyLTE5OTgiCisjZGVmaW5lIEpWRVJTSU9OICAgICAgICAiNmIgIDI3LU1hci0xOTk4IgogCiAjZW5kaWYKIAotI2RlZmluZSBKQ09QWVJJR0hUCSJDb3B5cmlnaHQgKEMpIDE5OTEtMjAxMCBUaG9tYXMgRy4gTGFuZSwgR3VpZG8gVm9sbGJlZGluZ1xuIiBcCi0JCQkiQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYgTUlZQVNBS0EgTWFzYXJ1XG4iIFwKLQkJCSJDb3B5cmlnaHQgKEMpIDIwMDkgUGllcnJlIE9zc21hbiBmb3IgQ2VuZGlvIEFCXG4iIFwKLQkJCSJDb3B5cmlnaHQgKEMpIDIwMDktMjAxNCBELiBSLiBDb21tYW5kZXJcbiIgXAotCQkJIkNvcHlyaWdodCAoQykgMjAwOS0yMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKSIKKyNkZWZpbmUgSkNPUFlSSUdIVCAgICAgICJDb3B5cmlnaHQgKEMpIDE5OTEtMjAxMiBUaG9tYXMgRy4gTGFuZSwgR3VpZG8gVm9sbGJlZGluZ1xuIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAiQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYgTUlZQVNBS0EgTWFzYXJ1XG4iIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDb3B5cmlnaHQgKEMpIDIwMDkgUGllcnJlIE9zc21hbiBmb3IgQ2VuZGlvIEFCXG4iIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDb3B5cmlnaHQgKEMpIDIwMDktMjAxNCBELiBSLiBDb21tYW5kZXJcbiIgXAorICAgICAgICAgICAgICAgICAgICAgICAgIkNvcHlyaWdodCAoQykgMjAwOS0yMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKSIKIAogI2RlZmluZSBKQ09QWVJJR0hUX1NIT1JUICJDb3B5cmlnaHQgKEMpIDE5OTEtMjAxNCBUaGUgbGlianBlZy10dXJibyBQcm9qZWN0IGFuZCBtYW55IG90aGVycyIKZGlmZiAtLWdpdCBhL2xpYmpwZWcubWFwLmluIGIvbGlianBlZy5tYXAuaW4KaW5kZXggNTQ0Mzk0My4uYjQ0ODBkOCAxMDA2NDQKLS0tIGEvbGlianBlZy5tYXAuaW4KKysrIGIvbGlianBlZy5tYXAuaW4KQEAgLTEsNCArMSw1IEBACiBMSUJKUEVHVFVSQk9fQEpQRUdfTElCX1ZFUlNJT05fREVDSU1BTEAgeworICBATUVNX1NSQ0RTVF9GVU5DVElPTlNACiAgIGxvY2FsOgogICAgIGpzaW1kXyo7CiAgICAgamNvbnN0Xyo7CmRpZmYgLS1naXQgYS9saWJqcGVnLnR4dCBiL2xpYmpwZWcudHh0CmluZGV4IDY5NzAxMzYuLjI1NWE3ZTEgMTAwNjQ0Ci0tLSBhL2xpYmpwZWcudHh0CisrKyBiL2xpYmpwZWcudHh0CkBAIC0xLDkgKzEsOSBAQAogVVNJTkcgVEhFIElKRyBKUEVHIExJQlJBUlkKIAogVGhpcyBmaWxlIHdhcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmU6Ci1Db3B5cmlnaHQgKEMpIDE5OTQtMjAwOSwgVGhvbWFzIEcuIExhbmUsIEd1aWRvIFZvbGxiZWRpbmcuCi1Nb2RpZmljYXRpb25zOgotQ29weXJpZ2h0IChDKSAyMDEwLCBELiBSLiBDb21tYW5kZXIuCitDb3B5cmlnaHQgKEMpIDE5OTQtMjAxMSwgVGhvbWFzIEcuIExhbmUsIEd1aWRvIFZvbGxiZWRpbmcuCitsaWJqcGVnLXR1cmJvIE1vZGlmaWNhdGlvbnM6CitDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTQsIEQuIFIuIENvbW1hbmRlci4KIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KIAogCkBAIC0yNywzMiArMjcsMzIgQEAKIC0tLS0tLS0tLS0tLS0tLS0tCiAKIE92ZXJ2aWV3OgotCUZ1bmN0aW9ucyBwcm92aWRlZCBieSB0aGUgbGlicmFyeQotCU91dGxpbmUgb2YgdHlwaWNhbCB1c2FnZQorICAgICAgICBGdW5jdGlvbnMgcHJvdmlkZWQgYnkgdGhlIGxpYnJhcnkKKyAgICAgICAgT3V0bGluZSBvZiB0eXBpY2FsIHVzYWdlCiBCYXNpYyBsaWJyYXJ5IHVzYWdlOgotCURhdGEgZm9ybWF0cwotCUNvbXByZXNzaW9uIGRldGFpbHMKLQlEZWNvbXByZXNzaW9uIGRldGFpbHMKLQlNZWNoYW5pY3Mgb2YgdXNhZ2U6IGluY2x1ZGUgZmlsZXMsIGxpbmtpbmcsIGV0YworICAgICAgICBEYXRhIGZvcm1hdHMKKyAgICAgICAgQ29tcHJlc3Npb24gZGV0YWlscworICAgICAgICBEZWNvbXByZXNzaW9uIGRldGFpbHMKKyAgICAgICAgTWVjaGFuaWNzIG9mIHVzYWdlOiBpbmNsdWRlIGZpbGVzLCBsaW5raW5nLCBldGMKIEFkdmFuY2VkIGZlYXR1cmVzOgotCUNvbXByZXNzaW9uIHBhcmFtZXRlciBzZWxlY3Rpb24KLQlEZWNvbXByZXNzaW9uIHBhcmFtZXRlciBzZWxlY3Rpb24KLQlTcGVjaWFsIGNvbG9yIHNwYWNlcwotCUVycm9yIGhhbmRsaW5nCi0JQ29tcHJlc3NlZCBkYXRhIGhhbmRsaW5nIChzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIG1hbmFnZXJzKQotCUkvTyBzdXNwZW5zaW9uCi0JUHJvZ3Jlc3NpdmUgSlBFRyBzdXBwb3J0Ci0JQnVmZmVyZWQtaW1hZ2UgbW9kZQotCUFiYnJldmlhdGVkIGRhdGFzdHJlYW1zIGFuZCBtdWx0aXBsZSBpbWFnZXMKLQlTcGVjaWFsIG1hcmtlcnMKLQlSYXcgKGRvd25zYW1wbGVkKSBpbWFnZSBkYXRhCi0JUmVhbGx5IHJhdyBkYXRhOiBEQ1QgY29lZmZpY2llbnRzCi0JUHJvZ3Jlc3MgbW9uaXRvcmluZwotCU1lbW9yeSBtYW5hZ2VtZW50Ci0JTWVtb3J5IHVzYWdlCi0JTGlicmFyeSBjb21waWxlLXRpbWUgb3B0aW9ucwotCVBvcnRhYmlsaXR5IGNvbnNpZGVyYXRpb25zCi0JTm90ZXMgZm9yIE1TLURPUyBpbXBsZW1lbnRvcnMKKyAgICAgICAgQ29tcHJlc3Npb24gcGFyYW1ldGVyIHNlbGVjdGlvbgorICAgICAgICBEZWNvbXByZXNzaW9uIHBhcmFtZXRlciBzZWxlY3Rpb24KKyAgICAgICAgU3BlY2lhbCBjb2xvciBzcGFjZXMKKyAgICAgICAgRXJyb3IgaGFuZGxpbmcKKyAgICAgICAgQ29tcHJlc3NlZCBkYXRhIGhhbmRsaW5nIChzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIG1hbmFnZXJzKQorICAgICAgICBJL08gc3VzcGVuc2lvbgorICAgICAgICBQcm9ncmVzc2l2ZSBKUEVHIHN1cHBvcnQKKyAgICAgICAgQnVmZmVyZWQtaW1hZ2UgbW9kZQorICAgICAgICBBYmJyZXZpYXRlZCBkYXRhc3RyZWFtcyBhbmQgbXVsdGlwbGUgaW1hZ2VzCisgICAgICAgIFNwZWNpYWwgbWFya2VycworICAgICAgICBSYXcgKGRvd25zYW1wbGVkKSBpbWFnZSBkYXRhCisgICAgICAgIFJlYWxseSByYXcgZGF0YTogRENUIGNvZWZmaWNpZW50cworICAgICAgICBQcm9ncmVzcyBtb25pdG9yaW5nCisgICAgICAgIE1lbW9yeSBtYW5hZ2VtZW50CisgICAgICAgIE1lbW9yeSB1c2FnZQorICAgICAgICBMaWJyYXJ5IGNvbXBpbGUtdGltZSBvcHRpb25zCisgICAgICAgIFBvcnRhYmlsaXR5IGNvbnNpZGVyYXRpb25zCisgICAgICAgIE5vdGVzIGZvciBNUy1ET1MgaW1wbGVtZW50b3JzCiAKIFlvdSBzaG91bGQgcmVhZCBhdCBsZWFzdCB0aGUgb3ZlcnZpZXcgYW5kIGJhc2ljIHVzYWdlIHNlY3Rpb25zIGJlZm9yZSB0cnlpbmcKIHRvIHByb2dyYW0gd2l0aCB0aGUgbGlicmFyeS4gIFRoZSBzZWN0aW9ucyBvbiBhZHZhbmNlZCBmZWF0dXJlcyBjYW4gYmUgcmVhZApAQCAtOTMsMTAgKzkzLDEwIEBACiB0aGUgSVNPIEpQRUcgc3RhbmRhcmQ7IG1vc3QgYmFzZWxpbmUsIGV4dGVuZGVkLXNlcXVlbnRpYWwsIGFuZCBwcm9ncmVzc2l2ZQogSlBFRyBwcm9jZXNzZXMgYXJlIHN1cHBvcnRlZC4gIChPdXIgc3Vic2V0IGluY2x1ZGVzIGFsbCBmZWF0dXJlcyBub3cgaW4gY29tbW9uCiB1c2UuKSAgVW5zdXBwb3J0ZWQgSVNPIG9wdGlvbnMgaW5jbHVkZToKLQkqIEhpZXJhcmNoaWNhbCBzdG9yYWdlCi0JKiBMb3NzbGVzcyBKUEVHCi0JKiBETkwgbWFya2VyCi0JKiBOb25pbnRlZ3JhbCBzdWJzYW1wbGluZyByYXRpb3MKKyAgICAgICAgKiBIaWVyYXJjaGljYWwgc3RvcmFnZQorICAgICAgICAqIExvc3NsZXNzIEpQRUcKKyAgICAgICAgKiBETkwgbWFya2VyCisgICAgICAgICogTm9uaW50ZWdyYWwgc3Vic2FtcGxpbmcgcmF0aW9zCiBXZSBzdXBwb3J0IGJvdGggOC0gYW5kIDEyLWJpdCBkYXRhIHByZWNpc2lvbiwgYnV0IHRoaXMgaXMgYSBjb21waWxlLXRpbWUKIGNob2ljZSByYXRoZXIgdGhhbiBhIHJ1bi10aW1lIGNob2ljZTsgaGVuY2UgaXQgaXMgZGlmZmljdWx0IHRvIHVzZSBib3RoCiBwcmVjaXNpb25zIGluIGEgc2luZ2xlIGFwcGxpY2F0aW9uLgpAQCAtMTEzLDE0ICsxMTMsMTQgQEAKIAogVGhlIHJvdWdoIG91dGxpbmUgb2YgYSBKUEVHIGNvbXByZXNzaW9uIG9wZXJhdGlvbiBpczoKIAotCUFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEgSlBFRyBjb21wcmVzc2lvbiBvYmplY3QKLQlTcGVjaWZ5IHRoZSBkZXN0aW5hdGlvbiBmb3IgdGhlIGNvbXByZXNzZWQgZGF0YSAoZWcsIGEgZmlsZSkKLQlTZXQgcGFyYW1ldGVycyBmb3IgY29tcHJlc3Npb24sIGluY2x1ZGluZyBpbWFnZSBzaXplICYgY29sb3JzcGFjZQotCWpwZWdfc3RhcnRfY29tcHJlc3MoLi4uKTsKLQl3aGlsZSAoc2NhbiBsaW5lcyByZW1haW4gdG8gYmUgd3JpdHRlbikKLQkJanBlZ193cml0ZV9zY2FubGluZXMoLi4uKTsKLQlqcGVnX2ZpbmlzaF9jb21wcmVzcyguLi4pOwotCVJlbGVhc2UgdGhlIEpQRUcgY29tcHJlc3Npb24gb2JqZWN0CisgICAgICAgIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEgSlBFRyBjb21wcmVzc2lvbiBvYmplY3QKKyAgICAgICAgU3BlY2lmeSB0aGUgZGVzdGluYXRpb24gZm9yIHRoZSBjb21wcmVzc2VkIGRhdGEgKGVnLCBhIGZpbGUpCisgICAgICAgIFNldCBwYXJhbWV0ZXJzIGZvciBjb21wcmVzc2lvbiwgaW5jbHVkaW5nIGltYWdlIHNpemUgJiBjb2xvcnNwYWNlCisgICAgICAgIGpwZWdfc3RhcnRfY29tcHJlc3MoLi4uKTsKKyAgICAgICAgd2hpbGUgKHNjYW4gbGluZXMgcmVtYWluIHRvIGJlIHdyaXR0ZW4pCisgICAgICAgICAgICAgICAganBlZ193cml0ZV9zY2FubGluZXMoLi4uKTsKKyAgICAgICAganBlZ19maW5pc2hfY29tcHJlc3MoLi4uKTsKKyAgICAgICAgUmVsZWFzZSB0aGUgSlBFRyBjb21wcmVzc2lvbiBvYmplY3QKIAogQSBKUEVHIGNvbXByZXNzaW9uIG9iamVjdCBob2xkcyBwYXJhbWV0ZXJzIGFuZCB3b3JraW5nIHN0YXRlIGZvciB0aGUgSlBFRwogbGlicmFyeS4gIFdlIG1ha2UgY3JlYXRpb24vZGVzdHJ1Y3Rpb24gb2YgdGhlIG9iamVjdCBzZXBhcmF0ZSBmcm9tIHN0YXJ0aW5nCkBAIC0xMzksMTUgKzEzOSwxNSBAQAogCiBTaW1pbGFybHksIHRoZSByb3VnaCBvdXRsaW5lIG9mIGEgSlBFRyBkZWNvbXByZXNzaW9uIG9wZXJhdGlvbiBpczoKIAotCUFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEgSlBFRyBkZWNvbXByZXNzaW9uIG9iamVjdAotCVNwZWNpZnkgdGhlIHNvdXJjZSBvZiB0aGUgY29tcHJlc3NlZCBkYXRhIChlZywgYSBmaWxlKQotCUNhbGwganBlZ19yZWFkX2hlYWRlcigpIHRvIG9idGFpbiBpbWFnZSBpbmZvCi0JU2V0IHBhcmFtZXRlcnMgZm9yIGRlY29tcHJlc3Npb24KLQlqcGVnX3N0YXJ0X2RlY29tcHJlc3MoLi4uKTsKLQl3aGlsZSAoc2NhbiBsaW5lcyByZW1haW4gdG8gYmUgcmVhZCkKLQkJanBlZ19yZWFkX3NjYW5saW5lcyguLi4pOwotCWpwZWdfZmluaXNoX2RlY29tcHJlc3MoLi4uKTsKLQlSZWxlYXNlIHRoZSBKUEVHIGRlY29tcHJlc3Npb24gb2JqZWN0CisgICAgICAgIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEgSlBFRyBkZWNvbXByZXNzaW9uIG9iamVjdAorICAgICAgICBTcGVjaWZ5IHRoZSBzb3VyY2Ugb2YgdGhlIGNvbXByZXNzZWQgZGF0YSAoZWcsIGEgZmlsZSkKKyAgICAgICAgQ2FsbCBqcGVnX3JlYWRfaGVhZGVyKCkgdG8gb2J0YWluIGltYWdlIGluZm8KKyAgICAgICAgU2V0IHBhcmFtZXRlcnMgZm9yIGRlY29tcHJlc3Npb24KKyAgICAgICAganBlZ19zdGFydF9kZWNvbXByZXNzKC4uLik7CisgICAgICAgIHdoaWxlIChzY2FuIGxpbmVzIHJlbWFpbiB0byBiZSByZWFkKQorICAgICAgICAgICAgICAgIGpwZWdfcmVhZF9zY2FubGluZXMoLi4uKTsKKyAgICAgICAganBlZ19maW5pc2hfZGVjb21wcmVzcyguLi4pOworICAgICAgICBSZWxlYXNlIHRoZSBKUEVHIGRlY29tcHJlc3Npb24gb2JqZWN0CiAKIFRoaXMgaXMgY29tcGFyYWJsZSB0byB0aGUgY29tcHJlc3Npb24gb3V0bGluZSBleGNlcHQgdGhhdCByZWFkaW5nIHRoZQogZGF0YXN0cmVhbSBoZWFkZXIgaXMgYSBzZXBhcmF0ZSBzdGVwLiAgVGhpcyBpcyBoZWxwZnVsIGJlY2F1c2UgaW5mb3JtYXRpb24KQEAgLTI3MiwxMSArMjcyLDExIEBACiAKIFR5cGljYWwgY29kZSBmb3IgdGhpcyBzdGVwLCBpZiB5b3UgYXJlIHVzaW5nIHRoZSBkZWZhdWx0IGVycm9yIGhhbmRsZXIsIGlzCiAKLQlzdHJ1Y3QganBlZ19jb21wcmVzc19zdHJ1Y3QgY2luZm87Ci0Jc3RydWN0IGpwZWdfZXJyb3JfbWdyIGplcnI7Ci0JLi4uCi0JY2luZm8uZXJyID0ganBlZ19zdGRfZXJyb3IoJmplcnIpOwotCWpwZWdfY3JlYXRlX2NvbXByZXNzKCZjaW5mbyk7CisgICAgICAgIHN0cnVjdCBqcGVnX2NvbXByZXNzX3N0cnVjdCBjaW5mbzsKKyAgICAgICAgc3RydWN0IGpwZWdfZXJyb3JfbWdyIGplcnI7CisgICAgICAgIC4uLgorICAgICAgICBjaW5mby5lcnIgPSBqcGVnX3N0ZF9lcnJvcigmamVycik7CisgICAgICAgIGpwZWdfY3JlYXRlX2NvbXByZXNzKCZjaW5mbyk7CiAKIGpwZWdfY3JlYXRlX2NvbXByZXNzIGFsbG9jYXRlcyBhIHNtYWxsIGFtb3VudCBvZiBtZW1vcnksIHNvIGl0IGNvdWxkIGZhaWwKIGlmIHlvdSBhcmUgb3V0IG9mIG1lbW9yeS4gIEluIHRoYXQgY2FzZSBpdCB3aWxsIGV4aXQgdmlhIHRoZSBlcnJvciBoYW5kbGVyOwpAQCAtMjkzLDEzICsyOTMsMTMgQEAKIElmIHlvdSB1c2UgdGhlIHN0YW5kYXJkIGRlc3RpbmF0aW9uIG1vZHVsZSwgeW91IG11c3Qgb3BlbiB0aGUgdGFyZ2V0IHN0ZGlvCiBzdHJlYW0gYmVmb3JlaGFuZC4gIFR5cGljYWwgY29kZSBmb3IgdGhpcyBzdGVwIGxvb2tzIGxpa2U6CiAKLQlGSUxFICogb3V0ZmlsZTsKLQkuLi4KLQlpZiAoKG91dGZpbGUgPSBmb3BlbihmaWxlbmFtZSwgIndiIikpID09IE5VTEwpIHsKLQkgICAgZnByaW50ZihzdGRlcnIsICJjYW4ndCBvcGVuICVzXG4iLCBmaWxlbmFtZSk7Ci0JICAgIGV4aXQoMSk7Ci0JfQotCWpwZWdfc3RkaW9fZGVzdCgmY2luZm8sIG91dGZpbGUpOworICAgICAgICBGSUxFICogb3V0ZmlsZTsKKyAgICAgICAgLi4uCisgICAgICAgIGlmICgob3V0ZmlsZSA9IGZvcGVuKGZpbGVuYW1lLCAid2IiKSkgPT0gTlVMTCkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJjYW4ndCBvcGVuICVzXG4iLCBmaWxlbmFtZSk7CisgICAgICAgICAgICBleGl0KDEpOworICAgICAgICB9CisgICAgICAgIGpwZWdfc3RkaW9fZGVzdCgmY2luZm8sIG91dGZpbGUpOwogCiB3aGVyZSB0aGUgbGFzdCBsaW5lIGludm9rZXMgdGhlIHN0YW5kYXJkIGRlc3RpbmF0aW9uIG1vZHVsZS4KIApAQCAtMzIwLDEwICszMjAsMTAgQEAKIFlvdSBtdXN0IHN1cHBseSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc291cmNlIGltYWdlIGJ5IHNldHRpbmcgdGhlIGZvbGxvd2luZwogZmllbGRzIGluIHRoZSBKUEVHIG9iamVjdCAoY2luZm8gc3RydWN0dXJlKToKIAotCWltYWdlX3dpZHRoCQlXaWR0aCBvZiBpbWFnZSwgaW4gcGl4ZWxzCi0JaW1hZ2VfaGVpZ2h0CQlIZWlnaHQgb2YgaW1hZ2UsIGluIHBpeGVscwotCWlucHV0X2NvbXBvbmVudHMJTnVtYmVyIG9mIGNvbG9yIGNoYW5uZWxzIChzYW1wbGVzIHBlciBwaXhlbCkKLQlpbl9jb2xvcl9zcGFjZQkJQ29sb3Igc3BhY2Ugb2Ygc291cmNlIGltYWdlCisgICAgICAgIGltYWdlX3dpZHRoICAgICAgICAgICAgIFdpZHRoIG9mIGltYWdlLCBpbiBwaXhlbHMKKyAgICAgICAgaW1hZ2VfaGVpZ2h0ICAgICAgICAgICAgSGVpZ2h0IG9mIGltYWdlLCBpbiBwaXhlbHMKKyAgICAgICAgaW5wdXRfY29tcG9uZW50cyAgICAgICAgTnVtYmVyIG9mIGNvbG9yIGNoYW5uZWxzIChzYW1wbGVzIHBlciBwaXhlbCkKKyAgICAgICAgaW5fY29sb3Jfc3BhY2UgICAgICAgICAgQ29sb3Igc3BhY2Ugb2Ygc291cmNlIGltYWdlCiAKIFRoZSBpbWFnZSBkaW1lbnNpb25zIGFyZSwgaG9wZWZ1bGx5LCBvYnZpb3VzLiAgSlBFRyBzdXBwb3J0cyBpbWFnZSBkaW1lbnNpb25zCiBvZiAxIHRvIDY0SyBwaXhlbHMgaW4gZWl0aGVyIGRpcmVjdGlvbi4gIFRoZSBpbnB1dCBjb2xvciBzcGFjZSBpcyB0eXBpY2FsbHkKQEAgLTM0NywxMyArMzQ3LDEzIEBACiAKIFR5cGljYWwgY29kZSBmb3IgYSAyNC1iaXQgUkdCIHNvdXJjZSBpbWFnZSBpcwogCi0JY2luZm8uaW1hZ2Vfd2lkdGggPSBXaWR0aDsgCS8qIGltYWdlIHdpZHRoIGFuZCBoZWlnaHQsIGluIHBpeGVscyAqLwotCWNpbmZvLmltYWdlX2hlaWdodCA9IEhlaWdodDsKLQljaW5mby5pbnB1dF9jb21wb25lbnRzID0gMzsJLyogIyBvZiBjb2xvciBjb21wb25lbnRzIHBlciBwaXhlbCAqLwotCWNpbmZvLmluX2NvbG9yX3NwYWNlID0gSkNTX1JHQjsgLyogY29sb3JzcGFjZSBvZiBpbnB1dCBpbWFnZSAqLworICAgICAgICBjaW5mby5pbWFnZV93aWR0aCA9IFdpZHRoOyAgICAgIC8qIGltYWdlIHdpZHRoIGFuZCBoZWlnaHQsIGluIHBpeGVscyAqLworICAgICAgICBjaW5mby5pbWFnZV9oZWlnaHQgPSBIZWlnaHQ7CisgICAgICAgIGNpbmZvLmlucHV0X2NvbXBvbmVudHMgPSAzOyAgICAgLyogIyBvZiBjb2xvciBjb21wb25lbnRzIHBlciBwaXhlbCAqLworICAgICAgICBjaW5mby5pbl9jb2xvcl9zcGFjZSA9IEpDU19SR0I7IC8qIGNvbG9yc3BhY2Ugb2YgaW5wdXQgaW1hZ2UgKi8KIAotCWpwZWdfc2V0X2RlZmF1bHRzKCZjaW5mbyk7Ci0JLyogTWFrZSBvcHRpb25hbCBwYXJhbWV0ZXIgc2V0dGluZ3MgaGVyZSAqLworICAgICAgICBqcGVnX3NldF9kZWZhdWx0cygmY2luZm8pOworICAgICAgICAvKiBNYWtlIG9wdGlvbmFsIHBhcmFtZXRlciBzZXR0aW5ncyBoZXJlICovCiAKIAogNC4ganBlZ19zdGFydF9jb21wcmVzcyguLi4pOwpAQCAtMzY1LDcgKzM2NSw3IEBACiAKIFR5cGljYWwgY29kZToKIAotCWpwZWdfc3RhcnRfY29tcHJlc3MoJmNpbmZvLCBUUlVFKTsKKyAgICAgICAganBlZ19zdGFydF9jb21wcmVzcygmY2luZm8sIFRSVUUpOwogCiBUaGUgIlRSVUUiIHBhcmFtZXRlciBlbnN1cmVzIHRoYXQgYSBjb21wbGV0ZSBKUEVHIGludGVyY2hhbmdlIGRhdGFzdHJlYW0KIHdpbGwgYmUgd3JpdHRlbi4gIFRoaXMgaXMgYXBwcm9wcmlhdGUgaW4gbW9zdCBjYXNlcy4gIElmIHlvdSB0aGluayB5b3UgbWlnaHQKQEAgLTM3OCw3ICszNzgsNyBAQAogCiAKIDUuIHdoaWxlIChzY2FuIGxpbmVzIHJlbWFpbiB0byBiZSB3cml0dGVuKQotCWpwZWdfd3JpdGVfc2NhbmxpbmVzKC4uLik7CisgICAgICAgIGpwZWdfd3JpdGVfc2NhbmxpbmVzKC4uLik7CiAKIE5vdyB3cml0ZSBhbGwgdGhlIHJlcXVpcmVkIGltYWdlIGRhdGEgYnkgY2FsbGluZyBqcGVnX3dyaXRlX3NjYW5saW5lcygpCiBvbmUgb3IgbW9yZSB0aW1lcy4gIFlvdSBjYW4gcGFzcyBvbmUgb3IgbW9yZSBzY2FubGluZXMgaW4gZWFjaCBjYWxsLCB1cApAQCAtNDAzLDE1ICs0MDMsMTUgQEAKIGV4YW1wbGUuYyBzaG93cyB0aGUgZm9sbG93aW5nIGNvZGUgZm9yIHRoZSBjYXNlIG9mIGEgZnVsbC1zaXplIDItRCBzb3VyY2UKIGFycmF5IGNvbnRhaW5pbmcgMy1ieXRlIFJHQiBwaXhlbHM6CiAKLQlKU0FNUFJPVyByb3dfcG9pbnRlclsxXTsJLyogcG9pbnRlciB0byBhIHNpbmdsZSByb3cgKi8KLQlpbnQgcm93X3N0cmlkZTsJCQkvKiBwaHlzaWNhbCByb3cgd2lkdGggaW4gYnVmZmVyICovCisgICAgICAgIEpTQU1QUk9XIHJvd19wb2ludGVyWzFdOyAgICAgICAgLyogcG9pbnRlciB0byBhIHNpbmdsZSByb3cgKi8KKyAgICAgICAgaW50IHJvd19zdHJpZGU7ICAgICAgICAgICAgICAgICAvKiBwaHlzaWNhbCByb3cgd2lkdGggaW4gYnVmZmVyICovCiAKLQlyb3dfc3RyaWRlID0gaW1hZ2Vfd2lkdGggKiAzOwkvKiBKU0FNUExFcyBwZXIgcm93IGluIGltYWdlX2J1ZmZlciAqLworICAgICAgICByb3dfc3RyaWRlID0gaW1hZ2Vfd2lkdGggKiAzOyAgIC8qIEpTQU1QTEVzIHBlciByb3cgaW4gaW1hZ2VfYnVmZmVyICovCiAKLQl3aGlsZSAoY2luZm8ubmV4dF9zY2FubGluZSA8IGNpbmZvLmltYWdlX2hlaWdodCkgewotCSAgICByb3dfcG9pbnRlclswXSA9ICYgaW1hZ2VfYnVmZmVyW2NpbmZvLm5leHRfc2NhbmxpbmUgKiByb3dfc3RyaWRlXTsKLQkgICAganBlZ193cml0ZV9zY2FubGluZXMoJmNpbmZvLCByb3dfcG9pbnRlciwgMSk7Ci0JfQorICAgICAgICB3aGlsZSAoY2luZm8ubmV4dF9zY2FubGluZSA8IGNpbmZvLmltYWdlX2hlaWdodCkgeworICAgICAgICAgICAgcm93X3BvaW50ZXJbMF0gPSAmIGltYWdlX2J1ZmZlcltjaW5mby5uZXh0X3NjYW5saW5lICogcm93X3N0cmlkZV07CisgICAgICAgICAgICBqcGVnX3dyaXRlX3NjYW5saW5lcygmY2luZm8sIHJvd19wb2ludGVyLCAxKTsKKyAgICAgICAgfQogCiBqcGVnX3dyaXRlX3NjYW5saW5lcygpIHJldHVybnMgdGhlIG51bWJlciBvZiBzY2FubGluZXMgYWN0dWFsbHkgd3JpdHRlbi4KIFRoaXMgd2lsbCBub3JtYWxseSBiZSBlcXVhbCB0byB0aGUgbnVtYmVyIHBhc3NlZCBpbiwgc28geW91IGNhbiB1c3VhbGx5CkBAIC00MzYsNyArNDM2LDcgQEAKIAogVHlwaWNhbCBjb2RlOgogCi0JanBlZ19maW5pc2hfY29tcHJlc3MoJmNpbmZvKTsKKyAgICAgICAganBlZ19maW5pc2hfY29tcHJlc3MoJmNpbmZvKTsKIAogSWYgdXNpbmcgdGhlIHN0ZGlvIGRlc3RpbmF0aW9uIG1hbmFnZXIsIGRvbid0IGZvcmdldCB0byBjbG9zZSB0aGUgb3V0cHV0CiBzdGRpbyBzdHJlYW0gKGlmIG5lY2Vzc2FyeSkgYWZ0ZXJ3YXJkcy4KQEAgLTQ3OSw3ICs0NzksNyBAQAogCiBUeXBpY2FsIGNvZGU6CiAKLQlqcGVnX2Rlc3Ryb3lfY29tcHJlc3MoJmNpbmZvKTsKKyAgICAgICAganBlZ19kZXN0cm95X2NvbXByZXNzKCZjaW5mbyk7CiAKIAogOC4gQWJvcnRpbmcuCkBAIC01MjAsMTEgKzUyMCwxMSBAQAogCiBUeXBpY2FsIGNvZGU6CiAKLQlzdHJ1Y3QganBlZ19kZWNvbXByZXNzX3N0cnVjdCBjaW5mbzsKLQlzdHJ1Y3QganBlZ19lcnJvcl9tZ3IgamVycjsKLQkuLi4KLQljaW5mby5lcnIgPSBqcGVnX3N0ZF9lcnJvcigmamVycik7Ci0JanBlZ19jcmVhdGVfZGVjb21wcmVzcygmY2luZm8pOworICAgICAgICBzdHJ1Y3QganBlZ19kZWNvbXByZXNzX3N0cnVjdCBjaW5mbzsKKyAgICAgICAgc3RydWN0IGpwZWdfZXJyb3JfbWdyIGplcnI7CisgICAgICAgIC4uLgorICAgICAgICBjaW5mby5lcnIgPSBqcGVnX3N0ZF9lcnJvcigmamVycik7CisgICAgICAgIGpwZWdfY3JlYXRlX2RlY29tcHJlc3MoJmNpbmZvKTsKIAogKEJvdGggaGVyZSBhbmQgaW4gdGhlIElKRyBjb2RlLCB3ZSB1c3VhbGx5IHVzZSB2YXJpYWJsZSBuYW1lICJjaW5mbyIgZm9yCiBib3RoIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIG9iamVjdHMuKQpAQCAtNTQwLDEzICs1NDAsMTMgQEAKIElmIHlvdSB1c2UgdGhlIHN0YW5kYXJkIHNvdXJjZSBtb2R1bGUsIHlvdSBtdXN0IG9wZW4gdGhlIHNvdXJjZSBzdGRpbyBzdHJlYW0KIGJlZm9yZWhhbmQuICBUeXBpY2FsIGNvZGUgZm9yIHRoaXMgc3RlcCBsb29rcyBsaWtlOgogCi0JRklMRSAqIGluZmlsZTsKLQkuLi4KLQlpZiAoKGluZmlsZSA9IGZvcGVuKGZpbGVuYW1lLCAicmIiKSkgPT0gTlVMTCkgewotCSAgICBmcHJpbnRmKHN0ZGVyciwgImNhbid0IG9wZW4gJXNcbiIsIGZpbGVuYW1lKTsKLQkgICAgZXhpdCgxKTsKLQl9Ci0JanBlZ19zdGRpb19zcmMoJmNpbmZvLCBpbmZpbGUpOworICAgICAgICBGSUxFICogaW5maWxlOworICAgICAgICAuLi4KKyAgICAgICAgaWYgKChpbmZpbGUgPSBmb3BlbihmaWxlbmFtZSwgInJiIikpID09IE5VTEwpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiY2FuJ3Qgb3BlbiAlc1xuIiwgZmlsZW5hbWUpOworICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgfQorICAgICAgICBqcGVnX3N0ZGlvX3NyYygmY2luZm8sIGluZmlsZSk7CiAKIHdoZXJlIHRoZSBsYXN0IGxpbmUgaW52b2tlcyB0aGUgc3RhbmRhcmQgc291cmNlIG1vZHVsZS4KIApAQCAtNTY5LDcgKzU2OSw3IEBACiAKIFR5cGljYWwgY29kZSBmb3IgdGhpcyBzdGVwIGlzIGp1c3QKIAotCWpwZWdfcmVhZF9oZWFkZXIoJmNpbmZvLCBUUlVFKTsKKyAgICAgICAganBlZ19yZWFkX2hlYWRlcigmY2luZm8sIFRSVUUpOwogCiBUaGlzIHdpbGwgcmVhZCB0aGUgc291cmNlIGRhdGFzdHJlYW0gaGVhZGVyIG1hcmtlcnMsIHVwIHRvIHRoZSBiZWdpbm5pbmcKIG9mIHRoZSBjb21wcmVzc2VkIGRhdGEgcHJvcGVyLiAgT24gcmV0dXJuLCB0aGUgaW1hZ2UgZGltZW5zaW9ucyBhbmQgb3RoZXIKQEAgLTYxNyw3ICs2MTcsNyBAQAogCiBUeXBpY2FsIGNvZGUgaXMganVzdAogCi0JanBlZ19zdGFydF9kZWNvbXByZXNzKCZjaW5mbyk7CisgICAgICAgIGpwZWdfc3RhcnRfZGVjb21wcmVzcygmY2luZm8pOwogCiBJZiB5b3UgaGF2ZSByZXF1ZXN0ZWQgYSBtdWx0aS1wYXNzIG9wZXJhdGluZyBtb2RlLCBzdWNoIGFzIDItcGFzcyBjb2xvcgogcXVhbnRpemF0aW9uLCBqcGVnX3N0YXJ0X2RlY29tcHJlc3MoKSB3aWxsIGRvIGV2ZXJ5dGhpbmcgbmVlZGVkIGJlZm9yZSBkYXRhCkBAIC02MzAsMTIgKzYzMCwxMiBAQAogc2NhbGluZywgYXJlIGF2YWlsYWJsZSBpbiB0aGUgSlBFRyBvYmplY3Q7IHNvIGlzIHRoZSBzZWxlY3RlZCBjb2xvcm1hcCwgaWYKIGNvbG9ybWFwcGVkIG91dHB1dCBoYXMgYmVlbiByZXF1ZXN0ZWQuICBVc2VmdWwgZmllbGRzIGluY2x1ZGUKIAotCW91dHB1dF93aWR0aAkJaW1hZ2Ugd2lkdGggYW5kIGhlaWdodCwgYXMgc2NhbGVkCi0Jb3V0cHV0X2hlaWdodAotCW91dF9jb2xvcl9jb21wb25lbnRzCSMgb2YgY29sb3IgY29tcG9uZW50cyBpbiBvdXRfY29sb3Jfc3BhY2UKLQlvdXRwdXRfY29tcG9uZW50cwkjIG9mIGNvbG9yIGNvbXBvbmVudHMgcmV0dXJuZWQgcGVyIHBpeGVsCi0JY29sb3JtYXAJCXRoZSBzZWxlY3RlZCBjb2xvcm1hcCwgaWYgYW55Ci0JYWN0dWFsX251bWJlcl9vZl9jb2xvcnMJCW51bWJlciBvZiBlbnRyaWVzIGluIGNvbG9ybWFwCisgICAgICAgIG91dHB1dF93aWR0aCAgICAgICAgICAgIGltYWdlIHdpZHRoIGFuZCBoZWlnaHQsIGFzIHNjYWxlZAorICAgICAgICBvdXRwdXRfaGVpZ2h0CisgICAgICAgIG91dF9jb2xvcl9jb21wb25lbnRzICAgICMgb2YgY29sb3IgY29tcG9uZW50cyBpbiBvdXRfY29sb3Jfc3BhY2UKKyAgICAgICAgb3V0cHV0X2NvbXBvbmVudHMgICAgICAgIyBvZiBjb2xvciBjb21wb25lbnRzIHJldHVybmVkIHBlciBwaXhlbAorICAgICAgICBjb2xvcm1hcCAgICAgICAgICAgICAgICB0aGUgc2VsZWN0ZWQgY29sb3JtYXAsIGlmIGFueQorICAgICAgICBhY3R1YWxfbnVtYmVyX29mX2NvbG9ycyAgICAgICAgIG51bWJlciBvZiBlbnRyaWVzIGluIGNvbG9ybWFwCiAKIG91dHB1dF9jb21wb25lbnRzIGlzIDEgKGEgY29sb3JtYXAgaW5kZXgpIHdoZW4gcXVhbnRpemluZyBjb2xvcnM7IG90aGVyd2lzZSBpdAogZXF1YWxzIG91dF9jb2xvcl9jb21wb25lbnRzLiAgSXQgaXMgdGhlIG51bWJlciBvZiBKU0FNUExFIHZhbHVlcyB0aGF0IHdpbGwgYmUKQEAgLTY1NCw3ICs2NTQsNyBAQAogCiAKIDYuIHdoaWxlIChzY2FuIGxpbmVzIHJlbWFpbiB0byBiZSByZWFkKQotCWpwZWdfcmVhZF9zY2FubGluZXMoLi4uKTsKKyAgICAgICAganBlZ19yZWFkX3NjYW5saW5lcyguLi4pOwogCiBOb3cgeW91IGNhbiByZWFkIHRoZSBkZWNvbXByZXNzZWQgaW1hZ2UgZGF0YSBieSBjYWxsaW5nIGpwZWdfcmVhZF9zY2FubGluZXMoKQogb25lIG9yIG1vcmUgdGltZXMuICBBdCBlYWNoIGNhbGwsIHlvdSBwYXNzIGluIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzY2FubGluZXMKQEAgLTY5Niw3ICs2OTYsNyBAQAogCiBUeXBpY2FsIGNvZGU6CiAKLQlqcGVnX2ZpbmlzaF9kZWNvbXByZXNzKCZjaW5mbyk7CisgICAgICAgIGpwZWdfZmluaXNoX2RlY29tcHJlc3MoJmNpbmZvKTsKIAogSWYgdXNpbmcgdGhlIHN0ZGlvIHNvdXJjZSBtYW5hZ2VyLCBkb24ndCBmb3JnZXQgdG8gY2xvc2UgdGhlIHNvdXJjZSBzdGRpbwogc3RyZWFtIGlmIG5lY2Vzc2FyeS4KQEAgLTcxOSw3ICs3MTksNyBAQAogCiBUeXBpY2FsIGNvZGU6CiAKLQlqcGVnX2Rlc3Ryb3lfZGVjb21wcmVzcygmY2luZm8pOworICAgICAgICBqcGVnX2Rlc3Ryb3lfZGVjb21wcmVzcygmY2luZm8pOwogCiAKIDkuIEFib3J0aW5nLgpAQCAtODAwLDIyMCArODAwLDIzMSBAQAogVGhlIGhlbHBlciByb3V0aW5lcyBhcmU6CiAKIGpwZWdfc2V0X2RlZmF1bHRzIChqX2NvbXByZXNzX3B0ciBjaW5mbykKLQlUaGlzIHJvdXRpbmUgc2V0cyBhbGwgSlBFRyBwYXJhbWV0ZXJzIHRvIHJlYXNvbmFibGUgZGVmYXVsdHMsIHVzaW5nCi0Jb25seSB0aGUgaW5wdXQgaW1hZ2UncyBjb2xvciBzcGFjZSAoZmllbGQgaW5fY29sb3Jfc3BhY2UsIHdoaWNoIG11c3QKLQlhbHJlYWR5IGJlIHNldCBpbiBjaW5mbykuICBNYW55IGFwcGxpY2F0aW9ucyB3aWxsIG9ubHkgbmVlZCB0byB1c2UKLQl0aGlzIHJvdXRpbmUgYW5kIHBlcmhhcHMganBlZ19zZXRfcXVhbGl0eSgpLgorICAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyBhbGwgSlBFRyBwYXJhbWV0ZXJzIHRvIHJlYXNvbmFibGUgZGVmYXVsdHMsIHVzaW5nCisgICAgICAgIG9ubHkgdGhlIGlucHV0IGltYWdlJ3MgY29sb3Igc3BhY2UgKGZpZWxkIGluX2NvbG9yX3NwYWNlLCB3aGljaCBtdXN0CisgICAgICAgIGFscmVhZHkgYmUgc2V0IGluIGNpbmZvKS4gIE1hbnkgYXBwbGljYXRpb25zIHdpbGwgb25seSBuZWVkIHRvIHVzZQorICAgICAgICB0aGlzIHJvdXRpbmUgYW5kIHBlcmhhcHMganBlZ19zZXRfcXVhbGl0eSgpLgogCiBqcGVnX3NldF9jb2xvcnNwYWNlIChqX2NvbXByZXNzX3B0ciBjaW5mbywgSl9DT0xPUl9TUEFDRSBjb2xvcnNwYWNlKQotCVNldHMgdGhlIEpQRUcgZmlsZSdzIGNvbG9yc3BhY2UgKGZpZWxkIGpwZWdfY29sb3Jfc3BhY2UpIGFzIHNwZWNpZmllZCwKLQlhbmQgc2V0cyBvdGhlciBjb2xvci1zcGFjZS1kZXBlbmRlbnQgcGFyYW1ldGVycyBhcHByb3ByaWF0ZWx5LiAgU2VlCi0JIlNwZWNpYWwgY29sb3Igc3BhY2VzIiwgYmVsb3csIGJlZm9yZSB1c2luZyB0aGlzLiAgQSBsYXJnZSBudW1iZXIgb2YKLQlwYXJhbWV0ZXJzLCBpbmNsdWRpbmcgYWxsIHBlci1jb21wb25lbnQgcGFyYW1ldGVycywgYXJlIHNldCBieSB0aGlzCi0Jcm91dGluZTsgaWYgeW91IHdhbnQgdG8gdHdpZGRsZSBpbmRpdmlkdWFsIHBhcmFtZXRlcnMgeW91IHNob3VsZCBjYWxsCi0JanBlZ19zZXRfY29sb3JzcGFjZSgpIGJlZm9yZSByYXRoZXIgdGhhbiBhZnRlci4KKyAgICAgICAgU2V0cyB0aGUgSlBFRyBmaWxlJ3MgY29sb3JzcGFjZSAoZmllbGQganBlZ19jb2xvcl9zcGFjZSkgYXMgc3BlY2lmaWVkLAorICAgICAgICBhbmQgc2V0cyBvdGhlciBjb2xvci1zcGFjZS1kZXBlbmRlbnQgcGFyYW1ldGVycyBhcHByb3ByaWF0ZWx5LiAgU2VlCisgICAgICAgICJTcGVjaWFsIGNvbG9yIHNwYWNlcyIsIGJlbG93LCBiZWZvcmUgdXNpbmcgdGhpcy4gIEEgbGFyZ2UgbnVtYmVyIG9mCisgICAgICAgIHBhcmFtZXRlcnMsIGluY2x1ZGluZyBhbGwgcGVyLWNvbXBvbmVudCBwYXJhbWV0ZXJzLCBhcmUgc2V0IGJ5IHRoaXMKKyAgICAgICAgcm91dGluZTsgaWYgeW91IHdhbnQgdG8gdHdpZGRsZSBpbmRpdmlkdWFsIHBhcmFtZXRlcnMgeW91IHNob3VsZCBjYWxsCisgICAgICAgIGpwZWdfc2V0X2NvbG9yc3BhY2UoKSBiZWZvcmUgcmF0aGVyIHRoYW4gYWZ0ZXIuCiAKIGpwZWdfZGVmYXVsdF9jb2xvcnNwYWNlIChqX2NvbXByZXNzX3B0ciBjaW5mbykKLQlTZWxlY3RzIGFuIGFwcHJvcHJpYXRlIEpQRUcgY29sb3JzcGFjZSBiYXNlZCBvbiBjaW5mby0+aW5fY29sb3Jfc3BhY2UsCi0JYW5kIGNhbGxzIGpwZWdfc2V0X2NvbG9yc3BhY2UoKS4gIFRoaXMgaXMgYWN0dWFsbHkgYSBzdWJyb3V0aW5lIG9mCi0JanBlZ19zZXRfZGVmYXVsdHMoKS4gIEl0J3MgYnJva2VuIG91dCBpbiBjYXNlIHlvdSB3YW50IHRvIGNoYW5nZQotCWp1c3QgdGhlIGNvbG9yc3BhY2UtZGVwZW5kZW50IEpQRUcgcGFyYW1ldGVycy4KKyAgICAgICAgU2VsZWN0cyBhbiBhcHByb3ByaWF0ZSBKUEVHIGNvbG9yc3BhY2UgYmFzZWQgb24gY2luZm8tPmluX2NvbG9yX3NwYWNlLAorICAgICAgICBhbmQgY2FsbHMganBlZ19zZXRfY29sb3JzcGFjZSgpLiAgVGhpcyBpcyBhY3R1YWxseSBhIHN1YnJvdXRpbmUgb2YKKyAgICAgICAganBlZ19zZXRfZGVmYXVsdHMoKS4gIEl0J3MgYnJva2VuIG91dCBpbiBjYXNlIHlvdSB3YW50IHRvIGNoYW5nZQorICAgICAgICBqdXN0IHRoZSBjb2xvcnNwYWNlLWRlcGVuZGVudCBKUEVHIHBhcmFtZXRlcnMuCiAKIGpwZWdfc2V0X3F1YWxpdHkgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgcXVhbGl0eSwgYm9vbGVhbiBmb3JjZV9iYXNlbGluZSkKLQlDb25zdHJ1Y3RzIEpQRUcgcXVhbnRpemF0aW9uIHRhYmxlcyBhcHByb3ByaWF0ZSBmb3IgdGhlIGluZGljYXRlZAotCXF1YWxpdHkgc2V0dGluZy4gIFRoZSBxdWFsaXR5IHZhbHVlIGlzIGV4cHJlc3NlZCBvbiB0aGUgMC4uMTAwIHNjYWxlCi0JcmVjb21tZW5kZWQgYnkgSUpHIChjanBlZydzICItcXVhbGl0eSIgc3dpdGNoIHVzZXMgdGhpcyByb3V0aW5lKS4KLQlOb3RlIHRoYXQgdGhlIGV4YWN0IG1hcHBpbmcgZnJvbSBxdWFsaXR5IHZhbHVlcyB0byB0YWJsZXMgbWF5IGNoYW5nZQotCWluIGZ1dHVyZSBJSkcgcmVsZWFzZXMgYXMgbW9yZSBpcyBsZWFybmVkIGFib3V0IERDVCBxdWFudGl6YXRpb24uCi0JSWYgdGhlIGZvcmNlX2Jhc2VsaW5lIHBhcmFtZXRlciBpcyBUUlVFLCB0aGVuIHRoZSBxdWFudGl6YXRpb24gdGFibGUKLQllbnRyaWVzIGFyZSBjb25zdHJhaW5lZCB0byB0aGUgcmFuZ2UgMS4uMjU1IGZvciBmdWxsIEpQRUcgYmFzZWxpbmUKLQljb21wYXRpYmlsaXR5LiAgSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIHRoaXMgb25seSBtYWtlcyBhCi0JZGlmZmVyZW5jZSBmb3IgcXVhbGl0eSBzZXR0aW5ncyBiZWxvdyAyNSwgYW5kIGl0IGVmZmVjdGl2ZWx5IHByZXZlbnRzCi0JdmVyeSBzbWFsbC9sb3cgcXVhbGl0eSBmaWxlcyBmcm9tIGJlaW5nIGdlbmVyYXRlZC4gIFRoZSBJSkcgZGVjb2RlcgotCWlzIGNhcGFibGUgb2YgcmVhZGluZyB0aGUgbm9uLWJhc2VsaW5lIGZpbGVzIGdlbmVyYXRlZCBhdCBsb3cgcXVhbGl0eQotCXNldHRpbmdzIHdoZW4gZm9yY2VfYmFzZWxpbmUgaXMgRkFMU0UsIGJ1dCBvdGhlciBkZWNvZGVycyBtYXkgbm90IGJlLgorICAgICAgICBDb25zdHJ1Y3RzIEpQRUcgcXVhbnRpemF0aW9uIHRhYmxlcyBhcHByb3ByaWF0ZSBmb3IgdGhlIGluZGljYXRlZAorICAgICAgICBxdWFsaXR5IHNldHRpbmcuICBUaGUgcXVhbGl0eSB2YWx1ZSBpcyBleHByZXNzZWQgb24gdGhlIDAuLjEwMCBzY2FsZQorICAgICAgICByZWNvbW1lbmRlZCBieSBJSkcgKGNqcGVnJ3MgIi1xdWFsaXR5IiBzd2l0Y2ggdXNlcyB0aGlzIHJvdXRpbmUpLgorICAgICAgICBOb3RlIHRoYXQgdGhlIGV4YWN0IG1hcHBpbmcgZnJvbSBxdWFsaXR5IHZhbHVlcyB0byB0YWJsZXMgbWF5IGNoYW5nZQorICAgICAgICBpbiBmdXR1cmUgSUpHIHJlbGVhc2VzIGFzIG1vcmUgaXMgbGVhcm5lZCBhYm91dCBEQ1QgcXVhbnRpemF0aW9uLgorICAgICAgICBJZiB0aGUgZm9yY2VfYmFzZWxpbmUgcGFyYW1ldGVyIGlzIFRSVUUsIHRoZW4gdGhlIHF1YW50aXphdGlvbiB0YWJsZQorICAgICAgICBlbnRyaWVzIGFyZSBjb25zdHJhaW5lZCB0byB0aGUgcmFuZ2UgMS4uMjU1IGZvciBmdWxsIEpQRUcgYmFzZWxpbmUKKyAgICAgICAgY29tcGF0aWJpbGl0eS4gIEluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLCB0aGlzIG9ubHkgbWFrZXMgYQorICAgICAgICBkaWZmZXJlbmNlIGZvciBxdWFsaXR5IHNldHRpbmdzIGJlbG93IDI1LCBhbmQgaXQgZWZmZWN0aXZlbHkgcHJldmVudHMKKyAgICAgICAgdmVyeSBzbWFsbC9sb3cgcXVhbGl0eSBmaWxlcyBmcm9tIGJlaW5nIGdlbmVyYXRlZC4gIFRoZSBJSkcgZGVjb2RlcgorICAgICAgICBpcyBjYXBhYmxlIG9mIHJlYWRpbmcgdGhlIG5vbi1iYXNlbGluZSBmaWxlcyBnZW5lcmF0ZWQgYXQgbG93IHF1YWxpdHkKKyAgICAgICAgc2V0dGluZ3Mgd2hlbiBmb3JjZV9iYXNlbGluZSBpcyBGQUxTRSwgYnV0IG90aGVyIGRlY29kZXJzIG1heSBub3QgYmUuCiAKIGpwZWdfc2V0X2xpbmVhcl9xdWFsaXR5IChqX2NvbXByZXNzX3B0ciBjaW5mbywgaW50IHNjYWxlX2ZhY3RvciwKLQkJCSBib29sZWFuIGZvcmNlX2Jhc2VsaW5lKQotCVNhbWUgYXMganBlZ19zZXRfcXVhbGl0eSgpIGV4Y2VwdCB0aGF0IHRoZSBnZW5lcmF0ZWQgdGFibGVzIGFyZSB0aGUKLQlzYW1wbGUgdGFibGVzIGdpdmVuIGluIHRoZSBKUEVDIHNwZWMgc2VjdGlvbiBLLjEsIG11bHRpcGxpZWQgYnkgdGhlCi0Jc3BlY2lmaWVkIHNjYWxlIGZhY3RvciAod2hpY2ggaXMgZXhwcmVzc2VkIGFzIGEgcGVyY2VudGFnZTsgdGh1cwotCXNjYWxlX2ZhY3RvciA9IDEwMCByZXByb2R1Y2VzIHRoZSBzcGVjJ3MgdGFibGVzKS4gIE5vdGUgdGhhdCBsYXJnZXIKLQlzY2FsZSBmYWN0b3JzIGdpdmUgbG93ZXIgcXVhbGl0eS4gIFRoaXMgZW50cnkgcG9pbnQgaXMgdXNlZnVsIGZvcgotCWNvbmZvcm1pbmcgdG8gdGhlIEFkb2JlIFBvc3RTY3JpcHQgRENUIGNvbnZlbnRpb25zLCBidXQgd2UgZG8gbm90Ci0JcmVjb21tZW5kIGxpbmVhciBzY2FsaW5nIGFzIGEgdXNlci12aXNpYmxlIHF1YWxpdHkgc2NhbGUgb3RoZXJ3aXNlLgotCWZvcmNlX2Jhc2VsaW5lIGFnYWluIGNvbnN0cmFpbnMgdGhlIGNvbXB1dGVkIHRhYmxlIGVudHJpZXMgdG8gMS4uMjU1LgorICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gZm9yY2VfYmFzZWxpbmUpCisgICAgICAgIFNhbWUgYXMganBlZ19zZXRfcXVhbGl0eSgpIGV4Y2VwdCB0aGF0IHRoZSBnZW5lcmF0ZWQgdGFibGVzIGFyZSB0aGUKKyAgICAgICAgc2FtcGxlIHRhYmxlcyBnaXZlbiBpbiB0aGUgSlBFQyBzcGVjIHNlY3Rpb24gSy4xLCBtdWx0aXBsaWVkIGJ5IHRoZQorICAgICAgICBzcGVjaWZpZWQgc2NhbGUgZmFjdG9yICh3aGljaCBpcyBleHByZXNzZWQgYXMgYSBwZXJjZW50YWdlOyB0aHVzCisgICAgICAgIHNjYWxlX2ZhY3RvciA9IDEwMCByZXByb2R1Y2VzIHRoZSBzcGVjJ3MgdGFibGVzKS4gIE5vdGUgdGhhdCBsYXJnZXIKKyAgICAgICAgc2NhbGUgZmFjdG9ycyBnaXZlIGxvd2VyIHF1YWxpdHkuICBUaGlzIGVudHJ5IHBvaW50IGlzIHVzZWZ1bCBmb3IKKyAgICAgICAgY29uZm9ybWluZyB0byB0aGUgQWRvYmUgUG9zdFNjcmlwdCBEQ1QgY29udmVudGlvbnMsIGJ1dCB3ZSBkbyBub3QKKyAgICAgICAgcmVjb21tZW5kIGxpbmVhciBzY2FsaW5nIGFzIGEgdXNlci12aXNpYmxlIHF1YWxpdHkgc2NhbGUgb3RoZXJ3aXNlLgorICAgICAgICBmb3JjZV9iYXNlbGluZSBhZ2FpbiBjb25zdHJhaW5zIHRoZSBjb21wdXRlZCB0YWJsZSBlbnRyaWVzIHRvIDEuLjI1NS4KIAogaW50IGpwZWdfcXVhbGl0eV9zY2FsaW5nIChpbnQgcXVhbGl0eSkKLQlDb252ZXJ0cyBhIHZhbHVlIG9uIHRoZSBJSkctcmVjb21tZW5kZWQgcXVhbGl0eSBzY2FsZSB0byBhIGxpbmVhcgotCXNjYWxpbmcgcGVyY2VudGFnZS4gIE5vdGUgdGhhdCB0aGlzIHJvdXRpbmUgbWF5IGNoYW5nZSBvciBnbyBhd2F5Ci0JaW4gZnV0dXJlIHJlbGVhc2VzIC0tLSBJSkcgbWF5IGNob29zZSB0byBhZG9wdCBhIHNjYWxpbmcgbWV0aG9kIHRoYXQKLQljYW4ndCBiZSBleHByZXNzZWQgYXMgYSBzaW1wbGUgc2NhbGFyIG11bHRpcGxpZXIsIGluIHdoaWNoIGNhc2UgdGhlCi0JcHJlbWlzZSBvZiB0aGlzIHJvdXRpbmUgY29sbGFwc2VzLiAgQ2F2ZWF0IHVzZXIuCisgICAgICAgIENvbnZlcnRzIGEgdmFsdWUgb24gdGhlIElKRy1yZWNvbW1lbmRlZCBxdWFsaXR5IHNjYWxlIHRvIGEgbGluZWFyCisgICAgICAgIHNjYWxpbmcgcGVyY2VudGFnZS4gIE5vdGUgdGhhdCB0aGlzIHJvdXRpbmUgbWF5IGNoYW5nZSBvciBnbyBhd2F5CisgICAgICAgIGluIGZ1dHVyZSByZWxlYXNlcyAtLS0gSUpHIG1heSBjaG9vc2UgdG8gYWRvcHQgYSBzY2FsaW5nIG1ldGhvZCB0aGF0CisgICAgICAgIGNhbid0IGJlIGV4cHJlc3NlZCBhcyBhIHNpbXBsZSBzY2FsYXIgbXVsdGlwbGllciwgaW4gd2hpY2ggY2FzZSB0aGUKKyAgICAgICAgcHJlbWlzZSBvZiB0aGlzIHJvdXRpbmUgY29sbGFwc2VzLiAgQ2F2ZWF0IHVzZXIuCiAKIGpwZWdfZGVmYXVsdF9xdGFibGVzIChqX2NvbXByZXNzX3B0ciBjaW5mbywgYm9vbGVhbiBmb3JjZV9iYXNlbGluZSkKLQlbbGlianBlZyB2NysgQVBJL0FCSSBlbXVsYXRpb24gb25seV0KLQlTZXQgZGVmYXVsdCBxdWFudGl6YXRpb24gdGFibGVzIHdpdGggbGluZWFyIHFfc2NhbGVfZmFjdG9yW10gdmFsdWVzCi0JKHNlZSBiZWxvdykuCisgICAgICAgIFtsaWJqcGVnIHY3KyBBUEkvQUJJIGVtdWxhdGlvbiBvbmx5XQorICAgICAgICBTZXQgZGVmYXVsdCBxdWFudGl6YXRpb24gdGFibGVzIHdpdGggbGluZWFyIHFfc2NhbGVfZmFjdG9yW10gdmFsdWVzCisgICAgICAgIChzZWUgYmVsb3cpLgogCiBqcGVnX2FkZF9xdWFudF90YWJsZSAoal9jb21wcmVzc19wdHIgY2luZm8sIGludCB3aGljaF90YmwsCi0JCSAgICAgIGNvbnN0IHVuc2lnbmVkIGludCAqYmFzaWNfdGFibGUsCi0JCSAgICAgIGludCBzY2FsZV9mYWN0b3IsIGJvb2xlYW4gZm9yY2VfYmFzZWxpbmUpCi0JQWxsb3dzIGFuIGFyYml0cmFyeSBxdWFudGl6YXRpb24gdGFibGUgdG8gYmUgY3JlYXRlZC4gIHdoaWNoX3RibAotCWluZGljYXRlcyB3aGljaCB0YWJsZSBzbG90IHRvIGZpbGwuICBiYXNpY190YWJsZSBwb2ludHMgdG8gYW4gYXJyYXkKLQlvZiA2NCB1bnNpZ25lZCBpbnRzIGdpdmVuIGluIG5vcm1hbCBhcnJheSBvcmRlci4gIFRoZXNlIHZhbHVlcyBhcmUKLQltdWx0aXBsaWVkIGJ5IHNjYWxlX2ZhY3Rvci8xMDAgYW5kIHRoZW4gY2xhbXBlZCB0byB0aGUgcmFuZ2UgMS4uNjU1MzUKLQkob3IgdG8gMS4uMjU1IGlmIGZvcmNlX2Jhc2VsaW5lIGlzIFRSVUUpLgotCUNBVVRJT046IHByaW9yIHRvIGxpYnJhcnkgdmVyc2lvbiA2YSwganBlZ19hZGRfcXVhbnRfdGFibGUgZXhwZWN0ZWQKLQl0aGUgYmFzaWMgdGFibGUgdG8gYmUgZ2l2ZW4gaW4gSlBFRyB6aWd6YWcgb3JkZXIuICBJZiB5b3UgbmVlZCB0bwotCXdyaXRlIGNvZGUgdGhhdCB3b3JrcyB3aXRoIGVpdGhlciBvbGRlciBvciBuZXdlciB2ZXJzaW9ucyBvZiB0aGlzCi0Jcm91dGluZSwgeW91IG11c3QgY2hlY2sgdGhlIGxpYnJhcnkgdmVyc2lvbiBudW1iZXIuICBTb21ldGhpbmcgbGlrZQotCSIjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA2MSIgaXMgdGhlIHJpZ2h0IHRlc3QuCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50ICpiYXNpY190YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgc2NhbGVfZmFjdG9yLCBib29sZWFuIGZvcmNlX2Jhc2VsaW5lKQorICAgICAgICBBbGxvd3MgYW4gYXJiaXRyYXJ5IHF1YW50aXphdGlvbiB0YWJsZSB0byBiZSBjcmVhdGVkLiAgd2hpY2hfdGJsCisgICAgICAgIGluZGljYXRlcyB3aGljaCB0YWJsZSBzbG90IHRvIGZpbGwuICBiYXNpY190YWJsZSBwb2ludHMgdG8gYW4gYXJyYXkKKyAgICAgICAgb2YgNjQgdW5zaWduZWQgaW50cyBnaXZlbiBpbiBub3JtYWwgYXJyYXkgb3JkZXIuICBUaGVzZSB2YWx1ZXMgYXJlCisgICAgICAgIG11bHRpcGxpZWQgYnkgc2NhbGVfZmFjdG9yLzEwMCBhbmQgdGhlbiBjbGFtcGVkIHRvIHRoZSByYW5nZSAxLi42NTUzNQorICAgICAgICAob3IgdG8gMS4uMjU1IGlmIGZvcmNlX2Jhc2VsaW5lIGlzIFRSVUUpLgorICAgICAgICBDQVVUSU9OOiBwcmlvciB0byBsaWJyYXJ5IHZlcnNpb24gNmEsIGpwZWdfYWRkX3F1YW50X3RhYmxlIGV4cGVjdGVkCisgICAgICAgIHRoZSBiYXNpYyB0YWJsZSB0byBiZSBnaXZlbiBpbiBKUEVHIHppZ3phZyBvcmRlci4gIElmIHlvdSBuZWVkIHRvCisgICAgICAgIHdyaXRlIGNvZGUgdGhhdCB3b3JrcyB3aXRoIGVpdGhlciBvbGRlciBvciBuZXdlciB2ZXJzaW9ucyBvZiB0aGlzCisgICAgICAgIHJvdXRpbmUsIHlvdSBtdXN0IGNoZWNrIHRoZSBsaWJyYXJ5IHZlcnNpb24gbnVtYmVyLiAgU29tZXRoaW5nIGxpa2UKKyAgICAgICAgIiNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDYxIiBpcyB0aGUgcmlnaHQgdGVzdC4KIAoganBlZ19zaW1wbGVfcHJvZ3Jlc3Npb24gKGpfY29tcHJlc3NfcHRyIGNpbmZvKQotCUdlbmVyYXRlcyBhIGRlZmF1bHQgc2NhbiBzY3JpcHQgZm9yIHdyaXRpbmcgYSBwcm9ncmVzc2l2ZS1KUEVHIGZpbGUuCi0JVGhpcyBpcyB0aGUgcmVjb21tZW5kZWQgbWV0aG9kIG9mIGNyZWF0aW5nIGEgcHJvZ3Jlc3NpdmUgZmlsZSwKLQl1bmxlc3MgeW91IHdhbnQgdG8gbWFrZSBhIGN1c3RvbSBzY2FuIHNlcXVlbmNlLiAgWW91IG11c3QgZW5zdXJlIHRoYXQKLQl0aGUgSlBFRyBjb2xvciBzcGFjZSBpcyBzZXQgY29ycmVjdGx5IGJlZm9yZSBjYWxsaW5nIHRoaXMgcm91dGluZS4KKyAgICAgICAgR2VuZXJhdGVzIGEgZGVmYXVsdCBzY2FuIHNjcmlwdCBmb3Igd3JpdGluZyBhIHByb2dyZXNzaXZlLUpQRUcgZmlsZS4KKyAgICAgICAgVGhpcyBpcyB0aGUgcmVjb21tZW5kZWQgbWV0aG9kIG9mIGNyZWF0aW5nIGEgcHJvZ3Jlc3NpdmUgZmlsZSwKKyAgICAgICAgdW5sZXNzIHlvdSB3YW50IHRvIG1ha2UgYSBjdXN0b20gc2NhbiBzZXF1ZW5jZS4gIFlvdSBtdXN0IGVuc3VyZSB0aGF0CisgICAgICAgIHRoZSBKUEVHIGNvbG9yIHNwYWNlIGlzIHNldCBjb3JyZWN0bHkgYmVmb3JlIGNhbGxpbmcgdGhpcyByb3V0aW5lLgogCiAKIENvbXByZXNzaW9uIHBhcmFtZXRlcnMgKGNpbmZvIGZpZWxkcykgaW5jbHVkZToKIAogSl9EQ1RfTUVUSE9EIGRjdF9tZXRob2QKLQlTZWxlY3RzIHRoZSBhbGdvcml0aG0gdXNlZCBmb3IgdGhlIERDVCBzdGVwLiAgQ2hvaWNlcyBhcmU6Ci0JCUpEQ1RfSVNMT1c6IHNsb3cgYnV0IGFjY3VyYXRlIGludGVnZXIgYWxnb3JpdGhtCi0JCUpEQ1RfSUZBU1Q6IGZhc3RlciwgbGVzcyBhY2N1cmF0ZSBpbnRlZ2VyIG1ldGhvZAotCQlKRENUX0ZMT0FUOiBmbG9hdGluZy1wb2ludCBtZXRob2QKLQkJSkRDVF9ERUZBVUxUOiBkZWZhdWx0IG1ldGhvZCAobm9ybWFsbHkgSkRDVF9JU0xPVykKLQkJSkRDVF9GQVNURVNUOiBmYXN0ZXN0IG1ldGhvZCAobm9ybWFsbHkgSkRDVF9JRkFTVCkKLQlUaGUgRkxPQVQgbWV0aG9kIGlzIHZlcnkgc2xpZ2h0bHkgbW9yZSBhY2N1cmF0ZSB0aGFuIHRoZSBJU0xPVyBtZXRob2QsCi0JYnV0IG1heSBnaXZlIGRpZmZlcmVudCByZXN1bHRzIG9uIGRpZmZlcmVudCBtYWNoaW5lcyBkdWUgdG8gdmFyeWluZwotCXJvdW5kb2ZmIGJlaGF2aW9yLiAgVGhlIGludGVnZXIgbWV0aG9kcyBzaG91bGQgZ2l2ZSB0aGUgc2FtZSByZXN1bHRzCi0Jb24gYWxsIG1hY2hpbmVzLiAgT24gbWFjaGluZXMgd2l0aCBzdWZmaWNpZW50bHkgZmFzdCBGUCBoYXJkd2FyZSwgdGhlCi0JZmxvYXRpbmctcG9pbnQgbWV0aG9kIG1heSBhbHNvIGJlIHRoZSBmYXN0ZXN0LiAgVGhlIElGQVNUIG1ldGhvZCBpcwotCWNvbnNpZGVyYWJseSBsZXNzIGFjY3VyYXRlIHRoYW4gdGhlIG90aGVyIHR3bzsgaXRzIHVzZSBpcyBub3QKLQlyZWNvbW1lbmRlZCBpZiBoaWdoIHF1YWxpdHkgaXMgYSBjb25jZXJuLiAgSkRDVF9ERUZBVUxUIGFuZAotCUpEQ1RfRkFTVEVTVCBhcmUgbWFjcm9zIGNvbmZpZ3VyYWJsZSBieSBlYWNoIGluc3RhbGxhdGlvbi4KKyAgICAgICAgU2VsZWN0cyB0aGUgYWxnb3JpdGhtIHVzZWQgZm9yIHRoZSBEQ1Qgc3RlcC4gIENob2ljZXMgYXJlOgorICAgICAgICAgICAgICAgIEpEQ1RfSVNMT1c6IHNsb3cgYnV0IGFjY3VyYXRlIGludGVnZXIgYWxnb3JpdGhtCisgICAgICAgICAgICAgICAgSkRDVF9JRkFTVDogZmFzdGVyLCBsZXNzIGFjY3VyYXRlIGludGVnZXIgbWV0aG9kCisgICAgICAgICAgICAgICAgSkRDVF9GTE9BVDogZmxvYXRpbmctcG9pbnQgbWV0aG9kCisgICAgICAgICAgICAgICAgSkRDVF9ERUZBVUxUOiBkZWZhdWx0IG1ldGhvZCAobm9ybWFsbHkgSkRDVF9JU0xPVykKKyAgICAgICAgICAgICAgICBKRENUX0ZBU1RFU1Q6IGZhc3Rlc3QgbWV0aG9kIChub3JtYWxseSBKRENUX0lGQVNUKQorICAgICAgICBJbiBsaWJqcGVnLXR1cmJvLCBKRENUX0lGQVNUIGlzIGdlbmVyYWxseSBhYm91dCA1LTE1JSBmYXN0ZXIgdGhhbgorICAgICAgICBKRENUX0lTTE9XIHdoZW4gdXNpbmcgdGhlIHg4Ni94ODYtNjQgU0lNRCBleHRlbnNpb25zIChyZXN1bHRzIG1heSB2YXJ5CisgICAgICAgIHdpdGggb3RoZXIgU0lNRCBpbXBsZW1lbnRhdGlvbnMsIG9yIHdoZW4gdXNpbmcgbGlianBlZy10dXJibyB3aXRob3V0CisgICAgICAgIFNJTUQgZXh0ZW5zaW9ucy4pICBGb3IgcXVhbGl0eSBsZXZlbHMgb2YgOTAgYW5kIGJlbG93LCB0aGVyZSBzaG91bGQgYmUKKyAgICAgICAgbGl0dGxlIG9yIG5vIHBlcmNlcHRpYmxlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdHdvIGFsZ29yaXRobXMuICBGb3IKKyAgICAgICAgcXVhbGl0eSBsZXZlbHMgYWJvdmUgOTAsIGhvd2V2ZXIsIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gSkRDVF9JRkFTVCBhbmQKKyAgICAgICAgSkRDVF9JU0xPVyBiZWNvbWVzIG1vcmUgcHJvbm91bmNlZC4gIFdpdGggcXVhbGl0eT05NywgZm9yIGluc3RhbmNlLAorICAgICAgICBKRENUX0lGQVNUIGluY3VycyBnZW5lcmFsbHkgYWJvdXQgYSAxLTMgZEIgbG9zcyAoaW4gUFNOUikgcmVsYXRpdmUgdG8KKyAgICAgICAgSkRDVF9JU0xPVywgYnV0IHRoaXMgY2FuIGJlIGxhcmdlciBmb3Igc29tZSBpbWFnZXMuICBEbyBub3QgdXNlCisgICAgICAgIEpEQ1RfSUZBU1Qgd2l0aCBxdWFsaXR5IGxldmVscyBhYm92ZSA5Ny4gIFRoZSBhbGdvcml0aG0gb2Z0ZW4KKyAgICAgICAgZGVnZW5lcmF0ZXMgYXQgcXVhbGl0eT05OCBhbmQgYWJvdmUgYW5kIGNhbiBhY3R1YWxseSBwcm9kdWNlIGEgbW9yZQorICAgICAgICBsb3NzeSBpbWFnZSB0aGFuIGlmIGxvd2VyIHF1YWxpdHkgbGV2ZWxzIGhhZCBiZWVuIHVzZWQuICBBbHNvLCBpbgorICAgICAgICBsaWJqcGVnLXR1cmJvLCBKRENUX0lGQVNUIGlzIG5vdCBmdWxseSBhY2NlbGVyYXRlZCBmb3IgcXVhbGl0eSBsZXZlbHMKKyAgICAgICAgYWJvdmUgOTcsIHNvIGl0IHdpbGwgYmUgc2xvd2VyIHRoYW4gSkRDVF9JU0xPVy4gIEpEQ1RfRkxPQVQgaXMgbWFpbmx5IGEKKyAgICAgICAgbGVnYWN5IGZlYXR1cmUuICBJdCBkb2VzIG5vdCBwcm9kdWNlIHNpZ25pZmljYW50bHkgbW9yZSBhY2N1cmF0ZQorICAgICAgICByZXN1bHRzIHRoYW4gdGhlIElTTE9XIG1ldGhvZCwgYW5kIGl0IGlzIG11Y2ggc2xvd2VyLiAgVGhlIEZMT0FUIG1ldGhvZAorICAgICAgICBtYXkgYWxzbyBnaXZlIGRpZmZlcmVudCByZXN1bHRzIG9uIGRpZmZlcmVudCBtYWNoaW5lcyBkdWUgdG8gdmFyeWluZworICAgICAgICByb3VuZG9mZiBiZWhhdmlvciwgd2hlcmVhcyB0aGUgaW50ZWdlciBtZXRob2RzIHNob3VsZCBnaXZlIHRoZSBzYW1lCisgICAgICAgIHJlc3VsdHMgb24gYWxsIG1hY2hpbmVzLgogCiBKX0NPTE9SX1NQQUNFIGpwZWdfY29sb3Jfc3BhY2UKIGludCBudW1fY29tcG9uZW50cwotCVRoZSBKUEVHIGNvbG9yIHNwYWNlIGFuZCBjb3JyZXNwb25kaW5nIG51bWJlciBvZiBjb21wb25lbnRzOyBzZWUKLQkiU3BlY2lhbCBjb2xvciBzcGFjZXMiLCBiZWxvdywgZm9yIG1vcmUgaW5mby4gIFdlIHJlY29tbWVuZCB1c2luZwotCWpwZWdfc2V0X2NvbG9yX3NwYWNlKCkgaWYgeW91IHdhbnQgdG8gY2hhbmdlIHRoZXNlLgorICAgICAgICBUaGUgSlBFRyBjb2xvciBzcGFjZSBhbmQgY29ycmVzcG9uZGluZyBudW1iZXIgb2YgY29tcG9uZW50czsgc2VlCisgICAgICAgICJTcGVjaWFsIGNvbG9yIHNwYWNlcyIsIGJlbG93LCBmb3IgbW9yZSBpbmZvLiAgV2UgcmVjb21tZW5kIHVzaW5nCisgICAgICAgIGpwZWdfc2V0X2NvbG9yX3NwYWNlKCkgaWYgeW91IHdhbnQgdG8gY2hhbmdlIHRoZXNlLgogCiBib29sZWFuIG9wdGltaXplX2NvZGluZwotCVRSVUUgY2F1c2VzIHRoZSBjb21wcmVzc29yIHRvIGNvbXB1dGUgb3B0aW1hbCBIdWZmbWFuIGNvZGluZyB0YWJsZXMKLQlmb3IgdGhlIGltYWdlLiAgVGhpcyByZXF1aXJlcyBhbiBleHRyYSBwYXNzIG92ZXIgdGhlIGRhdGEgYW5kCi0JdGhlcmVmb3JlIGNvc3RzIGEgZ29vZCBkZWFsIG9mIHNwYWNlIGFuZCB0aW1lLiAgVGhlIGRlZmF1bHQgaXMKLQlGQUxTRSwgd2hpY2ggdGVsbHMgdGhlIGNvbXByZXNzb3IgdG8gdXNlIHRoZSBzdXBwbGllZCBvciBkZWZhdWx0Ci0JSHVmZm1hbiB0YWJsZXMuICBJbiBtb3N0IGNhc2VzIG9wdGltYWwgdGFibGVzIHNhdmUgb25seSBhIGZldyBwZXJjZW50Ci0Jb2YgZmlsZSBzaXplIGNvbXBhcmVkIHRvIHRoZSBkZWZhdWx0IHRhYmxlcy4gIE5vdGUgdGhhdCB3aGVuIHRoaXMgaXMKLQlUUlVFLCB5b3UgbmVlZCBub3Qgc3VwcGx5IEh1ZmZtYW4gdGFibGVzIGF0IGFsbCwgYW5kIGFueSB5b3UgZG8KLQlzdXBwbHkgd2lsbCBiZSBvdmVyd3JpdHRlbi4KKyAgICAgICAgVFJVRSBjYXVzZXMgdGhlIGNvbXByZXNzb3IgdG8gY29tcHV0ZSBvcHRpbWFsIEh1ZmZtYW4gY29kaW5nIHRhYmxlcworICAgICAgICBmb3IgdGhlIGltYWdlLiAgVGhpcyByZXF1aXJlcyBhbiBleHRyYSBwYXNzIG92ZXIgdGhlIGRhdGEgYW5kCisgICAgICAgIHRoZXJlZm9yZSBjb3N0cyBhIGdvb2QgZGVhbCBvZiBzcGFjZSBhbmQgdGltZS4gIFRoZSBkZWZhdWx0IGlzCisgICAgICAgIEZBTFNFLCB3aGljaCB0ZWxscyB0aGUgY29tcHJlc3NvciB0byB1c2UgdGhlIHN1cHBsaWVkIG9yIGRlZmF1bHQKKyAgICAgICAgSHVmZm1hbiB0YWJsZXMuICBJbiBtb3N0IGNhc2VzIG9wdGltYWwgdGFibGVzIHNhdmUgb25seSBhIGZldyBwZXJjZW50CisgICAgICAgIG9mIGZpbGUgc2l6ZSBjb21wYXJlZCB0byB0aGUgZGVmYXVsdCB0YWJsZXMuICBOb3RlIHRoYXQgd2hlbiB0aGlzIGlzCisgICAgICAgIFRSVUUsIHlvdSBuZWVkIG5vdCBzdXBwbHkgSHVmZm1hbiB0YWJsZXMgYXQgYWxsLCBhbmQgYW55IHlvdSBkbworICAgICAgICBzdXBwbHkgd2lsbCBiZSBvdmVyd3JpdHRlbi4KIAogdW5zaWduZWQgaW50IHJlc3RhcnRfaW50ZXJ2YWwKIGludCByZXN0YXJ0X2luX3Jvd3MKLQlUbyBlbWl0IHJlc3RhcnQgbWFya2VycyBpbiB0aGUgSlBFRyBmaWxlLCBzZXQgb25lIG9mIHRoZXNlIG5vbnplcm8uCi0JU2V0IHJlc3RhcnRfaW50ZXJ2YWwgdG8gc3BlY2lmeSB0aGUgZXhhY3QgaW50ZXJ2YWwgaW4gTUNVIGJsb2Nrcy4KLQlTZXQgcmVzdGFydF9pbl9yb3dzIHRvIHNwZWNpZnkgdGhlIGludGVydmFsIGluIE1DVSByb3dzLiAgKElmCi0JcmVzdGFydF9pbl9yb3dzIGlzIG5vdCAwLCB0aGVuIHJlc3RhcnRfaW50ZXJ2YWwgaXMgc2V0IGFmdGVyIHRoZQotCWltYWdlIHdpZHRoIGluIE1DVXMgaXMgY29tcHV0ZWQuKSAgRGVmYXVsdHMgYXJlIHplcm8gKG5vIHJlc3RhcnRzKS4KLQlPbmUgcmVzdGFydCBtYXJrZXIgcGVyIE1DVSByb3cgaXMgb2Z0ZW4gYSBnb29kIGNob2ljZS4KLQlOT1RFOiB0aGUgb3ZlcmhlYWQgb2YgcmVzdGFydCBtYXJrZXJzIGlzIGhpZ2hlciBpbiBncmF5c2NhbGUgSlBFRwotCWZpbGVzIHRoYW4gaW4gY29sb3IgZmlsZXMsIGFuZCBNVUNIIGhpZ2hlciBpbiBwcm9ncmVzc2l2ZSBKUEVHcy4KLQlJZiB5b3UgdXNlIHJlc3RhcnRzLCB5b3UgbWF5IHdhbnQgdG8gdXNlIGxhcmdlciBpbnRlcnZhbHMgaW4gdGhvc2UKLQljYXNlcy4KKyAgICAgICAgVG8gZW1pdCByZXN0YXJ0IG1hcmtlcnMgaW4gdGhlIEpQRUcgZmlsZSwgc2V0IG9uZSBvZiB0aGVzZSBub256ZXJvLgorICAgICAgICBTZXQgcmVzdGFydF9pbnRlcnZhbCB0byBzcGVjaWZ5IHRoZSBleGFjdCBpbnRlcnZhbCBpbiBNQ1UgYmxvY2tzLgorICAgICAgICBTZXQgcmVzdGFydF9pbl9yb3dzIHRvIHNwZWNpZnkgdGhlIGludGVydmFsIGluIE1DVSByb3dzLiAgKElmCisgICAgICAgIHJlc3RhcnRfaW5fcm93cyBpcyBub3QgMCwgdGhlbiByZXN0YXJ0X2ludGVydmFsIGlzIHNldCBhZnRlciB0aGUKKyAgICAgICAgaW1hZ2Ugd2lkdGggaW4gTUNVcyBpcyBjb21wdXRlZC4pICBEZWZhdWx0cyBhcmUgemVybyAobm8gcmVzdGFydHMpLgorICAgICAgICBPbmUgcmVzdGFydCBtYXJrZXIgcGVyIE1DVSByb3cgaXMgb2Z0ZW4gYSBnb29kIGNob2ljZS4KKyAgICAgICAgTk9URTogdGhlIG92ZXJoZWFkIG9mIHJlc3RhcnQgbWFya2VycyBpcyBoaWdoZXIgaW4gZ3JheXNjYWxlIEpQRUcKKyAgICAgICAgZmlsZXMgdGhhbiBpbiBjb2xvciBmaWxlcywgYW5kIE1VQ0ggaGlnaGVyIGluIHByb2dyZXNzaXZlIEpQRUdzLgorICAgICAgICBJZiB5b3UgdXNlIHJlc3RhcnRzLCB5b3UgbWF5IHdhbnQgdG8gdXNlIGxhcmdlciBpbnRlcnZhbHMgaW4gdGhvc2UKKyAgICAgICAgY2FzZXMuCiAKIGNvbnN0IGpwZWdfc2Nhbl9pbmZvICogc2Nhbl9pbmZvCiBpbnQgbnVtX3NjYW5zCi0JQnkgZGVmYXVsdCwgc2Nhbl9pbmZvIGlzIE5VTEw7IHRoaXMgY2F1c2VzIHRoZSBjb21wcmVzc29yIHRvIHdyaXRlIGEKLQlzaW5nbGUtc2NhbiBzZXF1ZW50aWFsIEpQRUcgZmlsZS4gIElmIG5vdCBOVUxMLCBzY2FuX2luZm8gcG9pbnRzIHRvCi0JYW4gYXJyYXkgb2Ygc2NhbiBkZWZpbml0aW9uIHJlY29yZHMgb2YgbGVuZ3RoIG51bV9zY2Fucy4gIFRoZQotCWNvbXByZXNzb3Igd2lsbCB0aGVuIHdyaXRlIGEgSlBFRyBmaWxlIGhhdmluZyBvbmUgc2NhbiBmb3IgZWFjaCBzY2FuCi0JZGVmaW5pdGlvbiByZWNvcmQuICBUaGlzIGlzIHVzZWQgdG8gZ2VuZXJhdGUgbm9uaW50ZXJsZWF2ZWQgb3IKLQlwcm9ncmVzc2l2ZSBKUEVHIGZpbGVzLiAgVGhlIGxpYnJhcnkgY2hlY2tzIHRoYXQgdGhlIHNjYW4gYXJyYXkKLQlkZWZpbmVzIGEgdmFsaWQgSlBFRyBzY2FuIHNlcXVlbmNlLiAgKGpwZWdfc2ltcGxlX3Byb2dyZXNzaW9uIGNyZWF0ZXMKLQlhIHN1aXRhYmxlIHNjYW4gZGVmaW5pdGlvbiBhcnJheSBmb3IgcHJvZ3Jlc3NpdmUgSlBFRy4pICBUaGlzIGlzCi0JZGlzY3Vzc2VkIGZ1cnRoZXIgdW5kZXIgIlByb2dyZXNzaXZlIEpQRUcgc3VwcG9ydCIuCisgICAgICAgIEJ5IGRlZmF1bHQsIHNjYW5faW5mbyBpcyBOVUxMOyB0aGlzIGNhdXNlcyB0aGUgY29tcHJlc3NvciB0byB3cml0ZSBhCisgICAgICAgIHNpbmdsZS1zY2FuIHNlcXVlbnRpYWwgSlBFRyBmaWxlLiAgSWYgbm90IE5VTEwsIHNjYW5faW5mbyBwb2ludHMgdG8KKyAgICAgICAgYW4gYXJyYXkgb2Ygc2NhbiBkZWZpbml0aW9uIHJlY29yZHMgb2YgbGVuZ3RoIG51bV9zY2Fucy4gIFRoZQorICAgICAgICBjb21wcmVzc29yIHdpbGwgdGhlbiB3cml0ZSBhIEpQRUcgZmlsZSBoYXZpbmcgb25lIHNjYW4gZm9yIGVhY2ggc2NhbgorICAgICAgICBkZWZpbml0aW9uIHJlY29yZC4gIFRoaXMgaXMgdXNlZCB0byBnZW5lcmF0ZSBub25pbnRlcmxlYXZlZCBvcgorICAgICAgICBwcm9ncmVzc2l2ZSBKUEVHIGZpbGVzLiAgVGhlIGxpYnJhcnkgY2hlY2tzIHRoYXQgdGhlIHNjYW4gYXJyYXkKKyAgICAgICAgZGVmaW5lcyBhIHZhbGlkIEpQRUcgc2NhbiBzZXF1ZW5jZS4gIChqcGVnX3NpbXBsZV9wcm9ncmVzc2lvbiBjcmVhdGVzCisgICAgICAgIGEgc3VpdGFibGUgc2NhbiBkZWZpbml0aW9uIGFycmF5IGZvciBwcm9ncmVzc2l2ZSBKUEVHLikgIFRoaXMgaXMKKyAgICAgICAgZGlzY3Vzc2VkIGZ1cnRoZXIgdW5kZXIgIlByb2dyZXNzaXZlIEpQRUcgc3VwcG9ydCIuCiAKIGludCBzbW9vdGhpbmdfZmFjdG9yCi0JSWYgbm9uLXplcm8sIHRoZSBpbnB1dCBpbWFnZSBpcyBzbW9vdGhlZDsgdGhlIHZhbHVlIHNob3VsZCBiZSAxIGZvcgotCW1pbmltYWwgc21vb3RoaW5nIHRvIDEwMCBmb3IgbWF4aW11bSBzbW9vdGhpbmcuICBDb25zdWx0IGpjc2FtcGxlLmMKLQlmb3IgZGV0YWlscyBvZiB0aGUgc21vb3RoaW5nIGFsZ29yaXRobS4gIFRoZSBkZWZhdWx0IGlzIHplcm8uCisgICAgICAgIElmIG5vbi16ZXJvLCB0aGUgaW5wdXQgaW1hZ2UgaXMgc21vb3RoZWQ7IHRoZSB2YWx1ZSBzaG91bGQgYmUgMSBmb3IKKyAgICAgICAgbWluaW1hbCBzbW9vdGhpbmcgdG8gMTAwIGZvciBtYXhpbXVtIHNtb290aGluZy4gIENvbnN1bHQgamNzYW1wbGUuYworICAgICAgICBmb3IgZGV0YWlscyBvZiB0aGUgc21vb3RoaW5nIGFsZ29yaXRobS4gIFRoZSBkZWZhdWx0IGlzIHplcm8uCiAKIGJvb2xlYW4gd3JpdGVfSkZJRl9oZWFkZXIKLQlJZiBUUlVFLCBhIEpGSUYgQVBQMCBtYXJrZXIgaXMgZW1pdHRlZC4gIGpwZWdfc2V0X2RlZmF1bHRzKCkgYW5kCi0JanBlZ19zZXRfY29sb3JzcGFjZSgpIHNldCB0aGlzIFRSVUUgaWYgYSBKRklGLWxlZ2FsIEpQRUcgY29sb3Igc3BhY2UKLQkoaWUsIFlDYkNyIG9yIGdyYXlzY2FsZSkgaXMgc2VsZWN0ZWQsIG90aGVyd2lzZSBGQUxTRS4KKyAgICAgICAgSWYgVFJVRSwgYSBKRklGIEFQUDAgbWFya2VyIGlzIGVtaXR0ZWQuICBqcGVnX3NldF9kZWZhdWx0cygpIGFuZAorICAgICAgICBqcGVnX3NldF9jb2xvcnNwYWNlKCkgc2V0IHRoaXMgVFJVRSBpZiBhIEpGSUYtbGVnYWwgSlBFRyBjb2xvciBzcGFjZQorICAgICAgICAoaWUsIFlDYkNyIG9yIGdyYXlzY2FsZSkgaXMgc2VsZWN0ZWQsIG90aGVyd2lzZSBGQUxTRS4KIAogVUlOVDggSkZJRl9tYWpvcl92ZXJzaW9uCiBVSU5UOCBKRklGX21pbm9yX3ZlcnNpb24KLQlUaGUgdmVyc2lvbiBudW1iZXIgdG8gYmUgd3JpdHRlbiBpbnRvIHRoZSBKRklGIG1hcmtlci4KLQlqcGVnX3NldF9kZWZhdWx0cygpIGluaXRpYWxpemVzIHRoZSB2ZXJzaW9uIHRvIDEuMDEgKG1ham9yPW1pbm9yPTEpLgotCVlvdSBzaG91bGQgc2V0IGl0IHRvIDEuMDIgKG1ham9yPTEsIG1pbm9yPTIpIGlmIHlvdSBwbGFuIHRvIHdyaXRlCi0JYW55IEpGSUYgMS4wMiBleHRlbnNpb24gbWFya2Vycy4KKyAgICAgICAgVGhlIHZlcnNpb24gbnVtYmVyIHRvIGJlIHdyaXR0ZW4gaW50byB0aGUgSkZJRiBtYXJrZXIuCisgICAgICAgIGpwZWdfc2V0X2RlZmF1bHRzKCkgaW5pdGlhbGl6ZXMgdGhlIHZlcnNpb24gdG8gMS4wMSAobWFqb3I9bWlub3I9MSkuCisgICAgICAgIFlvdSBzaG91bGQgc2V0IGl0IHRvIDEuMDIgKG1ham9yPTEsIG1pbm9yPTIpIGlmIHlvdSBwbGFuIHRvIHdyaXRlCisgICAgICAgIGFueSBKRklGIDEuMDIgZXh0ZW5zaW9uIG1hcmtlcnMuCiAKIFVJTlQ4IGRlbnNpdHlfdW5pdAogVUlOVDE2IFhfZGVuc2l0eQogVUlOVDE2IFlfZGVuc2l0eQotCVRoZSByZXNvbHV0aW9uIGluZm9ybWF0aW9uIHRvIGJlIHdyaXR0ZW4gaW50byB0aGUgSkZJRiBtYXJrZXI7Ci0Jbm90IHVzZWQgb3RoZXJ3aXNlLiAgZGVuc2l0eV91bml0IG1heSBiZSAwIGZvciB1bmtub3duLAotCTEgZm9yIGRvdHMvaW5jaCwgb3IgMiBmb3IgZG90cy9jbS4gIFRoZSBkZWZhdWx0IHZhbHVlcyBhcmUgMCwxLDEKLQlpbmRpY2F0aW5nIHNxdWFyZSBwaXhlbHMgb2YgdW5rbm93biBzaXplLgorICAgICAgICBUaGUgcmVzb2x1dGlvbiBpbmZvcm1hdGlvbiB0byBiZSB3cml0dGVuIGludG8gdGhlIEpGSUYgbWFya2VyOworICAgICAgICBub3QgdXNlZCBvdGhlcndpc2UuICBkZW5zaXR5X3VuaXQgbWF5IGJlIDAgZm9yIHVua25vd24sCisgICAgICAgIDEgZm9yIGRvdHMvaW5jaCwgb3IgMiBmb3IgZG90cy9jbS4gIFRoZSBkZWZhdWx0IHZhbHVlcyBhcmUgMCwxLDEKKyAgICAgICAgaW5kaWNhdGluZyBzcXVhcmUgcGl4ZWxzIG9mIHVua25vd24gc2l6ZS4KIAogYm9vbGVhbiB3cml0ZV9BZG9iZV9tYXJrZXIKLQlJZiBUUlVFLCBhbiBBZG9iZSBBUFAxNCBtYXJrZXIgaXMgZW1pdHRlZC4gIGpwZWdfc2V0X2RlZmF1bHRzKCkgYW5kCi0JanBlZ19zZXRfY29sb3JzcGFjZSgpIHNldCB0aGlzIFRSVUUgaWYgSlBFRyBjb2xvciBzcGFjZSBSR0IsIENNWUssCi0Jb3IgWUNDSyBpcyBzZWxlY3RlZCwgb3RoZXJ3aXNlIEZBTFNFLiAgSXQgaXMgZ2VuZXJhbGx5IGEgYmFkIGlkZWEKLQl0byBzZXQgYm90aCB3cml0ZV9KRklGX2hlYWRlciBhbmQgd3JpdGVfQWRvYmVfbWFya2VyLiAgSW4gZmFjdCwKLQl5b3UgcHJvYmFibHkgc2hvdWxkbid0IGNoYW5nZSB0aGUgZGVmYXVsdCBzZXR0aW5ncyBhdCBhbGwgLS0tIHRoZQotCWRlZmF1bHQgYmVoYXZpb3IgZW5zdXJlcyB0aGF0IHRoZSBKUEVHIGZpbGUncyBjb2xvciBzcGFjZSBjYW4gYmUKLQlyZWNvZ25pemVkIGJ5IHRoZSBkZWNvZGVyLgorICAgICAgICBJZiBUUlVFLCBhbiBBZG9iZSBBUFAxNCBtYXJrZXIgaXMgZW1pdHRlZC4gIGpwZWdfc2V0X2RlZmF1bHRzKCkgYW5kCisgICAgICAgIGpwZWdfc2V0X2NvbG9yc3BhY2UoKSBzZXQgdGhpcyBUUlVFIGlmIEpQRUcgY29sb3Igc3BhY2UgUkdCLCBDTVlLLAorICAgICAgICBvciBZQ0NLIGlzIHNlbGVjdGVkLCBvdGhlcndpc2UgRkFMU0UuICBJdCBpcyBnZW5lcmFsbHkgYSBiYWQgaWRlYQorICAgICAgICB0byBzZXQgYm90aCB3cml0ZV9KRklGX2hlYWRlciBhbmQgd3JpdGVfQWRvYmVfbWFya2VyLiAgSW4gZmFjdCwKKyAgICAgICAgeW91IHByb2JhYmx5IHNob3VsZG4ndCBjaGFuZ2UgdGhlIGRlZmF1bHQgc2V0dGluZ3MgYXQgYWxsIC0tLSB0aGUKKyAgICAgICAgZGVmYXVsdCBiZWhhdmlvciBlbnN1cmVzIHRoYXQgdGhlIEpQRUcgZmlsZSdzIGNvbG9yIHNwYWNlIGNhbiBiZQorICAgICAgICByZWNvZ25pemVkIGJ5IHRoZSBkZWNvZGVyLgogCiBKUVVBTlRfVEJMICogcXVhbnRfdGJsX3B0cnNbTlVNX1FVQU5UX1RCTFNdCi0JUG9pbnRlcnMgdG8gY29lZmZpY2llbnQgcXVhbnRpemF0aW9uIHRhYmxlcywgb25lIHBlciB0YWJsZSBzbG90LAotCW9yIE5VTEwgaWYgbm8gdGFibGUgaXMgZGVmaW5lZCBmb3IgYSBzbG90LiAgVXN1YWxseSB0aGVzZSBzaG91bGQKLQliZSBzZXQgdmlhIG9uZSBvZiB0aGUgYWJvdmUgaGVscGVyIHJvdXRpbmVzOyBqcGVnX2FkZF9xdWFudF90YWJsZSgpCi0JaXMgZ2VuZXJhbCBlbm91Z2ggdG8gZGVmaW5lIGFueSBxdWFudGl6YXRpb24gdGFibGUuICBUaGUgb3RoZXIKLQlyb3V0aW5lcyB3aWxsIHNldCB1cCB0YWJsZSBzbG90IDAgZm9yIGx1bWluYW5jZSBxdWFsaXR5IGFuZCB0YWJsZQotCXNsb3QgMSBmb3IgY2hyb21pbmFuY2UuCisgICAgICAgIFBvaW50ZXJzIHRvIGNvZWZmaWNpZW50IHF1YW50aXphdGlvbiB0YWJsZXMsIG9uZSBwZXIgdGFibGUgc2xvdCwKKyAgICAgICAgb3IgTlVMTCBpZiBubyB0YWJsZSBpcyBkZWZpbmVkIGZvciBhIHNsb3QuICBVc3VhbGx5IHRoZXNlIHNob3VsZAorICAgICAgICBiZSBzZXQgdmlhIG9uZSBvZiB0aGUgYWJvdmUgaGVscGVyIHJvdXRpbmVzOyBqcGVnX2FkZF9xdWFudF90YWJsZSgpCisgICAgICAgIGlzIGdlbmVyYWwgZW5vdWdoIHRvIGRlZmluZSBhbnkgcXVhbnRpemF0aW9uIHRhYmxlLiAgVGhlIG90aGVyCisgICAgICAgIHJvdXRpbmVzIHdpbGwgc2V0IHVwIHRhYmxlIHNsb3QgMCBmb3IgbHVtaW5hbmNlIHF1YWxpdHkgYW5kIHRhYmxlCisgICAgICAgIHNsb3QgMSBmb3IgY2hyb21pbmFuY2UuCiAKIGludCBxX3NjYWxlX2ZhY3RvcltOVU1fUVVBTlRfVEJMU10KLQlbbGlianBlZyB2NysgQVBJL0FCSSBlbXVsYXRpb24gb25seV0KLQlMaW5lYXIgcXVhbnRpemF0aW9uIHNjYWxpbmcgZmFjdG9ycyAoMC0xMDAsIGRlZmF1bHQgMTAwKQotCWZvciB1c2Ugd2l0aCBqcGVnX2RlZmF1bHRfcXRhYmxlcygpLgotCVNlZSByZHN3aXRjaC5jIGFuZCBjanBlZy5jIGZvciBhbiBleGFtcGxlIG9mIHVzYWdlLgotCU5vdGUgdGhhdCB0aGUgcV9zY2FsZV9mYWN0b3JbXSB2YWx1ZXMgdXNlICJsaW5lYXIiIHNjYWxlcywgc28gSlBFRwotCXF1YWxpdHkgbGV2ZWxzIGNob3NlbiBieSB0aGUgdXNlciBtdXN0IGJlIGNvbnZlcnRlZCB0byB0aGVzZSBzY2FsZXMKLQl1c2luZyBqcGVnX3F1YWxpdHlfc2NhbGluZygpLiAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgY29ycmVzcG9uZHMgdG8KLQljanBlZyAtcXVhbGl0eSA5MCw3MDoKKyAgICAgICAgW2xpYmpwZWcgdjcrIEFQSS9BQkkgZW11bGF0aW9uIG9ubHldCisgICAgICAgIExpbmVhciBxdWFudGl6YXRpb24gc2NhbGluZyBmYWN0b3JzICgwLTEwMCwgZGVmYXVsdCAxMDApCisgICAgICAgIGZvciB1c2Ugd2l0aCBqcGVnX2RlZmF1bHRfcXRhYmxlcygpLgorICAgICAgICBTZWUgcmRzd2l0Y2guYyBhbmQgY2pwZWcuYyBmb3IgYW4gZXhhbXBsZSBvZiB1c2FnZS4KKyAgICAgICAgTm90ZSB0aGF0IHRoZSBxX3NjYWxlX2ZhY3RvcltdIHZhbHVlcyB1c2UgImxpbmVhciIgc2NhbGVzLCBzbyBKUEVHCisgICAgICAgIHF1YWxpdHkgbGV2ZWxzIGNob3NlbiBieSB0aGUgdXNlciBtdXN0IGJlIGNvbnZlcnRlZCB0byB0aGVzZSBzY2FsZXMKKyAgICAgICAgdXNpbmcganBlZ19xdWFsaXR5X3NjYWxpbmcoKS4gIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IGNvcnJlc3BvbmRzIHRvCisgICAgICAgIGNqcGVnIC1xdWFsaXR5IDkwLDcwOgogCi0JCWpwZWdfc2V0X2RlZmF1bHRzKGNpbmZvKTsKKyAgICAgICAgICAgICAgICBqcGVnX3NldF9kZWZhdWx0cyhjaW5mbyk7CiAKLQkJLyogU2V0IGx1bWluYW5jZSBxdWFsaXR5IDkwLiAqLwotCQljaW5mby0+cV9zY2FsZV9mYWN0b3JbMF0gPSBqcGVnX3F1YWxpdHlfc2NhbGluZyg5MCk7Ci0JCS8qIFNldCBjaHJvbWluYW5jZSBxdWFsaXR5IDcwLiAqLwotCQljaW5mby0+cV9zY2FsZV9mYWN0b3JbMV0gPSBqcGVnX3F1YWxpdHlfc2NhbGluZyg3MCk7CisgICAgICAgICAgICAgICAgLyogU2V0IGx1bWluYW5jZSBxdWFsaXR5IDkwLiAqLworICAgICAgICAgICAgICAgIGNpbmZvLT5xX3NjYWxlX2ZhY3RvclswXSA9IGpwZWdfcXVhbGl0eV9zY2FsaW5nKDkwKTsKKyAgICAgICAgICAgICAgICAvKiBTZXQgY2hyb21pbmFuY2UgcXVhbGl0eSA3MC4gKi8KKyAgICAgICAgICAgICAgICBjaW5mby0+cV9zY2FsZV9mYWN0b3JbMV0gPSBqcGVnX3F1YWxpdHlfc2NhbGluZyg3MCk7CiAKLQkJanBlZ19kZWZhdWx0X3F0YWJsZXMoY2luZm8sIGZvcmNlX2Jhc2VsaW5lKTsKKyAgICAgICAgICAgICAgICBqcGVnX2RlZmF1bHRfcXRhYmxlcyhjaW5mbywgZm9yY2VfYmFzZWxpbmUpOwogCi0JQ0FVVElPTjogU2V0dGluZyBzZXBhcmF0ZSBxdWFsaXR5IGxldmVscyBmb3IgY2hyb21pbmFuY2UgYW5kIGx1bWluYW5jZQotCWlzIG1haW5seSBvbmx5IHVzZWZ1bCBpZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZyBpcyBkaXNhYmxlZC4gIDJ4MgotCWNocm9taW5hbmNlIHN1YnNhbXBsaW5nIChBS0EgIjQ6MjowIikgaXMgdGhlIGRlZmF1bHQsIGJ1dCB5b3UgY2FuCi0JZXhwbGljaXRseSBkaXNhYmxlIHN1YnNhbXBsaW5nIGFzIGZvbGxvd3M6CisgICAgICAgIENBVVRJT046IFNldHRpbmcgc2VwYXJhdGUgcXVhbGl0eSBsZXZlbHMgZm9yIGNocm9taW5hbmNlIGFuZCBsdW1pbmFuY2UKKyAgICAgICAgaXMgbWFpbmx5IG9ubHkgdXNlZnVsIGlmIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nIGlzIGRpc2FibGVkLiAgMngyCisgICAgICAgIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nIChBS0EgIjQ6MjowIikgaXMgdGhlIGRlZmF1bHQsIGJ1dCB5b3UgY2FuCisgICAgICAgIGV4cGxpY2l0bHkgZGlzYWJsZSBzdWJzYW1wbGluZyBhcyBmb2xsb3dzOgogCi0JCWNpbmZvLT5jb21wX2luZm9bMF0udl9zYW1wX2ZhY3RvciA9IDE7Ci0JCWNpbmZvLT5jb21wX2luZm9bMF0uaF9zYW1wX2ZhY3RvciA9IDE7CisgICAgICAgICAgICAgICAgY2luZm8tPmNvbXBfaW5mb1swXS52X3NhbXBfZmFjdG9yID0gMTsKKyAgICAgICAgICAgICAgICBjaW5mby0+Y29tcF9pbmZvWzBdLmhfc2FtcF9mYWN0b3IgPSAxOwogCiBKSFVGRl9UQkwgKiBkY19odWZmX3RibF9wdHJzW05VTV9IVUZGX1RCTFNdCiBKSFVGRl9UQkwgKiBhY19odWZmX3RibF9wdHJzW05VTV9IVUZGX1RCTFNdCi0JUG9pbnRlcnMgdG8gSHVmZm1hbiBjb2RpbmcgdGFibGVzLCBvbmUgcGVyIHRhYmxlIHNsb3QsIG9yIE5VTEwgaWYKLQlubyB0YWJsZSBpcyBkZWZpbmVkIGZvciBhIHNsb3QuICBTbG90cyAwIGFuZCAxIGFyZSBmaWxsZWQgd2l0aCB0aGUKLQlKUEVHIHNhbXBsZSB0YWJsZXMgYnkganBlZ19zZXRfZGVmYXVsdHMoKS4gIElmIHlvdSBuZWVkIHRvIGFsbG9jYXRlCi0JbW9yZSB0YWJsZSBzdHJ1Y3R1cmVzLCBqcGVnX2FsbG9jX2h1ZmZfdGFibGUoKSBtYXkgYmUgdXNlZC4KLQlOb3RlIHRoYXQgb3B0aW1hbCBIdWZmbWFuIHRhYmxlcyBjYW4gYmUgY29tcHV0ZWQgZm9yIGFuIGltYWdlCi0JYnkgc2V0dGluZyBvcHRpbWl6ZV9jb2RpbmcsIGFzIGRpc2N1c3NlZCBhYm92ZTsgdGhlcmUncyBzZWxkb20KLQlhbnkgbmVlZCB0byBtZXNzIHdpdGggcHJvdmlkaW5nIHlvdXIgb3duIEh1ZmZtYW4gdGFibGVzLgorICAgICAgICBQb2ludGVycyB0byBIdWZmbWFuIGNvZGluZyB0YWJsZXMsIG9uZSBwZXIgdGFibGUgc2xvdCwgb3IgTlVMTCBpZgorICAgICAgICBubyB0YWJsZSBpcyBkZWZpbmVkIGZvciBhIHNsb3QuICBTbG90cyAwIGFuZCAxIGFyZSBmaWxsZWQgd2l0aCB0aGUKKyAgICAgICAgSlBFRyBzYW1wbGUgdGFibGVzIGJ5IGpwZWdfc2V0X2RlZmF1bHRzKCkuICBJZiB5b3UgbmVlZCB0byBhbGxvY2F0ZQorICAgICAgICBtb3JlIHRhYmxlIHN0cnVjdHVyZXMsIGpwZWdfYWxsb2NfaHVmZl90YWJsZSgpIG1heSBiZSB1c2VkLgorICAgICAgICBOb3RlIHRoYXQgb3B0aW1hbCBIdWZmbWFuIHRhYmxlcyBjYW4gYmUgY29tcHV0ZWQgZm9yIGFuIGltYWdlCisgICAgICAgIGJ5IHNldHRpbmcgb3B0aW1pemVfY29kaW5nLCBhcyBkaXNjdXNzZWQgYWJvdmU7IHRoZXJlJ3Mgc2VsZG9tCisgICAgICAgIGFueSBuZWVkIHRvIG1lc3Mgd2l0aCBwcm92aWRpbmcgeW91ciBvd24gSHVmZm1hbiB0YWJsZXMuCiAKIAogW2xpYmpwZWcgdjcrIEFQSS9BQkkgZW11bGF0aW9uIG9ubHldCkBAIC0xMDIxLDkgKzEwMzIsMTAgQEAKIGdpdmVuIGJ5IHRoZSBmb2xsb3dpbmcgZmllbGRzLiAgVGhlc2UgYXJlIGNvbXB1dGVkIGZyb20gdGhlIGlucHV0IGltYWdlCiBkaW1lbnNpb25zIGFuZCB0aGUgY29tcHJlc3Npb24gcGFyYW1ldGVycyBieSBqcGVnX3N0YXJ0X2NvbXByZXNzKCkuICBZb3UgY2FuCiBhbHNvIGNhbGwganBlZ19jYWxjX2pwZWdfZGltZW5zaW9ucygpIHRvIG9idGFpbiB0aGUgdmFsdWVzIHRoYXQgd2lsbCByZXN1bHQKLWZyb20gdGhlIGN1cnJlbnQgcGFyYW1ldGVyIHNldHRpbmdzLgorZnJvbSB0aGUgY3VycmVudCBwYXJhbWV0ZXIgc2V0dGluZ3MuICBUaGlzIGNhbiBiZSB1c2VmdWwgaWYgeW91IGFyZSB0cnlpbmcKK3RvIHBpY2sgYSBzY2FsaW5nIHJhdGlvIHRoYXQgd2lsbCBnZXQgY2xvc2UgdG8gYSBkZXNpcmVkIHRhcmdldCBzaXplLgogCi1KRElNRU5TSU9OIGpwZWdfd2lkdGgJCUFjdHVhbCBkaW1lbnNpb25zIG9mIG91dHB1dCBpbWFnZS4KK0pESU1FTlNJT04ganBlZ193aWR0aCAgICAgICAgICAgQWN0dWFsIGRpbWVuc2lvbnMgb2Ygb3V0cHV0IGltYWdlLgogSkRJTUVOU0lPTiBqcGVnX2hlaWdodAogCiAKQEAgLTEwMzQsMzIgKzEwNDYsMzIgQEAKIHRvIHVzZSB0aGF0IHJvdXRpbmUsIGl0J3MgdXAgdG8geW91IHRvIGFsbG9jYXRlIHRoZSBhcnJheS4KIAogaW50IGNvbXBvbmVudF9pZAotCVRoZSBvbmUtYnl0ZSBpZGVudGlmaWVyIGNvZGUgdG8gYmUgcmVjb3JkZWQgaW4gdGhlIEpQRUcgZmlsZSBmb3IKLQl0aGlzIGNvbXBvbmVudC4gIEZvciB0aGUgc3RhbmRhcmQgY29sb3Igc3BhY2VzLCB3ZSByZWNvbW1lbmQgeW91Ci0JbGVhdmUgdGhlIGRlZmF1bHQgdmFsdWVzIGFsb25lLgorICAgICAgICBUaGUgb25lLWJ5dGUgaWRlbnRpZmllciBjb2RlIHRvIGJlIHJlY29yZGVkIGluIHRoZSBKUEVHIGZpbGUgZm9yCisgICAgICAgIHRoaXMgY29tcG9uZW50LiAgRm9yIHRoZSBzdGFuZGFyZCBjb2xvciBzcGFjZXMsIHdlIHJlY29tbWVuZCB5b3UKKyAgICAgICAgbGVhdmUgdGhlIGRlZmF1bHQgdmFsdWVzIGFsb25lLgogCiBpbnQgaF9zYW1wX2ZhY3RvcgogaW50IHZfc2FtcF9mYWN0b3IKLQlIb3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBzYW1wbGluZyBmYWN0b3JzIGZvciB0aGUgY29tcG9uZW50OyBtdXN0Ci0JYmUgMS4uNCBhY2NvcmRpbmcgdG8gdGhlIEpQRUcgc3RhbmRhcmQuICBOb3RlIHRoYXQgbGFyZ2VyIHNhbXBsaW5nCi0JZmFjdG9ycyBpbmRpY2F0ZSBhIGhpZ2hlci1yZXNvbHV0aW9uIGNvbXBvbmVudDsgbWFueSBwZW9wbGUgZmluZAotCXRoaXMgYmVoYXZpb3IgcXVpdGUgdW5pbnR1aXRpdmUuICBUaGUgZGVmYXVsdCB2YWx1ZXMgYXJlIDIsMiBmb3IKLQlsdW1pbmFuY2UgY29tcG9uZW50cyBhbmQgMSwxIGZvciBjaHJvbWluYW5jZSBjb21wb25lbnRzLCBleGNlcHQKLQlmb3IgZ3JheXNjYWxlIHdoZXJlIDEsMSBpcyB1c2VkLgorICAgICAgICBIb3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBzYW1wbGluZyBmYWN0b3JzIGZvciB0aGUgY29tcG9uZW50OyBtdXN0CisgICAgICAgIGJlIDEuLjQgYWNjb3JkaW5nIHRvIHRoZSBKUEVHIHN0YW5kYXJkLiAgTm90ZSB0aGF0IGxhcmdlciBzYW1wbGluZworICAgICAgICBmYWN0b3JzIGluZGljYXRlIGEgaGlnaGVyLXJlc29sdXRpb24gY29tcG9uZW50OyBtYW55IHBlb3BsZSBmaW5kCisgICAgICAgIHRoaXMgYmVoYXZpb3IgcXVpdGUgdW5pbnR1aXRpdmUuICBUaGUgZGVmYXVsdCB2YWx1ZXMgYXJlIDIsMiBmb3IKKyAgICAgICAgbHVtaW5hbmNlIGNvbXBvbmVudHMgYW5kIDEsMSBmb3IgY2hyb21pbmFuY2UgY29tcG9uZW50cywgZXhjZXB0CisgICAgICAgIGZvciBncmF5c2NhbGUgd2hlcmUgMSwxIGlzIHVzZWQuCiAKIGludCBxdWFudF90Ymxfbm8KLQlRdWFudGl6YXRpb24gdGFibGUgbnVtYmVyIGZvciBjb21wb25lbnQuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcwotCTAgZm9yIGx1bWluYW5jZSBjb21wb25lbnRzIGFuZCAxIGZvciBjaHJvbWluYW5jZSBjb21wb25lbnRzLgorICAgICAgICBRdWFudGl6YXRpb24gdGFibGUgbnVtYmVyIGZvciBjb21wb25lbnQuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcworICAgICAgICAwIGZvciBsdW1pbmFuY2UgY29tcG9uZW50cyBhbmQgMSBmb3IgY2hyb21pbmFuY2UgY29tcG9uZW50cy4KIAogaW50IGRjX3RibF9ubwogaW50IGFjX3RibF9ubwotCURDIGFuZCBBQyBlbnRyb3B5IGNvZGluZyB0YWJsZSBudW1iZXJzLiAgVGhlIGRlZmF1bHQgdmFsdWVzIGFyZQotCTAgZm9yIGx1bWluYW5jZSBjb21wb25lbnRzIGFuZCAxIGZvciBjaHJvbWluYW5jZSBjb21wb25lbnRzLgorICAgICAgICBEQyBhbmQgQUMgZW50cm9weSBjb2RpbmcgdGFibGUgbnVtYmVycy4gIFRoZSBkZWZhdWx0IHZhbHVlcyBhcmUKKyAgICAgICAgMCBmb3IgbHVtaW5hbmNlIGNvbXBvbmVudHMgYW5kIDEgZm9yIGNocm9taW5hbmNlIGNvbXBvbmVudHMuCiAKIGludCBjb21wb25lbnRfaW5kZXgKLQlNdXN0IGVxdWFsIHRoZSBjb21wb25lbnQncyBpbmRleCBpbiBjb21wX2luZm9bXS4gIChCZWdpbm5pbmcgaW4KLQlyZWxlYXNlIHY2LCB0aGUgY29tcHJlc3NvciBsaWJyYXJ5IHdpbGwgZmlsbCB0aGlzIGluIGF1dG9tYXRpY2FsbHk7Ci0JeW91IGRvbid0IGhhdmUgdG8uKQorICAgICAgICBNdXN0IGVxdWFsIHRoZSBjb21wb25lbnQncyBpbmRleCBpbiBjb21wX2luZm9bXS4gIChCZWdpbm5pbmcgaW4KKyAgICAgICAgcmVsZWFzZSB2NiwgdGhlIGNvbXByZXNzb3IgbGlicmFyeSB3aWxsIGZpbGwgdGhpcyBpbiBhdXRvbWF0aWNhbGx5OworICAgICAgICB5b3UgZG9uJ3QgaGF2ZSB0by4pCiAKIAogRGVjb21wcmVzc2lvbiBwYXJhbWV0ZXIgc2VsZWN0aW9uCkBAIC0xMDc5LDE4ICsxMDkxLDE4IEBACiBUaGUgZm9sbG93aW5nIGZpZWxkcyBpbiB0aGUgSlBFRyBvYmplY3QgYXJlIHNldCBieSBqcGVnX3JlYWRfaGVhZGVyKCkgYW5kCiBtYXkgYmUgdXNlZnVsIHRvIHRoZSBhcHBsaWNhdGlvbiBpbiBjaG9vc2luZyBkZWNvbXByZXNzaW9uIHBhcmFtZXRlcnM6CiAKLUpESU1FTlNJT04gaW1hZ2Vfd2lkdGgJCQlXaWR0aCBhbmQgaGVpZ2h0IG9mIGltYWdlCitKRElNRU5TSU9OIGltYWdlX3dpZHRoICAgICAgICAgICAgICAgICAgV2lkdGggYW5kIGhlaWdodCBvZiBpbWFnZQogSkRJTUVOU0lPTiBpbWFnZV9oZWlnaHQKLWludCBudW1fY29tcG9uZW50cwkJCU51bWJlciBvZiBjb2xvciBjb21wb25lbnRzCi1KX0NPTE9SX1NQQUNFIGpwZWdfY29sb3Jfc3BhY2UJCUNvbG9yc3BhY2Ugb2YgaW1hZ2UKLWJvb2xlYW4gc2F3X0pGSUZfbWFya2VyCQkJVFJVRSBpZiBhIEpGSUYgQVBQMCBtYXJrZXIgd2FzIHNlZW4KLSAgVUlOVDggSkZJRl9tYWpvcl92ZXJzaW9uCQlWZXJzaW9uIGluZm9ybWF0aW9uIGZyb20gSkZJRiBtYXJrZXIKK2ludCBudW1fY29tcG9uZW50cyAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIgb2YgY29sb3IgY29tcG9uZW50cworSl9DT0xPUl9TUEFDRSBqcGVnX2NvbG9yX3NwYWNlICAgICAgICAgIENvbG9yc3BhY2Ugb2YgaW1hZ2UKK2Jvb2xlYW4gc2F3X0pGSUZfbWFya2VyICAgICAgICAgICAgICAgICBUUlVFIGlmIGEgSkZJRiBBUFAwIG1hcmtlciB3YXMgc2VlbgorICBVSU5UOCBKRklGX21ham9yX3ZlcnNpb24gICAgICAgICAgICAgIFZlcnNpb24gaW5mb3JtYXRpb24gZnJvbSBKRklGIG1hcmtlcgogICBVSU5UOCBKRklGX21pbm9yX3ZlcnNpb24KLSAgVUlOVDggZGVuc2l0eV91bml0CQkJUmVzb2x1dGlvbiBkYXRhIGZyb20gSkZJRiBtYXJrZXIKKyAgVUlOVDggZGVuc2l0eV91bml0ICAgICAgICAgICAgICAgICAgICBSZXNvbHV0aW9uIGRhdGEgZnJvbSBKRklGIG1hcmtlcgogICBVSU5UMTYgWF9kZW5zaXR5CiAgIFVJTlQxNiBZX2RlbnNpdHkKLWJvb2xlYW4gc2F3X0Fkb2JlX21hcmtlcgkJVFJVRSBpZiBhbiBBZG9iZSBBUFAxNCBtYXJrZXIgd2FzIHNlZW4KLSAgVUlOVDggQWRvYmVfdHJhbnNmb3JtCQkJQ29sb3IgdHJhbnNmb3JtIGNvZGUgZnJvbSBBZG9iZSBtYXJrZXIKK2Jvb2xlYW4gc2F3X0Fkb2JlX21hcmtlciAgICAgICAgICAgICAgICBUUlVFIGlmIGFuIEFkb2JlIEFQUDE0IG1hcmtlciB3YXMgc2VlbgorICBVSU5UOCBBZG9iZV90cmFuc2Zvcm0gICAgICAgICAgICAgICAgIENvbG9yIHRyYW5zZm9ybSBjb2RlIGZyb20gQWRvYmUgbWFya2VyCiAKIFRoZSBKUEVHIGNvbG9yIHNwYWNlLCB1bmZvcnR1bmF0ZWx5LCBpcyBzb21ldGhpbmcgb2YgYSBndWVzcyBzaW5jZSB0aGUgSlBFRwogc3RhbmRhcmQgcHJvcGVyIGRvZXMgbm90IHByb3ZpZGUgYSB3YXkgdG8gcmVjb3JkIGl0LiAgSW4gcHJhY3RpY2UgbW9zdCBmaWxlcwpAQCAtMTEwMiw1MCArMTExNCw1MSBAQAogcmV0dXJuZWQgaW1hZ2UgYXJlOgogCiBKX0NPTE9SX1NQQUNFIG91dF9jb2xvcl9zcGFjZQotCU91dHB1dCBjb2xvciBzcGFjZS4gIGpwZWdfcmVhZF9oZWFkZXIoKSBzZXRzIGFuIGFwcHJvcHJpYXRlIGRlZmF1bHQKLQliYXNlZCBvbiBqcGVnX2NvbG9yX3NwYWNlOyB0eXBpY2FsbHkgaXQgd2lsbCBiZSBSR0Igb3IgZ3JheXNjYWxlLgotCVRoZSBhcHBsaWNhdGlvbiBjYW4gY2hhbmdlIHRoaXMgZmllbGQgdG8gcmVxdWVzdCBvdXRwdXQgaW4gYSBkaWZmZXJlbnQKLQljb2xvcnNwYWNlLiAgRm9yIGV4YW1wbGUsIHNldCBpdCB0byBKQ1NfR1JBWVNDQUxFIHRvIGdldCBncmF5c2NhbGUKLQlvdXRwdXQgZnJvbSBhIGNvbG9yIGZpbGUuICAoVGhpcyBpcyB1c2VmdWwgZm9yIHByZXZpZXdpbmc6IGdyYXlzY2FsZQotCW91dHB1dCBpcyBmYXN0ZXIgdGhhbiBmdWxsIGNvbG9yIHNpbmNlIHRoZSBjb2xvciBjb21wb25lbnRzIG5lZWQgbm90Ci0JYmUgcHJvY2Vzc2VkLikgIE5vdGUgdGhhdCBub3QgYWxsIHBvc3NpYmxlIGNvbG9yIHNwYWNlIHRyYW5zZm9ybXMgYXJlCi0JY3VycmVudGx5IGltcGxlbWVudGVkOyB5b3UgbWF5IG5lZWQgdG8gZXh0ZW5kIGpkY29sb3IuYyBpZiB5b3Ugd2FudCBhbgotCXVudXN1YWwgY29udmVyc2lvbi4KKyAgICAgICAgT3V0cHV0IGNvbG9yIHNwYWNlLiAganBlZ19yZWFkX2hlYWRlcigpIHNldHMgYW4gYXBwcm9wcmlhdGUgZGVmYXVsdAorICAgICAgICBiYXNlZCBvbiBqcGVnX2NvbG9yX3NwYWNlOyB0eXBpY2FsbHkgaXQgd2lsbCBiZSBSR0Igb3IgZ3JheXNjYWxlLgorICAgICAgICBUaGUgYXBwbGljYXRpb24gY2FuIGNoYW5nZSB0aGlzIGZpZWxkIHRvIHJlcXVlc3Qgb3V0cHV0IGluIGEgZGlmZmVyZW50CisgICAgICAgIGNvbG9yc3BhY2UuICBGb3IgZXhhbXBsZSwgc2V0IGl0IHRvIEpDU19HUkFZU0NBTEUgdG8gZ2V0IGdyYXlzY2FsZQorICAgICAgICBvdXRwdXQgZnJvbSBhIGNvbG9yIGZpbGUuICAoVGhpcyBpcyB1c2VmdWwgZm9yIHByZXZpZXdpbmc6IGdyYXlzY2FsZQorICAgICAgICBvdXRwdXQgaXMgZmFzdGVyIHRoYW4gZnVsbCBjb2xvciBzaW5jZSB0aGUgY29sb3IgY29tcG9uZW50cyBuZWVkIG5vdAorICAgICAgICBiZSBwcm9jZXNzZWQuKSAgTm90ZSB0aGF0IG5vdCBhbGwgcG9zc2libGUgY29sb3Igc3BhY2UgdHJhbnNmb3JtcyBhcmUKKyAgICAgICAgY3VycmVudGx5IGltcGxlbWVudGVkOyB5b3UgbWF5IG5lZWQgdG8gZXh0ZW5kIGpkY29sb3IuYyBpZiB5b3Ugd2FudCBhbgorICAgICAgICB1bnVzdWFsIGNvbnZlcnNpb24uCiAKIHVuc2lnbmVkIGludCBzY2FsZV9udW0sIHNjYWxlX2Rlbm9tCi0JU2NhbGUgdGhlIGltYWdlIGJ5IHRoZSBmcmFjdGlvbiBzY2FsZV9udW0vc2NhbGVfZGVub20uICBEZWZhdWx0IGlzCi0JMS8xLCBvciBubyBzY2FsaW5nLiAgQ3VycmVudGx5LCB0aGUgb25seSBzdXBwb3J0ZWQgc2NhbGluZyByYXRpb3MKLQlhcmUgMS8xLCAxLzIsIDEvNCwgYW5kIDEvOC4gIChUaGUgbGlicmFyeSBkZXNpZ24gYWxsb3dzIGZvciBhcmJpdHJhcnkKLQlzY2FsaW5nIHJhdGlvcyBidXQgdGhpcyBpcyBub3QgbGlrZWx5IHRvIGJlIGltcGxlbWVudGVkIGFueSB0aW1lIHNvb24uKQotCVNtYWxsZXIgc2NhbGluZyByYXRpb3MgcGVybWl0IHNpZ25pZmljYW50bHkgZmFzdGVyIGRlY29kaW5nIHNpbmNlCi0JZmV3ZXIgcGl4ZWxzIG5lZWQgYmUgcHJvY2Vzc2VkIGFuZCBhIHNpbXBsZXIgSURDVCBtZXRob2QgY2FuIGJlIHVzZWQuCisgICAgICAgIFNjYWxlIHRoZSBpbWFnZSBieSB0aGUgZnJhY3Rpb24gc2NhbGVfbnVtL3NjYWxlX2Rlbm9tLiAgRGVmYXVsdCBpcworICAgICAgICAxLzEsIG9yIG5vIHNjYWxpbmcuICBDdXJyZW50bHksIHRoZSBvbmx5IHN1cHBvcnRlZCBzY2FsaW5nIHJhdGlvcworICAgICAgICBhcmUgTS84IHdpdGggYWxsIE0gZnJvbSAxIHRvIDE2LCBvciBhbnkgcmVkdWNlZCBmcmFjdGlvbiB0aGVyZW9mIChzdWNoCisgICAgICAgIGFzIDEvMiwgMy80LCBldGMuKSAgKFRoZSBsaWJyYXJ5IGRlc2lnbiBhbGxvd3MgZm9yIGFyYml0cmFyeQorICAgICAgICBzY2FsaW5nIHJhdGlvcyBidXQgdGhpcyBpcyBub3QgbGlrZWx5IHRvIGJlIGltcGxlbWVudGVkIGFueSB0aW1lIHNvb24uKQorICAgICAgICBTbWFsbGVyIHNjYWxpbmcgcmF0aW9zIHBlcm1pdCBzaWduaWZpY2FudGx5IGZhc3RlciBkZWNvZGluZyBzaW5jZQorICAgICAgICBmZXdlciBwaXhlbHMgbmVlZCBiZSBwcm9jZXNzZWQgYW5kIGEgc2ltcGxlciBJRENUIG1ldGhvZCBjYW4gYmUgdXNlZC4KIAogYm9vbGVhbiBxdWFudGl6ZV9jb2xvcnMKLQlJZiBzZXQgVFJVRSwgY29sb3JtYXBwZWQgb3V0cHV0IHdpbGwgYmUgZGVsaXZlcmVkLiAgRGVmYXVsdCBpcyBGQUxTRSwKLQltZWFuaW5nIHRoYXQgZnVsbC1jb2xvciBvdXRwdXQgd2lsbCBiZSBkZWxpdmVyZWQuCisgICAgICAgIElmIHNldCBUUlVFLCBjb2xvcm1hcHBlZCBvdXRwdXQgd2lsbCBiZSBkZWxpdmVyZWQuICBEZWZhdWx0IGlzIEZBTFNFLAorICAgICAgICBtZWFuaW5nIHRoYXQgZnVsbC1jb2xvciBvdXRwdXQgd2lsbCBiZSBkZWxpdmVyZWQuCiAKIFRoZSBuZXh0IHRocmVlIHBhcmFtZXRlcnMgYXJlIHJlbGV2YW50IG9ubHkgaWYgcXVhbnRpemVfY29sb3JzIGlzIFRSVUUuCiAKIGludCBkZXNpcmVkX251bWJlcl9vZl9jb2xvcnMKLQlNYXhpbXVtIG51bWJlciBvZiBjb2xvcnMgdG8gdXNlIGluIGdlbmVyYXRpbmcgYSBsaWJyYXJ5LXN1cHBsaWVkIGNvbG9yCi0JbWFwICh0aGUgYWN0dWFsIG51bWJlciBvZiBjb2xvcnMgaXMgcmV0dXJuZWQgaW4gYSBkaWZmZXJlbnQgZmllbGQpLgotCURlZmF1bHQgMjU2LiAgSWdub3JlZCB3aGVuIHRoZSBhcHBsaWNhdGlvbiBzdXBwbGllcyBpdHMgb3duIGNvbG9yIG1hcC4KKyAgICAgICAgTWF4aW11bSBudW1iZXIgb2YgY29sb3JzIHRvIHVzZSBpbiBnZW5lcmF0aW5nIGEgbGlicmFyeS1zdXBwbGllZCBjb2xvcgorICAgICAgICBtYXAgKHRoZSBhY3R1YWwgbnVtYmVyIG9mIGNvbG9ycyBpcyByZXR1cm5lZCBpbiBhIGRpZmZlcmVudCBmaWVsZCkuCisgICAgICAgIERlZmF1bHQgMjU2LiAgSWdub3JlZCB3aGVuIHRoZSBhcHBsaWNhdGlvbiBzdXBwbGllcyBpdHMgb3duIGNvbG9yIG1hcC4KIAogYm9vbGVhbiB0d29fcGFzc19xdWFudGl6ZQotCUlmIFRSVUUsIGFuIGV4dHJhIHBhc3Mgb3ZlciB0aGUgaW1hZ2UgaXMgbWFkZSB0byBzZWxlY3QgYSBjdXN0b20gY29sb3IKLQltYXAgZm9yIHRoZSBpbWFnZS4gIFRoaXMgdXN1YWxseSBsb29rcyBhIGxvdCBiZXR0ZXIgdGhhbiB0aGUgb25lLXNpemUtCi0JZml0cy1hbGwgY29sb3JtYXAgdGhhdCBpcyB1c2VkIG90aGVyd2lzZS4gIERlZmF1bHQgaXMgVFJVRS4gIElnbm9yZWQKLQl3aGVuIHRoZSBhcHBsaWNhdGlvbiBzdXBwbGllcyBpdHMgb3duIGNvbG9yIG1hcC4KKyAgICAgICAgSWYgVFJVRSwgYW4gZXh0cmEgcGFzcyBvdmVyIHRoZSBpbWFnZSBpcyBtYWRlIHRvIHNlbGVjdCBhIGN1c3RvbSBjb2xvcgorICAgICAgICBtYXAgZm9yIHRoZSBpbWFnZS4gIFRoaXMgdXN1YWxseSBsb29rcyBhIGxvdCBiZXR0ZXIgdGhhbiB0aGUgb25lLXNpemUtCisgICAgICAgIGZpdHMtYWxsIGNvbG9ybWFwIHRoYXQgaXMgdXNlZCBvdGhlcndpc2UuICBEZWZhdWx0IGlzIFRSVUUuICBJZ25vcmVkCisgICAgICAgIHdoZW4gdGhlIGFwcGxpY2F0aW9uIHN1cHBsaWVzIGl0cyBvd24gY29sb3IgbWFwLgogCiBKX0RJVEhFUl9NT0RFIGRpdGhlcl9tb2RlCi0JU2VsZWN0cyBjb2xvciBkaXRoZXJpbmcgbWV0aG9kLiAgU3VwcG9ydGVkIHZhbHVlcyBhcmU6Ci0JCUpESVRIRVJfTk9ORQlubyBkaXRoZXJpbmc6IGZhc3QsIHZlcnkgbG93IHF1YWxpdHkKLQkJSkRJVEhFUl9PUkRFUkVECW9yZGVyZWQgZGl0aGVyOiBtb2RlcmF0ZSBzcGVlZCBhbmQgcXVhbGl0eQotCQlKRElUSEVSX0ZTCUZsb3lkLVN0ZWluYmVyZyBkaXRoZXI6IHNsb3csIGhpZ2ggcXVhbGl0eQotCURlZmF1bHQgaXMgSkRJVEhFUl9GUy4gIChBdCBwcmVzZW50LCBvcmRlcmVkIGRpdGhlciBpcyBpbXBsZW1lbnRlZAotCW9ubHkgaW4gdGhlIHNpbmdsZS1wYXNzLCBzdGFuZGFyZC1jb2xvcm1hcCBjYXNlLiAgSWYgeW91IGFzayBmb3IKLQlvcmRlcmVkIGRpdGhlciB3aGVuIHR3b19wYXNzX3F1YW50aXplIGlzIFRSVUUgb3Igd2hlbiB5b3Ugc3VwcGx5Ci0JYW4gZXh0ZXJuYWwgY29sb3IgbWFwLCB5b3UnbGwgZ2V0IEYtUyBkaXRoZXJpbmcuKQorICAgICAgICBTZWxlY3RzIGNvbG9yIGRpdGhlcmluZyBtZXRob2QuICBTdXBwb3J0ZWQgdmFsdWVzIGFyZToKKyAgICAgICAgICAgICAgICBKRElUSEVSX05PTkUgICAgbm8gZGl0aGVyaW5nOiBmYXN0LCB2ZXJ5IGxvdyBxdWFsaXR5CisgICAgICAgICAgICAgICAgSkRJVEhFUl9PUkRFUkVEIG9yZGVyZWQgZGl0aGVyOiBtb2RlcmF0ZSBzcGVlZCBhbmQgcXVhbGl0eQorICAgICAgICAgICAgICAgIEpESVRIRVJfRlMgICAgICBGbG95ZC1TdGVpbmJlcmcgZGl0aGVyOiBzbG93LCBoaWdoIHF1YWxpdHkKKyAgICAgICAgRGVmYXVsdCBpcyBKRElUSEVSX0ZTLiAgKEF0IHByZXNlbnQsIG9yZGVyZWQgZGl0aGVyIGlzIGltcGxlbWVudGVkCisgICAgICAgIG9ubHkgaW4gdGhlIHNpbmdsZS1wYXNzLCBzdGFuZGFyZC1jb2xvcm1hcCBjYXNlLiAgSWYgeW91IGFzayBmb3IKKyAgICAgICAgb3JkZXJlZCBkaXRoZXIgd2hlbiB0d29fcGFzc19xdWFudGl6ZSBpcyBUUlVFIG9yIHdoZW4geW91IHN1cHBseQorICAgICAgICBhbiBleHRlcm5hbCBjb2xvciBtYXAsIHlvdSdsbCBnZXQgRi1TIGRpdGhlcmluZy4pCiAKIFdoZW4gcXVhbnRpemVfY29sb3JzIGlzIFRSVUUsIHRoZSB0YXJnZXQgY29sb3IgbWFwIGlzIGRlc2NyaWJlZCBieSB0aGUgbmV4dAogdHdvIGZpZWxkcy4gIGNvbG9ybWFwIGlzIHNldCB0byBOVUxMIGJ5IGpwZWdfcmVhZF9oZWFkZXIoKS4gIFRoZSBhcHBsaWNhdGlvbgpAQCAtMTE1NiwzOSArMTE2OSw2MyBAQAogb25seSBhY2NlcHRlZCBmb3IgMy1jb21wb25lbnQgb3V0cHV0IGNvbG9yIHNwYWNlcy5dCiAKIEpTQU1QQVJSQVkgY29sb3JtYXAKLQlUaGUgY29sb3IgbWFwLCByZXByZXNlbnRlZCBhcyBhIDItRCBwaXhlbCBhcnJheSBvZiBvdXRfY29sb3JfY29tcG9uZW50cwotCXJvd3MgYW5kIGFjdHVhbF9udW1iZXJfb2ZfY29sb3JzIGNvbHVtbnMuICBJZ25vcmVkIGlmIG5vdCBxdWFudGl6aW5nLgotCUNBVVRJT046IGlmIHRoZSBKUEVHIGxpYnJhcnkgY3JlYXRlcyBpdHMgb3duIGNvbG9ybWFwLCB0aGUgc3RvcmFnZQotCXBvaW50ZWQgdG8gYnkgdGhpcyBmaWVsZCBpcyByZWxlYXNlZCBieSBqcGVnX2ZpbmlzaF9kZWNvbXByZXNzKCkuCi0JQ29weSB0aGUgY29sb3JtYXAgc29tZXdoZXJlIGVsc2UgZmlyc3QsIGlmIHlvdSB3YW50IHRvIHNhdmUgaXQuCisgICAgICAgIFRoZSBjb2xvciBtYXAsIHJlcHJlc2VudGVkIGFzIGEgMi1EIHBpeGVsIGFycmF5IG9mIG91dF9jb2xvcl9jb21wb25lbnRzCisgICAgICAgIHJvd3MgYW5kIGFjdHVhbF9udW1iZXJfb2ZfY29sb3JzIGNvbHVtbnMuICBJZ25vcmVkIGlmIG5vdCBxdWFudGl6aW5nLgorICAgICAgICBDQVVUSU9OOiBpZiB0aGUgSlBFRyBsaWJyYXJ5IGNyZWF0ZXMgaXRzIG93biBjb2xvcm1hcCwgdGhlIHN0b3JhZ2UKKyAgICAgICAgcG9pbnRlZCB0byBieSB0aGlzIGZpZWxkIGlzIHJlbGVhc2VkIGJ5IGpwZWdfZmluaXNoX2RlY29tcHJlc3MoKS4KKyAgICAgICAgQ29weSB0aGUgY29sb3JtYXAgc29tZXdoZXJlIGVsc2UgZmlyc3QsIGlmIHlvdSB3YW50IHRvIHNhdmUgaXQuCiAKIGludCBhY3R1YWxfbnVtYmVyX29mX2NvbG9ycwotCVRoZSBudW1iZXIgb2YgY29sb3JzIGluIHRoZSBjb2xvciBtYXAuCisgICAgICAgIFRoZSBudW1iZXIgb2YgY29sb3JzIGluIHRoZSBjb2xvciBtYXAuCiAKIEFkZGl0aW9uYWwgZGVjb21wcmVzc2lvbiBwYXJhbWV0ZXJzIHRoYXQgdGhlIGFwcGxpY2F0aW9uIG1heSBzZXQgaW5jbHVkZToKIAogSl9EQ1RfTUVUSE9EIGRjdF9tZXRob2QKLQlTZWxlY3RzIHRoZSBhbGdvcml0aG0gdXNlZCBmb3IgdGhlIERDVCBzdGVwLiAgQ2hvaWNlcyBhcmUgdGhlIHNhbWUKLQlhcyBkZXNjcmliZWQgYWJvdmUgZm9yIGNvbXByZXNzaW9uLgorICAgICAgICBTZWxlY3RzIHRoZSBhbGdvcml0aG0gdXNlZCBmb3IgdGhlIERDVCBzdGVwLiAgQ2hvaWNlcyBhcmU6CisgICAgICAgICAgICAgICAgSkRDVF9JU0xPVzogc2xvdyBidXQgYWNjdXJhdGUgaW50ZWdlciBhbGdvcml0aG0KKyAgICAgICAgICAgICAgICBKRENUX0lGQVNUOiBmYXN0ZXIsIGxlc3MgYWNjdXJhdGUgaW50ZWdlciBtZXRob2QKKyAgICAgICAgICAgICAgICBKRENUX0ZMT0FUOiBmbG9hdGluZy1wb2ludCBtZXRob2QKKyAgICAgICAgICAgICAgICBKRENUX0RFRkFVTFQ6IGRlZmF1bHQgbWV0aG9kIChub3JtYWxseSBKRENUX0lTTE9XKQorICAgICAgICAgICAgICAgIEpEQ1RfRkFTVEVTVDogZmFzdGVzdCBtZXRob2QgKG5vcm1hbGx5IEpEQ1RfSUZBU1QpCisgICAgICAgIEluIGxpYmpwZWctdHVyYm8sIEpEQ1RfSUZBU1QgaXMgZ2VuZXJhbGx5IGFib3V0IDUtMTUlIGZhc3RlciB0aGFuCisgICAgICAgIEpEQ1RfSVNMT1cgd2hlbiB1c2luZyB0aGUgeDg2L3g4Ni02NCBTSU1EIGV4dGVuc2lvbnMgKHJlc3VsdHMgbWF5IHZhcnkKKyAgICAgICAgd2l0aCBvdGhlciBTSU1EIGltcGxlbWVudGF0aW9ucywgb3Igd2hlbiB1c2luZyBsaWJqcGVnLXR1cmJvIHdpdGhvdXQKKyAgICAgICAgU0lNRCBleHRlbnNpb25zLikgIElmIHRoZSBKUEVHIGltYWdlIHdhcyBjb21wcmVzc2VkIHVzaW5nIGEgcXVhbGl0eQorICAgICAgICBsZXZlbCBvZiA4NSBvciBiZWxvdywgdGhlbiB0aGVyZSBzaG91bGQgYmUgbGl0dGxlIG9yIG5vIHBlcmNlcHRpYmxlCisgICAgICAgIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdHdvIGFsZ29yaXRobXMuICBXaGVuIGRlY29tcHJlc3NpbmcgaW1hZ2VzIHRoYXQKKyAgICAgICAgd2VyZSBjb21wcmVzc2VkIHVzaW5nIHF1YWxpdHkgbGV2ZWxzIGFib3ZlIDg1LCBob3dldmVyLCB0aGUgZGlmZmVyZW5jZQorICAgICAgICBiZXR3ZWVuIEpEQ1RfSUZBU1QgYW5kIEpEQ1RfSVNMT1cgYmVjb21lcyBtb3JlIHByb25vdW5jZWQuICBXaXRoIGltYWdlcworICAgICAgICBjb21wcmVzc2VkIHVzaW5nIHF1YWxpdHk9OTcsIGZvciBpbnN0YW5jZSwgSkRDVF9JRkFTVCBpbmN1cnMgZ2VuZXJhbGx5CisgICAgICAgIGFib3V0IGEgNC02IGRCIGxvc3MgKGluIFBTTlIpIHJlbGF0aXZlIHRvIEpEQ1RfSVNMT1csIGJ1dCB0aGlzIGNhbiBiZQorICAgICAgICBsYXJnZXIgZm9yIHNvbWUgaW1hZ2VzLiAgSWYgeW91IGNhbiBhdm9pZCBpdCwgZG8gbm90IHVzZSBKRENUX0lGQVNUCisgICAgICAgIHdoZW4gZGVjb21wcmVzc2luZyBpbWFnZXMgdGhhdCB3ZXJlIGNvbXByZXNzZWQgdXNpbmcgcXVhbGl0eSBsZXZlbHMKKyAgICAgICAgYWJvdmUgOTcuICBUaGUgYWxnb3JpdGhtIG9mdGVuIGRlZ2VuZXJhdGVzIGZvciBzdWNoIGltYWdlcyBhbmQgY2FuCisgICAgICAgIGFjdHVhbGx5IHByb2R1Y2UgYSBtb3JlIGxvc3N5IG91dHB1dCBpbWFnZSB0aGFuIGlmIHRoZSBKUEVHIGltYWdlIGhhZAorICAgICAgICBiZWVuIGNvbXByZXNzZWQgdXNpbmcgbG93ZXIgcXVhbGl0eSBsZXZlbHMuICBKRENUX0ZMT0FUIGlzIG1haW5seSBhCisgICAgICAgIGxlZ2FjeSBmZWF0dXJlLiAgSXQgZG9lcyBub3QgcHJvZHVjZSBzaWduaWZpY2FudGx5IG1vcmUgYWNjdXJhdGUKKyAgICAgICAgcmVzdWx0cyB0aGFuIHRoZSBJU0xPVyBtZXRob2QsIGFuZCBpdCBpcyBtdWNoIHNsb3dlci4gIFRoZSBGTE9BVCBtZXRob2QKKyAgICAgICAgbWF5IGFsc28gZ2l2ZSBkaWZmZXJlbnQgcmVzdWx0cyBvbiBkaWZmZXJlbnQgbWFjaGluZXMgZHVlIHRvIHZhcnlpbmcKKyAgICAgICAgcm91bmRvZmYgYmVoYXZpb3IsIHdoZXJlYXMgdGhlIGludGVnZXIgbWV0aG9kcyBzaG91bGQgZ2l2ZSB0aGUgc2FtZQorICAgICAgICByZXN1bHRzIG9uIGFsbCBtYWNoaW5lcy4KIAogYm9vbGVhbiBkb19mYW5jeV91cHNhbXBsaW5nCi0JSWYgVFJVRSwgZG8gY2FyZWZ1bCB1cHNhbXBsaW5nIG9mIGNocm9tYSBjb21wb25lbnRzLiAgSWYgRkFMU0UsCi0JYSBmYXN0ZXIgYnV0IHNsb3BwaWVyIG1ldGhvZCBpcyB1c2VkLiAgRGVmYXVsdCBpcyBUUlVFLiAgVGhlIHZpc3VhbAotCWltcGFjdCBvZiB0aGUgc2xvcHBpZXIgbWV0aG9kIGlzIG9mdGVuIHZlcnkgc21hbGwuCisgICAgICAgIElmIFRSVUUsIGRvIGNhcmVmdWwgdXBzYW1wbGluZyBvZiBjaHJvbWEgY29tcG9uZW50cy4gIElmIEZBTFNFLAorICAgICAgICBhIGZhc3RlciBidXQgc2xvcHBpZXIgbWV0aG9kIGlzIHVzZWQuICBEZWZhdWx0IGlzIFRSVUUuICBUaGUgdmlzdWFsCisgICAgICAgIGltcGFjdCBvZiB0aGUgc2xvcHBpZXIgbWV0aG9kIGlzIG9mdGVuIHZlcnkgc21hbGwuCiAKIGJvb2xlYW4gZG9fYmxvY2tfc21vb3RoaW5nCi0JSWYgVFJVRSwgaW50ZXJibG9jayBzbW9vdGhpbmcgaXMgYXBwbGllZCBpbiBlYXJseSBzdGFnZXMgb2YgZGVjb2RpbmcKLQlwcm9ncmVzc2l2ZSBKUEVHIGZpbGVzOyBpZiBGQUxTRSwgbm90LiAgRGVmYXVsdCBpcyBUUlVFLiAgRWFybHkKLQlwcm9ncmVzc2lvbiBzdGFnZXMgbG9vayAiZnV6enkiIHdpdGggc21vb3RoaW5nLCAiYmxvY2t5IiB3aXRob3V0LgotCUluIGFueSBjYXNlLCBibG9jayBzbW9vdGhpbmcgY2Vhc2VzIHRvIGJlIGFwcGxpZWQgYWZ0ZXIgdGhlIGZpcnN0IGZldwotCUFDIGNvZWZmaWNpZW50cyBhcmUga25vd24gdG8gZnVsbCBhY2N1cmFjeSwgc28gaXQgaXMgcmVsZXZhbnQgb25seQotCXdoZW4gdXNpbmcgYnVmZmVyZWQtaW1hZ2UgbW9kZSBmb3IgcHJvZ3Jlc3NpdmUgaW1hZ2VzLgorICAgICAgICBJZiBUUlVFLCBpbnRlcmJsb2NrIHNtb290aGluZyBpcyBhcHBsaWVkIGluIGVhcmx5IHN0YWdlcyBvZiBkZWNvZGluZworICAgICAgICBwcm9ncmVzc2l2ZSBKUEVHIGZpbGVzOyBpZiBGQUxTRSwgbm90LiAgRGVmYXVsdCBpcyBUUlVFLiAgRWFybHkKKyAgICAgICAgcHJvZ3Jlc3Npb24gc3RhZ2VzIGxvb2sgImZ1enp5IiB3aXRoIHNtb290aGluZywgImJsb2NreSIgd2l0aG91dC4KKyAgICAgICAgSW4gYW55IGNhc2UsIGJsb2NrIHNtb290aGluZyBjZWFzZXMgdG8gYmUgYXBwbGllZCBhZnRlciB0aGUgZmlyc3QgZmV3CisgICAgICAgIEFDIGNvZWZmaWNpZW50cyBhcmUga25vd24gdG8gZnVsbCBhY2N1cmFjeSwgc28gaXQgaXMgcmVsZXZhbnQgb25seQorICAgICAgICB3aGVuIHVzaW5nIGJ1ZmZlcmVkLWltYWdlIG1vZGUgZm9yIHByb2dyZXNzaXZlIGltYWdlcy4KIAogYm9vbGVhbiBlbmFibGVfMXBhc3NfcXVhbnQKIGJvb2xlYW4gZW5hYmxlX2V4dGVybmFsX3F1YW50CiBib29sZWFuIGVuYWJsZV8ycGFzc19xdWFudAotCVRoZXNlIGFyZSBzaWduaWZpY2FudCBvbmx5IGluIGJ1ZmZlcmVkLWltYWdlIG1vZGUsIHdoaWNoIGlzCi0JZGVzY3JpYmVkIGluIGl0cyBvd24gc2VjdGlvbiBiZWxvdy4KKyAgICAgICAgVGhlc2UgYXJlIHNpZ25pZmljYW50IG9ubHkgaW4gYnVmZmVyZWQtaW1hZ2UgbW9kZSwgd2hpY2ggaXMKKyAgICAgICAgZGVzY3JpYmVkIGluIGl0cyBvd24gc2VjdGlvbiBiZWxvdy4KIAogCiBUaGUgb3V0cHV0IGltYWdlIGRpbWVuc2lvbnMgYXJlIGdpdmVuIGJ5IHRoZSBmb2xsb3dpbmcgZmllbGRzLiAgVGhlc2UgYXJlCkBAIC0xMjAwLDExICsxMjM3LDExIEBACiBKUEVHIGxpYnJhcnkncyBtZW1vcnkgbWFuYWdlciB0byBhbGxvY2F0ZSBvdXRwdXQgYnVmZmVyIHNwYWNlLCBiZWNhdXNlIHlvdQogYXJlIHN1cHBvc2VkIHRvIHJlcXVlc3Qgc3VjaCBidWZmZXJzICpiZWZvcmUqIGpwZWdfc3RhcnRfZGVjb21wcmVzcygpLgogCi1KRElNRU5TSU9OIG91dHB1dF93aWR0aAkJQWN0dWFsIGRpbWVuc2lvbnMgb2Ygb3V0cHV0IGltYWdlLgorSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGggICAgICAgICBBY3R1YWwgZGltZW5zaW9ucyBvZiBvdXRwdXQgaW1hZ2UuCiBKRElNRU5TSU9OIG91dHB1dF9oZWlnaHQKLWludCBvdXRfY29sb3JfY29tcG9uZW50cwlOdW1iZXIgb2YgY29sb3IgY29tcG9uZW50cyBpbiBvdXRfY29sb3Jfc3BhY2UuCi1pbnQgb3V0cHV0X2NvbXBvbmVudHMJCU51bWJlciBvZiBjb2xvciBjb21wb25lbnRzIHJldHVybmVkLgotaW50IHJlY19vdXRidWZfaGVpZ2h0CQlSZWNvbW1lbmRlZCBoZWlnaHQgb2Ygc2NhbmxpbmUgYnVmZmVyLgoraW50IG91dF9jb2xvcl9jb21wb25lbnRzICAgICAgICBOdW1iZXIgb2YgY29sb3IgY29tcG9uZW50cyBpbiBvdXRfY29sb3Jfc3BhY2UuCitpbnQgb3V0cHV0X2NvbXBvbmVudHMgICAgICAgICAgIE51bWJlciBvZiBjb2xvciBjb21wb25lbnRzIHJldHVybmVkLgoraW50IHJlY19vdXRidWZfaGVpZ2h0ICAgICAgICAgICBSZWNvbW1lbmRlZCBoZWlnaHQgb2Ygc2NhbmxpbmUgYnVmZmVyLgogCiBXaGVuIHF1YW50aXppbmcgY29sb3JzLCBvdXRwdXRfY29tcG9uZW50cyBpcyAxLCBpbmRpY2F0aW5nIGEgc2luZ2xlIGNvbG9yIG1hcAogaW5kZXggcGVyIHBpeGVsLiAgT3RoZXJ3aXNlIGl0IGVxdWFscyBvdXRfY29sb3JfY29tcG9uZW50cy4gIFRoZSBvdXRwdXQgYXJyYXlzCkBAIC0xMjQ0LDEwICsxMjgxLDEwIEBACiBzcGFjZSBkZXBlbmRpbmcgb24gaW5fY29sb3Jfc3BhY2UsIGJ1dCB5b3UgY2FuIG92ZXJyaWRlIHRoaXMgYnkgY2FsbGluZwoganBlZ19zZXRfY29sb3JzcGFjZSgpLiAgT2YgY291cnNlIHlvdSBtdXN0IHNlbGVjdCBhIHN1cHBvcnRlZCB0cmFuc2Zvcm1hdGlvbi4KIGpjY29sb3IuYyBjdXJyZW50bHkgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyB0cmFuc2Zvcm1hdGlvbnM6Ci0JUkdCID0+IFlDYkNyCi0JUkdCID0+IEdSQVlTQ0FMRQotCVlDYkNyID0+IEdSQVlTQ0FMRQotCUNNWUsgPT4gWUNDSworICAgICAgICBSR0IgPT4gWUNiQ3IKKyAgICAgICAgUkdCID0+IEdSQVlTQ0FMRQorICAgICAgICBZQ2JDciA9PiBHUkFZU0NBTEUKKyAgICAgICAgQ01ZSyA9PiBZQ0NLCiBwbHVzIHRoZSBudWxsIHRyYW5zZm9ybXM6IEdSQVlTQ0FMRSA9PiBHUkFZU0NBTEUsIFJHQiA9PiBSR0IsCiBZQ2JDciA9PiBZQ2JDciwgQ01ZSyA9PiBDTVlLLCBZQ0NLID0+IFlDQ0ssIGFuZCBVTktOT1dOID0+IFVOS05PV04uCiAKQEAgLTEyNzcsMTAgKzEzMTQsMTEgQEAKIHNlbGVjdHMgYSBkZWZhdWx0IG91dHB1dCBjb2xvciBzcGFjZSBiYXNlZCBvbiAoaXRzIGd1ZXNzIG9mKSBqcGVnX2NvbG9yX3NwYWNlOwogc2V0IG91dF9jb2xvcl9zcGFjZSB0byBvdmVycmlkZSB0aGlzLiAgQWdhaW4sIHlvdSBtdXN0IHNlbGVjdCBhIHN1cHBvcnRlZAogdHJhbnNmb3JtYXRpb24uICBqZGNvbG9yLmMgY3VycmVudGx5IHN1cHBvcnRzCi0JWUNiQ3IgPT4gR1JBWVNDQUxFCi0JWUNiQ3IgPT4gUkdCCi0JR1JBWVNDQUxFID0+IFJHQgotCVlDQ0sgPT4gQ01ZSworICAgICAgICBZQ2JDciA9PiBSR0IKKyAgICAgICAgWUNiQ3IgPT4gR1JBWVNDQUxFCisgICAgICAgIFJHQiA9PiBHUkFZU0NBTEUKKyAgICAgICAgR1JBWVNDQUxFID0+IFJHQgorICAgICAgICBZQ0NLID0+IENNWUsKIGFzIHdlbGwgYXMgdGhlIG51bGwgdHJhbnNmb3Jtcy4gIChTaW5jZSBHUkFZU0NBTEU9PlJHQiBpcyBwcm92aWRlZCwgYW4KIGFwcGxpY2F0aW9uIGNhbiBmb3JjZSBncmF5c2NhbGUgSlBFR3MgdG8gbG9vayBsaWtlIGNvbG9yIEpQRUdzIGlmIGl0IG9ubHkKIHdhbnRzIHRvIGhhbmRsZSBvbmUgY2FzZS4pCkBAIC0xMzUwLDMxICsxMzg4LDMxIEBACiBUaGUgaW5kaXZpZHVhbCBtZXRob2RzIHRoYXQgeW91IG1pZ2h0IHdpc2ggdG8gb3ZlcnJpZGUgYXJlOgogCiBlcnJvcl9leGl0IChqX2NvbW1vbl9wdHIgY2luZm8pCi0JUmVjZWl2ZXMgY29udHJvbCBmb3IgYSBmYXRhbCBlcnJvci4gIEluZm9ybWF0aW9uIHN1ZmZpY2llbnQgdG8KLQlnZW5lcmF0ZSB0aGUgZXJyb3IgbWVzc2FnZSBoYXMgYmVlbiBzdG9yZWQgaW4gY2luZm8tPmVycjsgY2FsbAotCW91dHB1dF9tZXNzYWdlIHRvIGRpc3BsYXkgaXQuICBDb250cm9sIG11c3QgTk9UIHJldHVybiB0byB0aGUgY2FsbGVyOwotCWdlbmVyYWxseSB0aGlzIHJvdXRpbmUgd2lsbCBleGl0KCkgb3IgbG9uZ2ptcCgpIHNvbWV3aGVyZS4KLQlUeXBpY2FsbHkgeW91IHdvdWxkIG92ZXJyaWRlIHRoaXMgcm91dGluZSB0byBnZXQgcmlkIG9mIHRoZSBleGl0KCkKLQlkZWZhdWx0IGJlaGF2aW9yLiAgTm90ZSB0aGF0IGlmIHlvdSBjb250aW51ZSBwcm9jZXNzaW5nLCB5b3Ugc2hvdWxkCi0JY2xlYW4gdXAgdGhlIEpQRUcgb2JqZWN0IHdpdGgganBlZ19hYm9ydCgpIG9yIGpwZWdfZGVzdHJveSgpLgorICAgICAgICBSZWNlaXZlcyBjb250cm9sIGZvciBhIGZhdGFsIGVycm9yLiAgSW5mb3JtYXRpb24gc3VmZmljaWVudCB0bworICAgICAgICBnZW5lcmF0ZSB0aGUgZXJyb3IgbWVzc2FnZSBoYXMgYmVlbiBzdG9yZWQgaW4gY2luZm8tPmVycjsgY2FsbAorICAgICAgICBvdXRwdXRfbWVzc2FnZSB0byBkaXNwbGF5IGl0LiAgQ29udHJvbCBtdXN0IE5PVCByZXR1cm4gdG8gdGhlIGNhbGxlcjsKKyAgICAgICAgZ2VuZXJhbGx5IHRoaXMgcm91dGluZSB3aWxsIGV4aXQoKSBvciBsb25nam1wKCkgc29tZXdoZXJlLgorICAgICAgICBUeXBpY2FsbHkgeW91IHdvdWxkIG92ZXJyaWRlIHRoaXMgcm91dGluZSB0byBnZXQgcmlkIG9mIHRoZSBleGl0KCkKKyAgICAgICAgZGVmYXVsdCBiZWhhdmlvci4gIE5vdGUgdGhhdCBpZiB5b3UgY29udGludWUgcHJvY2Vzc2luZywgeW91IHNob3VsZAorICAgICAgICBjbGVhbiB1cCB0aGUgSlBFRyBvYmplY3Qgd2l0aCBqcGVnX2Fib3J0KCkgb3IganBlZ19kZXN0cm95KCkuCiAKIG91dHB1dF9tZXNzYWdlIChqX2NvbW1vbl9wdHIgY2luZm8pCi0JQWN0dWFsIG91dHB1dCBvZiBhbnkgSlBFRyBtZXNzYWdlLiAgT3ZlcnJpZGUgdGhpcyB0byBzZW5kIG1lc3NhZ2VzCi0Jc29tZXdoZXJlIG90aGVyIHRoYW4gc3RkZXJyLiAgTm90ZSB0aGF0IHRoaXMgbWV0aG9kIGRvZXMgbm90IGtub3cKLQlob3cgdG8gZ2VuZXJhdGUgYSBtZXNzYWdlLCBvbmx5IHdoZXJlIHRvIHNlbmQgaXQuCisgICAgICAgIEFjdHVhbCBvdXRwdXQgb2YgYW55IEpQRUcgbWVzc2FnZS4gIE92ZXJyaWRlIHRoaXMgdG8gc2VuZCBtZXNzYWdlcworICAgICAgICBzb21ld2hlcmUgb3RoZXIgdGhhbiBzdGRlcnIuICBOb3RlIHRoYXQgdGhpcyBtZXRob2QgZG9lcyBub3Qga25vdworICAgICAgICBob3cgdG8gZ2VuZXJhdGUgYSBtZXNzYWdlLCBvbmx5IHdoZXJlIHRvIHNlbmQgaXQuCiAKIGZvcm1hdF9tZXNzYWdlIChqX2NvbW1vbl9wdHIgY2luZm8sIGNoYXIgKiBidWZmZXIpCi0JQ29uc3RydWN0cyBhIHJlYWRhYmxlIGVycm9yIG1lc3NhZ2Ugc3RyaW5nIGJhc2VkIG9uIHRoZSBlcnJvciBpbmZvCi0Jc3RvcmVkIGluIGNpbmZvLT5lcnIuICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgb3V0cHV0X21lc3NhZ2UuICBGZXcKLQlhcHBsaWNhdGlvbnMgc2hvdWxkIG5lZWQgdG8gb3ZlcnJpZGUgdGhpcyBtZXRob2QuICBPbmUgcG9zc2libGUKLQlyZWFzb24gZm9yIGRvaW5nIHNvIGlzIHRvIGltcGxlbWVudCBkeW5hbWljIHN3aXRjaGluZyBvZiBlcnJvciBtZXNzYWdlCi0JbGFuZ3VhZ2UuCisgICAgICAgIENvbnN0cnVjdHMgYSByZWFkYWJsZSBlcnJvciBtZXNzYWdlIHN0cmluZyBiYXNlZCBvbiB0aGUgZXJyb3IgaW5mbworICAgICAgICBzdG9yZWQgaW4gY2luZm8tPmVyci4gIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSBvdXRwdXRfbWVzc2FnZS4gIEZldworICAgICAgICBhcHBsaWNhdGlvbnMgc2hvdWxkIG5lZWQgdG8gb3ZlcnJpZGUgdGhpcyBtZXRob2QuICBPbmUgcG9zc2libGUKKyAgICAgICAgcmVhc29uIGZvciBkb2luZyBzbyBpcyB0byBpbXBsZW1lbnQgZHluYW1pYyBzd2l0Y2hpbmcgb2YgZXJyb3IgbWVzc2FnZQorICAgICAgICBsYW5ndWFnZS4KIAogZW1pdF9tZXNzYWdlIChqX2NvbW1vbl9wdHIgY2luZm8sIGludCBtc2dfbGV2ZWwpCi0JRGVjaWRlIHdoZXRoZXIgb3Igbm90IHRvIGVtaXQgYSB3YXJuaW5nIG9yIHRyYWNlIG1lc3NhZ2U7IGlmIHNvLAotCWNhbGxzIG91dHB1dF9tZXNzYWdlLiAgVGhlIG1haW4gcmVhc29uIGZvciBvdmVycmlkaW5nIHRoaXMgbWV0aG9kCi0Jd291bGQgYmUgdG8gYWJvcnQgb24gd2FybmluZ3MuICBtc2dfbGV2ZWwgaXMgLTEgZm9yIHdhcm5pbmdzLAotCTAgYW5kIHVwIGZvciB0cmFjZSBtZXNzYWdlcy4KKyAgICAgICAgRGVjaWRlIHdoZXRoZXIgb3Igbm90IHRvIGVtaXQgYSB3YXJuaW5nIG9yIHRyYWNlIG1lc3NhZ2U7IGlmIHNvLAorICAgICAgICBjYWxscyBvdXRwdXRfbWVzc2FnZS4gIFRoZSBtYWluIHJlYXNvbiBmb3Igb3ZlcnJpZGluZyB0aGlzIG1ldGhvZAorICAgICAgICB3b3VsZCBiZSB0byBhYm9ydCBvbiB3YXJuaW5ncy4gIG1zZ19sZXZlbCBpcyAtMSBmb3Igd2FybmluZ3MsCisgICAgICAgIDAgYW5kIHVwIGZvciB0cmFjZSBtZXNzYWdlcy4KIAogT25seSBlcnJvcl9leGl0KCkgYW5kIGVtaXRfbWVzc2FnZSgpIGFyZSBjYWxsZWQgZnJvbSB0aGUgcmVzdCBvZiB0aGUgSlBFRwogbGlicmFyeTsgdGhlIG90aGVyIHR3byBhcmUgaW50ZXJuYWwgdG8gdGhlIGVycm9yIGhhbmRsZXIuCkBAIC0xMzk3LDkgKzE0MzUsOSBAQAogYWRkb24gbWVzc2FnZXMgKHRoZSBhZGRvbiBtZXNzYWdlcyBhcmUgZGVmaW5lZCBpbiBjZGVycm9yLmgpLgogCiBBY3R1YWwgaW52b2NhdGlvbiBvZiB0aGUgZXJyb3IgaGFuZGxlciBpcyBkb25lIHZpYSBtYWNyb3MgZGVmaW5lZCBpbiBqZXJyb3IuaDoKLQlFUlJFWElUbiguLi4pCWZvciBmYXRhbCBlcnJvcnMKLQlXQVJOTVNuKC4uLikJZm9yIGNvcnJ1cHQtZGF0YSB3YXJuaW5ncwotCVRSQUNFTVNuKC4uLikJZm9yIHRyYWNlIGFuZCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzLgorICAgICAgICBFUlJFWElUbiguLi4pICAgZm9yIGZhdGFsIGVycm9ycworICAgICAgICBXQVJOTVNuKC4uLikgICAgZm9yIGNvcnJ1cHQtZGF0YSB3YXJuaW5ncworICAgICAgICBUUkFDRU1TbiguLi4pICAgZm9yIHRyYWNlIGFuZCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzLgogVGhlc2UgbWFjcm9zIHN0b3JlIHRoZSBtZXNzYWdlIGNvZGUgYW5kIGFueSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgaW50byB0aGUKIGVycm9yIGhhbmRsZXIgc3RydWN0LCB0aGVuIGludm9rZSB0aGUgZXJyb3JfZXhpdCgpIG9yIGVtaXRfbWVzc2FnZSgpIG1ldGhvZC4KIFRoZSB2YXJpYW50cyBvZiBlYWNoIG1hY3JvIGFyZSBmb3IgdmFyeWluZyBudW1iZXJzIG9mIGFkZGl0aW9uYWwgcGFyYW1ldGVycy4KQEAgLTE0NDAsOCArMTQ3OCw4IEBACiBBIGRhdGEgZGVzdGluYXRpb24gbWFuYWdlciBzdHJ1Y3QgY29udGFpbnMgYSBwb2ludGVyIGFuZCBjb3VudCBkZWZpbmluZyB0aGUKIG5leHQgYnl0ZSB0byB3cml0ZSBpbiB0aGUgd29yayBidWZmZXIgYW5kIHRoZSByZW1haW5pbmcgZnJlZSBzcGFjZToKIAotCUpPQ1RFVCAqIG5leHRfb3V0cHV0X2J5dGU7ICAvKiA9PiBuZXh0IGJ5dGUgdG8gd3JpdGUgaW4gYnVmZmVyICovCi0Jc2l6ZV90IGZyZWVfaW5fYnVmZmVyOyAgICAgIC8qICMgb2YgYnl0ZSBzcGFjZXMgcmVtYWluaW5nIGluIGJ1ZmZlciAqLworICAgICAgICBKT0NURVQgKiBuZXh0X291dHB1dF9ieXRlOyAgLyogPT4gbmV4dCBieXRlIHRvIHdyaXRlIGluIGJ1ZmZlciAqLworICAgICAgICBzaXplX3QgZnJlZV9pbl9idWZmZXI7ICAgICAgLyogIyBvZiBieXRlIHNwYWNlcyByZW1haW5pbmcgaW4gYnVmZmVyICovCiAKIFRoZSBsaWJyYXJ5IGluY3JlbWVudHMgdGhlIHBvaW50ZXIgYW5kIGRlY3JlbWVudHMgdGhlIGNvdW50IHVudGlsIHRoZSBidWZmZXIKIGlzIGZpbGxlZC4gIFRoZSBtYW5hZ2VyJ3MgZW1wdHlfb3V0cHV0X2J1ZmZlciBtZXRob2QgbXVzdCByZXNldCB0aGUgcG9pbnRlcgpAQCAtMTQ1MSwyNyArMTQ4OSwyNyBAQAogQSBkYXRhIGRlc3RpbmF0aW9uIG1hbmFnZXIgcHJvdmlkZXMgdGhyZWUgbWV0aG9kczoKIAogaW5pdF9kZXN0aW5hdGlvbiAoal9jb21wcmVzc19wdHIgY2luZm8pCi0JSW5pdGlhbGl6ZSBkZXN0aW5hdGlvbi4gIFRoaXMgaXMgY2FsbGVkIGJ5IGpwZWdfc3RhcnRfY29tcHJlc3MoKQotCWJlZm9yZSBhbnkgZGF0YSBpcyBhY3R1YWxseSB3cml0dGVuLiAgSXQgbXVzdCBpbml0aWFsaXplCi0JbmV4dF9vdXRwdXRfYnl0ZSBhbmQgZnJlZV9pbl9idWZmZXIuICBmcmVlX2luX2J1ZmZlciBtdXN0IGJlCi0JaW5pdGlhbGl6ZWQgdG8gYSBwb3NpdGl2ZSB2YWx1ZS4KKyAgICAgICAgSW5pdGlhbGl6ZSBkZXN0aW5hdGlvbi4gIFRoaXMgaXMgY2FsbGVkIGJ5IGpwZWdfc3RhcnRfY29tcHJlc3MoKQorICAgICAgICBiZWZvcmUgYW55IGRhdGEgaXMgYWN0dWFsbHkgd3JpdHRlbi4gIEl0IG11c3QgaW5pdGlhbGl6ZQorICAgICAgICBuZXh0X291dHB1dF9ieXRlIGFuZCBmcmVlX2luX2J1ZmZlci4gIGZyZWVfaW5fYnVmZmVyIG11c3QgYmUKKyAgICAgICAgaW5pdGlhbGl6ZWQgdG8gYSBwb3NpdGl2ZSB2YWx1ZS4KIAogZW1wdHlfb3V0cHV0X2J1ZmZlciAoal9jb21wcmVzc19wdHIgY2luZm8pCi0JVGhpcyBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhlIGJ1ZmZlciBoYXMgZmlsbGVkIChmcmVlX2luX2J1ZmZlcgotCXJlYWNoZXMgemVybykuICBJbiB0eXBpY2FsIGFwcGxpY2F0aW9ucywgaXQgc2hvdWxkIHdyaXRlIG91dCB0aGUKLQkqZW50aXJlKiBidWZmZXIgKHVzZSB0aGUgc2F2ZWQgc3RhcnQgYWRkcmVzcyBhbmQgYnVmZmVyIGxlbmd0aDsKLQlpZ25vcmUgdGhlIGN1cnJlbnQgc3RhdGUgb2YgbmV4dF9vdXRwdXRfYnl0ZSBhbmQgZnJlZV9pbl9idWZmZXIpLgotCVRoZW4gcmVzZXQgdGhlIHBvaW50ZXIgJiBjb3VudCB0byB0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlciwgYW5kCi0JcmV0dXJuIFRSVUUgaW5kaWNhdGluZyB0aGF0IHRoZSBidWZmZXIgaGFzIGJlZW4gZHVtcGVkLgotCWZyZWVfaW5fYnVmZmVyIG11c3QgYmUgc2V0IHRvIGEgcG9zaXRpdmUgdmFsdWUgd2hlbiBUUlVFIGlzCi0JcmV0dXJuZWQuICBBIEZBTFNFIHJldHVybiBzaG91bGQgb25seSBiZSB1c2VkIHdoZW4gSS9PIHN1c3BlbnNpb24gaXMKLQlkZXNpcmVkICh0aGlzIG9wZXJhdGluZyBtb2RlIGlzIGRpc2N1c3NlZCBpbiB0aGUgbmV4dCBzZWN0aW9uKS4KKyAgICAgICAgVGhpcyBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhlIGJ1ZmZlciBoYXMgZmlsbGVkIChmcmVlX2luX2J1ZmZlcgorICAgICAgICByZWFjaGVzIHplcm8pLiAgSW4gdHlwaWNhbCBhcHBsaWNhdGlvbnMsIGl0IHNob3VsZCB3cml0ZSBvdXQgdGhlCisgICAgICAgICplbnRpcmUqIGJ1ZmZlciAodXNlIHRoZSBzYXZlZCBzdGFydCBhZGRyZXNzIGFuZCBidWZmZXIgbGVuZ3RoOworICAgICAgICBpZ25vcmUgdGhlIGN1cnJlbnQgc3RhdGUgb2YgbmV4dF9vdXRwdXRfYnl0ZSBhbmQgZnJlZV9pbl9idWZmZXIpLgorICAgICAgICBUaGVuIHJlc2V0IHRoZSBwb2ludGVyICYgY291bnQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIsIGFuZAorICAgICAgICByZXR1cm4gVFJVRSBpbmRpY2F0aW5nIHRoYXQgdGhlIGJ1ZmZlciBoYXMgYmVlbiBkdW1wZWQuCisgICAgICAgIGZyZWVfaW5fYnVmZmVyIG11c3QgYmUgc2V0IHRvIGEgcG9zaXRpdmUgdmFsdWUgd2hlbiBUUlVFIGlzCisgICAgICAgIHJldHVybmVkLiAgQSBGQUxTRSByZXR1cm4gc2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIEkvTyBzdXNwZW5zaW9uIGlzCisgICAgICAgIGRlc2lyZWQgKHRoaXMgb3BlcmF0aW5nIG1vZGUgaXMgZGlzY3Vzc2VkIGluIHRoZSBuZXh0IHNlY3Rpb24pLgogCiB0ZXJtX2Rlc3RpbmF0aW9uIChqX2NvbXByZXNzX3B0ciBjaW5mbykKLQlUZXJtaW5hdGUgZGVzdGluYXRpb24gLS0tIGNhbGxlZCBieSBqcGVnX2ZpbmlzaF9jb21wcmVzcygpIGFmdGVyIGFsbAotCWRhdGEgaGFzIGJlZW4gd3JpdHRlbi4gIEluIG1vc3QgYXBwbGljYXRpb25zLCB0aGlzIG11c3QgZmx1c2ggYW55Ci0JZGF0YSByZW1haW5pbmcgaW4gdGhlIGJ1ZmZlci4gIFVzZSBlaXRoZXIgbmV4dF9vdXRwdXRfYnl0ZSBvcgotCWZyZWVfaW5fYnVmZmVyIHRvIGRldGVybWluZSBob3cgbXVjaCBkYXRhIGlzIGluIHRoZSBidWZmZXIuCisgICAgICAgIFRlcm1pbmF0ZSBkZXN0aW5hdGlvbiAtLS0gY2FsbGVkIGJ5IGpwZWdfZmluaXNoX2NvbXByZXNzKCkgYWZ0ZXIgYWxsCisgICAgICAgIGRhdGEgaGFzIGJlZW4gd3JpdHRlbi4gIEluIG1vc3QgYXBwbGljYXRpb25zLCB0aGlzIG11c3QgZmx1c2ggYW55CisgICAgICAgIGRhdGEgcmVtYWluaW5nIGluIHRoZSBidWZmZXIuICBVc2UgZWl0aGVyIG5leHRfb3V0cHV0X2J5dGUgb3IKKyAgICAgICAgZnJlZV9pbl9idWZmZXIgdG8gZGV0ZXJtaW5lIGhvdyBtdWNoIGRhdGEgaXMgaW4gdGhlIGJ1ZmZlci4KIAogdGVybV9kZXN0aW5hdGlvbigpIGlzIE5PVCBjYWxsZWQgYnkganBlZ19hYm9ydCgpIG9yIGpwZWdfZGVzdHJveSgpLiAgSWYgeW91CiB3YW50IHRoZSBkZXN0aW5hdGlvbiBtYW5hZ2VyIHRvIGJlIGNsZWFuZWQgdXAgZHVyaW5nIGFuIGFib3J0LCB5b3UgbXVzdCBkbyBpdApAQCAtMTQ4OSw4ICsxNTI3LDggQEAKIGRlZmluaW5nIHRoZSBuZXh0IGJ5dGUgdG8gcmVhZCBmcm9tIHRoZSB3b3JrIGJ1ZmZlciBhbmQgdGhlIG51bWJlciBvZiBieXRlcwogcmVtYWluaW5nOgogCi0JY29uc3QgSk9DVEVUICogbmV4dF9pbnB1dF9ieXRlOyAvKiA9PiBuZXh0IGJ5dGUgdG8gcmVhZCBmcm9tIGJ1ZmZlciAqLwotCXNpemVfdCBieXRlc19pbl9idWZmZXI7ICAgICAgICAgLyogIyBvZiBieXRlcyByZW1haW5pbmcgaW4gYnVmZmVyICovCisgICAgICAgIGNvbnN0IEpPQ1RFVCAqIG5leHRfaW5wdXRfYnl0ZTsgLyogPT4gbmV4dCBieXRlIHRvIHJlYWQgZnJvbSBidWZmZXIgKi8KKyAgICAgICAgc2l6ZV90IGJ5dGVzX2luX2J1ZmZlcjsgICAgICAgICAvKiAjIG9mIGJ5dGVzIHJlbWFpbmluZyBpbiBidWZmZXIgKi8KIAogVGhlIGxpYnJhcnkgaW5jcmVtZW50cyB0aGUgcG9pbnRlciBhbmQgZGVjcmVtZW50cyB0aGUgY291bnQgdW50aWwgdGhlIGJ1ZmZlcgogaXMgZW1wdGllZC4gIFRoZSBtYW5hZ2VyJ3MgZmlsbF9pbnB1dF9idWZmZXIgbWV0aG9kIG11c3QgcmVzZXQgdGhlIHBvaW50ZXIgYW5kCkBAIC0xNTAwLDQ3ICsxNTM4LDQ3IEBACiBBIGRhdGEgc291cmNlIG1hbmFnZXIgcHJvdmlkZXMgZml2ZSBtZXRob2RzOgogCiBpbml0X3NvdXJjZSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKLQlJbml0aWFsaXplIHNvdXJjZS4gIFRoaXMgaXMgY2FsbGVkIGJ5IGpwZWdfcmVhZF9oZWFkZXIoKSBiZWZvcmUgYW55Ci0JZGF0YSBpcyBhY3R1YWxseSByZWFkLiAgVW5saWtlIGluaXRfZGVzdGluYXRpb24oKSwgaXQgbWF5IGxlYXZlCi0JYnl0ZXNfaW5fYnVmZmVyIHNldCB0byAwIChpbiB3aGljaCBjYXNlIGEgZmlsbF9pbnB1dF9idWZmZXIoKSBjYWxsCi0Jd2lsbCBvY2N1ciBpbW1lZGlhdGVseSkuCisgICAgICAgIEluaXRpYWxpemUgc291cmNlLiAgVGhpcyBpcyBjYWxsZWQgYnkganBlZ19yZWFkX2hlYWRlcigpIGJlZm9yZSBhbnkKKyAgICAgICAgZGF0YSBpcyBhY3R1YWxseSByZWFkLiAgVW5saWtlIGluaXRfZGVzdGluYXRpb24oKSwgaXQgbWF5IGxlYXZlCisgICAgICAgIGJ5dGVzX2luX2J1ZmZlciBzZXQgdG8gMCAoaW4gd2hpY2ggY2FzZSBhIGZpbGxfaW5wdXRfYnVmZmVyKCkgY2FsbAorICAgICAgICB3aWxsIG9jY3VyIGltbWVkaWF0ZWx5KS4KIAogZmlsbF9pbnB1dF9idWZmZXIgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCi0JVGhpcyBpcyBjYWxsZWQgd2hlbmV2ZXIgYnl0ZXNfaW5fYnVmZmVyIGhhcyByZWFjaGVkIHplcm8gYW5kIG1vcmUKLQlkYXRhIGlzIHdhbnRlZC4gIEluIHR5cGljYWwgYXBwbGljYXRpb25zLCBpdCBzaG91bGQgcmVhZCBmcmVzaCBkYXRhCi0JaW50byB0aGUgYnVmZmVyIChpZ25vcmluZyB0aGUgY3VycmVudCBzdGF0ZSBvZiBuZXh0X2lucHV0X2J5dGUgYW5kCi0JYnl0ZXNfaW5fYnVmZmVyKSwgcmVzZXQgdGhlIHBvaW50ZXIgJiBjb3VudCB0byB0aGUgc3RhcnQgb2YgdGhlCi0JYnVmZmVyLCBhbmQgcmV0dXJuIFRSVUUgaW5kaWNhdGluZyB0aGF0IHRoZSBidWZmZXIgaGFzIGJlZW4gcmVsb2FkZWQuCi0JSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBmaWxsIHRoZSBidWZmZXIgZW50aXJlbHksIG9ubHkgdG8gb2J0YWluIGF0Ci0JbGVhc3Qgb25lIG1vcmUgYnl0ZS4gIGJ5dGVzX2luX2J1ZmZlciBNVVNUIGJlIHNldCB0byBhIHBvc2l0aXZlIHZhbHVlCi0JaWYgVFJVRSBpcyByZXR1cm5lZC4gIEEgRkFMU0UgcmV0dXJuIHNob3VsZCBvbmx5IGJlIHVzZWQgd2hlbiBJL08KLQlzdXNwZW5zaW9uIGlzIGRlc2lyZWQgKHRoaXMgbW9kZSBpcyBkaXNjdXNzZWQgaW4gdGhlIG5leHQgc2VjdGlvbikuCisgICAgICAgIFRoaXMgaXMgY2FsbGVkIHdoZW5ldmVyIGJ5dGVzX2luX2J1ZmZlciBoYXMgcmVhY2hlZCB6ZXJvIGFuZCBtb3JlCisgICAgICAgIGRhdGEgaXMgd2FudGVkLiAgSW4gdHlwaWNhbCBhcHBsaWNhdGlvbnMsIGl0IHNob3VsZCByZWFkIGZyZXNoIGRhdGEKKyAgICAgICAgaW50byB0aGUgYnVmZmVyIChpZ25vcmluZyB0aGUgY3VycmVudCBzdGF0ZSBvZiBuZXh0X2lucHV0X2J5dGUgYW5kCisgICAgICAgIGJ5dGVzX2luX2J1ZmZlciksIHJlc2V0IHRoZSBwb2ludGVyICYgY291bnQgdG8gdGhlIHN0YXJ0IG9mIHRoZQorICAgICAgICBidWZmZXIsIGFuZCByZXR1cm4gVFJVRSBpbmRpY2F0aW5nIHRoYXQgdGhlIGJ1ZmZlciBoYXMgYmVlbiByZWxvYWRlZC4KKyAgICAgICAgSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBmaWxsIHRoZSBidWZmZXIgZW50aXJlbHksIG9ubHkgdG8gb2J0YWluIGF0CisgICAgICAgIGxlYXN0IG9uZSBtb3JlIGJ5dGUuICBieXRlc19pbl9idWZmZXIgTVVTVCBiZSBzZXQgdG8gYSBwb3NpdGl2ZSB2YWx1ZQorICAgICAgICBpZiBUUlVFIGlzIHJldHVybmVkLiAgQSBGQUxTRSByZXR1cm4gc2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIEkvTworICAgICAgICBzdXNwZW5zaW9uIGlzIGRlc2lyZWQgKHRoaXMgbW9kZSBpcyBkaXNjdXNzZWQgaW4gdGhlIG5leHQgc2VjdGlvbikuCiAKIHNraXBfaW5wdXRfZGF0YSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgbG9uZyBudW1fYnl0ZXMpCi0JU2tpcCBudW1fYnl0ZXMgd29ydGggb2YgZGF0YS4gIFRoZSBidWZmZXIgcG9pbnRlciBhbmQgY291bnQgc2hvdWxkCi0JYmUgYWR2YW5jZWQgb3ZlciBudW1fYnl0ZXMgaW5wdXQgYnl0ZXMsIHJlZmlsbGluZyB0aGUgYnVmZmVyIGFzCi0JbmVlZGVkLiAgVGhpcyBpcyB1c2VkIHRvIHNraXAgb3ZlciBhIHBvdGVudGlhbGx5IGxhcmdlIGFtb3VudCBvZgotCXVuaW50ZXJlc3RpbmcgZGF0YSAoc3VjaCBhcyBhbiBBUFBuIG1hcmtlcikuICBJbiBzb21lIGFwcGxpY2F0aW9ucwotCWl0IG1heSBiZSBwb3NzaWJsZSB0byBvcHRpbWl6ZSBhd2F5IHRoZSByZWFkaW5nIG9mIHRoZSBza2lwcGVkIGRhdGEsCi0JYnV0IGl0J3Mgbm90IGNsZWFyIHRoYXQgYmVpbmcgc21hcnQgaXMgd29ydGggbXVjaCB0cm91YmxlOyBsYXJnZQotCXNraXBzIGFyZSB1bmNvbW1vbi4gIGJ5dGVzX2luX2J1ZmZlciBtYXkgYmUgemVybyBvbiByZXR1cm4uCi0JQSB6ZXJvIG9yIG5lZ2F0aXZlIHNraXAgY291bnQgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBuby1vcC4KKyAgICAgICAgU2tpcCBudW1fYnl0ZXMgd29ydGggb2YgZGF0YS4gIFRoZSBidWZmZXIgcG9pbnRlciBhbmQgY291bnQgc2hvdWxkCisgICAgICAgIGJlIGFkdmFuY2VkIG92ZXIgbnVtX2J5dGVzIGlucHV0IGJ5dGVzLCByZWZpbGxpbmcgdGhlIGJ1ZmZlciBhcworICAgICAgICBuZWVkZWQuICBUaGlzIGlzIHVzZWQgdG8gc2tpcCBvdmVyIGEgcG90ZW50aWFsbHkgbGFyZ2UgYW1vdW50IG9mCisgICAgICAgIHVuaW50ZXJlc3RpbmcgZGF0YSAoc3VjaCBhcyBhbiBBUFBuIG1hcmtlcikuICBJbiBzb21lIGFwcGxpY2F0aW9ucworICAgICAgICBpdCBtYXkgYmUgcG9zc2libGUgdG8gb3B0aW1pemUgYXdheSB0aGUgcmVhZGluZyBvZiB0aGUgc2tpcHBlZCBkYXRhLAorICAgICAgICBidXQgaXQncyBub3QgY2xlYXIgdGhhdCBiZWluZyBzbWFydCBpcyB3b3J0aCBtdWNoIHRyb3VibGU7IGxhcmdlCisgICAgICAgIHNraXBzIGFyZSB1bmNvbW1vbi4gIGJ5dGVzX2luX2J1ZmZlciBtYXkgYmUgemVybyBvbiByZXR1cm4uCisgICAgICAgIEEgemVybyBvciBuZWdhdGl2ZSBza2lwIGNvdW50IHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgbm8tb3AuCiAKIHJlc3luY190b19yZXN0YXJ0IChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgZGVzaXJlZCkKLQlUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIG9ubHkgd2hlbiB0aGUgZGVjb21wcmVzc29yIGhhcyBmYWlsZWQgdG8gZmluZAotCWEgcmVzdGFydCAoUlNUbikgbWFya2VyIHdoZXJlIG9uZSBpcyBleHBlY3RlZC4gIEl0cyBtaXNzaW9uIGlzIHRvCi0JZmluZCBhIHN1aXRhYmxlIHBvaW50IGZvciByZXN1bWluZyBkZWNvbXByZXNzaW9uLiAgRm9yIG1vc3QKLQlhcHBsaWNhdGlvbnMsIHdlIHJlY29tbWVuZCB0aGF0IHlvdSBqdXN0IHVzZSB0aGUgZGVmYXVsdCByZXN5bmMKLQlwcm9jZWR1cmUsIGpwZWdfcmVzeW5jX3RvX3Jlc3RhcnQoKS4gIEhvd2V2ZXIsIGlmIHlvdSBhcmUgYWJsZSB0byBiYWNrCi0JdXAgaW4gdGhlIGlucHV0IGRhdGEgc3RyZWFtLCBvciBpZiB5b3UgaGF2ZSBhLXByaW9yaSBrbm93bGVkZ2UgYWJvdXQKLQl0aGUgbGlrZWx5IGxvY2F0aW9uIG9mIHJlc3RhcnQgbWFya2VycywgeW91IG1heSBiZSBhYmxlIHRvIGRvIGJldHRlci4KLQlSZWFkIHRoZSByZWFkX3Jlc3RhcnRfbWFya2VyKCkgYW5kIGpwZWdfcmVzeW5jX3RvX3Jlc3RhcnQoKSByb3V0aW5lcwotCWluIGpkbWFya2VyLmMgaWYgeW91IHRoaW5rIHlvdSdkIGxpa2UgdG8gaW1wbGVtZW50IHlvdXIgb3duIHJlc3luYwotCXByb2NlZHVyZS4KKyAgICAgICAgVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBvbmx5IHdoZW4gdGhlIGRlY29tcHJlc3NvciBoYXMgZmFpbGVkIHRvIGZpbmQKKyAgICAgICAgYSByZXN0YXJ0IChSU1RuKSBtYXJrZXIgd2hlcmUgb25lIGlzIGV4cGVjdGVkLiAgSXRzIG1pc3Npb24gaXMgdG8KKyAgICAgICAgZmluZCBhIHN1aXRhYmxlIHBvaW50IGZvciByZXN1bWluZyBkZWNvbXByZXNzaW9uLiAgRm9yIG1vc3QKKyAgICAgICAgYXBwbGljYXRpb25zLCB3ZSByZWNvbW1lbmQgdGhhdCB5b3UganVzdCB1c2UgdGhlIGRlZmF1bHQgcmVzeW5jCisgICAgICAgIHByb2NlZHVyZSwganBlZ19yZXN5bmNfdG9fcmVzdGFydCgpLiAgSG93ZXZlciwgaWYgeW91IGFyZSBhYmxlIHRvIGJhY2sKKyAgICAgICAgdXAgaW4gdGhlIGlucHV0IGRhdGEgc3RyZWFtLCBvciBpZiB5b3UgaGF2ZSBhLXByaW9yaSBrbm93bGVkZ2UgYWJvdXQKKyAgICAgICAgdGhlIGxpa2VseSBsb2NhdGlvbiBvZiByZXN0YXJ0IG1hcmtlcnMsIHlvdSBtYXkgYmUgYWJsZSB0byBkbyBiZXR0ZXIuCisgICAgICAgIFJlYWQgdGhlIHJlYWRfcmVzdGFydF9tYXJrZXIoKSBhbmQganBlZ19yZXN5bmNfdG9fcmVzdGFydCgpIHJvdXRpbmVzCisgICAgICAgIGluIGpkbWFya2VyLmMgaWYgeW91IHRoaW5rIHlvdSdkIGxpa2UgdG8gaW1wbGVtZW50IHlvdXIgb3duIHJlc3luYworICAgICAgICBwcm9jZWR1cmUuCiAKIHRlcm1fc291cmNlIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQotCVRlcm1pbmF0ZSBzb3VyY2UgLS0tIGNhbGxlZCBieSBqcGVnX2ZpbmlzaF9kZWNvbXByZXNzKCkgYWZ0ZXIgYWxsCi0JZGF0YSBoYXMgYmVlbiByZWFkLiAgT2Z0ZW4gYSBuby1vcC4KKyAgICAgICAgVGVybWluYXRlIHNvdXJjZSAtLS0gY2FsbGVkIGJ5IGpwZWdfZmluaXNoX2RlY29tcHJlc3MoKSBhZnRlciBhbGwKKyAgICAgICAgZGF0YSBoYXMgYmVlbiByZWFkLiAgT2Z0ZW4gYSBuby1vcC4KIAogRm9yIGJvdGggZmlsbF9pbnB1dF9idWZmZXIoKSBhbmQgc2tpcF9pbnB1dF9kYXRhKCksIHRoZXJlIGlzIG5vIHN1Y2ggdGhpbmcKIGFzIGFuIEVPRiByZXR1cm4uICBJZiB0aGUgZW5kIG9mIHRoZSBmaWxlIGhhcyBiZWVuIHJlYWNoZWQsIHRoZSByb3V0aW5lIGhhcwpAQCAtMTY0OCw3ICsxNjg2LDcgQEAKICAgKiBqcGVnX3JlYWRfaGVhZGVyKCk6IHdpbGwgcmV0dXJuIEpQRUdfU1VTUEVOREVELgogICAqIGpwZWdfc3RhcnRfZGVjb21wcmVzcygpOiB3aWxsIHJldHVybiBGQUxTRSwgcmF0aGVyIHRoYW4gaXRzIHVzdWFsIFRSVUUuCiAgICoganBlZ19yZWFkX3NjYW5saW5lcygpOiB3aWxsIHJldHVybiB0aGUgbnVtYmVyIG9mIHNjYW5saW5lcyBhbHJlYWR5Ci0JY29tcGxldGVkIChwb3NzaWJseSAwKS4KKyAgICAgICAgY29tcGxldGVkIChwb3NzaWJseSAwKS4KICAgKiBqcGVnX2ZpbmlzaF9kZWNvbXByZXNzKCk6IHdpbGwgcmV0dXJuIEZBTFNFLCByYXRoZXIgdGhhbiBpdHMgdXN1YWwgVFJVRS4KIFRoZSBzdXJyb3VuZGluZyBhcHBsaWNhdGlvbiBtdXN0IHJlY29nbml6ZSB0aGVzZSBjYXNlcywgbG9hZCBtb3JlIGRhdGEgaW50bwogdGhlIGlucHV0IGJ1ZmZlciwgYW5kIHJlcGVhdCB0aGUgY2FsbC4gIEluIHRoZSBjYXNlIG9mIGpwZWdfcmVhZF9zY2FubGluZXMoKSwKQEAgLTE4MjYsMjMgKzE4NjQsMjMgQEAKIAogVGhlIGJhc2ljIGNvbnRyb2wgZmxvdyBmb3IgYnVmZmVyZWQtaW1hZ2UgZGVjb2RpbmcgaXMKIAotCWpwZWdfY3JlYXRlX2RlY29tcHJlc3MoKQotCXNldCBkYXRhIHNvdXJjZQotCWpwZWdfcmVhZF9oZWFkZXIoKQotCXNldCBvdmVyYWxsIGRlY29tcHJlc3Npb24gcGFyYW1ldGVycwotCWNpbmZvLmJ1ZmZlcmVkX2ltYWdlID0gVFJVRTsJLyogc2VsZWN0IGJ1ZmZlcmVkLWltYWdlIG1vZGUgKi8KLQlqcGVnX3N0YXJ0X2RlY29tcHJlc3MoKQotCWZvciAoZWFjaCBvdXRwdXQgcGFzcykgewotCSAgICBhZGp1c3Qgb3V0cHV0IGRlY29tcHJlc3Npb24gcGFyYW1ldGVycyBpZiByZXF1aXJlZAotCSAgICBqcGVnX3N0YXJ0X291dHB1dCgpCQkvKiBzdGFydCBhIG5ldyBvdXRwdXQgcGFzcyAqLwotCSAgICBmb3IgKGFsbCBzY2FubGluZXMgaW4gaW1hZ2UpIHsKLQkgICAgICAgIGpwZWdfcmVhZF9zY2FubGluZXMoKQotCSAgICAgICAgZGlzcGxheSBzY2FubGluZXMKLQkgICAgfQotCSAgICBqcGVnX2ZpbmlzaF9vdXRwdXQoKQkvKiB0ZXJtaW5hdGUgb3V0cHV0IHBhc3MgKi8KLQl9Ci0JanBlZ19maW5pc2hfZGVjb21wcmVzcygpCi0JanBlZ19kZXN0cm95X2RlY29tcHJlc3MoKQorICAgICAgICBqcGVnX2NyZWF0ZV9kZWNvbXByZXNzKCkKKyAgICAgICAgc2V0IGRhdGEgc291cmNlCisgICAgICAgIGpwZWdfcmVhZF9oZWFkZXIoKQorICAgICAgICBzZXQgb3ZlcmFsbCBkZWNvbXByZXNzaW9uIHBhcmFtZXRlcnMKKyAgICAgICAgY2luZm8uYnVmZmVyZWRfaW1hZ2UgPSBUUlVFOyAgICAvKiBzZWxlY3QgYnVmZmVyZWQtaW1hZ2UgbW9kZSAqLworICAgICAgICBqcGVnX3N0YXJ0X2RlY29tcHJlc3MoKQorICAgICAgICBmb3IgKGVhY2ggb3V0cHV0IHBhc3MpIHsKKyAgICAgICAgICAgIGFkanVzdCBvdXRwdXQgZGVjb21wcmVzc2lvbiBwYXJhbWV0ZXJzIGlmIHJlcXVpcmVkCisgICAgICAgICAgICBqcGVnX3N0YXJ0X291dHB1dCgpICAgICAgICAgLyogc3RhcnQgYSBuZXcgb3V0cHV0IHBhc3MgKi8KKyAgICAgICAgICAgIGZvciAoYWxsIHNjYW5saW5lcyBpbiBpbWFnZSkgeworICAgICAgICAgICAgICAgIGpwZWdfcmVhZF9zY2FubGluZXMoKQorICAgICAgICAgICAgICAgIGRpc3BsYXkgc2NhbmxpbmVzCisgICAgICAgICAgICB9CisgICAgICAgICAgICBqcGVnX2ZpbmlzaF9vdXRwdXQoKSAgICAgICAgLyogdGVybWluYXRlIG91dHB1dCBwYXNzICovCisgICAgICAgIH0KKyAgICAgICAganBlZ19maW5pc2hfZGVjb21wcmVzcygpCisgICAgICAgIGpwZWdfZGVzdHJveV9kZWNvbXByZXNzKCkKIAogVGhpcyBkaWZmZXJzIGZyb20gb3JkaW5hcnkgdW5idWZmZXJlZCBkZWNvZGluZyBpbiB0aGF0IHRoZXJlIGlzIGFuIGFkZGl0aW9uYWwKIGxldmVsIG9mIGxvb3BpbmcuICBUaGUgYXBwbGljYXRpb24gY2FuIGNob29zZSBob3cgbWFueSBvdXRwdXQgcGFzc2VzIHRvIG1ha2UKQEAgLTE4NTEsOSArMTg4OSw5IEBACiBUaGUgc2ltcGxlc3QgYXBwcm9hY2ggdG8gZGlzcGxheWluZyBwcm9ncmVzc2l2ZSBpbWFnZXMgaXMgdG8gZG8gb25lIGRpc3BsYXkKIHBhc3MgZm9yIGVhY2ggc2NhbiBhcHBlYXJpbmcgaW4gdGhlIGlucHV0IGZpbGUuICBJbiB0aGlzIGNhc2UgdGhlIG91dGVyIGxvb3AKIGNvbmRpdGlvbiBpcyB0eXBpY2FsbHkKLQl3aGlsZSAoISBqcGVnX2lucHV0X2NvbXBsZXRlKCZjaW5mbykpCisgICAgICAgIHdoaWxlICghIGpwZWdfaW5wdXRfY29tcGxldGUoJmNpbmZvKSkKIGFuZCB0aGUgc3RhcnQtb3V0cHV0IGNhbGwgc2hvdWxkIHJlYWQKLQlqcGVnX3N0YXJ0X291dHB1dCgmY2luZm8sIGNpbmZvLmlucHV0X3NjYW5fbnVtYmVyKTsKKyAgICAgICAganBlZ19zdGFydF9vdXRwdXQoJmNpbmZvLCBjaW5mby5pbnB1dF9zY2FuX251bWJlcik7CiBUaGUgc2Vjb25kIHBhcmFtZXRlciB0byBqcGVnX3N0YXJ0X291dHB1dCgpIGluZGljYXRlcyB3aGljaCBzY2FuIG9mIHRoZSBpbnB1dAogZmlsZSBpcyB0byBiZSBkaXNwbGF5ZWQ7IHRoZSBzY2FucyBhcmUgbnVtYmVyZWQgc3RhcnRpbmcgYXQgMSBmb3IgdGhpcwogcHVycG9zZS4gIChZb3UgY2FuIHVzZSBhIGxvb3AgY291bnRlciBzdGFydGluZyBhdCAxIGlmIHlvdSBsaWtlLCBidXQgdXNpbmcKQEAgLTE4ODQsMTEgKzE5MjIsMTEgQEAKIGNhdXNlIHRoZSBsaWJyYXJ5IHRvIGRlY29kZSBpbnB1dCBkYXRhIGluIGFkdmFuY2Ugb2Ygd2hhdCdzIG5lZWRlZCB0byBwcm9kdWNlCiBvdXRwdXQuICBUaGlzIGlzIGRvbmUgYnkgY2FsbGluZyB0aGUgcm91dGluZSBqcGVnX2NvbnN1bWVfaW5wdXQoKS4KIFRoZSByZXR1cm4gdmFsdWUgaXMgb25lIG9mIHRoZSBmb2xsb3dpbmc6Ci0JSlBFR19SRUFDSEVEX1NPUzogICAgcmVhY2hlZCBhbiBTT1MgbWFya2VyICh0aGUgc3RhcnQgb2YgYSBuZXcgc2NhbikKLQlKUEVHX1JFQUNIRURfRU9JOiAgICByZWFjaGVkIHRoZSBFT0kgbWFya2VyIChlbmQgb2YgaW1hZ2UpCi0JSlBFR19ST1dfQ09NUExFVEVEOiAgY29tcGxldGVkIHJlYWRpbmcgb25lIE1DVSByb3cgb2YgY29tcHJlc3NlZCBkYXRhCi0JSlBFR19TQ0FOX0NPTVBMRVRFRDogY29tcGxldGVkIHJlYWRpbmcgbGFzdCBNQ1Ugcm93IG9mIGN1cnJlbnQgc2NhbgotCUpQRUdfU1VTUEVOREVEOiAgICAgIHN1c3BlbmRlZCBiZWZvcmUgY29tcGxldGluZyBhbnkgb2YgdGhlIGFib3ZlCisgICAgICAgIEpQRUdfUkVBQ0hFRF9TT1M6ICAgIHJlYWNoZWQgYW4gU09TIG1hcmtlciAodGhlIHN0YXJ0IG9mIGEgbmV3IHNjYW4pCisgICAgICAgIEpQRUdfUkVBQ0hFRF9FT0k6ICAgIHJlYWNoZWQgdGhlIEVPSSBtYXJrZXIgKGVuZCBvZiBpbWFnZSkKKyAgICAgICAgSlBFR19ST1dfQ09NUExFVEVEOiAgY29tcGxldGVkIHJlYWRpbmcgb25lIE1DVSByb3cgb2YgY29tcHJlc3NlZCBkYXRhCisgICAgICAgIEpQRUdfU0NBTl9DT01QTEVURUQ6IGNvbXBsZXRlZCByZWFkaW5nIGxhc3QgTUNVIHJvdyBvZiBjdXJyZW50IHNjYW4KKyAgICAgICAgSlBFR19TVVNQRU5ERUQ6ICAgICAgc3VzcGVuZGVkIGJlZm9yZSBjb21wbGV0aW5nIGFueSBvZiB0aGUgYWJvdmUKIChKUEVHX1NVU1BFTkRFRCBjYW4gb2NjdXIgb25seSBpZiBhIHN1c3BlbmRpbmcgZGF0YSBzb3VyY2UgaXMgdXNlZC4pICBUaGlzCiByb3V0aW5lIGNhbiBiZSBjYWxsZWQgYXQgYW55IHRpbWUgYWZ0ZXIgaW5pdGlhbGl6aW5nIHRoZSBKUEVHIG9iamVjdC4gIEl0CiByZWFkcyBzb21lIGFkZGl0aW9uYWwgZGF0YSBhbmQgcmV0dXJucyB3aGVuIG9uZSBvZiB0aGUgaW5kaWNhdGVkIHNpZ25pZmljYW50CkBAIC0xOTY1LDI3ICsyMDAzLDI3IEBACiBvdXRwdXQgcGFzcyBhZnRlciByZWNlaXZpbmcgYWxsIHRoZSBkYXRhOyBvdGhlcndpc2UgeW91ciBsYXN0IGRpc3BsYXkgbWF5IG5vdAogYmUgZnVsbCBxdWFsaXR5IGFjcm9zcyB0aGUgd2hvbGUgc2NyZWVuLiAgU28gdGhlIHJpZ2h0IG91dGVyIGxvb3AgbG9naWMgaXMKIHNvbWV0aGluZyBsaWtlIHRoaXM6Ci0JZG8gewotCSAgICBhYnNvcmIgYW55IHdhaXRpbmcgaW5wdXQgYnkgY2FsbGluZyBqcGVnX2NvbnN1bWVfaW5wdXQoKQotCSAgICBmaW5hbF9wYXNzID0ganBlZ19pbnB1dF9jb21wbGV0ZSgmY2luZm8pOwotCSAgICBhZGp1c3Qgb3V0cHV0IGRlY29tcHJlc3Npb24gcGFyYW1ldGVycyBpZiByZXF1aXJlZAotCSAgICBqcGVnX3N0YXJ0X291dHB1dCgmY2luZm8sIGNpbmZvLmlucHV0X3NjYW5fbnVtYmVyKTsKLQkgICAgLi4uCi0JICAgIGpwZWdfZmluaXNoX291dHB1dCgpCi0JfSB3aGlsZSAoISBmaW5hbF9wYXNzKTsKKyAgICAgICAgZG8geworICAgICAgICAgICAgYWJzb3JiIGFueSB3YWl0aW5nIGlucHV0IGJ5IGNhbGxpbmcganBlZ19jb25zdW1lX2lucHV0KCkKKyAgICAgICAgICAgIGZpbmFsX3Bhc3MgPSBqcGVnX2lucHV0X2NvbXBsZXRlKCZjaW5mbyk7CisgICAgICAgICAgICBhZGp1c3Qgb3V0cHV0IGRlY29tcHJlc3Npb24gcGFyYW1ldGVycyBpZiByZXF1aXJlZAorICAgICAgICAgICAganBlZ19zdGFydF9vdXRwdXQoJmNpbmZvLCBjaW5mby5pbnB1dF9zY2FuX251bWJlcik7CisgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgIGpwZWdfZmluaXNoX291dHB1dCgpCisgICAgICAgIH0gd2hpbGUgKCEgZmluYWxfcGFzcyk7CiByYXRoZXIgdGhhbiBxdWl0dGluZyBhcyBzb29uIGFzIGpwZWdfaW5wdXRfY29tcGxldGUoKSByZXR1cm5zIFRSVUUuICBUaGlzCiBhcnJhbmdlbWVudCBtYWtlcyBpdCBzaW1wbGUgdG8gdXNlIGhpZ2hlci1xdWFsaXR5IGRlY29kaW5nIHBhcmFtZXRlcnMKIGZvciB0aGUgZmluYWwgcGFzcy4gIEJ1dCBpZiB5b3UgZG9uJ3Qgd2FudCB0byB1c2Ugc3BlY2lhbCBwYXJhbWV0ZXJzIGZvcgogdGhlIGZpbmFsIHBhc3MsIHRoZSByaWdodCBsb29wIGxvZ2ljIGlzIGxpa2UgdGhpczoKLQlmb3IgKDs7KSB7Ci0JICAgIGFic29yYiBhbnkgd2FpdGluZyBpbnB1dCBieSBjYWxsaW5nIGpwZWdfY29uc3VtZV9pbnB1dCgpCi0JICAgIGpwZWdfc3RhcnRfb3V0cHV0KCZjaW5mbywgY2luZm8uaW5wdXRfc2Nhbl9udW1iZXIpOwotCSAgICAuLi4KLQkgICAganBlZ19maW5pc2hfb3V0cHV0KCkKLQkgICAgaWYgKGpwZWdfaW5wdXRfY29tcGxldGUoJmNpbmZvKSAmJgotCSAgICAgICAgY2luZm8uaW5wdXRfc2Nhbl9udW1iZXIgPT0gY2luZm8ub3V0cHV0X3NjYW5fbnVtYmVyKQotCSAgICAgIGJyZWFrOwotCX0KKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgYWJzb3JiIGFueSB3YWl0aW5nIGlucHV0IGJ5IGNhbGxpbmcganBlZ19jb25zdW1lX2lucHV0KCkKKyAgICAgICAgICAgIGpwZWdfc3RhcnRfb3V0cHV0KCZjaW5mbywgY2luZm8uaW5wdXRfc2Nhbl9udW1iZXIpOworICAgICAgICAgICAgLi4uCisgICAgICAgICAgICBqcGVnX2ZpbmlzaF9vdXRwdXQoKQorICAgICAgICAgICAgaWYgKGpwZWdfaW5wdXRfY29tcGxldGUoJmNpbmZvKSAmJgorICAgICAgICAgICAgICAgIGNpbmZvLmlucHV0X3NjYW5fbnVtYmVyID09IGNpbmZvLm91dHB1dF9zY2FuX251bWJlcikKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KIEluIHRoaXMgY2FzZSB5b3UgZG9uJ3QgbmVlZCB0byBrbm93IGluIGFkdmFuY2Ugd2hldGhlciBhbiBvdXRwdXQgcGFzcyBpcyB0bwogYmUgdGhlIGxhc3Qgb25lLCBzbyBpdCdzIG5vdCBuZWNlc3NhcnkgdG8gaGF2ZSByZWFjaGVkIEVPRiBiZWZvcmUgc3RhcnRpbmcKIHRoZSBmaW5hbCBvdXRwdXQgcGFzczsgcmF0aGVyLCB3aGF0IHlvdSB3YW50IHRvIHRlc3QgaXMgd2hldGhlciB0aGUgb3V0cHV0CkBAIC0yMDk0LDkgKzIxMzIsOSBAQAogb25lKHMpIHlvdSBpbnRlbmQgdG8gdXNlIGJlZm9yZSB5b3UgY2FsbCBqcGVnX3N0YXJ0X2RlY29tcHJlc3MoKS4gIChJZiB3ZSBkaWQKIG5vdCByZXF1aXJlIHRoaXMsIHRoZSBtYXhfbWVtb3J5X3RvX3VzZSBzZXR0aW5nIHdvdWxkIGJlIGEgY29tcGxldGUgZmljdGlvbi4pCiBZb3UgZG8gdGhpcyBieSBzZXR0aW5nIG9uZSBvciBtb3JlIG9mIHRoZXNlIHRocmVlIGNpbmZvIGZpZWxkcyB0byBUUlVFOgotCWVuYWJsZV8xcGFzc19xdWFudAkJRml4ZWQgY29sb3IgY3ViZSBjb2xvcm1hcAotCWVuYWJsZV9leHRlcm5hbF9xdWFudAkJRXh0ZXJuYWxseS1zdXBwbGllZCBjb2xvcm1hcAotCWVuYWJsZV8ycGFzc19xdWFudAkJVHdvLXBhc3MgY3VzdG9tIGNvbG9ybWFwCisgICAgICAgIGVuYWJsZV8xcGFzc19xdWFudCAgICAgICAgICAgICAgRml4ZWQgY29sb3IgY3ViZSBjb2xvcm1hcAorICAgICAgICBlbmFibGVfZXh0ZXJuYWxfcXVhbnQgICAgICAgICAgIEV4dGVybmFsbHktc3VwcGxpZWQgY29sb3JtYXAKKyAgICAgICAgZW5hYmxlXzJwYXNzX3F1YW50ICAgICAgICAgICAgICBUd28tcGFzcyBjdXN0b20gY29sb3JtYXAKIEFsbCB0aHJlZSBhcmUgaW5pdGlhbGl6ZWQgRkFMU0UgYnkganBlZ19yZWFkX2hlYWRlcigpLiAgQnV0CiBqcGVnX3N0YXJ0X2RlY29tcHJlc3MoKSBhdXRvbWF0aWNhbGx5IHNldHMgVFJVRSB0aGUgb25lIHNlbGVjdGVkIGJ5IHRoZQogY3VycmVudCB0d29fcGFzc19xdWFudGl6ZSBhbmQgY29sb3JtYXAgc2V0dGluZ3MsIHNvIHlvdSBvbmx5IG5lZWQgdG8gc2V0IHRoZQpAQCAtMjI0NywxNCArMjI4NSwxNCBAQAogQSBzdXJlLWZpcmUgd2F5IHRvIGNyZWF0ZSBtYXRjaGluZyB0YWJsZXMtb25seSBhbmQgYWJicmV2aWF0ZWQgaW1hZ2UgZmlsZXMKIGlzIHRvIHByb2NlZWQgYXMgZm9sbG93czoKIAotCWNyZWF0ZSBKUEVHIGNvbXByZXNzaW9uIG9iamVjdAotCXNldCBKUEVHIHBhcmFtZXRlcnMKLQlzZXQgZGVzdGluYXRpb24gdG8gdGFibGVzLW9ubHkgZmlsZQotCWpwZWdfd3JpdGVfdGFibGVzKCZjaW5mbyk7Ci0Jc2V0IGRlc3RpbmF0aW9uIHRvIGltYWdlIGZpbGUKLQlqcGVnX3N0YXJ0X2NvbXByZXNzKCZjaW5mbywgRkFMU0UpOwotCXdyaXRlIGRhdGEuLi4KLQlqcGVnX2ZpbmlzaF9jb21wcmVzcygmY2luZm8pOworICAgICAgICBjcmVhdGUgSlBFRyBjb21wcmVzc2lvbiBvYmplY3QKKyAgICAgICAgc2V0IEpQRUcgcGFyYW1ldGVycworICAgICAgICBzZXQgZGVzdGluYXRpb24gdG8gdGFibGVzLW9ubHkgZmlsZQorICAgICAgICBqcGVnX3dyaXRlX3RhYmxlcygmY2luZm8pOworICAgICAgICBzZXQgZGVzdGluYXRpb24gdG8gaW1hZ2UgZmlsZQorICAgICAgICBqcGVnX3N0YXJ0X2NvbXByZXNzKCZjaW5mbywgRkFMU0UpOworICAgICAgICB3cml0ZSBkYXRhLi4uCisgICAgICAgIGpwZWdfZmluaXNoX2NvbXByZXNzKCZjaW5mbyk7CiAKIFNpbmNlIHRoZSBKUEVHIHBhcmFtZXRlcnMgYXJlIG5vdCBhbHRlcmVkIGJldHdlZW4gd3JpdGluZyB0aGUgdGFibGUgZmlsZSBhbmQKIHRoZSBhYmJyZXZpYXRlZCBpbWFnZSBmaWxlLCB0aGUgc2FtZSB0YWJsZXMgYXJlIHN1cmUgdG8gYmUgdXNlZC4gIE9mIGNvdXJzZSwKQEAgLTIyODIsNyArMjMyMCw3IEBACiAKICAgICBpZiAoY2luZm8ucXVhbnRfdGJsX3B0cnNbbl0gPT0gTlVMTCkKICAgICAgIGNpbmZvLnF1YW50X3RibF9wdHJzW25dID0ganBlZ19hbGxvY19xdWFudF90YWJsZSgoal9jb21tb25fcHRyKSAmY2luZm8pOwotICAgIHF1YW50X3B0ciA9IGNpbmZvLnF1YW50X3RibF9wdHJzW25dOwkvKiBxdWFudF9wdHIgaXMgSlFVQU5UX1RCTCogKi8KKyAgICBxdWFudF9wdHIgPSBjaW5mby5xdWFudF90YmxfcHRyc1tuXTsgICAgICAgIC8qIHF1YW50X3B0ciBpcyBKUVVBTlRfVEJMKiAqLwogICAgIGZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKSB7CiAgICAgICAvKiBRdGFibGVbXSBpcyBkZXNpcmVkIHF1YW50aXphdGlvbiB0YWJsZSwgaW4gbmF0dXJhbCBhcnJheSBvcmRlciAqLwogICAgICAgcXVhbnRfcHRyLT5xdWFudHZhbFtpXSA9IFF0YWJsZVtpXTsKQEAgLTIyOTIsNyArMjMzMCw3IEBACiAKICAgICBpZiAoY2luZm8uYWNfaHVmZl90YmxfcHRyc1tuXSA9PSBOVUxMKQogICAgICAgY2luZm8uYWNfaHVmZl90YmxfcHRyc1tuXSA9IGpwZWdfYWxsb2NfaHVmZl90YWJsZSgoal9jb21tb25fcHRyKSAmY2luZm8pOwotICAgIGh1ZmZfcHRyID0gY2luZm8uYWNfaHVmZl90YmxfcHRyc1tuXTsJLyogaHVmZl9wdHIgaXMgSkhVRkZfVEJMKiAqLworICAgIGh1ZmZfcHRyID0gY2luZm8uYWNfaHVmZl90YmxfcHRyc1tuXTsgICAgICAgLyogaHVmZl9wdHIgaXMgSkhVRkZfVEJMKiAqLwogICAgIGZvciAoaSA9IDE7IGkgPD0gMTY7IGkrKykgewogICAgICAgLyogY291bnRzW2ldIGlzIG51bWJlciBvZiBIdWZmbWFuIGNvZGVzIG9mIGxlbmd0aCBpIGJpdHMsIGk9MS4uMTYgKi8KICAgICAgIGh1ZmZfcHRyLT5iaXRzW2ldID0gY291bnRzW2ldOwpAQCAtMjMxNCwxNSArMjM1MiwxNSBAQAogRkFMU0UgdG8gaW5kaWNhdGUgdGhhdCB5b3UgZG8gbm90IHJlcXVpcmUgYW4gaW1hZ2UgdG8gYmUgcHJlc2VudC4gIFRodXMsIHRoZQogdHlwaWNhbCBzY2VuYXJpbyBpcwogCi0JY3JlYXRlIEpQRUcgZGVjb21wcmVzc2lvbiBvYmplY3QKLQlzZXQgc291cmNlIHRvIHRhYmxlcy1vbmx5IGZpbGUKLQlqcGVnX3JlYWRfaGVhZGVyKCZjaW5mbywgRkFMU0UpOwotCXNldCBzb3VyY2UgdG8gYWJicmV2aWF0ZWQgaW1hZ2UgZmlsZQotCWpwZWdfcmVhZF9oZWFkZXIoJmNpbmZvLCBUUlVFKTsKLQlzZXQgZGVjb21wcmVzc2lvbiBwYXJhbWV0ZXJzCi0JanBlZ19zdGFydF9kZWNvbXByZXNzKCZjaW5mbyk7Ci0JcmVhZCBkYXRhLi4uCi0JanBlZ19maW5pc2hfZGVjb21wcmVzcygmY2luZm8pOworICAgICAgICBjcmVhdGUgSlBFRyBkZWNvbXByZXNzaW9uIG9iamVjdAorICAgICAgICBzZXQgc291cmNlIHRvIHRhYmxlcy1vbmx5IGZpbGUKKyAgICAgICAganBlZ19yZWFkX2hlYWRlcigmY2luZm8sIEZBTFNFKTsKKyAgICAgICAgc2V0IHNvdXJjZSB0byBhYmJyZXZpYXRlZCBpbWFnZSBmaWxlCisgICAgICAgIGpwZWdfcmVhZF9oZWFkZXIoJmNpbmZvLCBUUlVFKTsKKyAgICAgICAgc2V0IGRlY29tcHJlc3Npb24gcGFyYW1ldGVycworICAgICAgICBqcGVnX3N0YXJ0X2RlY29tcHJlc3MoJmNpbmZvKTsKKyAgICAgICAgcmVhZCBkYXRhLi4uCisgICAgICAgIGpwZWdfZmluaXNoX2RlY29tcHJlc3MoJmNpbmZvKTsKIAogSW4gc29tZSBjYXNlcywgeW91IG1heSB3YW50IHRvIHJlYWQgYSBmaWxlIHdpdGhvdXQga25vd2luZyB3aGV0aGVyIGl0IGNvbnRhaW5zCiBhbiBpbWFnZSBvciBqdXN0IHRhYmxlcy4gIEluIHRoYXQgY2FzZSwgcGFzcyBGQUxTRSBhbmQgY2hlY2sgdGhlIHJldHVybiB2YWx1ZQpAQCAtMjM5NSw3ICsyNDMzLDcgQEAKICJKUEVHX0FQUDAgKyBuIiBmb3IgQVBQbi4gIChBY3R1YWxseSwganBlZ193cml0ZV9tYXJrZXIgd2lsbCBsZXQgeW91IHdyaXRlCiBhbnkgbWFya2VyIHR5cGUsIGJ1dCB3ZSBkb24ndCByZWNvbW1lbmQgd3JpdGluZyBhbnkgb3RoZXIga2luZHMgb2YgbWFya2VyLikKIEZvciBleGFtcGxlLCB0byB3cml0ZSBhIHVzZXIgY29tbWVudCBzdHJpbmcgcG9pbnRlZCB0byBieSBjb21tZW50X3RleHQ6Ci0JanBlZ193cml0ZV9tYXJrZXIoY2luZm8sIEpQRUdfQ09NLCBjb21tZW50X3RleHQsIHN0cmxlbihjb21tZW50X3RleHQpKTsKKyAgICAgICAganBlZ193cml0ZV9tYXJrZXIoY2luZm8sIEpQRUdfQ09NLCBjb21tZW50X3RleHQsIHN0cmxlbihjb21tZW50X3RleHQpKTsKIAogSWYgaXQncyBub3QgY29udmVuaWVudCB0byBzdG9yZSBhbGwgdGhlIG1hcmtlciBkYXRhIGluIG1lbW9yeSBhdCBvbmNlLAogeW91IGNhbiBpbnN0ZWFkIGNhbGwganBlZ193cml0ZV9tX2hlYWRlcigpIGZvbGxvd2VkIGJ5IG11bHRpcGxlIGNhbGxzIHRvCkBAIC0yNDQxLDcgKzI0NzksNyBAQAogCiAKIFRvIHNhdmUgdGhlIGNvbnRlbnRzIG9mIHNwZWNpYWwgbWFya2VycyBpbiBtZW1vcnksIGNhbGwKLQlqcGVnX3NhdmVfbWFya2VycyhjaW5mbywgbWFya2VyX2NvZGUsIGxlbmd0aF9saW1pdCkKKyAgICAgICAganBlZ19zYXZlX21hcmtlcnMoY2luZm8sIG1hcmtlcl9jb2RlLCBsZW5ndGhfbGltaXQpCiB3aGVyZSBtYXJrZXJfY29kZSBpcyB0aGUgbWFya2VyIHR5cGUgdG8gc2F2ZSwgSlBFR19DT00gb3IgSlBFR19BUFAwK24uCiAoVG8gYXJyYW5nZSB0byBzYXZlIGFsbCB0aGUgc3BlY2lhbCBtYXJrZXIgdHlwZXMsIHlvdSBuZWVkIHRvIGNhbGwgdGhpcwogcm91dGluZSAxNyB0aW1lcywgZm9yIENPTSBhbmQgQVBQMC1BUFAxNS4pICBJZiB0aGUgaW5jb21pbmcgbWFya2VyIGlzIGxvbmdlcgpAQCAtMjQ4Niw3ICsyNTI0LDcgQEAKIElmIHlvdSB3YW50IHRvIHN1cHBseSB5b3VyIG93biBtYXJrZXItcmVhZGluZyByb3V0aW5lLCB5b3UgZG8gaXQgYnkgY2FsbGluZwoganBlZ19zZXRfbWFya2VyX3Byb2Nlc3NvcigpLiAgQSBtYXJrZXIgcHJvY2Vzc29yIHJvdXRpbmUgbXVzdCBoYXZlIHRoZQogc2lnbmF0dXJlCi0JYm9vbGVhbiBqcGVnX21hcmtlcl9wYXJzZXJfbWV0aG9kIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQorICAgICAgICBib29sZWFuIGpwZWdfbWFya2VyX3BhcnNlcl9tZXRob2QgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCiBBbHRob3VnaCB0aGUgbWFya2VyIGNvZGUgaXMgbm90IGV4cGxpY2l0bHkgcGFzc2VkLCB0aGUgcm91dGluZSBjYW4gZmluZCBpdAogaW4gY2luZm8tPnVucmVhZF9tYXJrZXIuICBBdCB0aGUgdGltZSBvZiBjYWxsLCB0aGUgbWFya2VyIHByb3BlciBoYXMgYmVlbgogcmVhZCBmcm9tIHRoZSBkYXRhIHNvdXJjZSBtb2R1bGUuICBUaGUgcHJvY2Vzc29yIHJvdXRpbmUgaXMgcmVzcG9uc2libGUgZm9yCkBAIC0yNTczLDggKzI2MTEsOCBAQAogCiBUaGUgcmVxdWlyZWQgZGltZW5zaW9ucyBvZiB0aGUgc3VwcGxpZWQgZGF0YSBjYW4gYmUgY29tcHV0ZWQgZm9yIGVhY2gKIGNvbXBvbmVudCBhcwotCWNpbmZvLT5jb21wX2luZm9baV0ud2lkdGhfaW5fYmxvY2tzKkRDVFNJWkUgIHNhbXBsZXMgcGVyIHJvdwotCWNpbmZvLT5jb21wX2luZm9baV0uaGVpZ2h0X2luX2Jsb2NrcypEQ1RTSVpFIHJvd3MgaW4gaW1hZ2UKKyAgICAgICAgY2luZm8tPmNvbXBfaW5mb1tpXS53aWR0aF9pbl9ibG9ja3MqRENUU0laRSAgc2FtcGxlcyBwZXIgcm93CisgICAgICAgIGNpbmZvLT5jb21wX2luZm9baV0uaGVpZ2h0X2luX2Jsb2NrcypEQ1RTSVpFIHJvd3MgaW4gaW1hZ2UKIGFmdGVyIGpwZWdfc3RhcnRfY29tcHJlc3MoKSBoYXMgaW5pdGlhbGl6ZWQgdGhvc2UgZmllbGRzLiAgSWYgdGhlIHZhbGlkIGRhdGEKIGlzIHNtYWxsZXIgdGhhbiB0aGlzLCBpdCBtdXN0IGJlIHBhZGRlZCBhcHByb3ByaWF0ZWx5LiAgRm9yIHNvbWUgc2FtcGxpbmcKIGZhY3RvcnMgYW5kIGltYWdlIHNpemVzLCBhZGRpdGlvbmFsIGR1bW15IERDVCBibG9ja3MgYXJlIGluc2VydGVkIHRvIG1ha2UKQEAgLTI1ODIsMTIgKzI2MjAsMTIgQEAKIGJsb2NrcyBpdHNlbGY7IGl0IGRvZXMgbm90IHJlYWQgdGhlbSBmcm9tIHlvdXIgc3VwcGxpZWQgZGF0YS4gIFRoZXJlZm9yZSB5b3UKIG5lZWQgbmV2ZXIgcGFkIGJ5IG1vcmUgdGhhbiBEQ1RTSVpFIHNhbXBsZXMuICBBbiBleGFtcGxlIG1heSBoZWxwIGhlcmUuCiBBc3N1bWUgMmgydiBkb3duc2FtcGxpbmcgb2YgWUNiQ3IgZGF0YSwgdGhhdCBpcwotCWNpbmZvLT5jb21wX2luZm9bMF0uaF9zYW1wX2ZhY3RvciA9IDIJCWZvciBZCi0JY2luZm8tPmNvbXBfaW5mb1swXS52X3NhbXBfZmFjdG9yID0gMgotCWNpbmZvLT5jb21wX2luZm9bMV0uaF9zYW1wX2ZhY3RvciA9IDEJCWZvciBDYgotCWNpbmZvLT5jb21wX2luZm9bMV0udl9zYW1wX2ZhY3RvciA9IDEKLQljaW5mby0+Y29tcF9pbmZvWzJdLmhfc2FtcF9mYWN0b3IgPSAxCQlmb3IgQ3IKLQljaW5mby0+Y29tcF9pbmZvWzJdLnZfc2FtcF9mYWN0b3IgPSAxCisgICAgICAgIGNpbmZvLT5jb21wX2luZm9bMF0uaF9zYW1wX2ZhY3RvciA9IDIgICAgICAgICAgIGZvciBZCisgICAgICAgIGNpbmZvLT5jb21wX2luZm9bMF0udl9zYW1wX2ZhY3RvciA9IDIKKyAgICAgICAgY2luZm8tPmNvbXBfaW5mb1sxXS5oX3NhbXBfZmFjdG9yID0gMSAgICAgICAgICAgZm9yIENiCisgICAgICAgIGNpbmZvLT5jb21wX2luZm9bMV0udl9zYW1wX2ZhY3RvciA9IDEKKyAgICAgICAgY2luZm8tPmNvbXBfaW5mb1syXS5oX3NhbXBfZmFjdG9yID0gMSAgICAgICAgICAgZm9yIENyCisgICAgICAgIGNpbmZvLT5jb21wX2luZm9bMl0udl9zYW1wX2ZhY3RvciA9IDEKIGFuZCBzdXBwb3NlIHRoYXQgdGhlIG5vbWluYWwgaW1hZ2UgZGltZW5zaW9ucyAoY2luZm8tPmltYWdlX3dpZHRoIGFuZAogY2luZm8tPmltYWdlX2hlaWdodCkgYXJlIDEwMXgxMDEgcGl4ZWxzLiAgVGhlbiBqcGVnX3N0YXJ0X2NvbXByZXNzKCkgd2lsbAogY29tcHV0ZSBkb3duc2FtcGxlZF93aWR0aCA9IDEwMSBhbmQgd2lkdGhfaW5fYmxvY2tzID0gMTMgZm9yIFksCkBAIC0yNzU4LDE4ICsyNzk2LDE4IEBACiBjYW4gdXNlIHRoZSBzYW1lIGNhbGxiYWNrIHJvdXRpbmUgZm9yIGJvdGggY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24uCiAKIFRoZSBqcGVnX3Byb2dyZXNzX21nciBzdHJ1Y3QgY29udGFpbnMgZm91ciBmaWVsZHMgd2hpY2ggYXJlIHNldCBieSB0aGUgbGlicmFyeToKLQlsb25nIHBhc3NfY291bnRlcjsJLyogd29yayB1bml0cyBjb21wbGV0ZWQgaW4gdGhpcyBwYXNzICovCi0JbG9uZyBwYXNzX2xpbWl0OwkvKiB0b3RhbCBudW1iZXIgb2Ygd29yayB1bml0cyBpbiB0aGlzIHBhc3MgKi8KLQlpbnQgY29tcGxldGVkX3Bhc3NlczsJLyogcGFzc2VzIGNvbXBsZXRlZCBzbyBmYXIgKi8KLQlpbnQgdG90YWxfcGFzc2VzOwkvKiB0b3RhbCBudW1iZXIgb2YgcGFzc2VzIGV4cGVjdGVkICovCisgICAgICAgIGxvbmcgcGFzc19jb3VudGVyOyAgICAgIC8qIHdvcmsgdW5pdHMgY29tcGxldGVkIGluIHRoaXMgcGFzcyAqLworICAgICAgICBsb25nIHBhc3NfbGltaXQ7ICAgICAgICAvKiB0b3RhbCBudW1iZXIgb2Ygd29yayB1bml0cyBpbiB0aGlzIHBhc3MgKi8KKyAgICAgICAgaW50IGNvbXBsZXRlZF9wYXNzZXM7ICAgLyogcGFzc2VzIGNvbXBsZXRlZCBzbyBmYXIgKi8KKyAgICAgICAgaW50IHRvdGFsX3Bhc3NlczsgICAgICAgLyogdG90YWwgbnVtYmVyIG9mIHBhc3NlcyBleHBlY3RlZCAqLwogRHVyaW5nIGFueSBvbmUgcGFzcywgcGFzc19jb3VudGVyIGluY3JlYXNlcyBmcm9tIDAgdXAgdG8gKG5vdCBpbmNsdWRpbmcpCiBwYXNzX2xpbWl0OyB0aGUgc3RlcCBzaXplIGlzIHVzdWFsbHkgYnV0IG5vdCBuZWNlc3NhcmlseSAxLiAgVGhlIHBhc3NfbGltaXQKIHZhbHVlIG1heSBjaGFuZ2UgZnJvbSBvbmUgcGFzcyB0byBhbm90aGVyLiAgVGhlIGV4cGVjdGVkIHRvdGFsIG51bWJlciBvZgogcGFzc2VzIGlzIGluIHRvdGFsX3Bhc3NlcywgYW5kIHRoZSBudW1iZXIgb2YgcGFzc2VzIGFscmVhZHkgY29tcGxldGVkIGlzIGluCiBjb21wbGV0ZWRfcGFzc2VzLiAgVGh1cyB0aGUgZnJhY3Rpb24gb2Ygd29yayBjb21wbGV0ZWQgbWF5IGJlIGVzdGltYXRlZCBhcwotCQljb21wbGV0ZWRfcGFzc2VzICsgKHBhc3NfY291bnRlci9wYXNzX2xpbWl0KQotCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCQkJCXRvdGFsX3Bhc3NlcworICAgICAgICAgICAgICAgIGNvbXBsZXRlZF9wYXNzZXMgKyAocGFzc19jb3VudGVyL3Bhc3NfbGltaXQpCisgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxfcGFzc2VzCiBpZ25vcmluZyB0aGUgZmFjdCB0aGF0IHRoZSBwYXNzZXMgbWF5IG5vdCBiZSBlcXVhbCBhbW91bnRzIG9mIHdvcmsuCiAKIFdoZW4gZGVjb21wcmVzc2luZywgcGFzc19saW1pdCBjYW4gZXZlbiBjaGFuZ2Ugd2l0aGluIGEgcGFzcywgYmVjYXVzZSBpdApAQCAtMjk0Miw3ICsyOTgwLDcgQEAKIAogWW91IGNhbiBhbHNvIHNhdmUgYSBmZXcgSyBieSBub3QgaGF2aW5nIHRleHQgZXJyb3IgbWVzc2FnZXMgaW4gdGhlIGxpYnJhcnk7CiB0aGUgc3RhbmRhcmQgZXJyb3IgbWVzc2FnZSB0YWJsZSBvY2N1cGllcyBhYm91dCA1S2IuICBUaGlzIGlzIHBhcnRpY3VsYXJseQotcmVhc29uYWJsZSBmb3IgZW1iZWRkZWQgYXBwbGljYXRpb25zIHdoZXJlIHRoZXJlJ3Mgbm8gZ29vZCB3YXkgdG8gZGlzcGxheSAKK3JlYXNvbmFibGUgZm9yIGVtYmVkZGVkIGFwcGxpY2F0aW9ucyB3aGVyZSB0aGVyZSdzIG5vIGdvb2Qgd2F5IHRvIGRpc3BsYXkKIGEgbWVzc2FnZSBhbnl3YXkuICBUbyBkbyB0aGlzLCByZW1vdmUgdGhlIGNyZWF0aW9uIG9mIHRoZSBtZXNzYWdlIHRhYmxlCiAoanBlZ19zdGRfbWVzc2FnZV90YWJsZVtdKSBmcm9tIGplcnJvci5jLCBhbmQgYWx0ZXIgZm9ybWF0X21lc3NhZ2UgdG8gZG8KIHNvbWV0aGluZyByZWFzb25hYmxlIHdpdGhvdXQgaXQuICBZb3UgY291bGQgb3V0cHV0IHRoZSBudW1lcmljIHZhbHVlIG9mIHRoZQpAQCAtMjk2NiwxMCArMzAwNCwxMCBAQAogCiBUaGUgY29kZSBpcyBub3QgZGVwZW5kZW50IG9uIHRoZSBleGFjdCBzaXplcyBvZiB0aGUgQyBkYXRhIHR5cGVzLiAgQXMKIGRpc3RyaWJ1dGVkLCB3ZSBtYWtlIHRoZSBhc3N1bXB0aW9ucyB0aGF0Ci0JY2hhcglpcyBhdCBsZWFzdCA4IGJpdHMgd2lkZQotCXNob3J0CWlzIGF0IGxlYXN0IDE2IGJpdHMgd2lkZQotCWludAlpcyBhdCBsZWFzdCAxNiBiaXRzIHdpZGUKLQlsb25nCWlzIGF0IGxlYXN0IDMyIGJpdHMgd2lkZQorICAgICAgICBjaGFyICAgIGlzIGF0IGxlYXN0IDggYml0cyB3aWRlCisgICAgICAgIHNob3J0ICAgaXMgYXQgbGVhc3QgMTYgYml0cyB3aWRlCisgICAgICAgIGludCAgICAgaXMgYXQgbGVhc3QgMTYgYml0cyB3aWRlCisgICAgICAgIGxvbmcgICAgaXMgYXQgbGVhc3QgMzIgYml0cyB3aWRlCiAoVGhlc2UgYXJlIHRoZSBtaW5pbXVtIHJlcXVpcmVtZW50cyBvZiB0aGUgQU5TSSBDIHN0YW5kYXJkLikgIFdpZGVyIHR5cGVzIHdpbGwKIHdvcmsgZmluZSwgYWx0aG91Z2ggbWVtb3J5IG1heSBiZSB1c2VkIGluZWZmaWNpZW50bHkgaWYgY2hhciBpcyBtdWNoIGxhcmdlcgogdGhhbiA4IGJpdHMgb3Igc2hvcnQgaXMgbXVjaCBiaWdnZXIgdGhhbiAxNiBiaXRzLiAgVGhlIGNvZGUgc2hvdWxkIHdvcmsKZGlmZiAtLWdpdCBhL21kNS9NYWtlZmlsZS5hbSBiL21kNS9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzZmMDE5Ci0tLSAvZGV2L251bGwKKysrIGIvbWQ1L01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsNCBAQAorbm9pbnN0X1BST0dSQU1TID0gbWQ1Y21wCisKK21kNWNtcF9TT1VSQ0VTID0gbWQ1Y21wLmMgbWQ1LmMgbWQ1aGwuYyBtZDUuaAorbWQ1Y21wX0NGTEFHUyA9IC1JJChzcmNkaXIpCmRpZmYgLS1naXQgYS9tZDUvbWQ1LmMgYi9tZDUvbWQ1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMwZGY5NwotLS0gL2Rldi9udWxsCisrKyBiL21kNS9tZDUuYwpAQCAtMCwwICsxLDMzMSBAQAorLyoKKyAqIE1ENUMuQyAtIFJTQSBEYXRhIFNlY3VyaXR5LCBJbmMuLCBNRDUgbWVzc2FnZS1kaWdlc3QgYWxnb3JpdGhtCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkxLTIsIFJTQSBEYXRhIFNlY3VyaXR5LCBJbmMuIENyZWF0ZWQgMTk5MS4gQWxsCisgKiByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogTGljZW5zZSB0byBjb3B5IGFuZCB1c2UgdGhpcyBzb2Z0d2FyZSBpcyBncmFudGVkIHByb3ZpZGVkIHRoYXQgaXQKKyAqIGlzIGlkZW50aWZpZWQgYXMgdGhlICJSU0EgRGF0YSBTZWN1cml0eSwgSW5jLiBNRDUgTWVzc2FnZS1EaWdlc3QKKyAqIEFsZ29yaXRobSIgaW4gYWxsIG1hdGVyaWFsIG1lbnRpb25pbmcgb3IgcmVmZXJlbmNpbmcgdGhpcyBzb2Z0d2FyZQorICogb3IgdGhpcyBmdW5jdGlvbi4KKyAqCisgKiBMaWNlbnNlIGlzIGFsc28gZ3JhbnRlZCB0byBtYWtlIGFuZCB1c2UgZGVyaXZhdGl2ZSB3b3JrcyBwcm92aWRlZAorICogdGhhdCBzdWNoIHdvcmtzIGFyZSBpZGVudGlmaWVkIGFzICJkZXJpdmVkIGZyb20gdGhlIFJTQSBEYXRhCisgKiBTZWN1cml0eSwgSW5jLiBNRDUgTWVzc2FnZS1EaWdlc3QgQWxnb3JpdGhtIiBpbiBhbGwgbWF0ZXJpYWwKKyAqIG1lbnRpb25pbmcgb3IgcmVmZXJlbmNpbmcgdGhlIGRlcml2ZWQgd29yay4KKyAqCisgKiBSU0EgRGF0YSBTZWN1cml0eSwgSW5jLiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgY29uY2VybmluZyBlaXRoZXIKKyAqIHRoZSBtZXJjaGFudGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBvciB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcworICogc29mdHdhcmUgZm9yIGFueSBwYXJ0aWN1bGFyIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKKyAqIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5IG9mIGFueSBraW5kLgorICoKKyAqIFRoZXNlIG5vdGljZXMgbXVzdCBiZSByZXRhaW5lZCBpbiBhbnkgY29waWVzIG9mIGFueSBwYXJ0IG9mIHRoaXMKKyAqIGRvY3VtZW50YXRpb24gYW5kL29yIHNvZnR3YXJlLgorICoKKyAqIFRoaXMgY29kZSBpcyB0aGUgc2FtZSBhcyB0aGUgY29kZSBwdWJsaXNoZWQgYnkgUlNBIEluYy4gIEl0IGhhcyBiZWVuCisgKiBlZGl0ZWQgZm9yIGNsYXJpdHkgYW5kIHN0eWxlIG9ubHkuCisgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAiLi9tZDUuaCIKKworc3RhdGljIHZvaWQgTUQ1VHJhbnNmb3JtKHVuc2lnbmVkIGludCBbNF0sIGNvbnN0IHVuc2lnbmVkIGNoYXIgWzY0XSk7CisKKyNpZiAoQllURV9PUkRFUiA9PSBMSVRUTEVfRU5ESUFOKQorI2RlZmluZSBFbmNvZGUgbWVtY3B5CisjZGVmaW5lIERlY29kZSBtZW1jcHkKKyNlbHNlIAorCisvKgorICogT1MgWCBkb2Vzbid0IGhhdmUgbGUzMnRvaCgpIG9yIGh0b2xlMzIoKQorICovCisjaWZkZWYgX19BUFBMRV9fCisjaW5jbHVkZSA8bGlia2Vybi9PU0J5dGVPcmRlci5oPgorI2RlZmluZSBsZTMydG9oKHgpIE9TU3dhcExpdHRsZVRvSG9zdEludDMyKHgpCisjZGVmaW5lIGh0b2xlMzIoeCkgT1NTd2FwSG9zdFRvTGl0dGxlSW50MzIoeCkKKyNlbmRpZgorCisvKgorICogRW5jb2RlcyBpbnB1dCAodW5zaWduZWQgaW50KSBpbnRvIG91dHB1dCAodW5zaWduZWQgY2hhcikuIEFzc3VtZXMgbGVuIGlzCisgKiBhIG11bHRpcGxlIG9mIDQuCisgKi8KKworc3RhdGljIHZvaWQKK0VuY29kZSAodW5zaWduZWQgY2hhciAqb3V0cHV0LCB1bnNpZ25lZCBpbnQgKmlucHV0LCB1bnNpZ25lZCBpbnQgbGVuKQoreworCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGludCAqb3AgPSAodW5zaWduZWQgaW50ICopb3V0cHV0OworCisJZm9yIChpID0gMDsgaSA8IGxlbiAvIDQ7IGkrKykKKwkJb3BbaV0gPSBodG9sZTMyKGlucHV0W2ldKTsKK30KKworLyoKKyAqIERlY29kZXMgaW5wdXQgKHVuc2lnbmVkIGNoYXIpIGludG8gb3V0cHV0ICh1bnNpZ25lZCBpbnQpLiBBc3N1bWVzIGxlbiBpcworICogYSBtdWx0aXBsZSBvZiA0LgorICovCisKK3N0YXRpYyB2b2lkCitEZWNvZGUgKHVuc2lnbmVkIGludCAqb3V0cHV0LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgdW5zaWduZWQgaW50IGxlbikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwljb25zdCB1bnNpZ25lZCBpbnQgKmlwID0gKGNvbnN0IHVuc2lnbmVkIGludCAqKWlucHV0OworCisJZm9yIChpID0gMDsgaSA8IGxlbiAvIDQ7IGkrKykKKwkJb3V0cHV0W2ldID0gbGUzMnRvaChpcFtpXSk7Cit9CisjZW5kaWYKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgUEFERElOR1s2NF0gPSB7CisgIDB4ODAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAKK307CisKKy8qIEYsIEcsIEggYW5kIEkgYXJlIGJhc2ljIE1ENSBmdW5jdGlvbnMuICovCisjZGVmaW5lIEYoeCwgeSwgeikgKCgoeCkgJiAoeSkpIHwgKCh+eCkgJiAoeikpKQorI2RlZmluZSBHKHgsIHksIHopICgoKHgpICYgKHopKSB8ICgoeSkgJiAofnopKSkKKyNkZWZpbmUgSCh4LCB5LCB6KSAoKHgpIF4gKHkpIF4gKHopKQorI2RlZmluZSBJKHgsIHksIHopICgoeSkgXiAoKHgpIHwgKH56KSkpCisKKy8qIFJPVEFURV9MRUZUIHJvdGF0ZXMgeCBsZWZ0IG4gYml0cy4gKi8KKyNkZWZpbmUgUk9UQVRFX0xFRlQoeCwgbikgKCgoeCkgPDwgKG4pKSB8ICgoeCkgPj4gKDMyLShuKSkpKQorCisvKgorICogRkYsIEdHLCBISCwgYW5kIElJIHRyYW5zZm9ybWF0aW9ucyBmb3Igcm91bmRzIDEsIDIsIDMsIGFuZCA0LgorICogUm90YXRpb24gaXMgc2VwYXJhdGUgZnJvbSBhZGRpdGlvbiB0byBwcmV2ZW50IHJlY29tcHV0YXRpb24uCisgKi8KKyNkZWZpbmUgRkYoYSwgYiwgYywgZCwgeCwgcywgYWMpIHsgXAorCShhKSArPSBGICgoYiksIChjKSwgKGQpKSArICh4KSArICh1bnNpZ25lZCBpbnQpKGFjKTsgXAorCShhKSA9IFJPVEFURV9MRUZUICgoYSksIChzKSk7IFwKKwkoYSkgKz0gKGIpOyBcCisJfQorI2RlZmluZSBHRyhhLCBiLCBjLCBkLCB4LCBzLCBhYykgeyBcCisJKGEpICs9IEcgKChiKSwgKGMpLCAoZCkpICsgKHgpICsgKHVuc2lnbmVkIGludCkoYWMpOyBcCisJKGEpID0gUk9UQVRFX0xFRlQgKChhKSwgKHMpKTsgXAorCShhKSArPSAoYik7IFwKKwl9CisjZGVmaW5lIEhIKGEsIGIsIGMsIGQsIHgsIHMsIGFjKSB7IFwKKwkoYSkgKz0gSCAoKGIpLCAoYyksIChkKSkgKyAoeCkgKyAodW5zaWduZWQgaW50KShhYyk7IFwKKwkoYSkgPSBST1RBVEVfTEVGVCAoKGEpLCAocykpOyBcCisJKGEpICs9IChiKTsgXAorCX0KKyNkZWZpbmUgSUkoYSwgYiwgYywgZCwgeCwgcywgYWMpIHsgXAorCShhKSArPSBJICgoYiksIChjKSwgKGQpKSArICh4KSArICh1bnNpZ25lZCBpbnQpKGFjKTsgXAorCShhKSA9IFJPVEFURV9MRUZUICgoYSksIChzKSk7IFwKKwkoYSkgKz0gKGIpOyBcCisJfQorCisvKiBNRDUgaW5pdGlhbGl6YXRpb24uIEJlZ2lucyBhbiBNRDUgb3BlcmF0aW9uLCB3cml0aW5nIGEgbmV3IGNvbnRleHQuICovCisKK3ZvaWQKK01ENUluaXQgKGNvbnRleHQpCisJTUQ1X0NUWCAqY29udGV4dDsKK3sKKworCWNvbnRleHQtPmNvdW50WzBdID0gY29udGV4dC0+Y291bnRbMV0gPSAwOworCisJLyogTG9hZCBtYWdpYyBpbml0aWFsaXphdGlvbiBjb25zdGFudHMuICAqLworCWNvbnRleHQtPnN0YXRlWzBdID0gMHg2NzQ1MjMwMTsKKwljb250ZXh0LT5zdGF0ZVsxXSA9IDB4ZWZjZGFiODk7CisJY29udGV4dC0+c3RhdGVbMl0gPSAweDk4YmFkY2ZlOworCWNvbnRleHQtPnN0YXRlWzNdID0gMHgxMDMyNTQ3NjsKK30KKworLyogCisgKiBNRDUgYmxvY2sgdXBkYXRlIG9wZXJhdGlvbi4gQ29udGludWVzIGFuIE1ENSBtZXNzYWdlLWRpZ2VzdAorICogb3BlcmF0aW9uLCBwcm9jZXNzaW5nIGFub3RoZXIgbWVzc2FnZSBibG9jaywgYW5kIHVwZGF0aW5nIHRoZQorICogY29udGV4dC4KKyAqLworCit2b2lkCitNRDVVcGRhdGUgKGNvbnRleHQsIGluLCBpbnB1dExlbikKKwlNRDVfQ1RYICpjb250ZXh0OworCWNvbnN0IHZvaWQgKmluOworCXVuc2lnbmVkIGludCBpbnB1dExlbjsKK3sKKwl1bnNpZ25lZCBpbnQgaSwgaWR4LCBwYXJ0TGVuOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0ID0gaW47CisKKwkvKiBDb21wdXRlIG51bWJlciBvZiBieXRlcyBtb2QgNjQgKi8KKwlpZHggPSAodW5zaWduZWQgaW50KSgoY29udGV4dC0+Y291bnRbMF0gPj4gMykgJiAweDNGKTsKKworCS8qIFVwZGF0ZSBudW1iZXIgb2YgYml0cyAqLworCWlmICgoY29udGV4dC0+Y291bnRbMF0gKz0gKCh1bnNpZ25lZCBpbnQpaW5wdXRMZW4gPDwgMykpCisJICAgIDwgKCh1bnNpZ25lZCBpbnQpaW5wdXRMZW4gPDwgMykpCisJCWNvbnRleHQtPmNvdW50WzFdKys7CisJY29udGV4dC0+Y291bnRbMV0gKz0gKCh1bnNpZ25lZCBpbnQpaW5wdXRMZW4gPj4gMjkpOworCisJcGFydExlbiA9IDY0IC0gaWR4OworCisJLyogVHJhbnNmb3JtIGFzIG1hbnkgdGltZXMgYXMgcG9zc2libGUuICovCisJaWYgKGlucHV0TGVuID49IHBhcnRMZW4pIHsKKwkJbWVtY3B5KCh2b2lkICopJmNvbnRleHQtPmJ1ZmZlcltpZHhdLCAoY29uc3Qgdm9pZCAqKWlucHV0LAorCQkgICAgcGFydExlbik7CisJCU1ENVRyYW5zZm9ybSAoY29udGV4dC0+c3RhdGUsIGNvbnRleHQtPmJ1ZmZlcik7CisKKwkJZm9yIChpID0gcGFydExlbjsgaSArIDYzIDwgaW5wdXRMZW47IGkgKz0gNjQpCisJCQlNRDVUcmFuc2Zvcm0gKGNvbnRleHQtPnN0YXRlLCAmaW5wdXRbaV0pOworCisJCWlkeCA9IDA7CisJfQorCWVsc2UKKwkJaSA9IDA7CisKKwkvKiBCdWZmZXIgcmVtYWluaW5nIGlucHV0ICovCisJbWVtY3B5ICgodm9pZCAqKSZjb250ZXh0LT5idWZmZXJbaWR4XSwgKGNvbnN0IHZvaWQgKikmaW5wdXRbaV0sCisJICAgIGlucHV0TGVuLWkpOworfQorCisvKgorICogTUQ1IHBhZGRpbmcuIEFkZHMgcGFkZGluZyBmb2xsb3dlZCBieSBvcmlnaW5hbCBsZW5ndGguCisgKi8KKwordm9pZAorTUQ1UGFkIChjb250ZXh0KQorCU1ENV9DVFggKmNvbnRleHQ7Cit7CisJdW5zaWduZWQgY2hhciBiaXRzWzhdOworCXVuc2lnbmVkIGludCBpZHgsIHBhZExlbjsKKworCS8qIFNhdmUgbnVtYmVyIG9mIGJpdHMgKi8KKwlFbmNvZGUgKGJpdHMsIGNvbnRleHQtPmNvdW50LCA4KTsKKworCS8qIFBhZCBvdXQgdG8gNTYgbW9kIDY0LiAqLworCWlkeCA9ICh1bnNpZ25lZCBpbnQpKChjb250ZXh0LT5jb3VudFswXSA+PiAzKSAmIDB4M2YpOworCXBhZExlbiA9IChpZHggPCA1NikgPyAoNTYgLSBpZHgpIDogKDEyMCAtIGlkeCk7CisJTUQ1VXBkYXRlIChjb250ZXh0LCBQQURESU5HLCBwYWRMZW4pOworCisJLyogQXBwZW5kIGxlbmd0aCAoYmVmb3JlIHBhZGRpbmcpICovCisJTUQ1VXBkYXRlIChjb250ZXh0LCBiaXRzLCA4KTsKK30KKworLyoKKyAqIE1ENSBmaW5hbGl6YXRpb24uIEVuZHMgYW4gTUQ1IG1lc3NhZ2UtZGlnZXN0IG9wZXJhdGlvbiwgd3JpdGluZyB0aGUKKyAqIHRoZSBtZXNzYWdlIGRpZ2VzdCBhbmQgemVyb2l6aW5nIHRoZSBjb250ZXh0LgorICovCisKK3ZvaWQKK01ENUZpbmFsIChkaWdlc3QsIGNvbnRleHQpCisJdW5zaWduZWQgY2hhciBkaWdlc3RbMTZdOworCU1ENV9DVFggKmNvbnRleHQ7Cit7CisJLyogRG8gcGFkZGluZy4gKi8KKwlNRDVQYWQgKGNvbnRleHQpOworCisJLyogU3RvcmUgc3RhdGUgaW4gZGlnZXN0ICovCisJRW5jb2RlIChkaWdlc3QsIGNvbnRleHQtPnN0YXRlLCAxNik7CisKKwkvKiBaZXJvaXplIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbi4gKi8KKwltZW1zZXQgKCh2b2lkICopY29udGV4dCwgMCwgc2l6ZW9mICgqY29udGV4dCkpOworfQorCisvKiBNRDUgYmFzaWMgdHJhbnNmb3JtYXRpb24uIFRyYW5zZm9ybXMgc3RhdGUgYmFzZWQgb24gYmxvY2suICovCisKK3N0YXRpYyB2b2lkCitNRDVUcmFuc2Zvcm0gKHN0YXRlLCBibG9jaykKKwl1bnNpZ25lZCBpbnQgc3RhdGVbNF07CisJY29uc3QgdW5zaWduZWQgY2hhciBibG9ja1s2NF07Cit7CisJdW5zaWduZWQgaW50IGEgPSBzdGF0ZVswXSwgYiA9IHN0YXRlWzFdLCBjID0gc3RhdGVbMl0sIGQgPSBzdGF0ZVszXSwgeFsxNl07CisKKwlEZWNvZGUgKHgsIGJsb2NrLCA2NCk7CisKKwkvKiBSb3VuZCAxICovCisjZGVmaW5lIFMxMSA3CisjZGVmaW5lIFMxMiAxMgorI2RlZmluZSBTMTMgMTcKKyNkZWZpbmUgUzE0IDIyCisJRkYgKGEsIGIsIGMsIGQsIHhbIDBdLCBTMTEsIDB4ZDc2YWE0NzgpOyAvKiAxICovCisJRkYgKGQsIGEsIGIsIGMsIHhbIDFdLCBTMTIsIDB4ZThjN2I3NTYpOyAvKiAyICovCisJRkYgKGMsIGQsIGEsIGIsIHhbIDJdLCBTMTMsIDB4MjQyMDcwZGIpOyAvKiAzICovCisJRkYgKGIsIGMsIGQsIGEsIHhbIDNdLCBTMTQsIDB4YzFiZGNlZWUpOyAvKiA0ICovCisJRkYgKGEsIGIsIGMsIGQsIHhbIDRdLCBTMTEsIDB4ZjU3YzBmYWYpOyAvKiA1ICovCisJRkYgKGQsIGEsIGIsIGMsIHhbIDVdLCBTMTIsIDB4NDc4N2M2MmEpOyAvKiA2ICovCisJRkYgKGMsIGQsIGEsIGIsIHhbIDZdLCBTMTMsIDB4YTgzMDQ2MTMpOyAvKiA3ICovCisJRkYgKGIsIGMsIGQsIGEsIHhbIDddLCBTMTQsIDB4ZmQ0Njk1MDEpOyAvKiA4ICovCisJRkYgKGEsIGIsIGMsIGQsIHhbIDhdLCBTMTEsIDB4Njk4MDk4ZDgpOyAvKiA5ICovCisJRkYgKGQsIGEsIGIsIGMsIHhbIDldLCBTMTIsIDB4OGI0NGY3YWYpOyAvKiAxMCAqLworCUZGIChjLCBkLCBhLCBiLCB4WzEwXSwgUzEzLCAweGZmZmY1YmIxKTsgLyogMTEgKi8KKwlGRiAoYiwgYywgZCwgYSwgeFsxMV0sIFMxNCwgMHg4OTVjZDdiZSk7IC8qIDEyICovCisJRkYgKGEsIGIsIGMsIGQsIHhbMTJdLCBTMTEsIDB4NmI5MDExMjIpOyAvKiAxMyAqLworCUZGIChkLCBhLCBiLCBjLCB4WzEzXSwgUzEyLCAweGZkOTg3MTkzKTsgLyogMTQgKi8KKwlGRiAoYywgZCwgYSwgYiwgeFsxNF0sIFMxMywgMHhhNjc5NDM4ZSk7IC8qIDE1ICovCisJRkYgKGIsIGMsIGQsIGEsIHhbMTVdLCBTMTQsIDB4NDliNDA4MjEpOyAvKiAxNiAqLworCisJLyogUm91bmQgMiAqLworI2RlZmluZSBTMjEgNQorI2RlZmluZSBTMjIgOQorI2RlZmluZSBTMjMgMTQKKyNkZWZpbmUgUzI0IDIwCisJR0cgKGEsIGIsIGMsIGQsIHhbIDFdLCBTMjEsIDB4ZjYxZTI1NjIpOyAvKiAxNyAqLworCUdHIChkLCBhLCBiLCBjLCB4WyA2XSwgUzIyLCAweGMwNDBiMzQwKTsgLyogMTggKi8KKwlHRyAoYywgZCwgYSwgYiwgeFsxMV0sIFMyMywgMHgyNjVlNWE1MSk7IC8qIDE5ICovCisJR0cgKGIsIGMsIGQsIGEsIHhbIDBdLCBTMjQsIDB4ZTliNmM3YWEpOyAvKiAyMCAqLworCUdHIChhLCBiLCBjLCBkLCB4WyA1XSwgUzIxLCAweGQ2MmYxMDVkKTsgLyogMjEgKi8KKwlHRyAoZCwgYSwgYiwgYywgeFsxMF0sIFMyMiwgIDB4MjQ0MTQ1Myk7IC8qIDIyICovCisJR0cgKGMsIGQsIGEsIGIsIHhbMTVdLCBTMjMsIDB4ZDhhMWU2ODEpOyAvKiAyMyAqLworCUdHIChiLCBjLCBkLCBhLCB4WyA0XSwgUzI0LCAweGU3ZDNmYmM4KTsgLyogMjQgKi8KKwlHRyAoYSwgYiwgYywgZCwgeFsgOV0sIFMyMSwgMHgyMWUxY2RlNik7IC8qIDI1ICovCisJR0cgKGQsIGEsIGIsIGMsIHhbMTRdLCBTMjIsIDB4YzMzNzA3ZDYpOyAvKiAyNiAqLworCUdHIChjLCBkLCBhLCBiLCB4WyAzXSwgUzIzLCAweGY0ZDUwZDg3KTsgLyogMjcgKi8KKwlHRyAoYiwgYywgZCwgYSwgeFsgOF0sIFMyNCwgMHg0NTVhMTRlZCk7IC8qIDI4ICovCisJR0cgKGEsIGIsIGMsIGQsIHhbMTNdLCBTMjEsIDB4YTllM2U5MDUpOyAvKiAyOSAqLworCUdHIChkLCBhLCBiLCBjLCB4WyAyXSwgUzIyLCAweGZjZWZhM2Y4KTsgLyogMzAgKi8KKwlHRyAoYywgZCwgYSwgYiwgeFsgN10sIFMyMywgMHg2NzZmMDJkOSk7IC8qIDMxICovCisJR0cgKGIsIGMsIGQsIGEsIHhbMTJdLCBTMjQsIDB4OGQyYTRjOGEpOyAvKiAzMiAqLworCisJLyogUm91bmQgMyAqLworI2RlZmluZSBTMzEgNAorI2RlZmluZSBTMzIgMTEKKyNkZWZpbmUgUzMzIDE2CisjZGVmaW5lIFMzNCAyMworCUhIIChhLCBiLCBjLCBkLCB4WyA1XSwgUzMxLCAweGZmZmEzOTQyKTsgLyogMzMgKi8KKwlISCAoZCwgYSwgYiwgYywgeFsgOF0sIFMzMiwgMHg4NzcxZjY4MSk7IC8qIDM0ICovCisJSEggKGMsIGQsIGEsIGIsIHhbMTFdLCBTMzMsIDB4NmQ5ZDYxMjIpOyAvKiAzNSAqLworCUhIIChiLCBjLCBkLCBhLCB4WzE0XSwgUzM0LCAweGZkZTUzODBjKTsgLyogMzYgKi8KKwlISCAoYSwgYiwgYywgZCwgeFsgMV0sIFMzMSwgMHhhNGJlZWE0NCk7IC8qIDM3ICovCisJSEggKGQsIGEsIGIsIGMsIHhbIDRdLCBTMzIsIDB4NGJkZWNmYTkpOyAvKiAzOCAqLworCUhIIChjLCBkLCBhLCBiLCB4WyA3XSwgUzMzLCAweGY2YmI0YjYwKTsgLyogMzkgKi8KKwlISCAoYiwgYywgZCwgYSwgeFsxMF0sIFMzNCwgMHhiZWJmYmM3MCk7IC8qIDQwICovCisJSEggKGEsIGIsIGMsIGQsIHhbMTNdLCBTMzEsIDB4Mjg5YjdlYzYpOyAvKiA0MSAqLworCUhIIChkLCBhLCBiLCBjLCB4WyAwXSwgUzMyLCAweGVhYTEyN2ZhKTsgLyogNDIgKi8KKwlISCAoYywgZCwgYSwgYiwgeFsgM10sIFMzMywgMHhkNGVmMzA4NSk7IC8qIDQzICovCisJSEggKGIsIGMsIGQsIGEsIHhbIDZdLCBTMzQsICAweDQ4ODFkMDUpOyAvKiA0NCAqLworCUhIIChhLCBiLCBjLCBkLCB4WyA5XSwgUzMxLCAweGQ5ZDRkMDM5KTsgLyogNDUgKi8KKwlISCAoZCwgYSwgYiwgYywgeFsxMl0sIFMzMiwgMHhlNmRiOTllNSk7IC8qIDQ2ICovCisJSEggKGMsIGQsIGEsIGIsIHhbMTVdLCBTMzMsIDB4MWZhMjdjZjgpOyAvKiA0NyAqLworCUhIIChiLCBjLCBkLCBhLCB4WyAyXSwgUzM0LCAweGM0YWM1NjY1KTsgLyogNDggKi8KKworCS8qIFJvdW5kIDQgKi8KKyNkZWZpbmUgUzQxIDYKKyNkZWZpbmUgUzQyIDEwCisjZGVmaW5lIFM0MyAxNQorI2RlZmluZSBTNDQgMjEKKwlJSSAoYSwgYiwgYywgZCwgeFsgMF0sIFM0MSwgMHhmNDI5MjI0NCk7IC8qIDQ5ICovCisJSUkgKGQsIGEsIGIsIGMsIHhbIDddLCBTNDIsIDB4NDMyYWZmOTcpOyAvKiA1MCAqLworCUlJIChjLCBkLCBhLCBiLCB4WzE0XSwgUzQzLCAweGFiOTQyM2E3KTsgLyogNTEgKi8KKwlJSSAoYiwgYywgZCwgYSwgeFsgNV0sIFM0NCwgMHhmYzkzYTAzOSk7IC8qIDUyICovCisJSUkgKGEsIGIsIGMsIGQsIHhbMTJdLCBTNDEsIDB4NjU1YjU5YzMpOyAvKiA1MyAqLworCUlJIChkLCBhLCBiLCBjLCB4WyAzXSwgUzQyLCAweDhmMGNjYzkyKTsgLyogNTQgKi8KKwlJSSAoYywgZCwgYSwgYiwgeFsxMF0sIFM0MywgMHhmZmVmZjQ3ZCk7IC8qIDU1ICovCisJSUkgKGIsIGMsIGQsIGEsIHhbIDFdLCBTNDQsIDB4ODU4NDVkZDEpOyAvKiA1NiAqLworCUlJIChhLCBiLCBjLCBkLCB4WyA4XSwgUzQxLCAweDZmYTg3ZTRmKTsgLyogNTcgKi8KKwlJSSAoZCwgYSwgYiwgYywgeFsxNV0sIFM0MiwgMHhmZTJjZTZlMCk7IC8qIDU4ICovCisJSUkgKGMsIGQsIGEsIGIsIHhbIDZdLCBTNDMsIDB4YTMwMTQzMTQpOyAvKiA1OSAqLworCUlJIChiLCBjLCBkLCBhLCB4WzEzXSwgUzQ0LCAweDRlMDgxMWExKTsgLyogNjAgKi8KKwlJSSAoYSwgYiwgYywgZCwgeFsgNF0sIFM0MSwgMHhmNzUzN2U4Mik7IC8qIDYxICovCisJSUkgKGQsIGEsIGIsIGMsIHhbMTFdLCBTNDIsIDB4YmQzYWYyMzUpOyAvKiA2MiAqLworCUlJIChjLCBkLCBhLCBiLCB4WyAyXSwgUzQzLCAweDJhZDdkMmJiKTsgLyogNjMgKi8KKwlJSSAoYiwgYywgZCwgYSwgeFsgOV0sIFM0NCwgMHhlYjg2ZDM5MSk7IC8qIDY0ICovCisKKwlzdGF0ZVswXSArPSBhOworCXN0YXRlWzFdICs9IGI7CisJc3RhdGVbMl0gKz0gYzsKKwlzdGF0ZVszXSArPSBkOworCisJLyogWmVyb2l6ZSBzZW5zaXRpdmUgaW5mb3JtYXRpb24uICovCisJbWVtc2V0ICgodm9pZCAqKXgsIDAsIHNpemVvZiAoeCkpOworfQpkaWZmIC0tZ2l0IGEvbWQ1L21kNS5oIGIvbWQ1L21kNS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1MWUyNTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZDUvbWQ1LmgKQEAgLTAsMCArMSw0OSBAQAorLyogTUQ1LkggLSBoZWFkZXIgZmlsZSBmb3IgTUQ1Qy5DCisgKiAkRnJlZUJTRCQKKyAqLworCisvKi0KKyBDb3B5cmlnaHQgKEMpIDE5OTEtMiwgUlNBIERhdGEgU2VjdXJpdHksIEluYy4gQ3JlYXRlZCAxOTkxLiBBbGwKK3JpZ2h0cyByZXNlcnZlZC4KKworTGljZW5zZSB0byBjb3B5IGFuZCB1c2UgdGhpcyBzb2Z0d2FyZSBpcyBncmFudGVkIHByb3ZpZGVkIHRoYXQgaXQKK2lzIGlkZW50aWZpZWQgYXMgdGhlICJSU0EgRGF0YSBTZWN1cml0eSwgSW5jLiBNRDUgTWVzc2FnZS1EaWdlc3QKK0FsZ29yaXRobSIgaW4gYWxsIG1hdGVyaWFsIG1lbnRpb25pbmcgb3IgcmVmZXJlbmNpbmcgdGhpcyBzb2Z0d2FyZQorb3IgdGhpcyBmdW5jdGlvbi4KKworTGljZW5zZSBpcyBhbHNvIGdyYW50ZWQgdG8gbWFrZSBhbmQgdXNlIGRlcml2YXRpdmUgd29ya3MgcHJvdmlkZWQKK3RoYXQgc3VjaCB3b3JrcyBhcmUgaWRlbnRpZmllZCBhcyAiZGVyaXZlZCBmcm9tIHRoZSBSU0EgRGF0YQorU2VjdXJpdHksIEluYy4gTUQ1IE1lc3NhZ2UtRGlnZXN0IEFsZ29yaXRobSIgaW4gYWxsIG1hdGVyaWFsCittZW50aW9uaW5nIG9yIHJlZmVyZW5jaW5nIHRoZSBkZXJpdmVkIHdvcmsuCisKK1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBjb25jZXJuaW5nIGVpdGhlcgordGhlIG1lcmNoYW50YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIG9yIHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzCitzb2Z0d2FyZSBmb3IgYW55IHBhcnRpY3VsYXIgcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIgord2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkgb2YgYW55IGtpbmQuCisKK1RoZXNlIG5vdGljZXMgbXVzdCBiZSByZXRhaW5lZCBpbiBhbnkgY29waWVzIG9mIGFueSBwYXJ0IG9mIHRoaXMKK2RvY3VtZW50YXRpb24gYW5kL29yIHNvZnR3YXJlLgorICovCisKKyNpZm5kZWYgX1NZU19NRDVfSF8KKyNkZWZpbmUgX1NZU19NRDVfSF8KKworI2RlZmluZSBNRDVfQkxPQ0tfTEVOR1RICQk2NAorI2RlZmluZSBNRDVfRElHRVNUX0xFTkdUSAkJMTYKKyNkZWZpbmUgTUQ1X0RJR0VTVF9TVFJJTkdfTEVOR1RICShNRDVfRElHRVNUX0xFTkdUSCAqIDIgKyAxKQorCisvKiBNRDUgY29udGV4dC4gKi8KK3R5cGVkZWYgc3RydWN0IE1ENUNvbnRleHQgeworICB1bnNpZ25lZCBpbnQgc3RhdGVbNF07CS8qIHN0YXRlIChBQkNEKSAqLworICB1bnNpZ25lZCBpbnQgY291bnRbMl07CS8qIG51bWJlciBvZiBiaXRzLCBtb2R1bG8gMl42NCAobHNiIGZpcnN0KSAqLworICB1bnNpZ25lZCBjaGFyIGJ1ZmZlcls2NF07CS8qIGlucHV0IGJ1ZmZlciAqLworfSBNRDVfQ1RYOworCit2b2lkICAgTUQ1SW5pdCAoTUQ1X0NUWCAqKTsKK3ZvaWQgICBNRDVVcGRhdGUgKE1ENV9DVFggKiwgY29uc3Qgdm9pZCAqLCB1bnNpZ25lZCBpbnQpOwordm9pZCAgIE1ENUZpbmFsICh1bnNpZ25lZCBjaGFyIFsxNl0sIE1ENV9DVFggKik7CitjaGFyICogTUQ1RW5kKE1ENV9DVFggKiwgY2hhciAqKTsKK2NoYXIgKiBNRDVGaWxlKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKK2NoYXIgKiBNRDVGaWxlQ2h1bmsoY29uc3QgY2hhciAqLCBjaGFyICosIG9mZl90LCBvZmZfdCk7CitjaGFyICogTUQ1RGF0YShjb25zdCB2b2lkICosIHVuc2lnbmVkIGludCwgY2hhciAqKTsKKyNlbmRpZiAvKiBfU1lTX01ENV9IXyAqLwpkaWZmIC0tZ2l0IGEvamF2YS9vcmcvbGlianBlZ3R1cmJvL3R1cmJvanBlZy9USkxvYWRlci5qYXZhIGIvbWQ1L21kNWNtcC5jCnNpbWlsYXJpdHkgaW5kZXggNjglCnJlbmFtZSBmcm9tIGphdmEvb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpMb2FkZXIuamF2YQpyZW5hbWUgdG8gbWQ1L21kNWNtcC5jCmluZGV4IGRiNzdiYmEuLjA3YWNkYTQgMTAwNjQ0Ci0tLSBhL2phdmEvb3JnL2xpYmpwZWd0dXJiby90dXJib2pwZWcvVEpMb2FkZXIuamF2YQorKysgYi9tZDUvbWQ1Y21wLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKTIwMTEgRC4gUi4gQ29tbWFuZGVyLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykyMDEzIEQuIFIuIENvbW1hbmRlci4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKQEAgLTI2LDEwICsyNiwzNCBAQAogICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotcGFja2FnZSBvcmcubGlianBlZ3R1cmJvLnR1cmJvanBlZzsKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgIi4vbWQ1LmgiCiAKLWZpbmFsIGNsYXNzIFRKTG9hZGVyIHsKLSAgc3RhdGljIHZvaWQgbG9hZCgpIHsKLSAgICBTeXN0ZW0ubG9hZExpYnJhcnkoInR1cmJvanBlZyIpOwotICB9Ci19OworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwljaGFyICptZDVzdW0gPSBOVUxMLCBidWZbNjVdOworCisJaWYgKGFyZ2MgPCAzKSB7CisJCWZwcmludGYoc3RkZXJyLCAiVVNBR0U6ICVzIDxjb3JyZWN0IE1ENSBzdW0+IDxmaWxlPlxuIiwgYXJndlswXSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoc3RybGVuKGFyZ3ZbMV0pICE9IDMyKQorCQlmcHJpbnRmKHN0ZGVyciwgIldBUk5JTkc6IE1ENSBoYXNoIHNpemUgaXMgd3JvbmcuXG4iKTsKKworCW1kNXN1bSA9IE1ENUZpbGUoYXJndlsyXSwgYnVmKTsKKwlpZiAoIW1kNXN1bSkgeworCQlwZXJyb3IoIkNvdWxkIG5vdCBvYnRhaW4gTUQ1IHN1bSIpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKCFzdHJjYXNlY21wKG1kNXN1bSwgYXJndlsxXSkpIHsKKwkJZnByaW50ZihzdGRlcnIsICIlczogT0tcbiIsIGFyZ3ZbMl0pOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBGQUlMRUQuICBDaGVja3N1bSBpcyAlc1xuIiwgYXJndlsyXSwgbWQ1c3VtKTsKKwkJcmV0dXJuIC0xOworCX0KK30KZGlmZiAtLWdpdCBhL21kNS9tZDVobC5jIGIvbWQ1L21kNWhsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFhNDFlMgotLS0gL2Rldi9udWxsCisrKyBiL21kNS9tZDVobC5jCkBAIC0wLDAgKzEsOTcgQEAKKy8qIG1kWGhsLmMgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAiVEhFIEJFRVItV0FSRSBMSUNFTlNFIiAoUmV2aXNpb24gNDIpOgorICogPHBoa0BGcmVlQlNELm9yZz4gd3JvdGUgdGhpcyBmaWxlLiAgQXMgbG9uZyBhcyB5b3UgcmV0YWluIHRoaXMgbm90aWNlIHlvdQorICogY2FuIGRvIHdoYXRldmVyIHlvdSB3YW50IHdpdGggdGhpcyBzdHVmZi4gSWYgd2UgbWVldCBzb21lIGRheSwgYW5kIHlvdSB0aGluaworICogdGhpcyBzdHVmZiBpcyB3b3J0aCBpdCwgeW91IGNhbiBidXkgbWUgYSBiZWVyIGluIHJldHVybi4gICBQb3VsLUhlbm5pbmcgS2FtcAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNkZWZpbmUgTEVOR1RIIDE2CisKKyNpbmNsdWRlICIuL21kNS5oIgorCitjaGFyICoKK01ENUVuZChNRDVfQ1RYICpjdHgsIGNoYXIgKmJ1ZikKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBjaGFyIGRpZ2VzdFtMRU5HVEhdOworCXN0YXRpYyBjb25zdCBjaGFyIGhleFtdPSIwMTIzNDU2Nzg5YWJjZGVmIjsKKworCWlmICghYnVmKQorCQlidWYgPSBtYWxsb2MoMipMRU5HVEggKyAxKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIDA7CisJTUQ1RmluYWwoZGlnZXN0LCBjdHgpOworCWZvciAoaSA9IDA7IGkgPCBMRU5HVEg7IGkrKykgeworCQlidWZbaStpXSA9IGhleFtkaWdlc3RbaV0gPj4gNF07CisJCWJ1ZltpK2krMV0gPSBoZXhbZGlnZXN0W2ldICYgMHgwZl07CisJfQorCWJ1ZltpK2ldID0gJ1wwJzsKKwlyZXR1cm4gYnVmOworfQorCitjaGFyICoKK01ENUZpbGUoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gKE1ENUZpbGVDaHVuayhmaWxlbmFtZSwgYnVmLCAwLCAwKSk7Cit9CisKK2NoYXIgKgorTUQ1RmlsZUNodW5rKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjaGFyICpidWYsIG9mZl90IG9mcywgb2ZmX3QgbGVuKQoreworCXVuc2lnbmVkIGNoYXIgYnVmZmVyW0JVRlNJWl07CisJTUQ1X0NUWCBjdHg7CisJc3RydWN0IHN0YXQgc3RidWY7CisJaW50IGYsIGksIGU7CisJb2ZmX3QgbjsKKworCU1ENUluaXQoJmN0eCk7CisJZiA9IG9wZW4oZmlsZW5hbWUsIE9fUkRPTkxZKTsKKwlpZiAoZiA8IDApCisJCXJldHVybiAwOworCWlmIChmc3RhdChmLCAmc3RidWYpIDwgMCkKKwkJcmV0dXJuIDA7CisJaWYgKG9mcyA+IHN0YnVmLnN0X3NpemUpCisJCW9mcyA9IHN0YnVmLnN0X3NpemU7CisJaWYgKChsZW4gPT0gMCkgfHwgKGxlbiA+IHN0YnVmLnN0X3NpemUgLSBvZnMpKQorCQlsZW4gPSBzdGJ1Zi5zdF9zaXplIC0gb2ZzOworCWlmIChsc2VlayhmLCBvZnMsIFNFRUtfU0VUKSA8IDApCisJCXJldHVybiAwOworCW4gPSBsZW47CisJaSA9IDA7CisJd2hpbGUgKG4gPiAwKSB7CisJCWlmIChuID4gc2l6ZW9mKGJ1ZmZlcikpCisJCQlpID0gcmVhZChmLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsKKwkJZWxzZQorCQkJaSA9IHJlYWQoZiwgYnVmZmVyLCBuKTsKKwkJaWYgKGkgPCAwKSAKKwkJCWJyZWFrOworCQlNRDVVcGRhdGUoJmN0eCwgYnVmZmVyLCBpKTsKKwkJbiAtPSBpOworCX0gCisJZSA9IGVycm5vOworCWNsb3NlKGYpOworCWVycm5vID0gZTsKKwlpZiAoaSA8IDApCisJCXJldHVybiAwOworCXJldHVybiAoTUQ1RW5kKCZjdHgsIGJ1ZikpOworfQorCitjaGFyICoKK01ENURhdGEgKGNvbnN0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBsZW4sIGNoYXIgKmJ1ZikKK3sKKwlNRDVfQ1RYIGN0eDsKKworCU1ENUluaXQoJmN0eCk7CisJTUQ1VXBkYXRlKCZjdHgsZGF0YSxsZW4pOworCXJldHVybiAoTUQ1RW5kKCZjdHgsIGJ1ZikpOworfQpkaWZmIC0tZ2l0IGEvcmRibXAuYyBiL3JkYm1wLmMKaW5kZXggYzA1MzA3NC4uMGIyMzUxZCAxMDA2NDQKLS0tIGEvcmRibXAuYworKysgYi9yZGJtcC5jCkBAIC00LDcgKzQsNyBAQAogICogVGhpcyBmaWxlIHdhcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmU6CiAgKiBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5NiwgVGhvbWFzIEcuIExhbmUuCiAgKiBNb2RpZmllZCAyMDA5LTIwMTAgYnkgR3VpZG8gVm9sbGJlZGluZy4KLSAqIE1vZGlmaWNhdGlvbnM6CisgKiBsaWJqcGVnLXR1cmJvIE1vZGlmaWNhdGlvbnM6CiAgKiBNb2RpZmllZCAyMDExIGJ5IFNpYXJoZWkgU2lhbWFzaGthLgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgogICoKQEAgLTI0LDcgKzI0LDcgQEAKICAqIFRoaXMgY29kZSBjb250cmlidXRlZCBieSBKYW1lcyBBcnRodXIgQm91Y2hlci4KICAqLwogCi0jaW5jbHVkZSAiY2RqcGVnLmgiCQkvKiBDb21tb24gZGVjbHMgZm9yIGNqcGVnL2RqcGVnIGFwcGxpY2F0aW9ucyAqLworI2luY2x1ZGUgImNkanBlZy5oIiAgICAgICAgICAgICAvKiBDb21tb24gZGVjbHMgZm9yIGNqcGVnL2RqcGVnIGFwcGxpY2F0aW9ucyAqLwogCiAjaWZkZWYgQk1QX1NVUFBPUlRFRAogCkBAIC0zMywxOSArMzMsMTkgQEAKIAogI2lmZGVmIEhBVkVfVU5TSUdORURfQ0hBUgogdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFVfQ0hBUjsKLSNkZWZpbmUgVUNIKHgpCSgoaW50KSAoeCkpCisjZGVmaW5lIFVDSCh4KSAgKChpbnQpICh4KSkKICNlbHNlIC8qICFIQVZFX1VOU0lHTkVEX0NIQVIgKi8KLSNpZmRlZiBDSEFSX0lTX1VOU0lHTkVECisjaWZkZWYgX19DSEFSX1VOU0lHTkVEX18KIHR5cGVkZWYgY2hhciBVX0NIQVI7Ci0jZGVmaW5lIFVDSCh4KQkoKGludCkgKHgpKQorI2RlZmluZSBVQ0goeCkgICgoaW50KSAoeCkpCiAjZWxzZQogdHlwZWRlZiBjaGFyIFVfQ0hBUjsKLSNkZWZpbmUgVUNIKHgpCSgoaW50KSAoeCkgJiAweEZGKQorI2RlZmluZSBVQ0goeCkgICgoaW50KSAoeCkgJiAweEZGKQogI2VuZGlmCiAjZW5kaWYgLyogSEFWRV9VTlNJR05FRF9DSEFSICovCiAKIAotI2RlZmluZQlSZWFkT0soZmlsZSxidWZmZXIsbGVuKQkoSkZSRUFEKGZpbGUsYnVmZmVyLGxlbikgPT0gKChzaXplX3QpIChsZW4pKSkKKyNkZWZpbmUgUmVhZE9LKGZpbGUsYnVmZmVyLGxlbikgKEpGUkVBRChmaWxlLGJ1ZmZlcixsZW4pID09ICgoc2l6ZV90KSAobGVuKSkpCiAKIAogLyogUHJpdmF0ZSB2ZXJzaW9uIG9mIGRhdGEgc291cmNlIG9iamVjdCAqLwpAQCAtNTUsMTUgKzU1LDE1IEBACiB0eXBlZGVmIHN0cnVjdCBfYm1wX3NvdXJjZV9zdHJ1Y3QgewogICBzdHJ1Y3QgY2pwZWdfc291cmNlX3N0cnVjdCBwdWI7IC8qIHB1YmxpYyBmaWVsZHMgKi8KIAotICBqX2NvbXByZXNzX3B0ciBjaW5mbzsJCS8qIGJhY2sgbGluayBzYXZlcyBwYXNzaW5nIHNlcGFyYXRlIHBhcm0gKi8KKyAgal9jb21wcmVzc19wdHIgY2luZm87ICAgICAgICAgLyogYmFjayBsaW5rIHNhdmVzIHBhc3Npbmcgc2VwYXJhdGUgcGFybSAqLwogCi0gIEpTQU1QQVJSQVkgY29sb3JtYXA7CQkvKiBCTVAgY29sb3JtYXAgKGNvbnZlcnRlZCB0byBteSBmb3JtYXQpICovCisgIEpTQU1QQVJSQVkgY29sb3JtYXA7ICAgICAgICAgIC8qIEJNUCBjb2xvcm1hcCAoY29udmVydGVkIHRvIG15IGZvcm1hdCkgKi8KIAotICBqdmlydF9zYXJyYXlfcHRyIHdob2xlX2ltYWdlOwkvKiBOZWVkZWQgdG8gcmV2ZXJzZSByb3cgb3JkZXIgKi8KLSAgSkRJTUVOU0lPTiBzb3VyY2Vfcm93OwkvKiBDdXJyZW50IHNvdXJjZSByb3cgbnVtYmVyICovCi0gIEpESU1FTlNJT04gcm93X3dpZHRoOwkJLyogUGh5c2ljYWwgd2lkdGggb2Ygc2NhbmxpbmVzIGluIGZpbGUgKi8KKyAganZpcnRfc2FycmF5X3B0ciB3aG9sZV9pbWFnZTsgLyogTmVlZGVkIHRvIHJldmVyc2Ugcm93IG9yZGVyICovCisgIEpESU1FTlNJT04gc291cmNlX3JvdzsgICAgICAgIC8qIEN1cnJlbnQgc291cmNlIHJvdyBudW1iZXIgKi8KKyAgSkRJTUVOU0lPTiByb3dfd2lkdGg7ICAgICAgICAgLyogUGh5c2ljYWwgd2lkdGggb2Ygc2NhbmxpbmVzIGluIGZpbGUgKi8KIAotICBpbnQgYml0c19wZXJfcGl4ZWw7CQkvKiByZW1lbWJlcnMgOC0gb3IgMjQtYml0IGZvcm1hdCAqLworICBpbnQgYml0c19wZXJfcGl4ZWw7ICAgICAgICAgICAvKiByZW1lbWJlcnMgOC0gb3IgMjQtYml0IGZvcm1hdCAqLwogfSBibXBfc291cmNlX3N0cnVjdDsKIAogCkBAIC0xNDAsNyArMTQwLDcgQEAKICAgb3V0cHRyID0gc291cmNlLT5wdWIuYnVmZmVyWzBdOwogICBmb3IgKGNvbCA9IGNpbmZvLT5pbWFnZV93aWR0aDsgY29sID4gMDsgY29sLS0pIHsKICAgICB0ID0gR0VUSlNBTVBMRSgqaW5wdHIrKyk7Ci0gICAgKm91dHB0cisrID0gY29sb3JtYXBbMF1bdF07CS8qIGNhbiBvbWl0IEdFVEpTQU1QTEUoKSBzYWZlbHkgKi8KKyAgICAqb3V0cHRyKysgPSBjb2xvcm1hcFswXVt0XTsgLyogY2FuIG9taXQgR0VUSlNBTVBMRSgpIHNhZmVseSAqLwogICAgICpvdXRwdHIrKyA9IGNvbG9ybWFwWzFdW3RdOwogICAgICpvdXRwdHIrKyA9IGNvbG9ybWFwWzJdW3RdOwogICB9CkBAIC0xNzAsNyArMTcwLDcgQEAKICAgaW5wdHIgPSBpbWFnZV9wdHJbMF07CiAgIG91dHB0ciA9IHNvdXJjZS0+cHViLmJ1ZmZlclswXTsKICAgZm9yIChjb2wgPSBjaW5mby0+aW1hZ2Vfd2lkdGg7IGNvbCA+IDA7IGNvbC0tKSB7Ci0gICAgb3V0cHRyWzJdID0gKmlucHRyKys7CS8qIGNhbiBvbWl0IEdFVEpTQU1QTEUoKSBzYWZlbHkgKi8KKyAgICBvdXRwdHJbMl0gPSAqaW5wdHIrKzsgICAgICAgLyogY2FuIG9taXQgR0VUSlNBTVBMRSgpIHNhZmVseSAqLwogICAgIG91dHB0clsxXSA9ICppbnB0cisrOwogICAgIG91dHB0clswXSA9ICppbnB0cisrOwogICAgIG91dHB0ciArPSAzOwpAQCAtMjAwLDEwICsyMDAsMTAgQEAKICAgaW5wdHIgPSBpbWFnZV9wdHJbMF07CiAgIG91dHB0ciA9IHNvdXJjZS0+cHViLmJ1ZmZlclswXTsKICAgZm9yIChjb2wgPSBjaW5mby0+aW1hZ2Vfd2lkdGg7IGNvbCA+IDA7IGNvbC0tKSB7Ci0gICAgb3V0cHRyWzJdID0gKmlucHRyKys7CS8qIGNhbiBvbWl0IEdFVEpTQU1QTEUoKSBzYWZlbHkgKi8KKyAgICBvdXRwdHJbMl0gPSAqaW5wdHIrKzsgICAgICAgLyogY2FuIG9taXQgR0VUSlNBTVBMRSgpIHNhZmVseSAqLwogICAgIG91dHB0clsxXSA9ICppbnB0cisrOwogICAgIG91dHB0clswXSA9ICppbnB0cisrOwotICAgIGlucHRyKys7CQkJLyogc2tpcCB0aGUgNHRoIGJ5dGUgKEFscGhhIGNoYW5uZWwpICovCisgICAgaW5wdHIrKzsgICAgICAgICAgICAgICAgICAgIC8qIHNraXAgdGhlIDR0aCBieXRlIChBbHBoYSBjaGFubmVsKSAqLwogICAgIG91dHB0ciArPSAzOwogICB9CiAKQEAgLTI4MCwxMSArMjgwLDExIEBACiAgIFVfQ0hBUiBibXBmaWxlaGVhZGVyWzE0XTsKICAgVV9DSEFSIGJtcGluZm9oZWFkZXJbNjRdOwogI2RlZmluZSBHRVRfMkIoYXJyYXksb2Zmc2V0KSAgKCh1bnNpZ25lZCBpbnQpIFVDSChhcnJheVtvZmZzZXRdKSArIFwKLQkJCSAgICAgICAoKCh1bnNpZ25lZCBpbnQpIFVDSChhcnJheVtvZmZzZXQrMV0pKSA8PCA4KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1bnNpZ25lZCBpbnQpIFVDSChhcnJheVtvZmZzZXQrMV0pKSA8PCA4KSkKICNkZWZpbmUgR0VUXzRCKGFycmF5LG9mZnNldCkgICgoSU5UMzIpIFVDSChhcnJheVtvZmZzZXRdKSArIFwKLQkJCSAgICAgICAoKChJTlQzMikgVUNIKGFycmF5W29mZnNldCsxXSkpIDw8IDgpICsgXAotCQkJICAgICAgICgoKElOVDMyKSBVQ0goYXJyYXlbb2Zmc2V0KzJdKSkgPDwgMTYpICsgXAotCQkJICAgICAgICgoKElOVDMyKSBVQ0goYXJyYXlbb2Zmc2V0KzNdKSkgPDwgMjQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKElOVDMyKSBVQ0goYXJyYXlbb2Zmc2V0KzFdKSkgPDwgOCkgKyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoSU5UMzIpIFVDSChhcnJheVtvZmZzZXQrMl0pKSA8PCAxNikgKyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoSU5UMzIpIFVDSChhcnJheVtvZmZzZXQrM10pKSA8PCAyNCkpCiAgIElOVDMyIGJmT2ZmQml0czsKICAgSU5UMzIgaGVhZGVyU2l6ZTsKICAgSU5UMzIgYmlXaWR0aDsKQEAgLTI5Myw3ICsyOTMsNyBAQAogICBJTlQzMiBiaUNvbXByZXNzaW9uOwogICBJTlQzMiBiaVhQZWxzUGVyTWV0ZXIsYmlZUGVsc1Blck1ldGVyOwogICBJTlQzMiBiaUNsclVzZWQgPSAwOwotICBpbnQgbWFwZW50cnlzaXplID0gMDsJCS8qIDAgaW5kaWNhdGVzIG5vIGNvbG9ybWFwICovCisgIGludCBtYXBlbnRyeXNpemUgPSAwOyAgICAgICAgIC8qIDAgaW5kaWNhdGVzIG5vIGNvbG9ybWFwICovCiAgIElOVDMyIGJQYWQ7CiAgIEpESU1FTlNJT04gcm93X3dpZHRoOwogCkBAIC0zMjUsMTEgKzMyNSwxMSBAQAogICAgIHNvdXJjZS0+Yml0c19wZXJfcGl4ZWwgPSAoaW50KSBHRVRfMkIoYm1waW5mb2hlYWRlciwxMCk7CiAKICAgICBzd2l0Y2ggKHNvdXJjZS0+Yml0c19wZXJfcGl4ZWwpIHsKLSAgICBjYXNlIDg6CQkJLyogY29sb3JtYXBwZWQgaW1hZ2UgKi8KLSAgICAgIG1hcGVudHJ5c2l6ZSA9IDM7CQkvKiBPUy8yIHVzZXMgUkdCVFJJUExFIGNvbG9ybWFwICovCisgICAgY2FzZSA4OiAgICAgICAgICAgICAgICAgICAgIC8qIGNvbG9ybWFwcGVkIGltYWdlICovCisgICAgICBtYXBlbnRyeXNpemUgPSAzOyAgICAgICAgIC8qIE9TLzIgdXNlcyBSR0JUUklQTEUgY29sb3JtYXAgKi8KICAgICAgIFRSQUNFTVMyKGNpbmZvLCAxLCBKVFJDX0JNUF9PUzJfTUFQUEVELCAoaW50KSBiaVdpZHRoLCAoaW50KSBiaUhlaWdodCk7CiAgICAgICBicmVhazsKLSAgICBjYXNlIDI0OgkJCS8qIFJHQiBpbWFnZSAqLworICAgIGNhc2UgMjQ6ICAgICAgICAgICAgICAgICAgICAvKiBSR0IgaW1hZ2UgKi8KICAgICAgIFRSQUNFTVMyKGNpbmZvLCAxLCBKVFJDX0JNUF9PUzIsIChpbnQpIGJpV2lkdGgsIChpbnQpIGJpSGVpZ2h0KTsKICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CkBAIC0zNTIsMTQgKzM1MiwxNCBAQAogICAgIC8qIGJpU2l6ZUltYWdlLCBiaUNsckltcG9ydGFudCBmaWVsZHMgYXJlIGlnbm9yZWQgKi8KIAogICAgIHN3aXRjaCAoc291cmNlLT5iaXRzX3Blcl9waXhlbCkgewotICAgIGNhc2UgODoJCQkvKiBjb2xvcm1hcHBlZCBpbWFnZSAqLwotICAgICAgbWFwZW50cnlzaXplID0gNDsJCS8qIFdpbmRvd3MgdXNlcyBSR0JRVUFEIGNvbG9ybWFwICovCisgICAgY2FzZSA4OiAgICAgICAgICAgICAgICAgICAgIC8qIGNvbG9ybWFwcGVkIGltYWdlICovCisgICAgICBtYXBlbnRyeXNpemUgPSA0OyAgICAgICAgIC8qIFdpbmRvd3MgdXNlcyBSR0JRVUFEIGNvbG9ybWFwICovCiAgICAgICBUUkFDRU1TMihjaW5mbywgMSwgSlRSQ19CTVBfTUFQUEVELCAoaW50KSBiaVdpZHRoLCAoaW50KSBiaUhlaWdodCk7CiAgICAgICBicmVhazsKLSAgICBjYXNlIDI0OgkJCS8qIFJHQiBpbWFnZSAqLworICAgIGNhc2UgMjQ6ICAgICAgICAgICAgICAgICAgICAvKiBSR0IgaW1hZ2UgKi8KICAgICAgIFRSQUNFTVMyKGNpbmZvLCAxLCBKVFJDX0JNUCwgKGludCkgYmlXaWR0aCwgKGludCkgYmlIZWlnaHQpOwogICAgICAgYnJlYWs7Ci0gICAgY2FzZSAzMjoJCQkvKiBSR0IgaW1hZ2UgKyBBbHBoYSBjaGFubmVsICovCisgICAgY2FzZSAzMjogICAgICAgICAgICAgICAgICAgIC8qIFJHQiBpbWFnZSArIEFscGhhIGNoYW5uZWwgKi8KICAgICAgIFRSQUNFTVMyKGNpbmZvLCAxLCBKVFJDX0JNUCwgKGludCkgYmlXaWR0aCwgKGludCkgYmlIZWlnaHQpOwogICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTM3Myw3ICszNzMsNyBAQAogICAgICAgLyogU2V0IEpGSUYgZGVuc2l0eSBwYXJhbWV0ZXJzIGZyb20gdGhlIEJNUCBkYXRhICovCiAgICAgICBjaW5mby0+WF9kZW5zaXR5ID0gKFVJTlQxNikgKGJpWFBlbHNQZXJNZXRlci8xMDApOyAvKiAxMDAgY20gcGVyIG1ldGVyICovCiAgICAgICBjaW5mby0+WV9kZW5zaXR5ID0gKFVJTlQxNikgKGJpWVBlbHNQZXJNZXRlci8xMDApOwotICAgICAgY2luZm8tPmRlbnNpdHlfdW5pdCA9IDI7CS8qIGRvdHMvY20gKi8KKyAgICAgIGNpbmZvLT5kZW5zaXR5X3VuaXQgPSAyOyAgLyogZG90cy9jbSAqLwogICAgIH0KICAgICBicmVhazsKICAgZGVmYXVsdDoKQEAgLTM5Miw3ICszOTIsNyBAQAogICAvKiBSZWFkIHRoZSBjb2xvcm1hcCwgaWYgYW55ICovCiAgIGlmIChtYXBlbnRyeXNpemUgPiAwKSB7CiAgICAgaWYgKGJpQ2xyVXNlZCA8PSAwKQotICAgICAgYmlDbHJVc2VkID0gMjU2OwkJLyogYXNzdW1lIGl0J3MgMjU2ICovCisgICAgICBiaUNsclVzZWQgPSAyNTY7ICAgICAgICAgIC8qIGFzc3VtZSBpdCdzIDI1NiAqLwogICAgIGVsc2UgaWYgKGJpQ2xyVXNlZCA+IDI1NikKICAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQk1QX0JBRENNQVApOwogICAgIC8qIEFsbG9jYXRlIHNwYWNlIHRvIHN0b3JlIHRoZSBjb2xvcm1hcCAqLwpAQCAtNDA2LDcgKzQwNiw3IEBACiAgIH0KIAogICAvKiBTa2lwIGFueSByZW1haW5pbmcgcGFkIGJ5dGVzICovCi0gIGlmIChiUGFkIDwgMCkJCQkvKiBpbmNvcnJlY3QgYmZPZmZCaXRzIHZhbHVlPyAqLworICBpZiAoYlBhZCA8IDApICAgICAgICAgICAgICAgICAvKiBpbmNvcnJlY3QgYmZPZmZCaXRzIHZhbHVlPyAqLwogICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQk1QX0JBREhFQURFUik7CiAgIHdoaWxlICgtLWJQYWQgPj0gMCkgewogICAgICh2b2lkKSByZWFkX2J5dGUoc291cmNlKTsKQEAgLTQ2OSw4ICs0NjksOCBAQAogICAvKiBDcmVhdGUgbW9kdWxlIGludGVyZmFjZSBvYmplY3QgKi8KICAgc291cmNlID0gKGJtcF9zb3VyY2VfcHRyKQogICAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKLQkJCQkgIFNJWkVPRihibXBfc291cmNlX3N0cnVjdCkpOwotICBzb3VyY2UtPmNpbmZvID0gY2luZm87CS8qIG1ha2UgYmFjayBsaW5rIGZvciBzdWJyb3V0aW5lcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJWkVPRihibXBfc291cmNlX3N0cnVjdCkpOworICBzb3VyY2UtPmNpbmZvID0gY2luZm87ICAgICAgICAvKiBtYWtlIGJhY2sgbGluayBmb3Igc3Vicm91dGluZXMgKi8KICAgLyogRmlsbCBpbiBtZXRob2QgcHRycywgZXhjZXB0IGdldF9waXhlbF9yb3dzIHdoaWNoIHN0YXJ0X2lucHV0IHNldHMgKi8KICAgc291cmNlLT5wdWIuc3RhcnRfaW5wdXQgPSBzdGFydF9pbnB1dF9ibXA7CiAgIHNvdXJjZS0+cHViLmZpbmlzaF9pbnB1dCA9IGZpbmlzaF9pbnB1dF9ibXA7CmRpZmYgLS1naXQgYS9yZGNvbG1hcC5jIGIvcmRjb2xtYXAuYwppbmRleCA0MmIzNDM3Li5hYzZmNTBlIDEwMDY0NAotLS0gYS9yZGNvbG1hcC5jCisrKyBiL3JkY29sbWFwLmMKQEAgLTIxLDkgKzIxLDkgQEAKICAqIGN1cnJlbnRseSBpbXBsZW1lbnRlZC4KICAqLwogCi0jaW5jbHVkZSAiY2RqcGVnLmgiCQkvKiBDb21tb24gZGVjbHMgZm9yIGNqcGVnL2RqcGVnIGFwcGxpY2F0aW9ucyAqLworI2luY2x1ZGUgImNkanBlZy5oIiAgICAgICAgICAgICAvKiBDb21tb24gZGVjbHMgZm9yIGNqcGVnL2RqcGVnIGFwcGxpY2F0aW9ucyAqLwogCi0jaWZkZWYgUVVBTlRfMlBBU1NfU1VQUE9SVEVECS8qIG90aGVyd2lzZSBjYW4ndCBxdWFudGl6ZSB0byBzdXBwbGllZCBtYXAgKi8KKyNpZmRlZiBRVUFOVF8yUEFTU19TVVBQT1JURUQgICAgLyogb3RoZXJ3aXNlIGNhbid0IHF1YW50aXplIHRvIHN1cHBsaWVkIG1hcCAqLwogCiAvKiBQb3J0aW9ucyBvZiB0aGlzIGNvZGUgYXJlIGJhc2VkIG9uIHRoZSBQQk1QTFVTIGxpYnJhcnksIHdoaWNoIGlzOgogKioKQEAgLTU0LDkgKzU0LDkgQEAKICAgLyogQ2hlY2sgZm9yIGR1cGxpY2F0ZSBjb2xvci4gKi8KICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgbmNvbG9yczsgaW5kZXgrKykgewogICAgIGlmIChHRVRKU0FNUExFKGNvbG9ybWFwMFtpbmRleF0pID09IFIgJiYKLQlHRVRKU0FNUExFKGNvbG9ybWFwMVtpbmRleF0pID09IEcgJiYKLQlHRVRKU0FNUExFKGNvbG9ybWFwMltpbmRleF0pID09IEIpCi0gICAgICByZXR1cm47CQkJLyogY29sb3IgaXMgYWxyZWFkeSBpbiBtYXAgKi8KKyAgICAgICAgR0VUSlNBTVBMRShjb2xvcm1hcDFbaW5kZXhdKSA9PSBHICYmCisgICAgICAgIEdFVEpTQU1QTEUoY29sb3JtYXAyW2luZGV4XSkgPT0gQikKKyAgICAgIHJldHVybjsgICAgICAgICAgICAgICAgICAgLyogY29sb3IgaXMgYWxyZWFkeSBpbiBtYXAgKi8KICAgfQogCiAgIC8qIENoZWNrIGZvciBtYXAgb3ZlcmZsb3cuICovCkBAIC0xMDcsOSArMTA3LDkgQEAKICAgICBpZiAoUiA9PSBFT0YgfHwgRyA9PSBFT0YgfHwgQiA9PSBFT0YpCiAgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9DTUFQX0ZJTEUpOwogICAgIGFkZF9tYXBfZW50cnkoY2luZm8sCi0JCSAgUiA8PCAoQklUU19JTl9KU0FNUExFLTgpLAotCQkgIEcgPDwgKEJJVFNfSU5fSlNBTVBMRS04KSwKLQkJICBCIDw8IChCSVRTX0lOX0pTQU1QTEUtOCkpOworICAgICAgICAgICAgICAgICAgUiA8PCAoQklUU19JTl9KU0FNUExFLTgpLAorICAgICAgICAgICAgICAgICAgRyA8PCAoQklUU19JTl9KU0FNUExFLTgpLAorICAgICAgICAgICAgICAgICAgQiA8PCAoQklUU19JTl9KU0FNUExFLTgpKTsKICAgfQogfQogCkBAIC0xMjMsNyArMTIzLDcgQEAKIC8qIEEgY29tbWVudC9uZXdsaW5lIHNlcXVlbmNlIGlzIHJldHVybmVkIGFzIGEgbmV3bGluZSAqLwogewogICByZWdpc3RlciBpbnQgY2g7Ci0gIAorCiAgIGNoID0gZ2V0YyhpbmZpbGUpOwogICBpZiAoY2ggPT0gJyMnKSB7CiAgICAgZG8gewpAQCAtMTQzLDE3ICsxNDMsMTcgQEAKIHsKICAgcmVnaXN0ZXIgaW50IGNoOwogICByZWdpc3RlciB1bnNpZ25lZCBpbnQgdmFsOwotICAKKwogICAvKiBTa2lwIGFueSBsZWFkaW5nIHdoaXRlc3BhY2UgKi8KICAgZG8gewogICAgIGNoID0gcGJtX2dldGMoaW5maWxlKTsKICAgICBpZiAoY2ggPT0gRU9GKQogICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfQ01BUF9GSUxFKTsKICAgfSB3aGlsZSAoY2ggPT0gJyAnIHx8IGNoID09ICdcdCcgfHwgY2ggPT0gJ1xuJyB8fCBjaCA9PSAnXHInKTsKLSAgCisKICAgaWYgKGNoIDwgJzAnIHx8IGNoID4gJzknKQogICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0NNQVBfRklMRSk7Ci0gIAorCiAgIHZhbCA9IGNoIC0gJzAnOwogICB3aGlsZSAoKGNoID0gcGJtX2dldGMoaW5maWxlKSkgPj0gJzAnICYmIGNoIDw9ICc5JykgewogICAgIHZhbCAqPSAxMDsKQEAgLTE3NSw3ICsxNzUsNyBAQAogICBpbnQgUiwgRywgQjsKIAogICAvKiBJbml0aWFsICdQJyBoYXMgYWxyZWFkeSBiZWVuIHJlYWQgYnkgcmVhZF9jb2xvcl9tYXAgKi8KLSAgYyA9IGdldGMoaW5maWxlKTsJCS8qIHNhdmUgZm9ybWF0IGRpc2NyaW1pbmF0b3IgZm9yIGEgc2VjICovCisgIGMgPSBnZXRjKGluZmlsZSk7ICAgICAgICAgICAgIC8qIHNhdmUgZm9ybWF0IGRpc2NyaW1pbmF0b3IgZm9yIGEgc2VjICovCiAKICAgLyogd2hpbGUgd2UgZmV0Y2ggdGhlIHJlbWFpbmluZyBoZWFkZXIgaW5mbyAqLwogICB3ID0gcmVhZF9wYm1faW50ZWdlcihjaW5mbywgaW5maWxlKTsKQEAgLTE5MCwyNiArMTkwLDI2IEBACiAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfQ01BUF9GSUxFKTsKIAogICBzd2l0Y2ggKGMpIHsKLSAgY2FzZSAnMyc6CQkJLyogaXQncyBhIHRleHQtZm9ybWF0IFBQTSBmaWxlICovCisgIGNhc2UgJzMnOiAgICAgICAgICAgICAgICAgICAgIC8qIGl0J3MgYSB0ZXh0LWZvcm1hdCBQUE0gZmlsZSAqLwogICAgIGZvciAocm93ID0gMDsgcm93IDwgaDsgcm93KyspIHsKICAgICAgIGZvciAoY29sID0gMDsgY29sIDwgdzsgY29sKyspIHsKLQlSID0gcmVhZF9wYm1faW50ZWdlcihjaW5mbywgaW5maWxlKTsKLQlHID0gcmVhZF9wYm1faW50ZWdlcihjaW5mbywgaW5maWxlKTsKLQlCID0gcmVhZF9wYm1faW50ZWdlcihjaW5mbywgaW5maWxlKTsKLQlhZGRfbWFwX2VudHJ5KGNpbmZvLCBSLCBHLCBCKTsKKyAgICAgICAgUiA9IHJlYWRfcGJtX2ludGVnZXIoY2luZm8sIGluZmlsZSk7CisgICAgICAgIEcgPSByZWFkX3BibV9pbnRlZ2VyKGNpbmZvLCBpbmZpbGUpOworICAgICAgICBCID0gcmVhZF9wYm1faW50ZWdlcihjaW5mbywgaW5maWxlKTsKKyAgICAgICAgYWRkX21hcF9lbnRyeShjaW5mbywgUiwgRywgQik7CiAgICAgICB9CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgJzYnOgkJCS8qIGl0J3MgYSByYXctZm9ybWF0IFBQTSBmaWxlICovCisgIGNhc2UgJzYnOiAgICAgICAgICAgICAgICAgICAgIC8qIGl0J3MgYSByYXctZm9ybWF0IFBQTSBmaWxlICovCiAgICAgZm9yIChyb3cgPSAwOyByb3cgPCBoOyByb3crKykgewogICAgICAgZm9yIChjb2wgPSAwOyBjb2wgPCB3OyBjb2wrKykgewotCVIgPSBnZXRjKGluZmlsZSk7Ci0JRyA9IGdldGMoaW5maWxlKTsKLQlCID0gZ2V0YyhpbmZpbGUpOwotCWlmIChSID09IEVPRiB8fCBHID09IEVPRiB8fCBCID09IEVPRikKLQkgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0NNQVBfRklMRSk7Ci0JYWRkX21hcF9lbnRyeShjaW5mbywgUiwgRywgQik7CisgICAgICAgIFIgPSBnZXRjKGluZmlsZSk7CisgICAgICAgIEcgPSBnZXRjKGluZmlsZSk7CisgICAgICAgIEIgPSBnZXRjKGluZmlsZSk7CisgICAgICAgIGlmIChSID09IEVPRiB8fCBHID09IEVPRiB8fCBCID09IEVPRikKKyAgICAgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9DTUFQX0ZJTEUpOworICAgICAgICBhZGRfbWFwX2VudHJ5KGNpbmZvLCBSLCBHLCBCKTsKICAgICAgIH0KICAgICB9CiAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9yZGdpZi5jIGIvcmRnaWYuYwppbmRleCBiMjdjMTY3Li41Y2FhZDhhIDEwMDY0NAotLS0gYS9yZGdpZi5jCisrKyBiL3JkZ2lmLmMKQEAgLTE5LDcgKzE5LDcgQEAKICAqICAgIENvbXB1U2VydmUgSW5jb3Jwb3JhdGVkLiIKICAqLwogCi0jaW5jbHVkZSAiY2RqcGVnLmgiCQkvKiBDb21tb24gZGVjbHMgZm9yIGNqcGVnL2RqcGVnIGFwcGxpY2F0aW9ucyAqLworI2luY2x1ZGUgImNkanBlZy5oIiAgICAgICAgICAgICAvKiBDb21tb24gZGVjbHMgZm9yIGNqcGVnL2RqcGVnIGFwcGxpY2F0aW9ucyAqLwogCiAjaWZkZWYgR0lGX1NVUFBPUlRFRAogCkBAIC0zMiw3ICszMiw3IEBACiB7CiAgIGZwcmludGYoc3RkZXJyLCAiR0lGIGlucHV0IGlzIHVuc3VwcG9ydGVkIGZvciBsZWdhbCByZWFzb25zLiAgU29ycnkuXG4iKTsKICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICByZXR1cm4gTlVMTDsJCQkvKiBrZWVwIGNvbXBpbGVyIGhhcHB5ICovCisgIHJldHVybiBOVUxMOyAgICAgICAgICAgICAgICAgIC8qIGtlZXAgY29tcGlsZXIgaGFwcHkgKi8KIH0KIAogI2VuZGlmIC8qIEdJRl9TVVBQT1JURUQgKi8KZGlmZiAtLWdpdCBhL3JkanBnY29tLmMgYi9yZGpwZ2NvbS5jCmluZGV4IDM3MTkxNTQuLjAyY2U5MGYgMTAwNjQ0Ci0tLSBhL3JkanBnY29tLmMKKysrIGIvcmRqcGdjb20uYwpAQCAtMTIsNDUgKzEyLDQ1IEBACiAgKiBKUEVHIG1hcmtlcnMuCiAgKi8KIAotI2RlZmluZSBKUEVHX0NKUEVHX0RKUEVHCS8qIHRvIGdldCB0aGUgY29tbWFuZC1saW5lIGNvbmZpZyBzeW1ib2xzICovCi0jaW5jbHVkZSAiamluY2x1ZGUuaCIJCS8qIGdldCBhdXRvLWNvbmZpZyBzeW1ib2xzLCA8c3RkaW8uaD4gKi8KKyNkZWZpbmUgSlBFR19DSlBFR19ESlBFRyAgICAgICAgLyogdG8gZ2V0IHRoZSBjb21tYW5kLWxpbmUgY29uZmlnIHN5bWJvbHMgKi8KKyNpbmNsdWRlICJqaW5jbHVkZS5oIiAgICAgICAgICAgLyogZ2V0IGF1dG8tY29uZmlnIHN5bWJvbHMsIDxzdGRpby5oPiAqLwogCiAjaWZkZWYgSEFWRV9MT0NBTEVfSAotI2luY2x1ZGUgPGxvY2FsZS5oPgkJLyogQmlsbCBBbGxvbWJlcnQ6IHVzZSBsb2NhbGUgZm9yIGlzcHJpbnQgKi8KKyNpbmNsdWRlIDxsb2NhbGUuaD4gICAgICAgICAgICAgLyogQmlsbCBBbGxvbWJlcnQ6IHVzZSBsb2NhbGUgZm9yIGlzcHJpbnQgKi8KICNlbmRpZgotI2luY2x1ZGUgPGN0eXBlLmg+CQkvKiB0byBkZWNsYXJlIGlzdXBwZXIoKSwgdG9sb3dlcigpICovCisjaW5jbHVkZSA8Y3R5cGUuaD4gICAgICAgICAgICAgIC8qIHRvIGRlY2xhcmUgaXN1cHBlcigpLCB0b2xvd2VyKCkgKi8KICNpZmRlZiBVU0VfU0VUTU9ERQotI2luY2x1ZGUgPGZjbnRsLmg+CQkvKiB0byBkZWNsYXJlIHNldG1vZGUoKSdzIHBhcmFtZXRlciBtYWNyb3MgKi8KKyNpbmNsdWRlIDxmY250bC5oPiAgICAgICAgICAgICAgLyogdG8gZGVjbGFyZSBzZXRtb2RlKCkncyBwYXJhbWV0ZXIgbWFjcm9zICovCiAvKiBJZiB5b3UgaGF2ZSBzZXRtb2RlKCkgYnV0IG5vdCA8aW8uaD4sIGp1c3QgZGVsZXRlIHRoaXMgbGluZTogKi8KLSNpbmNsdWRlIDxpby5oPgkJCS8qIHRvIGRlY2xhcmUgc2V0bW9kZSgpICovCisjaW5jbHVkZSA8aW8uaD4gICAgICAgICAgICAgICAgIC8qIHRvIGRlY2xhcmUgc2V0bW9kZSgpICovCiAjZW5kaWYKIAotI2lmZGVmIFVTRV9DQ09NTUFORAkJLyogY29tbWFuZC1saW5lIHJlYWRlciBmb3IgTWFjaW50b3NoICovCisjaWZkZWYgVVNFX0NDT01NQU5EICAgICAgICAgICAgIC8qIGNvbW1hbmQtbGluZSByZWFkZXIgZm9yIE1hY2ludG9zaCAqLwogI2lmZGVmIF9fTVdFUktTX18KICNpbmNsdWRlIDxTSU9VWC5oPiAgICAgICAgICAgICAgLyogTWV0cm93ZXJrcyBuZWVkcyB0aGlzICovCi0jaW5jbHVkZSA8Y29uc29sZS5oPgkJLyogLi4uIGFuZCB0aGlzICovCisjaW5jbHVkZSA8Y29uc29sZS5oPiAgICAgICAgICAgIC8qIC4uLiBhbmQgdGhpcyAqLwogI2VuZGlmCiAjaWZkZWYgVEhJTktfQwotI2luY2x1ZGUgPGNvbnNvbGUuaD4JCS8qIFRoaW5rIGRlY2xhcmVzIGl0IGhlcmUgKi8KKyNpbmNsdWRlIDxjb25zb2xlLmg+ICAgICAgICAgICAgLyogVGhpbmsgZGVjbGFyZXMgaXQgaGVyZSAqLwogI2VuZGlmCiAjZW5kaWYKIAotI2lmZGVmIERPTlRfVVNFX0JfTU9ERQkJLyogZGVmaW5lIG1vZGUgcGFyYW1ldGVycyBmb3IgZm9wZW4oKSAqLwotI2RlZmluZSBSRUFEX0JJTkFSWQkiciIKKyNpZmRlZiBET05UX1VTRV9CX01PREUgICAgICAgICAgLyogZGVmaW5lIG1vZGUgcGFyYW1ldGVycyBmb3IgZm9wZW4oKSAqLworI2RlZmluZSBSRUFEX0JJTkFSWSAgICAgInIiCiAjZWxzZQotI2lmZGVmIFZNUwkJCS8qIFZNUyBpcyB2ZXJ5IG5vbnN0YW5kYXJkICovCi0jZGVmaW5lIFJFQURfQklOQVJZCSJyYiIsICJjdHg9c3RtIgotI2Vsc2UJCQkJLyogc3RhbmRhcmQgQU5TSS1jb21wbGlhbnQgY2FzZSAqLwotI2RlZmluZSBSRUFEX0JJTkFSWQkicmIiCisjaWZkZWYgVk1TICAgICAgICAgICAgICAgICAgICAgIC8qIFZNUyBpcyB2ZXJ5IG5vbnN0YW5kYXJkICovCisjZGVmaW5lIFJFQURfQklOQVJZICAgICAicmIiLCAiY3R4PXN0bSIKKyNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3RhbmRhcmQgQU5TSS1jb21wbGlhbnQgY2FzZSAqLworI2RlZmluZSBSRUFEX0JJTkFSWSAgICAgInJiIgogI2VuZGlmCiAjZW5kaWYKIAotI2lmbmRlZiBFWElUX0ZBSUxVUkUJCS8qIGRlZmluZSBleGl0KCkgY29kZXMgaWYgbm90IHByb3ZpZGVkICovCisjaWZuZGVmIEVYSVRfRkFJTFVSRSAgICAgICAgICAgIC8qIGRlZmluZSBleGl0KCkgY29kZXMgaWYgbm90IHByb3ZpZGVkICovCiAjZGVmaW5lIEVYSVRfRkFJTFVSRSAgMQogI2VuZGlmCiAjaWZuZGVmIEVYSVRfU1VDQ0VTUwogI2lmZGVmIFZNUwotI2RlZmluZSBFWElUX1NVQ0NFU1MgIDEJCS8qIFZNUyBpcyB2ZXJ5IG5vbnN0YW5kYXJkICovCisjZGVmaW5lIEVYSVRfU1VDQ0VTUyAgMSAgICAgICAgIC8qIFZNUyBpcyB2ZXJ5IG5vbnN0YW5kYXJkICovCiAjZWxzZQogI2RlZmluZSBFWElUX1NVQ0NFU1MgIDAKICNlbmRpZgpAQCAtNjIsNyArNjIsNyBAQAogICogVG8gcmV1c2UgdGhpcyBjb2RlIGluIGFub3RoZXIgYXBwbGljYXRpb24sIHlvdSBtaWdodCBuZWVkIHRvIGNoYW5nZSB0aGVzZS4KICAqLwogCi1zdGF0aWMgRklMRSAqIGluZmlsZTsJCS8qIGlucHV0IEpQRUcgZmlsZSAqLworc3RhdGljIEZJTEUgKiBpbmZpbGU7ICAgICAgICAgICAvKiBpbnB1dCBKUEVHIGZpbGUgKi8KIAogLyogUmV0dXJuIG5leHQgaW5wdXQgYnl0ZSwgb3IgRU9GIGlmIG5vIG1vcmUgKi8KICNkZWZpbmUgTkVYVEJZVEUoKSAgZ2V0YyhpbmZpbGUpCkBAIC0xMDcsMTEgKzEwNywxMSBAQAogICogaW4gdGhpcyBwcm9ncmFtLiAgKFNlZSBqZG1hcmtlci5jIGZvciBhIG1vcmUgY29tcGxldGUgbGlzdC4pCiAgKi8KIAotI2RlZmluZSBNX1NPRjAgIDB4QzAJCS8qIFN0YXJ0IE9mIEZyYW1lIE4gKi8KLSNkZWZpbmUgTV9TT0YxICAweEMxCQkvKiBOIGluZGljYXRlcyB3aGljaCBjb21wcmVzc2lvbiBwcm9jZXNzICovCi0jZGVmaW5lIE1fU09GMiAgMHhDMgkJLyogT25seSBTT0YwLVNPRjIgYXJlIG5vdyBpbiBjb21tb24gdXNlICovCisjZGVmaW5lIE1fU09GMCAgMHhDMCAgICAgICAgICAgIC8qIFN0YXJ0IE9mIEZyYW1lIE4gKi8KKyNkZWZpbmUgTV9TT0YxICAweEMxICAgICAgICAgICAgLyogTiBpbmRpY2F0ZXMgd2hpY2ggY29tcHJlc3Npb24gcHJvY2VzcyAqLworI2RlZmluZSBNX1NPRjIgIDB4QzIgICAgICAgICAgICAvKiBPbmx5IFNPRjAtU09GMiBhcmUgbm93IGluIGNvbW1vbiB1c2UgKi8KICNkZWZpbmUgTV9TT0YzICAweEMzCi0jZGVmaW5lIE1fU09GNSAgMHhDNQkJLyogTkI6IGNvZGVzIEM0IGFuZCBDQyBhcmUgTk9UIFNPRiBtYXJrZXJzICovCisjZGVmaW5lIE1fU09GNSAgMHhDNSAgICAgICAgICAgIC8qIE5COiBjb2RlcyBDNCBhbmQgQ0MgYXJlIE5PVCBTT0YgbWFya2VycyAqLwogI2RlZmluZSBNX1NPRjYgIDB4QzYKICNkZWZpbmUgTV9TT0Y3ICAweEM3CiAjZGVmaW5lIE1fU09GOSAgMHhDOQpAQCAtMTIwLDEyICsxMjAsMTIgQEAKICNkZWZpbmUgTV9TT0YxMyAweENECiAjZGVmaW5lIE1fU09GMTQgMHhDRQogI2RlZmluZSBNX1NPRjE1IDB4Q0YKLSNkZWZpbmUgTV9TT0kgICAweEQ4CQkvKiBTdGFydCBPZiBJbWFnZSAoYmVnaW5uaW5nIG9mIGRhdGFzdHJlYW0pICovCi0jZGVmaW5lIE1fRU9JICAgMHhEOQkJLyogRW5kIE9mIEltYWdlIChlbmQgb2YgZGF0YXN0cmVhbSkgKi8KLSNkZWZpbmUgTV9TT1MgICAweERBCQkvKiBTdGFydCBPZiBTY2FuIChiZWdpbnMgY29tcHJlc3NlZCBkYXRhKSAqLwotI2RlZmluZSBNX0FQUDAJMHhFMAkJLyogQXBwbGljYXRpb24tc3BlY2lmaWMgbWFya2VyLCB0eXBlIE4gKi8KLSNkZWZpbmUgTV9BUFAxMgkweEVDCQkvKiAod2UgZG9uJ3QgYm90aGVyIHRvIGxpc3QgYWxsIDE2IEFQUG4ncykgKi8KLSNkZWZpbmUgTV9DT00gICAweEZFCQkvKiBDT01tZW50ICovCisjZGVmaW5lIE1fU09JICAgMHhEOCAgICAgICAgICAgIC8qIFN0YXJ0IE9mIEltYWdlIChiZWdpbm5pbmcgb2YgZGF0YXN0cmVhbSkgKi8KKyNkZWZpbmUgTV9FT0kgICAweEQ5ICAgICAgICAgICAgLyogRW5kIE9mIEltYWdlIChlbmQgb2YgZGF0YXN0cmVhbSkgKi8KKyNkZWZpbmUgTV9TT1MgICAweERBICAgICAgICAgICAgLyogU3RhcnQgT2YgU2NhbiAoYmVnaW5zIGNvbXByZXNzZWQgZGF0YSkgKi8KKyNkZWZpbmUgTV9BUFAwICAweEUwICAgICAgICAgICAgLyogQXBwbGljYXRpb24tc3BlY2lmaWMgbWFya2VyLCB0eXBlIE4gKi8KKyNkZWZpbmUgTV9BUFAxMiAweEVDICAgICAgICAgICAgLyogKHdlIGRvbid0IGJvdGhlciB0byBsaXN0IGFsbCAxNiBBUFBuJ3MpICovCisjZGVmaW5lIE1fQ09NICAgMHhGRSAgICAgICAgICAgIC8qIENPTW1lbnQgKi8KIAogCiAvKgpAQCAtMjUzLDcgKzI1Myw3IEBACiAgICAgICBwcmludGYoIlxuIik7CiAgICAgfSBlbHNlIGlmIChjaCA9PSAnXG4nKSB7CiAgICAgICBpZiAobGFzdGNoICE9ICdccicpCi0JcHJpbnRmKCJcbiIpOworICAgICAgICBwcmludGYoIlxuIik7CiAgICAgfSBlbHNlIGlmIChjaCA9PSAnXFwnKSB7CiAgICAgICBwcmludGYoIlxcXFwiKTsKICAgICB9IGVsc2UgaWYgKGlzcHJpbnQoY2gpKSB7CkBAIC0yODcsNyArMjg3LDcgQEAKICAgY29uc3QgY2hhciAqIHByb2Nlc3M7CiAgIGludCBjaTsKIAotICBsZW5ndGggPSByZWFkXzJfYnl0ZXMoKTsJLyogdXN1YWwgcGFyYW1ldGVyIGxlbmd0aCBjb3VudCAqLworICBsZW5ndGggPSByZWFkXzJfYnl0ZXMoKTsgICAgICAvKiB1c3VhbCBwYXJhbWV0ZXIgbGVuZ3RoIGNvdW50ICovCiAKICAgZGF0YV9wcmVjaXNpb24gPSByZWFkXzFfYnl0ZSgpOwogICBpbWFnZV9oZWlnaHQgPSByZWFkXzJfYnl0ZXMoKTsKQEAgLTI5NSwzMyArMjk1LDMzIEBACiAgIG51bV9jb21wb25lbnRzID0gcmVhZF8xX2J5dGUoKTsKIAogICBzd2l0Y2ggKG1hcmtlcikgewotICBjYXNlIE1fU09GMDoJcHJvY2VzcyA9ICJCYXNlbGluZSI7ICBicmVhazsKLSAgY2FzZSBNX1NPRjE6CXByb2Nlc3MgPSAiRXh0ZW5kZWQgc2VxdWVudGlhbCI7ICBicmVhazsKLSAgY2FzZSBNX1NPRjI6CXByb2Nlc3MgPSAiUHJvZ3Jlc3NpdmUiOyAgYnJlYWs7Ci0gIGNhc2UgTV9TT0YzOglwcm9jZXNzID0gIkxvc3NsZXNzIjsgIGJyZWFrOwotICBjYXNlIE1fU09GNToJcHJvY2VzcyA9ICJEaWZmZXJlbnRpYWwgc2VxdWVudGlhbCI7ICBicmVhazsKLSAgY2FzZSBNX1NPRjY6CXByb2Nlc3MgPSAiRGlmZmVyZW50aWFsIHByb2dyZXNzaXZlIjsgIGJyZWFrOwotICBjYXNlIE1fU09GNzoJcHJvY2VzcyA9ICJEaWZmZXJlbnRpYWwgbG9zc2xlc3MiOyAgYnJlYWs7Ci0gIGNhc2UgTV9TT0Y5Oglwcm9jZXNzID0gIkV4dGVuZGVkIHNlcXVlbnRpYWwsIGFyaXRobWV0aWMgY29kaW5nIjsgIGJyZWFrOwotICBjYXNlIE1fU09GMTA6CXByb2Nlc3MgPSAiUHJvZ3Jlc3NpdmUsIGFyaXRobWV0aWMgY29kaW5nIjsgIGJyZWFrOwotICBjYXNlIE1fU09GMTE6CXByb2Nlc3MgPSAiTG9zc2xlc3MsIGFyaXRobWV0aWMgY29kaW5nIjsgIGJyZWFrOwotICBjYXNlIE1fU09GMTM6CXByb2Nlc3MgPSAiRGlmZmVyZW50aWFsIHNlcXVlbnRpYWwsIGFyaXRobWV0aWMgY29kaW5nIjsgIGJyZWFrOwotICBjYXNlIE1fU09GMTQ6CXByb2Nlc3MgPSAiRGlmZmVyZW50aWFsIHByb2dyZXNzaXZlLCBhcml0aG1ldGljIGNvZGluZyI7IGJyZWFrOwotICBjYXNlIE1fU09GMTU6CXByb2Nlc3MgPSAiRGlmZmVyZW50aWFsIGxvc3NsZXNzLCBhcml0aG1ldGljIGNvZGluZyI7ICBicmVhazsKLSAgZGVmYXVsdDoJcHJvY2VzcyA9ICJVbmtub3duIjsgIGJyZWFrOworICBjYXNlIE1fU09GMDogIHByb2Nlc3MgPSAiQmFzZWxpbmUiOyAgYnJlYWs7CisgIGNhc2UgTV9TT0YxOiAgcHJvY2VzcyA9ICJFeHRlbmRlZCBzZXF1ZW50aWFsIjsgIGJyZWFrOworICBjYXNlIE1fU09GMjogIHByb2Nlc3MgPSAiUHJvZ3Jlc3NpdmUiOyAgYnJlYWs7CisgIGNhc2UgTV9TT0YzOiAgcHJvY2VzcyA9ICJMb3NzbGVzcyI7ICBicmVhazsKKyAgY2FzZSBNX1NPRjU6ICBwcm9jZXNzID0gIkRpZmZlcmVudGlhbCBzZXF1ZW50aWFsIjsgIGJyZWFrOworICBjYXNlIE1fU09GNjogIHByb2Nlc3MgPSAiRGlmZmVyZW50aWFsIHByb2dyZXNzaXZlIjsgIGJyZWFrOworICBjYXNlIE1fU09GNzogIHByb2Nlc3MgPSAiRGlmZmVyZW50aWFsIGxvc3NsZXNzIjsgIGJyZWFrOworICBjYXNlIE1fU09GOTogIHByb2Nlc3MgPSAiRXh0ZW5kZWQgc2VxdWVudGlhbCwgYXJpdGhtZXRpYyBjb2RpbmciOyAgYnJlYWs7CisgIGNhc2UgTV9TT0YxMDogcHJvY2VzcyA9ICJQcm9ncmVzc2l2ZSwgYXJpdGhtZXRpYyBjb2RpbmciOyAgYnJlYWs7CisgIGNhc2UgTV9TT0YxMTogcHJvY2VzcyA9ICJMb3NzbGVzcywgYXJpdGhtZXRpYyBjb2RpbmciOyAgYnJlYWs7CisgIGNhc2UgTV9TT0YxMzogcHJvY2VzcyA9ICJEaWZmZXJlbnRpYWwgc2VxdWVudGlhbCwgYXJpdGhtZXRpYyBjb2RpbmciOyAgYnJlYWs7CisgIGNhc2UgTV9TT0YxNDogcHJvY2VzcyA9ICJEaWZmZXJlbnRpYWwgcHJvZ3Jlc3NpdmUsIGFyaXRobWV0aWMgY29kaW5nIjsgYnJlYWs7CisgIGNhc2UgTV9TT0YxNTogcHJvY2VzcyA9ICJEaWZmZXJlbnRpYWwgbG9zc2xlc3MsIGFyaXRobWV0aWMgY29kaW5nIjsgIGJyZWFrOworICBkZWZhdWx0OiAgICAgIHByb2Nlc3MgPSAiVW5rbm93biI7ICBicmVhazsKICAgfQogCiAgIHByaW50ZigiSlBFRyBpbWFnZSBpcyAldXcgKiAldWgsICVkIGNvbG9yIGNvbXBvbmVudHMsICVkIGJpdHMgcGVyIHNhbXBsZVxuIiwKLQkgaW1hZ2Vfd2lkdGgsIGltYWdlX2hlaWdodCwgbnVtX2NvbXBvbmVudHMsIGRhdGFfcHJlY2lzaW9uKTsKKyAgICAgICAgIGltYWdlX3dpZHRoLCBpbWFnZV9oZWlnaHQsIG51bV9jb21wb25lbnRzLCBkYXRhX3ByZWNpc2lvbik7CiAgIHByaW50ZigiSlBFRyBwcm9jZXNzOiAlc1xuIiwgcHJvY2Vzcyk7CiAKICAgaWYgKGxlbmd0aCAhPSAodW5zaWduZWQgaW50KSAoOCArIG51bV9jb21wb25lbnRzICogMykpCiAgICAgRVJSRVhJVCgiQm9ndXMgU09GIG1hcmtlciBsZW5ndGgiKTsKIAogICBmb3IgKGNpID0gMDsgY2kgPCBudW1fY29tcG9uZW50czsgY2krKykgewotICAgICh2b2lkKSByZWFkXzFfYnl0ZSgpOwkvKiBDb21wb25lbnQgSUQgY29kZSAqLwotICAgICh2b2lkKSByZWFkXzFfYnl0ZSgpOwkvKiBILCBWIHNhbXBsaW5nIGZhY3RvcnMgKi8KLSAgICAodm9pZCkgcmVhZF8xX2J5dGUoKTsJLyogUXVhbnRpemF0aW9uIHRhYmxlIG51bWJlciAqLworICAgICh2b2lkKSByZWFkXzFfYnl0ZSgpOyAgICAgICAvKiBDb21wb25lbnQgSUQgY29kZSAqLworICAgICh2b2lkKSByZWFkXzFfYnl0ZSgpOyAgICAgICAvKiBILCBWIHNhbXBsaW5nIGZhY3RvcnMgKi8KKyAgICAodm9pZCkgcmVhZF8xX2J5dGUoKTsgICAgICAgLyogUXVhbnRpemF0aW9uIHRhYmxlIG51bWJlciAqLwogICB9CiB9CiAKQEAgLTM1MiwyOSArMzUyLDI5IEBACiAgICAgICAvKiBOb3RlIHRoYXQgbWFya2VyIGNvZGVzIDB4QzQsIDB4QzgsIDB4Q0MgYXJlIG5vdCwgYW5kIG11c3Qgbm90IGJlLAogICAgICAgICogdHJlYXRlZCBhcyBTT0ZuLiAgQzQgaW4gcGFydGljdWxhciBpcyBhY3R1YWxseSBESFQuCiAgICAgICAgKi8KLSAgICBjYXNlIE1fU09GMDoJCS8qIEJhc2VsaW5lICovCi0gICAgY2FzZSBNX1NPRjE6CQkvKiBFeHRlbmRlZCBzZXF1ZW50aWFsLCBIdWZmbWFuICovCi0gICAgY2FzZSBNX1NPRjI6CQkvKiBQcm9ncmVzc2l2ZSwgSHVmZm1hbiAqLwotICAgIGNhc2UgTV9TT0YzOgkJLyogTG9zc2xlc3MsIEh1ZmZtYW4gKi8KLSAgICBjYXNlIE1fU09GNToJCS8qIERpZmZlcmVudGlhbCBzZXF1ZW50aWFsLCBIdWZmbWFuICovCi0gICAgY2FzZSBNX1NPRjY6CQkvKiBEaWZmZXJlbnRpYWwgcHJvZ3Jlc3NpdmUsIEh1ZmZtYW4gKi8KLSAgICBjYXNlIE1fU09GNzoJCS8qIERpZmZlcmVudGlhbCBsb3NzbGVzcywgSHVmZm1hbiAqLwotICAgIGNhc2UgTV9TT0Y5OgkJLyogRXh0ZW5kZWQgc2VxdWVudGlhbCwgYXJpdGhtZXRpYyAqLwotICAgIGNhc2UgTV9TT0YxMDoJCS8qIFByb2dyZXNzaXZlLCBhcml0aG1ldGljICovCi0gICAgY2FzZSBNX1NPRjExOgkJLyogTG9zc2xlc3MsIGFyaXRobWV0aWMgKi8KLSAgICBjYXNlIE1fU09GMTM6CQkvKiBEaWZmZXJlbnRpYWwgc2VxdWVudGlhbCwgYXJpdGhtZXRpYyAqLwotICAgIGNhc2UgTV9TT0YxNDoJCS8qIERpZmZlcmVudGlhbCBwcm9ncmVzc2l2ZSwgYXJpdGhtZXRpYyAqLwotICAgIGNhc2UgTV9TT0YxNToJCS8qIERpZmZlcmVudGlhbCBsb3NzbGVzcywgYXJpdGhtZXRpYyAqLworICAgIGNhc2UgTV9TT0YwOiAgICAgICAgICAgICAgICAvKiBCYXNlbGluZSAqLworICAgIGNhc2UgTV9TT0YxOiAgICAgICAgICAgICAgICAvKiBFeHRlbmRlZCBzZXF1ZW50aWFsLCBIdWZmbWFuICovCisgICAgY2FzZSBNX1NPRjI6ICAgICAgICAgICAgICAgIC8qIFByb2dyZXNzaXZlLCBIdWZmbWFuICovCisgICAgY2FzZSBNX1NPRjM6ICAgICAgICAgICAgICAgIC8qIExvc3NsZXNzLCBIdWZmbWFuICovCisgICAgY2FzZSBNX1NPRjU6ICAgICAgICAgICAgICAgIC8qIERpZmZlcmVudGlhbCBzZXF1ZW50aWFsLCBIdWZmbWFuICovCisgICAgY2FzZSBNX1NPRjY6ICAgICAgICAgICAgICAgIC8qIERpZmZlcmVudGlhbCBwcm9ncmVzc2l2ZSwgSHVmZm1hbiAqLworICAgIGNhc2UgTV9TT0Y3OiAgICAgICAgICAgICAgICAvKiBEaWZmZXJlbnRpYWwgbG9zc2xlc3MsIEh1ZmZtYW4gKi8KKyAgICBjYXNlIE1fU09GOTogICAgICAgICAgICAgICAgLyogRXh0ZW5kZWQgc2VxdWVudGlhbCwgYXJpdGhtZXRpYyAqLworICAgIGNhc2UgTV9TT0YxMDogICAgICAgICAgICAgICAvKiBQcm9ncmVzc2l2ZSwgYXJpdGhtZXRpYyAqLworICAgIGNhc2UgTV9TT0YxMTogICAgICAgICAgICAgICAvKiBMb3NzbGVzcywgYXJpdGhtZXRpYyAqLworICAgIGNhc2UgTV9TT0YxMzogICAgICAgICAgICAgICAvKiBEaWZmZXJlbnRpYWwgc2VxdWVudGlhbCwgYXJpdGhtZXRpYyAqLworICAgIGNhc2UgTV9TT0YxNDogICAgICAgICAgICAgICAvKiBEaWZmZXJlbnRpYWwgcHJvZ3Jlc3NpdmUsIGFyaXRobWV0aWMgKi8KKyAgICBjYXNlIE1fU09GMTU6ICAgICAgICAgICAgICAgLyogRGlmZmVyZW50aWFsIGxvc3NsZXNzLCBhcml0aG1ldGljICovCiAgICAgICBpZiAodmVyYm9zZSkKLQlwcm9jZXNzX1NPRm4obWFya2VyKTsKKyAgICAgICAgcHJvY2Vzc19TT0ZuKG1hcmtlcik7CiAgICAgICBlbHNlCi0Jc2tpcF92YXJpYWJsZSgpOworICAgICAgICBza2lwX3ZhcmlhYmxlKCk7CiAgICAgICBicmVhazsKIAotICAgIGNhc2UgTV9TT1M6CQkJLyogc3RvcCBiZWZvcmUgaGl0dGluZyBjb21wcmVzc2VkIGRhdGEgKi8KKyAgICBjYXNlIE1fU09TOiAgICAgICAgICAgICAgICAgLyogc3RvcCBiZWZvcmUgaGl0dGluZyBjb21wcmVzc2VkIGRhdGEgKi8KICAgICAgIHJldHVybiBtYXJrZXI7CiAKLSAgICBjYXNlIE1fRU9JOgkJCS8qIGluIGNhc2UgaXQncyBhIHRhYmxlcy1vbmx5IEpQRUcgc3RyZWFtICovCisgICAgY2FzZSBNX0VPSTogICAgICAgICAgICAgICAgIC8qIGluIGNhc2UgaXQncyBhIHRhYmxlcy1vbmx5IEpQRUcgc3RyZWFtICovCiAgICAgICByZXR1cm4gbWFya2VyOwogCiAgICAgY2FzZSBNX0NPTToKQEAgLTM4NiwxNCArMzg2LDE0IEBACiAgICAgICAgKiBBUFAxMiBtYXJrZXJzLCBzbyB3ZSBwcmludCB0aG9zZSBvdXQgdG9vIHdoZW4gaW4gLXZlcmJvc2UgbW9kZS4KICAgICAgICAqLwogICAgICAgaWYgKHZlcmJvc2UpIHsKLQlwcmludGYoIkFQUDEyIGNvbnRhaW5zOlxuIik7Ci0JcHJvY2Vzc19DT00ocmF3KTsKKyAgICAgICAgcHJpbnRmKCJBUFAxMiBjb250YWluczpcbiIpOworICAgICAgICBwcm9jZXNzX0NPTShyYXcpOwogICAgICAgfSBlbHNlCi0Jc2tpcF92YXJpYWJsZSgpOworICAgICAgICBza2lwX3ZhcmlhYmxlKCk7CiAgICAgICBicmVhazsKIAotICAgIGRlZmF1bHQ6CQkJLyogQW55dGhpbmcgZWxzZSBqdXN0IGdldHMgc2tpcHBlZCAqLwotICAgICAgc2tpcF92YXJpYWJsZSgpOwkJLyogd2UgYXNzdW1lIGl0IGhhcyBhIHBhcmFtZXRlciBjb3VudC4uLiAqLworICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAvKiBBbnl0aGluZyBlbHNlIGp1c3QgZ2V0cyBza2lwcGVkICovCisgICAgICBza2lwX3ZhcmlhYmxlKCk7ICAgICAgICAgIC8qIHdlIGFzc3VtZSBpdCBoYXMgYSBwYXJhbWV0ZXIgY291bnQuLi4gKi8KICAgICAgIGJyZWFrOwogICAgIH0KICAgfSAvKiBlbmQgbG9vcCAqLwpAQCAtNDAyLDcgKzQwMiw3IEBACiAKIC8qIENvbW1hbmQgbGluZSBwYXJzaW5nIGNvZGUgKi8KIAotc3RhdGljIGNvbnN0IGNoYXIgKiBwcm9nbmFtZTsJLyogcHJvZ3JhbSBuYW1lIGZvciBlcnJvciBtZXNzYWdlcyAqLworc3RhdGljIGNvbnN0IGNoYXIgKiBwcm9nbmFtZTsgICAvKiBwcm9ncmFtIG5hbWUgZm9yIGVycm9yIG1lc3NhZ2VzICovCiAKIAogc3RhdGljIHZvaWQKQEAgLTQzMiwxNyArNDMyLDE3IEBACiAKICAgd2hpbGUgKChjYSA9ICphcmcrKykgIT0gJ1wwJykgewogICAgIGlmICgoY2sgPSAqa2V5d29yZCsrKSA9PSAnXDAnKQotICAgICAgcmV0dXJuIDA7CQkJLyogYXJnIGxvbmdlciB0aGFuIGtleXdvcmQsIG5vIGdvb2QgKi8KLSAgICBpZiAoaXN1cHBlcihjYSkpCQkvKiBmb3JjZSBhcmcgdG8gbGNhc2UgKGFzc3VtZSBjayBpcyBhbHJlYWR5KSAqLworICAgICAgcmV0dXJuIDA7ICAgICAgICAgICAgICAgICAvKiBhcmcgbG9uZ2VyIHRoYW4ga2V5d29yZCwgbm8gZ29vZCAqLworICAgIGlmIChpc3VwcGVyKGNhKSkgICAgICAgICAgICAvKiBmb3JjZSBhcmcgdG8gbGNhc2UgKGFzc3VtZSBjayBpcyBhbHJlYWR5KSAqLwogICAgICAgY2EgPSB0b2xvd2VyKGNhKTsKICAgICBpZiAoY2EgIT0gY2spCi0gICAgICByZXR1cm4gMDsJCQkvKiBubyBnb29kICovCi0gICAgbm1hdGNoZWQrKzsJCQkvKiBjb3VudCBtYXRjaGVkIGNoYXJhY3RlcnMgKi8KKyAgICAgIHJldHVybiAwOyAgICAgICAgICAgICAgICAgLyogbm8gZ29vZCAqLworICAgIG5tYXRjaGVkKys7ICAgICAgICAgICAgICAgICAvKiBjb3VudCBtYXRjaGVkIGNoYXJhY3RlcnMgKi8KICAgfQogICAvKiByZWFjaGVkIGVuZCBvZiBhcmd1bWVudDsgZmFpbCBpZiBpdCdzIHRvbyBzaG9ydCBmb3IgdW5pcXVlIGFiYnJldiAqLwogICBpZiAobm1hdGNoZWQgPCBtaW5jaGFycykKICAgICByZXR1cm4gMDsKLSAgcmV0dXJuIDE7CQkJLyogQS1PSyAqLworICByZXR1cm4gMTsgICAgICAgICAgICAgICAgICAgICAvKiBBLU9LICovCiB9CiAKIApAQCAtNDY0LDE0ICs0NjQsMTQgQEAKIAogICBwcm9nbmFtZSA9IGFyZ3ZbMF07CiAgIGlmIChwcm9nbmFtZSA9PSBOVUxMIHx8IHByb2duYW1lWzBdID09IDApCi0gICAgcHJvZ25hbWUgPSAicmRqcGdjb20iOwkvKiBpbiBjYXNlIEMgbGlicmFyeSBkb2Vzbid0IHByb3ZpZGUgaXQgKi8KKyAgICBwcm9nbmFtZSA9ICJyZGpwZ2NvbSI7ICAgICAgLyogaW4gY2FzZSBDIGxpYnJhcnkgZG9lc24ndCBwcm92aWRlIGl0ICovCiAKICAgLyogUGFyc2Ugc3dpdGNoZXMsIGlmIGFueSAqLwogICBmb3IgKGFyZ24gPSAxOyBhcmduIDwgYXJnYzsgYXJnbisrKSB7CiAgICAgYXJnID0gYXJndlthcmduXTsKICAgICBpZiAoYXJnWzBdICE9ICctJykKLSAgICAgIGJyZWFrOwkJCS8qIG5vdCBzd2l0Y2gsIG11c3QgYmUgZmlsZSBuYW1lICovCi0gICAgYXJnKys7CQkJLyogYWR2YW5jZSBvdmVyICctJyAqLworICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAvKiBub3Qgc3dpdGNoLCBtdXN0IGJlIGZpbGUgbmFtZSAqLworICAgIGFyZysrOyAgICAgICAgICAgICAgICAgICAgICAvKiBhZHZhbmNlIG92ZXIgJy0nICovCiAgICAgaWYgKGtleW1hdGNoKGFyZywgInZlcmJvc2UiLCAxKSkgewogICAgICAgdmVyYm9zZSsrOwogICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAicmF3IiwgMSkpIHsKQEAgLTQ5MywxMCArNDkzLDEwIEBACiAgICAgfQogICB9IGVsc2UgewogICAgIC8qIGRlZmF1bHQgaW5wdXQgZmlsZSBpcyBzdGRpbiAqLwotI2lmZGVmIFVTRV9TRVRNT0RFCQkvKiBuZWVkIHRvIGhhY2sgZmlsZSBtb2RlPyAqLworI2lmZGVmIFVTRV9TRVRNT0RFICAgICAgICAgICAgICAvKiBuZWVkIHRvIGhhY2sgZmlsZSBtb2RlPyAqLwogICAgIHNldG1vZGUoZmlsZW5vKHN0ZGluKSwgT19CSU5BUlkpOwogI2VuZGlmCi0jaWZkZWYgVVNFX0ZET1BFTgkJLyogbmVlZCB0byByZS1vcGVuIGluIGJpbmFyeSBtb2RlPyAqLworI2lmZGVmIFVTRV9GRE9QRU4gICAgICAgICAgICAgICAvKiBuZWVkIHRvIHJlLW9wZW4gaW4gYmluYXJ5IG1vZGU/ICovCiAgICAgaWYgKChpbmZpbGUgPSBmZG9wZW4oZmlsZW5vKHN0ZGluKSwgUkVBRF9CSU5BUlkpKSA9PSBOVUxMKSB7CiAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBjYW4ndCBvcGVuIHN0ZGluXG4iLCBwcm9nbmFtZSk7CiAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CkBAIC01MTEsNSArNTExLDUgQEAKIAogICAvKiBBbGwgZG9uZS4gKi8KICAgZXhpdChFWElUX1NVQ0NFU1MpOwotICByZXR1cm4gMDsJCQkvKiBzdXBwcmVzcyBuby1yZXR1cm4tdmFsdWUgd2FybmluZ3MgKi8KKyAgcmV0dXJuIDA7ICAgICAgICAgICAgICAgICAgICAgLyogc3VwcHJlc3Mgbm8tcmV0dXJuLXZhbHVlIHdhcm5pbmdzICovCiB9CmRpZmYgLS1naXQgYS9yZHBwbS5jIGIvcmRwcG0uYwppbmRleCBhNzU3MDIyLi5jNTVhYjJiIDEwMDY0NAotLS0gYS9yZHBwbS5jCisrKyBiL3JkcHBtLmMKQEAgLTE5LDcgKzE5LDcgQEAKICAqIHRoZSBmaWxlIGlzIGluZGVlZCBQUE0gZm9ybWF0KS4KICAqLwogCi0jaW5jbHVkZSAiY2RqcGVnLmgiCQkvKiBDb21tb24gZGVjbHMgZm9yIGNqcGVnL2RqcGVnIGFwcGxpY2F0aW9ucyAqLworI2luY2x1ZGUgImNkanBlZy5oIiAgICAgICAgICAgICAvKiBDb21tb24gZGVjbHMgZm9yIGNqcGVnL2RqcGVnIGFwcGxpY2F0aW9ucyAqLwogCiAjaWZkZWYgUFBNX1NVUFBPUlRFRAogCkBAIC00MSwxOSArNDEsMTkgQEAKIAogI2lmZGVmIEhBVkVfVU5TSUdORURfQ0hBUgogdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFVfQ0hBUjsKLSNkZWZpbmUgVUNIKHgpCSgoaW50KSAoeCkpCisjZGVmaW5lIFVDSCh4KSAgKChpbnQpICh4KSkKICNlbHNlIC8qICFIQVZFX1VOU0lHTkVEX0NIQVIgKi8KLSNpZmRlZiBDSEFSX0lTX1VOU0lHTkVECisjaWZkZWYgX19DSEFSX1VOU0lHTkVEX18KIHR5cGVkZWYgY2hhciBVX0NIQVI7Ci0jZGVmaW5lIFVDSCh4KQkoKGludCkgKHgpKQorI2RlZmluZSBVQ0goeCkgICgoaW50KSAoeCkpCiAjZWxzZQogdHlwZWRlZiBjaGFyIFVfQ0hBUjsKLSNkZWZpbmUgVUNIKHgpCSgoaW50KSAoeCkgJiAweEZGKQorI2RlZmluZSBVQ0goeCkgICgoaW50KSAoeCkgJiAweEZGKQogI2VuZGlmCiAjZW5kaWYgLyogSEFWRV9VTlNJR05FRF9DSEFSICovCiAKIAotI2RlZmluZQlSZWFkT0soZmlsZSxidWZmZXIsbGVuKQkoSkZSRUFEKGZpbGUsYnVmZmVyLGxlbikgPT0gKChzaXplX3QpIChsZW4pKSkKKyNkZWZpbmUgUmVhZE9LKGZpbGUsYnVmZmVyLGxlbikgKEpGUkVBRChmaWxlLGJ1ZmZlcixsZW4pID09ICgoc2l6ZV90KSAobGVuKSkpCiAKIAogLyoKQEAgLTcyLDEwICs3MiwxMCBAQAogdHlwZWRlZiBzdHJ1Y3QgewogICBzdHJ1Y3QgY2pwZWdfc291cmNlX3N0cnVjdCBwdWI7IC8qIHB1YmxpYyBmaWVsZHMgKi8KIAotICBVX0NIQVIgKmlvYnVmZmVyOwkJLyogbm9uLUZBUiBwb2ludGVyIHRvIEkvTyBidWZmZXIgKi8KLSAgSlNBTVBST1cgcGl4cm93OwkJLyogRkFSIHBvaW50ZXIgdG8gc2FtZSAqLwotICBzaXplX3QgYnVmZmVyX3dpZHRoOwkJLyogd2lkdGggb2YgSS9PIGJ1ZmZlciAqLwotICBKU0FNUExFICpyZXNjYWxlOwkJLyogPT4gbWF4dmFsLXJlbWFwcGluZyBhcnJheSwgb3IgTlVMTCAqLworICBVX0NIQVIgKmlvYnVmZmVyOyAgICAgICAgICAgICAvKiBub24tRkFSIHBvaW50ZXIgdG8gSS9PIGJ1ZmZlciAqLworICBKU0FNUFJPVyBwaXhyb3c7ICAgICAgICAgICAgICAvKiBGQVIgcG9pbnRlciB0byBzYW1lICovCisgIHNpemVfdCBidWZmZXJfd2lkdGg7ICAgICAgICAgIC8qIHdpZHRoIG9mIEkvTyBidWZmZXIgKi8KKyAgSlNBTVBMRSAqcmVzY2FsZTsgICAgICAgICAgICAgLyogPT4gbWF4dmFsLXJlbWFwcGluZyBhcnJheSwgb3IgTlVMTCAqLwogfSBwcG1fc291cmNlX3N0cnVjdDsKIAogdHlwZWRlZiBwcG1fc291cmNlX3N0cnVjdCAqIHBwbV9zb3VyY2VfcHRyOwpAQCAtMzA4LDEwICszMDgsMTAgQEAKIAogICAvKiBkZXRlY3QgdW5zdXBwb3J0ZWQgdmFyaWFudHMgKGllLCBQQk0pIGJlZm9yZSB0cnlpbmcgdG8gcmVhZCBoZWFkZXIgKi8KICAgc3dpdGNoIChjKSB7Ci0gIGNhc2UgJzInOgkJCS8qIGl0J3MgYSB0ZXh0LWZvcm1hdCBQR00gZmlsZSAqLwotICBjYXNlICczJzoJCQkvKiBpdCdzIGEgdGV4dC1mb3JtYXQgUFBNIGZpbGUgKi8KLSAgY2FzZSAnNSc6CQkJLyogaXQncyBhIHJhdy1mb3JtYXQgUEdNIGZpbGUgKi8KLSAgY2FzZSAnNic6CQkJLyogaXQncyBhIHJhdy1mb3JtYXQgUFBNIGZpbGUgKi8KKyAgY2FzZSAnMic6ICAgICAgICAgICAgICAgICAgICAgLyogaXQncyBhIHRleHQtZm9ybWF0IFBHTSBmaWxlICovCisgIGNhc2UgJzMnOiAgICAgICAgICAgICAgICAgICAgIC8qIGl0J3MgYSB0ZXh0LWZvcm1hdCBQUE0gZmlsZSAqLworICBjYXNlICc1JzogICAgICAgICAgICAgICAgICAgICAvKiBpdCdzIGEgcmF3LWZvcm1hdCBQR00gZmlsZSAqLworICBjYXNlICc2JzogICAgICAgICAgICAgICAgICAgICAvKiBpdCdzIGEgcmF3LWZvcm1hdCBQUE0gZmlsZSAqLwogICAgIGJyZWFrOwogICBkZWZhdWx0OgogICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfUFBNX05PVCk7CkBAIC0zMzEsMTIgKzMzMSwxMiBAQAogICBjaW5mby0+aW1hZ2VfaGVpZ2h0ID0gKEpESU1FTlNJT04pIGg7CiAKICAgLyogaW5pdGlhbGl6ZSBmbGFncyB0byBtb3N0IGNvbW1vbiBzZXR0aW5ncyAqLwotICBuZWVkX2lvYnVmZmVyID0gVFJVRTsJCS8qIGRvIHdlIG5lZWQgYW4gSS9PIGJ1ZmZlcj8gKi8KLSAgdXNlX3Jhd19idWZmZXIgPSBGQUxTRTsJLyogZG8gd2UgbWFwIGlucHV0IGJ1ZmZlciBvbnRvIEkvTyBidWZmZXI/ICovCi0gIG5lZWRfcmVzY2FsZSA9IFRSVUU7CQkvKiBkbyB3ZSBuZWVkIGEgcmVzY2FsZSBhcnJheT8gKi8KKyAgbmVlZF9pb2J1ZmZlciA9IFRSVUU7ICAgICAgICAgLyogZG8gd2UgbmVlZCBhbiBJL08gYnVmZmVyPyAqLworICB1c2VfcmF3X2J1ZmZlciA9IEZBTFNFOyAgICAgICAvKiBkbyB3ZSBtYXAgaW5wdXQgYnVmZmVyIG9udG8gSS9PIGJ1ZmZlcj8gKi8KKyAgbmVlZF9yZXNjYWxlID0gVFJVRTsgICAgICAgICAgLyogZG8gd2UgbmVlZCBhIHJlc2NhbGUgYXJyYXk/ICovCiAKICAgc3dpdGNoIChjKSB7Ci0gIGNhc2UgJzInOgkJCS8qIGl0J3MgYSB0ZXh0LWZvcm1hdCBQR00gZmlsZSAqLworICBjYXNlICcyJzogICAgICAgICAgICAgICAgICAgICAvKiBpdCdzIGEgdGV4dC1mb3JtYXQgUEdNIGZpbGUgKi8KICAgICBjaW5mby0+aW5wdXRfY29tcG9uZW50cyA9IDE7CiAgICAgY2luZm8tPmluX2NvbG9yX3NwYWNlID0gSkNTX0dSQVlTQ0FMRTsKICAgICBUUkFDRU1TMihjaW5mbywgMSwgSlRSQ19QR01fVEVYVCwgdywgaCk7CkBAIC0zNDQsNyArMzQ0LDcgQEAKICAgICBuZWVkX2lvYnVmZmVyID0gRkFMU0U7CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAnMyc6CQkJLyogaXQncyBhIHRleHQtZm9ybWF0IFBQTSBmaWxlICovCisgIGNhc2UgJzMnOiAgICAgICAgICAgICAgICAgICAgIC8qIGl0J3MgYSB0ZXh0LWZvcm1hdCBQUE0gZmlsZSAqLwogICAgIGNpbmZvLT5pbnB1dF9jb21wb25lbnRzID0gMzsKICAgICBjaW5mby0+aW5fY29sb3Jfc3BhY2UgPSBKQ1NfUkdCOwogICAgIFRSQUNFTVMyKGNpbmZvLCAxLCBKVFJDX1BQTV9URVhULCB3LCBoKTsKQEAgLTM1Miw3ICszNTIsNyBAQAogICAgIG5lZWRfaW9idWZmZXIgPSBGQUxTRTsKICAgICBicmVhazsKIAotICBjYXNlICc1JzoJCQkvKiBpdCdzIGEgcmF3LWZvcm1hdCBQR00gZmlsZSAqLworICBjYXNlICc1JzogICAgICAgICAgICAgICAgICAgICAvKiBpdCdzIGEgcmF3LWZvcm1hdCBQR00gZmlsZSAqLwogICAgIGNpbmZvLT5pbnB1dF9jb21wb25lbnRzID0gMTsKICAgICBjaW5mby0+aW5fY29sb3Jfc3BhY2UgPSBKQ1NfR1JBWVNDQUxFOwogICAgIFRSQUNFTVMyKGNpbmZvLCAxLCBKVFJDX1BHTSwgdywgaCk7CkBAIC0zNjcsNyArMzY3LDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAnNic6CQkJLyogaXQncyBhIHJhdy1mb3JtYXQgUFBNIGZpbGUgKi8KKyAgY2FzZSAnNic6ICAgICAgICAgICAgICAgICAgICAgLyogaXQncyBhIHJhdy1mb3JtYXQgUFBNIGZpbGUgKi8KICAgICBjaW5mby0+aW5wdXRfY29tcG9uZW50cyA9IDM7CiAgICAgY2luZm8tPmluX2NvbG9yX3NwYWNlID0gSkNTX1JHQjsKICAgICBUUkFDRU1TMihjaW5mbywgMSwgSlRSQ19QUE0sIHcsIGgpOwpAQCAtMzg5LDcgKzM4OSw3IEBACiAgICAgICAoKG1heHZhbDw9MjU1KSA/IFNJWkVPRihVX0NIQVIpIDogKDIqU0laRU9GKFVfQ0hBUikpKTsKICAgICBzb3VyY2UtPmlvYnVmZmVyID0gKFVfQ0hBUiAqKQogICAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKLQkJCQkgIHNvdXJjZS0+YnVmZmVyX3dpZHRoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UtPmJ1ZmZlcl93aWR0aCk7CiAgIH0KIAogICAvKiBDcmVhdGUgY29tcHJlc3NvciBpbnB1dCBidWZmZXIuICovCkBAIC00MTUsNyArNDE1LDcgQEAKICAgICAvKiBPbiAxNi1iaXQtaW50IG1hY2hpbmVzIHdlIGhhdmUgdG8gYmUgY2FyZWZ1bCBvZiBtYXh2YWwgPSA2NTUzNSAqLwogICAgIHNvdXJjZS0+cmVzY2FsZSA9IChKU0FNUExFICopCiAgICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAotCQkJCSAgKHNpemVfdCkgKCgobG9uZykgbWF4dmFsICsgMUwpICogU0laRU9GKEpTQU1QTEUpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNpemVfdCkgKCgobG9uZykgbWF4dmFsICsgMUwpICogU0laRU9GKEpTQU1QTEUpKSk7CiAgICAgaGFsZl9tYXh2YWwgPSBtYXh2YWwgLyAyOwogICAgIGZvciAodmFsID0gMDsgdmFsIDw9IChJTlQzMikgbWF4dmFsOyB2YWwrKykgewogICAgICAgLyogVGhlIG11bHRpcGxpY2F0aW9uIGhlcmUgbXVzdCBiZSBkb25lIGluIDMyIGJpdHMgdG8gYXZvaWQgb3ZlcmZsb3cgKi8KQEAgLTQ0OCw3ICs0NDgsNyBAQAogICAvKiBDcmVhdGUgbW9kdWxlIGludGVyZmFjZSBvYmplY3QgKi8KICAgc291cmNlID0gKHBwbV9zb3VyY2VfcHRyKQogICAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKLQkJCQkgIFNJWkVPRihwcG1fc291cmNlX3N0cnVjdCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJWkVPRihwcG1fc291cmNlX3N0cnVjdCkpOwogICAvKiBGaWxsIGluIG1ldGhvZCBwdHJzLCBleGNlcHQgZ2V0X3BpeGVsX3Jvd3Mgd2hpY2ggc3RhcnRfaW5wdXQgc2V0cyAqLwogICBzb3VyY2UtPnB1Yi5zdGFydF9pbnB1dCA9IHN0YXJ0X2lucHV0X3BwbTsKICAgc291cmNlLT5wdWIuZmluaXNoX2lucHV0ID0gZmluaXNoX2lucHV0X3BwbTsKZGlmZiAtLWdpdCBhL3JkcmxlLmMgYi9yZHJsZS5jCmluZGV4IDU0MmJjMzcuLmY4YjM1ODcgMTAwNjQ0Ci0tLSBhL3JkcmxlLmMKKysrIGIvcmRybGUuYwpAQCAtMTksNyArMTksNyBAQAogICogd2l0aCB1cGRhdGVzIGZyb20gUm9iZXJ0IEh1dGNoaW5zb24uCiAgKi8KIAotI2luY2x1ZGUgImNkanBlZy5oIgkJLyogQ29tbW9uIGRlY2xzIGZvciBjanBlZy9kanBlZyBhcHBsaWNhdGlvbnMgKi8KKyNpbmNsdWRlICJjZGpwZWcuaCIgICAgICAgICAgICAgLyogQ29tbW9uIGRlY2xzIGZvciBjanBlZy9kanBlZyBhcHBsaWNhdGlvbnMgKi8KIAogI2lmZGVmIFJMRV9TVVBQT1JURUQKIApAQCAtMzgsNyArMzgsNyBAQAogCiAvKgogICogV2Ugc3VwcG9ydCB0aGUgZm9sbG93aW5nIHR5cGVzIG9mIFJMRSBmaWxlczoKLSAqICAgCisgKgogICogICBHUkFZU0NBTEUgICAtIDggYml0cywgbm8gY29sb3JtYXAKICAqICAgTUFQUEVER1JBWSAgLSA4IGJpdHMsIDEgY2hhbm5lbCBjb2xvbWFwCiAgKiAgIFBTRVVET0NPTE9SIC0gOCBiaXRzLCAzIGNoYW5uZWwgY29sb3JtYXAKQEAgLTY2LDcgKzY2LDcgQEAKIAogICBybGVfa2luZCB2aXN1YWw7ICAgICAgICAgICAgICAvKiBhY3R1YWwgdHlwZSBvZiBpbnB1dCBmaWxlICovCiAgIGp2aXJ0X3NhcnJheV9wdHIgaW1hZ2U7ICAgICAgIC8qIHZpcnR1YWwgYXJyYXkgdG8gaG9sZCB0aGUgaW1hZ2UgKi8KLSAgSkRJTUVOU0lPTiByb3c7CQkvKiBjdXJyZW50IHJvdyAjIGluIHRoZSB2aXJ0dWFsIGFycmF5ICovCisgIEpESU1FTlNJT04gcm93OyAgICAgICAgICAgICAgIC8qIGN1cnJlbnQgcm93ICMgaW4gdGhlIHZpcnR1YWwgYXJyYXkgKi8KICAgcmxlX2hkciBoZWFkZXI7ICAgICAgICAgICAgICAgLyogSW5wdXQgZmlsZSBpbmZvcm1hdGlvbiAqLwogICBybGVfcGl4ZWwqKiBybGVfcm93OyAgICAgICAgICAvKiBob2xkcyBhIHJvdyByZXR1cm5lZCBieSBybGVfZ2V0cm93KCkgKi8KIApAQCAtMTExLDEwICsxMTEsMTAgQEAKICAgfQogCiAgIC8qIEZpZ3VyZSBvdXQgd2hhdCB3ZSBoYXZlLCBzZXQgcHJpdmF0ZSB2YXJzIGFuZCByZXR1cm4gdmFsdWVzIGFjY29yZGluZ2x5ICovCi0gIAorCiAgIHdpZHRoICA9IHNvdXJjZS0+aGVhZGVyLnhtYXggLSBzb3VyY2UtPmhlYWRlci54bWluICsgMTsKICAgaGVpZ2h0ID0gc291cmNlLT5oZWFkZXIueW1heCAtIHNvdXJjZS0+aGVhZGVyLnltaW4gKyAxOwotICBzb3VyY2UtPmhlYWRlci54bWluID0gMDsJCS8qIHJlYWxpZ24gaG9yaXpvbnRhbGx5ICovCisgIHNvdXJjZS0+aGVhZGVyLnhtaW4gPSAwOyAgICAgICAgICAgICAgLyogcmVhbGlnbiBob3Jpem9udGFsbHkgKi8KICAgc291cmNlLT5oZWFkZXIueG1heCA9IHdpZHRoLTE7CiAKICAgY2luZm8tPmltYWdlX3dpZHRoICAgICAgPSB3aWR0aDsKQEAgLTEzMSwxNyArMTMxLDE3IEBACiAgIH0gZWxzZSBpZiAoc291cmNlLT5oZWFkZXIubmNvbG9ycyA9PSAxICYmIHNvdXJjZS0+aGVhZGVyLm5jbWFwID09IDMpIHsKICAgICBzb3VyY2UtPnZpc3VhbCAgICAgPSBQU0VVRE9DT0xPUjsKICAgICBUUkFDRU1TMyhjaW5mbywgMSwgSlRSQ19STEVfTUFQUEVELCB3aWR0aCwgaGVpZ2h0LAotCSAgICAgMSA8PCBzb3VyY2UtPmhlYWRlci5jbWFwbGVuKTsKKyAgICAgICAgICAgICAxIDw8IHNvdXJjZS0+aGVhZGVyLmNtYXBsZW4pOwogICB9IGVsc2UgaWYgKHNvdXJjZS0+aGVhZGVyLm5jb2xvcnMgPT0gMyAmJiBzb3VyY2UtPmhlYWRlci5uY21hcCA9PSAzKSB7CiAgICAgc291cmNlLT52aXN1YWwgICAgID0gVFJVRUNPTE9SOwogICAgIFRSQUNFTVMzKGNpbmZvLCAxLCBKVFJDX1JMRV9GVUxMTUFQLCB3aWR0aCwgaGVpZ2h0LAotCSAgICAgMSA8PCBzb3VyY2UtPmhlYWRlci5jbWFwbGVuKTsKKyAgICAgICAgICAgICAxIDw8IHNvdXJjZS0+aGVhZGVyLmNtYXBsZW4pOwogICB9IGVsc2UgaWYgKHNvdXJjZS0+aGVhZGVyLm5jb2xvcnMgPT0gMyAmJiBzb3VyY2UtPmhlYWRlci5uY21hcCA9PSAwKSB7CiAgICAgc291cmNlLT52aXN1YWwgICAgID0gRElSRUNUQ09MT1I7CiAgICAgVFJBQ0VNUzIoY2luZm8sIDEsIEpUUkNfUkxFLCB3aWR0aCwgaGVpZ2h0KTsKICAgfSBlbHNlCiAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9STEVfVU5TVVBQT1JURUQpOwotICAKKwogICBpZiAoc291cmNlLT52aXN1YWwgPT0gR1JBWVNDQUxFIHx8IHNvdXJjZS0+dmlzdWFsID09IE1BUFBFREdSQVkpIHsKICAgICBjaW5mby0+aW5fY29sb3Jfc3BhY2UgICA9IEpDU19HUkFZU0NBTEU7CiAgICAgY2luZm8tPmlucHV0X2NvbXBvbmVudHMgPSAxOwpAQCAtMzQ4LDcgKzM0OCw3IEBACiAgIHNvdXJjZS0+cm93ID0gY2luZm8tPmltYWdlX2hlaWdodDsKIAogICAvKiBBbmQgZmV0Y2ggdGhlIHRvcG1vc3QgKGJvdHRvbW1vc3QpIHJvdyAqLwotICByZXR1cm4gKCpzb3VyY2UtPnB1Yi5nZXRfcGl4ZWxfcm93cykgKGNpbmZvLCBzaW5mbyk7ICAgCisgIHJldHVybiAoKnNvdXJjZS0+cHViLmdldF9waXhlbF9yb3dzKSAoY2luZm8sIHNpbmZvKTsKIH0KIAogCmRpZmYgLS1naXQgYS9yZHN3aXRjaC5jIGIvcmRzd2l0Y2guYwppbmRleCA3ZjNjNTc2Li42NTQ5OTc0IDEwMDY0NAotLS0gYS9yZHN3aXRjaC5jCisrKyBiL3Jkc3dpdGNoLmMKQEAgLTMsMjEgKzMsMjEgQEAKICAqCiAgKiBUaGlzIGZpbGUgd2FzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZToKICAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk2LCBUaG9tYXMgRy4gTGFuZS4KLSAqIE1vZGlmaWNhdGlvbnM6CisgKiBsaWJqcGVnLXR1cmJvIE1vZGlmaWNhdGlvbnM6CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEQuIFIuIENvbW1hbmRlci4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KICAqCiAgKiBUaGlzIGZpbGUgY29udGFpbnMgcm91dGluZXMgdG8gcHJvY2VzcyBzb21lIG9mIGNqcGVnJ3MgbW9yZSBjb21wbGljYXRlZAogICogY29tbWFuZC1saW5lIHN3aXRjaGVzLiAgU3dpdGNoZXMgcHJvY2Vzc2VkIGhlcmUgYXJlOgotICoJLXF0YWJsZXMgZmlsZQkJUmVhZCBxdWFudGl6YXRpb24gdGFibGVzIGZyb20gdGV4dCBmaWxlCi0gKgktc2NhbnMgZmlsZQkJUmVhZCBzY2FuIHNjcmlwdCBmcm9tIHRleHQgZmlsZQotICoJLXF1YWxpdHkgTlssTiwuLi5dCVNldCBxdWFsaXR5IHJhdGluZ3MKLSAqCS1xc2xvdHMgTlssTiwuLi5dCVNldCBjb21wb25lbnQgcXVhbnRpemF0aW9uIHRhYmxlIHNlbGVjdG9ycwotICoJLXNhbXBsZSBIeFZbLEh4ViwuLi5dCVNldCBjb21wb25lbnQgc2FtcGxpbmcgZmFjdG9ycworICogICAgICAtcXRhYmxlcyBmaWxlICAgICAgICAgICBSZWFkIHF1YW50aXphdGlvbiB0YWJsZXMgZnJvbSB0ZXh0IGZpbGUKKyAqICAgICAgLXNjYW5zIGZpbGUgICAgICAgICAgICAgUmVhZCBzY2FuIHNjcmlwdCBmcm9tIHRleHQgZmlsZQorICogICAgICAtcXVhbGl0eSBOWyxOLC4uLl0gICAgICBTZXQgcXVhbGl0eSByYXRpbmdzCisgKiAgICAgIC1xc2xvdHMgTlssTiwuLi5dICAgICAgIFNldCBjb21wb25lbnQgcXVhbnRpemF0aW9uIHRhYmxlIHNlbGVjdG9ycworICogICAgICAtc2FtcGxlIEh4VlssSHhWLC4uLl0gICBTZXQgY29tcG9uZW50IHNhbXBsaW5nIGZhY3RvcnMKICAqLwogCi0jaW5jbHVkZSAiY2RqcGVnLmgiCQkvKiBDb21tb24gZGVjbHMgZm9yIGNqcGVnL2RqcGVnIGFwcGxpY2F0aW9ucyAqLwotI2luY2x1ZGUgPGN0eXBlLmg+CQkvKiB0byBkZWNsYXJlIGlzZGlnaXQoKSwgaXNzcGFjZSgpICovCisjaW5jbHVkZSAiY2RqcGVnLmgiICAgICAgICAgICAgIC8qIENvbW1vbiBkZWNscyBmb3IgY2pwZWcvZGpwZWcgYXBwbGljYXRpb25zICovCisjaW5jbHVkZSA8Y3R5cGUuaD4gICAgICAgICAgICAgIC8qIHRvIGRlY2xhcmUgaXNkaWdpdCgpLCBpc3NwYWNlKCkgKi8KIAogCiBMT0NBTChpbnQpCkBAIC0yNiw3ICsyNiw3IEBACiAvKiBBIGNvbW1lbnQvbmV3bGluZSBzZXF1ZW5jZSBpcyByZXR1cm5lZCBhcyBhIG5ld2xpbmUgKi8KIHsKICAgcmVnaXN0ZXIgaW50IGNoOwotICAKKwogICBjaCA9IGdldGMoZmlsZSk7CiAgIGlmIChjaCA9PSAnIycpIHsKICAgICBkbyB7CkBAIC00NCw3ICs0NCw3IEBACiB7CiAgIHJlZ2lzdGVyIGludCBjaDsKICAgcmVnaXN0ZXIgbG9uZyB2YWw7Ci0gIAorCiAgIC8qIFNraXAgYW55IGxlYWRpbmcgd2hpdGVzcGFjZSwgZGV0ZWN0IEVPRiAqLwogICBkbyB7CiAgICAgY2ggPSB0ZXh0X2dldGMoZmlsZSk7CkBAIC01Myw3ICs1Myw3IEBACiAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQogICB9IHdoaWxlIChpc3NwYWNlKGNoKSk7Ci0gIAorCiAgIGlmICghIGlzZGlnaXQoY2gpKSB7CiAgICAgKnRlcm1jaGFyID0gY2g7CiAgICAgcmV0dXJuIEZBTFNFOwpAQCAtMTA4LDE1ICsxMDgsMTUgQEAKICAgICB0YWJsZVswXSA9ICh1bnNpZ25lZCBpbnQpIHZhbDsKICAgICBmb3IgKGkgPSAxOyBpIDwgRENUU0laRTI7IGkrKykgewogICAgICAgaWYgKCEgcmVhZF90ZXh0X2ludGVnZXIoZnAsICZ2YWwsICZ0ZXJtY2hhcikpIHsKLQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgdGFibGUgZGF0YSBpbiBmaWxlICVzXG4iLCBmaWxlbmFtZSk7Ci0JZmNsb3NlKGZwKTsKLQlyZXR1cm4gRkFMU0U7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiSW52YWxpZCB0YWJsZSBkYXRhIGluIGZpbGUgJXNcbiIsIGZpbGVuYW1lKTsKKyAgICAgICAgZmNsb3NlKGZwKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgfQogICAgICAgdGFibGVbaV0gPSAodW5zaWduZWQgaW50KSB2YWw7CiAgICAgfQogI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gNzAKICAgICBqcGVnX2FkZF9xdWFudF90YWJsZShjaW5mbywgdGJsbm8sIHRhYmxlLCBjaW5mby0+cV9zY2FsZV9mYWN0b3JbdGJsbm9dLAotCQkJIGZvcmNlX2Jhc2VsaW5lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZV9iYXNlbGluZSk7CiAjZWxzZQogICAgIGpwZWdfYWRkX3F1YW50X3RhYmxlKGNpbmZvLCB0YmxubywgdGFibGUsIHFfc2NhbGVfZmFjdG9yW3RibG5vXSwKICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZV9iYXNlbGluZSk7CkBAIC0xNTAsNyArMTUwLDcgQEAKICAgY2ggPSAqdGVybWNoYXI7CiAgIHdoaWxlIChjaCAhPSBFT0YgJiYgaXNzcGFjZShjaCkpCiAgICAgY2ggPSB0ZXh0X2dldGMoZmlsZSk7Ci0gIGlmIChpc2RpZ2l0KGNoKSkgewkJLyogb29wcywgcHV0IGl0IGJhY2sgKi8KKyAgaWYgKGlzZGlnaXQoY2gpKSB7ICAgICAgICAgICAgLyogb29wcywgcHV0IGl0IGJhY2sgKi8KICAgICBpZiAodW5nZXRjKGNoLCBmaWxlKSA9PSBFT0YpCiAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgY2ggPSAnICc7CkBAIC0xODgsNyArMTg4LDcgQEAKICAgaW50IHNjYW5ubywgbmNvbXBzLCB0ZXJtY2hhcjsKICAgbG9uZyB2YWw7CiAgIGpwZWdfc2Nhbl9pbmZvICogc2NhbnB0cjsKLSNkZWZpbmUgTUFYX1NDQU5TICAxMDAJCS8qIHF1aXRlIGFyYml0cmFyeSBsaW1pdCAqLworI2RlZmluZSBNQVhfU0NBTlMgIDEwMCAgICAgICAgICAvKiBxdWl0ZSBhcmJpdHJhcnkgbGltaXQgKi8KICAganBlZ19zY2FuX2luZm8gc2NhbnNbTUFYX1NDQU5TXTsKIAogICBpZiAoKGZwID0gZm9wZW4oZmlsZW5hbWUsICJyIikpID09IE5VTEwpIHsKQEAgLTIwOCwyOSArMjA4LDI5IEBACiAgICAgbmNvbXBzID0gMTsKICAgICB3aGlsZSAodGVybWNoYXIgPT0gJyAnKSB7CiAgICAgICBpZiAobmNvbXBzID49IE1BWF9DT01QU19JTl9TQ0FOKSB7Ci0JZnByaW50ZihzdGRlcnIsICJUb28gbWFueSBjb21wb25lbnRzIGluIG9uZSBzY2FuIGluIGZpbGUgJXNcbiIsCi0JCWZpbGVuYW1lKTsKLQlmY2xvc2UoZnApOwotCXJldHVybiBGQUxTRTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJUb28gbWFueSBjb21wb25lbnRzIGluIG9uZSBzY2FuIGluIGZpbGUgJXNcbiIsCisgICAgICAgICAgICAgICAgZmlsZW5hbWUpOworICAgICAgICBmY2xvc2UoZnApOworICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgICB9CiAgICAgICBpZiAoISByZWFkX3NjYW5faW50ZWdlcihmcCwgJnZhbCwgJnRlcm1jaGFyKSkKLQlnb3RvIGJvZ3VzOworICAgICAgICBnb3RvIGJvZ3VzOwogICAgICAgc2NhbnB0ci0+Y29tcG9uZW50X2luZGV4W25jb21wc10gPSAoaW50KSB2YWw7CiAgICAgICBuY29tcHMrKzsKICAgICB9CiAgICAgc2NhbnB0ci0+Y29tcHNfaW5fc2NhbiA9IG5jb21wczsKICAgICBpZiAodGVybWNoYXIgPT0gJzonKSB7CiAgICAgICBpZiAoISByZWFkX3NjYW5faW50ZWdlcihmcCwgJnZhbCwgJnRlcm1jaGFyKSB8fCB0ZXJtY2hhciAhPSAnICcpCi0JZ290byBib2d1czsKKyAgICAgICAgZ290byBib2d1czsKICAgICAgIHNjYW5wdHItPlNzID0gKGludCkgdmFsOwogICAgICAgaWYgKCEgcmVhZF9zY2FuX2ludGVnZXIoZnAsICZ2YWwsICZ0ZXJtY2hhcikgfHwgdGVybWNoYXIgIT0gJyAnKQotCWdvdG8gYm9ndXM7CisgICAgICAgIGdvdG8gYm9ndXM7CiAgICAgICBzY2FucHRyLT5TZSA9IChpbnQpIHZhbDsKICAgICAgIGlmICghIHJlYWRfc2Nhbl9pbnRlZ2VyKGZwLCAmdmFsLCAmdGVybWNoYXIpIHx8IHRlcm1jaGFyICE9ICcgJykKLQlnb3RvIGJvZ3VzOworICAgICAgICBnb3RvIGJvZ3VzOwogICAgICAgc2NhbnB0ci0+QWggPSAoaW50KSB2YWw7CiAgICAgICBpZiAoISByZWFkX3NjYW5faW50ZWdlcihmcCwgJnZhbCwgJnRlcm1jaGFyKSkKLQlnb3RvIGJvZ3VzOworICAgICAgICBnb3RvIGJvZ3VzOwogICAgICAgc2NhbnB0ci0+QWwgPSAoaW50KSB2YWw7CiAgICAgfSBlbHNlIHsKICAgICAgIC8qIHNldCBub24tcHJvZ3Jlc3NpdmUgcGFyYW1ldGVycyAqLwpAQCAtMjYxLDcgKzI2MSw3IEBACiAgICAgICovCiAgICAgc2NhbnB0ciA9IChqcGVnX3NjYW5faW5mbyAqKQogICAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKLQkJCQkgIHNjYW5ubyAqIFNJWkVPRihqcGVnX3NjYW5faW5mbykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYW5ubyAqIFNJWkVPRihqcGVnX3NjYW5faW5mbykpOwogICAgIE1FTUNPUFkoc2NhbnB0ciwgc2NhbnMsIHNjYW5ubyAqIFNJWkVPRihqcGVnX3NjYW5faW5mbykpOwogICAgIGNpbmZvLT5zY2FuX2luZm8gPSBzY2FucHRyOwogICAgIGNpbmZvLT5udW1fc2NhbnMgPSBzY2Fubm87CkBAIC0zMDUsOSArMzA1LDkgQEAKIGpwZWdfZGVmYXVsdF9xdGFibGVzIChqX2NvbXByZXNzX3B0ciBjaW5mbywgYm9vbGVhbiBmb3JjZV9iYXNlbGluZSkKIHsKICAganBlZ19hZGRfcXVhbnRfdGFibGUoY2luZm8sIDAsIHN0ZF9sdW1pbmFuY2VfcXVhbnRfdGJsLAotCQkgICAgICAgcV9zY2FsZV9mYWN0b3JbMF0sIGZvcmNlX2Jhc2VsaW5lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgcV9zY2FsZV9mYWN0b3JbMF0sIGZvcmNlX2Jhc2VsaW5lKTsKICAganBlZ19hZGRfcXVhbnRfdGFibGUoY2luZm8sIDEsIHN0ZF9jaHJvbWluYW5jZV9xdWFudF90YmwsCi0JCSAgICAgICBxX3NjYWxlX2ZhY3RvclsxXSwgZm9yY2VfYmFzZWxpbmUpOworICAgICAgICAgICAgICAgICAgICAgICBxX3NjYWxlX2ZhY3RvclsxXSwgZm9yY2VfYmFzZWxpbmUpOwogfQogI2VuZGlmCiAKQEAgLTMxOSwxNyArMzE5LDE3IEBACiAgKiBJZiB0aGVyZSBhcmUgbW9yZSBxLXRhYmxlIHNsb3RzIHRoYW4gcGFyYW1ldGVycywgdGhlIGxhc3QgdmFsdWUgaXMgcmVwbGljYXRlZC4KICAqLwogewotICBpbnQgdmFsID0gNzU7CQkJLyogZGVmYXVsdCB2YWx1ZSAqLworICBpbnQgdmFsID0gNzU7ICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0IHZhbHVlICovCiAgIGludCB0YmxubzsKICAgY2hhciBjaDsKIAogICBmb3IgKHRibG5vID0gMDsgdGJsbm8gPCBOVU1fUVVBTlRfVEJMUzsgdGJsbm8rKykgewogICAgIGlmICgqYXJnKSB7Ci0gICAgICBjaCA9ICcsJzsJCQkvKiBpZiBub3Qgc2V0IGJ5IHNzY2FuZiwgd2lsbCBiZSAnLCcgKi8KKyAgICAgIGNoID0gJywnOyAgICAgICAgICAgICAgICAgLyogaWYgbm90IHNldCBieSBzc2NhbmYsIHdpbGwgYmUgJywnICovCiAgICAgICBpZiAoc3NjYW5mKGFyZywgIiVkJWMiLCAmdmFsLCAmY2gpIDwgMSkKLQlyZXR1cm4gRkFMU0U7Ci0gICAgICBpZiAoY2ggIT0gJywnKQkJLyogc3ludGF4IGNoZWNrICovCi0JcmV0dXJuIEZBTFNFOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICBpZiAoY2ggIT0gJywnKSAgICAgICAgICAgIC8qIHN5bnRheCBjaGVjayAqLworICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgICAvKiBDb252ZXJ0IHVzZXIgMC0xMDAgcmF0aW5nIHRvIHBlcmNlbnRhZ2Ugc2NhbGluZyAqLwogI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gNzAKICAgICAgIGNpbmZvLT5xX3NjYWxlX2ZhY3Rvclt0Ymxub10gPSBqcGVnX3F1YWxpdHlfc2NhbGluZyh2YWwpOwpAQCAtMzM3LDcgKzMzNyw3IEBACiAgICAgICBxX3NjYWxlX2ZhY3Rvclt0Ymxub10gPSBqcGVnX3F1YWxpdHlfc2NhbGluZyh2YWwpOwogI2VuZGlmCiAgICAgICB3aGlsZSAoKmFyZyAmJiAqYXJnKysgIT0gJywnKSAvKiBhZHZhbmNlIHRvIG5leHQgc2VnbWVudCBvZiBhcmcgc3RyaW5nICovCi0JOworICAgICAgICA7CiAgICAgfSBlbHNlIHsKICAgICAgIC8qIHJlYWNoZWQgZW5kIG9mIHBhcmFtZXRlciwgc2V0IHJlbWFpbmluZyBmYWN0b3JzIHRvIGxhc3QgdmFsdWUgKi8KICNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDcwCkBAIC0zNTksMjUgKzM1OSwyNSBAQAogICogSWYgdGhlcmUgYXJlIG1vcmUgY29tcG9uZW50cyB0aGFuIHBhcmFtZXRlcnMsIHRoZSBsYXN0IHZhbHVlIGlzIHJlcGxpY2F0ZWQuCiAgKi8KIHsKLSAgaW50IHZhbCA9IDA7CQkJLyogZGVmYXVsdCB0YWJsZSAjICovCisgIGludCB2YWwgPSAwOyAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgdGFibGUgIyAqLwogICBpbnQgY2k7CiAgIGNoYXIgY2g7CiAKICAgZm9yIChjaSA9IDA7IGNpIDwgTUFYX0NPTVBPTkVOVFM7IGNpKyspIHsKICAgICBpZiAoKmFyZykgewotICAgICAgY2ggPSAnLCc7CQkJLyogaWYgbm90IHNldCBieSBzc2NhbmYsIHdpbGwgYmUgJywnICovCisgICAgICBjaCA9ICcsJzsgICAgICAgICAgICAgICAgIC8qIGlmIG5vdCBzZXQgYnkgc3NjYW5mLCB3aWxsIGJlICcsJyAqLwogICAgICAgaWYgKHNzY2FuZihhcmcsICIlZCVjIiwgJnZhbCwgJmNoKSA8IDEpCi0JcmV0dXJuIEZBTFNFOwotICAgICAgaWYgKGNoICE9ICcsJykJCS8qIHN5bnRheCBjaGVjayAqLwotCXJldHVybiBGQUxTRTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgaWYgKGNoICE9ICcsJykgICAgICAgICAgICAvKiBzeW50YXggY2hlY2sgKi8KKyAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgaWYgKHZhbCA8IDAgfHwgdmFsID49IE5VTV9RVUFOVF9UQkxTKSB7Ci0JZnByaW50ZihzdGRlcnIsICJKUEVHIHF1YW50aXphdGlvbiB0YWJsZXMgYXJlIG51bWJlcmVkIDAuLiVkXG4iLAotCQlOVU1fUVVBTlRfVEJMUy0xKTsKLQlyZXR1cm4gRkFMU0U7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiSlBFRyBxdWFudGl6YXRpb24gdGFibGVzIGFyZSBudW1iZXJlZCAwLi4lZFxuIiwKKyAgICAgICAgICAgICAgICBOVU1fUVVBTlRfVEJMUy0xKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgfQogICAgICAgY2luZm8tPmNvbXBfaW5mb1tjaV0ucXVhbnRfdGJsX25vID0gdmFsOwogICAgICAgd2hpbGUgKCphcmcgJiYgKmFyZysrICE9ICcsJykgLyogYWR2YW5jZSB0byBuZXh0IHNlZ21lbnQgb2YgYXJnIHN0cmluZyAqLwotCTsKKyAgICAgICAgOwogICAgIH0gZWxzZSB7CiAgICAgICAvKiByZWFjaGVkIGVuZCBvZiBwYXJhbWV0ZXIsIHNldCByZW1haW5pbmcgY29tcG9uZW50cyB0byBsYXN0IHRhYmxlICovCiAgICAgICBjaW5mby0+Y29tcF9pbmZvW2NpXS5xdWFudF90Ymxfbm8gPSB2YWw7CkBAIC0zOTksMTkgKzM5OSwxOSBAQAogCiAgIGZvciAoY2kgPSAwOyBjaSA8IE1BWF9DT01QT05FTlRTOyBjaSsrKSB7CiAgICAgaWYgKCphcmcpIHsKLSAgICAgIGNoMiA9ICcsJzsJCS8qIGlmIG5vdCBzZXQgYnkgc3NjYW5mLCB3aWxsIGJlICcsJyAqLworICAgICAgY2gyID0gJywnOyAgICAgICAgICAgICAgICAvKiBpZiBub3Qgc2V0IGJ5IHNzY2FuZiwgd2lsbCBiZSAnLCcgKi8KICAgICAgIGlmIChzc2NhbmYoYXJnLCAiJWQlYyVkJWMiLCAmdmFsMSwgJmNoMSwgJnZhbDIsICZjaDIpIDwgMykKLQlyZXR1cm4gRkFMU0U7CisgICAgICAgIHJldHVybiBGQUxTRTsKICAgICAgIGlmICgoY2gxICE9ICd4JyAmJiBjaDEgIT0gJ1gnKSB8fCBjaDIgIT0gJywnKSAvKiBzeW50YXggY2hlY2sgKi8KLQlyZXR1cm4gRkFMU0U7CisgICAgICAgIHJldHVybiBGQUxTRTsKICAgICAgIGlmICh2YWwxIDw9IDAgfHwgdmFsMSA+IDQgfHwgdmFsMiA8PSAwIHx8IHZhbDIgPiA0KSB7Ci0JZnByaW50ZihzdGRlcnIsICJKUEVHIHNhbXBsaW5nIGZhY3RvcnMgbXVzdCBiZSAxLi40XG4iKTsKLQlyZXR1cm4gRkFMU0U7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiSlBFRyBzYW1wbGluZyBmYWN0b3JzIG11c3QgYmUgMS4uNFxuIik7CisgICAgICAgIHJldHVybiBGQUxTRTsKICAgICAgIH0KICAgICAgIGNpbmZvLT5jb21wX2luZm9bY2ldLmhfc2FtcF9mYWN0b3IgPSB2YWwxOwogICAgICAgY2luZm8tPmNvbXBfaW5mb1tjaV0udl9zYW1wX2ZhY3RvciA9IHZhbDI7CiAgICAgICB3aGlsZSAoKmFyZyAmJiAqYXJnKysgIT0gJywnKSAvKiBhZHZhbmNlIHRvIG5leHQgc2VnbWVudCBvZiBhcmcgc3RyaW5nICovCi0JOworICAgICAgICA7CiAgICAgfSBlbHNlIHsKICAgICAgIC8qIHJlYWNoZWQgZW5kIG9mIHBhcmFtZXRlciwgc2V0IHJlbWFpbmluZyBjb21wb25lbnRzIHRvIDF4MSBzYW1wbGluZyAqLwogICAgICAgY2luZm8tPmNvbXBfaW5mb1tjaV0uaF9zYW1wX2ZhY3RvciA9IDE7CmRpZmYgLS1naXQgYS9yZHRhcmdhLmMgYi9yZHRhcmdhLmMKaW5kZXggNGMyY2QyNi4uZThiYmFmNiAxMDA2NDQKLS0tIGEvcmR0YXJnYS5jCisrKyBiL3JkdGFyZ2EuYwpAQCAtMTcsNyArMTcsNyBAQAogICogQmFzZWQgb24gY29kZSBjb250cmlidXRlZCBieSBMZWUgRGFuaWVsIENyb2NrZXIuCiAgKi8KIAotI2luY2x1ZGUgImNkanBlZy5oIgkJLyogQ29tbW9uIGRlY2xzIGZvciBjanBlZy9kanBlZyBhcHBsaWNhdGlvbnMgKi8KKyNpbmNsdWRlICJjZGpwZWcuaCIgICAgICAgICAgICAgLyogQ29tbW9uIGRlY2xzIGZvciBjanBlZy9kanBlZyBhcHBsaWNhdGlvbnMgKi8KIAogI2lmZGVmIFRBUkdBX1NVUFBPUlRFRAogCkBAIC0yNiwxOSArMjYsMTkgQEAKIAogI2lmZGVmIEhBVkVfVU5TSUdORURfQ0hBUgogdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFVfQ0hBUjsKLSNkZWZpbmUgVUNIKHgpCSgoaW50KSAoeCkpCisjZGVmaW5lIFVDSCh4KSAgKChpbnQpICh4KSkKICNlbHNlIC8qICFIQVZFX1VOU0lHTkVEX0NIQVIgKi8KLSNpZmRlZiBDSEFSX0lTX1VOU0lHTkVECisjaWZkZWYgX19DSEFSX1VOU0lHTkVEX18KIHR5cGVkZWYgY2hhciBVX0NIQVI7Ci0jZGVmaW5lIFVDSCh4KQkoKGludCkgKHgpKQorI2RlZmluZSBVQ0goeCkgICgoaW50KSAoeCkpCiAjZWxzZQogdHlwZWRlZiBjaGFyIFVfQ0hBUjsKLSNkZWZpbmUgVUNIKHgpCSgoaW50KSAoeCkgJiAweEZGKQorI2RlZmluZSBVQ0goeCkgICgoaW50KSAoeCkgJiAweEZGKQogI2VuZGlmCiAjZW5kaWYgLyogSEFWRV9VTlNJR05FRF9DSEFSICovCiAKIAotI2RlZmluZQlSZWFkT0soZmlsZSxidWZmZXIsbGVuKQkoSkZSRUFEKGZpbGUsYnVmZmVyLGxlbikgPT0gKChzaXplX3QpIChsZW4pKSkKKyNkZWZpbmUgUmVhZE9LKGZpbGUsYnVmZmVyLGxlbikgKEpGUkVBRChmaWxlLGJ1ZmZlcixsZW4pID09ICgoc2l6ZV90KSAobGVuKSkpCiAKIAogLyogUHJpdmF0ZSB2ZXJzaW9uIG9mIGRhdGEgc291cmNlIG9iamVjdCAqLwpAQCAtNDgsMTIgKzQ4LDEyIEBACiB0eXBlZGVmIHN0cnVjdCBfdGdhX3NvdXJjZV9zdHJ1Y3QgewogICBzdHJ1Y3QgY2pwZWdfc291cmNlX3N0cnVjdCBwdWI7IC8qIHB1YmxpYyBmaWVsZHMgKi8KIAotICBqX2NvbXByZXNzX3B0ciBjaW5mbzsJCS8qIGJhY2sgbGluayBzYXZlcyBwYXNzaW5nIHNlcGFyYXRlIHBhcm0gKi8KKyAgal9jb21wcmVzc19wdHIgY2luZm87ICAgICAgICAgLyogYmFjayBsaW5rIHNhdmVzIHBhc3Npbmcgc2VwYXJhdGUgcGFybSAqLwogCi0gIEpTQU1QQVJSQVkgY29sb3JtYXA7CQkvKiBUYXJnYSBjb2xvcm1hcCAoY29udmVydGVkIHRvIG15IGZvcm1hdCkgKi8KKyAgSlNBTVBBUlJBWSBjb2xvcm1hcDsgICAgICAgICAgLyogVGFyZ2EgY29sb3JtYXAgKGNvbnZlcnRlZCB0byBteSBmb3JtYXQpICovCiAKLSAganZpcnRfc2FycmF5X3B0ciB3aG9sZV9pbWFnZTsJLyogTmVlZGVkIGlmIGZ1bm55IGlucHV0IHJvdyBvcmRlciAqLwotICBKRElNRU5TSU9OIGN1cnJlbnRfcm93OwkvKiBDdXJyZW50IGxvZ2ljYWwgcm93IG51bWJlciB0byByZWFkICovCisgIGp2aXJ0X3NhcnJheV9wdHIgd2hvbGVfaW1hZ2U7IC8qIE5lZWRlZCBpZiBmdW5ueSBpbnB1dCByb3cgb3JkZXIgKi8KKyAgSkRJTUVOU0lPTiBjdXJyZW50X3JvdzsgICAgICAgLyogQ3VycmVudCBsb2dpY2FsIHJvdyBudW1iZXIgdG8gcmVhZCAqLwogCiAgIC8qIFBvaW50ZXIgdG8gcm91dGluZSB0byBleHRyYWN0IG5leHQgVGFyZ2EgcGl4ZWwgZnJvbSBpbnB1dCBmaWxlICovCiAgIEpNRVRIT0Qodm9pZCwgcmVhZF9waXhlbCwgKHRnYV9zb3VyY2VfcHRyIHNpbmZvKSk7CkBAIC02MSwxNSArNjEsMTUgQEAKICAgLyogUmVzdWx0IG9mIHJlYWRfcGl4ZWwgaXMgZGVsaXZlcmVkIGhlcmU6ICovCiAgIFVfQ0hBUiB0Z2FfcGl4ZWxbNF07CiAKLSAgaW50IHBpeGVsX3NpemU7CQkvKiBCeXRlcyBwZXIgVGFyZ2EgcGl4ZWwgKDEgdG8gNCkgKi8KKyAgaW50IHBpeGVsX3NpemU7ICAgICAgICAgICAgICAgLyogQnl0ZXMgcGVyIFRhcmdhIHBpeGVsICgxIHRvIDQpICovCiAKICAgLyogU3RhdGUgaW5mbyBmb3IgcmVhZGluZyBSTEUtY29kZWQgcGl4ZWxzOyBib3RoIGNvdW50cyBtdXN0IGJlIGluaXQgdG8gMCAqLwotICBpbnQgYmxvY2tfY291bnQ7CQkvKiAjIG9mIHBpeGVscyByZW1haW5pbmcgaW4gUkxFIGJsb2NrICovCi0gIGludCBkdXBfcGl4ZWxfY291bnQ7CQkvKiAjIG9mIHRpbWVzIHRvIGR1cGxpY2F0ZSBwcmV2aW91cyBwaXhlbCAqLworICBpbnQgYmxvY2tfY291bnQ7ICAgICAgICAgICAgICAvKiAjIG9mIHBpeGVscyByZW1haW5pbmcgaW4gUkxFIGJsb2NrICovCisgIGludCBkdXBfcGl4ZWxfY291bnQ7ICAgICAgICAgIC8qICMgb2YgdGltZXMgdG8gZHVwbGljYXRlIHByZXZpb3VzIHBpeGVsICovCiAKICAgLyogVGhpcyBzYXZlcyB0aGUgY29ycmVjdCBwaXhlbC1yb3ctZXhwYW5zaW9uIG1ldGhvZCBmb3IgcHJlbG9hZF9pbWFnZSAqLwogICBKTUVUSE9EKEpESU1FTlNJT04sIGdldF9waXhlbF9yb3dzLCAoal9jb21wcmVzc19wdHIgY2luZm8sCi0JCQkJICAgICAgIGNqcGVnX3NvdXJjZV9wdHIgc2luZm8pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNqcGVnX3NvdXJjZV9wdHIgc2luZm8pKTsKIH0gdGdhX3NvdXJjZV9zdHJ1Y3Q7CiAKIApAQCAtMTQ4LDkgKzE0OCw5IEBACiAgIC8qIFRpbWUgdG8gcmVhZCBSTEUgYmxvY2sgaGVhZGVyPyAqLwogICBpZiAoLS1zaW5mby0+YmxvY2tfY291bnQgPCAwKSB7IC8qIGRlY3JlbWVudCBwaXhlbHMgcmVtYWluaW5nIGluIGJsb2NrICovCiAgICAgaSA9IHJlYWRfYnl0ZShzaW5mbyk7Ci0gICAgaWYgKGkgJiAweDgwKSB7CQkvKiBTdGFydCBvZiBkdXBsaWNhdGUtcGl4ZWwgYmxvY2s/ICovCisgICAgaWYgKGkgJiAweDgwKSB7ICAgICAgICAgICAgIC8qIFN0YXJ0IG9mIGR1cGxpY2F0ZS1waXhlbCBibG9jaz8gKi8KICAgICAgIHNpbmZvLT5kdXBfcGl4ZWxfY291bnQgPSBpICYgMHg3RjsgLyogbnVtYmVyIG9mIGR1cHMgYWZ0ZXIgdGhpcyBvbmUgKi8KLSAgICAgIHNpbmZvLT5ibG9ja19jb3VudCA9IDA7CS8qIHRoZW4gcmVhZCBuZXcgYmxvY2sgaGVhZGVyICovCisgICAgICBzaW5mby0+YmxvY2tfY291bnQgPSAwOyAgIC8qIHRoZW4gcmVhZCBuZXcgYmxvY2sgaGVhZGVyICovCiAgICAgfSBlbHNlIHsKICAgICAgIHNpbmZvLT5ibG9ja19jb3VudCA9IGkgJiAweDdGOyAvKiBudW1iZXIgb2YgcGl4ZWxzIGFmdGVyIHRoaXMgb25lICovCiAgICAgfQpAQCAtMTc3LDcgKzE3Nyw3IEBACiAgIHRnYV9zb3VyY2VfcHRyIHNvdXJjZSA9ICh0Z2Ffc291cmNlX3B0cikgc2luZm87CiAgIHJlZ2lzdGVyIEpTQU1QUk9XIHB0cjsKICAgcmVnaXN0ZXIgSkRJTUVOU0lPTiBjb2w7Ci0gIAorCiAgIHB0ciA9IHNvdXJjZS0+cHViLmJ1ZmZlclswXTsKICAgZm9yIChjb2wgPSBjaW5mby0+aW1hZ2Vfd2lkdGg7IGNvbCA+IDA7IGNvbC0tKSB7CiAgICAgKCpzb3VyY2UtPnJlYWRfcGl4ZWwpIChzb3VyY2UpOyAvKiBMb2FkIG5leHQgcGl4ZWwgaW50byB0Z2FfcGl4ZWwgKi8KQEAgLTIxNSw3ICsyMTUsNyBAQAogICByZWdpc3RlciBpbnQgdDsKICAgcmVnaXN0ZXIgSlNBTVBST1cgcHRyOwogICByZWdpc3RlciBKRElNRU5TSU9OIGNvbDsKLSAgCisKICAgcHRyID0gc291cmNlLT5wdWIuYnVmZmVyWzBdOwogICBmb3IgKGNvbCA9IGNpbmZvLT5pbWFnZV93aWR0aDsgY29sID4gMDsgY29sLS0pIHsKICAgICAoKnNvdXJjZS0+cmVhZF9waXhlbCkgKHNvdXJjZSk7IC8qIExvYWQgbmV4dCBwaXhlbCBpbnRvIHRnYV9waXhlbCAqLwpAQCAtMjQyLDcgKzI0Miw3IEBACiAgIHRnYV9zb3VyY2VfcHRyIHNvdXJjZSA9ICh0Z2Ffc291cmNlX3B0cikgc2luZm87CiAgIHJlZ2lzdGVyIEpTQU1QUk9XIHB0cjsKICAgcmVnaXN0ZXIgSkRJTUVOU0lPTiBjb2w7Ci0gIAorCiAgIHB0ciA9IHNvdXJjZS0+cHViLmJ1ZmZlclswXTsKICAgZm9yIChjb2wgPSBjaW5mby0+aW1hZ2Vfd2lkdGg7IGNvbCA+IDA7IGNvbC0tKSB7CiAgICAgKCpzb3VyY2UtPnJlYWRfcGl4ZWwpIChzb3VyY2UpOyAvKiBMb2FkIG5leHQgcGl4ZWwgaW50byB0Z2FfcGl4ZWwgKi8KQEAgLTMzOCw4ICszMzgsOCBAQAogICB1bnNpZ25lZCBpbnQgd2lkdGgsIGhlaWdodCwgbWFwbGVuOwogICBib29sZWFuIGlzX2JvdHRvbV91cDsKIAotI2RlZmluZSBHRVRfMkIob2Zmc2V0KQkoKHVuc2lnbmVkIGludCkgVUNIKHRhcmdhaGVhZGVyW29mZnNldF0pICsgXAotCQkJICgoKHVuc2lnbmVkIGludCkgVUNIKHRhcmdhaGVhZGVyW29mZnNldCsxXSkpIDw8IDgpKQorI2RlZmluZSBHRVRfMkIob2Zmc2V0KSAgKCh1bnNpZ25lZCBpbnQpIFVDSCh0YXJnYWhlYWRlcltvZmZzZXRdKSArIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1bnNpZ25lZCBpbnQpIFVDSCh0YXJnYWhlYWRlcltvZmZzZXQrMV0pKSA8PCA4KSkKIAogICBpZiAoISBSZWFkT0soc291cmNlLT5wdWIuaW5wdXRfZmlsZSwgdGFyZ2FoZWFkZXIsIDE4KSkKICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0lOUFVUX0VPRik7CkBAIC0zNTUsMTcgKzM1NSwxNyBAQAogICB3aWR0aCA9IEdFVF8yQigxMik7CiAgIGhlaWdodCA9IEdFVF8yQigxNCk7CiAgIHNvdXJjZS0+cGl4ZWxfc2l6ZSA9IFVDSCh0YXJnYWhlYWRlclsxNl0pID4+IDM7Ci0gIGZsYWdzID0gVUNIKHRhcmdhaGVhZGVyWzE3XSk7CS8qIEltYWdlIERlc2NyaXB0b3IgYnl0ZSAqLworICBmbGFncyA9IFVDSCh0YXJnYWhlYWRlclsxN10pOyAvKiBJbWFnZSBEZXNjcmlwdG9yIGJ5dGUgKi8KIAotICBpc19ib3R0b21fdXAgPSAoKGZsYWdzICYgMHgyMCkgPT0gMCk7CS8qIGJpdCA1IHNldCA9PiB0b3AtZG93biAqLwotICBpbnRlcmxhY2VfdHlwZSA9IGZsYWdzID4+IDY7CS8qIGJpdHMgNi83IGFyZSBpbnRlcmxhY2UgY29kZSAqLworICBpc19ib3R0b21fdXAgPSAoKGZsYWdzICYgMHgyMCkgPT0gMCk7IC8qIGJpdCA1IHNldCA9PiB0b3AtZG93biAqLworICBpbnRlcmxhY2VfdHlwZSA9IGZsYWdzID4+IDY7ICAvKiBiaXRzIDYvNyBhcmUgaW50ZXJsYWNlIGNvZGUgKi8KIAotICBpZiAoY21hcHR5cGUgPiAxIHx8CQkvKiBjbWFwdHlwZSBtdXN0IGJlIDAgb3IgMSAqLworICBpZiAoY21hcHR5cGUgPiAxIHx8ICAgICAgICAgICAvKiBjbWFwdHlwZSBtdXN0IGJlIDAgb3IgMSAqLwogICAgICAgc291cmNlLT5waXhlbF9zaXplIDwgMSB8fCBzb3VyY2UtPnBpeGVsX3NpemUgPiA0IHx8CiAgICAgICAoVUNIKHRhcmdhaGVhZGVyWzE2XSkgJiA3KSAhPSAwIHx8IC8qIGJpdHMvcGl4ZWwgbXVzdCBiZSBtdWx0aXBsZSBvZiA4ICovCi0gICAgICBpbnRlcmxhY2VfdHlwZSAhPSAwKQkvKiBjdXJyZW50bHkgZG9uJ3QgYWxsb3cgaW50ZXJsYWNlZCBpbWFnZSAqLworICAgICAgaW50ZXJsYWNlX3R5cGUgIT0gMCkgICAgICAvKiBjdXJyZW50bHkgZG9uJ3QgYWxsb3cgaW50ZXJsYWNlZCBpbWFnZSAqLwogICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfVEdBX0JBRFBBUk1TKTsKLSAgCisKICAgaWYgKHN1YnR5cGUgPiA4KSB7CiAgICAgLyogSXQncyBhbiBSTEUtY29kZWQgZmlsZSAqLwogICAgIHNvdXJjZS0+cmVhZF9waXhlbCA9IHJlYWRfcmxlX3BpeGVsOwpAQCAtMzc3LDE4ICszNzcsMTggQEAKICAgfQogCiAgIC8qIE5vdyBzaG91bGQgaGF2ZSBzdWJ0eXBlIDEsIDIsIG9yIDMgKi8KLSAgY29tcG9uZW50cyA9IDM7CQkvKiB1bnRpbCBwcm92ZW4gZGlmZmVyZW50ICovCisgIGNvbXBvbmVudHMgPSAzOyAgICAgICAgICAgICAgIC8qIHVudGlsIHByb3ZlbiBkaWZmZXJlbnQgKi8KICAgY2luZm8tPmluX2NvbG9yX3NwYWNlID0gSkNTX1JHQjsKIAogICBzd2l0Y2ggKHN1YnR5cGUpIHsKLSAgY2FzZSAxOgkJCS8qIENvbG9ybWFwcGVkIGltYWdlICovCisgIGNhc2UgMTogICAgICAgICAgICAgICAgICAgICAgIC8qIENvbG9ybWFwcGVkIGltYWdlICovCiAgICAgaWYgKHNvdXJjZS0+cGl4ZWxfc2l6ZSA9PSAxICYmIGNtYXB0eXBlID09IDEpCiAgICAgICBzb3VyY2UtPmdldF9waXhlbF9yb3dzID0gZ2V0XzhiaXRfcm93OwogICAgIGVsc2UKICAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfVEdBX0JBRFBBUk1TKTsKICAgICBUUkFDRU1TMihjaW5mbywgMSwgSlRSQ19UR0FfTUFQUEVELCB3aWR0aCwgaGVpZ2h0KTsKICAgICBicmVhazsKLSAgY2FzZSAyOgkJCS8qIFJHQiBpbWFnZSAqLworICBjYXNlIDI6ICAgICAgICAgICAgICAgICAgICAgICAvKiBSR0IgaW1hZ2UgKi8KICAgICBzd2l0Y2ggKHNvdXJjZS0+cGl4ZWxfc2l6ZSkgewogICAgIGNhc2UgMjoKICAgICAgIHNvdXJjZS0+Z2V0X3BpeGVsX3Jvd3MgPSBnZXRfMTZiaXRfcm93OwpAQCAtNDA1LDcgKzQwNSw3IEBACiAgICAgfQogICAgIFRSQUNFTVMyKGNpbmZvLCAxLCBKVFJDX1RHQSwgd2lkdGgsIGhlaWdodCk7CiAgICAgYnJlYWs7Ci0gIGNhc2UgMzoJCQkvKiBHcmF5c2NhbGUgaW1hZ2UgKi8KKyAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgICAgLyogR3JheXNjYWxlIGltYWdlICovCiAgICAgY29tcG9uZW50cyA9IDE7CiAgICAgY2luZm8tPmluX2NvbG9yX3NwYWNlID0gSkNTX0dSQVlTQ0FMRTsKICAgICBpZiAoc291cmNlLT5waXhlbF9zaXplID09IDEpCkBAIC00NDAsOCArNDQwLDggQEAKICAgICBzb3VyY2UtPnB1Yi5idWZmZXJfaGVpZ2h0ID0gMTsKICAgICBzb3VyY2UtPnB1Yi5nZXRfcGl4ZWxfcm93cyA9IHNvdXJjZS0+Z2V0X3BpeGVsX3Jvd3M7CiAgIH0KLSAgCi0gIHdoaWxlIChpZGxlbi0tKQkJLyogVGhyb3cgYXdheSBJRCBmaWVsZCAqLworCisgIHdoaWxlIChpZGxlbi0tKSAgICAgICAgICAgICAgIC8qIFRocm93IGF3YXkgSUQgZmllbGQgKi8KICAgICAodm9pZCkgcmVhZF9ieXRlKHNvdXJjZSk7CiAKICAgaWYgKG1hcGxlbiA+IDApIHsKQEAgLTQ1Myw3ICs0NTMsNyBAQAogICAgIC8qIGFuZCByZWFkIGl0IGZyb20gdGhlIGZpbGUgKi8KICAgICByZWFkX2NvbG9ybWFwKHNvdXJjZSwgKGludCkgbWFwbGVuLCBVQ0godGFyZ2FoZWFkZXJbN10pKTsKICAgfSBlbHNlIHsKLSAgICBpZiAoY21hcHR5cGUpCQkvKiBidXQgeW91IHByb21pc2VkIGEgY21hcCEgKi8KKyAgICBpZiAoY21hcHR5cGUpICAgICAgICAgICAgICAgLyogYnV0IHlvdSBwcm9taXNlZCBhIGNtYXAhICovCiAgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX1RHQV9CQURQQVJNUyk7CiAgICAgc291cmNlLT5jb2xvcm1hcCA9IE5VTEw7CiAgIH0KQEAgLTQ4OCw4ICs0ODgsOCBAQAogICAvKiBDcmVhdGUgbW9kdWxlIGludGVyZmFjZSBvYmplY3QgKi8KICAgc291cmNlID0gKHRnYV9zb3VyY2VfcHRyKQogICAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKLQkJCQkgIFNJWkVPRih0Z2Ffc291cmNlX3N0cnVjdCkpOwotICBzb3VyY2UtPmNpbmZvID0gY2luZm87CS8qIG1ha2UgYmFjayBsaW5rIGZvciBzdWJyb3V0aW5lcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJWkVPRih0Z2Ffc291cmNlX3N0cnVjdCkpOworICBzb3VyY2UtPmNpbmZvID0gY2luZm87ICAgICAgICAvKiBtYWtlIGJhY2sgbGluayBmb3Igc3Vicm91dGluZXMgKi8KICAgLyogRmlsbCBpbiBtZXRob2QgcHRycywgZXhjZXB0IGdldF9waXhlbF9yb3dzIHdoaWNoIHN0YXJ0X2lucHV0IHNldHMgKi8KICAgc291cmNlLT5wdWIuc3RhcnRfaW5wdXQgPSBzdGFydF9pbnB1dF90Z2E7CiAgIHNvdXJjZS0+cHViLmZpbmlzaF9pbnB1dCA9IGZpbmlzaF9pbnB1dF90Z2E7CmRpZmYgLS1naXQgYS9yZWxlYXNlL1JlYWRNZS5ydGYgYi9yZWxlYXNlL1JlYWRNZS5ydGYKaW5kZXggMDZjOTRhYi4uMmFlNDg3OCAxMDA2NDQKLS0tIGEvcmVsZWFzZS9SZWFkTWUucnRmCisrKyBiL3JlbGVhc2UvUmVhZE1lLnJ0ZgpAQCAtMSwxMyArMSwxMyBAQAoge1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29jb2FydGYxMDM4XGNvY29hc3VicnRmMzYwCiB7XGZvbnR0YmxcZjBcZnN3aXNzXGZjaGFyc2V0MCBIZWx2ZXRpY2E7fQoge1xjb2xvcnRibDtccmVkMjU1XGdyZWVuMjU1XGJsdWUyNTU7fQotXG1hcmdsMTQ0MFxtYXJncjE0NDBcdmlld3cxNTIwMFx2aWV3aDk2MDBcdmlld2tpbmQwCitcbWFyZ2wxNDQwXG1hcmdyMTQ0MFx2aWV3dzI2MzgwXHZpZXdoMTU4NDBcdmlld2tpbmQwCiBcZGVmdGFiNzIwCiBccGFyZFxwYXJkZWZ0YWI3MjBccWxccW5hdHVyYWwKIAotXGYwXGZzMjQgXGNmMCBsaWJqcGVnLXR1cmJvIGlzIGEgZGVyaXZhdGl2ZSBvZiBsaWJqcGVnIHRoYXQgdXNlcyBTSU1EIGluc3RydWN0aW9ucyAoTU1YLCBTU0UyLCBORU9OKSB0byBhY2NlbGVyYXRlIGJhc2VsaW5lIEpQRUcgY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gb24geDg2LCB4ODYtNjQsIGFuZCBBUk0gc3lzdGVtcy4gIE9uIHN1Y2ggc3lzdGVtcywgbGlianBlZy10dXJibyBpcyBnZW5lcmFsbHkgMi00eCBhcyBmYXN0IGFzIHRoZSB1bm1vZGlmaWVkIHZlcnNpb24gb2YgbGlianBlZywgYWxsIGVsc2UgYmVpbmcgZXF1YWwuXAorXGYwXGZzMjQgXGNmMCBsaWJqcGVnLXR1cmJvIGlzIGEgSlBFRyBpbWFnZSBjb2RlYyB0aGF0IHVzZXMgU0lNRCBpbnN0cnVjdGlvbnMgKE1NWCwgU1NFMiwgTkVPTikgdG8gYWNjZWxlcmF0ZSBiYXNlbGluZSBKUEVHIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIG9uIHg4NiwgeDg2LTY0LCBhbmQgQVJNIHN5c3RlbXMuICBPbiBzdWNoIHN5c3RlbXMsIGxpYmpwZWctdHVyYm8gaXMgZ2VuZXJhbGx5IDItNHggYXMgZmFzdCBhcyBsaWJqcGVnLCBhbGwgZWxzZSBiZWluZyBlcXVhbC4gIE9uIG90aGVyIHR5cGVzIG9mIHN5c3RlbXMsIGxpYmpwZWctdHVyYm8gY2FuIHN0aWxsIG91dHBlcmZvcm0gbGlianBlZyBieSBhIHNpZ25pZmljYW50IGFtb3VudCwgYnkgdmlydHVlIG9mIGl0cyBoaWdobHktb3B0aW1pemVkIEh1ZmZtYW4gY29kaW5nIHJvdXRpbmVzLiAgSW4gbWFueSBjYXNlcywgdGhlIHBlcmZvcm1hbmNlIG9mIGxpYmpwZWctdHVyYm8gcml2YWxzIHRoYXQgb2YgcHJvcHJpZXRhcnkgaGlnaC1zcGVlZCBKUEVHIGNvZGVjcy5cCiBcCi1saWJqcGVnLXR1cmJvIHdhcyBvcmlnaW5hbGx5IGJhc2VkIG9uIGxpYmpwZWcvU0lNRCBieSBNaXlhc2FrYSBNYXNhcnUsIGJ1dCB0aGUgVGlnZXJWTkMgYW5kIFZpcnR1YWxHTCBwcm9qZWN0cyBtYWRlIG51bWVyb3VzIGVuaGFuY2VtZW50cyB0byB0aGUgY29kZWMgaW4gMjAwOSwgaW5jbHVkaW5nIGltcHJvdmVkIHN1cHBvcnQgZm9yIE1hYyBPUyBYLCA2NC1iaXQgc3VwcG9ydCwgc3VwcG9ydCBmb3IgMzItYml0IGFuZCBiaWctZW5kaWFuIHBpeGVsIGZvcm1hdHMgKFJHQlgsIFhCR1IsIGV0Yy4pLCBhY2NlbGVyYXRlZCBIdWZmbWFuIGVuY29kaW5nL2RlY29kaW5nLCBhbmQgdmFyaW91cyBidWcgZml4ZXMuICBUaGUgZ29hbCB3YXMgdG8gcHJvZHVjZSBhIGZ1bGx5IG9wZW4tc291cmNlIGNvZGVjIHRoYXQgY291bGQgcmVwbGFjZSB0aGUgcGFydGlhbGx5IGNsb3NlZC1zb3VyY2UgVHVyYm9KUEVHL0lQUCBjb2RlYyB1c2VkIGJ5IFZpcnR1YWxHTCBhbmQgVHVyYm9WTkMuICBsaWJqcGVnLXR1cmJvIGdlbmVyYWxseSBhY2hpZXZlcyA4MC0xMjAlIG9mIHRoZSBwZXJmb3JtYW5jZSBvZiBUdXJib0pQRUcvSVBQLiAgSXQgaXMgZmFzdGVyIGluIHNvbWUgYXJlYXMgYnV0IHNsb3dlciBpbiBvdGhlcnMuXAorbGlianBlZy10dXJibyBpbXBsZW1lbnRzIGJvdGggdGhlIHRyYWRpdGlvbmFsIGxpYmpwZWcgQVBJIGFzIHdlbGwgYXMgdGhlIGxlc3MgcG93ZXJmdWwgYnV0IG1vcmUgc3RyYWlnaHRmb3J3YXJkIFR1cmJvSlBFRyBBUEkuICBsaWJqcGVnLXR1cmJvIGFsc28gZmVhdHVyZXMgY29sb3JzcGFjZSBleHRlbnNpb25zIHRoYXQgYWxsb3cgaXQgdG8gY29tcHJlc3MgZnJvbS9kZWNvbXByZXNzIHRvIDMyLWJpdCBhbmQgYmlnLWVuZGlhbiBwaXhlbCBidWZmZXJzIChSR0JYLCBYQkdSLCBldGMuKSwgYXMgd2VsbCBhcyBhIGZ1bGwtZmVhdHVyZWQgSmF2YSBpbnRlcmZhY2UuXAogXAotSW4gZWFybHkgMjAxMCwgbGlianBlZy10dXJibyBzcHVuIG9mZiBpbnRvIGl0cyBvd24gaW5kZXBlbmRlbnQgcHJvamVjdCwgd2l0aCB0aGUgZ29hbCBvZiBtYWtpbmcgaGlnaC1zcGVlZCBKUEVHIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gdGVjaG5vbG9neSBhdmFpbGFibGUgdG8gYSBicm9hZGVyIHJhbmdlIG9mIHVzZXJzIGFuZCBkZXZlbG9wZXJzLlwKK2xpYmpwZWctdHVyYm8gd2FzIG9yaWdpbmFsbHkgYmFzZWQgb24gbGlianBlZy9TSU1ELCBhbiBNTVgtYWNjZWxlcmF0ZWQgZGVyaXZhdGl2ZSBvZiBsaWJqcGVnIHY2YiBkZXZlbG9wZWQgYnkgTWl5YXNha2EgTWFzYXJ1LiAgVGhlIFRpZ2VyVk5DIGFuZCBWaXJ0dWFsR0wgcHJvamVjdHMgbWFkZSBudW1lcm91cyBlbmhhbmNlbWVudHMgdG8gdGhlIGNvZGVjIGluIDIwMDksIGFuZCBpbiBlYXJseSAyMDEwLCBsaWJqcGVnLXR1cmJvIHNwdW4gb2ZmIGludG8gYW4gaW5kZXBlbmRlbnQgcHJvamVjdCwgd2l0aCB0aGUgZ29hbCBvZiBtYWtpbmcgaGlnaC1zcGVlZCBKUEVHIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gdGVjaG5vbG9neSBhdmFpbGFibGUgdG8gYSBicm9hZGVyIHJhbmdlIG9mIHVzZXJzIGFuZCBkZXZlbG9wZXJzLlwKIH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9yZWxlYXNlL1dlbGNvbWUucnRmIGIvcmVsZWFzZS9XZWxjb21lLnJ0ZgppbmRleCA5MDgyZjY1Li5hNTcwYzViIDEwMDc1NQotLS0gYS9yZWxlYXNlL1dlbGNvbWUucnRmCisrKyBiL3JlbGVhc2UvV2VsY29tZS5ydGYKQEAgLTEsNCArMSw0IEBACi17XHJ0ZjFcYW5zaVxhbnNpY3BnMTI1Mlxjb2NvYXJ0ZjEwMzhcY29jb2FzdWJydGYzNTAKK3tccnRmMVxhbnNpXGFuc2ljcGcxMjUyXGNvY29hcnRmMTAzOFxjb2NvYXN1YnJ0ZjM2MAoge1xmb250dGJsXGYwXGZzd2lzc1xmY2hhcnNldDAgSGVsdmV0aWNhO1xmMVxmbW9kZXJuXGZjaGFyc2V0MCBDb3VyaWVyTmV3UFNNVDt9CiB7XGNvbG9ydGJsO1xyZWQyNTVcZ3JlZW4yNTVcYmx1ZTI1NTt9CiBcbWFyZ2wxNDQwXG1hcmdyMTQ0MFx2aWV3dzkwMDBcdmlld2g4NDAwXHZpZXdraW5kMApAQCAtMTQsNiArMTQsNCBAQAogCiBcZjAgXGNmMCBcCiBmcm9tIHRoZSBjb21tYW5kIGxpbmUuXAotXAotSWYgVHVyYm9KUEVHL0lQUCBpcyBjdXJyZW50bHkgaW5zdGFsbGVkLCB0aGVuIGl0IG11c3QgYmUgcmVtb3ZlZCBwcmlvciB0byBpbnN0YWxsaW5nIGxpYmpwZWctdHVyYm8uXAogfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3JlbGVhc2UvY29weXJpZ2h0IGIvcmVsZWFzZS9jb3B5cmlnaHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDEyNTM4OGQuLjAwMDAwMDAKLS0tIGEvcmVsZWFzZS9jb3B5cmlnaHQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1saWJqcGVnLXR1cmJvIGlzIHJlbGVhc2VkIHVuZGVyIGEgQlNELXN0eWxlIGxpY2Vuc2UgKHNlZSBSRUFETUUgYW5kIFJFQURNRS10dXJiby50eHQpCmRpZmYgLS1naXQgYS9yZWxlYXNlL2RlYi1jb250cm9sLnRtcGwgYi9yZWxlYXNlL2RlYi1jb250cm9sLnRtcGwKaW5kZXggOWNmN2M0Ni4uNTEwYjFkNiAxMDA2NDQKLS0tIGEvcmVsZWFzZS9kZWItY29udHJvbC50bXBsCisrKyBiL3JlbGVhc2UvZGViLWNvbnRyb2wudG1wbApAQCAtNCwyMyArNCwyOCBAQAogUHJpb3JpdHk6IG9wdGlvbmFsCiBBcmNoaXRlY3R1cmU6IHtfX0FSQ0h9CiBFc3NlbnRpYWw6IG5vCi1NYWludGFpbmVyOiBUaGUgbGlianBlZy10dXJibyBQcm9qZWN0IFtodHRwOi8vd3d3LmxpYmpwZWctdHVyYm8ub3JnXQorTWFpbnRhaW5lcjogVGhlIGxpYmpwZWctdHVyYm8gUHJvamVjdCA8aW5mb3JtYXRpb25AbGlianBlZy10dXJiby5vcmc+CitIb21lcGFnZTogaHR0cDovL3d3dy5saWJqcGVnLXR1cmJvLm9yZworSW5zdGFsbGVkLVNpemU6IHtfX1NJWkV9CiBEZXNjcmlwdGlvbjogQSBTSU1ELWFjY2VsZXJhdGVkIEpQRUcgY29kZWMgdGhhdCBwcm92aWRlcyBib3RoIHRoZSBsaWJqcGVnIGFuZCBUdXJib0pQRUcgQVBJcwotIGxpYmpwZWctdHVyYm8gaXMgYSBkZXJpdmF0aXZlIG9mIGxpYmpwZWcgdGhhdCB1c2VzIFNJTUQgaW5zdHJ1Y3Rpb25zIChNTVgsCi0gU1NFMiwgTkVPTikgdG8gYWNjZWxlcmF0ZSBiYXNlbGluZSBKUEVHIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIG9uIHg4NiwKKyBsaWJqcGVnLXR1cmJvIGlzIGEgSlBFRyBpbWFnZSBjb2RlYyB0aGF0IHVzZXMgU0lNRCBpbnN0cnVjdGlvbnMgKE1NWCwgU1NFMiwKKyBORU9OKSB0byBhY2NlbGVyYXRlIGJhc2VsaW5lIEpQRUcgY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gb24geDg2LAogIHg4Ni02NCwgYW5kIEFSTSBzeXN0ZW1zLiAgT24gc3VjaCBzeXN0ZW1zLCBsaWJqcGVnLXR1cmJvIGlzIGdlbmVyYWxseSAyLTR4IGFzCi0gZmFzdCBhcyB0aGUgdW5tb2RpZmllZCB2ZXJzaW9uIG9mIGxpYmpwZWcsIGFsbCBlbHNlIGJlaW5nIGVxdWFsLgorIGZhc3QgYXMgbGlianBlZywgYWxsIGVsc2UgYmVpbmcgZXF1YWwuICBPbiBvdGhlciB0eXBlcyBvZiBzeXN0ZW1zLAorIGxpYmpwZWctdHVyYm8gY2FuIHN0aWxsIG91dHBlcmZvcm0gbGlianBlZyBieSBhIHNpZ25pZmljYW50IGFtb3VudCwgYnkgdmlydHVlCisgb2YgaXRzIGhpZ2hseS1vcHRpbWl6ZWQgSHVmZm1hbiBjb2Rpbmcgcm91dGluZXMuICBJbiBtYW55IGNhc2VzLCB0aGUKKyBwZXJmb3JtYW5jZSBvZiBsaWJqcGVnLXR1cmJvIHJpdmFscyB0aGF0IG9mIHByb3ByaWV0YXJ5IGhpZ2gtc3BlZWQgSlBFRworIGNvZGVjcy4KICAuCi0gbGlianBlZy10dXJibyB3YXMgb3JpZ2luYWxseSBiYXNlZCBvbiBsaWJqcGVnL1NJTUQgYnkgTWl5YXNha2EgTWFzYXJ1LCBidXQKLSB0aGUgVGlnZXJWTkMgYW5kIFZpcnR1YWxHTCBwcm9qZWN0cyBtYWRlIG51bWVyb3VzIGVuaGFuY2VtZW50cyB0byB0aGUgY29kZWMKLSBpbiAyMDA5LCBpbmNsdWRpbmcgaW1wcm92ZWQgc3VwcG9ydCBmb3IgTWFjIE9TIFgsIDY0LWJpdCBzdXBwb3J0LCBzdXBwb3J0Ci0gZm9yIDMyLWJpdCBhbmQgYmlnLWVuZGlhbiBwaXhlbCBmb3JtYXRzIChSR0JYLCBYQkdSLCBldGMuKSwgYWNjZWxlcmF0ZWQKLSBIdWZmbWFuIGVuY29kaW5nL2RlY29kaW5nLCBhbmQgdmFyaW91cyBidWcgZml4ZXMuICBUaGUgZ29hbCB3YXMgdG8gcHJvZHVjZSBhCi0gZnVsbHkgb3Blbi1zb3VyY2UgY29kZWMgdGhhdCBjb3VsZCByZXBsYWNlIHRoZSBwYXJ0aWFsbHkgY2xvc2VkLXNvdXJjZQotIFR1cmJvSlBFRy9JUFAgY29kZWMgdXNlZCBieSBWaXJ0dWFsR0wgYW5kIFR1cmJvVk5DLiAgbGlianBlZy10dXJibyBnZW5lcmFsbHkKLSBhY2hpZXZlcyA4MC0xMjAlIG9mIHRoZSBwZXJmb3JtYW5jZSBvZiBUdXJib0pQRUcvSVBQLiAgSXQgaXMgZmFzdGVyIGluIHNvbWUKLSBhcmVhcyBidXQgc2xvd2VyIGluIG90aGVycy4KKyBsaWJqcGVnLXR1cmJvIGltcGxlbWVudHMgYm90aCB0aGUgdHJhZGl0aW9uYWwgbGlianBlZyBBUEkgYXMgd2VsbCBhcyB0aGUgbGVzcworIHBvd2VyZnVsIGJ1dCBtb3JlIHN0cmFpZ2h0Zm9yd2FyZCBUdXJib0pQRUcgQVBJLiAgbGlianBlZy10dXJibyBhbHNvIGZlYXR1cmVzCisgY29sb3JzcGFjZSBleHRlbnNpb25zIHRoYXQgYWxsb3cgaXQgdG8gY29tcHJlc3MgZnJvbS9kZWNvbXByZXNzIHRvIDMyLWJpdCBhbmQKKyBiaWctZW5kaWFuIHBpeGVsIGJ1ZmZlcnMgKFJHQlgsIFhCR1IsIGV0Yy4pLCBhcyB3ZWxsIGFzIGEgZnVsbC1mZWF0dXJlZCBKYXZhCisgaW50ZXJmYWNlLgogIC4KLSBJbiBlYXJseSAyMDEwLCBsaWJqcGVnLXR1cmJvIHNwdW4gb2ZmIGludG8gaXRzIG93biBpbmRlcGVuZGVudCBwcm9qZWN0LCB3aXRoCi0gdGhlIGdvYWwgb2YgbWFraW5nIGhpZ2gtc3BlZWQgSlBFRyBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIHRlY2hub2xvZ3kKLSBhdmFpbGFibGUgdG8gYSBicm9hZGVyIHJhbmdlIG9mIHVzZXJzIGFuZCBkZXZlbG9wZXJzLgorIGxpYmpwZWctdHVyYm8gd2FzIG9yaWdpbmFsbHkgYmFzZWQgb24gbGlianBlZy9TSU1ELCBhbiBNTVgtYWNjZWxlcmF0ZWQKKyBkZXJpdmF0aXZlIG9mIGxpYmpwZWcgdjZiIGRldmVsb3BlZCBieSBNaXlhc2FrYSBNYXNhcnUuICBUaGUgVGlnZXJWTkMgYW5kCisgVmlydHVhbEdMIHByb2plY3RzIG1hZGUgbnVtZXJvdXMgZW5oYW5jZW1lbnRzIHRvIHRoZSBjb2RlYyBpbiAyMDA5LCBhbmQgaW4KKyBlYXJseSAyMDEwLCBsaWJqcGVnLXR1cmJvIHNwdW4gb2ZmIGludG8gYW4gaW5kZXBlbmRlbnQgcHJvamVjdCwgd2l0aCB0aGUgZ29hbAorIG9mIG1ha2luZyBoaWdoLXNwZWVkIEpQRUcgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiB0ZWNobm9sb2d5IGF2YWlsYWJsZSB0byBhCisgYnJvYWRlciByYW5nZSBvZiB1c2VycyBhbmQgZGV2ZWxvcGVycy4KZGlmZiAtLWdpdCBhL3JlbGVhc2UvbGlianBlZy10dXJiby5uc2kuaW4gYi9yZWxlYXNlL2xpYmpwZWctdHVyYm8ubnNpLmluCmluZGV4IGY0NjQzZmQuLjRmNjUzMDMgMTAwNzU1Ci0tLSBhL3JlbGVhc2UvbGlianBlZy10dXJiby5uc2kuaW4KKysrIGIvcmVsZWFzZS9saWJqcGVnLXR1cmJvLm5zaS5pbgpAQCAtMSw3ICsxLDcgQEAKICFpbmNsdWRlIHg2NC5uc2gKIE5hbWUgIkBDTUFLRV9QUk9KRUNUX05BTUVAIFNESyBmb3IgQElOU1RfUExBVEZPUk1AIgogT3V0RmlsZSAiQENNQUtFX0JJTkFSWV9ESVJAXCR7QlVJTERESVJ9QElOU1RfTkFNRUAuZXhlIgotSW5zdGFsbERpciBjOlxASU5TVF9ESVJACitJbnN0YWxsRGlyICJASU5TVF9ESVJAIgogCiBTZXRDb21wcmVzc29yIGJ6aXAyCiAKQEAgLTQxLDYgKzQxLDExIEBACiAhZW5kaWYKIAlTZXRPdXRQYXRoICRJTlNURElSXGJpbgogIWlmZGVmIEdDQworCUZpbGUgIkBDTUFLRV9CSU5BUllfRElSQFxsaWJ0dXJib2pwZWcuZGxsIgorIWVsc2UKKwlGaWxlICJAQ01BS0VfQklOQVJZX0RJUkBcJHtCVUlMRERJUn10dXJib2pwZWcuZGxsIgorIWVuZGlmCishaWZkZWYgR0NDCiAJRmlsZSAiL29uYW1lPWxpYmpwZWctQERMTF9WRVJTSU9OQC5kbGwiICJAQ01BS0VfQklOQVJZX0RJUkBcc2hhcmVkbGliXGxpYmpwZWctKi5kbGwiIAogIWVsc2UKIAlGaWxlICJAQ01BS0VfQklOQVJZX0RJUkBcc2hhcmVkbGliXCR7QlVJTERESVJ9anBlZ0BETExfVkVSU0lPTkAuZGxsIgpAQCAtODIsMTIgKzg3LDEyIEBACiAJRmlsZSAiQENNQUtFX1NPVVJDRV9ESVJAXHVzYWdlLnR4dCIKIAlGaWxlICJAQ01BS0VfU09VUkNFX0RJUkBcd2l6YXJkLnR4dCIKIAotCVdyaXRlUmVnU3RyIEhLTE0gIlNPRlRXQVJFXEBJTlNUX0RJUkAgQFZFUlNJT05AIiAiSW5zdGFsbF9EaXIiICIkSU5TVERJUiIKKwlXcml0ZVJlZ1N0ciBIS0xNICJTT0ZUV0FSRVxASU5TVF9SRUdfTkFNRUAgQFZFUlNJT05AIiAiSW5zdGFsbF9EaXIiICIkSU5TVERJUiIKIAotCVdyaXRlUmVnU3RyIEhLTE0gIlNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFxASU5TVF9ESVJAIEBWRVJTSU9OQCIgIkRpc3BsYXlOYW1lIiAiQENNQUtFX1BST0pFQ1RfTkFNRUAgU0RLIHZAVkVSU0lPTkAgZm9yIEBJTlNUX1BMQVRGT1JNQCIKLQlXcml0ZVJlZ1N0ciBIS0xNICJTb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxVbmluc3RhbGxcQElOU1RfRElSQCBAVkVSU0lPTkAiICJVbmluc3RhbGxTdHJpbmciICciJElOU1RESVJcdW5pbnN0YWxsX0BWRVJTSU9OQC5leGUiJwotCVdyaXRlUmVnRFdPUkQgSEtMTSAiU29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXEBJTlNUX0RJUkAgQFZFUlNJT05AIiAiTm9Nb2RpZnkiIDEKLQlXcml0ZVJlZ0RXT1JEIEhLTE0gIlNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFxASU5TVF9ESVJAIEBWRVJTSU9OQCIgIk5vUmVwYWlyIiAxCisJV3JpdGVSZWdTdHIgSEtMTSAiU29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXEBJTlNUX1JFR19OQU1FQCBAVkVSU0lPTkAiICJEaXNwbGF5TmFtZSIgIkBDTUFLRV9QUk9KRUNUX05BTUVAIFNESyB2QFZFUlNJT05AIGZvciBASU5TVF9QTEFURk9STUAiCisJV3JpdGVSZWdTdHIgSEtMTSAiU29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXEBJTlNUX1JFR19OQU1FQCBAVkVSU0lPTkAiICJVbmluc3RhbGxTdHJpbmciICciJElOU1RESVJcdW5pbnN0YWxsX0BWRVJTSU9OQC5leGUiJworCVdyaXRlUmVnRFdPUkQgSEtMTSAiU29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXEBJTlNUX1JFR19OQU1FQCBAVkVSU0lPTkAiICJOb01vZGlmeSIgMQorCVdyaXRlUmVnRFdPUkQgSEtMTSAiU29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXEBJTlNUX1JFR19OQU1FQCBAVkVSU0lPTkAiICJOb1JlcGFpciIgMQogCVdyaXRlVW5pbnN0YWxsZXIgInVuaW5zdGFsbF9AVkVSU0lPTkAuZXhlIgogU2VjdGlvbkVuZAogCkBAIC0xMDAsMTkgKzEwNSwyMSBAQAogCiAJU2V0U2hlbGxWYXJDb250ZXh0IGFsbAogCi0JRGVsZXRlUmVnS2V5IEhLTE0gIlNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFxASU5TVF9ESVJAIEBWRVJTSU9OQCIKLQlEZWxldGVSZWdLZXkgSEtMTSAiU09GVFdBUkVcQElOU1RfRElSQCBAVkVSU0lPTkAiCisJRGVsZXRlUmVnS2V5IEhLTE0gIlNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFxASU5TVF9SRUdfTkFNRUAgQFZFUlNJT05AIgorCURlbGV0ZVJlZ0tleSBIS0xNICJTT0ZUV0FSRVxASU5TVF9SRUdfTkFNRUAgQFZFUlNJT05AIgogCiAhaWZkZWYgR0NDCiAJRGVsZXRlICRJTlNURElSXGJpblxsaWJqcGVnLUBETExfVkVSU0lPTkAuZGxsCiAJRGVsZXRlICRTWVNESVJcbGlidHVyYm9qcGVnLmRsbAotCURlbGV0ZSAkSU5TVERJUlxsaWJcbGlidHVyYm9qcGVnLmRsbC5hIgotCURlbGV0ZSAkSU5TVERJUlxsaWJcbGlidHVyYm9qcGVnLmEiCi0JRGVsZXRlICRJTlNURElSXGxpYlxsaWJqcGVnLmRsbC5hIgotCURlbGV0ZSAkSU5TVERJUlxsaWJcbGlianBlZy5hIgorCURlbGV0ZSAkSU5TVERJUlxiaW5cbGlidHVyYm9qcGVnLmRsbAorCURlbGV0ZSAkSU5TVERJUlxsaWJcbGlidHVyYm9qcGVnLmRsbC5hCisJRGVsZXRlICRJTlNURElSXGxpYlxsaWJ0dXJib2pwZWcuYQorCURlbGV0ZSAkSU5TVERJUlxsaWJcbGlianBlZy5kbGwuYQorCURlbGV0ZSAkSU5TVERJUlxsaWJcbGlianBlZy5hCiAhZWxzZQogCURlbGV0ZSAkSU5TVERJUlxiaW5canBlZ0BETExfVkVSU0lPTkAuZGxsCiAJRGVsZXRlICRTWVNESVJcdHVyYm9qcGVnLmRsbAorCURlbGV0ZSAkSU5TVERJUlxiaW5cdHVyYm9qcGVnLmRsbAogCURlbGV0ZSAkSU5TVERJUlxsaWJcanBlZy5saWIKIAlEZWxldGUgJElOU1RESVJcbGliXGpwZWctc3RhdGljLmxpYgogCURlbGV0ZSAkSU5TVERJUlxsaWJcdHVyYm9qcGVnLmxpYgpAQCAtMTI3LDExICsxMzQsMTEgQEAKIAlEZWxldGUgJElOU1RESVJcYmluXHRqYmVuY2guZXhlCiAJRGVsZXRlICRJTlNURElSXGJpblxyZGpwZ2NvbS5leGUKIAlEZWxldGUgJElOU1RESVJcYmluXHdyanBnY29tLmV4ZQotCURlbGV0ZSAkSU5TVERJUlxpbmNsdWRlXGpjb25maWcuaCIKLQlEZWxldGUgJElOU1RESVJcaW5jbHVkZVxqZXJyb3IuaCIKLQlEZWxldGUgJElOU1RESVJcaW5jbHVkZVxqbW9yZWNmZy5oIgotCURlbGV0ZSAkSU5TVERJUlxpbmNsdWRlXGpwZWdsaWIuaCIKLQlEZWxldGUgJElOU1RESVJcaW5jbHVkZVx0dXJib2pwZWcuaCIKKwlEZWxldGUgJElOU1RESVJcaW5jbHVkZVxqY29uZmlnLmgKKwlEZWxldGUgJElOU1RESVJcaW5jbHVkZVxqZXJyb3IuaAorCURlbGV0ZSAkSU5TVERJUlxpbmNsdWRlXGptb3JlY2ZnLmgKKwlEZWxldGUgJElOU1RESVJcaW5jbHVkZVxqcGVnbGliLmgKKwlEZWxldGUgJElOU1RESVJcaW5jbHVkZVx0dXJib2pwZWcuaAogCURlbGV0ZSAkSU5TVERJUlx1bmluc3RhbGxfQFZFUlNJT05ALmV4ZQogCURlbGV0ZSAkSU5TVERJUlxkb2NcUkVBRE1FCiAJRGVsZXRlICRJTlNURElSXGRvY1xSRUFETUUtdHVyYm8udHh0CmRpZmYgLS1naXQgYS9yZWxlYXNlL2xpYmpwZWctdHVyYm8uc3BlYy5pbiBiL3JlbGVhc2UvbGlianBlZy10dXJiby5zcGVjLmluCmluZGV4IDllMGZmODguLjIwN2Q2MzggMTAwNjQ0Ci0tLSBhL3JlbGVhc2UvbGlianBlZy10dXJiby5zcGVjLmluCisrKyBiL3JlbGVhc2UvbGlianBlZy10dXJiby5zcGVjLmluCkBAIC0xLDExICsxLDMyIEBACisjIFBhdGggdW5kZXIgd2hpY2ggbGlianBlZy10dXJibyBzaG91bGQgYmUgaW5zdGFsbGVkCislZGVmaW5lIF9wcmVmaXggJXtfX3ByZWZpeH0KKworIyBQYXRoIHVuZGVyIHdoaWNoIGV4ZWN1dGFibGVzIHNob3VsZCBiZSBpbnN0YWxsZWQKKyVkZWZpbmUgX2JpbmRpciAle19fYmluZGlyfQorCisjIFBhdGggdW5kZXIgd2hpY2ggSmF2YSBjbGFzc2VzIGFuZCBtYW4gcGFnZXMgc2hvdWxkIGJlIGluc3RhbGxlZAorJWRlZmluZSBfZGF0YWRpciAle19fZGF0YWRpcn0KKworIyBQYXRoIHVuZGVyIHdoaWNoIGRvY3Mgc2hvdWxkIGJlIGluc3RhbGxlZAorJWRlZmluZSBfZG9jZGlyIC91c3Ivc2hhcmUvZG9jLyV7bmFtZX0tJXt2ZXJzaW9ufQorCisjIFBhdGggdW5kZXIgd2hpY2ggaGVhZGVycyBzaG91bGQgYmUgaW5zdGFsbGVkCislZGVmaW5lIF9pbmNsdWRlZGlyICV7X19pbmNsdWRlZGlyfQorCisjIF9saWJkaXIgaXMgc2V0IHRvICV7X3ByZWZpeH0vJXtfbGlifSBieSBkZWZhdWx0CiAlaWZhcmNoIHg4Nl82NAotJWRlZmluZSBfX2xpYiBsaWI2NAorJWRlZmluZSBfbGliIGxpYjY0CiAlZWxzZQotJWRlZmluZSBfX2xpYiBsaWIKKyVpZiAiJXtfcHJlZml4fSIgPT0gIi9vcHQvbGlianBlZy10dXJibyIKKyVkZWZpbmUgX2xpYiBsaWIzMgorJWVuZGlmCiAlZW5kaWYKIAorIyBQYXRoIHVuZGVyIHdoaWNoIG1hbiBwYWdlcyBzaG91bGQgYmUgaW5zdGFsbGVkCislZGVmaW5lIF9tYW5kaXIgJXtfX21hbmRpcn0KKwogU3VtbWFyeTogQSBTSU1ELWFjY2VsZXJhdGVkIEpQRUcgY29kZWMgdGhhdCBwcm92aWRlcyBib3RoIHRoZSBsaWJqcGVnIGFuZCBUdXJib0pQRUcgQVBJcwotTmFtZTogQFBBQ0tBR0VfTkFNRUAKK05hbWU6IEBQS0dOQU1FQAogVmVyc2lvbjogQFZFUlNJT05ACiBWZW5kb3I6IFRoZSBsaWJqcGVnLXR1cmJvIFByb2plY3QKIFVSTDogaHR0cDovL3d3dy5saWJqcGVnLXR1cmJvLm9yZwpAQCAtMTUsNTEgKzM2LDY2IEBACiBMaWNlbnNlOiBCU0Qtc3R5bGUKIEJ1aWxkUm9vdDogJXtfYmxkZGlyfS8le25hbWV9LWJ1aWxkcm9vdC0le3ZlcnNpb259LSV7cmVsZWFzZX0KIFByZXJlcTogL3NiaW4vbGRjb25maWcKLVByb3ZpZGVzOiAle25hbWV9ID0gJXt2ZXJzaW9ufS0le3JlbGVhc2V9LCB0dXJib2pwZWcgPSAyLjAwCi1PYnNvbGV0ZXM6IHR1cmJvanBlZworJWlmYXJjaCB4ODZfNjQKK1Byb3ZpZGVzOiAle25hbWV9ID0gJXt2ZXJzaW9ufS0le3JlbGVhc2V9LCBAUEFDS0FHRV9OQU1FQCA9ICV7dmVyc2lvbn0tJXtyZWxlYXNlfSwgbGlidHVyYm9qcGVnLnNvKCkoNjRiaXQpCislZWxzZQorUHJvdmlkZXM6ICV7bmFtZX0gPSAle3ZlcnNpb259LSV7cmVsZWFzZX0sIEBQQUNLQUdFX05BTUVAID0gJXt2ZXJzaW9ufS0le3JlbGVhc2V9LCBsaWJ0dXJib2pwZWcuc28KKyVlbmRpZgogCiAlZGVzY3JpcHRpb24KLWxpYmpwZWctdHVyYm8gaXMgYSBkZXJpdmF0aXZlIG9mIGxpYmpwZWcgdGhhdCB1c2VzIFNJTUQgaW5zdHJ1Y3Rpb25zIChNTVgsCi1TU0UyLCBORU9OKSB0byBhY2NlbGVyYXRlIGJhc2VsaW5lIEpQRUcgY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gb24geDg2LAoteDg2LTY0LCBhbmQgQVJNIHN5c3RlbXMuICBPbiBzdWNoIHN5c3RlbXMsIGxpYmpwZWctdHVyYm8gaXMgZ2VuZXJhbGx5IDItNHggYXMKLWZhc3QgYXMgdGhlIHVubW9kaWZpZWQgdmVyc2lvbiBvZiBsaWJqcGVnLCBhbGwgZWxzZSBiZWluZyBlcXVhbC4KK2xpYmpwZWctdHVyYm8gaXMgYSBKUEVHIGltYWdlIGNvZGVjIHRoYXQgdXNlcyBTSU1EIGluc3RydWN0aW9ucyAoTU1YLCBTU0UyLAorTkVPTikgdG8gYWNjZWxlcmF0ZSBiYXNlbGluZSBKUEVHIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIG9uIHg4NiwgeDg2LTY0LAorYW5kIEFSTSBzeXN0ZW1zLiAgT24gc3VjaCBzeXN0ZW1zLCBsaWJqcGVnLXR1cmJvIGlzIGdlbmVyYWxseSAyLTR4IGFzIGZhc3QgYXMKK2xpYmpwZWcsIGFsbCBlbHNlIGJlaW5nIGVxdWFsLiAgT24gb3RoZXIgdHlwZXMgb2Ygc3lzdGVtcywgbGlianBlZy10dXJibyBjYW4KK3N0aWxsIG91dHBlcmZvcm0gbGlianBlZyBieSBhIHNpZ25pZmljYW50IGFtb3VudCwgYnkgdmlydHVlIG9mIGl0cworaGlnaGx5LW9wdGltaXplZCBIdWZmbWFuIGNvZGluZyByb3V0aW5lcy4gIEluIG1hbnkgY2FzZXMsIHRoZSBwZXJmb3JtYW5jZSBvZgorbGlianBlZy10dXJibyByaXZhbHMgdGhhdCBvZiBwcm9wcmlldGFyeSBoaWdoLXNwZWVkIEpQRUcgY29kZWNzLgogCi1saWJqcGVnLXR1cmJvIHdhcyBvcmlnaW5hbGx5IGJhc2VkIG9uIGxpYmpwZWcvU0lNRCBieSBNaXlhc2FrYSBNYXNhcnUsIGJ1dAotdGhlIFRpZ2VyVk5DIGFuZCBWaXJ0dWFsR0wgcHJvamVjdHMgbWFkZSBudW1lcm91cyBlbmhhbmNlbWVudHMgdG8gdGhlIGNvZGVjIGluCi0yMDA5LCBpbmNsdWRpbmcgaW1wcm92ZWQgc3VwcG9ydCBmb3IgTWFjIE9TIFgsIDY0LWJpdCBzdXBwb3J0LCBzdXBwb3J0IGZvcgotMzItYml0IGFuZCBiaWctZW5kaWFuIHBpeGVsIGZvcm1hdHMgKFJHQlgsIFhCR1IsIGV0Yy4pLCBhY2NlbGVyYXRlZCBIdWZmbWFuCi1lbmNvZGluZy9kZWNvZGluZywgYW5kIHZhcmlvdXMgYnVnIGZpeGVzLiAgVGhlIGdvYWwgd2FzIHRvIHByb2R1Y2UgYSBmdWxseQotb3Blbi1zb3VyY2UgY29kZWMgdGhhdCBjb3VsZCByZXBsYWNlIHRoZSBwYXJ0aWFsbHkgY2xvc2VkLXNvdXJjZSBUdXJib0pQRUcvSVBQCi1jb2RlYyB1c2VkIGJ5IFZpcnR1YWxHTCBhbmQgVHVyYm9WTkMuICBsaWJqcGVnLXR1cmJvIGdlbmVyYWxseSBhY2hpZXZlcyA4MC0xMjAlCi1vZiB0aGUgcGVyZm9ybWFuY2Ugb2YgVHVyYm9KUEVHL0lQUC4gIEl0IGlzIGZhc3RlciBpbiBzb21lIGFyZWFzIGJ1dCBzbG93ZXIgaW4KLW90aGVycy4KK2xpYmpwZWctdHVyYm8gaW1wbGVtZW50cyBib3RoIHRoZSB0cmFkaXRpb25hbCBsaWJqcGVnIEFQSSBhcyB3ZWxsIGFzIHRoZSBsZXNzCitwb3dlcmZ1bCBidXQgbW9yZSBzdHJhaWdodGZvcndhcmQgVHVyYm9KUEVHIEFQSS4gIGxpYmpwZWctdHVyYm8gYWxzbyBmZWF0dXJlcworY29sb3JzcGFjZSBleHRlbnNpb25zIHRoYXQgYWxsb3cgaXQgdG8gY29tcHJlc3MgZnJvbS9kZWNvbXByZXNzIHRvIDMyLWJpdCBhbmQKK2JpZy1lbmRpYW4gcGl4ZWwgYnVmZmVycyAoUkdCWCwgWEJHUiwgZXRjLiksIGFzIHdlbGwgYXMgYSBmdWxsLWZlYXR1cmVkIEphdmEKK2ludGVyZmFjZS4KIAotSW4gZWFybHkgMjAxMCwgbGlianBlZy10dXJibyBzcHVuIG9mZiBpbnRvIGl0cyBvd24gaW5kZXBlbmRlbnQgcHJvamVjdCwgd2l0aAotdGhlIGdvYWwgb2YgbWFraW5nIGhpZ2gtc3BlZWQgSlBFRyBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIHRlY2hub2xvZ3kKLWF2YWlsYWJsZSB0byBhIGJyb2FkZXIgcmFuZ2Ugb2YgdXNlcnMgYW5kIGRldmVsb3BlcnMuCitsaWJqcGVnLXR1cmJvIHdhcyBvcmlnaW5hbGx5IGJhc2VkIG9uIGxpYmpwZWcvU0lNRCwgYW4gTU1YLWFjY2VsZXJhdGVkCitkZXJpdmF0aXZlIG9mIGxpYmpwZWcgdjZiIGRldmVsb3BlZCBieSBNaXlhc2FrYSBNYXNhcnUuICBUaGUgVGlnZXJWTkMgYW5kCitWaXJ0dWFsR0wgcHJvamVjdHMgbWFkZSBudW1lcm91cyBlbmhhbmNlbWVudHMgdG8gdGhlIGNvZGVjIGluIDIwMDksIGFuZCBpbgorZWFybHkgMjAxMCwgbGlianBlZy10dXJibyBzcHVuIG9mZiBpbnRvIGFuIGluZGVwZW5kZW50IHByb2plY3QsIHdpdGggdGhlIGdvYWwKK29mIG1ha2luZyBoaWdoLXNwZWVkIEpQRUcgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiB0ZWNobm9sb2d5IGF2YWlsYWJsZSB0byBhCiticm9hZGVyIHJhbmdlIG9mIHVzZXJzIGFuZCBkZXZlbG9wZXJzLgogCiAjLS0+JXByZXAKLSMtLT4lc2V0dXAgLXEKKyMtLT4lc2V0dXAgLXEgLW4gbGlianBlZy10dXJiby0le3ZlcnNpb259CiAKICMtLT4lYnVpbGQKLSMtLT4uL2NvbmZpZ3VyZSBsaWJkaXI9L29wdC8le25hbWV9LyV7X19saWJ9IG1hbmRpcj0vb3B0LyV7bmFtZX0vbWFuIEpQRUdfTElCX1ZFUlNJT049QEpQRUdfTElCX1ZFUlNJT05AIFNPX01BSk9SX1ZFUlNJT049QFNPX01BSk9SX1ZFUlNJT05AIFNPX01JTk9SX1ZFUlNJT049QFNPX01JTk9SX1ZFUlNJT05AIC0td2l0aC1waWMgQFJQTV9DT05GSUdfQVJHU0AKLSMtLT5tYWtlIERFU1RESVI9JFJQTV9CVUlMRF9ST09UIGxpYmRpcj0vb3B0LyV7bmFtZX0vJXtfX2xpYn0gbWFuZGlyPS9vcHQvJXtuYW1lfS9tYW4KKyMtLT4uL2NvbmZpZ3VyZSBwcmVmaXg9JXtfcHJlZml4fSBiaW5kaXI9JXtfYmluZGlyfSBkYXRhZGlyPSV7X2RhdGFkaXJ9IFwKKyMtLT4JZG9jZGlyPSV7X2RvY2Rpcn0gaW5jbHVkZWRpcj0le19pbmNsdWRlZGlyfSBsaWJkaXI9JXtfbGliZGlyfSBcCisjLS0+CW1hbmRpcj0le19tYW5kaXJ9IEpQRUdfTElCX1ZFUlNJT049QEpQRUdfTElCX1ZFUlNJT05AIFwKKyMtLT4JU09fTUFKT1JfVkVSU0lPTj1AU09fTUFKT1JfVkVSU0lPTkAgU09fTUlOT1JfVkVSU0lPTj1AU09fTUlOT1JfVkVSU0lPTkAgXAorIy0tPgktLXdpdGgtcGljIEBSUE1fQ09ORklHX0FSR1NACisjLS0+bWFrZSBERVNURElSPSRSUE1fQlVJTERfUk9PVAogCiAlaW5zdGFsbAogCiBybSAtcmYgJFJQTV9CVUlMRF9ST09UCi1tYWtlIGluc3RhbGwgREVTVERJUj0kUlBNX0JVSUxEX1JPT1QgbGliZGlyPS9vcHQvJXtuYW1lfS8le19fbGlifSBtYW5kaXI9L29wdC8le25hbWV9L21hbiBkb2NkaXI9L29wdC8le25hbWV9L2RvYyBleGFtcGxlZGlyPS9vcHQvJXtuYW1lfS9kb2MKLXJtIC1mICRSUE1fQlVJTERfUk9PVC9vcHQvJXtuYW1lfS8le19fbGlifS8qLmxhCi1ta2RpciAtcCAkUlBNX0JVSUxEX1JPT1QvdXNyLyV7X19saWJ9Ci1tdiAkUlBNX0JVSUxEX1JPT1Qvb3B0LyV7bmFtZX0vJXtfX2xpYn0vbGlidHVyYm9qcGVnLiogJFJQTV9CVUlMRF9ST09UL3Vzci8le19fbGlifQotL3NiaW4vbGRjb25maWcgLW4gJFJQTV9CVUlMRF9ST09UL29wdC8le25hbWV9LyV7X19saWJ9Ci0vc2Jpbi9sZGNvbmZpZyAtbiAkUlBNX0JVSUxEX1JPT1QvdXNyLyV7X19saWJ9Ci1ta2RpciAtcCAkUlBNX0JVSUxEX1JPT1QvdXNyL2luY2x1ZGUKLW12ICRSUE1fQlVJTERfUk9PVC9vcHQvJXtuYW1lfS9pbmNsdWRlL3R1cmJvanBlZy5oICRSUE1fQlVJTERfUk9PVC91c3IvaW5jbHVkZQotbG4gLWZzIC91c3IvaW5jbHVkZS90dXJib2pwZWcuaCAkUlBNX0JVSUxEX1JPT1Qvb3B0LyV7bmFtZX0vaW5jbHVkZS8KLWxuIC1mcyAvdXNyLyV7X19saWJ9L2xpYnR1cmJvanBlZy5hICRSUE1fQlVJTERfUk9PVC9vcHQvJXtuYW1lfS8le19fbGlifS8KLW1rZGlyIC1wICRSUE1fQlVJTERfUk9PVCV7X2RlZmF1bHRkb2NkaXJ9Ci1tdiAkUlBNX0JVSUxEX1JPT1Qvb3B0LyV7bmFtZX0vZG9jICRSUE1fQlVJTERfUk9PVCV7X2RlZmF1bHRkb2NkaXJ9LyV7bmFtZX0tJXt2ZXJzaW9ufQorbWFrZSBpbnN0YWxsIERFU1RESVI9JFJQTV9CVUlMRF9ST09UIGRvY2Rpcj0le19kb2NkaXJ9IGV4YW1wbGVkaXI9JXtfZG9jZGlyfQorcm0gLWYgJFJQTV9CVUlMRF9ST09UJXtfbGliZGlyfS8qLmxhCisvc2Jpbi9sZGNvbmZpZyAtbiAkUlBNX0JVSUxEX1JPT1Qle19saWJkaXJ9CisKKyMtLT4laWYgMAorCitMSlRfTElCRElSPSV7X19saWJkaXJ9CitpZiBbICEgIiRMSlRfTElCRElSIiA9ICIle19saWJkaXJ9IiBdOyB0aGVuCisJZWNobyBFUlJPUjogbGlianBlZy10dXJibyBtdXN0IGJlIGNvbmZpZ3VyZWQgd2l0aCBsaWJkaXI9JXtfcHJlZml4fS8le19saWJ9IHdoZW4gZ2VuZXJhdGluZyBhbiBpbi10cmVlIFJQTSBmb3IgdGhpcyBhcmNoaXRlY3R1cmUuCisJZXhpdCAxCitmaQorCisjLS0+JWVuZGlmCisKK0xKVF9ET0NESVI9JXtfX2RvY2Rpcn0KK2lmIFsgIiV7X3ByZWZpeH0iID0gIi9vcHQvbGlianBlZy10dXJibyIgLWEgIiRMSlRfRE9DRElSIiA9ICIvb3B0L2xpYmpwZWctdHVyYm8vZG9jIiBdOyB0aGVuCisJbG4gLWZzICV7X2RvY2Rpcn0gJFJQTV9CVUlMRF9ST09ULyRMSlRfRE9DRElSCitmaQogCiAlcG9zdCAtcCAvc2Jpbi9sZGNvbmZpZwogCkBAIC03MCw0MiArMTA2LDQ0IEBACiAKICVmaWxlcwogJWRlZmF0dHIoLSxyb290LHJvb3QpCi0lZGlyICV7X2RlZmF1bHRkb2NkaXJ9LyV7bmFtZX0tJXt2ZXJzaW9ufQotJWRvYyAle19kZWZhdWx0ZG9jZGlyfS8le25hbWV9LSV7dmVyc2lvbn0vKgotJWRpciAvb3B0LyV7bmFtZX0KLSVkaXIgL29wdC8le25hbWV9L2JpbgotL29wdC8le25hbWV9L2Jpbi9janBlZwotL29wdC8le25hbWV9L2Jpbi9kanBlZwotL29wdC8le25hbWV9L2Jpbi9qcGVndHJhbgotL29wdC8le25hbWV9L2Jpbi90amJlbmNoCi0vb3B0LyV7bmFtZX0vYmluL3JkanBnY29tCi0vb3B0LyV7bmFtZX0vYmluL3dyanBnY29tCi0lZGlyIC9vcHQvJXtuYW1lfS8le19fbGlifQotJWlmYXJjaCB4ODZfNjQKLSVlbHNlCi0vb3B0LyV7bmFtZX0vbGliMzIKKyVkaXIgJXtfZG9jZGlyfQorJWRvYyAle19kb2NkaXJ9LyoKKyVkaXIgJXtfcHJlZml4fQorJWlmICIle19wcmVmaXh9IiA9PSAiL29wdC9saWJqcGVnLXR1cmJvIiAmJiAiJXtfZG9jZGlyfSIgIT0gIiV7X3ByZWZpeH0vZG9jIgorICV7X3ByZWZpeH0vZG9jCiAlZW5kaWYKLS9vcHQvJXtuYW1lfS8le19fbGlifS9saWJqcGVnLnNvLkBTT19NQUpPUl9WRVJTSU9OQC4wLkBTT19NSU5PUl9WRVJTSU9OQAotL29wdC8le25hbWV9LyV7X19saWJ9L2xpYmpwZWcuc28uQFNPX01BSk9SX1ZFUlNJT05ACi0vb3B0LyV7bmFtZX0vJXtfX2xpYn0vbGlianBlZy5zbwotL29wdC8le25hbWV9LyV7X19saWJ9L2xpYmpwZWcuYQotL29wdC8le25hbWV9LyV7X19saWJ9L2xpYnR1cmJvanBlZy5hCi0vdXNyLyV7X19saWJ9L2xpYnR1cmJvanBlZy5zbwotL3Vzci8le19fbGlifS9saWJ0dXJib2pwZWcuYQotL3Vzci9pbmNsdWRlL3R1cmJvanBlZy5oCi0lZGlyIC9vcHQvJXtuYW1lfS9pbmNsdWRlCi0vb3B0LyV7bmFtZX0vaW5jbHVkZS9qY29uZmlnLmgKLS9vcHQvJXtuYW1lfS9pbmNsdWRlL2plcnJvci5oCi0vb3B0LyV7bmFtZX0vaW5jbHVkZS9qbW9yZWNmZy5oCi0vb3B0LyV7bmFtZX0vaW5jbHVkZS9qcGVnbGliLmgKLS9vcHQvJXtuYW1lfS9pbmNsdWRlL3R1cmJvanBlZy5oCi0lZGlyIC9vcHQvJXtuYW1lfS9tYW4KLSVkaXIgL29wdC8le25hbWV9L21hbi9tYW4xCi0vb3B0LyV7bmFtZX0vbWFuL21hbjEvY2pwZWcuMSoKLS9vcHQvJXtuYW1lfS9tYW4vbWFuMS9kanBlZy4xKgotL29wdC8le25hbWV9L21hbi9tYW4xL2pwZWd0cmFuLjEqCi0vb3B0LyV7bmFtZX0vbWFuL21hbjEvcmRqcGdjb20uMSoKLS9vcHQvJXtuYW1lfS9tYW4vbWFuMS93cmpwZ2NvbS4xKgorJWRpciAle19iaW5kaXJ9Cisle19iaW5kaXJ9L2NqcGVnCisle19iaW5kaXJ9L2RqcGVnCisle19iaW5kaXJ9L2pwZWd0cmFuCisle19iaW5kaXJ9L3RqYmVuY2gKKyV7X2JpbmRpcn0vcmRqcGdjb20KKyV7X2JpbmRpcn0vd3JqcGdjb20KKyVkaXIgJXtfbGliZGlyfQorJXtfbGliZGlyfS9saWJqcGVnLnNvLkBTT19NQUpPUl9WRVJTSU9OQC5AU09fQUdFQC5AU09fTUlOT1JfVkVSU0lPTkAKKyV7X2xpYmRpcn0vbGlianBlZy5zby5AU09fTUFKT1JfVkVSU0lPTkAKKyV7X2xpYmRpcn0vbGlianBlZy5zbworJXtfbGliZGlyfS9saWJqcGVnLmEKKyV7X2xpYmRpcn0vbGlidHVyYm9qcGVnLnNvLjAuMC4wCisle19saWJkaXJ9L2xpYnR1cmJvanBlZy5zby4wCisle19saWJkaXJ9L2xpYnR1cmJvanBlZy5zbworJXtfbGliZGlyfS9saWJ0dXJib2pwZWcuYQorJWRpciAle19pbmNsdWRlZGlyfQorJXtfaW5jbHVkZWRpcn0vamNvbmZpZy5oCisle19pbmNsdWRlZGlyfS9qZXJyb3IuaAorJXtfaW5jbHVkZWRpcn0vam1vcmVjZmcuaAorJXtfaW5jbHVkZWRpcn0vanBlZ2xpYi5oCisle19pbmNsdWRlZGlyfS90dXJib2pwZWcuaAorJWRpciAle19tYW5kaXJ9CislZGlyICV7X21hbmRpcn0vbWFuMQorJXtfbWFuZGlyfS9tYW4xL2NqcGVnLjEqCisle19tYW5kaXJ9L21hbjEvZGpwZWcuMSoKKyV7X21hbmRpcn0vbWFuMS9qcGVndHJhbi4xKgorJXtfbWFuZGlyfS9tYW4xL3JkanBnY29tLjEqCisle19tYW5kaXJ9L21hbjEvd3JqcGdjb20uMSoKKyVpZiAiJXtfcHJlZml4fSIgIT0gIiV7X2RhdGFkaXJ9IgorICVkaXIgJXtfZGF0YWRpcn0KKyVlbmRpZgogQEpBVkFfUlBNX0NPTlRFTlRTXzFACiBASkFWQV9SUE1fQ09OVEVOVFNfMkAKIApkaWZmIC0tZ2l0IGEvcmVsZWFzZS9tYWtlY3lnd2lucGtnLmluIGIvcmVsZWFzZS9tYWtlY3lnd2lucGtnLmluCmluZGV4IDMyY2VjZGQuLmYzMDM1NDYgMTAwNzU1Ci0tLSBhL3JlbGVhc2UvbWFrZWN5Z3dpbnBrZy5pbgorKysgYi9yZWxlYXNlL21ha2VjeWd3aW5wa2cuaW4KQEAgLTE1LDIxICsxNSwyNyBAQAogCWZpCiB9CiAKLVBBQ0tBR0VfTkFNRT1AUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9OQU1FPUBQS0dOQU1FQAogVkVSU0lPTj1AVkVSU0lPTkAKK0JVSUxEPUBCVUlMREAKIFNSQ0RJUj1AYWJzX3RvcF9zcmNkaXJACiAKK1BSRUZJWD0le19fcHJlZml4fQorRE9DRElSPSV7X19kb2NkaXJ9CitMSUJESVI9JXtfX2xpYmRpcn0KKwogdW1hc2sgMDIyCi1ybSAtZiAkUEFDS0FHRV9OQU1FLSRWRVJTSU9OLWN5Z3dpbi50YXIuYnoyCitybSAtZiAkUEFDS0FHRV9OQU1FLSRWRVJTSU9OLSRCVUlMRC50YXIuYnoyCiBUTVBESVI9YG1rdGVtcCAtZCAvdG1wL2xqdGJ1aWxkLlhYWFhYWGAKIF9fUFdEPWBwd2RgCi1tYWtlIGluc3RhbGwgREVTVERJUj0kVE1QRElSL3BrZyBtYW5kaXI9L29wdC8kUEFDS0FHRV9OQU1FL21hbiBcCi0JZG9jZGlyPS91c3Ivc2hhcmUvZG9jLyRQQUNLQUdFX05BTUUtJFZFUlNJT04gXAorbWFrZSBpbnN0YWxsIERFU1RESVI9JFRNUERJUi9wa2cgZG9jZGlyPS91c3Ivc2hhcmUvZG9jLyRQQUNLQUdFX05BTUUtJFZFUlNJT04gXAogCWV4YW1wbGVkaXI9L3Vzci9zaGFyZS9kb2MvJFBBQ0tBR0VfTkFNRS0kVkVSU0lPTgotcm0gJFRNUERJUi9wa2cvb3B0LyRQQUNLQUdFX05BTUUvbGliLyoubGEKLWxuIC1mcyBsaWIgJFRNUERJUi9wa2cvb3B0LyRQQUNLQUdFX05BTUUvbGliMzIKK3JtICRUTVBESVIvcGtnJExJQkRJUi8qLmxhCitpZiBbICIkUFJFRklYIiA9ICIvb3B0L2xpYmpwZWctdHVyYm8iIC1hICIkRE9DRElSIiA9ICIvb3B0L2xpYmpwZWctdHVyYm8vZG9jIiBdOyB0aGVuCisJbG4gLWZzIC91c3Ivc2hhcmUvZG9jLyRQQUNLQUdFX05BTUUtJFZFUlNJT04gJFRNUERJUi9wa2ckRE9DRElSCitmaQogY2QgJFRNUERJUi9wa2cKLXRhciBjZmogLi4vJFBBQ0tBR0VfTkFNRS0kVkVSU0lPTi1jeWd3aW4udGFyLmJ6MiAqCit0YXIgY2ZqIC4uLyRQQUNLQUdFX05BTUUtJFZFUlNJT04tJEJVSUxELnRhci5iejIgKgogY2QgJF9fUFdECiBtdiAkVE1QRElSLyoudGFyLmJ6MiAuCiAKZGlmZiAtLWdpdCBhL3JlbGVhc2UvbWFrZWRwa2cuaW4gYi9yZWxlYXNlL21ha2VkcGtnLmluCmluZGV4IDYyOGUwYTYuLjgwY2M4OWIgMTAwNjQ0Ci0tLSBhL3JlbGVhc2UvbWFrZWRwa2cuaW4KKysrIGIvcmVsZWFzZS9tYWtlZHBrZy5pbgpAQCAtNywxNCArNywyMCBAQAogdHJhcCBvbmV4aXQgRVhJVAogCiBUTVBESVI9CitTVURPPQogCiBvbmV4aXQoKQogewogCWlmIFsgISAiJFRNUERJUiIgPSAiIiBdOyB0aGVuCi0JCXN1ZG8gcm0gLXJmICRUTVBESVIKKwkJJFNVRE8gcm0gLXJmICRUTVBESVIKIAlmaQogfQogCit1aWQoKQoreworCWlkIHwgY3V0IC1mMiAtZCA9IHwgY3V0IC1mMSAtZCBcKDsKK30KKwogbWFrZWRlYigpCiB7CiAJU1VQUExFTUVOVD0kMQpAQCAtMjMsNjUgKzI5LDUyIEBACiAJaWYgWyAkU1VQUExFTUVOVCA9IDEgXTsgdGhlbgogCQlQQUNLQUdFX05BTUU9JFBBQ0tBR0VfTkFNRVwzMgogCQlERUJBUkNIPWFtZDY0Ci0JCV9fTElCPWxpYjMyCi0JZWxzZQotCQlfX0xJQj1saWIKIAlmaQogCiAJdW1hc2sgMDIyCiAJcm0gLWYgJFBBQ0tBR0VfTkFNRVxfJFZFUlNJT05cXyRERUJBUkNILmRlYgogCVRNUERJUj1gbWt0ZW1wIC1kIC90bXAvJFBBQ0tBR0VfTkFNRS1idWlsZC5YWFhYWFhgCiAJbWtkaXIgJFRNUERJUi9ERUJJQU4KLQkoY2F0ICRTUkNESVIvcmVsZWFzZS9kZWItY29udHJvbC50bXBsIHwgc2VkIHMve19fUEtHTkFNRX0vJFBBQ0tBR0VfTkFNRS9nIFwKLQkJfCBzZWQgcy97X19WRVJTSU9OfS8kVkVSU0lPTi9nIHwgc2VkIHMve19fQlVJTER9LyRCVUlMRC9nIFwKLQkJfCBzZWQgcy97X19BUkNIfS8kREVCQVJDSC9nID4gJFRNUERJUi9ERUJJQU4vY29udHJvbCkKLQotCW1ha2UgaW5zdGFsbCBwcmVmaXg9JFRNUERJUi9vcHQvJERJUk5BTUUgbGliZGlyPSRUTVBESVIvb3B0LyRESVJOQU1FLyRfX0xJQiBcCi0JCW1hbmRpcj0kVE1QRElSL29wdC8kRElSTkFNRS9tYW4gXAotCQlkb2NkaXI9JFRNUERJUi91c3Ivc2hhcmUvZG9jLyRESVJOQU1FLSRWRVJTSU9OIFwKLQkJZXhhbXBsZWRpcj0kVE1QRElSL3Vzci9zaGFyZS9kb2MvJERJUk5BTUUtJFZFUlNJT04KLQlybSAtZiAkVE1QRElSL29wdC8kRElSTkFNRS8kX19MSUIvKi5sYQogCiAJaWYgWyAkU1VQUExFTUVOVCA9IDEgXTsgdGhlbgotCQlybSAtcmYgJFRNUERJUi9vcHQvJERJUk5BTUUvaW5jbHVkZQotCQlybSAtcmYgJFRNUERJUi9vcHQvJERJUk5BTUUvbWFuCi0JCXJtIC1yZiAkVE1QRElSL29wdC8kRElSTkFNRS9iaW4KLQkJcm0gLXJmICRUTVBESVIvb3B0LyRESVJOQU1FL2NsYXNzZXMKLQkJcm0gLXJmICRUTVBESVIvdXNyCi0JZmkKLQotCW1rZGlyIC1wICRUTVBESVIvdXNyLyRfX0xJQgotCW12ICRUTVBESVIvb3B0LyRESVJOQU1FLyRfX0xJQi9saWJ0dXJib2pwZWcuKiAkVE1QRElSL3Vzci8kX19MSUIKLQlsbiAtZnMgL3Vzci8kX19MSUIvbGlidHVyYm9qcGVnLmEgJFRNUERJUi9vcHQvJERJUk5BTUUvJF9fTElCLwotCS9zYmluL2xkY29uZmlnIC1uICRUTVBESVIvb3B0LyRESVJOQU1FLyRfX0xJQgotCS9zYmluL2xkY29uZmlnIC1uICRUTVBESVIvdXNyLyRfX0xJQgotCi0JaWYgWyAhICRTVVBQTEVNRU5UID0gMSBdOyB0aGVuCi0JCWlmIFsgIiRERUJBUkNIIiA9ICJhbWQ2NCIgXTsgdGhlbgotCQkJbG4gLWZzIGxpYiAkVE1QRElSL29wdC8kRElSTkFNRS9saWI2NAotCQllbHNlCi0JCQlpZiBbICEgIiRfX0xJQiIgPSAibGliMzIiIF07IHRoZW4KLQkJCQlsbiAtZnMgbGliICRUTVBESVIvb3B0LyRESVJOQU1FL2xpYjMyCi0JCQlmaQotCQlmaQotCQlta2RpciAtcCAkVE1QRElSL3Vzci9pbmNsdWRlCi0JCW12ICRUTVBESVIvb3B0LyRESVJOQU1FL2luY2x1ZGUvdHVyYm9qcGVnLmggJFRNUERJUi91c3IvaW5jbHVkZQotCQlsbiAtZnMgL3Vzci9pbmNsdWRlL3R1cmJvanBlZy5oICRUTVBESVIvb3B0LyRESVJOQU1FL2luY2x1ZGUvCisJCW1ha2UgaW5zdGFsbCBERVNURElSPSRUTVBESVIgYmluZGlyPS9kdW1teS9iaW4gZGF0YWRpcj0vZHVtbXkvZGF0YSBcCisJCQlkb2NkaXI9L2R1bW15L2RvYyBpbmNsdWRlZGlyPS9kdW1teS9pbmNsdWRlIG1hbmRpcj0vZHVtbXkvbWFuCisJCXJtIC1mICRUTVBESVIkTElCRElSLyoubGEKKwkJcm0gLXJmICRUTVBESVIvZHVtbXkKIAllbHNlCi0JCW1rZGlyIC1wICRUTVBESVIvdXNyL2xpYi9pMzg2LWxpbnV4LWdudQotCQlsbiAtZnMgL3Vzci9saWIzMi9saWJ0dXJib2pwZWcuc28gJFRNUERJUi91c3IvbGliL2kzODYtbGludXgtZ251L2xpYnR1cmJvanBlZy5zbwotCQlsbiAtZnMgL3Vzci9saWIzMi9saWJ0dXJib2pwZWcuYSAkVE1QRElSL3Vzci9saWIvaTM4Ni1saW51eC1nbnUvbGlidHVyYm9qcGVnLmEKKwkJbWFrZSBpbnN0YWxsIERFU1RESVI9JFRNUERJUiBkb2NkaXI9L3Vzci9zaGFyZS9kb2MvJERJUk5BTUUtJFZFUlNJT04gXAorCQkJZXhhbXBsZWRpcj0vdXNyL3NoYXJlL2RvYy8kRElSTkFNRS0kVkVSU0lPTgorCQlybSAtZiAkVE1QRElSJExJQkRJUi8qLmxhCisJCWlmIFsgIiRQUkVGSVgiID0gIi9vcHQvbGlianBlZy10dXJibyIgLWEgIiRET0NESVIiID0gIi9vcHQvbGlianBlZy10dXJiby9kb2MiIF07IHRoZW4KKwkJCWxuIC1mcyAvdXNyL3NoYXJlL2RvYy8kRElSTkFNRS0kVkVSU0lPTiAkVE1QRElSJERPQ0RJUgorCQlmaQogCWZpCiAKLQlzdWRvIGNob3duIC1SaCByb290OnJvb3QgJFRNUERJUi8qCisJU0laRT1gZHUgLXMgJFRNUERJUiB8IGN1dCAtZjFgCisJKGNhdCAkU1JDRElSL3JlbGVhc2UvZGViLWNvbnRyb2wudG1wbCB8IHNlZCBzL3tfX1BLR05BTUV9LyRQQUNLQUdFX05BTUUvZyBcCisJCXwgc2VkIHMve19fVkVSU0lPTn0vJFZFUlNJT04vZyB8IHNlZCBzL3tfX0JVSUxEfS8kQlVJTEQvZyBcCisJCXwgc2VkIHMve19fQVJDSH0vJERFQkFSQ0gvZyB8IHNlZCBzL3tfX1NJWkV9LyRTSVpFL2cgXAorCQk+ICRUTVBESVIvREVCSUFOL2NvbnRyb2wpCisKKworCS9zYmluL2xkY29uZmlnIC1uICRUTVBESVIkTElCRElSCisKKwkkU1VETyBjaG93biAtUmggcm9vdDpyb290ICRUTVBESVIvKgogCWRwa2cgLWIgJFRNUERJUiAkUEFDS0FHRV9OQU1FXF8kVkVSU0lPTlxfJERFQkFSQ0guZGViCiB9CiAKLVBBQ0tBR0VfTkFNRT1AUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9OQU1FPUBQS0dOQU1FQAogVkVSU0lPTj1AVkVSU0lPTkAKIEJVSUxEPUBCVUlMREAKIERFQkFSQ0g9QERFQkFSQ0hACiBTUkNESVI9QGFic190b3Bfc3JjZGlyQAorUFJFRklYPSV7X19wcmVmaXh9CitET0NESVI9JXtfX2RvY2Rpcn0KK0xJQkRJUj0le19fbGliZGlyfQorCitpZiBbICEgYHVpZGAgLWVxIDAgXTsgdGhlbgorCVNVRE89c3VkbworZmkKIAogbWFrZWRlYiAwCiBpZiBbICIkREVCQVJDSCIgPSAiaTM4NiIgXTsgdGhlbiBtYWtlZGViIDE7IGZpCmRpZmYgLS1naXQgYS9yZWxlYXNlL21ha2VtYWNwa2cuaW4gYi9yZWxlYXNlL21ha2VtYWNwa2cuaW4KaW5kZXggN2I0M2FhMy4uNjVhYmRlZiAxMDA2NDQKLS0tIGEvcmVsZWFzZS9tYWtlbWFjcGtnLmluCisrKyBiL3JlbGVhc2UvbWFrZW1hY3BrZy5pbgpAQCAtMTcsMTEgKzE3LDExIEBACiAKIHVzYWdlKCkKIHsKLQllY2hvICIkMCBbLWJ1aWxkMzIgWzMyLWJpdCBidWlsZCBkaXJdXSBbLWJ1aWxkYXJtdjYgW0FSTSB2NiBidWlsZCBkaXJdXSBbLWJ1aWxkYXJtdjcgW0FSTSB2NyBidWlsZCBkaXJdXSIKKwllY2hvICIkMCBbLWJ1aWxkMzIgWzMyLWJpdCBidWlsZCBkaXJdXSBbLWJ1aWxkYXJtdjYgW0FSTSB2NiBidWlsZCBkaXJdXSBbLWJ1aWxkYXJtdjcgW0FSTSB2NyBidWlsZCBkaXJdXSBbLWJ1aWxkYXJtdjdzIFtBUk0gdjdzIGJ1aWxkIGRpcl1dIgogCWV4aXQgMQogfQogCi1QQUNLQUdFX05BTUU9QFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfTkFNRT1AUEtHTkFNRUAKIFZFUlNJT049QFZFUlNJT05ACiBCVUlMRD1AQlVJTERACiBTUkNESVI9QGFic190b3Bfc3JjZGlyQApAQCAtMzEsNyArMzEsMTUgQEAKIEJVSUxEQVJNVjY9MAogQlVJTERESVJBUk1WNz1AYWJzX3RvcF9zcmNkaXJAL2lvc2FybXY3CiBCVUlMREFSTVY3PTAKK0JVSUxERElSQVJNVjdTPUBhYnNfdG9wX3NyY2RpckAvaW9zYXJtdjdzCitCVUlMREFSTVY3Uz0wCiBXSVRIX0pBVkE9QFdJVEhfSkFWQUAKKworUFJFRklYPSV7X19wcmVmaXh9CitCSU5ESVI9JXtfX2JpbmRpcn0KK0RPQ0RJUj0le19fZG9jZGlyfQorTElCRElSPSV7X19saWJkaXJ9CisKIHdoaWxlIFsgJCMgLWd0IDAgXTsgZG8KIAljYXNlICQxIGluCiAJLWgqKSAgICAgICAgICAgICB1c2FnZSAwICAgICAgICAgICAgICAgICAgIDs7CkBAIC01OSw2ICs2NywxNCBAQAogCQkJZmkKIAkJZmkKIAkJOzsKKwktYnVpbGRhcm12N3MpCisJCUJVSUxEQVJNVjdTPTEKKwkJaWYgWyAkIyAtZ3QgMSBdOyB0aGVuCisJCQlpZiBbWyAhICIkMiIgPX4gLS4qIF1dOyB0aGVuCisJCQkJQlVJTERESVJBUk1WN1M9JDI7ICBzaGlmdAorCQkJZmkKKwkJZmkKKwkJOzsKIAllc2FjCiAJc2hpZnQKIGRvbmUKQEAgLTcyLDE1ICs4OCwxMyBAQAogVE1QRElSPWBta3RlbXAgLWQgL3RtcC8kUEFDS0FHRV9OQU1FLWJ1aWxkLlhYWFhYWGAKIFBLR1JPT1Q9JFRNUERJUi9wa2cvUGFja2FnZV9Sb290CiBta2RpciAtcCAkUEtHUk9PVAotbWtkaXIgLXAgJFBLR1JPT1Qvb3B0LyRQQUNLQUdFX05BTUUvYmluCi1tYWtlIGluc3RhbGwgREVTVERJUj0kUEtHUk9PVCBtYW5kaXI9L29wdC8kUEFDS0FHRV9OQU1FL21hbiBcCi0JZG9jZGlyPS9MaWJyYXJ5L0RvY3VtZW50YXRpb24vJFBBQ0tBR0VfTkFNRSBcCittYWtlIGluc3RhbGwgREVTVERJUj0kUEtHUk9PVCBkb2NkaXI9L0xpYnJhcnkvRG9jdW1lbnRhdGlvbi8kUEFDS0FHRV9OQU1FIFwKIAlleGFtcGxlZGlyPS9MaWJyYXJ5L0RvY3VtZW50YXRpb24vJFBBQ0tBR0VfTkFNRQotcm0gLWYgJFBLR1JPT1Qvb3B0LyRQQUNLQUdFX05BTUUvbGliLyoubGEKLW1rZGlyIC1wICRQS0dST09UL3Vzci9saWIKLW12ICRQS0dST09UL29wdC8kUEFDS0FHRV9OQU1FL2xpYi9saWJ0dXJib2pwZWcuKiAkUEtHUk9PVC91c3IvbGliCi1ta2RpciAtcCAkUEtHUk9PVC91c3IvaW5jbHVkZQotbXYgJFBLR1JPT1Qvb3B0LyRQQUNLQUdFX05BTUUvaW5jbHVkZS90dXJib2pwZWcuaCAkUEtHUk9PVC91c3IvaW5jbHVkZQorcm0gLWYgJFBLR1JPT1QkTElCRElSLyoubGEKKworaWYgWyAiJFBSRUZJWCIgPSAiL29wdC9saWJqcGVnLXR1cmJvIiAtYSAiJERPQ0RJUiIgPSAiL29wdC9saWJqcGVnLXR1cmJvL2RvYyIgXTsgdGhlbgorCWxuIC1mcyAvTGlicmFyeS9Eb2N1bWVudGF0aW9uLyRQQUNLQUdFX05BTUUgJFBLR1JPT1QkRE9DRElSCitmaQogCiBpZiBbICRCVUlMRDMyID0gMSBdOyB0aGVuCiAJaWYgWyAhIC1kICRCVUlMRERJUjMyIF07IHRoZW4KQEAgLTk1LDU1ICsxMDksNTUgQEAKIAlwdXNoZCAkQlVJTERESVIzMgogCW1ha2UgaW5zdGFsbCBERVNURElSPSRUTVBESVIvZGlzdC54ODYKIAlwb3BkCi0JaWYgWyAhIC1oICRUTVBESVIvZGlzdC54ODYvb3B0LyRQQUNLQUdFX05BTUUvbGliL2xpYmpwZWcuQFNPX01BSk9SX1ZFUlNJT05ALmR5bGliIC1hIFwKLQkJISAtaCAkUEtHUk9PVC9vcHQvJFBBQ0tBR0VfTkFNRS9saWIvbGlianBlZy5AU09fTUFKT1JfVkVSU0lPTkAuZHlsaWIgXTsgdGhlbgorCWlmIFsgISAtaCAkVE1QRElSL2Rpc3QueDg2LyRMSUJESVIvbGlianBlZy5AU09fTUFKT1JfVkVSU0lPTkAuZHlsaWIgLWEgXAorCQkhIC1oICRQS0dST09ULyRMSUJESVIvbGlianBlZy5AU09fTUFKT1JfVkVSU0lPTkAuZHlsaWIgXTsgdGhlbgogCQlsaXBvIC1jcmVhdGUgXAotCQkJLWFyY2ggaTM4NiAkVE1QRElSL2Rpc3QueDg2L29wdC8kUEFDS0FHRV9OQU1FL2xpYi9saWJqcGVnLkBTT19NQUpPUl9WRVJTSU9OQC5keWxpYiBcCi0JCQktYXJjaCB4ODZfNjQgJFBLR1JPT1Qvb3B0LyRQQUNLQUdFX05BTUUvbGliL2xpYmpwZWcuQFNPX01BSk9SX1ZFUlNJT05ALmR5bGliIFwKLQkJCS1vdXRwdXQgJFBLR1JPT1Qvb3B0LyRQQUNLQUdFX05BTUUvbGliL2xpYmpwZWcuQFNPX01BSk9SX1ZFUlNJT05ALmR5bGliCi0JZWxpZiBbICEgLWggJFRNUERJUi9kaXN0Lng4Ni9vcHQvJFBBQ0tBR0VfTkFNRS9saWIvbGlianBlZy5AU09fTUFKT1JfVkVSU0lPTkAuMC5AU09fTUlOT1JfVkVSU0lPTkAuZHlsaWIgLWEgXAotCQkhIC1oICRQS0dST09UL29wdC8kUEFDS0FHRV9OQU1FL2xpYi9saWJqcGVnLkBTT19NQUpPUl9WRVJTSU9OQC4wLkBTT19NSU5PUl9WRVJTSU9OQC5keWxpYiBdOyB0aGVuCisJCQktYXJjaCBpMzg2ICRUTVBESVIvZGlzdC54ODYvJExJQkRJUi9saWJqcGVnLkBTT19NQUpPUl9WRVJTSU9OQC5keWxpYiBcCisJCQktYXJjaCB4ODZfNjQgJFBLR1JPT1QvJExJQkRJUi9saWJqcGVnLkBTT19NQUpPUl9WRVJTSU9OQC5keWxpYiBcCisJCQktb3V0cHV0ICRQS0dST09ULyRMSUJESVIvbGlianBlZy5AU09fTUFKT1JfVkVSU0lPTkAuZHlsaWIKKwllbGlmIFsgISAtaCAkVE1QRElSL2Rpc3QueDg2LyRMSUJESVIvbGlianBlZy5AU09fTUFKT1JfVkVSU0lPTkAuMC5AU09fTUlOT1JfVkVSU0lPTkAuZHlsaWIgLWEgXAorCQkhIC1oICRQS0dST09ULyRMSUJESVIvbGlianBlZy5AU09fTUFKT1JfVkVSU0lPTkAuMC5AU09fTUlOT1JfVkVSU0lPTkAuZHlsaWIgXTsgdGhlbgogCQlsaXBvIC1jcmVhdGUgXAotCQkJLWFyY2ggaTM4NiAkVE1QRElSL2Rpc3QueDg2L29wdC8kUEFDS0FHRV9OQU1FL2xpYi9saWJqcGVnLkBTT19NQUpPUl9WRVJTSU9OQC4wLkBTT19NSU5PUl9WRVJTSU9OQC5keWxpYiBcCi0JCQktYXJjaCB4ODZfNjQgJFBLR1JPT1Qvb3B0LyRQQUNLQUdFX05BTUUvbGliL2xpYmpwZWcuQFNPX01BSk9SX1ZFUlNJT05ALjAuQFNPX01JTk9SX1ZFUlNJT05ALmR5bGliIFwKLQkJCS1vdXRwdXQgJFBLR1JPT1Qvb3B0LyRQQUNLQUdFX05BTUUvbGliL2xpYmpwZWcuQFNPX01BSk9SX1ZFUlNJT05ALjAuQFNPX01JTk9SX1ZFUlNJT05ALmR5bGliCisJCQktYXJjaCBpMzg2ICRUTVBESVIvZGlzdC54ODYvJExJQkRJUi9saWJqcGVnLkBTT19NQUpPUl9WRVJTSU9OQC4wLkBTT19NSU5PUl9WRVJTSU9OQC5keWxpYiBcCisJCQktYXJjaCB4ODZfNjQgJFBLR1JPT1QvJExJQkRJUi9saWJqcGVnLkBTT19NQUpPUl9WRVJTSU9OQC4wLkBTT19NSU5PUl9WRVJTSU9OQC5keWxpYiBcCisJCQktb3V0cHV0ICRQS0dST09ULyRMSUJESVIvbGlianBlZy5AU09fTUFKT1JfVkVSU0lPTkAuMC5AU09fTUlOT1JfVkVSU0lPTkAuZHlsaWIKIAlmaQogCWxpcG8gLWNyZWF0ZSBcCi0JCS1hcmNoIGkzODYgJFRNUERJUi9kaXN0Lng4Ni9vcHQvJFBBQ0tBR0VfTkFNRS9saWIvbGlianBlZy5hIFwKLQkJLWFyY2ggeDg2XzY0ICRQS0dST09UL29wdC8kUEFDS0FHRV9OQU1FL2xpYi9saWJqcGVnLmEgXAotCQktb3V0cHV0ICRQS0dST09UL29wdC8kUEFDS0FHRV9OQU1FL2xpYi9saWJqcGVnLmEKKwkJLWFyY2ggaTM4NiAkVE1QRElSL2Rpc3QueDg2LyRMSUJESVIvbGlianBlZy5hIFwKKwkJLWFyY2ggeDg2XzY0ICRQS0dST09ULyRMSUJESVIvbGlianBlZy5hIFwKKwkJLW91dHB1dCAkUEtHUk9PVC8kTElCRElSL2xpYmpwZWcuYQogCWxpcG8gLWNyZWF0ZSBcCi0JCS1hcmNoIGkzODYgJFRNUERJUi9kaXN0Lng4Ni9vcHQvJFBBQ0tBR0VfTkFNRS9saWIvbGlidHVyYm9qcGVnLmR5bGliIFwKLQkJLWFyY2ggeDg2XzY0ICRQS0dST09UL3Vzci9saWIvbGlidHVyYm9qcGVnLmR5bGliIFwKLQkJLW91dHB1dCAkUEtHUk9PVC91c3IvbGliL2xpYnR1cmJvanBlZy5keWxpYgorCQktYXJjaCBpMzg2ICRUTVBESVIvZGlzdC54ODYvJExJQkRJUi9saWJ0dXJib2pwZWcuMC5keWxpYiBcCisJCS1hcmNoIHg4Nl82NCAkUEtHUk9PVC8kTElCRElSL2xpYnR1cmJvanBlZy4wLmR5bGliIFwKKwkJLW91dHB1dCAkUEtHUk9PVC8kTElCRElSL2xpYnR1cmJvanBlZy4wLmR5bGliCiAJbGlwbyAtY3JlYXRlIFwKLQkJLWFyY2ggaTM4NiAkVE1QRElSL2Rpc3QueDg2L29wdC8kUEFDS0FHRV9OQU1FL2xpYi9saWJ0dXJib2pwZWcuYSBcCi0JCS1hcmNoIHg4Nl82NCAkUEtHUk9PVC91c3IvbGliL2xpYnR1cmJvanBlZy5hIFwKLQkJLW91dHB1dCAkUEtHUk9PVC91c3IvbGliL2xpYnR1cmJvanBlZy5hCisJCS1hcmNoIGkzODYgJFRNUERJUi9kaXN0Lng4Ni8kTElCRElSL2xpYnR1cmJvanBlZy5hIFwKKwkJLWFyY2ggeDg2XzY0ICRQS0dST09ULyRMSUJESVIvbGlidHVyYm9qcGVnLmEgXAorCQktb3V0cHV0ICRQS0dST09ULyRMSUJESVIvbGlidHVyYm9qcGVnLmEKIAlsaXBvIC1jcmVhdGUgXAotCQktYXJjaCBpMzg2ICRUTVBESVIvZGlzdC54ODYvb3B0LyRQQUNLQUdFX05BTUUvYmluL2NqcGVnIFwKLQkJLWFyY2ggeDg2XzY0ICRQS0dST09UL29wdC8kUEFDS0FHRV9OQU1FL2Jpbi9janBlZyBcCi0JCS1vdXRwdXQgJFBLR1JPT1Qvb3B0LyRQQUNLQUdFX05BTUUvYmluL2NqcGVnCisJCS1hcmNoIGkzODYgJFRNUERJUi9kaXN0Lng4Ni8kQklORElSL2NqcGVnIFwKKwkJLWFyY2ggeDg2XzY0ICRQS0dST09ULyRCSU5ESVIvY2pwZWcgXAorCQktb3V0cHV0ICRQS0dST09ULyRCSU5ESVIvY2pwZWcKIAlsaXBvIC1jcmVhdGUgXAotCQktYXJjaCBpMzg2ICRUTVBESVIvZGlzdC54ODYvb3B0LyRQQUNLQUdFX05BTUUvYmluL2RqcGVnIFwKLQkJLWFyY2ggeDg2XzY0ICRQS0dST09UL29wdC8kUEFDS0FHRV9OQU1FL2Jpbi9kanBlZyBcCi0JCS1vdXRwdXQgJFBLR1JPT1Qvb3B0LyRQQUNLQUdFX05BTUUvYmluL2RqcGVnCisJCS1hcmNoIGkzODYgJFRNUERJUi9kaXN0Lng4Ni8kQklORElSL2RqcGVnIFwKKwkJLWFyY2ggeDg2XzY0ICRQS0dST09ULyRCSU5ESVIvZGpwZWcgXAorCQktb3V0cHV0ICRQS0dST09ULyRCSU5ESVIvZGpwZWcKIAlsaXBvIC1jcmVhdGUgXAotCQktYXJjaCBpMzg2ICRUTVBESVIvZGlzdC54ODYvb3B0LyRQQUNLQUdFX05BTUUvYmluL2pwZWd0cmFuIFwKLQkJLWFyY2ggeDg2XzY0ICRQS0dST09UL29wdC8kUEFDS0FHRV9OQU1FL2Jpbi9qcGVndHJhbiBcCi0JCS1vdXRwdXQgJFBLR1JPT1Qvb3B0LyRQQUNLQUdFX05BTUUvYmluL2pwZWd0cmFuCisJCS1hcmNoIGkzODYgJFRNUERJUi9kaXN0Lng4Ni8kQklORElSL2pwZWd0cmFuIFwKKwkJLWFyY2ggeDg2XzY0ICRQS0dST09ULyRCSU5ESVIvanBlZ3RyYW4gXAorCQktb3V0cHV0ICRQS0dST09ULyRCSU5ESVIvanBlZ3RyYW4KIAlsaXBvIC1jcmVhdGUgXAotCQktYXJjaCBpMzg2ICRUTVBESVIvZGlzdC54ODYvb3B0LyRQQUNLQUdFX05BTUUvYmluL3RqYmVuY2ggXAotCQktYXJjaCB4ODZfNjQgJFBLR1JPT1Qvb3B0LyRQQUNLQUdFX05BTUUvYmluL3RqYmVuY2ggXAotCQktb3V0cHV0ICRQS0dST09UL29wdC8kUEFDS0FHRV9OQU1FL2Jpbi90amJlbmNoCisJCS1hcmNoIGkzODYgJFRNUERJUi9kaXN0Lng4Ni8kQklORElSL3RqYmVuY2ggXAorCQktYXJjaCB4ODZfNjQgJFBLR1JPT1QvJEJJTkRJUi90amJlbmNoIFwKKwkJLW91dHB1dCAkUEtHUk9PVC8kQklORElSL3RqYmVuY2gKIAlsaXBvIC1jcmVhdGUgXAotCQktYXJjaCBpMzg2ICRUTVBESVIvZGlzdC54ODYvb3B0LyRQQUNLQUdFX05BTUUvYmluL3JkanBnY29tIFwKLQkJLWFyY2ggeDg2XzY0ICRQS0dST09UL29wdC8kUEFDS0FHRV9OQU1FL2Jpbi9yZGpwZ2NvbSBcCi0JCS1vdXRwdXQgJFBLR1JPT1Qvb3B0LyRQQUNLQUdFX05BTUUvYmluL3JkanBnY29tCisJCS1hcmNoIGkzODYgJFRNUERJUi9kaXN0Lng4Ni8kQklORElSL3JkanBnY29tIFwKKwkJLWFyY2ggeDg2XzY0ICRQS0dST09ULyRCSU5ESVIvcmRqcGdjb20gXAorCQktb3V0cHV0ICRQS0dST09ULyRCSU5ESVIvcmRqcGdjb20KIAlsaXBvIC1jcmVhdGUgXAotCQktYXJjaCBpMzg2ICRUTVBESVIvZGlzdC54ODYvb3B0LyRQQUNLQUdFX05BTUUvYmluL3dyanBnY29tIFwKLQkJLWFyY2ggeDg2XzY0ICRQS0dST09UL29wdC8kUEFDS0FHRV9OQU1FL2Jpbi93cmpwZ2NvbSBcCi0JCS1vdXRwdXQgJFBLR1JPT1Qvb3B0LyRQQUNLQUdFX05BTUUvYmluL3dyanBnY29tCisJCS1hcmNoIGkzODYgJFRNUERJUi9kaXN0Lng4Ni8kQklORElSL3dyanBnY29tIFwKKwkJLWFyY2ggeDg2XzY0ICRQS0dST09ULyRCSU5ESVIvd3JqcGdjb20gXAorCQktb3V0cHV0ICRQS0dST09ULyRCSU5ESVIvd3JqcGdjb20KIAogZmkKIApAQCAtMTYxLDEzICsxNzUsMTMgQEAKIAltYWtlIGluc3RhbGwgREVTVERJUj0kVE1QRElSL2Rpc3QuYXJtdjYKIAlwb3BkCiAJbGlwbyAtY3JlYXRlIFwKLQkJJFBLR1JPT1Qvb3B0LyRQQUNLQUdFX05BTUUvbGliL2xpYmpwZWcuYSBcCi0JCS1hcmNoIGFybSAkVE1QRElSL2Rpc3QuYXJtdjYvb3B0LyRQQUNLQUdFX05BTUUvbGliL2xpYmpwZWcuYSBcCi0JCS1vdXRwdXQgJFBLR1JPT1Qvb3B0LyRQQUNLQUdFX05BTUUvbGliL2xpYmpwZWcuYQorCQkkUEtHUk9PVC8kTElCRElSL2xpYmpwZWcuYSBcCisJCS1hcmNoIGFybSAkVE1QRElSL2Rpc3QuYXJtdjYvJExJQkRJUi9saWJqcGVnLmEgXAorCQktb3V0cHV0ICRQS0dST09ULyRMSUJESVIvbGlianBlZy5hCiAJbGlwbyAtY3JlYXRlIFwKLQkJJFBLR1JPT1QvdXNyL2xpYi9saWJ0dXJib2pwZWcuYSBcCi0JCS1hcmNoIGFybSAkVE1QRElSL2Rpc3QuYXJtdjYvb3B0LyRQQUNLQUdFX05BTUUvbGliL2xpYnR1cmJvanBlZy5hIFwKLQkJLW91dHB1dCAkUEtHUk9PVC91c3IvbGliL2xpYnR1cmJvanBlZy5hCisJCSRQS0dST09ULyRMSUJESVIvbGlidHVyYm9qcGVnLmEgXAorCQktYXJjaCBhcm0gJFRNUERJUi9kaXN0LmFybXY2LyRMSUJESVIvbGlidHVyYm9qcGVnLmEgXAorCQktb3V0cHV0ICRQS0dST09ULyRMSUJESVIvbGlidHVyYm9qcGVnLmEKIGZpCiAKIGlmIFsgJEJVSUxEQVJNVjcgPSAxIF07IHRoZW4KQEAgLTE4NCwyOCArMTk4LDUxIEBACiAJbWFrZSBpbnN0YWxsIERFU1RESVI9JFRNUERJUi9kaXN0LmFybXY3CiAJcG9wZAogCWxpcG8gLWNyZWF0ZSBcCi0JCSRQS0dST09UL29wdC8kUEFDS0FHRV9OQU1FL2xpYi9saWJqcGVnLmEgXAotCQktYXJjaCBhcm0gJFRNUERJUi9kaXN0LmFybXY3L29wdC8kUEFDS0FHRV9OQU1FL2xpYi9saWJqcGVnLmEgXAotCQktb3V0cHV0ICRQS0dST09UL29wdC8kUEFDS0FHRV9OQU1FL2xpYi9saWJqcGVnLmEKKwkJJFBLR1JPT1QvJExJQkRJUi9saWJqcGVnLmEgXAorCQktYXJjaCBhcm0gJFRNUERJUi9kaXN0LmFybXY3LyRMSUJESVIvbGlianBlZy5hIFwKKwkJLW91dHB1dCAkUEtHUk9PVC8kTElCRElSL2xpYmpwZWcuYQogCWxpcG8gLWNyZWF0ZSBcCi0JCSRQS0dST09UL3Vzci9saWIvbGlidHVyYm9qcGVnLmEgXAotCQktYXJjaCBhcm0gJFRNUERJUi9kaXN0LmFybXY3L29wdC8kUEFDS0FHRV9OQU1FL2xpYi9saWJ0dXJib2pwZWcuYSBcCi0JCS1vdXRwdXQgJFBLR1JPT1QvdXNyL2xpYi9saWJ0dXJib2pwZWcuYQorCQkkUEtHUk9PVC8kTElCRElSL2xpYnR1cmJvanBlZy5hIFwKKwkJLWFyY2ggYXJtICRUTVBESVIvZGlzdC5hcm12Ny8kTElCRElSL2xpYnR1cmJvanBlZy5hIFwKKwkJLW91dHB1dCAkUEtHUk9PVC8kTElCRElSL2xpYnR1cmJvanBlZy5hCiBmaQogCi1pbnN0YWxsX25hbWVfdG9vbCAtaWQgL29wdC8kUEFDS0FHRV9OQU1FL2xpYi9saWJqcGVnLkBTT19NQUpPUl9WRVJTSU9OQC5keWxpYiAkUEtHUk9PVC9vcHQvJFBBQ0tBR0VfTkFNRS9saWIvbGlianBlZy5AU09fTUFKT1JfVkVSU0lPTkAuZHlsaWIKLWluc3RhbGxfbmFtZV90b29sIC1pZCBsaWJ0dXJib2pwZWcuZHlsaWIgJFBLR1JPT1QvdXNyL2xpYi9saWJ0dXJib2pwZWcuZHlsaWIKK2lmIFsgJEJVSUxEQVJNVjdTID0gMSBdOyB0aGVuCisJaWYgWyAhIC1kICRCVUlMRERJUkFSTVY3UyBdOyB0aGVuCisJCWVjaG8gRVJST1I6IEFSTSB2N3MgYnVpbGQgZGlyZWN0b3J5ICRCVUlMRERJUkFSTVY3UyBkb2VzIG5vdCBleGlzdAorCQlleGl0IDEKKwlmaQorCWlmIFsgISAtZiAkQlVJTERESVJBUk1WN1MvTWFrZWZpbGUgXTsgdGhlbgorCQllY2hvIEVSUk9SOiBBUk0gdjdzIGJ1aWxkIGRpcmVjdG9yeSAkQlVJTERESVJBUk1WN1MgaXMgbm90IGNvbmZpZ3VyZWQKKwkJZXhpdCAxCisJZmkKKwlta2RpciAtcCAkVE1QRElSL2Rpc3QuYXJtdjdzCisJcHVzaGQgJEJVSUxERElSQVJNVjdTCisJbWFrZSBpbnN0YWxsIERFU1RESVI9JFRNUERJUi9kaXN0LmFybXY3cworCXBvcGQKKwlsaXBvIC1jcmVhdGUgXAorCQkkUEtHUk9PVC8kTElCRElSL2xpYmpwZWcuYSBcCisJCS1hcmNoIGFybSAkVE1QRElSL2Rpc3QuYXJtdjdzLyRMSUJESVIvbGlianBlZy5hIFwKKwkJLW91dHB1dCAkUEtHUk9PVC8kTElCRElSL2xpYmpwZWcuYQorCWxpcG8gLWNyZWF0ZSBcCisJCSRQS0dST09ULyRMSUJESVIvbGlidHVyYm9qcGVnLmEgXAorCQktYXJjaCBhcm0gJFRNUERJUi9kaXN0LmFybXY3cy8kTElCRElSL2xpYnR1cmJvanBlZy5hIFwKKwkJLW91dHB1dCAkUEtHUk9PVC8kTElCRElSL2xpYnR1cmJvanBlZy5hCitmaQogCi1sbiAtZnMgL3Vzci9pbmNsdWRlL3R1cmJvanBlZy5oICRQS0dST09UL29wdC8kUEFDS0FHRV9OQU1FL2luY2x1ZGUvCi1sbiAtZnMgL3Vzci9saWIvbGlidHVyYm9qcGVnLmEgJFBLR1JPT1Qvb3B0LyRQQUNLQUdFX05BTUUvbGliLworaW5zdGFsbF9uYW1lX3Rvb2wgLWlkICRMSUJESVIvbGlianBlZy5AU09fTUFKT1JfVkVSU0lPTkAuZHlsaWIgJFBLR1JPT1QvJExJQkRJUi9saWJqcGVnLkBTT19NQUpPUl9WRVJTSU9OQC5keWxpYgoraW5zdGFsbF9uYW1lX3Rvb2wgLWlkICRMSUJESVIvbGlidHVyYm9qcGVnLjAuZHlsaWIgJFBLR1JPT1QvJExJQkRJUi9saWJ0dXJib2pwZWcuMC5keWxpYgorCiBpZiBbICRXSVRIX0pBVkEgPSAxIF07IHRoZW4KLQlsbiAtZnMgbGlidHVyYm9qcGVnLmR5bGliICRQS0dST09UL3Vzci9saWIvbGlidHVyYm9qcGVnLmpuaWxpYgorCWxuIC1mcyBsaWJ0dXJib2pwZWcuMC5keWxpYiAkUEtHUk9PVC8kTElCRElSL2xpYnR1cmJvanBlZy5qbmlsaWIKIGZpCi1pZiBbICEgLWggJFBLR1JPT1Qvb3B0LyRQQUNLQUdFX05BTUUvbGliMzIgXTsgdGhlbgotCWxuIC1mcyBsaWIgJFBLR1JPT1Qvb3B0LyRQQUNLQUdFX05BTUUvbGliMzIKLWZpCi1pZiBbICEgLWggJFBLR1JPT1Qvb3B0LyRQQUNLQUdFX05BTUUvbGliNjQgXTsgdGhlbgotCWxuIC1mcyBsaWIgJFBLR1JPT1Qvb3B0LyRQQUNLQUdFX05BTUUvbGliNjQKK2lmIFsgIiRQUkVGSVgiID0gIi9vcHQvbGlianBlZy10dXJibyIgLWEgIiRMSUJESVIiID0gIi9vcHQvbGlianBlZy10dXJiby9saWIiIF07IHRoZW4KKwlpZiBbICEgLWggJFBLR1JPT1QvJFBSRUZJWC9saWIzMiBdOyB0aGVuCisJCWxuIC1mcyBsaWIgJFBLR1JPT1QvJFBSRUZJWC9saWIzMgorCWZpCisJaWYgWyAhIC1oICRQS0dST09ULyRQUkVGSVgvbGliNjQgXTsgdGhlbgorCQlsbiAtZnMgbGliICRQS0dST09ULyRQUkVGSVgvbGliNjQKKwlmaQogZmkKIAogY2htb2QgMTc3NSAkUEtHUk9PVC9MaWJyYXJ5CkBAIC0yMTQsMTAgKzI1MSw5IEBACiAKIGNwIHBrZ3NjcmlwdHMvRGVzY3JpcHRpb24ucGxpc3QgJFRNUERJUi9wa2cvCiBjcCBwa2dzY3JpcHRzL0luZm8ucGxpc3QgJFRNUERJUi9wa2cvCi1pbnN0YWxsIC1tIDc1NSBwa2dzY3JpcHRzL3VuaW5zdGFsbCAkUEtHUk9PVC9vcHQvJFBBQ0tBR0VfTkFNRS9iaW4vCitpbnN0YWxsIC1tIDc1NSBwa2dzY3JpcHRzL3VuaW5zdGFsbCAkUEtHUk9PVC8kQklORElSLwogCi1zdWRvIGNob3duIC1SIHJvb3Q6YWRtaW4gJFBLR1JPT1QgCi1zdWRvIGNob3duIC1SIHJvb3Q6MCAkUEtHUk9PVC91c3IgCitzdWRvIGNob3duIC1SIHJvb3Q6YWRtaW4gJFBLR1JPT1QKIGNwICRTUkNESVIvcmVsZWFzZS9MaWNlbnNlLnJ0ZiAkU1JDRElSL3JlbGVhc2UvV2VsY29tZS5ydGYgJFNSQ0RJUi9yZWxlYXNlL1JlYWRNZS5ydGYgJFRNUERJUi9wa2cvUmVzb3VyY2VzLyAKIAogbWtkaXIgJFRNUERJUi9kbWcKZGlmZiAtLWdpdCBhL3JlbGVhc2UvbWFrZXN1bnBrZy5pbiBiL3JlbGVhc2UvbWFrZXN1bnBrZy5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2NmMzZhOC4uMDAwMDAwMAotLS0gYS9yZWxlYXNlL21ha2VzdW5wa2cuaW4KKysrIC9kZXYvbnVsbApAQCAtMSwxNDMgKzAsMCBAQAotIyEvYmluL3NoCi0KLXNldCAtdQotc2V0IC1lCi10cmFwIG9uZXhpdCBJTlQKLXRyYXAgb25leGl0IFRFUk0KLXRyYXAgb25leGl0IEVYSVQKLQotVE1QRElSPQotCi1vbmV4aXQoKQotewotCWlmIFsgISAiJFRNUERJUiIgPSAiIiBdOyB0aGVuCi0JCXJtIC1yZiAkVE1QRElSCi0JZmkKLX0KLQotdXNhZ2UoKQotewotCWVjaG8gIiQwIFtjb21iaW5lZCBbMzItYml0IGJ1aWxkIGRpci5dXSIKLQlleGl0IDEKLX0KLQotQ09NQklORUQ9MAotCi1QQUNLQUdFX05BTUU9QFBBQ0tBR0VfTkFNRUAKLVZFUlNJT049QFZFUlNJT05ACi1CVUlMRD1AQlVJTERACi1QS0dBUkNIPUBERUJBUkNIQAotU1JDRElSPUBhYnNfdG9wX3NyY2RpckAKLUJVSUxERElSMzI9QGFic190b3Bfc3JjZGlyQC9zb2x4ODYKLVdJVEhfSkFWQT1AV0lUSF9KQVZBQAotaWYgWyAkIyAtZ3QgMCBdOyB0aGVuCi0JaWYgWyAiJDEiID0gImNvbWJpbmVkIiBdOyB0aGVuCi0JCUNPTUJJTkVEPTEKLQkJaWYgWyAkIyAtZ3QgMSBdOyB0aGVuCUJVSUxERElSMzI9JDI7IGZpCi0JZmkKLWZpCi0KLXVtYXNrIDAyMgotVE1QRElSPWBta3RlbXAgLWQgL3RtcC8kUEFDS0FHRV9OQU1FLWJ1aWxkLlhYWFhYWGAKLXJtIC1mICRQQUNLQUdFX05BTUUucGtnLmJ6MgotY3AgJFNSQ0RJUi9yZWxlYXNlL2NvcHlyaWdodCAkVE1QRElSCi10b3VjaCAkVE1QRElSL2RlcGVuZAotY3AgcGtnc2NyaXB0cy9wa2dpbmZvICRUTVBESVIvcGtnaW5mbyAKLQotaWYgWyAiJFBLR0FSQ0giID0gImkzODYiIF07IHRoZW4KLQlfX0xJQj1saWIKLWVsc2UKLQlfX0xJQj1saWIvJFBLR0FSQ0gKLWZpCi0KLWlmIFsgJENPTUJJTkVEID0gMSBdOyB0aGVuCi0JaWYgWyAhIC1kICRCVUlMRERJUjMyIF07IHRoZW4KLQkJZWNobyBFUlJPUjogMzItYml0IGJ1aWxkIGRpcmVjdG9yeSAkQlVJTERESVIzMiBkb2VzIG5vdCBleGlzdAotCQlleGl0IDEKLQlmaQotCWlmIFsgISAtZiAkQlVJTERESVIzMi9NYWtlZmlsZSBdOyB0aGVuCi0JCWVjaG8gRVJST1I6IDMyLWJpdCBidWlsZCBkaXJlY3RvcnkgJEJVSUxERElSMzIgaXMgbm90IGNvbmZpZ3VyZWQKLQkJZXhpdCAxCi0JZmkKLQlQV0Q9YHB3ZGAKLQljZCAkQlVJTERESVIzMgotCW1ha2UgaW5zdGFsbCBERVNURElSPSRUTVBESVIgbWFuZGlyPS9vcHQvJFBBQ0tBR0VfTkFNRS9tYW4gQU1fTUFLRUZMQUdTPSJtYW5kaXI9L29wdC8kUEFDS0FHRV9OQU1FL21hbiIKLQljZCAkUFdECi1maQotIyBUaGlzIG1lc3MgaXMgdG8gd29yayBhcm91bmQgYSBidWcgaW4gL3Vzci9jY3MvYmluL21ha2UKLW1ha2UgaW5zdGFsbCBERVNURElSPSRUTVBESVIgbGliZGlyPS9vcHQvJFBBQ0tBR0VfTkFNRS8kX19MSUIgXAotCW1hbmRpcj0vb3B0LyRQQUNLQUdFX05BTUUvbWFuIGRvY2Rpcj0vb3B0LyRQQUNLQUdFX05BTUUvZG9jIFwKLQlleGFtcGxlZGlyPS9vcHQvJFBBQ0tBR0VfTkFNRS9kb2MgXAotCUFNX01BS0VGTEFHUz0ibGliZGlyPS9vcHQvJFBBQ0tBR0VfTkFNRS8kX19MSUIgbWFuZGlyPS9vcHQvJFBBQ0tBR0VfTkFNRS9tYW4gZG9jZGlyPS9vcHQvJFBBQ0tBR0VfTkFNRS9kb2MgZXhhbXBsZWRpcj0vb3B0LyRQQUNLQUdFX05BTUUvZG9jIgotcm0gLWYgJFRNUERJUi9vcHQvJFBBQ0tBR0VfTkFNRS8kX19MSUIvKi5sYQotCi1jYXQgPiRUTVBESVIvcHJvdG8gPDxFT0YKLWkgY29weXJpZ2h0Ci1pIGRlcGVuZAotaSBwa2dpbmZvCi1kIG5vbmUgJFBBQ0tBR0VfTkFNRSAwNzU1IHJvb3QgYmluCi1kIG5vbmUgJFBBQ0tBR0VfTkFNRS9iaW4gMDc1NSByb290IGJpbgotZiBub25lICRQQUNLQUdFX05BTUUvYmluL2NqcGVnIDA3NTUgcm9vdCBiaW4KLWYgbm9uZSAkUEFDS0FHRV9OQU1FL2Jpbi9kanBlZyAwNzU1IHJvb3QgYmluCi1mIG5vbmUgJFBBQ0tBR0VfTkFNRS9iaW4vanBlZ3RyYW4gMDc1NSByb290IGJpbgotZiBub25lICRQQUNLQUdFX05BTUUvYmluL3RqYmVuY2ggMDc1NSByb290IGJpbgotZiBub25lICRQQUNLQUdFX05BTUUvYmluL3JkanBnY29tIDA3NTUgcm9vdCBiaW4KLWYgbm9uZSAkUEFDS0FHRV9OQU1FL2Jpbi93cmpwZ2NvbSAwNzU1IHJvb3QgYmluCi1kIG5vbmUgJFBBQ0tBR0VfTkFNRS9saWIgMDc1NSByb290IGJpbgotRU9GCi1pZiBbICRDT01CSU5FRCA9IDEgXTsgdGhlbgotY2F0ID4+JFRNUERJUi9wcm90byA8PEVPRgotZiBub25lICRQQUNLQUdFX05BTUUvbGliL2xpYmpwZWcuc28uQFNPX01BSk9SX1ZFUlNJT05ALjAuQFNPX01JTk9SX1ZFUlNJT05AIDA3NTUgcm9vdCBiaW4KLXMgbm9uZSAkUEFDS0FHRV9OQU1FL2xpYi9saWJqcGVnLnNvLkBTT19NQUpPUl9WRVJTSU9OQD1saWJqcGVnLnNvLkBTT19NQUpPUl9WRVJTSU9OQC4wLkBTT19NSU5PUl9WRVJTSU9OQAotcyBub25lICRQQUNLQUdFX05BTUUvbGliL2xpYmpwZWcuc289bGlianBlZy5zby5AU09fTUFKT1JfVkVSU0lPTkAuMC5AU09fTUlOT1JfVkVSU0lPTkAKLWYgbm9uZSAkUEFDS0FHRV9OQU1FL2xpYi9saWJqcGVnLmEgMDY0NCByb290IGJpbgotZiBub25lICRQQUNLQUdFX05BTUUvbGliL2xpYnR1cmJvanBlZy5zbyAwNzU1IHJvb3QgYmluCi1mIG5vbmUgJFBBQ0tBR0VfTkFNRS9saWIvbGlidHVyYm9qcGVnLmEgMDY0NCByb290IGJpbgotRU9GCi1maQotaWYgWyAiJHtfX0xJQn0iICE9ICJsaWIiIF07IHRoZW4KLWVjaG8gZCBub25lICRQQUNLQUdFX05BTUUvJHtfX0xJQn0gMDc1NSByb290IGJpbiA+PiRUTVBESVIvcHJvdG8KLWVjaG8gcyBub25lICRQQUNLQUdFX05BTUUvbGliNjQ9JHtfX0xJQn0gPj4kVE1QRElSL3Byb3RvCi1lY2hvIHMgbm9uZSAkUEFDS0FHRV9OQU1FL2xpYi82ND0kUEtHQVJDSCA+PiRUTVBESVIvcHJvdG8KLWZpCi1jYXQgPj4kVE1QRElSL3Byb3RvIDw8RU9GCi1mIG5vbmUgJFBBQ0tBR0VfTkFNRS8ke19fTElCfS9saWJqcGVnLnNvLkBTT19NQUpPUl9WRVJTSU9OQC4wLkBTT19NSU5PUl9WRVJTSU9OQCAwNzU1IHJvb3QgYmluCi1zIG5vbmUgJFBBQ0tBR0VfTkFNRS8ke19fTElCfS9saWJqcGVnLnNvLkBTT19NQUpPUl9WRVJTSU9OQD1saWJqcGVnLnNvLkBTT19NQUpPUl9WRVJTSU9OQC4wLkBTT19NSU5PUl9WRVJTSU9OQAotcyBub25lICRQQUNLQUdFX05BTUUvJHtfX0xJQn0vbGlianBlZy5zbz1saWJqcGVnLnNvLkBTT19NQUpPUl9WRVJTSU9OQC4wLkBTT19NSU5PUl9WRVJTSU9OQAotZiBub25lICRQQUNLQUdFX05BTUUvJHtfX0xJQn0vbGlianBlZy5hIDA2NDQgcm9vdCBiaW4KLWYgbm9uZSAkUEFDS0FHRV9OQU1FLyR7X19MSUJ9L2xpYnR1cmJvanBlZy5zbyAwNzU1IHJvb3QgYmluCi1mIG5vbmUgJFBBQ0tBR0VfTkFNRS8ke19fTElCfS9saWJ0dXJib2pwZWcuYSAwNjQ0IHJvb3QgYmluCi1zIG5vbmUgJFBBQ0tBR0VfTkFNRS9saWIzMj1saWIKLWQgbm9uZSAkUEFDS0FHRV9OQU1FL21hbiAwNzU1IHJvb3QgYmluCi1kIG5vbmUgJFBBQ0tBR0VfTkFNRS9tYW4vbWFuMSAwNzU1IHJvb3QgYmluCi1kIG5vbmUgJFBBQ0tBR0VfTkFNRS9tYW4vbWFuMS9janBlZy4xIDA2NDQgcm9vdCBiaW4KLWQgbm9uZSAkUEFDS0FHRV9OQU1FL21hbi9tYW4xL2RqcGVnLjEgMDY0NCByb290IGJpbgotZCBub25lICRQQUNLQUdFX05BTUUvbWFuL21hbjEvanBlZ3RyYW4uMSAwNjQ0IHJvb3QgYmluCi1kIG5vbmUgJFBBQ0tBR0VfTkFNRS9tYW4vbWFuMS9yZGpwZ2NvbS4xIDA2NDQgcm9vdCBiaW4KLWQgbm9uZSAkUEFDS0FHRV9OQU1FL21hbi9tYW4xL3dyanBnY29tLjEgMDY0NCByb290IGJpbgotZCBub25lICRQQUNLQUdFX05BTUUvaW5jbHVkZSAwNzU1IHJvb3QgYmluCi1mIG5vbmUgJFBBQ0tBR0VfTkFNRS9pbmNsdWRlL2pjb25maWcuaCAwNjQ0IHJvb3QgYmluCi1mIG5vbmUgJFBBQ0tBR0VfTkFNRS9pbmNsdWRlL2plcnJvci5oIDA2NDQgcm9vdCBiaW4KLWYgbm9uZSAkUEFDS0FHRV9OQU1FL2luY2x1ZGUvam1vcmVjZmcuaCAwNjQ0IHJvb3QgYmluCi1mIG5vbmUgJFBBQ0tBR0VfTkFNRS9pbmNsdWRlL2pwZWdsaWIuaCAwNjQ0IHJvb3QgYmluCi1mIG5vbmUgJFBBQ0tBR0VfTkFNRS9pbmNsdWRlL3R1cmJvanBlZy5oIDA2NDQgcm9vdCBiaW4KLWQgbm9uZSAkUEFDS0FHRV9OQU1FL2RvYyAwNzU1IHJvb3QgYmluCi1mIG5vbmUgJFBBQ0tBR0VfTkFNRS9kb2MvUkVBRE1FIDA2NDQgcm9vdCBiaW4KLWYgbm9uZSAkUEFDS0FHRV9OQU1FL2RvYy9SRUFETUUtdHVyYm8udHh0IDA2NDQgcm9vdCBiaW4KLWYgbm9uZSAkUEFDS0FHRV9OQU1FL2RvYy9leGFtcGxlLmMgMDY0NCByb290IGJpbgotZiBub25lICRQQUNLQUdFX05BTUUvZG9jL2xpYmpwZWcudHh0IDA2NDQgcm9vdCBiaW4KLWYgbm9uZSAkUEFDS0FHRV9OQU1FL2RvYy9zdHJ1Y3R1cmUudHh0IDA2NDQgcm9vdCBiaW4KLWYgbm9uZSAkUEFDS0FHRV9OQU1FL2RvYy91c2FnZS50eHQgMDY0NCByb290IGJpbgotZiBub25lICRQQUNLQUdFX05BTUUvZG9jL3dpemFyZC50eHQgMDY0NCByb290IGJpbgotRU9GCi1pZiBbICRXSVRIX0pBVkEgPSAxIF07IHRoZW4KLWVjaG8gZCBub25lICRQQUNLQUdFX05BTUUvY2xhc3NlcyAwNzU1IHJvb3QgYmluID4+JFRNUERJUi9wcm90bwotZWNobyBmIG5vbmUgJFBBQ0tBR0VfTkFNRS9jbGFzc2VzL3R1cmJvanBlZy5qYXIgMDY0NCByb290IGJpbiA+PiRUTVBESVIvcHJvdG8KLWZpCi0KLXBrZ21rIC1vIC1yICRUTVBESVIvb3B0IC1kICRUTVBESVIgLWEgaTM4NiAtZiAkVE1QRElSL3Byb3RvCi1wa2d0cmFucyAtcyAkVE1QRElSICRUTVBESVIvJFBBQ0tBR0VfTkFNRS0kVkVSU0lPTi5wa2cgJFBBQ0tBR0VfTkFNRQotYnppcDIgJFRNUERJUi8kUEFDS0FHRV9OQU1FLSRWRVJTSU9OLnBrZwotY3AgJFRNUERJUi8kUEFDS0FHRV9OQU1FLSRWRVJTSU9OLnBrZy5iejIgLiAKLQotZXhpdApkaWZmIC0tZ2l0IGEvcmVsZWFzZS9wa2dpbmZvLmluIGIvcmVsZWFzZS9wa2dpbmZvLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzJhZDBmLi4wMDAwMDAwCi0tLSBhL3JlbGVhc2UvcGtnaW5mby5pbgorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLUFSQ0g9aTM4NgotUEtHPUBQQUNLQUdFX05BTUVACi1OQU1FPUBQQUNLQUdFX05BTUVAIFNESyBhbmQgcnVuIHRpbWUgbGlicmFyaWVzCi1WRVJTSU9OPUBWRVJTSU9OQCxSRVY9QEJVSUxEQAotU1VOV19QS0dWRVJTPTEuMAotREVTQz1BIFNJTUQtYWNjZWxlcmF0ZWQgSlBFRyBjb2RlYyB0aGF0IHByb3ZpZGVzIGJvdGggdGhlIGxpYmpwZWcgYW5kIFR1cmJvSlBFRyBBUElzCi1WRU5ET1I9VGhlIGxpYmpwZWctdHVyYm8gUHJvamVjdAotSE9UTElORT1odHRwOi8vd3d3LmxpYmpwZWctdHVyYm8ub3JnCi1FTUFJTD1pbmZvcm1hdGlvbkBsaWJqcGVnLXR1cmJvLm9yZwotTUFYSU5TVD0xCi1DQVRFR09SWT1hcHBsaWNhdGlvbgotQkFTRURJUj0vb3B0Ci1DTEFTU0VTPW5vbmUKLVNVTldfUEtHX0FMTFpPTkVTPXRydWUKLVNVTldfUEtHX0hPTExPVz1mYWxzZQotU1VOV19QS0dfVEhJU1pPTkU9ZmFsc2UKZGlmZiAtLWdpdCBhL3JlbGVhc2UvdW5pbnN0YWxsLmluIGIvcmVsZWFzZS91bmluc3RhbGwuaW4KaW5kZXggMmU0NTk4Yy4uZjE2N2JiZCAxMDA2NDQKLS0tIGEvcmVsZWFzZS91bmluc3RhbGwuaW4KKysrIGIvcmVsZWFzZS91bmluc3RhbGwuaW4KQEAgLTEsNCArMSw0IEBACi0jIENvcHlyaWdodCAoQykyMDA5LTIwMTEgRC4gUi4gQ29tbWFuZGVyLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKTIwMDktMjAxMSwgMjAxMyBELiBSLiBDb21tYW5kZXIuICBBbGwgUmlnaHRzIFJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CkBAIC0zMSw3ICszMSw3IEBACiAJZXhpdCAtMQogZmkKIAotUEFDS0FHRT1AUEFDS0FHRV9OQU1FQAorUEFDS0FHRT1AUEtHTkFNRUAKIE1BQ1BBQ0tBR0U9Y29tLiRQQUNLQUdFLiRQQUNLQUdFCiBSRUNFSVBUPS9MaWJyYXJ5L1JlY2VpcHRzLyRQQUNLQUdFLnBrZwogCkBAIC01NiwyNyArNTYsNDYgQEAKIHBvcGQKIAogZWNobyBSZW1vdmluZyBwYWNrYWdlIGRpcmVjdG9yaWVzIC4uLgotaWYgWyAtZCAvb3B0LyRQQUNLQUdFL2JpbiBdOyB0aGVuCi0Jcm1kaXIgL29wdC8kUEFDS0FHRS9iaW4gMj4mMSB8fCBFWElUU1RBVFVTPS0xCitQUkVGSVg9JXtfX3ByZWZpeH0KK0JJTkRJUj0le19fYmluZGlyfQorREFUQURJUj0le19fZGF0YWRpcn0KK0lOQ0xVREVESVI9JXtfX2luY2x1ZGVkaXJ9CitMSUJESVI9JXtfX2xpYmRpcn0KK01BTkRJUj0le19fbWFuZGlyfQorCitpZiBbIC1kICRCSU5ESVIgXTsgdGhlbgorCXJtZGlyICRCSU5ESVIgMj4mMSB8fCBFWElUU1RBVFVTPS0xCiBmaQotaWYgWyAtZCAvb3B0LyRQQUNLQUdFL2xpYiBdOyB0aGVuCi0Jcm1kaXIgL29wdC8kUEFDS0FHRS9saWIgMj4mMSB8fCBFWElUU1RBVFVTPS0xCitpZiBbIC1kICRMSUJESVIgXTsgdGhlbgorCXJtZGlyICRMSUJESVIgMj4mMSB8fCBFWElUU1RBVFVTPS0xCiBmaQotaWYgWyAtZCAvb3B0LyRQQUNLQUdFL2luY2x1ZGUgXTsgdGhlbgotCXJtZGlyIC9vcHQvJFBBQ0tBR0UvaW5jbHVkZSAyPiYxIHx8IEVYSVRTVEFUVVM9LTEKK2lmIFsgLWQgJElOQ0xVREVESVIgXTsgdGhlbgorCXJtZGlyICRJTkNMVURFRElSIDI+JjEgfHwgRVhJVFNUQVRVUz0tMQogZmkKLXJtIC9vcHQvJFBBQ0tBR0UvbGliMzIgMj4mMSB8fCBFWElUU1RBVFVTPS0xCi1ybSAvb3B0LyRQQUNLQUdFL2xpYjY0IDI+JjEgfHwgRVhJVFNUQVRVUz0tMQotaWYgWyAtZCAvb3B0LyRQQUNLQUdFL21hbi9tYW4xIF07IHRoZW4KLQlybWRpciAvb3B0LyRQQUNLQUdFL21hbi9tYW4xIDI+JjEgfHwgRVhJVFNUQVRVUz0tMQoraWYgWyAiJFBSRUZJWCIgPSAiL29wdC9saWJqcGVnLXR1cmJvIiAtYSAiJExJQkRJUiIgPSAiL29wdC9saWJqcGVnLXR1cmJvL2xpYiIgXTsgdGhlbgorCWlmIFsgLWggJExJQkRJUlwzMiBdOyB0aGVuCisJCXJtICRMSUJESVJcMzIgMj4mMSB8fCBFWElUU1RBVFVTPS0xCisJZmkKKwlpZiBbIC1oICRMSUJESVJcNjQgXTsgdGhlbgorCQlybSAkTElCRElSXDY0IDI+JjEgfHwgRVhJVFNUQVRVUz0tMQorCWZpCiBmaQotaWYgWyAtZCAvb3B0LyRQQUNLQUdFL21hbiBdOyB0aGVuCi0Jcm1kaXIgL29wdC8kUEFDS0FHRS9tYW4gMj4mMSB8fCBFWElUU1RBVFVTPS0xCitpZiBbIC1kICRNQU5ESVIvbWFuMSBdOyB0aGVuCisJcm1kaXIgJE1BTkRJUi9tYW4xIDI+JjEgfHwgRVhJVFNUQVRVUz0tMQogZmkKLWlmIFsgLWQgL29wdC8kUEFDS0FHRS9jbGFzc2VzIF07IHRoZW4KLQlybWRpciAvb3B0LyRQQUNLQUdFL2NsYXNzZXMgMj4mMSB8fCBFWElUU1RBVFVTPS0xCitpZiBbIC1kICRNQU5ESVIgXTsgdGhlbgorCXJtZGlyICRNQU5ESVIgMj4mMSB8fCBFWElUU1RBVFVTPS0xCiBmaQotcm1kaXIgL29wdC8kUEFDS0FHRSAyPiYxIHx8IEVYSVRTVEFUVVM9LTEKK2lmIFsgLWQgJERBVEFESVIvY2xhc3NlcyBdOyB0aGVuCisJcm1kaXIgJERBVEFESVIvY2xhc3NlcyAyPiYxIHx8IEVYSVRTVEFUVVM9LTEKK2ZpCitpZiBbIC1kICREQVRBRElSIC1hICIkREFUQURJUiIgIT0gIiRQUkVGSVgiIF07IHRoZW4KKwlybWRpciAkREFUQURJUiAyPiYxIHx8IEVYSVRTVEFUVVM9LTEKK2ZpCitpZiBbICIkUFJFRklYIiA9ICIvb3B0L2xpYmpwZWctdHVyYm8iIC1hIC1oICIkUFJFRklYL2RvYyIgXTsgdGhlbgorCXJtICRQUkVGSVgvZG9jIDI+JjEgfHwgRVhJVFNUQVRVUz0tMQorZmkKK3JtZGlyICRQUkVGSVggMj4mMSB8fCBFWElUU1RBVFVTPS0xCiBybWRpciAvTGlicmFyeS9Eb2N1bWVudGF0aW9uLyRQQUNLQUdFIDI+JjEgfHwgRVhJVFNUQVRVUz0tMQogCiBpZiBbIC1kICRSRUNFSVBUIF07IHRoZW4KZGlmZiAtLWdpdCBhL3NoYXJlZGxpYi9DTWFrZUxpc3RzLnR4dCBiL3NoYXJlZGxpYi9DTWFrZUxpc3RzLnR4dAppbmRleCAyNWRkYmRmLi5jZDNmMjY4IDEwMDc1NQotLS0gYS9zaGFyZWRsaWIvQ01ha2VMaXN0cy50eHQKKysrIGIvc2hhcmVkbGliL0NNYWtlTGlzdHMudHh0CkBAIC0yNCw4ICsyNCwxMyBAQAogICBzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXMoJHtTSU1EX09CSlN9IFBST1BFUlRJRVMgR0VORVJBVEVEIDEpCiBlbmRpZigpCiAKLWFkZF9saWJyYXJ5KGpwZWcgU0hBUkVEICR7SlBFR19TUkNTfSAke1NJTURfT0JKU30KLSAgJHtDTUFLRV9TT1VSQ0VfRElSfS93aW4vanBlZyR7RExMX1ZFUlNJT059LmRlZikKK2lmKFdJVEhfTUVNX1NSQ0RTVCBBTkQgTk9UIFdJVEhfSlBFRzgpCisgIGFkZF9saWJyYXJ5KGpwZWcgU0hBUkVEICR7SlBFR19TUkNTfSAke1NJTURfT0JKU30KKyAgICAke0NNQUtFX1NPVVJDRV9ESVJ9L3dpbi9qcGVnJHtETExfVkVSU0lPTn0tbWVtc3JjZHN0LmRlZikKK2Vsc2UoKQorICBhZGRfbGlicmFyeShqcGVnIFNIQVJFRCAke0pQRUdfU1JDU30gJHtTSU1EX09CSlN9CisgICAgJHtDTUFLRV9TT1VSQ0VfRElSfS93aW4vanBlZyR7RExMX1ZFUlNJT059LmRlZikKK2VuZGlmKCkKIHNldF90YXJnZXRfcHJvcGVydGllcyhqcGVnIFBST1BFUlRJRVMgU09WRVJTSU9OICR7RExMX1ZFUlNJT059CiAgIFZFUlNJT04gJHtGVUxMVkVSU0lPTn0pCiBpZihNU1ZDKQpkaWZmIC0tZ2l0IGEvc2ltZC9NYWtlZmlsZS5hbSBiL3NpbWQvTWFrZWZpbGUuYW0KaW5kZXggYTEyZmY2ZS4uYTk4MzQzMiAxMDA2NDQKLS0tIGEvc2ltZC9NYWtlZmlsZS5hbQorKysgYi9zaW1kL01ha2VmaWxlLmFtCkBAIC01OCw3ICs1OCw3IEBACiAKIGVuZGlmCiAKLUFNX0NQUEZMQUdTID0gLUkkKHRvcF9zcmNkaXIpIAorQU1fQ1BQRkxBR1MgPSAtSSQodG9wX3NyY2RpcikKIAogLmFzbS5sbzoKIAkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlIC0tdGFnIE5BU00gJChzcmNkaXIpL25hc21fbHQuc2ggJChOQVNNKSAkKE5BRkxBR1MpIC1JJChzcmNkaXIpIC1JLiAkPCAtbyAkQApkaWZmIC0tZ2l0IGEvc2ltZC9qY2Nscm1teC5hc20gYi9zaW1kL2pjY2xybW14LmFzbQppbmRleCBlMDk1MjUzLi5mMzQxMDRmIDEwMDY0NAotLS0gYS9zaW1kL2pjY2xybW14LmFzbQorKysgYi9zaW1kL2pjY2xybW14LmFzbQpAQCAtMjgsNDUwICsyOCw0NTAgQEAKIDsgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cyk7CiA7CiAKLSVkZWZpbmUgaW1nX3dpZHRoKGIpCShiKSs4CQkJOyBKRElNRU5TSU9OIGltZ193aWR0aAotJWRlZmluZSBpbnB1dF9idWYoYikJKGIpKzEyCQk7IEpTQU1QQVJSQVkgaW5wdXRfYnVmCi0lZGVmaW5lIG91dHB1dF9idWYoYikJKGIpKzE2CQk7IEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZgotJWRlZmluZSBvdXRwdXRfcm93KGIpCShiKSsyMAkJOyBKRElNRU5TSU9OIG91dHB1dF9yb3cKLSVkZWZpbmUgbnVtX3Jvd3MoYikJKGIpKzI0CQk7IGludCBudW1fcm93cworJWRlZmluZSBpbWdfd2lkdGgoYikgICAgKGIpKzggICAgICAgICAgIDsgSkRJTUVOU0lPTiBpbWdfd2lkdGgKKyVkZWZpbmUgaW5wdXRfYnVmKGIpICAgIChiKSsxMiAgICAgICAgICA7IEpTQU1QQVJSQVkgaW5wdXRfYnVmCislZGVmaW5lIG91dHB1dF9idWYoYikgICAoYikrMTYgICAgICAgICAgOyBKU0FNUElNQUdFIG91dHB1dF9idWYKKyVkZWZpbmUgb3V0cHV0X3JvdyhiKSAgIChiKSsyMCAgICAgICAgICA7IEpESU1FTlNJT04gb3V0cHV0X3JvdworJWRlZmluZSBudW1fcm93cyhiKSAgICAgKGIpKzI0ICAgICAgICAgIDsgaW50IG51bV9yb3dzCiAKLSVkZWZpbmUgb3JpZ2luYWxfZWJwCWVicCswCi0lZGVmaW5lIHdrKGkpCQllYnAtKFdLX05VTS0oaSkpKlNJWkVPRl9NTVdPUkQJOyBtbXdvcmQgd2tbV0tfTlVNXQotJWRlZmluZSBXS19OVU0JCTgKLSVkZWZpbmUgZ290cHRyCQl3aygwKS1TSVpFT0ZfUE9JTlRFUgk7IHZvaWQgKiBnb3RwdHIKKyVkZWZpbmUgb3JpZ2luYWxfZWJwICAgIGVicCswCislZGVmaW5lIHdrKGkpICAgICAgICAgICBlYnAtKFdLX05VTS0oaSkpKlNJWkVPRl9NTVdPUkQgIDsgbW13b3JkIHdrW1dLX05VTV0KKyVkZWZpbmUgV0tfTlVNICAgICAgICAgIDgKKyVkZWZpbmUgZ290cHRyICAgICAgICAgIHdrKDApLVNJWkVPRl9QT0lOVEVSICAgIDsgdm9pZCAqIGdvdHB0cgogCi0JYWxpZ24JMTYKLQlnbG9iYWwJRVhUTihqc2ltZF9yZ2JfeWNjX2NvbnZlcnRfbW14KQorICAgICAgICBhbGlnbiAgIDE2CisgICAgICAgIGdsb2JhbCAgRVhUTihqc2ltZF9yZ2JfeWNjX2NvbnZlcnRfbW14KQogCiBFWFROKGpzaW1kX3JnYl95Y2NfY29udmVydF9tbXgpOgotCXB1c2gJZWJwCi0JbW92CWVheCxlc3AJCQkJOyBlYXggPSBvcmlnaW5hbCBlYnAKLQlzdWIJZXNwLCBieXRlIDQKLQlhbmQJZXNwLCBieXRlICgtU0laRU9GX01NV09SRCkJOyBhbGlnbiB0byA2NCBiaXRzCi0JbW92CVtlc3BdLGVheAotCW1vdgllYnAsZXNwCQkJCTsgZWJwID0gYWxpZ25lZCBlYnAKLQlsZWEJZXNwLCBbd2soMCldCi0JcHVzaHBpYwllYXgJCTsgbWFrZSBhIHJvb20gZm9yIEdPVCBhZGRyZXNzCi0JcHVzaAllYngKLTsJcHVzaAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi07CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotCXB1c2gJZXNpCi0JcHVzaAllZGkKKyAgICAgICAgcHVzaCAgICBlYnAKKyAgICAgICAgbW92ICAgICBlYXgsZXNwICAgICAgICAgICAgICAgICAgICAgICAgIDsgZWF4ID0gb3JpZ2luYWwgZWJwCisgICAgICAgIHN1YiAgICAgZXNwLCBieXRlIDQKKyAgICAgICAgYW5kICAgICBlc3AsIGJ5dGUgKC1TSVpFT0ZfTU1XT1JEKSAgICAgIDsgYWxpZ24gdG8gNjQgYml0cworICAgICAgICBtb3YgICAgIFtlc3BdLGVheAorICAgICAgICBtb3YgICAgIGVicCxlc3AgICAgICAgICAgICAgICAgICAgICAgICAgOyBlYnAgPSBhbGlnbmVkIGVicAorICAgICAgICBsZWEgICAgIGVzcCwgW3drKDApXQorICAgICAgICBwdXNocGljIGVheCAgICAgICAgICAgICA7IG1ha2UgYSByb29tIGZvciBHT1QgYWRkcmVzcworICAgICAgICBwdXNoICAgIGVieAorOyAgICAgICBwdXNoICAgIGVjeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgICAgICBwdXNoICAgIGVkeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgICAgICBwdXNoICAgIGVzaQorICAgICAgICBwdXNoICAgIGVkaQogCi0JZ2V0X0dPVAllYngJCQk7IGdldCBHT1QgYWRkcmVzcwotCW1vdnBpYwlQT0lOVEVSIFtnb3RwdHJdLCBlYngJOyBzYXZlIEdPVCBhZGRyZXNzCisgICAgICAgIGdldF9HT1QgZWJ4ICAgICAgICAgICAgICAgICAgICAgOyBnZXQgR09UIGFkZHJlc3MKKyAgICAgICAgbW92cGljICBQT0lOVEVSIFtnb3RwdHJdLCBlYnggICA7IHNhdmUgR09UIGFkZHJlc3MKIAotCW1vdgllY3gsIEpESU1FTlNJT04gW2ltZ193aWR0aChlYXgpXQk7IG51bV9jb2xzCi0JdGVzdAllY3gsZWN4Ci0JanoJbmVhciAucmV0dXJuCisgICAgICAgIG1vdiAgICAgZWN4LCBKRElNRU5TSU9OIFtpbWdfd2lkdGgoZWF4KV0gICAgICAgIDsgbnVtX2NvbHMKKyAgICAgICAgdGVzdCAgICBlY3gsZWN4CisgICAgICAgIGp6ICAgICAgbmVhciAucmV0dXJuCiAKLQlwdXNoCWVjeAorICAgICAgICBwdXNoICAgIGVjeAogCi0JbW92CWVzaSwgSlNBTVBJTUFHRSBbb3V0cHV0X2J1ZihlYXgpXQotCW1vdgllY3gsIEpESU1FTlNJT04gW291dHB1dF9yb3coZWF4KV0KLQltb3YJZWRpLCBKU0FNUEFSUkFZIFtlc2krMCpTSVpFT0ZfSlNBTVBBUlJBWV0KLQltb3YJZWJ4LCBKU0FNUEFSUkFZIFtlc2krMSpTSVpFT0ZfSlNBTVBBUlJBWV0KLQltb3YJZWR4LCBKU0FNUEFSUkFZIFtlc2krMipTSVpFT0ZfSlNBTVBBUlJBWV0KLQlsZWEJZWRpLCBbZWRpK2VjeCpTSVpFT0ZfSlNBTVBST1ddCi0JbGVhCWVieCwgW2VieCtlY3gqU0laRU9GX0pTQU1QUk9XXQotCWxlYQllZHgsIFtlZHgrZWN4KlNJWkVPRl9KU0FNUFJPV10KKyAgICAgICAgbW92ICAgICBlc2ksIEpTQU1QSU1BR0UgW291dHB1dF9idWYoZWF4KV0KKyAgICAgICAgbW92ICAgICBlY3gsIEpESU1FTlNJT04gW291dHB1dF9yb3coZWF4KV0KKyAgICAgICAgbW92ICAgICBlZGksIEpTQU1QQVJSQVkgW2VzaSswKlNJWkVPRl9KU0FNUEFSUkFZXQorICAgICAgICBtb3YgICAgIGVieCwgSlNBTVBBUlJBWSBbZXNpKzEqU0laRU9GX0pTQU1QQVJSQVldCisgICAgICAgIG1vdiAgICAgZWR4LCBKU0FNUEFSUkFZIFtlc2krMipTSVpFT0ZfSlNBTVBBUlJBWV0KKyAgICAgICAgbGVhICAgICBlZGksIFtlZGkrZWN4KlNJWkVPRl9KU0FNUFJPV10KKyAgICAgICAgbGVhICAgICBlYngsIFtlYngrZWN4KlNJWkVPRl9KU0FNUFJPV10KKyAgICAgICAgbGVhICAgICBlZHgsIFtlZHgrZWN4KlNJWkVPRl9KU0FNUFJPV10KIAotCXBvcAllY3gKKyAgICAgICAgcG9wICAgICBlY3gKIAotCW1vdgllc2ksIEpTQU1QQVJSQVkgW2lucHV0X2J1ZihlYXgpXQotCW1vdgllYXgsIElOVCBbbnVtX3Jvd3MoZWF4KV0KLQl0ZXN0CWVheCxlYXgKLQlqbGUJbmVhciAucmV0dXJuCi0JYWxpZ254CTE2LDcKKyAgICAgICAgbW92ICAgICBlc2ksIEpTQU1QQVJSQVkgW2lucHV0X2J1ZihlYXgpXQorICAgICAgICBtb3YgICAgIGVheCwgSU5UIFtudW1fcm93cyhlYXgpXQorICAgICAgICB0ZXN0ICAgIGVheCxlYXgKKyAgICAgICAgamxlICAgICBuZWFyIC5yZXR1cm4KKyAgICAgICAgYWxpZ254ICAxNiw3CiAucm93bG9vcDoKLQlwdXNocGljCWVheAotCXB1c2gJZWR4Ci0JcHVzaAllYngKLQlwdXNoCWVkaQotCXB1c2gJZXNpCi0JcHVzaAllY3gJCQk7IGNvbAorICAgICAgICBwdXNocGljIGVheAorICAgICAgICBwdXNoICAgIGVkeAorICAgICAgICBwdXNoICAgIGVieAorICAgICAgICBwdXNoICAgIGVkaQorICAgICAgICBwdXNoICAgIGVzaQorICAgICAgICBwdXNoICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgY29sCiAKLQltb3YJZXNpLCBKU0FNUFJPVyBbZXNpXQk7IGlucHRyCi0JbW92CWVkaSwgSlNBTVBST1cgW2VkaV0JOyBvdXRwdHIwCi0JbW92CWVieCwgSlNBTVBST1cgW2VieF0JOyBvdXRwdHIxCi0JbW92CWVkeCwgSlNBTVBST1cgW2VkeF0JOyBvdXRwdHIyCi0JbW92cGljCWVheCwgUE9JTlRFUiBbZ290cHRyXQk7IGxvYWQgR09UIGFkZHJlc3MgKGVheCkKKyAgICAgICAgbW92ICAgICBlc2ksIEpTQU1QUk9XIFtlc2ldICAgICA7IGlucHRyCisgICAgICAgIG1vdiAgICAgZWRpLCBKU0FNUFJPVyBbZWRpXSAgICAgOyBvdXRwdHIwCisgICAgICAgIG1vdiAgICAgZWJ4LCBKU0FNUFJPVyBbZWJ4XSAgICAgOyBvdXRwdHIxCisgICAgICAgIG1vdiAgICAgZWR4LCBKU0FNUFJPVyBbZWR4XSAgICAgOyBvdXRwdHIyCisgICAgICAgIG1vdnBpYyAgZWF4LCBQT0lOVEVSIFtnb3RwdHJdICAgOyBsb2FkIEdPVCBhZGRyZXNzIChlYXgpCiAKLQljbXAJZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQKLQlqYWUJc2hvcnQgLmNvbHVtbmxvb3AKLQlhbGlnbngJMTYsNworICAgICAgICBjbXAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECisgICAgICAgIGphZSAgICAgc2hvcnQgLmNvbHVtbmxvb3AKKyAgICAgICAgYWxpZ254ICAxNiw3CiAKICVpZiBSR0JfUElYRUxTSVpFID09IDMgOyAtLS0tLS0tLS0tLS0tLS0KIAogLmNvbHVtbl9sZDE6Ci0JcHVzaAllYXgKLQlwdXNoCWVkeAotCWxlYQllY3gsW2VjeCtlY3gqMl0JCTsgaW11bCBlY3gsUkdCX1BJWEVMU0laRQotCXRlc3QJY2wsIFNJWkVPRl9CWVRFCi0JanoJc2hvcnQgLmNvbHVtbl9sZDIKLQlzdWIJZWN4LCBieXRlIFNJWkVPRl9CWVRFCi0JeG9yCWVheCxlYXgKLQltb3YJYWwsIEJZVEUgW2VzaStlY3hdCisgICAgICAgIHB1c2ggICAgZWF4CisgICAgICAgIHB1c2ggICAgZWR4CisgICAgICAgIGxlYSAgICAgZWN4LFtlY3grZWN4KjJdICAgICAgICAgOyBpbXVsIGVjeCxSR0JfUElYRUxTSVpFCisgICAgICAgIHRlc3QgICAgY2wsIFNJWkVPRl9CWVRFCisgICAgICAgIGp6ICAgICAgc2hvcnQgLmNvbHVtbl9sZDIKKyAgICAgICAgc3ViICAgICBlY3gsIGJ5dGUgU0laRU9GX0JZVEUKKyAgICAgICAgeG9yICAgICBlYXgsZWF4CisgICAgICAgIG1vdiAgICAgYWwsIEJZVEUgW2VzaStlY3hdCiAuY29sdW1uX2xkMjoKLQl0ZXN0CWNsLCBTSVpFT0ZfV09SRAotCWp6CXNob3J0IC5jb2x1bW5fbGQ0Ci0Jc3ViCWVjeCwgYnl0ZSBTSVpFT0ZfV09SRAotCXhvcgllZHgsZWR4Ci0JbW92CWR4LCBXT1JEIFtlc2krZWN4XQotCXNobAllYXgsIFdPUkRfQklUCi0Jb3IJZWF4LGVkeAorICAgICAgICB0ZXN0ICAgIGNsLCBTSVpFT0ZfV09SRAorICAgICAgICBqeiAgICAgIHNob3J0IC5jb2x1bW5fbGQ0CisgICAgICAgIHN1YiAgICAgZWN4LCBieXRlIFNJWkVPRl9XT1JECisgICAgICAgIHhvciAgICAgZWR4LGVkeAorICAgICAgICBtb3YgICAgIGR4LCBXT1JEIFtlc2krZWN4XQorICAgICAgICBzaGwgICAgIGVheCwgV09SRF9CSVQKKyAgICAgICAgb3IgICAgICBlYXgsZWR4CiAuY29sdW1uX2xkNDoKLQltb3ZkCW1tQSxlYXgKLQlwb3AJZWR4Ci0JcG9wCWVheAotCXRlc3QJY2wsIFNJWkVPRl9EV09SRAotCWp6CXNob3J0IC5jb2x1bW5fbGQ4Ci0Jc3ViCWVjeCwgYnl0ZSBTSVpFT0ZfRFdPUkQKLQltb3ZkCW1tRywgRFdPUkQgW2VzaStlY3hdCi0JcHNsbHEJbW1BLCBEV09SRF9CSVQKLQlwb3IJbW1BLG1tRworICAgICAgICBtb3ZkICAgIG1tQSxlYXgKKyAgICAgICAgcG9wICAgICBlZHgKKyAgICAgICAgcG9wICAgICBlYXgKKyAgICAgICAgdGVzdCAgICBjbCwgU0laRU9GX0RXT1JECisgICAgICAgIGp6ICAgICAgc2hvcnQgLmNvbHVtbl9sZDgKKyAgICAgICAgc3ViICAgICBlY3gsIGJ5dGUgU0laRU9GX0RXT1JECisgICAgICAgIG1vdmQgICAgbW1HLCBEV09SRCBbZXNpK2VjeF0KKyAgICAgICAgcHNsbHEgICBtbUEsIERXT1JEX0JJVAorICAgICAgICBwb3IgICAgIG1tQSxtbUcKIC5jb2x1bW5fbGQ4OgotCXRlc3QJY2wsIFNJWkVPRl9NTVdPUkQKLQlqeglzaG9ydCAuY29sdW1uX2xkMTYKLQltb3ZxCW1tRyxtbUEKLQltb3ZxCW1tQSwgTU1XT1JEIFtlc2krMCpTSVpFT0ZfTU1XT1JEXQotCW1vdgllY3gsIFNJWkVPRl9NTVdPUkQKLQlqbXAJc2hvcnQgLnJnYl95Y2NfY252CisgICAgICAgIHRlc3QgICAgY2wsIFNJWkVPRl9NTVdPUkQKKyAgICAgICAganogICAgICBzaG9ydCAuY29sdW1uX2xkMTYKKyAgICAgICAgbW92cSAgICBtbUcsbW1BCisgICAgICAgIG1vdnEgICAgbW1BLCBNTVdPUkQgW2VzaSswKlNJWkVPRl9NTVdPUkRdCisgICAgICAgIG1vdiAgICAgZWN4LCBTSVpFT0ZfTU1XT1JECisgICAgICAgIGptcCAgICAgc2hvcnQgLnJnYl95Y2NfY252CiAuY29sdW1uX2xkMTY6Ci0JdGVzdAljbCwgMipTSVpFT0ZfTU1XT1JECi0JbW92CWVjeCwgU0laRU9GX01NV09SRAotCWp6CXNob3J0IC5yZ2JfeWNjX2NudgotCW1vdnEJbW1GLG1tQQotCW1vdnEJbW1BLCBNTVdPUkQgW2VzaSswKlNJWkVPRl9NTVdPUkRdCi0JbW92cQltbUcsIE1NV09SRCBbZXNpKzEqU0laRU9GX01NV09SRF0KLQlqbXAJc2hvcnQgLnJnYl95Y2NfY252Ci0JYWxpZ254CTE2LDcKKyAgICAgICAgdGVzdCAgICBjbCwgMipTSVpFT0ZfTU1XT1JECisgICAgICAgIG1vdiAgICAgZWN4LCBTSVpFT0ZfTU1XT1JECisgICAgICAgIGp6ICAgICAgc2hvcnQgLnJnYl95Y2NfY252CisgICAgICAgIG1vdnEgICAgbW1GLG1tQQorICAgICAgICBtb3ZxICAgIG1tQSwgTU1XT1JEIFtlc2krMCpTSVpFT0ZfTU1XT1JEXQorICAgICAgICBtb3ZxICAgIG1tRywgTU1XT1JEIFtlc2krMSpTSVpFT0ZfTU1XT1JEXQorICAgICAgICBqbXAgICAgIHNob3J0IC5yZ2JfeWNjX2NudgorICAgICAgICBhbGlnbnggIDE2LDcKIAogLmNvbHVtbmxvb3A6Ci0JbW92cQltbUEsIE1NV09SRCBbZXNpKzAqU0laRU9GX01NV09SRF0KLQltb3ZxCW1tRywgTU1XT1JEIFtlc2krMSpTSVpFT0ZfTU1XT1JEXQotCW1vdnEJbW1GLCBNTVdPUkQgW2VzaSsyKlNJWkVPRl9NTVdPUkRdCisgICAgICAgIG1vdnEgICAgbW1BLCBNTVdPUkQgW2VzaSswKlNJWkVPRl9NTVdPUkRdCisgICAgICAgIG1vdnEgICAgbW1HLCBNTVdPUkQgW2VzaSsxKlNJWkVPRl9NTVdPUkRdCisgICAgICAgIG1vdnEgICAgbW1GLCBNTVdPUkQgW2VzaSsyKlNJWkVPRl9NTVdPUkRdCiAKIC5yZ2JfeWNjX2NudjoKLQk7IG1tQT0oMDAgMTAgMjAgMDEgMTEgMjEgMDIgMTIpCi0JOyBtbUc9KDIyIDAzIDEzIDIzIDA0IDE0IDI0IDA1KQotCTsgbW1GPSgxNSAyNSAwNiAxNiAyNiAwNyAxNyAyNykKKyAgICAgICAgOyBtbUE9KDAwIDEwIDIwIDAxIDExIDIxIDAyIDEyKQorICAgICAgICA7IG1tRz0oMjIgMDMgMTMgMjMgMDQgMTQgMjQgMDUpCisgICAgICAgIDsgbW1GPSgxNSAyNSAwNiAxNiAyNiAwNyAxNyAyNykKIAotCW1vdnEgICAgICBtbUQsbW1BCi0JcHNsbHEgICAgIG1tQSw0KkJZVEVfQklUCTsgbW1BPSgtLSAtLSAtLSAtLSAwMCAxMCAyMCAwMSkKLQlwc3JscSAgICAgbW1ELDQqQllURV9CSVQJOyBtbUQ9KDExIDIxIDAyIDEyIC0tIC0tIC0tIC0tKQorICAgICAgICBtb3ZxICAgICAgbW1ELG1tQQorICAgICAgICBwc2xscSAgICAgbW1BLDQqQllURV9CSVQgICAgICAgIDsgbW1BPSgtLSAtLSAtLSAtLSAwMCAxMCAyMCAwMSkKKyAgICAgICAgcHNybHEgICAgIG1tRCw0KkJZVEVfQklUICAgICAgICA7IG1tRD0oMTEgMjEgMDIgMTIgLS0gLS0gLS0gLS0pCiAKLQlwdW5wY2toYncgbW1BLG1tRwkJOyBtbUE9KDAwIDA0IDEwIDE0IDIwIDI0IDAxIDA1KQotCXBzbGxxICAgICBtbUcsNCpCWVRFX0JJVAk7IG1tRz0oLS0gLS0gLS0gLS0gMjIgMDMgMTMgMjMpCisgICAgICAgIHB1bnBja2hidyBtbUEsbW1HICAgICAgICAgICAgICAgOyBtbUE9KDAwIDA0IDEwIDE0IDIwIDI0IDAxIDA1KQorICAgICAgICBwc2xscSAgICAgbW1HLDQqQllURV9CSVQgICAgICAgIDsgbW1HPSgtLSAtLSAtLSAtLSAyMiAwMyAxMyAyMykKIAotCXB1bnBja2xidyBtbUQsbW1GCQk7IG1tRD0oMTEgMTUgMjEgMjUgMDIgMDYgMTIgMTYpCi0JcHVucGNraGJ3IG1tRyxtbUYJCTsgbW1HPSgyMiAyNiAwMyAwNyAxMyAxNyAyMyAyNykKKyAgICAgICAgcHVucGNrbGJ3IG1tRCxtbUYgICAgICAgICAgICAgICA7IG1tRD0oMTEgMTUgMjEgMjUgMDIgMDYgMTIgMTYpCisgICAgICAgIHB1bnBja2hidyBtbUcsbW1GICAgICAgICAgICAgICAgOyBtbUc9KDIyIDI2IDAzIDA3IDEzIDE3IDIzIDI3KQogCi0JbW92cSAgICAgIG1tRSxtbUEKLQlwc2xscSAgICAgbW1BLDQqQllURV9CSVQJOyBtbUE9KC0tIC0tIC0tIC0tIDAwIDA0IDEwIDE0KQotCXBzcmxxICAgICBtbUUsNCpCWVRFX0JJVAk7IG1tRT0oMjAgMjQgMDEgMDUgLS0gLS0gLS0gLS0pCisgICAgICAgIG1vdnEgICAgICBtbUUsbW1BCisgICAgICAgIHBzbGxxICAgICBtbUEsNCpCWVRFX0JJVCAgICAgICAgOyBtbUE9KC0tIC0tIC0tIC0tIDAwIDA0IDEwIDE0KQorICAgICAgICBwc3JscSAgICAgbW1FLDQqQllURV9CSVQgICAgICAgIDsgbW1FPSgyMCAyNCAwMSAwNSAtLSAtLSAtLSAtLSkKIAotCXB1bnBja2hidyBtbUEsbW1ECQk7IG1tQT0oMDAgMDIgMDQgMDYgMTAgMTIgMTQgMTYpCi0JcHNsbHEgICAgIG1tRCw0KkJZVEVfQklUCTsgbW1EPSgtLSAtLSAtLSAtLSAxMSAxNSAyMSAyNSkKKyAgICAgICAgcHVucGNraGJ3IG1tQSxtbUQgICAgICAgICAgICAgICA7IG1tQT0oMDAgMDIgMDQgMDYgMTAgMTIgMTQgMTYpCisgICAgICAgIHBzbGxxICAgICBtbUQsNCpCWVRFX0JJVCAgICAgICAgOyBtbUQ9KC0tIC0tIC0tIC0tIDExIDE1IDIxIDI1KQogCi0JcHVucGNrbGJ3IG1tRSxtbUcJCTsgbW1FPSgyMCAyMiAyNCAyNiAwMSAwMyAwNSAwNykKLQlwdW5wY2toYncgbW1ELG1tRwkJOyBtbUQ9KDExIDEzIDE1IDE3IDIxIDIzIDI1IDI3KQorICAgICAgICBwdW5wY2tsYncgbW1FLG1tRyAgICAgICAgICAgICAgIDsgbW1FPSgyMCAyMiAyNCAyNiAwMSAwMyAwNSAwNykKKyAgICAgICAgcHVucGNraGJ3IG1tRCxtbUcgICAgICAgICAgICAgICA7IG1tRD0oMTEgMTMgMTUgMTcgMjEgMjMgMjUgMjcpCiAKLQlweG9yICAgICAgbW1ILG1tSAorICAgICAgICBweG9yICAgICAgbW1ILG1tSAogCi0JbW92cSAgICAgIG1tQyxtbUEKLQlwdW5wY2tsYncgbW1BLG1tSAkJOyBtbUE9KDAwIDAyIDA0IDA2KQotCXB1bnBja2hidyBtbUMsbW1ICQk7IG1tQz0oMTAgMTIgMTQgMTYpCisgICAgICAgIG1vdnEgICAgICBtbUMsbW1BCisgICAgICAgIHB1bnBja2xidyBtbUEsbW1IICAgICAgICAgICAgICAgOyBtbUE9KDAwIDAyIDA0IDA2KQorICAgICAgICBwdW5wY2toYncgbW1DLG1tSCAgICAgICAgICAgICAgIDsgbW1DPSgxMCAxMiAxNCAxNikKIAotCW1vdnEgICAgICBtbUIsbW1FCi0JcHVucGNrbGJ3IG1tRSxtbUgJCTsgbW1FPSgyMCAyMiAyNCAyNikKLQlwdW5wY2toYncgbW1CLG1tSAkJOyBtbUI9KDAxIDAzIDA1IDA3KQorICAgICAgICBtb3ZxICAgICAgbW1CLG1tRQorICAgICAgICBwdW5wY2tsYncgbW1FLG1tSCAgICAgICAgICAgICAgIDsgbW1FPSgyMCAyMiAyNCAyNikKKyAgICAgICAgcHVucGNraGJ3IG1tQixtbUggICAgICAgICAgICAgICA7IG1tQj0oMDEgMDMgMDUgMDcpCiAKLQltb3ZxICAgICAgbW1GLG1tRAotCXB1bnBja2xidyBtbUQsbW1ICQk7IG1tRD0oMTEgMTMgMTUgMTcpCi0JcHVucGNraGJ3IG1tRixtbUgJCTsgbW1GPSgyMSAyMyAyNSAyNykKKyAgICAgICAgbW92cSAgICAgIG1tRixtbUQKKyAgICAgICAgcHVucGNrbGJ3IG1tRCxtbUggICAgICAgICAgICAgICA7IG1tRD0oMTEgMTMgMTUgMTcpCisgICAgICAgIHB1bnBja2hidyBtbUYsbW1IICAgICAgICAgICAgICAgOyBtbUY9KDIxIDIzIDI1IDI3KQogCiAlZWxzZSA7IFJHQl9QSVhFTFNJWkUgPT0gNCA7IC0tLS0tLS0tLS0tCiAKIC5jb2x1bW5fbGQxOgotCXRlc3QJY2wsIFNJWkVPRl9NTVdPUkQvOAotCWp6CXNob3J0IC5jb2x1bW5fbGQyCi0Jc3ViCWVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JELzgKLQltb3ZkCW1tQSwgRFdPUkQgW2VzaStlY3gqUkdCX1BJWEVMU0laRV0KKyAgICAgICAgdGVzdCAgICBjbCwgU0laRU9GX01NV09SRC84CisgICAgICAgIGp6ICAgICAgc2hvcnQgLmNvbHVtbl9sZDIKKyAgICAgICAgc3ViICAgICBlY3gsIGJ5dGUgU0laRU9GX01NV09SRC84CisgICAgICAgIG1vdmQgICAgbW1BLCBEV09SRCBbZXNpK2VjeCpSR0JfUElYRUxTSVpFXQogLmNvbHVtbl9sZDI6Ci0JdGVzdAljbCwgU0laRU9GX01NV09SRC80Ci0JanoJc2hvcnQgLmNvbHVtbl9sZDQKLQlzdWIJZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQvNAotCW1vdnEJbW1GLG1tQQotCW1vdnEJbW1BLCBNTVdPUkQgW2VzaStlY3gqUkdCX1BJWEVMU0laRV0KKyAgICAgICAgdGVzdCAgICBjbCwgU0laRU9GX01NV09SRC80CisgICAgICAgIGp6ICAgICAgc2hvcnQgLmNvbHVtbl9sZDQKKyAgICAgICAgc3ViICAgICBlY3gsIGJ5dGUgU0laRU9GX01NV09SRC80CisgICAgICAgIG1vdnEgICAgbW1GLG1tQQorICAgICAgICBtb3ZxICAgIG1tQSwgTU1XT1JEIFtlc2krZWN4KlJHQl9QSVhFTFNJWkVdCiAuY29sdW1uX2xkNDoKLQl0ZXN0CWNsLCBTSVpFT0ZfTU1XT1JELzIKLQltb3YJZWN4LCBTSVpFT0ZfTU1XT1JECi0JanoJc2hvcnQgLnJnYl95Y2NfY252Ci0JbW92cQltbUQsbW1BCi0JbW92cQltbUMsbW1GCi0JbW92cQltbUEsIE1NV09SRCBbZXNpKzAqU0laRU9GX01NV09SRF0KLQltb3ZxCW1tRiwgTU1XT1JEIFtlc2krMSpTSVpFT0ZfTU1XT1JEXQotCWptcAlzaG9ydCAucmdiX3ljY19jbnYKLQlhbGlnbngJMTYsNworICAgICAgICB0ZXN0ICAgIGNsLCBTSVpFT0ZfTU1XT1JELzIKKyAgICAgICAgbW92ICAgICBlY3gsIFNJWkVPRl9NTVdPUkQKKyAgICAgICAganogICAgICBzaG9ydCAucmdiX3ljY19jbnYKKyAgICAgICAgbW92cSAgICBtbUQsbW1BCisgICAgICAgIG1vdnEgICAgbW1DLG1tRgorICAgICAgICBtb3ZxICAgIG1tQSwgTU1XT1JEIFtlc2krMCpTSVpFT0ZfTU1XT1JEXQorICAgICAgICBtb3ZxICAgIG1tRiwgTU1XT1JEIFtlc2krMSpTSVpFT0ZfTU1XT1JEXQorICAgICAgICBqbXAgICAgIHNob3J0IC5yZ2JfeWNjX2NudgorICAgICAgICBhbGlnbnggIDE2LDcKIAogLmNvbHVtbmxvb3A6Ci0JbW92cQltbUEsIE1NV09SRCBbZXNpKzAqU0laRU9GX01NV09SRF0KLQltb3ZxCW1tRiwgTU1XT1JEIFtlc2krMSpTSVpFT0ZfTU1XT1JEXQotCW1vdnEJbW1ELCBNTVdPUkQgW2VzaSsyKlNJWkVPRl9NTVdPUkRdCi0JbW92cQltbUMsIE1NV09SRCBbZXNpKzMqU0laRU9GX01NV09SRF0KKyAgICAgICAgbW92cSAgICBtbUEsIE1NV09SRCBbZXNpKzAqU0laRU9GX01NV09SRF0KKyAgICAgICAgbW92cSAgICBtbUYsIE1NV09SRCBbZXNpKzEqU0laRU9GX01NV09SRF0KKyAgICAgICAgbW92cSAgICBtbUQsIE1NV09SRCBbZXNpKzIqU0laRU9GX01NV09SRF0KKyAgICAgICAgbW92cSAgICBtbUMsIE1NV09SRCBbZXNpKzMqU0laRU9GX01NV09SRF0KIAogLnJnYl95Y2NfY252OgotCTsgbW1BPSgwMCAxMCAyMCAzMCAwMSAxMSAyMSAzMSkKLQk7IG1tRj0oMDIgMTIgMjIgMzIgMDMgMTMgMjMgMzMpCi0JOyBtbUQ9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1KQotCTsgbW1DPSgwNiAxNiAyNiAzNiAwNyAxNyAyNyAzNykKKyAgICAgICAgOyBtbUE9KDAwIDEwIDIwIDMwIDAxIDExIDIxIDMxKQorICAgICAgICA7IG1tRj0oMDIgMTIgMjIgMzIgMDMgMTMgMjMgMzMpCisgICAgICAgIDsgbW1EPSgwNCAxNCAyNCAzNCAwNSAxNSAyNSAzNSkKKyAgICAgICAgOyBtbUM9KDA2IDE2IDI2IDM2IDA3IDE3IDI3IDM3KQogCi0JbW92cSAgICAgIG1tQixtbUEKLQlwdW5wY2tsYncgbW1BLG1tRgkJOyBtbUE9KDAwIDAyIDEwIDEyIDIwIDIyIDMwIDMyKQotCXB1bnBja2hidyBtbUIsbW1GCQk7IG1tQj0oMDEgMDMgMTEgMTMgMjEgMjMgMzEgMzMpCisgICAgICAgIG1vdnEgICAgICBtbUIsbW1BCisgICAgICAgIHB1bnBja2xidyBtbUEsbW1GICAgICAgICAgICAgICAgOyBtbUE9KDAwIDAyIDEwIDEyIDIwIDIyIDMwIDMyKQorICAgICAgICBwdW5wY2toYncgbW1CLG1tRiAgICAgICAgICAgICAgIDsgbW1CPSgwMSAwMyAxMSAxMyAyMSAyMyAzMSAzMykKIAotCW1vdnEgICAgICBtbUcsbW1ECi0JcHVucGNrbGJ3IG1tRCxtbUMJCTsgbW1EPSgwNCAwNiAxNCAxNiAyNCAyNiAzNCAzNikKLQlwdW5wY2toYncgbW1HLG1tQwkJOyBtbUc9KDA1IDA3IDE1IDE3IDI1IDI3IDM1IDM3KQorICAgICAgICBtb3ZxICAgICAgbW1HLG1tRAorICAgICAgICBwdW5wY2tsYncgbW1ELG1tQyAgICAgICAgICAgICAgIDsgbW1EPSgwNCAwNiAxNCAxNiAyNCAyNiAzNCAzNikKKyAgICAgICAgcHVucGNraGJ3IG1tRyxtbUMgICAgICAgICAgICAgICA7IG1tRz0oMDUgMDcgMTUgMTcgMjUgMjcgMzUgMzcpCiAKLQltb3ZxICAgICAgbW1FLG1tQQotCXB1bnBja2x3ZCBtbUEsbW1ECQk7IG1tQT0oMDAgMDIgMDQgMDYgMTAgMTIgMTQgMTYpCi0JcHVucGNraHdkIG1tRSxtbUQJCTsgbW1FPSgyMCAyMiAyNCAyNiAzMCAzMiAzNCAzNikKKyAgICAgICAgbW92cSAgICAgIG1tRSxtbUEKKyAgICAgICAgcHVucGNrbHdkIG1tQSxtbUQgICAgICAgICAgICAgICA7IG1tQT0oMDAgMDIgMDQgMDYgMTAgMTIgMTQgMTYpCisgICAgICAgIHB1bnBja2h3ZCBtbUUsbW1EICAgICAgICAgICAgICAgOyBtbUU9KDIwIDIyIDI0IDI2IDMwIDMyIDM0IDM2KQogCi0JbW92cSAgICAgIG1tSCxtbUIKLQlwdW5wY2tsd2QgbW1CLG1tRwkJOyBtbUI9KDAxIDAzIDA1IDA3IDExIDEzIDE1IDE3KQotCXB1bnBja2h3ZCBtbUgsbW1HCQk7IG1tSD0oMjEgMjMgMjUgMjcgMzEgMzMgMzUgMzcpCisgICAgICAgIG1vdnEgICAgICBtbUgsbW1CCisgICAgICAgIHB1bnBja2x3ZCBtbUIsbW1HICAgICAgICAgICAgICAgOyBtbUI9KDAxIDAzIDA1IDA3IDExIDEzIDE1IDE3KQorICAgICAgICBwdW5wY2tod2QgbW1ILG1tRyAgICAgICAgICAgICAgIDsgbW1IPSgyMSAyMyAyNSAyNyAzMSAzMyAzNSAzNykKIAotCXB4b3IgICAgICBtbUYsbW1GCisgICAgICAgIHB4b3IgICAgICBtbUYsbW1GCiAKLQltb3ZxICAgICAgbW1DLG1tQQotCXB1bnBja2xidyBtbUEsbW1GCQk7IG1tQT0oMDAgMDIgMDQgMDYpCi0JcHVucGNraGJ3IG1tQyxtbUYJCTsgbW1DPSgxMCAxMiAxNCAxNikKKyAgICAgICAgbW92cSAgICAgIG1tQyxtbUEKKyAgICAgICAgcHVucGNrbGJ3IG1tQSxtbUYgICAgICAgICAgICAgICA7IG1tQT0oMDAgMDIgMDQgMDYpCisgICAgICAgIHB1bnBja2hidyBtbUMsbW1GICAgICAgICAgICAgICAgOyBtbUM9KDEwIDEyIDE0IDE2KQogCi0JbW92cSAgICAgIG1tRCxtbUIKLQlwdW5wY2tsYncgbW1CLG1tRgkJOyBtbUI9KDAxIDAzIDA1IDA3KQotCXB1bnBja2hidyBtbUQsbW1GCQk7IG1tRD0oMTEgMTMgMTUgMTcpCisgICAgICAgIG1vdnEgICAgICBtbUQsbW1CCisgICAgICAgIHB1bnBja2xidyBtbUIsbW1GICAgICAgICAgICAgICAgOyBtbUI9KDAxIDAzIDA1IDA3KQorICAgICAgICBwdW5wY2toYncgbW1ELG1tRiAgICAgICAgICAgICAgIDsgbW1EPSgxMSAxMyAxNSAxNykKIAotCW1vdnEgICAgICBtbUcsbW1FCi0JcHVucGNrbGJ3IG1tRSxtbUYJCTsgbW1FPSgyMCAyMiAyNCAyNikKLQlwdW5wY2toYncgbW1HLG1tRgkJOyBtbUc9KDMwIDMyIDM0IDM2KQorICAgICAgICBtb3ZxICAgICAgbW1HLG1tRQorICAgICAgICBwdW5wY2tsYncgbW1FLG1tRiAgICAgICAgICAgICAgIDsgbW1FPSgyMCAyMiAyNCAyNikKKyAgICAgICAgcHVucGNraGJ3IG1tRyxtbUYgICAgICAgICAgICAgICA7IG1tRz0oMzAgMzIgMzQgMzYpCiAKLQlwdW5wY2tsYncgbW1GLG1tSAotCXB1bnBja2hidyBtbUgsbW1ICi0JcHNybHcgICAgIG1tRixCWVRFX0JJVAkJOyBtbUY9KDIxIDIzIDI1IDI3KQotCXBzcmx3ICAgICBtbUgsQllURV9CSVQJCTsgbW1IPSgzMSAzMyAzNSAzNykKKyAgICAgICAgcHVucGNrbGJ3IG1tRixtbUgKKyAgICAgICAgcHVucGNraGJ3IG1tSCxtbUgKKyAgICAgICAgcHNybHcgICAgIG1tRixCWVRFX0JJVCAgICAgICAgICA7IG1tRj0oMjEgMjMgMjUgMjcpCisgICAgICAgIHBzcmx3ICAgICBtbUgsQllURV9CSVQgICAgICAgICAgOyBtbUg9KDMxIDMzIDM1IDM3KQogCiAlZW5kaWYgOyBSR0JfUElYRUxTSVpFIDsgLS0tLS0tLS0tLS0tLS0tCiAKLQk7IG1tMD0oUjAgUjIgUjQgUjYpPVJFLCBtbTI9KEcwIEcyIEc0IEc2KT1HRSwgbW00PShCMCBCMiBCNCBCNik9QkUKLQk7IG1tMT0oUjEgUjMgUjUgUjcpPVJPLCBtbTM9KEcxIEczIEc1IEc3KT1HTywgbW01PShCMSBCMyBCNSBCNyk9Qk8KKyAgICAgICAgOyBtbTA9KFIwIFIyIFI0IFI2KT1SRSwgbW0yPShHMCBHMiBHNCBHNik9R0UsIG1tND0oQjAgQjIgQjQgQjYpPUJFCisgICAgICAgIDsgbW0xPShSMSBSMyBSNSBSNyk9Uk8sIG1tMz0oRzEgRzMgRzUgRzcpPUdPLCBtbTU9KEIxIEIzIEI1IEI3KT1CTwogCi0JOyAoT3JpZ2luYWwpCi0JOyBZICA9ICAwLjI5OTAwICogUiArIDAuNTg3MDAgKiBHICsgMC4xMTQwMCAqIEIKLQk7IENiID0gLTAuMTY4NzQgKiBSIC0gMC4zMzEyNiAqIEcgKyAwLjUwMDAwICogQiArIENFTlRFUkpTQU1QTEUKLQk7IENyID0gIDAuNTAwMDAgKiBSIC0gMC40MTg2OSAqIEcgLSAwLjA4MTMxICogQiArIENFTlRFUkpTQU1QTEUKLQk7Ci0JOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKLQk7IFkgID0gIDAuMjk5MDAgKiBSICsgMC4zMzcwMCAqIEcgKyAwLjExNDAwICogQiArIDAuMjUwMDAgKiBHCi0JOyBDYiA9IC0wLjE2ODc0ICogUiAtIDAuMzMxMjYgKiBHICsgMC41MDAwMCAqIEIgKyBDRU5URVJKU0FNUExFCi0JOyBDciA9ICAwLjUwMDAwICogUiAtIDAuNDE4NjkgKiBHIC0gMC4wODEzMSAqIEIgKyBDRU5URVJKU0FNUExFCisgICAgICAgIDsgKE9yaWdpbmFsKQorICAgICAgICA7IFkgID0gIDAuMjk5MDAgKiBSICsgMC41ODcwMCAqIEcgKyAwLjExNDAwICogQgorICAgICAgICA7IENiID0gLTAuMTY4NzQgKiBSIC0gMC4zMzEyNiAqIEcgKyAwLjUwMDAwICogQiArIENFTlRFUkpTQU1QTEUKKyAgICAgICAgOyBDciA9ICAwLjUwMDAwICogUiAtIDAuNDE4NjkgKiBHIC0gMC4wODEzMSAqIEIgKyBDRU5URVJKU0FNUExFCisgICAgICAgIDsKKyAgICAgICAgOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKyAgICAgICAgOyBZICA9ICAwLjI5OTAwICogUiArIDAuMzM3MDAgKiBHICsgMC4xMTQwMCAqIEIgKyAwLjI1MDAwICogRworICAgICAgICA7IENiID0gLTAuMTY4NzQgKiBSIC0gMC4zMzEyNiAqIEcgKyAwLjUwMDAwICogQiArIENFTlRFUkpTQU1QTEUKKyAgICAgICAgOyBDciA9ICAwLjUwMDAwICogUiAtIDAuNDE4NjkgKiBHIC0gMC4wODEzMSAqIEIgKyBDRU5URVJKU0FNUExFCiAKLQltb3ZxICAgICAgTU1XT1JEIFt3aygwKV0sIG1tMAk7IHdrKDApPVJFCi0JbW92cSAgICAgIE1NV09SRCBbd2soMSldLCBtbTEJOyB3aygxKT1STwotCW1vdnEgICAgICBNTVdPUkQgW3drKDIpXSwgbW00CTsgd2soMik9QkUKLQltb3ZxICAgICAgTU1XT1JEIFt3aygzKV0sIG1tNQk7IHdrKDMpPUJPCisgICAgICAgIG1vdnEgICAgICBNTVdPUkQgW3drKDApXSwgbW0wICAgOyB3aygwKT1SRQorICAgICAgICBtb3ZxICAgICAgTU1XT1JEIFt3aygxKV0sIG1tMSAgIDsgd2soMSk9Uk8KKyAgICAgICAgbW92cSAgICAgIE1NV09SRCBbd2soMildLCBtbTQgICA7IHdrKDIpPUJFCisgICAgICAgIG1vdnEgICAgICBNTVdPUkQgW3drKDMpXSwgbW01ICAgOyB3aygzKT1CTwogCi0JbW92cSAgICAgIG1tNixtbTEKLQlwdW5wY2tsd2QgbW0xLG1tMwotCXB1bnBja2h3ZCBtbTYsbW0zCi0JbW92cSAgICAgIG1tNyxtbTEKLQltb3ZxICAgICAgbW00LG1tNgotCXBtYWRkd2QgICBtbTEsW0dPVE9GRihlYXgsUFdfRjAyOTlfRjAzMzcpXSA7IG1tMT1ST0wqRklYKDAuMjk5KStHT0wqRklYKDAuMzM3KQotCXBtYWRkd2QgICBtbTYsW0dPVE9GRihlYXgsUFdfRjAyOTlfRjAzMzcpXSA7IG1tNj1ST0gqRklYKDAuMjk5KStHT0gqRklYKDAuMzM3KQotCXBtYWRkd2QgICBtbTcsW0dPVE9GRihlYXgsUFdfTUYwMTZfTUYwMzMpXSA7IG1tNz1ST0wqLUZJWCgwLjE2OCkrR09MKi1GSVgoMC4zMzEpCi0JcG1hZGR3ZCAgIG1tNCxbR09UT0ZGKGVheCxQV19NRjAxNl9NRjAzMyldIDsgbW00PVJPSCotRklYKDAuMTY4KStHT0gqLUZJWCgwLjMzMSkKKyAgICAgICAgbW92cSAgICAgIG1tNixtbTEKKyAgICAgICAgcHVucGNrbHdkIG1tMSxtbTMKKyAgICAgICAgcHVucGNraHdkIG1tNixtbTMKKyAgICAgICAgbW92cSAgICAgIG1tNyxtbTEKKyAgICAgICAgbW92cSAgICAgIG1tNCxtbTYKKyAgICAgICAgcG1hZGR3ZCAgIG1tMSxbR09UT0ZGKGVheCxQV19GMDI5OV9GMDMzNyldIDsgbW0xPVJPTCpGSVgoMC4yOTkpK0dPTCpGSVgoMC4zMzcpCisgICAgICAgIHBtYWRkd2QgICBtbTYsW0dPVE9GRihlYXgsUFdfRjAyOTlfRjAzMzcpXSA7IG1tNj1ST0gqRklYKDAuMjk5KStHT0gqRklYKDAuMzM3KQorICAgICAgICBwbWFkZHdkICAgbW03LFtHT1RPRkYoZWF4LFBXX01GMDE2X01GMDMzKV0gOyBtbTc9Uk9MKi1GSVgoMC4xNjgpK0dPTCotRklYKDAuMzMxKQorICAgICAgICBwbWFkZHdkICAgbW00LFtHT1RPRkYoZWF4LFBXX01GMDE2X01GMDMzKV0gOyBtbTQ9Uk9IKi1GSVgoMC4xNjgpK0dPSCotRklYKDAuMzMxKQogCi0JbW92cSAgICAgIE1NV09SRCBbd2soNCldLCBtbTEJOyB3ayg0KT1ST0wqRklYKDAuMjk5KStHT0wqRklYKDAuMzM3KQotCW1vdnEgICAgICBNTVdPUkQgW3drKDUpXSwgbW02CTsgd2soNSk9Uk9IKkZJWCgwLjI5OSkrR09IKkZJWCgwLjMzNykKKyAgICAgICAgbW92cSAgICAgIE1NV09SRCBbd2soNCldLCBtbTEgICA7IHdrKDQpPVJPTCpGSVgoMC4yOTkpK0dPTCpGSVgoMC4zMzcpCisgICAgICAgIG1vdnEgICAgICBNTVdPUkQgW3drKDUpXSwgbW02ICAgOyB3ayg1KT1ST0gqRklYKDAuMjk5KStHT0gqRklYKDAuMzM3KQogCi0JcHhvciAgICAgIG1tMSxtbTEKLQlweG9yICAgICAgbW02LG1tNgotCXB1bnBja2x3ZCBtbTEsbW01CQk7IG1tMT1CT0wKLQlwdW5wY2tod2QgbW02LG1tNQkJOyBtbTY9Qk9ICi0JcHNybGQgICAgIG1tMSwxCQkJOyBtbTE9Qk9MKkZJWCgwLjUwMCkKLQlwc3JsZCAgICAgbW02LDEJCQk7IG1tNj1CT0gqRklYKDAuNTAwKQorICAgICAgICBweG9yICAgICAgbW0xLG1tMQorICAgICAgICBweG9yICAgICAgbW02LG1tNgorICAgICAgICBwdW5wY2tsd2QgbW0xLG1tNSAgICAgICAgICAgICAgIDsgbW0xPUJPTAorICAgICAgICBwdW5wY2tod2QgbW02LG1tNSAgICAgICAgICAgICAgIDsgbW02PUJPSAorICAgICAgICBwc3JsZCAgICAgbW0xLDEgICAgICAgICAgICAgICAgIDsgbW0xPUJPTCpGSVgoMC41MDApCisgICAgICAgIHBzcmxkICAgICBtbTYsMSAgICAgICAgICAgICAgICAgOyBtbTY9Qk9IKkZJWCgwLjUwMCkKIAotCW1vdnEgICAgICBtbTUsW0dPVE9GRihlYXgsUERfT05FSEFMRk0xX0NKKV0gOyBtbTU9W1BEX09ORUhBTEZNMV9DSl0KKyAgICAgICAgbW92cSAgICAgIG1tNSxbR09UT0ZGKGVheCxQRF9PTkVIQUxGTTFfQ0opXSA7IG1tNT1bUERfT05FSEFMRk0xX0NKXQogCi0JcGFkZGQgICAgIG1tNyxtbTEKLQlwYWRkZCAgICAgbW00LG1tNgotCXBhZGRkICAgICBtbTcsbW01Ci0JcGFkZGQgICAgIG1tNCxtbTUKLQlwc3JsZCAgICAgbW03LFNDQUxFQklUUwkJOyBtbTc9Q2JPTAotCXBzcmxkICAgICBtbTQsU0NBTEVCSVRTCQk7IG1tND1DYk9ICi0JcGFja3NzZHcgIG1tNyxtbTQJCTsgbW03PUNiTworICAgICAgICBwYWRkZCAgICAgbW03LG1tMQorICAgICAgICBwYWRkZCAgICAgbW00LG1tNgorICAgICAgICBwYWRkZCAgICAgbW03LG1tNQorICAgICAgICBwYWRkZCAgICAgbW00LG1tNQorICAgICAgICBwc3JsZCAgICAgbW03LFNDQUxFQklUUyAgICAgICAgIDsgbW03PUNiT0wKKyAgICAgICAgcHNybGQgICAgIG1tNCxTQ0FMRUJJVFMgICAgICAgICA7IG1tND1DYk9ICisgICAgICAgIHBhY2tzc2R3ICBtbTcsbW00ICAgICAgICAgICAgICAgOyBtbTc9Q2JPCiAKLQltb3ZxICAgICAgbW0xLCBNTVdPUkQgW3drKDIpXQk7IG1tMT1CRQorICAgICAgICBtb3ZxICAgICAgbW0xLCBNTVdPUkQgW3drKDIpXSAgIDsgbW0xPUJFCiAKLQltb3ZxICAgICAgbW02LG1tMAotCXB1bnBja2x3ZCBtbTAsbW0yCi0JcHVucGNraHdkIG1tNixtbTIKLQltb3ZxICAgICAgbW01LG1tMAotCW1vdnEgICAgICBtbTQsbW02Ci0JcG1hZGR3ZCAgIG1tMCxbR09UT0ZGKGVheCxQV19GMDI5OV9GMDMzNyldIDsgbW0wPVJFTCpGSVgoMC4yOTkpK0dFTCpGSVgoMC4zMzcpCi0JcG1hZGR3ZCAgIG1tNixbR09UT0ZGKGVheCxQV19GMDI5OV9GMDMzNyldIDsgbW02PVJFSCpGSVgoMC4yOTkpK0dFSCpGSVgoMC4zMzcpCi0JcG1hZGR3ZCAgIG1tNSxbR09UT0ZGKGVheCxQV19NRjAxNl9NRjAzMyldIDsgbW01PVJFTCotRklYKDAuMTY4KStHRUwqLUZJWCgwLjMzMSkKLQlwbWFkZHdkICAgbW00LFtHT1RPRkYoZWF4LFBXX01GMDE2X01GMDMzKV0gOyBtbTQ9UkVIKi1GSVgoMC4xNjgpK0dFSCotRklYKDAuMzMxKQorICAgICAgICBtb3ZxICAgICAgbW02LG1tMAorICAgICAgICBwdW5wY2tsd2QgbW0wLG1tMgorICAgICAgICBwdW5wY2tod2QgbW02LG1tMgorICAgICAgICBtb3ZxICAgICAgbW01LG1tMAorICAgICAgICBtb3ZxICAgICAgbW00LG1tNgorICAgICAgICBwbWFkZHdkICAgbW0wLFtHT1RPRkYoZWF4LFBXX0YwMjk5X0YwMzM3KV0gOyBtbTA9UkVMKkZJWCgwLjI5OSkrR0VMKkZJWCgwLjMzNykKKyAgICAgICAgcG1hZGR3ZCAgIG1tNixbR09UT0ZGKGVheCxQV19GMDI5OV9GMDMzNyldIDsgbW02PVJFSCpGSVgoMC4yOTkpK0dFSCpGSVgoMC4zMzcpCisgICAgICAgIHBtYWRkd2QgICBtbTUsW0dPVE9GRihlYXgsUFdfTUYwMTZfTUYwMzMpXSA7IG1tNT1SRUwqLUZJWCgwLjE2OCkrR0VMKi1GSVgoMC4zMzEpCisgICAgICAgIHBtYWRkd2QgICBtbTQsW0dPVE9GRihlYXgsUFdfTUYwMTZfTUYwMzMpXSA7IG1tND1SRUgqLUZJWCgwLjE2OCkrR0VIKi1GSVgoMC4zMzEpCiAKLQltb3ZxICAgICAgTU1XT1JEIFt3ayg2KV0sIG1tMAk7IHdrKDYpPVJFTCpGSVgoMC4yOTkpK0dFTCpGSVgoMC4zMzcpCi0JbW92cSAgICAgIE1NV09SRCBbd2soNyldLCBtbTYJOyB3ayg3KT1SRUgqRklYKDAuMjk5KStHRUgqRklYKDAuMzM3KQorICAgICAgICBtb3ZxICAgICAgTU1XT1JEIFt3ayg2KV0sIG1tMCAgIDsgd2soNik9UkVMKkZJWCgwLjI5OSkrR0VMKkZJWCgwLjMzNykKKyAgICAgICAgbW92cSAgICAgIE1NV09SRCBbd2soNyldLCBtbTYgICA7IHdrKDcpPVJFSCpGSVgoMC4yOTkpK0dFSCpGSVgoMC4zMzcpCiAKLQlweG9yICAgICAgbW0wLG1tMAotCXB4b3IgICAgICBtbTYsbW02Ci0JcHVucGNrbHdkIG1tMCxtbTEJCTsgbW0wPUJFTAotCXB1bnBja2h3ZCBtbTYsbW0xCQk7IG1tNj1CRUgKLQlwc3JsZCAgICAgbW0wLDEJCQk7IG1tMD1CRUwqRklYKDAuNTAwKQotCXBzcmxkICAgICBtbTYsMQkJCTsgbW02PUJFSCpGSVgoMC41MDApCisgICAgICAgIHB4b3IgICAgICBtbTAsbW0wCisgICAgICAgIHB4b3IgICAgICBtbTYsbW02CisgICAgICAgIHB1bnBja2x3ZCBtbTAsbW0xICAgICAgICAgICAgICAgOyBtbTA9QkVMCisgICAgICAgIHB1bnBja2h3ZCBtbTYsbW0xICAgICAgICAgICAgICAgOyBtbTY9QkVICisgICAgICAgIHBzcmxkICAgICBtbTAsMSAgICAgICAgICAgICAgICAgOyBtbTA9QkVMKkZJWCgwLjUwMCkKKyAgICAgICAgcHNybGQgICAgIG1tNiwxICAgICAgICAgICAgICAgICA7IG1tNj1CRUgqRklYKDAuNTAwKQogCi0JbW92cSAgICAgIG1tMSxbR09UT0ZGKGVheCxQRF9PTkVIQUxGTTFfQ0opXSA7IG1tMT1bUERfT05FSEFMRk0xX0NKXQorICAgICAgICBtb3ZxICAgICAgbW0xLFtHT1RPRkYoZWF4LFBEX09ORUhBTEZNMV9DSildIDsgbW0xPVtQRF9PTkVIQUxGTTFfQ0pdCiAKLQlwYWRkZCAgICAgbW01LG1tMAotCXBhZGRkICAgICBtbTQsbW02Ci0JcGFkZGQgICAgIG1tNSxtbTEKLQlwYWRkZCAgICAgbW00LG1tMQotCXBzcmxkICAgICBtbTUsU0NBTEVCSVRTCQk7IG1tNT1DYkVMCi0JcHNybGQgICAgIG1tNCxTQ0FMRUJJVFMJCTsgbW00PUNiRUgKLQlwYWNrc3NkdyAgbW01LG1tNAkJOyBtbTU9Q2JFCisgICAgICAgIHBhZGRkICAgICBtbTUsbW0wCisgICAgICAgIHBhZGRkICAgICBtbTQsbW02CisgICAgICAgIHBhZGRkICAgICBtbTUsbW0xCisgICAgICAgIHBhZGRkICAgICBtbTQsbW0xCisgICAgICAgIHBzcmxkICAgICBtbTUsU0NBTEVCSVRTICAgICAgICAgOyBtbTU9Q2JFTAorICAgICAgICBwc3JsZCAgICAgbW00LFNDQUxFQklUUyAgICAgICAgIDsgbW00PUNiRUgKKyAgICAgICAgcGFja3NzZHcgIG1tNSxtbTQgICAgICAgICAgICAgICA7IG1tNT1DYkUKIAotCXBzbGx3ICAgICBtbTcsQllURV9CSVQKLQlwb3IgICAgICAgbW01LG1tNwkJOyBtbTU9Q2IKLQltb3ZxICAgICAgTU1XT1JEIFtlYnhdLCBtbTUJOyBTYXZlIENiCisgICAgICAgIHBzbGx3ICAgICBtbTcsQllURV9CSVQKKyAgICAgICAgcG9yICAgICAgIG1tNSxtbTcgICAgICAgICAgICAgICA7IG1tNT1DYgorICAgICAgICBtb3ZxICAgICAgTU1XT1JEIFtlYnhdLCBtbTUgICAgIDsgU2F2ZSBDYgogCi0JbW92cSAgICAgIG1tMCwgTU1XT1JEIFt3aygzKV0JOyBtbTA9Qk8KLQltb3ZxICAgICAgbW02LCBNTVdPUkQgW3drKDIpXQk7IG1tNj1CRQotCW1vdnEgICAgICBtbTEsIE1NV09SRCBbd2soMSldCTsgbW0xPVJPCisgICAgICAgIG1vdnEgICAgICBtbTAsIE1NV09SRCBbd2soMyldICAgOyBtbTA9Qk8KKyAgICAgICAgbW92cSAgICAgIG1tNiwgTU1XT1JEIFt3aygyKV0gICA7IG1tNj1CRQorICAgICAgICBtb3ZxICAgICAgbW0xLCBNTVdPUkQgW3drKDEpXSAgIDsgbW0xPVJPCiAKLQltb3ZxICAgICAgbW00LG1tMAotCXB1bnBja2x3ZCBtbTAsbW0zCi0JcHVucGNraHdkIG1tNCxtbTMKLQltb3ZxICAgICAgbW03LG1tMAotCW1vdnEgICAgICBtbTUsbW00Ci0JcG1hZGR3ZCAgIG1tMCxbR09UT0ZGKGVheCxQV19GMDExNF9GMDI1MCldIDsgbW0wPUJPTCpGSVgoMC4xMTQpK0dPTCpGSVgoMC4yNTApCi0JcG1hZGR3ZCAgIG1tNCxbR09UT0ZGKGVheCxQV19GMDExNF9GMDI1MCldIDsgbW00PUJPSCpGSVgoMC4xMTQpK0dPSCpGSVgoMC4yNTApCi0JcG1hZGR3ZCAgIG1tNyxbR09UT0ZGKGVheCxQV19NRjAwOF9NRjA0MSldIDsgbW03PUJPTCotRklYKDAuMDgxKStHT0wqLUZJWCgwLjQxOCkKLQlwbWFkZHdkICAgbW01LFtHT1RPRkYoZWF4LFBXX01GMDA4X01GMDQxKV0gOyBtbTU9Qk9IKi1GSVgoMC4wODEpK0dPSCotRklYKDAuNDE4KQorICAgICAgICBtb3ZxICAgICAgbW00LG1tMAorICAgICAgICBwdW5wY2tsd2QgbW0wLG1tMworICAgICAgICBwdW5wY2tod2QgbW00LG1tMworICAgICAgICBtb3ZxICAgICAgbW03LG1tMAorICAgICAgICBtb3ZxICAgICAgbW01LG1tNAorICAgICAgICBwbWFkZHdkICAgbW0wLFtHT1RPRkYoZWF4LFBXX0YwMTE0X0YwMjUwKV0gOyBtbTA9Qk9MKkZJWCgwLjExNCkrR09MKkZJWCgwLjI1MCkKKyAgICAgICAgcG1hZGR3ZCAgIG1tNCxbR09UT0ZGKGVheCxQV19GMDExNF9GMDI1MCldIDsgbW00PUJPSCpGSVgoMC4xMTQpK0dPSCpGSVgoMC4yNTApCisgICAgICAgIHBtYWRkd2QgICBtbTcsW0dPVE9GRihlYXgsUFdfTUYwMDhfTUYwNDEpXSA7IG1tNz1CT0wqLUZJWCgwLjA4MSkrR09MKi1GSVgoMC40MTgpCisgICAgICAgIHBtYWRkd2QgICBtbTUsW0dPVE9GRihlYXgsUFdfTUYwMDhfTUYwNDEpXSA7IG1tNT1CT0gqLUZJWCgwLjA4MSkrR09IKi1GSVgoMC40MTgpCiAKLQltb3ZxICAgICAgbW0zLFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXQk7IG1tMz1bUERfT05FSEFMRl0KKyAgICAgICAgbW92cSAgICAgIG1tMyxbR09UT0ZGKGVheCxQRF9PTkVIQUxGKV0gIDsgbW0zPVtQRF9PTkVIQUxGXQogCi0JcGFkZGQgICAgIG1tMCwgTU1XT1JEIFt3ayg0KV0KLQlwYWRkZCAgICAgbW00LCBNTVdPUkQgW3drKDUpXQotCXBhZGRkICAgICBtbTAsbW0zCi0JcGFkZGQgICAgIG1tNCxtbTMKLQlwc3JsZCAgICAgbW0wLFNDQUxFQklUUwkJOyBtbTA9WU9MCi0JcHNybGQgICAgIG1tNCxTQ0FMRUJJVFMJCTsgbW00PVlPSAotCXBhY2tzc2R3ICBtbTAsbW00CQk7IG1tMD1ZTworICAgICAgICBwYWRkZCAgICAgbW0wLCBNTVdPUkQgW3drKDQpXQorICAgICAgICBwYWRkZCAgICAgbW00LCBNTVdPUkQgW3drKDUpXQorICAgICAgICBwYWRkZCAgICAgbW0wLG1tMworICAgICAgICBwYWRkZCAgICAgbW00LG1tMworICAgICAgICBwc3JsZCAgICAgbW0wLFNDQUxFQklUUyAgICAgICAgIDsgbW0wPVlPTAorICAgICAgICBwc3JsZCAgICAgbW00LFNDQUxFQklUUyAgICAgICAgIDsgbW00PVlPSAorICAgICAgICBwYWNrc3NkdyAgbW0wLG1tNCAgICAgICAgICAgICAgIDsgbW0wPVlPCiAKLQlweG9yICAgICAgbW0zLG1tMwotCXB4b3IgICAgICBtbTQsbW00Ci0JcHVucGNrbHdkIG1tMyxtbTEJCTsgbW0zPVJPTAotCXB1bnBja2h3ZCBtbTQsbW0xCQk7IG1tND1ST0gKLQlwc3JsZCAgICAgbW0zLDEJCQk7IG1tMz1ST0wqRklYKDAuNTAwKQotCXBzcmxkICAgICBtbTQsMQkJCTsgbW00PVJPSCpGSVgoMC41MDApCisgICAgICAgIHB4b3IgICAgICBtbTMsbW0zCisgICAgICAgIHB4b3IgICAgICBtbTQsbW00CisgICAgICAgIHB1bnBja2x3ZCBtbTMsbW0xICAgICAgICAgICAgICAgOyBtbTM9Uk9MCisgICAgICAgIHB1bnBja2h3ZCBtbTQsbW0xICAgICAgICAgICAgICAgOyBtbTQ9Uk9ICisgICAgICAgIHBzcmxkICAgICBtbTMsMSAgICAgICAgICAgICAgICAgOyBtbTM9Uk9MKkZJWCgwLjUwMCkKKyAgICAgICAgcHNybGQgICAgIG1tNCwxICAgICAgICAgICAgICAgICA7IG1tND1ST0gqRklYKDAuNTAwKQogCi0JbW92cSAgICAgIG1tMSxbR09UT0ZGKGVheCxQRF9PTkVIQUxGTTFfQ0opXSA7IG1tMT1bUERfT05FSEFMRk0xX0NKXQorICAgICAgICBtb3ZxICAgICAgbW0xLFtHT1RPRkYoZWF4LFBEX09ORUhBTEZNMV9DSildIDsgbW0xPVtQRF9PTkVIQUxGTTFfQ0pdCiAKLQlwYWRkZCAgICAgbW03LG1tMwotCXBhZGRkICAgICBtbTUsbW00Ci0JcGFkZGQgICAgIG1tNyxtbTEKLQlwYWRkZCAgICAgbW01LG1tMQotCXBzcmxkICAgICBtbTcsU0NBTEVCSVRTCQk7IG1tNz1Dck9MCi0JcHNybGQgICAgIG1tNSxTQ0FMRUJJVFMJCTsgbW01PUNyT0gKLQlwYWNrc3NkdyAgbW03LG1tNQkJOyBtbTc9Q3JPCisgICAgICAgIHBhZGRkICAgICBtbTcsbW0zCisgICAgICAgIHBhZGRkICAgICBtbTUsbW00CisgICAgICAgIHBhZGRkICAgICBtbTcsbW0xCisgICAgICAgIHBhZGRkICAgICBtbTUsbW0xCisgICAgICAgIHBzcmxkICAgICBtbTcsU0NBTEVCSVRTICAgICAgICAgOyBtbTc9Q3JPTAorICAgICAgICBwc3JsZCAgICAgbW01LFNDQUxFQklUUyAgICAgICAgIDsgbW01PUNyT0gKKyAgICAgICAgcGFja3NzZHcgIG1tNyxtbTUgICAgICAgICAgICAgICA7IG1tNz1Dck8KIAotCW1vdnEgICAgICBtbTMsIE1NV09SRCBbd2soMCldCTsgbW0zPVJFCisgICAgICAgIG1vdnEgICAgICBtbTMsIE1NV09SRCBbd2soMCldICAgOyBtbTM9UkUKIAotCW1vdnEgICAgICBtbTQsbW02Ci0JcHVucGNrbHdkIG1tNixtbTIKLQlwdW5wY2tod2QgbW00LG1tMgotCW1vdnEgICAgICBtbTEsbW02Ci0JbW92cSAgICAgIG1tNSxtbTQKLQlwbWFkZHdkICAgbW02LFtHT1RPRkYoZWF4LFBXX0YwMTE0X0YwMjUwKV0gOyBtbTY9QkVMKkZJWCgwLjExNCkrR0VMKkZJWCgwLjI1MCkKLQlwbWFkZHdkICAgbW00LFtHT1RPRkYoZWF4LFBXX0YwMTE0X0YwMjUwKV0gOyBtbTQ9QkVIKkZJWCgwLjExNCkrR0VIKkZJWCgwLjI1MCkKLQlwbWFkZHdkICAgbW0xLFtHT1RPRkYoZWF4LFBXX01GMDA4X01GMDQxKV0gOyBtbTE9QkVMKi1GSVgoMC4wODEpK0dFTCotRklYKDAuNDE4KQotCXBtYWRkd2QgICBtbTUsW0dPVE9GRihlYXgsUFdfTUYwMDhfTUYwNDEpXSA7IG1tNT1CRUgqLUZJWCgwLjA4MSkrR0VIKi1GSVgoMC40MTgpCisgICAgICAgIG1vdnEgICAgICBtbTQsbW02CisgICAgICAgIHB1bnBja2x3ZCBtbTYsbW0yCisgICAgICAgIHB1bnBja2h3ZCBtbTQsbW0yCisgICAgICAgIG1vdnEgICAgICBtbTEsbW02CisgICAgICAgIG1vdnEgICAgICBtbTUsbW00CisgICAgICAgIHBtYWRkd2QgICBtbTYsW0dPVE9GRihlYXgsUFdfRjAxMTRfRjAyNTApXSA7IG1tNj1CRUwqRklYKDAuMTE0KStHRUwqRklYKDAuMjUwKQorICAgICAgICBwbWFkZHdkICAgbW00LFtHT1RPRkYoZWF4LFBXX0YwMTE0X0YwMjUwKV0gOyBtbTQ9QkVIKkZJWCgwLjExNCkrR0VIKkZJWCgwLjI1MCkKKyAgICAgICAgcG1hZGR3ZCAgIG1tMSxbR09UT0ZGKGVheCxQV19NRjAwOF9NRjA0MSldIDsgbW0xPUJFTCotRklYKDAuMDgxKStHRUwqLUZJWCgwLjQxOCkKKyAgICAgICAgcG1hZGR3ZCAgIG1tNSxbR09UT0ZGKGVheCxQV19NRjAwOF9NRjA0MSldIDsgbW01PUJFSCotRklYKDAuMDgxKStHRUgqLUZJWCgwLjQxOCkKIAotCW1vdnEgICAgICBtbTIsW0dPVE9GRihlYXgsUERfT05FSEFMRildCTsgbW0yPVtQRF9PTkVIQUxGXQorICAgICAgICBtb3ZxICAgICAgbW0yLFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXSAgOyBtbTI9W1BEX09ORUhBTEZdCiAKLQlwYWRkZCAgICAgbW02LCBNTVdPUkQgW3drKDYpXQotCXBhZGRkICAgICBtbTQsIE1NV09SRCBbd2soNyldCi0JcGFkZGQgICAgIG1tNixtbTIKLQlwYWRkZCAgICAgbW00LG1tMgotCXBzcmxkICAgICBtbTYsU0NBTEVCSVRTCQk7IG1tNj1ZRUwKLQlwc3JsZCAgICAgbW00LFNDQUxFQklUUwkJOyBtbTQ9WUVICi0JcGFja3NzZHcgIG1tNixtbTQJCTsgbW02PVlFCisgICAgICAgIHBhZGRkICAgICBtbTYsIE1NV09SRCBbd2soNildCisgICAgICAgIHBhZGRkICAgICBtbTQsIE1NV09SRCBbd2soNyldCisgICAgICAgIHBhZGRkICAgICBtbTYsbW0yCisgICAgICAgIHBhZGRkICAgICBtbTQsbW0yCisgICAgICAgIHBzcmxkICAgICBtbTYsU0NBTEVCSVRTICAgICAgICAgOyBtbTY9WUVMCisgICAgICAgIHBzcmxkICAgICBtbTQsU0NBTEVCSVRTICAgICAgICAgOyBtbTQ9WUVICisgICAgICAgIHBhY2tzc2R3ICBtbTYsbW00ICAgICAgICAgICAgICAgOyBtbTY9WUUKIAotCXBzbGx3ICAgICBtbTAsQllURV9CSVQKLQlwb3IgICAgICAgbW02LG1tMAkJOyBtbTY9WQotCW1vdnEgICAgICBNTVdPUkQgW2VkaV0sIG1tNgk7IFNhdmUgWQorICAgICAgICBwc2xsdyAgICAgbW0wLEJZVEVfQklUCisgICAgICAgIHBvciAgICAgICBtbTYsbW0wICAgICAgICAgICAgICAgOyBtbTY9WQorICAgICAgICBtb3ZxICAgICAgTU1XT1JEIFtlZGldLCBtbTYgICAgIDsgU2F2ZSBZCiAKLQlweG9yICAgICAgbW0yLG1tMgotCXB4b3IgICAgICBtbTQsbW00Ci0JcHVucGNrbHdkIG1tMixtbTMJCTsgbW0yPVJFTAotCXB1bnBja2h3ZCBtbTQsbW0zCQk7IG1tND1SRUgKLQlwc3JsZCAgICAgbW0yLDEJCQk7IG1tMj1SRUwqRklYKDAuNTAwKQotCXBzcmxkICAgICBtbTQsMQkJCTsgbW00PVJFSCpGSVgoMC41MDApCisgICAgICAgIHB4b3IgICAgICBtbTIsbW0yCisgICAgICAgIHB4b3IgICAgICBtbTQsbW00CisgICAgICAgIHB1bnBja2x3ZCBtbTIsbW0zICAgICAgICAgICAgICAgOyBtbTI9UkVMCisgICAgICAgIHB1bnBja2h3ZCBtbTQsbW0zICAgICAgICAgICAgICAgOyBtbTQ9UkVICisgICAgICAgIHBzcmxkICAgICBtbTIsMSAgICAgICAgICAgICAgICAgOyBtbTI9UkVMKkZJWCgwLjUwMCkKKyAgICAgICAgcHNybGQgICAgIG1tNCwxICAgICAgICAgICAgICAgICA7IG1tND1SRUgqRklYKDAuNTAwKQogCi0JbW92cSAgICAgIG1tMCxbR09UT0ZGKGVheCxQRF9PTkVIQUxGTTFfQ0opXSA7IG1tMD1bUERfT05FSEFMRk0xX0NKXQorICAgICAgICBtb3ZxICAgICAgbW0wLFtHT1RPRkYoZWF4LFBEX09ORUhBTEZNMV9DSildIDsgbW0wPVtQRF9PTkVIQUxGTTFfQ0pdCiAKLQlwYWRkZCAgICAgbW0xLG1tMgotCXBhZGRkICAgICBtbTUsbW00Ci0JcGFkZGQgICAgIG1tMSxtbTAKLQlwYWRkZCAgICAgbW01LG1tMAotCXBzcmxkICAgICBtbTEsU0NBTEVCSVRTCQk7IG1tMT1DckVMCi0JcHNybGQgICAgIG1tNSxTQ0FMRUJJVFMJCTsgbW01PUNyRUgKLQlwYWNrc3NkdyAgbW0xLG1tNQkJOyBtbTE9Q3JFCisgICAgICAgIHBhZGRkICAgICBtbTEsbW0yCisgICAgICAgIHBhZGRkICAgICBtbTUsbW00CisgICAgICAgIHBhZGRkICAgICBtbTEsbW0wCisgICAgICAgIHBhZGRkICAgICBtbTUsbW0wCisgICAgICAgIHBzcmxkICAgICBtbTEsU0NBTEVCSVRTICAgICAgICAgOyBtbTE9Q3JFTAorICAgICAgICBwc3JsZCAgICAgbW01LFNDQUxFQklUUyAgICAgICAgIDsgbW01PUNyRUgKKyAgICAgICAgcGFja3NzZHcgIG1tMSxtbTUgICAgICAgICAgICAgICA7IG1tMT1DckUKIAotCXBzbGx3ICAgICBtbTcsQllURV9CSVQKLQlwb3IgICAgICAgbW0xLG1tNwkJOyBtbTE9Q3IKLQltb3ZxICAgICAgTU1XT1JEIFtlZHhdLCBtbTEJOyBTYXZlIENyCisgICAgICAgIHBzbGx3ICAgICBtbTcsQllURV9CSVQKKyAgICAgICAgcG9yICAgICAgIG1tMSxtbTcgICAgICAgICAgICAgICA7IG1tMT1DcgorICAgICAgICBtb3ZxICAgICAgTU1XT1JEIFtlZHhdLCBtbTEgICAgIDsgU2F2ZSBDcgogCi0Jc3ViCWVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECi0JYWRkCWVzaSwgYnl0ZSBSR0JfUElYRUxTSVpFKlNJWkVPRl9NTVdPUkQJOyBpbnB0cgotCWFkZAllZGksIGJ5dGUgU0laRU9GX01NV09SRAkJCTsgb3V0cHRyMAotCWFkZAllYngsIGJ5dGUgU0laRU9GX01NV09SRAkJCTsgb3V0cHRyMQotCWFkZAllZHgsIGJ5dGUgU0laRU9GX01NV09SRAkJCTsgb3V0cHRyMgotCWNtcAllY3gsIGJ5dGUgU0laRU9GX01NV09SRAotCWphZQluZWFyIC5jb2x1bW5sb29wCi0JdGVzdAllY3gsZWN4Ci0Jam56CW5lYXIgLmNvbHVtbl9sZDEKKyAgICAgICAgc3ViICAgICBlY3gsIGJ5dGUgU0laRU9GX01NV09SRAorICAgICAgICBhZGQgICAgIGVzaSwgYnl0ZSBSR0JfUElYRUxTSVpFKlNJWkVPRl9NTVdPUkQgICA7IGlucHRyCisgICAgICAgIGFkZCAgICAgZWRpLCBieXRlIFNJWkVPRl9NTVdPUkQgICAgICAgICAgICAgICAgIDsgb3V0cHRyMAorICAgICAgICBhZGQgICAgIGVieCwgYnl0ZSBTSVpFT0ZfTU1XT1JEICAgICAgICAgICAgICAgICA7IG91dHB0cjEKKyAgICAgICAgYWRkICAgICBlZHgsIGJ5dGUgU0laRU9GX01NV09SRCAgICAgICAgICAgICAgICAgOyBvdXRwdHIyCisgICAgICAgIGNtcCAgICAgZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQKKyAgICAgICAgamFlICAgICBuZWFyIC5jb2x1bW5sb29wCisgICAgICAgIHRlc3QgICAgZWN4LGVjeAorICAgICAgICBqbnogICAgIG5lYXIgLmNvbHVtbl9sZDEKIAotCXBvcAllY3gJCQk7IGNvbAotCXBvcAllc2kKLQlwb3AJZWRpCi0JcG9wCWVieAotCXBvcAllZHgKLQlwb3BwaWMJZWF4CisgICAgICAgIHBvcCAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBjb2wKKyAgICAgICAgcG9wICAgICBlc2kKKyAgICAgICAgcG9wICAgICBlZGkKKyAgICAgICAgcG9wICAgICBlYngKKyAgICAgICAgcG9wICAgICBlZHgKKyAgICAgICAgcG9wcGljICBlYXgKIAotCWFkZAllc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCTsgaW5wdXRfYnVmCi0JYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cKLQlhZGQJZWJ4LCBieXRlIFNJWkVPRl9KU0FNUFJPVwotCWFkZAllZHgsIGJ5dGUgU0laRU9GX0pTQU1QUk9XCi0JZGVjCWVheAkJCQk7IG51bV9yb3dzCi0JamcJbmVhciAucm93bG9vcAorICAgICAgICBhZGQgICAgIGVzaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cgICAgICAgOyBpbnB1dF9idWYKKyAgICAgICAgYWRkICAgICBlZGksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCisgICAgICAgIGFkZCAgICAgZWJ4LCBieXRlIFNJWkVPRl9KU0FNUFJPVworICAgICAgICBhZGQgICAgIGVkeCwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cKKyAgICAgICAgZGVjICAgICBlYXggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgbnVtX3Jvd3MKKyAgICAgICAgamcgICAgICBuZWFyIC5yb3dsb29wCiAKLQllbW1zCQk7IGVtcHR5IE1NWCBzdGF0ZQorICAgICAgICBlbW1zICAgICAgICAgICAgOyBlbXB0eSBNTVggc3RhdGUKIAogLnJldHVybjoKLQlwb3AJZWRpCi0JcG9wCWVzaQotOwlwb3AJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotOwlwb3AJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotCXBvcAllYngKLQltb3YJZXNwLGVicAkJOyBlc3AgPC0gYWxpZ25lZCBlYnAKLQlwb3AJZXNwCQk7IGVzcCA8LSBvcmlnaW5hbCBlYnAKLQlwb3AJZWJwCi0JcmV0CisgICAgICAgIHBvcCAgICAgZWRpCisgICAgICAgIHBvcCAgICAgZXNpCis7ICAgICAgIHBvcCAgICAgZWR4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgICAgIHBvcCAgICAgZWN4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgICAgIHBvcCAgICAgZWJ4CisgICAgICAgIG1vdiAgICAgZXNwLGVicCAgICAgICAgIDsgZXNwIDwtIGFsaWduZWQgZWJwCisgICAgICAgIHBvcCAgICAgZXNwICAgICAgICAgICAgIDsgZXNwIDwtIG9yaWdpbmFsIGVicAorICAgICAgICBwb3AgICAgIGVicAorICAgICAgICByZXQKIAogOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKIDsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KLQlhbGlnbgkxNgorICAgICAgICBhbGlnbiAgIDE2CmRpZmYgLS1naXQgYS9zaW1kL2pjY2xyc3MyLTY0LmFzbSBiL3NpbWQvamNjbHJzczItNjQuYXNtCmluZGV4IGY1ZDZiZWQuLjFjZGFlMjcgMTAwNjQ0Ci0tLSBhL3NpbWQvamNjbHJzczItNjQuYXNtCisrKyBiL3NpbWQvamNjbHJzczItNjQuYXNtCkBAIC0zMiw0NTQgKzMyLDQ1NCBAQAogOyByMTMgPSBKRElNRU5TSU9OIG91dHB1dF9yb3cKIDsgcjE0ID0gaW50IG51bV9yb3dzCiAKLSVkZWZpbmUgd2soaSkJCXJicC0oV0tfTlVNLShpKSkqU0laRU9GX1hNTVdPUkQJOyB4bW13b3JkIHdrW1dLX05VTV0KLSVkZWZpbmUgV0tfTlVNCQk4CislZGVmaW5lIHdrKGkpICAgICAgICAgICByYnAtKFdLX05VTS0oaSkpKlNJWkVPRl9YTU1XT1JEIDsgeG1td29yZCB3a1tXS19OVU1dCislZGVmaW5lIFdLX05VTSAgICAgICAgICA4CiAKLQlhbGlnbgkxNgorICAgICAgICBhbGlnbiAgIDE2CiAKLQlnbG9iYWwJRVhUTihqc2ltZF9yZ2JfeWNjX2NvbnZlcnRfc3NlMikKKyAgICAgICAgZ2xvYmFsICBFWFROKGpzaW1kX3JnYl95Y2NfY29udmVydF9zc2UyKQogCiBFWFROKGpzaW1kX3JnYl95Y2NfY29udmVydF9zc2UyKToKLQlwdXNoCXJicAotCW1vdglyYXgscnNwCQkJCTsgcmF4ID0gb3JpZ2luYWwgcmJwCi0Jc3ViCXJzcCwgYnl0ZSA0Ci0JYW5kCXJzcCwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKQk7IGFsaWduIHRvIDEyOCBiaXRzCi0JbW92CVtyc3BdLHJheAotCW1vdglyYnAscnNwCQkJCTsgcmJwID0gYWxpZ25lZCByYnAKLQlsZWEJcnNwLCBbd2soMCldCi0JY29sbGVjdF9hcmdzCi0JcHVzaAlyYngKKyAgICAgICAgcHVzaCAgICByYnAKKyAgICAgICAgbW92ICAgICByYXgscnNwICAgICAgICAgICAgICAgICAgICAgICAgIDsgcmF4ID0gb3JpZ2luYWwgcmJwCisgICAgICAgIHN1YiAgICAgcnNwLCBieXRlIDQKKyAgICAgICAgYW5kICAgICByc3AsIGJ5dGUgKC1TSVpFT0ZfWE1NV09SRCkgICAgIDsgYWxpZ24gdG8gMTI4IGJpdHMKKyAgICAgICAgbW92ICAgICBbcnNwXSxyYXgKKyAgICAgICAgbW92ICAgICByYnAscnNwICAgICAgICAgICAgICAgICAgICAgICAgIDsgcmJwID0gYWxpZ25lZCByYnAKKyAgICAgICAgbGVhICAgICByc3AsIFt3aygwKV0KKyAgICAgICAgY29sbGVjdF9hcmdzCisgICAgICAgIHB1c2ggICAgcmJ4CiAKLQltb3YJcmN4LCByMTAKLQl0ZXN0CXJjeCxyY3gKLQlqegluZWFyIC5yZXR1cm4KKyAgICAgICAgbW92ICAgICByY3gsIHIxMAorICAgICAgICB0ZXN0ICAgIHJjeCxyY3gKKyAgICAgICAganogICAgICBuZWFyIC5yZXR1cm4KIAotCXB1c2gJcmN4CisgICAgICAgIHB1c2ggICAgcmN4CiAKLQltb3YgcnNpLCByMTIKLQltb3YgcmN4LCByMTMKLQltb3YJcmRpLCBKU0FNUEFSUkFZIFtyc2krMCpTSVpFT0ZfSlNBTVBBUlJBWV0KLQltb3YJcmJ4LCBKU0FNUEFSUkFZIFtyc2krMSpTSVpFT0ZfSlNBTVBBUlJBWV0KLQltb3YJcmR4LCBKU0FNUEFSUkFZIFtyc2krMipTSVpFT0ZfSlNBTVBBUlJBWV0KLQlsZWEJcmRpLCBbcmRpK3JjeCpTSVpFT0ZfSlNBTVBST1ddCi0JbGVhCXJieCwgW3JieCtyY3gqU0laRU9GX0pTQU1QUk9XXQotCWxlYQlyZHgsIFtyZHgrcmN4KlNJWkVPRl9KU0FNUFJPV10KKyAgICAgICAgbW92IHJzaSwgcjEyCisgICAgICAgIG1vdiByY3gsIHIxMworICAgICAgICBtb3YgICAgIHJkaSwgSlNBTVBBUlJBWSBbcnNpKzAqU0laRU9GX0pTQU1QQVJSQVldCisgICAgICAgIG1vdiAgICAgcmJ4LCBKU0FNUEFSUkFZIFtyc2krMSpTSVpFT0ZfSlNBTVBBUlJBWV0KKyAgICAgICAgbW92ICAgICByZHgsIEpTQU1QQVJSQVkgW3JzaSsyKlNJWkVPRl9KU0FNUEFSUkFZXQorICAgICAgICBsZWEgICAgIHJkaSwgW3JkaStyY3gqU0laRU9GX0pTQU1QUk9XXQorICAgICAgICBsZWEgICAgIHJieCwgW3JieCtyY3gqU0laRU9GX0pTQU1QUk9XXQorICAgICAgICBsZWEgICAgIHJkeCwgW3JkeCtyY3gqU0laRU9GX0pTQU1QUk9XXQogCi0JcG9wCXJjeAorICAgICAgICBwb3AgICAgIHJjeAogCi0JbW92IHJzaSwgcjExCi0JbW92CWVheCwgcjE0ZAotCXRlc3QJcmF4LHJheAotCWpsZQluZWFyIC5yZXR1cm4KKyAgICAgICAgbW92IHJzaSwgcjExCisgICAgICAgIG1vdiAgICAgZWF4LCByMTRkCisgICAgICAgIHRlc3QgICAgcmF4LHJheAorICAgICAgICBqbGUgICAgIG5lYXIgLnJldHVybgogLnJvd2xvb3A6Ci0JcHVzaAlyZHgKLQlwdXNoCXJieAotCXB1c2gJcmRpCi0JcHVzaAlyc2kKLQlwdXNoCXJjeAkJCTsgY29sCisgICAgICAgIHB1c2ggICAgcmR4CisgICAgICAgIHB1c2ggICAgcmJ4CisgICAgICAgIHB1c2ggICAgcmRpCisgICAgICAgIHB1c2ggICAgcnNpCisgICAgICAgIHB1c2ggICAgcmN4ICAgICAgICAgICAgICAgICAgICAgOyBjb2wKIAotCW1vdglyc2ksIEpTQU1QUk9XIFtyc2ldCTsgaW5wdHIKLQltb3YJcmRpLCBKU0FNUFJPVyBbcmRpXQk7IG91dHB0cjAKLQltb3YJcmJ4LCBKU0FNUFJPVyBbcmJ4XQk7IG91dHB0cjEKLQltb3YJcmR4LCBKU0FNUFJPVyBbcmR4XQk7IG91dHB0cjIKKyAgICAgICAgbW92ICAgICByc2ksIEpTQU1QUk9XIFtyc2ldICAgICA7IGlucHRyCisgICAgICAgIG1vdiAgICAgcmRpLCBKU0FNUFJPVyBbcmRpXSAgICAgOyBvdXRwdHIwCisgICAgICAgIG1vdiAgICAgcmJ4LCBKU0FNUFJPVyBbcmJ4XSAgICAgOyBvdXRwdHIxCisgICAgICAgIG1vdiAgICAgcmR4LCBKU0FNUFJPVyBbcmR4XSAgICAgOyBvdXRwdHIyCiAKLQljbXAJcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JECi0JamFlCW5lYXIgLmNvbHVtbmxvb3AKKyAgICAgICAgY21wICAgICByY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKyAgICAgICAgamFlICAgICBuZWFyIC5jb2x1bW5sb29wCiAKICVpZiBSR0JfUElYRUxTSVpFID09IDMgOyAtLS0tLS0tLS0tLS0tLS0KIAogLmNvbHVtbl9sZDE6Ci0JcHVzaAlyYXgKLQlwdXNoCXJkeAotCWxlYQlyY3gsW3JjeCtyY3gqMl0JCTsgaW11bCBlY3gsUkdCX1BJWEVMU0laRQotCXRlc3QJY2wsIFNJWkVPRl9CWVRFCi0JanoJc2hvcnQgLmNvbHVtbl9sZDIKLQlzdWIJcmN4LCBieXRlIFNJWkVPRl9CWVRFCi0JbW92engJcmF4LCBCWVRFIFtyc2krcmN4XQorICAgICAgICBwdXNoICAgIHJheAorICAgICAgICBwdXNoICAgIHJkeAorICAgICAgICBsZWEgICAgIHJjeCxbcmN4K3JjeCoyXSAgICAgICAgIDsgaW11bCBlY3gsUkdCX1BJWEVMU0laRQorICAgICAgICB0ZXN0ICAgIGNsLCBTSVpFT0ZfQllURQorICAgICAgICBqeiAgICAgIHNob3J0IC5jb2x1bW5fbGQyCisgICAgICAgIHN1YiAgICAgcmN4LCBieXRlIFNJWkVPRl9CWVRFCisgICAgICAgIG1vdnp4ICAgcmF4LCBCWVRFIFtyc2krcmN4XQogLmNvbHVtbl9sZDI6Ci0JdGVzdAljbCwgU0laRU9GX1dPUkQKLQlqeglzaG9ydCAuY29sdW1uX2xkNAotCXN1YglyY3gsIGJ5dGUgU0laRU9GX1dPUkQKLQltb3Z6eAlyZHgsIFdPUkQgW3JzaStyY3hdCi0Jc2hsCXJheCwgV09SRF9CSVQKLQlvcglyYXgscmR4CisgICAgICAgIHRlc3QgICAgY2wsIFNJWkVPRl9XT1JECisgICAgICAgIGp6ICAgICAgc2hvcnQgLmNvbHVtbl9sZDQKKyAgICAgICAgc3ViICAgICByY3gsIGJ5dGUgU0laRU9GX1dPUkQKKyAgICAgICAgbW92enggICByZHgsIFdPUkQgW3JzaStyY3hdCisgICAgICAgIHNobCAgICAgcmF4LCBXT1JEX0JJVAorICAgICAgICBvciAgICAgIHJheCxyZHgKIC5jb2x1bW5fbGQ0OgotCW1vdmQJeG1tQSxlYXgKLQlwb3AJcmR4Ci0JcG9wCXJheAotCXRlc3QJY2wsIFNJWkVPRl9EV09SRAotCWp6CXNob3J0IC5jb2x1bW5fbGQ4Ci0Jc3ViCXJjeCwgYnl0ZSBTSVpFT0ZfRFdPUkQKLQltb3ZkCXhtbUYsIFhNTV9EV09SRCBbcnNpK3JjeF0KLQlwc2xsZHEJeG1tQSwgU0laRU9GX0RXT1JECi0JcG9yCXhtbUEseG1tRgorICAgICAgICBtb3ZkICAgIHhtbUEsZWF4CisgICAgICAgIHBvcCAgICAgcmR4CisgICAgICAgIHBvcCAgICAgcmF4CisgICAgICAgIHRlc3QgICAgY2wsIFNJWkVPRl9EV09SRAorICAgICAgICBqeiAgICAgIHNob3J0IC5jb2x1bW5fbGQ4CisgICAgICAgIHN1YiAgICAgcmN4LCBieXRlIFNJWkVPRl9EV09SRAorICAgICAgICBtb3ZkICAgIHhtbUYsIFhNTV9EV09SRCBbcnNpK3JjeF0KKyAgICAgICAgcHNsbGRxICB4bW1BLCBTSVpFT0ZfRFdPUkQKKyAgICAgICAgcG9yICAgICB4bW1BLHhtbUYKIC5jb2x1bW5fbGQ4OgotCXRlc3QJY2wsIFNJWkVPRl9NTVdPUkQKLQlqeglzaG9ydCAuY29sdW1uX2xkMTYKLQlzdWIJcmN4LCBieXRlIFNJWkVPRl9NTVdPUkQKLQltb3ZxCXhtbUIsIFhNTV9NTVdPUkQgW3JzaStyY3hdCi0JcHNsbGRxCXhtbUEsIFNJWkVPRl9NTVdPUkQKLQlwb3IJeG1tQSx4bW1CCisgICAgICAgIHRlc3QgICAgY2wsIFNJWkVPRl9NTVdPUkQKKyAgICAgICAganogICAgICBzaG9ydCAuY29sdW1uX2xkMTYKKyAgICAgICAgc3ViICAgICByY3gsIGJ5dGUgU0laRU9GX01NV09SRAorICAgICAgICBtb3ZxICAgIHhtbUIsIFhNTV9NTVdPUkQgW3JzaStyY3hdCisgICAgICAgIHBzbGxkcSAgeG1tQSwgU0laRU9GX01NV09SRAorICAgICAgICBwb3IgICAgIHhtbUEseG1tQgogLmNvbHVtbl9sZDE2OgotCXRlc3QJY2wsIFNJWkVPRl9YTU1XT1JECi0JanoJc2hvcnQgLmNvbHVtbl9sZDMyCi0JbW92ZHFhCXhtbUYseG1tQQotCW1vdmRxdQl4bW1BLCBYTU1XT1JEIFtyc2krMCpTSVpFT0ZfWE1NV09SRF0KLQltb3YJcmN4LCBTSVpFT0ZfWE1NV09SRAotCWptcAlzaG9ydCAucmdiX3ljY19jbnYKKyAgICAgICAgdGVzdCAgICBjbCwgU0laRU9GX1hNTVdPUkQKKyAgICAgICAganogICAgICBzaG9ydCAuY29sdW1uX2xkMzIKKyAgICAgICAgbW92ZHFhICB4bW1GLHhtbUEKKyAgICAgICAgbW92ZHF1ICB4bW1BLCBYTU1XT1JEIFtyc2krMCpTSVpFT0ZfWE1NV09SRF0KKyAgICAgICAgbW92ICAgICByY3gsIFNJWkVPRl9YTU1XT1JECisgICAgICAgIGptcCAgICAgc2hvcnQgLnJnYl95Y2NfY252CiAuY29sdW1uX2xkMzI6Ci0JdGVzdAljbCwgMipTSVpFT0ZfWE1NV09SRAotCW1vdglyY3gsIFNJWkVPRl9YTU1XT1JECi0JanoJc2hvcnQgLnJnYl95Y2NfY252Ci0JbW92ZHFhCXhtbUIseG1tQQotCW1vdmRxdQl4bW1BLCBYTU1XT1JEIFtyc2krMCpTSVpFT0ZfWE1NV09SRF0KLQltb3ZkcXUJeG1tRiwgWE1NV09SRCBbcnNpKzEqU0laRU9GX1hNTVdPUkRdCi0Jam1wCXNob3J0IC5yZ2JfeWNjX2NudgorICAgICAgICB0ZXN0ICAgIGNsLCAyKlNJWkVPRl9YTU1XT1JECisgICAgICAgIG1vdiAgICAgcmN4LCBTSVpFT0ZfWE1NV09SRAorICAgICAgICBqeiAgICAgIHNob3J0IC5yZ2JfeWNjX2NudgorICAgICAgICBtb3ZkcWEgIHhtbUIseG1tQQorICAgICAgICBtb3ZkcXUgIHhtbUEsIFhNTVdPUkQgW3JzaSswKlNJWkVPRl9YTU1XT1JEXQorICAgICAgICBtb3ZkcXUgIHhtbUYsIFhNTVdPUkQgW3JzaSsxKlNJWkVPRl9YTU1XT1JEXQorICAgICAgICBqbXAgICAgIHNob3J0IC5yZ2JfeWNjX2NudgogCiAuY29sdW1ubG9vcDoKLQltb3ZkcXUJeG1tQSwgWE1NV09SRCBbcnNpKzAqU0laRU9GX1hNTVdPUkRdCi0JbW92ZHF1CXhtbUYsIFhNTVdPUkQgW3JzaSsxKlNJWkVPRl9YTU1XT1JEXQotCW1vdmRxdQl4bW1CLCBYTU1XT1JEIFtyc2krMipTSVpFT0ZfWE1NV09SRF0KKyAgICAgICAgbW92ZHF1ICB4bW1BLCBYTU1XT1JEIFtyc2krMCpTSVpFT0ZfWE1NV09SRF0KKyAgICAgICAgbW92ZHF1ICB4bW1GLCBYTU1XT1JEIFtyc2krMSpTSVpFT0ZfWE1NV09SRF0KKyAgICAgICAgbW92ZHF1ICB4bW1CLCBYTU1XT1JEIFtyc2krMipTSVpFT0ZfWE1NV09SRF0KIAogLnJnYl95Y2NfY252OgotCTsgeG1tQT0oMDAgMTAgMjAgMDEgMTEgMjEgMDIgMTIgMjIgMDMgMTMgMjMgMDQgMTQgMjQgMDUpCi0JOyB4bW1GPSgxNSAyNSAwNiAxNiAyNiAwNyAxNyAyNyAwOCAxOCAyOCAwOSAxOSAyOSAwQSAxQSkKLQk7IHhtbUI9KDJBIDBCIDFCIDJCIDBDIDFDIDJDIDBEIDFEIDJEIDBFIDFFIDJFIDBGIDFGIDJGKQorICAgICAgICA7IHhtbUE9KDAwIDEwIDIwIDAxIDExIDIxIDAyIDEyIDIyIDAzIDEzIDIzIDA0IDE0IDI0IDA1KQorICAgICAgICA7IHhtbUY9KDE1IDI1IDA2IDE2IDI2IDA3IDE3IDI3IDA4IDE4IDI4IDA5IDE5IDI5IDBBIDFBKQorICAgICAgICA7IHhtbUI9KDJBIDBCIDFCIDJCIDBDIDFDIDJDIDBEIDFEIDJEIDBFIDFFIDJFIDBGIDFGIDJGKQogCi0JbW92ZHFhICAgIHhtbUcseG1tQQotCXBzbGxkcSAgICB4bW1BLDgJOyB4bW1BPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAwMCAxMCAyMCAwMSAxMSAyMSAwMiAxMikKLQlwc3JsZHEgICAgeG1tRyw4CTsgeG1tRz0oMjIgMDMgMTMgMjMgMDQgMTQgMjQgMDUgLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0pCisgICAgICAgIG1vdmRxYSAgICB4bW1HLHhtbUEKKyAgICAgICAgcHNsbGRxICAgIHhtbUEsOCAgICAgICAgOyB4bW1BPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAwMCAxMCAyMCAwMSAxMSAyMSAwMiAxMikKKyAgICAgICAgcHNybGRxICAgIHhtbUcsOCAgICAgICAgOyB4bW1HPSgyMiAwMyAxMyAyMyAwNCAxNCAyNCAwNSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSkKIAotCXB1bnBja2hidyB4bW1BLHhtbUYJOyB4bW1BPSgwMCAwOCAxMCAxOCAyMCAyOCAwMSAwOSAxMSAxOSAyMSAyOSAwMiAwQSAxMiAxQSkKLQlwc2xsZHEgICAgeG1tRiw4CTsgeG1tRj0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gMTUgMjUgMDYgMTYgMjYgMDcgMTcgMjcpCisgICAgICAgIHB1bnBja2hidyB4bW1BLHhtbUYgICAgIDsgeG1tQT0oMDAgMDggMTAgMTggMjAgMjggMDEgMDkgMTEgMTkgMjEgMjkgMDIgMEEgMTIgMUEpCisgICAgICAgIHBzbGxkcSAgICB4bW1GLDggICAgICAgIDsgeG1tRj0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gMTUgMjUgMDYgMTYgMjYgMDcgMTcgMjcpCiAKLQlwdW5wY2tsYncgeG1tRyx4bW1CCTsgeG1tRz0oMjIgMkEgMDMgMEIgMTMgMUIgMjMgMkIgMDQgMEMgMTQgMUMgMjQgMkMgMDUgMEQpCi0JcHVucGNraGJ3IHhtbUYseG1tQgk7IHhtbUY9KDE1IDFEIDI1IDJEIDA2IDBFIDE2IDFFIDI2IDJFIDA3IDBGIDE3IDFGIDI3IDJGKQorICAgICAgICBwdW5wY2tsYncgeG1tRyx4bW1CICAgICA7IHhtbUc9KDIyIDJBIDAzIDBCIDEzIDFCIDIzIDJCIDA0IDBDIDE0IDFDIDI0IDJDIDA1IDBEKQorICAgICAgICBwdW5wY2toYncgeG1tRix4bW1CICAgICA7IHhtbUY9KDE1IDFEIDI1IDJEIDA2IDBFIDE2IDFFIDI2IDJFIDA3IDBGIDE3IDFGIDI3IDJGKQogCi0JbW92ZHFhICAgIHhtbUQseG1tQQotCXBzbGxkcSAgICB4bW1BLDgJOyB4bW1BPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAwMCAwOCAxMCAxOCAyMCAyOCAwMSAwOSkKLQlwc3JsZHEgICAgeG1tRCw4CTsgeG1tRD0oMTEgMTkgMjEgMjkgMDIgMEEgMTIgMUEgLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0pCisgICAgICAgIG1vdmRxYSAgICB4bW1ELHhtbUEKKyAgICAgICAgcHNsbGRxICAgIHhtbUEsOCAgICAgICAgOyB4bW1BPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAwMCAwOCAxMCAxOCAyMCAyOCAwMSAwOSkKKyAgICAgICAgcHNybGRxICAgIHhtbUQsOCAgICAgICAgOyB4bW1EPSgxMSAxOSAyMSAyOSAwMiAwQSAxMiAxQSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSkKIAotCXB1bnBja2hidyB4bW1BLHhtbUcJOyB4bW1BPSgwMCAwNCAwOCAwQyAxMCAxNCAxOCAxQyAyMCAyNCAyOCAyQyAwMSAwNSAwOSAwRCkKLQlwc2xsZHEgICAgeG1tRyw4CTsgeG1tRz0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gMjIgMkEgMDMgMEIgMTMgMUIgMjMgMkIpCisgICAgICAgIHB1bnBja2hidyB4bW1BLHhtbUcgICAgIDsgeG1tQT0oMDAgMDQgMDggMEMgMTAgMTQgMTggMUMgMjAgMjQgMjggMkMgMDEgMDUgMDkgMEQpCisgICAgICAgIHBzbGxkcSAgICB4bW1HLDggICAgICAgIDsgeG1tRz0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gMjIgMkEgMDMgMEIgMTMgMUIgMjMgMkIpCiAKLQlwdW5wY2tsYncgeG1tRCx4bW1GCTsgeG1tRD0oMTEgMTUgMTkgMUQgMjEgMjUgMjkgMkQgMDIgMDYgMEEgMEUgMTIgMTYgMUEgMUUpCi0JcHVucGNraGJ3IHhtbUcseG1tRgk7IHhtbUc9KDIyIDI2IDJBIDJFIDAzIDA3IDBCIDBGIDEzIDE3IDFCIDFGIDIzIDI3IDJCIDJGKQorICAgICAgICBwdW5wY2tsYncgeG1tRCx4bW1GICAgICA7IHhtbUQ9KDExIDE1IDE5IDFEIDIxIDI1IDI5IDJEIDAyIDA2IDBBIDBFIDEyIDE2IDFBIDFFKQorICAgICAgICBwdW5wY2toYncgeG1tRyx4bW1GICAgICA7IHhtbUc9KDIyIDI2IDJBIDJFIDAzIDA3IDBCIDBGIDEzIDE3IDFCIDFGIDIzIDI3IDJCIDJGKQogCi0JbW92ZHFhICAgIHhtbUUseG1tQQotCXBzbGxkcSAgICB4bW1BLDgJOyB4bW1BPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAwMCAwNCAwOCAwQyAxMCAxNCAxOCAxQykKLQlwc3JsZHEgICAgeG1tRSw4CTsgeG1tRT0oMjAgMjQgMjggMkMgMDEgMDUgMDkgMEQgLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0pCisgICAgICAgIG1vdmRxYSAgICB4bW1FLHhtbUEKKyAgICAgICAgcHNsbGRxICAgIHhtbUEsOCAgICAgICAgOyB4bW1BPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAwMCAwNCAwOCAwQyAxMCAxNCAxOCAxQykKKyAgICAgICAgcHNybGRxICAgIHhtbUUsOCAgICAgICAgOyB4bW1FPSgyMCAyNCAyOCAyQyAwMSAwNSAwOSAwRCAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSkKIAotCXB1bnBja2hidyB4bW1BLHhtbUQJOyB4bW1BPSgwMCAwMiAwNCAwNiAwOCAwQSAwQyAwRSAxMCAxMiAxNCAxNiAxOCAxQSAxQyAxRSkKLQlwc2xsZHEgICAgeG1tRCw4CTsgeG1tRD0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gMTEgMTUgMTkgMUQgMjEgMjUgMjkgMkQpCisgICAgICAgIHB1bnBja2hidyB4bW1BLHhtbUQgICAgIDsgeG1tQT0oMDAgMDIgMDQgMDYgMDggMEEgMEMgMEUgMTAgMTIgMTQgMTYgMTggMUEgMUMgMUUpCisgICAgICAgIHBzbGxkcSAgICB4bW1ELDggICAgICAgIDsgeG1tRD0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gMTEgMTUgMTkgMUQgMjEgMjUgMjkgMkQpCiAKLQlwdW5wY2tsYncgeG1tRSx4bW1HCTsgeG1tRT0oMjAgMjIgMjQgMjYgMjggMkEgMkMgMkUgMDEgMDMgMDUgMDcgMDkgMEIgMEQgMEYpCi0JcHVucGNraGJ3IHhtbUQseG1tRwk7IHhtbUQ9KDExIDEzIDE1IDE3IDE5IDFCIDFEIDFGIDIxIDIzIDI1IDI3IDI5IDJCIDJEIDJGKQorICAgICAgICBwdW5wY2tsYncgeG1tRSx4bW1HICAgICA7IHhtbUU9KDIwIDIyIDI0IDI2IDI4IDJBIDJDIDJFIDAxIDAzIDA1IDA3IDA5IDBCIDBEIDBGKQorICAgICAgICBwdW5wY2toYncgeG1tRCx4bW1HICAgICA7IHhtbUQ9KDExIDEzIDE1IDE3IDE5IDFCIDFEIDFGIDIxIDIzIDI1IDI3IDI5IDJCIDJEIDJGKQogCi0JcHhvciAgICAgIHhtbUgseG1tSAorICAgICAgICBweG9yICAgICAgeG1tSCx4bW1ICiAKLQltb3ZkcWEgICAgeG1tQyx4bW1BCi0JcHVucGNrbGJ3IHhtbUEseG1tSAk7IHhtbUE9KDAwIDAyIDA0IDA2IDA4IDBBIDBDIDBFKQotCXB1bnBja2hidyB4bW1DLHhtbUgJOyB4bW1DPSgxMCAxMiAxNCAxNiAxOCAxQSAxQyAxRSkKKyAgICAgICAgbW92ZHFhICAgIHhtbUMseG1tQQorICAgICAgICBwdW5wY2tsYncgeG1tQSx4bW1IICAgICA7IHhtbUE9KDAwIDAyIDA0IDA2IDA4IDBBIDBDIDBFKQorICAgICAgICBwdW5wY2toYncgeG1tQyx4bW1IICAgICA7IHhtbUM9KDEwIDEyIDE0IDE2IDE4IDFBIDFDIDFFKQogCi0JbW92ZHFhICAgIHhtbUIseG1tRQotCXB1bnBja2xidyB4bW1FLHhtbUgJOyB4bW1FPSgyMCAyMiAyNCAyNiAyOCAyQSAyQyAyRSkKLQlwdW5wY2toYncgeG1tQix4bW1ICTsgeG1tQj0oMDEgMDMgMDUgMDcgMDkgMEIgMEQgMEYpCisgICAgICAgIG1vdmRxYSAgICB4bW1CLHhtbUUKKyAgICAgICAgcHVucGNrbGJ3IHhtbUUseG1tSCAgICAgOyB4bW1FPSgyMCAyMiAyNCAyNiAyOCAyQSAyQyAyRSkKKyAgICAgICAgcHVucGNraGJ3IHhtbUIseG1tSCAgICAgOyB4bW1CPSgwMSAwMyAwNSAwNyAwOSAwQiAwRCAwRikKIAotCW1vdmRxYSAgICB4bW1GLHhtbUQKLQlwdW5wY2tsYncgeG1tRCx4bW1ICTsgeG1tRD0oMTEgMTMgMTUgMTcgMTkgMUIgMUQgMUYpCi0JcHVucGNraGJ3IHhtbUYseG1tSAk7IHhtbUY9KDIxIDIzIDI1IDI3IDI5IDJCIDJEIDJGKQorICAgICAgICBtb3ZkcWEgICAgeG1tRix4bW1ECisgICAgICAgIHB1bnBja2xidyB4bW1ELHhtbUggICAgIDsgeG1tRD0oMTEgMTMgMTUgMTcgMTkgMUIgMUQgMUYpCisgICAgICAgIHB1bnBja2hidyB4bW1GLHhtbUggICAgIDsgeG1tRj0oMjEgMjMgMjUgMjcgMjkgMkIgMkQgMkYpCiAKICVlbHNlIDsgUkdCX1BJWEVMU0laRSA9PSA0IDsgLS0tLS0tLS0tLS0KIAogLmNvbHVtbl9sZDE6Ci0JdGVzdAljbCwgU0laRU9GX1hNTVdPUkQvMTYKLQlqeglzaG9ydCAuY29sdW1uX2xkMgotCXN1YglyY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQvMTYKLQltb3ZkCXhtbUEsIFhNTV9EV09SRCBbcnNpK3JjeCpSR0JfUElYRUxTSVpFXQorICAgICAgICB0ZXN0ICAgIGNsLCBTSVpFT0ZfWE1NV09SRC8xNgorICAgICAgICBqeiAgICAgIHNob3J0IC5jb2x1bW5fbGQyCisgICAgICAgIHN1YiAgICAgcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzE2CisgICAgICAgIG1vdmQgICAgeG1tQSwgWE1NX0RXT1JEIFtyc2krcmN4KlJHQl9QSVhFTFNJWkVdCiAuY29sdW1uX2xkMjoKLQl0ZXN0CWNsLCBTSVpFT0ZfWE1NV09SRC84Ci0JanoJc2hvcnQgLmNvbHVtbl9sZDQKLQlzdWIJcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzgKLQltb3ZxCXhtbUUsIFhNTV9NTVdPUkQgW3JzaStyY3gqUkdCX1BJWEVMU0laRV0KLQlwc2xsZHEJeG1tQSwgU0laRU9GX01NV09SRAotCXBvcgl4bW1BLHhtbUUKKyAgICAgICAgdGVzdCAgICBjbCwgU0laRU9GX1hNTVdPUkQvOAorICAgICAgICBqeiAgICAgIHNob3J0IC5jb2x1bW5fbGQ0CisgICAgICAgIHN1YiAgICAgcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzgKKyAgICAgICAgbW92cSAgICB4bW1FLCBYTU1fTU1XT1JEIFtyc2krcmN4KlJHQl9QSVhFTFNJWkVdCisgICAgICAgIHBzbGxkcSAgeG1tQSwgU0laRU9GX01NV09SRAorICAgICAgICBwb3IgICAgIHhtbUEseG1tRQogLmNvbHVtbl9sZDQ6Ci0JdGVzdAljbCwgU0laRU9GX1hNTVdPUkQvNAotCWp6CXNob3J0IC5jb2x1bW5fbGQ4Ci0Jc3ViCXJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC80Ci0JbW92ZHFhCXhtbUUseG1tQQotCW1vdmRxdQl4bW1BLCBYTU1XT1JEIFtyc2krcmN4KlJHQl9QSVhFTFNJWkVdCisgICAgICAgIHRlc3QgICAgY2wsIFNJWkVPRl9YTU1XT1JELzQKKyAgICAgICAganogICAgICBzaG9ydCAuY29sdW1uX2xkOAorICAgICAgICBzdWIgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC80CisgICAgICAgIG1vdmRxYSAgeG1tRSx4bW1BCisgICAgICAgIG1vdmRxdSAgeG1tQSwgWE1NV09SRCBbcnNpK3JjeCpSR0JfUElYRUxTSVpFXQogLmNvbHVtbl9sZDg6Ci0JdGVzdAljbCwgU0laRU9GX1hNTVdPUkQvMgotCW1vdglyY3gsIFNJWkVPRl9YTU1XT1JECi0JanoJc2hvcnQgLnJnYl95Y2NfY252Ci0JbW92ZHFhCXhtbUYseG1tQQotCW1vdmRxYQl4bW1ILHhtbUUKLQltb3ZkcXUJeG1tQSwgWE1NV09SRCBbcnNpKzAqU0laRU9GX1hNTVdPUkRdCi0JbW92ZHF1CXhtbUUsIFhNTVdPUkQgW3JzaSsxKlNJWkVPRl9YTU1XT1JEXQotCWptcAlzaG9ydCAucmdiX3ljY19jbnYKKyAgICAgICAgdGVzdCAgICBjbCwgU0laRU9GX1hNTVdPUkQvMgorICAgICAgICBtb3YgICAgIHJjeCwgU0laRU9GX1hNTVdPUkQKKyAgICAgICAganogICAgICBzaG9ydCAucmdiX3ljY19jbnYKKyAgICAgICAgbW92ZHFhICB4bW1GLHhtbUEKKyAgICAgICAgbW92ZHFhICB4bW1ILHhtbUUKKyAgICAgICAgbW92ZHF1ICB4bW1BLCBYTU1XT1JEIFtyc2krMCpTSVpFT0ZfWE1NV09SRF0KKyAgICAgICAgbW92ZHF1ICB4bW1FLCBYTU1XT1JEIFtyc2krMSpTSVpFT0ZfWE1NV09SRF0KKyAgICAgICAgam1wICAgICBzaG9ydCAucmdiX3ljY19jbnYKIAogLmNvbHVtbmxvb3A6Ci0JbW92ZHF1CXhtbUEsIFhNTVdPUkQgW3JzaSswKlNJWkVPRl9YTU1XT1JEXQotCW1vdmRxdQl4bW1FLCBYTU1XT1JEIFtyc2krMSpTSVpFT0ZfWE1NV09SRF0KLQltb3ZkcXUJeG1tRiwgWE1NV09SRCBbcnNpKzIqU0laRU9GX1hNTVdPUkRdCi0JbW92ZHF1CXhtbUgsIFhNTVdPUkQgW3JzaSszKlNJWkVPRl9YTU1XT1JEXQorICAgICAgICBtb3ZkcXUgIHhtbUEsIFhNTVdPUkQgW3JzaSswKlNJWkVPRl9YTU1XT1JEXQorICAgICAgICBtb3ZkcXUgIHhtbUUsIFhNTVdPUkQgW3JzaSsxKlNJWkVPRl9YTU1XT1JEXQorICAgICAgICBtb3ZkcXUgIHhtbUYsIFhNTVdPUkQgW3JzaSsyKlNJWkVPRl9YTU1XT1JEXQorICAgICAgICBtb3ZkcXUgIHhtbUgsIFhNTVdPUkQgW3JzaSszKlNJWkVPRl9YTU1XT1JEXQogCiAucmdiX3ljY19jbnY6Ci0JOyB4bW1BPSgwMCAxMCAyMCAzMCAwMSAxMSAyMSAzMSAwMiAxMiAyMiAzMiAwMyAxMyAyMyAzMykKLQk7IHhtbUU9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1IDA2IDE2IDI2IDM2IDA3IDE3IDI3IDM3KQotCTsgeG1tRj0oMDggMTggMjggMzggMDkgMTkgMjkgMzkgMEEgMUEgMkEgM0EgMEIgMUIgMkIgM0IpCi0JOyB4bW1IPSgwQyAxQyAyQyAzQyAwRCAxRCAyRCAzRCAwRSAxRSAyRSAzRSAwRiAxRiAyRiAzRikKKyAgICAgICAgOyB4bW1BPSgwMCAxMCAyMCAzMCAwMSAxMSAyMSAzMSAwMiAxMiAyMiAzMiAwMyAxMyAyMyAzMykKKyAgICAgICAgOyB4bW1FPSgwNCAxNCAyNCAzNCAwNSAxNSAyNSAzNSAwNiAxNiAyNiAzNiAwNyAxNyAyNyAzNykKKyAgICAgICAgOyB4bW1GPSgwOCAxOCAyOCAzOCAwOSAxOSAyOSAzOSAwQSAxQSAyQSAzQSAwQiAxQiAyQiAzQikKKyAgICAgICAgOyB4bW1IPSgwQyAxQyAyQyAzQyAwRCAxRCAyRCAzRCAwRSAxRSAyRSAzRSAwRiAxRiAyRiAzRikKIAotCW1vdmRxYSAgICB4bW1ELHhtbUEKLQlwdW5wY2tsYncgeG1tQSx4bW1FCTsgeG1tQT0oMDAgMDQgMTAgMTQgMjAgMjQgMzAgMzQgMDEgMDUgMTEgMTUgMjEgMjUgMzEgMzUpCi0JcHVucGNraGJ3IHhtbUQseG1tRQk7IHhtbUQ9KDAyIDA2IDEyIDE2IDIyIDI2IDMyIDM2IDAzIDA3IDEzIDE3IDIzIDI3IDMzIDM3KQorICAgICAgICBtb3ZkcWEgICAgeG1tRCx4bW1BCisgICAgICAgIHB1bnBja2xidyB4bW1BLHhtbUUgICAgIDsgeG1tQT0oMDAgMDQgMTAgMTQgMjAgMjQgMzAgMzQgMDEgMDUgMTEgMTUgMjEgMjUgMzEgMzUpCisgICAgICAgIHB1bnBja2hidyB4bW1ELHhtbUUgICAgIDsgeG1tRD0oMDIgMDYgMTIgMTYgMjIgMjYgMzIgMzYgMDMgMDcgMTMgMTcgMjMgMjcgMzMgMzcpCiAKLQltb3ZkcWEgICAgeG1tQyx4bW1GCi0JcHVucGNrbGJ3IHhtbUYseG1tSAk7IHhtbUY9KDA4IDBDIDE4IDFDIDI4IDJDIDM4IDNDIDA5IDBEIDE5IDFEIDI5IDJEIDM5IDNEKQotCXB1bnBja2hidyB4bW1DLHhtbUgJOyB4bW1DPSgwQSAwRSAxQSAxRSAyQSAyRSAzQSAzRSAwQiAwRiAxQiAxRiAyQiAyRiAzQiAzRikKKyAgICAgICAgbW92ZHFhICAgIHhtbUMseG1tRgorICAgICAgICBwdW5wY2tsYncgeG1tRix4bW1IICAgICA7IHhtbUY9KDA4IDBDIDE4IDFDIDI4IDJDIDM4IDNDIDA5IDBEIDE5IDFEIDI5IDJEIDM5IDNEKQorICAgICAgICBwdW5wY2toYncgeG1tQyx4bW1IICAgICA7IHhtbUM9KDBBIDBFIDFBIDFFIDJBIDJFIDNBIDNFIDBCIDBGIDFCIDFGIDJCIDJGIDNCIDNGKQogCi0JbW92ZHFhICAgIHhtbUIseG1tQQotCXB1bnBja2x3ZCB4bW1BLHhtbUYJOyB4bW1BPSgwMCAwNCAwOCAwQyAxMCAxNCAxOCAxQyAyMCAyNCAyOCAyQyAzMCAzNCAzOCAzQykKLQlwdW5wY2tod2QgeG1tQix4bW1GCTsgeG1tQj0oMDEgMDUgMDkgMEQgMTEgMTUgMTkgMUQgMjEgMjUgMjkgMkQgMzEgMzUgMzkgM0QpCisgICAgICAgIG1vdmRxYSAgICB4bW1CLHhtbUEKKyAgICAgICAgcHVucGNrbHdkIHhtbUEseG1tRiAgICAgOyB4bW1BPSgwMCAwNCAwOCAwQyAxMCAxNCAxOCAxQyAyMCAyNCAyOCAyQyAzMCAzNCAzOCAzQykKKyAgICAgICAgcHVucGNraHdkIHhtbUIseG1tRiAgICAgOyB4bW1CPSgwMSAwNSAwOSAwRCAxMSAxNSAxOSAxRCAyMSAyNSAyOSAyRCAzMSAzNSAzOSAzRCkKIAotCW1vdmRxYSAgICB4bW1HLHhtbUQKLQlwdW5wY2tsd2QgeG1tRCx4bW1DCTsgeG1tRD0oMDIgMDYgMEEgMEUgMTIgMTYgMUEgMUUgMjIgMjYgMkEgMkUgMzIgMzYgM0EgM0UpCi0JcHVucGNraHdkIHhtbUcseG1tQwk7IHhtbUc9KDAzIDA3IDBCIDBGIDEzIDE3IDFCIDFGIDIzIDI3IDJCIDJGIDMzIDM3IDNCIDNGKQorICAgICAgICBtb3ZkcWEgICAgeG1tRyx4bW1ECisgICAgICAgIHB1bnBja2x3ZCB4bW1ELHhtbUMgICAgIDsgeG1tRD0oMDIgMDYgMEEgMEUgMTIgMTYgMUEgMUUgMjIgMjYgMkEgMkUgMzIgMzYgM0EgM0UpCisgICAgICAgIHB1bnBja2h3ZCB4bW1HLHhtbUMgICAgIDsgeG1tRz0oMDMgMDcgMEIgMEYgMTMgMTcgMUIgMUYgMjMgMjcgMkIgMkYgMzMgMzcgM0IgM0YpCiAKLQltb3ZkcWEgICAgeG1tRSx4bW1BCi0JcHVucGNrbGJ3IHhtbUEseG1tRAk7IHhtbUE9KDAwIDAyIDA0IDA2IDA4IDBBIDBDIDBFIDEwIDEyIDE0IDE2IDE4IDFBIDFDIDFFKQotCXB1bnBja2hidyB4bW1FLHhtbUQJOyB4bW1FPSgyMCAyMiAyNCAyNiAyOCAyQSAyQyAyRSAzMCAzMiAzNCAzNiAzOCAzQSAzQyAzRSkKKyAgICAgICAgbW92ZHFhICAgIHhtbUUseG1tQQorICAgICAgICBwdW5wY2tsYncgeG1tQSx4bW1EICAgICA7IHhtbUE9KDAwIDAyIDA0IDA2IDA4IDBBIDBDIDBFIDEwIDEyIDE0IDE2IDE4IDFBIDFDIDFFKQorICAgICAgICBwdW5wY2toYncgeG1tRSx4bW1EICAgICA7IHhtbUU9KDIwIDIyIDI0IDI2IDI4IDJBIDJDIDJFIDMwIDMyIDM0IDM2IDM4IDNBIDNDIDNFKQogCi0JbW92ZHFhICAgIHhtbUgseG1tQgotCXB1bnBja2xidyB4bW1CLHhtbUcJOyB4bW1CPSgwMSAwMyAwNSAwNyAwOSAwQiAwRCAwRiAxMSAxMyAxNSAxNyAxOSAxQiAxRCAxRikKLQlwdW5wY2toYncgeG1tSCx4bW1HCTsgeG1tSD0oMjEgMjMgMjUgMjcgMjkgMkIgMkQgMkYgMzEgMzMgMzUgMzcgMzkgM0IgM0QgM0YpCisgICAgICAgIG1vdmRxYSAgICB4bW1ILHhtbUIKKyAgICAgICAgcHVucGNrbGJ3IHhtbUIseG1tRyAgICAgOyB4bW1CPSgwMSAwMyAwNSAwNyAwOSAwQiAwRCAwRiAxMSAxMyAxNSAxNyAxOSAxQiAxRCAxRikKKyAgICAgICAgcHVucGNraGJ3IHhtbUgseG1tRyAgICAgOyB4bW1IPSgyMSAyMyAyNSAyNyAyOSAyQiAyRCAyRiAzMSAzMyAzNSAzNyAzOSAzQiAzRCAzRikKIAotCXB4b3IgICAgICB4bW1GLHhtbUYKKyAgICAgICAgcHhvciAgICAgIHhtbUYseG1tRgogCi0JbW92ZHFhICAgIHhtbUMseG1tQQotCXB1bnBja2xidyB4bW1BLHhtbUYJOyB4bW1BPSgwMCAwMiAwNCAwNiAwOCAwQSAwQyAwRSkKLQlwdW5wY2toYncgeG1tQyx4bW1GCTsgeG1tQz0oMTAgMTIgMTQgMTYgMTggMUEgMUMgMUUpCisgICAgICAgIG1vdmRxYSAgICB4bW1DLHhtbUEKKyAgICAgICAgcHVucGNrbGJ3IHhtbUEseG1tRiAgICAgOyB4bW1BPSgwMCAwMiAwNCAwNiAwOCAwQSAwQyAwRSkKKyAgICAgICAgcHVucGNraGJ3IHhtbUMseG1tRiAgICAgOyB4bW1DPSgxMCAxMiAxNCAxNiAxOCAxQSAxQyAxRSkKIAotCW1vdmRxYSAgICB4bW1ELHhtbUIKLQlwdW5wY2tsYncgeG1tQix4bW1GCTsgeG1tQj0oMDEgMDMgMDUgMDcgMDkgMEIgMEQgMEYpCi0JcHVucGNraGJ3IHhtbUQseG1tRgk7IHhtbUQ9KDExIDEzIDE1IDE3IDE5IDFCIDFEIDFGKQorICAgICAgICBtb3ZkcWEgICAgeG1tRCx4bW1CCisgICAgICAgIHB1bnBja2xidyB4bW1CLHhtbUYgICAgIDsgeG1tQj0oMDEgMDMgMDUgMDcgMDkgMEIgMEQgMEYpCisgICAgICAgIHB1bnBja2hidyB4bW1ELHhtbUYgICAgIDsgeG1tRD0oMTEgMTMgMTUgMTcgMTkgMUIgMUQgMUYpCiAKLQltb3ZkcWEgICAgeG1tRyx4bW1FCi0JcHVucGNrbGJ3IHhtbUUseG1tRgk7IHhtbUU9KDIwIDIyIDI0IDI2IDI4IDJBIDJDIDJFKQotCXB1bnBja2hidyB4bW1HLHhtbUYJOyB4bW1HPSgzMCAzMiAzNCAzNiAzOCAzQSAzQyAzRSkKKyAgICAgICAgbW92ZHFhICAgIHhtbUcseG1tRQorICAgICAgICBwdW5wY2tsYncgeG1tRSx4bW1GICAgICA7IHhtbUU9KDIwIDIyIDI0IDI2IDI4IDJBIDJDIDJFKQorICAgICAgICBwdW5wY2toYncgeG1tRyx4bW1GICAgICA7IHhtbUc9KDMwIDMyIDM0IDM2IDM4IDNBIDNDIDNFKQogCi0JcHVucGNrbGJ3IHhtbUYseG1tSAotCXB1bnBja2hidyB4bW1ILHhtbUgKLQlwc3JsdyAgICAgeG1tRixCWVRFX0JJVAk7IHhtbUY9KDIxIDIzIDI1IDI3IDI5IDJCIDJEIDJGKQotCXBzcmx3ICAgICB4bW1ILEJZVEVfQklUCTsgeG1tSD0oMzEgMzMgMzUgMzcgMzkgM0IgM0QgM0YpCisgICAgICAgIHB1bnBja2xidyB4bW1GLHhtbUgKKyAgICAgICAgcHVucGNraGJ3IHhtbUgseG1tSAorICAgICAgICBwc3JsdyAgICAgeG1tRixCWVRFX0JJVCA7IHhtbUY9KDIxIDIzIDI1IDI3IDI5IDJCIDJEIDJGKQorICAgICAgICBwc3JsdyAgICAgeG1tSCxCWVRFX0JJVCA7IHhtbUg9KDMxIDMzIDM1IDM3IDM5IDNCIDNEIDNGKQogCiAlZW5kaWYgOyBSR0JfUElYRUxTSVpFIDsgLS0tLS0tLS0tLS0tLS0tCiAKLQk7IHhtbTA9UigwMjQ2OEFDRSk9UkUsIHhtbTI9RygwMjQ2OEFDRSk9R0UsIHhtbTQ9QigwMjQ2OEFDRSk9QkUKLQk7IHhtbTE9UigxMzU3OUJERik9Uk8sIHhtbTM9RygxMzU3OUJERik9R08sIHhtbTU9QigxMzU3OUJERik9Qk8KKyAgICAgICAgOyB4bW0wPVIoMDI0NjhBQ0UpPVJFLCB4bW0yPUcoMDI0NjhBQ0UpPUdFLCB4bW00PUIoMDI0NjhBQ0UpPUJFCisgICAgICAgIDsgeG1tMT1SKDEzNTc5QkRGKT1STywgeG1tMz1HKDEzNTc5QkRGKT1HTywgeG1tNT1CKDEzNTc5QkRGKT1CTwogCi0JOyAoT3JpZ2luYWwpCi0JOyBZICA9ICAwLjI5OTAwICogUiArIDAuNTg3MDAgKiBHICsgMC4xMTQwMCAqIEIKLQk7IENiID0gLTAuMTY4NzQgKiBSIC0gMC4zMzEyNiAqIEcgKyAwLjUwMDAwICogQiArIENFTlRFUkpTQU1QTEUKLQk7IENyID0gIDAuNTAwMDAgKiBSIC0gMC40MTg2OSAqIEcgLSAwLjA4MTMxICogQiArIENFTlRFUkpTQU1QTEUKLQk7Ci0JOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKLQk7IFkgID0gIDAuMjk5MDAgKiBSICsgMC4zMzcwMCAqIEcgKyAwLjExNDAwICogQiArIDAuMjUwMDAgKiBHCi0JOyBDYiA9IC0wLjE2ODc0ICogUiAtIDAuMzMxMjYgKiBHICsgMC41MDAwMCAqIEIgKyBDRU5URVJKU0FNUExFCi0JOyBDciA9ICAwLjUwMDAwICogUiAtIDAuNDE4NjkgKiBHIC0gMC4wODEzMSAqIEIgKyBDRU5URVJKU0FNUExFCisgICAgICAgIDsgKE9yaWdpbmFsKQorICAgICAgICA7IFkgID0gIDAuMjk5MDAgKiBSICsgMC41ODcwMCAqIEcgKyAwLjExNDAwICogQgorICAgICAgICA7IENiID0gLTAuMTY4NzQgKiBSIC0gMC4zMzEyNiAqIEcgKyAwLjUwMDAwICogQiArIENFTlRFUkpTQU1QTEUKKyAgICAgICAgOyBDciA9ICAwLjUwMDAwICogUiAtIDAuNDE4NjkgKiBHIC0gMC4wODEzMSAqIEIgKyBDRU5URVJKU0FNUExFCisgICAgICAgIDsKKyAgICAgICAgOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKyAgICAgICAgOyBZICA9ICAwLjI5OTAwICogUiArIDAuMzM3MDAgKiBHICsgMC4xMTQwMCAqIEIgKyAwLjI1MDAwICogRworICAgICAgICA7IENiID0gLTAuMTY4NzQgKiBSIC0gMC4zMzEyNiAqIEcgKyAwLjUwMDAwICogQiArIENFTlRFUkpTQU1QTEUKKyAgICAgICAgOyBDciA9ICAwLjUwMDAwICogUiAtIDAuNDE4NjkgKiBHIC0gMC4wODEzMSAqIEIgKyBDRU5URVJKU0FNUExFCiAKLQltb3ZkcWEgICAgWE1NV09SRCBbd2soMCldLCB4bW0wCTsgd2soMCk9UkUKLQltb3ZkcWEgICAgWE1NV09SRCBbd2soMSldLCB4bW0xCTsgd2soMSk9Uk8KLQltb3ZkcWEgICAgWE1NV09SRCBbd2soMildLCB4bW00CTsgd2soMik9QkUKLQltb3ZkcWEgICAgWE1NV09SRCBbd2soMyldLCB4bW01CTsgd2soMyk9Qk8KKyAgICAgICAgbW92ZHFhICAgIFhNTVdPUkQgW3drKDApXSwgeG1tMCA7IHdrKDApPVJFCisgICAgICAgIG1vdmRxYSAgICBYTU1XT1JEIFt3aygxKV0sIHhtbTEgOyB3aygxKT1STworICAgICAgICBtb3ZkcWEgICAgWE1NV09SRCBbd2soMildLCB4bW00IDsgd2soMik9QkUKKyAgICAgICAgbW92ZHFhICAgIFhNTVdPUkQgW3drKDMpXSwgeG1tNSA7IHdrKDMpPUJPCiAKLQltb3ZkcWEgICAgeG1tNix4bW0xCi0JcHVucGNrbHdkIHhtbTEseG1tMwotCXB1bnBja2h3ZCB4bW02LHhtbTMKLQltb3ZkcWEgICAgeG1tNyx4bW0xCi0JbW92ZHFhICAgIHhtbTQseG1tNgotCXBtYWRkd2QgICB4bW0xLFtyZWwgUFdfRjAyOTlfRjAzMzddIDsgeG1tMT1ST0wqRklYKDAuMjk5KStHT0wqRklYKDAuMzM3KQotCXBtYWRkd2QgICB4bW02LFtyZWwgUFdfRjAyOTlfRjAzMzddIDsgeG1tNj1ST0gqRklYKDAuMjk5KStHT0gqRklYKDAuMzM3KQotCXBtYWRkd2QgICB4bW03LFtyZWwgUFdfTUYwMTZfTUYwMzNdIDsgeG1tNz1ST0wqLUZJWCgwLjE2OCkrR09MKi1GSVgoMC4zMzEpCi0JcG1hZGR3ZCAgIHhtbTQsW3JlbCBQV19NRjAxNl9NRjAzM10gOyB4bW00PVJPSCotRklYKDAuMTY4KStHT0gqLUZJWCgwLjMzMSkKKyAgICAgICAgbW92ZHFhICAgIHhtbTYseG1tMQorICAgICAgICBwdW5wY2tsd2QgeG1tMSx4bW0zCisgICAgICAgIHB1bnBja2h3ZCB4bW02LHhtbTMKKyAgICAgICAgbW92ZHFhICAgIHhtbTcseG1tMQorICAgICAgICBtb3ZkcWEgICAgeG1tNCx4bW02CisgICAgICAgIHBtYWRkd2QgICB4bW0xLFtyZWwgUFdfRjAyOTlfRjAzMzddIDsgeG1tMT1ST0wqRklYKDAuMjk5KStHT0wqRklYKDAuMzM3KQorICAgICAgICBwbWFkZHdkICAgeG1tNixbcmVsIFBXX0YwMjk5X0YwMzM3XSA7IHhtbTY9Uk9IKkZJWCgwLjI5OSkrR09IKkZJWCgwLjMzNykKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTcsW3JlbCBQV19NRjAxNl9NRjAzM10gOyB4bW03PVJPTCotRklYKDAuMTY4KStHT0wqLUZJWCgwLjMzMSkKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTQsW3JlbCBQV19NRjAxNl9NRjAzM10gOyB4bW00PVJPSCotRklYKDAuMTY4KStHT0gqLUZJWCgwLjMzMSkKIAotCW1vdmRxYSAgICBYTU1XT1JEIFt3ayg0KV0sIHhtbTEJOyB3ayg0KT1ST0wqRklYKDAuMjk5KStHT0wqRklYKDAuMzM3KQotCW1vdmRxYSAgICBYTU1XT1JEIFt3ayg1KV0sIHhtbTYJOyB3ayg1KT1ST0gqRklYKDAuMjk5KStHT0gqRklYKDAuMzM3KQorICAgICAgICBtb3ZkcWEgICAgWE1NV09SRCBbd2soNCldLCB4bW0xIDsgd2soNCk9Uk9MKkZJWCgwLjI5OSkrR09MKkZJWCgwLjMzNykKKyAgICAgICAgbW92ZHFhICAgIFhNTVdPUkQgW3drKDUpXSwgeG1tNiA7IHdrKDUpPVJPSCpGSVgoMC4yOTkpK0dPSCpGSVgoMC4zMzcpCiAKLQlweG9yICAgICAgeG1tMSx4bW0xCi0JcHhvciAgICAgIHhtbTYseG1tNgotCXB1bnBja2x3ZCB4bW0xLHhtbTUJCTsgeG1tMT1CT0wKLQlwdW5wY2tod2QgeG1tNix4bW01CQk7IHhtbTY9Qk9ICi0JcHNybGQgICAgIHhtbTEsMQkJOyB4bW0xPUJPTCpGSVgoMC41MDApCi0JcHNybGQgICAgIHhtbTYsMQkJOyB4bW02PUJPSCpGSVgoMC41MDApCisgICAgICAgIHB4b3IgICAgICB4bW0xLHhtbTEKKyAgICAgICAgcHhvciAgICAgIHhtbTYseG1tNgorICAgICAgICBwdW5wY2tsd2QgeG1tMSx4bW01ICAgICAgICAgICAgIDsgeG1tMT1CT0wKKyAgICAgICAgcHVucGNraHdkIHhtbTYseG1tNSAgICAgICAgICAgICA7IHhtbTY9Qk9ICisgICAgICAgIHBzcmxkICAgICB4bW0xLDEgICAgICAgICAgICAgICAgOyB4bW0xPUJPTCpGSVgoMC41MDApCisgICAgICAgIHBzcmxkICAgICB4bW02LDEgICAgICAgICAgICAgICAgOyB4bW02PUJPSCpGSVgoMC41MDApCiAKLQltb3ZkcWEgICAgeG1tNSxbcmVsIFBEX09ORUhBTEZNMV9DSl0gOyB4bW01PVtQRF9PTkVIQUxGTTFfQ0pdCisgICAgICAgIG1vdmRxYSAgICB4bW01LFtyZWwgUERfT05FSEFMRk0xX0NKXSA7IHhtbTU9W1BEX09ORUhBTEZNMV9DSl0KIAotCXBhZGRkICAgICB4bW03LHhtbTEKLQlwYWRkZCAgICAgeG1tNCx4bW02Ci0JcGFkZGQgICAgIHhtbTcseG1tNQotCXBhZGRkICAgICB4bW00LHhtbTUKLQlwc3JsZCAgICAgeG1tNyxTQ0FMRUJJVFMJOyB4bW03PUNiT0wKLQlwc3JsZCAgICAgeG1tNCxTQ0FMRUJJVFMJOyB4bW00PUNiT0gKLQlwYWNrc3NkdyAgeG1tNyx4bW00CQk7IHhtbTc9Q2JPCisgICAgICAgIHBhZGRkICAgICB4bW03LHhtbTEKKyAgICAgICAgcGFkZGQgICAgIHhtbTQseG1tNgorICAgICAgICBwYWRkZCAgICAgeG1tNyx4bW01CisgICAgICAgIHBhZGRkICAgICB4bW00LHhtbTUKKyAgICAgICAgcHNybGQgICAgIHhtbTcsU0NBTEVCSVRTICAgICAgICA7IHhtbTc9Q2JPTAorICAgICAgICBwc3JsZCAgICAgeG1tNCxTQ0FMRUJJVFMgICAgICAgIDsgeG1tND1DYk9ICisgICAgICAgIHBhY2tzc2R3ICB4bW03LHhtbTQgICAgICAgICAgICAgOyB4bW03PUNiTwogCi0JbW92ZHFhICAgIHhtbTEsIFhNTVdPUkQgW3drKDIpXQk7IHhtbTE9QkUKKyAgICAgICAgbW92ZHFhICAgIHhtbTEsIFhNTVdPUkQgW3drKDIpXSA7IHhtbTE9QkUKIAotCW1vdmRxYSAgICB4bW02LHhtbTAKLQlwdW5wY2tsd2QgeG1tMCx4bW0yCi0JcHVucGNraHdkIHhtbTYseG1tMgotCW1vdmRxYSAgICB4bW01LHhtbTAKLQltb3ZkcWEgICAgeG1tNCx4bW02Ci0JcG1hZGR3ZCAgIHhtbTAsW3JlbCBQV19GMDI5OV9GMDMzN10gOyB4bW0wPVJFTCpGSVgoMC4yOTkpK0dFTCpGSVgoMC4zMzcpCi0JcG1hZGR3ZCAgIHhtbTYsW3JlbCBQV19GMDI5OV9GMDMzN10gOyB4bW02PVJFSCpGSVgoMC4yOTkpK0dFSCpGSVgoMC4zMzcpCi0JcG1hZGR3ZCAgIHhtbTUsW3JlbCBQV19NRjAxNl9NRjAzM10gOyB4bW01PVJFTCotRklYKDAuMTY4KStHRUwqLUZJWCgwLjMzMSkKLQlwbWFkZHdkICAgeG1tNCxbcmVsIFBXX01GMDE2X01GMDMzXSA7IHhtbTQ9UkVIKi1GSVgoMC4xNjgpK0dFSCotRklYKDAuMzMxKQorICAgICAgICBtb3ZkcWEgICAgeG1tNix4bW0wCisgICAgICAgIHB1bnBja2x3ZCB4bW0wLHhtbTIKKyAgICAgICAgcHVucGNraHdkIHhtbTYseG1tMgorICAgICAgICBtb3ZkcWEgICAgeG1tNSx4bW0wCisgICAgICAgIG1vdmRxYSAgICB4bW00LHhtbTYKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTAsW3JlbCBQV19GMDI5OV9GMDMzN10gOyB4bW0wPVJFTCpGSVgoMC4yOTkpK0dFTCpGSVgoMC4zMzcpCisgICAgICAgIHBtYWRkd2QgICB4bW02LFtyZWwgUFdfRjAyOTlfRjAzMzddIDsgeG1tNj1SRUgqRklYKDAuMjk5KStHRUgqRklYKDAuMzM3KQorICAgICAgICBwbWFkZHdkICAgeG1tNSxbcmVsIFBXX01GMDE2X01GMDMzXSA7IHhtbTU9UkVMKi1GSVgoMC4xNjgpK0dFTCotRklYKDAuMzMxKQorICAgICAgICBwbWFkZHdkICAgeG1tNCxbcmVsIFBXX01GMDE2X01GMDMzXSA7IHhtbTQ9UkVIKi1GSVgoMC4xNjgpK0dFSCotRklYKDAuMzMxKQogCi0JbW92ZHFhICAgIFhNTVdPUkQgW3drKDYpXSwgeG1tMAk7IHdrKDYpPVJFTCpGSVgoMC4yOTkpK0dFTCpGSVgoMC4zMzcpCi0JbW92ZHFhICAgIFhNTVdPUkQgW3drKDcpXSwgeG1tNgk7IHdrKDcpPVJFSCpGSVgoMC4yOTkpK0dFSCpGSVgoMC4zMzcpCisgICAgICAgIG1vdmRxYSAgICBYTU1XT1JEIFt3ayg2KV0sIHhtbTAgOyB3ayg2KT1SRUwqRklYKDAuMjk5KStHRUwqRklYKDAuMzM3KQorICAgICAgICBtb3ZkcWEgICAgWE1NV09SRCBbd2soNyldLCB4bW02IDsgd2soNyk9UkVIKkZJWCgwLjI5OSkrR0VIKkZJWCgwLjMzNykKIAotCXB4b3IgICAgICB4bW0wLHhtbTAKLQlweG9yICAgICAgeG1tNix4bW02Ci0JcHVucGNrbHdkIHhtbTAseG1tMQkJOyB4bW0wPUJFTAotCXB1bnBja2h3ZCB4bW02LHhtbTEJCTsgeG1tNj1CRUgKLQlwc3JsZCAgICAgeG1tMCwxCQk7IHhtbTA9QkVMKkZJWCgwLjUwMCkKLQlwc3JsZCAgICAgeG1tNiwxCQk7IHhtbTY9QkVIKkZJWCgwLjUwMCkKKyAgICAgICAgcHhvciAgICAgIHhtbTAseG1tMAorICAgICAgICBweG9yICAgICAgeG1tNix4bW02CisgICAgICAgIHB1bnBja2x3ZCB4bW0wLHhtbTEgICAgICAgICAgICAgOyB4bW0wPUJFTAorICAgICAgICBwdW5wY2tod2QgeG1tNix4bW0xICAgICAgICAgICAgIDsgeG1tNj1CRUgKKyAgICAgICAgcHNybGQgICAgIHhtbTAsMSAgICAgICAgICAgICAgICA7IHhtbTA9QkVMKkZJWCgwLjUwMCkKKyAgICAgICAgcHNybGQgICAgIHhtbTYsMSAgICAgICAgICAgICAgICA7IHhtbTY9QkVIKkZJWCgwLjUwMCkKIAotCW1vdmRxYSAgICB4bW0xLFtyZWwgUERfT05FSEFMRk0xX0NKXSA7IHhtbTE9W1BEX09ORUhBTEZNMV9DSl0KKyAgICAgICAgbW92ZHFhICAgIHhtbTEsW3JlbCBQRF9PTkVIQUxGTTFfQ0pdIDsgeG1tMT1bUERfT05FSEFMRk0xX0NKXQogCi0JcGFkZGQgICAgIHhtbTUseG1tMAotCXBhZGRkICAgICB4bW00LHhtbTYKLQlwYWRkZCAgICAgeG1tNSx4bW0xCi0JcGFkZGQgICAgIHhtbTQseG1tMQotCXBzcmxkICAgICB4bW01LFNDQUxFQklUUwk7IHhtbTU9Q2JFTAotCXBzcmxkICAgICB4bW00LFNDQUxFQklUUwk7IHhtbTQ9Q2JFSAotCXBhY2tzc2R3ICB4bW01LHhtbTQJCTsgeG1tNT1DYkUKKyAgICAgICAgcGFkZGQgICAgIHhtbTUseG1tMAorICAgICAgICBwYWRkZCAgICAgeG1tNCx4bW02CisgICAgICAgIHBhZGRkICAgICB4bW01LHhtbTEKKyAgICAgICAgcGFkZGQgICAgIHhtbTQseG1tMQorICAgICAgICBwc3JsZCAgICAgeG1tNSxTQ0FMRUJJVFMgICAgICAgIDsgeG1tNT1DYkVMCisgICAgICAgIHBzcmxkICAgICB4bW00LFNDQUxFQklUUyAgICAgICAgOyB4bW00PUNiRUgKKyAgICAgICAgcGFja3NzZHcgIHhtbTUseG1tNCAgICAgICAgICAgICA7IHhtbTU9Q2JFCiAKLQlwc2xsdyAgICAgeG1tNyxCWVRFX0JJVAotCXBvciAgICAgICB4bW01LHhtbTcJCTsgeG1tNT1DYgotCW1vdmRxYSAgICBYTU1XT1JEIFtyYnhdLCB4bW01CTsgU2F2ZSBDYgorICAgICAgICBwc2xsdyAgICAgeG1tNyxCWVRFX0JJVAorICAgICAgICBwb3IgICAgICAgeG1tNSx4bW03ICAgICAgICAgICAgIDsgeG1tNT1DYgorICAgICAgICBtb3ZkcWEgICAgWE1NV09SRCBbcmJ4XSwgeG1tNSAgIDsgU2F2ZSBDYgogCi0JbW92ZHFhICAgIHhtbTAsIFhNTVdPUkQgW3drKDMpXQk7IHhtbTA9Qk8KLQltb3ZkcWEgICAgeG1tNiwgWE1NV09SRCBbd2soMildCTsgeG1tNj1CRQotCW1vdmRxYSAgICB4bW0xLCBYTU1XT1JEIFt3aygxKV0JOyB4bW0xPVJPCisgICAgICAgIG1vdmRxYSAgICB4bW0wLCBYTU1XT1JEIFt3aygzKV0gOyB4bW0wPUJPCisgICAgICAgIG1vdmRxYSAgICB4bW02LCBYTU1XT1JEIFt3aygyKV0gOyB4bW02PUJFCisgICAgICAgIG1vdmRxYSAgICB4bW0xLCBYTU1XT1JEIFt3aygxKV0gOyB4bW0xPVJPCiAKLQltb3ZkcWEgICAgeG1tNCx4bW0wCi0JcHVucGNrbHdkIHhtbTAseG1tMwotCXB1bnBja2h3ZCB4bW00LHhtbTMKLQltb3ZkcWEgICAgeG1tNyx4bW0wCi0JbW92ZHFhICAgIHhtbTUseG1tNAotCXBtYWRkd2QgICB4bW0wLFtyZWwgUFdfRjAxMTRfRjAyNTBdIDsgeG1tMD1CT0wqRklYKDAuMTE0KStHT0wqRklYKDAuMjUwKQotCXBtYWRkd2QgICB4bW00LFtyZWwgUFdfRjAxMTRfRjAyNTBdIDsgeG1tND1CT0gqRklYKDAuMTE0KStHT0gqRklYKDAuMjUwKQotCXBtYWRkd2QgICB4bW03LFtyZWwgUFdfTUYwMDhfTUYwNDFdIDsgeG1tNz1CT0wqLUZJWCgwLjA4MSkrR09MKi1GSVgoMC40MTgpCi0JcG1hZGR3ZCAgIHhtbTUsW3JlbCBQV19NRjAwOF9NRjA0MV0gOyB4bW01PUJPSCotRklYKDAuMDgxKStHT0gqLUZJWCgwLjQxOCkKKyAgICAgICAgbW92ZHFhICAgIHhtbTQseG1tMAorICAgICAgICBwdW5wY2tsd2QgeG1tMCx4bW0zCisgICAgICAgIHB1bnBja2h3ZCB4bW00LHhtbTMKKyAgICAgICAgbW92ZHFhICAgIHhtbTcseG1tMAorICAgICAgICBtb3ZkcWEgICAgeG1tNSx4bW00CisgICAgICAgIHBtYWRkd2QgICB4bW0wLFtyZWwgUFdfRjAxMTRfRjAyNTBdIDsgeG1tMD1CT0wqRklYKDAuMTE0KStHT0wqRklYKDAuMjUwKQorICAgICAgICBwbWFkZHdkICAgeG1tNCxbcmVsIFBXX0YwMTE0X0YwMjUwXSA7IHhtbTQ9Qk9IKkZJWCgwLjExNCkrR09IKkZJWCgwLjI1MCkKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTcsW3JlbCBQV19NRjAwOF9NRjA0MV0gOyB4bW03PUJPTCotRklYKDAuMDgxKStHT0wqLUZJWCgwLjQxOCkKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTUsW3JlbCBQV19NRjAwOF9NRjA0MV0gOyB4bW01PUJPSCotRklYKDAuMDgxKStHT0gqLUZJWCgwLjQxOCkKIAotCW1vdmRxYSAgICB4bW0zLFtyZWwgUERfT05FSEFMRl0JOyB4bW0zPVtQRF9PTkVIQUxGXQorICAgICAgICBtb3ZkcWEgICAgeG1tMyxbcmVsIFBEX09ORUhBTEZdIDsgeG1tMz1bUERfT05FSEFMRl0KIAotCXBhZGRkICAgICB4bW0wLCBYTU1XT1JEIFt3ayg0KV0KLQlwYWRkZCAgICAgeG1tNCwgWE1NV09SRCBbd2soNSldCi0JcGFkZGQgICAgIHhtbTAseG1tMwotCXBhZGRkICAgICB4bW00LHhtbTMKLQlwc3JsZCAgICAgeG1tMCxTQ0FMRUJJVFMJOyB4bW0wPVlPTAotCXBzcmxkICAgICB4bW00LFNDQUxFQklUUwk7IHhtbTQ9WU9ICi0JcGFja3NzZHcgIHhtbTAseG1tNAkJOyB4bW0wPVlPCisgICAgICAgIHBhZGRkICAgICB4bW0wLCBYTU1XT1JEIFt3ayg0KV0KKyAgICAgICAgcGFkZGQgICAgIHhtbTQsIFhNTVdPUkQgW3drKDUpXQorICAgICAgICBwYWRkZCAgICAgeG1tMCx4bW0zCisgICAgICAgIHBhZGRkICAgICB4bW00LHhtbTMKKyAgICAgICAgcHNybGQgICAgIHhtbTAsU0NBTEVCSVRTICAgICAgICA7IHhtbTA9WU9MCisgICAgICAgIHBzcmxkICAgICB4bW00LFNDQUxFQklUUyAgICAgICAgOyB4bW00PVlPSAorICAgICAgICBwYWNrc3NkdyAgeG1tMCx4bW00ICAgICAgICAgICAgIDsgeG1tMD1ZTwogCi0JcHhvciAgICAgIHhtbTMseG1tMwotCXB4b3IgICAgICB4bW00LHhtbTQKLQlwdW5wY2tsd2QgeG1tMyx4bW0xCQk7IHhtbTM9Uk9MCi0JcHVucGNraHdkIHhtbTQseG1tMQkJOyB4bW00PVJPSAotCXBzcmxkICAgICB4bW0zLDEJCTsgeG1tMz1ST0wqRklYKDAuNTAwKQotCXBzcmxkICAgICB4bW00LDEJCTsgeG1tND1ST0gqRklYKDAuNTAwKQorICAgICAgICBweG9yICAgICAgeG1tMyx4bW0zCisgICAgICAgIHB4b3IgICAgICB4bW00LHhtbTQKKyAgICAgICAgcHVucGNrbHdkIHhtbTMseG1tMSAgICAgICAgICAgICA7IHhtbTM9Uk9MCisgICAgICAgIHB1bnBja2h3ZCB4bW00LHhtbTEgICAgICAgICAgICAgOyB4bW00PVJPSAorICAgICAgICBwc3JsZCAgICAgeG1tMywxICAgICAgICAgICAgICAgIDsgeG1tMz1ST0wqRklYKDAuNTAwKQorICAgICAgICBwc3JsZCAgICAgeG1tNCwxICAgICAgICAgICAgICAgIDsgeG1tND1ST0gqRklYKDAuNTAwKQogCi0JbW92ZHFhICAgIHhtbTEsW3JlbCBQRF9PTkVIQUxGTTFfQ0pdIDsgeG1tMT1bUERfT05FSEFMRk0xX0NKXQorICAgICAgICBtb3ZkcWEgICAgeG1tMSxbcmVsIFBEX09ORUhBTEZNMV9DSl0gOyB4bW0xPVtQRF9PTkVIQUxGTTFfQ0pdCiAKLQlwYWRkZCAgICAgeG1tNyx4bW0zCi0JcGFkZGQgICAgIHhtbTUseG1tNAotCXBhZGRkICAgICB4bW03LHhtbTEKLQlwYWRkZCAgICAgeG1tNSx4bW0xCi0JcHNybGQgICAgIHhtbTcsU0NBTEVCSVRTCTsgeG1tNz1Dck9MCi0JcHNybGQgICAgIHhtbTUsU0NBTEVCSVRTCTsgeG1tNT1Dck9ICi0JcGFja3NzZHcgIHhtbTcseG1tNQkJOyB4bW03PUNyTworICAgICAgICBwYWRkZCAgICAgeG1tNyx4bW0zCisgICAgICAgIHBhZGRkICAgICB4bW01LHhtbTQKKyAgICAgICAgcGFkZGQgICAgIHhtbTcseG1tMQorICAgICAgICBwYWRkZCAgICAgeG1tNSx4bW0xCisgICAgICAgIHBzcmxkICAgICB4bW03LFNDQUxFQklUUyAgICAgICAgOyB4bW03PUNyT0wKKyAgICAgICAgcHNybGQgICAgIHhtbTUsU0NBTEVCSVRTICAgICAgICA7IHhtbTU9Q3JPSAorICAgICAgICBwYWNrc3NkdyAgeG1tNyx4bW01ICAgICAgICAgICAgIDsgeG1tNz1Dck8KIAotCW1vdmRxYSAgICB4bW0zLCBYTU1XT1JEIFt3aygwKV0JOyB4bW0zPVJFCisgICAgICAgIG1vdmRxYSAgICB4bW0zLCBYTU1XT1JEIFt3aygwKV0gOyB4bW0zPVJFCiAKLQltb3ZkcWEgICAgeG1tNCx4bW02Ci0JcHVucGNrbHdkIHhtbTYseG1tMgotCXB1bnBja2h3ZCB4bW00LHhtbTIKLQltb3ZkcWEgICAgeG1tMSx4bW02Ci0JbW92ZHFhICAgIHhtbTUseG1tNAotCXBtYWRkd2QgICB4bW02LFtyZWwgUFdfRjAxMTRfRjAyNTBdIDsgeG1tNj1CRUwqRklYKDAuMTE0KStHRUwqRklYKDAuMjUwKQotCXBtYWRkd2QgICB4bW00LFtyZWwgUFdfRjAxMTRfRjAyNTBdIDsgeG1tND1CRUgqRklYKDAuMTE0KStHRUgqRklYKDAuMjUwKQotCXBtYWRkd2QgICB4bW0xLFtyZWwgUFdfTUYwMDhfTUYwNDFdIDsgeG1tMT1CRUwqLUZJWCgwLjA4MSkrR0VMKi1GSVgoMC40MTgpCi0JcG1hZGR3ZCAgIHhtbTUsW3JlbCBQV19NRjAwOF9NRjA0MV0gOyB4bW01PUJFSCotRklYKDAuMDgxKStHRUgqLUZJWCgwLjQxOCkKKyAgICAgICAgbW92ZHFhICAgIHhtbTQseG1tNgorICAgICAgICBwdW5wY2tsd2QgeG1tNix4bW0yCisgICAgICAgIHB1bnBja2h3ZCB4bW00LHhtbTIKKyAgICAgICAgbW92ZHFhICAgIHhtbTEseG1tNgorICAgICAgICBtb3ZkcWEgICAgeG1tNSx4bW00CisgICAgICAgIHBtYWRkd2QgICB4bW02LFtyZWwgUFdfRjAxMTRfRjAyNTBdIDsgeG1tNj1CRUwqRklYKDAuMTE0KStHRUwqRklYKDAuMjUwKQorICAgICAgICBwbWFkZHdkICAgeG1tNCxbcmVsIFBXX0YwMTE0X0YwMjUwXSA7IHhtbTQ9QkVIKkZJWCgwLjExNCkrR0VIKkZJWCgwLjI1MCkKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTEsW3JlbCBQV19NRjAwOF9NRjA0MV0gOyB4bW0xPUJFTCotRklYKDAuMDgxKStHRUwqLUZJWCgwLjQxOCkKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTUsW3JlbCBQV19NRjAwOF9NRjA0MV0gOyB4bW01PUJFSCotRklYKDAuMDgxKStHRUgqLUZJWCgwLjQxOCkKIAotCW1vdmRxYSAgICB4bW0yLFtyZWwgUERfT05FSEFMRl0JOyB4bW0yPVtQRF9PTkVIQUxGXQorICAgICAgICBtb3ZkcWEgICAgeG1tMixbcmVsIFBEX09ORUhBTEZdIDsgeG1tMj1bUERfT05FSEFMRl0KIAotCXBhZGRkICAgICB4bW02LCBYTU1XT1JEIFt3ayg2KV0KLQlwYWRkZCAgICAgeG1tNCwgWE1NV09SRCBbd2soNyldCi0JcGFkZGQgICAgIHhtbTYseG1tMgotCXBhZGRkICAgICB4bW00LHhtbTIKLQlwc3JsZCAgICAgeG1tNixTQ0FMRUJJVFMJOyB4bW02PVlFTAotCXBzcmxkICAgICB4bW00LFNDQUxFQklUUwk7IHhtbTQ9WUVICi0JcGFja3NzZHcgIHhtbTYseG1tNAkJOyB4bW02PVlFCisgICAgICAgIHBhZGRkICAgICB4bW02LCBYTU1XT1JEIFt3ayg2KV0KKyAgICAgICAgcGFkZGQgICAgIHhtbTQsIFhNTVdPUkQgW3drKDcpXQorICAgICAgICBwYWRkZCAgICAgeG1tNix4bW0yCisgICAgICAgIHBhZGRkICAgICB4bW00LHhtbTIKKyAgICAgICAgcHNybGQgICAgIHhtbTYsU0NBTEVCSVRTICAgICAgICA7IHhtbTY9WUVMCisgICAgICAgIHBzcmxkICAgICB4bW00LFNDQUxFQklUUyAgICAgICAgOyB4bW00PVlFSAorICAgICAgICBwYWNrc3NkdyAgeG1tNix4bW00ICAgICAgICAgICAgIDsgeG1tNj1ZRQogCi0JcHNsbHcgICAgIHhtbTAsQllURV9CSVQKLQlwb3IgICAgICAgeG1tNix4bW0wCQk7IHhtbTY9WQotCW1vdmRxYSAgICBYTU1XT1JEIFtyZGldLCB4bW02CTsgU2F2ZSBZCisgICAgICAgIHBzbGx3ICAgICB4bW0wLEJZVEVfQklUCisgICAgICAgIHBvciAgICAgICB4bW02LHhtbTAgICAgICAgICAgICAgOyB4bW02PVkKKyAgICAgICAgbW92ZHFhICAgIFhNTVdPUkQgW3JkaV0sIHhtbTYgICA7IFNhdmUgWQogCi0JcHhvciAgICAgIHhtbTIseG1tMgotCXB4b3IgICAgICB4bW00LHhtbTQKLQlwdW5wY2tsd2QgeG1tMix4bW0zCQk7IHhtbTI9UkVMCi0JcHVucGNraHdkIHhtbTQseG1tMwkJOyB4bW00PVJFSAotCXBzcmxkICAgICB4bW0yLDEJCTsgeG1tMj1SRUwqRklYKDAuNTAwKQotCXBzcmxkICAgICB4bW00LDEJCTsgeG1tND1SRUgqRklYKDAuNTAwKQorICAgICAgICBweG9yICAgICAgeG1tMix4bW0yCisgICAgICAgIHB4b3IgICAgICB4bW00LHhtbTQKKyAgICAgICAgcHVucGNrbHdkIHhtbTIseG1tMyAgICAgICAgICAgICA7IHhtbTI9UkVMCisgICAgICAgIHB1bnBja2h3ZCB4bW00LHhtbTMgICAgICAgICAgICAgOyB4bW00PVJFSAorICAgICAgICBwc3JsZCAgICAgeG1tMiwxICAgICAgICAgICAgICAgIDsgeG1tMj1SRUwqRklYKDAuNTAwKQorICAgICAgICBwc3JsZCAgICAgeG1tNCwxICAgICAgICAgICAgICAgIDsgeG1tND1SRUgqRklYKDAuNTAwKQogCi0JbW92ZHFhICAgIHhtbTAsW3JlbCBQRF9PTkVIQUxGTTFfQ0pdIDsgeG1tMD1bUERfT05FSEFMRk0xX0NKXQorICAgICAgICBtb3ZkcWEgICAgeG1tMCxbcmVsIFBEX09ORUhBTEZNMV9DSl0gOyB4bW0wPVtQRF9PTkVIQUxGTTFfQ0pdCiAKLQlwYWRkZCAgICAgeG1tMSx4bW0yCi0JcGFkZGQgICAgIHhtbTUseG1tNAotCXBhZGRkICAgICB4bW0xLHhtbTAKLQlwYWRkZCAgICAgeG1tNSx4bW0wCi0JcHNybGQgICAgIHhtbTEsU0NBTEVCSVRTCTsgeG1tMT1DckVMCi0JcHNybGQgICAgIHhtbTUsU0NBTEVCSVRTCTsgeG1tNT1DckVICi0JcGFja3NzZHcgIHhtbTEseG1tNQkJOyB4bW0xPUNyRQorICAgICAgICBwYWRkZCAgICAgeG1tMSx4bW0yCisgICAgICAgIHBhZGRkICAgICB4bW01LHhtbTQKKyAgICAgICAgcGFkZGQgICAgIHhtbTEseG1tMAorICAgICAgICBwYWRkZCAgICAgeG1tNSx4bW0wCisgICAgICAgIHBzcmxkICAgICB4bW0xLFNDQUxFQklUUyAgICAgICAgOyB4bW0xPUNyRUwKKyAgICAgICAgcHNybGQgICAgIHhtbTUsU0NBTEVCSVRTICAgICAgICA7IHhtbTU9Q3JFSAorICAgICAgICBwYWNrc3NkdyAgeG1tMSx4bW01ICAgICAgICAgICAgIDsgeG1tMT1DckUKIAotCXBzbGx3ICAgICB4bW03LEJZVEVfQklUCi0JcG9yICAgICAgIHhtbTEseG1tNwkJOyB4bW0xPUNyCi0JbW92ZHFhICAgIFhNTVdPUkQgW3JkeF0sIHhtbTEJOyBTYXZlIENyCisgICAgICAgIHBzbGx3ICAgICB4bW03LEJZVEVfQklUCisgICAgICAgIHBvciAgICAgICB4bW0xLHhtbTcgICAgICAgICAgICAgOyB4bW0xPUNyCisgICAgICAgIG1vdmRxYSAgICBYTU1XT1JEIFtyZHhdLCB4bW0xICAgOyBTYXZlIENyCiAKLQlzdWIJcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JECi0JYWRkCXJzaSwgYnl0ZSBSR0JfUElYRUxTSVpFKlNJWkVPRl9YTU1XT1JECTsgaW5wdHIKLQlhZGQJcmRpLCBieXRlIFNJWkVPRl9YTU1XT1JECQk7IG91dHB0cjAKLQlhZGQJcmJ4LCBieXRlIFNJWkVPRl9YTU1XT1JECQk7IG91dHB0cjEKLQlhZGQJcmR4LCBieXRlIFNJWkVPRl9YTU1XT1JECQk7IG91dHB0cjIKLQljbXAJcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JECi0JamFlCW5lYXIgLmNvbHVtbmxvb3AKLQl0ZXN0CXJjeCxyY3gKLQlqbnoJbmVhciAuY29sdW1uX2xkMQorICAgICAgICBzdWIgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorICAgICAgICBhZGQgICAgIHJzaSwgYnl0ZSBSR0JfUElYRUxTSVpFKlNJWkVPRl9YTU1XT1JEICA7IGlucHRyCisgICAgICAgIGFkZCAgICAgcmRpLCBieXRlIFNJWkVPRl9YTU1XT1JEICAgICAgICAgICAgICAgIDsgb3V0cHRyMAorICAgICAgICBhZGQgICAgIHJieCwgYnl0ZSBTSVpFT0ZfWE1NV09SRCAgICAgICAgICAgICAgICA7IG91dHB0cjEKKyAgICAgICAgYWRkICAgICByZHgsIGJ5dGUgU0laRU9GX1hNTVdPUkQgICAgICAgICAgICAgICAgOyBvdXRwdHIyCisgICAgICAgIGNtcCAgICAgcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JECisgICAgICAgIGphZSAgICAgbmVhciAuY29sdW1ubG9vcAorICAgICAgICB0ZXN0ICAgIHJjeCxyY3gKKyAgICAgICAgam56ICAgICBuZWFyIC5jb2x1bW5fbGQxCiAKLQlwb3AJcmN4CQkJOyBjb2wKLQlwb3AJcnNpCi0JcG9wCXJkaQotCXBvcAlyYngKLQlwb3AJcmR4CisgICAgICAgIHBvcCAgICAgcmN4ICAgICAgICAgICAgICAgICAgICAgOyBjb2wKKyAgICAgICAgcG9wICAgICByc2kKKyAgICAgICAgcG9wICAgICByZGkKKyAgICAgICAgcG9wICAgICByYngKKyAgICAgICAgcG9wICAgICByZHgKIAotCWFkZAlyc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCTsgaW5wdXRfYnVmCi0JYWRkCXJkaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cKLQlhZGQJcmJ4LCBieXRlIFNJWkVPRl9KU0FNUFJPVwotCWFkZAlyZHgsIGJ5dGUgU0laRU9GX0pTQU1QUk9XCi0JZGVjCXJheAkJCQk7IG51bV9yb3dzCi0JamcJbmVhciAucm93bG9vcAorICAgICAgICBhZGQgICAgIHJzaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cgICAgICAgOyBpbnB1dF9idWYKKyAgICAgICAgYWRkICAgICByZGksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCisgICAgICAgIGFkZCAgICAgcmJ4LCBieXRlIFNJWkVPRl9KU0FNUFJPVworICAgICAgICBhZGQgICAgIHJkeCwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cKKyAgICAgICAgZGVjICAgICByYXggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgbnVtX3Jvd3MKKyAgICAgICAgamcgICAgICBuZWFyIC5yb3dsb29wCiAKIC5yZXR1cm46Ci0JcG9wCXJieAotCXVuY29sbGVjdF9hcmdzCi0JbW92CXJzcCxyYnAJCTsgcnNwIDwtIGFsaWduZWQgcmJwCi0JcG9wCXJzcAkJOyByc3AgPC0gb3JpZ2luYWwgcmJwCi0JcG9wCXJicAotCXJldAorICAgICAgICBwb3AgICAgIHJieAorICAgICAgICB1bmNvbGxlY3RfYXJncworICAgICAgICBtb3YgICAgIHJzcCxyYnAgICAgICAgICA7IHJzcCA8LSBhbGlnbmVkIHJicAorICAgICAgICBwb3AgICAgIHJzcCAgICAgICAgICAgICA7IHJzcCA8LSBvcmlnaW5hbCByYnAKKyAgICAgICAgcG9wICAgICByYnAKKyAgICAgICAgcmV0CiAKIDsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCiA7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCi0JYWxpZ24JMTYKKyAgICAgICAgYWxpZ24gICAxNgpkaWZmIC0tZ2l0IGEvc2ltZC9qY2NscnNzMi5hc20gYi9zaW1kL2pjY2xyc3MyLmFzbQppbmRleCA1MTdiNzA1Li4yMjBkMDE2IDEwMDY0NAotLS0gYS9zaW1kL2pjY2xyc3MyLmFzbQorKysgYi9zaW1kL2pjY2xyc3MyLmFzbQpAQCAtMjUsNDc5ICsyNSw0NzkgQEAKIDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKTsKIDsKIAotJWRlZmluZSBpbWdfd2lkdGgoYikJKGIpKzgJCQk7IEpESU1FTlNJT04gaW1nX3dpZHRoCi0lZGVmaW5lIGlucHV0X2J1ZihiKQkoYikrMTIJCTsgSlNBTVBBUlJBWSBpbnB1dF9idWYKLSVkZWZpbmUgb3V0cHV0X2J1ZihiKQkoYikrMTYJCTsgSlNBTVBJTUFHRSBvdXRwdXRfYnVmCi0lZGVmaW5lIG91dHB1dF9yb3coYikJKGIpKzIwCQk7IEpESU1FTlNJT04gb3V0cHV0X3JvdwotJWRlZmluZSBudW1fcm93cyhiKQkoYikrMjQJCTsgaW50IG51bV9yb3dzCislZGVmaW5lIGltZ193aWR0aChiKSAgICAoYikrOCAgICAgICAgICAgOyBKRElNRU5TSU9OIGltZ193aWR0aAorJWRlZmluZSBpbnB1dF9idWYoYikgICAgKGIpKzEyICAgICAgICAgIDsgSlNBTVBBUlJBWSBpbnB1dF9idWYKKyVkZWZpbmUgb3V0cHV0X2J1ZihiKSAgIChiKSsxNiAgICAgICAgICA7IEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZgorJWRlZmluZSBvdXRwdXRfcm93KGIpICAgKGIpKzIwICAgICAgICAgIDsgSkRJTUVOU0lPTiBvdXRwdXRfcm93CislZGVmaW5lIG51bV9yb3dzKGIpICAgICAoYikrMjQgICAgICAgICAgOyBpbnQgbnVtX3Jvd3MKIAotJWRlZmluZSBvcmlnaW5hbF9lYnAJZWJwKzAKLSVkZWZpbmUgd2soaSkJCWVicC0oV0tfTlVNLShpKSkqU0laRU9GX1hNTVdPUkQJOyB4bW13b3JkIHdrW1dLX05VTV0KLSVkZWZpbmUgV0tfTlVNCQk4Ci0lZGVmaW5lIGdvdHB0cgkJd2soMCktU0laRU9GX1BPSU5URVIJOyB2b2lkICogZ290cHRyCislZGVmaW5lIG9yaWdpbmFsX2VicCAgICBlYnArMAorJWRlZmluZSB3ayhpKSAgICAgICAgICAgZWJwLShXS19OVU0tKGkpKSpTSVpFT0ZfWE1NV09SRCA7IHhtbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0gICAgICAgICAgOAorJWRlZmluZSBnb3RwdHIgICAgICAgICAgd2soMCktU0laRU9GX1BPSU5URVIgICAgOyB2b2lkICogZ290cHRyCiAKLQlhbGlnbgkxNgorICAgICAgICBhbGlnbiAgIDE2CiAKLQlnbG9iYWwJRVhUTihqc2ltZF9yZ2JfeWNjX2NvbnZlcnRfc3NlMikKKyAgICAgICAgZ2xvYmFsICBFWFROKGpzaW1kX3JnYl95Y2NfY29udmVydF9zc2UyKQogCiBFWFROKGpzaW1kX3JnYl95Y2NfY29udmVydF9zc2UyKToKLQlwdXNoCWVicAotCW1vdgllYXgsZXNwCQkJCTsgZWF4ID0gb3JpZ2luYWwgZWJwCi0Jc3ViCWVzcCwgYnl0ZSA0Ci0JYW5kCWVzcCwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKQk7IGFsaWduIHRvIDEyOCBiaXRzCi0JbW92CVtlc3BdLGVheAotCW1vdgllYnAsZXNwCQkJCTsgZWJwID0gYWxpZ25lZCBlYnAKLQlsZWEJZXNwLCBbd2soMCldCi0JcHVzaHBpYwllYXgJCTsgbWFrZSBhIHJvb20gZm9yIEdPVCBhZGRyZXNzCi0JcHVzaAllYngKLTsJcHVzaAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi07CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotCXB1c2gJZXNpCi0JcHVzaAllZGkKKyAgICAgICAgcHVzaCAgICBlYnAKKyAgICAgICAgbW92ICAgICBlYXgsZXNwICAgICAgICAgICAgICAgICAgICAgICAgIDsgZWF4ID0gb3JpZ2luYWwgZWJwCisgICAgICAgIHN1YiAgICAgZXNwLCBieXRlIDQKKyAgICAgICAgYW5kICAgICBlc3AsIGJ5dGUgKC1TSVpFT0ZfWE1NV09SRCkgICAgIDsgYWxpZ24gdG8gMTI4IGJpdHMKKyAgICAgICAgbW92ICAgICBbZXNwXSxlYXgKKyAgICAgICAgbW92ICAgICBlYnAsZXNwICAgICAgICAgICAgICAgICAgICAgICAgIDsgZWJwID0gYWxpZ25lZCBlYnAKKyAgICAgICAgbGVhICAgICBlc3AsIFt3aygwKV0KKyAgICAgICAgcHVzaHBpYyBlYXggICAgICAgICAgICAgOyBtYWtlIGEgcm9vbSBmb3IgR09UIGFkZHJlc3MKKyAgICAgICAgcHVzaCAgICBlYngKKzsgICAgICAgcHVzaCAgICBlY3ggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICAgICAgcHVzaCAgICBlZHggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICAgICAgcHVzaCAgICBlc2kKKyAgICAgICAgcHVzaCAgICBlZGkKIAotCWdldF9HT1QJZWJ4CQkJOyBnZXQgR09UIGFkZHJlc3MKLQltb3ZwaWMJUE9JTlRFUiBbZ290cHRyXSwgZWJ4CTsgc2F2ZSBHT1QgYWRkcmVzcworICAgICAgICBnZXRfR09UIGVieCAgICAgICAgICAgICAgICAgICAgIDsgZ2V0IEdPVCBhZGRyZXNzCisgICAgICAgIG1vdnBpYyAgUE9JTlRFUiBbZ290cHRyXSwgZWJ4ICAgOyBzYXZlIEdPVCBhZGRyZXNzCiAKLQltb3YJZWN4LCBKRElNRU5TSU9OIFtpbWdfd2lkdGgoZWF4KV0KLQl0ZXN0CWVjeCxlY3gKLQlqegluZWFyIC5yZXR1cm4KKyAgICAgICAgbW92ICAgICBlY3gsIEpESU1FTlNJT04gW2ltZ193aWR0aChlYXgpXQorICAgICAgICB0ZXN0ICAgIGVjeCxlY3gKKyAgICAgICAganogICAgICBuZWFyIC5yZXR1cm4KIAotCXB1c2gJZWN4CisgICAgICAgIHB1c2ggICAgZWN4CiAKLQltb3YJZXNpLCBKU0FNUElNQUdFIFtvdXRwdXRfYnVmKGVheCldCi0JbW92CWVjeCwgSkRJTUVOU0lPTiBbb3V0cHV0X3JvdyhlYXgpXQotCW1vdgllZGksIEpTQU1QQVJSQVkgW2VzaSswKlNJWkVPRl9KU0FNUEFSUkFZXQotCW1vdgllYngsIEpTQU1QQVJSQVkgW2VzaSsxKlNJWkVPRl9KU0FNUEFSUkFZXQotCW1vdgllZHgsIEpTQU1QQVJSQVkgW2VzaSsyKlNJWkVPRl9KU0FNUEFSUkFZXQotCWxlYQllZGksIFtlZGkrZWN4KlNJWkVPRl9KU0FNUFJPV10KLQlsZWEJZWJ4LCBbZWJ4K2VjeCpTSVpFT0ZfSlNBTVBST1ddCi0JbGVhCWVkeCwgW2VkeCtlY3gqU0laRU9GX0pTQU1QUk9XXQorICAgICAgICBtb3YgICAgIGVzaSwgSlNBTVBJTUFHRSBbb3V0cHV0X2J1ZihlYXgpXQorICAgICAgICBtb3YgICAgIGVjeCwgSkRJTUVOU0lPTiBbb3V0cHV0X3JvdyhlYXgpXQorICAgICAgICBtb3YgICAgIGVkaSwgSlNBTVBBUlJBWSBbZXNpKzAqU0laRU9GX0pTQU1QQVJSQVldCisgICAgICAgIG1vdiAgICAgZWJ4LCBKU0FNUEFSUkFZIFtlc2krMSpTSVpFT0ZfSlNBTVBBUlJBWV0KKyAgICAgICAgbW92ICAgICBlZHgsIEpTQU1QQVJSQVkgW2VzaSsyKlNJWkVPRl9KU0FNUEFSUkFZXQorICAgICAgICBsZWEgICAgIGVkaSwgW2VkaStlY3gqU0laRU9GX0pTQU1QUk9XXQorICAgICAgICBsZWEgICAgIGVieCwgW2VieCtlY3gqU0laRU9GX0pTQU1QUk9XXQorICAgICAgICBsZWEgICAgIGVkeCwgW2VkeCtlY3gqU0laRU9GX0pTQU1QUk9XXQogCi0JcG9wCWVjeAorICAgICAgICBwb3AgICAgIGVjeAogCi0JbW92CWVzaSwgSlNBTVBBUlJBWSBbaW5wdXRfYnVmKGVheCldCi0JbW92CWVheCwgSU5UIFtudW1fcm93cyhlYXgpXQotCXRlc3QJZWF4LGVheAotCWpsZQluZWFyIC5yZXR1cm4KLQlhbGlnbngJMTYsNworICAgICAgICBtb3YgICAgIGVzaSwgSlNBTVBBUlJBWSBbaW5wdXRfYnVmKGVheCldCisgICAgICAgIG1vdiAgICAgZWF4LCBJTlQgW251bV9yb3dzKGVheCldCisgICAgICAgIHRlc3QgICAgZWF4LGVheAorICAgICAgICBqbGUgICAgIG5lYXIgLnJldHVybgorICAgICAgICBhbGlnbnggIDE2LDcKIC5yb3dsb29wOgotCXB1c2hwaWMJZWF4Ci0JcHVzaAllZHgKLQlwdXNoCWVieAotCXB1c2gJZWRpCi0JcHVzaAllc2kKLQlwdXNoCWVjeAkJCTsgY29sCisgICAgICAgIHB1c2hwaWMgZWF4CisgICAgICAgIHB1c2ggICAgZWR4CisgICAgICAgIHB1c2ggICAgZWJ4CisgICAgICAgIHB1c2ggICAgZWRpCisgICAgICAgIHB1c2ggICAgZXNpCisgICAgICAgIHB1c2ggICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBjb2wKIAotCW1vdgllc2ksIEpTQU1QUk9XIFtlc2ldCTsgaW5wdHIKLQltb3YJZWRpLCBKU0FNUFJPVyBbZWRpXQk7IG91dHB0cjAKLQltb3YJZWJ4LCBKU0FNUFJPVyBbZWJ4XQk7IG91dHB0cjEKLQltb3YJZWR4LCBKU0FNUFJPVyBbZWR4XQk7IG91dHB0cjIKLQltb3ZwaWMJZWF4LCBQT0lOVEVSIFtnb3RwdHJdCTsgbG9hZCBHT1QgYWRkcmVzcyAoZWF4KQorICAgICAgICBtb3YgICAgIGVzaSwgSlNBTVBST1cgW2VzaV0gICAgIDsgaW5wdHIKKyAgICAgICAgbW92ICAgICBlZGksIEpTQU1QUk9XIFtlZGldICAgICA7IG91dHB0cjAKKyAgICAgICAgbW92ICAgICBlYngsIEpTQU1QUk9XIFtlYnhdICAgICA7IG91dHB0cjEKKyAgICAgICAgbW92ICAgICBlZHgsIEpTQU1QUk9XIFtlZHhdICAgICA7IG91dHB0cjIKKyAgICAgICAgbW92cGljICBlYXgsIFBPSU5URVIgW2dvdHB0cl0gICA7IGxvYWQgR09UIGFkZHJlc3MgKGVheCkKIAotCWNtcAllY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKLQlqYWUJbmVhciAuY29sdW1ubG9vcAotCWFsaWdueAkxNiw3CisgICAgICAgIGNtcCAgICAgZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JECisgICAgICAgIGphZSAgICAgbmVhciAuY29sdW1ubG9vcAorICAgICAgICBhbGlnbnggIDE2LDcKIAogJWlmIFJHQl9QSVhFTFNJWkUgPT0gMyA7IC0tLS0tLS0tLS0tLS0tLQogCiAuY29sdW1uX2xkMToKLQlwdXNoCWVheAotCXB1c2gJZWR4Ci0JbGVhCWVjeCxbZWN4K2VjeCoyXQkJOyBpbXVsIGVjeCxSR0JfUElYRUxTSVpFCi0JdGVzdAljbCwgU0laRU9GX0JZVEUKLQlqeglzaG9ydCAuY29sdW1uX2xkMgotCXN1YgllY3gsIGJ5dGUgU0laRU9GX0JZVEUKLQltb3Z6eAllYXgsIEJZVEUgW2VzaStlY3hdCisgICAgICAgIHB1c2ggICAgZWF4CisgICAgICAgIHB1c2ggICAgZWR4CisgICAgICAgIGxlYSAgICAgZWN4LFtlY3grZWN4KjJdICAgICAgICAgOyBpbXVsIGVjeCxSR0JfUElYRUxTSVpFCisgICAgICAgIHRlc3QgICAgY2wsIFNJWkVPRl9CWVRFCisgICAgICAgIGp6ICAgICAgc2hvcnQgLmNvbHVtbl9sZDIKKyAgICAgICAgc3ViICAgICBlY3gsIGJ5dGUgU0laRU9GX0JZVEUKKyAgICAgICAgbW92enggICBlYXgsIEJZVEUgW2VzaStlY3hdCiAuY29sdW1uX2xkMjoKLQl0ZXN0CWNsLCBTSVpFT0ZfV09SRAotCWp6CXNob3J0IC5jb2x1bW5fbGQ0Ci0Jc3ViCWVjeCwgYnl0ZSBTSVpFT0ZfV09SRAotCW1vdnp4CWVkeCwgV09SRCBbZXNpK2VjeF0KLQlzaGwJZWF4LCBXT1JEX0JJVAotCW9yCWVheCxlZHgKKyAgICAgICAgdGVzdCAgICBjbCwgU0laRU9GX1dPUkQKKyAgICAgICAganogICAgICBzaG9ydCAuY29sdW1uX2xkNAorICAgICAgICBzdWIgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfV09SRAorICAgICAgICBtb3Z6eCAgIGVkeCwgV09SRCBbZXNpK2VjeF0KKyAgICAgICAgc2hsICAgICBlYXgsIFdPUkRfQklUCisgICAgICAgIG9yICAgICAgZWF4LGVkeAogLmNvbHVtbl9sZDQ6Ci0JbW92ZAl4bW1BLGVheAotCXBvcAllZHgKLQlwb3AJZWF4Ci0JdGVzdAljbCwgU0laRU9GX0RXT1JECi0JanoJc2hvcnQgLmNvbHVtbl9sZDgKLQlzdWIJZWN4LCBieXRlIFNJWkVPRl9EV09SRAotCW1vdmQJeG1tRiwgWE1NX0RXT1JEIFtlc2krZWN4XQotCXBzbGxkcQl4bW1BLCBTSVpFT0ZfRFdPUkQKLQlwb3IJeG1tQSx4bW1GCisgICAgICAgIG1vdmQgICAgeG1tQSxlYXgKKyAgICAgICAgcG9wICAgICBlZHgKKyAgICAgICAgcG9wICAgICBlYXgKKyAgICAgICAgdGVzdCAgICBjbCwgU0laRU9GX0RXT1JECisgICAgICAgIGp6ICAgICAgc2hvcnQgLmNvbHVtbl9sZDgKKyAgICAgICAgc3ViICAgICBlY3gsIGJ5dGUgU0laRU9GX0RXT1JECisgICAgICAgIG1vdmQgICAgeG1tRiwgWE1NX0RXT1JEIFtlc2krZWN4XQorICAgICAgICBwc2xsZHEgIHhtbUEsIFNJWkVPRl9EV09SRAorICAgICAgICBwb3IgICAgIHhtbUEseG1tRgogLmNvbHVtbl9sZDg6Ci0JdGVzdAljbCwgU0laRU9GX01NV09SRAotCWp6CXNob3J0IC5jb2x1bW5fbGQxNgotCXN1YgllY3gsIGJ5dGUgU0laRU9GX01NV09SRAotCW1vdnEJeG1tQiwgWE1NX01NV09SRCBbZXNpK2VjeF0KLQlwc2xsZHEJeG1tQSwgU0laRU9GX01NV09SRAotCXBvcgl4bW1BLHhtbUIKKyAgICAgICAgdGVzdCAgICBjbCwgU0laRU9GX01NV09SRAorICAgICAgICBqeiAgICAgIHNob3J0IC5jb2x1bW5fbGQxNgorICAgICAgICBzdWIgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECisgICAgICAgIG1vdnEgICAgeG1tQiwgWE1NX01NV09SRCBbZXNpK2VjeF0KKyAgICAgICAgcHNsbGRxICB4bW1BLCBTSVpFT0ZfTU1XT1JECisgICAgICAgIHBvciAgICAgeG1tQSx4bW1CCiAuY29sdW1uX2xkMTY6Ci0JdGVzdAljbCwgU0laRU9GX1hNTVdPUkQKLQlqeglzaG9ydCAuY29sdW1uX2xkMzIKLQltb3ZkcWEJeG1tRix4bW1BCi0JbW92ZHF1CXhtbUEsIFhNTVdPUkQgW2VzaSswKlNJWkVPRl9YTU1XT1JEXQotCW1vdgllY3gsIFNJWkVPRl9YTU1XT1JECi0Jam1wCXNob3J0IC5yZ2JfeWNjX2NudgorICAgICAgICB0ZXN0ICAgIGNsLCBTSVpFT0ZfWE1NV09SRAorICAgICAgICBqeiAgICAgIHNob3J0IC5jb2x1bW5fbGQzMgorICAgICAgICBtb3ZkcWEgIHhtbUYseG1tQQorICAgICAgICBtb3ZkcXUgIHhtbUEsIFhNTVdPUkQgW2VzaSswKlNJWkVPRl9YTU1XT1JEXQorICAgICAgICBtb3YgICAgIGVjeCwgU0laRU9GX1hNTVdPUkQKKyAgICAgICAgam1wICAgICBzaG9ydCAucmdiX3ljY19jbnYKIC5jb2x1bW5fbGQzMjoKLQl0ZXN0CWNsLCAyKlNJWkVPRl9YTU1XT1JECi0JbW92CWVjeCwgU0laRU9GX1hNTVdPUkQKLQlqeglzaG9ydCAucmdiX3ljY19jbnYKLQltb3ZkcWEJeG1tQix4bW1BCi0JbW92ZHF1CXhtbUEsIFhNTVdPUkQgW2VzaSswKlNJWkVPRl9YTU1XT1JEXQotCW1vdmRxdQl4bW1GLCBYTU1XT1JEIFtlc2krMSpTSVpFT0ZfWE1NV09SRF0KLQlqbXAJc2hvcnQgLnJnYl95Y2NfY252Ci0JYWxpZ254CTE2LDcKKyAgICAgICAgdGVzdCAgICBjbCwgMipTSVpFT0ZfWE1NV09SRAorICAgICAgICBtb3YgICAgIGVjeCwgU0laRU9GX1hNTVdPUkQKKyAgICAgICAganogICAgICBzaG9ydCAucmdiX3ljY19jbnYKKyAgICAgICAgbW92ZHFhICB4bW1CLHhtbUEKKyAgICAgICAgbW92ZHF1ICB4bW1BLCBYTU1XT1JEIFtlc2krMCpTSVpFT0ZfWE1NV09SRF0KKyAgICAgICAgbW92ZHF1ICB4bW1GLCBYTU1XT1JEIFtlc2krMSpTSVpFT0ZfWE1NV09SRF0KKyAgICAgICAgam1wICAgICBzaG9ydCAucmdiX3ljY19jbnYKKyAgICAgICAgYWxpZ254ICAxNiw3CiAKIC5jb2x1bW5sb29wOgotCW1vdmRxdQl4bW1BLCBYTU1XT1JEIFtlc2krMCpTSVpFT0ZfWE1NV09SRF0KLQltb3ZkcXUJeG1tRiwgWE1NV09SRCBbZXNpKzEqU0laRU9GX1hNTVdPUkRdCi0JbW92ZHF1CXhtbUIsIFhNTVdPUkQgW2VzaSsyKlNJWkVPRl9YTU1XT1JEXQorICAgICAgICBtb3ZkcXUgIHhtbUEsIFhNTVdPUkQgW2VzaSswKlNJWkVPRl9YTU1XT1JEXQorICAgICAgICBtb3ZkcXUgIHhtbUYsIFhNTVdPUkQgW2VzaSsxKlNJWkVPRl9YTU1XT1JEXQorICAgICAgICBtb3ZkcXUgIHhtbUIsIFhNTVdPUkQgW2VzaSsyKlNJWkVPRl9YTU1XT1JEXQogCiAucmdiX3ljY19jbnY6Ci0JOyB4bW1BPSgwMCAxMCAyMCAwMSAxMSAyMSAwMiAxMiAyMiAwMyAxMyAyMyAwNCAxNCAyNCAwNSkKLQk7IHhtbUY9KDE1IDI1IDA2IDE2IDI2IDA3IDE3IDI3IDA4IDE4IDI4IDA5IDE5IDI5IDBBIDFBKQotCTsgeG1tQj0oMkEgMEIgMUIgMkIgMEMgMUMgMkMgMEQgMUQgMkQgMEUgMUUgMkUgMEYgMUYgMkYpCisgICAgICAgIDsgeG1tQT0oMDAgMTAgMjAgMDEgMTEgMjEgMDIgMTIgMjIgMDMgMTMgMjMgMDQgMTQgMjQgMDUpCisgICAgICAgIDsgeG1tRj0oMTUgMjUgMDYgMTYgMjYgMDcgMTcgMjcgMDggMTggMjggMDkgMTkgMjkgMEEgMUEpCisgICAgICAgIDsgeG1tQj0oMkEgMEIgMUIgMkIgMEMgMUMgMkMgMEQgMUQgMkQgMEUgMUUgMkUgMEYgMUYgMkYpCiAKLQltb3ZkcWEgICAgeG1tRyx4bW1BCi0JcHNsbGRxICAgIHhtbUEsOAk7IHhtbUE9KC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIDAwIDEwIDIwIDAxIDExIDIxIDAyIDEyKQotCXBzcmxkcSAgICB4bW1HLDgJOyB4bW1HPSgyMiAwMyAxMyAyMyAwNCAxNCAyNCAwNSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSkKKyAgICAgICAgbW92ZHFhICAgIHhtbUcseG1tQQorICAgICAgICBwc2xsZHEgICAgeG1tQSw4ICAgICAgICA7IHhtbUE9KC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIDAwIDEwIDIwIDAxIDExIDIxIDAyIDEyKQorICAgICAgICBwc3JsZHEgICAgeG1tRyw4ICAgICAgICA7IHhtbUc9KDIyIDAzIDEzIDIzIDA0IDE0IDI0IDA1IC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tKQogCi0JcHVucGNraGJ3IHhtbUEseG1tRgk7IHhtbUE9KDAwIDA4IDEwIDE4IDIwIDI4IDAxIDA5IDExIDE5IDIxIDI5IDAyIDBBIDEyIDFBKQotCXBzbGxkcSAgICB4bW1GLDgJOyB4bW1GPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAxNSAyNSAwNiAxNiAyNiAwNyAxNyAyNykKKyAgICAgICAgcHVucGNraGJ3IHhtbUEseG1tRiAgICAgOyB4bW1BPSgwMCAwOCAxMCAxOCAyMCAyOCAwMSAwOSAxMSAxOSAyMSAyOSAwMiAwQSAxMiAxQSkKKyAgICAgICAgcHNsbGRxICAgIHhtbUYsOCAgICAgICAgOyB4bW1GPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAxNSAyNSAwNiAxNiAyNiAwNyAxNyAyNykKIAotCXB1bnBja2xidyB4bW1HLHhtbUIJOyB4bW1HPSgyMiAyQSAwMyAwQiAxMyAxQiAyMyAyQiAwNCAwQyAxNCAxQyAyNCAyQyAwNSAwRCkKLQlwdW5wY2toYncgeG1tRix4bW1CCTsgeG1tRj0oMTUgMUQgMjUgMkQgMDYgMEUgMTYgMUUgMjYgMkUgMDcgMEYgMTcgMUYgMjcgMkYpCisgICAgICAgIHB1bnBja2xidyB4bW1HLHhtbUIgICAgIDsgeG1tRz0oMjIgMkEgMDMgMEIgMTMgMUIgMjMgMkIgMDQgMEMgMTQgMUMgMjQgMkMgMDUgMEQpCisgICAgICAgIHB1bnBja2hidyB4bW1GLHhtbUIgICAgIDsgeG1tRj0oMTUgMUQgMjUgMkQgMDYgMEUgMTYgMUUgMjYgMkUgMDcgMEYgMTcgMUYgMjcgMkYpCiAKLQltb3ZkcWEgICAgeG1tRCx4bW1BCi0JcHNsbGRxICAgIHhtbUEsOAk7IHhtbUE9KC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIDAwIDA4IDEwIDE4IDIwIDI4IDAxIDA5KQotCXBzcmxkcSAgICB4bW1ELDgJOyB4bW1EPSgxMSAxOSAyMSAyOSAwMiAwQSAxMiAxQSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSkKKyAgICAgICAgbW92ZHFhICAgIHhtbUQseG1tQQorICAgICAgICBwc2xsZHEgICAgeG1tQSw4ICAgICAgICA7IHhtbUE9KC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIDAwIDA4IDEwIDE4IDIwIDI4IDAxIDA5KQorICAgICAgICBwc3JsZHEgICAgeG1tRCw4ICAgICAgICA7IHhtbUQ9KDExIDE5IDIxIDI5IDAyIDBBIDEyIDFBIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tKQogCi0JcHVucGNraGJ3IHhtbUEseG1tRwk7IHhtbUE9KDAwIDA0IDA4IDBDIDEwIDE0IDE4IDFDIDIwIDI0IDI4IDJDIDAxIDA1IDA5IDBEKQotCXBzbGxkcSAgICB4bW1HLDgJOyB4bW1HPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAyMiAyQSAwMyAwQiAxMyAxQiAyMyAyQikKKyAgICAgICAgcHVucGNraGJ3IHhtbUEseG1tRyAgICAgOyB4bW1BPSgwMCAwNCAwOCAwQyAxMCAxNCAxOCAxQyAyMCAyNCAyOCAyQyAwMSAwNSAwOSAwRCkKKyAgICAgICAgcHNsbGRxICAgIHhtbUcsOCAgICAgICAgOyB4bW1HPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAyMiAyQSAwMyAwQiAxMyAxQiAyMyAyQikKIAotCXB1bnBja2xidyB4bW1ELHhtbUYJOyB4bW1EPSgxMSAxNSAxOSAxRCAyMSAyNSAyOSAyRCAwMiAwNiAwQSAwRSAxMiAxNiAxQSAxRSkKLQlwdW5wY2toYncgeG1tRyx4bW1GCTsgeG1tRz0oMjIgMjYgMkEgMkUgMDMgMDcgMEIgMEYgMTMgMTcgMUIgMUYgMjMgMjcgMkIgMkYpCisgICAgICAgIHB1bnBja2xidyB4bW1ELHhtbUYgICAgIDsgeG1tRD0oMTEgMTUgMTkgMUQgMjEgMjUgMjkgMkQgMDIgMDYgMEEgMEUgMTIgMTYgMUEgMUUpCisgICAgICAgIHB1bnBja2hidyB4bW1HLHhtbUYgICAgIDsgeG1tRz0oMjIgMjYgMkEgMkUgMDMgMDcgMEIgMEYgMTMgMTcgMUIgMUYgMjMgMjcgMkIgMkYpCiAKLQltb3ZkcWEgICAgeG1tRSx4bW1BCi0JcHNsbGRxICAgIHhtbUEsOAk7IHhtbUE9KC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIDAwIDA0IDA4IDBDIDEwIDE0IDE4IDFDKQotCXBzcmxkcSAgICB4bW1FLDgJOyB4bW1FPSgyMCAyNCAyOCAyQyAwMSAwNSAwOSAwRCAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSkKKyAgICAgICAgbW92ZHFhICAgIHhtbUUseG1tQQorICAgICAgICBwc2xsZHEgICAgeG1tQSw4ICAgICAgICA7IHhtbUE9KC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIDAwIDA0IDA4IDBDIDEwIDE0IDE4IDFDKQorICAgICAgICBwc3JsZHEgICAgeG1tRSw4ICAgICAgICA7IHhtbUU9KDIwIDI0IDI4IDJDIDAxIDA1IDA5IDBEIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tKQogCi0JcHVucGNraGJ3IHhtbUEseG1tRAk7IHhtbUE9KDAwIDAyIDA0IDA2IDA4IDBBIDBDIDBFIDEwIDEyIDE0IDE2IDE4IDFBIDFDIDFFKQotCXBzbGxkcSAgICB4bW1ELDgJOyB4bW1EPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAxMSAxNSAxOSAxRCAyMSAyNSAyOSAyRCkKKyAgICAgICAgcHVucGNraGJ3IHhtbUEseG1tRCAgICAgOyB4bW1BPSgwMCAwMiAwNCAwNiAwOCAwQSAwQyAwRSAxMCAxMiAxNCAxNiAxOCAxQSAxQyAxRSkKKyAgICAgICAgcHNsbGRxICAgIHhtbUQsOCAgICAgICAgOyB4bW1EPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAxMSAxNSAxOSAxRCAyMSAyNSAyOSAyRCkKIAotCXB1bnBja2xidyB4bW1FLHhtbUcJOyB4bW1FPSgyMCAyMiAyNCAyNiAyOCAyQSAyQyAyRSAwMSAwMyAwNSAwNyAwOSAwQiAwRCAwRikKLQlwdW5wY2toYncgeG1tRCx4bW1HCTsgeG1tRD0oMTEgMTMgMTUgMTcgMTkgMUIgMUQgMUYgMjEgMjMgMjUgMjcgMjkgMkIgMkQgMkYpCisgICAgICAgIHB1bnBja2xidyB4bW1FLHhtbUcgICAgIDsgeG1tRT0oMjAgMjIgMjQgMjYgMjggMkEgMkMgMkUgMDEgMDMgMDUgMDcgMDkgMEIgMEQgMEYpCisgICAgICAgIHB1bnBja2hidyB4bW1ELHhtbUcgICAgIDsgeG1tRD0oMTEgMTMgMTUgMTcgMTkgMUIgMUQgMUYgMjEgMjMgMjUgMjcgMjkgMkIgMkQgMkYpCiAKLQlweG9yICAgICAgeG1tSCx4bW1ICisgICAgICAgIHB4b3IgICAgICB4bW1ILHhtbUgKIAotCW1vdmRxYSAgICB4bW1DLHhtbUEKLQlwdW5wY2tsYncgeG1tQSx4bW1ICTsgeG1tQT0oMDAgMDIgMDQgMDYgMDggMEEgMEMgMEUpCi0JcHVucGNraGJ3IHhtbUMseG1tSAk7IHhtbUM9KDEwIDEyIDE0IDE2IDE4IDFBIDFDIDFFKQorICAgICAgICBtb3ZkcWEgICAgeG1tQyx4bW1BCisgICAgICAgIHB1bnBja2xidyB4bW1BLHhtbUggICAgIDsgeG1tQT0oMDAgMDIgMDQgMDYgMDggMEEgMEMgMEUpCisgICAgICAgIHB1bnBja2hidyB4bW1DLHhtbUggICAgIDsgeG1tQz0oMTAgMTIgMTQgMTYgMTggMUEgMUMgMUUpCiAKLQltb3ZkcWEgICAgeG1tQix4bW1FCi0JcHVucGNrbGJ3IHhtbUUseG1tSAk7IHhtbUU9KDIwIDIyIDI0IDI2IDI4IDJBIDJDIDJFKQotCXB1bnBja2hidyB4bW1CLHhtbUgJOyB4bW1CPSgwMSAwMyAwNSAwNyAwOSAwQiAwRCAwRikKKyAgICAgICAgbW92ZHFhICAgIHhtbUIseG1tRQorICAgICAgICBwdW5wY2tsYncgeG1tRSx4bW1IICAgICA7IHhtbUU9KDIwIDIyIDI0IDI2IDI4IDJBIDJDIDJFKQorICAgICAgICBwdW5wY2toYncgeG1tQix4bW1IICAgICA7IHhtbUI9KDAxIDAzIDA1IDA3IDA5IDBCIDBEIDBGKQogCi0JbW92ZHFhICAgIHhtbUYseG1tRAotCXB1bnBja2xidyB4bW1ELHhtbUgJOyB4bW1EPSgxMSAxMyAxNSAxNyAxOSAxQiAxRCAxRikKLQlwdW5wY2toYncgeG1tRix4bW1ICTsgeG1tRj0oMjEgMjMgMjUgMjcgMjkgMkIgMkQgMkYpCisgICAgICAgIG1vdmRxYSAgICB4bW1GLHhtbUQKKyAgICAgICAgcHVucGNrbGJ3IHhtbUQseG1tSCAgICAgOyB4bW1EPSgxMSAxMyAxNSAxNyAxOSAxQiAxRCAxRikKKyAgICAgICAgcHVucGNraGJ3IHhtbUYseG1tSCAgICAgOyB4bW1GPSgyMSAyMyAyNSAyNyAyOSAyQiAyRCAyRikKIAogJWVsc2UgOyBSR0JfUElYRUxTSVpFID09IDQgOyAtLS0tLS0tLS0tLQogCiAuY29sdW1uX2xkMToKLQl0ZXN0CWNsLCBTSVpFT0ZfWE1NV09SRC8xNgotCWp6CXNob3J0IC5jb2x1bW5fbGQyCi0Jc3ViCWVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC8xNgotCW1vdmQJeG1tQSwgWE1NX0RXT1JEIFtlc2krZWN4KlJHQl9QSVhFTFNJWkVdCisgICAgICAgIHRlc3QgICAgY2wsIFNJWkVPRl9YTU1XT1JELzE2CisgICAgICAgIGp6ICAgICAgc2hvcnQgLmNvbHVtbl9sZDIKKyAgICAgICAgc3ViICAgICBlY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQvMTYKKyAgICAgICAgbW92ZCAgICB4bW1BLCBYTU1fRFdPUkQgW2VzaStlY3gqUkdCX1BJWEVMU0laRV0KIC5jb2x1bW5fbGQyOgotCXRlc3QJY2wsIFNJWkVPRl9YTU1XT1JELzgKLQlqeglzaG9ydCAuY29sdW1uX2xkNAotCXN1YgllY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQvOAotCW1vdnEJeG1tRSwgWE1NX01NV09SRCBbZXNpK2VjeCpSR0JfUElYRUxTSVpFXQotCXBzbGxkcQl4bW1BLCBTSVpFT0ZfTU1XT1JECi0JcG9yCXhtbUEseG1tRQorICAgICAgICB0ZXN0ICAgIGNsLCBTSVpFT0ZfWE1NV09SRC84CisgICAgICAgIGp6ICAgICAgc2hvcnQgLmNvbHVtbl9sZDQKKyAgICAgICAgc3ViICAgICBlY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQvOAorICAgICAgICBtb3ZxICAgIHhtbUUsIFhNTV9NTVdPUkQgW2VzaStlY3gqUkdCX1BJWEVMU0laRV0KKyAgICAgICAgcHNsbGRxICB4bW1BLCBTSVpFT0ZfTU1XT1JECisgICAgICAgIHBvciAgICAgeG1tQSx4bW1FCiAuY29sdW1uX2xkNDoKLQl0ZXN0CWNsLCBTSVpFT0ZfWE1NV09SRC80Ci0JanoJc2hvcnQgLmNvbHVtbl9sZDgKLQlzdWIJZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzQKLQltb3ZkcWEJeG1tRSx4bW1BCi0JbW92ZHF1CXhtbUEsIFhNTVdPUkQgW2VzaStlY3gqUkdCX1BJWEVMU0laRV0KKyAgICAgICAgdGVzdCAgICBjbCwgU0laRU9GX1hNTVdPUkQvNAorICAgICAgICBqeiAgICAgIHNob3J0IC5jb2x1bW5fbGQ4CisgICAgICAgIHN1YiAgICAgZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzQKKyAgICAgICAgbW92ZHFhICB4bW1FLHhtbUEKKyAgICAgICAgbW92ZHF1ICB4bW1BLCBYTU1XT1JEIFtlc2krZWN4KlJHQl9QSVhFTFNJWkVdCiAuY29sdW1uX2xkODoKLQl0ZXN0CWNsLCBTSVpFT0ZfWE1NV09SRC8yCi0JbW92CWVjeCwgU0laRU9GX1hNTVdPUkQKLQlqeglzaG9ydCAucmdiX3ljY19jbnYKLQltb3ZkcWEJeG1tRix4bW1BCi0JbW92ZHFhCXhtbUgseG1tRQotCW1vdmRxdQl4bW1BLCBYTU1XT1JEIFtlc2krMCpTSVpFT0ZfWE1NV09SRF0KLQltb3ZkcXUJeG1tRSwgWE1NV09SRCBbZXNpKzEqU0laRU9GX1hNTVdPUkRdCi0Jam1wCXNob3J0IC5yZ2JfeWNjX2NudgotCWFsaWdueAkxNiw3CisgICAgICAgIHRlc3QgICAgY2wsIFNJWkVPRl9YTU1XT1JELzIKKyAgICAgICAgbW92ICAgICBlY3gsIFNJWkVPRl9YTU1XT1JECisgICAgICAgIGp6ICAgICAgc2hvcnQgLnJnYl95Y2NfY252CisgICAgICAgIG1vdmRxYSAgeG1tRix4bW1BCisgICAgICAgIG1vdmRxYSAgeG1tSCx4bW1FCisgICAgICAgIG1vdmRxdSAgeG1tQSwgWE1NV09SRCBbZXNpKzAqU0laRU9GX1hNTVdPUkRdCisgICAgICAgIG1vdmRxdSAgeG1tRSwgWE1NV09SRCBbZXNpKzEqU0laRU9GX1hNTVdPUkRdCisgICAgICAgIGptcCAgICAgc2hvcnQgLnJnYl95Y2NfY252CisgICAgICAgIGFsaWdueCAgMTYsNwogCiAuY29sdW1ubG9vcDoKLQltb3ZkcXUJeG1tQSwgWE1NV09SRCBbZXNpKzAqU0laRU9GX1hNTVdPUkRdCi0JbW92ZHF1CXhtbUUsIFhNTVdPUkQgW2VzaSsxKlNJWkVPRl9YTU1XT1JEXQotCW1vdmRxdQl4bW1GLCBYTU1XT1JEIFtlc2krMipTSVpFT0ZfWE1NV09SRF0KLQltb3ZkcXUJeG1tSCwgWE1NV09SRCBbZXNpKzMqU0laRU9GX1hNTVdPUkRdCisgICAgICAgIG1vdmRxdSAgeG1tQSwgWE1NV09SRCBbZXNpKzAqU0laRU9GX1hNTVdPUkRdCisgICAgICAgIG1vdmRxdSAgeG1tRSwgWE1NV09SRCBbZXNpKzEqU0laRU9GX1hNTVdPUkRdCisgICAgICAgIG1vdmRxdSAgeG1tRiwgWE1NV09SRCBbZXNpKzIqU0laRU9GX1hNTVdPUkRdCisgICAgICAgIG1vdmRxdSAgeG1tSCwgWE1NV09SRCBbZXNpKzMqU0laRU9GX1hNTVdPUkRdCiAKIC5yZ2JfeWNjX2NudjoKLQk7IHhtbUE9KDAwIDEwIDIwIDMwIDAxIDExIDIxIDMxIDAyIDEyIDIyIDMyIDAzIDEzIDIzIDMzKQotCTsgeG1tRT0oMDQgMTQgMjQgMzQgMDUgMTUgMjUgMzUgMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCi0JOyB4bW1GPSgwOCAxOCAyOCAzOCAwOSAxOSAyOSAzOSAwQSAxQSAyQSAzQSAwQiAxQiAyQiAzQikKLQk7IHhtbUg9KDBDIDFDIDJDIDNDIDBEIDFEIDJEIDNEIDBFIDFFIDJFIDNFIDBGIDFGIDJGIDNGKQorICAgICAgICA7IHhtbUE9KDAwIDEwIDIwIDMwIDAxIDExIDIxIDMxIDAyIDEyIDIyIDMyIDAzIDEzIDIzIDMzKQorICAgICAgICA7IHhtbUU9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1IDA2IDE2IDI2IDM2IDA3IDE3IDI3IDM3KQorICAgICAgICA7IHhtbUY9KDA4IDE4IDI4IDM4IDA5IDE5IDI5IDM5IDBBIDFBIDJBIDNBIDBCIDFCIDJCIDNCKQorICAgICAgICA7IHhtbUg9KDBDIDFDIDJDIDNDIDBEIDFEIDJEIDNEIDBFIDFFIDJFIDNFIDBGIDFGIDJGIDNGKQogCi0JbW92ZHFhICAgIHhtbUQseG1tQQotCXB1bnBja2xidyB4bW1BLHhtbUUJOyB4bW1BPSgwMCAwNCAxMCAxNCAyMCAyNCAzMCAzNCAwMSAwNSAxMSAxNSAyMSAyNSAzMSAzNSkKLQlwdW5wY2toYncgeG1tRCx4bW1FCTsgeG1tRD0oMDIgMDYgMTIgMTYgMjIgMjYgMzIgMzYgMDMgMDcgMTMgMTcgMjMgMjcgMzMgMzcpCisgICAgICAgIG1vdmRxYSAgICB4bW1ELHhtbUEKKyAgICAgICAgcHVucGNrbGJ3IHhtbUEseG1tRSAgICAgOyB4bW1BPSgwMCAwNCAxMCAxNCAyMCAyNCAzMCAzNCAwMSAwNSAxMSAxNSAyMSAyNSAzMSAzNSkKKyAgICAgICAgcHVucGNraGJ3IHhtbUQseG1tRSAgICAgOyB4bW1EPSgwMiAwNiAxMiAxNiAyMiAyNiAzMiAzNiAwMyAwNyAxMyAxNyAyMyAyNyAzMyAzNykKIAotCW1vdmRxYSAgICB4bW1DLHhtbUYKLQlwdW5wY2tsYncgeG1tRix4bW1ICTsgeG1tRj0oMDggMEMgMTggMUMgMjggMkMgMzggM0MgMDkgMEQgMTkgMUQgMjkgMkQgMzkgM0QpCi0JcHVucGNraGJ3IHhtbUMseG1tSAk7IHhtbUM9KDBBIDBFIDFBIDFFIDJBIDJFIDNBIDNFIDBCIDBGIDFCIDFGIDJCIDJGIDNCIDNGKQorICAgICAgICBtb3ZkcWEgICAgeG1tQyx4bW1GCisgICAgICAgIHB1bnBja2xidyB4bW1GLHhtbUggICAgIDsgeG1tRj0oMDggMEMgMTggMUMgMjggMkMgMzggM0MgMDkgMEQgMTkgMUQgMjkgMkQgMzkgM0QpCisgICAgICAgIHB1bnBja2hidyB4bW1DLHhtbUggICAgIDsgeG1tQz0oMEEgMEUgMUEgMUUgMkEgMkUgM0EgM0UgMEIgMEYgMUIgMUYgMkIgMkYgM0IgM0YpCiAKLQltb3ZkcWEgICAgeG1tQix4bW1BCi0JcHVucGNrbHdkIHhtbUEseG1tRgk7IHhtbUE9KDAwIDA0IDA4IDBDIDEwIDE0IDE4IDFDIDIwIDI0IDI4IDJDIDMwIDM0IDM4IDNDKQotCXB1bnBja2h3ZCB4bW1CLHhtbUYJOyB4bW1CPSgwMSAwNSAwOSAwRCAxMSAxNSAxOSAxRCAyMSAyNSAyOSAyRCAzMSAzNSAzOSAzRCkKKyAgICAgICAgbW92ZHFhICAgIHhtbUIseG1tQQorICAgICAgICBwdW5wY2tsd2QgeG1tQSx4bW1GICAgICA7IHhtbUE9KDAwIDA0IDA4IDBDIDEwIDE0IDE4IDFDIDIwIDI0IDI4IDJDIDMwIDM0IDM4IDNDKQorICAgICAgICBwdW5wY2tod2QgeG1tQix4bW1GICAgICA7IHhtbUI9KDAxIDA1IDA5IDBEIDExIDE1IDE5IDFEIDIxIDI1IDI5IDJEIDMxIDM1IDM5IDNEKQogCi0JbW92ZHFhICAgIHhtbUcseG1tRAotCXB1bnBja2x3ZCB4bW1ELHhtbUMJOyB4bW1EPSgwMiAwNiAwQSAwRSAxMiAxNiAxQSAxRSAyMiAyNiAyQSAyRSAzMiAzNiAzQSAzRSkKLQlwdW5wY2tod2QgeG1tRyx4bW1DCTsgeG1tRz0oMDMgMDcgMEIgMEYgMTMgMTcgMUIgMUYgMjMgMjcgMkIgMkYgMzMgMzcgM0IgM0YpCisgICAgICAgIG1vdmRxYSAgICB4bW1HLHhtbUQKKyAgICAgICAgcHVucGNrbHdkIHhtbUQseG1tQyAgICAgOyB4bW1EPSgwMiAwNiAwQSAwRSAxMiAxNiAxQSAxRSAyMiAyNiAyQSAyRSAzMiAzNiAzQSAzRSkKKyAgICAgICAgcHVucGNraHdkIHhtbUcseG1tQyAgICAgOyB4bW1HPSgwMyAwNyAwQiAwRiAxMyAxNyAxQiAxRiAyMyAyNyAyQiAyRiAzMyAzNyAzQiAzRikKIAotCW1vdmRxYSAgICB4bW1FLHhtbUEKLQlwdW5wY2tsYncgeG1tQSx4bW1ECTsgeG1tQT0oMDAgMDIgMDQgMDYgMDggMEEgMEMgMEUgMTAgMTIgMTQgMTYgMTggMUEgMUMgMUUpCi0JcHVucGNraGJ3IHhtbUUseG1tRAk7IHhtbUU9KDIwIDIyIDI0IDI2IDI4IDJBIDJDIDJFIDMwIDMyIDM0IDM2IDM4IDNBIDNDIDNFKQorICAgICAgICBtb3ZkcWEgICAgeG1tRSx4bW1BCisgICAgICAgIHB1bnBja2xidyB4bW1BLHhtbUQgICAgIDsgeG1tQT0oMDAgMDIgMDQgMDYgMDggMEEgMEMgMEUgMTAgMTIgMTQgMTYgMTggMUEgMUMgMUUpCisgICAgICAgIHB1bnBja2hidyB4bW1FLHhtbUQgICAgIDsgeG1tRT0oMjAgMjIgMjQgMjYgMjggMkEgMkMgMkUgMzAgMzIgMzQgMzYgMzggM0EgM0MgM0UpCiAKLQltb3ZkcWEgICAgeG1tSCx4bW1CCi0JcHVucGNrbGJ3IHhtbUIseG1tRwk7IHhtbUI9KDAxIDAzIDA1IDA3IDA5IDBCIDBEIDBGIDExIDEzIDE1IDE3IDE5IDFCIDFEIDFGKQotCXB1bnBja2hidyB4bW1ILHhtbUcJOyB4bW1IPSgyMSAyMyAyNSAyNyAyOSAyQiAyRCAyRiAzMSAzMyAzNSAzNyAzOSAzQiAzRCAzRikKKyAgICAgICAgbW92ZHFhICAgIHhtbUgseG1tQgorICAgICAgICBwdW5wY2tsYncgeG1tQix4bW1HICAgICA7IHhtbUI9KDAxIDAzIDA1IDA3IDA5IDBCIDBEIDBGIDExIDEzIDE1IDE3IDE5IDFCIDFEIDFGKQorICAgICAgICBwdW5wY2toYncgeG1tSCx4bW1HICAgICA7IHhtbUg9KDIxIDIzIDI1IDI3IDI5IDJCIDJEIDJGIDMxIDMzIDM1IDM3IDM5IDNCIDNEIDNGKQogCi0JcHhvciAgICAgIHhtbUYseG1tRgorICAgICAgICBweG9yICAgICAgeG1tRix4bW1GCiAKLQltb3ZkcWEgICAgeG1tQyx4bW1BCi0JcHVucGNrbGJ3IHhtbUEseG1tRgk7IHhtbUE9KDAwIDAyIDA0IDA2IDA4IDBBIDBDIDBFKQotCXB1bnBja2hidyB4bW1DLHhtbUYJOyB4bW1DPSgxMCAxMiAxNCAxNiAxOCAxQSAxQyAxRSkKKyAgICAgICAgbW92ZHFhICAgIHhtbUMseG1tQQorICAgICAgICBwdW5wY2tsYncgeG1tQSx4bW1GICAgICA7IHhtbUE9KDAwIDAyIDA0IDA2IDA4IDBBIDBDIDBFKQorICAgICAgICBwdW5wY2toYncgeG1tQyx4bW1GICAgICA7IHhtbUM9KDEwIDEyIDE0IDE2IDE4IDFBIDFDIDFFKQogCi0JbW92ZHFhICAgIHhtbUQseG1tQgotCXB1bnBja2xidyB4bW1CLHhtbUYJOyB4bW1CPSgwMSAwMyAwNSAwNyAwOSAwQiAwRCAwRikKLQlwdW5wY2toYncgeG1tRCx4bW1GCTsgeG1tRD0oMTEgMTMgMTUgMTcgMTkgMUIgMUQgMUYpCisgICAgICAgIG1vdmRxYSAgICB4bW1ELHhtbUIKKyAgICAgICAgcHVucGNrbGJ3IHhtbUIseG1tRiAgICAgOyB4bW1CPSgwMSAwMyAwNSAwNyAwOSAwQiAwRCAwRikKKyAgICAgICAgcHVucGNraGJ3IHhtbUQseG1tRiAgICAgOyB4bW1EPSgxMSAxMyAxNSAxNyAxOSAxQiAxRCAxRikKIAotCW1vdmRxYSAgICB4bW1HLHhtbUUKLQlwdW5wY2tsYncgeG1tRSx4bW1GCTsgeG1tRT0oMjAgMjIgMjQgMjYgMjggMkEgMkMgMkUpCi0JcHVucGNraGJ3IHhtbUcseG1tRgk7IHhtbUc9KDMwIDMyIDM0IDM2IDM4IDNBIDNDIDNFKQorICAgICAgICBtb3ZkcWEgICAgeG1tRyx4bW1FCisgICAgICAgIHB1bnBja2xidyB4bW1FLHhtbUYgICAgIDsgeG1tRT0oMjAgMjIgMjQgMjYgMjggMkEgMkMgMkUpCisgICAgICAgIHB1bnBja2hidyB4bW1HLHhtbUYgICAgIDsgeG1tRz0oMzAgMzIgMzQgMzYgMzggM0EgM0MgM0UpCiAKLQlwdW5wY2tsYncgeG1tRix4bW1ICi0JcHVucGNraGJ3IHhtbUgseG1tSAotCXBzcmx3ICAgICB4bW1GLEJZVEVfQklUCTsgeG1tRj0oMjEgMjMgMjUgMjcgMjkgMkIgMkQgMkYpCi0JcHNybHcgICAgIHhtbUgsQllURV9CSVQJOyB4bW1IPSgzMSAzMyAzNSAzNyAzOSAzQiAzRCAzRikKKyAgICAgICAgcHVucGNrbGJ3IHhtbUYseG1tSAorICAgICAgICBwdW5wY2toYncgeG1tSCx4bW1ICisgICAgICAgIHBzcmx3ICAgICB4bW1GLEJZVEVfQklUIDsgeG1tRj0oMjEgMjMgMjUgMjcgMjkgMkIgMkQgMkYpCisgICAgICAgIHBzcmx3ICAgICB4bW1ILEJZVEVfQklUIDsgeG1tSD0oMzEgMzMgMzUgMzcgMzkgM0IgM0QgM0YpCiAKICVlbmRpZiA7IFJHQl9QSVhFTFNJWkUgOyAtLS0tLS0tLS0tLS0tLS0KIAotCTsgeG1tMD1SKDAyNDY4QUNFKT1SRSwgeG1tMj1HKDAyNDY4QUNFKT1HRSwgeG1tND1CKDAyNDY4QUNFKT1CRQotCTsgeG1tMT1SKDEzNTc5QkRGKT1STywgeG1tMz1HKDEzNTc5QkRGKT1HTywgeG1tNT1CKDEzNTc5QkRGKT1CTworICAgICAgICA7IHhtbTA9UigwMjQ2OEFDRSk9UkUsIHhtbTI9RygwMjQ2OEFDRSk9R0UsIHhtbTQ9QigwMjQ2OEFDRSk9QkUKKyAgICAgICAgOyB4bW0xPVIoMTM1NzlCREYpPVJPLCB4bW0zPUcoMTM1NzlCREYpPUdPLCB4bW01PUIoMTM1NzlCREYpPUJPCiAKLQk7IChPcmlnaW5hbCkKLQk7IFkgID0gIDAuMjk5MDAgKiBSICsgMC41ODcwMCAqIEcgKyAwLjExNDAwICogQgotCTsgQ2IgPSAtMC4xNjg3NCAqIFIgLSAwLjMzMTI2ICogRyArIDAuNTAwMDAgKiBCICsgQ0VOVEVSSlNBTVBMRQotCTsgQ3IgPSAgMC41MDAwMCAqIFIgLSAwLjQxODY5ICogRyAtIDAuMDgxMzEgKiBCICsgQ0VOVEVSSlNBTVBMRQotCTsKLQk7IChUaGlzIGltcGxlbWVudGF0aW9uKQotCTsgWSAgPSAgMC4yOTkwMCAqIFIgKyAwLjMzNzAwICogRyArIDAuMTE0MDAgKiBCICsgMC4yNTAwMCAqIEcKLQk7IENiID0gLTAuMTY4NzQgKiBSIC0gMC4zMzEyNiAqIEcgKyAwLjUwMDAwICogQiArIENFTlRFUkpTQU1QTEUKLQk7IENyID0gIDAuNTAwMDAgKiBSIC0gMC40MTg2OSAqIEcgLSAwLjA4MTMxICogQiArIENFTlRFUkpTQU1QTEUKKyAgICAgICAgOyAoT3JpZ2luYWwpCisgICAgICAgIDsgWSAgPSAgMC4yOTkwMCAqIFIgKyAwLjU4NzAwICogRyArIDAuMTE0MDAgKiBCCisgICAgICAgIDsgQ2IgPSAtMC4xNjg3NCAqIFIgLSAwLjMzMTI2ICogRyArIDAuNTAwMDAgKiBCICsgQ0VOVEVSSlNBTVBMRQorICAgICAgICA7IENyID0gIDAuNTAwMDAgKiBSIC0gMC40MTg2OSAqIEcgLSAwLjA4MTMxICogQiArIENFTlRFUkpTQU1QTEUKKyAgICAgICAgOworICAgICAgICA7IChUaGlzIGltcGxlbWVudGF0aW9uKQorICAgICAgICA7IFkgID0gIDAuMjk5MDAgKiBSICsgMC4zMzcwMCAqIEcgKyAwLjExNDAwICogQiArIDAuMjUwMDAgKiBHCisgICAgICAgIDsgQ2IgPSAtMC4xNjg3NCAqIFIgLSAwLjMzMTI2ICogRyArIDAuNTAwMDAgKiBCICsgQ0VOVEVSSlNBTVBMRQorICAgICAgICA7IENyID0gIDAuNTAwMDAgKiBSIC0gMC40MTg2OSAqIEcgLSAwLjA4MTMxICogQiArIENFTlRFUkpTQU1QTEUKIAotCW1vdmRxYSAgICBYTU1XT1JEIFt3aygwKV0sIHhtbTAJOyB3aygwKT1SRQotCW1vdmRxYSAgICBYTU1XT1JEIFt3aygxKV0sIHhtbTEJOyB3aygxKT1STwotCW1vdmRxYSAgICBYTU1XT1JEIFt3aygyKV0sIHhtbTQJOyB3aygyKT1CRQotCW1vdmRxYSAgICBYTU1XT1JEIFt3aygzKV0sIHhtbTUJOyB3aygzKT1CTworICAgICAgICBtb3ZkcWEgICAgWE1NV09SRCBbd2soMCldLCB4bW0wIDsgd2soMCk9UkUKKyAgICAgICAgbW92ZHFhICAgIFhNTVdPUkQgW3drKDEpXSwgeG1tMSA7IHdrKDEpPVJPCisgICAgICAgIG1vdmRxYSAgICBYTU1XT1JEIFt3aygyKV0sIHhtbTQgOyB3aygyKT1CRQorICAgICAgICBtb3ZkcWEgICAgWE1NV09SRCBbd2soMyldLCB4bW01IDsgd2soMyk9Qk8KIAotCW1vdmRxYSAgICB4bW02LHhtbTEKLQlwdW5wY2tsd2QgeG1tMSx4bW0zCi0JcHVucGNraHdkIHhtbTYseG1tMwotCW1vdmRxYSAgICB4bW03LHhtbTEKLQltb3ZkcWEgICAgeG1tNCx4bW02Ci0JcG1hZGR3ZCAgIHhtbTEsW0dPVE9GRihlYXgsUFdfRjAyOTlfRjAzMzcpXSA7IHhtbTE9Uk9MKkZJWCgwLjI5OSkrR09MKkZJWCgwLjMzNykKLQlwbWFkZHdkICAgeG1tNixbR09UT0ZGKGVheCxQV19GMDI5OV9GMDMzNyldIDsgeG1tNj1ST0gqRklYKDAuMjk5KStHT0gqRklYKDAuMzM3KQotCXBtYWRkd2QgICB4bW03LFtHT1RPRkYoZWF4LFBXX01GMDE2X01GMDMzKV0gOyB4bW03PVJPTCotRklYKDAuMTY4KStHT0wqLUZJWCgwLjMzMSkKLQlwbWFkZHdkICAgeG1tNCxbR09UT0ZGKGVheCxQV19NRjAxNl9NRjAzMyldIDsgeG1tND1ST0gqLUZJWCgwLjE2OCkrR09IKi1GSVgoMC4zMzEpCisgICAgICAgIG1vdmRxYSAgICB4bW02LHhtbTEKKyAgICAgICAgcHVucGNrbHdkIHhtbTEseG1tMworICAgICAgICBwdW5wY2tod2QgeG1tNix4bW0zCisgICAgICAgIG1vdmRxYSAgICB4bW03LHhtbTEKKyAgICAgICAgbW92ZHFhICAgIHhtbTQseG1tNgorICAgICAgICBwbWFkZHdkICAgeG1tMSxbR09UT0ZGKGVheCxQV19GMDI5OV9GMDMzNyldIDsgeG1tMT1ST0wqRklYKDAuMjk5KStHT0wqRklYKDAuMzM3KQorICAgICAgICBwbWFkZHdkICAgeG1tNixbR09UT0ZGKGVheCxQV19GMDI5OV9GMDMzNyldIDsgeG1tNj1ST0gqRklYKDAuMjk5KStHT0gqRklYKDAuMzM3KQorICAgICAgICBwbWFkZHdkICAgeG1tNyxbR09UT0ZGKGVheCxQV19NRjAxNl9NRjAzMyldIDsgeG1tNz1ST0wqLUZJWCgwLjE2OCkrR09MKi1GSVgoMC4zMzEpCisgICAgICAgIHBtYWRkd2QgICB4bW00LFtHT1RPRkYoZWF4LFBXX01GMDE2X01GMDMzKV0gOyB4bW00PVJPSCotRklYKDAuMTY4KStHT0gqLUZJWCgwLjMzMSkKIAotCW1vdmRxYSAgICBYTU1XT1JEIFt3ayg0KV0sIHhtbTEJOyB3ayg0KT1ST0wqRklYKDAuMjk5KStHT0wqRklYKDAuMzM3KQotCW1vdmRxYSAgICBYTU1XT1JEIFt3ayg1KV0sIHhtbTYJOyB3ayg1KT1ST0gqRklYKDAuMjk5KStHT0gqRklYKDAuMzM3KQorICAgICAgICBtb3ZkcWEgICAgWE1NV09SRCBbd2soNCldLCB4bW0xIDsgd2soNCk9Uk9MKkZJWCgwLjI5OSkrR09MKkZJWCgwLjMzNykKKyAgICAgICAgbW92ZHFhICAgIFhNTVdPUkQgW3drKDUpXSwgeG1tNiA7IHdrKDUpPVJPSCpGSVgoMC4yOTkpK0dPSCpGSVgoMC4zMzcpCiAKLQlweG9yICAgICAgeG1tMSx4bW0xCi0JcHhvciAgICAgIHhtbTYseG1tNgotCXB1bnBja2x3ZCB4bW0xLHhtbTUJCTsgeG1tMT1CT0wKLQlwdW5wY2tod2QgeG1tNix4bW01CQk7IHhtbTY9Qk9ICi0JcHNybGQgICAgIHhtbTEsMQkJOyB4bW0xPUJPTCpGSVgoMC41MDApCi0JcHNybGQgICAgIHhtbTYsMQkJOyB4bW02PUJPSCpGSVgoMC41MDApCisgICAgICAgIHB4b3IgICAgICB4bW0xLHhtbTEKKyAgICAgICAgcHhvciAgICAgIHhtbTYseG1tNgorICAgICAgICBwdW5wY2tsd2QgeG1tMSx4bW01ICAgICAgICAgICAgIDsgeG1tMT1CT0wKKyAgICAgICAgcHVucGNraHdkIHhtbTYseG1tNSAgICAgICAgICAgICA7IHhtbTY9Qk9ICisgICAgICAgIHBzcmxkICAgICB4bW0xLDEgICAgICAgICAgICAgICAgOyB4bW0xPUJPTCpGSVgoMC41MDApCisgICAgICAgIHBzcmxkICAgICB4bW02LDEgICAgICAgICAgICAgICAgOyB4bW02PUJPSCpGSVgoMC41MDApCiAKLQltb3ZkcWEgICAgeG1tNSxbR09UT0ZGKGVheCxQRF9PTkVIQUxGTTFfQ0opXSA7IHhtbTU9W1BEX09ORUhBTEZNMV9DSl0KKyAgICAgICAgbW92ZHFhICAgIHhtbTUsW0dPVE9GRihlYXgsUERfT05FSEFMRk0xX0NKKV0gOyB4bW01PVtQRF9PTkVIQUxGTTFfQ0pdCiAKLQlwYWRkZCAgICAgeG1tNyx4bW0xCi0JcGFkZGQgICAgIHhtbTQseG1tNgotCXBhZGRkICAgICB4bW03LHhtbTUKLQlwYWRkZCAgICAgeG1tNCx4bW01Ci0JcHNybGQgICAgIHhtbTcsU0NBTEVCSVRTCTsgeG1tNz1DYk9MCi0JcHNybGQgICAgIHhtbTQsU0NBTEVCSVRTCTsgeG1tND1DYk9ICi0JcGFja3NzZHcgIHhtbTcseG1tNAkJOyB4bW03PUNiTworICAgICAgICBwYWRkZCAgICAgeG1tNyx4bW0xCisgICAgICAgIHBhZGRkICAgICB4bW00LHhtbTYKKyAgICAgICAgcGFkZGQgICAgIHhtbTcseG1tNQorICAgICAgICBwYWRkZCAgICAgeG1tNCx4bW01CisgICAgICAgIHBzcmxkICAgICB4bW03LFNDQUxFQklUUyAgICAgICAgOyB4bW03PUNiT0wKKyAgICAgICAgcHNybGQgICAgIHhtbTQsU0NBTEVCSVRTICAgICAgICA7IHhtbTQ9Q2JPSAorICAgICAgICBwYWNrc3NkdyAgeG1tNyx4bW00ICAgICAgICAgICAgIDsgeG1tNz1DYk8KIAotCW1vdmRxYSAgICB4bW0xLCBYTU1XT1JEIFt3aygyKV0JOyB4bW0xPUJFCisgICAgICAgIG1vdmRxYSAgICB4bW0xLCBYTU1XT1JEIFt3aygyKV0gOyB4bW0xPUJFCiAKLQltb3ZkcWEgICAgeG1tNix4bW0wCi0JcHVucGNrbHdkIHhtbTAseG1tMgotCXB1bnBja2h3ZCB4bW02LHhtbTIKLQltb3ZkcWEgICAgeG1tNSx4bW0wCi0JbW92ZHFhICAgIHhtbTQseG1tNgotCXBtYWRkd2QgICB4bW0wLFtHT1RPRkYoZWF4LFBXX0YwMjk5X0YwMzM3KV0gOyB4bW0wPVJFTCpGSVgoMC4yOTkpK0dFTCpGSVgoMC4zMzcpCi0JcG1hZGR3ZCAgIHhtbTYsW0dPVE9GRihlYXgsUFdfRjAyOTlfRjAzMzcpXSA7IHhtbTY9UkVIKkZJWCgwLjI5OSkrR0VIKkZJWCgwLjMzNykKLQlwbWFkZHdkICAgeG1tNSxbR09UT0ZGKGVheCxQV19NRjAxNl9NRjAzMyldIDsgeG1tNT1SRUwqLUZJWCgwLjE2OCkrR0VMKi1GSVgoMC4zMzEpCi0JcG1hZGR3ZCAgIHhtbTQsW0dPVE9GRihlYXgsUFdfTUYwMTZfTUYwMzMpXSA7IHhtbTQ9UkVIKi1GSVgoMC4xNjgpK0dFSCotRklYKDAuMzMxKQorICAgICAgICBtb3ZkcWEgICAgeG1tNix4bW0wCisgICAgICAgIHB1bnBja2x3ZCB4bW0wLHhtbTIKKyAgICAgICAgcHVucGNraHdkIHhtbTYseG1tMgorICAgICAgICBtb3ZkcWEgICAgeG1tNSx4bW0wCisgICAgICAgIG1vdmRxYSAgICB4bW00LHhtbTYKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTAsW0dPVE9GRihlYXgsUFdfRjAyOTlfRjAzMzcpXSA7IHhtbTA9UkVMKkZJWCgwLjI5OSkrR0VMKkZJWCgwLjMzNykKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTYsW0dPVE9GRihlYXgsUFdfRjAyOTlfRjAzMzcpXSA7IHhtbTY9UkVIKkZJWCgwLjI5OSkrR0VIKkZJWCgwLjMzNykKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTUsW0dPVE9GRihlYXgsUFdfTUYwMTZfTUYwMzMpXSA7IHhtbTU9UkVMKi1GSVgoMC4xNjgpK0dFTCotRklYKDAuMzMxKQorICAgICAgICBwbWFkZHdkICAgeG1tNCxbR09UT0ZGKGVheCxQV19NRjAxNl9NRjAzMyldIDsgeG1tND1SRUgqLUZJWCgwLjE2OCkrR0VIKi1GSVgoMC4zMzEpCiAKLQltb3ZkcWEgICAgWE1NV09SRCBbd2soNildLCB4bW0wCTsgd2soNik9UkVMKkZJWCgwLjI5OSkrR0VMKkZJWCgwLjMzNykKLQltb3ZkcWEgICAgWE1NV09SRCBbd2soNyldLCB4bW02CTsgd2soNyk9UkVIKkZJWCgwLjI5OSkrR0VIKkZJWCgwLjMzNykKKyAgICAgICAgbW92ZHFhICAgIFhNTVdPUkQgW3drKDYpXSwgeG1tMCA7IHdrKDYpPVJFTCpGSVgoMC4yOTkpK0dFTCpGSVgoMC4zMzcpCisgICAgICAgIG1vdmRxYSAgICBYTU1XT1JEIFt3ayg3KV0sIHhtbTYgOyB3ayg3KT1SRUgqRklYKDAuMjk5KStHRUgqRklYKDAuMzM3KQogCi0JcHhvciAgICAgIHhtbTAseG1tMAotCXB4b3IgICAgICB4bW02LHhtbTYKLQlwdW5wY2tsd2QgeG1tMCx4bW0xCQk7IHhtbTA9QkVMCi0JcHVucGNraHdkIHhtbTYseG1tMQkJOyB4bW02PUJFSAotCXBzcmxkICAgICB4bW0wLDEJCTsgeG1tMD1CRUwqRklYKDAuNTAwKQotCXBzcmxkICAgICB4bW02LDEJCTsgeG1tNj1CRUgqRklYKDAuNTAwKQorICAgICAgICBweG9yICAgICAgeG1tMCx4bW0wCisgICAgICAgIHB4b3IgICAgICB4bW02LHhtbTYKKyAgICAgICAgcHVucGNrbHdkIHhtbTAseG1tMSAgICAgICAgICAgICA7IHhtbTA9QkVMCisgICAgICAgIHB1bnBja2h3ZCB4bW02LHhtbTEgICAgICAgICAgICAgOyB4bW02PUJFSAorICAgICAgICBwc3JsZCAgICAgeG1tMCwxICAgICAgICAgICAgICAgIDsgeG1tMD1CRUwqRklYKDAuNTAwKQorICAgICAgICBwc3JsZCAgICAgeG1tNiwxICAgICAgICAgICAgICAgIDsgeG1tNj1CRUgqRklYKDAuNTAwKQogCi0JbW92ZHFhICAgIHhtbTEsW0dPVE9GRihlYXgsUERfT05FSEFMRk0xX0NKKV0gOyB4bW0xPVtQRF9PTkVIQUxGTTFfQ0pdCisgICAgICAgIG1vdmRxYSAgICB4bW0xLFtHT1RPRkYoZWF4LFBEX09ORUhBTEZNMV9DSildIDsgeG1tMT1bUERfT05FSEFMRk0xX0NKXQogCi0JcGFkZGQgICAgIHhtbTUseG1tMAotCXBhZGRkICAgICB4bW00LHhtbTYKLQlwYWRkZCAgICAgeG1tNSx4bW0xCi0JcGFkZGQgICAgIHhtbTQseG1tMQotCXBzcmxkICAgICB4bW01LFNDQUxFQklUUwk7IHhtbTU9Q2JFTAotCXBzcmxkICAgICB4bW00LFNDQUxFQklUUwk7IHhtbTQ9Q2JFSAotCXBhY2tzc2R3ICB4bW01LHhtbTQJCTsgeG1tNT1DYkUKKyAgICAgICAgcGFkZGQgICAgIHhtbTUseG1tMAorICAgICAgICBwYWRkZCAgICAgeG1tNCx4bW02CisgICAgICAgIHBhZGRkICAgICB4bW01LHhtbTEKKyAgICAgICAgcGFkZGQgICAgIHhtbTQseG1tMQorICAgICAgICBwc3JsZCAgICAgeG1tNSxTQ0FMRUJJVFMgICAgICAgIDsgeG1tNT1DYkVMCisgICAgICAgIHBzcmxkICAgICB4bW00LFNDQUxFQklUUyAgICAgICAgOyB4bW00PUNiRUgKKyAgICAgICAgcGFja3NzZHcgIHhtbTUseG1tNCAgICAgICAgICAgICA7IHhtbTU9Q2JFCiAKLQlwc2xsdyAgICAgeG1tNyxCWVRFX0JJVAotCXBvciAgICAgICB4bW01LHhtbTcJCTsgeG1tNT1DYgotCW1vdmRxYSAgICBYTU1XT1JEIFtlYnhdLCB4bW01CTsgU2F2ZSBDYgorICAgICAgICBwc2xsdyAgICAgeG1tNyxCWVRFX0JJVAorICAgICAgICBwb3IgICAgICAgeG1tNSx4bW03ICAgICAgICAgICAgIDsgeG1tNT1DYgorICAgICAgICBtb3ZkcWEgICAgWE1NV09SRCBbZWJ4XSwgeG1tNSAgIDsgU2F2ZSBDYgogCi0JbW92ZHFhICAgIHhtbTAsIFhNTVdPUkQgW3drKDMpXQk7IHhtbTA9Qk8KLQltb3ZkcWEgICAgeG1tNiwgWE1NV09SRCBbd2soMildCTsgeG1tNj1CRQotCW1vdmRxYSAgICB4bW0xLCBYTU1XT1JEIFt3aygxKV0JOyB4bW0xPVJPCisgICAgICAgIG1vdmRxYSAgICB4bW0wLCBYTU1XT1JEIFt3aygzKV0gOyB4bW0wPUJPCisgICAgICAgIG1vdmRxYSAgICB4bW02LCBYTU1XT1JEIFt3aygyKV0gOyB4bW02PUJFCisgICAgICAgIG1vdmRxYSAgICB4bW0xLCBYTU1XT1JEIFt3aygxKV0gOyB4bW0xPVJPCiAKLQltb3ZkcWEgICAgeG1tNCx4bW0wCi0JcHVucGNrbHdkIHhtbTAseG1tMwotCXB1bnBja2h3ZCB4bW00LHhtbTMKLQltb3ZkcWEgICAgeG1tNyx4bW0wCi0JbW92ZHFhICAgIHhtbTUseG1tNAotCXBtYWRkd2QgICB4bW0wLFtHT1RPRkYoZWF4LFBXX0YwMTE0X0YwMjUwKV0gOyB4bW0wPUJPTCpGSVgoMC4xMTQpK0dPTCpGSVgoMC4yNTApCi0JcG1hZGR3ZCAgIHhtbTQsW0dPVE9GRihlYXgsUFdfRjAxMTRfRjAyNTApXSA7IHhtbTQ9Qk9IKkZJWCgwLjExNCkrR09IKkZJWCgwLjI1MCkKLQlwbWFkZHdkICAgeG1tNyxbR09UT0ZGKGVheCxQV19NRjAwOF9NRjA0MSldIDsgeG1tNz1CT0wqLUZJWCgwLjA4MSkrR09MKi1GSVgoMC40MTgpCi0JcG1hZGR3ZCAgIHhtbTUsW0dPVE9GRihlYXgsUFdfTUYwMDhfTUYwNDEpXSA7IHhtbTU9Qk9IKi1GSVgoMC4wODEpK0dPSCotRklYKDAuNDE4KQorICAgICAgICBtb3ZkcWEgICAgeG1tNCx4bW0wCisgICAgICAgIHB1bnBja2x3ZCB4bW0wLHhtbTMKKyAgICAgICAgcHVucGNraHdkIHhtbTQseG1tMworICAgICAgICBtb3ZkcWEgICAgeG1tNyx4bW0wCisgICAgICAgIG1vdmRxYSAgICB4bW01LHhtbTQKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTAsW0dPVE9GRihlYXgsUFdfRjAxMTRfRjAyNTApXSA7IHhtbTA9Qk9MKkZJWCgwLjExNCkrR09MKkZJWCgwLjI1MCkKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTQsW0dPVE9GRihlYXgsUFdfRjAxMTRfRjAyNTApXSA7IHhtbTQ9Qk9IKkZJWCgwLjExNCkrR09IKkZJWCgwLjI1MCkKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTcsW0dPVE9GRihlYXgsUFdfTUYwMDhfTUYwNDEpXSA7IHhtbTc9Qk9MKi1GSVgoMC4wODEpK0dPTCotRklYKDAuNDE4KQorICAgICAgICBwbWFkZHdkICAgeG1tNSxbR09UT0ZGKGVheCxQV19NRjAwOF9NRjA0MSldIDsgeG1tNT1CT0gqLUZJWCgwLjA4MSkrR09IKi1GSVgoMC40MTgpCiAKLQltb3ZkcWEgICAgeG1tMyxbR09UT0ZGKGVheCxQRF9PTkVIQUxGKV0JOyB4bW0zPVtQRF9PTkVIQUxGXQorICAgICAgICBtb3ZkcWEgICAgeG1tMyxbR09UT0ZGKGVheCxQRF9PTkVIQUxGKV0gOyB4bW0zPVtQRF9PTkVIQUxGXQogCi0JcGFkZGQgICAgIHhtbTAsIFhNTVdPUkQgW3drKDQpXQotCXBhZGRkICAgICB4bW00LCBYTU1XT1JEIFt3ayg1KV0KLQlwYWRkZCAgICAgeG1tMCx4bW0zCi0JcGFkZGQgICAgIHhtbTQseG1tMwotCXBzcmxkICAgICB4bW0wLFNDQUxFQklUUwk7IHhtbTA9WU9MCi0JcHNybGQgICAgIHhtbTQsU0NBTEVCSVRTCTsgeG1tND1ZT0gKLQlwYWNrc3NkdyAgeG1tMCx4bW00CQk7IHhtbTA9WU8KKyAgICAgICAgcGFkZGQgICAgIHhtbTAsIFhNTVdPUkQgW3drKDQpXQorICAgICAgICBwYWRkZCAgICAgeG1tNCwgWE1NV09SRCBbd2soNSldCisgICAgICAgIHBhZGRkICAgICB4bW0wLHhtbTMKKyAgICAgICAgcGFkZGQgICAgIHhtbTQseG1tMworICAgICAgICBwc3JsZCAgICAgeG1tMCxTQ0FMRUJJVFMgICAgICAgIDsgeG1tMD1ZT0wKKyAgICAgICAgcHNybGQgICAgIHhtbTQsU0NBTEVCSVRTICAgICAgICA7IHhtbTQ9WU9ICisgICAgICAgIHBhY2tzc2R3ICB4bW0wLHhtbTQgICAgICAgICAgICAgOyB4bW0wPVlPCiAKLQlweG9yICAgICAgeG1tMyx4bW0zCi0JcHhvciAgICAgIHhtbTQseG1tNAotCXB1bnBja2x3ZCB4bW0zLHhtbTEJCTsgeG1tMz1ST0wKLQlwdW5wY2tod2QgeG1tNCx4bW0xCQk7IHhtbTQ9Uk9ICi0JcHNybGQgICAgIHhtbTMsMQkJOyB4bW0zPVJPTCpGSVgoMC41MDApCi0JcHNybGQgICAgIHhtbTQsMQkJOyB4bW00PVJPSCpGSVgoMC41MDApCisgICAgICAgIHB4b3IgICAgICB4bW0zLHhtbTMKKyAgICAgICAgcHhvciAgICAgIHhtbTQseG1tNAorICAgICAgICBwdW5wY2tsd2QgeG1tMyx4bW0xICAgICAgICAgICAgIDsgeG1tMz1ST0wKKyAgICAgICAgcHVucGNraHdkIHhtbTQseG1tMSAgICAgICAgICAgICA7IHhtbTQ9Uk9ICisgICAgICAgIHBzcmxkICAgICB4bW0zLDEgICAgICAgICAgICAgICAgOyB4bW0zPVJPTCpGSVgoMC41MDApCisgICAgICAgIHBzcmxkICAgICB4bW00LDEgICAgICAgICAgICAgICAgOyB4bW00PVJPSCpGSVgoMC41MDApCiAKLQltb3ZkcWEgICAgeG1tMSxbR09UT0ZGKGVheCxQRF9PTkVIQUxGTTFfQ0opXSA7IHhtbTE9W1BEX09ORUhBTEZNMV9DSl0KKyAgICAgICAgbW92ZHFhICAgIHhtbTEsW0dPVE9GRihlYXgsUERfT05FSEFMRk0xX0NKKV0gOyB4bW0xPVtQRF9PTkVIQUxGTTFfQ0pdCiAKLQlwYWRkZCAgICAgeG1tNyx4bW0zCi0JcGFkZGQgICAgIHhtbTUseG1tNAotCXBhZGRkICAgICB4bW03LHhtbTEKLQlwYWRkZCAgICAgeG1tNSx4bW0xCi0JcHNybGQgICAgIHhtbTcsU0NBTEVCSVRTCTsgeG1tNz1Dck9MCi0JcHNybGQgICAgIHhtbTUsU0NBTEVCSVRTCTsgeG1tNT1Dck9ICi0JcGFja3NzZHcgIHhtbTcseG1tNQkJOyB4bW03PUNyTworICAgICAgICBwYWRkZCAgICAgeG1tNyx4bW0zCisgICAgICAgIHBhZGRkICAgICB4bW01LHhtbTQKKyAgICAgICAgcGFkZGQgICAgIHhtbTcseG1tMQorICAgICAgICBwYWRkZCAgICAgeG1tNSx4bW0xCisgICAgICAgIHBzcmxkICAgICB4bW03LFNDQUxFQklUUyAgICAgICAgOyB4bW03PUNyT0wKKyAgICAgICAgcHNybGQgICAgIHhtbTUsU0NBTEVCSVRTICAgICAgICA7IHhtbTU9Q3JPSAorICAgICAgICBwYWNrc3NkdyAgeG1tNyx4bW01ICAgICAgICAgICAgIDsgeG1tNz1Dck8KIAotCW1vdmRxYSAgICB4bW0zLCBYTU1XT1JEIFt3aygwKV0JOyB4bW0zPVJFCisgICAgICAgIG1vdmRxYSAgICB4bW0zLCBYTU1XT1JEIFt3aygwKV0gOyB4bW0zPVJFCiAKLQltb3ZkcWEgICAgeG1tNCx4bW02Ci0JcHVucGNrbHdkIHhtbTYseG1tMgotCXB1bnBja2h3ZCB4bW00LHhtbTIKLQltb3ZkcWEgICAgeG1tMSx4bW02Ci0JbW92ZHFhICAgIHhtbTUseG1tNAotCXBtYWRkd2QgICB4bW02LFtHT1RPRkYoZWF4LFBXX0YwMTE0X0YwMjUwKV0gOyB4bW02PUJFTCpGSVgoMC4xMTQpK0dFTCpGSVgoMC4yNTApCi0JcG1hZGR3ZCAgIHhtbTQsW0dPVE9GRihlYXgsUFdfRjAxMTRfRjAyNTApXSA7IHhtbTQ9QkVIKkZJWCgwLjExNCkrR0VIKkZJWCgwLjI1MCkKLQlwbWFkZHdkICAgeG1tMSxbR09UT0ZGKGVheCxQV19NRjAwOF9NRjA0MSldIDsgeG1tMT1CRUwqLUZJWCgwLjA4MSkrR0VMKi1GSVgoMC40MTgpCi0JcG1hZGR3ZCAgIHhtbTUsW0dPVE9GRihlYXgsUFdfTUYwMDhfTUYwNDEpXSA7IHhtbTU9QkVIKi1GSVgoMC4wODEpK0dFSCotRklYKDAuNDE4KQorICAgICAgICBtb3ZkcWEgICAgeG1tNCx4bW02CisgICAgICAgIHB1bnBja2x3ZCB4bW02LHhtbTIKKyAgICAgICAgcHVucGNraHdkIHhtbTQseG1tMgorICAgICAgICBtb3ZkcWEgICAgeG1tMSx4bW02CisgICAgICAgIG1vdmRxYSAgICB4bW01LHhtbTQKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTYsW0dPVE9GRihlYXgsUFdfRjAxMTRfRjAyNTApXSA7IHhtbTY9QkVMKkZJWCgwLjExNCkrR0VMKkZJWCgwLjI1MCkKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTQsW0dPVE9GRihlYXgsUFdfRjAxMTRfRjAyNTApXSA7IHhtbTQ9QkVIKkZJWCgwLjExNCkrR0VIKkZJWCgwLjI1MCkKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTEsW0dPVE9GRihlYXgsUFdfTUYwMDhfTUYwNDEpXSA7IHhtbTE9QkVMKi1GSVgoMC4wODEpK0dFTCotRklYKDAuNDE4KQorICAgICAgICBwbWFkZHdkICAgeG1tNSxbR09UT0ZGKGVheCxQV19NRjAwOF9NRjA0MSldIDsgeG1tNT1CRUgqLUZJWCgwLjA4MSkrR0VIKi1GSVgoMC40MTgpCiAKLQltb3ZkcWEgICAgeG1tMixbR09UT0ZGKGVheCxQRF9PTkVIQUxGKV0JOyB4bW0yPVtQRF9PTkVIQUxGXQorICAgICAgICBtb3ZkcWEgICAgeG1tMixbR09UT0ZGKGVheCxQRF9PTkVIQUxGKV0gOyB4bW0yPVtQRF9PTkVIQUxGXQogCi0JcGFkZGQgICAgIHhtbTYsIFhNTVdPUkQgW3drKDYpXQotCXBhZGRkICAgICB4bW00LCBYTU1XT1JEIFt3ayg3KV0KLQlwYWRkZCAgICAgeG1tNix4bW0yCi0JcGFkZGQgICAgIHhtbTQseG1tMgotCXBzcmxkICAgICB4bW02LFNDQUxFQklUUwk7IHhtbTY9WUVMCi0JcHNybGQgICAgIHhtbTQsU0NBTEVCSVRTCTsgeG1tND1ZRUgKLQlwYWNrc3NkdyAgeG1tNix4bW00CQk7IHhtbTY9WUUKKyAgICAgICAgcGFkZGQgICAgIHhtbTYsIFhNTVdPUkQgW3drKDYpXQorICAgICAgICBwYWRkZCAgICAgeG1tNCwgWE1NV09SRCBbd2soNyldCisgICAgICAgIHBhZGRkICAgICB4bW02LHhtbTIKKyAgICAgICAgcGFkZGQgICAgIHhtbTQseG1tMgorICAgICAgICBwc3JsZCAgICAgeG1tNixTQ0FMRUJJVFMgICAgICAgIDsgeG1tNj1ZRUwKKyAgICAgICAgcHNybGQgICAgIHhtbTQsU0NBTEVCSVRTICAgICAgICA7IHhtbTQ9WUVICisgICAgICAgIHBhY2tzc2R3ICB4bW02LHhtbTQgICAgICAgICAgICAgOyB4bW02PVlFCiAKLQlwc2xsdyAgICAgeG1tMCxCWVRFX0JJVAotCXBvciAgICAgICB4bW02LHhtbTAJCTsgeG1tNj1ZCi0JbW92ZHFhICAgIFhNTVdPUkQgW2VkaV0sIHhtbTYJOyBTYXZlIFkKKyAgICAgICAgcHNsbHcgICAgIHhtbTAsQllURV9CSVQKKyAgICAgICAgcG9yICAgICAgIHhtbTYseG1tMCAgICAgICAgICAgICA7IHhtbTY9WQorICAgICAgICBtb3ZkcWEgICAgWE1NV09SRCBbZWRpXSwgeG1tNiAgIDsgU2F2ZSBZCiAKLQlweG9yICAgICAgeG1tMix4bW0yCi0JcHhvciAgICAgIHhtbTQseG1tNAotCXB1bnBja2x3ZCB4bW0yLHhtbTMJCTsgeG1tMj1SRUwKLQlwdW5wY2tod2QgeG1tNCx4bW0zCQk7IHhtbTQ9UkVICi0JcHNybGQgICAgIHhtbTIsMQkJOyB4bW0yPVJFTCpGSVgoMC41MDApCi0JcHNybGQgICAgIHhtbTQsMQkJOyB4bW00PVJFSCpGSVgoMC41MDApCisgICAgICAgIHB4b3IgICAgICB4bW0yLHhtbTIKKyAgICAgICAgcHhvciAgICAgIHhtbTQseG1tNAorICAgICAgICBwdW5wY2tsd2QgeG1tMix4bW0zICAgICAgICAgICAgIDsgeG1tMj1SRUwKKyAgICAgICAgcHVucGNraHdkIHhtbTQseG1tMyAgICAgICAgICAgICA7IHhtbTQ9UkVICisgICAgICAgIHBzcmxkICAgICB4bW0yLDEgICAgICAgICAgICAgICAgOyB4bW0yPVJFTCpGSVgoMC41MDApCisgICAgICAgIHBzcmxkICAgICB4bW00LDEgICAgICAgICAgICAgICAgOyB4bW00PVJFSCpGSVgoMC41MDApCiAKLQltb3ZkcWEgICAgeG1tMCxbR09UT0ZGKGVheCxQRF9PTkVIQUxGTTFfQ0opXSA7IHhtbTA9W1BEX09ORUhBTEZNMV9DSl0KKyAgICAgICAgbW92ZHFhICAgIHhtbTAsW0dPVE9GRihlYXgsUERfT05FSEFMRk0xX0NKKV0gOyB4bW0wPVtQRF9PTkVIQUxGTTFfQ0pdCiAKLQlwYWRkZCAgICAgeG1tMSx4bW0yCi0JcGFkZGQgICAgIHhtbTUseG1tNAotCXBhZGRkICAgICB4bW0xLHhtbTAKLQlwYWRkZCAgICAgeG1tNSx4bW0wCi0JcHNybGQgICAgIHhtbTEsU0NBTEVCSVRTCTsgeG1tMT1DckVMCi0JcHNybGQgICAgIHhtbTUsU0NBTEVCSVRTCTsgeG1tNT1DckVICi0JcGFja3NzZHcgIHhtbTEseG1tNQkJOyB4bW0xPUNyRQorICAgICAgICBwYWRkZCAgICAgeG1tMSx4bW0yCisgICAgICAgIHBhZGRkICAgICB4bW01LHhtbTQKKyAgICAgICAgcGFkZGQgICAgIHhtbTEseG1tMAorICAgICAgICBwYWRkZCAgICAgeG1tNSx4bW0wCisgICAgICAgIHBzcmxkICAgICB4bW0xLFNDQUxFQklUUyAgICAgICAgOyB4bW0xPUNyRUwKKyAgICAgICAgcHNybGQgICAgIHhtbTUsU0NBTEVCSVRTICAgICAgICA7IHhtbTU9Q3JFSAorICAgICAgICBwYWNrc3NkdyAgeG1tMSx4bW01ICAgICAgICAgICAgIDsgeG1tMT1DckUKIAotCXBzbGx3ICAgICB4bW03LEJZVEVfQklUCi0JcG9yICAgICAgIHhtbTEseG1tNwkJOyB4bW0xPUNyCi0JbW92ZHFhICAgIFhNTVdPUkQgW2VkeF0sIHhtbTEJOyBTYXZlIENyCisgICAgICAgIHBzbGx3ICAgICB4bW03LEJZVEVfQklUCisgICAgICAgIHBvciAgICAgICB4bW0xLHhtbTcgICAgICAgICAgICAgOyB4bW0xPUNyCisgICAgICAgIG1vdmRxYSAgICBYTU1XT1JEIFtlZHhdLCB4bW0xICAgOyBTYXZlIENyCiAKLQlzdWIJZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JECi0JYWRkCWVzaSwgYnl0ZSBSR0JfUElYRUxTSVpFKlNJWkVPRl9YTU1XT1JECTsgaW5wdHIKLQlhZGQJZWRpLCBieXRlIFNJWkVPRl9YTU1XT1JECQk7IG91dHB0cjAKLQlhZGQJZWJ4LCBieXRlIFNJWkVPRl9YTU1XT1JECQk7IG91dHB0cjEKLQlhZGQJZWR4LCBieXRlIFNJWkVPRl9YTU1XT1JECQk7IG91dHB0cjIKLQljbXAJZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JECi0JamFlCW5lYXIgLmNvbHVtbmxvb3AKLQl0ZXN0CWVjeCxlY3gKLQlqbnoJbmVhciAuY29sdW1uX2xkMQorICAgICAgICBzdWIgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorICAgICAgICBhZGQgICAgIGVzaSwgYnl0ZSBSR0JfUElYRUxTSVpFKlNJWkVPRl9YTU1XT1JEICA7IGlucHRyCisgICAgICAgIGFkZCAgICAgZWRpLCBieXRlIFNJWkVPRl9YTU1XT1JEICAgICAgICAgICAgICAgIDsgb3V0cHRyMAorICAgICAgICBhZGQgICAgIGVieCwgYnl0ZSBTSVpFT0ZfWE1NV09SRCAgICAgICAgICAgICAgICA7IG91dHB0cjEKKyAgICAgICAgYWRkICAgICBlZHgsIGJ5dGUgU0laRU9GX1hNTVdPUkQgICAgICAgICAgICAgICAgOyBvdXRwdHIyCisgICAgICAgIGNtcCAgICAgZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JECisgICAgICAgIGphZSAgICAgbmVhciAuY29sdW1ubG9vcAorICAgICAgICB0ZXN0ICAgIGVjeCxlY3gKKyAgICAgICAgam56ICAgICBuZWFyIC5jb2x1bW5fbGQxCiAKLQlwb3AJZWN4CQkJOyBjb2wKLQlwb3AJZXNpCi0JcG9wCWVkaQotCXBvcAllYngKLQlwb3AJZWR4Ci0JcG9wcGljCWVheAorICAgICAgICBwb3AgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgY29sCisgICAgICAgIHBvcCAgICAgZXNpCisgICAgICAgIHBvcCAgICAgZWRpCisgICAgICAgIHBvcCAgICAgZWJ4CisgICAgICAgIHBvcCAgICAgZWR4CisgICAgICAgIHBvcHBpYyAgZWF4CiAKLQlhZGQJZXNpLCBieXRlIFNJWkVPRl9KU0FNUFJPVwk7IGlucHV0X2J1ZgotCWFkZAllZGksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCi0JYWRkCWVieCwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cKLQlhZGQJZWR4LCBieXRlIFNJWkVPRl9KU0FNUFJPVwotCWRlYwllYXgJCQkJOyBudW1fcm93cwotCWpnCW5lYXIgLnJvd2xvb3AKKyAgICAgICAgYWRkICAgICBlc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XICAgICAgIDsgaW5wdXRfYnVmCisgICAgICAgIGFkZCAgICAgZWRpLCBieXRlIFNJWkVPRl9KU0FNUFJPVworICAgICAgICBhZGQgICAgIGVieCwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cKKyAgICAgICAgYWRkICAgICBlZHgsIGJ5dGUgU0laRU9GX0pTQU1QUk9XCisgICAgICAgIGRlYyAgICAgZWF4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IG51bV9yb3dzCisgICAgICAgIGpnICAgICAgbmVhciAucm93bG9vcAogCiAucmV0dXJuOgotCXBvcAllZGkKLQlwb3AJZXNpCi07CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi07CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi0JcG9wCWVieAotCW1vdgllc3AsZWJwCQk7IGVzcCA8LSBhbGlnbmVkIGVicAotCXBvcAllc3AJCTsgZXNwIDwtIG9yaWdpbmFsIGVicAotCXBvcAllYnAKLQlyZXQKKyAgICAgICAgcG9wICAgICBlZGkKKyAgICAgICAgcG9wICAgICBlc2kKKzsgICAgICAgcG9wICAgICBlZHggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICAgICAgcG9wICAgICBlY3ggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICAgICAgcG9wICAgICBlYngKKyAgICAgICAgbW92ICAgICBlc3AsZWJwICAgICAgICAgOyBlc3AgPC0gYWxpZ25lZCBlYnAKKyAgICAgICAgcG9wICAgICBlc3AgICAgICAgICAgICAgOyBlc3AgPC0gb3JpZ2luYWwgZWJwCisgICAgICAgIHBvcCAgICAgZWJwCisgICAgICAgIHJldAogCiA7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQogOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgotCWFsaWduCTE2CisgICAgICAgIGFsaWduICAgMTYKZGlmZiAtLWdpdCBhL3NpbWQvamNjb2xtbXguYXNtIGIvc2ltZC9qY2NvbG1teC5hc20KaW5kZXggOTY1MGU0Ny4uODcwNThlZSAxMDA2NDQKLS0tIGEvc2ltZC9qY2NvbG1teC5hc20KKysrIGIvc2ltZC9qY2NvbG1teC5hc20KQEAgLTIxLDM4ICsyMSwzOCBAQAogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSVkZWZpbmUgU0NBTEVCSVRTCTE2CislZGVmaW5lIFNDQUxFQklUUyAgICAgICAxNgogCi1GXzBfMDgxCWVxdQkgNTMyOQkJCTsgRklYKDAuMDgxMzEpCi1GXzBfMTE0CWVxdQkgNzQ3MQkJCTsgRklYKDAuMTE0MDApCi1GXzBfMTY4CWVxdQkxMTA1OQkJCTsgRklYKDAuMTY4NzQpCi1GXzBfMjUwCWVxdQkxNjM4NAkJCTsgRklYKDAuMjUwMDApCi1GXzBfMjk5CWVxdQkxOTU5NQkJCTsgRklYKDAuMjk5MDApCi1GXzBfMzMxCWVxdQkyMTcwOQkJCTsgRklYKDAuMzMxMjYpCi1GXzBfNDE4CWVxdQkyNzQzOQkJCTsgRklYKDAuNDE4NjkpCi1GXzBfNTg3CWVxdQkzODQ3MAkJCTsgRklYKDAuNTg3MDApCi1GXzBfMzM3CWVxdQkoRl8wXzU4NyAtIEZfMF8yNTApCTsgRklYKDAuNTg3MDApIC0gRklYKDAuMjUwMDApCitGXzBfMDgxIGVxdSAgICAgIDUzMjkgICAgICAgICAgICAgICAgICAgOyBGSVgoMC4wODEzMSkKK0ZfMF8xMTQgZXF1ICAgICAgNzQ3MSAgICAgICAgICAgICAgICAgICA7IEZJWCgwLjExNDAwKQorRl8wXzE2OCBlcXUgICAgIDExMDU5ICAgICAgICAgICAgICAgICAgIDsgRklYKDAuMTY4NzQpCitGXzBfMjUwIGVxdSAgICAgMTYzODQgICAgICAgICAgICAgICAgICAgOyBGSVgoMC4yNTAwMCkKK0ZfMF8yOTkgZXF1ICAgICAxOTU5NSAgICAgICAgICAgICAgICAgICA7IEZJWCgwLjI5OTAwKQorRl8wXzMzMSBlcXUgICAgIDIxNzA5ICAgICAgICAgICAgICAgICAgIDsgRklYKDAuMzMxMjYpCitGXzBfNDE4IGVxdSAgICAgMjc0MzkgICAgICAgICAgICAgICAgICAgOyBGSVgoMC40MTg2OSkKK0ZfMF81ODcgZXF1ICAgICAzODQ3MCAgICAgICAgICAgICAgICAgICA7IEZJWCgwLjU4NzAwKQorRl8wXzMzNyBlcXUgICAgIChGXzBfNTg3IC0gRl8wXzI1MCkgICAgIDsgRklYKDAuNTg3MDApIC0gRklYKDAuMjUwMDApCiAKIDsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlTRUNUSU9OCVNFR19DT05TVAorICAgICAgICBTRUNUSU9OIFNFR19DT05TVAogCi0JYWxpZ256CTE2Ci0JZ2xvYmFsCUVYVE4oamNvbnN0X3JnYl95Y2NfY29udmVydF9tbXgpCisgICAgICAgIGFsaWdueiAgMTYKKyAgICAgICAgZ2xvYmFsICBFWFROKGpjb25zdF9yZ2JfeWNjX2NvbnZlcnRfbW14KQogCiBFWFROKGpjb25zdF9yZ2JfeWNjX2NvbnZlcnRfbW14KToKIAotUFdfRjAyOTlfRjAzMzcJdGltZXMgMiBkdyAgRl8wXzI5OSwgRl8wXzMzNwotUFdfRjAxMTRfRjAyNTAJdGltZXMgMiBkdyAgRl8wXzExNCwgRl8wXzI1MAotUFdfTUYwMTZfTUYwMzMJdGltZXMgMiBkdyAtRl8wXzE2OCwtRl8wXzMzMQotUFdfTUYwMDhfTUYwNDEJdGltZXMgMiBkdyAtRl8wXzA4MSwtRl8wXzQxOAotUERfT05FSEFMRk0xX0NKCXRpbWVzIDIgZGQgICgxIDw8IChTQ0FMRUJJVFMtMSkpIC0gMSArIChDRU5URVJKU0FNUExFIDw8IFNDQUxFQklUUykKLVBEX09ORUhBTEYJdGltZXMgMiBkZCAgKDEgPDwgKFNDQUxFQklUUy0xKSkKK1BXX0YwMjk5X0YwMzM3ICB0aW1lcyAyIGR3ICBGXzBfMjk5LCBGXzBfMzM3CitQV19GMDExNF9GMDI1MCAgdGltZXMgMiBkdyAgRl8wXzExNCwgRl8wXzI1MAorUFdfTUYwMTZfTUYwMzMgIHRpbWVzIDIgZHcgLUZfMF8xNjgsLUZfMF8zMzEKK1BXX01GMDA4X01GMDQxICB0aW1lcyAyIGR3IC1GXzBfMDgxLC1GXzBfNDE4CitQRF9PTkVIQUxGTTFfQ0ogdGltZXMgMiBkZCAgKDEgPDwgKFNDQUxFQklUUy0xKSkgLSAxICsgKENFTlRFUkpTQU1QTEUgPDwgU0NBTEVCSVRTKQorUERfT05FSEFMRiAgICAgIHRpbWVzIDIgZGQgICgxIDw8IChTQ0FMRUJJVFMtMSkpCiAKLQlhbGlnbnoJMTYKKyAgICAgICAgYWxpZ256ICAxNgogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JU0VDVElPTglTRUdfVEVYVAotCUJJVFMJMzIKKyAgICAgICAgU0VDVElPTiBTRUdfVEVYVAorICAgICAgICBCSVRTICAgIDMyCiAKICVpbmNsdWRlICJqY2Nscm1teC5hc20iCiAKZGlmZiAtLWdpdCBhL3NpbWQvamNjb2xzczItNjQuYXNtIGIvc2ltZC9qY2NvbHNzMi02NC5hc20KaW5kZXggYWU2MDE0OC4uNWIxZWU3OCAxMDA2NDQKLS0tIGEvc2ltZC9qY2NvbHNzMi02NC5hc20KKysrIGIvc2ltZC9qY2NvbHNzMi02NC5hc20KQEAgLTE4LDM4ICsxOCwzOCBAQAogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSVkZWZpbmUgU0NBTEVCSVRTCTE2CislZGVmaW5lIFNDQUxFQklUUyAgICAgICAxNgogCi1GXzBfMDgxCWVxdQkgNTMyOQkJCTsgRklYKDAuMDgxMzEpCi1GXzBfMTE0CWVxdQkgNzQ3MQkJCTsgRklYKDAuMTE0MDApCi1GXzBfMTY4CWVxdQkxMTA1OQkJCTsgRklYKDAuMTY4NzQpCi1GXzBfMjUwCWVxdQkxNjM4NAkJCTsgRklYKDAuMjUwMDApCi1GXzBfMjk5CWVxdQkxOTU5NQkJCTsgRklYKDAuMjk5MDApCi1GXzBfMzMxCWVxdQkyMTcwOQkJCTsgRklYKDAuMzMxMjYpCi1GXzBfNDE4CWVxdQkyNzQzOQkJCTsgRklYKDAuNDE4NjkpCi1GXzBfNTg3CWVxdQkzODQ3MAkJCTsgRklYKDAuNTg3MDApCi1GXzBfMzM3CWVxdQkoRl8wXzU4NyAtIEZfMF8yNTApCTsgRklYKDAuNTg3MDApIC0gRklYKDAuMjUwMDApCitGXzBfMDgxIGVxdSAgICAgIDUzMjkgICAgICAgICAgICAgICAgICAgOyBGSVgoMC4wODEzMSkKK0ZfMF8xMTQgZXF1ICAgICAgNzQ3MSAgICAgICAgICAgICAgICAgICA7IEZJWCgwLjExNDAwKQorRl8wXzE2OCBlcXUgICAgIDExMDU5ICAgICAgICAgICAgICAgICAgIDsgRklYKDAuMTY4NzQpCitGXzBfMjUwIGVxdSAgICAgMTYzODQgICAgICAgICAgICAgICAgICAgOyBGSVgoMC4yNTAwMCkKK0ZfMF8yOTkgZXF1ICAgICAxOTU5NSAgICAgICAgICAgICAgICAgICA7IEZJWCgwLjI5OTAwKQorRl8wXzMzMSBlcXUgICAgIDIxNzA5ICAgICAgICAgICAgICAgICAgIDsgRklYKDAuMzMxMjYpCitGXzBfNDE4IGVxdSAgICAgMjc0MzkgICAgICAgICAgICAgICAgICAgOyBGSVgoMC40MTg2OSkKK0ZfMF81ODcgZXF1ICAgICAzODQ3MCAgICAgICAgICAgICAgICAgICA7IEZJWCgwLjU4NzAwKQorRl8wXzMzNyBlcXUgICAgIChGXzBfNTg3IC0gRl8wXzI1MCkgICAgIDsgRklYKDAuNTg3MDApIC0gRklYKDAuMjUwMDApCiAKIDsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlTRUNUSU9OCVNFR19DT05TVAorICAgICAgICBTRUNUSU9OIFNFR19DT05TVAogCi0JYWxpZ256CTE2Ci0JZ2xvYmFsCUVYVE4oamNvbnN0X3JnYl95Y2NfY29udmVydF9zc2UyKQorICAgICAgICBhbGlnbnogIDE2CisgICAgICAgIGdsb2JhbCAgRVhUTihqY29uc3RfcmdiX3ljY19jb252ZXJ0X3NzZTIpCiAKIEVYVE4oamNvbnN0X3JnYl95Y2NfY29udmVydF9zc2UyKToKIAotUFdfRjAyOTlfRjAzMzcJdGltZXMgNCBkdyAgRl8wXzI5OSwgRl8wXzMzNwotUFdfRjAxMTRfRjAyNTAJdGltZXMgNCBkdyAgRl8wXzExNCwgRl8wXzI1MAotUFdfTUYwMTZfTUYwMzMJdGltZXMgNCBkdyAtRl8wXzE2OCwtRl8wXzMzMQotUFdfTUYwMDhfTUYwNDEJdGltZXMgNCBkdyAtRl8wXzA4MSwtRl8wXzQxOAotUERfT05FSEFMRk0xX0NKCXRpbWVzIDQgZGQgICgxIDw8IChTQ0FMRUJJVFMtMSkpIC0gMSArIChDRU5URVJKU0FNUExFIDw8IFNDQUxFQklUUykKLVBEX09ORUhBTEYJdGltZXMgNCBkZCAgKDEgPDwgKFNDQUxFQklUUy0xKSkKK1BXX0YwMjk5X0YwMzM3ICB0aW1lcyA0IGR3ICBGXzBfMjk5LCBGXzBfMzM3CitQV19GMDExNF9GMDI1MCAgdGltZXMgNCBkdyAgRl8wXzExNCwgRl8wXzI1MAorUFdfTUYwMTZfTUYwMzMgIHRpbWVzIDQgZHcgLUZfMF8xNjgsLUZfMF8zMzEKK1BXX01GMDA4X01GMDQxICB0aW1lcyA0IGR3IC1GXzBfMDgxLC1GXzBfNDE4CitQRF9PTkVIQUxGTTFfQ0ogdGltZXMgNCBkZCAgKDEgPDwgKFNDQUxFQklUUy0xKSkgLSAxICsgKENFTlRFUkpTQU1QTEUgPDwgU0NBTEVCSVRTKQorUERfT05FSEFMRiAgICAgIHRpbWVzIDQgZGQgICgxIDw8IChTQ0FMRUJJVFMtMSkpCiAKLQlhbGlnbnoJMTYKKyAgICAgICAgYWxpZ256ICAxNgogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JU0VDVElPTglTRUdfVEVYVAotCUJJVFMJNjQKKyAgICAgICAgU0VDVElPTiBTRUdfVEVYVAorICAgICAgICBCSVRTICAgIDY0CiAKICVpbmNsdWRlICJqY2NscnNzMi02NC5hc20iCiAKZGlmZiAtLWdpdCBhL3NpbWQvamNjb2xzczIuYXNtIGIvc2ltZC9qY2NvbHNzMi5hc20KaW5kZXggYWMwMDFkMS4uMmI4ZmFlZiAxMDA2NDQKLS0tIGEvc2ltZC9qY2NvbHNzMi5hc20KKysrIGIvc2ltZC9qY2NvbHNzMi5hc20KQEAgLTE4LDM4ICsxOCwzOCBAQAogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSVkZWZpbmUgU0NBTEVCSVRTCTE2CislZGVmaW5lIFNDQUxFQklUUyAgICAgICAxNgogCi1GXzBfMDgxCWVxdQkgNTMyOQkJCTsgRklYKDAuMDgxMzEpCi1GXzBfMTE0CWVxdQkgNzQ3MQkJCTsgRklYKDAuMTE0MDApCi1GXzBfMTY4CWVxdQkxMTA1OQkJCTsgRklYKDAuMTY4NzQpCi1GXzBfMjUwCWVxdQkxNjM4NAkJCTsgRklYKDAuMjUwMDApCi1GXzBfMjk5CWVxdQkxOTU5NQkJCTsgRklYKDAuMjk5MDApCi1GXzBfMzMxCWVxdQkyMTcwOQkJCTsgRklYKDAuMzMxMjYpCi1GXzBfNDE4CWVxdQkyNzQzOQkJCTsgRklYKDAuNDE4NjkpCi1GXzBfNTg3CWVxdQkzODQ3MAkJCTsgRklYKDAuNTg3MDApCi1GXzBfMzM3CWVxdQkoRl8wXzU4NyAtIEZfMF8yNTApCTsgRklYKDAuNTg3MDApIC0gRklYKDAuMjUwMDApCitGXzBfMDgxIGVxdSAgICAgIDUzMjkgICAgICAgICAgICAgICAgICAgOyBGSVgoMC4wODEzMSkKK0ZfMF8xMTQgZXF1ICAgICAgNzQ3MSAgICAgICAgICAgICAgICAgICA7IEZJWCgwLjExNDAwKQorRl8wXzE2OCBlcXUgICAgIDExMDU5ICAgICAgICAgICAgICAgICAgIDsgRklYKDAuMTY4NzQpCitGXzBfMjUwIGVxdSAgICAgMTYzODQgICAgICAgICAgICAgICAgICAgOyBGSVgoMC4yNTAwMCkKK0ZfMF8yOTkgZXF1ICAgICAxOTU5NSAgICAgICAgICAgICAgICAgICA7IEZJWCgwLjI5OTAwKQorRl8wXzMzMSBlcXUgICAgIDIxNzA5ICAgICAgICAgICAgICAgICAgIDsgRklYKDAuMzMxMjYpCitGXzBfNDE4IGVxdSAgICAgMjc0MzkgICAgICAgICAgICAgICAgICAgOyBGSVgoMC40MTg2OSkKK0ZfMF81ODcgZXF1ICAgICAzODQ3MCAgICAgICAgICAgICAgICAgICA7IEZJWCgwLjU4NzAwKQorRl8wXzMzNyBlcXUgICAgIChGXzBfNTg3IC0gRl8wXzI1MCkgICAgIDsgRklYKDAuNTg3MDApIC0gRklYKDAuMjUwMDApCiAKIDsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlTRUNUSU9OCVNFR19DT05TVAorICAgICAgICBTRUNUSU9OIFNFR19DT05TVAogCi0JYWxpZ256CTE2Ci0JZ2xvYmFsCUVYVE4oamNvbnN0X3JnYl95Y2NfY29udmVydF9zc2UyKQorICAgICAgICBhbGlnbnogIDE2CisgICAgICAgIGdsb2JhbCAgRVhUTihqY29uc3RfcmdiX3ljY19jb252ZXJ0X3NzZTIpCiAKIEVYVE4oamNvbnN0X3JnYl95Y2NfY29udmVydF9zc2UyKToKIAotUFdfRjAyOTlfRjAzMzcJdGltZXMgNCBkdyAgRl8wXzI5OSwgRl8wXzMzNwotUFdfRjAxMTRfRjAyNTAJdGltZXMgNCBkdyAgRl8wXzExNCwgRl8wXzI1MAotUFdfTUYwMTZfTUYwMzMJdGltZXMgNCBkdyAtRl8wXzE2OCwtRl8wXzMzMQotUFdfTUYwMDhfTUYwNDEJdGltZXMgNCBkdyAtRl8wXzA4MSwtRl8wXzQxOAotUERfT05FSEFMRk0xX0NKCXRpbWVzIDQgZGQgICgxIDw8IChTQ0FMRUJJVFMtMSkpIC0gMSArIChDRU5URVJKU0FNUExFIDw8IFNDQUxFQklUUykKLVBEX09ORUhBTEYJdGltZXMgNCBkZCAgKDEgPDwgKFNDQUxFQklUUy0xKSkKK1BXX0YwMjk5X0YwMzM3ICB0aW1lcyA0IGR3ICBGXzBfMjk5LCBGXzBfMzM3CitQV19GMDExNF9GMDI1MCAgdGltZXMgNCBkdyAgRl8wXzExNCwgRl8wXzI1MAorUFdfTUYwMTZfTUYwMzMgIHRpbWVzIDQgZHcgLUZfMF8xNjgsLUZfMF8zMzEKK1BXX01GMDA4X01GMDQxICB0aW1lcyA0IGR3IC1GXzBfMDgxLC1GXzBfNDE4CitQRF9PTkVIQUxGTTFfQ0ogdGltZXMgNCBkZCAgKDEgPDwgKFNDQUxFQklUUy0xKSkgLSAxICsgKENFTlRFUkpTQU1QTEUgPDwgU0NBTEVCSVRTKQorUERfT05FSEFMRiAgICAgIHRpbWVzIDQgZGQgICgxIDw8IChTQ0FMRUJJVFMtMSkpCiAKLQlhbGlnbnoJMTYKKyAgICAgICAgYWxpZ256ICAxNgogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JU0VDVElPTglTRUdfVEVYVAotCUJJVFMJMzIKKyAgICAgICAgU0VDVElPTiBTRUdfVEVYVAorICAgICAgICBCSVRTICAgIDMyCiAKICVpbmNsdWRlICJqY2NscnNzMi5hc20iCiAKZGlmZiAtLWdpdCBhL3NpbWQvamNncmFtbXguYXNtIGIvc2ltZC9qY2dyYW1teC5hc20KaW5kZXggYjhiOGRkMy4uNDNmZmQwZiAxMDA2NDQKLS0tIGEvc2ltZC9qY2dyYW1teC5hc20KKysrIGIvc2ltZC9qY2dyYW1teC5hc20KQEAgLTIxLDMxICsyMSwzMSBAQAogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSVkZWZpbmUgU0NBTEVCSVRTCTE2CislZGVmaW5lIFNDQUxFQklUUyAgICAgICAxNgogCi1GXzBfMTE0CWVxdQkgNzQ3MQkJCTsgRklYKDAuMTE0MDApCi1GXzBfMjUwCWVxdQkxNjM4NAkJCTsgRklYKDAuMjUwMDApCi1GXzBfMjk5CWVxdQkxOTU5NQkJCTsgRklYKDAuMjk5MDApCi1GXzBfNTg3CWVxdQkzODQ3MAkJCTsgRklYKDAuNTg3MDApCi1GXzBfMzM3CWVxdQkoRl8wXzU4NyAtIEZfMF8yNTApCTsgRklYKDAuNTg3MDApIC0gRklYKDAuMjUwMDApCitGXzBfMTE0IGVxdSAgICAgIDc0NzEgICAgICAgICAgICAgICAgICAgOyBGSVgoMC4xMTQwMCkKK0ZfMF8yNTAgZXF1ICAgICAxNjM4NCAgICAgICAgICAgICAgICAgICA7IEZJWCgwLjI1MDAwKQorRl8wXzI5OSBlcXUgICAgIDE5NTk1ICAgICAgICAgICAgICAgICAgIDsgRklYKDAuMjk5MDApCitGXzBfNTg3IGVxdSAgICAgMzg0NzAgICAgICAgICAgICAgICAgICAgOyBGSVgoMC41ODcwMCkKK0ZfMF8zMzcgZXF1ICAgICAoRl8wXzU4NyAtIEZfMF8yNTApICAgICA7IEZJWCgwLjU4NzAwKSAtIEZJWCgwLjI1MDAwKQogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JU0VDVElPTglTRUdfQ09OU1QKKyAgICAgICAgU0VDVElPTiBTRUdfQ09OU1QKIAotCWFsaWduegkxNgotCWdsb2JhbAlFWFROKGpjb25zdF9yZ2JfZ3JheV9jb252ZXJ0X21teCkKKyAgICAgICAgYWxpZ256ICAxNgorICAgICAgICBnbG9iYWwgIEVYVE4oamNvbnN0X3JnYl9ncmF5X2NvbnZlcnRfbW14KQogCiBFWFROKGpjb25zdF9yZ2JfZ3JheV9jb252ZXJ0X21teCk6CiAKLVBXX0YwMjk5X0YwMzM3CXRpbWVzIDIgZHcgIEZfMF8yOTksIEZfMF8zMzcKLVBXX0YwMTE0X0YwMjUwCXRpbWVzIDIgZHcgIEZfMF8xMTQsIEZfMF8yNTAKLVBEX09ORUhBTEYJdGltZXMgMiBkZCAgKDEgPDwgKFNDQUxFQklUUy0xKSkKK1BXX0YwMjk5X0YwMzM3ICB0aW1lcyAyIGR3ICBGXzBfMjk5LCBGXzBfMzM3CitQV19GMDExNF9GMDI1MCAgdGltZXMgMiBkdyAgRl8wXzExNCwgRl8wXzI1MAorUERfT05FSEFMRiAgICAgIHRpbWVzIDIgZGQgICgxIDw8IChTQ0FMRUJJVFMtMSkpCiAKLQlhbGlnbnoJMTYKKyAgICAgICAgYWxpZ256ICAxNgogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JU0VDVElPTglTRUdfVEVYVAotCUJJVFMJMzIKKyAgICAgICAgU0VDVElPTiBTRUdfVEVYVAorICAgICAgICBCSVRTICAgIDMyCiAKICVpbmNsdWRlICJqY2dyeW1teC5hc20iCiAKZGlmZiAtLWdpdCBhL3NpbWQvamNncmFzczItNjQuYXNtIGIvc2ltZC9qY2dyYXNzMi02NC5hc20KaW5kZXggYmEyOGNjMy4uMzkyMzZmZiAxMDA2NDQKLS0tIGEvc2ltZC9qY2dyYXNzMi02NC5hc20KKysrIGIvc2ltZC9qY2dyYXNzMi02NC5hc20KQEAgLTE4LDMxICsxOCwzMSBAQAogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSVkZWZpbmUgU0NBTEVCSVRTCTE2CislZGVmaW5lIFNDQUxFQklUUyAgICAgICAxNgogCi1GXzBfMTE0CWVxdQkgNzQ3MQkJCTsgRklYKDAuMTE0MDApCi1GXzBfMjUwCWVxdQkxNjM4NAkJCTsgRklYKDAuMjUwMDApCi1GXzBfMjk5CWVxdQkxOTU5NQkJCTsgRklYKDAuMjk5MDApCi1GXzBfNTg3CWVxdQkzODQ3MAkJCTsgRklYKDAuNTg3MDApCi1GXzBfMzM3CWVxdQkoRl8wXzU4NyAtIEZfMF8yNTApCTsgRklYKDAuNTg3MDApIC0gRklYKDAuMjUwMDApCitGXzBfMTE0IGVxdSAgICAgIDc0NzEgICAgICAgICAgICAgICAgICAgOyBGSVgoMC4xMTQwMCkKK0ZfMF8yNTAgZXF1ICAgICAxNjM4NCAgICAgICAgICAgICAgICAgICA7IEZJWCgwLjI1MDAwKQorRl8wXzI5OSBlcXUgICAgIDE5NTk1ICAgICAgICAgICAgICAgICAgIDsgRklYKDAuMjk5MDApCitGXzBfNTg3IGVxdSAgICAgMzg0NzAgICAgICAgICAgICAgICAgICAgOyBGSVgoMC41ODcwMCkKK0ZfMF8zMzcgZXF1ICAgICAoRl8wXzU4NyAtIEZfMF8yNTApICAgICA7IEZJWCgwLjU4NzAwKSAtIEZJWCgwLjI1MDAwKQogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JU0VDVElPTglTRUdfQ09OU1QKKyAgICAgICAgU0VDVElPTiBTRUdfQ09OU1QKIAotCWFsaWduegkxNgotCWdsb2JhbAlFWFROKGpjb25zdF9yZ2JfZ3JheV9jb252ZXJ0X3NzZTIpCisgICAgICAgIGFsaWdueiAgMTYKKyAgICAgICAgZ2xvYmFsICBFWFROKGpjb25zdF9yZ2JfZ3JheV9jb252ZXJ0X3NzZTIpCiAKIEVYVE4oamNvbnN0X3JnYl9ncmF5X2NvbnZlcnRfc3NlMik6CiAKLVBXX0YwMjk5X0YwMzM3CXRpbWVzIDQgZHcgIEZfMF8yOTksIEZfMF8zMzcKLVBXX0YwMTE0X0YwMjUwCXRpbWVzIDQgZHcgIEZfMF8xMTQsIEZfMF8yNTAKLVBEX09ORUhBTEYJdGltZXMgNCBkZCAgKDEgPDwgKFNDQUxFQklUUy0xKSkKK1BXX0YwMjk5X0YwMzM3ICB0aW1lcyA0IGR3ICBGXzBfMjk5LCBGXzBfMzM3CitQV19GMDExNF9GMDI1MCAgdGltZXMgNCBkdyAgRl8wXzExNCwgRl8wXzI1MAorUERfT05FSEFMRiAgICAgIHRpbWVzIDQgZGQgICgxIDw8IChTQ0FMRUJJVFMtMSkpCiAKLQlhbGlnbnoJMTYKKyAgICAgICAgYWxpZ256ICAxNgogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JU0VDVElPTglTRUdfVEVYVAotCUJJVFMJNjQKKyAgICAgICAgU0VDVElPTiBTRUdfVEVYVAorICAgICAgICBCSVRTICAgIDY0CiAKICVpbmNsdWRlICJqY2dyeXNzMi02NC5hc20iCiAKZGlmZiAtLWdpdCBhL3NpbWQvamNncmFzczIuYXNtIGIvc2ltZC9qY2dyYXNzMi5hc20KaW5kZXggOTk4OTY4ZS4uZjViZDkzZCAxMDA2NDQKLS0tIGEvc2ltZC9qY2dyYXNzMi5hc20KKysrIGIvc2ltZC9qY2dyYXNzMi5hc20KQEAgLTE4LDMxICsxOCwzMSBAQAogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSVkZWZpbmUgU0NBTEVCSVRTCTE2CislZGVmaW5lIFNDQUxFQklUUyAgICAgICAxNgogCi1GXzBfMTE0CWVxdQkgNzQ3MQkJCTsgRklYKDAuMTE0MDApCi1GXzBfMjUwCWVxdQkxNjM4NAkJCTsgRklYKDAuMjUwMDApCi1GXzBfMjk5CWVxdQkxOTU5NQkJCTsgRklYKDAuMjk5MDApCi1GXzBfNTg3CWVxdQkzODQ3MAkJCTsgRklYKDAuNTg3MDApCi1GXzBfMzM3CWVxdQkoRl8wXzU4NyAtIEZfMF8yNTApCTsgRklYKDAuNTg3MDApIC0gRklYKDAuMjUwMDApCitGXzBfMTE0IGVxdSAgICAgIDc0NzEgICAgICAgICAgICAgICAgICAgOyBGSVgoMC4xMTQwMCkKK0ZfMF8yNTAgZXF1ICAgICAxNjM4NCAgICAgICAgICAgICAgICAgICA7IEZJWCgwLjI1MDAwKQorRl8wXzI5OSBlcXUgICAgIDE5NTk1ICAgICAgICAgICAgICAgICAgIDsgRklYKDAuMjk5MDApCitGXzBfNTg3IGVxdSAgICAgMzg0NzAgICAgICAgICAgICAgICAgICAgOyBGSVgoMC41ODcwMCkKK0ZfMF8zMzcgZXF1ICAgICAoRl8wXzU4NyAtIEZfMF8yNTApICAgICA7IEZJWCgwLjU4NzAwKSAtIEZJWCgwLjI1MDAwKQogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JU0VDVElPTglTRUdfQ09OU1QKKyAgICAgICAgU0VDVElPTiBTRUdfQ09OU1QKIAotCWFsaWduegkxNgotCWdsb2JhbAlFWFROKGpjb25zdF9yZ2JfZ3JheV9jb252ZXJ0X3NzZTIpCisgICAgICAgIGFsaWdueiAgMTYKKyAgICAgICAgZ2xvYmFsICBFWFROKGpjb25zdF9yZ2JfZ3JheV9jb252ZXJ0X3NzZTIpCiAKIEVYVE4oamNvbnN0X3JnYl9ncmF5X2NvbnZlcnRfc3NlMik6CiAKLVBXX0YwMjk5X0YwMzM3CXRpbWVzIDQgZHcgIEZfMF8yOTksIEZfMF8zMzcKLVBXX0YwMTE0X0YwMjUwCXRpbWVzIDQgZHcgIEZfMF8xMTQsIEZfMF8yNTAKLVBEX09ORUhBTEYJdGltZXMgNCBkZCAgKDEgPDwgKFNDQUxFQklUUy0xKSkKK1BXX0YwMjk5X0YwMzM3ICB0aW1lcyA0IGR3ICBGXzBfMjk5LCBGXzBfMzM3CitQV19GMDExNF9GMDI1MCAgdGltZXMgNCBkdyAgRl8wXzExNCwgRl8wXzI1MAorUERfT05FSEFMRiAgICAgIHRpbWVzIDQgZGQgICgxIDw8IChTQ0FMRUJJVFMtMSkpCiAKLQlhbGlnbnoJMTYKKyAgICAgICAgYWxpZ256ICAxNgogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JU0VDVElPTglTRUdfVEVYVAotCUJJVFMJMzIKKyAgICAgICAgU0VDVElPTiBTRUdfVEVYVAorICAgICAgICBCSVRTICAgIDMyCiAKICVpbmNsdWRlICJqY2dyeXNzMi5hc20iCiAKZGlmZiAtLWdpdCBhL3NpbWQvamNncnltbXguYXNtIGIvc2ltZC9qY2dyeW1teC5hc20KaW5kZXggYmJlZWEwOS4uY2JlNTYyMiAxMDA2NDQKLS0tIGEvc2ltZC9qY2dyeW1teC5hc20KKysrIGIvc2ltZC9qY2dyeW1teC5hc20KQEAgLTI5LDMyOSArMjksMzI5IEBACiA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cyk7CiA7CiAKLSVkZWZpbmUgaW1nX3dpZHRoKGIpCShiKSs4CQkJOyBKRElNRU5TSU9OIGltZ193aWR0aAotJWRlZmluZSBpbnB1dF9idWYoYikJKGIpKzEyCQk7IEpTQU1QQVJSQVkgaW5wdXRfYnVmCi0lZGVmaW5lIG91dHB1dF9idWYoYikJKGIpKzE2CQk7IEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZgotJWRlZmluZSBvdXRwdXRfcm93KGIpCShiKSsyMAkJOyBKRElNRU5TSU9OIG91dHB1dF9yb3cKLSVkZWZpbmUgbnVtX3Jvd3MoYikJKGIpKzI0CQk7IGludCBudW1fcm93cworJWRlZmluZSBpbWdfd2lkdGgoYikgICAgKGIpKzggICAgICAgICAgIDsgSkRJTUVOU0lPTiBpbWdfd2lkdGgKKyVkZWZpbmUgaW5wdXRfYnVmKGIpICAgIChiKSsxMiAgICAgICAgICA7IEpTQU1QQVJSQVkgaW5wdXRfYnVmCislZGVmaW5lIG91dHB1dF9idWYoYikgICAoYikrMTYgICAgICAgICAgOyBKU0FNUElNQUdFIG91dHB1dF9idWYKKyVkZWZpbmUgb3V0cHV0X3JvdyhiKSAgIChiKSsyMCAgICAgICAgICA7IEpESU1FTlNJT04gb3V0cHV0X3JvdworJWRlZmluZSBudW1fcm93cyhiKSAgICAgKGIpKzI0ICAgICAgICAgIDsgaW50IG51bV9yb3dzCiAKLSVkZWZpbmUgb3JpZ2luYWxfZWJwCWVicCswCi0lZGVmaW5lIHdrKGkpCQllYnAtKFdLX05VTS0oaSkpKlNJWkVPRl9NTVdPUkQJOyBtbXdvcmQgd2tbV0tfTlVNXQotJWRlZmluZSBXS19OVU0JCTIKLSVkZWZpbmUgZ290cHRyCQl3aygwKS1TSVpFT0ZfUE9JTlRFUgk7IHZvaWQgKiBnb3RwdHIKKyVkZWZpbmUgb3JpZ2luYWxfZWJwICAgIGVicCswCislZGVmaW5lIHdrKGkpICAgICAgICAgICBlYnAtKFdLX05VTS0oaSkpKlNJWkVPRl9NTVdPUkQgIDsgbW13b3JkIHdrW1dLX05VTV0KKyVkZWZpbmUgV0tfTlVNICAgICAgICAgIDIKKyVkZWZpbmUgZ290cHRyICAgICAgICAgIHdrKDApLVNJWkVPRl9QT0lOVEVSICAgIDsgdm9pZCAqIGdvdHB0cgogCi0JYWxpZ24JMTYKLQlnbG9iYWwJRVhUTihqc2ltZF9yZ2JfZ3JheV9jb252ZXJ0X21teCkKKyAgICAgICAgYWxpZ24gICAxNgorICAgICAgICBnbG9iYWwgIEVYVE4oanNpbWRfcmdiX2dyYXlfY29udmVydF9tbXgpCiAKIEVYVE4oanNpbWRfcmdiX2dyYXlfY29udmVydF9tbXgpOgotCXB1c2gJZWJwCi0JbW92CWVheCxlc3AJCQkJOyBlYXggPSBvcmlnaW5hbCBlYnAKLQlzdWIJZXNwLCBieXRlIDQKLQlhbmQJZXNwLCBieXRlICgtU0laRU9GX01NV09SRCkJOyBhbGlnbiB0byA2NCBiaXRzCi0JbW92CVtlc3BdLGVheAotCW1vdgllYnAsZXNwCQkJCTsgZWJwID0gYWxpZ25lZCBlYnAKLQlsZWEJZXNwLCBbd2soMCldCi0JcHVzaHBpYwllYXgJCTsgbWFrZSBhIHJvb20gZm9yIEdPVCBhZGRyZXNzCi0JcHVzaAllYngKLTsJcHVzaAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi07CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotCXB1c2gJZXNpCi0JcHVzaAllZGkKKyAgICAgICAgcHVzaCAgICBlYnAKKyAgICAgICAgbW92ICAgICBlYXgsZXNwICAgICAgICAgICAgICAgICAgICAgICAgIDsgZWF4ID0gb3JpZ2luYWwgZWJwCisgICAgICAgIHN1YiAgICAgZXNwLCBieXRlIDQKKyAgICAgICAgYW5kICAgICBlc3AsIGJ5dGUgKC1TSVpFT0ZfTU1XT1JEKSAgICAgIDsgYWxpZ24gdG8gNjQgYml0cworICAgICAgICBtb3YgICAgIFtlc3BdLGVheAorICAgICAgICBtb3YgICAgIGVicCxlc3AgICAgICAgICAgICAgICAgICAgICAgICAgOyBlYnAgPSBhbGlnbmVkIGVicAorICAgICAgICBsZWEgICAgIGVzcCwgW3drKDApXQorICAgICAgICBwdXNocGljIGVheCAgICAgICAgICAgICA7IG1ha2UgYSByb29tIGZvciBHT1QgYWRkcmVzcworICAgICAgICBwdXNoICAgIGVieAorOyAgICAgICBwdXNoICAgIGVjeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgICAgICBwdXNoICAgIGVkeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgICAgICBwdXNoICAgIGVzaQorICAgICAgICBwdXNoICAgIGVkaQogCi0JZ2V0X0dPVAllYngJCQk7IGdldCBHT1QgYWRkcmVzcwotCW1vdnBpYwlQT0lOVEVSIFtnb3RwdHJdLCBlYngJOyBzYXZlIEdPVCBhZGRyZXNzCisgICAgICAgIGdldF9HT1QgZWJ4ICAgICAgICAgICAgICAgICAgICAgOyBnZXQgR09UIGFkZHJlc3MKKyAgICAgICAgbW92cGljICBQT0lOVEVSIFtnb3RwdHJdLCBlYnggICA7IHNhdmUgR09UIGFkZHJlc3MKIAotCW1vdgllY3gsIEpESU1FTlNJT04gW2ltZ193aWR0aChlYXgpXQk7IG51bV9jb2xzCi0JdGVzdAllY3gsZWN4Ci0JanoJbmVhciAucmV0dXJuCisgICAgICAgIG1vdiAgICAgZWN4LCBKRElNRU5TSU9OIFtpbWdfd2lkdGgoZWF4KV0gICAgICAgIDsgbnVtX2NvbHMKKyAgICAgICAgdGVzdCAgICBlY3gsZWN4CisgICAgICAgIGp6ICAgICAgbmVhciAucmV0dXJuCiAKLQlwdXNoCWVjeAorICAgICAgICBwdXNoICAgIGVjeAogCi0JbW92CWVzaSwgSlNBTVBJTUFHRSBbb3V0cHV0X2J1ZihlYXgpXQotCW1vdgllY3gsIEpESU1FTlNJT04gW291dHB1dF9yb3coZWF4KV0KLQltb3YJZWRpLCBKU0FNUEFSUkFZIFtlc2krMCpTSVpFT0ZfSlNBTVBBUlJBWV0KLQlsZWEJZWRpLCBbZWRpK2VjeCpTSVpFT0ZfSlNBTVBST1ddCisgICAgICAgIG1vdiAgICAgZXNpLCBKU0FNUElNQUdFIFtvdXRwdXRfYnVmKGVheCldCisgICAgICAgIG1vdiAgICAgZWN4LCBKRElNRU5TSU9OIFtvdXRwdXRfcm93KGVheCldCisgICAgICAgIG1vdiAgICAgZWRpLCBKU0FNUEFSUkFZIFtlc2krMCpTSVpFT0ZfSlNBTVBBUlJBWV0KKyAgICAgICAgbGVhICAgICBlZGksIFtlZGkrZWN4KlNJWkVPRl9KU0FNUFJPV10KIAotCXBvcAllY3gKKyAgICAgICAgcG9wICAgICBlY3gKIAotCW1vdgllc2ksIEpTQU1QQVJSQVkgW2lucHV0X2J1ZihlYXgpXQotCW1vdgllYXgsIElOVCBbbnVtX3Jvd3MoZWF4KV0KLQl0ZXN0CWVheCxlYXgKLQlqbGUJbmVhciAucmV0dXJuCi0JYWxpZ254CTE2LDcKKyAgICAgICAgbW92ICAgICBlc2ksIEpTQU1QQVJSQVkgW2lucHV0X2J1ZihlYXgpXQorICAgICAgICBtb3YgICAgIGVheCwgSU5UIFtudW1fcm93cyhlYXgpXQorICAgICAgICB0ZXN0ICAgIGVheCxlYXgKKyAgICAgICAgamxlICAgICBuZWFyIC5yZXR1cm4KKyAgICAgICAgYWxpZ254ICAxNiw3CiAucm93bG9vcDoKLQlwdXNocGljCWVheAotCXB1c2gJZWRpCi0JcHVzaAllc2kKLQlwdXNoCWVjeAkJCTsgY29sCisgICAgICAgIHB1c2hwaWMgZWF4CisgICAgICAgIHB1c2ggICAgZWRpCisgICAgICAgIHB1c2ggICAgZXNpCisgICAgICAgIHB1c2ggICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBjb2wKIAotCW1vdgllc2ksIEpTQU1QUk9XIFtlc2ldCTsgaW5wdHIKLQltb3YJZWRpLCBKU0FNUFJPVyBbZWRpXQk7IG91dHB0cjAKLQltb3ZwaWMJZWF4LCBQT0lOVEVSIFtnb3RwdHJdCTsgbG9hZCBHT1QgYWRkcmVzcyAoZWF4KQorICAgICAgICBtb3YgICAgIGVzaSwgSlNBTVBST1cgW2VzaV0gICAgIDsgaW5wdHIKKyAgICAgICAgbW92ICAgICBlZGksIEpTQU1QUk9XIFtlZGldICAgICA7IG91dHB0cjAKKyAgICAgICAgbW92cGljICBlYXgsIFBPSU5URVIgW2dvdHB0cl0gICA7IGxvYWQgR09UIGFkZHJlc3MgKGVheCkKIAotCWNtcAllY3gsIGJ5dGUgU0laRU9GX01NV09SRAotCWphZQlzaG9ydCAuY29sdW1ubG9vcAotCWFsaWdueAkxNiw3CisgICAgICAgIGNtcCAgICAgZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQKKyAgICAgICAgamFlICAgICBzaG9ydCAuY29sdW1ubG9vcAorICAgICAgICBhbGlnbnggIDE2LDcKIAogJWlmIFJHQl9QSVhFTFNJWkUgPT0gMyA7IC0tLS0tLS0tLS0tLS0tLQogCiAuY29sdW1uX2xkMToKLQlwdXNoCWVheAotCXB1c2gJZWR4Ci0JbGVhCWVjeCxbZWN4K2VjeCoyXQkJOyBpbXVsIGVjeCxSR0JfUElYRUxTSVpFCi0JdGVzdAljbCwgU0laRU9GX0JZVEUKLQlqeglzaG9ydCAuY29sdW1uX2xkMgotCXN1YgllY3gsIGJ5dGUgU0laRU9GX0JZVEUKLQl4b3IJZWF4LGVheAotCW1vdglhbCwgQllURSBbZXNpK2VjeF0KKyAgICAgICAgcHVzaCAgICBlYXgKKyAgICAgICAgcHVzaCAgICBlZHgKKyAgICAgICAgbGVhICAgICBlY3gsW2VjeCtlY3gqMl0gICAgICAgICA7IGltdWwgZWN4LFJHQl9QSVhFTFNJWkUKKyAgICAgICAgdGVzdCAgICBjbCwgU0laRU9GX0JZVEUKKyAgICAgICAganogICAgICBzaG9ydCAuY29sdW1uX2xkMgorICAgICAgICBzdWIgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfQllURQorICAgICAgICB4b3IgICAgIGVheCxlYXgKKyAgICAgICAgbW92ICAgICBhbCwgQllURSBbZXNpK2VjeF0KIC5jb2x1bW5fbGQyOgotCXRlc3QJY2wsIFNJWkVPRl9XT1JECi0JanoJc2hvcnQgLmNvbHVtbl9sZDQKLQlzdWIJZWN4LCBieXRlIFNJWkVPRl9XT1JECi0JeG9yCWVkeCxlZHgKLQltb3YJZHgsIFdPUkQgW2VzaStlY3hdCi0Jc2hsCWVheCwgV09SRF9CSVQKLQlvcgllYXgsZWR4CisgICAgICAgIHRlc3QgICAgY2wsIFNJWkVPRl9XT1JECisgICAgICAgIGp6ICAgICAgc2hvcnQgLmNvbHVtbl9sZDQKKyAgICAgICAgc3ViICAgICBlY3gsIGJ5dGUgU0laRU9GX1dPUkQKKyAgICAgICAgeG9yICAgICBlZHgsZWR4CisgICAgICAgIG1vdiAgICAgZHgsIFdPUkQgW2VzaStlY3hdCisgICAgICAgIHNobCAgICAgZWF4LCBXT1JEX0JJVAorICAgICAgICBvciAgICAgIGVheCxlZHgKIC5jb2x1bW5fbGQ0OgotCW1vdmQJbW1BLGVheAotCXBvcAllZHgKLQlwb3AJZWF4Ci0JdGVzdAljbCwgU0laRU9GX0RXT1JECi0JanoJc2hvcnQgLmNvbHVtbl9sZDgKLQlzdWIJZWN4LCBieXRlIFNJWkVPRl9EV09SRAotCW1vdmQJbW1HLCBEV09SRCBbZXNpK2VjeF0KLQlwc2xscQltbUEsIERXT1JEX0JJVAotCXBvcgltbUEsbW1HCisgICAgICAgIG1vdmQgICAgbW1BLGVheAorICAgICAgICBwb3AgICAgIGVkeAorICAgICAgICBwb3AgICAgIGVheAorICAgICAgICB0ZXN0ICAgIGNsLCBTSVpFT0ZfRFdPUkQKKyAgICAgICAganogICAgICBzaG9ydCAuY29sdW1uX2xkOAorICAgICAgICBzdWIgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfRFdPUkQKKyAgICAgICAgbW92ZCAgICBtbUcsIERXT1JEIFtlc2krZWN4XQorICAgICAgICBwc2xscSAgIG1tQSwgRFdPUkRfQklUCisgICAgICAgIHBvciAgICAgbW1BLG1tRwogLmNvbHVtbl9sZDg6Ci0JdGVzdAljbCwgU0laRU9GX01NV09SRAotCWp6CXNob3J0IC5jb2x1bW5fbGQxNgotCW1vdnEJbW1HLG1tQQotCW1vdnEJbW1BLCBNTVdPUkQgW2VzaSswKlNJWkVPRl9NTVdPUkRdCi0JbW92CWVjeCwgU0laRU9GX01NV09SRAotCWptcAlzaG9ydCAucmdiX2dyYXlfY252CisgICAgICAgIHRlc3QgICAgY2wsIFNJWkVPRl9NTVdPUkQKKyAgICAgICAganogICAgICBzaG9ydCAuY29sdW1uX2xkMTYKKyAgICAgICAgbW92cSAgICBtbUcsbW1BCisgICAgICAgIG1vdnEgICAgbW1BLCBNTVdPUkQgW2VzaSswKlNJWkVPRl9NTVdPUkRdCisgICAgICAgIG1vdiAgICAgZWN4LCBTSVpFT0ZfTU1XT1JECisgICAgICAgIGptcCAgICAgc2hvcnQgLnJnYl9ncmF5X2NudgogLmNvbHVtbl9sZDE2OgotCXRlc3QJY2wsIDIqU0laRU9GX01NV09SRAotCW1vdgllY3gsIFNJWkVPRl9NTVdPUkQKLQlqeglzaG9ydCAucmdiX2dyYXlfY252Ci0JbW92cQltbUYsbW1BCi0JbW92cQltbUEsIE1NV09SRCBbZXNpKzAqU0laRU9GX01NV09SRF0KLQltb3ZxCW1tRywgTU1XT1JEIFtlc2krMSpTSVpFT0ZfTU1XT1JEXQotCWptcAlzaG9ydCAucmdiX2dyYXlfY252Ci0JYWxpZ254CTE2LDcKKyAgICAgICAgdGVzdCAgICBjbCwgMipTSVpFT0ZfTU1XT1JECisgICAgICAgIG1vdiAgICAgZWN4LCBTSVpFT0ZfTU1XT1JECisgICAgICAgIGp6ICAgICAgc2hvcnQgLnJnYl9ncmF5X2NudgorICAgICAgICBtb3ZxICAgIG1tRixtbUEKKyAgICAgICAgbW92cSAgICBtbUEsIE1NV09SRCBbZXNpKzAqU0laRU9GX01NV09SRF0KKyAgICAgICAgbW92cSAgICBtbUcsIE1NV09SRCBbZXNpKzEqU0laRU9GX01NV09SRF0KKyAgICAgICAgam1wICAgICBzaG9ydCAucmdiX2dyYXlfY252CisgICAgICAgIGFsaWdueCAgMTYsNwogCiAuY29sdW1ubG9vcDoKLQltb3ZxCW1tQSwgTU1XT1JEIFtlc2krMCpTSVpFT0ZfTU1XT1JEXQotCW1vdnEJbW1HLCBNTVdPUkQgW2VzaSsxKlNJWkVPRl9NTVdPUkRdCi0JbW92cQltbUYsIE1NV09SRCBbZXNpKzIqU0laRU9GX01NV09SRF0KKyAgICAgICAgbW92cSAgICBtbUEsIE1NV09SRCBbZXNpKzAqU0laRU9GX01NV09SRF0KKyAgICAgICAgbW92cSAgICBtbUcsIE1NV09SRCBbZXNpKzEqU0laRU9GX01NV09SRF0KKyAgICAgICAgbW92cSAgICBtbUYsIE1NV09SRCBbZXNpKzIqU0laRU9GX01NV09SRF0KIAogLnJnYl9ncmF5X2NudjoKLQk7IG1tQT0oMDAgMTAgMjAgMDEgMTEgMjEgMDIgMTIpCi0JOyBtbUc9KDIyIDAzIDEzIDIzIDA0IDE0IDI0IDA1KQotCTsgbW1GPSgxNSAyNSAwNiAxNiAyNiAwNyAxNyAyNykKKyAgICAgICAgOyBtbUE9KDAwIDEwIDIwIDAxIDExIDIxIDAyIDEyKQorICAgICAgICA7IG1tRz0oMjIgMDMgMTMgMjMgMDQgMTQgMjQgMDUpCisgICAgICAgIDsgbW1GPSgxNSAyNSAwNiAxNiAyNiAwNyAxNyAyNykKIAotCW1vdnEgICAgICBtbUQsbW1BCi0JcHNsbHEgICAgIG1tQSw0KkJZVEVfQklUCTsgbW1BPSgtLSAtLSAtLSAtLSAwMCAxMCAyMCAwMSkKLQlwc3JscSAgICAgbW1ELDQqQllURV9CSVQJOyBtbUQ9KDExIDIxIDAyIDEyIC0tIC0tIC0tIC0tKQorICAgICAgICBtb3ZxICAgICAgbW1ELG1tQQorICAgICAgICBwc2xscSAgICAgbW1BLDQqQllURV9CSVQgICAgICAgIDsgbW1BPSgtLSAtLSAtLSAtLSAwMCAxMCAyMCAwMSkKKyAgICAgICAgcHNybHEgICAgIG1tRCw0KkJZVEVfQklUICAgICAgICA7IG1tRD0oMTEgMjEgMDIgMTIgLS0gLS0gLS0gLS0pCiAKLQlwdW5wY2toYncgbW1BLG1tRwkJOyBtbUE9KDAwIDA0IDEwIDE0IDIwIDI0IDAxIDA1KQotCXBzbGxxICAgICBtbUcsNCpCWVRFX0JJVAk7IG1tRz0oLS0gLS0gLS0gLS0gMjIgMDMgMTMgMjMpCisgICAgICAgIHB1bnBja2hidyBtbUEsbW1HICAgICAgICAgICAgICAgOyBtbUE9KDAwIDA0IDEwIDE0IDIwIDI0IDAxIDA1KQorICAgICAgICBwc2xscSAgICAgbW1HLDQqQllURV9CSVQgICAgICAgIDsgbW1HPSgtLSAtLSAtLSAtLSAyMiAwMyAxMyAyMykKIAotCXB1bnBja2xidyBtbUQsbW1GCQk7IG1tRD0oMTEgMTUgMjEgMjUgMDIgMDYgMTIgMTYpCi0JcHVucGNraGJ3IG1tRyxtbUYJCTsgbW1HPSgyMiAyNiAwMyAwNyAxMyAxNyAyMyAyNykKKyAgICAgICAgcHVucGNrbGJ3IG1tRCxtbUYgICAgICAgICAgICAgICA7IG1tRD0oMTEgMTUgMjEgMjUgMDIgMDYgMTIgMTYpCisgICAgICAgIHB1bnBja2hidyBtbUcsbW1GICAgICAgICAgICAgICAgOyBtbUc9KDIyIDI2IDAzIDA3IDEzIDE3IDIzIDI3KQogCi0JbW92cSAgICAgIG1tRSxtbUEKLQlwc2xscSAgICAgbW1BLDQqQllURV9CSVQJOyBtbUE9KC0tIC0tIC0tIC0tIDAwIDA0IDEwIDE0KQotCXBzcmxxICAgICBtbUUsNCpCWVRFX0JJVAk7IG1tRT0oMjAgMjQgMDEgMDUgLS0gLS0gLS0gLS0pCisgICAgICAgIG1vdnEgICAgICBtbUUsbW1BCisgICAgICAgIHBzbGxxICAgICBtbUEsNCpCWVRFX0JJVCAgICAgICAgOyBtbUE9KC0tIC0tIC0tIC0tIDAwIDA0IDEwIDE0KQorICAgICAgICBwc3JscSAgICAgbW1FLDQqQllURV9CSVQgICAgICAgIDsgbW1FPSgyMCAyNCAwMSAwNSAtLSAtLSAtLSAtLSkKIAotCXB1bnBja2hidyBtbUEsbW1ECQk7IG1tQT0oMDAgMDIgMDQgMDYgMTAgMTIgMTQgMTYpCi0JcHNsbHEgICAgIG1tRCw0KkJZVEVfQklUCTsgbW1EPSgtLSAtLSAtLSAtLSAxMSAxNSAyMSAyNSkKKyAgICAgICAgcHVucGNraGJ3IG1tQSxtbUQgICAgICAgICAgICAgICA7IG1tQT0oMDAgMDIgMDQgMDYgMTAgMTIgMTQgMTYpCisgICAgICAgIHBzbGxxICAgICBtbUQsNCpCWVRFX0JJVCAgICAgICAgOyBtbUQ9KC0tIC0tIC0tIC0tIDExIDE1IDIxIDI1KQogCi0JcHVucGNrbGJ3IG1tRSxtbUcJCTsgbW1FPSgyMCAyMiAyNCAyNiAwMSAwMyAwNSAwNykKLQlwdW5wY2toYncgbW1ELG1tRwkJOyBtbUQ9KDExIDEzIDE1IDE3IDIxIDIzIDI1IDI3KQorICAgICAgICBwdW5wY2tsYncgbW1FLG1tRyAgICAgICAgICAgICAgIDsgbW1FPSgyMCAyMiAyNCAyNiAwMSAwMyAwNSAwNykKKyAgICAgICAgcHVucGNraGJ3IG1tRCxtbUcgICAgICAgICAgICAgICA7IG1tRD0oMTEgMTMgMTUgMTcgMjEgMjMgMjUgMjcpCiAKLQlweG9yICAgICAgbW1ILG1tSAorICAgICAgICBweG9yICAgICAgbW1ILG1tSAogCi0JbW92cSAgICAgIG1tQyxtbUEKLQlwdW5wY2tsYncgbW1BLG1tSAkJOyBtbUE9KDAwIDAyIDA0IDA2KQotCXB1bnBja2hidyBtbUMsbW1ICQk7IG1tQz0oMTAgMTIgMTQgMTYpCisgICAgICAgIG1vdnEgICAgICBtbUMsbW1BCisgICAgICAgIHB1bnBja2xidyBtbUEsbW1IICAgICAgICAgICAgICAgOyBtbUE9KDAwIDAyIDA0IDA2KQorICAgICAgICBwdW5wY2toYncgbW1DLG1tSCAgICAgICAgICAgICAgIDsgbW1DPSgxMCAxMiAxNCAxNikKIAotCW1vdnEgICAgICBtbUIsbW1FCi0JcHVucGNrbGJ3IG1tRSxtbUgJCTsgbW1FPSgyMCAyMiAyNCAyNikKLQlwdW5wY2toYncgbW1CLG1tSAkJOyBtbUI9KDAxIDAzIDA1IDA3KQorICAgICAgICBtb3ZxICAgICAgbW1CLG1tRQorICAgICAgICBwdW5wY2tsYncgbW1FLG1tSCAgICAgICAgICAgICAgIDsgbW1FPSgyMCAyMiAyNCAyNikKKyAgICAgICAgcHVucGNraGJ3IG1tQixtbUggICAgICAgICAgICAgICA7IG1tQj0oMDEgMDMgMDUgMDcpCiAKLQltb3ZxICAgICAgbW1GLG1tRAotCXB1bnBja2xidyBtbUQsbW1ICQk7IG1tRD0oMTEgMTMgMTUgMTcpCi0JcHVucGNraGJ3IG1tRixtbUgJCTsgbW1GPSgyMSAyMyAyNSAyNykKKyAgICAgICAgbW92cSAgICAgIG1tRixtbUQKKyAgICAgICAgcHVucGNrbGJ3IG1tRCxtbUggICAgICAgICAgICAgICA7IG1tRD0oMTEgMTMgMTUgMTcpCisgICAgICAgIHB1bnBja2hidyBtbUYsbW1IICAgICAgICAgICAgICAgOyBtbUY9KDIxIDIzIDI1IDI3KQogCiAlZWxzZSA7IFJHQl9QSVhFTFNJWkUgPT0gNCA7IC0tLS0tLS0tLS0tCiAKIC5jb2x1bW5fbGQxOgotCXRlc3QJY2wsIFNJWkVPRl9NTVdPUkQvOAotCWp6CXNob3J0IC5jb2x1bW5fbGQyCi0Jc3ViCWVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JELzgKLQltb3ZkCW1tQSwgRFdPUkQgW2VzaStlY3gqUkdCX1BJWEVMU0laRV0KKyAgICAgICAgdGVzdCAgICBjbCwgU0laRU9GX01NV09SRC84CisgICAgICAgIGp6ICAgICAgc2hvcnQgLmNvbHVtbl9sZDIKKyAgICAgICAgc3ViICAgICBlY3gsIGJ5dGUgU0laRU9GX01NV09SRC84CisgICAgICAgIG1vdmQgICAgbW1BLCBEV09SRCBbZXNpK2VjeCpSR0JfUElYRUxTSVpFXQogLmNvbHVtbl9sZDI6Ci0JdGVzdAljbCwgU0laRU9GX01NV09SRC80Ci0JanoJc2hvcnQgLmNvbHVtbl9sZDQKLQlzdWIJZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQvNAotCW1vdnEJbW1GLG1tQQotCW1vdnEJbW1BLCBNTVdPUkQgW2VzaStlY3gqUkdCX1BJWEVMU0laRV0KKyAgICAgICAgdGVzdCAgICBjbCwgU0laRU9GX01NV09SRC80CisgICAgICAgIGp6ICAgICAgc2hvcnQgLmNvbHVtbl9sZDQKKyAgICAgICAgc3ViICAgICBlY3gsIGJ5dGUgU0laRU9GX01NV09SRC80CisgICAgICAgIG1vdnEgICAgbW1GLG1tQQorICAgICAgICBtb3ZxICAgIG1tQSwgTU1XT1JEIFtlc2krZWN4KlJHQl9QSVhFTFNJWkVdCiAuY29sdW1uX2xkNDoKLQl0ZXN0CWNsLCBTSVpFT0ZfTU1XT1JELzIKLQltb3YJZWN4LCBTSVpFT0ZfTU1XT1JECi0JanoJc2hvcnQgLnJnYl9ncmF5X2NudgotCW1vdnEJbW1ELG1tQQotCW1vdnEJbW1DLG1tRgotCW1vdnEJbW1BLCBNTVdPUkQgW2VzaSswKlNJWkVPRl9NTVdPUkRdCi0JbW92cQltbUYsIE1NV09SRCBbZXNpKzEqU0laRU9GX01NV09SRF0KLQlqbXAJc2hvcnQgLnJnYl9ncmF5X2NudgotCWFsaWdueAkxNiw3CisgICAgICAgIHRlc3QgICAgY2wsIFNJWkVPRl9NTVdPUkQvMgorICAgICAgICBtb3YgICAgIGVjeCwgU0laRU9GX01NV09SRAorICAgICAgICBqeiAgICAgIHNob3J0IC5yZ2JfZ3JheV9jbnYKKyAgICAgICAgbW92cSAgICBtbUQsbW1BCisgICAgICAgIG1vdnEgICAgbW1DLG1tRgorICAgICAgICBtb3ZxICAgIG1tQSwgTU1XT1JEIFtlc2krMCpTSVpFT0ZfTU1XT1JEXQorICAgICAgICBtb3ZxICAgIG1tRiwgTU1XT1JEIFtlc2krMSpTSVpFT0ZfTU1XT1JEXQorICAgICAgICBqbXAgICAgIHNob3J0IC5yZ2JfZ3JheV9jbnYKKyAgICAgICAgYWxpZ254ICAxNiw3CiAKIC5jb2x1bW5sb29wOgotCW1vdnEJbW1BLCBNTVdPUkQgW2VzaSswKlNJWkVPRl9NTVdPUkRdCi0JbW92cQltbUYsIE1NV09SRCBbZXNpKzEqU0laRU9GX01NV09SRF0KLQltb3ZxCW1tRCwgTU1XT1JEIFtlc2krMipTSVpFT0ZfTU1XT1JEXQotCW1vdnEJbW1DLCBNTVdPUkQgW2VzaSszKlNJWkVPRl9NTVdPUkRdCisgICAgICAgIG1vdnEgICAgbW1BLCBNTVdPUkQgW2VzaSswKlNJWkVPRl9NTVdPUkRdCisgICAgICAgIG1vdnEgICAgbW1GLCBNTVdPUkQgW2VzaSsxKlNJWkVPRl9NTVdPUkRdCisgICAgICAgIG1vdnEgICAgbW1ELCBNTVdPUkQgW2VzaSsyKlNJWkVPRl9NTVdPUkRdCisgICAgICAgIG1vdnEgICAgbW1DLCBNTVdPUkQgW2VzaSszKlNJWkVPRl9NTVdPUkRdCiAKIC5yZ2JfZ3JheV9jbnY6Ci0JOyBtbUE9KDAwIDEwIDIwIDMwIDAxIDExIDIxIDMxKQotCTsgbW1GPSgwMiAxMiAyMiAzMiAwMyAxMyAyMyAzMykKLQk7IG1tRD0oMDQgMTQgMjQgMzQgMDUgMTUgMjUgMzUpCi0JOyBtbUM9KDA2IDE2IDI2IDM2IDA3IDE3IDI3IDM3KQorICAgICAgICA7IG1tQT0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEpCisgICAgICAgIDsgbW1GPSgwMiAxMiAyMiAzMiAwMyAxMyAyMyAzMykKKyAgICAgICAgOyBtbUQ9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1KQorICAgICAgICA7IG1tQz0oMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCiAKLQltb3ZxICAgICAgbW1CLG1tQQotCXB1bnBja2xidyBtbUEsbW1GCQk7IG1tQT0oMDAgMDIgMTAgMTIgMjAgMjIgMzAgMzIpCi0JcHVucGNraGJ3IG1tQixtbUYJCTsgbW1CPSgwMSAwMyAxMSAxMyAyMSAyMyAzMSAzMykKKyAgICAgICAgbW92cSAgICAgIG1tQixtbUEKKyAgICAgICAgcHVucGNrbGJ3IG1tQSxtbUYgICAgICAgICAgICAgICA7IG1tQT0oMDAgMDIgMTAgMTIgMjAgMjIgMzAgMzIpCisgICAgICAgIHB1bnBja2hidyBtbUIsbW1GICAgICAgICAgICAgICAgOyBtbUI9KDAxIDAzIDExIDEzIDIxIDIzIDMxIDMzKQogCi0JbW92cSAgICAgIG1tRyxtbUQKLQlwdW5wY2tsYncgbW1ELG1tQwkJOyBtbUQ9KDA0IDA2IDE0IDE2IDI0IDI2IDM0IDM2KQotCXB1bnBja2hidyBtbUcsbW1DCQk7IG1tRz0oMDUgMDcgMTUgMTcgMjUgMjcgMzUgMzcpCisgICAgICAgIG1vdnEgICAgICBtbUcsbW1ECisgICAgICAgIHB1bnBja2xidyBtbUQsbW1DICAgICAgICAgICAgICAgOyBtbUQ9KDA0IDA2IDE0IDE2IDI0IDI2IDM0IDM2KQorICAgICAgICBwdW5wY2toYncgbW1HLG1tQyAgICAgICAgICAgICAgIDsgbW1HPSgwNSAwNyAxNSAxNyAyNSAyNyAzNSAzNykKIAotCW1vdnEgICAgICBtbUUsbW1BCi0JcHVucGNrbHdkIG1tQSxtbUQJCTsgbW1BPSgwMCAwMiAwNCAwNiAxMCAxMiAxNCAxNikKLQlwdW5wY2tod2QgbW1FLG1tRAkJOyBtbUU9KDIwIDIyIDI0IDI2IDMwIDMyIDM0IDM2KQorICAgICAgICBtb3ZxICAgICAgbW1FLG1tQQorICAgICAgICBwdW5wY2tsd2QgbW1BLG1tRCAgICAgICAgICAgICAgIDsgbW1BPSgwMCAwMiAwNCAwNiAxMCAxMiAxNCAxNikKKyAgICAgICAgcHVucGNraHdkIG1tRSxtbUQgICAgICAgICAgICAgICA7IG1tRT0oMjAgMjIgMjQgMjYgMzAgMzIgMzQgMzYpCiAKLQltb3ZxICAgICAgbW1ILG1tQgotCXB1bnBja2x3ZCBtbUIsbW1HCQk7IG1tQj0oMDEgMDMgMDUgMDcgMTEgMTMgMTUgMTcpCi0JcHVucGNraHdkIG1tSCxtbUcJCTsgbW1IPSgyMSAyMyAyNSAyNyAzMSAzMyAzNSAzNykKKyAgICAgICAgbW92cSAgICAgIG1tSCxtbUIKKyAgICAgICAgcHVucGNrbHdkIG1tQixtbUcgICAgICAgICAgICAgICA7IG1tQj0oMDEgMDMgMDUgMDcgMTEgMTMgMTUgMTcpCisgICAgICAgIHB1bnBja2h3ZCBtbUgsbW1HICAgICAgICAgICAgICAgOyBtbUg9KDIxIDIzIDI1IDI3IDMxIDMzIDM1IDM3KQogCi0JcHhvciAgICAgIG1tRixtbUYKKyAgICAgICAgcHhvciAgICAgIG1tRixtbUYKIAotCW1vdnEgICAgICBtbUMsbW1BCi0JcHVucGNrbGJ3IG1tQSxtbUYJCTsgbW1BPSgwMCAwMiAwNCAwNikKLQlwdW5wY2toYncgbW1DLG1tRgkJOyBtbUM9KDEwIDEyIDE0IDE2KQorICAgICAgICBtb3ZxICAgICAgbW1DLG1tQQorICAgICAgICBwdW5wY2tsYncgbW1BLG1tRiAgICAgICAgICAgICAgIDsgbW1BPSgwMCAwMiAwNCAwNikKKyAgICAgICAgcHVucGNraGJ3IG1tQyxtbUYgICAgICAgICAgICAgICA7IG1tQz0oMTAgMTIgMTQgMTYpCiAKLQltb3ZxICAgICAgbW1ELG1tQgotCXB1bnBja2xidyBtbUIsbW1GCQk7IG1tQj0oMDEgMDMgMDUgMDcpCi0JcHVucGNraGJ3IG1tRCxtbUYJCTsgbW1EPSgxMSAxMyAxNSAxNykKKyAgICAgICAgbW92cSAgICAgIG1tRCxtbUIKKyAgICAgICAgcHVucGNrbGJ3IG1tQixtbUYgICAgICAgICAgICAgICA7IG1tQj0oMDEgMDMgMDUgMDcpCisgICAgICAgIHB1bnBja2hidyBtbUQsbW1GICAgICAgICAgICAgICAgOyBtbUQ9KDExIDEzIDE1IDE3KQogCi0JbW92cSAgICAgIG1tRyxtbUUKLQlwdW5wY2tsYncgbW1FLG1tRgkJOyBtbUU9KDIwIDIyIDI0IDI2KQotCXB1bnBja2hidyBtbUcsbW1GCQk7IG1tRz0oMzAgMzIgMzQgMzYpCisgICAgICAgIG1vdnEgICAgICBtbUcsbW1FCisgICAgICAgIHB1bnBja2xidyBtbUUsbW1GICAgICAgICAgICAgICAgOyBtbUU9KDIwIDIyIDI0IDI2KQorICAgICAgICBwdW5wY2toYncgbW1HLG1tRiAgICAgICAgICAgICAgIDsgbW1HPSgzMCAzMiAzNCAzNikKIAotCXB1bnBja2xidyBtbUYsbW1ICi0JcHVucGNraGJ3IG1tSCxtbUgKLQlwc3JsdyAgICAgbW1GLEJZVEVfQklUCQk7IG1tRj0oMjEgMjMgMjUgMjcpCi0JcHNybHcgICAgIG1tSCxCWVRFX0JJVAkJOyBtbUg9KDMxIDMzIDM1IDM3KQorICAgICAgICBwdW5wY2tsYncgbW1GLG1tSAorICAgICAgICBwdW5wY2toYncgbW1ILG1tSAorICAgICAgICBwc3JsdyAgICAgbW1GLEJZVEVfQklUICAgICAgICAgIDsgbW1GPSgyMSAyMyAyNSAyNykKKyAgICAgICAgcHNybHcgICAgIG1tSCxCWVRFX0JJVCAgICAgICAgICA7IG1tSD0oMzEgMzMgMzUgMzcpCiAKICVlbmRpZiA7IFJHQl9QSVhFTFNJWkUgOyAtLS0tLS0tLS0tLS0tLS0KIAotCTsgbW0wPShSMCBSMiBSNCBSNik9UkUsIG1tMj0oRzAgRzIgRzQgRzYpPUdFLCBtbTQ9KEIwIEIyIEI0IEI2KT1CRQotCTsgbW0xPShSMSBSMyBSNSBSNyk9Uk8sIG1tMz0oRzEgRzMgRzUgRzcpPUdPLCBtbTU9KEIxIEIzIEI1IEI3KT1CTworICAgICAgICA7IG1tMD0oUjAgUjIgUjQgUjYpPVJFLCBtbTI9KEcwIEcyIEc0IEc2KT1HRSwgbW00PShCMCBCMiBCNCBCNik9QkUKKyAgICAgICAgOyBtbTE9KFIxIFIzIFI1IFI3KT1STywgbW0zPShHMSBHMyBHNSBHNyk9R08sIG1tNT0oQjEgQjMgQjUgQjcpPUJPCiAKLQk7IChPcmlnaW5hbCkKLQk7IFkgID0gIDAuMjk5MDAgKiBSICsgMC41ODcwMCAqIEcgKyAwLjExNDAwICogQgotCTsKLQk7IChUaGlzIGltcGxlbWVudGF0aW9uKQotCTsgWSAgPSAgMC4yOTkwMCAqIFIgKyAwLjMzNzAwICogRyArIDAuMTE0MDAgKiBCICsgMC4yNTAwMCAqIEcKKyAgICAgICAgOyAoT3JpZ2luYWwpCisgICAgICAgIDsgWSAgPSAgMC4yOTkwMCAqIFIgKyAwLjU4NzAwICogRyArIDAuMTE0MDAgKiBCCisgICAgICAgIDsKKyAgICAgICAgOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKyAgICAgICAgOyBZICA9ICAwLjI5OTAwICogUiArIDAuMzM3MDAgKiBHICsgMC4xMTQwMCAqIEIgKyAwLjI1MDAwICogRwogCi0JbW92cSAgICAgIG1tNixtbTEKLQlwdW5wY2tsd2QgbW0xLG1tMwotCXB1bnBja2h3ZCBtbTYsbW0zCi0JcG1hZGR3ZCAgIG1tMSxbR09UT0ZGKGVheCxQV19GMDI5OV9GMDMzNyldIDsgbW0xPVJPTCpGSVgoMC4yOTkpK0dPTCpGSVgoMC4zMzcpCi0JcG1hZGR3ZCAgIG1tNixbR09UT0ZGKGVheCxQV19GMDI5OV9GMDMzNyldIDsgbW02PVJPSCpGSVgoMC4yOTkpK0dPSCpGSVgoMC4zMzcpCisgICAgICAgIG1vdnEgICAgICBtbTYsbW0xCisgICAgICAgIHB1bnBja2x3ZCBtbTEsbW0zCisgICAgICAgIHB1bnBja2h3ZCBtbTYsbW0zCisgICAgICAgIHBtYWRkd2QgICBtbTEsW0dPVE9GRihlYXgsUFdfRjAyOTlfRjAzMzcpXSA7IG1tMT1ST0wqRklYKDAuMjk5KStHT0wqRklYKDAuMzM3KQorICAgICAgICBwbWFkZHdkICAgbW02LFtHT1RPRkYoZWF4LFBXX0YwMjk5X0YwMzM3KV0gOyBtbTY9Uk9IKkZJWCgwLjI5OSkrR09IKkZJWCgwLjMzNykKIAotCW1vdnEgICAgICBtbTcsIG1tNgk7IG1tNz1ST0gqRklYKDAuMjk5KStHT0gqRklYKDAuMzM3KQorICAgICAgICBtb3ZxICAgICAgbW03LCBtbTYgICAgICA7IG1tNz1ST0gqRklYKDAuMjk5KStHT0gqRklYKDAuMzM3KQogCi0JbW92cSAgICAgIG1tNixtbTAKLQlwdW5wY2tsd2QgbW0wLG1tMgotCXB1bnBja2h3ZCBtbTYsbW0yCi0JcG1hZGR3ZCAgIG1tMCxbR09UT0ZGKGVheCxQV19GMDI5OV9GMDMzNyldIDsgbW0wPVJFTCpGSVgoMC4yOTkpK0dFTCpGSVgoMC4zMzcpCi0JcG1hZGR3ZCAgIG1tNixbR09UT0ZGKGVheCxQV19GMDI5OV9GMDMzNyldIDsgbW02PVJFSCpGSVgoMC4yOTkpK0dFSCpGSVgoMC4zMzcpCisgICAgICAgIG1vdnEgICAgICBtbTYsbW0wCisgICAgICAgIHB1bnBja2x3ZCBtbTAsbW0yCisgICAgICAgIHB1bnBja2h3ZCBtbTYsbW0yCisgICAgICAgIHBtYWRkd2QgICBtbTAsW0dPVE9GRihlYXgsUFdfRjAyOTlfRjAzMzcpXSA7IG1tMD1SRUwqRklYKDAuMjk5KStHRUwqRklYKDAuMzM3KQorICAgICAgICBwbWFkZHdkICAgbW02LFtHT1RPRkYoZWF4LFBXX0YwMjk5X0YwMzM3KV0gOyBtbTY9UkVIKkZJWCgwLjI5OSkrR0VIKkZJWCgwLjMzNykKIAotCW1vdnEgICAgICBNTVdPUkQgW3drKDApXSwgbW0wCTsgd2soMCk9UkVMKkZJWCgwLjI5OSkrR0VMKkZJWCgwLjMzNykKLQltb3ZxICAgICAgTU1XT1JEIFt3aygxKV0sIG1tNgk7IHdrKDEpPVJFSCpGSVgoMC4yOTkpK0dFSCpGSVgoMC4zMzcpCisgICAgICAgIG1vdnEgICAgICBNTVdPUkQgW3drKDApXSwgbW0wICAgOyB3aygwKT1SRUwqRklYKDAuMjk5KStHRUwqRklYKDAuMzM3KQorICAgICAgICBtb3ZxICAgICAgTU1XT1JEIFt3aygxKV0sIG1tNiAgIDsgd2soMSk9UkVIKkZJWCgwLjI5OSkrR0VIKkZJWCgwLjMzNykKIAotCW1vdnEgICAgICBtbTAsIG1tNQk7IG1tMD1CTwotCW1vdnEgICAgICBtbTYsIG1tNAk7IG1tNj1CRQorICAgICAgICBtb3ZxICAgICAgbW0wLCBtbTUgICAgICA7IG1tMD1CTworICAgICAgICBtb3ZxICAgICAgbW02LCBtbTQgICAgICA7IG1tNj1CRQogCi0JbW92cSAgICAgIG1tNCxtbTAKLQlwdW5wY2tsd2QgbW0wLG1tMwotCXB1bnBja2h3ZCBtbTQsbW0zCi0JcG1hZGR3ZCAgIG1tMCxbR09UT0ZGKGVheCxQV19GMDExNF9GMDI1MCldIDsgbW0wPUJPTCpGSVgoMC4xMTQpK0dPTCpGSVgoMC4yNTApCi0JcG1hZGR3ZCAgIG1tNCxbR09UT0ZGKGVheCxQV19GMDExNF9GMDI1MCldIDsgbW00PUJPSCpGSVgoMC4xMTQpK0dPSCpGSVgoMC4yNTApCisgICAgICAgIG1vdnEgICAgICBtbTQsbW0wCisgICAgICAgIHB1bnBja2x3ZCBtbTAsbW0zCisgICAgICAgIHB1bnBja2h3ZCBtbTQsbW0zCisgICAgICAgIHBtYWRkd2QgICBtbTAsW0dPVE9GRihlYXgsUFdfRjAxMTRfRjAyNTApXSA7IG1tMD1CT0wqRklYKDAuMTE0KStHT0wqRklYKDAuMjUwKQorICAgICAgICBwbWFkZHdkICAgbW00LFtHT1RPRkYoZWF4LFBXX0YwMTE0X0YwMjUwKV0gOyBtbTQ9Qk9IKkZJWCgwLjExNCkrR09IKkZJWCgwLjI1MCkKIAotCW1vdnEgICAgICBtbTMsW0dPVE9GRihlYXgsUERfT05FSEFMRildCTsgbW0zPVtQRF9PTkVIQUxGXQorICAgICAgICBtb3ZxICAgICAgbW0zLFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXSAgOyBtbTM9W1BEX09ORUhBTEZdCiAKLQlwYWRkZCAgICAgbW0wLCBtbTEKLQlwYWRkZCAgICAgbW00LCBtbTcKLQlwYWRkZCAgICAgbW0wLG1tMwotCXBhZGRkICAgICBtbTQsbW0zCi0JcHNybGQgICAgIG1tMCxTQ0FMRUJJVFMJCTsgbW0wPVlPTAotCXBzcmxkICAgICBtbTQsU0NBTEVCSVRTCQk7IG1tND1ZT0gKLQlwYWNrc3NkdyAgbW0wLG1tNAkJOyBtbTA9WU8KKyAgICAgICAgcGFkZGQgICAgIG1tMCwgbW0xCisgICAgICAgIHBhZGRkICAgICBtbTQsIG1tNworICAgICAgICBwYWRkZCAgICAgbW0wLG1tMworICAgICAgICBwYWRkZCAgICAgbW00LG1tMworICAgICAgICBwc3JsZCAgICAgbW0wLFNDQUxFQklUUyAgICAgICAgIDsgbW0wPVlPTAorICAgICAgICBwc3JsZCAgICAgbW00LFNDQUxFQklUUyAgICAgICAgIDsgbW00PVlPSAorICAgICAgICBwYWNrc3NkdyAgbW0wLG1tNCAgICAgICAgICAgICAgIDsgbW0wPVlPCiAKLQltb3ZxICAgICAgbW00LG1tNgotCXB1bnBja2x3ZCBtbTYsbW0yCi0JcHVucGNraHdkIG1tNCxtbTIKLQlwbWFkZHdkICAgbW02LFtHT1RPRkYoZWF4LFBXX0YwMTE0X0YwMjUwKV0gOyBtbTY9QkVMKkZJWCgwLjExNCkrR0VMKkZJWCgwLjI1MCkKLQlwbWFkZHdkICAgbW00LFtHT1RPRkYoZWF4LFBXX0YwMTE0X0YwMjUwKV0gOyBtbTQ9QkVIKkZJWCgwLjExNCkrR0VIKkZJWCgwLjI1MCkKKyAgICAgICAgbW92cSAgICAgIG1tNCxtbTYKKyAgICAgICAgcHVucGNrbHdkIG1tNixtbTIKKyAgICAgICAgcHVucGNraHdkIG1tNCxtbTIKKyAgICAgICAgcG1hZGR3ZCAgIG1tNixbR09UT0ZGKGVheCxQV19GMDExNF9GMDI1MCldIDsgbW02PUJFTCpGSVgoMC4xMTQpK0dFTCpGSVgoMC4yNTApCisgICAgICAgIHBtYWRkd2QgICBtbTQsW0dPVE9GRihlYXgsUFdfRjAxMTRfRjAyNTApXSA7IG1tND1CRUgqRklYKDAuMTE0KStHRUgqRklYKDAuMjUwKQogCi0JbW92cSAgICAgIG1tMixbR09UT0ZGKGVheCxQRF9PTkVIQUxGKV0JOyBtbTI9W1BEX09ORUhBTEZdCisgICAgICAgIG1vdnEgICAgICBtbTIsW0dPVE9GRihlYXgsUERfT05FSEFMRildICA7IG1tMj1bUERfT05FSEFMRl0KIAotCXBhZGRkICAgICBtbTYsIE1NV09SRCBbd2soMCldCi0JcGFkZGQgICAgIG1tNCwgTU1XT1JEIFt3aygxKV0KLQlwYWRkZCAgICAgbW02LG1tMgotCXBhZGRkICAgICBtbTQsbW0yCi0JcHNybGQgICAgIG1tNixTQ0FMRUJJVFMJCTsgbW02PVlFTAotCXBzcmxkICAgICBtbTQsU0NBTEVCSVRTCQk7IG1tND1ZRUgKLQlwYWNrc3NkdyAgbW02LG1tNAkJOyBtbTY9WUUKKyAgICAgICAgcGFkZGQgICAgIG1tNiwgTU1XT1JEIFt3aygwKV0KKyAgICAgICAgcGFkZGQgICAgIG1tNCwgTU1XT1JEIFt3aygxKV0KKyAgICAgICAgcGFkZGQgICAgIG1tNixtbTIKKyAgICAgICAgcGFkZGQgICAgIG1tNCxtbTIKKyAgICAgICAgcHNybGQgICAgIG1tNixTQ0FMRUJJVFMgICAgICAgICA7IG1tNj1ZRUwKKyAgICAgICAgcHNybGQgICAgIG1tNCxTQ0FMRUJJVFMgICAgICAgICA7IG1tND1ZRUgKKyAgICAgICAgcGFja3NzZHcgIG1tNixtbTQgICAgICAgICAgICAgICA7IG1tNj1ZRQogCi0JcHNsbHcgICAgIG1tMCxCWVRFX0JJVAotCXBvciAgICAgICBtbTYsbW0wCQk7IG1tNj1ZCi0JbW92cSAgICAgIE1NV09SRCBbZWRpXSwgbW02CTsgU2F2ZSBZCisgICAgICAgIHBzbGx3ICAgICBtbTAsQllURV9CSVQKKyAgICAgICAgcG9yICAgICAgIG1tNixtbTAgICAgICAgICAgICAgICA7IG1tNj1ZCisgICAgICAgIG1vdnEgICAgICBNTVdPUkQgW2VkaV0sIG1tNiAgICAgOyBTYXZlIFkKIAotCXN1YgllY3gsIGJ5dGUgU0laRU9GX01NV09SRAotCWFkZAllc2ksIGJ5dGUgUkdCX1BJWEVMU0laRSpTSVpFT0ZfTU1XT1JECTsgaW5wdHIKLQlhZGQJZWRpLCBieXRlIFNJWkVPRl9NTVdPUkQJCQk7IG91dHB0cjAKLQljbXAJZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQKLQlqYWUJbmVhciAuY29sdW1ubG9vcAotCXRlc3QJZWN4LGVjeAotCWpuegluZWFyIC5jb2x1bW5fbGQxCisgICAgICAgIHN1YiAgICAgZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQKKyAgICAgICAgYWRkICAgICBlc2ksIGJ5dGUgUkdCX1BJWEVMU0laRSpTSVpFT0ZfTU1XT1JEICAgOyBpbnB0cgorICAgICAgICBhZGQgICAgIGVkaSwgYnl0ZSBTSVpFT0ZfTU1XT1JEICAgICAgICAgICAgICAgICA7IG91dHB0cjAKKyAgICAgICAgY21wICAgICBlY3gsIGJ5dGUgU0laRU9GX01NV09SRAorICAgICAgICBqYWUgICAgIG5lYXIgLmNvbHVtbmxvb3AKKyAgICAgICAgdGVzdCAgICBlY3gsZWN4CisgICAgICAgIGpueiAgICAgbmVhciAuY29sdW1uX2xkMQogCi0JcG9wCWVjeAkJCTsgY29sCi0JcG9wCWVzaQotCXBvcAllZGkKLQlwb3BwaWMJZWF4CisgICAgICAgIHBvcCAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBjb2wKKyAgICAgICAgcG9wICAgICBlc2kKKyAgICAgICAgcG9wICAgICBlZGkKKyAgICAgICAgcG9wcGljICBlYXgKIAotCWFkZAllc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCTsgaW5wdXRfYnVmCi0JYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cKLQlkZWMJZWF4CQkJCTsgbnVtX3Jvd3MKLQlqZwluZWFyIC5yb3dsb29wCisgICAgICAgIGFkZCAgICAgZXNpLCBieXRlIFNJWkVPRl9KU0FNUFJPVyAgICAgICA7IGlucHV0X2J1ZgorICAgICAgICBhZGQgICAgIGVkaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cKKyAgICAgICAgZGVjICAgICBlYXggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgbnVtX3Jvd3MKKyAgICAgICAgamcgICAgICBuZWFyIC5yb3dsb29wCiAKLQllbW1zCQk7IGVtcHR5IE1NWCBzdGF0ZQorICAgICAgICBlbW1zICAgICAgICAgICAgOyBlbXB0eSBNTVggc3RhdGUKIAogLnJldHVybjoKLQlwb3AJZWRpCi0JcG9wCWVzaQotOwlwb3AJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotOwlwb3AJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotCXBvcAllYngKLQltb3YJZXNwLGVicAkJOyBlc3AgPC0gYWxpZ25lZCBlYnAKLQlwb3AJZXNwCQk7IGVzcCA8LSBvcmlnaW5hbCBlYnAKLQlwb3AJZWJwCi0JcmV0CisgICAgICAgIHBvcCAgICAgZWRpCisgICAgICAgIHBvcCAgICAgZXNpCis7ICAgICAgIHBvcCAgICAgZWR4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgICAgIHBvcCAgICAgZWN4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgICAgIHBvcCAgICAgZWJ4CisgICAgICAgIG1vdiAgICAgZXNwLGVicCAgICAgICAgIDsgZXNwIDwtIGFsaWduZWQgZWJwCisgICAgICAgIHBvcCAgICAgZXNwICAgICAgICAgICAgIDsgZXNwIDwtIG9yaWdpbmFsIGVicAorICAgICAgICBwb3AgICAgIGVicAorICAgICAgICByZXQKIAogOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKIDsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KLQlhbGlnbgkxNgorICAgICAgICBhbGlnbiAgIDE2CmRpZmYgLS1naXQgYS9zaW1kL2pjZ3J5c3MyLTY0LmFzbSBiL3NpbWQvamNncnlzczItNjQuYXNtCmluZGV4IDIzYWU4YWYuLjIzMDgxMjkgMTAwNjQ0Ci0tLSBhL3NpbWQvamNncnlzczItNjQuYXNtCisrKyBiL3NpbWQvamNncnlzczItNjQuYXNtCkBAIC0zMiwzMzMgKzMyLDMzMyBAQAogOyByMTMgPSBKRElNRU5TSU9OIG91dHB1dF9yb3cKIDsgcjE0ID0gaW50IG51bV9yb3dzCiAKLSVkZWZpbmUgd2soaSkJCXJicC0oV0tfTlVNLShpKSkqU0laRU9GX1hNTVdPUkQJOyB4bW13b3JkIHdrW1dLX05VTV0KLSVkZWZpbmUgV0tfTlVNCQkyCislZGVmaW5lIHdrKGkpICAgICAgICAgICByYnAtKFdLX05VTS0oaSkpKlNJWkVPRl9YTU1XT1JEIDsgeG1td29yZCB3a1tXS19OVU1dCislZGVmaW5lIFdLX05VTSAgICAgICAgICAyCiAKLQlhbGlnbgkxNgorICAgICAgICBhbGlnbiAgIDE2CiAKLQlnbG9iYWwJRVhUTihqc2ltZF9yZ2JfZ3JheV9jb252ZXJ0X3NzZTIpCisgICAgICAgIGdsb2JhbCAgRVhUTihqc2ltZF9yZ2JfZ3JheV9jb252ZXJ0X3NzZTIpCiAKIEVYVE4oanNpbWRfcmdiX2dyYXlfY29udmVydF9zc2UyKToKLQlwdXNoCXJicAotCW1vdglyYXgscnNwCQkJCTsgcmF4ID0gb3JpZ2luYWwgcmJwCi0Jc3ViCXJzcCwgYnl0ZSA0Ci0JYW5kCXJzcCwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKQk7IGFsaWduIHRvIDEyOCBiaXRzCi0JbW92CVtyc3BdLHJheAotCW1vdglyYnAscnNwCQkJCTsgcmJwID0gYWxpZ25lZCByYnAKLQlsZWEJcnNwLCBbd2soMCldCi0JY29sbGVjdF9hcmdzCi0JcHVzaAlyYngKKyAgICAgICAgcHVzaCAgICByYnAKKyAgICAgICAgbW92ICAgICByYXgscnNwICAgICAgICAgICAgICAgICAgICAgICAgIDsgcmF4ID0gb3JpZ2luYWwgcmJwCisgICAgICAgIHN1YiAgICAgcnNwLCBieXRlIDQKKyAgICAgICAgYW5kICAgICByc3AsIGJ5dGUgKC1TSVpFT0ZfWE1NV09SRCkgICAgIDsgYWxpZ24gdG8gMTI4IGJpdHMKKyAgICAgICAgbW92ICAgICBbcnNwXSxyYXgKKyAgICAgICAgbW92ICAgICByYnAscnNwICAgICAgICAgICAgICAgICAgICAgICAgIDsgcmJwID0gYWxpZ25lZCByYnAKKyAgICAgICAgbGVhICAgICByc3AsIFt3aygwKV0KKyAgICAgICAgY29sbGVjdF9hcmdzCisgICAgICAgIHB1c2ggICAgcmJ4CiAKLQltb3YJcmN4LCByMTAKLQl0ZXN0CXJjeCxyY3gKLQlqegluZWFyIC5yZXR1cm4KKyAgICAgICAgbW92ICAgICByY3gsIHIxMAorICAgICAgICB0ZXN0ICAgIHJjeCxyY3gKKyAgICAgICAganogICAgICBuZWFyIC5yZXR1cm4KIAotCXB1c2gJcmN4CisgICAgICAgIHB1c2ggICAgcmN4CiAKLQltb3YgcnNpLCByMTIKLQltb3YgcmN4LCByMTMKLQltb3YJcmRpLCBKU0FNUEFSUkFZIFtyc2krMCpTSVpFT0ZfSlNBTVBBUlJBWV0KLQlsZWEJcmRpLCBbcmRpK3JjeCpTSVpFT0ZfSlNBTVBST1ddCisgICAgICAgIG1vdiByc2ksIHIxMgorICAgICAgICBtb3YgcmN4LCByMTMKKyAgICAgICAgbW92ICAgICByZGksIEpTQU1QQVJSQVkgW3JzaSswKlNJWkVPRl9KU0FNUEFSUkFZXQorICAgICAgICBsZWEgICAgIHJkaSwgW3JkaStyY3gqU0laRU9GX0pTQU1QUk9XXQogCi0JcG9wCXJjeAorICAgICAgICBwb3AgICAgIHJjeAogCi0JbW92IHJzaSwgcjExCi0JbW92CWVheCwgcjE0ZAotCXRlc3QJcmF4LHJheAotCWpsZQluZWFyIC5yZXR1cm4KKyAgICAgICAgbW92IHJzaSwgcjExCisgICAgICAgIG1vdiAgICAgZWF4LCByMTRkCisgICAgICAgIHRlc3QgICAgcmF4LHJheAorICAgICAgICBqbGUgICAgIG5lYXIgLnJldHVybgogLnJvd2xvb3A6Ci0JcHVzaAlyZGkKLQlwdXNoCXJzaQotCXB1c2gJcmN4CQkJOyBjb2wKKyAgICAgICAgcHVzaCAgICByZGkKKyAgICAgICAgcHVzaCAgICByc2kKKyAgICAgICAgcHVzaCAgICByY3ggICAgICAgICAgICAgICAgICAgICA7IGNvbAogCi0JbW92CXJzaSwgSlNBTVBST1cgW3JzaV0JOyBpbnB0cgotCW1vdglyZGksIEpTQU1QUk9XIFtyZGldCTsgb3V0cHRyMAorICAgICAgICBtb3YgICAgIHJzaSwgSlNBTVBST1cgW3JzaV0gICAgIDsgaW5wdHIKKyAgICAgICAgbW92ICAgICByZGksIEpTQU1QUk9XIFtyZGldICAgICA7IG91dHB0cjAKIAotCWNtcAlyY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKLQlqYWUJbmVhciAuY29sdW1ubG9vcAorICAgICAgICBjbXAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorICAgICAgICBqYWUgICAgIG5lYXIgLmNvbHVtbmxvb3AKIAogJWlmIFJHQl9QSVhFTFNJWkUgPT0gMyA7IC0tLS0tLS0tLS0tLS0tLQogCiAuY29sdW1uX2xkMToKLQlwdXNoCXJheAotCXB1c2gJcmR4Ci0JbGVhCXJjeCxbcmN4K3JjeCoyXQkJOyBpbXVsIGVjeCxSR0JfUElYRUxTSVpFCi0JdGVzdAljbCwgU0laRU9GX0JZVEUKLQlqeglzaG9ydCAuY29sdW1uX2xkMgotCXN1YglyY3gsIGJ5dGUgU0laRU9GX0JZVEUKLQltb3Z6eAlyYXgsIEJZVEUgW3JzaStyY3hdCisgICAgICAgIHB1c2ggICAgcmF4CisgICAgICAgIHB1c2ggICAgcmR4CisgICAgICAgIGxlYSAgICAgcmN4LFtyY3grcmN4KjJdICAgICAgICAgOyBpbXVsIGVjeCxSR0JfUElYRUxTSVpFCisgICAgICAgIHRlc3QgICAgY2wsIFNJWkVPRl9CWVRFCisgICAgICAgIGp6ICAgICAgc2hvcnQgLmNvbHVtbl9sZDIKKyAgICAgICAgc3ViICAgICByY3gsIGJ5dGUgU0laRU9GX0JZVEUKKyAgICAgICAgbW92enggICByYXgsIEJZVEUgW3JzaStyY3hdCiAuY29sdW1uX2xkMjoKLQl0ZXN0CWNsLCBTSVpFT0ZfV09SRAotCWp6CXNob3J0IC5jb2x1bW5fbGQ0Ci0Jc3ViCXJjeCwgYnl0ZSBTSVpFT0ZfV09SRAotCW1vdnp4CXJkeCwgV09SRCBbcnNpK3JjeF0KLQlzaGwJcmF4LCBXT1JEX0JJVAotCW9yCXJheCxyZHgKKyAgICAgICAgdGVzdCAgICBjbCwgU0laRU9GX1dPUkQKKyAgICAgICAganogICAgICBzaG9ydCAuY29sdW1uX2xkNAorICAgICAgICBzdWIgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfV09SRAorICAgICAgICBtb3Z6eCAgIHJkeCwgV09SRCBbcnNpK3JjeF0KKyAgICAgICAgc2hsICAgICByYXgsIFdPUkRfQklUCisgICAgICAgIG9yICAgICAgcmF4LHJkeAogLmNvbHVtbl9sZDQ6Ci0JbW92ZAl4bW1BLGVheAotCXBvcAlyZHgKLQlwb3AJcmF4Ci0JdGVzdAljbCwgU0laRU9GX0RXT1JECi0JanoJc2hvcnQgLmNvbHVtbl9sZDgKLQlzdWIJcmN4LCBieXRlIFNJWkVPRl9EV09SRAotCW1vdmQJeG1tRiwgWE1NX0RXT1JEIFtyc2krcmN4XQotCXBzbGxkcQl4bW1BLCBTSVpFT0ZfRFdPUkQKLQlwb3IJeG1tQSx4bW1GCisgICAgICAgIG1vdmQgICAgeG1tQSxlYXgKKyAgICAgICAgcG9wICAgICByZHgKKyAgICAgICAgcG9wICAgICByYXgKKyAgICAgICAgdGVzdCAgICBjbCwgU0laRU9GX0RXT1JECisgICAgICAgIGp6ICAgICAgc2hvcnQgLmNvbHVtbl9sZDgKKyAgICAgICAgc3ViICAgICByY3gsIGJ5dGUgU0laRU9GX0RXT1JECisgICAgICAgIG1vdmQgICAgeG1tRiwgWE1NX0RXT1JEIFtyc2krcmN4XQorICAgICAgICBwc2xsZHEgIHhtbUEsIFNJWkVPRl9EV09SRAorICAgICAgICBwb3IgICAgIHhtbUEseG1tRgogLmNvbHVtbl9sZDg6Ci0JdGVzdAljbCwgU0laRU9GX01NV09SRAotCWp6CXNob3J0IC5jb2x1bW5fbGQxNgotCXN1YglyY3gsIGJ5dGUgU0laRU9GX01NV09SRAotCW1vdnEJeG1tQiwgWE1NX01NV09SRCBbcnNpK3JjeF0KLQlwc2xsZHEJeG1tQSwgU0laRU9GX01NV09SRAotCXBvcgl4bW1BLHhtbUIKKyAgICAgICAgdGVzdCAgICBjbCwgU0laRU9GX01NV09SRAorICAgICAgICBqeiAgICAgIHNob3J0IC5jb2x1bW5fbGQxNgorICAgICAgICBzdWIgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECisgICAgICAgIG1vdnEgICAgeG1tQiwgWE1NX01NV09SRCBbcnNpK3JjeF0KKyAgICAgICAgcHNsbGRxICB4bW1BLCBTSVpFT0ZfTU1XT1JECisgICAgICAgIHBvciAgICAgeG1tQSx4bW1CCiAuY29sdW1uX2xkMTY6Ci0JdGVzdAljbCwgU0laRU9GX1hNTVdPUkQKLQlqeglzaG9ydCAuY29sdW1uX2xkMzIKLQltb3ZkcWEJeG1tRix4bW1BCi0JbW92ZHF1CXhtbUEsIFhNTVdPUkQgW3JzaSswKlNJWkVPRl9YTU1XT1JEXQotCW1vdglyY3gsIFNJWkVPRl9YTU1XT1JECi0Jam1wCXNob3J0IC5yZ2JfZ3JheV9jbnYKKyAgICAgICAgdGVzdCAgICBjbCwgU0laRU9GX1hNTVdPUkQKKyAgICAgICAganogICAgICBzaG9ydCAuY29sdW1uX2xkMzIKKyAgICAgICAgbW92ZHFhICB4bW1GLHhtbUEKKyAgICAgICAgbW92ZHF1ICB4bW1BLCBYTU1XT1JEIFtyc2krMCpTSVpFT0ZfWE1NV09SRF0KKyAgICAgICAgbW92ICAgICByY3gsIFNJWkVPRl9YTU1XT1JECisgICAgICAgIGptcCAgICAgc2hvcnQgLnJnYl9ncmF5X2NudgogLmNvbHVtbl9sZDMyOgotCXRlc3QJY2wsIDIqU0laRU9GX1hNTVdPUkQKLQltb3YJcmN4LCBTSVpFT0ZfWE1NV09SRAotCWp6CXNob3J0IC5yZ2JfZ3JheV9jbnYKLQltb3ZkcWEJeG1tQix4bW1BCi0JbW92ZHF1CXhtbUEsIFhNTVdPUkQgW3JzaSswKlNJWkVPRl9YTU1XT1JEXQotCW1vdmRxdQl4bW1GLCBYTU1XT1JEIFtyc2krMSpTSVpFT0ZfWE1NV09SRF0KLQlqbXAJc2hvcnQgLnJnYl9ncmF5X2NudgorICAgICAgICB0ZXN0ICAgIGNsLCAyKlNJWkVPRl9YTU1XT1JECisgICAgICAgIG1vdiAgICAgcmN4LCBTSVpFT0ZfWE1NV09SRAorICAgICAgICBqeiAgICAgIHNob3J0IC5yZ2JfZ3JheV9jbnYKKyAgICAgICAgbW92ZHFhICB4bW1CLHhtbUEKKyAgICAgICAgbW92ZHF1ICB4bW1BLCBYTU1XT1JEIFtyc2krMCpTSVpFT0ZfWE1NV09SRF0KKyAgICAgICAgbW92ZHF1ICB4bW1GLCBYTU1XT1JEIFtyc2krMSpTSVpFT0ZfWE1NV09SRF0KKyAgICAgICAgam1wICAgICBzaG9ydCAucmdiX2dyYXlfY252CiAKIC5jb2x1bW5sb29wOgotCW1vdmRxdQl4bW1BLCBYTU1XT1JEIFtyc2krMCpTSVpFT0ZfWE1NV09SRF0KLQltb3ZkcXUJeG1tRiwgWE1NV09SRCBbcnNpKzEqU0laRU9GX1hNTVdPUkRdCi0JbW92ZHF1CXhtbUIsIFhNTVdPUkQgW3JzaSsyKlNJWkVPRl9YTU1XT1JEXQorICAgICAgICBtb3ZkcXUgIHhtbUEsIFhNTVdPUkQgW3JzaSswKlNJWkVPRl9YTU1XT1JEXQorICAgICAgICBtb3ZkcXUgIHhtbUYsIFhNTVdPUkQgW3JzaSsxKlNJWkVPRl9YTU1XT1JEXQorICAgICAgICBtb3ZkcXUgIHhtbUIsIFhNTVdPUkQgW3JzaSsyKlNJWkVPRl9YTU1XT1JEXQogCiAucmdiX2dyYXlfY252OgotCTsgeG1tQT0oMDAgMTAgMjAgMDEgMTEgMjEgMDIgMTIgMjIgMDMgMTMgMjMgMDQgMTQgMjQgMDUpCi0JOyB4bW1GPSgxNSAyNSAwNiAxNiAyNiAwNyAxNyAyNyAwOCAxOCAyOCAwOSAxOSAyOSAwQSAxQSkKLQk7IHhtbUI9KDJBIDBCIDFCIDJCIDBDIDFDIDJDIDBEIDFEIDJEIDBFIDFFIDJFIDBGIDFGIDJGKQorICAgICAgICA7IHhtbUE9KDAwIDEwIDIwIDAxIDExIDIxIDAyIDEyIDIyIDAzIDEzIDIzIDA0IDE0IDI0IDA1KQorICAgICAgICA7IHhtbUY9KDE1IDI1IDA2IDE2IDI2IDA3IDE3IDI3IDA4IDE4IDI4IDA5IDE5IDI5IDBBIDFBKQorICAgICAgICA7IHhtbUI9KDJBIDBCIDFCIDJCIDBDIDFDIDJDIDBEIDFEIDJEIDBFIDFFIDJFIDBGIDFGIDJGKQogCi0JbW92ZHFhICAgIHhtbUcseG1tQQotCXBzbGxkcSAgICB4bW1BLDgJOyB4bW1BPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAwMCAxMCAyMCAwMSAxMSAyMSAwMiAxMikKLQlwc3JsZHEgICAgeG1tRyw4CTsgeG1tRz0oMjIgMDMgMTMgMjMgMDQgMTQgMjQgMDUgLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0pCisgICAgICAgIG1vdmRxYSAgICB4bW1HLHhtbUEKKyAgICAgICAgcHNsbGRxICAgIHhtbUEsOCAgICAgICAgOyB4bW1BPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAwMCAxMCAyMCAwMSAxMSAyMSAwMiAxMikKKyAgICAgICAgcHNybGRxICAgIHhtbUcsOCAgICAgICAgOyB4bW1HPSgyMiAwMyAxMyAyMyAwNCAxNCAyNCAwNSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSkKIAotCXB1bnBja2hidyB4bW1BLHhtbUYJOyB4bW1BPSgwMCAwOCAxMCAxOCAyMCAyOCAwMSAwOSAxMSAxOSAyMSAyOSAwMiAwQSAxMiAxQSkKLQlwc2xsZHEgICAgeG1tRiw4CTsgeG1tRj0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gMTUgMjUgMDYgMTYgMjYgMDcgMTcgMjcpCisgICAgICAgIHB1bnBja2hidyB4bW1BLHhtbUYgICAgIDsgeG1tQT0oMDAgMDggMTAgMTggMjAgMjggMDEgMDkgMTEgMTkgMjEgMjkgMDIgMEEgMTIgMUEpCisgICAgICAgIHBzbGxkcSAgICB4bW1GLDggICAgICAgIDsgeG1tRj0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gMTUgMjUgMDYgMTYgMjYgMDcgMTcgMjcpCiAKLQlwdW5wY2tsYncgeG1tRyx4bW1CCTsgeG1tRz0oMjIgMkEgMDMgMEIgMTMgMUIgMjMgMkIgMDQgMEMgMTQgMUMgMjQgMkMgMDUgMEQpCi0JcHVucGNraGJ3IHhtbUYseG1tQgk7IHhtbUY9KDE1IDFEIDI1IDJEIDA2IDBFIDE2IDFFIDI2IDJFIDA3IDBGIDE3IDFGIDI3IDJGKQorICAgICAgICBwdW5wY2tsYncgeG1tRyx4bW1CICAgICA7IHhtbUc9KDIyIDJBIDAzIDBCIDEzIDFCIDIzIDJCIDA0IDBDIDE0IDFDIDI0IDJDIDA1IDBEKQorICAgICAgICBwdW5wY2toYncgeG1tRix4bW1CICAgICA7IHhtbUY9KDE1IDFEIDI1IDJEIDA2IDBFIDE2IDFFIDI2IDJFIDA3IDBGIDE3IDFGIDI3IDJGKQogCi0JbW92ZHFhICAgIHhtbUQseG1tQQotCXBzbGxkcSAgICB4bW1BLDgJOyB4bW1BPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAwMCAwOCAxMCAxOCAyMCAyOCAwMSAwOSkKLQlwc3JsZHEgICAgeG1tRCw4CTsgeG1tRD0oMTEgMTkgMjEgMjkgMDIgMEEgMTIgMUEgLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0pCisgICAgICAgIG1vdmRxYSAgICB4bW1ELHhtbUEKKyAgICAgICAgcHNsbGRxICAgIHhtbUEsOCAgICAgICAgOyB4bW1BPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAwMCAwOCAxMCAxOCAyMCAyOCAwMSAwOSkKKyAgICAgICAgcHNybGRxICAgIHhtbUQsOCAgICAgICAgOyB4bW1EPSgxMSAxOSAyMSAyOSAwMiAwQSAxMiAxQSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSkKIAotCXB1bnBja2hidyB4bW1BLHhtbUcJOyB4bW1BPSgwMCAwNCAwOCAwQyAxMCAxNCAxOCAxQyAyMCAyNCAyOCAyQyAwMSAwNSAwOSAwRCkKLQlwc2xsZHEgICAgeG1tRyw4CTsgeG1tRz0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gMjIgMkEgMDMgMEIgMTMgMUIgMjMgMkIpCisgICAgICAgIHB1bnBja2hidyB4bW1BLHhtbUcgICAgIDsgeG1tQT0oMDAgMDQgMDggMEMgMTAgMTQgMTggMUMgMjAgMjQgMjggMkMgMDEgMDUgMDkgMEQpCisgICAgICAgIHBzbGxkcSAgICB4bW1HLDggICAgICAgIDsgeG1tRz0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gMjIgMkEgMDMgMEIgMTMgMUIgMjMgMkIpCiAKLQlwdW5wY2tsYncgeG1tRCx4bW1GCTsgeG1tRD0oMTEgMTUgMTkgMUQgMjEgMjUgMjkgMkQgMDIgMDYgMEEgMEUgMTIgMTYgMUEgMUUpCi0JcHVucGNraGJ3IHhtbUcseG1tRgk7IHhtbUc9KDIyIDI2IDJBIDJFIDAzIDA3IDBCIDBGIDEzIDE3IDFCIDFGIDIzIDI3IDJCIDJGKQorICAgICAgICBwdW5wY2tsYncgeG1tRCx4bW1GICAgICA7IHhtbUQ9KDExIDE1IDE5IDFEIDIxIDI1IDI5IDJEIDAyIDA2IDBBIDBFIDEyIDE2IDFBIDFFKQorICAgICAgICBwdW5wY2toYncgeG1tRyx4bW1GICAgICA7IHhtbUc9KDIyIDI2IDJBIDJFIDAzIDA3IDBCIDBGIDEzIDE3IDFCIDFGIDIzIDI3IDJCIDJGKQogCi0JbW92ZHFhICAgIHhtbUUseG1tQQotCXBzbGxkcSAgICB4bW1BLDgJOyB4bW1BPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAwMCAwNCAwOCAwQyAxMCAxNCAxOCAxQykKLQlwc3JsZHEgICAgeG1tRSw4CTsgeG1tRT0oMjAgMjQgMjggMkMgMDEgMDUgMDkgMEQgLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0pCisgICAgICAgIG1vdmRxYSAgICB4bW1FLHhtbUEKKyAgICAgICAgcHNsbGRxICAgIHhtbUEsOCAgICAgICAgOyB4bW1BPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAwMCAwNCAwOCAwQyAxMCAxNCAxOCAxQykKKyAgICAgICAgcHNybGRxICAgIHhtbUUsOCAgICAgICAgOyB4bW1FPSgyMCAyNCAyOCAyQyAwMSAwNSAwOSAwRCAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSkKIAotCXB1bnBja2hidyB4bW1BLHhtbUQJOyB4bW1BPSgwMCAwMiAwNCAwNiAwOCAwQSAwQyAwRSAxMCAxMiAxNCAxNiAxOCAxQSAxQyAxRSkKLQlwc2xsZHEgICAgeG1tRCw4CTsgeG1tRD0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gMTEgMTUgMTkgMUQgMjEgMjUgMjkgMkQpCisgICAgICAgIHB1bnBja2hidyB4bW1BLHhtbUQgICAgIDsgeG1tQT0oMDAgMDIgMDQgMDYgMDggMEEgMEMgMEUgMTAgMTIgMTQgMTYgMTggMUEgMUMgMUUpCisgICAgICAgIHBzbGxkcSAgICB4bW1ELDggICAgICAgIDsgeG1tRD0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gMTEgMTUgMTkgMUQgMjEgMjUgMjkgMkQpCiAKLQlwdW5wY2tsYncgeG1tRSx4bW1HCTsgeG1tRT0oMjAgMjIgMjQgMjYgMjggMkEgMkMgMkUgMDEgMDMgMDUgMDcgMDkgMEIgMEQgMEYpCi0JcHVucGNraGJ3IHhtbUQseG1tRwk7IHhtbUQ9KDExIDEzIDE1IDE3IDE5IDFCIDFEIDFGIDIxIDIzIDI1IDI3IDI5IDJCIDJEIDJGKQorICAgICAgICBwdW5wY2tsYncgeG1tRSx4bW1HICAgICA7IHhtbUU9KDIwIDIyIDI0IDI2IDI4IDJBIDJDIDJFIDAxIDAzIDA1IDA3IDA5IDBCIDBEIDBGKQorICAgICAgICBwdW5wY2toYncgeG1tRCx4bW1HICAgICA7IHhtbUQ9KDExIDEzIDE1IDE3IDE5IDFCIDFEIDFGIDIxIDIzIDI1IDI3IDI5IDJCIDJEIDJGKQogCi0JcHhvciAgICAgIHhtbUgseG1tSAorICAgICAgICBweG9yICAgICAgeG1tSCx4bW1ICiAKLQltb3ZkcWEgICAgeG1tQyx4bW1BCi0JcHVucGNrbGJ3IHhtbUEseG1tSAk7IHhtbUE9KDAwIDAyIDA0IDA2IDA4IDBBIDBDIDBFKQotCXB1bnBja2hidyB4bW1DLHhtbUgJOyB4bW1DPSgxMCAxMiAxNCAxNiAxOCAxQSAxQyAxRSkKKyAgICAgICAgbW92ZHFhICAgIHhtbUMseG1tQQorICAgICAgICBwdW5wY2tsYncgeG1tQSx4bW1IICAgICA7IHhtbUE9KDAwIDAyIDA0IDA2IDA4IDBBIDBDIDBFKQorICAgICAgICBwdW5wY2toYncgeG1tQyx4bW1IICAgICA7IHhtbUM9KDEwIDEyIDE0IDE2IDE4IDFBIDFDIDFFKQogCi0JbW92ZHFhICAgIHhtbUIseG1tRQotCXB1bnBja2xidyB4bW1FLHhtbUgJOyB4bW1FPSgyMCAyMiAyNCAyNiAyOCAyQSAyQyAyRSkKLQlwdW5wY2toYncgeG1tQix4bW1ICTsgeG1tQj0oMDEgMDMgMDUgMDcgMDkgMEIgMEQgMEYpCisgICAgICAgIG1vdmRxYSAgICB4bW1CLHhtbUUKKyAgICAgICAgcHVucGNrbGJ3IHhtbUUseG1tSCAgICAgOyB4bW1FPSgyMCAyMiAyNCAyNiAyOCAyQSAyQyAyRSkKKyAgICAgICAgcHVucGNraGJ3IHhtbUIseG1tSCAgICAgOyB4bW1CPSgwMSAwMyAwNSAwNyAwOSAwQiAwRCAwRikKIAotCW1vdmRxYSAgICB4bW1GLHhtbUQKLQlwdW5wY2tsYncgeG1tRCx4bW1ICTsgeG1tRD0oMTEgMTMgMTUgMTcgMTkgMUIgMUQgMUYpCi0JcHVucGNraGJ3IHhtbUYseG1tSAk7IHhtbUY9KDIxIDIzIDI1IDI3IDI5IDJCIDJEIDJGKQorICAgICAgICBtb3ZkcWEgICAgeG1tRix4bW1ECisgICAgICAgIHB1bnBja2xidyB4bW1ELHhtbUggICAgIDsgeG1tRD0oMTEgMTMgMTUgMTcgMTkgMUIgMUQgMUYpCisgICAgICAgIHB1bnBja2hidyB4bW1GLHhtbUggICAgIDsgeG1tRj0oMjEgMjMgMjUgMjcgMjkgMkIgMkQgMkYpCiAKICVlbHNlIDsgUkdCX1BJWEVMU0laRSA9PSA0IDsgLS0tLS0tLS0tLS0KIAogLmNvbHVtbl9sZDE6Ci0JdGVzdAljbCwgU0laRU9GX1hNTVdPUkQvMTYKLQlqeglzaG9ydCAuY29sdW1uX2xkMgotCXN1YglyY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQvMTYKLQltb3ZkCXhtbUEsIFhNTV9EV09SRCBbcnNpK3JjeCpSR0JfUElYRUxTSVpFXQorICAgICAgICB0ZXN0ICAgIGNsLCBTSVpFT0ZfWE1NV09SRC8xNgorICAgICAgICBqeiAgICAgIHNob3J0IC5jb2x1bW5fbGQyCisgICAgICAgIHN1YiAgICAgcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzE2CisgICAgICAgIG1vdmQgICAgeG1tQSwgWE1NX0RXT1JEIFtyc2krcmN4KlJHQl9QSVhFTFNJWkVdCiAuY29sdW1uX2xkMjoKLQl0ZXN0CWNsLCBTSVpFT0ZfWE1NV09SRC84Ci0JanoJc2hvcnQgLmNvbHVtbl9sZDQKLQlzdWIJcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzgKLQltb3ZxCXhtbUUsIFhNTV9NTVdPUkQgW3JzaStyY3gqUkdCX1BJWEVMU0laRV0KLQlwc2xsZHEJeG1tQSwgU0laRU9GX01NV09SRAotCXBvcgl4bW1BLHhtbUUKKyAgICAgICAgdGVzdCAgICBjbCwgU0laRU9GX1hNTVdPUkQvOAorICAgICAgICBqeiAgICAgIHNob3J0IC5jb2x1bW5fbGQ0CisgICAgICAgIHN1YiAgICAgcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzgKKyAgICAgICAgbW92cSAgICB4bW1FLCBYTU1fTU1XT1JEIFtyc2krcmN4KlJHQl9QSVhFTFNJWkVdCisgICAgICAgIHBzbGxkcSAgeG1tQSwgU0laRU9GX01NV09SRAorICAgICAgICBwb3IgICAgIHhtbUEseG1tRQogLmNvbHVtbl9sZDQ6Ci0JdGVzdAljbCwgU0laRU9GX1hNTVdPUkQvNAotCWp6CXNob3J0IC5jb2x1bW5fbGQ4Ci0Jc3ViCXJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC80Ci0JbW92ZHFhCXhtbUUseG1tQQotCW1vdmRxdQl4bW1BLCBYTU1XT1JEIFtyc2krcmN4KlJHQl9QSVhFTFNJWkVdCisgICAgICAgIHRlc3QgICAgY2wsIFNJWkVPRl9YTU1XT1JELzQKKyAgICAgICAganogICAgICBzaG9ydCAuY29sdW1uX2xkOAorICAgICAgICBzdWIgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC80CisgICAgICAgIG1vdmRxYSAgeG1tRSx4bW1BCisgICAgICAgIG1vdmRxdSAgeG1tQSwgWE1NV09SRCBbcnNpK3JjeCpSR0JfUElYRUxTSVpFXQogLmNvbHVtbl9sZDg6Ci0JdGVzdAljbCwgU0laRU9GX1hNTVdPUkQvMgotCW1vdglyY3gsIFNJWkVPRl9YTU1XT1JECi0JanoJc2hvcnQgLnJnYl9ncmF5X2NudgotCW1vdmRxYQl4bW1GLHhtbUEKLQltb3ZkcWEJeG1tSCx4bW1FCi0JbW92ZHF1CXhtbUEsIFhNTVdPUkQgW3JzaSswKlNJWkVPRl9YTU1XT1JEXQotCW1vdmRxdQl4bW1FLCBYTU1XT1JEIFtyc2krMSpTSVpFT0ZfWE1NV09SRF0KLQlqbXAJc2hvcnQgLnJnYl9ncmF5X2NudgorICAgICAgICB0ZXN0ICAgIGNsLCBTSVpFT0ZfWE1NV09SRC8yCisgICAgICAgIG1vdiAgICAgcmN4LCBTSVpFT0ZfWE1NV09SRAorICAgICAgICBqeiAgICAgIHNob3J0IC5yZ2JfZ3JheV9jbnYKKyAgICAgICAgbW92ZHFhICB4bW1GLHhtbUEKKyAgICAgICAgbW92ZHFhICB4bW1ILHhtbUUKKyAgICAgICAgbW92ZHF1ICB4bW1BLCBYTU1XT1JEIFtyc2krMCpTSVpFT0ZfWE1NV09SRF0KKyAgICAgICAgbW92ZHF1ICB4bW1FLCBYTU1XT1JEIFtyc2krMSpTSVpFT0ZfWE1NV09SRF0KKyAgICAgICAgam1wICAgICBzaG9ydCAucmdiX2dyYXlfY252CiAKIC5jb2x1bW5sb29wOgotCW1vdmRxdQl4bW1BLCBYTU1XT1JEIFtyc2krMCpTSVpFT0ZfWE1NV09SRF0KLQltb3ZkcXUJeG1tRSwgWE1NV09SRCBbcnNpKzEqU0laRU9GX1hNTVdPUkRdCi0JbW92ZHF1CXhtbUYsIFhNTVdPUkQgW3JzaSsyKlNJWkVPRl9YTU1XT1JEXQotCW1vdmRxdQl4bW1ILCBYTU1XT1JEIFtyc2krMypTSVpFT0ZfWE1NV09SRF0KKyAgICAgICAgbW92ZHF1ICB4bW1BLCBYTU1XT1JEIFtyc2krMCpTSVpFT0ZfWE1NV09SRF0KKyAgICAgICAgbW92ZHF1ICB4bW1FLCBYTU1XT1JEIFtyc2krMSpTSVpFT0ZfWE1NV09SRF0KKyAgICAgICAgbW92ZHF1ICB4bW1GLCBYTU1XT1JEIFtyc2krMipTSVpFT0ZfWE1NV09SRF0KKyAgICAgICAgbW92ZHF1ICB4bW1ILCBYTU1XT1JEIFtyc2krMypTSVpFT0ZfWE1NV09SRF0KIAogLnJnYl9ncmF5X2NudjoKLQk7IHhtbUE9KDAwIDEwIDIwIDMwIDAxIDExIDIxIDMxIDAyIDEyIDIyIDMyIDAzIDEzIDIzIDMzKQotCTsgeG1tRT0oMDQgMTQgMjQgMzQgMDUgMTUgMjUgMzUgMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCi0JOyB4bW1GPSgwOCAxOCAyOCAzOCAwOSAxOSAyOSAzOSAwQSAxQSAyQSAzQSAwQiAxQiAyQiAzQikKLQk7IHhtbUg9KDBDIDFDIDJDIDNDIDBEIDFEIDJEIDNEIDBFIDFFIDJFIDNFIDBGIDFGIDJGIDNGKQorICAgICAgICA7IHhtbUE9KDAwIDEwIDIwIDMwIDAxIDExIDIxIDMxIDAyIDEyIDIyIDMyIDAzIDEzIDIzIDMzKQorICAgICAgICA7IHhtbUU9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1IDA2IDE2IDI2IDM2IDA3IDE3IDI3IDM3KQorICAgICAgICA7IHhtbUY9KDA4IDE4IDI4IDM4IDA5IDE5IDI5IDM5IDBBIDFBIDJBIDNBIDBCIDFCIDJCIDNCKQorICAgICAgICA7IHhtbUg9KDBDIDFDIDJDIDNDIDBEIDFEIDJEIDNEIDBFIDFFIDJFIDNFIDBGIDFGIDJGIDNGKQogCi0JbW92ZHFhICAgIHhtbUQseG1tQQotCXB1bnBja2xidyB4bW1BLHhtbUUJOyB4bW1BPSgwMCAwNCAxMCAxNCAyMCAyNCAzMCAzNCAwMSAwNSAxMSAxNSAyMSAyNSAzMSAzNSkKLQlwdW5wY2toYncgeG1tRCx4bW1FCTsgeG1tRD0oMDIgMDYgMTIgMTYgMjIgMjYgMzIgMzYgMDMgMDcgMTMgMTcgMjMgMjcgMzMgMzcpCisgICAgICAgIG1vdmRxYSAgICB4bW1ELHhtbUEKKyAgICAgICAgcHVucGNrbGJ3IHhtbUEseG1tRSAgICAgOyB4bW1BPSgwMCAwNCAxMCAxNCAyMCAyNCAzMCAzNCAwMSAwNSAxMSAxNSAyMSAyNSAzMSAzNSkKKyAgICAgICAgcHVucGNraGJ3IHhtbUQseG1tRSAgICAgOyB4bW1EPSgwMiAwNiAxMiAxNiAyMiAyNiAzMiAzNiAwMyAwNyAxMyAxNyAyMyAyNyAzMyAzNykKIAotCW1vdmRxYSAgICB4bW1DLHhtbUYKLQlwdW5wY2tsYncgeG1tRix4bW1ICTsgeG1tRj0oMDggMEMgMTggMUMgMjggMkMgMzggM0MgMDkgMEQgMTkgMUQgMjkgMkQgMzkgM0QpCi0JcHVucGNraGJ3IHhtbUMseG1tSAk7IHhtbUM9KDBBIDBFIDFBIDFFIDJBIDJFIDNBIDNFIDBCIDBGIDFCIDFGIDJCIDJGIDNCIDNGKQorICAgICAgICBtb3ZkcWEgICAgeG1tQyx4bW1GCisgICAgICAgIHB1bnBja2xidyB4bW1GLHhtbUggICAgIDsgeG1tRj0oMDggMEMgMTggMUMgMjggMkMgMzggM0MgMDkgMEQgMTkgMUQgMjkgMkQgMzkgM0QpCisgICAgICAgIHB1bnBja2hidyB4bW1DLHhtbUggICAgIDsgeG1tQz0oMEEgMEUgMUEgMUUgMkEgMkUgM0EgM0UgMEIgMEYgMUIgMUYgMkIgMkYgM0IgM0YpCiAKLQltb3ZkcWEgICAgeG1tQix4bW1BCi0JcHVucGNrbHdkIHhtbUEseG1tRgk7IHhtbUE9KDAwIDA0IDA4IDBDIDEwIDE0IDE4IDFDIDIwIDI0IDI4IDJDIDMwIDM0IDM4IDNDKQotCXB1bnBja2h3ZCB4bW1CLHhtbUYJOyB4bW1CPSgwMSAwNSAwOSAwRCAxMSAxNSAxOSAxRCAyMSAyNSAyOSAyRCAzMSAzNSAzOSAzRCkKKyAgICAgICAgbW92ZHFhICAgIHhtbUIseG1tQQorICAgICAgICBwdW5wY2tsd2QgeG1tQSx4bW1GICAgICA7IHhtbUE9KDAwIDA0IDA4IDBDIDEwIDE0IDE4IDFDIDIwIDI0IDI4IDJDIDMwIDM0IDM4IDNDKQorICAgICAgICBwdW5wY2tod2QgeG1tQix4bW1GICAgICA7IHhtbUI9KDAxIDA1IDA5IDBEIDExIDE1IDE5IDFEIDIxIDI1IDI5IDJEIDMxIDM1IDM5IDNEKQogCi0JbW92ZHFhICAgIHhtbUcseG1tRAotCXB1bnBja2x3ZCB4bW1ELHhtbUMJOyB4bW1EPSgwMiAwNiAwQSAwRSAxMiAxNiAxQSAxRSAyMiAyNiAyQSAyRSAzMiAzNiAzQSAzRSkKLQlwdW5wY2tod2QgeG1tRyx4bW1DCTsgeG1tRz0oMDMgMDcgMEIgMEYgMTMgMTcgMUIgMUYgMjMgMjcgMkIgMkYgMzMgMzcgM0IgM0YpCisgICAgICAgIG1vdmRxYSAgICB4bW1HLHhtbUQKKyAgICAgICAgcHVucGNrbHdkIHhtbUQseG1tQyAgICAgOyB4bW1EPSgwMiAwNiAwQSAwRSAxMiAxNiAxQSAxRSAyMiAyNiAyQSAyRSAzMiAzNiAzQSAzRSkKKyAgICAgICAgcHVucGNraHdkIHhtbUcseG1tQyAgICAgOyB4bW1HPSgwMyAwNyAwQiAwRiAxMyAxNyAxQiAxRiAyMyAyNyAyQiAyRiAzMyAzNyAzQiAzRikKIAotCW1vdmRxYSAgICB4bW1FLHhtbUEKLQlwdW5wY2tsYncgeG1tQSx4bW1ECTsgeG1tQT0oMDAgMDIgMDQgMDYgMDggMEEgMEMgMEUgMTAgMTIgMTQgMTYgMTggMUEgMUMgMUUpCi0JcHVucGNraGJ3IHhtbUUseG1tRAk7IHhtbUU9KDIwIDIyIDI0IDI2IDI4IDJBIDJDIDJFIDMwIDMyIDM0IDM2IDM4IDNBIDNDIDNFKQorICAgICAgICBtb3ZkcWEgICAgeG1tRSx4bW1BCisgICAgICAgIHB1bnBja2xidyB4bW1BLHhtbUQgICAgIDsgeG1tQT0oMDAgMDIgMDQgMDYgMDggMEEgMEMgMEUgMTAgMTIgMTQgMTYgMTggMUEgMUMgMUUpCisgICAgICAgIHB1bnBja2hidyB4bW1FLHhtbUQgICAgIDsgeG1tRT0oMjAgMjIgMjQgMjYgMjggMkEgMkMgMkUgMzAgMzIgMzQgMzYgMzggM0EgM0MgM0UpCiAKLQltb3ZkcWEgICAgeG1tSCx4bW1CCi0JcHVucGNrbGJ3IHhtbUIseG1tRwk7IHhtbUI9KDAxIDAzIDA1IDA3IDA5IDBCIDBEIDBGIDExIDEzIDE1IDE3IDE5IDFCIDFEIDFGKQotCXB1bnBja2hidyB4bW1ILHhtbUcJOyB4bW1IPSgyMSAyMyAyNSAyNyAyOSAyQiAyRCAyRiAzMSAzMyAzNSAzNyAzOSAzQiAzRCAzRikKKyAgICAgICAgbW92ZHFhICAgIHhtbUgseG1tQgorICAgICAgICBwdW5wY2tsYncgeG1tQix4bW1HICAgICA7IHhtbUI9KDAxIDAzIDA1IDA3IDA5IDBCIDBEIDBGIDExIDEzIDE1IDE3IDE5IDFCIDFEIDFGKQorICAgICAgICBwdW5wY2toYncgeG1tSCx4bW1HICAgICA7IHhtbUg9KDIxIDIzIDI1IDI3IDI5IDJCIDJEIDJGIDMxIDMzIDM1IDM3IDM5IDNCIDNEIDNGKQogCi0JcHhvciAgICAgIHhtbUYseG1tRgorICAgICAgICBweG9yICAgICAgeG1tRix4bW1GCiAKLQltb3ZkcWEgICAgeG1tQyx4bW1BCi0JcHVucGNrbGJ3IHhtbUEseG1tRgk7IHhtbUE9KDAwIDAyIDA0IDA2IDA4IDBBIDBDIDBFKQotCXB1bnBja2hidyB4bW1DLHhtbUYJOyB4bW1DPSgxMCAxMiAxNCAxNiAxOCAxQSAxQyAxRSkKKyAgICAgICAgbW92ZHFhICAgIHhtbUMseG1tQQorICAgICAgICBwdW5wY2tsYncgeG1tQSx4bW1GICAgICA7IHhtbUE9KDAwIDAyIDA0IDA2IDA4IDBBIDBDIDBFKQorICAgICAgICBwdW5wY2toYncgeG1tQyx4bW1GICAgICA7IHhtbUM9KDEwIDEyIDE0IDE2IDE4IDFBIDFDIDFFKQogCi0JbW92ZHFhICAgIHhtbUQseG1tQgotCXB1bnBja2xidyB4bW1CLHhtbUYJOyB4bW1CPSgwMSAwMyAwNSAwNyAwOSAwQiAwRCAwRikKLQlwdW5wY2toYncgeG1tRCx4bW1GCTsgeG1tRD0oMTEgMTMgMTUgMTcgMTkgMUIgMUQgMUYpCisgICAgICAgIG1vdmRxYSAgICB4bW1ELHhtbUIKKyAgICAgICAgcHVucGNrbGJ3IHhtbUIseG1tRiAgICAgOyB4bW1CPSgwMSAwMyAwNSAwNyAwOSAwQiAwRCAwRikKKyAgICAgICAgcHVucGNraGJ3IHhtbUQseG1tRiAgICAgOyB4bW1EPSgxMSAxMyAxNSAxNyAxOSAxQiAxRCAxRikKIAotCW1vdmRxYSAgICB4bW1HLHhtbUUKLQlwdW5wY2tsYncgeG1tRSx4bW1GCTsgeG1tRT0oMjAgMjIgMjQgMjYgMjggMkEgMkMgMkUpCi0JcHVucGNraGJ3IHhtbUcseG1tRgk7IHhtbUc9KDMwIDMyIDM0IDM2IDM4IDNBIDNDIDNFKQorICAgICAgICBtb3ZkcWEgICAgeG1tRyx4bW1FCisgICAgICAgIHB1bnBja2xidyB4bW1FLHhtbUYgICAgIDsgeG1tRT0oMjAgMjIgMjQgMjYgMjggMkEgMkMgMkUpCisgICAgICAgIHB1bnBja2hidyB4bW1HLHhtbUYgICAgIDsgeG1tRz0oMzAgMzIgMzQgMzYgMzggM0EgM0MgM0UpCiAKLQlwdW5wY2tsYncgeG1tRix4bW1ICi0JcHVucGNraGJ3IHhtbUgseG1tSAotCXBzcmx3ICAgICB4bW1GLEJZVEVfQklUCTsgeG1tRj0oMjEgMjMgMjUgMjcgMjkgMkIgMkQgMkYpCi0JcHNybHcgICAgIHhtbUgsQllURV9CSVQJOyB4bW1IPSgzMSAzMyAzNSAzNyAzOSAzQiAzRCAzRikKKyAgICAgICAgcHVucGNrbGJ3IHhtbUYseG1tSAorICAgICAgICBwdW5wY2toYncgeG1tSCx4bW1ICisgICAgICAgIHBzcmx3ICAgICB4bW1GLEJZVEVfQklUIDsgeG1tRj0oMjEgMjMgMjUgMjcgMjkgMkIgMkQgMkYpCisgICAgICAgIHBzcmx3ICAgICB4bW1ILEJZVEVfQklUIDsgeG1tSD0oMzEgMzMgMzUgMzcgMzkgM0IgM0QgM0YpCiAKICVlbmRpZiA7IFJHQl9QSVhFTFNJWkUgOyAtLS0tLS0tLS0tLS0tLS0KIAotCTsgeG1tMD1SKDAyNDY4QUNFKT1SRSwgeG1tMj1HKDAyNDY4QUNFKT1HRSwgeG1tND1CKDAyNDY4QUNFKT1CRQotCTsgeG1tMT1SKDEzNTc5QkRGKT1STywgeG1tMz1HKDEzNTc5QkRGKT1HTywgeG1tNT1CKDEzNTc5QkRGKT1CTworICAgICAgICA7IHhtbTA9UigwMjQ2OEFDRSk9UkUsIHhtbTI9RygwMjQ2OEFDRSk9R0UsIHhtbTQ9QigwMjQ2OEFDRSk9QkUKKyAgICAgICAgOyB4bW0xPVIoMTM1NzlCREYpPVJPLCB4bW0zPUcoMTM1NzlCREYpPUdPLCB4bW01PUIoMTM1NzlCREYpPUJPCiAKLQk7IChPcmlnaW5hbCkKLQk7IFkgID0gIDAuMjk5MDAgKiBSICsgMC41ODcwMCAqIEcgKyAwLjExNDAwICogQgotCTsKLQk7IChUaGlzIGltcGxlbWVudGF0aW9uKQotCTsgWSAgPSAgMC4yOTkwMCAqIFIgKyAwLjMzNzAwICogRyArIDAuMTE0MDAgKiBCICsgMC4yNTAwMCAqIEcKKyAgICAgICAgOyAoT3JpZ2luYWwpCisgICAgICAgIDsgWSAgPSAgMC4yOTkwMCAqIFIgKyAwLjU4NzAwICogRyArIDAuMTE0MDAgKiBCCisgICAgICAgIDsKKyAgICAgICAgOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKyAgICAgICAgOyBZICA9ICAwLjI5OTAwICogUiArIDAuMzM3MDAgKiBHICsgMC4xMTQwMCAqIEIgKyAwLjI1MDAwICogRwogCi0JbW92ZHFhICAgIHhtbTYseG1tMQotCXB1bnBja2x3ZCB4bW0xLHhtbTMKLQlwdW5wY2tod2QgeG1tNix4bW0zCi0JcG1hZGR3ZCAgIHhtbTEsW3JlbCBQV19GMDI5OV9GMDMzN10gOyB4bW0xPVJPTCpGSVgoMC4yOTkpK0dPTCpGSVgoMC4zMzcpCi0JcG1hZGR3ZCAgIHhtbTYsW3JlbCBQV19GMDI5OV9GMDMzN10gOyB4bW02PVJPSCpGSVgoMC4yOTkpK0dPSCpGSVgoMC4zMzcpCisgICAgICAgIG1vdmRxYSAgICB4bW02LHhtbTEKKyAgICAgICAgcHVucGNrbHdkIHhtbTEseG1tMworICAgICAgICBwdW5wY2tod2QgeG1tNix4bW0zCisgICAgICAgIHBtYWRkd2QgICB4bW0xLFtyZWwgUFdfRjAyOTlfRjAzMzddIDsgeG1tMT1ST0wqRklYKDAuMjk5KStHT0wqRklYKDAuMzM3KQorICAgICAgICBwbWFkZHdkICAgeG1tNixbcmVsIFBXX0YwMjk5X0YwMzM3XSA7IHhtbTY9Uk9IKkZJWCgwLjI5OSkrR09IKkZJWCgwLjMzNykKIAotCW1vdmRxYSAgICB4bW03LCB4bW02CTsgeG1tNz1ST0gqRklYKDAuMjk5KStHT0gqRklYKDAuMzM3KQorICAgICAgICBtb3ZkcWEgICAgeG1tNywgeG1tNiAgICA7IHhtbTc9Uk9IKkZJWCgwLjI5OSkrR09IKkZJWCgwLjMzNykKIAotCW1vdmRxYSAgICB4bW02LHhtbTAKLQlwdW5wY2tsd2QgeG1tMCx4bW0yCi0JcHVucGNraHdkIHhtbTYseG1tMgotCXBtYWRkd2QgICB4bW0wLFtyZWwgUFdfRjAyOTlfRjAzMzddIDsgeG1tMD1SRUwqRklYKDAuMjk5KStHRUwqRklYKDAuMzM3KQotCXBtYWRkd2QgICB4bW02LFtyZWwgUFdfRjAyOTlfRjAzMzddIDsgeG1tNj1SRUgqRklYKDAuMjk5KStHRUgqRklYKDAuMzM3KQorICAgICAgICBtb3ZkcWEgICAgeG1tNix4bW0wCisgICAgICAgIHB1bnBja2x3ZCB4bW0wLHhtbTIKKyAgICAgICAgcHVucGNraHdkIHhtbTYseG1tMgorICAgICAgICBwbWFkZHdkICAgeG1tMCxbcmVsIFBXX0YwMjk5X0YwMzM3XSA7IHhtbTA9UkVMKkZJWCgwLjI5OSkrR0VMKkZJWCgwLjMzNykKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTYsW3JlbCBQV19GMDI5OV9GMDMzN10gOyB4bW02PVJFSCpGSVgoMC4yOTkpK0dFSCpGSVgoMC4zMzcpCiAKLQltb3ZkcWEgICAgWE1NV09SRCBbd2soMCldLCB4bW0wCTsgd2soMCk9UkVMKkZJWCgwLjI5OSkrR0VMKkZJWCgwLjMzNykKLQltb3ZkcWEgICAgWE1NV09SRCBbd2soMSldLCB4bW02CTsgd2soMSk9UkVIKkZJWCgwLjI5OSkrR0VIKkZJWCgwLjMzNykKKyAgICAgICAgbW92ZHFhICAgIFhNTVdPUkQgW3drKDApXSwgeG1tMCA7IHdrKDApPVJFTCpGSVgoMC4yOTkpK0dFTCpGSVgoMC4zMzcpCisgICAgICAgIG1vdmRxYSAgICBYTU1XT1JEIFt3aygxKV0sIHhtbTYgOyB3aygxKT1SRUgqRklYKDAuMjk5KStHRUgqRklYKDAuMzM3KQogCi0JbW92ZHFhICAgIHhtbTAsIHhtbTUJOyB4bW0wPUJPCi0JbW92ZHFhICAgIHhtbTYsIHhtbTQJOyB4bW02PUJFCisgICAgICAgIG1vdmRxYSAgICB4bW0wLCB4bW01ICAgIDsgeG1tMD1CTworICAgICAgICBtb3ZkcWEgICAgeG1tNiwgeG1tNCAgICA7IHhtbTY9QkUKIAotCW1vdmRxYSAgICB4bW00LHhtbTAKLQlwdW5wY2tsd2QgeG1tMCx4bW0zCi0JcHVucGNraHdkIHhtbTQseG1tMwotCXBtYWRkd2QgICB4bW0wLFtyZWwgUFdfRjAxMTRfRjAyNTBdIDsgeG1tMD1CT0wqRklYKDAuMTE0KStHT0wqRklYKDAuMjUwKQotCXBtYWRkd2QgICB4bW00LFtyZWwgUFdfRjAxMTRfRjAyNTBdIDsgeG1tND1CT0gqRklYKDAuMTE0KStHT0gqRklYKDAuMjUwKQorICAgICAgICBtb3ZkcWEgICAgeG1tNCx4bW0wCisgICAgICAgIHB1bnBja2x3ZCB4bW0wLHhtbTMKKyAgICAgICAgcHVucGNraHdkIHhtbTQseG1tMworICAgICAgICBwbWFkZHdkICAgeG1tMCxbcmVsIFBXX0YwMTE0X0YwMjUwXSA7IHhtbTA9Qk9MKkZJWCgwLjExNCkrR09MKkZJWCgwLjI1MCkKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTQsW3JlbCBQV19GMDExNF9GMDI1MF0gOyB4bW00PUJPSCpGSVgoMC4xMTQpK0dPSCpGSVgoMC4yNTApCiAKLQltb3ZkcWEgICAgeG1tMyxbcmVsIFBEX09ORUhBTEZdCTsgeG1tMz1bUERfT05FSEFMRl0KKyAgICAgICAgbW92ZHFhICAgIHhtbTMsW3JlbCBQRF9PTkVIQUxGXSA7IHhtbTM9W1BEX09ORUhBTEZdCiAKLQlwYWRkZCAgICAgeG1tMCwgeG1tMQotCXBhZGRkICAgICB4bW00LCB4bW03Ci0JcGFkZGQgICAgIHhtbTAseG1tMwotCXBhZGRkICAgICB4bW00LHhtbTMKLQlwc3JsZCAgICAgeG1tMCxTQ0FMRUJJVFMJOyB4bW0wPVlPTAotCXBzcmxkICAgICB4bW00LFNDQUxFQklUUwk7IHhtbTQ9WU9ICi0JcGFja3NzZHcgIHhtbTAseG1tNAkJOyB4bW0wPVlPCisgICAgICAgIHBhZGRkICAgICB4bW0wLCB4bW0xCisgICAgICAgIHBhZGRkICAgICB4bW00LCB4bW03CisgICAgICAgIHBhZGRkICAgICB4bW0wLHhtbTMKKyAgICAgICAgcGFkZGQgICAgIHhtbTQseG1tMworICAgICAgICBwc3JsZCAgICAgeG1tMCxTQ0FMRUJJVFMgICAgICAgIDsgeG1tMD1ZT0wKKyAgICAgICAgcHNybGQgICAgIHhtbTQsU0NBTEVCSVRTICAgICAgICA7IHhtbTQ9WU9ICisgICAgICAgIHBhY2tzc2R3ICB4bW0wLHhtbTQgICAgICAgICAgICAgOyB4bW0wPVlPCiAKLQltb3ZkcWEgICAgeG1tNCx4bW02Ci0JcHVucGNrbHdkIHhtbTYseG1tMgotCXB1bnBja2h3ZCB4bW00LHhtbTIKLQlwbWFkZHdkICAgeG1tNixbcmVsIFBXX0YwMTE0X0YwMjUwXSA7IHhtbTY9QkVMKkZJWCgwLjExNCkrR0VMKkZJWCgwLjI1MCkKLQlwbWFkZHdkICAgeG1tNCxbcmVsIFBXX0YwMTE0X0YwMjUwXSA7IHhtbTQ9QkVIKkZJWCgwLjExNCkrR0VIKkZJWCgwLjI1MCkKKyAgICAgICAgbW92ZHFhICAgIHhtbTQseG1tNgorICAgICAgICBwdW5wY2tsd2QgeG1tNix4bW0yCisgICAgICAgIHB1bnBja2h3ZCB4bW00LHhtbTIKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTYsW3JlbCBQV19GMDExNF9GMDI1MF0gOyB4bW02PUJFTCpGSVgoMC4xMTQpK0dFTCpGSVgoMC4yNTApCisgICAgICAgIHBtYWRkd2QgICB4bW00LFtyZWwgUFdfRjAxMTRfRjAyNTBdIDsgeG1tND1CRUgqRklYKDAuMTE0KStHRUgqRklYKDAuMjUwKQogCi0JbW92ZHFhICAgIHhtbTIsW3JlbCBQRF9PTkVIQUxGXQk7IHhtbTI9W1BEX09ORUhBTEZdCisgICAgICAgIG1vdmRxYSAgICB4bW0yLFtyZWwgUERfT05FSEFMRl0gOyB4bW0yPVtQRF9PTkVIQUxGXQogCi0JcGFkZGQgICAgIHhtbTYsIFhNTVdPUkQgW3drKDApXQotCXBhZGRkICAgICB4bW00LCBYTU1XT1JEIFt3aygxKV0KLQlwYWRkZCAgICAgeG1tNix4bW0yCi0JcGFkZGQgICAgIHhtbTQseG1tMgotCXBzcmxkICAgICB4bW02LFNDQUxFQklUUwk7IHhtbTY9WUVMCi0JcHNybGQgICAgIHhtbTQsU0NBTEVCSVRTCTsgeG1tND1ZRUgKLQlwYWNrc3NkdyAgeG1tNix4bW00CQk7IHhtbTY9WUUKKyAgICAgICAgcGFkZGQgICAgIHhtbTYsIFhNTVdPUkQgW3drKDApXQorICAgICAgICBwYWRkZCAgICAgeG1tNCwgWE1NV09SRCBbd2soMSldCisgICAgICAgIHBhZGRkICAgICB4bW02LHhtbTIKKyAgICAgICAgcGFkZGQgICAgIHhtbTQseG1tMgorICAgICAgICBwc3JsZCAgICAgeG1tNixTQ0FMRUJJVFMgICAgICAgIDsgeG1tNj1ZRUwKKyAgICAgICAgcHNybGQgICAgIHhtbTQsU0NBTEVCSVRTICAgICAgICA7IHhtbTQ9WUVICisgICAgICAgIHBhY2tzc2R3ICB4bW02LHhtbTQgICAgICAgICAgICAgOyB4bW02PVlFCiAKLQlwc2xsdyAgICAgeG1tMCxCWVRFX0JJVAotCXBvciAgICAgICB4bW02LHhtbTAJCTsgeG1tNj1ZCi0JbW92ZHFhICAgIFhNTVdPUkQgW3JkaV0sIHhtbTYJOyBTYXZlIFkKKyAgICAgICAgcHNsbHcgICAgIHhtbTAsQllURV9CSVQKKyAgICAgICAgcG9yICAgICAgIHhtbTYseG1tMCAgICAgICAgICAgICA7IHhtbTY9WQorICAgICAgICBtb3ZkcWEgICAgWE1NV09SRCBbcmRpXSwgeG1tNiAgIDsgU2F2ZSBZCiAKLQlzdWIJcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JECi0JYWRkCXJzaSwgYnl0ZSBSR0JfUElYRUxTSVpFKlNJWkVPRl9YTU1XT1JECTsgaW5wdHIKLQlhZGQJcmRpLCBieXRlIFNJWkVPRl9YTU1XT1JECQk7IG91dHB0cjAKLQljbXAJcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JECi0JamFlCW5lYXIgLmNvbHVtbmxvb3AKLQl0ZXN0CXJjeCxyY3gKLQlqbnoJbmVhciAuY29sdW1uX2xkMQorICAgICAgICBzdWIgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorICAgICAgICBhZGQgICAgIHJzaSwgYnl0ZSBSR0JfUElYRUxTSVpFKlNJWkVPRl9YTU1XT1JEICA7IGlucHRyCisgICAgICAgIGFkZCAgICAgcmRpLCBieXRlIFNJWkVPRl9YTU1XT1JEICAgICAgICAgICAgICAgIDsgb3V0cHRyMAorICAgICAgICBjbXAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorICAgICAgICBqYWUgICAgIG5lYXIgLmNvbHVtbmxvb3AKKyAgICAgICAgdGVzdCAgICByY3gscmN4CisgICAgICAgIGpueiAgICAgbmVhciAuY29sdW1uX2xkMQogCi0JcG9wCXJjeAkJCTsgY29sCi0JcG9wCXJzaQotCXBvcAlyZGkKKyAgICAgICAgcG9wICAgICByY3ggICAgICAgICAgICAgICAgICAgICA7IGNvbAorICAgICAgICBwb3AgICAgIHJzaQorICAgICAgICBwb3AgICAgIHJkaQogCi0JYWRkCXJzaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cJOyBpbnB1dF9idWYKLQlhZGQJcmRpLCBieXRlIFNJWkVPRl9KU0FNUFJPVwotCWRlYwlyYXgJCQkJOyBudW1fcm93cwotCWpnCW5lYXIgLnJvd2xvb3AKKyAgICAgICAgYWRkICAgICByc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XICAgICAgIDsgaW5wdXRfYnVmCisgICAgICAgIGFkZCAgICAgcmRpLCBieXRlIFNJWkVPRl9KU0FNUFJPVworICAgICAgICBkZWMgICAgIHJheCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBudW1fcm93cworICAgICAgICBqZyAgICAgIG5lYXIgLnJvd2xvb3AKIAogLnJldHVybjoKLQlwb3AJcmJ4Ci0JdW5jb2xsZWN0X2FyZ3MKLQltb3YJcnNwLHJicAkJOyByc3AgPC0gYWxpZ25lZCByYnAKLQlwb3AJcnNwCQk7IHJzcCA8LSBvcmlnaW5hbCByYnAKLQlwb3AJcmJwCi0JcmV0CisgICAgICAgIHBvcCAgICAgcmJ4CisgICAgICAgIHVuY29sbGVjdF9hcmdzCisgICAgICAgIG1vdiAgICAgcnNwLHJicCAgICAgICAgIDsgcnNwIDwtIGFsaWduZWQgcmJwCisgICAgICAgIHBvcCAgICAgcnNwICAgICAgICAgICAgIDsgcnNwIDwtIG9yaWdpbmFsIHJicAorICAgICAgICBwb3AgICAgIHJicAorICAgICAgICByZXQKIAogOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKIDsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KLQlhbGlnbgkxNgorICAgICAgICBhbGlnbiAgIDE2CmRpZmYgLS1naXQgYS9zaW1kL2pjZ3J5c3MyLmFzbSBiL3NpbWQvamNncnlzczIuYXNtCmluZGV4IGMyOTQyODcuLmI1MTI1YzEgMTAwNjQ0Ci0tLSBhL3NpbWQvamNncnlzczIuYXNtCisrKyBiL3NpbWQvamNncnlzczIuYXNtCkBAIC0yNiwzNTggKzI2LDM1OCBAQAogOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKTsKIDsKIAotJWRlZmluZSBpbWdfd2lkdGgoYikJKGIpKzgJCQk7IEpESU1FTlNJT04gaW1nX3dpZHRoCi0lZGVmaW5lIGlucHV0X2J1ZihiKQkoYikrMTIJCTsgSlNBTVBBUlJBWSBpbnB1dF9idWYKLSVkZWZpbmUgb3V0cHV0X2J1ZihiKQkoYikrMTYJCTsgSlNBTVBJTUFHRSBvdXRwdXRfYnVmCi0lZGVmaW5lIG91dHB1dF9yb3coYikJKGIpKzIwCQk7IEpESU1FTlNJT04gb3V0cHV0X3JvdwotJWRlZmluZSBudW1fcm93cyhiKQkoYikrMjQJCTsgaW50IG51bV9yb3dzCislZGVmaW5lIGltZ193aWR0aChiKSAgICAoYikrOCAgICAgICAgICAgOyBKRElNRU5TSU9OIGltZ193aWR0aAorJWRlZmluZSBpbnB1dF9idWYoYikgICAgKGIpKzEyICAgICAgICAgIDsgSlNBTVBBUlJBWSBpbnB1dF9idWYKKyVkZWZpbmUgb3V0cHV0X2J1ZihiKSAgIChiKSsxNiAgICAgICAgICA7IEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZgorJWRlZmluZSBvdXRwdXRfcm93KGIpICAgKGIpKzIwICAgICAgICAgIDsgSkRJTUVOU0lPTiBvdXRwdXRfcm93CislZGVmaW5lIG51bV9yb3dzKGIpICAgICAoYikrMjQgICAgICAgICAgOyBpbnQgbnVtX3Jvd3MKIAotJWRlZmluZSBvcmlnaW5hbF9lYnAJZWJwKzAKLSVkZWZpbmUgd2soaSkJCWVicC0oV0tfTlVNLShpKSkqU0laRU9GX1hNTVdPUkQJOyB4bW13b3JkIHdrW1dLX05VTV0KLSVkZWZpbmUgV0tfTlVNCQkyCi0lZGVmaW5lIGdvdHB0cgkJd2soMCktU0laRU9GX1BPSU5URVIJOyB2b2lkICogZ290cHRyCislZGVmaW5lIG9yaWdpbmFsX2VicCAgICBlYnArMAorJWRlZmluZSB3ayhpKSAgICAgICAgICAgZWJwLShXS19OVU0tKGkpKSpTSVpFT0ZfWE1NV09SRCA7IHhtbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0gICAgICAgICAgMgorJWRlZmluZSBnb3RwdHIgICAgICAgICAgd2soMCktU0laRU9GX1BPSU5URVIgICAgOyB2b2lkICogZ290cHRyCiAKLQlhbGlnbgkxNgorICAgICAgICBhbGlnbiAgIDE2CiAKLQlnbG9iYWwJRVhUTihqc2ltZF9yZ2JfZ3JheV9jb252ZXJ0X3NzZTIpCisgICAgICAgIGdsb2JhbCAgRVhUTihqc2ltZF9yZ2JfZ3JheV9jb252ZXJ0X3NzZTIpCiAKIEVYVE4oanNpbWRfcmdiX2dyYXlfY29udmVydF9zc2UyKToKLQlwdXNoCWVicAotCW1vdgllYXgsZXNwCQkJCTsgZWF4ID0gb3JpZ2luYWwgZWJwCi0Jc3ViCWVzcCwgYnl0ZSA0Ci0JYW5kCWVzcCwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKQk7IGFsaWduIHRvIDEyOCBiaXRzCi0JbW92CVtlc3BdLGVheAotCW1vdgllYnAsZXNwCQkJCTsgZWJwID0gYWxpZ25lZCBlYnAKLQlsZWEJZXNwLCBbd2soMCldCi0JcHVzaHBpYwllYXgJCTsgbWFrZSBhIHJvb20gZm9yIEdPVCBhZGRyZXNzCi0JcHVzaAllYngKLTsJcHVzaAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi07CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotCXB1c2gJZXNpCi0JcHVzaAllZGkKKyAgICAgICAgcHVzaCAgICBlYnAKKyAgICAgICAgbW92ICAgICBlYXgsZXNwICAgICAgICAgICAgICAgICAgICAgICAgIDsgZWF4ID0gb3JpZ2luYWwgZWJwCisgICAgICAgIHN1YiAgICAgZXNwLCBieXRlIDQKKyAgICAgICAgYW5kICAgICBlc3AsIGJ5dGUgKC1TSVpFT0ZfWE1NV09SRCkgICAgIDsgYWxpZ24gdG8gMTI4IGJpdHMKKyAgICAgICAgbW92ICAgICBbZXNwXSxlYXgKKyAgICAgICAgbW92ICAgICBlYnAsZXNwICAgICAgICAgICAgICAgICAgICAgICAgIDsgZWJwID0gYWxpZ25lZCBlYnAKKyAgICAgICAgbGVhICAgICBlc3AsIFt3aygwKV0KKyAgICAgICAgcHVzaHBpYyBlYXggICAgICAgICAgICAgOyBtYWtlIGEgcm9vbSBmb3IgR09UIGFkZHJlc3MKKyAgICAgICAgcHVzaCAgICBlYngKKzsgICAgICAgcHVzaCAgICBlY3ggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICAgICAgcHVzaCAgICBlZHggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICAgICAgcHVzaCAgICBlc2kKKyAgICAgICAgcHVzaCAgICBlZGkKIAotCWdldF9HT1QJZWJ4CQkJOyBnZXQgR09UIGFkZHJlc3MKLQltb3ZwaWMJUE9JTlRFUiBbZ290cHRyXSwgZWJ4CTsgc2F2ZSBHT1QgYWRkcmVzcworICAgICAgICBnZXRfR09UIGVieCAgICAgICAgICAgICAgICAgICAgIDsgZ2V0IEdPVCBhZGRyZXNzCisgICAgICAgIG1vdnBpYyAgUE9JTlRFUiBbZ290cHRyXSwgZWJ4ICAgOyBzYXZlIEdPVCBhZGRyZXNzCiAKLQltb3YJZWN4LCBKRElNRU5TSU9OIFtpbWdfd2lkdGgoZWF4KV0KLQl0ZXN0CWVjeCxlY3gKLQlqegluZWFyIC5yZXR1cm4KKyAgICAgICAgbW92ICAgICBlY3gsIEpESU1FTlNJT04gW2ltZ193aWR0aChlYXgpXQorICAgICAgICB0ZXN0ICAgIGVjeCxlY3gKKyAgICAgICAganogICAgICBuZWFyIC5yZXR1cm4KIAotCXB1c2gJZWN4CisgICAgICAgIHB1c2ggICAgZWN4CiAKLQltb3YJZXNpLCBKU0FNUElNQUdFIFtvdXRwdXRfYnVmKGVheCldCi0JbW92CWVjeCwgSkRJTUVOU0lPTiBbb3V0cHV0X3JvdyhlYXgpXQotCW1vdgllZGksIEpTQU1QQVJSQVkgW2VzaSswKlNJWkVPRl9KU0FNUEFSUkFZXQotCWxlYQllZGksIFtlZGkrZWN4KlNJWkVPRl9KU0FNUFJPV10KKyAgICAgICAgbW92ICAgICBlc2ksIEpTQU1QSU1BR0UgW291dHB1dF9idWYoZWF4KV0KKyAgICAgICAgbW92ICAgICBlY3gsIEpESU1FTlNJT04gW291dHB1dF9yb3coZWF4KV0KKyAgICAgICAgbW92ICAgICBlZGksIEpTQU1QQVJSQVkgW2VzaSswKlNJWkVPRl9KU0FNUEFSUkFZXQorICAgICAgICBsZWEgICAgIGVkaSwgW2VkaStlY3gqU0laRU9GX0pTQU1QUk9XXQogCi0JcG9wCWVjeAorICAgICAgICBwb3AgICAgIGVjeAogCi0JbW92CWVzaSwgSlNBTVBBUlJBWSBbaW5wdXRfYnVmKGVheCldCi0JbW92CWVheCwgSU5UIFtudW1fcm93cyhlYXgpXQotCXRlc3QJZWF4LGVheAotCWpsZQluZWFyIC5yZXR1cm4KLQlhbGlnbngJMTYsNworICAgICAgICBtb3YgICAgIGVzaSwgSlNBTVBBUlJBWSBbaW5wdXRfYnVmKGVheCldCisgICAgICAgIG1vdiAgICAgZWF4LCBJTlQgW251bV9yb3dzKGVheCldCisgICAgICAgIHRlc3QgICAgZWF4LGVheAorICAgICAgICBqbGUgICAgIG5lYXIgLnJldHVybgorICAgICAgICBhbGlnbnggIDE2LDcKIC5yb3dsb29wOgotCXB1c2hwaWMJZWF4Ci0JcHVzaAllZGkKLQlwdXNoCWVzaQotCXB1c2gJZWN4CQkJOyBjb2wKKyAgICAgICAgcHVzaHBpYyBlYXgKKyAgICAgICAgcHVzaCAgICBlZGkKKyAgICAgICAgcHVzaCAgICBlc2kKKyAgICAgICAgcHVzaCAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IGNvbAogCi0JbW92CWVzaSwgSlNBTVBST1cgW2VzaV0JOyBpbnB0cgotCW1vdgllZGksIEpTQU1QUk9XIFtlZGldCTsgb3V0cHRyMAotCW1vdnBpYwllYXgsIFBPSU5URVIgW2dvdHB0cl0JOyBsb2FkIEdPVCBhZGRyZXNzIChlYXgpCisgICAgICAgIG1vdiAgICAgZXNpLCBKU0FNUFJPVyBbZXNpXSAgICAgOyBpbnB0cgorICAgICAgICBtb3YgICAgIGVkaSwgSlNBTVBST1cgW2VkaV0gICAgIDsgb3V0cHRyMAorICAgICAgICBtb3ZwaWMgIGVheCwgUE9JTlRFUiBbZ290cHRyXSAgIDsgbG9hZCBHT1QgYWRkcmVzcyAoZWF4KQogCi0JY21wCWVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAotCWphZQluZWFyIC5jb2x1bW5sb29wCi0JYWxpZ254CTE2LDcKKyAgICAgICAgY21wICAgICBlY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKyAgICAgICAgamFlICAgICBuZWFyIC5jb2x1bW5sb29wCisgICAgICAgIGFsaWdueCAgMTYsNwogCiAlaWYgUkdCX1BJWEVMU0laRSA9PSAzIDsgLS0tLS0tLS0tLS0tLS0tCiAKIC5jb2x1bW5fbGQxOgotCXB1c2gJZWF4Ci0JcHVzaAllZHgKLQlsZWEJZWN4LFtlY3grZWN4KjJdCQk7IGltdWwgZWN4LFJHQl9QSVhFTFNJWkUKLQl0ZXN0CWNsLCBTSVpFT0ZfQllURQotCWp6CXNob3J0IC5jb2x1bW5fbGQyCi0Jc3ViCWVjeCwgYnl0ZSBTSVpFT0ZfQllURQotCW1vdnp4CWVheCwgQllURSBbZXNpK2VjeF0KKyAgICAgICAgcHVzaCAgICBlYXgKKyAgICAgICAgcHVzaCAgICBlZHgKKyAgICAgICAgbGVhICAgICBlY3gsW2VjeCtlY3gqMl0gICAgICAgICA7IGltdWwgZWN4LFJHQl9QSVhFTFNJWkUKKyAgICAgICAgdGVzdCAgICBjbCwgU0laRU9GX0JZVEUKKyAgICAgICAganogICAgICBzaG9ydCAuY29sdW1uX2xkMgorICAgICAgICBzdWIgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfQllURQorICAgICAgICBtb3Z6eCAgIGVheCwgQllURSBbZXNpK2VjeF0KIC5jb2x1bW5fbGQyOgotCXRlc3QJY2wsIFNJWkVPRl9XT1JECi0JanoJc2hvcnQgLmNvbHVtbl9sZDQKLQlzdWIJZWN4LCBieXRlIFNJWkVPRl9XT1JECi0JbW92engJZWR4LCBXT1JEIFtlc2krZWN4XQotCXNobAllYXgsIFdPUkRfQklUCi0Jb3IJZWF4LGVkeAorICAgICAgICB0ZXN0ICAgIGNsLCBTSVpFT0ZfV09SRAorICAgICAgICBqeiAgICAgIHNob3J0IC5jb2x1bW5fbGQ0CisgICAgICAgIHN1YiAgICAgZWN4LCBieXRlIFNJWkVPRl9XT1JECisgICAgICAgIG1vdnp4ICAgZWR4LCBXT1JEIFtlc2krZWN4XQorICAgICAgICBzaGwgICAgIGVheCwgV09SRF9CSVQKKyAgICAgICAgb3IgICAgICBlYXgsZWR4CiAuY29sdW1uX2xkNDoKLQltb3ZkCXhtbUEsZWF4Ci0JcG9wCWVkeAotCXBvcAllYXgKLQl0ZXN0CWNsLCBTSVpFT0ZfRFdPUkQKLQlqeglzaG9ydCAuY29sdW1uX2xkOAotCXN1YgllY3gsIGJ5dGUgU0laRU9GX0RXT1JECi0JbW92ZAl4bW1GLCBYTU1fRFdPUkQgW2VzaStlY3hdCi0JcHNsbGRxCXhtbUEsIFNJWkVPRl9EV09SRAotCXBvcgl4bW1BLHhtbUYKKyAgICAgICAgbW92ZCAgICB4bW1BLGVheAorICAgICAgICBwb3AgICAgIGVkeAorICAgICAgICBwb3AgICAgIGVheAorICAgICAgICB0ZXN0ICAgIGNsLCBTSVpFT0ZfRFdPUkQKKyAgICAgICAganogICAgICBzaG9ydCAuY29sdW1uX2xkOAorICAgICAgICBzdWIgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfRFdPUkQKKyAgICAgICAgbW92ZCAgICB4bW1GLCBYTU1fRFdPUkQgW2VzaStlY3hdCisgICAgICAgIHBzbGxkcSAgeG1tQSwgU0laRU9GX0RXT1JECisgICAgICAgIHBvciAgICAgeG1tQSx4bW1GCiAuY29sdW1uX2xkODoKLQl0ZXN0CWNsLCBTSVpFT0ZfTU1XT1JECi0JanoJc2hvcnQgLmNvbHVtbl9sZDE2Ci0Jc3ViCWVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECi0JbW92cQl4bW1CLCBYTU1fTU1XT1JEIFtlc2krZWN4XQotCXBzbGxkcQl4bW1BLCBTSVpFT0ZfTU1XT1JECi0JcG9yCXhtbUEseG1tQgorICAgICAgICB0ZXN0ICAgIGNsLCBTSVpFT0ZfTU1XT1JECisgICAgICAgIGp6ICAgICAgc2hvcnQgLmNvbHVtbl9sZDE2CisgICAgICAgIHN1YiAgICAgZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQKKyAgICAgICAgbW92cSAgICB4bW1CLCBYTU1fTU1XT1JEIFtlc2krZWN4XQorICAgICAgICBwc2xsZHEgIHhtbUEsIFNJWkVPRl9NTVdPUkQKKyAgICAgICAgcG9yICAgICB4bW1BLHhtbUIKIC5jb2x1bW5fbGQxNjoKLQl0ZXN0CWNsLCBTSVpFT0ZfWE1NV09SRAotCWp6CXNob3J0IC5jb2x1bW5fbGQzMgotCW1vdmRxYQl4bW1GLHhtbUEKLQltb3ZkcXUJeG1tQSwgWE1NV09SRCBbZXNpKzAqU0laRU9GX1hNTVdPUkRdCi0JbW92CWVjeCwgU0laRU9GX1hNTVdPUkQKLQlqbXAJc2hvcnQgLnJnYl9ncmF5X2NudgorICAgICAgICB0ZXN0ICAgIGNsLCBTSVpFT0ZfWE1NV09SRAorICAgICAgICBqeiAgICAgIHNob3J0IC5jb2x1bW5fbGQzMgorICAgICAgICBtb3ZkcWEgIHhtbUYseG1tQQorICAgICAgICBtb3ZkcXUgIHhtbUEsIFhNTVdPUkQgW2VzaSswKlNJWkVPRl9YTU1XT1JEXQorICAgICAgICBtb3YgICAgIGVjeCwgU0laRU9GX1hNTVdPUkQKKyAgICAgICAgam1wICAgICBzaG9ydCAucmdiX2dyYXlfY252CiAuY29sdW1uX2xkMzI6Ci0JdGVzdAljbCwgMipTSVpFT0ZfWE1NV09SRAotCW1vdgllY3gsIFNJWkVPRl9YTU1XT1JECi0JanoJc2hvcnQgLnJnYl9ncmF5X2NudgotCW1vdmRxYQl4bW1CLHhtbUEKLQltb3ZkcXUJeG1tQSwgWE1NV09SRCBbZXNpKzAqU0laRU9GX1hNTVdPUkRdCi0JbW92ZHF1CXhtbUYsIFhNTVdPUkQgW2VzaSsxKlNJWkVPRl9YTU1XT1JEXQotCWptcAlzaG9ydCAucmdiX2dyYXlfY252Ci0JYWxpZ254CTE2LDcKKyAgICAgICAgdGVzdCAgICBjbCwgMipTSVpFT0ZfWE1NV09SRAorICAgICAgICBtb3YgICAgIGVjeCwgU0laRU9GX1hNTVdPUkQKKyAgICAgICAganogICAgICBzaG9ydCAucmdiX2dyYXlfY252CisgICAgICAgIG1vdmRxYSAgeG1tQix4bW1BCisgICAgICAgIG1vdmRxdSAgeG1tQSwgWE1NV09SRCBbZXNpKzAqU0laRU9GX1hNTVdPUkRdCisgICAgICAgIG1vdmRxdSAgeG1tRiwgWE1NV09SRCBbZXNpKzEqU0laRU9GX1hNTVdPUkRdCisgICAgICAgIGptcCAgICAgc2hvcnQgLnJnYl9ncmF5X2NudgorICAgICAgICBhbGlnbnggIDE2LDcKIAogLmNvbHVtbmxvb3A6Ci0JbW92ZHF1CXhtbUEsIFhNTVdPUkQgW2VzaSswKlNJWkVPRl9YTU1XT1JEXQotCW1vdmRxdQl4bW1GLCBYTU1XT1JEIFtlc2krMSpTSVpFT0ZfWE1NV09SRF0KLQltb3ZkcXUJeG1tQiwgWE1NV09SRCBbZXNpKzIqU0laRU9GX1hNTVdPUkRdCisgICAgICAgIG1vdmRxdSAgeG1tQSwgWE1NV09SRCBbZXNpKzAqU0laRU9GX1hNTVdPUkRdCisgICAgICAgIG1vdmRxdSAgeG1tRiwgWE1NV09SRCBbZXNpKzEqU0laRU9GX1hNTVdPUkRdCisgICAgICAgIG1vdmRxdSAgeG1tQiwgWE1NV09SRCBbZXNpKzIqU0laRU9GX1hNTVdPUkRdCiAKIC5yZ2JfZ3JheV9jbnY6Ci0JOyB4bW1BPSgwMCAxMCAyMCAwMSAxMSAyMSAwMiAxMiAyMiAwMyAxMyAyMyAwNCAxNCAyNCAwNSkKLQk7IHhtbUY9KDE1IDI1IDA2IDE2IDI2IDA3IDE3IDI3IDA4IDE4IDI4IDA5IDE5IDI5IDBBIDFBKQotCTsgeG1tQj0oMkEgMEIgMUIgMkIgMEMgMUMgMkMgMEQgMUQgMkQgMEUgMUUgMkUgMEYgMUYgMkYpCisgICAgICAgIDsgeG1tQT0oMDAgMTAgMjAgMDEgMTEgMjEgMDIgMTIgMjIgMDMgMTMgMjMgMDQgMTQgMjQgMDUpCisgICAgICAgIDsgeG1tRj0oMTUgMjUgMDYgMTYgMjYgMDcgMTcgMjcgMDggMTggMjggMDkgMTkgMjkgMEEgMUEpCisgICAgICAgIDsgeG1tQj0oMkEgMEIgMUIgMkIgMEMgMUMgMkMgMEQgMUQgMkQgMEUgMUUgMkUgMEYgMUYgMkYpCiAKLQltb3ZkcWEgICAgeG1tRyx4bW1BCi0JcHNsbGRxICAgIHhtbUEsOAk7IHhtbUE9KC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIDAwIDEwIDIwIDAxIDExIDIxIDAyIDEyKQotCXBzcmxkcSAgICB4bW1HLDgJOyB4bW1HPSgyMiAwMyAxMyAyMyAwNCAxNCAyNCAwNSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSkKKyAgICAgICAgbW92ZHFhICAgIHhtbUcseG1tQQorICAgICAgICBwc2xsZHEgICAgeG1tQSw4ICAgICAgICA7IHhtbUE9KC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIDAwIDEwIDIwIDAxIDExIDIxIDAyIDEyKQorICAgICAgICBwc3JsZHEgICAgeG1tRyw4ICAgICAgICA7IHhtbUc9KDIyIDAzIDEzIDIzIDA0IDE0IDI0IDA1IC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tKQogCi0JcHVucGNraGJ3IHhtbUEseG1tRgk7IHhtbUE9KDAwIDA4IDEwIDE4IDIwIDI4IDAxIDA5IDExIDE5IDIxIDI5IDAyIDBBIDEyIDFBKQotCXBzbGxkcSAgICB4bW1GLDgJOyB4bW1GPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAxNSAyNSAwNiAxNiAyNiAwNyAxNyAyNykKKyAgICAgICAgcHVucGNraGJ3IHhtbUEseG1tRiAgICAgOyB4bW1BPSgwMCAwOCAxMCAxOCAyMCAyOCAwMSAwOSAxMSAxOSAyMSAyOSAwMiAwQSAxMiAxQSkKKyAgICAgICAgcHNsbGRxICAgIHhtbUYsOCAgICAgICAgOyB4bW1GPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAxNSAyNSAwNiAxNiAyNiAwNyAxNyAyNykKIAotCXB1bnBja2xidyB4bW1HLHhtbUIJOyB4bW1HPSgyMiAyQSAwMyAwQiAxMyAxQiAyMyAyQiAwNCAwQyAxNCAxQyAyNCAyQyAwNSAwRCkKLQlwdW5wY2toYncgeG1tRix4bW1CCTsgeG1tRj0oMTUgMUQgMjUgMkQgMDYgMEUgMTYgMUUgMjYgMkUgMDcgMEYgMTcgMUYgMjcgMkYpCisgICAgICAgIHB1bnBja2xidyB4bW1HLHhtbUIgICAgIDsgeG1tRz0oMjIgMkEgMDMgMEIgMTMgMUIgMjMgMkIgMDQgMEMgMTQgMUMgMjQgMkMgMDUgMEQpCisgICAgICAgIHB1bnBja2hidyB4bW1GLHhtbUIgICAgIDsgeG1tRj0oMTUgMUQgMjUgMkQgMDYgMEUgMTYgMUUgMjYgMkUgMDcgMEYgMTcgMUYgMjcgMkYpCiAKLQltb3ZkcWEgICAgeG1tRCx4bW1BCi0JcHNsbGRxICAgIHhtbUEsOAk7IHhtbUE9KC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIDAwIDA4IDEwIDE4IDIwIDI4IDAxIDA5KQotCXBzcmxkcSAgICB4bW1ELDgJOyB4bW1EPSgxMSAxOSAyMSAyOSAwMiAwQSAxMiAxQSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSkKKyAgICAgICAgbW92ZHFhICAgIHhtbUQseG1tQQorICAgICAgICBwc2xsZHEgICAgeG1tQSw4ICAgICAgICA7IHhtbUE9KC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIDAwIDA4IDEwIDE4IDIwIDI4IDAxIDA5KQorICAgICAgICBwc3JsZHEgICAgeG1tRCw4ICAgICAgICA7IHhtbUQ9KDExIDE5IDIxIDI5IDAyIDBBIDEyIDFBIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tKQogCi0JcHVucGNraGJ3IHhtbUEseG1tRwk7IHhtbUE9KDAwIDA0IDA4IDBDIDEwIDE0IDE4IDFDIDIwIDI0IDI4IDJDIDAxIDA1IDA5IDBEKQotCXBzbGxkcSAgICB4bW1HLDgJOyB4bW1HPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAyMiAyQSAwMyAwQiAxMyAxQiAyMyAyQikKKyAgICAgICAgcHVucGNraGJ3IHhtbUEseG1tRyAgICAgOyB4bW1BPSgwMCAwNCAwOCAwQyAxMCAxNCAxOCAxQyAyMCAyNCAyOCAyQyAwMSAwNSAwOSAwRCkKKyAgICAgICAgcHNsbGRxICAgIHhtbUcsOCAgICAgICAgOyB4bW1HPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAyMiAyQSAwMyAwQiAxMyAxQiAyMyAyQikKIAotCXB1bnBja2xidyB4bW1ELHhtbUYJOyB4bW1EPSgxMSAxNSAxOSAxRCAyMSAyNSAyOSAyRCAwMiAwNiAwQSAwRSAxMiAxNiAxQSAxRSkKLQlwdW5wY2toYncgeG1tRyx4bW1GCTsgeG1tRz0oMjIgMjYgMkEgMkUgMDMgMDcgMEIgMEYgMTMgMTcgMUIgMUYgMjMgMjcgMkIgMkYpCisgICAgICAgIHB1bnBja2xidyB4bW1ELHhtbUYgICAgIDsgeG1tRD0oMTEgMTUgMTkgMUQgMjEgMjUgMjkgMkQgMDIgMDYgMEEgMEUgMTIgMTYgMUEgMUUpCisgICAgICAgIHB1bnBja2hidyB4bW1HLHhtbUYgICAgIDsgeG1tRz0oMjIgMjYgMkEgMkUgMDMgMDcgMEIgMEYgMTMgMTcgMUIgMUYgMjMgMjcgMkIgMkYpCiAKLQltb3ZkcWEgICAgeG1tRSx4bW1BCi0JcHNsbGRxICAgIHhtbUEsOAk7IHhtbUE9KC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIDAwIDA0IDA4IDBDIDEwIDE0IDE4IDFDKQotCXBzcmxkcSAgICB4bW1FLDgJOyB4bW1FPSgyMCAyNCAyOCAyQyAwMSAwNSAwOSAwRCAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSkKKyAgICAgICAgbW92ZHFhICAgIHhtbUUseG1tQQorICAgICAgICBwc2xsZHEgICAgeG1tQSw4ICAgICAgICA7IHhtbUE9KC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIDAwIDA0IDA4IDBDIDEwIDE0IDE4IDFDKQorICAgICAgICBwc3JsZHEgICAgeG1tRSw4ICAgICAgICA7IHhtbUU9KDIwIDI0IDI4IDJDIDAxIDA1IDA5IDBEIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tKQogCi0JcHVucGNraGJ3IHhtbUEseG1tRAk7IHhtbUE9KDAwIDAyIDA0IDA2IDA4IDBBIDBDIDBFIDEwIDEyIDE0IDE2IDE4IDFBIDFDIDFFKQotCXBzbGxkcSAgICB4bW1ELDgJOyB4bW1EPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAxMSAxNSAxOSAxRCAyMSAyNSAyOSAyRCkKKyAgICAgICAgcHVucGNraGJ3IHhtbUEseG1tRCAgICAgOyB4bW1BPSgwMCAwMiAwNCAwNiAwOCAwQSAwQyAwRSAxMCAxMiAxNCAxNiAxOCAxQSAxQyAxRSkKKyAgICAgICAgcHNsbGRxICAgIHhtbUQsOCAgICAgICAgOyB4bW1EPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAxMSAxNSAxOSAxRCAyMSAyNSAyOSAyRCkKIAotCXB1bnBja2xidyB4bW1FLHhtbUcJOyB4bW1FPSgyMCAyMiAyNCAyNiAyOCAyQSAyQyAyRSAwMSAwMyAwNSAwNyAwOSAwQiAwRCAwRikKLQlwdW5wY2toYncgeG1tRCx4bW1HCTsgeG1tRD0oMTEgMTMgMTUgMTcgMTkgMUIgMUQgMUYgMjEgMjMgMjUgMjcgMjkgMkIgMkQgMkYpCisgICAgICAgIHB1bnBja2xidyB4bW1FLHhtbUcgICAgIDsgeG1tRT0oMjAgMjIgMjQgMjYgMjggMkEgMkMgMkUgMDEgMDMgMDUgMDcgMDkgMEIgMEQgMEYpCisgICAgICAgIHB1bnBja2hidyB4bW1ELHhtbUcgICAgIDsgeG1tRD0oMTEgMTMgMTUgMTcgMTkgMUIgMUQgMUYgMjEgMjMgMjUgMjcgMjkgMkIgMkQgMkYpCiAKLQlweG9yICAgICAgeG1tSCx4bW1ICisgICAgICAgIHB4b3IgICAgICB4bW1ILHhtbUgKIAotCW1vdmRxYSAgICB4bW1DLHhtbUEKLQlwdW5wY2tsYncgeG1tQSx4bW1ICTsgeG1tQT0oMDAgMDIgMDQgMDYgMDggMEEgMEMgMEUpCi0JcHVucGNraGJ3IHhtbUMseG1tSAk7IHhtbUM9KDEwIDEyIDE0IDE2IDE4IDFBIDFDIDFFKQorICAgICAgICBtb3ZkcWEgICAgeG1tQyx4bW1BCisgICAgICAgIHB1bnBja2xidyB4bW1BLHhtbUggICAgIDsgeG1tQT0oMDAgMDIgMDQgMDYgMDggMEEgMEMgMEUpCisgICAgICAgIHB1bnBja2hidyB4bW1DLHhtbUggICAgIDsgeG1tQz0oMTAgMTIgMTQgMTYgMTggMUEgMUMgMUUpCiAKLQltb3ZkcWEgICAgeG1tQix4bW1FCi0JcHVucGNrbGJ3IHhtbUUseG1tSAk7IHhtbUU9KDIwIDIyIDI0IDI2IDI4IDJBIDJDIDJFKQotCXB1bnBja2hidyB4bW1CLHhtbUgJOyB4bW1CPSgwMSAwMyAwNSAwNyAwOSAwQiAwRCAwRikKKyAgICAgICAgbW92ZHFhICAgIHhtbUIseG1tRQorICAgICAgICBwdW5wY2tsYncgeG1tRSx4bW1IICAgICA7IHhtbUU9KDIwIDIyIDI0IDI2IDI4IDJBIDJDIDJFKQorICAgICAgICBwdW5wY2toYncgeG1tQix4bW1IICAgICA7IHhtbUI9KDAxIDAzIDA1IDA3IDA5IDBCIDBEIDBGKQogCi0JbW92ZHFhICAgIHhtbUYseG1tRAotCXB1bnBja2xidyB4bW1ELHhtbUgJOyB4bW1EPSgxMSAxMyAxNSAxNyAxOSAxQiAxRCAxRikKLQlwdW5wY2toYncgeG1tRix4bW1ICTsgeG1tRj0oMjEgMjMgMjUgMjcgMjkgMkIgMkQgMkYpCisgICAgICAgIG1vdmRxYSAgICB4bW1GLHhtbUQKKyAgICAgICAgcHVucGNrbGJ3IHhtbUQseG1tSCAgICAgOyB4bW1EPSgxMSAxMyAxNSAxNyAxOSAxQiAxRCAxRikKKyAgICAgICAgcHVucGNraGJ3IHhtbUYseG1tSCAgICAgOyB4bW1GPSgyMSAyMyAyNSAyNyAyOSAyQiAyRCAyRikKIAogJWVsc2UgOyBSR0JfUElYRUxTSVpFID09IDQgOyAtLS0tLS0tLS0tLQogCiAuY29sdW1uX2xkMToKLQl0ZXN0CWNsLCBTSVpFT0ZfWE1NV09SRC8xNgotCWp6CXNob3J0IC5jb2x1bW5fbGQyCi0Jc3ViCWVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC8xNgotCW1vdmQJeG1tQSwgWE1NX0RXT1JEIFtlc2krZWN4KlJHQl9QSVhFTFNJWkVdCisgICAgICAgIHRlc3QgICAgY2wsIFNJWkVPRl9YTU1XT1JELzE2CisgICAgICAgIGp6ICAgICAgc2hvcnQgLmNvbHVtbl9sZDIKKyAgICAgICAgc3ViICAgICBlY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQvMTYKKyAgICAgICAgbW92ZCAgICB4bW1BLCBYTU1fRFdPUkQgW2VzaStlY3gqUkdCX1BJWEVMU0laRV0KIC5jb2x1bW5fbGQyOgotCXRlc3QJY2wsIFNJWkVPRl9YTU1XT1JELzgKLQlqeglzaG9ydCAuY29sdW1uX2xkNAotCXN1YgllY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQvOAotCW1vdnEJeG1tRSwgWE1NX01NV09SRCBbZXNpK2VjeCpSR0JfUElYRUxTSVpFXQotCXBzbGxkcQl4bW1BLCBTSVpFT0ZfTU1XT1JECi0JcG9yCXhtbUEseG1tRQorICAgICAgICB0ZXN0ICAgIGNsLCBTSVpFT0ZfWE1NV09SRC84CisgICAgICAgIGp6ICAgICAgc2hvcnQgLmNvbHVtbl9sZDQKKyAgICAgICAgc3ViICAgICBlY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQvOAorICAgICAgICBtb3ZxICAgIHhtbUUsIFhNTV9NTVdPUkQgW2VzaStlY3gqUkdCX1BJWEVMU0laRV0KKyAgICAgICAgcHNsbGRxICB4bW1BLCBTSVpFT0ZfTU1XT1JECisgICAgICAgIHBvciAgICAgeG1tQSx4bW1FCiAuY29sdW1uX2xkNDoKLQl0ZXN0CWNsLCBTSVpFT0ZfWE1NV09SRC80Ci0JanoJc2hvcnQgLmNvbHVtbl9sZDgKLQlzdWIJZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzQKLQltb3ZkcWEJeG1tRSx4bW1BCi0JbW92ZHF1CXhtbUEsIFhNTVdPUkQgW2VzaStlY3gqUkdCX1BJWEVMU0laRV0KKyAgICAgICAgdGVzdCAgICBjbCwgU0laRU9GX1hNTVdPUkQvNAorICAgICAgICBqeiAgICAgIHNob3J0IC5jb2x1bW5fbGQ4CisgICAgICAgIHN1YiAgICAgZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzQKKyAgICAgICAgbW92ZHFhICB4bW1FLHhtbUEKKyAgICAgICAgbW92ZHF1ICB4bW1BLCBYTU1XT1JEIFtlc2krZWN4KlJHQl9QSVhFTFNJWkVdCiAuY29sdW1uX2xkODoKLQl0ZXN0CWNsLCBTSVpFT0ZfWE1NV09SRC8yCi0JbW92CWVjeCwgU0laRU9GX1hNTVdPUkQKLQlqeglzaG9ydCAucmdiX2dyYXlfY252Ci0JbW92ZHFhCXhtbUYseG1tQQotCW1vdmRxYQl4bW1ILHhtbUUKLQltb3ZkcXUJeG1tQSwgWE1NV09SRCBbZXNpKzAqU0laRU9GX1hNTVdPUkRdCi0JbW92ZHF1CXhtbUUsIFhNTVdPUkQgW2VzaSsxKlNJWkVPRl9YTU1XT1JEXQotCWptcAlzaG9ydCAucmdiX2dyYXlfY252Ci0JYWxpZ254CTE2LDcKKyAgICAgICAgdGVzdCAgICBjbCwgU0laRU9GX1hNTVdPUkQvMgorICAgICAgICBtb3YgICAgIGVjeCwgU0laRU9GX1hNTVdPUkQKKyAgICAgICAganogICAgICBzaG9ydCAucmdiX2dyYXlfY252CisgICAgICAgIG1vdmRxYSAgeG1tRix4bW1BCisgICAgICAgIG1vdmRxYSAgeG1tSCx4bW1FCisgICAgICAgIG1vdmRxdSAgeG1tQSwgWE1NV09SRCBbZXNpKzAqU0laRU9GX1hNTVdPUkRdCisgICAgICAgIG1vdmRxdSAgeG1tRSwgWE1NV09SRCBbZXNpKzEqU0laRU9GX1hNTVdPUkRdCisgICAgICAgIGptcCAgICAgc2hvcnQgLnJnYl9ncmF5X2NudgorICAgICAgICBhbGlnbnggIDE2LDcKIAogLmNvbHVtbmxvb3A6Ci0JbW92ZHF1CXhtbUEsIFhNTVdPUkQgW2VzaSswKlNJWkVPRl9YTU1XT1JEXQotCW1vdmRxdQl4bW1FLCBYTU1XT1JEIFtlc2krMSpTSVpFT0ZfWE1NV09SRF0KLQltb3ZkcXUJeG1tRiwgWE1NV09SRCBbZXNpKzIqU0laRU9GX1hNTVdPUkRdCi0JbW92ZHF1CXhtbUgsIFhNTVdPUkQgW2VzaSszKlNJWkVPRl9YTU1XT1JEXQorICAgICAgICBtb3ZkcXUgIHhtbUEsIFhNTVdPUkQgW2VzaSswKlNJWkVPRl9YTU1XT1JEXQorICAgICAgICBtb3ZkcXUgIHhtbUUsIFhNTVdPUkQgW2VzaSsxKlNJWkVPRl9YTU1XT1JEXQorICAgICAgICBtb3ZkcXUgIHhtbUYsIFhNTVdPUkQgW2VzaSsyKlNJWkVPRl9YTU1XT1JEXQorICAgICAgICBtb3ZkcXUgIHhtbUgsIFhNTVdPUkQgW2VzaSszKlNJWkVPRl9YTU1XT1JEXQogCiAucmdiX2dyYXlfY252OgotCTsgeG1tQT0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEgMDIgMTIgMjIgMzIgMDMgMTMgMjMgMzMpCi0JOyB4bW1FPSgwNCAxNCAyNCAzNCAwNSAxNSAyNSAzNSAwNiAxNiAyNiAzNiAwNyAxNyAyNyAzNykKLQk7IHhtbUY9KDA4IDE4IDI4IDM4IDA5IDE5IDI5IDM5IDBBIDFBIDJBIDNBIDBCIDFCIDJCIDNCKQotCTsgeG1tSD0oMEMgMUMgMkMgM0MgMEQgMUQgMkQgM0QgMEUgMUUgMkUgM0UgMEYgMUYgMkYgM0YpCisgICAgICAgIDsgeG1tQT0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEgMDIgMTIgMjIgMzIgMDMgMTMgMjMgMzMpCisgICAgICAgIDsgeG1tRT0oMDQgMTQgMjQgMzQgMDUgMTUgMjUgMzUgMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCisgICAgICAgIDsgeG1tRj0oMDggMTggMjggMzggMDkgMTkgMjkgMzkgMEEgMUEgMkEgM0EgMEIgMUIgMkIgM0IpCisgICAgICAgIDsgeG1tSD0oMEMgMUMgMkMgM0MgMEQgMUQgMkQgM0QgMEUgMUUgMkUgM0UgMEYgMUYgMkYgM0YpCiAKLQltb3ZkcWEgICAgeG1tRCx4bW1BCi0JcHVucGNrbGJ3IHhtbUEseG1tRQk7IHhtbUE9KDAwIDA0IDEwIDE0IDIwIDI0IDMwIDM0IDAxIDA1IDExIDE1IDIxIDI1IDMxIDM1KQotCXB1bnBja2hidyB4bW1ELHhtbUUJOyB4bW1EPSgwMiAwNiAxMiAxNiAyMiAyNiAzMiAzNiAwMyAwNyAxMyAxNyAyMyAyNyAzMyAzNykKKyAgICAgICAgbW92ZHFhICAgIHhtbUQseG1tQQorICAgICAgICBwdW5wY2tsYncgeG1tQSx4bW1FICAgICA7IHhtbUE9KDAwIDA0IDEwIDE0IDIwIDI0IDMwIDM0IDAxIDA1IDExIDE1IDIxIDI1IDMxIDM1KQorICAgICAgICBwdW5wY2toYncgeG1tRCx4bW1FICAgICA7IHhtbUQ9KDAyIDA2IDEyIDE2IDIyIDI2IDMyIDM2IDAzIDA3IDEzIDE3IDIzIDI3IDMzIDM3KQogCi0JbW92ZHFhICAgIHhtbUMseG1tRgotCXB1bnBja2xidyB4bW1GLHhtbUgJOyB4bW1GPSgwOCAwQyAxOCAxQyAyOCAyQyAzOCAzQyAwOSAwRCAxOSAxRCAyOSAyRCAzOSAzRCkKLQlwdW5wY2toYncgeG1tQyx4bW1ICTsgeG1tQz0oMEEgMEUgMUEgMUUgMkEgMkUgM0EgM0UgMEIgMEYgMUIgMUYgMkIgMkYgM0IgM0YpCisgICAgICAgIG1vdmRxYSAgICB4bW1DLHhtbUYKKyAgICAgICAgcHVucGNrbGJ3IHhtbUYseG1tSCAgICAgOyB4bW1GPSgwOCAwQyAxOCAxQyAyOCAyQyAzOCAzQyAwOSAwRCAxOSAxRCAyOSAyRCAzOSAzRCkKKyAgICAgICAgcHVucGNraGJ3IHhtbUMseG1tSCAgICAgOyB4bW1DPSgwQSAwRSAxQSAxRSAyQSAyRSAzQSAzRSAwQiAwRiAxQiAxRiAyQiAyRiAzQiAzRikKIAotCW1vdmRxYSAgICB4bW1CLHhtbUEKLQlwdW5wY2tsd2QgeG1tQSx4bW1GCTsgeG1tQT0oMDAgMDQgMDggMEMgMTAgMTQgMTggMUMgMjAgMjQgMjggMkMgMzAgMzQgMzggM0MpCi0JcHVucGNraHdkIHhtbUIseG1tRgk7IHhtbUI9KDAxIDA1IDA5IDBEIDExIDE1IDE5IDFEIDIxIDI1IDI5IDJEIDMxIDM1IDM5IDNEKQorICAgICAgICBtb3ZkcWEgICAgeG1tQix4bW1BCisgICAgICAgIHB1bnBja2x3ZCB4bW1BLHhtbUYgICAgIDsgeG1tQT0oMDAgMDQgMDggMEMgMTAgMTQgMTggMUMgMjAgMjQgMjggMkMgMzAgMzQgMzggM0MpCisgICAgICAgIHB1bnBja2h3ZCB4bW1CLHhtbUYgICAgIDsgeG1tQj0oMDEgMDUgMDkgMEQgMTEgMTUgMTkgMUQgMjEgMjUgMjkgMkQgMzEgMzUgMzkgM0QpCiAKLQltb3ZkcWEgICAgeG1tRyx4bW1ECi0JcHVucGNrbHdkIHhtbUQseG1tQwk7IHhtbUQ9KDAyIDA2IDBBIDBFIDEyIDE2IDFBIDFFIDIyIDI2IDJBIDJFIDMyIDM2IDNBIDNFKQotCXB1bnBja2h3ZCB4bW1HLHhtbUMJOyB4bW1HPSgwMyAwNyAwQiAwRiAxMyAxNyAxQiAxRiAyMyAyNyAyQiAyRiAzMyAzNyAzQiAzRikKKyAgICAgICAgbW92ZHFhICAgIHhtbUcseG1tRAorICAgICAgICBwdW5wY2tsd2QgeG1tRCx4bW1DICAgICA7IHhtbUQ9KDAyIDA2IDBBIDBFIDEyIDE2IDFBIDFFIDIyIDI2IDJBIDJFIDMyIDM2IDNBIDNFKQorICAgICAgICBwdW5wY2tod2QgeG1tRyx4bW1DICAgICA7IHhtbUc9KDAzIDA3IDBCIDBGIDEzIDE3IDFCIDFGIDIzIDI3IDJCIDJGIDMzIDM3IDNCIDNGKQogCi0JbW92ZHFhICAgIHhtbUUseG1tQQotCXB1bnBja2xidyB4bW1BLHhtbUQJOyB4bW1BPSgwMCAwMiAwNCAwNiAwOCAwQSAwQyAwRSAxMCAxMiAxNCAxNiAxOCAxQSAxQyAxRSkKLQlwdW5wY2toYncgeG1tRSx4bW1ECTsgeG1tRT0oMjAgMjIgMjQgMjYgMjggMkEgMkMgMkUgMzAgMzIgMzQgMzYgMzggM0EgM0MgM0UpCisgICAgICAgIG1vdmRxYSAgICB4bW1FLHhtbUEKKyAgICAgICAgcHVucGNrbGJ3IHhtbUEseG1tRCAgICAgOyB4bW1BPSgwMCAwMiAwNCAwNiAwOCAwQSAwQyAwRSAxMCAxMiAxNCAxNiAxOCAxQSAxQyAxRSkKKyAgICAgICAgcHVucGNraGJ3IHhtbUUseG1tRCAgICAgOyB4bW1FPSgyMCAyMiAyNCAyNiAyOCAyQSAyQyAyRSAzMCAzMiAzNCAzNiAzOCAzQSAzQyAzRSkKIAotCW1vdmRxYSAgICB4bW1ILHhtbUIKLQlwdW5wY2tsYncgeG1tQix4bW1HCTsgeG1tQj0oMDEgMDMgMDUgMDcgMDkgMEIgMEQgMEYgMTEgMTMgMTUgMTcgMTkgMUIgMUQgMUYpCi0JcHVucGNraGJ3IHhtbUgseG1tRwk7IHhtbUg9KDIxIDIzIDI1IDI3IDI5IDJCIDJEIDJGIDMxIDMzIDM1IDM3IDM5IDNCIDNEIDNGKQorICAgICAgICBtb3ZkcWEgICAgeG1tSCx4bW1CCisgICAgICAgIHB1bnBja2xidyB4bW1CLHhtbUcgICAgIDsgeG1tQj0oMDEgMDMgMDUgMDcgMDkgMEIgMEQgMEYgMTEgMTMgMTUgMTcgMTkgMUIgMUQgMUYpCisgICAgICAgIHB1bnBja2hidyB4bW1ILHhtbUcgICAgIDsgeG1tSD0oMjEgMjMgMjUgMjcgMjkgMkIgMkQgMkYgMzEgMzMgMzUgMzcgMzkgM0IgM0QgM0YpCiAKLQlweG9yICAgICAgeG1tRix4bW1GCisgICAgICAgIHB4b3IgICAgICB4bW1GLHhtbUYKIAotCW1vdmRxYSAgICB4bW1DLHhtbUEKLQlwdW5wY2tsYncgeG1tQSx4bW1GCTsgeG1tQT0oMDAgMDIgMDQgMDYgMDggMEEgMEMgMEUpCi0JcHVucGNraGJ3IHhtbUMseG1tRgk7IHhtbUM9KDEwIDEyIDE0IDE2IDE4IDFBIDFDIDFFKQorICAgICAgICBtb3ZkcWEgICAgeG1tQyx4bW1BCisgICAgICAgIHB1bnBja2xidyB4bW1BLHhtbUYgICAgIDsgeG1tQT0oMDAgMDIgMDQgMDYgMDggMEEgMEMgMEUpCisgICAgICAgIHB1bnBja2hidyB4bW1DLHhtbUYgICAgIDsgeG1tQz0oMTAgMTIgMTQgMTYgMTggMUEgMUMgMUUpCiAKLQltb3ZkcWEgICAgeG1tRCx4bW1CCi0JcHVucGNrbGJ3IHhtbUIseG1tRgk7IHhtbUI9KDAxIDAzIDA1IDA3IDA5IDBCIDBEIDBGKQotCXB1bnBja2hidyB4bW1ELHhtbUYJOyB4bW1EPSgxMSAxMyAxNSAxNyAxOSAxQiAxRCAxRikKKyAgICAgICAgbW92ZHFhICAgIHhtbUQseG1tQgorICAgICAgICBwdW5wY2tsYncgeG1tQix4bW1GICAgICA7IHhtbUI9KDAxIDAzIDA1IDA3IDA5IDBCIDBEIDBGKQorICAgICAgICBwdW5wY2toYncgeG1tRCx4bW1GICAgICA7IHhtbUQ9KDExIDEzIDE1IDE3IDE5IDFCIDFEIDFGKQogCi0JbW92ZHFhICAgIHhtbUcseG1tRQotCXB1bnBja2xidyB4bW1FLHhtbUYJOyB4bW1FPSgyMCAyMiAyNCAyNiAyOCAyQSAyQyAyRSkKLQlwdW5wY2toYncgeG1tRyx4bW1GCTsgeG1tRz0oMzAgMzIgMzQgMzYgMzggM0EgM0MgM0UpCisgICAgICAgIG1vdmRxYSAgICB4bW1HLHhtbUUKKyAgICAgICAgcHVucGNrbGJ3IHhtbUUseG1tRiAgICAgOyB4bW1FPSgyMCAyMiAyNCAyNiAyOCAyQSAyQyAyRSkKKyAgICAgICAgcHVucGNraGJ3IHhtbUcseG1tRiAgICAgOyB4bW1HPSgzMCAzMiAzNCAzNiAzOCAzQSAzQyAzRSkKIAotCXB1bnBja2xidyB4bW1GLHhtbUgKLQlwdW5wY2toYncgeG1tSCx4bW1ICi0JcHNybHcgICAgIHhtbUYsQllURV9CSVQJOyB4bW1GPSgyMSAyMyAyNSAyNyAyOSAyQiAyRCAyRikKLQlwc3JsdyAgICAgeG1tSCxCWVRFX0JJVAk7IHhtbUg9KDMxIDMzIDM1IDM3IDM5IDNCIDNEIDNGKQorICAgICAgICBwdW5wY2tsYncgeG1tRix4bW1ICisgICAgICAgIHB1bnBja2hidyB4bW1ILHhtbUgKKyAgICAgICAgcHNybHcgICAgIHhtbUYsQllURV9CSVQgOyB4bW1GPSgyMSAyMyAyNSAyNyAyOSAyQiAyRCAyRikKKyAgICAgICAgcHNybHcgICAgIHhtbUgsQllURV9CSVQgOyB4bW1IPSgzMSAzMyAzNSAzNyAzOSAzQiAzRCAzRikKIAogJWVuZGlmIDsgUkdCX1BJWEVMU0laRSA7IC0tLS0tLS0tLS0tLS0tLQogCi0JOyB4bW0wPVIoMDI0NjhBQ0UpPVJFLCB4bW0yPUcoMDI0NjhBQ0UpPUdFLCB4bW00PUIoMDI0NjhBQ0UpPUJFCi0JOyB4bW0xPVIoMTM1NzlCREYpPVJPLCB4bW0zPUcoMTM1NzlCREYpPUdPLCB4bW01PUIoMTM1NzlCREYpPUJPCisgICAgICAgIDsgeG1tMD1SKDAyNDY4QUNFKT1SRSwgeG1tMj1HKDAyNDY4QUNFKT1HRSwgeG1tND1CKDAyNDY4QUNFKT1CRQorICAgICAgICA7IHhtbTE9UigxMzU3OUJERik9Uk8sIHhtbTM9RygxMzU3OUJERik9R08sIHhtbTU9QigxMzU3OUJERik9Qk8KIAotCTsgKE9yaWdpbmFsKQotCTsgWSAgPSAgMC4yOTkwMCAqIFIgKyAwLjU4NzAwICogRyArIDAuMTE0MDAgKiBCCi0JOwotCTsgKFRoaXMgaW1wbGVtZW50YXRpb24pCi0JOyBZICA9ICAwLjI5OTAwICogUiArIDAuMzM3MDAgKiBHICsgMC4xMTQwMCAqIEIgKyAwLjI1MDAwICogRworICAgICAgICA7IChPcmlnaW5hbCkKKyAgICAgICAgOyBZICA9ICAwLjI5OTAwICogUiArIDAuNTg3MDAgKiBHICsgMC4xMTQwMCAqIEIKKyAgICAgICAgOworICAgICAgICA7IChUaGlzIGltcGxlbWVudGF0aW9uKQorICAgICAgICA7IFkgID0gIDAuMjk5MDAgKiBSICsgMC4zMzcwMCAqIEcgKyAwLjExNDAwICogQiArIDAuMjUwMDAgKiBHCiAKLQltb3ZkcWEgICAgeG1tNix4bW0xCi0JcHVucGNrbHdkIHhtbTEseG1tMwotCXB1bnBja2h3ZCB4bW02LHhtbTMKLQlwbWFkZHdkICAgeG1tMSxbR09UT0ZGKGVheCxQV19GMDI5OV9GMDMzNyldIDsgeG1tMT1ST0wqRklYKDAuMjk5KStHT0wqRklYKDAuMzM3KQotCXBtYWRkd2QgICB4bW02LFtHT1RPRkYoZWF4LFBXX0YwMjk5X0YwMzM3KV0gOyB4bW02PVJPSCpGSVgoMC4yOTkpK0dPSCpGSVgoMC4zMzcpCisgICAgICAgIG1vdmRxYSAgICB4bW02LHhtbTEKKyAgICAgICAgcHVucGNrbHdkIHhtbTEseG1tMworICAgICAgICBwdW5wY2tod2QgeG1tNix4bW0zCisgICAgICAgIHBtYWRkd2QgICB4bW0xLFtHT1RPRkYoZWF4LFBXX0YwMjk5X0YwMzM3KV0gOyB4bW0xPVJPTCpGSVgoMC4yOTkpK0dPTCpGSVgoMC4zMzcpCisgICAgICAgIHBtYWRkd2QgICB4bW02LFtHT1RPRkYoZWF4LFBXX0YwMjk5X0YwMzM3KV0gOyB4bW02PVJPSCpGSVgoMC4yOTkpK0dPSCpGSVgoMC4zMzcpCiAKLQltb3ZkcWEgICAgeG1tNywgeG1tNgk7IHhtbTc9Uk9IKkZJWCgwLjI5OSkrR09IKkZJWCgwLjMzNykKKyAgICAgICAgbW92ZHFhICAgIHhtbTcsIHhtbTYgICAgOyB4bW03PVJPSCpGSVgoMC4yOTkpK0dPSCpGSVgoMC4zMzcpCiAKLQltb3ZkcWEgICAgeG1tNix4bW0wCi0JcHVucGNrbHdkIHhtbTAseG1tMgotCXB1bnBja2h3ZCB4bW02LHhtbTIKLQlwbWFkZHdkICAgeG1tMCxbR09UT0ZGKGVheCxQV19GMDI5OV9GMDMzNyldIDsgeG1tMD1SRUwqRklYKDAuMjk5KStHRUwqRklYKDAuMzM3KQotCXBtYWRkd2QgICB4bW02LFtHT1RPRkYoZWF4LFBXX0YwMjk5X0YwMzM3KV0gOyB4bW02PVJFSCpGSVgoMC4yOTkpK0dFSCpGSVgoMC4zMzcpCisgICAgICAgIG1vdmRxYSAgICB4bW02LHhtbTAKKyAgICAgICAgcHVucGNrbHdkIHhtbTAseG1tMgorICAgICAgICBwdW5wY2tod2QgeG1tNix4bW0yCisgICAgICAgIHBtYWRkd2QgICB4bW0wLFtHT1RPRkYoZWF4LFBXX0YwMjk5X0YwMzM3KV0gOyB4bW0wPVJFTCpGSVgoMC4yOTkpK0dFTCpGSVgoMC4zMzcpCisgICAgICAgIHBtYWRkd2QgICB4bW02LFtHT1RPRkYoZWF4LFBXX0YwMjk5X0YwMzM3KV0gOyB4bW02PVJFSCpGSVgoMC4yOTkpK0dFSCpGSVgoMC4zMzcpCiAKLQltb3ZkcWEgICAgWE1NV09SRCBbd2soMCldLCB4bW0wCTsgd2soMCk9UkVMKkZJWCgwLjI5OSkrR0VMKkZJWCgwLjMzNykKLQltb3ZkcWEgICAgWE1NV09SRCBbd2soMSldLCB4bW02CTsgd2soMSk9UkVIKkZJWCgwLjI5OSkrR0VIKkZJWCgwLjMzNykKKyAgICAgICAgbW92ZHFhICAgIFhNTVdPUkQgW3drKDApXSwgeG1tMCA7IHdrKDApPVJFTCpGSVgoMC4yOTkpK0dFTCpGSVgoMC4zMzcpCisgICAgICAgIG1vdmRxYSAgICBYTU1XT1JEIFt3aygxKV0sIHhtbTYgOyB3aygxKT1SRUgqRklYKDAuMjk5KStHRUgqRklYKDAuMzM3KQogCi0JbW92ZHFhICAgIHhtbTAsIHhtbTUJOyB4bW0wPUJPCi0JbW92ZHFhICAgIHhtbTYsIHhtbTQJOyB4bW02PUJFCisgICAgICAgIG1vdmRxYSAgICB4bW0wLCB4bW01ICAgIDsgeG1tMD1CTworICAgICAgICBtb3ZkcWEgICAgeG1tNiwgeG1tNCAgICA7IHhtbTY9QkUKIAotCW1vdmRxYSAgICB4bW00LHhtbTAKLQlwdW5wY2tsd2QgeG1tMCx4bW0zCi0JcHVucGNraHdkIHhtbTQseG1tMwotCXBtYWRkd2QgICB4bW0wLFtHT1RPRkYoZWF4LFBXX0YwMTE0X0YwMjUwKV0gOyB4bW0wPUJPTCpGSVgoMC4xMTQpK0dPTCpGSVgoMC4yNTApCi0JcG1hZGR3ZCAgIHhtbTQsW0dPVE9GRihlYXgsUFdfRjAxMTRfRjAyNTApXSA7IHhtbTQ9Qk9IKkZJWCgwLjExNCkrR09IKkZJWCgwLjI1MCkKKyAgICAgICAgbW92ZHFhICAgIHhtbTQseG1tMAorICAgICAgICBwdW5wY2tsd2QgeG1tMCx4bW0zCisgICAgICAgIHB1bnBja2h3ZCB4bW00LHhtbTMKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTAsW0dPVE9GRihlYXgsUFdfRjAxMTRfRjAyNTApXSA7IHhtbTA9Qk9MKkZJWCgwLjExNCkrR09MKkZJWCgwLjI1MCkKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTQsW0dPVE9GRihlYXgsUFdfRjAxMTRfRjAyNTApXSA7IHhtbTQ9Qk9IKkZJWCgwLjExNCkrR09IKkZJWCgwLjI1MCkKIAotCW1vdmRxYSAgICB4bW0zLFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXQk7IHhtbTM9W1BEX09ORUhBTEZdCisgICAgICAgIG1vdmRxYSAgICB4bW0zLFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXSA7IHhtbTM9W1BEX09ORUhBTEZdCiAKLQlwYWRkZCAgICAgeG1tMCwgeG1tMQotCXBhZGRkICAgICB4bW00LCB4bW03Ci0JcGFkZGQgICAgIHhtbTAseG1tMwotCXBhZGRkICAgICB4bW00LHhtbTMKLQlwc3JsZCAgICAgeG1tMCxTQ0FMRUJJVFMJOyB4bW0wPVlPTAotCXBzcmxkICAgICB4bW00LFNDQUxFQklUUwk7IHhtbTQ9WU9ICi0JcGFja3NzZHcgIHhtbTAseG1tNAkJOyB4bW0wPVlPCisgICAgICAgIHBhZGRkICAgICB4bW0wLCB4bW0xCisgICAgICAgIHBhZGRkICAgICB4bW00LCB4bW03CisgICAgICAgIHBhZGRkICAgICB4bW0wLHhtbTMKKyAgICAgICAgcGFkZGQgICAgIHhtbTQseG1tMworICAgICAgICBwc3JsZCAgICAgeG1tMCxTQ0FMRUJJVFMgICAgICAgIDsgeG1tMD1ZT0wKKyAgICAgICAgcHNybGQgICAgIHhtbTQsU0NBTEVCSVRTICAgICAgICA7IHhtbTQ9WU9ICisgICAgICAgIHBhY2tzc2R3ICB4bW0wLHhtbTQgICAgICAgICAgICAgOyB4bW0wPVlPCiAKLQltb3ZkcWEgICAgeG1tNCx4bW02Ci0JcHVucGNrbHdkIHhtbTYseG1tMgotCXB1bnBja2h3ZCB4bW00LHhtbTIKLQlwbWFkZHdkICAgeG1tNixbR09UT0ZGKGVheCxQV19GMDExNF9GMDI1MCldIDsgeG1tNj1CRUwqRklYKDAuMTE0KStHRUwqRklYKDAuMjUwKQotCXBtYWRkd2QgICB4bW00LFtHT1RPRkYoZWF4LFBXX0YwMTE0X0YwMjUwKV0gOyB4bW00PUJFSCpGSVgoMC4xMTQpK0dFSCpGSVgoMC4yNTApCisgICAgICAgIG1vdmRxYSAgICB4bW00LHhtbTYKKyAgICAgICAgcHVucGNrbHdkIHhtbTYseG1tMgorICAgICAgICBwdW5wY2tod2QgeG1tNCx4bW0yCisgICAgICAgIHBtYWRkd2QgICB4bW02LFtHT1RPRkYoZWF4LFBXX0YwMTE0X0YwMjUwKV0gOyB4bW02PUJFTCpGSVgoMC4xMTQpK0dFTCpGSVgoMC4yNTApCisgICAgICAgIHBtYWRkd2QgICB4bW00LFtHT1RPRkYoZWF4LFBXX0YwMTE0X0YwMjUwKV0gOyB4bW00PUJFSCpGSVgoMC4xMTQpK0dFSCpGSVgoMC4yNTApCiAKLQltb3ZkcWEgICAgeG1tMixbR09UT0ZGKGVheCxQRF9PTkVIQUxGKV0JOyB4bW0yPVtQRF9PTkVIQUxGXQorICAgICAgICBtb3ZkcWEgICAgeG1tMixbR09UT0ZGKGVheCxQRF9PTkVIQUxGKV0gOyB4bW0yPVtQRF9PTkVIQUxGXQogCi0JcGFkZGQgICAgIHhtbTYsIFhNTVdPUkQgW3drKDApXQotCXBhZGRkICAgICB4bW00LCBYTU1XT1JEIFt3aygxKV0KLQlwYWRkZCAgICAgeG1tNix4bW0yCi0JcGFkZGQgICAgIHhtbTQseG1tMgotCXBzcmxkICAgICB4bW02LFNDQUxFQklUUwk7IHhtbTY9WUVMCi0JcHNybGQgICAgIHhtbTQsU0NBTEVCSVRTCTsgeG1tND1ZRUgKLQlwYWNrc3NkdyAgeG1tNix4bW00CQk7IHhtbTY9WUUKKyAgICAgICAgcGFkZGQgICAgIHhtbTYsIFhNTVdPUkQgW3drKDApXQorICAgICAgICBwYWRkZCAgICAgeG1tNCwgWE1NV09SRCBbd2soMSldCisgICAgICAgIHBhZGRkICAgICB4bW02LHhtbTIKKyAgICAgICAgcGFkZGQgICAgIHhtbTQseG1tMgorICAgICAgICBwc3JsZCAgICAgeG1tNixTQ0FMRUJJVFMgICAgICAgIDsgeG1tNj1ZRUwKKyAgICAgICAgcHNybGQgICAgIHhtbTQsU0NBTEVCSVRTICAgICAgICA7IHhtbTQ9WUVICisgICAgICAgIHBhY2tzc2R3ICB4bW02LHhtbTQgICAgICAgICAgICAgOyB4bW02PVlFCiAKLQlwc2xsdyAgICAgeG1tMCxCWVRFX0JJVAotCXBvciAgICAgICB4bW02LHhtbTAJCTsgeG1tNj1ZCi0JbW92ZHFhICAgIFhNTVdPUkQgW2VkaV0sIHhtbTYJOyBTYXZlIFkKKyAgICAgICAgcHNsbHcgICAgIHhtbTAsQllURV9CSVQKKyAgICAgICAgcG9yICAgICAgIHhtbTYseG1tMCAgICAgICAgICAgICA7IHhtbTY9WQorICAgICAgICBtb3ZkcWEgICAgWE1NV09SRCBbZWRpXSwgeG1tNiAgIDsgU2F2ZSBZCiAKLQlzdWIJZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JECi0JYWRkCWVzaSwgYnl0ZSBSR0JfUElYRUxTSVpFKlNJWkVPRl9YTU1XT1JECTsgaW5wdHIKLQlhZGQJZWRpLCBieXRlIFNJWkVPRl9YTU1XT1JECQk7IG91dHB0cjAKLQljbXAJZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JECi0JamFlCW5lYXIgLmNvbHVtbmxvb3AKLQl0ZXN0CWVjeCxlY3gKLQlqbnoJbmVhciAuY29sdW1uX2xkMQorICAgICAgICBzdWIgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorICAgICAgICBhZGQgICAgIGVzaSwgYnl0ZSBSR0JfUElYRUxTSVpFKlNJWkVPRl9YTU1XT1JEICA7IGlucHRyCisgICAgICAgIGFkZCAgICAgZWRpLCBieXRlIFNJWkVPRl9YTU1XT1JEICAgICAgICAgICAgICAgIDsgb3V0cHRyMAorICAgICAgICBjbXAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorICAgICAgICBqYWUgICAgIG5lYXIgLmNvbHVtbmxvb3AKKyAgICAgICAgdGVzdCAgICBlY3gsZWN4CisgICAgICAgIGpueiAgICAgbmVhciAuY29sdW1uX2xkMQogCi0JcG9wCWVjeAkJCTsgY29sCi0JcG9wCWVzaQotCXBvcAllZGkKLQlwb3BwaWMJZWF4CisgICAgICAgIHBvcCAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBjb2wKKyAgICAgICAgcG9wICAgICBlc2kKKyAgICAgICAgcG9wICAgICBlZGkKKyAgICAgICAgcG9wcGljICBlYXgKIAotCWFkZAllc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCTsgaW5wdXRfYnVmCi0JYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cKLQlkZWMJZWF4CQkJCTsgbnVtX3Jvd3MKLQlqZwluZWFyIC5yb3dsb29wCisgICAgICAgIGFkZCAgICAgZXNpLCBieXRlIFNJWkVPRl9KU0FNUFJPVyAgICAgICA7IGlucHV0X2J1ZgorICAgICAgICBhZGQgICAgIGVkaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cKKyAgICAgICAgZGVjICAgICBlYXggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgbnVtX3Jvd3MKKyAgICAgICAgamcgICAgICBuZWFyIC5yb3dsb29wCiAKIC5yZXR1cm46Ci0JcG9wCWVkaQotCXBvcAllc2kKLTsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLTsJcG9wCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLQlwb3AJZWJ4Ci0JbW92CWVzcCxlYnAJCTsgZXNwIDwtIGFsaWduZWQgZWJwCi0JcG9wCWVzcAkJOyBlc3AgPC0gb3JpZ2luYWwgZWJwCi0JcG9wCWVicAotCXJldAorICAgICAgICBwb3AgICAgIGVkaQorICAgICAgICBwb3AgICAgIGVzaQorOyAgICAgICBwb3AgICAgIGVkeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgICAgICBwb3AgICAgIGVjeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgICAgICBwb3AgICAgIGVieAorICAgICAgICBtb3YgICAgIGVzcCxlYnAgICAgICAgICA7IGVzcCA8LSBhbGlnbmVkIGVicAorICAgICAgICBwb3AgICAgIGVzcCAgICAgICAgICAgICA7IGVzcCA8LSBvcmlnaW5hbCBlYnAKKyAgICAgICAgcG9wICAgICBlYnAKKyAgICAgICAgcmV0CiAKIDsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCiA7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCi0JYWxpZ24JMTYKKyAgICAgICAgYWxpZ24gICAxNgpkaWZmIC0tZ2l0IGEvc2ltZC9qY3FudDNkbi5hc20gYi9zaW1kL2pjcW50M2RuLmFzbQppbmRleCAxODJjODY5Li4wYjhlYzE3IDEwMDY0NAotLS0gYS9zaW1kL2pjcW50M2RuLmFzbQorKysgYi9zaW1kL2pjcW50M2RuLmFzbQpAQCAtMjAsOCArMjAsOCBAQAogJWluY2x1ZGUgImpkY3QuaW5jIgogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JU0VDVElPTglTRUdfVEVYVAotCUJJVFMJMzIKKyAgICAgICAgU0VDVElPTiBTRUdfVEVYVAorICAgICAgICBCSVRTICAgIDMyCiA7CiA7IExvYWQgZGF0YSBpbnRvIHdvcmtzcGFjZSwgYXBwbHlpbmcgdW5zaWduZWQtPnNpZ25lZCBjb252ZXJzaW9uCiA7CkBAIC0zMCw5OCArMzAsOTggQEAKIDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBU1RfRkxPQVQgKiB3b3Jrc3BhY2UpOwogOwogCi0lZGVmaW5lIHNhbXBsZV9kYXRhCWVicCs4CQk7IEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEKLSVkZWZpbmUgc3RhcnRfY29sCWVicCsxMgkJOyBKRElNRU5TSU9OIHN0YXJ0X2NvbAotJWRlZmluZSB3b3Jrc3BhY2UJZWJwKzE2CQk7IEZBU1RfRkxPQVQgKiB3b3Jrc3BhY2UKKyVkZWZpbmUgc2FtcGxlX2RhdGEgICAgIGVicCs4ICAgICAgICAgICA7IEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEKKyVkZWZpbmUgc3RhcnRfY29sICAgICAgIGVicCsxMiAgICAgICAgICA7IEpESU1FTlNJT04gc3RhcnRfY29sCislZGVmaW5lIHdvcmtzcGFjZSAgICAgICBlYnArMTYgICAgICAgICAgOyBGQVNUX0ZMT0FUICogd29ya3NwYWNlCiAKLQlhbGlnbgkxNgotCWdsb2JhbAlFWFROKGpzaW1kX2NvbnZzYW1wX2Zsb2F0XzNkbm93KQorICAgICAgICBhbGlnbiAgIDE2CisgICAgICAgIGdsb2JhbCAgRVhUTihqc2ltZF9jb252c2FtcF9mbG9hdF8zZG5vdykKIAogRVhUTihqc2ltZF9jb252c2FtcF9mbG9hdF8zZG5vdyk6Ci0JcHVzaAllYnAKLQltb3YJZWJwLGVzcAotCXB1c2gJZWJ4Ci07CXB1c2gJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLQlwdXNoCWVzaQotCXB1c2gJZWRpCisgICAgICAgIHB1c2ggICAgZWJwCisgICAgICAgIG1vdiAgICAgZWJwLGVzcAorICAgICAgICBwdXNoICAgIGVieAorOyAgICAgICBwdXNoICAgIGVjeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgICAgICBwdXNoICAgIGVkeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgICAgICBwdXNoICAgIGVzaQorICAgICAgICBwdXNoICAgIGVkaQogCi0JcGNtcGVxdyAgbW03LG1tNwotCXBzbGx3ICAgIG1tNyw3Ci0JcGFja3Nzd2IgbW03LG1tNwkJOyBtbTcgPSBQQl9DRU5URVJKU0FNUExFICgweDgwODA4MC4uKQorICAgICAgICBwY21wZXF3ICBtbTcsbW03CisgICAgICAgIHBzbGx3ICAgIG1tNyw3CisgICAgICAgIHBhY2tzc3diIG1tNyxtbTcgICAgICAgICAgICAgICAgOyBtbTcgPSBQQl9DRU5URVJKU0FNUExFICgweDgwODA4MC4uKQogCi0JbW92CWVzaSwgSlNBTVBBUlJBWSBbc2FtcGxlX2RhdGFdCTsgKEpTQU1QUk9XICopCi0JbW92CWVheCwgSkRJTUVOU0lPTiBbc3RhcnRfY29sXQotCW1vdgllZGksIFBPSU5URVIgW3dvcmtzcGFjZV0JOyAoRENURUxFTSAqKQotCW1vdgllY3gsIERDVFNJWkUvMgotCWFsaWdueAkxNiw3CisgICAgICAgIG1vdiAgICAgZXNpLCBKU0FNUEFSUkFZIFtzYW1wbGVfZGF0YV0gICA7IChKU0FNUFJPVyAqKQorICAgICAgICBtb3YgICAgIGVheCwgSkRJTUVOU0lPTiBbc3RhcnRfY29sXQorICAgICAgICBtb3YgICAgIGVkaSwgUE9JTlRFUiBbd29ya3NwYWNlXSAgICAgICAgOyAoRENURUxFTSAqKQorICAgICAgICBtb3YgICAgIGVjeCwgRENUU0laRS8yCisgICAgICAgIGFsaWdueCAgMTYsNwogLmNvbnZsb29wOgotCW1vdgllYngsIEpTQU1QUk9XIFtlc2krMCpTSVpFT0ZfSlNBTVBST1ddCTsgKEpTQU1QTEUgKikKLQltb3YJZWR4LCBKU0FNUFJPVyBbZXNpKzEqU0laRU9GX0pTQU1QUk9XXQk7IChKU0FNUExFICopCisgICAgICAgIG1vdiAgICAgZWJ4LCBKU0FNUFJPVyBbZXNpKzAqU0laRU9GX0pTQU1QUk9XXSAgIDsgKEpTQU1QTEUgKikKKyAgICAgICAgbW92ICAgICBlZHgsIEpTQU1QUk9XIFtlc2krMSpTSVpFT0ZfSlNBTVBST1ddICAgOyAoSlNBTVBMRSAqKQogCi0JbW92cQltbTAsIE1NV09SRCBbZWJ4K2VheCpTSVpFT0ZfSlNBTVBMRV0KLQltb3ZxCW1tMSwgTU1XT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXQorICAgICAgICBtb3ZxICAgIG1tMCwgTU1XT1JEIFtlYngrZWF4KlNJWkVPRl9KU0FNUExFXQorICAgICAgICBtb3ZxICAgIG1tMSwgTU1XT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXQogCi0JcHN1YmIJbW0wLG1tNwkJCQk7IG1tMD0oMDEyMzQ1NjcpCi0JcHN1YmIJbW0xLG1tNwkJCQk7IG1tMT0oODlBQkNERUYpCisgICAgICAgIHBzdWJiICAgbW0wLG1tNyAgICAgICAgICAgICAgICAgICAgICAgICA7IG1tMD0oMDEyMzQ1NjcpCisgICAgICAgIHBzdWJiICAgbW0xLG1tNyAgICAgICAgICAgICAgICAgICAgICAgICA7IG1tMT0oODlBQkNERUYpCiAKLQlwdW5wY2tsYncgbW0yLG1tMAkJCTsgbW0yPSgqMCoxKjIqMykKLQlwdW5wY2toYncgbW0wLG1tMAkJCTsgbW0wPSgqNCo1KjYqNykKLQlwdW5wY2tsYncgbW0zLG1tMQkJCTsgbW0zPSgqOCo5KkEqQikKLQlwdW5wY2toYncgbW0xLG1tMQkJCTsgbW0xPSgqQypEKkUqRikKKyAgICAgICAgcHVucGNrbGJ3IG1tMixtbTAgICAgICAgICAgICAgICAgICAgICAgIDsgbW0yPSgqMCoxKjIqMykKKyAgICAgICAgcHVucGNraGJ3IG1tMCxtbTAgICAgICAgICAgICAgICAgICAgICAgIDsgbW0wPSgqNCo1KjYqNykKKyAgICAgICAgcHVucGNrbGJ3IG1tMyxtbTEgICAgICAgICAgICAgICAgICAgICAgIDsgbW0zPSgqOCo5KkEqQikKKyAgICAgICAgcHVucGNraGJ3IG1tMSxtbTEgICAgICAgICAgICAgICAgICAgICAgIDsgbW0xPSgqQypEKkUqRikKIAotCXB1bnBja2x3ZCBtbTQsbW0yCQkJOyBtbTQ9KCoqKjAqKioxKQotCXB1bnBja2h3ZCBtbTIsbW0yCQkJOyBtbTI9KCoqKjIqKiozKQotCXB1bnBja2x3ZCBtbTUsbW0wCQkJOyBtbTU9KCoqKjQqKio1KQotCXB1bnBja2h3ZCBtbTAsbW0wCQkJOyBtbTA9KCoqKjYqKio3KQorICAgICAgICBwdW5wY2tsd2QgbW00LG1tMiAgICAgICAgICAgICAgICAgICAgICAgOyBtbTQ9KCoqKjAqKioxKQorICAgICAgICBwdW5wY2tod2QgbW0yLG1tMiAgICAgICAgICAgICAgICAgICAgICAgOyBtbTI9KCoqKjIqKiozKQorICAgICAgICBwdW5wY2tsd2QgbW01LG1tMCAgICAgICAgICAgICAgICAgICAgICAgOyBtbTU9KCoqKjQqKio1KQorICAgICAgICBwdW5wY2tod2QgbW0wLG1tMCAgICAgICAgICAgICAgICAgICAgICAgOyBtbTA9KCoqKjYqKio3KQogCi0JcHNyYWQJbW00LChEV09SRF9CSVQtQllURV9CSVQpCTsgbW00PSgwMSkKLQlwc3JhZAltbTIsKERXT1JEX0JJVC1CWVRFX0JJVCkJOyBtbTI9KDIzKQotCXBpMmZkCW1tNCxtbTQKLQlwaTJmZAltbTIsbW0yCi0JcHNyYWQJbW01LChEV09SRF9CSVQtQllURV9CSVQpCTsgbW01PSg0NSkKLQlwc3JhZAltbTAsKERXT1JEX0JJVC1CWVRFX0JJVCkJOyBtbTA9KDY3KQotCXBpMmZkCW1tNSxtbTUKLQlwaTJmZAltbTAsbW0wCisgICAgICAgIHBzcmFkICAgbW00LChEV09SRF9CSVQtQllURV9CSVQpICAgICAgICA7IG1tND0oMDEpCisgICAgICAgIHBzcmFkICAgbW0yLChEV09SRF9CSVQtQllURV9CSVQpICAgICAgICA7IG1tMj0oMjMpCisgICAgICAgIHBpMmZkICAgbW00LG1tNAorICAgICAgICBwaTJmZCAgIG1tMixtbTIKKyAgICAgICAgcHNyYWQgICBtbTUsKERXT1JEX0JJVC1CWVRFX0JJVCkgICAgICAgIDsgbW01PSg0NSkKKyAgICAgICAgcHNyYWQgICBtbTAsKERXT1JEX0JJVC1CWVRFX0JJVCkgICAgICAgIDsgbW0wPSg2NykKKyAgICAgICAgcGkyZmQgICBtbTUsbW01CisgICAgICAgIHBpMmZkICAgbW0wLG1tMAogCi0JbW92cQlNTVdPUkQgW01NQkxPQ0soMCwwLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTQKLQltb3ZxCU1NV09SRCBbTU1CTE9DSygwLDEsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tMgotCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDAsMixlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgbW01Ci0JbW92cQlNTVdPUkQgW01NQkxPQ0soMCwzLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTAKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMCwwLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTQKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMCwxLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTIKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMCwyLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTUKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMCwzLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTAKIAotCXB1bnBja2x3ZCBtbTYsbW0zCQkJOyBtbTY9KCoqKjgqKio5KQotCXB1bnBja2h3ZCBtbTMsbW0zCQkJOyBtbTM9KCoqKkEqKipCKQotCXB1bnBja2x3ZCBtbTQsbW0xCQkJOyBtbTQ9KCoqKkMqKipEKQotCXB1bnBja2h3ZCBtbTEsbW0xCQkJOyBtbTE9KCoqKkUqKipGKQorICAgICAgICBwdW5wY2tsd2QgbW02LG1tMyAgICAgICAgICAgICAgICAgICAgICAgOyBtbTY9KCoqKjgqKio5KQorICAgICAgICBwdW5wY2tod2QgbW0zLG1tMyAgICAgICAgICAgICAgICAgICAgICAgOyBtbTM9KCoqKkEqKipCKQorICAgICAgICBwdW5wY2tsd2QgbW00LG1tMSAgICAgICAgICAgICAgICAgICAgICAgOyBtbTQ9KCoqKkMqKipEKQorICAgICAgICBwdW5wY2tod2QgbW0xLG1tMSAgICAgICAgICAgICAgICAgICAgICAgOyBtbTE9KCoqKkUqKipGKQogCi0JcHNyYWQJbW02LChEV09SRF9CSVQtQllURV9CSVQpCTsgbW02PSg4OSkKLQlwc3JhZAltbTMsKERXT1JEX0JJVC1CWVRFX0JJVCkJOyBtbTM9KEFCKQotCXBpMmZkCW1tNixtbTYKLQlwaTJmZAltbTMsbW0zCi0JcHNyYWQJbW00LChEV09SRF9CSVQtQllURV9CSVQpCTsgbW00PShDRCkKLQlwc3JhZAltbTEsKERXT1JEX0JJVC1CWVRFX0JJVCkJOyBtbTE9KEVGKQotCXBpMmZkCW1tNCxtbTQKLQlwaTJmZAltbTEsbW0xCisgICAgICAgIHBzcmFkICAgbW02LChEV09SRF9CSVQtQllURV9CSVQpICAgICAgICA7IG1tNj0oODkpCisgICAgICAgIHBzcmFkICAgbW0zLChEV09SRF9CSVQtQllURV9CSVQpICAgICAgICA7IG1tMz0oQUIpCisgICAgICAgIHBpMmZkICAgbW02LG1tNgorICAgICAgICBwaTJmZCAgIG1tMyxtbTMKKyAgICAgICAgcHNyYWQgICBtbTQsKERXT1JEX0JJVC1CWVRFX0JJVCkgICAgICAgIDsgbW00PShDRCkKKyAgICAgICAgcHNyYWQgICBtbTEsKERXT1JEX0JJVC1CWVRFX0JJVCkgICAgICAgIDsgbW0xPShFRikKKyAgICAgICAgcGkyZmQgICBtbTQsbW00CisgICAgICAgIHBpMmZkICAgbW0xLG1tMQogCi0JbW92cQlNTVdPUkQgW01NQkxPQ0soMSwwLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTYKLQltb3ZxCU1NV09SRCBbTU1CTE9DSygxLDEsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tMwotCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDEsMixlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgbW00Ci0JbW92cQlNTVdPUkQgW01NQkxPQ0soMSwzLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTEKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMSwwLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTYKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMSwxLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTMKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMSwyLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTQKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMSwzLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTEKIAotCWFkZAllc2ksIGJ5dGUgMipTSVpFT0ZfSlNBTVBST1cKLQlhZGQJZWRpLCBieXRlIDIqRENUU0laRSpTSVpFT0ZfRkFTVF9GTE9BVAotCWRlYwllY3gKLQlqbnoJbmVhciAuY29udmxvb3AKKyAgICAgICAgYWRkICAgICBlc2ksIGJ5dGUgMipTSVpFT0ZfSlNBTVBST1cKKyAgICAgICAgYWRkICAgICBlZGksIGJ5dGUgMipEQ1RTSVpFKlNJWkVPRl9GQVNUX0ZMT0FUCisgICAgICAgIGRlYyAgICAgZWN4CisgICAgICAgIGpueiAgICAgbmVhciAuY29udmxvb3AKIAotCWZlbW1zCQk7IGVtcHR5IE1NWC8zRE5vdyEgc3RhdGUKKyAgICAgICAgZmVtbXMgICAgICAgICAgIDsgZW1wdHkgTU1YLzNETm93ISBzdGF0ZQogCi0JcG9wCWVkaQotCXBvcAllc2kKLTsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLTsJcG9wCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLQlwb3AJZWJ4Ci0JcG9wCWVicAotCXJldAorICAgICAgICBwb3AgICAgIGVkaQorICAgICAgICBwb3AgICAgIGVzaQorOyAgICAgICBwb3AgICAgIGVkeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgICAgICBwb3AgICAgIGVjeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgICAgICBwb3AgICAgIGVieAorICAgICAgICBwb3AgICAgIGVicAorICAgICAgICByZXQKIAogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMzMsMTAxICsxMzMsMTAxIEBACiA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQVNUX0ZMT0FUICogd29ya3NwYWNlKTsKIDsKIAotJWRlZmluZSBjb2VmX2Jsb2NrCWVicCs4CQk7IEpDT0VGUFRSIGNvZWZfYmxvY2sKLSVkZWZpbmUgZGl2aXNvcnMJZWJwKzEyCQk7IEZBU1RfRkxPQVQgKiBkaXZpc29ycwotJWRlZmluZSB3b3Jrc3BhY2UJZWJwKzE2CQk7IEZBU1RfRkxPQVQgKiB3b3Jrc3BhY2UKKyVkZWZpbmUgY29lZl9ibG9jayAgICAgIGVicCs4ICAgICAgICAgICA7IEpDT0VGUFRSIGNvZWZfYmxvY2sKKyVkZWZpbmUgZGl2aXNvcnMgICAgICAgIGVicCsxMiAgICAgICAgICA7IEZBU1RfRkxPQVQgKiBkaXZpc29ycworJWRlZmluZSB3b3Jrc3BhY2UgICAgICAgZWJwKzE2ICAgICAgICAgIDsgRkFTVF9GTE9BVCAqIHdvcmtzcGFjZQogCi0JYWxpZ24JMTYKLQlnbG9iYWwJRVhUTihqc2ltZF9xdWFudGl6ZV9mbG9hdF8zZG5vdykKKyAgICAgICAgYWxpZ24gICAxNgorICAgICAgICBnbG9iYWwgIEVYVE4oanNpbWRfcXVhbnRpemVfZmxvYXRfM2Rub3cpCiAKIEVYVE4oanNpbWRfcXVhbnRpemVfZmxvYXRfM2Rub3cpOgotCXB1c2gJZWJwCi0JbW92CWVicCxlc3AKLTsJcHVzaAllYngJCTsgdW51c2VkCi07CXB1c2gJZWN4CQk7IHVudXNlZAotOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLQlwdXNoCWVzaQotCXB1c2gJZWRpCisgICAgICAgIHB1c2ggICAgZWJwCisgICAgICAgIG1vdiAgICAgZWJwLGVzcAorOyAgICAgICBwdXNoICAgIGVieCAgICAgICAgICAgICA7IHVudXNlZAorOyAgICAgICBwdXNoICAgIGVjeCAgICAgICAgICAgICA7IHVudXNlZAorOyAgICAgICBwdXNoICAgIGVkeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgICAgICBwdXNoICAgIGVzaQorICAgICAgICBwdXNoICAgIGVkaQogCi0JbW92ICAgICAgIGVheCwgMHg0QjQwMDAwMAk7IChmbG9hdCkweDAwQzAwMDAwIChybmRpbnRfbWFnaWMpCi0JbW92ZCAgICAgIG1tNyxlYXgKLQlwdW5wY2tsZHEgbW03LG1tNwkJOyBtbTc9ezEyNTgyOTEyLjBGIDEyNTgyOTEyLjBGfQorICAgICAgICBtb3YgICAgICAgZWF4LCAweDRCNDAwMDAwICAgICAgIDsgKGZsb2F0KTB4MDBDMDAwMDAgKHJuZGludF9tYWdpYykKKyAgICAgICAgbW92ZCAgICAgIG1tNyxlYXgKKyAgICAgICAgcHVucGNrbGRxIG1tNyxtbTcgICAgICAgICAgICAgICA7IG1tNz17MTI1ODI5MTIuMEYgMTI1ODI5MTIuMEZ9CiAKLQltb3YJZXNpLCBQT0lOVEVSIFt3b3Jrc3BhY2VdCi0JbW92CWVkeCwgUE9JTlRFUiBbZGl2aXNvcnNdCi0JbW92CWVkaSwgSkNPRUZQVFIgW2NvZWZfYmxvY2tdCi0JbW92CWVheCwgRENUU0laRTIvMTYKLQlhbGlnbngJMTYsNworICAgICAgICBtb3YgICAgIGVzaSwgUE9JTlRFUiBbd29ya3NwYWNlXQorICAgICAgICBtb3YgICAgIGVkeCwgUE9JTlRFUiBbZGl2aXNvcnNdCisgICAgICAgIG1vdiAgICAgZWRpLCBKQ09FRlBUUiBbY29lZl9ibG9ja10KKyAgICAgICAgbW92ICAgICBlYXgsIERDVFNJWkUyLzE2CisgICAgICAgIGFsaWdueCAgMTYsNwogLnF1YW50bG9vcDoKLQltb3ZxCW1tMCwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQotCW1vdnEJbW0xLCBNTVdPUkQgW01NQkxPQ0soMCwxLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCi0JcGZtdWwJbW0wLCBNTVdPUkQgW01NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCi0JcGZtdWwJbW0xLCBNTVdPUkQgW01NQkxPQ0soMCwxLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCi0JbW92cQltbTIsIE1NV09SRCBbTU1CTE9DSygwLDIsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KLQltb3ZxCW1tMywgTU1XT1JEIFtNTUJMT0NLKDAsMyxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQotCXBmbXVsCW1tMiwgTU1XT1JEIFtNTUJMT0NLKDAsMixlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQotCXBmbXVsCW1tMywgTU1XT1JEIFtNTUJMT0NLKDAsMyxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgICAgICBtb3ZxICAgIG1tMCwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgICAgICBtb3ZxICAgIG1tMSwgTU1XT1JEIFtNTUJMT0NLKDAsMSxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgICAgICBwZm11bCAgIG1tMCwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgICAgICBwZm11bCAgIG1tMSwgTU1XT1JEIFtNTUJMT0NLKDAsMSxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgICAgICBtb3ZxICAgIG1tMiwgTU1XT1JEIFtNTUJMT0NLKDAsMixlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgICAgICBtb3ZxICAgIG1tMywgTU1XT1JEIFtNTUJMT0NLKDAsMyxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgICAgICBwZm11bCAgIG1tMiwgTU1XT1JEIFtNTUJMT0NLKDAsMixlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgICAgICBwZm11bCAgIG1tMywgTU1XT1JEIFtNTUJMT0NLKDAsMyxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQogCi0JcGZhZGQJbW0wLG1tNwkJCTsgbW0wPSgwMCAqKiAwMSAqKikKLQlwZmFkZAltbTEsbW03CQkJOyBtbTE9KDAyICoqIDAzICoqKQotCXBmYWRkCW1tMixtbTcJCQk7IG1tMD0oMDQgKiogMDUgKiopCi0JcGZhZGQJbW0zLG1tNwkJCTsgbW0xPSgwNiAqKiAwNyAqKikKKyAgICAgICAgcGZhZGQgICBtbTAsbW03ICAgICAgICAgICAgICAgICA7IG1tMD0oMDAgKiogMDEgKiopCisgICAgICAgIHBmYWRkICAgbW0xLG1tNyAgICAgICAgICAgICAgICAgOyBtbTE9KDAyICoqIDAzICoqKQorICAgICAgICBwZmFkZCAgIG1tMixtbTcgICAgICAgICAgICAgICAgIDsgbW0wPSgwNCAqKiAwNSAqKikKKyAgICAgICAgcGZhZGQgICBtbTMsbW03ICAgICAgICAgICAgICAgICA7IG1tMT0oMDYgKiogMDcgKiopCiAKLQltb3ZxICAgICAgbW00LG1tMAotCXB1bnBja2x3ZCBtbTAsbW0xCQk7IG1tMD0oMDAgMDIgKiogKiopCi0JcHVucGNraHdkIG1tNCxtbTEJCTsgbW00PSgwMSAwMyAqKiAqKikKLQltb3ZxICAgICAgbW01LG1tMgotCXB1bnBja2x3ZCBtbTIsbW0zCQk7IG1tMj0oMDQgMDYgKiogKiopCi0JcHVucGNraHdkIG1tNSxtbTMJCTsgbW01PSgwNSAwNyAqKiAqKikKKyAgICAgICAgbW92cSAgICAgIG1tNCxtbTAKKyAgICAgICAgcHVucGNrbHdkIG1tMCxtbTEgICAgICAgICAgICAgICA7IG1tMD0oMDAgMDIgKiogKiopCisgICAgICAgIHB1bnBja2h3ZCBtbTQsbW0xICAgICAgICAgICAgICAgOyBtbTQ9KDAxIDAzICoqICoqKQorICAgICAgICBtb3ZxICAgICAgbW01LG1tMgorICAgICAgICBwdW5wY2tsd2QgbW0yLG1tMyAgICAgICAgICAgICAgIDsgbW0yPSgwNCAwNiAqKiAqKikKKyAgICAgICAgcHVucGNraHdkIG1tNSxtbTMgICAgICAgICAgICAgICA7IG1tNT0oMDUgMDcgKiogKiopCiAKLQlwdW5wY2tsd2QgbW0wLG1tNAkJOyBtbTA9KDAwIDAxIDAyIDAzKQotCXB1bnBja2x3ZCBtbTIsbW01CQk7IG1tMj0oMDQgMDUgMDYgMDcpCisgICAgICAgIHB1bnBja2x3ZCBtbTAsbW00ICAgICAgICAgICAgICAgOyBtbTA9KDAwIDAxIDAyIDAzKQorICAgICAgICBwdW5wY2tsd2QgbW0yLG1tNSAgICAgICAgICAgICAgIDsgbW0yPSgwNCAwNSAwNiAwNykKIAotCW1vdnEJbW02LCBNTVdPUkQgW01NQkxPQ0soMSwwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCi0JbW92cQltbTEsIE1NV09SRCBbTU1CTE9DSygxLDEsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KLQlwZm11bAltbTYsIE1NV09SRCBbTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KLQlwZm11bAltbTEsIE1NV09SRCBbTU1CTE9DSygxLDEsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KLQltb3ZxCW1tMywgTU1XT1JEIFtNTUJMT0NLKDEsMixlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQotCW1vdnEJbW00LCBNTVdPUkQgW01NQkxPQ0soMSwzLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCi0JcGZtdWwJbW0zLCBNTVdPUkQgW01NQkxPQ0soMSwyLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCi0JcGZtdWwJbW00LCBNTVdPUkQgW01NQkxPQ0soMSwzLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgICAgIG1vdnEgICAgbW02LCBNTVdPUkQgW01NQkxPQ0soMSwwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgICAgIG1vdnEgICAgbW0xLCBNTVdPUkQgW01NQkxPQ0soMSwxLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgICAgIHBmbXVsICAgbW02LCBNTVdPUkQgW01NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgICAgIHBmbXVsICAgbW0xLCBNTVdPUkQgW01NQkxPQ0soMSwxLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgICAgIG1vdnEgICAgbW0zLCBNTVdPUkQgW01NQkxPQ0soMSwyLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgICAgIG1vdnEgICAgbW00LCBNTVdPUkQgW01NQkxPQ0soMSwzLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgICAgIHBmbXVsICAgbW0zLCBNTVdPUkQgW01NQkxPQ0soMSwyLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgICAgIHBmbXVsICAgbW00LCBNTVdPUkQgW01NQkxPQ0soMSwzLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCiAKLQlwZmFkZAltbTYsbW03CQkJOyBtbTA9KDEwICoqIDExICoqKQotCXBmYWRkCW1tMSxtbTcJCQk7IG1tND0oMTIgKiogMTMgKiopCi0JcGZhZGQJbW0zLG1tNwkJCTsgbW0wPSgxNCAqKiAxNSAqKikKLQlwZmFkZAltbTQsbW03CQkJOyBtbTQ9KDE2ICoqIDE3ICoqKQorICAgICAgICBwZmFkZCAgIG1tNixtbTcgICAgICAgICAgICAgICAgIDsgbW0wPSgxMCAqKiAxMSAqKikKKyAgICAgICAgcGZhZGQgICBtbTEsbW03ICAgICAgICAgICAgICAgICA7IG1tND0oMTIgKiogMTMgKiopCisgICAgICAgIHBmYWRkICAgbW0zLG1tNyAgICAgICAgICAgICAgICAgOyBtbTA9KDE0ICoqIDE1ICoqKQorICAgICAgICBwZmFkZCAgIG1tNCxtbTcgICAgICAgICAgICAgICAgIDsgbW00PSgxNiAqKiAxNyAqKikKIAotCW1vdnEgICAgICBtbTUsbW02Ci0JcHVucGNrbHdkIG1tNixtbTEJCTsgbW02PSgxMCAxMiAqKiAqKikKLQlwdW5wY2tod2QgbW01LG1tMQkJOyBtbTU9KDExIDEzICoqICoqKQotCW1vdnEgICAgICBtbTEsbW0zCi0JcHVucGNrbHdkIG1tMyxtbTQJCTsgbW0zPSgxNCAxNiAqKiAqKikKLQlwdW5wY2tod2QgbW0xLG1tNAkJOyBtbTE9KDE1IDE3ICoqICoqKQorICAgICAgICBtb3ZxICAgICAgbW01LG1tNgorICAgICAgICBwdW5wY2tsd2QgbW02LG1tMSAgICAgICAgICAgICAgIDsgbW02PSgxMCAxMiAqKiAqKikKKyAgICAgICAgcHVucGNraHdkIG1tNSxtbTEgICAgICAgICAgICAgICA7IG1tNT0oMTEgMTMgKiogKiopCisgICAgICAgIG1vdnEgICAgICBtbTEsbW0zCisgICAgICAgIHB1bnBja2x3ZCBtbTMsbW00ICAgICAgICAgICAgICAgOyBtbTM9KDE0IDE2ICoqICoqKQorICAgICAgICBwdW5wY2tod2QgbW0xLG1tNCAgICAgICAgICAgICAgIDsgbW0xPSgxNSAxNyAqKiAqKikKIAotCXB1bnBja2x3ZCBtbTYsbW01CQk7IG1tNj0oMTAgMTEgMTIgMTMpCi0JcHVucGNrbHdkIG1tMyxtbTEJCTsgbW0zPSgxNCAxNSAxNiAxNykKKyAgICAgICAgcHVucGNrbHdkIG1tNixtbTUgICAgICAgICAgICAgICA7IG1tNj0oMTAgMTEgMTIgMTMpCisgICAgICAgIHB1bnBja2x3ZCBtbTMsbW0xICAgICAgICAgICAgICAgOyBtbTM9KDE0IDE1IDE2IDE3KQogCi0JbW92cQlNTVdPUkQgW01NQkxPQ0soMCwwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0wCi0JbW92cQlNTVdPUkQgW01NQkxPQ0soMCwxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0yCi0JbW92cQlNTVdPUkQgW01NQkxPQ0soMSwwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW02Ci0JbW92cQlNTVdPUkQgW01NQkxPQ0soMSwxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0zCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtNTUJMT0NLKDAsMCxlZGksU0laRU9GX0pDT0VGKV0sIG1tMAorICAgICAgICBtb3ZxICAgIE1NV09SRCBbTU1CTE9DSygwLDEsZWRpLFNJWkVPRl9KQ09FRildLCBtbTIKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMSwwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW02CisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtNTUJMT0NLKDEsMSxlZGksU0laRU9GX0pDT0VGKV0sIG1tMwogCi0JYWRkCWVzaSwgYnl0ZSAxNipTSVpFT0ZfRkFTVF9GTE9BVAotCWFkZAllZHgsIGJ5dGUgMTYqU0laRU9GX0ZBU1RfRkxPQVQKLQlhZGQJZWRpLCBieXRlIDE2KlNJWkVPRl9KQ09FRgotCWRlYwllYXgKLQlqbnoJbmVhciAucXVhbnRsb29wCisgICAgICAgIGFkZCAgICAgZXNpLCBieXRlIDE2KlNJWkVPRl9GQVNUX0ZMT0FUCisgICAgICAgIGFkZCAgICAgZWR4LCBieXRlIDE2KlNJWkVPRl9GQVNUX0ZMT0FUCisgICAgICAgIGFkZCAgICAgZWRpLCBieXRlIDE2KlNJWkVPRl9KQ09FRgorICAgICAgICBkZWMgICAgIGVheAorICAgICAgICBqbnogICAgIG5lYXIgLnF1YW50bG9vcAogCi0JZmVtbXMJCTsgZW1wdHkgTU1YLzNETm93ISBzdGF0ZQorICAgICAgICBmZW1tcyAgICAgICAgICAgOyBlbXB0eSBNTVgvM0ROb3chIHN0YXRlCiAKLQlwb3AJZWRpCi0JcG9wCWVzaQotOwlwb3AJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotOwlwb3AJZWN4CQk7IHVudXNlZAotOwlwb3AJZWJ4CQk7IHVudXNlZAotCXBvcAllYnAKLQlyZXQKKyAgICAgICAgcG9wICAgICBlZGkKKyAgICAgICAgcG9wICAgICBlc2kKKzsgICAgICAgcG9wICAgICBlZHggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICAgICAgcG9wICAgICBlY3ggICAgICAgICAgICAgOyB1bnVzZWQKKzsgICAgICAgcG9wICAgICBlYnggICAgICAgICAgICAgOyB1bnVzZWQKKyAgICAgICAgcG9wICAgICBlYnAKKyAgICAgICAgcmV0CiAKIDsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCiA7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCi0JYWxpZ24JMTYKKyAgICAgICAgYWxpZ24gICAxNgpkaWZmIC0tZ2l0IGEvc2ltZC9qY3FudG1teC5hc20gYi9zaW1kL2pjcW50bW14LmFzbQppbmRleCAwOGIwOGI3Li5hZTgzN2QyIDEwMDY0NAotLS0gYS9zaW1kL2pjcW50bW14LmFzbQorKysgYi9zaW1kL2pjcW50bW14LmFzbQpAQCAtMjAsOCArMjAsOCBAQAogJWluY2x1ZGUgImpkY3QuaW5jIgogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JU0VDVElPTglTRUdfVEVYVAotCUJJVFMJMzIKKyAgICAgICAgU0VDVElPTiBTRUdfVEVYVAorICAgICAgICBCSVRTICAgIDMyCiA7CiA7IExvYWQgZGF0YSBpbnRvIHdvcmtzcGFjZSwgYXBwbHlpbmcgdW5zaWduZWQtPnNpZ25lZCBjb252ZXJzaW9uCiA7CkBAIC0zMCw5MiArMzAsOTIgQEAKIDsgICAgICAgICAgICAgICAgICAgICBEQ1RFTEVNICogd29ya3NwYWNlKTsKIDsKIAotJWRlZmluZSBzYW1wbGVfZGF0YQllYnArOAkJOyBKU0FNUEFSUkFZIHNhbXBsZV9kYXRhCi0lZGVmaW5lIHN0YXJ0X2NvbAllYnArMTIJCTsgSkRJTUVOU0lPTiBzdGFydF9jb2wKLSVkZWZpbmUgd29ya3NwYWNlCWVicCsxNgkJOyBEQ1RFTEVNICogd29ya3NwYWNlCislZGVmaW5lIHNhbXBsZV9kYXRhICAgICBlYnArOCAgICAgICAgICAgOyBKU0FNUEFSUkFZIHNhbXBsZV9kYXRhCislZGVmaW5lIHN0YXJ0X2NvbCAgICAgICBlYnArMTIgICAgICAgICAgOyBKRElNRU5TSU9OIHN0YXJ0X2NvbAorJWRlZmluZSB3b3Jrc3BhY2UgICAgICAgZWJwKzE2ICAgICAgICAgIDsgRENURUxFTSAqIHdvcmtzcGFjZQogCi0JYWxpZ24JMTYKLQlnbG9iYWwJRVhUTihqc2ltZF9jb252c2FtcF9tbXgpCisgICAgICAgIGFsaWduICAgMTYKKyAgICAgICAgZ2xvYmFsICBFWFROKGpzaW1kX2NvbnZzYW1wX21teCkKIAogRVhUTihqc2ltZF9jb252c2FtcF9tbXgpOgotCXB1c2gJZWJwCi0JbW92CWVicCxlc3AKLQlwdXNoCWVieAotOwlwdXNoCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLTsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi0JcHVzaAllc2kKLQlwdXNoCWVkaQorICAgICAgICBwdXNoICAgIGVicAorICAgICAgICBtb3YgICAgIGVicCxlc3AKKyAgICAgICAgcHVzaCAgICBlYngKKzsgICAgICAgcHVzaCAgICBlY3ggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICAgICAgcHVzaCAgICBlZHggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICAgICAgcHVzaCAgICBlc2kKKyAgICAgICAgcHVzaCAgICBlZGkKIAotCXB4b3IJbW02LG1tNgkJCTsgbW02PShhbGwgMCdzKQotCXBjbXBlcXcJbW03LG1tNwotCXBzbGx3CW1tNyw3CQkJOyBtbTc9ezB4RkY4MCAweEZGODAgMHhGRjgwIDB4RkY4MH0KKyAgICAgICAgcHhvciAgICBtbTYsbW02ICAgICAgICAgICAgICAgICA7IG1tNj0oYWxsIDAncykKKyAgICAgICAgcGNtcGVxdyBtbTcsbW03CisgICAgICAgIHBzbGx3ICAgbW03LDcgICAgICAgICAgICAgICAgICAgOyBtbTc9ezB4RkY4MCAweEZGODAgMHhGRjgwIDB4RkY4MH0KIAotCW1vdgllc2ksIEpTQU1QQVJSQVkgW3NhbXBsZV9kYXRhXQk7IChKU0FNUFJPVyAqKQotCW1vdgllYXgsIEpESU1FTlNJT04gW3N0YXJ0X2NvbF0KLQltb3YJZWRpLCBQT0lOVEVSIFt3b3Jrc3BhY2VdCTsgKERDVEVMRU0gKikKLQltb3YJZWN4LCBEQ1RTSVpFLzQKLQlhbGlnbngJMTYsNworICAgICAgICBtb3YgICAgIGVzaSwgSlNBTVBBUlJBWSBbc2FtcGxlX2RhdGFdICAgOyAoSlNBTVBST1cgKikKKyAgICAgICAgbW92ICAgICBlYXgsIEpESU1FTlNJT04gW3N0YXJ0X2NvbF0KKyAgICAgICAgbW92ICAgICBlZGksIFBPSU5URVIgW3dvcmtzcGFjZV0gICAgICAgIDsgKERDVEVMRU0gKikKKyAgICAgICAgbW92ICAgICBlY3gsIERDVFNJWkUvNAorICAgICAgICBhbGlnbnggIDE2LDcKIC5jb252bG9vcDoKLQltb3YJZWJ4LCBKU0FNUFJPVyBbZXNpKzAqU0laRU9GX0pTQU1QUk9XXQk7IChKU0FNUExFICopCi0JbW92CWVkeCwgSlNBTVBST1cgW2VzaSsxKlNJWkVPRl9KU0FNUFJPV10JOyAoSlNBTVBMRSAqKQorICAgICAgICBtb3YgICAgIGVieCwgSlNBTVBST1cgW2VzaSswKlNJWkVPRl9KU0FNUFJPV10gICA7IChKU0FNUExFICopCisgICAgICAgIG1vdiAgICAgZWR4LCBKU0FNUFJPVyBbZXNpKzEqU0laRU9GX0pTQU1QUk9XXSAgIDsgKEpTQU1QTEUgKikKIAotCW1vdnEJbW0wLCBNTVdPUkQgW2VieCtlYXgqU0laRU9GX0pTQU1QTEVdCTsgbW0wPSgwMTIzNDU2NykKLQltb3ZxCW1tMSwgTU1XT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXQk7IG1tMT0oODlBQkNERUYpCisgICAgICAgIG1vdnEgICAgbW0wLCBNTVdPUkQgW2VieCtlYXgqU0laRU9GX0pTQU1QTEVdICAgIDsgbW0wPSgwMTIzNDU2NykKKyAgICAgICAgbW92cSAgICBtbTEsIE1NV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0gICAgOyBtbTE9KDg5QUJDREVGKQogCi0JbW92CWVieCwgSlNBTVBST1cgW2VzaSsyKlNJWkVPRl9KU0FNUFJPV10JOyAoSlNBTVBMRSAqKQotCW1vdgllZHgsIEpTQU1QUk9XIFtlc2krMypTSVpFT0ZfSlNBTVBST1ddCTsgKEpTQU1QTEUgKikKKyAgICAgICAgbW92ICAgICBlYngsIEpTQU1QUk9XIFtlc2krMipTSVpFT0ZfSlNBTVBST1ddICAgOyAoSlNBTVBMRSAqKQorICAgICAgICBtb3YgICAgIGVkeCwgSlNBTVBST1cgW2VzaSszKlNJWkVPRl9KU0FNUFJPV10gICA7IChKU0FNUExFICopCiAKLQltb3ZxCW1tMiwgTU1XT1JEIFtlYngrZWF4KlNJWkVPRl9KU0FNUExFXQk7IG1tMj0oR0hJSktMTU4pCi0JbW92cQltbTMsIE1NV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0JOyBtbTM9KE9QUVJTVFVWKQorICAgICAgICBtb3ZxICAgIG1tMiwgTU1XT1JEIFtlYngrZWF4KlNJWkVPRl9KU0FNUExFXSAgICA7IG1tMj0oR0hJSktMTU4pCisgICAgICAgIG1vdnEgICAgbW0zLCBNTVdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdICAgIDsgbW0zPShPUFFSU1RVVikKIAotCW1vdnEgICAgICBtbTQsbW0wCi0JcHVucGNrbGJ3IG1tMCxtbTYJCTsgbW0wPSgwMTIzKQotCXB1bnBja2hidyBtbTQsbW02CQk7IG1tND0oNDU2NykKLQltb3ZxICAgICAgbW01LG1tMQotCXB1bnBja2xidyBtbTEsbW02CQk7IG1tMT0oODlBQikKLQlwdW5wY2toYncgbW01LG1tNgkJOyBtbTU9KENERUYpCisgICAgICAgIG1vdnEgICAgICBtbTQsbW0wCisgICAgICAgIHB1bnBja2xidyBtbTAsbW02ICAgICAgICAgICAgICAgOyBtbTA9KDAxMjMpCisgICAgICAgIHB1bnBja2hidyBtbTQsbW02ICAgICAgICAgICAgICAgOyBtbTQ9KDQ1NjcpCisgICAgICAgIG1vdnEgICAgICBtbTUsbW0xCisgICAgICAgIHB1bnBja2xidyBtbTEsbW02ICAgICAgICAgICAgICAgOyBtbTE9KDg5QUIpCisgICAgICAgIHB1bnBja2hidyBtbTUsbW02ICAgICAgICAgICAgICAgOyBtbTU9KENERUYpCiAKLQlwYWRkdwltbTAsbW03Ci0JcGFkZHcJbW00LG1tNwotCXBhZGR3CW1tMSxtbTcKLQlwYWRkdwltbTUsbW03CisgICAgICAgIHBhZGR3ICAgbW0wLG1tNworICAgICAgICBwYWRkdyAgIG1tNCxtbTcKKyAgICAgICAgcGFkZHcgICBtbTEsbW03CisgICAgICAgIHBhZGR3ICAgbW01LG1tNwogCi0JbW92cQlNTVdPUkQgW01NQkxPQ0soMCwwLGVkaSxTSVpFT0ZfRENURUxFTSldLCBtbTAKLQltb3ZxCU1NV09SRCBbTU1CTE9DSygwLDEsZWRpLFNJWkVPRl9EQ1RFTEVNKV0sIG1tNAotCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDEsMCxlZGksU0laRU9GX0RDVEVMRU0pXSwgbW0xCi0JbW92cQlNTVdPUkQgW01NQkxPQ0soMSwxLGVkaSxTSVpFT0ZfRENURUxFTSldLCBtbTUKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMCwwLGVkaSxTSVpFT0ZfRENURUxFTSldLCBtbTAKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMCwxLGVkaSxTSVpFT0ZfRENURUxFTSldLCBtbTQKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMSwwLGVkaSxTSVpFT0ZfRENURUxFTSldLCBtbTEKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMSwxLGVkaSxTSVpFT0ZfRENURUxFTSldLCBtbTUKIAotCW1vdnEgICAgICBtbTAsbW0yCi0JcHVucGNrbGJ3IG1tMixtbTYJCTsgbW0yPShHSElKKQotCXB1bnBja2hidyBtbTAsbW02CQk7IG1tMD0oS0xNTikKLQltb3ZxICAgICAgbW00LG1tMwotCXB1bnBja2xidyBtbTMsbW02CQk7IG1tMz0oT1BRUikKLQlwdW5wY2toYncgbW00LG1tNgkJOyBtbTQ9KFNUVVYpCisgICAgICAgIG1vdnEgICAgICBtbTAsbW0yCisgICAgICAgIHB1bnBja2xidyBtbTIsbW02ICAgICAgICAgICAgICAgOyBtbTI9KEdISUopCisgICAgICAgIHB1bnBja2hidyBtbTAsbW02ICAgICAgICAgICAgICAgOyBtbTA9KEtMTU4pCisgICAgICAgIG1vdnEgICAgICBtbTQsbW0zCisgICAgICAgIHB1bnBja2xidyBtbTMsbW02ICAgICAgICAgICAgICAgOyBtbTM9KE9QUVIpCisgICAgICAgIHB1bnBja2hidyBtbTQsbW02ICAgICAgICAgICAgICAgOyBtbTQ9KFNUVVYpCiAKLQlwYWRkdwltbTIsbW03Ci0JcGFkZHcJbW0wLG1tNwotCXBhZGR3CW1tMyxtbTcKLQlwYWRkdwltbTQsbW03CisgICAgICAgIHBhZGR3ICAgbW0yLG1tNworICAgICAgICBwYWRkdyAgIG1tMCxtbTcKKyAgICAgICAgcGFkZHcgICBtbTMsbW03CisgICAgICAgIHBhZGR3ICAgbW00LG1tNwogCi0JbW92cQlNTVdPUkQgW01NQkxPQ0soMiwwLGVkaSxTSVpFT0ZfRENURUxFTSldLCBtbTIKLQltb3ZxCU1NV09SRCBbTU1CTE9DSygyLDEsZWRpLFNJWkVPRl9EQ1RFTEVNKV0sIG1tMAotCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDMsMCxlZGksU0laRU9GX0RDVEVMRU0pXSwgbW0zCi0JbW92cQlNTVdPUkQgW01NQkxPQ0soMywxLGVkaSxTSVpFT0ZfRENURUxFTSldLCBtbTQKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMiwwLGVkaSxTSVpFT0ZfRENURUxFTSldLCBtbTIKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMiwxLGVkaSxTSVpFT0ZfRENURUxFTSldLCBtbTAKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMywwLGVkaSxTSVpFT0ZfRENURUxFTSldLCBtbTMKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMywxLGVkaSxTSVpFT0ZfRENURUxFTSldLCBtbTQKIAotCWFkZAllc2ksIGJ5dGUgNCpTSVpFT0ZfSlNBTVBST1cKLQlhZGQJZWRpLCBieXRlIDQqRENUU0laRSpTSVpFT0ZfRENURUxFTQotCWRlYwllY3gKLQlqbnoJc2hvcnQgLmNvbnZsb29wCisgICAgICAgIGFkZCAgICAgZXNpLCBieXRlIDQqU0laRU9GX0pTQU1QUk9XCisgICAgICAgIGFkZCAgICAgZWRpLCBieXRlIDQqRENUU0laRSpTSVpFT0ZfRENURUxFTQorICAgICAgICBkZWMgICAgIGVjeAorICAgICAgICBqbnogICAgIHNob3J0IC5jb252bG9vcAogCi0JZW1tcwkJOyBlbXB0eSBNTVggc3RhdGUKKyAgICAgICAgZW1tcyAgICAgICAgICAgIDsgZW1wdHkgTU1YIHN0YXRlCiAKLQlwb3AJZWRpCi0JcG9wCWVzaQotOwlwb3AJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotOwlwb3AJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotCXBvcAllYngKLQlwb3AJZWJwCi0JcmV0CisgICAgICAgIHBvcCAgICAgZWRpCisgICAgICAgIHBvcCAgICAgZXNpCis7ICAgICAgIHBvcCAgICAgZWR4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgICAgIHBvcCAgICAgZWN4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgICAgIHBvcCAgICAgZWJ4CisgICAgICAgIHBvcCAgICAgZWJwCisgICAgICAgIHJldAogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiA7CkBAIC0xMzUsMTQwICsxMzUsMTQwIEBACiAlZGVmaW5lIFNDQUxFKG0sbixiKSAgICAgIE1NQkxPQ0soRENUU0laRSoyKyhtKSwobiksKGIpLFNJWkVPRl9EQ1RFTEVNKQogJWRlZmluZSBTSElGVChtLG4sYikgICAgICBNTUJMT0NLKERDVFNJWkUqMysobSksKG4pLChiKSxTSVpFT0ZfRENURUxFTSkKIAotJWRlZmluZSBjb2VmX2Jsb2NrCWVicCs4CQk7IEpDT0VGUFRSIGNvZWZfYmxvY2sKLSVkZWZpbmUgZGl2aXNvcnMJZWJwKzEyCQk7IERDVEVMRU0gKiBkaXZpc29ycwotJWRlZmluZSB3b3Jrc3BhY2UJZWJwKzE2CQk7IERDVEVMRU0gKiB3b3Jrc3BhY2UKKyVkZWZpbmUgY29lZl9ibG9jayAgICAgIGVicCs4ICAgICAgICAgICA7IEpDT0VGUFRSIGNvZWZfYmxvY2sKKyVkZWZpbmUgZGl2aXNvcnMgICAgICAgIGVicCsxMiAgICAgICAgICA7IERDVEVMRU0gKiBkaXZpc29ycworJWRlZmluZSB3b3Jrc3BhY2UgICAgICAgZWJwKzE2ICAgICAgICAgIDsgRENURUxFTSAqIHdvcmtzcGFjZQogCi0JYWxpZ24JMTYKLQlnbG9iYWwJRVhUTihqc2ltZF9xdWFudGl6ZV9tbXgpCisgICAgICAgIGFsaWduICAgMTYKKyAgICAgICAgZ2xvYmFsICBFWFROKGpzaW1kX3F1YW50aXplX21teCkKIAogRVhUTihqc2ltZF9xdWFudGl6ZV9tbXgpOgotCXB1c2gJZWJwCi0JbW92CWVicCxlc3AKLTsJcHVzaAllYngJCTsgdW51c2VkCi07CXB1c2gJZWN4CQk7IHVudXNlZAotOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLQlwdXNoCWVzaQotCXB1c2gJZWRpCisgICAgICAgIHB1c2ggICAgZWJwCisgICAgICAgIG1vdiAgICAgZWJwLGVzcAorOyAgICAgICBwdXNoICAgIGVieCAgICAgICAgICAgICA7IHVudXNlZAorOyAgICAgICBwdXNoICAgIGVjeCAgICAgICAgICAgICA7IHVudXNlZAorOyAgICAgICBwdXNoICAgIGVkeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgICAgICBwdXNoICAgIGVzaQorICAgICAgICBwdXNoICAgIGVkaQogCi0JbW92CWVzaSwgUE9JTlRFUiBbd29ya3NwYWNlXQotCW1vdgllZHgsIFBPSU5URVIgW2Rpdmlzb3JzXQotCW1vdgllZGksIEpDT0VGUFRSIFtjb2VmX2Jsb2NrXQotCW1vdglhaCwgMgotCWFsaWdueAkxNiw3CisgICAgICAgIG1vdiAgICAgZXNpLCBQT0lOVEVSIFt3b3Jrc3BhY2VdCisgICAgICAgIG1vdiAgICAgZWR4LCBQT0lOVEVSIFtkaXZpc29yc10KKyAgICAgICAgbW92ICAgICBlZGksIEpDT0VGUFRSIFtjb2VmX2Jsb2NrXQorICAgICAgICBtb3YgICAgIGFoLCAyCisgICAgICAgIGFsaWdueCAgMTYsNwogLnF1YW50bG9vcDE6Ci0JbW92CWFsLCBEQ1RTSVpFMi84LzIKLQlhbGlnbngJMTYsNworICAgICAgICBtb3YgICAgIGFsLCBEQ1RTSVpFMi84LzIKKyAgICAgICAgYWxpZ254ICAxNiw3CiAucXVhbnRsb29wMjoKLQltb3ZxCW1tMiwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0RDVEVMRU0pXQotCW1vdnEJbW0zLCBNTVdPUkQgW01NQkxPQ0soMCwxLGVzaSxTSVpFT0ZfRENURUxFTSldCisgICAgICAgIG1vdnEgICAgbW0yLCBNTVdPUkQgW01NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfRENURUxFTSldCisgICAgICAgIG1vdnEgICAgbW0zLCBNTVdPUkQgW01NQkxPQ0soMCwxLGVzaSxTSVpFT0ZfRENURUxFTSldCiAKLQltb3ZxCW1tMCxtbTIKLQltb3ZxCW1tMSxtbTMKKyAgICAgICAgbW92cSAgICBtbTAsbW0yCisgICAgICAgIG1vdnEgICAgbW0xLG1tMwogCi0JcHNyYXcJbW0yLChXT1JEX0JJVC0xKSAgOyAtMSBpZiB2YWx1ZSA8IDAsIDAgb3RoZXJ3aXNlCi0JcHNyYXcJbW0zLChXT1JEX0JJVC0xKQorICAgICAgICBwc3JhdyAgIG1tMiwoV09SRF9CSVQtMSkgIDsgLTEgaWYgdmFsdWUgPCAwLCAwIG90aGVyd2lzZQorICAgICAgICBwc3JhdyAgIG1tMywoV09SRF9CSVQtMSkKIAotCXB4b3IJbW0wLG1tMiAgIDsgdmFsID0gLXZhbAotCXB4b3IJbW0xLG1tMwotCXBzdWJ3CW1tMCxtbTIKLQlwc3VidwltbTEsbW0zCisgICAgICAgIHB4b3IgICAgbW0wLG1tMiAgIDsgdmFsID0gLXZhbAorICAgICAgICBweG9yICAgIG1tMSxtbTMKKyAgICAgICAgcHN1YncgICBtbTAsbW0yCisgICAgICAgIHBzdWJ3ICAgbW0xLG1tMwogCi0JOwotCTsgTU1YIGlzIGFuIGFubm95aW5nbHkgY3JhcHB5IGluc3RydWN0aW9uIHNldC4gSXQgaGFzIHR3bwotCTsgbWlzZmVhdHVyZXMgdGhhdCBhcmUgY2F1c2luZyBwcm9ibGVtcyBoZXJlOgotCTsKLQk7IC0gQWxsIG11bHRpcGxpY2F0aW9ucyBhcmUgc2lnbmVkLgotCTsKLQk7IC0gVGhlIHNlY29uZCBvcGVyYW5kIGZvciB0aGUgc2hpZnRzIGlzIG5vdCB0cmVhdGVkIGFzIHBhY2tlZC4KLQk7Ci0JOwotCTsgV2Ugd29yayBhcm91bmQgdGhlIGZpcnN0IHByb2JsZW0gYnkgaW1wbGVtZW50aW5nIHRoaXMgYWxnb3JpdGhtOgotCTsKLQk7IHVuc2lnbmVkIGxvbmcgdW5zaWduZWRfbXVsdGlwbHkodW5zaWduZWQgc2hvcnQgeCwgdW5zaWduZWQgc2hvcnQgeSkKLQk7IHsKLQk7ICAgZW51bSB7IFNIT1JUX0JJVCA9IDE2IH07Ci0JOyAgIHNpZ25lZCBzaG9ydCBzeCA9IChzaWduZWQgc2hvcnQpIHg7Ci0JOyAgIHNpZ25lZCBzaG9ydCBzeSA9IChzaWduZWQgc2hvcnQpIHk7Ci0JOyAgIHNpZ25lZCBsb25nIHN6OwotCTsgCi0JOyAgIHN6ID0gKGxvbmcpIHN4ICogKGxvbmcpIHN5OyAgICAgLyogc2lnbmVkIG11bHRpcGx5ICovCi0JOyAKLQk7ICAgaWYgKHN4IDwgMCkgc3ogKz0gKGxvbmcpIHN5IDw8IFNIT1JUX0JJVDsKLQk7ICAgaWYgKHN5IDwgMCkgc3ogKz0gKGxvbmcpIHN4IDw8IFNIT1JUX0JJVDsKLQk7IAotCTsgICByZXR1cm4gKHVuc2lnbmVkIGxvbmcpIHN6OwotCTsgfQotCTsKLQk7IChub3RlIHRoYXQgYSBuZWdhdGl2ZSBzeCBhZGRzIF9zeV8gYW5kIHZpY2UgdmVyc2EpCi0JOwotCTsgRm9yIHRoZSBzZWNvbmQgcHJvYmxlbSwgd2UgcmVwbGFjZSB0aGUgc2hpZnQgYnkgYSBtdWx0aXBsaWNhdGlvbi4KLQk7IFVuZm9ydHVuYXRlbHkgdGhhdCBtZWFucyB3ZSBoYXZlIHRvIGRlYWwgd2l0aCB0aGUgc2lnbmVkIGlzc3VlIGFnYWluLgotCTsKKyAgICAgICAgOworICAgICAgICA7IE1NWCBpcyBhbiBhbm5veWluZ2x5IGNyYXBweSBpbnN0cnVjdGlvbiBzZXQuIEl0IGhhcyB0d28KKyAgICAgICAgOyBtaXNmZWF0dXJlcyB0aGF0IGFyZSBjYXVzaW5nIHByb2JsZW1zIGhlcmU6CisgICAgICAgIDsKKyAgICAgICAgOyAtIEFsbCBtdWx0aXBsaWNhdGlvbnMgYXJlIHNpZ25lZC4KKyAgICAgICAgOworICAgICAgICA7IC0gVGhlIHNlY29uZCBvcGVyYW5kIGZvciB0aGUgc2hpZnRzIGlzIG5vdCB0cmVhdGVkIGFzIHBhY2tlZC4KKyAgICAgICAgOworICAgICAgICA7CisgICAgICAgIDsgV2Ugd29yayBhcm91bmQgdGhlIGZpcnN0IHByb2JsZW0gYnkgaW1wbGVtZW50aW5nIHRoaXMgYWxnb3JpdGhtOgorICAgICAgICA7CisgICAgICAgIDsgdW5zaWduZWQgbG9uZyB1bnNpZ25lZF9tdWx0aXBseSh1bnNpZ25lZCBzaG9ydCB4LCB1bnNpZ25lZCBzaG9ydCB5KQorICAgICAgICA7IHsKKyAgICAgICAgOyAgIGVudW0geyBTSE9SVF9CSVQgPSAxNiB9OworICAgICAgICA7ICAgc2lnbmVkIHNob3J0IHN4ID0gKHNpZ25lZCBzaG9ydCkgeDsKKyAgICAgICAgOyAgIHNpZ25lZCBzaG9ydCBzeSA9IChzaWduZWQgc2hvcnQpIHk7CisgICAgICAgIDsgICBzaWduZWQgbG9uZyBzejsKKyAgICAgICAgOworICAgICAgICA7ICAgc3ogPSAobG9uZykgc3ggKiAobG9uZykgc3k7ICAgICAvKiBzaWduZWQgbXVsdGlwbHkgKi8KKyAgICAgICAgOworICAgICAgICA7ICAgaWYgKHN4IDwgMCkgc3ogKz0gKGxvbmcpIHN5IDw8IFNIT1JUX0JJVDsKKyAgICAgICAgOyAgIGlmIChzeSA8IDApIHN6ICs9IChsb25nKSBzeCA8PCBTSE9SVF9CSVQ7CisgICAgICAgIDsKKyAgICAgICAgOyAgIHJldHVybiAodW5zaWduZWQgbG9uZykgc3o7CisgICAgICAgIDsgfQorICAgICAgICA7CisgICAgICAgIDsgKG5vdGUgdGhhdCBhIG5lZ2F0aXZlIHN4IGFkZHMgX3N5XyBhbmQgdmljZSB2ZXJzYSkKKyAgICAgICAgOworICAgICAgICA7IEZvciB0aGUgc2Vjb25kIHByb2JsZW0sIHdlIHJlcGxhY2UgdGhlIHNoaWZ0IGJ5IGEgbXVsdGlwbGljYXRpb24uCisgICAgICAgIDsgVW5mb3J0dW5hdGVseSB0aGF0IG1lYW5zIHdlIGhhdmUgdG8gZGVhbCB3aXRoIHRoZSBzaWduZWQgaXNzdWUgYWdhaW4uCisgICAgICAgIDsKIAotCXBhZGR3CW1tMCwgTU1XT1JEIFtDT1JSRUNUSU9OKDAsMCxlZHgpXSAgIDsgY29ycmVjdGlvbiArIHJvdW5kZmFjdG9yCi0JcGFkZHcJbW0xLCBNTVdPUkQgW0NPUlJFQ1RJT04oMCwxLGVkeCldCisgICAgICAgIHBhZGR3ICAgbW0wLCBNTVdPUkQgW0NPUlJFQ1RJT04oMCwwLGVkeCldICAgOyBjb3JyZWN0aW9uICsgcm91bmRmYWN0b3IKKyAgICAgICAgcGFkZHcgICBtbTEsIE1NV09SRCBbQ09SUkVDVElPTigwLDEsZWR4KV0KIAotCW1vdnEJbW00LG1tMCAgIDsgc3RvcmUgY3VycmVudCB2YWx1ZSBmb3IgbGF0ZXIKLQltb3ZxCW1tNSxtbTEKLQlwbXVsaHcJbW0wLCBNTVdPUkQgW1JFQ0lQUk9DQUwoMCwwLGVkeCldICAgOyByZWNpcHJvY2FsCi0JcG11bGh3CW1tMSwgTU1XT1JEIFtSRUNJUFJPQ0FMKDAsMSxlZHgpXQotCXBhZGR3CW1tMCxtbTQJCTsgcmVjaXByb2NhbCBpcyBhbHdheXMgbmVnYXRpdmUgKE1TQj0xKSwKLQlwYWRkdwltbTEsbW01ICAgOyBzbyB3ZSBhbHdheXMgbmVlZCB0byBhZGQgdGhlIGluaXRpYWwgdmFsdWUKLQkgICAgICAgICAgICAgICAgOyAoaW5wdXQgdmFsdWUgaXMgbmV2ZXIgbmVnYXRpdmUgYXMgd2UKLQkgICAgICAgICAgICAgICAgOyBpbnZlcnRlZCBpdCBhdCB0aGUgc3RhcnQgb2YgdGhpcyByb3V0aW5lKQorICAgICAgICBtb3ZxICAgIG1tNCxtbTAgICA7IHN0b3JlIGN1cnJlbnQgdmFsdWUgZm9yIGxhdGVyCisgICAgICAgIG1vdnEgICAgbW01LG1tMQorICAgICAgICBwbXVsaHcgIG1tMCwgTU1XT1JEIFtSRUNJUFJPQ0FMKDAsMCxlZHgpXSAgIDsgcmVjaXByb2NhbAorICAgICAgICBwbXVsaHcgIG1tMSwgTU1XT1JEIFtSRUNJUFJPQ0FMKDAsMSxlZHgpXQorICAgICAgICBwYWRkdyAgIG1tMCxtbTQgICAgICAgICA7IHJlY2lwcm9jYWwgaXMgYWx3YXlzIG5lZ2F0aXZlIChNU0I9MSksCisgICAgICAgIHBhZGR3ICAgbW0xLG1tNSAgIDsgc28gd2UgYWx3YXlzIG5lZWQgdG8gYWRkIHRoZSBpbml0aWFsIHZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICA7IChpbnB1dCB2YWx1ZSBpcyBuZXZlciBuZWdhdGl2ZSBhcyB3ZQorICAgICAgICAgICAgICAgICAgICAgICAgOyBpbnZlcnRlZCBpdCBhdCB0aGUgc3RhcnQgb2YgdGhpcyByb3V0aW5lKQogCi0JOyBoZXJlIGl0IGdldHMgYSBiaXQgdHJpY2t5IGFzIGJvdGggc2NhbGUKLQk7IGFuZCBtbTAvbW0xIGNhbiBiZSBuZWdhdGl2ZQotCW1vdnEJbW02LCBNTVdPUkQgW1NDQUxFKDAsMCxlZHgpXQk7IHNjYWxlCi0JbW92cQltbTcsIE1NV09SRCBbU0NBTEUoMCwxLGVkeCldCi0JbW92cQltbTQsbW0wCi0JbW92cQltbTUsbW0xCi0JcG11bGh3CW1tMCxtbTYKLQlwbXVsaHcJbW0xLG1tNworICAgICAgICA7IGhlcmUgaXQgZ2V0cyBhIGJpdCB0cmlja3kgYXMgYm90aCBzY2FsZQorICAgICAgICA7IGFuZCBtbTAvbW0xIGNhbiBiZSBuZWdhdGl2ZQorICAgICAgICBtb3ZxICAgIG1tNiwgTU1XT1JEIFtTQ0FMRSgwLDAsZWR4KV0gICAgOyBzY2FsZQorICAgICAgICBtb3ZxICAgIG1tNywgTU1XT1JEIFtTQ0FMRSgwLDEsZWR4KV0KKyAgICAgICAgbW92cSAgICBtbTQsbW0wCisgICAgICAgIG1vdnEgICAgbW01LG1tMQorICAgICAgICBwbXVsaHcgIG1tMCxtbTYKKyAgICAgICAgcG11bGh3ICBtbTEsbW03CiAKLQlwc3JhdwltbTYsKFdPUkRfQklULTEpICAgIDsgZGV0ZXJtaW5lIGlmIHNjYWxlIGlzIG5lZ2F0aXZlCi0JcHNyYXcJbW03LChXT1JEX0JJVC0xKQorICAgICAgICBwc3JhdyAgIG1tNiwoV09SRF9CSVQtMSkgICAgOyBkZXRlcm1pbmUgaWYgc2NhbGUgaXMgbmVnYXRpdmUKKyAgICAgICAgcHNyYXcgICBtbTcsKFdPUkRfQklULTEpCiAKLQlwYW5kCW1tNixtbTQgICAgICAgICAgICAgOyBhbmQgYWRkIGlucHV0IGlmIGl0IGlzCi0JcGFuZAltbTcsbW01Ci0JcGFkZHcJbW0wLG1tNgotCXBhZGR3CW1tMSxtbTcKKyAgICAgICAgcGFuZCAgICBtbTYsbW00ICAgICAgICAgICAgIDsgYW5kIGFkZCBpbnB1dCBpZiBpdCBpcworICAgICAgICBwYW5kICAgIG1tNyxtbTUKKyAgICAgICAgcGFkZHcgICBtbTAsbW02CisgICAgICAgIHBhZGR3ICAgbW0xLG1tNwogCi0JcHNyYXcJbW00LChXT1JEX0JJVC0xKSAgICA7IHRoZW4gY2hlY2sgaWYgbmVnYXRpdmUgaW5wdXQgCi0JcHNyYXcJbW01LChXT1JEX0JJVC0xKQorICAgICAgICBwc3JhdyAgIG1tNCwoV09SRF9CSVQtMSkgICAgOyB0aGVuIGNoZWNrIGlmIG5lZ2F0aXZlIGlucHV0CisgICAgICAgIHBzcmF3ICAgbW01LChXT1JEX0JJVC0xKQogCi0JcGFuZAltbTQsIE1NV09SRCBbU0NBTEUoMCwwLGVkeCldCTsgYW5kIGFkZCBzY2FsZSBpZiBpdCBpcwotCXBhbmQJbW01LCBNTVdPUkQgW1NDQUxFKDAsMSxlZHgpXQotCXBhZGR3CW1tMCxtbTQKLQlwYWRkdwltbTEsbW01CisgICAgICAgIHBhbmQgICAgbW00LCBNTVdPUkQgW1NDQUxFKDAsMCxlZHgpXSAgICA7IGFuZCBhZGQgc2NhbGUgaWYgaXQgaXMKKyAgICAgICAgcGFuZCAgICBtbTUsIE1NV09SRCBbU0NBTEUoMCwxLGVkeCldCisgICAgICAgIHBhZGR3ICAgbW0wLG1tNAorICAgICAgICBwYWRkdyAgIG1tMSxtbTUKIAotCXB4b3IJbW0wLG1tMiAgIDsgdmFsID0gLXZhbAotCXB4b3IJbW0xLG1tMwotCXBzdWJ3CW1tMCxtbTIKLQlwc3VidwltbTEsbW0zCisgICAgICAgIHB4b3IgICAgbW0wLG1tMiAgIDsgdmFsID0gLXZhbAorICAgICAgICBweG9yICAgIG1tMSxtbTMKKyAgICAgICAgcHN1YncgICBtbTAsbW0yCisgICAgICAgIHBzdWJ3ICAgbW0xLG1tMwogCi0JbW92cQlNTVdPUkQgW01NQkxPQ0soMCwwLGVkaSxTSVpFT0ZfRENURUxFTSldLCBtbTAKLQltb3ZxCU1NV09SRCBbTU1CTE9DSygwLDEsZWRpLFNJWkVPRl9EQ1RFTEVNKV0sIG1tMQorICAgICAgICBtb3ZxICAgIE1NV09SRCBbTU1CTE9DSygwLDAsZWRpLFNJWkVPRl9EQ1RFTEVNKV0sIG1tMAorICAgICAgICBtb3ZxICAgIE1NV09SRCBbTU1CTE9DSygwLDEsZWRpLFNJWkVPRl9EQ1RFTEVNKV0sIG1tMQogCi0JYWRkCWVzaSwgYnl0ZSA4KlNJWkVPRl9EQ1RFTEVNCi0JYWRkCWVkeCwgYnl0ZSA4KlNJWkVPRl9EQ1RFTEVNCi0JYWRkCWVkaSwgYnl0ZSA4KlNJWkVPRl9KQ09FRgotCWRlYwlhbAotCWpuegluZWFyIC5xdWFudGxvb3AyCi0JZGVjCWFoCi0Jam56CW5lYXIgLnF1YW50bG9vcDEJOyB0byBhdm9pZCBicmFuY2ggbWlzcHJlZGljdGlvbgorICAgICAgICBhZGQgICAgIGVzaSwgYnl0ZSA4KlNJWkVPRl9EQ1RFTEVNCisgICAgICAgIGFkZCAgICAgZWR4LCBieXRlIDgqU0laRU9GX0RDVEVMRU0KKyAgICAgICAgYWRkICAgICBlZGksIGJ5dGUgOCpTSVpFT0ZfSkNPRUYKKyAgICAgICAgZGVjICAgICBhbAorICAgICAgICBqbnogICAgIG5lYXIgLnF1YW50bG9vcDIKKyAgICAgICAgZGVjICAgICBhaAorICAgICAgICBqbnogICAgIG5lYXIgLnF1YW50bG9vcDEgICAgICAgIDsgdG8gYXZvaWQgYnJhbmNoIG1pc3ByZWRpY3Rpb24KIAotCWVtbXMJCTsgZW1wdHkgTU1YIHN0YXRlCisgICAgICAgIGVtbXMgICAgICAgICAgICA7IGVtcHR5IE1NWCBzdGF0ZQogCi0JcG9wCWVkaQotCXBvcAllc2kKLTsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLTsJcG9wCWVjeAkJOyB1bnVzZWQKLTsJcG9wCWVieAkJOyB1bnVzZWQKLQlwb3AJZWJwCi0JcmV0CisgICAgICAgIHBvcCAgICAgZWRpCisgICAgICAgIHBvcCAgICAgZXNpCis7ICAgICAgIHBvcCAgICAgZWR4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgICAgIHBvcCAgICAgZWN4ICAgICAgICAgICAgIDsgdW51c2VkCis7ICAgICAgIHBvcCAgICAgZWJ4ICAgICAgICAgICAgIDsgdW51c2VkCisgICAgICAgIHBvcCAgICAgZWJwCisgICAgICAgIHJldAogCiA7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQogOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgotCWFsaWduCTE2CisgICAgICAgIGFsaWduICAgMTYKZGlmZiAtLWdpdCBhL3NpbWQvamNxbnRzMmYtNjQuYXNtIGIvc2ltZC9qY3FudHMyZi02NC5hc20KaW5kZXggZDBlZmExYi4uMDc1MjU0MiAxMDA2NDQKLS0tIGEvc2ltZC9qY3FudHMyZi02NC5hc20KKysrIGIvc2ltZC9qY3FudHMyZi02NC5hc20KQEAgLTIxLDggKzIxLDggQEAKICVpbmNsdWRlICJqZGN0LmluYyIKIAogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCVNFQ1RJT04JU0VHX1RFWFQKLQlCSVRTCTY0CisgICAgICAgIFNFQ1RJT04gU0VHX1RFWFQKKyAgICAgICAgQklUUyAgICA2NAogOwogOyBMb2FkIGRhdGEgaW50byB3b3Jrc3BhY2UsIGFwcGx5aW5nIHVuc2lnbmVkLT5zaWduZWQgY29udmVyc2lvbgogOwpAQCAtMzUsNjUgKzM1LDY1IEBACiA7IHIxMSA9IEpESU1FTlNJT04gc3RhcnRfY29sCiA7IHIxMiA9IEZBU1RfRkxPQVQgKiB3b3Jrc3BhY2UKIAotCWFsaWduCTE2Ci0JZ2xvYmFsCUVYVE4oanNpbWRfY29udnNhbXBfZmxvYXRfc3NlMikKKyAgICAgICAgYWxpZ24gICAxNgorICAgICAgICBnbG9iYWwgIEVYVE4oanNpbWRfY29udnNhbXBfZmxvYXRfc3NlMikKIAogRVhUTihqc2ltZF9jb252c2FtcF9mbG9hdF9zc2UyKToKLQlwdXNoCXJicAotCW1vdglyYXgscnNwCi0JbW92CXJicCxyc3AKLQljb2xsZWN0X2FyZ3MKLQlwdXNoCXJieAorICAgICAgICBwdXNoICAgIHJicAorICAgICAgICBtb3YgICAgIHJheCxyc3AKKyAgICAgICAgbW92ICAgICByYnAscnNwCisgICAgICAgIGNvbGxlY3RfYXJncworICAgICAgICBwdXNoICAgIHJieAogCi0JcGNtcGVxdyAgeG1tNyx4bW03Ci0JcHNsbHcgICAgeG1tNyw3Ci0JcGFja3Nzd2IgeG1tNyx4bW03CQk7IHhtbTcgPSBQQl9DRU5URVJKU0FNUExFICgweDgwODA4MC4uKQorICAgICAgICBwY21wZXF3ICB4bW03LHhtbTcKKyAgICAgICAgcHNsbHcgICAgeG1tNyw3CisgICAgICAgIHBhY2tzc3diIHhtbTcseG1tNyAgICAgICAgICAgICAgOyB4bW03ID0gUEJfQ0VOVEVSSlNBTVBMRSAoMHg4MDgwODAuLikKIAotCW1vdiByc2ksIHIxMAotCW1vdglyYXgsIHIxMQotCW1vdiByZGksIHIxMgotCW1vdglyY3gsIERDVFNJWkUvMgorICAgICAgICBtb3YgcnNpLCByMTAKKyAgICAgICAgbW92ICAgICByYXgsIHIxMQorICAgICAgICBtb3YgcmRpLCByMTIKKyAgICAgICAgbW92ICAgICByY3gsIERDVFNJWkUvMgogLmNvbnZsb29wOgotCW1vdglyYngsIEpTQU1QUk9XIFtyc2krMCpTSVpFT0ZfSlNBTVBST1ddCTsgKEpTQU1QTEUgKikKLQltb3YgcmR4LCBKU0FNUFJPVyBbcnNpKzEqU0laRU9GX0pTQU1QUk9XXQk7IChKU0FNUExFICopCisgICAgICAgIG1vdiAgICAgcmJ4LCBKU0FNUFJPVyBbcnNpKzAqU0laRU9GX0pTQU1QUk9XXSAgIDsgKEpTQU1QTEUgKikKKyAgICAgICAgbW92IHJkeCwgSlNBTVBST1cgW3JzaSsxKlNJWkVPRl9KU0FNUFJPV10gICAgICAgOyAoSlNBTVBMRSAqKQogCi0JbW92cQl4bW0wLCBYTU1fTU1XT1JEIFtyYngrcmF4KlNJWkVPRl9KU0FNUExFXQotCW1vdnEJeG1tMSwgWE1NX01NV09SRCBbcmR4K3JheCpTSVpFT0ZfSlNBTVBMRV0KKyAgICAgICAgbW92cSAgICB4bW0wLCBYTU1fTU1XT1JEIFtyYngrcmF4KlNJWkVPRl9KU0FNUExFXQorICAgICAgICBtb3ZxICAgIHhtbTEsIFhNTV9NTVdPUkQgW3JkeCtyYXgqU0laRU9GX0pTQU1QTEVdCiAKLQlwc3ViYgl4bW0wLHhtbTcJCQk7IHhtbTA9KDAxMjM0NTY3KQotCXBzdWJiCXhtbTEseG1tNwkJCTsgeG1tMT0oODlBQkNERUYpCisgICAgICAgIHBzdWJiICAgeG1tMCx4bW03ICAgICAgICAgICAgICAgICAgICAgICA7IHhtbTA9KDAxMjM0NTY3KQorICAgICAgICBwc3ViYiAgIHhtbTEseG1tNyAgICAgICAgICAgICAgICAgICAgICAgOyB4bW0xPSg4OUFCQ0RFRikKIAotCXB1bnBja2xidyB4bW0wLHhtbTAJCQk7IHhtbTA9KCowKjEqMiozKjQqNSo2KjcpCi0JcHVucGNrbGJ3IHhtbTEseG1tMQkJCTsgeG1tMT0oKjgqOSpBKkIqQypEKkUqRikKKyAgICAgICAgcHVucGNrbGJ3IHhtbTAseG1tMCAgICAgICAgICAgICAgICAgICAgIDsgeG1tMD0oKjAqMSoyKjMqNCo1KjYqNykKKyAgICAgICAgcHVucGNrbGJ3IHhtbTEseG1tMSAgICAgICAgICAgICAgICAgICAgIDsgeG1tMT0oKjgqOSpBKkIqQypEKkUqRikKIAotCXB1bnBja2x3ZCB4bW0yLHhtbTAJCQk7IHhtbTI9KCoqKjAqKioxKioqMioqKjMpCi0JcHVucGNraHdkIHhtbTAseG1tMAkJCTsgeG1tMD0oKioqNCoqKjUqKio2KioqNykKLQlwdW5wY2tsd2QgeG1tMyx4bW0xCQkJOyB4bW0zPSgqKio4KioqOSoqKkEqKipCKQotCXB1bnBja2h3ZCB4bW0xLHhtbTEJCQk7IHhtbTE9KCoqKkMqKipEKioqRSoqKkYpCisgICAgICAgIHB1bnBja2x3ZCB4bW0yLHhtbTAgICAgICAgICAgICAgICAgICAgICA7IHhtbTI9KCoqKjAqKioxKioqMioqKjMpCisgICAgICAgIHB1bnBja2h3ZCB4bW0wLHhtbTAgICAgICAgICAgICAgICAgICAgICA7IHhtbTA9KCoqKjQqKio1KioqNioqKjcpCisgICAgICAgIHB1bnBja2x3ZCB4bW0zLHhtbTEgICAgICAgICAgICAgICAgICAgICA7IHhtbTM9KCoqKjgqKio5KioqQSoqKkIpCisgICAgICAgIHB1bnBja2h3ZCB4bW0xLHhtbTEgICAgICAgICAgICAgICAgICAgICA7IHhtbTE9KCoqKkMqKipEKioqRSoqKkYpCiAKLQlwc3JhZCAgICAgeG1tMiwoRFdPUkRfQklULUJZVEVfQklUKQk7IHhtbTI9KDAxMjMpCi0JcHNyYWQgICAgIHhtbTAsKERXT1JEX0JJVC1CWVRFX0JJVCkJOyB4bW0wPSg0NTY3KQotCWN2dGRxMnBzICB4bW0yLHhtbTIJCQk7IHhtbTI9KDAxMjMpCi0JY3Z0ZHEycHMgIHhtbTAseG1tMAkJCTsgeG1tMD0oNDU2NykKLQlwc3JhZCAgICAgeG1tMywoRFdPUkRfQklULUJZVEVfQklUKQk7IHhtbTM9KDg5QUIpCi0JcHNyYWQgICAgIHhtbTEsKERXT1JEX0JJVC1CWVRFX0JJVCkJOyB4bW0xPShDREVGKQotCWN2dGRxMnBzICB4bW0zLHhtbTMJCQk7IHhtbTM9KDg5QUIpCi0JY3Z0ZHEycHMgIHhtbTEseG1tMQkJCTsgeG1tMT0oQ0RFRikKKyAgICAgICAgcHNyYWQgICAgIHhtbTIsKERXT1JEX0JJVC1CWVRFX0JJVCkgICAgIDsgeG1tMj0oMDEyMykKKyAgICAgICAgcHNyYWQgICAgIHhtbTAsKERXT1JEX0JJVC1CWVRFX0JJVCkgICAgIDsgeG1tMD0oNDU2NykKKyAgICAgICAgY3Z0ZHEycHMgIHhtbTIseG1tMiAgICAgICAgICAgICAgICAgICAgIDsgeG1tMj0oMDEyMykKKyAgICAgICAgY3Z0ZHEycHMgIHhtbTAseG1tMCAgICAgICAgICAgICAgICAgICAgIDsgeG1tMD0oNDU2NykKKyAgICAgICAgcHNyYWQgICAgIHhtbTMsKERXT1JEX0JJVC1CWVRFX0JJVCkgICAgIDsgeG1tMz0oODlBQikKKyAgICAgICAgcHNyYWQgICAgIHhtbTEsKERXT1JEX0JJVC1CWVRFX0JJVCkgICAgIDsgeG1tMT0oQ0RFRikKKyAgICAgICAgY3Z0ZHEycHMgIHhtbTMseG1tMyAgICAgICAgICAgICAgICAgICAgIDsgeG1tMz0oODlBQikKKyAgICAgICAgY3Z0ZHEycHMgIHhtbTEseG1tMSAgICAgICAgICAgICAgICAgICAgIDsgeG1tMT0oQ0RFRikKIAotCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygwLDAscmRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTIKLQltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMCwxLHJkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0wCi0JbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDEsMCxyZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMwotCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygxLDEscmRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTEKKyAgICAgICAgbW92YXBzICBYTU1XT1JEIFtYTU1CTE9DSygwLDAscmRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTIKKyAgICAgICAgbW92YXBzICBYTU1XT1JEIFtYTU1CTE9DSygwLDEscmRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTAKKyAgICAgICAgbW92YXBzICBYTU1XT1JEIFtYTU1CTE9DSygxLDAscmRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTMKKyAgICAgICAgbW92YXBzICBYTU1XT1JEIFtYTU1CTE9DSygxLDEscmRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTEKIAotCWFkZAlyc2ksIGJ5dGUgMipTSVpFT0ZfSlNBTVBST1cKLQlhZGQJcmRpLCBieXRlIDIqRENUU0laRSpTSVpFT0ZfRkFTVF9GTE9BVAotCWRlYwlyY3gKLQlqbnoJc2hvcnQgLmNvbnZsb29wCisgICAgICAgIGFkZCAgICAgcnNpLCBieXRlIDIqU0laRU9GX0pTQU1QUk9XCisgICAgICAgIGFkZCAgICAgcmRpLCBieXRlIDIqRENUU0laRSpTSVpFT0ZfRkFTVF9GTE9BVAorICAgICAgICBkZWMgICAgIHJjeAorICAgICAgICBqbnogICAgIHNob3J0IC5jb252bG9vcAogCi0JcG9wCXJieAotCXVuY29sbGVjdF9hcmdzCi0JcG9wCXJicAotCXJldAorICAgICAgICBwb3AgICAgIHJieAorICAgICAgICB1bmNvbGxlY3RfYXJncworICAgICAgICBwb3AgICAgIHJicAorICAgICAgICByZXQKIAogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMDksNTAgKzEwOSw1MCBAQAogOyByMTEgPSBGQVNUX0ZMT0FUICogZGl2aXNvcnMKIDsgcjEyID0gRkFTVF9GTE9BVCAqIHdvcmtzcGFjZQogCi0JYWxpZ24JMTYKLQlnbG9iYWwJRVhUTihqc2ltZF9xdWFudGl6ZV9mbG9hdF9zc2UyKQorICAgICAgICBhbGlnbiAgIDE2CisgICAgICAgIGdsb2JhbCAgRVhUTihqc2ltZF9xdWFudGl6ZV9mbG9hdF9zc2UyKQogCiBFWFROKGpzaW1kX3F1YW50aXplX2Zsb2F0X3NzZTIpOgotCXB1c2gJcmJwCi0JbW92CXJheCxyc3AKLQltb3YJcmJwLHJzcAotCWNvbGxlY3RfYXJncworICAgICAgICBwdXNoICAgIHJicAorICAgICAgICBtb3YgICAgIHJheCxyc3AKKyAgICAgICAgbW92ICAgICByYnAscnNwCisgICAgICAgIGNvbGxlY3RfYXJncwogCi0JbW92IHJzaSwgcjEyCi0JbW92IHJkeCwgcjExCi0JbW92IHJkaSwgcjEwCi0JbW92CXJheCwgRENUU0laRTIvMTYKKyAgICAgICAgbW92IHJzaSwgcjEyCisgICAgICAgIG1vdiByZHgsIHIxMQorICAgICAgICBtb3YgcmRpLCByMTAKKyAgICAgICAgbW92ICAgICByYXgsIERDVFNJWkUyLzE2CiAucXVhbnRsb29wOgotCW1vdmFwcwl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAscnNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KLQltb3ZhcHMJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMCwxLHJzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCi0JbXVscHMJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCi0JbXVscHMJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMCwxLHJkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCi0JbW92YXBzCXhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxyc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQotCW1vdmFwcwl4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSygxLDEscnNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KLQltdWxwcwl4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KLQltdWxwcwl4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSygxLDEscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICAgICAgbW92YXBzICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAscnNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICAgICAgbW92YXBzICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygwLDEscnNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICAgICAgbXVscHMgICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICAgICAgbXVscHMgICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygwLDEscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICAgICAgbW92YXBzICB4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAscnNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICAgICAgbW92YXBzICB4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSygxLDEscnNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICAgICAgbXVscHMgICB4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICAgICAgbXVscHMgICB4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSygxLDEscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KIAotCWN2dHBzMmRxIHhtbTAseG1tMAotCWN2dHBzMmRxIHhtbTEseG1tMQotCWN2dHBzMmRxIHhtbTIseG1tMgotCWN2dHBzMmRxIHhtbTMseG1tMworICAgICAgICBjdnRwczJkcSB4bW0wLHhtbTAKKyAgICAgICAgY3Z0cHMyZHEgeG1tMSx4bW0xCisgICAgICAgIGN2dHBzMmRxIHhtbTIseG1tMgorICAgICAgICBjdnRwczJkcSB4bW0zLHhtbTMKIAotCXBhY2tzc2R3IHhtbTAseG1tMQotCXBhY2tzc2R3IHhtbTIseG1tMworICAgICAgICBwYWNrc3NkdyB4bW0wLHhtbTEKKyAgICAgICAgcGFja3NzZHcgeG1tMix4bW0zCiAKLQltb3ZkcWEJWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJkaSxTSVpFT0ZfSkNPRUYpXSwgeG1tMAotCW1vdmRxYQlYTU1XT1JEIFtYTU1CTE9DSygxLDAscmRpLFNJWkVPRl9KQ09FRildLCB4bW0yCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJkaSxTSVpFT0ZfSkNPRUYpXSwgeG1tMAorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxyZGksU0laRU9GX0pDT0VGKV0sIHhtbTIKIAotCWFkZAlyc2ksIGJ5dGUgMTYqU0laRU9GX0ZBU1RfRkxPQVQKLQlhZGQJcmR4LCBieXRlIDE2KlNJWkVPRl9GQVNUX0ZMT0FUCi0JYWRkCXJkaSwgYnl0ZSAxNipTSVpFT0ZfSkNPRUYKLQlkZWMJcmF4Ci0Jam56CXNob3J0IC5xdWFudGxvb3AKKyAgICAgICAgYWRkICAgICByc2ksIGJ5dGUgMTYqU0laRU9GX0ZBU1RfRkxPQVQKKyAgICAgICAgYWRkICAgICByZHgsIGJ5dGUgMTYqU0laRU9GX0ZBU1RfRkxPQVQKKyAgICAgICAgYWRkICAgICByZGksIGJ5dGUgMTYqU0laRU9GX0pDT0VGCisgICAgICAgIGRlYyAgICAgcmF4CisgICAgICAgIGpueiAgICAgc2hvcnQgLnF1YW50bG9vcAogCi0JdW5jb2xsZWN0X2FyZ3MKLQlwb3AJcmJwCi0JcmV0CisgICAgICAgIHVuY29sbGVjdF9hcmdzCisgICAgICAgIHBvcCAgICAgcmJwCisgICAgICAgIHJldAogCiA7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQogOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgotCWFsaWduCTE2CisgICAgICAgIGFsaWduICAgMTYKZGlmZiAtLWdpdCBhL3NpbWQvamNxbnRzMmYuYXNtIGIvc2ltZC9qY3FudHMyZi5hc20KaW5kZXggZDgwYWU1ZC4uMGRmMmRmNyAxMDA2NDQKLS0tIGEvc2ltZC9qY3FudHMyZi5hc20KKysrIGIvc2ltZC9qY3FudHMyZi5hc20KQEAgLTIwLDggKzIwLDggQEAKICVpbmNsdWRlICJqZGN0LmluYyIKIAogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCVNFQ1RJT04JU0VHX1RFWFQKLQlCSVRTCTMyCisgICAgICAgIFNFQ1RJT04gU0VHX1RFWFQKKyAgICAgICAgQklUUyAgICAzMgogOwogOyBMb2FkIGRhdGEgaW50byB3b3Jrc3BhY2UsIGFwcGx5aW5nIHVuc2lnbmVkLT5zaWduZWQgY29udmVyc2lvbgogOwpAQCAtMzAsNzUgKzMwLDc1IEBACiA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBU1RfRkxPQVQgKiB3b3Jrc3BhY2UpOwogOwogCi0lZGVmaW5lIHNhbXBsZV9kYXRhCWVicCs4CQk7IEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEKLSVkZWZpbmUgc3RhcnRfY29sCWVicCsxMgkJOyBKRElNRU5TSU9OIHN0YXJ0X2NvbAotJWRlZmluZSB3b3Jrc3BhY2UJZWJwKzE2CQk7IEZBU1RfRkxPQVQgKiB3b3Jrc3BhY2UKKyVkZWZpbmUgc2FtcGxlX2RhdGEgICAgIGVicCs4ICAgICAgICAgICA7IEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEKKyVkZWZpbmUgc3RhcnRfY29sICAgICAgIGVicCsxMiAgICAgICAgICA7IEpESU1FTlNJT04gc3RhcnRfY29sCislZGVmaW5lIHdvcmtzcGFjZSAgICAgICBlYnArMTYgICAgICAgICAgOyBGQVNUX0ZMT0FUICogd29ya3NwYWNlCiAKLQlhbGlnbgkxNgotCWdsb2JhbAlFWFROKGpzaW1kX2NvbnZzYW1wX2Zsb2F0X3NzZTIpCisgICAgICAgIGFsaWduICAgMTYKKyAgICAgICAgZ2xvYmFsICBFWFROKGpzaW1kX2NvbnZzYW1wX2Zsb2F0X3NzZTIpCiAKIEVYVE4oanNpbWRfY29udnNhbXBfZmxvYXRfc3NlMik6Ci0JcHVzaAllYnAKLQltb3YJZWJwLGVzcAotCXB1c2gJZWJ4Ci07CXB1c2gJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLQlwdXNoCWVzaQotCXB1c2gJZWRpCisgICAgICAgIHB1c2ggICAgZWJwCisgICAgICAgIG1vdiAgICAgZWJwLGVzcAorICAgICAgICBwdXNoICAgIGVieAorOyAgICAgICBwdXNoICAgIGVjeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgICAgICBwdXNoICAgIGVkeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgICAgICBwdXNoICAgIGVzaQorICAgICAgICBwdXNoICAgIGVkaQogCi0JcGNtcGVxdyAgeG1tNyx4bW03Ci0JcHNsbHcgICAgeG1tNyw3Ci0JcGFja3Nzd2IgeG1tNyx4bW03CQk7IHhtbTcgPSBQQl9DRU5URVJKU0FNUExFICgweDgwODA4MC4uKQorICAgICAgICBwY21wZXF3ICB4bW03LHhtbTcKKyAgICAgICAgcHNsbHcgICAgeG1tNyw3CisgICAgICAgIHBhY2tzc3diIHhtbTcseG1tNyAgICAgICAgICAgICAgOyB4bW03ID0gUEJfQ0VOVEVSSlNBTVBMRSAoMHg4MDgwODAuLikKIAotCW1vdgllc2ksIEpTQU1QQVJSQVkgW3NhbXBsZV9kYXRhXQk7IChKU0FNUFJPVyAqKQotCW1vdgllYXgsIEpESU1FTlNJT04gW3N0YXJ0X2NvbF0KLQltb3YJZWRpLCBQT0lOVEVSIFt3b3Jrc3BhY2VdCTsgKERDVEVMRU0gKikKLQltb3YJZWN4LCBEQ1RTSVpFLzIKLQlhbGlnbngJMTYsNworICAgICAgICBtb3YgICAgIGVzaSwgSlNBTVBBUlJBWSBbc2FtcGxlX2RhdGFdICAgOyAoSlNBTVBST1cgKikKKyAgICAgICAgbW92ICAgICBlYXgsIEpESU1FTlNJT04gW3N0YXJ0X2NvbF0KKyAgICAgICAgbW92ICAgICBlZGksIFBPSU5URVIgW3dvcmtzcGFjZV0gICAgICAgIDsgKERDVEVMRU0gKikKKyAgICAgICAgbW92ICAgICBlY3gsIERDVFNJWkUvMgorICAgICAgICBhbGlnbnggIDE2LDcKIC5jb252bG9vcDoKLQltb3YJZWJ4LCBKU0FNUFJPVyBbZXNpKzAqU0laRU9GX0pTQU1QUk9XXQk7IChKU0FNUExFICopCi0JbW92CWVkeCwgSlNBTVBST1cgW2VzaSsxKlNJWkVPRl9KU0FNUFJPV10JOyAoSlNBTVBMRSAqKQorICAgICAgICBtb3YgICAgIGVieCwgSlNBTVBST1cgW2VzaSswKlNJWkVPRl9KU0FNUFJPV10gICA7IChKU0FNUExFICopCisgICAgICAgIG1vdiAgICAgZWR4LCBKU0FNUFJPVyBbZXNpKzEqU0laRU9GX0pTQU1QUk9XXSAgIDsgKEpTQU1QTEUgKikKIAotCW1vdnEJeG1tMCwgWE1NX01NV09SRCBbZWJ4K2VheCpTSVpFT0ZfSlNBTVBMRV0KLQltb3ZxCXhtbTEsIFhNTV9NTVdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdCisgICAgICAgIG1vdnEgICAgeG1tMCwgWE1NX01NV09SRCBbZWJ4K2VheCpTSVpFT0ZfSlNBTVBMRV0KKyAgICAgICAgbW92cSAgICB4bW0xLCBYTU1fTU1XT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXQogCi0JcHN1YmIJeG1tMCx4bW03CQkJOyB4bW0wPSgwMTIzNDU2NykKLQlwc3ViYgl4bW0xLHhtbTcJCQk7IHhtbTE9KDg5QUJDREVGKQorICAgICAgICBwc3ViYiAgIHhtbTAseG1tNyAgICAgICAgICAgICAgICAgICAgICAgOyB4bW0wPSgwMTIzNDU2NykKKyAgICAgICAgcHN1YmIgICB4bW0xLHhtbTcgICAgICAgICAgICAgICAgICAgICAgIDsgeG1tMT0oODlBQkNERUYpCiAKLQlwdW5wY2tsYncgeG1tMCx4bW0wCQkJOyB4bW0wPSgqMCoxKjIqMyo0KjUqNio3KQotCXB1bnBja2xidyB4bW0xLHhtbTEJCQk7IHhtbTE9KCo4KjkqQSpCKkMqRCpFKkYpCisgICAgICAgIHB1bnBja2xidyB4bW0wLHhtbTAgICAgICAgICAgICAgICAgICAgICA7IHhtbTA9KCowKjEqMiozKjQqNSo2KjcpCisgICAgICAgIHB1bnBja2xidyB4bW0xLHhtbTEgICAgICAgICAgICAgICAgICAgICA7IHhtbTE9KCo4KjkqQSpCKkMqRCpFKkYpCiAKLQlwdW5wY2tsd2QgeG1tMix4bW0wCQkJOyB4bW0yPSgqKiowKioqMSoqKjIqKiozKQotCXB1bnBja2h3ZCB4bW0wLHhtbTAJCQk7IHhtbTA9KCoqKjQqKio1KioqNioqKjcpCi0JcHVucGNrbHdkIHhtbTMseG1tMQkJCTsgeG1tMz0oKioqOCoqKjkqKipBKioqQikKLQlwdW5wY2tod2QgeG1tMSx4bW0xCQkJOyB4bW0xPSgqKipDKioqRCoqKkUqKipGKQorICAgICAgICBwdW5wY2tsd2QgeG1tMix4bW0wICAgICAgICAgICAgICAgICAgICAgOyB4bW0yPSgqKiowKioqMSoqKjIqKiozKQorICAgICAgICBwdW5wY2tod2QgeG1tMCx4bW0wICAgICAgICAgICAgICAgICAgICAgOyB4bW0wPSgqKio0KioqNSoqKjYqKio3KQorICAgICAgICBwdW5wY2tsd2QgeG1tMyx4bW0xICAgICAgICAgICAgICAgICAgICAgOyB4bW0zPSgqKio4KioqOSoqKkEqKipCKQorICAgICAgICBwdW5wY2tod2QgeG1tMSx4bW0xICAgICAgICAgICAgICAgICAgICAgOyB4bW0xPSgqKipDKioqRCoqKkUqKipGKQogCi0JcHNyYWQgICAgIHhtbTIsKERXT1JEX0JJVC1CWVRFX0JJVCkJOyB4bW0yPSgwMTIzKQotCXBzcmFkICAgICB4bW0wLChEV09SRF9CSVQtQllURV9CSVQpCTsgeG1tMD0oNDU2NykKLQljdnRkcTJwcyAgeG1tMix4bW0yCQkJOyB4bW0yPSgwMTIzKQotCWN2dGRxMnBzICB4bW0wLHhtbTAJCQk7IHhtbTA9KDQ1NjcpCi0JcHNyYWQgICAgIHhtbTMsKERXT1JEX0JJVC1CWVRFX0JJVCkJOyB4bW0zPSg4OUFCKQotCXBzcmFkICAgICB4bW0xLChEV09SRF9CSVQtQllURV9CSVQpCTsgeG1tMT0oQ0RFRikKLQljdnRkcTJwcyAgeG1tMyx4bW0zCQkJOyB4bW0zPSg4OUFCKQotCWN2dGRxMnBzICB4bW0xLHhtbTEJCQk7IHhtbTE9KENERUYpCisgICAgICAgIHBzcmFkICAgICB4bW0yLChEV09SRF9CSVQtQllURV9CSVQpICAgICA7IHhtbTI9KDAxMjMpCisgICAgICAgIHBzcmFkICAgICB4bW0wLChEV09SRF9CSVQtQllURV9CSVQpICAgICA7IHhtbTA9KDQ1NjcpCisgICAgICAgIGN2dGRxMnBzICB4bW0yLHhtbTIgICAgICAgICAgICAgICAgICAgICA7IHhtbTI9KDAxMjMpCisgICAgICAgIGN2dGRxMnBzICB4bW0wLHhtbTAgICAgICAgICAgICAgICAgICAgICA7IHhtbTA9KDQ1NjcpCisgICAgICAgIHBzcmFkICAgICB4bW0zLChEV09SRF9CSVQtQllURV9CSVQpICAgICA7IHhtbTM9KDg5QUIpCisgICAgICAgIHBzcmFkICAgICB4bW0xLChEV09SRF9CSVQtQllURV9CSVQpICAgICA7IHhtbTE9KENERUYpCisgICAgICAgIGN2dGRxMnBzICB4bW0zLHhtbTMgICAgICAgICAgICAgICAgICAgICA7IHhtbTM9KDg5QUIpCisgICAgICAgIGN2dGRxMnBzICB4bW0xLHhtbTEgICAgICAgICAgICAgICAgICAgICA7IHhtbTE9KENERUYpCiAKLQltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0yCi0JbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDAsMSxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMAotCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygxLDAsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTMKLQltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMSwxLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0xCisgICAgICAgIG1vdmFwcyAgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0yCisgICAgICAgIG1vdmFwcyAgWE1NV09SRCBbWE1NQkxPQ0soMCwxLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0wCisgICAgICAgIG1vdmFwcyAgWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0zCisgICAgICAgIG1vdmFwcyAgWE1NV09SRCBbWE1NQkxPQ0soMSwxLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0xCiAKLQlhZGQJZXNpLCBieXRlIDIqU0laRU9GX0pTQU1QUk9XCi0JYWRkCWVkaSwgYnl0ZSAyKkRDVFNJWkUqU0laRU9GX0ZBU1RfRkxPQVQKLQlkZWMJZWN4Ci0Jam56CXNob3J0IC5jb252bG9vcAorICAgICAgICBhZGQgICAgIGVzaSwgYnl0ZSAyKlNJWkVPRl9KU0FNUFJPVworICAgICAgICBhZGQgICAgIGVkaSwgYnl0ZSAyKkRDVFNJWkUqU0laRU9GX0ZBU1RfRkxPQVQKKyAgICAgICAgZGVjICAgICBlY3gKKyAgICAgICAgam56ICAgICBzaG9ydCAuY29udmxvb3AKIAotCXBvcAllZGkKLQlwb3AJZXNpCi07CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi07CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi0JcG9wCWVieAotCXBvcAllYnAKLQlyZXQKKyAgICAgICAgcG9wICAgICBlZGkKKyAgICAgICAgcG9wICAgICBlc2kKKzsgICAgICAgcG9wICAgICBlZHggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICAgICAgcG9wICAgICBlY3ggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICAgICAgcG9wICAgICBlYngKKyAgICAgICAgcG9wICAgICBlYnAKKyAgICAgICAgcmV0CiAKIAogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTEwLDYyICsxMTAsNjIgQEAKIDsgICAgICAgICAgICAgICAgICAgICAgICAgRkFTVF9GTE9BVCAqIHdvcmtzcGFjZSk7CiA7CiAKLSVkZWZpbmUgY29lZl9ibG9jawllYnArOAkJOyBKQ09FRlBUUiBjb2VmX2Jsb2NrCi0lZGVmaW5lIGRpdmlzb3JzCWVicCsxMgkJOyBGQVNUX0ZMT0FUICogZGl2aXNvcnMKLSVkZWZpbmUgd29ya3NwYWNlCWVicCsxNgkJOyBGQVNUX0ZMT0FUICogd29ya3NwYWNlCislZGVmaW5lIGNvZWZfYmxvY2sgICAgICBlYnArOCAgICAgICAgICAgOyBKQ09FRlBUUiBjb2VmX2Jsb2NrCislZGVmaW5lIGRpdmlzb3JzICAgICAgICBlYnArMTIgICAgICAgICAgOyBGQVNUX0ZMT0FUICogZGl2aXNvcnMKKyVkZWZpbmUgd29ya3NwYWNlICAgICAgIGVicCsxNiAgICAgICAgICA7IEZBU1RfRkxPQVQgKiB3b3Jrc3BhY2UKIAotCWFsaWduCTE2Ci0JZ2xvYmFsCUVYVE4oanNpbWRfcXVhbnRpemVfZmxvYXRfc3NlMikKKyAgICAgICAgYWxpZ24gICAxNgorICAgICAgICBnbG9iYWwgIEVYVE4oanNpbWRfcXVhbnRpemVfZmxvYXRfc3NlMikKIAogRVhUTihqc2ltZF9xdWFudGl6ZV9mbG9hdF9zc2UyKToKLQlwdXNoCWVicAotCW1vdgllYnAsZXNwCi07CXB1c2gJZWJ4CQk7IHVudXNlZAotOwlwdXNoCWVjeAkJOyB1bnVzZWQKLTsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi0JcHVzaAllc2kKLQlwdXNoCWVkaQorICAgICAgICBwdXNoICAgIGVicAorICAgICAgICBtb3YgICAgIGVicCxlc3AKKzsgICAgICAgcHVzaCAgICBlYnggICAgICAgICAgICAgOyB1bnVzZWQKKzsgICAgICAgcHVzaCAgICBlY3ggICAgICAgICAgICAgOyB1bnVzZWQKKzsgICAgICAgcHVzaCAgICBlZHggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICAgICAgcHVzaCAgICBlc2kKKyAgICAgICAgcHVzaCAgICBlZGkKIAotCW1vdgllc2ksIFBPSU5URVIgW3dvcmtzcGFjZV0KLQltb3YJZWR4LCBQT0lOVEVSIFtkaXZpc29yc10KLQltb3YJZWRpLCBKQ09FRlBUUiBbY29lZl9ibG9ja10KLQltb3YJZWF4LCBEQ1RTSVpFMi8xNgotCWFsaWdueAkxNiw3CisgICAgICAgIG1vdiAgICAgZXNpLCBQT0lOVEVSIFt3b3Jrc3BhY2VdCisgICAgICAgIG1vdiAgICAgZWR4LCBQT0lOVEVSIFtkaXZpc29yc10KKyAgICAgICAgbW92ICAgICBlZGksIEpDT0VGUFRSIFtjb2VmX2Jsb2NrXQorICAgICAgICBtb3YgICAgIGVheCwgRENUU0laRTIvMTYKKyAgICAgICAgYWxpZ254ICAxNiw3CiAucXVhbnRsb29wOgotCW1vdmFwcwl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KLQltb3ZhcHMJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMCwxLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCi0JbXVscHMJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCi0JbXVscHMJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMCwxLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCi0JbW92YXBzCXhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQotCW1vdmFwcwl4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSygxLDEsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KLQltdWxwcwl4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KLQltdWxwcwl4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSygxLDEsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICAgICAgbW92YXBzICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICAgICAgbW92YXBzICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygwLDEsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICAgICAgbXVscHMgICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICAgICAgbXVscHMgICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygwLDEsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICAgICAgbW92YXBzICB4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICAgICAgbW92YXBzICB4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSygxLDEsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICAgICAgbXVscHMgICB4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICAgICAgbXVscHMgICB4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSygxLDEsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KIAotCWN2dHBzMmRxIHhtbTAseG1tMAotCWN2dHBzMmRxIHhtbTEseG1tMQotCWN2dHBzMmRxIHhtbTIseG1tMgotCWN2dHBzMmRxIHhtbTMseG1tMworICAgICAgICBjdnRwczJkcSB4bW0wLHhtbTAKKyAgICAgICAgY3Z0cHMyZHEgeG1tMSx4bW0xCisgICAgICAgIGN2dHBzMmRxIHhtbTIseG1tMgorICAgICAgICBjdnRwczJkcSB4bW0zLHhtbTMKIAotCXBhY2tzc2R3IHhtbTAseG1tMQotCXBhY2tzc2R3IHhtbTIseG1tMworICAgICAgICBwYWNrc3NkdyB4bW0wLHhtbTEKKyAgICAgICAgcGFja3NzZHcgeG1tMix4bW0zCiAKLQltb3ZkcWEJWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgeG1tMAotCW1vdmRxYQlYTU1XT1JEIFtYTU1CTE9DSygxLDAsZWRpLFNJWkVPRl9KQ09FRildLCB4bW0yCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgeG1tMAorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlZGksU0laRU9GX0pDT0VGKV0sIHhtbTIKIAotCWFkZAllc2ksIGJ5dGUgMTYqU0laRU9GX0ZBU1RfRkxPQVQKLQlhZGQJZWR4LCBieXRlIDE2KlNJWkVPRl9GQVNUX0ZMT0FUCi0JYWRkCWVkaSwgYnl0ZSAxNipTSVpFT0ZfSkNPRUYKLQlkZWMJZWF4Ci0Jam56CXNob3J0IC5xdWFudGxvb3AKKyAgICAgICAgYWRkICAgICBlc2ksIGJ5dGUgMTYqU0laRU9GX0ZBU1RfRkxPQVQKKyAgICAgICAgYWRkICAgICBlZHgsIGJ5dGUgMTYqU0laRU9GX0ZBU1RfRkxPQVQKKyAgICAgICAgYWRkICAgICBlZGksIGJ5dGUgMTYqU0laRU9GX0pDT0VGCisgICAgICAgIGRlYyAgICAgZWF4CisgICAgICAgIGpueiAgICAgc2hvcnQgLnF1YW50bG9vcAogCi0JcG9wCWVkaQotCXBvcAllc2kKLTsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLTsJcG9wCWVjeAkJOyB1bnVzZWQKLTsJcG9wCWVieAkJOyB1bnVzZWQKLQlwb3AJZWJwCi0JcmV0CisgICAgICAgIHBvcCAgICAgZWRpCisgICAgICAgIHBvcCAgICAgZXNpCis7ICAgICAgIHBvcCAgICAgZWR4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgICAgIHBvcCAgICAgZWN4ICAgICAgICAgICAgIDsgdW51c2VkCis7ICAgICAgIHBvcCAgICAgZWJ4ICAgICAgICAgICAgIDsgdW51c2VkCisgICAgICAgIHBvcCAgICAgZWJwCisgICAgICAgIHJldAogCiA7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQogOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgotCWFsaWduCTE2CisgICAgICAgIGFsaWduICAgMTYKZGlmZiAtLWdpdCBhL3NpbWQvamNxbnRzMmktNjQuYXNtIGIvc2ltZC9qY3FudHMyaS02NC5hc20KaW5kZXggY2MzM2Q1OS4uNWRlODA2MiAxMDA2NDQKLS0tIGEvc2ltZC9qY3FudHMyaS02NC5hc20KKysrIGIvc2ltZC9qY3FudHMyaS02NC5hc20KQEAgLTIxLDggKzIxLDggQEAKICVpbmNsdWRlICJqZGN0LmluYyIKIAogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCVNFQ1RJT04JU0VHX1RFWFQKLQlCSVRTCTY0CisgICAgICAgIFNFQ1RJT04gU0VHX1RFWFQKKyAgICAgICAgQklUUyAgICA2NAogOwogOyBMb2FkIGRhdGEgaW50byB3b3Jrc3BhY2UsIGFwcGx5aW5nIHVuc2lnbmVkLT5zaWduZWQgY29udmVyc2lvbgogOwpAQCAtMzUsNjAgKzM1LDYwIEBACiA7IHIxMSA9IEpESU1FTlNJT04gc3RhcnRfY29sCiA7IHIxMiA9IERDVEVMRU0gKiB3b3Jrc3BhY2UKIAotCWFsaWduCTE2Ci0JZ2xvYmFsCUVYVE4oanNpbWRfY29udnNhbXBfc3NlMikKKyAgICAgICAgYWxpZ24gICAxNgorICAgICAgICBnbG9iYWwgIEVYVE4oanNpbWRfY29udnNhbXBfc3NlMikKIAogRVhUTihqc2ltZF9jb252c2FtcF9zc2UyKToKLQlwdXNoCXJicAotCW1vdglyYXgscnNwCi0JbW92CXJicCxyc3AKLQljb2xsZWN0X2FyZ3MKLQlwdXNoCXJieAorICAgICAgICBwdXNoICAgIHJicAorICAgICAgICBtb3YgICAgIHJheCxyc3AKKyAgICAgICAgbW92ICAgICByYnAscnNwCisgICAgICAgIGNvbGxlY3RfYXJncworICAgICAgICBwdXNoICAgIHJieAogCi0JcHhvcgl4bW02LHhtbTYJCTsgeG1tNj0oYWxsIDAncykKLQlwY21wZXF3CXhtbTcseG1tNwotCXBzbGx3CXhtbTcsNwkJCTsgeG1tNz17MHhGRjgwIDB4RkY4MCAweEZGODAgMHhGRjgwIC4ufQorICAgICAgICBweG9yICAgIHhtbTYseG1tNiAgICAgICAgICAgICAgIDsgeG1tNj0oYWxsIDAncykKKyAgICAgICAgcGNtcGVxdyB4bW03LHhtbTcKKyAgICAgICAgcHNsbHcgICB4bW03LDcgICAgICAgICAgICAgICAgICA7IHhtbTc9ezB4RkY4MCAweEZGODAgMHhGRjgwIDB4RkY4MCAuLn0KIAotCW1vdiByc2ksIHIxMAotCW1vdiByYXgsIHIxMQotCW1vdiByZGksIHIxMgotCW1vdglyY3gsIERDVFNJWkUvNAorICAgICAgICBtb3YgcnNpLCByMTAKKyAgICAgICAgbW92IHJheCwgcjExCisgICAgICAgIG1vdiByZGksIHIxMgorICAgICAgICBtb3YgICAgIHJjeCwgRENUU0laRS80CiAuY29udmxvb3A6Ci0JbW92CXJieCwgSlNBTVBST1cgW3JzaSswKlNJWkVPRl9KU0FNUFJPV10JOyAoSlNBTVBMRSAqKQotCW1vdiByZHgsIEpTQU1QUk9XIFtyc2krMSpTSVpFT0ZfSlNBTVBST1ddCTsgKEpTQU1QTEUgKikKKyAgICAgICAgbW92ICAgICByYngsIEpTQU1QUk9XIFtyc2krMCpTSVpFT0ZfSlNBTVBST1ddICAgOyAoSlNBTVBMRSAqKQorICAgICAgICBtb3YgcmR4LCBKU0FNUFJPVyBbcnNpKzEqU0laRU9GX0pTQU1QUk9XXSAgICAgICA7IChKU0FNUExFICopCiAKLQltb3ZxCXhtbTAsIFhNTV9NTVdPUkQgW3JieCtyYXgqU0laRU9GX0pTQU1QTEVdCTsgeG1tMD0oMDEyMzQ1NjcpCi0JbW92cQl4bW0xLCBYTU1fTU1XT1JEIFtyZHgrcmF4KlNJWkVPRl9KU0FNUExFXQk7IHhtbTE9KDg5QUJDREVGKQorICAgICAgICBtb3ZxICAgIHhtbTAsIFhNTV9NTVdPUkQgW3JieCtyYXgqU0laRU9GX0pTQU1QTEVdICAgICAgIDsgeG1tMD0oMDEyMzQ1NjcpCisgICAgICAgIG1vdnEgICAgeG1tMSwgWE1NX01NV09SRCBbcmR4K3JheCpTSVpFT0ZfSlNBTVBMRV0gICAgICAgOyB4bW0xPSg4OUFCQ0RFRikKIAotCW1vdglyYngsIEpTQU1QUk9XIFtyc2krMipTSVpFT0ZfSlNBTVBST1ddCTsgKEpTQU1QTEUgKikKLQltb3YJcmR4LCBKU0FNUFJPVyBbcnNpKzMqU0laRU9GX0pTQU1QUk9XXQk7IChKU0FNUExFICopCisgICAgICAgIG1vdiAgICAgcmJ4LCBKU0FNUFJPVyBbcnNpKzIqU0laRU9GX0pTQU1QUk9XXSAgIDsgKEpTQU1QTEUgKikKKyAgICAgICAgbW92ICAgICByZHgsIEpTQU1QUk9XIFtyc2krMypTSVpFT0ZfSlNBTVBST1ddICAgOyAoSlNBTVBMRSAqKQogCi0JbW92cQl4bW0yLCBYTU1fTU1XT1JEIFtyYngrcmF4KlNJWkVPRl9KU0FNUExFXQk7IHhtbTI9KEdISUpLTE1OKQotCW1vdnEJeG1tMywgWE1NX01NV09SRCBbcmR4K3JheCpTSVpFT0ZfSlNBTVBMRV0JOyB4bW0zPShPUFFSU1RVVikKKyAgICAgICAgbW92cSAgICB4bW0yLCBYTU1fTU1XT1JEIFtyYngrcmF4KlNJWkVPRl9KU0FNUExFXSAgICAgICA7IHhtbTI9KEdISUpLTE1OKQorICAgICAgICBtb3ZxICAgIHhtbTMsIFhNTV9NTVdPUkQgW3JkeCtyYXgqU0laRU9GX0pTQU1QTEVdICAgICAgIDsgeG1tMz0oT1BRUlNUVVYpCiAKLQlwdW5wY2tsYncgeG1tMCx4bW02CQk7IHhtbTA9KDAxMjM0NTY3KQotCXB1bnBja2xidyB4bW0xLHhtbTYJCTsgeG1tMT0oODlBQkNERUYpCi0JcGFkZHcgICAgIHhtbTAseG1tNwotCXBhZGR3ICAgICB4bW0xLHhtbTcKLQlwdW5wY2tsYncgeG1tMix4bW02CQk7IHhtbTI9KEdISUpLTE1OKQotCXB1bnBja2xidyB4bW0zLHhtbTYJCTsgeG1tMz0oT1BRUlNUVVYpCi0JcGFkZHcgICAgIHhtbTIseG1tNwotCXBhZGR3ICAgICB4bW0zLHhtbTcKKyAgICAgICAgcHVucGNrbGJ3IHhtbTAseG1tNiAgICAgICAgICAgICA7IHhtbTA9KDAxMjM0NTY3KQorICAgICAgICBwdW5wY2tsYncgeG1tMSx4bW02ICAgICAgICAgICAgIDsgeG1tMT0oODlBQkNERUYpCisgICAgICAgIHBhZGR3ICAgICB4bW0wLHhtbTcKKyAgICAgICAgcGFkZHcgICAgIHhtbTEseG1tNworICAgICAgICBwdW5wY2tsYncgeG1tMix4bW02ICAgICAgICAgICAgIDsgeG1tMj0oR0hJSktMTU4pCisgICAgICAgIHB1bnBja2xidyB4bW0zLHhtbTYgICAgICAgICAgICAgOyB4bW0zPShPUFFSU1RVVikKKyAgICAgICAgcGFkZHcgICAgIHhtbTIseG1tNworICAgICAgICBwYWRkdyAgICAgeG1tMyx4bW03CiAKLQltb3ZkcWEJWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJkaSxTSVpFT0ZfRENURUxFTSldLCB4bW0wCi0JbW92ZHFhCVhNTVdPUkQgW1hNTUJMT0NLKDEsMCxyZGksU0laRU9GX0RDVEVMRU0pXSwgeG1tMQotCW1vdmRxYQlYTU1XT1JEIFtYTU1CTE9DSygyLDAscmRpLFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTIKLQltb3ZkcWEJWE1NV09SRCBbWE1NQkxPQ0soMywwLHJkaSxTSVpFT0ZfRENURUxFTSldLCB4bW0zCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJkaSxTSVpFT0ZfRENURUxFTSldLCB4bW0wCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbWE1NQkxPQ0soMSwwLHJkaSxTSVpFT0ZfRENURUxFTSldLCB4bW0xCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbWE1NQkxPQ0soMiwwLHJkaSxTSVpFT0ZfRENURUxFTSldLCB4bW0yCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbWE1NQkxPQ0soMywwLHJkaSxTSVpFT0ZfRENURUxFTSldLCB4bW0zCiAKLQlhZGQJcnNpLCBieXRlIDQqU0laRU9GX0pTQU1QUk9XCi0JYWRkCXJkaSwgYnl0ZSA0KkRDVFNJWkUqU0laRU9GX0RDVEVMRU0KLQlkZWMJcmN4Ci0Jam56CXNob3J0IC5jb252bG9vcAorICAgICAgICBhZGQgICAgIHJzaSwgYnl0ZSA0KlNJWkVPRl9KU0FNUFJPVworICAgICAgICBhZGQgICAgIHJkaSwgYnl0ZSA0KkRDVFNJWkUqU0laRU9GX0RDVEVMRU0KKyAgICAgICAgZGVjICAgICByY3gKKyAgICAgICAgam56ICAgICBzaG9ydCAuY29udmxvb3AKIAotCXBvcAlyYngKLQl1bmNvbGxlY3RfYXJncwotCXBvcAlyYnAKLQlyZXQKKyAgICAgICAgcG9wICAgICByYngKKyAgICAgICAgdW5jb2xsZWN0X2FyZ3MKKyAgICAgICAgcG9wICAgICByYnAKKyAgICAgICAgcmV0CiAKIDsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDsKQEAgLTExMSw3NyArMTExLDc3IEBACiA7IHIxMSA9IERDVEVMRU0gKiBkaXZpc29ycwogOyByMTIgPSBEQ1RFTEVNICogd29ya3NwYWNlCiAKLQlhbGlnbgkxNgotCWdsb2JhbAlFWFROKGpzaW1kX3F1YW50aXplX3NzZTIpCisgICAgICAgIGFsaWduICAgMTYKKyAgICAgICAgZ2xvYmFsICBFWFROKGpzaW1kX3F1YW50aXplX3NzZTIpCiAKIEVYVE4oanNpbWRfcXVhbnRpemVfc3NlMik6Ci0JcHVzaAlyYnAKLQltb3YJcmF4LHJzcAotCW1vdglyYnAscnNwCi0JY29sbGVjdF9hcmdzCisgICAgICAgIHB1c2ggICAgcmJwCisgICAgICAgIG1vdiAgICAgcmF4LHJzcAorICAgICAgICBtb3YgICAgIHJicCxyc3AKKyAgICAgICAgY29sbGVjdF9hcmdzCiAKLQltb3YgcnNpLCByMTIKLQltb3YgcmR4LCByMTEKLQltb3YgcmRpLCByMTAKLQltb3YJcmF4LCBEQ1RTSVpFMi8zMgorICAgICAgICBtb3YgcnNpLCByMTIKKyAgICAgICAgbW92IHJkeCwgcjExCisgICAgICAgIG1vdiByZGksIHIxMAorICAgICAgICBtb3YgICAgIHJheCwgRENUU0laRTIvMzIKIC5xdWFudGxvb3A6Ci0JbW92ZHFhCXhtbTQsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxyc2ksU0laRU9GX0RDVEVMRU0pXQotCW1vdmRxYQl4bW01LCBYTU1XT1JEIFtYTU1CTE9DSygxLDAscnNpLFNJWkVPRl9EQ1RFTEVNKV0KLQltb3ZkcWEJeG1tNiwgWE1NV09SRCBbWE1NQkxPQ0soMiwwLHJzaSxTSVpFT0ZfRENURUxFTSldCi0JbW92ZHFhCXhtbTcsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxyc2ksU0laRU9GX0RDVEVMRU0pXQotCW1vdmRxYQl4bW0wLHhtbTQKLQltb3ZkcWEJeG1tMSx4bW01Ci0JbW92ZHFhCXhtbTIseG1tNgotCW1vdmRxYQl4bW0zLHhtbTcKLQlwc3Jhdwl4bW00LChXT1JEX0JJVC0xKQotCXBzcmF3CXhtbTUsKFdPUkRfQklULTEpCi0JcHNyYXcJeG1tNiwoV09SRF9CSVQtMSkKLQlwc3Jhdwl4bW03LChXT1JEX0JJVC0xKQotCXB4b3IJeG1tMCx4bW00Ci0JcHhvcgl4bW0xLHhtbTUKLQlweG9yCXhtbTIseG1tNgotCXB4b3IJeG1tMyx4bW03Ci0JcHN1YncJeG1tMCx4bW00CQk7IGlmICh4bW0wIDwgMCkgeG1tMCA9IC14bW0wOwotCXBzdWJ3CXhtbTEseG1tNQkJOyBpZiAoeG1tMSA8IDApIHhtbTEgPSAteG1tMTsKLQlwc3Vidwl4bW0yLHhtbTYJCTsgaWYgKHhtbTIgPCAwKSB4bW0yID0gLXhtbTI7Ci0JcHN1YncJeG1tMyx4bW03CQk7IGlmICh4bW0zIDwgMCkgeG1tMyA9IC14bW0zOworICAgICAgICBtb3ZkcWEgIHhtbTQsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxyc2ksU0laRU9GX0RDVEVMRU0pXQorICAgICAgICBtb3ZkcWEgIHhtbTUsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxyc2ksU0laRU9GX0RDVEVMRU0pXQorICAgICAgICBtb3ZkcWEgIHhtbTYsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxyc2ksU0laRU9GX0RDVEVMRU0pXQorICAgICAgICBtb3ZkcWEgIHhtbTcsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxyc2ksU0laRU9GX0RDVEVMRU0pXQorICAgICAgICBtb3ZkcWEgIHhtbTAseG1tNAorICAgICAgICBtb3ZkcWEgIHhtbTEseG1tNQorICAgICAgICBtb3ZkcWEgIHhtbTIseG1tNgorICAgICAgICBtb3ZkcWEgIHhtbTMseG1tNworICAgICAgICBwc3JhdyAgIHhtbTQsKFdPUkRfQklULTEpCisgICAgICAgIHBzcmF3ICAgeG1tNSwoV09SRF9CSVQtMSkKKyAgICAgICAgcHNyYXcgICB4bW02LChXT1JEX0JJVC0xKQorICAgICAgICBwc3JhdyAgIHhtbTcsKFdPUkRfQklULTEpCisgICAgICAgIHB4b3IgICAgeG1tMCx4bW00CisgICAgICAgIHB4b3IgICAgeG1tMSx4bW01CisgICAgICAgIHB4b3IgICAgeG1tMix4bW02CisgICAgICAgIHB4b3IgICAgeG1tMyx4bW03CisgICAgICAgIHBzdWJ3ICAgeG1tMCx4bW00ICAgICAgICAgICAgICAgOyBpZiAoeG1tMCA8IDApIHhtbTAgPSAteG1tMDsKKyAgICAgICAgcHN1YncgICB4bW0xLHhtbTUgICAgICAgICAgICAgICA7IGlmICh4bW0xIDwgMCkgeG1tMSA9IC14bW0xOworICAgICAgICBwc3VidyAgIHhtbTIseG1tNiAgICAgICAgICAgICAgIDsgaWYgKHhtbTIgPCAwKSB4bW0yID0gLXhtbTI7CisgICAgICAgIHBzdWJ3ICAgeG1tMyx4bW03ICAgICAgICAgICAgICAgOyBpZiAoeG1tMyA8IDApIHhtbTMgPSAteG1tMzsKIAotCXBhZGR3CXhtbTAsIFhNTVdPUkQgW0NPUlJFQ1RJT04oMCwwLHJkeCldICA7IGNvcnJlY3Rpb24gKyByb3VuZGZhY3RvcgotCXBhZGR3CXhtbTEsIFhNTVdPUkQgW0NPUlJFQ1RJT04oMSwwLHJkeCldCi0JcGFkZHcJeG1tMiwgWE1NV09SRCBbQ09SUkVDVElPTigyLDAscmR4KV0KLQlwYWRkdwl4bW0zLCBYTU1XT1JEIFtDT1JSRUNUSU9OKDMsMCxyZHgpXQotCXBtdWxodXcJeG1tMCwgWE1NV09SRCBbUkVDSVBST0NBTCgwLDAscmR4KV0gIDsgcmVjaXByb2NhbAotCXBtdWxodXcJeG1tMSwgWE1NV09SRCBbUkVDSVBST0NBTCgxLDAscmR4KV0KLQlwbXVsaHV3CXhtbTIsIFhNTVdPUkQgW1JFQ0lQUk9DQUwoMiwwLHJkeCldCi0JcG11bGh1dwl4bW0zLCBYTU1XT1JEIFtSRUNJUFJPQ0FMKDMsMCxyZHgpXQotCXBtdWxodXcJeG1tMCwgWE1NV09SRCBbU0NBTEUoMCwwLHJkeCldCTsgc2NhbGUKLQlwbXVsaHV3CXhtbTEsIFhNTVdPUkQgW1NDQUxFKDEsMCxyZHgpXQotCXBtdWxodXcJeG1tMiwgWE1NV09SRCBbU0NBTEUoMiwwLHJkeCldCi0JcG11bGh1dwl4bW0zLCBYTU1XT1JEIFtTQ0FMRSgzLDAscmR4KV0KKyAgICAgICAgcGFkZHcgICB4bW0wLCBYTU1XT1JEIFtDT1JSRUNUSU9OKDAsMCxyZHgpXSAgOyBjb3JyZWN0aW9uICsgcm91bmRmYWN0b3IKKyAgICAgICAgcGFkZHcgICB4bW0xLCBYTU1XT1JEIFtDT1JSRUNUSU9OKDEsMCxyZHgpXQorICAgICAgICBwYWRkdyAgIHhtbTIsIFhNTVdPUkQgW0NPUlJFQ1RJT04oMiwwLHJkeCldCisgICAgICAgIHBhZGR3ICAgeG1tMywgWE1NV09SRCBbQ09SUkVDVElPTigzLDAscmR4KV0KKyAgICAgICAgcG11bGh1dyB4bW0wLCBYTU1XT1JEIFtSRUNJUFJPQ0FMKDAsMCxyZHgpXSAgOyByZWNpcHJvY2FsCisgICAgICAgIHBtdWxodXcgeG1tMSwgWE1NV09SRCBbUkVDSVBST0NBTCgxLDAscmR4KV0KKyAgICAgICAgcG11bGh1dyB4bW0yLCBYTU1XT1JEIFtSRUNJUFJPQ0FMKDIsMCxyZHgpXQorICAgICAgICBwbXVsaHV3IHhtbTMsIFhNTVdPUkQgW1JFQ0lQUk9DQUwoMywwLHJkeCldCisgICAgICAgIHBtdWxodXcgeG1tMCwgWE1NV09SRCBbU0NBTEUoMCwwLHJkeCldICA7IHNjYWxlCisgICAgICAgIHBtdWxodXcgeG1tMSwgWE1NV09SRCBbU0NBTEUoMSwwLHJkeCldCisgICAgICAgIHBtdWxodXcgeG1tMiwgWE1NV09SRCBbU0NBTEUoMiwwLHJkeCldCisgICAgICAgIHBtdWxodXcgeG1tMywgWE1NV09SRCBbU0NBTEUoMywwLHJkeCldCiAKLQlweG9yCXhtbTAseG1tNAotCXB4b3IJeG1tMSx4bW01Ci0JcHhvcgl4bW0yLHhtbTYKLQlweG9yCXhtbTMseG1tNwotCXBzdWJ3CXhtbTAseG1tNAotCXBzdWJ3CXhtbTEseG1tNQotCXBzdWJ3CXhtbTIseG1tNgotCXBzdWJ3CXhtbTMseG1tNwotCW1vdmRxYQlYTU1XT1JEIFtYTU1CTE9DSygwLDAscmRpLFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTAKLQltb3ZkcWEJWE1NV09SRCBbWE1NQkxPQ0soMSwwLHJkaSxTSVpFT0ZfRENURUxFTSldLCB4bW0xCi0JbW92ZHFhCVhNTVdPUkQgW1hNTUJMT0NLKDIsMCxyZGksU0laRU9GX0RDVEVMRU0pXSwgeG1tMgotCW1vdmRxYQlYTU1XT1JEIFtYTU1CTE9DSygzLDAscmRpLFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTMKKyAgICAgICAgcHhvciAgICB4bW0wLHhtbTQKKyAgICAgICAgcHhvciAgICB4bW0xLHhtbTUKKyAgICAgICAgcHhvciAgICB4bW0yLHhtbTYKKyAgICAgICAgcHhvciAgICB4bW0zLHhtbTcKKyAgICAgICAgcHN1YncgICB4bW0wLHhtbTQKKyAgICAgICAgcHN1YncgICB4bW0xLHhtbTUKKyAgICAgICAgcHN1YncgICB4bW0yLHhtbTYKKyAgICAgICAgcHN1YncgICB4bW0zLHhtbTcKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFtYTU1CTE9DSygwLDAscmRpLFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTAKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFtYTU1CTE9DSygxLDAscmRpLFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTEKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFtYTU1CTE9DSygyLDAscmRpLFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTIKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFtYTU1CTE9DSygzLDAscmRpLFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTMKIAotCWFkZAlyc2ksIGJ5dGUgMzIqU0laRU9GX0RDVEVMRU0KLQlhZGQJcmR4LCBieXRlIDMyKlNJWkVPRl9EQ1RFTEVNCi0JYWRkCXJkaSwgYnl0ZSAzMipTSVpFT0ZfSkNPRUYKLQlkZWMJcmF4Ci0Jam56CW5lYXIgLnF1YW50bG9vcAorICAgICAgICBhZGQgICAgIHJzaSwgYnl0ZSAzMipTSVpFT0ZfRENURUxFTQorICAgICAgICBhZGQgICAgIHJkeCwgYnl0ZSAzMipTSVpFT0ZfRENURUxFTQorICAgICAgICBhZGQgICAgIHJkaSwgYnl0ZSAzMipTSVpFT0ZfSkNPRUYKKyAgICAgICAgZGVjICAgICByYXgKKyAgICAgICAgam56ICAgICBuZWFyIC5xdWFudGxvb3AKIAotCXVuY29sbGVjdF9hcmdzCi0JcG9wCXJicAotCXJldAorICAgICAgICB1bmNvbGxlY3RfYXJncworICAgICAgICBwb3AgICAgIHJicAorICAgICAgICByZXQKIAogOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKIDsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KLQlhbGlnbgkxNgorICAgICAgICBhbGlnbiAgIDE2CmRpZmYgLS1naXQgYS9zaW1kL2pjcW50czJpLmFzbSBiL3NpbWQvamNxbnRzMmkuYXNtCmluZGV4IDA4NjRkNmUuLjA3Y2RjNjggMTAwNjQ0Ci0tLSBhL3NpbWQvamNxbnRzMmkuYXNtCisrKyBiL3NpbWQvamNxbnRzMmkuYXNtCkBAIC0yMCw4ICsyMCw4IEBACiAlaW5jbHVkZSAiamRjdC5pbmMiCiAKIDsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlTRUNUSU9OCVNFR19URVhUCi0JQklUUwkzMgorICAgICAgICBTRUNUSU9OIFNFR19URVhUCisgICAgICAgIEJJVFMgICAgMzIKIDsKIDsgTG9hZCBkYXRhIGludG8gd29ya3NwYWNlLCBhcHBseWluZyB1bnNpZ25lZC0+c2lnbmVkIGNvbnZlcnNpb24KIDsKQEAgLTMwLDcwICszMCw3MCBAQAogOyAgICAgICAgICAgICAgICAgICAgICBEQ1RFTEVNICogd29ya3NwYWNlKTsKIDsKIAotJWRlZmluZSBzYW1wbGVfZGF0YQllYnArOAkJOyBKU0FNUEFSUkFZIHNhbXBsZV9kYXRhCi0lZGVmaW5lIHN0YXJ0X2NvbAllYnArMTIJCTsgSkRJTUVOU0lPTiBzdGFydF9jb2wKLSVkZWZpbmUgd29ya3NwYWNlCWVicCsxNgkJOyBEQ1RFTEVNICogd29ya3NwYWNlCislZGVmaW5lIHNhbXBsZV9kYXRhICAgICBlYnArOCAgICAgICAgICAgOyBKU0FNUEFSUkFZIHNhbXBsZV9kYXRhCislZGVmaW5lIHN0YXJ0X2NvbCAgICAgICBlYnArMTIgICAgICAgICAgOyBKRElNRU5TSU9OIHN0YXJ0X2NvbAorJWRlZmluZSB3b3Jrc3BhY2UgICAgICAgZWJwKzE2ICAgICAgICAgIDsgRENURUxFTSAqIHdvcmtzcGFjZQogCi0JYWxpZ24JMTYKLQlnbG9iYWwJRVhUTihqc2ltZF9jb252c2FtcF9zc2UyKQorICAgICAgICBhbGlnbiAgIDE2CisgICAgICAgIGdsb2JhbCAgRVhUTihqc2ltZF9jb252c2FtcF9zc2UyKQogCiBFWFROKGpzaW1kX2NvbnZzYW1wX3NzZTIpOgotCXB1c2gJZWJwCi0JbW92CWVicCxlc3AKLQlwdXNoCWVieAotOwlwdXNoCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLTsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi0JcHVzaAllc2kKLQlwdXNoCWVkaQorICAgICAgICBwdXNoICAgIGVicAorICAgICAgICBtb3YgICAgIGVicCxlc3AKKyAgICAgICAgcHVzaCAgICBlYngKKzsgICAgICAgcHVzaCAgICBlY3ggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICAgICAgcHVzaCAgICBlZHggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICAgICAgcHVzaCAgICBlc2kKKyAgICAgICAgcHVzaCAgICBlZGkKIAotCXB4b3IJeG1tNix4bW02CQk7IHhtbTY9KGFsbCAwJ3MpCi0JcGNtcGVxdwl4bW03LHhtbTcKLQlwc2xsdwl4bW03LDcJCQk7IHhtbTc9ezB4RkY4MCAweEZGODAgMHhGRjgwIDB4RkY4MCAuLn0KKyAgICAgICAgcHhvciAgICB4bW02LHhtbTYgICAgICAgICAgICAgICA7IHhtbTY9KGFsbCAwJ3MpCisgICAgICAgIHBjbXBlcXcgeG1tNyx4bW03CisgICAgICAgIHBzbGx3ICAgeG1tNyw3ICAgICAgICAgICAgICAgICAgOyB4bW03PXsweEZGODAgMHhGRjgwIDB4RkY4MCAweEZGODAgLi59CiAKLQltb3YJZXNpLCBKU0FNUEFSUkFZIFtzYW1wbGVfZGF0YV0JOyAoSlNBTVBST1cgKikKLQltb3YJZWF4LCBKRElNRU5TSU9OIFtzdGFydF9jb2xdCi0JbW92CWVkaSwgUE9JTlRFUiBbd29ya3NwYWNlXQk7IChEQ1RFTEVNICopCi0JbW92CWVjeCwgRENUU0laRS80Ci0JYWxpZ254CTE2LDcKKyAgICAgICAgbW92ICAgICBlc2ksIEpTQU1QQVJSQVkgW3NhbXBsZV9kYXRhXSAgIDsgKEpTQU1QUk9XICopCisgICAgICAgIG1vdiAgICAgZWF4LCBKRElNRU5TSU9OIFtzdGFydF9jb2xdCisgICAgICAgIG1vdiAgICAgZWRpLCBQT0lOVEVSIFt3b3Jrc3BhY2VdICAgICAgICA7IChEQ1RFTEVNICopCisgICAgICAgIG1vdiAgICAgZWN4LCBEQ1RTSVpFLzQKKyAgICAgICAgYWxpZ254ICAxNiw3CiAuY29udmxvb3A6Ci0JbW92CWVieCwgSlNBTVBST1cgW2VzaSswKlNJWkVPRl9KU0FNUFJPV10JOyAoSlNBTVBMRSAqKQotCW1vdgllZHgsIEpTQU1QUk9XIFtlc2krMSpTSVpFT0ZfSlNBTVBST1ddCTsgKEpTQU1QTEUgKikKKyAgICAgICAgbW92ICAgICBlYngsIEpTQU1QUk9XIFtlc2krMCpTSVpFT0ZfSlNBTVBST1ddICAgOyAoSlNBTVBMRSAqKQorICAgICAgICBtb3YgICAgIGVkeCwgSlNBTVBST1cgW2VzaSsxKlNJWkVPRl9KU0FNUFJPV10gICA7IChKU0FNUExFICopCiAKLQltb3ZxCXhtbTAsIFhNTV9NTVdPUkQgW2VieCtlYXgqU0laRU9GX0pTQU1QTEVdCTsgeG1tMD0oMDEyMzQ1NjcpCi0JbW92cQl4bW0xLCBYTU1fTU1XT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXQk7IHhtbTE9KDg5QUJDREVGKQorICAgICAgICBtb3ZxICAgIHhtbTAsIFhNTV9NTVdPUkQgW2VieCtlYXgqU0laRU9GX0pTQU1QTEVdICAgICAgIDsgeG1tMD0oMDEyMzQ1NjcpCisgICAgICAgIG1vdnEgICAgeG1tMSwgWE1NX01NV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0gICAgICAgOyB4bW0xPSg4OUFCQ0RFRikKIAotCW1vdgllYngsIEpTQU1QUk9XIFtlc2krMipTSVpFT0ZfSlNBTVBST1ddCTsgKEpTQU1QTEUgKikKLQltb3YJZWR4LCBKU0FNUFJPVyBbZXNpKzMqU0laRU9GX0pTQU1QUk9XXQk7IChKU0FNUExFICopCisgICAgICAgIG1vdiAgICAgZWJ4LCBKU0FNUFJPVyBbZXNpKzIqU0laRU9GX0pTQU1QUk9XXSAgIDsgKEpTQU1QTEUgKikKKyAgICAgICAgbW92ICAgICBlZHgsIEpTQU1QUk9XIFtlc2krMypTSVpFT0ZfSlNBTVBST1ddICAgOyAoSlNBTVBMRSAqKQogCi0JbW92cQl4bW0yLCBYTU1fTU1XT1JEIFtlYngrZWF4KlNJWkVPRl9KU0FNUExFXQk7IHhtbTI9KEdISUpLTE1OKQotCW1vdnEJeG1tMywgWE1NX01NV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0JOyB4bW0zPShPUFFSU1RVVikKKyAgICAgICAgbW92cSAgICB4bW0yLCBYTU1fTU1XT1JEIFtlYngrZWF4KlNJWkVPRl9KU0FNUExFXSAgICAgICA7IHhtbTI9KEdISUpLTE1OKQorICAgICAgICBtb3ZxICAgIHhtbTMsIFhNTV9NTVdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdICAgICAgIDsgeG1tMz0oT1BRUlNUVVYpCiAKLQlwdW5wY2tsYncgeG1tMCx4bW02CQk7IHhtbTA9KDAxMjM0NTY3KQotCXB1bnBja2xidyB4bW0xLHhtbTYJCTsgeG1tMT0oODlBQkNERUYpCi0JcGFkZHcgICAgIHhtbTAseG1tNwotCXBhZGR3ICAgICB4bW0xLHhtbTcKLQlwdW5wY2tsYncgeG1tMix4bW02CQk7IHhtbTI9KEdISUpLTE1OKQotCXB1bnBja2xidyB4bW0zLHhtbTYJCTsgeG1tMz0oT1BRUlNUVVYpCi0JcGFkZHcgICAgIHhtbTIseG1tNwotCXBhZGR3ICAgICB4bW0zLHhtbTcKKyAgICAgICAgcHVucGNrbGJ3IHhtbTAseG1tNiAgICAgICAgICAgICA7IHhtbTA9KDAxMjM0NTY3KQorICAgICAgICBwdW5wY2tsYncgeG1tMSx4bW02ICAgICAgICAgICAgIDsgeG1tMT0oODlBQkNERUYpCisgICAgICAgIHBhZGR3ICAgICB4bW0wLHhtbTcKKyAgICAgICAgcGFkZHcgICAgIHhtbTEseG1tNworICAgICAgICBwdW5wY2tsYncgeG1tMix4bW02ICAgICAgICAgICAgIDsgeG1tMj0oR0hJSktMTU4pCisgICAgICAgIHB1bnBja2xidyB4bW0zLHhtbTYgICAgICAgICAgICAgOyB4bW0zPShPUFFSU1RVVikKKyAgICAgICAgcGFkZHcgICAgIHhtbTIseG1tNworICAgICAgICBwYWRkdyAgICAgeG1tMyx4bW03CiAKLQltb3ZkcWEJWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVkaSxTSVpFT0ZfRENURUxFTSldLCB4bW0wCi0JbW92ZHFhCVhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlZGksU0laRU9GX0RDVEVMRU0pXSwgeG1tMQotCW1vdmRxYQlYTU1XT1JEIFtYTU1CTE9DSygyLDAsZWRpLFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTIKLQltb3ZkcWEJWE1NV09SRCBbWE1NQkxPQ0soMywwLGVkaSxTSVpFT0ZfRENURUxFTSldLCB4bW0zCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVkaSxTSVpFT0ZfRENURUxFTSldLCB4bW0wCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVkaSxTSVpFT0ZfRENURUxFTSldLCB4bW0xCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbWE1NQkxPQ0soMiwwLGVkaSxTSVpFT0ZfRENURUxFTSldLCB4bW0yCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbWE1NQkxPQ0soMywwLGVkaSxTSVpFT0ZfRENURUxFTSldLCB4bW0zCiAKLQlhZGQJZXNpLCBieXRlIDQqU0laRU9GX0pTQU1QUk9XCi0JYWRkCWVkaSwgYnl0ZSA0KkRDVFNJWkUqU0laRU9GX0RDVEVMRU0KLQlkZWMJZWN4Ci0Jam56CXNob3J0IC5jb252bG9vcAorICAgICAgICBhZGQgICAgIGVzaSwgYnl0ZSA0KlNJWkVPRl9KU0FNUFJPVworICAgICAgICBhZGQgICAgIGVkaSwgYnl0ZSA0KkRDVFNJWkUqU0laRU9GX0RDVEVMRU0KKyAgICAgICAgZGVjICAgICBlY3gKKyAgICAgICAgam56ICAgICBzaG9ydCAuY29udmxvb3AKIAotCXBvcAllZGkKLQlwb3AJZXNpCi07CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi07CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi0JcG9wCWVieAotCXBvcAllYnAKLQlyZXQKKyAgICAgICAgcG9wICAgICBlZGkKKyAgICAgICAgcG9wICAgICBlc2kKKzsgICAgICAgcG9wICAgICBlZHggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICAgICAgcG9wICAgICBlY3ggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICAgICAgcG9wICAgICBlYngKKyAgICAgICAgcG9wICAgICBlYnAKKyAgICAgICAgcmV0CiAKIDsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDsKQEAgLTExMiw4OSArMTEyLDg5IEBACiAlZGVmaW5lIENPUlJFQ1RJT04obSxuLGIpIFhNTUJMT0NLKERDVFNJWkUqMSsobSksKG4pLChiKSxTSVpFT0ZfRENURUxFTSkKICVkZWZpbmUgU0NBTEUobSxuLGIpICAgICAgWE1NQkxPQ0soRENUU0laRSoyKyhtKSwobiksKGIpLFNJWkVPRl9EQ1RFTEVNKQogCi0lZGVmaW5lIGNvZWZfYmxvY2sJZWJwKzgJCTsgSkNPRUZQVFIgY29lZl9ibG9jawotJWRlZmluZSBkaXZpc29ycwllYnArMTIJCTsgRENURUxFTSAqIGRpdmlzb3JzCi0lZGVmaW5lIHdvcmtzcGFjZQllYnArMTYJCTsgRENURUxFTSAqIHdvcmtzcGFjZQorJWRlZmluZSBjb2VmX2Jsb2NrICAgICAgZWJwKzggICAgICAgICAgIDsgSkNPRUZQVFIgY29lZl9ibG9jaworJWRlZmluZSBkaXZpc29ycyAgICAgICAgZWJwKzEyICAgICAgICAgIDsgRENURUxFTSAqIGRpdmlzb3JzCislZGVmaW5lIHdvcmtzcGFjZSAgICAgICBlYnArMTYgICAgICAgICAgOyBEQ1RFTEVNICogd29ya3NwYWNlCiAKLQlhbGlnbgkxNgotCWdsb2JhbAlFWFROKGpzaW1kX3F1YW50aXplX3NzZTIpCisgICAgICAgIGFsaWduICAgMTYKKyAgICAgICAgZ2xvYmFsICBFWFROKGpzaW1kX3F1YW50aXplX3NzZTIpCiAKIEVYVE4oanNpbWRfcXVhbnRpemVfc3NlMik6Ci0JcHVzaAllYnAKLQltb3YJZWJwLGVzcAotOwlwdXNoCWVieAkJOyB1bnVzZWQKLTsJcHVzaAllY3gJCTsgdW51c2VkCi07CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotCXB1c2gJZXNpCi0JcHVzaAllZGkKKyAgICAgICAgcHVzaCAgICBlYnAKKyAgICAgICAgbW92ICAgICBlYnAsZXNwCis7ICAgICAgIHB1c2ggICAgZWJ4ICAgICAgICAgICAgIDsgdW51c2VkCis7ICAgICAgIHB1c2ggICAgZWN4ICAgICAgICAgICAgIDsgdW51c2VkCis7ICAgICAgIHB1c2ggICAgZWR4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgICAgIHB1c2ggICAgZXNpCisgICAgICAgIHB1c2ggICAgZWRpCiAKLQltb3YJZXNpLCBQT0lOVEVSIFt3b3Jrc3BhY2VdCi0JbW92CWVkeCwgUE9JTlRFUiBbZGl2aXNvcnNdCi0JbW92CWVkaSwgSkNPRUZQVFIgW2NvZWZfYmxvY2tdCi0JbW92CWVheCwgRENUU0laRTIvMzIKLQlhbGlnbngJMTYsNworICAgICAgICBtb3YgICAgIGVzaSwgUE9JTlRFUiBbd29ya3NwYWNlXQorICAgICAgICBtb3YgICAgIGVkeCwgUE9JTlRFUiBbZGl2aXNvcnNdCisgICAgICAgIG1vdiAgICAgZWRpLCBKQ09FRlBUUiBbY29lZl9ibG9ja10KKyAgICAgICAgbW92ICAgICBlYXgsIERDVFNJWkUyLzMyCisgICAgICAgIGFsaWdueCAgMTYsNwogLnF1YW50bG9vcDoKLQltb3ZkcWEJeG1tNCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfRENURUxFTSldCi0JbW92ZHFhCXhtbTUsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlc2ksU0laRU9GX0RDVEVMRU0pXQotCW1vdmRxYQl4bW02LCBYTU1XT1JEIFtYTU1CTE9DSygyLDAsZXNpLFNJWkVPRl9EQ1RFTEVNKV0KLQltb3ZkcWEJeG1tNywgWE1NV09SRCBbWE1NQkxPQ0soMywwLGVzaSxTSVpFT0ZfRENURUxFTSldCi0JbW92ZHFhCXhtbTAseG1tNAotCW1vdmRxYQl4bW0xLHhtbTUKLQltb3ZkcWEJeG1tMix4bW02Ci0JbW92ZHFhCXhtbTMseG1tNwotCXBzcmF3CXhtbTQsKFdPUkRfQklULTEpCi0JcHNyYXcJeG1tNSwoV09SRF9CSVQtMSkKLQlwc3Jhdwl4bW02LChXT1JEX0JJVC0xKQotCXBzcmF3CXhtbTcsKFdPUkRfQklULTEpCi0JcHhvcgl4bW0wLHhtbTQKLQlweG9yCXhtbTEseG1tNQotCXB4b3IJeG1tMix4bW02Ci0JcHhvcgl4bW0zLHhtbTcKLQlwc3Vidwl4bW0wLHhtbTQJCTsgaWYgKHhtbTAgPCAwKSB4bW0wID0gLXhtbTA7Ci0JcHN1YncJeG1tMSx4bW01CQk7IGlmICh4bW0xIDwgMCkgeG1tMSA9IC14bW0xOwotCXBzdWJ3CXhtbTIseG1tNgkJOyBpZiAoeG1tMiA8IDApIHhtbTIgPSAteG1tMjsKLQlwc3Vidwl4bW0zLHhtbTcJCTsgaWYgKHhtbTMgPCAwKSB4bW0zID0gLXhtbTM7CisgICAgICAgIG1vdmRxYSAgeG1tNCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfRENURUxFTSldCisgICAgICAgIG1vdmRxYSAgeG1tNSwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVzaSxTSVpFT0ZfRENURUxFTSldCisgICAgICAgIG1vdmRxYSAgeG1tNiwgWE1NV09SRCBbWE1NQkxPQ0soMiwwLGVzaSxTSVpFT0ZfRENURUxFTSldCisgICAgICAgIG1vdmRxYSAgeG1tNywgWE1NV09SRCBbWE1NQkxPQ0soMywwLGVzaSxTSVpFT0ZfRENURUxFTSldCisgICAgICAgIG1vdmRxYSAgeG1tMCx4bW00CisgICAgICAgIG1vdmRxYSAgeG1tMSx4bW01CisgICAgICAgIG1vdmRxYSAgeG1tMix4bW02CisgICAgICAgIG1vdmRxYSAgeG1tMyx4bW03CisgICAgICAgIHBzcmF3ICAgeG1tNCwoV09SRF9CSVQtMSkKKyAgICAgICAgcHNyYXcgICB4bW01LChXT1JEX0JJVC0xKQorICAgICAgICBwc3JhdyAgIHhtbTYsKFdPUkRfQklULTEpCisgICAgICAgIHBzcmF3ICAgeG1tNywoV09SRF9CSVQtMSkKKyAgICAgICAgcHhvciAgICB4bW0wLHhtbTQKKyAgICAgICAgcHhvciAgICB4bW0xLHhtbTUKKyAgICAgICAgcHhvciAgICB4bW0yLHhtbTYKKyAgICAgICAgcHhvciAgICB4bW0zLHhtbTcKKyAgICAgICAgcHN1YncgICB4bW0wLHhtbTQgICAgICAgICAgICAgICA7IGlmICh4bW0wIDwgMCkgeG1tMCA9IC14bW0wOworICAgICAgICBwc3VidyAgIHhtbTEseG1tNSAgICAgICAgICAgICAgIDsgaWYgKHhtbTEgPCAwKSB4bW0xID0gLXhtbTE7CisgICAgICAgIHBzdWJ3ICAgeG1tMix4bW02ICAgICAgICAgICAgICAgOyBpZiAoeG1tMiA8IDApIHhtbTIgPSAteG1tMjsKKyAgICAgICAgcHN1YncgICB4bW0zLHhtbTcgICAgICAgICAgICAgICA7IGlmICh4bW0zIDwgMCkgeG1tMyA9IC14bW0zOwogCi0JcGFkZHcJeG1tMCwgWE1NV09SRCBbQ09SUkVDVElPTigwLDAsZWR4KV0gIDsgY29ycmVjdGlvbiArIHJvdW5kZmFjdG9yCi0JcGFkZHcJeG1tMSwgWE1NV09SRCBbQ09SUkVDVElPTigxLDAsZWR4KV0KLQlwYWRkdwl4bW0yLCBYTU1XT1JEIFtDT1JSRUNUSU9OKDIsMCxlZHgpXQotCXBhZGR3CXhtbTMsIFhNTVdPUkQgW0NPUlJFQ1RJT04oMywwLGVkeCldCi0JcG11bGh1dwl4bW0wLCBYTU1XT1JEIFtSRUNJUFJPQ0FMKDAsMCxlZHgpXSAgOyByZWNpcHJvY2FsCi0JcG11bGh1dwl4bW0xLCBYTU1XT1JEIFtSRUNJUFJPQ0FMKDEsMCxlZHgpXQotCXBtdWxodXcJeG1tMiwgWE1NV09SRCBbUkVDSVBST0NBTCgyLDAsZWR4KV0KLQlwbXVsaHV3CXhtbTMsIFhNTVdPUkQgW1JFQ0lQUk9DQUwoMywwLGVkeCldCi0JcG11bGh1dwl4bW0wLCBYTU1XT1JEIFtTQ0FMRSgwLDAsZWR4KV0JOyBzY2FsZQotCXBtdWxodXcJeG1tMSwgWE1NV09SRCBbU0NBTEUoMSwwLGVkeCldCi0JcG11bGh1dwl4bW0yLCBYTU1XT1JEIFtTQ0FMRSgyLDAsZWR4KV0KLQlwbXVsaHV3CXhtbTMsIFhNTVdPUkQgW1NDQUxFKDMsMCxlZHgpXQorICAgICAgICBwYWRkdyAgIHhtbTAsIFhNTVdPUkQgW0NPUlJFQ1RJT04oMCwwLGVkeCldICA7IGNvcnJlY3Rpb24gKyByb3VuZGZhY3RvcgorICAgICAgICBwYWRkdyAgIHhtbTEsIFhNTVdPUkQgW0NPUlJFQ1RJT04oMSwwLGVkeCldCisgICAgICAgIHBhZGR3ICAgeG1tMiwgWE1NV09SRCBbQ09SUkVDVElPTigyLDAsZWR4KV0KKyAgICAgICAgcGFkZHcgICB4bW0zLCBYTU1XT1JEIFtDT1JSRUNUSU9OKDMsMCxlZHgpXQorICAgICAgICBwbXVsaHV3IHhtbTAsIFhNTVdPUkQgW1JFQ0lQUk9DQUwoMCwwLGVkeCldICA7IHJlY2lwcm9jYWwKKyAgICAgICAgcG11bGh1dyB4bW0xLCBYTU1XT1JEIFtSRUNJUFJPQ0FMKDEsMCxlZHgpXQorICAgICAgICBwbXVsaHV3IHhtbTIsIFhNTVdPUkQgW1JFQ0lQUk9DQUwoMiwwLGVkeCldCisgICAgICAgIHBtdWxodXcgeG1tMywgWE1NV09SRCBbUkVDSVBST0NBTCgzLDAsZWR4KV0KKyAgICAgICAgcG11bGh1dyB4bW0wLCBYTU1XT1JEIFtTQ0FMRSgwLDAsZWR4KV0gIDsgc2NhbGUKKyAgICAgICAgcG11bGh1dyB4bW0xLCBYTU1XT1JEIFtTQ0FMRSgxLDAsZWR4KV0KKyAgICAgICAgcG11bGh1dyB4bW0yLCBYTU1XT1JEIFtTQ0FMRSgyLDAsZWR4KV0KKyAgICAgICAgcG11bGh1dyB4bW0zLCBYTU1XT1JEIFtTQ0FMRSgzLDAsZWR4KV0KIAotCXB4b3IJeG1tMCx4bW00Ci0JcHhvcgl4bW0xLHhtbTUKLQlweG9yCXhtbTIseG1tNgotCXB4b3IJeG1tMyx4bW03Ci0JcHN1YncJeG1tMCx4bW00Ci0JcHN1YncJeG1tMSx4bW01Ci0JcHN1YncJeG1tMix4bW02Ci0JcHN1YncJeG1tMyx4bW03Ci0JbW92ZHFhCVhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZGksU0laRU9GX0RDVEVMRU0pXSwgeG1tMAotCW1vdmRxYQlYTU1XT1JEIFtYTU1CTE9DSygxLDAsZWRpLFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTEKLQltb3ZkcWEJWE1NV09SRCBbWE1NQkxPQ0soMiwwLGVkaSxTSVpFT0ZfRENURUxFTSldLCB4bW0yCi0JbW92ZHFhCVhNTVdPUkQgW1hNTUJMT0NLKDMsMCxlZGksU0laRU9GX0RDVEVMRU0pXSwgeG1tMworICAgICAgICBweG9yICAgIHhtbTAseG1tNAorICAgICAgICBweG9yICAgIHhtbTEseG1tNQorICAgICAgICBweG9yICAgIHhtbTIseG1tNgorICAgICAgICBweG9yICAgIHhtbTMseG1tNworICAgICAgICBwc3VidyAgIHhtbTAseG1tNAorICAgICAgICBwc3VidyAgIHhtbTEseG1tNQorICAgICAgICBwc3VidyAgIHhtbTIseG1tNgorICAgICAgICBwc3VidyAgIHhtbTMseG1tNworICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZGksU0laRU9GX0RDVEVMRU0pXSwgeG1tMAorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlZGksU0laRU9GX0RDVEVMRU0pXSwgeG1tMQorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlZGksU0laRU9GX0RDVEVMRU0pXSwgeG1tMgorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxlZGksU0laRU9GX0RDVEVMRU0pXSwgeG1tMwogCi0JYWRkCWVzaSwgYnl0ZSAzMipTSVpFT0ZfRENURUxFTQotCWFkZAllZHgsIGJ5dGUgMzIqU0laRU9GX0RDVEVMRU0KLQlhZGQJZWRpLCBieXRlIDMyKlNJWkVPRl9KQ09FRgotCWRlYwllYXgKLQlqbnoJbmVhciAucXVhbnRsb29wCisgICAgICAgIGFkZCAgICAgZXNpLCBieXRlIDMyKlNJWkVPRl9EQ1RFTEVNCisgICAgICAgIGFkZCAgICAgZWR4LCBieXRlIDMyKlNJWkVPRl9EQ1RFTEVNCisgICAgICAgIGFkZCAgICAgZWRpLCBieXRlIDMyKlNJWkVPRl9KQ09FRgorICAgICAgICBkZWMgICAgIGVheAorICAgICAgICBqbnogICAgIG5lYXIgLnF1YW50bG9vcAogCi0JcG9wCWVkaQotCXBvcAllc2kKLTsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLTsJcG9wCWVjeAkJOyB1bnVzZWQKLTsJcG9wCWVieAkJOyB1bnVzZWQKLQlwb3AJZWJwCi0JcmV0CisgICAgICAgIHBvcCAgICAgZWRpCisgICAgICAgIHBvcCAgICAgZXNpCis7ICAgICAgIHBvcCAgICAgZWR4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgICAgIHBvcCAgICAgZWN4ICAgICAgICAgICAgIDsgdW51c2VkCis7ICAgICAgIHBvcCAgICAgZWJ4ICAgICAgICAgICAgIDsgdW51c2VkCisgICAgICAgIHBvcCAgICAgZWJwCisgICAgICAgIHJldAogCiA7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQogOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgotCWFsaWduCTE2CisgICAgICAgIGFsaWduICAgMTYKZGlmZiAtLWdpdCBhL3NpbWQvamNxbnRzc2UuYXNtIGIvc2ltZC9qY3FudHNzZS5hc20KaW5kZXggMzA2NWVjYS4uMmUzMmQwYyAxMDA2NDQKLS0tIGEvc2ltZC9qY3FudHNzZS5hc20KKysrIGIvc2ltZC9qY3FudHNzZS5hc20KQEAgLTIwLDggKzIwLDggQEAKICVpbmNsdWRlICJqZGN0LmluYyIKIAogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCVNFQ1RJT04JU0VHX1RFWFQKLQlCSVRTCTMyCisgICAgICAgIFNFQ1RJT04gU0VHX1RFWFQKKyAgICAgICAgQklUUyAgICAzMgogOwogOyBMb2FkIGRhdGEgaW50byB3b3Jrc3BhY2UsIGFwcGx5aW5nIHVuc2lnbmVkLT5zaWduZWQgY29udmVyc2lvbgogOwpAQCAtMzAsOTggKzMwLDk4IEBACiA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFTVF9GTE9BVCAqIHdvcmtzcGFjZSk7CiA7CiAKLSVkZWZpbmUgc2FtcGxlX2RhdGEJZWJwKzgJCTsgSlNBTVBBUlJBWSBzYW1wbGVfZGF0YQotJWRlZmluZSBzdGFydF9jb2wJZWJwKzEyCQk7IEpESU1FTlNJT04gc3RhcnRfY29sCi0lZGVmaW5lIHdvcmtzcGFjZQllYnArMTYJCTsgRkFTVF9GTE9BVCAqIHdvcmtzcGFjZQorJWRlZmluZSBzYW1wbGVfZGF0YSAgICAgZWJwKzggICAgICAgICAgIDsgSlNBTVBBUlJBWSBzYW1wbGVfZGF0YQorJWRlZmluZSBzdGFydF9jb2wgICAgICAgZWJwKzEyICAgICAgICAgIDsgSkRJTUVOU0lPTiBzdGFydF9jb2wKKyVkZWZpbmUgd29ya3NwYWNlICAgICAgIGVicCsxNiAgICAgICAgICA7IEZBU1RfRkxPQVQgKiB3b3Jrc3BhY2UKIAotCWFsaWduCTE2Ci0JZ2xvYmFsCUVYVE4oanNpbWRfY29udnNhbXBfZmxvYXRfc3NlKQorICAgICAgICBhbGlnbiAgIDE2CisgICAgICAgIGdsb2JhbCAgRVhUTihqc2ltZF9jb252c2FtcF9mbG9hdF9zc2UpCiAKIEVYVE4oanNpbWRfY29udnNhbXBfZmxvYXRfc3NlKToKLQlwdXNoCWVicAotCW1vdgllYnAsZXNwCi0JcHVzaAllYngKLTsJcHVzaAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi07CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotCXB1c2gJZXNpCi0JcHVzaAllZGkKKyAgICAgICAgcHVzaCAgICBlYnAKKyAgICAgICAgbW92ICAgICBlYnAsZXNwCisgICAgICAgIHB1c2ggICAgZWJ4Cis7ICAgICAgIHB1c2ggICAgZWN4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgICAgIHB1c2ggICAgZWR4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgICAgIHB1c2ggICAgZXNpCisgICAgICAgIHB1c2ggICAgZWRpCiAKLQlwY21wZXF3ICBtbTcsbW03Ci0JcHNsbHcgICAgbW03LDcKLQlwYWNrc3N3YiBtbTcsbW03CQk7IG1tNyA9IFBCX0NFTlRFUkpTQU1QTEUgKDB4ODA4MDgwLi4pCisgICAgICAgIHBjbXBlcXcgIG1tNyxtbTcKKyAgICAgICAgcHNsbHcgICAgbW03LDcKKyAgICAgICAgcGFja3Nzd2IgbW03LG1tNyAgICAgICAgICAgICAgICA7IG1tNyA9IFBCX0NFTlRFUkpTQU1QTEUgKDB4ODA4MDgwLi4pCiAKLQltb3YJZXNpLCBKU0FNUEFSUkFZIFtzYW1wbGVfZGF0YV0JOyAoSlNBTVBST1cgKikKLQltb3YJZWF4LCBKRElNRU5TSU9OIFtzdGFydF9jb2xdCi0JbW92CWVkaSwgUE9JTlRFUiBbd29ya3NwYWNlXQk7IChEQ1RFTEVNICopCi0JbW92CWVjeCwgRENUU0laRS8yCi0JYWxpZ254CTE2LDcKKyAgICAgICAgbW92ICAgICBlc2ksIEpTQU1QQVJSQVkgW3NhbXBsZV9kYXRhXSAgIDsgKEpTQU1QUk9XICopCisgICAgICAgIG1vdiAgICAgZWF4LCBKRElNRU5TSU9OIFtzdGFydF9jb2xdCisgICAgICAgIG1vdiAgICAgZWRpLCBQT0lOVEVSIFt3b3Jrc3BhY2VdICAgICAgICA7IChEQ1RFTEVNICopCisgICAgICAgIG1vdiAgICAgZWN4LCBEQ1RTSVpFLzIKKyAgICAgICAgYWxpZ254ICAxNiw3CiAuY29udmxvb3A6Ci0JbW92CWVieCwgSlNBTVBST1cgW2VzaSswKlNJWkVPRl9KU0FNUFJPV10JOyAoSlNBTVBMRSAqKQotCW1vdgllZHgsIEpTQU1QUk9XIFtlc2krMSpTSVpFT0ZfSlNBTVBST1ddCTsgKEpTQU1QTEUgKikKKyAgICAgICAgbW92ICAgICBlYngsIEpTQU1QUk9XIFtlc2krMCpTSVpFT0ZfSlNBTVBST1ddICAgOyAoSlNBTVBMRSAqKQorICAgICAgICBtb3YgICAgIGVkeCwgSlNBTVBST1cgW2VzaSsxKlNJWkVPRl9KU0FNUFJPV10gICA7IChKU0FNUExFICopCiAKLQltb3ZxCW1tMCwgTU1XT1JEIFtlYngrZWF4KlNJWkVPRl9KU0FNUExFXQotCW1vdnEJbW0xLCBNTVdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdCisgICAgICAgIG1vdnEgICAgbW0wLCBNTVdPUkQgW2VieCtlYXgqU0laRU9GX0pTQU1QTEVdCisgICAgICAgIG1vdnEgICAgbW0xLCBNTVdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdCiAKLQlwc3ViYgltbTAsbW03CQkJCTsgbW0wPSgwMTIzNDU2NykKLQlwc3ViYgltbTEsbW03CQkJCTsgbW0xPSg4OUFCQ0RFRikKKyAgICAgICAgcHN1YmIgICBtbTAsbW03ICAgICAgICAgICAgICAgICAgICAgICAgIDsgbW0wPSgwMTIzNDU2NykKKyAgICAgICAgcHN1YmIgICBtbTEsbW03ICAgICAgICAgICAgICAgICAgICAgICAgIDsgbW0xPSg4OUFCQ0RFRikKIAotCXB1bnBja2xidyBtbTIsbW0wCQkJOyBtbTI9KCowKjEqMiozKQotCXB1bnBja2hidyBtbTAsbW0wCQkJOyBtbTA9KCo0KjUqNio3KQotCXB1bnBja2xidyBtbTMsbW0xCQkJOyBtbTM9KCo4KjkqQSpCKQotCXB1bnBja2hidyBtbTEsbW0xCQkJOyBtbTE9KCpDKkQqRSpGKQorICAgICAgICBwdW5wY2tsYncgbW0yLG1tMCAgICAgICAgICAgICAgICAgICAgICAgOyBtbTI9KCowKjEqMiozKQorICAgICAgICBwdW5wY2toYncgbW0wLG1tMCAgICAgICAgICAgICAgICAgICAgICAgOyBtbTA9KCo0KjUqNio3KQorICAgICAgICBwdW5wY2tsYncgbW0zLG1tMSAgICAgICAgICAgICAgICAgICAgICAgOyBtbTM9KCo4KjkqQSpCKQorICAgICAgICBwdW5wY2toYncgbW0xLG1tMSAgICAgICAgICAgICAgICAgICAgICAgOyBtbTE9KCpDKkQqRSpGKQogCi0JcHVucGNrbHdkIG1tNCxtbTIJCQk7IG1tND0oKioqMCoqKjEpCi0JcHVucGNraHdkIG1tMixtbTIJCQk7IG1tMj0oKioqMioqKjMpCi0JcHVucGNrbHdkIG1tNSxtbTAJCQk7IG1tNT0oKioqNCoqKjUpCi0JcHVucGNraHdkIG1tMCxtbTAJCQk7IG1tMD0oKioqNioqKjcpCisgICAgICAgIHB1bnBja2x3ZCBtbTQsbW0yICAgICAgICAgICAgICAgICAgICAgICA7IG1tND0oKioqMCoqKjEpCisgICAgICAgIHB1bnBja2h3ZCBtbTIsbW0yICAgICAgICAgICAgICAgICAgICAgICA7IG1tMj0oKioqMioqKjMpCisgICAgICAgIHB1bnBja2x3ZCBtbTUsbW0wICAgICAgICAgICAgICAgICAgICAgICA7IG1tNT0oKioqNCoqKjUpCisgICAgICAgIHB1bnBja2h3ZCBtbTAsbW0wICAgICAgICAgICAgICAgICAgICAgICA7IG1tMD0oKioqNioqKjcpCiAKLQlwc3JhZCAgICAgbW00LChEV09SRF9CSVQtQllURV9CSVQpCTsgbW00PSgwMSkKLQlwc3JhZCAgICAgbW0yLChEV09SRF9CSVQtQllURV9CSVQpCTsgbW0yPSgyMykKLQljdnRwaTJwcyAgeG1tMCxtbTQJCQk7IHhtbTA9KDAxKiopCi0JY3Z0cGkycHMgIHhtbTEsbW0yCQkJOyB4bW0xPSgyMyoqKQotCXBzcmFkICAgICBtbTUsKERXT1JEX0JJVC1CWVRFX0JJVCkJOyBtbTU9KDQ1KQotCXBzcmFkICAgICBtbTAsKERXT1JEX0JJVC1CWVRFX0JJVCkJOyBtbTA9KDY3KQotCWN2dHBpMnBzICB4bW0yLG1tNQkJCTsgeG1tMj0oNDUqKikKLQljdnRwaTJwcyAgeG1tMyxtbTAJCQk7IHhtbTM9KDY3KiopCisgICAgICAgIHBzcmFkICAgICBtbTQsKERXT1JEX0JJVC1CWVRFX0JJVCkgICAgICA7IG1tND0oMDEpCisgICAgICAgIHBzcmFkICAgICBtbTIsKERXT1JEX0JJVC1CWVRFX0JJVCkgICAgICA7IG1tMj0oMjMpCisgICAgICAgIGN2dHBpMnBzICB4bW0wLG1tNCAgICAgICAgICAgICAgICAgICAgICA7IHhtbTA9KDAxKiopCisgICAgICAgIGN2dHBpMnBzICB4bW0xLG1tMiAgICAgICAgICAgICAgICAgICAgICA7IHhtbTE9KDIzKiopCisgICAgICAgIHBzcmFkICAgICBtbTUsKERXT1JEX0JJVC1CWVRFX0JJVCkgICAgICA7IG1tNT0oNDUpCisgICAgICAgIHBzcmFkICAgICBtbTAsKERXT1JEX0JJVC1CWVRFX0JJVCkgICAgICA7IG1tMD0oNjcpCisgICAgICAgIGN2dHBpMnBzICB4bW0yLG1tNSAgICAgICAgICAgICAgICAgICAgICA7IHhtbTI9KDQ1KiopCisgICAgICAgIGN2dHBpMnBzICB4bW0zLG1tMCAgICAgICAgICAgICAgICAgICAgICA7IHhtbTM9KDY3KiopCiAKLQlwdW5wY2tsd2QgbW02LG1tMwkJCTsgbW02PSgqKio4KioqOSkKLQlwdW5wY2tod2QgbW0zLG1tMwkJCTsgbW0zPSgqKipBKioqQikKLQlwdW5wY2tsd2QgbW00LG1tMQkJCTsgbW00PSgqKipDKioqRCkKLQlwdW5wY2tod2QgbW0xLG1tMQkJCTsgbW0xPSgqKipFKioqRikKKyAgICAgICAgcHVucGNrbHdkIG1tNixtbTMgICAgICAgICAgICAgICAgICAgICAgIDsgbW02PSgqKio4KioqOSkKKyAgICAgICAgcHVucGNraHdkIG1tMyxtbTMgICAgICAgICAgICAgICAgICAgICAgIDsgbW0zPSgqKipBKioqQikKKyAgICAgICAgcHVucGNrbHdkIG1tNCxtbTEgICAgICAgICAgICAgICAgICAgICAgIDsgbW00PSgqKipDKioqRCkKKyAgICAgICAgcHVucGNraHdkIG1tMSxtbTEgICAgICAgICAgICAgICAgICAgICAgIDsgbW0xPSgqKipFKioqRikKIAotCXBzcmFkICAgICBtbTYsKERXT1JEX0JJVC1CWVRFX0JJVCkJOyBtbTY9KDg5KQotCXBzcmFkICAgICBtbTMsKERXT1JEX0JJVC1CWVRFX0JJVCkJOyBtbTM9KEFCKQotCWN2dHBpMnBzICB4bW00LG1tNgkJCTsgeG1tND0oODkqKikKLQljdnRwaTJwcyAgeG1tNSxtbTMJCQk7IHhtbTU9KEFCKiopCi0JcHNyYWQgICAgIG1tNCwoRFdPUkRfQklULUJZVEVfQklUKQk7IG1tND0oQ0QpCi0JcHNyYWQgICAgIG1tMSwoRFdPUkRfQklULUJZVEVfQklUKQk7IG1tMT0oRUYpCi0JY3Z0cGkycHMgIHhtbTYsbW00CQkJOyB4bW02PShDRCoqKQotCWN2dHBpMnBzICB4bW03LG1tMQkJCTsgeG1tNz0oRUYqKikKKyAgICAgICAgcHNyYWQgICAgIG1tNiwoRFdPUkRfQklULUJZVEVfQklUKSAgICAgIDsgbW02PSg4OSkKKyAgICAgICAgcHNyYWQgICAgIG1tMywoRFdPUkRfQklULUJZVEVfQklUKSAgICAgIDsgbW0zPShBQikKKyAgICAgICAgY3Z0cGkycHMgIHhtbTQsbW02ICAgICAgICAgICAgICAgICAgICAgIDsgeG1tND0oODkqKikKKyAgICAgICAgY3Z0cGkycHMgIHhtbTUsbW0zICAgICAgICAgICAgICAgICAgICAgIDsgeG1tNT0oQUIqKikKKyAgICAgICAgcHNyYWQgICAgIG1tNCwoRFdPUkRfQklULUJZVEVfQklUKSAgICAgIDsgbW00PShDRCkKKyAgICAgICAgcHNyYWQgICAgIG1tMSwoRFdPUkRfQklULUJZVEVfQklUKSAgICAgIDsgbW0xPShFRikKKyAgICAgICAgY3Z0cGkycHMgIHhtbTYsbW00ICAgICAgICAgICAgICAgICAgICAgIDsgeG1tNj0oQ0QqKikKKyAgICAgICAgY3Z0cGkycHMgIHhtbTcsbW0xICAgICAgICAgICAgICAgICAgICAgIDsgeG1tNz0oRUYqKikKIAotCW1vdmxocHMgICB4bW0wLHhtbTEJCQk7IHhtbTA9KDAxMjMpCi0JbW92bGhwcyAgIHhtbTIseG1tMwkJCTsgeG1tMj0oNDU2NykKLQltb3ZsaHBzICAgeG1tNCx4bW01CQkJOyB4bW00PSg4OUFCKQotCW1vdmxocHMgICB4bW02LHhtbTcJCQk7IHhtbTY9KENERUYpCisgICAgICAgIG1vdmxocHMgICB4bW0wLHhtbTEgICAgICAgICAgICAgICAgICAgICA7IHhtbTA9KDAxMjMpCisgICAgICAgIG1vdmxocHMgICB4bW0yLHhtbTMgICAgICAgICAgICAgICAgICAgICA7IHhtbTI9KDQ1NjcpCisgICAgICAgIG1vdmxocHMgICB4bW00LHhtbTUgICAgICAgICAgICAgICAgICAgICA7IHhtbTQ9KDg5QUIpCisgICAgICAgIG1vdmxocHMgICB4bW02LHhtbTcgICAgICAgICAgICAgICAgICAgICA7IHhtbTY9KENERUYpCiAKLQltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0wCi0JbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDAsMSxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMgotCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygxLDAsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTQKLQltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMSwxLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW02CisgICAgICAgIG1vdmFwcyAgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0wCisgICAgICAgIG1vdmFwcyAgWE1NV09SRCBbWE1NQkxPQ0soMCwxLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0yCisgICAgICAgIG1vdmFwcyAgWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW00CisgICAgICAgIG1vdmFwcyAgWE1NV09SRCBbWE1NQkxPQ0soMSwxLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW02CiAKLQlhZGQJZXNpLCBieXRlIDIqU0laRU9GX0pTQU1QUk9XCi0JYWRkCWVkaSwgYnl0ZSAyKkRDVFNJWkUqU0laRU9GX0ZBU1RfRkxPQVQKLQlkZWMJZWN4Ci0Jam56CW5lYXIgLmNvbnZsb29wCisgICAgICAgIGFkZCAgICAgZXNpLCBieXRlIDIqU0laRU9GX0pTQU1QUk9XCisgICAgICAgIGFkZCAgICAgZWRpLCBieXRlIDIqRENUU0laRSpTSVpFT0ZfRkFTVF9GTE9BVAorICAgICAgICBkZWMgICAgIGVjeAorICAgICAgICBqbnogICAgIG5lYXIgLmNvbnZsb29wCiAKLQllbW1zCQk7IGVtcHR5IE1NWCBzdGF0ZQorICAgICAgICBlbW1zICAgICAgICAgICAgOyBlbXB0eSBNTVggc3RhdGUKIAotCXBvcAllZGkKLQlwb3AJZXNpCi07CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi07CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi0JcG9wCWVieAotCXBvcAllYnAKLQlyZXQKKyAgICAgICAgcG9wICAgICBlZGkKKyAgICAgICAgcG9wICAgICBlc2kKKzsgICAgICAgcG9wICAgICBlZHggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICAgICAgcG9wICAgICBlY3ggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICAgICAgcG9wICAgICBlYngKKyAgICAgICAgcG9wICAgICBlYnAKKyAgICAgICAgcmV0CiAKIAogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTMzLDc5ICsxMzMsNzkgQEAKIDsgICAgICAgICAgICAgICAgICAgICAgICAgICBGQVNUX0ZMT0FUICogd29ya3NwYWNlKTsKIDsKIAotJWRlZmluZSBjb2VmX2Jsb2NrCWVicCs4CQk7IEpDT0VGUFRSIGNvZWZfYmxvY2sKLSVkZWZpbmUgZGl2aXNvcnMJZWJwKzEyCQk7IEZBU1RfRkxPQVQgKiBkaXZpc29ycwotJWRlZmluZSB3b3Jrc3BhY2UJZWJwKzE2CQk7IEZBU1RfRkxPQVQgKiB3b3Jrc3BhY2UKKyVkZWZpbmUgY29lZl9ibG9jayAgICAgIGVicCs4ICAgICAgICAgICA7IEpDT0VGUFRSIGNvZWZfYmxvY2sKKyVkZWZpbmUgZGl2aXNvcnMgICAgICAgIGVicCsxMiAgICAgICAgICA7IEZBU1RfRkxPQVQgKiBkaXZpc29ycworJWRlZmluZSB3b3Jrc3BhY2UgICAgICAgZWJwKzE2ICAgICAgICAgIDsgRkFTVF9GTE9BVCAqIHdvcmtzcGFjZQogCi0JYWxpZ24JMTYKLQlnbG9iYWwJRVhUTihqc2ltZF9xdWFudGl6ZV9mbG9hdF9zc2UpCisgICAgICAgIGFsaWduICAgMTYKKyAgICAgICAgZ2xvYmFsICBFWFROKGpzaW1kX3F1YW50aXplX2Zsb2F0X3NzZSkKIAogRVhUTihqc2ltZF9xdWFudGl6ZV9mbG9hdF9zc2UpOgotCXB1c2gJZWJwCi0JbW92CWVicCxlc3AKLTsJcHVzaAllYngJCTsgdW51c2VkCi07CXB1c2gJZWN4CQk7IHVudXNlZAotOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLQlwdXNoCWVzaQotCXB1c2gJZWRpCisgICAgICAgIHB1c2ggICAgZWJwCisgICAgICAgIG1vdiAgICAgZWJwLGVzcAorOyAgICAgICBwdXNoICAgIGVieCAgICAgICAgICAgICA7IHVudXNlZAorOyAgICAgICBwdXNoICAgIGVjeCAgICAgICAgICAgICA7IHVudXNlZAorOyAgICAgICBwdXNoICAgIGVkeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgICAgICBwdXNoICAgIGVzaQorICAgICAgICBwdXNoICAgIGVkaQogCi0JbW92CWVzaSwgUE9JTlRFUiBbd29ya3NwYWNlXQotCW1vdgllZHgsIFBPSU5URVIgW2Rpdmlzb3JzXQotCW1vdgllZGksIEpDT0VGUFRSIFtjb2VmX2Jsb2NrXQotCW1vdgllYXgsIERDVFNJWkUyLzE2Ci0JYWxpZ254CTE2LDcKKyAgICAgICAgbW92ICAgICBlc2ksIFBPSU5URVIgW3dvcmtzcGFjZV0KKyAgICAgICAgbW92ICAgICBlZHgsIFBPSU5URVIgW2Rpdmlzb3JzXQorICAgICAgICBtb3YgICAgIGVkaSwgSkNPRUZQVFIgW2NvZWZfYmxvY2tdCisgICAgICAgIG1vdiAgICAgZWF4LCBEQ1RTSVpFMi8xNgorICAgICAgICBhbGlnbnggIDE2LDcKIC5xdWFudGxvb3A6Ci0JbW92YXBzCXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQotCW1vdmFwcwl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygwLDEsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KLQltdWxwcwl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KLQltdWxwcwl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygwLDEsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KLQltb3ZhcHMJeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCi0JbW92YXBzCXhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMSxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQotCW11bHBzCXhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQotCW11bHBzCXhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMSxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgICAgICBtb3ZhcHMgIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgICAgICBtb3ZhcHMgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMSxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgICAgICBtdWxwcyAgIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgICAgICBtdWxwcyAgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMSxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgICAgICBtb3ZhcHMgIHhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgICAgICBtb3ZhcHMgIHhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMSxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgICAgICBtdWxwcyAgIHhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgICAgICBtdWxwcyAgIHhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMSxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQogCi0JbW92aGxwcyAgeG1tNCx4bW0wCi0JbW92aGxwcyAgeG1tNSx4bW0xCisgICAgICAgIG1vdmhscHMgIHhtbTQseG1tMAorICAgICAgICBtb3ZobHBzICB4bW01LHhtbTEKIAotCWN2dHBzMnBpIG1tMCx4bW0wCi0JY3Z0cHMycGkgbW0xLHhtbTEKLQljdnRwczJwaSBtbTQseG1tNAotCWN2dHBzMnBpIG1tNSx4bW01CisgICAgICAgIGN2dHBzMnBpIG1tMCx4bW0wCisgICAgICAgIGN2dHBzMnBpIG1tMSx4bW0xCisgICAgICAgIGN2dHBzMnBpIG1tNCx4bW00CisgICAgICAgIGN2dHBzMnBpIG1tNSx4bW01CiAKLQltb3ZobHBzICB4bW02LHhtbTIKLQltb3ZobHBzICB4bW03LHhtbTMKKyAgICAgICAgbW92aGxwcyAgeG1tNix4bW0yCisgICAgICAgIG1vdmhscHMgIHhtbTcseG1tMwogCi0JY3Z0cHMycGkgbW0yLHhtbTIKLQljdnRwczJwaSBtbTMseG1tMwotCWN2dHBzMnBpIG1tNix4bW02Ci0JY3Z0cHMycGkgbW03LHhtbTcKKyAgICAgICAgY3Z0cHMycGkgbW0yLHhtbTIKKyAgICAgICAgY3Z0cHMycGkgbW0zLHhtbTMKKyAgICAgICAgY3Z0cHMycGkgbW02LHhtbTYKKyAgICAgICAgY3Z0cHMycGkgbW03LHhtbTcKIAotCXBhY2tzc2R3IG1tMCxtbTQKLQlwYWNrc3NkdyBtbTEsbW01Ci0JcGFja3NzZHcgbW0yLG1tNgotCXBhY2tzc2R3IG1tMyxtbTcKKyAgICAgICAgcGFja3NzZHcgbW0wLG1tNAorICAgICAgICBwYWNrc3NkdyBtbTEsbW01CisgICAgICAgIHBhY2tzc2R3IG1tMixtbTYKKyAgICAgICAgcGFja3NzZHcgbW0zLG1tNwogCi0JbW92cQlNTVdPUkQgW01NQkxPQ0soMCwwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0wCi0JbW92cQlNTVdPUkQgW01NQkxPQ0soMCwxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0xCi0JbW92cQlNTVdPUkQgW01NQkxPQ0soMSwwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0yCi0JbW92cQlNTVdPUkQgW01NQkxPQ0soMSwxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0zCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtNTUJMT0NLKDAsMCxlZGksU0laRU9GX0pDT0VGKV0sIG1tMAorICAgICAgICBtb3ZxICAgIE1NV09SRCBbTU1CTE9DSygwLDEsZWRpLFNJWkVPRl9KQ09FRildLCBtbTEKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMSwwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0yCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtNTUJMT0NLKDEsMSxlZGksU0laRU9GX0pDT0VGKV0sIG1tMwogCi0JYWRkCWVzaSwgYnl0ZSAxNipTSVpFT0ZfRkFTVF9GTE9BVAotCWFkZAllZHgsIGJ5dGUgMTYqU0laRU9GX0ZBU1RfRkxPQVQKLQlhZGQJZWRpLCBieXRlIDE2KlNJWkVPRl9KQ09FRgotCWRlYwllYXgKLQlqbnoJc2hvcnQgLnF1YW50bG9vcAorICAgICAgICBhZGQgICAgIGVzaSwgYnl0ZSAxNipTSVpFT0ZfRkFTVF9GTE9BVAorICAgICAgICBhZGQgICAgIGVkeCwgYnl0ZSAxNipTSVpFT0ZfRkFTVF9GTE9BVAorICAgICAgICBhZGQgICAgIGVkaSwgYnl0ZSAxNipTSVpFT0ZfSkNPRUYKKyAgICAgICAgZGVjICAgICBlYXgKKyAgICAgICAgam56ICAgICBzaG9ydCAucXVhbnRsb29wCiAKLQllbW1zCQk7IGVtcHR5IE1NWCBzdGF0ZQorICAgICAgICBlbW1zICAgICAgICAgICAgOyBlbXB0eSBNTVggc3RhdGUKIAotCXBvcAllZGkKLQlwb3AJZXNpCi07CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi07CXBvcAllY3gJCTsgdW51c2VkCi07CXBvcAllYngJCTsgdW51c2VkCi0JcG9wCWVicAotCXJldAorICAgICAgICBwb3AgICAgIGVkaQorICAgICAgICBwb3AgICAgIGVzaQorOyAgICAgICBwb3AgICAgIGVkeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgICAgICBwb3AgICAgIGVjeCAgICAgICAgICAgICA7IHVudXNlZAorOyAgICAgICBwb3AgICAgIGVieCAgICAgICAgICAgICA7IHVudXNlZAorICAgICAgICBwb3AgICAgIGVicAorICAgICAgICByZXQKIAogOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKIDsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KLQlhbGlnbgkxNgorICAgICAgICBhbGlnbiAgIDE2CmRpZmYgLS1naXQgYS9zaW1kL2pjc2FtbW14LmFzbSBiL3NpbWQvamNzYW1tbXguYXNtCmluZGV4IDllNDNiMmYuLjlhYjE1MTggMTAwNjQ0Ci0tLSBhL3NpbWQvamNzYW1tbXguYXNtCisrKyBiL3NpbWQvamNzYW1tbXguYXNtCkBAIC0xOSw4ICsxOSw4IEBACiAlaW5jbHVkZSAianNpbWRleHQuaW5jIgogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JU0VDVElPTglTRUdfVEVYVAotCUJJVFMJMzIKKyAgICAgICAgU0VDVElPTiBTRUdfVEVYVAorICAgICAgICBCSVRTICAgIDMyCiA7CiA7IERvd25zYW1wbGUgcGl4ZWwgdmFsdWVzIG9mIGEgc2luZ2xlIGNvbXBvbmVudC4KIDsgVGhpcyB2ZXJzaW9uIGhhbmRsZXMgdGhlIGNvbW1vbiBjYXNlIG9mIDI6MSBob3Jpem9udGFsIGFuZCAxOjEgdmVydGljYWwsCkBAIC0zMiwxMzUgKzMyLDEzNSBAQAogOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEpOwogOwogCi0lZGVmaW5lIGltZ193aWR0aChiKQkoYikrOAkJCTsgSkRJTUVOU0lPTiBpbWFnZV93aWR0aAotJWRlZmluZSBtYXhfdl9zYW1wKGIpCShiKSsxMgkJOyBpbnQgbWF4X3Zfc2FtcF9mYWN0b3IKLSVkZWZpbmUgdl9zYW1wKGIpCQkJKGIpKzE2CQk7IEpESU1FTlNJT04gdl9zYW1wX2ZhY3RvcgotJWRlZmluZSB3aWR0aF9ibGtzKGIpCShiKSsyMAkJOyBKRElNRU5TSU9OIHdpZHRoX2Jsb2NrcwotJWRlZmluZSBpbnB1dF9kYXRhKGIpCShiKSsyNAkJOyBKU0FNUEFSUkFZIGlucHV0X2RhdGEKLSVkZWZpbmUgb3V0cHV0X2RhdGEoYikJKGIpKzI4CTsgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YQorJWRlZmluZSBpbWdfd2lkdGgoYikgICAgKGIpKzggICAgICAgICAgIDsgSkRJTUVOU0lPTiBpbWFnZV93aWR0aAorJWRlZmluZSBtYXhfdl9zYW1wKGIpICAgKGIpKzEyICAgICAgICAgIDsgaW50IG1heF92X3NhbXBfZmFjdG9yCislZGVmaW5lIHZfc2FtcChiKSAgICAgICAoYikrMTYgICAgICAgICAgOyBKRElNRU5TSU9OIHZfc2FtcF9mYWN0b3IKKyVkZWZpbmUgd2lkdGhfYmxrcyhiKSAgIChiKSsyMCAgICAgICAgICA7IEpESU1FTlNJT04gd2lkdGhfYmxvY2tzCislZGVmaW5lIGlucHV0X2RhdGEoYikgICAoYikrMjQgICAgICAgICAgOyBKU0FNUEFSUkFZIGlucHV0X2RhdGEKKyVkZWZpbmUgb3V0cHV0X2RhdGEoYikgIChiKSsyOCAgICAgICAgICA7IEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEKIAotCWFsaWduCTE2Ci0JZ2xvYmFsCUVYVE4oanNpbWRfaDJ2MV9kb3duc2FtcGxlX21teCkKKyAgICAgICAgYWxpZ24gICAxNgorICAgICAgICBnbG9iYWwgIEVYVE4oanNpbWRfaDJ2MV9kb3duc2FtcGxlX21teCkKIAogRVhUTihqc2ltZF9oMnYxX2Rvd25zYW1wbGVfbW14KToKLQlwdXNoCWVicAotCW1vdgllYnAsZXNwCi07CXB1c2gJZWJ4CQk7IHVudXNlZAotOwlwdXNoCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLTsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi0JcHVzaAllc2kKLQlwdXNoCWVkaQorICAgICAgICBwdXNoICAgIGVicAorICAgICAgICBtb3YgICAgIGVicCxlc3AKKzsgICAgICAgcHVzaCAgICBlYnggICAgICAgICAgICAgOyB1bnVzZWQKKzsgICAgICAgcHVzaCAgICBlY3ggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICAgICAgcHVzaCAgICBlZHggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICAgICAgcHVzaCAgICBlc2kKKyAgICAgICAgcHVzaCAgICBlZGkKIAotCW1vdgllY3gsIEpESU1FTlNJT04gW3dpZHRoX2Jsa3MoZWJwKV0KLQlzaGwJZWN4LDMJCQk7IGltdWwgZWN4LERDVFNJWkUgKGVjeCA9IG91dHB1dF9jb2xzKQotCWp6CW5lYXIgLnJldHVybgorICAgICAgICBtb3YgICAgIGVjeCwgSkRJTUVOU0lPTiBbd2lkdGhfYmxrcyhlYnApXQorICAgICAgICBzaGwgICAgIGVjeCwzICAgICAgICAgICAgICAgICAgIDsgaW11bCBlY3gsRENUU0laRSAoZWN4ID0gb3V0cHV0X2NvbHMpCisgICAgICAgIGp6ICAgICAgbmVhciAucmV0dXJuCiAKLQltb3YJZWR4LCBKRElNRU5TSU9OIFtpbWdfd2lkdGgoZWJwKV0KKyAgICAgICAgbW92ICAgICBlZHgsIEpESU1FTlNJT04gW2ltZ193aWR0aChlYnApXQogCi0JOyAtLSBleHBhbmRfcmlnaHRfZWRnZQorICAgICAgICA7IC0tIGV4cGFuZF9yaWdodF9lZGdlCiAKLQlwdXNoCWVjeAotCXNobAllY3gsMQkJCQk7IG91dHB1dF9jb2xzICogMgotCXN1YgllY3gsZWR4Ci0JamxlCXNob3J0IC5leHBhbmRfZW5kCisgICAgICAgIHB1c2ggICAgZWN4CisgICAgICAgIHNobCAgICAgZWN4LDEgICAgICAgICAgICAgICAgICAgICAgICAgICA7IG91dHB1dF9jb2xzICogMgorICAgICAgICBzdWIgICAgIGVjeCxlZHgKKyAgICAgICAgamxlICAgICBzaG9ydCAuZXhwYW5kX2VuZAogCi0JbW92CWVheCwgSU5UIFttYXhfdl9zYW1wKGVicCldCi0JdGVzdAllYXgsZWF4Ci0JamxlCXNob3J0IC5leHBhbmRfZW5kCisgICAgICAgIG1vdiAgICAgZWF4LCBJTlQgW21heF92X3NhbXAoZWJwKV0KKyAgICAgICAgdGVzdCAgICBlYXgsZWF4CisgICAgICAgIGpsZSAgICAgc2hvcnQgLmV4cGFuZF9lbmQKIAotCWNsZAotCW1vdgllc2ksIEpTQU1QQVJSQVkgW2lucHV0X2RhdGEoZWJwKV0JOyBpbnB1dF9kYXRhCi0JYWxpZ254CTE2LDcKKyAgICAgICAgY2xkCisgICAgICAgIG1vdiAgICAgZXNpLCBKU0FNUEFSUkFZIFtpbnB1dF9kYXRhKGVicCldICAgICAgIDsgaW5wdXRfZGF0YQorICAgICAgICBhbGlnbnggIDE2LDcKIC5leHBhbmRsb29wOgotCXB1c2gJZWF4Ci0JcHVzaAllY3gKKyAgICAgICAgcHVzaCAgICBlYXgKKyAgICAgICAgcHVzaCAgICBlY3gKIAotCW1vdgllZGksIEpTQU1QUk9XIFtlc2ldCi0JYWRkCWVkaSxlZHgKLQltb3YJYWwsIEpTQU1QTEUgW2VkaS0xXQorICAgICAgICBtb3YgICAgIGVkaSwgSlNBTVBST1cgW2VzaV0KKyAgICAgICAgYWRkICAgICBlZGksZWR4CisgICAgICAgIG1vdiAgICAgYWwsIEpTQU1QTEUgW2VkaS0xXQogCi0JcmVwIHN0b3NiCisgICAgICAgIHJlcCBzdG9zYgogCi0JcG9wCWVjeAotCXBvcAllYXgKKyAgICAgICAgcG9wICAgICBlY3gKKyAgICAgICAgcG9wICAgICBlYXgKIAotCWFkZAllc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCi0JZGVjCWVheAotCWpnCXNob3J0IC5leHBhbmRsb29wCisgICAgICAgIGFkZCAgICAgZXNpLCBieXRlIFNJWkVPRl9KU0FNUFJPVworICAgICAgICBkZWMgICAgIGVheAorICAgICAgICBqZyAgICAgIHNob3J0IC5leHBhbmRsb29wCiAKIC5leHBhbmRfZW5kOgotCXBvcAllY3gJCQkJOyBvdXRwdXRfY29scworICAgICAgICBwb3AgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBvdXRwdXRfY29scwogCi0JOyAtLSBoMnYxX2Rvd25zYW1wbGUKKyAgICAgICAgOyAtLSBoMnYxX2Rvd25zYW1wbGUKIAotCW1vdgllYXgsIEpESU1FTlNJT04gW3Zfc2FtcChlYnApXQk7IHJvd2N0cgotCXRlc3QJZWF4LGVheAotCWpsZQluZWFyIC5yZXR1cm4KKyAgICAgICAgbW92ICAgICBlYXgsIEpESU1FTlNJT04gW3Zfc2FtcChlYnApXSAgIDsgcm93Y3RyCisgICAgICAgIHRlc3QgICAgZWF4LGVheAorICAgICAgICBqbGUgICAgIG5lYXIgLnJldHVybgogCi0JbW92ICAgICAgIGVkeCwgMHgwMDAxMDAwMAk7IGJpYXMgcGF0dGVybgotCW1vdmQgICAgICBtbTcsZWR4Ci0JcGNtcGVxdyAgIG1tNixtbTYKLQlwdW5wY2tsZHEgbW03LG1tNwkJOyBtbTc9ezAsIDEsIDAsIDF9Ci0JcHNybHcgICAgIG1tNixCWVRFX0JJVAkJOyBtbTY9ezB4RkYgMHgwMCAweEZGIDB4MDAgLi59CisgICAgICAgIG1vdiAgICAgICBlZHgsIDB4MDAwMTAwMDAgICAgICAgOyBiaWFzIHBhdHRlcm4KKyAgICAgICAgbW92ZCAgICAgIG1tNyxlZHgKKyAgICAgICAgcGNtcGVxdyAgIG1tNixtbTYKKyAgICAgICAgcHVucGNrbGRxIG1tNyxtbTcgICAgICAgICAgICAgICA7IG1tNz17MCwgMSwgMCwgMX0KKyAgICAgICAgcHNybHcgICAgIG1tNixCWVRFX0JJVCAgICAgICAgICA7IG1tNj17MHhGRiAweDAwIDB4RkYgMHgwMCAuLn0KIAotCW1vdgllc2ksIEpTQU1QQVJSQVkgW2lucHV0X2RhdGEoZWJwKV0JOyBpbnB1dF9kYXRhCi0JbW92CWVkaSwgSlNBTVBBUlJBWSBbb3V0cHV0X2RhdGEoZWJwKV0JOyBvdXRwdXRfZGF0YQotCWFsaWdueAkxNiw3CisgICAgICAgIG1vdiAgICAgZXNpLCBKU0FNUEFSUkFZIFtpbnB1dF9kYXRhKGVicCldICAgICAgIDsgaW5wdXRfZGF0YQorICAgICAgICBtb3YgICAgIGVkaSwgSlNBTVBBUlJBWSBbb3V0cHV0X2RhdGEoZWJwKV0gICAgICA7IG91dHB1dF9kYXRhCisgICAgICAgIGFsaWdueCAgMTYsNwogLnJvd2xvb3A6Ci0JcHVzaAllY3gKLQlwdXNoCWVkaQotCXB1c2gJZXNpCisgICAgICAgIHB1c2ggICAgZWN4CisgICAgICAgIHB1c2ggICAgZWRpCisgICAgICAgIHB1c2ggICAgZXNpCiAKLQltb3YJZXNpLCBKU0FNUFJPVyBbZXNpXQkJOyBpbnB0cgotCW1vdgllZGksIEpTQU1QUk9XIFtlZGldCQk7IG91dHB0cgotCWFsaWdueAkxNiw3CisgICAgICAgIG1vdiAgICAgZXNpLCBKU0FNUFJPVyBbZXNpXSAgICAgICAgICAgICA7IGlucHRyCisgICAgICAgIG1vdiAgICAgZWRpLCBKU0FNUFJPVyBbZWRpXSAgICAgICAgICAgICA7IG91dHB0cgorICAgICAgICBhbGlnbnggIDE2LDcKIC5jb2x1bW5sb29wOgogCi0JbW92cQltbTAsIE1NV09SRCBbZXNpKzAqU0laRU9GX01NV09SRF0KLQltb3ZxCW1tMSwgTU1XT1JEIFtlc2krMSpTSVpFT0ZfTU1XT1JEXQotCW1vdnEJbW0yLG1tMAotCW1vdnEJbW0zLG1tMQorICAgICAgICBtb3ZxICAgIG1tMCwgTU1XT1JEIFtlc2krMCpTSVpFT0ZfTU1XT1JEXQorICAgICAgICBtb3ZxICAgIG1tMSwgTU1XT1JEIFtlc2krMSpTSVpFT0ZfTU1XT1JEXQorICAgICAgICBtb3ZxICAgIG1tMixtbTAKKyAgICAgICAgbW92cSAgICBtbTMsbW0xCiAKLQlwYW5kCW1tMCxtbTYKLQlwc3JsdwltbTIsQllURV9CSVQKLQlwYW5kCW1tMSxtbTYKLQlwc3JsdwltbTMsQllURV9CSVQKKyAgICAgICAgcGFuZCAgICBtbTAsbW02CisgICAgICAgIHBzcmx3ICAgbW0yLEJZVEVfQklUCisgICAgICAgIHBhbmQgICAgbW0xLG1tNgorICAgICAgICBwc3JsdyAgIG1tMyxCWVRFX0JJVAogCi0JcGFkZHcJbW0wLG1tMgotCXBhZGR3CW1tMSxtbTMKLQlwYWRkdwltbTAsbW03Ci0JcGFkZHcJbW0xLG1tNwotCXBzcmx3CW1tMCwxCi0JcHNybHcJbW0xLDEKKyAgICAgICAgcGFkZHcgICBtbTAsbW0yCisgICAgICAgIHBhZGR3ICAgbW0xLG1tMworICAgICAgICBwYWRkdyAgIG1tMCxtbTcKKyAgICAgICAgcGFkZHcgICBtbTEsbW03CisgICAgICAgIHBzcmx3ICAgbW0wLDEKKyAgICAgICAgcHNybHcgICBtbTEsMQogCi0JcGFja3Vzd2IgbW0wLG1tMQorICAgICAgICBwYWNrdXN3YiBtbTAsbW0xCiAKLQltb3ZxCU1NV09SRCBbZWRpKzAqU0laRU9GX01NV09SRF0sIG1tMAorICAgICAgICBtb3ZxICAgIE1NV09SRCBbZWRpKzAqU0laRU9GX01NV09SRF0sIG1tMAogCi0JYWRkCWVzaSwgYnl0ZSAyKlNJWkVPRl9NTVdPUkQJOyBpbnB0cgotCWFkZAllZGksIGJ5dGUgMSpTSVpFT0ZfTU1XT1JECTsgb3V0cHRyCi0Jc3ViCWVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECQk7IG91dGNvbAotCWpueglzaG9ydCAuY29sdW1ubG9vcAorICAgICAgICBhZGQgICAgIGVzaSwgYnl0ZSAyKlNJWkVPRl9NTVdPUkQgICAgICAgOyBpbnB0cgorICAgICAgICBhZGQgICAgIGVkaSwgYnl0ZSAxKlNJWkVPRl9NTVdPUkQgICAgICAgOyBvdXRwdHIKKyAgICAgICAgc3ViICAgICBlY3gsIGJ5dGUgU0laRU9GX01NV09SRCAgICAgICAgIDsgb3V0Y29sCisgICAgICAgIGpueiAgICAgc2hvcnQgLmNvbHVtbmxvb3AKIAotCXBvcAllc2kKLQlwb3AJZWRpCi0JcG9wCWVjeAorICAgICAgICBwb3AgICAgIGVzaQorICAgICAgICBwb3AgICAgIGVkaQorICAgICAgICBwb3AgICAgIGVjeAogCi0JYWRkCWVzaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cJOyBpbnB1dF9kYXRhCi0JYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cJOyBvdXRwdXRfZGF0YQotCWRlYwllYXgJCQkJOyByb3djdHIKLQlqZwlzaG9ydCAucm93bG9vcAorICAgICAgICBhZGQgICAgIGVzaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cgICAgICAgOyBpbnB1dF9kYXRhCisgICAgICAgIGFkZCAgICAgZWRpLCBieXRlIFNJWkVPRl9KU0FNUFJPVyAgICAgICA7IG91dHB1dF9kYXRhCisgICAgICAgIGRlYyAgICAgZWF4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IHJvd2N0cgorICAgICAgICBqZyAgICAgIHNob3J0IC5yb3dsb29wCiAKLQllbW1zCQk7IGVtcHR5IE1NWCBzdGF0ZQorICAgICAgICBlbW1zICAgICAgICAgICAgOyBlbXB0eSBNTVggc3RhdGUKIAogLnJldHVybjoKLQlwb3AJZWRpCi0JcG9wCWVzaQotOwlwb3AJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotOwlwb3AJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotOwlwb3AJZWJ4CQk7IHVudXNlZAotCXBvcAllYnAKLQlyZXQKKyAgICAgICAgcG9wICAgICBlZGkKKyAgICAgICAgcG9wICAgICBlc2kKKzsgICAgICAgcG9wICAgICBlZHggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICAgICAgcG9wICAgICBlY3ggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICAgICAgcG9wICAgICBlYnggICAgICAgICAgICAgOyB1bnVzZWQKKyAgICAgICAgcG9wICAgICBlYnAKKyAgICAgICAgcmV0CiAKIDsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDsKQEAgLTE3NCwxNTEgKzE3NCwxNTEgQEAKIDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZIG91dHB1dF9kYXRhKTsKIDsKIAotJWRlZmluZSBpbWdfd2lkdGgoYikJKGIpKzgJCQk7IEpESU1FTlNJT04gaW1hZ2Vfd2lkdGgKLSVkZWZpbmUgbWF4X3Zfc2FtcChiKQkoYikrMTIJCTsgaW50IG1heF92X3NhbXBfZmFjdG9yCi0lZGVmaW5lIHZfc2FtcChiKQkJCShiKSsxNgkJOyBKRElNRU5TSU9OIHZfc2FtcF9mYWN0b3IKLSVkZWZpbmUgd2lkdGhfYmxrcyhiKQkoYikrMjAJCTsgSkRJTUVOU0lPTiB3aWR0aF9ibG9ja3MKLSVkZWZpbmUgaW5wdXRfZGF0YShiKQkoYikrMjQJCTsgSlNBTVBBUlJBWSBpbnB1dF9kYXRhCi0lZGVmaW5lIG91dHB1dF9kYXRhKGIpCShiKSsyOAk7IEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEKKyVkZWZpbmUgaW1nX3dpZHRoKGIpICAgIChiKSs4ICAgICAgICAgICA7IEpESU1FTlNJT04gaW1hZ2Vfd2lkdGgKKyVkZWZpbmUgbWF4X3Zfc2FtcChiKSAgIChiKSsxMiAgICAgICAgICA7IGludCBtYXhfdl9zYW1wX2ZhY3RvcgorJWRlZmluZSB2X3NhbXAoYikgICAgICAgKGIpKzE2ICAgICAgICAgIDsgSkRJTUVOU0lPTiB2X3NhbXBfZmFjdG9yCislZGVmaW5lIHdpZHRoX2Jsa3MoYikgICAoYikrMjAgICAgICAgICAgOyBKRElNRU5TSU9OIHdpZHRoX2Jsb2NrcworJWRlZmluZSBpbnB1dF9kYXRhKGIpICAgKGIpKzI0ICAgICAgICAgIDsgSlNBTVBBUlJBWSBpbnB1dF9kYXRhCislZGVmaW5lIG91dHB1dF9kYXRhKGIpICAoYikrMjggICAgICAgICAgOyBKU0FNUEFSUkFZIG91dHB1dF9kYXRhCiAKLQlhbGlnbgkxNgotCWdsb2JhbAlFWFROKGpzaW1kX2gydjJfZG93bnNhbXBsZV9tbXgpCisgICAgICAgIGFsaWduICAgMTYKKyAgICAgICAgZ2xvYmFsICBFWFROKGpzaW1kX2gydjJfZG93bnNhbXBsZV9tbXgpCiAKIEVYVE4oanNpbWRfaDJ2Ml9kb3duc2FtcGxlX21teCk6Ci0JcHVzaAllYnAKLQltb3YJZWJwLGVzcAotOwlwdXNoCWVieAkJOyB1bnVzZWQKLTsJcHVzaAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi07CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotCXB1c2gJZXNpCi0JcHVzaAllZGkKKyAgICAgICAgcHVzaCAgICBlYnAKKyAgICAgICAgbW92ICAgICBlYnAsZXNwCis7ICAgICAgIHB1c2ggICAgZWJ4ICAgICAgICAgICAgIDsgdW51c2VkCis7ICAgICAgIHB1c2ggICAgZWN4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgICAgIHB1c2ggICAgZWR4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgICAgIHB1c2ggICAgZXNpCisgICAgICAgIHB1c2ggICAgZWRpCiAKLQltb3YJZWN4LCBKRElNRU5TSU9OIFt3aWR0aF9ibGtzKGVicCldCi0Jc2hsCWVjeCwzCQkJOyBpbXVsIGVjeCxEQ1RTSVpFIChlY3ggPSBvdXRwdXRfY29scykKLQlqegluZWFyIC5yZXR1cm4KKyAgICAgICAgbW92ICAgICBlY3gsIEpESU1FTlNJT04gW3dpZHRoX2Jsa3MoZWJwKV0KKyAgICAgICAgc2hsICAgICBlY3gsMyAgICAgICAgICAgICAgICAgICA7IGltdWwgZWN4LERDVFNJWkUgKGVjeCA9IG91dHB1dF9jb2xzKQorICAgICAgICBqeiAgICAgIG5lYXIgLnJldHVybgogCi0JbW92CWVkeCwgSkRJTUVOU0lPTiBbaW1nX3dpZHRoKGVicCldCisgICAgICAgIG1vdiAgICAgZWR4LCBKRElNRU5TSU9OIFtpbWdfd2lkdGgoZWJwKV0KIAotCTsgLS0gZXhwYW5kX3JpZ2h0X2VkZ2UKKyAgICAgICAgOyAtLSBleHBhbmRfcmlnaHRfZWRnZQogCi0JcHVzaAllY3gKLQlzaGwJZWN4LDEJCQkJOyBvdXRwdXRfY29scyAqIDIKLQlzdWIJZWN4LGVkeAotCWpsZQlzaG9ydCAuZXhwYW5kX2VuZAorICAgICAgICBwdXNoICAgIGVjeAorICAgICAgICBzaGwgICAgIGVjeCwxICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBvdXRwdXRfY29scyAqIDIKKyAgICAgICAgc3ViICAgICBlY3gsZWR4CisgICAgICAgIGpsZSAgICAgc2hvcnQgLmV4cGFuZF9lbmQKIAotCW1vdgllYXgsIElOVCBbbWF4X3Zfc2FtcChlYnApXQotCXRlc3QJZWF4LGVheAotCWpsZQlzaG9ydCAuZXhwYW5kX2VuZAorICAgICAgICBtb3YgICAgIGVheCwgSU5UIFttYXhfdl9zYW1wKGVicCldCisgICAgICAgIHRlc3QgICAgZWF4LGVheAorICAgICAgICBqbGUgICAgIHNob3J0IC5leHBhbmRfZW5kCiAKLQljbGQKLQltb3YJZXNpLCBKU0FNUEFSUkFZIFtpbnB1dF9kYXRhKGVicCldCTsgaW5wdXRfZGF0YQotCWFsaWdueAkxNiw3CisgICAgICAgIGNsZAorICAgICAgICBtb3YgICAgIGVzaSwgSlNBTVBBUlJBWSBbaW5wdXRfZGF0YShlYnApXSAgICAgICA7IGlucHV0X2RhdGEKKyAgICAgICAgYWxpZ254ICAxNiw3CiAuZXhwYW5kbG9vcDoKLQlwdXNoCWVheAotCXB1c2gJZWN4CisgICAgICAgIHB1c2ggICAgZWF4CisgICAgICAgIHB1c2ggICAgZWN4CiAKLQltb3YJZWRpLCBKU0FNUFJPVyBbZXNpXQotCWFkZAllZGksZWR4Ci0JbW92CWFsLCBKU0FNUExFIFtlZGktMV0KKyAgICAgICAgbW92ICAgICBlZGksIEpTQU1QUk9XIFtlc2ldCisgICAgICAgIGFkZCAgICAgZWRpLGVkeAorICAgICAgICBtb3YgICAgIGFsLCBKU0FNUExFIFtlZGktMV0KIAotCXJlcCBzdG9zYgorICAgICAgICByZXAgc3Rvc2IKIAotCXBvcAllY3gKLQlwb3AJZWF4CisgICAgICAgIHBvcCAgICAgZWN4CisgICAgICAgIHBvcCAgICAgZWF4CiAKLQlhZGQJZXNpLCBieXRlIFNJWkVPRl9KU0FNUFJPVwotCWRlYwllYXgKLQlqZwlzaG9ydCAuZXhwYW5kbG9vcAorICAgICAgICBhZGQgICAgIGVzaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cKKyAgICAgICAgZGVjICAgICBlYXgKKyAgICAgICAgamcgICAgICBzaG9ydCAuZXhwYW5kbG9vcAogCiAuZXhwYW5kX2VuZDoKLQlwb3AJZWN4CQkJCTsgb3V0cHV0X2NvbHMKKyAgICAgICAgcG9wICAgICBlY3ggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgb3V0cHV0X2NvbHMKIAotCTsgLS0gaDJ2Ml9kb3duc2FtcGxlCisgICAgICAgIDsgLS0gaDJ2Ml9kb3duc2FtcGxlCiAKLQltb3YJZWF4LCBKRElNRU5TSU9OIFt2X3NhbXAoZWJwKV0JOyByb3djdHIKLQl0ZXN0CWVheCxlYXgKLQlqbGUJbmVhciAucmV0dXJuCisgICAgICAgIG1vdiAgICAgZWF4LCBKRElNRU5TSU9OIFt2X3NhbXAoZWJwKV0gICA7IHJvd2N0cgorICAgICAgICB0ZXN0ICAgIGVheCxlYXgKKyAgICAgICAgamxlICAgICBuZWFyIC5yZXR1cm4KIAotCW1vdiAgICAgICBlZHgsIDB4MDAwMjAwMDEJOyBiaWFzIHBhdHRlcm4KLQltb3ZkICAgICAgbW03LGVkeAotCXBjbXBlcXcgICBtbTYsbW02Ci0JcHVucGNrbGRxIG1tNyxtbTcJCTsgbW03PXsxLCAyLCAxLCAyfQotCXBzcmx3ICAgICBtbTYsQllURV9CSVQJCTsgbW02PXsweEZGIDB4MDAgMHhGRiAweDAwIC4ufQorICAgICAgICBtb3YgICAgICAgZWR4LCAweDAwMDIwMDAxICAgICAgIDsgYmlhcyBwYXR0ZXJuCisgICAgICAgIG1vdmQgICAgICBtbTcsZWR4CisgICAgICAgIHBjbXBlcXcgICBtbTYsbW02CisgICAgICAgIHB1bnBja2xkcSBtbTcsbW03ICAgICAgICAgICAgICAgOyBtbTc9ezEsIDIsIDEsIDJ9CisgICAgICAgIHBzcmx3ICAgICBtbTYsQllURV9CSVQgICAgICAgICAgOyBtbTY9ezB4RkYgMHgwMCAweEZGIDB4MDAgLi59CiAKLQltb3YJZXNpLCBKU0FNUEFSUkFZIFtpbnB1dF9kYXRhKGVicCldCTsgaW5wdXRfZGF0YQotCW1vdgllZGksIEpTQU1QQVJSQVkgW291dHB1dF9kYXRhKGVicCldCTsgb3V0cHV0X2RhdGEKLQlhbGlnbngJMTYsNworICAgICAgICBtb3YgICAgIGVzaSwgSlNBTVBBUlJBWSBbaW5wdXRfZGF0YShlYnApXSAgICAgICA7IGlucHV0X2RhdGEKKyAgICAgICAgbW92ICAgICBlZGksIEpTQU1QQVJSQVkgW291dHB1dF9kYXRhKGVicCldICAgICAgOyBvdXRwdXRfZGF0YQorICAgICAgICBhbGlnbnggIDE2LDcKIC5yb3dsb29wOgotCXB1c2gJZWN4Ci0JcHVzaAllZGkKLQlwdXNoCWVzaQorICAgICAgICBwdXNoICAgIGVjeAorICAgICAgICBwdXNoICAgIGVkaQorICAgICAgICBwdXNoICAgIGVzaQogCi0JbW92CWVkeCwgSlNBTVBST1cgW2VzaSswKlNJWkVPRl9KU0FNUFJPV10JOyBpbnB0cjAKLQltb3YJZXNpLCBKU0FNUFJPVyBbZXNpKzEqU0laRU9GX0pTQU1QUk9XXQk7IGlucHRyMQotCW1vdgllZGksIEpTQU1QUk9XIFtlZGldCQkJOyBvdXRwdHIKLQlhbGlnbngJMTYsNworICAgICAgICBtb3YgICAgIGVkeCwgSlNBTVBST1cgW2VzaSswKlNJWkVPRl9KU0FNUFJPV10gICA7IGlucHRyMAorICAgICAgICBtb3YgICAgIGVzaSwgSlNBTVBST1cgW2VzaSsxKlNJWkVPRl9KU0FNUFJPV10gICA7IGlucHRyMQorICAgICAgICBtb3YgICAgIGVkaSwgSlNBTVBST1cgW2VkaV0gICAgICAgICAgICAgICAgICAgICA7IG91dHB0cgorICAgICAgICBhbGlnbnggIDE2LDcKIC5jb2x1bW5sb29wOgogCi0JbW92cQltbTAsIE1NV09SRCBbZWR4KzAqU0laRU9GX01NV09SRF0KLQltb3ZxCW1tMSwgTU1XT1JEIFtlc2krMCpTSVpFT0ZfTU1XT1JEXQotCW1vdnEJbW0yLCBNTVdPUkQgW2VkeCsxKlNJWkVPRl9NTVdPUkRdCi0JbW92cQltbTMsIE1NV09SRCBbZXNpKzEqU0laRU9GX01NV09SRF0KKyAgICAgICAgbW92cSAgICBtbTAsIE1NV09SRCBbZWR4KzAqU0laRU9GX01NV09SRF0KKyAgICAgICAgbW92cSAgICBtbTEsIE1NV09SRCBbZXNpKzAqU0laRU9GX01NV09SRF0KKyAgICAgICAgbW92cSAgICBtbTIsIE1NV09SRCBbZWR4KzEqU0laRU9GX01NV09SRF0KKyAgICAgICAgbW92cSAgICBtbTMsIE1NV09SRCBbZXNpKzEqU0laRU9GX01NV09SRF0KIAotCW1vdnEJbW00LG1tMAotCW1vdnEJbW01LG1tMQotCXBhbmQJbW0wLG1tNgotCXBzcmx3CW1tNCxCWVRFX0JJVAotCXBhbmQJbW0xLG1tNgotCXBzcmx3CW1tNSxCWVRFX0JJVAotCXBhZGR3CW1tMCxtbTQKLQlwYWRkdwltbTEsbW01CisgICAgICAgIG1vdnEgICAgbW00LG1tMAorICAgICAgICBtb3ZxICAgIG1tNSxtbTEKKyAgICAgICAgcGFuZCAgICBtbTAsbW02CisgICAgICAgIHBzcmx3ICAgbW00LEJZVEVfQklUCisgICAgICAgIHBhbmQgICAgbW0xLG1tNgorICAgICAgICBwc3JsdyAgIG1tNSxCWVRFX0JJVAorICAgICAgICBwYWRkdyAgIG1tMCxtbTQKKyAgICAgICAgcGFkZHcgICBtbTEsbW01CiAKLQltb3ZxCW1tNCxtbTIKLQltb3ZxCW1tNSxtbTMKLQlwYW5kCW1tMixtbTYKLQlwc3JsdwltbTQsQllURV9CSVQKLQlwYW5kCW1tMyxtbTYKLQlwc3JsdwltbTUsQllURV9CSVQKLQlwYWRkdwltbTIsbW00Ci0JcGFkZHcJbW0zLG1tNQorICAgICAgICBtb3ZxICAgIG1tNCxtbTIKKyAgICAgICAgbW92cSAgICBtbTUsbW0zCisgICAgICAgIHBhbmQgICAgbW0yLG1tNgorICAgICAgICBwc3JsdyAgIG1tNCxCWVRFX0JJVAorICAgICAgICBwYW5kICAgIG1tMyxtbTYKKyAgICAgICAgcHNybHcgICBtbTUsQllURV9CSVQKKyAgICAgICAgcGFkZHcgICBtbTIsbW00CisgICAgICAgIHBhZGR3ICAgbW0zLG1tNQogCi0JcGFkZHcJbW0wLG1tMQotCXBhZGR3CW1tMixtbTMKLQlwYWRkdwltbTAsbW03Ci0JcGFkZHcJbW0yLG1tNwotCXBzcmx3CW1tMCwyCi0JcHNybHcJbW0yLDIKKyAgICAgICAgcGFkZHcgICBtbTAsbW0xCisgICAgICAgIHBhZGR3ICAgbW0yLG1tMworICAgICAgICBwYWRkdyAgIG1tMCxtbTcKKyAgICAgICAgcGFkZHcgICBtbTIsbW03CisgICAgICAgIHBzcmx3ICAgbW0wLDIKKyAgICAgICAgcHNybHcgICBtbTIsMgogCi0JcGFja3Vzd2IgbW0wLG1tMgorICAgICAgICBwYWNrdXN3YiBtbTAsbW0yCiAKLQltb3ZxCU1NV09SRCBbZWRpKzAqU0laRU9GX01NV09SRF0sIG1tMAorICAgICAgICBtb3ZxICAgIE1NV09SRCBbZWRpKzAqU0laRU9GX01NV09SRF0sIG1tMAogCi0JYWRkCWVkeCwgYnl0ZSAyKlNJWkVPRl9NTVdPUkQJOyBpbnB0cjAKLQlhZGQJZXNpLCBieXRlIDIqU0laRU9GX01NV09SRAk7IGlucHRyMQotCWFkZAllZGksIGJ5dGUgMSpTSVpFT0ZfTU1XT1JECTsgb3V0cHRyCi0Jc3ViCWVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECQk7IG91dGNvbAotCWpuegluZWFyIC5jb2x1bW5sb29wCisgICAgICAgIGFkZCAgICAgZWR4LCBieXRlIDIqU0laRU9GX01NV09SRCAgICAgICA7IGlucHRyMAorICAgICAgICBhZGQgICAgIGVzaSwgYnl0ZSAyKlNJWkVPRl9NTVdPUkQgICAgICAgOyBpbnB0cjEKKyAgICAgICAgYWRkICAgICBlZGksIGJ5dGUgMSpTSVpFT0ZfTU1XT1JEICAgICAgIDsgb3V0cHRyCisgICAgICAgIHN1YiAgICAgZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQgICAgICAgICA7IG91dGNvbAorICAgICAgICBqbnogICAgIG5lYXIgLmNvbHVtbmxvb3AKIAotCXBvcAllc2kKLQlwb3AJZWRpCi0JcG9wCWVjeAorICAgICAgICBwb3AgICAgIGVzaQorICAgICAgICBwb3AgICAgIGVkaQorICAgICAgICBwb3AgICAgIGVjeAogCi0JYWRkCWVzaSwgYnl0ZSAyKlNJWkVPRl9KU0FNUFJPVwk7IGlucHV0X2RhdGEKLQlhZGQJZWRpLCBieXRlIDEqU0laRU9GX0pTQU1QUk9XCTsgb3V0cHV0X2RhdGEKLQlkZWMJZWF4CQkJCTsgcm93Y3RyCi0JamcJbmVhciAucm93bG9vcAorICAgICAgICBhZGQgICAgIGVzaSwgYnl0ZSAyKlNJWkVPRl9KU0FNUFJPVyAgICAgOyBpbnB1dF9kYXRhCisgICAgICAgIGFkZCAgICAgZWRpLCBieXRlIDEqU0laRU9GX0pTQU1QUk9XICAgICA7IG91dHB1dF9kYXRhCisgICAgICAgIGRlYyAgICAgZWF4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IHJvd2N0cgorICAgICAgICBqZyAgICAgIG5lYXIgLnJvd2xvb3AKIAotCWVtbXMJCTsgZW1wdHkgTU1YIHN0YXRlCisgICAgICAgIGVtbXMgICAgICAgICAgICA7IGVtcHR5IE1NWCBzdGF0ZQogCiAucmV0dXJuOgotCXBvcAllZGkKLQlwb3AJZXNpCi07CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi07CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi07CXBvcAllYngJCTsgdW51c2VkCi0JcG9wCWVicAotCXJldAorICAgICAgICBwb3AgICAgIGVkaQorICAgICAgICBwb3AgICAgIGVzaQorOyAgICAgICBwb3AgICAgIGVkeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgICAgICBwb3AgICAgIGVjeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgICAgICBwb3AgICAgIGVieCAgICAgICAgICAgICA7IHVudXNlZAorICAgICAgICBwb3AgICAgIGVicAorICAgICAgICByZXQKIAogOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKIDsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KLQlhbGlnbgkxNgorICAgICAgICBhbGlnbiAgIDE2CmRpZmYgLS1naXQgYS9zaW1kL2pjc2Ftc3MyLTY0LmFzbSBiL3NpbWQvamNzYW1zczItNjQuYXNtCmluZGV4IDZhMTZkYzUuLjZjNTBkOWMgMTAwNjQ0Ci0tLSBhL3NpbWQvamNzYW1zczItNjQuYXNtCisrKyBiL3NpbWQvamNzYW1zczItNjQuYXNtCkBAIC0yMCw4ICsyMCw4IEBACiAlaW5jbHVkZSAianNpbWRleHQuaW5jIgogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JU0VDVElPTglTRUdfVEVYVAotCUJJVFMJNjQKKyAgICAgICAgU0VDVElPTiBTRUdfVEVYVAorICAgICAgICBCSVRTICAgIDY0CiA7CiA7IERvd25zYW1wbGUgcGl4ZWwgdmFsdWVzIG9mIGEgc2luZ2xlIGNvbXBvbmVudC4KIDsgVGhpcyB2ZXJzaW9uIGhhbmRsZXMgdGhlIGNvbW1vbiBjYXNlIG9mIDI6MSBob3Jpem9udGFsIGFuZCAxOjEgdmVydGljYWwsCkBAIC00MCwxMzAgKzQwLDEzMCBAQAogOyByMTQgPSBKU0FNUEFSUkFZIGlucHV0X2RhdGEKIDsgcjE1ID0gSlNBTVBBUlJBWSBvdXRwdXRfZGF0YQogCi0JYWxpZ24JMTYKLQlnbG9iYWwJRVhUTihqc2ltZF9oMnYxX2Rvd25zYW1wbGVfc3NlMikKKyAgICAgICAgYWxpZ24gICAxNgorICAgICAgICBnbG9iYWwgIEVYVE4oanNpbWRfaDJ2MV9kb3duc2FtcGxlX3NzZTIpCiAKIEVYVE4oanNpbWRfaDJ2MV9kb3duc2FtcGxlX3NzZTIpOgotCXB1c2gJcmJwCi0JbW92CXJheCxyc3AKLQltb3YJcmJwLHJzcAotCWNvbGxlY3RfYXJncworICAgICAgICBwdXNoICAgIHJicAorICAgICAgICBtb3YgICAgIHJheCxyc3AKKyAgICAgICAgbW92ICAgICByYnAscnNwCisgICAgICAgIGNvbGxlY3RfYXJncwogCi0JbW92IHJjeCwgcjEzCi0Jc2hsCXJjeCwzCQkJOyBpbXVsIHJjeCxEQ1RTSVpFIChyY3ggPSBvdXRwdXRfY29scykKLQlqegluZWFyIC5yZXR1cm4KKyAgICAgICAgbW92IHJjeCwgcjEzCisgICAgICAgIHNobCAgICAgcmN4LDMgICAgICAgICAgICAgICAgICAgOyBpbXVsIHJjeCxEQ1RTSVpFIChyY3ggPSBvdXRwdXRfY29scykKKyAgICAgICAganogICAgICBuZWFyIC5yZXR1cm4KIAotCW1vdiByZHgsIHIxMAorICAgICAgICBtb3YgcmR4LCByMTAKIAotCTsgLS0gZXhwYW5kX3JpZ2h0X2VkZ2UKKyAgICAgICAgOyAtLSBleHBhbmRfcmlnaHRfZWRnZQogCi0JcHVzaAlyY3gKLQlzaGwJcmN4LDEJCQkJOyBvdXRwdXRfY29scyAqIDIKLQlzdWIJcmN4LHJkeAotCWpsZQlzaG9ydCAuZXhwYW5kX2VuZAorICAgICAgICBwdXNoICAgIHJjeAorICAgICAgICBzaGwgICAgIHJjeCwxICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBvdXRwdXRfY29scyAqIDIKKyAgICAgICAgc3ViICAgICByY3gscmR4CisgICAgICAgIGpsZSAgICAgc2hvcnQgLmV4cGFuZF9lbmQKIAotCW1vdglyYXgsIHIxMQotCXRlc3QJcmF4LHJheAotCWpsZQlzaG9ydCAuZXhwYW5kX2VuZAorICAgICAgICBtb3YgICAgIHJheCwgcjExCisgICAgICAgIHRlc3QgICAgcmF4LHJheAorICAgICAgICBqbGUgICAgIHNob3J0IC5leHBhbmRfZW5kCiAKLQljbGQKLQltb3YJcnNpLCByMTQJOyBpbnB1dF9kYXRhCisgICAgICAgIGNsZAorICAgICAgICBtb3YgICAgIHJzaSwgcjE0ICAgICAgICA7IGlucHV0X2RhdGEKIC5leHBhbmRsb29wOgotCXB1c2gJcmF4Ci0JcHVzaAlyY3gKKyAgICAgICAgcHVzaCAgICByYXgKKyAgICAgICAgcHVzaCAgICByY3gKIAotCW1vdglyZGksIEpTQU1QUk9XIFtyc2ldCi0JYWRkCXJkaSxyZHgKLQltb3YJYWwsIEpTQU1QTEUgW3JkaS0xXQorICAgICAgICBtb3YgICAgIHJkaSwgSlNBTVBST1cgW3JzaV0KKyAgICAgICAgYWRkICAgICByZGkscmR4CisgICAgICAgIG1vdiAgICAgYWwsIEpTQU1QTEUgW3JkaS0xXQogCi0JcmVwIHN0b3NiCisgICAgICAgIHJlcCBzdG9zYgogCi0JcG9wCXJjeAotCXBvcAlyYXgKKyAgICAgICAgcG9wICAgICByY3gKKyAgICAgICAgcG9wICAgICByYXgKIAotCWFkZAlyc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCi0JZGVjCXJheAotCWpnCXNob3J0IC5leHBhbmRsb29wCisgICAgICAgIGFkZCAgICAgcnNpLCBieXRlIFNJWkVPRl9KU0FNUFJPVworICAgICAgICBkZWMgICAgIHJheAorICAgICAgICBqZyAgICAgIHNob3J0IC5leHBhbmRsb29wCiAKIC5leHBhbmRfZW5kOgotCXBvcAlyY3gJCQkJOyBvdXRwdXRfY29scworICAgICAgICBwb3AgICAgIHJjeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBvdXRwdXRfY29scwogCi0JOyAtLSBoMnYxX2Rvd25zYW1wbGUKKyAgICAgICAgOyAtLSBoMnYxX2Rvd25zYW1wbGUKIAotCW1vdglyYXgsIHIxMgk7IHJvd2N0cgotCXRlc3QJZWF4LGVheAotCWpsZQluZWFyIC5yZXR1cm4KKyAgICAgICAgbW92ICAgICByYXgsIHIxMiAgICAgICAgOyByb3djdHIKKyAgICAgICAgdGVzdCAgICBlYXgsZWF4CisgICAgICAgIGpsZSAgICAgbmVhciAucmV0dXJuCiAKLQltb3YJcmR4LCAweDAwMDEwMDAwCQk7IGJpYXMgcGF0dGVybgotCW1vdmQJeG1tNyxlZHgKLQlwY21wZXF3CXhtbTYseG1tNgotCXBzaHVmZAl4bW03LHhtbTcsMHgwMAkJOyB4bW03PXswLCAxLCAwLCAxLCAwLCAxLCAwLCAxfQotCXBzcmx3CXhtbTYsQllURV9CSVQJCTsgeG1tNj17MHhGRiAweDAwIDB4RkYgMHgwMCAuLn0KKyAgICAgICAgbW92ICAgICByZHgsIDB4MDAwMTAwMDAgICAgICAgICA7IGJpYXMgcGF0dGVybgorICAgICAgICBtb3ZkICAgIHhtbTcsZWR4CisgICAgICAgIHBjbXBlcXcgeG1tNix4bW02CisgICAgICAgIHBzaHVmZCAgeG1tNyx4bW03LDB4MDAgICAgICAgICAgOyB4bW03PXswLCAxLCAwLCAxLCAwLCAxLCAwLCAxfQorICAgICAgICBwc3JsdyAgIHhtbTYsQllURV9CSVQgICAgICAgICAgIDsgeG1tNj17MHhGRiAweDAwIDB4RkYgMHgwMCAuLn0KIAotCW1vdglyc2ksIHIxNAk7IGlucHV0X2RhdGEKLQltb3YJcmRpLCByMTUJOyBvdXRwdXRfZGF0YQorICAgICAgICBtb3YgICAgIHJzaSwgcjE0ICAgICAgICA7IGlucHV0X2RhdGEKKyAgICAgICAgbW92ICAgICByZGksIHIxNSAgICAgICAgOyBvdXRwdXRfZGF0YQogLnJvd2xvb3A6Ci0JcHVzaAlyY3gKLQlwdXNoCXJkaQotCXB1c2gJcnNpCisgICAgICAgIHB1c2ggICAgcmN4CisgICAgICAgIHB1c2ggICAgcmRpCisgICAgICAgIHB1c2ggICAgcnNpCiAKLQltb3YJcnNpLCBKU0FNUFJPVyBbcnNpXQkJOyBpbnB0cgotCW1vdiByZGksIEpTQU1QUk9XIFtyZGldCQk7IG91dHB0cgorICAgICAgICBtb3YgICAgIHJzaSwgSlNBTVBST1cgW3JzaV0gICAgICAgICAgICAgOyBpbnB0cgorICAgICAgICBtb3YgcmRpLCBKU0FNUFJPVyBbcmRpXSAgICAgICAgIDsgb3V0cHRyCiAKLQljbXAJcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JECi0JamFlCXNob3J0IC5jb2x1bW5sb29wCisgICAgICAgIGNtcCAgICAgcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JECisgICAgICAgIGphZSAgICAgc2hvcnQgLmNvbHVtbmxvb3AKIAogLmNvbHVtbmxvb3Bfcjg6Ci0JbW92ZHFhCXhtbTAsIFhNTVdPUkQgW3JzaSswKlNJWkVPRl9YTU1XT1JEXQotCXB4b3IJeG1tMSx4bW0xCi0JbW92CXJjeCwgU0laRU9GX1hNTVdPUkQKLQlqbXAJc2hvcnQgLmRvd25zYW1wbGUKKyAgICAgICAgbW92ZHFhICB4bW0wLCBYTU1XT1JEIFtyc2krMCpTSVpFT0ZfWE1NV09SRF0KKyAgICAgICAgcHhvciAgICB4bW0xLHhtbTEKKyAgICAgICAgbW92ICAgICByY3gsIFNJWkVPRl9YTU1XT1JECisgICAgICAgIGptcCAgICAgc2hvcnQgLmRvd25zYW1wbGUKIAogLmNvbHVtbmxvb3A6Ci0JbW92ZHFhCXhtbTAsIFhNTVdPUkQgW3JzaSswKlNJWkVPRl9YTU1XT1JEXQotCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFtyc2krMSpTSVpFT0ZfWE1NV09SRF0KKyAgICAgICAgbW92ZHFhICB4bW0wLCBYTU1XT1JEIFtyc2krMCpTSVpFT0ZfWE1NV09SRF0KKyAgICAgICAgbW92ZHFhICB4bW0xLCBYTU1XT1JEIFtyc2krMSpTSVpFT0ZfWE1NV09SRF0KIAogLmRvd25zYW1wbGU6Ci0JbW92ZHFhCXhtbTIseG1tMAotCW1vdmRxYQl4bW0zLHhtbTEKKyAgICAgICAgbW92ZHFhICB4bW0yLHhtbTAKKyAgICAgICAgbW92ZHFhICB4bW0zLHhtbTEKIAotCXBhbmQJeG1tMCx4bW02Ci0JcHNybHcJeG1tMixCWVRFX0JJVAotCXBhbmQJeG1tMSx4bW02Ci0JcHNybHcJeG1tMyxCWVRFX0JJVAorICAgICAgICBwYW5kICAgIHhtbTAseG1tNgorICAgICAgICBwc3JsdyAgIHhtbTIsQllURV9CSVQKKyAgICAgICAgcGFuZCAgICB4bW0xLHhtbTYKKyAgICAgICAgcHNybHcgICB4bW0zLEJZVEVfQklUCiAKLQlwYWRkdwl4bW0wLHhtbTIKLQlwYWRkdwl4bW0xLHhtbTMKLQlwYWRkdwl4bW0wLHhtbTcKLQlwYWRkdwl4bW0xLHhtbTcKLQlwc3Jsdwl4bW0wLDEKLQlwc3Jsdwl4bW0xLDEKKyAgICAgICAgcGFkZHcgICB4bW0wLHhtbTIKKyAgICAgICAgcGFkZHcgICB4bW0xLHhtbTMKKyAgICAgICAgcGFkZHcgICB4bW0wLHhtbTcKKyAgICAgICAgcGFkZHcgICB4bW0xLHhtbTcKKyAgICAgICAgcHNybHcgICB4bW0wLDEKKyAgICAgICAgcHNybHcgICB4bW0xLDEKIAotCXBhY2t1c3diIHhtbTAseG1tMQorICAgICAgICBwYWNrdXN3YiB4bW0wLHhtbTEKIAotCW1vdmRxYQlYTU1XT1JEIFtyZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbTAKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFtyZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbTAKIAotCXN1YglyY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBvdXRjb2wKLQlhZGQJcnNpLCBieXRlIDIqU0laRU9GX1hNTVdPUkQJOyBpbnB0cgotCWFkZAlyZGksIGJ5dGUgMSpTSVpFT0ZfWE1NV09SRAk7IG91dHB0cgotCWNtcAlyY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKLQlqYWUJc2hvcnQgLmNvbHVtbmxvb3AKLQl0ZXN0CXJjeCxyY3gKLQlqbnoJc2hvcnQgLmNvbHVtbmxvb3BfcjgKKyAgICAgICAgc3ViICAgICByY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQgICAgICAgIDsgb3V0Y29sCisgICAgICAgIGFkZCAgICAgcnNpLCBieXRlIDIqU0laRU9GX1hNTVdPUkQgICAgICA7IGlucHRyCisgICAgICAgIGFkZCAgICAgcmRpLCBieXRlIDEqU0laRU9GX1hNTVdPUkQgICAgICA7IG91dHB0cgorICAgICAgICBjbXAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorICAgICAgICBqYWUgICAgIHNob3J0IC5jb2x1bW5sb29wCisgICAgICAgIHRlc3QgICAgcmN4LHJjeAorICAgICAgICBqbnogICAgIHNob3J0IC5jb2x1bW5sb29wX3I4CiAKLQlwb3AJcnNpCi0JcG9wCXJkaQotCXBvcAlyY3gKKyAgICAgICAgcG9wICAgICByc2kKKyAgICAgICAgcG9wICAgICByZGkKKyAgICAgICAgcG9wICAgICByY3gKIAotCWFkZAlyc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCTsgaW5wdXRfZGF0YQotCWFkZAlyZGksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCTsgb3V0cHV0X2RhdGEKLQlkZWMJcmF4CQkJCTsgcm93Y3RyCi0JamcJbmVhciAucm93bG9vcAorICAgICAgICBhZGQgICAgIHJzaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cgICAgICAgOyBpbnB1dF9kYXRhCisgICAgICAgIGFkZCAgICAgcmRpLCBieXRlIFNJWkVPRl9KU0FNUFJPVyAgICAgICA7IG91dHB1dF9kYXRhCisgICAgICAgIGRlYyAgICAgcmF4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IHJvd2N0cgorICAgICAgICBqZyAgICAgIG5lYXIgLnJvd2xvb3AKIAogLnJldHVybjoKLQl1bmNvbGxlY3RfYXJncwotCXBvcAlyYnAKLQlyZXQKKyAgICAgICAgdW5jb2xsZWN0X2FyZ3MKKyAgICAgICAgcG9wICAgICByYnAKKyAgICAgICAgcmV0CiAKIDsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDsKQEAgLTE4NCwxNDcgKzE4NCwxNDcgQEAKIDsgcjE0ID0gSlNBTVBBUlJBWSBpbnB1dF9kYXRhCiA7IHIxNSA9IEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEKIAotCWFsaWduCTE2Ci0JZ2xvYmFsCUVYVE4oanNpbWRfaDJ2Ml9kb3duc2FtcGxlX3NzZTIpCisgICAgICAgIGFsaWduICAgMTYKKyAgICAgICAgZ2xvYmFsICBFWFROKGpzaW1kX2gydjJfZG93bnNhbXBsZV9zc2UyKQogCiBFWFROKGpzaW1kX2gydjJfZG93bnNhbXBsZV9zc2UyKToKLQlwdXNoCXJicAotCW1vdglyYXgscnNwCi0JbW92CXJicCxyc3AKLQljb2xsZWN0X2FyZ3MKKyAgICAgICAgcHVzaCAgICByYnAKKyAgICAgICAgbW92ICAgICByYXgscnNwCisgICAgICAgIG1vdiAgICAgcmJwLHJzcAorICAgICAgICBjb2xsZWN0X2FyZ3MKIAotCW1vdglyY3gsIHIxMwotCXNobAlyY3gsMwkJCTsgaW11bCByY3gsRENUU0laRSAocmN4ID0gb3V0cHV0X2NvbHMpCi0JanoJbmVhciAucmV0dXJuCisgICAgICAgIG1vdiAgICAgcmN4LCByMTMKKyAgICAgICAgc2hsICAgICByY3gsMyAgICAgICAgICAgICAgICAgICA7IGltdWwgcmN4LERDVFNJWkUgKHJjeCA9IG91dHB1dF9jb2xzKQorICAgICAgICBqeiAgICAgIG5lYXIgLnJldHVybgogCi0JbW92CXJkeCwgcjEwCisgICAgICAgIG1vdiAgICAgcmR4LCByMTAKIAotCTsgLS0gZXhwYW5kX3JpZ2h0X2VkZ2UKKyAgICAgICAgOyAtLSBleHBhbmRfcmlnaHRfZWRnZQogCi0JcHVzaAlyY3gKLQlzaGwJcmN4LDEJCQkJOyBvdXRwdXRfY29scyAqIDIKLQlzdWIJcmN4LHJkeAotCWpsZQlzaG9ydCAuZXhwYW5kX2VuZAorICAgICAgICBwdXNoICAgIHJjeAorICAgICAgICBzaGwgICAgIHJjeCwxICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBvdXRwdXRfY29scyAqIDIKKyAgICAgICAgc3ViICAgICByY3gscmR4CisgICAgICAgIGpsZSAgICAgc2hvcnQgLmV4cGFuZF9lbmQKIAotCW1vdglyYXgsIHIxMQotCXRlc3QJcmF4LHJheAotCWpsZQlzaG9ydCAuZXhwYW5kX2VuZAorICAgICAgICBtb3YgICAgIHJheCwgcjExCisgICAgICAgIHRlc3QgICAgcmF4LHJheAorICAgICAgICBqbGUgICAgIHNob3J0IC5leHBhbmRfZW5kCiAKLQljbGQKLQltb3YJcnNpLCByMTQJOyBpbnB1dF9kYXRhCisgICAgICAgIGNsZAorICAgICAgICBtb3YgICAgIHJzaSwgcjE0ICAgICAgICA7IGlucHV0X2RhdGEKIC5leHBhbmRsb29wOgotCXB1c2gJcmF4Ci0JcHVzaAlyY3gKKyAgICAgICAgcHVzaCAgICByYXgKKyAgICAgICAgcHVzaCAgICByY3gKIAotCW1vdglyZGksIEpTQU1QUk9XIFtyc2ldCi0JYWRkCXJkaSxyZHgKLQltb3YJYWwsIEpTQU1QTEUgW3JkaS0xXQorICAgICAgICBtb3YgICAgIHJkaSwgSlNBTVBST1cgW3JzaV0KKyAgICAgICAgYWRkICAgICByZGkscmR4CisgICAgICAgIG1vdiAgICAgYWwsIEpTQU1QTEUgW3JkaS0xXQogCi0JcmVwIHN0b3NiCisgICAgICAgIHJlcCBzdG9zYgogCi0JcG9wCXJjeAotCXBvcAlyYXgKKyAgICAgICAgcG9wICAgICByY3gKKyAgICAgICAgcG9wICAgICByYXgKIAotCWFkZAlyc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCi0JZGVjCXJheAotCWpnCXNob3J0IC5leHBhbmRsb29wCisgICAgICAgIGFkZCAgICAgcnNpLCBieXRlIFNJWkVPRl9KU0FNUFJPVworICAgICAgICBkZWMgICAgIHJheAorICAgICAgICBqZyAgICAgIHNob3J0IC5leHBhbmRsb29wCiAKIC5leHBhbmRfZW5kOgotCXBvcAlyY3gJCQkJOyBvdXRwdXRfY29scworICAgICAgICBwb3AgICAgIHJjeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBvdXRwdXRfY29scwogCi0JOyAtLSBoMnYyX2Rvd25zYW1wbGUKKyAgICAgICAgOyAtLSBoMnYyX2Rvd25zYW1wbGUKIAotCW1vdglyYXgsIHIxMgk7IHJvd2N0cgotCXRlc3QJcmF4LHJheAotCWpsZQluZWFyIC5yZXR1cm4KKyAgICAgICAgbW92ICAgICByYXgsIHIxMiAgICAgICAgOyByb3djdHIKKyAgICAgICAgdGVzdCAgICByYXgscmF4CisgICAgICAgIGpsZSAgICAgbmVhciAucmV0dXJuCiAKLQltb3YJcmR4LCAweDAwMDIwMDAxCQk7IGJpYXMgcGF0dGVybgotCW1vdmQJeG1tNyxlZHgKLQlwY21wZXF3CXhtbTYseG1tNgotCXBzaHVmZAl4bW03LHhtbTcsMHgwMAkJOyB4bW03PXsxLCAyLCAxLCAyLCAxLCAyLCAxLCAyfQotCXBzcmx3CXhtbTYsQllURV9CSVQJCTsgeG1tNj17MHhGRiAweDAwIDB4RkYgMHgwMCAuLn0KKyAgICAgICAgbW92ICAgICByZHgsIDB4MDAwMjAwMDEgICAgICAgICA7IGJpYXMgcGF0dGVybgorICAgICAgICBtb3ZkICAgIHhtbTcsZWR4CisgICAgICAgIHBjbXBlcXcgeG1tNix4bW02CisgICAgICAgIHBzaHVmZCAgeG1tNyx4bW03LDB4MDAgICAgICAgICAgOyB4bW03PXsxLCAyLCAxLCAyLCAxLCAyLCAxLCAyfQorICAgICAgICBwc3JsdyAgIHhtbTYsQllURV9CSVQgICAgICAgICAgIDsgeG1tNj17MHhGRiAweDAwIDB4RkYgMHgwMCAuLn0KIAotCW1vdglyc2ksIHIxNAk7IGlucHV0X2RhdGEKLQltb3YJcmRpLCByMTUJOyBvdXRwdXRfZGF0YQorICAgICAgICBtb3YgICAgIHJzaSwgcjE0ICAgICAgICA7IGlucHV0X2RhdGEKKyAgICAgICAgbW92ICAgICByZGksIHIxNSAgICAgICAgOyBvdXRwdXRfZGF0YQogLnJvd2xvb3A6Ci0JcHVzaAlyY3gKLQlwdXNoCXJkaQotCXB1c2gJcnNpCisgICAgICAgIHB1c2ggICAgcmN4CisgICAgICAgIHB1c2ggICAgcmRpCisgICAgICAgIHB1c2ggICAgcnNpCiAKLQltb3YJcmR4LCBKU0FNUFJPVyBbcnNpKzAqU0laRU9GX0pTQU1QUk9XXQk7IGlucHRyMAotCW1vdglyc2ksIEpTQU1QUk9XIFtyc2krMSpTSVpFT0ZfSlNBTVBST1ddCTsgaW5wdHIxCi0JbW92CXJkaSwgSlNBTVBST1cgW3JkaV0JCQk7IG91dHB0cgorICAgICAgICBtb3YgICAgIHJkeCwgSlNBTVBST1cgW3JzaSswKlNJWkVPRl9KU0FNUFJPV10gICA7IGlucHRyMAorICAgICAgICBtb3YgICAgIHJzaSwgSlNBTVBST1cgW3JzaSsxKlNJWkVPRl9KU0FNUFJPV10gICA7IGlucHRyMQorICAgICAgICBtb3YgICAgIHJkaSwgSlNBTVBST1cgW3JkaV0gICAgICAgICAgICAgICAgICAgICA7IG91dHB0cgogCi0JY21wCXJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAotCWphZQlzaG9ydCAuY29sdW1ubG9vcAorICAgICAgICBjbXAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorICAgICAgICBqYWUgICAgIHNob3J0IC5jb2x1bW5sb29wCiAKIC5jb2x1bW5sb29wX3I4OgotCW1vdmRxYQl4bW0wLCBYTU1XT1JEIFtyZHgrMCpTSVpFT0ZfWE1NV09SRF0KLQltb3ZkcWEJeG1tMSwgWE1NV09SRCBbcnNpKzAqU0laRU9GX1hNTVdPUkRdCi0JcHhvcgl4bW0yLHhtbTIKLQlweG9yCXhtbTMseG1tMwotCW1vdglyY3gsIFNJWkVPRl9YTU1XT1JECi0Jam1wCXNob3J0IC5kb3duc2FtcGxlCisgICAgICAgIG1vdmRxYSAgeG1tMCwgWE1NV09SRCBbcmR4KzAqU0laRU9GX1hNTVdPUkRdCisgICAgICAgIG1vdmRxYSAgeG1tMSwgWE1NV09SRCBbcnNpKzAqU0laRU9GX1hNTVdPUkRdCisgICAgICAgIHB4b3IgICAgeG1tMix4bW0yCisgICAgICAgIHB4b3IgICAgeG1tMyx4bW0zCisgICAgICAgIG1vdiAgICAgcmN4LCBTSVpFT0ZfWE1NV09SRAorICAgICAgICBqbXAgICAgIHNob3J0IC5kb3duc2FtcGxlCiAKIC5jb2x1bW5sb29wOgotCW1vdmRxYQl4bW0wLCBYTU1XT1JEIFtyZHgrMCpTSVpFT0ZfWE1NV09SRF0KLQltb3ZkcWEJeG1tMSwgWE1NV09SRCBbcnNpKzAqU0laRU9GX1hNTVdPUkRdCi0JbW92ZHFhCXhtbTIsIFhNTVdPUkQgW3JkeCsxKlNJWkVPRl9YTU1XT1JEXQotCW1vdmRxYQl4bW0zLCBYTU1XT1JEIFtyc2krMSpTSVpFT0ZfWE1NV09SRF0KKyAgICAgICAgbW92ZHFhICB4bW0wLCBYTU1XT1JEIFtyZHgrMCpTSVpFT0ZfWE1NV09SRF0KKyAgICAgICAgbW92ZHFhICB4bW0xLCBYTU1XT1JEIFtyc2krMCpTSVpFT0ZfWE1NV09SRF0KKyAgICAgICAgbW92ZHFhICB4bW0yLCBYTU1XT1JEIFtyZHgrMSpTSVpFT0ZfWE1NV09SRF0KKyAgICAgICAgbW92ZHFhICB4bW0zLCBYTU1XT1JEIFtyc2krMSpTSVpFT0ZfWE1NV09SRF0KIAogLmRvd25zYW1wbGU6Ci0JbW92ZHFhCXhtbTQseG1tMAotCW1vdmRxYQl4bW01LHhtbTEKLQlwYW5kCXhtbTAseG1tNgotCXBzcmx3CXhtbTQsQllURV9CSVQKLQlwYW5kCXhtbTEseG1tNgotCXBzcmx3CXhtbTUsQllURV9CSVQKLQlwYWRkdwl4bW0wLHhtbTQKLQlwYWRkdwl4bW0xLHhtbTUKKyAgICAgICAgbW92ZHFhICB4bW00LHhtbTAKKyAgICAgICAgbW92ZHFhICB4bW01LHhtbTEKKyAgICAgICAgcGFuZCAgICB4bW0wLHhtbTYKKyAgICAgICAgcHNybHcgICB4bW00LEJZVEVfQklUCisgICAgICAgIHBhbmQgICAgeG1tMSx4bW02CisgICAgICAgIHBzcmx3ICAgeG1tNSxCWVRFX0JJVAorICAgICAgICBwYWRkdyAgIHhtbTAseG1tNAorICAgICAgICBwYWRkdyAgIHhtbTEseG1tNQogCi0JbW92ZHFhCXhtbTQseG1tMgotCW1vdmRxYQl4bW01LHhtbTMKLQlwYW5kCXhtbTIseG1tNgotCXBzcmx3CXhtbTQsQllURV9CSVQKLQlwYW5kCXhtbTMseG1tNgotCXBzcmx3CXhtbTUsQllURV9CSVQKLQlwYWRkdwl4bW0yLHhtbTQKLQlwYWRkdwl4bW0zLHhtbTUKKyAgICAgICAgbW92ZHFhICB4bW00LHhtbTIKKyAgICAgICAgbW92ZHFhICB4bW01LHhtbTMKKyAgICAgICAgcGFuZCAgICB4bW0yLHhtbTYKKyAgICAgICAgcHNybHcgICB4bW00LEJZVEVfQklUCisgICAgICAgIHBhbmQgICAgeG1tMyx4bW02CisgICAgICAgIHBzcmx3ICAgeG1tNSxCWVRFX0JJVAorICAgICAgICBwYWRkdyAgIHhtbTIseG1tNAorICAgICAgICBwYWRkdyAgIHhtbTMseG1tNQogCi0JcGFkZHcJeG1tMCx4bW0xCi0JcGFkZHcJeG1tMix4bW0zCi0JcGFkZHcJeG1tMCx4bW03Ci0JcGFkZHcJeG1tMix4bW03Ci0JcHNybHcJeG1tMCwyCi0JcHNybHcJeG1tMiwyCisgICAgICAgIHBhZGR3ICAgeG1tMCx4bW0xCisgICAgICAgIHBhZGR3ICAgeG1tMix4bW0zCisgICAgICAgIHBhZGR3ICAgeG1tMCx4bW03CisgICAgICAgIHBhZGR3ICAgeG1tMix4bW03CisgICAgICAgIHBzcmx3ICAgeG1tMCwyCisgICAgICAgIHBzcmx3ICAgeG1tMiwyCiAKLQlwYWNrdXN3YiB4bW0wLHhtbTIKKyAgICAgICAgcGFja3Vzd2IgeG1tMCx4bW0yCiAKLQltb3ZkcWEJWE1NV09SRCBbcmRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW0wCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbcmRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW0wCiAKLQlzdWIJcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JECTsgb3V0Y29sCi0JYWRkCXJkeCwgYnl0ZSAyKlNJWkVPRl9YTU1XT1JECTsgaW5wdHIwCi0JYWRkCXJzaSwgYnl0ZSAyKlNJWkVPRl9YTU1XT1JECTsgaW5wdHIxCi0JYWRkCXJkaSwgYnl0ZSAxKlNJWkVPRl9YTU1XT1JECTsgb3V0cHRyCi0JY21wCXJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAotCWphZQluZWFyIC5jb2x1bW5sb29wCi0JdGVzdAlyY3gscmN4Ci0Jam56CW5lYXIgLmNvbHVtbmxvb3BfcjgKKyAgICAgICAgc3ViICAgICByY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQgICAgICAgIDsgb3V0Y29sCisgICAgICAgIGFkZCAgICAgcmR4LCBieXRlIDIqU0laRU9GX1hNTVdPUkQgICAgICA7IGlucHRyMAorICAgICAgICBhZGQgICAgIHJzaSwgYnl0ZSAyKlNJWkVPRl9YTU1XT1JEICAgICAgOyBpbnB0cjEKKyAgICAgICAgYWRkICAgICByZGksIGJ5dGUgMSpTSVpFT0ZfWE1NV09SRCAgICAgIDsgb3V0cHRyCisgICAgICAgIGNtcCAgICAgcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JECisgICAgICAgIGphZSAgICAgbmVhciAuY29sdW1ubG9vcAorICAgICAgICB0ZXN0ICAgIHJjeCxyY3gKKyAgICAgICAgam56ICAgICBuZWFyIC5jb2x1bW5sb29wX3I4CiAKLQlwb3AJcnNpCi0JcG9wCXJkaQotCXBvcAlyY3gKKyAgICAgICAgcG9wICAgICByc2kKKyAgICAgICAgcG9wICAgICByZGkKKyAgICAgICAgcG9wICAgICByY3gKIAotCWFkZAlyc2ksIGJ5dGUgMipTSVpFT0ZfSlNBTVBST1cJOyBpbnB1dF9kYXRhCi0JYWRkCXJkaSwgYnl0ZSAxKlNJWkVPRl9KU0FNUFJPVwk7IG91dHB1dF9kYXRhCi0JZGVjCXJheAkJCQk7IHJvd2N0cgotCWpnCW5lYXIgLnJvd2xvb3AKKyAgICAgICAgYWRkICAgICByc2ksIGJ5dGUgMipTSVpFT0ZfSlNBTVBST1cgICAgIDsgaW5wdXRfZGF0YQorICAgICAgICBhZGQgICAgIHJkaSwgYnl0ZSAxKlNJWkVPRl9KU0FNUFJPVyAgICAgOyBvdXRwdXRfZGF0YQorICAgICAgICBkZWMgICAgIHJheCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyByb3djdHIKKyAgICAgICAgamcgICAgICBuZWFyIC5yb3dsb29wCiAKIC5yZXR1cm46Ci0JdW5jb2xsZWN0X2FyZ3MKLQlwb3AJcmJwCi0JcmV0CisgICAgICAgIHVuY29sbGVjdF9hcmdzCisgICAgICAgIHBvcCAgICAgcmJwCisgICAgICAgIHJldAogCiA7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQogOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgotCWFsaWduCTE2CisgICAgICAgIGFsaWduICAgMTYKZGlmZiAtLWdpdCBhL3NpbWQvamNzYW1zczIuYXNtIGIvc2ltZC9qY3NhbXNzMi5hc20KaW5kZXggODE4ZTkxMS4uNzM2MTg0MyAxMDA2NDQKLS0tIGEvc2ltZC9qY3NhbXNzMi5hc20KKysrIGIvc2ltZC9qY3NhbXNzMi5hc20KQEAgLTE5LDggKzE5LDggQEAKICVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCiAKIDsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlTRUNUSU9OCVNFR19URVhUCi0JQklUUwkzMgorICAgICAgICBTRUNUSU9OIFNFR19URVhUCisgICAgICAgIEJJVFMgICAgMzIKIDsKIDsgRG93bnNhbXBsZSBwaXhlbCB2YWx1ZXMgb2YgYSBzaW5nbGUgY29tcG9uZW50LgogOyBUaGlzIHZlcnNpb24gaGFuZGxlcyB0aGUgY29tbW9uIGNhc2Ugb2YgMjoxIGhvcml6b250YWwgYW5kIDE6MSB2ZXJ0aWNhbCwKQEAgLTMyLDE0OCArMzIsMTQ4IEBACiA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEpOwogOwogCi0lZGVmaW5lIGltZ193aWR0aChiKQkoYikrOAkJCTsgSkRJTUVOU0lPTiBpbWFnZV93aWR0aAotJWRlZmluZSBtYXhfdl9zYW1wKGIpCShiKSsxMgkJOyBpbnQgbWF4X3Zfc2FtcF9mYWN0b3IKLSVkZWZpbmUgdl9zYW1wKGIpCQkJKGIpKzE2CQk7IEpESU1FTlNJT04gdl9zYW1wX2ZhY3RvcgotJWRlZmluZSB3aWR0aF9ibGtzKGIpCShiKSsyMAkJOyBKRElNRU5TSU9OIHdpZHRoX2Jsb2NrcwotJWRlZmluZSBpbnB1dF9kYXRhKGIpCShiKSsyNAkJOyBKU0FNUEFSUkFZIGlucHV0X2RhdGEKLSVkZWZpbmUgb3V0cHV0X2RhdGEoYikJKGIpKzI4CQk7IEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEKKyVkZWZpbmUgaW1nX3dpZHRoKGIpICAgIChiKSs4ICAgICAgICAgICA7IEpESU1FTlNJT04gaW1hZ2Vfd2lkdGgKKyVkZWZpbmUgbWF4X3Zfc2FtcChiKSAgIChiKSsxMiAgICAgICAgICA7IGludCBtYXhfdl9zYW1wX2ZhY3RvcgorJWRlZmluZSB2X3NhbXAoYikgICAgICAgKGIpKzE2ICAgICAgICAgIDsgSkRJTUVOU0lPTiB2X3NhbXBfZmFjdG9yCislZGVmaW5lIHdpZHRoX2Jsa3MoYikgICAoYikrMjAgICAgICAgICAgOyBKRElNRU5TSU9OIHdpZHRoX2Jsb2NrcworJWRlZmluZSBpbnB1dF9kYXRhKGIpICAgKGIpKzI0ICAgICAgICAgIDsgSlNBTVBBUlJBWSBpbnB1dF9kYXRhCislZGVmaW5lIG91dHB1dF9kYXRhKGIpICAoYikrMjggICAgICAgICAgOyBKU0FNUEFSUkFZIG91dHB1dF9kYXRhCiAKLQlhbGlnbgkxNgotCWdsb2JhbAlFWFROKGpzaW1kX2gydjFfZG93bnNhbXBsZV9zc2UyKQorICAgICAgICBhbGlnbiAgIDE2CisgICAgICAgIGdsb2JhbCAgRVhUTihqc2ltZF9oMnYxX2Rvd25zYW1wbGVfc3NlMikKIAogRVhUTihqc2ltZF9oMnYxX2Rvd25zYW1wbGVfc3NlMik6Ci0JcHVzaAllYnAKLQltb3YJZWJwLGVzcAotOwlwdXNoCWVieAkJOyB1bnVzZWQKLTsJcHVzaAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi07CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotCXB1c2gJZXNpCi0JcHVzaAllZGkKKyAgICAgICAgcHVzaCAgICBlYnAKKyAgICAgICAgbW92ICAgICBlYnAsZXNwCis7ICAgICAgIHB1c2ggICAgZWJ4ICAgICAgICAgICAgIDsgdW51c2VkCis7ICAgICAgIHB1c2ggICAgZWN4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgICAgIHB1c2ggICAgZWR4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgICAgIHB1c2ggICAgZXNpCisgICAgICAgIHB1c2ggICAgZWRpCiAKLQltb3YJZWN4LCBKRElNRU5TSU9OIFt3aWR0aF9ibGtzKGVicCldCi0Jc2hsCWVjeCwzCQkJOyBpbXVsIGVjeCxEQ1RTSVpFIChlY3ggPSBvdXRwdXRfY29scykKLQlqegluZWFyIC5yZXR1cm4KKyAgICAgICAgbW92ICAgICBlY3gsIEpESU1FTlNJT04gW3dpZHRoX2Jsa3MoZWJwKV0KKyAgICAgICAgc2hsICAgICBlY3gsMyAgICAgICAgICAgICAgICAgICA7IGltdWwgZWN4LERDVFNJWkUgKGVjeCA9IG91dHB1dF9jb2xzKQorICAgICAgICBqeiAgICAgIG5lYXIgLnJldHVybgogCi0JbW92CWVkeCwgSkRJTUVOU0lPTiBbaW1nX3dpZHRoKGVicCldCisgICAgICAgIG1vdiAgICAgZWR4LCBKRElNRU5TSU9OIFtpbWdfd2lkdGgoZWJwKV0KIAotCTsgLS0gZXhwYW5kX3JpZ2h0X2VkZ2UKKyAgICAgICAgOyAtLSBleHBhbmRfcmlnaHRfZWRnZQogCi0JcHVzaAllY3gKLQlzaGwJZWN4LDEJCQkJOyBvdXRwdXRfY29scyAqIDIKLQlzdWIJZWN4LGVkeAotCWpsZQlzaG9ydCAuZXhwYW5kX2VuZAorICAgICAgICBwdXNoICAgIGVjeAorICAgICAgICBzaGwgICAgIGVjeCwxICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBvdXRwdXRfY29scyAqIDIKKyAgICAgICAgc3ViICAgICBlY3gsZWR4CisgICAgICAgIGpsZSAgICAgc2hvcnQgLmV4cGFuZF9lbmQKIAotCW1vdgllYXgsIElOVCBbbWF4X3Zfc2FtcChlYnApXQotCXRlc3QJZWF4LGVheAotCWpsZQlzaG9ydCAuZXhwYW5kX2VuZAorICAgICAgICBtb3YgICAgIGVheCwgSU5UIFttYXhfdl9zYW1wKGVicCldCisgICAgICAgIHRlc3QgICAgZWF4LGVheAorICAgICAgICBqbGUgICAgIHNob3J0IC5leHBhbmRfZW5kCiAKLQljbGQKLQltb3YJZXNpLCBKU0FNUEFSUkFZIFtpbnB1dF9kYXRhKGVicCldCTsgaW5wdXRfZGF0YQotCWFsaWdueAkxNiw3CisgICAgICAgIGNsZAorICAgICAgICBtb3YgICAgIGVzaSwgSlNBTVBBUlJBWSBbaW5wdXRfZGF0YShlYnApXSAgICAgICA7IGlucHV0X2RhdGEKKyAgICAgICAgYWxpZ254ICAxNiw3CiAuZXhwYW5kbG9vcDoKLQlwdXNoCWVheAotCXB1c2gJZWN4CisgICAgICAgIHB1c2ggICAgZWF4CisgICAgICAgIHB1c2ggICAgZWN4CiAKLQltb3YJZWRpLCBKU0FNUFJPVyBbZXNpXQotCWFkZAllZGksZWR4Ci0JbW92CWFsLCBKU0FNUExFIFtlZGktMV0KKyAgICAgICAgbW92ICAgICBlZGksIEpTQU1QUk9XIFtlc2ldCisgICAgICAgIGFkZCAgICAgZWRpLGVkeAorICAgICAgICBtb3YgICAgIGFsLCBKU0FNUExFIFtlZGktMV0KIAotCXJlcCBzdG9zYgorICAgICAgICByZXAgc3Rvc2IKIAotCXBvcAllY3gKLQlwb3AJZWF4CisgICAgICAgIHBvcCAgICAgZWN4CisgICAgICAgIHBvcCAgICAgZWF4CiAKLQlhZGQJZXNpLCBieXRlIFNJWkVPRl9KU0FNUFJPVwotCWRlYwllYXgKLQlqZwlzaG9ydCAuZXhwYW5kbG9vcAorICAgICAgICBhZGQgICAgIGVzaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cKKyAgICAgICAgZGVjICAgICBlYXgKKyAgICAgICAgamcgICAgICBzaG9ydCAuZXhwYW5kbG9vcAogCiAuZXhwYW5kX2VuZDoKLQlwb3AJZWN4CQkJCTsgb3V0cHV0X2NvbHMKKyAgICAgICAgcG9wICAgICBlY3ggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgb3V0cHV0X2NvbHMKIAotCTsgLS0gaDJ2MV9kb3duc2FtcGxlCisgICAgICAgIDsgLS0gaDJ2MV9kb3duc2FtcGxlCiAKLQltb3YJZWF4LCBKRElNRU5TSU9OIFt2X3NhbXAoZWJwKV0JOyByb3djdHIKLQl0ZXN0CWVheCxlYXgKLQlqbGUJbmVhciAucmV0dXJuCisgICAgICAgIG1vdiAgICAgZWF4LCBKRElNRU5TSU9OIFt2X3NhbXAoZWJwKV0gICA7IHJvd2N0cgorICAgICAgICB0ZXN0ICAgIGVheCxlYXgKKyAgICAgICAgamxlICAgICBuZWFyIC5yZXR1cm4KIAotCW1vdgllZHgsIDB4MDAwMTAwMDAJCTsgYmlhcyBwYXR0ZXJuCi0JbW92ZAl4bW03LGVkeAotCXBjbXBlcXcJeG1tNix4bW02Ci0JcHNodWZkCXhtbTcseG1tNywweDAwCQk7IHhtbTc9ezAsIDEsIDAsIDEsIDAsIDEsIDAsIDF9Ci0JcHNybHcJeG1tNixCWVRFX0JJVAkJOyB4bW02PXsweEZGIDB4MDAgMHhGRiAweDAwIC4ufQorICAgICAgICBtb3YgICAgIGVkeCwgMHgwMDAxMDAwMCAgICAgICAgIDsgYmlhcyBwYXR0ZXJuCisgICAgICAgIG1vdmQgICAgeG1tNyxlZHgKKyAgICAgICAgcGNtcGVxdyB4bW02LHhtbTYKKyAgICAgICAgcHNodWZkICB4bW03LHhtbTcsMHgwMCAgICAgICAgICA7IHhtbTc9ezAsIDEsIDAsIDEsIDAsIDEsIDAsIDF9CisgICAgICAgIHBzcmx3ICAgeG1tNixCWVRFX0JJVCAgICAgICAgICAgOyB4bW02PXsweEZGIDB4MDAgMHhGRiAweDAwIC4ufQogCi0JbW92CWVzaSwgSlNBTVBBUlJBWSBbaW5wdXRfZGF0YShlYnApXQk7IGlucHV0X2RhdGEKLQltb3YJZWRpLCBKU0FNUEFSUkFZIFtvdXRwdXRfZGF0YShlYnApXQk7IG91dHB1dF9kYXRhCi0JYWxpZ254CTE2LDcKKyAgICAgICAgbW92ICAgICBlc2ksIEpTQU1QQVJSQVkgW2lucHV0X2RhdGEoZWJwKV0gICAgICAgOyBpbnB1dF9kYXRhCisgICAgICAgIG1vdiAgICAgZWRpLCBKU0FNUEFSUkFZIFtvdXRwdXRfZGF0YShlYnApXSAgICAgIDsgb3V0cHV0X2RhdGEKKyAgICAgICAgYWxpZ254ICAxNiw3CiAucm93bG9vcDoKLQlwdXNoCWVjeAotCXB1c2gJZWRpCi0JcHVzaAllc2kKKyAgICAgICAgcHVzaCAgICBlY3gKKyAgICAgICAgcHVzaCAgICBlZGkKKyAgICAgICAgcHVzaCAgICBlc2kKIAotCW1vdgllc2ksIEpTQU1QUk9XIFtlc2ldCQk7IGlucHRyCi0JbW92CWVkaSwgSlNBTVBST1cgW2VkaV0JCTsgb3V0cHRyCisgICAgICAgIG1vdiAgICAgZXNpLCBKU0FNUFJPVyBbZXNpXSAgICAgICAgICAgICA7IGlucHRyCisgICAgICAgIG1vdiAgICAgZWRpLCBKU0FNUFJPVyBbZWRpXSAgICAgICAgICAgICA7IG91dHB0cgogCi0JY21wCWVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAotCWphZQlzaG9ydCAuY29sdW1ubG9vcAotCWFsaWdueAkxNiw3CisgICAgICAgIGNtcCAgICAgZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JECisgICAgICAgIGphZSAgICAgc2hvcnQgLmNvbHVtbmxvb3AKKyAgICAgICAgYWxpZ254ICAxNiw3CiAKIC5jb2x1bW5sb29wX3I4OgotCW1vdmRxYQl4bW0wLCBYTU1XT1JEIFtlc2krMCpTSVpFT0ZfWE1NV09SRF0KLQlweG9yCXhtbTEseG1tMQotCW1vdgllY3gsIFNJWkVPRl9YTU1XT1JECi0Jam1wCXNob3J0IC5kb3duc2FtcGxlCi0JYWxpZ254CTE2LDcKKyAgICAgICAgbW92ZHFhICB4bW0wLCBYTU1XT1JEIFtlc2krMCpTSVpFT0ZfWE1NV09SRF0KKyAgICAgICAgcHhvciAgICB4bW0xLHhtbTEKKyAgICAgICAgbW92ICAgICBlY3gsIFNJWkVPRl9YTU1XT1JECisgICAgICAgIGptcCAgICAgc2hvcnQgLmRvd25zYW1wbGUKKyAgICAgICAgYWxpZ254ICAxNiw3CiAKIC5jb2x1bW5sb29wOgotCW1vdmRxYQl4bW0wLCBYTU1XT1JEIFtlc2krMCpTSVpFT0ZfWE1NV09SRF0KLQltb3ZkcWEJeG1tMSwgWE1NV09SRCBbZXNpKzEqU0laRU9GX1hNTVdPUkRdCisgICAgICAgIG1vdmRxYSAgeG1tMCwgWE1NV09SRCBbZXNpKzAqU0laRU9GX1hNTVdPUkRdCisgICAgICAgIG1vdmRxYSAgeG1tMSwgWE1NV09SRCBbZXNpKzEqU0laRU9GX1hNTVdPUkRdCiAKIC5kb3duc2FtcGxlOgotCW1vdmRxYQl4bW0yLHhtbTAKLQltb3ZkcWEJeG1tMyx4bW0xCisgICAgICAgIG1vdmRxYSAgeG1tMix4bW0wCisgICAgICAgIG1vdmRxYSAgeG1tMyx4bW0xCiAKLQlwYW5kCXhtbTAseG1tNgotCXBzcmx3CXhtbTIsQllURV9CSVQKLQlwYW5kCXhtbTEseG1tNgotCXBzcmx3CXhtbTMsQllURV9CSVQKKyAgICAgICAgcGFuZCAgICB4bW0wLHhtbTYKKyAgICAgICAgcHNybHcgICB4bW0yLEJZVEVfQklUCisgICAgICAgIHBhbmQgICAgeG1tMSx4bW02CisgICAgICAgIHBzcmx3ICAgeG1tMyxCWVRFX0JJVAogCi0JcGFkZHcJeG1tMCx4bW0yCi0JcGFkZHcJeG1tMSx4bW0zCi0JcGFkZHcJeG1tMCx4bW03Ci0JcGFkZHcJeG1tMSx4bW03Ci0JcHNybHcJeG1tMCwxCi0JcHNybHcJeG1tMSwxCisgICAgICAgIHBhZGR3ICAgeG1tMCx4bW0yCisgICAgICAgIHBhZGR3ICAgeG1tMSx4bW0zCisgICAgICAgIHBhZGR3ICAgeG1tMCx4bW03CisgICAgICAgIHBhZGR3ICAgeG1tMSx4bW03CisgICAgICAgIHBzcmx3ICAgeG1tMCwxCisgICAgICAgIHBzcmx3ICAgeG1tMSwxCiAKLQlwYWNrdXN3YiB4bW0wLHhtbTEKKyAgICAgICAgcGFja3Vzd2IgeG1tMCx4bW0xCiAKLQltb3ZkcWEJWE1NV09SRCBbZWRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW0wCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbZWRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW0wCiAKLQlzdWIJZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JECTsgb3V0Y29sCi0JYWRkCWVzaSwgYnl0ZSAyKlNJWkVPRl9YTU1XT1JECTsgaW5wdHIKLQlhZGQJZWRpLCBieXRlIDEqU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKLQljbXAJZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JECi0JamFlCXNob3J0IC5jb2x1bW5sb29wCi0JdGVzdAllY3gsZWN4Ci0Jam56CXNob3J0IC5jb2x1bW5sb29wX3I4CisgICAgICAgIHN1YiAgICAgZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JEICAgICAgICA7IG91dGNvbAorICAgICAgICBhZGQgICAgIGVzaSwgYnl0ZSAyKlNJWkVPRl9YTU1XT1JEICAgICAgOyBpbnB0cgorICAgICAgICBhZGQgICAgIGVkaSwgYnl0ZSAxKlNJWkVPRl9YTU1XT1JEICAgICAgOyBvdXRwdHIKKyAgICAgICAgY21wICAgICBlY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKyAgICAgICAgamFlICAgICBzaG9ydCAuY29sdW1ubG9vcAorICAgICAgICB0ZXN0ICAgIGVjeCxlY3gKKyAgICAgICAgam56ICAgICBzaG9ydCAuY29sdW1ubG9vcF9yOAogCi0JcG9wCWVzaQotCXBvcAllZGkKLQlwb3AJZWN4CisgICAgICAgIHBvcCAgICAgZXNpCisgICAgICAgIHBvcCAgICAgZWRpCisgICAgICAgIHBvcCAgICAgZWN4CiAKLQlhZGQJZXNpLCBieXRlIFNJWkVPRl9KU0FNUFJPVwk7IGlucHV0X2RhdGEKLQlhZGQJZWRpLCBieXRlIFNJWkVPRl9KU0FNUFJPVwk7IG91dHB1dF9kYXRhCi0JZGVjCWVheAkJCQk7IHJvd2N0cgotCWpnCW5lYXIgLnJvd2xvb3AKKyAgICAgICAgYWRkICAgICBlc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XICAgICAgIDsgaW5wdXRfZGF0YQorICAgICAgICBhZGQgICAgIGVkaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cgICAgICAgOyBvdXRwdXRfZGF0YQorICAgICAgICBkZWMgICAgIGVheCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyByb3djdHIKKyAgICAgICAgamcgICAgICBuZWFyIC5yb3dsb29wCiAKIC5yZXR1cm46Ci0JcG9wCWVkaQotCXBvcAllc2kKLTsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLTsJcG9wCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLTsJcG9wCWVieAkJOyB1bnVzZWQKLQlwb3AJZWJwCi0JcmV0CisgICAgICAgIHBvcCAgICAgZWRpCisgICAgICAgIHBvcCAgICAgZXNpCis7ICAgICAgIHBvcCAgICAgZWR4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgICAgIHBvcCAgICAgZWN4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgICAgIHBvcCAgICAgZWJ4ICAgICAgICAgICAgIDsgdW51c2VkCisgICAgICAgIHBvcCAgICAgZWJwCisgICAgICAgIHJldAogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiA7CkBAIC0xODcsMTY1ICsxODcsMTY1IEBACiA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEpOwogOwogCi0lZGVmaW5lIGltZ193aWR0aChiKQkoYikrOAkJCTsgSkRJTUVOU0lPTiBpbWFnZV93aWR0aAotJWRlZmluZSBtYXhfdl9zYW1wKGIpCShiKSsxMgkJOyBpbnQgbWF4X3Zfc2FtcF9mYWN0b3IKLSVkZWZpbmUgdl9zYW1wKGIpCQkJKGIpKzE2CQk7IEpESU1FTlNJT04gdl9zYW1wX2ZhY3RvcgotJWRlZmluZSB3aWR0aF9ibGtzKGIpCShiKSsyMAkJOyBKRElNRU5TSU9OIHdpZHRoX2Jsb2NrcwotJWRlZmluZSBpbnB1dF9kYXRhKGIpCShiKSsyNAkJOyBKU0FNUEFSUkFZIGlucHV0X2RhdGEKLSVkZWZpbmUgb3V0cHV0X2RhdGEoYikJKGIpKzI4CTsgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YQorJWRlZmluZSBpbWdfd2lkdGgoYikgICAgKGIpKzggICAgICAgICAgIDsgSkRJTUVOU0lPTiBpbWFnZV93aWR0aAorJWRlZmluZSBtYXhfdl9zYW1wKGIpICAgKGIpKzEyICAgICAgICAgIDsgaW50IG1heF92X3NhbXBfZmFjdG9yCislZGVmaW5lIHZfc2FtcChiKSAgICAgICAoYikrMTYgICAgICAgICAgOyBKRElNRU5TSU9OIHZfc2FtcF9mYWN0b3IKKyVkZWZpbmUgd2lkdGhfYmxrcyhiKSAgIChiKSsyMCAgICAgICAgICA7IEpESU1FTlNJT04gd2lkdGhfYmxvY2tzCislZGVmaW5lIGlucHV0X2RhdGEoYikgICAoYikrMjQgICAgICAgICAgOyBKU0FNUEFSUkFZIGlucHV0X2RhdGEKKyVkZWZpbmUgb3V0cHV0X2RhdGEoYikgIChiKSsyOCAgICAgICAgICA7IEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEKIAotCWFsaWduCTE2Ci0JZ2xvYmFsCUVYVE4oanNpbWRfaDJ2Ml9kb3duc2FtcGxlX3NzZTIpCisgICAgICAgIGFsaWduICAgMTYKKyAgICAgICAgZ2xvYmFsICBFWFROKGpzaW1kX2gydjJfZG93bnNhbXBsZV9zc2UyKQogCiBFWFROKGpzaW1kX2gydjJfZG93bnNhbXBsZV9zc2UyKToKLQlwdXNoCWVicAotCW1vdgllYnAsZXNwCi07CXB1c2gJZWJ4CQk7IHVudXNlZAotOwlwdXNoCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLTsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi0JcHVzaAllc2kKLQlwdXNoCWVkaQorICAgICAgICBwdXNoICAgIGVicAorICAgICAgICBtb3YgICAgIGVicCxlc3AKKzsgICAgICAgcHVzaCAgICBlYnggICAgICAgICAgICAgOyB1bnVzZWQKKzsgICAgICAgcHVzaCAgICBlY3ggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICAgICAgcHVzaCAgICBlZHggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICAgICAgcHVzaCAgICBlc2kKKyAgICAgICAgcHVzaCAgICBlZGkKIAotCW1vdgllY3gsIEpESU1FTlNJT04gW3dpZHRoX2Jsa3MoZWJwKV0KLQlzaGwJZWN4LDMJCQk7IGltdWwgZWN4LERDVFNJWkUgKGVjeCA9IG91dHB1dF9jb2xzKQotCWp6CW5lYXIgLnJldHVybgorICAgICAgICBtb3YgICAgIGVjeCwgSkRJTUVOU0lPTiBbd2lkdGhfYmxrcyhlYnApXQorICAgICAgICBzaGwgICAgIGVjeCwzICAgICAgICAgICAgICAgICAgIDsgaW11bCBlY3gsRENUU0laRSAoZWN4ID0gb3V0cHV0X2NvbHMpCisgICAgICAgIGp6ICAgICAgbmVhciAucmV0dXJuCiAKLQltb3YJZWR4LCBKRElNRU5TSU9OIFtpbWdfd2lkdGgoZWJwKV0KKyAgICAgICAgbW92ICAgICBlZHgsIEpESU1FTlNJT04gW2ltZ193aWR0aChlYnApXQogCi0JOyAtLSBleHBhbmRfcmlnaHRfZWRnZQorICAgICAgICA7IC0tIGV4cGFuZF9yaWdodF9lZGdlCiAKLQlwdXNoCWVjeAotCXNobAllY3gsMQkJCQk7IG91dHB1dF9jb2xzICogMgotCXN1YgllY3gsZWR4Ci0JamxlCXNob3J0IC5leHBhbmRfZW5kCisgICAgICAgIHB1c2ggICAgZWN4CisgICAgICAgIHNobCAgICAgZWN4LDEgICAgICAgICAgICAgICAgICAgICAgICAgICA7IG91dHB1dF9jb2xzICogMgorICAgICAgICBzdWIgICAgIGVjeCxlZHgKKyAgICAgICAgamxlICAgICBzaG9ydCAuZXhwYW5kX2VuZAogCi0JbW92CWVheCwgSU5UIFttYXhfdl9zYW1wKGVicCldCi0JdGVzdAllYXgsZWF4Ci0JamxlCXNob3J0IC5leHBhbmRfZW5kCisgICAgICAgIG1vdiAgICAgZWF4LCBJTlQgW21heF92X3NhbXAoZWJwKV0KKyAgICAgICAgdGVzdCAgICBlYXgsZWF4CisgICAgICAgIGpsZSAgICAgc2hvcnQgLmV4cGFuZF9lbmQKIAotCWNsZAotCW1vdgllc2ksIEpTQU1QQVJSQVkgW2lucHV0X2RhdGEoZWJwKV0JOyBpbnB1dF9kYXRhCi0JYWxpZ254CTE2LDcKKyAgICAgICAgY2xkCisgICAgICAgIG1vdiAgICAgZXNpLCBKU0FNUEFSUkFZIFtpbnB1dF9kYXRhKGVicCldICAgICAgIDsgaW5wdXRfZGF0YQorICAgICAgICBhbGlnbnggIDE2LDcKIC5leHBhbmRsb29wOgotCXB1c2gJZWF4Ci0JcHVzaAllY3gKKyAgICAgICAgcHVzaCAgICBlYXgKKyAgICAgICAgcHVzaCAgICBlY3gKIAotCW1vdgllZGksIEpTQU1QUk9XIFtlc2ldCi0JYWRkCWVkaSxlZHgKLQltb3YJYWwsIEpTQU1QTEUgW2VkaS0xXQorICAgICAgICBtb3YgICAgIGVkaSwgSlNBTVBST1cgW2VzaV0KKyAgICAgICAgYWRkICAgICBlZGksZWR4CisgICAgICAgIG1vdiAgICAgYWwsIEpTQU1QTEUgW2VkaS0xXQogCi0JcmVwIHN0b3NiCisgICAgICAgIHJlcCBzdG9zYgogCi0JcG9wCWVjeAotCXBvcAllYXgKKyAgICAgICAgcG9wICAgICBlY3gKKyAgICAgICAgcG9wICAgICBlYXgKIAotCWFkZAllc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCi0JZGVjCWVheAotCWpnCXNob3J0IC5leHBhbmRsb29wCisgICAgICAgIGFkZCAgICAgZXNpLCBieXRlIFNJWkVPRl9KU0FNUFJPVworICAgICAgICBkZWMgICAgIGVheAorICAgICAgICBqZyAgICAgIHNob3J0IC5leHBhbmRsb29wCiAKIC5leHBhbmRfZW5kOgotCXBvcAllY3gJCQkJOyBvdXRwdXRfY29scworICAgICAgICBwb3AgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBvdXRwdXRfY29scwogCi0JOyAtLSBoMnYyX2Rvd25zYW1wbGUKKyAgICAgICAgOyAtLSBoMnYyX2Rvd25zYW1wbGUKIAotCW1vdgllYXgsIEpESU1FTlNJT04gW3Zfc2FtcChlYnApXQk7IHJvd2N0cgotCXRlc3QJZWF4LGVheAotCWpsZQluZWFyIC5yZXR1cm4KKyAgICAgICAgbW92ICAgICBlYXgsIEpESU1FTlNJT04gW3Zfc2FtcChlYnApXSAgIDsgcm93Y3RyCisgICAgICAgIHRlc3QgICAgZWF4LGVheAorICAgICAgICBqbGUgICAgIG5lYXIgLnJldHVybgogCi0JbW92CWVkeCwgMHgwMDAyMDAwMQkJOyBiaWFzIHBhdHRlcm4KLQltb3ZkCXhtbTcsZWR4Ci0JcGNtcGVxdwl4bW02LHhtbTYKLQlwc2h1ZmQJeG1tNyx4bW03LDB4MDAJCTsgeG1tNz17MSwgMiwgMSwgMiwgMSwgMiwgMSwgMn0KLQlwc3Jsdwl4bW02LEJZVEVfQklUCQk7IHhtbTY9ezB4RkYgMHgwMCAweEZGIDB4MDAgLi59CisgICAgICAgIG1vdiAgICAgZWR4LCAweDAwMDIwMDAxICAgICAgICAgOyBiaWFzIHBhdHRlcm4KKyAgICAgICAgbW92ZCAgICB4bW03LGVkeAorICAgICAgICBwY21wZXF3IHhtbTYseG1tNgorICAgICAgICBwc2h1ZmQgIHhtbTcseG1tNywweDAwICAgICAgICAgIDsgeG1tNz17MSwgMiwgMSwgMiwgMSwgMiwgMSwgMn0KKyAgICAgICAgcHNybHcgICB4bW02LEJZVEVfQklUICAgICAgICAgICA7IHhtbTY9ezB4RkYgMHgwMCAweEZGIDB4MDAgLi59CiAKLQltb3YJZXNpLCBKU0FNUEFSUkFZIFtpbnB1dF9kYXRhKGVicCldCTsgaW5wdXRfZGF0YQotCW1vdgllZGksIEpTQU1QQVJSQVkgW291dHB1dF9kYXRhKGVicCldCTsgb3V0cHV0X2RhdGEKLQlhbGlnbngJMTYsNworICAgICAgICBtb3YgICAgIGVzaSwgSlNBTVBBUlJBWSBbaW5wdXRfZGF0YShlYnApXSAgICAgICA7IGlucHV0X2RhdGEKKyAgICAgICAgbW92ICAgICBlZGksIEpTQU1QQVJSQVkgW291dHB1dF9kYXRhKGVicCldICAgICAgOyBvdXRwdXRfZGF0YQorICAgICAgICBhbGlnbnggIDE2LDcKIC5yb3dsb29wOgotCXB1c2gJZWN4Ci0JcHVzaAllZGkKLQlwdXNoCWVzaQorICAgICAgICBwdXNoICAgIGVjeAorICAgICAgICBwdXNoICAgIGVkaQorICAgICAgICBwdXNoICAgIGVzaQogCi0JbW92CWVkeCwgSlNBTVBST1cgW2VzaSswKlNJWkVPRl9KU0FNUFJPV10JOyBpbnB0cjAKLQltb3YJZXNpLCBKU0FNUFJPVyBbZXNpKzEqU0laRU9GX0pTQU1QUk9XXQk7IGlucHRyMQotCW1vdgllZGksIEpTQU1QUk9XIFtlZGldCQkJOyBvdXRwdHIKKyAgICAgICAgbW92ICAgICBlZHgsIEpTQU1QUk9XIFtlc2krMCpTSVpFT0ZfSlNBTVBST1ddICAgOyBpbnB0cjAKKyAgICAgICAgbW92ICAgICBlc2ksIEpTQU1QUk9XIFtlc2krMSpTSVpFT0ZfSlNBTVBST1ddICAgOyBpbnB0cjEKKyAgICAgICAgbW92ICAgICBlZGksIEpTQU1QUk9XIFtlZGldICAgICAgICAgICAgICAgICAgICAgOyBvdXRwdHIKIAotCWNtcAllY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKLQlqYWUJc2hvcnQgLmNvbHVtbmxvb3AKLQlhbGlnbngJMTYsNworICAgICAgICBjbXAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorICAgICAgICBqYWUgICAgIHNob3J0IC5jb2x1bW5sb29wCisgICAgICAgIGFsaWdueCAgMTYsNwogCiAuY29sdW1ubG9vcF9yODoKLQltb3ZkcWEJeG1tMCwgWE1NV09SRCBbZWR4KzAqU0laRU9GX1hNTVdPUkRdCi0JbW92ZHFhCXhtbTEsIFhNTVdPUkQgW2VzaSswKlNJWkVPRl9YTU1XT1JEXQotCXB4b3IJeG1tMix4bW0yCi0JcHhvcgl4bW0zLHhtbTMKLQltb3YJZWN4LCBTSVpFT0ZfWE1NV09SRAotCWptcAlzaG9ydCAuZG93bnNhbXBsZQotCWFsaWdueAkxNiw3CisgICAgICAgIG1vdmRxYSAgeG1tMCwgWE1NV09SRCBbZWR4KzAqU0laRU9GX1hNTVdPUkRdCisgICAgICAgIG1vdmRxYSAgeG1tMSwgWE1NV09SRCBbZXNpKzAqU0laRU9GX1hNTVdPUkRdCisgICAgICAgIHB4b3IgICAgeG1tMix4bW0yCisgICAgICAgIHB4b3IgICAgeG1tMyx4bW0zCisgICAgICAgIG1vdiAgICAgZWN4LCBTSVpFT0ZfWE1NV09SRAorICAgICAgICBqbXAgICAgIHNob3J0IC5kb3duc2FtcGxlCisgICAgICAgIGFsaWdueCAgMTYsNwogCiAuY29sdW1ubG9vcDoKLQltb3ZkcWEJeG1tMCwgWE1NV09SRCBbZWR4KzAqU0laRU9GX1hNTVdPUkRdCi0JbW92ZHFhCXhtbTEsIFhNTVdPUkQgW2VzaSswKlNJWkVPRl9YTU1XT1JEXQotCW1vdmRxYQl4bW0yLCBYTU1XT1JEIFtlZHgrMSpTSVpFT0ZfWE1NV09SRF0KLQltb3ZkcWEJeG1tMywgWE1NV09SRCBbZXNpKzEqU0laRU9GX1hNTVdPUkRdCisgICAgICAgIG1vdmRxYSAgeG1tMCwgWE1NV09SRCBbZWR4KzAqU0laRU9GX1hNTVdPUkRdCisgICAgICAgIG1vdmRxYSAgeG1tMSwgWE1NV09SRCBbZXNpKzAqU0laRU9GX1hNTVdPUkRdCisgICAgICAgIG1vdmRxYSAgeG1tMiwgWE1NV09SRCBbZWR4KzEqU0laRU9GX1hNTVdPUkRdCisgICAgICAgIG1vdmRxYSAgeG1tMywgWE1NV09SRCBbZXNpKzEqU0laRU9GX1hNTVdPUkRdCiAKIC5kb3duc2FtcGxlOgotCW1vdmRxYQl4bW00LHhtbTAKLQltb3ZkcWEJeG1tNSx4bW0xCi0JcGFuZAl4bW0wLHhtbTYKLQlwc3Jsdwl4bW00LEJZVEVfQklUCi0JcGFuZAl4bW0xLHhtbTYKLQlwc3Jsdwl4bW01LEJZVEVfQklUCi0JcGFkZHcJeG1tMCx4bW00Ci0JcGFkZHcJeG1tMSx4bW01CisgICAgICAgIG1vdmRxYSAgeG1tNCx4bW0wCisgICAgICAgIG1vdmRxYSAgeG1tNSx4bW0xCisgICAgICAgIHBhbmQgICAgeG1tMCx4bW02CisgICAgICAgIHBzcmx3ICAgeG1tNCxCWVRFX0JJVAorICAgICAgICBwYW5kICAgIHhtbTEseG1tNgorICAgICAgICBwc3JsdyAgIHhtbTUsQllURV9CSVQKKyAgICAgICAgcGFkZHcgICB4bW0wLHhtbTQKKyAgICAgICAgcGFkZHcgICB4bW0xLHhtbTUKIAotCW1vdmRxYQl4bW00LHhtbTIKLQltb3ZkcWEJeG1tNSx4bW0zCi0JcGFuZAl4bW0yLHhtbTYKLQlwc3Jsdwl4bW00LEJZVEVfQklUCi0JcGFuZAl4bW0zLHhtbTYKLQlwc3Jsdwl4bW01LEJZVEVfQklUCi0JcGFkZHcJeG1tMix4bW00Ci0JcGFkZHcJeG1tMyx4bW01CisgICAgICAgIG1vdmRxYSAgeG1tNCx4bW0yCisgICAgICAgIG1vdmRxYSAgeG1tNSx4bW0zCisgICAgICAgIHBhbmQgICAgeG1tMix4bW02CisgICAgICAgIHBzcmx3ICAgeG1tNCxCWVRFX0JJVAorICAgICAgICBwYW5kICAgIHhtbTMseG1tNgorICAgICAgICBwc3JsdyAgIHhtbTUsQllURV9CSVQKKyAgICAgICAgcGFkZHcgICB4bW0yLHhtbTQKKyAgICAgICAgcGFkZHcgICB4bW0zLHhtbTUKIAotCXBhZGR3CXhtbTAseG1tMQotCXBhZGR3CXhtbTIseG1tMwotCXBhZGR3CXhtbTAseG1tNwotCXBhZGR3CXhtbTIseG1tNwotCXBzcmx3CXhtbTAsMgotCXBzcmx3CXhtbTIsMgorICAgICAgICBwYWRkdyAgIHhtbTAseG1tMQorICAgICAgICBwYWRkdyAgIHhtbTIseG1tMworICAgICAgICBwYWRkdyAgIHhtbTAseG1tNworICAgICAgICBwYWRkdyAgIHhtbTIseG1tNworICAgICAgICBwc3JsdyAgIHhtbTAsMgorICAgICAgICBwc3JsdyAgIHhtbTIsMgogCi0JcGFja3Vzd2IgeG1tMCx4bW0yCisgICAgICAgIHBhY2t1c3diIHhtbTAseG1tMgogCi0JbW92ZHFhCVhNTVdPUkQgW2VkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tMAorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW2VkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tMAogCi0Jc3ViCWVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IG91dGNvbAotCWFkZAllZHgsIGJ5dGUgMipTSVpFT0ZfWE1NV09SRAk7IGlucHRyMAotCWFkZAllc2ksIGJ5dGUgMipTSVpFT0ZfWE1NV09SRAk7IGlucHRyMQotCWFkZAllZGksIGJ5dGUgMSpTSVpFT0ZfWE1NV09SRAk7IG91dHB0cgotCWNtcAllY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKLQlqYWUJbmVhciAuY29sdW1ubG9vcAotCXRlc3QJZWN4LGVjeAotCWpuegluZWFyIC5jb2x1bW5sb29wX3I4CisgICAgICAgIHN1YiAgICAgZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JEICAgICAgICA7IG91dGNvbAorICAgICAgICBhZGQgICAgIGVkeCwgYnl0ZSAyKlNJWkVPRl9YTU1XT1JEICAgICAgOyBpbnB0cjAKKyAgICAgICAgYWRkICAgICBlc2ksIGJ5dGUgMipTSVpFT0ZfWE1NV09SRCAgICAgIDsgaW5wdHIxCisgICAgICAgIGFkZCAgICAgZWRpLCBieXRlIDEqU0laRU9GX1hNTVdPUkQgICAgICA7IG91dHB0cgorICAgICAgICBjbXAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorICAgICAgICBqYWUgICAgIG5lYXIgLmNvbHVtbmxvb3AKKyAgICAgICAgdGVzdCAgICBlY3gsZWN4CisgICAgICAgIGpueiAgICAgbmVhciAuY29sdW1ubG9vcF9yOAogCi0JcG9wCWVzaQotCXBvcAllZGkKLQlwb3AJZWN4CisgICAgICAgIHBvcCAgICAgZXNpCisgICAgICAgIHBvcCAgICAgZWRpCisgICAgICAgIHBvcCAgICAgZWN4CiAKLQlhZGQJZXNpLCBieXRlIDIqU0laRU9GX0pTQU1QUk9XCTsgaW5wdXRfZGF0YQotCWFkZAllZGksIGJ5dGUgMSpTSVpFT0ZfSlNBTVBST1cJOyBvdXRwdXRfZGF0YQotCWRlYwllYXgJCQkJOyByb3djdHIKLQlqZwluZWFyIC5yb3dsb29wCisgICAgICAgIGFkZCAgICAgZXNpLCBieXRlIDIqU0laRU9GX0pTQU1QUk9XICAgICA7IGlucHV0X2RhdGEKKyAgICAgICAgYWRkICAgICBlZGksIGJ5dGUgMSpTSVpFT0ZfSlNBTVBST1cgICAgIDsgb3V0cHV0X2RhdGEKKyAgICAgICAgZGVjICAgICBlYXggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgcm93Y3RyCisgICAgICAgIGpnICAgICAgbmVhciAucm93bG9vcAogCiAucmV0dXJuOgotCXBvcAllZGkKLQlwb3AJZXNpCi07CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi07CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi07CXBvcAllYngJCTsgdW51c2VkCi0JcG9wCWVicAotCXJldAorICAgICAgICBwb3AgICAgIGVkaQorICAgICAgICBwb3AgICAgIGVzaQorOyAgICAgICBwb3AgICAgIGVkeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgICAgICBwb3AgICAgIGVjeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgICAgICBwb3AgICAgIGVieCAgICAgICAgICAgICA7IHVudXNlZAorICAgICAgICBwb3AgICAgIGVicAorICAgICAgICByZXQKIAogOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKIDsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KLQlhbGlnbgkxNgorICAgICAgICBhbGlnbiAgIDE2CmRpZmYgLS1naXQgYS9zaW1kL2pkY2xybW14LmFzbSBiL3NpbWQvamRjbHJtbXguYXNtCmluZGV4IDFjMjU1ZTguLmJiMWQyZmEgMTAwNjQ0Ci0tLSBhL3NpbWQvamRjbHJtbXguYXNtCisrKyBiL3NpbWQvamRjbHJtbXguYXNtCkBAIC0yOCwzNzggKzI4LDM3OCBAQAogOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIGludCBudW1fcm93cykKIDsKIAotJWRlZmluZSBvdXRfd2lkdGgoYikJKGIpKzgJCQk7IEpESU1FTlNJT04gb3V0X3dpZHRoCi0lZGVmaW5lIGlucHV0X2J1ZihiKQkoYikrMTIJCTsgSlNBTVBJTUFHRSBpbnB1dF9idWYKLSVkZWZpbmUgaW5wdXRfcm93KGIpCShiKSsxNgkJOyBKRElNRU5TSU9OIGlucHV0X3JvdwotJWRlZmluZSBvdXRwdXRfYnVmKGIpCShiKSsyMAkJOyBKU0FNUEFSUkFZIG91dHB1dF9idWYKLSVkZWZpbmUgbnVtX3Jvd3MoYikJKGIpKzI0CQk7IGludCBudW1fcm93cworJWRlZmluZSBvdXRfd2lkdGgoYikgICAgKGIpKzggICAgICAgICAgIDsgSkRJTUVOU0lPTiBvdXRfd2lkdGgKKyVkZWZpbmUgaW5wdXRfYnVmKGIpICAgIChiKSsxMiAgICAgICAgICA7IEpTQU1QSU1BR0UgaW5wdXRfYnVmCislZGVmaW5lIGlucHV0X3JvdyhiKSAgICAoYikrMTYgICAgICAgICAgOyBKRElNRU5TSU9OIGlucHV0X3JvdworJWRlZmluZSBvdXRwdXRfYnVmKGIpICAgKGIpKzIwICAgICAgICAgIDsgSlNBTVBBUlJBWSBvdXRwdXRfYnVmCislZGVmaW5lIG51bV9yb3dzKGIpICAgICAoYikrMjQgICAgICAgICAgOyBpbnQgbnVtX3Jvd3MKIAotJWRlZmluZSBvcmlnaW5hbF9lYnAJZWJwKzAKLSVkZWZpbmUgd2soaSkJCWVicC0oV0tfTlVNLShpKSkqU0laRU9GX01NV09SRAk7IG1td29yZCB3a1tXS19OVU1dCi0lZGVmaW5lIFdLX05VTQkJMgotJWRlZmluZSBnb3RwdHIJCXdrKDApLVNJWkVPRl9QT0lOVEVSCTsgdm9pZCAqIGdvdHB0cgorJWRlZmluZSBvcmlnaW5hbF9lYnAgICAgZWJwKzAKKyVkZWZpbmUgd2soaSkgICAgICAgICAgIGVicC0oV0tfTlVNLShpKSkqU0laRU9GX01NV09SRCAgOyBtbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0gICAgICAgICAgMgorJWRlZmluZSBnb3RwdHIgICAgICAgICAgd2soMCktU0laRU9GX1BPSU5URVIgICAgOyB2b2lkICogZ290cHRyCiAKLQlhbGlnbgkxNgotCWdsb2JhbAlFWFROKGpzaW1kX3ljY19yZ2JfY29udmVydF9tbXgpCisgICAgICAgIGFsaWduICAgMTYKKyAgICAgICAgZ2xvYmFsICBFWFROKGpzaW1kX3ljY19yZ2JfY29udmVydF9tbXgpCiAKIEVYVE4oanNpbWRfeWNjX3JnYl9jb252ZXJ0X21teCk6Ci0JcHVzaAllYnAKLQltb3YJZWF4LGVzcAkJCQk7IGVheCA9IG9yaWdpbmFsIGVicAotCXN1Ygllc3AsIGJ5dGUgNAotCWFuZAllc3AsIGJ5dGUgKC1TSVpFT0ZfTU1XT1JEKQk7IGFsaWduIHRvIDY0IGJpdHMKLQltb3YJW2VzcF0sZWF4Ci0JbW92CWVicCxlc3AJCQkJOyBlYnAgPSBhbGlnbmVkIGVicAotCWxlYQllc3AsIFt3aygwKV0KLQlwdXNocGljCWVheAkJOyBtYWtlIGEgcm9vbSBmb3IgR09UIGFkZHJlc3MKLQlwdXNoCWVieAotOwlwdXNoCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLTsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi0JcHVzaAllc2kKLQlwdXNoCWVkaQorICAgICAgICBwdXNoICAgIGVicAorICAgICAgICBtb3YgICAgIGVheCxlc3AgICAgICAgICAgICAgICAgICAgICAgICAgOyBlYXggPSBvcmlnaW5hbCBlYnAKKyAgICAgICAgc3ViICAgICBlc3AsIGJ5dGUgNAorICAgICAgICBhbmQgICAgIGVzcCwgYnl0ZSAoLVNJWkVPRl9NTVdPUkQpICAgICAgOyBhbGlnbiB0byA2NCBiaXRzCisgICAgICAgIG1vdiAgICAgW2VzcF0sZWF4CisgICAgICAgIG1vdiAgICAgZWJwLGVzcCAgICAgICAgICAgICAgICAgICAgICAgICA7IGVicCA9IGFsaWduZWQgZWJwCisgICAgICAgIGxlYSAgICAgZXNwLCBbd2soMCldCisgICAgICAgIHB1c2hwaWMgZWF4ICAgICAgICAgICAgIDsgbWFrZSBhIHJvb20gZm9yIEdPVCBhZGRyZXNzCisgICAgICAgIHB1c2ggICAgZWJ4Cis7ICAgICAgIHB1c2ggICAgZWN4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgICAgIHB1c2ggICAgZWR4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgICAgIHB1c2ggICAgZXNpCisgICAgICAgIHB1c2ggICAgZWRpCiAKLQlnZXRfR09UCWVieAkJCTsgZ2V0IEdPVCBhZGRyZXNzCi0JbW92cGljCVBPSU5URVIgW2dvdHB0cl0sIGVieAk7IHNhdmUgR09UIGFkZHJlc3MKKyAgICAgICAgZ2V0X0dPVCBlYnggICAgICAgICAgICAgICAgICAgICA7IGdldCBHT1QgYWRkcmVzcworICAgICAgICBtb3ZwaWMgIFBPSU5URVIgW2dvdHB0cl0sIGVieCAgIDsgc2F2ZSBHT1QgYWRkcmVzcwogCi0JbW92CWVjeCwgSkRJTUVOU0lPTiBbb3V0X3dpZHRoKGVheCldCTsgbnVtX2NvbHMKLQl0ZXN0CWVjeCxlY3gKLQlqegluZWFyIC5yZXR1cm4KKyAgICAgICAgbW92ICAgICBlY3gsIEpESU1FTlNJT04gW291dF93aWR0aChlYXgpXSAgICAgICAgOyBudW1fY29scworICAgICAgICB0ZXN0ICAgIGVjeCxlY3gKKyAgICAgICAganogICAgICBuZWFyIC5yZXR1cm4KIAotCXB1c2gJZWN4CisgICAgICAgIHB1c2ggICAgZWN4CiAKLQltb3YJZWRpLCBKU0FNUElNQUdFIFtpbnB1dF9idWYoZWF4KV0KLQltb3YJZWN4LCBKRElNRU5TSU9OIFtpbnB1dF9yb3coZWF4KV0KLQltb3YJZXNpLCBKU0FNUEFSUkFZIFtlZGkrMCpTSVpFT0ZfSlNBTVBBUlJBWV0KLQltb3YJZWJ4LCBKU0FNUEFSUkFZIFtlZGkrMSpTSVpFT0ZfSlNBTVBBUlJBWV0KLQltb3YJZWR4LCBKU0FNUEFSUkFZIFtlZGkrMipTSVpFT0ZfSlNBTVBBUlJBWV0KLQlsZWEJZXNpLCBbZXNpK2VjeCpTSVpFT0ZfSlNBTVBST1ddCi0JbGVhCWVieCwgW2VieCtlY3gqU0laRU9GX0pTQU1QUk9XXQotCWxlYQllZHgsIFtlZHgrZWN4KlNJWkVPRl9KU0FNUFJPV10KKyAgICAgICAgbW92ICAgICBlZGksIEpTQU1QSU1BR0UgW2lucHV0X2J1ZihlYXgpXQorICAgICAgICBtb3YgICAgIGVjeCwgSkRJTUVOU0lPTiBbaW5wdXRfcm93KGVheCldCisgICAgICAgIG1vdiAgICAgZXNpLCBKU0FNUEFSUkFZIFtlZGkrMCpTSVpFT0ZfSlNBTVBBUlJBWV0KKyAgICAgICAgbW92ICAgICBlYngsIEpTQU1QQVJSQVkgW2VkaSsxKlNJWkVPRl9KU0FNUEFSUkFZXQorICAgICAgICBtb3YgICAgIGVkeCwgSlNBTVBBUlJBWSBbZWRpKzIqU0laRU9GX0pTQU1QQVJSQVldCisgICAgICAgIGxlYSAgICAgZXNpLCBbZXNpK2VjeCpTSVpFT0ZfSlNBTVBST1ddCisgICAgICAgIGxlYSAgICAgZWJ4LCBbZWJ4K2VjeCpTSVpFT0ZfSlNBTVBST1ddCisgICAgICAgIGxlYSAgICAgZWR4LCBbZWR4K2VjeCpTSVpFT0ZfSlNBTVBST1ddCiAKLQlwb3AJZWN4CisgICAgICAgIHBvcCAgICAgZWN4CiAKLQltb3YJZWRpLCBKU0FNUEFSUkFZIFtvdXRwdXRfYnVmKGVheCldCi0JbW92CWVheCwgSU5UIFtudW1fcm93cyhlYXgpXQotCXRlc3QJZWF4LGVheAotCWpsZQluZWFyIC5yZXR1cm4KLQlhbGlnbngJMTYsNworICAgICAgICBtb3YgICAgIGVkaSwgSlNBTVBBUlJBWSBbb3V0cHV0X2J1ZihlYXgpXQorICAgICAgICBtb3YgICAgIGVheCwgSU5UIFtudW1fcm93cyhlYXgpXQorICAgICAgICB0ZXN0ICAgIGVheCxlYXgKKyAgICAgICAgamxlICAgICBuZWFyIC5yZXR1cm4KKyAgICAgICAgYWxpZ254ICAxNiw3CiAucm93bG9vcDoKLQlwdXNoCWVheAotCXB1c2gJZWRpCi0JcHVzaAllZHgKLQlwdXNoCWVieAotCXB1c2gJZXNpCi0JcHVzaAllY3gJCQk7IGNvbAorICAgICAgICBwdXNoICAgIGVheAorICAgICAgICBwdXNoICAgIGVkaQorICAgICAgICBwdXNoICAgIGVkeAorICAgICAgICBwdXNoICAgIGVieAorICAgICAgICBwdXNoICAgIGVzaQorICAgICAgICBwdXNoICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgY29sCiAKLQltb3YJZXNpLCBKU0FNUFJPVyBbZXNpXQk7IGlucHRyMAotCW1vdgllYngsIEpTQU1QUk9XIFtlYnhdCTsgaW5wdHIxCi0JbW92CWVkeCwgSlNBTVBST1cgW2VkeF0JOyBpbnB0cjIKLQltb3YJZWRpLCBKU0FNUFJPVyBbZWRpXQk7IG91dHB0cgotCW1vdnBpYwllYXgsIFBPSU5URVIgW2dvdHB0cl0JOyBsb2FkIEdPVCBhZGRyZXNzIChlYXgpCi0JYWxpZ254CTE2LDcKKyAgICAgICAgbW92ICAgICBlc2ksIEpTQU1QUk9XIFtlc2ldICAgICA7IGlucHRyMAorICAgICAgICBtb3YgICAgIGVieCwgSlNBTVBST1cgW2VieF0gICAgIDsgaW5wdHIxCisgICAgICAgIG1vdiAgICAgZWR4LCBKU0FNUFJPVyBbZWR4XSAgICAgOyBpbnB0cjIKKyAgICAgICAgbW92ICAgICBlZGksIEpTQU1QUk9XIFtlZGldICAgICA7IG91dHB0cgorICAgICAgICBtb3ZwaWMgIGVheCwgUE9JTlRFUiBbZ290cHRyXSAgIDsgbG9hZCBHT1QgYWRkcmVzcyAoZWF4KQorICAgICAgICBhbGlnbnggIDE2LDcKIC5jb2x1bW5sb29wOgogCi0JbW92cQltbTUsIE1NV09SRCBbZWJ4XQk7IG1tNT1DYigwMTIzNDU2NykKLQltb3ZxCW1tMSwgTU1XT1JEIFtlZHhdCTsgbW0xPUNyKDAxMjM0NTY3KQorICAgICAgICBtb3ZxICAgIG1tNSwgTU1XT1JEIFtlYnhdICAgICAgIDsgbW01PUNiKDAxMjM0NTY3KQorICAgICAgICBtb3ZxICAgIG1tMSwgTU1XT1JEIFtlZHhdICAgICAgIDsgbW0xPUNyKDAxMjM0NTY3KQogCi0JcGNtcGVxdwltbTQsbW00Ci0JcGNtcGVxdwltbTcsbW03Ci0JcHNybHcJbW00LEJZVEVfQklUCi0JcHNsbHcJbW03LDcJCQk7IG1tNz17MHhGRjgwIDB4RkY4MCAweEZGODAgMHhGRjgwfQotCW1vdnEJbW0wLG1tNAkJCTsgbW0wPW1tND17MHhGRiAweDAwIDB4RkYgMHgwMCAuLn0KKyAgICAgICAgcGNtcGVxdyBtbTQsbW00CisgICAgICAgIHBjbXBlcXcgbW03LG1tNworICAgICAgICBwc3JsdyAgIG1tNCxCWVRFX0JJVAorICAgICAgICBwc2xsdyAgIG1tNyw3ICAgICAgICAgICAgICAgICAgIDsgbW03PXsweEZGODAgMHhGRjgwIDB4RkY4MCAweEZGODB9CisgICAgICAgIG1vdnEgICAgbW0wLG1tNCAgICAgICAgICAgICAgICAgOyBtbTA9bW00PXsweEZGIDB4MDAgMHhGRiAweDAwIC4ufQogCi0JcGFuZAltbTQsbW01CQkJOyBtbTQ9Q2IoMDI0Nik9Q2JFCi0JcHNybHcJbW01LEJZVEVfQklUCQk7IG1tNT1DYigxMzU3KT1DYk8KLQlwYW5kCW1tMCxtbTEJCQk7IG1tMD1DcigwMjQ2KT1DckUKLQlwc3JsdwltbTEsQllURV9CSVQJCTsgbW0xPUNyKDEzNTcpPUNyTworICAgICAgICBwYW5kICAgIG1tNCxtbTUgICAgICAgICAgICAgICAgIDsgbW00PUNiKDAyNDYpPUNiRQorICAgICAgICBwc3JsdyAgIG1tNSxCWVRFX0JJVCAgICAgICAgICAgIDsgbW01PUNiKDEzNTcpPUNiTworICAgICAgICBwYW5kICAgIG1tMCxtbTEgICAgICAgICAgICAgICAgIDsgbW0wPUNyKDAyNDYpPUNyRQorICAgICAgICBwc3JsdyAgIG1tMSxCWVRFX0JJVCAgICAgICAgICAgIDsgbW0xPUNyKDEzNTcpPUNyTwogCi0JcGFkZHcJbW00LG1tNwotCXBhZGR3CW1tNSxtbTcKLQlwYWRkdwltbTAsbW03Ci0JcGFkZHcJbW0xLG1tNworICAgICAgICBwYWRkdyAgIG1tNCxtbTcKKyAgICAgICAgcGFkZHcgICBtbTUsbW03CisgICAgICAgIHBhZGR3ICAgbW0wLG1tNworICAgICAgICBwYWRkdyAgIG1tMSxtbTcKIAotCTsgKE9yaWdpbmFsKQotCTsgUiA9IFkgICAgICAgICAgICAgICAgKyAxLjQwMjAwICogQ3IKLQk7IEcgPSBZIC0gMC4zNDQxNCAqIENiIC0gMC43MTQxNCAqIENyCi0JOyBCID0gWSArIDEuNzcyMDAgKiBDYgotCTsKLQk7IChUaGlzIGltcGxlbWVudGF0aW9uKQotCTsgUiA9IFkgICAgICAgICAgICAgICAgKyAwLjQwMjAwICogQ3IgKyBDcgotCTsgRyA9IFkgLSAwLjM0NDE0ICogQ2IgKyAwLjI4NTg2ICogQ3IgLSBDcgotCTsgQiA9IFkgLSAwLjIyODAwICogQ2IgKyBDYiArIENiCisgICAgICAgIDsgKE9yaWdpbmFsKQorICAgICAgICA7IFIgPSBZICAgICAgICAgICAgICAgICsgMS40MDIwMCAqIENyCisgICAgICAgIDsgRyA9IFkgLSAwLjM0NDE0ICogQ2IgLSAwLjcxNDE0ICogQ3IKKyAgICAgICAgOyBCID0gWSArIDEuNzcyMDAgKiBDYgorICAgICAgICA7CisgICAgICAgIDsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisgICAgICAgIDsgUiA9IFkgICAgICAgICAgICAgICAgKyAwLjQwMjAwICogQ3IgKyBDcgorICAgICAgICA7IEcgPSBZIC0gMC4zNDQxNCAqIENiICsgMC4yODU4NiAqIENyIC0gQ3IKKyAgICAgICAgOyBCID0gWSAtIDAuMjI4MDAgKiBDYiArIENiICsgQ2IKIAotCW1vdnEJbW0yLG1tNAkJCTsgbW0yPUNiRQotCW1vdnEJbW0zLG1tNQkJCTsgbW0zPUNiTwotCXBhZGR3CW1tNCxtbTQJCQk7IG1tND0yKkNiRQotCXBhZGR3CW1tNSxtbTUJCQk7IG1tNT0yKkNiTwotCW1vdnEJbW02LG1tMAkJCTsgbW02PUNyRQotCW1vdnEJbW03LG1tMQkJCTsgbW03PUNyTwotCXBhZGR3CW1tMCxtbTAJCQk7IG1tMD0yKkNyRQotCXBhZGR3CW1tMSxtbTEJCQk7IG1tMT0yKkNyTworICAgICAgICBtb3ZxICAgIG1tMixtbTQgICAgICAgICAgICAgICAgIDsgbW0yPUNiRQorICAgICAgICBtb3ZxICAgIG1tMyxtbTUgICAgICAgICAgICAgICAgIDsgbW0zPUNiTworICAgICAgICBwYWRkdyAgIG1tNCxtbTQgICAgICAgICAgICAgICAgIDsgbW00PTIqQ2JFCisgICAgICAgIHBhZGR3ICAgbW01LG1tNSAgICAgICAgICAgICAgICAgOyBtbTU9MipDYk8KKyAgICAgICAgbW92cSAgICBtbTYsbW0wICAgICAgICAgICAgICAgICA7IG1tNj1DckUKKyAgICAgICAgbW92cSAgICBtbTcsbW0xICAgICAgICAgICAgICAgICA7IG1tNz1Dck8KKyAgICAgICAgcGFkZHcgICBtbTAsbW0wICAgICAgICAgICAgICAgICA7IG1tMD0yKkNyRQorICAgICAgICBwYWRkdyAgIG1tMSxtbTEgICAgICAgICAgICAgICAgIDsgbW0xPTIqQ3JPCiAKLQlwbXVsaHcJbW00LFtHT1RPRkYoZWF4LFBXX01GMDIyOCldCTsgbW00PSgyKkNiRSAqIC1GSVgoMC4yMjgwMCkpCi0JcG11bGh3CW1tNSxbR09UT0ZGKGVheCxQV19NRjAyMjgpXQk7IG1tNT0oMipDYk8gKiAtRklYKDAuMjI4MDApKQotCXBtdWxodwltbTAsW0dPVE9GRihlYXgsUFdfRjA0MDIpXQk7IG1tMD0oMipDckUgKiBGSVgoMC40MDIwMCkpCi0JcG11bGh3CW1tMSxbR09UT0ZGKGVheCxQV19GMDQwMildCTsgbW0xPSgyKkNyTyAqIEZJWCgwLjQwMjAwKSkKKyAgICAgICAgcG11bGh3ICBtbTQsW0dPVE9GRihlYXgsUFdfTUYwMjI4KV0gICAgIDsgbW00PSgyKkNiRSAqIC1GSVgoMC4yMjgwMCkpCisgICAgICAgIHBtdWxodyAgbW01LFtHT1RPRkYoZWF4LFBXX01GMDIyOCldICAgICA7IG1tNT0oMipDYk8gKiAtRklYKDAuMjI4MDApKQorICAgICAgICBwbXVsaHcgIG1tMCxbR09UT0ZGKGVheCxQV19GMDQwMildICAgICAgOyBtbTA9KDIqQ3JFICogRklYKDAuNDAyMDApKQorICAgICAgICBwbXVsaHcgIG1tMSxbR09UT0ZGKGVheCxQV19GMDQwMildICAgICAgOyBtbTE9KDIqQ3JPICogRklYKDAuNDAyMDApKQogCi0JcGFkZHcJbW00LFtHT1RPRkYoZWF4LFBXX09ORSldCi0JcGFkZHcJbW01LFtHT1RPRkYoZWF4LFBXX09ORSldCi0JcHNyYXcJbW00LDEJCQk7IG1tND0oQ2JFICogLUZJWCgwLjIyODAwKSkKLQlwc3JhdwltbTUsMQkJCTsgbW01PShDYk8gKiAtRklYKDAuMjI4MDApKQotCXBhZGR3CW1tMCxbR09UT0ZGKGVheCxQV19PTkUpXQotCXBhZGR3CW1tMSxbR09UT0ZGKGVheCxQV19PTkUpXQotCXBzcmF3CW1tMCwxCQkJOyBtbTA9KENyRSAqIEZJWCgwLjQwMjAwKSkKLQlwc3JhdwltbTEsMQkJCTsgbW0xPShDck8gKiBGSVgoMC40MDIwMCkpCisgICAgICAgIHBhZGR3ICAgbW00LFtHT1RPRkYoZWF4LFBXX09ORSldCisgICAgICAgIHBhZGR3ICAgbW01LFtHT1RPRkYoZWF4LFBXX09ORSldCisgICAgICAgIHBzcmF3ICAgbW00LDEgICAgICAgICAgICAgICAgICAgOyBtbTQ9KENiRSAqIC1GSVgoMC4yMjgwMCkpCisgICAgICAgIHBzcmF3ICAgbW01LDEgICAgICAgICAgICAgICAgICAgOyBtbTU9KENiTyAqIC1GSVgoMC4yMjgwMCkpCisgICAgICAgIHBhZGR3ICAgbW0wLFtHT1RPRkYoZWF4LFBXX09ORSldCisgICAgICAgIHBhZGR3ICAgbW0xLFtHT1RPRkYoZWF4LFBXX09ORSldCisgICAgICAgIHBzcmF3ICAgbW0wLDEgICAgICAgICAgICAgICAgICAgOyBtbTA9KENyRSAqIEZJWCgwLjQwMjAwKSkKKyAgICAgICAgcHNyYXcgICBtbTEsMSAgICAgICAgICAgICAgICAgICA7IG1tMT0oQ3JPICogRklYKDAuNDAyMDApKQogCi0JcGFkZHcJbW00LG1tMgotCXBhZGR3CW1tNSxtbTMKLQlwYWRkdwltbTQsbW0yCQkJOyBtbTQ9KENiRSAqIEZJWCgxLjc3MjAwKSk9KEItWSlFCi0JcGFkZHcJbW01LG1tMwkJCTsgbW01PShDYk8gKiBGSVgoMS43NzIwMCkpPShCLVkpTwotCXBhZGR3CW1tMCxtbTYJCQk7IG1tMD0oQ3JFICogRklYKDEuNDAyMDApKT0oUi1ZKUUKLQlwYWRkdwltbTEsbW03CQkJOyBtbTE9KENyTyAqIEZJWCgxLjQwMjAwKSk9KFItWSlPCisgICAgICAgIHBhZGR3ICAgbW00LG1tMgorICAgICAgICBwYWRkdyAgIG1tNSxtbTMKKyAgICAgICAgcGFkZHcgICBtbTQsbW0yICAgICAgICAgICAgICAgICA7IG1tND0oQ2JFICogRklYKDEuNzcyMDApKT0oQi1ZKUUKKyAgICAgICAgcGFkZHcgICBtbTUsbW0zICAgICAgICAgICAgICAgICA7IG1tNT0oQ2JPICogRklYKDEuNzcyMDApKT0oQi1ZKU8KKyAgICAgICAgcGFkZHcgICBtbTAsbW02ICAgICAgICAgICAgICAgICA7IG1tMD0oQ3JFICogRklYKDEuNDAyMDApKT0oUi1ZKUUKKyAgICAgICAgcGFkZHcgICBtbTEsbW03ICAgICAgICAgICAgICAgICA7IG1tMT0oQ3JPICogRklYKDEuNDAyMDApKT0oUi1ZKU8KIAotCW1vdnEJTU1XT1JEIFt3aygwKV0sIG1tNAk7IHdrKDApPShCLVkpRQotCW1vdnEJTU1XT1JEIFt3aygxKV0sIG1tNQk7IHdrKDEpPShCLVkpTworICAgICAgICBtb3ZxICAgIE1NV09SRCBbd2soMCldLCBtbTQgICAgIDsgd2soMCk9KEItWSlFCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFt3aygxKV0sIG1tNSAgICAgOyB3aygxKT0oQi1ZKU8KIAotCW1vdnEgICAgICBtbTQsbW0yCi0JbW92cSAgICAgIG1tNSxtbTMKLQlwdW5wY2tsd2QgbW0yLG1tNgotCXB1bnBja2h3ZCBtbTQsbW02Ci0JcG1hZGR3ZCAgIG1tMixbR09UT0ZGKGVheCxQV19NRjAzNDRfRjAyODUpXQotCXBtYWRkd2QgICBtbTQsW0dPVE9GRihlYXgsUFdfTUYwMzQ0X0YwMjg1KV0KLQlwdW5wY2tsd2QgbW0zLG1tNwotCXB1bnBja2h3ZCBtbTUsbW03Ci0JcG1hZGR3ZCAgIG1tMyxbR09UT0ZGKGVheCxQV19NRjAzNDRfRjAyODUpXQotCXBtYWRkd2QgICBtbTUsW0dPVE9GRihlYXgsUFdfTUYwMzQ0X0YwMjg1KV0KKyAgICAgICAgbW92cSAgICAgIG1tNCxtbTIKKyAgICAgICAgbW92cSAgICAgIG1tNSxtbTMKKyAgICAgICAgcHVucGNrbHdkIG1tMixtbTYKKyAgICAgICAgcHVucGNraHdkIG1tNCxtbTYKKyAgICAgICAgcG1hZGR3ZCAgIG1tMixbR09UT0ZGKGVheCxQV19NRjAzNDRfRjAyODUpXQorICAgICAgICBwbWFkZHdkICAgbW00LFtHT1RPRkYoZWF4LFBXX01GMDM0NF9GMDI4NSldCisgICAgICAgIHB1bnBja2x3ZCBtbTMsbW03CisgICAgICAgIHB1bnBja2h3ZCBtbTUsbW03CisgICAgICAgIHBtYWRkd2QgICBtbTMsW0dPVE9GRihlYXgsUFdfTUYwMzQ0X0YwMjg1KV0KKyAgICAgICAgcG1hZGR3ZCAgIG1tNSxbR09UT0ZGKGVheCxQV19NRjAzNDRfRjAyODUpXQogCi0JcGFkZGQgICAgIG1tMixbR09UT0ZGKGVheCxQRF9PTkVIQUxGKV0KLQlwYWRkZCAgICAgbW00LFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXQotCXBzcmFkICAgICBtbTIsU0NBTEVCSVRTCi0JcHNyYWQgICAgIG1tNCxTQ0FMRUJJVFMKLQlwYWRkZCAgICAgbW0zLFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXQotCXBhZGRkICAgICBtbTUsW0dPVE9GRihlYXgsUERfT05FSEFMRildCi0JcHNyYWQgICAgIG1tMyxTQ0FMRUJJVFMKLQlwc3JhZCAgICAgbW01LFNDQUxFQklUUworICAgICAgICBwYWRkZCAgICAgbW0yLFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXQorICAgICAgICBwYWRkZCAgICAgbW00LFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXQorICAgICAgICBwc3JhZCAgICAgbW0yLFNDQUxFQklUUworICAgICAgICBwc3JhZCAgICAgbW00LFNDQUxFQklUUworICAgICAgICBwYWRkZCAgICAgbW0zLFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXQorICAgICAgICBwYWRkZCAgICAgbW01LFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXQorICAgICAgICBwc3JhZCAgICAgbW0zLFNDQUxFQklUUworICAgICAgICBwc3JhZCAgICAgbW01LFNDQUxFQklUUwogCi0JcGFja3NzZHcgIG1tMixtbTQJOyBtbTI9Q2JFKi1GSVgoMC4zNDQpK0NyRSpGSVgoMC4yODUpCi0JcGFja3NzZHcgIG1tMyxtbTUJOyBtbTM9Q2JPKi1GSVgoMC4zNDQpK0NyTypGSVgoMC4yODUpCi0JcHN1YncgICAgIG1tMixtbTYJOyBtbTI9Q2JFKi1GSVgoMC4zNDQpK0NyRSotRklYKDAuNzE0KT0oRy1ZKUUKLQlwc3VidyAgICAgbW0zLG1tNwk7IG1tMz1DYk8qLUZJWCgwLjM0NCkrQ3JPKi1GSVgoMC43MTQpPShHLVkpTworICAgICAgICBwYWNrc3NkdyAgbW0yLG1tNCAgICAgICA7IG1tMj1DYkUqLUZJWCgwLjM0NCkrQ3JFKkZJWCgwLjI4NSkKKyAgICAgICAgcGFja3NzZHcgIG1tMyxtbTUgICAgICAgOyBtbTM9Q2JPKi1GSVgoMC4zNDQpK0NyTypGSVgoMC4yODUpCisgICAgICAgIHBzdWJ3ICAgICBtbTIsbW02ICAgICAgIDsgbW0yPUNiRSotRklYKDAuMzQ0KStDckUqLUZJWCgwLjcxNCk9KEctWSlFCisgICAgICAgIHBzdWJ3ICAgICBtbTMsbW03ICAgICAgIDsgbW0zPUNiTyotRklYKDAuMzQ0KStDck8qLUZJWCgwLjcxNCk9KEctWSlPCiAKLQltb3ZxICAgICAgbW01LCBNTVdPUkQgW2VzaV0JOyBtbTU9WSgwMTIzNDU2NykKKyAgICAgICAgbW92cSAgICAgIG1tNSwgTU1XT1JEIFtlc2ldICAgICA7IG1tNT1ZKDAxMjM0NTY3KQogCi0JcGNtcGVxdyAgIG1tNCxtbTQKLQlwc3JsdyAgICAgbW00LEJZVEVfQklUCQk7IG1tND17MHhGRiAweDAwIDB4RkYgMHgwMCAuLn0KLQlwYW5kICAgICAgbW00LG1tNQkJOyBtbTQ9WSgwMjQ2KT1ZRQotCXBzcmx3ICAgICBtbTUsQllURV9CSVQJCTsgbW01PVkoMTM1Nyk9WU8KKyAgICAgICAgcGNtcGVxdyAgIG1tNCxtbTQKKyAgICAgICAgcHNybHcgICAgIG1tNCxCWVRFX0JJVCAgICAgICAgICA7IG1tND17MHhGRiAweDAwIDB4RkYgMHgwMCAuLn0KKyAgICAgICAgcGFuZCAgICAgIG1tNCxtbTUgICAgICAgICAgICAgICA7IG1tND1ZKDAyNDYpPVlFCisgICAgICAgIHBzcmx3ICAgICBtbTUsQllURV9CSVQgICAgICAgICAgOyBtbTU9WSgxMzU3KT1ZTwogCi0JcGFkZHcgICAgIG1tMCxtbTQJCTsgbW0wPSgoUi1ZKUUrWUUpPVJFPShSMCBSMiBSNCBSNikKLQlwYWRkdyAgICAgbW0xLG1tNQkJOyBtbTE9KChSLVkpTytZTyk9Uk89KFIxIFIzIFI1IFI3KQotCXBhY2t1c3diICBtbTAsbW0wCQk7IG1tMD0oUjAgUjIgUjQgUjYgKiogKiogKiogKiopCi0JcGFja3Vzd2IgIG1tMSxtbTEJCTsgbW0xPShSMSBSMyBSNSBSNyAqKiAqKiAqKiAqKikKKyAgICAgICAgcGFkZHcgICAgIG1tMCxtbTQgICAgICAgICAgICAgICA7IG1tMD0oKFItWSlFK1lFKT1SRT0oUjAgUjIgUjQgUjYpCisgICAgICAgIHBhZGR3ICAgICBtbTEsbW01ICAgICAgICAgICAgICAgOyBtbTE9KChSLVkpTytZTyk9Uk89KFIxIFIzIFI1IFI3KQorICAgICAgICBwYWNrdXN3YiAgbW0wLG1tMCAgICAgICAgICAgICAgIDsgbW0wPShSMCBSMiBSNCBSNiAqKiAqKiAqKiAqKikKKyAgICAgICAgcGFja3Vzd2IgIG1tMSxtbTEgICAgICAgICAgICAgICA7IG1tMT0oUjEgUjMgUjUgUjcgKiogKiogKiogKiopCiAKLQlwYWRkdyAgICAgbW0yLG1tNAkJOyBtbTI9KChHLVkpRStZRSk9R0U9KEcwIEcyIEc0IEc2KQotCXBhZGR3ICAgICBtbTMsbW01CQk7IG1tMz0oKEctWSlPK1lPKT1HTz0oRzEgRzMgRzUgRzcpCi0JcGFja3Vzd2IgIG1tMixtbTIJCTsgbW0yPShHMCBHMiBHNCBHNiAqKiAqKiAqKiAqKikKLQlwYWNrdXN3YiAgbW0zLG1tMwkJOyBtbTM9KEcxIEczIEc1IEc3ICoqICoqICoqICoqKQorICAgICAgICBwYWRkdyAgICAgbW0yLG1tNCAgICAgICAgICAgICAgIDsgbW0yPSgoRy1ZKUUrWUUpPUdFPShHMCBHMiBHNCBHNikKKyAgICAgICAgcGFkZHcgICAgIG1tMyxtbTUgICAgICAgICAgICAgICA7IG1tMz0oKEctWSlPK1lPKT1HTz0oRzEgRzMgRzUgRzcpCisgICAgICAgIHBhY2t1c3diICBtbTIsbW0yICAgICAgICAgICAgICAgOyBtbTI9KEcwIEcyIEc0IEc2ICoqICoqICoqICoqKQorICAgICAgICBwYWNrdXN3YiAgbW0zLG1tMyAgICAgICAgICAgICAgIDsgbW0zPShHMSBHMyBHNSBHNyAqKiAqKiAqKiAqKikKIAotCXBhZGR3ICAgICBtbTQsIE1NV09SRCBbd2soMCldCTsgbW00PShZRSsoQi1ZKUUpPUJFPShCMCBCMiBCNCBCNikKLQlwYWRkdyAgICAgbW01LCBNTVdPUkQgW3drKDEpXQk7IG1tNT0oWU8rKEItWSlPKT1CTz0oQjEgQjMgQjUgQjcpCi0JcGFja3Vzd2IgIG1tNCxtbTQJCTsgbW00PShCMCBCMiBCNCBCNiAqKiAqKiAqKiAqKikKLQlwYWNrdXN3YiAgbW01LG1tNQkJOyBtbTU9KEIxIEIzIEI1IEI3ICoqICoqICoqICoqKQorICAgICAgICBwYWRkdyAgICAgbW00LCBNTVdPUkQgW3drKDApXSAgIDsgbW00PShZRSsoQi1ZKUUpPUJFPShCMCBCMiBCNCBCNikKKyAgICAgICAgcGFkZHcgICAgIG1tNSwgTU1XT1JEIFt3aygxKV0gICA7IG1tNT0oWU8rKEItWSlPKT1CTz0oQjEgQjMgQjUgQjcpCisgICAgICAgIHBhY2t1c3diICBtbTQsbW00ICAgICAgICAgICAgICAgOyBtbTQ9KEIwIEIyIEI0IEI2ICoqICoqICoqICoqKQorICAgICAgICBwYWNrdXN3YiAgbW01LG1tNSAgICAgICAgICAgICAgIDsgbW01PShCMSBCMyBCNSBCNyAqKiAqKiAqKiAqKikKIAogJWlmIFJHQl9QSVhFTFNJWkUgPT0gMyA7IC0tLS0tLS0tLS0tLS0tLQogCi0JOyBtbUE9KDAwIDAyIDA0IDA2ICoqICoqICoqICoqKSwgbW1CPSgwMSAwMyAwNSAwNyAqKiAqKiAqKiAqKikKLQk7IG1tQz0oMTAgMTIgMTQgMTYgKiogKiogKiogKiopLCBtbUQ9KDExIDEzIDE1IDE3ICoqICoqICoqICoqKQotCTsgbW1FPSgyMCAyMiAyNCAyNiAqKiAqKiAqKiAqKiksIG1tRj0oMjEgMjMgMjUgMjcgKiogKiogKiogKiopCi0JOyBtbUc9KCoqICoqICoqICoqICoqICoqICoqICoqKSwgbW1IPSgqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKikKKyAgICAgICAgOyBtbUE9KDAwIDAyIDA0IDA2ICoqICoqICoqICoqKSwgbW1CPSgwMSAwMyAwNSAwNyAqKiAqKiAqKiAqKikKKyAgICAgICAgOyBtbUM9KDEwIDEyIDE0IDE2ICoqICoqICoqICoqKSwgbW1EPSgxMSAxMyAxNSAxNyAqKiAqKiAqKiAqKikKKyAgICAgICAgOyBtbUU9KDIwIDIyIDI0IDI2ICoqICoqICoqICoqKSwgbW1GPSgyMSAyMyAyNSAyNyAqKiAqKiAqKiAqKikKKyAgICAgICAgOyBtbUc9KCoqICoqICoqICoqICoqICoqICoqICoqKSwgbW1IPSgqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKikKIAotCXB1bnBja2xidyBtbUEsbW1DCQk7IG1tQT0oMDAgMTAgMDIgMTIgMDQgMTQgMDYgMTYpCi0JcHVucGNrbGJ3IG1tRSxtbUIJCTsgbW1FPSgyMCAwMSAyMiAwMyAyNCAwNSAyNiAwNykKLQlwdW5wY2tsYncgbW1ELG1tRgkJOyBtbUQ9KDExIDIxIDEzIDIzIDE1IDI1IDE3IDI3KQorICAgICAgICBwdW5wY2tsYncgbW1BLG1tQyAgICAgICAgICAgICAgIDsgbW1BPSgwMCAxMCAwMiAxMiAwNCAxNCAwNiAxNikKKyAgICAgICAgcHVucGNrbGJ3IG1tRSxtbUIgICAgICAgICAgICAgICA7IG1tRT0oMjAgMDEgMjIgMDMgMjQgMDUgMjYgMDcpCisgICAgICAgIHB1bnBja2xidyBtbUQsbW1GICAgICAgICAgICAgICAgOyBtbUQ9KDExIDIxIDEzIDIzIDE1IDI1IDE3IDI3KQogCi0JbW92cSAgICAgIG1tRyxtbUEKLQltb3ZxICAgICAgbW1ILG1tQQotCXB1bnBja2x3ZCBtbUEsbW1FCQk7IG1tQT0oMDAgMTAgMjAgMDEgMDIgMTIgMjIgMDMpCi0JcHVucGNraHdkIG1tRyxtbUUJCTsgbW1HPSgwNCAxNCAyNCAwNSAwNiAxNiAyNiAwNykKKyAgICAgICAgbW92cSAgICAgIG1tRyxtbUEKKyAgICAgICAgbW92cSAgICAgIG1tSCxtbUEKKyAgICAgICAgcHVucGNrbHdkIG1tQSxtbUUgICAgICAgICAgICAgICA7IG1tQT0oMDAgMTAgMjAgMDEgMDIgMTIgMjIgMDMpCisgICAgICAgIHB1bnBja2h3ZCBtbUcsbW1FICAgICAgICAgICAgICAgOyBtbUc9KDA0IDE0IDI0IDA1IDA2IDE2IDI2IDA3KQogCi0JcHNybHEgICAgIG1tSCwyKkJZVEVfQklUCTsgbW1IPSgwMiAxMiAwNCAxNCAwNiAxNiAtLSAtLSkKLQlwc3JscSAgICAgbW1FLDIqQllURV9CSVQJOyBtbUU9KDIyIDAzIDI0IDA1IDI2IDA3IC0tIC0tKQorICAgICAgICBwc3JscSAgICAgbW1ILDIqQllURV9CSVQgICAgICAgIDsgbW1IPSgwMiAxMiAwNCAxNCAwNiAxNiAtLSAtLSkKKyAgICAgICAgcHNybHEgICAgIG1tRSwyKkJZVEVfQklUICAgICAgICA7IG1tRT0oMjIgMDMgMjQgMDUgMjYgMDcgLS0gLS0pCiAKLQltb3ZxICAgICAgbW1DLG1tRAotCW1vdnEgICAgICBtbUIsbW1ECi0JcHVucGNrbHdkIG1tRCxtbUgJCTsgbW1EPSgxMSAyMSAwMiAxMiAxMyAyMyAwNCAxNCkKLQlwdW5wY2tod2QgbW1DLG1tSAkJOyBtbUM9KDE1IDI1IDA2IDE2IDE3IDI3IC0tIC0tKQorICAgICAgICBtb3ZxICAgICAgbW1DLG1tRAorICAgICAgICBtb3ZxICAgICAgbW1CLG1tRAorICAgICAgICBwdW5wY2tsd2QgbW1ELG1tSCAgICAgICAgICAgICAgIDsgbW1EPSgxMSAyMSAwMiAxMiAxMyAyMyAwNCAxNCkKKyAgICAgICAgcHVucGNraHdkIG1tQyxtbUggICAgICAgICAgICAgICA7IG1tQz0oMTUgMjUgMDYgMTYgMTcgMjcgLS0gLS0pCiAKLQlwc3JscSAgICAgbW1CLDIqQllURV9CSVQJOyBtbUI9KDEzIDIzIDE1IDI1IDE3IDI3IC0tIC0tKQorICAgICAgICBwc3JscSAgICAgbW1CLDIqQllURV9CSVQgICAgICAgIDsgbW1CPSgxMyAyMyAxNSAyNSAxNyAyNyAtLSAtLSkKIAotCW1vdnEgICAgICBtbUYsbW1FCi0JcHVucGNrbHdkIG1tRSxtbUIJCTsgbW1FPSgyMiAwMyAxMyAyMyAyNCAwNSAxNSAyNSkKLQlwdW5wY2tod2QgbW1GLG1tQgkJOyBtbUY9KDI2IDA3IDE3IDI3IC0tIC0tIC0tIC0tKQorICAgICAgICBtb3ZxICAgICAgbW1GLG1tRQorICAgICAgICBwdW5wY2tsd2QgbW1FLG1tQiAgICAgICAgICAgICAgIDsgbW1FPSgyMiAwMyAxMyAyMyAyNCAwNSAxNSAyNSkKKyAgICAgICAgcHVucGNraHdkIG1tRixtbUIgICAgICAgICAgICAgICA7IG1tRj0oMjYgMDcgMTcgMjcgLS0gLS0gLS0gLS0pCiAKLQlwdW5wY2tsZHEgbW1BLG1tRAkJOyBtbUE9KDAwIDEwIDIwIDAxIDExIDIxIDAyIDEyKQotCXB1bnBja2xkcSBtbUUsbW1HCQk7IG1tRT0oMjIgMDMgMTMgMjMgMDQgMTQgMjQgMDUpCi0JcHVucGNrbGRxIG1tQyxtbUYJCTsgbW1DPSgxNSAyNSAwNiAxNiAyNiAwNyAxNyAyNykKKyAgICAgICAgcHVucGNrbGRxIG1tQSxtbUQgICAgICAgICAgICAgICA7IG1tQT0oMDAgMTAgMjAgMDEgMTEgMjEgMDIgMTIpCisgICAgICAgIHB1bnBja2xkcSBtbUUsbW1HICAgICAgICAgICAgICAgOyBtbUU9KDIyIDAzIDEzIDIzIDA0IDE0IDI0IDA1KQorICAgICAgICBwdW5wY2tsZHEgbW1DLG1tRiAgICAgICAgICAgICAgIDsgbW1DPSgxNSAyNSAwNiAxNiAyNiAwNyAxNyAyNykKIAotCWNtcAllY3gsIGJ5dGUgU0laRU9GX01NV09SRAotCWpiCXNob3J0IC5jb2x1bW5fc3QxNgorICAgICAgICBjbXAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECisgICAgICAgIGpiICAgICAgc2hvcnQgLmNvbHVtbl9zdDE2CiAKLQltb3ZxCU1NV09SRCBbZWRpKzAqU0laRU9GX01NV09SRF0sIG1tQQotCW1vdnEJTU1XT1JEIFtlZGkrMSpTSVpFT0ZfTU1XT1JEXSwgbW1FCi0JbW92cQlNTVdPUkQgW2VkaSsyKlNJWkVPRl9NTVdPUkRdLCBtbUMKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW2VkaSswKlNJWkVPRl9NTVdPUkRdLCBtbUEKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW2VkaSsxKlNJWkVPRl9NTVdPUkRdLCBtbUUKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW2VkaSsyKlNJWkVPRl9NTVdPUkRdLCBtbUMKIAotCXN1YgllY3gsIGJ5dGUgU0laRU9GX01NV09SRAotCWp6CXNob3J0IC5uZXh0cm93CisgICAgICAgIHN1YiAgICAgZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQKKyAgICAgICAganogICAgICBzaG9ydCAubmV4dHJvdwogCi0JYWRkCWVzaSwgYnl0ZSBTSVpFT0ZfTU1XT1JECQkJOyBpbnB0cjAKLQlhZGQJZWJ4LCBieXRlIFNJWkVPRl9NTVdPUkQJCQk7IGlucHRyMQotCWFkZAllZHgsIGJ5dGUgU0laRU9GX01NV09SRAkJCTsgaW5wdHIyCi0JYWRkCWVkaSwgYnl0ZSBSR0JfUElYRUxTSVpFKlNJWkVPRl9NTVdPUkQJOyBvdXRwdHIKLQlqbXAJbmVhciAuY29sdW1ubG9vcAotCWFsaWdueAkxNiw3CisgICAgICAgIGFkZCAgICAgZXNpLCBieXRlIFNJWkVPRl9NTVdPUkQgICAgICAgICAgICAgICAgIDsgaW5wdHIwCisgICAgICAgIGFkZCAgICAgZWJ4LCBieXRlIFNJWkVPRl9NTVdPUkQgICAgICAgICAgICAgICAgIDsgaW5wdHIxCisgICAgICAgIGFkZCAgICAgZWR4LCBieXRlIFNJWkVPRl9NTVdPUkQgICAgICAgICAgICAgICAgIDsgaW5wdHIyCisgICAgICAgIGFkZCAgICAgZWRpLCBieXRlIFJHQl9QSVhFTFNJWkUqU0laRU9GX01NV09SRCAgIDsgb3V0cHRyCisgICAgICAgIGptcCAgICAgbmVhciAuY29sdW1ubG9vcAorICAgICAgICBhbGlnbnggIDE2LDcKIAogLmNvbHVtbl9zdDE2OgotCWxlYQllY3gsIFtlY3grZWN4KjJdCTsgaW11bCBlY3gsIFJHQl9QSVhFTFNJWkUKLQljbXAJZWN4LCBieXRlIDIqU0laRU9GX01NV09SRAotCWpiCXNob3J0IC5jb2x1bW5fc3Q4Ci0JbW92cQlNTVdPUkQgW2VkaSswKlNJWkVPRl9NTVdPUkRdLCBtbUEKLQltb3ZxCU1NV09SRCBbZWRpKzEqU0laRU9GX01NV09SRF0sIG1tRQotCW1vdnEJbW1BLG1tQwotCXN1YgllY3gsIGJ5dGUgMipTSVpFT0ZfTU1XT1JECi0JYWRkCWVkaSwgYnl0ZSAyKlNJWkVPRl9NTVdPUkQKLQlqbXAJc2hvcnQgLmNvbHVtbl9zdDQKKyAgICAgICAgbGVhICAgICBlY3gsIFtlY3grZWN4KjJdICAgICAgICA7IGltdWwgZWN4LCBSR0JfUElYRUxTSVpFCisgICAgICAgIGNtcCAgICAgZWN4LCBieXRlIDIqU0laRU9GX01NV09SRAorICAgICAgICBqYiAgICAgIHNob3J0IC5jb2x1bW5fc3Q4CisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtlZGkrMCpTSVpFT0ZfTU1XT1JEXSwgbW1BCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtlZGkrMSpTSVpFT0ZfTU1XT1JEXSwgbW1FCisgICAgICAgIG1vdnEgICAgbW1BLG1tQworICAgICAgICBzdWIgICAgIGVjeCwgYnl0ZSAyKlNJWkVPRl9NTVdPUkQKKyAgICAgICAgYWRkICAgICBlZGksIGJ5dGUgMipTSVpFT0ZfTU1XT1JECisgICAgICAgIGptcCAgICAgc2hvcnQgLmNvbHVtbl9zdDQKIC5jb2x1bW5fc3Q4OgotCWNtcAllY3gsIGJ5dGUgU0laRU9GX01NV09SRAotCWpiCXNob3J0IC5jb2x1bW5fc3Q0Ci0JbW92cQlNTVdPUkQgW2VkaSswKlNJWkVPRl9NTVdPUkRdLCBtbUEKLQltb3ZxCW1tQSxtbUUKLQlzdWIJZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQKLQlhZGQJZWRpLCBieXRlIFNJWkVPRl9NTVdPUkQKKyAgICAgICAgY21wICAgICBlY3gsIGJ5dGUgU0laRU9GX01NV09SRAorICAgICAgICBqYiAgICAgIHNob3J0IC5jb2x1bW5fc3Q0CisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtlZGkrMCpTSVpFT0ZfTU1XT1JEXSwgbW1BCisgICAgICAgIG1vdnEgICAgbW1BLG1tRQorICAgICAgICBzdWIgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECisgICAgICAgIGFkZCAgICAgZWRpLCBieXRlIFNJWkVPRl9NTVdPUkQKIC5jb2x1bW5fc3Q0OgotCW1vdmQJZWF4LG1tQQotCWNtcAllY3gsIGJ5dGUgU0laRU9GX0RXT1JECi0JamIJc2hvcnQgLmNvbHVtbl9zdDIKLQltb3YJRFdPUkQgW2VkaSswKlNJWkVPRl9EV09SRF0sIGVheAotCXBzcmxxCW1tQSxEV09SRF9CSVQKLQltb3ZkCWVheCxtbUEKLQlzdWIJZWN4LCBieXRlIFNJWkVPRl9EV09SRAotCWFkZAllZGksIGJ5dGUgU0laRU9GX0RXT1JECisgICAgICAgIG1vdmQgICAgZWF4LG1tQQorICAgICAgICBjbXAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfRFdPUkQKKyAgICAgICAgamIgICAgICBzaG9ydCAuY29sdW1uX3N0MgorICAgICAgICBtb3YgICAgIERXT1JEIFtlZGkrMCpTSVpFT0ZfRFdPUkRdLCBlYXgKKyAgICAgICAgcHNybHEgICBtbUEsRFdPUkRfQklUCisgICAgICAgIG1vdmQgICAgZWF4LG1tQQorICAgICAgICBzdWIgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfRFdPUkQKKyAgICAgICAgYWRkICAgICBlZGksIGJ5dGUgU0laRU9GX0RXT1JECiAuY29sdW1uX3N0MjoKLQljbXAJZWN4LCBieXRlIFNJWkVPRl9XT1JECi0JamIJc2hvcnQgLmNvbHVtbl9zdDEKLQltb3YJV09SRCBbZWRpKzAqU0laRU9GX1dPUkRdLCBheAotCXNocgllYXgsV09SRF9CSVQKLQlzdWIJZWN4LCBieXRlIFNJWkVPRl9XT1JECi0JYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfV09SRAorICAgICAgICBjbXAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfV09SRAorICAgICAgICBqYiAgICAgIHNob3J0IC5jb2x1bW5fc3QxCisgICAgICAgIG1vdiAgICAgV09SRCBbZWRpKzAqU0laRU9GX1dPUkRdLCBheAorICAgICAgICBzaHIgICAgIGVheCxXT1JEX0JJVAorICAgICAgICBzdWIgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfV09SRAorICAgICAgICBhZGQgICAgIGVkaSwgYnl0ZSBTSVpFT0ZfV09SRAogLmNvbHVtbl9zdDE6Ci0JY21wCWVjeCwgYnl0ZSBTSVpFT0ZfQllURQotCWpiCXNob3J0IC5uZXh0cm93Ci0JbW92CUJZVEUgW2VkaSswKlNJWkVPRl9CWVRFXSwgYWwKKyAgICAgICAgY21wICAgICBlY3gsIGJ5dGUgU0laRU9GX0JZVEUKKyAgICAgICAgamIgICAgICBzaG9ydCAubmV4dHJvdworICAgICAgICBtb3YgICAgIEJZVEUgW2VkaSswKlNJWkVPRl9CWVRFXSwgYWwKIAogJWVsc2UgOyBSR0JfUElYRUxTSVpFID09IDQgOyAtLS0tLS0tLS0tLQogCiAlaWZkZWYgUkdCWF9GSUxMRVJfMFhGRgotCXBjbXBlcWIgICBtbTYsbW02CQk7IG1tNj0oWDAgWDIgWDQgWDYgKiogKiogKiogKiopCi0JcGNtcGVxYiAgIG1tNyxtbTcJCTsgbW03PShYMSBYMyBYNSBYNyAqKiAqKiAqKiAqKikKKyAgICAgICAgcGNtcGVxYiAgIG1tNixtbTYgICAgICAgICAgICAgICA7IG1tNj0oWDAgWDIgWDQgWDYgKiogKiogKiogKiopCisgICAgICAgIHBjbXBlcWIgICBtbTcsbW03ICAgICAgICAgICAgICAgOyBtbTc9KFgxIFgzIFg1IFg3ICoqICoqICoqICoqKQogJWVsc2UKLQlweG9yICAgICAgbW02LG1tNgkJOyBtbTY9KFgwIFgyIFg0IFg2ICoqICoqICoqICoqKQotCXB4b3IgICAgICBtbTcsbW03CQk7IG1tNz0oWDEgWDMgWDUgWDcgKiogKiogKiogKiopCisgICAgICAgIHB4b3IgICAgICBtbTYsbW02ICAgICAgICAgICAgICAgOyBtbTY9KFgwIFgyIFg0IFg2ICoqICoqICoqICoqKQorICAgICAgICBweG9yICAgICAgbW03LG1tNyAgICAgICAgICAgICAgIDsgbW03PShYMSBYMyBYNSBYNyAqKiAqKiAqKiAqKikKICVlbmRpZgotCTsgbW1BPSgwMCAwMiAwNCAwNiAqKiAqKiAqKiAqKiksIG1tQj0oMDEgMDMgMDUgMDcgKiogKiogKiogKiopCi0JOyBtbUM9KDEwIDEyIDE0IDE2ICoqICoqICoqICoqKSwgbW1EPSgxMSAxMyAxNSAxNyAqKiAqKiAqKiAqKikKLQk7IG1tRT0oMjAgMjIgMjQgMjYgKiogKiogKiogKiopLCBtbUY9KDIxIDIzIDI1IDI3ICoqICoqICoqICoqKQotCTsgbW1HPSgzMCAzMiAzNCAzNiAqKiAqKiAqKiAqKiksIG1tSD0oMzEgMzMgMzUgMzcgKiogKiogKiogKiopCisgICAgICAgIDsgbW1BPSgwMCAwMiAwNCAwNiAqKiAqKiAqKiAqKiksIG1tQj0oMDEgMDMgMDUgMDcgKiogKiogKiogKiopCisgICAgICAgIDsgbW1DPSgxMCAxMiAxNCAxNiAqKiAqKiAqKiAqKiksIG1tRD0oMTEgMTMgMTUgMTcgKiogKiogKiogKiopCisgICAgICAgIDsgbW1FPSgyMCAyMiAyNCAyNiAqKiAqKiAqKiAqKiksIG1tRj0oMjEgMjMgMjUgMjcgKiogKiogKiogKiopCisgICAgICAgIDsgbW1HPSgzMCAzMiAzNCAzNiAqKiAqKiAqKiAqKiksIG1tSD0oMzEgMzMgMzUgMzcgKiogKiogKiogKiopCiAKLQlwdW5wY2tsYncgbW1BLG1tQwkJOyBtbUE9KDAwIDEwIDAyIDEyIDA0IDE0IDA2IDE2KQotCXB1bnBja2xidyBtbUUsbW1HCQk7IG1tRT0oMjAgMzAgMjIgMzIgMjQgMzQgMjYgMzYpCi0JcHVucGNrbGJ3IG1tQixtbUQJCTsgbW1CPSgwMSAxMSAwMyAxMyAwNSAxNSAwNyAxNykKLQlwdW5wY2tsYncgbW1GLG1tSAkJOyBtbUY9KDIxIDMxIDIzIDMzIDI1IDM1IDI3IDM3KQorICAgICAgICBwdW5wY2tsYncgbW1BLG1tQyAgICAgICAgICAgICAgIDsgbW1BPSgwMCAxMCAwMiAxMiAwNCAxNCAwNiAxNikKKyAgICAgICAgcHVucGNrbGJ3IG1tRSxtbUcgICAgICAgICAgICAgICA7IG1tRT0oMjAgMzAgMjIgMzIgMjQgMzQgMjYgMzYpCisgICAgICAgIHB1bnBja2xidyBtbUIsbW1EICAgICAgICAgICAgICAgOyBtbUI9KDAxIDExIDAzIDEzIDA1IDE1IDA3IDE3KQorICAgICAgICBwdW5wY2tsYncgbW1GLG1tSCAgICAgICAgICAgICAgIDsgbW1GPSgyMSAzMSAyMyAzMyAyNSAzNSAyNyAzNykKIAotCW1vdnEgICAgICBtbUMsbW1BCi0JcHVucGNrbHdkIG1tQSxtbUUJCTsgbW1BPSgwMCAxMCAyMCAzMCAwMiAxMiAyMiAzMikKLQlwdW5wY2tod2QgbW1DLG1tRQkJOyBtbUM9KDA0IDE0IDI0IDM0IDA2IDE2IDI2IDM2KQotCW1vdnEgICAgICBtbUcsbW1CCi0JcHVucGNrbHdkIG1tQixtbUYJCTsgbW1CPSgwMSAxMSAyMSAzMSAwMyAxMyAyMyAzMykKLQlwdW5wY2tod2QgbW1HLG1tRgkJOyBtbUc9KDA1IDE1IDI1IDM1IDA3IDE3IDI3IDM3KQorICAgICAgICBtb3ZxICAgICAgbW1DLG1tQQorICAgICAgICBwdW5wY2tsd2QgbW1BLG1tRSAgICAgICAgICAgICAgIDsgbW1BPSgwMCAxMCAyMCAzMCAwMiAxMiAyMiAzMikKKyAgICAgICAgcHVucGNraHdkIG1tQyxtbUUgICAgICAgICAgICAgICA7IG1tQz0oMDQgMTQgMjQgMzQgMDYgMTYgMjYgMzYpCisgICAgICAgIG1vdnEgICAgICBtbUcsbW1CCisgICAgICAgIHB1bnBja2x3ZCBtbUIsbW1GICAgICAgICAgICAgICAgOyBtbUI9KDAxIDExIDIxIDMxIDAzIDEzIDIzIDMzKQorICAgICAgICBwdW5wY2tod2QgbW1HLG1tRiAgICAgICAgICAgICAgIDsgbW1HPSgwNSAxNSAyNSAzNSAwNyAxNyAyNyAzNykKIAotCW1vdnEgICAgICBtbUQsbW1BCi0JcHVucGNrbGRxIG1tQSxtbUIJCTsgbW1BPSgwMCAxMCAyMCAzMCAwMSAxMSAyMSAzMSkKLQlwdW5wY2toZHEgbW1ELG1tQgkJOyBtbUQ9KDAyIDEyIDIyIDMyIDAzIDEzIDIzIDMzKQotCW1vdnEgICAgICBtbUgsbW1DCi0JcHVucGNrbGRxIG1tQyxtbUcJCTsgbW1DPSgwNCAxNCAyNCAzNCAwNSAxNSAyNSAzNSkKLQlwdW5wY2toZHEgbW1ILG1tRwkJOyBtbUg9KDA2IDE2IDI2IDM2IDA3IDE3IDI3IDM3KQorICAgICAgICBtb3ZxICAgICAgbW1ELG1tQQorICAgICAgICBwdW5wY2tsZHEgbW1BLG1tQiAgICAgICAgICAgICAgIDsgbW1BPSgwMCAxMCAyMCAzMCAwMSAxMSAyMSAzMSkKKyAgICAgICAgcHVucGNraGRxIG1tRCxtbUIgICAgICAgICAgICAgICA7IG1tRD0oMDIgMTIgMjIgMzIgMDMgMTMgMjMgMzMpCisgICAgICAgIG1vdnEgICAgICBtbUgsbW1DCisgICAgICAgIHB1bnBja2xkcSBtbUMsbW1HICAgICAgICAgICAgICAgOyBtbUM9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1KQorICAgICAgICBwdW5wY2toZHEgbW1ILG1tRyAgICAgICAgICAgICAgIDsgbW1IPSgwNiAxNiAyNiAzNiAwNyAxNyAyNyAzNykKIAotCWNtcAllY3gsIGJ5dGUgU0laRU9GX01NV09SRAotCWpiCXNob3J0IC5jb2x1bW5fc3QxNgorICAgICAgICBjbXAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECisgICAgICAgIGpiICAgICAgc2hvcnQgLmNvbHVtbl9zdDE2CiAKLQltb3ZxCU1NV09SRCBbZWRpKzAqU0laRU9GX01NV09SRF0sIG1tQQotCW1vdnEJTU1XT1JEIFtlZGkrMSpTSVpFT0ZfTU1XT1JEXSwgbW1ECi0JbW92cQlNTVdPUkQgW2VkaSsyKlNJWkVPRl9NTVdPUkRdLCBtbUMKLQltb3ZxCU1NV09SRCBbZWRpKzMqU0laRU9GX01NV09SRF0sIG1tSAorICAgICAgICBtb3ZxICAgIE1NV09SRCBbZWRpKzAqU0laRU9GX01NV09SRF0sIG1tQQorICAgICAgICBtb3ZxICAgIE1NV09SRCBbZWRpKzEqU0laRU9GX01NV09SRF0sIG1tRAorICAgICAgICBtb3ZxICAgIE1NV09SRCBbZWRpKzIqU0laRU9GX01NV09SRF0sIG1tQworICAgICAgICBtb3ZxICAgIE1NV09SRCBbZWRpKzMqU0laRU9GX01NV09SRF0sIG1tSAogCi0Jc3ViCWVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECi0JanoJc2hvcnQgLm5leHRyb3cKKyAgICAgICAgc3ViICAgICBlY3gsIGJ5dGUgU0laRU9GX01NV09SRAorICAgICAgICBqeiAgICAgIHNob3J0IC5uZXh0cm93CiAKLQlhZGQJZXNpLCBieXRlIFNJWkVPRl9NTVdPUkQJCQk7IGlucHRyMAotCWFkZAllYngsIGJ5dGUgU0laRU9GX01NV09SRAkJCTsgaW5wdHIxCi0JYWRkCWVkeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECQkJOyBpbnB0cjIKLQlhZGQJZWRpLCBieXRlIFJHQl9QSVhFTFNJWkUqU0laRU9GX01NV09SRAk7IG91dHB0cgotCWptcAluZWFyIC5jb2x1bW5sb29wCi0JYWxpZ254CTE2LDcKKyAgICAgICAgYWRkICAgICBlc2ksIGJ5dGUgU0laRU9GX01NV09SRCAgICAgICAgICAgICAgICAgOyBpbnB0cjAKKyAgICAgICAgYWRkICAgICBlYngsIGJ5dGUgU0laRU9GX01NV09SRCAgICAgICAgICAgICAgICAgOyBpbnB0cjEKKyAgICAgICAgYWRkICAgICBlZHgsIGJ5dGUgU0laRU9GX01NV09SRCAgICAgICAgICAgICAgICAgOyBpbnB0cjIKKyAgICAgICAgYWRkICAgICBlZGksIGJ5dGUgUkdCX1BJWEVMU0laRSpTSVpFT0ZfTU1XT1JEICAgOyBvdXRwdHIKKyAgICAgICAgam1wICAgICBuZWFyIC5jb2x1bW5sb29wCisgICAgICAgIGFsaWdueCAgMTYsNwogCiAuY29sdW1uX3N0MTY6Ci0JY21wCWVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JELzIKLQlqYglzaG9ydCAuY29sdW1uX3N0OAotCW1vdnEJTU1XT1JEIFtlZGkrMCpTSVpFT0ZfTU1XT1JEXSwgbW1BCi0JbW92cQlNTVdPUkQgW2VkaSsxKlNJWkVPRl9NTVdPUkRdLCBtbUQKLQltb3ZxCW1tQSxtbUMKLQltb3ZxCW1tRCxtbUgKLQlzdWIJZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQvMgotCWFkZAllZGksIGJ5dGUgMipTSVpFT0ZfTU1XT1JECisgICAgICAgIGNtcCAgICAgZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQvMgorICAgICAgICBqYiAgICAgIHNob3J0IC5jb2x1bW5fc3Q4CisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtlZGkrMCpTSVpFT0ZfTU1XT1JEXSwgbW1BCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtlZGkrMSpTSVpFT0ZfTU1XT1JEXSwgbW1ECisgICAgICAgIG1vdnEgICAgbW1BLG1tQworICAgICAgICBtb3ZxICAgIG1tRCxtbUgKKyAgICAgICAgc3ViICAgICBlY3gsIGJ5dGUgU0laRU9GX01NV09SRC8yCisgICAgICAgIGFkZCAgICAgZWRpLCBieXRlIDIqU0laRU9GX01NV09SRAogLmNvbHVtbl9zdDg6Ci0JY21wCWVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JELzQKLQlqYglzaG9ydCAuY29sdW1uX3N0NAotCW1vdnEJTU1XT1JEIFtlZGkrMCpTSVpFT0ZfTU1XT1JEXSwgbW1BCi0JbW92cQltbUEsbW1ECi0Jc3ViCWVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JELzQKLQlhZGQJZWRpLCBieXRlIDEqU0laRU9GX01NV09SRAorICAgICAgICBjbXAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JELzQKKyAgICAgICAgamIgICAgICBzaG9ydCAuY29sdW1uX3N0NAorICAgICAgICBtb3ZxICAgIE1NV09SRCBbZWRpKzAqU0laRU9GX01NV09SRF0sIG1tQQorICAgICAgICBtb3ZxICAgIG1tQSxtbUQKKyAgICAgICAgc3ViICAgICBlY3gsIGJ5dGUgU0laRU9GX01NV09SRC80CisgICAgICAgIGFkZCAgICAgZWRpLCBieXRlIDEqU0laRU9GX01NV09SRAogLmNvbHVtbl9zdDQ6Ci0JY21wCWVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JELzgKLQlqYglzaG9ydCAubmV4dHJvdwotCW1vdmQJRFdPUkQgW2VkaSswKlNJWkVPRl9EV09SRF0sIG1tQQorICAgICAgICBjbXAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JELzgKKyAgICAgICAgamIgICAgICBzaG9ydCAubmV4dHJvdworICAgICAgICBtb3ZkICAgIERXT1JEIFtlZGkrMCpTSVpFT0ZfRFdPUkRdLCBtbUEKIAogJWVuZGlmIDsgUkdCX1BJWEVMU0laRSA7IC0tLS0tLS0tLS0tLS0tLQogCi0JYWxpZ254CTE2LDcKKyAgICAgICAgYWxpZ254ICAxNiw3CiAKIC5uZXh0cm93OgotCXBvcAllY3gKLQlwb3AJZXNpCi0JcG9wCWVieAotCXBvcAllZHgKLQlwb3AJZWRpCi0JcG9wCWVheAorICAgICAgICBwb3AgICAgIGVjeAorICAgICAgICBwb3AgICAgIGVzaQorICAgICAgICBwb3AgICAgIGVieAorICAgICAgICBwb3AgICAgIGVkeAorICAgICAgICBwb3AgICAgIGVkaQorICAgICAgICBwb3AgICAgIGVheAogCi0JYWRkCWVzaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cKLQlhZGQJZWJ4LCBieXRlIFNJWkVPRl9KU0FNUFJPVwotCWFkZAllZHgsIGJ5dGUgU0laRU9GX0pTQU1QUk9XCi0JYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cJOyBvdXRwdXRfYnVmCi0JZGVjCWVheAkJCQk7IG51bV9yb3dzCi0JamcJbmVhciAucm93bG9vcAorICAgICAgICBhZGQgICAgIGVzaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cKKyAgICAgICAgYWRkICAgICBlYngsIGJ5dGUgU0laRU9GX0pTQU1QUk9XCisgICAgICAgIGFkZCAgICAgZWR4LCBieXRlIFNJWkVPRl9KU0FNUFJPVworICAgICAgICBhZGQgICAgIGVkaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cgICAgICAgOyBvdXRwdXRfYnVmCisgICAgICAgIGRlYyAgICAgZWF4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IG51bV9yb3dzCisgICAgICAgIGpnICAgICAgbmVhciAucm93bG9vcAogCi0JZW1tcwkJOyBlbXB0eSBNTVggc3RhdGUKKyAgICAgICAgZW1tcyAgICAgICAgICAgIDsgZW1wdHkgTU1YIHN0YXRlCiAKIC5yZXR1cm46Ci0JcG9wCWVkaQotCXBvcAllc2kKLTsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLTsJcG9wCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLQlwb3AJZWJ4Ci0JbW92CWVzcCxlYnAJCTsgZXNwIDwtIGFsaWduZWQgZWJwCi0JcG9wCWVzcAkJOyBlc3AgPC0gb3JpZ2luYWwgZWJwCi0JcG9wCWVicAotCXJldAorICAgICAgICBwb3AgICAgIGVkaQorICAgICAgICBwb3AgICAgIGVzaQorOyAgICAgICBwb3AgICAgIGVkeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgICAgICBwb3AgICAgIGVjeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgICAgICBwb3AgICAgIGVieAorICAgICAgICBtb3YgICAgIGVzcCxlYnAgICAgICAgICA7IGVzcCA8LSBhbGlnbmVkIGVicAorICAgICAgICBwb3AgICAgIGVzcCAgICAgICAgICAgICA7IGVzcCA8LSBvcmlnaW5hbCBlYnAKKyAgICAgICAgcG9wICAgICBlYnAKKyAgICAgICAgcmV0CiAKIDsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCiA7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCi0JYWxpZ24JMTYKKyAgICAgICAgYWxpZ24gICAxNgpkaWZmIC0tZ2l0IGEvc2ltZC9qZGNscnNzMi02NC5hc20gYi9zaW1kL2pkY2xyc3MyLTY0LmFzbQppbmRleCA3ZDE3YzUyLi44OGE5ZjFlIDEwMDY0NAotLS0gYS9zaW1kL2pkY2xyc3MyLTY0LmFzbQorKysgYi9zaW1kL2pkY2xyc3MyLTY0LmFzbQpAQCAtMTgsNyArMTgsNyBAQAogOyBbVEFCOF0KIAogJWluY2x1ZGUgImpjb2xzYW1wLmluYyIKLQkJCQkKKwogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogOwogOyBDb252ZXJ0IHNvbWUgcm93cyBvZiBzYW1wbGVzIHRvIHRoZSBvdXRwdXQgY29sb3JzcGFjZS4KQEAgLTM1LDQwNyArMzUsNDA3IEBACiA7IHIxMyA9IEpTQU1QQVJSQVkgb3V0cHV0X2J1ZgogOyByMTQgPSBpbnQgbnVtX3Jvd3MKIAotJWRlZmluZSB3ayhpKQkJcmJwLShXS19OVU0tKGkpKSpTSVpFT0ZfWE1NV09SRAk7IHhtbXdvcmQgd2tbV0tfTlVNXQotJWRlZmluZSBXS19OVU0JCTIKKyVkZWZpbmUgd2soaSkgICAgICAgICAgIHJicC0oV0tfTlVNLShpKSkqU0laRU9GX1hNTVdPUkQgOyB4bW13b3JkIHdrW1dLX05VTV0KKyVkZWZpbmUgV0tfTlVNICAgICAgICAgIDIKIAotCWFsaWduCTE2Ci0JZ2xvYmFsCUVYVE4oanNpbWRfeWNjX3JnYl9jb252ZXJ0X3NzZTIpCisgICAgICAgIGFsaWduICAgMTYKKyAgICAgICAgZ2xvYmFsICBFWFROKGpzaW1kX3ljY19yZ2JfY29udmVydF9zc2UyKQogCiBFWFROKGpzaW1kX3ljY19yZ2JfY29udmVydF9zc2UyKToKLQlwdXNoCXJicAotCW1vdglyYXgscnNwCQkJCTsgcmF4ID0gb3JpZ2luYWwgcmJwCi0Jc3ViCXJzcCwgYnl0ZSA0Ci0JYW5kCXJzcCwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKQk7IGFsaWduIHRvIDEyOCBiaXRzCi0JbW92CVtyc3BdLHJheAotCW1vdglyYnAscnNwCQkJCTsgcmJwID0gYWxpZ25lZCByYnAKLQlsZWEJcnNwLCBbd2soMCldCi0JY29sbGVjdF9hcmdzCi0JcHVzaAlyYngKKyAgICAgICAgcHVzaCAgICByYnAKKyAgICAgICAgbW92ICAgICByYXgscnNwICAgICAgICAgICAgICAgICAgICAgICAgIDsgcmF4ID0gb3JpZ2luYWwgcmJwCisgICAgICAgIHN1YiAgICAgcnNwLCBieXRlIDQKKyAgICAgICAgYW5kICAgICByc3AsIGJ5dGUgKC1TSVpFT0ZfWE1NV09SRCkgICAgIDsgYWxpZ24gdG8gMTI4IGJpdHMKKyAgICAgICAgbW92ICAgICBbcnNwXSxyYXgKKyAgICAgICAgbW92ICAgICByYnAscnNwICAgICAgICAgICAgICAgICAgICAgICAgIDsgcmJwID0gYWxpZ25lZCByYnAKKyAgICAgICAgbGVhICAgICByc3AsIFt3aygwKV0KKyAgICAgICAgY29sbGVjdF9hcmdzCisgICAgICAgIHB1c2ggICAgcmJ4CiAKLQltb3YJcmN4LCByMTAJOyBudW1fY29scwotCXRlc3QJcmN4LHJjeAotCWp6CW5lYXIgLnJldHVybgorICAgICAgICBtb3YgICAgIHJjeCwgcjEwICAgICAgICA7IG51bV9jb2xzCisgICAgICAgIHRlc3QgICAgcmN4LHJjeAorICAgICAgICBqeiAgICAgIG5lYXIgLnJldHVybgogCi0JcHVzaAlyY3gKKyAgICAgICAgcHVzaCAgICByY3gKIAotCW1vdglyZGksIHIxMQotCW1vdglyY3gsIHIxMgotCW1vdglyc2ksIEpTQU1QQVJSQVkgW3JkaSswKlNJWkVPRl9KU0FNUEFSUkFZXQotCW1vdglyYngsIEpTQU1QQVJSQVkgW3JkaSsxKlNJWkVPRl9KU0FNUEFSUkFZXQotCW1vdglyZHgsIEpTQU1QQVJSQVkgW3JkaSsyKlNJWkVPRl9KU0FNUEFSUkFZXQotCWxlYQlyc2ksIFtyc2krcmN4KlNJWkVPRl9KU0FNUFJPV10KLQlsZWEJcmJ4LCBbcmJ4K3JjeCpTSVpFT0ZfSlNBTVBST1ddCi0JbGVhCXJkeCwgW3JkeCtyY3gqU0laRU9GX0pTQU1QUk9XXQorICAgICAgICBtb3YgICAgIHJkaSwgcjExCisgICAgICAgIG1vdiAgICAgcmN4LCByMTIKKyAgICAgICAgbW92ICAgICByc2ksIEpTQU1QQVJSQVkgW3JkaSswKlNJWkVPRl9KU0FNUEFSUkFZXQorICAgICAgICBtb3YgICAgIHJieCwgSlNBTVBBUlJBWSBbcmRpKzEqU0laRU9GX0pTQU1QQVJSQVldCisgICAgICAgIG1vdiAgICAgcmR4LCBKU0FNUEFSUkFZIFtyZGkrMipTSVpFT0ZfSlNBTVBBUlJBWV0KKyAgICAgICAgbGVhICAgICByc2ksIFtyc2krcmN4KlNJWkVPRl9KU0FNUFJPV10KKyAgICAgICAgbGVhICAgICByYngsIFtyYngrcmN4KlNJWkVPRl9KU0FNUFJPV10KKyAgICAgICAgbGVhICAgICByZHgsIFtyZHgrcmN4KlNJWkVPRl9KU0FNUFJPV10KIAotCXBvcAlyY3gKKyAgICAgICAgcG9wICAgICByY3gKIAotCW1vdglyZGksIHIxMwotCW1vdgllYXgsIHIxNGQKLQl0ZXN0CXJheCxyYXgKLQlqbGUJbmVhciAucmV0dXJuCisgICAgICAgIG1vdiAgICAgcmRpLCByMTMKKyAgICAgICAgbW92ICAgICBlYXgsIHIxNGQKKyAgICAgICAgdGVzdCAgICByYXgscmF4CisgICAgICAgIGpsZSAgICAgbmVhciAucmV0dXJuCiAucm93bG9vcDoKLQlwdXNoCXJheAotCXB1c2gJcmRpCi0JcHVzaAlyZHgKLQlwdXNoCXJieAotCXB1c2gJcnNpCi0JcHVzaAlyY3gJCQk7IGNvbAorICAgICAgICBwdXNoICAgIHJheAorICAgICAgICBwdXNoICAgIHJkaQorICAgICAgICBwdXNoICAgIHJkeAorICAgICAgICBwdXNoICAgIHJieAorICAgICAgICBwdXNoICAgIHJzaQorICAgICAgICBwdXNoICAgIHJjeCAgICAgICAgICAgICAgICAgICAgIDsgY29sCiAKLQltb3YJcnNpLCBKU0FNUFJPVyBbcnNpXQk7IGlucHRyMAotCW1vdglyYngsIEpTQU1QUk9XIFtyYnhdCTsgaW5wdHIxCi0JbW92CXJkeCwgSlNBTVBST1cgW3JkeF0JOyBpbnB0cjIKLQltb3YJcmRpLCBKU0FNUFJPVyBbcmRpXQk7IG91dHB0cgorICAgICAgICBtb3YgICAgIHJzaSwgSlNBTVBST1cgW3JzaV0gICAgIDsgaW5wdHIwCisgICAgICAgIG1vdiAgICAgcmJ4LCBKU0FNUFJPVyBbcmJ4XSAgICAgOyBpbnB0cjEKKyAgICAgICAgbW92ICAgICByZHgsIEpTQU1QUk9XIFtyZHhdICAgICA7IGlucHRyMgorICAgICAgICBtb3YgICAgIHJkaSwgSlNBTVBST1cgW3JkaV0gICAgIDsgb3V0cHRyCiAuY29sdW1ubG9vcDoKIAotCW1vdmRxYQl4bW01LCBYTU1XT1JEIFtyYnhdCTsgeG1tNT1DYigwMTIzNDU2Nzg5QUJDREVGKQotCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFtyZHhdCTsgeG1tMT1DcigwMTIzNDU2Nzg5QUJDREVGKQorICAgICAgICBtb3ZkcWEgIHhtbTUsIFhNTVdPUkQgW3JieF0gICAgIDsgeG1tNT1DYigwMTIzNDU2Nzg5QUJDREVGKQorICAgICAgICBtb3ZkcWEgIHhtbTEsIFhNTVdPUkQgW3JkeF0gICAgIDsgeG1tMT1DcigwMTIzNDU2Nzg5QUJDREVGKQogCi0JcGNtcGVxdwl4bW00LHhtbTQKLQlwY21wZXF3CXhtbTcseG1tNwotCXBzcmx3CXhtbTQsQllURV9CSVQKLQlwc2xsdwl4bW03LDcJCQk7IHhtbTc9ezB4RkY4MCAweEZGODAgMHhGRjgwIDB4RkY4MCAuLn0KLQltb3ZkcWEJeG1tMCx4bW00CQk7IHhtbTA9eG1tND17MHhGRiAweDAwIDB4RkYgMHgwMCAuLn0KKyAgICAgICAgcGNtcGVxdyB4bW00LHhtbTQKKyAgICAgICAgcGNtcGVxdyB4bW03LHhtbTcKKyAgICAgICAgcHNybHcgICB4bW00LEJZVEVfQklUCisgICAgICAgIHBzbGx3ICAgeG1tNyw3ICAgICAgICAgICAgICAgICAgOyB4bW03PXsweEZGODAgMHhGRjgwIDB4RkY4MCAweEZGODAgLi59CisgICAgICAgIG1vdmRxYSAgeG1tMCx4bW00ICAgICAgICAgICAgICAgOyB4bW0wPXhtbTQ9ezB4RkYgMHgwMCAweEZGIDB4MDAgLi59CiAKLQlwYW5kCXhtbTQseG1tNQkJOyB4bW00PUNiKDAyNDY4QUNFKT1DYkUKLQlwc3Jsdwl4bW01LEJZVEVfQklUCQk7IHhtbTU9Q2IoMTM1NzlCREYpPUNiTwotCXBhbmQJeG1tMCx4bW0xCQk7IHhtbTA9Q3IoMDI0NjhBQ0UpPUNyRQotCXBzcmx3CXhtbTEsQllURV9CSVQJCTsgeG1tMT1DcigxMzU3OUJERik9Q3JPCisgICAgICAgIHBhbmQgICAgeG1tNCx4bW01ICAgICAgICAgICAgICAgOyB4bW00PUNiKDAyNDY4QUNFKT1DYkUKKyAgICAgICAgcHNybHcgICB4bW01LEJZVEVfQklUICAgICAgICAgICA7IHhtbTU9Q2IoMTM1NzlCREYpPUNiTworICAgICAgICBwYW5kICAgIHhtbTAseG1tMSAgICAgICAgICAgICAgIDsgeG1tMD1DcigwMjQ2OEFDRSk9Q3JFCisgICAgICAgIHBzcmx3ICAgeG1tMSxCWVRFX0JJVCAgICAgICAgICAgOyB4bW0xPUNyKDEzNTc5QkRGKT1Dck8KIAotCXBhZGR3CXhtbTQseG1tNwotCXBhZGR3CXhtbTUseG1tNwotCXBhZGR3CXhtbTAseG1tNwotCXBhZGR3CXhtbTEseG1tNworICAgICAgICBwYWRkdyAgIHhtbTQseG1tNworICAgICAgICBwYWRkdyAgIHhtbTUseG1tNworICAgICAgICBwYWRkdyAgIHhtbTAseG1tNworICAgICAgICBwYWRkdyAgIHhtbTEseG1tNwogCi0JOyAoT3JpZ2luYWwpCi0JOyBSID0gWSAgICAgICAgICAgICAgICArIDEuNDAyMDAgKiBDcgotCTsgRyA9IFkgLSAwLjM0NDE0ICogQ2IgLSAwLjcxNDE0ICogQ3IKLQk7IEIgPSBZICsgMS43NzIwMCAqIENiCi0JOwotCTsgKFRoaXMgaW1wbGVtZW50YXRpb24pCi0JOyBSID0gWSAgICAgICAgICAgICAgICArIDAuNDAyMDAgKiBDciArIENyCi0JOyBHID0gWSAtIDAuMzQ0MTQgKiBDYiArIDAuMjg1ODYgKiBDciAtIENyCi0JOyBCID0gWSAtIDAuMjI4MDAgKiBDYiArIENiICsgQ2IKKyAgICAgICAgOyAoT3JpZ2luYWwpCisgICAgICAgIDsgUiA9IFkgICAgICAgICAgICAgICAgKyAxLjQwMjAwICogQ3IKKyAgICAgICAgOyBHID0gWSAtIDAuMzQ0MTQgKiBDYiAtIDAuNzE0MTQgKiBDcgorICAgICAgICA7IEIgPSBZICsgMS43NzIwMCAqIENiCisgICAgICAgIDsKKyAgICAgICAgOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKyAgICAgICAgOyBSID0gWSAgICAgICAgICAgICAgICArIDAuNDAyMDAgKiBDciArIENyCisgICAgICAgIDsgRyA9IFkgLSAwLjM0NDE0ICogQ2IgKyAwLjI4NTg2ICogQ3IgLSBDcgorICAgICAgICA7IEIgPSBZIC0gMC4yMjgwMCAqIENiICsgQ2IgKyBDYgogCi0JbW92ZHFhCXhtbTIseG1tNAkJOyB4bW0yPUNiRQotCW1vdmRxYQl4bW0zLHhtbTUJCTsgeG1tMz1DYk8KLQlwYWRkdwl4bW00LHhtbTQJCTsgeG1tND0yKkNiRQotCXBhZGR3CXhtbTUseG1tNQkJOyB4bW01PTIqQ2JPCi0JbW92ZHFhCXhtbTYseG1tMAkJOyB4bW02PUNyRQotCW1vdmRxYQl4bW03LHhtbTEJCTsgeG1tNz1Dck8KLQlwYWRkdwl4bW0wLHhtbTAJCTsgeG1tMD0yKkNyRQotCXBhZGR3CXhtbTEseG1tMQkJOyB4bW0xPTIqQ3JPCisgICAgICAgIG1vdmRxYSAgeG1tMix4bW00ICAgICAgICAgICAgICAgOyB4bW0yPUNiRQorICAgICAgICBtb3ZkcWEgIHhtbTMseG1tNSAgICAgICAgICAgICAgIDsgeG1tMz1DYk8KKyAgICAgICAgcGFkZHcgICB4bW00LHhtbTQgICAgICAgICAgICAgICA7IHhtbTQ9MipDYkUKKyAgICAgICAgcGFkZHcgICB4bW01LHhtbTUgICAgICAgICAgICAgICA7IHhtbTU9MipDYk8KKyAgICAgICAgbW92ZHFhICB4bW02LHhtbTAgICAgICAgICAgICAgICA7IHhtbTY9Q3JFCisgICAgICAgIG1vdmRxYSAgeG1tNyx4bW0xICAgICAgICAgICAgICAgOyB4bW03PUNyTworICAgICAgICBwYWRkdyAgIHhtbTAseG1tMCAgICAgICAgICAgICAgIDsgeG1tMD0yKkNyRQorICAgICAgICBwYWRkdyAgIHhtbTEseG1tMSAgICAgICAgICAgICAgIDsgeG1tMT0yKkNyTwogCi0JcG11bGh3CXhtbTQsW3JlbCBQV19NRjAyMjhdCTsgeG1tND0oMipDYkUgKiAtRklYKDAuMjI4MDApKQotCXBtdWxodwl4bW01LFtyZWwgUFdfTUYwMjI4XQk7IHhtbTU9KDIqQ2JPICogLUZJWCgwLjIyODAwKSkKLQlwbXVsaHcJeG1tMCxbcmVsIFBXX0YwNDAyXQk7IHhtbTA9KDIqQ3JFICogRklYKDAuNDAyMDApKQotCXBtdWxodwl4bW0xLFtyZWwgUFdfRjA0MDJdCTsgeG1tMT0oMipDck8gKiBGSVgoMC40MDIwMCkpCisgICAgICAgIHBtdWxodyAgeG1tNCxbcmVsIFBXX01GMDIyOF0gICAgOyB4bW00PSgyKkNiRSAqIC1GSVgoMC4yMjgwMCkpCisgICAgICAgIHBtdWxodyAgeG1tNSxbcmVsIFBXX01GMDIyOF0gICAgOyB4bW01PSgyKkNiTyAqIC1GSVgoMC4yMjgwMCkpCisgICAgICAgIHBtdWxodyAgeG1tMCxbcmVsIFBXX0YwNDAyXSAgICAgOyB4bW0wPSgyKkNyRSAqIEZJWCgwLjQwMjAwKSkKKyAgICAgICAgcG11bGh3ICB4bW0xLFtyZWwgUFdfRjA0MDJdICAgICA7IHhtbTE9KDIqQ3JPICogRklYKDAuNDAyMDApKQogCi0JcGFkZHcJeG1tNCxbcmVsIFBXX09ORV0KLQlwYWRkdwl4bW01LFtyZWwgUFdfT05FXQotCXBzcmF3CXhtbTQsMQkJCTsgeG1tND0oQ2JFICogLUZJWCgwLjIyODAwKSkKLQlwc3Jhdwl4bW01LDEJCQk7IHhtbTU9KENiTyAqIC1GSVgoMC4yMjgwMCkpCi0JcGFkZHcJeG1tMCxbcmVsIFBXX09ORV0KLQlwYWRkdwl4bW0xLFtyZWwgUFdfT05FXQotCXBzcmF3CXhtbTAsMQkJCTsgeG1tMD0oQ3JFICogRklYKDAuNDAyMDApKQotCXBzcmF3CXhtbTEsMQkJCTsgeG1tMT0oQ3JPICogRklYKDAuNDAyMDApKQorICAgICAgICBwYWRkdyAgIHhtbTQsW3JlbCBQV19PTkVdCisgICAgICAgIHBhZGR3ICAgeG1tNSxbcmVsIFBXX09ORV0KKyAgICAgICAgcHNyYXcgICB4bW00LDEgICAgICAgICAgICAgICAgICA7IHhtbTQ9KENiRSAqIC1GSVgoMC4yMjgwMCkpCisgICAgICAgIHBzcmF3ICAgeG1tNSwxICAgICAgICAgICAgICAgICAgOyB4bW01PShDYk8gKiAtRklYKDAuMjI4MDApKQorICAgICAgICBwYWRkdyAgIHhtbTAsW3JlbCBQV19PTkVdCisgICAgICAgIHBhZGR3ICAgeG1tMSxbcmVsIFBXX09ORV0KKyAgICAgICAgcHNyYXcgICB4bW0wLDEgICAgICAgICAgICAgICAgICA7IHhtbTA9KENyRSAqIEZJWCgwLjQwMjAwKSkKKyAgICAgICAgcHNyYXcgICB4bW0xLDEgICAgICAgICAgICAgICAgICA7IHhtbTE9KENyTyAqIEZJWCgwLjQwMjAwKSkKIAotCXBhZGR3CXhtbTQseG1tMgotCXBhZGR3CXhtbTUseG1tMwotCXBhZGR3CXhtbTQseG1tMgkJOyB4bW00PShDYkUgKiBGSVgoMS43NzIwMCkpPShCLVkpRQotCXBhZGR3CXhtbTUseG1tMwkJOyB4bW01PShDYk8gKiBGSVgoMS43NzIwMCkpPShCLVkpTwotCXBhZGR3CXhtbTAseG1tNgkJOyB4bW0wPShDckUgKiBGSVgoMS40MDIwMCkpPShSLVkpRQotCXBhZGR3CXhtbTEseG1tNwkJOyB4bW0xPShDck8gKiBGSVgoMS40MDIwMCkpPShSLVkpTworICAgICAgICBwYWRkdyAgIHhtbTQseG1tMgorICAgICAgICBwYWRkdyAgIHhtbTUseG1tMworICAgICAgICBwYWRkdyAgIHhtbTQseG1tMiAgICAgICAgICAgICAgIDsgeG1tND0oQ2JFICogRklYKDEuNzcyMDApKT0oQi1ZKUUKKyAgICAgICAgcGFkZHcgICB4bW01LHhtbTMgICAgICAgICAgICAgICA7IHhtbTU9KENiTyAqIEZJWCgxLjc3MjAwKSk9KEItWSlPCisgICAgICAgIHBhZGR3ICAgeG1tMCx4bW02ICAgICAgICAgICAgICAgOyB4bW0wPShDckUgKiBGSVgoMS40MDIwMCkpPShSLVkpRQorICAgICAgICBwYWRkdyAgIHhtbTEseG1tNyAgICAgICAgICAgICAgIDsgeG1tMT0oQ3JPICogRklYKDEuNDAyMDApKT0oUi1ZKU8KIAotCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTQJOyB3aygwKT0oQi1ZKUUKLQltb3ZkcWEJWE1NV09SRCBbd2soMSldLCB4bW01CTsgd2soMSk9KEItWSlPCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMCldLCB4bW00ICAgOyB3aygwKT0oQi1ZKUUKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygxKV0sIHhtbTUgICA7IHdrKDEpPShCLVkpTwogCi0JbW92ZHFhICAgIHhtbTQseG1tMgotCW1vdmRxYSAgICB4bW01LHhtbTMKLQlwdW5wY2tsd2QgeG1tMix4bW02Ci0JcHVucGNraHdkIHhtbTQseG1tNgotCXBtYWRkd2QgICB4bW0yLFtyZWwgUFdfTUYwMzQ0X0YwMjg1XQotCXBtYWRkd2QgICB4bW00LFtyZWwgUFdfTUYwMzQ0X0YwMjg1XQotCXB1bnBja2x3ZCB4bW0zLHhtbTcKLQlwdW5wY2tod2QgeG1tNSx4bW03Ci0JcG1hZGR3ZCAgIHhtbTMsW3JlbCBQV19NRjAzNDRfRjAyODVdCi0JcG1hZGR3ZCAgIHhtbTUsW3JlbCBQV19NRjAzNDRfRjAyODVdCisgICAgICAgIG1vdmRxYSAgICB4bW00LHhtbTIKKyAgICAgICAgbW92ZHFhICAgIHhtbTUseG1tMworICAgICAgICBwdW5wY2tsd2QgeG1tMix4bW02CisgICAgICAgIHB1bnBja2h3ZCB4bW00LHhtbTYKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTIsW3JlbCBQV19NRjAzNDRfRjAyODVdCisgICAgICAgIHBtYWRkd2QgICB4bW00LFtyZWwgUFdfTUYwMzQ0X0YwMjg1XQorICAgICAgICBwdW5wY2tsd2QgeG1tMyx4bW03CisgICAgICAgIHB1bnBja2h3ZCB4bW01LHhtbTcKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTMsW3JlbCBQV19NRjAzNDRfRjAyODVdCisgICAgICAgIHBtYWRkd2QgICB4bW01LFtyZWwgUFdfTUYwMzQ0X0YwMjg1XQogCi0JcGFkZGQgICAgIHhtbTIsW3JlbCBQRF9PTkVIQUxGXQotCXBhZGRkICAgICB4bW00LFtyZWwgUERfT05FSEFMRl0KLQlwc3JhZCAgICAgeG1tMixTQ0FMRUJJVFMKLQlwc3JhZCAgICAgeG1tNCxTQ0FMRUJJVFMKLQlwYWRkZCAgICAgeG1tMyxbcmVsIFBEX09ORUhBTEZdCi0JcGFkZGQgICAgIHhtbTUsW3JlbCBQRF9PTkVIQUxGXQotCXBzcmFkICAgICB4bW0zLFNDQUxFQklUUwotCXBzcmFkICAgICB4bW01LFNDQUxFQklUUworICAgICAgICBwYWRkZCAgICAgeG1tMixbcmVsIFBEX09ORUhBTEZdCisgICAgICAgIHBhZGRkICAgICB4bW00LFtyZWwgUERfT05FSEFMRl0KKyAgICAgICAgcHNyYWQgICAgIHhtbTIsU0NBTEVCSVRTCisgICAgICAgIHBzcmFkICAgICB4bW00LFNDQUxFQklUUworICAgICAgICBwYWRkZCAgICAgeG1tMyxbcmVsIFBEX09ORUhBTEZdCisgICAgICAgIHBhZGRkICAgICB4bW01LFtyZWwgUERfT05FSEFMRl0KKyAgICAgICAgcHNyYWQgICAgIHhtbTMsU0NBTEVCSVRTCisgICAgICAgIHBzcmFkICAgICB4bW01LFNDQUxFQklUUwogCi0JcGFja3NzZHcgIHhtbTIseG1tNAk7IHhtbTI9Q2JFKi1GSVgoMC4zNDQpK0NyRSpGSVgoMC4yODUpCi0JcGFja3NzZHcgIHhtbTMseG1tNQk7IHhtbTM9Q2JPKi1GSVgoMC4zNDQpK0NyTypGSVgoMC4yODUpCi0JcHN1YncgICAgIHhtbTIseG1tNgk7IHhtbTI9Q2JFKi1GSVgoMC4zNDQpK0NyRSotRklYKDAuNzE0KT0oRy1ZKUUKLQlwc3VidyAgICAgeG1tMyx4bW03CTsgeG1tMz1DYk8qLUZJWCgwLjM0NCkrQ3JPKi1GSVgoMC43MTQpPShHLVkpTworICAgICAgICBwYWNrc3NkdyAgeG1tMix4bW00ICAgICA7IHhtbTI9Q2JFKi1GSVgoMC4zNDQpK0NyRSpGSVgoMC4yODUpCisgICAgICAgIHBhY2tzc2R3ICB4bW0zLHhtbTUgICAgIDsgeG1tMz1DYk8qLUZJWCgwLjM0NCkrQ3JPKkZJWCgwLjI4NSkKKyAgICAgICAgcHN1YncgICAgIHhtbTIseG1tNiAgICAgOyB4bW0yPUNiRSotRklYKDAuMzQ0KStDckUqLUZJWCgwLjcxNCk9KEctWSlFCisgICAgICAgIHBzdWJ3ICAgICB4bW0zLHhtbTcgICAgIDsgeG1tMz1DYk8qLUZJWCgwLjM0NCkrQ3JPKi1GSVgoMC43MTQpPShHLVkpTwogCi0JbW92ZHFhICAgIHhtbTUsIFhNTVdPUkQgW3JzaV0JOyB4bW01PVkoMDEyMzQ1Njc4OUFCQ0RFRikKKyAgICAgICAgbW92ZHFhICAgIHhtbTUsIFhNTVdPUkQgW3JzaV0gICA7IHhtbTU9WSgwMTIzNDU2Nzg5QUJDREVGKQogCi0JcGNtcGVxdyAgIHhtbTQseG1tNAotCXBzcmx3ICAgICB4bW00LEJZVEVfQklUCQk7IHhtbTQ9ezB4RkYgMHgwMCAweEZGIDB4MDAgLi59Ci0JcGFuZCAgICAgIHhtbTQseG1tNQkJOyB4bW00PVkoMDI0NjhBQ0UpPVlFCi0JcHNybHcgICAgIHhtbTUsQllURV9CSVQJCTsgeG1tNT1ZKDEzNTc5QkRGKT1ZTworICAgICAgICBwY21wZXF3ICAgeG1tNCx4bW00CisgICAgICAgIHBzcmx3ICAgICB4bW00LEJZVEVfQklUICAgICAgICAgOyB4bW00PXsweEZGIDB4MDAgMHhGRiAweDAwIC4ufQorICAgICAgICBwYW5kICAgICAgeG1tNCx4bW01ICAgICAgICAgICAgIDsgeG1tND1ZKDAyNDY4QUNFKT1ZRQorICAgICAgICBwc3JsdyAgICAgeG1tNSxCWVRFX0JJVCAgICAgICAgIDsgeG1tNT1ZKDEzNTc5QkRGKT1ZTwogCi0JcGFkZHcgICAgIHhtbTAseG1tNAkJOyB4bW0wPSgoUi1ZKUUrWUUpPVJFPVIoMDI0NjhBQ0UpCi0JcGFkZHcgICAgIHhtbTEseG1tNQkJOyB4bW0xPSgoUi1ZKU8rWU8pPVJPPVIoMTM1NzlCREYpCi0JcGFja3Vzd2IgIHhtbTAseG1tMAkJOyB4bW0wPVIoMDI0NjhBQ0UqKioqKioqKikKLQlwYWNrdXN3YiAgeG1tMSx4bW0xCQk7IHhtbTE9UigxMzU3OUJERioqKioqKioqKQorICAgICAgICBwYWRkdyAgICAgeG1tMCx4bW00ICAgICAgICAgICAgIDsgeG1tMD0oKFItWSlFK1lFKT1SRT1SKDAyNDY4QUNFKQorICAgICAgICBwYWRkdyAgICAgeG1tMSx4bW01ICAgICAgICAgICAgIDsgeG1tMT0oKFItWSlPK1lPKT1STz1SKDEzNTc5QkRGKQorICAgICAgICBwYWNrdXN3YiAgeG1tMCx4bW0wICAgICAgICAgICAgIDsgeG1tMD1SKDAyNDY4QUNFKioqKioqKiopCisgICAgICAgIHBhY2t1c3diICB4bW0xLHhtbTEgICAgICAgICAgICAgOyB4bW0xPVIoMTM1NzlCREYqKioqKioqKikKIAotCXBhZGR3ICAgICB4bW0yLHhtbTQJCTsgeG1tMj0oKEctWSlFK1lFKT1HRT1HKDAyNDY4QUNFKQotCXBhZGR3ICAgICB4bW0zLHhtbTUJCTsgeG1tMz0oKEctWSlPK1lPKT1HTz1HKDEzNTc5QkRGKQotCXBhY2t1c3diICB4bW0yLHhtbTIJCTsgeG1tMj1HKDAyNDY4QUNFKioqKioqKiopCi0JcGFja3Vzd2IgIHhtbTMseG1tMwkJOyB4bW0zPUcoMTM1NzlCREYqKioqKioqKikKKyAgICAgICAgcGFkZHcgICAgIHhtbTIseG1tNCAgICAgICAgICAgICA7IHhtbTI9KChHLVkpRStZRSk9R0U9RygwMjQ2OEFDRSkKKyAgICAgICAgcGFkZHcgICAgIHhtbTMseG1tNSAgICAgICAgICAgICA7IHhtbTM9KChHLVkpTytZTyk9R089RygxMzU3OUJERikKKyAgICAgICAgcGFja3Vzd2IgIHhtbTIseG1tMiAgICAgICAgICAgICA7IHhtbTI9RygwMjQ2OEFDRSoqKioqKioqKQorICAgICAgICBwYWNrdXN3YiAgeG1tMyx4bW0zICAgICAgICAgICAgIDsgeG1tMz1HKDEzNTc5QkRGKioqKioqKiopCiAKLQlwYWRkdyAgICAgeG1tNCwgWE1NV09SRCBbd2soMCldCTsgeG1tND0oWUUrKEItWSlFKT1CRT1CKDAyNDY4QUNFKQotCXBhZGR3ICAgICB4bW01LCBYTU1XT1JEIFt3aygxKV0JOyB4bW01PShZTysoQi1ZKU8pPUJPPUIoMTM1NzlCREYpCi0JcGFja3Vzd2IgIHhtbTQseG1tNAkJOyB4bW00PUIoMDI0NjhBQ0UqKioqKioqKikKLQlwYWNrdXN3YiAgeG1tNSx4bW01CQk7IHhtbTU9QigxMzU3OUJERioqKioqKioqKQorICAgICAgICBwYWRkdyAgICAgeG1tNCwgWE1NV09SRCBbd2soMCldIDsgeG1tND0oWUUrKEItWSlFKT1CRT1CKDAyNDY4QUNFKQorICAgICAgICBwYWRkdyAgICAgeG1tNSwgWE1NV09SRCBbd2soMSldIDsgeG1tNT0oWU8rKEItWSlPKT1CTz1CKDEzNTc5QkRGKQorICAgICAgICBwYWNrdXN3YiAgeG1tNCx4bW00ICAgICAgICAgICAgIDsgeG1tND1CKDAyNDY4QUNFKioqKioqKiopCisgICAgICAgIHBhY2t1c3diICB4bW01LHhtbTUgICAgICAgICAgICAgOyB4bW01PUIoMTM1NzlCREYqKioqKioqKikKIAogJWlmIFJHQl9QSVhFTFNJWkUgPT0gMyA7IC0tLS0tLS0tLS0tLS0tLQogCi0JOyB4bW1BPSgwMCAwMiAwNCAwNiAwOCAwQSAwQyAwRSAqKiksIHhtbUI9KDAxIDAzIDA1IDA3IDA5IDBCIDBEIDBGICoqKQotCTsgeG1tQz0oMTAgMTIgMTQgMTYgMTggMUEgMUMgMUUgKiopLCB4bW1EPSgxMSAxMyAxNSAxNyAxOSAxQiAxRCAxRiAqKikKLQk7IHhtbUU9KDIwIDIyIDI0IDI2IDI4IDJBIDJDIDJFICoqKSwgeG1tRj0oMjEgMjMgMjUgMjcgMjkgMkIgMkQgMkYgKiopCi0JOyB4bW1HPSgqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiksIHhtbUg9KCoqICoqICoqICoqICoqICoqICoqICoqICoqKQorICAgICAgICA7IHhtbUE9KDAwIDAyIDA0IDA2IDA4IDBBIDBDIDBFICoqKSwgeG1tQj0oMDEgMDMgMDUgMDcgMDkgMEIgMEQgMEYgKiopCisgICAgICAgIDsgeG1tQz0oMTAgMTIgMTQgMTYgMTggMUEgMUMgMUUgKiopLCB4bW1EPSgxMSAxMyAxNSAxNyAxOSAxQiAxRCAxRiAqKikKKyAgICAgICAgOyB4bW1FPSgyMCAyMiAyNCAyNiAyOCAyQSAyQyAyRSAqKiksIHhtbUY9KDIxIDIzIDI1IDI3IDI5IDJCIDJEIDJGICoqKQorICAgICAgICA7IHhtbUc9KCoqICoqICoqICoqICoqICoqICoqICoqICoqKSwgeG1tSD0oKiogKiogKiogKiogKiogKiogKiogKiogKiopCiAKLQlwdW5wY2tsYncgeG1tQSx4bW1DCTsgeG1tQT0oMDAgMTAgMDIgMTIgMDQgMTQgMDYgMTYgMDggMTggMEEgMUEgMEMgMUMgMEUgMUUpCi0JcHVucGNrbGJ3IHhtbUUseG1tQgk7IHhtbUU9KDIwIDAxIDIyIDAzIDI0IDA1IDI2IDA3IDI4IDA5IDJBIDBCIDJDIDBEIDJFIDBGKQotCXB1bnBja2xidyB4bW1ELHhtbUYJOyB4bW1EPSgxMSAyMSAxMyAyMyAxNSAyNSAxNyAyNyAxOSAyOSAxQiAyQiAxRCAyRCAxRiAyRikKKyAgICAgICAgcHVucGNrbGJ3IHhtbUEseG1tQyAgICAgOyB4bW1BPSgwMCAxMCAwMiAxMiAwNCAxNCAwNiAxNiAwOCAxOCAwQSAxQSAwQyAxQyAwRSAxRSkKKyAgICAgICAgcHVucGNrbGJ3IHhtbUUseG1tQiAgICAgOyB4bW1FPSgyMCAwMSAyMiAwMyAyNCAwNSAyNiAwNyAyOCAwOSAyQSAwQiAyQyAwRCAyRSAwRikKKyAgICAgICAgcHVucGNrbGJ3IHhtbUQseG1tRiAgICAgOyB4bW1EPSgxMSAyMSAxMyAyMyAxNSAyNSAxNyAyNyAxOSAyOSAxQiAyQiAxRCAyRCAxRiAyRikKIAotCW1vdmRxYSAgICB4bW1HLHhtbUEKLQltb3ZkcWEgICAgeG1tSCx4bW1BCi0JcHVucGNrbHdkIHhtbUEseG1tRQk7IHhtbUE9KDAwIDEwIDIwIDAxIDAyIDEyIDIyIDAzIDA0IDE0IDI0IDA1IDA2IDE2IDI2IDA3KQotCXB1bnBja2h3ZCB4bW1HLHhtbUUJOyB4bW1HPSgwOCAxOCAyOCAwOSAwQSAxQSAyQSAwQiAwQyAxQyAyQyAwRCAwRSAxRSAyRSAwRikKKyAgICAgICAgbW92ZHFhICAgIHhtbUcseG1tQQorICAgICAgICBtb3ZkcWEgICAgeG1tSCx4bW1BCisgICAgICAgIHB1bnBja2x3ZCB4bW1BLHhtbUUgICAgIDsgeG1tQT0oMDAgMTAgMjAgMDEgMDIgMTIgMjIgMDMgMDQgMTQgMjQgMDUgMDYgMTYgMjYgMDcpCisgICAgICAgIHB1bnBja2h3ZCB4bW1HLHhtbUUgICAgIDsgeG1tRz0oMDggMTggMjggMDkgMEEgMUEgMkEgMEIgMEMgMUMgMkMgMEQgMEUgMUUgMkUgMEYpCiAKLQlwc3JsZHEgICAgeG1tSCwyCTsgeG1tSD0oMDIgMTIgMDQgMTQgMDYgMTYgMDggMTggMEEgMUEgMEMgMUMgMEUgMUUgLS0gLS0pCi0JcHNybGRxICAgIHhtbUUsMgk7IHhtbUU9KDIyIDAzIDI0IDA1IDI2IDA3IDI4IDA5IDJBIDBCIDJDIDBEIDJFIDBGIC0tIC0tKQorICAgICAgICBwc3JsZHEgICAgeG1tSCwyICAgICAgICA7IHhtbUg9KDAyIDEyIDA0IDE0IDA2IDE2IDA4IDE4IDBBIDFBIDBDIDFDIDBFIDFFIC0tIC0tKQorICAgICAgICBwc3JsZHEgICAgeG1tRSwyICAgICAgICA7IHhtbUU9KDIyIDAzIDI0IDA1IDI2IDA3IDI4IDA5IDJBIDBCIDJDIDBEIDJFIDBGIC0tIC0tKQogCi0JbW92ZHFhICAgIHhtbUMseG1tRAotCW1vdmRxYSAgICB4bW1CLHhtbUQKLQlwdW5wY2tsd2QgeG1tRCx4bW1ICTsgeG1tRD0oMTEgMjEgMDIgMTIgMTMgMjMgMDQgMTQgMTUgMjUgMDYgMTYgMTcgMjcgMDggMTgpCi0JcHVucGNraHdkIHhtbUMseG1tSAk7IHhtbUM9KDE5IDI5IDBBIDFBIDFCIDJCIDBDIDFDIDFEIDJEIDBFIDFFIDFGIDJGIC0tIC0tKQorICAgICAgICBtb3ZkcWEgICAgeG1tQyx4bW1ECisgICAgICAgIG1vdmRxYSAgICB4bW1CLHhtbUQKKyAgICAgICAgcHVucGNrbHdkIHhtbUQseG1tSCAgICAgOyB4bW1EPSgxMSAyMSAwMiAxMiAxMyAyMyAwNCAxNCAxNSAyNSAwNiAxNiAxNyAyNyAwOCAxOCkKKyAgICAgICAgcHVucGNraHdkIHhtbUMseG1tSCAgICAgOyB4bW1DPSgxOSAyOSAwQSAxQSAxQiAyQiAwQyAxQyAxRCAyRCAwRSAxRSAxRiAyRiAtLSAtLSkKIAotCXBzcmxkcSAgICB4bW1CLDIJOyB4bW1CPSgxMyAyMyAxNSAyNSAxNyAyNyAxOSAyOSAxQiAyQiAxRCAyRCAxRiAyRiAtLSAtLSkKKyAgICAgICAgcHNybGRxICAgIHhtbUIsMiAgICAgICAgOyB4bW1CPSgxMyAyMyAxNSAyNSAxNyAyNyAxOSAyOSAxQiAyQiAxRCAyRCAxRiAyRiAtLSAtLSkKIAotCW1vdmRxYSAgICB4bW1GLHhtbUUKLQlwdW5wY2tsd2QgeG1tRSx4bW1CCTsgeG1tRT0oMjIgMDMgMTMgMjMgMjQgMDUgMTUgMjUgMjYgMDcgMTcgMjcgMjggMDkgMTkgMjkpCi0JcHVucGNraHdkIHhtbUYseG1tQgk7IHhtbUY9KDJBIDBCIDFCIDJCIDJDIDBEIDFEIDJEIDJFIDBGIDFGIDJGIC0tIC0tIC0tIC0tKQorICAgICAgICBtb3ZkcWEgICAgeG1tRix4bW1FCisgICAgICAgIHB1bnBja2x3ZCB4bW1FLHhtbUIgICAgIDsgeG1tRT0oMjIgMDMgMTMgMjMgMjQgMDUgMTUgMjUgMjYgMDcgMTcgMjcgMjggMDkgMTkgMjkpCisgICAgICAgIHB1bnBja2h3ZCB4bW1GLHhtbUIgICAgIDsgeG1tRj0oMkEgMEIgMUIgMkIgMkMgMEQgMUQgMkQgMkUgMEYgMUYgMkYgLS0gLS0gLS0gLS0pCiAKLQlwc2h1ZmQgICAgeG1tSCx4bW1BLDB4NEU7IHhtbUg9KDA0IDE0IDI0IDA1IDA2IDE2IDI2IDA3IDAwIDEwIDIwIDAxIDAyIDEyIDIyIDAzKQotCW1vdmRxYSAgICB4bW1CLHhtbUUKLQlwdW5wY2tsZHEgeG1tQSx4bW1ECTsgeG1tQT0oMDAgMTAgMjAgMDEgMTEgMjEgMDIgMTIgMDIgMTIgMjIgMDMgMTMgMjMgMDQgMTQpCi0JcHVucGNrbGRxIHhtbUUseG1tSAk7IHhtbUU9KDIyIDAzIDEzIDIzIDA0IDE0IDI0IDA1IDI0IDA1IDE1IDI1IDA2IDE2IDI2IDA3KQotCXB1bnBja2hkcSB4bW1ELHhtbUIJOyB4bW1EPSgxNSAyNSAwNiAxNiAyNiAwNyAxNyAyNyAxNyAyNyAwOCAxOCAyOCAwOSAxOSAyOSkKKyAgICAgICAgcHNodWZkICAgIHhtbUgseG1tQSwweDRFOyB4bW1IPSgwNCAxNCAyNCAwNSAwNiAxNiAyNiAwNyAwMCAxMCAyMCAwMSAwMiAxMiAyMiAwMykKKyAgICAgICAgbW92ZHFhICAgIHhtbUIseG1tRQorICAgICAgICBwdW5wY2tsZHEgeG1tQSx4bW1EICAgICA7IHhtbUE9KDAwIDEwIDIwIDAxIDExIDIxIDAyIDEyIDAyIDEyIDIyIDAzIDEzIDIzIDA0IDE0KQorICAgICAgICBwdW5wY2tsZHEgeG1tRSx4bW1IICAgICA7IHhtbUU9KDIyIDAzIDEzIDIzIDA0IDE0IDI0IDA1IDI0IDA1IDE1IDI1IDA2IDE2IDI2IDA3KQorICAgICAgICBwdW5wY2toZHEgeG1tRCx4bW1CICAgICA7IHhtbUQ9KDE1IDI1IDA2IDE2IDI2IDA3IDE3IDI3IDE3IDI3IDA4IDE4IDI4IDA5IDE5IDI5KQogCi0JcHNodWZkICAgIHhtbUgseG1tRywweDRFOyB4bW1IPSgwQyAxQyAyQyAwRCAwRSAxRSAyRSAwRiAwOCAxOCAyOCAwOSAwQSAxQSAyQSAwQikKLQltb3ZkcWEgICAgeG1tQix4bW1GCi0JcHVucGNrbGRxIHhtbUcseG1tQwk7IHhtbUc9KDA4IDE4IDI4IDA5IDE5IDI5IDBBIDFBIDBBIDFBIDJBIDBCIDFCIDJCIDBDIDFDKQotCXB1bnBja2xkcSB4bW1GLHhtbUgJOyB4bW1GPSgyQSAwQiAxQiAyQiAwQyAxQyAyQyAwRCAyQyAwRCAxRCAyRCAwRSAxRSAyRSAwRikKLQlwdW5wY2toZHEgeG1tQyx4bW1CCTsgeG1tQz0oMUQgMkQgMEUgMUUgMkUgMEYgMUYgMkYgMUYgMkYgLS0gLS0gLS0gLS0gLS0gLS0pCisgICAgICAgIHBzaHVmZCAgICB4bW1ILHhtbUcsMHg0RTsgeG1tSD0oMEMgMUMgMkMgMEQgMEUgMUUgMkUgMEYgMDggMTggMjggMDkgMEEgMUEgMkEgMEIpCisgICAgICAgIG1vdmRxYSAgICB4bW1CLHhtbUYKKyAgICAgICAgcHVucGNrbGRxIHhtbUcseG1tQyAgICAgOyB4bW1HPSgwOCAxOCAyOCAwOSAxOSAyOSAwQSAxQSAwQSAxQSAyQSAwQiAxQiAyQiAwQyAxQykKKyAgICAgICAgcHVucGNrbGRxIHhtbUYseG1tSCAgICAgOyB4bW1GPSgyQSAwQiAxQiAyQiAwQyAxQyAyQyAwRCAyQyAwRCAxRCAyRCAwRSAxRSAyRSAwRikKKyAgICAgICAgcHVucGNraGRxIHhtbUMseG1tQiAgICAgOyB4bW1DPSgxRCAyRCAwRSAxRSAyRSAwRiAxRiAyRiAxRiAyRiAtLSAtLSAtLSAtLSAtLSAtLSkKIAotCXB1bnBja2xxZHEgeG1tQSx4bW1FCTsgeG1tQT0oMDAgMTAgMjAgMDEgMTEgMjEgMDIgMTIgMjIgMDMgMTMgMjMgMDQgMTQgMjQgMDUpCi0JcHVucGNrbHFkcSB4bW1ELHhtbUcJOyB4bW1EPSgxNSAyNSAwNiAxNiAyNiAwNyAxNyAyNyAwOCAxOCAyOCAwOSAxOSAyOSAwQSAxQSkKLQlwdW5wY2tscWRxIHhtbUYseG1tQwk7IHhtbUY9KDJBIDBCIDFCIDJCIDBDIDFDIDJDIDBEIDFEIDJEIDBFIDFFIDJFIDBGIDFGIDJGKQorICAgICAgICBwdW5wY2tscWRxIHhtbUEseG1tRSAgICA7IHhtbUE9KDAwIDEwIDIwIDAxIDExIDIxIDAyIDEyIDIyIDAzIDEzIDIzIDA0IDE0IDI0IDA1KQorICAgICAgICBwdW5wY2tscWRxIHhtbUQseG1tRyAgICA7IHhtbUQ9KDE1IDI1IDA2IDE2IDI2IDA3IDE3IDI3IDA4IDE4IDI4IDA5IDE5IDI5IDBBIDFBKQorICAgICAgICBwdW5wY2tscWRxIHhtbUYseG1tQyAgICA7IHhtbUY9KDJBIDBCIDFCIDJCIDBDIDFDIDJDIDBEIDFEIDJEIDBFIDFFIDJFIDBGIDFGIDJGKQogCi0JY21wCXJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAotCWpiCXNob3J0IC5jb2x1bW5fc3QzMgorICAgICAgICBjbXAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorICAgICAgICBqYiAgICAgIHNob3J0IC5jb2x1bW5fc3QzMgogCi0JdGVzdAlyZGksIFNJWkVPRl9YTU1XT1JELTEKLQlqbnoJc2hvcnQgLm91dDEKLQk7IC0tKGFsaWduZWQpLS0tLS0tLS0tLS0tLS0tLS0tLQotCW1vdm50ZHEJWE1NV09SRCBbcmRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW1BCi0JbW92bnRkcQlYTU1XT1JEIFtyZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbUQKLQltb3ZudGRxCVhNTVdPUkQgW3JkaSsyKlNJWkVPRl9YTU1XT1JEXSwgeG1tRgotCWptcAlzaG9ydCAub3V0MAotLm91dDE6CTsgLS0odW5hbGlnbmVkKS0tLS0tLS0tLS0tLS0tLS0tCi0JbW92ZHF1CVhNTVdPUkQgW3JkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tQQotCW1vdmRxdQlYTU1XT1JEIFtyZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbUQKLQltb3ZkcXUJWE1NV09SRCBbcmRpKzIqU0laRU9GX1hNTVdPUkRdLCB4bW1GCisgICAgICAgIHRlc3QgICAgcmRpLCBTSVpFT0ZfWE1NV09SRC0xCisgICAgICAgIGpueiAgICAgc2hvcnQgLm91dDEKKyAgICAgICAgOyAtLShhbGlnbmVkKS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgbW92bnRkcSBYTU1XT1JEIFtyZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbUEKKyAgICAgICAgbW92bnRkcSBYTU1XT1JEIFtyZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbUQKKyAgICAgICAgbW92bnRkcSBYTU1XT1JEIFtyZGkrMipTSVpFT0ZfWE1NV09SRF0sIHhtbUYKKyAgICAgICAgam1wICAgICBzaG9ydCAub3V0MAorLm91dDE6ICA7IC0tKHVuYWxpZ25lZCktLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBtb3ZkcXUgIFhNTVdPUkQgW3JkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tQQorICAgICAgICBtb3ZkcXUgIFhNTVdPUkQgW3JkaSsxKlNJWkVPRl9YTU1XT1JEXSwgeG1tRAorICAgICAgICBtb3ZkcXUgIFhNTVdPUkQgW3JkaSsyKlNJWkVPRl9YTU1XT1JEXSwgeG1tRgogLm91dDA6Ci0JYWRkCXJkaSwgYnl0ZSBSR0JfUElYRUxTSVpFKlNJWkVPRl9YTU1XT1JECTsgb3V0cHRyCi0Jc3ViCXJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAotCWp6CW5lYXIgLm5leHRyb3cKKyAgICAgICAgYWRkICAgICByZGksIGJ5dGUgUkdCX1BJWEVMU0laRSpTSVpFT0ZfWE1NV09SRCAgOyBvdXRwdHIKKyAgICAgICAgc3ViICAgICByY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKyAgICAgICAganogICAgICBuZWFyIC5uZXh0cm93CiAKLQlhZGQJcnNpLCBieXRlIFNJWkVPRl9YTU1XT1JECTsgaW5wdHIwCi0JYWRkCXJieCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IGlucHRyMQotCWFkZAlyZHgsIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBpbnB0cjIKLQlqbXAJbmVhciAuY29sdW1ubG9vcAorICAgICAgICBhZGQgICAgIHJzaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRCAgICAgICAgOyBpbnB0cjAKKyAgICAgICAgYWRkICAgICByYngsIGJ5dGUgU0laRU9GX1hNTVdPUkQgICAgICAgIDsgaW5wdHIxCisgICAgICAgIGFkZCAgICAgcmR4LCBieXRlIFNJWkVPRl9YTU1XT1JEICAgICAgICA7IGlucHRyMgorICAgICAgICBqbXAgICAgIG5lYXIgLmNvbHVtbmxvb3AKIAogLmNvbHVtbl9zdDMyOgotCWxlYQlyY3gsIFtyY3grcmN4KjJdCQk7IGltdWwgZWN4LCBSR0JfUElYRUxTSVpFCi0JY21wCXJjeCwgYnl0ZSAyKlNJWkVPRl9YTU1XT1JECi0JamIJc2hvcnQgLmNvbHVtbl9zdDE2Ci0JbW92ZHF1CVhNTVdPUkQgW3JkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tQQotCW1vdmRxdQlYTU1XT1JEIFtyZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbUQKLQlhZGQJcmRpLCBieXRlIDIqU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKLQltb3ZkcWEJeG1tQSx4bW1GCi0Jc3ViCXJjeCwgYnl0ZSAyKlNJWkVPRl9YTU1XT1JECi0Jam1wCXNob3J0IC5jb2x1bW5fc3QxNQorICAgICAgICBsZWEgICAgIHJjeCwgW3JjeCtyY3gqMl0gICAgICAgICAgICAgICAgOyBpbXVsIGVjeCwgUkdCX1BJWEVMU0laRQorICAgICAgICBjbXAgICAgIHJjeCwgYnl0ZSAyKlNJWkVPRl9YTU1XT1JECisgICAgICAgIGpiICAgICAgc2hvcnQgLmNvbHVtbl9zdDE2CisgICAgICAgIG1vdmRxdSAgWE1NV09SRCBbcmRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW1BCisgICAgICAgIG1vdmRxdSAgWE1NV09SRCBbcmRpKzEqU0laRU9GX1hNTVdPUkRdLCB4bW1ECisgICAgICAgIGFkZCAgICAgcmRpLCBieXRlIDIqU0laRU9GX1hNTVdPUkQgICAgICA7IG91dHB0cgorICAgICAgICBtb3ZkcWEgIHhtbUEseG1tRgorICAgICAgICBzdWIgICAgIHJjeCwgYnl0ZSAyKlNJWkVPRl9YTU1XT1JECisgICAgICAgIGptcCAgICAgc2hvcnQgLmNvbHVtbl9zdDE1CiAuY29sdW1uX3N0MTY6Ci0JY21wCXJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAotCWpiCXNob3J0IC5jb2x1bW5fc3QxNQotCW1vdmRxdQlYTU1XT1JEIFtyZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbUEKLQlhZGQJcmRpLCBieXRlIFNJWkVPRl9YTU1XT1JECTsgb3V0cHRyCi0JbW92ZHFhCXhtbUEseG1tRAotCXN1YglyY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKyAgICAgICAgY21wICAgICByY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKyAgICAgICAgamIgICAgICBzaG9ydCAuY29sdW1uX3N0MTUKKyAgICAgICAgbW92ZHF1ICBYTU1XT1JEIFtyZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbUEKKyAgICAgICAgYWRkICAgICByZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQgICAgICAgIDsgb3V0cHRyCisgICAgICAgIG1vdmRxYSAgeG1tQSx4bW1ECisgICAgICAgIHN1YiAgICAgcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JECiAuY29sdW1uX3N0MTU6Ci0JOyBTdG9yZSB0aGUgbG93ZXIgOCBieXRlcyBvZiB4bW1BIHRvIHRoZSBvdXRwdXQgd2hlbiBpdCBoYXMgZW5vdWdoCi0JOyBzcGFjZS4KLQljbXAJcmN4LCBieXRlIFNJWkVPRl9NTVdPUkQKLQlqYglzaG9ydCAuY29sdW1uX3N0NwotCW1vdnEJWE1NX01NV09SRCBbcmRpXSwgeG1tQQotCWFkZAlyZGksIGJ5dGUgU0laRU9GX01NV09SRAotCXN1YglyY3gsIGJ5dGUgU0laRU9GX01NV09SRAotCXBzcmxkcQl4bW1BLCBTSVpFT0ZfTU1XT1JECisgICAgICAgIDsgU3RvcmUgdGhlIGxvd2VyIDggYnl0ZXMgb2YgeG1tQSB0byB0aGUgb3V0cHV0IHdoZW4gaXQgaGFzIGVub3VnaAorICAgICAgICA7IHNwYWNlLgorICAgICAgICBjbXAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECisgICAgICAgIGpiICAgICAgc2hvcnQgLmNvbHVtbl9zdDcKKyAgICAgICAgbW92cSAgICBYTU1fTU1XT1JEIFtyZGldLCB4bW1BCisgICAgICAgIGFkZCAgICAgcmRpLCBieXRlIFNJWkVPRl9NTVdPUkQKKyAgICAgICAgc3ViICAgICByY3gsIGJ5dGUgU0laRU9GX01NV09SRAorICAgICAgICBwc3JsZHEgIHhtbUEsIFNJWkVPRl9NTVdPUkQKIC5jb2x1bW5fc3Q3OgotCTsgU3RvcmUgdGhlIGxvd2VyIDQgYnl0ZXMgb2YgeG1tQSB0byB0aGUgb3V0cHV0IHdoZW4gaXQgaGFzIGVub3VnaAotCTsgc3BhY2UuCi0JY21wCXJjeCwgYnl0ZSBTSVpFT0ZfRFdPUkQKLQlqYglzaG9ydCAuY29sdW1uX3N0MwotCW1vdmQJWE1NX0RXT1JEIFtyZGldLCB4bW1BCi0JYWRkCXJkaSwgYnl0ZSBTSVpFT0ZfRFdPUkQKLQlzdWIJcmN4LCBieXRlIFNJWkVPRl9EV09SRAotCXBzcmxkcQl4bW1BLCBTSVpFT0ZfRFdPUkQKKyAgICAgICAgOyBTdG9yZSB0aGUgbG93ZXIgNCBieXRlcyBvZiB4bW1BIHRvIHRoZSBvdXRwdXQgd2hlbiBpdCBoYXMgZW5vdWdoCisgICAgICAgIDsgc3BhY2UuCisgICAgICAgIGNtcCAgICAgcmN4LCBieXRlIFNJWkVPRl9EV09SRAorICAgICAgICBqYiAgICAgIHNob3J0IC5jb2x1bW5fc3QzCisgICAgICAgIG1vdmQgICAgWE1NX0RXT1JEIFtyZGldLCB4bW1BCisgICAgICAgIGFkZCAgICAgcmRpLCBieXRlIFNJWkVPRl9EV09SRAorICAgICAgICBzdWIgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfRFdPUkQKKyAgICAgICAgcHNybGRxICB4bW1BLCBTSVpFT0ZfRFdPUkQKIC5jb2x1bW5fc3QzOgotCTsgU3RvcmUgdGhlIGxvd2VyIDIgYnl0ZXMgb2YgcmF4IHRvIHRoZSBvdXRwdXQgd2hlbiBpdCBoYXMgZW5vdWdoCi0JOyBzcGFjZS4KLQltb3ZkCWVheCwgeG1tQQotCWNtcAlyY3gsIGJ5dGUgU0laRU9GX1dPUkQKLQlqYglzaG9ydCAuY29sdW1uX3N0MQotCW1vdglXT1JEIFtyZGldLCBheAotCWFkZAlyZGksIGJ5dGUgU0laRU9GX1dPUkQKLQlzdWIJcmN4LCBieXRlIFNJWkVPRl9XT1JECi0Jc2hyCXJheCwgMTYKKyAgICAgICAgOyBTdG9yZSB0aGUgbG93ZXIgMiBieXRlcyBvZiByYXggdG8gdGhlIG91dHB1dCB3aGVuIGl0IGhhcyBlbm91Z2gKKyAgICAgICAgOyBzcGFjZS4KKyAgICAgICAgbW92ZCAgICBlYXgsIHhtbUEKKyAgICAgICAgY21wICAgICByY3gsIGJ5dGUgU0laRU9GX1dPUkQKKyAgICAgICAgamIgICAgICBzaG9ydCAuY29sdW1uX3N0MQorICAgICAgICBtb3YgICAgIFdPUkQgW3JkaV0sIGF4CisgICAgICAgIGFkZCAgICAgcmRpLCBieXRlIFNJWkVPRl9XT1JECisgICAgICAgIHN1YiAgICAgcmN4LCBieXRlIFNJWkVPRl9XT1JECisgICAgICAgIHNociAgICAgcmF4LCAxNgogLmNvbHVtbl9zdDE6Ci0JOyBTdG9yZSB0aGUgbG93ZXIgMSBieXRlIG9mIHJheCB0byB0aGUgb3V0cHV0IHdoZW4gaXQgaGFzIGVub3VnaAotCTsgc3BhY2UuCi0JdGVzdAlyY3gsIHJjeAotCWp6CXNob3J0IC5uZXh0cm93Ci0JbW92CUJZVEUgW3JkaV0sIGFsCisgICAgICAgIDsgU3RvcmUgdGhlIGxvd2VyIDEgYnl0ZSBvZiByYXggdG8gdGhlIG91dHB1dCB3aGVuIGl0IGhhcyBlbm91Z2gKKyAgICAgICAgOyBzcGFjZS4KKyAgICAgICAgdGVzdCAgICByY3gsIHJjeAorICAgICAgICBqeiAgICAgIHNob3J0IC5uZXh0cm93CisgICAgICAgIG1vdiAgICAgQllURSBbcmRpXSwgYWwKIAogJWVsc2UgOyBSR0JfUElYRUxTSVpFID09IDQgOyAtLS0tLS0tLS0tLQogCiAlaWZkZWYgUkdCWF9GSUxMRVJfMFhGRgotCXBjbXBlcWIgICB4bW02LHhtbTYJCTsgeG1tNj1YRT1YKDAyNDY4QUNFKioqKioqKiopCi0JcGNtcGVxYiAgIHhtbTcseG1tNwkJOyB4bW03PVhPPVgoMTM1NzlCREYqKioqKioqKikKKyAgICAgICAgcGNtcGVxYiAgIHhtbTYseG1tNiAgICAgICAgICAgICA7IHhtbTY9WEU9WCgwMjQ2OEFDRSoqKioqKioqKQorICAgICAgICBwY21wZXFiICAgeG1tNyx4bW03ICAgICAgICAgICAgIDsgeG1tNz1YTz1YKDEzNTc5QkRGKioqKioqKiopCiAlZWxzZQotCXB4b3IgICAgICB4bW02LHhtbTYJCTsgeG1tNj1YRT1YKDAyNDY4QUNFKioqKioqKiopCi0JcHhvciAgICAgIHhtbTcseG1tNwkJOyB4bW03PVhPPVgoMTM1NzlCREYqKioqKioqKikKKyAgICAgICAgcHhvciAgICAgIHhtbTYseG1tNiAgICAgICAgICAgICA7IHhtbTY9WEU9WCgwMjQ2OEFDRSoqKioqKioqKQorICAgICAgICBweG9yICAgICAgeG1tNyx4bW03ICAgICAgICAgICAgIDsgeG1tNz1YTz1YKDEzNTc5QkRGKioqKioqKiopCiAlZW5kaWYKLQk7IHhtbUE9KDAwIDAyIDA0IDA2IDA4IDBBIDBDIDBFICoqKSwgeG1tQj0oMDEgMDMgMDUgMDcgMDkgMEIgMEQgMEYgKiopCi0JOyB4bW1DPSgxMCAxMiAxNCAxNiAxOCAxQSAxQyAxRSAqKiksIHhtbUQ9KDExIDEzIDE1IDE3IDE5IDFCIDFEIDFGICoqKQotCTsgeG1tRT0oMjAgMjIgMjQgMjYgMjggMkEgMkMgMkUgKiopLCB4bW1GPSgyMSAyMyAyNSAyNyAyOSAyQiAyRCAyRiAqKikKLQk7IHhtbUc9KDMwIDMyIDM0IDM2IDM4IDNBIDNDIDNFICoqKSwgeG1tSD0oMzEgMzMgMzUgMzcgMzkgM0IgM0QgM0YgKiopCisgICAgICAgIDsgeG1tQT0oMDAgMDIgMDQgMDYgMDggMEEgMEMgMEUgKiopLCB4bW1CPSgwMSAwMyAwNSAwNyAwOSAwQiAwRCAwRiAqKikKKyAgICAgICAgOyB4bW1DPSgxMCAxMiAxNCAxNiAxOCAxQSAxQyAxRSAqKiksIHhtbUQ9KDExIDEzIDE1IDE3IDE5IDFCIDFEIDFGICoqKQorICAgICAgICA7IHhtbUU9KDIwIDIyIDI0IDI2IDI4IDJBIDJDIDJFICoqKSwgeG1tRj0oMjEgMjMgMjUgMjcgMjkgMkIgMkQgMkYgKiopCisgICAgICAgIDsgeG1tRz0oMzAgMzIgMzQgMzYgMzggM0EgM0MgM0UgKiopLCB4bW1IPSgzMSAzMyAzNSAzNyAzOSAzQiAzRCAzRiAqKikKIAotCXB1bnBja2xidyB4bW1BLHhtbUMJOyB4bW1BPSgwMCAxMCAwMiAxMiAwNCAxNCAwNiAxNiAwOCAxOCAwQSAxQSAwQyAxQyAwRSAxRSkKLQlwdW5wY2tsYncgeG1tRSx4bW1HCTsgeG1tRT0oMjAgMzAgMjIgMzIgMjQgMzQgMjYgMzYgMjggMzggMkEgM0EgMkMgM0MgMkUgM0UpCi0JcHVucGNrbGJ3IHhtbUIseG1tRAk7IHhtbUI9KDAxIDExIDAzIDEzIDA1IDE1IDA3IDE3IDA5IDE5IDBCIDFCIDBEIDFEIDBGIDFGKQotCXB1bnBja2xidyB4bW1GLHhtbUgJOyB4bW1GPSgyMSAzMSAyMyAzMyAyNSAzNSAyNyAzNyAyOSAzOSAyQiAzQiAyRCAzRCAyRiAzRikKKyAgICAgICAgcHVucGNrbGJ3IHhtbUEseG1tQyAgICAgOyB4bW1BPSgwMCAxMCAwMiAxMiAwNCAxNCAwNiAxNiAwOCAxOCAwQSAxQSAwQyAxQyAwRSAxRSkKKyAgICAgICAgcHVucGNrbGJ3IHhtbUUseG1tRyAgICAgOyB4bW1FPSgyMCAzMCAyMiAzMiAyNCAzNCAyNiAzNiAyOCAzOCAyQSAzQSAyQyAzQyAyRSAzRSkKKyAgICAgICAgcHVucGNrbGJ3IHhtbUIseG1tRCAgICAgOyB4bW1CPSgwMSAxMSAwMyAxMyAwNSAxNSAwNyAxNyAwOSAxOSAwQiAxQiAwRCAxRCAwRiAxRikKKyAgICAgICAgcHVucGNrbGJ3IHhtbUYseG1tSCAgICAgOyB4bW1GPSgyMSAzMSAyMyAzMyAyNSAzNSAyNyAzNyAyOSAzOSAyQiAzQiAyRCAzRCAyRiAzRikKIAotCW1vdmRxYSAgICB4bW1DLHhtbUEKLQlwdW5wY2tsd2QgeG1tQSx4bW1FCTsgeG1tQT0oMDAgMTAgMjAgMzAgMDIgMTIgMjIgMzIgMDQgMTQgMjQgMzQgMDYgMTYgMjYgMzYpCi0JcHVucGNraHdkIHhtbUMseG1tRQk7IHhtbUM9KDA4IDE4IDI4IDM4IDBBIDFBIDJBIDNBIDBDIDFDIDJDIDNDIDBFIDFFIDJFIDNFKQotCW1vdmRxYSAgICB4bW1HLHhtbUIKLQlwdW5wY2tsd2QgeG1tQix4bW1GCTsgeG1tQj0oMDEgMTEgMjEgMzEgMDMgMTMgMjMgMzMgMDUgMTUgMjUgMzUgMDcgMTcgMjcgMzcpCi0JcHVucGNraHdkIHhtbUcseG1tRgk7IHhtbUc9KDA5IDE5IDI5IDM5IDBCIDFCIDJCIDNCIDBEIDFEIDJEIDNEIDBGIDFGIDJGIDNGKQorICAgICAgICBtb3ZkcWEgICAgeG1tQyx4bW1BCisgICAgICAgIHB1bnBja2x3ZCB4bW1BLHhtbUUgICAgIDsgeG1tQT0oMDAgMTAgMjAgMzAgMDIgMTIgMjIgMzIgMDQgMTQgMjQgMzQgMDYgMTYgMjYgMzYpCisgICAgICAgIHB1bnBja2h3ZCB4bW1DLHhtbUUgICAgIDsgeG1tQz0oMDggMTggMjggMzggMEEgMUEgMkEgM0EgMEMgMUMgMkMgM0MgMEUgMUUgMkUgM0UpCisgICAgICAgIG1vdmRxYSAgICB4bW1HLHhtbUIKKyAgICAgICAgcHVucGNrbHdkIHhtbUIseG1tRiAgICAgOyB4bW1CPSgwMSAxMSAyMSAzMSAwMyAxMyAyMyAzMyAwNSAxNSAyNSAzNSAwNyAxNyAyNyAzNykKKyAgICAgICAgcHVucGNraHdkIHhtbUcseG1tRiAgICAgOyB4bW1HPSgwOSAxOSAyOSAzOSAwQiAxQiAyQiAzQiAwRCAxRCAyRCAzRCAwRiAxRiAyRiAzRikKIAotCW1vdmRxYSAgICB4bW1ELHhtbUEKLQlwdW5wY2tsZHEgeG1tQSx4bW1CCTsgeG1tQT0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEgMDIgMTIgMjIgMzIgMDMgMTMgMjMgMzMpCi0JcHVucGNraGRxIHhtbUQseG1tQgk7IHhtbUQ9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1IDA2IDE2IDI2IDM2IDA3IDE3IDI3IDM3KQotCW1vdmRxYSAgICB4bW1ILHhtbUMKLQlwdW5wY2tsZHEgeG1tQyx4bW1HCTsgeG1tQz0oMDggMTggMjggMzggMDkgMTkgMjkgMzkgMEEgMUEgMkEgM0EgMEIgMUIgMkIgM0IpCi0JcHVucGNraGRxIHhtbUgseG1tRwk7IHhtbUg9KDBDIDFDIDJDIDNDIDBEIDFEIDJEIDNEIDBFIDFFIDJFIDNFIDBGIDFGIDJGIDNGKQorICAgICAgICBtb3ZkcWEgICAgeG1tRCx4bW1BCisgICAgICAgIHB1bnBja2xkcSB4bW1BLHhtbUIgICAgIDsgeG1tQT0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEgMDIgMTIgMjIgMzIgMDMgMTMgMjMgMzMpCisgICAgICAgIHB1bnBja2hkcSB4bW1ELHhtbUIgICAgIDsgeG1tRD0oMDQgMTQgMjQgMzQgMDUgMTUgMjUgMzUgMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCisgICAgICAgIG1vdmRxYSAgICB4bW1ILHhtbUMKKyAgICAgICAgcHVucGNrbGRxIHhtbUMseG1tRyAgICAgOyB4bW1DPSgwOCAxOCAyOCAzOCAwOSAxOSAyOSAzOSAwQSAxQSAyQSAzQSAwQiAxQiAyQiAzQikKKyAgICAgICAgcHVucGNraGRxIHhtbUgseG1tRyAgICAgOyB4bW1IPSgwQyAxQyAyQyAzQyAwRCAxRCAyRCAzRCAwRSAxRSAyRSAzRSAwRiAxRiAyRiAzRikKIAotCWNtcAlyY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKLQlqYglzaG9ydCAuY29sdW1uX3N0MzIKKyAgICAgICAgY21wICAgICByY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKyAgICAgICAgamIgICAgICBzaG9ydCAuY29sdW1uX3N0MzIKIAotCXRlc3QJcmRpLCBTSVpFT0ZfWE1NV09SRC0xCi0Jam56CXNob3J0IC5vdXQxCi0JOyAtLShhbGlnbmVkKS0tLS0tLS0tLS0tLS0tLS0tLS0KLQltb3ZudGRxCVhNTVdPUkQgW3JkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tQQotCW1vdm50ZHEJWE1NV09SRCBbcmRpKzEqU0laRU9GX1hNTVdPUkRdLCB4bW1ECi0JbW92bnRkcQlYTU1XT1JEIFtyZGkrMipTSVpFT0ZfWE1NV09SRF0sIHhtbUMKLQltb3ZudGRxCVhNTVdPUkQgW3JkaSszKlNJWkVPRl9YTU1XT1JEXSwgeG1tSAotCWptcAlzaG9ydCAub3V0MAotLm91dDE6CTsgLS0odW5hbGlnbmVkKS0tLS0tLS0tLS0tLS0tLS0tCi0JbW92ZHF1CVhNTVdPUkQgW3JkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tQQotCW1vdmRxdQlYTU1XT1JEIFtyZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbUQKLQltb3ZkcXUJWE1NV09SRCBbcmRpKzIqU0laRU9GX1hNTVdPUkRdLCB4bW1DCi0JbW92ZHF1CVhNTVdPUkQgW3JkaSszKlNJWkVPRl9YTU1XT1JEXSwgeG1tSAorICAgICAgICB0ZXN0ICAgIHJkaSwgU0laRU9GX1hNTVdPUkQtMQorICAgICAgICBqbnogICAgIHNob3J0IC5vdXQxCisgICAgICAgIDsgLS0oYWxpZ25lZCktLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIG1vdm50ZHEgWE1NV09SRCBbcmRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW1BCisgICAgICAgIG1vdm50ZHEgWE1NV09SRCBbcmRpKzEqU0laRU9GX1hNTVdPUkRdLCB4bW1ECisgICAgICAgIG1vdm50ZHEgWE1NV09SRCBbcmRpKzIqU0laRU9GX1hNTVdPUkRdLCB4bW1DCisgICAgICAgIG1vdm50ZHEgWE1NV09SRCBbcmRpKzMqU0laRU9GX1hNTVdPUkRdLCB4bW1ICisgICAgICAgIGptcCAgICAgc2hvcnQgLm91dDAKKy5vdXQxOiAgOyAtLSh1bmFsaWduZWQpLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgbW92ZHF1ICBYTU1XT1JEIFtyZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbUEKKyAgICAgICAgbW92ZHF1ICBYTU1XT1JEIFtyZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbUQKKyAgICAgICAgbW92ZHF1ICBYTU1XT1JEIFtyZGkrMipTSVpFT0ZfWE1NV09SRF0sIHhtbUMKKyAgICAgICAgbW92ZHF1ICBYTU1XT1JEIFtyZGkrMypTSVpFT0ZfWE1NV09SRF0sIHhtbUgKIC5vdXQwOgotCWFkZAlyZGksIGJ5dGUgUkdCX1BJWEVMU0laRSpTSVpFT0ZfWE1NV09SRAk7IG91dHB0cgotCXN1YglyY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKLQlqegluZWFyIC5uZXh0cm93CisgICAgICAgIGFkZCAgICAgcmRpLCBieXRlIFJHQl9QSVhFTFNJWkUqU0laRU9GX1hNTVdPUkQgIDsgb3V0cHRyCisgICAgICAgIHN1YiAgICAgcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JECisgICAgICAgIGp6ICAgICAgbmVhciAubmV4dHJvdwogCi0JYWRkCXJzaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IGlucHRyMAotCWFkZAlyYngsIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBpbnB0cjEKLQlhZGQJcmR4LCBieXRlIFNJWkVPRl9YTU1XT1JECTsgaW5wdHIyCi0Jam1wCW5lYXIgLmNvbHVtbmxvb3AKKyAgICAgICAgYWRkICAgICByc2ksIGJ5dGUgU0laRU9GX1hNTVdPUkQgICAgICAgIDsgaW5wdHIwCisgICAgICAgIGFkZCAgICAgcmJ4LCBieXRlIFNJWkVPRl9YTU1XT1JEICAgICAgICA7IGlucHRyMQorICAgICAgICBhZGQgICAgIHJkeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRCAgICAgICAgOyBpbnB0cjIKKyAgICAgICAgam1wICAgICBuZWFyIC5jb2x1bW5sb29wCiAKIC5jb2x1bW5fc3QzMjoKLQljbXAJcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzIKLQlqYglzaG9ydCAuY29sdW1uX3N0MTYKLQltb3ZkcXUJWE1NV09SRCBbcmRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW1BCi0JbW92ZHF1CVhNTVdPUkQgW3JkaSsxKlNJWkVPRl9YTU1XT1JEXSwgeG1tRAotCWFkZAlyZGksIGJ5dGUgMipTSVpFT0ZfWE1NV09SRAk7IG91dHB0cgotCW1vdmRxYQl4bW1BLHhtbUMKLQltb3ZkcWEJeG1tRCx4bW1ICi0Jc3ViCXJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC8yCisgICAgICAgIGNtcCAgICAgcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzIKKyAgICAgICAgamIgICAgICBzaG9ydCAuY29sdW1uX3N0MTYKKyAgICAgICAgbW92ZHF1ICBYTU1XT1JEIFtyZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbUEKKyAgICAgICAgbW92ZHF1ICBYTU1XT1JEIFtyZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbUQKKyAgICAgICAgYWRkICAgICByZGksIGJ5dGUgMipTSVpFT0ZfWE1NV09SRCAgICAgIDsgb3V0cHRyCisgICAgICAgIG1vdmRxYSAgeG1tQSx4bW1DCisgICAgICAgIG1vdmRxYSAgeG1tRCx4bW1ICisgICAgICAgIHN1YiAgICAgcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzIKIC5jb2x1bW5fc3QxNjoKLQljbXAJcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzQKLQlqYglzaG9ydCAuY29sdW1uX3N0MTUKLQltb3ZkcXUJWE1NV09SRCBbcmRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW1BCi0JYWRkCXJkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IG91dHB0cgotCW1vdmRxYQl4bW1BLHhtbUQKLQlzdWIJcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzQKKyAgICAgICAgY21wICAgICByY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQvNAorICAgICAgICBqYiAgICAgIHNob3J0IC5jb2x1bW5fc3QxNQorICAgICAgICBtb3ZkcXUgIFhNTVdPUkQgW3JkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tQQorICAgICAgICBhZGQgICAgIHJkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRCAgICAgICAgOyBvdXRwdHIKKyAgICAgICAgbW92ZHFhICB4bW1BLHhtbUQKKyAgICAgICAgc3ViICAgICByY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQvNAogLmNvbHVtbl9zdDE1OgotCTsgU3RvcmUgdHdvIHBpeGVscyAoOCBieXRlcykgb2YgeG1tQSB0byB0aGUgb3V0cHV0IHdoZW4gaXQgaGFzIGVub3VnaAotCTsgc3BhY2UuCi0JY21wCXJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC84Ci0JamIJc2hvcnQgLmNvbHVtbl9zdDcKLQltb3ZxCU1NV09SRCBbcmRpXSwgeG1tQQotCWFkZAlyZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQvOCo0Ci0Jc3ViCXJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC84Ci0JcHNybGRxCXhtbUEsIFNJWkVPRl9YTU1XT1JELzgqNAorICAgICAgICA7IFN0b3JlIHR3byBwaXhlbHMgKDggYnl0ZXMpIG9mIHhtbUEgdG8gdGhlIG91dHB1dCB3aGVuIGl0IGhhcyBlbm91Z2gKKyAgICAgICAgOyBzcGFjZS4KKyAgICAgICAgY21wICAgICByY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQvOAorICAgICAgICBqYiAgICAgIHNob3J0IC5jb2x1bW5fc3Q3CisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtyZGldLCB4bW1BCisgICAgICAgIGFkZCAgICAgcmRpLCBieXRlIFNJWkVPRl9YTU1XT1JELzgqNAorICAgICAgICBzdWIgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC84CisgICAgICAgIHBzcmxkcSAgeG1tQSwgU0laRU9GX1hNTVdPUkQvOCo0CiAuY29sdW1uX3N0NzoKLQk7IFN0b3JlIG9uZSBwaXhlbCAoNCBieXRlcykgb2YgeG1tQSB0byB0aGUgb3V0cHV0IHdoZW4gaXQgaGFzIGVub3VnaAotCTsgc3BhY2UuCi0JdGVzdAlyY3gsIHJjeAotCWp6CXNob3J0IC5uZXh0cm93Ci0JbW92ZAlYTU1fRFdPUkQgW3JkaV0sIHhtbUEKKyAgICAgICAgOyBTdG9yZSBvbmUgcGl4ZWwgKDQgYnl0ZXMpIG9mIHhtbUEgdG8gdGhlIG91dHB1dCB3aGVuIGl0IGhhcyBlbm91Z2gKKyAgICAgICAgOyBzcGFjZS4KKyAgICAgICAgdGVzdCAgICByY3gsIHJjeAorICAgICAgICBqeiAgICAgIHNob3J0IC5uZXh0cm93CisgICAgICAgIG1vdmQgICAgWE1NX0RXT1JEIFtyZGldLCB4bW1BCiAKICVlbmRpZiA7IFJHQl9QSVhFTFNJWkUgOyAtLS0tLS0tLS0tLS0tLS0KIAogLm5leHRyb3c6Ci0JcG9wCXJjeAotCXBvcAlyc2kKLQlwb3AJcmJ4Ci0JcG9wCXJkeAotCXBvcAlyZGkKLQlwb3AJcmF4CisgICAgICAgIHBvcCAgICAgcmN4CisgICAgICAgIHBvcCAgICAgcnNpCisgICAgICAgIHBvcCAgICAgcmJ4CisgICAgICAgIHBvcCAgICAgcmR4CisgICAgICAgIHBvcCAgICAgcmRpCisgICAgICAgIHBvcCAgICAgcmF4CiAKLQlhZGQJcnNpLCBieXRlIFNJWkVPRl9KU0FNUFJPVwotCWFkZAlyYngsIGJ5dGUgU0laRU9GX0pTQU1QUk9XCi0JYWRkCXJkeCwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cKLQlhZGQJcmRpLCBieXRlIFNJWkVPRl9KU0FNUFJPVwk7IG91dHB1dF9idWYKLQlkZWMJcmF4CQkJCTsgbnVtX3Jvd3MKLQlqZwluZWFyIC5yb3dsb29wCisgICAgICAgIGFkZCAgICAgcnNpLCBieXRlIFNJWkVPRl9KU0FNUFJPVworICAgICAgICBhZGQgICAgIHJieCwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cKKyAgICAgICAgYWRkICAgICByZHgsIGJ5dGUgU0laRU9GX0pTQU1QUk9XCisgICAgICAgIGFkZCAgICAgcmRpLCBieXRlIFNJWkVPRl9KU0FNUFJPVyAgICAgICA7IG91dHB1dF9idWYKKyAgICAgICAgZGVjICAgICByYXggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgbnVtX3Jvd3MKKyAgICAgICAgamcgICAgICBuZWFyIC5yb3dsb29wCiAKLQlzZmVuY2UJCTsgZmx1c2ggdGhlIHdyaXRlIGJ1ZmZlcgorICAgICAgICBzZmVuY2UgICAgICAgICAgOyBmbHVzaCB0aGUgd3JpdGUgYnVmZmVyCiAKIC5yZXR1cm46Ci0JcG9wCXJieAotCXVuY29sbGVjdF9hcmdzCi0JbW92CXJzcCxyYnAJCTsgcnNwIDwtIGFsaWduZWQgcmJwCi0JcG9wCXJzcAkJOyByc3AgPC0gb3JpZ2luYWwgcmJwCi0JcG9wCXJicAotCXJldAorICAgICAgICBwb3AgICAgIHJieAorICAgICAgICB1bmNvbGxlY3RfYXJncworICAgICAgICBtb3YgICAgIHJzcCxyYnAgICAgICAgICA7IHJzcCA8LSBhbGlnbmVkIHJicAorICAgICAgICBwb3AgICAgIHJzcCAgICAgICAgICAgICA7IHJzcCA8LSBvcmlnaW5hbCByYnAKKyAgICAgICAgcG9wICAgICByYnAKKyAgICAgICAgcmV0CiAKIDsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCiA7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCi0JYWxpZ24JMTYKKyAgICAgICAgYWxpZ24gICAxNgpkaWZmIC0tZ2l0IGEvc2ltZC9qZGNscnNzMi5hc20gYi9zaW1kL2pkY2xyc3MyLmFzbQppbmRleCA5Nzc1NGNiLi4wN2I0ZmNmIDEwMDY0NAotLS0gYS9zaW1kL2pkY2xyc3MyLmFzbQorKysgYi9zaW1kL2pkY2xyc3MyLmFzbQpAQCAtMTgsNyArMTgsNyBAQAogOyBbVEFCOF0KIAogJWluY2x1ZGUgImpjb2xzYW1wLmluYyIKLQkJCQkKKwogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogOwogOyBDb252ZXJ0IHNvbWUgcm93cyBvZiBzYW1wbGVzIHRvIHRoZSBvdXRwdXQgY29sb3JzcGFjZS4KQEAgLTI5LDQzMiArMjksNDMyIEBACiA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIGludCBudW1fcm93cykKIDsKIAotJWRlZmluZSBvdXRfd2lkdGgoYikJKGIpKzgJCQk7IEpESU1FTlNJT04gb3V0X3dpZHRoCi0lZGVmaW5lIGlucHV0X2J1ZihiKQkoYikrMTIJCTsgSlNBTVBJTUFHRSBpbnB1dF9idWYKLSVkZWZpbmUgaW5wdXRfcm93KGIpCShiKSsxNgkJOyBKRElNRU5TSU9OIGlucHV0X3JvdwotJWRlZmluZSBvdXRwdXRfYnVmKGIpCShiKSsyMAkJOyBKU0FNUEFSUkFZIG91dHB1dF9idWYKLSVkZWZpbmUgbnVtX3Jvd3MoYikJKGIpKzI0CQk7IGludCBudW1fcm93cworJWRlZmluZSBvdXRfd2lkdGgoYikgICAgKGIpKzggICAgICAgICAgIDsgSkRJTUVOU0lPTiBvdXRfd2lkdGgKKyVkZWZpbmUgaW5wdXRfYnVmKGIpICAgIChiKSsxMiAgICAgICAgICA7IEpTQU1QSU1BR0UgaW5wdXRfYnVmCislZGVmaW5lIGlucHV0X3JvdyhiKSAgICAoYikrMTYgICAgICAgICAgOyBKRElNRU5TSU9OIGlucHV0X3JvdworJWRlZmluZSBvdXRwdXRfYnVmKGIpICAgKGIpKzIwICAgICAgICAgIDsgSlNBTVBBUlJBWSBvdXRwdXRfYnVmCislZGVmaW5lIG51bV9yb3dzKGIpICAgICAoYikrMjQgICAgICAgICAgOyBpbnQgbnVtX3Jvd3MKIAotJWRlZmluZSBvcmlnaW5hbF9lYnAJZWJwKzAKLSVkZWZpbmUgd2soaSkJCWVicC0oV0tfTlVNLShpKSkqU0laRU9GX1hNTVdPUkQJOyB4bW13b3JkIHdrW1dLX05VTV0KLSVkZWZpbmUgV0tfTlVNCQkyCi0lZGVmaW5lIGdvdHB0cgkJd2soMCktU0laRU9GX1BPSU5URVIJOyB2b2lkICogZ290cHRyCislZGVmaW5lIG9yaWdpbmFsX2VicCAgICBlYnArMAorJWRlZmluZSB3ayhpKSAgICAgICAgICAgZWJwLShXS19OVU0tKGkpKSpTSVpFT0ZfWE1NV09SRCA7IHhtbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0gICAgICAgICAgMgorJWRlZmluZSBnb3RwdHIgICAgICAgICAgd2soMCktU0laRU9GX1BPSU5URVIgICAgOyB2b2lkICogZ290cHRyCiAKLQlhbGlnbgkxNgotCWdsb2JhbAlFWFROKGpzaW1kX3ljY19yZ2JfY29udmVydF9zc2UyKQorICAgICAgICBhbGlnbiAgIDE2CisgICAgICAgIGdsb2JhbCAgRVhUTihqc2ltZF95Y2NfcmdiX2NvbnZlcnRfc3NlMikKIAogRVhUTihqc2ltZF95Y2NfcmdiX2NvbnZlcnRfc3NlMik6Ci0JcHVzaAllYnAKLQltb3YJZWF4LGVzcAkJCQk7IGVheCA9IG9yaWdpbmFsIGVicAotCXN1Ygllc3AsIGJ5dGUgNAotCWFuZAllc3AsIGJ5dGUgKC1TSVpFT0ZfWE1NV09SRCkJOyBhbGlnbiB0byAxMjggYml0cwotCW1vdglbZXNwXSxlYXgKLQltb3YJZWJwLGVzcAkJCQk7IGVicCA9IGFsaWduZWQgZWJwCi0JbGVhCWVzcCwgW3drKDApXQotCXB1c2hwaWMJZWF4CQk7IG1ha2UgYSByb29tIGZvciBHT1QgYWRkcmVzcwotCXB1c2gJZWJ4Ci07CXB1c2gJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLQlwdXNoCWVzaQotCXB1c2gJZWRpCisgICAgICAgIHB1c2ggICAgZWJwCisgICAgICAgIG1vdiAgICAgZWF4LGVzcCAgICAgICAgICAgICAgICAgICAgICAgICA7IGVheCA9IG9yaWdpbmFsIGVicAorICAgICAgICBzdWIgICAgIGVzcCwgYnl0ZSA0CisgICAgICAgIGFuZCAgICAgZXNwLCBieXRlICgtU0laRU9GX1hNTVdPUkQpICAgICA7IGFsaWduIHRvIDEyOCBiaXRzCisgICAgICAgIG1vdiAgICAgW2VzcF0sZWF4CisgICAgICAgIG1vdiAgICAgZWJwLGVzcCAgICAgICAgICAgICAgICAgICAgICAgICA7IGVicCA9IGFsaWduZWQgZWJwCisgICAgICAgIGxlYSAgICAgZXNwLCBbd2soMCldCisgICAgICAgIHB1c2hwaWMgZWF4ICAgICAgICAgICAgIDsgbWFrZSBhIHJvb20gZm9yIEdPVCBhZGRyZXNzCisgICAgICAgIHB1c2ggICAgZWJ4Cis7ICAgICAgIHB1c2ggICAgZWN4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgICAgIHB1c2ggICAgZWR4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgICAgIHB1c2ggICAgZXNpCisgICAgICAgIHB1c2ggICAgZWRpCiAKLQlnZXRfR09UCWVieAkJCTsgZ2V0IEdPVCBhZGRyZXNzCi0JbW92cGljCVBPSU5URVIgW2dvdHB0cl0sIGVieAk7IHNhdmUgR09UIGFkZHJlc3MKKyAgICAgICAgZ2V0X0dPVCBlYnggICAgICAgICAgICAgICAgICAgICA7IGdldCBHT1QgYWRkcmVzcworICAgICAgICBtb3ZwaWMgIFBPSU5URVIgW2dvdHB0cl0sIGVieCAgIDsgc2F2ZSBHT1QgYWRkcmVzcwogCi0JbW92CWVjeCwgSkRJTUVOU0lPTiBbb3V0X3dpZHRoKGVheCldCTsgbnVtX2NvbHMKLQl0ZXN0CWVjeCxlY3gKLQlqegluZWFyIC5yZXR1cm4KKyAgICAgICAgbW92ICAgICBlY3gsIEpESU1FTlNJT04gW291dF93aWR0aChlYXgpXSAgICAgICAgOyBudW1fY29scworICAgICAgICB0ZXN0ICAgIGVjeCxlY3gKKyAgICAgICAganogICAgICBuZWFyIC5yZXR1cm4KIAotCXB1c2gJZWN4CisgICAgICAgIHB1c2ggICAgZWN4CiAKLQltb3YJZWRpLCBKU0FNUElNQUdFIFtpbnB1dF9idWYoZWF4KV0KLQltb3YJZWN4LCBKRElNRU5TSU9OIFtpbnB1dF9yb3coZWF4KV0KLQltb3YJZXNpLCBKU0FNUEFSUkFZIFtlZGkrMCpTSVpFT0ZfSlNBTVBBUlJBWV0KLQltb3YJZWJ4LCBKU0FNUEFSUkFZIFtlZGkrMSpTSVpFT0ZfSlNBTVBBUlJBWV0KLQltb3YJZWR4LCBKU0FNUEFSUkFZIFtlZGkrMipTSVpFT0ZfSlNBTVBBUlJBWV0KLQlsZWEJZXNpLCBbZXNpK2VjeCpTSVpFT0ZfSlNBTVBST1ddCi0JbGVhCWVieCwgW2VieCtlY3gqU0laRU9GX0pTQU1QUk9XXQotCWxlYQllZHgsIFtlZHgrZWN4KlNJWkVPRl9KU0FNUFJPV10KKyAgICAgICAgbW92ICAgICBlZGksIEpTQU1QSU1BR0UgW2lucHV0X2J1ZihlYXgpXQorICAgICAgICBtb3YgICAgIGVjeCwgSkRJTUVOU0lPTiBbaW5wdXRfcm93KGVheCldCisgICAgICAgIG1vdiAgICAgZXNpLCBKU0FNUEFSUkFZIFtlZGkrMCpTSVpFT0ZfSlNBTVBBUlJBWV0KKyAgICAgICAgbW92ICAgICBlYngsIEpTQU1QQVJSQVkgW2VkaSsxKlNJWkVPRl9KU0FNUEFSUkFZXQorICAgICAgICBtb3YgICAgIGVkeCwgSlNBTVBBUlJBWSBbZWRpKzIqU0laRU9GX0pTQU1QQVJSQVldCisgICAgICAgIGxlYSAgICAgZXNpLCBbZXNpK2VjeCpTSVpFT0ZfSlNBTVBST1ddCisgICAgICAgIGxlYSAgICAgZWJ4LCBbZWJ4K2VjeCpTSVpFT0ZfSlNBTVBST1ddCisgICAgICAgIGxlYSAgICAgZWR4LCBbZWR4K2VjeCpTSVpFT0ZfSlNBTVBST1ddCiAKLQlwb3AJZWN4CisgICAgICAgIHBvcCAgICAgZWN4CiAKLQltb3YJZWRpLCBKU0FNUEFSUkFZIFtvdXRwdXRfYnVmKGVheCldCi0JbW92CWVheCwgSU5UIFtudW1fcm93cyhlYXgpXQotCXRlc3QJZWF4LGVheAotCWpsZQluZWFyIC5yZXR1cm4KLQlhbGlnbngJMTYsNworICAgICAgICBtb3YgICAgIGVkaSwgSlNBTVBBUlJBWSBbb3V0cHV0X2J1ZihlYXgpXQorICAgICAgICBtb3YgICAgIGVheCwgSU5UIFtudW1fcm93cyhlYXgpXQorICAgICAgICB0ZXN0ICAgIGVheCxlYXgKKyAgICAgICAgamxlICAgICBuZWFyIC5yZXR1cm4KKyAgICAgICAgYWxpZ254ICAxNiw3CiAucm93bG9vcDoKLQlwdXNoCWVheAotCXB1c2gJZWRpCi0JcHVzaAllZHgKLQlwdXNoCWVieAotCXB1c2gJZXNpCi0JcHVzaAllY3gJCQk7IGNvbAorICAgICAgICBwdXNoICAgIGVheAorICAgICAgICBwdXNoICAgIGVkaQorICAgICAgICBwdXNoICAgIGVkeAorICAgICAgICBwdXNoICAgIGVieAorICAgICAgICBwdXNoICAgIGVzaQorICAgICAgICBwdXNoICAgIGVjeCAgICAgICAgICAgICAgICAgICAgIDsgY29sCiAKLQltb3YJZXNpLCBKU0FNUFJPVyBbZXNpXQk7IGlucHRyMAotCW1vdgllYngsIEpTQU1QUk9XIFtlYnhdCTsgaW5wdHIxCi0JbW92CWVkeCwgSlNBTVBST1cgW2VkeF0JOyBpbnB0cjIKLQltb3YJZWRpLCBKU0FNUFJPVyBbZWRpXQk7IG91dHB0cgotCW1vdnBpYwllYXgsIFBPSU5URVIgW2dvdHB0cl0JOyBsb2FkIEdPVCBhZGRyZXNzIChlYXgpCi0JYWxpZ254CTE2LDcKKyAgICAgICAgbW92ICAgICBlc2ksIEpTQU1QUk9XIFtlc2ldICAgICA7IGlucHRyMAorICAgICAgICBtb3YgICAgIGVieCwgSlNBTVBST1cgW2VieF0gICAgIDsgaW5wdHIxCisgICAgICAgIG1vdiAgICAgZWR4LCBKU0FNUFJPVyBbZWR4XSAgICAgOyBpbnB0cjIKKyAgICAgICAgbW92ICAgICBlZGksIEpTQU1QUk9XIFtlZGldICAgICA7IG91dHB0cgorICAgICAgICBtb3ZwaWMgIGVheCwgUE9JTlRFUiBbZ290cHRyXSAgIDsgbG9hZCBHT1QgYWRkcmVzcyAoZWF4KQorICAgICAgICBhbGlnbnggIDE2LDcKIC5jb2x1bW5sb29wOgogCi0JbW92ZHFhCXhtbTUsIFhNTVdPUkQgW2VieF0JOyB4bW01PUNiKDAxMjM0NTY3ODlBQkNERUYpCi0JbW92ZHFhCXhtbTEsIFhNTVdPUkQgW2VkeF0JOyB4bW0xPUNyKDAxMjM0NTY3ODlBQkNERUYpCisgICAgICAgIG1vdmRxYSAgeG1tNSwgWE1NV09SRCBbZWJ4XSAgICAgOyB4bW01PUNiKDAxMjM0NTY3ODlBQkNERUYpCisgICAgICAgIG1vdmRxYSAgeG1tMSwgWE1NV09SRCBbZWR4XSAgICAgOyB4bW0xPUNyKDAxMjM0NTY3ODlBQkNERUYpCiAKLQlwY21wZXF3CXhtbTQseG1tNAotCXBjbXBlcXcJeG1tNyx4bW03Ci0JcHNybHcJeG1tNCxCWVRFX0JJVAotCXBzbGx3CXhtbTcsNwkJCTsgeG1tNz17MHhGRjgwIDB4RkY4MCAweEZGODAgMHhGRjgwIC4ufQotCW1vdmRxYQl4bW0wLHhtbTQJCTsgeG1tMD14bW00PXsweEZGIDB4MDAgMHhGRiAweDAwIC4ufQorICAgICAgICBwY21wZXF3IHhtbTQseG1tNAorICAgICAgICBwY21wZXF3IHhtbTcseG1tNworICAgICAgICBwc3JsdyAgIHhtbTQsQllURV9CSVQKKyAgICAgICAgcHNsbHcgICB4bW03LDcgICAgICAgICAgICAgICAgICA7IHhtbTc9ezB4RkY4MCAweEZGODAgMHhGRjgwIDB4RkY4MCAuLn0KKyAgICAgICAgbW92ZHFhICB4bW0wLHhtbTQgICAgICAgICAgICAgICA7IHhtbTA9eG1tND17MHhGRiAweDAwIDB4RkYgMHgwMCAuLn0KIAotCXBhbmQJeG1tNCx4bW01CQk7IHhtbTQ9Q2IoMDI0NjhBQ0UpPUNiRQotCXBzcmx3CXhtbTUsQllURV9CSVQJCTsgeG1tNT1DYigxMzU3OUJERik9Q2JPCi0JcGFuZAl4bW0wLHhtbTEJCTsgeG1tMD1DcigwMjQ2OEFDRSk9Q3JFCi0JcHNybHcJeG1tMSxCWVRFX0JJVAkJOyB4bW0xPUNyKDEzNTc5QkRGKT1Dck8KKyAgICAgICAgcGFuZCAgICB4bW00LHhtbTUgICAgICAgICAgICAgICA7IHhtbTQ9Q2IoMDI0NjhBQ0UpPUNiRQorICAgICAgICBwc3JsdyAgIHhtbTUsQllURV9CSVQgICAgICAgICAgIDsgeG1tNT1DYigxMzU3OUJERik9Q2JPCisgICAgICAgIHBhbmQgICAgeG1tMCx4bW0xICAgICAgICAgICAgICAgOyB4bW0wPUNyKDAyNDY4QUNFKT1DckUKKyAgICAgICAgcHNybHcgICB4bW0xLEJZVEVfQklUICAgICAgICAgICA7IHhtbTE9Q3IoMTM1NzlCREYpPUNyTwogCi0JcGFkZHcJeG1tNCx4bW03Ci0JcGFkZHcJeG1tNSx4bW03Ci0JcGFkZHcJeG1tMCx4bW03Ci0JcGFkZHcJeG1tMSx4bW03CisgICAgICAgIHBhZGR3ICAgeG1tNCx4bW03CisgICAgICAgIHBhZGR3ICAgeG1tNSx4bW03CisgICAgICAgIHBhZGR3ICAgeG1tMCx4bW03CisgICAgICAgIHBhZGR3ICAgeG1tMSx4bW03CiAKLQk7IChPcmlnaW5hbCkKLQk7IFIgPSBZICAgICAgICAgICAgICAgICsgMS40MDIwMCAqIENyCi0JOyBHID0gWSAtIDAuMzQ0MTQgKiBDYiAtIDAuNzE0MTQgKiBDcgotCTsgQiA9IFkgKyAxLjc3MjAwICogQ2IKLQk7Ci0JOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKLQk7IFIgPSBZICAgICAgICAgICAgICAgICsgMC40MDIwMCAqIENyICsgQ3IKLQk7IEcgPSBZIC0gMC4zNDQxNCAqIENiICsgMC4yODU4NiAqIENyIC0gQ3IKLQk7IEIgPSBZIC0gMC4yMjgwMCAqIENiICsgQ2IgKyBDYgorICAgICAgICA7IChPcmlnaW5hbCkKKyAgICAgICAgOyBSID0gWSAgICAgICAgICAgICAgICArIDEuNDAyMDAgKiBDcgorICAgICAgICA7IEcgPSBZIC0gMC4zNDQxNCAqIENiIC0gMC43MTQxNCAqIENyCisgICAgICAgIDsgQiA9IFkgKyAxLjc3MjAwICogQ2IKKyAgICAgICAgOworICAgICAgICA7IChUaGlzIGltcGxlbWVudGF0aW9uKQorICAgICAgICA7IFIgPSBZICAgICAgICAgICAgICAgICsgMC40MDIwMCAqIENyICsgQ3IKKyAgICAgICAgOyBHID0gWSAtIDAuMzQ0MTQgKiBDYiArIDAuMjg1ODYgKiBDciAtIENyCisgICAgICAgIDsgQiA9IFkgLSAwLjIyODAwICogQ2IgKyBDYiArIENiCiAKLQltb3ZkcWEJeG1tMix4bW00CQk7IHhtbTI9Q2JFCi0JbW92ZHFhCXhtbTMseG1tNQkJOyB4bW0zPUNiTwotCXBhZGR3CXhtbTQseG1tNAkJOyB4bW00PTIqQ2JFCi0JcGFkZHcJeG1tNSx4bW01CQk7IHhtbTU9MipDYk8KLQltb3ZkcWEJeG1tNix4bW0wCQk7IHhtbTY9Q3JFCi0JbW92ZHFhCXhtbTcseG1tMQkJOyB4bW03PUNyTwotCXBhZGR3CXhtbTAseG1tMAkJOyB4bW0wPTIqQ3JFCi0JcGFkZHcJeG1tMSx4bW0xCQk7IHhtbTE9MipDck8KKyAgICAgICAgbW92ZHFhICB4bW0yLHhtbTQgICAgICAgICAgICAgICA7IHhtbTI9Q2JFCisgICAgICAgIG1vdmRxYSAgeG1tMyx4bW01ICAgICAgICAgICAgICAgOyB4bW0zPUNiTworICAgICAgICBwYWRkdyAgIHhtbTQseG1tNCAgICAgICAgICAgICAgIDsgeG1tND0yKkNiRQorICAgICAgICBwYWRkdyAgIHhtbTUseG1tNSAgICAgICAgICAgICAgIDsgeG1tNT0yKkNiTworICAgICAgICBtb3ZkcWEgIHhtbTYseG1tMCAgICAgICAgICAgICAgIDsgeG1tNj1DckUKKyAgICAgICAgbW92ZHFhICB4bW03LHhtbTEgICAgICAgICAgICAgICA7IHhtbTc9Q3JPCisgICAgICAgIHBhZGR3ICAgeG1tMCx4bW0wICAgICAgICAgICAgICAgOyB4bW0wPTIqQ3JFCisgICAgICAgIHBhZGR3ICAgeG1tMSx4bW0xICAgICAgICAgICAgICAgOyB4bW0xPTIqQ3JPCiAKLQlwbXVsaHcJeG1tNCxbR09UT0ZGKGVheCxQV19NRjAyMjgpXQk7IHhtbTQ9KDIqQ2JFICogLUZJWCgwLjIyODAwKSkKLQlwbXVsaHcJeG1tNSxbR09UT0ZGKGVheCxQV19NRjAyMjgpXQk7IHhtbTU9KDIqQ2JPICogLUZJWCgwLjIyODAwKSkKLQlwbXVsaHcJeG1tMCxbR09UT0ZGKGVheCxQV19GMDQwMildCTsgeG1tMD0oMipDckUgKiBGSVgoMC40MDIwMCkpCi0JcG11bGh3CXhtbTEsW0dPVE9GRihlYXgsUFdfRjA0MDIpXQk7IHhtbTE9KDIqQ3JPICogRklYKDAuNDAyMDApKQorICAgICAgICBwbXVsaHcgIHhtbTQsW0dPVE9GRihlYXgsUFdfTUYwMjI4KV0gICAgOyB4bW00PSgyKkNiRSAqIC1GSVgoMC4yMjgwMCkpCisgICAgICAgIHBtdWxodyAgeG1tNSxbR09UT0ZGKGVheCxQV19NRjAyMjgpXSAgICA7IHhtbTU9KDIqQ2JPICogLUZJWCgwLjIyODAwKSkKKyAgICAgICAgcG11bGh3ICB4bW0wLFtHT1RPRkYoZWF4LFBXX0YwNDAyKV0gICAgIDsgeG1tMD0oMipDckUgKiBGSVgoMC40MDIwMCkpCisgICAgICAgIHBtdWxodyAgeG1tMSxbR09UT0ZGKGVheCxQV19GMDQwMildICAgICA7IHhtbTE9KDIqQ3JPICogRklYKDAuNDAyMDApKQogCi0JcGFkZHcJeG1tNCxbR09UT0ZGKGVheCxQV19PTkUpXQotCXBhZGR3CXhtbTUsW0dPVE9GRihlYXgsUFdfT05FKV0KLQlwc3Jhdwl4bW00LDEJCQk7IHhtbTQ9KENiRSAqIC1GSVgoMC4yMjgwMCkpCi0JcHNyYXcJeG1tNSwxCQkJOyB4bW01PShDYk8gKiAtRklYKDAuMjI4MDApKQotCXBhZGR3CXhtbTAsW0dPVE9GRihlYXgsUFdfT05FKV0KLQlwYWRkdwl4bW0xLFtHT1RPRkYoZWF4LFBXX09ORSldCi0JcHNyYXcJeG1tMCwxCQkJOyB4bW0wPShDckUgKiBGSVgoMC40MDIwMCkpCi0JcHNyYXcJeG1tMSwxCQkJOyB4bW0xPShDck8gKiBGSVgoMC40MDIwMCkpCisgICAgICAgIHBhZGR3ICAgeG1tNCxbR09UT0ZGKGVheCxQV19PTkUpXQorICAgICAgICBwYWRkdyAgIHhtbTUsW0dPVE9GRihlYXgsUFdfT05FKV0KKyAgICAgICAgcHNyYXcgICB4bW00LDEgICAgICAgICAgICAgICAgICA7IHhtbTQ9KENiRSAqIC1GSVgoMC4yMjgwMCkpCisgICAgICAgIHBzcmF3ICAgeG1tNSwxICAgICAgICAgICAgICAgICAgOyB4bW01PShDYk8gKiAtRklYKDAuMjI4MDApKQorICAgICAgICBwYWRkdyAgIHhtbTAsW0dPVE9GRihlYXgsUFdfT05FKV0KKyAgICAgICAgcGFkZHcgICB4bW0xLFtHT1RPRkYoZWF4LFBXX09ORSldCisgICAgICAgIHBzcmF3ICAgeG1tMCwxICAgICAgICAgICAgICAgICAgOyB4bW0wPShDckUgKiBGSVgoMC40MDIwMCkpCisgICAgICAgIHBzcmF3ICAgeG1tMSwxICAgICAgICAgICAgICAgICAgOyB4bW0xPShDck8gKiBGSVgoMC40MDIwMCkpCiAKLQlwYWRkdwl4bW00LHhtbTIKLQlwYWRkdwl4bW01LHhtbTMKLQlwYWRkdwl4bW00LHhtbTIJCTsgeG1tND0oQ2JFICogRklYKDEuNzcyMDApKT0oQi1ZKUUKLQlwYWRkdwl4bW01LHhtbTMJCTsgeG1tNT0oQ2JPICogRklYKDEuNzcyMDApKT0oQi1ZKU8KLQlwYWRkdwl4bW0wLHhtbTYJCTsgeG1tMD0oQ3JFICogRklYKDEuNDAyMDApKT0oUi1ZKUUKLQlwYWRkdwl4bW0xLHhtbTcJCTsgeG1tMT0oQ3JPICogRklYKDEuNDAyMDApKT0oUi1ZKU8KKyAgICAgICAgcGFkZHcgICB4bW00LHhtbTIKKyAgICAgICAgcGFkZHcgICB4bW01LHhtbTMKKyAgICAgICAgcGFkZHcgICB4bW00LHhtbTIgICAgICAgICAgICAgICA7IHhtbTQ9KENiRSAqIEZJWCgxLjc3MjAwKSk9KEItWSlFCisgICAgICAgIHBhZGR3ICAgeG1tNSx4bW0zICAgICAgICAgICAgICAgOyB4bW01PShDYk8gKiBGSVgoMS43NzIwMCkpPShCLVkpTworICAgICAgICBwYWRkdyAgIHhtbTAseG1tNiAgICAgICAgICAgICAgIDsgeG1tMD0oQ3JFICogRklYKDEuNDAyMDApKT0oUi1ZKUUKKyAgICAgICAgcGFkZHcgICB4bW0xLHhtbTcgICAgICAgICAgICAgICA7IHhtbTE9KENyTyAqIEZJWCgxLjQwMjAwKSk9KFItWSlPCiAKLQltb3ZkcWEJWE1NV09SRCBbd2soMCldLCB4bW00CTsgd2soMCk9KEItWSlFCi0JbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tNQk7IHdrKDEpPShCLVkpTworICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDApXSwgeG1tNCAgIDsgd2soMCk9KEItWSlFCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMSldLCB4bW01ICAgOyB3aygxKT0oQi1ZKU8KIAotCW1vdmRxYSAgICB4bW00LHhtbTIKLQltb3ZkcWEgICAgeG1tNSx4bW0zCi0JcHVucGNrbHdkIHhtbTIseG1tNgotCXB1bnBja2h3ZCB4bW00LHhtbTYKLQlwbWFkZHdkICAgeG1tMixbR09UT0ZGKGVheCxQV19NRjAzNDRfRjAyODUpXQotCXBtYWRkd2QgICB4bW00LFtHT1RPRkYoZWF4LFBXX01GMDM0NF9GMDI4NSldCi0JcHVucGNrbHdkIHhtbTMseG1tNwotCXB1bnBja2h3ZCB4bW01LHhtbTcKLQlwbWFkZHdkICAgeG1tMyxbR09UT0ZGKGVheCxQV19NRjAzNDRfRjAyODUpXQotCXBtYWRkd2QgICB4bW01LFtHT1RPRkYoZWF4LFBXX01GMDM0NF9GMDI4NSldCisgICAgICAgIG1vdmRxYSAgICB4bW00LHhtbTIKKyAgICAgICAgbW92ZHFhICAgIHhtbTUseG1tMworICAgICAgICBwdW5wY2tsd2QgeG1tMix4bW02CisgICAgICAgIHB1bnBja2h3ZCB4bW00LHhtbTYKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTIsW0dPVE9GRihlYXgsUFdfTUYwMzQ0X0YwMjg1KV0KKyAgICAgICAgcG1hZGR3ZCAgIHhtbTQsW0dPVE9GRihlYXgsUFdfTUYwMzQ0X0YwMjg1KV0KKyAgICAgICAgcHVucGNrbHdkIHhtbTMseG1tNworICAgICAgICBwdW5wY2tod2QgeG1tNSx4bW03CisgICAgICAgIHBtYWRkd2QgICB4bW0zLFtHT1RPRkYoZWF4LFBXX01GMDM0NF9GMDI4NSldCisgICAgICAgIHBtYWRkd2QgICB4bW01LFtHT1RPRkYoZWF4LFBXX01GMDM0NF9GMDI4NSldCiAKLQlwYWRkZCAgICAgeG1tMixbR09UT0ZGKGVheCxQRF9PTkVIQUxGKV0KLQlwYWRkZCAgICAgeG1tNCxbR09UT0ZGKGVheCxQRF9PTkVIQUxGKV0KLQlwc3JhZCAgICAgeG1tMixTQ0FMRUJJVFMKLQlwc3JhZCAgICAgeG1tNCxTQ0FMRUJJVFMKLQlwYWRkZCAgICAgeG1tMyxbR09UT0ZGKGVheCxQRF9PTkVIQUxGKV0KLQlwYWRkZCAgICAgeG1tNSxbR09UT0ZGKGVheCxQRF9PTkVIQUxGKV0KLQlwc3JhZCAgICAgeG1tMyxTQ0FMRUJJVFMKLQlwc3JhZCAgICAgeG1tNSxTQ0FMRUJJVFMKKyAgICAgICAgcGFkZGQgICAgIHhtbTIsW0dPVE9GRihlYXgsUERfT05FSEFMRildCisgICAgICAgIHBhZGRkICAgICB4bW00LFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXQorICAgICAgICBwc3JhZCAgICAgeG1tMixTQ0FMRUJJVFMKKyAgICAgICAgcHNyYWQgICAgIHhtbTQsU0NBTEVCSVRTCisgICAgICAgIHBhZGRkICAgICB4bW0zLFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXQorICAgICAgICBwYWRkZCAgICAgeG1tNSxbR09UT0ZGKGVheCxQRF9PTkVIQUxGKV0KKyAgICAgICAgcHNyYWQgICAgIHhtbTMsU0NBTEVCSVRTCisgICAgICAgIHBzcmFkICAgICB4bW01LFNDQUxFQklUUwogCi0JcGFja3NzZHcgIHhtbTIseG1tNAk7IHhtbTI9Q2JFKi1GSVgoMC4zNDQpK0NyRSpGSVgoMC4yODUpCi0JcGFja3NzZHcgIHhtbTMseG1tNQk7IHhtbTM9Q2JPKi1GSVgoMC4zNDQpK0NyTypGSVgoMC4yODUpCi0JcHN1YncgICAgIHhtbTIseG1tNgk7IHhtbTI9Q2JFKi1GSVgoMC4zNDQpK0NyRSotRklYKDAuNzE0KT0oRy1ZKUUKLQlwc3VidyAgICAgeG1tMyx4bW03CTsgeG1tMz1DYk8qLUZJWCgwLjM0NCkrQ3JPKi1GSVgoMC43MTQpPShHLVkpTworICAgICAgICBwYWNrc3NkdyAgeG1tMix4bW00ICAgICA7IHhtbTI9Q2JFKi1GSVgoMC4zNDQpK0NyRSpGSVgoMC4yODUpCisgICAgICAgIHBhY2tzc2R3ICB4bW0zLHhtbTUgICAgIDsgeG1tMz1DYk8qLUZJWCgwLjM0NCkrQ3JPKkZJWCgwLjI4NSkKKyAgICAgICAgcHN1YncgICAgIHhtbTIseG1tNiAgICAgOyB4bW0yPUNiRSotRklYKDAuMzQ0KStDckUqLUZJWCgwLjcxNCk9KEctWSlFCisgICAgICAgIHBzdWJ3ICAgICB4bW0zLHhtbTcgICAgIDsgeG1tMz1DYk8qLUZJWCgwLjM0NCkrQ3JPKi1GSVgoMC43MTQpPShHLVkpTwogCi0JbW92ZHFhICAgIHhtbTUsIFhNTVdPUkQgW2VzaV0JOyB4bW01PVkoMDEyMzQ1Njc4OUFCQ0RFRikKKyAgICAgICAgbW92ZHFhICAgIHhtbTUsIFhNTVdPUkQgW2VzaV0gICA7IHhtbTU9WSgwMTIzNDU2Nzg5QUJDREVGKQogCi0JcGNtcGVxdyAgIHhtbTQseG1tNAotCXBzcmx3ICAgICB4bW00LEJZVEVfQklUCQk7IHhtbTQ9ezB4RkYgMHgwMCAweEZGIDB4MDAgLi59Ci0JcGFuZCAgICAgIHhtbTQseG1tNQkJOyB4bW00PVkoMDI0NjhBQ0UpPVlFCi0JcHNybHcgICAgIHhtbTUsQllURV9CSVQJCTsgeG1tNT1ZKDEzNTc5QkRGKT1ZTworICAgICAgICBwY21wZXF3ICAgeG1tNCx4bW00CisgICAgICAgIHBzcmx3ICAgICB4bW00LEJZVEVfQklUICAgICAgICAgOyB4bW00PXsweEZGIDB4MDAgMHhGRiAweDAwIC4ufQorICAgICAgICBwYW5kICAgICAgeG1tNCx4bW01ICAgICAgICAgICAgIDsgeG1tND1ZKDAyNDY4QUNFKT1ZRQorICAgICAgICBwc3JsdyAgICAgeG1tNSxCWVRFX0JJVCAgICAgICAgIDsgeG1tNT1ZKDEzNTc5QkRGKT1ZTwogCi0JcGFkZHcgICAgIHhtbTAseG1tNAkJOyB4bW0wPSgoUi1ZKUUrWUUpPVJFPVIoMDI0NjhBQ0UpCi0JcGFkZHcgICAgIHhtbTEseG1tNQkJOyB4bW0xPSgoUi1ZKU8rWU8pPVJPPVIoMTM1NzlCREYpCi0JcGFja3Vzd2IgIHhtbTAseG1tMAkJOyB4bW0wPVIoMDI0NjhBQ0UqKioqKioqKikKLQlwYWNrdXN3YiAgeG1tMSx4bW0xCQk7IHhtbTE9UigxMzU3OUJERioqKioqKioqKQorICAgICAgICBwYWRkdyAgICAgeG1tMCx4bW00ICAgICAgICAgICAgIDsgeG1tMD0oKFItWSlFK1lFKT1SRT1SKDAyNDY4QUNFKQorICAgICAgICBwYWRkdyAgICAgeG1tMSx4bW01ICAgICAgICAgICAgIDsgeG1tMT0oKFItWSlPK1lPKT1STz1SKDEzNTc5QkRGKQorICAgICAgICBwYWNrdXN3YiAgeG1tMCx4bW0wICAgICAgICAgICAgIDsgeG1tMD1SKDAyNDY4QUNFKioqKioqKiopCisgICAgICAgIHBhY2t1c3diICB4bW0xLHhtbTEgICAgICAgICAgICAgOyB4bW0xPVIoMTM1NzlCREYqKioqKioqKikKIAotCXBhZGR3ICAgICB4bW0yLHhtbTQJCTsgeG1tMj0oKEctWSlFK1lFKT1HRT1HKDAyNDY4QUNFKQotCXBhZGR3ICAgICB4bW0zLHhtbTUJCTsgeG1tMz0oKEctWSlPK1lPKT1HTz1HKDEzNTc5QkRGKQotCXBhY2t1c3diICB4bW0yLHhtbTIJCTsgeG1tMj1HKDAyNDY4QUNFKioqKioqKiopCi0JcGFja3Vzd2IgIHhtbTMseG1tMwkJOyB4bW0zPUcoMTM1NzlCREYqKioqKioqKikKKyAgICAgICAgcGFkZHcgICAgIHhtbTIseG1tNCAgICAgICAgICAgICA7IHhtbTI9KChHLVkpRStZRSk9R0U9RygwMjQ2OEFDRSkKKyAgICAgICAgcGFkZHcgICAgIHhtbTMseG1tNSAgICAgICAgICAgICA7IHhtbTM9KChHLVkpTytZTyk9R089RygxMzU3OUJERikKKyAgICAgICAgcGFja3Vzd2IgIHhtbTIseG1tMiAgICAgICAgICAgICA7IHhtbTI9RygwMjQ2OEFDRSoqKioqKioqKQorICAgICAgICBwYWNrdXN3YiAgeG1tMyx4bW0zICAgICAgICAgICAgIDsgeG1tMz1HKDEzNTc5QkRGKioqKioqKiopCiAKLQlwYWRkdyAgICAgeG1tNCwgWE1NV09SRCBbd2soMCldCTsgeG1tND0oWUUrKEItWSlFKT1CRT1CKDAyNDY4QUNFKQotCXBhZGR3ICAgICB4bW01LCBYTU1XT1JEIFt3aygxKV0JOyB4bW01PShZTysoQi1ZKU8pPUJPPUIoMTM1NzlCREYpCi0JcGFja3Vzd2IgIHhtbTQseG1tNAkJOyB4bW00PUIoMDI0NjhBQ0UqKioqKioqKikKLQlwYWNrdXN3YiAgeG1tNSx4bW01CQk7IHhtbTU9QigxMzU3OUJERioqKioqKioqKQorICAgICAgICBwYWRkdyAgICAgeG1tNCwgWE1NV09SRCBbd2soMCldIDsgeG1tND0oWUUrKEItWSlFKT1CRT1CKDAyNDY4QUNFKQorICAgICAgICBwYWRkdyAgICAgeG1tNSwgWE1NV09SRCBbd2soMSldIDsgeG1tNT0oWU8rKEItWSlPKT1CTz1CKDEzNTc5QkRGKQorICAgICAgICBwYWNrdXN3YiAgeG1tNCx4bW00ICAgICAgICAgICAgIDsgeG1tND1CKDAyNDY4QUNFKioqKioqKiopCisgICAgICAgIHBhY2t1c3diICB4bW01LHhtbTUgICAgICAgICAgICAgOyB4bW01PUIoMTM1NzlCREYqKioqKioqKikKIAogJWlmIFJHQl9QSVhFTFNJWkUgPT0gMyA7IC0tLS0tLS0tLS0tLS0tLQogCi0JOyB4bW1BPSgwMCAwMiAwNCAwNiAwOCAwQSAwQyAwRSAqKiksIHhtbUI9KDAxIDAzIDA1IDA3IDA5IDBCIDBEIDBGICoqKQotCTsgeG1tQz0oMTAgMTIgMTQgMTYgMTggMUEgMUMgMUUgKiopLCB4bW1EPSgxMSAxMyAxNSAxNyAxOSAxQiAxRCAxRiAqKikKLQk7IHhtbUU9KDIwIDIyIDI0IDI2IDI4IDJBIDJDIDJFICoqKSwgeG1tRj0oMjEgMjMgMjUgMjcgMjkgMkIgMkQgMkYgKiopCi0JOyB4bW1HPSgqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiksIHhtbUg9KCoqICoqICoqICoqICoqICoqICoqICoqICoqKQorICAgICAgICA7IHhtbUE9KDAwIDAyIDA0IDA2IDA4IDBBIDBDIDBFICoqKSwgeG1tQj0oMDEgMDMgMDUgMDcgMDkgMEIgMEQgMEYgKiopCisgICAgICAgIDsgeG1tQz0oMTAgMTIgMTQgMTYgMTggMUEgMUMgMUUgKiopLCB4bW1EPSgxMSAxMyAxNSAxNyAxOSAxQiAxRCAxRiAqKikKKyAgICAgICAgOyB4bW1FPSgyMCAyMiAyNCAyNiAyOCAyQSAyQyAyRSAqKiksIHhtbUY9KDIxIDIzIDI1IDI3IDI5IDJCIDJEIDJGICoqKQorICAgICAgICA7IHhtbUc9KCoqICoqICoqICoqICoqICoqICoqICoqICoqKSwgeG1tSD0oKiogKiogKiogKiogKiogKiogKiogKiogKiopCiAKLQlwdW5wY2tsYncgeG1tQSx4bW1DCTsgeG1tQT0oMDAgMTAgMDIgMTIgMDQgMTQgMDYgMTYgMDggMTggMEEgMUEgMEMgMUMgMEUgMUUpCi0JcHVucGNrbGJ3IHhtbUUseG1tQgk7IHhtbUU9KDIwIDAxIDIyIDAzIDI0IDA1IDI2IDA3IDI4IDA5IDJBIDBCIDJDIDBEIDJFIDBGKQotCXB1bnBja2xidyB4bW1ELHhtbUYJOyB4bW1EPSgxMSAyMSAxMyAyMyAxNSAyNSAxNyAyNyAxOSAyOSAxQiAyQiAxRCAyRCAxRiAyRikKKyAgICAgICAgcHVucGNrbGJ3IHhtbUEseG1tQyAgICAgOyB4bW1BPSgwMCAxMCAwMiAxMiAwNCAxNCAwNiAxNiAwOCAxOCAwQSAxQSAwQyAxQyAwRSAxRSkKKyAgICAgICAgcHVucGNrbGJ3IHhtbUUseG1tQiAgICAgOyB4bW1FPSgyMCAwMSAyMiAwMyAyNCAwNSAyNiAwNyAyOCAwOSAyQSAwQiAyQyAwRCAyRSAwRikKKyAgICAgICAgcHVucGNrbGJ3IHhtbUQseG1tRiAgICAgOyB4bW1EPSgxMSAyMSAxMyAyMyAxNSAyNSAxNyAyNyAxOSAyOSAxQiAyQiAxRCAyRCAxRiAyRikKIAotCW1vdmRxYSAgICB4bW1HLHhtbUEKLQltb3ZkcWEgICAgeG1tSCx4bW1BCi0JcHVucGNrbHdkIHhtbUEseG1tRQk7IHhtbUE9KDAwIDEwIDIwIDAxIDAyIDEyIDIyIDAzIDA0IDE0IDI0IDA1IDA2IDE2IDI2IDA3KQotCXB1bnBja2h3ZCB4bW1HLHhtbUUJOyB4bW1HPSgwOCAxOCAyOCAwOSAwQSAxQSAyQSAwQiAwQyAxQyAyQyAwRCAwRSAxRSAyRSAwRikKKyAgICAgICAgbW92ZHFhICAgIHhtbUcseG1tQQorICAgICAgICBtb3ZkcWEgICAgeG1tSCx4bW1BCisgICAgICAgIHB1bnBja2x3ZCB4bW1BLHhtbUUgICAgIDsgeG1tQT0oMDAgMTAgMjAgMDEgMDIgMTIgMjIgMDMgMDQgMTQgMjQgMDUgMDYgMTYgMjYgMDcpCisgICAgICAgIHB1bnBja2h3ZCB4bW1HLHhtbUUgICAgIDsgeG1tRz0oMDggMTggMjggMDkgMEEgMUEgMkEgMEIgMEMgMUMgMkMgMEQgMEUgMUUgMkUgMEYpCiAKLQlwc3JsZHEgICAgeG1tSCwyCTsgeG1tSD0oMDIgMTIgMDQgMTQgMDYgMTYgMDggMTggMEEgMUEgMEMgMUMgMEUgMUUgLS0gLS0pCi0JcHNybGRxICAgIHhtbUUsMgk7IHhtbUU9KDIyIDAzIDI0IDA1IDI2IDA3IDI4IDA5IDJBIDBCIDJDIDBEIDJFIDBGIC0tIC0tKQorICAgICAgICBwc3JsZHEgICAgeG1tSCwyICAgICAgICA7IHhtbUg9KDAyIDEyIDA0IDE0IDA2IDE2IDA4IDE4IDBBIDFBIDBDIDFDIDBFIDFFIC0tIC0tKQorICAgICAgICBwc3JsZHEgICAgeG1tRSwyICAgICAgICA7IHhtbUU9KDIyIDAzIDI0IDA1IDI2IDA3IDI4IDA5IDJBIDBCIDJDIDBEIDJFIDBGIC0tIC0tKQogCi0JbW92ZHFhICAgIHhtbUMseG1tRAotCW1vdmRxYSAgICB4bW1CLHhtbUQKLQlwdW5wY2tsd2QgeG1tRCx4bW1ICTsgeG1tRD0oMTEgMjEgMDIgMTIgMTMgMjMgMDQgMTQgMTUgMjUgMDYgMTYgMTcgMjcgMDggMTgpCi0JcHVucGNraHdkIHhtbUMseG1tSAk7IHhtbUM9KDE5IDI5IDBBIDFBIDFCIDJCIDBDIDFDIDFEIDJEIDBFIDFFIDFGIDJGIC0tIC0tKQorICAgICAgICBtb3ZkcWEgICAgeG1tQyx4bW1ECisgICAgICAgIG1vdmRxYSAgICB4bW1CLHhtbUQKKyAgICAgICAgcHVucGNrbHdkIHhtbUQseG1tSCAgICAgOyB4bW1EPSgxMSAyMSAwMiAxMiAxMyAyMyAwNCAxNCAxNSAyNSAwNiAxNiAxNyAyNyAwOCAxOCkKKyAgICAgICAgcHVucGNraHdkIHhtbUMseG1tSCAgICAgOyB4bW1DPSgxOSAyOSAwQSAxQSAxQiAyQiAwQyAxQyAxRCAyRCAwRSAxRSAxRiAyRiAtLSAtLSkKIAotCXBzcmxkcSAgICB4bW1CLDIJOyB4bW1CPSgxMyAyMyAxNSAyNSAxNyAyNyAxOSAyOSAxQiAyQiAxRCAyRCAxRiAyRiAtLSAtLSkKKyAgICAgICAgcHNybGRxICAgIHhtbUIsMiAgICAgICAgOyB4bW1CPSgxMyAyMyAxNSAyNSAxNyAyNyAxOSAyOSAxQiAyQiAxRCAyRCAxRiAyRiAtLSAtLSkKIAotCW1vdmRxYSAgICB4bW1GLHhtbUUKLQlwdW5wY2tsd2QgeG1tRSx4bW1CCTsgeG1tRT0oMjIgMDMgMTMgMjMgMjQgMDUgMTUgMjUgMjYgMDcgMTcgMjcgMjggMDkgMTkgMjkpCi0JcHVucGNraHdkIHhtbUYseG1tQgk7IHhtbUY9KDJBIDBCIDFCIDJCIDJDIDBEIDFEIDJEIDJFIDBGIDFGIDJGIC0tIC0tIC0tIC0tKQorICAgICAgICBtb3ZkcWEgICAgeG1tRix4bW1FCisgICAgICAgIHB1bnBja2x3ZCB4bW1FLHhtbUIgICAgIDsgeG1tRT0oMjIgMDMgMTMgMjMgMjQgMDUgMTUgMjUgMjYgMDcgMTcgMjcgMjggMDkgMTkgMjkpCisgICAgICAgIHB1bnBja2h3ZCB4bW1GLHhtbUIgICAgIDsgeG1tRj0oMkEgMEIgMUIgMkIgMkMgMEQgMUQgMkQgMkUgMEYgMUYgMkYgLS0gLS0gLS0gLS0pCiAKLQlwc2h1ZmQgICAgeG1tSCx4bW1BLDB4NEU7IHhtbUg9KDA0IDE0IDI0IDA1IDA2IDE2IDI2IDA3IDAwIDEwIDIwIDAxIDAyIDEyIDIyIDAzKQotCW1vdmRxYSAgICB4bW1CLHhtbUUKLQlwdW5wY2tsZHEgeG1tQSx4bW1ECTsgeG1tQT0oMDAgMTAgMjAgMDEgMTEgMjEgMDIgMTIgMDIgMTIgMjIgMDMgMTMgMjMgMDQgMTQpCi0JcHVucGNrbGRxIHhtbUUseG1tSAk7IHhtbUU9KDIyIDAzIDEzIDIzIDA0IDE0IDI0IDA1IDI0IDA1IDE1IDI1IDA2IDE2IDI2IDA3KQotCXB1bnBja2hkcSB4bW1ELHhtbUIJOyB4bW1EPSgxNSAyNSAwNiAxNiAyNiAwNyAxNyAyNyAxNyAyNyAwOCAxOCAyOCAwOSAxOSAyOSkKKyAgICAgICAgcHNodWZkICAgIHhtbUgseG1tQSwweDRFOyB4bW1IPSgwNCAxNCAyNCAwNSAwNiAxNiAyNiAwNyAwMCAxMCAyMCAwMSAwMiAxMiAyMiAwMykKKyAgICAgICAgbW92ZHFhICAgIHhtbUIseG1tRQorICAgICAgICBwdW5wY2tsZHEgeG1tQSx4bW1EICAgICA7IHhtbUE9KDAwIDEwIDIwIDAxIDExIDIxIDAyIDEyIDAyIDEyIDIyIDAzIDEzIDIzIDA0IDE0KQorICAgICAgICBwdW5wY2tsZHEgeG1tRSx4bW1IICAgICA7IHhtbUU9KDIyIDAzIDEzIDIzIDA0IDE0IDI0IDA1IDI0IDA1IDE1IDI1IDA2IDE2IDI2IDA3KQorICAgICAgICBwdW5wY2toZHEgeG1tRCx4bW1CICAgICA7IHhtbUQ9KDE1IDI1IDA2IDE2IDI2IDA3IDE3IDI3IDE3IDI3IDA4IDE4IDI4IDA5IDE5IDI5KQogCi0JcHNodWZkICAgIHhtbUgseG1tRywweDRFOyB4bW1IPSgwQyAxQyAyQyAwRCAwRSAxRSAyRSAwRiAwOCAxOCAyOCAwOSAwQSAxQSAyQSAwQikKLQltb3ZkcWEgICAgeG1tQix4bW1GCi0JcHVucGNrbGRxIHhtbUcseG1tQwk7IHhtbUc9KDA4IDE4IDI4IDA5IDE5IDI5IDBBIDFBIDBBIDFBIDJBIDBCIDFCIDJCIDBDIDFDKQotCXB1bnBja2xkcSB4bW1GLHhtbUgJOyB4bW1GPSgyQSAwQiAxQiAyQiAwQyAxQyAyQyAwRCAyQyAwRCAxRCAyRCAwRSAxRSAyRSAwRikKLQlwdW5wY2toZHEgeG1tQyx4bW1CCTsgeG1tQz0oMUQgMkQgMEUgMUUgMkUgMEYgMUYgMkYgMUYgMkYgLS0gLS0gLS0gLS0gLS0gLS0pCisgICAgICAgIHBzaHVmZCAgICB4bW1ILHhtbUcsMHg0RTsgeG1tSD0oMEMgMUMgMkMgMEQgMEUgMUUgMkUgMEYgMDggMTggMjggMDkgMEEgMUEgMkEgMEIpCisgICAgICAgIG1vdmRxYSAgICB4bW1CLHhtbUYKKyAgICAgICAgcHVucGNrbGRxIHhtbUcseG1tQyAgICAgOyB4bW1HPSgwOCAxOCAyOCAwOSAxOSAyOSAwQSAxQSAwQSAxQSAyQSAwQiAxQiAyQiAwQyAxQykKKyAgICAgICAgcHVucGNrbGRxIHhtbUYseG1tSCAgICAgOyB4bW1GPSgyQSAwQiAxQiAyQiAwQyAxQyAyQyAwRCAyQyAwRCAxRCAyRCAwRSAxRSAyRSAwRikKKyAgICAgICAgcHVucGNraGRxIHhtbUMseG1tQiAgICAgOyB4bW1DPSgxRCAyRCAwRSAxRSAyRSAwRiAxRiAyRiAxRiAyRiAtLSAtLSAtLSAtLSAtLSAtLSkKIAotCXB1bnBja2xxZHEgeG1tQSx4bW1FCTsgeG1tQT0oMDAgMTAgMjAgMDEgMTEgMjEgMDIgMTIgMjIgMDMgMTMgMjMgMDQgMTQgMjQgMDUpCi0JcHVucGNrbHFkcSB4bW1ELHhtbUcJOyB4bW1EPSgxNSAyNSAwNiAxNiAyNiAwNyAxNyAyNyAwOCAxOCAyOCAwOSAxOSAyOSAwQSAxQSkKLQlwdW5wY2tscWRxIHhtbUYseG1tQwk7IHhtbUY9KDJBIDBCIDFCIDJCIDBDIDFDIDJDIDBEIDFEIDJEIDBFIDFFIDJFIDBGIDFGIDJGKQorICAgICAgICBwdW5wY2tscWRxIHhtbUEseG1tRSAgICA7IHhtbUE9KDAwIDEwIDIwIDAxIDExIDIxIDAyIDEyIDIyIDAzIDEzIDIzIDA0IDE0IDI0IDA1KQorICAgICAgICBwdW5wY2tscWRxIHhtbUQseG1tRyAgICA7IHhtbUQ9KDE1IDI1IDA2IDE2IDI2IDA3IDE3IDI3IDA4IDE4IDI4IDA5IDE5IDI5IDBBIDFBKQorICAgICAgICBwdW5wY2tscWRxIHhtbUYseG1tQyAgICA7IHhtbUY9KDJBIDBCIDFCIDJCIDBDIDFDIDJDIDBEIDFEIDJEIDBFIDFFIDJFIDBGIDFGIDJGKQogCi0JY21wCWVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAotCWpiCXNob3J0IC5jb2x1bW5fc3QzMgorICAgICAgICBjbXAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorICAgICAgICBqYiAgICAgIHNob3J0IC5jb2x1bW5fc3QzMgogCi0JdGVzdAllZGksIFNJWkVPRl9YTU1XT1JELTEKLQlqbnoJc2hvcnQgLm91dDEKLQk7IC0tKGFsaWduZWQpLS0tLS0tLS0tLS0tLS0tLS0tLQotCW1vdm50ZHEJWE1NV09SRCBbZWRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW1BCi0JbW92bnRkcQlYTU1XT1JEIFtlZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbUQKLQltb3ZudGRxCVhNTVdPUkQgW2VkaSsyKlNJWkVPRl9YTU1XT1JEXSwgeG1tRgotCWptcAlzaG9ydCAub3V0MAotLm91dDE6CTsgLS0odW5hbGlnbmVkKS0tLS0tLS0tLS0tLS0tLS0tCi0JbW92ZHF1CVhNTVdPUkQgW2VkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tQQotCW1vdmRxdQlYTU1XT1JEIFtlZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbUQKLQltb3ZkcXUJWE1NV09SRCBbZWRpKzIqU0laRU9GX1hNTVdPUkRdLCB4bW1GCisgICAgICAgIHRlc3QgICAgZWRpLCBTSVpFT0ZfWE1NV09SRC0xCisgICAgICAgIGpueiAgICAgc2hvcnQgLm91dDEKKyAgICAgICAgOyAtLShhbGlnbmVkKS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgbW92bnRkcSBYTU1XT1JEIFtlZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbUEKKyAgICAgICAgbW92bnRkcSBYTU1XT1JEIFtlZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbUQKKyAgICAgICAgbW92bnRkcSBYTU1XT1JEIFtlZGkrMipTSVpFT0ZfWE1NV09SRF0sIHhtbUYKKyAgICAgICAgam1wICAgICBzaG9ydCAub3V0MAorLm91dDE6ICA7IC0tKHVuYWxpZ25lZCktLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBtb3ZkcXUgIFhNTVdPUkQgW2VkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tQQorICAgICAgICBtb3ZkcXUgIFhNTVdPUkQgW2VkaSsxKlNJWkVPRl9YTU1XT1JEXSwgeG1tRAorICAgICAgICBtb3ZkcXUgIFhNTVdPUkQgW2VkaSsyKlNJWkVPRl9YTU1XT1JEXSwgeG1tRgogLm91dDA6Ci0JYWRkCWVkaSwgYnl0ZSBSR0JfUElYRUxTSVpFKlNJWkVPRl9YTU1XT1JECTsgb3V0cHRyCi0Jc3ViCWVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAotCWp6CW5lYXIgLm5leHRyb3cKKyAgICAgICAgYWRkICAgICBlZGksIGJ5dGUgUkdCX1BJWEVMU0laRSpTSVpFT0ZfWE1NV09SRCAgOyBvdXRwdHIKKyAgICAgICAgc3ViICAgICBlY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKyAgICAgICAganogICAgICBuZWFyIC5uZXh0cm93CiAKLQlhZGQJZXNpLCBieXRlIFNJWkVPRl9YTU1XT1JECTsgaW5wdHIwCi0JYWRkCWVieCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IGlucHRyMQotCWFkZAllZHgsIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBpbnB0cjIKLQlqbXAJbmVhciAuY29sdW1ubG9vcAotCWFsaWdueAkxNiw3CisgICAgICAgIGFkZCAgICAgZXNpLCBieXRlIFNJWkVPRl9YTU1XT1JEICAgICAgICA7IGlucHRyMAorICAgICAgICBhZGQgICAgIGVieCwgYnl0ZSBTSVpFT0ZfWE1NV09SRCAgICAgICAgOyBpbnB0cjEKKyAgICAgICAgYWRkICAgICBlZHgsIGJ5dGUgU0laRU9GX1hNTVdPUkQgICAgICAgIDsgaW5wdHIyCisgICAgICAgIGptcCAgICAgbmVhciAuY29sdW1ubG9vcAorICAgICAgICBhbGlnbnggIDE2LDcKIAogLmNvbHVtbl9zdDMyOgotCWxlYQllY3gsIFtlY3grZWN4KjJdCQk7IGltdWwgZWN4LCBSR0JfUElYRUxTSVpFCi0JY21wCWVjeCwgYnl0ZSAyKlNJWkVPRl9YTU1XT1JECi0JamIJc2hvcnQgLmNvbHVtbl9zdDE2Ci0JbW92ZHF1CVhNTVdPUkQgW2VkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tQQotCW1vdmRxdQlYTU1XT1JEIFtlZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbUQKLQlhZGQJZWRpLCBieXRlIDIqU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKLQltb3ZkcWEJeG1tQSx4bW1GCi0Jc3ViCWVjeCwgYnl0ZSAyKlNJWkVPRl9YTU1XT1JECi0Jam1wCXNob3J0IC5jb2x1bW5fc3QxNQorICAgICAgICBsZWEgICAgIGVjeCwgW2VjeCtlY3gqMl0gICAgICAgICAgICAgICAgOyBpbXVsIGVjeCwgUkdCX1BJWEVMU0laRQorICAgICAgICBjbXAgICAgIGVjeCwgYnl0ZSAyKlNJWkVPRl9YTU1XT1JECisgICAgICAgIGpiICAgICAgc2hvcnQgLmNvbHVtbl9zdDE2CisgICAgICAgIG1vdmRxdSAgWE1NV09SRCBbZWRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW1BCisgICAgICAgIG1vdmRxdSAgWE1NV09SRCBbZWRpKzEqU0laRU9GX1hNTVdPUkRdLCB4bW1ECisgICAgICAgIGFkZCAgICAgZWRpLCBieXRlIDIqU0laRU9GX1hNTVdPUkQgICAgICA7IG91dHB0cgorICAgICAgICBtb3ZkcWEgIHhtbUEseG1tRgorICAgICAgICBzdWIgICAgIGVjeCwgYnl0ZSAyKlNJWkVPRl9YTU1XT1JECisgICAgICAgIGptcCAgICAgc2hvcnQgLmNvbHVtbl9zdDE1CiAuY29sdW1uX3N0MTY6Ci0JY21wCWVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAotCWpiCXNob3J0IC5jb2x1bW5fc3QxNQotCW1vdmRxdQlYTU1XT1JEIFtlZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbUEKLQlhZGQJZWRpLCBieXRlIFNJWkVPRl9YTU1XT1JECTsgb3V0cHRyCi0JbW92ZHFhCXhtbUEseG1tRAotCXN1YgllY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKyAgICAgICAgY21wICAgICBlY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKyAgICAgICAgamIgICAgICBzaG9ydCAuY29sdW1uX3N0MTUKKyAgICAgICAgbW92ZHF1ICBYTU1XT1JEIFtlZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbUEKKyAgICAgICAgYWRkICAgICBlZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQgICAgICAgIDsgb3V0cHRyCisgICAgICAgIG1vdmRxYSAgeG1tQSx4bW1ECisgICAgICAgIHN1YiAgICAgZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JECiAuY29sdW1uX3N0MTU6Ci0JOyBTdG9yZSB0aGUgbG93ZXIgOCBieXRlcyBvZiB4bW1BIHRvIHRoZSBvdXRwdXQgd2hlbiBpdCBoYXMgZW5vdWdoCi0JOyBzcGFjZS4KLQljbXAJZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQKLQlqYglzaG9ydCAuY29sdW1uX3N0NwotCW1vdnEJWE1NX01NV09SRCBbZWRpXSwgeG1tQQotCWFkZAllZGksIGJ5dGUgU0laRU9GX01NV09SRAotCXN1YgllY3gsIGJ5dGUgU0laRU9GX01NV09SRAotCXBzcmxkcQl4bW1BLCBTSVpFT0ZfTU1XT1JECisgICAgICAgIDsgU3RvcmUgdGhlIGxvd2VyIDggYnl0ZXMgb2YgeG1tQSB0byB0aGUgb3V0cHV0IHdoZW4gaXQgaGFzIGVub3VnaAorICAgICAgICA7IHNwYWNlLgorICAgICAgICBjbXAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECisgICAgICAgIGpiICAgICAgc2hvcnQgLmNvbHVtbl9zdDcKKyAgICAgICAgbW92cSAgICBYTU1fTU1XT1JEIFtlZGldLCB4bW1BCisgICAgICAgIGFkZCAgICAgZWRpLCBieXRlIFNJWkVPRl9NTVdPUkQKKyAgICAgICAgc3ViICAgICBlY3gsIGJ5dGUgU0laRU9GX01NV09SRAorICAgICAgICBwc3JsZHEgIHhtbUEsIFNJWkVPRl9NTVdPUkQKIC5jb2x1bW5fc3Q3OgotCTsgU3RvcmUgdGhlIGxvd2VyIDQgYnl0ZXMgb2YgeG1tQSB0byB0aGUgb3V0cHV0IHdoZW4gaXQgaGFzIGVub3VnaAotCTsgc3BhY2UuCi0JY21wCWVjeCwgYnl0ZSBTSVpFT0ZfRFdPUkQKLQlqYglzaG9ydCAuY29sdW1uX3N0MwotCW1vdmQJWE1NX0RXT1JEIFtlZGldLCB4bW1BCi0JYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfRFdPUkQKLQlzdWIJZWN4LCBieXRlIFNJWkVPRl9EV09SRAotCXBzcmxkcQl4bW1BLCBTSVpFT0ZfRFdPUkQKKyAgICAgICAgOyBTdG9yZSB0aGUgbG93ZXIgNCBieXRlcyBvZiB4bW1BIHRvIHRoZSBvdXRwdXQgd2hlbiBpdCBoYXMgZW5vdWdoCisgICAgICAgIDsgc3BhY2UuCisgICAgICAgIGNtcCAgICAgZWN4LCBieXRlIFNJWkVPRl9EV09SRAorICAgICAgICBqYiAgICAgIHNob3J0IC5jb2x1bW5fc3QzCisgICAgICAgIG1vdmQgICAgWE1NX0RXT1JEIFtlZGldLCB4bW1BCisgICAgICAgIGFkZCAgICAgZWRpLCBieXRlIFNJWkVPRl9EV09SRAorICAgICAgICBzdWIgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfRFdPUkQKKyAgICAgICAgcHNybGRxICB4bW1BLCBTSVpFT0ZfRFdPUkQKIC5jb2x1bW5fc3QzOgotCTsgU3RvcmUgdGhlIGxvd2VyIDIgYnl0ZXMgb2YgZWF4IHRvIHRoZSBvdXRwdXQgd2hlbiBpdCBoYXMgZW5vdWdoCi0JOyBzcGFjZS4KLQltb3ZkCWVheCwgeG1tQQotCWNtcAllY3gsIGJ5dGUgU0laRU9GX1dPUkQKLQlqYglzaG9ydCAuY29sdW1uX3N0MQotCW1vdglXT1JEIFtlZGldLCBheAotCWFkZAllZGksIGJ5dGUgU0laRU9GX1dPUkQKLQlzdWIJZWN4LCBieXRlIFNJWkVPRl9XT1JECi0Jc2hyCWVheCwgMTYKKyAgICAgICAgOyBTdG9yZSB0aGUgbG93ZXIgMiBieXRlcyBvZiBlYXggdG8gdGhlIG91dHB1dCB3aGVuIGl0IGhhcyBlbm91Z2gKKyAgICAgICAgOyBzcGFjZS4KKyAgICAgICAgbW92ZCAgICBlYXgsIHhtbUEKKyAgICAgICAgY21wICAgICBlY3gsIGJ5dGUgU0laRU9GX1dPUkQKKyAgICAgICAgamIgICAgICBzaG9ydCAuY29sdW1uX3N0MQorICAgICAgICBtb3YgICAgIFdPUkQgW2VkaV0sIGF4CisgICAgICAgIGFkZCAgICAgZWRpLCBieXRlIFNJWkVPRl9XT1JECisgICAgICAgIHN1YiAgICAgZWN4LCBieXRlIFNJWkVPRl9XT1JECisgICAgICAgIHNociAgICAgZWF4LCAxNgogLmNvbHVtbl9zdDE6Ci0JOyBTdG9yZSB0aGUgbG93ZXIgMSBieXRlIG9mIGVheCB0byB0aGUgb3V0cHV0IHdoZW4gaXQgaGFzIGVub3VnaAotCTsgc3BhY2UuCi0JdGVzdAllY3gsIGVjeAotCWp6CXNob3J0IC5uZXh0cm93Ci0JbW92CUJZVEUgW2VkaV0sIGFsCisgICAgICAgIDsgU3RvcmUgdGhlIGxvd2VyIDEgYnl0ZSBvZiBlYXggdG8gdGhlIG91dHB1dCB3aGVuIGl0IGhhcyBlbm91Z2gKKyAgICAgICAgOyBzcGFjZS4KKyAgICAgICAgdGVzdCAgICBlY3gsIGVjeAorICAgICAgICBqeiAgICAgIHNob3J0IC5uZXh0cm93CisgICAgICAgIG1vdiAgICAgQllURSBbZWRpXSwgYWwKIAogJWVsc2UgOyBSR0JfUElYRUxTSVpFID09IDQgOyAtLS0tLS0tLS0tLQogCiAlaWZkZWYgUkdCWF9GSUxMRVJfMFhGRgotCXBjbXBlcWIgICB4bW02LHhtbTYJCTsgeG1tNj1YRT1YKDAyNDY4QUNFKioqKioqKiopCi0JcGNtcGVxYiAgIHhtbTcseG1tNwkJOyB4bW03PVhPPVgoMTM1NzlCREYqKioqKioqKikKKyAgICAgICAgcGNtcGVxYiAgIHhtbTYseG1tNiAgICAgICAgICAgICA7IHhtbTY9WEU9WCgwMjQ2OEFDRSoqKioqKioqKQorICAgICAgICBwY21wZXFiICAgeG1tNyx4bW03ICAgICAgICAgICAgIDsgeG1tNz1YTz1YKDEzNTc5QkRGKioqKioqKiopCiAlZWxzZQotCXB4b3IgICAgICB4bW02LHhtbTYJCTsgeG1tNj1YRT1YKDAyNDY4QUNFKioqKioqKiopCi0JcHhvciAgICAgIHhtbTcseG1tNwkJOyB4bW03PVhPPVgoMTM1NzlCREYqKioqKioqKikKKyAgICAgICAgcHhvciAgICAgIHhtbTYseG1tNiAgICAgICAgICAgICA7IHhtbTY9WEU9WCgwMjQ2OEFDRSoqKioqKioqKQorICAgICAgICBweG9yICAgICAgeG1tNyx4bW03ICAgICAgICAgICAgIDsgeG1tNz1YTz1YKDEzNTc5QkRGKioqKioqKiopCiAlZW5kaWYKLQk7IHhtbUE9KDAwIDAyIDA0IDA2IDA4IDBBIDBDIDBFICoqKSwgeG1tQj0oMDEgMDMgMDUgMDcgMDkgMEIgMEQgMEYgKiopCi0JOyB4bW1DPSgxMCAxMiAxNCAxNiAxOCAxQSAxQyAxRSAqKiksIHhtbUQ9KDExIDEzIDE1IDE3IDE5IDFCIDFEIDFGICoqKQotCTsgeG1tRT0oMjAgMjIgMjQgMjYgMjggMkEgMkMgMkUgKiopLCB4bW1GPSgyMSAyMyAyNSAyNyAyOSAyQiAyRCAyRiAqKikKLQk7IHhtbUc9KDMwIDMyIDM0IDM2IDM4IDNBIDNDIDNFICoqKSwgeG1tSD0oMzEgMzMgMzUgMzcgMzkgM0IgM0QgM0YgKiopCisgICAgICAgIDsgeG1tQT0oMDAgMDIgMDQgMDYgMDggMEEgMEMgMEUgKiopLCB4bW1CPSgwMSAwMyAwNSAwNyAwOSAwQiAwRCAwRiAqKikKKyAgICAgICAgOyB4bW1DPSgxMCAxMiAxNCAxNiAxOCAxQSAxQyAxRSAqKiksIHhtbUQ9KDExIDEzIDE1IDE3IDE5IDFCIDFEIDFGICoqKQorICAgICAgICA7IHhtbUU9KDIwIDIyIDI0IDI2IDI4IDJBIDJDIDJFICoqKSwgeG1tRj0oMjEgMjMgMjUgMjcgMjkgMkIgMkQgMkYgKiopCisgICAgICAgIDsgeG1tRz0oMzAgMzIgMzQgMzYgMzggM0EgM0MgM0UgKiopLCB4bW1IPSgzMSAzMyAzNSAzNyAzOSAzQiAzRCAzRiAqKikKIAotCXB1bnBja2xidyB4bW1BLHhtbUMJOyB4bW1BPSgwMCAxMCAwMiAxMiAwNCAxNCAwNiAxNiAwOCAxOCAwQSAxQSAwQyAxQyAwRSAxRSkKLQlwdW5wY2tsYncgeG1tRSx4bW1HCTsgeG1tRT0oMjAgMzAgMjIgMzIgMjQgMzQgMjYgMzYgMjggMzggMkEgM0EgMkMgM0MgMkUgM0UpCi0JcHVucGNrbGJ3IHhtbUIseG1tRAk7IHhtbUI9KDAxIDExIDAzIDEzIDA1IDE1IDA3IDE3IDA5IDE5IDBCIDFCIDBEIDFEIDBGIDFGKQotCXB1bnBja2xidyB4bW1GLHhtbUgJOyB4bW1GPSgyMSAzMSAyMyAzMyAyNSAzNSAyNyAzNyAyOSAzOSAyQiAzQiAyRCAzRCAyRiAzRikKKyAgICAgICAgcHVucGNrbGJ3IHhtbUEseG1tQyAgICAgOyB4bW1BPSgwMCAxMCAwMiAxMiAwNCAxNCAwNiAxNiAwOCAxOCAwQSAxQSAwQyAxQyAwRSAxRSkKKyAgICAgICAgcHVucGNrbGJ3IHhtbUUseG1tRyAgICAgOyB4bW1FPSgyMCAzMCAyMiAzMiAyNCAzNCAyNiAzNiAyOCAzOCAyQSAzQSAyQyAzQyAyRSAzRSkKKyAgICAgICAgcHVucGNrbGJ3IHhtbUIseG1tRCAgICAgOyB4bW1CPSgwMSAxMSAwMyAxMyAwNSAxNSAwNyAxNyAwOSAxOSAwQiAxQiAwRCAxRCAwRiAxRikKKyAgICAgICAgcHVucGNrbGJ3IHhtbUYseG1tSCAgICAgOyB4bW1GPSgyMSAzMSAyMyAzMyAyNSAzNSAyNyAzNyAyOSAzOSAyQiAzQiAyRCAzRCAyRiAzRikKIAotCW1vdmRxYSAgICB4bW1DLHhtbUEKLQlwdW5wY2tsd2QgeG1tQSx4bW1FCTsgeG1tQT0oMDAgMTAgMjAgMzAgMDIgMTIgMjIgMzIgMDQgMTQgMjQgMzQgMDYgMTYgMjYgMzYpCi0JcHVucGNraHdkIHhtbUMseG1tRQk7IHhtbUM9KDA4IDE4IDI4IDM4IDBBIDFBIDJBIDNBIDBDIDFDIDJDIDNDIDBFIDFFIDJFIDNFKQotCW1vdmRxYSAgICB4bW1HLHhtbUIKLQlwdW5wY2tsd2QgeG1tQix4bW1GCTsgeG1tQj0oMDEgMTEgMjEgMzEgMDMgMTMgMjMgMzMgMDUgMTUgMjUgMzUgMDcgMTcgMjcgMzcpCi0JcHVucGNraHdkIHhtbUcseG1tRgk7IHhtbUc9KDA5IDE5IDI5IDM5IDBCIDFCIDJCIDNCIDBEIDFEIDJEIDNEIDBGIDFGIDJGIDNGKQorICAgICAgICBtb3ZkcWEgICAgeG1tQyx4bW1BCisgICAgICAgIHB1bnBja2x3ZCB4bW1BLHhtbUUgICAgIDsgeG1tQT0oMDAgMTAgMjAgMzAgMDIgMTIgMjIgMzIgMDQgMTQgMjQgMzQgMDYgMTYgMjYgMzYpCisgICAgICAgIHB1bnBja2h3ZCB4bW1DLHhtbUUgICAgIDsgeG1tQz0oMDggMTggMjggMzggMEEgMUEgMkEgM0EgMEMgMUMgMkMgM0MgMEUgMUUgMkUgM0UpCisgICAgICAgIG1vdmRxYSAgICB4bW1HLHhtbUIKKyAgICAgICAgcHVucGNrbHdkIHhtbUIseG1tRiAgICAgOyB4bW1CPSgwMSAxMSAyMSAzMSAwMyAxMyAyMyAzMyAwNSAxNSAyNSAzNSAwNyAxNyAyNyAzNykKKyAgICAgICAgcHVucGNraHdkIHhtbUcseG1tRiAgICAgOyB4bW1HPSgwOSAxOSAyOSAzOSAwQiAxQiAyQiAzQiAwRCAxRCAyRCAzRCAwRiAxRiAyRiAzRikKIAotCW1vdmRxYSAgICB4bW1ELHhtbUEKLQlwdW5wY2tsZHEgeG1tQSx4bW1CCTsgeG1tQT0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEgMDIgMTIgMjIgMzIgMDMgMTMgMjMgMzMpCi0JcHVucGNraGRxIHhtbUQseG1tQgk7IHhtbUQ9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1IDA2IDE2IDI2IDM2IDA3IDE3IDI3IDM3KQotCW1vdmRxYSAgICB4bW1ILHhtbUMKLQlwdW5wY2tsZHEgeG1tQyx4bW1HCTsgeG1tQz0oMDggMTggMjggMzggMDkgMTkgMjkgMzkgMEEgMUEgMkEgM0EgMEIgMUIgMkIgM0IpCi0JcHVucGNraGRxIHhtbUgseG1tRwk7IHhtbUg9KDBDIDFDIDJDIDNDIDBEIDFEIDJEIDNEIDBFIDFFIDJFIDNFIDBGIDFGIDJGIDNGKQorICAgICAgICBtb3ZkcWEgICAgeG1tRCx4bW1BCisgICAgICAgIHB1bnBja2xkcSB4bW1BLHhtbUIgICAgIDsgeG1tQT0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEgMDIgMTIgMjIgMzIgMDMgMTMgMjMgMzMpCisgICAgICAgIHB1bnBja2hkcSB4bW1ELHhtbUIgICAgIDsgeG1tRD0oMDQgMTQgMjQgMzQgMDUgMTUgMjUgMzUgMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCisgICAgICAgIG1vdmRxYSAgICB4bW1ILHhtbUMKKyAgICAgICAgcHVucGNrbGRxIHhtbUMseG1tRyAgICAgOyB4bW1DPSgwOCAxOCAyOCAzOCAwOSAxOSAyOSAzOSAwQSAxQSAyQSAzQSAwQiAxQiAyQiAzQikKKyAgICAgICAgcHVucGNraGRxIHhtbUgseG1tRyAgICAgOyB4bW1IPSgwQyAxQyAyQyAzQyAwRCAxRCAyRCAzRCAwRSAxRSAyRSAzRSAwRiAxRiAyRiAzRikKIAotCWNtcAllY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKLQlqYglzaG9ydCAuY29sdW1uX3N0MzIKKyAgICAgICAgY21wICAgICBlY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKyAgICAgICAgamIgICAgICBzaG9ydCAuY29sdW1uX3N0MzIKIAotCXRlc3QJZWRpLCBTSVpFT0ZfWE1NV09SRC0xCi0Jam56CXNob3J0IC5vdXQxCi0JOyAtLShhbGlnbmVkKS0tLS0tLS0tLS0tLS0tLS0tLS0KLQltb3ZudGRxCVhNTVdPUkQgW2VkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tQQotCW1vdm50ZHEJWE1NV09SRCBbZWRpKzEqU0laRU9GX1hNTVdPUkRdLCB4bW1ECi0JbW92bnRkcQlYTU1XT1JEIFtlZGkrMipTSVpFT0ZfWE1NV09SRF0sIHhtbUMKLQltb3ZudGRxCVhNTVdPUkQgW2VkaSszKlNJWkVPRl9YTU1XT1JEXSwgeG1tSAotCWptcAlzaG9ydCAub3V0MAotLm91dDE6CTsgLS0odW5hbGlnbmVkKS0tLS0tLS0tLS0tLS0tLS0tCi0JbW92ZHF1CVhNTVdPUkQgW2VkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tQQotCW1vdmRxdQlYTU1XT1JEIFtlZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbUQKLQltb3ZkcXUJWE1NV09SRCBbZWRpKzIqU0laRU9GX1hNTVdPUkRdLCB4bW1DCi0JbW92ZHF1CVhNTVdPUkQgW2VkaSszKlNJWkVPRl9YTU1XT1JEXSwgeG1tSAorICAgICAgICB0ZXN0ICAgIGVkaSwgU0laRU9GX1hNTVdPUkQtMQorICAgICAgICBqbnogICAgIHNob3J0IC5vdXQxCisgICAgICAgIDsgLS0oYWxpZ25lZCktLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIG1vdm50ZHEgWE1NV09SRCBbZWRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW1BCisgICAgICAgIG1vdm50ZHEgWE1NV09SRCBbZWRpKzEqU0laRU9GX1hNTVdPUkRdLCB4bW1ECisgICAgICAgIG1vdm50ZHEgWE1NV09SRCBbZWRpKzIqU0laRU9GX1hNTVdPUkRdLCB4bW1DCisgICAgICAgIG1vdm50ZHEgWE1NV09SRCBbZWRpKzMqU0laRU9GX1hNTVdPUkRdLCB4bW1ICisgICAgICAgIGptcCAgICAgc2hvcnQgLm91dDAKKy5vdXQxOiAgOyAtLSh1bmFsaWduZWQpLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgbW92ZHF1ICBYTU1XT1JEIFtlZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbUEKKyAgICAgICAgbW92ZHF1ICBYTU1XT1JEIFtlZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbUQKKyAgICAgICAgbW92ZHF1ICBYTU1XT1JEIFtlZGkrMipTSVpFT0ZfWE1NV09SRF0sIHhtbUMKKyAgICAgICAgbW92ZHF1ICBYTU1XT1JEIFtlZGkrMypTSVpFT0ZfWE1NV09SRF0sIHhtbUgKIC5vdXQwOgotCWFkZAllZGksIGJ5dGUgUkdCX1BJWEVMU0laRSpTSVpFT0ZfWE1NV09SRAk7IG91dHB0cgotCXN1YgllY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKLQlqegluZWFyIC5uZXh0cm93CisgICAgICAgIGFkZCAgICAgZWRpLCBieXRlIFJHQl9QSVhFTFNJWkUqU0laRU9GX1hNTVdPUkQgIDsgb3V0cHRyCisgICAgICAgIHN1YiAgICAgZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JECisgICAgICAgIGp6ICAgICAgbmVhciAubmV4dHJvdwogCi0JYWRkCWVzaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IGlucHRyMAotCWFkZAllYngsIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBpbnB0cjEKLQlhZGQJZWR4LCBieXRlIFNJWkVPRl9YTU1XT1JECTsgaW5wdHIyCi0Jam1wCW5lYXIgLmNvbHVtbmxvb3AKLQlhbGlnbngJMTYsNworICAgICAgICBhZGQgICAgIGVzaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRCAgICAgICAgOyBpbnB0cjAKKyAgICAgICAgYWRkICAgICBlYngsIGJ5dGUgU0laRU9GX1hNTVdPUkQgICAgICAgIDsgaW5wdHIxCisgICAgICAgIGFkZCAgICAgZWR4LCBieXRlIFNJWkVPRl9YTU1XT1JEICAgICAgICA7IGlucHRyMgorICAgICAgICBqbXAgICAgIG5lYXIgLmNvbHVtbmxvb3AKKyAgICAgICAgYWxpZ254ICAxNiw3CiAKIC5jb2x1bW5fc3QzMjoKLQljbXAJZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzIKLQlqYglzaG9ydCAuY29sdW1uX3N0MTYKLQltb3ZkcXUJWE1NV09SRCBbZWRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW1BCi0JbW92ZHF1CVhNTVdPUkQgW2VkaSsxKlNJWkVPRl9YTU1XT1JEXSwgeG1tRAotCWFkZAllZGksIGJ5dGUgMipTSVpFT0ZfWE1NV09SRAk7IG91dHB0cgotCW1vdmRxYQl4bW1BLHhtbUMKLQltb3ZkcWEJeG1tRCx4bW1ICi0Jc3ViCWVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC8yCisgICAgICAgIGNtcCAgICAgZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzIKKyAgICAgICAgamIgICAgICBzaG9ydCAuY29sdW1uX3N0MTYKKyAgICAgICAgbW92ZHF1ICBYTU1XT1JEIFtlZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbUEKKyAgICAgICAgbW92ZHF1ICBYTU1XT1JEIFtlZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbUQKKyAgICAgICAgYWRkICAgICBlZGksIGJ5dGUgMipTSVpFT0ZfWE1NV09SRCAgICAgIDsgb3V0cHRyCisgICAgICAgIG1vdmRxYSAgeG1tQSx4bW1DCisgICAgICAgIG1vdmRxYSAgeG1tRCx4bW1ICisgICAgICAgIHN1YiAgICAgZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzIKIC5jb2x1bW5fc3QxNjoKLQljbXAJZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzQKLQlqYglzaG9ydCAuY29sdW1uX3N0MTUKLQltb3ZkcXUJWE1NV09SRCBbZWRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW1BCi0JYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IG91dHB0cgotCW1vdmRxYQl4bW1BLHhtbUQKLQlzdWIJZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzQKKyAgICAgICAgY21wICAgICBlY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQvNAorICAgICAgICBqYiAgICAgIHNob3J0IC5jb2x1bW5fc3QxNQorICAgICAgICBtb3ZkcXUgIFhNTVdPUkQgW2VkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tQQorICAgICAgICBhZGQgICAgIGVkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRCAgICAgICAgOyBvdXRwdHIKKyAgICAgICAgbW92ZHFhICB4bW1BLHhtbUQKKyAgICAgICAgc3ViICAgICBlY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQvNAogLmNvbHVtbl9zdDE1OgotCTsgU3RvcmUgdHdvIHBpeGVscyAoOCBieXRlcykgb2YgeG1tQSB0byB0aGUgb3V0cHV0IHdoZW4gaXQgaGFzIGVub3VnaAotCTsgc3BhY2UuCi0JY21wCWVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC84Ci0JamIJc2hvcnQgLmNvbHVtbl9zdDcKLQltb3ZxCVhNTV9NTVdPUkQgW2VkaV0sIHhtbUEKLQlhZGQJZWRpLCBieXRlIFNJWkVPRl9YTU1XT1JELzgqNAotCXN1YgllY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQvOAotCXBzcmxkcQl4bW1BLCBTSVpFT0ZfWE1NV09SRC84KjQKKyAgICAgICAgOyBTdG9yZSB0d28gcGl4ZWxzICg4IGJ5dGVzKSBvZiB4bW1BIHRvIHRoZSBvdXRwdXQgd2hlbiBpdCBoYXMgZW5vdWdoCisgICAgICAgIDsgc3BhY2UuCisgICAgICAgIGNtcCAgICAgZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzgKKyAgICAgICAgamIgICAgICBzaG9ydCAuY29sdW1uX3N0NworICAgICAgICBtb3ZxICAgIFhNTV9NTVdPUkQgW2VkaV0sIHhtbUEKKyAgICAgICAgYWRkICAgICBlZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQvOCo0CisgICAgICAgIHN1YiAgICAgZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzgKKyAgICAgICAgcHNybGRxICB4bW1BLCBTSVpFT0ZfWE1NV09SRC84KjQKIC5jb2x1bW5fc3Q3OgotCTsgU3RvcmUgb25lIHBpeGVsICg0IGJ5dGVzKSBvZiB4bW1BIHRvIHRoZSBvdXRwdXQgd2hlbiBpdCBoYXMgZW5vdWdoCi0JOyBzcGFjZS4KLQl0ZXN0CWVjeCwgZWN4Ci0JanoJc2hvcnQgLm5leHRyb3cKLQltb3ZkCVhNTV9EV09SRCBbZWRpXSwgeG1tQQorICAgICAgICA7IFN0b3JlIG9uZSBwaXhlbCAoNCBieXRlcykgb2YgeG1tQSB0byB0aGUgb3V0cHV0IHdoZW4gaXQgaGFzIGVub3VnaAorICAgICAgICA7IHNwYWNlLgorICAgICAgICB0ZXN0ICAgIGVjeCwgZWN4CisgICAgICAgIGp6ICAgICAgc2hvcnQgLm5leHRyb3cKKyAgICAgICAgbW92ZCAgICBYTU1fRFdPUkQgW2VkaV0sIHhtbUEKIAogJWVuZGlmIDsgUkdCX1BJWEVMU0laRSA7IC0tLS0tLS0tLS0tLS0tLQogCi0JYWxpZ254CTE2LDcKKyAgICAgICAgYWxpZ254ICAxNiw3CiAKIC5uZXh0cm93OgotCXBvcAllY3gKLQlwb3AJZXNpCi0JcG9wCWVieAotCXBvcAllZHgKLQlwb3AJZWRpCi0JcG9wCWVheAorICAgICAgICBwb3AgICAgIGVjeAorICAgICAgICBwb3AgICAgIGVzaQorICAgICAgICBwb3AgICAgIGVieAorICAgICAgICBwb3AgICAgIGVkeAorICAgICAgICBwb3AgICAgIGVkaQorICAgICAgICBwb3AgICAgIGVheAogCi0JYWRkCWVzaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cKLQlhZGQJZWJ4LCBieXRlIFNJWkVPRl9KU0FNUFJPVwotCWFkZAllZHgsIGJ5dGUgU0laRU9GX0pTQU1QUk9XCi0JYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cJOyBvdXRwdXRfYnVmCi0JZGVjCWVheAkJCQk7IG51bV9yb3dzCi0JamcJbmVhciAucm93bG9vcAorICAgICAgICBhZGQgICAgIGVzaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cKKyAgICAgICAgYWRkICAgICBlYngsIGJ5dGUgU0laRU9GX0pTQU1QUk9XCisgICAgICAgIGFkZCAgICAgZWR4LCBieXRlIFNJWkVPRl9KU0FNUFJPVworICAgICAgICBhZGQgICAgIGVkaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cgICAgICAgOyBvdXRwdXRfYnVmCisgICAgICAgIGRlYyAgICAgZWF4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IG51bV9yb3dzCisgICAgICAgIGpnICAgICAgbmVhciAucm93bG9vcAogCi0Jc2ZlbmNlCQk7IGZsdXNoIHRoZSB3cml0ZSBidWZmZXIKKyAgICAgICAgc2ZlbmNlICAgICAgICAgIDsgZmx1c2ggdGhlIHdyaXRlIGJ1ZmZlcgogCiAucmV0dXJuOgotCXBvcAllZGkKLQlwb3AJZXNpCi07CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi07CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi0JcG9wCWVieAotCW1vdgllc3AsZWJwCQk7IGVzcCA8LSBhbGlnbmVkIGVicAotCXBvcAllc3AJCTsgZXNwIDwtIG9yaWdpbmFsIGVicAotCXBvcAllYnAKLQlyZXQKKyAgICAgICAgcG9wICAgICBlZGkKKyAgICAgICAgcG9wICAgICBlc2kKKzsgICAgICAgcG9wICAgICBlZHggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICAgICAgcG9wICAgICBlY3ggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICAgICAgcG9wICAgICBlYngKKyAgICAgICAgbW92ICAgICBlc3AsZWJwICAgICAgICAgOyBlc3AgPC0gYWxpZ25lZCBlYnAKKyAgICAgICAgcG9wICAgICBlc3AgICAgICAgICAgICAgOyBlc3AgPC0gb3JpZ2luYWwgZWJwCisgICAgICAgIHBvcCAgICAgZWJwCisgICAgICAgIHJldAogCiA7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQogOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgotCWFsaWduCTE2CisgICAgICAgIGFsaWduICAgMTYKZGlmZiAtLWdpdCBhL3NpbWQvamRjb2xtbXguYXNtIGIvc2ltZC9qZGNvbG1teC5hc20KaW5kZXggNWU0ZTQ3ZC4uZDI5NjZmZSAxMDA2NDQKLS0tIGEvc2ltZC9qZGNvbG1teC5hc20KKysrIGIvc2ltZC9qZGNvbG1teC5hc20KQEAgLTIxLDM1ICsyMSwzNSBAQAogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSVkZWZpbmUgU0NBTEVCSVRTCTE2CislZGVmaW5lIFNDQUxFQklUUyAgICAgICAxNgogCi1GXzBfMzQ0CWVxdQkgMjI1NTQJCQk7IEZJWCgwLjM0NDE0KQotRl8wXzcxNAllcXUJIDQ2ODAyCQkJOyBGSVgoMC43MTQxNCkKLUZfMV80MDIJZXF1CSA5MTg4MQkJCTsgRklYKDEuNDAyMDApCi1GXzFfNzcyCWVxdQkxMTYxMzAJCQk7IEZJWCgxLjc3MjAwKQotRl8wXzQwMgllcXUJKEZfMV80MDIgLSA2NTUzNikJOyBGSVgoMS40MDIwMCkgLSBGSVgoMSkKLUZfMF8yODUJZXF1CSggNjU1MzYgLSBGXzBfNzE0KQk7IEZJWCgxKSAtIEZJWCgwLjcxNDE0KQotRl8wXzIyOAllcXUJKDEzMTA3MiAtIEZfMV83NzIpCTsgRklYKDIpIC0gRklYKDEuNzcyMDApCitGXzBfMzQ0IGVxdSAgICAgIDIyNTU0ICAgICAgICAgICAgICAgICAgOyBGSVgoMC4zNDQxNCkKK0ZfMF83MTQgZXF1ICAgICAgNDY4MDIgICAgICAgICAgICAgICAgICA7IEZJWCgwLjcxNDE0KQorRl8xXzQwMiBlcXUgICAgICA5MTg4MSAgICAgICAgICAgICAgICAgIDsgRklYKDEuNDAyMDApCitGXzFfNzcyIGVxdSAgICAgMTE2MTMwICAgICAgICAgICAgICAgICAgOyBGSVgoMS43NzIwMCkKK0ZfMF80MDIgZXF1ICAgICAoRl8xXzQwMiAtIDY1NTM2KSAgICAgICA7IEZJWCgxLjQwMjAwKSAtIEZJWCgxKQorRl8wXzI4NSBlcXUgICAgICggNjU1MzYgLSBGXzBfNzE0KSAgICAgIDsgRklYKDEpIC0gRklYKDAuNzE0MTQpCitGXzBfMjI4IGVxdSAgICAgKDEzMTA3MiAtIEZfMV83NzIpICAgICAgOyBGSVgoMikgLSBGSVgoMS43NzIwMCkKIAogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCVNFQ1RJT04JU0VHX0NPTlNUCisgICAgICAgIFNFQ1RJT04gU0VHX0NPTlNUCiAKLQlhbGlnbnoJMTYKLQlnbG9iYWwJRVhUTihqY29uc3RfeWNjX3JnYl9jb252ZXJ0X21teCkKKyAgICAgICAgYWxpZ256ICAxNgorICAgICAgICBnbG9iYWwgIEVYVE4oamNvbnN0X3ljY19yZ2JfY29udmVydF9tbXgpCiAKIEVYVE4oamNvbnN0X3ljY19yZ2JfY29udmVydF9tbXgpOgogCi1QV19GMDQwMgl0aW1lcyA0IGR3ICBGXzBfNDAyCi1QV19NRjAyMjgJdGltZXMgNCBkdyAtRl8wXzIyOAotUFdfTUYwMzQ0X0YwMjg1CXRpbWVzIDIgZHcgLUZfMF8zNDQsIEZfMF8yODUKLVBXX09ORQkJdGltZXMgNCBkdyAgMQotUERfT05FSEFMRgl0aW1lcyAyIGRkICAxIDw8IChTQ0FMRUJJVFMtMSkKK1BXX0YwNDAyICAgICAgICB0aW1lcyA0IGR3ICBGXzBfNDAyCitQV19NRjAyMjggICAgICAgdGltZXMgNCBkdyAtRl8wXzIyOAorUFdfTUYwMzQ0X0YwMjg1IHRpbWVzIDIgZHcgLUZfMF8zNDQsIEZfMF8yODUKK1BXX09ORSAgICAgICAgICB0aW1lcyA0IGR3ICAxCitQRF9PTkVIQUxGICAgICAgdGltZXMgMiBkZCAgMSA8PCAoU0NBTEVCSVRTLTEpCiAKLQlhbGlnbnoJMTYKKyAgICAgICAgYWxpZ256ICAxNgogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JU0VDVElPTglTRUdfVEVYVAotCUJJVFMJMzIKKyAgICAgICAgU0VDVElPTiBTRUdfVEVYVAorICAgICAgICBCSVRTICAgIDMyCiAKICVpbmNsdWRlICJqZGNscm1teC5hc20iCiAKZGlmZiAtLWdpdCBhL3NpbWQvamRjb2xzczItNjQuYXNtIGIvc2ltZC9qZGNvbHNzMi02NC5hc20KaW5kZXggMDFiM2RjZS4uYjQ4NDYxOCAxMDA2NDQKLS0tIGEvc2ltZC9qZGNvbHNzMi02NC5hc20KKysrIGIvc2ltZC9qZGNvbHNzMi02NC5hc20KQEAgLTIxLDM1ICsyMSwzNSBAQAogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSVkZWZpbmUgU0NBTEVCSVRTCTE2CislZGVmaW5lIFNDQUxFQklUUyAgICAgICAxNgogCi1GXzBfMzQ0CWVxdQkgMjI1NTQJCQk7IEZJWCgwLjM0NDE0KQotRl8wXzcxNAllcXUJIDQ2ODAyCQkJOyBGSVgoMC43MTQxNCkKLUZfMV80MDIJZXF1CSA5MTg4MQkJCTsgRklYKDEuNDAyMDApCi1GXzFfNzcyCWVxdQkxMTYxMzAJCQk7IEZJWCgxLjc3MjAwKQotRl8wXzQwMgllcXUJKEZfMV80MDIgLSA2NTUzNikJOyBGSVgoMS40MDIwMCkgLSBGSVgoMSkKLUZfMF8yODUJZXF1CSggNjU1MzYgLSBGXzBfNzE0KQk7IEZJWCgxKSAtIEZJWCgwLjcxNDE0KQotRl8wXzIyOAllcXUJKDEzMTA3MiAtIEZfMV83NzIpCTsgRklYKDIpIC0gRklYKDEuNzcyMDApCitGXzBfMzQ0IGVxdSAgICAgIDIyNTU0ICAgICAgICAgICAgICAgICAgOyBGSVgoMC4zNDQxNCkKK0ZfMF83MTQgZXF1ICAgICAgNDY4MDIgICAgICAgICAgICAgICAgICA7IEZJWCgwLjcxNDE0KQorRl8xXzQwMiBlcXUgICAgICA5MTg4MSAgICAgICAgICAgICAgICAgIDsgRklYKDEuNDAyMDApCitGXzFfNzcyIGVxdSAgICAgMTE2MTMwICAgICAgICAgICAgICAgICAgOyBGSVgoMS43NzIwMCkKK0ZfMF80MDIgZXF1ICAgICAoRl8xXzQwMiAtIDY1NTM2KSAgICAgICA7IEZJWCgxLjQwMjAwKSAtIEZJWCgxKQorRl8wXzI4NSBlcXUgICAgICggNjU1MzYgLSBGXzBfNzE0KSAgICAgIDsgRklYKDEpIC0gRklYKDAuNzE0MTQpCitGXzBfMjI4IGVxdSAgICAgKDEzMTA3MiAtIEZfMV83NzIpICAgICAgOyBGSVgoMikgLSBGSVgoMS43NzIwMCkKIAogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCVNFQ1RJT04JU0VHX0NPTlNUCisgICAgICAgIFNFQ1RJT04gU0VHX0NPTlNUCiAKLQlhbGlnbnoJMTYKLQlnbG9iYWwJRVhUTihqY29uc3RfeWNjX3JnYl9jb252ZXJ0X3NzZTIpCisgICAgICAgIGFsaWdueiAgMTYKKyAgICAgICAgZ2xvYmFsICBFWFROKGpjb25zdF95Y2NfcmdiX2NvbnZlcnRfc3NlMikKIAogRVhUTihqY29uc3RfeWNjX3JnYl9jb252ZXJ0X3NzZTIpOgogCi1QV19GMDQwMgl0aW1lcyA4IGR3ICBGXzBfNDAyCi1QV19NRjAyMjgJdGltZXMgOCBkdyAtRl8wXzIyOAotUFdfTUYwMzQ0X0YwMjg1CXRpbWVzIDQgZHcgLUZfMF8zNDQsIEZfMF8yODUKLVBXX09ORQkJdGltZXMgOCBkdyAgMQotUERfT05FSEFMRgl0aW1lcyA0IGRkICAxIDw8IChTQ0FMRUJJVFMtMSkKK1BXX0YwNDAyICAgICAgICB0aW1lcyA4IGR3ICBGXzBfNDAyCitQV19NRjAyMjggICAgICAgdGltZXMgOCBkdyAtRl8wXzIyOAorUFdfTUYwMzQ0X0YwMjg1IHRpbWVzIDQgZHcgLUZfMF8zNDQsIEZfMF8yODUKK1BXX09ORSAgICAgICAgICB0aW1lcyA4IGR3ICAxCitQRF9PTkVIQUxGICAgICAgdGltZXMgNCBkZCAgMSA8PCAoU0NBTEVCSVRTLTEpCiAKLQlhbGlnbnoJMTYKKyAgICAgICAgYWxpZ256ICAxNgogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JU0VDVElPTglTRUdfVEVYVAotCUJJVFMJNjQKKyAgICAgICAgU0VDVElPTiBTRUdfVEVYVAorICAgICAgICBCSVRTICAgIDY0CiAKICVpbmNsdWRlICJqZGNscnNzMi02NC5hc20iCiAKZGlmZiAtLWdpdCBhL3NpbWQvamRjb2xzczIuYXNtIGIvc2ltZC9qZGNvbHNzMi5hc20KaW5kZXggMTkxMmQ5Mi4uMzhlZDQxNiAxMDA2NDQKLS0tIGEvc2ltZC9qZGNvbHNzMi5hc20KKysrIGIvc2ltZC9qZGNvbHNzMi5hc20KQEAgLTIxLDM1ICsyMSwzNSBAQAogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSVkZWZpbmUgU0NBTEVCSVRTCTE2CislZGVmaW5lIFNDQUxFQklUUyAgICAgICAxNgogCi1GXzBfMzQ0CWVxdQkgMjI1NTQJCQk7IEZJWCgwLjM0NDE0KQotRl8wXzcxNAllcXUJIDQ2ODAyCQkJOyBGSVgoMC43MTQxNCkKLUZfMV80MDIJZXF1CSA5MTg4MQkJCTsgRklYKDEuNDAyMDApCi1GXzFfNzcyCWVxdQkxMTYxMzAJCQk7IEZJWCgxLjc3MjAwKQotRl8wXzQwMgllcXUJKEZfMV80MDIgLSA2NTUzNikJOyBGSVgoMS40MDIwMCkgLSBGSVgoMSkKLUZfMF8yODUJZXF1CSggNjU1MzYgLSBGXzBfNzE0KQk7IEZJWCgxKSAtIEZJWCgwLjcxNDE0KQotRl8wXzIyOAllcXUJKDEzMTA3MiAtIEZfMV83NzIpCTsgRklYKDIpIC0gRklYKDEuNzcyMDApCitGXzBfMzQ0IGVxdSAgICAgIDIyNTU0ICAgICAgICAgICAgICAgICAgOyBGSVgoMC4zNDQxNCkKK0ZfMF83MTQgZXF1ICAgICAgNDY4MDIgICAgICAgICAgICAgICAgICA7IEZJWCgwLjcxNDE0KQorRl8xXzQwMiBlcXUgICAgICA5MTg4MSAgICAgICAgICAgICAgICAgIDsgRklYKDEuNDAyMDApCitGXzFfNzcyIGVxdSAgICAgMTE2MTMwICAgICAgICAgICAgICAgICAgOyBGSVgoMS43NzIwMCkKK0ZfMF80MDIgZXF1ICAgICAoRl8xXzQwMiAtIDY1NTM2KSAgICAgICA7IEZJWCgxLjQwMjAwKSAtIEZJWCgxKQorRl8wXzI4NSBlcXUgICAgICggNjU1MzYgLSBGXzBfNzE0KSAgICAgIDsgRklYKDEpIC0gRklYKDAuNzE0MTQpCitGXzBfMjI4IGVxdSAgICAgKDEzMTA3MiAtIEZfMV83NzIpICAgICAgOyBGSVgoMikgLSBGSVgoMS43NzIwMCkKIAogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCVNFQ1RJT04JU0VHX0NPTlNUCisgICAgICAgIFNFQ1RJT04gU0VHX0NPTlNUCiAKLQlhbGlnbnoJMTYKLQlnbG9iYWwJRVhUTihqY29uc3RfeWNjX3JnYl9jb252ZXJ0X3NzZTIpCisgICAgICAgIGFsaWdueiAgMTYKKyAgICAgICAgZ2xvYmFsICBFWFROKGpjb25zdF95Y2NfcmdiX2NvbnZlcnRfc3NlMikKIAogRVhUTihqY29uc3RfeWNjX3JnYl9jb252ZXJ0X3NzZTIpOgogCi1QV19GMDQwMgl0aW1lcyA4IGR3ICBGXzBfNDAyCi1QV19NRjAyMjgJdGltZXMgOCBkdyAtRl8wXzIyOAotUFdfTUYwMzQ0X0YwMjg1CXRpbWVzIDQgZHcgLUZfMF8zNDQsIEZfMF8yODUKLVBXX09ORQkJdGltZXMgOCBkdyAgMQotUERfT05FSEFMRgl0aW1lcyA0IGRkICAxIDw8IChTQ0FMRUJJVFMtMSkKK1BXX0YwNDAyICAgICAgICB0aW1lcyA4IGR3ICBGXzBfNDAyCitQV19NRjAyMjggICAgICAgdGltZXMgOCBkdyAtRl8wXzIyOAorUFdfTUYwMzQ0X0YwMjg1IHRpbWVzIDQgZHcgLUZfMF8zNDQsIEZfMF8yODUKK1BXX09ORSAgICAgICAgICB0aW1lcyA4IGR3ICAxCitQRF9PTkVIQUxGICAgICAgdGltZXMgNCBkZCAgMSA8PCAoU0NBTEVCSVRTLTEpCiAKLQlhbGlnbnoJMTYKKyAgICAgICAgYWxpZ256ICAxNgogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JU0VDVElPTglTRUdfVEVYVAotCUJJVFMJMzIKKyAgICAgICAgU0VDVElPTiBTRUdfVEVYVAorICAgICAgICBCSVRTICAgIDMyCiAKICVpbmNsdWRlICJqZGNscnNzMi5hc20iCiAKZGlmZiAtLWdpdCBhL3NpbWQvamRjdC5pbmMgYi9zaW1kL2pkY3QuaW5jCmluZGV4IGNjNjI3MDQuLmFkNTg5MGMgMTAwNjQ0Ci0tLSBhL3NpbWQvamRjdC5pbmMKKysrIGIvc2ltZC9qZGN0LmluYwpAQCAtMTgsMTEgKzE4LDExIEBACiA7CiAlZGVmaW5lIFJBTkdFX01BU0sgIChNQVhKU0FNUExFICogNCArIDMpICA7IDIgYml0cyB3aWRlciB0aGFuIGxlZ2FsIHNhbXBsZXMKIAotJWRlZmluZSBST1cobixiLHMpCQkoKGIpKyhuKSoocykpCi0lZGVmaW5lIENPTChuLGIscykJCSgoYikrKG4pKihzKSpEQ1RTSVpFKQorJWRlZmluZSBST1cobixiLHMpICAgICAgICAgICAgICAoKGIpKyhuKSoocykpCislZGVmaW5lIENPTChuLGIscykgICAgICAgICAgICAgICgoYikrKG4pKihzKSpEQ1RTSVpFKQogCi0lZGVmaW5lIERXQkxPQ0sobSxuLGIscykJKChiKSsobSkqRENUU0laRSoocykrKG4pKlNJWkVPRl9EV09SRCkKLSVkZWZpbmUgTU1CTE9DSyhtLG4sYixzKQkoKGIpKyhtKSpEQ1RTSVpFKihzKSsobikqU0laRU9GX01NV09SRCkKLSVkZWZpbmUgWE1NQkxPQ0sobSxuLGIscykJKChiKSsobSkqRENUU0laRSoocykrKG4pKlNJWkVPRl9YTU1XT1JEKQorJWRlZmluZSBEV0JMT0NLKG0sbixiLHMpICAgICAgICAoKGIpKyhtKSpEQ1RTSVpFKihzKSsobikqU0laRU9GX0RXT1JEKQorJWRlZmluZSBNTUJMT0NLKG0sbixiLHMpICAgICAgICAoKGIpKyhtKSpEQ1RTSVpFKihzKSsobikqU0laRU9GX01NV09SRCkKKyVkZWZpbmUgWE1NQkxPQ0sobSxuLGIscykgICAgICAgKChiKSsobSkqRENUU0laRSoocykrKG4pKlNJWkVPRl9YTU1XT1JEKQogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9zaW1kL2pkbWVybW14LmFzbSBiL3NpbWQvamRtZXJtbXguYXNtCmluZGV4IDdiODZjNzQuLmMyMDkzYzIgMTAwNjQ0Ci0tLSBhL3NpbWQvamRtZXJtbXguYXNtCisrKyBiL3NpbWQvamRtZXJtbXguYXNtCkBAIC0yMSwzNSArMjEsMzUgQEAKIAogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0lZGVmaW5lIFNDQUxFQklUUwkxNgorJWRlZmluZSBTQ0FMRUJJVFMgICAgICAgMTYKIAotRl8wXzM0NAllcXUJIDIyNTU0CQkJOyBGSVgoMC4zNDQxNCkKLUZfMF83MTQJZXF1CSA0NjgwMgkJCTsgRklYKDAuNzE0MTQpCi1GXzFfNDAyCWVxdQkgOTE4ODEJCQk7IEZJWCgxLjQwMjAwKQotRl8xXzc3MgllcXUJMTE2MTMwCQkJOyBGSVgoMS43NzIwMCkKLUZfMF80MDIJZXF1CShGXzFfNDAyIC0gNjU1MzYpCTsgRklYKDEuNDAyMDApIC0gRklYKDEpCi1GXzBfMjg1CWVxdQkoIDY1NTM2IC0gRl8wXzcxNCkJOyBGSVgoMSkgLSBGSVgoMC43MTQxNCkKLUZfMF8yMjgJZXF1CSgxMzEwNzIgLSBGXzFfNzcyKQk7IEZJWCgyKSAtIEZJWCgxLjc3MjAwKQorRl8wXzM0NCBlcXUgICAgICAyMjU1NCAgICAgICAgICAgICAgICAgIDsgRklYKDAuMzQ0MTQpCitGXzBfNzE0IGVxdSAgICAgIDQ2ODAyICAgICAgICAgICAgICAgICAgOyBGSVgoMC43MTQxNCkKK0ZfMV80MDIgZXF1ICAgICAgOTE4ODEgICAgICAgICAgICAgICAgICA7IEZJWCgxLjQwMjAwKQorRl8xXzc3MiBlcXUgICAgIDExNjEzMCAgICAgICAgICAgICAgICAgIDsgRklYKDEuNzcyMDApCitGXzBfNDAyIGVxdSAgICAgKEZfMV80MDIgLSA2NTUzNikgICAgICAgOyBGSVgoMS40MDIwMCkgLSBGSVgoMSkKK0ZfMF8yODUgZXF1ICAgICAoIDY1NTM2IC0gRl8wXzcxNCkgICAgICA7IEZJWCgxKSAtIEZJWCgwLjcxNDE0KQorRl8wXzIyOCBlcXUgICAgICgxMzEwNzIgLSBGXzFfNzcyKSAgICAgIDsgRklYKDIpIC0gRklYKDEuNzcyMDApCiAKIDsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlTRUNUSU9OCVNFR19DT05TVAorICAgICAgICBTRUNUSU9OIFNFR19DT05TVAogCi0JYWxpZ256CTE2Ci0JZ2xvYmFsCUVYVE4oamNvbnN0X21lcmdlZF91cHNhbXBsZV9tbXgpCisgICAgICAgIGFsaWdueiAgMTYKKyAgICAgICAgZ2xvYmFsICBFWFROKGpjb25zdF9tZXJnZWRfdXBzYW1wbGVfbW14KQogCiBFWFROKGpjb25zdF9tZXJnZWRfdXBzYW1wbGVfbW14KToKIAotUFdfRjA0MDIJdGltZXMgNCBkdyAgRl8wXzQwMgotUFdfTUYwMjI4CXRpbWVzIDQgZHcgLUZfMF8yMjgKLVBXX01GMDM0NF9GMDI4NQl0aW1lcyAyIGR3IC1GXzBfMzQ0LCBGXzBfMjg1Ci1QV19PTkUJCXRpbWVzIDQgZHcgIDEKLVBEX09ORUhBTEYJdGltZXMgMiBkZCAgMSA8PCAoU0NBTEVCSVRTLTEpCitQV19GMDQwMiAgICAgICAgdGltZXMgNCBkdyAgRl8wXzQwMgorUFdfTUYwMjI4ICAgICAgIHRpbWVzIDQgZHcgLUZfMF8yMjgKK1BXX01GMDM0NF9GMDI4NSB0aW1lcyAyIGR3IC1GXzBfMzQ0LCBGXzBfMjg1CitQV19PTkUgICAgICAgICAgdGltZXMgNCBkdyAgMQorUERfT05FSEFMRiAgICAgIHRpbWVzIDIgZGQgIDEgPDwgKFNDQUxFQklUUy0xKQogCi0JYWxpZ256CTE2CisgICAgICAgIGFsaWdueiAgMTYKIAogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCVNFQ1RJT04JU0VHX1RFWFQKLQlCSVRTCTMyCisgICAgICAgIFNFQ1RJT04gU0VHX1RFWFQKKyAgICAgICAgQklUUyAgICAzMgogCiAlaW5jbHVkZSAiamRtcmdtbXguYXNtIgogCmRpZmYgLS1naXQgYS9zaW1kL2pkbWVyc3MyLTY0LmFzbSBiL3NpbWQvamRtZXJzczItNjQuYXNtCmluZGV4IGExODRlYTYuLjFmMGIzMzkgMTAwNjQ0Ci0tLSBhL3NpbWQvamRtZXJzczItNjQuYXNtCisrKyBiL3NpbWQvamRtZXJzczItNjQuYXNtCkBAIC0yMSwzNSArMjEsMzUgQEAKIAogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0lZGVmaW5lIFNDQUxFQklUUwkxNgorJWRlZmluZSBTQ0FMRUJJVFMgICAgICAgMTYKIAotRl8wXzM0NAllcXUJIDIyNTU0CQkJOyBGSVgoMC4zNDQxNCkKLUZfMF83MTQJZXF1CSA0NjgwMgkJCTsgRklYKDAuNzE0MTQpCi1GXzFfNDAyCWVxdQkgOTE4ODEJCQk7IEZJWCgxLjQwMjAwKQotRl8xXzc3MgllcXUJMTE2MTMwCQkJOyBGSVgoMS43NzIwMCkKLUZfMF80MDIJZXF1CShGXzFfNDAyIC0gNjU1MzYpCTsgRklYKDEuNDAyMDApIC0gRklYKDEpCi1GXzBfMjg1CWVxdQkoIDY1NTM2IC0gRl8wXzcxNCkJOyBGSVgoMSkgLSBGSVgoMC43MTQxNCkKLUZfMF8yMjgJZXF1CSgxMzEwNzIgLSBGXzFfNzcyKQk7IEZJWCgyKSAtIEZJWCgxLjc3MjAwKQorRl8wXzM0NCBlcXUgICAgICAyMjU1NCAgICAgICAgICAgICAgICAgIDsgRklYKDAuMzQ0MTQpCitGXzBfNzE0IGVxdSAgICAgIDQ2ODAyICAgICAgICAgICAgICAgICAgOyBGSVgoMC43MTQxNCkKK0ZfMV80MDIgZXF1ICAgICAgOTE4ODEgICAgICAgICAgICAgICAgICA7IEZJWCgxLjQwMjAwKQorRl8xXzc3MiBlcXUgICAgIDExNjEzMCAgICAgICAgICAgICAgICAgIDsgRklYKDEuNzcyMDApCitGXzBfNDAyIGVxdSAgICAgKEZfMV80MDIgLSA2NTUzNikgICAgICAgOyBGSVgoMS40MDIwMCkgLSBGSVgoMSkKK0ZfMF8yODUgZXF1ICAgICAoIDY1NTM2IC0gRl8wXzcxNCkgICAgICA7IEZJWCgxKSAtIEZJWCgwLjcxNDE0KQorRl8wXzIyOCBlcXUgICAgICgxMzEwNzIgLSBGXzFfNzcyKSAgICAgIDsgRklYKDIpIC0gRklYKDEuNzcyMDApCiAKIDsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlTRUNUSU9OCVNFR19DT05TVAorICAgICAgICBTRUNUSU9OIFNFR19DT05TVAogCi0JYWxpZ256CTE2Ci0JZ2xvYmFsCUVYVE4oamNvbnN0X21lcmdlZF91cHNhbXBsZV9zc2UyKQorICAgICAgICBhbGlnbnogIDE2CisgICAgICAgIGdsb2JhbCAgRVhUTihqY29uc3RfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIpCiAKIEVYVE4oamNvbnN0X21lcmdlZF91cHNhbXBsZV9zc2UyKToKIAotUFdfRjA0MDIJdGltZXMgOCBkdyAgRl8wXzQwMgotUFdfTUYwMjI4CXRpbWVzIDggZHcgLUZfMF8yMjgKLVBXX01GMDM0NF9GMDI4NQl0aW1lcyA0IGR3IC1GXzBfMzQ0LCBGXzBfMjg1Ci1QV19PTkUJCXRpbWVzIDggZHcgIDEKLVBEX09ORUhBTEYJdGltZXMgNCBkZCAgMSA8PCAoU0NBTEVCSVRTLTEpCitQV19GMDQwMiAgICAgICAgdGltZXMgOCBkdyAgRl8wXzQwMgorUFdfTUYwMjI4ICAgICAgIHRpbWVzIDggZHcgLUZfMF8yMjgKK1BXX01GMDM0NF9GMDI4NSB0aW1lcyA0IGR3IC1GXzBfMzQ0LCBGXzBfMjg1CitQV19PTkUgICAgICAgICAgdGltZXMgOCBkdyAgMQorUERfT05FSEFMRiAgICAgIHRpbWVzIDQgZGQgIDEgPDwgKFNDQUxFQklUUy0xKQogCi0JYWxpZ256CTE2CisgICAgICAgIGFsaWdueiAgMTYKIAogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCVNFQ1RJT04JU0VHX1RFWFQKLQlCSVRTCTY0CisgICAgICAgIFNFQ1RJT04gU0VHX1RFWFQKKyAgICAgICAgQklUUyAgICA2NAogCiAlaW5jbHVkZSAiamRtcmdzczItNjQuYXNtIgogCmRpZmYgLS1naXQgYS9zaW1kL2pkbWVyc3MyLmFzbSBiL3NpbWQvamRtZXJzczIuYXNtCmluZGV4IGU1MzZjODAuLjYwZDBlYmIgMTAwNjQ0Ci0tLSBhL3NpbWQvamRtZXJzczIuYXNtCisrKyBiL3NpbWQvamRtZXJzczIuYXNtCkBAIC0yMSwzNSArMjEsMzUgQEAKIAogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0lZGVmaW5lIFNDQUxFQklUUwkxNgorJWRlZmluZSBTQ0FMRUJJVFMgICAgICAgMTYKIAotRl8wXzM0NAllcXUJIDIyNTU0CQkJOyBGSVgoMC4zNDQxNCkKLUZfMF83MTQJZXF1CSA0NjgwMgkJCTsgRklYKDAuNzE0MTQpCi1GXzFfNDAyCWVxdQkgOTE4ODEJCQk7IEZJWCgxLjQwMjAwKQotRl8xXzc3MgllcXUJMTE2MTMwCQkJOyBGSVgoMS43NzIwMCkKLUZfMF80MDIJZXF1CShGXzFfNDAyIC0gNjU1MzYpCTsgRklYKDEuNDAyMDApIC0gRklYKDEpCi1GXzBfMjg1CWVxdQkoIDY1NTM2IC0gRl8wXzcxNCkJOyBGSVgoMSkgLSBGSVgoMC43MTQxNCkKLUZfMF8yMjgJZXF1CSgxMzEwNzIgLSBGXzFfNzcyKQk7IEZJWCgyKSAtIEZJWCgxLjc3MjAwKQorRl8wXzM0NCBlcXUgICAgICAyMjU1NCAgICAgICAgICAgICAgICAgIDsgRklYKDAuMzQ0MTQpCitGXzBfNzE0IGVxdSAgICAgIDQ2ODAyICAgICAgICAgICAgICAgICAgOyBGSVgoMC43MTQxNCkKK0ZfMV80MDIgZXF1ICAgICAgOTE4ODEgICAgICAgICAgICAgICAgICA7IEZJWCgxLjQwMjAwKQorRl8xXzc3MiBlcXUgICAgIDExNjEzMCAgICAgICAgICAgICAgICAgIDsgRklYKDEuNzcyMDApCitGXzBfNDAyIGVxdSAgICAgKEZfMV80MDIgLSA2NTUzNikgICAgICAgOyBGSVgoMS40MDIwMCkgLSBGSVgoMSkKK0ZfMF8yODUgZXF1ICAgICAoIDY1NTM2IC0gRl8wXzcxNCkgICAgICA7IEZJWCgxKSAtIEZJWCgwLjcxNDE0KQorRl8wXzIyOCBlcXUgICAgICgxMzEwNzIgLSBGXzFfNzcyKSAgICAgIDsgRklYKDIpIC0gRklYKDEuNzcyMDApCiAKIDsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlTRUNUSU9OCVNFR19DT05TVAorICAgICAgICBTRUNUSU9OIFNFR19DT05TVAogCi0JYWxpZ256CTE2Ci0JZ2xvYmFsCUVYVE4oamNvbnN0X21lcmdlZF91cHNhbXBsZV9zc2UyKQorICAgICAgICBhbGlnbnogIDE2CisgICAgICAgIGdsb2JhbCAgRVhUTihqY29uc3RfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIpCiAKIEVYVE4oamNvbnN0X21lcmdlZF91cHNhbXBsZV9zc2UyKToKIAotUFdfRjA0MDIJdGltZXMgOCBkdyAgRl8wXzQwMgotUFdfTUYwMjI4CXRpbWVzIDggZHcgLUZfMF8yMjgKLVBXX01GMDM0NF9GMDI4NQl0aW1lcyA0IGR3IC1GXzBfMzQ0LCBGXzBfMjg1Ci1QV19PTkUJCXRpbWVzIDggZHcgIDEKLVBEX09ORUhBTEYJdGltZXMgNCBkZCAgMSA8PCAoU0NBTEVCSVRTLTEpCitQV19GMDQwMiAgICAgICAgdGltZXMgOCBkdyAgRl8wXzQwMgorUFdfTUYwMjI4ICAgICAgIHRpbWVzIDggZHcgLUZfMF8yMjgKK1BXX01GMDM0NF9GMDI4NSB0aW1lcyA0IGR3IC1GXzBfMzQ0LCBGXzBfMjg1CitQV19PTkUgICAgICAgICAgdGltZXMgOCBkdyAgMQorUERfT05FSEFMRiAgICAgIHRpbWVzIDQgZGQgIDEgPDwgKFNDQUxFQklUUy0xKQogCi0JYWxpZ256CTE2CisgICAgICAgIGFsaWdueiAgMTYKIAogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCVNFQ1RJT04JU0VHX1RFWFQKLQlCSVRTCTMyCisgICAgICAgIFNFQ1RJT04gU0VHX1RFWFQKKyAgICAgICAgQklUUyAgICAzMgogCiAlaW5jbHVkZSAiamRtcmdzczIuYXNtIgogCmRpZmYgLS1naXQgYS9zaW1kL2pkbXJnbW14LmFzbSBiL3NpbWQvamRtcmdtbXguYXNtCmluZGV4IGQwODAwYTcuLjEzNmYxMmMgMTAwNjQ0Ci0tLSBhL3NpbWQvamRtcmdtbXguYXNtCisrKyBiL3NpbWQvamRtcmdtbXguYXNtCkBAIC0yOSwzNjggKzI5LDM2OCBAQAogOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1Zik7CiA7CiAKLSVkZWZpbmUgb3V0cHV0X3dpZHRoKGIpCShiKSs4CQkJOyBKRElNRU5TSU9OIG91dHB1dF93aWR0aAotJWRlZmluZSBpbnB1dF9idWYoYikJCShiKSsxMgkJOyBKU0FNUElNQUdFIGlucHV0X2J1ZgotJWRlZmluZSBpbl9yb3dfZ3JvdXBfY3RyKGIpCShiKSsxNgkJOyBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIKLSVkZWZpbmUgb3V0cHV0X2J1ZihiKQkJKGIpKzIwCQk7IEpTQU1QQVJSQVkgb3V0cHV0X2J1ZgorJWRlZmluZSBvdXRwdXRfd2lkdGgoYikgKGIpKzggICAgICAgICAgICAgICAgICAgOyBKRElNRU5TSU9OIG91dHB1dF93aWR0aAorJWRlZmluZSBpbnB1dF9idWYoYikgICAgICAgICAgICAoYikrMTIgICAgICAgICAgOyBKU0FNUElNQUdFIGlucHV0X2J1ZgorJWRlZmluZSBpbl9yb3dfZ3JvdXBfY3RyKGIpICAgICAoYikrMTYgICAgICAgICAgOyBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIKKyVkZWZpbmUgb3V0cHV0X2J1ZihiKSAgICAgICAgICAgKGIpKzIwICAgICAgICAgIDsgSlNBTVBBUlJBWSBvdXRwdXRfYnVmCiAKLSVkZWZpbmUgb3JpZ2luYWxfZWJwCWVicCswCi0lZGVmaW5lIHdrKGkpCQllYnAtKFdLX05VTS0oaSkpKlNJWkVPRl9NTVdPUkQJOyBtbXdvcmQgd2tbV0tfTlVNXQotJWRlZmluZSBXS19OVU0JCTMKLSVkZWZpbmUgZ290cHRyCQl3aygwKS1TSVpFT0ZfUE9JTlRFUgk7IHZvaWQgKiBnb3RwdHIKKyVkZWZpbmUgb3JpZ2luYWxfZWJwICAgIGVicCswCislZGVmaW5lIHdrKGkpICAgICAgICAgICBlYnAtKFdLX05VTS0oaSkpKlNJWkVPRl9NTVdPUkQgIDsgbW13b3JkIHdrW1dLX05VTV0KKyVkZWZpbmUgV0tfTlVNICAgICAgICAgIDMKKyVkZWZpbmUgZ290cHRyICAgICAgICAgIHdrKDApLVNJWkVPRl9QT0lOVEVSICAgIDsgdm9pZCAqIGdvdHB0cgogCi0JYWxpZ24JMTYKLQlnbG9iYWwJRVhUTihqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9tbXgpCisgICAgICAgIGFsaWduICAgMTYKKyAgICAgICAgZ2xvYmFsICBFWFROKGpzaW1kX2gydjFfbWVyZ2VkX3Vwc2FtcGxlX21teCkKIAogRVhUTihqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9tbXgpOgotCXB1c2gJZWJwCi0JbW92CWVheCxlc3AJCQkJOyBlYXggPSBvcmlnaW5hbCBlYnAKLQlzdWIJZXNwLCBieXRlIDQKLQlhbmQJZXNwLCBieXRlICgtU0laRU9GX01NV09SRCkJOyBhbGlnbiB0byA2NCBiaXRzCi0JbW92CVtlc3BdLGVheAotCW1vdgllYnAsZXNwCQkJCTsgZWJwID0gYWxpZ25lZCBlYnAKLQlsZWEJZXNwLCBbd2soMCldCi0JcHVzaHBpYwllYXgJCTsgbWFrZSBhIHJvb20gZm9yIEdPVCBhZGRyZXNzCi0JcHVzaAllYngKLTsJcHVzaAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi07CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotCXB1c2gJZXNpCi0JcHVzaAllZGkKKyAgICAgICAgcHVzaCAgICBlYnAKKyAgICAgICAgbW92ICAgICBlYXgsZXNwICAgICAgICAgICAgICAgICAgICAgICAgIDsgZWF4ID0gb3JpZ2luYWwgZWJwCisgICAgICAgIHN1YiAgICAgZXNwLCBieXRlIDQKKyAgICAgICAgYW5kICAgICBlc3AsIGJ5dGUgKC1TSVpFT0ZfTU1XT1JEKSAgICAgIDsgYWxpZ24gdG8gNjQgYml0cworICAgICAgICBtb3YgICAgIFtlc3BdLGVheAorICAgICAgICBtb3YgICAgIGVicCxlc3AgICAgICAgICAgICAgICAgICAgICAgICAgOyBlYnAgPSBhbGlnbmVkIGVicAorICAgICAgICBsZWEgICAgIGVzcCwgW3drKDApXQorICAgICAgICBwdXNocGljIGVheCAgICAgICAgICAgICA7IG1ha2UgYSByb29tIGZvciBHT1QgYWRkcmVzcworICAgICAgICBwdXNoICAgIGVieAorOyAgICAgICBwdXNoICAgIGVjeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgICAgICBwdXNoICAgIGVkeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgICAgICBwdXNoICAgIGVzaQorICAgICAgICBwdXNoICAgIGVkaQogCi0JZ2V0X0dPVAllYngJCQk7IGdldCBHT1QgYWRkcmVzcwotCW1vdnBpYwlQT0lOVEVSIFtnb3RwdHJdLCBlYngJOyBzYXZlIEdPVCBhZGRyZXNzCisgICAgICAgIGdldF9HT1QgZWJ4ICAgICAgICAgICAgICAgICAgICAgOyBnZXQgR09UIGFkZHJlc3MKKyAgICAgICAgbW92cGljICBQT0lOVEVSIFtnb3RwdHJdLCBlYnggICA7IHNhdmUgR09UIGFkZHJlc3MKIAotCW1vdgllY3gsIEpESU1FTlNJT04gW291dHB1dF93aWR0aChlYXgpXQk7IGNvbAotCXRlc3QJZWN4LGVjeAotCWp6CW5lYXIgLnJldHVybgorICAgICAgICBtb3YgICAgIGVjeCwgSkRJTUVOU0lPTiBbb3V0cHV0X3dpZHRoKGVheCldICAgICA7IGNvbAorICAgICAgICB0ZXN0ICAgIGVjeCxlY3gKKyAgICAgICAganogICAgICBuZWFyIC5yZXR1cm4KIAotCXB1c2gJZWN4CisgICAgICAgIHB1c2ggICAgZWN4CiAKLQltb3YJZWRpLCBKU0FNUElNQUdFIFtpbnB1dF9idWYoZWF4KV0KLQltb3YJZWN4LCBKRElNRU5TSU9OIFtpbl9yb3dfZ3JvdXBfY3RyKGVheCldCi0JbW92CWVzaSwgSlNBTVBBUlJBWSBbZWRpKzAqU0laRU9GX0pTQU1QQVJSQVldCi0JbW92CWVieCwgSlNBTVBBUlJBWSBbZWRpKzEqU0laRU9GX0pTQU1QQVJSQVldCi0JbW92CWVkeCwgSlNBTVBBUlJBWSBbZWRpKzIqU0laRU9GX0pTQU1QQVJSQVldCi0JbW92CWVkaSwgSlNBTVBBUlJBWSBbb3V0cHV0X2J1ZihlYXgpXQotCW1vdgllc2ksIEpTQU1QUk9XIFtlc2krZWN4KlNJWkVPRl9KU0FNUFJPV10JCTsgaW5wdHIwCi0JbW92CWVieCwgSlNBTVBST1cgW2VieCtlY3gqU0laRU9GX0pTQU1QUk9XXQkJOyBpbnB0cjEKLQltb3YJZWR4LCBKU0FNUFJPVyBbZWR4K2VjeCpTSVpFT0ZfSlNBTVBST1ddCQk7IGlucHRyMgotCW1vdgllZGksIEpTQU1QUk9XIFtlZGldCQkJCTsgb3V0cHRyCisgICAgICAgIG1vdiAgICAgZWRpLCBKU0FNUElNQUdFIFtpbnB1dF9idWYoZWF4KV0KKyAgICAgICAgbW92ICAgICBlY3gsIEpESU1FTlNJT04gW2luX3Jvd19ncm91cF9jdHIoZWF4KV0KKyAgICAgICAgbW92ICAgICBlc2ksIEpTQU1QQVJSQVkgW2VkaSswKlNJWkVPRl9KU0FNUEFSUkFZXQorICAgICAgICBtb3YgICAgIGVieCwgSlNBTVBBUlJBWSBbZWRpKzEqU0laRU9GX0pTQU1QQVJSQVldCisgICAgICAgIG1vdiAgICAgZWR4LCBKU0FNUEFSUkFZIFtlZGkrMipTSVpFT0ZfSlNBTVBBUlJBWV0KKyAgICAgICAgbW92ICAgICBlZGksIEpTQU1QQVJSQVkgW291dHB1dF9idWYoZWF4KV0KKyAgICAgICAgbW92ICAgICBlc2ksIEpTQU1QUk9XIFtlc2krZWN4KlNJWkVPRl9KU0FNUFJPV10gICAgICAgICA7IGlucHRyMAorICAgICAgICBtb3YgICAgIGVieCwgSlNBTVBST1cgW2VieCtlY3gqU0laRU9GX0pTQU1QUk9XXSAgICAgICAgIDsgaW5wdHIxCisgICAgICAgIG1vdiAgICAgZWR4LCBKU0FNUFJPVyBbZWR4K2VjeCpTSVpFT0ZfSlNBTVBST1ddICAgICAgICAgOyBpbnB0cjIKKyAgICAgICAgbW92ICAgICBlZGksIEpTQU1QUk9XIFtlZGldICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IG91dHB0cgogCi0JcG9wCWVjeAkJCTsgY29sCisgICAgICAgIHBvcCAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBjb2wKIAotCWFsaWdueAkxNiw3CisgICAgICAgIGFsaWdueCAgMTYsNwogLmNvbHVtbmxvb3A6Ci0JbW92cGljCWVheCwgUE9JTlRFUiBbZ290cHRyXQk7IGxvYWQgR09UIGFkZHJlc3MgKGVheCkKKyAgICAgICAgbW92cGljICBlYXgsIFBPSU5URVIgW2dvdHB0cl0gICA7IGxvYWQgR09UIGFkZHJlc3MgKGVheCkKIAotCW1vdnEgICAgICBtbTYsIE1NV09SRCBbZWJ4XQk7IG1tNj1DYigwMTIzNDU2NykKLQltb3ZxICAgICAgbW03LCBNTVdPUkQgW2VkeF0JOyBtbTc9Q3IoMDEyMzQ1NjcpCisgICAgICAgIG1vdnEgICAgICBtbTYsIE1NV09SRCBbZWJ4XSAgICAgOyBtbTY9Q2IoMDEyMzQ1NjcpCisgICAgICAgIG1vdnEgICAgICBtbTcsIE1NV09SRCBbZWR4XSAgICAgOyBtbTc9Q3IoMDEyMzQ1NjcpCiAKLQlweG9yICAgICAgbW0xLG1tMQkJOyBtbTE9KGFsbCAwJ3MpCi0JcGNtcGVxdyAgIG1tMyxtbTMKLQlwc2xsdyAgICAgbW0zLDcJCQk7IG1tMz17MHhGRjgwIDB4RkY4MCAweEZGODAgMHhGRjgwfQorICAgICAgICBweG9yICAgICAgbW0xLG1tMSAgICAgICAgICAgICAgIDsgbW0xPShhbGwgMCdzKQorICAgICAgICBwY21wZXF3ICAgbW0zLG1tMworICAgICAgICBwc2xsdyAgICAgbW0zLDcgICAgICAgICAgICAgICAgIDsgbW0zPXsweEZGODAgMHhGRjgwIDB4RkY4MCAweEZGODB9CiAKLQltb3ZxICAgICAgbW00LG1tNgotCXB1bnBja2hidyBtbTYsbW0xCQk7IG1tNj1DYig0NTY3KT1DYkgKLQlwdW5wY2tsYncgbW00LG1tMQkJOyBtbTQ9Q2IoMDEyMyk9Q2JMCi0JbW92cSAgICAgIG1tMCxtbTcKLQlwdW5wY2toYncgbW03LG1tMQkJOyBtbTc9Q3IoNDU2Nyk9Q3JICi0JcHVucGNrbGJ3IG1tMCxtbTEJCTsgbW0wPUNyKDAxMjMpPUNyTAorICAgICAgICBtb3ZxICAgICAgbW00LG1tNgorICAgICAgICBwdW5wY2toYncgbW02LG1tMSAgICAgICAgICAgICAgIDsgbW02PUNiKDQ1NjcpPUNiSAorICAgICAgICBwdW5wY2tsYncgbW00LG1tMSAgICAgICAgICAgICAgIDsgbW00PUNiKDAxMjMpPUNiTAorICAgICAgICBtb3ZxICAgICAgbW0wLG1tNworICAgICAgICBwdW5wY2toYncgbW03LG1tMSAgICAgICAgICAgICAgIDsgbW03PUNyKDQ1NjcpPUNySAorICAgICAgICBwdW5wY2tsYncgbW0wLG1tMSAgICAgICAgICAgICAgIDsgbW0wPUNyKDAxMjMpPUNyTAogCi0JcGFkZHcgICAgIG1tNixtbTMKLQlwYWRkdyAgICAgbW00LG1tMwotCXBhZGR3ICAgICBtbTcsbW0zCi0JcGFkZHcgICAgIG1tMCxtbTMKKyAgICAgICAgcGFkZHcgICAgIG1tNixtbTMKKyAgICAgICAgcGFkZHcgICAgIG1tNCxtbTMKKyAgICAgICAgcGFkZHcgICAgIG1tNyxtbTMKKyAgICAgICAgcGFkZHcgICAgIG1tMCxtbTMKIAotCTsgKE9yaWdpbmFsKQotCTsgUiA9IFkgICAgICAgICAgICAgICAgKyAxLjQwMjAwICogQ3IKLQk7IEcgPSBZIC0gMC4zNDQxNCAqIENiIC0gMC43MTQxNCAqIENyCi0JOyBCID0gWSArIDEuNzcyMDAgKiBDYgotCTsKLQk7IChUaGlzIGltcGxlbWVudGF0aW9uKQotCTsgUiA9IFkgICAgICAgICAgICAgICAgKyAwLjQwMjAwICogQ3IgKyBDcgotCTsgRyA9IFkgLSAwLjM0NDE0ICogQ2IgKyAwLjI4NTg2ICogQ3IgLSBDcgotCTsgQiA9IFkgLSAwLjIyODAwICogQ2IgKyBDYiArIENiCisgICAgICAgIDsgKE9yaWdpbmFsKQorICAgICAgICA7IFIgPSBZICAgICAgICAgICAgICAgICsgMS40MDIwMCAqIENyCisgICAgICAgIDsgRyA9IFkgLSAwLjM0NDE0ICogQ2IgLSAwLjcxNDE0ICogQ3IKKyAgICAgICAgOyBCID0gWSArIDEuNzcyMDAgKiBDYgorICAgICAgICA7CisgICAgICAgIDsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisgICAgICAgIDsgUiA9IFkgICAgICAgICAgICAgICAgKyAwLjQwMjAwICogQ3IgKyBDcgorICAgICAgICA7IEcgPSBZIC0gMC4zNDQxNCAqIENiICsgMC4yODU4NiAqIENyIC0gQ3IKKyAgICAgICAgOyBCID0gWSAtIDAuMjI4MDAgKiBDYiArIENiICsgQ2IKIAotCW1vdnEJbW01LG1tNgkJCTsgbW01PUNiSAotCW1vdnEJbW0yLG1tNAkJCTsgbW0yPUNiTAotCXBhZGR3CW1tNixtbTYJCQk7IG1tNj0yKkNiSAotCXBhZGR3CW1tNCxtbTQJCQk7IG1tND0yKkNiTAotCW1vdnEJbW0xLG1tNwkJCTsgbW0xPUNySAotCW1vdnEJbW0zLG1tMAkJCTsgbW0zPUNyTAotCXBhZGR3CW1tNyxtbTcJCQk7IG1tNz0yKkNySAotCXBhZGR3CW1tMCxtbTAJCQk7IG1tMD0yKkNyTAorICAgICAgICBtb3ZxICAgIG1tNSxtbTYgICAgICAgICAgICAgICAgIDsgbW01PUNiSAorICAgICAgICBtb3ZxICAgIG1tMixtbTQgICAgICAgICAgICAgICAgIDsgbW0yPUNiTAorICAgICAgICBwYWRkdyAgIG1tNixtbTYgICAgICAgICAgICAgICAgIDsgbW02PTIqQ2JICisgICAgICAgIHBhZGR3ICAgbW00LG1tNCAgICAgICAgICAgICAgICAgOyBtbTQ9MipDYkwKKyAgICAgICAgbW92cSAgICBtbTEsbW03ICAgICAgICAgICAgICAgICA7IG1tMT1DckgKKyAgICAgICAgbW92cSAgICBtbTMsbW0wICAgICAgICAgICAgICAgICA7IG1tMz1DckwKKyAgICAgICAgcGFkZHcgICBtbTcsbW03ICAgICAgICAgICAgICAgICA7IG1tNz0yKkNySAorICAgICAgICBwYWRkdyAgIG1tMCxtbTAgICAgICAgICAgICAgICAgIDsgbW0wPTIqQ3JMCiAKLQlwbXVsaHcJbW02LFtHT1RPRkYoZWF4LFBXX01GMDIyOCldCTsgbW02PSgyKkNiSCAqIC1GSVgoMC4yMjgwMCkpCi0JcG11bGh3CW1tNCxbR09UT0ZGKGVheCxQV19NRjAyMjgpXQk7IG1tND0oMipDYkwgKiAtRklYKDAuMjI4MDApKQotCXBtdWxodwltbTcsW0dPVE9GRihlYXgsUFdfRjA0MDIpXQk7IG1tNz0oMipDckggKiBGSVgoMC40MDIwMCkpCi0JcG11bGh3CW1tMCxbR09UT0ZGKGVheCxQV19GMDQwMildCTsgbW0wPSgyKkNyTCAqIEZJWCgwLjQwMjAwKSkKKyAgICAgICAgcG11bGh3ICBtbTYsW0dPVE9GRihlYXgsUFdfTUYwMjI4KV0gICAgIDsgbW02PSgyKkNiSCAqIC1GSVgoMC4yMjgwMCkpCisgICAgICAgIHBtdWxodyAgbW00LFtHT1RPRkYoZWF4LFBXX01GMDIyOCldICAgICA7IG1tND0oMipDYkwgKiAtRklYKDAuMjI4MDApKQorICAgICAgICBwbXVsaHcgIG1tNyxbR09UT0ZGKGVheCxQV19GMDQwMildICAgICAgOyBtbTc9KDIqQ3JIICogRklYKDAuNDAyMDApKQorICAgICAgICBwbXVsaHcgIG1tMCxbR09UT0ZGKGVheCxQV19GMDQwMildICAgICAgOyBtbTA9KDIqQ3JMICogRklYKDAuNDAyMDApKQogCi0JcGFkZHcJbW02LFtHT1RPRkYoZWF4LFBXX09ORSldCi0JcGFkZHcJbW00LFtHT1RPRkYoZWF4LFBXX09ORSldCi0JcHNyYXcJbW02LDEJCQk7IG1tNj0oQ2JIICogLUZJWCgwLjIyODAwKSkKLQlwc3JhdwltbTQsMQkJCTsgbW00PShDYkwgKiAtRklYKDAuMjI4MDApKQotCXBhZGR3CW1tNyxbR09UT0ZGKGVheCxQV19PTkUpXQotCXBhZGR3CW1tMCxbR09UT0ZGKGVheCxQV19PTkUpXQotCXBzcmF3CW1tNywxCQkJOyBtbTc9KENySCAqIEZJWCgwLjQwMjAwKSkKLQlwc3JhdwltbTAsMQkJCTsgbW0wPShDckwgKiBGSVgoMC40MDIwMCkpCisgICAgICAgIHBhZGR3ICAgbW02LFtHT1RPRkYoZWF4LFBXX09ORSldCisgICAgICAgIHBhZGR3ICAgbW00LFtHT1RPRkYoZWF4LFBXX09ORSldCisgICAgICAgIHBzcmF3ICAgbW02LDEgICAgICAgICAgICAgICAgICAgOyBtbTY9KENiSCAqIC1GSVgoMC4yMjgwMCkpCisgICAgICAgIHBzcmF3ICAgbW00LDEgICAgICAgICAgICAgICAgICAgOyBtbTQ9KENiTCAqIC1GSVgoMC4yMjgwMCkpCisgICAgICAgIHBhZGR3ICAgbW03LFtHT1RPRkYoZWF4LFBXX09ORSldCisgICAgICAgIHBhZGR3ICAgbW0wLFtHT1RPRkYoZWF4LFBXX09ORSldCisgICAgICAgIHBzcmF3ICAgbW03LDEgICAgICAgICAgICAgICAgICAgOyBtbTc9KENySCAqIEZJWCgwLjQwMjAwKSkKKyAgICAgICAgcHNyYXcgICBtbTAsMSAgICAgICAgICAgICAgICAgICA7IG1tMD0oQ3JMICogRklYKDAuNDAyMDApKQogCi0JcGFkZHcJbW02LG1tNQotCXBhZGR3CW1tNCxtbTIKLQlwYWRkdwltbTYsbW01CQkJOyBtbTY9KENiSCAqIEZJWCgxLjc3MjAwKSk9KEItWSlICi0JcGFkZHcJbW00LG1tMgkJCTsgbW00PShDYkwgKiBGSVgoMS43NzIwMCkpPShCLVkpTAotCXBhZGR3CW1tNyxtbTEJCQk7IG1tNz0oQ3JIICogRklYKDEuNDAyMDApKT0oUi1ZKUgKLQlwYWRkdwltbTAsbW0zCQkJOyBtbTA9KENyTCAqIEZJWCgxLjQwMjAwKSk9KFItWSlMCisgICAgICAgIHBhZGR3ICAgbW02LG1tNQorICAgICAgICBwYWRkdyAgIG1tNCxtbTIKKyAgICAgICAgcGFkZHcgICBtbTYsbW01ICAgICAgICAgICAgICAgICA7IG1tNj0oQ2JIICogRklYKDEuNzcyMDApKT0oQi1ZKUgKKyAgICAgICAgcGFkZHcgICBtbTQsbW0yICAgICAgICAgICAgICAgICA7IG1tND0oQ2JMICogRklYKDEuNzcyMDApKT0oQi1ZKUwKKyAgICAgICAgcGFkZHcgICBtbTcsbW0xICAgICAgICAgICAgICAgICA7IG1tNz0oQ3JIICogRklYKDEuNDAyMDApKT0oUi1ZKUgKKyAgICAgICAgcGFkZHcgICBtbTAsbW0zICAgICAgICAgICAgICAgICA7IG1tMD0oQ3JMICogRklYKDEuNDAyMDApKT0oUi1ZKUwKIAotCW1vdnEJTU1XT1JEIFt3aygwKV0sIG1tNgk7IHdrKDApPShCLVkpSAotCW1vdnEJTU1XT1JEIFt3aygxKV0sIG1tNwk7IHdrKDEpPShSLVkpSAorICAgICAgICBtb3ZxICAgIE1NV09SRCBbd2soMCldLCBtbTYgICAgIDsgd2soMCk9KEItWSlICisgICAgICAgIG1vdnEgICAgTU1XT1JEIFt3aygxKV0sIG1tNyAgICAgOyB3aygxKT0oUi1ZKUgKIAotCW1vdnEgICAgICBtbTYsbW01Ci0JbW92cSAgICAgIG1tNyxtbTIKLQlwdW5wY2tsd2QgbW01LG1tMQotCXB1bnBja2h3ZCBtbTYsbW0xCi0JcG1hZGR3ZCAgIG1tNSxbR09UT0ZGKGVheCxQV19NRjAzNDRfRjAyODUpXQotCXBtYWRkd2QgICBtbTYsW0dPVE9GRihlYXgsUFdfTUYwMzQ0X0YwMjg1KV0KLQlwdW5wY2tsd2QgbW0yLG1tMwotCXB1bnBja2h3ZCBtbTcsbW0zCi0JcG1hZGR3ZCAgIG1tMixbR09UT0ZGKGVheCxQV19NRjAzNDRfRjAyODUpXQotCXBtYWRkd2QgICBtbTcsW0dPVE9GRihlYXgsUFdfTUYwMzQ0X0YwMjg1KV0KKyAgICAgICAgbW92cSAgICAgIG1tNixtbTUKKyAgICAgICAgbW92cSAgICAgIG1tNyxtbTIKKyAgICAgICAgcHVucGNrbHdkIG1tNSxtbTEKKyAgICAgICAgcHVucGNraHdkIG1tNixtbTEKKyAgICAgICAgcG1hZGR3ZCAgIG1tNSxbR09UT0ZGKGVheCxQV19NRjAzNDRfRjAyODUpXQorICAgICAgICBwbWFkZHdkICAgbW02LFtHT1RPRkYoZWF4LFBXX01GMDM0NF9GMDI4NSldCisgICAgICAgIHB1bnBja2x3ZCBtbTIsbW0zCisgICAgICAgIHB1bnBja2h3ZCBtbTcsbW0zCisgICAgICAgIHBtYWRkd2QgICBtbTIsW0dPVE9GRihlYXgsUFdfTUYwMzQ0X0YwMjg1KV0KKyAgICAgICAgcG1hZGR3ZCAgIG1tNyxbR09UT0ZGKGVheCxQV19NRjAzNDRfRjAyODUpXQogCi0JcGFkZGQgICAgIG1tNSxbR09UT0ZGKGVheCxQRF9PTkVIQUxGKV0KLQlwYWRkZCAgICAgbW02LFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXQotCXBzcmFkICAgICBtbTUsU0NBTEVCSVRTCi0JcHNyYWQgICAgIG1tNixTQ0FMRUJJVFMKLQlwYWRkZCAgICAgbW0yLFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXQotCXBhZGRkICAgICBtbTcsW0dPVE9GRihlYXgsUERfT05FSEFMRildCi0JcHNyYWQgICAgIG1tMixTQ0FMRUJJVFMKLQlwc3JhZCAgICAgbW03LFNDQUxFQklUUworICAgICAgICBwYWRkZCAgICAgbW01LFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXQorICAgICAgICBwYWRkZCAgICAgbW02LFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXQorICAgICAgICBwc3JhZCAgICAgbW01LFNDQUxFQklUUworICAgICAgICBwc3JhZCAgICAgbW02LFNDQUxFQklUUworICAgICAgICBwYWRkZCAgICAgbW0yLFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXQorICAgICAgICBwYWRkZCAgICAgbW03LFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXQorICAgICAgICBwc3JhZCAgICAgbW0yLFNDQUxFQklUUworICAgICAgICBwc3JhZCAgICAgbW03LFNDQUxFQklUUwogCi0JcGFja3NzZHcgIG1tNSxtbTYJOyBtbTU9Q2JIKi1GSVgoMC4zNDQpK0NySCpGSVgoMC4yODUpCi0JcGFja3NzZHcgIG1tMixtbTcJOyBtbTI9Q2JMKi1GSVgoMC4zNDQpK0NyTCpGSVgoMC4yODUpCi0JcHN1YncgICAgIG1tNSxtbTEJOyBtbTU9Q2JIKi1GSVgoMC4zNDQpK0NySCotRklYKDAuNzE0KT0oRy1ZKUgKLQlwc3VidyAgICAgbW0yLG1tMwk7IG1tMj1DYkwqLUZJWCgwLjM0NCkrQ3JMKi1GSVgoMC43MTQpPShHLVkpTAorICAgICAgICBwYWNrc3NkdyAgbW01LG1tNiAgICAgICA7IG1tNT1DYkgqLUZJWCgwLjM0NCkrQ3JIKkZJWCgwLjI4NSkKKyAgICAgICAgcGFja3NzZHcgIG1tMixtbTcgICAgICAgOyBtbTI9Q2JMKi1GSVgoMC4zNDQpK0NyTCpGSVgoMC4yODUpCisgICAgICAgIHBzdWJ3ICAgICBtbTUsbW0xICAgICAgIDsgbW01PUNiSCotRklYKDAuMzQ0KStDckgqLUZJWCgwLjcxNCk9KEctWSlICisgICAgICAgIHBzdWJ3ICAgICBtbTIsbW0zICAgICAgIDsgbW0yPUNiTCotRklYKDAuMzQ0KStDckwqLUZJWCgwLjcxNCk9KEctWSlMCiAKLQltb3ZxCU1NV09SRCBbd2soMildLCBtbTUJOyB3aygyKT0oRy1ZKUgKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW3drKDIpXSwgbW01ICAgICA7IHdrKDIpPShHLVkpSAogCi0JbW92CWFsLDIJCQk7IFljdHIKLQlqbXAJc2hvcnQgLllsb29wXzFzdAotCWFsaWdueAkxNiw3CisgICAgICAgIG1vdiAgICAgYWwsMiAgICAgICAgICAgICAgICAgICAgOyBZY3RyCisgICAgICAgIGptcCAgICAgc2hvcnQgLllsb29wXzFzdAorICAgICAgICBhbGlnbnggIDE2LDcKIAogLllsb29wXzJuZDoKLQltb3ZxCW1tMCwgTU1XT1JEIFt3aygxKV0JOyBtbTA9KFItWSlICi0JbW92cQltbTIsIE1NV09SRCBbd2soMildCTsgbW0yPShHLVkpSAotCW1vdnEJbW00LCBNTVdPUkQgW3drKDApXQk7IG1tND0oQi1ZKUgKLQlhbGlnbngJMTYsNworICAgICAgICBtb3ZxICAgIG1tMCwgTU1XT1JEIFt3aygxKV0gICAgIDsgbW0wPShSLVkpSAorICAgICAgICBtb3ZxICAgIG1tMiwgTU1XT1JEIFt3aygyKV0gICAgIDsgbW0yPShHLVkpSAorICAgICAgICBtb3ZxICAgIG1tNCwgTU1XT1JEIFt3aygwKV0gICAgIDsgbW00PShCLVkpSAorICAgICAgICBhbGlnbnggIDE2LDcKIAogLllsb29wXzFzdDoKLQltb3ZxCW1tNywgTU1XT1JEIFtlc2ldCTsgbW03PVkoMDEyMzQ1NjcpCisgICAgICAgIG1vdnEgICAgbW03LCBNTVdPUkQgW2VzaV0gICAgICAgOyBtbTc9WSgwMTIzNDU2NykKIAotCXBjbXBlcXcJbW02LG1tNgotCXBzcmx3CW1tNixCWVRFX0JJVAkJOyBtbTY9ezB4RkYgMHgwMCAweEZGIDB4MDAgLi59Ci0JcGFuZAltbTYsbW03CQkJOyBtbTY9WSgwMjQ2KT1ZRQotCXBzcmx3CW1tNyxCWVRFX0JJVAkJOyBtbTc9WSgxMzU3KT1ZTworICAgICAgICBwY21wZXF3IG1tNixtbTYKKyAgICAgICAgcHNybHcgICBtbTYsQllURV9CSVQgICAgICAgICAgICA7IG1tNj17MHhGRiAweDAwIDB4RkYgMHgwMCAuLn0KKyAgICAgICAgcGFuZCAgICBtbTYsbW03ICAgICAgICAgICAgICAgICA7IG1tNj1ZKDAyNDYpPVlFCisgICAgICAgIHBzcmx3ICAgbW03LEJZVEVfQklUICAgICAgICAgICAgOyBtbTc9WSgxMzU3KT1ZTwogCi0JbW92cQltbTEsbW0wCQkJOyBtbTE9bW0wPShSLVkpKEwvSCkKLQltb3ZxCW1tMyxtbTIJCQk7IG1tMz1tbTI9KEctWSkoTC9IKQotCW1vdnEJbW01LG1tNAkJCTsgbW01PW1tND0oQi1ZKShML0gpCisgICAgICAgIG1vdnEgICAgbW0xLG1tMCAgICAgICAgICAgICAgICAgOyBtbTE9bW0wPShSLVkpKEwvSCkKKyAgICAgICAgbW92cSAgICBtbTMsbW0yICAgICAgICAgICAgICAgICA7IG1tMz1tbTI9KEctWSkoTC9IKQorICAgICAgICBtb3ZxICAgIG1tNSxtbTQgICAgICAgICAgICAgICAgIDsgbW01PW1tND0oQi1ZKShML0gpCiAKLQlwYWRkdyAgICAgbW0wLG1tNgkJOyBtbTA9KChSLVkpK1lFKT1SRT0oUjAgUjIgUjQgUjYpCi0JcGFkZHcgICAgIG1tMSxtbTcJCTsgbW0xPSgoUi1ZKStZTyk9Uk89KFIxIFIzIFI1IFI3KQotCXBhY2t1c3diICBtbTAsbW0wCQk7IG1tMD0oUjAgUjIgUjQgUjYgKiogKiogKiogKiopCi0JcGFja3Vzd2IgIG1tMSxtbTEJCTsgbW0xPShSMSBSMyBSNSBSNyAqKiAqKiAqKiAqKikKKyAgICAgICAgcGFkZHcgICAgIG1tMCxtbTYgICAgICAgICAgICAgICA7IG1tMD0oKFItWSkrWUUpPVJFPShSMCBSMiBSNCBSNikKKyAgICAgICAgcGFkZHcgICAgIG1tMSxtbTcgICAgICAgICAgICAgICA7IG1tMT0oKFItWSkrWU8pPVJPPShSMSBSMyBSNSBSNykKKyAgICAgICAgcGFja3Vzd2IgIG1tMCxtbTAgICAgICAgICAgICAgICA7IG1tMD0oUjAgUjIgUjQgUjYgKiogKiogKiogKiopCisgICAgICAgIHBhY2t1c3diICBtbTEsbW0xICAgICAgICAgICAgICAgOyBtbTE9KFIxIFIzIFI1IFI3ICoqICoqICoqICoqKQogCi0JcGFkZHcgICAgIG1tMixtbTYJCTsgbW0yPSgoRy1ZKStZRSk9R0U9KEcwIEcyIEc0IEc2KQotCXBhZGR3ICAgICBtbTMsbW03CQk7IG1tMz0oKEctWSkrWU8pPUdPPShHMSBHMyBHNSBHNykKLQlwYWNrdXN3YiAgbW0yLG1tMgkJOyBtbTI9KEcwIEcyIEc0IEc2ICoqICoqICoqICoqKQotCXBhY2t1c3diICBtbTMsbW0zCQk7IG1tMz0oRzEgRzMgRzUgRzcgKiogKiogKiogKiopCisgICAgICAgIHBhZGR3ICAgICBtbTIsbW02ICAgICAgICAgICAgICAgOyBtbTI9KChHLVkpK1lFKT1HRT0oRzAgRzIgRzQgRzYpCisgICAgICAgIHBhZGR3ICAgICBtbTMsbW03ICAgICAgICAgICAgICAgOyBtbTM9KChHLVkpK1lPKT1HTz0oRzEgRzMgRzUgRzcpCisgICAgICAgIHBhY2t1c3diICBtbTIsbW0yICAgICAgICAgICAgICAgOyBtbTI9KEcwIEcyIEc0IEc2ICoqICoqICoqICoqKQorICAgICAgICBwYWNrdXN3YiAgbW0zLG1tMyAgICAgICAgICAgICAgIDsgbW0zPShHMSBHMyBHNSBHNyAqKiAqKiAqKiAqKikKIAotCXBhZGR3ICAgICBtbTQsbW02CQk7IG1tND0oKEItWSkrWUUpPUJFPShCMCBCMiBCNCBCNikKLQlwYWRkdyAgICAgbW01LG1tNwkJOyBtbTU9KChCLVkpK1lPKT1CTz0oQjEgQjMgQjUgQjcpCi0JcGFja3Vzd2IgIG1tNCxtbTQJCTsgbW00PShCMCBCMiBCNCBCNiAqKiAqKiAqKiAqKikKLQlwYWNrdXN3YiAgbW01LG1tNQkJOyBtbTU9KEIxIEIzIEI1IEI3ICoqICoqICoqICoqKQorICAgICAgICBwYWRkdyAgICAgbW00LG1tNiAgICAgICAgICAgICAgIDsgbW00PSgoQi1ZKStZRSk9QkU9KEIwIEIyIEI0IEI2KQorICAgICAgICBwYWRkdyAgICAgbW01LG1tNyAgICAgICAgICAgICAgIDsgbW01PSgoQi1ZKStZTyk9Qk89KEIxIEIzIEI1IEI3KQorICAgICAgICBwYWNrdXN3YiAgbW00LG1tNCAgICAgICAgICAgICAgIDsgbW00PShCMCBCMiBCNCBCNiAqKiAqKiAqKiAqKikKKyAgICAgICAgcGFja3Vzd2IgIG1tNSxtbTUgICAgICAgICAgICAgICA7IG1tNT0oQjEgQjMgQjUgQjcgKiogKiogKiogKiopCiAKICVpZiBSR0JfUElYRUxTSVpFID09IDMgOyAtLS0tLS0tLS0tLS0tLS0KIAotCTsgbW1BPSgwMCAwMiAwNCAwNiAqKiAqKiAqKiAqKiksIG1tQj0oMDEgMDMgMDUgMDcgKiogKiogKiogKiopCi0JOyBtbUM9KDEwIDEyIDE0IDE2ICoqICoqICoqICoqKSwgbW1EPSgxMSAxMyAxNSAxNyAqKiAqKiAqKiAqKikKLQk7IG1tRT0oMjAgMjIgMjQgMjYgKiogKiogKiogKiopLCBtbUY9KDIxIDIzIDI1IDI3ICoqICoqICoqICoqKQotCTsgbW1HPSgqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiksIG1tSD0oKiogKiogKiogKiogKiogKiogKiogKiopCisgICAgICAgIDsgbW1BPSgwMCAwMiAwNCAwNiAqKiAqKiAqKiAqKiksIG1tQj0oMDEgMDMgMDUgMDcgKiogKiogKiogKiopCisgICAgICAgIDsgbW1DPSgxMCAxMiAxNCAxNiAqKiAqKiAqKiAqKiksIG1tRD0oMTEgMTMgMTUgMTcgKiogKiogKiogKiopCisgICAgICAgIDsgbW1FPSgyMCAyMiAyNCAyNiAqKiAqKiAqKiAqKiksIG1tRj0oMjEgMjMgMjUgMjcgKiogKiogKiogKiopCisgICAgICAgIDsgbW1HPSgqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiksIG1tSD0oKiogKiogKiogKiogKiogKiogKiogKiopCiAKLQlwdW5wY2tsYncgbW1BLG1tQwkJOyBtbUE9KDAwIDEwIDAyIDEyIDA0IDE0IDA2IDE2KQotCXB1bnBja2xidyBtbUUsbW1CCQk7IG1tRT0oMjAgMDEgMjIgMDMgMjQgMDUgMjYgMDcpCi0JcHVucGNrbGJ3IG1tRCxtbUYJCTsgbW1EPSgxMSAyMSAxMyAyMyAxNSAyNSAxNyAyNykKKyAgICAgICAgcHVucGNrbGJ3IG1tQSxtbUMgICAgICAgICAgICAgICA7IG1tQT0oMDAgMTAgMDIgMTIgMDQgMTQgMDYgMTYpCisgICAgICAgIHB1bnBja2xidyBtbUUsbW1CICAgICAgICAgICAgICAgOyBtbUU9KDIwIDAxIDIyIDAzIDI0IDA1IDI2IDA3KQorICAgICAgICBwdW5wY2tsYncgbW1ELG1tRiAgICAgICAgICAgICAgIDsgbW1EPSgxMSAyMSAxMyAyMyAxNSAyNSAxNyAyNykKIAotCW1vdnEgICAgICBtbUcsbW1BCi0JbW92cSAgICAgIG1tSCxtbUEKLQlwdW5wY2tsd2QgbW1BLG1tRQkJOyBtbUE9KDAwIDEwIDIwIDAxIDAyIDEyIDIyIDAzKQotCXB1bnBja2h3ZCBtbUcsbW1FCQk7IG1tRz0oMDQgMTQgMjQgMDUgMDYgMTYgMjYgMDcpCisgICAgICAgIG1vdnEgICAgICBtbUcsbW1BCisgICAgICAgIG1vdnEgICAgICBtbUgsbW1BCisgICAgICAgIHB1bnBja2x3ZCBtbUEsbW1FICAgICAgICAgICAgICAgOyBtbUE9KDAwIDEwIDIwIDAxIDAyIDEyIDIyIDAzKQorICAgICAgICBwdW5wY2tod2QgbW1HLG1tRSAgICAgICAgICAgICAgIDsgbW1HPSgwNCAxNCAyNCAwNSAwNiAxNiAyNiAwNykKIAotCXBzcmxxICAgICBtbUgsMipCWVRFX0JJVAk7IG1tSD0oMDIgMTIgMDQgMTQgMDYgMTYgLS0gLS0pCi0JcHNybHEgICAgIG1tRSwyKkJZVEVfQklUCTsgbW1FPSgyMiAwMyAyNCAwNSAyNiAwNyAtLSAtLSkKKyAgICAgICAgcHNybHEgICAgIG1tSCwyKkJZVEVfQklUICAgICAgICA7IG1tSD0oMDIgMTIgMDQgMTQgMDYgMTYgLS0gLS0pCisgICAgICAgIHBzcmxxICAgICBtbUUsMipCWVRFX0JJVCAgICAgICAgOyBtbUU9KDIyIDAzIDI0IDA1IDI2IDA3IC0tIC0tKQogCi0JbW92cSAgICAgIG1tQyxtbUQKLQltb3ZxICAgICAgbW1CLG1tRAotCXB1bnBja2x3ZCBtbUQsbW1ICQk7IG1tRD0oMTEgMjEgMDIgMTIgMTMgMjMgMDQgMTQpCi0JcHVucGNraHdkIG1tQyxtbUgJCTsgbW1DPSgxNSAyNSAwNiAxNiAxNyAyNyAtLSAtLSkKKyAgICAgICAgbW92cSAgICAgIG1tQyxtbUQKKyAgICAgICAgbW92cSAgICAgIG1tQixtbUQKKyAgICAgICAgcHVucGNrbHdkIG1tRCxtbUggICAgICAgICAgICAgICA7IG1tRD0oMTEgMjEgMDIgMTIgMTMgMjMgMDQgMTQpCisgICAgICAgIHB1bnBja2h3ZCBtbUMsbW1IICAgICAgICAgICAgICAgOyBtbUM9KDE1IDI1IDA2IDE2IDE3IDI3IC0tIC0tKQogCi0JcHNybHEgICAgIG1tQiwyKkJZVEVfQklUCTsgbW1CPSgxMyAyMyAxNSAyNSAxNyAyNyAtLSAtLSkKKyAgICAgICAgcHNybHEgICAgIG1tQiwyKkJZVEVfQklUICAgICAgICA7IG1tQj0oMTMgMjMgMTUgMjUgMTcgMjcgLS0gLS0pCiAKLQltb3ZxICAgICAgbW1GLG1tRQotCXB1bnBja2x3ZCBtbUUsbW1CCQk7IG1tRT0oMjIgMDMgMTMgMjMgMjQgMDUgMTUgMjUpCi0JcHVucGNraHdkIG1tRixtbUIJCTsgbW1GPSgyNiAwNyAxNyAyNyAtLSAtLSAtLSAtLSkKKyAgICAgICAgbW92cSAgICAgIG1tRixtbUUKKyAgICAgICAgcHVucGNrbHdkIG1tRSxtbUIgICAgICAgICAgICAgICA7IG1tRT0oMjIgMDMgMTMgMjMgMjQgMDUgMTUgMjUpCisgICAgICAgIHB1bnBja2h3ZCBtbUYsbW1CICAgICAgICAgICAgICAgOyBtbUY9KDI2IDA3IDE3IDI3IC0tIC0tIC0tIC0tKQogCi0JcHVucGNrbGRxIG1tQSxtbUQJCTsgbW1BPSgwMCAxMCAyMCAwMSAxMSAyMSAwMiAxMikKLQlwdW5wY2tsZHEgbW1FLG1tRwkJOyBtbUU9KDIyIDAzIDEzIDIzIDA0IDE0IDI0IDA1KQotCXB1bnBja2xkcSBtbUMsbW1GCQk7IG1tQz0oMTUgMjUgMDYgMTYgMjYgMDcgMTcgMjcpCisgICAgICAgIHB1bnBja2xkcSBtbUEsbW1EICAgICAgICAgICAgICAgOyBtbUE9KDAwIDEwIDIwIDAxIDExIDIxIDAyIDEyKQorICAgICAgICBwdW5wY2tsZHEgbW1FLG1tRyAgICAgICAgICAgICAgIDsgbW1FPSgyMiAwMyAxMyAyMyAwNCAxNCAyNCAwNSkKKyAgICAgICAgcHVucGNrbGRxIG1tQyxtbUYgICAgICAgICAgICAgICA7IG1tQz0oMTUgMjUgMDYgMTYgMjYgMDcgMTcgMjcpCiAKLQljbXAJZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQKLQlqYglzaG9ydCAuY29sdW1uX3N0MTYKKyAgICAgICAgY21wICAgICBlY3gsIGJ5dGUgU0laRU9GX01NV09SRAorICAgICAgICBqYiAgICAgIHNob3J0IC5jb2x1bW5fc3QxNgogCi0JbW92cQlNTVdPUkQgW2VkaSswKlNJWkVPRl9NTVdPUkRdLCBtbUEKLQltb3ZxCU1NV09SRCBbZWRpKzEqU0laRU9GX01NV09SRF0sIG1tRQotCW1vdnEJTU1XT1JEIFtlZGkrMipTSVpFT0ZfTU1XT1JEXSwgbW1DCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtlZGkrMCpTSVpFT0ZfTU1XT1JEXSwgbW1BCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtlZGkrMSpTSVpFT0ZfTU1XT1JEXSwgbW1FCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtlZGkrMipTSVpFT0ZfTU1XT1JEXSwgbW1DCiAKLQlzdWIJZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQKLQlqegluZWFyIC5lbmRjb2x1bW4KKyAgICAgICAgc3ViICAgICBlY3gsIGJ5dGUgU0laRU9GX01NV09SRAorICAgICAgICBqeiAgICAgIG5lYXIgLmVuZGNvbHVtbgogCi0JYWRkCWVkaSwgYnl0ZSBSR0JfUElYRUxTSVpFKlNJWkVPRl9NTVdPUkQJOyBvdXRwdHIKLQlhZGQJZXNpLCBieXRlIFNJWkVPRl9NTVdPUkQJCQk7IGlucHRyMAotCWRlYwlhbAkJCTsgWWN0cgotCWpuegluZWFyIC5ZbG9vcF8ybmQKKyAgICAgICAgYWRkICAgICBlZGksIGJ5dGUgUkdCX1BJWEVMU0laRSpTSVpFT0ZfTU1XT1JEICAgOyBvdXRwdHIKKyAgICAgICAgYWRkICAgICBlc2ksIGJ5dGUgU0laRU9GX01NV09SRCAgICAgICAgICAgICAgICAgOyBpbnB0cjAKKyAgICAgICAgZGVjICAgICBhbCAgICAgICAgICAgICAgICAgICAgICA7IFljdHIKKyAgICAgICAgam56ICAgICBuZWFyIC5ZbG9vcF8ybmQKIAotCWFkZAllYngsIGJ5dGUgU0laRU9GX01NV09SRAkJCTsgaW5wdHIxCi0JYWRkCWVkeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECQkJOyBpbnB0cjIKLQlqbXAJbmVhciAuY29sdW1ubG9vcAotCWFsaWdueAkxNiw3CisgICAgICAgIGFkZCAgICAgZWJ4LCBieXRlIFNJWkVPRl9NTVdPUkQgICAgICAgICAgICAgICAgIDsgaW5wdHIxCisgICAgICAgIGFkZCAgICAgZWR4LCBieXRlIFNJWkVPRl9NTVdPUkQgICAgICAgICAgICAgICAgIDsgaW5wdHIyCisgICAgICAgIGptcCAgICAgbmVhciAuY29sdW1ubG9vcAorICAgICAgICBhbGlnbnggIDE2LDcKIAogLmNvbHVtbl9zdDE2OgotCWxlYQllY3gsIFtlY3grZWN4KjJdCTsgaW11bCBlY3gsIFJHQl9QSVhFTFNJWkUKLQljbXAJZWN4LCBieXRlIDIqU0laRU9GX01NV09SRAotCWpiCXNob3J0IC5jb2x1bW5fc3Q4Ci0JbW92cQlNTVdPUkQgW2VkaSswKlNJWkVPRl9NTVdPUkRdLCBtbUEKLQltb3ZxCU1NV09SRCBbZWRpKzEqU0laRU9GX01NV09SRF0sIG1tRQotCW1vdnEJbW1BLG1tQwotCXN1YgllY3gsIGJ5dGUgMipTSVpFT0ZfTU1XT1JECi0JYWRkCWVkaSwgYnl0ZSAyKlNJWkVPRl9NTVdPUkQKLQlqbXAJc2hvcnQgLmNvbHVtbl9zdDQKKyAgICAgICAgbGVhICAgICBlY3gsIFtlY3grZWN4KjJdICAgICAgICA7IGltdWwgZWN4LCBSR0JfUElYRUxTSVpFCisgICAgICAgIGNtcCAgICAgZWN4LCBieXRlIDIqU0laRU9GX01NV09SRAorICAgICAgICBqYiAgICAgIHNob3J0IC5jb2x1bW5fc3Q4CisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtlZGkrMCpTSVpFT0ZfTU1XT1JEXSwgbW1BCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtlZGkrMSpTSVpFT0ZfTU1XT1JEXSwgbW1FCisgICAgICAgIG1vdnEgICAgbW1BLG1tQworICAgICAgICBzdWIgICAgIGVjeCwgYnl0ZSAyKlNJWkVPRl9NTVdPUkQKKyAgICAgICAgYWRkICAgICBlZGksIGJ5dGUgMipTSVpFT0ZfTU1XT1JECisgICAgICAgIGptcCAgICAgc2hvcnQgLmNvbHVtbl9zdDQKIC5jb2x1bW5fc3Q4OgotCWNtcAllY3gsIGJ5dGUgU0laRU9GX01NV09SRAotCWpiCXNob3J0IC5jb2x1bW5fc3Q0Ci0JbW92cQlNTVdPUkQgW2VkaSswKlNJWkVPRl9NTVdPUkRdLCBtbUEKLQltb3ZxCW1tQSxtbUUKLQlzdWIJZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQKLQlhZGQJZWRpLCBieXRlIFNJWkVPRl9NTVdPUkQKKyAgICAgICAgY21wICAgICBlY3gsIGJ5dGUgU0laRU9GX01NV09SRAorICAgICAgICBqYiAgICAgIHNob3J0IC5jb2x1bW5fc3Q0CisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtlZGkrMCpTSVpFT0ZfTU1XT1JEXSwgbW1BCisgICAgICAgIG1vdnEgICAgbW1BLG1tRQorICAgICAgICBzdWIgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECisgICAgICAgIGFkZCAgICAgZWRpLCBieXRlIFNJWkVPRl9NTVdPUkQKIC5jb2x1bW5fc3Q0OgotCW1vdmQJZWF4LG1tQQotCWNtcAllY3gsIGJ5dGUgU0laRU9GX0RXT1JECi0JamIJc2hvcnQgLmNvbHVtbl9zdDIKLQltb3YJRFdPUkQgW2VkaSswKlNJWkVPRl9EV09SRF0sIGVheAotCXBzcmxxCW1tQSxEV09SRF9CSVQKLQltb3ZkCWVheCxtbUEKLQlzdWIJZWN4LCBieXRlIFNJWkVPRl9EV09SRAotCWFkZAllZGksIGJ5dGUgU0laRU9GX0RXT1JECisgICAgICAgIG1vdmQgICAgZWF4LG1tQQorICAgICAgICBjbXAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfRFdPUkQKKyAgICAgICAgamIgICAgICBzaG9ydCAuY29sdW1uX3N0MgorICAgICAgICBtb3YgICAgIERXT1JEIFtlZGkrMCpTSVpFT0ZfRFdPUkRdLCBlYXgKKyAgICAgICAgcHNybHEgICBtbUEsRFdPUkRfQklUCisgICAgICAgIG1vdmQgICAgZWF4LG1tQQorICAgICAgICBzdWIgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfRFdPUkQKKyAgICAgICAgYWRkICAgICBlZGksIGJ5dGUgU0laRU9GX0RXT1JECiAuY29sdW1uX3N0MjoKLQljbXAJZWN4LCBieXRlIFNJWkVPRl9XT1JECi0JamIJc2hvcnQgLmNvbHVtbl9zdDEKLQltb3YJV09SRCBbZWRpKzAqU0laRU9GX1dPUkRdLCBheAotCXNocgllYXgsV09SRF9CSVQKLQlzdWIJZWN4LCBieXRlIFNJWkVPRl9XT1JECi0JYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfV09SRAorICAgICAgICBjbXAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfV09SRAorICAgICAgICBqYiAgICAgIHNob3J0IC5jb2x1bW5fc3QxCisgICAgICAgIG1vdiAgICAgV09SRCBbZWRpKzAqU0laRU9GX1dPUkRdLCBheAorICAgICAgICBzaHIgICAgIGVheCxXT1JEX0JJVAorICAgICAgICBzdWIgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfV09SRAorICAgICAgICBhZGQgICAgIGVkaSwgYnl0ZSBTSVpFT0ZfV09SRAogLmNvbHVtbl9zdDE6Ci0JY21wCWVjeCwgYnl0ZSBTSVpFT0ZfQllURQotCWpiCXNob3J0IC5lbmRjb2x1bW4KLQltb3YJQllURSBbZWRpKzAqU0laRU9GX0JZVEVdLCBhbAorICAgICAgICBjbXAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfQllURQorICAgICAgICBqYiAgICAgIHNob3J0IC5lbmRjb2x1bW4KKyAgICAgICAgbW92ICAgICBCWVRFIFtlZGkrMCpTSVpFT0ZfQllURV0sIGFsCiAKICVlbHNlIDsgUkdCX1BJWEVMU0laRSA9PSA0IDsgLS0tLS0tLS0tLS0KIAogJWlmZGVmIFJHQlhfRklMTEVSXzBYRkYKLQlwY21wZXFiICAgbW02LG1tNgkJOyBtbTY9KFgwIFgyIFg0IFg2ICoqICoqICoqICoqKQotCXBjbXBlcWIgICBtbTcsbW03CQk7IG1tNz0oWDEgWDMgWDUgWDcgKiogKiogKiogKiopCisgICAgICAgIHBjbXBlcWIgICBtbTYsbW02ICAgICAgICAgICAgICAgOyBtbTY9KFgwIFgyIFg0IFg2ICoqICoqICoqICoqKQorICAgICAgICBwY21wZXFiICAgbW03LG1tNyAgICAgICAgICAgICAgIDsgbW03PShYMSBYMyBYNSBYNyAqKiAqKiAqKiAqKikKICVlbHNlCi0JcHhvciAgICAgIG1tNixtbTYJCTsgbW02PShYMCBYMiBYNCBYNiAqKiAqKiAqKiAqKikKLQlweG9yICAgICAgbW03LG1tNwkJOyBtbTc9KFgxIFgzIFg1IFg3ICoqICoqICoqICoqKQorICAgICAgICBweG9yICAgICAgbW02LG1tNiAgICAgICAgICAgICAgIDsgbW02PShYMCBYMiBYNCBYNiAqKiAqKiAqKiAqKikKKyAgICAgICAgcHhvciAgICAgIG1tNyxtbTcgICAgICAgICAgICAgICA7IG1tNz0oWDEgWDMgWDUgWDcgKiogKiogKiogKiopCiAlZW5kaWYKLQk7IG1tQT0oMDAgMDIgMDQgMDYgKiogKiogKiogKiopLCBtbUI9KDAxIDAzIDA1IDA3ICoqICoqICoqICoqKQotCTsgbW1DPSgxMCAxMiAxNCAxNiAqKiAqKiAqKiAqKiksIG1tRD0oMTEgMTMgMTUgMTcgKiogKiogKiogKiopCi0JOyBtbUU9KDIwIDIyIDI0IDI2ICoqICoqICoqICoqKSwgbW1GPSgyMSAyMyAyNSAyNyAqKiAqKiAqKiAqKikKLQk7IG1tRz0oMzAgMzIgMzQgMzYgKiogKiogKiogKiopLCBtbUg9KDMxIDMzIDM1IDM3ICoqICoqICoqICoqKQorICAgICAgICA7IG1tQT0oMDAgMDIgMDQgMDYgKiogKiogKiogKiopLCBtbUI9KDAxIDAzIDA1IDA3ICoqICoqICoqICoqKQorICAgICAgICA7IG1tQz0oMTAgMTIgMTQgMTYgKiogKiogKiogKiopLCBtbUQ9KDExIDEzIDE1IDE3ICoqICoqICoqICoqKQorICAgICAgICA7IG1tRT0oMjAgMjIgMjQgMjYgKiogKiogKiogKiopLCBtbUY9KDIxIDIzIDI1IDI3ICoqICoqICoqICoqKQorICAgICAgICA7IG1tRz0oMzAgMzIgMzQgMzYgKiogKiogKiogKiopLCBtbUg9KDMxIDMzIDM1IDM3ICoqICoqICoqICoqKQogCi0JcHVucGNrbGJ3IG1tQSxtbUMJCTsgbW1BPSgwMCAxMCAwMiAxMiAwNCAxNCAwNiAxNikKLQlwdW5wY2tsYncgbW1FLG1tRwkJOyBtbUU9KDIwIDMwIDIyIDMyIDI0IDM0IDI2IDM2KQotCXB1bnBja2xidyBtbUIsbW1ECQk7IG1tQj0oMDEgMTEgMDMgMTMgMDUgMTUgMDcgMTcpCi0JcHVucGNrbGJ3IG1tRixtbUgJCTsgbW1GPSgyMSAzMSAyMyAzMyAyNSAzNSAyNyAzNykKKyAgICAgICAgcHVucGNrbGJ3IG1tQSxtbUMgICAgICAgICAgICAgICA7IG1tQT0oMDAgMTAgMDIgMTIgMDQgMTQgMDYgMTYpCisgICAgICAgIHB1bnBja2xidyBtbUUsbW1HICAgICAgICAgICAgICAgOyBtbUU9KDIwIDMwIDIyIDMyIDI0IDM0IDI2IDM2KQorICAgICAgICBwdW5wY2tsYncgbW1CLG1tRCAgICAgICAgICAgICAgIDsgbW1CPSgwMSAxMSAwMyAxMyAwNSAxNSAwNyAxNykKKyAgICAgICAgcHVucGNrbGJ3IG1tRixtbUggICAgICAgICAgICAgICA7IG1tRj0oMjEgMzEgMjMgMzMgMjUgMzUgMjcgMzcpCiAKLQltb3ZxICAgICAgbW1DLG1tQQotCXB1bnBja2x3ZCBtbUEsbW1FCQk7IG1tQT0oMDAgMTAgMjAgMzAgMDIgMTIgMjIgMzIpCi0JcHVucGNraHdkIG1tQyxtbUUJCTsgbW1DPSgwNCAxNCAyNCAzNCAwNiAxNiAyNiAzNikKLQltb3ZxICAgICAgbW1HLG1tQgotCXB1bnBja2x3ZCBtbUIsbW1GCQk7IG1tQj0oMDEgMTEgMjEgMzEgMDMgMTMgMjMgMzMpCi0JcHVucGNraHdkIG1tRyxtbUYJCTsgbW1HPSgwNSAxNSAyNSAzNSAwNyAxNyAyNyAzNykKKyAgICAgICAgbW92cSAgICAgIG1tQyxtbUEKKyAgICAgICAgcHVucGNrbHdkIG1tQSxtbUUgICAgICAgICAgICAgICA7IG1tQT0oMDAgMTAgMjAgMzAgMDIgMTIgMjIgMzIpCisgICAgICAgIHB1bnBja2h3ZCBtbUMsbW1FICAgICAgICAgICAgICAgOyBtbUM9KDA0IDE0IDI0IDM0IDA2IDE2IDI2IDM2KQorICAgICAgICBtb3ZxICAgICAgbW1HLG1tQgorICAgICAgICBwdW5wY2tsd2QgbW1CLG1tRiAgICAgICAgICAgICAgIDsgbW1CPSgwMSAxMSAyMSAzMSAwMyAxMyAyMyAzMykKKyAgICAgICAgcHVucGNraHdkIG1tRyxtbUYgICAgICAgICAgICAgICA7IG1tRz0oMDUgMTUgMjUgMzUgMDcgMTcgMjcgMzcpCiAKLQltb3ZxICAgICAgbW1ELG1tQQotCXB1bnBja2xkcSBtbUEsbW1CCQk7IG1tQT0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEpCi0JcHVucGNraGRxIG1tRCxtbUIJCTsgbW1EPSgwMiAxMiAyMiAzMiAwMyAxMyAyMyAzMykKLQltb3ZxICAgICAgbW1ILG1tQwotCXB1bnBja2xkcSBtbUMsbW1HCQk7IG1tQz0oMDQgMTQgMjQgMzQgMDUgMTUgMjUgMzUpCi0JcHVucGNraGRxIG1tSCxtbUcJCTsgbW1IPSgwNiAxNiAyNiAzNiAwNyAxNyAyNyAzNykKKyAgICAgICAgbW92cSAgICAgIG1tRCxtbUEKKyAgICAgICAgcHVucGNrbGRxIG1tQSxtbUIgICAgICAgICAgICAgICA7IG1tQT0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEpCisgICAgICAgIHB1bnBja2hkcSBtbUQsbW1CICAgICAgICAgICAgICAgOyBtbUQ9KDAyIDEyIDIyIDMyIDAzIDEzIDIzIDMzKQorICAgICAgICBtb3ZxICAgICAgbW1ILG1tQworICAgICAgICBwdW5wY2tsZHEgbW1DLG1tRyAgICAgICAgICAgICAgIDsgbW1DPSgwNCAxNCAyNCAzNCAwNSAxNSAyNSAzNSkKKyAgICAgICAgcHVucGNraGRxIG1tSCxtbUcgICAgICAgICAgICAgICA7IG1tSD0oMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCiAKLQljbXAJZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQKLQlqYglzaG9ydCAuY29sdW1uX3N0MTYKKyAgICAgICAgY21wICAgICBlY3gsIGJ5dGUgU0laRU9GX01NV09SRAorICAgICAgICBqYiAgICAgIHNob3J0IC5jb2x1bW5fc3QxNgogCi0JbW92cQlNTVdPUkQgW2VkaSswKlNJWkVPRl9NTVdPUkRdLCBtbUEKLQltb3ZxCU1NV09SRCBbZWRpKzEqU0laRU9GX01NV09SRF0sIG1tRAotCW1vdnEJTU1XT1JEIFtlZGkrMipTSVpFT0ZfTU1XT1JEXSwgbW1DCi0JbW92cQlNTVdPUkQgW2VkaSszKlNJWkVPRl9NTVdPUkRdLCBtbUgKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW2VkaSswKlNJWkVPRl9NTVdPUkRdLCBtbUEKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW2VkaSsxKlNJWkVPRl9NTVdPUkRdLCBtbUQKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW2VkaSsyKlNJWkVPRl9NTVdPUkRdLCBtbUMKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW2VkaSszKlNJWkVPRl9NTVdPUkRdLCBtbUgKIAotCXN1YgllY3gsIGJ5dGUgU0laRU9GX01NV09SRAotCWp6CXNob3J0IC5lbmRjb2x1bW4KKyAgICAgICAgc3ViICAgICBlY3gsIGJ5dGUgU0laRU9GX01NV09SRAorICAgICAgICBqeiAgICAgIHNob3J0IC5lbmRjb2x1bW4KIAotCWFkZAllZGksIGJ5dGUgUkdCX1BJWEVMU0laRSpTSVpFT0ZfTU1XT1JECTsgb3V0cHRyCi0JYWRkCWVzaSwgYnl0ZSBTSVpFT0ZfTU1XT1JECQkJOyBpbnB0cjAKLQlkZWMJYWwJCQk7IFljdHIKLQlqbnoJbmVhciAuWWxvb3BfMm5kCisgICAgICAgIGFkZCAgICAgZWRpLCBieXRlIFJHQl9QSVhFTFNJWkUqU0laRU9GX01NV09SRCAgIDsgb3V0cHRyCisgICAgICAgIGFkZCAgICAgZXNpLCBieXRlIFNJWkVPRl9NTVdPUkQgICAgICAgICAgICAgICAgIDsgaW5wdHIwCisgICAgICAgIGRlYyAgICAgYWwgICAgICAgICAgICAgICAgICAgICAgOyBZY3RyCisgICAgICAgIGpueiAgICAgbmVhciAuWWxvb3BfMm5kCiAKLQlhZGQJZWJ4LCBieXRlIFNJWkVPRl9NTVdPUkQJCQk7IGlucHRyMQotCWFkZAllZHgsIGJ5dGUgU0laRU9GX01NV09SRAkJCTsgaW5wdHIyCi0Jam1wCW5lYXIgLmNvbHVtbmxvb3AKLQlhbGlnbngJMTYsNworICAgICAgICBhZGQgICAgIGVieCwgYnl0ZSBTSVpFT0ZfTU1XT1JEICAgICAgICAgICAgICAgICA7IGlucHRyMQorICAgICAgICBhZGQgICAgIGVkeCwgYnl0ZSBTSVpFT0ZfTU1XT1JEICAgICAgICAgICAgICAgICA7IGlucHRyMgorICAgICAgICBqbXAgICAgIG5lYXIgLmNvbHVtbmxvb3AKKyAgICAgICAgYWxpZ254ICAxNiw3CiAKIC5jb2x1bW5fc3QxNjoKLQljbXAJZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQvMgotCWpiCXNob3J0IC5jb2x1bW5fc3Q4Ci0JbW92cQlNTVdPUkQgW2VkaSswKlNJWkVPRl9NTVdPUkRdLCBtbUEKLQltb3ZxCU1NV09SRCBbZWRpKzEqU0laRU9GX01NV09SRF0sIG1tRAotCW1vdnEJbW1BLG1tQwotCW1vdnEJbW1ELG1tSAotCXN1YgllY3gsIGJ5dGUgU0laRU9GX01NV09SRC8yCi0JYWRkCWVkaSwgYnl0ZSAyKlNJWkVPRl9NTVdPUkQKKyAgICAgICAgY21wICAgICBlY3gsIGJ5dGUgU0laRU9GX01NV09SRC8yCisgICAgICAgIGpiICAgICAgc2hvcnQgLmNvbHVtbl9zdDgKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW2VkaSswKlNJWkVPRl9NTVdPUkRdLCBtbUEKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW2VkaSsxKlNJWkVPRl9NTVdPUkRdLCBtbUQKKyAgICAgICAgbW92cSAgICBtbUEsbW1DCisgICAgICAgIG1vdnEgICAgbW1ELG1tSAorICAgICAgICBzdWIgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JELzIKKyAgICAgICAgYWRkICAgICBlZGksIGJ5dGUgMipTSVpFT0ZfTU1XT1JECiAuY29sdW1uX3N0ODoKLQljbXAJZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQvNAotCWpiCXNob3J0IC5jb2x1bW5fc3Q0Ci0JbW92cQlNTVdPUkQgW2VkaSswKlNJWkVPRl9NTVdPUkRdLCBtbUEKLQltb3ZxCW1tQSxtbUQKLQlzdWIJZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQvNAotCWFkZAllZGksIGJ5dGUgMSpTSVpFT0ZfTU1XT1JECisgICAgICAgIGNtcCAgICAgZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQvNAorICAgICAgICBqYiAgICAgIHNob3J0IC5jb2x1bW5fc3Q0CisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtlZGkrMCpTSVpFT0ZfTU1XT1JEXSwgbW1BCisgICAgICAgIG1vdnEgICAgbW1BLG1tRAorICAgICAgICBzdWIgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JELzQKKyAgICAgICAgYWRkICAgICBlZGksIGJ5dGUgMSpTSVpFT0ZfTU1XT1JECiAuY29sdW1uX3N0NDoKLQljbXAJZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQvOAotCWpiCXNob3J0IC5lbmRjb2x1bW4KLQltb3ZkCURXT1JEIFtlZGkrMCpTSVpFT0ZfRFdPUkRdLCBtbUEKKyAgICAgICAgY21wICAgICBlY3gsIGJ5dGUgU0laRU9GX01NV09SRC84CisgICAgICAgIGpiICAgICAgc2hvcnQgLmVuZGNvbHVtbgorICAgICAgICBtb3ZkICAgIERXT1JEIFtlZGkrMCpTSVpFT0ZfRFdPUkRdLCBtbUEKIAogJWVuZGlmIDsgUkdCX1BJWEVMU0laRSA7IC0tLS0tLS0tLS0tLS0tLQogCiAuZW5kY29sdW1uOgotCWVtbXMJCTsgZW1wdHkgTU1YIHN0YXRlCisgICAgICAgIGVtbXMgICAgICAgICAgICA7IGVtcHR5IE1NWCBzdGF0ZQogCiAucmV0dXJuOgotCXBvcAllZGkKLQlwb3AJZXNpCi07CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi07CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi0JcG9wCWVieAotCW1vdgllc3AsZWJwCQk7IGVzcCA8LSBhbGlnbmVkIGVicAotCXBvcAllc3AJCTsgZXNwIDwtIG9yaWdpbmFsIGVicAotCXBvcAllYnAKLQlyZXQKKyAgICAgICAgcG9wICAgICBlZGkKKyAgICAgICAgcG9wICAgICBlc2kKKzsgICAgICAgcG9wICAgICBlZHggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICAgICAgcG9wICAgICBlY3ggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICAgICAgcG9wICAgICBlYngKKyAgICAgICAgbW92ICAgICBlc3AsZWJwICAgICAgICAgOyBlc3AgPC0gYWxpZ25lZCBlYnAKKyAgICAgICAgcG9wICAgICBlc3AgICAgICAgICAgICAgOyBlc3AgPC0gb3JpZ2luYWwgZWJwCisgICAgICAgIHBvcCAgICAgZWJwCisgICAgICAgIHJldAogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiA7CkBAIC00MDMsNjIgKzQwMyw2MiBAQAogOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1Zik7CiA7CiAKLSVkZWZpbmUgb3V0cHV0X3dpZHRoKGIpCShiKSs4CQkJOyBKRElNRU5TSU9OIG91dHB1dF93aWR0aAotJWRlZmluZSBpbnB1dF9idWYoYikJCShiKSsxMgkJOyBKU0FNUElNQUdFIGlucHV0X2J1ZgotJWRlZmluZSBpbl9yb3dfZ3JvdXBfY3RyKGIpCShiKSsxNgkJOyBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIKLSVkZWZpbmUgb3V0cHV0X2J1ZihiKQkJKGIpKzIwCQk7IEpTQU1QQVJSQVkgb3V0cHV0X2J1ZgorJWRlZmluZSBvdXRwdXRfd2lkdGgoYikgKGIpKzggICAgICAgICAgICAgICAgICAgOyBKRElNRU5TSU9OIG91dHB1dF93aWR0aAorJWRlZmluZSBpbnB1dF9idWYoYikgICAgICAgICAgICAoYikrMTIgICAgICAgICAgOyBKU0FNUElNQUdFIGlucHV0X2J1ZgorJWRlZmluZSBpbl9yb3dfZ3JvdXBfY3RyKGIpICAgICAoYikrMTYgICAgICAgICAgOyBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIKKyVkZWZpbmUgb3V0cHV0X2J1ZihiKSAgICAgICAgICAgKGIpKzIwICAgICAgICAgIDsgSlNBTVBBUlJBWSBvdXRwdXRfYnVmCiAKLQlhbGlnbgkxNgotCWdsb2JhbAlFWFROKGpzaW1kX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX21teCkKKyAgICAgICAgYWxpZ24gICAxNgorICAgICAgICBnbG9iYWwgIEVYVE4oanNpbWRfaDJ2Ml9tZXJnZWRfdXBzYW1wbGVfbW14KQogCiBFWFROKGpzaW1kX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX21teCk6Ci0JcHVzaAllYnAKLQltb3YJZWJwLGVzcAotCXB1c2gJZWJ4Ci07CXB1c2gJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLQlwdXNoCWVzaQotCXB1c2gJZWRpCisgICAgICAgIHB1c2ggICAgZWJwCisgICAgICAgIG1vdiAgICAgZWJwLGVzcAorICAgICAgICBwdXNoICAgIGVieAorOyAgICAgICBwdXNoICAgIGVjeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgICAgICBwdXNoICAgIGVkeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgICAgICBwdXNoICAgIGVzaQorICAgICAgICBwdXNoICAgIGVkaQogCi0JbW92CWVheCwgSkRJTUVOU0lPTiBbb3V0cHV0X3dpZHRoKGVicCldCisgICAgICAgIG1vdiAgICAgZWF4LCBKRElNRU5TSU9OIFtvdXRwdXRfd2lkdGgoZWJwKV0KIAotCW1vdgllZGksIEpTQU1QSU1BR0UgW2lucHV0X2J1ZihlYnApXQotCW1vdgllY3gsIEpESU1FTlNJT04gW2luX3Jvd19ncm91cF9jdHIoZWJwKV0KLQltb3YJZXNpLCBKU0FNUEFSUkFZIFtlZGkrMCpTSVpFT0ZfSlNBTVBBUlJBWV0KLQltb3YJZWJ4LCBKU0FNUEFSUkFZIFtlZGkrMSpTSVpFT0ZfSlNBTVBBUlJBWV0KLQltb3YJZWR4LCBKU0FNUEFSUkFZIFtlZGkrMipTSVpFT0ZfSlNBTVBBUlJBWV0KLQltb3YJZWRpLCBKU0FNUEFSUkFZIFtvdXRwdXRfYnVmKGVicCldCi0JbGVhCWVzaSwgW2VzaStlY3gqU0laRU9GX0pTQU1QUk9XXQorICAgICAgICBtb3YgICAgIGVkaSwgSlNBTVBJTUFHRSBbaW5wdXRfYnVmKGVicCldCisgICAgICAgIG1vdiAgICAgZWN4LCBKRElNRU5TSU9OIFtpbl9yb3dfZ3JvdXBfY3RyKGVicCldCisgICAgICAgIG1vdiAgICAgZXNpLCBKU0FNUEFSUkFZIFtlZGkrMCpTSVpFT0ZfSlNBTVBBUlJBWV0KKyAgICAgICAgbW92ICAgICBlYngsIEpTQU1QQVJSQVkgW2VkaSsxKlNJWkVPRl9KU0FNUEFSUkFZXQorICAgICAgICBtb3YgICAgIGVkeCwgSlNBTVBBUlJBWSBbZWRpKzIqU0laRU9GX0pTQU1QQVJSQVldCisgICAgICAgIG1vdiAgICAgZWRpLCBKU0FNUEFSUkFZIFtvdXRwdXRfYnVmKGVicCldCisgICAgICAgIGxlYSAgICAgZXNpLCBbZXNpK2VjeCpTSVpFT0ZfSlNBTVBST1ddCiAKLQlwdXNoCWVkeAkJCTsgaW5wdHIyCi0JcHVzaAllYngJCQk7IGlucHRyMQotCXB1c2gJZXNpCQkJOyBpbnB0cjAwCi0JbW92CWVieCxlc3AKKyAgICAgICAgcHVzaCAgICBlZHggICAgICAgICAgICAgICAgICAgICA7IGlucHRyMgorICAgICAgICBwdXNoICAgIGVieCAgICAgICAgICAgICAgICAgICAgIDsgaW5wdHIxCisgICAgICAgIHB1c2ggICAgZXNpICAgICAgICAgICAgICAgICAgICAgOyBpbnB0cjAwCisgICAgICAgIG1vdiAgICAgZWJ4LGVzcAogCi0JcHVzaAllZGkJCQk7IG91dHB1dF9idWYgKG91dHB0cjApCi0JcHVzaAllY3gJCQk7IGluX3Jvd19ncm91cF9jdHIKLQlwdXNoCWVieAkJCTsgaW5wdXRfYnVmCi0JcHVzaAllYXgJCQk7IG91dHB1dF93aWR0aAorICAgICAgICBwdXNoICAgIGVkaSAgICAgICAgICAgICAgICAgICAgIDsgb3V0cHV0X2J1ZiAob3V0cHRyMCkKKyAgICAgICAgcHVzaCAgICBlY3ggICAgICAgICAgICAgICAgICAgICA7IGluX3Jvd19ncm91cF9jdHIKKyAgICAgICAgcHVzaCAgICBlYnggICAgICAgICAgICAgICAgICAgICA7IGlucHV0X2J1ZgorICAgICAgICBwdXNoICAgIGVheCAgICAgICAgICAgICAgICAgICAgIDsgb3V0cHV0X3dpZHRoCiAKLQljYWxsCW5lYXIgRVhUTihqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9tbXgpCisgICAgICAgIGNhbGwgICAgbmVhciBFWFROKGpzaW1kX2gydjFfbWVyZ2VkX3Vwc2FtcGxlX21teCkKIAotCWFkZAllc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCTsgaW5wdHIwMQotCWFkZAllZGksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCTsgb3V0cHRyMQotCW1vdglQT0lOVEVSIFtlYngrMCpTSVpFT0ZfUE9JTlRFUl0sIGVzaQotCW1vdglQT0lOVEVSIFtlYngtMSpTSVpFT0ZfUE9JTlRFUl0sIGVkaQorICAgICAgICBhZGQgICAgIGVzaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cgICAgICAgOyBpbnB0cjAxCisgICAgICAgIGFkZCAgICAgZWRpLCBieXRlIFNJWkVPRl9KU0FNUFJPVyAgICAgICA7IG91dHB0cjEKKyAgICAgICAgbW92ICAgICBQT0lOVEVSIFtlYngrMCpTSVpFT0ZfUE9JTlRFUl0sIGVzaQorICAgICAgICBtb3YgICAgIFBPSU5URVIgW2VieC0xKlNJWkVPRl9QT0lOVEVSXSwgZWRpCiAKLQljYWxsCW5lYXIgRVhUTihqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9tbXgpCisgICAgICAgIGNhbGwgICAgbmVhciBFWFROKGpzaW1kX2gydjFfbWVyZ2VkX3Vwc2FtcGxlX21teCkKIAotCWFkZAllc3AsIGJ5dGUgNypTSVpFT0ZfRFdPUkQKKyAgICAgICAgYWRkICAgICBlc3AsIGJ5dGUgNypTSVpFT0ZfRFdPUkQKIAotCXBvcAllZGkKLQlwb3AJZXNpCi07CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi07CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi0JcG9wCWVieAotCXBvcAllYnAKLQlyZXQKKyAgICAgICAgcG9wICAgICBlZGkKKyAgICAgICAgcG9wICAgICBlc2kKKzsgICAgICAgcG9wICAgICBlZHggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICAgICAgcG9wICAgICBlY3ggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICAgICAgcG9wICAgICBlYngKKyAgICAgICAgcG9wICAgICBlYnAKKyAgICAgICAgcmV0CiAKIDsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCiA7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCi0JYWxpZ24JMTYKKyAgICAgICAgYWxpZ24gICAxNgpkaWZmIC0tZ2l0IGEvc2ltZC9qZG1yZ3NzMi02NC5hc20gYi9zaW1kL2pkbXJnc3MyLTY0LmFzbQppbmRleCBmZmJmNmIyLi5kMGUxZWE3IDEwMDY0NAotLS0gYS9zaW1kL2pkbXJnc3MyLTY0LmFzbQorKysgYi9zaW1kL2pkbXJnc3MyLTY0LmFzbQpAQCAtMTgsNyArMTgsNyBAQAogOyBbVEFCOF0KIAogJWluY2x1ZGUgImpjb2xzYW1wLmluYyIKLQkJCQkKKwogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogOwogOyBVcHNhbXBsZSBhbmQgY29sb3IgY29udmVydCBmb3IgdGhlIGNhc2Ugb2YgMjoxIGhvcml6b250YWwgYW5kIDE6MSB2ZXJ0aWNhbC4KQEAgLTM1LDM5OSArMzUsMzk5IEBACiA7IHIxMiA9IEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0cgogOyByMTMgPSBKU0FNUEFSUkFZIG91dHB1dF9idWYKIAotJWRlZmluZSB3ayhpKQkJcmJwLShXS19OVU0tKGkpKSpTSVpFT0ZfWE1NV09SRAk7IHhtbXdvcmQgd2tbV0tfTlVNXQotJWRlZmluZSBXS19OVU0JCTMKKyVkZWZpbmUgd2soaSkgICAgICAgICAgIHJicC0oV0tfTlVNLShpKSkqU0laRU9GX1hNTVdPUkQgOyB4bW13b3JkIHdrW1dLX05VTV0KKyVkZWZpbmUgV0tfTlVNICAgICAgICAgIDMKIAotCWFsaWduCTE2Ci0JZ2xvYmFsCUVYVE4oanNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfc3NlMikKKyAgICAgICAgYWxpZ24gICAxNgorICAgICAgICBnbG9iYWwgIEVYVE4oanNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfc3NlMikKIAogRVhUTihqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9zc2UyKToKLQlwdXNoCXJicAotCW1vdglyYXgscnNwCQkJCTsgcmF4ID0gb3JpZ2luYWwgcmJwCi0Jc3ViCXJzcCwgYnl0ZSA0Ci0JYW5kCXJzcCwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKQk7IGFsaWduIHRvIDEyOCBiaXRzCi0JbW92CVtyc3BdLHJheAotCW1vdglyYnAscnNwCQkJCTsgcmJwID0gYWxpZ25lZCByYnAKLQlsZWEJcnNwLCBbd2soMCldCi0JY29sbGVjdF9hcmdzCi0JcHVzaAlyYngKKyAgICAgICAgcHVzaCAgICByYnAKKyAgICAgICAgbW92ICAgICByYXgscnNwICAgICAgICAgICAgICAgICAgICAgICAgIDsgcmF4ID0gb3JpZ2luYWwgcmJwCisgICAgICAgIHN1YiAgICAgcnNwLCBieXRlIDQKKyAgICAgICAgYW5kICAgICByc3AsIGJ5dGUgKC1TSVpFT0ZfWE1NV09SRCkgICAgIDsgYWxpZ24gdG8gMTI4IGJpdHMKKyAgICAgICAgbW92ICAgICBbcnNwXSxyYXgKKyAgICAgICAgbW92ICAgICByYnAscnNwICAgICAgICAgICAgICAgICAgICAgICAgIDsgcmJwID0gYWxpZ25lZCByYnAKKyAgICAgICAgbGVhICAgICByc3AsIFt3aygwKV0KKyAgICAgICAgY29sbGVjdF9hcmdzCisgICAgICAgIHB1c2ggICAgcmJ4CiAKLQltb3YJcmN4LCByMTAJOyBjb2wKLQl0ZXN0CXJjeCxyY3gKLQlqegluZWFyIC5yZXR1cm4KKyAgICAgICAgbW92ICAgICByY3gsIHIxMCAgICAgICAgOyBjb2wKKyAgICAgICAgdGVzdCAgICByY3gscmN4CisgICAgICAgIGp6ICAgICAgbmVhciAucmV0dXJuCiAKLQlwdXNoCXJjeAorICAgICAgICBwdXNoICAgIHJjeAogCi0JbW92CXJkaSwgcjExCi0JbW92CXJjeCwgcjEyCi0JbW92CXJzaSwgSlNBTVBBUlJBWSBbcmRpKzAqU0laRU9GX0pTQU1QQVJSQVldCi0JbW92CXJieCwgSlNBTVBBUlJBWSBbcmRpKzEqU0laRU9GX0pTQU1QQVJSQVldCi0JbW92CXJkeCwgSlNBTVBBUlJBWSBbcmRpKzIqU0laRU9GX0pTQU1QQVJSQVldCi0JbW92CXJkaSwgcjEzCi0JbW92CXJzaSwgSlNBTVBST1cgW3JzaStyY3gqU0laRU9GX0pTQU1QUk9XXQkJOyBpbnB0cjAKLQltb3YJcmJ4LCBKU0FNUFJPVyBbcmJ4K3JjeCpTSVpFT0ZfSlNBTVBST1ddCQk7IGlucHRyMQotCW1vdglyZHgsIEpTQU1QUk9XIFtyZHgrcmN4KlNJWkVPRl9KU0FNUFJPV10JCTsgaW5wdHIyCi0JbW92CXJkaSwgSlNBTVBST1cgW3JkaV0JCQkJOyBvdXRwdHIKKyAgICAgICAgbW92ICAgICByZGksIHIxMQorICAgICAgICBtb3YgICAgIHJjeCwgcjEyCisgICAgICAgIG1vdiAgICAgcnNpLCBKU0FNUEFSUkFZIFtyZGkrMCpTSVpFT0ZfSlNBTVBBUlJBWV0KKyAgICAgICAgbW92ICAgICByYngsIEpTQU1QQVJSQVkgW3JkaSsxKlNJWkVPRl9KU0FNUEFSUkFZXQorICAgICAgICBtb3YgICAgIHJkeCwgSlNBTVBBUlJBWSBbcmRpKzIqU0laRU9GX0pTQU1QQVJSQVldCisgICAgICAgIG1vdiAgICAgcmRpLCByMTMKKyAgICAgICAgbW92ICAgICByc2ksIEpTQU1QUk9XIFtyc2krcmN4KlNJWkVPRl9KU0FNUFJPV10gICAgICAgICA7IGlucHRyMAorICAgICAgICBtb3YgICAgIHJieCwgSlNBTVBST1cgW3JieCtyY3gqU0laRU9GX0pTQU1QUk9XXSAgICAgICAgIDsgaW5wdHIxCisgICAgICAgIG1vdiAgICAgcmR4LCBKU0FNUFJPVyBbcmR4K3JjeCpTSVpFT0ZfSlNBTVBST1ddICAgICAgICAgOyBpbnB0cjIKKyAgICAgICAgbW92ICAgICByZGksIEpTQU1QUk9XIFtyZGldICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IG91dHB0cgogCi0JcG9wCXJjeAkJCTsgY29sCisgICAgICAgIHBvcCAgICAgcmN4ICAgICAgICAgICAgICAgICAgICAgOyBjb2wKIAogLmNvbHVtbmxvb3A6CiAKLQltb3ZkcWEgICAgeG1tNiwgWE1NV09SRCBbcmJ4XQk7IHhtbTY9Q2IoMDEyMzQ1Njc4OUFCQ0RFRikKLQltb3ZkcWEgICAgeG1tNywgWE1NV09SRCBbcmR4XQk7IHhtbTc9Q3IoMDEyMzQ1Njc4OUFCQ0RFRikKKyAgICAgICAgbW92ZHFhICAgIHhtbTYsIFhNTVdPUkQgW3JieF0gICA7IHhtbTY9Q2IoMDEyMzQ1Njc4OUFCQ0RFRikKKyAgICAgICAgbW92ZHFhICAgIHhtbTcsIFhNTVdPUkQgW3JkeF0gICA7IHhtbTc9Q3IoMDEyMzQ1Njc4OUFCQ0RFRikKIAotCXB4b3IgICAgICB4bW0xLHhtbTEJCTsgeG1tMT0oYWxsIDAncykKLQlwY21wZXF3ICAgeG1tMyx4bW0zCi0JcHNsbHcgICAgIHhtbTMsNwkJOyB4bW0zPXsweEZGODAgMHhGRjgwIDB4RkY4MCAweEZGODAgLi59CisgICAgICAgIHB4b3IgICAgICB4bW0xLHhtbTEgICAgICAgICAgICAgOyB4bW0xPShhbGwgMCdzKQorICAgICAgICBwY21wZXF3ICAgeG1tMyx4bW0zCisgICAgICAgIHBzbGx3ICAgICB4bW0zLDcgICAgICAgICAgICAgICAgOyB4bW0zPXsweEZGODAgMHhGRjgwIDB4RkY4MCAweEZGODAgLi59CiAKLQltb3ZkcWEgICAgeG1tNCx4bW02Ci0JcHVucGNraGJ3IHhtbTYseG1tMQkJOyB4bW02PUNiKDg5QUJDREVGKT1DYkgKLQlwdW5wY2tsYncgeG1tNCx4bW0xCQk7IHhtbTQ9Q2IoMDEyMzQ1NjcpPUNiTAotCW1vdmRxYSAgICB4bW0wLHhtbTcKLQlwdW5wY2toYncgeG1tNyx4bW0xCQk7IHhtbTc9Q3IoODlBQkNERUYpPUNySAotCXB1bnBja2xidyB4bW0wLHhtbTEJCTsgeG1tMD1DcigwMTIzNDU2Nyk9Q3JMCisgICAgICAgIG1vdmRxYSAgICB4bW00LHhtbTYKKyAgICAgICAgcHVucGNraGJ3IHhtbTYseG1tMSAgICAgICAgICAgICA7IHhtbTY9Q2IoODlBQkNERUYpPUNiSAorICAgICAgICBwdW5wY2tsYncgeG1tNCx4bW0xICAgICAgICAgICAgIDsgeG1tND1DYigwMTIzNDU2Nyk9Q2JMCisgICAgICAgIG1vdmRxYSAgICB4bW0wLHhtbTcKKyAgICAgICAgcHVucGNraGJ3IHhtbTcseG1tMSAgICAgICAgICAgICA7IHhtbTc9Q3IoODlBQkNERUYpPUNySAorICAgICAgICBwdW5wY2tsYncgeG1tMCx4bW0xICAgICAgICAgICAgIDsgeG1tMD1DcigwMTIzNDU2Nyk9Q3JMCiAKLQlwYWRkdyAgICAgeG1tNix4bW0zCi0JcGFkZHcgICAgIHhtbTQseG1tMwotCXBhZGR3ICAgICB4bW03LHhtbTMKLQlwYWRkdyAgICAgeG1tMCx4bW0zCisgICAgICAgIHBhZGR3ICAgICB4bW02LHhtbTMKKyAgICAgICAgcGFkZHcgICAgIHhtbTQseG1tMworICAgICAgICBwYWRkdyAgICAgeG1tNyx4bW0zCisgICAgICAgIHBhZGR3ICAgICB4bW0wLHhtbTMKIAotCTsgKE9yaWdpbmFsKQotCTsgUiA9IFkgICAgICAgICAgICAgICAgKyAxLjQwMjAwICogQ3IKLQk7IEcgPSBZIC0gMC4zNDQxNCAqIENiIC0gMC43MTQxNCAqIENyCi0JOyBCID0gWSArIDEuNzcyMDAgKiBDYgotCTsKLQk7IChUaGlzIGltcGxlbWVudGF0aW9uKQotCTsgUiA9IFkgICAgICAgICAgICAgICAgKyAwLjQwMjAwICogQ3IgKyBDcgotCTsgRyA9IFkgLSAwLjM0NDE0ICogQ2IgKyAwLjI4NTg2ICogQ3IgLSBDcgotCTsgQiA9IFkgLSAwLjIyODAwICogQ2IgKyBDYiArIENiCisgICAgICAgIDsgKE9yaWdpbmFsKQorICAgICAgICA7IFIgPSBZICAgICAgICAgICAgICAgICsgMS40MDIwMCAqIENyCisgICAgICAgIDsgRyA9IFkgLSAwLjM0NDE0ICogQ2IgLSAwLjcxNDE0ICogQ3IKKyAgICAgICAgOyBCID0gWSArIDEuNzcyMDAgKiBDYgorICAgICAgICA7CisgICAgICAgIDsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisgICAgICAgIDsgUiA9IFkgICAgICAgICAgICAgICAgKyAwLjQwMjAwICogQ3IgKyBDcgorICAgICAgICA7IEcgPSBZIC0gMC4zNDQxNCAqIENiICsgMC4yODU4NiAqIENyIC0gQ3IKKyAgICAgICAgOyBCID0gWSAtIDAuMjI4MDAgKiBDYiArIENiICsgQ2IKIAotCW1vdmRxYQl4bW01LHhtbTYJCTsgeG1tNT1DYkgKLQltb3ZkcWEJeG1tMix4bW00CQk7IHhtbTI9Q2JMCi0JcGFkZHcJeG1tNix4bW02CQk7IHhtbTY9MipDYkgKLQlwYWRkdwl4bW00LHhtbTQJCTsgeG1tND0yKkNiTAotCW1vdmRxYQl4bW0xLHhtbTcJCTsgeG1tMT1DckgKLQltb3ZkcWEJeG1tMyx4bW0wCQk7IHhtbTM9Q3JMCi0JcGFkZHcJeG1tNyx4bW03CQk7IHhtbTc9MipDckgKLQlwYWRkdwl4bW0wLHhtbTAJCTsgeG1tMD0yKkNyTAorICAgICAgICBtb3ZkcWEgIHhtbTUseG1tNiAgICAgICAgICAgICAgIDsgeG1tNT1DYkgKKyAgICAgICAgbW92ZHFhICB4bW0yLHhtbTQgICAgICAgICAgICAgICA7IHhtbTI9Q2JMCisgICAgICAgIHBhZGR3ICAgeG1tNix4bW02ICAgICAgICAgICAgICAgOyB4bW02PTIqQ2JICisgICAgICAgIHBhZGR3ICAgeG1tNCx4bW00ICAgICAgICAgICAgICAgOyB4bW00PTIqQ2JMCisgICAgICAgIG1vdmRxYSAgeG1tMSx4bW03ICAgICAgICAgICAgICAgOyB4bW0xPUNySAorICAgICAgICBtb3ZkcWEgIHhtbTMseG1tMCAgICAgICAgICAgICAgIDsgeG1tMz1DckwKKyAgICAgICAgcGFkZHcgICB4bW03LHhtbTcgICAgICAgICAgICAgICA7IHhtbTc9MipDckgKKyAgICAgICAgcGFkZHcgICB4bW0wLHhtbTAgICAgICAgICAgICAgICA7IHhtbTA9MipDckwKIAotCXBtdWxodwl4bW02LFtyZWwgUFdfTUYwMjI4XQk7IHhtbTY9KDIqQ2JIICogLUZJWCgwLjIyODAwKSkKLQlwbXVsaHcJeG1tNCxbcmVsIFBXX01GMDIyOF0JOyB4bW00PSgyKkNiTCAqIC1GSVgoMC4yMjgwMCkpCi0JcG11bGh3CXhtbTcsW3JlbCBQV19GMDQwMl0JOyB4bW03PSgyKkNySCAqIEZJWCgwLjQwMjAwKSkKLQlwbXVsaHcJeG1tMCxbcmVsIFBXX0YwNDAyXQk7IHhtbTA9KDIqQ3JMICogRklYKDAuNDAyMDApKQorICAgICAgICBwbXVsaHcgIHhtbTYsW3JlbCBQV19NRjAyMjhdICAgIDsgeG1tNj0oMipDYkggKiAtRklYKDAuMjI4MDApKQorICAgICAgICBwbXVsaHcgIHhtbTQsW3JlbCBQV19NRjAyMjhdICAgIDsgeG1tND0oMipDYkwgKiAtRklYKDAuMjI4MDApKQorICAgICAgICBwbXVsaHcgIHhtbTcsW3JlbCBQV19GMDQwMl0gICAgIDsgeG1tNz0oMipDckggKiBGSVgoMC40MDIwMCkpCisgICAgICAgIHBtdWxodyAgeG1tMCxbcmVsIFBXX0YwNDAyXSAgICAgOyB4bW0wPSgyKkNyTCAqIEZJWCgwLjQwMjAwKSkKIAotCXBhZGR3CXhtbTYsW3JlbCBQV19PTkVdCi0JcGFkZHcJeG1tNCxbcmVsIFBXX09ORV0KLQlwc3Jhdwl4bW02LDEJCQk7IHhtbTY9KENiSCAqIC1GSVgoMC4yMjgwMCkpCi0JcHNyYXcJeG1tNCwxCQkJOyB4bW00PShDYkwgKiAtRklYKDAuMjI4MDApKQotCXBhZGR3CXhtbTcsW3JlbCBQV19PTkVdCi0JcGFkZHcJeG1tMCxbcmVsIFBXX09ORV0KLQlwc3Jhdwl4bW03LDEJCQk7IHhtbTc9KENySCAqIEZJWCgwLjQwMjAwKSkKLQlwc3Jhdwl4bW0wLDEJCQk7IHhtbTA9KENyTCAqIEZJWCgwLjQwMjAwKSkKKyAgICAgICAgcGFkZHcgICB4bW02LFtyZWwgUFdfT05FXQorICAgICAgICBwYWRkdyAgIHhtbTQsW3JlbCBQV19PTkVdCisgICAgICAgIHBzcmF3ICAgeG1tNiwxICAgICAgICAgICAgICAgICAgOyB4bW02PShDYkggKiAtRklYKDAuMjI4MDApKQorICAgICAgICBwc3JhdyAgIHhtbTQsMSAgICAgICAgICAgICAgICAgIDsgeG1tND0oQ2JMICogLUZJWCgwLjIyODAwKSkKKyAgICAgICAgcGFkZHcgICB4bW03LFtyZWwgUFdfT05FXQorICAgICAgICBwYWRkdyAgIHhtbTAsW3JlbCBQV19PTkVdCisgICAgICAgIHBzcmF3ICAgeG1tNywxICAgICAgICAgICAgICAgICAgOyB4bW03PShDckggKiBGSVgoMC40MDIwMCkpCisgICAgICAgIHBzcmF3ICAgeG1tMCwxICAgICAgICAgICAgICAgICAgOyB4bW0wPShDckwgKiBGSVgoMC40MDIwMCkpCiAKLQlwYWRkdwl4bW02LHhtbTUKLQlwYWRkdwl4bW00LHhtbTIKLQlwYWRkdwl4bW02LHhtbTUJCTsgeG1tNj0oQ2JIICogRklYKDEuNzcyMDApKT0oQi1ZKUgKLQlwYWRkdwl4bW00LHhtbTIJCTsgeG1tND0oQ2JMICogRklYKDEuNzcyMDApKT0oQi1ZKUwKLQlwYWRkdwl4bW03LHhtbTEJCTsgeG1tNz0oQ3JIICogRklYKDEuNDAyMDApKT0oUi1ZKUgKLQlwYWRkdwl4bW0wLHhtbTMJCTsgeG1tMD0oQ3JMICogRklYKDEuNDAyMDApKT0oUi1ZKUwKKyAgICAgICAgcGFkZHcgICB4bW02LHhtbTUKKyAgICAgICAgcGFkZHcgICB4bW00LHhtbTIKKyAgICAgICAgcGFkZHcgICB4bW02LHhtbTUgICAgICAgICAgICAgICA7IHhtbTY9KENiSCAqIEZJWCgxLjc3MjAwKSk9KEItWSlICisgICAgICAgIHBhZGR3ICAgeG1tNCx4bW0yICAgICAgICAgICAgICAgOyB4bW00PShDYkwgKiBGSVgoMS43NzIwMCkpPShCLVkpTAorICAgICAgICBwYWRkdyAgIHhtbTcseG1tMSAgICAgICAgICAgICAgIDsgeG1tNz0oQ3JIICogRklYKDEuNDAyMDApKT0oUi1ZKUgKKyAgICAgICAgcGFkZHcgICB4bW0wLHhtbTMgICAgICAgICAgICAgICA7IHhtbTA9KENyTCAqIEZJWCgxLjQwMjAwKSk9KFItWSlMCiAKLQltb3ZkcWEJWE1NV09SRCBbd2soMCldLCB4bW02CTsgd2soMCk9KEItWSlICi0JbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tNwk7IHdrKDEpPShSLVkpSAorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDApXSwgeG1tNiAgIDsgd2soMCk9KEItWSlICisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMSldLCB4bW03ICAgOyB3aygxKT0oUi1ZKUgKIAotCW1vdmRxYSAgICB4bW02LHhtbTUKLQltb3ZkcWEgICAgeG1tNyx4bW0yCi0JcHVucGNrbHdkIHhtbTUseG1tMQotCXB1bnBja2h3ZCB4bW02LHhtbTEKLQlwbWFkZHdkICAgeG1tNSxbcmVsIFBXX01GMDM0NF9GMDI4NV0KLQlwbWFkZHdkICAgeG1tNixbcmVsIFBXX01GMDM0NF9GMDI4NV0KLQlwdW5wY2tsd2QgeG1tMix4bW0zCi0JcHVucGNraHdkIHhtbTcseG1tMwotCXBtYWRkd2QgICB4bW0yLFtyZWwgUFdfTUYwMzQ0X0YwMjg1XQotCXBtYWRkd2QgICB4bW03LFtyZWwgUFdfTUYwMzQ0X0YwMjg1XQorICAgICAgICBtb3ZkcWEgICAgeG1tNix4bW01CisgICAgICAgIG1vdmRxYSAgICB4bW03LHhtbTIKKyAgICAgICAgcHVucGNrbHdkIHhtbTUseG1tMQorICAgICAgICBwdW5wY2tod2QgeG1tNix4bW0xCisgICAgICAgIHBtYWRkd2QgICB4bW01LFtyZWwgUFdfTUYwMzQ0X0YwMjg1XQorICAgICAgICBwbWFkZHdkICAgeG1tNixbcmVsIFBXX01GMDM0NF9GMDI4NV0KKyAgICAgICAgcHVucGNrbHdkIHhtbTIseG1tMworICAgICAgICBwdW5wY2tod2QgeG1tNyx4bW0zCisgICAgICAgIHBtYWRkd2QgICB4bW0yLFtyZWwgUFdfTUYwMzQ0X0YwMjg1XQorICAgICAgICBwbWFkZHdkICAgeG1tNyxbcmVsIFBXX01GMDM0NF9GMDI4NV0KIAotCXBhZGRkICAgICB4bW01LFtyZWwgUERfT05FSEFMRl0KLQlwYWRkZCAgICAgeG1tNixbcmVsIFBEX09ORUhBTEZdCi0JcHNyYWQgICAgIHhtbTUsU0NBTEVCSVRTCi0JcHNyYWQgICAgIHhtbTYsU0NBTEVCSVRTCi0JcGFkZGQgICAgIHhtbTIsW3JlbCBQRF9PTkVIQUxGXQotCXBhZGRkICAgICB4bW03LFtyZWwgUERfT05FSEFMRl0KLQlwc3JhZCAgICAgeG1tMixTQ0FMRUJJVFMKLQlwc3JhZCAgICAgeG1tNyxTQ0FMRUJJVFMKKyAgICAgICAgcGFkZGQgICAgIHhtbTUsW3JlbCBQRF9PTkVIQUxGXQorICAgICAgICBwYWRkZCAgICAgeG1tNixbcmVsIFBEX09ORUhBTEZdCisgICAgICAgIHBzcmFkICAgICB4bW01LFNDQUxFQklUUworICAgICAgICBwc3JhZCAgICAgeG1tNixTQ0FMRUJJVFMKKyAgICAgICAgcGFkZGQgICAgIHhtbTIsW3JlbCBQRF9PTkVIQUxGXQorICAgICAgICBwYWRkZCAgICAgeG1tNyxbcmVsIFBEX09ORUhBTEZdCisgICAgICAgIHBzcmFkICAgICB4bW0yLFNDQUxFQklUUworICAgICAgICBwc3JhZCAgICAgeG1tNyxTQ0FMRUJJVFMKIAotCXBhY2tzc2R3ICB4bW01LHhtbTYJOyB4bW01PUNiSCotRklYKDAuMzQ0KStDckgqRklYKDAuMjg1KQotCXBhY2tzc2R3ICB4bW0yLHhtbTcJOyB4bW0yPUNiTCotRklYKDAuMzQ0KStDckwqRklYKDAuMjg1KQotCXBzdWJ3ICAgICB4bW01LHhtbTEJOyB4bW01PUNiSCotRklYKDAuMzQ0KStDckgqLUZJWCgwLjcxNCk9KEctWSlICi0JcHN1YncgICAgIHhtbTIseG1tMwk7IHhtbTI9Q2JMKi1GSVgoMC4zNDQpK0NyTCotRklYKDAuNzE0KT0oRy1ZKUwKKyAgICAgICAgcGFja3NzZHcgIHhtbTUseG1tNiAgICAgOyB4bW01PUNiSCotRklYKDAuMzQ0KStDckgqRklYKDAuMjg1KQorICAgICAgICBwYWNrc3NkdyAgeG1tMix4bW03ICAgICA7IHhtbTI9Q2JMKi1GSVgoMC4zNDQpK0NyTCpGSVgoMC4yODUpCisgICAgICAgIHBzdWJ3ICAgICB4bW01LHhtbTEgICAgIDsgeG1tNT1DYkgqLUZJWCgwLjM0NCkrQ3JIKi1GSVgoMC43MTQpPShHLVkpSAorICAgICAgICBwc3VidyAgICAgeG1tMix4bW0zICAgICA7IHhtbTI9Q2JMKi1GSVgoMC4zNDQpK0NyTCotRklYKDAuNzE0KT0oRy1ZKUwKIAotCW1vdmRxYQlYTU1XT1JEIFt3aygyKV0sIHhtbTUJOyB3aygyKT0oRy1ZKUgKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygyKV0sIHhtbTUgICA7IHdrKDIpPShHLVkpSAogCi0JbW92CWFsLDIJCQk7IFljdHIKLQlqbXAJc2hvcnQgLllsb29wXzFzdAorICAgICAgICBtb3YgICAgIGFsLDIgICAgICAgICAgICAgICAgICAgIDsgWWN0cgorICAgICAgICBqbXAgICAgIHNob3J0IC5ZbG9vcF8xc3QKIAogLllsb29wXzJuZDoKLQltb3ZkcWEJeG1tMCwgWE1NV09SRCBbd2soMSldCTsgeG1tMD0oUi1ZKUgKLQltb3ZkcWEJeG1tMiwgWE1NV09SRCBbd2soMildCTsgeG1tMj0oRy1ZKUgKLQltb3ZkcWEJeG1tNCwgWE1NV09SRCBbd2soMCldCTsgeG1tND0oQi1ZKUgKKyAgICAgICAgbW92ZHFhICB4bW0wLCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTA9KFItWSlICisgICAgICAgIG1vdmRxYSAgeG1tMiwgWE1NV09SRCBbd2soMildICAgOyB4bW0yPShHLVkpSAorICAgICAgICBtb3ZkcWEgIHhtbTQsIFhNTVdPUkQgW3drKDApXSAgIDsgeG1tND0oQi1ZKUgKIAogLllsb29wXzFzdDoKLQltb3ZkcWEJeG1tNywgWE1NV09SRCBbcnNpXQk7IHhtbTc9WSgwMTIzNDU2Nzg5QUJDREVGKQorICAgICAgICBtb3ZkcWEgIHhtbTcsIFhNTVdPUkQgW3JzaV0gICAgIDsgeG1tNz1ZKDAxMjM0NTY3ODlBQkNERUYpCiAKLQlwY21wZXF3CXhtbTYseG1tNgotCXBzcmx3CXhtbTYsQllURV9CSVQJCTsgeG1tNj17MHhGRiAweDAwIDB4RkYgMHgwMCAuLn0KLQlwYW5kCXhtbTYseG1tNwkJOyB4bW02PVkoMDI0NjhBQ0UpPVlFCi0JcHNybHcJeG1tNyxCWVRFX0JJVAkJOyB4bW03PVkoMTM1NzlCREYpPVlPCisgICAgICAgIHBjbXBlcXcgeG1tNix4bW02CisgICAgICAgIHBzcmx3ICAgeG1tNixCWVRFX0JJVCAgICAgICAgICAgOyB4bW02PXsweEZGIDB4MDAgMHhGRiAweDAwIC4ufQorICAgICAgICBwYW5kICAgIHhtbTYseG1tNyAgICAgICAgICAgICAgIDsgeG1tNj1ZKDAyNDY4QUNFKT1ZRQorICAgICAgICBwc3JsdyAgIHhtbTcsQllURV9CSVQgICAgICAgICAgIDsgeG1tNz1ZKDEzNTc5QkRGKT1ZTwogCi0JbW92ZHFhCXhtbTEseG1tMAkJOyB4bW0xPXhtbTA9KFItWSkoTC9IKQotCW1vdmRxYQl4bW0zLHhtbTIJCTsgeG1tMz14bW0yPShHLVkpKEwvSCkKLQltb3ZkcWEJeG1tNSx4bW00CQk7IHhtbTU9eG1tND0oQi1ZKShML0gpCisgICAgICAgIG1vdmRxYSAgeG1tMSx4bW0wICAgICAgICAgICAgICAgOyB4bW0xPXhtbTA9KFItWSkoTC9IKQorICAgICAgICBtb3ZkcWEgIHhtbTMseG1tMiAgICAgICAgICAgICAgIDsgeG1tMz14bW0yPShHLVkpKEwvSCkKKyAgICAgICAgbW92ZHFhICB4bW01LHhtbTQgICAgICAgICAgICAgICA7IHhtbTU9eG1tND0oQi1ZKShML0gpCiAKLQlwYWRkdyAgICAgeG1tMCx4bW02CQk7IHhtbTA9KChSLVkpK1lFKT1SRT1SKDAyNDY4QUNFKQotCXBhZGR3ICAgICB4bW0xLHhtbTcJCTsgeG1tMT0oKFItWSkrWU8pPVJPPVIoMTM1NzlCREYpCi0JcGFja3Vzd2IgIHhtbTAseG1tMAkJOyB4bW0wPVIoMDI0NjhBQ0UqKioqKioqKikKLQlwYWNrdXN3YiAgeG1tMSx4bW0xCQk7IHhtbTE9UigxMzU3OUJERioqKioqKioqKQorICAgICAgICBwYWRkdyAgICAgeG1tMCx4bW02ICAgICAgICAgICAgIDsgeG1tMD0oKFItWSkrWUUpPVJFPVIoMDI0NjhBQ0UpCisgICAgICAgIHBhZGR3ICAgICB4bW0xLHhtbTcgICAgICAgICAgICAgOyB4bW0xPSgoUi1ZKStZTyk9Uk89UigxMzU3OUJERikKKyAgICAgICAgcGFja3Vzd2IgIHhtbTAseG1tMCAgICAgICAgICAgICA7IHhtbTA9UigwMjQ2OEFDRSoqKioqKioqKQorICAgICAgICBwYWNrdXN3YiAgeG1tMSx4bW0xICAgICAgICAgICAgIDsgeG1tMT1SKDEzNTc5QkRGKioqKioqKiopCiAKLQlwYWRkdyAgICAgeG1tMix4bW02CQk7IHhtbTI9KChHLVkpK1lFKT1HRT1HKDAyNDY4QUNFKQotCXBhZGR3ICAgICB4bW0zLHhtbTcJCTsgeG1tMz0oKEctWSkrWU8pPUdPPUcoMTM1NzlCREYpCi0JcGFja3Vzd2IgIHhtbTIseG1tMgkJOyB4bW0yPUcoMDI0NjhBQ0UqKioqKioqKikKLQlwYWNrdXN3YiAgeG1tMyx4bW0zCQk7IHhtbTM9RygxMzU3OUJERioqKioqKioqKQorICAgICAgICBwYWRkdyAgICAgeG1tMix4bW02ICAgICAgICAgICAgIDsgeG1tMj0oKEctWSkrWUUpPUdFPUcoMDI0NjhBQ0UpCisgICAgICAgIHBhZGR3ICAgICB4bW0zLHhtbTcgICAgICAgICAgICAgOyB4bW0zPSgoRy1ZKStZTyk9R089RygxMzU3OUJERikKKyAgICAgICAgcGFja3Vzd2IgIHhtbTIseG1tMiAgICAgICAgICAgICA7IHhtbTI9RygwMjQ2OEFDRSoqKioqKioqKQorICAgICAgICBwYWNrdXN3YiAgeG1tMyx4bW0zICAgICAgICAgICAgIDsgeG1tMz1HKDEzNTc5QkRGKioqKioqKiopCiAKLQlwYWRkdyAgICAgeG1tNCx4bW02CQk7IHhtbTQ9KChCLVkpK1lFKT1CRT1CKDAyNDY4QUNFKQotCXBhZGR3ICAgICB4bW01LHhtbTcJCTsgeG1tNT0oKEItWSkrWU8pPUJPPUIoMTM1NzlCREYpCi0JcGFja3Vzd2IgIHhtbTQseG1tNAkJOyB4bW00PUIoMDI0NjhBQ0UqKioqKioqKikKLQlwYWNrdXN3YiAgeG1tNSx4bW01CQk7IHhtbTU9QigxMzU3OUJERioqKioqKioqKQorICAgICAgICBwYWRkdyAgICAgeG1tNCx4bW02ICAgICAgICAgICAgIDsgeG1tND0oKEItWSkrWUUpPUJFPUIoMDI0NjhBQ0UpCisgICAgICAgIHBhZGR3ICAgICB4bW01LHhtbTcgICAgICAgICAgICAgOyB4bW01PSgoQi1ZKStZTyk9Qk89QigxMzU3OUJERikKKyAgICAgICAgcGFja3Vzd2IgIHhtbTQseG1tNCAgICAgICAgICAgICA7IHhtbTQ9QigwMjQ2OEFDRSoqKioqKioqKQorICAgICAgICBwYWNrdXN3YiAgeG1tNSx4bW01ICAgICAgICAgICAgIDsgeG1tNT1CKDEzNTc5QkRGKioqKioqKiopCiAKICVpZiBSR0JfUElYRUxTSVpFID09IDMgOyAtLS0tLS0tLS0tLS0tLS0KIAotCTsgeG1tQT0oMDAgMDIgMDQgMDYgMDggMEEgMEMgMEUgKiopLCB4bW1CPSgwMSAwMyAwNSAwNyAwOSAwQiAwRCAwRiAqKikKLQk7IHhtbUM9KDEwIDEyIDE0IDE2IDE4IDFBIDFDIDFFICoqKSwgeG1tRD0oMTEgMTMgMTUgMTcgMTkgMUIgMUQgMUYgKiopCi0JOyB4bW1FPSgyMCAyMiAyNCAyNiAyOCAyQSAyQyAyRSAqKiksIHhtbUY9KDIxIDIzIDI1IDI3IDI5IDJCIDJEIDJGICoqKQotCTsgeG1tRz0oKiogKiogKiogKiogKiogKiogKiogKiogKiopLCB4bW1IPSgqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKikKKyAgICAgICAgOyB4bW1BPSgwMCAwMiAwNCAwNiAwOCAwQSAwQyAwRSAqKiksIHhtbUI9KDAxIDAzIDA1IDA3IDA5IDBCIDBEIDBGICoqKQorICAgICAgICA7IHhtbUM9KDEwIDEyIDE0IDE2IDE4IDFBIDFDIDFFICoqKSwgeG1tRD0oMTEgMTMgMTUgMTcgMTkgMUIgMUQgMUYgKiopCisgICAgICAgIDsgeG1tRT0oMjAgMjIgMjQgMjYgMjggMkEgMkMgMkUgKiopLCB4bW1GPSgyMSAyMyAyNSAyNyAyOSAyQiAyRCAyRiAqKikKKyAgICAgICAgOyB4bW1HPSgqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiksIHhtbUg9KCoqICoqICoqICoqICoqICoqICoqICoqICoqKQogCi0JcHVucGNrbGJ3IHhtbUEseG1tQwk7IHhtbUE9KDAwIDEwIDAyIDEyIDA0IDE0IDA2IDE2IDA4IDE4IDBBIDFBIDBDIDFDIDBFIDFFKQotCXB1bnBja2xidyB4bW1FLHhtbUIJOyB4bW1FPSgyMCAwMSAyMiAwMyAyNCAwNSAyNiAwNyAyOCAwOSAyQSAwQiAyQyAwRCAyRSAwRikKLQlwdW5wY2tsYncgeG1tRCx4bW1GCTsgeG1tRD0oMTEgMjEgMTMgMjMgMTUgMjUgMTcgMjcgMTkgMjkgMUIgMkIgMUQgMkQgMUYgMkYpCisgICAgICAgIHB1bnBja2xidyB4bW1BLHhtbUMgICAgIDsgeG1tQT0oMDAgMTAgMDIgMTIgMDQgMTQgMDYgMTYgMDggMTggMEEgMUEgMEMgMUMgMEUgMUUpCisgICAgICAgIHB1bnBja2xidyB4bW1FLHhtbUIgICAgIDsgeG1tRT0oMjAgMDEgMjIgMDMgMjQgMDUgMjYgMDcgMjggMDkgMkEgMEIgMkMgMEQgMkUgMEYpCisgICAgICAgIHB1bnBja2xidyB4bW1ELHhtbUYgICAgIDsgeG1tRD0oMTEgMjEgMTMgMjMgMTUgMjUgMTcgMjcgMTkgMjkgMUIgMkIgMUQgMkQgMUYgMkYpCiAKLQltb3ZkcWEgICAgeG1tRyx4bW1BCi0JbW92ZHFhICAgIHhtbUgseG1tQQotCXB1bnBja2x3ZCB4bW1BLHhtbUUJOyB4bW1BPSgwMCAxMCAyMCAwMSAwMiAxMiAyMiAwMyAwNCAxNCAyNCAwNSAwNiAxNiAyNiAwNykKLQlwdW5wY2tod2QgeG1tRyx4bW1FCTsgeG1tRz0oMDggMTggMjggMDkgMEEgMUEgMkEgMEIgMEMgMUMgMkMgMEQgMEUgMUUgMkUgMEYpCisgICAgICAgIG1vdmRxYSAgICB4bW1HLHhtbUEKKyAgICAgICAgbW92ZHFhICAgIHhtbUgseG1tQQorICAgICAgICBwdW5wY2tsd2QgeG1tQSx4bW1FICAgICA7IHhtbUE9KDAwIDEwIDIwIDAxIDAyIDEyIDIyIDAzIDA0IDE0IDI0IDA1IDA2IDE2IDI2IDA3KQorICAgICAgICBwdW5wY2tod2QgeG1tRyx4bW1FICAgICA7IHhtbUc9KDA4IDE4IDI4IDA5IDBBIDFBIDJBIDBCIDBDIDFDIDJDIDBEIDBFIDFFIDJFIDBGKQogCi0JcHNybGRxICAgIHhtbUgsMgk7IHhtbUg9KDAyIDEyIDA0IDE0IDA2IDE2IDA4IDE4IDBBIDFBIDBDIDFDIDBFIDFFIC0tIC0tKQotCXBzcmxkcSAgICB4bW1FLDIJOyB4bW1FPSgyMiAwMyAyNCAwNSAyNiAwNyAyOCAwOSAyQSAwQiAyQyAwRCAyRSAwRiAtLSAtLSkKKyAgICAgICAgcHNybGRxICAgIHhtbUgsMiAgICAgICAgOyB4bW1IPSgwMiAxMiAwNCAxNCAwNiAxNiAwOCAxOCAwQSAxQSAwQyAxQyAwRSAxRSAtLSAtLSkKKyAgICAgICAgcHNybGRxICAgIHhtbUUsMiAgICAgICAgOyB4bW1FPSgyMiAwMyAyNCAwNSAyNiAwNyAyOCAwOSAyQSAwQiAyQyAwRCAyRSAwRiAtLSAtLSkKIAotCW1vdmRxYSAgICB4bW1DLHhtbUQKLQltb3ZkcWEgICAgeG1tQix4bW1ECi0JcHVucGNrbHdkIHhtbUQseG1tSAk7IHhtbUQ9KDExIDIxIDAyIDEyIDEzIDIzIDA0IDE0IDE1IDI1IDA2IDE2IDE3IDI3IDA4IDE4KQotCXB1bnBja2h3ZCB4bW1DLHhtbUgJOyB4bW1DPSgxOSAyOSAwQSAxQSAxQiAyQiAwQyAxQyAxRCAyRCAwRSAxRSAxRiAyRiAtLSAtLSkKKyAgICAgICAgbW92ZHFhICAgIHhtbUMseG1tRAorICAgICAgICBtb3ZkcWEgICAgeG1tQix4bW1ECisgICAgICAgIHB1bnBja2x3ZCB4bW1ELHhtbUggICAgIDsgeG1tRD0oMTEgMjEgMDIgMTIgMTMgMjMgMDQgMTQgMTUgMjUgMDYgMTYgMTcgMjcgMDggMTgpCisgICAgICAgIHB1bnBja2h3ZCB4bW1DLHhtbUggICAgIDsgeG1tQz0oMTkgMjkgMEEgMUEgMUIgMkIgMEMgMUMgMUQgMkQgMEUgMUUgMUYgMkYgLS0gLS0pCiAKLQlwc3JsZHEgICAgeG1tQiwyCTsgeG1tQj0oMTMgMjMgMTUgMjUgMTcgMjcgMTkgMjkgMUIgMkIgMUQgMkQgMUYgMkYgLS0gLS0pCisgICAgICAgIHBzcmxkcSAgICB4bW1CLDIgICAgICAgIDsgeG1tQj0oMTMgMjMgMTUgMjUgMTcgMjcgMTkgMjkgMUIgMkIgMUQgMkQgMUYgMkYgLS0gLS0pCiAKLQltb3ZkcWEgICAgeG1tRix4bW1FCi0JcHVucGNrbHdkIHhtbUUseG1tQgk7IHhtbUU9KDIyIDAzIDEzIDIzIDI0IDA1IDE1IDI1IDI2IDA3IDE3IDI3IDI4IDA5IDE5IDI5KQotCXB1bnBja2h3ZCB4bW1GLHhtbUIJOyB4bW1GPSgyQSAwQiAxQiAyQiAyQyAwRCAxRCAyRCAyRSAwRiAxRiAyRiAtLSAtLSAtLSAtLSkKKyAgICAgICAgbW92ZHFhICAgIHhtbUYseG1tRQorICAgICAgICBwdW5wY2tsd2QgeG1tRSx4bW1CICAgICA7IHhtbUU9KDIyIDAzIDEzIDIzIDI0IDA1IDE1IDI1IDI2IDA3IDE3IDI3IDI4IDA5IDE5IDI5KQorICAgICAgICBwdW5wY2tod2QgeG1tRix4bW1CICAgICA7IHhtbUY9KDJBIDBCIDFCIDJCIDJDIDBEIDFEIDJEIDJFIDBGIDFGIDJGIC0tIC0tIC0tIC0tKQogCi0JcHNodWZkICAgIHhtbUgseG1tQSwweDRFOyB4bW1IPSgwNCAxNCAyNCAwNSAwNiAxNiAyNiAwNyAwMCAxMCAyMCAwMSAwMiAxMiAyMiAwMykKLQltb3ZkcWEgICAgeG1tQix4bW1FCi0JcHVucGNrbGRxIHhtbUEseG1tRAk7IHhtbUE9KDAwIDEwIDIwIDAxIDExIDIxIDAyIDEyIDAyIDEyIDIyIDAzIDEzIDIzIDA0IDE0KQotCXB1bnBja2xkcSB4bW1FLHhtbUgJOyB4bW1FPSgyMiAwMyAxMyAyMyAwNCAxNCAyNCAwNSAyNCAwNSAxNSAyNSAwNiAxNiAyNiAwNykKLQlwdW5wY2toZHEgeG1tRCx4bW1CCTsgeG1tRD0oMTUgMjUgMDYgMTYgMjYgMDcgMTcgMjcgMTcgMjcgMDggMTggMjggMDkgMTkgMjkpCisgICAgICAgIHBzaHVmZCAgICB4bW1ILHhtbUEsMHg0RTsgeG1tSD0oMDQgMTQgMjQgMDUgMDYgMTYgMjYgMDcgMDAgMTAgMjAgMDEgMDIgMTIgMjIgMDMpCisgICAgICAgIG1vdmRxYSAgICB4bW1CLHhtbUUKKyAgICAgICAgcHVucGNrbGRxIHhtbUEseG1tRCAgICAgOyB4bW1BPSgwMCAxMCAyMCAwMSAxMSAyMSAwMiAxMiAwMiAxMiAyMiAwMyAxMyAyMyAwNCAxNCkKKyAgICAgICAgcHVucGNrbGRxIHhtbUUseG1tSCAgICAgOyB4bW1FPSgyMiAwMyAxMyAyMyAwNCAxNCAyNCAwNSAyNCAwNSAxNSAyNSAwNiAxNiAyNiAwNykKKyAgICAgICAgcHVucGNraGRxIHhtbUQseG1tQiAgICAgOyB4bW1EPSgxNSAyNSAwNiAxNiAyNiAwNyAxNyAyNyAxNyAyNyAwOCAxOCAyOCAwOSAxOSAyOSkKIAotCXBzaHVmZCAgICB4bW1ILHhtbUcsMHg0RTsgeG1tSD0oMEMgMUMgMkMgMEQgMEUgMUUgMkUgMEYgMDggMTggMjggMDkgMEEgMUEgMkEgMEIpCi0JbW92ZHFhICAgIHhtbUIseG1tRgotCXB1bnBja2xkcSB4bW1HLHhtbUMJOyB4bW1HPSgwOCAxOCAyOCAwOSAxOSAyOSAwQSAxQSAwQSAxQSAyQSAwQiAxQiAyQiAwQyAxQykKLQlwdW5wY2tsZHEgeG1tRix4bW1ICTsgeG1tRj0oMkEgMEIgMUIgMkIgMEMgMUMgMkMgMEQgMkMgMEQgMUQgMkQgMEUgMUUgMkUgMEYpCi0JcHVucGNraGRxIHhtbUMseG1tQgk7IHhtbUM9KDFEIDJEIDBFIDFFIDJFIDBGIDFGIDJGIDFGIDJGIC0tIC0tIC0tIC0tIC0tIC0tKQorICAgICAgICBwc2h1ZmQgICAgeG1tSCx4bW1HLDB4NEU7IHhtbUg9KDBDIDFDIDJDIDBEIDBFIDFFIDJFIDBGIDA4IDE4IDI4IDA5IDBBIDFBIDJBIDBCKQorICAgICAgICBtb3ZkcWEgICAgeG1tQix4bW1GCisgICAgICAgIHB1bnBja2xkcSB4bW1HLHhtbUMgICAgIDsgeG1tRz0oMDggMTggMjggMDkgMTkgMjkgMEEgMUEgMEEgMUEgMkEgMEIgMUIgMkIgMEMgMUMpCisgICAgICAgIHB1bnBja2xkcSB4bW1GLHhtbUggICAgIDsgeG1tRj0oMkEgMEIgMUIgMkIgMEMgMUMgMkMgMEQgMkMgMEQgMUQgMkQgMEUgMUUgMkUgMEYpCisgICAgICAgIHB1bnBja2hkcSB4bW1DLHhtbUIgICAgIDsgeG1tQz0oMUQgMkQgMEUgMUUgMkUgMEYgMUYgMkYgMUYgMkYgLS0gLS0gLS0gLS0gLS0gLS0pCiAKLQlwdW5wY2tscWRxIHhtbUEseG1tRQk7IHhtbUE9KDAwIDEwIDIwIDAxIDExIDIxIDAyIDEyIDIyIDAzIDEzIDIzIDA0IDE0IDI0IDA1KQotCXB1bnBja2xxZHEgeG1tRCx4bW1HCTsgeG1tRD0oMTUgMjUgMDYgMTYgMjYgMDcgMTcgMjcgMDggMTggMjggMDkgMTkgMjkgMEEgMUEpCi0JcHVucGNrbHFkcSB4bW1GLHhtbUMJOyB4bW1GPSgyQSAwQiAxQiAyQiAwQyAxQyAyQyAwRCAxRCAyRCAwRSAxRSAyRSAwRiAxRiAyRikKKyAgICAgICAgcHVucGNrbHFkcSB4bW1BLHhtbUUgICAgOyB4bW1BPSgwMCAxMCAyMCAwMSAxMSAyMSAwMiAxMiAyMiAwMyAxMyAyMyAwNCAxNCAyNCAwNSkKKyAgICAgICAgcHVucGNrbHFkcSB4bW1ELHhtbUcgICAgOyB4bW1EPSgxNSAyNSAwNiAxNiAyNiAwNyAxNyAyNyAwOCAxOCAyOCAwOSAxOSAyOSAwQSAxQSkKKyAgICAgICAgcHVucGNrbHFkcSB4bW1GLHhtbUMgICAgOyB4bW1GPSgyQSAwQiAxQiAyQiAwQyAxQyAyQyAwRCAxRCAyRCAwRSAxRSAyRSAwRiAxRiAyRikKIAotCWNtcAlyY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKLQlqYglzaG9ydCAuY29sdW1uX3N0MzIKKyAgICAgICAgY21wICAgICByY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKyAgICAgICAgamIgICAgICBzaG9ydCAuY29sdW1uX3N0MzIKIAotCXRlc3QJcmRpLCBTSVpFT0ZfWE1NV09SRC0xCi0Jam56CXNob3J0IC5vdXQxCi0JOyAtLShhbGlnbmVkKS0tLS0tLS0tLS0tLS0tLS0tLS0KLQltb3ZudGRxCVhNTVdPUkQgW3JkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tQQotCW1vdm50ZHEJWE1NV09SRCBbcmRpKzEqU0laRU9GX1hNTVdPUkRdLCB4bW1ECi0JbW92bnRkcQlYTU1XT1JEIFtyZGkrMipTSVpFT0ZfWE1NV09SRF0sIHhtbUYKLQlqbXAJc2hvcnQgLm91dDAKLS5vdXQxOgk7IC0tKHVuYWxpZ25lZCktLS0tLS0tLS0tLS0tLS0tLQotCW1vdmRxdQlYTU1XT1JEIFtyZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbUEKLQltb3ZkcXUJWE1NV09SRCBbcmRpKzEqU0laRU9GX1hNTVdPUkRdLCB4bW1ECi0JbW92ZHF1CVhNTVdPUkQgW3JkaSsyKlNJWkVPRl9YTU1XT1JEXSwgeG1tRgorICAgICAgICB0ZXN0ICAgIHJkaSwgU0laRU9GX1hNTVdPUkQtMQorICAgICAgICBqbnogICAgIHNob3J0IC5vdXQxCisgICAgICAgIDsgLS0oYWxpZ25lZCktLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIG1vdm50ZHEgWE1NV09SRCBbcmRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW1BCisgICAgICAgIG1vdm50ZHEgWE1NV09SRCBbcmRpKzEqU0laRU9GX1hNTVdPUkRdLCB4bW1ECisgICAgICAgIG1vdm50ZHEgWE1NV09SRCBbcmRpKzIqU0laRU9GX1hNTVdPUkRdLCB4bW1GCisgICAgICAgIGptcCAgICAgc2hvcnQgLm91dDAKKy5vdXQxOiAgOyAtLSh1bmFsaWduZWQpLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgbW92ZHF1ICBYTU1XT1JEIFtyZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbUEKKyAgICAgICAgbW92ZHF1ICBYTU1XT1JEIFtyZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbUQKKyAgICAgICAgbW92ZHF1ICBYTU1XT1JEIFtyZGkrMipTSVpFT0ZfWE1NV09SRF0sIHhtbUYKIC5vdXQwOgotCWFkZAlyZGksIGJ5dGUgUkdCX1BJWEVMU0laRSpTSVpFT0ZfWE1NV09SRAk7IG91dHB0cgotCXN1YglyY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKLQlqegluZWFyIC5lbmRjb2x1bW4KKyAgICAgICAgYWRkICAgICByZGksIGJ5dGUgUkdCX1BJWEVMU0laRSpTSVpFT0ZfWE1NV09SRCAgOyBvdXRwdHIKKyAgICAgICAgc3ViICAgICByY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKyAgICAgICAganogICAgICBuZWFyIC5lbmRjb2x1bW4KIAotCWFkZAlyc2ksIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBpbnB0cjAKLQlkZWMJYWwJCQk7IFljdHIKLQlqbnoJbmVhciAuWWxvb3BfMm5kCisgICAgICAgIGFkZCAgICAgcnNpLCBieXRlIFNJWkVPRl9YTU1XT1JEICAgICAgICA7IGlucHRyMAorICAgICAgICBkZWMgICAgIGFsICAgICAgICAgICAgICAgICAgICAgIDsgWWN0cgorICAgICAgICBqbnogICAgIG5lYXIgLllsb29wXzJuZAogCi0JYWRkCXJieCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IGlucHRyMQotCWFkZAlyZHgsIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBpbnB0cjIKLQlqbXAJbmVhciAuY29sdW1ubG9vcAorICAgICAgICBhZGQgICAgIHJieCwgYnl0ZSBTSVpFT0ZfWE1NV09SRCAgICAgICAgOyBpbnB0cjEKKyAgICAgICAgYWRkICAgICByZHgsIGJ5dGUgU0laRU9GX1hNTVdPUkQgICAgICAgIDsgaW5wdHIyCisgICAgICAgIGptcCAgICAgbmVhciAuY29sdW1ubG9vcAogCiAuY29sdW1uX3N0MzI6Ci0JbGVhCXJjeCwgW3JjeCtyY3gqMl0JCTsgaW11bCBlY3gsIFJHQl9QSVhFTFNJWkUKLQljbXAJcmN4LCBieXRlIDIqU0laRU9GX1hNTVdPUkQKLQlqYglzaG9ydCAuY29sdW1uX3N0MTYKLQltb3ZkcXUJWE1NV09SRCBbcmRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW1BCi0JbW92ZHF1CVhNTVdPUkQgW3JkaSsxKlNJWkVPRl9YTU1XT1JEXSwgeG1tRAotCWFkZAlyZGksIGJ5dGUgMipTSVpFT0ZfWE1NV09SRAk7IG91dHB0cgotCW1vdmRxYQl4bW1BLHhtbUYKLQlzdWIJcmN4LCBieXRlIDIqU0laRU9GX1hNTVdPUkQKLQlqbXAJc2hvcnQgLmNvbHVtbl9zdDE1CisgICAgICAgIGxlYSAgICAgcmN4LCBbcmN4K3JjeCoyXSAgICAgICAgICAgICAgICA7IGltdWwgZWN4LCBSR0JfUElYRUxTSVpFCisgICAgICAgIGNtcCAgICAgcmN4LCBieXRlIDIqU0laRU9GX1hNTVdPUkQKKyAgICAgICAgamIgICAgICBzaG9ydCAuY29sdW1uX3N0MTYKKyAgICAgICAgbW92ZHF1ICBYTU1XT1JEIFtyZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbUEKKyAgICAgICAgbW92ZHF1ICBYTU1XT1JEIFtyZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbUQKKyAgICAgICAgYWRkICAgICByZGksIGJ5dGUgMipTSVpFT0ZfWE1NV09SRCAgICAgIDsgb3V0cHRyCisgICAgICAgIG1vdmRxYSAgeG1tQSx4bW1GCisgICAgICAgIHN1YiAgICAgcmN4LCBieXRlIDIqU0laRU9GX1hNTVdPUkQKKyAgICAgICAgam1wICAgICBzaG9ydCAuY29sdW1uX3N0MTUKIC5jb2x1bW5fc3QxNjoKLQljbXAJcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JECi0JamIJc2hvcnQgLmNvbHVtbl9zdDE1Ci0JbW92ZHF1CVhNTVdPUkQgW3JkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tQQotCWFkZAlyZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKLQltb3ZkcWEJeG1tQSx4bW1ECi0Jc3ViCXJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorICAgICAgICBjbXAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorICAgICAgICBqYiAgICAgIHNob3J0IC5jb2x1bW5fc3QxNQorICAgICAgICBtb3ZkcXUgIFhNTVdPUkQgW3JkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tQQorICAgICAgICBhZGQgICAgIHJkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRCAgICAgICAgOyBvdXRwdHIKKyAgICAgICAgbW92ZHFhICB4bW1BLHhtbUQKKyAgICAgICAgc3ViICAgICByY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKIC5jb2x1bW5fc3QxNToKLQk7IFN0b3JlIHRoZSBsb3dlciA4IGJ5dGVzIG9mIHhtbUEgdG8gdGhlIG91dHB1dCB3aGVuIGl0IGhhcyBlbm91Z2gKLQk7IHNwYWNlLgotCWNtcAlyY3gsIGJ5dGUgU0laRU9GX01NV09SRAotCWpiCXNob3J0IC5jb2x1bW5fc3Q3Ci0JbW92cQlYTU1fTU1XT1JEIFtyZGldLCB4bW1BCi0JYWRkCXJkaSwgYnl0ZSBTSVpFT0ZfTU1XT1JECi0Jc3ViCXJjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECi0JcHNybGRxCXhtbUEsIFNJWkVPRl9NTVdPUkQKKyAgICAgICAgOyBTdG9yZSB0aGUgbG93ZXIgOCBieXRlcyBvZiB4bW1BIHRvIHRoZSBvdXRwdXQgd2hlbiBpdCBoYXMgZW5vdWdoCisgICAgICAgIDsgc3BhY2UuCisgICAgICAgIGNtcCAgICAgcmN4LCBieXRlIFNJWkVPRl9NTVdPUkQKKyAgICAgICAgamIgICAgICBzaG9ydCAuY29sdW1uX3N0NworICAgICAgICBtb3ZxICAgIFhNTV9NTVdPUkQgW3JkaV0sIHhtbUEKKyAgICAgICAgYWRkICAgICByZGksIGJ5dGUgU0laRU9GX01NV09SRAorICAgICAgICBzdWIgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECisgICAgICAgIHBzcmxkcSAgeG1tQSwgU0laRU9GX01NV09SRAogLmNvbHVtbl9zdDc6Ci0JOyBTdG9yZSB0aGUgbG93ZXIgNCBieXRlcyBvZiB4bW1BIHRvIHRoZSBvdXRwdXQgd2hlbiBpdCBoYXMgZW5vdWdoCi0JOyBzcGFjZS4KLQljbXAJcmN4LCBieXRlIFNJWkVPRl9EV09SRAotCWpiCXNob3J0IC5jb2x1bW5fc3QzCi0JbW92ZAlYTU1fRFdPUkQgW3JkaV0sIHhtbUEKLQlhZGQJcmRpLCBieXRlIFNJWkVPRl9EV09SRAotCXN1YglyY3gsIGJ5dGUgU0laRU9GX0RXT1JECi0JcHNybGRxCXhtbUEsIFNJWkVPRl9EV09SRAorICAgICAgICA7IFN0b3JlIHRoZSBsb3dlciA0IGJ5dGVzIG9mIHhtbUEgdG8gdGhlIG91dHB1dCB3aGVuIGl0IGhhcyBlbm91Z2gKKyAgICAgICAgOyBzcGFjZS4KKyAgICAgICAgY21wICAgICByY3gsIGJ5dGUgU0laRU9GX0RXT1JECisgICAgICAgIGpiICAgICAgc2hvcnQgLmNvbHVtbl9zdDMKKyAgICAgICAgbW92ZCAgICBYTU1fRFdPUkQgW3JkaV0sIHhtbUEKKyAgICAgICAgYWRkICAgICByZGksIGJ5dGUgU0laRU9GX0RXT1JECisgICAgICAgIHN1YiAgICAgcmN4LCBieXRlIFNJWkVPRl9EV09SRAorICAgICAgICBwc3JsZHEgIHhtbUEsIFNJWkVPRl9EV09SRAogLmNvbHVtbl9zdDM6Ci0JOyBTdG9yZSB0aGUgbG93ZXIgMiBieXRlcyBvZiByYXggdG8gdGhlIG91dHB1dCB3aGVuIGl0IGhhcyBlbm91Z2gKLQk7IHNwYWNlLgotCW1vdmQJZWF4LCB4bW1BCi0JY21wCXJjeCwgYnl0ZSBTSVpFT0ZfV09SRAotCWpiCXNob3J0IC5jb2x1bW5fc3QxCi0JbW92CVdPUkQgW3JkaV0sIGF4Ci0JYWRkCXJkaSwgYnl0ZSBTSVpFT0ZfV09SRAotCXN1YglyY3gsIGJ5dGUgU0laRU9GX1dPUkQKLQlzaHIJcmF4LCAxNgorICAgICAgICA7IFN0b3JlIHRoZSBsb3dlciAyIGJ5dGVzIG9mIHJheCB0byB0aGUgb3V0cHV0IHdoZW4gaXQgaGFzIGVub3VnaAorICAgICAgICA7IHNwYWNlLgorICAgICAgICBtb3ZkICAgIGVheCwgeG1tQQorICAgICAgICBjbXAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfV09SRAorICAgICAgICBqYiAgICAgIHNob3J0IC5jb2x1bW5fc3QxCisgICAgICAgIG1vdiAgICAgV09SRCBbcmRpXSwgYXgKKyAgICAgICAgYWRkICAgICByZGksIGJ5dGUgU0laRU9GX1dPUkQKKyAgICAgICAgc3ViICAgICByY3gsIGJ5dGUgU0laRU9GX1dPUkQKKyAgICAgICAgc2hyICAgICByYXgsIDE2CiAuY29sdW1uX3N0MToKLQk7IFN0b3JlIHRoZSBsb3dlciAxIGJ5dGUgb2YgcmF4IHRvIHRoZSBvdXRwdXQgd2hlbiBpdCBoYXMgZW5vdWdoCi0JOyBzcGFjZS4KLQl0ZXN0CXJjeCwgcmN4Ci0JanoJc2hvcnQgLmVuZGNvbHVtbgotCW1vdglCWVRFIFtyZGldLCBhbAorICAgICAgICA7IFN0b3JlIHRoZSBsb3dlciAxIGJ5dGUgb2YgcmF4IHRvIHRoZSBvdXRwdXQgd2hlbiBpdCBoYXMgZW5vdWdoCisgICAgICAgIDsgc3BhY2UuCisgICAgICAgIHRlc3QgICAgcmN4LCByY3gKKyAgICAgICAganogICAgICBzaG9ydCAuZW5kY29sdW1uCisgICAgICAgIG1vdiAgICAgQllURSBbcmRpXSwgYWwKIAogJWVsc2UgOyBSR0JfUElYRUxTSVpFID09IDQgOyAtLS0tLS0tLS0tLQogCiAlaWZkZWYgUkdCWF9GSUxMRVJfMFhGRgotCXBjbXBlcWIgICB4bW02LHhtbTYJCTsgeG1tNj1YRT1YKDAyNDY4QUNFKioqKioqKiopCi0JcGNtcGVxYiAgIHhtbTcseG1tNwkJOyB4bW03PVhPPVgoMTM1NzlCREYqKioqKioqKikKKyAgICAgICAgcGNtcGVxYiAgIHhtbTYseG1tNiAgICAgICAgICAgICA7IHhtbTY9WEU9WCgwMjQ2OEFDRSoqKioqKioqKQorICAgICAgICBwY21wZXFiICAgeG1tNyx4bW03ICAgICAgICAgICAgIDsgeG1tNz1YTz1YKDEzNTc5QkRGKioqKioqKiopCiAlZWxzZQotCXB4b3IgICAgICB4bW02LHhtbTYJCTsgeG1tNj1YRT1YKDAyNDY4QUNFKioqKioqKiopCi0JcHhvciAgICAgIHhtbTcseG1tNwkJOyB4bW03PVhPPVgoMTM1NzlCREYqKioqKioqKikKKyAgICAgICAgcHhvciAgICAgIHhtbTYseG1tNiAgICAgICAgICAgICA7IHhtbTY9WEU9WCgwMjQ2OEFDRSoqKioqKioqKQorICAgICAgICBweG9yICAgICAgeG1tNyx4bW03ICAgICAgICAgICAgIDsgeG1tNz1YTz1YKDEzNTc5QkRGKioqKioqKiopCiAlZW5kaWYKLQk7IHhtbUE9KDAwIDAyIDA0IDA2IDA4IDBBIDBDIDBFICoqKSwgeG1tQj0oMDEgMDMgMDUgMDcgMDkgMEIgMEQgMEYgKiopCi0JOyB4bW1DPSgxMCAxMiAxNCAxNiAxOCAxQSAxQyAxRSAqKiksIHhtbUQ9KDExIDEzIDE1IDE3IDE5IDFCIDFEIDFGICoqKQotCTsgeG1tRT0oMjAgMjIgMjQgMjYgMjggMkEgMkMgMkUgKiopLCB4bW1GPSgyMSAyMyAyNSAyNyAyOSAyQiAyRCAyRiAqKikKLQk7IHhtbUc9KDMwIDMyIDM0IDM2IDM4IDNBIDNDIDNFICoqKSwgeG1tSD0oMzEgMzMgMzUgMzcgMzkgM0IgM0QgM0YgKiopCisgICAgICAgIDsgeG1tQT0oMDAgMDIgMDQgMDYgMDggMEEgMEMgMEUgKiopLCB4bW1CPSgwMSAwMyAwNSAwNyAwOSAwQiAwRCAwRiAqKikKKyAgICAgICAgOyB4bW1DPSgxMCAxMiAxNCAxNiAxOCAxQSAxQyAxRSAqKiksIHhtbUQ9KDExIDEzIDE1IDE3IDE5IDFCIDFEIDFGICoqKQorICAgICAgICA7IHhtbUU9KDIwIDIyIDI0IDI2IDI4IDJBIDJDIDJFICoqKSwgeG1tRj0oMjEgMjMgMjUgMjcgMjkgMkIgMkQgMkYgKiopCisgICAgICAgIDsgeG1tRz0oMzAgMzIgMzQgMzYgMzggM0EgM0MgM0UgKiopLCB4bW1IPSgzMSAzMyAzNSAzNyAzOSAzQiAzRCAzRiAqKikKIAotCXB1bnBja2xidyB4bW1BLHhtbUMJOyB4bW1BPSgwMCAxMCAwMiAxMiAwNCAxNCAwNiAxNiAwOCAxOCAwQSAxQSAwQyAxQyAwRSAxRSkKLQlwdW5wY2tsYncgeG1tRSx4bW1HCTsgeG1tRT0oMjAgMzAgMjIgMzIgMjQgMzQgMjYgMzYgMjggMzggMkEgM0EgMkMgM0MgMkUgM0UpCi0JcHVucGNrbGJ3IHhtbUIseG1tRAk7IHhtbUI9KDAxIDExIDAzIDEzIDA1IDE1IDA3IDE3IDA5IDE5IDBCIDFCIDBEIDFEIDBGIDFGKQotCXB1bnBja2xidyB4bW1GLHhtbUgJOyB4bW1GPSgyMSAzMSAyMyAzMyAyNSAzNSAyNyAzNyAyOSAzOSAyQiAzQiAyRCAzRCAyRiAzRikKKyAgICAgICAgcHVucGNrbGJ3IHhtbUEseG1tQyAgICAgOyB4bW1BPSgwMCAxMCAwMiAxMiAwNCAxNCAwNiAxNiAwOCAxOCAwQSAxQSAwQyAxQyAwRSAxRSkKKyAgICAgICAgcHVucGNrbGJ3IHhtbUUseG1tRyAgICAgOyB4bW1FPSgyMCAzMCAyMiAzMiAyNCAzNCAyNiAzNiAyOCAzOCAyQSAzQSAyQyAzQyAyRSAzRSkKKyAgICAgICAgcHVucGNrbGJ3IHhtbUIseG1tRCAgICAgOyB4bW1CPSgwMSAxMSAwMyAxMyAwNSAxNSAwNyAxNyAwOSAxOSAwQiAxQiAwRCAxRCAwRiAxRikKKyAgICAgICAgcHVucGNrbGJ3IHhtbUYseG1tSCAgICAgOyB4bW1GPSgyMSAzMSAyMyAzMyAyNSAzNSAyNyAzNyAyOSAzOSAyQiAzQiAyRCAzRCAyRiAzRikKIAotCW1vdmRxYSAgICB4bW1DLHhtbUEKLQlwdW5wY2tsd2QgeG1tQSx4bW1FCTsgeG1tQT0oMDAgMTAgMjAgMzAgMDIgMTIgMjIgMzIgMDQgMTQgMjQgMzQgMDYgMTYgMjYgMzYpCi0JcHVucGNraHdkIHhtbUMseG1tRQk7IHhtbUM9KDA4IDE4IDI4IDM4IDBBIDFBIDJBIDNBIDBDIDFDIDJDIDNDIDBFIDFFIDJFIDNFKQotCW1vdmRxYSAgICB4bW1HLHhtbUIKLQlwdW5wY2tsd2QgeG1tQix4bW1GCTsgeG1tQj0oMDEgMTEgMjEgMzEgMDMgMTMgMjMgMzMgMDUgMTUgMjUgMzUgMDcgMTcgMjcgMzcpCi0JcHVucGNraHdkIHhtbUcseG1tRgk7IHhtbUc9KDA5IDE5IDI5IDM5IDBCIDFCIDJCIDNCIDBEIDFEIDJEIDNEIDBGIDFGIDJGIDNGKQorICAgICAgICBtb3ZkcWEgICAgeG1tQyx4bW1BCisgICAgICAgIHB1bnBja2x3ZCB4bW1BLHhtbUUgICAgIDsgeG1tQT0oMDAgMTAgMjAgMzAgMDIgMTIgMjIgMzIgMDQgMTQgMjQgMzQgMDYgMTYgMjYgMzYpCisgICAgICAgIHB1bnBja2h3ZCB4bW1DLHhtbUUgICAgIDsgeG1tQz0oMDggMTggMjggMzggMEEgMUEgMkEgM0EgMEMgMUMgMkMgM0MgMEUgMUUgMkUgM0UpCisgICAgICAgIG1vdmRxYSAgICB4bW1HLHhtbUIKKyAgICAgICAgcHVucGNrbHdkIHhtbUIseG1tRiAgICAgOyB4bW1CPSgwMSAxMSAyMSAzMSAwMyAxMyAyMyAzMyAwNSAxNSAyNSAzNSAwNyAxNyAyNyAzNykKKyAgICAgICAgcHVucGNraHdkIHhtbUcseG1tRiAgICAgOyB4bW1HPSgwOSAxOSAyOSAzOSAwQiAxQiAyQiAzQiAwRCAxRCAyRCAzRCAwRiAxRiAyRiAzRikKIAotCW1vdmRxYSAgICB4bW1ELHhtbUEKLQlwdW5wY2tsZHEgeG1tQSx4bW1CCTsgeG1tQT0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEgMDIgMTIgMjIgMzIgMDMgMTMgMjMgMzMpCi0JcHVucGNraGRxIHhtbUQseG1tQgk7IHhtbUQ9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1IDA2IDE2IDI2IDM2IDA3IDE3IDI3IDM3KQotCW1vdmRxYSAgICB4bW1ILHhtbUMKLQlwdW5wY2tsZHEgeG1tQyx4bW1HCTsgeG1tQz0oMDggMTggMjggMzggMDkgMTkgMjkgMzkgMEEgMUEgMkEgM0EgMEIgMUIgMkIgM0IpCi0JcHVucGNraGRxIHhtbUgseG1tRwk7IHhtbUg9KDBDIDFDIDJDIDNDIDBEIDFEIDJEIDNEIDBFIDFFIDJFIDNFIDBGIDFGIDJGIDNGKQorICAgICAgICBtb3ZkcWEgICAgeG1tRCx4bW1BCisgICAgICAgIHB1bnBja2xkcSB4bW1BLHhtbUIgICAgIDsgeG1tQT0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEgMDIgMTIgMjIgMzIgMDMgMTMgMjMgMzMpCisgICAgICAgIHB1bnBja2hkcSB4bW1ELHhtbUIgICAgIDsgeG1tRD0oMDQgMTQgMjQgMzQgMDUgMTUgMjUgMzUgMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCisgICAgICAgIG1vdmRxYSAgICB4bW1ILHhtbUMKKyAgICAgICAgcHVucGNrbGRxIHhtbUMseG1tRyAgICAgOyB4bW1DPSgwOCAxOCAyOCAzOCAwOSAxOSAyOSAzOSAwQSAxQSAyQSAzQSAwQiAxQiAyQiAzQikKKyAgICAgICAgcHVucGNraGRxIHhtbUgseG1tRyAgICAgOyB4bW1IPSgwQyAxQyAyQyAzQyAwRCAxRCAyRCAzRCAwRSAxRSAyRSAzRSAwRiAxRiAyRiAzRikKIAotCWNtcAlyY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKLQlqYglzaG9ydCAuY29sdW1uX3N0MzIKKyAgICAgICAgY21wICAgICByY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKyAgICAgICAgamIgICAgICBzaG9ydCAuY29sdW1uX3N0MzIKIAotCXRlc3QJcmRpLCBTSVpFT0ZfWE1NV09SRC0xCi0Jam56CXNob3J0IC5vdXQxCi0JOyAtLShhbGlnbmVkKS0tLS0tLS0tLS0tLS0tLS0tLS0KLQltb3ZudGRxCVhNTVdPUkQgW3JkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tQQotCW1vdm50ZHEJWE1NV09SRCBbcmRpKzEqU0laRU9GX1hNTVdPUkRdLCB4bW1ECi0JbW92bnRkcQlYTU1XT1JEIFtyZGkrMipTSVpFT0ZfWE1NV09SRF0sIHhtbUMKLQltb3ZudGRxCVhNTVdPUkQgW3JkaSszKlNJWkVPRl9YTU1XT1JEXSwgeG1tSAotCWptcAlzaG9ydCAub3V0MAotLm91dDE6CTsgLS0odW5hbGlnbmVkKS0tLS0tLS0tLS0tLS0tLS0tCi0JbW92ZHF1CVhNTVdPUkQgW3JkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tQQotCW1vdmRxdQlYTU1XT1JEIFtyZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbUQKLQltb3ZkcXUJWE1NV09SRCBbcmRpKzIqU0laRU9GX1hNTVdPUkRdLCB4bW1DCi0JbW92ZHF1CVhNTVdPUkQgW3JkaSszKlNJWkVPRl9YTU1XT1JEXSwgeG1tSAorICAgICAgICB0ZXN0ICAgIHJkaSwgU0laRU9GX1hNTVdPUkQtMQorICAgICAgICBqbnogICAgIHNob3J0IC5vdXQxCisgICAgICAgIDsgLS0oYWxpZ25lZCktLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIG1vdm50ZHEgWE1NV09SRCBbcmRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW1BCisgICAgICAgIG1vdm50ZHEgWE1NV09SRCBbcmRpKzEqU0laRU9GX1hNTVdPUkRdLCB4bW1ECisgICAgICAgIG1vdm50ZHEgWE1NV09SRCBbcmRpKzIqU0laRU9GX1hNTVdPUkRdLCB4bW1DCisgICAgICAgIG1vdm50ZHEgWE1NV09SRCBbcmRpKzMqU0laRU9GX1hNTVdPUkRdLCB4bW1ICisgICAgICAgIGptcCAgICAgc2hvcnQgLm91dDAKKy5vdXQxOiAgOyAtLSh1bmFsaWduZWQpLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgbW92ZHF1ICBYTU1XT1JEIFtyZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbUEKKyAgICAgICAgbW92ZHF1ICBYTU1XT1JEIFtyZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbUQKKyAgICAgICAgbW92ZHF1ICBYTU1XT1JEIFtyZGkrMipTSVpFT0ZfWE1NV09SRF0sIHhtbUMKKyAgICAgICAgbW92ZHF1ICBYTU1XT1JEIFtyZGkrMypTSVpFT0ZfWE1NV09SRF0sIHhtbUgKIC5vdXQwOgotCWFkZAlyZGksIGJ5dGUgUkdCX1BJWEVMU0laRSpTSVpFT0ZfWE1NV09SRAk7IG91dHB0cgotCXN1YglyY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKLQlqegluZWFyIC5lbmRjb2x1bW4KKyAgICAgICAgYWRkICAgICByZGksIGJ5dGUgUkdCX1BJWEVMU0laRSpTSVpFT0ZfWE1NV09SRCAgOyBvdXRwdHIKKyAgICAgICAgc3ViICAgICByY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKyAgICAgICAganogICAgICBuZWFyIC5lbmRjb2x1bW4KIAotCWFkZAlyc2ksIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBpbnB0cjAKLQlkZWMJYWwJCQk7IFljdHIKLQlqbnoJbmVhciAuWWxvb3BfMm5kCisgICAgICAgIGFkZCAgICAgcnNpLCBieXRlIFNJWkVPRl9YTU1XT1JEICAgICAgICA7IGlucHRyMAorICAgICAgICBkZWMgICAgIGFsICAgICAgICAgICAgICAgICAgICAgIDsgWWN0cgorICAgICAgICBqbnogICAgIG5lYXIgLllsb29wXzJuZAogCi0JYWRkCXJieCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IGlucHRyMQotCWFkZAlyZHgsIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBpbnB0cjIKLQlqbXAJbmVhciAuY29sdW1ubG9vcAorICAgICAgICBhZGQgICAgIHJieCwgYnl0ZSBTSVpFT0ZfWE1NV09SRCAgICAgICAgOyBpbnB0cjEKKyAgICAgICAgYWRkICAgICByZHgsIGJ5dGUgU0laRU9GX1hNTVdPUkQgICAgICAgIDsgaW5wdHIyCisgICAgICAgIGptcCAgICAgbmVhciAuY29sdW1ubG9vcAogCiAuY29sdW1uX3N0MzI6Ci0JY21wCXJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC8yCi0JamIJc2hvcnQgLmNvbHVtbl9zdDE2Ci0JbW92ZHF1CVhNTVdPUkQgW3JkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tQQotCW1vdmRxdQlYTU1XT1JEIFtyZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbUQKLQlhZGQJcmRpLCBieXRlIDIqU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKLQltb3ZkcWEJeG1tQSx4bW1DCi0JbW92ZHFhCXhtbUQseG1tSAotCXN1YglyY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQvMgorICAgICAgICBjbXAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC8yCisgICAgICAgIGpiICAgICAgc2hvcnQgLmNvbHVtbl9zdDE2CisgICAgICAgIG1vdmRxdSAgWE1NV09SRCBbcmRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW1BCisgICAgICAgIG1vdmRxdSAgWE1NV09SRCBbcmRpKzEqU0laRU9GX1hNTVdPUkRdLCB4bW1ECisgICAgICAgIGFkZCAgICAgcmRpLCBieXRlIDIqU0laRU9GX1hNTVdPUkQgICAgICA7IG91dHB0cgorICAgICAgICBtb3ZkcWEgIHhtbUEseG1tQworICAgICAgICBtb3ZkcWEgIHhtbUQseG1tSAorICAgICAgICBzdWIgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC8yCiAuY29sdW1uX3N0MTY6Ci0JY21wCXJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC80Ci0JamIJc2hvcnQgLmNvbHVtbl9zdDE1Ci0JbW92ZHF1CVhNTVdPUkQgW3JkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tQQotCWFkZAlyZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKLQltb3ZkcWEJeG1tQSx4bW1ECi0Jc3ViCXJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC80CisgICAgICAgIGNtcCAgICAgcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzQKKyAgICAgICAgamIgICAgICBzaG9ydCAuY29sdW1uX3N0MTUKKyAgICAgICAgbW92ZHF1ICBYTU1XT1JEIFtyZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbUEKKyAgICAgICAgYWRkICAgICByZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQgICAgICAgIDsgb3V0cHRyCisgICAgICAgIG1vdmRxYSAgeG1tQSx4bW1ECisgICAgICAgIHN1YiAgICAgcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzQKIC5jb2x1bW5fc3QxNToKLQk7IFN0b3JlIHR3byBwaXhlbHMgKDggYnl0ZXMpIG9mIHhtbUEgdG8gdGhlIG91dHB1dCB3aGVuIGl0IGhhcyBlbm91Z2gKLQk7IHNwYWNlLgotCWNtcAlyY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQvOAotCWpiCXNob3J0IC5jb2x1bW5fc3Q3Ci0JbW92cQlYTU1fTU1XT1JEIFtyZGldLCB4bW1BCi0JYWRkCXJkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRC84KjQKLQlzdWIJcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzgKLQlwc3JsZHEJeG1tQSwgU0laRU9GX1hNTVdPUkQvOCo0CisgICAgICAgIDsgU3RvcmUgdHdvIHBpeGVscyAoOCBieXRlcykgb2YgeG1tQSB0byB0aGUgb3V0cHV0IHdoZW4gaXQgaGFzIGVub3VnaAorICAgICAgICA7IHNwYWNlLgorICAgICAgICBjbXAgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC84CisgICAgICAgIGpiICAgICAgc2hvcnQgLmNvbHVtbl9zdDcKKyAgICAgICAgbW92cSAgICBYTU1fTU1XT1JEIFtyZGldLCB4bW1BCisgICAgICAgIGFkZCAgICAgcmRpLCBieXRlIFNJWkVPRl9YTU1XT1JELzgqNAorICAgICAgICBzdWIgICAgIHJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC84CisgICAgICAgIHBzcmxkcSAgeG1tQSwgU0laRU9GX1hNTVdPUkQvOCo0CiAuY29sdW1uX3N0NzoKLQk7IFN0b3JlIG9uZSBwaXhlbCAoNCBieXRlcykgb2YgeG1tQSB0byB0aGUgb3V0cHV0IHdoZW4gaXQgaGFzIGVub3VnaAotCTsgc3BhY2UuCi0JdGVzdAlyY3gsIHJjeAotCWp6CXNob3J0IC5lbmRjb2x1bW4KLQltb3ZkCVhNTV9EV09SRCBbcmRpXSwgeG1tQQorICAgICAgICA7IFN0b3JlIG9uZSBwaXhlbCAoNCBieXRlcykgb2YgeG1tQSB0byB0aGUgb3V0cHV0IHdoZW4gaXQgaGFzIGVub3VnaAorICAgICAgICA7IHNwYWNlLgorICAgICAgICB0ZXN0ICAgIHJjeCwgcmN4CisgICAgICAgIGp6ICAgICAgc2hvcnQgLmVuZGNvbHVtbgorICAgICAgICBtb3ZkICAgIFhNTV9EV09SRCBbcmRpXSwgeG1tQQogCiAlZW5kaWYgOyBSR0JfUElYRUxTSVpFIDsgLS0tLS0tLS0tLS0tLS0tCiAKIC5lbmRjb2x1bW46Ci0Jc2ZlbmNlCQk7IGZsdXNoIHRoZSB3cml0ZSBidWZmZXIKKyAgICAgICAgc2ZlbmNlICAgICAgICAgIDsgZmx1c2ggdGhlIHdyaXRlIGJ1ZmZlcgogCiAucmV0dXJuOgotCXBvcAlyYngKLQl1bmNvbGxlY3RfYXJncwotCW1vdglyc3AscmJwCQk7IHJzcCA8LSBhbGlnbmVkIHJicAotCXBvcAlyc3AJCTsgcnNwIDwtIG9yaWdpbmFsIHJicAotCXBvcAlyYnAKLQlyZXQKKyAgICAgICAgcG9wICAgICByYngKKyAgICAgICAgdW5jb2xsZWN0X2FyZ3MKKyAgICAgICAgbW92ICAgICByc3AscmJwICAgICAgICAgOyByc3AgPC0gYWxpZ25lZCByYnAKKyAgICAgICAgcG9wICAgICByc3AgICAgICAgICAgICAgOyByc3AgPC0gb3JpZ2luYWwgcmJwCisgICAgICAgIHBvcCAgICAgcmJwCisgICAgICAgIHJldAogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiA7CkBAIC00NDUsOTQgKzQ0NSw5NCBAQAogOyByMTIgPSBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIKIDsgcjEzID0gSlNBTVBBUlJBWSBvdXRwdXRfYnVmCiAKLQlhbGlnbgkxNgotCWdsb2JhbAlFWFROKGpzaW1kX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIpCisgICAgICAgIGFsaWduICAgMTYKKyAgICAgICAgZ2xvYmFsICBFWFROKGpzaW1kX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIpCiAKIEVYVE4oanNpbWRfaDJ2Ml9tZXJnZWRfdXBzYW1wbGVfc3NlMik6Ci0JcHVzaAlyYnAKLQltb3YJcmF4LHJzcAotCW1vdglyYnAscnNwCi0JY29sbGVjdF9hcmdzCi0JcHVzaAlyYngKKyAgICAgICAgcHVzaCAgICByYnAKKyAgICAgICAgbW92ICAgICByYXgscnNwCisgICAgICAgIG1vdiAgICAgcmJwLHJzcAorICAgICAgICBjb2xsZWN0X2FyZ3MKKyAgICAgICAgcHVzaCAgICByYngKIAotCW1vdglyYXgsIHIxMAorICAgICAgICBtb3YgICAgIHJheCwgcjEwCiAKLQltb3YJcmRpLCByMTEKLQltb3YJcmN4LCByMTIKLQltb3YJcnNpLCBKU0FNUEFSUkFZIFtyZGkrMCpTSVpFT0ZfSlNBTVBBUlJBWV0KLQltb3YJcmJ4LCBKU0FNUEFSUkFZIFtyZGkrMSpTSVpFT0ZfSlNBTVBBUlJBWV0KLQltb3YJcmR4LCBKU0FNUEFSUkFZIFtyZGkrMipTSVpFT0ZfSlNBTVBBUlJBWV0KLQltb3YJcmRpLCByMTMKLQlsZWEJcnNpLCBbcnNpK3JjeCpTSVpFT0ZfSlNBTVBST1ddCisgICAgICAgIG1vdiAgICAgcmRpLCByMTEKKyAgICAgICAgbW92ICAgICByY3gsIHIxMgorICAgICAgICBtb3YgICAgIHJzaSwgSlNBTVBBUlJBWSBbcmRpKzAqU0laRU9GX0pTQU1QQVJSQVldCisgICAgICAgIG1vdiAgICAgcmJ4LCBKU0FNUEFSUkFZIFtyZGkrMSpTSVpFT0ZfSlNBTVBBUlJBWV0KKyAgICAgICAgbW92ICAgICByZHgsIEpTQU1QQVJSQVkgW3JkaSsyKlNJWkVPRl9KU0FNUEFSUkFZXQorICAgICAgICBtb3YgICAgIHJkaSwgcjEzCisgICAgICAgIGxlYSAgICAgcnNpLCBbcnNpK3JjeCpTSVpFT0ZfSlNBTVBST1ddCiAKLQlwdXNoCXJkeAkJCTsgaW5wdHIyCi0JcHVzaAlyYngJCQk7IGlucHRyMQotCXB1c2gJcnNpCQkJOyBpbnB0cjAwCi0JbW92CXJieCxyc3AKKyAgICAgICAgcHVzaCAgICByZHggICAgICAgICAgICAgICAgICAgICA7IGlucHRyMgorICAgICAgICBwdXNoICAgIHJieCAgICAgICAgICAgICAgICAgICAgIDsgaW5wdHIxCisgICAgICAgIHB1c2ggICAgcnNpICAgICAgICAgICAgICAgICAgICAgOyBpbnB0cjAwCisgICAgICAgIG1vdiAgICAgcmJ4LHJzcAogCi0JcHVzaAlyZGkKLQlwdXNoCXJjeAotCXB1c2gJcmF4CisgICAgICAgIHB1c2ggICAgcmRpCisgICAgICAgIHB1c2ggICAgcmN4CisgICAgICAgIHB1c2ggICAgcmF4CiAKLQklaWZkZWYgV0lONjQKLQltb3YgcjgsIHJjeAotCW1vdiByOSwgcmRpCi0JbW92IHJjeCwgcmF4Ci0JbW92IHJkeCwgcmJ4Ci0JJWVsc2UKLQltb3YgcmR4LCByY3gKLQltb3YgcmN4LCByZGkKLQltb3YJcmRpLCByYXgKLQltb3YgcnNpLCByYngKLQklZW5kaWYKKyAgICAgICAgJWlmZGVmIFdJTjY0CisgICAgICAgIG1vdiByOCwgcmN4CisgICAgICAgIG1vdiByOSwgcmRpCisgICAgICAgIG1vdiByY3gsIHJheAorICAgICAgICBtb3YgcmR4LCByYngKKyAgICAgICAgJWVsc2UKKyAgICAgICAgbW92IHJkeCwgcmN4CisgICAgICAgIG1vdiByY3gsIHJkaQorICAgICAgICBtb3YgICAgIHJkaSwgcmF4CisgICAgICAgIG1vdiByc2ksIHJieAorICAgICAgICAlZW5kaWYKIAotCWNhbGwJRVhUTihqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9zc2UyKQorICAgICAgICBjYWxsICAgIEVYVE4oanNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfc3NlMikKIAotCXBvcCByYXgKLQlwb3AgcmN4Ci0JcG9wIHJkaQotCXBvcCByc2kKLQlwb3AgcmJ4Ci0JcG9wIHJkeAorICAgICAgICBwb3AgcmF4CisgICAgICAgIHBvcCByY3gKKyAgICAgICAgcG9wIHJkaQorICAgICAgICBwb3AgcnNpCisgICAgICAgIHBvcCByYngKKyAgICAgICAgcG9wIHJkeAogCi0JYWRkCXJkaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cJOyBvdXRwdHIxCi0JYWRkCXJzaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cJOyBpbnB0cjAxCisgICAgICAgIGFkZCAgICAgcmRpLCBieXRlIFNJWkVPRl9KU0FNUFJPVyAgICAgICA7IG91dHB0cjEKKyAgICAgICAgYWRkICAgICByc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XICAgICAgIDsgaW5wdHIwMQogCi0JcHVzaAlyZHgJCQk7IGlucHRyMgotCXB1c2gJcmJ4CQkJOyBpbnB0cjEKLQlwdXNoCXJzaQkJCTsgaW5wdHIwMAotCW1vdglyYngscnNwCisgICAgICAgIHB1c2ggICAgcmR4ICAgICAgICAgICAgICAgICAgICAgOyBpbnB0cjIKKyAgICAgICAgcHVzaCAgICByYnggICAgICAgICAgICAgICAgICAgICA7IGlucHRyMQorICAgICAgICBwdXNoICAgIHJzaSAgICAgICAgICAgICAgICAgICAgIDsgaW5wdHIwMAorICAgICAgICBtb3YgICAgIHJieCxyc3AKIAotCXB1c2gJcmRpCi0JcHVzaAlyY3gKLQlwdXNoCXJheAorICAgICAgICBwdXNoICAgIHJkaQorICAgICAgICBwdXNoICAgIHJjeAorICAgICAgICBwdXNoICAgIHJheAogCi0JJWlmZGVmIFdJTjY0Ci0JbW92IHI4LCByY3gKLQltb3YgcjksIHJkaQotCW1vdiByY3gsIHJheAotCW1vdiByZHgsIHJieAotCSVlbHNlCi0JbW92IHJkeCwgcmN4Ci0JbW92IHJjeCwgcmRpCi0JbW92CXJkaSwgcmF4Ci0JbW92IHJzaSwgcmJ4Ci0JJWVuZGlmCisgICAgICAgICVpZmRlZiBXSU42NAorICAgICAgICBtb3YgcjgsIHJjeAorICAgICAgICBtb3YgcjksIHJkaQorICAgICAgICBtb3YgcmN4LCByYXgKKyAgICAgICAgbW92IHJkeCwgcmJ4CisgICAgICAgICVlbHNlCisgICAgICAgIG1vdiByZHgsIHJjeAorICAgICAgICBtb3YgcmN4LCByZGkKKyAgICAgICAgbW92ICAgICByZGksIHJheAorICAgICAgICBtb3YgcnNpLCByYngKKyAgICAgICAgJWVuZGlmCiAKLQljYWxsCUVYVE4oanNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfc3NlMikKKyAgICAgICAgY2FsbCAgICBFWFROKGpzaW1kX2gydjFfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIpCiAKLQlwb3AgcmF4Ci0JcG9wIHJjeAotCXBvcCByZGkKLQlwb3AgcnNpCi0JcG9wIHJieAotCXBvcCByZHgKKyAgICAgICAgcG9wIHJheAorICAgICAgICBwb3AgcmN4CisgICAgICAgIHBvcCByZGkKKyAgICAgICAgcG9wIHJzaQorICAgICAgICBwb3AgcmJ4CisgICAgICAgIHBvcCByZHgKIAotCXBvcAlyYngKLQl1bmNvbGxlY3RfYXJncwotCXBvcAlyYnAKLQlyZXQKKyAgICAgICAgcG9wICAgICByYngKKyAgICAgICAgdW5jb2xsZWN0X2FyZ3MKKyAgICAgICAgcG9wICAgICByYnAKKyAgICAgICAgcmV0CiAKIDsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCiA7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCi0JYWxpZ24JMTYKKyAgICAgICAgYWxpZ24gICAxNgpkaWZmIC0tZ2l0IGEvc2ltZC9qZG1yZ3NzMi5hc20gYi9zaW1kL2pkbXJnc3MyLmFzbQppbmRleCA2NDk0MzQwLi4wMjA2ZjYyIDEwMDY0NAotLS0gYS9zaW1kL2pkbXJnc3MyLmFzbQorKysgYi9zaW1kL2pkbXJnc3MyLmFzbQpAQCAtMTgsNyArMTgsNyBAQAogOyBbVEFCOF0KIAogJWluY2x1ZGUgImpjb2xzYW1wLmluYyIKLQkJCQkKKwogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogOwogOyBVcHNhbXBsZSBhbmQgY29sb3IgY29udmVydCBmb3IgdGhlIGNhc2Ugb2YgMjoxIGhvcml6b250YWwgYW5kIDE6MSB2ZXJ0aWNhbC4KQEAgLTMwLDQyMiArMzAsNDIyIEBACiA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1Zik7CiA7CiAKLSVkZWZpbmUgb3V0cHV0X3dpZHRoKGIpCShiKSs4CQkJOyBKRElNRU5TSU9OIG91dHB1dF93aWR0aAotJWRlZmluZSBpbnB1dF9idWYoYikJCShiKSsxMgkJOyBKU0FNUElNQUdFIGlucHV0X2J1ZgotJWRlZmluZSBpbl9yb3dfZ3JvdXBfY3RyKGIpCShiKSsxNgkJOyBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIKLSVkZWZpbmUgb3V0cHV0X2J1ZihiKQkJKGIpKzIwCQk7IEpTQU1QQVJSQVkgb3V0cHV0X2J1ZgorJWRlZmluZSBvdXRwdXRfd2lkdGgoYikgKGIpKzggICAgICAgICAgICAgICAgICAgOyBKRElNRU5TSU9OIG91dHB1dF93aWR0aAorJWRlZmluZSBpbnB1dF9idWYoYikgICAgICAgICAgICAoYikrMTIgICAgICAgICAgOyBKU0FNUElNQUdFIGlucHV0X2J1ZgorJWRlZmluZSBpbl9yb3dfZ3JvdXBfY3RyKGIpICAgICAoYikrMTYgICAgICAgICAgOyBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIKKyVkZWZpbmUgb3V0cHV0X2J1ZihiKSAgICAgICAgICAgKGIpKzIwICAgICAgICAgIDsgSlNBTVBBUlJBWSBvdXRwdXRfYnVmCiAKLSVkZWZpbmUgb3JpZ2luYWxfZWJwCWVicCswCi0lZGVmaW5lIHdrKGkpCQllYnAtKFdLX05VTS0oaSkpKlNJWkVPRl9YTU1XT1JECTsgeG1td29yZCB3a1tXS19OVU1dCi0lZGVmaW5lIFdLX05VTQkJMwotJWRlZmluZSBnb3RwdHIJCXdrKDApLVNJWkVPRl9QT0lOVEVSCTsgdm9pZCAqIGdvdHB0cgorJWRlZmluZSBvcmlnaW5hbF9lYnAgICAgZWJwKzAKKyVkZWZpbmUgd2soaSkgICAgICAgICAgIGVicC0oV0tfTlVNLShpKSkqU0laRU9GX1hNTVdPUkQgOyB4bW13b3JkIHdrW1dLX05VTV0KKyVkZWZpbmUgV0tfTlVNICAgICAgICAgIDMKKyVkZWZpbmUgZ290cHRyICAgICAgICAgIHdrKDApLVNJWkVPRl9QT0lOVEVSICAgIDsgdm9pZCAqIGdvdHB0cgogCi0JYWxpZ24JMTYKLQlnbG9iYWwJRVhUTihqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9zc2UyKQorICAgICAgICBhbGlnbiAgIDE2CisgICAgICAgIGdsb2JhbCAgRVhUTihqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9zc2UyKQogCiBFWFROKGpzaW1kX2gydjFfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIpOgotCXB1c2gJZWJwCi0JbW92CWVheCxlc3AJCQkJOyBlYXggPSBvcmlnaW5hbCBlYnAKLQlzdWIJZXNwLCBieXRlIDQKLQlhbmQJZXNwLCBieXRlICgtU0laRU9GX1hNTVdPUkQpCTsgYWxpZ24gdG8gMTI4IGJpdHMKLQltb3YJW2VzcF0sZWF4Ci0JbW92CWVicCxlc3AJCQkJOyBlYnAgPSBhbGlnbmVkIGVicAotCWxlYQllc3AsIFt3aygwKV0KLQlwdXNocGljCWVheAkJOyBtYWtlIGEgcm9vbSBmb3IgR09UIGFkZHJlc3MKLQlwdXNoCWVieAotOwlwdXNoCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLTsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi0JcHVzaAllc2kKLQlwdXNoCWVkaQorICAgICAgICBwdXNoICAgIGVicAorICAgICAgICBtb3YgICAgIGVheCxlc3AgICAgICAgICAgICAgICAgICAgICAgICAgOyBlYXggPSBvcmlnaW5hbCBlYnAKKyAgICAgICAgc3ViICAgICBlc3AsIGJ5dGUgNAorICAgICAgICBhbmQgICAgIGVzcCwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKSAgICAgOyBhbGlnbiB0byAxMjggYml0cworICAgICAgICBtb3YgICAgIFtlc3BdLGVheAorICAgICAgICBtb3YgICAgIGVicCxlc3AgICAgICAgICAgICAgICAgICAgICAgICAgOyBlYnAgPSBhbGlnbmVkIGVicAorICAgICAgICBsZWEgICAgIGVzcCwgW3drKDApXQorICAgICAgICBwdXNocGljIGVheCAgICAgICAgICAgICA7IG1ha2UgYSByb29tIGZvciBHT1QgYWRkcmVzcworICAgICAgICBwdXNoICAgIGVieAorOyAgICAgICBwdXNoICAgIGVjeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgICAgICBwdXNoICAgIGVkeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgICAgICBwdXNoICAgIGVzaQorICAgICAgICBwdXNoICAgIGVkaQogCi0JZ2V0X0dPVAllYngJCQk7IGdldCBHT1QgYWRkcmVzcwotCW1vdnBpYwlQT0lOVEVSIFtnb3RwdHJdLCBlYngJOyBzYXZlIEdPVCBhZGRyZXNzCisgICAgICAgIGdldF9HT1QgZWJ4ICAgICAgICAgICAgICAgICAgICAgOyBnZXQgR09UIGFkZHJlc3MKKyAgICAgICAgbW92cGljICBQT0lOVEVSIFtnb3RwdHJdLCBlYnggICA7IHNhdmUgR09UIGFkZHJlc3MKIAotCW1vdgllY3gsIEpESU1FTlNJT04gW291dHB1dF93aWR0aChlYXgpXQk7IGNvbAotCXRlc3QJZWN4LGVjeAotCWp6CW5lYXIgLnJldHVybgorICAgICAgICBtb3YgICAgIGVjeCwgSkRJTUVOU0lPTiBbb3V0cHV0X3dpZHRoKGVheCldICAgICA7IGNvbAorICAgICAgICB0ZXN0ICAgIGVjeCxlY3gKKyAgICAgICAganogICAgICBuZWFyIC5yZXR1cm4KIAotCXB1c2gJZWN4CisgICAgICAgIHB1c2ggICAgZWN4CiAKLQltb3YJZWRpLCBKU0FNUElNQUdFIFtpbnB1dF9idWYoZWF4KV0KLQltb3YJZWN4LCBKRElNRU5TSU9OIFtpbl9yb3dfZ3JvdXBfY3RyKGVheCldCi0JbW92CWVzaSwgSlNBTVBBUlJBWSBbZWRpKzAqU0laRU9GX0pTQU1QQVJSQVldCi0JbW92CWVieCwgSlNBTVBBUlJBWSBbZWRpKzEqU0laRU9GX0pTQU1QQVJSQVldCi0JbW92CWVkeCwgSlNBTVBBUlJBWSBbZWRpKzIqU0laRU9GX0pTQU1QQVJSQVldCi0JbW92CWVkaSwgSlNBTVBBUlJBWSBbb3V0cHV0X2J1ZihlYXgpXQotCW1vdgllc2ksIEpTQU1QUk9XIFtlc2krZWN4KlNJWkVPRl9KU0FNUFJPV10JCTsgaW5wdHIwCi0JbW92CWVieCwgSlNBTVBST1cgW2VieCtlY3gqU0laRU9GX0pTQU1QUk9XXQkJOyBpbnB0cjEKLQltb3YJZWR4LCBKU0FNUFJPVyBbZWR4K2VjeCpTSVpFT0ZfSlNBTVBST1ddCQk7IGlucHRyMgotCW1vdgllZGksIEpTQU1QUk9XIFtlZGldCQkJCTsgb3V0cHRyCisgICAgICAgIG1vdiAgICAgZWRpLCBKU0FNUElNQUdFIFtpbnB1dF9idWYoZWF4KV0KKyAgICAgICAgbW92ICAgICBlY3gsIEpESU1FTlNJT04gW2luX3Jvd19ncm91cF9jdHIoZWF4KV0KKyAgICAgICAgbW92ICAgICBlc2ksIEpTQU1QQVJSQVkgW2VkaSswKlNJWkVPRl9KU0FNUEFSUkFZXQorICAgICAgICBtb3YgICAgIGVieCwgSlNBTVBBUlJBWSBbZWRpKzEqU0laRU9GX0pTQU1QQVJSQVldCisgICAgICAgIG1vdiAgICAgZWR4LCBKU0FNUEFSUkFZIFtlZGkrMipTSVpFT0ZfSlNBTVBBUlJBWV0KKyAgICAgICAgbW92ICAgICBlZGksIEpTQU1QQVJSQVkgW291dHB1dF9idWYoZWF4KV0KKyAgICAgICAgbW92ICAgICBlc2ksIEpTQU1QUk9XIFtlc2krZWN4KlNJWkVPRl9KU0FNUFJPV10gICAgICAgICA7IGlucHRyMAorICAgICAgICBtb3YgICAgIGVieCwgSlNBTVBST1cgW2VieCtlY3gqU0laRU9GX0pTQU1QUk9XXSAgICAgICAgIDsgaW5wdHIxCisgICAgICAgIG1vdiAgICAgZWR4LCBKU0FNUFJPVyBbZWR4K2VjeCpTSVpFT0ZfSlNBTVBST1ddICAgICAgICAgOyBpbnB0cjIKKyAgICAgICAgbW92ICAgICBlZGksIEpTQU1QUk9XIFtlZGldICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IG91dHB0cgogCi0JcG9wCWVjeAkJCTsgY29sCisgICAgICAgIHBvcCAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBjb2wKIAotCWFsaWdueAkxNiw3CisgICAgICAgIGFsaWdueCAgMTYsNwogLmNvbHVtbmxvb3A6Ci0JbW92cGljCWVheCwgUE9JTlRFUiBbZ290cHRyXQk7IGxvYWQgR09UIGFkZHJlc3MgKGVheCkKKyAgICAgICAgbW92cGljICBlYXgsIFBPSU5URVIgW2dvdHB0cl0gICA7IGxvYWQgR09UIGFkZHJlc3MgKGVheCkKIAotCW1vdmRxYSAgICB4bW02LCBYTU1XT1JEIFtlYnhdCTsgeG1tNj1DYigwMTIzNDU2Nzg5QUJDREVGKQotCW1vdmRxYSAgICB4bW03LCBYTU1XT1JEIFtlZHhdCTsgeG1tNz1DcigwMTIzNDU2Nzg5QUJDREVGKQorICAgICAgICBtb3ZkcWEgICAgeG1tNiwgWE1NV09SRCBbZWJ4XSAgIDsgeG1tNj1DYigwMTIzNDU2Nzg5QUJDREVGKQorICAgICAgICBtb3ZkcWEgICAgeG1tNywgWE1NV09SRCBbZWR4XSAgIDsgeG1tNz1DcigwMTIzNDU2Nzg5QUJDREVGKQogCi0JcHhvciAgICAgIHhtbTEseG1tMQkJOyB4bW0xPShhbGwgMCdzKQotCXBjbXBlcXcgICB4bW0zLHhtbTMKLQlwc2xsdyAgICAgeG1tMyw3CQk7IHhtbTM9ezB4RkY4MCAweEZGODAgMHhGRjgwIDB4RkY4MCAuLn0KKyAgICAgICAgcHhvciAgICAgIHhtbTEseG1tMSAgICAgICAgICAgICA7IHhtbTE9KGFsbCAwJ3MpCisgICAgICAgIHBjbXBlcXcgICB4bW0zLHhtbTMKKyAgICAgICAgcHNsbHcgICAgIHhtbTMsNyAgICAgICAgICAgICAgICA7IHhtbTM9ezB4RkY4MCAweEZGODAgMHhGRjgwIDB4RkY4MCAuLn0KIAotCW1vdmRxYSAgICB4bW00LHhtbTYKLQlwdW5wY2toYncgeG1tNix4bW0xCQk7IHhtbTY9Q2IoODlBQkNERUYpPUNiSAotCXB1bnBja2xidyB4bW00LHhtbTEJCTsgeG1tND1DYigwMTIzNDU2Nyk9Q2JMCi0JbW92ZHFhICAgIHhtbTAseG1tNwotCXB1bnBja2hidyB4bW03LHhtbTEJCTsgeG1tNz1Dcig4OUFCQ0RFRik9Q3JICi0JcHVucGNrbGJ3IHhtbTAseG1tMQkJOyB4bW0wPUNyKDAxMjM0NTY3KT1DckwKKyAgICAgICAgbW92ZHFhICAgIHhtbTQseG1tNgorICAgICAgICBwdW5wY2toYncgeG1tNix4bW0xICAgICAgICAgICAgIDsgeG1tNj1DYig4OUFCQ0RFRik9Q2JICisgICAgICAgIHB1bnBja2xidyB4bW00LHhtbTEgICAgICAgICAgICAgOyB4bW00PUNiKDAxMjM0NTY3KT1DYkwKKyAgICAgICAgbW92ZHFhICAgIHhtbTAseG1tNworICAgICAgICBwdW5wY2toYncgeG1tNyx4bW0xICAgICAgICAgICAgIDsgeG1tNz1Dcig4OUFCQ0RFRik9Q3JICisgICAgICAgIHB1bnBja2xidyB4bW0wLHhtbTEgICAgICAgICAgICAgOyB4bW0wPUNyKDAxMjM0NTY3KT1DckwKIAotCXBhZGR3ICAgICB4bW02LHhtbTMKLQlwYWRkdyAgICAgeG1tNCx4bW0zCi0JcGFkZHcgICAgIHhtbTcseG1tMwotCXBhZGR3ICAgICB4bW0wLHhtbTMKKyAgICAgICAgcGFkZHcgICAgIHhtbTYseG1tMworICAgICAgICBwYWRkdyAgICAgeG1tNCx4bW0zCisgICAgICAgIHBhZGR3ICAgICB4bW03LHhtbTMKKyAgICAgICAgcGFkZHcgICAgIHhtbTAseG1tMwogCi0JOyAoT3JpZ2luYWwpCi0JOyBSID0gWSAgICAgICAgICAgICAgICArIDEuNDAyMDAgKiBDcgotCTsgRyA9IFkgLSAwLjM0NDE0ICogQ2IgLSAwLjcxNDE0ICogQ3IKLQk7IEIgPSBZICsgMS43NzIwMCAqIENiCi0JOwotCTsgKFRoaXMgaW1wbGVtZW50YXRpb24pCi0JOyBSID0gWSAgICAgICAgICAgICAgICArIDAuNDAyMDAgKiBDciArIENyCi0JOyBHID0gWSAtIDAuMzQ0MTQgKiBDYiArIDAuMjg1ODYgKiBDciAtIENyCi0JOyBCID0gWSAtIDAuMjI4MDAgKiBDYiArIENiICsgQ2IKKyAgICAgICAgOyAoT3JpZ2luYWwpCisgICAgICAgIDsgUiA9IFkgICAgICAgICAgICAgICAgKyAxLjQwMjAwICogQ3IKKyAgICAgICAgOyBHID0gWSAtIDAuMzQ0MTQgKiBDYiAtIDAuNzE0MTQgKiBDcgorICAgICAgICA7IEIgPSBZICsgMS43NzIwMCAqIENiCisgICAgICAgIDsKKyAgICAgICAgOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKyAgICAgICAgOyBSID0gWSAgICAgICAgICAgICAgICArIDAuNDAyMDAgKiBDciArIENyCisgICAgICAgIDsgRyA9IFkgLSAwLjM0NDE0ICogQ2IgKyAwLjI4NTg2ICogQ3IgLSBDcgorICAgICAgICA7IEIgPSBZIC0gMC4yMjgwMCAqIENiICsgQ2IgKyBDYgogCi0JbW92ZHFhCXhtbTUseG1tNgkJOyB4bW01PUNiSAotCW1vdmRxYQl4bW0yLHhtbTQJCTsgeG1tMj1DYkwKLQlwYWRkdwl4bW02LHhtbTYJCTsgeG1tNj0yKkNiSAotCXBhZGR3CXhtbTQseG1tNAkJOyB4bW00PTIqQ2JMCi0JbW92ZHFhCXhtbTEseG1tNwkJOyB4bW0xPUNySAotCW1vdmRxYQl4bW0zLHhtbTAJCTsgeG1tMz1DckwKLQlwYWRkdwl4bW03LHhtbTcJCTsgeG1tNz0yKkNySAotCXBhZGR3CXhtbTAseG1tMAkJOyB4bW0wPTIqQ3JMCisgICAgICAgIG1vdmRxYSAgeG1tNSx4bW02ICAgICAgICAgICAgICAgOyB4bW01PUNiSAorICAgICAgICBtb3ZkcWEgIHhtbTIseG1tNCAgICAgICAgICAgICAgIDsgeG1tMj1DYkwKKyAgICAgICAgcGFkZHcgICB4bW02LHhtbTYgICAgICAgICAgICAgICA7IHhtbTY9MipDYkgKKyAgICAgICAgcGFkZHcgICB4bW00LHhtbTQgICAgICAgICAgICAgICA7IHhtbTQ9MipDYkwKKyAgICAgICAgbW92ZHFhICB4bW0xLHhtbTcgICAgICAgICAgICAgICA7IHhtbTE9Q3JICisgICAgICAgIG1vdmRxYSAgeG1tMyx4bW0wICAgICAgICAgICAgICAgOyB4bW0zPUNyTAorICAgICAgICBwYWRkdyAgIHhtbTcseG1tNyAgICAgICAgICAgICAgIDsgeG1tNz0yKkNySAorICAgICAgICBwYWRkdyAgIHhtbTAseG1tMCAgICAgICAgICAgICAgIDsgeG1tMD0yKkNyTAogCi0JcG11bGh3CXhtbTYsW0dPVE9GRihlYXgsUFdfTUYwMjI4KV0JOyB4bW02PSgyKkNiSCAqIC1GSVgoMC4yMjgwMCkpCi0JcG11bGh3CXhtbTQsW0dPVE9GRihlYXgsUFdfTUYwMjI4KV0JOyB4bW00PSgyKkNiTCAqIC1GSVgoMC4yMjgwMCkpCi0JcG11bGh3CXhtbTcsW0dPVE9GRihlYXgsUFdfRjA0MDIpXQk7IHhtbTc9KDIqQ3JIICogRklYKDAuNDAyMDApKQotCXBtdWxodwl4bW0wLFtHT1RPRkYoZWF4LFBXX0YwNDAyKV0JOyB4bW0wPSgyKkNyTCAqIEZJWCgwLjQwMjAwKSkKKyAgICAgICAgcG11bGh3ICB4bW02LFtHT1RPRkYoZWF4LFBXX01GMDIyOCldICAgIDsgeG1tNj0oMipDYkggKiAtRklYKDAuMjI4MDApKQorICAgICAgICBwbXVsaHcgIHhtbTQsW0dPVE9GRihlYXgsUFdfTUYwMjI4KV0gICAgOyB4bW00PSgyKkNiTCAqIC1GSVgoMC4yMjgwMCkpCisgICAgICAgIHBtdWxodyAgeG1tNyxbR09UT0ZGKGVheCxQV19GMDQwMildICAgICA7IHhtbTc9KDIqQ3JIICogRklYKDAuNDAyMDApKQorICAgICAgICBwbXVsaHcgIHhtbTAsW0dPVE9GRihlYXgsUFdfRjA0MDIpXSAgICAgOyB4bW0wPSgyKkNyTCAqIEZJWCgwLjQwMjAwKSkKIAotCXBhZGR3CXhtbTYsW0dPVE9GRihlYXgsUFdfT05FKV0KLQlwYWRkdwl4bW00LFtHT1RPRkYoZWF4LFBXX09ORSldCi0JcHNyYXcJeG1tNiwxCQkJOyB4bW02PShDYkggKiAtRklYKDAuMjI4MDApKQotCXBzcmF3CXhtbTQsMQkJCTsgeG1tND0oQ2JMICogLUZJWCgwLjIyODAwKSkKLQlwYWRkdwl4bW03LFtHT1RPRkYoZWF4LFBXX09ORSldCi0JcGFkZHcJeG1tMCxbR09UT0ZGKGVheCxQV19PTkUpXQotCXBzcmF3CXhtbTcsMQkJCTsgeG1tNz0oQ3JIICogRklYKDAuNDAyMDApKQotCXBzcmF3CXhtbTAsMQkJCTsgeG1tMD0oQ3JMICogRklYKDAuNDAyMDApKQorICAgICAgICBwYWRkdyAgIHhtbTYsW0dPVE9GRihlYXgsUFdfT05FKV0KKyAgICAgICAgcGFkZHcgICB4bW00LFtHT1RPRkYoZWF4LFBXX09ORSldCisgICAgICAgIHBzcmF3ICAgeG1tNiwxICAgICAgICAgICAgICAgICAgOyB4bW02PShDYkggKiAtRklYKDAuMjI4MDApKQorICAgICAgICBwc3JhdyAgIHhtbTQsMSAgICAgICAgICAgICAgICAgIDsgeG1tND0oQ2JMICogLUZJWCgwLjIyODAwKSkKKyAgICAgICAgcGFkZHcgICB4bW03LFtHT1RPRkYoZWF4LFBXX09ORSldCisgICAgICAgIHBhZGR3ICAgeG1tMCxbR09UT0ZGKGVheCxQV19PTkUpXQorICAgICAgICBwc3JhdyAgIHhtbTcsMSAgICAgICAgICAgICAgICAgIDsgeG1tNz0oQ3JIICogRklYKDAuNDAyMDApKQorICAgICAgICBwc3JhdyAgIHhtbTAsMSAgICAgICAgICAgICAgICAgIDsgeG1tMD0oQ3JMICogRklYKDAuNDAyMDApKQogCi0JcGFkZHcJeG1tNix4bW01Ci0JcGFkZHcJeG1tNCx4bW0yCi0JcGFkZHcJeG1tNix4bW01CQk7IHhtbTY9KENiSCAqIEZJWCgxLjc3MjAwKSk9KEItWSlICi0JcGFkZHcJeG1tNCx4bW0yCQk7IHhtbTQ9KENiTCAqIEZJWCgxLjc3MjAwKSk9KEItWSlMCi0JcGFkZHcJeG1tNyx4bW0xCQk7IHhtbTc9KENySCAqIEZJWCgxLjQwMjAwKSk9KFItWSlICi0JcGFkZHcJeG1tMCx4bW0zCQk7IHhtbTA9KENyTCAqIEZJWCgxLjQwMjAwKSk9KFItWSlMCisgICAgICAgIHBhZGR3ICAgeG1tNix4bW01CisgICAgICAgIHBhZGR3ICAgeG1tNCx4bW0yCisgICAgICAgIHBhZGR3ICAgeG1tNix4bW01ICAgICAgICAgICAgICAgOyB4bW02PShDYkggKiBGSVgoMS43NzIwMCkpPShCLVkpSAorICAgICAgICBwYWRkdyAgIHhtbTQseG1tMiAgICAgICAgICAgICAgIDsgeG1tND0oQ2JMICogRklYKDEuNzcyMDApKT0oQi1ZKUwKKyAgICAgICAgcGFkZHcgICB4bW03LHhtbTEgICAgICAgICAgICAgICA7IHhtbTc9KENySCAqIEZJWCgxLjQwMjAwKSk9KFItWSlICisgICAgICAgIHBhZGR3ICAgeG1tMCx4bW0zICAgICAgICAgICAgICAgOyB4bW0wPShDckwgKiBGSVgoMS40MDIwMCkpPShSLVkpTAogCi0JbW92ZHFhCVhNTVdPUkQgW3drKDApXSwgeG1tNgk7IHdrKDApPShCLVkpSAotCW1vdmRxYQlYTU1XT1JEIFt3aygxKV0sIHhtbTcJOyB3aygxKT0oUi1ZKUgKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygwKV0sIHhtbTYgICA7IHdrKDApPShCLVkpSAorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDEpXSwgeG1tNyAgIDsgd2soMSk9KFItWSlICiAKLQltb3ZkcWEgICAgeG1tNix4bW01Ci0JbW92ZHFhICAgIHhtbTcseG1tMgotCXB1bnBja2x3ZCB4bW01LHhtbTEKLQlwdW5wY2tod2QgeG1tNix4bW0xCi0JcG1hZGR3ZCAgIHhtbTUsW0dPVE9GRihlYXgsUFdfTUYwMzQ0X0YwMjg1KV0KLQlwbWFkZHdkICAgeG1tNixbR09UT0ZGKGVheCxQV19NRjAzNDRfRjAyODUpXQotCXB1bnBja2x3ZCB4bW0yLHhtbTMKLQlwdW5wY2tod2QgeG1tNyx4bW0zCi0JcG1hZGR3ZCAgIHhtbTIsW0dPVE9GRihlYXgsUFdfTUYwMzQ0X0YwMjg1KV0KLQlwbWFkZHdkICAgeG1tNyxbR09UT0ZGKGVheCxQV19NRjAzNDRfRjAyODUpXQorICAgICAgICBtb3ZkcWEgICAgeG1tNix4bW01CisgICAgICAgIG1vdmRxYSAgICB4bW03LHhtbTIKKyAgICAgICAgcHVucGNrbHdkIHhtbTUseG1tMQorICAgICAgICBwdW5wY2tod2QgeG1tNix4bW0xCisgICAgICAgIHBtYWRkd2QgICB4bW01LFtHT1RPRkYoZWF4LFBXX01GMDM0NF9GMDI4NSldCisgICAgICAgIHBtYWRkd2QgICB4bW02LFtHT1RPRkYoZWF4LFBXX01GMDM0NF9GMDI4NSldCisgICAgICAgIHB1bnBja2x3ZCB4bW0yLHhtbTMKKyAgICAgICAgcHVucGNraHdkIHhtbTcseG1tMworICAgICAgICBwbWFkZHdkICAgeG1tMixbR09UT0ZGKGVheCxQV19NRjAzNDRfRjAyODUpXQorICAgICAgICBwbWFkZHdkICAgeG1tNyxbR09UT0ZGKGVheCxQV19NRjAzNDRfRjAyODUpXQogCi0JcGFkZGQgICAgIHhtbTUsW0dPVE9GRihlYXgsUERfT05FSEFMRildCi0JcGFkZGQgICAgIHhtbTYsW0dPVE9GRihlYXgsUERfT05FSEFMRildCi0JcHNyYWQgICAgIHhtbTUsU0NBTEVCSVRTCi0JcHNyYWQgICAgIHhtbTYsU0NBTEVCSVRTCi0JcGFkZGQgICAgIHhtbTIsW0dPVE9GRihlYXgsUERfT05FSEFMRildCi0JcGFkZGQgICAgIHhtbTcsW0dPVE9GRihlYXgsUERfT05FSEFMRildCi0JcHNyYWQgICAgIHhtbTIsU0NBTEVCSVRTCi0JcHNyYWQgICAgIHhtbTcsU0NBTEVCSVRTCisgICAgICAgIHBhZGRkICAgICB4bW01LFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXQorICAgICAgICBwYWRkZCAgICAgeG1tNixbR09UT0ZGKGVheCxQRF9PTkVIQUxGKV0KKyAgICAgICAgcHNyYWQgICAgIHhtbTUsU0NBTEVCSVRTCisgICAgICAgIHBzcmFkICAgICB4bW02LFNDQUxFQklUUworICAgICAgICBwYWRkZCAgICAgeG1tMixbR09UT0ZGKGVheCxQRF9PTkVIQUxGKV0KKyAgICAgICAgcGFkZGQgICAgIHhtbTcsW0dPVE9GRihlYXgsUERfT05FSEFMRildCisgICAgICAgIHBzcmFkICAgICB4bW0yLFNDQUxFQklUUworICAgICAgICBwc3JhZCAgICAgeG1tNyxTQ0FMRUJJVFMKIAotCXBhY2tzc2R3ICB4bW01LHhtbTYJOyB4bW01PUNiSCotRklYKDAuMzQ0KStDckgqRklYKDAuMjg1KQotCXBhY2tzc2R3ICB4bW0yLHhtbTcJOyB4bW0yPUNiTCotRklYKDAuMzQ0KStDckwqRklYKDAuMjg1KQotCXBzdWJ3ICAgICB4bW01LHhtbTEJOyB4bW01PUNiSCotRklYKDAuMzQ0KStDckgqLUZJWCgwLjcxNCk9KEctWSlICi0JcHN1YncgICAgIHhtbTIseG1tMwk7IHhtbTI9Q2JMKi1GSVgoMC4zNDQpK0NyTCotRklYKDAuNzE0KT0oRy1ZKUwKKyAgICAgICAgcGFja3NzZHcgIHhtbTUseG1tNiAgICAgOyB4bW01PUNiSCotRklYKDAuMzQ0KStDckgqRklYKDAuMjg1KQorICAgICAgICBwYWNrc3NkdyAgeG1tMix4bW03ICAgICA7IHhtbTI9Q2JMKi1GSVgoMC4zNDQpK0NyTCpGSVgoMC4yODUpCisgICAgICAgIHBzdWJ3ICAgICB4bW01LHhtbTEgICAgIDsgeG1tNT1DYkgqLUZJWCgwLjM0NCkrQ3JIKi1GSVgoMC43MTQpPShHLVkpSAorICAgICAgICBwc3VidyAgICAgeG1tMix4bW0zICAgICA7IHhtbTI9Q2JMKi1GSVgoMC4zNDQpK0NyTCotRklYKDAuNzE0KT0oRy1ZKUwKIAotCW1vdmRxYQlYTU1XT1JEIFt3aygyKV0sIHhtbTUJOyB3aygyKT0oRy1ZKUgKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygyKV0sIHhtbTUgICA7IHdrKDIpPShHLVkpSAogCi0JbW92CWFsLDIJCQk7IFljdHIKLQlqbXAJc2hvcnQgLllsb29wXzFzdAotCWFsaWdueAkxNiw3CisgICAgICAgIG1vdiAgICAgYWwsMiAgICAgICAgICAgICAgICAgICAgOyBZY3RyCisgICAgICAgIGptcCAgICAgc2hvcnQgLllsb29wXzFzdAorICAgICAgICBhbGlnbnggIDE2LDcKIAogLllsb29wXzJuZDoKLQltb3ZkcWEJeG1tMCwgWE1NV09SRCBbd2soMSldCTsgeG1tMD0oUi1ZKUgKLQltb3ZkcWEJeG1tMiwgWE1NV09SRCBbd2soMildCTsgeG1tMj0oRy1ZKUgKLQltb3ZkcWEJeG1tNCwgWE1NV09SRCBbd2soMCldCTsgeG1tND0oQi1ZKUgKLQlhbGlnbngJMTYsNworICAgICAgICBtb3ZkcWEgIHhtbTAsIFhNTVdPUkQgW3drKDEpXSAgIDsgeG1tMD0oUi1ZKUgKKyAgICAgICAgbW92ZHFhICB4bW0yLCBYTU1XT1JEIFt3aygyKV0gICA7IHhtbTI9KEctWSlICisgICAgICAgIG1vdmRxYSAgeG1tNCwgWE1NV09SRCBbd2soMCldICAgOyB4bW00PShCLVkpSAorICAgICAgICBhbGlnbnggIDE2LDcKIAogLllsb29wXzFzdDoKLQltb3ZkcWEJeG1tNywgWE1NV09SRCBbZXNpXQk7IHhtbTc9WSgwMTIzNDU2Nzg5QUJDREVGKQorICAgICAgICBtb3ZkcWEgIHhtbTcsIFhNTVdPUkQgW2VzaV0gICAgIDsgeG1tNz1ZKDAxMjM0NTY3ODlBQkNERUYpCiAKLQlwY21wZXF3CXhtbTYseG1tNgotCXBzcmx3CXhtbTYsQllURV9CSVQJCTsgeG1tNj17MHhGRiAweDAwIDB4RkYgMHgwMCAuLn0KLQlwYW5kCXhtbTYseG1tNwkJOyB4bW02PVkoMDI0NjhBQ0UpPVlFCi0JcHNybHcJeG1tNyxCWVRFX0JJVAkJOyB4bW03PVkoMTM1NzlCREYpPVlPCisgICAgICAgIHBjbXBlcXcgeG1tNix4bW02CisgICAgICAgIHBzcmx3ICAgeG1tNixCWVRFX0JJVCAgICAgICAgICAgOyB4bW02PXsweEZGIDB4MDAgMHhGRiAweDAwIC4ufQorICAgICAgICBwYW5kICAgIHhtbTYseG1tNyAgICAgICAgICAgICAgIDsgeG1tNj1ZKDAyNDY4QUNFKT1ZRQorICAgICAgICBwc3JsdyAgIHhtbTcsQllURV9CSVQgICAgICAgICAgIDsgeG1tNz1ZKDEzNTc5QkRGKT1ZTwogCi0JbW92ZHFhCXhtbTEseG1tMAkJOyB4bW0xPXhtbTA9KFItWSkoTC9IKQotCW1vdmRxYQl4bW0zLHhtbTIJCTsgeG1tMz14bW0yPShHLVkpKEwvSCkKLQltb3ZkcWEJeG1tNSx4bW00CQk7IHhtbTU9eG1tND0oQi1ZKShML0gpCisgICAgICAgIG1vdmRxYSAgeG1tMSx4bW0wICAgICAgICAgICAgICAgOyB4bW0xPXhtbTA9KFItWSkoTC9IKQorICAgICAgICBtb3ZkcWEgIHhtbTMseG1tMiAgICAgICAgICAgICAgIDsgeG1tMz14bW0yPShHLVkpKEwvSCkKKyAgICAgICAgbW92ZHFhICB4bW01LHhtbTQgICAgICAgICAgICAgICA7IHhtbTU9eG1tND0oQi1ZKShML0gpCiAKLQlwYWRkdyAgICAgeG1tMCx4bW02CQk7IHhtbTA9KChSLVkpK1lFKT1SRT1SKDAyNDY4QUNFKQotCXBhZGR3ICAgICB4bW0xLHhtbTcJCTsgeG1tMT0oKFItWSkrWU8pPVJPPVIoMTM1NzlCREYpCi0JcGFja3Vzd2IgIHhtbTAseG1tMAkJOyB4bW0wPVIoMDI0NjhBQ0UqKioqKioqKikKLQlwYWNrdXN3YiAgeG1tMSx4bW0xCQk7IHhtbTE9UigxMzU3OUJERioqKioqKioqKQorICAgICAgICBwYWRkdyAgICAgeG1tMCx4bW02ICAgICAgICAgICAgIDsgeG1tMD0oKFItWSkrWUUpPVJFPVIoMDI0NjhBQ0UpCisgICAgICAgIHBhZGR3ICAgICB4bW0xLHhtbTcgICAgICAgICAgICAgOyB4bW0xPSgoUi1ZKStZTyk9Uk89UigxMzU3OUJERikKKyAgICAgICAgcGFja3Vzd2IgIHhtbTAseG1tMCAgICAgICAgICAgICA7IHhtbTA9UigwMjQ2OEFDRSoqKioqKioqKQorICAgICAgICBwYWNrdXN3YiAgeG1tMSx4bW0xICAgICAgICAgICAgIDsgeG1tMT1SKDEzNTc5QkRGKioqKioqKiopCiAKLQlwYWRkdyAgICAgeG1tMix4bW02CQk7IHhtbTI9KChHLVkpK1lFKT1HRT1HKDAyNDY4QUNFKQotCXBhZGR3ICAgICB4bW0zLHhtbTcJCTsgeG1tMz0oKEctWSkrWU8pPUdPPUcoMTM1NzlCREYpCi0JcGFja3Vzd2IgIHhtbTIseG1tMgkJOyB4bW0yPUcoMDI0NjhBQ0UqKioqKioqKikKLQlwYWNrdXN3YiAgeG1tMyx4bW0zCQk7IHhtbTM9RygxMzU3OUJERioqKioqKioqKQorICAgICAgICBwYWRkdyAgICAgeG1tMix4bW02ICAgICAgICAgICAgIDsgeG1tMj0oKEctWSkrWUUpPUdFPUcoMDI0NjhBQ0UpCisgICAgICAgIHBhZGR3ICAgICB4bW0zLHhtbTcgICAgICAgICAgICAgOyB4bW0zPSgoRy1ZKStZTyk9R089RygxMzU3OUJERikKKyAgICAgICAgcGFja3Vzd2IgIHhtbTIseG1tMiAgICAgICAgICAgICA7IHhtbTI9RygwMjQ2OEFDRSoqKioqKioqKQorICAgICAgICBwYWNrdXN3YiAgeG1tMyx4bW0zICAgICAgICAgICAgIDsgeG1tMz1HKDEzNTc5QkRGKioqKioqKiopCiAKLQlwYWRkdyAgICAgeG1tNCx4bW02CQk7IHhtbTQ9KChCLVkpK1lFKT1CRT1CKDAyNDY4QUNFKQotCXBhZGR3ICAgICB4bW01LHhtbTcJCTsgeG1tNT0oKEItWSkrWU8pPUJPPUIoMTM1NzlCREYpCi0JcGFja3Vzd2IgIHhtbTQseG1tNAkJOyB4bW00PUIoMDI0NjhBQ0UqKioqKioqKikKLQlwYWNrdXN3YiAgeG1tNSx4bW01CQk7IHhtbTU9QigxMzU3OUJERioqKioqKioqKQorICAgICAgICBwYWRkdyAgICAgeG1tNCx4bW02ICAgICAgICAgICAgIDsgeG1tND0oKEItWSkrWUUpPUJFPUIoMDI0NjhBQ0UpCisgICAgICAgIHBhZGR3ICAgICB4bW01LHhtbTcgICAgICAgICAgICAgOyB4bW01PSgoQi1ZKStZTyk9Qk89QigxMzU3OUJERikKKyAgICAgICAgcGFja3Vzd2IgIHhtbTQseG1tNCAgICAgICAgICAgICA7IHhtbTQ9QigwMjQ2OEFDRSoqKioqKioqKQorICAgICAgICBwYWNrdXN3YiAgeG1tNSx4bW01ICAgICAgICAgICAgIDsgeG1tNT1CKDEzNTc5QkRGKioqKioqKiopCiAKICVpZiBSR0JfUElYRUxTSVpFID09IDMgOyAtLS0tLS0tLS0tLS0tLS0KIAotCTsgeG1tQT0oMDAgMDIgMDQgMDYgMDggMEEgMEMgMEUgKiopLCB4bW1CPSgwMSAwMyAwNSAwNyAwOSAwQiAwRCAwRiAqKikKLQk7IHhtbUM9KDEwIDEyIDE0IDE2IDE4IDFBIDFDIDFFICoqKSwgeG1tRD0oMTEgMTMgMTUgMTcgMTkgMUIgMUQgMUYgKiopCi0JOyB4bW1FPSgyMCAyMiAyNCAyNiAyOCAyQSAyQyAyRSAqKiksIHhtbUY9KDIxIDIzIDI1IDI3IDI5IDJCIDJEIDJGICoqKQotCTsgeG1tRz0oKiogKiogKiogKiogKiogKiogKiogKiogKiopLCB4bW1IPSgqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKikKKyAgICAgICAgOyB4bW1BPSgwMCAwMiAwNCAwNiAwOCAwQSAwQyAwRSAqKiksIHhtbUI9KDAxIDAzIDA1IDA3IDA5IDBCIDBEIDBGICoqKQorICAgICAgICA7IHhtbUM9KDEwIDEyIDE0IDE2IDE4IDFBIDFDIDFFICoqKSwgeG1tRD0oMTEgMTMgMTUgMTcgMTkgMUIgMUQgMUYgKiopCisgICAgICAgIDsgeG1tRT0oMjAgMjIgMjQgMjYgMjggMkEgMkMgMkUgKiopLCB4bW1GPSgyMSAyMyAyNSAyNyAyOSAyQiAyRCAyRiAqKikKKyAgICAgICAgOyB4bW1HPSgqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiksIHhtbUg9KCoqICoqICoqICoqICoqICoqICoqICoqICoqKQogCi0JcHVucGNrbGJ3IHhtbUEseG1tQwk7IHhtbUE9KDAwIDEwIDAyIDEyIDA0IDE0IDA2IDE2IDA4IDE4IDBBIDFBIDBDIDFDIDBFIDFFKQotCXB1bnBja2xidyB4bW1FLHhtbUIJOyB4bW1FPSgyMCAwMSAyMiAwMyAyNCAwNSAyNiAwNyAyOCAwOSAyQSAwQiAyQyAwRCAyRSAwRikKLQlwdW5wY2tsYncgeG1tRCx4bW1GCTsgeG1tRD0oMTEgMjEgMTMgMjMgMTUgMjUgMTcgMjcgMTkgMjkgMUIgMkIgMUQgMkQgMUYgMkYpCisgICAgICAgIHB1bnBja2xidyB4bW1BLHhtbUMgICAgIDsgeG1tQT0oMDAgMTAgMDIgMTIgMDQgMTQgMDYgMTYgMDggMTggMEEgMUEgMEMgMUMgMEUgMUUpCisgICAgICAgIHB1bnBja2xidyB4bW1FLHhtbUIgICAgIDsgeG1tRT0oMjAgMDEgMjIgMDMgMjQgMDUgMjYgMDcgMjggMDkgMkEgMEIgMkMgMEQgMkUgMEYpCisgICAgICAgIHB1bnBja2xidyB4bW1ELHhtbUYgICAgIDsgeG1tRD0oMTEgMjEgMTMgMjMgMTUgMjUgMTcgMjcgMTkgMjkgMUIgMkIgMUQgMkQgMUYgMkYpCiAKLQltb3ZkcWEgICAgeG1tRyx4bW1BCi0JbW92ZHFhICAgIHhtbUgseG1tQQotCXB1bnBja2x3ZCB4bW1BLHhtbUUJOyB4bW1BPSgwMCAxMCAyMCAwMSAwMiAxMiAyMiAwMyAwNCAxNCAyNCAwNSAwNiAxNiAyNiAwNykKLQlwdW5wY2tod2QgeG1tRyx4bW1FCTsgeG1tRz0oMDggMTggMjggMDkgMEEgMUEgMkEgMEIgMEMgMUMgMkMgMEQgMEUgMUUgMkUgMEYpCisgICAgICAgIG1vdmRxYSAgICB4bW1HLHhtbUEKKyAgICAgICAgbW92ZHFhICAgIHhtbUgseG1tQQorICAgICAgICBwdW5wY2tsd2QgeG1tQSx4bW1FICAgICA7IHhtbUE9KDAwIDEwIDIwIDAxIDAyIDEyIDIyIDAzIDA0IDE0IDI0IDA1IDA2IDE2IDI2IDA3KQorICAgICAgICBwdW5wY2tod2QgeG1tRyx4bW1FICAgICA7IHhtbUc9KDA4IDE4IDI4IDA5IDBBIDFBIDJBIDBCIDBDIDFDIDJDIDBEIDBFIDFFIDJFIDBGKQogCi0JcHNybGRxICAgIHhtbUgsMgk7IHhtbUg9KDAyIDEyIDA0IDE0IDA2IDE2IDA4IDE4IDBBIDFBIDBDIDFDIDBFIDFFIC0tIC0tKQotCXBzcmxkcSAgICB4bW1FLDIJOyB4bW1FPSgyMiAwMyAyNCAwNSAyNiAwNyAyOCAwOSAyQSAwQiAyQyAwRCAyRSAwRiAtLSAtLSkKKyAgICAgICAgcHNybGRxICAgIHhtbUgsMiAgICAgICAgOyB4bW1IPSgwMiAxMiAwNCAxNCAwNiAxNiAwOCAxOCAwQSAxQSAwQyAxQyAwRSAxRSAtLSAtLSkKKyAgICAgICAgcHNybGRxICAgIHhtbUUsMiAgICAgICAgOyB4bW1FPSgyMiAwMyAyNCAwNSAyNiAwNyAyOCAwOSAyQSAwQiAyQyAwRCAyRSAwRiAtLSAtLSkKIAotCW1vdmRxYSAgICB4bW1DLHhtbUQKLQltb3ZkcWEgICAgeG1tQix4bW1ECi0JcHVucGNrbHdkIHhtbUQseG1tSAk7IHhtbUQ9KDExIDIxIDAyIDEyIDEzIDIzIDA0IDE0IDE1IDI1IDA2IDE2IDE3IDI3IDA4IDE4KQotCXB1bnBja2h3ZCB4bW1DLHhtbUgJOyB4bW1DPSgxOSAyOSAwQSAxQSAxQiAyQiAwQyAxQyAxRCAyRCAwRSAxRSAxRiAyRiAtLSAtLSkKKyAgICAgICAgbW92ZHFhICAgIHhtbUMseG1tRAorICAgICAgICBtb3ZkcWEgICAgeG1tQix4bW1ECisgICAgICAgIHB1bnBja2x3ZCB4bW1ELHhtbUggICAgIDsgeG1tRD0oMTEgMjEgMDIgMTIgMTMgMjMgMDQgMTQgMTUgMjUgMDYgMTYgMTcgMjcgMDggMTgpCisgICAgICAgIHB1bnBja2h3ZCB4bW1DLHhtbUggICAgIDsgeG1tQz0oMTkgMjkgMEEgMUEgMUIgMkIgMEMgMUMgMUQgMkQgMEUgMUUgMUYgMkYgLS0gLS0pCiAKLQlwc3JsZHEgICAgeG1tQiwyCTsgeG1tQj0oMTMgMjMgMTUgMjUgMTcgMjcgMTkgMjkgMUIgMkIgMUQgMkQgMUYgMkYgLS0gLS0pCisgICAgICAgIHBzcmxkcSAgICB4bW1CLDIgICAgICAgIDsgeG1tQj0oMTMgMjMgMTUgMjUgMTcgMjcgMTkgMjkgMUIgMkIgMUQgMkQgMUYgMkYgLS0gLS0pCiAKLQltb3ZkcWEgICAgeG1tRix4bW1FCi0JcHVucGNrbHdkIHhtbUUseG1tQgk7IHhtbUU9KDIyIDAzIDEzIDIzIDI0IDA1IDE1IDI1IDI2IDA3IDE3IDI3IDI4IDA5IDE5IDI5KQotCXB1bnBja2h3ZCB4bW1GLHhtbUIJOyB4bW1GPSgyQSAwQiAxQiAyQiAyQyAwRCAxRCAyRCAyRSAwRiAxRiAyRiAtLSAtLSAtLSAtLSkKKyAgICAgICAgbW92ZHFhICAgIHhtbUYseG1tRQorICAgICAgICBwdW5wY2tsd2QgeG1tRSx4bW1CICAgICA7IHhtbUU9KDIyIDAzIDEzIDIzIDI0IDA1IDE1IDI1IDI2IDA3IDE3IDI3IDI4IDA5IDE5IDI5KQorICAgICAgICBwdW5wY2tod2QgeG1tRix4bW1CICAgICA7IHhtbUY9KDJBIDBCIDFCIDJCIDJDIDBEIDFEIDJEIDJFIDBGIDFGIDJGIC0tIC0tIC0tIC0tKQogCi0JcHNodWZkICAgIHhtbUgseG1tQSwweDRFOyB4bW1IPSgwNCAxNCAyNCAwNSAwNiAxNiAyNiAwNyAwMCAxMCAyMCAwMSAwMiAxMiAyMiAwMykKLQltb3ZkcWEgICAgeG1tQix4bW1FCi0JcHVucGNrbGRxIHhtbUEseG1tRAk7IHhtbUE9KDAwIDEwIDIwIDAxIDExIDIxIDAyIDEyIDAyIDEyIDIyIDAzIDEzIDIzIDA0IDE0KQotCXB1bnBja2xkcSB4bW1FLHhtbUgJOyB4bW1FPSgyMiAwMyAxMyAyMyAwNCAxNCAyNCAwNSAyNCAwNSAxNSAyNSAwNiAxNiAyNiAwNykKLQlwdW5wY2toZHEgeG1tRCx4bW1CCTsgeG1tRD0oMTUgMjUgMDYgMTYgMjYgMDcgMTcgMjcgMTcgMjcgMDggMTggMjggMDkgMTkgMjkpCisgICAgICAgIHBzaHVmZCAgICB4bW1ILHhtbUEsMHg0RTsgeG1tSD0oMDQgMTQgMjQgMDUgMDYgMTYgMjYgMDcgMDAgMTAgMjAgMDEgMDIgMTIgMjIgMDMpCisgICAgICAgIG1vdmRxYSAgICB4bW1CLHhtbUUKKyAgICAgICAgcHVucGNrbGRxIHhtbUEseG1tRCAgICAgOyB4bW1BPSgwMCAxMCAyMCAwMSAxMSAyMSAwMiAxMiAwMiAxMiAyMiAwMyAxMyAyMyAwNCAxNCkKKyAgICAgICAgcHVucGNrbGRxIHhtbUUseG1tSCAgICAgOyB4bW1FPSgyMiAwMyAxMyAyMyAwNCAxNCAyNCAwNSAyNCAwNSAxNSAyNSAwNiAxNiAyNiAwNykKKyAgICAgICAgcHVucGNraGRxIHhtbUQseG1tQiAgICAgOyB4bW1EPSgxNSAyNSAwNiAxNiAyNiAwNyAxNyAyNyAxNyAyNyAwOCAxOCAyOCAwOSAxOSAyOSkKIAotCXBzaHVmZCAgICB4bW1ILHhtbUcsMHg0RTsgeG1tSD0oMEMgMUMgMkMgMEQgMEUgMUUgMkUgMEYgMDggMTggMjggMDkgMEEgMUEgMkEgMEIpCi0JbW92ZHFhICAgIHhtbUIseG1tRgotCXB1bnBja2xkcSB4bW1HLHhtbUMJOyB4bW1HPSgwOCAxOCAyOCAwOSAxOSAyOSAwQSAxQSAwQSAxQSAyQSAwQiAxQiAyQiAwQyAxQykKLQlwdW5wY2tsZHEgeG1tRix4bW1ICTsgeG1tRj0oMkEgMEIgMUIgMkIgMEMgMUMgMkMgMEQgMkMgMEQgMUQgMkQgMEUgMUUgMkUgMEYpCi0JcHVucGNraGRxIHhtbUMseG1tQgk7IHhtbUM9KDFEIDJEIDBFIDFFIDJFIDBGIDFGIDJGIDFGIDJGIC0tIC0tIC0tIC0tIC0tIC0tKQorICAgICAgICBwc2h1ZmQgICAgeG1tSCx4bW1HLDB4NEU7IHhtbUg9KDBDIDFDIDJDIDBEIDBFIDFFIDJFIDBGIDA4IDE4IDI4IDA5IDBBIDFBIDJBIDBCKQorICAgICAgICBtb3ZkcWEgICAgeG1tQix4bW1GCisgICAgICAgIHB1bnBja2xkcSB4bW1HLHhtbUMgICAgIDsgeG1tRz0oMDggMTggMjggMDkgMTkgMjkgMEEgMUEgMEEgMUEgMkEgMEIgMUIgMkIgMEMgMUMpCisgICAgICAgIHB1bnBja2xkcSB4bW1GLHhtbUggICAgIDsgeG1tRj0oMkEgMEIgMUIgMkIgMEMgMUMgMkMgMEQgMkMgMEQgMUQgMkQgMEUgMUUgMkUgMEYpCisgICAgICAgIHB1bnBja2hkcSB4bW1DLHhtbUIgICAgIDsgeG1tQz0oMUQgMkQgMEUgMUUgMkUgMEYgMUYgMkYgMUYgMkYgLS0gLS0gLS0gLS0gLS0gLS0pCiAKLQlwdW5wY2tscWRxIHhtbUEseG1tRQk7IHhtbUE9KDAwIDEwIDIwIDAxIDExIDIxIDAyIDEyIDIyIDAzIDEzIDIzIDA0IDE0IDI0IDA1KQotCXB1bnBja2xxZHEgeG1tRCx4bW1HCTsgeG1tRD0oMTUgMjUgMDYgMTYgMjYgMDcgMTcgMjcgMDggMTggMjggMDkgMTkgMjkgMEEgMUEpCi0JcHVucGNrbHFkcSB4bW1GLHhtbUMJOyB4bW1GPSgyQSAwQiAxQiAyQiAwQyAxQyAyQyAwRCAxRCAyRCAwRSAxRSAyRSAwRiAxRiAyRikKKyAgICAgICAgcHVucGNrbHFkcSB4bW1BLHhtbUUgICAgOyB4bW1BPSgwMCAxMCAyMCAwMSAxMSAyMSAwMiAxMiAyMiAwMyAxMyAyMyAwNCAxNCAyNCAwNSkKKyAgICAgICAgcHVucGNrbHFkcSB4bW1ELHhtbUcgICAgOyB4bW1EPSgxNSAyNSAwNiAxNiAyNiAwNyAxNyAyNyAwOCAxOCAyOCAwOSAxOSAyOSAwQSAxQSkKKyAgICAgICAgcHVucGNrbHFkcSB4bW1GLHhtbUMgICAgOyB4bW1GPSgyQSAwQiAxQiAyQiAwQyAxQyAyQyAwRCAxRCAyRCAwRSAxRSAyRSAwRiAxRiAyRikKIAotCWNtcAllY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKLQlqYglzaG9ydCAuY29sdW1uX3N0MzIKKyAgICAgICAgY21wICAgICBlY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKyAgICAgICAgamIgICAgICBzaG9ydCAuY29sdW1uX3N0MzIKIAotCXRlc3QJZWRpLCBTSVpFT0ZfWE1NV09SRC0xCi0Jam56CXNob3J0IC5vdXQxCi0JOyAtLShhbGlnbmVkKS0tLS0tLS0tLS0tLS0tLS0tLS0KLQltb3ZudGRxCVhNTVdPUkQgW2VkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tQQotCW1vdm50ZHEJWE1NV09SRCBbZWRpKzEqU0laRU9GX1hNTVdPUkRdLCB4bW1ECi0JbW92bnRkcQlYTU1XT1JEIFtlZGkrMipTSVpFT0ZfWE1NV09SRF0sIHhtbUYKLQlqbXAJc2hvcnQgLm91dDAKLS5vdXQxOgk7IC0tKHVuYWxpZ25lZCktLS0tLS0tLS0tLS0tLS0tLQotCW1vdmRxdQlYTU1XT1JEIFtlZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbUEKLQltb3ZkcXUJWE1NV09SRCBbZWRpKzEqU0laRU9GX1hNTVdPUkRdLCB4bW1ECi0JbW92ZHF1CVhNTVdPUkQgW2VkaSsyKlNJWkVPRl9YTU1XT1JEXSwgeG1tRgorICAgICAgICB0ZXN0ICAgIGVkaSwgU0laRU9GX1hNTVdPUkQtMQorICAgICAgICBqbnogICAgIHNob3J0IC5vdXQxCisgICAgICAgIDsgLS0oYWxpZ25lZCktLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIG1vdm50ZHEgWE1NV09SRCBbZWRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW1BCisgICAgICAgIG1vdm50ZHEgWE1NV09SRCBbZWRpKzEqU0laRU9GX1hNTVdPUkRdLCB4bW1ECisgICAgICAgIG1vdm50ZHEgWE1NV09SRCBbZWRpKzIqU0laRU9GX1hNTVdPUkRdLCB4bW1GCisgICAgICAgIGptcCAgICAgc2hvcnQgLm91dDAKKy5vdXQxOiAgOyAtLSh1bmFsaWduZWQpLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgbW92ZHF1ICBYTU1XT1JEIFtlZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbUEKKyAgICAgICAgbW92ZHF1ICBYTU1XT1JEIFtlZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbUQKKyAgICAgICAgbW92ZHF1ICBYTU1XT1JEIFtlZGkrMipTSVpFT0ZfWE1NV09SRF0sIHhtbUYKIC5vdXQwOgotCWFkZAllZGksIGJ5dGUgUkdCX1BJWEVMU0laRSpTSVpFT0ZfWE1NV09SRAk7IG91dHB0cgotCXN1YgllY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKLQlqegluZWFyIC5lbmRjb2x1bW4KKyAgICAgICAgYWRkICAgICBlZGksIGJ5dGUgUkdCX1BJWEVMU0laRSpTSVpFT0ZfWE1NV09SRCAgOyBvdXRwdHIKKyAgICAgICAgc3ViICAgICBlY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKyAgICAgICAganogICAgICBuZWFyIC5lbmRjb2x1bW4KIAotCWFkZAllc2ksIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBpbnB0cjAKLQlkZWMJYWwJCQk7IFljdHIKLQlqbnoJbmVhciAuWWxvb3BfMm5kCisgICAgICAgIGFkZCAgICAgZXNpLCBieXRlIFNJWkVPRl9YTU1XT1JEICAgICAgICA7IGlucHRyMAorICAgICAgICBkZWMgICAgIGFsICAgICAgICAgICAgICAgICAgICAgIDsgWWN0cgorICAgICAgICBqbnogICAgIG5lYXIgLllsb29wXzJuZAogCi0JYWRkCWVieCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IGlucHRyMQotCWFkZAllZHgsIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBpbnB0cjIKLQlqbXAJbmVhciAuY29sdW1ubG9vcAotCWFsaWdueAkxNiw3CisgICAgICAgIGFkZCAgICAgZWJ4LCBieXRlIFNJWkVPRl9YTU1XT1JEICAgICAgICA7IGlucHRyMQorICAgICAgICBhZGQgICAgIGVkeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRCAgICAgICAgOyBpbnB0cjIKKyAgICAgICAgam1wICAgICBuZWFyIC5jb2x1bW5sb29wCisgICAgICAgIGFsaWdueCAgMTYsNwogCiAuY29sdW1uX3N0MzI6Ci0JbGVhCWVjeCwgW2VjeCtlY3gqMl0JCTsgaW11bCBlY3gsIFJHQl9QSVhFTFNJWkUKLQljbXAJZWN4LCBieXRlIDIqU0laRU9GX1hNTVdPUkQKLQlqYglzaG9ydCAuY29sdW1uX3N0MTYKLQltb3ZkcXUJWE1NV09SRCBbZWRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW1BCi0JbW92ZHF1CVhNTVdPUkQgW2VkaSsxKlNJWkVPRl9YTU1XT1JEXSwgeG1tRAotCWFkZAllZGksIGJ5dGUgMipTSVpFT0ZfWE1NV09SRAk7IG91dHB0cgotCW1vdmRxYQl4bW1BLHhtbUYKLQlzdWIJZWN4LCBieXRlIDIqU0laRU9GX1hNTVdPUkQKLQlqbXAJc2hvcnQgLmNvbHVtbl9zdDE1CisgICAgICAgIGxlYSAgICAgZWN4LCBbZWN4K2VjeCoyXSAgICAgICAgICAgICAgICA7IGltdWwgZWN4LCBSR0JfUElYRUxTSVpFCisgICAgICAgIGNtcCAgICAgZWN4LCBieXRlIDIqU0laRU9GX1hNTVdPUkQKKyAgICAgICAgamIgICAgICBzaG9ydCAuY29sdW1uX3N0MTYKKyAgICAgICAgbW92ZHF1ICBYTU1XT1JEIFtlZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbUEKKyAgICAgICAgbW92ZHF1ICBYTU1XT1JEIFtlZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbUQKKyAgICAgICAgYWRkICAgICBlZGksIGJ5dGUgMipTSVpFT0ZfWE1NV09SRCAgICAgIDsgb3V0cHRyCisgICAgICAgIG1vdmRxYSAgeG1tQSx4bW1GCisgICAgICAgIHN1YiAgICAgZWN4LCBieXRlIDIqU0laRU9GX1hNTVdPUkQKKyAgICAgICAgam1wICAgICBzaG9ydCAuY29sdW1uX3N0MTUKIC5jb2x1bW5fc3QxNjoKLQljbXAJZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JECi0JamIJc2hvcnQgLmNvbHVtbl9zdDE1Ci0JbW92ZHF1CVhNTVdPUkQgW2VkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tQQotCWFkZAllZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKLQltb3ZkcWEJeG1tQSx4bW1ECi0Jc3ViCWVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorICAgICAgICBjbXAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorICAgICAgICBqYiAgICAgIHNob3J0IC5jb2x1bW5fc3QxNQorICAgICAgICBtb3ZkcXUgIFhNTVdPUkQgW2VkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tQQorICAgICAgICBhZGQgICAgIGVkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRCAgICAgICAgOyBvdXRwdHIKKyAgICAgICAgbW92ZHFhICB4bW1BLHhtbUQKKyAgICAgICAgc3ViICAgICBlY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKIC5jb2x1bW5fc3QxNToKLQk7IFN0b3JlIHRoZSBsb3dlciA4IGJ5dGVzIG9mIHhtbUEgdG8gdGhlIG91dHB1dCB3aGVuIGl0IGhhcyBlbm91Z2gKLQk7IHNwYWNlLgotCWNtcAllY3gsIGJ5dGUgU0laRU9GX01NV09SRAotCWpiCXNob3J0IC5jb2x1bW5fc3Q3Ci0JbW92cQlYTU1fTU1XT1JEIFtlZGldLCB4bW1BCi0JYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfTU1XT1JECi0Jc3ViCWVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECi0JcHNybGRxCXhtbUEsIFNJWkVPRl9NTVdPUkQKKyAgICAgICAgOyBTdG9yZSB0aGUgbG93ZXIgOCBieXRlcyBvZiB4bW1BIHRvIHRoZSBvdXRwdXQgd2hlbiBpdCBoYXMgZW5vdWdoCisgICAgICAgIDsgc3BhY2UuCisgICAgICAgIGNtcCAgICAgZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQKKyAgICAgICAgamIgICAgICBzaG9ydCAuY29sdW1uX3N0NworICAgICAgICBtb3ZxICAgIFhNTV9NTVdPUkQgW2VkaV0sIHhtbUEKKyAgICAgICAgYWRkICAgICBlZGksIGJ5dGUgU0laRU9GX01NV09SRAorICAgICAgICBzdWIgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECisgICAgICAgIHBzcmxkcSAgeG1tQSwgU0laRU9GX01NV09SRAogLmNvbHVtbl9zdDc6Ci0JOyBTdG9yZSB0aGUgbG93ZXIgNCBieXRlcyBvZiB4bW1BIHRvIHRoZSBvdXRwdXQgd2hlbiBpdCBoYXMgZW5vdWdoCi0JOyBzcGFjZS4KLQljbXAJZWN4LCBieXRlIFNJWkVPRl9EV09SRAotCWpiCXNob3J0IC5jb2x1bW5fc3QzCi0JbW92ZAlYTU1fRFdPUkQgW2VkaV0sIHhtbUEKLQlhZGQJZWRpLCBieXRlIFNJWkVPRl9EV09SRAotCXN1YgllY3gsIGJ5dGUgU0laRU9GX0RXT1JECi0JcHNybGRxCXhtbUEsIFNJWkVPRl9EV09SRAorICAgICAgICA7IFN0b3JlIHRoZSBsb3dlciA0IGJ5dGVzIG9mIHhtbUEgdG8gdGhlIG91dHB1dCB3aGVuIGl0IGhhcyBlbm91Z2gKKyAgICAgICAgOyBzcGFjZS4KKyAgICAgICAgY21wICAgICBlY3gsIGJ5dGUgU0laRU9GX0RXT1JECisgICAgICAgIGpiICAgICAgc2hvcnQgLmNvbHVtbl9zdDMKKyAgICAgICAgbW92ZCAgICBYTU1fRFdPUkQgW2VkaV0sIHhtbUEKKyAgICAgICAgYWRkICAgICBlZGksIGJ5dGUgU0laRU9GX0RXT1JECisgICAgICAgIHN1YiAgICAgZWN4LCBieXRlIFNJWkVPRl9EV09SRAorICAgICAgICBwc3JsZHEgIHhtbUEsIFNJWkVPRl9EV09SRAogLmNvbHVtbl9zdDM6Ci0JOyBTdG9yZSB0aGUgbG93ZXIgMiBieXRlcyBvZiBlYXggdG8gdGhlIG91dHB1dCB3aGVuIGl0IGhhcyBlbm91Z2gKLQk7IHNwYWNlLgotCW1vdmQJZWF4LCB4bW1BCi0JY21wCWVjeCwgYnl0ZSBTSVpFT0ZfV09SRAotCWpiCXNob3J0IC5jb2x1bW5fc3QxCi0JbW92CVdPUkQgW2VkaV0sIGF4Ci0JYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfV09SRAotCXN1YgllY3gsIGJ5dGUgU0laRU9GX1dPUkQKLQlzaHIJZWF4LCAxNgorICAgICAgICA7IFN0b3JlIHRoZSBsb3dlciAyIGJ5dGVzIG9mIGVheCB0byB0aGUgb3V0cHV0IHdoZW4gaXQgaGFzIGVub3VnaAorICAgICAgICA7IHNwYWNlLgorICAgICAgICBtb3ZkICAgIGVheCwgeG1tQQorICAgICAgICBjbXAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfV09SRAorICAgICAgICBqYiAgICAgIHNob3J0IC5jb2x1bW5fc3QxCisgICAgICAgIG1vdiAgICAgV09SRCBbZWRpXSwgYXgKKyAgICAgICAgYWRkICAgICBlZGksIGJ5dGUgU0laRU9GX1dPUkQKKyAgICAgICAgc3ViICAgICBlY3gsIGJ5dGUgU0laRU9GX1dPUkQKKyAgICAgICAgc2hyICAgICBlYXgsIDE2CiAuY29sdW1uX3N0MToKLQk7IFN0b3JlIHRoZSBsb3dlciAxIGJ5dGUgb2YgZWF4IHRvIHRoZSBvdXRwdXQgd2hlbiBpdCBoYXMgZW5vdWdoCi0JOyBzcGFjZS4KLQl0ZXN0CWVjeCwgZWN4Ci0JanoJc2hvcnQgLmVuZGNvbHVtbgotCW1vdglCWVRFIFtlZGldLCBhbAorICAgICAgICA7IFN0b3JlIHRoZSBsb3dlciAxIGJ5dGUgb2YgZWF4IHRvIHRoZSBvdXRwdXQgd2hlbiBpdCBoYXMgZW5vdWdoCisgICAgICAgIDsgc3BhY2UuCisgICAgICAgIHRlc3QgICAgZWN4LCBlY3gKKyAgICAgICAganogICAgICBzaG9ydCAuZW5kY29sdW1uCisgICAgICAgIG1vdiAgICAgQllURSBbZWRpXSwgYWwKIAogJWVsc2UgOyBSR0JfUElYRUxTSVpFID09IDQgOyAtLS0tLS0tLS0tLQogCiAlaWZkZWYgUkdCWF9GSUxMRVJfMFhGRgotCXBjbXBlcWIgICB4bW02LHhtbTYJCTsgeG1tNj1YRT1YKDAyNDY4QUNFKioqKioqKiopCi0JcGNtcGVxYiAgIHhtbTcseG1tNwkJOyB4bW03PVhPPVgoMTM1NzlCREYqKioqKioqKikKKyAgICAgICAgcGNtcGVxYiAgIHhtbTYseG1tNiAgICAgICAgICAgICA7IHhtbTY9WEU9WCgwMjQ2OEFDRSoqKioqKioqKQorICAgICAgICBwY21wZXFiICAgeG1tNyx4bW03ICAgICAgICAgICAgIDsgeG1tNz1YTz1YKDEzNTc5QkRGKioqKioqKiopCiAlZWxzZQotCXB4b3IgICAgICB4bW02LHhtbTYJCTsgeG1tNj1YRT1YKDAyNDY4QUNFKioqKioqKiopCi0JcHhvciAgICAgIHhtbTcseG1tNwkJOyB4bW03PVhPPVgoMTM1NzlCREYqKioqKioqKikKKyAgICAgICAgcHhvciAgICAgIHhtbTYseG1tNiAgICAgICAgICAgICA7IHhtbTY9WEU9WCgwMjQ2OEFDRSoqKioqKioqKQorICAgICAgICBweG9yICAgICAgeG1tNyx4bW03ICAgICAgICAgICAgIDsgeG1tNz1YTz1YKDEzNTc5QkRGKioqKioqKiopCiAlZW5kaWYKLQk7IHhtbUE9KDAwIDAyIDA0IDA2IDA4IDBBIDBDIDBFICoqKSwgeG1tQj0oMDEgMDMgMDUgMDcgMDkgMEIgMEQgMEYgKiopCi0JOyB4bW1DPSgxMCAxMiAxNCAxNiAxOCAxQSAxQyAxRSAqKiksIHhtbUQ9KDExIDEzIDE1IDE3IDE5IDFCIDFEIDFGICoqKQotCTsgeG1tRT0oMjAgMjIgMjQgMjYgMjggMkEgMkMgMkUgKiopLCB4bW1GPSgyMSAyMyAyNSAyNyAyOSAyQiAyRCAyRiAqKikKLQk7IHhtbUc9KDMwIDMyIDM0IDM2IDM4IDNBIDNDIDNFICoqKSwgeG1tSD0oMzEgMzMgMzUgMzcgMzkgM0IgM0QgM0YgKiopCisgICAgICAgIDsgeG1tQT0oMDAgMDIgMDQgMDYgMDggMEEgMEMgMEUgKiopLCB4bW1CPSgwMSAwMyAwNSAwNyAwOSAwQiAwRCAwRiAqKikKKyAgICAgICAgOyB4bW1DPSgxMCAxMiAxNCAxNiAxOCAxQSAxQyAxRSAqKiksIHhtbUQ9KDExIDEzIDE1IDE3IDE5IDFCIDFEIDFGICoqKQorICAgICAgICA7IHhtbUU9KDIwIDIyIDI0IDI2IDI4IDJBIDJDIDJFICoqKSwgeG1tRj0oMjEgMjMgMjUgMjcgMjkgMkIgMkQgMkYgKiopCisgICAgICAgIDsgeG1tRz0oMzAgMzIgMzQgMzYgMzggM0EgM0MgM0UgKiopLCB4bW1IPSgzMSAzMyAzNSAzNyAzOSAzQiAzRCAzRiAqKikKIAotCXB1bnBja2xidyB4bW1BLHhtbUMJOyB4bW1BPSgwMCAxMCAwMiAxMiAwNCAxNCAwNiAxNiAwOCAxOCAwQSAxQSAwQyAxQyAwRSAxRSkKLQlwdW5wY2tsYncgeG1tRSx4bW1HCTsgeG1tRT0oMjAgMzAgMjIgMzIgMjQgMzQgMjYgMzYgMjggMzggMkEgM0EgMkMgM0MgMkUgM0UpCi0JcHVucGNrbGJ3IHhtbUIseG1tRAk7IHhtbUI9KDAxIDExIDAzIDEzIDA1IDE1IDA3IDE3IDA5IDE5IDBCIDFCIDBEIDFEIDBGIDFGKQotCXB1bnBja2xidyB4bW1GLHhtbUgJOyB4bW1GPSgyMSAzMSAyMyAzMyAyNSAzNSAyNyAzNyAyOSAzOSAyQiAzQiAyRCAzRCAyRiAzRikKKyAgICAgICAgcHVucGNrbGJ3IHhtbUEseG1tQyAgICAgOyB4bW1BPSgwMCAxMCAwMiAxMiAwNCAxNCAwNiAxNiAwOCAxOCAwQSAxQSAwQyAxQyAwRSAxRSkKKyAgICAgICAgcHVucGNrbGJ3IHhtbUUseG1tRyAgICAgOyB4bW1FPSgyMCAzMCAyMiAzMiAyNCAzNCAyNiAzNiAyOCAzOCAyQSAzQSAyQyAzQyAyRSAzRSkKKyAgICAgICAgcHVucGNrbGJ3IHhtbUIseG1tRCAgICAgOyB4bW1CPSgwMSAxMSAwMyAxMyAwNSAxNSAwNyAxNyAwOSAxOSAwQiAxQiAwRCAxRCAwRiAxRikKKyAgICAgICAgcHVucGNrbGJ3IHhtbUYseG1tSCAgICAgOyB4bW1GPSgyMSAzMSAyMyAzMyAyNSAzNSAyNyAzNyAyOSAzOSAyQiAzQiAyRCAzRCAyRiAzRikKIAotCW1vdmRxYSAgICB4bW1DLHhtbUEKLQlwdW5wY2tsd2QgeG1tQSx4bW1FCTsgeG1tQT0oMDAgMTAgMjAgMzAgMDIgMTIgMjIgMzIgMDQgMTQgMjQgMzQgMDYgMTYgMjYgMzYpCi0JcHVucGNraHdkIHhtbUMseG1tRQk7IHhtbUM9KDA4IDE4IDI4IDM4IDBBIDFBIDJBIDNBIDBDIDFDIDJDIDNDIDBFIDFFIDJFIDNFKQotCW1vdmRxYSAgICB4bW1HLHhtbUIKLQlwdW5wY2tsd2QgeG1tQix4bW1GCTsgeG1tQj0oMDEgMTEgMjEgMzEgMDMgMTMgMjMgMzMgMDUgMTUgMjUgMzUgMDcgMTcgMjcgMzcpCi0JcHVucGNraHdkIHhtbUcseG1tRgk7IHhtbUc9KDA5IDE5IDI5IDM5IDBCIDFCIDJCIDNCIDBEIDFEIDJEIDNEIDBGIDFGIDJGIDNGKQorICAgICAgICBtb3ZkcWEgICAgeG1tQyx4bW1BCisgICAgICAgIHB1bnBja2x3ZCB4bW1BLHhtbUUgICAgIDsgeG1tQT0oMDAgMTAgMjAgMzAgMDIgMTIgMjIgMzIgMDQgMTQgMjQgMzQgMDYgMTYgMjYgMzYpCisgICAgICAgIHB1bnBja2h3ZCB4bW1DLHhtbUUgICAgIDsgeG1tQz0oMDggMTggMjggMzggMEEgMUEgMkEgM0EgMEMgMUMgMkMgM0MgMEUgMUUgMkUgM0UpCisgICAgICAgIG1vdmRxYSAgICB4bW1HLHhtbUIKKyAgICAgICAgcHVucGNrbHdkIHhtbUIseG1tRiAgICAgOyB4bW1CPSgwMSAxMSAyMSAzMSAwMyAxMyAyMyAzMyAwNSAxNSAyNSAzNSAwNyAxNyAyNyAzNykKKyAgICAgICAgcHVucGNraHdkIHhtbUcseG1tRiAgICAgOyB4bW1HPSgwOSAxOSAyOSAzOSAwQiAxQiAyQiAzQiAwRCAxRCAyRCAzRCAwRiAxRiAyRiAzRikKIAotCW1vdmRxYSAgICB4bW1ELHhtbUEKLQlwdW5wY2tsZHEgeG1tQSx4bW1CCTsgeG1tQT0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEgMDIgMTIgMjIgMzIgMDMgMTMgMjMgMzMpCi0JcHVucGNraGRxIHhtbUQseG1tQgk7IHhtbUQ9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1IDA2IDE2IDI2IDM2IDA3IDE3IDI3IDM3KQotCW1vdmRxYSAgICB4bW1ILHhtbUMKLQlwdW5wY2tsZHEgeG1tQyx4bW1HCTsgeG1tQz0oMDggMTggMjggMzggMDkgMTkgMjkgMzkgMEEgMUEgMkEgM0EgMEIgMUIgMkIgM0IpCi0JcHVucGNraGRxIHhtbUgseG1tRwk7IHhtbUg9KDBDIDFDIDJDIDNDIDBEIDFEIDJEIDNEIDBFIDFFIDJFIDNFIDBGIDFGIDJGIDNGKQorICAgICAgICBtb3ZkcWEgICAgeG1tRCx4bW1BCisgICAgICAgIHB1bnBja2xkcSB4bW1BLHhtbUIgICAgIDsgeG1tQT0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEgMDIgMTIgMjIgMzIgMDMgMTMgMjMgMzMpCisgICAgICAgIHB1bnBja2hkcSB4bW1ELHhtbUIgICAgIDsgeG1tRD0oMDQgMTQgMjQgMzQgMDUgMTUgMjUgMzUgMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCisgICAgICAgIG1vdmRxYSAgICB4bW1ILHhtbUMKKyAgICAgICAgcHVucGNrbGRxIHhtbUMseG1tRyAgICAgOyB4bW1DPSgwOCAxOCAyOCAzOCAwOSAxOSAyOSAzOSAwQSAxQSAyQSAzQSAwQiAxQiAyQiAzQikKKyAgICAgICAgcHVucGNraGRxIHhtbUgseG1tRyAgICAgOyB4bW1IPSgwQyAxQyAyQyAzQyAwRCAxRCAyRCAzRCAwRSAxRSAyRSAzRSAwRiAxRiAyRiAzRikKIAotCWNtcAllY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKLQlqYglzaG9ydCAuY29sdW1uX3N0MzIKKyAgICAgICAgY21wICAgICBlY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKyAgICAgICAgamIgICAgICBzaG9ydCAuY29sdW1uX3N0MzIKIAotCXRlc3QJZWRpLCBTSVpFT0ZfWE1NV09SRC0xCi0Jam56CXNob3J0IC5vdXQxCi0JOyAtLShhbGlnbmVkKS0tLS0tLS0tLS0tLS0tLS0tLS0KLQltb3ZudGRxCVhNTVdPUkQgW2VkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tQQotCW1vdm50ZHEJWE1NV09SRCBbZWRpKzEqU0laRU9GX1hNTVdPUkRdLCB4bW1ECi0JbW92bnRkcQlYTU1XT1JEIFtlZGkrMipTSVpFT0ZfWE1NV09SRF0sIHhtbUMKLQltb3ZudGRxCVhNTVdPUkQgW2VkaSszKlNJWkVPRl9YTU1XT1JEXSwgeG1tSAotCWptcAlzaG9ydCAub3V0MAotLm91dDE6CTsgLS0odW5hbGlnbmVkKS0tLS0tLS0tLS0tLS0tLS0tCi0JbW92ZHF1CVhNTVdPUkQgW2VkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tQQotCW1vdmRxdQlYTU1XT1JEIFtlZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbUQKLQltb3ZkcXUJWE1NV09SRCBbZWRpKzIqU0laRU9GX1hNTVdPUkRdLCB4bW1DCi0JbW92ZHF1CVhNTVdPUkQgW2VkaSszKlNJWkVPRl9YTU1XT1JEXSwgeG1tSAorICAgICAgICB0ZXN0ICAgIGVkaSwgU0laRU9GX1hNTVdPUkQtMQorICAgICAgICBqbnogICAgIHNob3J0IC5vdXQxCisgICAgICAgIDsgLS0oYWxpZ25lZCktLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIG1vdm50ZHEgWE1NV09SRCBbZWRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW1BCisgICAgICAgIG1vdm50ZHEgWE1NV09SRCBbZWRpKzEqU0laRU9GX1hNTVdPUkRdLCB4bW1ECisgICAgICAgIG1vdm50ZHEgWE1NV09SRCBbZWRpKzIqU0laRU9GX1hNTVdPUkRdLCB4bW1DCisgICAgICAgIG1vdm50ZHEgWE1NV09SRCBbZWRpKzMqU0laRU9GX1hNTVdPUkRdLCB4bW1ICisgICAgICAgIGptcCAgICAgc2hvcnQgLm91dDAKKy5vdXQxOiAgOyAtLSh1bmFsaWduZWQpLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgbW92ZHF1ICBYTU1XT1JEIFtlZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbUEKKyAgICAgICAgbW92ZHF1ICBYTU1XT1JEIFtlZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbUQKKyAgICAgICAgbW92ZHF1ICBYTU1XT1JEIFtlZGkrMipTSVpFT0ZfWE1NV09SRF0sIHhtbUMKKyAgICAgICAgbW92ZHF1ICBYTU1XT1JEIFtlZGkrMypTSVpFT0ZfWE1NV09SRF0sIHhtbUgKIC5vdXQwOgotCWFkZAllZGksIGJ5dGUgUkdCX1BJWEVMU0laRSpTSVpFT0ZfWE1NV09SRAk7IG91dHB0cgotCXN1YgllY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKLQlqegluZWFyIC5lbmRjb2x1bW4KKyAgICAgICAgYWRkICAgICBlZGksIGJ5dGUgUkdCX1BJWEVMU0laRSpTSVpFT0ZfWE1NV09SRCAgOyBvdXRwdHIKKyAgICAgICAgc3ViICAgICBlY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKyAgICAgICAganogICAgICBuZWFyIC5lbmRjb2x1bW4KIAotCWFkZAllc2ksIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBpbnB0cjAKLQlkZWMJYWwJCQk7IFljdHIKLQlqbnoJbmVhciAuWWxvb3BfMm5kCisgICAgICAgIGFkZCAgICAgZXNpLCBieXRlIFNJWkVPRl9YTU1XT1JEICAgICAgICA7IGlucHRyMAorICAgICAgICBkZWMgICAgIGFsICAgICAgICAgICAgICAgICAgICAgIDsgWWN0cgorICAgICAgICBqbnogICAgIG5lYXIgLllsb29wXzJuZAogCi0JYWRkCWVieCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IGlucHRyMQotCWFkZAllZHgsIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBpbnB0cjIKLQlqbXAJbmVhciAuY29sdW1ubG9vcAotCWFsaWdueAkxNiw3CisgICAgICAgIGFkZCAgICAgZWJ4LCBieXRlIFNJWkVPRl9YTU1XT1JEICAgICAgICA7IGlucHRyMQorICAgICAgICBhZGQgICAgIGVkeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRCAgICAgICAgOyBpbnB0cjIKKyAgICAgICAgam1wICAgICBuZWFyIC5jb2x1bW5sb29wCisgICAgICAgIGFsaWdueCAgMTYsNwogCiAuY29sdW1uX3N0MzI6Ci0JY21wCWVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC8yCi0JamIJc2hvcnQgLmNvbHVtbl9zdDE2Ci0JbW92ZHF1CVhNTVdPUkQgW2VkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tQQotCW1vdmRxdQlYTU1XT1JEIFtlZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbUQKLQlhZGQJZWRpLCBieXRlIDIqU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKLQltb3ZkcWEJeG1tQSx4bW1DCi0JbW92ZHFhCXhtbUQseG1tSAotCXN1YgllY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQvMgorICAgICAgICBjbXAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC8yCisgICAgICAgIGpiICAgICAgc2hvcnQgLmNvbHVtbl9zdDE2CisgICAgICAgIG1vdmRxdSAgWE1NV09SRCBbZWRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW1BCisgICAgICAgIG1vdmRxdSAgWE1NV09SRCBbZWRpKzEqU0laRU9GX1hNTVdPUkRdLCB4bW1ECisgICAgICAgIGFkZCAgICAgZWRpLCBieXRlIDIqU0laRU9GX1hNTVdPUkQgICAgICA7IG91dHB0cgorICAgICAgICBtb3ZkcWEgIHhtbUEseG1tQworICAgICAgICBtb3ZkcWEgIHhtbUQseG1tSAorICAgICAgICBzdWIgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC8yCiAuY29sdW1uX3N0MTY6Ci0JY21wCWVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC80Ci0JamIJc2hvcnQgLmNvbHVtbl9zdDE1Ci0JbW92ZHF1CVhNTVdPUkQgW2VkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tQQotCWFkZAllZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKLQltb3ZkcWEJeG1tQSx4bW1ECi0Jc3ViCWVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC80CisgICAgICAgIGNtcCAgICAgZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzQKKyAgICAgICAgamIgICAgICBzaG9ydCAuY29sdW1uX3N0MTUKKyAgICAgICAgbW92ZHF1ICBYTU1XT1JEIFtlZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbUEKKyAgICAgICAgYWRkICAgICBlZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQgICAgICAgIDsgb3V0cHRyCisgICAgICAgIG1vdmRxYSAgeG1tQSx4bW1ECisgICAgICAgIHN1YiAgICAgZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzQKIC5jb2x1bW5fc3QxNToKLQk7IFN0b3JlIHR3byBwaXhlbHMgKDggYnl0ZXMpIG9mIHhtbUEgdG8gdGhlIG91dHB1dCB3aGVuIGl0IGhhcyBlbm91Z2gKLQk7IHNwYWNlLgotCWNtcAllY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQvOAotCWpiCXNob3J0IC5jb2x1bW5fc3Q3Ci0JbW92cQlYTU1fTU1XT1JEIFtlZGldLCB4bW1BCi0JYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRC84KjQKLQlzdWIJZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzgKLQlwc3JsZHEJeG1tQSwgU0laRU9GX1hNTVdPUkQvOCo0CisgICAgICAgIDsgU3RvcmUgdHdvIHBpeGVscyAoOCBieXRlcykgb2YgeG1tQSB0byB0aGUgb3V0cHV0IHdoZW4gaXQgaGFzIGVub3VnaAorICAgICAgICA7IHNwYWNlLgorICAgICAgICBjbXAgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC84CisgICAgICAgIGpiICAgICAgc2hvcnQgLmNvbHVtbl9zdDcKKyAgICAgICAgbW92cSAgICBYTU1fTU1XT1JEIFtlZGldLCB4bW1BCisgICAgICAgIGFkZCAgICAgZWRpLCBieXRlIFNJWkVPRl9YTU1XT1JELzgqNAorICAgICAgICBzdWIgICAgIGVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC84CisgICAgICAgIHBzcmxkcSAgeG1tQSwgU0laRU9GX1hNTVdPUkQvOCo0CiAuY29sdW1uX3N0NzoKLQk7IFN0b3JlIG9uZSBwaXhlbCAoNCBieXRlcykgb2YgeG1tQSB0byB0aGUgb3V0cHV0IHdoZW4gaXQgaGFzIGVub3VnaAotCTsgc3BhY2UuCi0JdGVzdAllY3gsIGVjeAotCWp6CXNob3J0IC5lbmRjb2x1bW4KLQltb3ZkCVhNTV9EV09SRCBbZWRpXSwgeG1tQQorICAgICAgICA7IFN0b3JlIG9uZSBwaXhlbCAoNCBieXRlcykgb2YgeG1tQSB0byB0aGUgb3V0cHV0IHdoZW4gaXQgaGFzIGVub3VnaAorICAgICAgICA7IHNwYWNlLgorICAgICAgICB0ZXN0ICAgIGVjeCwgZWN4CisgICAgICAgIGp6ICAgICAgc2hvcnQgLmVuZGNvbHVtbgorICAgICAgICBtb3ZkICAgIFhNTV9EV09SRCBbZWRpXSwgeG1tQQogCiAlZW5kaWYgOyBSR0JfUElYRUxTSVpFIDsgLS0tLS0tLS0tLS0tLS0tCiAKIC5lbmRjb2x1bW46Ci0Jc2ZlbmNlCQk7IGZsdXNoIHRoZSB3cml0ZSBidWZmZXIKKyAgICAgICAgc2ZlbmNlICAgICAgICAgIDsgZmx1c2ggdGhlIHdyaXRlIGJ1ZmZlcgogCiAucmV0dXJuOgotCXBvcAllZGkKLQlwb3AJZXNpCi07CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi07CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi0JcG9wCWVieAotCW1vdgllc3AsZWJwCQk7IGVzcCA8LSBhbGlnbmVkIGVicAotCXBvcAllc3AJCTsgZXNwIDwtIG9yaWdpbmFsIGVicAotCXBvcAllYnAKLQlyZXQKKyAgICAgICAgcG9wICAgICBlZGkKKyAgICAgICAgcG9wICAgICBlc2kKKzsgICAgICAgcG9wICAgICBlZHggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICAgICAgcG9wICAgICBlY3ggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICAgICAgcG9wICAgICBlYngKKyAgICAgICAgbW92ICAgICBlc3AsZWJwICAgICAgICAgOyBlc3AgPC0gYWxpZ25lZCBlYnAKKyAgICAgICAgcG9wICAgICBlc3AgICAgICAgICAgICAgOyBlc3AgPC0gb3JpZ2luYWwgZWJwCisgICAgICAgIHBvcCAgICAgZWJwCisgICAgICAgIHJldAogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiA7CkBAIC00NTgsNjIgKzQ1OCw2MiBAQAogOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYpOwogOwogCi0lZGVmaW5lIG91dHB1dF93aWR0aChiKQkoYikrOAkJCTsgSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgKLSVkZWZpbmUgaW5wdXRfYnVmKGIpCQkoYikrMTIJCTsgSlNBTVBJTUFHRSBpbnB1dF9idWYKLSVkZWZpbmUgaW5fcm93X2dyb3VwX2N0cihiKQkoYikrMTYJCTsgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyCi0lZGVmaW5lIG91dHB1dF9idWYoYikJCShiKSsyMAkJOyBKU0FNUEFSUkFZIG91dHB1dF9idWYKKyVkZWZpbmUgb3V0cHV0X3dpZHRoKGIpIChiKSs4ICAgICAgICAgICAgICAgICAgIDsgSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgKKyVkZWZpbmUgaW5wdXRfYnVmKGIpICAgICAgICAgICAgKGIpKzEyICAgICAgICAgIDsgSlNBTVBJTUFHRSBpbnB1dF9idWYKKyVkZWZpbmUgaW5fcm93X2dyb3VwX2N0cihiKSAgICAgKGIpKzE2ICAgICAgICAgIDsgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyCislZGVmaW5lIG91dHB1dF9idWYoYikgICAgICAgICAgIChiKSsyMCAgICAgICAgICA7IEpTQU1QQVJSQVkgb3V0cHV0X2J1ZgogCi0JYWxpZ24JMTYKLQlnbG9iYWwJRVhUTihqc2ltZF9oMnYyX21lcmdlZF91cHNhbXBsZV9zc2UyKQorICAgICAgICBhbGlnbiAgIDE2CisgICAgICAgIGdsb2JhbCAgRVhUTihqc2ltZF9oMnYyX21lcmdlZF91cHNhbXBsZV9zc2UyKQogCiBFWFROKGpzaW1kX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIpOgotCXB1c2gJZWJwCi0JbW92CWVicCxlc3AKLQlwdXNoCWVieAotOwlwdXNoCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLTsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi0JcHVzaAllc2kKLQlwdXNoCWVkaQorICAgICAgICBwdXNoICAgIGVicAorICAgICAgICBtb3YgICAgIGVicCxlc3AKKyAgICAgICAgcHVzaCAgICBlYngKKzsgICAgICAgcHVzaCAgICBlY3ggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICAgICAgcHVzaCAgICBlZHggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICAgICAgcHVzaCAgICBlc2kKKyAgICAgICAgcHVzaCAgICBlZGkKIAotCW1vdgllYXgsIFBPSU5URVIgW291dHB1dF93aWR0aChlYnApXQorICAgICAgICBtb3YgICAgIGVheCwgUE9JTlRFUiBbb3V0cHV0X3dpZHRoKGVicCldCiAKLQltb3YJZWRpLCBKU0FNUElNQUdFIFtpbnB1dF9idWYoZWJwKV0KLQltb3YJZWN4LCBKRElNRU5TSU9OIFtpbl9yb3dfZ3JvdXBfY3RyKGVicCldCi0JbW92CWVzaSwgSlNBTVBBUlJBWSBbZWRpKzAqU0laRU9GX0pTQU1QQVJSQVldCi0JbW92CWVieCwgSlNBTVBBUlJBWSBbZWRpKzEqU0laRU9GX0pTQU1QQVJSQVldCi0JbW92CWVkeCwgSlNBTVBBUlJBWSBbZWRpKzIqU0laRU9GX0pTQU1QQVJSQVldCi0JbW92CWVkaSwgSlNBTVBBUlJBWSBbb3V0cHV0X2J1ZihlYnApXQotCWxlYQllc2ksIFtlc2krZWN4KlNJWkVPRl9KU0FNUFJPV10KKyAgICAgICAgbW92ICAgICBlZGksIEpTQU1QSU1BR0UgW2lucHV0X2J1ZihlYnApXQorICAgICAgICBtb3YgICAgIGVjeCwgSkRJTUVOU0lPTiBbaW5fcm93X2dyb3VwX2N0cihlYnApXQorICAgICAgICBtb3YgICAgIGVzaSwgSlNBTVBBUlJBWSBbZWRpKzAqU0laRU9GX0pTQU1QQVJSQVldCisgICAgICAgIG1vdiAgICAgZWJ4LCBKU0FNUEFSUkFZIFtlZGkrMSpTSVpFT0ZfSlNBTVBBUlJBWV0KKyAgICAgICAgbW92ICAgICBlZHgsIEpTQU1QQVJSQVkgW2VkaSsyKlNJWkVPRl9KU0FNUEFSUkFZXQorICAgICAgICBtb3YgICAgIGVkaSwgSlNBTVBBUlJBWSBbb3V0cHV0X2J1ZihlYnApXQorICAgICAgICBsZWEgICAgIGVzaSwgW2VzaStlY3gqU0laRU9GX0pTQU1QUk9XXQogCi0JcHVzaAllZHgJCQk7IGlucHRyMgotCXB1c2gJZWJ4CQkJOyBpbnB0cjEKLQlwdXNoCWVzaQkJCTsgaW5wdHIwMAotCW1vdgllYngsZXNwCisgICAgICAgIHB1c2ggICAgZWR4ICAgICAgICAgICAgICAgICAgICAgOyBpbnB0cjIKKyAgICAgICAgcHVzaCAgICBlYnggICAgICAgICAgICAgICAgICAgICA7IGlucHRyMQorICAgICAgICBwdXNoICAgIGVzaSAgICAgICAgICAgICAgICAgICAgIDsgaW5wdHIwMAorICAgICAgICBtb3YgICAgIGVieCxlc3AKIAotCXB1c2gJZWRpCQkJOyBvdXRwdXRfYnVmIChvdXRwdHIwKQotCXB1c2gJZWN4CQkJOyBpbl9yb3dfZ3JvdXBfY3RyCi0JcHVzaAllYngJCQk7IGlucHV0X2J1ZgotCXB1c2gJZWF4CQkJOyBvdXRwdXRfd2lkdGgKKyAgICAgICAgcHVzaCAgICBlZGkgICAgICAgICAgICAgICAgICAgICA7IG91dHB1dF9idWYgKG91dHB0cjApCisgICAgICAgIHB1c2ggICAgZWN4ICAgICAgICAgICAgICAgICAgICAgOyBpbl9yb3dfZ3JvdXBfY3RyCisgICAgICAgIHB1c2ggICAgZWJ4ICAgICAgICAgICAgICAgICAgICAgOyBpbnB1dF9idWYKKyAgICAgICAgcHVzaCAgICBlYXggICAgICAgICAgICAgICAgICAgICA7IG91dHB1dF93aWR0aAogCi0JY2FsbAluZWFyIEVYVE4oanNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfc3NlMikKKyAgICAgICAgY2FsbCAgICBuZWFyIEVYVE4oanNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfc3NlMikKIAotCWFkZAllc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCTsgaW5wdHIwMQotCWFkZAllZGksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCTsgb3V0cHRyMQotCW1vdglQT0lOVEVSIFtlYngrMCpTSVpFT0ZfUE9JTlRFUl0sIGVzaQotCW1vdglQT0lOVEVSIFtlYngtMSpTSVpFT0ZfUE9JTlRFUl0sIGVkaQorICAgICAgICBhZGQgICAgIGVzaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cgICAgICAgOyBpbnB0cjAxCisgICAgICAgIGFkZCAgICAgZWRpLCBieXRlIFNJWkVPRl9KU0FNUFJPVyAgICAgICA7IG91dHB0cjEKKyAgICAgICAgbW92ICAgICBQT0lOVEVSIFtlYngrMCpTSVpFT0ZfUE9JTlRFUl0sIGVzaQorICAgICAgICBtb3YgICAgIFBPSU5URVIgW2VieC0xKlNJWkVPRl9QT0lOVEVSXSwgZWRpCiAKLQljYWxsCW5lYXIgRVhUTihqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9zc2UyKQorICAgICAgICBjYWxsICAgIG5lYXIgRVhUTihqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9zc2UyKQogCi0JYWRkCWVzcCwgYnl0ZSA3KlNJWkVPRl9EV09SRAorICAgICAgICBhZGQgICAgIGVzcCwgYnl0ZSA3KlNJWkVPRl9EV09SRAogCi0JcG9wCWVkaQotCXBvcAllc2kKLTsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLTsJcG9wCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLQlwb3AJZWJ4Ci0JcG9wCWVicAotCXJldAorICAgICAgICBwb3AgICAgIGVkaQorICAgICAgICBwb3AgICAgIGVzaQorOyAgICAgICBwb3AgICAgIGVkeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgICAgICBwb3AgICAgIGVjeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgICAgICBwb3AgICAgIGVieAorICAgICAgICBwb3AgICAgIGVicAorICAgICAgICByZXQKIAogOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKIDsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KLQlhbGlnbgkxNgorICAgICAgICBhbGlnbiAgIDE2CmRpZmYgLS1naXQgYS9zaW1kL2pkc2FtbW14LmFzbSBiL3NpbWQvamRzYW1tbXguYXNtCmluZGV4IGMwOWU1YjkuLjgyM2ZlMTkgMTAwNjQ0Ci0tLSBhL3NpbWQvamRzYW1tbXguYXNtCisrKyBiL3NpbWQvamRzYW1tbXguYXNtCkBAIC0xOSwyNCArMTksMjQgQEAKICVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCiAKIDsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlTRUNUSU9OCVNFR19DT05TVAorICAgICAgICBTRUNUSU9OIFNFR19DT05TVAogCi0JYWxpZ256CTE2Ci0JZ2xvYmFsCUVYVE4oamNvbnN0X2ZhbmN5X3Vwc2FtcGxlX21teCkKKyAgICAgICAgYWxpZ256ICAxNgorICAgICAgICBnbG9iYWwgIEVYVE4oamNvbnN0X2ZhbmN5X3Vwc2FtcGxlX21teCkKIAogRVhUTihqY29uc3RfZmFuY3lfdXBzYW1wbGVfbW14KToKIAotUFdfT05FCQl0aW1lcyA0IGR3ICAxCi1QV19UV08JCXRpbWVzIDQgZHcgIDIKLVBXX1RIUkVFCXRpbWVzIDQgZHcgIDMKLVBXX1NFVkVOCXRpbWVzIDQgZHcgIDcKLVBXX0VJR0hUCXRpbWVzIDQgZHcgIDgKK1BXX09ORSAgICAgICAgICB0aW1lcyA0IGR3ICAxCitQV19UV08gICAgICAgICAgdGltZXMgNCBkdyAgMgorUFdfVEhSRUUgICAgICAgIHRpbWVzIDQgZHcgIDMKK1BXX1NFVkVOICAgICAgICB0aW1lcyA0IGR3ICA3CitQV19FSUdIVCAgICAgICAgdGltZXMgNCBkdyAgOAogCi0JYWxpZ256CTE2CisgICAgICAgIGFsaWdueiAgMTYKIAogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCVNFQ1RJT04JU0VHX1RFWFQKLQlCSVRTCTMyCisgICAgICAgIFNFQ1RJT04gU0VHX1RFWFQKKyAgICAgICAgQklUUyAgICAzMgogOwogOyBGYW5jeSBwcm9jZXNzaW5nIGZvciB0aGUgY29tbW9uIGNhc2Ugb2YgMjoxIGhvcml6b250YWwgYW5kIDE6MSB2ZXJ0aWNhbC4KIDsKQEAgLTUyLDE0NiArNTIsMTQ2IEBACiA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyKTsKIDsKIAotJWRlZmluZSBtYXhfdl9zYW1wKGIpCQkoYikrOAkJCTsgaW50IG1heF92X3NhbXBfZmFjdG9yCi0lZGVmaW5lIGRvd25zYW1wX3dpZHRoKGIpCShiKSsxMgk7IEpESU1FTlNJT04gZG93bnNhbXBsZWRfd2lkdGgKLSVkZWZpbmUgaW5wdXRfZGF0YShiKQkJKGIpKzE2CQk7IEpTQU1QQVJSQVkgaW5wdXRfZGF0YQotJWRlZmluZSBvdXRwdXRfZGF0YV9wdHIoYikJKGIpKzIwCQk7IEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIKKyVkZWZpbmUgbWF4X3Zfc2FtcChiKSAgICAgICAgICAgKGIpKzggICAgICAgICAgIDsgaW50IG1heF92X3NhbXBfZmFjdG9yCislZGVmaW5lIGRvd25zYW1wX3dpZHRoKGIpICAgICAgIChiKSsxMiAgICAgICAgICA7IEpESU1FTlNJT04gZG93bnNhbXBsZWRfd2lkdGgKKyVkZWZpbmUgaW5wdXRfZGF0YShiKSAgICAgICAgICAgKGIpKzE2ICAgICAgICAgIDsgSlNBTVBBUlJBWSBpbnB1dF9kYXRhCislZGVmaW5lIG91dHB1dF9kYXRhX3B0cihiKSAgICAgIChiKSsyMCAgICAgICAgICA7IEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIKIAotCWFsaWduCTE2Ci0JZ2xvYmFsCUVYVE4oanNpbWRfaDJ2MV9mYW5jeV91cHNhbXBsZV9tbXgpCisgICAgICAgIGFsaWduICAgMTYKKyAgICAgICAgZ2xvYmFsICBFWFROKGpzaW1kX2gydjFfZmFuY3lfdXBzYW1wbGVfbW14KQogCiBFWFROKGpzaW1kX2gydjFfZmFuY3lfdXBzYW1wbGVfbW14KToKLQlwdXNoCWVicAotCW1vdgllYnAsZXNwCi0JcHVzaHBpYwllYngKLTsJcHVzaAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi07CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotCXB1c2gJZXNpCi0JcHVzaAllZGkKKyAgICAgICAgcHVzaCAgICBlYnAKKyAgICAgICAgbW92ICAgICBlYnAsZXNwCisgICAgICAgIHB1c2hwaWMgZWJ4Cis7ICAgICAgIHB1c2ggICAgZWN4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgICAgIHB1c2ggICAgZWR4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgICAgIHB1c2ggICAgZXNpCisgICAgICAgIHB1c2ggICAgZWRpCiAKLQlnZXRfR09UCWVieAkJOyBnZXQgR09UIGFkZHJlc3MKKyAgICAgICAgZ2V0X0dPVCBlYnggICAgICAgICAgICAgOyBnZXQgR09UIGFkZHJlc3MKIAotCW1vdgllYXgsIEpESU1FTlNJT04gW2Rvd25zYW1wX3dpZHRoKGVicCldICA7IGNvbGN0cgotCXRlc3QJZWF4LGVheAotCWp6CW5lYXIgLnJldHVybgorICAgICAgICBtb3YgICAgIGVheCwgSkRJTUVOU0lPTiBbZG93bnNhbXBfd2lkdGgoZWJwKV0gIDsgY29sY3RyCisgICAgICAgIHRlc3QgICAgZWF4LGVheAorICAgICAgICBqeiAgICAgIG5lYXIgLnJldHVybgogCi0JbW92CWVjeCwgSU5UIFttYXhfdl9zYW1wKGVicCldCTsgcm93Y3RyCi0JdGVzdAllY3gsZWN4Ci0JanoJbmVhciAucmV0dXJuCisgICAgICAgIG1vdiAgICAgZWN4LCBJTlQgW21heF92X3NhbXAoZWJwKV0gICAgICA7IHJvd2N0cgorICAgICAgICB0ZXN0ICAgIGVjeCxlY3gKKyAgICAgICAganogICAgICBuZWFyIC5yZXR1cm4KIAotCW1vdgllc2ksIEpTQU1QQVJSQVkgW2lucHV0X2RhdGEoZWJwKV0JOyBpbnB1dF9kYXRhCi0JbW92CWVkaSwgUE9JTlRFUiBbb3V0cHV0X2RhdGFfcHRyKGVicCldCi0JbW92CWVkaSwgSlNBTVBBUlJBWSBbZWRpXQkJCTsgb3V0cHV0X2RhdGEKLQlhbGlnbngJMTYsNworICAgICAgICBtb3YgICAgIGVzaSwgSlNBTVBBUlJBWSBbaW5wdXRfZGF0YShlYnApXSAgICAgICA7IGlucHV0X2RhdGEKKyAgICAgICAgbW92ICAgICBlZGksIFBPSU5URVIgW291dHB1dF9kYXRhX3B0cihlYnApXQorICAgICAgICBtb3YgICAgIGVkaSwgSlNBTVBBUlJBWSBbZWRpXSAgICAgICAgICAgICAgICAgICA7IG91dHB1dF9kYXRhCisgICAgICAgIGFsaWdueCAgMTYsNwogLnJvd2xvb3A6Ci0JcHVzaAllYXgJCQk7IGNvbGN0cgotCXB1c2gJZWRpCi0JcHVzaAllc2kKKyAgICAgICAgcHVzaCAgICBlYXggICAgICAgICAgICAgICAgICAgICA7IGNvbGN0cgorICAgICAgICBwdXNoICAgIGVkaQorICAgICAgICBwdXNoICAgIGVzaQogCi0JbW92CWVzaSwgSlNBTVBST1cgW2VzaV0JOyBpbnB0cgotCW1vdgllZGksIEpTQU1QUk9XIFtlZGldCTsgb3V0cHRyCisgICAgICAgIG1vdiAgICAgZXNpLCBKU0FNUFJPVyBbZXNpXSAgICAgOyBpbnB0cgorICAgICAgICBtb3YgICAgIGVkaSwgSlNBTVBST1cgW2VkaV0gICAgIDsgb3V0cHRyCiAKLQl0ZXN0CWVheCwgU0laRU9GX01NV09SRC0xCi0JanoJc2hvcnQgLnNraXAKLQltb3YJZGwsIEpTQU1QTEUgW2VzaSsoZWF4LTEpKlNJWkVPRl9KU0FNUExFXQotCW1vdglKU0FNUExFIFtlc2krZWF4KlNJWkVPRl9KU0FNUExFXSwgZGwJOyBpbnNlcnQgYSBkdW1teSBzYW1wbGUKKyAgICAgICAgdGVzdCAgICBlYXgsIFNJWkVPRl9NTVdPUkQtMQorICAgICAgICBqeiAgICAgIHNob3J0IC5za2lwCisgICAgICAgIG1vdiAgICAgZGwsIEpTQU1QTEUgW2VzaSsoZWF4LTEpKlNJWkVPRl9KU0FNUExFXQorICAgICAgICBtb3YgICAgIEpTQU1QTEUgW2VzaStlYXgqU0laRU9GX0pTQU1QTEVdLCBkbCAgICA7IGluc2VydCBhIGR1bW15IHNhbXBsZQogLnNraXA6Ci0JcHhvcgltbTAsbW0wCQkJOyBtbTA9KGFsbCAwJ3MpCi0JcGNtcGVxYgltbTcsbW03Ci0JcHNybHEJbW03LChTSVpFT0ZfTU1XT1JELTEpKkJZVEVfQklUCi0JcGFuZAltbTcsIE1NV09SRCBbZXNpKzAqU0laRU9GX01NV09SRF0KKyAgICAgICAgcHhvciAgICBtbTAsbW0wICAgICAgICAgICAgICAgICA7IG1tMD0oYWxsIDAncykKKyAgICAgICAgcGNtcGVxYiBtbTcsbW03CisgICAgICAgIHBzcmxxICAgbW03LChTSVpFT0ZfTU1XT1JELTEpKkJZVEVfQklUCisgICAgICAgIHBhbmQgICAgbW03LCBNTVdPUkQgW2VzaSswKlNJWkVPRl9NTVdPUkRdCiAKLQlhZGQJZWF4LCBieXRlIFNJWkVPRl9NTVdPUkQtMQotCWFuZAllYXgsIGJ5dGUgLVNJWkVPRl9NTVdPUkQKLQljbXAJZWF4LCBieXRlIFNJWkVPRl9NTVdPUkQKLQlqYQlzaG9ydCAuY29sdW1ubG9vcAotCWFsaWdueAkxNiw3CisgICAgICAgIGFkZCAgICAgZWF4LCBieXRlIFNJWkVPRl9NTVdPUkQtMQorICAgICAgICBhbmQgICAgIGVheCwgYnl0ZSAtU0laRU9GX01NV09SRAorICAgICAgICBjbXAgICAgIGVheCwgYnl0ZSBTSVpFT0ZfTU1XT1JECisgICAgICAgIGphICAgICAgc2hvcnQgLmNvbHVtbmxvb3AKKyAgICAgICAgYWxpZ254ICAxNiw3CiAKIC5jb2x1bW5sb29wX2xhc3Q6Ci0JcGNtcGVxYgltbTYsbW02Ci0JcHNsbHEJbW02LChTSVpFT0ZfTU1XT1JELTEpKkJZVEVfQklUCi0JcGFuZAltbTYsIE1NV09SRCBbZXNpKzAqU0laRU9GX01NV09SRF0KLQlqbXAJc2hvcnQgLnVwc2FtcGxlCi0JYWxpZ254CTE2LDcKKyAgICAgICAgcGNtcGVxYiBtbTYsbW02CisgICAgICAgIHBzbGxxICAgbW02LChTSVpFT0ZfTU1XT1JELTEpKkJZVEVfQklUCisgICAgICAgIHBhbmQgICAgbW02LCBNTVdPUkQgW2VzaSswKlNJWkVPRl9NTVdPUkRdCisgICAgICAgIGptcCAgICAgc2hvcnQgLnVwc2FtcGxlCisgICAgICAgIGFsaWdueCAgMTYsNwogCiAuY29sdW1ubG9vcDoKLQltb3ZxCW1tNiwgTU1XT1JEIFtlc2krMSpTSVpFT0ZfTU1XT1JEXQotCXBzbGxxCW1tNiwoU0laRU9GX01NV09SRC0xKSpCWVRFX0JJVAorICAgICAgICBtb3ZxICAgIG1tNiwgTU1XT1JEIFtlc2krMSpTSVpFT0ZfTU1XT1JEXQorICAgICAgICBwc2xscSAgIG1tNiwoU0laRU9GX01NV09SRC0xKSpCWVRFX0JJVAogCiAudXBzYW1wbGU6Ci0JbW92cQltbTEsIE1NV09SRCBbZXNpKzAqU0laRU9GX01NV09SRF0KLQltb3ZxCW1tMixtbTEKLQltb3ZxCW1tMyxtbTEJCQk7IG1tMT0oIDAgMSAyIDMgNCA1IDYgNykKLQlwc2xscQltbTIsQllURV9CSVQJCTsgbW0yPSggLSAwIDEgMiAzIDQgNSA2KQotCXBzcmxxCW1tMyxCWVRFX0JJVAkJOyBtbTM9KCAxIDIgMyA0IDUgNiA3IC0pCisgICAgICAgIG1vdnEgICAgbW0xLCBNTVdPUkQgW2VzaSswKlNJWkVPRl9NTVdPUkRdCisgICAgICAgIG1vdnEgICAgbW0yLG1tMQorICAgICAgICBtb3ZxICAgIG1tMyxtbTEgICAgICAgICAgICAgICAgIDsgbW0xPSggMCAxIDIgMyA0IDUgNiA3KQorICAgICAgICBwc2xscSAgIG1tMixCWVRFX0JJVCAgICAgICAgICAgIDsgbW0yPSggLSAwIDEgMiAzIDQgNSA2KQorICAgICAgICBwc3JscSAgIG1tMyxCWVRFX0JJVCAgICAgICAgICAgIDsgbW0zPSggMSAyIDMgNCA1IDYgNyAtKQogCi0JcG9yCW1tMixtbTcJCQk7IG1tMj0oLTEgMCAxIDIgMyA0IDUgNikKLQlwb3IJbW0zLG1tNgkJCTsgbW0zPSggMSAyIDMgNCA1IDYgNyA4KQorICAgICAgICBwb3IgICAgIG1tMixtbTcgICAgICAgICAgICAgICAgIDsgbW0yPSgtMSAwIDEgMiAzIDQgNSA2KQorICAgICAgICBwb3IgICAgIG1tMyxtbTYgICAgICAgICAgICAgICAgIDsgbW0zPSggMSAyIDMgNCA1IDYgNyA4KQogCi0JbW92cQltbTcsbW0xCi0JcHNybHEJbW03LChTSVpFT0ZfTU1XT1JELTEpKkJZVEVfQklUCTsgbW03PSggNyAtIC0gLSAtIC0gLSAtKQorICAgICAgICBtb3ZxICAgIG1tNyxtbTEKKyAgICAgICAgcHNybHEgICBtbTcsKFNJWkVPRl9NTVdPUkQtMSkqQllURV9CSVQgIDsgbW03PSggNyAtIC0gLSAtIC0gLSAtKQogCi0JbW92cSAgICAgIG1tNCxtbTEKLQlwdW5wY2tsYncgbW0xLG1tMAkJOyBtbTE9KCAwIDEgMiAzKQotCXB1bnBja2hidyBtbTQsbW0wCQk7IG1tND0oIDQgNSA2IDcpCi0JbW92cSAgICAgIG1tNSxtbTIKLQlwdW5wY2tsYncgbW0yLG1tMAkJOyBtbTI9KC0xIDAgMSAyKQotCXB1bnBja2hidyBtbTUsbW0wCQk7IG1tNT0oIDMgNCA1IDYpCi0JbW92cSAgICAgIG1tNixtbTMKLQlwdW5wY2tsYncgbW0zLG1tMAkJOyBtbTM9KCAxIDIgMyA0KQotCXB1bnBja2hidyBtbTYsbW0wCQk7IG1tNj0oIDUgNiA3IDgpCisgICAgICAgIG1vdnEgICAgICBtbTQsbW0xCisgICAgICAgIHB1bnBja2xidyBtbTEsbW0wICAgICAgICAgICAgICAgOyBtbTE9KCAwIDEgMiAzKQorICAgICAgICBwdW5wY2toYncgbW00LG1tMCAgICAgICAgICAgICAgIDsgbW00PSggNCA1IDYgNykKKyAgICAgICAgbW92cSAgICAgIG1tNSxtbTIKKyAgICAgICAgcHVucGNrbGJ3IG1tMixtbTAgICAgICAgICAgICAgICA7IG1tMj0oLTEgMCAxIDIpCisgICAgICAgIHB1bnBja2hidyBtbTUsbW0wICAgICAgICAgICAgICAgOyBtbTU9KCAzIDQgNSA2KQorICAgICAgICBtb3ZxICAgICAgbW02LG1tMworICAgICAgICBwdW5wY2tsYncgbW0zLG1tMCAgICAgICAgICAgICAgIDsgbW0zPSggMSAyIDMgNCkKKyAgICAgICAgcHVucGNraGJ3IG1tNixtbTAgICAgICAgICAgICAgICA7IG1tNj0oIDUgNiA3IDgpCiAKLQlwbXVsbHcJbW0xLFtHT1RPRkYoZWJ4LFBXX1RIUkVFKV0KLQlwbXVsbHcJbW00LFtHT1RPRkYoZWJ4LFBXX1RIUkVFKV0KLQlwYWRkdwltbTIsW0dPVE9GRihlYngsUFdfT05FKV0KLQlwYWRkdwltbTUsW0dPVE9GRihlYngsUFdfT05FKV0KLQlwYWRkdwltbTMsW0dPVE9GRihlYngsUFdfVFdPKV0KLQlwYWRkdwltbTYsW0dPVE9GRihlYngsUFdfVFdPKV0KKyAgICAgICAgcG11bGx3ICBtbTEsW0dPVE9GRihlYngsUFdfVEhSRUUpXQorICAgICAgICBwbXVsbHcgIG1tNCxbR09UT0ZGKGVieCxQV19USFJFRSldCisgICAgICAgIHBhZGR3ICAgbW0yLFtHT1RPRkYoZWJ4LFBXX09ORSldCisgICAgICAgIHBhZGR3ICAgbW01LFtHT1RPRkYoZWJ4LFBXX09ORSldCisgICAgICAgIHBhZGR3ICAgbW0zLFtHT1RPRkYoZWJ4LFBXX1RXTyldCisgICAgICAgIHBhZGR3ICAgbW02LFtHT1RPRkYoZWJ4LFBXX1RXTyldCiAKLQlwYWRkdwltbTIsbW0xCi0JcGFkZHcJbW01LG1tNAotCXBzcmx3CW1tMiwyCQkJOyBtbTI9T3V0TEU9KCAwICAyICA0ICA2KQotCXBzcmx3CW1tNSwyCQkJOyBtbTU9T3V0SEU9KCA4IDEwIDEyIDE0KQotCXBhZGR3CW1tMyxtbTEKLQlwYWRkdwltbTYsbW00Ci0JcHNybHcJbW0zLDIJCQk7IG1tMz1PdXRMTz0oIDEgIDMgIDUgIDcpCi0JcHNybHcJbW02LDIJCQk7IG1tNj1PdXRITz0oIDkgMTEgMTMgMTUpCisgICAgICAgIHBhZGR3ICAgbW0yLG1tMQorICAgICAgICBwYWRkdyAgIG1tNSxtbTQKKyAgICAgICAgcHNybHcgICBtbTIsMiAgICAgICAgICAgICAgICAgICA7IG1tMj1PdXRMRT0oIDAgIDIgIDQgIDYpCisgICAgICAgIHBzcmx3ICAgbW01LDIgICAgICAgICAgICAgICAgICAgOyBtbTU9T3V0SEU9KCA4IDEwIDEyIDE0KQorICAgICAgICBwYWRkdyAgIG1tMyxtbTEKKyAgICAgICAgcGFkZHcgICBtbTYsbW00CisgICAgICAgIHBzcmx3ICAgbW0zLDIgICAgICAgICAgICAgICAgICAgOyBtbTM9T3V0TE89KCAxICAzICA1ICA3KQorICAgICAgICBwc3JsdyAgIG1tNiwyICAgICAgICAgICAgICAgICAgIDsgbW02PU91dEhPPSggOSAxMSAxMyAxNSkKIAotCXBzbGx3CW1tMyxCWVRFX0JJVAotCXBzbGx3CW1tNixCWVRFX0JJVAotCXBvcgltbTIsbW0zCQkJOyBtbTI9T3V0TD0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcpCi0JcG9yCW1tNSxtbTYJCQk7IG1tNT1PdXRIPSggOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKKyAgICAgICAgcHNsbHcgICBtbTMsQllURV9CSVQKKyAgICAgICAgcHNsbHcgICBtbTYsQllURV9CSVQKKyAgICAgICAgcG9yICAgICBtbTIsbW0zICAgICAgICAgICAgICAgICA7IG1tMj1PdXRMPSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNykKKyAgICAgICAgcG9yICAgICBtbTUsbW02ICAgICAgICAgICAgICAgICA7IG1tNT1PdXRIPSggOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKIAotCW1vdnEJTU1XT1JEIFtlZGkrMCpTSVpFT0ZfTU1XT1JEXSwgbW0yCi0JbW92cQlNTVdPUkQgW2VkaSsxKlNJWkVPRl9NTVdPUkRdLCBtbTUKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW2VkaSswKlNJWkVPRl9NTVdPUkRdLCBtbTIKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW2VkaSsxKlNJWkVPRl9NTVdPUkRdLCBtbTUKIAotCXN1YgllYXgsIGJ5dGUgU0laRU9GX01NV09SRAotCWFkZAllc2ksIGJ5dGUgMSpTSVpFT0ZfTU1XT1JECTsgaW5wdHIKLQlhZGQJZWRpLCBieXRlIDIqU0laRU9GX01NV09SRAk7IG91dHB0cgotCWNtcAllYXgsIGJ5dGUgU0laRU9GX01NV09SRAotCWphCW5lYXIgLmNvbHVtbmxvb3AKLQl0ZXN0CWVheCxlYXgKLQlqbnoJbmVhciAuY29sdW1ubG9vcF9sYXN0CisgICAgICAgIHN1YiAgICAgZWF4LCBieXRlIFNJWkVPRl9NTVdPUkQKKyAgICAgICAgYWRkICAgICBlc2ksIGJ5dGUgMSpTSVpFT0ZfTU1XT1JEICAgICAgIDsgaW5wdHIKKyAgICAgICAgYWRkICAgICBlZGksIGJ5dGUgMipTSVpFT0ZfTU1XT1JEICAgICAgIDsgb3V0cHRyCisgICAgICAgIGNtcCAgICAgZWF4LCBieXRlIFNJWkVPRl9NTVdPUkQKKyAgICAgICAgamEgICAgICBuZWFyIC5jb2x1bW5sb29wCisgICAgICAgIHRlc3QgICAgZWF4LGVheAorICAgICAgICBqbnogICAgIG5lYXIgLmNvbHVtbmxvb3BfbGFzdAogCi0JcG9wCWVzaQotCXBvcAllZGkKLQlwb3AJZWF4CisgICAgICAgIHBvcCAgICAgZXNpCisgICAgICAgIHBvcCAgICAgZWRpCisgICAgICAgIHBvcCAgICAgZWF4CiAKLQlhZGQJZXNpLCBieXRlIFNJWkVPRl9KU0FNUFJPVwk7IGlucHV0X2RhdGEKLQlhZGQJZWRpLCBieXRlIFNJWkVPRl9KU0FNUFJPVwk7IG91dHB1dF9kYXRhCi0JZGVjCWVjeAkJCQk7IHJvd2N0cgotCWpnCW5lYXIgLnJvd2xvb3AKKyAgICAgICAgYWRkICAgICBlc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XICAgICAgIDsgaW5wdXRfZGF0YQorICAgICAgICBhZGQgICAgIGVkaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cgICAgICAgOyBvdXRwdXRfZGF0YQorICAgICAgICBkZWMgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyByb3djdHIKKyAgICAgICAgamcgICAgICBuZWFyIC5yb3dsb29wCiAKLQllbW1zCQk7IGVtcHR5IE1NWCBzdGF0ZQorICAgICAgICBlbW1zICAgICAgICAgICAgOyBlbXB0eSBNTVggc3RhdGUKIAogLnJldHVybjoKLQlwb3AJZWRpCi0JcG9wCWVzaQotOwlwb3AJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotOwlwb3AJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotCXBvcHBpYwllYngKLQlwb3AJZWJwCi0JcmV0CisgICAgICAgIHBvcCAgICAgZWRpCisgICAgICAgIHBvcCAgICAgZXNpCis7ICAgICAgIHBvcCAgICAgZWR4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgICAgIHBvcCAgICAgZWN4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgICAgIHBvcHBpYyAgZWJ4CisgICAgICAgIHBvcCAgICAgZWJwCisgICAgICAgIHJldAogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiA7CkBAIC0yMDUsMzI0ICsyMDUsMzI0IEBACiA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyKTsKIDsKIAotJWRlZmluZSBtYXhfdl9zYW1wKGIpCQkoYikrOAkJCTsgaW50IG1heF92X3NhbXBfZmFjdG9yCi0lZGVmaW5lIGRvd25zYW1wX3dpZHRoKGIpCShiKSsxMgk7IEpESU1FTlNJT04gZG93bnNhbXBsZWRfd2lkdGgKLSVkZWZpbmUgaW5wdXRfZGF0YShiKQkJKGIpKzE2CQk7IEpTQU1QQVJSQVkgaW5wdXRfZGF0YQotJWRlZmluZSBvdXRwdXRfZGF0YV9wdHIoYikJKGIpKzIwCQk7IEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIKKyVkZWZpbmUgbWF4X3Zfc2FtcChiKSAgICAgICAgICAgKGIpKzggICAgICAgICAgIDsgaW50IG1heF92X3NhbXBfZmFjdG9yCislZGVmaW5lIGRvd25zYW1wX3dpZHRoKGIpICAgICAgIChiKSsxMiAgICAgICAgICA7IEpESU1FTlNJT04gZG93bnNhbXBsZWRfd2lkdGgKKyVkZWZpbmUgaW5wdXRfZGF0YShiKSAgICAgICAgICAgKGIpKzE2ICAgICAgICAgIDsgSlNBTVBBUlJBWSBpbnB1dF9kYXRhCislZGVmaW5lIG91dHB1dF9kYXRhX3B0cihiKSAgICAgIChiKSsyMCAgICAgICAgICA7IEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIKIAotJWRlZmluZSBvcmlnaW5hbF9lYnAJZWJwKzAKLSVkZWZpbmUgd2soaSkJCWVicC0oV0tfTlVNLShpKSkqU0laRU9GX01NV09SRAk7IG1td29yZCB3a1tXS19OVU1dCi0lZGVmaW5lIFdLX05VTQkJNAotJWRlZmluZSBnb3RwdHIJCXdrKDApLVNJWkVPRl9QT0lOVEVSCTsgdm9pZCAqIGdvdHB0cgorJWRlZmluZSBvcmlnaW5hbF9lYnAgICAgZWJwKzAKKyVkZWZpbmUgd2soaSkgICAgICAgICAgIGVicC0oV0tfTlVNLShpKSkqU0laRU9GX01NV09SRCAgOyBtbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0gICAgICAgICAgNAorJWRlZmluZSBnb3RwdHIgICAgICAgICAgd2soMCktU0laRU9GX1BPSU5URVIgICAgOyB2b2lkICogZ290cHRyCiAKLQlhbGlnbgkxNgotCWdsb2JhbAlFWFROKGpzaW1kX2gydjJfZmFuY3lfdXBzYW1wbGVfbW14KQorICAgICAgICBhbGlnbiAgIDE2CisgICAgICAgIGdsb2JhbCAgRVhUTihqc2ltZF9oMnYyX2ZhbmN5X3Vwc2FtcGxlX21teCkKIAogRVhUTihqc2ltZF9oMnYyX2ZhbmN5X3Vwc2FtcGxlX21teCk6Ci0JcHVzaAllYnAKLQltb3YJZWF4LGVzcAkJCQk7IGVheCA9IG9yaWdpbmFsIGVicAotCXN1Ygllc3AsIGJ5dGUgNAotCWFuZAllc3AsIGJ5dGUgKC1TSVpFT0ZfTU1XT1JEKQk7IGFsaWduIHRvIDY0IGJpdHMKLQltb3YJW2VzcF0sZWF4Ci0JbW92CWVicCxlc3AJCQkJOyBlYnAgPSBhbGlnbmVkIGVicAotCWxlYQllc3AsIFt3aygwKV0KLQlwdXNocGljCWVheAkJOyBtYWtlIGEgcm9vbSBmb3IgR09UIGFkZHJlc3MKLQlwdXNoCWVieAotOwlwdXNoCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLTsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi0JcHVzaAllc2kKLQlwdXNoCWVkaQorICAgICAgICBwdXNoICAgIGVicAorICAgICAgICBtb3YgICAgIGVheCxlc3AgICAgICAgICAgICAgICAgICAgICAgICAgOyBlYXggPSBvcmlnaW5hbCBlYnAKKyAgICAgICAgc3ViICAgICBlc3AsIGJ5dGUgNAorICAgICAgICBhbmQgICAgIGVzcCwgYnl0ZSAoLVNJWkVPRl9NTVdPUkQpICAgICAgOyBhbGlnbiB0byA2NCBiaXRzCisgICAgICAgIG1vdiAgICAgW2VzcF0sZWF4CisgICAgICAgIG1vdiAgICAgZWJwLGVzcCAgICAgICAgICAgICAgICAgICAgICAgICA7IGVicCA9IGFsaWduZWQgZWJwCisgICAgICAgIGxlYSAgICAgZXNwLCBbd2soMCldCisgICAgICAgIHB1c2hwaWMgZWF4ICAgICAgICAgICAgIDsgbWFrZSBhIHJvb20gZm9yIEdPVCBhZGRyZXNzCisgICAgICAgIHB1c2ggICAgZWJ4Cis7ICAgICAgIHB1c2ggICAgZWN4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgICAgIHB1c2ggICAgZWR4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgICAgIHB1c2ggICAgZXNpCisgICAgICAgIHB1c2ggICAgZWRpCiAKLQlnZXRfR09UCWVieAkJCTsgZ2V0IEdPVCBhZGRyZXNzCi0JbW92cGljCVBPSU5URVIgW2dvdHB0cl0sIGVieAk7IHNhdmUgR09UIGFkZHJlc3MKKyAgICAgICAgZ2V0X0dPVCBlYnggICAgICAgICAgICAgICAgICAgICA7IGdldCBHT1QgYWRkcmVzcworICAgICAgICBtb3ZwaWMgIFBPSU5URVIgW2dvdHB0cl0sIGVieCAgIDsgc2F2ZSBHT1QgYWRkcmVzcwogCi0JbW92CWVkeCxlYXgJCQkJOyBlZHggPSBvcmlnaW5hbCBlYnAKLQltb3YJZWF4LCBKRElNRU5TSU9OIFtkb3duc2FtcF93aWR0aChlZHgpXSAgOyBjb2xjdHIKLQl0ZXN0CWVheCxlYXgKLQlqegluZWFyIC5yZXR1cm4KKyAgICAgICAgbW92ICAgICBlZHgsZWF4ICAgICAgICAgICAgICAgICAgICAgICAgIDsgZWR4ID0gb3JpZ2luYWwgZWJwCisgICAgICAgIG1vdiAgICAgZWF4LCBKRElNRU5TSU9OIFtkb3duc2FtcF93aWR0aChlZHgpXSAgOyBjb2xjdHIKKyAgICAgICAgdGVzdCAgICBlYXgsZWF4CisgICAgICAgIGp6ICAgICAgbmVhciAucmV0dXJuCiAKLQltb3YJZWN4LCBJTlQgW21heF92X3NhbXAoZWR4KV0JOyByb3djdHIKLQl0ZXN0CWVjeCxlY3gKLQlqegluZWFyIC5yZXR1cm4KKyAgICAgICAgbW92ICAgICBlY3gsIElOVCBbbWF4X3Zfc2FtcChlZHgpXSAgICAgIDsgcm93Y3RyCisgICAgICAgIHRlc3QgICAgZWN4LGVjeAorICAgICAgICBqeiAgICAgIG5lYXIgLnJldHVybgogCi0JbW92CWVzaSwgSlNBTVBBUlJBWSBbaW5wdXRfZGF0YShlZHgpXQk7IGlucHV0X2RhdGEKLQltb3YJZWRpLCBQT0lOVEVSIFtvdXRwdXRfZGF0YV9wdHIoZWR4KV0KLQltb3YJZWRpLCBKU0FNUEFSUkFZIFtlZGldCQkJOyBvdXRwdXRfZGF0YQotCWFsaWdueAkxNiw3CisgICAgICAgIG1vdiAgICAgZXNpLCBKU0FNUEFSUkFZIFtpbnB1dF9kYXRhKGVkeCldICAgICAgIDsgaW5wdXRfZGF0YQorICAgICAgICBtb3YgICAgIGVkaSwgUE9JTlRFUiBbb3V0cHV0X2RhdGFfcHRyKGVkeCldCisgICAgICAgIG1vdiAgICAgZWRpLCBKU0FNUEFSUkFZIFtlZGldICAgICAgICAgICAgICAgICAgIDsgb3V0cHV0X2RhdGEKKyAgICAgICAgYWxpZ254ICAxNiw3CiAucm93bG9vcDoKLQlwdXNoCWVheAkJCQkJOyBjb2xjdHIKLQlwdXNoCWVjeAotCXB1c2gJZWRpCi0JcHVzaAllc2kKKyAgICAgICAgcHVzaCAgICBlYXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBjb2xjdHIKKyAgICAgICAgcHVzaCAgICBlY3gKKyAgICAgICAgcHVzaCAgICBlZGkKKyAgICAgICAgcHVzaCAgICBlc2kKIAotCW1vdgllY3gsIEpTQU1QUk9XIFtlc2ktMSpTSVpFT0ZfSlNBTVBST1ddCTsgaW5wdHIxKGFib3ZlKQotCW1vdgllYngsIEpTQU1QUk9XIFtlc2krMCpTSVpFT0ZfSlNBTVBST1ddCTsgaW5wdHIwCi0JbW92CWVzaSwgSlNBTVBST1cgW2VzaSsxKlNJWkVPRl9KU0FNUFJPV10JOyBpbnB0cjEoYmVsb3cpCi0JbW92CWVkeCwgSlNBTVBST1cgW2VkaSswKlNJWkVPRl9KU0FNUFJPV10JOyBvdXRwdHIwCi0JbW92CWVkaSwgSlNBTVBST1cgW2VkaSsxKlNJWkVPRl9KU0FNUFJPV10JOyBvdXRwdHIxCisgICAgICAgIG1vdiAgICAgZWN4LCBKU0FNUFJPVyBbZXNpLTEqU0laRU9GX0pTQU1QUk9XXSAgIDsgaW5wdHIxKGFib3ZlKQorICAgICAgICBtb3YgICAgIGVieCwgSlNBTVBST1cgW2VzaSswKlNJWkVPRl9KU0FNUFJPV10gICA7IGlucHRyMAorICAgICAgICBtb3YgICAgIGVzaSwgSlNBTVBST1cgW2VzaSsxKlNJWkVPRl9KU0FNUFJPV10gICA7IGlucHRyMShiZWxvdykKKyAgICAgICAgbW92ICAgICBlZHgsIEpTQU1QUk9XIFtlZGkrMCpTSVpFT0ZfSlNBTVBST1ddICAgOyBvdXRwdHIwCisgICAgICAgIG1vdiAgICAgZWRpLCBKU0FNUFJPVyBbZWRpKzEqU0laRU9GX0pTQU1QUk9XXSAgIDsgb3V0cHRyMQogCi0JdGVzdAllYXgsIFNJWkVPRl9NTVdPUkQtMQotCWp6CXNob3J0IC5za2lwCi0JcHVzaAllZHgKLQltb3YJZGwsIEpTQU1QTEUgW2VjeCsoZWF4LTEpKlNJWkVPRl9KU0FNUExFXQotCW1vdglKU0FNUExFIFtlY3grZWF4KlNJWkVPRl9KU0FNUExFXSwgZGwKLQltb3YJZGwsIEpTQU1QTEUgW2VieCsoZWF4LTEpKlNJWkVPRl9KU0FNUExFXQotCW1vdglKU0FNUExFIFtlYngrZWF4KlNJWkVPRl9KU0FNUExFXSwgZGwKLQltb3YJZGwsIEpTQU1QTEUgW2VzaSsoZWF4LTEpKlNJWkVPRl9KU0FNUExFXQotCW1vdglKU0FNUExFIFtlc2krZWF4KlNJWkVPRl9KU0FNUExFXSwgZGwJOyBpbnNlcnQgYSBkdW1teSBzYW1wbGUKLQlwb3AJZWR4CisgICAgICAgIHRlc3QgICAgZWF4LCBTSVpFT0ZfTU1XT1JELTEKKyAgICAgICAganogICAgICBzaG9ydCAuc2tpcAorICAgICAgICBwdXNoICAgIGVkeAorICAgICAgICBtb3YgICAgIGRsLCBKU0FNUExFIFtlY3grKGVheC0xKSpTSVpFT0ZfSlNBTVBMRV0KKyAgICAgICAgbW92ICAgICBKU0FNUExFIFtlY3grZWF4KlNJWkVPRl9KU0FNUExFXSwgZGwKKyAgICAgICAgbW92ICAgICBkbCwgSlNBTVBMRSBbZWJ4KyhlYXgtMSkqU0laRU9GX0pTQU1QTEVdCisgICAgICAgIG1vdiAgICAgSlNBTVBMRSBbZWJ4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIGRsCisgICAgICAgIG1vdiAgICAgZGwsIEpTQU1QTEUgW2VzaSsoZWF4LTEpKlNJWkVPRl9KU0FNUExFXQorICAgICAgICBtb3YgICAgIEpTQU1QTEUgW2VzaStlYXgqU0laRU9GX0pTQU1QTEVdLCBkbCAgICA7IGluc2VydCBhIGR1bW15IHNhbXBsZQorICAgICAgICBwb3AgICAgIGVkeAogLnNraXA6Ci0JOyAtLSBwcm9jZXNzIHRoZSBmaXJzdCBjb2x1bW4gYmxvY2sKKyAgICAgICAgOyAtLSBwcm9jZXNzIHRoZSBmaXJzdCBjb2x1bW4gYmxvY2sKIAotCW1vdnEJbW0wLCBNTVdPUkQgW2VieCswKlNJWkVPRl9NTVdPUkRdCTsgbW0wPXJvd1sgMF1bMF0KLQltb3ZxCW1tMSwgTU1XT1JEIFtlY3grMCpTSVpFT0ZfTU1XT1JEXQk7IG1tMT1yb3dbLTFdWzBdCi0JbW92cQltbTIsIE1NV09SRCBbZXNpKzAqU0laRU9GX01NV09SRF0JOyBtbTI9cm93WysxXVswXQorICAgICAgICBtb3ZxICAgIG1tMCwgTU1XT1JEIFtlYngrMCpTSVpFT0ZfTU1XT1JEXSAgICAgICA7IG1tMD1yb3dbIDBdWzBdCisgICAgICAgIG1vdnEgICAgbW0xLCBNTVdPUkQgW2VjeCswKlNJWkVPRl9NTVdPUkRdICAgICAgIDsgbW0xPXJvd1stMV1bMF0KKyAgICAgICAgbW92cSAgICBtbTIsIE1NV09SRCBbZXNpKzAqU0laRU9GX01NV09SRF0gICAgICAgOyBtbTI9cm93WysxXVswXQogCi0JcHVzaHBpYwllYngKLQltb3ZwaWMJZWJ4LCBQT0lOVEVSIFtnb3RwdHJdCTsgbG9hZCBHT1QgYWRkcmVzcworICAgICAgICBwdXNocGljIGVieAorICAgICAgICBtb3ZwaWMgIGVieCwgUE9JTlRFUiBbZ290cHRyXSAgIDsgbG9hZCBHT1QgYWRkcmVzcwogCi0JcHhvciAgICAgIG1tMyxtbTMJCTsgbW0zPShhbGwgMCdzKQotCW1vdnEgICAgICBtbTQsbW0wCi0JcHVucGNrbGJ3IG1tMCxtbTMJCTsgbW0wPXJvd1sgMF1bMF0oIDAgMSAyIDMpCi0JcHVucGNraGJ3IG1tNCxtbTMJCTsgbW00PXJvd1sgMF1bMF0oIDQgNSA2IDcpCi0JbW92cSAgICAgIG1tNSxtbTEKLQlwdW5wY2tsYncgbW0xLG1tMwkJOyBtbTE9cm93Wy0xXVswXSggMCAxIDIgMykKLQlwdW5wY2toYncgbW01LG1tMwkJOyBtbTU9cm93Wy0xXVswXSggNCA1IDYgNykKLQltb3ZxICAgICAgbW02LG1tMgotCXB1bnBja2xidyBtbTIsbW0zCQk7IG1tMj1yb3dbKzFdWzBdKCAwIDEgMiAzKQotCXB1bnBja2hidyBtbTYsbW0zCQk7IG1tNj1yb3dbKzFdWzBdKCA0IDUgNiA3KQorICAgICAgICBweG9yICAgICAgbW0zLG1tMyAgICAgICAgICAgICAgIDsgbW0zPShhbGwgMCdzKQorICAgICAgICBtb3ZxICAgICAgbW00LG1tMAorICAgICAgICBwdW5wY2tsYncgbW0wLG1tMyAgICAgICAgICAgICAgIDsgbW0wPXJvd1sgMF1bMF0oIDAgMSAyIDMpCisgICAgICAgIHB1bnBja2hidyBtbTQsbW0zICAgICAgICAgICAgICAgOyBtbTQ9cm93WyAwXVswXSggNCA1IDYgNykKKyAgICAgICAgbW92cSAgICAgIG1tNSxtbTEKKyAgICAgICAgcHVucGNrbGJ3IG1tMSxtbTMgICAgICAgICAgICAgICA7IG1tMT1yb3dbLTFdWzBdKCAwIDEgMiAzKQorICAgICAgICBwdW5wY2toYncgbW01LG1tMyAgICAgICAgICAgICAgIDsgbW01PXJvd1stMV1bMF0oIDQgNSA2IDcpCisgICAgICAgIG1vdnEgICAgICBtbTYsbW0yCisgICAgICAgIHB1bnBja2xidyBtbTIsbW0zICAgICAgICAgICAgICAgOyBtbTI9cm93WysxXVswXSggMCAxIDIgMykKKyAgICAgICAgcHVucGNraGJ3IG1tNixtbTMgICAgICAgICAgICAgICA7IG1tNj1yb3dbKzFdWzBdKCA0IDUgNiA3KQogCi0JcG11bGx3CW1tMCxbR09UT0ZGKGVieCxQV19USFJFRSldCi0JcG11bGx3CW1tNCxbR09UT0ZGKGVieCxQV19USFJFRSldCisgICAgICAgIHBtdWxsdyAgbW0wLFtHT1RPRkYoZWJ4LFBXX1RIUkVFKV0KKyAgICAgICAgcG11bGx3ICBtbTQsW0dPVE9GRihlYngsUFdfVEhSRUUpXQogCi0JcGNtcGVxYgltbTcsbW03Ci0JcHNybHEJbW03LChTSVpFT0ZfTU1XT1JELTIpKkJZVEVfQklUCisgICAgICAgIHBjbXBlcWIgbW03LG1tNworICAgICAgICBwc3JscSAgIG1tNywoU0laRU9GX01NV09SRC0yKSpCWVRFX0JJVAogCi0JcGFkZHcJbW0xLG1tMAkJCTsgbW0xPUludDBMPSggMCAxIDIgMykKLQlwYWRkdwltbTUsbW00CQkJOyBtbTU9SW50MEg9KCA0IDUgNiA3KQotCXBhZGR3CW1tMixtbTAJCQk7IG1tMj1JbnQxTD0oIDAgMSAyIDMpCi0JcGFkZHcJbW02LG1tNAkJCTsgbW02PUludDFIPSggNCA1IDYgNykKKyAgICAgICAgcGFkZHcgICBtbTEsbW0wICAgICAgICAgICAgICAgICA7IG1tMT1JbnQwTD0oIDAgMSAyIDMpCisgICAgICAgIHBhZGR3ICAgbW01LG1tNCAgICAgICAgICAgICAgICAgOyBtbTU9SW50MEg9KCA0IDUgNiA3KQorICAgICAgICBwYWRkdyAgIG1tMixtbTAgICAgICAgICAgICAgICAgIDsgbW0yPUludDFMPSggMCAxIDIgMykKKyAgICAgICAgcGFkZHcgICBtbTYsbW00ICAgICAgICAgICAgICAgICA7IG1tNj1JbnQxSD0oIDQgNSA2IDcpCiAKLQltb3ZxCU1NV09SRCBbZWR4KzAqU0laRU9GX01NV09SRF0sIG1tMQk7IHRlbXBvcmFyaWx5IHNhdmUKLQltb3ZxCU1NV09SRCBbZWR4KzEqU0laRU9GX01NV09SRF0sIG1tNQk7IHRoZSBpbnRlcm1lZGlhdGUgZGF0YQotCW1vdnEJTU1XT1JEIFtlZGkrMCpTSVpFT0ZfTU1XT1JEXSwgbW0yCi0JbW92cQlNTVdPUkQgW2VkaSsxKlNJWkVPRl9NTVdPUkRdLCBtbTYKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW2VkeCswKlNJWkVPRl9NTVdPUkRdLCBtbTEgICAgICAgOyB0ZW1wb3JhcmlseSBzYXZlCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtlZHgrMSpTSVpFT0ZfTU1XT1JEXSwgbW01ICAgICAgIDsgdGhlIGludGVybWVkaWF0ZSBkYXRhCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtlZGkrMCpTSVpFT0ZfTU1XT1JEXSwgbW0yCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtlZGkrMSpTSVpFT0ZfTU1XT1JEXSwgbW02CiAKLQlwYW5kCW1tMSxtbTcJCQk7IG1tMT0oIDAgLSAtIC0pCi0JcGFuZAltbTIsbW03CQkJOyBtbTI9KCAwIC0gLSAtKQorICAgICAgICBwYW5kICAgIG1tMSxtbTcgICAgICAgICAgICAgICAgIDsgbW0xPSggMCAtIC0gLSkKKyAgICAgICAgcGFuZCAgICBtbTIsbW03ICAgICAgICAgICAgICAgICA7IG1tMj0oIDAgLSAtIC0pCiAKLQltb3ZxCU1NV09SRCBbd2soMCldLCBtbTEKLQltb3ZxCU1NV09SRCBbd2soMSldLCBtbTIKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW3drKDApXSwgbW0xCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFt3aygxKV0sIG1tMgogCi0JcG9wcGljCWVieAorICAgICAgICBwb3BwaWMgIGVieAogCi0JYWRkCWVheCwgYnl0ZSBTSVpFT0ZfTU1XT1JELTEKLQlhbmQJZWF4LCBieXRlIC1TSVpFT0ZfTU1XT1JECi0JY21wCWVheCwgYnl0ZSBTSVpFT0ZfTU1XT1JECi0JamEJc2hvcnQgLmNvbHVtbmxvb3AKLQlhbGlnbngJMTYsNworICAgICAgICBhZGQgICAgIGVheCwgYnl0ZSBTSVpFT0ZfTU1XT1JELTEKKyAgICAgICAgYW5kICAgICBlYXgsIGJ5dGUgLVNJWkVPRl9NTVdPUkQKKyAgICAgICAgY21wICAgICBlYXgsIGJ5dGUgU0laRU9GX01NV09SRAorICAgICAgICBqYSAgICAgIHNob3J0IC5jb2x1bW5sb29wCisgICAgICAgIGFsaWdueCAgMTYsNwogCiAuY29sdW1ubG9vcF9sYXN0OgotCTsgLS0gcHJvY2VzcyB0aGUgbGFzdCBjb2x1bW4gYmxvY2sKKyAgICAgICAgOyAtLSBwcm9jZXNzIHRoZSBsYXN0IGNvbHVtbiBibG9jawogCi0JcHVzaHBpYwllYngKLQltb3ZwaWMJZWJ4LCBQT0lOVEVSIFtnb3RwdHJdCTsgbG9hZCBHT1QgYWRkcmVzcworICAgICAgICBwdXNocGljIGVieAorICAgICAgICBtb3ZwaWMgIGVieCwgUE9JTlRFUiBbZ290cHRyXSAgIDsgbG9hZCBHT1QgYWRkcmVzcwogCi0JcGNtcGVxYgltbTEsbW0xCi0JcHNsbHEJbW0xLChTSVpFT0ZfTU1XT1JELTIpKkJZVEVfQklUCi0JbW92cQltbTIsbW0xCisgICAgICAgIHBjbXBlcWIgbW0xLG1tMQorICAgICAgICBwc2xscSAgIG1tMSwoU0laRU9GX01NV09SRC0yKSpCWVRFX0JJVAorICAgICAgICBtb3ZxICAgIG1tMixtbTEKIAotCXBhbmQJbW0xLCBNTVdPUkQgW2VkeCsxKlNJWkVPRl9NTVdPUkRdCTsgbW0xPSggLSAtIC0gNykKLQlwYW5kCW1tMiwgTU1XT1JEIFtlZGkrMSpTSVpFT0ZfTU1XT1JEXQk7IG1tMj0oIC0gLSAtIDcpCisgICAgICAgIHBhbmQgICAgbW0xLCBNTVdPUkQgW2VkeCsxKlNJWkVPRl9NTVdPUkRdICAgICAgIDsgbW0xPSggLSAtIC0gNykKKyAgICAgICAgcGFuZCAgICBtbTIsIE1NV09SRCBbZWRpKzEqU0laRU9GX01NV09SRF0gICAgICAgOyBtbTI9KCAtIC0gLSA3KQogCi0JbW92cQlNTVdPUkQgW3drKDIpXSwgbW0xCi0JbW92cQlNTVdPUkQgW3drKDMpXSwgbW0yCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFt3aygyKV0sIG1tMQorICAgICAgICBtb3ZxICAgIE1NV09SRCBbd2soMyldLCBtbTIKIAotCWptcAlzaG9ydCAudXBzYW1wbGUKLQlhbGlnbngJMTYsNworICAgICAgICBqbXAgICAgIHNob3J0IC51cHNhbXBsZQorICAgICAgICBhbGlnbnggIDE2LDcKIAogLmNvbHVtbmxvb3A6Ci0JOyAtLSBwcm9jZXNzIHRoZSBuZXh0IGNvbHVtbiBibG9jaworICAgICAgICA7IC0tIHByb2Nlc3MgdGhlIG5leHQgY29sdW1uIGJsb2NrCiAKLQltb3ZxCW1tMCwgTU1XT1JEIFtlYngrMSpTSVpFT0ZfTU1XT1JEXQk7IG1tMD1yb3dbIDBdWzFdCi0JbW92cQltbTEsIE1NV09SRCBbZWN4KzEqU0laRU9GX01NV09SRF0JOyBtbTE9cm93Wy0xXVsxXQotCW1vdnEJbW0yLCBNTVdPUkQgW2VzaSsxKlNJWkVPRl9NTVdPUkRdCTsgbW0yPXJvd1srMV1bMV0KKyAgICAgICAgbW92cSAgICBtbTAsIE1NV09SRCBbZWJ4KzEqU0laRU9GX01NV09SRF0gICAgICAgOyBtbTA9cm93WyAwXVsxXQorICAgICAgICBtb3ZxICAgIG1tMSwgTU1XT1JEIFtlY3grMSpTSVpFT0ZfTU1XT1JEXSAgICAgICA7IG1tMT1yb3dbLTFdWzFdCisgICAgICAgIG1vdnEgICAgbW0yLCBNTVdPUkQgW2VzaSsxKlNJWkVPRl9NTVdPUkRdICAgICAgIDsgbW0yPXJvd1srMV1bMV0KIAotCXB1c2hwaWMJZWJ4Ci0JbW92cGljCWVieCwgUE9JTlRFUiBbZ290cHRyXQk7IGxvYWQgR09UIGFkZHJlc3MKKyAgICAgICAgcHVzaHBpYyBlYngKKyAgICAgICAgbW92cGljICBlYngsIFBPSU5URVIgW2dvdHB0cl0gICA7IGxvYWQgR09UIGFkZHJlc3MKIAotCXB4b3IgICAgICBtbTMsbW0zCQk7IG1tMz0oYWxsIDAncykKLQltb3ZxICAgICAgbW00LG1tMAotCXB1bnBja2xidyBtbTAsbW0zCQk7IG1tMD1yb3dbIDBdWzFdKCAwIDEgMiAzKQotCXB1bnBja2hidyBtbTQsbW0zCQk7IG1tND1yb3dbIDBdWzFdKCA0IDUgNiA3KQotCW1vdnEgICAgICBtbTUsbW0xCi0JcHVucGNrbGJ3IG1tMSxtbTMJCTsgbW0xPXJvd1stMV1bMV0oIDAgMSAyIDMpCi0JcHVucGNraGJ3IG1tNSxtbTMJCTsgbW01PXJvd1stMV1bMV0oIDQgNSA2IDcpCi0JbW92cSAgICAgIG1tNixtbTIKLQlwdW5wY2tsYncgbW0yLG1tMwkJOyBtbTI9cm93WysxXVsxXSggMCAxIDIgMykKLQlwdW5wY2toYncgbW02LG1tMwkJOyBtbTY9cm93WysxXVsxXSggNCA1IDYgNykKKyAgICAgICAgcHhvciAgICAgIG1tMyxtbTMgICAgICAgICAgICAgICA7IG1tMz0oYWxsIDAncykKKyAgICAgICAgbW92cSAgICAgIG1tNCxtbTAKKyAgICAgICAgcHVucGNrbGJ3IG1tMCxtbTMgICAgICAgICAgICAgICA7IG1tMD1yb3dbIDBdWzFdKCAwIDEgMiAzKQorICAgICAgICBwdW5wY2toYncgbW00LG1tMyAgICAgICAgICAgICAgIDsgbW00PXJvd1sgMF1bMV0oIDQgNSA2IDcpCisgICAgICAgIG1vdnEgICAgICBtbTUsbW0xCisgICAgICAgIHB1bnBja2xidyBtbTEsbW0zICAgICAgICAgICAgICAgOyBtbTE9cm93Wy0xXVsxXSggMCAxIDIgMykKKyAgICAgICAgcHVucGNraGJ3IG1tNSxtbTMgICAgICAgICAgICAgICA7IG1tNT1yb3dbLTFdWzFdKCA0IDUgNiA3KQorICAgICAgICBtb3ZxICAgICAgbW02LG1tMgorICAgICAgICBwdW5wY2tsYncgbW0yLG1tMyAgICAgICAgICAgICAgIDsgbW0yPXJvd1srMV1bMV0oIDAgMSAyIDMpCisgICAgICAgIHB1bnBja2hidyBtbTYsbW0zICAgICAgICAgICAgICAgOyBtbTY9cm93WysxXVsxXSggNCA1IDYgNykKIAotCXBtdWxsdwltbTAsW0dPVE9GRihlYngsUFdfVEhSRUUpXQotCXBtdWxsdwltbTQsW0dPVE9GRihlYngsUFdfVEhSRUUpXQorICAgICAgICBwbXVsbHcgIG1tMCxbR09UT0ZGKGVieCxQV19USFJFRSldCisgICAgICAgIHBtdWxsdyAgbW00LFtHT1RPRkYoZWJ4LFBXX1RIUkVFKV0KIAotCXBhZGR3CW1tMSxtbTAJCQk7IG1tMT1JbnQwTD0oIDAgMSAyIDMpCi0JcGFkZHcJbW01LG1tNAkJCTsgbW01PUludDBIPSggNCA1IDYgNykKLQlwYWRkdwltbTIsbW0wCQkJOyBtbTI9SW50MUw9KCAwIDEgMiAzKQotCXBhZGR3CW1tNixtbTQJCQk7IG1tNj1JbnQxSD0oIDQgNSA2IDcpCisgICAgICAgIHBhZGR3ICAgbW0xLG1tMCAgICAgICAgICAgICAgICAgOyBtbTE9SW50MEw9KCAwIDEgMiAzKQorICAgICAgICBwYWRkdyAgIG1tNSxtbTQgICAgICAgICAgICAgICAgIDsgbW01PUludDBIPSggNCA1IDYgNykKKyAgICAgICAgcGFkZHcgICBtbTIsbW0wICAgICAgICAgICAgICAgICA7IG1tMj1JbnQxTD0oIDAgMSAyIDMpCisgICAgICAgIHBhZGR3ICAgbW02LG1tNCAgICAgICAgICAgICAgICAgOyBtbTY9SW50MUg9KCA0IDUgNiA3KQogCi0JbW92cQlNTVdPUkQgW2VkeCsyKlNJWkVPRl9NTVdPUkRdLCBtbTEJOyB0ZW1wb3JhcmlseSBzYXZlCi0JbW92cQlNTVdPUkQgW2VkeCszKlNJWkVPRl9NTVdPUkRdLCBtbTUJOyB0aGUgaW50ZXJtZWRpYXRlIGRhdGEKLQltb3ZxCU1NV09SRCBbZWRpKzIqU0laRU9GX01NV09SRF0sIG1tMgotCW1vdnEJTU1XT1JEIFtlZGkrMypTSVpFT0ZfTU1XT1JEXSwgbW02CisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtlZHgrMipTSVpFT0ZfTU1XT1JEXSwgbW0xICAgICAgIDsgdGVtcG9yYXJpbHkgc2F2ZQorICAgICAgICBtb3ZxICAgIE1NV09SRCBbZWR4KzMqU0laRU9GX01NV09SRF0sIG1tNSAgICAgICA7IHRoZSBpbnRlcm1lZGlhdGUgZGF0YQorICAgICAgICBtb3ZxICAgIE1NV09SRCBbZWRpKzIqU0laRU9GX01NV09SRF0sIG1tMgorICAgICAgICBtb3ZxICAgIE1NV09SRCBbZWRpKzMqU0laRU9GX01NV09SRF0sIG1tNgogCi0JcHNsbHEJbW0xLChTSVpFT0ZfTU1XT1JELTIpKkJZVEVfQklUCTsgbW0xPSggLSAtIC0gMCkKLQlwc2xscQltbTIsKFNJWkVPRl9NTVdPUkQtMikqQllURV9CSVQJOyBtbTI9KCAtIC0gLSAwKQorICAgICAgICBwc2xscSAgIG1tMSwoU0laRU9GX01NV09SRC0yKSpCWVRFX0JJVCAgOyBtbTE9KCAtIC0gLSAwKQorICAgICAgICBwc2xscSAgIG1tMiwoU0laRU9GX01NV09SRC0yKSpCWVRFX0JJVCAgOyBtbTI9KCAtIC0gLSAwKQogCi0JbW92cQlNTVdPUkQgW3drKDIpXSwgbW0xCi0JbW92cQlNTVdPUkQgW3drKDMpXSwgbW0yCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFt3aygyKV0sIG1tMQorICAgICAgICBtb3ZxICAgIE1NV09SRCBbd2soMyldLCBtbTIKIAogLnVwc2FtcGxlOgotCTsgLS0gcHJvY2VzcyB0aGUgdXBwZXIgcm93CisgICAgICAgIDsgLS0gcHJvY2VzcyB0aGUgdXBwZXIgcm93CiAKLQltb3ZxCW1tNywgTU1XT1JEIFtlZHgrMCpTSVpFT0ZfTU1XT1JEXQk7IG1tNz1JbnQwTD0oIDAgMSAyIDMpCi0JbW92cQltbTMsIE1NV09SRCBbZWR4KzEqU0laRU9GX01NV09SRF0JOyBtbTM9SW50MEg9KCA0IDUgNiA3KQorICAgICAgICBtb3ZxICAgIG1tNywgTU1XT1JEIFtlZHgrMCpTSVpFT0ZfTU1XT1JEXSAgICAgICA7IG1tNz1JbnQwTD0oIDAgMSAyIDMpCisgICAgICAgIG1vdnEgICAgbW0zLCBNTVdPUkQgW2VkeCsxKlNJWkVPRl9NTVdPUkRdICAgICAgIDsgbW0zPUludDBIPSggNCA1IDYgNykKIAotCW1vdnEJbW0wLG1tNwotCW1vdnEJbW00LG1tMwotCXBzcmxxCW1tMCwyKkJZVEVfQklUCQkJOyBtbTA9KCAxIDIgMyAtKQotCXBzbGxxCW1tNCwoU0laRU9GX01NV09SRC0yKSpCWVRFX0JJVAk7IG1tND0oIC0gLSAtIDQpCi0JbW92cQltbTUsbW03Ci0JbW92cQltbTYsbW0zCi0JcHNybHEJbW01LChTSVpFT0ZfTU1XT1JELTIpKkJZVEVfQklUCTsgbW01PSggMyAtIC0gLSkKLQlwc2xscQltbTYsMipCWVRFX0JJVAkJCTsgbW02PSggLSA0IDUgNikKKyAgICAgICAgbW92cSAgICBtbTAsbW03CisgICAgICAgIG1vdnEgICAgbW00LG1tMworICAgICAgICBwc3JscSAgIG1tMCwyKkJZVEVfQklUICAgICAgICAgICAgICAgICAgOyBtbTA9KCAxIDIgMyAtKQorICAgICAgICBwc2xscSAgIG1tNCwoU0laRU9GX01NV09SRC0yKSpCWVRFX0JJVCAgOyBtbTQ9KCAtIC0gLSA0KQorICAgICAgICBtb3ZxICAgIG1tNSxtbTcKKyAgICAgICAgbW92cSAgICBtbTYsbW0zCisgICAgICAgIHBzcmxxICAgbW01LChTSVpFT0ZfTU1XT1JELTIpKkJZVEVfQklUICA7IG1tNT0oIDMgLSAtIC0pCisgICAgICAgIHBzbGxxICAgbW02LDIqQllURV9CSVQgICAgICAgICAgICAgICAgICA7IG1tNj0oIC0gNCA1IDYpCiAKLQlwb3IJbW0wLG1tNAkJCQk7IG1tMD0oIDEgMiAzIDQpCi0JcG9yCW1tNSxtbTYJCQkJOyBtbTU9KCAzIDQgNSA2KQorICAgICAgICBwb3IgICAgIG1tMCxtbTQgICAgICAgICAgICAgICAgICAgICAgICAgOyBtbTA9KCAxIDIgMyA0KQorICAgICAgICBwb3IgICAgIG1tNSxtbTYgICAgICAgICAgICAgICAgICAgICAgICAgOyBtbTU9KCAzIDQgNSA2KQogCi0JbW92cQltbTEsbW03Ci0JbW92cQltbTIsbW0zCi0JcHNsbHEJbW0xLDIqQllURV9CSVQJCQk7IG1tMT0oIC0gMCAxIDIpCi0JcHNybHEJbW0yLDIqQllURV9CSVQJCQk7IG1tMj0oIDUgNiA3IC0pCi0JbW92cQltbTQsbW0zCi0JcHNybHEJbW00LChTSVpFT0ZfTU1XT1JELTIpKkJZVEVfQklUCTsgbW00PSggNyAtIC0gLSkKKyAgICAgICAgbW92cSAgICBtbTEsbW03CisgICAgICAgIG1vdnEgICAgbW0yLG1tMworICAgICAgICBwc2xscSAgIG1tMSwyKkJZVEVfQklUICAgICAgICAgICAgICAgICAgOyBtbTE9KCAtIDAgMSAyKQorICAgICAgICBwc3JscSAgIG1tMiwyKkJZVEVfQklUICAgICAgICAgICAgICAgICAgOyBtbTI9KCA1IDYgNyAtKQorICAgICAgICBtb3ZxICAgIG1tNCxtbTMKKyAgICAgICAgcHNybHEgICBtbTQsKFNJWkVPRl9NTVdPUkQtMikqQllURV9CSVQgIDsgbW00PSggNyAtIC0gLSkKIAotCXBvcgltbTEsIE1NV09SRCBbd2soMCldCQk7IG1tMT0oLTEgMCAxIDIpCi0JcG9yCW1tMiwgTU1XT1JEIFt3aygyKV0JCTsgbW0yPSggNSA2IDcgOCkKKyAgICAgICAgcG9yICAgICBtbTEsIE1NV09SRCBbd2soMCldICAgICAgICAgICAgIDsgbW0xPSgtMSAwIDEgMikKKyAgICAgICAgcG9yICAgICBtbTIsIE1NV09SRCBbd2soMildICAgICAgICAgICAgIDsgbW0yPSggNSA2IDcgOCkKIAotCW1vdnEJTU1XT1JEIFt3aygwKV0sIG1tNAorICAgICAgICBtb3ZxICAgIE1NV09SRCBbd2soMCldLCBtbTQKIAotCXBtdWxsdwltbTcsW0dPVE9GRihlYngsUFdfVEhSRUUpXQotCXBtdWxsdwltbTMsW0dPVE9GRihlYngsUFdfVEhSRUUpXQotCXBhZGR3CW1tMSxbR09UT0ZGKGVieCxQV19FSUdIVCldCi0JcGFkZHcJbW01LFtHT1RPRkYoZWJ4LFBXX0VJR0hUKV0KLQlwYWRkdwltbTAsW0dPVE9GRihlYngsUFdfU0VWRU4pXQotCXBhZGR3CW1tMixbR09UT0ZGKGVieCxQV19TRVZFTildCisgICAgICAgIHBtdWxsdyAgbW03LFtHT1RPRkYoZWJ4LFBXX1RIUkVFKV0KKyAgICAgICAgcG11bGx3ICBtbTMsW0dPVE9GRihlYngsUFdfVEhSRUUpXQorICAgICAgICBwYWRkdyAgIG1tMSxbR09UT0ZGKGVieCxQV19FSUdIVCldCisgICAgICAgIHBhZGR3ICAgbW01LFtHT1RPRkYoZWJ4LFBXX0VJR0hUKV0KKyAgICAgICAgcGFkZHcgICBtbTAsW0dPVE9GRihlYngsUFdfU0VWRU4pXQorICAgICAgICBwYWRkdyAgIG1tMixbR09UT0ZGKGVieCxQV19TRVZFTildCiAKLQlwYWRkdwltbTEsbW03Ci0JcGFkZHcJbW01LG1tMwotCXBzcmx3CW1tMSw0CQkJOyBtbTE9T3V0MExFPSggMCAgMiAgNCAgNikKLQlwc3JsdwltbTUsNAkJCTsgbW01PU91dDBIRT0oIDggMTAgMTIgMTQpCi0JcGFkZHcJbW0wLG1tNwotCXBhZGR3CW1tMixtbTMKLQlwc3JsdwltbTAsNAkJCTsgbW0wPU91dDBMTz0oIDEgIDMgIDUgIDcpCi0JcHNybHcJbW0yLDQJCQk7IG1tMj1PdXQwSE89KCA5IDExIDEzIDE1KQorICAgICAgICBwYWRkdyAgIG1tMSxtbTcKKyAgICAgICAgcGFkZHcgICBtbTUsbW0zCisgICAgICAgIHBzcmx3ICAgbW0xLDQgICAgICAgICAgICAgICAgICAgOyBtbTE9T3V0MExFPSggMCAgMiAgNCAgNikKKyAgICAgICAgcHNybHcgICBtbTUsNCAgICAgICAgICAgICAgICAgICA7IG1tNT1PdXQwSEU9KCA4IDEwIDEyIDE0KQorICAgICAgICBwYWRkdyAgIG1tMCxtbTcKKyAgICAgICAgcGFkZHcgICBtbTIsbW0zCisgICAgICAgIHBzcmx3ICAgbW0wLDQgICAgICAgICAgICAgICAgICAgOyBtbTA9T3V0MExPPSggMSAgMyAgNSAgNykKKyAgICAgICAgcHNybHcgICBtbTIsNCAgICAgICAgICAgICAgICAgICA7IG1tMj1PdXQwSE89KCA5IDExIDEzIDE1KQogCi0JcHNsbHcJbW0wLEJZVEVfQklUCi0JcHNsbHcJbW0yLEJZVEVfQklUCi0JcG9yCW1tMSxtbTAJCQk7IG1tMT1PdXQwTD0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcpCi0JcG9yCW1tNSxtbTIJCQk7IG1tNT1PdXQwSD0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCisgICAgICAgIHBzbGx3ICAgbW0wLEJZVEVfQklUCisgICAgICAgIHBzbGx3ICAgbW0yLEJZVEVfQklUCisgICAgICAgIHBvciAgICAgbW0xLG1tMCAgICAgICAgICAgICAgICAgOyBtbTE9T3V0MEw9KCAwICAxICAyICAzICA0ICA1ICA2ICA3KQorICAgICAgICBwb3IgICAgIG1tNSxtbTIgICAgICAgICAgICAgICAgIDsgbW01PU91dDBIPSggOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKIAotCW1vdnEJTU1XT1JEIFtlZHgrMCpTSVpFT0ZfTU1XT1JEXSwgbW0xCi0JbW92cQlNTVdPUkQgW2VkeCsxKlNJWkVPRl9NTVdPUkRdLCBtbTUKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW2VkeCswKlNJWkVPRl9NTVdPUkRdLCBtbTEKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW2VkeCsxKlNJWkVPRl9NTVdPUkRdLCBtbTUKIAotCTsgLS0gcHJvY2VzcyB0aGUgbG93ZXIgcm93CisgICAgICAgIDsgLS0gcHJvY2VzcyB0aGUgbG93ZXIgcm93CiAKLQltb3ZxCW1tNiwgTU1XT1JEIFtlZGkrMCpTSVpFT0ZfTU1XT1JEXQk7IG1tNj1JbnQxTD0oIDAgMSAyIDMpCi0JbW92cQltbTQsIE1NV09SRCBbZWRpKzEqU0laRU9GX01NV09SRF0JOyBtbTQ9SW50MUg9KCA0IDUgNiA3KQorICAgICAgICBtb3ZxICAgIG1tNiwgTU1XT1JEIFtlZGkrMCpTSVpFT0ZfTU1XT1JEXSAgICAgICA7IG1tNj1JbnQxTD0oIDAgMSAyIDMpCisgICAgICAgIG1vdnEgICAgbW00LCBNTVdPUkQgW2VkaSsxKlNJWkVPRl9NTVdPUkRdICAgICAgIDsgbW00PUludDFIPSggNCA1IDYgNykKIAotCW1vdnEJbW03LG1tNgotCW1vdnEJbW0zLG1tNAotCXBzcmxxCW1tNywyKkJZVEVfQklUCQkJOyBtbTc9KCAxIDIgMyAtKQotCXBzbGxxCW1tMywoU0laRU9GX01NV09SRC0yKSpCWVRFX0JJVAk7IG1tMz0oIC0gLSAtIDQpCi0JbW92cQltbTAsbW02Ci0JbW92cQltbTIsbW00Ci0JcHNybHEJbW0wLChTSVpFT0ZfTU1XT1JELTIpKkJZVEVfQklUCTsgbW0wPSggMyAtIC0gLSkKLQlwc2xscQltbTIsMipCWVRFX0JJVAkJCTsgbW0yPSggLSA0IDUgNikKKyAgICAgICAgbW92cSAgICBtbTcsbW02CisgICAgICAgIG1vdnEgICAgbW0zLG1tNAorICAgICAgICBwc3JscSAgIG1tNywyKkJZVEVfQklUICAgICAgICAgICAgICAgICAgOyBtbTc9KCAxIDIgMyAtKQorICAgICAgICBwc2xscSAgIG1tMywoU0laRU9GX01NV09SRC0yKSpCWVRFX0JJVCAgOyBtbTM9KCAtIC0gLSA0KQorICAgICAgICBtb3ZxICAgIG1tMCxtbTYKKyAgICAgICAgbW92cSAgICBtbTIsbW00CisgICAgICAgIHBzcmxxICAgbW0wLChTSVpFT0ZfTU1XT1JELTIpKkJZVEVfQklUICA7IG1tMD0oIDMgLSAtIC0pCisgICAgICAgIHBzbGxxICAgbW0yLDIqQllURV9CSVQgICAgICAgICAgICAgICAgICA7IG1tMj0oIC0gNCA1IDYpCiAKLQlwb3IJbW03LG1tMwkJCQk7IG1tNz0oIDEgMiAzIDQpCi0JcG9yCW1tMCxtbTIJCQkJOyBtbTA9KCAzIDQgNSA2KQorICAgICAgICBwb3IgICAgIG1tNyxtbTMgICAgICAgICAgICAgICAgICAgICAgICAgOyBtbTc9KCAxIDIgMyA0KQorICAgICAgICBwb3IgICAgIG1tMCxtbTIgICAgICAgICAgICAgICAgICAgICAgICAgOyBtbTA9KCAzIDQgNSA2KQogCi0JbW92cQltbTEsbW02Ci0JbW92cQltbTUsbW00Ci0JcHNsbHEJbW0xLDIqQllURV9CSVQJCQk7IG1tMT0oIC0gMCAxIDIpCi0JcHNybHEJbW01LDIqQllURV9CSVQJCQk7IG1tNT0oIDUgNiA3IC0pCi0JbW92cQltbTMsbW00Ci0JcHNybHEJbW0zLChTSVpFT0ZfTU1XT1JELTIpKkJZVEVfQklUCTsgbW0zPSggNyAtIC0gLSkKKyAgICAgICAgbW92cSAgICBtbTEsbW02CisgICAgICAgIG1vdnEgICAgbW01LG1tNAorICAgICAgICBwc2xscSAgIG1tMSwyKkJZVEVfQklUICAgICAgICAgICAgICAgICAgOyBtbTE9KCAtIDAgMSAyKQorICAgICAgICBwc3JscSAgIG1tNSwyKkJZVEVfQklUICAgICAgICAgICAgICAgICAgOyBtbTU9KCA1IDYgNyAtKQorICAgICAgICBtb3ZxICAgIG1tMyxtbTQKKyAgICAgICAgcHNybHEgICBtbTMsKFNJWkVPRl9NTVdPUkQtMikqQllURV9CSVQgIDsgbW0zPSggNyAtIC0gLSkKIAotCXBvcgltbTEsIE1NV09SRCBbd2soMSldCQk7IG1tMT0oLTEgMCAxIDIpCi0JcG9yCW1tNSwgTU1XT1JEIFt3aygzKV0JCTsgbW01PSggNSA2IDcgOCkKKyAgICAgICAgcG9yICAgICBtbTEsIE1NV09SRCBbd2soMSldICAgICAgICAgICAgIDsgbW0xPSgtMSAwIDEgMikKKyAgICAgICAgcG9yICAgICBtbTUsIE1NV09SRCBbd2soMyldICAgICAgICAgICAgIDsgbW01PSggNSA2IDcgOCkKIAotCW1vdnEJTU1XT1JEIFt3aygxKV0sIG1tMworICAgICAgICBtb3ZxICAgIE1NV09SRCBbd2soMSldLCBtbTMKIAotCXBtdWxsdwltbTYsW0dPVE9GRihlYngsUFdfVEhSRUUpXQotCXBtdWxsdwltbTQsW0dPVE9GRihlYngsUFdfVEhSRUUpXQotCXBhZGR3CW1tMSxbR09UT0ZGKGVieCxQV19FSUdIVCldCi0JcGFkZHcJbW0wLFtHT1RPRkYoZWJ4LFBXX0VJR0hUKV0KLQlwYWRkdwltbTcsW0dPVE9GRihlYngsUFdfU0VWRU4pXQotCXBhZGR3CW1tNSxbR09UT0ZGKGVieCxQV19TRVZFTildCisgICAgICAgIHBtdWxsdyAgbW02LFtHT1RPRkYoZWJ4LFBXX1RIUkVFKV0KKyAgICAgICAgcG11bGx3ICBtbTQsW0dPVE9GRihlYngsUFdfVEhSRUUpXQorICAgICAgICBwYWRkdyAgIG1tMSxbR09UT0ZGKGVieCxQV19FSUdIVCldCisgICAgICAgIHBhZGR3ICAgbW0wLFtHT1RPRkYoZWJ4LFBXX0VJR0hUKV0KKyAgICAgICAgcGFkZHcgICBtbTcsW0dPVE9GRihlYngsUFdfU0VWRU4pXQorICAgICAgICBwYWRkdyAgIG1tNSxbR09UT0ZGKGVieCxQV19TRVZFTildCiAKLQlwYWRkdwltbTEsbW02Ci0JcGFkZHcJbW0wLG1tNAotCXBzcmx3CW1tMSw0CQkJOyBtbTE9T3V0MUxFPSggMCAgMiAgNCAgNikKLQlwc3JsdwltbTAsNAkJCTsgbW0wPU91dDFIRT0oIDggMTAgMTIgMTQpCi0JcGFkZHcJbW03LG1tNgotCXBhZGR3CW1tNSxtbTQKLQlwc3JsdwltbTcsNAkJCTsgbW03PU91dDFMTz0oIDEgIDMgIDUgIDcpCi0JcHNybHcJbW01LDQJCQk7IG1tNT1PdXQxSE89KCA5IDExIDEzIDE1KQorICAgICAgICBwYWRkdyAgIG1tMSxtbTYKKyAgICAgICAgcGFkZHcgICBtbTAsbW00CisgICAgICAgIHBzcmx3ICAgbW0xLDQgICAgICAgICAgICAgICAgICAgOyBtbTE9T3V0MUxFPSggMCAgMiAgNCAgNikKKyAgICAgICAgcHNybHcgICBtbTAsNCAgICAgICAgICAgICAgICAgICA7IG1tMD1PdXQxSEU9KCA4IDEwIDEyIDE0KQorICAgICAgICBwYWRkdyAgIG1tNyxtbTYKKyAgICAgICAgcGFkZHcgICBtbTUsbW00CisgICAgICAgIHBzcmx3ICAgbW03LDQgICAgICAgICAgICAgICAgICAgOyBtbTc9T3V0MUxPPSggMSAgMyAgNSAgNykKKyAgICAgICAgcHNybHcgICBtbTUsNCAgICAgICAgICAgICAgICAgICA7IG1tNT1PdXQxSE89KCA5IDExIDEzIDE1KQogCi0JcHNsbHcJbW03LEJZVEVfQklUCi0JcHNsbHcJbW01LEJZVEVfQklUCi0JcG9yCW1tMSxtbTcJCQk7IG1tMT1PdXQxTD0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcpCi0JcG9yCW1tMCxtbTUJCQk7IG1tMD1PdXQxSD0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCisgICAgICAgIHBzbGx3ICAgbW03LEJZVEVfQklUCisgICAgICAgIHBzbGx3ICAgbW01LEJZVEVfQklUCisgICAgICAgIHBvciAgICAgbW0xLG1tNyAgICAgICAgICAgICAgICAgOyBtbTE9T3V0MUw9KCAwICAxICAyICAzICA0ICA1ICA2ICA3KQorICAgICAgICBwb3IgICAgIG1tMCxtbTUgICAgICAgICAgICAgICAgIDsgbW0wPU91dDFIPSggOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKIAotCW1vdnEJTU1XT1JEIFtlZGkrMCpTSVpFT0ZfTU1XT1JEXSwgbW0xCi0JbW92cQlNTVdPUkQgW2VkaSsxKlNJWkVPRl9NTVdPUkRdLCBtbTAKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW2VkaSswKlNJWkVPRl9NTVdPUkRdLCBtbTEKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW2VkaSsxKlNJWkVPRl9NTVdPUkRdLCBtbTAKIAotCXBvcHBpYwllYngKKyAgICAgICAgcG9wcGljICBlYngKIAotCXN1YgllYXgsIGJ5dGUgU0laRU9GX01NV09SRAotCWFkZAllY3gsIGJ5dGUgMSpTSVpFT0ZfTU1XT1JECTsgaW5wdHIxKGFib3ZlKQotCWFkZAllYngsIGJ5dGUgMSpTSVpFT0ZfTU1XT1JECTsgaW5wdHIwCi0JYWRkCWVzaSwgYnl0ZSAxKlNJWkVPRl9NTVdPUkQJOyBpbnB0cjEoYmVsb3cpCi0JYWRkCWVkeCwgYnl0ZSAyKlNJWkVPRl9NTVdPUkQJOyBvdXRwdHIwCi0JYWRkCWVkaSwgYnl0ZSAyKlNJWkVPRl9NTVdPUkQJOyBvdXRwdHIxCi0JY21wCWVheCwgYnl0ZSBTSVpFT0ZfTU1XT1JECi0JamEJbmVhciAuY29sdW1ubG9vcAotCXRlc3QJZWF4LGVheAotCWpuegluZWFyIC5jb2x1bW5sb29wX2xhc3QKKyAgICAgICAgc3ViICAgICBlYXgsIGJ5dGUgU0laRU9GX01NV09SRAorICAgICAgICBhZGQgICAgIGVjeCwgYnl0ZSAxKlNJWkVPRl9NTVdPUkQgICAgICAgOyBpbnB0cjEoYWJvdmUpCisgICAgICAgIGFkZCAgICAgZWJ4LCBieXRlIDEqU0laRU9GX01NV09SRCAgICAgICA7IGlucHRyMAorICAgICAgICBhZGQgICAgIGVzaSwgYnl0ZSAxKlNJWkVPRl9NTVdPUkQgICAgICAgOyBpbnB0cjEoYmVsb3cpCisgICAgICAgIGFkZCAgICAgZWR4LCBieXRlIDIqU0laRU9GX01NV09SRCAgICAgICA7IG91dHB0cjAKKyAgICAgICAgYWRkICAgICBlZGksIGJ5dGUgMipTSVpFT0ZfTU1XT1JEICAgICAgIDsgb3V0cHRyMQorICAgICAgICBjbXAgICAgIGVheCwgYnl0ZSBTSVpFT0ZfTU1XT1JECisgICAgICAgIGphICAgICAgbmVhciAuY29sdW1ubG9vcAorICAgICAgICB0ZXN0ICAgIGVheCxlYXgKKyAgICAgICAgam56ICAgICBuZWFyIC5jb2x1bW5sb29wX2xhc3QKIAotCXBvcAllc2kKLQlwb3AJZWRpCi0JcG9wCWVjeAotCXBvcAllYXgKKyAgICAgICAgcG9wICAgICBlc2kKKyAgICAgICAgcG9wICAgICBlZGkKKyAgICAgICAgcG9wICAgICBlY3gKKyAgICAgICAgcG9wICAgICBlYXgKIAotCWFkZAllc2ksIGJ5dGUgMSpTSVpFT0ZfSlNBTVBST1cJOyBpbnB1dF9kYXRhCi0JYWRkCWVkaSwgYnl0ZSAyKlNJWkVPRl9KU0FNUFJPVwk7IG91dHB1dF9kYXRhCi0Jc3ViCWVjeCwgYnl0ZSAyCQkJOyByb3djdHIKLQlqZwluZWFyIC5yb3dsb29wCisgICAgICAgIGFkZCAgICAgZXNpLCBieXRlIDEqU0laRU9GX0pTQU1QUk9XICAgICA7IGlucHV0X2RhdGEKKyAgICAgICAgYWRkICAgICBlZGksIGJ5dGUgMipTSVpFT0ZfSlNBTVBST1cgICAgIDsgb3V0cHV0X2RhdGEKKyAgICAgICAgc3ViICAgICBlY3gsIGJ5dGUgMiAgICAgICAgICAgICAgICAgICAgIDsgcm93Y3RyCisgICAgICAgIGpnICAgICAgbmVhciAucm93bG9vcAogCi0JZW1tcwkJOyBlbXB0eSBNTVggc3RhdGUKKyAgICAgICAgZW1tcyAgICAgICAgICAgIDsgZW1wdHkgTU1YIHN0YXRlCiAKIC5yZXR1cm46Ci0JcG9wCWVkaQotCXBvcAllc2kKLTsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLTsJcG9wCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLQlwb3AJZWJ4Ci0JbW92CWVzcCxlYnAJCTsgZXNwIDwtIGFsaWduZWQgZWJwCi0JcG9wCWVzcAkJOyBlc3AgPC0gb3JpZ2luYWwgZWJwCi0JcG9wCWVicAotCXJldAorICAgICAgICBwb3AgICAgIGVkaQorICAgICAgICBwb3AgICAgIGVzaQorOyAgICAgICBwb3AgICAgIGVkeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgICAgICBwb3AgICAgIGVjeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgICAgICBwb3AgICAgIGVieAorICAgICAgICBtb3YgICAgIGVzcCxlYnAgICAgICAgICA7IGVzcCA8LSBhbGlnbmVkIGVicAorICAgICAgICBwb3AgICAgIGVzcCAgICAgICAgICAgICA7IGVzcCA8LSBvcmlnaW5hbCBlYnAKKyAgICAgICAgcG9wICAgICBlYnAKKyAgICAgICAgcmV0CiAKIDsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDsKQEAgLTUzNiw5NCArNTM2LDk0IEBACiA7ICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyKTsKIDsKIAotJWRlZmluZSBtYXhfdl9zYW1wKGIpCQkoYikrOAkJCTsgaW50IG1heF92X3NhbXBfZmFjdG9yCi0lZGVmaW5lIG91dHB1dF93aWR0aChiKQkoYikrMTIJCTsgSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgKLSVkZWZpbmUgaW5wdXRfZGF0YShiKQkJKGIpKzE2CQk7IEpTQU1QQVJSQVkgaW5wdXRfZGF0YQotJWRlZmluZSBvdXRwdXRfZGF0YV9wdHIoYikJKGIpKzIwCQk7IEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIKKyVkZWZpbmUgbWF4X3Zfc2FtcChiKSAgICAgICAgICAgKGIpKzggICAgICAgICAgIDsgaW50IG1heF92X3NhbXBfZmFjdG9yCislZGVmaW5lIG91dHB1dF93aWR0aChiKSAgICAgICAgIChiKSsxMiAgICAgICAgICA7IEpESU1FTlNJT04gb3V0cHV0X3dpZHRoCislZGVmaW5lIGlucHV0X2RhdGEoYikgICAgICAgICAgIChiKSsxNiAgICAgICAgICA7IEpTQU1QQVJSQVkgaW5wdXRfZGF0YQorJWRlZmluZSBvdXRwdXRfZGF0YV9wdHIoYikgICAgICAoYikrMjAgICAgICAgICAgOyBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyCiAKLQlhbGlnbgkxNgotCWdsb2JhbAlFWFROKGpzaW1kX2gydjFfdXBzYW1wbGVfbW14KQorICAgICAgICBhbGlnbiAgIDE2CisgICAgICAgIGdsb2JhbCAgRVhUTihqc2ltZF9oMnYxX3Vwc2FtcGxlX21teCkKIAogRVhUTihqc2ltZF9oMnYxX3Vwc2FtcGxlX21teCk6Ci0JcHVzaAllYnAKLQltb3YJZWJwLGVzcAotOwlwdXNoCWVieAkJOyB1bnVzZWQKLTsJcHVzaAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi07CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotCXB1c2gJZXNpCi0JcHVzaAllZGkKKyAgICAgICAgcHVzaCAgICBlYnAKKyAgICAgICAgbW92ICAgICBlYnAsZXNwCis7ICAgICAgIHB1c2ggICAgZWJ4ICAgICAgICAgICAgIDsgdW51c2VkCis7ICAgICAgIHB1c2ggICAgZWN4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgICAgIHB1c2ggICAgZWR4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgICAgIHB1c2ggICAgZXNpCisgICAgICAgIHB1c2ggICAgZWRpCiAKLQltb3YJZWR4LCBKRElNRU5TSU9OIFtvdXRwdXRfd2lkdGgoZWJwKV0KLQlhZGQJZWR4LCBieXRlICgyKlNJWkVPRl9NTVdPUkQpLTEKLQlhbmQJZWR4LCBieXRlIC0oMipTSVpFT0ZfTU1XT1JEKQotCWp6CXNob3J0IC5yZXR1cm4KKyAgICAgICAgbW92ICAgICBlZHgsIEpESU1FTlNJT04gW291dHB1dF93aWR0aChlYnApXQorICAgICAgICBhZGQgICAgIGVkeCwgYnl0ZSAoMipTSVpFT0ZfTU1XT1JEKS0xCisgICAgICAgIGFuZCAgICAgZWR4LCBieXRlIC0oMipTSVpFT0ZfTU1XT1JEKQorICAgICAgICBqeiAgICAgIHNob3J0IC5yZXR1cm4KIAotCW1vdgllY3gsIElOVCBbbWF4X3Zfc2FtcChlYnApXQk7IHJvd2N0cgotCXRlc3QJZWN4LGVjeAotCWp6CXNob3J0IC5yZXR1cm4KKyAgICAgICAgbW92ICAgICBlY3gsIElOVCBbbWF4X3Zfc2FtcChlYnApXSAgICAgIDsgcm93Y3RyCisgICAgICAgIHRlc3QgICAgZWN4LGVjeAorICAgICAgICBqeiAgICAgIHNob3J0IC5yZXR1cm4KIAotCW1vdgllc2ksIEpTQU1QQVJSQVkgW2lucHV0X2RhdGEoZWJwKV0JOyBpbnB1dF9kYXRhCi0JbW92CWVkaSwgUE9JTlRFUiBbb3V0cHV0X2RhdGFfcHRyKGVicCldCi0JbW92CWVkaSwgSlNBTVBBUlJBWSBbZWRpXQkJCTsgb3V0cHV0X2RhdGEKLQlhbGlnbngJMTYsNworICAgICAgICBtb3YgICAgIGVzaSwgSlNBTVBBUlJBWSBbaW5wdXRfZGF0YShlYnApXSAgICAgICA7IGlucHV0X2RhdGEKKyAgICAgICAgbW92ICAgICBlZGksIFBPSU5URVIgW291dHB1dF9kYXRhX3B0cihlYnApXQorICAgICAgICBtb3YgICAgIGVkaSwgSlNBTVBBUlJBWSBbZWRpXSAgICAgICAgICAgICAgICAgICA7IG91dHB1dF9kYXRhCisgICAgICAgIGFsaWdueCAgMTYsNwogLnJvd2xvb3A6Ci0JcHVzaAllZGkKLQlwdXNoCWVzaQorICAgICAgICBwdXNoICAgIGVkaQorICAgICAgICBwdXNoICAgIGVzaQogCi0JbW92CWVzaSwgSlNBTVBST1cgW2VzaV0JCTsgaW5wdHIKLQltb3YJZWRpLCBKU0FNUFJPVyBbZWRpXQkJOyBvdXRwdHIKLQltb3YJZWF4LGVkeAkJCQk7IGNvbGN0cgotCWFsaWdueAkxNiw3CisgICAgICAgIG1vdiAgICAgZXNpLCBKU0FNUFJPVyBbZXNpXSAgICAgICAgICAgICA7IGlucHRyCisgICAgICAgIG1vdiAgICAgZWRpLCBKU0FNUFJPVyBbZWRpXSAgICAgICAgICAgICA7IG91dHB0cgorICAgICAgICBtb3YgICAgIGVheCxlZHggICAgICAgICAgICAgICAgICAgICAgICAgOyBjb2xjdHIKKyAgICAgICAgYWxpZ254ICAxNiw3CiAuY29sdW1ubG9vcDoKIAotCW1vdnEJbW0wLCBNTVdPUkQgW2VzaSswKlNJWkVPRl9NTVdPUkRdCisgICAgICAgIG1vdnEgICAgbW0wLCBNTVdPUkQgW2VzaSswKlNJWkVPRl9NTVdPUkRdCiAKLQltb3ZxICAgICAgbW0xLG1tMAotCXB1bnBja2xidyBtbTAsbW0wCi0JcHVucGNraGJ3IG1tMSxtbTEKKyAgICAgICAgbW92cSAgICAgIG1tMSxtbTAKKyAgICAgICAgcHVucGNrbGJ3IG1tMCxtbTAKKyAgICAgICAgcHVucGNraGJ3IG1tMSxtbTEKIAotCW1vdnEJTU1XT1JEIFtlZGkrMCpTSVpFT0ZfTU1XT1JEXSwgbW0wCi0JbW92cQlNTVdPUkQgW2VkaSsxKlNJWkVPRl9NTVdPUkRdLCBtbTEKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW2VkaSswKlNJWkVPRl9NTVdPUkRdLCBtbTAKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW2VkaSsxKlNJWkVPRl9NTVdPUkRdLCBtbTEKIAotCXN1YgllYXgsIGJ5dGUgMipTSVpFT0ZfTU1XT1JECi0JanoJc2hvcnQgLm5leHRyb3cKKyAgICAgICAgc3ViICAgICBlYXgsIGJ5dGUgMipTSVpFT0ZfTU1XT1JECisgICAgICAgIGp6ICAgICAgc2hvcnQgLm5leHRyb3cKIAotCW1vdnEJbW0yLCBNTVdPUkQgW2VzaSsxKlNJWkVPRl9NTVdPUkRdCisgICAgICAgIG1vdnEgICAgbW0yLCBNTVdPUkQgW2VzaSsxKlNJWkVPRl9NTVdPUkRdCiAKLQltb3ZxICAgICAgbW0zLG1tMgotCXB1bnBja2xidyBtbTIsbW0yCi0JcHVucGNraGJ3IG1tMyxtbTMKKyAgICAgICAgbW92cSAgICAgIG1tMyxtbTIKKyAgICAgICAgcHVucGNrbGJ3IG1tMixtbTIKKyAgICAgICAgcHVucGNraGJ3IG1tMyxtbTMKIAotCW1vdnEJTU1XT1JEIFtlZGkrMipTSVpFT0ZfTU1XT1JEXSwgbW0yCi0JbW92cQlNTVdPUkQgW2VkaSszKlNJWkVPRl9NTVdPUkRdLCBtbTMKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW2VkaSsyKlNJWkVPRl9NTVdPUkRdLCBtbTIKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW2VkaSszKlNJWkVPRl9NTVdPUkRdLCBtbTMKIAotCXN1YgllYXgsIGJ5dGUgMipTSVpFT0ZfTU1XT1JECi0JanoJc2hvcnQgLm5leHRyb3cKKyAgICAgICAgc3ViICAgICBlYXgsIGJ5dGUgMipTSVpFT0ZfTU1XT1JECisgICAgICAgIGp6ICAgICAgc2hvcnQgLm5leHRyb3cKIAotCWFkZAllc2ksIGJ5dGUgMipTSVpFT0ZfTU1XT1JECTsgaW5wdHIKLQlhZGQJZWRpLCBieXRlIDQqU0laRU9GX01NV09SRAk7IG91dHB0cgotCWptcAlzaG9ydCAuY29sdW1ubG9vcAotCWFsaWdueAkxNiw3CisgICAgICAgIGFkZCAgICAgZXNpLCBieXRlIDIqU0laRU9GX01NV09SRCAgICAgICA7IGlucHRyCisgICAgICAgIGFkZCAgICAgZWRpLCBieXRlIDQqU0laRU9GX01NV09SRCAgICAgICA7IG91dHB0cgorICAgICAgICBqbXAgICAgIHNob3J0IC5jb2x1bW5sb29wCisgICAgICAgIGFsaWdueCAgMTYsNwogCiAubmV4dHJvdzoKLQlwb3AJZXNpCi0JcG9wCWVkaQorICAgICAgICBwb3AgICAgIGVzaQorICAgICAgICBwb3AgICAgIGVkaQogCi0JYWRkCWVzaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cJOyBpbnB1dF9kYXRhCi0JYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cJOyBvdXRwdXRfZGF0YQotCWRlYwllY3gJCQkJOyByb3djdHIKLQlqZwlzaG9ydCAucm93bG9vcAorICAgICAgICBhZGQgICAgIGVzaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cgICAgICAgOyBpbnB1dF9kYXRhCisgICAgICAgIGFkZCAgICAgZWRpLCBieXRlIFNJWkVPRl9KU0FNUFJPVyAgICAgICA7IG91dHB1dF9kYXRhCisgICAgICAgIGRlYyAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IHJvd2N0cgorICAgICAgICBqZyAgICAgIHNob3J0IC5yb3dsb29wCiAKLQllbW1zCQk7IGVtcHR5IE1NWCBzdGF0ZQorICAgICAgICBlbW1zICAgICAgICAgICAgOyBlbXB0eSBNTVggc3RhdGUKIAogLnJldHVybjoKLQlwb3AJZWRpCi0JcG9wCWVzaQotOwlwb3AJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotOwlwb3AJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotOwlwb3AJZWJ4CQk7IHVudXNlZAotCXBvcAllYnAKLQlyZXQKKyAgICAgICAgcG9wICAgICBlZGkKKyAgICAgICAgcG9wICAgICBlc2kKKzsgICAgICAgcG9wICAgICBlZHggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICAgICAgcG9wICAgICBlY3ggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICAgICAgcG9wICAgICBlYnggICAgICAgICAgICAgOyB1bnVzZWQKKyAgICAgICAgcG9wICAgICBlYnAKKyAgICAgICAgcmV0CiAKIDsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDsKQEAgLTYzNywxMDEgKzYzNywxMDEgQEAKIDsgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIpOwogOwogCi0lZGVmaW5lIG1heF92X3NhbXAoYikJCShiKSs4CQkJOyBpbnQgbWF4X3Zfc2FtcF9mYWN0b3IKLSVkZWZpbmUgb3V0cHV0X3dpZHRoKGIpCShiKSsxMgkJOyBKRElNRU5TSU9OIG91dHB1dF93aWR0aAotJWRlZmluZSBpbnB1dF9kYXRhKGIpCQkoYikrMTYJCTsgSlNBTVBBUlJBWSBpbnB1dF9kYXRhCi0lZGVmaW5lIG91dHB1dF9kYXRhX3B0cihiKQkoYikrMjAJCTsgSlNBTVBBUlJBWSAqIG91dHB1dF9kYXRhX3B0cgorJWRlZmluZSBtYXhfdl9zYW1wKGIpICAgICAgICAgICAoYikrOCAgICAgICAgICAgOyBpbnQgbWF4X3Zfc2FtcF9mYWN0b3IKKyVkZWZpbmUgb3V0cHV0X3dpZHRoKGIpICAgICAgICAgKGIpKzEyICAgICAgICAgIDsgSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgKKyVkZWZpbmUgaW5wdXRfZGF0YShiKSAgICAgICAgICAgKGIpKzE2ICAgICAgICAgIDsgSlNBTVBBUlJBWSBpbnB1dF9kYXRhCislZGVmaW5lIG91dHB1dF9kYXRhX3B0cihiKSAgICAgIChiKSsyMCAgICAgICAgICA7IEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIKIAotCWFsaWduCTE2Ci0JZ2xvYmFsCUVYVE4oanNpbWRfaDJ2Ml91cHNhbXBsZV9tbXgpCisgICAgICAgIGFsaWduICAgMTYKKyAgICAgICAgZ2xvYmFsICBFWFROKGpzaW1kX2gydjJfdXBzYW1wbGVfbW14KQogCiBFWFROKGpzaW1kX2gydjJfdXBzYW1wbGVfbW14KToKLQlwdXNoCWVicAotCW1vdgllYnAsZXNwCi0JcHVzaAllYngKLTsJcHVzaAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi07CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotCXB1c2gJZXNpCi0JcHVzaAllZGkKKyAgICAgICAgcHVzaCAgICBlYnAKKyAgICAgICAgbW92ICAgICBlYnAsZXNwCisgICAgICAgIHB1c2ggICAgZWJ4Cis7ICAgICAgIHB1c2ggICAgZWN4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgICAgIHB1c2ggICAgZWR4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgICAgIHB1c2ggICAgZXNpCisgICAgICAgIHB1c2ggICAgZWRpCiAKLQltb3YJZWR4LCBKRElNRU5TSU9OIFtvdXRwdXRfd2lkdGgoZWJwKV0KLQlhZGQJZWR4LCBieXRlICgyKlNJWkVPRl9NTVdPUkQpLTEKLQlhbmQJZWR4LCBieXRlIC0oMipTSVpFT0ZfTU1XT1JEKQotCWp6CW5lYXIgLnJldHVybgorICAgICAgICBtb3YgICAgIGVkeCwgSkRJTUVOU0lPTiBbb3V0cHV0X3dpZHRoKGVicCldCisgICAgICAgIGFkZCAgICAgZWR4LCBieXRlICgyKlNJWkVPRl9NTVdPUkQpLTEKKyAgICAgICAgYW5kICAgICBlZHgsIGJ5dGUgLSgyKlNJWkVPRl9NTVdPUkQpCisgICAgICAgIGp6ICAgICAgbmVhciAucmV0dXJuCiAKLQltb3YJZWN4LCBJTlQgW21heF92X3NhbXAoZWJwKV0JOyByb3djdHIKLQl0ZXN0CWVjeCxlY3gKLQlqeglzaG9ydCAucmV0dXJuCisgICAgICAgIG1vdiAgICAgZWN4LCBJTlQgW21heF92X3NhbXAoZWJwKV0gICAgICA7IHJvd2N0cgorICAgICAgICB0ZXN0ICAgIGVjeCxlY3gKKyAgICAgICAganogICAgICBzaG9ydCAucmV0dXJuCiAKLQltb3YJZXNpLCBKU0FNUEFSUkFZIFtpbnB1dF9kYXRhKGVicCldCTsgaW5wdXRfZGF0YQotCW1vdgllZGksIFBPSU5URVIgW291dHB1dF9kYXRhX3B0cihlYnApXQotCW1vdgllZGksIEpTQU1QQVJSQVkgW2VkaV0JCQk7IG91dHB1dF9kYXRhCi0JYWxpZ254CTE2LDcKKyAgICAgICAgbW92ICAgICBlc2ksIEpTQU1QQVJSQVkgW2lucHV0X2RhdGEoZWJwKV0gICAgICAgOyBpbnB1dF9kYXRhCisgICAgICAgIG1vdiAgICAgZWRpLCBQT0lOVEVSIFtvdXRwdXRfZGF0YV9wdHIoZWJwKV0KKyAgICAgICAgbW92ICAgICBlZGksIEpTQU1QQVJSQVkgW2VkaV0gICAgICAgICAgICAgICAgICAgOyBvdXRwdXRfZGF0YQorICAgICAgICBhbGlnbnggIDE2LDcKIC5yb3dsb29wOgotCXB1c2gJZWRpCi0JcHVzaAllc2kKKyAgICAgICAgcHVzaCAgICBlZGkKKyAgICAgICAgcHVzaCAgICBlc2kKIAotCW1vdgllc2ksIEpTQU1QUk9XIFtlc2ldCQkJOyBpbnB0cgotCW1vdgllYngsIEpTQU1QUk9XIFtlZGkrMCpTSVpFT0ZfSlNBTVBST1ddCTsgb3V0cHRyMAotCW1vdgllZGksIEpTQU1QUk9XIFtlZGkrMSpTSVpFT0ZfSlNBTVBST1ddCTsgb3V0cHRyMQotCW1vdgllYXgsZWR4CQkJCQk7IGNvbGN0cgotCWFsaWdueAkxNiw3CisgICAgICAgIG1vdiAgICAgZXNpLCBKU0FNUFJPVyBbZXNpXSAgICAgICAgICAgICAgICAgICAgIDsgaW5wdHIKKyAgICAgICAgbW92ICAgICBlYngsIEpTQU1QUk9XIFtlZGkrMCpTSVpFT0ZfSlNBTVBST1ddICAgOyBvdXRwdHIwCisgICAgICAgIG1vdiAgICAgZWRpLCBKU0FNUFJPVyBbZWRpKzEqU0laRU9GX0pTQU1QUk9XXSAgIDsgb3V0cHRyMQorICAgICAgICBtb3YgICAgIGVheCxlZHggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IGNvbGN0cgorICAgICAgICBhbGlnbnggIDE2LDcKIC5jb2x1bW5sb29wOgogCi0JbW92cQltbTAsIE1NV09SRCBbZXNpKzAqU0laRU9GX01NV09SRF0KKyAgICAgICAgbW92cSAgICBtbTAsIE1NV09SRCBbZXNpKzAqU0laRU9GX01NV09SRF0KIAotCW1vdnEgICAgICBtbTEsbW0wCi0JcHVucGNrbGJ3IG1tMCxtbTAKLQlwdW5wY2toYncgbW0xLG1tMQorICAgICAgICBtb3ZxICAgICAgbW0xLG1tMAorICAgICAgICBwdW5wY2tsYncgbW0wLG1tMAorICAgICAgICBwdW5wY2toYncgbW0xLG1tMQogCi0JbW92cQlNTVdPUkQgW2VieCswKlNJWkVPRl9NTVdPUkRdLCBtbTAKLQltb3ZxCU1NV09SRCBbZWJ4KzEqU0laRU9GX01NV09SRF0sIG1tMQotCW1vdnEJTU1XT1JEIFtlZGkrMCpTSVpFT0ZfTU1XT1JEXSwgbW0wCi0JbW92cQlNTVdPUkQgW2VkaSsxKlNJWkVPRl9NTVdPUkRdLCBtbTEKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW2VieCswKlNJWkVPRl9NTVdPUkRdLCBtbTAKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW2VieCsxKlNJWkVPRl9NTVdPUkRdLCBtbTEKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW2VkaSswKlNJWkVPRl9NTVdPUkRdLCBtbTAKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW2VkaSsxKlNJWkVPRl9NTVdPUkRdLCBtbTEKIAotCXN1YgllYXgsIGJ5dGUgMipTSVpFT0ZfTU1XT1JECi0JanoJc2hvcnQgLm5leHRyb3cKKyAgICAgICAgc3ViICAgICBlYXgsIGJ5dGUgMipTSVpFT0ZfTU1XT1JECisgICAgICAgIGp6ICAgICAgc2hvcnQgLm5leHRyb3cKIAotCW1vdnEJbW0yLCBNTVdPUkQgW2VzaSsxKlNJWkVPRl9NTVdPUkRdCisgICAgICAgIG1vdnEgICAgbW0yLCBNTVdPUkQgW2VzaSsxKlNJWkVPRl9NTVdPUkRdCiAKLQltb3ZxICAgICAgbW0zLG1tMgotCXB1bnBja2xidyBtbTIsbW0yCi0JcHVucGNraGJ3IG1tMyxtbTMKKyAgICAgICAgbW92cSAgICAgIG1tMyxtbTIKKyAgICAgICAgcHVucGNrbGJ3IG1tMixtbTIKKyAgICAgICAgcHVucGNraGJ3IG1tMyxtbTMKIAotCW1vdnEJTU1XT1JEIFtlYngrMipTSVpFT0ZfTU1XT1JEXSwgbW0yCi0JbW92cQlNTVdPUkQgW2VieCszKlNJWkVPRl9NTVdPUkRdLCBtbTMKLQltb3ZxCU1NV09SRCBbZWRpKzIqU0laRU9GX01NV09SRF0sIG1tMgotCW1vdnEJTU1XT1JEIFtlZGkrMypTSVpFT0ZfTU1XT1JEXSwgbW0zCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtlYngrMipTSVpFT0ZfTU1XT1JEXSwgbW0yCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtlYngrMypTSVpFT0ZfTU1XT1JEXSwgbW0zCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtlZGkrMipTSVpFT0ZfTU1XT1JEXSwgbW0yCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtlZGkrMypTSVpFT0ZfTU1XT1JEXSwgbW0zCiAKLQlzdWIJZWF4LCBieXRlIDIqU0laRU9GX01NV09SRAotCWp6CXNob3J0IC5uZXh0cm93CisgICAgICAgIHN1YiAgICAgZWF4LCBieXRlIDIqU0laRU9GX01NV09SRAorICAgICAgICBqeiAgICAgIHNob3J0IC5uZXh0cm93CiAKLQlhZGQJZXNpLCBieXRlIDIqU0laRU9GX01NV09SRAk7IGlucHRyCi0JYWRkCWVieCwgYnl0ZSA0KlNJWkVPRl9NTVdPUkQJOyBvdXRwdHIwCi0JYWRkCWVkaSwgYnl0ZSA0KlNJWkVPRl9NTVdPUkQJOyBvdXRwdHIxCi0Jam1wCXNob3J0IC5jb2x1bW5sb29wCi0JYWxpZ254CTE2LDcKKyAgICAgICAgYWRkICAgICBlc2ksIGJ5dGUgMipTSVpFT0ZfTU1XT1JEICAgICAgIDsgaW5wdHIKKyAgICAgICAgYWRkICAgICBlYngsIGJ5dGUgNCpTSVpFT0ZfTU1XT1JEICAgICAgIDsgb3V0cHRyMAorICAgICAgICBhZGQgICAgIGVkaSwgYnl0ZSA0KlNJWkVPRl9NTVdPUkQgICAgICAgOyBvdXRwdHIxCisgICAgICAgIGptcCAgICAgc2hvcnQgLmNvbHVtbmxvb3AKKyAgICAgICAgYWxpZ254ICAxNiw3CiAKIC5uZXh0cm93OgotCXBvcAllc2kKLQlwb3AJZWRpCisgICAgICAgIHBvcCAgICAgZXNpCisgICAgICAgIHBvcCAgICAgZWRpCiAKLQlhZGQJZXNpLCBieXRlIDEqU0laRU9GX0pTQU1QUk9XCTsgaW5wdXRfZGF0YQotCWFkZAllZGksIGJ5dGUgMipTSVpFT0ZfSlNBTVBST1cJOyBvdXRwdXRfZGF0YQotCXN1YgllY3gsIGJ5dGUgMgkJCTsgcm93Y3RyCi0JamcJc2hvcnQgLnJvd2xvb3AKKyAgICAgICAgYWRkICAgICBlc2ksIGJ5dGUgMSpTSVpFT0ZfSlNBTVBST1cgICAgIDsgaW5wdXRfZGF0YQorICAgICAgICBhZGQgICAgIGVkaSwgYnl0ZSAyKlNJWkVPRl9KU0FNUFJPVyAgICAgOyBvdXRwdXRfZGF0YQorICAgICAgICBzdWIgICAgIGVjeCwgYnl0ZSAyICAgICAgICAgICAgICAgICAgICAgOyByb3djdHIKKyAgICAgICAgamcgICAgICBzaG9ydCAucm93bG9vcAogCi0JZW1tcwkJOyBlbXB0eSBNTVggc3RhdGUKKyAgICAgICAgZW1tcyAgICAgICAgICAgIDsgZW1wdHkgTU1YIHN0YXRlCiAKIC5yZXR1cm46Ci0JcG9wCWVkaQotCXBvcAllc2kKLTsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLTsJcG9wCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLQlwb3AJZWJ4Ci0JcG9wCWVicAotCXJldAorICAgICAgICBwb3AgICAgIGVkaQorICAgICAgICBwb3AgICAgIGVzaQorOyAgICAgICBwb3AgICAgIGVkeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgICAgICBwb3AgICAgIGVjeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgICAgICBwb3AgICAgIGVieAorICAgICAgICBwb3AgICAgIGVicAorICAgICAgICByZXQKIAogOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKIDsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KLQlhbGlnbgkxNgorICAgICAgICBhbGlnbiAgIDE2CmRpZmYgLS1naXQgYS9zaW1kL2pkc2Ftc3MyLTY0LmFzbSBiL3NpbWQvamRzYW1zczItNjQuYXNtCmluZGV4IGYzNmMxNTYuLmE0MWQwNTkgMTAwNjQ0Ci0tLSBhL3NpbWQvamRzYW1zczItNjQuYXNtCisrKyBiL3NpbWQvamRzYW1zczItNjQuYXNtCkBAIC0yMCwyNCArMjAsMjQgQEAKICVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCiAKIDsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlTRUNUSU9OCVNFR19DT05TVAorICAgICAgICBTRUNUSU9OIFNFR19DT05TVAogCi0JYWxpZ256CTE2Ci0JZ2xvYmFsCUVYVE4oamNvbnN0X2ZhbmN5X3Vwc2FtcGxlX3NzZTIpCisgICAgICAgIGFsaWdueiAgMTYKKyAgICAgICAgZ2xvYmFsICBFWFROKGpjb25zdF9mYW5jeV91cHNhbXBsZV9zc2UyKQogCiBFWFROKGpjb25zdF9mYW5jeV91cHNhbXBsZV9zc2UyKToKIAotUFdfT05FCQl0aW1lcyA4IGR3ICAxCi1QV19UV08JCXRpbWVzIDggZHcgIDIKLVBXX1RIUkVFCXRpbWVzIDggZHcgIDMKLVBXX1NFVkVOCXRpbWVzIDggZHcgIDcKLVBXX0VJR0hUCXRpbWVzIDggZHcgIDgKK1BXX09ORSAgICAgICAgICB0aW1lcyA4IGR3ICAxCitQV19UV08gICAgICAgICAgdGltZXMgOCBkdyAgMgorUFdfVEhSRUUgICAgICAgIHRpbWVzIDggZHcgIDMKK1BXX1NFVkVOICAgICAgICB0aW1lcyA4IGR3ICA3CitQV19FSUdIVCAgICAgICAgdGltZXMgOCBkdyAgOAogCi0JYWxpZ256CTE2CisgICAgICAgIGFsaWdueiAgMTYKIAogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCVNFQ1RJT04JU0VHX1RFWFQKLQlCSVRTCTY0CisgICAgICAgIFNFQ1RJT04gU0VHX1RFWFQKKyAgICAgICAgQklUUyAgICA2NAogOwogOyBGYW5jeSBwcm9jZXNzaW5nIGZvciB0aGUgY29tbW9uIGNhc2Ugb2YgMjoxIGhvcml6b250YWwgYW5kIDE6MSB2ZXJ0aWNhbC4KIDsKQEAgLTU4LDEyNyArNTgsMTI3IEBACiA7IHIxMiA9IEpTQU1QQVJSQVkgaW5wdXRfZGF0YQogOyByMTMgPSBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyCiAKLQlhbGlnbgkxNgotCWdsb2JhbAlFWFROKGpzaW1kX2gydjFfZmFuY3lfdXBzYW1wbGVfc3NlMikKKyAgICAgICAgYWxpZ24gICAxNgorICAgICAgICBnbG9iYWwgIEVYVE4oanNpbWRfaDJ2MV9mYW5jeV91cHNhbXBsZV9zc2UyKQogCiBFWFROKGpzaW1kX2gydjFfZmFuY3lfdXBzYW1wbGVfc3NlMik6Ci0JcHVzaAlyYnAKLQltb3YJcmF4LHJzcAotCW1vdglyYnAscnNwCi0JY29sbGVjdF9hcmdzCisgICAgICAgIHB1c2ggICAgcmJwCisgICAgICAgIG1vdiAgICAgcmF4LHJzcAorICAgICAgICBtb3YgICAgIHJicCxyc3AKKyAgICAgICAgY29sbGVjdF9hcmdzCiAKLQltb3YJcmF4LCByMTEgIDsgY29sY3RyCi0JdGVzdAlyYXgscmF4Ci0JanoJbmVhciAucmV0dXJuCisgICAgICAgIG1vdiAgICAgcmF4LCByMTEgIDsgY29sY3RyCisgICAgICAgIHRlc3QgICAgcmF4LHJheAorICAgICAgICBqeiAgICAgIG5lYXIgLnJldHVybgogCi0JbW92CXJjeCwgcjEwCTsgcm93Y3RyCi0JdGVzdAlyY3gscmN4Ci0JanoJbmVhciAucmV0dXJuCisgICAgICAgIG1vdiAgICAgcmN4LCByMTAgICAgICAgIDsgcm93Y3RyCisgICAgICAgIHRlc3QgICAgcmN4LHJjeAorICAgICAgICBqeiAgICAgIG5lYXIgLnJldHVybgogCi0JbW92CXJzaSwgcjEyCTsgaW5wdXRfZGF0YQotCW1vdglyZGksIHIxMwotCW1vdglyZGksIEpTQU1QQVJSQVkgW3JkaV0JCQk7IG91dHB1dF9kYXRhCisgICAgICAgIG1vdiAgICAgcnNpLCByMTIgICAgICAgIDsgaW5wdXRfZGF0YQorICAgICAgICBtb3YgICAgIHJkaSwgcjEzCisgICAgICAgIG1vdiAgICAgcmRpLCBKU0FNUEFSUkFZIFtyZGldICAgICAgICAgICAgICAgICAgIDsgb3V0cHV0X2RhdGEKIC5yb3dsb29wOgotCXB1c2gJcmF4CQkJOyBjb2xjdHIKLQlwdXNoCXJkaQotCXB1c2gJcnNpCisgICAgICAgIHB1c2ggICAgcmF4ICAgICAgICAgICAgICAgICAgICAgOyBjb2xjdHIKKyAgICAgICAgcHVzaCAgICByZGkKKyAgICAgICAgcHVzaCAgICByc2kKIAotCW1vdglyc2ksIEpTQU1QUk9XIFtyc2ldCTsgaW5wdHIKLQltb3YJcmRpLCBKU0FNUFJPVyBbcmRpXQk7IG91dHB0cgorICAgICAgICBtb3YgICAgIHJzaSwgSlNBTVBST1cgW3JzaV0gICAgIDsgaW5wdHIKKyAgICAgICAgbW92ICAgICByZGksIEpTQU1QUk9XIFtyZGldICAgICA7IG91dHB0cgogCi0JdGVzdAlyYXgsIFNJWkVPRl9YTU1XT1JELTEKLQlqeglzaG9ydCAuc2tpcAotCW1vdglkbCwgSlNBTVBMRSBbcnNpKyhyYXgtMSkqU0laRU9GX0pTQU1QTEVdCi0JbW92CUpTQU1QTEUgW3JzaStyYXgqU0laRU9GX0pTQU1QTEVdLCBkbAk7IGluc2VydCBhIGR1bW15IHNhbXBsZQorICAgICAgICB0ZXN0ICAgIHJheCwgU0laRU9GX1hNTVdPUkQtMQorICAgICAgICBqeiAgICAgIHNob3J0IC5za2lwCisgICAgICAgIG1vdiAgICAgZGwsIEpTQU1QTEUgW3JzaSsocmF4LTEpKlNJWkVPRl9KU0FNUExFXQorICAgICAgICBtb3YgICAgIEpTQU1QTEUgW3JzaStyYXgqU0laRU9GX0pTQU1QTEVdLCBkbCAgICA7IGluc2VydCBhIGR1bW15IHNhbXBsZQogLnNraXA6Ci0JcHhvcgl4bW0wLHhtbTAJCTsgeG1tMD0oYWxsIDAncykKLQlwY21wZXFiCXhtbTcseG1tNwotCXBzcmxkcQl4bW03LChTSVpFT0ZfWE1NV09SRC0xKQotCXBhbmQJeG1tNywgWE1NV09SRCBbcnNpKzAqU0laRU9GX1hNTVdPUkRdCisgICAgICAgIHB4b3IgICAgeG1tMCx4bW0wICAgICAgICAgICAgICAgOyB4bW0wPShhbGwgMCdzKQorICAgICAgICBwY21wZXFiIHhtbTcseG1tNworICAgICAgICBwc3JsZHEgIHhtbTcsKFNJWkVPRl9YTU1XT1JELTEpCisgICAgICAgIHBhbmQgICAgeG1tNywgWE1NV09SRCBbcnNpKzAqU0laRU9GX1hNTVdPUkRdCiAKLQlhZGQJcmF4LCBieXRlIFNJWkVPRl9YTU1XT1JELTEKLQlhbmQJcmF4LCBieXRlIC1TSVpFT0ZfWE1NV09SRAotCWNtcAlyYXgsIGJ5dGUgU0laRU9GX1hNTVdPUkQKLQlqYQlzaG9ydCAuY29sdW1ubG9vcAorICAgICAgICBhZGQgICAgIHJheCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC0xCisgICAgICAgIGFuZCAgICAgcmF4LCBieXRlIC1TSVpFT0ZfWE1NV09SRAorICAgICAgICBjbXAgICAgIHJheCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorICAgICAgICBqYSAgICAgIHNob3J0IC5jb2x1bW5sb29wCiAKIC5jb2x1bW5sb29wX2xhc3Q6Ci0JcGNtcGVxYgl4bW02LHhtbTYKLQlwc2xsZHEJeG1tNiwoU0laRU9GX1hNTVdPUkQtMSkKLQlwYW5kCXhtbTYsIFhNTVdPUkQgW3JzaSswKlNJWkVPRl9YTU1XT1JEXQotCWptcAlzaG9ydCAudXBzYW1wbGUKKyAgICAgICAgcGNtcGVxYiB4bW02LHhtbTYKKyAgICAgICAgcHNsbGRxICB4bW02LChTSVpFT0ZfWE1NV09SRC0xKQorICAgICAgICBwYW5kICAgIHhtbTYsIFhNTVdPUkQgW3JzaSswKlNJWkVPRl9YTU1XT1JEXQorICAgICAgICBqbXAgICAgIHNob3J0IC51cHNhbXBsZQogCiAuY29sdW1ubG9vcDoKLQltb3ZkcWEJeG1tNiwgWE1NV09SRCBbcnNpKzEqU0laRU9GX1hNTVdPUkRdCi0JcHNsbGRxCXhtbTYsKFNJWkVPRl9YTU1XT1JELTEpCisgICAgICAgIG1vdmRxYSAgeG1tNiwgWE1NV09SRCBbcnNpKzEqU0laRU9GX1hNTVdPUkRdCisgICAgICAgIHBzbGxkcSAgeG1tNiwoU0laRU9GX1hNTVdPUkQtMSkKIAogLnVwc2FtcGxlOgotCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFtyc2krMCpTSVpFT0ZfWE1NV09SRF0KLQltb3ZkcWEJeG1tMix4bW0xCi0JbW92ZHFhCXhtbTMseG1tMQkJOyB4bW0xPSggMCAgMSAgMiAuLi4gMTMgMTQgMTUpCi0JcHNsbGRxCXhtbTIsMQkJCTsgeG1tMj0oLS0gIDAgIDEgLi4uIDEyIDEzIDE0KQotCXBzcmxkcQl4bW0zLDEJCQk7IHhtbTM9KCAxICAyICAzIC4uLiAxNCAxNSAtLSkKKyAgICAgICAgbW92ZHFhICB4bW0xLCBYTU1XT1JEIFtyc2krMCpTSVpFT0ZfWE1NV09SRF0KKyAgICAgICAgbW92ZHFhICB4bW0yLHhtbTEKKyAgICAgICAgbW92ZHFhICB4bW0zLHhtbTEgICAgICAgICAgICAgICA7IHhtbTE9KCAwICAxICAyIC4uLiAxMyAxNCAxNSkKKyAgICAgICAgcHNsbGRxICB4bW0yLDEgICAgICAgICAgICAgICAgICA7IHhtbTI9KC0tICAwICAxIC4uLiAxMiAxMyAxNCkKKyAgICAgICAgcHNybGRxICB4bW0zLDEgICAgICAgICAgICAgICAgICA7IHhtbTM9KCAxICAyICAzIC4uLiAxNCAxNSAtLSkKIAotCXBvcgl4bW0yLHhtbTcJCTsgeG1tMj0oLTEgIDAgIDEgLi4uIDEyIDEzIDE0KQotCXBvcgl4bW0zLHhtbTYJCTsgeG1tMz0oIDEgIDIgIDMgLi4uIDE0IDE1IDE2KQorICAgICAgICBwb3IgICAgIHhtbTIseG1tNyAgICAgICAgICAgICAgIDsgeG1tMj0oLTEgIDAgIDEgLi4uIDEyIDEzIDE0KQorICAgICAgICBwb3IgICAgIHhtbTMseG1tNiAgICAgICAgICAgICAgIDsgeG1tMz0oIDEgIDIgIDMgLi4uIDE0IDE1IDE2KQogCi0JbW92ZHFhCXhtbTcseG1tMQotCXBzcmxkcQl4bW03LChTSVpFT0ZfWE1NV09SRC0xKQk7IHhtbTc9KDE1IC0tIC0tIC4uLiAtLSAtLSAtLSkKKyAgICAgICAgbW92ZHFhICB4bW03LHhtbTEKKyAgICAgICAgcHNybGRxICB4bW03LChTSVpFT0ZfWE1NV09SRC0xKSA7IHhtbTc9KDE1IC0tIC0tIC4uLiAtLSAtLSAtLSkKIAotCW1vdmRxYSAgICB4bW00LHhtbTEKLQlwdW5wY2tsYncgeG1tMSx4bW0wCQk7IHhtbTE9KCAwICAxICAyICAzICA0ICA1ICA2ICA3KQotCXB1bnBja2hidyB4bW00LHhtbTAJCTsgeG1tND0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCi0JbW92ZHFhICAgIHhtbTUseG1tMgotCXB1bnBja2xidyB4bW0yLHhtbTAJCTsgeG1tMj0oLTEgIDAgIDEgIDIgIDMgIDQgIDUgIDYpCi0JcHVucGNraGJ3IHhtbTUseG1tMAkJOyB4bW01PSggNyAgOCAgOSAxMCAxMSAxMiAxMyAxNCkKLQltb3ZkcWEgICAgeG1tNix4bW0zCi0JcHVucGNrbGJ3IHhtbTMseG1tMAkJOyB4bW0zPSggMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCkKLQlwdW5wY2toYncgeG1tNix4bW0wCQk7IHhtbTY9KCA5IDEwIDExIDEyIDEzIDE0IDE1IDE2KQorICAgICAgICBtb3ZkcWEgICAgeG1tNCx4bW0xCisgICAgICAgIHB1bnBja2xidyB4bW0xLHhtbTAgICAgICAgICAgICAgOyB4bW0xPSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNykKKyAgICAgICAgcHVucGNraGJ3IHhtbTQseG1tMCAgICAgICAgICAgICA7IHhtbTQ9KCA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQorICAgICAgICBtb3ZkcWEgICAgeG1tNSx4bW0yCisgICAgICAgIHB1bnBja2xidyB4bW0yLHhtbTAgICAgICAgICAgICAgOyB4bW0yPSgtMSAgMCAgMSAgMiAgMyAgNCAgNSAgNikKKyAgICAgICAgcHVucGNraGJ3IHhtbTUseG1tMCAgICAgICAgICAgICA7IHhtbTU9KCA3ICA4ICA5IDEwIDExIDEyIDEzIDE0KQorICAgICAgICBtb3ZkcWEgICAgeG1tNix4bW0zCisgICAgICAgIHB1bnBja2xidyB4bW0zLHhtbTAgICAgICAgICAgICAgOyB4bW0zPSggMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCkKKyAgICAgICAgcHVucGNraGJ3IHhtbTYseG1tMCAgICAgICAgICAgICA7IHhtbTY9KCA5IDEwIDExIDEyIDEzIDE0IDE1IDE2KQogCi0JcG11bGx3CXhtbTEsW3JlbCBQV19USFJFRV0KLQlwbXVsbHcJeG1tNCxbcmVsIFBXX1RIUkVFXQotCXBhZGR3CXhtbTIsW3JlbCBQV19PTkVdCi0JcGFkZHcJeG1tNSxbcmVsIFBXX09ORV0KLQlwYWRkdwl4bW0zLFtyZWwgUFdfVFdPXQotCXBhZGR3CXhtbTYsW3JlbCBQV19UV09dCisgICAgICAgIHBtdWxsdyAgeG1tMSxbcmVsIFBXX1RIUkVFXQorICAgICAgICBwbXVsbHcgIHhtbTQsW3JlbCBQV19USFJFRV0KKyAgICAgICAgcGFkZHcgICB4bW0yLFtyZWwgUFdfT05FXQorICAgICAgICBwYWRkdyAgIHhtbTUsW3JlbCBQV19PTkVdCisgICAgICAgIHBhZGR3ICAgeG1tMyxbcmVsIFBXX1RXT10KKyAgICAgICAgcGFkZHcgICB4bW02LFtyZWwgUFdfVFdPXQogCi0JcGFkZHcJeG1tMix4bW0xCi0JcGFkZHcJeG1tNSx4bW00Ci0JcHNybHcJeG1tMiwyCQkJOyB4bW0yPU91dExFPSggMCAgMiAgNCAgNiAgOCAxMCAxMiAxNCkKLQlwc3Jsdwl4bW01LDIJCQk7IHhtbTU9T3V0SEU9KDE2IDE4IDIwIDIyIDI0IDI2IDI4IDMwKQotCXBhZGR3CXhtbTMseG1tMQotCXBhZGR3CXhtbTYseG1tNAotCXBzcmx3CXhtbTMsMgkJCTsgeG1tMz1PdXRMTz0oIDEgIDMgIDUgIDcgIDkgMTEgMTMgMTUpCi0JcHNybHcJeG1tNiwyCQkJOyB4bW02PU91dEhPPSgxNyAxOSAyMSAyMyAyNSAyNyAyOSAzMSkKKyAgICAgICAgcGFkZHcgICB4bW0yLHhtbTEKKyAgICAgICAgcGFkZHcgICB4bW01LHhtbTQKKyAgICAgICAgcHNybHcgICB4bW0yLDIgICAgICAgICAgICAgICAgICA7IHhtbTI9T3V0TEU9KCAwICAyICA0ICA2ICA4IDEwIDEyIDE0KQorICAgICAgICBwc3JsdyAgIHhtbTUsMiAgICAgICAgICAgICAgICAgIDsgeG1tNT1PdXRIRT0oMTYgMTggMjAgMjIgMjQgMjYgMjggMzApCisgICAgICAgIHBhZGR3ICAgeG1tMyx4bW0xCisgICAgICAgIHBhZGR3ICAgeG1tNix4bW00CisgICAgICAgIHBzcmx3ICAgeG1tMywyICAgICAgICAgICAgICAgICAgOyB4bW0zPU91dExPPSggMSAgMyAgNSAgNyAgOSAxMSAxMyAxNSkKKyAgICAgICAgcHNybHcgICB4bW02LDIgICAgICAgICAgICAgICAgICA7IHhtbTY9T3V0SE89KDE3IDE5IDIxIDIzIDI1IDI3IDI5IDMxKQogCi0JcHNsbHcJeG1tMyxCWVRFX0JJVAotCXBzbGx3CXhtbTYsQllURV9CSVQKLQlwb3IJeG1tMix4bW0zCQk7IHhtbTI9T3V0TD0oIDAgIDEgIDIgLi4uIDEzIDE0IDE1KQotCXBvcgl4bW01LHhtbTYJCTsgeG1tNT1PdXRIPSgxNiAxNyAxOCAuLi4gMjkgMzAgMzEpCisgICAgICAgIHBzbGx3ICAgeG1tMyxCWVRFX0JJVAorICAgICAgICBwc2xsdyAgIHhtbTYsQllURV9CSVQKKyAgICAgICAgcG9yICAgICB4bW0yLHhtbTMgICAgICAgICAgICAgICA7IHhtbTI9T3V0TD0oIDAgIDEgIDIgLi4uIDEzIDE0IDE1KQorICAgICAgICBwb3IgICAgIHhtbTUseG1tNiAgICAgICAgICAgICAgIDsgeG1tNT1PdXRIPSgxNiAxNyAxOCAuLi4gMjkgMzAgMzEpCiAKLQltb3ZkcWEJWE1NV09SRCBbcmRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW0yCi0JbW92ZHFhCVhNTVdPUkQgW3JkaSsxKlNJWkVPRl9YTU1XT1JEXSwgeG1tNQorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3JkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tMgorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3JkaSsxKlNJWkVPRl9YTU1XT1JEXSwgeG1tNQogCi0Jc3ViCXJheCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAotCWFkZAlyc2ksIGJ5dGUgMSpTSVpFT0ZfWE1NV09SRAk7IGlucHRyCi0JYWRkCXJkaSwgYnl0ZSAyKlNJWkVPRl9YTU1XT1JECTsgb3V0cHRyCi0JY21wCXJheCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAotCWphCW5lYXIgLmNvbHVtbmxvb3AKLQl0ZXN0CWVheCxlYXgKLQlqbnoJbmVhciAuY29sdW1ubG9vcF9sYXN0CisgICAgICAgIHN1YiAgICAgcmF4LCBieXRlIFNJWkVPRl9YTU1XT1JECisgICAgICAgIGFkZCAgICAgcnNpLCBieXRlIDEqU0laRU9GX1hNTVdPUkQgICAgICA7IGlucHRyCisgICAgICAgIGFkZCAgICAgcmRpLCBieXRlIDIqU0laRU9GX1hNTVdPUkQgICAgICA7IG91dHB0cgorICAgICAgICBjbXAgICAgIHJheCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorICAgICAgICBqYSAgICAgIG5lYXIgLmNvbHVtbmxvb3AKKyAgICAgICAgdGVzdCAgICBlYXgsZWF4CisgICAgICAgIGpueiAgICAgbmVhciAuY29sdW1ubG9vcF9sYXN0CiAKLQlwb3AJcnNpCi0JcG9wCXJkaQotCXBvcAlyYXgKKyAgICAgICAgcG9wICAgICByc2kKKyAgICAgICAgcG9wICAgICByZGkKKyAgICAgICAgcG9wICAgICByYXgKIAotCWFkZAlyc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCTsgaW5wdXRfZGF0YQotCWFkZAlyZGksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCTsgb3V0cHV0X2RhdGEKLQlkZWMJcmN4CQkJCTsgcm93Y3RyCi0JamcJbmVhciAucm93bG9vcAorICAgICAgICBhZGQgICAgIHJzaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cgICAgICAgOyBpbnB1dF9kYXRhCisgICAgICAgIGFkZCAgICAgcmRpLCBieXRlIFNJWkVPRl9KU0FNUFJPVyAgICAgICA7IG91dHB1dF9kYXRhCisgICAgICAgIGRlYyAgICAgcmN4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IHJvd2N0cgorICAgICAgICBqZyAgICAgIG5lYXIgLnJvd2xvb3AKIAogLnJldHVybjoKLQl1bmNvbGxlY3RfYXJncwotCXBvcAlyYnAKLQlyZXQKKyAgICAgICAgdW5jb2xsZWN0X2FyZ3MKKyAgICAgICAgcG9wICAgICByYnAKKyAgICAgICAgcmV0CiAKIDsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDsKQEAgLTE5NywyODggKzE5NywyODggQEAKIDsgcjEyID0gSlNBTVBBUlJBWSBpbnB1dF9kYXRhCiA7IHIxMyA9IEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIKIAotJWRlZmluZSB3ayhpKQkJcmJwLShXS19OVU0tKGkpKSpTSVpFT0ZfWE1NV09SRAk7IHhtbXdvcmQgd2tbV0tfTlVNXQotJWRlZmluZSBXS19OVU0JCTQKKyVkZWZpbmUgd2soaSkgICAgICAgICAgIHJicC0oV0tfTlVNLShpKSkqU0laRU9GX1hNTVdPUkQgOyB4bW13b3JkIHdrW1dLX05VTV0KKyVkZWZpbmUgV0tfTlVNICAgICAgICAgIDQKIAotCWFsaWduCTE2Ci0JZ2xvYmFsCUVYVE4oanNpbWRfaDJ2Ml9mYW5jeV91cHNhbXBsZV9zc2UyKQorICAgICAgICBhbGlnbiAgIDE2CisgICAgICAgIGdsb2JhbCAgRVhUTihqc2ltZF9oMnYyX2ZhbmN5X3Vwc2FtcGxlX3NzZTIpCiAKIEVYVE4oanNpbWRfaDJ2Ml9mYW5jeV91cHNhbXBsZV9zc2UyKToKLQlwdXNoCXJicAotCW1vdglyYXgscnNwCQkJCTsgcmF4ID0gb3JpZ2luYWwgcmJwCi0Jc3ViCXJzcCwgYnl0ZSA0Ci0JYW5kCXJzcCwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKQk7IGFsaWduIHRvIDEyOCBiaXRzCi0JbW92CVtyc3BdLHJheAotCW1vdglyYnAscnNwCQkJCTsgcmJwID0gYWxpZ25lZCByYnAKLQlsZWEJcnNwLCBbd2soMCldCi0JY29sbGVjdF9hcmdzCi0JcHVzaAlyYngKKyAgICAgICAgcHVzaCAgICByYnAKKyAgICAgICAgbW92ICAgICByYXgscnNwICAgICAgICAgICAgICAgICAgICAgICAgIDsgcmF4ID0gb3JpZ2luYWwgcmJwCisgICAgICAgIHN1YiAgICAgcnNwLCBieXRlIDQKKyAgICAgICAgYW5kICAgICByc3AsIGJ5dGUgKC1TSVpFT0ZfWE1NV09SRCkgICAgIDsgYWxpZ24gdG8gMTI4IGJpdHMKKyAgICAgICAgbW92ICAgICBbcnNwXSxyYXgKKyAgICAgICAgbW92ICAgICByYnAscnNwICAgICAgICAgICAgICAgICAgICAgICAgIDsgcmJwID0gYWxpZ25lZCByYnAKKyAgICAgICAgbGVhICAgICByc3AsIFt3aygwKV0KKyAgICAgICAgY29sbGVjdF9hcmdzCisgICAgICAgIHB1c2ggICAgcmJ4CiAKLQltb3YJcmF4LCByMTEgIDsgY29sY3RyCi0JdGVzdAlyYXgscmF4Ci0JanoJbmVhciAucmV0dXJuCisgICAgICAgIG1vdiAgICAgcmF4LCByMTEgIDsgY29sY3RyCisgICAgICAgIHRlc3QgICAgcmF4LHJheAorICAgICAgICBqeiAgICAgIG5lYXIgLnJldHVybgogCi0JbW92CXJjeCwgcjEwCTsgcm93Y3RyCi0JdGVzdAlyY3gscmN4Ci0JanoJbmVhciAucmV0dXJuCisgICAgICAgIG1vdiAgICAgcmN4LCByMTAgICAgICAgIDsgcm93Y3RyCisgICAgICAgIHRlc3QgICAgcmN4LHJjeAorICAgICAgICBqeiAgICAgIG5lYXIgLnJldHVybgogCi0JbW92CXJzaSwgcjEyCTsgaW5wdXRfZGF0YQotCW1vdglyZGksIHIxMwotCW1vdglyZGksIEpTQU1QQVJSQVkgW3JkaV0JCQk7IG91dHB1dF9kYXRhCisgICAgICAgIG1vdiAgICAgcnNpLCByMTIgICAgICAgIDsgaW5wdXRfZGF0YQorICAgICAgICBtb3YgICAgIHJkaSwgcjEzCisgICAgICAgIG1vdiAgICAgcmRpLCBKU0FNUEFSUkFZIFtyZGldICAgICAgICAgICAgICAgICAgIDsgb3V0cHV0X2RhdGEKIC5yb3dsb29wOgotCXB1c2gJcmF4CQkJCQk7IGNvbGN0cgotCXB1c2gJcmN4Ci0JcHVzaAlyZGkKLQlwdXNoCXJzaQorICAgICAgICBwdXNoICAgIHJheCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IGNvbGN0cgorICAgICAgICBwdXNoICAgIHJjeAorICAgICAgICBwdXNoICAgIHJkaQorICAgICAgICBwdXNoICAgIHJzaQogCi0JbW92CXJjeCwgSlNBTVBST1cgW3JzaS0xKlNJWkVPRl9KU0FNUFJPV10JOyBpbnB0cjEoYWJvdmUpCi0JbW92CXJieCwgSlNBTVBST1cgW3JzaSswKlNJWkVPRl9KU0FNUFJPV10JOyBpbnB0cjAKLQltb3YJcnNpLCBKU0FNUFJPVyBbcnNpKzEqU0laRU9GX0pTQU1QUk9XXQk7IGlucHRyMShiZWxvdykKLQltb3YJcmR4LCBKU0FNUFJPVyBbcmRpKzAqU0laRU9GX0pTQU1QUk9XXQk7IG91dHB0cjAKLQltb3YJcmRpLCBKU0FNUFJPVyBbcmRpKzEqU0laRU9GX0pTQU1QUk9XXQk7IG91dHB0cjEKKyAgICAgICAgbW92ICAgICByY3gsIEpTQU1QUk9XIFtyc2ktMSpTSVpFT0ZfSlNBTVBST1ddICAgOyBpbnB0cjEoYWJvdmUpCisgICAgICAgIG1vdiAgICAgcmJ4LCBKU0FNUFJPVyBbcnNpKzAqU0laRU9GX0pTQU1QUk9XXSAgIDsgaW5wdHIwCisgICAgICAgIG1vdiAgICAgcnNpLCBKU0FNUFJPVyBbcnNpKzEqU0laRU9GX0pTQU1QUk9XXSAgIDsgaW5wdHIxKGJlbG93KQorICAgICAgICBtb3YgICAgIHJkeCwgSlNBTVBST1cgW3JkaSswKlNJWkVPRl9KU0FNUFJPV10gICA7IG91dHB0cjAKKyAgICAgICAgbW92ICAgICByZGksIEpTQU1QUk9XIFtyZGkrMSpTSVpFT0ZfSlNBTVBST1ddICAgOyBvdXRwdHIxCiAKLQl0ZXN0CXJheCwgU0laRU9GX1hNTVdPUkQtMQotCWp6CXNob3J0IC5za2lwCi0JcHVzaAlyZHgKLQltb3YJZGwsIEpTQU1QTEUgW3JjeCsocmF4LTEpKlNJWkVPRl9KU0FNUExFXQotCW1vdglKU0FNUExFIFtyY3grcmF4KlNJWkVPRl9KU0FNUExFXSwgZGwKLQltb3YJZGwsIEpTQU1QTEUgW3JieCsocmF4LTEpKlNJWkVPRl9KU0FNUExFXQotCW1vdglKU0FNUExFIFtyYngrcmF4KlNJWkVPRl9KU0FNUExFXSwgZGwKLQltb3YJZGwsIEpTQU1QTEUgW3JzaSsocmF4LTEpKlNJWkVPRl9KU0FNUExFXQotCW1vdglKU0FNUExFIFtyc2krcmF4KlNJWkVPRl9KU0FNUExFXSwgZGwJOyBpbnNlcnQgYSBkdW1teSBzYW1wbGUKLQlwb3AJcmR4CisgICAgICAgIHRlc3QgICAgcmF4LCBTSVpFT0ZfWE1NV09SRC0xCisgICAgICAgIGp6ICAgICAgc2hvcnQgLnNraXAKKyAgICAgICAgcHVzaCAgICByZHgKKyAgICAgICAgbW92ICAgICBkbCwgSlNBTVBMRSBbcmN4KyhyYXgtMSkqU0laRU9GX0pTQU1QTEVdCisgICAgICAgIG1vdiAgICAgSlNBTVBMRSBbcmN4K3JheCpTSVpFT0ZfSlNBTVBMRV0sIGRsCisgICAgICAgIG1vdiAgICAgZGwsIEpTQU1QTEUgW3JieCsocmF4LTEpKlNJWkVPRl9KU0FNUExFXQorICAgICAgICBtb3YgICAgIEpTQU1QTEUgW3JieCtyYXgqU0laRU9GX0pTQU1QTEVdLCBkbAorICAgICAgICBtb3YgICAgIGRsLCBKU0FNUExFIFtyc2krKHJheC0xKSpTSVpFT0ZfSlNBTVBMRV0KKyAgICAgICAgbW92ICAgICBKU0FNUExFIFtyc2krcmF4KlNJWkVPRl9KU0FNUExFXSwgZGwgICAgOyBpbnNlcnQgYSBkdW1teSBzYW1wbGUKKyAgICAgICAgcG9wICAgICByZHgKIC5za2lwOgotCTsgLS0gcHJvY2VzcyB0aGUgZmlyc3QgY29sdW1uIGJsb2NrCisgICAgICAgIDsgLS0gcHJvY2VzcyB0aGUgZmlyc3QgY29sdW1uIGJsb2NrCiAKLQltb3ZkcWEJeG1tMCwgWE1NV09SRCBbcmJ4KzAqU0laRU9GX1hNTVdPUkRdCTsgeG1tMD1yb3dbIDBdWzBdCi0JbW92ZHFhCXhtbTEsIFhNTVdPUkQgW3JjeCswKlNJWkVPRl9YTU1XT1JEXQk7IHhtbTE9cm93Wy0xXVswXQotCW1vdmRxYQl4bW0yLCBYTU1XT1JEIFtyc2krMCpTSVpFT0ZfWE1NV09SRF0JOyB4bW0yPXJvd1srMV1bMF0KKyAgICAgICAgbW92ZHFhICB4bW0wLCBYTU1XT1JEIFtyYngrMCpTSVpFT0ZfWE1NV09SRF0gICAgOyB4bW0wPXJvd1sgMF1bMF0KKyAgICAgICAgbW92ZHFhICB4bW0xLCBYTU1XT1JEIFtyY3grMCpTSVpFT0ZfWE1NV09SRF0gICAgOyB4bW0xPXJvd1stMV1bMF0KKyAgICAgICAgbW92ZHFhICB4bW0yLCBYTU1XT1JEIFtyc2krMCpTSVpFT0ZfWE1NV09SRF0gICAgOyB4bW0yPXJvd1srMV1bMF0KIAotCXB4b3IgICAgICB4bW0zLHhtbTMJCTsgeG1tMz0oYWxsIDAncykKLQltb3ZkcWEgICAgeG1tNCx4bW0wCi0JcHVucGNrbGJ3IHhtbTAseG1tMwkJOyB4bW0wPXJvd1sgMF0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcpCi0JcHVucGNraGJ3IHhtbTQseG1tMwkJOyB4bW00PXJvd1sgMF0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCi0JbW92ZHFhICAgIHhtbTUseG1tMQotCXB1bnBja2xidyB4bW0xLHhtbTMJCTsgeG1tMT1yb3dbLTFdKCAwICAxICAyICAzICA0ICA1ICA2ICA3KQotCXB1bnBja2hidyB4bW01LHhtbTMJCTsgeG1tNT1yb3dbLTFdKCA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQotCW1vdmRxYSAgICB4bW02LHhtbTIKLQlwdW5wY2tsYncgeG1tMix4bW0zCQk7IHhtbTI9cm93WysxXSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNykKLQlwdW5wY2toYncgeG1tNix4bW0zCQk7IHhtbTY9cm93WysxXSggOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKKyAgICAgICAgcHhvciAgICAgIHhtbTMseG1tMyAgICAgICAgICAgICA7IHhtbTM9KGFsbCAwJ3MpCisgICAgICAgIG1vdmRxYSAgICB4bW00LHhtbTAKKyAgICAgICAgcHVucGNrbGJ3IHhtbTAseG1tMyAgICAgICAgICAgICA7IHhtbTA9cm93WyAwXSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNykKKyAgICAgICAgcHVucGNraGJ3IHhtbTQseG1tMyAgICAgICAgICAgICA7IHhtbTQ9cm93WyAwXSggOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKKyAgICAgICAgbW92ZHFhICAgIHhtbTUseG1tMQorICAgICAgICBwdW5wY2tsYncgeG1tMSx4bW0zICAgICAgICAgICAgIDsgeG1tMT1yb3dbLTFdKCAwICAxICAyICAzICA0ICA1ICA2ICA3KQorICAgICAgICBwdW5wY2toYncgeG1tNSx4bW0zICAgICAgICAgICAgIDsgeG1tNT1yb3dbLTFdKCA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQorICAgICAgICBtb3ZkcWEgICAgeG1tNix4bW0yCisgICAgICAgIHB1bnBja2xidyB4bW0yLHhtbTMgICAgICAgICAgICAgOyB4bW0yPXJvd1srMV0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcpCisgICAgICAgIHB1bnBja2hidyB4bW02LHhtbTMgICAgICAgICAgICAgOyB4bW02PXJvd1srMV0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCiAKLQlwbXVsbHcJeG1tMCxbcmVsIFBXX1RIUkVFXQotCXBtdWxsdwl4bW00LFtyZWwgUFdfVEhSRUVdCisgICAgICAgIHBtdWxsdyAgeG1tMCxbcmVsIFBXX1RIUkVFXQorICAgICAgICBwbXVsbHcgIHhtbTQsW3JlbCBQV19USFJFRV0KIAotCXBjbXBlcWIJeG1tNyx4bW03Ci0JcHNybGRxCXhtbTcsKFNJWkVPRl9YTU1XT1JELTIpCisgICAgICAgIHBjbXBlcWIgeG1tNyx4bW03CisgICAgICAgIHBzcmxkcSAgeG1tNywoU0laRU9GX1hNTVdPUkQtMikKIAotCXBhZGR3CXhtbTEseG1tMAkJOyB4bW0xPUludDBMPSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNykKLQlwYWRkdwl4bW01LHhtbTQJCTsgeG1tNT1JbnQwSD0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCi0JcGFkZHcJeG1tMix4bW0wCQk7IHhtbTI9SW50MUw9KCAwICAxICAyICAzICA0ICA1ICA2ICA3KQotCXBhZGR3CXhtbTYseG1tNAkJOyB4bW02PUludDFIPSggOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKKyAgICAgICAgcGFkZHcgICB4bW0xLHhtbTAgICAgICAgICAgICAgICA7IHhtbTE9SW50MEw9KCAwICAxICAyICAzICA0ICA1ICA2ICA3KQorICAgICAgICBwYWRkdyAgIHhtbTUseG1tNCAgICAgICAgICAgICAgIDsgeG1tNT1JbnQwSD0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCisgICAgICAgIHBhZGR3ICAgeG1tMix4bW0wICAgICAgICAgICAgICAgOyB4bW0yPUludDFMPSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNykKKyAgICAgICAgcGFkZHcgICB4bW02LHhtbTQgICAgICAgICAgICAgICA7IHhtbTY9SW50MUg9KCA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQogCi0JbW92ZHFhCVhNTVdPUkQgW3JkeCswKlNJWkVPRl9YTU1XT1JEXSwgeG1tMQk7IHRlbXBvcmFyaWx5IHNhdmUKLQltb3ZkcWEJWE1NV09SRCBbcmR4KzEqU0laRU9GX1hNTVdPUkRdLCB4bW01CTsgdGhlIGludGVybWVkaWF0ZSBkYXRhCi0JbW92ZHFhCVhNTVdPUkQgW3JkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tMgotCW1vdmRxYQlYTU1XT1JEIFtyZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbTYKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFtyZHgrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbTEgICAgOyB0ZW1wb3JhcmlseSBzYXZlCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbcmR4KzEqU0laRU9GX1hNTVdPUkRdLCB4bW01ICAgIDsgdGhlIGludGVybWVkaWF0ZSBkYXRhCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbcmRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW0yCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbcmRpKzEqU0laRU9GX1hNTVdPUkRdLCB4bW02CiAKLQlwYW5kCXhtbTEseG1tNwkJOyB4bW0xPSggMCAtLSAtLSAtLSAtLSAtLSAtLSAtLSkKLQlwYW5kCXhtbTIseG1tNwkJOyB4bW0yPSggMCAtLSAtLSAtLSAtLSAtLSAtLSAtLSkKKyAgICAgICAgcGFuZCAgICB4bW0xLHhtbTcgICAgICAgICAgICAgICA7IHhtbTE9KCAwIC0tIC0tIC0tIC0tIC0tIC0tIC0tKQorICAgICAgICBwYW5kICAgIHhtbTIseG1tNyAgICAgICAgICAgICAgIDsgeG1tMj0oIDAgLS0gLS0gLS0gLS0gLS0gLS0gLS0pCiAKLQltb3ZkcWEJWE1NV09SRCBbd2soMCldLCB4bW0xCi0JbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tMgorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDApXSwgeG1tMQorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDEpXSwgeG1tMgogCi0JYWRkCXJheCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC0xCi0JYW5kCXJheCwgYnl0ZSAtU0laRU9GX1hNTVdPUkQKLQljbXAJcmF4LCBieXRlIFNJWkVPRl9YTU1XT1JECi0JamEJc2hvcnQgLmNvbHVtbmxvb3AKKyAgICAgICAgYWRkICAgICByYXgsIGJ5dGUgU0laRU9GX1hNTVdPUkQtMQorICAgICAgICBhbmQgICAgIHJheCwgYnl0ZSAtU0laRU9GX1hNTVdPUkQKKyAgICAgICAgY21wICAgICByYXgsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKyAgICAgICAgamEgICAgICBzaG9ydCAuY29sdW1ubG9vcAogCiAuY29sdW1ubG9vcF9sYXN0OgotCTsgLS0gcHJvY2VzcyB0aGUgbGFzdCBjb2x1bW4gYmxvY2sKKyAgICAgICAgOyAtLSBwcm9jZXNzIHRoZSBsYXN0IGNvbHVtbiBibG9jawogCi0JcGNtcGVxYgl4bW0xLHhtbTEKLQlwc2xsZHEJeG1tMSwoU0laRU9GX1hNTVdPUkQtMikKLQltb3ZkcWEJeG1tMix4bW0xCisgICAgICAgIHBjbXBlcWIgeG1tMSx4bW0xCisgICAgICAgIHBzbGxkcSAgeG1tMSwoU0laRU9GX1hNTVdPUkQtMikKKyAgICAgICAgbW92ZHFhICB4bW0yLHhtbTEKIAotCXBhbmQJeG1tMSwgWE1NV09SRCBbcmR4KzEqU0laRU9GX1hNTVdPUkRdCi0JcGFuZAl4bW0yLCBYTU1XT1JEIFtyZGkrMSpTSVpFT0ZfWE1NV09SRF0KKyAgICAgICAgcGFuZCAgICB4bW0xLCBYTU1XT1JEIFtyZHgrMSpTSVpFT0ZfWE1NV09SRF0KKyAgICAgICAgcGFuZCAgICB4bW0yLCBYTU1XT1JEIFtyZGkrMSpTSVpFT0ZfWE1NV09SRF0KIAotCW1vdmRxYQlYTU1XT1JEIFt3aygyKV0sIHhtbTEJOyB4bW0xPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAxNSkKLQltb3ZkcWEJWE1NV09SRCBbd2soMyldLCB4bW0yCTsgeG1tMj0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gMTUpCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMildLCB4bW0xICAgOyB4bW0xPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAxNSkKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygzKV0sIHhtbTIgICA7IHhtbTI9KC0tIC0tIC0tIC0tIC0tIC0tIC0tIDE1KQogCi0Jam1wCW5lYXIgLnVwc2FtcGxlCisgICAgICAgIGptcCAgICAgbmVhciAudXBzYW1wbGUKIAogLmNvbHVtbmxvb3A6Ci0JOyAtLSBwcm9jZXNzIHRoZSBuZXh0IGNvbHVtbiBibG9jaworICAgICAgICA7IC0tIHByb2Nlc3MgdGhlIG5leHQgY29sdW1uIGJsb2NrCiAKLQltb3ZkcWEJeG1tMCwgWE1NV09SRCBbcmJ4KzEqU0laRU9GX1hNTVdPUkRdCTsgeG1tMD1yb3dbIDBdWzFdCi0JbW92ZHFhCXhtbTEsIFhNTVdPUkQgW3JjeCsxKlNJWkVPRl9YTU1XT1JEXQk7IHhtbTE9cm93Wy0xXVsxXQotCW1vdmRxYQl4bW0yLCBYTU1XT1JEIFtyc2krMSpTSVpFT0ZfWE1NV09SRF0JOyB4bW0yPXJvd1srMV1bMV0KKyAgICAgICAgbW92ZHFhICB4bW0wLCBYTU1XT1JEIFtyYngrMSpTSVpFT0ZfWE1NV09SRF0gICAgOyB4bW0wPXJvd1sgMF1bMV0KKyAgICAgICAgbW92ZHFhICB4bW0xLCBYTU1XT1JEIFtyY3grMSpTSVpFT0ZfWE1NV09SRF0gICAgOyB4bW0xPXJvd1stMV1bMV0KKyAgICAgICAgbW92ZHFhICB4bW0yLCBYTU1XT1JEIFtyc2krMSpTSVpFT0ZfWE1NV09SRF0gICAgOyB4bW0yPXJvd1srMV1bMV0KIAotCXB4b3IgICAgICB4bW0zLHhtbTMJCTsgeG1tMz0oYWxsIDAncykKLQltb3ZkcWEgICAgeG1tNCx4bW0wCi0JcHVucGNrbGJ3IHhtbTAseG1tMwkJOyB4bW0wPXJvd1sgMF0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcpCi0JcHVucGNraGJ3IHhtbTQseG1tMwkJOyB4bW00PXJvd1sgMF0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCi0JbW92ZHFhICAgIHhtbTUseG1tMQotCXB1bnBja2xidyB4bW0xLHhtbTMJCTsgeG1tMT1yb3dbLTFdKCAwICAxICAyICAzICA0ICA1ICA2ICA3KQotCXB1bnBja2hidyB4bW01LHhtbTMJCTsgeG1tNT1yb3dbLTFdKCA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQotCW1vdmRxYSAgICB4bW02LHhtbTIKLQlwdW5wY2tsYncgeG1tMix4bW0zCQk7IHhtbTI9cm93WysxXSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNykKLQlwdW5wY2toYncgeG1tNix4bW0zCQk7IHhtbTY9cm93WysxXSggOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKKyAgICAgICAgcHhvciAgICAgIHhtbTMseG1tMyAgICAgICAgICAgICA7IHhtbTM9KGFsbCAwJ3MpCisgICAgICAgIG1vdmRxYSAgICB4bW00LHhtbTAKKyAgICAgICAgcHVucGNrbGJ3IHhtbTAseG1tMyAgICAgICAgICAgICA7IHhtbTA9cm93WyAwXSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNykKKyAgICAgICAgcHVucGNraGJ3IHhtbTQseG1tMyAgICAgICAgICAgICA7IHhtbTQ9cm93WyAwXSggOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKKyAgICAgICAgbW92ZHFhICAgIHhtbTUseG1tMQorICAgICAgICBwdW5wY2tsYncgeG1tMSx4bW0zICAgICAgICAgICAgIDsgeG1tMT1yb3dbLTFdKCAwICAxICAyICAzICA0ICA1ICA2ICA3KQorICAgICAgICBwdW5wY2toYncgeG1tNSx4bW0zICAgICAgICAgICAgIDsgeG1tNT1yb3dbLTFdKCA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQorICAgICAgICBtb3ZkcWEgICAgeG1tNix4bW0yCisgICAgICAgIHB1bnBja2xidyB4bW0yLHhtbTMgICAgICAgICAgICAgOyB4bW0yPXJvd1srMV0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcpCisgICAgICAgIHB1bnBja2hidyB4bW02LHhtbTMgICAgICAgICAgICAgOyB4bW02PXJvd1srMV0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCiAKLQlwbXVsbHcJeG1tMCxbcmVsIFBXX1RIUkVFXQotCXBtdWxsdwl4bW00LFtyZWwgUFdfVEhSRUVdCisgICAgICAgIHBtdWxsdyAgeG1tMCxbcmVsIFBXX1RIUkVFXQorICAgICAgICBwbXVsbHcgIHhtbTQsW3JlbCBQV19USFJFRV0KIAotCXBhZGR3CXhtbTEseG1tMAkJOyB4bW0xPUludDBMPSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNykKLQlwYWRkdwl4bW01LHhtbTQJCTsgeG1tNT1JbnQwSD0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCi0JcGFkZHcJeG1tMix4bW0wCQk7IHhtbTI9SW50MUw9KCAwICAxICAyICAzICA0ICA1ICA2ICA3KQotCXBhZGR3CXhtbTYseG1tNAkJOyB4bW02PUludDFIPSggOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKKyAgICAgICAgcGFkZHcgICB4bW0xLHhtbTAgICAgICAgICAgICAgICA7IHhtbTE9SW50MEw9KCAwICAxICAyICAzICA0ICA1ICA2ICA3KQorICAgICAgICBwYWRkdyAgIHhtbTUseG1tNCAgICAgICAgICAgICAgIDsgeG1tNT1JbnQwSD0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCisgICAgICAgIHBhZGR3ICAgeG1tMix4bW0wICAgICAgICAgICAgICAgOyB4bW0yPUludDFMPSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNykKKyAgICAgICAgcGFkZHcgICB4bW02LHhtbTQgICAgICAgICAgICAgICA7IHhtbTY9SW50MUg9KCA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQogCi0JbW92ZHFhCVhNTVdPUkQgW3JkeCsyKlNJWkVPRl9YTU1XT1JEXSwgeG1tMQk7IHRlbXBvcmFyaWx5IHNhdmUKLQltb3ZkcWEJWE1NV09SRCBbcmR4KzMqU0laRU9GX1hNTVdPUkRdLCB4bW01CTsgdGhlIGludGVybWVkaWF0ZSBkYXRhCi0JbW92ZHFhCVhNTVdPUkQgW3JkaSsyKlNJWkVPRl9YTU1XT1JEXSwgeG1tMgotCW1vdmRxYQlYTU1XT1JEIFtyZGkrMypTSVpFT0ZfWE1NV09SRF0sIHhtbTYKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFtyZHgrMipTSVpFT0ZfWE1NV09SRF0sIHhtbTEgICAgOyB0ZW1wb3JhcmlseSBzYXZlCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbcmR4KzMqU0laRU9GX1hNTVdPUkRdLCB4bW01ICAgIDsgdGhlIGludGVybWVkaWF0ZSBkYXRhCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbcmRpKzIqU0laRU9GX1hNTVdPUkRdLCB4bW0yCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbcmRpKzMqU0laRU9GX1hNTVdPUkRdLCB4bW02CiAKLQlwc2xsZHEJeG1tMSwoU0laRU9GX1hNTVdPUkQtMikJOyB4bW0xPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAgMCkKLQlwc2xsZHEJeG1tMiwoU0laRU9GX1hNTVdPUkQtMikJOyB4bW0yPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAgMCkKKyAgICAgICAgcHNsbGRxICB4bW0xLChTSVpFT0ZfWE1NV09SRC0yKSA7IHhtbTE9KC0tIC0tIC0tIC0tIC0tIC0tIC0tICAwKQorICAgICAgICBwc2xsZHEgIHhtbTIsKFNJWkVPRl9YTU1XT1JELTIpIDsgeG1tMj0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gIDApCiAKLQltb3ZkcWEJWE1NV09SRCBbd2soMildLCB4bW0xCi0JbW92ZHFhCVhNTVdPUkQgW3drKDMpXSwgeG1tMgorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDIpXSwgeG1tMQorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDMpXSwgeG1tMgogCiAudXBzYW1wbGU6Ci0JOyAtLSBwcm9jZXNzIHRoZSB1cHBlciByb3cKKyAgICAgICAgOyAtLSBwcm9jZXNzIHRoZSB1cHBlciByb3cKIAotCW1vdmRxYQl4bW03LCBYTU1XT1JEIFtyZHgrMCpTSVpFT0ZfWE1NV09SRF0KLQltb3ZkcWEJeG1tMywgWE1NV09SRCBbcmR4KzEqU0laRU9GX1hNTVdPUkRdCisgICAgICAgIG1vdmRxYSAgeG1tNywgWE1NV09SRCBbcmR4KzAqU0laRU9GX1hNTVdPUkRdCisgICAgICAgIG1vdmRxYSAgeG1tMywgWE1NV09SRCBbcmR4KzEqU0laRU9GX1hNTVdPUkRdCiAKLQltb3ZkcWEJeG1tMCx4bW03CQk7IHhtbTc9SW50MEw9KCAwICAxICAyICAzICA0ICA1ICA2ICA3KQotCW1vdmRxYQl4bW00LHhtbTMJCTsgeG1tMz1JbnQwSD0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCi0JcHNybGRxCXhtbTAsMgkJCTsgeG1tMD0oIDEgIDIgIDMgIDQgIDUgIDYgIDcgLS0pCi0JcHNsbGRxCXhtbTQsKFNJWkVPRl9YTU1XT1JELTIpCTsgeG1tND0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gIDgpCi0JbW92ZHFhCXhtbTUseG1tNwotCW1vdmRxYQl4bW02LHhtbTMKLQlwc3JsZHEJeG1tNSwoU0laRU9GX1hNTVdPUkQtMikJOyB4bW01PSggNyAtLSAtLSAtLSAtLSAtLSAtLSAtLSkKLQlwc2xsZHEJeG1tNiwyCQkJOyB4bW02PSgtLSAgOCAgOSAxMCAxMSAxMiAxMyAxNCkKKyAgICAgICAgbW92ZHFhICB4bW0wLHhtbTcgICAgICAgICAgICAgICA7IHhtbTc9SW50MEw9KCAwICAxICAyICAzICA0ICA1ICA2ICA3KQorICAgICAgICBtb3ZkcWEgIHhtbTQseG1tMyAgICAgICAgICAgICAgIDsgeG1tMz1JbnQwSD0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCisgICAgICAgIHBzcmxkcSAgeG1tMCwyICAgICAgICAgICAgICAgICAgOyB4bW0wPSggMSAgMiAgMyAgNCAgNSAgNiAgNyAtLSkKKyAgICAgICAgcHNsbGRxICB4bW00LChTSVpFT0ZfWE1NV09SRC0yKSA7IHhtbTQ9KC0tIC0tIC0tIC0tIC0tIC0tIC0tICA4KQorICAgICAgICBtb3ZkcWEgIHhtbTUseG1tNworICAgICAgICBtb3ZkcWEgIHhtbTYseG1tMworICAgICAgICBwc3JsZHEgIHhtbTUsKFNJWkVPRl9YTU1XT1JELTIpIDsgeG1tNT0oIDcgLS0gLS0gLS0gLS0gLS0gLS0gLS0pCisgICAgICAgIHBzbGxkcSAgeG1tNiwyICAgICAgICAgICAgICAgICAgOyB4bW02PSgtLSAgOCAgOSAxMCAxMSAxMiAxMyAxNCkKIAotCXBvcgl4bW0wLHhtbTQJCTsgeG1tMD0oIDEgIDIgIDMgIDQgIDUgIDYgIDcgIDgpCi0JcG9yCXhtbTUseG1tNgkJOyB4bW01PSggNyAgOCAgOSAxMCAxMSAxMiAxMyAxNCkKKyAgICAgICAgcG9yICAgICB4bW0wLHhtbTQgICAgICAgICAgICAgICA7IHhtbTA9KCAxICAyICAzICA0ICA1ICA2ICA3ICA4KQorICAgICAgICBwb3IgICAgIHhtbTUseG1tNiAgICAgICAgICAgICAgIDsgeG1tNT0oIDcgIDggIDkgMTAgMTEgMTIgMTMgMTQpCiAKLQltb3ZkcWEJeG1tMSx4bW03Ci0JbW92ZHFhCXhtbTIseG1tMwotCXBzbGxkcQl4bW0xLDIJCQk7IHhtbTE9KC0tICAwICAxICAyICAzICA0ICA1ICA2KQotCXBzcmxkcQl4bW0yLDIJCQk7IHhtbTI9KCA5IDEwIDExIDEyIDEzIDE0IDE1IC0tKQotCW1vdmRxYQl4bW00LHhtbTMKLQlwc3JsZHEJeG1tNCwoU0laRU9GX1hNTVdPUkQtMikJOyB4bW00PSgxNSAtLSAtLSAtLSAtLSAtLSAtLSAtLSkKKyAgICAgICAgbW92ZHFhICB4bW0xLHhtbTcKKyAgICAgICAgbW92ZHFhICB4bW0yLHhtbTMKKyAgICAgICAgcHNsbGRxICB4bW0xLDIgICAgICAgICAgICAgICAgICA7IHhtbTE9KC0tICAwICAxICAyICAzICA0ICA1ICA2KQorICAgICAgICBwc3JsZHEgIHhtbTIsMiAgICAgICAgICAgICAgICAgIDsgeG1tMj0oIDkgMTAgMTEgMTIgMTMgMTQgMTUgLS0pCisgICAgICAgIG1vdmRxYSAgeG1tNCx4bW0zCisgICAgICAgIHBzcmxkcSAgeG1tNCwoU0laRU9GX1hNTVdPUkQtMikgOyB4bW00PSgxNSAtLSAtLSAtLSAtLSAtLSAtLSAtLSkKIAotCXBvcgl4bW0xLCBYTU1XT1JEIFt3aygwKV0JOyB4bW0xPSgtMSAgMCAgMSAgMiAgMyAgNCAgNSAgNikKLQlwb3IJeG1tMiwgWE1NV09SRCBbd2soMildCTsgeG1tMj0oIDkgMTAgMTEgMTIgMTMgMTQgMTUgMTYpCisgICAgICAgIHBvciAgICAgeG1tMSwgWE1NV09SRCBbd2soMCldICAgOyB4bW0xPSgtMSAgMCAgMSAgMiAgMyAgNCAgNSAgNikKKyAgICAgICAgcG9yICAgICB4bW0yLCBYTU1XT1JEIFt3aygyKV0gICA7IHhtbTI9KCA5IDEwIDExIDEyIDEzIDE0IDE1IDE2KQogCi0JbW92ZHFhCVhNTVdPUkQgW3drKDApXSwgeG1tNAorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDApXSwgeG1tNAogCi0JcG11bGx3CXhtbTcsW3JlbCBQV19USFJFRV0KLQlwbXVsbHcJeG1tMyxbcmVsIFBXX1RIUkVFXQotCXBhZGR3CXhtbTEsW3JlbCBQV19FSUdIVF0KLQlwYWRkdwl4bW01LFtyZWwgUFdfRUlHSFRdCi0JcGFkZHcJeG1tMCxbcmVsIFBXX1NFVkVOXQotCXBhZGR3CXhtbTIsW3JlbCBQV19TRVZFTl0KKyAgICAgICAgcG11bGx3ICB4bW03LFtyZWwgUFdfVEhSRUVdCisgICAgICAgIHBtdWxsdyAgeG1tMyxbcmVsIFBXX1RIUkVFXQorICAgICAgICBwYWRkdyAgIHhtbTEsW3JlbCBQV19FSUdIVF0KKyAgICAgICAgcGFkZHcgICB4bW01LFtyZWwgUFdfRUlHSFRdCisgICAgICAgIHBhZGR3ICAgeG1tMCxbcmVsIFBXX1NFVkVOXQorICAgICAgICBwYWRkdyAgIHhtbTIsW3JlbCBQV19TRVZFTl0KIAotCXBhZGR3CXhtbTEseG1tNwotCXBhZGR3CXhtbTUseG1tMwotCXBzcmx3CXhtbTEsNAkJCTsgeG1tMT1PdXQwTEU9KCAwICAyICA0ICA2ICA4IDEwIDEyIDE0KQotCXBzcmx3CXhtbTUsNAkJCTsgeG1tNT1PdXQwSEU9KDE2IDE4IDIwIDIyIDI0IDI2IDI4IDMwKQotCXBhZGR3CXhtbTAseG1tNwotCXBhZGR3CXhtbTIseG1tMwotCXBzcmx3CXhtbTAsNAkJCTsgeG1tMD1PdXQwTE89KCAxICAzICA1ICA3ICA5IDExIDEzIDE1KQotCXBzcmx3CXhtbTIsNAkJCTsgeG1tMj1PdXQwSE89KDE3IDE5IDIxIDIzIDI1IDI3IDI5IDMxKQorICAgICAgICBwYWRkdyAgIHhtbTEseG1tNworICAgICAgICBwYWRkdyAgIHhtbTUseG1tMworICAgICAgICBwc3JsdyAgIHhtbTEsNCAgICAgICAgICAgICAgICAgIDsgeG1tMT1PdXQwTEU9KCAwICAyICA0ICA2ICA4IDEwIDEyIDE0KQorICAgICAgICBwc3JsdyAgIHhtbTUsNCAgICAgICAgICAgICAgICAgIDsgeG1tNT1PdXQwSEU9KDE2IDE4IDIwIDIyIDI0IDI2IDI4IDMwKQorICAgICAgICBwYWRkdyAgIHhtbTAseG1tNworICAgICAgICBwYWRkdyAgIHhtbTIseG1tMworICAgICAgICBwc3JsdyAgIHhtbTAsNCAgICAgICAgICAgICAgICAgIDsgeG1tMD1PdXQwTE89KCAxICAzICA1ICA3ICA5IDExIDEzIDE1KQorICAgICAgICBwc3JsdyAgIHhtbTIsNCAgICAgICAgICAgICAgICAgIDsgeG1tMj1PdXQwSE89KDE3IDE5IDIxIDIzIDI1IDI3IDI5IDMxKQogCi0JcHNsbHcJeG1tMCxCWVRFX0JJVAotCXBzbGx3CXhtbTIsQllURV9CSVQKLQlwb3IJeG1tMSx4bW0wCQk7IHhtbTE9T3V0MEw9KCAwICAxICAyIC4uLiAxMyAxNCAxNSkKLQlwb3IJeG1tNSx4bW0yCQk7IHhtbTU9T3V0MEg9KDE2IDE3IDE4IC4uLiAyOSAzMCAzMSkKKyAgICAgICAgcHNsbHcgICB4bW0wLEJZVEVfQklUCisgICAgICAgIHBzbGx3ICAgeG1tMixCWVRFX0JJVAorICAgICAgICBwb3IgICAgIHhtbTEseG1tMCAgICAgICAgICAgICAgIDsgeG1tMT1PdXQwTD0oIDAgIDEgIDIgLi4uIDEzIDE0IDE1KQorICAgICAgICBwb3IgICAgIHhtbTUseG1tMiAgICAgICAgICAgICAgIDsgeG1tNT1PdXQwSD0oMTYgMTcgMTggLi4uIDI5IDMwIDMxKQogCi0JbW92ZHFhCVhNTVdPUkQgW3JkeCswKlNJWkVPRl9YTU1XT1JEXSwgeG1tMQotCW1vdmRxYQlYTU1XT1JEIFtyZHgrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbTUKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFtyZHgrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbTEKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFtyZHgrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbTUKIAotCTsgLS0gcHJvY2VzcyB0aGUgbG93ZXIgcm93CisgICAgICAgIDsgLS0gcHJvY2VzcyB0aGUgbG93ZXIgcm93CiAKLQltb3ZkcWEJeG1tNiwgWE1NV09SRCBbcmRpKzAqU0laRU9GX1hNTVdPUkRdCi0JbW92ZHFhCXhtbTQsIFhNTVdPUkQgW3JkaSsxKlNJWkVPRl9YTU1XT1JEXQorICAgICAgICBtb3ZkcWEgIHhtbTYsIFhNTVdPUkQgW3JkaSswKlNJWkVPRl9YTU1XT1JEXQorICAgICAgICBtb3ZkcWEgIHhtbTQsIFhNTVdPUkQgW3JkaSsxKlNJWkVPRl9YTU1XT1JEXQogCi0JbW92ZHFhCXhtbTcseG1tNgkJOyB4bW02PUludDFMPSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNykKLQltb3ZkcWEJeG1tMyx4bW00CQk7IHhtbTQ9SW50MUg9KCA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQotCXBzcmxkcQl4bW03LDIJCQk7IHhtbTc9KCAxICAyICAzICA0ICA1ICA2ICA3IC0tKQotCXBzbGxkcQl4bW0zLChTSVpFT0ZfWE1NV09SRC0yKQk7IHhtbTM9KC0tIC0tIC0tIC0tIC0tIC0tIC0tICA4KQotCW1vdmRxYQl4bW0wLHhtbTYKLQltb3ZkcWEJeG1tMix4bW00Ci0JcHNybGRxCXhtbTAsKFNJWkVPRl9YTU1XT1JELTIpCTsgeG1tMD0oIDcgLS0gLS0gLS0gLS0gLS0gLS0gLS0pCi0JcHNsbGRxCXhtbTIsMgkJCTsgeG1tMj0oLS0gIDggIDkgMTAgMTEgMTIgMTMgMTQpCisgICAgICAgIG1vdmRxYSAgeG1tNyx4bW02ICAgICAgICAgICAgICAgOyB4bW02PUludDFMPSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNykKKyAgICAgICAgbW92ZHFhICB4bW0zLHhtbTQgICAgICAgICAgICAgICA7IHhtbTQ9SW50MUg9KCA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQorICAgICAgICBwc3JsZHEgIHhtbTcsMiAgICAgICAgICAgICAgICAgIDsgeG1tNz0oIDEgIDIgIDMgIDQgIDUgIDYgIDcgLS0pCisgICAgICAgIHBzbGxkcSAgeG1tMywoU0laRU9GX1hNTVdPUkQtMikgOyB4bW0zPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAgOCkKKyAgICAgICAgbW92ZHFhICB4bW0wLHhtbTYKKyAgICAgICAgbW92ZHFhICB4bW0yLHhtbTQKKyAgICAgICAgcHNybGRxICB4bW0wLChTSVpFT0ZfWE1NV09SRC0yKSA7IHhtbTA9KCA3IC0tIC0tIC0tIC0tIC0tIC0tIC0tKQorICAgICAgICBwc2xsZHEgIHhtbTIsMiAgICAgICAgICAgICAgICAgIDsgeG1tMj0oLS0gIDggIDkgMTAgMTEgMTIgMTMgMTQpCiAKLQlwb3IJeG1tNyx4bW0zCQk7IHhtbTc9KCAxICAyICAzICA0ICA1ICA2ICA3ICA4KQotCXBvcgl4bW0wLHhtbTIJCTsgeG1tMD0oIDcgIDggIDkgMTAgMTEgMTIgMTMgMTQpCisgICAgICAgIHBvciAgICAgeG1tNyx4bW0zICAgICAgICAgICAgICAgOyB4bW03PSggMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCkKKyAgICAgICAgcG9yICAgICB4bW0wLHhtbTIgICAgICAgICAgICAgICA7IHhtbTA9KCA3ICA4ICA5IDEwIDExIDEyIDEzIDE0KQogCi0JbW92ZHFhCXhtbTEseG1tNgotCW1vdmRxYQl4bW01LHhtbTQKLQlwc2xsZHEJeG1tMSwyCQkJOyB4bW0xPSgtLSAgMCAgMSAgMiAgMyAgNCAgNSAgNikKLQlwc3JsZHEJeG1tNSwyCQkJOyB4bW01PSggOSAxMCAxMSAxMiAxMyAxNCAxNSAtLSkKLQltb3ZkcWEJeG1tMyx4bW00Ci0JcHNybGRxCXhtbTMsKFNJWkVPRl9YTU1XT1JELTIpCTsgeG1tMz0oMTUgLS0gLS0gLS0gLS0gLS0gLS0gLS0pCisgICAgICAgIG1vdmRxYSAgeG1tMSx4bW02CisgICAgICAgIG1vdmRxYSAgeG1tNSx4bW00CisgICAgICAgIHBzbGxkcSAgeG1tMSwyICAgICAgICAgICAgICAgICAgOyB4bW0xPSgtLSAgMCAgMSAgMiAgMyAgNCAgNSAgNikKKyAgICAgICAgcHNybGRxICB4bW01LDIgICAgICAgICAgICAgICAgICA7IHhtbTU9KCA5IDEwIDExIDEyIDEzIDE0IDE1IC0tKQorICAgICAgICBtb3ZkcWEgIHhtbTMseG1tNAorICAgICAgICBwc3JsZHEgIHhtbTMsKFNJWkVPRl9YTU1XT1JELTIpIDsgeG1tMz0oMTUgLS0gLS0gLS0gLS0gLS0gLS0gLS0pCiAKLQlwb3IJeG1tMSwgWE1NV09SRCBbd2soMSldCTsgeG1tMT0oLTEgIDAgIDEgIDIgIDMgIDQgIDUgIDYpCi0JcG9yCXhtbTUsIFhNTVdPUkQgW3drKDMpXQk7IHhtbTU9KCA5IDEwIDExIDEyIDEzIDE0IDE1IDE2KQorICAgICAgICBwb3IgICAgIHhtbTEsIFhNTVdPUkQgW3drKDEpXSAgIDsgeG1tMT0oLTEgIDAgIDEgIDIgIDMgIDQgIDUgIDYpCisgICAgICAgIHBvciAgICAgeG1tNSwgWE1NV09SRCBbd2soMyldICAgOyB4bW01PSggOSAxMCAxMSAxMiAxMyAxNCAxNSAxNikKIAotCW1vdmRxYQlYTU1XT1JEIFt3aygxKV0sIHhtbTMKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygxKV0sIHhtbTMKIAotCXBtdWxsdwl4bW02LFtyZWwgUFdfVEhSRUVdCi0JcG11bGx3CXhtbTQsW3JlbCBQV19USFJFRV0KLQlwYWRkdwl4bW0xLFtyZWwgUFdfRUlHSFRdCi0JcGFkZHcJeG1tMCxbcmVsIFBXX0VJR0hUXQotCXBhZGR3CXhtbTcsW3JlbCBQV19TRVZFTl0KLQlwYWRkdwl4bW01LFtyZWwgUFdfU0VWRU5dCisgICAgICAgIHBtdWxsdyAgeG1tNixbcmVsIFBXX1RIUkVFXQorICAgICAgICBwbXVsbHcgIHhtbTQsW3JlbCBQV19USFJFRV0KKyAgICAgICAgcGFkZHcgICB4bW0xLFtyZWwgUFdfRUlHSFRdCisgICAgICAgIHBhZGR3ICAgeG1tMCxbcmVsIFBXX0VJR0hUXQorICAgICAgICBwYWRkdyAgIHhtbTcsW3JlbCBQV19TRVZFTl0KKyAgICAgICAgcGFkZHcgICB4bW01LFtyZWwgUFdfU0VWRU5dCiAKLQlwYWRkdwl4bW0xLHhtbTYKLQlwYWRkdwl4bW0wLHhtbTQKLQlwc3Jsdwl4bW0xLDQJCQk7IHhtbTE9T3V0MUxFPSggMCAgMiAgNCAgNiAgOCAxMCAxMiAxNCkKLQlwc3Jsdwl4bW0wLDQJCQk7IHhtbTA9T3V0MUhFPSgxNiAxOCAyMCAyMiAyNCAyNiAyOCAzMCkKLQlwYWRkdwl4bW03LHhtbTYKLQlwYWRkdwl4bW01LHhtbTQKLQlwc3Jsdwl4bW03LDQJCQk7IHhtbTc9T3V0MUxPPSggMSAgMyAgNSAgNyAgOSAxMSAxMyAxNSkKLQlwc3Jsdwl4bW01LDQJCQk7IHhtbTU9T3V0MUhPPSgxNyAxOSAyMSAyMyAyNSAyNyAyOSAzMSkKKyAgICAgICAgcGFkZHcgICB4bW0xLHhtbTYKKyAgICAgICAgcGFkZHcgICB4bW0wLHhtbTQKKyAgICAgICAgcHNybHcgICB4bW0xLDQgICAgICAgICAgICAgICAgICA7IHhtbTE9T3V0MUxFPSggMCAgMiAgNCAgNiAgOCAxMCAxMiAxNCkKKyAgICAgICAgcHNybHcgICB4bW0wLDQgICAgICAgICAgICAgICAgICA7IHhtbTA9T3V0MUhFPSgxNiAxOCAyMCAyMiAyNCAyNiAyOCAzMCkKKyAgICAgICAgcGFkZHcgICB4bW03LHhtbTYKKyAgICAgICAgcGFkZHcgICB4bW01LHhtbTQKKyAgICAgICAgcHNybHcgICB4bW03LDQgICAgICAgICAgICAgICAgICA7IHhtbTc9T3V0MUxPPSggMSAgMyAgNSAgNyAgOSAxMSAxMyAxNSkKKyAgICAgICAgcHNybHcgICB4bW01LDQgICAgICAgICAgICAgICAgICA7IHhtbTU9T3V0MUhPPSgxNyAxOSAyMSAyMyAyNSAyNyAyOSAzMSkKIAotCXBzbGx3CXhtbTcsQllURV9CSVQKLQlwc2xsdwl4bW01LEJZVEVfQklUCi0JcG9yCXhtbTEseG1tNwkJOyB4bW0xPU91dDFMPSggMCAgMSAgMiAuLi4gMTMgMTQgMTUpCi0JcG9yCXhtbTAseG1tNQkJOyB4bW0wPU91dDFIPSgxNiAxNyAxOCAuLi4gMjkgMzAgMzEpCisgICAgICAgIHBzbGx3ICAgeG1tNyxCWVRFX0JJVAorICAgICAgICBwc2xsdyAgIHhtbTUsQllURV9CSVQKKyAgICAgICAgcG9yICAgICB4bW0xLHhtbTcgICAgICAgICAgICAgICA7IHhtbTE9T3V0MUw9KCAwICAxICAyIC4uLiAxMyAxNCAxNSkKKyAgICAgICAgcG9yICAgICB4bW0wLHhtbTUgICAgICAgICAgICAgICA7IHhtbTA9T3V0MUg9KDE2IDE3IDE4IC4uLiAyOSAzMCAzMSkKIAotCW1vdmRxYQlYTU1XT1JEIFtyZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbTEKLQltb3ZkcWEJWE1NV09SRCBbcmRpKzEqU0laRU9GX1hNTVdPUkRdLCB4bW0wCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbcmRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW0xCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbcmRpKzEqU0laRU9GX1hNTVdPUkRdLCB4bW0wCiAKLQlzdWIJcmF4LCBieXRlIFNJWkVPRl9YTU1XT1JECi0JYWRkCXJjeCwgYnl0ZSAxKlNJWkVPRl9YTU1XT1JECTsgaW5wdHIxKGFib3ZlKQotCWFkZAlyYngsIGJ5dGUgMSpTSVpFT0ZfWE1NV09SRAk7IGlucHRyMAotCWFkZAlyc2ksIGJ5dGUgMSpTSVpFT0ZfWE1NV09SRAk7IGlucHRyMShiZWxvdykKLQlhZGQJcmR4LCBieXRlIDIqU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIwCi0JYWRkCXJkaSwgYnl0ZSAyKlNJWkVPRl9YTU1XT1JECTsgb3V0cHRyMQotCWNtcAlyYXgsIGJ5dGUgU0laRU9GX1hNTVdPUkQKLQlqYQluZWFyIC5jb2x1bW5sb29wCi0JdGVzdAlyYXgscmF4Ci0Jam56CW5lYXIgLmNvbHVtbmxvb3BfbGFzdAorICAgICAgICBzdWIgICAgIHJheCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorICAgICAgICBhZGQgICAgIHJjeCwgYnl0ZSAxKlNJWkVPRl9YTU1XT1JEICAgICAgOyBpbnB0cjEoYWJvdmUpCisgICAgICAgIGFkZCAgICAgcmJ4LCBieXRlIDEqU0laRU9GX1hNTVdPUkQgICAgICA7IGlucHRyMAorICAgICAgICBhZGQgICAgIHJzaSwgYnl0ZSAxKlNJWkVPRl9YTU1XT1JEICAgICAgOyBpbnB0cjEoYmVsb3cpCisgICAgICAgIGFkZCAgICAgcmR4LCBieXRlIDIqU0laRU9GX1hNTVdPUkQgICAgICA7IG91dHB0cjAKKyAgICAgICAgYWRkICAgICByZGksIGJ5dGUgMipTSVpFT0ZfWE1NV09SRCAgICAgIDsgb3V0cHRyMQorICAgICAgICBjbXAgICAgIHJheCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorICAgICAgICBqYSAgICAgIG5lYXIgLmNvbHVtbmxvb3AKKyAgICAgICAgdGVzdCAgICByYXgscmF4CisgICAgICAgIGpueiAgICAgbmVhciAuY29sdW1ubG9vcF9sYXN0CiAKLQlwb3AJcnNpCi0JcG9wCXJkaQotCXBvcAlyY3gKLQlwb3AJcmF4CisgICAgICAgIHBvcCAgICAgcnNpCisgICAgICAgIHBvcCAgICAgcmRpCisgICAgICAgIHBvcCAgICAgcmN4CisgICAgICAgIHBvcCAgICAgcmF4CiAKLQlhZGQJcnNpLCBieXRlIDEqU0laRU9GX0pTQU1QUk9XCTsgaW5wdXRfZGF0YQotCWFkZAlyZGksIGJ5dGUgMipTSVpFT0ZfSlNBTVBST1cJOyBvdXRwdXRfZGF0YQotCXN1YglyY3gsIGJ5dGUgMgkJCTsgcm93Y3RyCi0JamcJbmVhciAucm93bG9vcAorICAgICAgICBhZGQgICAgIHJzaSwgYnl0ZSAxKlNJWkVPRl9KU0FNUFJPVyAgICAgOyBpbnB1dF9kYXRhCisgICAgICAgIGFkZCAgICAgcmRpLCBieXRlIDIqU0laRU9GX0pTQU1QUk9XICAgICA7IG91dHB1dF9kYXRhCisgICAgICAgIHN1YiAgICAgcmN4LCBieXRlIDIgICAgICAgICAgICAgICAgICAgICA7IHJvd2N0cgorICAgICAgICBqZyAgICAgIG5lYXIgLnJvd2xvb3AKIAogLnJldHVybjoKLQlwb3AJcmJ4Ci0JdW5jb2xsZWN0X2FyZ3MKLQltb3YJcnNwLHJicAkJOyByc3AgPC0gYWxpZ25lZCByYnAKLQlwb3AJcnNwCQk7IHJzcCA8LSBvcmlnaW5hbCByYnAKLQlwb3AJcmJwCi0JcmV0CisgICAgICAgIHBvcCAgICAgcmJ4CisgICAgICAgIHVuY29sbGVjdF9hcmdzCisgICAgICAgIG1vdiAgICAgcnNwLHJicCAgICAgICAgIDsgcnNwIDwtIGFsaWduZWQgcmJwCisgICAgICAgIHBvcCAgICAgcnNwICAgICAgICAgICAgIDsgcnNwIDwtIG9yaWdpbmFsIHJicAorICAgICAgICBwb3AgICAgIHJicAorICAgICAgICByZXQKIAogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogOwpAQCAtNDk3LDc3ICs0OTcsNzcgQEAKIDsgcjEyID0gSlNBTVBBUlJBWSBpbnB1dF9kYXRhCiA7IHIxMyA9IEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIKIAotCWFsaWduCTE2Ci0JZ2xvYmFsCUVYVE4oanNpbWRfaDJ2MV91cHNhbXBsZV9zc2UyKQorICAgICAgICBhbGlnbiAgIDE2CisgICAgICAgIGdsb2JhbCAgRVhUTihqc2ltZF9oMnYxX3Vwc2FtcGxlX3NzZTIpCiAKIEVYVE4oanNpbWRfaDJ2MV91cHNhbXBsZV9zc2UyKToKLQlwdXNoCXJicAotCW1vdglyYXgscnNwCi0JbW92CXJicCxyc3AKLQljb2xsZWN0X2FyZ3MKKyAgICAgICAgcHVzaCAgICByYnAKKyAgICAgICAgbW92ICAgICByYXgscnNwCisgICAgICAgIG1vdiAgICAgcmJwLHJzcAorICAgICAgICBjb2xsZWN0X2FyZ3MKIAotCW1vdglyZHgsIHIxMQotCWFkZAlyZHgsIGJ5dGUgKDIqU0laRU9GX1hNTVdPUkQpLTEKLQlhbmQJcmR4LCBieXRlIC0oMipTSVpFT0ZfWE1NV09SRCkKLQlqegluZWFyIC5yZXR1cm4KKyAgICAgICAgbW92ICAgICByZHgsIHIxMQorICAgICAgICBhZGQgICAgIHJkeCwgYnl0ZSAoMipTSVpFT0ZfWE1NV09SRCktMQorICAgICAgICBhbmQgICAgIHJkeCwgYnl0ZSAtKDIqU0laRU9GX1hNTVdPUkQpCisgICAgICAgIGp6ICAgICAgbmVhciAucmV0dXJuCiAKLQltb3YJcmN4LCByMTAJOyByb3djdHIKLQl0ZXN0CXJjeCxyY3gKLQlqeglzaG9ydCAucmV0dXJuCisgICAgICAgIG1vdiAgICAgcmN4LCByMTAgICAgICAgIDsgcm93Y3RyCisgICAgICAgIHRlc3QgICAgcmN4LHJjeAorICAgICAgICBqeiAgICAgIHNob3J0IC5yZXR1cm4KIAotCW1vdglyc2ksIHIxMiA7IGlucHV0X2RhdGEKLQltb3YJcmRpLCByMTMKLQltb3YJcmRpLCBKU0FNUEFSUkFZIFtyZGldCQkJOyBvdXRwdXRfZGF0YQorICAgICAgICBtb3YgICAgIHJzaSwgcjEyIDsgaW5wdXRfZGF0YQorICAgICAgICBtb3YgICAgIHJkaSwgcjEzCisgICAgICAgIG1vdiAgICAgcmRpLCBKU0FNUEFSUkFZIFtyZGldICAgICAgICAgICAgICAgICAgIDsgb3V0cHV0X2RhdGEKIC5yb3dsb29wOgotCXB1c2gJcmRpCi0JcHVzaAlyc2kKKyAgICAgICAgcHVzaCAgICByZGkKKyAgICAgICAgcHVzaCAgICByc2kKIAotCW1vdglyc2ksIEpTQU1QUk9XIFtyc2ldCQk7IGlucHRyCi0JbW92CXJkaSwgSlNBTVBST1cgW3JkaV0JCTsgb3V0cHRyCi0JbW92CXJheCxyZHgJCQkJOyBjb2xjdHIKKyAgICAgICAgbW92ICAgICByc2ksIEpTQU1QUk9XIFtyc2ldICAgICAgICAgICAgIDsgaW5wdHIKKyAgICAgICAgbW92ICAgICByZGksIEpTQU1QUk9XIFtyZGldICAgICAgICAgICAgIDsgb3V0cHRyCisgICAgICAgIG1vdiAgICAgcmF4LHJkeCAgICAgICAgICAgICAgICAgICAgICAgICA7IGNvbGN0cgogLmNvbHVtbmxvb3A6CiAKLQltb3ZkcWEJeG1tMCwgWE1NV09SRCBbcnNpKzAqU0laRU9GX1hNTVdPUkRdCisgICAgICAgIG1vdmRxYSAgeG1tMCwgWE1NV09SRCBbcnNpKzAqU0laRU9GX1hNTVdPUkRdCiAKLQltb3ZkcWEgICAgeG1tMSx4bW0wCi0JcHVucGNrbGJ3IHhtbTAseG1tMAotCXB1bnBja2hidyB4bW0xLHhtbTEKKyAgICAgICAgbW92ZHFhICAgIHhtbTEseG1tMAorICAgICAgICBwdW5wY2tsYncgeG1tMCx4bW0wCisgICAgICAgIHB1bnBja2hidyB4bW0xLHhtbTEKIAotCW1vdmRxYQlYTU1XT1JEIFtyZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbTAKLQltb3ZkcWEJWE1NV09SRCBbcmRpKzEqU0laRU9GX1hNTVdPUkRdLCB4bW0xCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbcmRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW0wCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbcmRpKzEqU0laRU9GX1hNTVdPUkRdLCB4bW0xCiAKLQlzdWIJcmF4LCBieXRlIDIqU0laRU9GX1hNTVdPUkQKLQlqeglzaG9ydCAubmV4dHJvdworICAgICAgICBzdWIgICAgIHJheCwgYnl0ZSAyKlNJWkVPRl9YTU1XT1JECisgICAgICAgIGp6ICAgICAgc2hvcnQgLm5leHRyb3cKIAotCW1vdmRxYQl4bW0yLCBYTU1XT1JEIFtyc2krMSpTSVpFT0ZfWE1NV09SRF0KKyAgICAgICAgbW92ZHFhICB4bW0yLCBYTU1XT1JEIFtyc2krMSpTSVpFT0ZfWE1NV09SRF0KIAotCW1vdmRxYSAgICB4bW0zLHhtbTIKLQlwdW5wY2tsYncgeG1tMix4bW0yCi0JcHVucGNraGJ3IHhtbTMseG1tMworICAgICAgICBtb3ZkcWEgICAgeG1tMyx4bW0yCisgICAgICAgIHB1bnBja2xidyB4bW0yLHhtbTIKKyAgICAgICAgcHVucGNraGJ3IHhtbTMseG1tMwogCi0JbW92ZHFhCVhNTVdPUkQgW3JkaSsyKlNJWkVPRl9YTU1XT1JEXSwgeG1tMgotCW1vdmRxYQlYTU1XT1JEIFtyZGkrMypTSVpFT0ZfWE1NV09SRF0sIHhtbTMKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFtyZGkrMipTSVpFT0ZfWE1NV09SRF0sIHhtbTIKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFtyZGkrMypTSVpFT0ZfWE1NV09SRF0sIHhtbTMKIAotCXN1YglyYXgsIGJ5dGUgMipTSVpFT0ZfWE1NV09SRAotCWp6CXNob3J0IC5uZXh0cm93CisgICAgICAgIHN1YiAgICAgcmF4LCBieXRlIDIqU0laRU9GX1hNTVdPUkQKKyAgICAgICAganogICAgICBzaG9ydCAubmV4dHJvdwogCi0JYWRkCXJzaSwgYnl0ZSAyKlNJWkVPRl9YTU1XT1JECTsgaW5wdHIKLQlhZGQJcmRpLCBieXRlIDQqU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKLQlqbXAJc2hvcnQgLmNvbHVtbmxvb3AKKyAgICAgICAgYWRkICAgICByc2ksIGJ5dGUgMipTSVpFT0ZfWE1NV09SRCAgICAgIDsgaW5wdHIKKyAgICAgICAgYWRkICAgICByZGksIGJ5dGUgNCpTSVpFT0ZfWE1NV09SRCAgICAgIDsgb3V0cHRyCisgICAgICAgIGptcCAgICAgc2hvcnQgLmNvbHVtbmxvb3AKIAogLm5leHRyb3c6Ci0JcG9wCXJzaQotCXBvcAlyZGkKKyAgICAgICAgcG9wICAgICByc2kKKyAgICAgICAgcG9wICAgICByZGkKIAotCWFkZAlyc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCTsgaW5wdXRfZGF0YQotCWFkZAlyZGksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCTsgb3V0cHV0X2RhdGEKLQlkZWMJcmN4CQkJCTsgcm93Y3RyCi0JamcJc2hvcnQgLnJvd2xvb3AKKyAgICAgICAgYWRkICAgICByc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XICAgICAgIDsgaW5wdXRfZGF0YQorICAgICAgICBhZGQgICAgIHJkaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cgICAgICAgOyBvdXRwdXRfZGF0YQorICAgICAgICBkZWMgICAgIHJjeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyByb3djdHIKKyAgICAgICAgamcgICAgICBzaG9ydCAucm93bG9vcAogCiAucmV0dXJuOgotCXVuY29sbGVjdF9hcmdzCi0JcG9wCXJicAotCXJldAorICAgICAgICB1bmNvbGxlY3RfYXJncworICAgICAgICBwb3AgICAgIHJicAorICAgICAgICByZXQKIAogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogOwpAQCAtNTg2LDg2ICs1ODYsODYgQEAKIDsgcjEyID0gSlNBTVBBUlJBWSBpbnB1dF9kYXRhCiA7IHIxMyA9IEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIKIAotCWFsaWduCTE2Ci0JZ2xvYmFsCUVYVE4oanNpbWRfaDJ2Ml91cHNhbXBsZV9zc2UyKQorICAgICAgICBhbGlnbiAgIDE2CisgICAgICAgIGdsb2JhbCAgRVhUTihqc2ltZF9oMnYyX3Vwc2FtcGxlX3NzZTIpCiAKIEVYVE4oanNpbWRfaDJ2Ml91cHNhbXBsZV9zc2UyKToKLQlwdXNoCXJicAotCW1vdglyYXgscnNwCi0JbW92CXJicCxyc3AKLQljb2xsZWN0X2FyZ3MKLQlwdXNoCXJieAorICAgICAgICBwdXNoICAgIHJicAorICAgICAgICBtb3YgICAgIHJheCxyc3AKKyAgICAgICAgbW92ICAgICByYnAscnNwCisgICAgICAgIGNvbGxlY3RfYXJncworICAgICAgICBwdXNoICAgIHJieAogCi0JbW92CXJkeCwgcjExCi0JYWRkCXJkeCwgYnl0ZSAoMipTSVpFT0ZfWE1NV09SRCktMQotCWFuZAlyZHgsIGJ5dGUgLSgyKlNJWkVPRl9YTU1XT1JEKQotCWp6CW5lYXIgLnJldHVybgorICAgICAgICBtb3YgICAgIHJkeCwgcjExCisgICAgICAgIGFkZCAgICAgcmR4LCBieXRlICgyKlNJWkVPRl9YTU1XT1JEKS0xCisgICAgICAgIGFuZCAgICAgcmR4LCBieXRlIC0oMipTSVpFT0ZfWE1NV09SRCkKKyAgICAgICAganogICAgICBuZWFyIC5yZXR1cm4KIAotCW1vdglyY3gsIHIxMAk7IHJvd2N0cgotCXRlc3QJcmN4LHJjeAotCWp6CW5lYXIgLnJldHVybgorICAgICAgICBtb3YgICAgIHJjeCwgcjEwICAgICAgICA7IHJvd2N0cgorICAgICAgICB0ZXN0ICAgIHJjeCxyY3gKKyAgICAgICAganogICAgICBuZWFyIC5yZXR1cm4KIAotCW1vdglyc2ksIHIxMgk7IGlucHV0X2RhdGEKLQltb3YJcmRpLCByMTMKLQltb3YJcmRpLCBKU0FNUEFSUkFZIFtyZGldCQkJOyBvdXRwdXRfZGF0YQorICAgICAgICBtb3YgICAgIHJzaSwgcjEyICAgICAgICA7IGlucHV0X2RhdGEKKyAgICAgICAgbW92ICAgICByZGksIHIxMworICAgICAgICBtb3YgICAgIHJkaSwgSlNBTVBBUlJBWSBbcmRpXSAgICAgICAgICAgICAgICAgICA7IG91dHB1dF9kYXRhCiAucm93bG9vcDoKLQlwdXNoCXJkaQotCXB1c2gJcnNpCisgICAgICAgIHB1c2ggICAgcmRpCisgICAgICAgIHB1c2ggICAgcnNpCiAKLQltb3YJcnNpLCBKU0FNUFJPVyBbcnNpXQkJCTsgaW5wdHIKLQltb3YJcmJ4LCBKU0FNUFJPVyBbcmRpKzAqU0laRU9GX0pTQU1QUk9XXQk7IG91dHB0cjAKLQltb3YJcmRpLCBKU0FNUFJPVyBbcmRpKzEqU0laRU9GX0pTQU1QUk9XXQk7IG91dHB0cjEKLQltb3YJcmF4LHJkeAkJCQkJOyBjb2xjdHIKKyAgICAgICAgbW92ICAgICByc2ksIEpTQU1QUk9XIFtyc2ldICAgICAgICAgICAgICAgICAgICAgOyBpbnB0cgorICAgICAgICBtb3YgICAgIHJieCwgSlNBTVBST1cgW3JkaSswKlNJWkVPRl9KU0FNUFJPV10gICA7IG91dHB0cjAKKyAgICAgICAgbW92ICAgICByZGksIEpTQU1QUk9XIFtyZGkrMSpTSVpFT0ZfSlNBTVBST1ddICAgOyBvdXRwdHIxCisgICAgICAgIG1vdiAgICAgcmF4LHJkeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgY29sY3RyCiAuY29sdW1ubG9vcDoKIAotCW1vdmRxYQl4bW0wLCBYTU1XT1JEIFtyc2krMCpTSVpFT0ZfWE1NV09SRF0KKyAgICAgICAgbW92ZHFhICB4bW0wLCBYTU1XT1JEIFtyc2krMCpTSVpFT0ZfWE1NV09SRF0KIAotCW1vdmRxYSAgICB4bW0xLHhtbTAKLQlwdW5wY2tsYncgeG1tMCx4bW0wCi0JcHVucGNraGJ3IHhtbTEseG1tMQorICAgICAgICBtb3ZkcWEgICAgeG1tMSx4bW0wCisgICAgICAgIHB1bnBja2xidyB4bW0wLHhtbTAKKyAgICAgICAgcHVucGNraGJ3IHhtbTEseG1tMQogCi0JbW92ZHFhCVhNTVdPUkQgW3JieCswKlNJWkVPRl9YTU1XT1JEXSwgeG1tMAotCW1vdmRxYQlYTU1XT1JEIFtyYngrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbTEKLQltb3ZkcWEJWE1NV09SRCBbcmRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW0wCi0JbW92ZHFhCVhNTVdPUkQgW3JkaSsxKlNJWkVPRl9YTU1XT1JEXSwgeG1tMQorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3JieCswKlNJWkVPRl9YTU1XT1JEXSwgeG1tMAorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3JieCsxKlNJWkVPRl9YTU1XT1JEXSwgeG1tMQorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3JkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tMAorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3JkaSsxKlNJWkVPRl9YTU1XT1JEXSwgeG1tMQogCi0Jc3ViCXJheCwgYnl0ZSAyKlNJWkVPRl9YTU1XT1JECi0JanoJc2hvcnQgLm5leHRyb3cKKyAgICAgICAgc3ViICAgICByYXgsIGJ5dGUgMipTSVpFT0ZfWE1NV09SRAorICAgICAgICBqeiAgICAgIHNob3J0IC5uZXh0cm93CiAKLQltb3ZkcWEJeG1tMiwgWE1NV09SRCBbcnNpKzEqU0laRU9GX1hNTVdPUkRdCisgICAgICAgIG1vdmRxYSAgeG1tMiwgWE1NV09SRCBbcnNpKzEqU0laRU9GX1hNTVdPUkRdCiAKLQltb3ZkcWEgICAgeG1tMyx4bW0yCi0JcHVucGNrbGJ3IHhtbTIseG1tMgotCXB1bnBja2hidyB4bW0zLHhtbTMKKyAgICAgICAgbW92ZHFhICAgIHhtbTMseG1tMgorICAgICAgICBwdW5wY2tsYncgeG1tMix4bW0yCisgICAgICAgIHB1bnBja2hidyB4bW0zLHhtbTMKIAotCW1vdmRxYQlYTU1XT1JEIFtyYngrMipTSVpFT0ZfWE1NV09SRF0sIHhtbTIKLQltb3ZkcWEJWE1NV09SRCBbcmJ4KzMqU0laRU9GX1hNTVdPUkRdLCB4bW0zCi0JbW92ZHFhCVhNTVdPUkQgW3JkaSsyKlNJWkVPRl9YTU1XT1JEXSwgeG1tMgotCW1vdmRxYQlYTU1XT1JEIFtyZGkrMypTSVpFT0ZfWE1NV09SRF0sIHhtbTMKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFtyYngrMipTSVpFT0ZfWE1NV09SRF0sIHhtbTIKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFtyYngrMypTSVpFT0ZfWE1NV09SRF0sIHhtbTMKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFtyZGkrMipTSVpFT0ZfWE1NV09SRF0sIHhtbTIKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFtyZGkrMypTSVpFT0ZfWE1NV09SRF0sIHhtbTMKIAotCXN1YglyYXgsIGJ5dGUgMipTSVpFT0ZfWE1NV09SRAotCWp6CXNob3J0IC5uZXh0cm93CisgICAgICAgIHN1YiAgICAgcmF4LCBieXRlIDIqU0laRU9GX1hNTVdPUkQKKyAgICAgICAganogICAgICBzaG9ydCAubmV4dHJvdwogCi0JYWRkCXJzaSwgYnl0ZSAyKlNJWkVPRl9YTU1XT1JECTsgaW5wdHIKLQlhZGQJcmJ4LCBieXRlIDQqU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIwCi0JYWRkCXJkaSwgYnl0ZSA0KlNJWkVPRl9YTU1XT1JECTsgb3V0cHRyMQotCWptcAlzaG9ydCAuY29sdW1ubG9vcAorICAgICAgICBhZGQgICAgIHJzaSwgYnl0ZSAyKlNJWkVPRl9YTU1XT1JEICAgICAgOyBpbnB0cgorICAgICAgICBhZGQgICAgIHJieCwgYnl0ZSA0KlNJWkVPRl9YTU1XT1JEICAgICAgOyBvdXRwdHIwCisgICAgICAgIGFkZCAgICAgcmRpLCBieXRlIDQqU0laRU9GX1hNTVdPUkQgICAgICA7IG91dHB0cjEKKyAgICAgICAgam1wICAgICBzaG9ydCAuY29sdW1ubG9vcAogCiAubmV4dHJvdzoKLQlwb3AJcnNpCi0JcG9wCXJkaQorICAgICAgICBwb3AgICAgIHJzaQorICAgICAgICBwb3AgICAgIHJkaQogCi0JYWRkCXJzaSwgYnl0ZSAxKlNJWkVPRl9KU0FNUFJPVwk7IGlucHV0X2RhdGEKLQlhZGQJcmRpLCBieXRlIDIqU0laRU9GX0pTQU1QUk9XCTsgb3V0cHV0X2RhdGEKLQlzdWIJcmN4LCBieXRlIDIJCQk7IHJvd2N0cgotCWpnCW5lYXIgLnJvd2xvb3AKKyAgICAgICAgYWRkICAgICByc2ksIGJ5dGUgMSpTSVpFT0ZfSlNBTVBST1cgICAgIDsgaW5wdXRfZGF0YQorICAgICAgICBhZGQgICAgIHJkaSwgYnl0ZSAyKlNJWkVPRl9KU0FNUFJPVyAgICAgOyBvdXRwdXRfZGF0YQorICAgICAgICBzdWIgICAgIHJjeCwgYnl0ZSAyICAgICAgICAgICAgICAgICAgICAgOyByb3djdHIKKyAgICAgICAgamcgICAgICBuZWFyIC5yb3dsb29wCiAKIC5yZXR1cm46Ci0JcG9wCXJieAotCXVuY29sbGVjdF9hcmdzCi0JcG9wCXJicAotCXJldAorICAgICAgICBwb3AgICAgIHJieAorICAgICAgICB1bmNvbGxlY3RfYXJncworICAgICAgICBwb3AgICAgIHJicAorICAgICAgICByZXQKIAogOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKIDsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KLQlhbGlnbgkxNgorICAgICAgICBhbGlnbiAgIDE2CmRpZmYgLS1naXQgYS9zaW1kL2pkc2Ftc3MyLmFzbSBiL3NpbWQvamRzYW1zczIuYXNtCmluZGV4IGI1Yzg2M2IuLjIyNTkwMjYgMTAwNjQ0Ci0tLSBhL3NpbWQvamRzYW1zczIuYXNtCisrKyBiL3NpbWQvamRzYW1zczIuYXNtCkBAIC0xOSwyNCArMTksMjQgQEAKICVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCiAKIDsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlTRUNUSU9OCVNFR19DT05TVAorICAgICAgICBTRUNUSU9OIFNFR19DT05TVAogCi0JYWxpZ256CTE2Ci0JZ2xvYmFsCUVYVE4oamNvbnN0X2ZhbmN5X3Vwc2FtcGxlX3NzZTIpCisgICAgICAgIGFsaWdueiAgMTYKKyAgICAgICAgZ2xvYmFsICBFWFROKGpjb25zdF9mYW5jeV91cHNhbXBsZV9zc2UyKQogCiBFWFROKGpjb25zdF9mYW5jeV91cHNhbXBsZV9zc2UyKToKIAotUFdfT05FCQl0aW1lcyA4IGR3ICAxCi1QV19UV08JCXRpbWVzIDggZHcgIDIKLVBXX1RIUkVFCXRpbWVzIDggZHcgIDMKLVBXX1NFVkVOCXRpbWVzIDggZHcgIDcKLVBXX0VJR0hUCXRpbWVzIDggZHcgIDgKK1BXX09ORSAgICAgICAgICB0aW1lcyA4IGR3ICAxCitQV19UV08gICAgICAgICAgdGltZXMgOCBkdyAgMgorUFdfVEhSRUUgICAgICAgIHRpbWVzIDggZHcgIDMKK1BXX1NFVkVOICAgICAgICB0aW1lcyA4IGR3ICA3CitQV19FSUdIVCAgICAgICAgdGltZXMgOCBkdyAgOAogCi0JYWxpZ256CTE2CisgICAgICAgIGFsaWdueiAgMTYKIAogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCVNFQ1RJT04JU0VHX1RFWFQKLQlCSVRTCTMyCisgICAgICAgIFNFQ1RJT04gU0VHX1RFWFQKKyAgICAgICAgQklUUyAgICAzMgogOwogOyBGYW5jeSBwcm9jZXNzaW5nIGZvciB0aGUgY29tbW9uIGNhc2Ugb2YgMjoxIGhvcml6b250YWwgYW5kIDE6MSB2ZXJ0aWNhbC4KIDsKQEAgLTUyLDE0NCArNTIsMTQ0IEBACiA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSAqIG91dHB1dF9kYXRhX3B0cik7CiA7CiAKLSVkZWZpbmUgbWF4X3Zfc2FtcChiKQkJKGIpKzgJCQk7IGludCBtYXhfdl9zYW1wX2ZhY3RvcgotJWRlZmluZSBkb3duc2FtcF93aWR0aChiKQkoYikrMTIJOyBKRElNRU5TSU9OIGRvd25zYW1wbGVkX3dpZHRoCi0lZGVmaW5lIGlucHV0X2RhdGEoYikJCShiKSsxNgkJOyBKU0FNUEFSUkFZIGlucHV0X2RhdGEKLSVkZWZpbmUgb3V0cHV0X2RhdGFfcHRyKGIpCShiKSsyMAkJOyBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyCislZGVmaW5lIG1heF92X3NhbXAoYikgICAgICAgICAgIChiKSs4ICAgICAgICAgICA7IGludCBtYXhfdl9zYW1wX2ZhY3RvcgorJWRlZmluZSBkb3duc2FtcF93aWR0aChiKSAgICAgICAoYikrMTIgICAgICAgICAgOyBKRElNRU5TSU9OIGRvd25zYW1wbGVkX3dpZHRoCislZGVmaW5lIGlucHV0X2RhdGEoYikgICAgICAgICAgIChiKSsxNiAgICAgICAgICA7IEpTQU1QQVJSQVkgaW5wdXRfZGF0YQorJWRlZmluZSBvdXRwdXRfZGF0YV9wdHIoYikgICAgICAoYikrMjAgICAgICAgICAgOyBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyCiAKLQlhbGlnbgkxNgotCWdsb2JhbAlFWFROKGpzaW1kX2gydjFfZmFuY3lfdXBzYW1wbGVfc3NlMikKKyAgICAgICAgYWxpZ24gICAxNgorICAgICAgICBnbG9iYWwgIEVYVE4oanNpbWRfaDJ2MV9mYW5jeV91cHNhbXBsZV9zc2UyKQogCiBFWFROKGpzaW1kX2gydjFfZmFuY3lfdXBzYW1wbGVfc3NlMik6Ci0JcHVzaAllYnAKLQltb3YJZWJwLGVzcAotCXB1c2hwaWMJZWJ4Ci07CXB1c2gJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLQlwdXNoCWVzaQotCXB1c2gJZWRpCisgICAgICAgIHB1c2ggICAgZWJwCisgICAgICAgIG1vdiAgICAgZWJwLGVzcAorICAgICAgICBwdXNocGljIGVieAorOyAgICAgICBwdXNoICAgIGVjeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgICAgICBwdXNoICAgIGVkeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgICAgICBwdXNoICAgIGVzaQorICAgICAgICBwdXNoICAgIGVkaQogCi0JZ2V0X0dPVAllYngJCTsgZ2V0IEdPVCBhZGRyZXNzCisgICAgICAgIGdldF9HT1QgZWJ4ICAgICAgICAgICAgIDsgZ2V0IEdPVCBhZGRyZXNzCiAKLQltb3YJZWF4LCBKRElNRU5TSU9OIFtkb3duc2FtcF93aWR0aChlYnApXSAgOyBjb2xjdHIKLQl0ZXN0CWVheCxlYXgKLQlqegluZWFyIC5yZXR1cm4KKyAgICAgICAgbW92ICAgICBlYXgsIEpESU1FTlNJT04gW2Rvd25zYW1wX3dpZHRoKGVicCldICA7IGNvbGN0cgorICAgICAgICB0ZXN0ICAgIGVheCxlYXgKKyAgICAgICAganogICAgICBuZWFyIC5yZXR1cm4KIAotCW1vdgllY3gsIElOVCBbbWF4X3Zfc2FtcChlYnApXQk7IHJvd2N0cgotCXRlc3QJZWN4LGVjeAotCWp6CW5lYXIgLnJldHVybgorICAgICAgICBtb3YgICAgIGVjeCwgSU5UIFttYXhfdl9zYW1wKGVicCldICAgICAgOyByb3djdHIKKyAgICAgICAgdGVzdCAgICBlY3gsZWN4CisgICAgICAgIGp6ICAgICAgbmVhciAucmV0dXJuCiAKLQltb3YJZXNpLCBKU0FNUEFSUkFZIFtpbnB1dF9kYXRhKGVicCldCTsgaW5wdXRfZGF0YQotCW1vdgllZGksIFBPSU5URVIgW291dHB1dF9kYXRhX3B0cihlYnApXQotCW1vdgllZGksIEpTQU1QQVJSQVkgW2VkaV0JCQk7IG91dHB1dF9kYXRhCi0JYWxpZ254CTE2LDcKKyAgICAgICAgbW92ICAgICBlc2ksIEpTQU1QQVJSQVkgW2lucHV0X2RhdGEoZWJwKV0gICAgICAgOyBpbnB1dF9kYXRhCisgICAgICAgIG1vdiAgICAgZWRpLCBQT0lOVEVSIFtvdXRwdXRfZGF0YV9wdHIoZWJwKV0KKyAgICAgICAgbW92ICAgICBlZGksIEpTQU1QQVJSQVkgW2VkaV0gICAgICAgICAgICAgICAgICAgOyBvdXRwdXRfZGF0YQorICAgICAgICBhbGlnbnggIDE2LDcKIC5yb3dsb29wOgotCXB1c2gJZWF4CQkJOyBjb2xjdHIKLQlwdXNoCWVkaQotCXB1c2gJZXNpCisgICAgICAgIHB1c2ggICAgZWF4ICAgICAgICAgICAgICAgICAgICAgOyBjb2xjdHIKKyAgICAgICAgcHVzaCAgICBlZGkKKyAgICAgICAgcHVzaCAgICBlc2kKIAotCW1vdgllc2ksIEpTQU1QUk9XIFtlc2ldCTsgaW5wdHIKLQltb3YJZWRpLCBKU0FNUFJPVyBbZWRpXQk7IG91dHB0cgorICAgICAgICBtb3YgICAgIGVzaSwgSlNBTVBST1cgW2VzaV0gICAgIDsgaW5wdHIKKyAgICAgICAgbW92ICAgICBlZGksIEpTQU1QUk9XIFtlZGldICAgICA7IG91dHB0cgogCi0JdGVzdAllYXgsIFNJWkVPRl9YTU1XT1JELTEKLQlqeglzaG9ydCAuc2tpcAotCW1vdglkbCwgSlNBTVBMRSBbZXNpKyhlYXgtMSkqU0laRU9GX0pTQU1QTEVdCi0JbW92CUpTQU1QTEUgW2VzaStlYXgqU0laRU9GX0pTQU1QTEVdLCBkbAk7IGluc2VydCBhIGR1bW15IHNhbXBsZQorICAgICAgICB0ZXN0ICAgIGVheCwgU0laRU9GX1hNTVdPUkQtMQorICAgICAgICBqeiAgICAgIHNob3J0IC5za2lwCisgICAgICAgIG1vdiAgICAgZGwsIEpTQU1QTEUgW2VzaSsoZWF4LTEpKlNJWkVPRl9KU0FNUExFXQorICAgICAgICBtb3YgICAgIEpTQU1QTEUgW2VzaStlYXgqU0laRU9GX0pTQU1QTEVdLCBkbCAgICA7IGluc2VydCBhIGR1bW15IHNhbXBsZQogLnNraXA6Ci0JcHhvcgl4bW0wLHhtbTAJCTsgeG1tMD0oYWxsIDAncykKLQlwY21wZXFiCXhtbTcseG1tNwotCXBzcmxkcQl4bW03LChTSVpFT0ZfWE1NV09SRC0xKQotCXBhbmQJeG1tNywgWE1NV09SRCBbZXNpKzAqU0laRU9GX1hNTVdPUkRdCisgICAgICAgIHB4b3IgICAgeG1tMCx4bW0wICAgICAgICAgICAgICAgOyB4bW0wPShhbGwgMCdzKQorICAgICAgICBwY21wZXFiIHhtbTcseG1tNworICAgICAgICBwc3JsZHEgIHhtbTcsKFNJWkVPRl9YTU1XT1JELTEpCisgICAgICAgIHBhbmQgICAgeG1tNywgWE1NV09SRCBbZXNpKzAqU0laRU9GX1hNTVdPUkRdCiAKLQlhZGQJZWF4LCBieXRlIFNJWkVPRl9YTU1XT1JELTEKLQlhbmQJZWF4LCBieXRlIC1TSVpFT0ZfWE1NV09SRAotCWNtcAllYXgsIGJ5dGUgU0laRU9GX1hNTVdPUkQKLQlqYQlzaG9ydCAuY29sdW1ubG9vcAotCWFsaWdueAkxNiw3CisgICAgICAgIGFkZCAgICAgZWF4LCBieXRlIFNJWkVPRl9YTU1XT1JELTEKKyAgICAgICAgYW5kICAgICBlYXgsIGJ5dGUgLVNJWkVPRl9YTU1XT1JECisgICAgICAgIGNtcCAgICAgZWF4LCBieXRlIFNJWkVPRl9YTU1XT1JECisgICAgICAgIGphICAgICAgc2hvcnQgLmNvbHVtbmxvb3AKKyAgICAgICAgYWxpZ254ICAxNiw3CiAKIC5jb2x1bW5sb29wX2xhc3Q6Ci0JcGNtcGVxYgl4bW02LHhtbTYKLQlwc2xsZHEJeG1tNiwoU0laRU9GX1hNTVdPUkQtMSkKLQlwYW5kCXhtbTYsIFhNTVdPUkQgW2VzaSswKlNJWkVPRl9YTU1XT1JEXQotCWptcAlzaG9ydCAudXBzYW1wbGUKLQlhbGlnbngJMTYsNworICAgICAgICBwY21wZXFiIHhtbTYseG1tNgorICAgICAgICBwc2xsZHEgIHhtbTYsKFNJWkVPRl9YTU1XT1JELTEpCisgICAgICAgIHBhbmQgICAgeG1tNiwgWE1NV09SRCBbZXNpKzAqU0laRU9GX1hNTVdPUkRdCisgICAgICAgIGptcCAgICAgc2hvcnQgLnVwc2FtcGxlCisgICAgICAgIGFsaWdueCAgMTYsNwogCiAuY29sdW1ubG9vcDoKLQltb3ZkcWEJeG1tNiwgWE1NV09SRCBbZXNpKzEqU0laRU9GX1hNTVdPUkRdCi0JcHNsbGRxCXhtbTYsKFNJWkVPRl9YTU1XT1JELTEpCisgICAgICAgIG1vdmRxYSAgeG1tNiwgWE1NV09SRCBbZXNpKzEqU0laRU9GX1hNTVdPUkRdCisgICAgICAgIHBzbGxkcSAgeG1tNiwoU0laRU9GX1hNTVdPUkQtMSkKIAogLnVwc2FtcGxlOgotCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFtlc2krMCpTSVpFT0ZfWE1NV09SRF0KLQltb3ZkcWEJeG1tMix4bW0xCi0JbW92ZHFhCXhtbTMseG1tMQkJOyB4bW0xPSggMCAgMSAgMiAuLi4gMTMgMTQgMTUpCi0JcHNsbGRxCXhtbTIsMQkJCTsgeG1tMj0oLS0gIDAgIDEgLi4uIDEyIDEzIDE0KQotCXBzcmxkcQl4bW0zLDEJCQk7IHhtbTM9KCAxICAyICAzIC4uLiAxNCAxNSAtLSkKKyAgICAgICAgbW92ZHFhICB4bW0xLCBYTU1XT1JEIFtlc2krMCpTSVpFT0ZfWE1NV09SRF0KKyAgICAgICAgbW92ZHFhICB4bW0yLHhtbTEKKyAgICAgICAgbW92ZHFhICB4bW0zLHhtbTEgICAgICAgICAgICAgICA7IHhtbTE9KCAwICAxICAyIC4uLiAxMyAxNCAxNSkKKyAgICAgICAgcHNsbGRxICB4bW0yLDEgICAgICAgICAgICAgICAgICA7IHhtbTI9KC0tICAwICAxIC4uLiAxMiAxMyAxNCkKKyAgICAgICAgcHNybGRxICB4bW0zLDEgICAgICAgICAgICAgICAgICA7IHhtbTM9KCAxICAyICAzIC4uLiAxNCAxNSAtLSkKIAotCXBvcgl4bW0yLHhtbTcJCTsgeG1tMj0oLTEgIDAgIDEgLi4uIDEyIDEzIDE0KQotCXBvcgl4bW0zLHhtbTYJCTsgeG1tMz0oIDEgIDIgIDMgLi4uIDE0IDE1IDE2KQorICAgICAgICBwb3IgICAgIHhtbTIseG1tNyAgICAgICAgICAgICAgIDsgeG1tMj0oLTEgIDAgIDEgLi4uIDEyIDEzIDE0KQorICAgICAgICBwb3IgICAgIHhtbTMseG1tNiAgICAgICAgICAgICAgIDsgeG1tMz0oIDEgIDIgIDMgLi4uIDE0IDE1IDE2KQogCi0JbW92ZHFhCXhtbTcseG1tMQotCXBzcmxkcQl4bW03LChTSVpFT0ZfWE1NV09SRC0xKQk7IHhtbTc9KDE1IC0tIC0tIC4uLiAtLSAtLSAtLSkKKyAgICAgICAgbW92ZHFhICB4bW03LHhtbTEKKyAgICAgICAgcHNybGRxICB4bW03LChTSVpFT0ZfWE1NV09SRC0xKSA7IHhtbTc9KDE1IC0tIC0tIC4uLiAtLSAtLSAtLSkKIAotCW1vdmRxYSAgICB4bW00LHhtbTEKLQlwdW5wY2tsYncgeG1tMSx4bW0wCQk7IHhtbTE9KCAwICAxICAyICAzICA0ICA1ICA2ICA3KQotCXB1bnBja2hidyB4bW00LHhtbTAJCTsgeG1tND0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCi0JbW92ZHFhICAgIHhtbTUseG1tMgotCXB1bnBja2xidyB4bW0yLHhtbTAJCTsgeG1tMj0oLTEgIDAgIDEgIDIgIDMgIDQgIDUgIDYpCi0JcHVucGNraGJ3IHhtbTUseG1tMAkJOyB4bW01PSggNyAgOCAgOSAxMCAxMSAxMiAxMyAxNCkKLQltb3ZkcWEgICAgeG1tNix4bW0zCi0JcHVucGNrbGJ3IHhtbTMseG1tMAkJOyB4bW0zPSggMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCkKLQlwdW5wY2toYncgeG1tNix4bW0wCQk7IHhtbTY9KCA5IDEwIDExIDEyIDEzIDE0IDE1IDE2KQorICAgICAgICBtb3ZkcWEgICAgeG1tNCx4bW0xCisgICAgICAgIHB1bnBja2xidyB4bW0xLHhtbTAgICAgICAgICAgICAgOyB4bW0xPSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNykKKyAgICAgICAgcHVucGNraGJ3IHhtbTQseG1tMCAgICAgICAgICAgICA7IHhtbTQ9KCA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQorICAgICAgICBtb3ZkcWEgICAgeG1tNSx4bW0yCisgICAgICAgIHB1bnBja2xidyB4bW0yLHhtbTAgICAgICAgICAgICAgOyB4bW0yPSgtMSAgMCAgMSAgMiAgMyAgNCAgNSAgNikKKyAgICAgICAgcHVucGNraGJ3IHhtbTUseG1tMCAgICAgICAgICAgICA7IHhtbTU9KCA3ICA4ICA5IDEwIDExIDEyIDEzIDE0KQorICAgICAgICBtb3ZkcWEgICAgeG1tNix4bW0zCisgICAgICAgIHB1bnBja2xidyB4bW0zLHhtbTAgICAgICAgICAgICAgOyB4bW0zPSggMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCkKKyAgICAgICAgcHVucGNraGJ3IHhtbTYseG1tMCAgICAgICAgICAgICA7IHhtbTY9KCA5IDEwIDExIDEyIDEzIDE0IDE1IDE2KQogCi0JcG11bGx3CXhtbTEsW0dPVE9GRihlYngsUFdfVEhSRUUpXQotCXBtdWxsdwl4bW00LFtHT1RPRkYoZWJ4LFBXX1RIUkVFKV0KLQlwYWRkdwl4bW0yLFtHT1RPRkYoZWJ4LFBXX09ORSldCi0JcGFkZHcJeG1tNSxbR09UT0ZGKGVieCxQV19PTkUpXQotCXBhZGR3CXhtbTMsW0dPVE9GRihlYngsUFdfVFdPKV0KLQlwYWRkdwl4bW02LFtHT1RPRkYoZWJ4LFBXX1RXTyldCisgICAgICAgIHBtdWxsdyAgeG1tMSxbR09UT0ZGKGVieCxQV19USFJFRSldCisgICAgICAgIHBtdWxsdyAgeG1tNCxbR09UT0ZGKGVieCxQV19USFJFRSldCisgICAgICAgIHBhZGR3ICAgeG1tMixbR09UT0ZGKGVieCxQV19PTkUpXQorICAgICAgICBwYWRkdyAgIHhtbTUsW0dPVE9GRihlYngsUFdfT05FKV0KKyAgICAgICAgcGFkZHcgICB4bW0zLFtHT1RPRkYoZWJ4LFBXX1RXTyldCisgICAgICAgIHBhZGR3ICAgeG1tNixbR09UT0ZGKGVieCxQV19UV08pXQogCi0JcGFkZHcJeG1tMix4bW0xCi0JcGFkZHcJeG1tNSx4bW00Ci0JcHNybHcJeG1tMiwyCQkJOyB4bW0yPU91dExFPSggMCAgMiAgNCAgNiAgOCAxMCAxMiAxNCkKLQlwc3Jsdwl4bW01LDIJCQk7IHhtbTU9T3V0SEU9KDE2IDE4IDIwIDIyIDI0IDI2IDI4IDMwKQotCXBhZGR3CXhtbTMseG1tMQotCXBhZGR3CXhtbTYseG1tNAotCXBzcmx3CXhtbTMsMgkJCTsgeG1tMz1PdXRMTz0oIDEgIDMgIDUgIDcgIDkgMTEgMTMgMTUpCi0JcHNybHcJeG1tNiwyCQkJOyB4bW02PU91dEhPPSgxNyAxOSAyMSAyMyAyNSAyNyAyOSAzMSkKKyAgICAgICAgcGFkZHcgICB4bW0yLHhtbTEKKyAgICAgICAgcGFkZHcgICB4bW01LHhtbTQKKyAgICAgICAgcHNybHcgICB4bW0yLDIgICAgICAgICAgICAgICAgICA7IHhtbTI9T3V0TEU9KCAwICAyICA0ICA2ICA4IDEwIDEyIDE0KQorICAgICAgICBwc3JsdyAgIHhtbTUsMiAgICAgICAgICAgICAgICAgIDsgeG1tNT1PdXRIRT0oMTYgMTggMjAgMjIgMjQgMjYgMjggMzApCisgICAgICAgIHBhZGR3ICAgeG1tMyx4bW0xCisgICAgICAgIHBhZGR3ICAgeG1tNix4bW00CisgICAgICAgIHBzcmx3ICAgeG1tMywyICAgICAgICAgICAgICAgICAgOyB4bW0zPU91dExPPSggMSAgMyAgNSAgNyAgOSAxMSAxMyAxNSkKKyAgICAgICAgcHNybHcgICB4bW02LDIgICAgICAgICAgICAgICAgICA7IHhtbTY9T3V0SE89KDE3IDE5IDIxIDIzIDI1IDI3IDI5IDMxKQogCi0JcHNsbHcJeG1tMyxCWVRFX0JJVAotCXBzbGx3CXhtbTYsQllURV9CSVQKLQlwb3IJeG1tMix4bW0zCQk7IHhtbTI9T3V0TD0oIDAgIDEgIDIgLi4uIDEzIDE0IDE1KQotCXBvcgl4bW01LHhtbTYJCTsgeG1tNT1PdXRIPSgxNiAxNyAxOCAuLi4gMjkgMzAgMzEpCisgICAgICAgIHBzbGx3ICAgeG1tMyxCWVRFX0JJVAorICAgICAgICBwc2xsdyAgIHhtbTYsQllURV9CSVQKKyAgICAgICAgcG9yICAgICB4bW0yLHhtbTMgICAgICAgICAgICAgICA7IHhtbTI9T3V0TD0oIDAgIDEgIDIgLi4uIDEzIDE0IDE1KQorICAgICAgICBwb3IgICAgIHhtbTUseG1tNiAgICAgICAgICAgICAgIDsgeG1tNT1PdXRIPSgxNiAxNyAxOCAuLi4gMjkgMzAgMzEpCiAKLQltb3ZkcWEJWE1NV09SRCBbZWRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW0yCi0JbW92ZHFhCVhNTVdPUkQgW2VkaSsxKlNJWkVPRl9YTU1XT1JEXSwgeG1tNQorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW2VkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tMgorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW2VkaSsxKlNJWkVPRl9YTU1XT1JEXSwgeG1tNQogCi0Jc3ViCWVheCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAotCWFkZAllc2ksIGJ5dGUgMSpTSVpFT0ZfWE1NV09SRAk7IGlucHRyCi0JYWRkCWVkaSwgYnl0ZSAyKlNJWkVPRl9YTU1XT1JECTsgb3V0cHRyCi0JY21wCWVheCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAotCWphCW5lYXIgLmNvbHVtbmxvb3AKLQl0ZXN0CWVheCxlYXgKLQlqbnoJbmVhciAuY29sdW1ubG9vcF9sYXN0CisgICAgICAgIHN1YiAgICAgZWF4LCBieXRlIFNJWkVPRl9YTU1XT1JECisgICAgICAgIGFkZCAgICAgZXNpLCBieXRlIDEqU0laRU9GX1hNTVdPUkQgICAgICA7IGlucHRyCisgICAgICAgIGFkZCAgICAgZWRpLCBieXRlIDIqU0laRU9GX1hNTVdPUkQgICAgICA7IG91dHB0cgorICAgICAgICBjbXAgICAgIGVheCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorICAgICAgICBqYSAgICAgIG5lYXIgLmNvbHVtbmxvb3AKKyAgICAgICAgdGVzdCAgICBlYXgsZWF4CisgICAgICAgIGpueiAgICAgbmVhciAuY29sdW1ubG9vcF9sYXN0CiAKLQlwb3AJZXNpCi0JcG9wCWVkaQotCXBvcAllYXgKKyAgICAgICAgcG9wICAgICBlc2kKKyAgICAgICAgcG9wICAgICBlZGkKKyAgICAgICAgcG9wICAgICBlYXgKIAotCWFkZAllc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCTsgaW5wdXRfZGF0YQotCWFkZAllZGksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCTsgb3V0cHV0X2RhdGEKLQlkZWMJZWN4CQkJCTsgcm93Y3RyCi0JamcJbmVhciAucm93bG9vcAorICAgICAgICBhZGQgICAgIGVzaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cgICAgICAgOyBpbnB1dF9kYXRhCisgICAgICAgIGFkZCAgICAgZWRpLCBieXRlIFNJWkVPRl9KU0FNUFJPVyAgICAgICA7IG91dHB1dF9kYXRhCisgICAgICAgIGRlYyAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IHJvd2N0cgorICAgICAgICBqZyAgICAgIG5lYXIgLnJvd2xvb3AKIAogLnJldHVybjoKLQlwb3AJZWRpCi0JcG9wCWVzaQotOwlwb3AJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotOwlwb3AJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotCXBvcHBpYwllYngKLQlwb3AJZWJwCi0JcmV0CisgICAgICAgIHBvcCAgICAgZWRpCisgICAgICAgIHBvcCAgICAgZXNpCis7ICAgICAgIHBvcCAgICAgZWR4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgICAgIHBvcCAgICAgZWN4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgICAgIHBvcHBpYyAgZWJ4CisgICAgICAgIHBvcCAgICAgZWJwCisgICAgICAgIHJldAogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiA7CkBAIC0yMDMsMzIyICsyMDMsMzIyIEBACiA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSAqIG91dHB1dF9kYXRhX3B0cik7CiA7CiAKLSVkZWZpbmUgbWF4X3Zfc2FtcChiKQkJKGIpKzgJCQk7IGludCBtYXhfdl9zYW1wX2ZhY3RvcgotJWRlZmluZSBkb3duc2FtcF93aWR0aChiKQkoYikrMTIJOyBKRElNRU5TSU9OIGRvd25zYW1wbGVkX3dpZHRoCi0lZGVmaW5lIGlucHV0X2RhdGEoYikJCShiKSsxNgkJOyBKU0FNUEFSUkFZIGlucHV0X2RhdGEKLSVkZWZpbmUgb3V0cHV0X2RhdGFfcHRyKGIpCShiKSsyMAkJOyBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyCislZGVmaW5lIG1heF92X3NhbXAoYikgICAgICAgICAgIChiKSs4ICAgICAgICAgICA7IGludCBtYXhfdl9zYW1wX2ZhY3RvcgorJWRlZmluZSBkb3duc2FtcF93aWR0aChiKSAgICAgICAoYikrMTIgICAgICAgICAgOyBKRElNRU5TSU9OIGRvd25zYW1wbGVkX3dpZHRoCislZGVmaW5lIGlucHV0X2RhdGEoYikgICAgICAgICAgIChiKSsxNiAgICAgICAgICA7IEpTQU1QQVJSQVkgaW5wdXRfZGF0YQorJWRlZmluZSBvdXRwdXRfZGF0YV9wdHIoYikgICAgICAoYikrMjAgICAgICAgICAgOyBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyCiAKLSVkZWZpbmUgb3JpZ2luYWxfZWJwCWVicCswCi0lZGVmaW5lIHdrKGkpCQllYnAtKFdLX05VTS0oaSkpKlNJWkVPRl9YTU1XT1JECTsgeG1td29yZCB3a1tXS19OVU1dCi0lZGVmaW5lIFdLX05VTQkJNAotJWRlZmluZSBnb3RwdHIJCXdrKDApLVNJWkVPRl9QT0lOVEVSCTsgdm9pZCAqIGdvdHB0cgorJWRlZmluZSBvcmlnaW5hbF9lYnAgICAgZWJwKzAKKyVkZWZpbmUgd2soaSkgICAgICAgICAgIGVicC0oV0tfTlVNLShpKSkqU0laRU9GX1hNTVdPUkQgOyB4bW13b3JkIHdrW1dLX05VTV0KKyVkZWZpbmUgV0tfTlVNICAgICAgICAgIDQKKyVkZWZpbmUgZ290cHRyICAgICAgICAgIHdrKDApLVNJWkVPRl9QT0lOVEVSICAgIDsgdm9pZCAqIGdvdHB0cgogCi0JYWxpZ24JMTYKLQlnbG9iYWwJRVhUTihqc2ltZF9oMnYyX2ZhbmN5X3Vwc2FtcGxlX3NzZTIpCisgICAgICAgIGFsaWduICAgMTYKKyAgICAgICAgZ2xvYmFsICBFWFROKGpzaW1kX2gydjJfZmFuY3lfdXBzYW1wbGVfc3NlMikKIAogRVhUTihqc2ltZF9oMnYyX2ZhbmN5X3Vwc2FtcGxlX3NzZTIpOgotCXB1c2gJZWJwCi0JbW92CWVheCxlc3AJCQkJOyBlYXggPSBvcmlnaW5hbCBlYnAKLQlzdWIJZXNwLCBieXRlIDQKLQlhbmQJZXNwLCBieXRlICgtU0laRU9GX1hNTVdPUkQpCTsgYWxpZ24gdG8gMTI4IGJpdHMKLQltb3YJW2VzcF0sZWF4Ci0JbW92CWVicCxlc3AJCQkJOyBlYnAgPSBhbGlnbmVkIGVicAotCWxlYQllc3AsIFt3aygwKV0KLQlwdXNocGljCWVheAkJOyBtYWtlIGEgcm9vbSBmb3IgR09UIGFkZHJlc3MKLQlwdXNoCWVieAotOwlwdXNoCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLTsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi0JcHVzaAllc2kKLQlwdXNoCWVkaQorICAgICAgICBwdXNoICAgIGVicAorICAgICAgICBtb3YgICAgIGVheCxlc3AgICAgICAgICAgICAgICAgICAgICAgICAgOyBlYXggPSBvcmlnaW5hbCBlYnAKKyAgICAgICAgc3ViICAgICBlc3AsIGJ5dGUgNAorICAgICAgICBhbmQgICAgIGVzcCwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKSAgICAgOyBhbGlnbiB0byAxMjggYml0cworICAgICAgICBtb3YgICAgIFtlc3BdLGVheAorICAgICAgICBtb3YgICAgIGVicCxlc3AgICAgICAgICAgICAgICAgICAgICAgICAgOyBlYnAgPSBhbGlnbmVkIGVicAorICAgICAgICBsZWEgICAgIGVzcCwgW3drKDApXQorICAgICAgICBwdXNocGljIGVheCAgICAgICAgICAgICA7IG1ha2UgYSByb29tIGZvciBHT1QgYWRkcmVzcworICAgICAgICBwdXNoICAgIGVieAorOyAgICAgICBwdXNoICAgIGVjeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgICAgICBwdXNoICAgIGVkeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgICAgICBwdXNoICAgIGVzaQorICAgICAgICBwdXNoICAgIGVkaQogCi0JZ2V0X0dPVAllYngJCQk7IGdldCBHT1QgYWRkcmVzcwotCW1vdnBpYwlQT0lOVEVSIFtnb3RwdHJdLCBlYngJOyBzYXZlIEdPVCBhZGRyZXNzCisgICAgICAgIGdldF9HT1QgZWJ4ICAgICAgICAgICAgICAgICAgICAgOyBnZXQgR09UIGFkZHJlc3MKKyAgICAgICAgbW92cGljICBQT0lOVEVSIFtnb3RwdHJdLCBlYnggICA7IHNhdmUgR09UIGFkZHJlc3MKIAotCW1vdgllZHgsZWF4CQkJCTsgZWR4ID0gb3JpZ2luYWwgZWJwCi0JbW92CWVheCwgSkRJTUVOU0lPTiBbZG93bnNhbXBfd2lkdGgoZWR4KV0gIDsgY29sY3RyCi0JdGVzdAllYXgsZWF4Ci0JanoJbmVhciAucmV0dXJuCisgICAgICAgIG1vdiAgICAgZWR4LGVheCAgICAgICAgICAgICAgICAgICAgICAgICA7IGVkeCA9IG9yaWdpbmFsIGVicAorICAgICAgICBtb3YgICAgIGVheCwgSkRJTUVOU0lPTiBbZG93bnNhbXBfd2lkdGgoZWR4KV0gIDsgY29sY3RyCisgICAgICAgIHRlc3QgICAgZWF4LGVheAorICAgICAgICBqeiAgICAgIG5lYXIgLnJldHVybgogCi0JbW92CWVjeCwgSU5UIFttYXhfdl9zYW1wKGVkeCldCTsgcm93Y3RyCi0JdGVzdAllY3gsZWN4Ci0JanoJbmVhciAucmV0dXJuCisgICAgICAgIG1vdiAgICAgZWN4LCBJTlQgW21heF92X3NhbXAoZWR4KV0gICAgICA7IHJvd2N0cgorICAgICAgICB0ZXN0ICAgIGVjeCxlY3gKKyAgICAgICAganogICAgICBuZWFyIC5yZXR1cm4KIAotCW1vdgllc2ksIEpTQU1QQVJSQVkgW2lucHV0X2RhdGEoZWR4KV0JOyBpbnB1dF9kYXRhCi0JbW92CWVkaSwgUE9JTlRFUiBbb3V0cHV0X2RhdGFfcHRyKGVkeCldCi0JbW92CWVkaSwgSlNBTVBBUlJBWSBbZWRpXQkJCTsgb3V0cHV0X2RhdGEKLQlhbGlnbngJMTYsNworICAgICAgICBtb3YgICAgIGVzaSwgSlNBTVBBUlJBWSBbaW5wdXRfZGF0YShlZHgpXSAgICAgICA7IGlucHV0X2RhdGEKKyAgICAgICAgbW92ICAgICBlZGksIFBPSU5URVIgW291dHB1dF9kYXRhX3B0cihlZHgpXQorICAgICAgICBtb3YgICAgIGVkaSwgSlNBTVBBUlJBWSBbZWRpXSAgICAgICAgICAgICAgICAgICA7IG91dHB1dF9kYXRhCisgICAgICAgIGFsaWdueCAgMTYsNwogLnJvd2xvb3A6Ci0JcHVzaAllYXgJCQkJCTsgY29sY3RyCi0JcHVzaAllY3gKLQlwdXNoCWVkaQotCXB1c2gJZXNpCisgICAgICAgIHB1c2ggICAgZWF4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgY29sY3RyCisgICAgICAgIHB1c2ggICAgZWN4CisgICAgICAgIHB1c2ggICAgZWRpCisgICAgICAgIHB1c2ggICAgZXNpCiAKLQltb3YJZWN4LCBKU0FNUFJPVyBbZXNpLTEqU0laRU9GX0pTQU1QUk9XXQk7IGlucHRyMShhYm92ZSkKLQltb3YJZWJ4LCBKU0FNUFJPVyBbZXNpKzAqU0laRU9GX0pTQU1QUk9XXQk7IGlucHRyMAotCW1vdgllc2ksIEpTQU1QUk9XIFtlc2krMSpTSVpFT0ZfSlNBTVBST1ddCTsgaW5wdHIxKGJlbG93KQotCW1vdgllZHgsIEpTQU1QUk9XIFtlZGkrMCpTSVpFT0ZfSlNBTVBST1ddCTsgb3V0cHRyMAotCW1vdgllZGksIEpTQU1QUk9XIFtlZGkrMSpTSVpFT0ZfSlNBTVBST1ddCTsgb3V0cHRyMQorICAgICAgICBtb3YgICAgIGVjeCwgSlNBTVBST1cgW2VzaS0xKlNJWkVPRl9KU0FNUFJPV10gICA7IGlucHRyMShhYm92ZSkKKyAgICAgICAgbW92ICAgICBlYngsIEpTQU1QUk9XIFtlc2krMCpTSVpFT0ZfSlNBTVBST1ddICAgOyBpbnB0cjAKKyAgICAgICAgbW92ICAgICBlc2ksIEpTQU1QUk9XIFtlc2krMSpTSVpFT0ZfSlNBTVBST1ddICAgOyBpbnB0cjEoYmVsb3cpCisgICAgICAgIG1vdiAgICAgZWR4LCBKU0FNUFJPVyBbZWRpKzAqU0laRU9GX0pTQU1QUk9XXSAgIDsgb3V0cHRyMAorICAgICAgICBtb3YgICAgIGVkaSwgSlNBTVBST1cgW2VkaSsxKlNJWkVPRl9KU0FNUFJPV10gICA7IG91dHB0cjEKIAotCXRlc3QJZWF4LCBTSVpFT0ZfWE1NV09SRC0xCi0JanoJc2hvcnQgLnNraXAKLQlwdXNoCWVkeAotCW1vdglkbCwgSlNBTVBMRSBbZWN4KyhlYXgtMSkqU0laRU9GX0pTQU1QTEVdCi0JbW92CUpTQU1QTEUgW2VjeCtlYXgqU0laRU9GX0pTQU1QTEVdLCBkbAotCW1vdglkbCwgSlNBTVBMRSBbZWJ4KyhlYXgtMSkqU0laRU9GX0pTQU1QTEVdCi0JbW92CUpTQU1QTEUgW2VieCtlYXgqU0laRU9GX0pTQU1QTEVdLCBkbAotCW1vdglkbCwgSlNBTVBMRSBbZXNpKyhlYXgtMSkqU0laRU9GX0pTQU1QTEVdCi0JbW92CUpTQU1QTEUgW2VzaStlYXgqU0laRU9GX0pTQU1QTEVdLCBkbAk7IGluc2VydCBhIGR1bW15IHNhbXBsZQotCXBvcAllZHgKKyAgICAgICAgdGVzdCAgICBlYXgsIFNJWkVPRl9YTU1XT1JELTEKKyAgICAgICAganogICAgICBzaG9ydCAuc2tpcAorICAgICAgICBwdXNoICAgIGVkeAorICAgICAgICBtb3YgICAgIGRsLCBKU0FNUExFIFtlY3grKGVheC0xKSpTSVpFT0ZfSlNBTVBMRV0KKyAgICAgICAgbW92ICAgICBKU0FNUExFIFtlY3grZWF4KlNJWkVPRl9KU0FNUExFXSwgZGwKKyAgICAgICAgbW92ICAgICBkbCwgSlNBTVBMRSBbZWJ4KyhlYXgtMSkqU0laRU9GX0pTQU1QTEVdCisgICAgICAgIG1vdiAgICAgSlNBTVBMRSBbZWJ4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIGRsCisgICAgICAgIG1vdiAgICAgZGwsIEpTQU1QTEUgW2VzaSsoZWF4LTEpKlNJWkVPRl9KU0FNUExFXQorICAgICAgICBtb3YgICAgIEpTQU1QTEUgW2VzaStlYXgqU0laRU9GX0pTQU1QTEVdLCBkbCAgICA7IGluc2VydCBhIGR1bW15IHNhbXBsZQorICAgICAgICBwb3AgICAgIGVkeAogLnNraXA6Ci0JOyAtLSBwcm9jZXNzIHRoZSBmaXJzdCBjb2x1bW4gYmxvY2sKKyAgICAgICAgOyAtLSBwcm9jZXNzIHRoZSBmaXJzdCBjb2x1bW4gYmxvY2sKIAotCW1vdmRxYQl4bW0wLCBYTU1XT1JEIFtlYngrMCpTSVpFT0ZfWE1NV09SRF0JOyB4bW0wPXJvd1sgMF1bMF0KLQltb3ZkcWEJeG1tMSwgWE1NV09SRCBbZWN4KzAqU0laRU9GX1hNTVdPUkRdCTsgeG1tMT1yb3dbLTFdWzBdCi0JbW92ZHFhCXhtbTIsIFhNTVdPUkQgW2VzaSswKlNJWkVPRl9YTU1XT1JEXQk7IHhtbTI9cm93WysxXVswXQorICAgICAgICBtb3ZkcWEgIHhtbTAsIFhNTVdPUkQgW2VieCswKlNJWkVPRl9YTU1XT1JEXSAgICA7IHhtbTA9cm93WyAwXVswXQorICAgICAgICBtb3ZkcWEgIHhtbTEsIFhNTVdPUkQgW2VjeCswKlNJWkVPRl9YTU1XT1JEXSAgICA7IHhtbTE9cm93Wy0xXVswXQorICAgICAgICBtb3ZkcWEgIHhtbTIsIFhNTVdPUkQgW2VzaSswKlNJWkVPRl9YTU1XT1JEXSAgICA7IHhtbTI9cm93WysxXVswXQogCi0JcHVzaHBpYwllYngKLQltb3ZwaWMJZWJ4LCBQT0lOVEVSIFtnb3RwdHJdCTsgbG9hZCBHT1QgYWRkcmVzcworICAgICAgICBwdXNocGljIGVieAorICAgICAgICBtb3ZwaWMgIGVieCwgUE9JTlRFUiBbZ290cHRyXSAgIDsgbG9hZCBHT1QgYWRkcmVzcwogCi0JcHhvciAgICAgIHhtbTMseG1tMwkJOyB4bW0zPShhbGwgMCdzKQotCW1vdmRxYSAgICB4bW00LHhtbTAKLQlwdW5wY2tsYncgeG1tMCx4bW0zCQk7IHhtbTA9cm93WyAwXSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNykKLQlwdW5wY2toYncgeG1tNCx4bW0zCQk7IHhtbTQ9cm93WyAwXSggOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKLQltb3ZkcWEgICAgeG1tNSx4bW0xCi0JcHVucGNrbGJ3IHhtbTEseG1tMwkJOyB4bW0xPXJvd1stMV0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcpCi0JcHVucGNraGJ3IHhtbTUseG1tMwkJOyB4bW01PXJvd1stMV0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCi0JbW92ZHFhICAgIHhtbTYseG1tMgotCXB1bnBja2xidyB4bW0yLHhtbTMJCTsgeG1tMj1yb3dbKzFdKCAwICAxICAyICAzICA0ICA1ICA2ICA3KQotCXB1bnBja2hidyB4bW02LHhtbTMJCTsgeG1tNj1yb3dbKzFdKCA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQorICAgICAgICBweG9yICAgICAgeG1tMyx4bW0zICAgICAgICAgICAgIDsgeG1tMz0oYWxsIDAncykKKyAgICAgICAgbW92ZHFhICAgIHhtbTQseG1tMAorICAgICAgICBwdW5wY2tsYncgeG1tMCx4bW0zICAgICAgICAgICAgIDsgeG1tMD1yb3dbIDBdKCAwICAxICAyICAzICA0ICA1ICA2ICA3KQorICAgICAgICBwdW5wY2toYncgeG1tNCx4bW0zICAgICAgICAgICAgIDsgeG1tND1yb3dbIDBdKCA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQorICAgICAgICBtb3ZkcWEgICAgeG1tNSx4bW0xCisgICAgICAgIHB1bnBja2xidyB4bW0xLHhtbTMgICAgICAgICAgICAgOyB4bW0xPXJvd1stMV0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcpCisgICAgICAgIHB1bnBja2hidyB4bW01LHhtbTMgICAgICAgICAgICAgOyB4bW01PXJvd1stMV0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCisgICAgICAgIG1vdmRxYSAgICB4bW02LHhtbTIKKyAgICAgICAgcHVucGNrbGJ3IHhtbTIseG1tMyAgICAgICAgICAgICA7IHhtbTI9cm93WysxXSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNykKKyAgICAgICAgcHVucGNraGJ3IHhtbTYseG1tMyAgICAgICAgICAgICA7IHhtbTY9cm93WysxXSggOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKIAotCXBtdWxsdwl4bW0wLFtHT1RPRkYoZWJ4LFBXX1RIUkVFKV0KLQlwbXVsbHcJeG1tNCxbR09UT0ZGKGVieCxQV19USFJFRSldCisgICAgICAgIHBtdWxsdyAgeG1tMCxbR09UT0ZGKGVieCxQV19USFJFRSldCisgICAgICAgIHBtdWxsdyAgeG1tNCxbR09UT0ZGKGVieCxQV19USFJFRSldCiAKLQlwY21wZXFiCXhtbTcseG1tNwotCXBzcmxkcQl4bW03LChTSVpFT0ZfWE1NV09SRC0yKQorICAgICAgICBwY21wZXFiIHhtbTcseG1tNworICAgICAgICBwc3JsZHEgIHhtbTcsKFNJWkVPRl9YTU1XT1JELTIpCiAKLQlwYWRkdwl4bW0xLHhtbTAJCTsgeG1tMT1JbnQwTD0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcpCi0JcGFkZHcJeG1tNSx4bW00CQk7IHhtbTU9SW50MEg9KCA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQotCXBhZGR3CXhtbTIseG1tMAkJOyB4bW0yPUludDFMPSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNykKLQlwYWRkdwl4bW02LHhtbTQJCTsgeG1tNj1JbnQxSD0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCisgICAgICAgIHBhZGR3ICAgeG1tMSx4bW0wICAgICAgICAgICAgICAgOyB4bW0xPUludDBMPSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNykKKyAgICAgICAgcGFkZHcgICB4bW01LHhtbTQgICAgICAgICAgICAgICA7IHhtbTU9SW50MEg9KCA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQorICAgICAgICBwYWRkdyAgIHhtbTIseG1tMCAgICAgICAgICAgICAgIDsgeG1tMj1JbnQxTD0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcpCisgICAgICAgIHBhZGR3ICAgeG1tNix4bW00ICAgICAgICAgICAgICAgOyB4bW02PUludDFIPSggOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKIAotCW1vdmRxYQlYTU1XT1JEIFtlZHgrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbTEJOyB0ZW1wb3JhcmlseSBzYXZlCi0JbW92ZHFhCVhNTVdPUkQgW2VkeCsxKlNJWkVPRl9YTU1XT1JEXSwgeG1tNQk7IHRoZSBpbnRlcm1lZGlhdGUgZGF0YQotCW1vdmRxYQlYTU1XT1JEIFtlZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbTIKLQltb3ZkcWEJWE1NV09SRCBbZWRpKzEqU0laRU9GX1hNTVdPUkRdLCB4bW02CisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbZWR4KzAqU0laRU9GX1hNTVdPUkRdLCB4bW0xICAgIDsgdGVtcG9yYXJpbHkgc2F2ZQorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW2VkeCsxKlNJWkVPRl9YTU1XT1JEXSwgeG1tNSAgICA7IHRoZSBpbnRlcm1lZGlhdGUgZGF0YQorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW2VkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tMgorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW2VkaSsxKlNJWkVPRl9YTU1XT1JEXSwgeG1tNgogCi0JcGFuZAl4bW0xLHhtbTcJCTsgeG1tMT0oIDAgLS0gLS0gLS0gLS0gLS0gLS0gLS0pCi0JcGFuZAl4bW0yLHhtbTcJCTsgeG1tMj0oIDAgLS0gLS0gLS0gLS0gLS0gLS0gLS0pCisgICAgICAgIHBhbmQgICAgeG1tMSx4bW03ICAgICAgICAgICAgICAgOyB4bW0xPSggMCAtLSAtLSAtLSAtLSAtLSAtLSAtLSkKKyAgICAgICAgcGFuZCAgICB4bW0yLHhtbTcgICAgICAgICAgICAgICA7IHhtbTI9KCAwIC0tIC0tIC0tIC0tIC0tIC0tIC0tKQogCi0JbW92ZHFhCVhNTVdPUkQgW3drKDApXSwgeG1tMQotCW1vdmRxYQlYTU1XT1JEIFt3aygxKV0sIHhtbTIKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygwKV0sIHhtbTEKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygxKV0sIHhtbTIKIAotCXBvcHBpYwllYngKKyAgICAgICAgcG9wcGljICBlYngKIAotCWFkZAllYXgsIGJ5dGUgU0laRU9GX1hNTVdPUkQtMQotCWFuZAllYXgsIGJ5dGUgLVNJWkVPRl9YTU1XT1JECi0JY21wCWVheCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAotCWphCXNob3J0IC5jb2x1bW5sb29wCi0JYWxpZ254CTE2LDcKKyAgICAgICAgYWRkICAgICBlYXgsIGJ5dGUgU0laRU9GX1hNTVdPUkQtMQorICAgICAgICBhbmQgICAgIGVheCwgYnl0ZSAtU0laRU9GX1hNTVdPUkQKKyAgICAgICAgY21wICAgICBlYXgsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKyAgICAgICAgamEgICAgICBzaG9ydCAuY29sdW1ubG9vcAorICAgICAgICBhbGlnbnggIDE2LDcKIAogLmNvbHVtbmxvb3BfbGFzdDoKLQk7IC0tIHByb2Nlc3MgdGhlIGxhc3QgY29sdW1uIGJsb2NrCisgICAgICAgIDsgLS0gcHJvY2VzcyB0aGUgbGFzdCBjb2x1bW4gYmxvY2sKIAotCXB1c2hwaWMJZWJ4Ci0JbW92cGljCWVieCwgUE9JTlRFUiBbZ290cHRyXQk7IGxvYWQgR09UIGFkZHJlc3MKKyAgICAgICAgcHVzaHBpYyBlYngKKyAgICAgICAgbW92cGljICBlYngsIFBPSU5URVIgW2dvdHB0cl0gICA7IGxvYWQgR09UIGFkZHJlc3MKIAotCXBjbXBlcWIJeG1tMSx4bW0xCi0JcHNsbGRxCXhtbTEsKFNJWkVPRl9YTU1XT1JELTIpCi0JbW92ZHFhCXhtbTIseG1tMQorICAgICAgICBwY21wZXFiIHhtbTEseG1tMQorICAgICAgICBwc2xsZHEgIHhtbTEsKFNJWkVPRl9YTU1XT1JELTIpCisgICAgICAgIG1vdmRxYSAgeG1tMix4bW0xCiAKLQlwYW5kCXhtbTEsIFhNTVdPUkQgW2VkeCsxKlNJWkVPRl9YTU1XT1JEXQotCXBhbmQJeG1tMiwgWE1NV09SRCBbZWRpKzEqU0laRU9GX1hNTVdPUkRdCisgICAgICAgIHBhbmQgICAgeG1tMSwgWE1NV09SRCBbZWR4KzEqU0laRU9GX1hNTVdPUkRdCisgICAgICAgIHBhbmQgICAgeG1tMiwgWE1NV09SRCBbZWRpKzEqU0laRU9GX1hNTVdPUkRdCiAKLQltb3ZkcWEJWE1NV09SRCBbd2soMildLCB4bW0xCTsgeG1tMT0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gMTUpCi0JbW92ZHFhCVhNTVdPUkQgW3drKDMpXSwgeG1tMgk7IHhtbTI9KC0tIC0tIC0tIC0tIC0tIC0tIC0tIDE1KQorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDIpXSwgeG1tMSAgIDsgeG1tMT0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gMTUpCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMyldLCB4bW0yICAgOyB4bW0yPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAxNSkKIAotCWptcAluZWFyIC51cHNhbXBsZQotCWFsaWdueAkxNiw3CisgICAgICAgIGptcCAgICAgbmVhciAudXBzYW1wbGUKKyAgICAgICAgYWxpZ254ICAxNiw3CiAKIC5jb2x1bW5sb29wOgotCTsgLS0gcHJvY2VzcyB0aGUgbmV4dCBjb2x1bW4gYmxvY2sKKyAgICAgICAgOyAtLSBwcm9jZXNzIHRoZSBuZXh0IGNvbHVtbiBibG9jawogCi0JbW92ZHFhCXhtbTAsIFhNTVdPUkQgW2VieCsxKlNJWkVPRl9YTU1XT1JEXQk7IHhtbTA9cm93WyAwXVsxXQotCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFtlY3grMSpTSVpFT0ZfWE1NV09SRF0JOyB4bW0xPXJvd1stMV1bMV0KLQltb3ZkcWEJeG1tMiwgWE1NV09SRCBbZXNpKzEqU0laRU9GX1hNTVdPUkRdCTsgeG1tMj1yb3dbKzFdWzFdCisgICAgICAgIG1vdmRxYSAgeG1tMCwgWE1NV09SRCBbZWJ4KzEqU0laRU9GX1hNTVdPUkRdICAgIDsgeG1tMD1yb3dbIDBdWzFdCisgICAgICAgIG1vdmRxYSAgeG1tMSwgWE1NV09SRCBbZWN4KzEqU0laRU9GX1hNTVdPUkRdICAgIDsgeG1tMT1yb3dbLTFdWzFdCisgICAgICAgIG1vdmRxYSAgeG1tMiwgWE1NV09SRCBbZXNpKzEqU0laRU9GX1hNTVdPUkRdICAgIDsgeG1tMj1yb3dbKzFdWzFdCiAKLQlwdXNocGljCWVieAotCW1vdnBpYwllYngsIFBPSU5URVIgW2dvdHB0cl0JOyBsb2FkIEdPVCBhZGRyZXNzCisgICAgICAgIHB1c2hwaWMgZWJ4CisgICAgICAgIG1vdnBpYyAgZWJ4LCBQT0lOVEVSIFtnb3RwdHJdICAgOyBsb2FkIEdPVCBhZGRyZXNzCiAKLQlweG9yICAgICAgeG1tMyx4bW0zCQk7IHhtbTM9KGFsbCAwJ3MpCi0JbW92ZHFhICAgIHhtbTQseG1tMAotCXB1bnBja2xidyB4bW0wLHhtbTMJCTsgeG1tMD1yb3dbIDBdKCAwICAxICAyICAzICA0ICA1ICA2ICA3KQotCXB1bnBja2hidyB4bW00LHhtbTMJCTsgeG1tND1yb3dbIDBdKCA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQotCW1vdmRxYSAgICB4bW01LHhtbTEKLQlwdW5wY2tsYncgeG1tMSx4bW0zCQk7IHhtbTE9cm93Wy0xXSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNykKLQlwdW5wY2toYncgeG1tNSx4bW0zCQk7IHhtbTU9cm93Wy0xXSggOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKLQltb3ZkcWEgICAgeG1tNix4bW0yCi0JcHVucGNrbGJ3IHhtbTIseG1tMwkJOyB4bW0yPXJvd1srMV0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcpCi0JcHVucGNraGJ3IHhtbTYseG1tMwkJOyB4bW02PXJvd1srMV0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCisgICAgICAgIHB4b3IgICAgICB4bW0zLHhtbTMgICAgICAgICAgICAgOyB4bW0zPShhbGwgMCdzKQorICAgICAgICBtb3ZkcWEgICAgeG1tNCx4bW0wCisgICAgICAgIHB1bnBja2xidyB4bW0wLHhtbTMgICAgICAgICAgICAgOyB4bW0wPXJvd1sgMF0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcpCisgICAgICAgIHB1bnBja2hidyB4bW00LHhtbTMgICAgICAgICAgICAgOyB4bW00PXJvd1sgMF0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCisgICAgICAgIG1vdmRxYSAgICB4bW01LHhtbTEKKyAgICAgICAgcHVucGNrbGJ3IHhtbTEseG1tMyAgICAgICAgICAgICA7IHhtbTE9cm93Wy0xXSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNykKKyAgICAgICAgcHVucGNraGJ3IHhtbTUseG1tMyAgICAgICAgICAgICA7IHhtbTU9cm93Wy0xXSggOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKKyAgICAgICAgbW92ZHFhICAgIHhtbTYseG1tMgorICAgICAgICBwdW5wY2tsYncgeG1tMix4bW0zICAgICAgICAgICAgIDsgeG1tMj1yb3dbKzFdKCAwICAxICAyICAzICA0ICA1ICA2ICA3KQorICAgICAgICBwdW5wY2toYncgeG1tNix4bW0zICAgICAgICAgICAgIDsgeG1tNj1yb3dbKzFdKCA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQogCi0JcG11bGx3CXhtbTAsW0dPVE9GRihlYngsUFdfVEhSRUUpXQotCXBtdWxsdwl4bW00LFtHT1RPRkYoZWJ4LFBXX1RIUkVFKV0KKyAgICAgICAgcG11bGx3ICB4bW0wLFtHT1RPRkYoZWJ4LFBXX1RIUkVFKV0KKyAgICAgICAgcG11bGx3ICB4bW00LFtHT1RPRkYoZWJ4LFBXX1RIUkVFKV0KIAotCXBhZGR3CXhtbTEseG1tMAkJOyB4bW0xPUludDBMPSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNykKLQlwYWRkdwl4bW01LHhtbTQJCTsgeG1tNT1JbnQwSD0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCi0JcGFkZHcJeG1tMix4bW0wCQk7IHhtbTI9SW50MUw9KCAwICAxICAyICAzICA0ICA1ICA2ICA3KQotCXBhZGR3CXhtbTYseG1tNAkJOyB4bW02PUludDFIPSggOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKKyAgICAgICAgcGFkZHcgICB4bW0xLHhtbTAgICAgICAgICAgICAgICA7IHhtbTE9SW50MEw9KCAwICAxICAyICAzICA0ICA1ICA2ICA3KQorICAgICAgICBwYWRkdyAgIHhtbTUseG1tNCAgICAgICAgICAgICAgIDsgeG1tNT1JbnQwSD0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCisgICAgICAgIHBhZGR3ICAgeG1tMix4bW0wICAgICAgICAgICAgICAgOyB4bW0yPUludDFMPSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNykKKyAgICAgICAgcGFkZHcgICB4bW02LHhtbTQgICAgICAgICAgICAgICA7IHhtbTY9SW50MUg9KCA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQogCi0JbW92ZHFhCVhNTVdPUkQgW2VkeCsyKlNJWkVPRl9YTU1XT1JEXSwgeG1tMQk7IHRlbXBvcmFyaWx5IHNhdmUKLQltb3ZkcWEJWE1NV09SRCBbZWR4KzMqU0laRU9GX1hNTVdPUkRdLCB4bW01CTsgdGhlIGludGVybWVkaWF0ZSBkYXRhCi0JbW92ZHFhCVhNTVdPUkQgW2VkaSsyKlNJWkVPRl9YTU1XT1JEXSwgeG1tMgotCW1vdmRxYQlYTU1XT1JEIFtlZGkrMypTSVpFT0ZfWE1NV09SRF0sIHhtbTYKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFtlZHgrMipTSVpFT0ZfWE1NV09SRF0sIHhtbTEgICAgOyB0ZW1wb3JhcmlseSBzYXZlCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbZWR4KzMqU0laRU9GX1hNTVdPUkRdLCB4bW01ICAgIDsgdGhlIGludGVybWVkaWF0ZSBkYXRhCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbZWRpKzIqU0laRU9GX1hNTVdPUkRdLCB4bW0yCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbZWRpKzMqU0laRU9GX1hNTVdPUkRdLCB4bW02CiAKLQlwc2xsZHEJeG1tMSwoU0laRU9GX1hNTVdPUkQtMikJOyB4bW0xPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAgMCkKLQlwc2xsZHEJeG1tMiwoU0laRU9GX1hNTVdPUkQtMikJOyB4bW0yPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAgMCkKKyAgICAgICAgcHNsbGRxICB4bW0xLChTSVpFT0ZfWE1NV09SRC0yKSA7IHhtbTE9KC0tIC0tIC0tIC0tIC0tIC0tIC0tICAwKQorICAgICAgICBwc2xsZHEgIHhtbTIsKFNJWkVPRl9YTU1XT1JELTIpIDsgeG1tMj0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gIDApCiAKLQltb3ZkcWEJWE1NV09SRCBbd2soMildLCB4bW0xCi0JbW92ZHFhCVhNTVdPUkQgW3drKDMpXSwgeG1tMgorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDIpXSwgeG1tMQorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDMpXSwgeG1tMgogCiAudXBzYW1wbGU6Ci0JOyAtLSBwcm9jZXNzIHRoZSB1cHBlciByb3cKKyAgICAgICAgOyAtLSBwcm9jZXNzIHRoZSB1cHBlciByb3cKIAotCW1vdmRxYQl4bW03LCBYTU1XT1JEIFtlZHgrMCpTSVpFT0ZfWE1NV09SRF0KLQltb3ZkcWEJeG1tMywgWE1NV09SRCBbZWR4KzEqU0laRU9GX1hNTVdPUkRdCisgICAgICAgIG1vdmRxYSAgeG1tNywgWE1NV09SRCBbZWR4KzAqU0laRU9GX1hNTVdPUkRdCisgICAgICAgIG1vdmRxYSAgeG1tMywgWE1NV09SRCBbZWR4KzEqU0laRU9GX1hNTVdPUkRdCiAKLQltb3ZkcWEJeG1tMCx4bW03CQk7IHhtbTc9SW50MEw9KCAwICAxICAyICAzICA0ICA1ICA2ICA3KQotCW1vdmRxYQl4bW00LHhtbTMJCTsgeG1tMz1JbnQwSD0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCi0JcHNybGRxCXhtbTAsMgkJCTsgeG1tMD0oIDEgIDIgIDMgIDQgIDUgIDYgIDcgLS0pCi0JcHNsbGRxCXhtbTQsKFNJWkVPRl9YTU1XT1JELTIpCTsgeG1tND0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gIDgpCi0JbW92ZHFhCXhtbTUseG1tNwotCW1vdmRxYQl4bW02LHhtbTMKLQlwc3JsZHEJeG1tNSwoU0laRU9GX1hNTVdPUkQtMikJOyB4bW01PSggNyAtLSAtLSAtLSAtLSAtLSAtLSAtLSkKLQlwc2xsZHEJeG1tNiwyCQkJOyB4bW02PSgtLSAgOCAgOSAxMCAxMSAxMiAxMyAxNCkKKyAgICAgICAgbW92ZHFhICB4bW0wLHhtbTcgICAgICAgICAgICAgICA7IHhtbTc9SW50MEw9KCAwICAxICAyICAzICA0ICA1ICA2ICA3KQorICAgICAgICBtb3ZkcWEgIHhtbTQseG1tMyAgICAgICAgICAgICAgIDsgeG1tMz1JbnQwSD0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCisgICAgICAgIHBzcmxkcSAgeG1tMCwyICAgICAgICAgICAgICAgICAgOyB4bW0wPSggMSAgMiAgMyAgNCAgNSAgNiAgNyAtLSkKKyAgICAgICAgcHNsbGRxICB4bW00LChTSVpFT0ZfWE1NV09SRC0yKSA7IHhtbTQ9KC0tIC0tIC0tIC0tIC0tIC0tIC0tICA4KQorICAgICAgICBtb3ZkcWEgIHhtbTUseG1tNworICAgICAgICBtb3ZkcWEgIHhtbTYseG1tMworICAgICAgICBwc3JsZHEgIHhtbTUsKFNJWkVPRl9YTU1XT1JELTIpIDsgeG1tNT0oIDcgLS0gLS0gLS0gLS0gLS0gLS0gLS0pCisgICAgICAgIHBzbGxkcSAgeG1tNiwyICAgICAgICAgICAgICAgICAgOyB4bW02PSgtLSAgOCAgOSAxMCAxMSAxMiAxMyAxNCkKIAotCXBvcgl4bW0wLHhtbTQJCTsgeG1tMD0oIDEgIDIgIDMgIDQgIDUgIDYgIDcgIDgpCi0JcG9yCXhtbTUseG1tNgkJOyB4bW01PSggNyAgOCAgOSAxMCAxMSAxMiAxMyAxNCkKKyAgICAgICAgcG9yICAgICB4bW0wLHhtbTQgICAgICAgICAgICAgICA7IHhtbTA9KCAxICAyICAzICA0ICA1ICA2ICA3ICA4KQorICAgICAgICBwb3IgICAgIHhtbTUseG1tNiAgICAgICAgICAgICAgIDsgeG1tNT0oIDcgIDggIDkgMTAgMTEgMTIgMTMgMTQpCiAKLQltb3ZkcWEJeG1tMSx4bW03Ci0JbW92ZHFhCXhtbTIseG1tMwotCXBzbGxkcQl4bW0xLDIJCQk7IHhtbTE9KC0tICAwICAxICAyICAzICA0ICA1ICA2KQotCXBzcmxkcQl4bW0yLDIJCQk7IHhtbTI9KCA5IDEwIDExIDEyIDEzIDE0IDE1IC0tKQotCW1vdmRxYQl4bW00LHhtbTMKLQlwc3JsZHEJeG1tNCwoU0laRU9GX1hNTVdPUkQtMikJOyB4bW00PSgxNSAtLSAtLSAtLSAtLSAtLSAtLSAtLSkKKyAgICAgICAgbW92ZHFhICB4bW0xLHhtbTcKKyAgICAgICAgbW92ZHFhICB4bW0yLHhtbTMKKyAgICAgICAgcHNsbGRxICB4bW0xLDIgICAgICAgICAgICAgICAgICA7IHhtbTE9KC0tICAwICAxICAyICAzICA0ICA1ICA2KQorICAgICAgICBwc3JsZHEgIHhtbTIsMiAgICAgICAgICAgICAgICAgIDsgeG1tMj0oIDkgMTAgMTEgMTIgMTMgMTQgMTUgLS0pCisgICAgICAgIG1vdmRxYSAgeG1tNCx4bW0zCisgICAgICAgIHBzcmxkcSAgeG1tNCwoU0laRU9GX1hNTVdPUkQtMikgOyB4bW00PSgxNSAtLSAtLSAtLSAtLSAtLSAtLSAtLSkKIAotCXBvcgl4bW0xLCBYTU1XT1JEIFt3aygwKV0JOyB4bW0xPSgtMSAgMCAgMSAgMiAgMyAgNCAgNSAgNikKLQlwb3IJeG1tMiwgWE1NV09SRCBbd2soMildCTsgeG1tMj0oIDkgMTAgMTEgMTIgMTMgMTQgMTUgMTYpCisgICAgICAgIHBvciAgICAgeG1tMSwgWE1NV09SRCBbd2soMCldICAgOyB4bW0xPSgtMSAgMCAgMSAgMiAgMyAgNCAgNSAgNikKKyAgICAgICAgcG9yICAgICB4bW0yLCBYTU1XT1JEIFt3aygyKV0gICA7IHhtbTI9KCA5IDEwIDExIDEyIDEzIDE0IDE1IDE2KQogCi0JbW92ZHFhCVhNTVdPUkQgW3drKDApXSwgeG1tNAorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDApXSwgeG1tNAogCi0JcG11bGx3CXhtbTcsW0dPVE9GRihlYngsUFdfVEhSRUUpXQotCXBtdWxsdwl4bW0zLFtHT1RPRkYoZWJ4LFBXX1RIUkVFKV0KLQlwYWRkdwl4bW0xLFtHT1RPRkYoZWJ4LFBXX0VJR0hUKV0KLQlwYWRkdwl4bW01LFtHT1RPRkYoZWJ4LFBXX0VJR0hUKV0KLQlwYWRkdwl4bW0wLFtHT1RPRkYoZWJ4LFBXX1NFVkVOKV0KLQlwYWRkdwl4bW0yLFtHT1RPRkYoZWJ4LFBXX1NFVkVOKV0KKyAgICAgICAgcG11bGx3ICB4bW03LFtHT1RPRkYoZWJ4LFBXX1RIUkVFKV0KKyAgICAgICAgcG11bGx3ICB4bW0zLFtHT1RPRkYoZWJ4LFBXX1RIUkVFKV0KKyAgICAgICAgcGFkZHcgICB4bW0xLFtHT1RPRkYoZWJ4LFBXX0VJR0hUKV0KKyAgICAgICAgcGFkZHcgICB4bW01LFtHT1RPRkYoZWJ4LFBXX0VJR0hUKV0KKyAgICAgICAgcGFkZHcgICB4bW0wLFtHT1RPRkYoZWJ4LFBXX1NFVkVOKV0KKyAgICAgICAgcGFkZHcgICB4bW0yLFtHT1RPRkYoZWJ4LFBXX1NFVkVOKV0KIAotCXBhZGR3CXhtbTEseG1tNwotCXBhZGR3CXhtbTUseG1tMwotCXBzcmx3CXhtbTEsNAkJCTsgeG1tMT1PdXQwTEU9KCAwICAyICA0ICA2ICA4IDEwIDEyIDE0KQotCXBzcmx3CXhtbTUsNAkJCTsgeG1tNT1PdXQwSEU9KDE2IDE4IDIwIDIyIDI0IDI2IDI4IDMwKQotCXBhZGR3CXhtbTAseG1tNwotCXBhZGR3CXhtbTIseG1tMwotCXBzcmx3CXhtbTAsNAkJCTsgeG1tMD1PdXQwTE89KCAxICAzICA1ICA3ICA5IDExIDEzIDE1KQotCXBzcmx3CXhtbTIsNAkJCTsgeG1tMj1PdXQwSE89KDE3IDE5IDIxIDIzIDI1IDI3IDI5IDMxKQorICAgICAgICBwYWRkdyAgIHhtbTEseG1tNworICAgICAgICBwYWRkdyAgIHhtbTUseG1tMworICAgICAgICBwc3JsdyAgIHhtbTEsNCAgICAgICAgICAgICAgICAgIDsgeG1tMT1PdXQwTEU9KCAwICAyICA0ICA2ICA4IDEwIDEyIDE0KQorICAgICAgICBwc3JsdyAgIHhtbTUsNCAgICAgICAgICAgICAgICAgIDsgeG1tNT1PdXQwSEU9KDE2IDE4IDIwIDIyIDI0IDI2IDI4IDMwKQorICAgICAgICBwYWRkdyAgIHhtbTAseG1tNworICAgICAgICBwYWRkdyAgIHhtbTIseG1tMworICAgICAgICBwc3JsdyAgIHhtbTAsNCAgICAgICAgICAgICAgICAgIDsgeG1tMD1PdXQwTE89KCAxICAzICA1ICA3ICA5IDExIDEzIDE1KQorICAgICAgICBwc3JsdyAgIHhtbTIsNCAgICAgICAgICAgICAgICAgIDsgeG1tMj1PdXQwSE89KDE3IDE5IDIxIDIzIDI1IDI3IDI5IDMxKQogCi0JcHNsbHcJeG1tMCxCWVRFX0JJVAotCXBzbGx3CXhtbTIsQllURV9CSVQKLQlwb3IJeG1tMSx4bW0wCQk7IHhtbTE9T3V0MEw9KCAwICAxICAyIC4uLiAxMyAxNCAxNSkKLQlwb3IJeG1tNSx4bW0yCQk7IHhtbTU9T3V0MEg9KDE2IDE3IDE4IC4uLiAyOSAzMCAzMSkKKyAgICAgICAgcHNsbHcgICB4bW0wLEJZVEVfQklUCisgICAgICAgIHBzbGx3ICAgeG1tMixCWVRFX0JJVAorICAgICAgICBwb3IgICAgIHhtbTEseG1tMCAgICAgICAgICAgICAgIDsgeG1tMT1PdXQwTD0oIDAgIDEgIDIgLi4uIDEzIDE0IDE1KQorICAgICAgICBwb3IgICAgIHhtbTUseG1tMiAgICAgICAgICAgICAgIDsgeG1tNT1PdXQwSD0oMTYgMTcgMTggLi4uIDI5IDMwIDMxKQogCi0JbW92ZHFhCVhNTVdPUkQgW2VkeCswKlNJWkVPRl9YTU1XT1JEXSwgeG1tMQotCW1vdmRxYQlYTU1XT1JEIFtlZHgrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbTUKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFtlZHgrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbTEKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFtlZHgrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbTUKIAotCTsgLS0gcHJvY2VzcyB0aGUgbG93ZXIgcm93CisgICAgICAgIDsgLS0gcHJvY2VzcyB0aGUgbG93ZXIgcm93CiAKLQltb3ZkcWEJeG1tNiwgWE1NV09SRCBbZWRpKzAqU0laRU9GX1hNTVdPUkRdCi0JbW92ZHFhCXhtbTQsIFhNTVdPUkQgW2VkaSsxKlNJWkVPRl9YTU1XT1JEXQorICAgICAgICBtb3ZkcWEgIHhtbTYsIFhNTVdPUkQgW2VkaSswKlNJWkVPRl9YTU1XT1JEXQorICAgICAgICBtb3ZkcWEgIHhtbTQsIFhNTVdPUkQgW2VkaSsxKlNJWkVPRl9YTU1XT1JEXQogCi0JbW92ZHFhCXhtbTcseG1tNgkJOyB4bW02PUludDFMPSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNykKLQltb3ZkcWEJeG1tMyx4bW00CQk7IHhtbTQ9SW50MUg9KCA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQotCXBzcmxkcQl4bW03LDIJCQk7IHhtbTc9KCAxICAyICAzICA0ICA1ICA2ICA3IC0tKQotCXBzbGxkcQl4bW0zLChTSVpFT0ZfWE1NV09SRC0yKQk7IHhtbTM9KC0tIC0tIC0tIC0tIC0tIC0tIC0tICA4KQotCW1vdmRxYQl4bW0wLHhtbTYKLQltb3ZkcWEJeG1tMix4bW00Ci0JcHNybGRxCXhtbTAsKFNJWkVPRl9YTU1XT1JELTIpCTsgeG1tMD0oIDcgLS0gLS0gLS0gLS0gLS0gLS0gLS0pCi0JcHNsbGRxCXhtbTIsMgkJCTsgeG1tMj0oLS0gIDggIDkgMTAgMTEgMTIgMTMgMTQpCisgICAgICAgIG1vdmRxYSAgeG1tNyx4bW02ICAgICAgICAgICAgICAgOyB4bW02PUludDFMPSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNykKKyAgICAgICAgbW92ZHFhICB4bW0zLHhtbTQgICAgICAgICAgICAgICA7IHhtbTQ9SW50MUg9KCA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQorICAgICAgICBwc3JsZHEgIHhtbTcsMiAgICAgICAgICAgICAgICAgIDsgeG1tNz0oIDEgIDIgIDMgIDQgIDUgIDYgIDcgLS0pCisgICAgICAgIHBzbGxkcSAgeG1tMywoU0laRU9GX1hNTVdPUkQtMikgOyB4bW0zPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAgOCkKKyAgICAgICAgbW92ZHFhICB4bW0wLHhtbTYKKyAgICAgICAgbW92ZHFhICB4bW0yLHhtbTQKKyAgICAgICAgcHNybGRxICB4bW0wLChTSVpFT0ZfWE1NV09SRC0yKSA7IHhtbTA9KCA3IC0tIC0tIC0tIC0tIC0tIC0tIC0tKQorICAgICAgICBwc2xsZHEgIHhtbTIsMiAgICAgICAgICAgICAgICAgIDsgeG1tMj0oLS0gIDggIDkgMTAgMTEgMTIgMTMgMTQpCiAKLQlwb3IJeG1tNyx4bW0zCQk7IHhtbTc9KCAxICAyICAzICA0ICA1ICA2ICA3ICA4KQotCXBvcgl4bW0wLHhtbTIJCTsgeG1tMD0oIDcgIDggIDkgMTAgMTEgMTIgMTMgMTQpCisgICAgICAgIHBvciAgICAgeG1tNyx4bW0zICAgICAgICAgICAgICAgOyB4bW03PSggMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCkKKyAgICAgICAgcG9yICAgICB4bW0wLHhtbTIgICAgICAgICAgICAgICA7IHhtbTA9KCA3ICA4ICA5IDEwIDExIDEyIDEzIDE0KQogCi0JbW92ZHFhCXhtbTEseG1tNgotCW1vdmRxYQl4bW01LHhtbTQKLQlwc2xsZHEJeG1tMSwyCQkJOyB4bW0xPSgtLSAgMCAgMSAgMiAgMyAgNCAgNSAgNikKLQlwc3JsZHEJeG1tNSwyCQkJOyB4bW01PSggOSAxMCAxMSAxMiAxMyAxNCAxNSAtLSkKLQltb3ZkcWEJeG1tMyx4bW00Ci0JcHNybGRxCXhtbTMsKFNJWkVPRl9YTU1XT1JELTIpCTsgeG1tMz0oMTUgLS0gLS0gLS0gLS0gLS0gLS0gLS0pCisgICAgICAgIG1vdmRxYSAgeG1tMSx4bW02CisgICAgICAgIG1vdmRxYSAgeG1tNSx4bW00CisgICAgICAgIHBzbGxkcSAgeG1tMSwyICAgICAgICAgICAgICAgICAgOyB4bW0xPSgtLSAgMCAgMSAgMiAgMyAgNCAgNSAgNikKKyAgICAgICAgcHNybGRxICB4bW01LDIgICAgICAgICAgICAgICAgICA7IHhtbTU9KCA5IDEwIDExIDEyIDEzIDE0IDE1IC0tKQorICAgICAgICBtb3ZkcWEgIHhtbTMseG1tNAorICAgICAgICBwc3JsZHEgIHhtbTMsKFNJWkVPRl9YTU1XT1JELTIpIDsgeG1tMz0oMTUgLS0gLS0gLS0gLS0gLS0gLS0gLS0pCiAKLQlwb3IJeG1tMSwgWE1NV09SRCBbd2soMSldCTsgeG1tMT0oLTEgIDAgIDEgIDIgIDMgIDQgIDUgIDYpCi0JcG9yCXhtbTUsIFhNTVdPUkQgW3drKDMpXQk7IHhtbTU9KCA5IDEwIDExIDEyIDEzIDE0IDE1IDE2KQorICAgICAgICBwb3IgICAgIHhtbTEsIFhNTVdPUkQgW3drKDEpXSAgIDsgeG1tMT0oLTEgIDAgIDEgIDIgIDMgIDQgIDUgIDYpCisgICAgICAgIHBvciAgICAgeG1tNSwgWE1NV09SRCBbd2soMyldICAgOyB4bW01PSggOSAxMCAxMSAxMiAxMyAxNCAxNSAxNikKIAotCW1vdmRxYQlYTU1XT1JEIFt3aygxKV0sIHhtbTMKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygxKV0sIHhtbTMKIAotCXBtdWxsdwl4bW02LFtHT1RPRkYoZWJ4LFBXX1RIUkVFKV0KLQlwbXVsbHcJeG1tNCxbR09UT0ZGKGVieCxQV19USFJFRSldCi0JcGFkZHcJeG1tMSxbR09UT0ZGKGVieCxQV19FSUdIVCldCi0JcGFkZHcJeG1tMCxbR09UT0ZGKGVieCxQV19FSUdIVCldCi0JcGFkZHcJeG1tNyxbR09UT0ZGKGVieCxQV19TRVZFTildCi0JcGFkZHcJeG1tNSxbR09UT0ZGKGVieCxQV19TRVZFTildCisgICAgICAgIHBtdWxsdyAgeG1tNixbR09UT0ZGKGVieCxQV19USFJFRSldCisgICAgICAgIHBtdWxsdyAgeG1tNCxbR09UT0ZGKGVieCxQV19USFJFRSldCisgICAgICAgIHBhZGR3ICAgeG1tMSxbR09UT0ZGKGVieCxQV19FSUdIVCldCisgICAgICAgIHBhZGR3ICAgeG1tMCxbR09UT0ZGKGVieCxQV19FSUdIVCldCisgICAgICAgIHBhZGR3ICAgeG1tNyxbR09UT0ZGKGVieCxQV19TRVZFTildCisgICAgICAgIHBhZGR3ICAgeG1tNSxbR09UT0ZGKGVieCxQV19TRVZFTildCiAKLQlwYWRkdwl4bW0xLHhtbTYKLQlwYWRkdwl4bW0wLHhtbTQKLQlwc3Jsdwl4bW0xLDQJCQk7IHhtbTE9T3V0MUxFPSggMCAgMiAgNCAgNiAgOCAxMCAxMiAxNCkKLQlwc3Jsdwl4bW0wLDQJCQk7IHhtbTA9T3V0MUhFPSgxNiAxOCAyMCAyMiAyNCAyNiAyOCAzMCkKLQlwYWRkdwl4bW03LHhtbTYKLQlwYWRkdwl4bW01LHhtbTQKLQlwc3Jsdwl4bW03LDQJCQk7IHhtbTc9T3V0MUxPPSggMSAgMyAgNSAgNyAgOSAxMSAxMyAxNSkKLQlwc3Jsdwl4bW01LDQJCQk7IHhtbTU9T3V0MUhPPSgxNyAxOSAyMSAyMyAyNSAyNyAyOSAzMSkKKyAgICAgICAgcGFkZHcgICB4bW0xLHhtbTYKKyAgICAgICAgcGFkZHcgICB4bW0wLHhtbTQKKyAgICAgICAgcHNybHcgICB4bW0xLDQgICAgICAgICAgICAgICAgICA7IHhtbTE9T3V0MUxFPSggMCAgMiAgNCAgNiAgOCAxMCAxMiAxNCkKKyAgICAgICAgcHNybHcgICB4bW0wLDQgICAgICAgICAgICAgICAgICA7IHhtbTA9T3V0MUhFPSgxNiAxOCAyMCAyMiAyNCAyNiAyOCAzMCkKKyAgICAgICAgcGFkZHcgICB4bW03LHhtbTYKKyAgICAgICAgcGFkZHcgICB4bW01LHhtbTQKKyAgICAgICAgcHNybHcgICB4bW03LDQgICAgICAgICAgICAgICAgICA7IHhtbTc9T3V0MUxPPSggMSAgMyAgNSAgNyAgOSAxMSAxMyAxNSkKKyAgICAgICAgcHNybHcgICB4bW01LDQgICAgICAgICAgICAgICAgICA7IHhtbTU9T3V0MUhPPSgxNyAxOSAyMSAyMyAyNSAyNyAyOSAzMSkKIAotCXBzbGx3CXhtbTcsQllURV9CSVQKLQlwc2xsdwl4bW01LEJZVEVfQklUCi0JcG9yCXhtbTEseG1tNwkJOyB4bW0xPU91dDFMPSggMCAgMSAgMiAuLi4gMTMgMTQgMTUpCi0JcG9yCXhtbTAseG1tNQkJOyB4bW0wPU91dDFIPSgxNiAxNyAxOCAuLi4gMjkgMzAgMzEpCisgICAgICAgIHBzbGx3ICAgeG1tNyxCWVRFX0JJVAorICAgICAgICBwc2xsdyAgIHhtbTUsQllURV9CSVQKKyAgICAgICAgcG9yICAgICB4bW0xLHhtbTcgICAgICAgICAgICAgICA7IHhtbTE9T3V0MUw9KCAwICAxICAyIC4uLiAxMyAxNCAxNSkKKyAgICAgICAgcG9yICAgICB4bW0wLHhtbTUgICAgICAgICAgICAgICA7IHhtbTA9T3V0MUg9KDE2IDE3IDE4IC4uLiAyOSAzMCAzMSkKIAotCW1vdmRxYQlYTU1XT1JEIFtlZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbTEKLQltb3ZkcWEJWE1NV09SRCBbZWRpKzEqU0laRU9GX1hNTVdPUkRdLCB4bW0wCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbZWRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW0xCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbZWRpKzEqU0laRU9GX1hNTVdPUkRdLCB4bW0wCiAKLQlwb3BwaWMJZWJ4CisgICAgICAgIHBvcHBpYyAgZWJ4CiAKLQlzdWIJZWF4LCBieXRlIFNJWkVPRl9YTU1XT1JECi0JYWRkCWVjeCwgYnl0ZSAxKlNJWkVPRl9YTU1XT1JECTsgaW5wdHIxKGFib3ZlKQotCWFkZAllYngsIGJ5dGUgMSpTSVpFT0ZfWE1NV09SRAk7IGlucHRyMAotCWFkZAllc2ksIGJ5dGUgMSpTSVpFT0ZfWE1NV09SRAk7IGlucHRyMShiZWxvdykKLQlhZGQJZWR4LCBieXRlIDIqU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIwCi0JYWRkCWVkaSwgYnl0ZSAyKlNJWkVPRl9YTU1XT1JECTsgb3V0cHRyMQotCWNtcAllYXgsIGJ5dGUgU0laRU9GX1hNTVdPUkQKLQlqYQluZWFyIC5jb2x1bW5sb29wCi0JdGVzdAllYXgsZWF4Ci0Jam56CW5lYXIgLmNvbHVtbmxvb3BfbGFzdAorICAgICAgICBzdWIgICAgIGVheCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorICAgICAgICBhZGQgICAgIGVjeCwgYnl0ZSAxKlNJWkVPRl9YTU1XT1JEICAgICAgOyBpbnB0cjEoYWJvdmUpCisgICAgICAgIGFkZCAgICAgZWJ4LCBieXRlIDEqU0laRU9GX1hNTVdPUkQgICAgICA7IGlucHRyMAorICAgICAgICBhZGQgICAgIGVzaSwgYnl0ZSAxKlNJWkVPRl9YTU1XT1JEICAgICAgOyBpbnB0cjEoYmVsb3cpCisgICAgICAgIGFkZCAgICAgZWR4LCBieXRlIDIqU0laRU9GX1hNTVdPUkQgICAgICA7IG91dHB0cjAKKyAgICAgICAgYWRkICAgICBlZGksIGJ5dGUgMipTSVpFT0ZfWE1NV09SRCAgICAgIDsgb3V0cHRyMQorICAgICAgICBjbXAgICAgIGVheCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorICAgICAgICBqYSAgICAgIG5lYXIgLmNvbHVtbmxvb3AKKyAgICAgICAgdGVzdCAgICBlYXgsZWF4CisgICAgICAgIGpueiAgICAgbmVhciAuY29sdW1ubG9vcF9sYXN0CiAKLQlwb3AJZXNpCi0JcG9wCWVkaQotCXBvcAllY3gKLQlwb3AJZWF4CisgICAgICAgIHBvcCAgICAgZXNpCisgICAgICAgIHBvcCAgICAgZWRpCisgICAgICAgIHBvcCAgICAgZWN4CisgICAgICAgIHBvcCAgICAgZWF4CiAKLQlhZGQJZXNpLCBieXRlIDEqU0laRU9GX0pTQU1QUk9XCTsgaW5wdXRfZGF0YQotCWFkZAllZGksIGJ5dGUgMipTSVpFT0ZfSlNBTVBST1cJOyBvdXRwdXRfZGF0YQotCXN1YgllY3gsIGJ5dGUgMgkJCTsgcm93Y3RyCi0JamcJbmVhciAucm93bG9vcAorICAgICAgICBhZGQgICAgIGVzaSwgYnl0ZSAxKlNJWkVPRl9KU0FNUFJPVyAgICAgOyBpbnB1dF9kYXRhCisgICAgICAgIGFkZCAgICAgZWRpLCBieXRlIDIqU0laRU9GX0pTQU1QUk9XICAgICA7IG91dHB1dF9kYXRhCisgICAgICAgIHN1YiAgICAgZWN4LCBieXRlIDIgICAgICAgICAgICAgICAgICAgICA7IHJvd2N0cgorICAgICAgICBqZyAgICAgIG5lYXIgLnJvd2xvb3AKIAogLnJldHVybjoKLQlwb3AJZWRpCi0JcG9wCWVzaQotOwlwb3AJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotOwlwb3AJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotCXBvcAllYngKLQltb3YJZXNwLGVicAkJOyBlc3AgPC0gYWxpZ25lZCBlYnAKLQlwb3AJZXNwCQk7IGVzcCA8LSBvcmlnaW5hbCBlYnAKLQlwb3AJZWJwCi0JcmV0CisgICAgICAgIHBvcCAgICAgZWRpCisgICAgICAgIHBvcCAgICAgZXNpCis7ICAgICAgIHBvcCAgICAgZWR4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgICAgIHBvcCAgICAgZWN4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgICAgIHBvcCAgICAgZWJ4CisgICAgICAgIG1vdiAgICAgZXNwLGVicCAgICAgICAgIDsgZXNwIDwtIGFsaWduZWQgZWJwCisgICAgICAgIHBvcCAgICAgZXNwICAgICAgICAgICAgIDsgZXNwIDwtIG9yaWdpbmFsIGVicAorICAgICAgICBwb3AgICAgIGVicAorICAgICAgICByZXQKIAogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogOwpAQCAtNTMyLDkyICs1MzIsOTIgQEAKIDsgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyKTsKIDsKIAotJWRlZmluZSBtYXhfdl9zYW1wKGIpCQkoYikrOAkJCTsgaW50IG1heF92X3NhbXBfZmFjdG9yCi0lZGVmaW5lIG91dHB1dF93aWR0aChiKQkoYikrMTIJCTsgSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgKLSVkZWZpbmUgaW5wdXRfZGF0YShiKQkJKGIpKzE2CQk7IEpTQU1QQVJSQVkgaW5wdXRfZGF0YQotJWRlZmluZSBvdXRwdXRfZGF0YV9wdHIoYikJKGIpKzIwCQk7IEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIKKyVkZWZpbmUgbWF4X3Zfc2FtcChiKSAgICAgICAgICAgKGIpKzggICAgICAgICAgIDsgaW50IG1heF92X3NhbXBfZmFjdG9yCislZGVmaW5lIG91dHB1dF93aWR0aChiKSAgICAgICAgIChiKSsxMiAgICAgICAgICA7IEpESU1FTlNJT04gb3V0cHV0X3dpZHRoCislZGVmaW5lIGlucHV0X2RhdGEoYikgICAgICAgICAgIChiKSsxNiAgICAgICAgICA7IEpTQU1QQVJSQVkgaW5wdXRfZGF0YQorJWRlZmluZSBvdXRwdXRfZGF0YV9wdHIoYikgICAgICAoYikrMjAgICAgICAgICAgOyBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyCiAKLQlhbGlnbgkxNgotCWdsb2JhbAlFWFROKGpzaW1kX2gydjFfdXBzYW1wbGVfc3NlMikKKyAgICAgICAgYWxpZ24gICAxNgorICAgICAgICBnbG9iYWwgIEVYVE4oanNpbWRfaDJ2MV91cHNhbXBsZV9zc2UyKQogCiBFWFROKGpzaW1kX2gydjFfdXBzYW1wbGVfc3NlMik6Ci0JcHVzaAllYnAKLQltb3YJZWJwLGVzcAotOwlwdXNoCWVieAkJOyB1bnVzZWQKLTsJcHVzaAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi07CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotCXB1c2gJZXNpCi0JcHVzaAllZGkKKyAgICAgICAgcHVzaCAgICBlYnAKKyAgICAgICAgbW92ICAgICBlYnAsZXNwCis7ICAgICAgIHB1c2ggICAgZWJ4ICAgICAgICAgICAgIDsgdW51c2VkCis7ICAgICAgIHB1c2ggICAgZWN4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgICAgIHB1c2ggICAgZWR4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgICAgIHB1c2ggICAgZXNpCisgICAgICAgIHB1c2ggICAgZWRpCiAKLQltb3YJZWR4LCBKRElNRU5TSU9OIFtvdXRwdXRfd2lkdGgoZWJwKV0KLQlhZGQJZWR4LCBieXRlICgyKlNJWkVPRl9YTU1XT1JEKS0xCi0JYW5kCWVkeCwgYnl0ZSAtKDIqU0laRU9GX1hNTVdPUkQpCi0JanoJc2hvcnQgLnJldHVybgorICAgICAgICBtb3YgICAgIGVkeCwgSkRJTUVOU0lPTiBbb3V0cHV0X3dpZHRoKGVicCldCisgICAgICAgIGFkZCAgICAgZWR4LCBieXRlICgyKlNJWkVPRl9YTU1XT1JEKS0xCisgICAgICAgIGFuZCAgICAgZWR4LCBieXRlIC0oMipTSVpFT0ZfWE1NV09SRCkKKyAgICAgICAganogICAgICBzaG9ydCAucmV0dXJuCiAKLQltb3YJZWN4LCBJTlQgW21heF92X3NhbXAoZWJwKV0JOyByb3djdHIKLQl0ZXN0CWVjeCxlY3gKLQlqeglzaG9ydCAucmV0dXJuCisgICAgICAgIG1vdiAgICAgZWN4LCBJTlQgW21heF92X3NhbXAoZWJwKV0gICAgICA7IHJvd2N0cgorICAgICAgICB0ZXN0ICAgIGVjeCxlY3gKKyAgICAgICAganogICAgICBzaG9ydCAucmV0dXJuCiAKLQltb3YJZXNpLCBKU0FNUEFSUkFZIFtpbnB1dF9kYXRhKGVicCldCTsgaW5wdXRfZGF0YQotCW1vdgllZGksIFBPSU5URVIgW291dHB1dF9kYXRhX3B0cihlYnApXQotCW1vdgllZGksIEpTQU1QQVJSQVkgW2VkaV0JCQk7IG91dHB1dF9kYXRhCi0JYWxpZ254CTE2LDcKKyAgICAgICAgbW92ICAgICBlc2ksIEpTQU1QQVJSQVkgW2lucHV0X2RhdGEoZWJwKV0gICAgICAgOyBpbnB1dF9kYXRhCisgICAgICAgIG1vdiAgICAgZWRpLCBQT0lOVEVSIFtvdXRwdXRfZGF0YV9wdHIoZWJwKV0KKyAgICAgICAgbW92ICAgICBlZGksIEpTQU1QQVJSQVkgW2VkaV0gICAgICAgICAgICAgICAgICAgOyBvdXRwdXRfZGF0YQorICAgICAgICBhbGlnbnggIDE2LDcKIC5yb3dsb29wOgotCXB1c2gJZWRpCi0JcHVzaAllc2kKKyAgICAgICAgcHVzaCAgICBlZGkKKyAgICAgICAgcHVzaCAgICBlc2kKIAotCW1vdgllc2ksIEpTQU1QUk9XIFtlc2ldCQk7IGlucHRyCi0JbW92CWVkaSwgSlNBTVBST1cgW2VkaV0JCTsgb3V0cHRyCi0JbW92CWVheCxlZHgJCQkJOyBjb2xjdHIKLQlhbGlnbngJMTYsNworICAgICAgICBtb3YgICAgIGVzaSwgSlNBTVBST1cgW2VzaV0gICAgICAgICAgICAgOyBpbnB0cgorICAgICAgICBtb3YgICAgIGVkaSwgSlNBTVBST1cgW2VkaV0gICAgICAgICAgICAgOyBvdXRwdHIKKyAgICAgICAgbW92ICAgICBlYXgsZWR4ICAgICAgICAgICAgICAgICAgICAgICAgIDsgY29sY3RyCisgICAgICAgIGFsaWdueCAgMTYsNwogLmNvbHVtbmxvb3A6CiAKLQltb3ZkcWEJeG1tMCwgWE1NV09SRCBbZXNpKzAqU0laRU9GX1hNTVdPUkRdCisgICAgICAgIG1vdmRxYSAgeG1tMCwgWE1NV09SRCBbZXNpKzAqU0laRU9GX1hNTVdPUkRdCiAKLQltb3ZkcWEgICAgeG1tMSx4bW0wCi0JcHVucGNrbGJ3IHhtbTAseG1tMAotCXB1bnBja2hidyB4bW0xLHhtbTEKKyAgICAgICAgbW92ZHFhICAgIHhtbTEseG1tMAorICAgICAgICBwdW5wY2tsYncgeG1tMCx4bW0wCisgICAgICAgIHB1bnBja2hidyB4bW0xLHhtbTEKIAotCW1vdmRxYQlYTU1XT1JEIFtlZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbTAKLQltb3ZkcWEJWE1NV09SRCBbZWRpKzEqU0laRU9GX1hNTVdPUkRdLCB4bW0xCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbZWRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW0wCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbZWRpKzEqU0laRU9GX1hNTVdPUkRdLCB4bW0xCiAKLQlzdWIJZWF4LCBieXRlIDIqU0laRU9GX1hNTVdPUkQKLQlqeglzaG9ydCAubmV4dHJvdworICAgICAgICBzdWIgICAgIGVheCwgYnl0ZSAyKlNJWkVPRl9YTU1XT1JECisgICAgICAgIGp6ICAgICAgc2hvcnQgLm5leHRyb3cKIAotCW1vdmRxYQl4bW0yLCBYTU1XT1JEIFtlc2krMSpTSVpFT0ZfWE1NV09SRF0KKyAgICAgICAgbW92ZHFhICB4bW0yLCBYTU1XT1JEIFtlc2krMSpTSVpFT0ZfWE1NV09SRF0KIAotCW1vdmRxYSAgICB4bW0zLHhtbTIKLQlwdW5wY2tsYncgeG1tMix4bW0yCi0JcHVucGNraGJ3IHhtbTMseG1tMworICAgICAgICBtb3ZkcWEgICAgeG1tMyx4bW0yCisgICAgICAgIHB1bnBja2xidyB4bW0yLHhtbTIKKyAgICAgICAgcHVucGNraGJ3IHhtbTMseG1tMwogCi0JbW92ZHFhCVhNTVdPUkQgW2VkaSsyKlNJWkVPRl9YTU1XT1JEXSwgeG1tMgotCW1vdmRxYQlYTU1XT1JEIFtlZGkrMypTSVpFT0ZfWE1NV09SRF0sIHhtbTMKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFtlZGkrMipTSVpFT0ZfWE1NV09SRF0sIHhtbTIKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFtlZGkrMypTSVpFT0ZfWE1NV09SRF0sIHhtbTMKIAotCXN1YgllYXgsIGJ5dGUgMipTSVpFT0ZfWE1NV09SRAotCWp6CXNob3J0IC5uZXh0cm93CisgICAgICAgIHN1YiAgICAgZWF4LCBieXRlIDIqU0laRU9GX1hNTVdPUkQKKyAgICAgICAganogICAgICBzaG9ydCAubmV4dHJvdwogCi0JYWRkCWVzaSwgYnl0ZSAyKlNJWkVPRl9YTU1XT1JECTsgaW5wdHIKLQlhZGQJZWRpLCBieXRlIDQqU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKLQlqbXAJc2hvcnQgLmNvbHVtbmxvb3AKLQlhbGlnbngJMTYsNworICAgICAgICBhZGQgICAgIGVzaSwgYnl0ZSAyKlNJWkVPRl9YTU1XT1JEICAgICAgOyBpbnB0cgorICAgICAgICBhZGQgICAgIGVkaSwgYnl0ZSA0KlNJWkVPRl9YTU1XT1JEICAgICAgOyBvdXRwdHIKKyAgICAgICAgam1wICAgICBzaG9ydCAuY29sdW1ubG9vcAorICAgICAgICBhbGlnbnggIDE2LDcKIAogLm5leHRyb3c6Ci0JcG9wCWVzaQotCXBvcAllZGkKKyAgICAgICAgcG9wICAgICBlc2kKKyAgICAgICAgcG9wICAgICBlZGkKIAotCWFkZAllc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCTsgaW5wdXRfZGF0YQotCWFkZAllZGksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCTsgb3V0cHV0X2RhdGEKLQlkZWMJZWN4CQkJCTsgcm93Y3RyCi0JamcJc2hvcnQgLnJvd2xvb3AKKyAgICAgICAgYWRkICAgICBlc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XICAgICAgIDsgaW5wdXRfZGF0YQorICAgICAgICBhZGQgICAgIGVkaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cgICAgICAgOyBvdXRwdXRfZGF0YQorICAgICAgICBkZWMgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyByb3djdHIKKyAgICAgICAgamcgICAgICBzaG9ydCAucm93bG9vcAogCiAucmV0dXJuOgotCXBvcAllZGkKLQlwb3AJZXNpCi07CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi07CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi07CXBvcAllYngJCTsgdW51c2VkCi0JcG9wCWVicAotCXJldAorICAgICAgICBwb3AgICAgIGVkaQorICAgICAgICBwb3AgICAgIGVzaQorOyAgICAgICBwb3AgICAgIGVkeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgICAgICBwb3AgICAgIGVjeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgICAgICBwb3AgICAgIGVieCAgICAgICAgICAgICA7IHVudXNlZAorICAgICAgICBwb3AgICAgIGVicAorICAgICAgICByZXQKIAogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogOwpAQCAtNjMxLDk5ICs2MzEsOTkgQEAKIDsgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyKTsKIDsKIAotJWRlZmluZSBtYXhfdl9zYW1wKGIpCQkoYikrOAkJCTsgaW50IG1heF92X3NhbXBfZmFjdG9yCi0lZGVmaW5lIG91dHB1dF93aWR0aChiKQkoYikrMTIJCTsgSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgKLSVkZWZpbmUgaW5wdXRfZGF0YShiKQkJKGIpKzE2CQk7IEpTQU1QQVJSQVkgaW5wdXRfZGF0YQotJWRlZmluZSBvdXRwdXRfZGF0YV9wdHIoYikJKGIpKzIwCQk7IEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIKKyVkZWZpbmUgbWF4X3Zfc2FtcChiKSAgICAgICAgICAgKGIpKzggICAgICAgICAgIDsgaW50IG1heF92X3NhbXBfZmFjdG9yCislZGVmaW5lIG91dHB1dF93aWR0aChiKSAgICAgICAgIChiKSsxMiAgICAgICAgICA7IEpESU1FTlNJT04gb3V0cHV0X3dpZHRoCislZGVmaW5lIGlucHV0X2RhdGEoYikgICAgICAgICAgIChiKSsxNiAgICAgICAgICA7IEpTQU1QQVJSQVkgaW5wdXRfZGF0YQorJWRlZmluZSBvdXRwdXRfZGF0YV9wdHIoYikgICAgICAoYikrMjAgICAgICAgICAgOyBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyCiAKLQlhbGlnbgkxNgotCWdsb2JhbAlFWFROKGpzaW1kX2gydjJfdXBzYW1wbGVfc3NlMikKKyAgICAgICAgYWxpZ24gICAxNgorICAgICAgICBnbG9iYWwgIEVYVE4oanNpbWRfaDJ2Ml91cHNhbXBsZV9zc2UyKQogCiBFWFROKGpzaW1kX2gydjJfdXBzYW1wbGVfc3NlMik6Ci0JcHVzaAllYnAKLQltb3YJZWJwLGVzcAotCXB1c2gJZWJ4Ci07CXB1c2gJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLQlwdXNoCWVzaQotCXB1c2gJZWRpCisgICAgICAgIHB1c2ggICAgZWJwCisgICAgICAgIG1vdiAgICAgZWJwLGVzcAorICAgICAgICBwdXNoICAgIGVieAorOyAgICAgICBwdXNoICAgIGVjeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgICAgICBwdXNoICAgIGVkeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgICAgICBwdXNoICAgIGVzaQorICAgICAgICBwdXNoICAgIGVkaQogCi0JbW92CWVkeCwgSkRJTUVOU0lPTiBbb3V0cHV0X3dpZHRoKGVicCldCi0JYWRkCWVkeCwgYnl0ZSAoMipTSVpFT0ZfWE1NV09SRCktMQotCWFuZAllZHgsIGJ5dGUgLSgyKlNJWkVPRl9YTU1XT1JEKQotCWp6CW5lYXIgLnJldHVybgorICAgICAgICBtb3YgICAgIGVkeCwgSkRJTUVOU0lPTiBbb3V0cHV0X3dpZHRoKGVicCldCisgICAgICAgIGFkZCAgICAgZWR4LCBieXRlICgyKlNJWkVPRl9YTU1XT1JEKS0xCisgICAgICAgIGFuZCAgICAgZWR4LCBieXRlIC0oMipTSVpFT0ZfWE1NV09SRCkKKyAgICAgICAganogICAgICBuZWFyIC5yZXR1cm4KIAotCW1vdgllY3gsIElOVCBbbWF4X3Zfc2FtcChlYnApXQk7IHJvd2N0cgotCXRlc3QJZWN4LGVjeAotCWp6CW5lYXIgLnJldHVybgorICAgICAgICBtb3YgICAgIGVjeCwgSU5UIFttYXhfdl9zYW1wKGVicCldICAgICAgOyByb3djdHIKKyAgICAgICAgdGVzdCAgICBlY3gsZWN4CisgICAgICAgIGp6ICAgICAgbmVhciAucmV0dXJuCiAKLQltb3YJZXNpLCBKU0FNUEFSUkFZIFtpbnB1dF9kYXRhKGVicCldCTsgaW5wdXRfZGF0YQotCW1vdgllZGksIFBPSU5URVIgW291dHB1dF9kYXRhX3B0cihlYnApXQotCW1vdgllZGksIEpTQU1QQVJSQVkgW2VkaV0JCQk7IG91dHB1dF9kYXRhCi0JYWxpZ254CTE2LDcKKyAgICAgICAgbW92ICAgICBlc2ksIEpTQU1QQVJSQVkgW2lucHV0X2RhdGEoZWJwKV0gICAgICAgOyBpbnB1dF9kYXRhCisgICAgICAgIG1vdiAgICAgZWRpLCBQT0lOVEVSIFtvdXRwdXRfZGF0YV9wdHIoZWJwKV0KKyAgICAgICAgbW92ICAgICBlZGksIEpTQU1QQVJSQVkgW2VkaV0gICAgICAgICAgICAgICAgICAgOyBvdXRwdXRfZGF0YQorICAgICAgICBhbGlnbnggIDE2LDcKIC5yb3dsb29wOgotCXB1c2gJZWRpCi0JcHVzaAllc2kKKyAgICAgICAgcHVzaCAgICBlZGkKKyAgICAgICAgcHVzaCAgICBlc2kKIAotCW1vdgllc2ksIEpTQU1QUk9XIFtlc2ldCQkJOyBpbnB0cgotCW1vdgllYngsIEpTQU1QUk9XIFtlZGkrMCpTSVpFT0ZfSlNBTVBST1ddCTsgb3V0cHRyMAotCW1vdgllZGksIEpTQU1QUk9XIFtlZGkrMSpTSVpFT0ZfSlNBTVBST1ddCTsgb3V0cHRyMQotCW1vdgllYXgsZWR4CQkJCQk7IGNvbGN0cgotCWFsaWdueAkxNiw3CisgICAgICAgIG1vdiAgICAgZXNpLCBKU0FNUFJPVyBbZXNpXSAgICAgICAgICAgICAgICAgICAgIDsgaW5wdHIKKyAgICAgICAgbW92ICAgICBlYngsIEpTQU1QUk9XIFtlZGkrMCpTSVpFT0ZfSlNBTVBST1ddICAgOyBvdXRwdHIwCisgICAgICAgIG1vdiAgICAgZWRpLCBKU0FNUFJPVyBbZWRpKzEqU0laRU9GX0pTQU1QUk9XXSAgIDsgb3V0cHRyMQorICAgICAgICBtb3YgICAgIGVheCxlZHggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IGNvbGN0cgorICAgICAgICBhbGlnbnggIDE2LDcKIC5jb2x1bW5sb29wOgogCi0JbW92ZHFhCXhtbTAsIFhNTVdPUkQgW2VzaSswKlNJWkVPRl9YTU1XT1JEXQorICAgICAgICBtb3ZkcWEgIHhtbTAsIFhNTVdPUkQgW2VzaSswKlNJWkVPRl9YTU1XT1JEXQogCi0JbW92ZHFhICAgIHhtbTEseG1tMAotCXB1bnBja2xidyB4bW0wLHhtbTAKLQlwdW5wY2toYncgeG1tMSx4bW0xCisgICAgICAgIG1vdmRxYSAgICB4bW0xLHhtbTAKKyAgICAgICAgcHVucGNrbGJ3IHhtbTAseG1tMAorICAgICAgICBwdW5wY2toYncgeG1tMSx4bW0xCiAKLQltb3ZkcWEJWE1NV09SRCBbZWJ4KzAqU0laRU9GX1hNTVdPUkRdLCB4bW0wCi0JbW92ZHFhCVhNTVdPUkQgW2VieCsxKlNJWkVPRl9YTU1XT1JEXSwgeG1tMQotCW1vdmRxYQlYTU1XT1JEIFtlZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbTAKLQltb3ZkcWEJWE1NV09SRCBbZWRpKzEqU0laRU9GX1hNTVdPUkRdLCB4bW0xCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbZWJ4KzAqU0laRU9GX1hNTVdPUkRdLCB4bW0wCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbZWJ4KzEqU0laRU9GX1hNTVdPUkRdLCB4bW0xCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbZWRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW0wCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbZWRpKzEqU0laRU9GX1hNTVdPUkRdLCB4bW0xCiAKLQlzdWIJZWF4LCBieXRlIDIqU0laRU9GX1hNTVdPUkQKLQlqeglzaG9ydCAubmV4dHJvdworICAgICAgICBzdWIgICAgIGVheCwgYnl0ZSAyKlNJWkVPRl9YTU1XT1JECisgICAgICAgIGp6ICAgICAgc2hvcnQgLm5leHRyb3cKIAotCW1vdmRxYQl4bW0yLCBYTU1XT1JEIFtlc2krMSpTSVpFT0ZfWE1NV09SRF0KKyAgICAgICAgbW92ZHFhICB4bW0yLCBYTU1XT1JEIFtlc2krMSpTSVpFT0ZfWE1NV09SRF0KIAotCW1vdmRxYSAgICB4bW0zLHhtbTIKLQlwdW5wY2tsYncgeG1tMix4bW0yCi0JcHVucGNraGJ3IHhtbTMseG1tMworICAgICAgICBtb3ZkcWEgICAgeG1tMyx4bW0yCisgICAgICAgIHB1bnBja2xidyB4bW0yLHhtbTIKKyAgICAgICAgcHVucGNraGJ3IHhtbTMseG1tMwogCi0JbW92ZHFhCVhNTVdPUkQgW2VieCsyKlNJWkVPRl9YTU1XT1JEXSwgeG1tMgotCW1vdmRxYQlYTU1XT1JEIFtlYngrMypTSVpFT0ZfWE1NV09SRF0sIHhtbTMKLQltb3ZkcWEJWE1NV09SRCBbZWRpKzIqU0laRU9GX1hNTVdPUkRdLCB4bW0yCi0JbW92ZHFhCVhNTVdPUkQgW2VkaSszKlNJWkVPRl9YTU1XT1JEXSwgeG1tMworICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW2VieCsyKlNJWkVPRl9YTU1XT1JEXSwgeG1tMgorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW2VieCszKlNJWkVPRl9YTU1XT1JEXSwgeG1tMworICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW2VkaSsyKlNJWkVPRl9YTU1XT1JEXSwgeG1tMgorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW2VkaSszKlNJWkVPRl9YTU1XT1JEXSwgeG1tMwogCi0Jc3ViCWVheCwgYnl0ZSAyKlNJWkVPRl9YTU1XT1JECi0JanoJc2hvcnQgLm5leHRyb3cKKyAgICAgICAgc3ViICAgICBlYXgsIGJ5dGUgMipTSVpFT0ZfWE1NV09SRAorICAgICAgICBqeiAgICAgIHNob3J0IC5uZXh0cm93CiAKLQlhZGQJZXNpLCBieXRlIDIqU0laRU9GX1hNTVdPUkQJOyBpbnB0cgotCWFkZAllYngsIGJ5dGUgNCpTSVpFT0ZfWE1NV09SRAk7IG91dHB0cjAKLQlhZGQJZWRpLCBieXRlIDQqU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIxCi0Jam1wCXNob3J0IC5jb2x1bW5sb29wCi0JYWxpZ254CTE2LDcKKyAgICAgICAgYWRkICAgICBlc2ksIGJ5dGUgMipTSVpFT0ZfWE1NV09SRCAgICAgIDsgaW5wdHIKKyAgICAgICAgYWRkICAgICBlYngsIGJ5dGUgNCpTSVpFT0ZfWE1NV09SRCAgICAgIDsgb3V0cHRyMAorICAgICAgICBhZGQgICAgIGVkaSwgYnl0ZSA0KlNJWkVPRl9YTU1XT1JEICAgICAgOyBvdXRwdHIxCisgICAgICAgIGptcCAgICAgc2hvcnQgLmNvbHVtbmxvb3AKKyAgICAgICAgYWxpZ254ICAxNiw3CiAKIC5uZXh0cm93OgotCXBvcAllc2kKLQlwb3AJZWRpCisgICAgICAgIHBvcCAgICAgZXNpCisgICAgICAgIHBvcCAgICAgZWRpCiAKLQlhZGQJZXNpLCBieXRlIDEqU0laRU9GX0pTQU1QUk9XCTsgaW5wdXRfZGF0YQotCWFkZAllZGksIGJ5dGUgMipTSVpFT0ZfSlNBTVBST1cJOyBvdXRwdXRfZGF0YQotCXN1YgllY3gsIGJ5dGUgMgkJCTsgcm93Y3RyCi0JamcJc2hvcnQgLnJvd2xvb3AKKyAgICAgICAgYWRkICAgICBlc2ksIGJ5dGUgMSpTSVpFT0ZfSlNBTVBST1cgICAgIDsgaW5wdXRfZGF0YQorICAgICAgICBhZGQgICAgIGVkaSwgYnl0ZSAyKlNJWkVPRl9KU0FNUFJPVyAgICAgOyBvdXRwdXRfZGF0YQorICAgICAgICBzdWIgICAgIGVjeCwgYnl0ZSAyICAgICAgICAgICAgICAgICAgICAgOyByb3djdHIKKyAgICAgICAgamcgICAgICBzaG9ydCAucm93bG9vcAogCiAucmV0dXJuOgotCXBvcAllZGkKLQlwb3AJZXNpCi07CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi07CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi0JcG9wCWVieAotCXBvcAllYnAKLQlyZXQKKyAgICAgICAgcG9wICAgICBlZGkKKyAgICAgICAgcG9wICAgICBlc2kKKzsgICAgICAgcG9wICAgICBlZHggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICAgICAgcG9wICAgICBlY3ggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICAgICAgcG9wICAgICBlYngKKyAgICAgICAgcG9wICAgICBlYnAKKyAgICAgICAgcmV0CiAKIDsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCiA7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCi0JYWxpZ24JMTYKKyAgICAgICAgYWxpZ24gICAxNgpkaWZmIC0tZ2l0IGEvc2ltZC9qZjNkbmZsdC5hc20gYi9zaW1kL2pmM2RuZmx0LmFzbQppbmRleCA1NDI2NzJkLi4wNjcxMmU4IDEwMDY0NAotLS0gYS9zaW1kL2pmM2RuZmx0LmFzbQorKysgYi9zaW1kL2pmM2RuZmx0LmFzbQpAQCAtMjQsMjMgKzI0LDIzIEBACiAlaW5jbHVkZSAiamRjdC5pbmMiCiAKIDsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlTRUNUSU9OCVNFR19DT05TVAorICAgICAgICBTRUNUSU9OIFNFR19DT05TVAogCi0JYWxpZ256CTE2Ci0JZ2xvYmFsCUVYVE4oamNvbnN0X2ZkY3RfZmxvYXRfM2Rub3cpCisgICAgICAgIGFsaWdueiAgMTYKKyAgICAgICAgZ2xvYmFsICBFWFROKGpjb25zdF9mZGN0X2Zsb2F0XzNkbm93KQogCiBFWFROKGpjb25zdF9mZGN0X2Zsb2F0XzNkbm93KToKIAotUERfMF8zODIJdGltZXMgMiBkZCAgMC4zODI2ODM0MzIzNjUwODk3NzE3Mjg0NjAKLVBEXzBfNzA3CXRpbWVzIDIgZGQgIDAuNzA3MTA2NzgxMTg2NTQ3NTI0NDAwODQ0Ci1QRF8wXzU0MQl0aW1lcyAyIGRkICAwLjU0MTE5NjEwMDE0NjE5Njk4NDM5OTcyMwotUERfMV8zMDYJdGltZXMgMiBkZCAgMS4zMDY1NjI5NjQ4NzYzNzY1Mjc4NTY2NDMKK1BEXzBfMzgyICAgICAgICB0aW1lcyAyIGRkICAwLjM4MjY4MzQzMjM2NTA4OTc3MTcyODQ2MAorUERfMF83MDcgICAgICAgIHRpbWVzIDIgZGQgIDAuNzA3MTA2NzgxMTg2NTQ3NTI0NDAwODQ0CitQRF8wXzU0MSAgICAgICAgdGltZXMgMiBkZCAgMC41NDExOTYxMDAxNDYxOTY5ODQzOTk3MjMKK1BEXzFfMzA2ICAgICAgICB0aW1lcyAyIGRkICAxLjMwNjU2Mjk2NDg3NjM3NjUyNzg1NjY0MwogCi0JYWxpZ256CTE2CisgICAgICAgIGFsaWdueiAgMTYKIAogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCVNFQ1RJT04JU0VHX1RFWFQKLQlCSVRTCTMyCisgICAgICAgIFNFQ1RJT04gU0VHX1RFWFQKKyAgICAgICAgQklUUyAgICAzMgogOwogOyBQZXJmb3JtIHRoZSBmb3J3YXJkIERDVCBvbiBvbmUgYmxvY2sgb2Ygc2FtcGxlcy4KIDsKQEAgLTQ4LDI3MyArNDgsMjczIEBACiA7IGpzaW1kX2ZkY3RfZmxvYXRfM2Rub3cgKEZBU1RfRkxPQVQgKiBkYXRhKQogOwogCi0lZGVmaW5lIGRhdGEoYikJCShiKSs4CQk7IEZBU1RfRkxPQVQgKiBkYXRhCislZGVmaW5lIGRhdGEoYikgICAgICAgICAoYikrOCAgICAgICAgICAgOyBGQVNUX0ZMT0FUICogZGF0YQogCi0lZGVmaW5lIG9yaWdpbmFsX2VicAllYnArMAotJWRlZmluZSB3ayhpKQkJZWJwLShXS19OVU0tKGkpKSpTSVpFT0ZfTU1XT1JECTsgbW13b3JkIHdrW1dLX05VTV0KLSVkZWZpbmUgV0tfTlVNCQkyCislZGVmaW5lIG9yaWdpbmFsX2VicCAgICBlYnArMAorJWRlZmluZSB3ayhpKSAgICAgICAgICAgZWJwLShXS19OVU0tKGkpKSpTSVpFT0ZfTU1XT1JEICA7IG1td29yZCB3a1tXS19OVU1dCislZGVmaW5lIFdLX05VTSAgICAgICAgICAyCiAKLQlhbGlnbgkxNgotCWdsb2JhbAlFWFROKGpzaW1kX2ZkY3RfZmxvYXRfM2Rub3cpCisgICAgICAgIGFsaWduICAgMTYKKyAgICAgICAgZ2xvYmFsICBFWFROKGpzaW1kX2ZkY3RfZmxvYXRfM2Rub3cpCiAKIEVYVE4oanNpbWRfZmRjdF9mbG9hdF8zZG5vdyk6Ci0JcHVzaAllYnAKLQltb3YJZWF4LGVzcAkJCQk7IGVheCA9IG9yaWdpbmFsIGVicAotCXN1Ygllc3AsIGJ5dGUgNAotCWFuZAllc3AsIGJ5dGUgKC1TSVpFT0ZfTU1XT1JEKQk7IGFsaWduIHRvIDY0IGJpdHMKLQltb3YJW2VzcF0sZWF4Ci0JbW92CWVicCxlc3AJCQkJOyBlYnAgPSBhbGlnbmVkIGVicAotCWxlYQllc3AsIFt3aygwKV0KLQlwdXNocGljCWVieAotOwlwdXNoCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLTsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi07CXB1c2gJZXNpCQk7IHVudXNlZAotOwlwdXNoCWVkaQkJOyB1bnVzZWQKKyAgICAgICAgcHVzaCAgICBlYnAKKyAgICAgICAgbW92ICAgICBlYXgsZXNwICAgICAgICAgICAgICAgICAgICAgICAgIDsgZWF4ID0gb3JpZ2luYWwgZWJwCisgICAgICAgIHN1YiAgICAgZXNwLCBieXRlIDQKKyAgICAgICAgYW5kICAgICBlc3AsIGJ5dGUgKC1TSVpFT0ZfTU1XT1JEKSAgICAgIDsgYWxpZ24gdG8gNjQgYml0cworICAgICAgICBtb3YgICAgIFtlc3BdLGVheAorICAgICAgICBtb3YgICAgIGVicCxlc3AgICAgICAgICAgICAgICAgICAgICAgICAgOyBlYnAgPSBhbGlnbmVkIGVicAorICAgICAgICBsZWEgICAgIGVzcCwgW3drKDApXQorICAgICAgICBwdXNocGljIGVieAorOyAgICAgICBwdXNoICAgIGVjeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgICAgICBwdXNoICAgIGVkeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgICAgICBwdXNoICAgIGVzaSAgICAgICAgICAgICA7IHVudXNlZAorOyAgICAgICBwdXNoICAgIGVkaSAgICAgICAgICAgICA7IHVudXNlZAogCi0JZ2V0X0dPVAllYngJCTsgZ2V0IEdPVCBhZGRyZXNzCisgICAgICAgIGdldF9HT1QgZWJ4ICAgICAgICAgICAgIDsgZ2V0IEdPVCBhZGRyZXNzCiAKLQk7IC0tLS0gUGFzcyAxOiBwcm9jZXNzIHJvd3MuCisgICAgICAgIDsgLS0tLSBQYXNzIDE6IHByb2Nlc3Mgcm93cy4KIAotCW1vdgllZHgsIFBPSU5URVIgW2RhdGEoZWF4KV0JOyAoRkFTVF9GTE9BVCAqKQotCW1vdgllY3gsIERDVFNJWkUvMgotCWFsaWdueAkxNiw3CisgICAgICAgIG1vdiAgICAgZWR4LCBQT0lOVEVSIFtkYXRhKGVheCldICAgICAgICA7IChGQVNUX0ZMT0FUICopCisgICAgICAgIG1vdiAgICAgZWN4LCBEQ1RTSVpFLzIKKyAgICAgICAgYWxpZ254ICAxNiw3CiAucm93bG9vcDoKIAotCW1vdnEJbW0wLCBNTVdPUkQgW01NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCi0JbW92cQltbTEsIE1NV09SRCBbTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KLQltb3ZxCW1tMiwgTU1XT1JEIFtNTUJMT0NLKDAsMyxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQotCW1vdnEJbW0zLCBNTVdPUkQgW01NQkxPQ0soMSwzLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgICAgIG1vdnEgICAgbW0wLCBNTVdPUkQgW01NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgICAgIG1vdnEgICAgbW0xLCBNTVdPUkQgW01NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgICAgIG1vdnEgICAgbW0yLCBNTVdPUkQgW01NQkxPQ0soMCwzLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgICAgIG1vdnEgICAgbW0zLCBNTVdPUkQgW01NQkxPQ0soMSwzLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCiAKLQk7IG1tMD0oMDAgMDEpLCBtbTE9KDEwIDExKSwgbW0yPSgwNiAwNyksIG1tMz0oMTYgMTcpCisgICAgICAgIDsgbW0wPSgwMCAwMSksIG1tMT0oMTAgMTEpLCBtbTI9KDA2IDA3KSwgbW0zPSgxNiAxNykKIAotCW1vdnEgICAgICBtbTQsbW0wCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMKLQlwdW5wY2tsZHEgbW0wLG1tMQkJOyBtbTA9KDAwIDEwKT1kYXRhMAotCXB1bnBja2hkcSBtbTQsbW0xCQk7IG1tND0oMDEgMTEpPWRhdGExCi0JbW92cSAgICAgIG1tNSxtbTIJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cwotCXB1bnBja2xkcSBtbTIsbW0zCQk7IG1tMj0oMDYgMTYpPWRhdGE2Ci0JcHVucGNraGRxIG1tNSxtbTMJCTsgbW01PSgwNyAxNyk9ZGF0YTcKKyAgICAgICAgbW92cSAgICAgIG1tNCxtbTAgICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMKKyAgICAgICAgcHVucGNrbGRxIG1tMCxtbTEgICAgICAgICAgICAgICA7IG1tMD0oMDAgMTApPWRhdGEwCisgICAgICAgIHB1bnBja2hkcSBtbTQsbW0xICAgICAgICAgICAgICAgOyBtbTQ9KDAxIDExKT1kYXRhMQorICAgICAgICBtb3ZxICAgICAgbW01LG1tMiAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cworICAgICAgICBwdW5wY2tsZHEgbW0yLG1tMyAgICAgICAgICAgICAgIDsgbW0yPSgwNiAxNik9ZGF0YTYKKyAgICAgICAgcHVucGNraGRxIG1tNSxtbTMgICAgICAgICAgICAgICA7IG1tNT0oMDcgMTcpPWRhdGE3CiAKLQltb3ZxCW1tNixtbTQKLQltb3ZxCW1tNyxtbTAKLQlwZnN1YgltbTQsbW0yCQkJOyBtbTQ9ZGF0YTEtZGF0YTY9dG1wNgotCXBmc3ViCW1tMCxtbTUJCQk7IG1tMD1kYXRhMC1kYXRhNz10bXA3Ci0JcGZhZGQJbW02LG1tMgkJCTsgbW02PWRhdGExK2RhdGE2PXRtcDEKLQlwZmFkZAltbTcsbW01CQkJOyBtbTc9ZGF0YTArZGF0YTc9dG1wMAorICAgICAgICBtb3ZxICAgIG1tNixtbTQKKyAgICAgICAgbW92cSAgICBtbTcsbW0wCisgICAgICAgIHBmc3ViICAgbW00LG1tMiAgICAgICAgICAgICAgICAgOyBtbTQ9ZGF0YTEtZGF0YTY9dG1wNgorICAgICAgICBwZnN1YiAgIG1tMCxtbTUgICAgICAgICAgICAgICAgIDsgbW0wPWRhdGEwLWRhdGE3PXRtcDcKKyAgICAgICAgcGZhZGQgICBtbTYsbW0yICAgICAgICAgICAgICAgICA7IG1tNj1kYXRhMStkYXRhNj10bXAxCisgICAgICAgIHBmYWRkICAgbW03LG1tNSAgICAgICAgICAgICAgICAgOyBtbTc9ZGF0YTArZGF0YTc9dG1wMAogCi0JbW92cQltbTEsIE1NV09SRCBbTU1CTE9DSygwLDEsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KLQltb3ZxCW1tMywgTU1XT1JEIFtNTUJMT0NLKDEsMSxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQotCW1vdnEJbW0yLCBNTVdPUkQgW01NQkxPQ0soMCwyLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCi0JbW92cQltbTUsIE1NV09SRCBbTU1CTE9DSygxLDIsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICAgICAgbW92cSAgICBtbTEsIE1NV09SRCBbTU1CTE9DSygwLDEsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICAgICAgbW92cSAgICBtbTMsIE1NV09SRCBbTU1CTE9DSygxLDEsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICAgICAgbW92cSAgICBtbTIsIE1NV09SRCBbTU1CTE9DSygwLDIsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICAgICAgbW92cSAgICBtbTUsIE1NV09SRCBbTU1CTE9DSygxLDIsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KIAotCTsgbW0xPSgwMiAwMyksIG1tMz0oMTIgMTMpLCBtbTI9KDA0IDA1KSwgbW01PSgxNCAxNSkKKyAgICAgICAgOyBtbTE9KDAyIDAzKSwgbW0zPSgxMiAxMyksIG1tMj0oMDQgMDUpLCBtbTU9KDE0IDE1KQogCi0JbW92cQlNTVdPUkQgW3drKDApXSwgbW00CTsgd2soMCk9dG1wNgotCW1vdnEJTU1XT1JEIFt3aygxKV0sIG1tMAk7IHdrKDEpPXRtcDcKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW3drKDApXSwgbW00ICAgICA7IHdrKDApPXRtcDYKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW3drKDEpXSwgbW0wICAgICA7IHdrKDEpPXRtcDcKIAotCW1vdnEgICAgICBtbTQsbW0xCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMKLQlwdW5wY2tsZHEgbW0xLG1tMwkJOyBtbTE9KDAyIDEyKT1kYXRhMgotCXB1bnBja2hkcSBtbTQsbW0zCQk7IG1tND0oMDMgMTMpPWRhdGEzCi0JbW92cSAgICAgIG1tMCxtbTIJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cwotCXB1bnBja2xkcSBtbTIsbW01CQk7IG1tMj0oMDQgMTQpPWRhdGE0Ci0JcHVucGNraGRxIG1tMCxtbTUJCTsgbW0wPSgwNSAxNSk9ZGF0YTUKKyAgICAgICAgbW92cSAgICAgIG1tNCxtbTEgICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMKKyAgICAgICAgcHVucGNrbGRxIG1tMSxtbTMgICAgICAgICAgICAgICA7IG1tMT0oMDIgMTIpPWRhdGEyCisgICAgICAgIHB1bnBja2hkcSBtbTQsbW0zICAgICAgICAgICAgICAgOyBtbTQ9KDAzIDEzKT1kYXRhMworICAgICAgICBtb3ZxICAgICAgbW0wLG1tMiAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cworICAgICAgICBwdW5wY2tsZHEgbW0yLG1tNSAgICAgICAgICAgICAgIDsgbW0yPSgwNCAxNCk9ZGF0YTQKKyAgICAgICAgcHVucGNraGRxIG1tMCxtbTUgICAgICAgICAgICAgICA7IG1tMD0oMDUgMTUpPWRhdGE1CiAKLQltb3ZxCW1tMyxtbTQKLQltb3ZxCW1tNSxtbTEKLQlwZmFkZAltbTQsbW0yCQkJOyBtbTQ9ZGF0YTMrZGF0YTQ9dG1wMwotCXBmYWRkCW1tMSxtbTAJCQk7IG1tMT1kYXRhMitkYXRhNT10bXAyCi0JcGZzdWIJbW0zLG1tMgkJCTsgbW0zPWRhdGEzLWRhdGE0PXRtcDQKLQlwZnN1YgltbTUsbW0wCQkJOyBtbTU9ZGF0YTItZGF0YTU9dG1wNQorICAgICAgICBtb3ZxICAgIG1tMyxtbTQKKyAgICAgICAgbW92cSAgICBtbTUsbW0xCisgICAgICAgIHBmYWRkICAgbW00LG1tMiAgICAgICAgICAgICAgICAgOyBtbTQ9ZGF0YTMrZGF0YTQ9dG1wMworICAgICAgICBwZmFkZCAgIG1tMSxtbTAgICAgICAgICAgICAgICAgIDsgbW0xPWRhdGEyK2RhdGE1PXRtcDIKKyAgICAgICAgcGZzdWIgICBtbTMsbW0yICAgICAgICAgICAgICAgICA7IG1tMz1kYXRhMy1kYXRhND10bXA0CisgICAgICAgIHBmc3ViICAgbW01LG1tMCAgICAgICAgICAgICAgICAgOyBtbTU9ZGF0YTItZGF0YTU9dG1wNQogCi0JOyAtLSBFdmVuIHBhcnQKKyAgICAgICAgOyAtLSBFdmVuIHBhcnQKIAotCW1vdnEJbW0yLG1tNwotCW1vdnEJbW0wLG1tNgotCXBmc3ViCW1tNyxtbTQJCQk7IG1tNz10bXAxMwotCXBmc3ViCW1tNixtbTEJCQk7IG1tNj10bXAxMgotCXBmYWRkCW1tMixtbTQJCQk7IG1tMj10bXAxMAotCXBmYWRkCW1tMCxtbTEJCQk7IG1tMD10bXAxMQorICAgICAgICBtb3ZxICAgIG1tMixtbTcKKyAgICAgICAgbW92cSAgICBtbTAsbW02CisgICAgICAgIHBmc3ViICAgbW03LG1tNCAgICAgICAgICAgICAgICAgOyBtbTc9dG1wMTMKKyAgICAgICAgcGZzdWIgICBtbTYsbW0xICAgICAgICAgICAgICAgICA7IG1tNj10bXAxMgorICAgICAgICBwZmFkZCAgIG1tMixtbTQgICAgICAgICAgICAgICAgIDsgbW0yPXRtcDEwCisgICAgICAgIHBmYWRkICAgbW0wLG1tMSAgICAgICAgICAgICAgICAgOyBtbTA9dG1wMTEKIAotCXBmYWRkCW1tNixtbTcKLQlwZm11bAltbTYsW0dPVE9GRihlYngsUERfMF83MDcpXSA7IG1tNj16MQorICAgICAgICBwZmFkZCAgIG1tNixtbTcKKyAgICAgICAgcGZtdWwgICBtbTYsW0dPVE9GRihlYngsUERfMF83MDcpXSA7IG1tNj16MQogCi0JbW92cQltbTQsbW0yCi0JbW92cQltbTEsbW03Ci0JcGZzdWIJbW0yLG1tMAkJCTsgbW0yPWRhdGE0Ci0JcGZzdWIJbW03LG1tNgkJCTsgbW03PWRhdGE2Ci0JcGZhZGQJbW00LG1tMAkJCTsgbW00PWRhdGEwCi0JcGZhZGQJbW0xLG1tNgkJCTsgbW0xPWRhdGEyCisgICAgICAgIG1vdnEgICAgbW00LG1tMgorICAgICAgICBtb3ZxICAgIG1tMSxtbTcKKyAgICAgICAgcGZzdWIgICBtbTIsbW0wICAgICAgICAgICAgICAgICA7IG1tMj1kYXRhNAorICAgICAgICBwZnN1YiAgIG1tNyxtbTYgICAgICAgICAgICAgICAgIDsgbW03PWRhdGE2CisgICAgICAgIHBmYWRkICAgbW00LG1tMCAgICAgICAgICAgICAgICAgOyBtbTQ9ZGF0YTAKKyAgICAgICAgcGZhZGQgICBtbTEsbW02ICAgICAgICAgICAgICAgICA7IG1tMT1kYXRhMgogCi0JbW92cQlNTVdPUkQgW01NQkxPQ0soMCwyLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTIKLQltb3ZxCU1NV09SRCBbTU1CTE9DSygwLDMsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tNwotCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXSwgbW00Ci0JbW92cQlNTVdPUkQgW01NQkxPQ0soMCwxLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTEKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMCwyLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTIKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMCwzLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTcKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTQKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMCwxLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTEKIAotCTsgLS0gT2RkIHBhcnQKKyAgICAgICAgOyAtLSBPZGQgcGFydAogCi0JbW92cQltbTAsIE1NV09SRCBbd2soMCldCTsgbW0wPXRtcDYKLQltb3ZxCW1tNiwgTU1XT1JEIFt3aygxKV0JOyBtbTY9dG1wNworICAgICAgICBtb3ZxICAgIG1tMCwgTU1XT1JEIFt3aygwKV0gICAgIDsgbW0wPXRtcDYKKyAgICAgICAgbW92cSAgICBtbTYsIE1NV09SRCBbd2soMSldICAgICA7IG1tNj10bXA3CiAKLQlwZmFkZAltbTMsbW01CQkJOyBtbTM9dG1wMTAKLQlwZmFkZAltbTUsbW0wCQkJOyBtbTU9dG1wMTEKLQlwZmFkZAltbTAsbW02CQkJOyBtbTA9dG1wMTIsIG1tNj10bXA3CisgICAgICAgIHBmYWRkICAgbW0zLG1tNSAgICAgICAgICAgICAgICAgOyBtbTM9dG1wMTAKKyAgICAgICAgcGZhZGQgICBtbTUsbW0wICAgICAgICAgICAgICAgICA7IG1tNT10bXAxMQorICAgICAgICBwZmFkZCAgIG1tMCxtbTYgICAgICAgICAgICAgICAgIDsgbW0wPXRtcDEyLCBtbTY9dG1wNwogCi0JcGZtdWwJbW01LFtHT1RPRkYoZWJ4LFBEXzBfNzA3KV0gOyBtbTU9ejMKKyAgICAgICAgcGZtdWwgICBtbTUsW0dPVE9GRihlYngsUERfMF83MDcpXSA7IG1tNT16MwogCi0JbW92cQltbTIsbW0zCQkJOyBtbTI9dG1wMTAKLQlwZnN1YgltbTMsbW0wCi0JcGZtdWwJbW0zLFtHT1RPRkYoZWJ4LFBEXzBfMzgyKV0gOyBtbTM9ejUKLQlwZm11bAltbTIsW0dPVE9GRihlYngsUERfMF81NDEpXSA7IG1tMj1NVUxUSVBMWSh0bXAxMCxGSVhfMF81NDExOTYxMCkKLQlwZm11bAltbTAsW0dPVE9GRihlYngsUERfMV8zMDYpXSA7IG1tMD1NVUxUSVBMWSh0bXAxMixGSVhfMV8zMDY1NjI5NikKLQlwZmFkZAltbTIsbW0zCQkJOyBtbTI9ejIKLQlwZmFkZAltbTAsbW0zCQkJOyBtbTA9ejQKKyAgICAgICAgbW92cSAgICBtbTIsbW0zICAgICAgICAgICAgICAgICA7IG1tMj10bXAxMAorICAgICAgICBwZnN1YiAgIG1tMyxtbTAKKyAgICAgICAgcGZtdWwgICBtbTMsW0dPVE9GRihlYngsUERfMF8zODIpXSA7IG1tMz16NQorICAgICAgICBwZm11bCAgIG1tMixbR09UT0ZGKGVieCxQRF8wXzU0MSldIDsgbW0yPU1VTFRJUExZKHRtcDEwLEZJWF8wXzU0MTE5NjEwKQorICAgICAgICBwZm11bCAgIG1tMCxbR09UT0ZGKGVieCxQRF8xXzMwNildIDsgbW0wPU1VTFRJUExZKHRtcDEyLEZJWF8xXzMwNjU2Mjk2KQorICAgICAgICBwZmFkZCAgIG1tMixtbTMgICAgICAgICAgICAgICAgIDsgbW0yPXoyCisgICAgICAgIHBmYWRkICAgbW0wLG1tMyAgICAgICAgICAgICAgICAgOyBtbTA9ejQKIAotCW1vdnEJbW03LG1tNgotCXBmc3ViCW1tNixtbTUJCQk7IG1tNj16MTMKLQlwZmFkZAltbTcsbW01CQkJOyBtbTc9ejExCisgICAgICAgIG1vdnEgICAgbW03LG1tNgorICAgICAgICBwZnN1YiAgIG1tNixtbTUgICAgICAgICAgICAgICAgIDsgbW02PXoxMworICAgICAgICBwZmFkZCAgIG1tNyxtbTUgICAgICAgICAgICAgICAgIDsgbW03PXoxMQogCi0JbW92cQltbTQsbW02Ci0JbW92cQltbTEsbW03Ci0JcGZzdWIJbW02LG1tMgkJCTsgbW02PWRhdGEzCi0JcGZzdWIJbW03LG1tMAkJCTsgbW03PWRhdGE3Ci0JcGZhZGQJbW00LG1tMgkJCTsgbW00PWRhdGE1Ci0JcGZhZGQJbW0xLG1tMAkJCTsgbW0xPWRhdGExCisgICAgICAgIG1vdnEgICAgbW00LG1tNgorICAgICAgICBtb3ZxICAgIG1tMSxtbTcKKyAgICAgICAgcGZzdWIgICBtbTYsbW0yICAgICAgICAgICAgICAgICA7IG1tNj1kYXRhMworICAgICAgICBwZnN1YiAgIG1tNyxtbTAgICAgICAgICAgICAgICAgIDsgbW03PWRhdGE3CisgICAgICAgIHBmYWRkICAgbW00LG1tMiAgICAgICAgICAgICAgICAgOyBtbTQ9ZGF0YTUKKyAgICAgICAgcGZhZGQgICBtbTEsbW0wICAgICAgICAgICAgICAgICA7IG1tMT1kYXRhMQogCi0JbW92cQlNTVdPUkQgW01NQkxPQ0soMSwxLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTYKLQltb3ZxCU1NV09SRCBbTU1CTE9DSygxLDMsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tNwotCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDEsMixlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXSwgbW00Ci0JbW92cQlNTVdPUkQgW01NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTEKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMSwxLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTYKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMSwzLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTcKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMSwyLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTQKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTEKIAotCWFkZAllZHgsIGJ5dGUgMipEQ1RTSVpFKlNJWkVPRl9GQVNUX0ZMT0FUCi0JZGVjCWVjeAotCWpuegluZWFyIC5yb3dsb29wCisgICAgICAgIGFkZCAgICAgZWR4LCBieXRlIDIqRENUU0laRSpTSVpFT0ZfRkFTVF9GTE9BVAorICAgICAgICBkZWMgICAgIGVjeAorICAgICAgICBqbnogICAgIG5lYXIgLnJvd2xvb3AKIAotCTsgLS0tLSBQYXNzIDI6IHByb2Nlc3MgY29sdW1ucy4KKyAgICAgICAgOyAtLS0tIFBhc3MgMjogcHJvY2VzcyBjb2x1bW5zLgogCi0JbW92CWVkeCwgUE9JTlRFUiBbZGF0YShlYXgpXQk7IChGQVNUX0ZMT0FUICopCi0JbW92CWVjeCwgRENUU0laRS8yCi0JYWxpZ254CTE2LDcKKyAgICAgICAgbW92ICAgICBlZHgsIFBPSU5URVIgW2RhdGEoZWF4KV0gICAgICAgIDsgKEZBU1RfRkxPQVQgKikKKyAgICAgICAgbW92ICAgICBlY3gsIERDVFNJWkUvMgorICAgICAgICBhbGlnbnggIDE2LDcKIC5jb2x1bW5sb29wOgogCi0JbW92cQltbTAsIE1NV09SRCBbTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KLQltb3ZxCW1tMSwgTU1XT1JEIFtNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQotCW1vdnEJbW0yLCBNTVdPUkQgW01NQkxPQ0soNiwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCi0JbW92cQltbTMsIE1NV09SRCBbTU1CTE9DSyg3LDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICAgICAgbW92cSAgICBtbTAsIE1NV09SRCBbTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICAgICAgbW92cSAgICBtbTEsIE1NV09SRCBbTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICAgICAgbW92cSAgICBtbTIsIE1NV09SRCBbTU1CTE9DSyg2LDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICAgICAgbW92cSAgICBtbTMsIE1NV09SRCBbTU1CTE9DSyg3LDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KIAotCTsgbW0wPSgwMCAxMCksIG1tMT0oMDEgMTEpLCBtbTI9KDYwIDcwKSwgbW0zPSg2MSA3MSkKKyAgICAgICAgOyBtbTA9KDAwIDEwKSwgbW0xPSgwMSAxMSksIG1tMj0oNjAgNzApLCBtbTM9KDYxIDcxKQogCi0JbW92cSAgICAgIG1tNCxtbTAJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cwotCXB1bnBja2xkcSBtbTAsbW0xCQk7IG1tMD0oMDAgMDEpPWRhdGEwCi0JcHVucGNraGRxIG1tNCxtbTEJCTsgbW00PSgxMCAxMSk9ZGF0YTEKLQltb3ZxICAgICAgbW01LG1tMgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzCi0JcHVucGNrbGRxIG1tMixtbTMJCTsgbW0yPSg2MCA2MSk9ZGF0YTYKLQlwdW5wY2toZHEgbW01LG1tMwkJOyBtbTU9KDcwIDcxKT1kYXRhNworICAgICAgICBtb3ZxICAgICAgbW00LG1tMCAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cworICAgICAgICBwdW5wY2tsZHEgbW0wLG1tMSAgICAgICAgICAgICAgIDsgbW0wPSgwMCAwMSk9ZGF0YTAKKyAgICAgICAgcHVucGNraGRxIG1tNCxtbTEgICAgICAgICAgICAgICA7IG1tND0oMTAgMTEpPWRhdGExCisgICAgICAgIG1vdnEgICAgICBtbTUsbW0yICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzCisgICAgICAgIHB1bnBja2xkcSBtbTIsbW0zICAgICAgICAgICAgICAgOyBtbTI9KDYwIDYxKT1kYXRhNgorICAgICAgICBwdW5wY2toZHEgbW01LG1tMyAgICAgICAgICAgICAgIDsgbW01PSg3MCA3MSk9ZGF0YTcKIAotCW1vdnEJbW02LG1tNAotCW1vdnEJbW03LG1tMAotCXBmc3ViCW1tNCxtbTIJCQk7IG1tND1kYXRhMS1kYXRhNj10bXA2Ci0JcGZzdWIJbW0wLG1tNQkJCTsgbW0wPWRhdGEwLWRhdGE3PXRtcDcKLQlwZmFkZAltbTYsbW0yCQkJOyBtbTY9ZGF0YTErZGF0YTY9dG1wMQotCXBmYWRkCW1tNyxtbTUJCQk7IG1tNz1kYXRhMCtkYXRhNz10bXAwCisgICAgICAgIG1vdnEgICAgbW02LG1tNAorICAgICAgICBtb3ZxICAgIG1tNyxtbTAKKyAgICAgICAgcGZzdWIgICBtbTQsbW0yICAgICAgICAgICAgICAgICA7IG1tND1kYXRhMS1kYXRhNj10bXA2CisgICAgICAgIHBmc3ViICAgbW0wLG1tNSAgICAgICAgICAgICAgICAgOyBtbTA9ZGF0YTAtZGF0YTc9dG1wNworICAgICAgICBwZmFkZCAgIG1tNixtbTIgICAgICAgICAgICAgICAgIDsgbW02PWRhdGExK2RhdGE2PXRtcDEKKyAgICAgICAgcGZhZGQgICBtbTcsbW01ICAgICAgICAgICAgICAgICA7IG1tNz1kYXRhMCtkYXRhNz10bXAwCiAKLQltb3ZxCW1tMSwgTU1XT1JEIFtNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQotCW1vdnEJbW0zLCBNTVdPUkQgW01NQkxPQ0soMywwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCi0JbW92cQltbTIsIE1NV09SRCBbTU1CTE9DSyg0LDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KLQltb3ZxCW1tNSwgTU1XT1JEIFtNTUJMT0NLKDUsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgICAgICBtb3ZxICAgIG1tMSwgTU1XT1JEIFtNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgICAgICBtb3ZxICAgIG1tMywgTU1XT1JEIFtNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgICAgICBtb3ZxICAgIG1tMiwgTU1XT1JEIFtNTUJMT0NLKDQsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgICAgICBtb3ZxICAgIG1tNSwgTU1XT1JEIFtNTUJMT0NLKDUsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQogCi0JOyBtbTE9KDIwIDMwKSwgbW0zPSgyMSAzMSksIG1tMj0oNDAgNTApLCBtbTU9KDQxIDUxKQorICAgICAgICA7IG1tMT0oMjAgMzApLCBtbTM9KDIxIDMxKSwgbW0yPSg0MCA1MCksIG1tNT0oNDEgNTEpCiAKLQltb3ZxCU1NV09SRCBbd2soMCldLCBtbTQJOyB3aygwKT10bXA2Ci0JbW92cQlNTVdPUkQgW3drKDEpXSwgbW0wCTsgd2soMSk9dG1wNworICAgICAgICBtb3ZxICAgIE1NV09SRCBbd2soMCldLCBtbTQgICAgIDsgd2soMCk9dG1wNgorICAgICAgICBtb3ZxICAgIE1NV09SRCBbd2soMSldLCBtbTAgICAgIDsgd2soMSk9dG1wNwogCi0JbW92cSAgICAgIG1tNCxtbTEJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cwotCXB1bnBja2xkcSBtbTEsbW0zCQk7IG1tMT0oMjAgMjEpPWRhdGEyCi0JcHVucGNraGRxIG1tNCxtbTMJCTsgbW00PSgzMCAzMSk9ZGF0YTMKLQltb3ZxICAgICAgbW0wLG1tMgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzCi0JcHVucGNrbGRxIG1tMixtbTUJCTsgbW0yPSg0MCA0MSk9ZGF0YTQKLQlwdW5wY2toZHEgbW0wLG1tNQkJOyBtbTA9KDUwIDUxKT1kYXRhNQorICAgICAgICBtb3ZxICAgICAgbW00LG1tMSAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cworICAgICAgICBwdW5wY2tsZHEgbW0xLG1tMyAgICAgICAgICAgICAgIDsgbW0xPSgyMCAyMSk9ZGF0YTIKKyAgICAgICAgcHVucGNraGRxIG1tNCxtbTMgICAgICAgICAgICAgICA7IG1tND0oMzAgMzEpPWRhdGEzCisgICAgICAgIG1vdnEgICAgICBtbTAsbW0yICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzCisgICAgICAgIHB1bnBja2xkcSBtbTIsbW01ICAgICAgICAgICAgICAgOyBtbTI9KDQwIDQxKT1kYXRhNAorICAgICAgICBwdW5wY2toZHEgbW0wLG1tNSAgICAgICAgICAgICAgIDsgbW0wPSg1MCA1MSk9ZGF0YTUKIAotCW1vdnEJbW0zLG1tNAotCW1vdnEJbW01LG1tMQotCXBmYWRkCW1tNCxtbTIJCQk7IG1tND1kYXRhMytkYXRhND10bXAzCi0JcGZhZGQJbW0xLG1tMAkJCTsgbW0xPWRhdGEyK2RhdGE1PXRtcDIKLQlwZnN1YgltbTMsbW0yCQkJOyBtbTM9ZGF0YTMtZGF0YTQ9dG1wNAotCXBmc3ViCW1tNSxtbTAJCQk7IG1tNT1kYXRhMi1kYXRhNT10bXA1CisgICAgICAgIG1vdnEgICAgbW0zLG1tNAorICAgICAgICBtb3ZxICAgIG1tNSxtbTEKKyAgICAgICAgcGZhZGQgICBtbTQsbW0yICAgICAgICAgICAgICAgICA7IG1tND1kYXRhMytkYXRhND10bXAzCisgICAgICAgIHBmYWRkICAgbW0xLG1tMCAgICAgICAgICAgICAgICAgOyBtbTE9ZGF0YTIrZGF0YTU9dG1wMgorICAgICAgICBwZnN1YiAgIG1tMyxtbTIgICAgICAgICAgICAgICAgIDsgbW0zPWRhdGEzLWRhdGE0PXRtcDQKKyAgICAgICAgcGZzdWIgICBtbTUsbW0wICAgICAgICAgICAgICAgICA7IG1tNT1kYXRhMi1kYXRhNT10bXA1CiAKLQk7IC0tIEV2ZW4gcGFydAorICAgICAgICA7IC0tIEV2ZW4gcGFydAogCi0JbW92cQltbTIsbW03Ci0JbW92cQltbTAsbW02Ci0JcGZzdWIJbW03LG1tNAkJCTsgbW03PXRtcDEzCi0JcGZzdWIJbW02LG1tMQkJCTsgbW02PXRtcDEyCi0JcGZhZGQJbW0yLG1tNAkJCTsgbW0yPXRtcDEwCi0JcGZhZGQJbW0wLG1tMQkJCTsgbW0wPXRtcDExCisgICAgICAgIG1vdnEgICAgbW0yLG1tNworICAgICAgICBtb3ZxICAgIG1tMCxtbTYKKyAgICAgICAgcGZzdWIgICBtbTcsbW00ICAgICAgICAgICAgICAgICA7IG1tNz10bXAxMworICAgICAgICBwZnN1YiAgIG1tNixtbTEgICAgICAgICAgICAgICAgIDsgbW02PXRtcDEyCisgICAgICAgIHBmYWRkICAgbW0yLG1tNCAgICAgICAgICAgICAgICAgOyBtbTI9dG1wMTAKKyAgICAgICAgcGZhZGQgICBtbTAsbW0xICAgICAgICAgICAgICAgICA7IG1tMD10bXAxMQogCi0JcGZhZGQJbW02LG1tNwotCXBmbXVsCW1tNixbR09UT0ZGKGVieCxQRF8wXzcwNyldIDsgbW02PXoxCisgICAgICAgIHBmYWRkICAgbW02LG1tNworICAgICAgICBwZm11bCAgIG1tNixbR09UT0ZGKGVieCxQRF8wXzcwNyldIDsgbW02PXoxCiAKLQltb3ZxCW1tNCxtbTIKLQltb3ZxCW1tMSxtbTcKLQlwZnN1YgltbTIsbW0wCQkJOyBtbTI9ZGF0YTQKLQlwZnN1YgltbTcsbW02CQkJOyBtbTc9ZGF0YTYKLQlwZmFkZAltbTQsbW0wCQkJOyBtbTQ9ZGF0YTAKLQlwZmFkZAltbTEsbW02CQkJOyBtbTE9ZGF0YTIKKyAgICAgICAgbW92cSAgICBtbTQsbW0yCisgICAgICAgIG1vdnEgICAgbW0xLG1tNworICAgICAgICBwZnN1YiAgIG1tMixtbTAgICAgICAgICAgICAgICAgIDsgbW0yPWRhdGE0CisgICAgICAgIHBmc3ViICAgbW03LG1tNiAgICAgICAgICAgICAgICAgOyBtbTc9ZGF0YTYKKyAgICAgICAgcGZhZGQgICBtbTQsbW0wICAgICAgICAgICAgICAgICA7IG1tND1kYXRhMAorICAgICAgICBwZmFkZCAgIG1tMSxtbTYgICAgICAgICAgICAgICAgIDsgbW0xPWRhdGEyCiAKLQltb3ZxCU1NV09SRCBbTU1CTE9DSyg0LDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tMgotCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDYsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXSwgbW03Ci0JbW92cQlNTVdPUkQgW01NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTQKLQltb3ZxCU1NV09SRCBbTU1CTE9DSygyLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tMQorICAgICAgICBtb3ZxICAgIE1NV09SRCBbTU1CTE9DSyg0LDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tMgorICAgICAgICBtb3ZxICAgIE1NV09SRCBbTU1CTE9DSyg2LDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tNworICAgICAgICBtb3ZxICAgIE1NV09SRCBbTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tNAorICAgICAgICBtb3ZxICAgIE1NV09SRCBbTU1CTE9DSygyLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tMQogCi0JOyAtLSBPZGQgcGFydAorICAgICAgICA7IC0tIE9kZCBwYXJ0CiAKLQltb3ZxCW1tMCwgTU1XT1JEIFt3aygwKV0JOyBtbTA9dG1wNgotCW1vdnEJbW02LCBNTVdPUkQgW3drKDEpXQk7IG1tNj10bXA3CisgICAgICAgIG1vdnEgICAgbW0wLCBNTVdPUkQgW3drKDApXSAgICAgOyBtbTA9dG1wNgorICAgICAgICBtb3ZxICAgIG1tNiwgTU1XT1JEIFt3aygxKV0gICAgIDsgbW02PXRtcDcKIAotCXBmYWRkCW1tMyxtbTUJCQk7IG1tMz10bXAxMAotCXBmYWRkCW1tNSxtbTAJCQk7IG1tNT10bXAxMQotCXBmYWRkCW1tMCxtbTYJCQk7IG1tMD10bXAxMiwgbW02PXRtcDcKKyAgICAgICAgcGZhZGQgICBtbTMsbW01ICAgICAgICAgICAgICAgICA7IG1tMz10bXAxMAorICAgICAgICBwZmFkZCAgIG1tNSxtbTAgICAgICAgICAgICAgICAgIDsgbW01PXRtcDExCisgICAgICAgIHBmYWRkICAgbW0wLG1tNiAgICAgICAgICAgICAgICAgOyBtbTA9dG1wMTIsIG1tNj10bXA3CiAKLQlwZm11bAltbTUsW0dPVE9GRihlYngsUERfMF83MDcpXSA7IG1tNT16MworICAgICAgICBwZm11bCAgIG1tNSxbR09UT0ZGKGVieCxQRF8wXzcwNyldIDsgbW01PXozCiAKLQltb3ZxCW1tMixtbTMJCQk7IG1tMj10bXAxMAotCXBmc3ViCW1tMyxtbTAKLQlwZm11bAltbTMsW0dPVE9GRihlYngsUERfMF8zODIpXSA7IG1tMz16NQotCXBmbXVsCW1tMixbR09UT0ZGKGVieCxQRF8wXzU0MSldIDsgbW0yPU1VTFRJUExZKHRtcDEwLEZJWF8wXzU0MTE5NjEwKQotCXBmbXVsCW1tMCxbR09UT0ZGKGVieCxQRF8xXzMwNildIDsgbW0wPU1VTFRJUExZKHRtcDEyLEZJWF8xXzMwNjU2Mjk2KQotCXBmYWRkCW1tMixtbTMJCQk7IG1tMj16MgotCXBmYWRkCW1tMCxtbTMJCQk7IG1tMD16NAorICAgICAgICBtb3ZxICAgIG1tMixtbTMgICAgICAgICAgICAgICAgIDsgbW0yPXRtcDEwCisgICAgICAgIHBmc3ViICAgbW0zLG1tMAorICAgICAgICBwZm11bCAgIG1tMyxbR09UT0ZGKGVieCxQRF8wXzM4MildIDsgbW0zPXo1CisgICAgICAgIHBmbXVsICAgbW0yLFtHT1RPRkYoZWJ4LFBEXzBfNTQxKV0gOyBtbTI9TVVMVElQTFkodG1wMTAsRklYXzBfNTQxMTk2MTApCisgICAgICAgIHBmbXVsICAgbW0wLFtHT1RPRkYoZWJ4LFBEXzFfMzA2KV0gOyBtbTA9TVVMVElQTFkodG1wMTIsRklYXzFfMzA2NTYyOTYpCisgICAgICAgIHBmYWRkICAgbW0yLG1tMyAgICAgICAgICAgICAgICAgOyBtbTI9ejIKKyAgICAgICAgcGZhZGQgICBtbTAsbW0zICAgICAgICAgICAgICAgICA7IG1tMD16NAogCi0JbW92cQltbTcsbW02Ci0JcGZzdWIJbW02LG1tNQkJCTsgbW02PXoxMwotCXBmYWRkCW1tNyxtbTUJCQk7IG1tNz16MTEKKyAgICAgICAgbW92cSAgICBtbTcsbW02CisgICAgICAgIHBmc3ViICAgbW02LG1tNSAgICAgICAgICAgICAgICAgOyBtbTY9ejEzCisgICAgICAgIHBmYWRkICAgbW03LG1tNSAgICAgICAgICAgICAgICAgOyBtbTc9ejExCiAKLQltb3ZxCW1tNCxtbTYKLQltb3ZxCW1tMSxtbTcKLQlwZnN1YgltbTYsbW0yCQkJOyBtbTY9ZGF0YTMKLQlwZnN1YgltbTcsbW0wCQkJOyBtbTc9ZGF0YTcKLQlwZmFkZAltbTQsbW0yCQkJOyBtbTQ9ZGF0YTUKLQlwZmFkZAltbTEsbW0wCQkJOyBtbTE9ZGF0YTEKKyAgICAgICAgbW92cSAgICBtbTQsbW02CisgICAgICAgIG1vdnEgICAgbW0xLG1tNworICAgICAgICBwZnN1YiAgIG1tNixtbTIgICAgICAgICAgICAgICAgIDsgbW02PWRhdGEzCisgICAgICAgIHBmc3ViICAgbW03LG1tMCAgICAgICAgICAgICAgICAgOyBtbTc9ZGF0YTcKKyAgICAgICAgcGZhZGQgICBtbTQsbW0yICAgICAgICAgICAgICAgICA7IG1tND1kYXRhNQorICAgICAgICBwZmFkZCAgIG1tMSxtbTAgICAgICAgICAgICAgICAgIDsgbW0xPWRhdGExCiAKLQltb3ZxCU1NV09SRCBbTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tNgotCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDcsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXSwgbW03Ci0JbW92cQlNTVdPUkQgW01NQkxPQ0soNSwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTQKLQltb3ZxCU1NV09SRCBbTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tMQorICAgICAgICBtb3ZxICAgIE1NV09SRCBbTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tNgorICAgICAgICBtb3ZxICAgIE1NV09SRCBbTU1CTE9DSyg3LDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tNworICAgICAgICBtb3ZxICAgIE1NV09SRCBbTU1CTE9DSyg1LDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tNAorICAgICAgICBtb3ZxICAgIE1NV09SRCBbTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tMQogCi0JYWRkCWVkeCwgYnl0ZSAyKlNJWkVPRl9GQVNUX0ZMT0FUCi0JZGVjCWVjeAotCWpuegluZWFyIC5jb2x1bW5sb29wCisgICAgICAgIGFkZCAgICAgZWR4LCBieXRlIDIqU0laRU9GX0ZBU1RfRkxPQVQKKyAgICAgICAgZGVjICAgICBlY3gKKyAgICAgICAgam56ICAgICBuZWFyIC5jb2x1bW5sb29wCiAKLQlmZW1tcwkJOyBlbXB0eSBNTVgvM0ROb3chIHN0YXRlCisgICAgICAgIGZlbW1zICAgICAgICAgICA7IGVtcHR5IE1NWC8zRE5vdyEgc3RhdGUKIAotOwlwb3AJZWRpCQk7IHVudXNlZAotOwlwb3AJZXNpCQk7IHVudXNlZAotOwlwb3AJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotOwlwb3AJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotCXBvcHBpYwllYngKLQltb3YJZXNwLGVicAkJOyBlc3AgPC0gYWxpZ25lZCBlYnAKLQlwb3AJZXNwCQk7IGVzcCA8LSBvcmlnaW5hbCBlYnAKLQlwb3AJZWJwCi0JcmV0Cis7ICAgICAgIHBvcCAgICAgZWRpICAgICAgICAgICAgIDsgdW51c2VkCis7ICAgICAgIHBvcCAgICAgZXNpICAgICAgICAgICAgIDsgdW51c2VkCis7ICAgICAgIHBvcCAgICAgZWR4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgICAgIHBvcCAgICAgZWN4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgICAgIHBvcHBpYyAgZWJ4CisgICAgICAgIG1vdiAgICAgZXNwLGVicCAgICAgICAgIDsgZXNwIDwtIGFsaWduZWQgZWJwCisgICAgICAgIHBvcCAgICAgZXNwICAgICAgICAgICAgIDsgZXNwIDwtIG9yaWdpbmFsIGVicAorICAgICAgICBwb3AgICAgIGVicAorICAgICAgICByZXQKIAogOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKIDsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KLQlhbGlnbgkxNgorICAgICAgICBhbGlnbiAgIDE2CmRpZmYgLS1naXQgYS9zaW1kL2pmbW14ZnN0LmFzbSBiL3NpbWQvamZtbXhmc3QuYXNtCmluZGV4IDA2NDcyNDIuLmQ4Y2Q0YjkgMTAwNjQ0Ci0tLSBhL3NpbWQvamZtbXhmc3QuYXNtCisrKyBiL3NpbWQvamZtbXhmc3QuYXNtCkBAIC0yNiwyNCArMjYsMjQgQEAKIAogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0lZGVmaW5lIENPTlNUX0JJVFMJOAk7IDE0IGlzIGFsc28gT0suCislZGVmaW5lIENPTlNUX0JJVFMgICAgICA4ICAgICAgIDsgMTQgaXMgYWxzbyBPSy4KIAogJWlmIENPTlNUX0JJVFMgPT0gOAotRl8wXzM4MgllcXUJIDk4CQk7IEZJWCgwLjM4MjY4MzQzMykKLUZfMF81NDEJZXF1CTEzOQkJOyBGSVgoMC41NDExOTYxMDApCi1GXzBfNzA3CWVxdQkxODEJCTsgRklYKDAuNzA3MTA2NzgxKQotRl8xXzMwNgllcXUJMzM0CQk7IEZJWCgxLjMwNjU2Mjk2NSkKK0ZfMF8zODIgZXF1ICAgICAgOTggICAgICAgICAgICAgOyBGSVgoMC4zODI2ODM0MzMpCitGXzBfNTQxIGVxdSAgICAgMTM5ICAgICAgICAgICAgIDsgRklYKDAuNTQxMTk2MTAwKQorRl8wXzcwNyBlcXUgICAgIDE4MSAgICAgICAgICAgICA7IEZJWCgwLjcwNzEwNjc4MSkKK0ZfMV8zMDYgZXF1ICAgICAzMzQgICAgICAgICAgICAgOyBGSVgoMS4zMDY1NjI5NjUpCiAlZWxzZQogOyBOQVNNIGNhbm5vdCBkbyBjb21waWxlLXRpbWUgYXJpdGhtZXRpYyBvbiBmbG9hdGluZy1wb2ludCBjb25zdGFudHMuCiAlZGVmaW5lIERFU0NBTEUoeCxuKSAgKCgoeCkrKDE8PCgobiktMSkpKT4+KG4pKQotRl8wXzM4MgllcXUJREVTQ0FMRSggNDEwOTAzMjA3LDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuMzgyNjgzNDMzKQotRl8wXzU0MQllcXUJREVTQ0FMRSggNTgxMTA0ODg3LDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuNTQxMTk2MTAwKQotRl8wXzcwNwllcXUJREVTQ0FMRSggNzU5MjUwMTI0LDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuNzA3MTA2NzgxKQotRl8xXzMwNgllcXUJREVTQ0FMRSgxNDAyOTExMzAxLDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuMzA2NTYyOTY1KQorRl8wXzM4MiBlcXUgICAgIERFU0NBTEUoIDQxMDkwMzIwNywzMC1DT05TVF9CSVRTKSAgICAgICA7IEZJWCgwLjM4MjY4MzQzMykKK0ZfMF81NDEgZXF1ICAgICBERVNDQUxFKCA1ODExMDQ4ODcsMzAtQ09OU1RfQklUUykgICAgICAgOyBGSVgoMC41NDExOTYxMDApCitGXzBfNzA3IGVxdSAgICAgREVTQ0FMRSggNzU5MjUwMTI0LDMwLUNPTlNUX0JJVFMpICAgICAgIDsgRklYKDAuNzA3MTA2NzgxKQorRl8xXzMwNiBlcXUgICAgIERFU0NBTEUoMTQwMjkxMTMwMSwzMC1DT05TVF9CSVRTKSAgICAgICA7IEZJWCgxLjMwNjU2Mjk2NSkKICVlbmRpZgogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JU0VDVElPTglTRUdfQ09OU1QKKyAgICAgICAgU0VDVElPTiBTRUdfQ09OU1QKIAogOyBQUkVfTVVMVElQTFlfU0NBTEVfQklUUyA8PSAyICh0byBhdm9pZCBvdmVyZmxvdykKIDsgQ09OU1RfQklUUyArIENPTlNUX1NISUZUICsgUFJFX01VTFRJUExZX1NDQUxFX0JJVFMgPT0gMTYgKGZvciBwbXVsaHcpCkBAIC01MSwyMSArNTEsMjEgQEAKICVkZWZpbmUgUFJFX01VTFRJUExZX1NDQUxFX0JJVFMgICAyCiAlZGVmaW5lIENPTlNUX1NISUZUICAgICAoMTYgLSBQUkVfTVVMVElQTFlfU0NBTEVfQklUUyAtIENPTlNUX0JJVFMpCiAKLQlhbGlnbnoJMTYKLQlnbG9iYWwJRVhUTihqY29uc3RfZmRjdF9pZmFzdF9tbXgpCisgICAgICAgIGFsaWdueiAgMTYKKyAgICAgICAgZ2xvYmFsICBFWFROKGpjb25zdF9mZGN0X2lmYXN0X21teCkKIAogRVhUTihqY29uc3RfZmRjdF9pZmFzdF9tbXgpOgogCi1QV19GMDcwNwl0aW1lcyA0IGR3ICBGXzBfNzA3IDw8IENPTlNUX1NISUZUCi1QV19GMDM4Mgl0aW1lcyA0IGR3ICBGXzBfMzgyIDw8IENPTlNUX1NISUZUCi1QV19GMDU0MQl0aW1lcyA0IGR3ICBGXzBfNTQxIDw8IENPTlNUX1NISUZUCi1QV19GMTMwNgl0aW1lcyA0IGR3ICBGXzFfMzA2IDw8IENPTlNUX1NISUZUCitQV19GMDcwNyAgICAgICAgdGltZXMgNCBkdyAgRl8wXzcwNyA8PCBDT05TVF9TSElGVAorUFdfRjAzODIgICAgICAgIHRpbWVzIDQgZHcgIEZfMF8zODIgPDwgQ09OU1RfU0hJRlQKK1BXX0YwNTQxICAgICAgICB0aW1lcyA0IGR3ICBGXzBfNTQxIDw8IENPTlNUX1NISUZUCitQV19GMTMwNiAgICAgICAgdGltZXMgNCBkdyAgRl8xXzMwNiA8PCBDT05TVF9TSElGVAogCi0JYWxpZ256CTE2CisgICAgICAgIGFsaWdueiAgMTYKIAogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCVNFQ1RJT04JU0VHX1RFWFQKLQlCSVRTCTMyCisgICAgICAgIFNFQ1RJT04gU0VHX1RFWFQKKyAgICAgICAgQklUUyAgICAzMgogOwogOyBQZXJmb3JtIHRoZSBmb3J3YXJkIERDVCBvbiBvbmUgYmxvY2sgb2Ygc2FtcGxlcy4KIDsKQEAgLTczLDMyNSArNzMsMzI1IEBACiA7IGpzaW1kX2ZkY3RfaWZhc3RfbW14IChEQ1RFTEVNICogZGF0YSkKIDsKIAotJWRlZmluZSBkYXRhKGIpCQkoYikrOAkJOyBEQ1RFTEVNICogZGF0YQorJWRlZmluZSBkYXRhKGIpICAgICAgICAgKGIpKzggICAgICAgICAgIDsgRENURUxFTSAqIGRhdGEKIAotJWRlZmluZSBvcmlnaW5hbF9lYnAJZWJwKzAKLSVkZWZpbmUgd2soaSkJCWVicC0oV0tfTlVNLShpKSkqU0laRU9GX01NV09SRAk7IG1td29yZCB3a1tXS19OVU1dCi0lZGVmaW5lIFdLX05VTQkJMgorJWRlZmluZSBvcmlnaW5hbF9lYnAgICAgZWJwKzAKKyVkZWZpbmUgd2soaSkgICAgICAgICAgIGVicC0oV0tfTlVNLShpKSkqU0laRU9GX01NV09SRCAgOyBtbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0gICAgICAgICAgMgogCi0JYWxpZ24JMTYKLQlnbG9iYWwJRVhUTihqc2ltZF9mZGN0X2lmYXN0X21teCkKKyAgICAgICAgYWxpZ24gICAxNgorICAgICAgICBnbG9iYWwgIEVYVE4oanNpbWRfZmRjdF9pZmFzdF9tbXgpCiAKIEVYVE4oanNpbWRfZmRjdF9pZmFzdF9tbXgpOgotCXB1c2gJZWJwCi0JbW92CWVheCxlc3AJCQkJOyBlYXggPSBvcmlnaW5hbCBlYnAKLQlzdWIJZXNwLCBieXRlIDQKLQlhbmQJZXNwLCBieXRlICgtU0laRU9GX01NV09SRCkJOyBhbGlnbiB0byA2NCBiaXRzCi0JbW92CVtlc3BdLGVheAotCW1vdgllYnAsZXNwCQkJCTsgZWJwID0gYWxpZ25lZCBlYnAKLQlsZWEJZXNwLCBbd2soMCldCi0JcHVzaHBpYwllYngKLTsJcHVzaAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi07CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotOwlwdXNoCWVzaQkJOyB1bnVzZWQKLTsJcHVzaAllZGkJCTsgdW51c2VkCisgICAgICAgIHB1c2ggICAgZWJwCisgICAgICAgIG1vdiAgICAgZWF4LGVzcCAgICAgICAgICAgICAgICAgICAgICAgICA7IGVheCA9IG9yaWdpbmFsIGVicAorICAgICAgICBzdWIgICAgIGVzcCwgYnl0ZSA0CisgICAgICAgIGFuZCAgICAgZXNwLCBieXRlICgtU0laRU9GX01NV09SRCkgICAgICA7IGFsaWduIHRvIDY0IGJpdHMKKyAgICAgICAgbW92ICAgICBbZXNwXSxlYXgKKyAgICAgICAgbW92ICAgICBlYnAsZXNwICAgICAgICAgICAgICAgICAgICAgICAgIDsgZWJwID0gYWxpZ25lZCBlYnAKKyAgICAgICAgbGVhICAgICBlc3AsIFt3aygwKV0KKyAgICAgICAgcHVzaHBpYyBlYngKKzsgICAgICAgcHVzaCAgICBlY3ggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICAgICAgcHVzaCAgICBlZHggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICAgICAgcHVzaCAgICBlc2kgICAgICAgICAgICAgOyB1bnVzZWQKKzsgICAgICAgcHVzaCAgICBlZGkgICAgICAgICAgICAgOyB1bnVzZWQKIAotCWdldF9HT1QJZWJ4CQk7IGdldCBHT1QgYWRkcmVzcworICAgICAgICBnZXRfR09UIGVieCAgICAgICAgICAgICA7IGdldCBHT1QgYWRkcmVzcwogCi0JOyAtLS0tIFBhc3MgMTogcHJvY2VzcyByb3dzLgorICAgICAgICA7IC0tLS0gUGFzcyAxOiBwcm9jZXNzIHJvd3MuCiAKLQltb3YJZWR4LCBQT0lOVEVSIFtkYXRhKGVheCldCTsgKERDVEVMRU0gKikKLQltb3YJZWN4LCBEQ1RTSVpFLzQKLQlhbGlnbngJMTYsNworICAgICAgICBtb3YgICAgIGVkeCwgUE9JTlRFUiBbZGF0YShlYXgpXSAgICAgICAgOyAoRENURUxFTSAqKQorICAgICAgICBtb3YgICAgIGVjeCwgRENUU0laRS80CisgICAgICAgIGFsaWdueCAgMTYsNwogLnJvd2xvb3A6CiAKLQltb3ZxCW1tMCwgTU1XT1JEIFtNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQotCW1vdnEJbW0xLCBNTVdPUkQgW01NQkxPQ0soMywwLGVkeCxTSVpFT0ZfRENURUxFTSldCi0JbW92cQltbTIsIE1NV09SRCBbTU1CTE9DSygyLDEsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KLQltb3ZxCW1tMywgTU1XT1JEIFtNTUJMT0NLKDMsMSxlZHgsU0laRU9GX0RDVEVMRU0pXQorICAgICAgICBtb3ZxICAgIG1tMCwgTU1XT1JEIFtNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorICAgICAgICBtb3ZxICAgIG1tMSwgTU1XT1JEIFtNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorICAgICAgICBtb3ZxICAgIG1tMiwgTU1XT1JEIFtNTUJMT0NLKDIsMSxlZHgsU0laRU9GX0RDVEVMRU0pXQorICAgICAgICBtb3ZxICAgIG1tMywgTU1XT1JEIFtNTUJMT0NLKDMsMSxlZHgsU0laRU9GX0RDVEVMRU0pXQogCi0JOyBtbTA9KDIwIDIxIDIyIDIzKSwgbW0yPSgyNCAyNSAyNiAyNykKLQk7IG1tMT0oMzAgMzEgMzIgMzMpLCBtbTM9KDM0IDM1IDM2IDM3KQorICAgICAgICA7IG1tMD0oMjAgMjEgMjIgMjMpLCBtbTI9KDI0IDI1IDI2IDI3KQorICAgICAgICA7IG1tMT0oMzAgMzEgMzIgMzMpLCBtbTM9KDM0IDM1IDM2IDM3KQogCi0JbW92cSAgICAgIG1tNCxtbTAJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQotCXB1bnBja2x3ZCBtbTAsbW0xCQk7IG1tMD0oMjAgMzAgMjEgMzEpCi0JcHVucGNraHdkIG1tNCxtbTEJCTsgbW00PSgyMiAzMiAyMyAzMykKLQltb3ZxICAgICAgbW01LG1tMgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCi0JcHVucGNrbHdkIG1tMixtbTMJCTsgbW0yPSgyNCAzNCAyNSAzNSkKLQlwdW5wY2tod2QgbW01LG1tMwkJOyBtbTU9KDI2IDM2IDI3IDM3KQorICAgICAgICBtb3ZxICAgICAgbW00LG1tMCAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgICAgICBwdW5wY2tsd2QgbW0wLG1tMSAgICAgICAgICAgICAgIDsgbW0wPSgyMCAzMCAyMSAzMSkKKyAgICAgICAgcHVucGNraHdkIG1tNCxtbTEgICAgICAgICAgICAgICA7IG1tND0oMjIgMzIgMjMgMzMpCisgICAgICAgIG1vdnEgICAgICBtbTUsbW0yICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgICAgIHB1bnBja2x3ZCBtbTIsbW0zICAgICAgICAgICAgICAgOyBtbTI9KDI0IDM0IDI1IDM1KQorICAgICAgICBwdW5wY2tod2QgbW01LG1tMyAgICAgICAgICAgICAgIDsgbW01PSgyNiAzNiAyNyAzNykKIAotCW1vdnEJbW02LCBNTVdPUkQgW01NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRENURUxFTSldCi0JbW92cQltbTcsIE1NV09SRCBbTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KLQltb3ZxCW1tMSwgTU1XT1JEIFtNTUJMT0NLKDAsMSxlZHgsU0laRU9GX0RDVEVMRU0pXQotCW1vdnEJbW0zLCBNTVdPUkQgW01NQkxPQ0soMSwxLGVkeCxTSVpFT0ZfRENURUxFTSldCisgICAgICAgIG1vdnEgICAgbW02LCBNTVdPUkQgW01NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRENURUxFTSldCisgICAgICAgIG1vdnEgICAgbW03LCBNTVdPUkQgW01NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfRENURUxFTSldCisgICAgICAgIG1vdnEgICAgbW0xLCBNTVdPUkQgW01NQkxPQ0soMCwxLGVkeCxTSVpFT0ZfRENURUxFTSldCisgICAgICAgIG1vdnEgICAgbW0zLCBNTVdPUkQgW01NQkxPQ0soMSwxLGVkeCxTSVpFT0ZfRENURUxFTSldCiAKLQk7IG1tNj0oMDAgMDEgMDIgMDMpLCBtbTE9KDA0IDA1IDA2IDA3KQotCTsgbW03PSgxMCAxMSAxMiAxMyksIG1tMz0oMTQgMTUgMTYgMTcpCisgICAgICAgIDsgbW02PSgwMCAwMSAwMiAwMyksIG1tMT0oMDQgMDUgMDYgMDcpCisgICAgICAgIDsgbW03PSgxMCAxMSAxMiAxMyksIG1tMz0oMTQgMTUgMTYgMTcpCiAKLQltb3ZxCU1NV09SRCBbd2soMCldLCBtbTQJOyB3aygwKT0oMjIgMzIgMjMgMzMpCi0JbW92cQlNTVdPUkQgW3drKDEpXSwgbW0yCTsgd2soMSk9KDI0IDM0IDI1IDM1KQorICAgICAgICBtb3ZxICAgIE1NV09SRCBbd2soMCldLCBtbTQgICAgIDsgd2soMCk9KDIyIDMyIDIzIDMzKQorICAgICAgICBtb3ZxICAgIE1NV09SRCBbd2soMSldLCBtbTIgICAgIDsgd2soMSk9KDI0IDM0IDI1IDM1KQogCi0JbW92cSAgICAgIG1tNCxtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQotCXB1bnBja2x3ZCBtbTYsbW03CQk7IG1tNj0oMDAgMTAgMDEgMTEpCi0JcHVucGNraHdkIG1tNCxtbTcJCTsgbW00PSgwMiAxMiAwMyAxMykKLQltb3ZxICAgICAgbW0yLG1tMQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCi0JcHVucGNrbHdkIG1tMSxtbTMJCTsgbW0xPSgwNCAxNCAwNSAxNSkKLQlwdW5wY2tod2QgbW0yLG1tMwkJOyBtbTI9KDA2IDE2IDA3IDE3KQorICAgICAgICBtb3ZxICAgICAgbW00LG1tNiAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgICAgICBwdW5wY2tsd2QgbW02LG1tNyAgICAgICAgICAgICAgIDsgbW02PSgwMCAxMCAwMSAxMSkKKyAgICAgICAgcHVucGNraHdkIG1tNCxtbTcgICAgICAgICAgICAgICA7IG1tND0oMDIgMTIgMDMgMTMpCisgICAgICAgIG1vdnEgICAgICBtbTIsbW0xICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgICAgIHB1bnBja2x3ZCBtbTEsbW0zICAgICAgICAgICAgICAgOyBtbTE9KDA0IDE0IDA1IDE1KQorICAgICAgICBwdW5wY2tod2QgbW0yLG1tMyAgICAgICAgICAgICAgIDsgbW0yPSgwNiAxNiAwNyAxNykKIAotCW1vdnEgICAgICBtbTcsbW02CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKLQlwdW5wY2tsZHEgbW02LG1tMAkJOyBtbTY9KDAwIDEwIDIwIDMwKT1kYXRhMAotCXB1bnBja2hkcSBtbTcsbW0wCQk7IG1tNz0oMDEgMTEgMjEgMzEpPWRhdGExCi0JbW92cSAgICAgIG1tMyxtbTIJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQotCXB1bnBja2xkcSBtbTIsbW01CQk7IG1tMj0oMDYgMTYgMjYgMzYpPWRhdGE2Ci0JcHVucGNraGRxIG1tMyxtbTUJCTsgbW0zPSgwNyAxNyAyNyAzNyk9ZGF0YTcKKyAgICAgICAgbW92cSAgICAgIG1tNyxtbTYgICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICAgICAgcHVucGNrbGRxIG1tNixtbTAgICAgICAgICAgICAgICA7IG1tNj0oMDAgMTAgMjAgMzApPWRhdGEwCisgICAgICAgIHB1bnBja2hkcSBtbTcsbW0wICAgICAgICAgICAgICAgOyBtbTc9KDAxIDExIDIxIDMxKT1kYXRhMQorICAgICAgICBtb3ZxICAgICAgbW0zLG1tMiAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgICAgICBwdW5wY2tsZHEgbW0yLG1tNSAgICAgICAgICAgICAgIDsgbW0yPSgwNiAxNiAyNiAzNik9ZGF0YTYKKyAgICAgICAgcHVucGNraGRxIG1tMyxtbTUgICAgICAgICAgICAgICA7IG1tMz0oMDcgMTcgMjcgMzcpPWRhdGE3CiAKLQltb3ZxCW1tMCxtbTcKLQltb3ZxCW1tNSxtbTYKLQlwc3VidwltbTcsbW0yCQkJOyBtbTc9ZGF0YTEtZGF0YTY9dG1wNgotCXBzdWJ3CW1tNixtbTMJCQk7IG1tNj1kYXRhMC1kYXRhNz10bXA3Ci0JcGFkZHcJbW0wLG1tMgkJCTsgbW0wPWRhdGExK2RhdGE2PXRtcDEKLQlwYWRkdwltbTUsbW0zCQkJOyBtbTU9ZGF0YTArZGF0YTc9dG1wMAorICAgICAgICBtb3ZxICAgIG1tMCxtbTcKKyAgICAgICAgbW92cSAgICBtbTUsbW02CisgICAgICAgIHBzdWJ3ICAgbW03LG1tMiAgICAgICAgICAgICAgICAgOyBtbTc9ZGF0YTEtZGF0YTY9dG1wNgorICAgICAgICBwc3VidyAgIG1tNixtbTMgICAgICAgICAgICAgICAgIDsgbW02PWRhdGEwLWRhdGE3PXRtcDcKKyAgICAgICAgcGFkZHcgICBtbTAsbW0yICAgICAgICAgICAgICAgICA7IG1tMD1kYXRhMStkYXRhNj10bXAxCisgICAgICAgIHBhZGR3ICAgbW01LG1tMyAgICAgICAgICAgICAgICAgOyBtbTU9ZGF0YTArZGF0YTc9dG1wMAogCi0JbW92cQltbTIsIE1NV09SRCBbd2soMCldCTsgbW0yPSgyMiAzMiAyMyAzMykKLQltb3ZxCW1tMywgTU1XT1JEIFt3aygxKV0JOyBtbTM9KDI0IDM0IDI1IDM1KQotCW1vdnEJTU1XT1JEIFt3aygwKV0sIG1tNwk7IHdrKDApPXRtcDYKLQltb3ZxCU1NV09SRCBbd2soMSldLCBtbTYJOyB3aygxKT10bXA3CisgICAgICAgIG1vdnEgICAgbW0yLCBNTVdPUkQgW3drKDApXSAgICAgOyBtbTI9KDIyIDMyIDIzIDMzKQorICAgICAgICBtb3ZxICAgIG1tMywgTU1XT1JEIFt3aygxKV0gICAgIDsgbW0zPSgyNCAzNCAyNSAzNSkKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW3drKDApXSwgbW03ICAgICA7IHdrKDApPXRtcDYKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW3drKDEpXSwgbW02ICAgICA7IHdrKDEpPXRtcDcKIAotCW1vdnEgICAgICBtbTcsbW00CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKLQlwdW5wY2tsZHEgbW00LG1tMgkJOyBtbTQ9KDAyIDEyIDIyIDMyKT1kYXRhMgotCXB1bnBja2hkcSBtbTcsbW0yCQk7IG1tNz0oMDMgMTMgMjMgMzMpPWRhdGEzCi0JbW92cSAgICAgIG1tNixtbTEJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQotCXB1bnBja2xkcSBtbTEsbW0zCQk7IG1tMT0oMDQgMTQgMjQgMzQpPWRhdGE0Ci0JcHVucGNraGRxIG1tNixtbTMJCTsgbW02PSgwNSAxNSAyNSAzNSk9ZGF0YTUKKyAgICAgICAgbW92cSAgICAgIG1tNyxtbTQgICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICAgICAgcHVucGNrbGRxIG1tNCxtbTIgICAgICAgICAgICAgICA7IG1tND0oMDIgMTIgMjIgMzIpPWRhdGEyCisgICAgICAgIHB1bnBja2hkcSBtbTcsbW0yICAgICAgICAgICAgICAgOyBtbTc9KDAzIDEzIDIzIDMzKT1kYXRhMworICAgICAgICBtb3ZxICAgICAgbW02LG1tMSAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgICAgICBwdW5wY2tsZHEgbW0xLG1tMyAgICAgICAgICAgICAgIDsgbW0xPSgwNCAxNCAyNCAzNCk9ZGF0YTQKKyAgICAgICAgcHVucGNraGRxIG1tNixtbTMgICAgICAgICAgICAgICA7IG1tNj0oMDUgMTUgMjUgMzUpPWRhdGE1CiAKLQltb3ZxCW1tMixtbTcKLQltb3ZxCW1tMyxtbTQKLQlwYWRkdwltbTcsbW0xCQkJOyBtbTc9ZGF0YTMrZGF0YTQ9dG1wMwotCXBhZGR3CW1tNCxtbTYJCQk7IG1tND1kYXRhMitkYXRhNT10bXAyCi0JcHN1YncJbW0yLG1tMQkJCTsgbW0yPWRhdGEzLWRhdGE0PXRtcDQKLQlwc3VidwltbTMsbW02CQkJOyBtbTM9ZGF0YTItZGF0YTU9dG1wNQorICAgICAgICBtb3ZxICAgIG1tMixtbTcKKyAgICAgICAgbW92cSAgICBtbTMsbW00CisgICAgICAgIHBhZGR3ICAgbW03LG1tMSAgICAgICAgICAgICAgICAgOyBtbTc9ZGF0YTMrZGF0YTQ9dG1wMworICAgICAgICBwYWRkdyAgIG1tNCxtbTYgICAgICAgICAgICAgICAgIDsgbW00PWRhdGEyK2RhdGE1PXRtcDIKKyAgICAgICAgcHN1YncgICBtbTIsbW0xICAgICAgICAgICAgICAgICA7IG1tMj1kYXRhMy1kYXRhND10bXA0CisgICAgICAgIHBzdWJ3ICAgbW0zLG1tNiAgICAgICAgICAgICAgICAgOyBtbTM9ZGF0YTItZGF0YTU9dG1wNQogCi0JOyAtLSBFdmVuIHBhcnQKKyAgICAgICAgOyAtLSBFdmVuIHBhcnQKIAotCW1vdnEJbW0xLG1tNQotCW1vdnEJbW02LG1tMAotCXBzdWJ3CW1tNSxtbTcJCQk7IG1tNT10bXAxMwotCXBzdWJ3CW1tMCxtbTQJCQk7IG1tMD10bXAxMgotCXBhZGR3CW1tMSxtbTcJCQk7IG1tMT10bXAxMAotCXBhZGR3CW1tNixtbTQJCQk7IG1tNj10bXAxMQorICAgICAgICBtb3ZxICAgIG1tMSxtbTUKKyAgICAgICAgbW92cSAgICBtbTYsbW0wCisgICAgICAgIHBzdWJ3ICAgbW01LG1tNyAgICAgICAgICAgICAgICAgOyBtbTU9dG1wMTMKKyAgICAgICAgcHN1YncgICBtbTAsbW00ICAgICAgICAgICAgICAgICA7IG1tMD10bXAxMgorICAgICAgICBwYWRkdyAgIG1tMSxtbTcgICAgICAgICAgICAgICAgIDsgbW0xPXRtcDEwCisgICAgICAgIHBhZGR3ICAgbW02LG1tNCAgICAgICAgICAgICAgICAgOyBtbTY9dG1wMTEKIAotCXBhZGR3CW1tMCxtbTUKLQlwc2xsdwltbTAsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKLQlwbXVsaHcJbW0wLFtHT1RPRkYoZWJ4LFBXX0YwNzA3KV0gOyBtbTA9ejEKKyAgICAgICAgcGFkZHcgICBtbTAsbW01CisgICAgICAgIHBzbGx3ICAgbW0wLFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisgICAgICAgIHBtdWxodyAgbW0wLFtHT1RPRkYoZWJ4LFBXX0YwNzA3KV0gOyBtbTA9ejEKIAotCW1vdnEJbW03LG1tMQotCW1vdnEJbW00LG1tNQotCXBzdWJ3CW1tMSxtbTYJCQk7IG1tMT1kYXRhNAotCXBzdWJ3CW1tNSxtbTAJCQk7IG1tNT1kYXRhNgotCXBhZGR3CW1tNyxtbTYJCQk7IG1tNz1kYXRhMAotCXBhZGR3CW1tNCxtbTAJCQk7IG1tND1kYXRhMgorICAgICAgICBtb3ZxICAgIG1tNyxtbTEKKyAgICAgICAgbW92cSAgICBtbTQsbW01CisgICAgICAgIHBzdWJ3ICAgbW0xLG1tNiAgICAgICAgICAgICAgICAgOyBtbTE9ZGF0YTQKKyAgICAgICAgcHN1YncgICBtbTUsbW0wICAgICAgICAgICAgICAgICA7IG1tNT1kYXRhNgorICAgICAgICBwYWRkdyAgIG1tNyxtbTYgICAgICAgICAgICAgICAgIDsgbW03PWRhdGEwCisgICAgICAgIHBhZGR3ICAgbW00LG1tMCAgICAgICAgICAgICAgICAgOyBtbTQ9ZGF0YTIKIAotCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDAsMSxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW0xCi0JbW92cQlNTVdPUkQgW01NQkxPQ0soMiwxLGVkeCxTSVpFT0ZfRENURUxFTSldLCBtbTUKLQltb3ZxCU1NV09SRCBbTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIG1tNwotCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW00CisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtNTUJMT0NLKDAsMSxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW0xCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtNTUJMT0NLKDIsMSxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW01CisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW03CisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW00CiAKLQk7IC0tIE9kZCBwYXJ0CisgICAgICAgIDsgLS0gT2RkIHBhcnQKIAotCW1vdnEJbW02LCBNTVdPUkQgW3drKDApXQk7IG1tNj10bXA2Ci0JbW92cQltbTAsIE1NV09SRCBbd2soMSldCTsgbW0wPXRtcDcKKyAgICAgICAgbW92cSAgICBtbTYsIE1NV09SRCBbd2soMCldICAgICA7IG1tNj10bXA2CisgICAgICAgIG1vdnEgICAgbW0wLCBNTVdPUkQgW3drKDEpXSAgICAgOyBtbTA9dG1wNwogCi0JcGFkZHcJbW0yLG1tMwkJCTsgbW0yPXRtcDEwCi0JcGFkZHcJbW0zLG1tNgkJCTsgbW0zPXRtcDExCi0JcGFkZHcJbW02LG1tMAkJCTsgbW02PXRtcDEyLCBtbTA9dG1wNworICAgICAgICBwYWRkdyAgIG1tMixtbTMgICAgICAgICAgICAgICAgIDsgbW0yPXRtcDEwCisgICAgICAgIHBhZGR3ICAgbW0zLG1tNiAgICAgICAgICAgICAgICAgOyBtbTM9dG1wMTEKKyAgICAgICAgcGFkZHcgICBtbTYsbW0wICAgICAgICAgICAgICAgICA7IG1tNj10bXAxMiwgbW0wPXRtcDcKIAotCXBzbGx3CW1tMixQUkVfTVVMVElQTFlfU0NBTEVfQklUUwotCXBzbGx3CW1tNixQUkVfTVVMVElQTFlfU0NBTEVfQklUUworICAgICAgICBwc2xsdyAgIG1tMixQUkVfTVVMVElQTFlfU0NBTEVfQklUUworICAgICAgICBwc2xsdyAgIG1tNixQUkVfTVVMVElQTFlfU0NBTEVfQklUUwogCi0JcHNsbHcJbW0zLFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCi0JcG11bGh3CW1tMyxbR09UT0ZGKGVieCxQV19GMDcwNyldIDsgbW0zPXozCisgICAgICAgIHBzbGx3ICAgbW0zLFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisgICAgICAgIHBtdWxodyAgbW0zLFtHT1RPRkYoZWJ4LFBXX0YwNzA3KV0gOyBtbTM9ejMKIAotCW1vdnEJbW0xLG1tMgkJCTsgbW0xPXRtcDEwCi0JcHN1YncJbW0yLG1tNgotCXBtdWxodwltbTIsW0dPVE9GRihlYngsUFdfRjAzODIpXSA7IG1tMj16NQotCXBtdWxodwltbTEsW0dPVE9GRihlYngsUFdfRjA1NDEpXSA7IG1tMT1NVUxUSVBMWSh0bXAxMCxGSVhfMF81NDExOTYxMCkKLQlwbXVsaHcJbW02LFtHT1RPRkYoZWJ4LFBXX0YxMzA2KV0gOyBtbTY9TVVMVElQTFkodG1wMTIsRklYXzFfMzA2NTYyOTYpCi0JcGFkZHcJbW0xLG1tMgkJCTsgbW0xPXoyCi0JcGFkZHcJbW02LG1tMgkJCTsgbW02PXo0CisgICAgICAgIG1vdnEgICAgbW0xLG1tMiAgICAgICAgICAgICAgICAgOyBtbTE9dG1wMTAKKyAgICAgICAgcHN1YncgICBtbTIsbW02CisgICAgICAgIHBtdWxodyAgbW0yLFtHT1RPRkYoZWJ4LFBXX0YwMzgyKV0gOyBtbTI9ejUKKyAgICAgICAgcG11bGh3ICBtbTEsW0dPVE9GRihlYngsUFdfRjA1NDEpXSA7IG1tMT1NVUxUSVBMWSh0bXAxMCxGSVhfMF81NDExOTYxMCkKKyAgICAgICAgcG11bGh3ICBtbTYsW0dPVE9GRihlYngsUFdfRjEzMDYpXSA7IG1tNj1NVUxUSVBMWSh0bXAxMixGSVhfMV8zMDY1NjI5NikKKyAgICAgICAgcGFkZHcgICBtbTEsbW0yICAgICAgICAgICAgICAgICA7IG1tMT16MgorICAgICAgICBwYWRkdyAgIG1tNixtbTIgICAgICAgICAgICAgICAgIDsgbW02PXo0CiAKLQltb3ZxCW1tNSxtbTAKLQlwc3VidwltbTAsbW0zCQkJOyBtbTA9ejEzCi0JcGFkZHcJbW01LG1tMwkJCTsgbW01PXoxMQorICAgICAgICBtb3ZxICAgIG1tNSxtbTAKKyAgICAgICAgcHN1YncgICBtbTAsbW0zICAgICAgICAgICAgICAgICA7IG1tMD16MTMKKyAgICAgICAgcGFkZHcgICBtbTUsbW0zICAgICAgICAgICAgICAgICA7IG1tNT16MTEKIAotCW1vdnEJbW03LG1tMAotCW1vdnEJbW00LG1tNQotCXBzdWJ3CW1tMCxtbTEJCQk7IG1tMD1kYXRhMwotCXBzdWJ3CW1tNSxtbTYJCQk7IG1tNT1kYXRhNwotCXBhZGR3CW1tNyxtbTEJCQk7IG1tNz1kYXRhNQotCXBhZGR3CW1tNCxtbTYJCQk7IG1tND1kYXRhMQorICAgICAgICBtb3ZxICAgIG1tNyxtbTAKKyAgICAgICAgbW92cSAgICBtbTQsbW01CisgICAgICAgIHBzdWJ3ICAgbW0wLG1tMSAgICAgICAgICAgICAgICAgOyBtbTA9ZGF0YTMKKyAgICAgICAgcHN1YncgICBtbTUsbW02ICAgICAgICAgICAgICAgICA7IG1tNT1kYXRhNworICAgICAgICBwYWRkdyAgIG1tNyxtbTEgICAgICAgICAgICAgICAgIDsgbW03PWRhdGE1CisgICAgICAgIHBhZGR3ICAgbW00LG1tNiAgICAgICAgICAgICAgICAgOyBtbTQ9ZGF0YTEKIAotCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW0wCi0JbW92cQlNTVdPUkQgW01NQkxPQ0soMywxLGVkeCxTSVpFT0ZfRENURUxFTSldLCBtbTUKLQltb3ZxCU1NV09SRCBbTU1CTE9DSygxLDEsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIG1tNwotCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW00CisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW0wCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtNTUJMT0NLKDMsMSxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW01CisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtNTUJMT0NLKDEsMSxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW03CisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW00CiAKLQlhZGQJZWR4LCBieXRlIDQqRENUU0laRSpTSVpFT0ZfRENURUxFTQotCWRlYwllY3gKLQlqbnoJbmVhciAucm93bG9vcAorICAgICAgICBhZGQgICAgIGVkeCwgYnl0ZSA0KkRDVFNJWkUqU0laRU9GX0RDVEVMRU0KKyAgICAgICAgZGVjICAgICBlY3gKKyAgICAgICAgam56ICAgICBuZWFyIC5yb3dsb29wCiAKLQk7IC0tLS0gUGFzcyAyOiBwcm9jZXNzIGNvbHVtbnMuCisgICAgICAgIDsgLS0tLSBQYXNzIDI6IHByb2Nlc3MgY29sdW1ucy4KIAotCW1vdgllZHgsIFBPSU5URVIgW2RhdGEoZWF4KV0JOyAoRENURUxFTSAqKQotCW1vdgllY3gsIERDVFNJWkUvNAotCWFsaWdueAkxNiw3CisgICAgICAgIG1vdiAgICAgZWR4LCBQT0lOVEVSIFtkYXRhKGVheCldICAgICAgICA7IChEQ1RFTEVNICopCisgICAgICAgIG1vdiAgICAgZWN4LCBEQ1RTSVpFLzQKKyAgICAgICAgYWxpZ254ICAxNiw3CiAuY29sdW1ubG9vcDoKIAotCW1vdnEJbW0wLCBNTVdPUkQgW01NQkxPQ0soMiwwLGVkeCxTSVpFT0ZfRENURUxFTSldCi0JbW92cQltbTEsIE1NV09SRCBbTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KLQltb3ZxCW1tMiwgTU1XT1JEIFtNTUJMT0NLKDYsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQotCW1vdnEJbW0zLCBNTVdPUkQgW01NQkxPQ0soNywwLGVkeCxTSVpFT0ZfRENURUxFTSldCisgICAgICAgIG1vdnEgICAgbW0wLCBNTVdPUkQgW01NQkxPQ0soMiwwLGVkeCxTSVpFT0ZfRENURUxFTSldCisgICAgICAgIG1vdnEgICAgbW0xLCBNTVdPUkQgW01NQkxPQ0soMywwLGVkeCxTSVpFT0ZfRENURUxFTSldCisgICAgICAgIG1vdnEgICAgbW0yLCBNTVdPUkQgW01NQkxPQ0soNiwwLGVkeCxTSVpFT0ZfRENURUxFTSldCisgICAgICAgIG1vdnEgICAgbW0zLCBNTVdPUkQgW01NQkxPQ0soNywwLGVkeCxTSVpFT0ZfRENURUxFTSldCiAKLQk7IG1tMD0oMDIgMTIgMjIgMzIpLCBtbTI9KDQyIDUyIDYyIDcyKQotCTsgbW0xPSgwMyAxMyAyMyAzMyksIG1tMz0oNDMgNTMgNjMgNzMpCisgICAgICAgIDsgbW0wPSgwMiAxMiAyMiAzMiksIG1tMj0oNDIgNTIgNjIgNzIpCisgICAgICAgIDsgbW0xPSgwMyAxMyAyMyAzMyksIG1tMz0oNDMgNTMgNjMgNzMpCiAKLQltb3ZxICAgICAgbW00LG1tMAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCi0JcHVucGNrbHdkIG1tMCxtbTEJCTsgbW0wPSgwMiAwMyAxMiAxMykKLQlwdW5wY2tod2QgbW00LG1tMQkJOyBtbTQ9KDIyIDIzIDMyIDMzKQotCW1vdnEgICAgICBtbTUsbW0yCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKLQlwdW5wY2tsd2QgbW0yLG1tMwkJOyBtbTI9KDQyIDQzIDUyIDUzKQotCXB1bnBja2h3ZCBtbTUsbW0zCQk7IG1tNT0oNjIgNjMgNzIgNzMpCisgICAgICAgIG1vdnEgICAgICBtbTQsbW0wICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgICAgIHB1bnBja2x3ZCBtbTAsbW0xICAgICAgICAgICAgICAgOyBtbTA9KDAyIDAzIDEyIDEzKQorICAgICAgICBwdW5wY2tod2QgbW00LG1tMSAgICAgICAgICAgICAgIDsgbW00PSgyMiAyMyAzMiAzMykKKyAgICAgICAgbW92cSAgICAgIG1tNSxtbTIgICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICAgICAgcHVucGNrbHdkIG1tMixtbTMgICAgICAgICAgICAgICA7IG1tMj0oNDIgNDMgNTIgNTMpCisgICAgICAgIHB1bnBja2h3ZCBtbTUsbW0zICAgICAgICAgICAgICAgOyBtbTU9KDYyIDYzIDcyIDczKQogCi0JbW92cQltbTYsIE1NV09SRCBbTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KLQltb3ZxCW1tNywgTU1XT1JEIFtNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQotCW1vdnEJbW0xLCBNTVdPUkQgW01NQkxPQ0soNCwwLGVkeCxTSVpFT0ZfRENURUxFTSldCi0JbW92cQltbTMsIE1NV09SRCBbTU1CTE9DSyg1LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKyAgICAgICAgbW92cSAgICBtbTYsIE1NV09SRCBbTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKyAgICAgICAgbW92cSAgICBtbTcsIE1NV09SRCBbTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKyAgICAgICAgbW92cSAgICBtbTEsIE1NV09SRCBbTU1CTE9DSyg0LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKyAgICAgICAgbW92cSAgICBtbTMsIE1NV09SRCBbTU1CTE9DSyg1LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KIAotCTsgbW02PSgwMCAxMCAyMCAzMCksIG1tMT0oNDAgNTAgNjAgNzApCi0JOyBtbTc9KDAxIDExIDIxIDMxKSwgbW0zPSg0MSA1MSA2MSA3MSkKKyAgICAgICAgOyBtbTY9KDAwIDEwIDIwIDMwKSwgbW0xPSg0MCA1MCA2MCA3MCkKKyAgICAgICAgOyBtbTc9KDAxIDExIDIxIDMxKSwgbW0zPSg0MSA1MSA2MSA3MSkKIAotCW1vdnEJTU1XT1JEIFt3aygwKV0sIG1tNAk7IHdrKDApPSgyMiAyMyAzMiAzMykKLQltb3ZxCU1NV09SRCBbd2soMSldLCBtbTIJOyB3aygxKT0oNDIgNDMgNTIgNTMpCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFt3aygwKV0sIG1tNCAgICAgOyB3aygwKT0oMjIgMjMgMzIgMzMpCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFt3aygxKV0sIG1tMiAgICAgOyB3aygxKT0oNDIgNDMgNTIgNTMpCiAKLQltb3ZxICAgICAgbW00LG1tNgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCi0JcHVucGNrbHdkIG1tNixtbTcJCTsgbW02PSgwMCAwMSAxMCAxMSkKLQlwdW5wY2tod2QgbW00LG1tNwkJOyBtbTQ9KDIwIDIxIDMwIDMxKQotCW1vdnEgICAgICBtbTIsbW0xCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKLQlwdW5wY2tsd2QgbW0xLG1tMwkJOyBtbTE9KDQwIDQxIDUwIDUxKQotCXB1bnBja2h3ZCBtbTIsbW0zCQk7IG1tMj0oNjAgNjEgNzAgNzEpCisgICAgICAgIG1vdnEgICAgICBtbTQsbW02ICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgICAgIHB1bnBja2x3ZCBtbTYsbW03ICAgICAgICAgICAgICAgOyBtbTY9KDAwIDAxIDEwIDExKQorICAgICAgICBwdW5wY2tod2QgbW00LG1tNyAgICAgICAgICAgICAgIDsgbW00PSgyMCAyMSAzMCAzMSkKKyAgICAgICAgbW92cSAgICAgIG1tMixtbTEgICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICAgICAgcHVucGNrbHdkIG1tMSxtbTMgICAgICAgICAgICAgICA7IG1tMT0oNDAgNDEgNTAgNTEpCisgICAgICAgIHB1bnBja2h3ZCBtbTIsbW0zICAgICAgICAgICAgICAgOyBtbTI9KDYwIDYxIDcwIDcxKQogCi0JbW92cSAgICAgIG1tNyxtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQotCXB1bnBja2xkcSBtbTYsbW0wCQk7IG1tNj0oMDAgMDEgMDIgMDMpPWRhdGEwCi0JcHVucGNraGRxIG1tNyxtbTAJCTsgbW03PSgxMCAxMSAxMiAxMyk9ZGF0YTEKLQltb3ZxICAgICAgbW0zLG1tMgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCi0JcHVucGNrbGRxIG1tMixtbTUJCTsgbW0yPSg2MCA2MSA2MiA2Myk9ZGF0YTYKLQlwdW5wY2toZHEgbW0zLG1tNQkJOyBtbTM9KDcwIDcxIDcyIDczKT1kYXRhNworICAgICAgICBtb3ZxICAgICAgbW03LG1tNiAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgICAgICBwdW5wY2tsZHEgbW02LG1tMCAgICAgICAgICAgICAgIDsgbW02PSgwMCAwMSAwMiAwMyk9ZGF0YTAKKyAgICAgICAgcHVucGNraGRxIG1tNyxtbTAgICAgICAgICAgICAgICA7IG1tNz0oMTAgMTEgMTIgMTMpPWRhdGExCisgICAgICAgIG1vdnEgICAgICBtbTMsbW0yICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgICAgIHB1bnBja2xkcSBtbTIsbW01ICAgICAgICAgICAgICAgOyBtbTI9KDYwIDYxIDYyIDYzKT1kYXRhNgorICAgICAgICBwdW5wY2toZHEgbW0zLG1tNSAgICAgICAgICAgICAgIDsgbW0zPSg3MCA3MSA3MiA3Myk9ZGF0YTcKIAotCW1vdnEJbW0wLG1tNwotCW1vdnEJbW01LG1tNgotCXBzdWJ3CW1tNyxtbTIJCQk7IG1tNz1kYXRhMS1kYXRhNj10bXA2Ci0JcHN1YncJbW02LG1tMwkJCTsgbW02PWRhdGEwLWRhdGE3PXRtcDcKLQlwYWRkdwltbTAsbW0yCQkJOyBtbTA9ZGF0YTErZGF0YTY9dG1wMQotCXBhZGR3CW1tNSxtbTMJCQk7IG1tNT1kYXRhMCtkYXRhNz10bXAwCisgICAgICAgIG1vdnEgICAgbW0wLG1tNworICAgICAgICBtb3ZxICAgIG1tNSxtbTYKKyAgICAgICAgcHN1YncgICBtbTcsbW0yICAgICAgICAgICAgICAgICA7IG1tNz1kYXRhMS1kYXRhNj10bXA2CisgICAgICAgIHBzdWJ3ICAgbW02LG1tMyAgICAgICAgICAgICAgICAgOyBtbTY9ZGF0YTAtZGF0YTc9dG1wNworICAgICAgICBwYWRkdyAgIG1tMCxtbTIgICAgICAgICAgICAgICAgIDsgbW0wPWRhdGExK2RhdGE2PXRtcDEKKyAgICAgICAgcGFkZHcgICBtbTUsbW0zICAgICAgICAgICAgICAgICA7IG1tNT1kYXRhMCtkYXRhNz10bXAwCiAKLQltb3ZxCW1tMiwgTU1XT1JEIFt3aygwKV0JOyBtbTI9KDIyIDIzIDMyIDMzKQotCW1vdnEJbW0zLCBNTVdPUkQgW3drKDEpXQk7IG1tMz0oNDIgNDMgNTIgNTMpCi0JbW92cQlNTVdPUkQgW3drKDApXSwgbW03CTsgd2soMCk9dG1wNgotCW1vdnEJTU1XT1JEIFt3aygxKV0sIG1tNgk7IHdrKDEpPXRtcDcKKyAgICAgICAgbW92cSAgICBtbTIsIE1NV09SRCBbd2soMCldICAgICA7IG1tMj0oMjIgMjMgMzIgMzMpCisgICAgICAgIG1vdnEgICAgbW0zLCBNTVdPUkQgW3drKDEpXSAgICAgOyBtbTM9KDQyIDQzIDUyIDUzKQorICAgICAgICBtb3ZxICAgIE1NV09SRCBbd2soMCldLCBtbTcgICAgIDsgd2soMCk9dG1wNgorICAgICAgICBtb3ZxICAgIE1NV09SRCBbd2soMSldLCBtbTYgICAgIDsgd2soMSk9dG1wNwogCi0JbW92cSAgICAgIG1tNyxtbTQJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQotCXB1bnBja2xkcSBtbTQsbW0yCQk7IG1tND0oMjAgMjEgMjIgMjMpPWRhdGEyCi0JcHVucGNraGRxIG1tNyxtbTIJCTsgbW03PSgzMCAzMSAzMiAzMyk9ZGF0YTMKLQltb3ZxICAgICAgbW02LG1tMQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCi0JcHVucGNrbGRxIG1tMSxtbTMJCTsgbW0xPSg0MCA0MSA0MiA0Myk9ZGF0YTQKLQlwdW5wY2toZHEgbW02LG1tMwkJOyBtbTY9KDUwIDUxIDUyIDUzKT1kYXRhNQorICAgICAgICBtb3ZxICAgICAgbW03LG1tNCAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgICAgICBwdW5wY2tsZHEgbW00LG1tMiAgICAgICAgICAgICAgIDsgbW00PSgyMCAyMSAyMiAyMyk9ZGF0YTIKKyAgICAgICAgcHVucGNraGRxIG1tNyxtbTIgICAgICAgICAgICAgICA7IG1tNz0oMzAgMzEgMzIgMzMpPWRhdGEzCisgICAgICAgIG1vdnEgICAgICBtbTYsbW0xICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgICAgIHB1bnBja2xkcSBtbTEsbW0zICAgICAgICAgICAgICAgOyBtbTE9KDQwIDQxIDQyIDQzKT1kYXRhNAorICAgICAgICBwdW5wY2toZHEgbW02LG1tMyAgICAgICAgICAgICAgIDsgbW02PSg1MCA1MSA1MiA1Myk9ZGF0YTUKIAotCW1vdnEJbW0yLG1tNwotCW1vdnEJbW0zLG1tNAotCXBhZGR3CW1tNyxtbTEJCQk7IG1tNz1kYXRhMytkYXRhND10bXAzCi0JcGFkZHcJbW00LG1tNgkJCTsgbW00PWRhdGEyK2RhdGE1PXRtcDIKLQlwc3VidwltbTIsbW0xCQkJOyBtbTI9ZGF0YTMtZGF0YTQ9dG1wNAotCXBzdWJ3CW1tMyxtbTYJCQk7IG1tMz1kYXRhMi1kYXRhNT10bXA1CisgICAgICAgIG1vdnEgICAgbW0yLG1tNworICAgICAgICBtb3ZxICAgIG1tMyxtbTQKKyAgICAgICAgcGFkZHcgICBtbTcsbW0xICAgICAgICAgICAgICAgICA7IG1tNz1kYXRhMytkYXRhND10bXAzCisgICAgICAgIHBhZGR3ICAgbW00LG1tNiAgICAgICAgICAgICAgICAgOyBtbTQ9ZGF0YTIrZGF0YTU9dG1wMgorICAgICAgICBwc3VidyAgIG1tMixtbTEgICAgICAgICAgICAgICAgIDsgbW0yPWRhdGEzLWRhdGE0PXRtcDQKKyAgICAgICAgcHN1YncgICBtbTMsbW02ICAgICAgICAgICAgICAgICA7IG1tMz1kYXRhMi1kYXRhNT10bXA1CiAKLQk7IC0tIEV2ZW4gcGFydAorICAgICAgICA7IC0tIEV2ZW4gcGFydAogCi0JbW92cQltbTEsbW01Ci0JbW92cQltbTYsbW0wCi0JcHN1YncJbW01LG1tNwkJCTsgbW01PXRtcDEzCi0JcHN1YncJbW0wLG1tNAkJCTsgbW0wPXRtcDEyCi0JcGFkZHcJbW0xLG1tNwkJCTsgbW0xPXRtcDEwCi0JcGFkZHcJbW02LG1tNAkJCTsgbW02PXRtcDExCisgICAgICAgIG1vdnEgICAgbW0xLG1tNQorICAgICAgICBtb3ZxICAgIG1tNixtbTAKKyAgICAgICAgcHN1YncgICBtbTUsbW03ICAgICAgICAgICAgICAgICA7IG1tNT10bXAxMworICAgICAgICBwc3VidyAgIG1tMCxtbTQgICAgICAgICAgICAgICAgIDsgbW0wPXRtcDEyCisgICAgICAgIHBhZGR3ICAgbW0xLG1tNyAgICAgICAgICAgICAgICAgOyBtbTE9dG1wMTAKKyAgICAgICAgcGFkZHcgICBtbTYsbW00ICAgICAgICAgICAgICAgICA7IG1tNj10bXAxMQogCi0JcGFkZHcJbW0wLG1tNQotCXBzbGx3CW1tMCxQUkVfTVVMVElQTFlfU0NBTEVfQklUUwotCXBtdWxodwltbTAsW0dPVE9GRihlYngsUFdfRjA3MDcpXSA7IG1tMD16MQorICAgICAgICBwYWRkdyAgIG1tMCxtbTUKKyAgICAgICAgcHNsbHcgICBtbTAsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKyAgICAgICAgcG11bGh3ICBtbTAsW0dPVE9GRihlYngsUFdfRjA3MDcpXSA7IG1tMD16MQogCi0JbW92cQltbTcsbW0xCi0JbW92cQltbTQsbW01Ci0JcHN1YncJbW0xLG1tNgkJCTsgbW0xPWRhdGE0Ci0JcHN1YncJbW01LG1tMAkJCTsgbW01PWRhdGE2Ci0JcGFkZHcJbW03LG1tNgkJCTsgbW03PWRhdGEwCi0JcGFkZHcJbW00LG1tMAkJCTsgbW00PWRhdGEyCisgICAgICAgIG1vdnEgICAgbW03LG1tMQorICAgICAgICBtb3ZxICAgIG1tNCxtbTUKKyAgICAgICAgcHN1YncgICBtbTEsbW02ICAgICAgICAgICAgICAgICA7IG1tMT1kYXRhNAorICAgICAgICBwc3VidyAgIG1tNSxtbTAgICAgICAgICAgICAgICAgIDsgbW01PWRhdGE2CisgICAgICAgIHBhZGR3ICAgbW03LG1tNiAgICAgICAgICAgICAgICAgOyBtbTc9ZGF0YTAKKyAgICAgICAgcGFkZHcgICBtbTQsbW0wICAgICAgICAgICAgICAgICA7IG1tND1kYXRhMgogCi0JbW92cQlNTVdPUkQgW01NQkxPQ0soNCwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCBtbTEKLQltb3ZxCU1NV09SRCBbTU1CTE9DSyg2LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIG1tNQotCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW03Ci0JbW92cQlNTVdPUkQgW01NQkxPQ0soMiwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCBtbTQKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soNCwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCBtbTEKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soNiwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCBtbTUKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCBtbTcKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMiwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCBtbTQKIAotCTsgLS0gT2RkIHBhcnQKKyAgICAgICAgOyAtLSBPZGQgcGFydAogCi0JbW92cQltbTYsIE1NV09SRCBbd2soMCldCTsgbW02PXRtcDYKLQltb3ZxCW1tMCwgTU1XT1JEIFt3aygxKV0JOyBtbTA9dG1wNworICAgICAgICBtb3ZxICAgIG1tNiwgTU1XT1JEIFt3aygwKV0gICAgIDsgbW02PXRtcDYKKyAgICAgICAgbW92cSAgICBtbTAsIE1NV09SRCBbd2soMSldICAgICA7IG1tMD10bXA3CiAKLQlwYWRkdwltbTIsbW0zCQkJOyBtbTI9dG1wMTAKLQlwYWRkdwltbTMsbW02CQkJOyBtbTM9dG1wMTEKLQlwYWRkdwltbTYsbW0wCQkJOyBtbTY9dG1wMTIsIG1tMD10bXA3CisgICAgICAgIHBhZGR3ICAgbW0yLG1tMyAgICAgICAgICAgICAgICAgOyBtbTI9dG1wMTAKKyAgICAgICAgcGFkZHcgICBtbTMsbW02ICAgICAgICAgICAgICAgICA7IG1tMz10bXAxMQorICAgICAgICBwYWRkdyAgIG1tNixtbTAgICAgICAgICAgICAgICAgIDsgbW02PXRtcDEyLCBtbTA9dG1wNwogCi0JcHNsbHcJbW0yLFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCi0JcHNsbHcJbW02LFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisgICAgICAgIHBzbGx3ICAgbW0yLFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisgICAgICAgIHBzbGx3ICAgbW02LFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCiAKLQlwc2xsdwltbTMsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKLQlwbXVsaHcJbW0zLFtHT1RPRkYoZWJ4LFBXX0YwNzA3KV0gOyBtbTM9ejMKKyAgICAgICAgcHNsbHcgICBtbTMsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKyAgICAgICAgcG11bGh3ICBtbTMsW0dPVE9GRihlYngsUFdfRjA3MDcpXSA7IG1tMz16MwogCi0JbW92cQltbTEsbW0yCQkJOyBtbTE9dG1wMTAKLQlwc3VidwltbTIsbW02Ci0JcG11bGh3CW1tMixbR09UT0ZGKGVieCxQV19GMDM4MildIDsgbW0yPXo1Ci0JcG11bGh3CW1tMSxbR09UT0ZGKGVieCxQV19GMDU0MSldIDsgbW0xPU1VTFRJUExZKHRtcDEwLEZJWF8wXzU0MTE5NjEwKQotCXBtdWxodwltbTYsW0dPVE9GRihlYngsUFdfRjEzMDYpXSA7IG1tNj1NVUxUSVBMWSh0bXAxMixGSVhfMV8zMDY1NjI5NikKLQlwYWRkdwltbTEsbW0yCQkJOyBtbTE9ejIKLQlwYWRkdwltbTYsbW0yCQkJOyBtbTY9ejQKKyAgICAgICAgbW92cSAgICBtbTEsbW0yICAgICAgICAgICAgICAgICA7IG1tMT10bXAxMAorICAgICAgICBwc3VidyAgIG1tMixtbTYKKyAgICAgICAgcG11bGh3ICBtbTIsW0dPVE9GRihlYngsUFdfRjAzODIpXSA7IG1tMj16NQorICAgICAgICBwbXVsaHcgIG1tMSxbR09UT0ZGKGVieCxQV19GMDU0MSldIDsgbW0xPU1VTFRJUExZKHRtcDEwLEZJWF8wXzU0MTE5NjEwKQorICAgICAgICBwbXVsaHcgIG1tNixbR09UT0ZGKGVieCxQV19GMTMwNildIDsgbW02PU1VTFRJUExZKHRtcDEyLEZJWF8xXzMwNjU2Mjk2KQorICAgICAgICBwYWRkdyAgIG1tMSxtbTIgICAgICAgICAgICAgICAgIDsgbW0xPXoyCisgICAgICAgIHBhZGR3ICAgbW02LG1tMiAgICAgICAgICAgICAgICAgOyBtbTY9ejQKIAotCW1vdnEJbW01LG1tMAotCXBzdWJ3CW1tMCxtbTMJCQk7IG1tMD16MTMKLQlwYWRkdwltbTUsbW0zCQkJOyBtbTU9ejExCisgICAgICAgIG1vdnEgICAgbW01LG1tMAorICAgICAgICBwc3VidyAgIG1tMCxtbTMgICAgICAgICAgICAgICAgIDsgbW0wPXoxMworICAgICAgICBwYWRkdyAgIG1tNSxtbTMgICAgICAgICAgICAgICAgIDsgbW01PXoxMQogCi0JbW92cQltbTcsbW0wCi0JbW92cQltbTQsbW01Ci0JcHN1YncJbW0wLG1tMQkJCTsgbW0wPWRhdGEzCi0JcHN1YncJbW01LG1tNgkJCTsgbW01PWRhdGE3Ci0JcGFkZHcJbW03LG1tMQkJCTsgbW03PWRhdGE1Ci0JcGFkZHcJbW00LG1tNgkJCTsgbW00PWRhdGExCisgICAgICAgIG1vdnEgICAgbW03LG1tMAorICAgICAgICBtb3ZxICAgIG1tNCxtbTUKKyAgICAgICAgcHN1YncgICBtbTAsbW0xICAgICAgICAgICAgICAgICA7IG1tMD1kYXRhMworICAgICAgICBwc3VidyAgIG1tNSxtbTYgICAgICAgICAgICAgICAgIDsgbW01PWRhdGE3CisgICAgICAgIHBhZGR3ICAgbW03LG1tMSAgICAgICAgICAgICAgICAgOyBtbTc9ZGF0YTUKKyAgICAgICAgcGFkZHcgICBtbTQsbW02ICAgICAgICAgICAgICAgICA7IG1tND1kYXRhMQogCi0JbW92cQlNTVdPUkQgW01NQkxPQ0soMywwLGVkeCxTSVpFT0ZfRENURUxFTSldLCBtbTAKLQltb3ZxCU1NV09SRCBbTU1CTE9DSyg3LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIG1tNQotCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDUsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW03Ci0JbW92cQlNTVdPUkQgW01NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCBtbTQKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMywwLGVkeCxTSVpFT0ZfRENURUxFTSldLCBtbTAKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soNywwLGVkeCxTSVpFT0ZfRENURUxFTSldLCBtbTUKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soNSwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCBtbTcKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCBtbTQKIAotCWFkZAllZHgsIGJ5dGUgNCpTSVpFT0ZfRENURUxFTQotCWRlYwllY3gKLQlqbnoJbmVhciAuY29sdW1ubG9vcAorICAgICAgICBhZGQgICAgIGVkeCwgYnl0ZSA0KlNJWkVPRl9EQ1RFTEVNCisgICAgICAgIGRlYyAgICAgZWN4CisgICAgICAgIGpueiAgICAgbmVhciAuY29sdW1ubG9vcAogCi0JZW1tcwkJOyBlbXB0eSBNTVggc3RhdGUKKyAgICAgICAgZW1tcyAgICAgICAgICAgIDsgZW1wdHkgTU1YIHN0YXRlCiAKLTsJcG9wCWVkaQkJOyB1bnVzZWQKLTsJcG9wCWVzaQkJOyB1bnVzZWQKLTsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLTsJcG9wCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLQlwb3BwaWMJZWJ4Ci0JbW92CWVzcCxlYnAJCTsgZXNwIDwtIGFsaWduZWQgZWJwCi0JcG9wCWVzcAkJOyBlc3AgPC0gb3JpZ2luYWwgZWJwCi0JcG9wCWVicAotCXJldAorOyAgICAgICBwb3AgICAgIGVkaSAgICAgICAgICAgICA7IHVudXNlZAorOyAgICAgICBwb3AgICAgIGVzaSAgICAgICAgICAgICA7IHVudXNlZAorOyAgICAgICBwb3AgICAgIGVkeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgICAgICBwb3AgICAgIGVjeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgICAgICBwb3BwaWMgIGVieAorICAgICAgICBtb3YgICAgIGVzcCxlYnAgICAgICAgICA7IGVzcCA8LSBhbGlnbmVkIGVicAorICAgICAgICBwb3AgICAgIGVzcCAgICAgICAgICAgICA7IGVzcCA8LSBvcmlnaW5hbCBlYnAKKyAgICAgICAgcG9wICAgICBlYnAKKyAgICAgICAgcmV0CiAKIDsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCiA7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCi0JYWxpZ24JMTYKKyAgICAgICAgYWxpZ24gICAxNgpkaWZmIC0tZ2l0IGEvc2ltZC9qZm1teGludC5hc20gYi9zaW1kL2pmbW14aW50LmFzbQppbmRleCBhN2U3M2Y3Li5jMTZmMjYyIDEwMDY0NAotLS0gYS9zaW1kL2pmbW14aW50LmFzbQorKysgYi9zaW1kL2pmbW14aW50LmFzbQpAQCAtMjYsNjcgKzI2LDY3IEBACiAKIDsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotJWRlZmluZSBDT05TVF9CSVRTCTEzCi0lZGVmaW5lIFBBU1MxX0JJVFMJMgorJWRlZmluZSBDT05TVF9CSVRTICAgICAgMTMKKyVkZWZpbmUgUEFTUzFfQklUUyAgICAgIDIKIAotJWRlZmluZSBERVNDQUxFX1AxCShDT05TVF9CSVRTLVBBU1MxX0JJVFMpCi0lZGVmaW5lIERFU0NBTEVfUDIJKENPTlNUX0JJVFMrUEFTUzFfQklUUykKKyVkZWZpbmUgREVTQ0FMRV9QMSAgICAgIChDT05TVF9CSVRTLVBBU1MxX0JJVFMpCislZGVmaW5lIERFU0NBTEVfUDIgICAgICAoQ09OU1RfQklUUytQQVNTMV9CSVRTKQogCiAlaWYgQ09OU1RfQklUUyA9PSAxMwotRl8wXzI5OAllcXUJIDI0NDYJCTsgRklYKDAuMjk4NjMxMzM2KQotRl8wXzM5MAllcXUJIDMxOTYJCTsgRklYKDAuMzkwMTgwNjQ0KQotRl8wXzU0MQllcXUJIDQ0MzMJCTsgRklYKDAuNTQxMTk2MTAwKQotRl8wXzc2NQllcXUJIDYyNzAJCTsgRklYKDAuNzY1MzY2ODY1KQotRl8wXzg5OQllcXUJIDczNzMJCTsgRklYKDAuODk5OTc2MjIzKQotRl8xXzE3NQllcXUJIDk2MzMJCTsgRklYKDEuMTc1ODc1NjAyKQotRl8xXzUwMQllcXUJMTIyOTkJCTsgRklYKDEuNTAxMzIxMTEwKQotRl8xXzg0NwllcXUJMTUxMzcJCTsgRklYKDEuODQ3NzU5MDY1KQotRl8xXzk2MQllcXUJMTYwNjkJCTsgRklYKDEuOTYxNTcwNTYwKQotRl8yXzA1MwllcXUJMTY4MTkJCTsgRklYKDIuMDUzMTE5ODY5KQotRl8yXzU2MgllcXUJMjA5OTUJCTsgRklYKDIuNTYyOTE1NDQ3KQotRl8zXzA3MgllcXUJMjUxNzIJCTsgRklYKDMuMDcyNzExMDI2KQorRl8wXzI5OCBlcXUgICAgICAyNDQ2ICAgICAgICAgICA7IEZJWCgwLjI5ODYzMTMzNikKK0ZfMF8zOTAgZXF1ICAgICAgMzE5NiAgICAgICAgICAgOyBGSVgoMC4zOTAxODA2NDQpCitGXzBfNTQxIGVxdSAgICAgIDQ0MzMgICAgICAgICAgIDsgRklYKDAuNTQxMTk2MTAwKQorRl8wXzc2NSBlcXUgICAgICA2MjcwICAgICAgICAgICA7IEZJWCgwLjc2NTM2Njg2NSkKK0ZfMF84OTkgZXF1ICAgICAgNzM3MyAgICAgICAgICAgOyBGSVgoMC44OTk5NzYyMjMpCitGXzFfMTc1IGVxdSAgICAgIDk2MzMgICAgICAgICAgIDsgRklYKDEuMTc1ODc1NjAyKQorRl8xXzUwMSBlcXUgICAgIDEyMjk5ICAgICAgICAgICA7IEZJWCgxLjUwMTMyMTExMCkKK0ZfMV84NDcgZXF1ICAgICAxNTEzNyAgICAgICAgICAgOyBGSVgoMS44NDc3NTkwNjUpCitGXzFfOTYxIGVxdSAgICAgMTYwNjkgICAgICAgICAgIDsgRklYKDEuOTYxNTcwNTYwKQorRl8yXzA1MyBlcXUgICAgIDE2ODE5ICAgICAgICAgICA7IEZJWCgyLjA1MzExOTg2OSkKK0ZfMl81NjIgZXF1ICAgICAyMDk5NSAgICAgICAgICAgOyBGSVgoMi41NjI5MTU0NDcpCitGXzNfMDcyIGVxdSAgICAgMjUxNzIgICAgICAgICAgIDsgRklYKDMuMDcyNzExMDI2KQogJWVsc2UKIDsgTkFTTSBjYW5ub3QgZG8gY29tcGlsZS10aW1lIGFyaXRobWV0aWMgb24gZmxvYXRpbmctcG9pbnQgY29uc3RhbnRzLgogJWRlZmluZSBERVNDQUxFKHgsbikgICgoKHgpKygxPDwoKG4pLTEpKSk+PihuKSkKLUZfMF8yOTgJZXF1CURFU0NBTEUoIDMyMDY1Mjk1NSwzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjI5ODYzMTMzNikKLUZfMF8zOTAJZXF1CURFU0NBTEUoIDQxODk1MzI3NiwzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjM5MDE4MDY0NCkKLUZfMF81NDEJZXF1CURFU0NBTEUoIDU4MTEwNDg4NywzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjU0MTE5NjEwMCkKLUZfMF83NjUJZXF1CURFU0NBTEUoIDgyMTgwNjQxMywzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjc2NTM2Njg2NSkKLUZfMF84OTkJZXF1CURFU0NBTEUoIDk2NjM0MjExMSwzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjg5OTk3NjIyMykKLUZfMV8xNzUJZXF1CURFU0NBTEUoMTI2MjU4NjgxMywzMC1DT05TVF9CSVRTKQk7IEZJWCgxLjE3NTg3NTYwMikKLUZfMV81MDEJZXF1CURFU0NBTEUoMTYxMjAzMTI2NywzMC1DT05TVF9CSVRTKQk7IEZJWCgxLjUwMTMyMTExMCkKLUZfMV84NDcJZXF1CURFU0NBTEUoMTk4NDAxNjE4OCwzMC1DT05TVF9CSVRTKQk7IEZJWCgxLjg0Nzc1OTA2NSkKLUZfMV85NjEJZXF1CURFU0NBTEUoMjEwNjIyMDM1MCwzMC1DT05TVF9CSVRTKQk7IEZJWCgxLjk2MTU3MDU2MCkKLUZfMl8wNTMJZXF1CURFU0NBTEUoMjIwNDUyMDY3MywzMC1DT05TVF9CSVRTKQk7IEZJWCgyLjA1MzExOTg2OSkKLUZfMl81NjIJZXF1CURFU0NBTEUoMjc1MTkwOTUwNiwzMC1DT05TVF9CSVRTKQk7IEZJWCgyLjU2MjkxNTQ0NykKLUZfM18wNzIJZXF1CURFU0NBTEUoMzI5OTI5ODM0MSwzMC1DT05TVF9CSVRTKQk7IEZJWCgzLjA3MjcxMTAyNikKK0ZfMF8yOTggZXF1ICAgICBERVNDQUxFKCAzMjA2NTI5NTUsMzAtQ09OU1RfQklUUykgICAgICAgOyBGSVgoMC4yOTg2MzEzMzYpCitGXzBfMzkwIGVxdSAgICAgREVTQ0FMRSggNDE4OTUzMjc2LDMwLUNPTlNUX0JJVFMpICAgICAgIDsgRklYKDAuMzkwMTgwNjQ0KQorRl8wXzU0MSBlcXUgICAgIERFU0NBTEUoIDU4MTEwNDg4NywzMC1DT05TVF9CSVRTKSAgICAgICA7IEZJWCgwLjU0MTE5NjEwMCkKK0ZfMF83NjUgZXF1ICAgICBERVNDQUxFKCA4MjE4MDY0MTMsMzAtQ09OU1RfQklUUykgICAgICAgOyBGSVgoMC43NjUzNjY4NjUpCitGXzBfODk5IGVxdSAgICAgREVTQ0FMRSggOTY2MzQyMTExLDMwLUNPTlNUX0JJVFMpICAgICAgIDsgRklYKDAuODk5OTc2MjIzKQorRl8xXzE3NSBlcXUgICAgIERFU0NBTEUoMTI2MjU4NjgxMywzMC1DT05TVF9CSVRTKSAgICAgICA7IEZJWCgxLjE3NTg3NTYwMikKK0ZfMV81MDEgZXF1ICAgICBERVNDQUxFKDE2MTIwMzEyNjcsMzAtQ09OU1RfQklUUykgICAgICAgOyBGSVgoMS41MDEzMjExMTApCitGXzFfODQ3IGVxdSAgICAgREVTQ0FMRSgxOTg0MDE2MTg4LDMwLUNPTlNUX0JJVFMpICAgICAgIDsgRklYKDEuODQ3NzU5MDY1KQorRl8xXzk2MSBlcXUgICAgIERFU0NBTEUoMjEwNjIyMDM1MCwzMC1DT05TVF9CSVRTKSAgICAgICA7IEZJWCgxLjk2MTU3MDU2MCkKK0ZfMl8wNTMgZXF1ICAgICBERVNDQUxFKDIyMDQ1MjA2NzMsMzAtQ09OU1RfQklUUykgICAgICAgOyBGSVgoMi4wNTMxMTk4NjkpCitGXzJfNTYyIGVxdSAgICAgREVTQ0FMRSgyNzUxOTA5NTA2LDMwLUNPTlNUX0JJVFMpICAgICAgIDsgRklYKDIuNTYyOTE1NDQ3KQorRl8zXzA3MiBlcXUgICAgIERFU0NBTEUoMzI5OTI5ODM0MSwzMC1DT05TVF9CSVRTKSAgICAgICA7IEZJWCgzLjA3MjcxMTAyNikKICVlbmRpZgogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JU0VDVElPTglTRUdfQ09OU1QKKyAgICAgICAgU0VDVElPTiBTRUdfQ09OU1QKIAotCWFsaWduegkxNgotCWdsb2JhbAlFWFROKGpjb25zdF9mZGN0X2lzbG93X21teCkKKyAgICAgICAgYWxpZ256ICAxNgorICAgICAgICBnbG9iYWwgIEVYVE4oamNvbnN0X2ZkY3RfaXNsb3dfbW14KQogCiBFWFROKGpjb25zdF9mZGN0X2lzbG93X21teCk6CiAKLVBXX0YxMzBfRjA1NAl0aW1lcyAyIGR3ICAoRl8wXzU0MStGXzBfNzY1KSwgRl8wXzU0MQotUFdfRjA1NF9NRjEzMAl0aW1lcyAyIGR3ICBGXzBfNTQxLCAoRl8wXzU0MS1GXzFfODQ3KQotUFdfTUYwNzhfRjExNwl0aW1lcyAyIGR3ICAoRl8xXzE3NS1GXzFfOTYxKSwgRl8xXzE3NQotUFdfRjExN19GMDc4CXRpbWVzIDIgZHcgIEZfMV8xNzUsIChGXzFfMTc1LUZfMF8zOTApCi1QV19NRjA2MF9NRjA4OQl0aW1lcyAyIGR3ICAoRl8wXzI5OC1GXzBfODk5KSwtRl8wXzg5OQotUFdfTUYwODlfRjA2MAl0aW1lcyAyIGR3IC1GXzBfODk5LCAoRl8xXzUwMS1GXzBfODk5KQotUFdfTUYwNTBfTUYyNTYJdGltZXMgMiBkdyAgKEZfMl8wNTMtRl8yXzU2MiksLUZfMl81NjIKLVBXX01GMjU2X0YwNTAJdGltZXMgMiBkdyAtRl8yXzU2MiwgKEZfM18wNzItRl8yXzU2MikKLVBEX0RFU0NBTEVfUDEJdGltZXMgMiBkZCAgMSA8PCAoREVTQ0FMRV9QMS0xKQotUERfREVTQ0FMRV9QMgl0aW1lcyAyIGRkICAxIDw8IChERVNDQUxFX1AyLTEpCi1QV19ERVNDQUxFX1AyWAl0aW1lcyA0IGR3ICAxIDw8IChQQVNTMV9CSVRTLTEpCitQV19GMTMwX0YwNTQgICAgdGltZXMgMiBkdyAgKEZfMF81NDErRl8wXzc2NSksIEZfMF81NDEKK1BXX0YwNTRfTUYxMzAgICB0aW1lcyAyIGR3ICBGXzBfNTQxLCAoRl8wXzU0MS1GXzFfODQ3KQorUFdfTUYwNzhfRjExNyAgIHRpbWVzIDIgZHcgIChGXzFfMTc1LUZfMV85NjEpLCBGXzFfMTc1CitQV19GMTE3X0YwNzggICAgdGltZXMgMiBkdyAgRl8xXzE3NSwgKEZfMV8xNzUtRl8wXzM5MCkKK1BXX01GMDYwX01GMDg5ICB0aW1lcyAyIGR3ICAoRl8wXzI5OC1GXzBfODk5KSwtRl8wXzg5OQorUFdfTUYwODlfRjA2MCAgIHRpbWVzIDIgZHcgLUZfMF84OTksIChGXzFfNTAxLUZfMF84OTkpCitQV19NRjA1MF9NRjI1NiAgdGltZXMgMiBkdyAgKEZfMl8wNTMtRl8yXzU2MiksLUZfMl81NjIKK1BXX01GMjU2X0YwNTAgICB0aW1lcyAyIGR3IC1GXzJfNTYyLCAoRl8zXzA3Mi1GXzJfNTYyKQorUERfREVTQ0FMRV9QMSAgIHRpbWVzIDIgZGQgIDEgPDwgKERFU0NBTEVfUDEtMSkKK1BEX0RFU0NBTEVfUDIgICB0aW1lcyAyIGRkICAxIDw8IChERVNDQUxFX1AyLTEpCitQV19ERVNDQUxFX1AyWCAgdGltZXMgNCBkdyAgMSA8PCAoUEFTUzFfQklUUy0xKQogCi0JYWxpZ256CTE2CisgICAgICAgIGFsaWdueiAgMTYKIAogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCVNFQ1RJT04JU0VHX1RFWFQKLQlCSVRTCTMyCisgICAgICAgIFNFQ1RJT04gU0VHX1RFWFQKKyAgICAgICAgQklUUyAgICAzMgogOwogOyBQZXJmb3JtIHRoZSBmb3J3YXJkIERDVCBvbiBvbmUgYmxvY2sgb2Ygc2FtcGxlcy4KIDsKQEAgLTk0LDUyOSArOTQsNTI5IEBACiA7IGpzaW1kX2ZkY3RfaXNsb3dfbW14IChEQ1RFTEVNICogZGF0YSkKIDsKIAotJWRlZmluZSBkYXRhKGIpCQkoYikrOAkJOyBEQ1RFTEVNICogZGF0YQorJWRlZmluZSBkYXRhKGIpICAgICAgICAgKGIpKzggICAgICAgICAgIDsgRENURUxFTSAqIGRhdGEKIAotJWRlZmluZSBvcmlnaW5hbF9lYnAJZWJwKzAKLSVkZWZpbmUgd2soaSkJCWVicC0oV0tfTlVNLShpKSkqU0laRU9GX01NV09SRAk7IG1td29yZCB3a1tXS19OVU1dCi0lZGVmaW5lIFdLX05VTQkJMgorJWRlZmluZSBvcmlnaW5hbF9lYnAgICAgZWJwKzAKKyVkZWZpbmUgd2soaSkgICAgICAgICAgIGVicC0oV0tfTlVNLShpKSkqU0laRU9GX01NV09SRCAgOyBtbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0gICAgICAgICAgMgogCi0JYWxpZ24JMTYKLQlnbG9iYWwJRVhUTihqc2ltZF9mZGN0X2lzbG93X21teCkKKyAgICAgICAgYWxpZ24gICAxNgorICAgICAgICBnbG9iYWwgIEVYVE4oanNpbWRfZmRjdF9pc2xvd19tbXgpCiAKIEVYVE4oanNpbWRfZmRjdF9pc2xvd19tbXgpOgotCXB1c2gJZWJwCi0JbW92CWVheCxlc3AJCQkJOyBlYXggPSBvcmlnaW5hbCBlYnAKLQlzdWIJZXNwLCBieXRlIDQKLQlhbmQJZXNwLCBieXRlICgtU0laRU9GX01NV09SRCkJOyBhbGlnbiB0byA2NCBiaXRzCi0JbW92CVtlc3BdLGVheAotCW1vdgllYnAsZXNwCQkJCTsgZWJwID0gYWxpZ25lZCBlYnAKLQlsZWEJZXNwLCBbd2soMCldCi0JcHVzaHBpYwllYngKLTsJcHVzaAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi07CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotOwlwdXNoCWVzaQkJOyB1bnVzZWQKLTsJcHVzaAllZGkJCTsgdW51c2VkCisgICAgICAgIHB1c2ggICAgZWJwCisgICAgICAgIG1vdiAgICAgZWF4LGVzcCAgICAgICAgICAgICAgICAgICAgICAgICA7IGVheCA9IG9yaWdpbmFsIGVicAorICAgICAgICBzdWIgICAgIGVzcCwgYnl0ZSA0CisgICAgICAgIGFuZCAgICAgZXNwLCBieXRlICgtU0laRU9GX01NV09SRCkgICAgICA7IGFsaWduIHRvIDY0IGJpdHMKKyAgICAgICAgbW92ICAgICBbZXNwXSxlYXgKKyAgICAgICAgbW92ICAgICBlYnAsZXNwICAgICAgICAgICAgICAgICAgICAgICAgIDsgZWJwID0gYWxpZ25lZCBlYnAKKyAgICAgICAgbGVhICAgICBlc3AsIFt3aygwKV0KKyAgICAgICAgcHVzaHBpYyBlYngKKzsgICAgICAgcHVzaCAgICBlY3ggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICAgICAgcHVzaCAgICBlZHggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICAgICAgcHVzaCAgICBlc2kgICAgICAgICAgICAgOyB1bnVzZWQKKzsgICAgICAgcHVzaCAgICBlZGkgICAgICAgICAgICAgOyB1bnVzZWQKIAotCWdldF9HT1QJZWJ4CQk7IGdldCBHT1QgYWRkcmVzcworICAgICAgICBnZXRfR09UIGVieCAgICAgICAgICAgICA7IGdldCBHT1QgYWRkcmVzcwogCi0JOyAtLS0tIFBhc3MgMTogcHJvY2VzcyByb3dzLgorICAgICAgICA7IC0tLS0gUGFzcyAxOiBwcm9jZXNzIHJvd3MuCiAKLQltb3YJZWR4LCBQT0lOVEVSIFtkYXRhKGVheCldCTsgKERDVEVMRU0gKikKLQltb3YJZWN4LCBEQ1RTSVpFLzQKLQlhbGlnbngJMTYsNworICAgICAgICBtb3YgICAgIGVkeCwgUE9JTlRFUiBbZGF0YShlYXgpXSAgICAgICAgOyAoRENURUxFTSAqKQorICAgICAgICBtb3YgICAgIGVjeCwgRENUU0laRS80CisgICAgICAgIGFsaWdueCAgMTYsNwogLnJvd2xvb3A6CiAKLQltb3ZxCW1tMCwgTU1XT1JEIFtNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQotCW1vdnEJbW0xLCBNTVdPUkQgW01NQkxPQ0soMywwLGVkeCxTSVpFT0ZfRENURUxFTSldCi0JbW92cQltbTIsIE1NV09SRCBbTU1CTE9DSygyLDEsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KLQltb3ZxCW1tMywgTU1XT1JEIFtNTUJMT0NLKDMsMSxlZHgsU0laRU9GX0RDVEVMRU0pXQorICAgICAgICBtb3ZxICAgIG1tMCwgTU1XT1JEIFtNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorICAgICAgICBtb3ZxICAgIG1tMSwgTU1XT1JEIFtNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorICAgICAgICBtb3ZxICAgIG1tMiwgTU1XT1JEIFtNTUJMT0NLKDIsMSxlZHgsU0laRU9GX0RDVEVMRU0pXQorICAgICAgICBtb3ZxICAgIG1tMywgTU1XT1JEIFtNTUJMT0NLKDMsMSxlZHgsU0laRU9GX0RDVEVMRU0pXQogCi0JOyBtbTA9KDIwIDIxIDIyIDIzKSwgbW0yPSgyNCAyNSAyNiAyNykKLQk7IG1tMT0oMzAgMzEgMzIgMzMpLCBtbTM9KDM0IDM1IDM2IDM3KQorICAgICAgICA7IG1tMD0oMjAgMjEgMjIgMjMpLCBtbTI9KDI0IDI1IDI2IDI3KQorICAgICAgICA7IG1tMT0oMzAgMzEgMzIgMzMpLCBtbTM9KDM0IDM1IDM2IDM3KQogCi0JbW92cSAgICAgIG1tNCxtbTAJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQotCXB1bnBja2x3ZCBtbTAsbW0xCQk7IG1tMD0oMjAgMzAgMjEgMzEpCi0JcHVucGNraHdkIG1tNCxtbTEJCTsgbW00PSgyMiAzMiAyMyAzMykKLQltb3ZxICAgICAgbW01LG1tMgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCi0JcHVucGNrbHdkIG1tMixtbTMJCTsgbW0yPSgyNCAzNCAyNSAzNSkKLQlwdW5wY2tod2QgbW01LG1tMwkJOyBtbTU9KDI2IDM2IDI3IDM3KQorICAgICAgICBtb3ZxICAgICAgbW00LG1tMCAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgICAgICBwdW5wY2tsd2QgbW0wLG1tMSAgICAgICAgICAgICAgIDsgbW0wPSgyMCAzMCAyMSAzMSkKKyAgICAgICAgcHVucGNraHdkIG1tNCxtbTEgICAgICAgICAgICAgICA7IG1tND0oMjIgMzIgMjMgMzMpCisgICAgICAgIG1vdnEgICAgICBtbTUsbW0yICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgICAgIHB1bnBja2x3ZCBtbTIsbW0zICAgICAgICAgICAgICAgOyBtbTI9KDI0IDM0IDI1IDM1KQorICAgICAgICBwdW5wY2tod2QgbW01LG1tMyAgICAgICAgICAgICAgIDsgbW01PSgyNiAzNiAyNyAzNykKIAotCW1vdnEJbW02LCBNTVdPUkQgW01NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRENURUxFTSldCi0JbW92cQltbTcsIE1NV09SRCBbTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KLQltb3ZxCW1tMSwgTU1XT1JEIFtNTUJMT0NLKDAsMSxlZHgsU0laRU9GX0RDVEVMRU0pXQotCW1vdnEJbW0zLCBNTVdPUkQgW01NQkxPQ0soMSwxLGVkeCxTSVpFT0ZfRENURUxFTSldCisgICAgICAgIG1vdnEgICAgbW02LCBNTVdPUkQgW01NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRENURUxFTSldCisgICAgICAgIG1vdnEgICAgbW03LCBNTVdPUkQgW01NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfRENURUxFTSldCisgICAgICAgIG1vdnEgICAgbW0xLCBNTVdPUkQgW01NQkxPQ0soMCwxLGVkeCxTSVpFT0ZfRENURUxFTSldCisgICAgICAgIG1vdnEgICAgbW0zLCBNTVdPUkQgW01NQkxPQ0soMSwxLGVkeCxTSVpFT0ZfRENURUxFTSldCiAKLQk7IG1tNj0oMDAgMDEgMDIgMDMpLCBtbTE9KDA0IDA1IDA2IDA3KQotCTsgbW03PSgxMCAxMSAxMiAxMyksIG1tMz0oMTQgMTUgMTYgMTcpCisgICAgICAgIDsgbW02PSgwMCAwMSAwMiAwMyksIG1tMT0oMDQgMDUgMDYgMDcpCisgICAgICAgIDsgbW03PSgxMCAxMSAxMiAxMyksIG1tMz0oMTQgMTUgMTYgMTcpCiAKLQltb3ZxCU1NV09SRCBbd2soMCldLCBtbTQJOyB3aygwKT0oMjIgMzIgMjMgMzMpCi0JbW92cQlNTVdPUkQgW3drKDEpXSwgbW0yCTsgd2soMSk9KDI0IDM0IDI1IDM1KQorICAgICAgICBtb3ZxICAgIE1NV09SRCBbd2soMCldLCBtbTQgICAgIDsgd2soMCk9KDIyIDMyIDIzIDMzKQorICAgICAgICBtb3ZxICAgIE1NV09SRCBbd2soMSldLCBtbTIgICAgIDsgd2soMSk9KDI0IDM0IDI1IDM1KQogCi0JbW92cSAgICAgIG1tNCxtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQotCXB1bnBja2x3ZCBtbTYsbW03CQk7IG1tNj0oMDAgMTAgMDEgMTEpCi0JcHVucGNraHdkIG1tNCxtbTcJCTsgbW00PSgwMiAxMiAwMyAxMykKLQltb3ZxICAgICAgbW0yLG1tMQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCi0JcHVucGNrbHdkIG1tMSxtbTMJCTsgbW0xPSgwNCAxNCAwNSAxNSkKLQlwdW5wY2tod2QgbW0yLG1tMwkJOyBtbTI9KDA2IDE2IDA3IDE3KQorICAgICAgICBtb3ZxICAgICAgbW00LG1tNiAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgICAgICBwdW5wY2tsd2QgbW02LG1tNyAgICAgICAgICAgICAgIDsgbW02PSgwMCAxMCAwMSAxMSkKKyAgICAgICAgcHVucGNraHdkIG1tNCxtbTcgICAgICAgICAgICAgICA7IG1tND0oMDIgMTIgMDMgMTMpCisgICAgICAgIG1vdnEgICAgICBtbTIsbW0xICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgICAgIHB1bnBja2x3ZCBtbTEsbW0zICAgICAgICAgICAgICAgOyBtbTE9KDA0IDE0IDA1IDE1KQorICAgICAgICBwdW5wY2tod2QgbW0yLG1tMyAgICAgICAgICAgICAgIDsgbW0yPSgwNiAxNiAwNyAxNykKIAotCW1vdnEgICAgICBtbTcsbW02CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKLQlwdW5wY2tsZHEgbW02LG1tMAkJOyBtbTY9KDAwIDEwIDIwIDMwKT1kYXRhMAotCXB1bnBja2hkcSBtbTcsbW0wCQk7IG1tNz0oMDEgMTEgMjEgMzEpPWRhdGExCi0JbW92cSAgICAgIG1tMyxtbTIJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQotCXB1bnBja2xkcSBtbTIsbW01CQk7IG1tMj0oMDYgMTYgMjYgMzYpPWRhdGE2Ci0JcHVucGNraGRxIG1tMyxtbTUJCTsgbW0zPSgwNyAxNyAyNyAzNyk9ZGF0YTcKKyAgICAgICAgbW92cSAgICAgIG1tNyxtbTYgICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICAgICAgcHVucGNrbGRxIG1tNixtbTAgICAgICAgICAgICAgICA7IG1tNj0oMDAgMTAgMjAgMzApPWRhdGEwCisgICAgICAgIHB1bnBja2hkcSBtbTcsbW0wICAgICAgICAgICAgICAgOyBtbTc9KDAxIDExIDIxIDMxKT1kYXRhMQorICAgICAgICBtb3ZxICAgICAgbW0zLG1tMiAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgICAgICBwdW5wY2tsZHEgbW0yLG1tNSAgICAgICAgICAgICAgIDsgbW0yPSgwNiAxNiAyNiAzNik9ZGF0YTYKKyAgICAgICAgcHVucGNraGRxIG1tMyxtbTUgICAgICAgICAgICAgICA7IG1tMz0oMDcgMTcgMjcgMzcpPWRhdGE3CiAKLQltb3ZxCW1tMCxtbTcKLQltb3ZxCW1tNSxtbTYKLQlwc3VidwltbTcsbW0yCQkJOyBtbTc9ZGF0YTEtZGF0YTY9dG1wNgotCXBzdWJ3CW1tNixtbTMJCQk7IG1tNj1kYXRhMC1kYXRhNz10bXA3Ci0JcGFkZHcJbW0wLG1tMgkJCTsgbW0wPWRhdGExK2RhdGE2PXRtcDEKLQlwYWRkdwltbTUsbW0zCQkJOyBtbTU9ZGF0YTArZGF0YTc9dG1wMAorICAgICAgICBtb3ZxICAgIG1tMCxtbTcKKyAgICAgICAgbW92cSAgICBtbTUsbW02CisgICAgICAgIHBzdWJ3ICAgbW03LG1tMiAgICAgICAgICAgICAgICAgOyBtbTc9ZGF0YTEtZGF0YTY9dG1wNgorICAgICAgICBwc3VidyAgIG1tNixtbTMgICAgICAgICAgICAgICAgIDsgbW02PWRhdGEwLWRhdGE3PXRtcDcKKyAgICAgICAgcGFkZHcgICBtbTAsbW0yICAgICAgICAgICAgICAgICA7IG1tMD1kYXRhMStkYXRhNj10bXAxCisgICAgICAgIHBhZGR3ICAgbW01LG1tMyAgICAgICAgICAgICAgICAgOyBtbTU9ZGF0YTArZGF0YTc9dG1wMAogCi0JbW92cQltbTIsIE1NV09SRCBbd2soMCldCTsgbW0yPSgyMiAzMiAyMyAzMykKLQltb3ZxCW1tMywgTU1XT1JEIFt3aygxKV0JOyBtbTM9KDI0IDM0IDI1IDM1KQotCW1vdnEJTU1XT1JEIFt3aygwKV0sIG1tNwk7IHdrKDApPXRtcDYKLQltb3ZxCU1NV09SRCBbd2soMSldLCBtbTYJOyB3aygxKT10bXA3CisgICAgICAgIG1vdnEgICAgbW0yLCBNTVdPUkQgW3drKDApXSAgICAgOyBtbTI9KDIyIDMyIDIzIDMzKQorICAgICAgICBtb3ZxICAgIG1tMywgTU1XT1JEIFt3aygxKV0gICAgIDsgbW0zPSgyNCAzNCAyNSAzNSkKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW3drKDApXSwgbW03ICAgICA7IHdrKDApPXRtcDYKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW3drKDEpXSwgbW02ICAgICA7IHdrKDEpPXRtcDcKIAotCW1vdnEgICAgICBtbTcsbW00CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKLQlwdW5wY2tsZHEgbW00LG1tMgkJOyBtbTQ9KDAyIDEyIDIyIDMyKT1kYXRhMgotCXB1bnBja2hkcSBtbTcsbW0yCQk7IG1tNz0oMDMgMTMgMjMgMzMpPWRhdGEzCi0JbW92cSAgICAgIG1tNixtbTEJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQotCXB1bnBja2xkcSBtbTEsbW0zCQk7IG1tMT0oMDQgMTQgMjQgMzQpPWRhdGE0Ci0JcHVucGNraGRxIG1tNixtbTMJCTsgbW02PSgwNSAxNSAyNSAzNSk9ZGF0YTUKKyAgICAgICAgbW92cSAgICAgIG1tNyxtbTQgICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICAgICAgcHVucGNrbGRxIG1tNCxtbTIgICAgICAgICAgICAgICA7IG1tND0oMDIgMTIgMjIgMzIpPWRhdGEyCisgICAgICAgIHB1bnBja2hkcSBtbTcsbW0yICAgICAgICAgICAgICAgOyBtbTc9KDAzIDEzIDIzIDMzKT1kYXRhMworICAgICAgICBtb3ZxICAgICAgbW02LG1tMSAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgICAgICBwdW5wY2tsZHEgbW0xLG1tMyAgICAgICAgICAgICAgIDsgbW0xPSgwNCAxNCAyNCAzNCk9ZGF0YTQKKyAgICAgICAgcHVucGNraGRxIG1tNixtbTMgICAgICAgICAgICAgICA7IG1tNj0oMDUgMTUgMjUgMzUpPWRhdGE1CiAKLQltb3ZxCW1tMixtbTcKLQltb3ZxCW1tMyxtbTQKLQlwYWRkdwltbTcsbW0xCQkJOyBtbTc9ZGF0YTMrZGF0YTQ9dG1wMwotCXBhZGR3CW1tNCxtbTYJCQk7IG1tND1kYXRhMitkYXRhNT10bXAyCi0JcHN1YncJbW0yLG1tMQkJCTsgbW0yPWRhdGEzLWRhdGE0PXRtcDQKLQlwc3VidwltbTMsbW02CQkJOyBtbTM9ZGF0YTItZGF0YTU9dG1wNQorICAgICAgICBtb3ZxICAgIG1tMixtbTcKKyAgICAgICAgbW92cSAgICBtbTMsbW00CisgICAgICAgIHBhZGR3ICAgbW03LG1tMSAgICAgICAgICAgICAgICAgOyBtbTc9ZGF0YTMrZGF0YTQ9dG1wMworICAgICAgICBwYWRkdyAgIG1tNCxtbTYgICAgICAgICAgICAgICAgIDsgbW00PWRhdGEyK2RhdGE1PXRtcDIKKyAgICAgICAgcHN1YncgICBtbTIsbW0xICAgICAgICAgICAgICAgICA7IG1tMj1kYXRhMy1kYXRhND10bXA0CisgICAgICAgIHBzdWJ3ICAgbW0zLG1tNiAgICAgICAgICAgICAgICAgOyBtbTM9ZGF0YTItZGF0YTU9dG1wNQogCi0JOyAtLSBFdmVuIHBhcnQKKyAgICAgICAgOyAtLSBFdmVuIHBhcnQKIAotCW1vdnEJbW0xLG1tNQotCW1vdnEJbW02LG1tMAotCXBhZGR3CW1tNSxtbTcJCQk7IG1tNT10bXAxMAotCXBhZGR3CW1tMCxtbTQJCQk7IG1tMD10bXAxMQotCXBzdWJ3CW1tMSxtbTcJCQk7IG1tMT10bXAxMwotCXBzdWJ3CW1tNixtbTQJCQk7IG1tNj10bXAxMgorICAgICAgICBtb3ZxICAgIG1tMSxtbTUKKyAgICAgICAgbW92cSAgICBtbTYsbW0wCisgICAgICAgIHBhZGR3ICAgbW01LG1tNyAgICAgICAgICAgICAgICAgOyBtbTU9dG1wMTAKKyAgICAgICAgcGFkZHcgICBtbTAsbW00ICAgICAgICAgICAgICAgICA7IG1tMD10bXAxMQorICAgICAgICBwc3VidyAgIG1tMSxtbTcgICAgICAgICAgICAgICAgIDsgbW0xPXRtcDEzCisgICAgICAgIHBzdWJ3ICAgbW02LG1tNCAgICAgICAgICAgICAgICAgOyBtbTY9dG1wMTIKIAotCW1vdnEJbW03LG1tNQotCXBhZGR3CW1tNSxtbTAJCQk7IG1tNT10bXAxMCt0bXAxMQotCXBzdWJ3CW1tNyxtbTAJCQk7IG1tNz10bXAxMC10bXAxMQorICAgICAgICBtb3ZxICAgIG1tNyxtbTUKKyAgICAgICAgcGFkZHcgICBtbTUsbW0wICAgICAgICAgICAgICAgICA7IG1tNT10bXAxMCt0bXAxMQorICAgICAgICBwc3VidyAgIG1tNyxtbTAgICAgICAgICAgICAgICAgIDsgbW03PXRtcDEwLXRtcDExCiAKLQlwc2xsdwltbTUsUEFTUzFfQklUUwkJOyBtbTU9ZGF0YTAKLQlwc2xsdwltbTcsUEFTUzFfQklUUwkJOyBtbTc9ZGF0YTQKKyAgICAgICAgcHNsbHcgICBtbTUsUEFTUzFfQklUUyAgICAgICAgICA7IG1tNT1kYXRhMAorICAgICAgICBwc2xsdyAgIG1tNyxQQVNTMV9CSVRTICAgICAgICAgIDsgbW03PWRhdGE0CiAKLQltb3ZxCU1NV09SRCBbTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIG1tNQotCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDAsMSxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW03CisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW01CisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtNTUJMT0NLKDAsMSxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW03CiAKLQk7IChPcmlnaW5hbCkKLQk7IHoxID0gKHRtcDEyICsgdG1wMTMpICogMC41NDExOTYxMDA7Ci0JOyBkYXRhMiA9IHoxICsgdG1wMTMgKiAwLjc2NTM2Njg2NTsKLQk7IGRhdGE2ID0gejEgKyB0bXAxMiAqIC0xLjg0Nzc1OTA2NTsKLQk7Ci0JOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKLQk7IGRhdGEyID0gdG1wMTMgKiAoMC41NDExOTYxMDAgKyAwLjc2NTM2Njg2NSkgKyB0bXAxMiAqIDAuNTQxMTk2MTAwOwotCTsgZGF0YTYgPSB0bXAxMyAqIDAuNTQxMTk2MTAwICsgdG1wMTIgKiAoMC41NDExOTYxMDAgLSAxLjg0Nzc1OTA2NSk7CisgICAgICAgIDsgKE9yaWdpbmFsKQorICAgICAgICA7IHoxID0gKHRtcDEyICsgdG1wMTMpICogMC41NDExOTYxMDA7CisgICAgICAgIDsgZGF0YTIgPSB6MSArIHRtcDEzICogMC43NjUzNjY4NjU7CisgICAgICAgIDsgZGF0YTYgPSB6MSArIHRtcDEyICogLTEuODQ3NzU5MDY1OworICAgICAgICA7CisgICAgICAgIDsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisgICAgICAgIDsgZGF0YTIgPSB0bXAxMyAqICgwLjU0MTE5NjEwMCArIDAuNzY1MzY2ODY1KSArIHRtcDEyICogMC41NDExOTYxMDA7CisgICAgICAgIDsgZGF0YTYgPSB0bXAxMyAqIDAuNTQxMTk2MTAwICsgdG1wMTIgKiAoMC41NDExOTYxMDAgLSAxLjg0Nzc1OTA2NSk7CiAKLQltb3ZxICAgICAgbW00LG1tMQkJOyBtbTE9dG1wMTMKLQltb3ZxICAgICAgbW0wLG1tMQotCXB1bnBja2x3ZCBtbTQsbW02CQk7IG1tNj10bXAxMgotCXB1bnBja2h3ZCBtbTAsbW02Ci0JbW92cSAgICAgIG1tMSxtbTQKLQltb3ZxICAgICAgbW02LG1tMAotCXBtYWRkd2QgICBtbTQsW0dPVE9GRihlYngsUFdfRjEzMF9GMDU0KV0JOyBtbTQ9ZGF0YTJMCi0JcG1hZGR3ZCAgIG1tMCxbR09UT0ZGKGVieCxQV19GMTMwX0YwNTQpXQk7IG1tMD1kYXRhMkgKLQlwbWFkZHdkICAgbW0xLFtHT1RPRkYoZWJ4LFBXX0YwNTRfTUYxMzApXQk7IG1tMT1kYXRhNkwKLQlwbWFkZHdkICAgbW02LFtHT1RPRkYoZWJ4LFBXX0YwNTRfTUYxMzApXQk7IG1tNj1kYXRhNkgKKyAgICAgICAgbW92cSAgICAgIG1tNCxtbTEgICAgICAgICAgICAgICA7IG1tMT10bXAxMworICAgICAgICBtb3ZxICAgICAgbW0wLG1tMQorICAgICAgICBwdW5wY2tsd2QgbW00LG1tNiAgICAgICAgICAgICAgIDsgbW02PXRtcDEyCisgICAgICAgIHB1bnBja2h3ZCBtbTAsbW02CisgICAgICAgIG1vdnEgICAgICBtbTEsbW00CisgICAgICAgIG1vdnEgICAgICBtbTYsbW0wCisgICAgICAgIHBtYWRkd2QgICBtbTQsW0dPVE9GRihlYngsUFdfRjEzMF9GMDU0KV0gICAgICAgIDsgbW00PWRhdGEyTAorICAgICAgICBwbWFkZHdkICAgbW0wLFtHT1RPRkYoZWJ4LFBXX0YxMzBfRjA1NCldICAgICAgICA7IG1tMD1kYXRhMkgKKyAgICAgICAgcG1hZGR3ZCAgIG1tMSxbR09UT0ZGKGVieCxQV19GMDU0X01GMTMwKV0gICAgICAgOyBtbTE9ZGF0YTZMCisgICAgICAgIHBtYWRkd2QgICBtbTYsW0dPVE9GRihlYngsUFdfRjA1NF9NRjEzMCldICAgICAgIDsgbW02PWRhdGE2SAogCi0JcGFkZGQJbW00LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXQotCXBhZGRkCW1tMCxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0KLQlwc3JhZAltbTQsREVTQ0FMRV9QMQotCXBzcmFkCW1tMCxERVNDQUxFX1AxCi0JcGFkZGQJbW0xLFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXQotCXBhZGRkCW1tNixbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0KLQlwc3JhZAltbTEsREVTQ0FMRV9QMQotCXBzcmFkCW1tNixERVNDQUxFX1AxCisgICAgICAgIHBhZGRkICAgbW00LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXQorICAgICAgICBwYWRkZCAgIG1tMCxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0KKyAgICAgICAgcHNyYWQgICBtbTQsREVTQ0FMRV9QMQorICAgICAgICBwc3JhZCAgIG1tMCxERVNDQUxFX1AxCisgICAgICAgIHBhZGRkICAgbW0xLFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXQorICAgICAgICBwYWRkZCAgIG1tNixbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0KKyAgICAgICAgcHNyYWQgICBtbTEsREVTQ0FMRV9QMQorICAgICAgICBwc3JhZCAgIG1tNixERVNDQUxFX1AxCiAKLQlwYWNrc3NkdyAgbW00LG1tMAkJOyBtbTQ9ZGF0YTIKLQlwYWNrc3NkdyAgbW0xLG1tNgkJOyBtbTE9ZGF0YTYKKyAgICAgICAgcGFja3NzZHcgIG1tNCxtbTAgICAgICAgICAgICAgICA7IG1tND1kYXRhMgorICAgICAgICBwYWNrc3NkdyAgbW0xLG1tNiAgICAgICAgICAgICAgIDsgbW0xPWRhdGE2CiAKLQltb3ZxCU1NV09SRCBbTU1CTE9DSygyLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIG1tNAotCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDIsMSxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW0xCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW00CisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtNTUJMT0NLKDIsMSxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW0xCiAKLQk7IC0tIE9kZCBwYXJ0CisgICAgICAgIDsgLS0gT2RkIHBhcnQKIAotCW1vdnEJbW01LCBNTVdPUkQgW3drKDApXQk7IG1tNT10bXA2Ci0JbW92cQltbTcsIE1NV09SRCBbd2soMSldCTsgbW03PXRtcDcKKyAgICAgICAgbW92cSAgICBtbTUsIE1NV09SRCBbd2soMCldICAgICA7IG1tNT10bXA2CisgICAgICAgIG1vdnEgICAgbW03LCBNTVdPUkQgW3drKDEpXSAgICAgOyBtbTc9dG1wNwogCi0JbW92cQltbTAsbW0yCQkJOyBtbTI9dG1wNAotCW1vdnEJbW02LG1tMwkJCTsgbW0zPXRtcDUKLQlwYWRkdwltbTAsbW01CQkJOyBtbTA9ejMKLQlwYWRkdwltbTYsbW03CQkJOyBtbTY9ejQKKyAgICAgICAgbW92cSAgICBtbTAsbW0yICAgICAgICAgICAgICAgICA7IG1tMj10bXA0CisgICAgICAgIG1vdnEgICAgbW02LG1tMyAgICAgICAgICAgICAgICAgOyBtbTM9dG1wNQorICAgICAgICBwYWRkdyAgIG1tMCxtbTUgICAgICAgICAgICAgICAgIDsgbW0wPXozCisgICAgICAgIHBhZGR3ICAgbW02LG1tNyAgICAgICAgICAgICAgICAgOyBtbTY9ejQKIAotCTsgKE9yaWdpbmFsKQotCTsgejUgPSAoejMgKyB6NCkgKiAxLjE3NTg3NTYwMjsKLQk7IHozID0gejMgKiAtMS45NjE1NzA1NjA7ICB6NCA9IHo0ICogLTAuMzkwMTgwNjQ0OwotCTsgejMgKz0gejU7ICB6NCArPSB6NTsKLQk7Ci0JOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKLQk7IHozID0gejMgKiAoMS4xNzU4NzU2MDIgLSAxLjk2MTU3MDU2MCkgKyB6NCAqIDEuMTc1ODc1NjAyOwotCTsgejQgPSB6MyAqIDEuMTc1ODc1NjAyICsgejQgKiAoMS4xNzU4NzU2MDIgLSAwLjM5MDE4MDY0NCk7CisgICAgICAgIDsgKE9yaWdpbmFsKQorICAgICAgICA7IHo1ID0gKHozICsgejQpICogMS4xNzU4NzU2MDI7CisgICAgICAgIDsgejMgPSB6MyAqIC0xLjk2MTU3MDU2MDsgIHo0ID0gejQgKiAtMC4zOTAxODA2NDQ7CisgICAgICAgIDsgejMgKz0gejU7ICB6NCArPSB6NTsKKyAgICAgICAgOworICAgICAgICA7IChUaGlzIGltcGxlbWVudGF0aW9uKQorICAgICAgICA7IHozID0gejMgKiAoMS4xNzU4NzU2MDIgLSAxLjk2MTU3MDU2MCkgKyB6NCAqIDEuMTc1ODc1NjAyOworICAgICAgICA7IHo0ID0gejMgKiAxLjE3NTg3NTYwMiArIHo0ICogKDEuMTc1ODc1NjAyIC0gMC4zOTAxODA2NDQpOwogCi0JbW92cSAgICAgIG1tNCxtbTAKLQltb3ZxICAgICAgbW0xLG1tMAotCXB1bnBja2x3ZCBtbTQsbW02Ci0JcHVucGNraHdkIG1tMSxtbTYKLQltb3ZxICAgICAgbW0wLG1tNAotCW1vdnEgICAgICBtbTYsbW0xCi0JcG1hZGR3ZCAgIG1tNCxbR09UT0ZGKGVieCxQV19NRjA3OF9GMTE3KV0JOyBtbTQ9ejNMCi0JcG1hZGR3ZCAgIG1tMSxbR09UT0ZGKGVieCxQV19NRjA3OF9GMTE3KV0JOyBtbTE9ejNICi0JcG1hZGR3ZCAgIG1tMCxbR09UT0ZGKGVieCxQV19GMTE3X0YwNzgpXQk7IG1tMD16NEwKLQlwbWFkZHdkICAgbW02LFtHT1RPRkYoZWJ4LFBXX0YxMTdfRjA3OCldCTsgbW02PXo0SAorICAgICAgICBtb3ZxICAgICAgbW00LG1tMAorICAgICAgICBtb3ZxICAgICAgbW0xLG1tMAorICAgICAgICBwdW5wY2tsd2QgbW00LG1tNgorICAgICAgICBwdW5wY2tod2QgbW0xLG1tNgorICAgICAgICBtb3ZxICAgICAgbW0wLG1tNAorICAgICAgICBtb3ZxICAgICAgbW02LG1tMQorICAgICAgICBwbWFkZHdkICAgbW00LFtHT1RPRkYoZWJ4LFBXX01GMDc4X0YxMTcpXSAgICAgICA7IG1tND16M0wKKyAgICAgICAgcG1hZGR3ZCAgIG1tMSxbR09UT0ZGKGVieCxQV19NRjA3OF9GMTE3KV0gICAgICAgOyBtbTE9ejNICisgICAgICAgIHBtYWRkd2QgICBtbTAsW0dPVE9GRihlYngsUFdfRjExN19GMDc4KV0gICAgICAgIDsgbW0wPXo0TAorICAgICAgICBwbWFkZHdkICAgbW02LFtHT1RPRkYoZWJ4LFBXX0YxMTdfRjA3OCldICAgICAgICA7IG1tNj16NEgKIAotCW1vdnEJTU1XT1JEIFt3aygwKV0sIG1tNAk7IHdrKDApPXozTAotCW1vdnEJTU1XT1JEIFt3aygxKV0sIG1tMQk7IHdrKDEpPXozSAorICAgICAgICBtb3ZxICAgIE1NV09SRCBbd2soMCldLCBtbTQgICAgIDsgd2soMCk9ejNMCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFt3aygxKV0sIG1tMSAgICAgOyB3aygxKT16M0gKIAotCTsgKE9yaWdpbmFsKQotCTsgejEgPSB0bXA0ICsgdG1wNzsgIHoyID0gdG1wNSArIHRtcDY7Ci0JOyB0bXA0ID0gdG1wNCAqIDAuMjk4NjMxMzM2OyAgdG1wNSA9IHRtcDUgKiAyLjA1MzExOTg2OTsKLQk7IHRtcDYgPSB0bXA2ICogMy4wNzI3MTEwMjY7ICB0bXA3ID0gdG1wNyAqIDEuNTAxMzIxMTEwOwotCTsgejEgPSB6MSAqIC0wLjg5OTk3NjIyMzsgIHoyID0gejIgKiAtMi41NjI5MTU0NDc7Ci0JOyBkYXRhNyA9IHRtcDQgKyB6MSArIHozOyAgZGF0YTUgPSB0bXA1ICsgejIgKyB6NDsKLQk7IGRhdGEzID0gdG1wNiArIHoyICsgejM7ICBkYXRhMSA9IHRtcDcgKyB6MSArIHo0OwotCTsKLQk7IChUaGlzIGltcGxlbWVudGF0aW9uKQotCTsgdG1wNCA9IHRtcDQgKiAoMC4yOTg2MzEzMzYgLSAwLjg5OTk3NjIyMykgKyB0bXA3ICogLTAuODk5OTc2MjIzOwotCTsgdG1wNSA9IHRtcDUgKiAoMi4wNTMxMTk4NjkgLSAyLjU2MjkxNTQ0NykgKyB0bXA2ICogLTIuNTYyOTE1NDQ3OwotCTsgdG1wNiA9IHRtcDUgKiAtMi41NjI5MTU0NDcgKyB0bXA2ICogKDMuMDcyNzExMDI2IC0gMi41NjI5MTU0NDcpOwotCTsgdG1wNyA9IHRtcDQgKiAtMC44OTk5NzYyMjMgKyB0bXA3ICogKDEuNTAxMzIxMTEwIC0gMC44OTk5NzYyMjMpOwotCTsgZGF0YTcgPSB0bXA0ICsgejM7ICBkYXRhNSA9IHRtcDUgKyB6NDsKLQk7IGRhdGEzID0gdG1wNiArIHozOyAgZGF0YTEgPSB0bXA3ICsgejQ7CisgICAgICAgIDsgKE9yaWdpbmFsKQorICAgICAgICA7IHoxID0gdG1wNCArIHRtcDc7ICB6MiA9IHRtcDUgKyB0bXA2OworICAgICAgICA7IHRtcDQgPSB0bXA0ICogMC4yOTg2MzEzMzY7ICB0bXA1ID0gdG1wNSAqIDIuMDUzMTE5ODY5OworICAgICAgICA7IHRtcDYgPSB0bXA2ICogMy4wNzI3MTEwMjY7ICB0bXA3ID0gdG1wNyAqIDEuNTAxMzIxMTEwOworICAgICAgICA7IHoxID0gejEgKiAtMC44OTk5NzYyMjM7ICB6MiA9IHoyICogLTIuNTYyOTE1NDQ3OworICAgICAgICA7IGRhdGE3ID0gdG1wNCArIHoxICsgejM7ICBkYXRhNSA9IHRtcDUgKyB6MiArIHo0OworICAgICAgICA7IGRhdGEzID0gdG1wNiArIHoyICsgejM7ICBkYXRhMSA9IHRtcDcgKyB6MSArIHo0OworICAgICAgICA7CisgICAgICAgIDsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisgICAgICAgIDsgdG1wNCA9IHRtcDQgKiAoMC4yOTg2MzEzMzYgLSAwLjg5OTk3NjIyMykgKyB0bXA3ICogLTAuODk5OTc2MjIzOworICAgICAgICA7IHRtcDUgPSB0bXA1ICogKDIuMDUzMTE5ODY5IC0gMi41NjI5MTU0NDcpICsgdG1wNiAqIC0yLjU2MjkxNTQ0NzsKKyAgICAgICAgOyB0bXA2ID0gdG1wNSAqIC0yLjU2MjkxNTQ0NyArIHRtcDYgKiAoMy4wNzI3MTEwMjYgLSAyLjU2MjkxNTQ0Nyk7CisgICAgICAgIDsgdG1wNyA9IHRtcDQgKiAtMC44OTk5NzYyMjMgKyB0bXA3ICogKDEuNTAxMzIxMTEwIC0gMC44OTk5NzYyMjMpOworICAgICAgICA7IGRhdGE3ID0gdG1wNCArIHozOyAgZGF0YTUgPSB0bXA1ICsgejQ7CisgICAgICAgIDsgZGF0YTMgPSB0bXA2ICsgejM7ICBkYXRhMSA9IHRtcDcgKyB6NDsKIAotCW1vdnEgICAgICBtbTQsbW0yCi0JbW92cSAgICAgIG1tMSxtbTIKLQlwdW5wY2tsd2QgbW00LG1tNwotCXB1bnBja2h3ZCBtbTEsbW03Ci0JbW92cSAgICAgIG1tMixtbTQKLQltb3ZxICAgICAgbW03LG1tMQotCXBtYWRkd2QgICBtbTQsW0dPVE9GRihlYngsUFdfTUYwNjBfTUYwODkpXQk7IG1tND10bXA0TAotCXBtYWRkd2QgICBtbTEsW0dPVE9GRihlYngsUFdfTUYwNjBfTUYwODkpXQk7IG1tMT10bXA0SAotCXBtYWRkd2QgICBtbTIsW0dPVE9GRihlYngsUFdfTUYwODlfRjA2MCldCTsgbW0yPXRtcDdMCi0JcG1hZGR3ZCAgIG1tNyxbR09UT0ZGKGVieCxQV19NRjA4OV9GMDYwKV0JOyBtbTc9dG1wN0gKKyAgICAgICAgbW92cSAgICAgIG1tNCxtbTIKKyAgICAgICAgbW92cSAgICAgIG1tMSxtbTIKKyAgICAgICAgcHVucGNrbHdkIG1tNCxtbTcKKyAgICAgICAgcHVucGNraHdkIG1tMSxtbTcKKyAgICAgICAgbW92cSAgICAgIG1tMixtbTQKKyAgICAgICAgbW92cSAgICAgIG1tNyxtbTEKKyAgICAgICAgcG1hZGR3ZCAgIG1tNCxbR09UT0ZGKGVieCxQV19NRjA2MF9NRjA4OSldICAgICAgOyBtbTQ9dG1wNEwKKyAgICAgICAgcG1hZGR3ZCAgIG1tMSxbR09UT0ZGKGVieCxQV19NRjA2MF9NRjA4OSldICAgICAgOyBtbTE9dG1wNEgKKyAgICAgICAgcG1hZGR3ZCAgIG1tMixbR09UT0ZGKGVieCxQV19NRjA4OV9GMDYwKV0gICAgICAgOyBtbTI9dG1wN0wKKyAgICAgICAgcG1hZGR3ZCAgIG1tNyxbR09UT0ZGKGVieCxQV19NRjA4OV9GMDYwKV0gICAgICAgOyBtbTc9dG1wN0gKIAotCXBhZGRkCW1tNCwgTU1XT1JEIFt3aygwKV0JOyBtbTQ9ZGF0YTdMCi0JcGFkZGQJbW0xLCBNTVdPUkQgW3drKDEpXQk7IG1tMT1kYXRhN0gKLQlwYWRkZAltbTIsbW0wCQkJOyBtbTI9ZGF0YTFMCi0JcGFkZGQJbW03LG1tNgkJCTsgbW03PWRhdGExSAorICAgICAgICBwYWRkZCAgIG1tNCwgTU1XT1JEIFt3aygwKV0gICAgIDsgbW00PWRhdGE3TAorICAgICAgICBwYWRkZCAgIG1tMSwgTU1XT1JEIFt3aygxKV0gICAgIDsgbW0xPWRhdGE3SAorICAgICAgICBwYWRkZCAgIG1tMixtbTAgICAgICAgICAgICAgICAgIDsgbW0yPWRhdGExTAorICAgICAgICBwYWRkZCAgIG1tNyxtbTYgICAgICAgICAgICAgICAgIDsgbW03PWRhdGExSAogCi0JcGFkZGQJbW00LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXQotCXBhZGRkCW1tMSxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0KLQlwc3JhZAltbTQsREVTQ0FMRV9QMQotCXBzcmFkCW1tMSxERVNDQUxFX1AxCi0JcGFkZGQJbW0yLFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXQotCXBhZGRkCW1tNyxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0KLQlwc3JhZAltbTIsREVTQ0FMRV9QMQotCXBzcmFkCW1tNyxERVNDQUxFX1AxCisgICAgICAgIHBhZGRkICAgbW00LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXQorICAgICAgICBwYWRkZCAgIG1tMSxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0KKyAgICAgICAgcHNyYWQgICBtbTQsREVTQ0FMRV9QMQorICAgICAgICBwc3JhZCAgIG1tMSxERVNDQUxFX1AxCisgICAgICAgIHBhZGRkICAgbW0yLFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXQorICAgICAgICBwYWRkZCAgIG1tNyxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0KKyAgICAgICAgcHNyYWQgICBtbTIsREVTQ0FMRV9QMQorICAgICAgICBwc3JhZCAgIG1tNyxERVNDQUxFX1AxCiAKLQlwYWNrc3NkdyAgbW00LG1tMQkJOyBtbTQ9ZGF0YTcKLQlwYWNrc3NkdyAgbW0yLG1tNwkJOyBtbTI9ZGF0YTEKKyAgICAgICAgcGFja3NzZHcgIG1tNCxtbTEgICAgICAgICAgICAgICA7IG1tND1kYXRhNworICAgICAgICBwYWNrc3NkdyAgbW0yLG1tNyAgICAgICAgICAgICAgIDsgbW0yPWRhdGExCiAKLQltb3ZxCU1NV09SRCBbTU1CTE9DSygzLDEsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIG1tNAotCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW0yCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtNTUJMT0NLKDMsMSxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW00CisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW0yCiAKLQltb3ZxICAgICAgbW0xLG1tMwotCW1vdnEgICAgICBtbTcsbW0zCi0JcHVucGNrbHdkIG1tMSxtbTUKLQlwdW5wY2tod2QgbW03LG1tNQotCW1vdnEgICAgICBtbTMsbW0xCi0JbW92cSAgICAgIG1tNSxtbTcKLQlwbWFkZHdkICAgbW0xLFtHT1RPRkYoZWJ4LFBXX01GMDUwX01GMjU2KV0JOyBtbTE9dG1wNUwKLQlwbWFkZHdkICAgbW03LFtHT1RPRkYoZWJ4LFBXX01GMDUwX01GMjU2KV0JOyBtbTc9dG1wNUgKLQlwbWFkZHdkICAgbW0zLFtHT1RPRkYoZWJ4LFBXX01GMjU2X0YwNTApXQk7IG1tMz10bXA2TAotCXBtYWRkd2QgICBtbTUsW0dPVE9GRihlYngsUFdfTUYyNTZfRjA1MCldCTsgbW01PXRtcDZICisgICAgICAgIG1vdnEgICAgICBtbTEsbW0zCisgICAgICAgIG1vdnEgICAgICBtbTcsbW0zCisgICAgICAgIHB1bnBja2x3ZCBtbTEsbW01CisgICAgICAgIHB1bnBja2h3ZCBtbTcsbW01CisgICAgICAgIG1vdnEgICAgICBtbTMsbW0xCisgICAgICAgIG1vdnEgICAgICBtbTUsbW03CisgICAgICAgIHBtYWRkd2QgICBtbTEsW0dPVE9GRihlYngsUFdfTUYwNTBfTUYyNTYpXSAgICAgIDsgbW0xPXRtcDVMCisgICAgICAgIHBtYWRkd2QgICBtbTcsW0dPVE9GRihlYngsUFdfTUYwNTBfTUYyNTYpXSAgICAgIDsgbW03PXRtcDVICisgICAgICAgIHBtYWRkd2QgICBtbTMsW0dPVE9GRihlYngsUFdfTUYyNTZfRjA1MCldICAgICAgIDsgbW0zPXRtcDZMCisgICAgICAgIHBtYWRkd2QgICBtbTUsW0dPVE9GRihlYngsUFdfTUYyNTZfRjA1MCldICAgICAgIDsgbW01PXRtcDZICiAKLQlwYWRkZAltbTEsbW0wCQkJOyBtbTE9ZGF0YTVMCi0JcGFkZGQJbW03LG1tNgkJCTsgbW03PWRhdGE1SAotCXBhZGRkCW1tMywgTU1XT1JEIFt3aygwKV0JOyBtbTM9ZGF0YTNMCi0JcGFkZGQJbW01LCBNTVdPUkQgW3drKDEpXQk7IG1tNT1kYXRhM0gKKyAgICAgICAgcGFkZGQgICBtbTEsbW0wICAgICAgICAgICAgICAgICA7IG1tMT1kYXRhNUwKKyAgICAgICAgcGFkZGQgICBtbTcsbW02ICAgICAgICAgICAgICAgICA7IG1tNz1kYXRhNUgKKyAgICAgICAgcGFkZGQgICBtbTMsIE1NV09SRCBbd2soMCldICAgICA7IG1tMz1kYXRhM0wKKyAgICAgICAgcGFkZGQgICBtbTUsIE1NV09SRCBbd2soMSldICAgICA7IG1tNT1kYXRhM0gKIAotCXBhZGRkCW1tMSxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0KLQlwYWRkZAltbTcsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldCi0JcHNyYWQJbW0xLERFU0NBTEVfUDEKLQlwc3JhZAltbTcsREVTQ0FMRV9QMQotCXBhZGRkCW1tMyxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0KLQlwYWRkZAltbTUsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldCi0JcHNyYWQJbW0zLERFU0NBTEVfUDEKLQlwc3JhZAltbTUsREVTQ0FMRV9QMQorICAgICAgICBwYWRkZCAgIG1tMSxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0KKyAgICAgICAgcGFkZGQgICBtbTcsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldCisgICAgICAgIHBzcmFkICAgbW0xLERFU0NBTEVfUDEKKyAgICAgICAgcHNyYWQgICBtbTcsREVTQ0FMRV9QMQorICAgICAgICBwYWRkZCAgIG1tMyxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0KKyAgICAgICAgcGFkZGQgICBtbTUsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldCisgICAgICAgIHBzcmFkICAgbW0zLERFU0NBTEVfUDEKKyAgICAgICAgcHNyYWQgICBtbTUsREVTQ0FMRV9QMQogCi0JcGFja3NzZHcgIG1tMSxtbTcJCTsgbW0xPWRhdGE1Ci0JcGFja3NzZHcgIG1tMyxtbTUJCTsgbW0zPWRhdGEzCisgICAgICAgIHBhY2tzc2R3ICBtbTEsbW03ICAgICAgICAgICAgICAgOyBtbTE9ZGF0YTUKKyAgICAgICAgcGFja3NzZHcgIG1tMyxtbTUgICAgICAgICAgICAgICA7IG1tMz1kYXRhMwogCi0JbW92cQlNTVdPUkQgW01NQkxPQ0soMSwxLGVkeCxTSVpFT0ZfRENURUxFTSldLCBtbTEKLQltb3ZxCU1NV09SRCBbTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIG1tMworICAgICAgICBtb3ZxICAgIE1NV09SRCBbTU1CTE9DSygxLDEsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIG1tMQorICAgICAgICBtb3ZxICAgIE1NV09SRCBbTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIG1tMwogCi0JYWRkCWVkeCwgYnl0ZSA0KkRDVFNJWkUqU0laRU9GX0RDVEVMRU0KLQlkZWMJZWN4Ci0Jam56CW5lYXIgLnJvd2xvb3AKKyAgICAgICAgYWRkICAgICBlZHgsIGJ5dGUgNCpEQ1RTSVpFKlNJWkVPRl9EQ1RFTEVNCisgICAgICAgIGRlYyAgICAgZWN4CisgICAgICAgIGpueiAgICAgbmVhciAucm93bG9vcAogCi0JOyAtLS0tIFBhc3MgMjogcHJvY2VzcyBjb2x1bW5zLgorICAgICAgICA7IC0tLS0gUGFzcyAyOiBwcm9jZXNzIGNvbHVtbnMuCiAKLQltb3YJZWR4LCBQT0lOVEVSIFtkYXRhKGVheCldCTsgKERDVEVMRU0gKikKLQltb3YJZWN4LCBEQ1RTSVpFLzQKLQlhbGlnbngJMTYsNworICAgICAgICBtb3YgICAgIGVkeCwgUE9JTlRFUiBbZGF0YShlYXgpXSAgICAgICAgOyAoRENURUxFTSAqKQorICAgICAgICBtb3YgICAgIGVjeCwgRENUU0laRS80CisgICAgICAgIGFsaWdueCAgMTYsNwogLmNvbHVtbmxvb3A6CiAKLQltb3ZxCW1tMCwgTU1XT1JEIFtNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQotCW1vdnEJbW0xLCBNTVdPUkQgW01NQkxPQ0soMywwLGVkeCxTSVpFT0ZfRENURUxFTSldCi0JbW92cQltbTIsIE1NV09SRCBbTU1CTE9DSyg2LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KLQltb3ZxCW1tMywgTU1XT1JEIFtNTUJMT0NLKDcsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorICAgICAgICBtb3ZxICAgIG1tMCwgTU1XT1JEIFtNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorICAgICAgICBtb3ZxICAgIG1tMSwgTU1XT1JEIFtNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorICAgICAgICBtb3ZxICAgIG1tMiwgTU1XT1JEIFtNTUJMT0NLKDYsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorICAgICAgICBtb3ZxICAgIG1tMywgTU1XT1JEIFtNTUJMT0NLKDcsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQogCi0JOyBtbTA9KDAyIDEyIDIyIDMyKSwgbW0yPSg0MiA1MiA2MiA3MikKLQk7IG1tMT0oMDMgMTMgMjMgMzMpLCBtbTM9KDQzIDUzIDYzIDczKQorICAgICAgICA7IG1tMD0oMDIgMTIgMjIgMzIpLCBtbTI9KDQyIDUyIDYyIDcyKQorICAgICAgICA7IG1tMT0oMDMgMTMgMjMgMzMpLCBtbTM9KDQzIDUzIDYzIDczKQogCi0JbW92cSAgICAgIG1tNCxtbTAJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQotCXB1bnBja2x3ZCBtbTAsbW0xCQk7IG1tMD0oMDIgMDMgMTIgMTMpCi0JcHVucGNraHdkIG1tNCxtbTEJCTsgbW00PSgyMiAyMyAzMiAzMykKLQltb3ZxICAgICAgbW01LG1tMgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCi0JcHVucGNrbHdkIG1tMixtbTMJCTsgbW0yPSg0MiA0MyA1MiA1MykKLQlwdW5wY2tod2QgbW01LG1tMwkJOyBtbTU9KDYyIDYzIDcyIDczKQorICAgICAgICBtb3ZxICAgICAgbW00LG1tMCAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgICAgICBwdW5wY2tsd2QgbW0wLG1tMSAgICAgICAgICAgICAgIDsgbW0wPSgwMiAwMyAxMiAxMykKKyAgICAgICAgcHVucGNraHdkIG1tNCxtbTEgICAgICAgICAgICAgICA7IG1tND0oMjIgMjMgMzIgMzMpCisgICAgICAgIG1vdnEgICAgICBtbTUsbW0yICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgICAgIHB1bnBja2x3ZCBtbTIsbW0zICAgICAgICAgICAgICAgOyBtbTI9KDQyIDQzIDUyIDUzKQorICAgICAgICBwdW5wY2tod2QgbW01LG1tMyAgICAgICAgICAgICAgIDsgbW01PSg2MiA2MyA3MiA3MykKIAotCW1vdnEJbW02LCBNTVdPUkQgW01NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRENURUxFTSldCi0JbW92cQltbTcsIE1NV09SRCBbTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KLQltb3ZxCW1tMSwgTU1XT1JEIFtNTUJMT0NLKDQsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQotCW1vdnEJbW0zLCBNTVdPUkQgW01NQkxPQ0soNSwwLGVkeCxTSVpFT0ZfRENURUxFTSldCisgICAgICAgIG1vdnEgICAgbW02LCBNTVdPUkQgW01NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRENURUxFTSldCisgICAgICAgIG1vdnEgICAgbW03LCBNTVdPUkQgW01NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfRENURUxFTSldCisgICAgICAgIG1vdnEgICAgbW0xLCBNTVdPUkQgW01NQkxPQ0soNCwwLGVkeCxTSVpFT0ZfRENURUxFTSldCisgICAgICAgIG1vdnEgICAgbW0zLCBNTVdPUkQgW01NQkxPQ0soNSwwLGVkeCxTSVpFT0ZfRENURUxFTSldCiAKLQk7IG1tNj0oMDAgMTAgMjAgMzApLCBtbTE9KDQwIDUwIDYwIDcwKQotCTsgbW03PSgwMSAxMSAyMSAzMSksIG1tMz0oNDEgNTEgNjEgNzEpCisgICAgICAgIDsgbW02PSgwMCAxMCAyMCAzMCksIG1tMT0oNDAgNTAgNjAgNzApCisgICAgICAgIDsgbW03PSgwMSAxMSAyMSAzMSksIG1tMz0oNDEgNTEgNjEgNzEpCiAKLQltb3ZxCU1NV09SRCBbd2soMCldLCBtbTQJOyB3aygwKT0oMjIgMjMgMzIgMzMpCi0JbW92cQlNTVdPUkQgW3drKDEpXSwgbW0yCTsgd2soMSk9KDQyIDQzIDUyIDUzKQorICAgICAgICBtb3ZxICAgIE1NV09SRCBbd2soMCldLCBtbTQgICAgIDsgd2soMCk9KDIyIDIzIDMyIDMzKQorICAgICAgICBtb3ZxICAgIE1NV09SRCBbd2soMSldLCBtbTIgICAgIDsgd2soMSk9KDQyIDQzIDUyIDUzKQogCi0JbW92cSAgICAgIG1tNCxtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQotCXB1bnBja2x3ZCBtbTYsbW03CQk7IG1tNj0oMDAgMDEgMTAgMTEpCi0JcHVucGNraHdkIG1tNCxtbTcJCTsgbW00PSgyMCAyMSAzMCAzMSkKLQltb3ZxICAgICAgbW0yLG1tMQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCi0JcHVucGNrbHdkIG1tMSxtbTMJCTsgbW0xPSg0MCA0MSA1MCA1MSkKLQlwdW5wY2tod2QgbW0yLG1tMwkJOyBtbTI9KDYwIDYxIDcwIDcxKQorICAgICAgICBtb3ZxICAgICAgbW00LG1tNiAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgICAgICBwdW5wY2tsd2QgbW02LG1tNyAgICAgICAgICAgICAgIDsgbW02PSgwMCAwMSAxMCAxMSkKKyAgICAgICAgcHVucGNraHdkIG1tNCxtbTcgICAgICAgICAgICAgICA7IG1tND0oMjAgMjEgMzAgMzEpCisgICAgICAgIG1vdnEgICAgICBtbTIsbW0xICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgICAgIHB1bnBja2x3ZCBtbTEsbW0zICAgICAgICAgICAgICAgOyBtbTE9KDQwIDQxIDUwIDUxKQorICAgICAgICBwdW5wY2tod2QgbW0yLG1tMyAgICAgICAgICAgICAgIDsgbW0yPSg2MCA2MSA3MCA3MSkKIAotCW1vdnEgICAgICBtbTcsbW02CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKLQlwdW5wY2tsZHEgbW02LG1tMAkJOyBtbTY9KDAwIDAxIDAyIDAzKT1kYXRhMAotCXB1bnBja2hkcSBtbTcsbW0wCQk7IG1tNz0oMTAgMTEgMTIgMTMpPWRhdGExCi0JbW92cSAgICAgIG1tMyxtbTIJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQotCXB1bnBja2xkcSBtbTIsbW01CQk7IG1tMj0oNjAgNjEgNjIgNjMpPWRhdGE2Ci0JcHVucGNraGRxIG1tMyxtbTUJCTsgbW0zPSg3MCA3MSA3MiA3Myk9ZGF0YTcKKyAgICAgICAgbW92cSAgICAgIG1tNyxtbTYgICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICAgICAgcHVucGNrbGRxIG1tNixtbTAgICAgICAgICAgICAgICA7IG1tNj0oMDAgMDEgMDIgMDMpPWRhdGEwCisgICAgICAgIHB1bnBja2hkcSBtbTcsbW0wICAgICAgICAgICAgICAgOyBtbTc9KDEwIDExIDEyIDEzKT1kYXRhMQorICAgICAgICBtb3ZxICAgICAgbW0zLG1tMiAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgICAgICBwdW5wY2tsZHEgbW0yLG1tNSAgICAgICAgICAgICAgIDsgbW0yPSg2MCA2MSA2MiA2Myk9ZGF0YTYKKyAgICAgICAgcHVucGNraGRxIG1tMyxtbTUgICAgICAgICAgICAgICA7IG1tMz0oNzAgNzEgNzIgNzMpPWRhdGE3CiAKLQltb3ZxCW1tMCxtbTcKLQltb3ZxCW1tNSxtbTYKLQlwc3VidwltbTcsbW0yCQkJOyBtbTc9ZGF0YTEtZGF0YTY9dG1wNgotCXBzdWJ3CW1tNixtbTMJCQk7IG1tNj1kYXRhMC1kYXRhNz10bXA3Ci0JcGFkZHcJbW0wLG1tMgkJCTsgbW0wPWRhdGExK2RhdGE2PXRtcDEKLQlwYWRkdwltbTUsbW0zCQkJOyBtbTU9ZGF0YTArZGF0YTc9dG1wMAorICAgICAgICBtb3ZxICAgIG1tMCxtbTcKKyAgICAgICAgbW92cSAgICBtbTUsbW02CisgICAgICAgIHBzdWJ3ICAgbW03LG1tMiAgICAgICAgICAgICAgICAgOyBtbTc9ZGF0YTEtZGF0YTY9dG1wNgorICAgICAgICBwc3VidyAgIG1tNixtbTMgICAgICAgICAgICAgICAgIDsgbW02PWRhdGEwLWRhdGE3PXRtcDcKKyAgICAgICAgcGFkZHcgICBtbTAsbW0yICAgICAgICAgICAgICAgICA7IG1tMD1kYXRhMStkYXRhNj10bXAxCisgICAgICAgIHBhZGR3ICAgbW01LG1tMyAgICAgICAgICAgICAgICAgOyBtbTU9ZGF0YTArZGF0YTc9dG1wMAogCi0JbW92cQltbTIsIE1NV09SRCBbd2soMCldCTsgbW0yPSgyMiAyMyAzMiAzMykKLQltb3ZxCW1tMywgTU1XT1JEIFt3aygxKV0JOyBtbTM9KDQyIDQzIDUyIDUzKQotCW1vdnEJTU1XT1JEIFt3aygwKV0sIG1tNwk7IHdrKDApPXRtcDYKLQltb3ZxCU1NV09SRCBbd2soMSldLCBtbTYJOyB3aygxKT10bXA3CisgICAgICAgIG1vdnEgICAgbW0yLCBNTVdPUkQgW3drKDApXSAgICAgOyBtbTI9KDIyIDIzIDMyIDMzKQorICAgICAgICBtb3ZxICAgIG1tMywgTU1XT1JEIFt3aygxKV0gICAgIDsgbW0zPSg0MiA0MyA1MiA1MykKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW3drKDApXSwgbW03ICAgICA7IHdrKDApPXRtcDYKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW3drKDEpXSwgbW02ICAgICA7IHdrKDEpPXRtcDcKIAotCW1vdnEgICAgICBtbTcsbW00CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKLQlwdW5wY2tsZHEgbW00LG1tMgkJOyBtbTQ9KDIwIDIxIDIyIDIzKT1kYXRhMgotCXB1bnBja2hkcSBtbTcsbW0yCQk7IG1tNz0oMzAgMzEgMzIgMzMpPWRhdGEzCi0JbW92cSAgICAgIG1tNixtbTEJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQotCXB1bnBja2xkcSBtbTEsbW0zCQk7IG1tMT0oNDAgNDEgNDIgNDMpPWRhdGE0Ci0JcHVucGNraGRxIG1tNixtbTMJCTsgbW02PSg1MCA1MSA1MiA1Myk9ZGF0YTUKKyAgICAgICAgbW92cSAgICAgIG1tNyxtbTQgICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICAgICAgcHVucGNrbGRxIG1tNCxtbTIgICAgICAgICAgICAgICA7IG1tND0oMjAgMjEgMjIgMjMpPWRhdGEyCisgICAgICAgIHB1bnBja2hkcSBtbTcsbW0yICAgICAgICAgICAgICAgOyBtbTc9KDMwIDMxIDMyIDMzKT1kYXRhMworICAgICAgICBtb3ZxICAgICAgbW02LG1tMSAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgICAgICBwdW5wY2tsZHEgbW0xLG1tMyAgICAgICAgICAgICAgIDsgbW0xPSg0MCA0MSA0MiA0Myk9ZGF0YTQKKyAgICAgICAgcHVucGNraGRxIG1tNixtbTMgICAgICAgICAgICAgICA7IG1tNj0oNTAgNTEgNTIgNTMpPWRhdGE1CiAKLQltb3ZxCW1tMixtbTcKLQltb3ZxCW1tMyxtbTQKLQlwYWRkdwltbTcsbW0xCQkJOyBtbTc9ZGF0YTMrZGF0YTQ9dG1wMwotCXBhZGR3CW1tNCxtbTYJCQk7IG1tND1kYXRhMitkYXRhNT10bXAyCi0JcHN1YncJbW0yLG1tMQkJCTsgbW0yPWRhdGEzLWRhdGE0PXRtcDQKLQlwc3VidwltbTMsbW02CQkJOyBtbTM9ZGF0YTItZGF0YTU9dG1wNQorICAgICAgICBtb3ZxICAgIG1tMixtbTcKKyAgICAgICAgbW92cSAgICBtbTMsbW00CisgICAgICAgIHBhZGR3ICAgbW03LG1tMSAgICAgICAgICAgICAgICAgOyBtbTc9ZGF0YTMrZGF0YTQ9dG1wMworICAgICAgICBwYWRkdyAgIG1tNCxtbTYgICAgICAgICAgICAgICAgIDsgbW00PWRhdGEyK2RhdGE1PXRtcDIKKyAgICAgICAgcHN1YncgICBtbTIsbW0xICAgICAgICAgICAgICAgICA7IG1tMj1kYXRhMy1kYXRhND10bXA0CisgICAgICAgIHBzdWJ3ICAgbW0zLG1tNiAgICAgICAgICAgICAgICAgOyBtbTM9ZGF0YTItZGF0YTU9dG1wNQogCi0JOyAtLSBFdmVuIHBhcnQKKyAgICAgICAgOyAtLSBFdmVuIHBhcnQKIAotCW1vdnEJbW0xLG1tNQotCW1vdnEJbW02LG1tMAotCXBhZGR3CW1tNSxtbTcJCQk7IG1tNT10bXAxMAotCXBhZGR3CW1tMCxtbTQJCQk7IG1tMD10bXAxMQotCXBzdWJ3CW1tMSxtbTcJCQk7IG1tMT10bXAxMwotCXBzdWJ3CW1tNixtbTQJCQk7IG1tNj10bXAxMgorICAgICAgICBtb3ZxICAgIG1tMSxtbTUKKyAgICAgICAgbW92cSAgICBtbTYsbW0wCisgICAgICAgIHBhZGR3ICAgbW01LG1tNyAgICAgICAgICAgICAgICAgOyBtbTU9dG1wMTAKKyAgICAgICAgcGFkZHcgICBtbTAsbW00ICAgICAgICAgICAgICAgICA7IG1tMD10bXAxMQorICAgICAgICBwc3VidyAgIG1tMSxtbTcgICAgICAgICAgICAgICAgIDsgbW0xPXRtcDEzCisgICAgICAgIHBzdWJ3ICAgbW02LG1tNCAgICAgICAgICAgICAgICAgOyBtbTY9dG1wMTIKIAotCW1vdnEJbW03LG1tNQotCXBhZGR3CW1tNSxtbTAJCQk7IG1tNT10bXAxMCt0bXAxMQotCXBzdWJ3CW1tNyxtbTAJCQk7IG1tNz10bXAxMC10bXAxMQorICAgICAgICBtb3ZxICAgIG1tNyxtbTUKKyAgICAgICAgcGFkZHcgICBtbTUsbW0wICAgICAgICAgICAgICAgICA7IG1tNT10bXAxMCt0bXAxMQorICAgICAgICBwc3VidyAgIG1tNyxtbTAgICAgICAgICAgICAgICAgIDsgbW03PXRtcDEwLXRtcDExCiAKLQlwYWRkdwltbTUsW0dPVE9GRihlYngsUFdfREVTQ0FMRV9QMlgpXQotCXBhZGR3CW1tNyxbR09UT0ZGKGVieCxQV19ERVNDQUxFX1AyWCldCi0JcHNyYXcJbW01LFBBU1MxX0JJVFMJCTsgbW01PWRhdGEwCi0JcHNyYXcJbW03LFBBU1MxX0JJVFMJCTsgbW03PWRhdGE0CisgICAgICAgIHBhZGR3ICAgbW01LFtHT1RPRkYoZWJ4LFBXX0RFU0NBTEVfUDJYKV0KKyAgICAgICAgcGFkZHcgICBtbTcsW0dPVE9GRihlYngsUFdfREVTQ0FMRV9QMlgpXQorICAgICAgICBwc3JhdyAgIG1tNSxQQVNTMV9CSVRTICAgICAgICAgIDsgbW01PWRhdGEwCisgICAgICAgIHBzcmF3ICAgbW03LFBBU1MxX0JJVFMgICAgICAgICAgOyBtbTc9ZGF0YTQKIAotCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW01Ci0JbW92cQlNTVdPUkQgW01NQkxPQ0soNCwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCBtbTcKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCBtbTUKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soNCwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCBtbTcKIAotCTsgKE9yaWdpbmFsKQotCTsgejEgPSAodG1wMTIgKyB0bXAxMykgKiAwLjU0MTE5NjEwMDsKLQk7IGRhdGEyID0gejEgKyB0bXAxMyAqIDAuNzY1MzY2ODY1OwotCTsgZGF0YTYgPSB6MSArIHRtcDEyICogLTEuODQ3NzU5MDY1OwotCTsKLQk7IChUaGlzIGltcGxlbWVudGF0aW9uKQotCTsgZGF0YTIgPSB0bXAxMyAqICgwLjU0MTE5NjEwMCArIDAuNzY1MzY2ODY1KSArIHRtcDEyICogMC41NDExOTYxMDA7Ci0JOyBkYXRhNiA9IHRtcDEzICogMC41NDExOTYxMDAgKyB0bXAxMiAqICgwLjU0MTE5NjEwMCAtIDEuODQ3NzU5MDY1KTsKKyAgICAgICAgOyAoT3JpZ2luYWwpCisgICAgICAgIDsgejEgPSAodG1wMTIgKyB0bXAxMykgKiAwLjU0MTE5NjEwMDsKKyAgICAgICAgOyBkYXRhMiA9IHoxICsgdG1wMTMgKiAwLjc2NTM2Njg2NTsKKyAgICAgICAgOyBkYXRhNiA9IHoxICsgdG1wMTIgKiAtMS44NDc3NTkwNjU7CisgICAgICAgIDsKKyAgICAgICAgOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKyAgICAgICAgOyBkYXRhMiA9IHRtcDEzICogKDAuNTQxMTk2MTAwICsgMC43NjUzNjY4NjUpICsgdG1wMTIgKiAwLjU0MTE5NjEwMDsKKyAgICAgICAgOyBkYXRhNiA9IHRtcDEzICogMC41NDExOTYxMDAgKyB0bXAxMiAqICgwLjU0MTE5NjEwMCAtIDEuODQ3NzU5MDY1KTsKIAotCW1vdnEgICAgICBtbTQsbW0xCQk7IG1tMT10bXAxMwotCW1vdnEgICAgICBtbTAsbW0xCi0JcHVucGNrbHdkIG1tNCxtbTYJCTsgbW02PXRtcDEyCi0JcHVucGNraHdkIG1tMCxtbTYKLQltb3ZxICAgICAgbW0xLG1tNAotCW1vdnEgICAgICBtbTYsbW0wCi0JcG1hZGR3ZCAgIG1tNCxbR09UT0ZGKGVieCxQV19GMTMwX0YwNTQpXQk7IG1tND1kYXRhMkwKLQlwbWFkZHdkICAgbW0wLFtHT1RPRkYoZWJ4LFBXX0YxMzBfRjA1NCldCTsgbW0wPWRhdGEySAotCXBtYWRkd2QgICBtbTEsW0dPVE9GRihlYngsUFdfRjA1NF9NRjEzMCldCTsgbW0xPWRhdGE2TAotCXBtYWRkd2QgICBtbTYsW0dPVE9GRihlYngsUFdfRjA1NF9NRjEzMCldCTsgbW02PWRhdGE2SAorICAgICAgICBtb3ZxICAgICAgbW00LG1tMSAgICAgICAgICAgICAgIDsgbW0xPXRtcDEzCisgICAgICAgIG1vdnEgICAgICBtbTAsbW0xCisgICAgICAgIHB1bnBja2x3ZCBtbTQsbW02ICAgICAgICAgICAgICAgOyBtbTY9dG1wMTIKKyAgICAgICAgcHVucGNraHdkIG1tMCxtbTYKKyAgICAgICAgbW92cSAgICAgIG1tMSxtbTQKKyAgICAgICAgbW92cSAgICAgIG1tNixtbTAKKyAgICAgICAgcG1hZGR3ZCAgIG1tNCxbR09UT0ZGKGVieCxQV19GMTMwX0YwNTQpXSAgICAgICAgOyBtbTQ9ZGF0YTJMCisgICAgICAgIHBtYWRkd2QgICBtbTAsW0dPVE9GRihlYngsUFdfRjEzMF9GMDU0KV0gICAgICAgIDsgbW0wPWRhdGEySAorICAgICAgICBwbWFkZHdkICAgbW0xLFtHT1RPRkYoZWJ4LFBXX0YwNTRfTUYxMzApXSAgICAgICA7IG1tMT1kYXRhNkwKKyAgICAgICAgcG1hZGR3ZCAgIG1tNixbR09UT0ZGKGVieCxQV19GMDU0X01GMTMwKV0gICAgICAgOyBtbTY9ZGF0YTZICiAKLQlwYWRkZAltbTQsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildCi0JcGFkZGQJbW0wLFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQotCXBzcmFkCW1tNCxERVNDQUxFX1AyCi0JcHNyYWQJbW0wLERFU0NBTEVfUDIKLQlwYWRkZAltbTEsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildCi0JcGFkZGQJbW02LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQotCXBzcmFkCW1tMSxERVNDQUxFX1AyCi0JcHNyYWQJbW02LERFU0NBTEVfUDIKKyAgICAgICAgcGFkZGQgICBtbTQsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildCisgICAgICAgIHBhZGRkICAgbW0wLFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQorICAgICAgICBwc3JhZCAgIG1tNCxERVNDQUxFX1AyCisgICAgICAgIHBzcmFkICAgbW0wLERFU0NBTEVfUDIKKyAgICAgICAgcGFkZGQgICBtbTEsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildCisgICAgICAgIHBhZGRkICAgbW02LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQorICAgICAgICBwc3JhZCAgIG1tMSxERVNDQUxFX1AyCisgICAgICAgIHBzcmFkICAgbW02LERFU0NBTEVfUDIKIAotCXBhY2tzc2R3ICBtbTQsbW0wCQk7IG1tND1kYXRhMgotCXBhY2tzc2R3ICBtbTEsbW02CQk7IG1tMT1kYXRhNgorICAgICAgICBwYWNrc3NkdyAgbW00LG1tMCAgICAgICAgICAgICAgIDsgbW00PWRhdGEyCisgICAgICAgIHBhY2tzc2R3ICBtbTEsbW02ICAgICAgICAgICAgICAgOyBtbTE9ZGF0YTYKIAotCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW00Ci0JbW92cQlNTVdPUkQgW01NQkxPQ0soNiwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCBtbTEKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMiwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCBtbTQKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soNiwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCBtbTEKIAotCTsgLS0gT2RkIHBhcnQKKyAgICAgICAgOyAtLSBPZGQgcGFydAogCi0JbW92cQltbTUsIE1NV09SRCBbd2soMCldCTsgbW01PXRtcDYKLQltb3ZxCW1tNywgTU1XT1JEIFt3aygxKV0JOyBtbTc9dG1wNworICAgICAgICBtb3ZxICAgIG1tNSwgTU1XT1JEIFt3aygwKV0gICAgIDsgbW01PXRtcDYKKyAgICAgICAgbW92cSAgICBtbTcsIE1NV09SRCBbd2soMSldICAgICA7IG1tNz10bXA3CiAKLQltb3ZxCW1tMCxtbTIJCQk7IG1tMj10bXA0Ci0JbW92cQltbTYsbW0zCQkJOyBtbTM9dG1wNQotCXBhZGR3CW1tMCxtbTUJCQk7IG1tMD16MwotCXBhZGR3CW1tNixtbTcJCQk7IG1tNj16NAorICAgICAgICBtb3ZxICAgIG1tMCxtbTIgICAgICAgICAgICAgICAgIDsgbW0yPXRtcDQKKyAgICAgICAgbW92cSAgICBtbTYsbW0zICAgICAgICAgICAgICAgICA7IG1tMz10bXA1CisgICAgICAgIHBhZGR3ICAgbW0wLG1tNSAgICAgICAgICAgICAgICAgOyBtbTA9ejMKKyAgICAgICAgcGFkZHcgICBtbTYsbW03ICAgICAgICAgICAgICAgICA7IG1tNj16NAogCi0JOyAoT3JpZ2luYWwpCi0JOyB6NSA9ICh6MyArIHo0KSAqIDEuMTc1ODc1NjAyOwotCTsgejMgPSB6MyAqIC0xLjk2MTU3MDU2MDsgIHo0ID0gejQgKiAtMC4zOTAxODA2NDQ7Ci0JOyB6MyArPSB6NTsgIHo0ICs9IHo1OwotCTsKLQk7IChUaGlzIGltcGxlbWVudGF0aW9uKQotCTsgejMgPSB6MyAqICgxLjE3NTg3NTYwMiAtIDEuOTYxNTcwNTYwKSArIHo0ICogMS4xNzU4NzU2MDI7Ci0JOyB6NCA9IHozICogMS4xNzU4NzU2MDIgKyB6NCAqICgxLjE3NTg3NTYwMiAtIDAuMzkwMTgwNjQ0KTsKKyAgICAgICAgOyAoT3JpZ2luYWwpCisgICAgICAgIDsgejUgPSAoejMgKyB6NCkgKiAxLjE3NTg3NTYwMjsKKyAgICAgICAgOyB6MyA9IHozICogLTEuOTYxNTcwNTYwOyAgejQgPSB6NCAqIC0wLjM5MDE4MDY0NDsKKyAgICAgICAgOyB6MyArPSB6NTsgIHo0ICs9IHo1OworICAgICAgICA7CisgICAgICAgIDsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisgICAgICAgIDsgejMgPSB6MyAqICgxLjE3NTg3NTYwMiAtIDEuOTYxNTcwNTYwKSArIHo0ICogMS4xNzU4NzU2MDI7CisgICAgICAgIDsgejQgPSB6MyAqIDEuMTc1ODc1NjAyICsgejQgKiAoMS4xNzU4NzU2MDIgLSAwLjM5MDE4MDY0NCk7CiAKLQltb3ZxICAgICAgbW00LG1tMAotCW1vdnEgICAgICBtbTEsbW0wCi0JcHVucGNrbHdkIG1tNCxtbTYKLQlwdW5wY2tod2QgbW0xLG1tNgotCW1vdnEgICAgICBtbTAsbW00Ci0JbW92cSAgICAgIG1tNixtbTEKLQlwbWFkZHdkICAgbW00LFtHT1RPRkYoZWJ4LFBXX01GMDc4X0YxMTcpXQk7IG1tND16M0wKLQlwbWFkZHdkICAgbW0xLFtHT1RPRkYoZWJ4LFBXX01GMDc4X0YxMTcpXQk7IG1tMT16M0gKLQlwbWFkZHdkICAgbW0wLFtHT1RPRkYoZWJ4LFBXX0YxMTdfRjA3OCldCTsgbW0wPXo0TAotCXBtYWRkd2QgICBtbTYsW0dPVE9GRihlYngsUFdfRjExN19GMDc4KV0JOyBtbTY9ejRICisgICAgICAgIG1vdnEgICAgICBtbTQsbW0wCisgICAgICAgIG1vdnEgICAgICBtbTEsbW0wCisgICAgICAgIHB1bnBja2x3ZCBtbTQsbW02CisgICAgICAgIHB1bnBja2h3ZCBtbTEsbW02CisgICAgICAgIG1vdnEgICAgICBtbTAsbW00CisgICAgICAgIG1vdnEgICAgICBtbTYsbW0xCisgICAgICAgIHBtYWRkd2QgICBtbTQsW0dPVE9GRihlYngsUFdfTUYwNzhfRjExNyldICAgICAgIDsgbW00PXozTAorICAgICAgICBwbWFkZHdkICAgbW0xLFtHT1RPRkYoZWJ4LFBXX01GMDc4X0YxMTcpXSAgICAgICA7IG1tMT16M0gKKyAgICAgICAgcG1hZGR3ZCAgIG1tMCxbR09UT0ZGKGVieCxQV19GMTE3X0YwNzgpXSAgICAgICAgOyBtbTA9ejRMCisgICAgICAgIHBtYWRkd2QgICBtbTYsW0dPVE9GRihlYngsUFdfRjExN19GMDc4KV0gICAgICAgIDsgbW02PXo0SAogCi0JbW92cQlNTVdPUkQgW3drKDApXSwgbW00CTsgd2soMCk9ejNMCi0JbW92cQlNTVdPUkQgW3drKDEpXSwgbW0xCTsgd2soMSk9ejNICisgICAgICAgIG1vdnEgICAgTU1XT1JEIFt3aygwKV0sIG1tNCAgICAgOyB3aygwKT16M0wKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW3drKDEpXSwgbW0xICAgICA7IHdrKDEpPXozSAogCi0JOyAoT3JpZ2luYWwpCi0JOyB6MSA9IHRtcDQgKyB0bXA3OyAgejIgPSB0bXA1ICsgdG1wNjsKLQk7IHRtcDQgPSB0bXA0ICogMC4yOTg2MzEzMzY7ICB0bXA1ID0gdG1wNSAqIDIuMDUzMTE5ODY5OwotCTsgdG1wNiA9IHRtcDYgKiAzLjA3MjcxMTAyNjsgIHRtcDcgPSB0bXA3ICogMS41MDEzMjExMTA7Ci0JOyB6MSA9IHoxICogLTAuODk5OTc2MjIzOyAgejIgPSB6MiAqIC0yLjU2MjkxNTQ0NzsKLQk7IGRhdGE3ID0gdG1wNCArIHoxICsgejM7ICBkYXRhNSA9IHRtcDUgKyB6MiArIHo0OwotCTsgZGF0YTMgPSB0bXA2ICsgejIgKyB6MzsgIGRhdGExID0gdG1wNyArIHoxICsgejQ7Ci0JOwotCTsgKFRoaXMgaW1wbGVtZW50YXRpb24pCi0JOyB0bXA0ID0gdG1wNCAqICgwLjI5ODYzMTMzNiAtIDAuODk5OTc2MjIzKSArIHRtcDcgKiAtMC44OTk5NzYyMjM7Ci0JOyB0bXA1ID0gdG1wNSAqICgyLjA1MzExOTg2OSAtIDIuNTYyOTE1NDQ3KSArIHRtcDYgKiAtMi41NjI5MTU0NDc7Ci0JOyB0bXA2ID0gdG1wNSAqIC0yLjU2MjkxNTQ0NyArIHRtcDYgKiAoMy4wNzI3MTEwMjYgLSAyLjU2MjkxNTQ0Nyk7Ci0JOyB0bXA3ID0gdG1wNCAqIC0wLjg5OTk3NjIyMyArIHRtcDcgKiAoMS41MDEzMjExMTAgLSAwLjg5OTk3NjIyMyk7Ci0JOyBkYXRhNyA9IHRtcDQgKyB6MzsgIGRhdGE1ID0gdG1wNSArIHo0OwotCTsgZGF0YTMgPSB0bXA2ICsgejM7ICBkYXRhMSA9IHRtcDcgKyB6NDsKKyAgICAgICAgOyAoT3JpZ2luYWwpCisgICAgICAgIDsgejEgPSB0bXA0ICsgdG1wNzsgIHoyID0gdG1wNSArIHRtcDY7CisgICAgICAgIDsgdG1wNCA9IHRtcDQgKiAwLjI5ODYzMTMzNjsgIHRtcDUgPSB0bXA1ICogMi4wNTMxMTk4Njk7CisgICAgICAgIDsgdG1wNiA9IHRtcDYgKiAzLjA3MjcxMTAyNjsgIHRtcDcgPSB0bXA3ICogMS41MDEzMjExMTA7CisgICAgICAgIDsgejEgPSB6MSAqIC0wLjg5OTk3NjIyMzsgIHoyID0gejIgKiAtMi41NjI5MTU0NDc7CisgICAgICAgIDsgZGF0YTcgPSB0bXA0ICsgejEgKyB6MzsgIGRhdGE1ID0gdG1wNSArIHoyICsgejQ7CisgICAgICAgIDsgZGF0YTMgPSB0bXA2ICsgejIgKyB6MzsgIGRhdGExID0gdG1wNyArIHoxICsgejQ7CisgICAgICAgIDsKKyAgICAgICAgOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKyAgICAgICAgOyB0bXA0ID0gdG1wNCAqICgwLjI5ODYzMTMzNiAtIDAuODk5OTc2MjIzKSArIHRtcDcgKiAtMC44OTk5NzYyMjM7CisgICAgICAgIDsgdG1wNSA9IHRtcDUgKiAoMi4wNTMxMTk4NjkgLSAyLjU2MjkxNTQ0NykgKyB0bXA2ICogLTIuNTYyOTE1NDQ3OworICAgICAgICA7IHRtcDYgPSB0bXA1ICogLTIuNTYyOTE1NDQ3ICsgdG1wNiAqICgzLjA3MjcxMTAyNiAtIDIuNTYyOTE1NDQ3KTsKKyAgICAgICAgOyB0bXA3ID0gdG1wNCAqIC0wLjg5OTk3NjIyMyArIHRtcDcgKiAoMS41MDEzMjExMTAgLSAwLjg5OTk3NjIyMyk7CisgICAgICAgIDsgZGF0YTcgPSB0bXA0ICsgejM7ICBkYXRhNSA9IHRtcDUgKyB6NDsKKyAgICAgICAgOyBkYXRhMyA9IHRtcDYgKyB6MzsgIGRhdGExID0gdG1wNyArIHo0OwogCi0JbW92cSAgICAgIG1tNCxtbTIKLQltb3ZxICAgICAgbW0xLG1tMgotCXB1bnBja2x3ZCBtbTQsbW03Ci0JcHVucGNraHdkIG1tMSxtbTcKLQltb3ZxICAgICAgbW0yLG1tNAotCW1vdnEgICAgICBtbTcsbW0xCi0JcG1hZGR3ZCAgIG1tNCxbR09UT0ZGKGVieCxQV19NRjA2MF9NRjA4OSldCTsgbW00PXRtcDRMCi0JcG1hZGR3ZCAgIG1tMSxbR09UT0ZGKGVieCxQV19NRjA2MF9NRjA4OSldCTsgbW0xPXRtcDRICi0JcG1hZGR3ZCAgIG1tMixbR09UT0ZGKGVieCxQV19NRjA4OV9GMDYwKV0JOyBtbTI9dG1wN0wKLQlwbWFkZHdkICAgbW03LFtHT1RPRkYoZWJ4LFBXX01GMDg5X0YwNjApXQk7IG1tNz10bXA3SAorICAgICAgICBtb3ZxICAgICAgbW00LG1tMgorICAgICAgICBtb3ZxICAgICAgbW0xLG1tMgorICAgICAgICBwdW5wY2tsd2QgbW00LG1tNworICAgICAgICBwdW5wY2tod2QgbW0xLG1tNworICAgICAgICBtb3ZxICAgICAgbW0yLG1tNAorICAgICAgICBtb3ZxICAgICAgbW03LG1tMQorICAgICAgICBwbWFkZHdkICAgbW00LFtHT1RPRkYoZWJ4LFBXX01GMDYwX01GMDg5KV0gICAgICA7IG1tND10bXA0TAorICAgICAgICBwbWFkZHdkICAgbW0xLFtHT1RPRkYoZWJ4LFBXX01GMDYwX01GMDg5KV0gICAgICA7IG1tMT10bXA0SAorICAgICAgICBwbWFkZHdkICAgbW0yLFtHT1RPRkYoZWJ4LFBXX01GMDg5X0YwNjApXSAgICAgICA7IG1tMj10bXA3TAorICAgICAgICBwbWFkZHdkICAgbW03LFtHT1RPRkYoZWJ4LFBXX01GMDg5X0YwNjApXSAgICAgICA7IG1tNz10bXA3SAogCi0JcGFkZGQJbW00LCBNTVdPUkQgW3drKDApXQk7IG1tND1kYXRhN0wKLQlwYWRkZAltbTEsIE1NV09SRCBbd2soMSldCTsgbW0xPWRhdGE3SAotCXBhZGRkCW1tMixtbTAJCQk7IG1tMj1kYXRhMUwKLQlwYWRkZAltbTcsbW02CQkJOyBtbTc9ZGF0YTFICisgICAgICAgIHBhZGRkICAgbW00LCBNTVdPUkQgW3drKDApXSAgICAgOyBtbTQ9ZGF0YTdMCisgICAgICAgIHBhZGRkICAgbW0xLCBNTVdPUkQgW3drKDEpXSAgICAgOyBtbTE9ZGF0YTdICisgICAgICAgIHBhZGRkICAgbW0yLG1tMCAgICAgICAgICAgICAgICAgOyBtbTI9ZGF0YTFMCisgICAgICAgIHBhZGRkICAgbW03LG1tNiAgICAgICAgICAgICAgICAgOyBtbTc9ZGF0YTFICiAKLQlwYWRkZAltbTQsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildCi0JcGFkZGQJbW0xLFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQotCXBzcmFkCW1tNCxERVNDQUxFX1AyCi0JcHNyYWQJbW0xLERFU0NBTEVfUDIKLQlwYWRkZAltbTIsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildCi0JcGFkZGQJbW03LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQotCXBzcmFkCW1tMixERVNDQUxFX1AyCi0JcHNyYWQJbW03LERFU0NBTEVfUDIKKyAgICAgICAgcGFkZGQgICBtbTQsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildCisgICAgICAgIHBhZGRkICAgbW0xLFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQorICAgICAgICBwc3JhZCAgIG1tNCxERVNDQUxFX1AyCisgICAgICAgIHBzcmFkICAgbW0xLERFU0NBTEVfUDIKKyAgICAgICAgcGFkZGQgICBtbTIsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildCisgICAgICAgIHBhZGRkICAgbW03LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQorICAgICAgICBwc3JhZCAgIG1tMixERVNDQUxFX1AyCisgICAgICAgIHBzcmFkICAgbW03LERFU0NBTEVfUDIKIAotCXBhY2tzc2R3ICBtbTQsbW0xCQk7IG1tND1kYXRhNwotCXBhY2tzc2R3ICBtbTIsbW03CQk7IG1tMj1kYXRhMQorICAgICAgICBwYWNrc3NkdyAgbW00LG1tMSAgICAgICAgICAgICAgIDsgbW00PWRhdGE3CisgICAgICAgIHBhY2tzc2R3ICBtbTIsbW03ICAgICAgICAgICAgICAgOyBtbTI9ZGF0YTEKIAotCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDcsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW00Ci0JbW92cQlNTVdPUkQgW01NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCBtbTIKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soNywwLGVkeCxTSVpFT0ZfRENURUxFTSldLCBtbTQKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCBtbTIKIAotCW1vdnEgICAgICBtbTEsbW0zCi0JbW92cSAgICAgIG1tNyxtbTMKLQlwdW5wY2tsd2QgbW0xLG1tNQotCXB1bnBja2h3ZCBtbTcsbW01Ci0JbW92cSAgICAgIG1tMyxtbTEKLQltb3ZxICAgICAgbW01LG1tNwotCXBtYWRkd2QgICBtbTEsW0dPVE9GRihlYngsUFdfTUYwNTBfTUYyNTYpXQk7IG1tMT10bXA1TAotCXBtYWRkd2QgICBtbTcsW0dPVE9GRihlYngsUFdfTUYwNTBfTUYyNTYpXQk7IG1tNz10bXA1SAotCXBtYWRkd2QgICBtbTMsW0dPVE9GRihlYngsUFdfTUYyNTZfRjA1MCldCTsgbW0zPXRtcDZMCi0JcG1hZGR3ZCAgIG1tNSxbR09UT0ZGKGVieCxQV19NRjI1Nl9GMDUwKV0JOyBtbTU9dG1wNkgKKyAgICAgICAgbW92cSAgICAgIG1tMSxtbTMKKyAgICAgICAgbW92cSAgICAgIG1tNyxtbTMKKyAgICAgICAgcHVucGNrbHdkIG1tMSxtbTUKKyAgICAgICAgcHVucGNraHdkIG1tNyxtbTUKKyAgICAgICAgbW92cSAgICAgIG1tMyxtbTEKKyAgICAgICAgbW92cSAgICAgIG1tNSxtbTcKKyAgICAgICAgcG1hZGR3ZCAgIG1tMSxbR09UT0ZGKGVieCxQV19NRjA1MF9NRjI1NildICAgICAgOyBtbTE9dG1wNUwKKyAgICAgICAgcG1hZGR3ZCAgIG1tNyxbR09UT0ZGKGVieCxQV19NRjA1MF9NRjI1NildICAgICAgOyBtbTc9dG1wNUgKKyAgICAgICAgcG1hZGR3ZCAgIG1tMyxbR09UT0ZGKGVieCxQV19NRjI1Nl9GMDUwKV0gICAgICAgOyBtbTM9dG1wNkwKKyAgICAgICAgcG1hZGR3ZCAgIG1tNSxbR09UT0ZGKGVieCxQV19NRjI1Nl9GMDUwKV0gICAgICAgOyBtbTU9dG1wNkgKIAotCXBhZGRkCW1tMSxtbTAJCQk7IG1tMT1kYXRhNUwKLQlwYWRkZAltbTcsbW02CQkJOyBtbTc9ZGF0YTVICi0JcGFkZGQJbW0zLCBNTVdPUkQgW3drKDApXQk7IG1tMz1kYXRhM0wKLQlwYWRkZAltbTUsIE1NV09SRCBbd2soMSldCTsgbW01PWRhdGEzSAorICAgICAgICBwYWRkZCAgIG1tMSxtbTAgICAgICAgICAgICAgICAgIDsgbW0xPWRhdGE1TAorICAgICAgICBwYWRkZCAgIG1tNyxtbTYgICAgICAgICAgICAgICAgIDsgbW03PWRhdGE1SAorICAgICAgICBwYWRkZCAgIG1tMywgTU1XT1JEIFt3aygwKV0gICAgIDsgbW0zPWRhdGEzTAorICAgICAgICBwYWRkZCAgIG1tNSwgTU1XT1JEIFt3aygxKV0gICAgIDsgbW01PWRhdGEzSAogCi0JcGFkZGQJbW0xLFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQotCXBhZGRkCW1tNyxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyKV0KLQlwc3JhZAltbTEsREVTQ0FMRV9QMgotCXBzcmFkCW1tNyxERVNDQUxFX1AyCi0JcGFkZGQJbW0zLFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQotCXBhZGRkCW1tNSxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyKV0KLQlwc3JhZAltbTMsREVTQ0FMRV9QMgotCXBzcmFkCW1tNSxERVNDQUxFX1AyCisgICAgICAgIHBhZGRkICAgbW0xLFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQorICAgICAgICBwYWRkZCAgIG1tNyxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyKV0KKyAgICAgICAgcHNyYWQgICBtbTEsREVTQ0FMRV9QMgorICAgICAgICBwc3JhZCAgIG1tNyxERVNDQUxFX1AyCisgICAgICAgIHBhZGRkICAgbW0zLFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQorICAgICAgICBwYWRkZCAgIG1tNSxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyKV0KKyAgICAgICAgcHNyYWQgICBtbTMsREVTQ0FMRV9QMgorICAgICAgICBwc3JhZCAgIG1tNSxERVNDQUxFX1AyCiAKLQlwYWNrc3NkdyAgbW0xLG1tNwkJOyBtbTE9ZGF0YTUKLQlwYWNrc3NkdyAgbW0zLG1tNQkJOyBtbTM9ZGF0YTMKKyAgICAgICAgcGFja3NzZHcgIG1tMSxtbTcgICAgICAgICAgICAgICA7IG1tMT1kYXRhNQorICAgICAgICBwYWNrc3NkdyAgbW0zLG1tNSAgICAgICAgICAgICAgIDsgbW0zPWRhdGEzCiAKLQltb3ZxCU1NV09SRCBbTU1CTE9DSyg1LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIG1tMQotCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW0zCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtNTUJMT0NLKDUsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW0xCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW0zCiAKLQlhZGQJZWR4LCBieXRlIDQqU0laRU9GX0RDVEVMRU0KLQlkZWMJZWN4Ci0Jam56CW5lYXIgLmNvbHVtbmxvb3AKKyAgICAgICAgYWRkICAgICBlZHgsIGJ5dGUgNCpTSVpFT0ZfRENURUxFTQorICAgICAgICBkZWMgICAgIGVjeAorICAgICAgICBqbnogICAgIG5lYXIgLmNvbHVtbmxvb3AKIAotCWVtbXMJCTsgZW1wdHkgTU1YIHN0YXRlCisgICAgICAgIGVtbXMgICAgICAgICAgICA7IGVtcHR5IE1NWCBzdGF0ZQogCi07CXBvcAllZGkJCTsgdW51c2VkCi07CXBvcAllc2kJCTsgdW51c2VkCi07CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi07CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi0JcG9wcGljCWVieAotCW1vdgllc3AsZWJwCQk7IGVzcCA8LSBhbGlnbmVkIGVicAotCXBvcAllc3AJCTsgZXNwIDwtIG9yaWdpbmFsIGVicAotCXBvcAllYnAKLQlyZXQKKzsgICAgICAgcG9wICAgICBlZGkgICAgICAgICAgICAgOyB1bnVzZWQKKzsgICAgICAgcG9wICAgICBlc2kgICAgICAgICAgICAgOyB1bnVzZWQKKzsgICAgICAgcG9wICAgICBlZHggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICAgICAgcG9wICAgICBlY3ggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICAgICAgcG9wcGljICBlYngKKyAgICAgICAgbW92ICAgICBlc3AsZWJwICAgICAgICAgOyBlc3AgPC0gYWxpZ25lZCBlYnAKKyAgICAgICAgcG9wICAgICBlc3AgICAgICAgICAgICAgOyBlc3AgPC0gb3JpZ2luYWwgZWJwCisgICAgICAgIHBvcCAgICAgZWJwCisgICAgICAgIHJldAogCiA7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQogOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgotCWFsaWduCTE2CisgICAgICAgIGFsaWduICAgMTYKZGlmZiAtLWdpdCBhL3NpbWQvamZzczJmc3QtNjQuYXNtIGIvc2ltZC9qZnNzMmZzdC02NC5hc20KaW5kZXggNjk1M2NhZi4uNDE0ODNiZiAxMDA2NDQKLS0tIGEvc2ltZC9qZnNzMmZzdC02NC5hc20KKysrIGIvc2ltZC9qZnNzMmZzdC02NC5hc20KQEAgLTI3LDI0ICsyNywyNCBAQAogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSVkZWZpbmUgQ09OU1RfQklUUwk4CTsgMTQgaXMgYWxzbyBPSy4KKyVkZWZpbmUgQ09OU1RfQklUUyAgICAgIDggICAgICAgOyAxNCBpcyBhbHNvIE9LLgogCiAlaWYgQ09OU1RfQklUUyA9PSA4Ci1GXzBfMzgyCWVxdQkgOTgJCTsgRklYKDAuMzgyNjgzNDMzKQotRl8wXzU0MQllcXUJMTM5CQk7IEZJWCgwLjU0MTE5NjEwMCkKLUZfMF83MDcJZXF1CTE4MQkJOyBGSVgoMC43MDcxMDY3ODEpCi1GXzFfMzA2CWVxdQkzMzQJCTsgRklYKDEuMzA2NTYyOTY1KQorRl8wXzM4MiBlcXUgICAgICA5OCAgICAgICAgICAgICA7IEZJWCgwLjM4MjY4MzQzMykKK0ZfMF81NDEgZXF1ICAgICAxMzkgICAgICAgICAgICAgOyBGSVgoMC41NDExOTYxMDApCitGXzBfNzA3IGVxdSAgICAgMTgxICAgICAgICAgICAgIDsgRklYKDAuNzA3MTA2NzgxKQorRl8xXzMwNiBlcXUgICAgIDMzNCAgICAgICAgICAgICA7IEZJWCgxLjMwNjU2Mjk2NSkKICVlbHNlCiA7IE5BU00gY2Fubm90IGRvIGNvbXBpbGUtdGltZSBhcml0aG1ldGljIG9uIGZsb2F0aW5nLXBvaW50IGNvbnN0YW50cy4KICVkZWZpbmUgREVTQ0FMRSh4LG4pICAoKCh4KSsoMTw8KChuKS0xKSkpPj4obikpCi1GXzBfMzgyCWVxdQlERVNDQUxFKCA0MTA5MDMyMDcsMzAtQ09OU1RfQklUUykJOyBGSVgoMC4zODI2ODM0MzMpCi1GXzBfNTQxCWVxdQlERVNDQUxFKCA1ODExMDQ4ODcsMzAtQ09OU1RfQklUUykJOyBGSVgoMC41NDExOTYxMDApCi1GXzBfNzA3CWVxdQlERVNDQUxFKCA3NTkyNTAxMjQsMzAtQ09OU1RfQklUUykJOyBGSVgoMC43MDcxMDY3ODEpCi1GXzFfMzA2CWVxdQlERVNDQUxFKDE0MDI5MTEzMDEsMzAtQ09OU1RfQklUUykJOyBGSVgoMS4zMDY1NjI5NjUpCitGXzBfMzgyIGVxdSAgICAgREVTQ0FMRSggNDEwOTAzMjA3LDMwLUNPTlNUX0JJVFMpICAgICAgIDsgRklYKDAuMzgyNjgzNDMzKQorRl8wXzU0MSBlcXUgICAgIERFU0NBTEUoIDU4MTEwNDg4NywzMC1DT05TVF9CSVRTKSAgICAgICA7IEZJWCgwLjU0MTE5NjEwMCkKK0ZfMF83MDcgZXF1ICAgICBERVNDQUxFKCA3NTkyNTAxMjQsMzAtQ09OU1RfQklUUykgICAgICAgOyBGSVgoMC43MDcxMDY3ODEpCitGXzFfMzA2IGVxdSAgICAgREVTQ0FMRSgxNDAyOTExMzAxLDMwLUNPTlNUX0JJVFMpICAgICAgIDsgRklYKDEuMzA2NTYyOTY1KQogJWVuZGlmCiAKIDsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlTRUNUSU9OCVNFR19DT05TVAorICAgICAgICBTRUNUSU9OIFNFR19DT05TVAogCiA7IFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTIDw9IDIgKHRvIGF2b2lkIG92ZXJmbG93KQogOyBDT05TVF9CSVRTICsgQ09OU1RfU0hJRlQgKyBQUkVfTVVMVElQTFlfU0NBTEVfQklUUyA9PSAxNiAoZm9yIHBtdWxodykKQEAgLTUyLDIxICs1MiwyMSBAQAogJWRlZmluZSBQUkVfTVVMVElQTFlfU0NBTEVfQklUUyAgIDIKICVkZWZpbmUgQ09OU1RfU0hJRlQgICAgICgxNiAtIFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTIC0gQ09OU1RfQklUUykKIAotCWFsaWduegkxNgotCWdsb2JhbAlFWFROKGpjb25zdF9mZGN0X2lmYXN0X3NzZTIpCisgICAgICAgIGFsaWdueiAgMTYKKyAgICAgICAgZ2xvYmFsICBFWFROKGpjb25zdF9mZGN0X2lmYXN0X3NzZTIpCiAKIEVYVE4oamNvbnN0X2ZkY3RfaWZhc3Rfc3NlMik6CiAKLVBXX0YwNzA3CXRpbWVzIDggZHcgIEZfMF83MDcgPDwgQ09OU1RfU0hJRlQKLVBXX0YwMzgyCXRpbWVzIDggZHcgIEZfMF8zODIgPDwgQ09OU1RfU0hJRlQKLVBXX0YwNTQxCXRpbWVzIDggZHcgIEZfMF81NDEgPDwgQ09OU1RfU0hJRlQKLVBXX0YxMzA2CXRpbWVzIDggZHcgIEZfMV8zMDYgPDwgQ09OU1RfU0hJRlQKK1BXX0YwNzA3ICAgICAgICB0aW1lcyA4IGR3ICBGXzBfNzA3IDw8IENPTlNUX1NISUZUCitQV19GMDM4MiAgICAgICAgdGltZXMgOCBkdyAgRl8wXzM4MiA8PCBDT05TVF9TSElGVAorUFdfRjA1NDEgICAgICAgIHRpbWVzIDggZHcgIEZfMF81NDEgPDwgQ09OU1RfU0hJRlQKK1BXX0YxMzA2ICAgICAgICB0aW1lcyA4IGR3ICBGXzFfMzA2IDw8IENPTlNUX1NISUZUCiAKLQlhbGlnbnoJMTYKKyAgICAgICAgYWxpZ256ICAxNgogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JU0VDVElPTglTRUdfVEVYVAotCUJJVFMJNjQKKyAgICAgICAgU0VDVElPTiBTRUdfVEVYVAorICAgICAgICBCSVRTICAgIDY0CiA7CiA7IFBlcmZvcm0gdGhlIGZvcndhcmQgRENUIG9uIG9uZSBibG9jayBvZiBzYW1wbGVzLgogOwpAQCAtNzYsMzE3ICs3NiwzMTcgQEAKIAogOyByMTAgPSBEQ1RFTEVNICogZGF0YQogCi0lZGVmaW5lIHdrKGkpCQlyYnAtKFdLX05VTS0oaSkpKlNJWkVPRl9YTU1XT1JECTsgeG1td29yZCB3a1tXS19OVU1dCi0lZGVmaW5lIFdLX05VTQkJMgorJWRlZmluZSB3ayhpKSAgICAgICAgICAgcmJwLShXS19OVU0tKGkpKSpTSVpFT0ZfWE1NV09SRCA7IHhtbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0gICAgICAgICAgMgogCi0JYWxpZ24JMTYKLQlnbG9iYWwJRVhUTihqc2ltZF9mZGN0X2lmYXN0X3NzZTIpCisgICAgICAgIGFsaWduICAgMTYKKyAgICAgICAgZ2xvYmFsICBFWFROKGpzaW1kX2ZkY3RfaWZhc3Rfc3NlMikKIAogRVhUTihqc2ltZF9mZGN0X2lmYXN0X3NzZTIpOgotCXB1c2gJcmJwCi0JbW92CXJheCxyc3AJCQkJOyByYXggPSBvcmlnaW5hbCByYnAKLQlzdWIJcnNwLCBieXRlIDQKLQlhbmQJcnNwLCBieXRlICgtU0laRU9GX1hNTVdPUkQpCTsgYWxpZ24gdG8gMTI4IGJpdHMKLQltb3YJW3JzcF0scmF4Ci0JbW92CXJicCxyc3AJCQkJOyByYnAgPSBhbGlnbmVkIHJicAotCWxlYQlyc3AsIFt3aygwKV0KLQljb2xsZWN0X2FyZ3MKKyAgICAgICAgcHVzaCAgICByYnAKKyAgICAgICAgbW92ICAgICByYXgscnNwICAgICAgICAgICAgICAgICAgICAgICAgIDsgcmF4ID0gb3JpZ2luYWwgcmJwCisgICAgICAgIHN1YiAgICAgcnNwLCBieXRlIDQKKyAgICAgICAgYW5kICAgICByc3AsIGJ5dGUgKC1TSVpFT0ZfWE1NV09SRCkgICAgIDsgYWxpZ24gdG8gMTI4IGJpdHMKKyAgICAgICAgbW92ICAgICBbcnNwXSxyYXgKKyAgICAgICAgbW92ICAgICByYnAscnNwICAgICAgICAgICAgICAgICAgICAgICAgIDsgcmJwID0gYWxpZ25lZCByYnAKKyAgICAgICAgbGVhICAgICByc3AsIFt3aygwKV0KKyAgICAgICAgY29sbGVjdF9hcmdzCiAKLQk7IC0tLS0gUGFzcyAxOiBwcm9jZXNzIHJvd3MuCisgICAgICAgIDsgLS0tLSBQYXNzIDE6IHByb2Nlc3Mgcm93cy4KIAotCW1vdglyZHgsIHIxMAk7IChEQ1RFTEVNICopCisgICAgICAgIG1vdiAgICAgcmR4LCByMTAgICAgICAgIDsgKERDVEVMRU0gKikKIAotCW1vdmRxYQl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAscmR4LFNJWkVPRl9EQ1RFTEVNKV0KLQltb3ZkcWEJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLHJkeCxTSVpFT0ZfRENURUxFTSldCi0JbW92ZHFhCXhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxyZHgsU0laRU9GX0RDVEVMRU0pXQotCW1vdmRxYQl4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAscmR4LFNJWkVPRl9EQ1RFTEVNKV0KKyAgICAgICAgbW92ZHFhICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAscmR4LFNJWkVPRl9EQ1RFTEVNKV0KKyAgICAgICAgbW92ZHFhICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAscmR4LFNJWkVPRl9EQ1RFTEVNKV0KKyAgICAgICAgbW92ZHFhICB4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSygyLDAscmR4LFNJWkVPRl9EQ1RFTEVNKV0KKyAgICAgICAgbW92ZHFhICB4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAscmR4LFNJWkVPRl9EQ1RFTEVNKV0KIAotCTsgeG1tMD0oMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcpLCB4bW0yPSgyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNykKLQk7IHhtbTE9KDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3KSwgeG1tMz0oMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcpCisgICAgICAgIDsgeG1tMD0oMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcpLCB4bW0yPSgyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNykKKyAgICAgICAgOyB4bW0xPSgxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNyksIHhtbTM9KDMwIDMxIDMyIDMzIDM0IDM1IDM2IDM3KQogCi0JbW92ZHFhICAgIHhtbTQseG1tMAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCi0JcHVucGNrbHdkIHhtbTAseG1tMQkJOyB4bW0wPSgwMCAxMCAwMSAxMSAwMiAxMiAwMyAxMykKLQlwdW5wY2tod2QgeG1tNCx4bW0xCQk7IHhtbTQ9KDA0IDE0IDA1IDE1IDA2IDE2IDA3IDE3KQotCW1vdmRxYSAgICB4bW01LHhtbTIJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQotCXB1bnBja2x3ZCB4bW0yLHhtbTMJCTsgeG1tMj0oMjAgMzAgMjEgMzEgMjIgMzIgMjMgMzMpCi0JcHVucGNraHdkIHhtbTUseG1tMwkJOyB4bW01PSgyNCAzNCAyNSAzNSAyNiAzNiAyNyAzNykKKyAgICAgICAgbW92ZHFhICAgIHhtbTQseG1tMCAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICAgICAgcHVucGNrbHdkIHhtbTAseG1tMSAgICAgICAgICAgICA7IHhtbTA9KDAwIDEwIDAxIDExIDAyIDEyIDAzIDEzKQorICAgICAgICBwdW5wY2tod2QgeG1tNCx4bW0xICAgICAgICAgICAgIDsgeG1tND0oMDQgMTQgMDUgMTUgMDYgMTYgMDcgMTcpCisgICAgICAgIG1vdmRxYSAgICB4bW01LHhtbTIgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgICAgIHB1bnBja2x3ZCB4bW0yLHhtbTMgICAgICAgICAgICAgOyB4bW0yPSgyMCAzMCAyMSAzMSAyMiAzMiAyMyAzMykKKyAgICAgICAgcHVucGNraHdkIHhtbTUseG1tMyAgICAgICAgICAgICA7IHhtbTU9KDI0IDM0IDI1IDM1IDI2IDM2IDI3IDM3KQogCi0JbW92ZHFhCXhtbTYsIFhNTVdPUkQgW1hNTUJMT0NLKDQsMCxyZHgsU0laRU9GX0RDVEVMRU0pXQotCW1vdmRxYQl4bW03LCBYTU1XT1JEIFtYTU1CTE9DSyg1LDAscmR4LFNJWkVPRl9EQ1RFTEVNKV0KLQltb3ZkcWEJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNiwwLHJkeCxTSVpFT0ZfRENURUxFTSldCi0JbW92ZHFhCXhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxyZHgsU0laRU9GX0RDVEVMRU0pXQorICAgICAgICBtb3ZkcWEgIHhtbTYsIFhNTVdPUkQgW1hNTUJMT0NLKDQsMCxyZHgsU0laRU9GX0RDVEVMRU0pXQorICAgICAgICBtb3ZkcWEgIHhtbTcsIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxyZHgsU0laRU9GX0RDVEVMRU0pXQorICAgICAgICBtb3ZkcWEgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDYsMCxyZHgsU0laRU9GX0RDVEVMRU0pXQorICAgICAgICBtb3ZkcWEgIHhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxyZHgsU0laRU9GX0RDVEVMRU0pXQogCi0JOyB4bW02PSggNCAxMiAyMCAyOCAzNiA0NCA1MiA2MCksIHhtbTE9KCA2IDE0IDIyIDMwIDM4IDQ2IDU0IDYyKQotCTsgeG1tNz0oIDUgMTMgMjEgMjkgMzcgNDUgNTMgNjEpLCB4bW0zPSggNyAxNSAyMyAzMSAzOSA0NyA1NSA2MykKKyAgICAgICAgOyB4bW02PSggNCAxMiAyMCAyOCAzNiA0NCA1MiA2MCksIHhtbTE9KCA2IDE0IDIyIDMwIDM4IDQ2IDU0IDYyKQorICAgICAgICA7IHhtbTc9KCA1IDEzIDIxIDI5IDM3IDQ1IDUzIDYxKSwgeG1tMz0oIDcgMTUgMjMgMzEgMzkgNDcgNTUgNjMpCiAKLQltb3ZkcWEJWE1NV09SRCBbd2soMCldLCB4bW0yCTsgd2soMCk9KDIwIDMwIDIxIDMxIDIyIDMyIDIzIDMzKQotCW1vdmRxYQlYTU1XT1JEIFt3aygxKV0sIHhtbTUJOyB3aygxKT0oMjQgMzQgMjUgMzUgMjYgMzYgMjcgMzcpCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMCldLCB4bW0yICAgOyB3aygwKT0oMjAgMzAgMjEgMzEgMjIgMzIgMjMgMzMpCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMSldLCB4bW01ICAgOyB3aygxKT0oMjQgMzQgMjUgMzUgMjYgMzYgMjcgMzcpCiAKLQltb3ZkcWEgICAgeG1tMix4bW02CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKLQlwdW5wY2tsd2QgeG1tNix4bW03CQk7IHhtbTY9KDQwIDUwIDQxIDUxIDQyIDUyIDQzIDUzKQotCXB1bnBja2h3ZCB4bW0yLHhtbTcJCTsgeG1tMj0oNDQgNTQgNDUgNTUgNDYgNTYgNDcgNTcpCi0JbW92ZHFhICAgIHhtbTUseG1tMQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCi0JcHVucGNrbHdkIHhtbTEseG1tMwkJOyB4bW0xPSg2MCA3MCA2MSA3MSA2MiA3MiA2MyA3MykKLQlwdW5wY2tod2QgeG1tNSx4bW0zCQk7IHhtbTU9KDY0IDc0IDY1IDc1IDY2IDc2IDY3IDc3KQorICAgICAgICBtb3ZkcWEgICAgeG1tMix4bW02ICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgICAgICBwdW5wY2tsd2QgeG1tNix4bW03ICAgICAgICAgICAgIDsgeG1tNj0oNDAgNTAgNDEgNTEgNDIgNTIgNDMgNTMpCisgICAgICAgIHB1bnBja2h3ZCB4bW0yLHhtbTcgICAgICAgICAgICAgOyB4bW0yPSg0NCA1NCA0NSA1NSA0NiA1NiA0NyA1NykKKyAgICAgICAgbW92ZHFhICAgIHhtbTUseG1tMSAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICAgICAgcHVucGNrbHdkIHhtbTEseG1tMyAgICAgICAgICAgICA7IHhtbTE9KDYwIDcwIDYxIDcxIDYyIDcyIDYzIDczKQorICAgICAgICBwdW5wY2tod2QgeG1tNSx4bW0zICAgICAgICAgICAgIDsgeG1tNT0oNjQgNzQgNjUgNzUgNjYgNzYgNjcgNzcpCiAKLQltb3ZkcWEgICAgeG1tNyx4bW02CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKLQlwdW5wY2tsZHEgeG1tNix4bW0xCQk7IHhtbTY9KDQwIDUwIDYwIDcwIDQxIDUxIDYxIDcxKQotCXB1bnBja2hkcSB4bW03LHhtbTEJCTsgeG1tNz0oNDIgNTIgNjIgNzIgNDMgNTMgNjMgNzMpCi0JbW92ZHFhICAgIHhtbTMseG1tMgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCi0JcHVucGNrbGRxIHhtbTIseG1tNQkJOyB4bW0yPSg0NCA1NCA2NCA3NCA0NSA1NSA2NSA3NSkKLQlwdW5wY2toZHEgeG1tMyx4bW01CQk7IHhtbTM9KDQ2IDU2IDY2IDc2IDQ3IDU3IDY3IDc3KQorICAgICAgICBtb3ZkcWEgICAgeG1tNyx4bW02ICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgICAgICBwdW5wY2tsZHEgeG1tNix4bW0xICAgICAgICAgICAgIDsgeG1tNj0oNDAgNTAgNjAgNzAgNDEgNTEgNjEgNzEpCisgICAgICAgIHB1bnBja2hkcSB4bW03LHhtbTEgICAgICAgICAgICAgOyB4bW03PSg0MiA1MiA2MiA3MiA0MyA1MyA2MyA3MykKKyAgICAgICAgbW92ZHFhICAgIHhtbTMseG1tMiAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICAgICAgcHVucGNrbGRxIHhtbTIseG1tNSAgICAgICAgICAgICA7IHhtbTI9KDQ0IDU0IDY0IDc0IDQ1IDU1IDY1IDc1KQorICAgICAgICBwdW5wY2toZHEgeG1tMyx4bW01ICAgICAgICAgICAgIDsgeG1tMz0oNDYgNTYgNjYgNzYgNDcgNTcgNjcgNzcpCiAKLQltb3ZkcWEJeG1tMSwgWE1NV09SRCBbd2soMCldCTsgeG1tMT0oMjAgMzAgMjEgMzEgMjIgMzIgMjMgMzMpCi0JbW92ZHFhCXhtbTUsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTU9KDI0IDM0IDI1IDM1IDI2IDM2IDI3IDM3KQotCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTcJOyB3aygwKT0oNDIgNTIgNjIgNzIgNDMgNTMgNjMgNzMpCi0JbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tMgk7IHdrKDEpPSg0NCA1NCA2NCA3NCA0NSA1NSA2NSA3NSkKKyAgICAgICAgbW92ZHFhICB4bW0xLCBYTU1XT1JEIFt3aygwKV0gICA7IHhtbTE9KDIwIDMwIDIxIDMxIDIyIDMyIDIzIDMzKQorICAgICAgICBtb3ZkcWEgIHhtbTUsIFhNTVdPUkQgW3drKDEpXSAgIDsgeG1tNT0oMjQgMzQgMjUgMzUgMjYgMzYgMjcgMzcpCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMCldLCB4bW03ICAgOyB3aygwKT0oNDIgNTIgNjIgNzIgNDMgNTMgNjMgNzMpCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMSldLCB4bW0yICAgOyB3aygxKT0oNDQgNTQgNjQgNzQgNDUgNTUgNjUgNzUpCiAKLQltb3ZkcWEgICAgeG1tNyx4bW0wCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKLQlwdW5wY2tsZHEgeG1tMCx4bW0xCQk7IHhtbTA9KDAwIDEwIDIwIDMwIDAxIDExIDIxIDMxKQotCXB1bnBja2hkcSB4bW03LHhtbTEJCTsgeG1tNz0oMDIgMTIgMjIgMzIgMDMgMTMgMjMgMzMpCi0JbW92ZHFhICAgIHhtbTIseG1tNAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCi0JcHVucGNrbGRxIHhtbTQseG1tNQkJOyB4bW00PSgwNCAxNCAyNCAzNCAwNSAxNSAyNSAzNSkKLQlwdW5wY2toZHEgeG1tMix4bW01CQk7IHhtbTI9KDA2IDE2IDI2IDM2IDA3IDE3IDI3IDM3KQorICAgICAgICBtb3ZkcWEgICAgeG1tNyx4bW0wICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgICAgICBwdW5wY2tsZHEgeG1tMCx4bW0xICAgICAgICAgICAgIDsgeG1tMD0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEpCisgICAgICAgIHB1bnBja2hkcSB4bW03LHhtbTEgICAgICAgICAgICAgOyB4bW03PSgwMiAxMiAyMiAzMiAwMyAxMyAyMyAzMykKKyAgICAgICAgbW92ZHFhICAgIHhtbTIseG1tNCAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICAgICAgcHVucGNrbGRxIHhtbTQseG1tNSAgICAgICAgICAgICA7IHhtbTQ9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1KQorICAgICAgICBwdW5wY2toZHEgeG1tMix4bW01ICAgICAgICAgICAgIDsgeG1tMj0oMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCiAKLQltb3ZkcWEgICAgIHhtbTEseG1tMAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCi0JcHVucGNrbHFkcSB4bW0wLHhtbTYJCTsgeG1tMD0oMDAgMTAgMjAgMzAgNDAgNTAgNjAgNzApPWRhdGEwCi0JcHVucGNraHFkcSB4bW0xLHhtbTYJCTsgeG1tMT0oMDEgMTEgMjEgMzEgNDEgNTEgNjEgNzEpPWRhdGExCi0JbW92ZHFhICAgICB4bW01LHhtbTIJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQotCXB1bnBja2xxZHEgeG1tMix4bW0zCQk7IHhtbTI9KDA2IDE2IDI2IDM2IDQ2IDU2IDY2IDc2KT1kYXRhNgotCXB1bnBja2hxZHEgeG1tNSx4bW0zCQk7IHhtbTU9KDA3IDE3IDI3IDM3IDQ3IDU3IDY3IDc3KT1kYXRhNworICAgICAgICBtb3ZkcWEgICAgIHhtbTEseG1tMCAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorICAgICAgICBwdW5wY2tscWRxIHhtbTAseG1tNiAgICAgICAgICAgIDsgeG1tMD0oMDAgMTAgMjAgMzAgNDAgNTAgNjAgNzApPWRhdGEwCisgICAgICAgIHB1bnBja2hxZHEgeG1tMSx4bW02ICAgICAgICAgICAgOyB4bW0xPSgwMSAxMSAyMSAzMSA0MSA1MSA2MSA3MSk9ZGF0YTEKKyAgICAgICAgbW92ZHFhICAgICB4bW01LHhtbTIgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKyAgICAgICAgcHVucGNrbHFkcSB4bW0yLHhtbTMgICAgICAgICAgICA7IHhtbTI9KDA2IDE2IDI2IDM2IDQ2IDU2IDY2IDc2KT1kYXRhNgorICAgICAgICBwdW5wY2tocWRxIHhtbTUseG1tMyAgICAgICAgICAgIDsgeG1tNT0oMDcgMTcgMjcgMzcgNDcgNTcgNjcgNzcpPWRhdGE3CiAKLQltb3ZkcWEJeG1tNix4bW0xCi0JbW92ZHFhCXhtbTMseG1tMAotCXBzdWJ3CXhtbTEseG1tMgkJOyB4bW0xPWRhdGExLWRhdGE2PXRtcDYKLQlwc3Vidwl4bW0wLHhtbTUJCTsgeG1tMD1kYXRhMC1kYXRhNz10bXA3Ci0JcGFkZHcJeG1tNix4bW0yCQk7IHhtbTY9ZGF0YTErZGF0YTY9dG1wMQotCXBhZGR3CXhtbTMseG1tNQkJOyB4bW0zPWRhdGEwK2RhdGE3PXRtcDAKKyAgICAgICAgbW92ZHFhICB4bW02LHhtbTEKKyAgICAgICAgbW92ZHFhICB4bW0zLHhtbTAKKyAgICAgICAgcHN1YncgICB4bW0xLHhtbTIgICAgICAgICAgICAgICA7IHhtbTE9ZGF0YTEtZGF0YTY9dG1wNgorICAgICAgICBwc3VidyAgIHhtbTAseG1tNSAgICAgICAgICAgICAgIDsgeG1tMD1kYXRhMC1kYXRhNz10bXA3CisgICAgICAgIHBhZGR3ICAgeG1tNix4bW0yICAgICAgICAgICAgICAgOyB4bW02PWRhdGExK2RhdGE2PXRtcDEKKyAgICAgICAgcGFkZHcgICB4bW0zLHhtbTUgICAgICAgICAgICAgICA7IHhtbTM9ZGF0YTArZGF0YTc9dG1wMAogCi0JbW92ZHFhCXhtbTIsIFhNTVdPUkQgW3drKDApXQk7IHhtbTI9KDQyIDUyIDYyIDcyIDQzIDUzIDYzIDczKQotCW1vdmRxYQl4bW01LCBYTU1XT1JEIFt3aygxKV0JOyB4bW01PSg0NCA1NCA2NCA3NCA0NSA1NSA2NSA3NSkKLQltb3ZkcWEJWE1NV09SRCBbd2soMCldLCB4bW0xCTsgd2soMCk9dG1wNgotCW1vdmRxYQlYTU1XT1JEIFt3aygxKV0sIHhtbTAJOyB3aygxKT10bXA3CisgICAgICAgIG1vdmRxYSAgeG1tMiwgWE1NV09SRCBbd2soMCldICAgOyB4bW0yPSg0MiA1MiA2MiA3MiA0MyA1MyA2MyA3MykKKyAgICAgICAgbW92ZHFhICB4bW01LCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTU9KDQ0IDU0IDY0IDc0IDQ1IDU1IDY1IDc1KQorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDApXSwgeG1tMSAgIDsgd2soMCk9dG1wNgorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDEpXSwgeG1tMCAgIDsgd2soMSk9dG1wNwogCi0JbW92ZHFhICAgICB4bW0xLHhtbTcJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQotCXB1bnBja2xxZHEgeG1tNyx4bW0yCQk7IHhtbTc9KDAyIDEyIDIyIDMyIDQyIDUyIDYyIDcyKT1kYXRhMgotCXB1bnBja2hxZHEgeG1tMSx4bW0yCQk7IHhtbTE9KDAzIDEzIDIzIDMzIDQzIDUzIDYzIDczKT1kYXRhMwotCW1vdmRxYSAgICAgeG1tMCx4bW00CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKLQlwdW5wY2tscWRxIHhtbTQseG1tNQkJOyB4bW00PSgwNCAxNCAyNCAzNCA0NCA1NCA2NCA3NCk9ZGF0YTQKLQlwdW5wY2tocWRxIHhtbTAseG1tNQkJOyB4bW0wPSgwNSAxNSAyNSAzNSA0NSA1NSA2NSA3NSk9ZGF0YTUKKyAgICAgICAgbW92ZHFhICAgICB4bW0xLHhtbTcgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKyAgICAgICAgcHVucGNrbHFkcSB4bW03LHhtbTIgICAgICAgICAgICA7IHhtbTc9KDAyIDEyIDIyIDMyIDQyIDUyIDYyIDcyKT1kYXRhMgorICAgICAgICBwdW5wY2tocWRxIHhtbTEseG1tMiAgICAgICAgICAgIDsgeG1tMT0oMDMgMTMgMjMgMzMgNDMgNTMgNjMgNzMpPWRhdGEzCisgICAgICAgIG1vdmRxYSAgICAgeG1tMCx4bW00ICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisgICAgICAgIHB1bnBja2xxZHEgeG1tNCx4bW01ICAgICAgICAgICAgOyB4bW00PSgwNCAxNCAyNCAzNCA0NCA1NCA2NCA3NCk9ZGF0YTQKKyAgICAgICAgcHVucGNraHFkcSB4bW0wLHhtbTUgICAgICAgICAgICA7IHhtbTA9KDA1IDE1IDI1IDM1IDQ1IDU1IDY1IDc1KT1kYXRhNQogCi0JbW92ZHFhCXhtbTIseG1tMQotCW1vdmRxYQl4bW01LHhtbTcKLQlwYWRkdwl4bW0xLHhtbTQJCTsgeG1tMT1kYXRhMytkYXRhND10bXAzCi0JcGFkZHcJeG1tNyx4bW0wCQk7IHhtbTc9ZGF0YTIrZGF0YTU9dG1wMgotCXBzdWJ3CXhtbTIseG1tNAkJOyB4bW0yPWRhdGEzLWRhdGE0PXRtcDQKLQlwc3Vidwl4bW01LHhtbTAJCTsgeG1tNT1kYXRhMi1kYXRhNT10bXA1CisgICAgICAgIG1vdmRxYSAgeG1tMix4bW0xCisgICAgICAgIG1vdmRxYSAgeG1tNSx4bW03CisgICAgICAgIHBhZGR3ICAgeG1tMSx4bW00ICAgICAgICAgICAgICAgOyB4bW0xPWRhdGEzK2RhdGE0PXRtcDMKKyAgICAgICAgcGFkZHcgICB4bW03LHhtbTAgICAgICAgICAgICAgICA7IHhtbTc9ZGF0YTIrZGF0YTU9dG1wMgorICAgICAgICBwc3VidyAgIHhtbTIseG1tNCAgICAgICAgICAgICAgIDsgeG1tMj1kYXRhMy1kYXRhND10bXA0CisgICAgICAgIHBzdWJ3ICAgeG1tNSx4bW0wICAgICAgICAgICAgICAgOyB4bW01PWRhdGEyLWRhdGE1PXRtcDUKIAotCTsgLS0gRXZlbiBwYXJ0CisgICAgICAgIDsgLS0gRXZlbiBwYXJ0CiAKLQltb3ZkcWEJeG1tNCx4bW0zCi0JbW92ZHFhCXhtbTAseG1tNgotCXBzdWJ3CXhtbTMseG1tMQkJOyB4bW0zPXRtcDEzCi0JcHN1YncJeG1tNix4bW03CQk7IHhtbTY9dG1wMTIKLQlwYWRkdwl4bW00LHhtbTEJCTsgeG1tND10bXAxMAotCXBhZGR3CXhtbTAseG1tNwkJOyB4bW0wPXRtcDExCisgICAgICAgIG1vdmRxYSAgeG1tNCx4bW0zCisgICAgICAgIG1vdmRxYSAgeG1tMCx4bW02CisgICAgICAgIHBzdWJ3ICAgeG1tMyx4bW0xICAgICAgICAgICAgICAgOyB4bW0zPXRtcDEzCisgICAgICAgIHBzdWJ3ICAgeG1tNix4bW03ICAgICAgICAgICAgICAgOyB4bW02PXRtcDEyCisgICAgICAgIHBhZGR3ICAgeG1tNCx4bW0xICAgICAgICAgICAgICAgOyB4bW00PXRtcDEwCisgICAgICAgIHBhZGR3ICAgeG1tMCx4bW03ICAgICAgICAgICAgICAgOyB4bW0wPXRtcDExCiAKLQlwYWRkdwl4bW02LHhtbTMKLQlwc2xsdwl4bW02LFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCi0JcG11bGh3CXhtbTYsW3JlbCBQV19GMDcwN10gOyB4bW02PXoxCisgICAgICAgIHBhZGR3ICAgeG1tNix4bW0zCisgICAgICAgIHBzbGx3ICAgeG1tNixQUkVfTVVMVElQTFlfU0NBTEVfQklUUworICAgICAgICBwbXVsaHcgIHhtbTYsW3JlbCBQV19GMDcwN10gOyB4bW02PXoxCiAKLQltb3ZkcWEJeG1tMSx4bW00Ci0JbW92ZHFhCXhtbTcseG1tMwotCXBzdWJ3CXhtbTQseG1tMAkJOyB4bW00PWRhdGE0Ci0JcHN1YncJeG1tMyx4bW02CQk7IHhtbTM9ZGF0YTYKLQlwYWRkdwl4bW0xLHhtbTAJCTsgeG1tMT1kYXRhMAotCXBhZGR3CXhtbTcseG1tNgkJOyB4bW03PWRhdGEyCisgICAgICAgIG1vdmRxYSAgeG1tMSx4bW00CisgICAgICAgIG1vdmRxYSAgeG1tNyx4bW0zCisgICAgICAgIHBzdWJ3ICAgeG1tNCx4bW0wICAgICAgICAgICAgICAgOyB4bW00PWRhdGE0CisgICAgICAgIHBzdWJ3ICAgeG1tMyx4bW02ICAgICAgICAgICAgICAgOyB4bW0zPWRhdGE2CisgICAgICAgIHBhZGR3ICAgeG1tMSx4bW0wICAgICAgICAgICAgICAgOyB4bW0xPWRhdGEwCisgICAgICAgIHBhZGR3ICAgeG1tNyx4bW02ICAgICAgICAgICAgICAgOyB4bW03PWRhdGEyCiAKLQltb3ZkcWEJeG1tMCwgWE1NV09SRCBbd2soMCldCTsgeG1tMD10bXA2Ci0JbW92ZHFhCXhtbTYsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTY9dG1wNwotCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTQJOyB3aygwKT1kYXRhNAotCW1vdmRxYQlYTU1XT1JEIFt3aygxKV0sIHhtbTMJOyB3aygxKT1kYXRhNgorICAgICAgICBtb3ZkcWEgIHhtbTAsIFhNTVdPUkQgW3drKDApXSAgIDsgeG1tMD10bXA2CisgICAgICAgIG1vdmRxYSAgeG1tNiwgWE1NV09SRCBbd2soMSldICAgOyB4bW02PXRtcDcKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygwKV0sIHhtbTQgICA7IHdrKDApPWRhdGE0CisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMSldLCB4bW0zICAgOyB3aygxKT1kYXRhNgogCi0JOyAtLSBPZGQgcGFydAorICAgICAgICA7IC0tIE9kZCBwYXJ0CiAKLQlwYWRkdwl4bW0yLHhtbTUJCTsgeG1tMj10bXAxMAotCXBhZGR3CXhtbTUseG1tMAkJOyB4bW01PXRtcDExCi0JcGFkZHcJeG1tMCx4bW02CQk7IHhtbTA9dG1wMTIsIHhtbTY9dG1wNworICAgICAgICBwYWRkdyAgIHhtbTIseG1tNSAgICAgICAgICAgICAgIDsgeG1tMj10bXAxMAorICAgICAgICBwYWRkdyAgIHhtbTUseG1tMCAgICAgICAgICAgICAgIDsgeG1tNT10bXAxMQorICAgICAgICBwYWRkdyAgIHhtbTAseG1tNiAgICAgICAgICAgICAgIDsgeG1tMD10bXAxMiwgeG1tNj10bXA3CiAKLQlwc2xsdwl4bW0yLFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCi0JcHNsbHcJeG1tMCxQUkVfTVVMVElQTFlfU0NBTEVfQklUUworICAgICAgICBwc2xsdyAgIHhtbTIsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKyAgICAgICAgcHNsbHcgICB4bW0wLFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCiAKLQlwc2xsdwl4bW01LFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCi0JcG11bGh3CXhtbTUsW3JlbCBQV19GMDcwN10gOyB4bW01PXozCisgICAgICAgIHBzbGx3ICAgeG1tNSxQUkVfTVVMVElQTFlfU0NBTEVfQklUUworICAgICAgICBwbXVsaHcgIHhtbTUsW3JlbCBQV19GMDcwN10gOyB4bW01PXozCiAKLQltb3ZkcWEJeG1tNCx4bW0yCQk7IHhtbTQ9dG1wMTAKLQlwc3Vidwl4bW0yLHhtbTAKLQlwbXVsaHcJeG1tMixbcmVsIFBXX0YwMzgyXSA7IHhtbTI9ejUKLQlwbXVsaHcJeG1tNCxbcmVsIFBXX0YwNTQxXSA7IHhtbTQ9TVVMVElQTFkodG1wMTAsRklYXzBfNTQxMTk2KQotCXBtdWxodwl4bW0wLFtyZWwgUFdfRjEzMDZdIDsgeG1tMD1NVUxUSVBMWSh0bXAxMixGSVhfMV8zMDY1NjIpCi0JcGFkZHcJeG1tNCx4bW0yCQk7IHhtbTQ9ejIKLQlwYWRkdwl4bW0wLHhtbTIJCTsgeG1tMD16NAorICAgICAgICBtb3ZkcWEgIHhtbTQseG1tMiAgICAgICAgICAgICAgIDsgeG1tND10bXAxMAorICAgICAgICBwc3VidyAgIHhtbTIseG1tMAorICAgICAgICBwbXVsaHcgIHhtbTIsW3JlbCBQV19GMDM4Ml0gOyB4bW0yPXo1CisgICAgICAgIHBtdWxodyAgeG1tNCxbcmVsIFBXX0YwNTQxXSA7IHhtbTQ9TVVMVElQTFkodG1wMTAsRklYXzBfNTQxMTk2KQorICAgICAgICBwbXVsaHcgIHhtbTAsW3JlbCBQV19GMTMwNl0gOyB4bW0wPU1VTFRJUExZKHRtcDEyLEZJWF8xXzMwNjU2MikKKyAgICAgICAgcGFkZHcgICB4bW00LHhtbTIgICAgICAgICAgICAgICA7IHhtbTQ9ejIKKyAgICAgICAgcGFkZHcgICB4bW0wLHhtbTIgICAgICAgICAgICAgICA7IHhtbTA9ejQKIAotCW1vdmRxYQl4bW0zLHhtbTYKLQlwc3Vidwl4bW02LHhtbTUJCTsgeG1tNj16MTMKLQlwYWRkdwl4bW0zLHhtbTUJCTsgeG1tMz16MTEKKyAgICAgICAgbW92ZHFhICB4bW0zLHhtbTYKKyAgICAgICAgcHN1YncgICB4bW02LHhtbTUgICAgICAgICAgICAgICA7IHhtbTY9ejEzCisgICAgICAgIHBhZGR3ICAgeG1tMyx4bW01ICAgICAgICAgICAgICAgOyB4bW0zPXoxMQogCi0JbW92ZHFhCXhtbTIseG1tNgotCW1vdmRxYQl4bW01LHhtbTMKLQlwc3Vidwl4bW02LHhtbTQJCTsgeG1tNj1kYXRhMwotCXBzdWJ3CXhtbTMseG1tMAkJOyB4bW0zPWRhdGE3Ci0JcGFkZHcJeG1tMix4bW00CQk7IHhtbTI9ZGF0YTUKLQlwYWRkdwl4bW01LHhtbTAJCTsgeG1tNT1kYXRhMQorICAgICAgICBtb3ZkcWEgIHhtbTIseG1tNgorICAgICAgICBtb3ZkcWEgIHhtbTUseG1tMworICAgICAgICBwc3VidyAgIHhtbTYseG1tNCAgICAgICAgICAgICAgIDsgeG1tNj1kYXRhMworICAgICAgICBwc3VidyAgIHhtbTMseG1tMCAgICAgICAgICAgICAgIDsgeG1tMz1kYXRhNworICAgICAgICBwYWRkdyAgIHhtbTIseG1tNCAgICAgICAgICAgICAgIDsgeG1tMj1kYXRhNQorICAgICAgICBwYWRkdyAgIHhtbTUseG1tMCAgICAgICAgICAgICAgIDsgeG1tNT1kYXRhMQogCi0JOyAtLS0tIFBhc3MgMjogcHJvY2VzcyBjb2x1bW5zLgorICAgICAgICA7IC0tLS0gUGFzcyAyOiBwcm9jZXNzIGNvbHVtbnMuCiAKLQk7IHhtbTE9KDAwIDEwIDIwIDMwIDQwIDUwIDYwIDcwKSwgeG1tNz0oMDIgMTIgMjIgMzIgNDIgNTIgNjIgNzIpCi0JOyB4bW01PSgwMSAxMSAyMSAzMSA0MSA1MSA2MSA3MSksIHhtbTY9KDAzIDEzIDIzIDMzIDQzIDUzIDYzIDczKQorICAgICAgICA7IHhtbTE9KDAwIDEwIDIwIDMwIDQwIDUwIDYwIDcwKSwgeG1tNz0oMDIgMTIgMjIgMzIgNDIgNTIgNjIgNzIpCisgICAgICAgIDsgeG1tNT0oMDEgMTEgMjEgMzEgNDEgNTEgNjEgNzEpLCB4bW02PSgwMyAxMyAyMyAzMyA0MyA1MyA2MyA3MykKIAotCW1vdmRxYSAgICB4bW00LHhtbTEJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQotCXB1bnBja2x3ZCB4bW0xLHhtbTUJCTsgeG1tMT0oMDAgMDEgMTAgMTEgMjAgMjEgMzAgMzEpCi0JcHVucGNraHdkIHhtbTQseG1tNQkJOyB4bW00PSg0MCA0MSA1MCA1MSA2MCA2MSA3MCA3MSkKLQltb3ZkcWEgICAgeG1tMCx4bW03CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKLQlwdW5wY2tsd2QgeG1tNyx4bW02CQk7IHhtbTc9KDAyIDAzIDEyIDEzIDIyIDIzIDMyIDMzKQotCXB1bnBja2h3ZCB4bW0wLHhtbTYJCTsgeG1tMD0oNDIgNDMgNTIgNTMgNjIgNjMgNzIgNzMpCisgICAgICAgIG1vdmRxYSAgICB4bW00LHhtbTEgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgICAgIHB1bnBja2x3ZCB4bW0xLHhtbTUgICAgICAgICAgICAgOyB4bW0xPSgwMCAwMSAxMCAxMSAyMCAyMSAzMCAzMSkKKyAgICAgICAgcHVucGNraHdkIHhtbTQseG1tNSAgICAgICAgICAgICA7IHhtbTQ9KDQwIDQxIDUwIDUxIDYwIDYxIDcwIDcxKQorICAgICAgICBtb3ZkcWEgICAgeG1tMCx4bW03ICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgICAgICBwdW5wY2tsd2QgeG1tNyx4bW02ICAgICAgICAgICAgIDsgeG1tNz0oMDIgMDMgMTIgMTMgMjIgMjMgMzIgMzMpCisgICAgICAgIHB1bnBja2h3ZCB4bW0wLHhtbTYgICAgICAgICAgICAgOyB4bW0wPSg0MiA0MyA1MiA1MyA2MiA2MyA3MiA3MykKIAotCW1vdmRxYQl4bW01LCBYTU1XT1JEIFt3aygwKV0JOyB4bW01PWNvbDQKLQltb3ZkcWEJeG1tNiwgWE1NV09SRCBbd2soMSldCTsgeG1tNj1jb2w2CisgICAgICAgIG1vdmRxYSAgeG1tNSwgWE1NV09SRCBbd2soMCldICAgOyB4bW01PWNvbDQKKyAgICAgICAgbW92ZHFhICB4bW02LCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTY9Y29sNgogCi0JOyB4bW01PSgwNCAxNCAyNCAzNCA0NCA1NCA2NCA3NCksIHhtbTY9KDA2IDE2IDI2IDM2IDQ2IDU2IDY2IDc2KQotCTsgeG1tMj0oMDUgMTUgMjUgMzUgNDUgNTUgNjUgNzUpLCB4bW0zPSgwNyAxNyAyNyAzNyA0NyA1NyA2NyA3NykKKyAgICAgICAgOyB4bW01PSgwNCAxNCAyNCAzNCA0NCA1NCA2NCA3NCksIHhtbTY9KDA2IDE2IDI2IDM2IDQ2IDU2IDY2IDc2KQorICAgICAgICA7IHhtbTI9KDA1IDE1IDI1IDM1IDQ1IDU1IDY1IDc1KSwgeG1tMz0oMDcgMTcgMjcgMzcgNDcgNTcgNjcgNzcpCiAKLQltb3ZkcWEJWE1NV09SRCBbd2soMCldLCB4bW03CTsgd2soMCk9KDAyIDAzIDEyIDEzIDIyIDIzIDMyIDMzKQotCW1vdmRxYQlYTU1XT1JEIFt3aygxKV0sIHhtbTAJOyB3aygxKT0oNDIgNDMgNTIgNTMgNjIgNjMgNzIgNzMpCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMCldLCB4bW03ICAgOyB3aygwKT0oMDIgMDMgMTIgMTMgMjIgMjMgMzIgMzMpCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMSldLCB4bW0wICAgOyB3aygxKT0oNDIgNDMgNTIgNTMgNjIgNjMgNzIgNzMpCiAKLQltb3ZkcWEgICAgeG1tNyx4bW01CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKLQlwdW5wY2tsd2QgeG1tNSx4bW0yCQk7IHhtbTU9KDA0IDA1IDE0IDE1IDI0IDI1IDM0IDM1KQotCXB1bnBja2h3ZCB4bW03LHhtbTIJCTsgeG1tNz0oNDQgNDUgNTQgNTUgNjQgNjUgNzQgNzUpCi0JbW92ZHFhICAgIHhtbTAseG1tNgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCi0JcHVucGNrbHdkIHhtbTYseG1tMwkJOyB4bW02PSgwNiAwNyAxNiAxNyAyNiAyNyAzNiAzNykKLQlwdW5wY2tod2QgeG1tMCx4bW0zCQk7IHhtbTA9KDQ2IDQ3IDU2IDU3IDY2IDY3IDc2IDc3KQorICAgICAgICBtb3ZkcWEgICAgeG1tNyx4bW01ICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgICAgICBwdW5wY2tsd2QgeG1tNSx4bW0yICAgICAgICAgICAgIDsgeG1tNT0oMDQgMDUgMTQgMTUgMjQgMjUgMzQgMzUpCisgICAgICAgIHB1bnBja2h3ZCB4bW03LHhtbTIgICAgICAgICAgICAgOyB4bW03PSg0NCA0NSA1NCA1NSA2NCA2NSA3NCA3NSkKKyAgICAgICAgbW92ZHFhICAgIHhtbTAseG1tNiAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICAgICAgcHVucGNrbHdkIHhtbTYseG1tMyAgICAgICAgICAgICA7IHhtbTY9KDA2IDA3IDE2IDE3IDI2IDI3IDM2IDM3KQorICAgICAgICBwdW5wY2tod2QgeG1tMCx4bW0zICAgICAgICAgICAgIDsgeG1tMD0oNDYgNDcgNTYgNTcgNjYgNjcgNzYgNzcpCiAKLQltb3ZkcWEgICAgeG1tMix4bW01CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKLQlwdW5wY2tsZHEgeG1tNSx4bW02CQk7IHhtbTU9KDA0IDA1IDA2IDA3IDE0IDE1IDE2IDE3KQotCXB1bnBja2hkcSB4bW0yLHhtbTYJCTsgeG1tMj0oMjQgMjUgMjYgMjcgMzQgMzUgMzYgMzcpCi0JbW92ZHFhICAgIHhtbTMseG1tNwkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCi0JcHVucGNrbGRxIHhtbTcseG1tMAkJOyB4bW03PSg0NCA0NSA0NiA0NyA1NCA1NSA1NiA1NykKLQlwdW5wY2toZHEgeG1tMyx4bW0wCQk7IHhtbTM9KDY0IDY1IDY2IDY3IDc0IDc1IDc2IDc3KQorICAgICAgICBtb3ZkcWEgICAgeG1tMix4bW01ICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgICAgICBwdW5wY2tsZHEgeG1tNSx4bW02ICAgICAgICAgICAgIDsgeG1tNT0oMDQgMDUgMDYgMDcgMTQgMTUgMTYgMTcpCisgICAgICAgIHB1bnBja2hkcSB4bW0yLHhtbTYgICAgICAgICAgICAgOyB4bW0yPSgyNCAyNSAyNiAyNyAzNCAzNSAzNiAzNykKKyAgICAgICAgbW92ZHFhICAgIHhtbTMseG1tNyAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICAgICAgcHVucGNrbGRxIHhtbTcseG1tMCAgICAgICAgICAgICA7IHhtbTc9KDQ0IDQ1IDQ2IDQ3IDU0IDU1IDU2IDU3KQorICAgICAgICBwdW5wY2toZHEgeG1tMyx4bW0wICAgICAgICAgICAgIDsgeG1tMz0oNjQgNjUgNjYgNjcgNzQgNzUgNzYgNzcpCiAKLQltb3ZkcWEJeG1tNiwgWE1NV09SRCBbd2soMCldCTsgeG1tNj0oMDIgMDMgMTIgMTMgMjIgMjMgMzIgMzMpCi0JbW92ZHFhCXhtbTAsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTA9KDQyIDQzIDUyIDUzIDYyIDYzIDcyIDczKQotCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTIJOyB3aygwKT0oMjQgMjUgMjYgMjcgMzQgMzUgMzYgMzcpCi0JbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tNwk7IHdrKDEpPSg0NCA0NSA0NiA0NyA1NCA1NSA1NiA1NykKKyAgICAgICAgbW92ZHFhICB4bW02LCBYTU1XT1JEIFt3aygwKV0gICA7IHhtbTY9KDAyIDAzIDEyIDEzIDIyIDIzIDMyIDMzKQorICAgICAgICBtb3ZkcWEgIHhtbTAsIFhNTVdPUkQgW3drKDEpXSAgIDsgeG1tMD0oNDIgNDMgNTIgNTMgNjIgNjMgNzIgNzMpCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMCldLCB4bW0yICAgOyB3aygwKT0oMjQgMjUgMjYgMjcgMzQgMzUgMzYgMzcpCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMSldLCB4bW03ICAgOyB3aygxKT0oNDQgNDUgNDYgNDcgNTQgNTUgNTYgNTcpCiAKLQltb3ZkcWEgICAgeG1tMix4bW0xCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKLQlwdW5wY2tsZHEgeG1tMSx4bW02CQk7IHhtbTE9KDAwIDAxIDAyIDAzIDEwIDExIDEyIDEzKQotCXB1bnBja2hkcSB4bW0yLHhtbTYJCTsgeG1tMj0oMjAgMjEgMjIgMjMgMzAgMzEgMzIgMzMpCi0JbW92ZHFhICAgIHhtbTcseG1tNAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCi0JcHVucGNrbGRxIHhtbTQseG1tMAkJOyB4bW00PSg0MCA0MSA0MiA0MyA1MCA1MSA1MiA1MykKLQlwdW5wY2toZHEgeG1tNyx4bW0wCQk7IHhtbTc9KDYwIDYxIDYyIDYzIDcwIDcxIDcyIDczKQorICAgICAgICBtb3ZkcWEgICAgeG1tMix4bW0xICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgICAgICBwdW5wY2tsZHEgeG1tMSx4bW02ICAgICAgICAgICAgIDsgeG1tMT0oMDAgMDEgMDIgMDMgMTAgMTEgMTIgMTMpCisgICAgICAgIHB1bnBja2hkcSB4bW0yLHhtbTYgICAgICAgICAgICAgOyB4bW0yPSgyMCAyMSAyMiAyMyAzMCAzMSAzMiAzMykKKyAgICAgICAgbW92ZHFhICAgIHhtbTcseG1tNCAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICAgICAgcHVucGNrbGRxIHhtbTQseG1tMCAgICAgICAgICAgICA7IHhtbTQ9KDQwIDQxIDQyIDQzIDUwIDUxIDUyIDUzKQorICAgICAgICBwdW5wY2toZHEgeG1tNyx4bW0wICAgICAgICAgICAgIDsgeG1tNz0oNjAgNjEgNjIgNjMgNzAgNzEgNzIgNzMpCiAKLQltb3ZkcWEgICAgIHhtbTYseG1tMQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCi0JcHVucGNrbHFkcSB4bW0xLHhtbTUJCTsgeG1tMT0oMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcpPWRhdGEwCi0JcHVucGNraHFkcSB4bW02LHhtbTUJCTsgeG1tNj0oMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcpPWRhdGExCi0JbW92ZHFhICAgICB4bW0wLHhtbTcJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQotCXB1bnBja2xxZHEgeG1tNyx4bW0zCQk7IHhtbTc9KDYwIDYxIDYyIDYzIDY0IDY1IDY2IDY3KT1kYXRhNgotCXB1bnBja2hxZHEgeG1tMCx4bW0zCQk7IHhtbTA9KDcwIDcxIDcyIDczIDc0IDc1IDc2IDc3KT1kYXRhNworICAgICAgICBtb3ZkcWEgICAgIHhtbTYseG1tMSAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorICAgICAgICBwdW5wY2tscWRxIHhtbTEseG1tNSAgICAgICAgICAgIDsgeG1tMT0oMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcpPWRhdGEwCisgICAgICAgIHB1bnBja2hxZHEgeG1tNix4bW01ICAgICAgICAgICAgOyB4bW02PSgxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNyk9ZGF0YTEKKyAgICAgICAgbW92ZHFhICAgICB4bW0wLHhtbTcgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKyAgICAgICAgcHVucGNrbHFkcSB4bW03LHhtbTMgICAgICAgICAgICA7IHhtbTc9KDYwIDYxIDYyIDYzIDY0IDY1IDY2IDY3KT1kYXRhNgorICAgICAgICBwdW5wY2tocWRxIHhtbTAseG1tMyAgICAgICAgICAgIDsgeG1tMD0oNzAgNzEgNzIgNzMgNzQgNzUgNzYgNzcpPWRhdGE3CiAKLQltb3ZkcWEJeG1tNSx4bW02Ci0JbW92ZHFhCXhtbTMseG1tMQotCXBzdWJ3CXhtbTYseG1tNwkJOyB4bW02PWRhdGExLWRhdGE2PXRtcDYKLQlwc3Vidwl4bW0xLHhtbTAJCTsgeG1tMT1kYXRhMC1kYXRhNz10bXA3Ci0JcGFkZHcJeG1tNSx4bW03CQk7IHhtbTU9ZGF0YTErZGF0YTY9dG1wMQotCXBhZGR3CXhtbTMseG1tMAkJOyB4bW0zPWRhdGEwK2RhdGE3PXRtcDAKKyAgICAgICAgbW92ZHFhICB4bW01LHhtbTYKKyAgICAgICAgbW92ZHFhICB4bW0zLHhtbTEKKyAgICAgICAgcHN1YncgICB4bW02LHhtbTcgICAgICAgICAgICAgICA7IHhtbTY9ZGF0YTEtZGF0YTY9dG1wNgorICAgICAgICBwc3VidyAgIHhtbTEseG1tMCAgICAgICAgICAgICAgIDsgeG1tMT1kYXRhMC1kYXRhNz10bXA3CisgICAgICAgIHBhZGR3ICAgeG1tNSx4bW03ICAgICAgICAgICAgICAgOyB4bW01PWRhdGExK2RhdGE2PXRtcDEKKyAgICAgICAgcGFkZHcgICB4bW0zLHhtbTAgICAgICAgICAgICAgICA7IHhtbTM9ZGF0YTArZGF0YTc9dG1wMAogCi0JbW92ZHFhCXhtbTcsIFhNTVdPUkQgW3drKDApXQk7IHhtbTc9KDI0IDI1IDI2IDI3IDM0IDM1IDM2IDM3KQotCW1vdmRxYQl4bW0wLCBYTU1XT1JEIFt3aygxKV0JOyB4bW0wPSg0NCA0NSA0NiA0NyA1NCA1NSA1NiA1NykKLQltb3ZkcWEJWE1NV09SRCBbd2soMCldLCB4bW02CTsgd2soMCk9dG1wNgotCW1vdmRxYQlYTU1XT1JEIFt3aygxKV0sIHhtbTEJOyB3aygxKT10bXA3CisgICAgICAgIG1vdmRxYSAgeG1tNywgWE1NV09SRCBbd2soMCldICAgOyB4bW03PSgyNCAyNSAyNiAyNyAzNCAzNSAzNiAzNykKKyAgICAgICAgbW92ZHFhICB4bW0wLCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTA9KDQ0IDQ1IDQ2IDQ3IDU0IDU1IDU2IDU3KQorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDApXSwgeG1tNiAgIDsgd2soMCk9dG1wNgorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDEpXSwgeG1tMSAgIDsgd2soMSk9dG1wNwogCi0JbW92ZHFhICAgICB4bW02LHhtbTIJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQotCXB1bnBja2xxZHEgeG1tMix4bW03CQk7IHhtbTI9KDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3KT1kYXRhMgotCXB1bnBja2hxZHEgeG1tNix4bW03CQk7IHhtbTY9KDMwIDMxIDMyIDMzIDM0IDM1IDM2IDM3KT1kYXRhMwotCW1vdmRxYSAgICAgeG1tMSx4bW00CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKLQlwdW5wY2tscWRxIHhtbTQseG1tMAkJOyB4bW00PSg0MCA0MSA0MiA0MyA0NCA0NSA0NiA0Nyk9ZGF0YTQKLQlwdW5wY2tocWRxIHhtbTEseG1tMAkJOyB4bW0xPSg1MCA1MSA1MiA1MyA1NCA1NSA1NiA1Nyk9ZGF0YTUKKyAgICAgICAgbW92ZHFhICAgICB4bW02LHhtbTIgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKyAgICAgICAgcHVucGNrbHFkcSB4bW0yLHhtbTcgICAgICAgICAgICA7IHhtbTI9KDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3KT1kYXRhMgorICAgICAgICBwdW5wY2tocWRxIHhtbTYseG1tNyAgICAgICAgICAgIDsgeG1tNj0oMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcpPWRhdGEzCisgICAgICAgIG1vdmRxYSAgICAgeG1tMSx4bW00ICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisgICAgICAgIHB1bnBja2xxZHEgeG1tNCx4bW0wICAgICAgICAgICAgOyB4bW00PSg0MCA0MSA0MiA0MyA0NCA0NSA0NiA0Nyk9ZGF0YTQKKyAgICAgICAgcHVucGNraHFkcSB4bW0xLHhtbTAgICAgICAgICAgICA7IHhtbTE9KDUwIDUxIDUyIDUzIDU0IDU1IDU2IDU3KT1kYXRhNQogCi0JbW92ZHFhCXhtbTcseG1tNgotCW1vdmRxYQl4bW0wLHhtbTIKLQlwYWRkdwl4bW02LHhtbTQJCTsgeG1tNj1kYXRhMytkYXRhND10bXAzCi0JcGFkZHcJeG1tMix4bW0xCQk7IHhtbTI9ZGF0YTIrZGF0YTU9dG1wMgotCXBzdWJ3CXhtbTcseG1tNAkJOyB4bW03PWRhdGEzLWRhdGE0PXRtcDQKLQlwc3Vidwl4bW0wLHhtbTEJCTsgeG1tMD1kYXRhMi1kYXRhNT10bXA1CisgICAgICAgIG1vdmRxYSAgeG1tNyx4bW02CisgICAgICAgIG1vdmRxYSAgeG1tMCx4bW0yCisgICAgICAgIHBhZGR3ICAgeG1tNix4bW00ICAgICAgICAgICAgICAgOyB4bW02PWRhdGEzK2RhdGE0PXRtcDMKKyAgICAgICAgcGFkZHcgICB4bW0yLHhtbTEgICAgICAgICAgICAgICA7IHhtbTI9ZGF0YTIrZGF0YTU9dG1wMgorICAgICAgICBwc3VidyAgIHhtbTcseG1tNCAgICAgICAgICAgICAgIDsgeG1tNz1kYXRhMy1kYXRhND10bXA0CisgICAgICAgIHBzdWJ3ICAgeG1tMCx4bW0xICAgICAgICAgICAgICAgOyB4bW0wPWRhdGEyLWRhdGE1PXRtcDUKIAotCTsgLS0gRXZlbiBwYXJ0CisgICAgICAgIDsgLS0gRXZlbiBwYXJ0CiAKLQltb3ZkcWEJeG1tNCx4bW0zCi0JbW92ZHFhCXhtbTEseG1tNQotCXBzdWJ3CXhtbTMseG1tNgkJOyB4bW0zPXRtcDEzCi0JcHN1YncJeG1tNSx4bW0yCQk7IHhtbTU9dG1wMTIKLQlwYWRkdwl4bW00LHhtbTYJCTsgeG1tND10bXAxMAotCXBhZGR3CXhtbTEseG1tMgkJOyB4bW0xPXRtcDExCisgICAgICAgIG1vdmRxYSAgeG1tNCx4bW0zCisgICAgICAgIG1vdmRxYSAgeG1tMSx4bW01CisgICAgICAgIHBzdWJ3ICAgeG1tMyx4bW02ICAgICAgICAgICAgICAgOyB4bW0zPXRtcDEzCisgICAgICAgIHBzdWJ3ICAgeG1tNSx4bW0yICAgICAgICAgICAgICAgOyB4bW01PXRtcDEyCisgICAgICAgIHBhZGR3ICAgeG1tNCx4bW02ICAgICAgICAgICAgICAgOyB4bW00PXRtcDEwCisgICAgICAgIHBhZGR3ICAgeG1tMSx4bW0yICAgICAgICAgICAgICAgOyB4bW0xPXRtcDExCiAKLQlwYWRkdwl4bW01LHhtbTMKLQlwc2xsdwl4bW01LFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCi0JcG11bGh3CXhtbTUsW3JlbCBQV19GMDcwN10gOyB4bW01PXoxCisgICAgICAgIHBhZGR3ICAgeG1tNSx4bW0zCisgICAgICAgIHBzbGx3ICAgeG1tNSxQUkVfTVVMVElQTFlfU0NBTEVfQklUUworICAgICAgICBwbXVsaHcgIHhtbTUsW3JlbCBQV19GMDcwN10gOyB4bW01PXoxCiAKLQltb3ZkcWEJeG1tNix4bW00Ci0JbW92ZHFhCXhtbTIseG1tMwotCXBzdWJ3CXhtbTQseG1tMQkJOyB4bW00PWRhdGE0Ci0JcHN1YncJeG1tMyx4bW01CQk7IHhtbTM9ZGF0YTYKLQlwYWRkdwl4bW02LHhtbTEJCTsgeG1tNj1kYXRhMAotCXBhZGR3CXhtbTIseG1tNQkJOyB4bW0yPWRhdGEyCisgICAgICAgIG1vdmRxYSAgeG1tNix4bW00CisgICAgICAgIG1vdmRxYSAgeG1tMix4bW0zCisgICAgICAgIHBzdWJ3ICAgeG1tNCx4bW0xICAgICAgICAgICAgICAgOyB4bW00PWRhdGE0CisgICAgICAgIHBzdWJ3ICAgeG1tMyx4bW01ICAgICAgICAgICAgICAgOyB4bW0zPWRhdGE2CisgICAgICAgIHBhZGR3ICAgeG1tNix4bW0xICAgICAgICAgICAgICAgOyB4bW02PWRhdGEwCisgICAgICAgIHBhZGR3ICAgeG1tMix4bW01ICAgICAgICAgICAgICAgOyB4bW0yPWRhdGEyCiAKLQltb3ZkcWEJWE1NV09SRCBbWE1NQkxPQ0soNCwwLHJkeCxTSVpFT0ZfRENURUxFTSldLCB4bW00Ci0JbW92ZHFhCVhNTVdPUkQgW1hNTUJMT0NLKDYsMCxyZHgsU0laRU9GX0RDVEVMRU0pXSwgeG1tMwotCW1vdmRxYQlYTU1XT1JEIFtYTU1CTE9DSygwLDAscmR4LFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTYKLQltb3ZkcWEJWE1NV09SRCBbWE1NQkxPQ0soMiwwLHJkeCxTSVpFT0ZfRENURUxFTSldLCB4bW0yCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbWE1NQkxPQ0soNCwwLHJkeCxTSVpFT0ZfRENURUxFTSldLCB4bW00CisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbWE1NQkxPQ0soNiwwLHJkeCxTSVpFT0ZfRENURUxFTSldLCB4bW0zCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJkeCxTSVpFT0ZfRENURUxFTSldLCB4bW02CisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbWE1NQkxPQ0soMiwwLHJkeCxTSVpFT0ZfRENURUxFTSldLCB4bW0yCiAKLQk7IC0tIE9kZCBwYXJ0CisgICAgICAgIDsgLS0gT2RkIHBhcnQKIAotCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFt3aygwKV0JOyB4bW0xPXRtcDYKLQltb3ZkcWEJeG1tNSwgWE1NV09SRCBbd2soMSldCTsgeG1tNT10bXA3CisgICAgICAgIG1vdmRxYSAgeG1tMSwgWE1NV09SRCBbd2soMCldICAgOyB4bW0xPXRtcDYKKyAgICAgICAgbW92ZHFhICB4bW01LCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTU9dG1wNwogCi0JcGFkZHcJeG1tNyx4bW0wCQk7IHhtbTc9dG1wMTAKLQlwYWRkdwl4bW0wLHhtbTEJCTsgeG1tMD10bXAxMQotCXBhZGR3CXhtbTEseG1tNQkJOyB4bW0xPXRtcDEyLCB4bW01PXRtcDcKKyAgICAgICAgcGFkZHcgICB4bW03LHhtbTAgICAgICAgICAgICAgICA7IHhtbTc9dG1wMTAKKyAgICAgICAgcGFkZHcgICB4bW0wLHhtbTEgICAgICAgICAgICAgICA7IHhtbTA9dG1wMTEKKyAgICAgICAgcGFkZHcgICB4bW0xLHhtbTUgICAgICAgICAgICAgICA7IHhtbTE9dG1wMTIsIHhtbTU9dG1wNwogCi0JcHNsbHcJeG1tNyxQUkVfTVVMVElQTFlfU0NBTEVfQklUUwotCXBzbGx3CXhtbTEsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKyAgICAgICAgcHNsbHcgICB4bW03LFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisgICAgICAgIHBzbGx3ICAgeG1tMSxQUkVfTVVMVElQTFlfU0NBTEVfQklUUwogCi0JcHNsbHcJeG1tMCxQUkVfTVVMVElQTFlfU0NBTEVfQklUUwotCXBtdWxodwl4bW0wLFtyZWwgUFdfRjA3MDddIDsgeG1tMD16MworICAgICAgICBwc2xsdyAgIHhtbTAsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKyAgICAgICAgcG11bGh3ICB4bW0wLFtyZWwgUFdfRjA3MDddIDsgeG1tMD16MwogCi0JbW92ZHFhCXhtbTQseG1tNwkJOyB4bW00PXRtcDEwCi0JcHN1YncJeG1tNyx4bW0xCi0JcG11bGh3CXhtbTcsW3JlbCBQV19GMDM4Ml0gOyB4bW03PXo1Ci0JcG11bGh3CXhtbTQsW3JlbCBQV19GMDU0MV0gOyB4bW00PU1VTFRJUExZKHRtcDEwLEZJWF8wXzU0MTE5NikKLQlwbXVsaHcJeG1tMSxbcmVsIFBXX0YxMzA2XSA7IHhtbTE9TVVMVElQTFkodG1wMTIsRklYXzFfMzA2NTYyKQotCXBhZGR3CXhtbTQseG1tNwkJOyB4bW00PXoyCi0JcGFkZHcJeG1tMSx4bW03CQk7IHhtbTE9ejQKKyAgICAgICAgbW92ZHFhICB4bW00LHhtbTcgICAgICAgICAgICAgICA7IHhtbTQ9dG1wMTAKKyAgICAgICAgcHN1YncgICB4bW03LHhtbTEKKyAgICAgICAgcG11bGh3ICB4bW03LFtyZWwgUFdfRjAzODJdIDsgeG1tNz16NQorICAgICAgICBwbXVsaHcgIHhtbTQsW3JlbCBQV19GMDU0MV0gOyB4bW00PU1VTFRJUExZKHRtcDEwLEZJWF8wXzU0MTE5NikKKyAgICAgICAgcG11bGh3ICB4bW0xLFtyZWwgUFdfRjEzMDZdIDsgeG1tMT1NVUxUSVBMWSh0bXAxMixGSVhfMV8zMDY1NjIpCisgICAgICAgIHBhZGR3ICAgeG1tNCx4bW03ICAgICAgICAgICAgICAgOyB4bW00PXoyCisgICAgICAgIHBhZGR3ICAgeG1tMSx4bW03ICAgICAgICAgICAgICAgOyB4bW0xPXo0CiAKLQltb3ZkcWEJeG1tMyx4bW01Ci0JcHN1YncJeG1tNSx4bW0wCQk7IHhtbTU9ejEzCi0JcGFkZHcJeG1tMyx4bW0wCQk7IHhtbTM9ejExCisgICAgICAgIG1vdmRxYSAgeG1tMyx4bW01CisgICAgICAgIHBzdWJ3ICAgeG1tNSx4bW0wICAgICAgICAgICAgICAgOyB4bW01PXoxMworICAgICAgICBwYWRkdyAgIHhtbTMseG1tMCAgICAgICAgICAgICAgIDsgeG1tMz16MTEKIAotCW1vdmRxYQl4bW02LHhtbTUKLQltb3ZkcWEJeG1tMix4bW0zCi0JcHN1YncJeG1tNSx4bW00CQk7IHhtbTU9ZGF0YTMKLQlwc3Vidwl4bW0zLHhtbTEJCTsgeG1tMz1kYXRhNwotCXBhZGR3CXhtbTYseG1tNAkJOyB4bW02PWRhdGE1Ci0JcGFkZHcJeG1tMix4bW0xCQk7IHhtbTI9ZGF0YTEKKyAgICAgICAgbW92ZHFhICB4bW02LHhtbTUKKyAgICAgICAgbW92ZHFhICB4bW0yLHhtbTMKKyAgICAgICAgcHN1YncgICB4bW01LHhtbTQgICAgICAgICAgICAgICA7IHhtbTU9ZGF0YTMKKyAgICAgICAgcHN1YncgICB4bW0zLHhtbTEgICAgICAgICAgICAgICA7IHhtbTM9ZGF0YTcKKyAgICAgICAgcGFkZHcgICB4bW02LHhtbTQgICAgICAgICAgICAgICA7IHhtbTY9ZGF0YTUKKyAgICAgICAgcGFkZHcgICB4bW0yLHhtbTEgICAgICAgICAgICAgICA7IHhtbTI9ZGF0YTEKIAotCW1vdmRxYQlYTU1XT1JEIFtYTU1CTE9DSygzLDAscmR4LFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTUKLQltb3ZkcWEJWE1NV09SRCBbWE1NQkxPQ0soNywwLHJkeCxTSVpFT0ZfRENURUxFTSldLCB4bW0zCi0JbW92ZHFhCVhNTVdPUkQgW1hNTUJMT0NLKDUsMCxyZHgsU0laRU9GX0RDVEVMRU0pXSwgeG1tNgotCW1vdmRxYQlYTU1XT1JEIFtYTU1CTE9DSygxLDAscmR4LFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTIKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFtYTU1CTE9DSygzLDAscmR4LFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTUKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFtYTU1CTE9DSyg3LDAscmR4LFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTMKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFtYTU1CTE9DSyg1LDAscmR4LFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTYKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFtYTU1CTE9DSygxLDAscmR4LFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTIKIAotCXVuY29sbGVjdF9hcmdzCi0JbW92CXJzcCxyYnAJCTsgcnNwIDwtIGFsaWduZWQgcmJwCi0JcG9wCXJzcAkJOyByc3AgPC0gb3JpZ2luYWwgcmJwCi0JcG9wCXJicAotCXJldAorICAgICAgICB1bmNvbGxlY3RfYXJncworICAgICAgICBtb3YgICAgIHJzcCxyYnAgICAgICAgICA7IHJzcCA8LSBhbGlnbmVkIHJicAorICAgICAgICBwb3AgICAgIHJzcCAgICAgICAgICAgICA7IHJzcCA8LSBvcmlnaW5hbCByYnAKKyAgICAgICAgcG9wICAgICByYnAKKyAgICAgICAgcmV0CiAKIDsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCiA7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCi0JYWxpZ24JMTYKKyAgICAgICAgYWxpZ24gICAxNgpkaWZmIC0tZ2l0IGEvc2ltZC9qZnNzMmZzdC5hc20gYi9zaW1kL2pmc3MyZnN0LmFzbQppbmRleCA3M2ZjOWU1Li44YmMwNWY0IDEwMDY0NAotLS0gYS9zaW1kL2pmc3MyZnN0LmFzbQorKysgYi9zaW1kL2pmc3MyZnN0LmFzbQpAQCAtMjYsMjQgKzI2LDI0IEBACiAKIDsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotJWRlZmluZSBDT05TVF9CSVRTCTgJOyAxNCBpcyBhbHNvIE9LLgorJWRlZmluZSBDT05TVF9CSVRTICAgICAgOCAgICAgICA7IDE0IGlzIGFsc28gT0suCiAKICVpZiBDT05TVF9CSVRTID09IDgKLUZfMF8zODIJZXF1CSA5OAkJOyBGSVgoMC4zODI2ODM0MzMpCi1GXzBfNTQxCWVxdQkxMzkJCTsgRklYKDAuNTQxMTk2MTAwKQotRl8wXzcwNwllcXUJMTgxCQk7IEZJWCgwLjcwNzEwNjc4MSkKLUZfMV8zMDYJZXF1CTMzNAkJOyBGSVgoMS4zMDY1NjI5NjUpCitGXzBfMzgyIGVxdSAgICAgIDk4ICAgICAgICAgICAgIDsgRklYKDAuMzgyNjgzNDMzKQorRl8wXzU0MSBlcXUgICAgIDEzOSAgICAgICAgICAgICA7IEZJWCgwLjU0MTE5NjEwMCkKK0ZfMF83MDcgZXF1ICAgICAxODEgICAgICAgICAgICAgOyBGSVgoMC43MDcxMDY3ODEpCitGXzFfMzA2IGVxdSAgICAgMzM0ICAgICAgICAgICAgIDsgRklYKDEuMzA2NTYyOTY1KQogJWVsc2UKIDsgTkFTTSBjYW5ub3QgZG8gY29tcGlsZS10aW1lIGFyaXRobWV0aWMgb24gZmxvYXRpbmctcG9pbnQgY29uc3RhbnRzLgogJWRlZmluZSBERVNDQUxFKHgsbikgICgoKHgpKygxPDwoKG4pLTEpKSk+PihuKSkKLUZfMF8zODIJZXF1CURFU0NBTEUoIDQxMDkwMzIwNywzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjM4MjY4MzQzMykKLUZfMF81NDEJZXF1CURFU0NBTEUoIDU4MTEwNDg4NywzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjU0MTE5NjEwMCkKLUZfMF83MDcJZXF1CURFU0NBTEUoIDc1OTI1MDEyNCwzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjcwNzEwNjc4MSkKLUZfMV8zMDYJZXF1CURFU0NBTEUoMTQwMjkxMTMwMSwzMC1DT05TVF9CSVRTKQk7IEZJWCgxLjMwNjU2Mjk2NSkKK0ZfMF8zODIgZXF1ICAgICBERVNDQUxFKCA0MTA5MDMyMDcsMzAtQ09OU1RfQklUUykgICAgICAgOyBGSVgoMC4zODI2ODM0MzMpCitGXzBfNTQxIGVxdSAgICAgREVTQ0FMRSggNTgxMTA0ODg3LDMwLUNPTlNUX0JJVFMpICAgICAgIDsgRklYKDAuNTQxMTk2MTAwKQorRl8wXzcwNyBlcXUgICAgIERFU0NBTEUoIDc1OTI1MDEyNCwzMC1DT05TVF9CSVRTKSAgICAgICA7IEZJWCgwLjcwNzEwNjc4MSkKK0ZfMV8zMDYgZXF1ICAgICBERVNDQUxFKDE0MDI5MTEzMDEsMzAtQ09OU1RfQklUUykgICAgICAgOyBGSVgoMS4zMDY1NjI5NjUpCiAlZW5kaWYKIAogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCVNFQ1RJT04JU0VHX0NPTlNUCisgICAgICAgIFNFQ1RJT04gU0VHX0NPTlNUCiAKIDsgUFJFX01VTFRJUExZX1NDQUxFX0JJVFMgPD0gMiAodG8gYXZvaWQgb3ZlcmZsb3cpCiA7IENPTlNUX0JJVFMgKyBDT05TVF9TSElGVCArIFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTID09IDE2IChmb3IgcG11bGh3KQpAQCAtNTEsMjEgKzUxLDIxIEBACiAlZGVmaW5lIFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTICAgMgogJWRlZmluZSBDT05TVF9TSElGVCAgICAgKDE2IC0gUFJFX01VTFRJUExZX1NDQUxFX0JJVFMgLSBDT05TVF9CSVRTKQogCi0JYWxpZ256CTE2Ci0JZ2xvYmFsCUVYVE4oamNvbnN0X2ZkY3RfaWZhc3Rfc3NlMikKKyAgICAgICAgYWxpZ256ICAxNgorICAgICAgICBnbG9iYWwgIEVYVE4oamNvbnN0X2ZkY3RfaWZhc3Rfc3NlMikKIAogRVhUTihqY29uc3RfZmRjdF9pZmFzdF9zc2UyKToKIAotUFdfRjA3MDcJdGltZXMgOCBkdyAgRl8wXzcwNyA8PCBDT05TVF9TSElGVAotUFdfRjAzODIJdGltZXMgOCBkdyAgRl8wXzM4MiA8PCBDT05TVF9TSElGVAotUFdfRjA1NDEJdGltZXMgOCBkdyAgRl8wXzU0MSA8PCBDT05TVF9TSElGVAotUFdfRjEzMDYJdGltZXMgOCBkdyAgRl8xXzMwNiA8PCBDT05TVF9TSElGVAorUFdfRjA3MDcgICAgICAgIHRpbWVzIDggZHcgIEZfMF83MDcgPDwgQ09OU1RfU0hJRlQKK1BXX0YwMzgyICAgICAgICB0aW1lcyA4IGR3ICBGXzBfMzgyIDw8IENPTlNUX1NISUZUCitQV19GMDU0MSAgICAgICAgdGltZXMgOCBkdyAgRl8wXzU0MSA8PCBDT05TVF9TSElGVAorUFdfRjEzMDYgICAgICAgIHRpbWVzIDggZHcgIEZfMV8zMDYgPDwgQ09OU1RfU0hJRlQKIAotCWFsaWduegkxNgorICAgICAgICBhbGlnbnogIDE2CiAKIDsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlTRUNUSU9OCVNFR19URVhUCi0JQklUUwkzMgorICAgICAgICBTRUNUSU9OIFNFR19URVhUCisgICAgICAgIEJJVFMgICAgMzIKIDsKIDsgUGVyZm9ybSB0aGUgZm9yd2FyZCBEQ1Qgb24gb25lIGJsb2NrIG9mIHNhbXBsZXMuCiA7CkBAIC03MywzMzIgKzczLDMzMiBAQAogOyBqc2ltZF9mZGN0X2lmYXN0X3NzZTIgKERDVEVMRU0gKiBkYXRhKQogOwogCi0lZGVmaW5lIGRhdGEoYikJCShiKSs4CQk7IERDVEVMRU0gKiBkYXRhCislZGVmaW5lIGRhdGEoYikgICAgICAgICAoYikrOCAgICAgICAgICAgOyBEQ1RFTEVNICogZGF0YQogCi0lZGVmaW5lIG9yaWdpbmFsX2VicAllYnArMAotJWRlZmluZSB3ayhpKQkJZWJwLShXS19OVU0tKGkpKSpTSVpFT0ZfWE1NV09SRAk7IHhtbXdvcmQgd2tbV0tfTlVNXQotJWRlZmluZSBXS19OVU0JCTIKKyVkZWZpbmUgb3JpZ2luYWxfZWJwICAgIGVicCswCislZGVmaW5lIHdrKGkpICAgICAgICAgICBlYnAtKFdLX05VTS0oaSkpKlNJWkVPRl9YTU1XT1JEIDsgeG1td29yZCB3a1tXS19OVU1dCislZGVmaW5lIFdLX05VTSAgICAgICAgICAyCiAKLQlhbGlnbgkxNgotCWdsb2JhbAlFWFROKGpzaW1kX2ZkY3RfaWZhc3Rfc3NlMikKKyAgICAgICAgYWxpZ24gICAxNgorICAgICAgICBnbG9iYWwgIEVYVE4oanNpbWRfZmRjdF9pZmFzdF9zc2UyKQogCiBFWFROKGpzaW1kX2ZkY3RfaWZhc3Rfc3NlMik6Ci0JcHVzaAllYnAKLQltb3YJZWF4LGVzcAkJCQk7IGVheCA9IG9yaWdpbmFsIGVicAotCXN1Ygllc3AsIGJ5dGUgNAotCWFuZAllc3AsIGJ5dGUgKC1TSVpFT0ZfWE1NV09SRCkJOyBhbGlnbiB0byAxMjggYml0cwotCW1vdglbZXNwXSxlYXgKLQltb3YJZWJwLGVzcAkJCQk7IGVicCA9IGFsaWduZWQgZWJwCi0JbGVhCWVzcCwgW3drKDApXQotCXB1c2hwaWMJZWJ4Ci07CXB1c2gJZWN4CQk7IHVudXNlZAotOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLTsJcHVzaAllc2kJCTsgdW51c2VkCi07CXB1c2gJZWRpCQk7IHVudXNlZAorICAgICAgICBwdXNoICAgIGVicAorICAgICAgICBtb3YgICAgIGVheCxlc3AgICAgICAgICAgICAgICAgICAgICAgICAgOyBlYXggPSBvcmlnaW5hbCBlYnAKKyAgICAgICAgc3ViICAgICBlc3AsIGJ5dGUgNAorICAgICAgICBhbmQgICAgIGVzcCwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKSAgICAgOyBhbGlnbiB0byAxMjggYml0cworICAgICAgICBtb3YgICAgIFtlc3BdLGVheAorICAgICAgICBtb3YgICAgIGVicCxlc3AgICAgICAgICAgICAgICAgICAgICAgICAgOyBlYnAgPSBhbGlnbmVkIGVicAorICAgICAgICBsZWEgICAgIGVzcCwgW3drKDApXQorICAgICAgICBwdXNocGljIGVieAorOyAgICAgICBwdXNoICAgIGVjeCAgICAgICAgICAgICA7IHVudXNlZAorOyAgICAgICBwdXNoICAgIGVkeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgICAgICBwdXNoICAgIGVzaSAgICAgICAgICAgICA7IHVudXNlZAorOyAgICAgICBwdXNoICAgIGVkaSAgICAgICAgICAgICA7IHVudXNlZAogCi0JZ2V0X0dPVAllYngJCTsgZ2V0IEdPVCBhZGRyZXNzCisgICAgICAgIGdldF9HT1QgZWJ4ICAgICAgICAgICAgIDsgZ2V0IEdPVCBhZGRyZXNzCiAKLQk7IC0tLS0gUGFzcyAxOiBwcm9jZXNzIHJvd3MuCisgICAgICAgIDsgLS0tLSBQYXNzIDE6IHByb2Nlc3Mgcm93cy4KIAotCW1vdgllZHgsIFBPSU5URVIgW2RhdGEoZWF4KV0JOyAoRENURUxFTSAqKQorICAgICAgICBtb3YgICAgIGVkeCwgUE9JTlRFUiBbZGF0YShlYXgpXSAgICAgICAgOyAoRENURUxFTSAqKQogCi0JbW92ZHFhCXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQotCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KLQltb3ZkcWEJeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soMiwwLGVkeCxTSVpFT0ZfRENURUxFTSldCi0JbW92ZHFhCXhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorICAgICAgICBtb3ZkcWEgIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorICAgICAgICBtb3ZkcWEgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorICAgICAgICBtb3ZkcWEgIHhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorICAgICAgICBtb3ZkcWEgIHhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQogCi0JOyB4bW0wPSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNyksIHhtbTI9KDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3KQotCTsgeG1tMT0oMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcpLCB4bW0zPSgzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNykKKyAgICAgICAgOyB4bW0wPSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNyksIHhtbTI9KDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3KQorICAgICAgICA7IHhtbTE9KDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3KSwgeG1tMz0oMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcpCiAKLQltb3ZkcWEgICAgeG1tNCx4bW0wCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKLQlwdW5wY2tsd2QgeG1tMCx4bW0xCQk7IHhtbTA9KDAwIDEwIDAxIDExIDAyIDEyIDAzIDEzKQotCXB1bnBja2h3ZCB4bW00LHhtbTEJCTsgeG1tND0oMDQgMTQgMDUgMTUgMDYgMTYgMDcgMTcpCi0JbW92ZHFhICAgIHhtbTUseG1tMgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCi0JcHVucGNrbHdkIHhtbTIseG1tMwkJOyB4bW0yPSgyMCAzMCAyMSAzMSAyMiAzMiAyMyAzMykKLQlwdW5wY2tod2QgeG1tNSx4bW0zCQk7IHhtbTU9KDI0IDM0IDI1IDM1IDI2IDM2IDI3IDM3KQorICAgICAgICBtb3ZkcWEgICAgeG1tNCx4bW0wICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgICAgICBwdW5wY2tsd2QgeG1tMCx4bW0xICAgICAgICAgICAgIDsgeG1tMD0oMDAgMTAgMDEgMTEgMDIgMTIgMDMgMTMpCisgICAgICAgIHB1bnBja2h3ZCB4bW00LHhtbTEgICAgICAgICAgICAgOyB4bW00PSgwNCAxNCAwNSAxNSAwNiAxNiAwNyAxNykKKyAgICAgICAgbW92ZHFhICAgIHhtbTUseG1tMiAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICAgICAgcHVucGNrbHdkIHhtbTIseG1tMyAgICAgICAgICAgICA7IHhtbTI9KDIwIDMwIDIxIDMxIDIyIDMyIDIzIDMzKQorICAgICAgICBwdW5wY2tod2QgeG1tNSx4bW0zICAgICAgICAgICAgIDsgeG1tNT0oMjQgMzQgMjUgMzUgMjYgMzYgMjcgMzcpCiAKLQltb3ZkcWEJeG1tNiwgWE1NV09SRCBbWE1NQkxPQ0soNCwwLGVkeCxTSVpFT0ZfRENURUxFTSldCi0JbW92ZHFhCXhtbTcsIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQotCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSyg2LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KLQltb3ZkcWEJeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNywwLGVkeCxTSVpFT0ZfRENURUxFTSldCisgICAgICAgIG1vdmRxYSAgeG1tNiwgWE1NV09SRCBbWE1NQkxPQ0soNCwwLGVkeCxTSVpFT0ZfRENURUxFTSldCisgICAgICAgIG1vdmRxYSAgeG1tNywgWE1NV09SRCBbWE1NQkxPQ0soNSwwLGVkeCxTSVpFT0ZfRENURUxFTSldCisgICAgICAgIG1vdmRxYSAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNiwwLGVkeCxTSVpFT0ZfRENURUxFTSldCisgICAgICAgIG1vdmRxYSAgeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNywwLGVkeCxTSVpFT0ZfRENURUxFTSldCiAKLQk7IHhtbTY9KCA0IDEyIDIwIDI4IDM2IDQ0IDUyIDYwKSwgeG1tMT0oIDYgMTQgMjIgMzAgMzggNDYgNTQgNjIpCi0JOyB4bW03PSggNSAxMyAyMSAyOSAzNyA0NSA1MyA2MSksIHhtbTM9KCA3IDE1IDIzIDMxIDM5IDQ3IDU1IDYzKQorICAgICAgICA7IHhtbTY9KCA0IDEyIDIwIDI4IDM2IDQ0IDUyIDYwKSwgeG1tMT0oIDYgMTQgMjIgMzAgMzggNDYgNTQgNjIpCisgICAgICAgIDsgeG1tNz0oIDUgMTMgMjEgMjkgMzcgNDUgNTMgNjEpLCB4bW0zPSggNyAxNSAyMyAzMSAzOSA0NyA1NSA2MykKIAotCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTIJOyB3aygwKT0oMjAgMzAgMjEgMzEgMjIgMzIgMjMgMzMpCi0JbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tNQk7IHdrKDEpPSgyNCAzNCAyNSAzNSAyNiAzNiAyNyAzNykKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygwKV0sIHhtbTIgICA7IHdrKDApPSgyMCAzMCAyMSAzMSAyMiAzMiAyMyAzMykKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygxKV0sIHhtbTUgICA7IHdrKDEpPSgyNCAzNCAyNSAzNSAyNiAzNiAyNyAzNykKIAotCW1vdmRxYSAgICB4bW0yLHhtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQotCXB1bnBja2x3ZCB4bW02LHhtbTcJCTsgeG1tNj0oNDAgNTAgNDEgNTEgNDIgNTIgNDMgNTMpCi0JcHVucGNraHdkIHhtbTIseG1tNwkJOyB4bW0yPSg0NCA1NCA0NSA1NSA0NiA1NiA0NyA1NykKLQltb3ZkcWEgICAgeG1tNSx4bW0xCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKLQlwdW5wY2tsd2QgeG1tMSx4bW0zCQk7IHhtbTE9KDYwIDcwIDYxIDcxIDYyIDcyIDYzIDczKQotCXB1bnBja2h3ZCB4bW01LHhtbTMJCTsgeG1tNT0oNjQgNzQgNjUgNzUgNjYgNzYgNjcgNzcpCisgICAgICAgIG1vdmRxYSAgICB4bW0yLHhtbTYgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgICAgIHB1bnBja2x3ZCB4bW02LHhtbTcgICAgICAgICAgICAgOyB4bW02PSg0MCA1MCA0MSA1MSA0MiA1MiA0MyA1MykKKyAgICAgICAgcHVucGNraHdkIHhtbTIseG1tNyAgICAgICAgICAgICA7IHhtbTI9KDQ0IDU0IDQ1IDU1IDQ2IDU2IDQ3IDU3KQorICAgICAgICBtb3ZkcWEgICAgeG1tNSx4bW0xICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgICAgICBwdW5wY2tsd2QgeG1tMSx4bW0zICAgICAgICAgICAgIDsgeG1tMT0oNjAgNzAgNjEgNzEgNjIgNzIgNjMgNzMpCisgICAgICAgIHB1bnBja2h3ZCB4bW01LHhtbTMgICAgICAgICAgICAgOyB4bW01PSg2NCA3NCA2NSA3NSA2NiA3NiA2NyA3NykKIAotCW1vdmRxYSAgICB4bW03LHhtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQotCXB1bnBja2xkcSB4bW02LHhtbTEJCTsgeG1tNj0oNDAgNTAgNjAgNzAgNDEgNTEgNjEgNzEpCi0JcHVucGNraGRxIHhtbTcseG1tMQkJOyB4bW03PSg0MiA1MiA2MiA3MiA0MyA1MyA2MyA3MykKLQltb3ZkcWEgICAgeG1tMyx4bW0yCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKLQlwdW5wY2tsZHEgeG1tMix4bW01CQk7IHhtbTI9KDQ0IDU0IDY0IDc0IDQ1IDU1IDY1IDc1KQotCXB1bnBja2hkcSB4bW0zLHhtbTUJCTsgeG1tMz0oNDYgNTYgNjYgNzYgNDcgNTcgNjcgNzcpCisgICAgICAgIG1vdmRxYSAgICB4bW03LHhtbTYgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgICAgIHB1bnBja2xkcSB4bW02LHhtbTEgICAgICAgICAgICAgOyB4bW02PSg0MCA1MCA2MCA3MCA0MSA1MSA2MSA3MSkKKyAgICAgICAgcHVucGNraGRxIHhtbTcseG1tMSAgICAgICAgICAgICA7IHhtbTc9KDQyIDUyIDYyIDcyIDQzIDUzIDYzIDczKQorICAgICAgICBtb3ZkcWEgICAgeG1tMyx4bW0yICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgICAgICBwdW5wY2tsZHEgeG1tMix4bW01ICAgICAgICAgICAgIDsgeG1tMj0oNDQgNTQgNjQgNzQgNDUgNTUgNjUgNzUpCisgICAgICAgIHB1bnBja2hkcSB4bW0zLHhtbTUgICAgICAgICAgICAgOyB4bW0zPSg0NiA1NiA2NiA3NiA0NyA1NyA2NyA3NykKIAotCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFt3aygwKV0JOyB4bW0xPSgyMCAzMCAyMSAzMSAyMiAzMiAyMyAzMykKLQltb3ZkcWEJeG1tNSwgWE1NV09SRCBbd2soMSldCTsgeG1tNT0oMjQgMzQgMjUgMzUgMjYgMzYgMjcgMzcpCi0JbW92ZHFhCVhNTVdPUkQgW3drKDApXSwgeG1tNwk7IHdrKDApPSg0MiA1MiA2MiA3MiA0MyA1MyA2MyA3MykKLQltb3ZkcWEJWE1NV09SRCBbd2soMSldLCB4bW0yCTsgd2soMSk9KDQ0IDU0IDY0IDc0IDQ1IDU1IDY1IDc1KQorICAgICAgICBtb3ZkcWEgIHhtbTEsIFhNTVdPUkQgW3drKDApXSAgIDsgeG1tMT0oMjAgMzAgMjEgMzEgMjIgMzIgMjMgMzMpCisgICAgICAgIG1vdmRxYSAgeG1tNSwgWE1NV09SRCBbd2soMSldICAgOyB4bW01PSgyNCAzNCAyNSAzNSAyNiAzNiAyNyAzNykKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygwKV0sIHhtbTcgICA7IHdrKDApPSg0MiA1MiA2MiA3MiA0MyA1MyA2MyA3MykKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygxKV0sIHhtbTIgICA7IHdrKDEpPSg0NCA1NCA2NCA3NCA0NSA1NSA2NSA3NSkKIAotCW1vdmRxYSAgICB4bW03LHhtbTAJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQotCXB1bnBja2xkcSB4bW0wLHhtbTEJCTsgeG1tMD0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEpCi0JcHVucGNraGRxIHhtbTcseG1tMQkJOyB4bW03PSgwMiAxMiAyMiAzMiAwMyAxMyAyMyAzMykKLQltb3ZkcWEgICAgeG1tMix4bW00CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKLQlwdW5wY2tsZHEgeG1tNCx4bW01CQk7IHhtbTQ9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1KQotCXB1bnBja2hkcSB4bW0yLHhtbTUJCTsgeG1tMj0oMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCisgICAgICAgIG1vdmRxYSAgICB4bW03LHhtbTAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgICAgIHB1bnBja2xkcSB4bW0wLHhtbTEgICAgICAgICAgICAgOyB4bW0wPSgwMCAxMCAyMCAzMCAwMSAxMSAyMSAzMSkKKyAgICAgICAgcHVucGNraGRxIHhtbTcseG1tMSAgICAgICAgICAgICA7IHhtbTc9KDAyIDEyIDIyIDMyIDAzIDEzIDIzIDMzKQorICAgICAgICBtb3ZkcWEgICAgeG1tMix4bW00ICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgICAgICBwdW5wY2tsZHEgeG1tNCx4bW01ICAgICAgICAgICAgIDsgeG1tND0oMDQgMTQgMjQgMzQgMDUgMTUgMjUgMzUpCisgICAgICAgIHB1bnBja2hkcSB4bW0yLHhtbTUgICAgICAgICAgICAgOyB4bW0yPSgwNiAxNiAyNiAzNiAwNyAxNyAyNyAzNykKIAotCW1vdmRxYSAgICAgeG1tMSx4bW0wCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKLQlwdW5wY2tscWRxIHhtbTAseG1tNgkJOyB4bW0wPSgwMCAxMCAyMCAzMCA0MCA1MCA2MCA3MCk9ZGF0YTAKLQlwdW5wY2tocWRxIHhtbTEseG1tNgkJOyB4bW0xPSgwMSAxMSAyMSAzMSA0MSA1MSA2MSA3MSk9ZGF0YTEKLQltb3ZkcWEgICAgIHhtbTUseG1tMgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCi0JcHVucGNrbHFkcSB4bW0yLHhtbTMJCTsgeG1tMj0oMDYgMTYgMjYgMzYgNDYgNTYgNjYgNzYpPWRhdGE2Ci0JcHVucGNraHFkcSB4bW01LHhtbTMJCTsgeG1tNT0oMDcgMTcgMjcgMzcgNDcgNTcgNjcgNzcpPWRhdGE3CisgICAgICAgIG1vdmRxYSAgICAgeG1tMSx4bW0wICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisgICAgICAgIHB1bnBja2xxZHEgeG1tMCx4bW02ICAgICAgICAgICAgOyB4bW0wPSgwMCAxMCAyMCAzMCA0MCA1MCA2MCA3MCk9ZGF0YTAKKyAgICAgICAgcHVucGNraHFkcSB4bW0xLHhtbTYgICAgICAgICAgICA7IHhtbTE9KDAxIDExIDIxIDMxIDQxIDUxIDYxIDcxKT1kYXRhMQorICAgICAgICBtb3ZkcWEgICAgIHhtbTUseG1tMiAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorICAgICAgICBwdW5wY2tscWRxIHhtbTIseG1tMyAgICAgICAgICAgIDsgeG1tMj0oMDYgMTYgMjYgMzYgNDYgNTYgNjYgNzYpPWRhdGE2CisgICAgICAgIHB1bnBja2hxZHEgeG1tNSx4bW0zICAgICAgICAgICAgOyB4bW01PSgwNyAxNyAyNyAzNyA0NyA1NyA2NyA3Nyk9ZGF0YTcKIAotCW1vdmRxYQl4bW02LHhtbTEKLQltb3ZkcWEJeG1tMyx4bW0wCi0JcHN1YncJeG1tMSx4bW0yCQk7IHhtbTE9ZGF0YTEtZGF0YTY9dG1wNgotCXBzdWJ3CXhtbTAseG1tNQkJOyB4bW0wPWRhdGEwLWRhdGE3PXRtcDcKLQlwYWRkdwl4bW02LHhtbTIJCTsgeG1tNj1kYXRhMStkYXRhNj10bXAxCi0JcGFkZHcJeG1tMyx4bW01CQk7IHhtbTM9ZGF0YTArZGF0YTc9dG1wMAorICAgICAgICBtb3ZkcWEgIHhtbTYseG1tMQorICAgICAgICBtb3ZkcWEgIHhtbTMseG1tMAorICAgICAgICBwc3VidyAgIHhtbTEseG1tMiAgICAgICAgICAgICAgIDsgeG1tMT1kYXRhMS1kYXRhNj10bXA2CisgICAgICAgIHBzdWJ3ICAgeG1tMCx4bW01ICAgICAgICAgICAgICAgOyB4bW0wPWRhdGEwLWRhdGE3PXRtcDcKKyAgICAgICAgcGFkZHcgICB4bW02LHhtbTIgICAgICAgICAgICAgICA7IHhtbTY9ZGF0YTErZGF0YTY9dG1wMQorICAgICAgICBwYWRkdyAgIHhtbTMseG1tNSAgICAgICAgICAgICAgIDsgeG1tMz1kYXRhMCtkYXRhNz10bXAwCiAKLQltb3ZkcWEJeG1tMiwgWE1NV09SRCBbd2soMCldCTsgeG1tMj0oNDIgNTIgNjIgNzIgNDMgNTMgNjMgNzMpCi0JbW92ZHFhCXhtbTUsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTU9KDQ0IDU0IDY0IDc0IDQ1IDU1IDY1IDc1KQotCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTEJOyB3aygwKT10bXA2Ci0JbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tMAk7IHdrKDEpPXRtcDcKKyAgICAgICAgbW92ZHFhICB4bW0yLCBYTU1XT1JEIFt3aygwKV0gICA7IHhtbTI9KDQyIDUyIDYyIDcyIDQzIDUzIDYzIDczKQorICAgICAgICBtb3ZkcWEgIHhtbTUsIFhNTVdPUkQgW3drKDEpXSAgIDsgeG1tNT0oNDQgNTQgNjQgNzQgNDUgNTUgNjUgNzUpCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMCldLCB4bW0xICAgOyB3aygwKT10bXA2CisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMSldLCB4bW0wICAgOyB3aygxKT10bXA3CiAKLQltb3ZkcWEgICAgIHhtbTEseG1tNwkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCi0JcHVucGNrbHFkcSB4bW03LHhtbTIJCTsgeG1tNz0oMDIgMTIgMjIgMzIgNDIgNTIgNjIgNzIpPWRhdGEyCi0JcHVucGNraHFkcSB4bW0xLHhtbTIJCTsgeG1tMT0oMDMgMTMgMjMgMzMgNDMgNTMgNjMgNzMpPWRhdGEzCi0JbW92ZHFhICAgICB4bW0wLHhtbTQJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQotCXB1bnBja2xxZHEgeG1tNCx4bW01CQk7IHhtbTQ9KDA0IDE0IDI0IDM0IDQ0IDU0IDY0IDc0KT1kYXRhNAotCXB1bnBja2hxZHEgeG1tMCx4bW01CQk7IHhtbTA9KDA1IDE1IDI1IDM1IDQ1IDU1IDY1IDc1KT1kYXRhNQorICAgICAgICBtb3ZkcWEgICAgIHhtbTEseG1tNyAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorICAgICAgICBwdW5wY2tscWRxIHhtbTcseG1tMiAgICAgICAgICAgIDsgeG1tNz0oMDIgMTIgMjIgMzIgNDIgNTIgNjIgNzIpPWRhdGEyCisgICAgICAgIHB1bnBja2hxZHEgeG1tMSx4bW0yICAgICAgICAgICAgOyB4bW0xPSgwMyAxMyAyMyAzMyA0MyA1MyA2MyA3Myk9ZGF0YTMKKyAgICAgICAgbW92ZHFhICAgICB4bW0wLHhtbTQgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKyAgICAgICAgcHVucGNrbHFkcSB4bW00LHhtbTUgICAgICAgICAgICA7IHhtbTQ9KDA0IDE0IDI0IDM0IDQ0IDU0IDY0IDc0KT1kYXRhNAorICAgICAgICBwdW5wY2tocWRxIHhtbTAseG1tNSAgICAgICAgICAgIDsgeG1tMD0oMDUgMTUgMjUgMzUgNDUgNTUgNjUgNzUpPWRhdGE1CiAKLQltb3ZkcWEJeG1tMix4bW0xCi0JbW92ZHFhCXhtbTUseG1tNwotCXBhZGR3CXhtbTEseG1tNAkJOyB4bW0xPWRhdGEzK2RhdGE0PXRtcDMKLQlwYWRkdwl4bW03LHhtbTAJCTsgeG1tNz1kYXRhMitkYXRhNT10bXAyCi0JcHN1YncJeG1tMix4bW00CQk7IHhtbTI9ZGF0YTMtZGF0YTQ9dG1wNAotCXBzdWJ3CXhtbTUseG1tMAkJOyB4bW01PWRhdGEyLWRhdGE1PXRtcDUKKyAgICAgICAgbW92ZHFhICB4bW0yLHhtbTEKKyAgICAgICAgbW92ZHFhICB4bW01LHhtbTcKKyAgICAgICAgcGFkZHcgICB4bW0xLHhtbTQgICAgICAgICAgICAgICA7IHhtbTE9ZGF0YTMrZGF0YTQ9dG1wMworICAgICAgICBwYWRkdyAgIHhtbTcseG1tMCAgICAgICAgICAgICAgIDsgeG1tNz1kYXRhMitkYXRhNT10bXAyCisgICAgICAgIHBzdWJ3ICAgeG1tMix4bW00ICAgICAgICAgICAgICAgOyB4bW0yPWRhdGEzLWRhdGE0PXRtcDQKKyAgICAgICAgcHN1YncgICB4bW01LHhtbTAgICAgICAgICAgICAgICA7IHhtbTU9ZGF0YTItZGF0YTU9dG1wNQogCi0JOyAtLSBFdmVuIHBhcnQKKyAgICAgICAgOyAtLSBFdmVuIHBhcnQKIAotCW1vdmRxYQl4bW00LHhtbTMKLQltb3ZkcWEJeG1tMCx4bW02Ci0JcHN1YncJeG1tMyx4bW0xCQk7IHhtbTM9dG1wMTMKLQlwc3Vidwl4bW02LHhtbTcJCTsgeG1tNj10bXAxMgotCXBhZGR3CXhtbTQseG1tMQkJOyB4bW00PXRtcDEwCi0JcGFkZHcJeG1tMCx4bW03CQk7IHhtbTA9dG1wMTEKKyAgICAgICAgbW92ZHFhICB4bW00LHhtbTMKKyAgICAgICAgbW92ZHFhICB4bW0wLHhtbTYKKyAgICAgICAgcHN1YncgICB4bW0zLHhtbTEgICAgICAgICAgICAgICA7IHhtbTM9dG1wMTMKKyAgICAgICAgcHN1YncgICB4bW02LHhtbTcgICAgICAgICAgICAgICA7IHhtbTY9dG1wMTIKKyAgICAgICAgcGFkZHcgICB4bW00LHhtbTEgICAgICAgICAgICAgICA7IHhtbTQ9dG1wMTAKKyAgICAgICAgcGFkZHcgICB4bW0wLHhtbTcgICAgICAgICAgICAgICA7IHhtbTA9dG1wMTEKIAotCXBhZGR3CXhtbTYseG1tMwotCXBzbGx3CXhtbTYsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKLQlwbXVsaHcJeG1tNixbR09UT0ZGKGVieCxQV19GMDcwNyldIDsgeG1tNj16MQorICAgICAgICBwYWRkdyAgIHhtbTYseG1tMworICAgICAgICBwc2xsdyAgIHhtbTYsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKyAgICAgICAgcG11bGh3ICB4bW02LFtHT1RPRkYoZWJ4LFBXX0YwNzA3KV0gOyB4bW02PXoxCiAKLQltb3ZkcWEJeG1tMSx4bW00Ci0JbW92ZHFhCXhtbTcseG1tMwotCXBzdWJ3CXhtbTQseG1tMAkJOyB4bW00PWRhdGE0Ci0JcHN1YncJeG1tMyx4bW02CQk7IHhtbTM9ZGF0YTYKLQlwYWRkdwl4bW0xLHhtbTAJCTsgeG1tMT1kYXRhMAotCXBhZGR3CXhtbTcseG1tNgkJOyB4bW03PWRhdGEyCisgICAgICAgIG1vdmRxYSAgeG1tMSx4bW00CisgICAgICAgIG1vdmRxYSAgeG1tNyx4bW0zCisgICAgICAgIHBzdWJ3ICAgeG1tNCx4bW0wICAgICAgICAgICAgICAgOyB4bW00PWRhdGE0CisgICAgICAgIHBzdWJ3ICAgeG1tMyx4bW02ICAgICAgICAgICAgICAgOyB4bW0zPWRhdGE2CisgICAgICAgIHBhZGR3ICAgeG1tMSx4bW0wICAgICAgICAgICAgICAgOyB4bW0xPWRhdGEwCisgICAgICAgIHBhZGR3ICAgeG1tNyx4bW02ICAgICAgICAgICAgICAgOyB4bW03PWRhdGEyCiAKLQltb3ZkcWEJeG1tMCwgWE1NV09SRCBbd2soMCldCTsgeG1tMD10bXA2Ci0JbW92ZHFhCXhtbTYsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTY9dG1wNwotCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTQJOyB3aygwKT1kYXRhNAotCW1vdmRxYQlYTU1XT1JEIFt3aygxKV0sIHhtbTMJOyB3aygxKT1kYXRhNgorICAgICAgICBtb3ZkcWEgIHhtbTAsIFhNTVdPUkQgW3drKDApXSAgIDsgeG1tMD10bXA2CisgICAgICAgIG1vdmRxYSAgeG1tNiwgWE1NV09SRCBbd2soMSldICAgOyB4bW02PXRtcDcKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygwKV0sIHhtbTQgICA7IHdrKDApPWRhdGE0CisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMSldLCB4bW0zICAgOyB3aygxKT1kYXRhNgogCi0JOyAtLSBPZGQgcGFydAorICAgICAgICA7IC0tIE9kZCBwYXJ0CiAKLQlwYWRkdwl4bW0yLHhtbTUJCTsgeG1tMj10bXAxMAotCXBhZGR3CXhtbTUseG1tMAkJOyB4bW01PXRtcDExCi0JcGFkZHcJeG1tMCx4bW02CQk7IHhtbTA9dG1wMTIsIHhtbTY9dG1wNworICAgICAgICBwYWRkdyAgIHhtbTIseG1tNSAgICAgICAgICAgICAgIDsgeG1tMj10bXAxMAorICAgICAgICBwYWRkdyAgIHhtbTUseG1tMCAgICAgICAgICAgICAgIDsgeG1tNT10bXAxMQorICAgICAgICBwYWRkdyAgIHhtbTAseG1tNiAgICAgICAgICAgICAgIDsgeG1tMD10bXAxMiwgeG1tNj10bXA3CiAKLQlwc2xsdwl4bW0yLFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCi0JcHNsbHcJeG1tMCxQUkVfTVVMVElQTFlfU0NBTEVfQklUUworICAgICAgICBwc2xsdyAgIHhtbTIsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKyAgICAgICAgcHNsbHcgICB4bW0wLFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCiAKLQlwc2xsdwl4bW01LFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCi0JcG11bGh3CXhtbTUsW0dPVE9GRihlYngsUFdfRjA3MDcpXSA7IHhtbTU9ejMKKyAgICAgICAgcHNsbHcgICB4bW01LFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisgICAgICAgIHBtdWxodyAgeG1tNSxbR09UT0ZGKGVieCxQV19GMDcwNyldIDsgeG1tNT16MwogCi0JbW92ZHFhCXhtbTQseG1tMgkJOyB4bW00PXRtcDEwCi0JcHN1YncJeG1tMix4bW0wCi0JcG11bGh3CXhtbTIsW0dPVE9GRihlYngsUFdfRjAzODIpXSA7IHhtbTI9ejUKLQlwbXVsaHcJeG1tNCxbR09UT0ZGKGVieCxQV19GMDU0MSldIDsgeG1tND1NVUxUSVBMWSh0bXAxMCxGSVhfMF81NDExOTYpCi0JcG11bGh3CXhtbTAsW0dPVE9GRihlYngsUFdfRjEzMDYpXSA7IHhtbTA9TVVMVElQTFkodG1wMTIsRklYXzFfMzA2NTYyKQotCXBhZGR3CXhtbTQseG1tMgkJOyB4bW00PXoyCi0JcGFkZHcJeG1tMCx4bW0yCQk7IHhtbTA9ejQKKyAgICAgICAgbW92ZHFhICB4bW00LHhtbTIgICAgICAgICAgICAgICA7IHhtbTQ9dG1wMTAKKyAgICAgICAgcHN1YncgICB4bW0yLHhtbTAKKyAgICAgICAgcG11bGh3ICB4bW0yLFtHT1RPRkYoZWJ4LFBXX0YwMzgyKV0gOyB4bW0yPXo1CisgICAgICAgIHBtdWxodyAgeG1tNCxbR09UT0ZGKGVieCxQV19GMDU0MSldIDsgeG1tND1NVUxUSVBMWSh0bXAxMCxGSVhfMF81NDExOTYpCisgICAgICAgIHBtdWxodyAgeG1tMCxbR09UT0ZGKGVieCxQV19GMTMwNildIDsgeG1tMD1NVUxUSVBMWSh0bXAxMixGSVhfMV8zMDY1NjIpCisgICAgICAgIHBhZGR3ICAgeG1tNCx4bW0yICAgICAgICAgICAgICAgOyB4bW00PXoyCisgICAgICAgIHBhZGR3ICAgeG1tMCx4bW0yICAgICAgICAgICAgICAgOyB4bW0wPXo0CiAKLQltb3ZkcWEJeG1tMyx4bW02Ci0JcHN1YncJeG1tNix4bW01CQk7IHhtbTY9ejEzCi0JcGFkZHcJeG1tMyx4bW01CQk7IHhtbTM9ejExCisgICAgICAgIG1vdmRxYSAgeG1tMyx4bW02CisgICAgICAgIHBzdWJ3ICAgeG1tNix4bW01ICAgICAgICAgICAgICAgOyB4bW02PXoxMworICAgICAgICBwYWRkdyAgIHhtbTMseG1tNSAgICAgICAgICAgICAgIDsgeG1tMz16MTEKIAotCW1vdmRxYQl4bW0yLHhtbTYKLQltb3ZkcWEJeG1tNSx4bW0zCi0JcHN1YncJeG1tNix4bW00CQk7IHhtbTY9ZGF0YTMKLQlwc3Vidwl4bW0zLHhtbTAJCTsgeG1tMz1kYXRhNwotCXBhZGR3CXhtbTIseG1tNAkJOyB4bW0yPWRhdGE1Ci0JcGFkZHcJeG1tNSx4bW0wCQk7IHhtbTU9ZGF0YTEKKyAgICAgICAgbW92ZHFhICB4bW0yLHhtbTYKKyAgICAgICAgbW92ZHFhICB4bW01LHhtbTMKKyAgICAgICAgcHN1YncgICB4bW02LHhtbTQgICAgICAgICAgICAgICA7IHhtbTY9ZGF0YTMKKyAgICAgICAgcHN1YncgICB4bW0zLHhtbTAgICAgICAgICAgICAgICA7IHhtbTM9ZGF0YTcKKyAgICAgICAgcGFkZHcgICB4bW0yLHhtbTQgICAgICAgICAgICAgICA7IHhtbTI9ZGF0YTUKKyAgICAgICAgcGFkZHcgICB4bW01LHhtbTAgICAgICAgICAgICAgICA7IHhtbTU9ZGF0YTEKIAotCTsgLS0tLSBQYXNzIDI6IHByb2Nlc3MgY29sdW1ucy4KKyAgICAgICAgOyAtLS0tIFBhc3MgMjogcHJvY2VzcyBjb2x1bW5zLgogCi07CW1vdgllZHgsIFBPSU5URVIgW2RhdGEoZWF4KV0JOyAoRENURUxFTSAqKQorOyAgICAgICBtb3YgICAgIGVkeCwgUE9JTlRFUiBbZGF0YShlYXgpXSAgICAgICAgOyAoRENURUxFTSAqKQogCi0JOyB4bW0xPSgwMCAxMCAyMCAzMCA0MCA1MCA2MCA3MCksIHhtbTc9KDAyIDEyIDIyIDMyIDQyIDUyIDYyIDcyKQotCTsgeG1tNT0oMDEgMTEgMjEgMzEgNDEgNTEgNjEgNzEpLCB4bW02PSgwMyAxMyAyMyAzMyA0MyA1MyA2MyA3MykKKyAgICAgICAgOyB4bW0xPSgwMCAxMCAyMCAzMCA0MCA1MCA2MCA3MCksIHhtbTc9KDAyIDEyIDIyIDMyIDQyIDUyIDYyIDcyKQorICAgICAgICA7IHhtbTU9KDAxIDExIDIxIDMxIDQxIDUxIDYxIDcxKSwgeG1tNj0oMDMgMTMgMjMgMzMgNDMgNTMgNjMgNzMpCiAKLQltb3ZkcWEgICAgeG1tNCx4bW0xCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKLQlwdW5wY2tsd2QgeG1tMSx4bW01CQk7IHhtbTE9KDAwIDAxIDEwIDExIDIwIDIxIDMwIDMxKQotCXB1bnBja2h3ZCB4bW00LHhtbTUJCTsgeG1tND0oNDAgNDEgNTAgNTEgNjAgNjEgNzAgNzEpCi0JbW92ZHFhICAgIHhtbTAseG1tNwkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCi0JcHVucGNrbHdkIHhtbTcseG1tNgkJOyB4bW03PSgwMiAwMyAxMiAxMyAyMiAyMyAzMiAzMykKLQlwdW5wY2tod2QgeG1tMCx4bW02CQk7IHhtbTA9KDQyIDQzIDUyIDUzIDYyIDYzIDcyIDczKQorICAgICAgICBtb3ZkcWEgICAgeG1tNCx4bW0xICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgICAgICBwdW5wY2tsd2QgeG1tMSx4bW01ICAgICAgICAgICAgIDsgeG1tMT0oMDAgMDEgMTAgMTEgMjAgMjEgMzAgMzEpCisgICAgICAgIHB1bnBja2h3ZCB4bW00LHhtbTUgICAgICAgICAgICAgOyB4bW00PSg0MCA0MSA1MCA1MSA2MCA2MSA3MCA3MSkKKyAgICAgICAgbW92ZHFhICAgIHhtbTAseG1tNyAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICAgICAgcHVucGNrbHdkIHhtbTcseG1tNiAgICAgICAgICAgICA7IHhtbTc9KDAyIDAzIDEyIDEzIDIyIDIzIDMyIDMzKQorICAgICAgICBwdW5wY2tod2QgeG1tMCx4bW02ICAgICAgICAgICAgIDsgeG1tMD0oNDIgNDMgNTIgNTMgNjIgNjMgNzIgNzMpCiAKLQltb3ZkcWEJeG1tNSwgWE1NV09SRCBbd2soMCldCTsgeG1tNT1jb2w0Ci0JbW92ZHFhCXhtbTYsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTY9Y29sNgorICAgICAgICBtb3ZkcWEgIHhtbTUsIFhNTVdPUkQgW3drKDApXSAgIDsgeG1tNT1jb2w0CisgICAgICAgIG1vdmRxYSAgeG1tNiwgWE1NV09SRCBbd2soMSldICAgOyB4bW02PWNvbDYKIAotCTsgeG1tNT0oMDQgMTQgMjQgMzQgNDQgNTQgNjQgNzQpLCB4bW02PSgwNiAxNiAyNiAzNiA0NiA1NiA2NiA3NikKLQk7IHhtbTI9KDA1IDE1IDI1IDM1IDQ1IDU1IDY1IDc1KSwgeG1tMz0oMDcgMTcgMjcgMzcgNDcgNTcgNjcgNzcpCisgICAgICAgIDsgeG1tNT0oMDQgMTQgMjQgMzQgNDQgNTQgNjQgNzQpLCB4bW02PSgwNiAxNiAyNiAzNiA0NiA1NiA2NiA3NikKKyAgICAgICAgOyB4bW0yPSgwNSAxNSAyNSAzNSA0NSA1NSA2NSA3NSksIHhtbTM9KDA3IDE3IDI3IDM3IDQ3IDU3IDY3IDc3KQogCi0JbW92ZHFhCVhNTVdPUkQgW3drKDApXSwgeG1tNwk7IHdrKDApPSgwMiAwMyAxMiAxMyAyMiAyMyAzMiAzMykKLQltb3ZkcWEJWE1NV09SRCBbd2soMSldLCB4bW0wCTsgd2soMSk9KDQyIDQzIDUyIDUzIDYyIDYzIDcyIDczKQorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDApXSwgeG1tNyAgIDsgd2soMCk9KDAyIDAzIDEyIDEzIDIyIDIzIDMyIDMzKQorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDEpXSwgeG1tMCAgIDsgd2soMSk9KDQyIDQzIDUyIDUzIDYyIDYzIDcyIDczKQogCi0JbW92ZHFhICAgIHhtbTcseG1tNQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCi0JcHVucGNrbHdkIHhtbTUseG1tMgkJOyB4bW01PSgwNCAwNSAxNCAxNSAyNCAyNSAzNCAzNSkKLQlwdW5wY2tod2QgeG1tNyx4bW0yCQk7IHhtbTc9KDQ0IDQ1IDU0IDU1IDY0IDY1IDc0IDc1KQotCW1vdmRxYSAgICB4bW0wLHhtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQotCXB1bnBja2x3ZCB4bW02LHhtbTMJCTsgeG1tNj0oMDYgMDcgMTYgMTcgMjYgMjcgMzYgMzcpCi0JcHVucGNraHdkIHhtbTAseG1tMwkJOyB4bW0wPSg0NiA0NyA1NiA1NyA2NiA2NyA3NiA3NykKKyAgICAgICAgbW92ZHFhICAgIHhtbTcseG1tNSAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICAgICAgcHVucGNrbHdkIHhtbTUseG1tMiAgICAgICAgICAgICA7IHhtbTU9KDA0IDA1IDE0IDE1IDI0IDI1IDM0IDM1KQorICAgICAgICBwdW5wY2tod2QgeG1tNyx4bW0yICAgICAgICAgICAgIDsgeG1tNz0oNDQgNDUgNTQgNTUgNjQgNjUgNzQgNzUpCisgICAgICAgIG1vdmRxYSAgICB4bW0wLHhtbTYgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgICAgIHB1bnBja2x3ZCB4bW02LHhtbTMgICAgICAgICAgICAgOyB4bW02PSgwNiAwNyAxNiAxNyAyNiAyNyAzNiAzNykKKyAgICAgICAgcHVucGNraHdkIHhtbTAseG1tMyAgICAgICAgICAgICA7IHhtbTA9KDQ2IDQ3IDU2IDU3IDY2IDY3IDc2IDc3KQogCi0JbW92ZHFhICAgIHhtbTIseG1tNQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCi0JcHVucGNrbGRxIHhtbTUseG1tNgkJOyB4bW01PSgwNCAwNSAwNiAwNyAxNCAxNSAxNiAxNykKLQlwdW5wY2toZHEgeG1tMix4bW02CQk7IHhtbTI9KDI0IDI1IDI2IDI3IDM0IDM1IDM2IDM3KQotCW1vdmRxYSAgICB4bW0zLHhtbTcJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQotCXB1bnBja2xkcSB4bW03LHhtbTAJCTsgeG1tNz0oNDQgNDUgNDYgNDcgNTQgNTUgNTYgNTcpCi0JcHVucGNraGRxIHhtbTMseG1tMAkJOyB4bW0zPSg2NCA2NSA2NiA2NyA3NCA3NSA3NiA3NykKKyAgICAgICAgbW92ZHFhICAgIHhtbTIseG1tNSAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICAgICAgcHVucGNrbGRxIHhtbTUseG1tNiAgICAgICAgICAgICA7IHhtbTU9KDA0IDA1IDA2IDA3IDE0IDE1IDE2IDE3KQorICAgICAgICBwdW5wY2toZHEgeG1tMix4bW02ICAgICAgICAgICAgIDsgeG1tMj0oMjQgMjUgMjYgMjcgMzQgMzUgMzYgMzcpCisgICAgICAgIG1vdmRxYSAgICB4bW0zLHhtbTcgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgICAgIHB1bnBja2xkcSB4bW03LHhtbTAgICAgICAgICAgICAgOyB4bW03PSg0NCA0NSA0NiA0NyA1NCA1NSA1NiA1NykKKyAgICAgICAgcHVucGNraGRxIHhtbTMseG1tMCAgICAgICAgICAgICA7IHhtbTM9KDY0IDY1IDY2IDY3IDc0IDc1IDc2IDc3KQogCi0JbW92ZHFhCXhtbTYsIFhNTVdPUkQgW3drKDApXQk7IHhtbTY9KDAyIDAzIDEyIDEzIDIyIDIzIDMyIDMzKQotCW1vdmRxYQl4bW0wLCBYTU1XT1JEIFt3aygxKV0JOyB4bW0wPSg0MiA0MyA1MiA1MyA2MiA2MyA3MiA3MykKLQltb3ZkcWEJWE1NV09SRCBbd2soMCldLCB4bW0yCTsgd2soMCk9KDI0IDI1IDI2IDI3IDM0IDM1IDM2IDM3KQotCW1vdmRxYQlYTU1XT1JEIFt3aygxKV0sIHhtbTcJOyB3aygxKT0oNDQgNDUgNDYgNDcgNTQgNTUgNTYgNTcpCisgICAgICAgIG1vdmRxYSAgeG1tNiwgWE1NV09SRCBbd2soMCldICAgOyB4bW02PSgwMiAwMyAxMiAxMyAyMiAyMyAzMiAzMykKKyAgICAgICAgbW92ZHFhICB4bW0wLCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTA9KDQyIDQzIDUyIDUzIDYyIDYzIDcyIDczKQorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDApXSwgeG1tMiAgIDsgd2soMCk9KDI0IDI1IDI2IDI3IDM0IDM1IDM2IDM3KQorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDEpXSwgeG1tNyAgIDsgd2soMSk9KDQ0IDQ1IDQ2IDQ3IDU0IDU1IDU2IDU3KQogCi0JbW92ZHFhICAgIHhtbTIseG1tMQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCi0JcHVucGNrbGRxIHhtbTEseG1tNgkJOyB4bW0xPSgwMCAwMSAwMiAwMyAxMCAxMSAxMiAxMykKLQlwdW5wY2toZHEgeG1tMix4bW02CQk7IHhtbTI9KDIwIDIxIDIyIDIzIDMwIDMxIDMyIDMzKQotCW1vdmRxYSAgICB4bW03LHhtbTQJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQotCXB1bnBja2xkcSB4bW00LHhtbTAJCTsgeG1tND0oNDAgNDEgNDIgNDMgNTAgNTEgNTIgNTMpCi0JcHVucGNraGRxIHhtbTcseG1tMAkJOyB4bW03PSg2MCA2MSA2MiA2MyA3MCA3MSA3MiA3MykKKyAgICAgICAgbW92ZHFhICAgIHhtbTIseG1tMSAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICAgICAgcHVucGNrbGRxIHhtbTEseG1tNiAgICAgICAgICAgICA7IHhtbTE9KDAwIDAxIDAyIDAzIDEwIDExIDEyIDEzKQorICAgICAgICBwdW5wY2toZHEgeG1tMix4bW02ICAgICAgICAgICAgIDsgeG1tMj0oMjAgMjEgMjIgMjMgMzAgMzEgMzIgMzMpCisgICAgICAgIG1vdmRxYSAgICB4bW03LHhtbTQgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgICAgIHB1bnBja2xkcSB4bW00LHhtbTAgICAgICAgICAgICAgOyB4bW00PSg0MCA0MSA0MiA0MyA1MCA1MSA1MiA1MykKKyAgICAgICAgcHVucGNraGRxIHhtbTcseG1tMCAgICAgICAgICAgICA7IHhtbTc9KDYwIDYxIDYyIDYzIDcwIDcxIDcyIDczKQogCi0JbW92ZHFhICAgICB4bW02LHhtbTEJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQotCXB1bnBja2xxZHEgeG1tMSx4bW01CQk7IHhtbTE9KDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3KT1kYXRhMAotCXB1bnBja2hxZHEgeG1tNix4bW01CQk7IHhtbTY9KDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3KT1kYXRhMQotCW1vdmRxYSAgICAgeG1tMCx4bW03CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKLQlwdW5wY2tscWRxIHhtbTcseG1tMwkJOyB4bW03PSg2MCA2MSA2MiA2MyA2NCA2NSA2NiA2Nyk9ZGF0YTYKLQlwdW5wY2tocWRxIHhtbTAseG1tMwkJOyB4bW0wPSg3MCA3MSA3MiA3MyA3NCA3NSA3NiA3Nyk9ZGF0YTcKKyAgICAgICAgbW92ZHFhICAgICB4bW02LHhtbTEgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKyAgICAgICAgcHVucGNrbHFkcSB4bW0xLHhtbTUgICAgICAgICAgICA7IHhtbTE9KDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3KT1kYXRhMAorICAgICAgICBwdW5wY2tocWRxIHhtbTYseG1tNSAgICAgICAgICAgIDsgeG1tNj0oMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcpPWRhdGExCisgICAgICAgIG1vdmRxYSAgICAgeG1tMCx4bW03ICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisgICAgICAgIHB1bnBja2xxZHEgeG1tNyx4bW0zICAgICAgICAgICAgOyB4bW03PSg2MCA2MSA2MiA2MyA2NCA2NSA2NiA2Nyk9ZGF0YTYKKyAgICAgICAgcHVucGNraHFkcSB4bW0wLHhtbTMgICAgICAgICAgICA7IHhtbTA9KDcwIDcxIDcyIDczIDc0IDc1IDc2IDc3KT1kYXRhNwogCi0JbW92ZHFhCXhtbTUseG1tNgotCW1vdmRxYQl4bW0zLHhtbTEKLQlwc3Vidwl4bW02LHhtbTcJCTsgeG1tNj1kYXRhMS1kYXRhNj10bXA2Ci0JcHN1YncJeG1tMSx4bW0wCQk7IHhtbTE9ZGF0YTAtZGF0YTc9dG1wNwotCXBhZGR3CXhtbTUseG1tNwkJOyB4bW01PWRhdGExK2RhdGE2PXRtcDEKLQlwYWRkdwl4bW0zLHhtbTAJCTsgeG1tMz1kYXRhMCtkYXRhNz10bXAwCisgICAgICAgIG1vdmRxYSAgeG1tNSx4bW02CisgICAgICAgIG1vdmRxYSAgeG1tMyx4bW0xCisgICAgICAgIHBzdWJ3ICAgeG1tNix4bW03ICAgICAgICAgICAgICAgOyB4bW02PWRhdGExLWRhdGE2PXRtcDYKKyAgICAgICAgcHN1YncgICB4bW0xLHhtbTAgICAgICAgICAgICAgICA7IHhtbTE9ZGF0YTAtZGF0YTc9dG1wNworICAgICAgICBwYWRkdyAgIHhtbTUseG1tNyAgICAgICAgICAgICAgIDsgeG1tNT1kYXRhMStkYXRhNj10bXAxCisgICAgICAgIHBhZGR3ICAgeG1tMyx4bW0wICAgICAgICAgICAgICAgOyB4bW0zPWRhdGEwK2RhdGE3PXRtcDAKIAotCW1vdmRxYQl4bW03LCBYTU1XT1JEIFt3aygwKV0JOyB4bW03PSgyNCAyNSAyNiAyNyAzNCAzNSAzNiAzNykKLQltb3ZkcWEJeG1tMCwgWE1NV09SRCBbd2soMSldCTsgeG1tMD0oNDQgNDUgNDYgNDcgNTQgNTUgNTYgNTcpCi0JbW92ZHFhCVhNTVdPUkQgW3drKDApXSwgeG1tNgk7IHdrKDApPXRtcDYKLQltb3ZkcWEJWE1NV09SRCBbd2soMSldLCB4bW0xCTsgd2soMSk9dG1wNworICAgICAgICBtb3ZkcWEgIHhtbTcsIFhNTVdPUkQgW3drKDApXSAgIDsgeG1tNz0oMjQgMjUgMjYgMjcgMzQgMzUgMzYgMzcpCisgICAgICAgIG1vdmRxYSAgeG1tMCwgWE1NV09SRCBbd2soMSldICAgOyB4bW0wPSg0NCA0NSA0NiA0NyA1NCA1NSA1NiA1NykKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygwKV0sIHhtbTYgICA7IHdrKDApPXRtcDYKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygxKV0sIHhtbTEgICA7IHdrKDEpPXRtcDcKIAotCW1vdmRxYSAgICAgeG1tNix4bW0yCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKLQlwdW5wY2tscWRxIHhtbTIseG1tNwkJOyB4bW0yPSgyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNyk9ZGF0YTIKLQlwdW5wY2tocWRxIHhtbTYseG1tNwkJOyB4bW02PSgzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNyk9ZGF0YTMKLQltb3ZkcWEgICAgIHhtbTEseG1tNAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCi0JcHVucGNrbHFkcSB4bW00LHhtbTAJCTsgeG1tND0oNDAgNDEgNDIgNDMgNDQgNDUgNDYgNDcpPWRhdGE0Ci0JcHVucGNraHFkcSB4bW0xLHhtbTAJCTsgeG1tMT0oNTAgNTEgNTIgNTMgNTQgNTUgNTYgNTcpPWRhdGE1CisgICAgICAgIG1vdmRxYSAgICAgeG1tNix4bW0yICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisgICAgICAgIHB1bnBja2xxZHEgeG1tMix4bW03ICAgICAgICAgICAgOyB4bW0yPSgyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNyk9ZGF0YTIKKyAgICAgICAgcHVucGNraHFkcSB4bW02LHhtbTcgICAgICAgICAgICA7IHhtbTY9KDMwIDMxIDMyIDMzIDM0IDM1IDM2IDM3KT1kYXRhMworICAgICAgICBtb3ZkcWEgICAgIHhtbTEseG1tNCAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorICAgICAgICBwdW5wY2tscWRxIHhtbTQseG1tMCAgICAgICAgICAgIDsgeG1tND0oNDAgNDEgNDIgNDMgNDQgNDUgNDYgNDcpPWRhdGE0CisgICAgICAgIHB1bnBja2hxZHEgeG1tMSx4bW0wICAgICAgICAgICAgOyB4bW0xPSg1MCA1MSA1MiA1MyA1NCA1NSA1NiA1Nyk9ZGF0YTUKIAotCW1vdmRxYQl4bW03LHhtbTYKLQltb3ZkcWEJeG1tMCx4bW0yCi0JcGFkZHcJeG1tNix4bW00CQk7IHhtbTY9ZGF0YTMrZGF0YTQ9dG1wMwotCXBhZGR3CXhtbTIseG1tMQkJOyB4bW0yPWRhdGEyK2RhdGE1PXRtcDIKLQlwc3Vidwl4bW03LHhtbTQJCTsgeG1tNz1kYXRhMy1kYXRhND10bXA0Ci0JcHN1YncJeG1tMCx4bW0xCQk7IHhtbTA9ZGF0YTItZGF0YTU9dG1wNQorICAgICAgICBtb3ZkcWEgIHhtbTcseG1tNgorICAgICAgICBtb3ZkcWEgIHhtbTAseG1tMgorICAgICAgICBwYWRkdyAgIHhtbTYseG1tNCAgICAgICAgICAgICAgIDsgeG1tNj1kYXRhMytkYXRhND10bXAzCisgICAgICAgIHBhZGR3ICAgeG1tMix4bW0xICAgICAgICAgICAgICAgOyB4bW0yPWRhdGEyK2RhdGE1PXRtcDIKKyAgICAgICAgcHN1YncgICB4bW03LHhtbTQgICAgICAgICAgICAgICA7IHhtbTc9ZGF0YTMtZGF0YTQ9dG1wNAorICAgICAgICBwc3VidyAgIHhtbTAseG1tMSAgICAgICAgICAgICAgIDsgeG1tMD1kYXRhMi1kYXRhNT10bXA1CiAKLQk7IC0tIEV2ZW4gcGFydAorICAgICAgICA7IC0tIEV2ZW4gcGFydAogCi0JbW92ZHFhCXhtbTQseG1tMwotCW1vdmRxYQl4bW0xLHhtbTUKLQlwc3Vidwl4bW0zLHhtbTYJCTsgeG1tMz10bXAxMwotCXBzdWJ3CXhtbTUseG1tMgkJOyB4bW01PXRtcDEyCi0JcGFkZHcJeG1tNCx4bW02CQk7IHhtbTQ9dG1wMTAKLQlwYWRkdwl4bW0xLHhtbTIJCTsgeG1tMT10bXAxMQorICAgICAgICBtb3ZkcWEgIHhtbTQseG1tMworICAgICAgICBtb3ZkcWEgIHhtbTEseG1tNQorICAgICAgICBwc3VidyAgIHhtbTMseG1tNiAgICAgICAgICAgICAgIDsgeG1tMz10bXAxMworICAgICAgICBwc3VidyAgIHhtbTUseG1tMiAgICAgICAgICAgICAgIDsgeG1tNT10bXAxMgorICAgICAgICBwYWRkdyAgIHhtbTQseG1tNiAgICAgICAgICAgICAgIDsgeG1tND10bXAxMAorICAgICAgICBwYWRkdyAgIHhtbTEseG1tMiAgICAgICAgICAgICAgIDsgeG1tMT10bXAxMQogCi0JcGFkZHcJeG1tNSx4bW0zCi0JcHNsbHcJeG1tNSxQUkVfTVVMVElQTFlfU0NBTEVfQklUUwotCXBtdWxodwl4bW01LFtHT1RPRkYoZWJ4LFBXX0YwNzA3KV0gOyB4bW01PXoxCisgICAgICAgIHBhZGR3ICAgeG1tNSx4bW0zCisgICAgICAgIHBzbGx3ICAgeG1tNSxQUkVfTVVMVElQTFlfU0NBTEVfQklUUworICAgICAgICBwbXVsaHcgIHhtbTUsW0dPVE9GRihlYngsUFdfRjA3MDcpXSA7IHhtbTU9ejEKIAotCW1vdmRxYQl4bW02LHhtbTQKLQltb3ZkcWEJeG1tMix4bW0zCi0JcHN1YncJeG1tNCx4bW0xCQk7IHhtbTQ9ZGF0YTQKLQlwc3Vidwl4bW0zLHhtbTUJCTsgeG1tMz1kYXRhNgotCXBhZGR3CXhtbTYseG1tMQkJOyB4bW02PWRhdGEwCi0JcGFkZHcJeG1tMix4bW01CQk7IHhtbTI9ZGF0YTIKKyAgICAgICAgbW92ZHFhICB4bW02LHhtbTQKKyAgICAgICAgbW92ZHFhICB4bW0yLHhtbTMKKyAgICAgICAgcHN1YncgICB4bW00LHhtbTEgICAgICAgICAgICAgICA7IHhtbTQ9ZGF0YTQKKyAgICAgICAgcHN1YncgICB4bW0zLHhtbTUgICAgICAgICAgICAgICA7IHhtbTM9ZGF0YTYKKyAgICAgICAgcGFkZHcgICB4bW02LHhtbTEgICAgICAgICAgICAgICA7IHhtbTY9ZGF0YTAKKyAgICAgICAgcGFkZHcgICB4bW0yLHhtbTUgICAgICAgICAgICAgICA7IHhtbTI9ZGF0YTIKIAotCW1vdmRxYQlYTU1XT1JEIFtYTU1CTE9DSyg0LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTQKLQltb3ZkcWEJWE1NV09SRCBbWE1NQkxPQ0soNiwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCB4bW0zCi0JbW92ZHFhCVhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgeG1tNgotCW1vdmRxYQlYTU1XT1JEIFtYTU1CTE9DSygyLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTIKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFtYTU1CTE9DSyg0LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTQKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFtYTU1CTE9DSyg2LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTMKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTYKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFtYTU1CTE9DSygyLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTIKIAotCTsgLS0gT2RkIHBhcnQKKyAgICAgICAgOyAtLSBPZGQgcGFydAogCi0JbW92ZHFhCXhtbTEsIFhNTVdPUkQgW3drKDApXQk7IHhtbTE9dG1wNgotCW1vdmRxYQl4bW01LCBYTU1XT1JEIFt3aygxKV0JOyB4bW01PXRtcDcKKyAgICAgICAgbW92ZHFhICB4bW0xLCBYTU1XT1JEIFt3aygwKV0gICA7IHhtbTE9dG1wNgorICAgICAgICBtb3ZkcWEgIHhtbTUsIFhNTVdPUkQgW3drKDEpXSAgIDsgeG1tNT10bXA3CiAKLQlwYWRkdwl4bW03LHhtbTAJCTsgeG1tNz10bXAxMAotCXBhZGR3CXhtbTAseG1tMQkJOyB4bW0wPXRtcDExCi0JcGFkZHcJeG1tMSx4bW01CQk7IHhtbTE9dG1wMTIsIHhtbTU9dG1wNworICAgICAgICBwYWRkdyAgIHhtbTcseG1tMCAgICAgICAgICAgICAgIDsgeG1tNz10bXAxMAorICAgICAgICBwYWRkdyAgIHhtbTAseG1tMSAgICAgICAgICAgICAgIDsgeG1tMD10bXAxMQorICAgICAgICBwYWRkdyAgIHhtbTEseG1tNSAgICAgICAgICAgICAgIDsgeG1tMT10bXAxMiwgeG1tNT10bXA3CiAKLQlwc2xsdwl4bW03LFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCi0JcHNsbHcJeG1tMSxQUkVfTVVMVElQTFlfU0NBTEVfQklUUworICAgICAgICBwc2xsdyAgIHhtbTcsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKyAgICAgICAgcHNsbHcgICB4bW0xLFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCiAKLQlwc2xsdwl4bW0wLFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCi0JcG11bGh3CXhtbTAsW0dPVE9GRihlYngsUFdfRjA3MDcpXSA7IHhtbTA9ejMKKyAgICAgICAgcHNsbHcgICB4bW0wLFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisgICAgICAgIHBtdWxodyAgeG1tMCxbR09UT0ZGKGVieCxQV19GMDcwNyldIDsgeG1tMD16MwogCi0JbW92ZHFhCXhtbTQseG1tNwkJOyB4bW00PXRtcDEwCi0JcHN1YncJeG1tNyx4bW0xCi0JcG11bGh3CXhtbTcsW0dPVE9GRihlYngsUFdfRjAzODIpXSA7IHhtbTc9ejUKLQlwbXVsaHcJeG1tNCxbR09UT0ZGKGVieCxQV19GMDU0MSldIDsgeG1tND1NVUxUSVBMWSh0bXAxMCxGSVhfMF81NDExOTYpCi0JcG11bGh3CXhtbTEsW0dPVE9GRihlYngsUFdfRjEzMDYpXSA7IHhtbTE9TVVMVElQTFkodG1wMTIsRklYXzFfMzA2NTYyKQotCXBhZGR3CXhtbTQseG1tNwkJOyB4bW00PXoyCi0JcGFkZHcJeG1tMSx4bW03CQk7IHhtbTE9ejQKKyAgICAgICAgbW92ZHFhICB4bW00LHhtbTcgICAgICAgICAgICAgICA7IHhtbTQ9dG1wMTAKKyAgICAgICAgcHN1YncgICB4bW03LHhtbTEKKyAgICAgICAgcG11bGh3ICB4bW03LFtHT1RPRkYoZWJ4LFBXX0YwMzgyKV0gOyB4bW03PXo1CisgICAgICAgIHBtdWxodyAgeG1tNCxbR09UT0ZGKGVieCxQV19GMDU0MSldIDsgeG1tND1NVUxUSVBMWSh0bXAxMCxGSVhfMF81NDExOTYpCisgICAgICAgIHBtdWxodyAgeG1tMSxbR09UT0ZGKGVieCxQV19GMTMwNildIDsgeG1tMT1NVUxUSVBMWSh0bXAxMixGSVhfMV8zMDY1NjIpCisgICAgICAgIHBhZGR3ICAgeG1tNCx4bW03ICAgICAgICAgICAgICAgOyB4bW00PXoyCisgICAgICAgIHBhZGR3ICAgeG1tMSx4bW03ICAgICAgICAgICAgICAgOyB4bW0xPXo0CiAKLQltb3ZkcWEJeG1tMyx4bW01Ci0JcHN1YncJeG1tNSx4bW0wCQk7IHhtbTU9ejEzCi0JcGFkZHcJeG1tMyx4bW0wCQk7IHhtbTM9ejExCisgICAgICAgIG1vdmRxYSAgeG1tMyx4bW01CisgICAgICAgIHBzdWJ3ICAgeG1tNSx4bW0wICAgICAgICAgICAgICAgOyB4bW01PXoxMworICAgICAgICBwYWRkdyAgIHhtbTMseG1tMCAgICAgICAgICAgICAgIDsgeG1tMz16MTEKIAotCW1vdmRxYQl4bW02LHhtbTUKLQltb3ZkcWEJeG1tMix4bW0zCi0JcHN1YncJeG1tNSx4bW00CQk7IHhtbTU9ZGF0YTMKLQlwc3Vidwl4bW0zLHhtbTEJCTsgeG1tMz1kYXRhNwotCXBhZGR3CXhtbTYseG1tNAkJOyB4bW02PWRhdGE1Ci0JcGFkZHcJeG1tMix4bW0xCQk7IHhtbTI9ZGF0YTEKKyAgICAgICAgbW92ZHFhICB4bW02LHhtbTUKKyAgICAgICAgbW92ZHFhICB4bW0yLHhtbTMKKyAgICAgICAgcHN1YncgICB4bW01LHhtbTQgICAgICAgICAgICAgICA7IHhtbTU9ZGF0YTMKKyAgICAgICAgcHN1YncgICB4bW0zLHhtbTEgICAgICAgICAgICAgICA7IHhtbTM9ZGF0YTcKKyAgICAgICAgcGFkZHcgICB4bW02LHhtbTQgICAgICAgICAgICAgICA7IHhtbTY9ZGF0YTUKKyAgICAgICAgcGFkZHcgICB4bW0yLHhtbTEgICAgICAgICAgICAgICA7IHhtbTI9ZGF0YTEKIAotCW1vdmRxYQlYTU1XT1JEIFtYTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTUKLQltb3ZkcWEJWE1NV09SRCBbWE1NQkxPQ0soNywwLGVkeCxTSVpFT0ZfRENURUxFTSldLCB4bW0zCi0JbW92ZHFhCVhNTVdPUkQgW1hNTUJMT0NLKDUsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgeG1tNgotCW1vdmRxYQlYTU1XT1JEIFtYTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTIKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFtYTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTUKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFtYTU1CTE9DSyg3LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTMKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFtYTU1CTE9DSyg1LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTYKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFtYTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTIKIAotOwlwb3AJZWRpCQk7IHVudXNlZAotOwlwb3AJZXNpCQk7IHVudXNlZAotOwlwb3AJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotOwlwb3AJZWN4CQk7IHVudXNlZAotCXBvcHBpYwllYngKLQltb3YJZXNwLGVicAkJOyBlc3AgPC0gYWxpZ25lZCBlYnAKLQlwb3AJZXNwCQk7IGVzcCA8LSBvcmlnaW5hbCBlYnAKLQlwb3AJZWJwCi0JcmV0Cis7ICAgICAgIHBvcCAgICAgZWRpICAgICAgICAgICAgIDsgdW51c2VkCis7ICAgICAgIHBvcCAgICAgZXNpICAgICAgICAgICAgIDsgdW51c2VkCis7ICAgICAgIHBvcCAgICAgZWR4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgICAgIHBvcCAgICAgZWN4ICAgICAgICAgICAgIDsgdW51c2VkCisgICAgICAgIHBvcHBpYyAgZWJ4CisgICAgICAgIG1vdiAgICAgZXNwLGVicCAgICAgICAgIDsgZXNwIDwtIGFsaWduZWQgZWJwCisgICAgICAgIHBvcCAgICAgZXNwICAgICAgICAgICAgIDsgZXNwIDwtIG9yaWdpbmFsIGVicAorICAgICAgICBwb3AgICAgIGVicAorICAgICAgICByZXQKIAogOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKIDsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KLQlhbGlnbgkxNgorICAgICAgICBhbGlnbiAgIDE2CmRpZmYgLS1naXQgYS9zaW1kL2pmc3MyaW50LTY0LmFzbSBiL3NpbWQvamZzczJpbnQtNjQuYXNtCmluZGV4IGJkMWJkNDUuLmY1ZWMzNDYgMTAwNjQ0Ci0tLSBhL3NpbWQvamZzczJpbnQtNjQuYXNtCisrKyBiL3NpbWQvamZzczJpbnQtNjQuYXNtCkBAIC0yNyw2NyArMjcsNjcgQEAKIAogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0lZGVmaW5lIENPTlNUX0JJVFMJMTMKLSVkZWZpbmUgUEFTUzFfQklUUwkyCislZGVmaW5lIENPTlNUX0JJVFMgICAgICAxMworJWRlZmluZSBQQVNTMV9CSVRTICAgICAgMgogCi0lZGVmaW5lIERFU0NBTEVfUDEJKENPTlNUX0JJVFMtUEFTUzFfQklUUykKLSVkZWZpbmUgREVTQ0FMRV9QMgkoQ09OU1RfQklUUytQQVNTMV9CSVRTKQorJWRlZmluZSBERVNDQUxFX1AxICAgICAgKENPTlNUX0JJVFMtUEFTUzFfQklUUykKKyVkZWZpbmUgREVTQ0FMRV9QMiAgICAgIChDT05TVF9CSVRTK1BBU1MxX0JJVFMpCiAKICVpZiBDT05TVF9CSVRTID09IDEzCi1GXzBfMjk4CWVxdQkgMjQ0NgkJOyBGSVgoMC4yOTg2MzEzMzYpCi1GXzBfMzkwCWVxdQkgMzE5NgkJOyBGSVgoMC4zOTAxODA2NDQpCi1GXzBfNTQxCWVxdQkgNDQzMwkJOyBGSVgoMC41NDExOTYxMDApCi1GXzBfNzY1CWVxdQkgNjI3MAkJOyBGSVgoMC43NjUzNjY4NjUpCi1GXzBfODk5CWVxdQkgNzM3MwkJOyBGSVgoMC44OTk5NzYyMjMpCi1GXzFfMTc1CWVxdQkgOTYzMwkJOyBGSVgoMS4xNzU4NzU2MDIpCi1GXzFfNTAxCWVxdQkxMjI5OQkJOyBGSVgoMS41MDEzMjExMTApCi1GXzFfODQ3CWVxdQkxNTEzNwkJOyBGSVgoMS44NDc3NTkwNjUpCi1GXzFfOTYxCWVxdQkxNjA2OQkJOyBGSVgoMS45NjE1NzA1NjApCi1GXzJfMDUzCWVxdQkxNjgxOQkJOyBGSVgoMi4wNTMxMTk4NjkpCi1GXzJfNTYyCWVxdQkyMDk5NQkJOyBGSVgoMi41NjI5MTU0NDcpCi1GXzNfMDcyCWVxdQkyNTE3MgkJOyBGSVgoMy4wNzI3MTEwMjYpCitGXzBfMjk4IGVxdSAgICAgIDI0NDYgICAgICAgICAgIDsgRklYKDAuMjk4NjMxMzM2KQorRl8wXzM5MCBlcXUgICAgICAzMTk2ICAgICAgICAgICA7IEZJWCgwLjM5MDE4MDY0NCkKK0ZfMF81NDEgZXF1ICAgICAgNDQzMyAgICAgICAgICAgOyBGSVgoMC41NDExOTYxMDApCitGXzBfNzY1IGVxdSAgICAgIDYyNzAgICAgICAgICAgIDsgRklYKDAuNzY1MzY2ODY1KQorRl8wXzg5OSBlcXUgICAgICA3MzczICAgICAgICAgICA7IEZJWCgwLjg5OTk3NjIyMykKK0ZfMV8xNzUgZXF1ICAgICAgOTYzMyAgICAgICAgICAgOyBGSVgoMS4xNzU4NzU2MDIpCitGXzFfNTAxIGVxdSAgICAgMTIyOTkgICAgICAgICAgIDsgRklYKDEuNTAxMzIxMTEwKQorRl8xXzg0NyBlcXUgICAgIDE1MTM3ICAgICAgICAgICA7IEZJWCgxLjg0Nzc1OTA2NSkKK0ZfMV85NjEgZXF1ICAgICAxNjA2OSAgICAgICAgICAgOyBGSVgoMS45NjE1NzA1NjApCitGXzJfMDUzIGVxdSAgICAgMTY4MTkgICAgICAgICAgIDsgRklYKDIuMDUzMTE5ODY5KQorRl8yXzU2MiBlcXUgICAgIDIwOTk1ICAgICAgICAgICA7IEZJWCgyLjU2MjkxNTQ0NykKK0ZfM18wNzIgZXF1ICAgICAyNTE3MiAgICAgICAgICAgOyBGSVgoMy4wNzI3MTEwMjYpCiAlZWxzZQogOyBOQVNNIGNhbm5vdCBkbyBjb21waWxlLXRpbWUgYXJpdGhtZXRpYyBvbiBmbG9hdGluZy1wb2ludCBjb25zdGFudHMuCiAlZGVmaW5lIERFU0NBTEUoeCxuKSAgKCgoeCkrKDE8PCgobiktMSkpKT4+KG4pKQotRl8wXzI5OAllcXUJREVTQ0FMRSggMzIwNjUyOTU1LDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuMjk4NjMxMzM2KQotRl8wXzM5MAllcXUJREVTQ0FMRSggNDE4OTUzMjc2LDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuMzkwMTgwNjQ0KQotRl8wXzU0MQllcXUJREVTQ0FMRSggNTgxMTA0ODg3LDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuNTQxMTk2MTAwKQotRl8wXzc2NQllcXUJREVTQ0FMRSggODIxODA2NDEzLDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuNzY1MzY2ODY1KQotRl8wXzg5OQllcXUJREVTQ0FMRSggOTY2MzQyMTExLDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuODk5OTc2MjIzKQotRl8xXzE3NQllcXUJREVTQ0FMRSgxMjYyNTg2ODEzLDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuMTc1ODc1NjAyKQotRl8xXzUwMQllcXUJREVTQ0FMRSgxNjEyMDMxMjY3LDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuNTAxMzIxMTEwKQotRl8xXzg0NwllcXUJREVTQ0FMRSgxOTg0MDE2MTg4LDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuODQ3NzU5MDY1KQotRl8xXzk2MQllcXUJREVTQ0FMRSgyMTA2MjIwMzUwLDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuOTYxNTcwNTYwKQotRl8yXzA1MwllcXUJREVTQ0FMRSgyMjA0NTIwNjczLDMwLUNPTlNUX0JJVFMpCTsgRklYKDIuMDUzMTE5ODY5KQotRl8yXzU2MgllcXUJREVTQ0FMRSgyNzUxOTA5NTA2LDMwLUNPTlNUX0JJVFMpCTsgRklYKDIuNTYyOTE1NDQ3KQotRl8zXzA3MgllcXUJREVTQ0FMRSgzMjk5Mjk4MzQxLDMwLUNPTlNUX0JJVFMpCTsgRklYKDMuMDcyNzExMDI2KQorRl8wXzI5OCBlcXUgICAgIERFU0NBTEUoIDMyMDY1Mjk1NSwzMC1DT05TVF9CSVRTKSAgICAgICA7IEZJWCgwLjI5ODYzMTMzNikKK0ZfMF8zOTAgZXF1ICAgICBERVNDQUxFKCA0MTg5NTMyNzYsMzAtQ09OU1RfQklUUykgICAgICAgOyBGSVgoMC4zOTAxODA2NDQpCitGXzBfNTQxIGVxdSAgICAgREVTQ0FMRSggNTgxMTA0ODg3LDMwLUNPTlNUX0JJVFMpICAgICAgIDsgRklYKDAuNTQxMTk2MTAwKQorRl8wXzc2NSBlcXUgICAgIERFU0NBTEUoIDgyMTgwNjQxMywzMC1DT05TVF9CSVRTKSAgICAgICA7IEZJWCgwLjc2NTM2Njg2NSkKK0ZfMF84OTkgZXF1ICAgICBERVNDQUxFKCA5NjYzNDIxMTEsMzAtQ09OU1RfQklUUykgICAgICAgOyBGSVgoMC44OTk5NzYyMjMpCitGXzFfMTc1IGVxdSAgICAgREVTQ0FMRSgxMjYyNTg2ODEzLDMwLUNPTlNUX0JJVFMpICAgICAgIDsgRklYKDEuMTc1ODc1NjAyKQorRl8xXzUwMSBlcXUgICAgIERFU0NBTEUoMTYxMjAzMTI2NywzMC1DT05TVF9CSVRTKSAgICAgICA7IEZJWCgxLjUwMTMyMTExMCkKK0ZfMV84NDcgZXF1ICAgICBERVNDQUxFKDE5ODQwMTYxODgsMzAtQ09OU1RfQklUUykgICAgICAgOyBGSVgoMS44NDc3NTkwNjUpCitGXzFfOTYxIGVxdSAgICAgREVTQ0FMRSgyMTA2MjIwMzUwLDMwLUNPTlNUX0JJVFMpICAgICAgIDsgRklYKDEuOTYxNTcwNTYwKQorRl8yXzA1MyBlcXUgICAgIERFU0NBTEUoMjIwNDUyMDY3MywzMC1DT05TVF9CSVRTKSAgICAgICA7IEZJWCgyLjA1MzExOTg2OSkKK0ZfMl81NjIgZXF1ICAgICBERVNDQUxFKDI3NTE5MDk1MDYsMzAtQ09OU1RfQklUUykgICAgICAgOyBGSVgoMi41NjI5MTU0NDcpCitGXzNfMDcyIGVxdSAgICAgREVTQ0FMRSgzMjk5Mjk4MzQxLDMwLUNPTlNUX0JJVFMpICAgICAgIDsgRklYKDMuMDcyNzExMDI2KQogJWVuZGlmCiAKIDsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlTRUNUSU9OCVNFR19DT05TVAorICAgICAgICBTRUNUSU9OIFNFR19DT05TVAogCi0JYWxpZ256CTE2Ci0JZ2xvYmFsCUVYVE4oamNvbnN0X2ZkY3RfaXNsb3dfc3NlMikKKyAgICAgICAgYWxpZ256ICAxNgorICAgICAgICBnbG9iYWwgIEVYVE4oamNvbnN0X2ZkY3RfaXNsb3dfc3NlMikKIAogRVhUTihqY29uc3RfZmRjdF9pc2xvd19zc2UyKToKIAotUFdfRjEzMF9GMDU0CXRpbWVzIDQgZHcgIChGXzBfNTQxK0ZfMF83NjUpLCBGXzBfNTQxCi1QV19GMDU0X01GMTMwCXRpbWVzIDQgZHcgIEZfMF81NDEsIChGXzBfNTQxLUZfMV84NDcpCi1QV19NRjA3OF9GMTE3CXRpbWVzIDQgZHcgIChGXzFfMTc1LUZfMV85NjEpLCBGXzFfMTc1Ci1QV19GMTE3X0YwNzgJdGltZXMgNCBkdyAgRl8xXzE3NSwgKEZfMV8xNzUtRl8wXzM5MCkKLVBXX01GMDYwX01GMDg5CXRpbWVzIDQgZHcgIChGXzBfMjk4LUZfMF84OTkpLC1GXzBfODk5Ci1QV19NRjA4OV9GMDYwCXRpbWVzIDQgZHcgLUZfMF84OTksIChGXzFfNTAxLUZfMF84OTkpCi1QV19NRjA1MF9NRjI1Ngl0aW1lcyA0IGR3ICAoRl8yXzA1My1GXzJfNTYyKSwtRl8yXzU2MgotUFdfTUYyNTZfRjA1MAl0aW1lcyA0IGR3IC1GXzJfNTYyLCAoRl8zXzA3Mi1GXzJfNTYyKQotUERfREVTQ0FMRV9QMQl0aW1lcyA0IGRkICAxIDw8IChERVNDQUxFX1AxLTEpCi1QRF9ERVNDQUxFX1AyCXRpbWVzIDQgZGQgIDEgPDwgKERFU0NBTEVfUDItMSkKLVBXX0RFU0NBTEVfUDJYCXRpbWVzIDggZHcgIDEgPDwgKFBBU1MxX0JJVFMtMSkKK1BXX0YxMzBfRjA1NCAgICB0aW1lcyA0IGR3ICAoRl8wXzU0MStGXzBfNzY1KSwgRl8wXzU0MQorUFdfRjA1NF9NRjEzMCAgIHRpbWVzIDQgZHcgIEZfMF81NDEsIChGXzBfNTQxLUZfMV84NDcpCitQV19NRjA3OF9GMTE3ICAgdGltZXMgNCBkdyAgKEZfMV8xNzUtRl8xXzk2MSksIEZfMV8xNzUKK1BXX0YxMTdfRjA3OCAgICB0aW1lcyA0IGR3ICBGXzFfMTc1LCAoRl8xXzE3NS1GXzBfMzkwKQorUFdfTUYwNjBfTUYwODkgIHRpbWVzIDQgZHcgIChGXzBfMjk4LUZfMF84OTkpLC1GXzBfODk5CitQV19NRjA4OV9GMDYwICAgdGltZXMgNCBkdyAtRl8wXzg5OSwgKEZfMV81MDEtRl8wXzg5OSkKK1BXX01GMDUwX01GMjU2ICB0aW1lcyA0IGR3ICAoRl8yXzA1My1GXzJfNTYyKSwtRl8yXzU2MgorUFdfTUYyNTZfRjA1MCAgIHRpbWVzIDQgZHcgLUZfMl81NjIsIChGXzNfMDcyLUZfMl81NjIpCitQRF9ERVNDQUxFX1AxICAgdGltZXMgNCBkZCAgMSA8PCAoREVTQ0FMRV9QMS0xKQorUERfREVTQ0FMRV9QMiAgIHRpbWVzIDQgZGQgIDEgPDwgKERFU0NBTEVfUDItMSkKK1BXX0RFU0NBTEVfUDJYICB0aW1lcyA4IGR3ICAxIDw8IChQQVNTMV9CSVRTLTEpCiAKLQlhbGlnbnoJMTYKKyAgICAgICAgYWxpZ256ICAxNgogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JU0VDVElPTglTRUdfVEVYVAotCUJJVFMJNjQKKyAgICAgICAgU0VDVElPTiBTRUdfVEVYVAorICAgICAgICBCSVRTICAgIDY0CiA7CiA7IFBlcmZvcm0gdGhlIGZvcndhcmQgRENUIG9uIG9uZSBibG9jayBvZiBzYW1wbGVzLgogOwpAQCAtOTcsNTI2ICs5Nyw1MjYgQEAKIAogOyByMTAgPSBEQ1RFTEVNICogZGF0YQogCi0lZGVmaW5lIHdrKGkpCQlyYnAtKFdLX05VTS0oaSkpKlNJWkVPRl9YTU1XT1JECTsgeG1td29yZCB3a1tXS19OVU1dCi0lZGVmaW5lIFdLX05VTQkJNgorJWRlZmluZSB3ayhpKSAgICAgICAgICAgcmJwLShXS19OVU0tKGkpKSpTSVpFT0ZfWE1NV09SRCA7IHhtbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0gICAgICAgICAgNgogCi0JYWxpZ24JMTYKLQlnbG9iYWwJRVhUTihqc2ltZF9mZGN0X2lzbG93X3NzZTIpCisgICAgICAgIGFsaWduICAgMTYKKyAgICAgICAgZ2xvYmFsICBFWFROKGpzaW1kX2ZkY3RfaXNsb3dfc3NlMikKIAogRVhUTihqc2ltZF9mZGN0X2lzbG93X3NzZTIpOgotCXB1c2gJcmJwCi0JbW92CXJheCxyc3AJCQkJOyByYXggPSBvcmlnaW5hbCByYnAKLQlzdWIJcnNwLCBieXRlIDQKLQlhbmQJcnNwLCBieXRlICgtU0laRU9GX1hNTVdPUkQpCTsgYWxpZ24gdG8gMTI4IGJpdHMKLQltb3YJW3JzcF0scmF4Ci0JbW92CXJicCxyc3AJCQkJOyByYnAgPSBhbGlnbmVkIHJicAotCWxlYQlyc3AsIFt3aygwKV0KLQljb2xsZWN0X2FyZ3MKKyAgICAgICAgcHVzaCAgICByYnAKKyAgICAgICAgbW92ICAgICByYXgscnNwICAgICAgICAgICAgICAgICAgICAgICAgIDsgcmF4ID0gb3JpZ2luYWwgcmJwCisgICAgICAgIHN1YiAgICAgcnNwLCBieXRlIDQKKyAgICAgICAgYW5kICAgICByc3AsIGJ5dGUgKC1TSVpFT0ZfWE1NV09SRCkgICAgIDsgYWxpZ24gdG8gMTI4IGJpdHMKKyAgICAgICAgbW92ICAgICBbcnNwXSxyYXgKKyAgICAgICAgbW92ICAgICByYnAscnNwICAgICAgICAgICAgICAgICAgICAgICAgIDsgcmJwID0gYWxpZ25lZCByYnAKKyAgICAgICAgbGVhICAgICByc3AsIFt3aygwKV0KKyAgICAgICAgY29sbGVjdF9hcmdzCiAKLQk7IC0tLS0gUGFzcyAxOiBwcm9jZXNzIHJvd3MuCisgICAgICAgIDsgLS0tLSBQYXNzIDE6IHByb2Nlc3Mgcm93cy4KIAotCW1vdglyZHgsIHIxMAk7IChEQ1RFTEVNICopCisgICAgICAgIG1vdiAgICAgcmR4LCByMTAgICAgICAgIDsgKERDVEVMRU0gKikKIAotCW1vdmRxYQl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAscmR4LFNJWkVPRl9EQ1RFTEVNKV0KLQltb3ZkcWEJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLHJkeCxTSVpFT0ZfRENURUxFTSldCi0JbW92ZHFhCXhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxyZHgsU0laRU9GX0RDVEVMRU0pXQotCW1vdmRxYQl4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAscmR4LFNJWkVPRl9EQ1RFTEVNKV0KKyAgICAgICAgbW92ZHFhICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAscmR4LFNJWkVPRl9EQ1RFTEVNKV0KKyAgICAgICAgbW92ZHFhICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAscmR4LFNJWkVPRl9EQ1RFTEVNKV0KKyAgICAgICAgbW92ZHFhICB4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSygyLDAscmR4LFNJWkVPRl9EQ1RFTEVNKV0KKyAgICAgICAgbW92ZHFhICB4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAscmR4LFNJWkVPRl9EQ1RFTEVNKV0KIAotCTsgeG1tMD0oMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcpLCB4bW0yPSgyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNykKLQk7IHhtbTE9KDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3KSwgeG1tMz0oMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcpCisgICAgICAgIDsgeG1tMD0oMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcpLCB4bW0yPSgyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNykKKyAgICAgICAgOyB4bW0xPSgxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNyksIHhtbTM9KDMwIDMxIDMyIDMzIDM0IDM1IDM2IDM3KQogCi0JbW92ZHFhICAgIHhtbTQseG1tMAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCi0JcHVucGNrbHdkIHhtbTAseG1tMQkJOyB4bW0wPSgwMCAxMCAwMSAxMSAwMiAxMiAwMyAxMykKLQlwdW5wY2tod2QgeG1tNCx4bW0xCQk7IHhtbTQ9KDA0IDE0IDA1IDE1IDA2IDE2IDA3IDE3KQotCW1vdmRxYSAgICB4bW01LHhtbTIJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQotCXB1bnBja2x3ZCB4bW0yLHhtbTMJCTsgeG1tMj0oMjAgMzAgMjEgMzEgMjIgMzIgMjMgMzMpCi0JcHVucGNraHdkIHhtbTUseG1tMwkJOyB4bW01PSgyNCAzNCAyNSAzNSAyNiAzNiAyNyAzNykKKyAgICAgICAgbW92ZHFhICAgIHhtbTQseG1tMCAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICAgICAgcHVucGNrbHdkIHhtbTAseG1tMSAgICAgICAgICAgICA7IHhtbTA9KDAwIDEwIDAxIDExIDAyIDEyIDAzIDEzKQorICAgICAgICBwdW5wY2tod2QgeG1tNCx4bW0xICAgICAgICAgICAgIDsgeG1tND0oMDQgMTQgMDUgMTUgMDYgMTYgMDcgMTcpCisgICAgICAgIG1vdmRxYSAgICB4bW01LHhtbTIgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgICAgIHB1bnBja2x3ZCB4bW0yLHhtbTMgICAgICAgICAgICAgOyB4bW0yPSgyMCAzMCAyMSAzMSAyMiAzMiAyMyAzMykKKyAgICAgICAgcHVucGNraHdkIHhtbTUseG1tMyAgICAgICAgICAgICA7IHhtbTU9KDI0IDM0IDI1IDM1IDI2IDM2IDI3IDM3KQogCi0JbW92ZHFhCXhtbTYsIFhNTVdPUkQgW1hNTUJMT0NLKDQsMCxyZHgsU0laRU9GX0RDVEVMRU0pXQotCW1vdmRxYQl4bW03LCBYTU1XT1JEIFtYTU1CTE9DSyg1LDAscmR4LFNJWkVPRl9EQ1RFTEVNKV0KLQltb3ZkcWEJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNiwwLHJkeCxTSVpFT0ZfRENURUxFTSldCi0JbW92ZHFhCXhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxyZHgsU0laRU9GX0RDVEVMRU0pXQorICAgICAgICBtb3ZkcWEgIHhtbTYsIFhNTVdPUkQgW1hNTUJMT0NLKDQsMCxyZHgsU0laRU9GX0RDVEVMRU0pXQorICAgICAgICBtb3ZkcWEgIHhtbTcsIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxyZHgsU0laRU9GX0RDVEVMRU0pXQorICAgICAgICBtb3ZkcWEgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDYsMCxyZHgsU0laRU9GX0RDVEVMRU0pXQorICAgICAgICBtb3ZkcWEgIHhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxyZHgsU0laRU9GX0RDVEVMRU0pXQogCi0JOyB4bW02PSggNCAxMiAyMCAyOCAzNiA0NCA1MiA2MCksIHhtbTE9KCA2IDE0IDIyIDMwIDM4IDQ2IDU0IDYyKQotCTsgeG1tNz0oIDUgMTMgMjEgMjkgMzcgNDUgNTMgNjEpLCB4bW0zPSggNyAxNSAyMyAzMSAzOSA0NyA1NSA2MykKKyAgICAgICAgOyB4bW02PSggNCAxMiAyMCAyOCAzNiA0NCA1MiA2MCksIHhtbTE9KCA2IDE0IDIyIDMwIDM4IDQ2IDU0IDYyKQorICAgICAgICA7IHhtbTc9KCA1IDEzIDIxIDI5IDM3IDQ1IDUzIDYxKSwgeG1tMz0oIDcgMTUgMjMgMzEgMzkgNDcgNTUgNjMpCiAKLQltb3ZkcWEJWE1NV09SRCBbd2soMCldLCB4bW0yCTsgd2soMCk9KDIwIDMwIDIxIDMxIDIyIDMyIDIzIDMzKQotCW1vdmRxYQlYTU1XT1JEIFt3aygxKV0sIHhtbTUJOyB3aygxKT0oMjQgMzQgMjUgMzUgMjYgMzYgMjcgMzcpCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMCldLCB4bW0yICAgOyB3aygwKT0oMjAgMzAgMjEgMzEgMjIgMzIgMjMgMzMpCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMSldLCB4bW01ICAgOyB3aygxKT0oMjQgMzQgMjUgMzUgMjYgMzYgMjcgMzcpCiAKLQltb3ZkcWEgICAgeG1tMix4bW02CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKLQlwdW5wY2tsd2QgeG1tNix4bW03CQk7IHhtbTY9KDQwIDUwIDQxIDUxIDQyIDUyIDQzIDUzKQotCXB1bnBja2h3ZCB4bW0yLHhtbTcJCTsgeG1tMj0oNDQgNTQgNDUgNTUgNDYgNTYgNDcgNTcpCi0JbW92ZHFhICAgIHhtbTUseG1tMQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCi0JcHVucGNrbHdkIHhtbTEseG1tMwkJOyB4bW0xPSg2MCA3MCA2MSA3MSA2MiA3MiA2MyA3MykKLQlwdW5wY2tod2QgeG1tNSx4bW0zCQk7IHhtbTU9KDY0IDc0IDY1IDc1IDY2IDc2IDY3IDc3KQorICAgICAgICBtb3ZkcWEgICAgeG1tMix4bW02ICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgICAgICBwdW5wY2tsd2QgeG1tNix4bW03ICAgICAgICAgICAgIDsgeG1tNj0oNDAgNTAgNDEgNTEgNDIgNTIgNDMgNTMpCisgICAgICAgIHB1bnBja2h3ZCB4bW0yLHhtbTcgICAgICAgICAgICAgOyB4bW0yPSg0NCA1NCA0NSA1NSA0NiA1NiA0NyA1NykKKyAgICAgICAgbW92ZHFhICAgIHhtbTUseG1tMSAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICAgICAgcHVucGNrbHdkIHhtbTEseG1tMyAgICAgICAgICAgICA7IHhtbTE9KDYwIDcwIDYxIDcxIDYyIDcyIDYzIDczKQorICAgICAgICBwdW5wY2tod2QgeG1tNSx4bW0zICAgICAgICAgICAgIDsgeG1tNT0oNjQgNzQgNjUgNzUgNjYgNzYgNjcgNzcpCiAKLQltb3ZkcWEgICAgeG1tNyx4bW02CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKLQlwdW5wY2tsZHEgeG1tNix4bW0xCQk7IHhtbTY9KDQwIDUwIDYwIDcwIDQxIDUxIDYxIDcxKQotCXB1bnBja2hkcSB4bW03LHhtbTEJCTsgeG1tNz0oNDIgNTIgNjIgNzIgNDMgNTMgNjMgNzMpCi0JbW92ZHFhICAgIHhtbTMseG1tMgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCi0JcHVucGNrbGRxIHhtbTIseG1tNQkJOyB4bW0yPSg0NCA1NCA2NCA3NCA0NSA1NSA2NSA3NSkKLQlwdW5wY2toZHEgeG1tMyx4bW01CQk7IHhtbTM9KDQ2IDU2IDY2IDc2IDQ3IDU3IDY3IDc3KQorICAgICAgICBtb3ZkcWEgICAgeG1tNyx4bW02ICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgICAgICBwdW5wY2tsZHEgeG1tNix4bW0xICAgICAgICAgICAgIDsgeG1tNj0oNDAgNTAgNjAgNzAgNDEgNTEgNjEgNzEpCisgICAgICAgIHB1bnBja2hkcSB4bW03LHhtbTEgICAgICAgICAgICAgOyB4bW03PSg0MiA1MiA2MiA3MiA0MyA1MyA2MyA3MykKKyAgICAgICAgbW92ZHFhICAgIHhtbTMseG1tMiAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICAgICAgcHVucGNrbGRxIHhtbTIseG1tNSAgICAgICAgICAgICA7IHhtbTI9KDQ0IDU0IDY0IDc0IDQ1IDU1IDY1IDc1KQorICAgICAgICBwdW5wY2toZHEgeG1tMyx4bW01ICAgICAgICAgICAgIDsgeG1tMz0oNDYgNTYgNjYgNzYgNDcgNTcgNjcgNzcpCiAKLQltb3ZkcWEJeG1tMSwgWE1NV09SRCBbd2soMCldCTsgeG1tMT0oMjAgMzAgMjEgMzEgMjIgMzIgMjMgMzMpCi0JbW92ZHFhCXhtbTUsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTU9KDI0IDM0IDI1IDM1IDI2IDM2IDI3IDM3KQotCW1vdmRxYQlYTU1XT1JEIFt3aygyKV0sIHhtbTcJOyB3aygyKT0oNDIgNTIgNjIgNzIgNDMgNTMgNjMgNzMpCi0JbW92ZHFhCVhNTVdPUkQgW3drKDMpXSwgeG1tMgk7IHdrKDMpPSg0NCA1NCA2NCA3NCA0NSA1NSA2NSA3NSkKKyAgICAgICAgbW92ZHFhICB4bW0xLCBYTU1XT1JEIFt3aygwKV0gICA7IHhtbTE9KDIwIDMwIDIxIDMxIDIyIDMyIDIzIDMzKQorICAgICAgICBtb3ZkcWEgIHhtbTUsIFhNTVdPUkQgW3drKDEpXSAgIDsgeG1tNT0oMjQgMzQgMjUgMzUgMjYgMzYgMjcgMzcpCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMildLCB4bW03ICAgOyB3aygyKT0oNDIgNTIgNjIgNzIgNDMgNTMgNjMgNzMpCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMyldLCB4bW0yICAgOyB3aygzKT0oNDQgNTQgNjQgNzQgNDUgNTUgNjUgNzUpCiAKLQltb3ZkcWEgICAgeG1tNyx4bW0wCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKLQlwdW5wY2tsZHEgeG1tMCx4bW0xCQk7IHhtbTA9KDAwIDEwIDIwIDMwIDAxIDExIDIxIDMxKQotCXB1bnBja2hkcSB4bW03LHhtbTEJCTsgeG1tNz0oMDIgMTIgMjIgMzIgMDMgMTMgMjMgMzMpCi0JbW92ZHFhICAgIHhtbTIseG1tNAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCi0JcHVucGNrbGRxIHhtbTQseG1tNQkJOyB4bW00PSgwNCAxNCAyNCAzNCAwNSAxNSAyNSAzNSkKLQlwdW5wY2toZHEgeG1tMix4bW01CQk7IHhtbTI9KDA2IDE2IDI2IDM2IDA3IDE3IDI3IDM3KQorICAgICAgICBtb3ZkcWEgICAgeG1tNyx4bW0wICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgICAgICBwdW5wY2tsZHEgeG1tMCx4bW0xICAgICAgICAgICAgIDsgeG1tMD0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEpCisgICAgICAgIHB1bnBja2hkcSB4bW03LHhtbTEgICAgICAgICAgICAgOyB4bW03PSgwMiAxMiAyMiAzMiAwMyAxMyAyMyAzMykKKyAgICAgICAgbW92ZHFhICAgIHhtbTIseG1tNCAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICAgICAgcHVucGNrbGRxIHhtbTQseG1tNSAgICAgICAgICAgICA7IHhtbTQ9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1KQorICAgICAgICBwdW5wY2toZHEgeG1tMix4bW01ICAgICAgICAgICAgIDsgeG1tMj0oMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCiAKLQltb3ZkcWEgICAgIHhtbTEseG1tMAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCi0JcHVucGNrbHFkcSB4bW0wLHhtbTYJCTsgeG1tMD0oMDAgMTAgMjAgMzAgNDAgNTAgNjAgNzApPWRhdGEwCi0JcHVucGNraHFkcSB4bW0xLHhtbTYJCTsgeG1tMT0oMDEgMTEgMjEgMzEgNDEgNTEgNjEgNzEpPWRhdGExCi0JbW92ZHFhICAgICB4bW01LHhtbTIJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQotCXB1bnBja2xxZHEgeG1tMix4bW0zCQk7IHhtbTI9KDA2IDE2IDI2IDM2IDQ2IDU2IDY2IDc2KT1kYXRhNgotCXB1bnBja2hxZHEgeG1tNSx4bW0zCQk7IHhtbTU9KDA3IDE3IDI3IDM3IDQ3IDU3IDY3IDc3KT1kYXRhNworICAgICAgICBtb3ZkcWEgICAgIHhtbTEseG1tMCAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorICAgICAgICBwdW5wY2tscWRxIHhtbTAseG1tNiAgICAgICAgICAgIDsgeG1tMD0oMDAgMTAgMjAgMzAgNDAgNTAgNjAgNzApPWRhdGEwCisgICAgICAgIHB1bnBja2hxZHEgeG1tMSx4bW02ICAgICAgICAgICAgOyB4bW0xPSgwMSAxMSAyMSAzMSA0MSA1MSA2MSA3MSk9ZGF0YTEKKyAgICAgICAgbW92ZHFhICAgICB4bW01LHhtbTIgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKyAgICAgICAgcHVucGNrbHFkcSB4bW0yLHhtbTMgICAgICAgICAgICA7IHhtbTI9KDA2IDE2IDI2IDM2IDQ2IDU2IDY2IDc2KT1kYXRhNgorICAgICAgICBwdW5wY2tocWRxIHhtbTUseG1tMyAgICAgICAgICAgIDsgeG1tNT0oMDcgMTcgMjcgMzcgNDcgNTcgNjcgNzcpPWRhdGE3CiAKLQltb3ZkcWEJeG1tNix4bW0xCi0JbW92ZHFhCXhtbTMseG1tMAotCXBzdWJ3CXhtbTEseG1tMgkJOyB4bW0xPWRhdGExLWRhdGE2PXRtcDYKLQlwc3Vidwl4bW0wLHhtbTUJCTsgeG1tMD1kYXRhMC1kYXRhNz10bXA3Ci0JcGFkZHcJeG1tNix4bW0yCQk7IHhtbTY9ZGF0YTErZGF0YTY9dG1wMQotCXBhZGR3CXhtbTMseG1tNQkJOyB4bW0zPWRhdGEwK2RhdGE3PXRtcDAKKyAgICAgICAgbW92ZHFhICB4bW02LHhtbTEKKyAgICAgICAgbW92ZHFhICB4bW0zLHhtbTAKKyAgICAgICAgcHN1YncgICB4bW0xLHhtbTIgICAgICAgICAgICAgICA7IHhtbTE9ZGF0YTEtZGF0YTY9dG1wNgorICAgICAgICBwc3VidyAgIHhtbTAseG1tNSAgICAgICAgICAgICAgIDsgeG1tMD1kYXRhMC1kYXRhNz10bXA3CisgICAgICAgIHBhZGR3ICAgeG1tNix4bW0yICAgICAgICAgICAgICAgOyB4bW02PWRhdGExK2RhdGE2PXRtcDEKKyAgICAgICAgcGFkZHcgICB4bW0zLHhtbTUgICAgICAgICAgICAgICA7IHhtbTM9ZGF0YTArZGF0YTc9dG1wMAogCi0JbW92ZHFhCXhtbTIsIFhNTVdPUkQgW3drKDIpXQk7IHhtbTI9KDQyIDUyIDYyIDcyIDQzIDUzIDYzIDczKQotCW1vdmRxYQl4bW01LCBYTU1XT1JEIFt3aygzKV0JOyB4bW01PSg0NCA1NCA2NCA3NCA0NSA1NSA2NSA3NSkKLQltb3ZkcWEJWE1NV09SRCBbd2soMCldLCB4bW0xCTsgd2soMCk9dG1wNgotCW1vdmRxYQlYTU1XT1JEIFt3aygxKV0sIHhtbTAJOyB3aygxKT10bXA3CisgICAgICAgIG1vdmRxYSAgeG1tMiwgWE1NV09SRCBbd2soMildICAgOyB4bW0yPSg0MiA1MiA2MiA3MiA0MyA1MyA2MyA3MykKKyAgICAgICAgbW92ZHFhICB4bW01LCBYTU1XT1JEIFt3aygzKV0gICA7IHhtbTU9KDQ0IDU0IDY0IDc0IDQ1IDU1IDY1IDc1KQorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDApXSwgeG1tMSAgIDsgd2soMCk9dG1wNgorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDEpXSwgeG1tMCAgIDsgd2soMSk9dG1wNwogCi0JbW92ZHFhICAgICB4bW0xLHhtbTcJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQotCXB1bnBja2xxZHEgeG1tNyx4bW0yCQk7IHhtbTc9KDAyIDEyIDIyIDMyIDQyIDUyIDYyIDcyKT1kYXRhMgotCXB1bnBja2hxZHEgeG1tMSx4bW0yCQk7IHhtbTE9KDAzIDEzIDIzIDMzIDQzIDUzIDYzIDczKT1kYXRhMwotCW1vdmRxYSAgICAgeG1tMCx4bW00CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKLQlwdW5wY2tscWRxIHhtbTQseG1tNQkJOyB4bW00PSgwNCAxNCAyNCAzNCA0NCA1NCA2NCA3NCk9ZGF0YTQKLQlwdW5wY2tocWRxIHhtbTAseG1tNQkJOyB4bW0wPSgwNSAxNSAyNSAzNSA0NSA1NSA2NSA3NSk9ZGF0YTUKKyAgICAgICAgbW92ZHFhICAgICB4bW0xLHhtbTcgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKyAgICAgICAgcHVucGNrbHFkcSB4bW03LHhtbTIgICAgICAgICAgICA7IHhtbTc9KDAyIDEyIDIyIDMyIDQyIDUyIDYyIDcyKT1kYXRhMgorICAgICAgICBwdW5wY2tocWRxIHhtbTEseG1tMiAgICAgICAgICAgIDsgeG1tMT0oMDMgMTMgMjMgMzMgNDMgNTMgNjMgNzMpPWRhdGEzCisgICAgICAgIG1vdmRxYSAgICAgeG1tMCx4bW00ICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisgICAgICAgIHB1bnBja2xxZHEgeG1tNCx4bW01ICAgICAgICAgICAgOyB4bW00PSgwNCAxNCAyNCAzNCA0NCA1NCA2NCA3NCk9ZGF0YTQKKyAgICAgICAgcHVucGNraHFkcSB4bW0wLHhtbTUgICAgICAgICAgICA7IHhtbTA9KDA1IDE1IDI1IDM1IDQ1IDU1IDY1IDc1KT1kYXRhNQogCi0JbW92ZHFhCXhtbTIseG1tMQotCW1vdmRxYQl4bW01LHhtbTcKLQlwYWRkdwl4bW0xLHhtbTQJCTsgeG1tMT1kYXRhMytkYXRhND10bXAzCi0JcGFkZHcJeG1tNyx4bW0wCQk7IHhtbTc9ZGF0YTIrZGF0YTU9dG1wMgotCXBzdWJ3CXhtbTIseG1tNAkJOyB4bW0yPWRhdGEzLWRhdGE0PXRtcDQKLQlwc3Vidwl4bW01LHhtbTAJCTsgeG1tNT1kYXRhMi1kYXRhNT10bXA1CisgICAgICAgIG1vdmRxYSAgeG1tMix4bW0xCisgICAgICAgIG1vdmRxYSAgeG1tNSx4bW03CisgICAgICAgIHBhZGR3ICAgeG1tMSx4bW00ICAgICAgICAgICAgICAgOyB4bW0xPWRhdGEzK2RhdGE0PXRtcDMKKyAgICAgICAgcGFkZHcgICB4bW03LHhtbTAgICAgICAgICAgICAgICA7IHhtbTc9ZGF0YTIrZGF0YTU9dG1wMgorICAgICAgICBwc3VidyAgIHhtbTIseG1tNCAgICAgICAgICAgICAgIDsgeG1tMj1kYXRhMy1kYXRhND10bXA0CisgICAgICAgIHBzdWJ3ICAgeG1tNSx4bW0wICAgICAgICAgICAgICAgOyB4bW01PWRhdGEyLWRhdGE1PXRtcDUKIAotCTsgLS0gRXZlbiBwYXJ0CisgICAgICAgIDsgLS0gRXZlbiBwYXJ0CiAKLQltb3ZkcWEJeG1tNCx4bW0zCi0JbW92ZHFhCXhtbTAseG1tNgotCXBhZGR3CXhtbTMseG1tMQkJOyB4bW0zPXRtcDEwCi0JcGFkZHcJeG1tNix4bW03CQk7IHhtbTY9dG1wMTEKLQlwc3Vidwl4bW00LHhtbTEJCTsgeG1tND10bXAxMwotCXBzdWJ3CXhtbTAseG1tNwkJOyB4bW0wPXRtcDEyCisgICAgICAgIG1vdmRxYSAgeG1tNCx4bW0zCisgICAgICAgIG1vdmRxYSAgeG1tMCx4bW02CisgICAgICAgIHBhZGR3ICAgeG1tMyx4bW0xICAgICAgICAgICAgICAgOyB4bW0zPXRtcDEwCisgICAgICAgIHBhZGR3ICAgeG1tNix4bW03ICAgICAgICAgICAgICAgOyB4bW02PXRtcDExCisgICAgICAgIHBzdWJ3ICAgeG1tNCx4bW0xICAgICAgICAgICAgICAgOyB4bW00PXRtcDEzCisgICAgICAgIHBzdWJ3ICAgeG1tMCx4bW03ICAgICAgICAgICAgICAgOyB4bW0wPXRtcDEyCiAKLQltb3ZkcWEJeG1tMSx4bW0zCi0JcGFkZHcJeG1tMyx4bW02CQk7IHhtbTM9dG1wMTArdG1wMTEKLQlwc3Vidwl4bW0xLHhtbTYJCTsgeG1tMT10bXAxMC10bXAxMQorICAgICAgICBtb3ZkcWEgIHhtbTEseG1tMworICAgICAgICBwYWRkdyAgIHhtbTMseG1tNiAgICAgICAgICAgICAgIDsgeG1tMz10bXAxMCt0bXAxMQorICAgICAgICBwc3VidyAgIHhtbTEseG1tNiAgICAgICAgICAgICAgIDsgeG1tMT10bXAxMC10bXAxMQogCi0JcHNsbHcJeG1tMyxQQVNTMV9CSVRTCQk7IHhtbTM9ZGF0YTAKLQlwc2xsdwl4bW0xLFBBU1MxX0JJVFMJCTsgeG1tMT1kYXRhNAorICAgICAgICBwc2xsdyAgIHhtbTMsUEFTUzFfQklUUyAgICAgICAgIDsgeG1tMz1kYXRhMAorICAgICAgICBwc2xsdyAgIHhtbTEsUEFTUzFfQklUUyAgICAgICAgIDsgeG1tMT1kYXRhNAogCi0JbW92ZHFhCVhNTVdPUkQgW3drKDIpXSwgeG1tMwk7IHdrKDIpPWRhdGEwCi0JbW92ZHFhCVhNTVdPUkQgW3drKDMpXSwgeG1tMQk7IHdrKDMpPWRhdGE0CisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMildLCB4bW0zICAgOyB3aygyKT1kYXRhMAorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDMpXSwgeG1tMSAgIDsgd2soMyk9ZGF0YTQKIAotCTsgKE9yaWdpbmFsKQotCTsgejEgPSAodG1wMTIgKyB0bXAxMykgKiAwLjU0MTE5NjEwMDsKLQk7IGRhdGEyID0gejEgKyB0bXAxMyAqIDAuNzY1MzY2ODY1OwotCTsgZGF0YTYgPSB6MSArIHRtcDEyICogLTEuODQ3NzU5MDY1OwotCTsKLQk7IChUaGlzIGltcGxlbWVudGF0aW9uKQotCTsgZGF0YTIgPSB0bXAxMyAqICgwLjU0MTE5NjEwMCArIDAuNzY1MzY2ODY1KSArIHRtcDEyICogMC41NDExOTYxMDA7Ci0JOyBkYXRhNiA9IHRtcDEzICogMC41NDExOTYxMDAgKyB0bXAxMiAqICgwLjU0MTE5NjEwMCAtIDEuODQ3NzU5MDY1KTsKKyAgICAgICAgOyAoT3JpZ2luYWwpCisgICAgICAgIDsgejEgPSAodG1wMTIgKyB0bXAxMykgKiAwLjU0MTE5NjEwMDsKKyAgICAgICAgOyBkYXRhMiA9IHoxICsgdG1wMTMgKiAwLjc2NTM2Njg2NTsKKyAgICAgICAgOyBkYXRhNiA9IHoxICsgdG1wMTIgKiAtMS44NDc3NTkwNjU7CisgICAgICAgIDsKKyAgICAgICAgOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKyAgICAgICAgOyBkYXRhMiA9IHRtcDEzICogKDAuNTQxMTk2MTAwICsgMC43NjUzNjY4NjUpICsgdG1wMTIgKiAwLjU0MTE5NjEwMDsKKyAgICAgICAgOyBkYXRhNiA9IHRtcDEzICogMC41NDExOTYxMDAgKyB0bXAxMiAqICgwLjU0MTE5NjEwMCAtIDEuODQ3NzU5MDY1KTsKIAotCW1vdmRxYSAgICB4bW03LHhtbTQJCTsgeG1tND10bXAxMwotCW1vdmRxYSAgICB4bW02LHhtbTQKLQlwdW5wY2tsd2QgeG1tNyx4bW0wCQk7IHhtbTA9dG1wMTIKLQlwdW5wY2tod2QgeG1tNix4bW0wCi0JbW92ZHFhICAgIHhtbTQseG1tNwotCW1vdmRxYSAgICB4bW0wLHhtbTYKLQlwbWFkZHdkICAgeG1tNyxbcmVsIFBXX0YxMzBfRjA1NF0JOyB4bW03PWRhdGEyTAotCXBtYWRkd2QgICB4bW02LFtyZWwgUFdfRjEzMF9GMDU0XQk7IHhtbTY9ZGF0YTJICi0JcG1hZGR3ZCAgIHhtbTQsW3JlbCBQV19GMDU0X01GMTMwXQk7IHhtbTQ9ZGF0YTZMCi0JcG1hZGR3ZCAgIHhtbTAsW3JlbCBQV19GMDU0X01GMTMwXQk7IHhtbTA9ZGF0YTZICisgICAgICAgIG1vdmRxYSAgICB4bW03LHhtbTQgICAgICAgICAgICAgOyB4bW00PXRtcDEzCisgICAgICAgIG1vdmRxYSAgICB4bW02LHhtbTQKKyAgICAgICAgcHVucGNrbHdkIHhtbTcseG1tMCAgICAgICAgICAgICA7IHhtbTA9dG1wMTIKKyAgICAgICAgcHVucGNraHdkIHhtbTYseG1tMAorICAgICAgICBtb3ZkcWEgICAgeG1tNCx4bW03CisgICAgICAgIG1vdmRxYSAgICB4bW0wLHhtbTYKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTcsW3JlbCBQV19GMTMwX0YwNTRdICAgICAgIDsgeG1tNz1kYXRhMkwKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTYsW3JlbCBQV19GMTMwX0YwNTRdICAgICAgIDsgeG1tNj1kYXRhMkgKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTQsW3JlbCBQV19GMDU0X01GMTMwXSAgICAgIDsgeG1tND1kYXRhNkwKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTAsW3JlbCBQV19GMDU0X01GMTMwXSAgICAgIDsgeG1tMD1kYXRhNkgKIAotCXBhZGRkCXhtbTcsW3JlbCBQRF9ERVNDQUxFX1AxXQotCXBhZGRkCXhtbTYsW3JlbCBQRF9ERVNDQUxFX1AxXQotCXBzcmFkCXhtbTcsREVTQ0FMRV9QMQotCXBzcmFkCXhtbTYsREVTQ0FMRV9QMQotCXBhZGRkCXhtbTQsW3JlbCBQRF9ERVNDQUxFX1AxXQotCXBhZGRkCXhtbTAsW3JlbCBQRF9ERVNDQUxFX1AxXQotCXBzcmFkCXhtbTQsREVTQ0FMRV9QMQotCXBzcmFkCXhtbTAsREVTQ0FMRV9QMQorICAgICAgICBwYWRkZCAgIHhtbTcsW3JlbCBQRF9ERVNDQUxFX1AxXQorICAgICAgICBwYWRkZCAgIHhtbTYsW3JlbCBQRF9ERVNDQUxFX1AxXQorICAgICAgICBwc3JhZCAgIHhtbTcsREVTQ0FMRV9QMQorICAgICAgICBwc3JhZCAgIHhtbTYsREVTQ0FMRV9QMQorICAgICAgICBwYWRkZCAgIHhtbTQsW3JlbCBQRF9ERVNDQUxFX1AxXQorICAgICAgICBwYWRkZCAgIHhtbTAsW3JlbCBQRF9ERVNDQUxFX1AxXQorICAgICAgICBwc3JhZCAgIHhtbTQsREVTQ0FMRV9QMQorICAgICAgICBwc3JhZCAgIHhtbTAsREVTQ0FMRV9QMQogCi0JcGFja3NzZHcgIHhtbTcseG1tNgkJOyB4bW03PWRhdGEyCi0JcGFja3NzZHcgIHhtbTQseG1tMAkJOyB4bW00PWRhdGE2CisgICAgICAgIHBhY2tzc2R3ICB4bW03LHhtbTYgICAgICAgICAgICAgOyB4bW03PWRhdGEyCisgICAgICAgIHBhY2tzc2R3ICB4bW00LHhtbTAgICAgICAgICAgICAgOyB4bW00PWRhdGE2CiAKLQltb3ZkcWEJWE1NV09SRCBbd2soNCldLCB4bW03CTsgd2soNCk9ZGF0YTIKLQltb3ZkcWEJWE1NV09SRCBbd2soNSldLCB4bW00CTsgd2soNSk9ZGF0YTYKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3ayg0KV0sIHhtbTcgICA7IHdrKDQpPWRhdGEyCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soNSldLCB4bW00ICAgOyB3ayg1KT1kYXRhNgogCi0JOyAtLSBPZGQgcGFydAorICAgICAgICA7IC0tIE9kZCBwYXJ0CiAKLQltb3ZkcWEJeG1tMywgWE1NV09SRCBbd2soMCldCTsgeG1tMz10bXA2Ci0JbW92ZHFhCXhtbTEsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTE9dG1wNworICAgICAgICBtb3ZkcWEgIHhtbTMsIFhNTVdPUkQgW3drKDApXSAgIDsgeG1tMz10bXA2CisgICAgICAgIG1vdmRxYSAgeG1tMSwgWE1NV09SRCBbd2soMSldICAgOyB4bW0xPXRtcDcKIAotCW1vdmRxYQl4bW02LHhtbTIJCTsgeG1tMj10bXA0Ci0JbW92ZHFhCXhtbTAseG1tNQkJOyB4bW01PXRtcDUKLQlwYWRkdwl4bW02LHhtbTMJCTsgeG1tNj16MwotCXBhZGR3CXhtbTAseG1tMQkJOyB4bW0wPXo0CisgICAgICAgIG1vdmRxYSAgeG1tNix4bW0yICAgICAgICAgICAgICAgOyB4bW0yPXRtcDQKKyAgICAgICAgbW92ZHFhICB4bW0wLHhtbTUgICAgICAgICAgICAgICA7IHhtbTU9dG1wNQorICAgICAgICBwYWRkdyAgIHhtbTYseG1tMyAgICAgICAgICAgICAgIDsgeG1tNj16MworICAgICAgICBwYWRkdyAgIHhtbTAseG1tMSAgICAgICAgICAgICAgIDsgeG1tMD16NAogCi0JOyAoT3JpZ2luYWwpCi0JOyB6NSA9ICh6MyArIHo0KSAqIDEuMTc1ODc1NjAyOwotCTsgejMgPSB6MyAqIC0xLjk2MTU3MDU2MDsgIHo0ID0gejQgKiAtMC4zOTAxODA2NDQ7Ci0JOyB6MyArPSB6NTsgIHo0ICs9IHo1OwotCTsKLQk7IChUaGlzIGltcGxlbWVudGF0aW9uKQotCTsgejMgPSB6MyAqICgxLjE3NTg3NTYwMiAtIDEuOTYxNTcwNTYwKSArIHo0ICogMS4xNzU4NzU2MDI7Ci0JOyB6NCA9IHozICogMS4xNzU4NzU2MDIgKyB6NCAqICgxLjE3NTg3NTYwMiAtIDAuMzkwMTgwNjQ0KTsKKyAgICAgICAgOyAoT3JpZ2luYWwpCisgICAgICAgIDsgejUgPSAoejMgKyB6NCkgKiAxLjE3NTg3NTYwMjsKKyAgICAgICAgOyB6MyA9IHozICogLTEuOTYxNTcwNTYwOyAgejQgPSB6NCAqIC0wLjM5MDE4MDY0NDsKKyAgICAgICAgOyB6MyArPSB6NTsgIHo0ICs9IHo1OworICAgICAgICA7CisgICAgICAgIDsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisgICAgICAgIDsgejMgPSB6MyAqICgxLjE3NTg3NTYwMiAtIDEuOTYxNTcwNTYwKSArIHo0ICogMS4xNzU4NzU2MDI7CisgICAgICAgIDsgejQgPSB6MyAqIDEuMTc1ODc1NjAyICsgejQgKiAoMS4xNzU4NzU2MDIgLSAwLjM5MDE4MDY0NCk7CiAKLQltb3ZkcWEgICAgeG1tNyx4bW02Ci0JbW92ZHFhICAgIHhtbTQseG1tNgotCXB1bnBja2x3ZCB4bW03LHhtbTAKLQlwdW5wY2tod2QgeG1tNCx4bW0wCi0JbW92ZHFhICAgIHhtbTYseG1tNwotCW1vdmRxYSAgICB4bW0wLHhtbTQKLQlwbWFkZHdkICAgeG1tNyxbcmVsIFBXX01GMDc4X0YxMTddCTsgeG1tNz16M0wKLQlwbWFkZHdkICAgeG1tNCxbcmVsIFBXX01GMDc4X0YxMTddCTsgeG1tND16M0gKLQlwbWFkZHdkICAgeG1tNixbcmVsIFBXX0YxMTdfRjA3OF0JOyB4bW02PXo0TAotCXBtYWRkd2QgICB4bW0wLFtyZWwgUFdfRjExN19GMDc4XQk7IHhtbTA9ejRICisgICAgICAgIG1vdmRxYSAgICB4bW03LHhtbTYKKyAgICAgICAgbW92ZHFhICAgIHhtbTQseG1tNgorICAgICAgICBwdW5wY2tsd2QgeG1tNyx4bW0wCisgICAgICAgIHB1bnBja2h3ZCB4bW00LHhtbTAKKyAgICAgICAgbW92ZHFhICAgIHhtbTYseG1tNworICAgICAgICBtb3ZkcWEgICAgeG1tMCx4bW00CisgICAgICAgIHBtYWRkd2QgICB4bW03LFtyZWwgUFdfTUYwNzhfRjExN10gICAgICA7IHhtbTc9ejNMCisgICAgICAgIHBtYWRkd2QgICB4bW00LFtyZWwgUFdfTUYwNzhfRjExN10gICAgICA7IHhtbTQ9ejNICisgICAgICAgIHBtYWRkd2QgICB4bW02LFtyZWwgUFdfRjExN19GMDc4XSAgICAgICA7IHhtbTY9ejRMCisgICAgICAgIHBtYWRkd2QgICB4bW0wLFtyZWwgUFdfRjExN19GMDc4XSAgICAgICA7IHhtbTA9ejRICiAKLQltb3ZkcWEJWE1NV09SRCBbd2soMCldLCB4bW03CTsgd2soMCk9ejNMCi0JbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tNAk7IHdrKDEpPXozSAorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDApXSwgeG1tNyAgIDsgd2soMCk9ejNMCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMSldLCB4bW00ICAgOyB3aygxKT16M0gKIAotCTsgKE9yaWdpbmFsKQotCTsgejEgPSB0bXA0ICsgdG1wNzsgIHoyID0gdG1wNSArIHRtcDY7Ci0JOyB0bXA0ID0gdG1wNCAqIDAuMjk4NjMxMzM2OyAgdG1wNSA9IHRtcDUgKiAyLjA1MzExOTg2OTsKLQk7IHRtcDYgPSB0bXA2ICogMy4wNzI3MTEwMjY7ICB0bXA3ID0gdG1wNyAqIDEuNTAxMzIxMTEwOwotCTsgejEgPSB6MSAqIC0wLjg5OTk3NjIyMzsgIHoyID0gejIgKiAtMi41NjI5MTU0NDc7Ci0JOyBkYXRhNyA9IHRtcDQgKyB6MSArIHozOyAgZGF0YTUgPSB0bXA1ICsgejIgKyB6NDsKLQk7IGRhdGEzID0gdG1wNiArIHoyICsgejM7ICBkYXRhMSA9IHRtcDcgKyB6MSArIHo0OwotCTsKLQk7IChUaGlzIGltcGxlbWVudGF0aW9uKQotCTsgdG1wNCA9IHRtcDQgKiAoMC4yOTg2MzEzMzYgLSAwLjg5OTk3NjIyMykgKyB0bXA3ICogLTAuODk5OTc2MjIzOwotCTsgdG1wNSA9IHRtcDUgKiAoMi4wNTMxMTk4NjkgLSAyLjU2MjkxNTQ0NykgKyB0bXA2ICogLTIuNTYyOTE1NDQ3OwotCTsgdG1wNiA9IHRtcDUgKiAtMi41NjI5MTU0NDcgKyB0bXA2ICogKDMuMDcyNzExMDI2IC0gMi41NjI5MTU0NDcpOwotCTsgdG1wNyA9IHRtcDQgKiAtMC44OTk5NzYyMjMgKyB0bXA3ICogKDEuNTAxMzIxMTEwIC0gMC44OTk5NzYyMjMpOwotCTsgZGF0YTcgPSB0bXA0ICsgejM7ICBkYXRhNSA9IHRtcDUgKyB6NDsKLQk7IGRhdGEzID0gdG1wNiArIHozOyAgZGF0YTEgPSB0bXA3ICsgejQ7CisgICAgICAgIDsgKE9yaWdpbmFsKQorICAgICAgICA7IHoxID0gdG1wNCArIHRtcDc7ICB6MiA9IHRtcDUgKyB0bXA2OworICAgICAgICA7IHRtcDQgPSB0bXA0ICogMC4yOTg2MzEzMzY7ICB0bXA1ID0gdG1wNSAqIDIuMDUzMTE5ODY5OworICAgICAgICA7IHRtcDYgPSB0bXA2ICogMy4wNzI3MTEwMjY7ICB0bXA3ID0gdG1wNyAqIDEuNTAxMzIxMTEwOworICAgICAgICA7IHoxID0gejEgKiAtMC44OTk5NzYyMjM7ICB6MiA9IHoyICogLTIuNTYyOTE1NDQ3OworICAgICAgICA7IGRhdGE3ID0gdG1wNCArIHoxICsgejM7ICBkYXRhNSA9IHRtcDUgKyB6MiArIHo0OworICAgICAgICA7IGRhdGEzID0gdG1wNiArIHoyICsgejM7ICBkYXRhMSA9IHRtcDcgKyB6MSArIHo0OworICAgICAgICA7CisgICAgICAgIDsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisgICAgICAgIDsgdG1wNCA9IHRtcDQgKiAoMC4yOTg2MzEzMzYgLSAwLjg5OTk3NjIyMykgKyB0bXA3ICogLTAuODk5OTc2MjIzOworICAgICAgICA7IHRtcDUgPSB0bXA1ICogKDIuMDUzMTE5ODY5IC0gMi41NjI5MTU0NDcpICsgdG1wNiAqIC0yLjU2MjkxNTQ0NzsKKyAgICAgICAgOyB0bXA2ID0gdG1wNSAqIC0yLjU2MjkxNTQ0NyArIHRtcDYgKiAoMy4wNzI3MTEwMjYgLSAyLjU2MjkxNTQ0Nyk7CisgICAgICAgIDsgdG1wNyA9IHRtcDQgKiAtMC44OTk5NzYyMjMgKyB0bXA3ICogKDEuNTAxMzIxMTEwIC0gMC44OTk5NzYyMjMpOworICAgICAgICA7IGRhdGE3ID0gdG1wNCArIHozOyAgZGF0YTUgPSB0bXA1ICsgejQ7CisgICAgICAgIDsgZGF0YTMgPSB0bXA2ICsgejM7ICBkYXRhMSA9IHRtcDcgKyB6NDsKIAotCW1vdmRxYSAgICB4bW03LHhtbTIKLQltb3ZkcWEgICAgeG1tNCx4bW0yCi0JcHVucGNrbHdkIHhtbTcseG1tMQotCXB1bnBja2h3ZCB4bW00LHhtbTEKLQltb3ZkcWEgICAgeG1tMix4bW03Ci0JbW92ZHFhICAgIHhtbTEseG1tNAotCXBtYWRkd2QgICB4bW03LFtyZWwgUFdfTUYwNjBfTUYwODldCTsgeG1tNz10bXA0TAotCXBtYWRkd2QgICB4bW00LFtyZWwgUFdfTUYwNjBfTUYwODldCTsgeG1tND10bXA0SAotCXBtYWRkd2QgICB4bW0yLFtyZWwgUFdfTUYwODlfRjA2MF0JOyB4bW0yPXRtcDdMCi0JcG1hZGR3ZCAgIHhtbTEsW3JlbCBQV19NRjA4OV9GMDYwXQk7IHhtbTE9dG1wN0gKKyAgICAgICAgbW92ZHFhICAgIHhtbTcseG1tMgorICAgICAgICBtb3ZkcWEgICAgeG1tNCx4bW0yCisgICAgICAgIHB1bnBja2x3ZCB4bW03LHhtbTEKKyAgICAgICAgcHVucGNraHdkIHhtbTQseG1tMQorICAgICAgICBtb3ZkcWEgICAgeG1tMix4bW03CisgICAgICAgIG1vdmRxYSAgICB4bW0xLHhtbTQKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTcsW3JlbCBQV19NRjA2MF9NRjA4OV0gICAgIDsgeG1tNz10bXA0TAorICAgICAgICBwbWFkZHdkICAgeG1tNCxbcmVsIFBXX01GMDYwX01GMDg5XSAgICAgOyB4bW00PXRtcDRICisgICAgICAgIHBtYWRkd2QgICB4bW0yLFtyZWwgUFdfTUYwODlfRjA2MF0gICAgICA7IHhtbTI9dG1wN0wKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTEsW3JlbCBQV19NRjA4OV9GMDYwXSAgICAgIDsgeG1tMT10bXA3SAogCi0JcGFkZGQJeG1tNywgWE1NV09SRCBbd2soMCldCTsgeG1tNz1kYXRhN0wKLQlwYWRkZAl4bW00LCBYTU1XT1JEIFt3aygxKV0JOyB4bW00PWRhdGE3SAotCXBhZGRkCXhtbTIseG1tNgkJOyB4bW0yPWRhdGExTAotCXBhZGRkCXhtbTEseG1tMAkJOyB4bW0xPWRhdGExSAorICAgICAgICBwYWRkZCAgIHhtbTcsIFhNTVdPUkQgW3drKDApXSAgIDsgeG1tNz1kYXRhN0wKKyAgICAgICAgcGFkZGQgICB4bW00LCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTQ9ZGF0YTdICisgICAgICAgIHBhZGRkICAgeG1tMix4bW02ICAgICAgICAgICAgICAgOyB4bW0yPWRhdGExTAorICAgICAgICBwYWRkZCAgIHhtbTEseG1tMCAgICAgICAgICAgICAgIDsgeG1tMT1kYXRhMUgKIAotCXBhZGRkCXhtbTcsW3JlbCBQRF9ERVNDQUxFX1AxXQotCXBhZGRkCXhtbTQsW3JlbCBQRF9ERVNDQUxFX1AxXQotCXBzcmFkCXhtbTcsREVTQ0FMRV9QMQotCXBzcmFkCXhtbTQsREVTQ0FMRV9QMQotCXBhZGRkCXhtbTIsW3JlbCBQRF9ERVNDQUxFX1AxXQotCXBhZGRkCXhtbTEsW3JlbCBQRF9ERVNDQUxFX1AxXQotCXBzcmFkCXhtbTIsREVTQ0FMRV9QMQotCXBzcmFkCXhtbTEsREVTQ0FMRV9QMQorICAgICAgICBwYWRkZCAgIHhtbTcsW3JlbCBQRF9ERVNDQUxFX1AxXQorICAgICAgICBwYWRkZCAgIHhtbTQsW3JlbCBQRF9ERVNDQUxFX1AxXQorICAgICAgICBwc3JhZCAgIHhtbTcsREVTQ0FMRV9QMQorICAgICAgICBwc3JhZCAgIHhtbTQsREVTQ0FMRV9QMQorICAgICAgICBwYWRkZCAgIHhtbTIsW3JlbCBQRF9ERVNDQUxFX1AxXQorICAgICAgICBwYWRkZCAgIHhtbTEsW3JlbCBQRF9ERVNDQUxFX1AxXQorICAgICAgICBwc3JhZCAgIHhtbTIsREVTQ0FMRV9QMQorICAgICAgICBwc3JhZCAgIHhtbTEsREVTQ0FMRV9QMQogCi0JcGFja3NzZHcgIHhtbTcseG1tNAkJOyB4bW03PWRhdGE3Ci0JcGFja3NzZHcgIHhtbTIseG1tMQkJOyB4bW0yPWRhdGExCisgICAgICAgIHBhY2tzc2R3ICB4bW03LHhtbTQgICAgICAgICAgICAgOyB4bW03PWRhdGE3CisgICAgICAgIHBhY2tzc2R3ICB4bW0yLHhtbTEgICAgICAgICAgICAgOyB4bW0yPWRhdGExCiAKLQltb3ZkcWEgICAgeG1tNCx4bW01Ci0JbW92ZHFhICAgIHhtbTEseG1tNQotCXB1bnBja2x3ZCB4bW00LHhtbTMKLQlwdW5wY2tod2QgeG1tMSx4bW0zCi0JbW92ZHFhICAgIHhtbTUseG1tNAotCW1vdmRxYSAgICB4bW0zLHhtbTEKLQlwbWFkZHdkICAgeG1tNCxbcmVsIFBXX01GMDUwX01GMjU2XQk7IHhtbTQ9dG1wNUwKLQlwbWFkZHdkICAgeG1tMSxbcmVsIFBXX01GMDUwX01GMjU2XQk7IHhtbTE9dG1wNUgKLQlwbWFkZHdkICAgeG1tNSxbcmVsIFBXX01GMjU2X0YwNTBdCTsgeG1tNT10bXA2TAotCXBtYWRkd2QgICB4bW0zLFtyZWwgUFdfTUYyNTZfRjA1MF0JOyB4bW0zPXRtcDZICisgICAgICAgIG1vdmRxYSAgICB4bW00LHhtbTUKKyAgICAgICAgbW92ZHFhICAgIHhtbTEseG1tNQorICAgICAgICBwdW5wY2tsd2QgeG1tNCx4bW0zCisgICAgICAgIHB1bnBja2h3ZCB4bW0xLHhtbTMKKyAgICAgICAgbW92ZHFhICAgIHhtbTUseG1tNAorICAgICAgICBtb3ZkcWEgICAgeG1tMyx4bW0xCisgICAgICAgIHBtYWRkd2QgICB4bW00LFtyZWwgUFdfTUYwNTBfTUYyNTZdICAgICA7IHhtbTQ9dG1wNUwKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTEsW3JlbCBQV19NRjA1MF9NRjI1Nl0gICAgIDsgeG1tMT10bXA1SAorICAgICAgICBwbWFkZHdkICAgeG1tNSxbcmVsIFBXX01GMjU2X0YwNTBdICAgICAgOyB4bW01PXRtcDZMCisgICAgICAgIHBtYWRkd2QgICB4bW0zLFtyZWwgUFdfTUYyNTZfRjA1MF0gICAgICA7IHhtbTM9dG1wNkgKIAotCXBhZGRkCXhtbTQseG1tNgkJOyB4bW00PWRhdGE1TAotCXBhZGRkCXhtbTEseG1tMAkJOyB4bW0xPWRhdGE1SAotCXBhZGRkCXhtbTUsIFhNTVdPUkQgW3drKDApXQk7IHhtbTU9ZGF0YTNMCi0JcGFkZGQJeG1tMywgWE1NV09SRCBbd2soMSldCTsgeG1tMz1kYXRhM0gKKyAgICAgICAgcGFkZGQgICB4bW00LHhtbTYgICAgICAgICAgICAgICA7IHhtbTQ9ZGF0YTVMCisgICAgICAgIHBhZGRkICAgeG1tMSx4bW0wICAgICAgICAgICAgICAgOyB4bW0xPWRhdGE1SAorICAgICAgICBwYWRkZCAgIHhtbTUsIFhNTVdPUkQgW3drKDApXSAgIDsgeG1tNT1kYXRhM0wKKyAgICAgICAgcGFkZGQgICB4bW0zLCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTM9ZGF0YTNICiAKLQlwYWRkZAl4bW00LFtyZWwgUERfREVTQ0FMRV9QMV0KLQlwYWRkZAl4bW0xLFtyZWwgUERfREVTQ0FMRV9QMV0KLQlwc3JhZAl4bW00LERFU0NBTEVfUDEKLQlwc3JhZAl4bW0xLERFU0NBTEVfUDEKLQlwYWRkZAl4bW01LFtyZWwgUERfREVTQ0FMRV9QMV0KLQlwYWRkZAl4bW0zLFtyZWwgUERfREVTQ0FMRV9QMV0KLQlwc3JhZAl4bW01LERFU0NBTEVfUDEKLQlwc3JhZAl4bW0zLERFU0NBTEVfUDEKKyAgICAgICAgcGFkZGQgICB4bW00LFtyZWwgUERfREVTQ0FMRV9QMV0KKyAgICAgICAgcGFkZGQgICB4bW0xLFtyZWwgUERfREVTQ0FMRV9QMV0KKyAgICAgICAgcHNyYWQgICB4bW00LERFU0NBTEVfUDEKKyAgICAgICAgcHNyYWQgICB4bW0xLERFU0NBTEVfUDEKKyAgICAgICAgcGFkZGQgICB4bW01LFtyZWwgUERfREVTQ0FMRV9QMV0KKyAgICAgICAgcGFkZGQgICB4bW0zLFtyZWwgUERfREVTQ0FMRV9QMV0KKyAgICAgICAgcHNyYWQgICB4bW01LERFU0NBTEVfUDEKKyAgICAgICAgcHNyYWQgICB4bW0zLERFU0NBTEVfUDEKIAotCXBhY2tzc2R3ICB4bW00LHhtbTEJCTsgeG1tND1kYXRhNQotCXBhY2tzc2R3ICB4bW01LHhtbTMJCTsgeG1tNT1kYXRhMworICAgICAgICBwYWNrc3NkdyAgeG1tNCx4bW0xICAgICAgICAgICAgIDsgeG1tND1kYXRhNQorICAgICAgICBwYWNrc3NkdyAgeG1tNSx4bW0zICAgICAgICAgICAgIDsgeG1tNT1kYXRhMwogCi0JOyAtLS0tIFBhc3MgMjogcHJvY2VzcyBjb2x1bW5zLgorICAgICAgICA7IC0tLS0gUGFzcyAyOiBwcm9jZXNzIGNvbHVtbnMuCiAKLQltb3ZkcWEJeG1tNiwgWE1NV09SRCBbd2soMildCTsgeG1tNj1jb2wwCi0JbW92ZHFhCXhtbTAsIFhNTVdPUkQgW3drKDQpXQk7IHhtbTA9Y29sMgorICAgICAgICBtb3ZkcWEgIHhtbTYsIFhNTVdPUkQgW3drKDIpXSAgIDsgeG1tNj1jb2wwCisgICAgICAgIG1vdmRxYSAgeG1tMCwgWE1NV09SRCBbd2soNCldICAgOyB4bW0wPWNvbDIKIAotCTsgeG1tNj0oMDAgMTAgMjAgMzAgNDAgNTAgNjAgNzApLCB4bW0wPSgwMiAxMiAyMiAzMiA0MiA1MiA2MiA3MikKLQk7IHhtbTI9KDAxIDExIDIxIDMxIDQxIDUxIDYxIDcxKSwgeG1tNT0oMDMgMTMgMjMgMzMgNDMgNTMgNjMgNzMpCisgICAgICAgIDsgeG1tNj0oMDAgMTAgMjAgMzAgNDAgNTAgNjAgNzApLCB4bW0wPSgwMiAxMiAyMiAzMiA0MiA1MiA2MiA3MikKKyAgICAgICAgOyB4bW0yPSgwMSAxMSAyMSAzMSA0MSA1MSA2MSA3MSksIHhtbTU9KDAzIDEzIDIzIDMzIDQzIDUzIDYzIDczKQogCi0JbW92ZHFhICAgIHhtbTEseG1tNgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCi0JcHVucGNrbHdkIHhtbTYseG1tMgkJOyB4bW02PSgwMCAwMSAxMCAxMSAyMCAyMSAzMCAzMSkKLQlwdW5wY2tod2QgeG1tMSx4bW0yCQk7IHhtbTE9KDQwIDQxIDUwIDUxIDYwIDYxIDcwIDcxKQotCW1vdmRxYSAgICB4bW0zLHhtbTAJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQotCXB1bnBja2x3ZCB4bW0wLHhtbTUJCTsgeG1tMD0oMDIgMDMgMTIgMTMgMjIgMjMgMzIgMzMpCi0JcHVucGNraHdkIHhtbTMseG1tNQkJOyB4bW0zPSg0MiA0MyA1MiA1MyA2MiA2MyA3MiA3MykKKyAgICAgICAgbW92ZHFhICAgIHhtbTEseG1tNiAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICAgICAgcHVucGNrbHdkIHhtbTYseG1tMiAgICAgICAgICAgICA7IHhtbTY9KDAwIDAxIDEwIDExIDIwIDIxIDMwIDMxKQorICAgICAgICBwdW5wY2tod2QgeG1tMSx4bW0yICAgICAgICAgICAgIDsgeG1tMT0oNDAgNDEgNTAgNTEgNjAgNjEgNzAgNzEpCisgICAgICAgIG1vdmRxYSAgICB4bW0zLHhtbTAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgICAgIHB1bnBja2x3ZCB4bW0wLHhtbTUgICAgICAgICAgICAgOyB4bW0wPSgwMiAwMyAxMiAxMyAyMiAyMyAzMiAzMykKKyAgICAgICAgcHVucGNraHdkIHhtbTMseG1tNSAgICAgICAgICAgICA7IHhtbTM9KDQyIDQzIDUyIDUzIDYyIDYzIDcyIDczKQogCi0JbW92ZHFhCXhtbTIsIFhNTVdPUkQgW3drKDMpXQk7IHhtbTI9Y29sNAotCW1vdmRxYQl4bW01LCBYTU1XT1JEIFt3ayg1KV0JOyB4bW01PWNvbDYKKyAgICAgICAgbW92ZHFhICB4bW0yLCBYTU1XT1JEIFt3aygzKV0gICA7IHhtbTI9Y29sNAorICAgICAgICBtb3ZkcWEgIHhtbTUsIFhNTVdPUkQgW3drKDUpXSAgIDsgeG1tNT1jb2w2CiAKLQk7IHhtbTI9KDA0IDE0IDI0IDM0IDQ0IDU0IDY0IDc0KSwgeG1tNT0oMDYgMTYgMjYgMzYgNDYgNTYgNjYgNzYpCi0JOyB4bW00PSgwNSAxNSAyNSAzNSA0NSA1NSA2NSA3NSksIHhtbTc9KDA3IDE3IDI3IDM3IDQ3IDU3IDY3IDc3KQorICAgICAgICA7IHhtbTI9KDA0IDE0IDI0IDM0IDQ0IDU0IDY0IDc0KSwgeG1tNT0oMDYgMTYgMjYgMzYgNDYgNTYgNjYgNzYpCisgICAgICAgIDsgeG1tND0oMDUgMTUgMjUgMzUgNDUgNTUgNjUgNzUpLCB4bW03PSgwNyAxNyAyNyAzNyA0NyA1NyA2NyA3NykKIAotCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTAJOyB3aygwKT0oMDIgMDMgMTIgMTMgMjIgMjMgMzIgMzMpCi0JbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tMwk7IHdrKDEpPSg0MiA0MyA1MiA1MyA2MiA2MyA3MiA3MykKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygwKV0sIHhtbTAgICA7IHdrKDApPSgwMiAwMyAxMiAxMyAyMiAyMyAzMiAzMykKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygxKV0sIHhtbTMgICA7IHdrKDEpPSg0MiA0MyA1MiA1MyA2MiA2MyA3MiA3MykKIAotCW1vdmRxYSAgICB4bW0wLHhtbTIJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQotCXB1bnBja2x3ZCB4bW0yLHhtbTQJCTsgeG1tMj0oMDQgMDUgMTQgMTUgMjQgMjUgMzQgMzUpCi0JcHVucGNraHdkIHhtbTAseG1tNAkJOyB4bW0wPSg0NCA0NSA1NCA1NSA2NCA2NSA3NCA3NSkKLQltb3ZkcWEgICAgeG1tMyx4bW01CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKLQlwdW5wY2tsd2QgeG1tNSx4bW03CQk7IHhtbTU9KDA2IDA3IDE2IDE3IDI2IDI3IDM2IDM3KQotCXB1bnBja2h3ZCB4bW0zLHhtbTcJCTsgeG1tMz0oNDYgNDcgNTYgNTcgNjYgNjcgNzYgNzcpCisgICAgICAgIG1vdmRxYSAgICB4bW0wLHhtbTIgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgICAgIHB1bnBja2x3ZCB4bW0yLHhtbTQgICAgICAgICAgICAgOyB4bW0yPSgwNCAwNSAxNCAxNSAyNCAyNSAzNCAzNSkKKyAgICAgICAgcHVucGNraHdkIHhtbTAseG1tNCAgICAgICAgICAgICA7IHhtbTA9KDQ0IDQ1IDU0IDU1IDY0IDY1IDc0IDc1KQorICAgICAgICBtb3ZkcWEgICAgeG1tMyx4bW01ICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgICAgICBwdW5wY2tsd2QgeG1tNSx4bW03ICAgICAgICAgICAgIDsgeG1tNT0oMDYgMDcgMTYgMTcgMjYgMjcgMzYgMzcpCisgICAgICAgIHB1bnBja2h3ZCB4bW0zLHhtbTcgICAgICAgICAgICAgOyB4bW0zPSg0NiA0NyA1NiA1NyA2NiA2NyA3NiA3NykKIAotCW1vdmRxYSAgICB4bW00LHhtbTIJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQotCXB1bnBja2xkcSB4bW0yLHhtbTUJCTsgeG1tMj0oMDQgMDUgMDYgMDcgMTQgMTUgMTYgMTcpCi0JcHVucGNraGRxIHhtbTQseG1tNQkJOyB4bW00PSgyNCAyNSAyNiAyNyAzNCAzNSAzNiAzNykKLQltb3ZkcWEgICAgeG1tNyx4bW0wCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKLQlwdW5wY2tsZHEgeG1tMCx4bW0zCQk7IHhtbTA9KDQ0IDQ1IDQ2IDQ3IDU0IDU1IDU2IDU3KQotCXB1bnBja2hkcSB4bW03LHhtbTMJCTsgeG1tNz0oNjQgNjUgNjYgNjcgNzQgNzUgNzYgNzcpCisgICAgICAgIG1vdmRxYSAgICB4bW00LHhtbTIgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgICAgIHB1bnBja2xkcSB4bW0yLHhtbTUgICAgICAgICAgICAgOyB4bW0yPSgwNCAwNSAwNiAwNyAxNCAxNSAxNiAxNykKKyAgICAgICAgcHVucGNraGRxIHhtbTQseG1tNSAgICAgICAgICAgICA7IHhtbTQ9KDI0IDI1IDI2IDI3IDM0IDM1IDM2IDM3KQorICAgICAgICBtb3ZkcWEgICAgeG1tNyx4bW0wICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgICAgICBwdW5wY2tsZHEgeG1tMCx4bW0zICAgICAgICAgICAgIDsgeG1tMD0oNDQgNDUgNDYgNDcgNTQgNTUgNTYgNTcpCisgICAgICAgIHB1bnBja2hkcSB4bW03LHhtbTMgICAgICAgICAgICAgOyB4bW03PSg2NCA2NSA2NiA2NyA3NCA3NSA3NiA3NykKIAotCW1vdmRxYQl4bW01LCBYTU1XT1JEIFt3aygwKV0JOyB4bW01PSgwMiAwMyAxMiAxMyAyMiAyMyAzMiAzMykKLQltb3ZkcWEJeG1tMywgWE1NV09SRCBbd2soMSldCTsgeG1tMz0oNDIgNDMgNTIgNTMgNjIgNjMgNzIgNzMpCi0JbW92ZHFhCVhNTVdPUkQgW3drKDIpXSwgeG1tNAk7IHdrKDIpPSgyNCAyNSAyNiAyNyAzNCAzNSAzNiAzNykKLQltb3ZkcWEJWE1NV09SRCBbd2soMyldLCB4bW0wCTsgd2soMyk9KDQ0IDQ1IDQ2IDQ3IDU0IDU1IDU2IDU3KQorICAgICAgICBtb3ZkcWEgIHhtbTUsIFhNTVdPUkQgW3drKDApXSAgIDsgeG1tNT0oMDIgMDMgMTIgMTMgMjIgMjMgMzIgMzMpCisgICAgICAgIG1vdmRxYSAgeG1tMywgWE1NV09SRCBbd2soMSldICAgOyB4bW0zPSg0MiA0MyA1MiA1MyA2MiA2MyA3MiA3MykKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygyKV0sIHhtbTQgICA7IHdrKDIpPSgyNCAyNSAyNiAyNyAzNCAzNSAzNiAzNykKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygzKV0sIHhtbTAgICA7IHdrKDMpPSg0NCA0NSA0NiA0NyA1NCA1NSA1NiA1NykKIAotCW1vdmRxYSAgICB4bW00LHhtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQotCXB1bnBja2xkcSB4bW02LHhtbTUJCTsgeG1tNj0oMDAgMDEgMDIgMDMgMTAgMTEgMTIgMTMpCi0JcHVucGNraGRxIHhtbTQseG1tNQkJOyB4bW00PSgyMCAyMSAyMiAyMyAzMCAzMSAzMiAzMykKLQltb3ZkcWEgICAgeG1tMCx4bW0xCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKLQlwdW5wY2tsZHEgeG1tMSx4bW0zCQk7IHhtbTE9KDQwIDQxIDQyIDQzIDUwIDUxIDUyIDUzKQotCXB1bnBja2hkcSB4bW0wLHhtbTMJCTsgeG1tMD0oNjAgNjEgNjIgNjMgNzAgNzEgNzIgNzMpCisgICAgICAgIG1vdmRxYSAgICB4bW00LHhtbTYgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgICAgIHB1bnBja2xkcSB4bW02LHhtbTUgICAgICAgICAgICAgOyB4bW02PSgwMCAwMSAwMiAwMyAxMCAxMSAxMiAxMykKKyAgICAgICAgcHVucGNraGRxIHhtbTQseG1tNSAgICAgICAgICAgICA7IHhtbTQ9KDIwIDIxIDIyIDIzIDMwIDMxIDMyIDMzKQorICAgICAgICBtb3ZkcWEgICAgeG1tMCx4bW0xICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgICAgICBwdW5wY2tsZHEgeG1tMSx4bW0zICAgICAgICAgICAgIDsgeG1tMT0oNDAgNDEgNDIgNDMgNTAgNTEgNTIgNTMpCisgICAgICAgIHB1bnBja2hkcSB4bW0wLHhtbTMgICAgICAgICAgICAgOyB4bW0wPSg2MCA2MSA2MiA2MyA3MCA3MSA3MiA3MykKIAotCW1vdmRxYSAgICAgeG1tNSx4bW02CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKLQlwdW5wY2tscWRxIHhtbTYseG1tMgkJOyB4bW02PSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNyk9ZGF0YTAKLQlwdW5wY2tocWRxIHhtbTUseG1tMgkJOyB4bW01PSgxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNyk9ZGF0YTEKLQltb3ZkcWEgICAgIHhtbTMseG1tMAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCi0JcHVucGNrbHFkcSB4bW0wLHhtbTcJCTsgeG1tMD0oNjAgNjEgNjIgNjMgNjQgNjUgNjYgNjcpPWRhdGE2Ci0JcHVucGNraHFkcSB4bW0zLHhtbTcJCTsgeG1tMz0oNzAgNzEgNzIgNzMgNzQgNzUgNzYgNzcpPWRhdGE3CisgICAgICAgIG1vdmRxYSAgICAgeG1tNSx4bW02ICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisgICAgICAgIHB1bnBja2xxZHEgeG1tNix4bW0yICAgICAgICAgICAgOyB4bW02PSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNyk9ZGF0YTAKKyAgICAgICAgcHVucGNraHFkcSB4bW01LHhtbTIgICAgICAgICAgICA7IHhtbTU9KDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3KT1kYXRhMQorICAgICAgICBtb3ZkcWEgICAgIHhtbTMseG1tMCAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorICAgICAgICBwdW5wY2tscWRxIHhtbTAseG1tNyAgICAgICAgICAgIDsgeG1tMD0oNjAgNjEgNjIgNjMgNjQgNjUgNjYgNjcpPWRhdGE2CisgICAgICAgIHB1bnBja2hxZHEgeG1tMyx4bW03ICAgICAgICAgICAgOyB4bW0zPSg3MCA3MSA3MiA3MyA3NCA3NSA3NiA3Nyk9ZGF0YTcKIAotCW1vdmRxYQl4bW0yLHhtbTUKLQltb3ZkcWEJeG1tNyx4bW02Ci0JcHN1YncJeG1tNSx4bW0wCQk7IHhtbTU9ZGF0YTEtZGF0YTY9dG1wNgotCXBzdWJ3CXhtbTYseG1tMwkJOyB4bW02PWRhdGEwLWRhdGE3PXRtcDcKLQlwYWRkdwl4bW0yLHhtbTAJCTsgeG1tMj1kYXRhMStkYXRhNj10bXAxCi0JcGFkZHcJeG1tNyx4bW0zCQk7IHhtbTc9ZGF0YTArZGF0YTc9dG1wMAorICAgICAgICBtb3ZkcWEgIHhtbTIseG1tNQorICAgICAgICBtb3ZkcWEgIHhtbTcseG1tNgorICAgICAgICBwc3VidyAgIHhtbTUseG1tMCAgICAgICAgICAgICAgIDsgeG1tNT1kYXRhMS1kYXRhNj10bXA2CisgICAgICAgIHBzdWJ3ICAgeG1tNix4bW0zICAgICAgICAgICAgICAgOyB4bW02PWRhdGEwLWRhdGE3PXRtcDcKKyAgICAgICAgcGFkZHcgICB4bW0yLHhtbTAgICAgICAgICAgICAgICA7IHhtbTI9ZGF0YTErZGF0YTY9dG1wMQorICAgICAgICBwYWRkdyAgIHhtbTcseG1tMyAgICAgICAgICAgICAgIDsgeG1tNz1kYXRhMCtkYXRhNz10bXAwCiAKLQltb3ZkcWEJeG1tMCwgWE1NV09SRCBbd2soMildCTsgeG1tMD0oMjQgMjUgMjYgMjcgMzQgMzUgMzYgMzcpCi0JbW92ZHFhCXhtbTMsIFhNTVdPUkQgW3drKDMpXQk7IHhtbTM9KDQ0IDQ1IDQ2IDQ3IDU0IDU1IDU2IDU3KQotCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTUJOyB3aygwKT10bXA2Ci0JbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tNgk7IHdrKDEpPXRtcDcKKyAgICAgICAgbW92ZHFhICB4bW0wLCBYTU1XT1JEIFt3aygyKV0gICA7IHhtbTA9KDI0IDI1IDI2IDI3IDM0IDM1IDM2IDM3KQorICAgICAgICBtb3ZkcWEgIHhtbTMsIFhNTVdPUkQgW3drKDMpXSAgIDsgeG1tMz0oNDQgNDUgNDYgNDcgNTQgNTUgNTYgNTcpCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMCldLCB4bW01ICAgOyB3aygwKT10bXA2CisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMSldLCB4bW02ICAgOyB3aygxKT10bXA3CiAKLQltb3ZkcWEgICAgIHhtbTUseG1tNAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCi0JcHVucGNrbHFkcSB4bW00LHhtbTAJCTsgeG1tND0oMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcpPWRhdGEyCi0JcHVucGNraHFkcSB4bW01LHhtbTAJCTsgeG1tNT0oMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcpPWRhdGEzCi0JbW92ZHFhICAgICB4bW02LHhtbTEJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQotCXB1bnBja2xxZHEgeG1tMSx4bW0zCQk7IHhtbTE9KDQwIDQxIDQyIDQzIDQ0IDQ1IDQ2IDQ3KT1kYXRhNAotCXB1bnBja2hxZHEgeG1tNix4bW0zCQk7IHhtbTY9KDUwIDUxIDUyIDUzIDU0IDU1IDU2IDU3KT1kYXRhNQorICAgICAgICBtb3ZkcWEgICAgIHhtbTUseG1tNCAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorICAgICAgICBwdW5wY2tscWRxIHhtbTQseG1tMCAgICAgICAgICAgIDsgeG1tND0oMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcpPWRhdGEyCisgICAgICAgIHB1bnBja2hxZHEgeG1tNSx4bW0wICAgICAgICAgICAgOyB4bW01PSgzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNyk9ZGF0YTMKKyAgICAgICAgbW92ZHFhICAgICB4bW02LHhtbTEgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKyAgICAgICAgcHVucGNrbHFkcSB4bW0xLHhtbTMgICAgICAgICAgICA7IHhtbTE9KDQwIDQxIDQyIDQzIDQ0IDQ1IDQ2IDQ3KT1kYXRhNAorICAgICAgICBwdW5wY2tocWRxIHhtbTYseG1tMyAgICAgICAgICAgIDsgeG1tNj0oNTAgNTEgNTIgNTMgNTQgNTUgNTYgNTcpPWRhdGE1CiAKLQltb3ZkcWEJeG1tMCx4bW01Ci0JbW92ZHFhCXhtbTMseG1tNAotCXBhZGR3CXhtbTUseG1tMQkJOyB4bW01PWRhdGEzK2RhdGE0PXRtcDMKLQlwYWRkdwl4bW00LHhtbTYJCTsgeG1tND1kYXRhMitkYXRhNT10bXAyCi0JcHN1YncJeG1tMCx4bW0xCQk7IHhtbTA9ZGF0YTMtZGF0YTQ9dG1wNAotCXBzdWJ3CXhtbTMseG1tNgkJOyB4bW0zPWRhdGEyLWRhdGE1PXRtcDUKKyAgICAgICAgbW92ZHFhICB4bW0wLHhtbTUKKyAgICAgICAgbW92ZHFhICB4bW0zLHhtbTQKKyAgICAgICAgcGFkZHcgICB4bW01LHhtbTEgICAgICAgICAgICAgICA7IHhtbTU9ZGF0YTMrZGF0YTQ9dG1wMworICAgICAgICBwYWRkdyAgIHhtbTQseG1tNiAgICAgICAgICAgICAgIDsgeG1tND1kYXRhMitkYXRhNT10bXAyCisgICAgICAgIHBzdWJ3ICAgeG1tMCx4bW0xICAgICAgICAgICAgICAgOyB4bW0wPWRhdGEzLWRhdGE0PXRtcDQKKyAgICAgICAgcHN1YncgICB4bW0zLHhtbTYgICAgICAgICAgICAgICA7IHhtbTM9ZGF0YTItZGF0YTU9dG1wNQogCi0JOyAtLSBFdmVuIHBhcnQKKyAgICAgICAgOyAtLSBFdmVuIHBhcnQKIAotCW1vdmRxYQl4bW0xLHhtbTcKLQltb3ZkcWEJeG1tNix4bW0yCi0JcGFkZHcJeG1tNyx4bW01CQk7IHhtbTc9dG1wMTAKLQlwYWRkdwl4bW0yLHhtbTQJCTsgeG1tMj10bXAxMQotCXBzdWJ3CXhtbTEseG1tNQkJOyB4bW0xPXRtcDEzCi0JcHN1YncJeG1tNix4bW00CQk7IHhtbTY9dG1wMTIKKyAgICAgICAgbW92ZHFhICB4bW0xLHhtbTcKKyAgICAgICAgbW92ZHFhICB4bW02LHhtbTIKKyAgICAgICAgcGFkZHcgICB4bW03LHhtbTUgICAgICAgICAgICAgICA7IHhtbTc9dG1wMTAKKyAgICAgICAgcGFkZHcgICB4bW0yLHhtbTQgICAgICAgICAgICAgICA7IHhtbTI9dG1wMTEKKyAgICAgICAgcHN1YncgICB4bW0xLHhtbTUgICAgICAgICAgICAgICA7IHhtbTE9dG1wMTMKKyAgICAgICAgcHN1YncgICB4bW02LHhtbTQgICAgICAgICAgICAgICA7IHhtbTY9dG1wMTIKIAotCW1vdmRxYQl4bW01LHhtbTcKLQlwYWRkdwl4bW03LHhtbTIJCTsgeG1tNz10bXAxMCt0bXAxMQotCXBzdWJ3CXhtbTUseG1tMgkJOyB4bW01PXRtcDEwLXRtcDExCisgICAgICAgIG1vdmRxYSAgeG1tNSx4bW03CisgICAgICAgIHBhZGR3ICAgeG1tNyx4bW0yICAgICAgICAgICAgICAgOyB4bW03PXRtcDEwK3RtcDExCisgICAgICAgIHBzdWJ3ICAgeG1tNSx4bW0yICAgICAgICAgICAgICAgOyB4bW01PXRtcDEwLXRtcDExCiAKLQlwYWRkdwl4bW03LFtyZWwgUFdfREVTQ0FMRV9QMlhdCi0JcGFkZHcJeG1tNSxbcmVsIFBXX0RFU0NBTEVfUDJYXQotCXBzcmF3CXhtbTcsUEFTUzFfQklUUwkJOyB4bW03PWRhdGEwCi0JcHNyYXcJeG1tNSxQQVNTMV9CSVRTCQk7IHhtbTU9ZGF0YTQKKyAgICAgICAgcGFkZHcgICB4bW03LFtyZWwgUFdfREVTQ0FMRV9QMlhdCisgICAgICAgIHBhZGR3ICAgeG1tNSxbcmVsIFBXX0RFU0NBTEVfUDJYXQorICAgICAgICBwc3JhdyAgIHhtbTcsUEFTUzFfQklUUyAgICAgICAgIDsgeG1tNz1kYXRhMAorICAgICAgICBwc3JhdyAgIHhtbTUsUEFTUzFfQklUUyAgICAgICAgIDsgeG1tNT1kYXRhNAogCi0JbW92ZHFhCVhNTVdPUkQgW1hNTUJMT0NLKDAsMCxyZHgsU0laRU9GX0RDVEVMRU0pXSwgeG1tNwotCW1vdmRxYQlYTU1XT1JEIFtYTU1CTE9DSyg0LDAscmR4LFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTUKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFtYTU1CTE9DSygwLDAscmR4LFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTcKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFtYTU1CTE9DSyg0LDAscmR4LFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTUKIAotCTsgKE9yaWdpbmFsKQotCTsgejEgPSAodG1wMTIgKyB0bXAxMykgKiAwLjU0MTE5NjEwMDsKLQk7IGRhdGEyID0gejEgKyB0bXAxMyAqIDAuNzY1MzY2ODY1OwotCTsgZGF0YTYgPSB6MSArIHRtcDEyICogLTEuODQ3NzU5MDY1OwotCTsKLQk7IChUaGlzIGltcGxlbWVudGF0aW9uKQotCTsgZGF0YTIgPSB0bXAxMyAqICgwLjU0MTE5NjEwMCArIDAuNzY1MzY2ODY1KSArIHRtcDEyICogMC41NDExOTYxMDA7Ci0JOyBkYXRhNiA9IHRtcDEzICogMC41NDExOTYxMDAgKyB0bXAxMiAqICgwLjU0MTE5NjEwMCAtIDEuODQ3NzU5MDY1KTsKKyAgICAgICAgOyAoT3JpZ2luYWwpCisgICAgICAgIDsgejEgPSAodG1wMTIgKyB0bXAxMykgKiAwLjU0MTE5NjEwMDsKKyAgICAgICAgOyBkYXRhMiA9IHoxICsgdG1wMTMgKiAwLjc2NTM2Njg2NTsKKyAgICAgICAgOyBkYXRhNiA9IHoxICsgdG1wMTIgKiAtMS44NDc3NTkwNjU7CisgICAgICAgIDsKKyAgICAgICAgOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKyAgICAgICAgOyBkYXRhMiA9IHRtcDEzICogKDAuNTQxMTk2MTAwICsgMC43NjUzNjY4NjUpICsgdG1wMTIgKiAwLjU0MTE5NjEwMDsKKyAgICAgICAgOyBkYXRhNiA9IHRtcDEzICogMC41NDExOTYxMDAgKyB0bXAxMiAqICgwLjU0MTE5NjEwMCAtIDEuODQ3NzU5MDY1KTsKIAotCW1vdmRxYSAgICB4bW00LHhtbTEJCTsgeG1tMT10bXAxMwotCW1vdmRxYSAgICB4bW0yLHhtbTEKLQlwdW5wY2tsd2QgeG1tNCx4bW02CQk7IHhtbTY9dG1wMTIKLQlwdW5wY2tod2QgeG1tMix4bW02Ci0JbW92ZHFhICAgIHhtbTEseG1tNAotCW1vdmRxYSAgICB4bW02LHhtbTIKLQlwbWFkZHdkICAgeG1tNCxbcmVsIFBXX0YxMzBfRjA1NF0JOyB4bW00PWRhdGEyTAotCXBtYWRkd2QgICB4bW0yLFtyZWwgUFdfRjEzMF9GMDU0XQk7IHhtbTI9ZGF0YTJICi0JcG1hZGR3ZCAgIHhtbTEsW3JlbCBQV19GMDU0X01GMTMwXQk7IHhtbTE9ZGF0YTZMCi0JcG1hZGR3ZCAgIHhtbTYsW3JlbCBQV19GMDU0X01GMTMwXQk7IHhtbTY9ZGF0YTZICisgICAgICAgIG1vdmRxYSAgICB4bW00LHhtbTEgICAgICAgICAgICAgOyB4bW0xPXRtcDEzCisgICAgICAgIG1vdmRxYSAgICB4bW0yLHhtbTEKKyAgICAgICAgcHVucGNrbHdkIHhtbTQseG1tNiAgICAgICAgICAgICA7IHhtbTY9dG1wMTIKKyAgICAgICAgcHVucGNraHdkIHhtbTIseG1tNgorICAgICAgICBtb3ZkcWEgICAgeG1tMSx4bW00CisgICAgICAgIG1vdmRxYSAgICB4bW02LHhtbTIKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTQsW3JlbCBQV19GMTMwX0YwNTRdICAgICAgIDsgeG1tND1kYXRhMkwKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTIsW3JlbCBQV19GMTMwX0YwNTRdICAgICAgIDsgeG1tMj1kYXRhMkgKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTEsW3JlbCBQV19GMDU0X01GMTMwXSAgICAgIDsgeG1tMT1kYXRhNkwKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTYsW3JlbCBQV19GMDU0X01GMTMwXSAgICAgIDsgeG1tNj1kYXRhNkgKIAotCXBhZGRkCXhtbTQsW3JlbCBQRF9ERVNDQUxFX1AyXQotCXBhZGRkCXhtbTIsW3JlbCBQRF9ERVNDQUxFX1AyXQotCXBzcmFkCXhtbTQsREVTQ0FMRV9QMgotCXBzcmFkCXhtbTIsREVTQ0FMRV9QMgotCXBhZGRkCXhtbTEsW3JlbCBQRF9ERVNDQUxFX1AyXQotCXBhZGRkCXhtbTYsW3JlbCBQRF9ERVNDQUxFX1AyXQotCXBzcmFkCXhtbTEsREVTQ0FMRV9QMgotCXBzcmFkCXhtbTYsREVTQ0FMRV9QMgorICAgICAgICBwYWRkZCAgIHhtbTQsW3JlbCBQRF9ERVNDQUxFX1AyXQorICAgICAgICBwYWRkZCAgIHhtbTIsW3JlbCBQRF9ERVNDQUxFX1AyXQorICAgICAgICBwc3JhZCAgIHhtbTQsREVTQ0FMRV9QMgorICAgICAgICBwc3JhZCAgIHhtbTIsREVTQ0FMRV9QMgorICAgICAgICBwYWRkZCAgIHhtbTEsW3JlbCBQRF9ERVNDQUxFX1AyXQorICAgICAgICBwYWRkZCAgIHhtbTYsW3JlbCBQRF9ERVNDQUxFX1AyXQorICAgICAgICBwc3JhZCAgIHhtbTEsREVTQ0FMRV9QMgorICAgICAgICBwc3JhZCAgIHhtbTYsREVTQ0FMRV9QMgogCi0JcGFja3NzZHcgIHhtbTQseG1tMgkJOyB4bW00PWRhdGEyCi0JcGFja3NzZHcgIHhtbTEseG1tNgkJOyB4bW0xPWRhdGE2CisgICAgICAgIHBhY2tzc2R3ICB4bW00LHhtbTIgICAgICAgICAgICAgOyB4bW00PWRhdGEyCisgICAgICAgIHBhY2tzc2R3ICB4bW0xLHhtbTYgICAgICAgICAgICAgOyB4bW0xPWRhdGE2CiAKLQltb3ZkcWEJWE1NV09SRCBbWE1NQkxPQ0soMiwwLHJkeCxTSVpFT0ZfRENURUxFTSldLCB4bW00Ci0JbW92ZHFhCVhNTVdPUkQgW1hNTUJMT0NLKDYsMCxyZHgsU0laRU9GX0RDVEVMRU0pXSwgeG1tMQorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxyZHgsU0laRU9GX0RDVEVMRU0pXSwgeG1tNAorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW1hNTUJMT0NLKDYsMCxyZHgsU0laRU9GX0RDVEVMRU0pXSwgeG1tMQogCi0JOyAtLSBPZGQgcGFydAorICAgICAgICA7IC0tIE9kZCBwYXJ0CiAKLQltb3ZkcWEJeG1tNywgWE1NV09SRCBbd2soMCldCTsgeG1tNz10bXA2Ci0JbW92ZHFhCXhtbTUsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTU9dG1wNworICAgICAgICBtb3ZkcWEgIHhtbTcsIFhNTVdPUkQgW3drKDApXSAgIDsgeG1tNz10bXA2CisgICAgICAgIG1vdmRxYSAgeG1tNSwgWE1NV09SRCBbd2soMSldICAgOyB4bW01PXRtcDcKIAotCW1vdmRxYQl4bW0yLHhtbTAJCTsgeG1tMD10bXA0Ci0JbW92ZHFhCXhtbTYseG1tMwkJOyB4bW0zPXRtcDUKLQlwYWRkdwl4bW0yLHhtbTcJCTsgeG1tMj16MwotCXBhZGR3CXhtbTYseG1tNQkJOyB4bW02PXo0CisgICAgICAgIG1vdmRxYSAgeG1tMix4bW0wICAgICAgICAgICAgICAgOyB4bW0wPXRtcDQKKyAgICAgICAgbW92ZHFhICB4bW02LHhtbTMgICAgICAgICAgICAgICA7IHhtbTM9dG1wNQorICAgICAgICBwYWRkdyAgIHhtbTIseG1tNyAgICAgICAgICAgICAgIDsgeG1tMj16MworICAgICAgICBwYWRkdyAgIHhtbTYseG1tNSAgICAgICAgICAgICAgIDsgeG1tNj16NAogCi0JOyAoT3JpZ2luYWwpCi0JOyB6NSA9ICh6MyArIHo0KSAqIDEuMTc1ODc1NjAyOwotCTsgejMgPSB6MyAqIC0xLjk2MTU3MDU2MDsgIHo0ID0gejQgKiAtMC4zOTAxODA2NDQ7Ci0JOyB6MyArPSB6NTsgIHo0ICs9IHo1OwotCTsKLQk7IChUaGlzIGltcGxlbWVudGF0aW9uKQotCTsgejMgPSB6MyAqICgxLjE3NTg3NTYwMiAtIDEuOTYxNTcwNTYwKSArIHo0ICogMS4xNzU4NzU2MDI7Ci0JOyB6NCA9IHozICogMS4xNzU4NzU2MDIgKyB6NCAqICgxLjE3NTg3NTYwMiAtIDAuMzkwMTgwNjQ0KTsKKyAgICAgICAgOyAoT3JpZ2luYWwpCisgICAgICAgIDsgejUgPSAoejMgKyB6NCkgKiAxLjE3NTg3NTYwMjsKKyAgICAgICAgOyB6MyA9IHozICogLTEuOTYxNTcwNTYwOyAgejQgPSB6NCAqIC0wLjM5MDE4MDY0NDsKKyAgICAgICAgOyB6MyArPSB6NTsgIHo0ICs9IHo1OworICAgICAgICA7CisgICAgICAgIDsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisgICAgICAgIDsgejMgPSB6MyAqICgxLjE3NTg3NTYwMiAtIDEuOTYxNTcwNTYwKSArIHo0ICogMS4xNzU4NzU2MDI7CisgICAgICAgIDsgejQgPSB6MyAqIDEuMTc1ODc1NjAyICsgejQgKiAoMS4xNzU4NzU2MDIgLSAwLjM5MDE4MDY0NCk7CiAKLQltb3ZkcWEgICAgeG1tNCx4bW0yCi0JbW92ZHFhICAgIHhtbTEseG1tMgotCXB1bnBja2x3ZCB4bW00LHhtbTYKLQlwdW5wY2tod2QgeG1tMSx4bW02Ci0JbW92ZHFhICAgIHhtbTIseG1tNAotCW1vdmRxYSAgICB4bW02LHhtbTEKLQlwbWFkZHdkICAgeG1tNCxbcmVsIFBXX01GMDc4X0YxMTddCTsgeG1tND16M0wKLQlwbWFkZHdkICAgeG1tMSxbcmVsIFBXX01GMDc4X0YxMTddCTsgeG1tMT16M0gKLQlwbWFkZHdkICAgeG1tMixbcmVsIFBXX0YxMTdfRjA3OF0JOyB4bW0yPXo0TAotCXBtYWRkd2QgICB4bW02LFtyZWwgUFdfRjExN19GMDc4XQk7IHhtbTY9ejRICisgICAgICAgIG1vdmRxYSAgICB4bW00LHhtbTIKKyAgICAgICAgbW92ZHFhICAgIHhtbTEseG1tMgorICAgICAgICBwdW5wY2tsd2QgeG1tNCx4bW02CisgICAgICAgIHB1bnBja2h3ZCB4bW0xLHhtbTYKKyAgICAgICAgbW92ZHFhICAgIHhtbTIseG1tNAorICAgICAgICBtb3ZkcWEgICAgeG1tNix4bW0xCisgICAgICAgIHBtYWRkd2QgICB4bW00LFtyZWwgUFdfTUYwNzhfRjExN10gICAgICA7IHhtbTQ9ejNMCisgICAgICAgIHBtYWRkd2QgICB4bW0xLFtyZWwgUFdfTUYwNzhfRjExN10gICAgICA7IHhtbTE9ejNICisgICAgICAgIHBtYWRkd2QgICB4bW0yLFtyZWwgUFdfRjExN19GMDc4XSAgICAgICA7IHhtbTI9ejRMCisgICAgICAgIHBtYWRkd2QgICB4bW02LFtyZWwgUFdfRjExN19GMDc4XSAgICAgICA7IHhtbTY9ejRICiAKLQltb3ZkcWEJWE1NV09SRCBbd2soMCldLCB4bW00CTsgd2soMCk9ejNMCi0JbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tMQk7IHdrKDEpPXozSAorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDApXSwgeG1tNCAgIDsgd2soMCk9ejNMCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMSldLCB4bW0xICAgOyB3aygxKT16M0gKIAotCTsgKE9yaWdpbmFsKQotCTsgejEgPSB0bXA0ICsgdG1wNzsgIHoyID0gdG1wNSArIHRtcDY7Ci0JOyB0bXA0ID0gdG1wNCAqIDAuMjk4NjMxMzM2OyAgdG1wNSA9IHRtcDUgKiAyLjA1MzExOTg2OTsKLQk7IHRtcDYgPSB0bXA2ICogMy4wNzI3MTEwMjY7ICB0bXA3ID0gdG1wNyAqIDEuNTAxMzIxMTEwOwotCTsgejEgPSB6MSAqIC0wLjg5OTk3NjIyMzsgIHoyID0gejIgKiAtMi41NjI5MTU0NDc7Ci0JOyBkYXRhNyA9IHRtcDQgKyB6MSArIHozOyAgZGF0YTUgPSB0bXA1ICsgejIgKyB6NDsKLQk7IGRhdGEzID0gdG1wNiArIHoyICsgejM7ICBkYXRhMSA9IHRtcDcgKyB6MSArIHo0OwotCTsKLQk7IChUaGlzIGltcGxlbWVudGF0aW9uKQotCTsgdG1wNCA9IHRtcDQgKiAoMC4yOTg2MzEzMzYgLSAwLjg5OTk3NjIyMykgKyB0bXA3ICogLTAuODk5OTc2MjIzOwotCTsgdG1wNSA9IHRtcDUgKiAoMi4wNTMxMTk4NjkgLSAyLjU2MjkxNTQ0NykgKyB0bXA2ICogLTIuNTYyOTE1NDQ3OwotCTsgdG1wNiA9IHRtcDUgKiAtMi41NjI5MTU0NDcgKyB0bXA2ICogKDMuMDcyNzExMDI2IC0gMi41NjI5MTU0NDcpOwotCTsgdG1wNyA9IHRtcDQgKiAtMC44OTk5NzYyMjMgKyB0bXA3ICogKDEuNTAxMzIxMTEwIC0gMC44OTk5NzYyMjMpOwotCTsgZGF0YTcgPSB0bXA0ICsgejM7ICBkYXRhNSA9IHRtcDUgKyB6NDsKLQk7IGRhdGEzID0gdG1wNiArIHozOyAgZGF0YTEgPSB0bXA3ICsgejQ7CisgICAgICAgIDsgKE9yaWdpbmFsKQorICAgICAgICA7IHoxID0gdG1wNCArIHRtcDc7ICB6MiA9IHRtcDUgKyB0bXA2OworICAgICAgICA7IHRtcDQgPSB0bXA0ICogMC4yOTg2MzEzMzY7ICB0bXA1ID0gdG1wNSAqIDIuMDUzMTE5ODY5OworICAgICAgICA7IHRtcDYgPSB0bXA2ICogMy4wNzI3MTEwMjY7ICB0bXA3ID0gdG1wNyAqIDEuNTAxMzIxMTEwOworICAgICAgICA7IHoxID0gejEgKiAtMC44OTk5NzYyMjM7ICB6MiA9IHoyICogLTIuNTYyOTE1NDQ3OworICAgICAgICA7IGRhdGE3ID0gdG1wNCArIHoxICsgejM7ICBkYXRhNSA9IHRtcDUgKyB6MiArIHo0OworICAgICAgICA7IGRhdGEzID0gdG1wNiArIHoyICsgejM7ICBkYXRhMSA9IHRtcDcgKyB6MSArIHo0OworICAgICAgICA7CisgICAgICAgIDsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisgICAgICAgIDsgdG1wNCA9IHRtcDQgKiAoMC4yOTg2MzEzMzYgLSAwLjg5OTk3NjIyMykgKyB0bXA3ICogLTAuODk5OTc2MjIzOworICAgICAgICA7IHRtcDUgPSB0bXA1ICogKDIuMDUzMTE5ODY5IC0gMi41NjI5MTU0NDcpICsgdG1wNiAqIC0yLjU2MjkxNTQ0NzsKKyAgICAgICAgOyB0bXA2ID0gdG1wNSAqIC0yLjU2MjkxNTQ0NyArIHRtcDYgKiAoMy4wNzI3MTEwMjYgLSAyLjU2MjkxNTQ0Nyk7CisgICAgICAgIDsgdG1wNyA9IHRtcDQgKiAtMC44OTk5NzYyMjMgKyB0bXA3ICogKDEuNTAxMzIxMTEwIC0gMC44OTk5NzYyMjMpOworICAgICAgICA7IGRhdGE3ID0gdG1wNCArIHozOyAgZGF0YTUgPSB0bXA1ICsgejQ7CisgICAgICAgIDsgZGF0YTMgPSB0bXA2ICsgejM7ICBkYXRhMSA9IHRtcDcgKyB6NDsKIAotCW1vdmRxYSAgICB4bW00LHhtbTAKLQltb3ZkcWEgICAgeG1tMSx4bW0wCi0JcHVucGNrbHdkIHhtbTQseG1tNQotCXB1bnBja2h3ZCB4bW0xLHhtbTUKLQltb3ZkcWEgICAgeG1tMCx4bW00Ci0JbW92ZHFhICAgIHhtbTUseG1tMQotCXBtYWRkd2QgICB4bW00LFtyZWwgUFdfTUYwNjBfTUYwODldCTsgeG1tND10bXA0TAotCXBtYWRkd2QgICB4bW0xLFtyZWwgUFdfTUYwNjBfTUYwODldCTsgeG1tMT10bXA0SAotCXBtYWRkd2QgICB4bW0wLFtyZWwgUFdfTUYwODlfRjA2MF0JOyB4bW0wPXRtcDdMCi0JcG1hZGR3ZCAgIHhtbTUsW3JlbCBQV19NRjA4OV9GMDYwXQk7IHhtbTU9dG1wN0gKKyAgICAgICAgbW92ZHFhICAgIHhtbTQseG1tMAorICAgICAgICBtb3ZkcWEgICAgeG1tMSx4bW0wCisgICAgICAgIHB1bnBja2x3ZCB4bW00LHhtbTUKKyAgICAgICAgcHVucGNraHdkIHhtbTEseG1tNQorICAgICAgICBtb3ZkcWEgICAgeG1tMCx4bW00CisgICAgICAgIG1vdmRxYSAgICB4bW01LHhtbTEKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTQsW3JlbCBQV19NRjA2MF9NRjA4OV0gICAgIDsgeG1tND10bXA0TAorICAgICAgICBwbWFkZHdkICAgeG1tMSxbcmVsIFBXX01GMDYwX01GMDg5XSAgICAgOyB4bW0xPXRtcDRICisgICAgICAgIHBtYWRkd2QgICB4bW0wLFtyZWwgUFdfTUYwODlfRjA2MF0gICAgICA7IHhtbTA9dG1wN0wKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTUsW3JlbCBQV19NRjA4OV9GMDYwXSAgICAgIDsgeG1tNT10bXA3SAogCi0JcGFkZGQJeG1tNCwgWE1NV09SRCBbd2soMCldCTsgeG1tND1kYXRhN0wKLQlwYWRkZAl4bW0xLCBYTU1XT1JEIFt3aygxKV0JOyB4bW0xPWRhdGE3SAotCXBhZGRkCXhtbTAseG1tMgkJOyB4bW0wPWRhdGExTAotCXBhZGRkCXhtbTUseG1tNgkJOyB4bW01PWRhdGExSAorICAgICAgICBwYWRkZCAgIHhtbTQsIFhNTVdPUkQgW3drKDApXSAgIDsgeG1tND1kYXRhN0wKKyAgICAgICAgcGFkZGQgICB4bW0xLCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTE9ZGF0YTdICisgICAgICAgIHBhZGRkICAgeG1tMCx4bW0yICAgICAgICAgICAgICAgOyB4bW0wPWRhdGExTAorICAgICAgICBwYWRkZCAgIHhtbTUseG1tNiAgICAgICAgICAgICAgIDsgeG1tNT1kYXRhMUgKIAotCXBhZGRkCXhtbTQsW3JlbCBQRF9ERVNDQUxFX1AyXQotCXBhZGRkCXhtbTEsW3JlbCBQRF9ERVNDQUxFX1AyXQotCXBzcmFkCXhtbTQsREVTQ0FMRV9QMgotCXBzcmFkCXhtbTEsREVTQ0FMRV9QMgotCXBhZGRkCXhtbTAsW3JlbCBQRF9ERVNDQUxFX1AyXQotCXBhZGRkCXhtbTUsW3JlbCBQRF9ERVNDQUxFX1AyXQotCXBzcmFkCXhtbTAsREVTQ0FMRV9QMgotCXBzcmFkCXhtbTUsREVTQ0FMRV9QMgorICAgICAgICBwYWRkZCAgIHhtbTQsW3JlbCBQRF9ERVNDQUxFX1AyXQorICAgICAgICBwYWRkZCAgIHhtbTEsW3JlbCBQRF9ERVNDQUxFX1AyXQorICAgICAgICBwc3JhZCAgIHhtbTQsREVTQ0FMRV9QMgorICAgICAgICBwc3JhZCAgIHhtbTEsREVTQ0FMRV9QMgorICAgICAgICBwYWRkZCAgIHhtbTAsW3JlbCBQRF9ERVNDQUxFX1AyXQorICAgICAgICBwYWRkZCAgIHhtbTUsW3JlbCBQRF9ERVNDQUxFX1AyXQorICAgICAgICBwc3JhZCAgIHhtbTAsREVTQ0FMRV9QMgorICAgICAgICBwc3JhZCAgIHhtbTUsREVTQ0FMRV9QMgogCi0JcGFja3NzZHcgIHhtbTQseG1tMQkJOyB4bW00PWRhdGE3Ci0JcGFja3NzZHcgIHhtbTAseG1tNQkJOyB4bW0wPWRhdGExCisgICAgICAgIHBhY2tzc2R3ICB4bW00LHhtbTEgICAgICAgICAgICAgOyB4bW00PWRhdGE3CisgICAgICAgIHBhY2tzc2R3ICB4bW0wLHhtbTUgICAgICAgICAgICAgOyB4bW0wPWRhdGExCiAKLQltb3ZkcWEJWE1NV09SRCBbWE1NQkxPQ0soNywwLHJkeCxTSVpFT0ZfRENURUxFTSldLCB4bW00Ci0JbW92ZHFhCVhNTVdPUkQgW1hNTUJMT0NLKDEsMCxyZHgsU0laRU9GX0RDVEVMRU0pXSwgeG1tMAorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxyZHgsU0laRU9GX0RDVEVMRU0pXSwgeG1tNAorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxyZHgsU0laRU9GX0RDVEVMRU0pXSwgeG1tMAogCi0JbW92ZHFhICAgIHhtbTEseG1tMwotCW1vdmRxYSAgICB4bW01LHhtbTMKLQlwdW5wY2tsd2QgeG1tMSx4bW03Ci0JcHVucGNraHdkIHhtbTUseG1tNwotCW1vdmRxYSAgICB4bW0zLHhtbTEKLQltb3ZkcWEgICAgeG1tNyx4bW01Ci0JcG1hZGR3ZCAgIHhtbTEsW3JlbCBQV19NRjA1MF9NRjI1Nl0JOyB4bW0xPXRtcDVMCi0JcG1hZGR3ZCAgIHhtbTUsW3JlbCBQV19NRjA1MF9NRjI1Nl0JOyB4bW01PXRtcDVICi0JcG1hZGR3ZCAgIHhtbTMsW3JlbCBQV19NRjI1Nl9GMDUwXQk7IHhtbTM9dG1wNkwKLQlwbWFkZHdkICAgeG1tNyxbcmVsIFBXX01GMjU2X0YwNTBdCTsgeG1tNz10bXA2SAorICAgICAgICBtb3ZkcWEgICAgeG1tMSx4bW0zCisgICAgICAgIG1vdmRxYSAgICB4bW01LHhtbTMKKyAgICAgICAgcHVucGNrbHdkIHhtbTEseG1tNworICAgICAgICBwdW5wY2tod2QgeG1tNSx4bW03CisgICAgICAgIG1vdmRxYSAgICB4bW0zLHhtbTEKKyAgICAgICAgbW92ZHFhICAgIHhtbTcseG1tNQorICAgICAgICBwbWFkZHdkICAgeG1tMSxbcmVsIFBXX01GMDUwX01GMjU2XSAgICAgOyB4bW0xPXRtcDVMCisgICAgICAgIHBtYWRkd2QgICB4bW01LFtyZWwgUFdfTUYwNTBfTUYyNTZdICAgICA7IHhtbTU9dG1wNUgKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTMsW3JlbCBQV19NRjI1Nl9GMDUwXSAgICAgIDsgeG1tMz10bXA2TAorICAgICAgICBwbWFkZHdkICAgeG1tNyxbcmVsIFBXX01GMjU2X0YwNTBdICAgICAgOyB4bW03PXRtcDZICiAKLQlwYWRkZAl4bW0xLHhtbTIJCTsgeG1tMT1kYXRhNUwKLQlwYWRkZAl4bW01LHhtbTYJCTsgeG1tNT1kYXRhNUgKLQlwYWRkZAl4bW0zLCBYTU1XT1JEIFt3aygwKV0JOyB4bW0zPWRhdGEzTAotCXBhZGRkCXhtbTcsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTc9ZGF0YTNICisgICAgICAgIHBhZGRkICAgeG1tMSx4bW0yICAgICAgICAgICAgICAgOyB4bW0xPWRhdGE1TAorICAgICAgICBwYWRkZCAgIHhtbTUseG1tNiAgICAgICAgICAgICAgIDsgeG1tNT1kYXRhNUgKKyAgICAgICAgcGFkZGQgICB4bW0zLCBYTU1XT1JEIFt3aygwKV0gICA7IHhtbTM9ZGF0YTNMCisgICAgICAgIHBhZGRkICAgeG1tNywgWE1NV09SRCBbd2soMSldICAgOyB4bW03PWRhdGEzSAogCi0JcGFkZGQJeG1tMSxbcmVsIFBEX0RFU0NBTEVfUDJdCi0JcGFkZGQJeG1tNSxbcmVsIFBEX0RFU0NBTEVfUDJdCi0JcHNyYWQJeG1tMSxERVNDQUxFX1AyCi0JcHNyYWQJeG1tNSxERVNDQUxFX1AyCi0JcGFkZGQJeG1tMyxbcmVsIFBEX0RFU0NBTEVfUDJdCi0JcGFkZGQJeG1tNyxbcmVsIFBEX0RFU0NBTEVfUDJdCi0JcHNyYWQJeG1tMyxERVNDQUxFX1AyCi0JcHNyYWQJeG1tNyxERVNDQUxFX1AyCisgICAgICAgIHBhZGRkICAgeG1tMSxbcmVsIFBEX0RFU0NBTEVfUDJdCisgICAgICAgIHBhZGRkICAgeG1tNSxbcmVsIFBEX0RFU0NBTEVfUDJdCisgICAgICAgIHBzcmFkICAgeG1tMSxERVNDQUxFX1AyCisgICAgICAgIHBzcmFkICAgeG1tNSxERVNDQUxFX1AyCisgICAgICAgIHBhZGRkICAgeG1tMyxbcmVsIFBEX0RFU0NBTEVfUDJdCisgICAgICAgIHBhZGRkICAgeG1tNyxbcmVsIFBEX0RFU0NBTEVfUDJdCisgICAgICAgIHBzcmFkICAgeG1tMyxERVNDQUxFX1AyCisgICAgICAgIHBzcmFkICAgeG1tNyxERVNDQUxFX1AyCiAKLQlwYWNrc3NkdyAgeG1tMSx4bW01CQk7IHhtbTE9ZGF0YTUKLQlwYWNrc3NkdyAgeG1tMyx4bW03CQk7IHhtbTM9ZGF0YTMKKyAgICAgICAgcGFja3NzZHcgIHhtbTEseG1tNSAgICAgICAgICAgICA7IHhtbTE9ZGF0YTUKKyAgICAgICAgcGFja3NzZHcgIHhtbTMseG1tNyAgICAgICAgICAgICA7IHhtbTM9ZGF0YTMKIAotCW1vdmRxYQlYTU1XT1JEIFtYTU1CTE9DSyg1LDAscmR4LFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTEKLQltb3ZkcWEJWE1NV09SRCBbWE1NQkxPQ0soMywwLHJkeCxTSVpFT0ZfRENURUxFTSldLCB4bW0zCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbWE1NQkxPQ0soNSwwLHJkeCxTSVpFT0ZfRENURUxFTSldLCB4bW0xCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbWE1NQkxPQ0soMywwLHJkeCxTSVpFT0ZfRENURUxFTSldLCB4bW0zCiAKLQl1bmNvbGxlY3RfYXJncwotCW1vdglyc3AscmJwCQk7IHJzcCA8LSBhbGlnbmVkIHJicAotCXBvcAlyc3AJCTsgcnNwIDwtIG9yaWdpbmFsIHJicAotCXBvcAlyYnAKLQlyZXQKKyAgICAgICAgdW5jb2xsZWN0X2FyZ3MKKyAgICAgICAgbW92ICAgICByc3AscmJwICAgICAgICAgOyByc3AgPC0gYWxpZ25lZCByYnAKKyAgICAgICAgcG9wICAgICByc3AgICAgICAgICAgICAgOyByc3AgPC0gb3JpZ2luYWwgcmJwCisgICAgICAgIHBvcCAgICAgcmJwCisgICAgICAgIHJldAogCiA7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQogOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgotCWFsaWduCTE2CisgICAgICAgIGFsaWduICAgMTYKZGlmZiAtLWdpdCBhL3NpbWQvamZzczJpbnQuYXNtIGIvc2ltZC9qZnNzMmludC5hc20KaW5kZXggNWUzZjJhYS4uZDFiY2IyZSAxMDA2NDQKLS0tIGEvc2ltZC9qZnNzMmludC5hc20KKysrIGIvc2ltZC9qZnNzMmludC5hc20KQEAgLTI2LDY3ICsyNiw2NyBAQAogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSVkZWZpbmUgQ09OU1RfQklUUwkxMwotJWRlZmluZSBQQVNTMV9CSVRTCTIKKyVkZWZpbmUgQ09OU1RfQklUUyAgICAgIDEzCislZGVmaW5lIFBBU1MxX0JJVFMgICAgICAyCiAKLSVkZWZpbmUgREVTQ0FMRV9QMQkoQ09OU1RfQklUUy1QQVNTMV9CSVRTKQotJWRlZmluZSBERVNDQUxFX1AyCShDT05TVF9CSVRTK1BBU1MxX0JJVFMpCislZGVmaW5lIERFU0NBTEVfUDEgICAgICAoQ09OU1RfQklUUy1QQVNTMV9CSVRTKQorJWRlZmluZSBERVNDQUxFX1AyICAgICAgKENPTlNUX0JJVFMrUEFTUzFfQklUUykKIAogJWlmIENPTlNUX0JJVFMgPT0gMTMKLUZfMF8yOTgJZXF1CSAyNDQ2CQk7IEZJWCgwLjI5ODYzMTMzNikKLUZfMF8zOTAJZXF1CSAzMTk2CQk7IEZJWCgwLjM5MDE4MDY0NCkKLUZfMF81NDEJZXF1CSA0NDMzCQk7IEZJWCgwLjU0MTE5NjEwMCkKLUZfMF83NjUJZXF1CSA2MjcwCQk7IEZJWCgwLjc2NTM2Njg2NSkKLUZfMF84OTkJZXF1CSA3MzczCQk7IEZJWCgwLjg5OTk3NjIyMykKLUZfMV8xNzUJZXF1CSA5NjMzCQk7IEZJWCgxLjE3NTg3NTYwMikKLUZfMV81MDEJZXF1CTEyMjk5CQk7IEZJWCgxLjUwMTMyMTExMCkKLUZfMV84NDcJZXF1CTE1MTM3CQk7IEZJWCgxLjg0Nzc1OTA2NSkKLUZfMV85NjEJZXF1CTE2MDY5CQk7IEZJWCgxLjk2MTU3MDU2MCkKLUZfMl8wNTMJZXF1CTE2ODE5CQk7IEZJWCgyLjA1MzExOTg2OSkKLUZfMl81NjIJZXF1CTIwOTk1CQk7IEZJWCgyLjU2MjkxNTQ0NykKLUZfM18wNzIJZXF1CTI1MTcyCQk7IEZJWCgzLjA3MjcxMTAyNikKK0ZfMF8yOTggZXF1ICAgICAgMjQ0NiAgICAgICAgICAgOyBGSVgoMC4yOTg2MzEzMzYpCitGXzBfMzkwIGVxdSAgICAgIDMxOTYgICAgICAgICAgIDsgRklYKDAuMzkwMTgwNjQ0KQorRl8wXzU0MSBlcXUgICAgICA0NDMzICAgICAgICAgICA7IEZJWCgwLjU0MTE5NjEwMCkKK0ZfMF83NjUgZXF1ICAgICAgNjI3MCAgICAgICAgICAgOyBGSVgoMC43NjUzNjY4NjUpCitGXzBfODk5IGVxdSAgICAgIDczNzMgICAgICAgICAgIDsgRklYKDAuODk5OTc2MjIzKQorRl8xXzE3NSBlcXUgICAgICA5NjMzICAgICAgICAgICA7IEZJWCgxLjE3NTg3NTYwMikKK0ZfMV81MDEgZXF1ICAgICAxMjI5OSAgICAgICAgICAgOyBGSVgoMS41MDEzMjExMTApCitGXzFfODQ3IGVxdSAgICAgMTUxMzcgICAgICAgICAgIDsgRklYKDEuODQ3NzU5MDY1KQorRl8xXzk2MSBlcXUgICAgIDE2MDY5ICAgICAgICAgICA7IEZJWCgxLjk2MTU3MDU2MCkKK0ZfMl8wNTMgZXF1ICAgICAxNjgxOSAgICAgICAgICAgOyBGSVgoMi4wNTMxMTk4NjkpCitGXzJfNTYyIGVxdSAgICAgMjA5OTUgICAgICAgICAgIDsgRklYKDIuNTYyOTE1NDQ3KQorRl8zXzA3MiBlcXUgICAgIDI1MTcyICAgICAgICAgICA7IEZJWCgzLjA3MjcxMTAyNikKICVlbHNlCiA7IE5BU00gY2Fubm90IGRvIGNvbXBpbGUtdGltZSBhcml0aG1ldGljIG9uIGZsb2F0aW5nLXBvaW50IGNvbnN0YW50cy4KICVkZWZpbmUgREVTQ0FMRSh4LG4pICAoKCh4KSsoMTw8KChuKS0xKSkpPj4obikpCi1GXzBfMjk4CWVxdQlERVNDQUxFKCAzMjA2NTI5NTUsMzAtQ09OU1RfQklUUykJOyBGSVgoMC4yOTg2MzEzMzYpCi1GXzBfMzkwCWVxdQlERVNDQUxFKCA0MTg5NTMyNzYsMzAtQ09OU1RfQklUUykJOyBGSVgoMC4zOTAxODA2NDQpCi1GXzBfNTQxCWVxdQlERVNDQUxFKCA1ODExMDQ4ODcsMzAtQ09OU1RfQklUUykJOyBGSVgoMC41NDExOTYxMDApCi1GXzBfNzY1CWVxdQlERVNDQUxFKCA4MjE4MDY0MTMsMzAtQ09OU1RfQklUUykJOyBGSVgoMC43NjUzNjY4NjUpCi1GXzBfODk5CWVxdQlERVNDQUxFKCA5NjYzNDIxMTEsMzAtQ09OU1RfQklUUykJOyBGSVgoMC44OTk5NzYyMjMpCi1GXzFfMTc1CWVxdQlERVNDQUxFKDEyNjI1ODY4MTMsMzAtQ09OU1RfQklUUykJOyBGSVgoMS4xNzU4NzU2MDIpCi1GXzFfNTAxCWVxdQlERVNDQUxFKDE2MTIwMzEyNjcsMzAtQ09OU1RfQklUUykJOyBGSVgoMS41MDEzMjExMTApCi1GXzFfODQ3CWVxdQlERVNDQUxFKDE5ODQwMTYxODgsMzAtQ09OU1RfQklUUykJOyBGSVgoMS44NDc3NTkwNjUpCi1GXzFfOTYxCWVxdQlERVNDQUxFKDIxMDYyMjAzNTAsMzAtQ09OU1RfQklUUykJOyBGSVgoMS45NjE1NzA1NjApCi1GXzJfMDUzCWVxdQlERVNDQUxFKDIyMDQ1MjA2NzMsMzAtQ09OU1RfQklUUykJOyBGSVgoMi4wNTMxMTk4NjkpCi1GXzJfNTYyCWVxdQlERVNDQUxFKDI3NTE5MDk1MDYsMzAtQ09OU1RfQklUUykJOyBGSVgoMi41NjI5MTU0NDcpCi1GXzNfMDcyCWVxdQlERVNDQUxFKDMyOTkyOTgzNDEsMzAtQ09OU1RfQklUUykJOyBGSVgoMy4wNzI3MTEwMjYpCitGXzBfMjk4IGVxdSAgICAgREVTQ0FMRSggMzIwNjUyOTU1LDMwLUNPTlNUX0JJVFMpICAgICAgIDsgRklYKDAuMjk4NjMxMzM2KQorRl8wXzM5MCBlcXUgICAgIERFU0NBTEUoIDQxODk1MzI3NiwzMC1DT05TVF9CSVRTKSAgICAgICA7IEZJWCgwLjM5MDE4MDY0NCkKK0ZfMF81NDEgZXF1ICAgICBERVNDQUxFKCA1ODExMDQ4ODcsMzAtQ09OU1RfQklUUykgICAgICAgOyBGSVgoMC41NDExOTYxMDApCitGXzBfNzY1IGVxdSAgICAgREVTQ0FMRSggODIxODA2NDEzLDMwLUNPTlNUX0JJVFMpICAgICAgIDsgRklYKDAuNzY1MzY2ODY1KQorRl8wXzg5OSBlcXUgICAgIERFU0NBTEUoIDk2NjM0MjExMSwzMC1DT05TVF9CSVRTKSAgICAgICA7IEZJWCgwLjg5OTk3NjIyMykKK0ZfMV8xNzUgZXF1ICAgICBERVNDQUxFKDEyNjI1ODY4MTMsMzAtQ09OU1RfQklUUykgICAgICAgOyBGSVgoMS4xNzU4NzU2MDIpCitGXzFfNTAxIGVxdSAgICAgREVTQ0FMRSgxNjEyMDMxMjY3LDMwLUNPTlNUX0JJVFMpICAgICAgIDsgRklYKDEuNTAxMzIxMTEwKQorRl8xXzg0NyBlcXUgICAgIERFU0NBTEUoMTk4NDAxNjE4OCwzMC1DT05TVF9CSVRTKSAgICAgICA7IEZJWCgxLjg0Nzc1OTA2NSkKK0ZfMV85NjEgZXF1ICAgICBERVNDQUxFKDIxMDYyMjAzNTAsMzAtQ09OU1RfQklUUykgICAgICAgOyBGSVgoMS45NjE1NzA1NjApCitGXzJfMDUzIGVxdSAgICAgREVTQ0FMRSgyMjA0NTIwNjczLDMwLUNPTlNUX0JJVFMpICAgICAgIDsgRklYKDIuMDUzMTE5ODY5KQorRl8yXzU2MiBlcXUgICAgIERFU0NBTEUoMjc1MTkwOTUwNiwzMC1DT05TVF9CSVRTKSAgICAgICA7IEZJWCgyLjU2MjkxNTQ0NykKK0ZfM18wNzIgZXF1ICAgICBERVNDQUxFKDMyOTkyOTgzNDEsMzAtQ09OU1RfQklUUykgICAgICAgOyBGSVgoMy4wNzI3MTEwMjYpCiAlZW5kaWYKIAogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCVNFQ1RJT04JU0VHX0NPTlNUCisgICAgICAgIFNFQ1RJT04gU0VHX0NPTlNUCiAKLQlhbGlnbnoJMTYKLQlnbG9iYWwJRVhUTihqY29uc3RfZmRjdF9pc2xvd19zc2UyKQorICAgICAgICBhbGlnbnogIDE2CisgICAgICAgIGdsb2JhbCAgRVhUTihqY29uc3RfZmRjdF9pc2xvd19zc2UyKQogCiBFWFROKGpjb25zdF9mZGN0X2lzbG93X3NzZTIpOgogCi1QV19GMTMwX0YwNTQJdGltZXMgNCBkdyAgKEZfMF81NDErRl8wXzc2NSksIEZfMF81NDEKLVBXX0YwNTRfTUYxMzAJdGltZXMgNCBkdyAgRl8wXzU0MSwgKEZfMF81NDEtRl8xXzg0NykKLVBXX01GMDc4X0YxMTcJdGltZXMgNCBkdyAgKEZfMV8xNzUtRl8xXzk2MSksIEZfMV8xNzUKLVBXX0YxMTdfRjA3OAl0aW1lcyA0IGR3ICBGXzFfMTc1LCAoRl8xXzE3NS1GXzBfMzkwKQotUFdfTUYwNjBfTUYwODkJdGltZXMgNCBkdyAgKEZfMF8yOTgtRl8wXzg5OSksLUZfMF84OTkKLVBXX01GMDg5X0YwNjAJdGltZXMgNCBkdyAtRl8wXzg5OSwgKEZfMV81MDEtRl8wXzg5OSkKLVBXX01GMDUwX01GMjU2CXRpbWVzIDQgZHcgIChGXzJfMDUzLUZfMl81NjIpLC1GXzJfNTYyCi1QV19NRjI1Nl9GMDUwCXRpbWVzIDQgZHcgLUZfMl81NjIsIChGXzNfMDcyLUZfMl81NjIpCi1QRF9ERVNDQUxFX1AxCXRpbWVzIDQgZGQgIDEgPDwgKERFU0NBTEVfUDEtMSkKLVBEX0RFU0NBTEVfUDIJdGltZXMgNCBkZCAgMSA8PCAoREVTQ0FMRV9QMi0xKQotUFdfREVTQ0FMRV9QMlgJdGltZXMgOCBkdyAgMSA8PCAoUEFTUzFfQklUUy0xKQorUFdfRjEzMF9GMDU0ICAgIHRpbWVzIDQgZHcgIChGXzBfNTQxK0ZfMF83NjUpLCBGXzBfNTQxCitQV19GMDU0X01GMTMwICAgdGltZXMgNCBkdyAgRl8wXzU0MSwgKEZfMF81NDEtRl8xXzg0NykKK1BXX01GMDc4X0YxMTcgICB0aW1lcyA0IGR3ICAoRl8xXzE3NS1GXzFfOTYxKSwgRl8xXzE3NQorUFdfRjExN19GMDc4ICAgIHRpbWVzIDQgZHcgIEZfMV8xNzUsIChGXzFfMTc1LUZfMF8zOTApCitQV19NRjA2MF9NRjA4OSAgdGltZXMgNCBkdyAgKEZfMF8yOTgtRl8wXzg5OSksLUZfMF84OTkKK1BXX01GMDg5X0YwNjAgICB0aW1lcyA0IGR3IC1GXzBfODk5LCAoRl8xXzUwMS1GXzBfODk5KQorUFdfTUYwNTBfTUYyNTYgIHRpbWVzIDQgZHcgIChGXzJfMDUzLUZfMl81NjIpLC1GXzJfNTYyCitQV19NRjI1Nl9GMDUwICAgdGltZXMgNCBkdyAtRl8yXzU2MiwgKEZfM18wNzItRl8yXzU2MikKK1BEX0RFU0NBTEVfUDEgICB0aW1lcyA0IGRkICAxIDw8IChERVNDQUxFX1AxLTEpCitQRF9ERVNDQUxFX1AyICAgdGltZXMgNCBkZCAgMSA8PCAoREVTQ0FMRV9QMi0xKQorUFdfREVTQ0FMRV9QMlggIHRpbWVzIDggZHcgIDEgPDwgKFBBU1MxX0JJVFMtMSkKIAotCWFsaWduegkxNgorICAgICAgICBhbGlnbnogIDE2CiAKIDsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlTRUNUSU9OCVNFR19URVhUCi0JQklUUwkzMgorICAgICAgICBTRUNUSU9OIFNFR19URVhUCisgICAgICAgIEJJVFMgICAgMzIKIDsKIDsgUGVyZm9ybSB0aGUgZm9yd2FyZCBEQ1Qgb24gb25lIGJsb2NrIG9mIHNhbXBsZXMuCiA7CkBAIC05NCw1NDEgKzk0LDU0MSBAQAogOyBqc2ltZF9mZGN0X2lzbG93X3NzZTIgKERDVEVMRU0gKiBkYXRhKQogOwogCi0lZGVmaW5lIGRhdGEoYikJCShiKSs4CQk7IERDVEVMRU0gKiBkYXRhCislZGVmaW5lIGRhdGEoYikgICAgICAgICAoYikrOCAgICAgICAgICAgOyBEQ1RFTEVNICogZGF0YQogCi0lZGVmaW5lIG9yaWdpbmFsX2VicAllYnArMAotJWRlZmluZSB3ayhpKQkJZWJwLShXS19OVU0tKGkpKSpTSVpFT0ZfWE1NV09SRAk7IHhtbXdvcmQgd2tbV0tfTlVNXQotJWRlZmluZSBXS19OVU0JCTYKKyVkZWZpbmUgb3JpZ2luYWxfZWJwICAgIGVicCswCislZGVmaW5lIHdrKGkpICAgICAgICAgICBlYnAtKFdLX05VTS0oaSkpKlNJWkVPRl9YTU1XT1JEIDsgeG1td29yZCB3a1tXS19OVU1dCislZGVmaW5lIFdLX05VTSAgICAgICAgICA2CiAKLQlhbGlnbgkxNgotCWdsb2JhbAlFWFROKGpzaW1kX2ZkY3RfaXNsb3dfc3NlMikKKyAgICAgICAgYWxpZ24gICAxNgorICAgICAgICBnbG9iYWwgIEVYVE4oanNpbWRfZmRjdF9pc2xvd19zc2UyKQogCiBFWFROKGpzaW1kX2ZkY3RfaXNsb3dfc3NlMik6Ci0JcHVzaAllYnAKLQltb3YJZWF4LGVzcAkJCQk7IGVheCA9IG9yaWdpbmFsIGVicAotCXN1Ygllc3AsIGJ5dGUgNAotCWFuZAllc3AsIGJ5dGUgKC1TSVpFT0ZfWE1NV09SRCkJOyBhbGlnbiB0byAxMjggYml0cwotCW1vdglbZXNwXSxlYXgKLQltb3YJZWJwLGVzcAkJCQk7IGVicCA9IGFsaWduZWQgZWJwCi0JbGVhCWVzcCwgW3drKDApXQotCXB1c2hwaWMJZWJ4Ci07CXB1c2gJZWN4CQk7IHVudXNlZAotOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLTsJcHVzaAllc2kJCTsgdW51c2VkCi07CXB1c2gJZWRpCQk7IHVudXNlZAorICAgICAgICBwdXNoICAgIGVicAorICAgICAgICBtb3YgICAgIGVheCxlc3AgICAgICAgICAgICAgICAgICAgICAgICAgOyBlYXggPSBvcmlnaW5hbCBlYnAKKyAgICAgICAgc3ViICAgICBlc3AsIGJ5dGUgNAorICAgICAgICBhbmQgICAgIGVzcCwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKSAgICAgOyBhbGlnbiB0byAxMjggYml0cworICAgICAgICBtb3YgICAgIFtlc3BdLGVheAorICAgICAgICBtb3YgICAgIGVicCxlc3AgICAgICAgICAgICAgICAgICAgICAgICAgOyBlYnAgPSBhbGlnbmVkIGVicAorICAgICAgICBsZWEgICAgIGVzcCwgW3drKDApXQorICAgICAgICBwdXNocGljIGVieAorOyAgICAgICBwdXNoICAgIGVjeCAgICAgICAgICAgICA7IHVudXNlZAorOyAgICAgICBwdXNoICAgIGVkeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgICAgICBwdXNoICAgIGVzaSAgICAgICAgICAgICA7IHVudXNlZAorOyAgICAgICBwdXNoICAgIGVkaSAgICAgICAgICAgICA7IHVudXNlZAogCi0JZ2V0X0dPVAllYngJCTsgZ2V0IEdPVCBhZGRyZXNzCisgICAgICAgIGdldF9HT1QgZWJ4ICAgICAgICAgICAgIDsgZ2V0IEdPVCBhZGRyZXNzCiAKLQk7IC0tLS0gUGFzcyAxOiBwcm9jZXNzIHJvd3MuCisgICAgICAgIDsgLS0tLSBQYXNzIDE6IHByb2Nlc3Mgcm93cy4KIAotCW1vdgllZHgsIFBPSU5URVIgW2RhdGEoZWF4KV0JOyAoRENURUxFTSAqKQorICAgICAgICBtb3YgICAgIGVkeCwgUE9JTlRFUiBbZGF0YShlYXgpXSAgICAgICAgOyAoRENURUxFTSAqKQogCi0JbW92ZHFhCXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQotCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KLQltb3ZkcWEJeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soMiwwLGVkeCxTSVpFT0ZfRENURUxFTSldCi0JbW92ZHFhCXhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorICAgICAgICBtb3ZkcWEgIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorICAgICAgICBtb3ZkcWEgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorICAgICAgICBtb3ZkcWEgIHhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorICAgICAgICBtb3ZkcWEgIHhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQogCi0JOyB4bW0wPSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNyksIHhtbTI9KDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3KQotCTsgeG1tMT0oMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcpLCB4bW0zPSgzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNykKKyAgICAgICAgOyB4bW0wPSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNyksIHhtbTI9KDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3KQorICAgICAgICA7IHhtbTE9KDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3KSwgeG1tMz0oMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcpCiAKLQltb3ZkcWEgICAgeG1tNCx4bW0wCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKLQlwdW5wY2tsd2QgeG1tMCx4bW0xCQk7IHhtbTA9KDAwIDEwIDAxIDExIDAyIDEyIDAzIDEzKQotCXB1bnBja2h3ZCB4bW00LHhtbTEJCTsgeG1tND0oMDQgMTQgMDUgMTUgMDYgMTYgMDcgMTcpCi0JbW92ZHFhICAgIHhtbTUseG1tMgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCi0JcHVucGNrbHdkIHhtbTIseG1tMwkJOyB4bW0yPSgyMCAzMCAyMSAzMSAyMiAzMiAyMyAzMykKLQlwdW5wY2tod2QgeG1tNSx4bW0zCQk7IHhtbTU9KDI0IDM0IDI1IDM1IDI2IDM2IDI3IDM3KQorICAgICAgICBtb3ZkcWEgICAgeG1tNCx4bW0wICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgICAgICBwdW5wY2tsd2QgeG1tMCx4bW0xICAgICAgICAgICAgIDsgeG1tMD0oMDAgMTAgMDEgMTEgMDIgMTIgMDMgMTMpCisgICAgICAgIHB1bnBja2h3ZCB4bW00LHhtbTEgICAgICAgICAgICAgOyB4bW00PSgwNCAxNCAwNSAxNSAwNiAxNiAwNyAxNykKKyAgICAgICAgbW92ZHFhICAgIHhtbTUseG1tMiAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICAgICAgcHVucGNrbHdkIHhtbTIseG1tMyAgICAgICAgICAgICA7IHhtbTI9KDIwIDMwIDIxIDMxIDIyIDMyIDIzIDMzKQorICAgICAgICBwdW5wY2tod2QgeG1tNSx4bW0zICAgICAgICAgICAgIDsgeG1tNT0oMjQgMzQgMjUgMzUgMjYgMzYgMjcgMzcpCiAKLQltb3ZkcWEJeG1tNiwgWE1NV09SRCBbWE1NQkxPQ0soNCwwLGVkeCxTSVpFT0ZfRENURUxFTSldCi0JbW92ZHFhCXhtbTcsIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQotCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSyg2LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KLQltb3ZkcWEJeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNywwLGVkeCxTSVpFT0ZfRENURUxFTSldCisgICAgICAgIG1vdmRxYSAgeG1tNiwgWE1NV09SRCBbWE1NQkxPQ0soNCwwLGVkeCxTSVpFT0ZfRENURUxFTSldCisgICAgICAgIG1vdmRxYSAgeG1tNywgWE1NV09SRCBbWE1NQkxPQ0soNSwwLGVkeCxTSVpFT0ZfRENURUxFTSldCisgICAgICAgIG1vdmRxYSAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNiwwLGVkeCxTSVpFT0ZfRENURUxFTSldCisgICAgICAgIG1vdmRxYSAgeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNywwLGVkeCxTSVpFT0ZfRENURUxFTSldCiAKLQk7IHhtbTY9KCA0IDEyIDIwIDI4IDM2IDQ0IDUyIDYwKSwgeG1tMT0oIDYgMTQgMjIgMzAgMzggNDYgNTQgNjIpCi0JOyB4bW03PSggNSAxMyAyMSAyOSAzNyA0NSA1MyA2MSksIHhtbTM9KCA3IDE1IDIzIDMxIDM5IDQ3IDU1IDYzKQorICAgICAgICA7IHhtbTY9KCA0IDEyIDIwIDI4IDM2IDQ0IDUyIDYwKSwgeG1tMT0oIDYgMTQgMjIgMzAgMzggNDYgNTQgNjIpCisgICAgICAgIDsgeG1tNz0oIDUgMTMgMjEgMjkgMzcgNDUgNTMgNjEpLCB4bW0zPSggNyAxNSAyMyAzMSAzOSA0NyA1NSA2MykKIAotCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTIJOyB3aygwKT0oMjAgMzAgMjEgMzEgMjIgMzIgMjMgMzMpCi0JbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tNQk7IHdrKDEpPSgyNCAzNCAyNSAzNSAyNiAzNiAyNyAzNykKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygwKV0sIHhtbTIgICA7IHdrKDApPSgyMCAzMCAyMSAzMSAyMiAzMiAyMyAzMykKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygxKV0sIHhtbTUgICA7IHdrKDEpPSgyNCAzNCAyNSAzNSAyNiAzNiAyNyAzNykKIAotCW1vdmRxYSAgICB4bW0yLHhtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQotCXB1bnBja2x3ZCB4bW02LHhtbTcJCTsgeG1tNj0oNDAgNTAgNDEgNTEgNDIgNTIgNDMgNTMpCi0JcHVucGNraHdkIHhtbTIseG1tNwkJOyB4bW0yPSg0NCA1NCA0NSA1NSA0NiA1NiA0NyA1NykKLQltb3ZkcWEgICAgeG1tNSx4bW0xCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKLQlwdW5wY2tsd2QgeG1tMSx4bW0zCQk7IHhtbTE9KDYwIDcwIDYxIDcxIDYyIDcyIDYzIDczKQotCXB1bnBja2h3ZCB4bW01LHhtbTMJCTsgeG1tNT0oNjQgNzQgNjUgNzUgNjYgNzYgNjcgNzcpCisgICAgICAgIG1vdmRxYSAgICB4bW0yLHhtbTYgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgICAgIHB1bnBja2x3ZCB4bW02LHhtbTcgICAgICAgICAgICAgOyB4bW02PSg0MCA1MCA0MSA1MSA0MiA1MiA0MyA1MykKKyAgICAgICAgcHVucGNraHdkIHhtbTIseG1tNyAgICAgICAgICAgICA7IHhtbTI9KDQ0IDU0IDQ1IDU1IDQ2IDU2IDQ3IDU3KQorICAgICAgICBtb3ZkcWEgICAgeG1tNSx4bW0xICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgICAgICBwdW5wY2tsd2QgeG1tMSx4bW0zICAgICAgICAgICAgIDsgeG1tMT0oNjAgNzAgNjEgNzEgNjIgNzIgNjMgNzMpCisgICAgICAgIHB1bnBja2h3ZCB4bW01LHhtbTMgICAgICAgICAgICAgOyB4bW01PSg2NCA3NCA2NSA3NSA2NiA3NiA2NyA3NykKIAotCW1vdmRxYSAgICB4bW03LHhtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQotCXB1bnBja2xkcSB4bW02LHhtbTEJCTsgeG1tNj0oNDAgNTAgNjAgNzAgNDEgNTEgNjEgNzEpCi0JcHVucGNraGRxIHhtbTcseG1tMQkJOyB4bW03PSg0MiA1MiA2MiA3MiA0MyA1MyA2MyA3MykKLQltb3ZkcWEgICAgeG1tMyx4bW0yCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKLQlwdW5wY2tsZHEgeG1tMix4bW01CQk7IHhtbTI9KDQ0IDU0IDY0IDc0IDQ1IDU1IDY1IDc1KQotCXB1bnBja2hkcSB4bW0zLHhtbTUJCTsgeG1tMz0oNDYgNTYgNjYgNzYgNDcgNTcgNjcgNzcpCisgICAgICAgIG1vdmRxYSAgICB4bW03LHhtbTYgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgICAgIHB1bnBja2xkcSB4bW02LHhtbTEgICAgICAgICAgICAgOyB4bW02PSg0MCA1MCA2MCA3MCA0MSA1MSA2MSA3MSkKKyAgICAgICAgcHVucGNraGRxIHhtbTcseG1tMSAgICAgICAgICAgICA7IHhtbTc9KDQyIDUyIDYyIDcyIDQzIDUzIDYzIDczKQorICAgICAgICBtb3ZkcWEgICAgeG1tMyx4bW0yICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgICAgICBwdW5wY2tsZHEgeG1tMix4bW01ICAgICAgICAgICAgIDsgeG1tMj0oNDQgNTQgNjQgNzQgNDUgNTUgNjUgNzUpCisgICAgICAgIHB1bnBja2hkcSB4bW0zLHhtbTUgICAgICAgICAgICAgOyB4bW0zPSg0NiA1NiA2NiA3NiA0NyA1NyA2NyA3NykKIAotCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFt3aygwKV0JOyB4bW0xPSgyMCAzMCAyMSAzMSAyMiAzMiAyMyAzMykKLQltb3ZkcWEJeG1tNSwgWE1NV09SRCBbd2soMSldCTsgeG1tNT0oMjQgMzQgMjUgMzUgMjYgMzYgMjcgMzcpCi0JbW92ZHFhCVhNTVdPUkQgW3drKDIpXSwgeG1tNwk7IHdrKDIpPSg0MiA1MiA2MiA3MiA0MyA1MyA2MyA3MykKLQltb3ZkcWEJWE1NV09SRCBbd2soMyldLCB4bW0yCTsgd2soMyk9KDQ0IDU0IDY0IDc0IDQ1IDU1IDY1IDc1KQorICAgICAgICBtb3ZkcWEgIHhtbTEsIFhNTVdPUkQgW3drKDApXSAgIDsgeG1tMT0oMjAgMzAgMjEgMzEgMjIgMzIgMjMgMzMpCisgICAgICAgIG1vdmRxYSAgeG1tNSwgWE1NV09SRCBbd2soMSldICAgOyB4bW01PSgyNCAzNCAyNSAzNSAyNiAzNiAyNyAzNykKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygyKV0sIHhtbTcgICA7IHdrKDIpPSg0MiA1MiA2MiA3MiA0MyA1MyA2MyA3MykKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygzKV0sIHhtbTIgICA7IHdrKDMpPSg0NCA1NCA2NCA3NCA0NSA1NSA2NSA3NSkKIAotCW1vdmRxYSAgICB4bW03LHhtbTAJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQotCXB1bnBja2xkcSB4bW0wLHhtbTEJCTsgeG1tMD0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEpCi0JcHVucGNraGRxIHhtbTcseG1tMQkJOyB4bW03PSgwMiAxMiAyMiAzMiAwMyAxMyAyMyAzMykKLQltb3ZkcWEgICAgeG1tMix4bW00CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKLQlwdW5wY2tsZHEgeG1tNCx4bW01CQk7IHhtbTQ9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1KQotCXB1bnBja2hkcSB4bW0yLHhtbTUJCTsgeG1tMj0oMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCisgICAgICAgIG1vdmRxYSAgICB4bW03LHhtbTAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgICAgIHB1bnBja2xkcSB4bW0wLHhtbTEgICAgICAgICAgICAgOyB4bW0wPSgwMCAxMCAyMCAzMCAwMSAxMSAyMSAzMSkKKyAgICAgICAgcHVucGNraGRxIHhtbTcseG1tMSAgICAgICAgICAgICA7IHhtbTc9KDAyIDEyIDIyIDMyIDAzIDEzIDIzIDMzKQorICAgICAgICBtb3ZkcWEgICAgeG1tMix4bW00ICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgICAgICBwdW5wY2tsZHEgeG1tNCx4bW01ICAgICAgICAgICAgIDsgeG1tND0oMDQgMTQgMjQgMzQgMDUgMTUgMjUgMzUpCisgICAgICAgIHB1bnBja2hkcSB4bW0yLHhtbTUgICAgICAgICAgICAgOyB4bW0yPSgwNiAxNiAyNiAzNiAwNyAxNyAyNyAzNykKIAotCW1vdmRxYSAgICAgeG1tMSx4bW0wCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKLQlwdW5wY2tscWRxIHhtbTAseG1tNgkJOyB4bW0wPSgwMCAxMCAyMCAzMCA0MCA1MCA2MCA3MCk9ZGF0YTAKLQlwdW5wY2tocWRxIHhtbTEseG1tNgkJOyB4bW0xPSgwMSAxMSAyMSAzMSA0MSA1MSA2MSA3MSk9ZGF0YTEKLQltb3ZkcWEgICAgIHhtbTUseG1tMgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCi0JcHVucGNrbHFkcSB4bW0yLHhtbTMJCTsgeG1tMj0oMDYgMTYgMjYgMzYgNDYgNTYgNjYgNzYpPWRhdGE2Ci0JcHVucGNraHFkcSB4bW01LHhtbTMJCTsgeG1tNT0oMDcgMTcgMjcgMzcgNDcgNTcgNjcgNzcpPWRhdGE3CisgICAgICAgIG1vdmRxYSAgICAgeG1tMSx4bW0wICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisgICAgICAgIHB1bnBja2xxZHEgeG1tMCx4bW02ICAgICAgICAgICAgOyB4bW0wPSgwMCAxMCAyMCAzMCA0MCA1MCA2MCA3MCk9ZGF0YTAKKyAgICAgICAgcHVucGNraHFkcSB4bW0xLHhtbTYgICAgICAgICAgICA7IHhtbTE9KDAxIDExIDIxIDMxIDQxIDUxIDYxIDcxKT1kYXRhMQorICAgICAgICBtb3ZkcWEgICAgIHhtbTUseG1tMiAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorICAgICAgICBwdW5wY2tscWRxIHhtbTIseG1tMyAgICAgICAgICAgIDsgeG1tMj0oMDYgMTYgMjYgMzYgNDYgNTYgNjYgNzYpPWRhdGE2CisgICAgICAgIHB1bnBja2hxZHEgeG1tNSx4bW0zICAgICAgICAgICAgOyB4bW01PSgwNyAxNyAyNyAzNyA0NyA1NyA2NyA3Nyk9ZGF0YTcKIAotCW1vdmRxYQl4bW02LHhtbTEKLQltb3ZkcWEJeG1tMyx4bW0wCi0JcHN1YncJeG1tMSx4bW0yCQk7IHhtbTE9ZGF0YTEtZGF0YTY9dG1wNgotCXBzdWJ3CXhtbTAseG1tNQkJOyB4bW0wPWRhdGEwLWRhdGE3PXRtcDcKLQlwYWRkdwl4bW02LHhtbTIJCTsgeG1tNj1kYXRhMStkYXRhNj10bXAxCi0JcGFkZHcJeG1tMyx4bW01CQk7IHhtbTM9ZGF0YTArZGF0YTc9dG1wMAorICAgICAgICBtb3ZkcWEgIHhtbTYseG1tMQorICAgICAgICBtb3ZkcWEgIHhtbTMseG1tMAorICAgICAgICBwc3VidyAgIHhtbTEseG1tMiAgICAgICAgICAgICAgIDsgeG1tMT1kYXRhMS1kYXRhNj10bXA2CisgICAgICAgIHBzdWJ3ICAgeG1tMCx4bW01ICAgICAgICAgICAgICAgOyB4bW0wPWRhdGEwLWRhdGE3PXRtcDcKKyAgICAgICAgcGFkZHcgICB4bW02LHhtbTIgICAgICAgICAgICAgICA7IHhtbTY9ZGF0YTErZGF0YTY9dG1wMQorICAgICAgICBwYWRkdyAgIHhtbTMseG1tNSAgICAgICAgICAgICAgIDsgeG1tMz1kYXRhMCtkYXRhNz10bXAwCiAKLQltb3ZkcWEJeG1tMiwgWE1NV09SRCBbd2soMildCTsgeG1tMj0oNDIgNTIgNjIgNzIgNDMgNTMgNjMgNzMpCi0JbW92ZHFhCXhtbTUsIFhNTVdPUkQgW3drKDMpXQk7IHhtbTU9KDQ0IDU0IDY0IDc0IDQ1IDU1IDY1IDc1KQotCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTEJOyB3aygwKT10bXA2Ci0JbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tMAk7IHdrKDEpPXRtcDcKKyAgICAgICAgbW92ZHFhICB4bW0yLCBYTU1XT1JEIFt3aygyKV0gICA7IHhtbTI9KDQyIDUyIDYyIDcyIDQzIDUzIDYzIDczKQorICAgICAgICBtb3ZkcWEgIHhtbTUsIFhNTVdPUkQgW3drKDMpXSAgIDsgeG1tNT0oNDQgNTQgNjQgNzQgNDUgNTUgNjUgNzUpCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMCldLCB4bW0xICAgOyB3aygwKT10bXA2CisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMSldLCB4bW0wICAgOyB3aygxKT10bXA3CiAKLQltb3ZkcWEgICAgIHhtbTEseG1tNwkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCi0JcHVucGNrbHFkcSB4bW03LHhtbTIJCTsgeG1tNz0oMDIgMTIgMjIgMzIgNDIgNTIgNjIgNzIpPWRhdGEyCi0JcHVucGNraHFkcSB4bW0xLHhtbTIJCTsgeG1tMT0oMDMgMTMgMjMgMzMgNDMgNTMgNjMgNzMpPWRhdGEzCi0JbW92ZHFhICAgICB4bW0wLHhtbTQJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQotCXB1bnBja2xxZHEgeG1tNCx4bW01CQk7IHhtbTQ9KDA0IDE0IDI0IDM0IDQ0IDU0IDY0IDc0KT1kYXRhNAotCXB1bnBja2hxZHEgeG1tMCx4bW01CQk7IHhtbTA9KDA1IDE1IDI1IDM1IDQ1IDU1IDY1IDc1KT1kYXRhNQorICAgICAgICBtb3ZkcWEgICAgIHhtbTEseG1tNyAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorICAgICAgICBwdW5wY2tscWRxIHhtbTcseG1tMiAgICAgICAgICAgIDsgeG1tNz0oMDIgMTIgMjIgMzIgNDIgNTIgNjIgNzIpPWRhdGEyCisgICAgICAgIHB1bnBja2hxZHEgeG1tMSx4bW0yICAgICAgICAgICAgOyB4bW0xPSgwMyAxMyAyMyAzMyA0MyA1MyA2MyA3Myk9ZGF0YTMKKyAgICAgICAgbW92ZHFhICAgICB4bW0wLHhtbTQgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKyAgICAgICAgcHVucGNrbHFkcSB4bW00LHhtbTUgICAgICAgICAgICA7IHhtbTQ9KDA0IDE0IDI0IDM0IDQ0IDU0IDY0IDc0KT1kYXRhNAorICAgICAgICBwdW5wY2tocWRxIHhtbTAseG1tNSAgICAgICAgICAgIDsgeG1tMD0oMDUgMTUgMjUgMzUgNDUgNTUgNjUgNzUpPWRhdGE1CiAKLQltb3ZkcWEJeG1tMix4bW0xCi0JbW92ZHFhCXhtbTUseG1tNwotCXBhZGR3CXhtbTEseG1tNAkJOyB4bW0xPWRhdGEzK2RhdGE0PXRtcDMKLQlwYWRkdwl4bW03LHhtbTAJCTsgeG1tNz1kYXRhMitkYXRhNT10bXAyCi0JcHN1YncJeG1tMix4bW00CQk7IHhtbTI9ZGF0YTMtZGF0YTQ9dG1wNAotCXBzdWJ3CXhtbTUseG1tMAkJOyB4bW01PWRhdGEyLWRhdGE1PXRtcDUKKyAgICAgICAgbW92ZHFhICB4bW0yLHhtbTEKKyAgICAgICAgbW92ZHFhICB4bW01LHhtbTcKKyAgICAgICAgcGFkZHcgICB4bW0xLHhtbTQgICAgICAgICAgICAgICA7IHhtbTE9ZGF0YTMrZGF0YTQ9dG1wMworICAgICAgICBwYWRkdyAgIHhtbTcseG1tMCAgICAgICAgICAgICAgIDsgeG1tNz1kYXRhMitkYXRhNT10bXAyCisgICAgICAgIHBzdWJ3ICAgeG1tMix4bW00ICAgICAgICAgICAgICAgOyB4bW0yPWRhdGEzLWRhdGE0PXRtcDQKKyAgICAgICAgcHN1YncgICB4bW01LHhtbTAgICAgICAgICAgICAgICA7IHhtbTU9ZGF0YTItZGF0YTU9dG1wNQogCi0JOyAtLSBFdmVuIHBhcnQKKyAgICAgICAgOyAtLSBFdmVuIHBhcnQKIAotCW1vdmRxYQl4bW00LHhtbTMKLQltb3ZkcWEJeG1tMCx4bW02Ci0JcGFkZHcJeG1tMyx4bW0xCQk7IHhtbTM9dG1wMTAKLQlwYWRkdwl4bW02LHhtbTcJCTsgeG1tNj10bXAxMQotCXBzdWJ3CXhtbTQseG1tMQkJOyB4bW00PXRtcDEzCi0JcHN1YncJeG1tMCx4bW03CQk7IHhtbTA9dG1wMTIKKyAgICAgICAgbW92ZHFhICB4bW00LHhtbTMKKyAgICAgICAgbW92ZHFhICB4bW0wLHhtbTYKKyAgICAgICAgcGFkZHcgICB4bW0zLHhtbTEgICAgICAgICAgICAgICA7IHhtbTM9dG1wMTAKKyAgICAgICAgcGFkZHcgICB4bW02LHhtbTcgICAgICAgICAgICAgICA7IHhtbTY9dG1wMTEKKyAgICAgICAgcHN1YncgICB4bW00LHhtbTEgICAgICAgICAgICAgICA7IHhtbTQ9dG1wMTMKKyAgICAgICAgcHN1YncgICB4bW0wLHhtbTcgICAgICAgICAgICAgICA7IHhtbTA9dG1wMTIKIAotCW1vdmRxYQl4bW0xLHhtbTMKLQlwYWRkdwl4bW0zLHhtbTYJCTsgeG1tMz10bXAxMCt0bXAxMQotCXBzdWJ3CXhtbTEseG1tNgkJOyB4bW0xPXRtcDEwLXRtcDExCisgICAgICAgIG1vdmRxYSAgeG1tMSx4bW0zCisgICAgICAgIHBhZGR3ICAgeG1tMyx4bW02ICAgICAgICAgICAgICAgOyB4bW0zPXRtcDEwK3RtcDExCisgICAgICAgIHBzdWJ3ICAgeG1tMSx4bW02ICAgICAgICAgICAgICAgOyB4bW0xPXRtcDEwLXRtcDExCiAKLQlwc2xsdwl4bW0zLFBBU1MxX0JJVFMJCTsgeG1tMz1kYXRhMAotCXBzbGx3CXhtbTEsUEFTUzFfQklUUwkJOyB4bW0xPWRhdGE0CisgICAgICAgIHBzbGx3ICAgeG1tMyxQQVNTMV9CSVRTICAgICAgICAgOyB4bW0zPWRhdGEwCisgICAgICAgIHBzbGx3ICAgeG1tMSxQQVNTMV9CSVRTICAgICAgICAgOyB4bW0xPWRhdGE0CiAKLQltb3ZkcWEJWE1NV09SRCBbd2soMildLCB4bW0zCTsgd2soMik9ZGF0YTAKLQltb3ZkcWEJWE1NV09SRCBbd2soMyldLCB4bW0xCTsgd2soMyk9ZGF0YTQKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygyKV0sIHhtbTMgICA7IHdrKDIpPWRhdGEwCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMyldLCB4bW0xICAgOyB3aygzKT1kYXRhNAogCi0JOyAoT3JpZ2luYWwpCi0JOyB6MSA9ICh0bXAxMiArIHRtcDEzKSAqIDAuNTQxMTk2MTAwOwotCTsgZGF0YTIgPSB6MSArIHRtcDEzICogMC43NjUzNjY4NjU7Ci0JOyBkYXRhNiA9IHoxICsgdG1wMTIgKiAtMS44NDc3NTkwNjU7Ci0JOwotCTsgKFRoaXMgaW1wbGVtZW50YXRpb24pCi0JOyBkYXRhMiA9IHRtcDEzICogKDAuNTQxMTk2MTAwICsgMC43NjUzNjY4NjUpICsgdG1wMTIgKiAwLjU0MTE5NjEwMDsKLQk7IGRhdGE2ID0gdG1wMTMgKiAwLjU0MTE5NjEwMCArIHRtcDEyICogKDAuNTQxMTk2MTAwIC0gMS44NDc3NTkwNjUpOworICAgICAgICA7IChPcmlnaW5hbCkKKyAgICAgICAgOyB6MSA9ICh0bXAxMiArIHRtcDEzKSAqIDAuNTQxMTk2MTAwOworICAgICAgICA7IGRhdGEyID0gejEgKyB0bXAxMyAqIDAuNzY1MzY2ODY1OworICAgICAgICA7IGRhdGE2ID0gejEgKyB0bXAxMiAqIC0xLjg0Nzc1OTA2NTsKKyAgICAgICAgOworICAgICAgICA7IChUaGlzIGltcGxlbWVudGF0aW9uKQorICAgICAgICA7IGRhdGEyID0gdG1wMTMgKiAoMC41NDExOTYxMDAgKyAwLjc2NTM2Njg2NSkgKyB0bXAxMiAqIDAuNTQxMTk2MTAwOworICAgICAgICA7IGRhdGE2ID0gdG1wMTMgKiAwLjU0MTE5NjEwMCArIHRtcDEyICogKDAuNTQxMTk2MTAwIC0gMS44NDc3NTkwNjUpOwogCi0JbW92ZHFhICAgIHhtbTcseG1tNAkJOyB4bW00PXRtcDEzCi0JbW92ZHFhICAgIHhtbTYseG1tNAotCXB1bnBja2x3ZCB4bW03LHhtbTAJCTsgeG1tMD10bXAxMgotCXB1bnBja2h3ZCB4bW02LHhtbTAKLQltb3ZkcWEgICAgeG1tNCx4bW03Ci0JbW92ZHFhICAgIHhtbTAseG1tNgotCXBtYWRkd2QgICB4bW03LFtHT1RPRkYoZWJ4LFBXX0YxMzBfRjA1NCldCTsgeG1tNz1kYXRhMkwKLQlwbWFkZHdkICAgeG1tNixbR09UT0ZGKGVieCxQV19GMTMwX0YwNTQpXQk7IHhtbTY9ZGF0YTJICi0JcG1hZGR3ZCAgIHhtbTQsW0dPVE9GRihlYngsUFdfRjA1NF9NRjEzMCldCTsgeG1tND1kYXRhNkwKLQlwbWFkZHdkICAgeG1tMCxbR09UT0ZGKGVieCxQV19GMDU0X01GMTMwKV0JOyB4bW0wPWRhdGE2SAorICAgICAgICBtb3ZkcWEgICAgeG1tNyx4bW00ICAgICAgICAgICAgIDsgeG1tND10bXAxMworICAgICAgICBtb3ZkcWEgICAgeG1tNix4bW00CisgICAgICAgIHB1bnBja2x3ZCB4bW03LHhtbTAgICAgICAgICAgICAgOyB4bW0wPXRtcDEyCisgICAgICAgIHB1bnBja2h3ZCB4bW02LHhtbTAKKyAgICAgICAgbW92ZHFhICAgIHhtbTQseG1tNworICAgICAgICBtb3ZkcWEgICAgeG1tMCx4bW02CisgICAgICAgIHBtYWRkd2QgICB4bW03LFtHT1RPRkYoZWJ4LFBXX0YxMzBfRjA1NCldICAgICAgIDsgeG1tNz1kYXRhMkwKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTYsW0dPVE9GRihlYngsUFdfRjEzMF9GMDU0KV0gICAgICAgOyB4bW02PWRhdGEySAorICAgICAgICBwbWFkZHdkICAgeG1tNCxbR09UT0ZGKGVieCxQV19GMDU0X01GMTMwKV0gICAgICA7IHhtbTQ9ZGF0YTZMCisgICAgICAgIHBtYWRkd2QgICB4bW0wLFtHT1RPRkYoZWJ4LFBXX0YwNTRfTUYxMzApXSAgICAgIDsgeG1tMD1kYXRhNkgKIAotCXBhZGRkCXhtbTcsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldCi0JcGFkZGQJeG1tNixbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0KLQlwc3JhZAl4bW03LERFU0NBTEVfUDEKLQlwc3JhZAl4bW02LERFU0NBTEVfUDEKLQlwYWRkZAl4bW00LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXQotCXBhZGRkCXhtbTAsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldCi0JcHNyYWQJeG1tNCxERVNDQUxFX1AxCi0JcHNyYWQJeG1tMCxERVNDQUxFX1AxCisgICAgICAgIHBhZGRkICAgeG1tNyxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0KKyAgICAgICAgcGFkZGQgICB4bW02LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXQorICAgICAgICBwc3JhZCAgIHhtbTcsREVTQ0FMRV9QMQorICAgICAgICBwc3JhZCAgIHhtbTYsREVTQ0FMRV9QMQorICAgICAgICBwYWRkZCAgIHhtbTQsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldCisgICAgICAgIHBhZGRkICAgeG1tMCxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0KKyAgICAgICAgcHNyYWQgICB4bW00LERFU0NBTEVfUDEKKyAgICAgICAgcHNyYWQgICB4bW0wLERFU0NBTEVfUDEKIAotCXBhY2tzc2R3ICB4bW03LHhtbTYJCTsgeG1tNz1kYXRhMgotCXBhY2tzc2R3ICB4bW00LHhtbTAJCTsgeG1tND1kYXRhNgorICAgICAgICBwYWNrc3NkdyAgeG1tNyx4bW02ICAgICAgICAgICAgIDsgeG1tNz1kYXRhMgorICAgICAgICBwYWNrc3NkdyAgeG1tNCx4bW0wICAgICAgICAgICAgIDsgeG1tND1kYXRhNgogCi0JbW92ZHFhCVhNTVdPUkQgW3drKDQpXSwgeG1tNwk7IHdrKDQpPWRhdGEyCi0JbW92ZHFhCVhNTVdPUkQgW3drKDUpXSwgeG1tNAk7IHdrKDUpPWRhdGE2CisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soNCldLCB4bW03ICAgOyB3ayg0KT1kYXRhMgorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDUpXSwgeG1tNCAgIDsgd2soNSk9ZGF0YTYKIAotCTsgLS0gT2RkIHBhcnQKKyAgICAgICAgOyAtLSBPZGQgcGFydAogCi0JbW92ZHFhCXhtbTMsIFhNTVdPUkQgW3drKDApXQk7IHhtbTM9dG1wNgotCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFt3aygxKV0JOyB4bW0xPXRtcDcKKyAgICAgICAgbW92ZHFhICB4bW0zLCBYTU1XT1JEIFt3aygwKV0gICA7IHhtbTM9dG1wNgorICAgICAgICBtb3ZkcWEgIHhtbTEsIFhNTVdPUkQgW3drKDEpXSAgIDsgeG1tMT10bXA3CiAKLQltb3ZkcWEJeG1tNix4bW0yCQk7IHhtbTI9dG1wNAotCW1vdmRxYQl4bW0wLHhtbTUJCTsgeG1tNT10bXA1Ci0JcGFkZHcJeG1tNix4bW0zCQk7IHhtbTY9ejMKLQlwYWRkdwl4bW0wLHhtbTEJCTsgeG1tMD16NAorICAgICAgICBtb3ZkcWEgIHhtbTYseG1tMiAgICAgICAgICAgICAgIDsgeG1tMj10bXA0CisgICAgICAgIG1vdmRxYSAgeG1tMCx4bW01ICAgICAgICAgICAgICAgOyB4bW01PXRtcDUKKyAgICAgICAgcGFkZHcgICB4bW02LHhtbTMgICAgICAgICAgICAgICA7IHhtbTY9ejMKKyAgICAgICAgcGFkZHcgICB4bW0wLHhtbTEgICAgICAgICAgICAgICA7IHhtbTA9ejQKIAotCTsgKE9yaWdpbmFsKQotCTsgejUgPSAoejMgKyB6NCkgKiAxLjE3NTg3NTYwMjsKLQk7IHozID0gejMgKiAtMS45NjE1NzA1NjA7ICB6NCA9IHo0ICogLTAuMzkwMTgwNjQ0OwotCTsgejMgKz0gejU7ICB6NCArPSB6NTsKLQk7Ci0JOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKLQk7IHozID0gejMgKiAoMS4xNzU4NzU2MDIgLSAxLjk2MTU3MDU2MCkgKyB6NCAqIDEuMTc1ODc1NjAyOwotCTsgejQgPSB6MyAqIDEuMTc1ODc1NjAyICsgejQgKiAoMS4xNzU4NzU2MDIgLSAwLjM5MDE4MDY0NCk7CisgICAgICAgIDsgKE9yaWdpbmFsKQorICAgICAgICA7IHo1ID0gKHozICsgejQpICogMS4xNzU4NzU2MDI7CisgICAgICAgIDsgejMgPSB6MyAqIC0xLjk2MTU3MDU2MDsgIHo0ID0gejQgKiAtMC4zOTAxODA2NDQ7CisgICAgICAgIDsgejMgKz0gejU7ICB6NCArPSB6NTsKKyAgICAgICAgOworICAgICAgICA7IChUaGlzIGltcGxlbWVudGF0aW9uKQorICAgICAgICA7IHozID0gejMgKiAoMS4xNzU4NzU2MDIgLSAxLjk2MTU3MDU2MCkgKyB6NCAqIDEuMTc1ODc1NjAyOworICAgICAgICA7IHo0ID0gejMgKiAxLjE3NTg3NTYwMiArIHo0ICogKDEuMTc1ODc1NjAyIC0gMC4zOTAxODA2NDQpOwogCi0JbW92ZHFhICAgIHhtbTcseG1tNgotCW1vdmRxYSAgICB4bW00LHhtbTYKLQlwdW5wY2tsd2QgeG1tNyx4bW0wCi0JcHVucGNraHdkIHhtbTQseG1tMAotCW1vdmRxYSAgICB4bW02LHhtbTcKLQltb3ZkcWEgICAgeG1tMCx4bW00Ci0JcG1hZGR3ZCAgIHhtbTcsW0dPVE9GRihlYngsUFdfTUYwNzhfRjExNyldCTsgeG1tNz16M0wKLQlwbWFkZHdkICAgeG1tNCxbR09UT0ZGKGVieCxQV19NRjA3OF9GMTE3KV0JOyB4bW00PXozSAotCXBtYWRkd2QgICB4bW02LFtHT1RPRkYoZWJ4LFBXX0YxMTdfRjA3OCldCTsgeG1tNj16NEwKLQlwbWFkZHdkICAgeG1tMCxbR09UT0ZGKGVieCxQV19GMTE3X0YwNzgpXQk7IHhtbTA9ejRICisgICAgICAgIG1vdmRxYSAgICB4bW03LHhtbTYKKyAgICAgICAgbW92ZHFhICAgIHhtbTQseG1tNgorICAgICAgICBwdW5wY2tsd2QgeG1tNyx4bW0wCisgICAgICAgIHB1bnBja2h3ZCB4bW00LHhtbTAKKyAgICAgICAgbW92ZHFhICAgIHhtbTYseG1tNworICAgICAgICBtb3ZkcWEgICAgeG1tMCx4bW00CisgICAgICAgIHBtYWRkd2QgICB4bW03LFtHT1RPRkYoZWJ4LFBXX01GMDc4X0YxMTcpXSAgICAgIDsgeG1tNz16M0wKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTQsW0dPVE9GRihlYngsUFdfTUYwNzhfRjExNyldICAgICAgOyB4bW00PXozSAorICAgICAgICBwbWFkZHdkICAgeG1tNixbR09UT0ZGKGVieCxQV19GMTE3X0YwNzgpXSAgICAgICA7IHhtbTY9ejRMCisgICAgICAgIHBtYWRkd2QgICB4bW0wLFtHT1RPRkYoZWJ4LFBXX0YxMTdfRjA3OCldICAgICAgIDsgeG1tMD16NEgKIAotCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTcJOyB3aygwKT16M0wKLQltb3ZkcWEJWE1NV09SRCBbd2soMSldLCB4bW00CTsgd2soMSk9ejNICisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMCldLCB4bW03ICAgOyB3aygwKT16M0wKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygxKV0sIHhtbTQgICA7IHdrKDEpPXozSAogCi0JOyAoT3JpZ2luYWwpCi0JOyB6MSA9IHRtcDQgKyB0bXA3OyAgejIgPSB0bXA1ICsgdG1wNjsKLQk7IHRtcDQgPSB0bXA0ICogMC4yOTg2MzEzMzY7ICB0bXA1ID0gdG1wNSAqIDIuMDUzMTE5ODY5OwotCTsgdG1wNiA9IHRtcDYgKiAzLjA3MjcxMTAyNjsgIHRtcDcgPSB0bXA3ICogMS41MDEzMjExMTA7Ci0JOyB6MSA9IHoxICogLTAuODk5OTc2MjIzOyAgejIgPSB6MiAqIC0yLjU2MjkxNTQ0NzsKLQk7IGRhdGE3ID0gdG1wNCArIHoxICsgejM7ICBkYXRhNSA9IHRtcDUgKyB6MiArIHo0OwotCTsgZGF0YTMgPSB0bXA2ICsgejIgKyB6MzsgIGRhdGExID0gdG1wNyArIHoxICsgejQ7Ci0JOwotCTsgKFRoaXMgaW1wbGVtZW50YXRpb24pCi0JOyB0bXA0ID0gdG1wNCAqICgwLjI5ODYzMTMzNiAtIDAuODk5OTc2MjIzKSArIHRtcDcgKiAtMC44OTk5NzYyMjM7Ci0JOyB0bXA1ID0gdG1wNSAqICgyLjA1MzExOTg2OSAtIDIuNTYyOTE1NDQ3KSArIHRtcDYgKiAtMi41NjI5MTU0NDc7Ci0JOyB0bXA2ID0gdG1wNSAqIC0yLjU2MjkxNTQ0NyArIHRtcDYgKiAoMy4wNzI3MTEwMjYgLSAyLjU2MjkxNTQ0Nyk7Ci0JOyB0bXA3ID0gdG1wNCAqIC0wLjg5OTk3NjIyMyArIHRtcDcgKiAoMS41MDEzMjExMTAgLSAwLjg5OTk3NjIyMyk7Ci0JOyBkYXRhNyA9IHRtcDQgKyB6MzsgIGRhdGE1ID0gdG1wNSArIHo0OwotCTsgZGF0YTMgPSB0bXA2ICsgejM7ICBkYXRhMSA9IHRtcDcgKyB6NDsKKyAgICAgICAgOyAoT3JpZ2luYWwpCisgICAgICAgIDsgejEgPSB0bXA0ICsgdG1wNzsgIHoyID0gdG1wNSArIHRtcDY7CisgICAgICAgIDsgdG1wNCA9IHRtcDQgKiAwLjI5ODYzMTMzNjsgIHRtcDUgPSB0bXA1ICogMi4wNTMxMTk4Njk7CisgICAgICAgIDsgdG1wNiA9IHRtcDYgKiAzLjA3MjcxMTAyNjsgIHRtcDcgPSB0bXA3ICogMS41MDEzMjExMTA7CisgICAgICAgIDsgejEgPSB6MSAqIC0wLjg5OTk3NjIyMzsgIHoyID0gejIgKiAtMi41NjI5MTU0NDc7CisgICAgICAgIDsgZGF0YTcgPSB0bXA0ICsgejEgKyB6MzsgIGRhdGE1ID0gdG1wNSArIHoyICsgejQ7CisgICAgICAgIDsgZGF0YTMgPSB0bXA2ICsgejIgKyB6MzsgIGRhdGExID0gdG1wNyArIHoxICsgejQ7CisgICAgICAgIDsKKyAgICAgICAgOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKyAgICAgICAgOyB0bXA0ID0gdG1wNCAqICgwLjI5ODYzMTMzNiAtIDAuODk5OTc2MjIzKSArIHRtcDcgKiAtMC44OTk5NzYyMjM7CisgICAgICAgIDsgdG1wNSA9IHRtcDUgKiAoMi4wNTMxMTk4NjkgLSAyLjU2MjkxNTQ0NykgKyB0bXA2ICogLTIuNTYyOTE1NDQ3OworICAgICAgICA7IHRtcDYgPSB0bXA1ICogLTIuNTYyOTE1NDQ3ICsgdG1wNiAqICgzLjA3MjcxMTAyNiAtIDIuNTYyOTE1NDQ3KTsKKyAgICAgICAgOyB0bXA3ID0gdG1wNCAqIC0wLjg5OTk3NjIyMyArIHRtcDcgKiAoMS41MDEzMjExMTAgLSAwLjg5OTk3NjIyMyk7CisgICAgICAgIDsgZGF0YTcgPSB0bXA0ICsgejM7ICBkYXRhNSA9IHRtcDUgKyB6NDsKKyAgICAgICAgOyBkYXRhMyA9IHRtcDYgKyB6MzsgIGRhdGExID0gdG1wNyArIHo0OwogCi0JbW92ZHFhICAgIHhtbTcseG1tMgotCW1vdmRxYSAgICB4bW00LHhtbTIKLQlwdW5wY2tsd2QgeG1tNyx4bW0xCi0JcHVucGNraHdkIHhtbTQseG1tMQotCW1vdmRxYSAgICB4bW0yLHhtbTcKLQltb3ZkcWEgICAgeG1tMSx4bW00Ci0JcG1hZGR3ZCAgIHhtbTcsW0dPVE9GRihlYngsUFdfTUYwNjBfTUYwODkpXQk7IHhtbTc9dG1wNEwKLQlwbWFkZHdkICAgeG1tNCxbR09UT0ZGKGVieCxQV19NRjA2MF9NRjA4OSldCTsgeG1tND10bXA0SAotCXBtYWRkd2QgICB4bW0yLFtHT1RPRkYoZWJ4LFBXX01GMDg5X0YwNjApXQk7IHhtbTI9dG1wN0wKLQlwbWFkZHdkICAgeG1tMSxbR09UT0ZGKGVieCxQV19NRjA4OV9GMDYwKV0JOyB4bW0xPXRtcDdICisgICAgICAgIG1vdmRxYSAgICB4bW03LHhtbTIKKyAgICAgICAgbW92ZHFhICAgIHhtbTQseG1tMgorICAgICAgICBwdW5wY2tsd2QgeG1tNyx4bW0xCisgICAgICAgIHB1bnBja2h3ZCB4bW00LHhtbTEKKyAgICAgICAgbW92ZHFhICAgIHhtbTIseG1tNworICAgICAgICBtb3ZkcWEgICAgeG1tMSx4bW00CisgICAgICAgIHBtYWRkd2QgICB4bW03LFtHT1RPRkYoZWJ4LFBXX01GMDYwX01GMDg5KV0gICAgIDsgeG1tNz10bXA0TAorICAgICAgICBwbWFkZHdkICAgeG1tNCxbR09UT0ZGKGVieCxQV19NRjA2MF9NRjA4OSldICAgICA7IHhtbTQ9dG1wNEgKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTIsW0dPVE9GRihlYngsUFdfTUYwODlfRjA2MCldICAgICAgOyB4bW0yPXRtcDdMCisgICAgICAgIHBtYWRkd2QgICB4bW0xLFtHT1RPRkYoZWJ4LFBXX01GMDg5X0YwNjApXSAgICAgIDsgeG1tMT10bXA3SAogCi0JcGFkZGQJeG1tNywgWE1NV09SRCBbd2soMCldCTsgeG1tNz1kYXRhN0wKLQlwYWRkZAl4bW00LCBYTU1XT1JEIFt3aygxKV0JOyB4bW00PWRhdGE3SAotCXBhZGRkCXhtbTIseG1tNgkJOyB4bW0yPWRhdGExTAotCXBhZGRkCXhtbTEseG1tMAkJOyB4bW0xPWRhdGExSAorICAgICAgICBwYWRkZCAgIHhtbTcsIFhNTVdPUkQgW3drKDApXSAgIDsgeG1tNz1kYXRhN0wKKyAgICAgICAgcGFkZGQgICB4bW00LCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTQ9ZGF0YTdICisgICAgICAgIHBhZGRkICAgeG1tMix4bW02ICAgICAgICAgICAgICAgOyB4bW0yPWRhdGExTAorICAgICAgICBwYWRkZCAgIHhtbTEseG1tMCAgICAgICAgICAgICAgIDsgeG1tMT1kYXRhMUgKIAotCXBhZGRkCXhtbTcsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldCi0JcGFkZGQJeG1tNCxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0KLQlwc3JhZAl4bW03LERFU0NBTEVfUDEKLQlwc3JhZAl4bW00LERFU0NBTEVfUDEKLQlwYWRkZAl4bW0yLFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXQotCXBhZGRkCXhtbTEsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldCi0JcHNyYWQJeG1tMixERVNDQUxFX1AxCi0JcHNyYWQJeG1tMSxERVNDQUxFX1AxCisgICAgICAgIHBhZGRkICAgeG1tNyxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0KKyAgICAgICAgcGFkZGQgICB4bW00LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXQorICAgICAgICBwc3JhZCAgIHhtbTcsREVTQ0FMRV9QMQorICAgICAgICBwc3JhZCAgIHhtbTQsREVTQ0FMRV9QMQorICAgICAgICBwYWRkZCAgIHhtbTIsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldCisgICAgICAgIHBhZGRkICAgeG1tMSxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0KKyAgICAgICAgcHNyYWQgICB4bW0yLERFU0NBTEVfUDEKKyAgICAgICAgcHNyYWQgICB4bW0xLERFU0NBTEVfUDEKIAotCXBhY2tzc2R3ICB4bW03LHhtbTQJCTsgeG1tNz1kYXRhNwotCXBhY2tzc2R3ICB4bW0yLHhtbTEJCTsgeG1tMj1kYXRhMQorICAgICAgICBwYWNrc3NkdyAgeG1tNyx4bW00ICAgICAgICAgICAgIDsgeG1tNz1kYXRhNworICAgICAgICBwYWNrc3NkdyAgeG1tMix4bW0xICAgICAgICAgICAgIDsgeG1tMj1kYXRhMQogCi0JbW92ZHFhICAgIHhtbTQseG1tNQotCW1vdmRxYSAgICB4bW0xLHhtbTUKLQlwdW5wY2tsd2QgeG1tNCx4bW0zCi0JcHVucGNraHdkIHhtbTEseG1tMwotCW1vdmRxYSAgICB4bW01LHhtbTQKLQltb3ZkcWEgICAgeG1tMyx4bW0xCi0JcG1hZGR3ZCAgIHhtbTQsW0dPVE9GRihlYngsUFdfTUYwNTBfTUYyNTYpXQk7IHhtbTQ9dG1wNUwKLQlwbWFkZHdkICAgeG1tMSxbR09UT0ZGKGVieCxQV19NRjA1MF9NRjI1NildCTsgeG1tMT10bXA1SAotCXBtYWRkd2QgICB4bW01LFtHT1RPRkYoZWJ4LFBXX01GMjU2X0YwNTApXQk7IHhtbTU9dG1wNkwKLQlwbWFkZHdkICAgeG1tMyxbR09UT0ZGKGVieCxQV19NRjI1Nl9GMDUwKV0JOyB4bW0zPXRtcDZICisgICAgICAgIG1vdmRxYSAgICB4bW00LHhtbTUKKyAgICAgICAgbW92ZHFhICAgIHhtbTEseG1tNQorICAgICAgICBwdW5wY2tsd2QgeG1tNCx4bW0zCisgICAgICAgIHB1bnBja2h3ZCB4bW0xLHhtbTMKKyAgICAgICAgbW92ZHFhICAgIHhtbTUseG1tNAorICAgICAgICBtb3ZkcWEgICAgeG1tMyx4bW0xCisgICAgICAgIHBtYWRkd2QgICB4bW00LFtHT1RPRkYoZWJ4LFBXX01GMDUwX01GMjU2KV0gICAgIDsgeG1tND10bXA1TAorICAgICAgICBwbWFkZHdkICAgeG1tMSxbR09UT0ZGKGVieCxQV19NRjA1MF9NRjI1NildICAgICA7IHhtbTE9dG1wNUgKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTUsW0dPVE9GRihlYngsUFdfTUYyNTZfRjA1MCldICAgICAgOyB4bW01PXRtcDZMCisgICAgICAgIHBtYWRkd2QgICB4bW0zLFtHT1RPRkYoZWJ4LFBXX01GMjU2X0YwNTApXSAgICAgIDsgeG1tMz10bXA2SAogCi0JcGFkZGQJeG1tNCx4bW02CQk7IHhtbTQ9ZGF0YTVMCi0JcGFkZGQJeG1tMSx4bW0wCQk7IHhtbTE9ZGF0YTVICi0JcGFkZGQJeG1tNSwgWE1NV09SRCBbd2soMCldCTsgeG1tNT1kYXRhM0wKLQlwYWRkZAl4bW0zLCBYTU1XT1JEIFt3aygxKV0JOyB4bW0zPWRhdGEzSAorICAgICAgICBwYWRkZCAgIHhtbTQseG1tNiAgICAgICAgICAgICAgIDsgeG1tND1kYXRhNUwKKyAgICAgICAgcGFkZGQgICB4bW0xLHhtbTAgICAgICAgICAgICAgICA7IHhtbTE9ZGF0YTVICisgICAgICAgIHBhZGRkICAgeG1tNSwgWE1NV09SRCBbd2soMCldICAgOyB4bW01PWRhdGEzTAorICAgICAgICBwYWRkZCAgIHhtbTMsIFhNTVdPUkQgW3drKDEpXSAgIDsgeG1tMz1kYXRhM0gKIAotCXBhZGRkCXhtbTQsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldCi0JcGFkZGQJeG1tMSxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0KLQlwc3JhZAl4bW00LERFU0NBTEVfUDEKLQlwc3JhZAl4bW0xLERFU0NBTEVfUDEKLQlwYWRkZAl4bW01LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXQotCXBhZGRkCXhtbTMsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldCi0JcHNyYWQJeG1tNSxERVNDQUxFX1AxCi0JcHNyYWQJeG1tMyxERVNDQUxFX1AxCisgICAgICAgIHBhZGRkICAgeG1tNCxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0KKyAgICAgICAgcGFkZGQgICB4bW0xLFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXQorICAgICAgICBwc3JhZCAgIHhtbTQsREVTQ0FMRV9QMQorICAgICAgICBwc3JhZCAgIHhtbTEsREVTQ0FMRV9QMQorICAgICAgICBwYWRkZCAgIHhtbTUsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldCisgICAgICAgIHBhZGRkICAgeG1tMyxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0KKyAgICAgICAgcHNyYWQgICB4bW01LERFU0NBTEVfUDEKKyAgICAgICAgcHNyYWQgICB4bW0zLERFU0NBTEVfUDEKIAotCXBhY2tzc2R3ICB4bW00LHhtbTEJCTsgeG1tND1kYXRhNQotCXBhY2tzc2R3ICB4bW01LHhtbTMJCTsgeG1tNT1kYXRhMworICAgICAgICBwYWNrc3NkdyAgeG1tNCx4bW0xICAgICAgICAgICAgIDsgeG1tND1kYXRhNQorICAgICAgICBwYWNrc3NkdyAgeG1tNSx4bW0zICAgICAgICAgICAgIDsgeG1tNT1kYXRhMwogCi0JOyAtLS0tIFBhc3MgMjogcHJvY2VzcyBjb2x1bW5zLgorICAgICAgICA7IC0tLS0gUGFzcyAyOiBwcm9jZXNzIGNvbHVtbnMuCiAKLTsJbW92CWVkeCwgUE9JTlRFUiBbZGF0YShlYXgpXQk7IChEQ1RFTEVNICopCis7ICAgICAgIG1vdiAgICAgZWR4LCBQT0lOVEVSIFtkYXRhKGVheCldICAgICAgICA7IChEQ1RFTEVNICopCiAKLQltb3ZkcWEJeG1tNiwgWE1NV09SRCBbd2soMildCTsgeG1tNj1jb2wwCi0JbW92ZHFhCXhtbTAsIFhNTVdPUkQgW3drKDQpXQk7IHhtbTA9Y29sMgorICAgICAgICBtb3ZkcWEgIHhtbTYsIFhNTVdPUkQgW3drKDIpXSAgIDsgeG1tNj1jb2wwCisgICAgICAgIG1vdmRxYSAgeG1tMCwgWE1NV09SRCBbd2soNCldICAgOyB4bW0wPWNvbDIKIAotCTsgeG1tNj0oMDAgMTAgMjAgMzAgNDAgNTAgNjAgNzApLCB4bW0wPSgwMiAxMiAyMiAzMiA0MiA1MiA2MiA3MikKLQk7IHhtbTI9KDAxIDExIDIxIDMxIDQxIDUxIDYxIDcxKSwgeG1tNT0oMDMgMTMgMjMgMzMgNDMgNTMgNjMgNzMpCisgICAgICAgIDsgeG1tNj0oMDAgMTAgMjAgMzAgNDAgNTAgNjAgNzApLCB4bW0wPSgwMiAxMiAyMiAzMiA0MiA1MiA2MiA3MikKKyAgICAgICAgOyB4bW0yPSgwMSAxMSAyMSAzMSA0MSA1MSA2MSA3MSksIHhtbTU9KDAzIDEzIDIzIDMzIDQzIDUzIDYzIDczKQogCi0JbW92ZHFhICAgIHhtbTEseG1tNgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCi0JcHVucGNrbHdkIHhtbTYseG1tMgkJOyB4bW02PSgwMCAwMSAxMCAxMSAyMCAyMSAzMCAzMSkKLQlwdW5wY2tod2QgeG1tMSx4bW0yCQk7IHhtbTE9KDQwIDQxIDUwIDUxIDYwIDYxIDcwIDcxKQotCW1vdmRxYSAgICB4bW0zLHhtbTAJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQotCXB1bnBja2x3ZCB4bW0wLHhtbTUJCTsgeG1tMD0oMDIgMDMgMTIgMTMgMjIgMjMgMzIgMzMpCi0JcHVucGNraHdkIHhtbTMseG1tNQkJOyB4bW0zPSg0MiA0MyA1MiA1MyA2MiA2MyA3MiA3MykKKyAgICAgICAgbW92ZHFhICAgIHhtbTEseG1tNiAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICAgICAgcHVucGNrbHdkIHhtbTYseG1tMiAgICAgICAgICAgICA7IHhtbTY9KDAwIDAxIDEwIDExIDIwIDIxIDMwIDMxKQorICAgICAgICBwdW5wY2tod2QgeG1tMSx4bW0yICAgICAgICAgICAgIDsgeG1tMT0oNDAgNDEgNTAgNTEgNjAgNjEgNzAgNzEpCisgICAgICAgIG1vdmRxYSAgICB4bW0zLHhtbTAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgICAgIHB1bnBja2x3ZCB4bW0wLHhtbTUgICAgICAgICAgICAgOyB4bW0wPSgwMiAwMyAxMiAxMyAyMiAyMyAzMiAzMykKKyAgICAgICAgcHVucGNraHdkIHhtbTMseG1tNSAgICAgICAgICAgICA7IHhtbTM9KDQyIDQzIDUyIDUzIDYyIDYzIDcyIDczKQogCi0JbW92ZHFhCXhtbTIsIFhNTVdPUkQgW3drKDMpXQk7IHhtbTI9Y29sNAotCW1vdmRxYQl4bW01LCBYTU1XT1JEIFt3ayg1KV0JOyB4bW01PWNvbDYKKyAgICAgICAgbW92ZHFhICB4bW0yLCBYTU1XT1JEIFt3aygzKV0gICA7IHhtbTI9Y29sNAorICAgICAgICBtb3ZkcWEgIHhtbTUsIFhNTVdPUkQgW3drKDUpXSAgIDsgeG1tNT1jb2w2CiAKLQk7IHhtbTI9KDA0IDE0IDI0IDM0IDQ0IDU0IDY0IDc0KSwgeG1tNT0oMDYgMTYgMjYgMzYgNDYgNTYgNjYgNzYpCi0JOyB4bW00PSgwNSAxNSAyNSAzNSA0NSA1NSA2NSA3NSksIHhtbTc9KDA3IDE3IDI3IDM3IDQ3IDU3IDY3IDc3KQorICAgICAgICA7IHhtbTI9KDA0IDE0IDI0IDM0IDQ0IDU0IDY0IDc0KSwgeG1tNT0oMDYgMTYgMjYgMzYgNDYgNTYgNjYgNzYpCisgICAgICAgIDsgeG1tND0oMDUgMTUgMjUgMzUgNDUgNTUgNjUgNzUpLCB4bW03PSgwNyAxNyAyNyAzNyA0NyA1NyA2NyA3NykKIAotCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTAJOyB3aygwKT0oMDIgMDMgMTIgMTMgMjIgMjMgMzIgMzMpCi0JbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tMwk7IHdrKDEpPSg0MiA0MyA1MiA1MyA2MiA2MyA3MiA3MykKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygwKV0sIHhtbTAgICA7IHdrKDApPSgwMiAwMyAxMiAxMyAyMiAyMyAzMiAzMykKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygxKV0sIHhtbTMgICA7IHdrKDEpPSg0MiA0MyA1MiA1MyA2MiA2MyA3MiA3MykKIAotCW1vdmRxYSAgICB4bW0wLHhtbTIJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQotCXB1bnBja2x3ZCB4bW0yLHhtbTQJCTsgeG1tMj0oMDQgMDUgMTQgMTUgMjQgMjUgMzQgMzUpCi0JcHVucGNraHdkIHhtbTAseG1tNAkJOyB4bW0wPSg0NCA0NSA1NCA1NSA2NCA2NSA3NCA3NSkKLQltb3ZkcWEgICAgeG1tMyx4bW01CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKLQlwdW5wY2tsd2QgeG1tNSx4bW03CQk7IHhtbTU9KDA2IDA3IDE2IDE3IDI2IDI3IDM2IDM3KQotCXB1bnBja2h3ZCB4bW0zLHhtbTcJCTsgeG1tMz0oNDYgNDcgNTYgNTcgNjYgNjcgNzYgNzcpCisgICAgICAgIG1vdmRxYSAgICB4bW0wLHhtbTIgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgICAgIHB1bnBja2x3ZCB4bW0yLHhtbTQgICAgICAgICAgICAgOyB4bW0yPSgwNCAwNSAxNCAxNSAyNCAyNSAzNCAzNSkKKyAgICAgICAgcHVucGNraHdkIHhtbTAseG1tNCAgICAgICAgICAgICA7IHhtbTA9KDQ0IDQ1IDU0IDU1IDY0IDY1IDc0IDc1KQorICAgICAgICBtb3ZkcWEgICAgeG1tMyx4bW01ICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgICAgICBwdW5wY2tsd2QgeG1tNSx4bW03ICAgICAgICAgICAgIDsgeG1tNT0oMDYgMDcgMTYgMTcgMjYgMjcgMzYgMzcpCisgICAgICAgIHB1bnBja2h3ZCB4bW0zLHhtbTcgICAgICAgICAgICAgOyB4bW0zPSg0NiA0NyA1NiA1NyA2NiA2NyA3NiA3NykKIAotCW1vdmRxYSAgICB4bW00LHhtbTIJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQotCXB1bnBja2xkcSB4bW0yLHhtbTUJCTsgeG1tMj0oMDQgMDUgMDYgMDcgMTQgMTUgMTYgMTcpCi0JcHVucGNraGRxIHhtbTQseG1tNQkJOyB4bW00PSgyNCAyNSAyNiAyNyAzNCAzNSAzNiAzNykKLQltb3ZkcWEgICAgeG1tNyx4bW0wCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKLQlwdW5wY2tsZHEgeG1tMCx4bW0zCQk7IHhtbTA9KDQ0IDQ1IDQ2IDQ3IDU0IDU1IDU2IDU3KQotCXB1bnBja2hkcSB4bW03LHhtbTMJCTsgeG1tNz0oNjQgNjUgNjYgNjcgNzQgNzUgNzYgNzcpCisgICAgICAgIG1vdmRxYSAgICB4bW00LHhtbTIgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgICAgIHB1bnBja2xkcSB4bW0yLHhtbTUgICAgICAgICAgICAgOyB4bW0yPSgwNCAwNSAwNiAwNyAxNCAxNSAxNiAxNykKKyAgICAgICAgcHVucGNraGRxIHhtbTQseG1tNSAgICAgICAgICAgICA7IHhtbTQ9KDI0IDI1IDI2IDI3IDM0IDM1IDM2IDM3KQorICAgICAgICBtb3ZkcWEgICAgeG1tNyx4bW0wICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgICAgICBwdW5wY2tsZHEgeG1tMCx4bW0zICAgICAgICAgICAgIDsgeG1tMD0oNDQgNDUgNDYgNDcgNTQgNTUgNTYgNTcpCisgICAgICAgIHB1bnBja2hkcSB4bW03LHhtbTMgICAgICAgICAgICAgOyB4bW03PSg2NCA2NSA2NiA2NyA3NCA3NSA3NiA3NykKIAotCW1vdmRxYQl4bW01LCBYTU1XT1JEIFt3aygwKV0JOyB4bW01PSgwMiAwMyAxMiAxMyAyMiAyMyAzMiAzMykKLQltb3ZkcWEJeG1tMywgWE1NV09SRCBbd2soMSldCTsgeG1tMz0oNDIgNDMgNTIgNTMgNjIgNjMgNzIgNzMpCi0JbW92ZHFhCVhNTVdPUkQgW3drKDIpXSwgeG1tNAk7IHdrKDIpPSgyNCAyNSAyNiAyNyAzNCAzNSAzNiAzNykKLQltb3ZkcWEJWE1NV09SRCBbd2soMyldLCB4bW0wCTsgd2soMyk9KDQ0IDQ1IDQ2IDQ3IDU0IDU1IDU2IDU3KQorICAgICAgICBtb3ZkcWEgIHhtbTUsIFhNTVdPUkQgW3drKDApXSAgIDsgeG1tNT0oMDIgMDMgMTIgMTMgMjIgMjMgMzIgMzMpCisgICAgICAgIG1vdmRxYSAgeG1tMywgWE1NV09SRCBbd2soMSldICAgOyB4bW0zPSg0MiA0MyA1MiA1MyA2MiA2MyA3MiA3MykKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygyKV0sIHhtbTQgICA7IHdrKDIpPSgyNCAyNSAyNiAyNyAzNCAzNSAzNiAzNykKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygzKV0sIHhtbTAgICA7IHdrKDMpPSg0NCA0NSA0NiA0NyA1NCA1NSA1NiA1NykKIAotCW1vdmRxYSAgICB4bW00LHhtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQotCXB1bnBja2xkcSB4bW02LHhtbTUJCTsgeG1tNj0oMDAgMDEgMDIgMDMgMTAgMTEgMTIgMTMpCi0JcHVucGNraGRxIHhtbTQseG1tNQkJOyB4bW00PSgyMCAyMSAyMiAyMyAzMCAzMSAzMiAzMykKLQltb3ZkcWEgICAgeG1tMCx4bW0xCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKLQlwdW5wY2tsZHEgeG1tMSx4bW0zCQk7IHhtbTE9KDQwIDQxIDQyIDQzIDUwIDUxIDUyIDUzKQotCXB1bnBja2hkcSB4bW0wLHhtbTMJCTsgeG1tMD0oNjAgNjEgNjIgNjMgNzAgNzEgNzIgNzMpCisgICAgICAgIG1vdmRxYSAgICB4bW00LHhtbTYgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgICAgIHB1bnBja2xkcSB4bW02LHhtbTUgICAgICAgICAgICAgOyB4bW02PSgwMCAwMSAwMiAwMyAxMCAxMSAxMiAxMykKKyAgICAgICAgcHVucGNraGRxIHhtbTQseG1tNSAgICAgICAgICAgICA7IHhtbTQ9KDIwIDIxIDIyIDIzIDMwIDMxIDMyIDMzKQorICAgICAgICBtb3ZkcWEgICAgeG1tMCx4bW0xICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgICAgICBwdW5wY2tsZHEgeG1tMSx4bW0zICAgICAgICAgICAgIDsgeG1tMT0oNDAgNDEgNDIgNDMgNTAgNTEgNTIgNTMpCisgICAgICAgIHB1bnBja2hkcSB4bW0wLHhtbTMgICAgICAgICAgICAgOyB4bW0wPSg2MCA2MSA2MiA2MyA3MCA3MSA3MiA3MykKIAotCW1vdmRxYSAgICAgeG1tNSx4bW02CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKLQlwdW5wY2tscWRxIHhtbTYseG1tMgkJOyB4bW02PSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNyk9ZGF0YTAKLQlwdW5wY2tocWRxIHhtbTUseG1tMgkJOyB4bW01PSgxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNyk9ZGF0YTEKLQltb3ZkcWEgICAgIHhtbTMseG1tMAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCi0JcHVucGNrbHFkcSB4bW0wLHhtbTcJCTsgeG1tMD0oNjAgNjEgNjIgNjMgNjQgNjUgNjYgNjcpPWRhdGE2Ci0JcHVucGNraHFkcSB4bW0zLHhtbTcJCTsgeG1tMz0oNzAgNzEgNzIgNzMgNzQgNzUgNzYgNzcpPWRhdGE3CisgICAgICAgIG1vdmRxYSAgICAgeG1tNSx4bW02ICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisgICAgICAgIHB1bnBja2xxZHEgeG1tNix4bW0yICAgICAgICAgICAgOyB4bW02PSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNyk9ZGF0YTAKKyAgICAgICAgcHVucGNraHFkcSB4bW01LHhtbTIgICAgICAgICAgICA7IHhtbTU9KDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3KT1kYXRhMQorICAgICAgICBtb3ZkcWEgICAgIHhtbTMseG1tMCAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorICAgICAgICBwdW5wY2tscWRxIHhtbTAseG1tNyAgICAgICAgICAgIDsgeG1tMD0oNjAgNjEgNjIgNjMgNjQgNjUgNjYgNjcpPWRhdGE2CisgICAgICAgIHB1bnBja2hxZHEgeG1tMyx4bW03ICAgICAgICAgICAgOyB4bW0zPSg3MCA3MSA3MiA3MyA3NCA3NSA3NiA3Nyk9ZGF0YTcKIAotCW1vdmRxYQl4bW0yLHhtbTUKLQltb3ZkcWEJeG1tNyx4bW02Ci0JcHN1YncJeG1tNSx4bW0wCQk7IHhtbTU9ZGF0YTEtZGF0YTY9dG1wNgotCXBzdWJ3CXhtbTYseG1tMwkJOyB4bW02PWRhdGEwLWRhdGE3PXRtcDcKLQlwYWRkdwl4bW0yLHhtbTAJCTsgeG1tMj1kYXRhMStkYXRhNj10bXAxCi0JcGFkZHcJeG1tNyx4bW0zCQk7IHhtbTc9ZGF0YTArZGF0YTc9dG1wMAorICAgICAgICBtb3ZkcWEgIHhtbTIseG1tNQorICAgICAgICBtb3ZkcWEgIHhtbTcseG1tNgorICAgICAgICBwc3VidyAgIHhtbTUseG1tMCAgICAgICAgICAgICAgIDsgeG1tNT1kYXRhMS1kYXRhNj10bXA2CisgICAgICAgIHBzdWJ3ICAgeG1tNix4bW0zICAgICAgICAgICAgICAgOyB4bW02PWRhdGEwLWRhdGE3PXRtcDcKKyAgICAgICAgcGFkZHcgICB4bW0yLHhtbTAgICAgICAgICAgICAgICA7IHhtbTI9ZGF0YTErZGF0YTY9dG1wMQorICAgICAgICBwYWRkdyAgIHhtbTcseG1tMyAgICAgICAgICAgICAgIDsgeG1tNz1kYXRhMCtkYXRhNz10bXAwCiAKLQltb3ZkcWEJeG1tMCwgWE1NV09SRCBbd2soMildCTsgeG1tMD0oMjQgMjUgMjYgMjcgMzQgMzUgMzYgMzcpCi0JbW92ZHFhCXhtbTMsIFhNTVdPUkQgW3drKDMpXQk7IHhtbTM9KDQ0IDQ1IDQ2IDQ3IDU0IDU1IDU2IDU3KQotCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTUJOyB3aygwKT10bXA2Ci0JbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tNgk7IHdrKDEpPXRtcDcKKyAgICAgICAgbW92ZHFhICB4bW0wLCBYTU1XT1JEIFt3aygyKV0gICA7IHhtbTA9KDI0IDI1IDI2IDI3IDM0IDM1IDM2IDM3KQorICAgICAgICBtb3ZkcWEgIHhtbTMsIFhNTVdPUkQgW3drKDMpXSAgIDsgeG1tMz0oNDQgNDUgNDYgNDcgNTQgNTUgNTYgNTcpCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMCldLCB4bW01ICAgOyB3aygwKT10bXA2CisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMSldLCB4bW02ICAgOyB3aygxKT10bXA3CiAKLQltb3ZkcWEgICAgIHhtbTUseG1tNAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCi0JcHVucGNrbHFkcSB4bW00LHhtbTAJCTsgeG1tND0oMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcpPWRhdGEyCi0JcHVucGNraHFkcSB4bW01LHhtbTAJCTsgeG1tNT0oMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcpPWRhdGEzCi0JbW92ZHFhICAgICB4bW02LHhtbTEJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQotCXB1bnBja2xxZHEgeG1tMSx4bW0zCQk7IHhtbTE9KDQwIDQxIDQyIDQzIDQ0IDQ1IDQ2IDQ3KT1kYXRhNAotCXB1bnBja2hxZHEgeG1tNix4bW0zCQk7IHhtbTY9KDUwIDUxIDUyIDUzIDU0IDU1IDU2IDU3KT1kYXRhNQorICAgICAgICBtb3ZkcWEgICAgIHhtbTUseG1tNCAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorICAgICAgICBwdW5wY2tscWRxIHhtbTQseG1tMCAgICAgICAgICAgIDsgeG1tND0oMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcpPWRhdGEyCisgICAgICAgIHB1bnBja2hxZHEgeG1tNSx4bW0wICAgICAgICAgICAgOyB4bW01PSgzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNyk9ZGF0YTMKKyAgICAgICAgbW92ZHFhICAgICB4bW02LHhtbTEgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKyAgICAgICAgcHVucGNrbHFkcSB4bW0xLHhtbTMgICAgICAgICAgICA7IHhtbTE9KDQwIDQxIDQyIDQzIDQ0IDQ1IDQ2IDQ3KT1kYXRhNAorICAgICAgICBwdW5wY2tocWRxIHhtbTYseG1tMyAgICAgICAgICAgIDsgeG1tNj0oNTAgNTEgNTIgNTMgNTQgNTUgNTYgNTcpPWRhdGE1CiAKLQltb3ZkcWEJeG1tMCx4bW01Ci0JbW92ZHFhCXhtbTMseG1tNAotCXBhZGR3CXhtbTUseG1tMQkJOyB4bW01PWRhdGEzK2RhdGE0PXRtcDMKLQlwYWRkdwl4bW00LHhtbTYJCTsgeG1tND1kYXRhMitkYXRhNT10bXAyCi0JcHN1YncJeG1tMCx4bW0xCQk7IHhtbTA9ZGF0YTMtZGF0YTQ9dG1wNAotCXBzdWJ3CXhtbTMseG1tNgkJOyB4bW0zPWRhdGEyLWRhdGE1PXRtcDUKKyAgICAgICAgbW92ZHFhICB4bW0wLHhtbTUKKyAgICAgICAgbW92ZHFhICB4bW0zLHhtbTQKKyAgICAgICAgcGFkZHcgICB4bW01LHhtbTEgICAgICAgICAgICAgICA7IHhtbTU9ZGF0YTMrZGF0YTQ9dG1wMworICAgICAgICBwYWRkdyAgIHhtbTQseG1tNiAgICAgICAgICAgICAgIDsgeG1tND1kYXRhMitkYXRhNT10bXAyCisgICAgICAgIHBzdWJ3ICAgeG1tMCx4bW0xICAgICAgICAgICAgICAgOyB4bW0wPWRhdGEzLWRhdGE0PXRtcDQKKyAgICAgICAgcHN1YncgICB4bW0zLHhtbTYgICAgICAgICAgICAgICA7IHhtbTM9ZGF0YTItZGF0YTU9dG1wNQogCi0JOyAtLSBFdmVuIHBhcnQKKyAgICAgICAgOyAtLSBFdmVuIHBhcnQKIAotCW1vdmRxYQl4bW0xLHhtbTcKLQltb3ZkcWEJeG1tNix4bW0yCi0JcGFkZHcJeG1tNyx4bW01CQk7IHhtbTc9dG1wMTAKLQlwYWRkdwl4bW0yLHhtbTQJCTsgeG1tMj10bXAxMQotCXBzdWJ3CXhtbTEseG1tNQkJOyB4bW0xPXRtcDEzCi0JcHN1YncJeG1tNix4bW00CQk7IHhtbTY9dG1wMTIKKyAgICAgICAgbW92ZHFhICB4bW0xLHhtbTcKKyAgICAgICAgbW92ZHFhICB4bW02LHhtbTIKKyAgICAgICAgcGFkZHcgICB4bW03LHhtbTUgICAgICAgICAgICAgICA7IHhtbTc9dG1wMTAKKyAgICAgICAgcGFkZHcgICB4bW0yLHhtbTQgICAgICAgICAgICAgICA7IHhtbTI9dG1wMTEKKyAgICAgICAgcHN1YncgICB4bW0xLHhtbTUgICAgICAgICAgICAgICA7IHhtbTE9dG1wMTMKKyAgICAgICAgcHN1YncgICB4bW02LHhtbTQgICAgICAgICAgICAgICA7IHhtbTY9dG1wMTIKIAotCW1vdmRxYQl4bW01LHhtbTcKLQlwYWRkdwl4bW03LHhtbTIJCTsgeG1tNz10bXAxMCt0bXAxMQotCXBzdWJ3CXhtbTUseG1tMgkJOyB4bW01PXRtcDEwLXRtcDExCisgICAgICAgIG1vdmRxYSAgeG1tNSx4bW03CisgICAgICAgIHBhZGR3ICAgeG1tNyx4bW0yICAgICAgICAgICAgICAgOyB4bW03PXRtcDEwK3RtcDExCisgICAgICAgIHBzdWJ3ICAgeG1tNSx4bW0yICAgICAgICAgICAgICAgOyB4bW01PXRtcDEwLXRtcDExCiAKLQlwYWRkdwl4bW03LFtHT1RPRkYoZWJ4LFBXX0RFU0NBTEVfUDJYKV0KLQlwYWRkdwl4bW01LFtHT1RPRkYoZWJ4LFBXX0RFU0NBTEVfUDJYKV0KLQlwc3Jhdwl4bW03LFBBU1MxX0JJVFMJCTsgeG1tNz1kYXRhMAotCXBzcmF3CXhtbTUsUEFTUzFfQklUUwkJOyB4bW01PWRhdGE0CisgICAgICAgIHBhZGR3ICAgeG1tNyxbR09UT0ZGKGVieCxQV19ERVNDQUxFX1AyWCldCisgICAgICAgIHBhZGR3ICAgeG1tNSxbR09UT0ZGKGVieCxQV19ERVNDQUxFX1AyWCldCisgICAgICAgIHBzcmF3ICAgeG1tNyxQQVNTMV9CSVRTICAgICAgICAgOyB4bW03PWRhdGEwCisgICAgICAgIHBzcmF3ICAgeG1tNSxQQVNTMV9CSVRTICAgICAgICAgOyB4bW01PWRhdGE0CiAKLQltb3ZkcWEJWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCB4bW03Ci0JbW92ZHFhCVhNTVdPUkQgW1hNTUJMT0NLKDQsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgeG1tNQorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgeG1tNworICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW1hNTUJMT0NLKDQsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgeG1tNQogCi0JOyAoT3JpZ2luYWwpCi0JOyB6MSA9ICh0bXAxMiArIHRtcDEzKSAqIDAuNTQxMTk2MTAwOwotCTsgZGF0YTIgPSB6MSArIHRtcDEzICogMC43NjUzNjY4NjU7Ci0JOyBkYXRhNiA9IHoxICsgdG1wMTIgKiAtMS44NDc3NTkwNjU7Ci0JOwotCTsgKFRoaXMgaW1wbGVtZW50YXRpb24pCi0JOyBkYXRhMiA9IHRtcDEzICogKDAuNTQxMTk2MTAwICsgMC43NjUzNjY4NjUpICsgdG1wMTIgKiAwLjU0MTE5NjEwMDsKLQk7IGRhdGE2ID0gdG1wMTMgKiAwLjU0MTE5NjEwMCArIHRtcDEyICogKDAuNTQxMTk2MTAwIC0gMS44NDc3NTkwNjUpOworICAgICAgICA7IChPcmlnaW5hbCkKKyAgICAgICAgOyB6MSA9ICh0bXAxMiArIHRtcDEzKSAqIDAuNTQxMTk2MTAwOworICAgICAgICA7IGRhdGEyID0gejEgKyB0bXAxMyAqIDAuNzY1MzY2ODY1OworICAgICAgICA7IGRhdGE2ID0gejEgKyB0bXAxMiAqIC0xLjg0Nzc1OTA2NTsKKyAgICAgICAgOworICAgICAgICA7IChUaGlzIGltcGxlbWVudGF0aW9uKQorICAgICAgICA7IGRhdGEyID0gdG1wMTMgKiAoMC41NDExOTYxMDAgKyAwLjc2NTM2Njg2NSkgKyB0bXAxMiAqIDAuNTQxMTk2MTAwOworICAgICAgICA7IGRhdGE2ID0gdG1wMTMgKiAwLjU0MTE5NjEwMCArIHRtcDEyICogKDAuNTQxMTk2MTAwIC0gMS44NDc3NTkwNjUpOwogCi0JbW92ZHFhICAgIHhtbTQseG1tMQkJOyB4bW0xPXRtcDEzCi0JbW92ZHFhICAgIHhtbTIseG1tMQotCXB1bnBja2x3ZCB4bW00LHhtbTYJCTsgeG1tNj10bXAxMgotCXB1bnBja2h3ZCB4bW0yLHhtbTYKLQltb3ZkcWEgICAgeG1tMSx4bW00Ci0JbW92ZHFhICAgIHhtbTYseG1tMgotCXBtYWRkd2QgICB4bW00LFtHT1RPRkYoZWJ4LFBXX0YxMzBfRjA1NCldCTsgeG1tND1kYXRhMkwKLQlwbWFkZHdkICAgeG1tMixbR09UT0ZGKGVieCxQV19GMTMwX0YwNTQpXQk7IHhtbTI9ZGF0YTJICi0JcG1hZGR3ZCAgIHhtbTEsW0dPVE9GRihlYngsUFdfRjA1NF9NRjEzMCldCTsgeG1tMT1kYXRhNkwKLQlwbWFkZHdkICAgeG1tNixbR09UT0ZGKGVieCxQV19GMDU0X01GMTMwKV0JOyB4bW02PWRhdGE2SAorICAgICAgICBtb3ZkcWEgICAgeG1tNCx4bW0xICAgICAgICAgICAgIDsgeG1tMT10bXAxMworICAgICAgICBtb3ZkcWEgICAgeG1tMix4bW0xCisgICAgICAgIHB1bnBja2x3ZCB4bW00LHhtbTYgICAgICAgICAgICAgOyB4bW02PXRtcDEyCisgICAgICAgIHB1bnBja2h3ZCB4bW0yLHhtbTYKKyAgICAgICAgbW92ZHFhICAgIHhtbTEseG1tNAorICAgICAgICBtb3ZkcWEgICAgeG1tNix4bW0yCisgICAgICAgIHBtYWRkd2QgICB4bW00LFtHT1RPRkYoZWJ4LFBXX0YxMzBfRjA1NCldICAgICAgIDsgeG1tND1kYXRhMkwKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTIsW0dPVE9GRihlYngsUFdfRjEzMF9GMDU0KV0gICAgICAgOyB4bW0yPWRhdGEySAorICAgICAgICBwbWFkZHdkICAgeG1tMSxbR09UT0ZGKGVieCxQV19GMDU0X01GMTMwKV0gICAgICA7IHhtbTE9ZGF0YTZMCisgICAgICAgIHBtYWRkd2QgICB4bW02LFtHT1RPRkYoZWJ4LFBXX0YwNTRfTUYxMzApXSAgICAgIDsgeG1tNj1kYXRhNkgKIAotCXBhZGRkCXhtbTQsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildCi0JcGFkZGQJeG1tMixbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyKV0KLQlwc3JhZAl4bW00LERFU0NBTEVfUDIKLQlwc3JhZAl4bW0yLERFU0NBTEVfUDIKLQlwYWRkZAl4bW0xLFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQotCXBhZGRkCXhtbTYsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildCi0JcHNyYWQJeG1tMSxERVNDQUxFX1AyCi0JcHNyYWQJeG1tNixERVNDQUxFX1AyCisgICAgICAgIHBhZGRkICAgeG1tNCxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyKV0KKyAgICAgICAgcGFkZGQgICB4bW0yLFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQorICAgICAgICBwc3JhZCAgIHhtbTQsREVTQ0FMRV9QMgorICAgICAgICBwc3JhZCAgIHhtbTIsREVTQ0FMRV9QMgorICAgICAgICBwYWRkZCAgIHhtbTEsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildCisgICAgICAgIHBhZGRkICAgeG1tNixbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyKV0KKyAgICAgICAgcHNyYWQgICB4bW0xLERFU0NBTEVfUDIKKyAgICAgICAgcHNyYWQgICB4bW02LERFU0NBTEVfUDIKIAotCXBhY2tzc2R3ICB4bW00LHhtbTIJCTsgeG1tND1kYXRhMgotCXBhY2tzc2R3ICB4bW0xLHhtbTYJCTsgeG1tMT1kYXRhNgorICAgICAgICBwYWNrc3NkdyAgeG1tNCx4bW0yICAgICAgICAgICAgIDsgeG1tND1kYXRhMgorICAgICAgICBwYWNrc3NkdyAgeG1tMSx4bW02ICAgICAgICAgICAgIDsgeG1tMT1kYXRhNgogCi0JbW92ZHFhCVhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgeG1tNAotCW1vdmRxYQlYTU1XT1JEIFtYTU1CTE9DSyg2LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTEKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFtYTU1CTE9DSygyLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTQKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFtYTU1CTE9DSyg2LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTEKIAotCTsgLS0gT2RkIHBhcnQKKyAgICAgICAgOyAtLSBPZGQgcGFydAogCi0JbW92ZHFhCXhtbTcsIFhNTVdPUkQgW3drKDApXQk7IHhtbTc9dG1wNgotCW1vdmRxYQl4bW01LCBYTU1XT1JEIFt3aygxKV0JOyB4bW01PXRtcDcKKyAgICAgICAgbW92ZHFhICB4bW03LCBYTU1XT1JEIFt3aygwKV0gICA7IHhtbTc9dG1wNgorICAgICAgICBtb3ZkcWEgIHhtbTUsIFhNTVdPUkQgW3drKDEpXSAgIDsgeG1tNT10bXA3CiAKLQltb3ZkcWEJeG1tMix4bW0wCQk7IHhtbTA9dG1wNAotCW1vdmRxYQl4bW02LHhtbTMJCTsgeG1tMz10bXA1Ci0JcGFkZHcJeG1tMix4bW03CQk7IHhtbTI9ejMKLQlwYWRkdwl4bW02LHhtbTUJCTsgeG1tNj16NAorICAgICAgICBtb3ZkcWEgIHhtbTIseG1tMCAgICAgICAgICAgICAgIDsgeG1tMD10bXA0CisgICAgICAgIG1vdmRxYSAgeG1tNix4bW0zICAgICAgICAgICAgICAgOyB4bW0zPXRtcDUKKyAgICAgICAgcGFkZHcgICB4bW0yLHhtbTcgICAgICAgICAgICAgICA7IHhtbTI9ejMKKyAgICAgICAgcGFkZHcgICB4bW02LHhtbTUgICAgICAgICAgICAgICA7IHhtbTY9ejQKIAotCTsgKE9yaWdpbmFsKQotCTsgejUgPSAoejMgKyB6NCkgKiAxLjE3NTg3NTYwMjsKLQk7IHozID0gejMgKiAtMS45NjE1NzA1NjA7ICB6NCA9IHo0ICogLTAuMzkwMTgwNjQ0OwotCTsgejMgKz0gejU7ICB6NCArPSB6NTsKLQk7Ci0JOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKLQk7IHozID0gejMgKiAoMS4xNzU4NzU2MDIgLSAxLjk2MTU3MDU2MCkgKyB6NCAqIDEuMTc1ODc1NjAyOwotCTsgejQgPSB6MyAqIDEuMTc1ODc1NjAyICsgejQgKiAoMS4xNzU4NzU2MDIgLSAwLjM5MDE4MDY0NCk7CisgICAgICAgIDsgKE9yaWdpbmFsKQorICAgICAgICA7IHo1ID0gKHozICsgejQpICogMS4xNzU4NzU2MDI7CisgICAgICAgIDsgejMgPSB6MyAqIC0xLjk2MTU3MDU2MDsgIHo0ID0gejQgKiAtMC4zOTAxODA2NDQ7CisgICAgICAgIDsgejMgKz0gejU7ICB6NCArPSB6NTsKKyAgICAgICAgOworICAgICAgICA7IChUaGlzIGltcGxlbWVudGF0aW9uKQorICAgICAgICA7IHozID0gejMgKiAoMS4xNzU4NzU2MDIgLSAxLjk2MTU3MDU2MCkgKyB6NCAqIDEuMTc1ODc1NjAyOworICAgICAgICA7IHo0ID0gejMgKiAxLjE3NTg3NTYwMiArIHo0ICogKDEuMTc1ODc1NjAyIC0gMC4zOTAxODA2NDQpOwogCi0JbW92ZHFhICAgIHhtbTQseG1tMgotCW1vdmRxYSAgICB4bW0xLHhtbTIKLQlwdW5wY2tsd2QgeG1tNCx4bW02Ci0JcHVucGNraHdkIHhtbTEseG1tNgotCW1vdmRxYSAgICB4bW0yLHhtbTQKLQltb3ZkcWEgICAgeG1tNix4bW0xCi0JcG1hZGR3ZCAgIHhtbTQsW0dPVE9GRihlYngsUFdfTUYwNzhfRjExNyldCTsgeG1tND16M0wKLQlwbWFkZHdkICAgeG1tMSxbR09UT0ZGKGVieCxQV19NRjA3OF9GMTE3KV0JOyB4bW0xPXozSAotCXBtYWRkd2QgICB4bW0yLFtHT1RPRkYoZWJ4LFBXX0YxMTdfRjA3OCldCTsgeG1tMj16NEwKLQlwbWFkZHdkICAgeG1tNixbR09UT0ZGKGVieCxQV19GMTE3X0YwNzgpXQk7IHhtbTY9ejRICisgICAgICAgIG1vdmRxYSAgICB4bW00LHhtbTIKKyAgICAgICAgbW92ZHFhICAgIHhtbTEseG1tMgorICAgICAgICBwdW5wY2tsd2QgeG1tNCx4bW02CisgICAgICAgIHB1bnBja2h3ZCB4bW0xLHhtbTYKKyAgICAgICAgbW92ZHFhICAgIHhtbTIseG1tNAorICAgICAgICBtb3ZkcWEgICAgeG1tNix4bW0xCisgICAgICAgIHBtYWRkd2QgICB4bW00LFtHT1RPRkYoZWJ4LFBXX01GMDc4X0YxMTcpXSAgICAgIDsgeG1tND16M0wKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTEsW0dPVE9GRihlYngsUFdfTUYwNzhfRjExNyldICAgICAgOyB4bW0xPXozSAorICAgICAgICBwbWFkZHdkICAgeG1tMixbR09UT0ZGKGVieCxQV19GMTE3X0YwNzgpXSAgICAgICA7IHhtbTI9ejRMCisgICAgICAgIHBtYWRkd2QgICB4bW02LFtHT1RPRkYoZWJ4LFBXX0YxMTdfRjA3OCldICAgICAgIDsgeG1tNj16NEgKIAotCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTQJOyB3aygwKT16M0wKLQltb3ZkcWEJWE1NV09SRCBbd2soMSldLCB4bW0xCTsgd2soMSk9ejNICisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMCldLCB4bW00ICAgOyB3aygwKT16M0wKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygxKV0sIHhtbTEgICA7IHdrKDEpPXozSAogCi0JOyAoT3JpZ2luYWwpCi0JOyB6MSA9IHRtcDQgKyB0bXA3OyAgejIgPSB0bXA1ICsgdG1wNjsKLQk7IHRtcDQgPSB0bXA0ICogMC4yOTg2MzEzMzY7ICB0bXA1ID0gdG1wNSAqIDIuMDUzMTE5ODY5OwotCTsgdG1wNiA9IHRtcDYgKiAzLjA3MjcxMTAyNjsgIHRtcDcgPSB0bXA3ICogMS41MDEzMjExMTA7Ci0JOyB6MSA9IHoxICogLTAuODk5OTc2MjIzOyAgejIgPSB6MiAqIC0yLjU2MjkxNTQ0NzsKLQk7IGRhdGE3ID0gdG1wNCArIHoxICsgejM7ICBkYXRhNSA9IHRtcDUgKyB6MiArIHo0OwotCTsgZGF0YTMgPSB0bXA2ICsgejIgKyB6MzsgIGRhdGExID0gdG1wNyArIHoxICsgejQ7Ci0JOwotCTsgKFRoaXMgaW1wbGVtZW50YXRpb24pCi0JOyB0bXA0ID0gdG1wNCAqICgwLjI5ODYzMTMzNiAtIDAuODk5OTc2MjIzKSArIHRtcDcgKiAtMC44OTk5NzYyMjM7Ci0JOyB0bXA1ID0gdG1wNSAqICgyLjA1MzExOTg2OSAtIDIuNTYyOTE1NDQ3KSArIHRtcDYgKiAtMi41NjI5MTU0NDc7Ci0JOyB0bXA2ID0gdG1wNSAqIC0yLjU2MjkxNTQ0NyArIHRtcDYgKiAoMy4wNzI3MTEwMjYgLSAyLjU2MjkxNTQ0Nyk7Ci0JOyB0bXA3ID0gdG1wNCAqIC0wLjg5OTk3NjIyMyArIHRtcDcgKiAoMS41MDEzMjExMTAgLSAwLjg5OTk3NjIyMyk7Ci0JOyBkYXRhNyA9IHRtcDQgKyB6MzsgIGRhdGE1ID0gdG1wNSArIHo0OwotCTsgZGF0YTMgPSB0bXA2ICsgejM7ICBkYXRhMSA9IHRtcDcgKyB6NDsKKyAgICAgICAgOyAoT3JpZ2luYWwpCisgICAgICAgIDsgejEgPSB0bXA0ICsgdG1wNzsgIHoyID0gdG1wNSArIHRtcDY7CisgICAgICAgIDsgdG1wNCA9IHRtcDQgKiAwLjI5ODYzMTMzNjsgIHRtcDUgPSB0bXA1ICogMi4wNTMxMTk4Njk7CisgICAgICAgIDsgdG1wNiA9IHRtcDYgKiAzLjA3MjcxMTAyNjsgIHRtcDcgPSB0bXA3ICogMS41MDEzMjExMTA7CisgICAgICAgIDsgejEgPSB6MSAqIC0wLjg5OTk3NjIyMzsgIHoyID0gejIgKiAtMi41NjI5MTU0NDc7CisgICAgICAgIDsgZGF0YTcgPSB0bXA0ICsgejEgKyB6MzsgIGRhdGE1ID0gdG1wNSArIHoyICsgejQ7CisgICAgICAgIDsgZGF0YTMgPSB0bXA2ICsgejIgKyB6MzsgIGRhdGExID0gdG1wNyArIHoxICsgejQ7CisgICAgICAgIDsKKyAgICAgICAgOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKyAgICAgICAgOyB0bXA0ID0gdG1wNCAqICgwLjI5ODYzMTMzNiAtIDAuODk5OTc2MjIzKSArIHRtcDcgKiAtMC44OTk5NzYyMjM7CisgICAgICAgIDsgdG1wNSA9IHRtcDUgKiAoMi4wNTMxMTk4NjkgLSAyLjU2MjkxNTQ0NykgKyB0bXA2ICogLTIuNTYyOTE1NDQ3OworICAgICAgICA7IHRtcDYgPSB0bXA1ICogLTIuNTYyOTE1NDQ3ICsgdG1wNiAqICgzLjA3MjcxMTAyNiAtIDIuNTYyOTE1NDQ3KTsKKyAgICAgICAgOyB0bXA3ID0gdG1wNCAqIC0wLjg5OTk3NjIyMyArIHRtcDcgKiAoMS41MDEzMjExMTAgLSAwLjg5OTk3NjIyMyk7CisgICAgICAgIDsgZGF0YTcgPSB0bXA0ICsgejM7ICBkYXRhNSA9IHRtcDUgKyB6NDsKKyAgICAgICAgOyBkYXRhMyA9IHRtcDYgKyB6MzsgIGRhdGExID0gdG1wNyArIHo0OwogCi0JbW92ZHFhICAgIHhtbTQseG1tMAotCW1vdmRxYSAgICB4bW0xLHhtbTAKLQlwdW5wY2tsd2QgeG1tNCx4bW01Ci0JcHVucGNraHdkIHhtbTEseG1tNQotCW1vdmRxYSAgICB4bW0wLHhtbTQKLQltb3ZkcWEgICAgeG1tNSx4bW0xCi0JcG1hZGR3ZCAgIHhtbTQsW0dPVE9GRihlYngsUFdfTUYwNjBfTUYwODkpXQk7IHhtbTQ9dG1wNEwKLQlwbWFkZHdkICAgeG1tMSxbR09UT0ZGKGVieCxQV19NRjA2MF9NRjA4OSldCTsgeG1tMT10bXA0SAotCXBtYWRkd2QgICB4bW0wLFtHT1RPRkYoZWJ4LFBXX01GMDg5X0YwNjApXQk7IHhtbTA9dG1wN0wKLQlwbWFkZHdkICAgeG1tNSxbR09UT0ZGKGVieCxQV19NRjA4OV9GMDYwKV0JOyB4bW01PXRtcDdICisgICAgICAgIG1vdmRxYSAgICB4bW00LHhtbTAKKyAgICAgICAgbW92ZHFhICAgIHhtbTEseG1tMAorICAgICAgICBwdW5wY2tsd2QgeG1tNCx4bW01CisgICAgICAgIHB1bnBja2h3ZCB4bW0xLHhtbTUKKyAgICAgICAgbW92ZHFhICAgIHhtbTAseG1tNAorICAgICAgICBtb3ZkcWEgICAgeG1tNSx4bW0xCisgICAgICAgIHBtYWRkd2QgICB4bW00LFtHT1RPRkYoZWJ4LFBXX01GMDYwX01GMDg5KV0gICAgIDsgeG1tND10bXA0TAorICAgICAgICBwbWFkZHdkICAgeG1tMSxbR09UT0ZGKGVieCxQV19NRjA2MF9NRjA4OSldICAgICA7IHhtbTE9dG1wNEgKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTAsW0dPVE9GRihlYngsUFdfTUYwODlfRjA2MCldICAgICAgOyB4bW0wPXRtcDdMCisgICAgICAgIHBtYWRkd2QgICB4bW01LFtHT1RPRkYoZWJ4LFBXX01GMDg5X0YwNjApXSAgICAgIDsgeG1tNT10bXA3SAogCi0JcGFkZGQJeG1tNCwgWE1NV09SRCBbd2soMCldCTsgeG1tND1kYXRhN0wKLQlwYWRkZAl4bW0xLCBYTU1XT1JEIFt3aygxKV0JOyB4bW0xPWRhdGE3SAotCXBhZGRkCXhtbTAseG1tMgkJOyB4bW0wPWRhdGExTAotCXBhZGRkCXhtbTUseG1tNgkJOyB4bW01PWRhdGExSAorICAgICAgICBwYWRkZCAgIHhtbTQsIFhNTVdPUkQgW3drKDApXSAgIDsgeG1tND1kYXRhN0wKKyAgICAgICAgcGFkZGQgICB4bW0xLCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTE9ZGF0YTdICisgICAgICAgIHBhZGRkICAgeG1tMCx4bW0yICAgICAgICAgICAgICAgOyB4bW0wPWRhdGExTAorICAgICAgICBwYWRkZCAgIHhtbTUseG1tNiAgICAgICAgICAgICAgIDsgeG1tNT1kYXRhMUgKIAotCXBhZGRkCXhtbTQsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildCi0JcGFkZGQJeG1tMSxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyKV0KLQlwc3JhZAl4bW00LERFU0NBTEVfUDIKLQlwc3JhZAl4bW0xLERFU0NBTEVfUDIKLQlwYWRkZAl4bW0wLFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQotCXBhZGRkCXhtbTUsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildCi0JcHNyYWQJeG1tMCxERVNDQUxFX1AyCi0JcHNyYWQJeG1tNSxERVNDQUxFX1AyCisgICAgICAgIHBhZGRkICAgeG1tNCxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyKV0KKyAgICAgICAgcGFkZGQgICB4bW0xLFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQorICAgICAgICBwc3JhZCAgIHhtbTQsREVTQ0FMRV9QMgorICAgICAgICBwc3JhZCAgIHhtbTEsREVTQ0FMRV9QMgorICAgICAgICBwYWRkZCAgIHhtbTAsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildCisgICAgICAgIHBhZGRkICAgeG1tNSxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyKV0KKyAgICAgICAgcHNyYWQgICB4bW0wLERFU0NBTEVfUDIKKyAgICAgICAgcHNyYWQgICB4bW01LERFU0NBTEVfUDIKIAotCXBhY2tzc2R3ICB4bW00LHhtbTEJCTsgeG1tND1kYXRhNwotCXBhY2tzc2R3ICB4bW0wLHhtbTUJCTsgeG1tMD1kYXRhMQorICAgICAgICBwYWNrc3NkdyAgeG1tNCx4bW0xICAgICAgICAgICAgIDsgeG1tND1kYXRhNworICAgICAgICBwYWNrc3NkdyAgeG1tMCx4bW01ICAgICAgICAgICAgIDsgeG1tMD1kYXRhMQogCi0JbW92ZHFhCVhNTVdPUkQgW1hNTUJMT0NLKDcsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgeG1tNAotCW1vdmRxYQlYTU1XT1JEIFtYTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTAKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFtYTU1CTE9DSyg3LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTQKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFtYTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTAKIAotCW1vdmRxYSAgICB4bW0xLHhtbTMKLQltb3ZkcWEgICAgeG1tNSx4bW0zCi0JcHVucGNrbHdkIHhtbTEseG1tNwotCXB1bnBja2h3ZCB4bW01LHhtbTcKLQltb3ZkcWEgICAgeG1tMyx4bW0xCi0JbW92ZHFhICAgIHhtbTcseG1tNQotCXBtYWRkd2QgICB4bW0xLFtHT1RPRkYoZWJ4LFBXX01GMDUwX01GMjU2KV0JOyB4bW0xPXRtcDVMCi0JcG1hZGR3ZCAgIHhtbTUsW0dPVE9GRihlYngsUFdfTUYwNTBfTUYyNTYpXQk7IHhtbTU9dG1wNUgKLQlwbWFkZHdkICAgeG1tMyxbR09UT0ZGKGVieCxQV19NRjI1Nl9GMDUwKV0JOyB4bW0zPXRtcDZMCi0JcG1hZGR3ZCAgIHhtbTcsW0dPVE9GRihlYngsUFdfTUYyNTZfRjA1MCldCTsgeG1tNz10bXA2SAorICAgICAgICBtb3ZkcWEgICAgeG1tMSx4bW0zCisgICAgICAgIG1vdmRxYSAgICB4bW01LHhtbTMKKyAgICAgICAgcHVucGNrbHdkIHhtbTEseG1tNworICAgICAgICBwdW5wY2tod2QgeG1tNSx4bW03CisgICAgICAgIG1vdmRxYSAgICB4bW0zLHhtbTEKKyAgICAgICAgbW92ZHFhICAgIHhtbTcseG1tNQorICAgICAgICBwbWFkZHdkICAgeG1tMSxbR09UT0ZGKGVieCxQV19NRjA1MF9NRjI1NildICAgICA7IHhtbTE9dG1wNUwKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTUsW0dPVE9GRihlYngsUFdfTUYwNTBfTUYyNTYpXSAgICAgOyB4bW01PXRtcDVICisgICAgICAgIHBtYWRkd2QgICB4bW0zLFtHT1RPRkYoZWJ4LFBXX01GMjU2X0YwNTApXSAgICAgIDsgeG1tMz10bXA2TAorICAgICAgICBwbWFkZHdkICAgeG1tNyxbR09UT0ZGKGVieCxQV19NRjI1Nl9GMDUwKV0gICAgICA7IHhtbTc9dG1wNkgKIAotCXBhZGRkCXhtbTEseG1tMgkJOyB4bW0xPWRhdGE1TAotCXBhZGRkCXhtbTUseG1tNgkJOyB4bW01PWRhdGE1SAotCXBhZGRkCXhtbTMsIFhNTVdPUkQgW3drKDApXQk7IHhtbTM9ZGF0YTNMCi0JcGFkZGQJeG1tNywgWE1NV09SRCBbd2soMSldCTsgeG1tNz1kYXRhM0gKKyAgICAgICAgcGFkZGQgICB4bW0xLHhtbTIgICAgICAgICAgICAgICA7IHhtbTE9ZGF0YTVMCisgICAgICAgIHBhZGRkICAgeG1tNSx4bW02ICAgICAgICAgICAgICAgOyB4bW01PWRhdGE1SAorICAgICAgICBwYWRkZCAgIHhtbTMsIFhNTVdPUkQgW3drKDApXSAgIDsgeG1tMz1kYXRhM0wKKyAgICAgICAgcGFkZGQgICB4bW03LCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTc9ZGF0YTNICiAKLQlwYWRkZAl4bW0xLFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQotCXBhZGRkCXhtbTUsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildCi0JcHNyYWQJeG1tMSxERVNDQUxFX1AyCi0JcHNyYWQJeG1tNSxERVNDQUxFX1AyCi0JcGFkZGQJeG1tMyxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyKV0KLQlwYWRkZAl4bW03LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQotCXBzcmFkCXhtbTMsREVTQ0FMRV9QMgotCXBzcmFkCXhtbTcsREVTQ0FMRV9QMgorICAgICAgICBwYWRkZCAgIHhtbTEsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildCisgICAgICAgIHBhZGRkICAgeG1tNSxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyKV0KKyAgICAgICAgcHNyYWQgICB4bW0xLERFU0NBTEVfUDIKKyAgICAgICAgcHNyYWQgICB4bW01LERFU0NBTEVfUDIKKyAgICAgICAgcGFkZGQgICB4bW0zLFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQorICAgICAgICBwYWRkZCAgIHhtbTcsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildCisgICAgICAgIHBzcmFkICAgeG1tMyxERVNDQUxFX1AyCisgICAgICAgIHBzcmFkICAgeG1tNyxERVNDQUxFX1AyCiAKLQlwYWNrc3NkdyAgeG1tMSx4bW01CQk7IHhtbTE9ZGF0YTUKLQlwYWNrc3NkdyAgeG1tMyx4bW03CQk7IHhtbTM9ZGF0YTMKKyAgICAgICAgcGFja3NzZHcgIHhtbTEseG1tNSAgICAgICAgICAgICA7IHhtbTE9ZGF0YTUKKyAgICAgICAgcGFja3NzZHcgIHhtbTMseG1tNyAgICAgICAgICAgICA7IHhtbTM9ZGF0YTMKIAotCW1vdmRxYQlYTU1XT1JEIFtYTU1CTE9DSyg1LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTEKLQltb3ZkcWEJWE1NV09SRCBbWE1NQkxPQ0soMywwLGVkeCxTSVpFT0ZfRENURUxFTSldLCB4bW0zCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbWE1NQkxPQ0soNSwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCB4bW0xCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbWE1NQkxPQ0soMywwLGVkeCxTSVpFT0ZfRENURUxFTSldLCB4bW0zCiAKLTsJcG9wCWVkaQkJOyB1bnVzZWQKLTsJcG9wCWVzaQkJOyB1bnVzZWQKLTsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLTsJcG9wCWVjeAkJOyB1bnVzZWQKLQlwb3BwaWMJZWJ4Ci0JbW92CWVzcCxlYnAJCTsgZXNwIDwtIGFsaWduZWQgZWJwCi0JcG9wCWVzcAkJOyBlc3AgPC0gb3JpZ2luYWwgZWJwCi0JcG9wCWVicAotCXJldAorOyAgICAgICBwb3AgICAgIGVkaSAgICAgICAgICAgICA7IHVudXNlZAorOyAgICAgICBwb3AgICAgIGVzaSAgICAgICAgICAgICA7IHVudXNlZAorOyAgICAgICBwb3AgICAgIGVkeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgICAgICBwb3AgICAgIGVjeCAgICAgICAgICAgICA7IHVudXNlZAorICAgICAgICBwb3BwaWMgIGVieAorICAgICAgICBtb3YgICAgIGVzcCxlYnAgICAgICAgICA7IGVzcCA8LSBhbGlnbmVkIGVicAorICAgICAgICBwb3AgICAgIGVzcCAgICAgICAgICAgICA7IGVzcCA8LSBvcmlnaW5hbCBlYnAKKyAgICAgICAgcG9wICAgICBlYnAKKyAgICAgICAgcmV0CiAKIDsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCiA7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCi0JYWxpZ24JMTYKKyAgICAgICAgYWxpZ24gICAxNgpkaWZmIC0tZ2l0IGEvc2ltZC9qZnNzZWZsdC02NC5hc20gYi9zaW1kL2pmc3NlZmx0LTY0LmFzbQppbmRleCAwNzI0NWQyLi5iZTJmNTc3IDEwMDY0NAotLS0gYS9zaW1kL2pmc3NlZmx0LTY0LmFzbQorKysgYi9zaW1kL2pmc3NlZmx0LTY0LmFzbQpAQCAtMjYsMzIgKzI2LDMyIEBACiAKIDsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotJW1hY3JvCXVucGNrbHBzMiAyCTsgJTE9KDAgMSAyIDMpIC8gJTI9KDQgNSA2IDcpID0+ICUxPSgwIDEgNCA1KQotCXNodWZwcwklMSwlMiwweDQ0CislbWFjcm8gIHVucGNrbHBzMiAyICAgICA7ICUxPSgwIDEgMiAzKSAvICUyPSg0IDUgNiA3KSA9PiAlMT0oMCAxIDQgNSkKKyAgICAgICAgc2h1ZnBzICAlMSwlMiwweDQ0CiAlZW5kbWFjcm8KIAotJW1hY3JvCXVucGNraHBzMiAyCTsgJTE9KDAgMSAyIDMpIC8gJTI9KDQgNSA2IDcpID0+ICUxPSgyIDMgNiA3KQotCXNodWZwcwklMSwlMiwweEVFCislbWFjcm8gIHVucGNraHBzMiAyICAgICA7ICUxPSgwIDEgMiAzKSAvICUyPSg0IDUgNiA3KSA9PiAlMT0oMiAzIDYgNykKKyAgICAgICAgc2h1ZnBzICAlMSwlMiwweEVFCiAlZW5kbWFjcm8KIAogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCVNFQ1RJT04JU0VHX0NPTlNUCisgICAgICAgIFNFQ1RJT04gU0VHX0NPTlNUCiAKLQlhbGlnbnoJMTYKLQlnbG9iYWwJRVhUTihqY29uc3RfZmRjdF9mbG9hdF9zc2UpCisgICAgICAgIGFsaWdueiAgMTYKKyAgICAgICAgZ2xvYmFsICBFWFROKGpjb25zdF9mZGN0X2Zsb2F0X3NzZSkKIAogRVhUTihqY29uc3RfZmRjdF9mbG9hdF9zc2UpOgogCi1QRF8wXzM4Mgl0aW1lcyA0IGRkICAwLjM4MjY4MzQzMjM2NTA4OTc3MTcyODQ2MAotUERfMF83MDcJdGltZXMgNCBkZCAgMC43MDcxMDY3ODExODY1NDc1MjQ0MDA4NDQKLVBEXzBfNTQxCXRpbWVzIDQgZGQgIDAuNTQxMTk2MTAwMTQ2MTk2OTg0Mzk5NzIzCi1QRF8xXzMwNgl0aW1lcyA0IGRkICAxLjMwNjU2Mjk2NDg3NjM3NjUyNzg1NjY0MworUERfMF8zODIgICAgICAgIHRpbWVzIDQgZGQgIDAuMzgyNjgzNDMyMzY1MDg5NzcxNzI4NDYwCitQRF8wXzcwNyAgICAgICAgdGltZXMgNCBkZCAgMC43MDcxMDY3ODExODY1NDc1MjQ0MDA4NDQKK1BEXzBfNTQxICAgICAgICB0aW1lcyA0IGRkICAwLjU0MTE5NjEwMDE0NjE5Njk4NDM5OTcyMworUERfMV8zMDYgICAgICAgIHRpbWVzIDQgZGQgIDEuMzA2NTYyOTY0ODc2Mzc2NTI3ODU2NjQzCiAKLQlhbGlnbnoJMTYKKyAgICAgICAgYWxpZ256ICAxNgogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JU0VDVElPTglTRUdfVEVYVAotCUJJVFMJNjQKKyAgICAgICAgU0VDVElPTiBTRUdfVEVYVAorICAgICAgICBCSVRTICAgIDY0CiA7CiA7IFBlcmZvcm0gdGhlIGZvcndhcmQgRENUIG9uIG9uZSBibG9jayBvZiBzYW1wbGVzLgogOwpAQCAtNjEsMjk4ICs2MSwyOTggQEAKIAogOyByMTAgPSBGQVNUX0ZMT0FUICogZGF0YQogCi0lZGVmaW5lIHdrKGkpCQlyYnAtKFdLX05VTS0oaSkpKlNJWkVPRl9YTU1XT1JECTsgeG1td29yZCB3a1tXS19OVU1dCi0lZGVmaW5lIFdLX05VTQkJMgorJWRlZmluZSB3ayhpKSAgICAgICAgICAgcmJwLShXS19OVU0tKGkpKSpTSVpFT0ZfWE1NV09SRCA7IHhtbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0gICAgICAgICAgMgogCi0JYWxpZ24JMTYKLQlnbG9iYWwJRVhUTihqc2ltZF9mZGN0X2Zsb2F0X3NzZSkKKyAgICAgICAgYWxpZ24gICAxNgorICAgICAgICBnbG9iYWwgIEVYVE4oanNpbWRfZmRjdF9mbG9hdF9zc2UpCiAKIEVYVE4oanNpbWRfZmRjdF9mbG9hdF9zc2UpOgotCXB1c2gJcmJwCi0JbW92CXJheCxyc3AJCQkJOyByYXggPSBvcmlnaW5hbCByYnAKLQlzdWIJcnNwLCBieXRlIDQKLQlhbmQJcnNwLCBieXRlICgtU0laRU9GX1hNTVdPUkQpCTsgYWxpZ24gdG8gMTI4IGJpdHMKLQltb3YJW3JzcF0scmF4Ci0JbW92CXJicCxyc3AJCQkJOyByYnAgPSBhbGlnbmVkIHJicAotCWxlYQlyc3AsIFt3aygwKV0KLQljb2xsZWN0X2FyZ3MKKyAgICAgICAgcHVzaCAgICByYnAKKyAgICAgICAgbW92ICAgICByYXgscnNwICAgICAgICAgICAgICAgICAgICAgICAgIDsgcmF4ID0gb3JpZ2luYWwgcmJwCisgICAgICAgIHN1YiAgICAgcnNwLCBieXRlIDQKKyAgICAgICAgYW5kICAgICByc3AsIGJ5dGUgKC1TSVpFT0ZfWE1NV09SRCkgICAgIDsgYWxpZ24gdG8gMTI4IGJpdHMKKyAgICAgICAgbW92ICAgICBbcnNwXSxyYXgKKyAgICAgICAgbW92ICAgICByYnAscnNwICAgICAgICAgICAgICAgICAgICAgICAgIDsgcmJwID0gYWxpZ25lZCByYnAKKyAgICAgICAgbGVhICAgICByc3AsIFt3aygwKV0KKyAgICAgICAgY29sbGVjdF9hcmdzCiAKLQk7IC0tLS0gUGFzcyAxOiBwcm9jZXNzIHJvd3MuCisgICAgICAgIDsgLS0tLSBQYXNzIDE6IHByb2Nlc3Mgcm93cy4KIAotCW1vdglyZHgsIHIxMAk7IChGQVNUX0ZMT0FUICopCi0JbW92CXJjeCwgRENUU0laRS80CisgICAgICAgIG1vdiAgICAgcmR4LCByMTAgICAgICAgIDsgKEZBU1RfRkxPQVQgKikKKyAgICAgICAgbW92ICAgICByY3gsIERDVFNJWkUvNAogLnJvd2xvb3A6CiAKLQltb3ZhcHMJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMiwwLHJkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCi0JbW92YXBzCXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxyZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQotCW1vdmFwcwl4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSygyLDEscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KLQltb3ZhcHMJeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soMywxLHJkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgICAgIG1vdmFwcyAgeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMiwwLHJkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgICAgIG1vdmFwcyAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMywwLHJkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgICAgIG1vdmFwcyAgeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soMiwxLHJkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgICAgIG1vdmFwcyAgeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soMywxLHJkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCiAKLQk7IHhtbTA9KDIwIDIxIDIyIDIzKSwgeG1tMj0oMjQgMjUgMjYgMjcpCi0JOyB4bW0xPSgzMCAzMSAzMiAzMyksIHhtbTM9KDM0IDM1IDM2IDM3KQorICAgICAgICA7IHhtbTA9KDIwIDIxIDIyIDIzKSwgeG1tMj0oMjQgMjUgMjYgMjcpCisgICAgICAgIDsgeG1tMT0oMzAgMzEgMzIgMzMpLCB4bW0zPSgzNCAzNSAzNiAzNykKIAotCW1vdmFwcyAgIHhtbTQseG1tMAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCi0JdW5wY2tscHMgeG1tMCx4bW0xCQk7IHhtbTA9KDIwIDMwIDIxIDMxKQotCXVucGNraHBzIHhtbTQseG1tMQkJOyB4bW00PSgyMiAzMiAyMyAzMykKLQltb3ZhcHMgICB4bW01LHhtbTIJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQotCXVucGNrbHBzIHhtbTIseG1tMwkJOyB4bW0yPSgyNCAzNCAyNSAzNSkKLQl1bnBja2hwcyB4bW01LHhtbTMJCTsgeG1tNT0oMjYgMzYgMjcgMzcpCisgICAgICAgIG1vdmFwcyAgIHhtbTQseG1tMCAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgICAgIHVucGNrbHBzIHhtbTAseG1tMSAgICAgICAgICAgICAgOyB4bW0wPSgyMCAzMCAyMSAzMSkKKyAgICAgICAgdW5wY2tocHMgeG1tNCx4bW0xICAgICAgICAgICAgICA7IHhtbTQ9KDIyIDMyIDIzIDMzKQorICAgICAgICBtb3ZhcHMgICB4bW01LHhtbTIgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgICAgICB1bnBja2xwcyB4bW0yLHhtbTMgICAgICAgICAgICAgIDsgeG1tMj0oMjQgMzQgMjUgMzUpCisgICAgICAgIHVucGNraHBzIHhtbTUseG1tMyAgICAgICAgICAgICAgOyB4bW01PSgyNiAzNiAyNyAzNykKIAotCW1vdmFwcwl4bW02LCBYTU1XT1JEIFtYTU1CTE9DSygwLDAscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KLQltb3ZhcHMJeG1tNywgWE1NV09SRCBbWE1NQkxPQ0soMSwwLHJkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCi0JbW92YXBzCXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMSxyZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQotCW1vdmFwcwl4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSygxLDEscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICAgICAgbW92YXBzICB4bW02LCBYTU1XT1JEIFtYTU1CTE9DSygwLDAscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICAgICAgbW92YXBzICB4bW03LCBYTU1XT1JEIFtYTU1CTE9DSygxLDAscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICAgICAgbW92YXBzICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygwLDEscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICAgICAgbW92YXBzICB4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSygxLDEscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KIAotCTsgeG1tNj0oMDAgMDEgMDIgMDMpLCB4bW0xPSgwNCAwNSAwNiAwNykKLQk7IHhtbTc9KDEwIDExIDEyIDEzKSwgeG1tMz0oMTQgMTUgMTYgMTcpCisgICAgICAgIDsgeG1tNj0oMDAgMDEgMDIgMDMpLCB4bW0xPSgwNCAwNSAwNiAwNykKKyAgICAgICAgOyB4bW03PSgxMCAxMSAxMiAxMyksIHhtbTM9KDE0IDE1IDE2IDE3KQogCi0JbW92YXBzCVhNTVdPUkQgW3drKDApXSwgeG1tNAk7IHdrKDApPSgyMiAzMiAyMyAzMykKLQltb3ZhcHMJWE1NV09SRCBbd2soMSldLCB4bW0yCTsgd2soMSk9KDI0IDM0IDI1IDM1KQorICAgICAgICBtb3ZhcHMgIFhNTVdPUkQgW3drKDApXSwgeG1tNCAgIDsgd2soMCk9KDIyIDMyIDIzIDMzKQorICAgICAgICBtb3ZhcHMgIFhNTVdPUkQgW3drKDEpXSwgeG1tMiAgIDsgd2soMSk9KDI0IDM0IDI1IDM1KQogCi0JbW92YXBzICAgeG1tNCx4bW02CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKLQl1bnBja2xwcyB4bW02LHhtbTcJCTsgeG1tNj0oMDAgMTAgMDEgMTEpCi0JdW5wY2tocHMgeG1tNCx4bW03CQk7IHhtbTQ9KDAyIDEyIDAzIDEzKQotCW1vdmFwcyAgIHhtbTIseG1tMQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCi0JdW5wY2tscHMgeG1tMSx4bW0zCQk7IHhtbTE9KDA0IDE0IDA1IDE1KQotCXVucGNraHBzIHhtbTIseG1tMwkJOyB4bW0yPSgwNiAxNiAwNyAxNykKKyAgICAgICAgbW92YXBzICAgeG1tNCx4bW02ICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICAgICAgdW5wY2tscHMgeG1tNix4bW03ICAgICAgICAgICAgICA7IHhtbTY9KDAwIDEwIDAxIDExKQorICAgICAgICB1bnBja2hwcyB4bW00LHhtbTcgICAgICAgICAgICAgIDsgeG1tND0oMDIgMTIgMDMgMTMpCisgICAgICAgIG1vdmFwcyAgIHhtbTIseG1tMSAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgICAgIHVucGNrbHBzIHhtbTEseG1tMyAgICAgICAgICAgICAgOyB4bW0xPSgwNCAxNCAwNSAxNSkKKyAgICAgICAgdW5wY2tocHMgeG1tMix4bW0zICAgICAgICAgICAgICA7IHhtbTI9KDA2IDE2IDA3IDE3KQogCi0JbW92YXBzICAgIHhtbTcseG1tNgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCi0JdW5wY2tscHMyIHhtbTYseG1tMAkJOyB4bW02PSgwMCAxMCAyMCAzMCk9ZGF0YTAKLQl1bnBja2hwczIgeG1tNyx4bW0wCQk7IHhtbTc9KDAxIDExIDIxIDMxKT1kYXRhMQotCW1vdmFwcyAgICB4bW0zLHhtbTIJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQotCXVucGNrbHBzMiB4bW0yLHhtbTUJCTsgeG1tMj0oMDYgMTYgMjYgMzYpPWRhdGE2Ci0JdW5wY2tocHMyIHhtbTMseG1tNQkJOyB4bW0zPSgwNyAxNyAyNyAzNyk9ZGF0YTcKKyAgICAgICAgbW92YXBzICAgIHhtbTcseG1tNiAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICAgICAgdW5wY2tscHMyIHhtbTYseG1tMCAgICAgICAgICAgICA7IHhtbTY9KDAwIDEwIDIwIDMwKT1kYXRhMAorICAgICAgICB1bnBja2hwczIgeG1tNyx4bW0wICAgICAgICAgICAgIDsgeG1tNz0oMDEgMTEgMjEgMzEpPWRhdGExCisgICAgICAgIG1vdmFwcyAgICB4bW0zLHhtbTIgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgICAgIHVucGNrbHBzMiB4bW0yLHhtbTUgICAgICAgICAgICAgOyB4bW0yPSgwNiAxNiAyNiAzNik9ZGF0YTYKKyAgICAgICAgdW5wY2tocHMyIHhtbTMseG1tNSAgICAgICAgICAgICA7IHhtbTM9KDA3IDE3IDI3IDM3KT1kYXRhNwogCi0JbW92YXBzCXhtbTAseG1tNwotCW1vdmFwcwl4bW01LHhtbTYKLQlzdWJwcwl4bW03LHhtbTIJCTsgeG1tNz1kYXRhMS1kYXRhNj10bXA2Ci0Jc3VicHMJeG1tNix4bW0zCQk7IHhtbTY9ZGF0YTAtZGF0YTc9dG1wNwotCWFkZHBzCXhtbTAseG1tMgkJOyB4bW0wPWRhdGExK2RhdGE2PXRtcDEKLQlhZGRwcwl4bW01LHhtbTMJCTsgeG1tNT1kYXRhMCtkYXRhNz10bXAwCisgICAgICAgIG1vdmFwcyAgeG1tMCx4bW03CisgICAgICAgIG1vdmFwcyAgeG1tNSx4bW02CisgICAgICAgIHN1YnBzICAgeG1tNyx4bW0yICAgICAgICAgICAgICAgOyB4bW03PWRhdGExLWRhdGE2PXRtcDYKKyAgICAgICAgc3VicHMgICB4bW02LHhtbTMgICAgICAgICAgICAgICA7IHhtbTY9ZGF0YTAtZGF0YTc9dG1wNworICAgICAgICBhZGRwcyAgIHhtbTAseG1tMiAgICAgICAgICAgICAgIDsgeG1tMD1kYXRhMStkYXRhNj10bXAxCisgICAgICAgIGFkZHBzICAgeG1tNSx4bW0zICAgICAgICAgICAgICAgOyB4bW01PWRhdGEwK2RhdGE3PXRtcDAKIAotCW1vdmFwcwl4bW0yLCBYTU1XT1JEIFt3aygwKV0JOyB4bW0yPSgyMiAzMiAyMyAzMykKLQltb3ZhcHMJeG1tMywgWE1NV09SRCBbd2soMSldCTsgeG1tMz0oMjQgMzQgMjUgMzUpCi0JbW92YXBzCVhNTVdPUkQgW3drKDApXSwgeG1tNwk7IHdrKDApPXRtcDYKLQltb3ZhcHMJWE1NV09SRCBbd2soMSldLCB4bW02CTsgd2soMSk9dG1wNworICAgICAgICBtb3ZhcHMgIHhtbTIsIFhNTVdPUkQgW3drKDApXSAgIDsgeG1tMj0oMjIgMzIgMjMgMzMpCisgICAgICAgIG1vdmFwcyAgeG1tMywgWE1NV09SRCBbd2soMSldICAgOyB4bW0zPSgyNCAzNCAyNSAzNSkKKyAgICAgICAgbW92YXBzICBYTU1XT1JEIFt3aygwKV0sIHhtbTcgICA7IHdrKDApPXRtcDYKKyAgICAgICAgbW92YXBzICBYTU1XT1JEIFt3aygxKV0sIHhtbTYgICA7IHdrKDEpPXRtcDcKIAotCW1vdmFwcyAgICB4bW03LHhtbTQJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQotCXVucGNrbHBzMiB4bW00LHhtbTIJCTsgeG1tND0oMDIgMTIgMjIgMzIpPWRhdGEyCi0JdW5wY2tocHMyIHhtbTcseG1tMgkJOyB4bW03PSgwMyAxMyAyMyAzMyk9ZGF0YTMKLQltb3ZhcHMgICAgeG1tNix4bW0xCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKLQl1bnBja2xwczIgeG1tMSx4bW0zCQk7IHhtbTE9KDA0IDE0IDI0IDM0KT1kYXRhNAotCXVucGNraHBzMiB4bW02LHhtbTMJCTsgeG1tNj0oMDUgMTUgMjUgMzUpPWRhdGE1CisgICAgICAgIG1vdmFwcyAgICB4bW03LHhtbTQgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgICAgIHVucGNrbHBzMiB4bW00LHhtbTIgICAgICAgICAgICAgOyB4bW00PSgwMiAxMiAyMiAzMik9ZGF0YTIKKyAgICAgICAgdW5wY2tocHMyIHhtbTcseG1tMiAgICAgICAgICAgICA7IHhtbTc9KDAzIDEzIDIzIDMzKT1kYXRhMworICAgICAgICBtb3ZhcHMgICAgeG1tNix4bW0xICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgICAgICB1bnBja2xwczIgeG1tMSx4bW0zICAgICAgICAgICAgIDsgeG1tMT0oMDQgMTQgMjQgMzQpPWRhdGE0CisgICAgICAgIHVucGNraHBzMiB4bW02LHhtbTMgICAgICAgICAgICAgOyB4bW02PSgwNSAxNSAyNSAzNSk9ZGF0YTUKIAotCW1vdmFwcwl4bW0yLHhtbTcKLQltb3ZhcHMJeG1tMyx4bW00Ci0JYWRkcHMJeG1tNyx4bW0xCQk7IHhtbTc9ZGF0YTMrZGF0YTQ9dG1wMwotCWFkZHBzCXhtbTQseG1tNgkJOyB4bW00PWRhdGEyK2RhdGE1PXRtcDIKLQlzdWJwcwl4bW0yLHhtbTEJCTsgeG1tMj1kYXRhMy1kYXRhND10bXA0Ci0Jc3VicHMJeG1tMyx4bW02CQk7IHhtbTM9ZGF0YTItZGF0YTU9dG1wNQorICAgICAgICBtb3ZhcHMgIHhtbTIseG1tNworICAgICAgICBtb3ZhcHMgIHhtbTMseG1tNAorICAgICAgICBhZGRwcyAgIHhtbTcseG1tMSAgICAgICAgICAgICAgIDsgeG1tNz1kYXRhMytkYXRhND10bXAzCisgICAgICAgIGFkZHBzICAgeG1tNCx4bW02ICAgICAgICAgICAgICAgOyB4bW00PWRhdGEyK2RhdGE1PXRtcDIKKyAgICAgICAgc3VicHMgICB4bW0yLHhtbTEgICAgICAgICAgICAgICA7IHhtbTI9ZGF0YTMtZGF0YTQ9dG1wNAorICAgICAgICBzdWJwcyAgIHhtbTMseG1tNiAgICAgICAgICAgICAgIDsgeG1tMz1kYXRhMi1kYXRhNT10bXA1CiAKLQk7IC0tIEV2ZW4gcGFydAorICAgICAgICA7IC0tIEV2ZW4gcGFydAogCi0JbW92YXBzCXhtbTEseG1tNQotCW1vdmFwcwl4bW02LHhtbTAKLQlzdWJwcwl4bW01LHhtbTcJCTsgeG1tNT10bXAxMwotCXN1YnBzCXhtbTAseG1tNAkJOyB4bW0wPXRtcDEyCi0JYWRkcHMJeG1tMSx4bW03CQk7IHhtbTE9dG1wMTAKLQlhZGRwcwl4bW02LHhtbTQJCTsgeG1tNj10bXAxMQorICAgICAgICBtb3ZhcHMgIHhtbTEseG1tNQorICAgICAgICBtb3ZhcHMgIHhtbTYseG1tMAorICAgICAgICBzdWJwcyAgIHhtbTUseG1tNyAgICAgICAgICAgICAgIDsgeG1tNT10bXAxMworICAgICAgICBzdWJwcyAgIHhtbTAseG1tNCAgICAgICAgICAgICAgIDsgeG1tMD10bXAxMgorICAgICAgICBhZGRwcyAgIHhtbTEseG1tNyAgICAgICAgICAgICAgIDsgeG1tMT10bXAxMAorICAgICAgICBhZGRwcyAgIHhtbTYseG1tNCAgICAgICAgICAgICAgIDsgeG1tNj10bXAxMQogCi0JYWRkcHMJeG1tMCx4bW01Ci0JbXVscHMJeG1tMCxbcmVsIFBEXzBfNzA3XSA7IHhtbTA9ejEKKyAgICAgICAgYWRkcHMgICB4bW0wLHhtbTUKKyAgICAgICAgbXVscHMgICB4bW0wLFtyZWwgUERfMF83MDddIDsgeG1tMD16MQogCi0JbW92YXBzCXhtbTcseG1tMQotCW1vdmFwcwl4bW00LHhtbTUKLQlzdWJwcwl4bW0xLHhtbTYJCTsgeG1tMT1kYXRhNAotCXN1YnBzCXhtbTUseG1tMAkJOyB4bW01PWRhdGE2Ci0JYWRkcHMJeG1tNyx4bW02CQk7IHhtbTc9ZGF0YTAKLQlhZGRwcwl4bW00LHhtbTAJCTsgeG1tND1kYXRhMgorICAgICAgICBtb3ZhcHMgIHhtbTcseG1tMQorICAgICAgICBtb3ZhcHMgIHhtbTQseG1tNQorICAgICAgICBzdWJwcyAgIHhtbTEseG1tNiAgICAgICAgICAgICAgIDsgeG1tMT1kYXRhNAorICAgICAgICBzdWJwcyAgIHhtbTUseG1tMCAgICAgICAgICAgICAgIDsgeG1tNT1kYXRhNgorICAgICAgICBhZGRwcyAgIHhtbTcseG1tNiAgICAgICAgICAgICAgIDsgeG1tNz1kYXRhMAorICAgICAgICBhZGRwcyAgIHhtbTQseG1tMCAgICAgICAgICAgICAgIDsgeG1tND1kYXRhMgogCi0JbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDAsMSxyZHgsU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMQotCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygyLDEscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTUKLQltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW03Ci0JbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDIsMCxyZHgsU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNAorICAgICAgICBtb3ZhcHMgIFhNTVdPUkQgW1hNTUJMT0NLKDAsMSxyZHgsU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMQorICAgICAgICBtb3ZhcHMgIFhNTVdPUkQgW1hNTUJMT0NLKDIsMSxyZHgsU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNQorICAgICAgICBtb3ZhcHMgIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxyZHgsU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNworICAgICAgICBtb3ZhcHMgIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxyZHgsU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNAogCi0JOyAtLSBPZGQgcGFydAorICAgICAgICA7IC0tIE9kZCBwYXJ0CiAKLQltb3ZhcHMJeG1tNiwgWE1NV09SRCBbd2soMCldCTsgeG1tNj10bXA2Ci0JbW92YXBzCXhtbTAsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTA9dG1wNworICAgICAgICBtb3ZhcHMgIHhtbTYsIFhNTVdPUkQgW3drKDApXSAgIDsgeG1tNj10bXA2CisgICAgICAgIG1vdmFwcyAgeG1tMCwgWE1NV09SRCBbd2soMSldICAgOyB4bW0wPXRtcDcKIAotCWFkZHBzCXhtbTIseG1tMwkJOyB4bW0yPXRtcDEwCi0JYWRkcHMJeG1tMyx4bW02CQk7IHhtbTM9dG1wMTEKLQlhZGRwcwl4bW02LHhtbTAJCTsgeG1tNj10bXAxMiwgeG1tMD10bXA3CisgICAgICAgIGFkZHBzICAgeG1tMix4bW0zICAgICAgICAgICAgICAgOyB4bW0yPXRtcDEwCisgICAgICAgIGFkZHBzICAgeG1tMyx4bW02ICAgICAgICAgICAgICAgOyB4bW0zPXRtcDExCisgICAgICAgIGFkZHBzICAgeG1tNix4bW0wICAgICAgICAgICAgICAgOyB4bW02PXRtcDEyLCB4bW0wPXRtcDcKIAotCW11bHBzCXhtbTMsW3JlbCBQRF8wXzcwN10gOyB4bW0zPXozCisgICAgICAgIG11bHBzICAgeG1tMyxbcmVsIFBEXzBfNzA3XSA7IHhtbTM9ejMKIAotCW1vdmFwcwl4bW0xLHhtbTIJCTsgeG1tMT10bXAxMAotCXN1YnBzCXhtbTIseG1tNgotCW11bHBzCXhtbTIsW3JlbCBQRF8wXzM4Ml0gOyB4bW0yPXo1Ci0JbXVscHMJeG1tMSxbcmVsIFBEXzBfNTQxXSA7IHhtbTE9TVVMVElQTFkodG1wMTAsRklYXzBfNTQxMTk2KQotCW11bHBzCXhtbTYsW3JlbCBQRF8xXzMwNl0gOyB4bW02PU1VTFRJUExZKHRtcDEyLEZJWF8xXzMwNjU2MikKLQlhZGRwcwl4bW0xLHhtbTIJCTsgeG1tMT16MgotCWFkZHBzCXhtbTYseG1tMgkJOyB4bW02PXo0CisgICAgICAgIG1vdmFwcyAgeG1tMSx4bW0yICAgICAgICAgICAgICAgOyB4bW0xPXRtcDEwCisgICAgICAgIHN1YnBzICAgeG1tMix4bW02CisgICAgICAgIG11bHBzICAgeG1tMixbcmVsIFBEXzBfMzgyXSA7IHhtbTI9ejUKKyAgICAgICAgbXVscHMgICB4bW0xLFtyZWwgUERfMF81NDFdIDsgeG1tMT1NVUxUSVBMWSh0bXAxMCxGSVhfMF81NDExOTYpCisgICAgICAgIG11bHBzICAgeG1tNixbcmVsIFBEXzFfMzA2XSA7IHhtbTY9TVVMVElQTFkodG1wMTIsRklYXzFfMzA2NTYyKQorICAgICAgICBhZGRwcyAgIHhtbTEseG1tMiAgICAgICAgICAgICAgIDsgeG1tMT16MgorICAgICAgICBhZGRwcyAgIHhtbTYseG1tMiAgICAgICAgICAgICAgIDsgeG1tNj16NAogCi0JbW92YXBzCXhtbTUseG1tMAotCXN1YnBzCXhtbTAseG1tMwkJOyB4bW0wPXoxMwotCWFkZHBzCXhtbTUseG1tMwkJOyB4bW01PXoxMQorICAgICAgICBtb3ZhcHMgIHhtbTUseG1tMAorICAgICAgICBzdWJwcyAgIHhtbTAseG1tMyAgICAgICAgICAgICAgIDsgeG1tMD16MTMKKyAgICAgICAgYWRkcHMgICB4bW01LHhtbTMgICAgICAgICAgICAgICA7IHhtbTU9ejExCiAKLQltb3ZhcHMJeG1tNyx4bW0wCi0JbW92YXBzCXhtbTQseG1tNQotCXN1YnBzCXhtbTAseG1tMQkJOyB4bW0wPWRhdGEzCi0Jc3VicHMJeG1tNSx4bW02CQk7IHhtbTU9ZGF0YTcKLQlhZGRwcwl4bW03LHhtbTEJCTsgeG1tNz1kYXRhNQotCWFkZHBzCXhtbTQseG1tNgkJOyB4bW00PWRhdGExCisgICAgICAgIG1vdmFwcyAgeG1tNyx4bW0wCisgICAgICAgIG1vdmFwcyAgeG1tNCx4bW01CisgICAgICAgIHN1YnBzICAgeG1tMCx4bW0xICAgICAgICAgICAgICAgOyB4bW0wPWRhdGEzCisgICAgICAgIHN1YnBzICAgeG1tNSx4bW02ICAgICAgICAgICAgICAgOyB4bW01PWRhdGE3CisgICAgICAgIGFkZHBzICAgeG1tNyx4bW0xICAgICAgICAgICAgICAgOyB4bW03PWRhdGE1CisgICAgICAgIGFkZHBzICAgeG1tNCx4bW02ICAgICAgICAgICAgICAgOyB4bW00PWRhdGExCiAKLQltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMywwLHJkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0wCi0JbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDMsMSxyZHgsU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNQotCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygxLDEscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTcKLQltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMSwwLHJkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW00CisgICAgICAgIG1vdmFwcyAgWE1NV09SRCBbWE1NQkxPQ0soMywwLHJkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0wCisgICAgICAgIG1vdmFwcyAgWE1NV09SRCBbWE1NQkxPQ0soMywxLHJkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW01CisgICAgICAgIG1vdmFwcyAgWE1NV09SRCBbWE1NQkxPQ0soMSwxLHJkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW03CisgICAgICAgIG1vdmFwcyAgWE1NV09SRCBbWE1NQkxPQ0soMSwwLHJkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW00CiAKLQlhZGQJcmR4LCA0KkRDVFNJWkUqU0laRU9GX0ZBU1RfRkxPQVQKLQlkZWMJcmN4Ci0Jam56CW5lYXIgLnJvd2xvb3AKKyAgICAgICAgYWRkICAgICByZHgsIDQqRENUU0laRSpTSVpFT0ZfRkFTVF9GTE9BVAorICAgICAgICBkZWMgICAgIHJjeAorICAgICAgICBqbnogICAgIG5lYXIgLnJvd2xvb3AKIAotCTsgLS0tLSBQYXNzIDI6IHByb2Nlc3MgY29sdW1ucy4KKyAgICAgICAgOyAtLS0tIFBhc3MgMjogcHJvY2VzcyBjb2x1bW5zLgogCi0JbW92CXJkeCwgcjEwCTsgKEZBU1RfRkxPQVQgKikKLQltb3YJcmN4LCBEQ1RTSVpFLzQKKyAgICAgICAgbW92ICAgICByZHgsIHIxMCAgICAgICAgOyAoRkFTVF9GTE9BVCAqKQorICAgICAgICBtb3YgICAgIHJjeCwgRENUU0laRS80CiAuY29sdW1ubG9vcDoKIAotCW1vdmFwcwl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygyLDAscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KLQltb3ZhcHMJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMywwLHJkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCi0JbW92YXBzCXhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDYsMCxyZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQotCW1vdmFwcwl4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg3LDAscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICAgICAgbW92YXBzICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygyLDAscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICAgICAgbW92YXBzICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICAgICAgbW92YXBzICB4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSyg2LDAscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICAgICAgbW92YXBzICB4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg3LDAscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KIAotCTsgeG1tMD0oMDIgMTIgMjIgMzIpLCB4bW0yPSg0MiA1MiA2MiA3MikKLQk7IHhtbTE9KDAzIDEzIDIzIDMzKSwgeG1tMz0oNDMgNTMgNjMgNzMpCisgICAgICAgIDsgeG1tMD0oMDIgMTIgMjIgMzIpLCB4bW0yPSg0MiA1MiA2MiA3MikKKyAgICAgICAgOyB4bW0xPSgwMyAxMyAyMyAzMyksIHhtbTM9KDQzIDUzIDYzIDczKQogCi0JbW92YXBzICAgeG1tNCx4bW0wCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKLQl1bnBja2xwcyB4bW0wLHhtbTEJCTsgeG1tMD0oMDIgMDMgMTIgMTMpCi0JdW5wY2tocHMgeG1tNCx4bW0xCQk7IHhtbTQ9KDIyIDIzIDMyIDMzKQotCW1vdmFwcyAgIHhtbTUseG1tMgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCi0JdW5wY2tscHMgeG1tMix4bW0zCQk7IHhtbTI9KDQyIDQzIDUyIDUzKQotCXVucGNraHBzIHhtbTUseG1tMwkJOyB4bW01PSg2MiA2MyA3MiA3MykKKyAgICAgICAgbW92YXBzICAgeG1tNCx4bW0wICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICAgICAgdW5wY2tscHMgeG1tMCx4bW0xICAgICAgICAgICAgICA7IHhtbTA9KDAyIDAzIDEyIDEzKQorICAgICAgICB1bnBja2hwcyB4bW00LHhtbTEgICAgICAgICAgICAgIDsgeG1tND0oMjIgMjMgMzIgMzMpCisgICAgICAgIG1vdmFwcyAgIHhtbTUseG1tMiAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgICAgIHVucGNrbHBzIHhtbTIseG1tMyAgICAgICAgICAgICAgOyB4bW0yPSg0MiA0MyA1MiA1MykKKyAgICAgICAgdW5wY2tocHMgeG1tNSx4bW0zICAgICAgICAgICAgICA7IHhtbTU9KDYyIDYzIDcyIDczKQogCi0JbW92YXBzCXhtbTYsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxyZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQotCW1vdmFwcwl4bW03LCBYTU1XT1JEIFtYTU1CTE9DSygxLDAscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KLQltb3ZhcHMJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNCwwLHJkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCi0JbW92YXBzCXhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxyZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgICAgICBtb3ZhcHMgIHhtbTYsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxyZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgICAgICBtb3ZhcHMgIHhtbTcsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxyZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgICAgICBtb3ZhcHMgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDQsMCxyZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgICAgICBtb3ZhcHMgIHhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxyZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQogCi0JOyB4bW02PSgwMCAxMCAyMCAzMCksIHhtbTE9KDQwIDUwIDYwIDcwKQotCTsgeG1tNz0oMDEgMTEgMjEgMzEpLCB4bW0zPSg0MSA1MSA2MSA3MSkKKyAgICAgICAgOyB4bW02PSgwMCAxMCAyMCAzMCksIHhtbTE9KDQwIDUwIDYwIDcwKQorICAgICAgICA7IHhtbTc9KDAxIDExIDIxIDMxKSwgeG1tMz0oNDEgNTEgNjEgNzEpCiAKLQltb3ZhcHMJWE1NV09SRCBbd2soMCldLCB4bW00CTsgd2soMCk9KDIyIDIzIDMyIDMzKQotCW1vdmFwcwlYTU1XT1JEIFt3aygxKV0sIHhtbTIJOyB3aygxKT0oNDIgNDMgNTIgNTMpCisgICAgICAgIG1vdmFwcyAgWE1NV09SRCBbd2soMCldLCB4bW00ICAgOyB3aygwKT0oMjIgMjMgMzIgMzMpCisgICAgICAgIG1vdmFwcyAgWE1NV09SRCBbd2soMSldLCB4bW0yICAgOyB3aygxKT0oNDIgNDMgNTIgNTMpCiAKLQltb3ZhcHMgICB4bW00LHhtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQotCXVucGNrbHBzIHhtbTYseG1tNwkJOyB4bW02PSgwMCAwMSAxMCAxMSkKLQl1bnBja2hwcyB4bW00LHhtbTcJCTsgeG1tND0oMjAgMjEgMzAgMzEpCi0JbW92YXBzICAgeG1tMix4bW0xCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKLQl1bnBja2xwcyB4bW0xLHhtbTMJCTsgeG1tMT0oNDAgNDEgNTAgNTEpCi0JdW5wY2tocHMgeG1tMix4bW0zCQk7IHhtbTI9KDYwIDYxIDcwIDcxKQorICAgICAgICBtb3ZhcHMgICB4bW00LHhtbTYgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgICAgICB1bnBja2xwcyB4bW02LHhtbTcgICAgICAgICAgICAgIDsgeG1tNj0oMDAgMDEgMTAgMTEpCisgICAgICAgIHVucGNraHBzIHhtbTQseG1tNyAgICAgICAgICAgICAgOyB4bW00PSgyMCAyMSAzMCAzMSkKKyAgICAgICAgbW92YXBzICAgeG1tMix4bW0xICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICAgICAgdW5wY2tscHMgeG1tMSx4bW0zICAgICAgICAgICAgICA7IHhtbTE9KDQwIDQxIDUwIDUxKQorICAgICAgICB1bnBja2hwcyB4bW0yLHhtbTMgICAgICAgICAgICAgIDsgeG1tMj0oNjAgNjEgNzAgNzEpCiAKLQltb3ZhcHMgICAgeG1tNyx4bW02CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKLQl1bnBja2xwczIgeG1tNix4bW0wCQk7IHhtbTY9KDAwIDAxIDAyIDAzKT1kYXRhMAotCXVucGNraHBzMiB4bW03LHhtbTAJCTsgeG1tNz0oMTAgMTEgMTIgMTMpPWRhdGExCi0JbW92YXBzICAgIHhtbTMseG1tMgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCi0JdW5wY2tscHMyIHhtbTIseG1tNQkJOyB4bW0yPSg2MCA2MSA2MiA2Myk9ZGF0YTYKLQl1bnBja2hwczIgeG1tMyx4bW01CQk7IHhtbTM9KDcwIDcxIDcyIDczKT1kYXRhNworICAgICAgICBtb3ZhcHMgICAgeG1tNyx4bW02ICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgICAgICB1bnBja2xwczIgeG1tNix4bW0wICAgICAgICAgICAgIDsgeG1tNj0oMDAgMDEgMDIgMDMpPWRhdGEwCisgICAgICAgIHVucGNraHBzMiB4bW03LHhtbTAgICAgICAgICAgICAgOyB4bW03PSgxMCAxMSAxMiAxMyk9ZGF0YTEKKyAgICAgICAgbW92YXBzICAgIHhtbTMseG1tMiAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICAgICAgdW5wY2tscHMyIHhtbTIseG1tNSAgICAgICAgICAgICA7IHhtbTI9KDYwIDYxIDYyIDYzKT1kYXRhNgorICAgICAgICB1bnBja2hwczIgeG1tMyx4bW01ICAgICAgICAgICAgIDsgeG1tMz0oNzAgNzEgNzIgNzMpPWRhdGE3CiAKLQltb3ZhcHMJeG1tMCx4bW03Ci0JbW92YXBzCXhtbTUseG1tNgotCXN1YnBzCXhtbTcseG1tMgkJOyB4bW03PWRhdGExLWRhdGE2PXRtcDYKLQlzdWJwcwl4bW02LHhtbTMJCTsgeG1tNj1kYXRhMC1kYXRhNz10bXA3Ci0JYWRkcHMJeG1tMCx4bW0yCQk7IHhtbTA9ZGF0YTErZGF0YTY9dG1wMQotCWFkZHBzCXhtbTUseG1tMwkJOyB4bW01PWRhdGEwK2RhdGE3PXRtcDAKKyAgICAgICAgbW92YXBzICB4bW0wLHhtbTcKKyAgICAgICAgbW92YXBzICB4bW01LHhtbTYKKyAgICAgICAgc3VicHMgICB4bW03LHhtbTIgICAgICAgICAgICAgICA7IHhtbTc9ZGF0YTEtZGF0YTY9dG1wNgorICAgICAgICBzdWJwcyAgIHhtbTYseG1tMyAgICAgICAgICAgICAgIDsgeG1tNj1kYXRhMC1kYXRhNz10bXA3CisgICAgICAgIGFkZHBzICAgeG1tMCx4bW0yICAgICAgICAgICAgICAgOyB4bW0wPWRhdGExK2RhdGE2PXRtcDEKKyAgICAgICAgYWRkcHMgICB4bW01LHhtbTMgICAgICAgICAgICAgICA7IHhtbTU9ZGF0YTArZGF0YTc9dG1wMAogCi0JbW92YXBzCXhtbTIsIFhNTVdPUkQgW3drKDApXQk7IHhtbTI9KDIyIDIzIDMyIDMzKQotCW1vdmFwcwl4bW0zLCBYTU1XT1JEIFt3aygxKV0JOyB4bW0zPSg0MiA0MyA1MiA1MykKLQltb3ZhcHMJWE1NV09SRCBbd2soMCldLCB4bW03CTsgd2soMCk9dG1wNgotCW1vdmFwcwlYTU1XT1JEIFt3aygxKV0sIHhtbTYJOyB3aygxKT10bXA3CisgICAgICAgIG1vdmFwcyAgeG1tMiwgWE1NV09SRCBbd2soMCldICAgOyB4bW0yPSgyMiAyMyAzMiAzMykKKyAgICAgICAgbW92YXBzICB4bW0zLCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTM9KDQyIDQzIDUyIDUzKQorICAgICAgICBtb3ZhcHMgIFhNTVdPUkQgW3drKDApXSwgeG1tNyAgIDsgd2soMCk9dG1wNgorICAgICAgICBtb3ZhcHMgIFhNTVdPUkQgW3drKDEpXSwgeG1tNiAgIDsgd2soMSk9dG1wNwogCi0JbW92YXBzICAgIHhtbTcseG1tNAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCi0JdW5wY2tscHMyIHhtbTQseG1tMgkJOyB4bW00PSgyMCAyMSAyMiAyMyk9ZGF0YTIKLQl1bnBja2hwczIgeG1tNyx4bW0yCQk7IHhtbTc9KDMwIDMxIDMyIDMzKT1kYXRhMwotCW1vdmFwcyAgICB4bW02LHhtbTEJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQotCXVucGNrbHBzMiB4bW0xLHhtbTMJCTsgeG1tMT0oNDAgNDEgNDIgNDMpPWRhdGE0Ci0JdW5wY2tocHMyIHhtbTYseG1tMwkJOyB4bW02PSg1MCA1MSA1MiA1Myk9ZGF0YTUKKyAgICAgICAgbW92YXBzICAgIHhtbTcseG1tNCAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICAgICAgdW5wY2tscHMyIHhtbTQseG1tMiAgICAgICAgICAgICA7IHhtbTQ9KDIwIDIxIDIyIDIzKT1kYXRhMgorICAgICAgICB1bnBja2hwczIgeG1tNyx4bW0yICAgICAgICAgICAgIDsgeG1tNz0oMzAgMzEgMzIgMzMpPWRhdGEzCisgICAgICAgIG1vdmFwcyAgICB4bW02LHhtbTEgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgICAgIHVucGNrbHBzMiB4bW0xLHhtbTMgICAgICAgICAgICAgOyB4bW0xPSg0MCA0MSA0MiA0Myk9ZGF0YTQKKyAgICAgICAgdW5wY2tocHMyIHhtbTYseG1tMyAgICAgICAgICAgICA7IHhtbTY9KDUwIDUxIDUyIDUzKT1kYXRhNQogCi0JbW92YXBzCXhtbTIseG1tNwotCW1vdmFwcwl4bW0zLHhtbTQKLQlhZGRwcwl4bW03LHhtbTEJCTsgeG1tNz1kYXRhMytkYXRhND10bXAzCi0JYWRkcHMJeG1tNCx4bW02CQk7IHhtbTQ9ZGF0YTIrZGF0YTU9dG1wMgotCXN1YnBzCXhtbTIseG1tMQkJOyB4bW0yPWRhdGEzLWRhdGE0PXRtcDQKLQlzdWJwcwl4bW0zLHhtbTYJCTsgeG1tMz1kYXRhMi1kYXRhNT10bXA1CisgICAgICAgIG1vdmFwcyAgeG1tMix4bW03CisgICAgICAgIG1vdmFwcyAgeG1tMyx4bW00CisgICAgICAgIGFkZHBzICAgeG1tNyx4bW0xICAgICAgICAgICAgICAgOyB4bW03PWRhdGEzK2RhdGE0PXRtcDMKKyAgICAgICAgYWRkcHMgICB4bW00LHhtbTYgICAgICAgICAgICAgICA7IHhtbTQ9ZGF0YTIrZGF0YTU9dG1wMgorICAgICAgICBzdWJwcyAgIHhtbTIseG1tMSAgICAgICAgICAgICAgIDsgeG1tMj1kYXRhMy1kYXRhND10bXA0CisgICAgICAgIHN1YnBzICAgeG1tMyx4bW02ICAgICAgICAgICAgICAgOyB4bW0zPWRhdGEyLWRhdGE1PXRtcDUKIAotCTsgLS0gRXZlbiBwYXJ0CisgICAgICAgIDsgLS0gRXZlbiBwYXJ0CiAKLQltb3ZhcHMJeG1tMSx4bW01Ci0JbW92YXBzCXhtbTYseG1tMAotCXN1YnBzCXhtbTUseG1tNwkJOyB4bW01PXRtcDEzCi0Jc3VicHMJeG1tMCx4bW00CQk7IHhtbTA9dG1wMTIKLQlhZGRwcwl4bW0xLHhtbTcJCTsgeG1tMT10bXAxMAotCWFkZHBzCXhtbTYseG1tNAkJOyB4bW02PXRtcDExCisgICAgICAgIG1vdmFwcyAgeG1tMSx4bW01CisgICAgICAgIG1vdmFwcyAgeG1tNix4bW0wCisgICAgICAgIHN1YnBzICAgeG1tNSx4bW03ICAgICAgICAgICAgICAgOyB4bW01PXRtcDEzCisgICAgICAgIHN1YnBzICAgeG1tMCx4bW00ICAgICAgICAgICAgICAgOyB4bW0wPXRtcDEyCisgICAgICAgIGFkZHBzICAgeG1tMSx4bW03ICAgICAgICAgICAgICAgOyB4bW0xPXRtcDEwCisgICAgICAgIGFkZHBzICAgeG1tNix4bW00ICAgICAgICAgICAgICAgOyB4bW02PXRtcDExCiAKLQlhZGRwcwl4bW0wLHhtbTUKLQltdWxwcwl4bW0wLFtyZWwgUERfMF83MDddIDsgeG1tMD16MQorICAgICAgICBhZGRwcyAgIHhtbTAseG1tNQorICAgICAgICBtdWxwcyAgIHhtbTAsW3JlbCBQRF8wXzcwN10gOyB4bW0wPXoxCiAKLQltb3ZhcHMJeG1tNyx4bW0xCi0JbW92YXBzCXhtbTQseG1tNQotCXN1YnBzCXhtbTEseG1tNgkJOyB4bW0xPWRhdGE0Ci0Jc3VicHMJeG1tNSx4bW0wCQk7IHhtbTU9ZGF0YTYKLQlhZGRwcwl4bW03LHhtbTYJCTsgeG1tNz1kYXRhMAotCWFkZHBzCXhtbTQseG1tMAkJOyB4bW00PWRhdGEyCisgICAgICAgIG1vdmFwcyAgeG1tNyx4bW0xCisgICAgICAgIG1vdmFwcyAgeG1tNCx4bW01CisgICAgICAgIHN1YnBzICAgeG1tMSx4bW02ICAgICAgICAgICAgICAgOyB4bW0xPWRhdGE0CisgICAgICAgIHN1YnBzICAgeG1tNSx4bW0wICAgICAgICAgICAgICAgOyB4bW01PWRhdGE2CisgICAgICAgIGFkZHBzICAgeG1tNyx4bW02ICAgICAgICAgICAgICAgOyB4bW03PWRhdGEwCisgICAgICAgIGFkZHBzICAgeG1tNCx4bW0wICAgICAgICAgICAgICAgOyB4bW00PWRhdGEyCiAKLQltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soNCwwLHJkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0xCi0JbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDYsMCxyZHgsU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNQotCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygwLDAscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTcKLQltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMiwwLHJkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW00CisgICAgICAgIG1vdmFwcyAgWE1NV09SRCBbWE1NQkxPQ0soNCwwLHJkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0xCisgICAgICAgIG1vdmFwcyAgWE1NV09SRCBbWE1NQkxPQ0soNiwwLHJkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW01CisgICAgICAgIG1vdmFwcyAgWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW03CisgICAgICAgIG1vdmFwcyAgWE1NV09SRCBbWE1NQkxPQ0soMiwwLHJkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW00CiAKLQk7IC0tIE9kZCBwYXJ0CisgICAgICAgIDsgLS0gT2RkIHBhcnQKIAotCW1vdmFwcwl4bW02LCBYTU1XT1JEIFt3aygwKV0JOyB4bW02PXRtcDYKLQltb3ZhcHMJeG1tMCwgWE1NV09SRCBbd2soMSldCTsgeG1tMD10bXA3CisgICAgICAgIG1vdmFwcyAgeG1tNiwgWE1NV09SRCBbd2soMCldICAgOyB4bW02PXRtcDYKKyAgICAgICAgbW92YXBzICB4bW0wLCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTA9dG1wNwogCi0JYWRkcHMJeG1tMix4bW0zCQk7IHhtbTI9dG1wMTAKLQlhZGRwcwl4bW0zLHhtbTYJCTsgeG1tMz10bXAxMQotCWFkZHBzCXhtbTYseG1tMAkJOyB4bW02PXRtcDEyLCB4bW0wPXRtcDcKKyAgICAgICAgYWRkcHMgICB4bW0yLHhtbTMgICAgICAgICAgICAgICA7IHhtbTI9dG1wMTAKKyAgICAgICAgYWRkcHMgICB4bW0zLHhtbTYgICAgICAgICAgICAgICA7IHhtbTM9dG1wMTEKKyAgICAgICAgYWRkcHMgICB4bW02LHhtbTAgICAgICAgICAgICAgICA7IHhtbTY9dG1wMTIsIHhtbTA9dG1wNwogCi0JbXVscHMJeG1tMyxbcmVsIFBEXzBfNzA3XSA7IHhtbTM9ejMKKyAgICAgICAgbXVscHMgICB4bW0zLFtyZWwgUERfMF83MDddIDsgeG1tMz16MwogCi0JbW92YXBzCXhtbTEseG1tMgkJOyB4bW0xPXRtcDEwCi0Jc3VicHMJeG1tMix4bW02Ci0JbXVscHMJeG1tMixbcmVsIFBEXzBfMzgyXSA7IHhtbTI9ejUKLQltdWxwcwl4bW0xLFtyZWwgUERfMF81NDFdIDsgeG1tMT1NVUxUSVBMWSh0bXAxMCxGSVhfMF81NDExOTYpCi0JbXVscHMJeG1tNixbcmVsIFBEXzFfMzA2XSA7IHhtbTY9TVVMVElQTFkodG1wMTIsRklYXzFfMzA2NTYyKQotCWFkZHBzCXhtbTEseG1tMgkJOyB4bW0xPXoyCi0JYWRkcHMJeG1tNix4bW0yCQk7IHhtbTY9ejQKKyAgICAgICAgbW92YXBzICB4bW0xLHhtbTIgICAgICAgICAgICAgICA7IHhtbTE9dG1wMTAKKyAgICAgICAgc3VicHMgICB4bW0yLHhtbTYKKyAgICAgICAgbXVscHMgICB4bW0yLFtyZWwgUERfMF8zODJdIDsgeG1tMj16NQorICAgICAgICBtdWxwcyAgIHhtbTEsW3JlbCBQRF8wXzU0MV0gOyB4bW0xPU1VTFRJUExZKHRtcDEwLEZJWF8wXzU0MTE5NikKKyAgICAgICAgbXVscHMgICB4bW02LFtyZWwgUERfMV8zMDZdIDsgeG1tNj1NVUxUSVBMWSh0bXAxMixGSVhfMV8zMDY1NjIpCisgICAgICAgIGFkZHBzICAgeG1tMSx4bW0yICAgICAgICAgICAgICAgOyB4bW0xPXoyCisgICAgICAgIGFkZHBzICAgeG1tNix4bW0yICAgICAgICAgICAgICAgOyB4bW02PXo0CiAKLQltb3ZhcHMJeG1tNSx4bW0wCi0Jc3VicHMJeG1tMCx4bW0zCQk7IHhtbTA9ejEzCi0JYWRkcHMJeG1tNSx4bW0zCQk7IHhtbTU9ejExCisgICAgICAgIG1vdmFwcyAgeG1tNSx4bW0wCisgICAgICAgIHN1YnBzICAgeG1tMCx4bW0zICAgICAgICAgICAgICAgOyB4bW0wPXoxMworICAgICAgICBhZGRwcyAgIHhtbTUseG1tMyAgICAgICAgICAgICAgIDsgeG1tNT16MTEKIAotCW1vdmFwcwl4bW03LHhtbTAKLQltb3ZhcHMJeG1tNCx4bW01Ci0Jc3VicHMJeG1tMCx4bW0xCQk7IHhtbTA9ZGF0YTMKLQlzdWJwcwl4bW01LHhtbTYJCTsgeG1tNT1kYXRhNwotCWFkZHBzCXhtbTcseG1tMQkJOyB4bW03PWRhdGE1Ci0JYWRkcHMJeG1tNCx4bW02CQk7IHhtbTQ9ZGF0YTEKKyAgICAgICAgbW92YXBzICB4bW03LHhtbTAKKyAgICAgICAgbW92YXBzICB4bW00LHhtbTUKKyAgICAgICAgc3VicHMgICB4bW0wLHhtbTEgICAgICAgICAgICAgICA7IHhtbTA9ZGF0YTMKKyAgICAgICAgc3VicHMgICB4bW01LHhtbTYgICAgICAgICAgICAgICA7IHhtbTU9ZGF0YTcKKyAgICAgICAgYWRkcHMgICB4bW03LHhtbTEgICAgICAgICAgICAgICA7IHhtbTc9ZGF0YTUKKyAgICAgICAgYWRkcHMgICB4bW00LHhtbTYgICAgICAgICAgICAgICA7IHhtbTQ9ZGF0YTEKIAotCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygzLDAscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTAKLQltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soNywwLHJkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW01Ci0JbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDUsMCxyZHgsU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNwotCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygxLDAscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTQKKyAgICAgICAgbW92YXBzICBYTU1XT1JEIFtYTU1CTE9DSygzLDAscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTAKKyAgICAgICAgbW92YXBzICBYTU1XT1JEIFtYTU1CTE9DSyg3LDAscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTUKKyAgICAgICAgbW92YXBzICBYTU1XT1JEIFtYTU1CTE9DSyg1LDAscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTcKKyAgICAgICAgbW92YXBzICBYTU1XT1JEIFtYTU1CTE9DSygxLDAscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTQKIAotCWFkZAlyZHgsIGJ5dGUgNCpTSVpFT0ZfRkFTVF9GTE9BVAotCWRlYwlyY3gKLQlqbnoJbmVhciAuY29sdW1ubG9vcAorICAgICAgICBhZGQgICAgIHJkeCwgYnl0ZSA0KlNJWkVPRl9GQVNUX0ZMT0FUCisgICAgICAgIGRlYyAgICAgcmN4CisgICAgICAgIGpueiAgICAgbmVhciAuY29sdW1ubG9vcAogCi0JdW5jb2xsZWN0X2FyZ3MKLQltb3YJcnNwLHJicAkJOyByc3AgPC0gYWxpZ25lZCByYnAKLQlwb3AJcnNwCQk7IHJzcCA8LSBvcmlnaW5hbCByYnAKLQlwb3AJcmJwCi0JcmV0CisgICAgICAgIHVuY29sbGVjdF9hcmdzCisgICAgICAgIG1vdiAgICAgcnNwLHJicCAgICAgICAgIDsgcnNwIDwtIGFsaWduZWQgcmJwCisgICAgICAgIHBvcCAgICAgcnNwICAgICAgICAgICAgIDsgcnNwIDwtIG9yaWdpbmFsIHJicAorICAgICAgICBwb3AgICAgIHJicAorICAgICAgICByZXQKIAogOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKIDsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KLQlhbGlnbgkxNgorICAgICAgICBhbGlnbiAgIDE2CmRpZmYgLS1naXQgYS9zaW1kL2pmc3NlZmx0LmFzbSBiL3NpbWQvamZzc2VmbHQuYXNtCmluZGV4IGJjNTRjY2MuLjVlY2UzZjQgMTAwNjQ0Ci0tLSBhL3NpbWQvamZzc2VmbHQuYXNtCisrKyBiL3NpbWQvamZzc2VmbHQuYXNtCkBAIC0yNSwzMiArMjUsMzIgQEAKIAogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0lbWFjcm8JdW5wY2tscHMyIDIJOyAlMT0oMCAxIDIgMykgLyAlMj0oNCA1IDYgNykgPT4gJTE9KDAgMSA0IDUpCi0Jc2h1ZnBzCSUxLCUyLDB4NDQKKyVtYWNybyAgdW5wY2tscHMyIDIgICAgIDsgJTE9KDAgMSAyIDMpIC8gJTI9KDQgNSA2IDcpID0+ICUxPSgwIDEgNCA1KQorICAgICAgICBzaHVmcHMgICUxLCUyLDB4NDQKICVlbmRtYWNybwogCi0lbWFjcm8JdW5wY2tocHMyIDIJOyAlMT0oMCAxIDIgMykgLyAlMj0oNCA1IDYgNykgPT4gJTE9KDIgMyA2IDcpCi0Jc2h1ZnBzCSUxLCUyLDB4RUUKKyVtYWNybyAgdW5wY2tocHMyIDIgICAgIDsgJTE9KDAgMSAyIDMpIC8gJTI9KDQgNSA2IDcpID0+ICUxPSgyIDMgNiA3KQorICAgICAgICBzaHVmcHMgICUxLCUyLDB4RUUKICVlbmRtYWNybwogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JU0VDVElPTglTRUdfQ09OU1QKKyAgICAgICAgU0VDVElPTiBTRUdfQ09OU1QKIAotCWFsaWduegkxNgotCWdsb2JhbAlFWFROKGpjb25zdF9mZGN0X2Zsb2F0X3NzZSkKKyAgICAgICAgYWxpZ256ICAxNgorICAgICAgICBnbG9iYWwgIEVYVE4oamNvbnN0X2ZkY3RfZmxvYXRfc3NlKQogCiBFWFROKGpjb25zdF9mZGN0X2Zsb2F0X3NzZSk6CiAKLVBEXzBfMzgyCXRpbWVzIDQgZGQgIDAuMzgyNjgzNDMyMzY1MDg5NzcxNzI4NDYwCi1QRF8wXzcwNwl0aW1lcyA0IGRkICAwLjcwNzEwNjc4MTE4NjU0NzUyNDQwMDg0NAotUERfMF81NDEJdGltZXMgNCBkZCAgMC41NDExOTYxMDAxNDYxOTY5ODQzOTk3MjMKLVBEXzFfMzA2CXRpbWVzIDQgZGQgIDEuMzA2NTYyOTY0ODc2Mzc2NTI3ODU2NjQzCitQRF8wXzM4MiAgICAgICAgdGltZXMgNCBkZCAgMC4zODI2ODM0MzIzNjUwODk3NzE3Mjg0NjAKK1BEXzBfNzA3ICAgICAgICB0aW1lcyA0IGRkICAwLjcwNzEwNjc4MTE4NjU0NzUyNDQwMDg0NAorUERfMF81NDEgICAgICAgIHRpbWVzIDQgZGQgIDAuNTQxMTk2MTAwMTQ2MTk2OTg0Mzk5NzIzCitQRF8xXzMwNiAgICAgICAgdGltZXMgNCBkZCAgMS4zMDY1NjI5NjQ4NzYzNzY1Mjc4NTY2NDMKIAotCWFsaWduegkxNgorICAgICAgICBhbGlnbnogIDE2CiAKIDsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlTRUNUSU9OCVNFR19URVhUCi0JQklUUwkzMgorICAgICAgICBTRUNUSU9OIFNFR19URVhUCisgICAgICAgIEJJVFMgICAgMzIKIDsKIDsgUGVyZm9ybSB0aGUgZm9yd2FyZCBEQ1Qgb24gb25lIGJsb2NrIG9mIHNhbXBsZXMuCiA7CkBAIC01OCwzMTMgKzU4LDMxMyBAQAogOyBqc2ltZF9mZGN0X2Zsb2F0X3NzZSAoRkFTVF9GTE9BVCAqIGRhdGEpCiA7CiAKLSVkZWZpbmUgZGF0YShiKQkJKGIpKzgJCTsgRkFTVF9GTE9BVCAqIGRhdGEKKyVkZWZpbmUgZGF0YShiKSAgICAgICAgIChiKSs4ICAgICAgICAgICA7IEZBU1RfRkxPQVQgKiBkYXRhCiAKLSVkZWZpbmUgb3JpZ2luYWxfZWJwCWVicCswCi0lZGVmaW5lIHdrKGkpCQllYnAtKFdLX05VTS0oaSkpKlNJWkVPRl9YTU1XT1JECTsgeG1td29yZCB3a1tXS19OVU1dCi0lZGVmaW5lIFdLX05VTQkJMgorJWRlZmluZSBvcmlnaW5hbF9lYnAgICAgZWJwKzAKKyVkZWZpbmUgd2soaSkgICAgICAgICAgIGVicC0oV0tfTlVNLShpKSkqU0laRU9GX1hNTVdPUkQgOyB4bW13b3JkIHdrW1dLX05VTV0KKyVkZWZpbmUgV0tfTlVNICAgICAgICAgIDIKIAotCWFsaWduCTE2Ci0JZ2xvYmFsCUVYVE4oanNpbWRfZmRjdF9mbG9hdF9zc2UpCisgICAgICAgIGFsaWduICAgMTYKKyAgICAgICAgZ2xvYmFsICBFWFROKGpzaW1kX2ZkY3RfZmxvYXRfc3NlKQogCiBFWFROKGpzaW1kX2ZkY3RfZmxvYXRfc3NlKToKLQlwdXNoCWVicAotCW1vdgllYXgsZXNwCQkJCTsgZWF4ID0gb3JpZ2luYWwgZWJwCi0Jc3ViCWVzcCwgYnl0ZSA0Ci0JYW5kCWVzcCwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKQk7IGFsaWduIHRvIDEyOCBiaXRzCi0JbW92CVtlc3BdLGVheAotCW1vdgllYnAsZXNwCQkJCTsgZWJwID0gYWxpZ25lZCBlYnAKLQlsZWEJZXNwLCBbd2soMCldCi0JcHVzaHBpYwllYngKLTsJcHVzaAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi07CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotOwlwdXNoCWVzaQkJOyB1bnVzZWQKLTsJcHVzaAllZGkJCTsgdW51c2VkCisgICAgICAgIHB1c2ggICAgZWJwCisgICAgICAgIG1vdiAgICAgZWF4LGVzcCAgICAgICAgICAgICAgICAgICAgICAgICA7IGVheCA9IG9yaWdpbmFsIGVicAorICAgICAgICBzdWIgICAgIGVzcCwgYnl0ZSA0CisgICAgICAgIGFuZCAgICAgZXNwLCBieXRlICgtU0laRU9GX1hNTVdPUkQpICAgICA7IGFsaWduIHRvIDEyOCBiaXRzCisgICAgICAgIG1vdiAgICAgW2VzcF0sZWF4CisgICAgICAgIG1vdiAgICAgZWJwLGVzcCAgICAgICAgICAgICAgICAgICAgICAgICA7IGVicCA9IGFsaWduZWQgZWJwCisgICAgICAgIGxlYSAgICAgZXNwLCBbd2soMCldCisgICAgICAgIHB1c2hwaWMgZWJ4Cis7ICAgICAgIHB1c2ggICAgZWN4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgICAgIHB1c2ggICAgZWR4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgICAgIHB1c2ggICAgZXNpICAgICAgICAgICAgIDsgdW51c2VkCis7ICAgICAgIHB1c2ggICAgZWRpICAgICAgICAgICAgIDsgdW51c2VkCiAKLQlnZXRfR09UCWVieAkJOyBnZXQgR09UIGFkZHJlc3MKKyAgICAgICAgZ2V0X0dPVCBlYnggICAgICAgICAgICAgOyBnZXQgR09UIGFkZHJlc3MKIAotCTsgLS0tLSBQYXNzIDE6IHByb2Nlc3Mgcm93cy4KKyAgICAgICAgOyAtLS0tIFBhc3MgMTogcHJvY2VzcyByb3dzLgogCi0JbW92CWVkeCwgUE9JTlRFUiBbZGF0YShlYXgpXQk7IChGQVNUX0ZMT0FUICopCi0JbW92CWVjeCwgRENUU0laRS80Ci0JYWxpZ254CTE2LDcKKyAgICAgICAgbW92ICAgICBlZHgsIFBPSU5URVIgW2RhdGEoZWF4KV0gICAgICAgIDsgKEZBU1RfRkxPQVQgKikKKyAgICAgICAgbW92ICAgICBlY3gsIERDVFNJWkUvNAorICAgICAgICBhbGlnbnggIDE2LDcKIC5yb3dsb29wOgogCi0JbW92YXBzCXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQotCW1vdmFwcwl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KLQltb3ZhcHMJeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soMiwxLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCi0JbW92YXBzCXhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMSxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgICAgICBtb3ZhcHMgIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgICAgICBtb3ZhcHMgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgICAgICBtb3ZhcHMgIHhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMSxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgICAgICBtb3ZhcHMgIHhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMSxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQogCi0JOyB4bW0wPSgyMCAyMSAyMiAyMyksIHhtbTI9KDI0IDI1IDI2IDI3KQotCTsgeG1tMT0oMzAgMzEgMzIgMzMpLCB4bW0zPSgzNCAzNSAzNiAzNykKKyAgICAgICAgOyB4bW0wPSgyMCAyMSAyMiAyMyksIHhtbTI9KDI0IDI1IDI2IDI3KQorICAgICAgICA7IHhtbTE9KDMwIDMxIDMyIDMzKSwgeG1tMz0oMzQgMzUgMzYgMzcpCiAKLQltb3ZhcHMgICB4bW00LHhtbTAJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQotCXVucGNrbHBzIHhtbTAseG1tMQkJOyB4bW0wPSgyMCAzMCAyMSAzMSkKLQl1bnBja2hwcyB4bW00LHhtbTEJCTsgeG1tND0oMjIgMzIgMjMgMzMpCi0JbW92YXBzICAgeG1tNSx4bW0yCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKLQl1bnBja2xwcyB4bW0yLHhtbTMJCTsgeG1tMj0oMjQgMzQgMjUgMzUpCi0JdW5wY2tocHMgeG1tNSx4bW0zCQk7IHhtbTU9KDI2IDM2IDI3IDM3KQorICAgICAgICBtb3ZhcHMgICB4bW00LHhtbTAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgICAgICB1bnBja2xwcyB4bW0wLHhtbTEgICAgICAgICAgICAgIDsgeG1tMD0oMjAgMzAgMjEgMzEpCisgICAgICAgIHVucGNraHBzIHhtbTQseG1tMSAgICAgICAgICAgICAgOyB4bW00PSgyMiAzMiAyMyAzMykKKyAgICAgICAgbW92YXBzICAgeG1tNSx4bW0yICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICAgICAgdW5wY2tscHMgeG1tMix4bW0zICAgICAgICAgICAgICA7IHhtbTI9KDI0IDM0IDI1IDM1KQorICAgICAgICB1bnBja2hwcyB4bW01LHhtbTMgICAgICAgICAgICAgIDsgeG1tNT0oMjYgMzYgMjcgMzcpCiAKLQltb3ZhcHMJeG1tNiwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCi0JbW92YXBzCXhtbTcsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQotCW1vdmFwcwl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygwLDEsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KLQltb3ZhcHMJeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soMSwxLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgICAgIG1vdmFwcyAgeG1tNiwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgICAgIG1vdmFwcyAgeG1tNywgWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgICAgIG1vdmFwcyAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMCwxLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgICAgIG1vdmFwcyAgeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soMSwxLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCiAKLQk7IHhtbTY9KDAwIDAxIDAyIDAzKSwgeG1tMT0oMDQgMDUgMDYgMDcpCi0JOyB4bW03PSgxMCAxMSAxMiAxMyksIHhtbTM9KDE0IDE1IDE2IDE3KQorICAgICAgICA7IHhtbTY9KDAwIDAxIDAyIDAzKSwgeG1tMT0oMDQgMDUgMDYgMDcpCisgICAgICAgIDsgeG1tNz0oMTAgMTEgMTIgMTMpLCB4bW0zPSgxNCAxNSAxNiAxNykKIAotCW1vdmFwcwlYTU1XT1JEIFt3aygwKV0sIHhtbTQJOyB3aygwKT0oMjIgMzIgMjMgMzMpCi0JbW92YXBzCVhNTVdPUkQgW3drKDEpXSwgeG1tMgk7IHdrKDEpPSgyNCAzNCAyNSAzNSkKKyAgICAgICAgbW92YXBzICBYTU1XT1JEIFt3aygwKV0sIHhtbTQgICA7IHdrKDApPSgyMiAzMiAyMyAzMykKKyAgICAgICAgbW92YXBzICBYTU1XT1JEIFt3aygxKV0sIHhtbTIgICA7IHdrKDEpPSgyNCAzNCAyNSAzNSkKIAotCW1vdmFwcyAgIHhtbTQseG1tNgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCi0JdW5wY2tscHMgeG1tNix4bW03CQk7IHhtbTY9KDAwIDEwIDAxIDExKQotCXVucGNraHBzIHhtbTQseG1tNwkJOyB4bW00PSgwMiAxMiAwMyAxMykKLQltb3ZhcHMgICB4bW0yLHhtbTEJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQotCXVucGNrbHBzIHhtbTEseG1tMwkJOyB4bW0xPSgwNCAxNCAwNSAxNSkKLQl1bnBja2hwcyB4bW0yLHhtbTMJCTsgeG1tMj0oMDYgMTYgMDcgMTcpCisgICAgICAgIG1vdmFwcyAgIHhtbTQseG1tNiAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgICAgIHVucGNrbHBzIHhtbTYseG1tNyAgICAgICAgICAgICAgOyB4bW02PSgwMCAxMCAwMSAxMSkKKyAgICAgICAgdW5wY2tocHMgeG1tNCx4bW03ICAgICAgICAgICAgICA7IHhtbTQ9KDAyIDEyIDAzIDEzKQorICAgICAgICBtb3ZhcHMgICB4bW0yLHhtbTEgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgICAgICB1bnBja2xwcyB4bW0xLHhtbTMgICAgICAgICAgICAgIDsgeG1tMT0oMDQgMTQgMDUgMTUpCisgICAgICAgIHVucGNraHBzIHhtbTIseG1tMyAgICAgICAgICAgICAgOyB4bW0yPSgwNiAxNiAwNyAxNykKIAotCW1vdmFwcyAgICB4bW03LHhtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQotCXVucGNrbHBzMiB4bW02LHhtbTAJCTsgeG1tNj0oMDAgMTAgMjAgMzApPWRhdGEwCi0JdW5wY2tocHMyIHhtbTcseG1tMAkJOyB4bW03PSgwMSAxMSAyMSAzMSk9ZGF0YTEKLQltb3ZhcHMgICAgeG1tMyx4bW0yCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKLQl1bnBja2xwczIgeG1tMix4bW01CQk7IHhtbTI9KDA2IDE2IDI2IDM2KT1kYXRhNgotCXVucGNraHBzMiB4bW0zLHhtbTUJCTsgeG1tMz0oMDcgMTcgMjcgMzcpPWRhdGE3CisgICAgICAgIG1vdmFwcyAgICB4bW03LHhtbTYgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgICAgIHVucGNrbHBzMiB4bW02LHhtbTAgICAgICAgICAgICAgOyB4bW02PSgwMCAxMCAyMCAzMCk9ZGF0YTAKKyAgICAgICAgdW5wY2tocHMyIHhtbTcseG1tMCAgICAgICAgICAgICA7IHhtbTc9KDAxIDExIDIxIDMxKT1kYXRhMQorICAgICAgICBtb3ZhcHMgICAgeG1tMyx4bW0yICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgICAgICB1bnBja2xwczIgeG1tMix4bW01ICAgICAgICAgICAgIDsgeG1tMj0oMDYgMTYgMjYgMzYpPWRhdGE2CisgICAgICAgIHVucGNraHBzMiB4bW0zLHhtbTUgICAgICAgICAgICAgOyB4bW0zPSgwNyAxNyAyNyAzNyk9ZGF0YTcKIAotCW1vdmFwcwl4bW0wLHhtbTcKLQltb3ZhcHMJeG1tNSx4bW02Ci0Jc3VicHMJeG1tNyx4bW0yCQk7IHhtbTc9ZGF0YTEtZGF0YTY9dG1wNgotCXN1YnBzCXhtbTYseG1tMwkJOyB4bW02PWRhdGEwLWRhdGE3PXRtcDcKLQlhZGRwcwl4bW0wLHhtbTIJCTsgeG1tMD1kYXRhMStkYXRhNj10bXAxCi0JYWRkcHMJeG1tNSx4bW0zCQk7IHhtbTU9ZGF0YTArZGF0YTc9dG1wMAorICAgICAgICBtb3ZhcHMgIHhtbTAseG1tNworICAgICAgICBtb3ZhcHMgIHhtbTUseG1tNgorICAgICAgICBzdWJwcyAgIHhtbTcseG1tMiAgICAgICAgICAgICAgIDsgeG1tNz1kYXRhMS1kYXRhNj10bXA2CisgICAgICAgIHN1YnBzICAgeG1tNix4bW0zICAgICAgICAgICAgICAgOyB4bW02PWRhdGEwLWRhdGE3PXRtcDcKKyAgICAgICAgYWRkcHMgICB4bW0wLHhtbTIgICAgICAgICAgICAgICA7IHhtbTA9ZGF0YTErZGF0YTY9dG1wMQorICAgICAgICBhZGRwcyAgIHhtbTUseG1tMyAgICAgICAgICAgICAgIDsgeG1tNT1kYXRhMCtkYXRhNz10bXAwCiAKLQltb3ZhcHMJeG1tMiwgWE1NV09SRCBbd2soMCldCTsgeG1tMj0oMjIgMzIgMjMgMzMpCi0JbW92YXBzCXhtbTMsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTM9KDI0IDM0IDI1IDM1KQotCW1vdmFwcwlYTU1XT1JEIFt3aygwKV0sIHhtbTcJOyB3aygwKT10bXA2Ci0JbW92YXBzCVhNTVdPUkQgW3drKDEpXSwgeG1tNgk7IHdrKDEpPXRtcDcKKyAgICAgICAgbW92YXBzICB4bW0yLCBYTU1XT1JEIFt3aygwKV0gICA7IHhtbTI9KDIyIDMyIDIzIDMzKQorICAgICAgICBtb3ZhcHMgIHhtbTMsIFhNTVdPUkQgW3drKDEpXSAgIDsgeG1tMz0oMjQgMzQgMjUgMzUpCisgICAgICAgIG1vdmFwcyAgWE1NV09SRCBbd2soMCldLCB4bW03ICAgOyB3aygwKT10bXA2CisgICAgICAgIG1vdmFwcyAgWE1NV09SRCBbd2soMSldLCB4bW02ICAgOyB3aygxKT10bXA3CiAKLQltb3ZhcHMgICAgeG1tNyx4bW00CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKLQl1bnBja2xwczIgeG1tNCx4bW0yCQk7IHhtbTQ9KDAyIDEyIDIyIDMyKT1kYXRhMgotCXVucGNraHBzMiB4bW03LHhtbTIJCTsgeG1tNz0oMDMgMTMgMjMgMzMpPWRhdGEzCi0JbW92YXBzICAgIHhtbTYseG1tMQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCi0JdW5wY2tscHMyIHhtbTEseG1tMwkJOyB4bW0xPSgwNCAxNCAyNCAzNCk9ZGF0YTQKLQl1bnBja2hwczIgeG1tNix4bW0zCQk7IHhtbTY9KDA1IDE1IDI1IDM1KT1kYXRhNQorICAgICAgICBtb3ZhcHMgICAgeG1tNyx4bW00ICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgICAgICB1bnBja2xwczIgeG1tNCx4bW0yICAgICAgICAgICAgIDsgeG1tND0oMDIgMTIgMjIgMzIpPWRhdGEyCisgICAgICAgIHVucGNraHBzMiB4bW03LHhtbTIgICAgICAgICAgICAgOyB4bW03PSgwMyAxMyAyMyAzMyk9ZGF0YTMKKyAgICAgICAgbW92YXBzICAgIHhtbTYseG1tMSAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICAgICAgdW5wY2tscHMyIHhtbTEseG1tMyAgICAgICAgICAgICA7IHhtbTE9KDA0IDE0IDI0IDM0KT1kYXRhNAorICAgICAgICB1bnBja2hwczIgeG1tNix4bW0zICAgICAgICAgICAgIDsgeG1tNj0oMDUgMTUgMjUgMzUpPWRhdGE1CiAKLQltb3ZhcHMJeG1tMix4bW03Ci0JbW92YXBzCXhtbTMseG1tNAotCWFkZHBzCXhtbTcseG1tMQkJOyB4bW03PWRhdGEzK2RhdGE0PXRtcDMKLQlhZGRwcwl4bW00LHhtbTYJCTsgeG1tND1kYXRhMitkYXRhNT10bXAyCi0Jc3VicHMJeG1tMix4bW0xCQk7IHhtbTI9ZGF0YTMtZGF0YTQ9dG1wNAotCXN1YnBzCXhtbTMseG1tNgkJOyB4bW0zPWRhdGEyLWRhdGE1PXRtcDUKKyAgICAgICAgbW92YXBzICB4bW0yLHhtbTcKKyAgICAgICAgbW92YXBzICB4bW0zLHhtbTQKKyAgICAgICAgYWRkcHMgICB4bW03LHhtbTEgICAgICAgICAgICAgICA7IHhtbTc9ZGF0YTMrZGF0YTQ9dG1wMworICAgICAgICBhZGRwcyAgIHhtbTQseG1tNiAgICAgICAgICAgICAgIDsgeG1tND1kYXRhMitkYXRhNT10bXAyCisgICAgICAgIHN1YnBzICAgeG1tMix4bW0xICAgICAgICAgICAgICAgOyB4bW0yPWRhdGEzLWRhdGE0PXRtcDQKKyAgICAgICAgc3VicHMgICB4bW0zLHhtbTYgICAgICAgICAgICAgICA7IHhtbTM9ZGF0YTItZGF0YTU9dG1wNQogCi0JOyAtLSBFdmVuIHBhcnQKKyAgICAgICAgOyAtLSBFdmVuIHBhcnQKIAotCW1vdmFwcwl4bW0xLHhtbTUKLQltb3ZhcHMJeG1tNix4bW0wCi0Jc3VicHMJeG1tNSx4bW03CQk7IHhtbTU9dG1wMTMKLQlzdWJwcwl4bW0wLHhtbTQJCTsgeG1tMD10bXAxMgotCWFkZHBzCXhtbTEseG1tNwkJOyB4bW0xPXRtcDEwCi0JYWRkcHMJeG1tNix4bW00CQk7IHhtbTY9dG1wMTEKKyAgICAgICAgbW92YXBzICB4bW0xLHhtbTUKKyAgICAgICAgbW92YXBzICB4bW02LHhtbTAKKyAgICAgICAgc3VicHMgICB4bW01LHhtbTcgICAgICAgICAgICAgICA7IHhtbTU9dG1wMTMKKyAgICAgICAgc3VicHMgICB4bW0wLHhtbTQgICAgICAgICAgICAgICA7IHhtbTA9dG1wMTIKKyAgICAgICAgYWRkcHMgICB4bW0xLHhtbTcgICAgICAgICAgICAgICA7IHhtbTE9dG1wMTAKKyAgICAgICAgYWRkcHMgICB4bW02LHhtbTQgICAgICAgICAgICAgICA7IHhtbTY9dG1wMTEKIAotCWFkZHBzCXhtbTAseG1tNQotCW11bHBzCXhtbTAsW0dPVE9GRihlYngsUERfMF83MDcpXSA7IHhtbTA9ejEKKyAgICAgICAgYWRkcHMgICB4bW0wLHhtbTUKKyAgICAgICAgbXVscHMgICB4bW0wLFtHT1RPRkYoZWJ4LFBEXzBfNzA3KV0gOyB4bW0wPXoxCiAKLQltb3ZhcHMJeG1tNyx4bW0xCi0JbW92YXBzCXhtbTQseG1tNQotCXN1YnBzCXhtbTEseG1tNgkJOyB4bW0xPWRhdGE0Ci0Jc3VicHMJeG1tNSx4bW0wCQk7IHhtbTU9ZGF0YTYKLQlhZGRwcwl4bW03LHhtbTYJCTsgeG1tNz1kYXRhMAotCWFkZHBzCXhtbTQseG1tMAkJOyB4bW00PWRhdGEyCisgICAgICAgIG1vdmFwcyAgeG1tNyx4bW0xCisgICAgICAgIG1vdmFwcyAgeG1tNCx4bW01CisgICAgICAgIHN1YnBzICAgeG1tMSx4bW02ICAgICAgICAgICAgICAgOyB4bW0xPWRhdGE0CisgICAgICAgIHN1YnBzICAgeG1tNSx4bW0wICAgICAgICAgICAgICAgOyB4bW01PWRhdGE2CisgICAgICAgIGFkZHBzICAgeG1tNyx4bW02ICAgICAgICAgICAgICAgOyB4bW03PWRhdGEwCisgICAgICAgIGFkZHBzICAgeG1tNCx4bW0wICAgICAgICAgICAgICAgOyB4bW00PWRhdGEyCiAKLQltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMCwxLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0xCi0JbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDIsMSxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNQotCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTcKLQltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMiwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW00CisgICAgICAgIG1vdmFwcyAgWE1NV09SRCBbWE1NQkxPQ0soMCwxLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0xCisgICAgICAgIG1vdmFwcyAgWE1NV09SRCBbWE1NQkxPQ0soMiwxLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW01CisgICAgICAgIG1vdmFwcyAgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW03CisgICAgICAgIG1vdmFwcyAgWE1NV09SRCBbWE1NQkxPQ0soMiwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW00CiAKLQk7IC0tIE9kZCBwYXJ0CisgICAgICAgIDsgLS0gT2RkIHBhcnQKIAotCW1vdmFwcwl4bW02LCBYTU1XT1JEIFt3aygwKV0JOyB4bW02PXRtcDYKLQltb3ZhcHMJeG1tMCwgWE1NV09SRCBbd2soMSldCTsgeG1tMD10bXA3CisgICAgICAgIG1vdmFwcyAgeG1tNiwgWE1NV09SRCBbd2soMCldICAgOyB4bW02PXRtcDYKKyAgICAgICAgbW92YXBzICB4bW0wLCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTA9dG1wNwogCi0JYWRkcHMJeG1tMix4bW0zCQk7IHhtbTI9dG1wMTAKLQlhZGRwcwl4bW0zLHhtbTYJCTsgeG1tMz10bXAxMQotCWFkZHBzCXhtbTYseG1tMAkJOyB4bW02PXRtcDEyLCB4bW0wPXRtcDcKKyAgICAgICAgYWRkcHMgICB4bW0yLHhtbTMgICAgICAgICAgICAgICA7IHhtbTI9dG1wMTAKKyAgICAgICAgYWRkcHMgICB4bW0zLHhtbTYgICAgICAgICAgICAgICA7IHhtbTM9dG1wMTEKKyAgICAgICAgYWRkcHMgICB4bW02LHhtbTAgICAgICAgICAgICAgICA7IHhtbTY9dG1wMTIsIHhtbTA9dG1wNwogCi0JbXVscHMJeG1tMyxbR09UT0ZGKGVieCxQRF8wXzcwNyldIDsgeG1tMz16MworICAgICAgICBtdWxwcyAgIHhtbTMsW0dPVE9GRihlYngsUERfMF83MDcpXSA7IHhtbTM9ejMKIAotCW1vdmFwcwl4bW0xLHhtbTIJCTsgeG1tMT10bXAxMAotCXN1YnBzCXhtbTIseG1tNgotCW11bHBzCXhtbTIsW0dPVE9GRihlYngsUERfMF8zODIpXSA7IHhtbTI9ejUKLQltdWxwcwl4bW0xLFtHT1RPRkYoZWJ4LFBEXzBfNTQxKV0gOyB4bW0xPU1VTFRJUExZKHRtcDEwLEZJWF8wXzU0MTE5NikKLQltdWxwcwl4bW02LFtHT1RPRkYoZWJ4LFBEXzFfMzA2KV0gOyB4bW02PU1VTFRJUExZKHRtcDEyLEZJWF8xXzMwNjU2MikKLQlhZGRwcwl4bW0xLHhtbTIJCTsgeG1tMT16MgotCWFkZHBzCXhtbTYseG1tMgkJOyB4bW02PXo0CisgICAgICAgIG1vdmFwcyAgeG1tMSx4bW0yICAgICAgICAgICAgICAgOyB4bW0xPXRtcDEwCisgICAgICAgIHN1YnBzICAgeG1tMix4bW02CisgICAgICAgIG11bHBzICAgeG1tMixbR09UT0ZGKGVieCxQRF8wXzM4MildIDsgeG1tMj16NQorICAgICAgICBtdWxwcyAgIHhtbTEsW0dPVE9GRihlYngsUERfMF81NDEpXSA7IHhtbTE9TVVMVElQTFkodG1wMTAsRklYXzBfNTQxMTk2KQorICAgICAgICBtdWxwcyAgIHhtbTYsW0dPVE9GRihlYngsUERfMV8zMDYpXSA7IHhtbTY9TVVMVElQTFkodG1wMTIsRklYXzFfMzA2NTYyKQorICAgICAgICBhZGRwcyAgIHhtbTEseG1tMiAgICAgICAgICAgICAgIDsgeG1tMT16MgorICAgICAgICBhZGRwcyAgIHhtbTYseG1tMiAgICAgICAgICAgICAgIDsgeG1tNj16NAogCi0JbW92YXBzCXhtbTUseG1tMAotCXN1YnBzCXhtbTAseG1tMwkJOyB4bW0wPXoxMwotCWFkZHBzCXhtbTUseG1tMwkJOyB4bW01PXoxMQorICAgICAgICBtb3ZhcHMgIHhtbTUseG1tMAorICAgICAgICBzdWJwcyAgIHhtbTAseG1tMyAgICAgICAgICAgICAgIDsgeG1tMD16MTMKKyAgICAgICAgYWRkcHMgICB4bW01LHhtbTMgICAgICAgICAgICAgICA7IHhtbTU9ejExCiAKLQltb3ZhcHMJeG1tNyx4bW0wCi0JbW92YXBzCXhtbTQseG1tNQotCXN1YnBzCXhtbTAseG1tMQkJOyB4bW0wPWRhdGEzCi0Jc3VicHMJeG1tNSx4bW02CQk7IHhtbTU9ZGF0YTcKLQlhZGRwcwl4bW03LHhtbTEJCTsgeG1tNz1kYXRhNQotCWFkZHBzCXhtbTQseG1tNgkJOyB4bW00PWRhdGExCisgICAgICAgIG1vdmFwcyAgeG1tNyx4bW0wCisgICAgICAgIG1vdmFwcyAgeG1tNCx4bW01CisgICAgICAgIHN1YnBzICAgeG1tMCx4bW0xICAgICAgICAgICAgICAgOyB4bW0wPWRhdGEzCisgICAgICAgIHN1YnBzICAgeG1tNSx4bW02ICAgICAgICAgICAgICAgOyB4bW01PWRhdGE3CisgICAgICAgIGFkZHBzICAgeG1tNyx4bW0xICAgICAgICAgICAgICAgOyB4bW03PWRhdGE1CisgICAgICAgIGFkZHBzICAgeG1tNCx4bW02ICAgICAgICAgICAgICAgOyB4bW00PWRhdGExCiAKLQltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMywwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0wCi0JbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDMsMSxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNQotCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygxLDEsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTcKLQltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW00CisgICAgICAgIG1vdmFwcyAgWE1NV09SRCBbWE1NQkxPQ0soMywwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0wCisgICAgICAgIG1vdmFwcyAgWE1NV09SRCBbWE1NQkxPQ0soMywxLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW01CisgICAgICAgIG1vdmFwcyAgWE1NV09SRCBbWE1NQkxPQ0soMSwxLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW03CisgICAgICAgIG1vdmFwcyAgWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW00CiAKLQlhZGQJZWR4LCA0KkRDVFNJWkUqU0laRU9GX0ZBU1RfRkxPQVQKLQlkZWMJZWN4Ci0Jam56CW5lYXIgLnJvd2xvb3AKKyAgICAgICAgYWRkICAgICBlZHgsIDQqRENUU0laRSpTSVpFT0ZfRkFTVF9GTE9BVAorICAgICAgICBkZWMgICAgIGVjeAorICAgICAgICBqbnogICAgIG5lYXIgLnJvd2xvb3AKIAotCTsgLS0tLSBQYXNzIDI6IHByb2Nlc3MgY29sdW1ucy4KKyAgICAgICAgOyAtLS0tIFBhc3MgMjogcHJvY2VzcyBjb2x1bW5zLgogCi0JbW92CWVkeCwgUE9JTlRFUiBbZGF0YShlYXgpXQk7IChGQVNUX0ZMT0FUICopCi0JbW92CWVjeCwgRENUU0laRS80Ci0JYWxpZ254CTE2LDcKKyAgICAgICAgbW92ICAgICBlZHgsIFBPSU5URVIgW2RhdGEoZWF4KV0gICAgICAgIDsgKEZBU1RfRkxPQVQgKikKKyAgICAgICAgbW92ICAgICBlY3gsIERDVFNJWkUvNAorICAgICAgICBhbGlnbnggIDE2LDcKIC5jb2x1bW5sb29wOgogCi0JbW92YXBzCXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQotCW1vdmFwcwl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KLQltb3ZhcHMJeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soNiwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCi0JbW92YXBzCXhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgICAgICBtb3ZhcHMgIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgICAgICBtb3ZhcHMgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgICAgICBtb3ZhcHMgIHhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDYsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgICAgICBtb3ZhcHMgIHhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQogCi0JOyB4bW0wPSgwMiAxMiAyMiAzMiksIHhtbTI9KDQyIDUyIDYyIDcyKQotCTsgeG1tMT0oMDMgMTMgMjMgMzMpLCB4bW0zPSg0MyA1MyA2MyA3MykKKyAgICAgICAgOyB4bW0wPSgwMiAxMiAyMiAzMiksIHhtbTI9KDQyIDUyIDYyIDcyKQorICAgICAgICA7IHhtbTE9KDAzIDEzIDIzIDMzKSwgeG1tMz0oNDMgNTMgNjMgNzMpCiAKLQltb3ZhcHMgICB4bW00LHhtbTAJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQotCXVucGNrbHBzIHhtbTAseG1tMQkJOyB4bW0wPSgwMiAwMyAxMiAxMykKLQl1bnBja2hwcyB4bW00LHhtbTEJCTsgeG1tND0oMjIgMjMgMzIgMzMpCi0JbW92YXBzICAgeG1tNSx4bW0yCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKLQl1bnBja2xwcyB4bW0yLHhtbTMJCTsgeG1tMj0oNDIgNDMgNTIgNTMpCi0JdW5wY2tocHMgeG1tNSx4bW0zCQk7IHhtbTU9KDYyIDYzIDcyIDczKQorICAgICAgICBtb3ZhcHMgICB4bW00LHhtbTAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgICAgICB1bnBja2xwcyB4bW0wLHhtbTEgICAgICAgICAgICAgIDsgeG1tMD0oMDIgMDMgMTIgMTMpCisgICAgICAgIHVucGNraHBzIHhtbTQseG1tMSAgICAgICAgICAgICAgOyB4bW00PSgyMiAyMyAzMiAzMykKKyAgICAgICAgbW92YXBzICAgeG1tNSx4bW0yICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICAgICAgdW5wY2tscHMgeG1tMix4bW0zICAgICAgICAgICAgICA7IHhtbTI9KDQyIDQzIDUyIDUzKQorICAgICAgICB1bnBja2hwcyB4bW01LHhtbTMgICAgICAgICAgICAgIDsgeG1tNT0oNjIgNjMgNzIgNzMpCiAKLQltb3ZhcHMJeG1tNiwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCi0JbW92YXBzCXhtbTcsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQotCW1vdmFwcwl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSyg0LDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KLQltb3ZhcHMJeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNSwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgICAgIG1vdmFwcyAgeG1tNiwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgICAgIG1vdmFwcyAgeG1tNywgWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgICAgIG1vdmFwcyAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNCwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgICAgIG1vdmFwcyAgeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNSwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCiAKLQk7IHhtbTY9KDAwIDEwIDIwIDMwKSwgeG1tMT0oNDAgNTAgNjAgNzApCi0JOyB4bW03PSgwMSAxMSAyMSAzMSksIHhtbTM9KDQxIDUxIDYxIDcxKQorICAgICAgICA7IHhtbTY9KDAwIDEwIDIwIDMwKSwgeG1tMT0oNDAgNTAgNjAgNzApCisgICAgICAgIDsgeG1tNz0oMDEgMTEgMjEgMzEpLCB4bW0zPSg0MSA1MSA2MSA3MSkKIAotCW1vdmFwcwlYTU1XT1JEIFt3aygwKV0sIHhtbTQJOyB3aygwKT0oMjIgMjMgMzIgMzMpCi0JbW92YXBzCVhNTVdPUkQgW3drKDEpXSwgeG1tMgk7IHdrKDEpPSg0MiA0MyA1MiA1MykKKyAgICAgICAgbW92YXBzICBYTU1XT1JEIFt3aygwKV0sIHhtbTQgICA7IHdrKDApPSgyMiAyMyAzMiAzMykKKyAgICAgICAgbW92YXBzICBYTU1XT1JEIFt3aygxKV0sIHhtbTIgICA7IHdrKDEpPSg0MiA0MyA1MiA1MykKIAotCW1vdmFwcyAgIHhtbTQseG1tNgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCi0JdW5wY2tscHMgeG1tNix4bW03CQk7IHhtbTY9KDAwIDAxIDEwIDExKQotCXVucGNraHBzIHhtbTQseG1tNwkJOyB4bW00PSgyMCAyMSAzMCAzMSkKLQltb3ZhcHMgICB4bW0yLHhtbTEJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQotCXVucGNrbHBzIHhtbTEseG1tMwkJOyB4bW0xPSg0MCA0MSA1MCA1MSkKLQl1bnBja2hwcyB4bW0yLHhtbTMJCTsgeG1tMj0oNjAgNjEgNzAgNzEpCisgICAgICAgIG1vdmFwcyAgIHhtbTQseG1tNiAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgICAgIHVucGNrbHBzIHhtbTYseG1tNyAgICAgICAgICAgICAgOyB4bW02PSgwMCAwMSAxMCAxMSkKKyAgICAgICAgdW5wY2tocHMgeG1tNCx4bW03ICAgICAgICAgICAgICA7IHhtbTQ9KDIwIDIxIDMwIDMxKQorICAgICAgICBtb3ZhcHMgICB4bW0yLHhtbTEgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgICAgICB1bnBja2xwcyB4bW0xLHhtbTMgICAgICAgICAgICAgIDsgeG1tMT0oNDAgNDEgNTAgNTEpCisgICAgICAgIHVucGNraHBzIHhtbTIseG1tMyAgICAgICAgICAgICAgOyB4bW0yPSg2MCA2MSA3MCA3MSkKIAotCW1vdmFwcyAgICB4bW03LHhtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQotCXVucGNrbHBzMiB4bW02LHhtbTAJCTsgeG1tNj0oMDAgMDEgMDIgMDMpPWRhdGEwCi0JdW5wY2tocHMyIHhtbTcseG1tMAkJOyB4bW03PSgxMCAxMSAxMiAxMyk9ZGF0YTEKLQltb3ZhcHMgICAgeG1tMyx4bW0yCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKLQl1bnBja2xwczIgeG1tMix4bW01CQk7IHhtbTI9KDYwIDYxIDYyIDYzKT1kYXRhNgotCXVucGNraHBzMiB4bW0zLHhtbTUJCTsgeG1tMz0oNzAgNzEgNzIgNzMpPWRhdGE3CisgICAgICAgIG1vdmFwcyAgICB4bW03LHhtbTYgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgICAgIHVucGNrbHBzMiB4bW02LHhtbTAgICAgICAgICAgICAgOyB4bW02PSgwMCAwMSAwMiAwMyk9ZGF0YTAKKyAgICAgICAgdW5wY2tocHMyIHhtbTcseG1tMCAgICAgICAgICAgICA7IHhtbTc9KDEwIDExIDEyIDEzKT1kYXRhMQorICAgICAgICBtb3ZhcHMgICAgeG1tMyx4bW0yICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgICAgICB1bnBja2xwczIgeG1tMix4bW01ICAgICAgICAgICAgIDsgeG1tMj0oNjAgNjEgNjIgNjMpPWRhdGE2CisgICAgICAgIHVucGNraHBzMiB4bW0zLHhtbTUgICAgICAgICAgICAgOyB4bW0zPSg3MCA3MSA3MiA3Myk9ZGF0YTcKIAotCW1vdmFwcwl4bW0wLHhtbTcKLQltb3ZhcHMJeG1tNSx4bW02Ci0Jc3VicHMJeG1tNyx4bW0yCQk7IHhtbTc9ZGF0YTEtZGF0YTY9dG1wNgotCXN1YnBzCXhtbTYseG1tMwkJOyB4bW02PWRhdGEwLWRhdGE3PXRtcDcKLQlhZGRwcwl4bW0wLHhtbTIJCTsgeG1tMD1kYXRhMStkYXRhNj10bXAxCi0JYWRkcHMJeG1tNSx4bW0zCQk7IHhtbTU9ZGF0YTArZGF0YTc9dG1wMAorICAgICAgICBtb3ZhcHMgIHhtbTAseG1tNworICAgICAgICBtb3ZhcHMgIHhtbTUseG1tNgorICAgICAgICBzdWJwcyAgIHhtbTcseG1tMiAgICAgICAgICAgICAgIDsgeG1tNz1kYXRhMS1kYXRhNj10bXA2CisgICAgICAgIHN1YnBzICAgeG1tNix4bW0zICAgICAgICAgICAgICAgOyB4bW02PWRhdGEwLWRhdGE3PXRtcDcKKyAgICAgICAgYWRkcHMgICB4bW0wLHhtbTIgICAgICAgICAgICAgICA7IHhtbTA9ZGF0YTErZGF0YTY9dG1wMQorICAgICAgICBhZGRwcyAgIHhtbTUseG1tMyAgICAgICAgICAgICAgIDsgeG1tNT1kYXRhMCtkYXRhNz10bXAwCiAKLQltb3ZhcHMJeG1tMiwgWE1NV09SRCBbd2soMCldCTsgeG1tMj0oMjIgMjMgMzIgMzMpCi0JbW92YXBzCXhtbTMsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTM9KDQyIDQzIDUyIDUzKQotCW1vdmFwcwlYTU1XT1JEIFt3aygwKV0sIHhtbTcJOyB3aygwKT10bXA2Ci0JbW92YXBzCVhNTVdPUkQgW3drKDEpXSwgeG1tNgk7IHdrKDEpPXRtcDcKKyAgICAgICAgbW92YXBzICB4bW0yLCBYTU1XT1JEIFt3aygwKV0gICA7IHhtbTI9KDIyIDIzIDMyIDMzKQorICAgICAgICBtb3ZhcHMgIHhtbTMsIFhNTVdPUkQgW3drKDEpXSAgIDsgeG1tMz0oNDIgNDMgNTIgNTMpCisgICAgICAgIG1vdmFwcyAgWE1NV09SRCBbd2soMCldLCB4bW03ICAgOyB3aygwKT10bXA2CisgICAgICAgIG1vdmFwcyAgWE1NV09SRCBbd2soMSldLCB4bW02ICAgOyB3aygxKT10bXA3CiAKLQltb3ZhcHMgICAgeG1tNyx4bW00CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKLQl1bnBja2xwczIgeG1tNCx4bW0yCQk7IHhtbTQ9KDIwIDIxIDIyIDIzKT1kYXRhMgotCXVucGNraHBzMiB4bW03LHhtbTIJCTsgeG1tNz0oMzAgMzEgMzIgMzMpPWRhdGEzCi0JbW92YXBzICAgIHhtbTYseG1tMQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCi0JdW5wY2tscHMyIHhtbTEseG1tMwkJOyB4bW0xPSg0MCA0MSA0MiA0Myk9ZGF0YTQKLQl1bnBja2hwczIgeG1tNix4bW0zCQk7IHhtbTY9KDUwIDUxIDUyIDUzKT1kYXRhNQorICAgICAgICBtb3ZhcHMgICAgeG1tNyx4bW00ICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgICAgICB1bnBja2xwczIgeG1tNCx4bW0yICAgICAgICAgICAgIDsgeG1tND0oMjAgMjEgMjIgMjMpPWRhdGEyCisgICAgICAgIHVucGNraHBzMiB4bW03LHhtbTIgICAgICAgICAgICAgOyB4bW03PSgzMCAzMSAzMiAzMyk9ZGF0YTMKKyAgICAgICAgbW92YXBzICAgIHhtbTYseG1tMSAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICAgICAgdW5wY2tscHMyIHhtbTEseG1tMyAgICAgICAgICAgICA7IHhtbTE9KDQwIDQxIDQyIDQzKT1kYXRhNAorICAgICAgICB1bnBja2hwczIgeG1tNix4bW0zICAgICAgICAgICAgIDsgeG1tNj0oNTAgNTEgNTIgNTMpPWRhdGE1CiAKLQltb3ZhcHMJeG1tMix4bW03Ci0JbW92YXBzCXhtbTMseG1tNAotCWFkZHBzCXhtbTcseG1tMQkJOyB4bW03PWRhdGEzK2RhdGE0PXRtcDMKLQlhZGRwcwl4bW00LHhtbTYJCTsgeG1tND1kYXRhMitkYXRhNT10bXAyCi0Jc3VicHMJeG1tMix4bW0xCQk7IHhtbTI9ZGF0YTMtZGF0YTQ9dG1wNAotCXN1YnBzCXhtbTMseG1tNgkJOyB4bW0zPWRhdGEyLWRhdGE1PXRtcDUKKyAgICAgICAgbW92YXBzICB4bW0yLHhtbTcKKyAgICAgICAgbW92YXBzICB4bW0zLHhtbTQKKyAgICAgICAgYWRkcHMgICB4bW03LHhtbTEgICAgICAgICAgICAgICA7IHhtbTc9ZGF0YTMrZGF0YTQ9dG1wMworICAgICAgICBhZGRwcyAgIHhtbTQseG1tNiAgICAgICAgICAgICAgIDsgeG1tND1kYXRhMitkYXRhNT10bXAyCisgICAgICAgIHN1YnBzICAgeG1tMix4bW0xICAgICAgICAgICAgICAgOyB4bW0yPWRhdGEzLWRhdGE0PXRtcDQKKyAgICAgICAgc3VicHMgICB4bW0zLHhtbTYgICAgICAgICAgICAgICA7IHhtbTM9ZGF0YTItZGF0YTU9dG1wNQogCi0JOyAtLSBFdmVuIHBhcnQKKyAgICAgICAgOyAtLSBFdmVuIHBhcnQKIAotCW1vdmFwcwl4bW0xLHhtbTUKLQltb3ZhcHMJeG1tNix4bW0wCi0Jc3VicHMJeG1tNSx4bW03CQk7IHhtbTU9dG1wMTMKLQlzdWJwcwl4bW0wLHhtbTQJCTsgeG1tMD10bXAxMgotCWFkZHBzCXhtbTEseG1tNwkJOyB4bW0xPXRtcDEwCi0JYWRkcHMJeG1tNix4bW00CQk7IHhtbTY9dG1wMTEKKyAgICAgICAgbW92YXBzICB4bW0xLHhtbTUKKyAgICAgICAgbW92YXBzICB4bW02LHhtbTAKKyAgICAgICAgc3VicHMgICB4bW01LHhtbTcgICAgICAgICAgICAgICA7IHhtbTU9dG1wMTMKKyAgICAgICAgc3VicHMgICB4bW0wLHhtbTQgICAgICAgICAgICAgICA7IHhtbTA9dG1wMTIKKyAgICAgICAgYWRkcHMgICB4bW0xLHhtbTcgICAgICAgICAgICAgICA7IHhtbTE9dG1wMTAKKyAgICAgICAgYWRkcHMgICB4bW02LHhtbTQgICAgICAgICAgICAgICA7IHhtbTY9dG1wMTEKIAotCWFkZHBzCXhtbTAseG1tNQotCW11bHBzCXhtbTAsW0dPVE9GRihlYngsUERfMF83MDcpXSA7IHhtbTA9ejEKKyAgICAgICAgYWRkcHMgICB4bW0wLHhtbTUKKyAgICAgICAgbXVscHMgICB4bW0wLFtHT1RPRkYoZWJ4LFBEXzBfNzA3KV0gOyB4bW0wPXoxCiAKLQltb3ZhcHMJeG1tNyx4bW0xCi0JbW92YXBzCXhtbTQseG1tNQotCXN1YnBzCXhtbTEseG1tNgkJOyB4bW0xPWRhdGE0Ci0Jc3VicHMJeG1tNSx4bW0wCQk7IHhtbTU9ZGF0YTYKLQlhZGRwcwl4bW03LHhtbTYJCTsgeG1tNz1kYXRhMAotCWFkZHBzCXhtbTQseG1tMAkJOyB4bW00PWRhdGEyCisgICAgICAgIG1vdmFwcyAgeG1tNyx4bW0xCisgICAgICAgIG1vdmFwcyAgeG1tNCx4bW01CisgICAgICAgIHN1YnBzICAgeG1tMSx4bW02ICAgICAgICAgICAgICAgOyB4bW0xPWRhdGE0CisgICAgICAgIHN1YnBzICAgeG1tNSx4bW0wICAgICAgICAgICAgICAgOyB4bW01PWRhdGE2CisgICAgICAgIGFkZHBzICAgeG1tNyx4bW02ICAgICAgICAgICAgICAgOyB4bW03PWRhdGEwCisgICAgICAgIGFkZHBzICAgeG1tNCx4bW0wICAgICAgICAgICAgICAgOyB4bW00PWRhdGEyCiAKLQltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soNCwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0xCi0JbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDYsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNQotCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTcKLQltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMiwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW00CisgICAgICAgIG1vdmFwcyAgWE1NV09SRCBbWE1NQkxPQ0soNCwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0xCisgICAgICAgIG1vdmFwcyAgWE1NV09SRCBbWE1NQkxPQ0soNiwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW01CisgICAgICAgIG1vdmFwcyAgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW03CisgICAgICAgIG1vdmFwcyAgWE1NV09SRCBbWE1NQkxPQ0soMiwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW00CiAKLQk7IC0tIE9kZCBwYXJ0CisgICAgICAgIDsgLS0gT2RkIHBhcnQKIAotCW1vdmFwcwl4bW02LCBYTU1XT1JEIFt3aygwKV0JOyB4bW02PXRtcDYKLQltb3ZhcHMJeG1tMCwgWE1NV09SRCBbd2soMSldCTsgeG1tMD10bXA3CisgICAgICAgIG1vdmFwcyAgeG1tNiwgWE1NV09SRCBbd2soMCldICAgOyB4bW02PXRtcDYKKyAgICAgICAgbW92YXBzICB4bW0wLCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTA9dG1wNwogCi0JYWRkcHMJeG1tMix4bW0zCQk7IHhtbTI9dG1wMTAKLQlhZGRwcwl4bW0zLHhtbTYJCTsgeG1tMz10bXAxMQotCWFkZHBzCXhtbTYseG1tMAkJOyB4bW02PXRtcDEyLCB4bW0wPXRtcDcKKyAgICAgICAgYWRkcHMgICB4bW0yLHhtbTMgICAgICAgICAgICAgICA7IHhtbTI9dG1wMTAKKyAgICAgICAgYWRkcHMgICB4bW0zLHhtbTYgICAgICAgICAgICAgICA7IHhtbTM9dG1wMTEKKyAgICAgICAgYWRkcHMgICB4bW02LHhtbTAgICAgICAgICAgICAgICA7IHhtbTY9dG1wMTIsIHhtbTA9dG1wNwogCi0JbXVscHMJeG1tMyxbR09UT0ZGKGVieCxQRF8wXzcwNyldIDsgeG1tMz16MworICAgICAgICBtdWxwcyAgIHhtbTMsW0dPVE9GRihlYngsUERfMF83MDcpXSA7IHhtbTM9ejMKIAotCW1vdmFwcwl4bW0xLHhtbTIJCTsgeG1tMT10bXAxMAotCXN1YnBzCXhtbTIseG1tNgotCW11bHBzCXhtbTIsW0dPVE9GRihlYngsUERfMF8zODIpXSA7IHhtbTI9ejUKLQltdWxwcwl4bW0xLFtHT1RPRkYoZWJ4LFBEXzBfNTQxKV0gOyB4bW0xPU1VTFRJUExZKHRtcDEwLEZJWF8wXzU0MTE5NikKLQltdWxwcwl4bW02LFtHT1RPRkYoZWJ4LFBEXzFfMzA2KV0gOyB4bW02PU1VTFRJUExZKHRtcDEyLEZJWF8xXzMwNjU2MikKLQlhZGRwcwl4bW0xLHhtbTIJCTsgeG1tMT16MgotCWFkZHBzCXhtbTYseG1tMgkJOyB4bW02PXo0CisgICAgICAgIG1vdmFwcyAgeG1tMSx4bW0yICAgICAgICAgICAgICAgOyB4bW0xPXRtcDEwCisgICAgICAgIHN1YnBzICAgeG1tMix4bW02CisgICAgICAgIG11bHBzICAgeG1tMixbR09UT0ZGKGVieCxQRF8wXzM4MildIDsgeG1tMj16NQorICAgICAgICBtdWxwcyAgIHhtbTEsW0dPVE9GRihlYngsUERfMF81NDEpXSA7IHhtbTE9TVVMVElQTFkodG1wMTAsRklYXzBfNTQxMTk2KQorICAgICAgICBtdWxwcyAgIHhtbTYsW0dPVE9GRihlYngsUERfMV8zMDYpXSA7IHhtbTY9TVVMVElQTFkodG1wMTIsRklYXzFfMzA2NTYyKQorICAgICAgICBhZGRwcyAgIHhtbTEseG1tMiAgICAgICAgICAgICAgIDsgeG1tMT16MgorICAgICAgICBhZGRwcyAgIHhtbTYseG1tMiAgICAgICAgICAgICAgIDsgeG1tNj16NAogCi0JbW92YXBzCXhtbTUseG1tMAotCXN1YnBzCXhtbTAseG1tMwkJOyB4bW0wPXoxMwotCWFkZHBzCXhtbTUseG1tMwkJOyB4bW01PXoxMQorICAgICAgICBtb3ZhcHMgIHhtbTUseG1tMAorICAgICAgICBzdWJwcyAgIHhtbTAseG1tMyAgICAgICAgICAgICAgIDsgeG1tMD16MTMKKyAgICAgICAgYWRkcHMgICB4bW01LHhtbTMgICAgICAgICAgICAgICA7IHhtbTU9ejExCiAKLQltb3ZhcHMJeG1tNyx4bW0wCi0JbW92YXBzCXhtbTQseG1tNQotCXN1YnBzCXhtbTAseG1tMQkJOyB4bW0wPWRhdGEzCi0Jc3VicHMJeG1tNSx4bW02CQk7IHhtbTU9ZGF0YTcKLQlhZGRwcwl4bW03LHhtbTEJCTsgeG1tNz1kYXRhNQotCWFkZHBzCXhtbTQseG1tNgkJOyB4bW00PWRhdGExCisgICAgICAgIG1vdmFwcyAgeG1tNyx4bW0wCisgICAgICAgIG1vdmFwcyAgeG1tNCx4bW01CisgICAgICAgIHN1YnBzICAgeG1tMCx4bW0xICAgICAgICAgICAgICAgOyB4bW0wPWRhdGEzCisgICAgICAgIHN1YnBzICAgeG1tNSx4bW02ICAgICAgICAgICAgICAgOyB4bW01PWRhdGE3CisgICAgICAgIGFkZHBzICAgeG1tNyx4bW0xICAgICAgICAgICAgICAgOyB4bW03PWRhdGE1CisgICAgICAgIGFkZHBzICAgeG1tNCx4bW02ICAgICAgICAgICAgICAgOyB4bW00PWRhdGExCiAKLQltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMywwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0wCi0JbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDcsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNQotCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSyg1LDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTcKLQltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW00CisgICAgICAgIG1vdmFwcyAgWE1NV09SRCBbWE1NQkxPQ0soMywwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0wCisgICAgICAgIG1vdmFwcyAgWE1NV09SRCBbWE1NQkxPQ0soNywwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW01CisgICAgICAgIG1vdmFwcyAgWE1NV09SRCBbWE1NQkxPQ0soNSwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW03CisgICAgICAgIG1vdmFwcyAgWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW00CiAKLQlhZGQJZWR4LCBieXRlIDQqU0laRU9GX0ZBU1RfRkxPQVQKLQlkZWMJZWN4Ci0Jam56CW5lYXIgLmNvbHVtbmxvb3AKKyAgICAgICAgYWRkICAgICBlZHgsIGJ5dGUgNCpTSVpFT0ZfRkFTVF9GTE9BVAorICAgICAgICBkZWMgICAgIGVjeAorICAgICAgICBqbnogICAgIG5lYXIgLmNvbHVtbmxvb3AKIAotOwlwb3AJZWRpCQk7IHVudXNlZAotOwlwb3AJZXNpCQk7IHVudXNlZAotOwlwb3AJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotOwlwb3AJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotCXBvcHBpYwllYngKLQltb3YJZXNwLGVicAkJOyBlc3AgPC0gYWxpZ25lZCBlYnAKLQlwb3AJZXNwCQk7IGVzcCA8LSBvcmlnaW5hbCBlYnAKLQlwb3AJZWJwCi0JcmV0Cis7ICAgICAgIHBvcCAgICAgZWRpICAgICAgICAgICAgIDsgdW51c2VkCis7ICAgICAgIHBvcCAgICAgZXNpICAgICAgICAgICAgIDsgdW51c2VkCis7ICAgICAgIHBvcCAgICAgZWR4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgICAgIHBvcCAgICAgZWN4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgICAgIHBvcHBpYyAgZWJ4CisgICAgICAgIG1vdiAgICAgZXNwLGVicCAgICAgICAgIDsgZXNwIDwtIGFsaWduZWQgZWJwCisgICAgICAgIHBvcCAgICAgZXNwICAgICAgICAgICAgIDsgZXNwIDwtIG9yaWdpbmFsIGVicAorICAgICAgICBwb3AgICAgIGVicAorICAgICAgICByZXQKIAogOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKIDsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KLQlhbGlnbgkxNgorICAgICAgICBhbGlnbiAgIDE2CmRpZmYgLS1naXQgYS9zaW1kL2ppM2RuZmx0LmFzbSBiL3NpbWQvamkzZG5mbHQuYXNtCmluZGV4IGRjMjA3NmYuLjc2MzAzZmEgMTAwNjQ0Ci0tLSBhL3NpbWQvamkzZG5mbHQuYXNtCisrKyBiL3NpbWQvamkzZG5mbHQuYXNtCkBAIC0yNCwyNSArMjQsMjUgQEAKICVpbmNsdWRlICJqZGN0LmluYyIKIAogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCVNFQ1RJT04JU0VHX0NPTlNUCisgICAgICAgIFNFQ1RJT04gU0VHX0NPTlNUCiAKLQlhbGlnbnoJMTYKLQlnbG9iYWwJRVhUTihqY29uc3RfaWRjdF9mbG9hdF8zZG5vdykKKyAgICAgICAgYWxpZ256ICAxNgorICAgICAgICBnbG9iYWwgIEVYVE4oamNvbnN0X2lkY3RfZmxvYXRfM2Rub3cpCiAKIEVYVE4oamNvbnN0X2lkY3RfZmxvYXRfM2Rub3cpOgogCi1QRF8xXzQxNAl0aW1lcyAyIGRkICAxLjQxNDIxMzU2MjM3MzA5NTA0ODgwMTY4OQotUERfMV84NDcJdGltZXMgMiBkZCAgMS44NDc3NTkwNjUwMjI1NzM1MTIyNTYzNjYKLVBEXzFfMDgyCXRpbWVzIDIgZGQgIDEuMDgyMzkyMjAwMjkyMzkzOTY4Nzk5NDQ2Ci1QRF8yXzYxMwl0aW1lcyAyIGRkICAyLjYxMzEyNTkyOTc1Mjc1MzA1NTcxMzI4NgotUERfUk5ESU5UX01BR0lDCXRpbWVzIDIgZGQgIDEwMDY2MzI5Ni4wCTsgKGZsb2F0KSgweDAwQzAwMDAwIDw8IDMpCi1QQl9DRU5URVJKU0FNUAl0aW1lcyA4IGRiICBDRU5URVJKU0FNUExFCitQRF8xXzQxNCAgICAgICAgdGltZXMgMiBkZCAgMS40MTQyMTM1NjIzNzMwOTUwNDg4MDE2ODkKK1BEXzFfODQ3ICAgICAgICB0aW1lcyAyIGRkICAxLjg0Nzc1OTA2NTAyMjU3MzUxMjI1NjM2NgorUERfMV8wODIgICAgICAgIHRpbWVzIDIgZGQgIDEuMDgyMzkyMjAwMjkyMzkzOTY4Nzk5NDQ2CitQRF8yXzYxMyAgICAgICAgdGltZXMgMiBkZCAgMi42MTMxMjU5Mjk3NTI3NTMwNTU3MTMyODYKK1BEX1JORElOVF9NQUdJQyB0aW1lcyAyIGRkICAxMDA2NjMyOTYuMCA7IChmbG9hdCkoMHgwMEMwMDAwMCA8PCAzKQorUEJfQ0VOVEVSSlNBTVAgIHRpbWVzIDggZGIgIENFTlRFUkpTQU1QTEUKIAotCWFsaWduegkxNgorICAgICAgICBhbGlnbnogIDE2CiAKIDsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlTRUNUSU9OCVNFR19URVhUCi0JQklUUwkzMgorICAgICAgICBTRUNUSU9OIFNFR19URVhUCisgICAgICAgIEJJVFMgICAgMzIKIDsKIDsgUGVyZm9ybSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Qgb24gb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cy4KIDsKQEAgLTUxLDQwMiArNTEsNDAyIEBACiA7ICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQogOwogCi0lZGVmaW5lIGRjdF90YWJsZShiKQkoYikrOAkJCTsgdm9pZCAqIGRjdF90YWJsZQotJWRlZmluZSBjb2VmX2Jsb2NrKGIpCShiKSsxMgkJOyBKQ09FRlBUUiBjb2VmX2Jsb2NrCi0lZGVmaW5lIG91dHB1dF9idWYoYikJKGIpKzE2CQk7IEpTQU1QQVJSQVkgb3V0cHV0X2J1ZgotJWRlZmluZSBvdXRwdXRfY29sKGIpCShiKSsyMAkJOyBKRElNRU5TSU9OIG91dHB1dF9jb2wKKyVkZWZpbmUgZGN0X3RhYmxlKGIpICAgIChiKSs4ICAgICAgICAgICA7IHZvaWQgKiBkY3RfdGFibGUKKyVkZWZpbmUgY29lZl9ibG9jayhiKSAgIChiKSsxMiAgICAgICAgICA7IEpDT0VGUFRSIGNvZWZfYmxvY2sKKyVkZWZpbmUgb3V0cHV0X2J1ZihiKSAgIChiKSsxNiAgICAgICAgICA7IEpTQU1QQVJSQVkgb3V0cHV0X2J1ZgorJWRlZmluZSBvdXRwdXRfY29sKGIpICAgKGIpKzIwICAgICAgICAgIDsgSkRJTUVOU0lPTiBvdXRwdXRfY29sCiAKLSVkZWZpbmUgb3JpZ2luYWxfZWJwCWVicCswCi0lZGVmaW5lIHdrKGkpCQllYnAtKFdLX05VTS0oaSkpKlNJWkVPRl9NTVdPUkQJOyBtbXdvcmQgd2tbV0tfTlVNXQotJWRlZmluZSBXS19OVU0JCTIKLSVkZWZpbmUgd29ya3NwYWNlCXdrKDApLURDVFNJWkUyKlNJWkVPRl9GQVNUX0ZMT0FUCi0JCQkJCTsgRkFTVF9GTE9BVCB3b3Jrc3BhY2VbRENUU0laRTJdCislZGVmaW5lIG9yaWdpbmFsX2VicCAgICBlYnArMAorJWRlZmluZSB3ayhpKSAgICAgICAgICAgZWJwLShXS19OVU0tKGkpKSpTSVpFT0ZfTU1XT1JEICA7IG1td29yZCB3a1tXS19OVU1dCislZGVmaW5lIFdLX05VTSAgICAgICAgICAyCislZGVmaW5lIHdvcmtzcGFjZSAgICAgICB3aygwKS1EQ1RTSVpFMipTSVpFT0ZfRkFTVF9GTE9BVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgRkFTVF9GTE9BVCB3b3Jrc3BhY2VbRENUU0laRTJdCiAKLQlhbGlnbgkxNgotCWdsb2JhbAlFWFROKGpzaW1kX2lkY3RfZmxvYXRfM2Rub3cpCisgICAgICAgIGFsaWduICAgMTYKKyAgICAgICAgZ2xvYmFsICBFWFROKGpzaW1kX2lkY3RfZmxvYXRfM2Rub3cpCiAKIEVYVE4oanNpbWRfaWRjdF9mbG9hdF8zZG5vdyk6Ci0JcHVzaAllYnAKLQltb3YJZWF4LGVzcAkJCQk7IGVheCA9IG9yaWdpbmFsIGVicAotCXN1Ygllc3AsIGJ5dGUgNAotCWFuZAllc3AsIGJ5dGUgKC1TSVpFT0ZfTU1XT1JEKQk7IGFsaWduIHRvIDY0IGJpdHMKLQltb3YJW2VzcF0sZWF4Ci0JbW92CWVicCxlc3AJCQkJOyBlYnAgPSBhbGlnbmVkIGVicAotCWxlYQllc3AsIFt3b3Jrc3BhY2VdCi0JcHVzaAllYngKLTsJcHVzaAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi07CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotCXB1c2gJZXNpCi0JcHVzaAllZGkKKyAgICAgICAgcHVzaCAgICBlYnAKKyAgICAgICAgbW92ICAgICBlYXgsZXNwICAgICAgICAgICAgICAgICAgICAgICAgIDsgZWF4ID0gb3JpZ2luYWwgZWJwCisgICAgICAgIHN1YiAgICAgZXNwLCBieXRlIDQKKyAgICAgICAgYW5kICAgICBlc3AsIGJ5dGUgKC1TSVpFT0ZfTU1XT1JEKSAgICAgIDsgYWxpZ24gdG8gNjQgYml0cworICAgICAgICBtb3YgICAgIFtlc3BdLGVheAorICAgICAgICBtb3YgICAgIGVicCxlc3AgICAgICAgICAgICAgICAgICAgICAgICAgOyBlYnAgPSBhbGlnbmVkIGVicAorICAgICAgICBsZWEgICAgIGVzcCwgW3dvcmtzcGFjZV0KKyAgICAgICAgcHVzaCAgICBlYngKKzsgICAgICAgcHVzaCAgICBlY3ggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICAgICAgcHVzaCAgICBlZHggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICAgICAgcHVzaCAgICBlc2kKKyAgICAgICAgcHVzaCAgICBlZGkKIAotCWdldF9HT1QJZWJ4CQk7IGdldCBHT1QgYWRkcmVzcworICAgICAgICBnZXRfR09UIGVieCAgICAgICAgICAgICA7IGdldCBHT1QgYWRkcmVzcwogCi0JOyAtLS0tIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQsIHN0b3JlIGludG8gd29yayBhcnJheS4KKyAgICAgICAgOyAtLS0tIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQsIHN0b3JlIGludG8gd29yayBhcnJheS4KIAotOwltb3YJZWF4LCBbb3JpZ2luYWxfZWJwXQotCW1vdgllZHgsIFBPSU5URVIgW2RjdF90YWJsZShlYXgpXQk7IHF1YW50cHRyCi0JbW92CWVzaSwgSkNPRUZQVFIgW2NvZWZfYmxvY2soZWF4KV0JCTsgaW5wdHIKLQlsZWEJZWRpLCBbd29ya3NwYWNlXQkJCTsgRkFTVF9GTE9BVCAqIHdzcHRyCi0JbW92CWVjeCwgRENUU0laRS8yCQkJCTsgY3RyCi0JYWxpZ254CTE2LDcKKzsgICAgICAgbW92ICAgICBlYXgsIFtvcmlnaW5hbF9lYnBdCisgICAgICAgIG1vdiAgICAgZWR4LCBQT0lOVEVSIFtkY3RfdGFibGUoZWF4KV0gICAgICAgICAgIDsgcXVhbnRwdHIKKyAgICAgICAgbW92ICAgICBlc2ksIEpDT0VGUFRSIFtjb2VmX2Jsb2NrKGVheCldICAgICAgICAgOyBpbnB0cgorICAgICAgICBsZWEgICAgIGVkaSwgW3dvcmtzcGFjZV0gICAgICAgICAgICAgICAgICAgICAgICA7IEZBU1RfRkxPQVQgKiB3c3B0cgorICAgICAgICBtb3YgICAgIGVjeCwgRENUU0laRS8yICAgICAgICAgICAgICAgICAgICAgICAgICA7IGN0cgorICAgICAgICBhbGlnbnggIDE2LDcKIC5jb2x1bW5sb29wOgogJWlmbmRlZiBOT19aRVJPX0NPTFVNTl9URVNUX0ZMT0FUXzNETk9XCi0JbW92CWVheCwgRFdPUkQgW0RXQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQotCW9yCWVheCwgRFdPUkQgW0RXQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQotCWpueglzaG9ydCAuY29sdW1uRENUCisgICAgICAgIG1vdiAgICAgZWF4LCBEV09SRCBbRFdCTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG9yICAgICAgZWF4LCBEV09SRCBbRFdCTE9DSygyLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIGpueiAgICAgc2hvcnQgLmNvbHVtbkRDVAogCi0JcHVzaHBpYwllYngJCTsgc2F2ZSBHT1QgYWRkcmVzcwotCW1vdgllYngsIERXT1JEIFtEV0JMT0NLKDMsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQltb3YJZWF4LCBEV09SRCBbRFdCTE9DSyg0LDAsZXNpLFNJWkVPRl9KQ09FRildCi0Jb3IJZWJ4LCBEV09SRCBbRFdCTE9DSyg1LDAsZXNpLFNJWkVPRl9KQ09FRildCi0Jb3IJZWF4LCBEV09SRCBbRFdCTE9DSyg2LDAsZXNpLFNJWkVPRl9KQ09FRildCi0Jb3IJZWJ4LCBEV09SRCBbRFdCTE9DSyg3LDAsZXNpLFNJWkVPRl9KQ09FRildCi0Jb3IJZWF4LGVieAotCXBvcHBpYwllYngJCTsgcmVzdG9yZSBHT1QgYWRkcmVzcwotCWpueglzaG9ydCAuY29sdW1uRENUCisgICAgICAgIHB1c2hwaWMgZWJ4ICAgICAgICAgICAgIDsgc2F2ZSBHT1QgYWRkcmVzcworICAgICAgICBtb3YgICAgIGVieCwgRFdPUkQgW0RXQkxPQ0soMywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBtb3YgICAgIGVheCwgRFdPUkQgW0RXQkxPQ0soNCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBvciAgICAgIGVieCwgRFdPUkQgW0RXQkxPQ0soNSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBvciAgICAgIGVheCwgRFdPUkQgW0RXQkxPQ0soNiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBvciAgICAgIGVieCwgRFdPUkQgW0RXQkxPQ0soNywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBvciAgICAgIGVheCxlYngKKyAgICAgICAgcG9wcGljICBlYnggICAgICAgICAgICAgOyByZXN0b3JlIEdPVCBhZGRyZXNzCisgICAgICAgIGpueiAgICAgc2hvcnQgLmNvbHVtbkRDVAogCi0JOyAtLSBBQyB0ZXJtcyBhbGwgemVybworICAgICAgICA7IC0tIEFDIHRlcm1zIGFsbCB6ZXJvCiAKLQltb3ZkICAgICAgbW0wLCBEV09SRCBbRFdCTE9DSygwLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdmQgICAgICBtbTAsIERXT1JEIFtEV0JMT0NLKDAsMCxlc2ksU0laRU9GX0pDT0VGKV0KIAotCXB1bnBja2x3ZCBtbTAsbW0wCi0JcHNyYWQgICAgIG1tMCwoRFdPUkRfQklULVdPUkRfQklUKQotCXBpMmZkICAgICBtbTAsbW0wCisgICAgICAgIHB1bnBja2x3ZCBtbTAsbW0wCisgICAgICAgIHBzcmFkICAgICBtbTAsKERXT1JEX0JJVC1XT1JEX0JJVCkKKyAgICAgICAgcGkyZmQgICAgIG1tMCxtbTAKIAotCXBmbXVsICAgICBtbTAsIE1NV09SRCBbTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQorICAgICAgICBwZm11bCAgICAgbW0wLCBNTVdPUkQgW01NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KIAotCW1vdnEgICAgICBtbTEsbW0wCi0JcHVucGNrbGRxIG1tMCxtbTAKLQlwdW5wY2toZHEgbW0xLG1tMQorICAgICAgICBtb3ZxICAgICAgbW0xLG1tMAorICAgICAgICBwdW5wY2tsZHEgbW0wLG1tMAorICAgICAgICBwdW5wY2toZHEgbW0xLG1tMQogCi0JbW92cQlNTVdPUkQgW01NQkxPQ0soMCwwLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTAKLQltb3ZxCU1NV09SRCBbTU1CTE9DSygwLDEsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tMAotCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDAsMixlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgbW0wCi0JbW92cQlNTVdPUkQgW01NQkxPQ0soMCwzLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTAKLQltb3ZxCU1NV09SRCBbTU1CTE9DSygxLDAsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tMQotCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDEsMSxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgbW0xCi0JbW92cQlNTVdPUkQgW01NQkxPQ0soMSwyLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTEKLQltb3ZxCU1NV09SRCBbTU1CTE9DSygxLDMsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tMQotCWptcAluZWFyIC5uZXh0Y29sdW1uCi0JYWxpZ254CTE2LDcKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMCwwLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTAKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMCwxLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTAKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMCwyLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTAKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMCwzLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTAKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMSwwLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTEKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMSwxLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTEKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMSwyLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTEKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMSwzLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTEKKyAgICAgICAgam1wICAgICBuZWFyIC5uZXh0Y29sdW1uCisgICAgICAgIGFsaWdueCAgMTYsNwogJWVuZGlmCiAuY29sdW1uRENUOgogCi0JOyAtLSBFdmVuIHBhcnQKKyAgICAgICAgOyAtLSBFdmVuIHBhcnQKIAotCW1vdmQgICAgICBtbTAsIERXT1JEIFtEV0JMT0NLKDAsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQltb3ZkICAgICAgbW0xLCBEV09SRCBbRFdCTE9DSygyLDAsZXNpLFNJWkVPRl9KQ09FRildCi0JbW92ZCAgICAgIG1tMiwgRFdPUkQgW0RXQkxPQ0soNCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQotCW1vdmQgICAgICBtbTMsIERXT1JEIFtEV0JMT0NLKDYsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgbW92ZCAgICAgIG1tMCwgRFdPUkQgW0RXQkxPQ0soMCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBtb3ZkICAgICAgbW0xLCBEV09SRCBbRFdCTE9DSygyLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdmQgICAgICBtbTIsIERXT1JEIFtEV0JMT0NLKDQsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgbW92ZCAgICAgIG1tMywgRFdPUkQgW0RXQkxPQ0soNiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQogCi0JcHVucGNrbHdkIG1tMCxtbTAKLQlwdW5wY2tsd2QgbW0xLG1tMQotCXBzcmFkICAgICBtbTAsKERXT1JEX0JJVC1XT1JEX0JJVCkKLQlwc3JhZCAgICAgbW0xLChEV09SRF9CSVQtV09SRF9CSVQpCi0JcGkyZmQgICAgIG1tMCxtbTAKLQlwaTJmZCAgICAgbW0xLG1tMQorICAgICAgICBwdW5wY2tsd2QgbW0wLG1tMAorICAgICAgICBwdW5wY2tsd2QgbW0xLG1tMQorICAgICAgICBwc3JhZCAgICAgbW0wLChEV09SRF9CSVQtV09SRF9CSVQpCisgICAgICAgIHBzcmFkICAgICBtbTEsKERXT1JEX0JJVC1XT1JEX0JJVCkKKyAgICAgICAgcGkyZmQgICAgIG1tMCxtbTAKKyAgICAgICAgcGkyZmQgICAgIG1tMSxtbTEKIAotCXBmbXVsICAgICBtbTAsIE1NV09SRCBbTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQotCXBmbXVsICAgICBtbTEsIE1NV09SRCBbTU1CTE9DSygyLDAsZWR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQorICAgICAgICBwZm11bCAgICAgbW0wLCBNTVdPUkQgW01NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KKyAgICAgICAgcGZtdWwgICAgIG1tMSwgTU1XT1JEIFtNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCiAKLQlwdW5wY2tsd2QgbW0yLG1tMgotCXB1bnBja2x3ZCBtbTMsbW0zCi0JcHNyYWQgICAgIG1tMiwoRFdPUkRfQklULVdPUkRfQklUKQotCXBzcmFkICAgICBtbTMsKERXT1JEX0JJVC1XT1JEX0JJVCkKLQlwaTJmZCAgICAgbW0yLG1tMgotCXBpMmZkICAgICBtbTMsbW0zCisgICAgICAgIHB1bnBja2x3ZCBtbTIsbW0yCisgICAgICAgIHB1bnBja2x3ZCBtbTMsbW0zCisgICAgICAgIHBzcmFkICAgICBtbTIsKERXT1JEX0JJVC1XT1JEX0JJVCkKKyAgICAgICAgcHNyYWQgICAgIG1tMywoRFdPUkRfQklULVdPUkRfQklUKQorICAgICAgICBwaTJmZCAgICAgbW0yLG1tMgorICAgICAgICBwaTJmZCAgICAgbW0zLG1tMwogCi0JcGZtdWwgICAgIG1tMiwgTU1XT1JEIFtNTUJMT0NLKDQsMCxlZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCi0JcGZtdWwgICAgIG1tMywgTU1XT1JEIFtNTUJMT0NLKDYsMCxlZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCisgICAgICAgIHBmbXVsICAgICBtbTIsIE1NV09SRCBbTU1CTE9DSyg0LDAsZWR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQorICAgICAgICBwZm11bCAgICAgbW0zLCBNTVdPUkQgW01NQkxPQ0soNiwwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KIAotCW1vdnEJbW00LG1tMAotCW1vdnEJbW01LG1tMQotCXBmc3ViCW1tMCxtbTIJCQk7IG1tMD10bXAxMQotCXBmc3ViCW1tMSxtbTMKLQlwZmFkZAltbTQsbW0yCQkJOyBtbTQ9dG1wMTAKLQlwZmFkZAltbTUsbW0zCQkJOyBtbTU9dG1wMTMKKyAgICAgICAgbW92cSAgICBtbTQsbW0wCisgICAgICAgIG1vdnEgICAgbW01LG1tMQorICAgICAgICBwZnN1YiAgIG1tMCxtbTIgICAgICAgICAgICAgICAgIDsgbW0wPXRtcDExCisgICAgICAgIHBmc3ViICAgbW0xLG1tMworICAgICAgICBwZmFkZCAgIG1tNCxtbTIgICAgICAgICAgICAgICAgIDsgbW00PXRtcDEwCisgICAgICAgIHBmYWRkICAgbW01LG1tMyAgICAgICAgICAgICAgICAgOyBtbTU9dG1wMTMKIAotCXBmbXVsCW1tMSxbR09UT0ZGKGVieCxQRF8xXzQxNCldCi0JcGZzdWIJbW0xLG1tNQkJCTsgbW0xPXRtcDEyCisgICAgICAgIHBmbXVsICAgbW0xLFtHT1RPRkYoZWJ4LFBEXzFfNDE0KV0KKyAgICAgICAgcGZzdWIgICBtbTEsbW01ICAgICAgICAgICAgICAgICA7IG1tMT10bXAxMgogCi0JbW92cQltbTYsbW00Ci0JbW92cQltbTcsbW0wCi0JcGZzdWIJbW00LG1tNQkJCTsgbW00PXRtcDMKLQlwZnN1YgltbTAsbW0xCQkJOyBtbTA9dG1wMgotCXBmYWRkCW1tNixtbTUJCQk7IG1tNj10bXAwCi0JcGZhZGQJbW03LG1tMQkJCTsgbW03PXRtcDEKKyAgICAgICAgbW92cSAgICBtbTYsbW00CisgICAgICAgIG1vdnEgICAgbW03LG1tMAorICAgICAgICBwZnN1YiAgIG1tNCxtbTUgICAgICAgICAgICAgICAgIDsgbW00PXRtcDMKKyAgICAgICAgcGZzdWIgICBtbTAsbW0xICAgICAgICAgICAgICAgICA7IG1tMD10bXAyCisgICAgICAgIHBmYWRkICAgbW02LG1tNSAgICAgICAgICAgICAgICAgOyBtbTY9dG1wMAorICAgICAgICBwZmFkZCAgIG1tNyxtbTEgICAgICAgICAgICAgICAgIDsgbW03PXRtcDEKIAotCW1vdnEJTU1XT1JEIFt3aygxKV0sIG1tNAk7IHRtcDMKLQltb3ZxCU1NV09SRCBbd2soMCldLCBtbTAJOyB0bXAyCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFt3aygxKV0sIG1tNCAgICAgOyB0bXAzCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFt3aygwKV0sIG1tMCAgICAgOyB0bXAyCiAKLQk7IC0tIE9kZCBwYXJ0CisgICAgICAgIDsgLS0gT2RkIHBhcnQKIAotCW1vdmQgICAgICBtbTIsIERXT1JEIFtEV0JMT0NLKDEsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQltb3ZkICAgICAgbW0zLCBEV09SRCBbRFdCTE9DSygzLDAsZXNpLFNJWkVPRl9KQ09FRildCi0JbW92ZCAgICAgIG1tNSwgRFdPUkQgW0RXQkxPQ0soNSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQotCW1vdmQgICAgICBtbTEsIERXT1JEIFtEV0JMT0NLKDcsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgbW92ZCAgICAgIG1tMiwgRFdPUkQgW0RXQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBtb3ZkICAgICAgbW0zLCBEV09SRCBbRFdCTE9DSygzLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdmQgICAgICBtbTUsIERXT1JEIFtEV0JMT0NLKDUsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgbW92ZCAgICAgIG1tMSwgRFdPUkQgW0RXQkxPQ0soNywwLGVzaSxTSVpFT0ZfSkNPRUYpXQogCi0JcHVucGNrbHdkIG1tMixtbTIKLQlwdW5wY2tsd2QgbW0zLG1tMwotCXBzcmFkICAgICBtbTIsKERXT1JEX0JJVC1XT1JEX0JJVCkKLQlwc3JhZCAgICAgbW0zLChEV09SRF9CSVQtV09SRF9CSVQpCi0JcGkyZmQgICAgIG1tMixtbTIKLQlwaTJmZCAgICAgbW0zLG1tMworICAgICAgICBwdW5wY2tsd2QgbW0yLG1tMgorICAgICAgICBwdW5wY2tsd2QgbW0zLG1tMworICAgICAgICBwc3JhZCAgICAgbW0yLChEV09SRF9CSVQtV09SRF9CSVQpCisgICAgICAgIHBzcmFkICAgICBtbTMsKERXT1JEX0JJVC1XT1JEX0JJVCkKKyAgICAgICAgcGkyZmQgICAgIG1tMixtbTIKKyAgICAgICAgcGkyZmQgICAgIG1tMyxtbTMKIAotCXBmbXVsICAgICBtbTIsIE1NV09SRCBbTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQotCXBmbXVsICAgICBtbTMsIE1NV09SRCBbTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQorICAgICAgICBwZm11bCAgICAgbW0yLCBNTVdPUkQgW01NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KKyAgICAgICAgcGZtdWwgICAgIG1tMywgTU1XT1JEIFtNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCiAKLQlwdW5wY2tsd2QgbW01LG1tNQotCXB1bnBja2x3ZCBtbTEsbW0xCi0JcHNyYWQgICAgIG1tNSwoRFdPUkRfQklULVdPUkRfQklUKQotCXBzcmFkICAgICBtbTEsKERXT1JEX0JJVC1XT1JEX0JJVCkKLQlwaTJmZCAgICAgbW01LG1tNQotCXBpMmZkICAgICBtbTEsbW0xCisgICAgICAgIHB1bnBja2x3ZCBtbTUsbW01CisgICAgICAgIHB1bnBja2x3ZCBtbTEsbW0xCisgICAgICAgIHBzcmFkICAgICBtbTUsKERXT1JEX0JJVC1XT1JEX0JJVCkKKyAgICAgICAgcHNyYWQgICAgIG1tMSwoRFdPUkRfQklULVdPUkRfQklUKQorICAgICAgICBwaTJmZCAgICAgbW01LG1tNQorICAgICAgICBwaTJmZCAgICAgbW0xLG1tMQogCi0JcGZtdWwgICAgIG1tNSwgTU1XT1JEIFtNTUJMT0NLKDUsMCxlZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCi0JcGZtdWwgICAgIG1tMSwgTU1XT1JEIFtNTUJMT0NLKDcsMCxlZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCisgICAgICAgIHBmbXVsICAgICBtbTUsIE1NV09SRCBbTU1CTE9DSyg1LDAsZWR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQorICAgICAgICBwZm11bCAgICAgbW0xLCBNTVdPUkQgW01NQkxPQ0soNywwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KIAotCW1vdnEJbW00LG1tMgotCW1vdnEJbW0wLG1tNQotCXBmYWRkCW1tMixtbTEJCQk7IG1tMj16MTEKLQlwZmFkZAltbTUsbW0zCQkJOyBtbTU9ejEzCi0JcGZzdWIJbW00LG1tMQkJCTsgbW00PXoxMgotCXBmc3ViCW1tMCxtbTMJCQk7IG1tMD16MTAKKyAgICAgICAgbW92cSAgICBtbTQsbW0yCisgICAgICAgIG1vdnEgICAgbW0wLG1tNQorICAgICAgICBwZmFkZCAgIG1tMixtbTEgICAgICAgICAgICAgICAgIDsgbW0yPXoxMQorICAgICAgICBwZmFkZCAgIG1tNSxtbTMgICAgICAgICAgICAgICAgIDsgbW01PXoxMworICAgICAgICBwZnN1YiAgIG1tNCxtbTEgICAgICAgICAgICAgICAgIDsgbW00PXoxMgorICAgICAgICBwZnN1YiAgIG1tMCxtbTMgICAgICAgICAgICAgICAgIDsgbW0wPXoxMAogCi0JbW92cQltbTEsbW0yCi0JcGZzdWIJbW0yLG1tNQotCXBmYWRkCW1tMSxtbTUJCQk7IG1tMT10bXA3CisgICAgICAgIG1vdnEgICAgbW0xLG1tMgorICAgICAgICBwZnN1YiAgIG1tMixtbTUKKyAgICAgICAgcGZhZGQgICBtbTEsbW01ICAgICAgICAgICAgICAgICA7IG1tMT10bXA3CiAKLQlwZm11bAltbTIsW0dPVE9GRihlYngsUERfMV80MTQpXQk7IG1tMj10bXAxMQorICAgICAgICBwZm11bCAgIG1tMixbR09UT0ZGKGVieCxQRF8xXzQxNCldICAgICAgOyBtbTI9dG1wMTEKIAotCW1vdnEJbW0zLG1tMAotCXBmYWRkCW1tMCxtbTQKLQlwZm11bAltbTAsW0dPVE9GRihlYngsUERfMV84NDcpXQk7IG1tMD16NQotCXBmbXVsCW1tMyxbR09UT0ZGKGVieCxQRF8yXzYxMyldCTsgbW0zPSh6MTAgKiAyLjYxMzEyNTkzMCkKLQlwZm11bAltbTQsW0dPVE9GRihlYngsUERfMV8wODIpXQk7IG1tND0oejEyICogMS4wODIzOTIyMDApCi0JcGZzdWJyCW1tMyxtbTAJCQk7IG1tMz10bXAxMgotCXBmc3ViCW1tNCxtbTAJCQk7IG1tND10bXAxMAorICAgICAgICBtb3ZxICAgIG1tMyxtbTAKKyAgICAgICAgcGZhZGQgICBtbTAsbW00CisgICAgICAgIHBmbXVsICAgbW0wLFtHT1RPRkYoZWJ4LFBEXzFfODQ3KV0gICAgICA7IG1tMD16NQorICAgICAgICBwZm11bCAgIG1tMyxbR09UT0ZGKGVieCxQRF8yXzYxMyldICAgICAgOyBtbTM9KHoxMCAqIDIuNjEzMTI1OTMwKQorICAgICAgICBwZm11bCAgIG1tNCxbR09UT0ZGKGVieCxQRF8xXzA4MildICAgICAgOyBtbTQ9KHoxMiAqIDEuMDgyMzkyMjAwKQorICAgICAgICBwZnN1YnIgIG1tMyxtbTAgICAgICAgICAgICAgICAgIDsgbW0zPXRtcDEyCisgICAgICAgIHBmc3ViICAgbW00LG1tMCAgICAgICAgICAgICAgICAgOyBtbTQ9dG1wMTAKIAotCTsgLS0gRmluYWwgb3V0cHV0IHN0YWdlCisgICAgICAgIDsgLS0gRmluYWwgb3V0cHV0IHN0YWdlCiAKLQlwZnN1YgltbTMsbW0xCQkJOyBtbTM9dG1wNgotCW1vdnEJbW01LG1tNgotCW1vdnEJbW0wLG1tNwotCXBmYWRkCW1tNixtbTEJCQk7IG1tNj1kYXRhMD0oMDAgMDEpCi0JcGZhZGQJbW03LG1tMwkJCTsgbW03PWRhdGExPSgxMCAxMSkKLQlwZnN1YgltbTUsbW0xCQkJOyBtbTU9ZGF0YTc9KDcwIDcxKQotCXBmc3ViCW1tMCxtbTMJCQk7IG1tMD1kYXRhNj0oNjAgNjEpCi0JcGZzdWIJbW0yLG1tMwkJCTsgbW0yPXRtcDUKKyAgICAgICAgcGZzdWIgICBtbTMsbW0xICAgICAgICAgICAgICAgICA7IG1tMz10bXA2CisgICAgICAgIG1vdnEgICAgbW01LG1tNgorICAgICAgICBtb3ZxICAgIG1tMCxtbTcKKyAgICAgICAgcGZhZGQgICBtbTYsbW0xICAgICAgICAgICAgICAgICA7IG1tNj1kYXRhMD0oMDAgMDEpCisgICAgICAgIHBmYWRkICAgbW03LG1tMyAgICAgICAgICAgICAgICAgOyBtbTc9ZGF0YTE9KDEwIDExKQorICAgICAgICBwZnN1YiAgIG1tNSxtbTEgICAgICAgICAgICAgICAgIDsgbW01PWRhdGE3PSg3MCA3MSkKKyAgICAgICAgcGZzdWIgICBtbTAsbW0zICAgICAgICAgICAgICAgICA7IG1tMD1kYXRhNj0oNjAgNjEpCisgICAgICAgIHBmc3ViICAgbW0yLG1tMyAgICAgICAgICAgICAgICAgOyBtbTI9dG1wNQogCi0JbW92cSAgICAgIG1tMSxtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cwotCXB1bnBja2xkcSBtbTYsbW03CQk7IG1tNj0oMDAgMTApCi0JcHVucGNraGRxIG1tMSxtbTcJCTsgbW0xPSgwMSAxMSkKLQltb3ZxICAgICAgbW0zLG1tMAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzCi0JcHVucGNrbGRxIG1tMCxtbTUJCTsgbW0wPSg2MCA3MCkKLQlwdW5wY2toZHEgbW0zLG1tNQkJOyBtbTM9KDYxIDcxKQorICAgICAgICBtb3ZxICAgICAgbW0xLG1tNiAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cworICAgICAgICBwdW5wY2tsZHEgbW02LG1tNyAgICAgICAgICAgICAgIDsgbW02PSgwMCAxMCkKKyAgICAgICAgcHVucGNraGRxIG1tMSxtbTcgICAgICAgICAgICAgICA7IG1tMT0oMDEgMTEpCisgICAgICAgIG1vdnEgICAgICBtbTMsbW0wICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzCisgICAgICAgIHB1bnBja2xkcSBtbTAsbW01ICAgICAgICAgICAgICAgOyBtbTA9KDYwIDcwKQorICAgICAgICBwdW5wY2toZHEgbW0zLG1tNSAgICAgICAgICAgICAgIDsgbW0zPSg2MSA3MSkKIAotCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDAsMCxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgbW02Ci0JbW92cQlNTVdPUkQgW01NQkxPQ0soMSwwLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTEKLQltb3ZxCU1NV09SRCBbTU1CTE9DSygwLDMsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tMAotCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDEsMyxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgbW0zCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtNTUJMT0NLKDAsMCxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgbW02CisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtNTUJMT0NLKDEsMCxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgbW0xCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtNTUJMT0NLKDAsMyxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgbW0wCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtNTUJMT0NLKDEsMyxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgbW0zCiAKLQltb3ZxCW1tNywgTU1XT1JEIFt3aygwKV0JOyBtbTc9dG1wMgotCW1vdnEJbW01LCBNTVdPUkQgW3drKDEpXQk7IG1tNT10bXAzCisgICAgICAgIG1vdnEgICAgbW03LCBNTVdPUkQgW3drKDApXSAgICAgOyBtbTc9dG1wMgorICAgICAgICBtb3ZxICAgIG1tNSwgTU1XT1JEIFt3aygxKV0gICAgIDsgbW01PXRtcDMKIAotCXBmYWRkCW1tNCxtbTIJCQk7IG1tND10bXA0Ci0JbW92cQltbTYsbW03Ci0JbW92cQltbTEsbW01Ci0JcGZhZGQJbW03LG1tMgkJCTsgbW03PWRhdGEyPSgyMCAyMSkKLQlwZmFkZAltbTUsbW00CQkJOyBtbTU9ZGF0YTQ9KDQwIDQxKQotCXBmc3ViCW1tNixtbTIJCQk7IG1tNj1kYXRhNT0oNTAgNTEpCi0JcGZzdWIJbW0xLG1tNAkJCTsgbW0xPWRhdGEzPSgzMCAzMSkKKyAgICAgICAgcGZhZGQgICBtbTQsbW0yICAgICAgICAgICAgICAgICA7IG1tND10bXA0CisgICAgICAgIG1vdnEgICAgbW02LG1tNworICAgICAgICBtb3ZxICAgIG1tMSxtbTUKKyAgICAgICAgcGZhZGQgICBtbTcsbW0yICAgICAgICAgICAgICAgICA7IG1tNz1kYXRhMj0oMjAgMjEpCisgICAgICAgIHBmYWRkICAgbW01LG1tNCAgICAgICAgICAgICAgICAgOyBtbTU9ZGF0YTQ9KDQwIDQxKQorICAgICAgICBwZnN1YiAgIG1tNixtbTIgICAgICAgICAgICAgICAgIDsgbW02PWRhdGE1PSg1MCA1MSkKKyAgICAgICAgcGZzdWIgICBtbTEsbW00ICAgICAgICAgICAgICAgICA7IG1tMT1kYXRhMz0oMzAgMzEpCiAKLQltb3ZxICAgICAgbW0wLG1tNwkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzCi0JcHVucGNrbGRxIG1tNyxtbTEJCTsgbW03PSgyMCAzMCkKLQlwdW5wY2toZHEgbW0wLG1tMQkJOyBtbTA9KDIxIDMxKQotCW1vdnEgICAgICBtbTMsbW01CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMKLQlwdW5wY2tsZHEgbW01LG1tNgkJOyBtbTU9KDQwIDUwKQotCXB1bnBja2hkcSBtbTMsbW02CQk7IG1tMz0oNDEgNTEpCisgICAgICAgIG1vdnEgICAgICBtbTAsbW03ICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzCisgICAgICAgIHB1bnBja2xkcSBtbTcsbW0xICAgICAgICAgICAgICAgOyBtbTc9KDIwIDMwKQorICAgICAgICBwdW5wY2toZHEgbW0wLG1tMSAgICAgICAgICAgICAgIDsgbW0wPSgyMSAzMSkKKyAgICAgICAgbW92cSAgICAgIG1tMyxtbTUgICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMKKyAgICAgICAgcHVucGNrbGRxIG1tNSxtbTYgICAgICAgICAgICAgICA7IG1tNT0oNDAgNTApCisgICAgICAgIHB1bnBja2hkcSBtbTMsbW02ICAgICAgICAgICAgICAgOyBtbTM9KDQxIDUxKQogCi0JbW92cQlNTVdPUkQgW01NQkxPQ0soMCwxLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTcKLQltb3ZxCU1NV09SRCBbTU1CTE9DSygxLDEsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tMAotCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDAsMixlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgbW01Ci0JbW92cQlNTVdPUkQgW01NQkxPQ0soMSwyLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTMKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMCwxLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTcKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMSwxLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTAKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMCwyLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTUKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMSwyLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTMKIAogLm5leHRjb2x1bW46Ci0JYWRkCWVzaSwgYnl0ZSAyKlNJWkVPRl9KQ09FRgkJOyBjb2VmX2Jsb2NrCi0JYWRkCWVkeCwgYnl0ZSAyKlNJWkVPRl9GTE9BVF9NVUxUX1RZUEUJOyBxdWFudHB0cgotCWFkZAllZGksIGJ5dGUgMipEQ1RTSVpFKlNJWkVPRl9GQVNUX0ZMT0FUCTsgd3NwdHIKLQlkZWMJZWN4CQkJCQk7IGN0cgotCWpuegluZWFyIC5jb2x1bW5sb29wCisgICAgICAgIGFkZCAgICAgZXNpLCBieXRlIDIqU0laRU9GX0pDT0VGICAgICAgICAgICAgICAgIDsgY29lZl9ibG9jaworICAgICAgICBhZGQgICAgIGVkeCwgYnl0ZSAyKlNJWkVPRl9GTE9BVF9NVUxUX1RZUEUgICAgICA7IHF1YW50cHRyCisgICAgICAgIGFkZCAgICAgZWRpLCBieXRlIDIqRENUU0laRSpTSVpFT0ZfRkFTVF9GTE9BVCAgIDsgd3NwdHIKKyAgICAgICAgZGVjICAgICBlY3ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBjdHIKKyAgICAgICAgam56ICAgICBuZWFyIC5jb2x1bW5sb29wCiAKLQk7IC0tIFByZWZldGNoIHRoZSBuZXh0IGNvZWZmaWNpZW50IGJsb2NrCisgICAgICAgIDsgLS0gUHJlZmV0Y2ggdGhlIG5leHQgY29lZmZpY2llbnQgYmxvY2sKIAotCXByZWZldGNoIFtlc2kgKyAoRENUU0laRTItOCkqU0laRU9GX0pDT0VGICsgMCozMl0KLQlwcmVmZXRjaCBbZXNpICsgKERDVFNJWkUyLTgpKlNJWkVPRl9KQ09FRiArIDEqMzJdCi0JcHJlZmV0Y2ggW2VzaSArIChEQ1RTSVpFMi04KSpTSVpFT0ZfSkNPRUYgKyAyKjMyXQotCXByZWZldGNoIFtlc2kgKyAoRENUU0laRTItOCkqU0laRU9GX0pDT0VGICsgMyozMl0KKyAgICAgICAgcHJlZmV0Y2ggW2VzaSArIChEQ1RTSVpFMi04KSpTSVpFT0ZfSkNPRUYgKyAwKjMyXQorICAgICAgICBwcmVmZXRjaCBbZXNpICsgKERDVFNJWkUyLTgpKlNJWkVPRl9KQ09FRiArIDEqMzJdCisgICAgICAgIHByZWZldGNoIFtlc2kgKyAoRENUU0laRTItOCkqU0laRU9GX0pDT0VGICsgMiozMl0KKyAgICAgICAgcHJlZmV0Y2ggW2VzaSArIChEQ1RTSVpFMi04KSpTSVpFT0ZfSkNPRUYgKyAzKjMyXQogCi0JOyAtLS0tIFBhc3MgMjogcHJvY2VzcyByb3dzIGZyb20gd29yayBhcnJheSwgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuCisgICAgICAgIDsgLS0tLSBQYXNzIDI6IHByb2Nlc3Mgcm93cyBmcm9tIHdvcmsgYXJyYXksIHN0b3JlIGludG8gb3V0cHV0IGFycmF5LgogCi0JbW92CWVheCwgW29yaWdpbmFsX2VicF0KLQlsZWEJZXNpLCBbd29ya3NwYWNlXQkJCTsgRkFTVF9GTE9BVCAqIHdzcHRyCi0JbW92CWVkaSwgSlNBTVBBUlJBWSBbb3V0cHV0X2J1ZihlYXgpXQk7IChKU0FNUFJPVyAqKQotCW1vdgllYXgsIEpESU1FTlNJT04gW291dHB1dF9jb2woZWF4KV0KLQltb3YJZWN4LCBEQ1RTSVpFLzIJCQkJOyBjdHIKLQlhbGlnbngJMTYsNworICAgICAgICBtb3YgICAgIGVheCwgW29yaWdpbmFsX2VicF0KKyAgICAgICAgbGVhICAgICBlc2ksIFt3b3Jrc3BhY2VdICAgICAgICAgICAgICAgICAgICAgICAgOyBGQVNUX0ZMT0FUICogd3NwdHIKKyAgICAgICAgbW92ICAgICBlZGksIEpTQU1QQVJSQVkgW291dHB1dF9idWYoZWF4KV0gICAgICAgOyAoSlNBTVBST1cgKikKKyAgICAgICAgbW92ICAgICBlYXgsIEpESU1FTlNJT04gW291dHB1dF9jb2woZWF4KV0KKyAgICAgICAgbW92ICAgICBlY3gsIERDVFNJWkUvMiAgICAgICAgICAgICAgICAgICAgICAgICAgOyBjdHIKKyAgICAgICAgYWxpZ254ICAxNiw3CiAucm93bG9vcDoKIAotCTsgLS0gRXZlbiBwYXJ0CisgICAgICAgIDsgLS0gRXZlbiBwYXJ0CiAKLQltb3ZxCW1tMCwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQotCW1vdnEJbW0xLCBNTVdPUkQgW01NQkxPQ0soMiwwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCi0JbW92cQltbTIsIE1NV09SRCBbTU1CTE9DSyg0LDAsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KLQltb3ZxCW1tMywgTU1XT1JEIFtNTUJMT0NLKDYsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgICAgICBtb3ZxICAgIG1tMCwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgICAgICBtb3ZxICAgIG1tMSwgTU1XT1JEIFtNTUJMT0NLKDIsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgICAgICBtb3ZxICAgIG1tMiwgTU1XT1JEIFtNTUJMT0NLKDQsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgICAgICBtb3ZxICAgIG1tMywgTU1XT1JEIFtNTUJMT0NLKDYsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQogCi0JbW92cQltbTQsbW0wCi0JbW92cQltbTUsbW0xCi0JcGZzdWIJbW0wLG1tMgkJCTsgbW0wPXRtcDExCi0JcGZzdWIJbW0xLG1tMwotCXBmYWRkCW1tNCxtbTIJCQk7IG1tND10bXAxMAotCXBmYWRkCW1tNSxtbTMJCQk7IG1tNT10bXAxMworICAgICAgICBtb3ZxICAgIG1tNCxtbTAKKyAgICAgICAgbW92cSAgICBtbTUsbW0xCisgICAgICAgIHBmc3ViICAgbW0wLG1tMiAgICAgICAgICAgICAgICAgOyBtbTA9dG1wMTEKKyAgICAgICAgcGZzdWIgICBtbTEsbW0zCisgICAgICAgIHBmYWRkICAgbW00LG1tMiAgICAgICAgICAgICAgICAgOyBtbTQ9dG1wMTAKKyAgICAgICAgcGZhZGQgICBtbTUsbW0zICAgICAgICAgICAgICAgICA7IG1tNT10bXAxMwogCi0JcGZtdWwJbW0xLFtHT1RPRkYoZWJ4LFBEXzFfNDE0KV0KLQlwZnN1YgltbTEsbW01CQkJOyBtbTE9dG1wMTIKKyAgICAgICAgcGZtdWwgICBtbTEsW0dPVE9GRihlYngsUERfMV80MTQpXQorICAgICAgICBwZnN1YiAgIG1tMSxtbTUgICAgICAgICAgICAgICAgIDsgbW0xPXRtcDEyCiAKLQltb3ZxCW1tNixtbTQKLQltb3ZxCW1tNyxtbTAKLQlwZnN1YgltbTQsbW01CQkJOyBtbTQ9dG1wMwotCXBmc3ViCW1tMCxtbTEJCQk7IG1tMD10bXAyCi0JcGZhZGQJbW02LG1tNQkJCTsgbW02PXRtcDAKLQlwZmFkZAltbTcsbW0xCQkJOyBtbTc9dG1wMQorICAgICAgICBtb3ZxICAgIG1tNixtbTQKKyAgICAgICAgbW92cSAgICBtbTcsbW0wCisgICAgICAgIHBmc3ViICAgbW00LG1tNSAgICAgICAgICAgICAgICAgOyBtbTQ9dG1wMworICAgICAgICBwZnN1YiAgIG1tMCxtbTEgICAgICAgICAgICAgICAgIDsgbW0wPXRtcDIKKyAgICAgICAgcGZhZGQgICBtbTYsbW01ICAgICAgICAgICAgICAgICA7IG1tNj10bXAwCisgICAgICAgIHBmYWRkICAgbW03LG1tMSAgICAgICAgICAgICAgICAgOyBtbTc9dG1wMQogCi0JbW92cQlNTVdPUkQgW3drKDEpXSwgbW00CTsgdG1wMwotCW1vdnEJTU1XT1JEIFt3aygwKV0sIG1tMAk7IHRtcDIKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW3drKDEpXSwgbW00ICAgICA7IHRtcDMKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW3drKDApXSwgbW0wICAgICA7IHRtcDIKIAotCTsgLS0gT2RkIHBhcnQKKyAgICAgICAgOyAtLSBPZGQgcGFydAogCi0JbW92cQltbTIsIE1NV09SRCBbTU1CTE9DSygxLDAsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KLQltb3ZxCW1tMywgTU1XT1JEIFtNTUJMT0NLKDMsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQotCW1vdnEJbW01LCBNTVdPUkQgW01NQkxPQ0soNSwwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCi0JbW92cQltbTEsIE1NV09SRCBbTU1CTE9DSyg3LDAsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICAgICAgbW92cSAgICBtbTIsIE1NV09SRCBbTU1CTE9DSygxLDAsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICAgICAgbW92cSAgICBtbTMsIE1NV09SRCBbTU1CTE9DSygzLDAsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICAgICAgbW92cSAgICBtbTUsIE1NV09SRCBbTU1CTE9DSyg1LDAsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICAgICAgbW92cSAgICBtbTEsIE1NV09SRCBbTU1CTE9DSyg3LDAsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KIAotCW1vdnEJbW00LG1tMgotCW1vdnEJbW0wLG1tNQotCXBmYWRkCW1tMixtbTEJCQk7IG1tMj16MTEKLQlwZmFkZAltbTUsbW0zCQkJOyBtbTU9ejEzCi0JcGZzdWIJbW00LG1tMQkJCTsgbW00PXoxMgotCXBmc3ViCW1tMCxtbTMJCQk7IG1tMD16MTAKKyAgICAgICAgbW92cSAgICBtbTQsbW0yCisgICAgICAgIG1vdnEgICAgbW0wLG1tNQorICAgICAgICBwZmFkZCAgIG1tMixtbTEgICAgICAgICAgICAgICAgIDsgbW0yPXoxMQorICAgICAgICBwZmFkZCAgIG1tNSxtbTMgICAgICAgICAgICAgICAgIDsgbW01PXoxMworICAgICAgICBwZnN1YiAgIG1tNCxtbTEgICAgICAgICAgICAgICAgIDsgbW00PXoxMgorICAgICAgICBwZnN1YiAgIG1tMCxtbTMgICAgICAgICAgICAgICAgIDsgbW0wPXoxMAogCi0JbW92cQltbTEsbW0yCi0JcGZzdWIJbW0yLG1tNQotCXBmYWRkCW1tMSxtbTUJCQk7IG1tMT10bXA3CisgICAgICAgIG1vdnEgICAgbW0xLG1tMgorICAgICAgICBwZnN1YiAgIG1tMixtbTUKKyAgICAgICAgcGZhZGQgICBtbTEsbW01ICAgICAgICAgICAgICAgICA7IG1tMT10bXA3CiAKLQlwZm11bAltbTIsW0dPVE9GRihlYngsUERfMV80MTQpXQk7IG1tMj10bXAxMQorICAgICAgICBwZm11bCAgIG1tMixbR09UT0ZGKGVieCxQRF8xXzQxNCldICAgICAgOyBtbTI9dG1wMTEKIAotCW1vdnEJbW0zLG1tMAotCXBmYWRkCW1tMCxtbTQKLQlwZm11bAltbTAsW0dPVE9GRihlYngsUERfMV84NDcpXQk7IG1tMD16NQotCXBmbXVsCW1tMyxbR09UT0ZGKGVieCxQRF8yXzYxMyldCTsgbW0zPSh6MTAgKiAyLjYxMzEyNTkzMCkKLQlwZm11bAltbTQsW0dPVE9GRihlYngsUERfMV8wODIpXQk7IG1tND0oejEyICogMS4wODIzOTIyMDApCi0JcGZzdWJyCW1tMyxtbTAJCQk7IG1tMz10bXAxMgotCXBmc3ViCW1tNCxtbTAJCQk7IG1tND10bXAxMAorICAgICAgICBtb3ZxICAgIG1tMyxtbTAKKyAgICAgICAgcGZhZGQgICBtbTAsbW00CisgICAgICAgIHBmbXVsICAgbW0wLFtHT1RPRkYoZWJ4LFBEXzFfODQ3KV0gICAgICA7IG1tMD16NQorICAgICAgICBwZm11bCAgIG1tMyxbR09UT0ZGKGVieCxQRF8yXzYxMyldICAgICAgOyBtbTM9KHoxMCAqIDIuNjEzMTI1OTMwKQorICAgICAgICBwZm11bCAgIG1tNCxbR09UT0ZGKGVieCxQRF8xXzA4MildICAgICAgOyBtbTQ9KHoxMiAqIDEuMDgyMzkyMjAwKQorICAgICAgICBwZnN1YnIgIG1tMyxtbTAgICAgICAgICAgICAgICAgIDsgbW0zPXRtcDEyCisgICAgICAgIHBmc3ViICAgbW00LG1tMCAgICAgICAgICAgICAgICAgOyBtbTQ9dG1wMTAKIAotCTsgLS0gRmluYWwgb3V0cHV0IHN0YWdlCisgICAgICAgIDsgLS0gRmluYWwgb3V0cHV0IHN0YWdlCiAKLQlwZnN1YgltbTMsbW0xCQkJOyBtbTM9dG1wNgotCW1vdnEJbW01LG1tNgotCW1vdnEJbW0wLG1tNwotCXBmYWRkCW1tNixtbTEJCQk7IG1tNj1kYXRhMD0oMDAgMTApCi0JcGZhZGQJbW03LG1tMwkJCTsgbW03PWRhdGExPSgwMSAxMSkKLQlwZnN1YgltbTUsbW0xCQkJOyBtbTU9ZGF0YTc9KDA3IDE3KQotCXBmc3ViCW1tMCxtbTMJCQk7IG1tMD1kYXRhNj0oMDYgMTYpCi0JcGZzdWIJbW0yLG1tMwkJCTsgbW0yPXRtcDUKKyAgICAgICAgcGZzdWIgICBtbTMsbW0xICAgICAgICAgICAgICAgICA7IG1tMz10bXA2CisgICAgICAgIG1vdnEgICAgbW01LG1tNgorICAgICAgICBtb3ZxICAgIG1tMCxtbTcKKyAgICAgICAgcGZhZGQgICBtbTYsbW0xICAgICAgICAgICAgICAgICA7IG1tNj1kYXRhMD0oMDAgMTApCisgICAgICAgIHBmYWRkICAgbW03LG1tMyAgICAgICAgICAgICAgICAgOyBtbTc9ZGF0YTE9KDAxIDExKQorICAgICAgICBwZnN1YiAgIG1tNSxtbTEgICAgICAgICAgICAgICAgIDsgbW01PWRhdGE3PSgwNyAxNykKKyAgICAgICAgcGZzdWIgICBtbTAsbW0zICAgICAgICAgICAgICAgICA7IG1tMD1kYXRhNj0oMDYgMTYpCisgICAgICAgIHBmc3ViICAgbW0yLG1tMyAgICAgICAgICAgICAgICAgOyBtbTI9dG1wNQogCi0JbW92cQltbTEsW0dPVE9GRihlYngsUERfUk5ESU5UX01BR0lDKV0JOyBtbTE9W1BEX1JORElOVF9NQUdJQ10KLQlwY21wZXFkCW1tMyxtbTMKLQlwc3JsZAltbTMsV09SRF9CSVQJCTsgbW0zPXsweEZGRkYgMHgwMDAwIDB4RkZGRiAweDAwMDB9CisgICAgICAgIG1vdnEgICAgbW0xLFtHT1RPRkYoZWJ4LFBEX1JORElOVF9NQUdJQyldICAgICAgIDsgbW0xPVtQRF9STkRJTlRfTUFHSUNdCisgICAgICAgIHBjbXBlcWQgbW0zLG1tMworICAgICAgICBwc3JsZCAgIG1tMyxXT1JEX0JJVCAgICAgICAgICAgIDsgbW0zPXsweEZGRkYgMHgwMDAwIDB4RkZGRiAweDAwMDB9CiAKLQlwZmFkZAltbTYsbW0xCQkJOyBtbTY9cm91bmRpbnQoZGF0YTAvOCk9KDAwICoqIDEwICoqKQotCXBmYWRkCW1tNyxtbTEJCQk7IG1tNz1yb3VuZGludChkYXRhMS84KT0oMDEgKiogMTEgKiopCi0JcGZhZGQJbW0wLG1tMQkJCTsgbW0wPXJvdW5kaW50KGRhdGE2LzgpPSgwNiAqKiAxNiAqKikKLQlwZmFkZAltbTUsbW0xCQkJOyBtbTU9cm91bmRpbnQoZGF0YTcvOCk9KDA3ICoqIDE3ICoqKQorICAgICAgICBwZmFkZCAgIG1tNixtbTEgICAgICAgICAgICAgICAgIDsgbW02PXJvdW5kaW50KGRhdGEwLzgpPSgwMCAqKiAxMCAqKikKKyAgICAgICAgcGZhZGQgICBtbTcsbW0xICAgICAgICAgICAgICAgICA7IG1tNz1yb3VuZGludChkYXRhMS84KT0oMDEgKiogMTEgKiopCisgICAgICAgIHBmYWRkICAgbW0wLG1tMSAgICAgICAgICAgICAgICAgOyBtbTA9cm91bmRpbnQoZGF0YTYvOCk9KDA2ICoqIDE2ICoqKQorICAgICAgICBwZmFkZCAgIG1tNSxtbTEgICAgICAgICAgICAgICAgIDsgbW01PXJvdW5kaW50KGRhdGE3LzgpPSgwNyAqKiAxNyAqKikKIAotCXBhbmQJbW02LG1tMwkJCTsgbW02PSgwMCAtLSAxMCAtLSkKLQlwc2xsZAltbTcsV09SRF9CSVQJCTsgbW03PSgtLSAwMSAtLSAxMSkKLQlwYW5kCW1tMCxtbTMJCQk7IG1tMD0oMDYgLS0gMTYgLS0pCi0JcHNsbGQJbW01LFdPUkRfQklUCQk7IG1tNT0oLS0gMDcgLS0gMTcpCi0JcG9yCW1tNixtbTcJCQk7IG1tNj0oMDAgMDEgMTAgMTEpCi0JcG9yCW1tMCxtbTUJCQk7IG1tMD0oMDYgMDcgMTYgMTcpCisgICAgICAgIHBhbmQgICAgbW02LG1tMyAgICAgICAgICAgICAgICAgOyBtbTY9KDAwIC0tIDEwIC0tKQorICAgICAgICBwc2xsZCAgIG1tNyxXT1JEX0JJVCAgICAgICAgICAgIDsgbW03PSgtLSAwMSAtLSAxMSkKKyAgICAgICAgcGFuZCAgICBtbTAsbW0zICAgICAgICAgICAgICAgICA7IG1tMD0oMDYgLS0gMTYgLS0pCisgICAgICAgIHBzbGxkICAgbW01LFdPUkRfQklUICAgICAgICAgICAgOyBtbTU9KC0tIDA3IC0tIDE3KQorICAgICAgICBwb3IgICAgIG1tNixtbTcgICAgICAgICAgICAgICAgIDsgbW02PSgwMCAwMSAxMCAxMSkKKyAgICAgICAgcG9yICAgICBtbTAsbW01ICAgICAgICAgICAgICAgICA7IG1tMD0oMDYgMDcgMTYgMTcpCiAKLQltb3ZxCW1tMSwgTU1XT1JEIFt3aygwKV0JOyBtbTE9dG1wMgotCW1vdnEJbW0zLCBNTVdPUkQgW3drKDEpXQk7IG1tMz10bXAzCisgICAgICAgIG1vdnEgICAgbW0xLCBNTVdPUkQgW3drKDApXSAgICAgOyBtbTE9dG1wMgorICAgICAgICBtb3ZxICAgIG1tMywgTU1XT1JEIFt3aygxKV0gICAgIDsgbW0zPXRtcDMKIAotCXBmYWRkCW1tNCxtbTIJCQk7IG1tND10bXA0Ci0JbW92cQltbTcsbW0xCi0JbW92cQltbTUsbW0zCi0JcGZhZGQJbW0xLG1tMgkJCTsgbW0xPWRhdGEyPSgwMiAxMikKLQlwZmFkZAltbTMsbW00CQkJOyBtbTM9ZGF0YTQ9KDA0IDE0KQotCXBmc3ViCW1tNyxtbTIJCQk7IG1tNz1kYXRhNT0oMDUgMTUpCi0JcGZzdWIJbW01LG1tNAkJCTsgbW01PWRhdGEzPSgwMyAxMykKKyAgICAgICAgcGZhZGQgICBtbTQsbW0yICAgICAgICAgICAgICAgICA7IG1tND10bXA0CisgICAgICAgIG1vdnEgICAgbW03LG1tMQorICAgICAgICBtb3ZxICAgIG1tNSxtbTMKKyAgICAgICAgcGZhZGQgICBtbTEsbW0yICAgICAgICAgICAgICAgICA7IG1tMT1kYXRhMj0oMDIgMTIpCisgICAgICAgIHBmYWRkICAgbW0zLG1tNCAgICAgICAgICAgICAgICAgOyBtbTM9ZGF0YTQ9KDA0IDE0KQorICAgICAgICBwZnN1YiAgIG1tNyxtbTIgICAgICAgICAgICAgICAgIDsgbW03PWRhdGE1PSgwNSAxNSkKKyAgICAgICAgcGZzdWIgICBtbTUsbW00ICAgICAgICAgICAgICAgICA7IG1tNT1kYXRhMz0oMDMgMTMpCiAKLQltb3ZxCW1tMixbR09UT0ZGKGVieCxQRF9STkRJTlRfTUFHSUMpXQk7IG1tMj1bUERfUk5ESU5UX01BR0lDXQotCXBjbXBlcWQJbW00LG1tNAotCXBzcmxkCW1tNCxXT1JEX0JJVAkJOyBtbTQ9ezB4RkZGRiAweDAwMDAgMHhGRkZGIDB4MDAwMH0KKyAgICAgICAgbW92cSAgICBtbTIsW0dPVE9GRihlYngsUERfUk5ESU5UX01BR0lDKV0gICAgICAgOyBtbTI9W1BEX1JORElOVF9NQUdJQ10KKyAgICAgICAgcGNtcGVxZCBtbTQsbW00CisgICAgICAgIHBzcmxkICAgbW00LFdPUkRfQklUICAgICAgICAgICAgOyBtbTQ9ezB4RkZGRiAweDAwMDAgMHhGRkZGIDB4MDAwMH0KIAotCXBmYWRkCW1tMyxtbTIJCQk7IG1tMz1yb3VuZGludChkYXRhNC84KT0oMDQgKiogMTQgKiopCi0JcGZhZGQJbW03LG1tMgkJCTsgbW03PXJvdW5kaW50KGRhdGE1LzgpPSgwNSAqKiAxNSAqKikKLQlwZmFkZAltbTEsbW0yCQkJOyBtbTE9cm91bmRpbnQoZGF0YTIvOCk9KDAyICoqIDEyICoqKQotCXBmYWRkCW1tNSxtbTIJCQk7IG1tNT1yb3VuZGludChkYXRhMy84KT0oMDMgKiogMTMgKiopCisgICAgICAgIHBmYWRkICAgbW0zLG1tMiAgICAgICAgICAgICAgICAgOyBtbTM9cm91bmRpbnQoZGF0YTQvOCk9KDA0ICoqIDE0ICoqKQorICAgICAgICBwZmFkZCAgIG1tNyxtbTIgICAgICAgICAgICAgICAgIDsgbW03PXJvdW5kaW50KGRhdGE1LzgpPSgwNSAqKiAxNSAqKikKKyAgICAgICAgcGZhZGQgICBtbTEsbW0yICAgICAgICAgICAgICAgICA7IG1tMT1yb3VuZGludChkYXRhMi84KT0oMDIgKiogMTIgKiopCisgICAgICAgIHBmYWRkICAgbW01LG1tMiAgICAgICAgICAgICAgICAgOyBtbTU9cm91bmRpbnQoZGF0YTMvOCk9KDAzICoqIDEzICoqKQogCi0JcGFuZAltbTMsbW00CQkJOyBtbTM9KDA0IC0tIDE0IC0tKQotCXBzbGxkCW1tNyxXT1JEX0JJVAkJOyBtbTc9KC0tIDA1IC0tIDE1KQotCXBhbmQJbW0xLG1tNAkJCTsgbW0xPSgwMiAtLSAxMiAtLSkKLQlwc2xsZAltbTUsV09SRF9CSVQJCTsgbW01PSgtLSAwMyAtLSAxMykKLQlwb3IJbW0zLG1tNwkJCTsgbW0zPSgwNCAwNSAxNCAxNSkKLQlwb3IJbW0xLG1tNQkJCTsgbW0xPSgwMiAwMyAxMiAxMykKKyAgICAgICAgcGFuZCAgICBtbTMsbW00ICAgICAgICAgICAgICAgICA7IG1tMz0oMDQgLS0gMTQgLS0pCisgICAgICAgIHBzbGxkICAgbW03LFdPUkRfQklUICAgICAgICAgICAgOyBtbTc9KC0tIDA1IC0tIDE1KQorICAgICAgICBwYW5kICAgIG1tMSxtbTQgICAgICAgICAgICAgICAgIDsgbW0xPSgwMiAtLSAxMiAtLSkKKyAgICAgICAgcHNsbGQgICBtbTUsV09SRF9CSVQgICAgICAgICAgICA7IG1tNT0oLS0gMDMgLS0gMTMpCisgICAgICAgIHBvciAgICAgbW0zLG1tNyAgICAgICAgICAgICAgICAgOyBtbTM9KDA0IDA1IDE0IDE1KQorICAgICAgICBwb3IgICAgIG1tMSxtbTUgICAgICAgICAgICAgICAgIDsgbW0xPSgwMiAwMyAxMiAxMykKIAotCW1vdnEgICAgICBtbTIsW0dPVE9GRihlYngsUEJfQ0VOVEVSSlNBTVApXQk7IG1tMj1bUEJfQ0VOVEVSSlNBTVBdCisgICAgICAgIG1vdnEgICAgICBtbTIsW0dPVE9GRihlYngsUEJfQ0VOVEVSSlNBTVApXSAgICAgIDsgbW0yPVtQQl9DRU5URVJKU0FNUF0KIAotCXBhY2tzc3diICBtbTYsbW0zCQk7IG1tNj0oMDAgMDEgMTAgMTEgMDQgMDUgMTQgMTUpCi0JcGFja3Nzd2IgIG1tMSxtbTAJCTsgbW0xPSgwMiAwMyAxMiAxMyAwNiAwNyAxNiAxNykKLQlwYWRkYiAgICAgbW02LG1tMgotCXBhZGRiICAgICBtbTEsbW0yCisgICAgICAgIHBhY2tzc3diICBtbTYsbW0zICAgICAgICAgICAgICAgOyBtbTY9KDAwIDAxIDEwIDExIDA0IDA1IDE0IDE1KQorICAgICAgICBwYWNrc3N3YiAgbW0xLG1tMCAgICAgICAgICAgICAgIDsgbW0xPSgwMiAwMyAxMiAxMyAwNiAwNyAxNiAxNykKKyAgICAgICAgcGFkZGIgICAgIG1tNixtbTIKKyAgICAgICAgcGFkZGIgICAgIG1tMSxtbTIKIAotCW1vdnEgICAgICBtbTQsbW02CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKLQlwdW5wY2tsd2QgbW02LG1tMQkJOyBtbTY9KDAwIDAxIDAyIDAzIDEwIDExIDEyIDEzKQotCXB1bnBja2h3ZCBtbTQsbW0xCQk7IG1tND0oMDQgMDUgMDYgMDcgMTQgMTUgMTYgMTcpCisgICAgICAgIG1vdnEgICAgICBtbTQsbW02ICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgICAgIHB1bnBja2x3ZCBtbTYsbW0xICAgICAgICAgICAgICAgOyBtbTY9KDAwIDAxIDAyIDAzIDEwIDExIDEyIDEzKQorICAgICAgICBwdW5wY2tod2QgbW00LG1tMSAgICAgICAgICAgICAgIDsgbW00PSgwNCAwNSAwNiAwNyAxNCAxNSAxNiAxNykKIAotCW1vdnEgICAgICBtbTcsbW02CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKLQlwdW5wY2tsZHEgbW02LG1tNAkJOyBtbTY9KDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3KQotCXB1bnBja2hkcSBtbTcsbW00CQk7IG1tNz0oMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcpCisgICAgICAgIG1vdnEgICAgICBtbTcsbW02ICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisgICAgICAgIHB1bnBja2xkcSBtbTYsbW00ICAgICAgICAgICAgICAgOyBtbTY9KDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3KQorICAgICAgICBwdW5wY2toZHEgbW03LG1tNCAgICAgICAgICAgICAgIDsgbW03PSgxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNykKIAotCXB1c2hwaWMJZWJ4CQkJOyBzYXZlIEdPVCBhZGRyZXNzCisgICAgICAgIHB1c2hwaWMgZWJ4ICAgICAgICAgICAgICAgICAgICAgOyBzYXZlIEdPVCBhZGRyZXNzCiAKLQltb3YJZWR4LCBKU0FNUFJPVyBbZWRpKzAqU0laRU9GX0pTQU1QUk9XXQotCW1vdgllYngsIEpTQU1QUk9XIFtlZGkrMSpTSVpFT0ZfSlNBTVBST1ddCi0JbW92cQlNTVdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdLCBtbTYKLQltb3ZxCU1NV09SRCBbZWJ4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIG1tNworICAgICAgICBtb3YgICAgIGVkeCwgSlNBTVBST1cgW2VkaSswKlNJWkVPRl9KU0FNUFJPV10KKyAgICAgICAgbW92ICAgICBlYngsIEpTQU1QUk9XIFtlZGkrMSpTSVpFT0ZfSlNBTVBST1ddCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXSwgbW02CisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtlYngrZWF4KlNJWkVPRl9KU0FNUExFXSwgbW03CiAKLQlwb3BwaWMJZWJ4CQkJOyByZXN0b3JlIEdPVCBhZGRyZXNzCisgICAgICAgIHBvcHBpYyAgZWJ4ICAgICAgICAgICAgICAgICAgICAgOyByZXN0b3JlIEdPVCBhZGRyZXNzCiAKLQlhZGQJZXNpLCBieXRlIDIqU0laRU9GX0ZBU1RfRkxPQVQJOyB3c3B0cgotCWFkZAllZGksIGJ5dGUgMipTSVpFT0ZfSlNBTVBST1cKLQlkZWMJZWN4CQkJCTsgY3RyCi0Jam56CW5lYXIgLnJvd2xvb3AKKyAgICAgICAgYWRkICAgICBlc2ksIGJ5dGUgMipTSVpFT0ZfRkFTVF9GTE9BVCAgIDsgd3NwdHIKKyAgICAgICAgYWRkICAgICBlZGksIGJ5dGUgMipTSVpFT0ZfSlNBTVBST1cKKyAgICAgICAgZGVjICAgICBlY3ggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgY3RyCisgICAgICAgIGpueiAgICAgbmVhciAucm93bG9vcAogCi0JZmVtbXMJCTsgZW1wdHkgTU1YLzNETm93ISBzdGF0ZQorICAgICAgICBmZW1tcyAgICAgICAgICAgOyBlbXB0eSBNTVgvM0ROb3chIHN0YXRlCiAKLQlwb3AJZWRpCi0JcG9wCWVzaQotOwlwb3AJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotOwlwb3AJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotCXBvcAllYngKLQltb3YJZXNwLGVicAkJOyBlc3AgPC0gYWxpZ25lZCBlYnAKLQlwb3AJZXNwCQk7IGVzcCA8LSBvcmlnaW5hbCBlYnAKLQlwb3AJZWJwCi0JcmV0CisgICAgICAgIHBvcCAgICAgZWRpCisgICAgICAgIHBvcCAgICAgZXNpCis7ICAgICAgIHBvcCAgICAgZWR4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgICAgIHBvcCAgICAgZWN4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgICAgIHBvcCAgICAgZWJ4CisgICAgICAgIG1vdiAgICAgZXNwLGVicCAgICAgICAgIDsgZXNwIDwtIGFsaWduZWQgZWJwCisgICAgICAgIHBvcCAgICAgZXNwICAgICAgICAgICAgIDsgZXNwIDwtIG9yaWdpbmFsIGVicAorICAgICAgICBwb3AgICAgIGVicAorICAgICAgICByZXQKIAogOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKIDsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KLQlhbGlnbgkxNgorICAgICAgICBhbGlnbiAgIDE2CmRpZmYgLS1naXQgYS9zaW1kL2ppbW14ZnN0LmFzbSBiL3NpbWQvamltbXhmc3QuYXNtCmluZGV4IDNiMDU1NzIuLmE5ZWFhMDIgMTAwNjQ0Ci0tLSBhL3NpbWQvamltbXhmc3QuYXNtCisrKyBiL3NpbWQvamltbXhmc3QuYXNtCkBAIC0yNiwzMSArMjYsMzEgQEAKIAogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0lZGVmaW5lIENPTlNUX0JJVFMJOAk7IDE0IGlzIGFsc28gT0suCi0lZGVmaW5lIFBBU1MxX0JJVFMJMgorJWRlZmluZSBDT05TVF9CSVRTICAgICAgOCAgICAgICA7IDE0IGlzIGFsc28gT0suCislZGVmaW5lIFBBU1MxX0JJVFMgICAgICAyCiAKICVpZiBJRkFTVF9TQ0FMRV9CSVRTICE9IFBBU1MxX0JJVFMKICVlcnJvciAiJ0lGQVNUX1NDQUxFX0JJVFMnIG11c3QgYmUgZXF1YWwgdG8gJ1BBU1MxX0JJVFMnLiIKICVlbmRpZgogCiAlaWYgQ09OU1RfQklUUyA9PSA4Ci1GXzFfMDgyCWVxdQkyNzcJCTsgRklYKDEuMDgyMzkyMjAwKQotRl8xXzQxNAllcXUJMzYyCQk7IEZJWCgxLjQxNDIxMzU2MikKLUZfMV84NDcJZXF1CTQ3MwkJOyBGSVgoMS44NDc3NTkwNjUpCi1GXzJfNjEzCWVxdQk2NjkJCTsgRklYKDIuNjEzMTI1OTMwKQotRl8xXzYxMwllcXUJKEZfMl82MTMgLSAyNTYpCTsgRklYKDIuNjEzMTI1OTMwKSAtIEZJWCgxKQorRl8xXzA4MiBlcXUgICAgIDI3NyAgICAgICAgICAgICA7IEZJWCgxLjA4MjM5MjIwMCkKK0ZfMV80MTQgZXF1ICAgICAzNjIgICAgICAgICAgICAgOyBGSVgoMS40MTQyMTM1NjIpCitGXzFfODQ3IGVxdSAgICAgNDczICAgICAgICAgICAgIDsgRklYKDEuODQ3NzU5MDY1KQorRl8yXzYxMyBlcXUgICAgIDY2OSAgICAgICAgICAgICA7IEZJWCgyLjYxMzEyNTkzMCkKK0ZfMV82MTMgZXF1ICAgICAoRl8yXzYxMyAtIDI1NikgOyBGSVgoMi42MTMxMjU5MzApIC0gRklYKDEpCiAlZWxzZQogOyBOQVNNIGNhbm5vdCBkbyBjb21waWxlLXRpbWUgYXJpdGhtZXRpYyBvbiBmbG9hdGluZy1wb2ludCBjb25zdGFudHMuCi0lZGVmaW5lCURFU0NBTEUoeCxuKSAgKCgoeCkrKDE8PCgobiktMSkpKT4+KG4pKQotRl8xXzA4MgllcXUJREVTQ0FMRSgxMTYyMjA5Nzc1LDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuMDgyMzkyMjAwKQotRl8xXzQxNAllcXUJREVTQ0FMRSgxNTE4NTAwMjQ5LDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuNDE0MjEzNTYyKQotRl8xXzg0NwllcXUJREVTQ0FMRSgxOTg0MDE2MTg4LDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuODQ3NzU5MDY1KQotRl8yXzYxMwllcXUJREVTQ0FMRSgyODA1ODIyNjAyLDMwLUNPTlNUX0JJVFMpCTsgRklYKDIuNjEzMTI1OTMwKQotRl8xXzYxMwllcXUJKEZfMl82MTMgLSAoMSA8PCBDT05TVF9CSVRTKSkJOyBGSVgoMi42MTMxMjU5MzApIC0gRklYKDEpCislZGVmaW5lIERFU0NBTEUoeCxuKSAgKCgoeCkrKDE8PCgobiktMSkpKT4+KG4pKQorRl8xXzA4MiBlcXUgICAgIERFU0NBTEUoMTE2MjIwOTc3NSwzMC1DT05TVF9CSVRTKSAgICAgICA7IEZJWCgxLjA4MjM5MjIwMCkKK0ZfMV80MTQgZXF1ICAgICBERVNDQUxFKDE1MTg1MDAyNDksMzAtQ09OU1RfQklUUykgICAgICAgOyBGSVgoMS40MTQyMTM1NjIpCitGXzFfODQ3IGVxdSAgICAgREVTQ0FMRSgxOTg0MDE2MTg4LDMwLUNPTlNUX0JJVFMpICAgICAgIDsgRklYKDEuODQ3NzU5MDY1KQorRl8yXzYxMyBlcXUgICAgIERFU0NBTEUoMjgwNTgyMjYwMiwzMC1DT05TVF9CSVRTKSAgICAgICA7IEZJWCgyLjYxMzEyNTkzMCkKK0ZfMV82MTMgZXF1ICAgICAoRl8yXzYxMyAtICgxIDw8IENPTlNUX0JJVFMpKSAgIDsgRklYKDIuNjEzMTI1OTMwKSAtIEZJWCgxKQogJWVuZGlmCiAKIDsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlTRUNUSU9OCVNFR19DT05TVAorICAgICAgICBTRUNUSU9OIFNFR19DT05TVAogCiA7IFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTIDw9IDIgKHRvIGF2b2lkIG92ZXJmbG93KQogOyBDT05TVF9CSVRTICsgQ09OU1RfU0hJRlQgKyBQUkVfTVVMVElQTFlfU0NBTEVfQklUUyA9PSAxNiAoZm9yIHBtdWxodykKQEAgLTU4LDIyICs1OCwyMiBAQAogJWRlZmluZSBQUkVfTVVMVElQTFlfU0NBTEVfQklUUyAgIDIKICVkZWZpbmUgQ09OU1RfU0hJRlQgICAgICgxNiAtIFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTIC0gQ09OU1RfQklUUykKIAotCWFsaWduegkxNgotCWdsb2JhbAlFWFROKGpjb25zdF9pZGN0X2lmYXN0X21teCkKKyAgICAgICAgYWxpZ256ICAxNgorICAgICAgICBnbG9iYWwgIEVYVE4oamNvbnN0X2lkY3RfaWZhc3RfbW14KQogCiBFWFROKGpjb25zdF9pZGN0X2lmYXN0X21teCk6CiAKLVBXX0YxNDE0CXRpbWVzIDQgZHcgIEZfMV80MTQgPDwgQ09OU1RfU0hJRlQKLVBXX0YxODQ3CXRpbWVzIDQgZHcgIEZfMV84NDcgPDwgQ09OU1RfU0hJRlQKLVBXX01GMTYxMwl0aW1lcyA0IGR3IC1GXzFfNjEzIDw8IENPTlNUX1NISUZUCi1QV19GMTA4Mgl0aW1lcyA0IGR3ICBGXzFfMDgyIDw8IENPTlNUX1NISUZUCi1QQl9DRU5URVJKU0FNUAl0aW1lcyA4IGRiICBDRU5URVJKU0FNUExFCitQV19GMTQxNCAgICAgICAgdGltZXMgNCBkdyAgRl8xXzQxNCA8PCBDT05TVF9TSElGVAorUFdfRjE4NDcgICAgICAgIHRpbWVzIDQgZHcgIEZfMV84NDcgPDwgQ09OU1RfU0hJRlQKK1BXX01GMTYxMyAgICAgICB0aW1lcyA0IGR3IC1GXzFfNjEzIDw8IENPTlNUX1NISUZUCitQV19GMTA4MiAgICAgICAgdGltZXMgNCBkdyAgRl8xXzA4MiA8PCBDT05TVF9TSElGVAorUEJfQ0VOVEVSSlNBTVAgIHRpbWVzIDggZGIgIENFTlRFUkpTQU1QTEUKIAotCWFsaWduegkxNgorICAgICAgICBhbGlnbnogIDE2CiAKIDsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlTRUNUSU9OCVNFR19URVhUCi0JQklUUwkzMgorICAgICAgICBTRUNUSU9OIFNFR19URVhUCisgICAgICAgIEJJVFMgICAgMzIKIDsKIDsgUGVyZm9ybSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Qgb24gb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cy4KIDsKQEAgLTgyLDQxOSArODIsNDE5IEBACiA7ICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKIDsKIAotJWRlZmluZSBkY3RfdGFibGUoYikJKGIpKzgJCQk7IGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyCi0lZGVmaW5lIGNvZWZfYmxvY2soYikJKGIpKzEyCQk7IEpDT0VGUFRSIGNvZWZfYmxvY2sKLSVkZWZpbmUgb3V0cHV0X2J1ZihiKQkoYikrMTYJCTsgSlNBTVBBUlJBWSBvdXRwdXRfYnVmCi0lZGVmaW5lIG91dHB1dF9jb2woYikJKGIpKzIwCQk7IEpESU1FTlNJT04gb3V0cHV0X2NvbAorJWRlZmluZSBkY3RfdGFibGUoYikgICAgKGIpKzggICAgICAgICAgIDsganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIKKyVkZWZpbmUgY29lZl9ibG9jayhiKSAgIChiKSsxMiAgICAgICAgICA7IEpDT0VGUFRSIGNvZWZfYmxvY2sKKyVkZWZpbmUgb3V0cHV0X2J1ZihiKSAgIChiKSsxNiAgICAgICAgICA7IEpTQU1QQVJSQVkgb3V0cHV0X2J1ZgorJWRlZmluZSBvdXRwdXRfY29sKGIpICAgKGIpKzIwICAgICAgICAgIDsgSkRJTUVOU0lPTiBvdXRwdXRfY29sCiAKLSVkZWZpbmUgb3JpZ2luYWxfZWJwCWVicCswCi0lZGVmaW5lIHdrKGkpCQllYnAtKFdLX05VTS0oaSkpKlNJWkVPRl9NTVdPUkQJOyBtbXdvcmQgd2tbV0tfTlVNXQotJWRlZmluZSBXS19OVU0JCTIKLSVkZWZpbmUgd29ya3NwYWNlCXdrKDApLURDVFNJWkUyKlNJWkVPRl9KQ09FRgotCQkJCQk7IEpDT0VGIHdvcmtzcGFjZVtEQ1RTSVpFMl0KKyVkZWZpbmUgb3JpZ2luYWxfZWJwICAgIGVicCswCislZGVmaW5lIHdrKGkpICAgICAgICAgICBlYnAtKFdLX05VTS0oaSkpKlNJWkVPRl9NTVdPUkQgIDsgbW13b3JkIHdrW1dLX05VTV0KKyVkZWZpbmUgV0tfTlVNICAgICAgICAgIDIKKyVkZWZpbmUgd29ya3NwYWNlICAgICAgIHdrKDApLURDVFNJWkUyKlNJWkVPRl9KQ09FRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgSkNPRUYgd29ya3NwYWNlW0RDVFNJWkUyXQogCi0JYWxpZ24JMTYKLQlnbG9iYWwJRVhUTihqc2ltZF9pZGN0X2lmYXN0X21teCkKKyAgICAgICAgYWxpZ24gICAxNgorICAgICAgICBnbG9iYWwgIEVYVE4oanNpbWRfaWRjdF9pZmFzdF9tbXgpCiAKIEVYVE4oanNpbWRfaWRjdF9pZmFzdF9tbXgpOgotCXB1c2gJZWJwCi0JbW92CWVheCxlc3AJCQkJOyBlYXggPSBvcmlnaW5hbCBlYnAKLQlzdWIJZXNwLCBieXRlIDQKLQlhbmQJZXNwLCBieXRlICgtU0laRU9GX01NV09SRCkJOyBhbGlnbiB0byA2NCBiaXRzCi0JbW92CVtlc3BdLGVheAotCW1vdgllYnAsZXNwCQkJCTsgZWJwID0gYWxpZ25lZCBlYnAKLQlsZWEJZXNwLCBbd29ya3NwYWNlXQotCXB1c2gJZWJ4Ci07CXB1c2gJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLQlwdXNoCWVzaQotCXB1c2gJZWRpCisgICAgICAgIHB1c2ggICAgZWJwCisgICAgICAgIG1vdiAgICAgZWF4LGVzcCAgICAgICAgICAgICAgICAgICAgICAgICA7IGVheCA9IG9yaWdpbmFsIGVicAorICAgICAgICBzdWIgICAgIGVzcCwgYnl0ZSA0CisgICAgICAgIGFuZCAgICAgZXNwLCBieXRlICgtU0laRU9GX01NV09SRCkgICAgICA7IGFsaWduIHRvIDY0IGJpdHMKKyAgICAgICAgbW92ICAgICBbZXNwXSxlYXgKKyAgICAgICAgbW92ICAgICBlYnAsZXNwICAgICAgICAgICAgICAgICAgICAgICAgIDsgZWJwID0gYWxpZ25lZCBlYnAKKyAgICAgICAgbGVhICAgICBlc3AsIFt3b3Jrc3BhY2VdCisgICAgICAgIHB1c2ggICAgZWJ4Cis7ICAgICAgIHB1c2ggICAgZWN4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgICAgIHB1c2ggICAgZWR4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgICAgIHB1c2ggICAgZXNpCisgICAgICAgIHB1c2ggICAgZWRpCiAKLQlnZXRfR09UCWVieAkJOyBnZXQgR09UIGFkZHJlc3MKKyAgICAgICAgZ2V0X0dPVCBlYnggICAgICAgICAgICAgOyBnZXQgR09UIGFkZHJlc3MKIAotCTsgLS0tLSBQYXNzIDE6IHByb2Nlc3MgY29sdW1ucyBmcm9tIGlucHV0LCBzdG9yZSBpbnRvIHdvcmsgYXJyYXkuCisgICAgICAgIDsgLS0tLSBQYXNzIDE6IHByb2Nlc3MgY29sdW1ucyBmcm9tIGlucHV0LCBzdG9yZSBpbnRvIHdvcmsgYXJyYXkuCiAKLTsJbW92CWVheCwgW29yaWdpbmFsX2VicF0KLQltb3YJZWR4LCBQT0lOVEVSIFtkY3RfdGFibGUoZWF4KV0JOyBxdWFudHB0cgotCW1vdgllc2ksIEpDT0VGUFRSIFtjb2VmX2Jsb2NrKGVheCldCQk7IGlucHRyCi0JbGVhCWVkaSwgW3dvcmtzcGFjZV0JCQk7IEpDT0VGICogd3NwdHIKLQltb3YJZWN4LCBEQ1RTSVpFLzQJCQkJOyBjdHIKLQlhbGlnbngJMTYsNworOyAgICAgICBtb3YgICAgIGVheCwgW29yaWdpbmFsX2VicF0KKyAgICAgICAgbW92ICAgICBlZHgsIFBPSU5URVIgW2RjdF90YWJsZShlYXgpXSAgICAgICAgICAgOyBxdWFudHB0cgorICAgICAgICBtb3YgICAgIGVzaSwgSkNPRUZQVFIgW2NvZWZfYmxvY2soZWF4KV0gICAgICAgICA7IGlucHRyCisgICAgICAgIGxlYSAgICAgZWRpLCBbd29ya3NwYWNlXSAgICAgICAgICAgICAgICAgICAgICAgIDsgSkNPRUYgKiB3c3B0cgorICAgICAgICBtb3YgICAgIGVjeCwgRENUU0laRS80ICAgICAgICAgICAgICAgICAgICAgICAgICA7IGN0cgorICAgICAgICBhbGlnbnggIDE2LDcKIC5jb2x1bW5sb29wOgogJWlmbmRlZiBOT19aRVJPX0NPTFVNTl9URVNUX0lGQVNUX01NWAotCW1vdgllYXgsIERXT1JEIFtEV0JMT0NLKDEsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQlvcgllYXgsIERXT1JEIFtEV0JMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQlqbnoJc2hvcnQgLmNvbHVtbkRDVAorICAgICAgICBtb3YgICAgIGVheCwgRFdPUkQgW0RXQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBvciAgICAgIGVheCwgRFdPUkQgW0RXQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBqbnogICAgIHNob3J0IC5jb2x1bW5EQ1QKIAotCW1vdnEJbW0wLCBNTVdPUkQgW01NQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQotCW1vdnEJbW0xLCBNTVdPUkQgW01NQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQotCXBvcgltbTAsIE1NV09SRCBbTU1CTE9DSygzLDAsZXNpLFNJWkVPRl9KQ09FRildCi0JcG9yCW1tMSwgTU1XT1JEIFtNTUJMT0NLKDQsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQlwb3IJbW0wLCBNTVdPUkQgW01NQkxPQ0soNSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQotCXBvcgltbTEsIE1NV09SRCBbTU1CTE9DSyg2LDAsZXNpLFNJWkVPRl9KQ09FRildCi0JcG9yCW1tMCwgTU1XT1JEIFtNTUJMT0NLKDcsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQlwb3IJbW0xLG1tMAotCXBhY2tzc3diIG1tMSxtbTEKLQltb3ZkCWVheCxtbTEKLQl0ZXN0CWVheCxlYXgKLQlqbnoJc2hvcnQgLmNvbHVtbkRDVAorICAgICAgICBtb3ZxICAgIG1tMCwgTU1XT1JEIFtNTUJMT0NLKDEsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgbW92cSAgICBtbTEsIE1NV09SRCBbTU1CTE9DSygyLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIHBvciAgICAgbW0wLCBNTVdPUkQgW01NQkxPQ0soMywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBwb3IgICAgIG1tMSwgTU1XT1JEIFtNTUJMT0NLKDQsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgcG9yICAgICBtbTAsIE1NV09SRCBbTU1CTE9DSyg1LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIHBvciAgICAgbW0xLCBNTVdPUkQgW01NQkxPQ0soNiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBwb3IgICAgIG1tMCwgTU1XT1JEIFtNTUJMT0NLKDcsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgcG9yICAgICBtbTEsbW0wCisgICAgICAgIHBhY2tzc3diIG1tMSxtbTEKKyAgICAgICAgbW92ZCAgICBlYXgsbW0xCisgICAgICAgIHRlc3QgICAgZWF4LGVheAorICAgICAgICBqbnogICAgIHNob3J0IC5jb2x1bW5EQ1QKIAotCTsgLS0gQUMgdGVybXMgYWxsIHplcm8KKyAgICAgICAgOyAtLSBBQyB0ZXJtcyBhbGwgemVybwogCi0JbW92cQltbTAsIE1NV09SRCBbTU1CTE9DSygwLDAsZXNpLFNJWkVPRl9KQ09FRildCi0JcG11bGx3CW1tMCwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0lGQVNUX01VTFRfVFlQRSldCisgICAgICAgIG1vdnEgICAgbW0wLCBNTVdPUkQgW01NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBwbXVsbHcgIG1tMCwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0lGQVNUX01VTFRfVFlQRSldCiAKLQltb3ZxICAgICAgbW0yLG1tMAkJOyBtbTA9aW4wPSgwMCAwMSAwMiAwMykKLQlwdW5wY2tsd2QgbW0wLG1tMAkJOyBtbTA9KDAwIDAwIDAxIDAxKQotCXB1bnBja2h3ZCBtbTIsbW0yCQk7IG1tMj0oMDIgMDIgMDMgMDMpCisgICAgICAgIG1vdnEgICAgICBtbTIsbW0wICAgICAgICAgICAgICAgOyBtbTA9aW4wPSgwMCAwMSAwMiAwMykKKyAgICAgICAgcHVucGNrbHdkIG1tMCxtbTAgICAgICAgICAgICAgICA7IG1tMD0oMDAgMDAgMDEgMDEpCisgICAgICAgIHB1bnBja2h3ZCBtbTIsbW0yICAgICAgICAgICAgICAgOyBtbTI9KDAyIDAyIDAzIDAzKQogCi0JbW92cSAgICAgIG1tMSxtbTAKLQlwdW5wY2tsZHEgbW0wLG1tMAkJOyBtbTA9KDAwIDAwIDAwIDAwKQotCXB1bnBja2hkcSBtbTEsbW0xCQk7IG1tMT0oMDEgMDEgMDEgMDEpCi0JbW92cSAgICAgIG1tMyxtbTIKLQlwdW5wY2tsZHEgbW0yLG1tMgkJOyBtbTI9KDAyIDAyIDAyIDAyKQotCXB1bnBja2hkcSBtbTMsbW0zCQk7IG1tMz0oMDMgMDMgMDMgMDMpCisgICAgICAgIG1vdnEgICAgICBtbTEsbW0wCisgICAgICAgIHB1bnBja2xkcSBtbTAsbW0wICAgICAgICAgICAgICAgOyBtbTA9KDAwIDAwIDAwIDAwKQorICAgICAgICBwdW5wY2toZHEgbW0xLG1tMSAgICAgICAgICAgICAgIDsgbW0xPSgwMSAwMSAwMSAwMSkKKyAgICAgICAgbW92cSAgICAgIG1tMyxtbTIKKyAgICAgICAgcHVucGNrbGRxIG1tMixtbTIgICAgICAgICAgICAgICA7IG1tMj0oMDIgMDIgMDIgMDIpCisgICAgICAgIHB1bnBja2hkcSBtbTMsbW0zICAgICAgICAgICAgICAgOyBtbTM9KDAzIDAzIDAzIDAzKQogCi0JbW92cQlNTVdPUkQgW01NQkxPQ0soMCwwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0wCi0JbW92cQlNTVdPUkQgW01NQkxPQ0soMCwxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0wCi0JbW92cQlNTVdPUkQgW01NQkxPQ0soMSwwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0xCi0JbW92cQlNTVdPUkQgW01NQkxPQ0soMSwxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0xCi0JbW92cQlNTVdPUkQgW01NQkxPQ0soMiwwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0yCi0JbW92cQlNTVdPUkQgW01NQkxPQ0soMiwxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0yCi0JbW92cQlNTVdPUkQgW01NQkxPQ0soMywwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0zCi0JbW92cQlNTVdPUkQgW01NQkxPQ0soMywxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0zCi0Jam1wCW5lYXIgLm5leHRjb2x1bW4KLQlhbGlnbngJMTYsNworICAgICAgICBtb3ZxICAgIE1NV09SRCBbTU1CTE9DSygwLDAsZWRpLFNJWkVPRl9KQ09FRildLCBtbTAKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMCwxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0wCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtNTUJMT0NLKDEsMCxlZGksU0laRU9GX0pDT0VGKV0sIG1tMQorICAgICAgICBtb3ZxICAgIE1NV09SRCBbTU1CTE9DSygxLDEsZWRpLFNJWkVPRl9KQ09FRildLCBtbTEKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMiwwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0yCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtNTUJMT0NLKDIsMSxlZGksU0laRU9GX0pDT0VGKV0sIG1tMgorICAgICAgICBtb3ZxICAgIE1NV09SRCBbTU1CTE9DSygzLDAsZWRpLFNJWkVPRl9KQ09FRildLCBtbTMKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMywxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0zCisgICAgICAgIGptcCAgICAgbmVhciAubmV4dGNvbHVtbgorICAgICAgICBhbGlnbnggIDE2LDcKICVlbmRpZgogLmNvbHVtbkRDVDoKIAotCTsgLS0gRXZlbiBwYXJ0CisgICAgICAgIDsgLS0gRXZlbiBwYXJ0CiAKLQltb3ZxCW1tMCwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQltb3ZxCW1tMSwgTU1XT1JEIFtNTUJMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQlwbXVsbHcJbW0wLCBNTVdPUkQgW01NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfSUZBU1RfTVVMVF9UWVBFKV0KLQlwbXVsbHcJbW0xLCBNTVdPUkQgW01NQkxPQ0soMiwwLGVkeCxTSVpFT0ZfSUZBU1RfTVVMVF9UWVBFKV0KLQltb3ZxCW1tMiwgTU1XT1JEIFtNTUJMT0NLKDQsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQltb3ZxCW1tMywgTU1XT1JEIFtNTUJMT0NLKDYsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQlwbXVsbHcJbW0yLCBNTVdPUkQgW01NQkxPQ0soNCwwLGVkeCxTSVpFT0ZfSUZBU1RfTVVMVF9UWVBFKV0KLQlwbXVsbHcJbW0zLCBNTVdPUkQgW01NQkxPQ0soNiwwLGVkeCxTSVpFT0ZfSUZBU1RfTVVMVF9UWVBFKV0KKyAgICAgICAgbW92cSAgICBtbTAsIE1NV09SRCBbTU1CTE9DSygwLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdnEgICAgbW0xLCBNTVdPUkQgW01NQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBwbXVsbHcgIG1tMCwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0lGQVNUX01VTFRfVFlQRSldCisgICAgICAgIHBtdWxsdyAgbW0xLCBNTVdPUkQgW01NQkxPQ0soMiwwLGVkeCxTSVpFT0ZfSUZBU1RfTVVMVF9UWVBFKV0KKyAgICAgICAgbW92cSAgICBtbTIsIE1NV09SRCBbTU1CTE9DSyg0LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdnEgICAgbW0zLCBNTVdPUkQgW01NQkxPQ0soNiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBwbXVsbHcgIG1tMiwgTU1XT1JEIFtNTUJMT0NLKDQsMCxlZHgsU0laRU9GX0lGQVNUX01VTFRfVFlQRSldCisgICAgICAgIHBtdWxsdyAgbW0zLCBNTVdPUkQgW01NQkxPQ0soNiwwLGVkeCxTSVpFT0ZfSUZBU1RfTVVMVF9UWVBFKV0KIAotCW1vdnEJbW00LG1tMAotCW1vdnEJbW01LG1tMQotCXBzdWJ3CW1tMCxtbTIJCQk7IG1tMD10bXAxMQotCXBzdWJ3CW1tMSxtbTMKLQlwYWRkdwltbTQsbW0yCQkJOyBtbTQ9dG1wMTAKLQlwYWRkdwltbTUsbW0zCQkJOyBtbTU9dG1wMTMKKyAgICAgICAgbW92cSAgICBtbTQsbW0wCisgICAgICAgIG1vdnEgICAgbW01LG1tMQorICAgICAgICBwc3VidyAgIG1tMCxtbTIgICAgICAgICAgICAgICAgIDsgbW0wPXRtcDExCisgICAgICAgIHBzdWJ3ICAgbW0xLG1tMworICAgICAgICBwYWRkdyAgIG1tNCxtbTIgICAgICAgICAgICAgICAgIDsgbW00PXRtcDEwCisgICAgICAgIHBhZGR3ICAgbW01LG1tMyAgICAgICAgICAgICAgICAgOyBtbTU9dG1wMTMKIAotCXBzbGx3CW1tMSxQUkVfTVVMVElQTFlfU0NBTEVfQklUUwotCXBtdWxodwltbTEsW0dPVE9GRihlYngsUFdfRjE0MTQpXQotCXBzdWJ3CW1tMSxtbTUJCQk7IG1tMT10bXAxMgorICAgICAgICBwc2xsdyAgIG1tMSxQUkVfTVVMVElQTFlfU0NBTEVfQklUUworICAgICAgICBwbXVsaHcgIG1tMSxbR09UT0ZGKGVieCxQV19GMTQxNCldCisgICAgICAgIHBzdWJ3ICAgbW0xLG1tNSAgICAgICAgICAgICAgICAgOyBtbTE9dG1wMTIKIAotCW1vdnEJbW02LG1tNAotCW1vdnEJbW03LG1tMAotCXBzdWJ3CW1tNCxtbTUJCQk7IG1tND10bXAzCi0JcHN1YncJbW0wLG1tMQkJCTsgbW0wPXRtcDIKLQlwYWRkdwltbTYsbW01CQkJOyBtbTY9dG1wMAotCXBhZGR3CW1tNyxtbTEJCQk7IG1tNz10bXAxCisgICAgICAgIG1vdnEgICAgbW02LG1tNAorICAgICAgICBtb3ZxICAgIG1tNyxtbTAKKyAgICAgICAgcHN1YncgICBtbTQsbW01ICAgICAgICAgICAgICAgICA7IG1tND10bXAzCisgICAgICAgIHBzdWJ3ICAgbW0wLG1tMSAgICAgICAgICAgICAgICAgOyBtbTA9dG1wMgorICAgICAgICBwYWRkdyAgIG1tNixtbTUgICAgICAgICAgICAgICAgIDsgbW02PXRtcDAKKyAgICAgICAgcGFkZHcgICBtbTcsbW0xICAgICAgICAgICAgICAgICA7IG1tNz10bXAxCiAKLQltb3ZxCU1NV09SRCBbd2soMSldLCBtbTQJOyB3aygxKT10bXAzCi0JbW92cQlNTVdPUkQgW3drKDApXSwgbW0wCTsgd2soMCk9dG1wMgorICAgICAgICBtb3ZxICAgIE1NV09SRCBbd2soMSldLCBtbTQgICAgIDsgd2soMSk9dG1wMworICAgICAgICBtb3ZxICAgIE1NV09SRCBbd2soMCldLCBtbTAgICAgIDsgd2soMCk9dG1wMgogCi0JOyAtLSBPZGQgcGFydAorICAgICAgICA7IC0tIE9kZCBwYXJ0CiAKLQltb3ZxCW1tMiwgTU1XT1JEIFtNTUJMT0NLKDEsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQltb3ZxCW1tMywgTU1XT1JEIFtNTUJMT0NLKDMsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQlwbXVsbHcJbW0yLCBNTVdPUkQgW01NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfSUZBU1RfTVVMVF9UWVBFKV0KLQlwbXVsbHcJbW0zLCBNTVdPUkQgW01NQkxPQ0soMywwLGVkeCxTSVpFT0ZfSUZBU1RfTVVMVF9UWVBFKV0KLQltb3ZxCW1tNSwgTU1XT1JEIFtNTUJMT0NLKDUsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQltb3ZxCW1tMSwgTU1XT1JEIFtNTUJMT0NLKDcsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQlwbXVsbHcJbW01LCBNTVdPUkQgW01NQkxPQ0soNSwwLGVkeCxTSVpFT0ZfSUZBU1RfTVVMVF9UWVBFKV0KLQlwbXVsbHcJbW0xLCBNTVdPUkQgW01NQkxPQ0soNywwLGVkeCxTSVpFT0ZfSUZBU1RfTVVMVF9UWVBFKV0KKyAgICAgICAgbW92cSAgICBtbTIsIE1NV09SRCBbTU1CTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdnEgICAgbW0zLCBNTVdPUkQgW01NQkxPQ0soMywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBwbXVsbHcgIG1tMiwgTU1XT1JEIFtNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0lGQVNUX01VTFRfVFlQRSldCisgICAgICAgIHBtdWxsdyAgbW0zLCBNTVdPUkQgW01NQkxPQ0soMywwLGVkeCxTSVpFT0ZfSUZBU1RfTVVMVF9UWVBFKV0KKyAgICAgICAgbW92cSAgICBtbTUsIE1NV09SRCBbTU1CTE9DSyg1LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdnEgICAgbW0xLCBNTVdPUkQgW01NQkxPQ0soNywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBwbXVsbHcgIG1tNSwgTU1XT1JEIFtNTUJMT0NLKDUsMCxlZHgsU0laRU9GX0lGQVNUX01VTFRfVFlQRSldCisgICAgICAgIHBtdWxsdyAgbW0xLCBNTVdPUkQgW01NQkxPQ0soNywwLGVkeCxTSVpFT0ZfSUZBU1RfTVVMVF9UWVBFKV0KIAotCW1vdnEJbW00LG1tMgotCW1vdnEJbW0wLG1tNQotCXBzdWJ3CW1tMixtbTEJCQk7IG1tMj16MTIKLQlwc3VidwltbTUsbW0zCQkJOyBtbTU9ejEwCi0JcGFkZHcJbW00LG1tMQkJCTsgbW00PXoxMQotCXBhZGR3CW1tMCxtbTMJCQk7IG1tMD16MTMKKyAgICAgICAgbW92cSAgICBtbTQsbW0yCisgICAgICAgIG1vdnEgICAgbW0wLG1tNQorICAgICAgICBwc3VidyAgIG1tMixtbTEgICAgICAgICAgICAgICAgIDsgbW0yPXoxMgorICAgICAgICBwc3VidyAgIG1tNSxtbTMgICAgICAgICAgICAgICAgIDsgbW01PXoxMAorICAgICAgICBwYWRkdyAgIG1tNCxtbTEgICAgICAgICAgICAgICAgIDsgbW00PXoxMQorICAgICAgICBwYWRkdyAgIG1tMCxtbTMgICAgICAgICAgICAgICAgIDsgbW0wPXoxMwogCi0JbW92cQltbTEsbW01CQkJOyBtbTE9ejEwKHVuc2NhbGVkKQotCXBzbGx3CW1tMixQUkVfTVVMVElQTFlfU0NBTEVfQklUUwotCXBzbGx3CW1tNSxQUkVfTVVMVElQTFlfU0NBTEVfQklUUworICAgICAgICBtb3ZxICAgIG1tMSxtbTUgICAgICAgICAgICAgICAgIDsgbW0xPXoxMCh1bnNjYWxlZCkKKyAgICAgICAgcHNsbHcgICBtbTIsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKyAgICAgICAgcHNsbHcgICBtbTUsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKIAotCW1vdnEJbW0zLG1tNAotCXBzdWJ3CW1tNCxtbTAKLQlwYWRkdwltbTMsbW0wCQkJOyBtbTM9dG1wNworICAgICAgICBtb3ZxICAgIG1tMyxtbTQKKyAgICAgICAgcHN1YncgICBtbTQsbW0wCisgICAgICAgIHBhZGR3ICAgbW0zLG1tMCAgICAgICAgICAgICAgICAgOyBtbTM9dG1wNwogCi0JcHNsbHcJbW00LFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCi0JcG11bGh3CW1tNCxbR09UT0ZGKGVieCxQV19GMTQxNCldCTsgbW00PXRtcDExCisgICAgICAgIHBzbGx3ICAgbW00LFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisgICAgICAgIHBtdWxodyAgbW00LFtHT1RPRkYoZWJ4LFBXX0YxNDE0KV0gICAgICA7IG1tND10bXAxMQogCi0JOyBUbyBhdm9pZCBvdmVyZmxvdy4uLgotCTsKLQk7IChPcmlnaW5hbCkKLQk7IHRtcDEyID0gLTIuNjEzMTI1OTMwICogejEwICsgejU7Ci0JOwotCTsgKFRoaXMgaW1wbGVtZW50YXRpb24pCi0JOyB0bXAxMiA9ICgtMS42MTMxMjU5MzAgLSAxKSAqIHoxMCArIHo1OwotCTsgICAgICAgPSAtMS42MTMxMjU5MzAgKiB6MTAgLSB6MTAgKyB6NTsKKyAgICAgICAgOyBUbyBhdm9pZCBvdmVyZmxvdy4uLgorICAgICAgICA7CisgICAgICAgIDsgKE9yaWdpbmFsKQorICAgICAgICA7IHRtcDEyID0gLTIuNjEzMTI1OTMwICogejEwICsgejU7CisgICAgICAgIDsKKyAgICAgICAgOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKyAgICAgICAgOyB0bXAxMiA9ICgtMS42MTMxMjU5MzAgLSAxKSAqIHoxMCArIHo1OworICAgICAgICA7ICAgICAgID0gLTEuNjEzMTI1OTMwICogejEwIC0gejEwICsgejU7CiAKLQltb3ZxCW1tMCxtbTUKLQlwYWRkdwltbTUsbW0yCi0JcG11bGh3CW1tNSxbR09UT0ZGKGVieCxQV19GMTg0NyldCTsgbW01PXo1Ci0JcG11bGh3CW1tMCxbR09UT0ZGKGVieCxQV19NRjE2MTMpXQotCXBtdWxodwltbTIsW0dPVE9GRihlYngsUFdfRjEwODIpXQotCXBzdWJ3CW1tMCxtbTEKLQlwc3VidwltbTIsbW01CQkJOyBtbTI9dG1wMTAKLQlwYWRkdwltbTAsbW01CQkJOyBtbTA9dG1wMTIKKyAgICAgICAgbW92cSAgICBtbTAsbW01CisgICAgICAgIHBhZGR3ICAgbW01LG1tMgorICAgICAgICBwbXVsaHcgIG1tNSxbR09UT0ZGKGVieCxQV19GMTg0NyldICAgICAgOyBtbTU9ejUKKyAgICAgICAgcG11bGh3ICBtbTAsW0dPVE9GRihlYngsUFdfTUYxNjEzKV0KKyAgICAgICAgcG11bGh3ICBtbTIsW0dPVE9GRihlYngsUFdfRjEwODIpXQorICAgICAgICBwc3VidyAgIG1tMCxtbTEKKyAgICAgICAgcHN1YncgICBtbTIsbW01ICAgICAgICAgICAgICAgICA7IG1tMj10bXAxMAorICAgICAgICBwYWRkdyAgIG1tMCxtbTUgICAgICAgICAgICAgICAgIDsgbW0wPXRtcDEyCiAKLQk7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQorICAgICAgICA7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQogCi0JcHN1YncJbW0wLG1tMwkJCTsgbW0wPXRtcDYKLQltb3ZxCW1tMSxtbTYKLQltb3ZxCW1tNSxtbTcKLQlwYWRkdwltbTYsbW0zCQkJOyBtbTY9ZGF0YTA9KDAwIDAxIDAyIDAzKQotCXBhZGR3CW1tNyxtbTAJCQk7IG1tNz1kYXRhMT0oMTAgMTEgMTIgMTMpCi0JcHN1YncJbW0xLG1tMwkJCTsgbW0xPWRhdGE3PSg3MCA3MSA3MiA3MykKLQlwc3VidwltbTUsbW0wCQkJOyBtbTU9ZGF0YTY9KDYwIDYxIDYyIDYzKQotCXBzdWJ3CW1tNCxtbTAJCQk7IG1tND10bXA1CisgICAgICAgIHBzdWJ3ICAgbW0wLG1tMyAgICAgICAgICAgICAgICAgOyBtbTA9dG1wNgorICAgICAgICBtb3ZxICAgIG1tMSxtbTYKKyAgICAgICAgbW92cSAgICBtbTUsbW03CisgICAgICAgIHBhZGR3ICAgbW02LG1tMyAgICAgICAgICAgICAgICAgOyBtbTY9ZGF0YTA9KDAwIDAxIDAyIDAzKQorICAgICAgICBwYWRkdyAgIG1tNyxtbTAgICAgICAgICAgICAgICAgIDsgbW03PWRhdGExPSgxMCAxMSAxMiAxMykKKyAgICAgICAgcHN1YncgICBtbTEsbW0zICAgICAgICAgICAgICAgICA7IG1tMT1kYXRhNz0oNzAgNzEgNzIgNzMpCisgICAgICAgIHBzdWJ3ICAgbW01LG1tMCAgICAgICAgICAgICAgICAgOyBtbTU9ZGF0YTY9KDYwIDYxIDYyIDYzKQorICAgICAgICBwc3VidyAgIG1tNCxtbTAgICAgICAgICAgICAgICAgIDsgbW00PXRtcDUKIAotCW1vdnEgICAgICBtbTMsbW02CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKLQlwdW5wY2tsd2QgbW02LG1tNwkJOyBtbTY9KDAwIDEwIDAxIDExKQotCXB1bnBja2h3ZCBtbTMsbW03CQk7IG1tMz0oMDIgMTIgMDMgMTMpCi0JbW92cSAgICAgIG1tMCxtbTUJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQotCXB1bnBja2x3ZCBtbTUsbW0xCQk7IG1tNT0oNjAgNzAgNjEgNzEpCi0JcHVucGNraHdkIG1tMCxtbTEJCTsgbW0wPSg2MiA3MiA2MyA3MykKKyAgICAgICAgbW92cSAgICAgIG1tMyxtbTYgICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICAgICAgcHVucGNrbHdkIG1tNixtbTcgICAgICAgICAgICAgICA7IG1tNj0oMDAgMTAgMDEgMTEpCisgICAgICAgIHB1bnBja2h3ZCBtbTMsbW03ICAgICAgICAgICAgICAgOyBtbTM9KDAyIDEyIDAzIDEzKQorICAgICAgICBtb3ZxICAgICAgbW0wLG1tNSAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgICAgICBwdW5wY2tsd2QgbW01LG1tMSAgICAgICAgICAgICAgIDsgbW01PSg2MCA3MCA2MSA3MSkKKyAgICAgICAgcHVucGNraHdkIG1tMCxtbTEgICAgICAgICAgICAgICA7IG1tMD0oNjIgNzIgNjMgNzMpCiAKLQltb3ZxCW1tNywgTU1XT1JEIFt3aygwKV0JOyBtbTc9dG1wMgotCW1vdnEJbW0xLCBNTVdPUkQgW3drKDEpXQk7IG1tMT10bXAzCisgICAgICAgIG1vdnEgICAgbW03LCBNTVdPUkQgW3drKDApXSAgICAgOyBtbTc9dG1wMgorICAgICAgICBtb3ZxICAgIG1tMSwgTU1XT1JEIFt3aygxKV0gICAgIDsgbW0xPXRtcDMKIAotCW1vdnEJTU1XT1JEIFt3aygwKV0sIG1tNQk7IHdrKDApPSg2MCA3MCA2MSA3MSkKLQltb3ZxCU1NV09SRCBbd2soMSldLCBtbTAJOyB3aygxKT0oNjIgNzIgNjMgNzMpCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFt3aygwKV0sIG1tNSAgICAgOyB3aygwKT0oNjAgNzAgNjEgNzEpCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFt3aygxKV0sIG1tMCAgICAgOyB3aygxKT0oNjIgNzIgNjMgNzMpCiAKLQlwYWRkdwltbTIsbW00CQkJOyBtbTI9dG1wNAotCW1vdnEJbW01LG1tNwotCW1vdnEJbW0wLG1tMQotCXBhZGR3CW1tNyxtbTQJCQk7IG1tNz1kYXRhMj0oMjAgMjEgMjIgMjMpCi0JcGFkZHcJbW0xLG1tMgkJCTsgbW0xPWRhdGE0PSg0MCA0MSA0MiA0MykKLQlwc3VidwltbTUsbW00CQkJOyBtbTU9ZGF0YTU9KDUwIDUxIDUyIDUzKQotCXBzdWJ3CW1tMCxtbTIJCQk7IG1tMD1kYXRhMz0oMzAgMzEgMzIgMzMpCisgICAgICAgIHBhZGR3ICAgbW0yLG1tNCAgICAgICAgICAgICAgICAgOyBtbTI9dG1wNAorICAgICAgICBtb3ZxICAgIG1tNSxtbTcKKyAgICAgICAgbW92cSAgICBtbTAsbW0xCisgICAgICAgIHBhZGR3ICAgbW03LG1tNCAgICAgICAgICAgICAgICAgOyBtbTc9ZGF0YTI9KDIwIDIxIDIyIDIzKQorICAgICAgICBwYWRkdyAgIG1tMSxtbTIgICAgICAgICAgICAgICAgIDsgbW0xPWRhdGE0PSg0MCA0MSA0MiA0MykKKyAgICAgICAgcHN1YncgICBtbTUsbW00ICAgICAgICAgICAgICAgICA7IG1tNT1kYXRhNT0oNTAgNTEgNTIgNTMpCisgICAgICAgIHBzdWJ3ICAgbW0wLG1tMiAgICAgICAgICAgICAgICAgOyBtbTA9ZGF0YTM9KDMwIDMxIDMyIDMzKQogCi0JbW92cSAgICAgIG1tNCxtbTcJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQotCXB1bnBja2x3ZCBtbTcsbW0wCQk7IG1tNz0oMjAgMzAgMjEgMzEpCi0JcHVucGNraHdkIG1tNCxtbTAJCTsgbW00PSgyMiAzMiAyMyAzMykKLQltb3ZxICAgICAgbW0yLG1tMQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCi0JcHVucGNrbHdkIG1tMSxtbTUJCTsgbW0xPSg0MCA1MCA0MSA1MSkKLQlwdW5wY2tod2QgbW0yLG1tNQkJOyBtbTI9KDQyIDUyIDQzIDUzKQorICAgICAgICBtb3ZxICAgICAgbW00LG1tNyAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgICAgICBwdW5wY2tsd2QgbW03LG1tMCAgICAgICAgICAgICAgIDsgbW03PSgyMCAzMCAyMSAzMSkKKyAgICAgICAgcHVucGNraHdkIG1tNCxtbTAgICAgICAgICAgICAgICA7IG1tND0oMjIgMzIgMjMgMzMpCisgICAgICAgIG1vdnEgICAgICBtbTIsbW0xICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgICAgIHB1bnBja2x3ZCBtbTEsbW01ICAgICAgICAgICAgICAgOyBtbTE9KDQwIDUwIDQxIDUxKQorICAgICAgICBwdW5wY2tod2QgbW0yLG1tNSAgICAgICAgICAgICAgIDsgbW0yPSg0MiA1MiA0MyA1MykKIAotCW1vdnEgICAgICBtbTAsbW02CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKLQlwdW5wY2tsZHEgbW02LG1tNwkJOyBtbTY9KDAwIDEwIDIwIDMwKQotCXB1bnBja2hkcSBtbTAsbW03CQk7IG1tMD0oMDEgMTEgMjEgMzEpCi0JbW92cSAgICAgIG1tNSxtbTMJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQotCXB1bnBja2xkcSBtbTMsbW00CQk7IG1tMz0oMDIgMTIgMjIgMzIpCi0JcHVucGNraGRxIG1tNSxtbTQJCTsgbW01PSgwMyAxMyAyMyAzMykKKyAgICAgICAgbW92cSAgICAgIG1tMCxtbTYgICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICAgICAgcHVucGNrbGRxIG1tNixtbTcgICAgICAgICAgICAgICA7IG1tNj0oMDAgMTAgMjAgMzApCisgICAgICAgIHB1bnBja2hkcSBtbTAsbW03ICAgICAgICAgICAgICAgOyBtbTA9KDAxIDExIDIxIDMxKQorICAgICAgICBtb3ZxICAgICAgbW01LG1tMyAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgICAgICBwdW5wY2tsZHEgbW0zLG1tNCAgICAgICAgICAgICAgIDsgbW0zPSgwMiAxMiAyMiAzMikKKyAgICAgICAgcHVucGNraGRxIG1tNSxtbTQgICAgICAgICAgICAgICA7IG1tNT0oMDMgMTMgMjMgMzMpCiAKLQltb3ZxCW1tNywgTU1XT1JEIFt3aygwKV0JOyBtbTc9KDYwIDcwIDYxIDcxKQotCW1vdnEJbW00LCBNTVdPUkQgW3drKDEpXQk7IG1tND0oNjIgNzIgNjMgNzMpCisgICAgICAgIG1vdnEgICAgbW03LCBNTVdPUkQgW3drKDApXSAgICAgOyBtbTc9KDYwIDcwIDYxIDcxKQorICAgICAgICBtb3ZxICAgIG1tNCwgTU1XT1JEIFt3aygxKV0gICAgIDsgbW00PSg2MiA3MiA2MyA3MykKIAotCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDAsMCxlZGksU0laRU9GX0pDT0VGKV0sIG1tNgotCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDEsMCxlZGksU0laRU9GX0pDT0VGKV0sIG1tMAotCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDIsMCxlZGksU0laRU9GX0pDT0VGKV0sIG1tMwotCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDMsMCxlZGksU0laRU9GX0pDT0VGKV0sIG1tNQorICAgICAgICBtb3ZxICAgIE1NV09SRCBbTU1CTE9DSygwLDAsZWRpLFNJWkVPRl9KQ09FRildLCBtbTYKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMSwwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0wCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtNTUJMT0NLKDIsMCxlZGksU0laRU9GX0pDT0VGKV0sIG1tMworICAgICAgICBtb3ZxICAgIE1NV09SRCBbTU1CTE9DSygzLDAsZWRpLFNJWkVPRl9KQ09FRildLCBtbTUKIAotCW1vdnEgICAgICBtbTYsbW0xCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKLQlwdW5wY2tsZHEgbW0xLG1tNwkJOyBtbTE9KDQwIDUwIDYwIDcwKQotCXB1bnBja2hkcSBtbTYsbW03CQk7IG1tNj0oNDEgNTEgNjEgNzEpCi0JbW92cSAgICAgIG1tMCxtbTIJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQotCXB1bnBja2xkcSBtbTIsbW00CQk7IG1tMj0oNDIgNTIgNjIgNzIpCi0JcHVucGNraGRxIG1tMCxtbTQJCTsgbW0wPSg0MyA1MyA2MyA3MykKKyAgICAgICAgbW92cSAgICAgIG1tNixtbTEgICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICAgICAgcHVucGNrbGRxIG1tMSxtbTcgICAgICAgICAgICAgICA7IG1tMT0oNDAgNTAgNjAgNzApCisgICAgICAgIHB1bnBja2hkcSBtbTYsbW03ICAgICAgICAgICAgICAgOyBtbTY9KDQxIDUxIDYxIDcxKQorICAgICAgICBtb3ZxICAgICAgbW0wLG1tMiAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgICAgICBwdW5wY2tsZHEgbW0yLG1tNCAgICAgICAgICAgICAgIDsgbW0yPSg0MiA1MiA2MiA3MikKKyAgICAgICAgcHVucGNraGRxIG1tMCxtbTQgICAgICAgICAgICAgICA7IG1tMD0oNDMgNTMgNjMgNzMpCiAKLQltb3ZxCU1NV09SRCBbTU1CTE9DSygwLDEsZWRpLFNJWkVPRl9KQ09FRildLCBtbTEKLQltb3ZxCU1NV09SRCBbTU1CTE9DSygxLDEsZWRpLFNJWkVPRl9KQ09FRildLCBtbTYKLQltb3ZxCU1NV09SRCBbTU1CTE9DSygyLDEsZWRpLFNJWkVPRl9KQ09FRildLCBtbTIKLQltb3ZxCU1NV09SRCBbTU1CTE9DSygzLDEsZWRpLFNJWkVPRl9KQ09FRildLCBtbTAKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMCwxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0xCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtNTUJMT0NLKDEsMSxlZGksU0laRU9GX0pDT0VGKV0sIG1tNgorICAgICAgICBtb3ZxICAgIE1NV09SRCBbTU1CTE9DSygyLDEsZWRpLFNJWkVPRl9KQ09FRildLCBtbTIKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMywxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0wCiAKIC5uZXh0Y29sdW1uOgotCWFkZAllc2ksIGJ5dGUgNCpTSVpFT0ZfSkNPRUYJCTsgY29lZl9ibG9jawotCWFkZAllZHgsIGJ5dGUgNCpTSVpFT0ZfSUZBU1RfTVVMVF9UWVBFCTsgcXVhbnRwdHIKLQlhZGQJZWRpLCBieXRlIDQqRENUU0laRSpTSVpFT0ZfSkNPRUYJOyB3c3B0cgotCWRlYwllY3gJCQkJCTsgY3RyCi0Jam56CW5lYXIgLmNvbHVtbmxvb3AKKyAgICAgICAgYWRkICAgICBlc2ksIGJ5dGUgNCpTSVpFT0ZfSkNPRUYgICAgICAgICAgICAgICAgOyBjb2VmX2Jsb2NrCisgICAgICAgIGFkZCAgICAgZWR4LCBieXRlIDQqU0laRU9GX0lGQVNUX01VTFRfVFlQRSAgICAgIDsgcXVhbnRwdHIKKyAgICAgICAgYWRkICAgICBlZGksIGJ5dGUgNCpEQ1RTSVpFKlNJWkVPRl9KQ09FRiAgICAgICAgOyB3c3B0cgorICAgICAgICBkZWMgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IGN0cgorICAgICAgICBqbnogICAgIG5lYXIgLmNvbHVtbmxvb3AKIAotCTsgLS0tLSBQYXNzIDI6IHByb2Nlc3Mgcm93cyBmcm9tIHdvcmsgYXJyYXksIHN0b3JlIGludG8gb3V0cHV0IGFycmF5LgorICAgICAgICA7IC0tLS0gUGFzcyAyOiBwcm9jZXNzIHJvd3MgZnJvbSB3b3JrIGFycmF5LCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4KIAotCW1vdgllYXgsIFtvcmlnaW5hbF9lYnBdCi0JbGVhCWVzaSwgW3dvcmtzcGFjZV0JCQk7IEpDT0VGICogd3NwdHIKLQltb3YJZWRpLCBKU0FNUEFSUkFZIFtvdXRwdXRfYnVmKGVheCldCTsgKEpTQU1QUk9XICopCi0JbW92CWVheCwgSkRJTUVOU0lPTiBbb3V0cHV0X2NvbChlYXgpXQotCW1vdgllY3gsIERDVFNJWkUvNAkJCQk7IGN0cgotCWFsaWdueAkxNiw3CisgICAgICAgIG1vdiAgICAgZWF4LCBbb3JpZ2luYWxfZWJwXQorICAgICAgICBsZWEgICAgIGVzaSwgW3dvcmtzcGFjZV0gICAgICAgICAgICAgICAgICAgICAgICA7IEpDT0VGICogd3NwdHIKKyAgICAgICAgbW92ICAgICBlZGksIEpTQU1QQVJSQVkgW291dHB1dF9idWYoZWF4KV0gICAgICAgOyAoSlNBTVBST1cgKikKKyAgICAgICAgbW92ICAgICBlYXgsIEpESU1FTlNJT04gW291dHB1dF9jb2woZWF4KV0KKyAgICAgICAgbW92ICAgICBlY3gsIERDVFNJWkUvNCAgICAgICAgICAgICAgICAgICAgICAgICAgOyBjdHIKKyAgICAgICAgYWxpZ254ICAxNiw3CiAucm93bG9vcDoKIAotCTsgLS0gRXZlbiBwYXJ0CisgICAgICAgIDsgLS0gRXZlbiBwYXJ0CiAKLQltb3ZxCW1tMCwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQltb3ZxCW1tMSwgTU1XT1JEIFtNTUJMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQltb3ZxCW1tMiwgTU1XT1JEIFtNTUJMT0NLKDQsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQltb3ZxCW1tMywgTU1XT1JEIFtNTUJMT0NLKDYsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgbW92cSAgICBtbTAsIE1NV09SRCBbTU1CTE9DSygwLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdnEgICAgbW0xLCBNTVdPUkQgW01NQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBtb3ZxICAgIG1tMiwgTU1XT1JEIFtNTUJMT0NLKDQsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgbW92cSAgICBtbTMsIE1NV09SRCBbTU1CTE9DSyg2LDAsZXNpLFNJWkVPRl9KQ09FRildCiAKLQltb3ZxCW1tNCxtbTAKLQltb3ZxCW1tNSxtbTEKLQlwc3VidwltbTAsbW0yCQkJOyBtbTA9dG1wMTEKLQlwc3VidwltbTEsbW0zCi0JcGFkZHcJbW00LG1tMgkJCTsgbW00PXRtcDEwCi0JcGFkZHcJbW01LG1tMwkJCTsgbW01PXRtcDEzCisgICAgICAgIG1vdnEgICAgbW00LG1tMAorICAgICAgICBtb3ZxICAgIG1tNSxtbTEKKyAgICAgICAgcHN1YncgICBtbTAsbW0yICAgICAgICAgICAgICAgICA7IG1tMD10bXAxMQorICAgICAgICBwc3VidyAgIG1tMSxtbTMKKyAgICAgICAgcGFkZHcgICBtbTQsbW0yICAgICAgICAgICAgICAgICA7IG1tND10bXAxMAorICAgICAgICBwYWRkdyAgIG1tNSxtbTMgICAgICAgICAgICAgICAgIDsgbW01PXRtcDEzCiAKLQlwc2xsdwltbTEsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKLQlwbXVsaHcJbW0xLFtHT1RPRkYoZWJ4LFBXX0YxNDE0KV0KLQlwc3VidwltbTEsbW01CQkJOyBtbTE9dG1wMTIKKyAgICAgICAgcHNsbHcgICBtbTEsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKyAgICAgICAgcG11bGh3ICBtbTEsW0dPVE9GRihlYngsUFdfRjE0MTQpXQorICAgICAgICBwc3VidyAgIG1tMSxtbTUgICAgICAgICAgICAgICAgIDsgbW0xPXRtcDEyCiAKLQltb3ZxCW1tNixtbTQKLQltb3ZxCW1tNyxtbTAKLQlwc3VidwltbTQsbW01CQkJOyBtbTQ9dG1wMwotCXBzdWJ3CW1tMCxtbTEJCQk7IG1tMD10bXAyCi0JcGFkZHcJbW02LG1tNQkJCTsgbW02PXRtcDAKLQlwYWRkdwltbTcsbW0xCQkJOyBtbTc9dG1wMQorICAgICAgICBtb3ZxICAgIG1tNixtbTQKKyAgICAgICAgbW92cSAgICBtbTcsbW0wCisgICAgICAgIHBzdWJ3ICAgbW00LG1tNSAgICAgICAgICAgICAgICAgOyBtbTQ9dG1wMworICAgICAgICBwc3VidyAgIG1tMCxtbTEgICAgICAgICAgICAgICAgIDsgbW0wPXRtcDIKKyAgICAgICAgcGFkZHcgICBtbTYsbW01ICAgICAgICAgICAgICAgICA7IG1tNj10bXAwCisgICAgICAgIHBhZGR3ICAgbW03LG1tMSAgICAgICAgICAgICAgICAgOyBtbTc9dG1wMQogCi0JbW92cQlNTVdPUkQgW3drKDEpXSwgbW00CTsgd2soMSk9dG1wMwotCW1vdnEJTU1XT1JEIFt3aygwKV0sIG1tMAk7IHdrKDApPXRtcDIKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW3drKDEpXSwgbW00ICAgICA7IHdrKDEpPXRtcDMKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW3drKDApXSwgbW0wICAgICA7IHdrKDApPXRtcDIKIAotCTsgLS0gT2RkIHBhcnQKKyAgICAgICAgOyAtLSBPZGQgcGFydAogCi0JbW92cQltbTIsIE1NV09SRCBbTU1CTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCi0JbW92cQltbTMsIE1NV09SRCBbTU1CTE9DSygzLDAsZXNpLFNJWkVPRl9KQ09FRildCi0JbW92cQltbTUsIE1NV09SRCBbTU1CTE9DSyg1LDAsZXNpLFNJWkVPRl9KQ09FRildCi0JbW92cQltbTEsIE1NV09SRCBbTU1CTE9DSyg3LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdnEgICAgbW0yLCBNTVdPUkQgW01NQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBtb3ZxICAgIG1tMywgTU1XT1JEIFtNTUJMT0NLKDMsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgbW92cSAgICBtbTUsIE1NV09SRCBbTU1CTE9DSyg1LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdnEgICAgbW0xLCBNTVdPUkQgW01NQkxPQ0soNywwLGVzaSxTSVpFT0ZfSkNPRUYpXQogCi0JbW92cQltbTQsbW0yCi0JbW92cQltbTAsbW01Ci0JcHN1YncJbW0yLG1tMQkJCTsgbW0yPXoxMgotCXBzdWJ3CW1tNSxtbTMJCQk7IG1tNT16MTAKLQlwYWRkdwltbTQsbW0xCQkJOyBtbTQ9ejExCi0JcGFkZHcJbW0wLG1tMwkJCTsgbW0wPXoxMworICAgICAgICBtb3ZxICAgIG1tNCxtbTIKKyAgICAgICAgbW92cSAgICBtbTAsbW01CisgICAgICAgIHBzdWJ3ICAgbW0yLG1tMSAgICAgICAgICAgICAgICAgOyBtbTI9ejEyCisgICAgICAgIHBzdWJ3ICAgbW01LG1tMyAgICAgICAgICAgICAgICAgOyBtbTU9ejEwCisgICAgICAgIHBhZGR3ICAgbW00LG1tMSAgICAgICAgICAgICAgICAgOyBtbTQ9ejExCisgICAgICAgIHBhZGR3ICAgbW0wLG1tMyAgICAgICAgICAgICAgICAgOyBtbTA9ejEzCiAKLQltb3ZxCW1tMSxtbTUJCQk7IG1tMT16MTAodW5zY2FsZWQpCi0JcHNsbHcJbW0yLFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCi0JcHNsbHcJbW01LFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisgICAgICAgIG1vdnEgICAgbW0xLG1tNSAgICAgICAgICAgICAgICAgOyBtbTE9ejEwKHVuc2NhbGVkKQorICAgICAgICBwc2xsdyAgIG1tMixQUkVfTVVMVElQTFlfU0NBTEVfQklUUworICAgICAgICBwc2xsdyAgIG1tNSxQUkVfTVVMVElQTFlfU0NBTEVfQklUUwogCi0JbW92cQltbTMsbW00Ci0JcHN1YncJbW00LG1tMAotCXBhZGR3CW1tMyxtbTAJCQk7IG1tMz10bXA3CisgICAgICAgIG1vdnEgICAgbW0zLG1tNAorICAgICAgICBwc3VidyAgIG1tNCxtbTAKKyAgICAgICAgcGFkZHcgICBtbTMsbW0wICAgICAgICAgICAgICAgICA7IG1tMz10bXA3CiAKLQlwc2xsdwltbTQsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKLQlwbXVsaHcJbW00LFtHT1RPRkYoZWJ4LFBXX0YxNDE0KV0JOyBtbTQ9dG1wMTEKKyAgICAgICAgcHNsbHcgICBtbTQsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKyAgICAgICAgcG11bGh3ICBtbTQsW0dPVE9GRihlYngsUFdfRjE0MTQpXSAgICAgIDsgbW00PXRtcDExCiAKLQk7IFRvIGF2b2lkIG92ZXJmbG93Li4uCi0JOwotCTsgKE9yaWdpbmFsKQotCTsgdG1wMTIgPSAtMi42MTMxMjU5MzAgKiB6MTAgKyB6NTsKLQk7Ci0JOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKLQk7IHRtcDEyID0gKC0xLjYxMzEyNTkzMCAtIDEpICogejEwICsgejU7Ci0JOyAgICAgICA9IC0xLjYxMzEyNTkzMCAqIHoxMCAtIHoxMCArIHo1OworICAgICAgICA7IFRvIGF2b2lkIG92ZXJmbG93Li4uCisgICAgICAgIDsKKyAgICAgICAgOyAoT3JpZ2luYWwpCisgICAgICAgIDsgdG1wMTIgPSAtMi42MTMxMjU5MzAgKiB6MTAgKyB6NTsKKyAgICAgICAgOworICAgICAgICA7IChUaGlzIGltcGxlbWVudGF0aW9uKQorICAgICAgICA7IHRtcDEyID0gKC0xLjYxMzEyNTkzMCAtIDEpICogejEwICsgejU7CisgICAgICAgIDsgICAgICAgPSAtMS42MTMxMjU5MzAgKiB6MTAgLSB6MTAgKyB6NTsKIAotCW1vdnEJbW0wLG1tNQotCXBhZGR3CW1tNSxtbTIKLQlwbXVsaHcJbW01LFtHT1RPRkYoZWJ4LFBXX0YxODQ3KV0JOyBtbTU9ejUKLQlwbXVsaHcJbW0wLFtHT1RPRkYoZWJ4LFBXX01GMTYxMyldCi0JcG11bGh3CW1tMixbR09UT0ZGKGVieCxQV19GMTA4MildCi0JcHN1YncJbW0wLG1tMQotCXBzdWJ3CW1tMixtbTUJCQk7IG1tMj10bXAxMAotCXBhZGR3CW1tMCxtbTUJCQk7IG1tMD10bXAxMgorICAgICAgICBtb3ZxICAgIG1tMCxtbTUKKyAgICAgICAgcGFkZHcgICBtbTUsbW0yCisgICAgICAgIHBtdWxodyAgbW01LFtHT1RPRkYoZWJ4LFBXX0YxODQ3KV0gICAgICA7IG1tNT16NQorICAgICAgICBwbXVsaHcgIG1tMCxbR09UT0ZGKGVieCxQV19NRjE2MTMpXQorICAgICAgICBwbXVsaHcgIG1tMixbR09UT0ZGKGVieCxQV19GMTA4MildCisgICAgICAgIHBzdWJ3ICAgbW0wLG1tMQorICAgICAgICBwc3VidyAgIG1tMixtbTUgICAgICAgICAgICAgICAgIDsgbW0yPXRtcDEwCisgICAgICAgIHBhZGR3ICAgbW0wLG1tNSAgICAgICAgICAgICAgICAgOyBtbTA9dG1wMTIKIAotCTsgLS0gRmluYWwgb3V0cHV0IHN0YWdlCisgICAgICAgIDsgLS0gRmluYWwgb3V0cHV0IHN0YWdlCiAKLQlwc3VidwltbTAsbW0zCQkJOyBtbTA9dG1wNgotCW1vdnEJbW0xLG1tNgotCW1vdnEJbW01LG1tNwotCXBhZGR3CW1tNixtbTMJCQk7IG1tNj1kYXRhMD0oMDAgMTAgMjAgMzApCi0JcGFkZHcJbW03LG1tMAkJCTsgbW03PWRhdGExPSgwMSAxMSAyMSAzMSkKLQlwc3JhdwltbTYsKFBBU1MxX0JJVFMrMykJOyBkZXNjYWxlCi0JcHNyYXcJbW03LChQQVNTMV9CSVRTKzMpCTsgZGVzY2FsZQotCXBzdWJ3CW1tMSxtbTMJCQk7IG1tMT1kYXRhNz0oMDcgMTcgMjcgMzcpCi0JcHN1YncJbW01LG1tMAkJCTsgbW01PWRhdGE2PSgwNiAxNiAyNiAzNikKLQlwc3JhdwltbTEsKFBBU1MxX0JJVFMrMykJOyBkZXNjYWxlCi0JcHNyYXcJbW01LChQQVNTMV9CSVRTKzMpCTsgZGVzY2FsZQotCXBzdWJ3CW1tNCxtbTAJCQk7IG1tND10bXA1CisgICAgICAgIHBzdWJ3ICAgbW0wLG1tMyAgICAgICAgICAgICAgICAgOyBtbTA9dG1wNgorICAgICAgICBtb3ZxICAgIG1tMSxtbTYKKyAgICAgICAgbW92cSAgICBtbTUsbW03CisgICAgICAgIHBhZGR3ICAgbW02LG1tMyAgICAgICAgICAgICAgICAgOyBtbTY9ZGF0YTA9KDAwIDEwIDIwIDMwKQorICAgICAgICBwYWRkdyAgIG1tNyxtbTAgICAgICAgICAgICAgICAgIDsgbW03PWRhdGExPSgwMSAxMSAyMSAzMSkKKyAgICAgICAgcHNyYXcgICBtbTYsKFBBU1MxX0JJVFMrMykgICAgICA7IGRlc2NhbGUKKyAgICAgICAgcHNyYXcgICBtbTcsKFBBU1MxX0JJVFMrMykgICAgICA7IGRlc2NhbGUKKyAgICAgICAgcHN1YncgICBtbTEsbW0zICAgICAgICAgICAgICAgICA7IG1tMT1kYXRhNz0oMDcgMTcgMjcgMzcpCisgICAgICAgIHBzdWJ3ICAgbW01LG1tMCAgICAgICAgICAgICAgICAgOyBtbTU9ZGF0YTY9KDA2IDE2IDI2IDM2KQorICAgICAgICBwc3JhdyAgIG1tMSwoUEFTUzFfQklUUyszKSAgICAgIDsgZGVzY2FsZQorICAgICAgICBwc3JhdyAgIG1tNSwoUEFTUzFfQklUUyszKSAgICAgIDsgZGVzY2FsZQorICAgICAgICBwc3VidyAgIG1tNCxtbTAgICAgICAgICAgICAgICAgIDsgbW00PXRtcDUKIAotCXBhY2tzc3diICBtbTYsbW01CQk7IG1tNj0oMDAgMTAgMjAgMzAgMDYgMTYgMjYgMzYpCi0JcGFja3Nzd2IgIG1tNyxtbTEJCTsgbW03PSgwMSAxMSAyMSAzMSAwNyAxNyAyNyAzNykKKyAgICAgICAgcGFja3Nzd2IgIG1tNixtbTUgICAgICAgICAgICAgICA7IG1tNj0oMDAgMTAgMjAgMzAgMDYgMTYgMjYgMzYpCisgICAgICAgIHBhY2tzc3diICBtbTcsbW0xICAgICAgICAgICAgICAgOyBtbTc9KDAxIDExIDIxIDMxIDA3IDE3IDI3IDM3KQogCi0JbW92cQltbTMsIE1NV09SRCBbd2soMCldCTsgbW0zPXRtcDIKLQltb3ZxCW1tMCwgTU1XT1JEIFt3aygxKV0JOyBtbTA9dG1wMworICAgICAgICBtb3ZxICAgIG1tMywgTU1XT1JEIFt3aygwKV0gICAgIDsgbW0zPXRtcDIKKyAgICAgICAgbW92cSAgICBtbTAsIE1NV09SRCBbd2soMSldICAgICA7IG1tMD10bXAzCiAKLQlwYWRkdwltbTIsbW00CQkJOyBtbTI9dG1wNAotCW1vdnEJbW01LG1tMwotCW1vdnEJbW0xLG1tMAotCXBhZGR3CW1tMyxtbTQJCQk7IG1tMz1kYXRhMj0oMDIgMTIgMjIgMzIpCi0JcGFkZHcJbW0wLG1tMgkJCTsgbW0wPWRhdGE0PSgwNCAxNCAyNCAzNCkKLQlwc3JhdwltbTMsKFBBU1MxX0JJVFMrMykJOyBkZXNjYWxlCi0JcHNyYXcJbW0wLChQQVNTMV9CSVRTKzMpCTsgZGVzY2FsZQotCXBzdWJ3CW1tNSxtbTQJCQk7IG1tNT1kYXRhNT0oMDUgMTUgMjUgMzUpCi0JcHN1YncJbW0xLG1tMgkJCTsgbW0xPWRhdGEzPSgwMyAxMyAyMyAzMykKLQlwc3JhdwltbTUsKFBBU1MxX0JJVFMrMykJOyBkZXNjYWxlCi0JcHNyYXcJbW0xLChQQVNTMV9CSVRTKzMpCTsgZGVzY2FsZQorICAgICAgICBwYWRkdyAgIG1tMixtbTQgICAgICAgICAgICAgICAgIDsgbW0yPXRtcDQKKyAgICAgICAgbW92cSAgICBtbTUsbW0zCisgICAgICAgIG1vdnEgICAgbW0xLG1tMAorICAgICAgICBwYWRkdyAgIG1tMyxtbTQgICAgICAgICAgICAgICAgIDsgbW0zPWRhdGEyPSgwMiAxMiAyMiAzMikKKyAgICAgICAgcGFkZHcgICBtbTAsbW0yICAgICAgICAgICAgICAgICA7IG1tMD1kYXRhND0oMDQgMTQgMjQgMzQpCisgICAgICAgIHBzcmF3ICAgbW0zLChQQVNTMV9CSVRTKzMpICAgICAgOyBkZXNjYWxlCisgICAgICAgIHBzcmF3ICAgbW0wLChQQVNTMV9CSVRTKzMpICAgICAgOyBkZXNjYWxlCisgICAgICAgIHBzdWJ3ICAgbW01LG1tNCAgICAgICAgICAgICAgICAgOyBtbTU9ZGF0YTU9KDA1IDE1IDI1IDM1KQorICAgICAgICBwc3VidyAgIG1tMSxtbTIgICAgICAgICAgICAgICAgIDsgbW0xPWRhdGEzPSgwMyAxMyAyMyAzMykKKyAgICAgICAgcHNyYXcgICBtbTUsKFBBU1MxX0JJVFMrMykgICAgICA7IGRlc2NhbGUKKyAgICAgICAgcHNyYXcgICBtbTEsKFBBU1MxX0JJVFMrMykgICAgICA7IGRlc2NhbGUKIAotCW1vdnEgICAgICBtbTQsW0dPVE9GRihlYngsUEJfQ0VOVEVSSlNBTVApXQk7IG1tND1bUEJfQ0VOVEVSSlNBTVBdCisgICAgICAgIG1vdnEgICAgICBtbTQsW0dPVE9GRihlYngsUEJfQ0VOVEVSSlNBTVApXSAgICAgIDsgbW00PVtQQl9DRU5URVJKU0FNUF0KIAotCXBhY2tzc3diICBtbTMsbW0wCQk7IG1tMz0oMDIgMTIgMjIgMzIgMDQgMTQgMjQgMzQpCi0JcGFja3Nzd2IgIG1tMSxtbTUJCTsgbW0xPSgwMyAxMyAyMyAzMyAwNSAxNSAyNSAzNSkKKyAgICAgICAgcGFja3Nzd2IgIG1tMyxtbTAgICAgICAgICAgICAgICA7IG1tMz0oMDIgMTIgMjIgMzIgMDQgMTQgMjQgMzQpCisgICAgICAgIHBhY2tzc3diICBtbTEsbW01ICAgICAgICAgICAgICAgOyBtbTE9KDAzIDEzIDIzIDMzIDA1IDE1IDI1IDM1KQogCi0JcGFkZGIgICAgIG1tNixtbTQKLQlwYWRkYiAgICAgbW03LG1tNAotCXBhZGRiICAgICBtbTMsbW00Ci0JcGFkZGIgICAgIG1tMSxtbTQKKyAgICAgICAgcGFkZGIgICAgIG1tNixtbTQKKyAgICAgICAgcGFkZGIgICAgIG1tNyxtbTQKKyAgICAgICAgcGFkZGIgICAgIG1tMyxtbTQKKyAgICAgICAgcGFkZGIgICAgIG1tMSxtbTQKIAotCW1vdnEgICAgICBtbTIsbW02CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKLQlwdW5wY2tsYncgbW02LG1tNwkJOyBtbTY9KDAwIDAxIDEwIDExIDIwIDIxIDMwIDMxKQotCXB1bnBja2hidyBtbTIsbW03CQk7IG1tMj0oMDYgMDcgMTYgMTcgMjYgMjcgMzYgMzcpCi0JbW92cSAgICAgIG1tMCxtbTMJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQotCXB1bnBja2xidyBtbTMsbW0xCQk7IG1tMz0oMDIgMDMgMTIgMTMgMjIgMjMgMzIgMzMpCi0JcHVucGNraGJ3IG1tMCxtbTEJCTsgbW0wPSgwNCAwNSAxNCAxNSAyNCAyNSAzNCAzNSkKKyAgICAgICAgbW92cSAgICAgIG1tMixtbTYgICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICAgICAgcHVucGNrbGJ3IG1tNixtbTcgICAgICAgICAgICAgICA7IG1tNj0oMDAgMDEgMTAgMTEgMjAgMjEgMzAgMzEpCisgICAgICAgIHB1bnBja2hidyBtbTIsbW03ICAgICAgICAgICAgICAgOyBtbTI9KDA2IDA3IDE2IDE3IDI2IDI3IDM2IDM3KQorICAgICAgICBtb3ZxICAgICAgbW0wLG1tMyAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgICAgICBwdW5wY2tsYncgbW0zLG1tMSAgICAgICAgICAgICAgIDsgbW0zPSgwMiAwMyAxMiAxMyAyMiAyMyAzMiAzMykKKyAgICAgICAgcHVucGNraGJ3IG1tMCxtbTEgICAgICAgICAgICAgICA7IG1tMD0oMDQgMDUgMTQgMTUgMjQgMjUgMzQgMzUpCiAKLQltb3ZxICAgICAgbW01LG1tNgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCi0JcHVucGNrbHdkIG1tNixtbTMJCTsgbW02PSgwMCAwMSAwMiAwMyAxMCAxMSAxMiAxMykKLQlwdW5wY2tod2QgbW01LG1tMwkJOyBtbTU9KDIwIDIxIDIyIDIzIDMwIDMxIDMyIDMzKQotCW1vdnEgICAgICBtbTQsbW0wCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKLQlwdW5wY2tsd2QgbW0wLG1tMgkJOyBtbTA9KDA0IDA1IDA2IDA3IDE0IDE1IDE2IDE3KQotCXB1bnBja2h3ZCBtbTQsbW0yCQk7IG1tND0oMjQgMjUgMjYgMjcgMzQgMzUgMzYgMzcpCisgICAgICAgIG1vdnEgICAgICBtbTUsbW02ICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgICAgIHB1bnBja2x3ZCBtbTYsbW0zICAgICAgICAgICAgICAgOyBtbTY9KDAwIDAxIDAyIDAzIDEwIDExIDEyIDEzKQorICAgICAgICBwdW5wY2tod2QgbW01LG1tMyAgICAgICAgICAgICAgIDsgbW01PSgyMCAyMSAyMiAyMyAzMCAzMSAzMiAzMykKKyAgICAgICAgbW92cSAgICAgIG1tNCxtbTAgICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICAgICAgcHVucGNrbHdkIG1tMCxtbTIgICAgICAgICAgICAgICA7IG1tMD0oMDQgMDUgMDYgMDcgMTQgMTUgMTYgMTcpCisgICAgICAgIHB1bnBja2h3ZCBtbTQsbW0yICAgICAgICAgICAgICAgOyBtbTQ9KDI0IDI1IDI2IDI3IDM0IDM1IDM2IDM3KQogCi0JbW92cSAgICAgIG1tNyxtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQotCXB1bnBja2xkcSBtbTYsbW0wCQk7IG1tNj0oMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcpCi0JcHVucGNraGRxIG1tNyxtbTAJCTsgbW03PSgxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNykKLQltb3ZxICAgICAgbW0xLG1tNQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCi0JcHVucGNrbGRxIG1tNSxtbTQJCTsgbW01PSgyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNykKLQlwdW5wY2toZHEgbW0xLG1tNAkJOyBtbTE9KDMwIDMxIDMyIDMzIDM0IDM1IDM2IDM3KQorICAgICAgICBtb3ZxICAgICAgbW03LG1tNiAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorICAgICAgICBwdW5wY2tsZHEgbW02LG1tMCAgICAgICAgICAgICAgIDsgbW02PSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNykKKyAgICAgICAgcHVucGNraGRxIG1tNyxtbTAgICAgICAgICAgICAgICA7IG1tNz0oMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcpCisgICAgICAgIG1vdnEgICAgICBtbTEsbW01ICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisgICAgICAgIHB1bnBja2xkcSBtbTUsbW00ICAgICAgICAgICAgICAgOyBtbTU9KDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3KQorICAgICAgICBwdW5wY2toZHEgbW0xLG1tNCAgICAgICAgICAgICAgIDsgbW0xPSgzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNykKIAotCXB1c2hwaWMJZWJ4CQkJOyBzYXZlIEdPVCBhZGRyZXNzCisgICAgICAgIHB1c2hwaWMgZWJ4ICAgICAgICAgICAgICAgICAgICAgOyBzYXZlIEdPVCBhZGRyZXNzCiAKLQltb3YJZWR4LCBKU0FNUFJPVyBbZWRpKzAqU0laRU9GX0pTQU1QUk9XXQotCW1vdgllYngsIEpTQU1QUk9XIFtlZGkrMSpTSVpFT0ZfSlNBTVBST1ddCi0JbW92cQlNTVdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdLCBtbTYKLQltb3ZxCU1NV09SRCBbZWJ4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIG1tNwotCW1vdgllZHgsIEpTQU1QUk9XIFtlZGkrMipTSVpFT0ZfSlNBTVBST1ddCi0JbW92CWVieCwgSlNBTVBST1cgW2VkaSszKlNJWkVPRl9KU0FNUFJPV10KLQltb3ZxCU1NV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIG1tNQotCW1vdnEJTU1XT1JEIFtlYngrZWF4KlNJWkVPRl9KU0FNUExFXSwgbW0xCisgICAgICAgIG1vdiAgICAgZWR4LCBKU0FNUFJPVyBbZWRpKzAqU0laRU9GX0pTQU1QUk9XXQorICAgICAgICBtb3YgICAgIGVieCwgSlNBTVBST1cgW2VkaSsxKlNJWkVPRl9KU0FNUFJPV10KKyAgICAgICAgbW92cSAgICBNTVdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdLCBtbTYKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW2VieCtlYXgqU0laRU9GX0pTQU1QTEVdLCBtbTcKKyAgICAgICAgbW92ICAgICBlZHgsIEpTQU1QUk9XIFtlZGkrMipTSVpFT0ZfSlNBTVBST1ddCisgICAgICAgIG1vdiAgICAgZWJ4LCBKU0FNUFJPVyBbZWRpKzMqU0laRU9GX0pTQU1QUk9XXQorICAgICAgICBtb3ZxICAgIE1NV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIG1tNQorICAgICAgICBtb3ZxICAgIE1NV09SRCBbZWJ4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIG1tMQogCi0JcG9wcGljCWVieAkJCTsgcmVzdG9yZSBHT1QgYWRkcmVzcworICAgICAgICBwb3BwaWMgIGVieCAgICAgICAgICAgICAgICAgICAgIDsgcmVzdG9yZSBHT1QgYWRkcmVzcwogCi0JYWRkCWVzaSwgYnl0ZSA0KlNJWkVPRl9KQ09FRgk7IHdzcHRyCi0JYWRkCWVkaSwgYnl0ZSA0KlNJWkVPRl9KU0FNUFJPVwotCWRlYwllY3gJCQkJOyBjdHIKLQlqbnoJbmVhciAucm93bG9vcAorICAgICAgICBhZGQgICAgIGVzaSwgYnl0ZSA0KlNJWkVPRl9KQ09FRiAgICAgICAgOyB3c3B0cgorICAgICAgICBhZGQgICAgIGVkaSwgYnl0ZSA0KlNJWkVPRl9KU0FNUFJPVworICAgICAgICBkZWMgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBjdHIKKyAgICAgICAgam56ICAgICBuZWFyIC5yb3dsb29wCiAKLQllbW1zCQk7IGVtcHR5IE1NWCBzdGF0ZQorICAgICAgICBlbW1zICAgICAgICAgICAgOyBlbXB0eSBNTVggc3RhdGUKIAotCXBvcAllZGkKLQlwb3AJZXNpCi07CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi07CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi0JcG9wCWVieAotCW1vdgllc3AsZWJwCQk7IGVzcCA8LSBhbGlnbmVkIGVicAotCXBvcAllc3AJCTsgZXNwIDwtIG9yaWdpbmFsIGVicAotCXBvcAllYnAKLQlyZXQKKyAgICAgICAgcG9wICAgICBlZGkKKyAgICAgICAgcG9wICAgICBlc2kKKzsgICAgICAgcG9wICAgICBlZHggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICAgICAgcG9wICAgICBlY3ggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICAgICAgcG9wICAgICBlYngKKyAgICAgICAgbW92ICAgICBlc3AsZWJwICAgICAgICAgOyBlc3AgPC0gYWxpZ25lZCBlYnAKKyAgICAgICAgcG9wICAgICBlc3AgICAgICAgICAgICAgOyBlc3AgPC0gb3JpZ2luYWwgZWJwCisgICAgICAgIHBvcCAgICAgZWJwCisgICAgICAgIHJldAogCiA7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQogOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgotCWFsaWduCTE2CisgICAgICAgIGFsaWduICAgMTYKZGlmZiAtLWdpdCBhL3NpbWQvamltbXhpbnQuYXNtIGIvc2ltZC9qaW1teGludC5hc20KaW5kZXggN2I1MmZhZS4uNzViOWVhOCAxMDA2NDQKLS0tIGEvc2ltZC9qaW1teGludC5hc20KKysrIGIvc2ltZC9qaW1teGludC5hc20KQEAgLTI2LDY3ICsyNiw2NyBAQAogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSVkZWZpbmUgQ09OU1RfQklUUwkxMwotJWRlZmluZSBQQVNTMV9CSVRTCTIKKyVkZWZpbmUgQ09OU1RfQklUUyAgICAgIDEzCislZGVmaW5lIFBBU1MxX0JJVFMgICAgICAyCiAKLSVkZWZpbmUgREVTQ0FMRV9QMQkoQ09OU1RfQklUUy1QQVNTMV9CSVRTKQotJWRlZmluZSBERVNDQUxFX1AyCShDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyVkZWZpbmUgREVTQ0FMRV9QMSAgICAgIChDT05TVF9CSVRTLVBBU1MxX0JJVFMpCislZGVmaW5lIERFU0NBTEVfUDIgICAgICAoQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCiAKICVpZiBDT05TVF9CSVRTID09IDEzCi1GXzBfMjk4CWVxdQkgMjQ0NgkJOyBGSVgoMC4yOTg2MzEzMzYpCi1GXzBfMzkwCWVxdQkgMzE5NgkJOyBGSVgoMC4zOTAxODA2NDQpCi1GXzBfNTQxCWVxdQkgNDQzMwkJOyBGSVgoMC41NDExOTYxMDApCi1GXzBfNzY1CWVxdQkgNjI3MAkJOyBGSVgoMC43NjUzNjY4NjUpCi1GXzBfODk5CWVxdQkgNzM3MwkJOyBGSVgoMC44OTk5NzYyMjMpCi1GXzFfMTc1CWVxdQkgOTYzMwkJOyBGSVgoMS4xNzU4NzU2MDIpCi1GXzFfNTAxCWVxdQkxMjI5OQkJOyBGSVgoMS41MDEzMjExMTApCi1GXzFfODQ3CWVxdQkxNTEzNwkJOyBGSVgoMS44NDc3NTkwNjUpCi1GXzFfOTYxCWVxdQkxNjA2OQkJOyBGSVgoMS45NjE1NzA1NjApCi1GXzJfMDUzCWVxdQkxNjgxOQkJOyBGSVgoMi4wNTMxMTk4NjkpCi1GXzJfNTYyCWVxdQkyMDk5NQkJOyBGSVgoMi41NjI5MTU0NDcpCi1GXzNfMDcyCWVxdQkyNTE3MgkJOyBGSVgoMy4wNzI3MTEwMjYpCitGXzBfMjk4IGVxdSAgICAgIDI0NDYgICAgICAgICAgIDsgRklYKDAuMjk4NjMxMzM2KQorRl8wXzM5MCBlcXUgICAgICAzMTk2ICAgICAgICAgICA7IEZJWCgwLjM5MDE4MDY0NCkKK0ZfMF81NDEgZXF1ICAgICAgNDQzMyAgICAgICAgICAgOyBGSVgoMC41NDExOTYxMDApCitGXzBfNzY1IGVxdSAgICAgIDYyNzAgICAgICAgICAgIDsgRklYKDAuNzY1MzY2ODY1KQorRl8wXzg5OSBlcXUgICAgICA3MzczICAgICAgICAgICA7IEZJWCgwLjg5OTk3NjIyMykKK0ZfMV8xNzUgZXF1ICAgICAgOTYzMyAgICAgICAgICAgOyBGSVgoMS4xNzU4NzU2MDIpCitGXzFfNTAxIGVxdSAgICAgMTIyOTkgICAgICAgICAgIDsgRklYKDEuNTAxMzIxMTEwKQorRl8xXzg0NyBlcXUgICAgIDE1MTM3ICAgICAgICAgICA7IEZJWCgxLjg0Nzc1OTA2NSkKK0ZfMV85NjEgZXF1ICAgICAxNjA2OSAgICAgICAgICAgOyBGSVgoMS45NjE1NzA1NjApCitGXzJfMDUzIGVxdSAgICAgMTY4MTkgICAgICAgICAgIDsgRklYKDIuMDUzMTE5ODY5KQorRl8yXzU2MiBlcXUgICAgIDIwOTk1ICAgICAgICAgICA7IEZJWCgyLjU2MjkxNTQ0NykKK0ZfM18wNzIgZXF1ICAgICAyNTE3MiAgICAgICAgICAgOyBGSVgoMy4wNzI3MTEwMjYpCiAlZWxzZQogOyBOQVNNIGNhbm5vdCBkbyBjb21waWxlLXRpbWUgYXJpdGhtZXRpYyBvbiBmbG9hdGluZy1wb2ludCBjb25zdGFudHMuCiAlZGVmaW5lIERFU0NBTEUoeCxuKSAgKCgoeCkrKDE8PCgobiktMSkpKT4+KG4pKQotRl8wXzI5OAllcXUJREVTQ0FMRSggMzIwNjUyOTU1LDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuMjk4NjMxMzM2KQotRl8wXzM5MAllcXUJREVTQ0FMRSggNDE4OTUzMjc2LDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuMzkwMTgwNjQ0KQotRl8wXzU0MQllcXUJREVTQ0FMRSggNTgxMTA0ODg3LDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuNTQxMTk2MTAwKQotRl8wXzc2NQllcXUJREVTQ0FMRSggODIxODA2NDEzLDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuNzY1MzY2ODY1KQotRl8wXzg5OQllcXUJREVTQ0FMRSggOTY2MzQyMTExLDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuODk5OTc2MjIzKQotRl8xXzE3NQllcXUJREVTQ0FMRSgxMjYyNTg2ODEzLDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuMTc1ODc1NjAyKQotRl8xXzUwMQllcXUJREVTQ0FMRSgxNjEyMDMxMjY3LDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuNTAxMzIxMTEwKQotRl8xXzg0NwllcXUJREVTQ0FMRSgxOTg0MDE2MTg4LDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuODQ3NzU5MDY1KQotRl8xXzk2MQllcXUJREVTQ0FMRSgyMTA2MjIwMzUwLDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuOTYxNTcwNTYwKQotRl8yXzA1MwllcXUJREVTQ0FMRSgyMjA0NTIwNjczLDMwLUNPTlNUX0JJVFMpCTsgRklYKDIuMDUzMTE5ODY5KQotRl8yXzU2MgllcXUJREVTQ0FMRSgyNzUxOTA5NTA2LDMwLUNPTlNUX0JJVFMpCTsgRklYKDIuNTYyOTE1NDQ3KQotRl8zXzA3MgllcXUJREVTQ0FMRSgzMjk5Mjk4MzQxLDMwLUNPTlNUX0JJVFMpCTsgRklYKDMuMDcyNzExMDI2KQorRl8wXzI5OCBlcXUgICAgIERFU0NBTEUoIDMyMDY1Mjk1NSwzMC1DT05TVF9CSVRTKSAgICAgICA7IEZJWCgwLjI5ODYzMTMzNikKK0ZfMF8zOTAgZXF1ICAgICBERVNDQUxFKCA0MTg5NTMyNzYsMzAtQ09OU1RfQklUUykgICAgICAgOyBGSVgoMC4zOTAxODA2NDQpCitGXzBfNTQxIGVxdSAgICAgREVTQ0FMRSggNTgxMTA0ODg3LDMwLUNPTlNUX0JJVFMpICAgICAgIDsgRklYKDAuNTQxMTk2MTAwKQorRl8wXzc2NSBlcXUgICAgIERFU0NBTEUoIDgyMTgwNjQxMywzMC1DT05TVF9CSVRTKSAgICAgICA7IEZJWCgwLjc2NTM2Njg2NSkKK0ZfMF84OTkgZXF1ICAgICBERVNDQUxFKCA5NjYzNDIxMTEsMzAtQ09OU1RfQklUUykgICAgICAgOyBGSVgoMC44OTk5NzYyMjMpCitGXzFfMTc1IGVxdSAgICAgREVTQ0FMRSgxMjYyNTg2ODEzLDMwLUNPTlNUX0JJVFMpICAgICAgIDsgRklYKDEuMTc1ODc1NjAyKQorRl8xXzUwMSBlcXUgICAgIERFU0NBTEUoMTYxMjAzMTI2NywzMC1DT05TVF9CSVRTKSAgICAgICA7IEZJWCgxLjUwMTMyMTExMCkKK0ZfMV84NDcgZXF1ICAgICBERVNDQUxFKDE5ODQwMTYxODgsMzAtQ09OU1RfQklUUykgICAgICAgOyBGSVgoMS44NDc3NTkwNjUpCitGXzFfOTYxIGVxdSAgICAgREVTQ0FMRSgyMTA2MjIwMzUwLDMwLUNPTlNUX0JJVFMpICAgICAgIDsgRklYKDEuOTYxNTcwNTYwKQorRl8yXzA1MyBlcXUgICAgIERFU0NBTEUoMjIwNDUyMDY3MywzMC1DT05TVF9CSVRTKSAgICAgICA7IEZJWCgyLjA1MzExOTg2OSkKK0ZfMl81NjIgZXF1ICAgICBERVNDQUxFKDI3NTE5MDk1MDYsMzAtQ09OU1RfQklUUykgICAgICAgOyBGSVgoMi41NjI5MTU0NDcpCitGXzNfMDcyIGVxdSAgICAgREVTQ0FMRSgzMjk5Mjk4MzQxLDMwLUNPTlNUX0JJVFMpICAgICAgIDsgRklYKDMuMDcyNzExMDI2KQogJWVuZGlmCiAKIDsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlTRUNUSU9OCVNFR19DT05TVAorICAgICAgICBTRUNUSU9OIFNFR19DT05TVAogCi0JYWxpZ256CTE2Ci0JZ2xvYmFsCUVYVE4oamNvbnN0X2lkY3RfaXNsb3dfbW14KQorICAgICAgICBhbGlnbnogIDE2CisgICAgICAgIGdsb2JhbCAgRVhUTihqY29uc3RfaWRjdF9pc2xvd19tbXgpCiAKIEVYVE4oamNvbnN0X2lkY3RfaXNsb3dfbW14KToKIAotUFdfRjEzMF9GMDU0CXRpbWVzIDIgZHcgIChGXzBfNTQxK0ZfMF83NjUpLCBGXzBfNTQxCi1QV19GMDU0X01GMTMwCXRpbWVzIDIgZHcgIEZfMF81NDEsIChGXzBfNTQxLUZfMV84NDcpCi1QV19NRjA3OF9GMTE3CXRpbWVzIDIgZHcgIChGXzFfMTc1LUZfMV85NjEpLCBGXzFfMTc1Ci1QV19GMTE3X0YwNzgJdGltZXMgMiBkdyAgRl8xXzE3NSwgKEZfMV8xNzUtRl8wXzM5MCkKLVBXX01GMDYwX01GMDg5CXRpbWVzIDIgZHcgIChGXzBfMjk4LUZfMF84OTkpLC1GXzBfODk5Ci1QV19NRjA4OV9GMDYwCXRpbWVzIDIgZHcgLUZfMF84OTksIChGXzFfNTAxLUZfMF84OTkpCi1QV19NRjA1MF9NRjI1Ngl0aW1lcyAyIGR3ICAoRl8yXzA1My1GXzJfNTYyKSwtRl8yXzU2MgotUFdfTUYyNTZfRjA1MAl0aW1lcyAyIGR3IC1GXzJfNTYyLCAoRl8zXzA3Mi1GXzJfNTYyKQotUERfREVTQ0FMRV9QMQl0aW1lcyAyIGRkICAxIDw8IChERVNDQUxFX1AxLTEpCi1QRF9ERVNDQUxFX1AyCXRpbWVzIDIgZGQgIDEgPDwgKERFU0NBTEVfUDItMSkKLVBCX0NFTlRFUkpTQU1QCXRpbWVzIDggZGIgIENFTlRFUkpTQU1QTEUKK1BXX0YxMzBfRjA1NCAgICB0aW1lcyAyIGR3ICAoRl8wXzU0MStGXzBfNzY1KSwgRl8wXzU0MQorUFdfRjA1NF9NRjEzMCAgIHRpbWVzIDIgZHcgIEZfMF81NDEsIChGXzBfNTQxLUZfMV84NDcpCitQV19NRjA3OF9GMTE3ICAgdGltZXMgMiBkdyAgKEZfMV8xNzUtRl8xXzk2MSksIEZfMV8xNzUKK1BXX0YxMTdfRjA3OCAgICB0aW1lcyAyIGR3ICBGXzFfMTc1LCAoRl8xXzE3NS1GXzBfMzkwKQorUFdfTUYwNjBfTUYwODkgIHRpbWVzIDIgZHcgIChGXzBfMjk4LUZfMF84OTkpLC1GXzBfODk5CitQV19NRjA4OV9GMDYwICAgdGltZXMgMiBkdyAtRl8wXzg5OSwgKEZfMV81MDEtRl8wXzg5OSkKK1BXX01GMDUwX01GMjU2ICB0aW1lcyAyIGR3ICAoRl8yXzA1My1GXzJfNTYyKSwtRl8yXzU2MgorUFdfTUYyNTZfRjA1MCAgIHRpbWVzIDIgZHcgLUZfMl81NjIsIChGXzNfMDcyLUZfMl81NjIpCitQRF9ERVNDQUxFX1AxICAgdGltZXMgMiBkZCAgMSA8PCAoREVTQ0FMRV9QMS0xKQorUERfREVTQ0FMRV9QMiAgIHRpbWVzIDIgZGQgIDEgPDwgKERFU0NBTEVfUDItMSkKK1BCX0NFTlRFUkpTQU1QICB0aW1lcyA4IGRiICBDRU5URVJKU0FNUExFCiAKLQlhbGlnbnoJMTYKKyAgICAgICAgYWxpZ256ICAxNgogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JU0VDVElPTglTRUdfVEVYVAotCUJJVFMJMzIKKyAgICAgICAgU0VDVElPTiBTRUdfVEVYVAorICAgICAgICBCSVRTICAgIDMyCiA7CiA7IFBlcmZvcm0gZGVxdWFudGl6YXRpb24gYW5kIGludmVyc2UgRENUIG9uIG9uZSBibG9jayBvZiBjb2VmZmljaWVudHMuCiA7CkBAIC05NSw3NTggKzk1LDc1OCBAQAogOyAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpCiA7CiAKLSVkZWZpbmUgZGN0X3RhYmxlKGIpCShiKSs4CQkJOyBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0cgotJWRlZmluZSBjb2VmX2Jsb2NrKGIpCShiKSsxMgkJOyBKQ09FRlBUUiBjb2VmX2Jsb2NrCi0lZGVmaW5lIG91dHB1dF9idWYoYikJKGIpKzE2CQk7IEpTQU1QQVJSQVkgb3V0cHV0X2J1ZgotJWRlZmluZSBvdXRwdXRfY29sKGIpCShiKSsyMAkJOyBKRElNRU5TSU9OIG91dHB1dF9jb2wKKyVkZWZpbmUgZGN0X3RhYmxlKGIpICAgIChiKSs4ICAgICAgICAgICA7IGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyCislZGVmaW5lIGNvZWZfYmxvY2soYikgICAoYikrMTIgICAgICAgICAgOyBKQ09FRlBUUiBjb2VmX2Jsb2NrCislZGVmaW5lIG91dHB1dF9idWYoYikgICAoYikrMTYgICAgICAgICAgOyBKU0FNUEFSUkFZIG91dHB1dF9idWYKKyVkZWZpbmUgb3V0cHV0X2NvbChiKSAgIChiKSsyMCAgICAgICAgICA7IEpESU1FTlNJT04gb3V0cHV0X2NvbAogCi0lZGVmaW5lIG9yaWdpbmFsX2VicAllYnArMAotJWRlZmluZSB3ayhpKQkJZWJwLShXS19OVU0tKGkpKSpTSVpFT0ZfTU1XT1JECTsgbW13b3JkIHdrW1dLX05VTV0KLSVkZWZpbmUgV0tfTlVNCQkxMgotJWRlZmluZSB3b3Jrc3BhY2UJd2soMCktRENUU0laRTIqU0laRU9GX0pDT0VGCi0JCQkJCTsgSkNPRUYgd29ya3NwYWNlW0RDVFNJWkUyXQorJWRlZmluZSBvcmlnaW5hbF9lYnAgICAgZWJwKzAKKyVkZWZpbmUgd2soaSkgICAgICAgICAgIGVicC0oV0tfTlVNLShpKSkqU0laRU9GX01NV09SRCAgOyBtbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0gICAgICAgICAgMTIKKyVkZWZpbmUgd29ya3NwYWNlICAgICAgIHdrKDApLURDVFNJWkUyKlNJWkVPRl9KQ09FRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgSkNPRUYgd29ya3NwYWNlW0RDVFNJWkUyXQogCi0JYWxpZ24JMTYKLQlnbG9iYWwJRVhUTihqc2ltZF9pZGN0X2lzbG93X21teCkKKyAgICAgICAgYWxpZ24gICAxNgorICAgICAgICBnbG9iYWwgIEVYVE4oanNpbWRfaWRjdF9pc2xvd19tbXgpCiAKIEVYVE4oanNpbWRfaWRjdF9pc2xvd19tbXgpOgotCXB1c2gJZWJwCi0JbW92CWVheCxlc3AJCQkJOyBlYXggPSBvcmlnaW5hbCBlYnAKLQlzdWIJZXNwLCBieXRlIDQKLQlhbmQJZXNwLCBieXRlICgtU0laRU9GX01NV09SRCkJOyBhbGlnbiB0byA2NCBiaXRzCi0JbW92CVtlc3BdLGVheAotCW1vdgllYnAsZXNwCQkJCTsgZWJwID0gYWxpZ25lZCBlYnAKLQlsZWEJZXNwLCBbd29ya3NwYWNlXQotCXB1c2gJZWJ4Ci07CXB1c2gJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLQlwdXNoCWVzaQotCXB1c2gJZWRpCisgICAgICAgIHB1c2ggICAgZWJwCisgICAgICAgIG1vdiAgICAgZWF4LGVzcCAgICAgICAgICAgICAgICAgICAgICAgICA7IGVheCA9IG9yaWdpbmFsIGVicAorICAgICAgICBzdWIgICAgIGVzcCwgYnl0ZSA0CisgICAgICAgIGFuZCAgICAgZXNwLCBieXRlICgtU0laRU9GX01NV09SRCkgICAgICA7IGFsaWduIHRvIDY0IGJpdHMKKyAgICAgICAgbW92ICAgICBbZXNwXSxlYXgKKyAgICAgICAgbW92ICAgICBlYnAsZXNwICAgICAgICAgICAgICAgICAgICAgICAgIDsgZWJwID0gYWxpZ25lZCBlYnAKKyAgICAgICAgbGVhICAgICBlc3AsIFt3b3Jrc3BhY2VdCisgICAgICAgIHB1c2ggICAgZWJ4Cis7ICAgICAgIHB1c2ggICAgZWN4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgICAgIHB1c2ggICAgZWR4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgICAgIHB1c2ggICAgZXNpCisgICAgICAgIHB1c2ggICAgZWRpCiAKLQlnZXRfR09UCWVieAkJOyBnZXQgR09UIGFkZHJlc3MKKyAgICAgICAgZ2V0X0dPVCBlYnggICAgICAgICAgICAgOyBnZXQgR09UIGFkZHJlc3MKIAotCTsgLS0tLSBQYXNzIDE6IHByb2Nlc3MgY29sdW1ucyBmcm9tIGlucHV0LCBzdG9yZSBpbnRvIHdvcmsgYXJyYXkuCisgICAgICAgIDsgLS0tLSBQYXNzIDE6IHByb2Nlc3MgY29sdW1ucyBmcm9tIGlucHV0LCBzdG9yZSBpbnRvIHdvcmsgYXJyYXkuCiAKLTsJbW92CWVheCwgW29yaWdpbmFsX2VicF0KLQltb3YJZWR4LCBQT0lOVEVSIFtkY3RfdGFibGUoZWF4KV0JOyBxdWFudHB0cgotCW1vdgllc2ksIEpDT0VGUFRSIFtjb2VmX2Jsb2NrKGVheCldCQk7IGlucHRyCi0JbGVhCWVkaSwgW3dvcmtzcGFjZV0JCQk7IEpDT0VGICogd3NwdHIKLQltb3YJZWN4LCBEQ1RTSVpFLzQJCQkJOyBjdHIKLQlhbGlnbngJMTYsNworOyAgICAgICBtb3YgICAgIGVheCwgW29yaWdpbmFsX2VicF0KKyAgICAgICAgbW92ICAgICBlZHgsIFBPSU5URVIgW2RjdF90YWJsZShlYXgpXSAgICAgICAgICAgOyBxdWFudHB0cgorICAgICAgICBtb3YgICAgIGVzaSwgSkNPRUZQVFIgW2NvZWZfYmxvY2soZWF4KV0gICAgICAgICA7IGlucHRyCisgICAgICAgIGxlYSAgICAgZWRpLCBbd29ya3NwYWNlXSAgICAgICAgICAgICAgICAgICAgICAgIDsgSkNPRUYgKiB3c3B0cgorICAgICAgICBtb3YgICAgIGVjeCwgRENUU0laRS80ICAgICAgICAgICAgICAgICAgICAgICAgICA7IGN0cgorICAgICAgICBhbGlnbnggIDE2LDcKIC5jb2x1bW5sb29wOgogJWlmbmRlZiBOT19aRVJPX0NPTFVNTl9URVNUX0lTTE9XX01NWAotCW1vdgllYXgsIERXT1JEIFtEV0JMT0NLKDEsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQlvcgllYXgsIERXT1JEIFtEV0JMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQlqbnoJc2hvcnQgLmNvbHVtbkRDVAorICAgICAgICBtb3YgICAgIGVheCwgRFdPUkQgW0RXQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBvciAgICAgIGVheCwgRFdPUkQgW0RXQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBqbnogICAgIHNob3J0IC5jb2x1bW5EQ1QKIAotCW1vdnEJbW0wLCBNTVdPUkQgW01NQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQotCW1vdnEJbW0xLCBNTVdPUkQgW01NQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQotCXBvcgltbTAsIE1NV09SRCBbTU1CTE9DSygzLDAsZXNpLFNJWkVPRl9KQ09FRildCi0JcG9yCW1tMSwgTU1XT1JEIFtNTUJMT0NLKDQsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQlwb3IJbW0wLCBNTVdPUkQgW01NQkxPQ0soNSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQotCXBvcgltbTEsIE1NV09SRCBbTU1CTE9DSyg2LDAsZXNpLFNJWkVPRl9KQ09FRildCi0JcG9yCW1tMCwgTU1XT1JEIFtNTUJMT0NLKDcsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQlwb3IJbW0xLG1tMAotCXBhY2tzc3diIG1tMSxtbTEKLQltb3ZkCWVheCxtbTEKLQl0ZXN0CWVheCxlYXgKLQlqbnoJc2hvcnQgLmNvbHVtbkRDVAorICAgICAgICBtb3ZxICAgIG1tMCwgTU1XT1JEIFtNTUJMT0NLKDEsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgbW92cSAgICBtbTEsIE1NV09SRCBbTU1CTE9DSygyLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIHBvciAgICAgbW0wLCBNTVdPUkQgW01NQkxPQ0soMywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBwb3IgICAgIG1tMSwgTU1XT1JEIFtNTUJMT0NLKDQsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgcG9yICAgICBtbTAsIE1NV09SRCBbTU1CTE9DSyg1LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIHBvciAgICAgbW0xLCBNTVdPUkQgW01NQkxPQ0soNiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBwb3IgICAgIG1tMCwgTU1XT1JEIFtNTUJMT0NLKDcsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgcG9yICAgICBtbTEsbW0wCisgICAgICAgIHBhY2tzc3diIG1tMSxtbTEKKyAgICAgICAgbW92ZCAgICBlYXgsbW0xCisgICAgICAgIHRlc3QgICAgZWF4LGVheAorICAgICAgICBqbnogICAgIHNob3J0IC5jb2x1bW5EQ1QKIAotCTsgLS0gQUMgdGVybXMgYWxsIHplcm8KKyAgICAgICAgOyAtLSBBQyB0ZXJtcyBhbGwgemVybwogCi0JbW92cQltbTAsIE1NV09SRCBbTU1CTE9DSygwLDAsZXNpLFNJWkVPRl9KQ09FRildCi0JcG11bGx3CW1tMCwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisgICAgICAgIG1vdnEgICAgbW0wLCBNTVdPUkQgW01NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBwbXVsbHcgIG1tMCwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCiAKLQlwc2xsdwltbTAsUEFTUzFfQklUUworICAgICAgICBwc2xsdyAgIG1tMCxQQVNTMV9CSVRTCiAKLQltb3ZxICAgICAgbW0yLG1tMAkJOyBtbTA9aW4wPSgwMCAwMSAwMiAwMykKLQlwdW5wY2tsd2QgbW0wLG1tMAkJOyBtbTA9KDAwIDAwIDAxIDAxKQotCXB1bnBja2h3ZCBtbTIsbW0yCQk7IG1tMj0oMDIgMDIgMDMgMDMpCisgICAgICAgIG1vdnEgICAgICBtbTIsbW0wICAgICAgICAgICAgICAgOyBtbTA9aW4wPSgwMCAwMSAwMiAwMykKKyAgICAgICAgcHVucGNrbHdkIG1tMCxtbTAgICAgICAgICAgICAgICA7IG1tMD0oMDAgMDAgMDEgMDEpCisgICAgICAgIHB1bnBja2h3ZCBtbTIsbW0yICAgICAgICAgICAgICAgOyBtbTI9KDAyIDAyIDAzIDAzKQogCi0JbW92cSAgICAgIG1tMSxtbTAKLQlwdW5wY2tsZHEgbW0wLG1tMAkJOyBtbTA9KDAwIDAwIDAwIDAwKQotCXB1bnBja2hkcSBtbTEsbW0xCQk7IG1tMT0oMDEgMDEgMDEgMDEpCi0JbW92cSAgICAgIG1tMyxtbTIKLQlwdW5wY2tsZHEgbW0yLG1tMgkJOyBtbTI9KDAyIDAyIDAyIDAyKQotCXB1bnBja2hkcSBtbTMsbW0zCQk7IG1tMz0oMDMgMDMgMDMgMDMpCisgICAgICAgIG1vdnEgICAgICBtbTEsbW0wCisgICAgICAgIHB1bnBja2xkcSBtbTAsbW0wICAgICAgICAgICAgICAgOyBtbTA9KDAwIDAwIDAwIDAwKQorICAgICAgICBwdW5wY2toZHEgbW0xLG1tMSAgICAgICAgICAgICAgIDsgbW0xPSgwMSAwMSAwMSAwMSkKKyAgICAgICAgbW92cSAgICAgIG1tMyxtbTIKKyAgICAgICAgcHVucGNrbGRxIG1tMixtbTIgICAgICAgICAgICAgICA7IG1tMj0oMDIgMDIgMDIgMDIpCisgICAgICAgIHB1bnBja2hkcSBtbTMsbW0zICAgICAgICAgICAgICAgOyBtbTM9KDAzIDAzIDAzIDAzKQogCi0JbW92cQlNTVdPUkQgW01NQkxPQ0soMCwwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0wCi0JbW92cQlNTVdPUkQgW01NQkxPQ0soMCwxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0wCi0JbW92cQlNTVdPUkQgW01NQkxPQ0soMSwwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0xCi0JbW92cQlNTVdPUkQgW01NQkxPQ0soMSwxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0xCi0JbW92cQlNTVdPUkQgW01NQkxPQ0soMiwwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0yCi0JbW92cQlNTVdPUkQgW01NQkxPQ0soMiwxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0yCi0JbW92cQlNTVdPUkQgW01NQkxPQ0soMywwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0zCi0JbW92cQlNTVdPUkQgW01NQkxPQ0soMywxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0zCi0Jam1wCW5lYXIgLm5leHRjb2x1bW4KLQlhbGlnbngJMTYsNworICAgICAgICBtb3ZxICAgIE1NV09SRCBbTU1CTE9DSygwLDAsZWRpLFNJWkVPRl9KQ09FRildLCBtbTAKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMCwxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0wCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtNTUJMT0NLKDEsMCxlZGksU0laRU9GX0pDT0VGKV0sIG1tMQorICAgICAgICBtb3ZxICAgIE1NV09SRCBbTU1CTE9DSygxLDEsZWRpLFNJWkVPRl9KQ09FRildLCBtbTEKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMiwwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0yCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtNTUJMT0NLKDIsMSxlZGksU0laRU9GX0pDT0VGKV0sIG1tMgorICAgICAgICBtb3ZxICAgIE1NV09SRCBbTU1CTE9DSygzLDAsZWRpLFNJWkVPRl9KQ09FRildLCBtbTMKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMywxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0zCisgICAgICAgIGptcCAgICAgbmVhciAubmV4dGNvbHVtbgorICAgICAgICBhbGlnbnggIDE2LDcKICVlbmRpZgogLmNvbHVtbkRDVDoKIAotCTsgLS0gRXZlbiBwYXJ0CisgICAgICAgIDsgLS0gRXZlbiBwYXJ0CiAKLQltb3ZxCW1tMCwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQltb3ZxCW1tMSwgTU1XT1JEIFtNTUJMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQlwbXVsbHcJbW0wLCBNTVdPUkQgW01NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KLQlwbXVsbHcJbW0xLCBNTVdPUkQgW01NQkxPQ0soMiwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KLQltb3ZxCW1tMiwgTU1XT1JEIFtNTUJMT0NLKDQsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQltb3ZxCW1tMywgTU1XT1JEIFtNTUJMT0NLKDYsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQlwbXVsbHcJbW0yLCBNTVdPUkQgW01NQkxPQ0soNCwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KLQlwbXVsbHcJbW0zLCBNTVdPUkQgW01NQkxPQ0soNiwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKyAgICAgICAgbW92cSAgICBtbTAsIE1NV09SRCBbTU1CTE9DSygwLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdnEgICAgbW0xLCBNTVdPUkQgW01NQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBwbXVsbHcgIG1tMCwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisgICAgICAgIHBtdWxsdyAgbW0xLCBNTVdPUkQgW01NQkxPQ0soMiwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKyAgICAgICAgbW92cSAgICBtbTIsIE1NV09SRCBbTU1CTE9DSyg0LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdnEgICAgbW0zLCBNTVdPUkQgW01NQkxPQ0soNiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBwbXVsbHcgIG1tMiwgTU1XT1JEIFtNTUJMT0NLKDQsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisgICAgICAgIHBtdWxsdyAgbW0zLCBNTVdPUkQgW01NQkxPQ0soNiwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KIAotCTsgKE9yaWdpbmFsKQotCTsgejEgPSAoejIgKyB6MykgKiAwLjU0MTE5NjEwMDsKLQk7IHRtcDIgPSB6MSArIHozICogLTEuODQ3NzU5MDY1OwotCTsgdG1wMyA9IHoxICsgejIgKiAwLjc2NTM2Njg2NTsKLQk7Ci0JOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKLQk7IHRtcDIgPSB6MiAqIDAuNTQxMTk2MTAwICsgejMgKiAoMC41NDExOTYxMDAgLSAxLjg0Nzc1OTA2NSk7Ci0JOyB0bXAzID0gejIgKiAoMC41NDExOTYxMDAgKyAwLjc2NTM2Njg2NSkgKyB6MyAqIDAuNTQxMTk2MTAwOworICAgICAgICA7IChPcmlnaW5hbCkKKyAgICAgICAgOyB6MSA9ICh6MiArIHozKSAqIDAuNTQxMTk2MTAwOworICAgICAgICA7IHRtcDIgPSB6MSArIHozICogLTEuODQ3NzU5MDY1OworICAgICAgICA7IHRtcDMgPSB6MSArIHoyICogMC43NjUzNjY4NjU7CisgICAgICAgIDsKKyAgICAgICAgOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKyAgICAgICAgOyB0bXAyID0gejIgKiAwLjU0MTE5NjEwMCArIHozICogKDAuNTQxMTk2MTAwIC0gMS44NDc3NTkwNjUpOworICAgICAgICA7IHRtcDMgPSB6MiAqICgwLjU0MTE5NjEwMCArIDAuNzY1MzY2ODY1KSArIHozICogMC41NDExOTYxMDA7CiAKLQltb3ZxICAgICAgbW00LG1tMQkJOyBtbTE9aW4yPXoyCi0JbW92cSAgICAgIG1tNSxtbTEKLQlwdW5wY2tsd2QgbW00LG1tMwkJOyBtbTM9aW42PXozCi0JcHVucGNraHdkIG1tNSxtbTMKLQltb3ZxICAgICAgbW0xLG1tNAotCW1vdnEgICAgICBtbTMsbW01Ci0JcG1hZGR3ZCAgIG1tNCxbR09UT0ZGKGVieCxQV19GMTMwX0YwNTQpXQk7IG1tND10bXAzTAotCXBtYWRkd2QgICBtbTUsW0dPVE9GRihlYngsUFdfRjEzMF9GMDU0KV0JOyBtbTU9dG1wM0gKLQlwbWFkZHdkICAgbW0xLFtHT1RPRkYoZWJ4LFBXX0YwNTRfTUYxMzApXQk7IG1tMT10bXAyTAotCXBtYWRkd2QgICBtbTMsW0dPVE9GRihlYngsUFdfRjA1NF9NRjEzMCldCTsgbW0zPXRtcDJICisgICAgICAgIG1vdnEgICAgICBtbTQsbW0xICAgICAgICAgICAgICAgOyBtbTE9aW4yPXoyCisgICAgICAgIG1vdnEgICAgICBtbTUsbW0xCisgICAgICAgIHB1bnBja2x3ZCBtbTQsbW0zICAgICAgICAgICAgICAgOyBtbTM9aW42PXozCisgICAgICAgIHB1bnBja2h3ZCBtbTUsbW0zCisgICAgICAgIG1vdnEgICAgICBtbTEsbW00CisgICAgICAgIG1vdnEgICAgICBtbTMsbW01CisgICAgICAgIHBtYWRkd2QgICBtbTQsW0dPVE9GRihlYngsUFdfRjEzMF9GMDU0KV0gICAgICAgIDsgbW00PXRtcDNMCisgICAgICAgIHBtYWRkd2QgICBtbTUsW0dPVE9GRihlYngsUFdfRjEzMF9GMDU0KV0gICAgICAgIDsgbW01PXRtcDNICisgICAgICAgIHBtYWRkd2QgICBtbTEsW0dPVE9GRihlYngsUFdfRjA1NF9NRjEzMCldICAgICAgIDsgbW0xPXRtcDJMCisgICAgICAgIHBtYWRkd2QgICBtbTMsW0dPVE9GRihlYngsUFdfRjA1NF9NRjEzMCldICAgICAgIDsgbW0zPXRtcDJICiAKLQltb3ZxICAgICAgbW02LG1tMAotCXBhZGR3ICAgICBtbTAsbW0yCQk7IG1tMD1pbjAraW40Ci0JcHN1YncgICAgIG1tNixtbTIJCTsgbW02PWluMC1pbjQKKyAgICAgICAgbW92cSAgICAgIG1tNixtbTAKKyAgICAgICAgcGFkZHcgICAgIG1tMCxtbTIgICAgICAgICAgICAgICA7IG1tMD1pbjAraW40CisgICAgICAgIHBzdWJ3ICAgICBtbTYsbW0yICAgICAgICAgICAgICAgOyBtbTY9aW4wLWluNAogCi0JcHhvciAgICAgIG1tNyxtbTcKLQlweG9yICAgICAgbW0yLG1tMgotCXB1bnBja2x3ZCBtbTcsbW0wCQk7IG1tNz10bXAwTAotCXB1bnBja2h3ZCBtbTIsbW0wCQk7IG1tMj10bXAwSAotCXBzcmFkICAgICBtbTcsKDE2LUNPTlNUX0JJVFMpCTsgcHNyYWQgbW03LDE2ICYgcHNsbGQgbW03LENPTlNUX0JJVFMKLQlwc3JhZCAgICAgbW0yLCgxNi1DT05TVF9CSVRTKQk7IHBzcmFkIG1tMiwxNiAmIHBzbGxkIG1tMixDT05TVF9CSVRTCisgICAgICAgIHB4b3IgICAgICBtbTcsbW03CisgICAgICAgIHB4b3IgICAgICBtbTIsbW0yCisgICAgICAgIHB1bnBja2x3ZCBtbTcsbW0wICAgICAgICAgICAgICAgOyBtbTc9dG1wMEwKKyAgICAgICAgcHVucGNraHdkIG1tMixtbTAgICAgICAgICAgICAgICA7IG1tMj10bXAwSAorICAgICAgICBwc3JhZCAgICAgbW03LCgxNi1DT05TVF9CSVRTKSAgIDsgcHNyYWQgbW03LDE2ICYgcHNsbGQgbW03LENPTlNUX0JJVFMKKyAgICAgICAgcHNyYWQgICAgIG1tMiwoMTYtQ09OU1RfQklUUykgICA7IHBzcmFkIG1tMiwxNiAmIHBzbGxkIG1tMixDT05TVF9CSVRTCiAKLQltb3ZxCW1tMCxtbTcKLQlwYWRkZAltbTcsbW00CQkJOyBtbTc9dG1wMTBMCi0JcHN1YmQJbW0wLG1tNAkJCTsgbW0wPXRtcDEzTAotCW1vdnEJbW00LG1tMgotCXBhZGRkCW1tMixtbTUJCQk7IG1tMj10bXAxMEgKLQlwc3ViZAltbTQsbW01CQkJOyBtbTQ9dG1wMTNICisgICAgICAgIG1vdnEgICAgbW0wLG1tNworICAgICAgICBwYWRkZCAgIG1tNyxtbTQgICAgICAgICAgICAgICAgIDsgbW03PXRtcDEwTAorICAgICAgICBwc3ViZCAgIG1tMCxtbTQgICAgICAgICAgICAgICAgIDsgbW0wPXRtcDEzTAorICAgICAgICBtb3ZxICAgIG1tNCxtbTIKKyAgICAgICAgcGFkZGQgICBtbTIsbW01ICAgICAgICAgICAgICAgICA7IG1tMj10bXAxMEgKKyAgICAgICAgcHN1YmQgICBtbTQsbW01ICAgICAgICAgICAgICAgICA7IG1tND10bXAxM0gKIAotCW1vdnEJTU1XT1JEIFt3aygwKV0sIG1tNwk7IHdrKDApPXRtcDEwTAotCW1vdnEJTU1XT1JEIFt3aygxKV0sIG1tMgk7IHdrKDEpPXRtcDEwSAotCW1vdnEJTU1XT1JEIFt3aygyKV0sIG1tMAk7IHdrKDIpPXRtcDEzTAotCW1vdnEJTU1XT1JEIFt3aygzKV0sIG1tNAk7IHdrKDMpPXRtcDEzSAorICAgICAgICBtb3ZxICAgIE1NV09SRCBbd2soMCldLCBtbTcgICAgIDsgd2soMCk9dG1wMTBMCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFt3aygxKV0sIG1tMiAgICAgOyB3aygxKT10bXAxMEgKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW3drKDIpXSwgbW0wICAgICA7IHdrKDIpPXRtcDEzTAorICAgICAgICBtb3ZxICAgIE1NV09SRCBbd2soMyldLCBtbTQgICAgIDsgd2soMyk9dG1wMTNICiAKLQlweG9yICAgICAgbW01LG1tNQotCXB4b3IgICAgICBtbTcsbW03Ci0JcHVucGNrbHdkIG1tNSxtbTYJCTsgbW01PXRtcDFMCi0JcHVucGNraHdkIG1tNyxtbTYJCTsgbW03PXRtcDFICi0JcHNyYWQgICAgIG1tNSwoMTYtQ09OU1RfQklUUykJOyBwc3JhZCBtbTUsMTYgJiBwc2xsZCBtbTUsQ09OU1RfQklUUwotCXBzcmFkICAgICBtbTcsKDE2LUNPTlNUX0JJVFMpCTsgcHNyYWQgbW03LDE2ICYgcHNsbGQgbW03LENPTlNUX0JJVFMKKyAgICAgICAgcHhvciAgICAgIG1tNSxtbTUKKyAgICAgICAgcHhvciAgICAgIG1tNyxtbTcKKyAgICAgICAgcHVucGNrbHdkIG1tNSxtbTYgICAgICAgICAgICAgICA7IG1tNT10bXAxTAorICAgICAgICBwdW5wY2tod2QgbW03LG1tNiAgICAgICAgICAgICAgIDsgbW03PXRtcDFICisgICAgICAgIHBzcmFkICAgICBtbTUsKDE2LUNPTlNUX0JJVFMpICAgOyBwc3JhZCBtbTUsMTYgJiBwc2xsZCBtbTUsQ09OU1RfQklUUworICAgICAgICBwc3JhZCAgICAgbW03LCgxNi1DT05TVF9CSVRTKSAgIDsgcHNyYWQgbW03LDE2ICYgcHNsbGQgbW03LENPTlNUX0JJVFMKIAotCW1vdnEJbW0yLG1tNQotCXBhZGRkCW1tNSxtbTEJCQk7IG1tNT10bXAxMUwKLQlwc3ViZAltbTIsbW0xCQkJOyBtbTI9dG1wMTJMCi0JbW92cQltbTAsbW03Ci0JcGFkZGQJbW03LG1tMwkJCTsgbW03PXRtcDExSAotCXBzdWJkCW1tMCxtbTMJCQk7IG1tMD10bXAxMkgKKyAgICAgICAgbW92cSAgICBtbTIsbW01CisgICAgICAgIHBhZGRkICAgbW01LG1tMSAgICAgICAgICAgICAgICAgOyBtbTU9dG1wMTFMCisgICAgICAgIHBzdWJkICAgbW0yLG1tMSAgICAgICAgICAgICAgICAgOyBtbTI9dG1wMTJMCisgICAgICAgIG1vdnEgICAgbW0wLG1tNworICAgICAgICBwYWRkZCAgIG1tNyxtbTMgICAgICAgICAgICAgICAgIDsgbW03PXRtcDExSAorICAgICAgICBwc3ViZCAgIG1tMCxtbTMgICAgICAgICAgICAgICAgIDsgbW0wPXRtcDEySAogCi0JbW92cQlNTVdPUkQgW3drKDQpXSwgbW01CTsgd2soNCk9dG1wMTFMCi0JbW92cQlNTVdPUkQgW3drKDUpXSwgbW03CTsgd2soNSk9dG1wMTFICi0JbW92cQlNTVdPUkQgW3drKDYpXSwgbW0yCTsgd2soNik9dG1wMTJMCi0JbW92cQlNTVdPUkQgW3drKDcpXSwgbW0wCTsgd2soNyk9dG1wMTJICisgICAgICAgIG1vdnEgICAgTU1XT1JEIFt3ayg0KV0sIG1tNSAgICAgOyB3ayg0KT10bXAxMUwKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW3drKDUpXSwgbW03ICAgICA7IHdrKDUpPXRtcDExSAorICAgICAgICBtb3ZxICAgIE1NV09SRCBbd2soNildLCBtbTIgICAgIDsgd2soNik9dG1wMTJMCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFt3ayg3KV0sIG1tMCAgICAgOyB3ayg3KT10bXAxMkgKIAotCTsgLS0gT2RkIHBhcnQKKyAgICAgICAgOyAtLSBPZGQgcGFydAogCi0JbW92cQltbTQsIE1NV09SRCBbTU1CTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCi0JbW92cQltbTYsIE1NV09SRCBbTU1CTE9DSygzLDAsZXNpLFNJWkVPRl9KQ09FRildCi0JcG11bGx3CW1tNCwgTU1XT1JEIFtNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCi0JcG11bGx3CW1tNiwgTU1XT1JEIFtNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCi0JbW92cQltbTEsIE1NV09SRCBbTU1CTE9DSyg1LDAsZXNpLFNJWkVPRl9KQ09FRildCi0JbW92cQltbTMsIE1NV09SRCBbTU1CTE9DSyg3LDAsZXNpLFNJWkVPRl9KQ09FRildCi0JcG11bGx3CW1tMSwgTU1XT1JEIFtNTUJMT0NLKDUsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCi0JcG11bGx3CW1tMywgTU1XT1JEIFtNTUJMT0NLKDcsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisgICAgICAgIG1vdnEgICAgbW00LCBNTVdPUkQgW01NQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBtb3ZxICAgIG1tNiwgTU1XT1JEIFtNTUJMT0NLKDMsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgcG11bGx3ICBtbTQsIE1NV09SRCBbTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorICAgICAgICBwbXVsbHcgIG1tNiwgTU1XT1JEIFtNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisgICAgICAgIG1vdnEgICAgbW0xLCBNTVdPUkQgW01NQkxPQ0soNSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBtb3ZxICAgIG1tMywgTU1XT1JEIFtNTUJMT0NLKDcsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgcG11bGx3ICBtbTEsIE1NV09SRCBbTU1CTE9DSyg1LDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorICAgICAgICBwbXVsbHcgIG1tMywgTU1XT1JEIFtNTUJMT0NLKDcsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCiAKLQltb3ZxCW1tNSxtbTYKLQltb3ZxCW1tNyxtbTQKLQlwYWRkdwltbTUsbW0zCQkJOyBtbTU9ejMKLQlwYWRkdwltbTcsbW0xCQkJOyBtbTc9ejQKKyAgICAgICAgbW92cSAgICBtbTUsbW02CisgICAgICAgIG1vdnEgICAgbW03LG1tNAorICAgICAgICBwYWRkdyAgIG1tNSxtbTMgICAgICAgICAgICAgICAgIDsgbW01PXozCisgICAgICAgIHBhZGR3ICAgbW03LG1tMSAgICAgICAgICAgICAgICAgOyBtbTc9ejQKIAotCTsgKE9yaWdpbmFsKQotCTsgejUgPSAoejMgKyB6NCkgKiAxLjE3NTg3NTYwMjsKLQk7IHozID0gejMgKiAtMS45NjE1NzA1NjA7ICB6NCA9IHo0ICogLTAuMzkwMTgwNjQ0OwotCTsgejMgKz0gejU7ICB6NCArPSB6NTsKLQk7Ci0JOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKLQk7IHozID0gejMgKiAoMS4xNzU4NzU2MDIgLSAxLjk2MTU3MDU2MCkgKyB6NCAqIDEuMTc1ODc1NjAyOwotCTsgejQgPSB6MyAqIDEuMTc1ODc1NjAyICsgejQgKiAoMS4xNzU4NzU2MDIgLSAwLjM5MDE4MDY0NCk7CisgICAgICAgIDsgKE9yaWdpbmFsKQorICAgICAgICA7IHo1ID0gKHozICsgejQpICogMS4xNzU4NzU2MDI7CisgICAgICAgIDsgejMgPSB6MyAqIC0xLjk2MTU3MDU2MDsgIHo0ID0gejQgKiAtMC4zOTAxODA2NDQ7CisgICAgICAgIDsgejMgKz0gejU7ICB6NCArPSB6NTsKKyAgICAgICAgOworICAgICAgICA7IChUaGlzIGltcGxlbWVudGF0aW9uKQorICAgICAgICA7IHozID0gejMgKiAoMS4xNzU4NzU2MDIgLSAxLjk2MTU3MDU2MCkgKyB6NCAqIDEuMTc1ODc1NjAyOworICAgICAgICA7IHo0ID0gejMgKiAxLjE3NTg3NTYwMiArIHo0ICogKDEuMTc1ODc1NjAyIC0gMC4zOTAxODA2NDQpOwogCi0JbW92cSAgICAgIG1tMixtbTUKLQltb3ZxICAgICAgbW0wLG1tNQotCXB1bnBja2x3ZCBtbTIsbW03Ci0JcHVucGNraHdkIG1tMCxtbTcKLQltb3ZxICAgICAgbW01LG1tMgotCW1vdnEgICAgICBtbTcsbW0wCi0JcG1hZGR3ZCAgIG1tMixbR09UT0ZGKGVieCxQV19NRjA3OF9GMTE3KV0JOyBtbTI9ejNMCi0JcG1hZGR3ZCAgIG1tMCxbR09UT0ZGKGVieCxQV19NRjA3OF9GMTE3KV0JOyBtbTA9ejNICi0JcG1hZGR3ZCAgIG1tNSxbR09UT0ZGKGVieCxQV19GMTE3X0YwNzgpXQk7IG1tNT16NEwKLQlwbWFkZHdkICAgbW03LFtHT1RPRkYoZWJ4LFBXX0YxMTdfRjA3OCldCTsgbW03PXo0SAorICAgICAgICBtb3ZxICAgICAgbW0yLG1tNQorICAgICAgICBtb3ZxICAgICAgbW0wLG1tNQorICAgICAgICBwdW5wY2tsd2QgbW0yLG1tNworICAgICAgICBwdW5wY2tod2QgbW0wLG1tNworICAgICAgICBtb3ZxICAgICAgbW01LG1tMgorICAgICAgICBtb3ZxICAgICAgbW03LG1tMAorICAgICAgICBwbWFkZHdkICAgbW0yLFtHT1RPRkYoZWJ4LFBXX01GMDc4X0YxMTcpXSAgICAgICA7IG1tMj16M0wKKyAgICAgICAgcG1hZGR3ZCAgIG1tMCxbR09UT0ZGKGVieCxQV19NRjA3OF9GMTE3KV0gICAgICAgOyBtbTA9ejNICisgICAgICAgIHBtYWRkd2QgICBtbTUsW0dPVE9GRihlYngsUFdfRjExN19GMDc4KV0gICAgICAgIDsgbW01PXo0TAorICAgICAgICBwbWFkZHdkICAgbW03LFtHT1RPRkYoZWJ4LFBXX0YxMTdfRjA3OCldICAgICAgICA7IG1tNz16NEgKIAotCW1vdnEJTU1XT1JEIFt3aygxMCldLCBtbTIJOyB3aygxMCk9ejNMCi0JbW92cQlNTVdPUkQgW3drKDExKV0sIG1tMAk7IHdrKDExKT16M0gKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW3drKDEwKV0sIG1tMiAgICA7IHdrKDEwKT16M0wKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW3drKDExKV0sIG1tMCAgICA7IHdrKDExKT16M0gKIAotCTsgKE9yaWdpbmFsKQotCTsgejEgPSB0bXAwICsgdG1wMzsgIHoyID0gdG1wMSArIHRtcDI7Ci0JOyB0bXAwID0gdG1wMCAqIDAuMjk4NjMxMzM2OyAgdG1wMSA9IHRtcDEgKiAyLjA1MzExOTg2OTsKLQk7IHRtcDIgPSB0bXAyICogMy4wNzI3MTEwMjY7ICB0bXAzID0gdG1wMyAqIDEuNTAxMzIxMTEwOwotCTsgejEgPSB6MSAqIC0wLjg5OTk3NjIyMzsgIHoyID0gejIgKiAtMi41NjI5MTU0NDc7Ci0JOyB0bXAwICs9IHoxICsgejM7ICB0bXAxICs9IHoyICsgejQ7Ci0JOyB0bXAyICs9IHoyICsgejM7ICB0bXAzICs9IHoxICsgejQ7Ci0JOwotCTsgKFRoaXMgaW1wbGVtZW50YXRpb24pCi0JOyB0bXAwID0gdG1wMCAqICgwLjI5ODYzMTMzNiAtIDAuODk5OTc2MjIzKSArIHRtcDMgKiAtMC44OTk5NzYyMjM7Ci0JOyB0bXAxID0gdG1wMSAqICgyLjA1MzExOTg2OSAtIDIuNTYyOTE1NDQ3KSArIHRtcDIgKiAtMi41NjI5MTU0NDc7Ci0JOyB0bXAyID0gdG1wMSAqIC0yLjU2MjkxNTQ0NyArIHRtcDIgKiAoMy4wNzI3MTEwMjYgLSAyLjU2MjkxNTQ0Nyk7Ci0JOyB0bXAzID0gdG1wMCAqIC0wLjg5OTk3NjIyMyArIHRtcDMgKiAoMS41MDEzMjExMTAgLSAwLjg5OTk3NjIyMyk7Ci0JOyB0bXAwICs9IHozOyAgdG1wMSArPSB6NDsKLQk7IHRtcDIgKz0gejM7ICB0bXAzICs9IHo0OworICAgICAgICA7IChPcmlnaW5hbCkKKyAgICAgICAgOyB6MSA9IHRtcDAgKyB0bXAzOyAgejIgPSB0bXAxICsgdG1wMjsKKyAgICAgICAgOyB0bXAwID0gdG1wMCAqIDAuMjk4NjMxMzM2OyAgdG1wMSA9IHRtcDEgKiAyLjA1MzExOTg2OTsKKyAgICAgICAgOyB0bXAyID0gdG1wMiAqIDMuMDcyNzExMDI2OyAgdG1wMyA9IHRtcDMgKiAxLjUwMTMyMTExMDsKKyAgICAgICAgOyB6MSA9IHoxICogLTAuODk5OTc2MjIzOyAgejIgPSB6MiAqIC0yLjU2MjkxNTQ0NzsKKyAgICAgICAgOyB0bXAwICs9IHoxICsgejM7ICB0bXAxICs9IHoyICsgejQ7CisgICAgICAgIDsgdG1wMiArPSB6MiArIHozOyAgdG1wMyArPSB6MSArIHo0OworICAgICAgICA7CisgICAgICAgIDsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisgICAgICAgIDsgdG1wMCA9IHRtcDAgKiAoMC4yOTg2MzEzMzYgLSAwLjg5OTk3NjIyMykgKyB0bXAzICogLTAuODk5OTc2MjIzOworICAgICAgICA7IHRtcDEgPSB0bXAxICogKDIuMDUzMTE5ODY5IC0gMi41NjI5MTU0NDcpICsgdG1wMiAqIC0yLjU2MjkxNTQ0NzsKKyAgICAgICAgOyB0bXAyID0gdG1wMSAqIC0yLjU2MjkxNTQ0NyArIHRtcDIgKiAoMy4wNzI3MTEwMjYgLSAyLjU2MjkxNTQ0Nyk7CisgICAgICAgIDsgdG1wMyA9IHRtcDAgKiAtMC44OTk5NzYyMjMgKyB0bXAzICogKDEuNTAxMzIxMTEwIC0gMC44OTk5NzYyMjMpOworICAgICAgICA7IHRtcDAgKz0gejM7ICB0bXAxICs9IHo0OworICAgICAgICA7IHRtcDIgKz0gejM7ICB0bXAzICs9IHo0OwogCi0JbW92cSAgICAgIG1tMixtbTMKLQltb3ZxICAgICAgbW0wLG1tMwotCXB1bnBja2x3ZCBtbTIsbW00Ci0JcHVucGNraHdkIG1tMCxtbTQKLQltb3ZxICAgICAgbW0zLG1tMgotCW1vdnEgICAgICBtbTQsbW0wCi0JcG1hZGR3ZCAgIG1tMixbR09UT0ZGKGVieCxQV19NRjA2MF9NRjA4OSldCTsgbW0yPXRtcDBMCi0JcG1hZGR3ZCAgIG1tMCxbR09UT0ZGKGVieCxQV19NRjA2MF9NRjA4OSldCTsgbW0wPXRtcDBICi0JcG1hZGR3ZCAgIG1tMyxbR09UT0ZGKGVieCxQV19NRjA4OV9GMDYwKV0JOyBtbTM9dG1wM0wKLQlwbWFkZHdkICAgbW00LFtHT1RPRkYoZWJ4LFBXX01GMDg5X0YwNjApXQk7IG1tND10bXAzSAorICAgICAgICBtb3ZxICAgICAgbW0yLG1tMworICAgICAgICBtb3ZxICAgICAgbW0wLG1tMworICAgICAgICBwdW5wY2tsd2QgbW0yLG1tNAorICAgICAgICBwdW5wY2tod2QgbW0wLG1tNAorICAgICAgICBtb3ZxICAgICAgbW0zLG1tMgorICAgICAgICBtb3ZxICAgICAgbW00LG1tMAorICAgICAgICBwbWFkZHdkICAgbW0yLFtHT1RPRkYoZWJ4LFBXX01GMDYwX01GMDg5KV0gICAgICA7IG1tMj10bXAwTAorICAgICAgICBwbWFkZHdkICAgbW0wLFtHT1RPRkYoZWJ4LFBXX01GMDYwX01GMDg5KV0gICAgICA7IG1tMD10bXAwSAorICAgICAgICBwbWFkZHdkICAgbW0zLFtHT1RPRkYoZWJ4LFBXX01GMDg5X0YwNjApXSAgICAgICA7IG1tMz10bXAzTAorICAgICAgICBwbWFkZHdkICAgbW00LFtHT1RPRkYoZWJ4LFBXX01GMDg5X0YwNjApXSAgICAgICA7IG1tND10bXAzSAogCi0JcGFkZGQJbW0yLCBNTVdPUkQgW3drKDEwKV0JOyBtbTI9dG1wMEwKLQlwYWRkZAltbTAsIE1NV09SRCBbd2soMTEpXQk7IG1tMD10bXAwSAotCXBhZGRkCW1tMyxtbTUJCQk7IG1tMz10bXAzTAotCXBhZGRkCW1tNCxtbTcJCQk7IG1tND10bXAzSAorICAgICAgICBwYWRkZCAgIG1tMiwgTU1XT1JEIFt3aygxMCldICAgIDsgbW0yPXRtcDBMCisgICAgICAgIHBhZGRkICAgbW0wLCBNTVdPUkQgW3drKDExKV0gICAgOyBtbTA9dG1wMEgKKyAgICAgICAgcGFkZGQgICBtbTMsbW01ICAgICAgICAgICAgICAgICA7IG1tMz10bXAzTAorICAgICAgICBwYWRkZCAgIG1tNCxtbTcgICAgICAgICAgICAgICAgIDsgbW00PXRtcDNICiAKLQltb3ZxCU1NV09SRCBbd2soOCldLCBtbTIJOyB3ayg4KT10bXAwTAotCW1vdnEJTU1XT1JEIFt3ayg5KV0sIG1tMAk7IHdrKDkpPXRtcDBICisgICAgICAgIG1vdnEgICAgTU1XT1JEIFt3ayg4KV0sIG1tMiAgICAgOyB3ayg4KT10bXAwTAorICAgICAgICBtb3ZxICAgIE1NV09SRCBbd2soOSldLCBtbTAgICAgIDsgd2soOSk9dG1wMEgKIAotCW1vdnEgICAgICBtbTIsbW0xCi0JbW92cSAgICAgIG1tMCxtbTEKLQlwdW5wY2tsd2QgbW0yLG1tNgotCXB1bnBja2h3ZCBtbTAsbW02Ci0JbW92cSAgICAgIG1tMSxtbTIKLQltb3ZxICAgICAgbW02LG1tMAotCXBtYWRkd2QgICBtbTIsW0dPVE9GRihlYngsUFdfTUYwNTBfTUYyNTYpXQk7IG1tMj10bXAxTAotCXBtYWRkd2QgICBtbTAsW0dPVE9GRihlYngsUFdfTUYwNTBfTUYyNTYpXQk7IG1tMD10bXAxSAotCXBtYWRkd2QgICBtbTEsW0dPVE9GRihlYngsUFdfTUYyNTZfRjA1MCldCTsgbW0xPXRtcDJMCi0JcG1hZGR3ZCAgIG1tNixbR09UT0ZGKGVieCxQV19NRjI1Nl9GMDUwKV0JOyBtbTY9dG1wMkgKKyAgICAgICAgbW92cSAgICAgIG1tMixtbTEKKyAgICAgICAgbW92cSAgICAgIG1tMCxtbTEKKyAgICAgICAgcHVucGNrbHdkIG1tMixtbTYKKyAgICAgICAgcHVucGNraHdkIG1tMCxtbTYKKyAgICAgICAgbW92cSAgICAgIG1tMSxtbTIKKyAgICAgICAgbW92cSAgICAgIG1tNixtbTAKKyAgICAgICAgcG1hZGR3ZCAgIG1tMixbR09UT0ZGKGVieCxQV19NRjA1MF9NRjI1NildICAgICAgOyBtbTI9dG1wMUwKKyAgICAgICAgcG1hZGR3ZCAgIG1tMCxbR09UT0ZGKGVieCxQV19NRjA1MF9NRjI1NildICAgICAgOyBtbTA9dG1wMUgKKyAgICAgICAgcG1hZGR3ZCAgIG1tMSxbR09UT0ZGKGVieCxQV19NRjI1Nl9GMDUwKV0gICAgICAgOyBtbTE9dG1wMkwKKyAgICAgICAgcG1hZGR3ZCAgIG1tNixbR09UT0ZGKGVieCxQV19NRjI1Nl9GMDUwKV0gICAgICAgOyBtbTY9dG1wMkgKIAotCXBhZGRkCW1tMixtbTUJCQk7IG1tMj10bXAxTAotCXBhZGRkCW1tMCxtbTcJCQk7IG1tMD10bXAxSAotCXBhZGRkCW1tMSwgTU1XT1JEIFt3aygxMCldCTsgbW0xPXRtcDJMCi0JcGFkZGQJbW02LCBNTVdPUkQgW3drKDExKV0JOyBtbTY9dG1wMkgKKyAgICAgICAgcGFkZGQgICBtbTIsbW01ICAgICAgICAgICAgICAgICA7IG1tMj10bXAxTAorICAgICAgICBwYWRkZCAgIG1tMCxtbTcgICAgICAgICAgICAgICAgIDsgbW0wPXRtcDFICisgICAgICAgIHBhZGRkICAgbW0xLCBNTVdPUkQgW3drKDEwKV0gICAgOyBtbTE9dG1wMkwKKyAgICAgICAgcGFkZGQgICBtbTYsIE1NV09SRCBbd2soMTEpXSAgICA7IG1tNj10bXAySAogCi0JbW92cQlNTVdPUkQgW3drKDEwKV0sIG1tMgk7IHdrKDEwKT10bXAxTAotCW1vdnEJTU1XT1JEIFt3aygxMSldLCBtbTAJOyB3aygxMSk9dG1wMUgKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW3drKDEwKV0sIG1tMiAgICA7IHdrKDEwKT10bXAxTAorICAgICAgICBtb3ZxICAgIE1NV09SRCBbd2soMTEpXSwgbW0wICAgIDsgd2soMTEpPXRtcDFICiAKLQk7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQorICAgICAgICA7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQogCi0JbW92cQltbTUsIE1NV09SRCBbd2soMCldCTsgbW01PXRtcDEwTAotCW1vdnEJbW03LCBNTVdPUkQgW3drKDEpXQk7IG1tNz10bXAxMEgKKyAgICAgICAgbW92cSAgICBtbTUsIE1NV09SRCBbd2soMCldICAgICA7IG1tNT10bXAxMEwKKyAgICAgICAgbW92cSAgICBtbTcsIE1NV09SRCBbd2soMSldICAgICA7IG1tNz10bXAxMEgKIAotCW1vdnEJbW0yLG1tNQotCW1vdnEJbW0wLG1tNwotCXBhZGRkCW1tNSxtbTMJCQk7IG1tNT1kYXRhMEwKLQlwYWRkZAltbTcsbW00CQkJOyBtbTc9ZGF0YTBICi0JcHN1YmQJbW0yLG1tMwkJCTsgbW0yPWRhdGE3TAotCXBzdWJkCW1tMCxtbTQJCQk7IG1tMD1kYXRhN0gKKyAgICAgICAgbW92cSAgICBtbTIsbW01CisgICAgICAgIG1vdnEgICAgbW0wLG1tNworICAgICAgICBwYWRkZCAgIG1tNSxtbTMgICAgICAgICAgICAgICAgIDsgbW01PWRhdGEwTAorICAgICAgICBwYWRkZCAgIG1tNyxtbTQgICAgICAgICAgICAgICAgIDsgbW03PWRhdGEwSAorICAgICAgICBwc3ViZCAgIG1tMixtbTMgICAgICAgICAgICAgICAgIDsgbW0yPWRhdGE3TAorICAgICAgICBwc3ViZCAgIG1tMCxtbTQgICAgICAgICAgICAgICAgIDsgbW0wPWRhdGE3SAogCi0JbW92cQltbTMsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldCTsgbW0zPVtQRF9ERVNDQUxFX1AxXQorICAgICAgICBtb3ZxICAgIG1tMyxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0gOyBtbTM9W1BEX0RFU0NBTEVfUDFdCiAKLQlwYWRkZAltbTUsbW0zCi0JcGFkZGQJbW03LG1tMwotCXBzcmFkCW1tNSxERVNDQUxFX1AxCi0JcHNyYWQJbW03LERFU0NBTEVfUDEKLQlwYWRkZAltbTIsbW0zCi0JcGFkZGQJbW0wLG1tMwotCXBzcmFkCW1tMixERVNDQUxFX1AxCi0JcHNyYWQJbW0wLERFU0NBTEVfUDEKKyAgICAgICAgcGFkZGQgICBtbTUsbW0zCisgICAgICAgIHBhZGRkICAgbW03LG1tMworICAgICAgICBwc3JhZCAgIG1tNSxERVNDQUxFX1AxCisgICAgICAgIHBzcmFkICAgbW03LERFU0NBTEVfUDEKKyAgICAgICAgcGFkZGQgICBtbTIsbW0zCisgICAgICAgIHBhZGRkICAgbW0wLG1tMworICAgICAgICBwc3JhZCAgIG1tMixERVNDQUxFX1AxCisgICAgICAgIHBzcmFkICAgbW0wLERFU0NBTEVfUDEKIAotCXBhY2tzc2R3ICBtbTUsbW03CQk7IG1tNT1kYXRhMD0oMDAgMDEgMDIgMDMpCi0JcGFja3NzZHcgIG1tMixtbTAJCTsgbW0yPWRhdGE3PSg3MCA3MSA3MiA3MykKKyAgICAgICAgcGFja3NzZHcgIG1tNSxtbTcgICAgICAgICAgICAgICA7IG1tNT1kYXRhMD0oMDAgMDEgMDIgMDMpCisgICAgICAgIHBhY2tzc2R3ICBtbTIsbW0wICAgICAgICAgICAgICAgOyBtbTI9ZGF0YTc9KDcwIDcxIDcyIDczKQogCi0JbW92cQltbTQsIE1NV09SRCBbd2soNCldCTsgbW00PXRtcDExTAotCW1vdnEJbW0zLCBNTVdPUkQgW3drKDUpXQk7IG1tMz10bXAxMUgKKyAgICAgICAgbW92cSAgICBtbTQsIE1NV09SRCBbd2soNCldICAgICA7IG1tND10bXAxMUwKKyAgICAgICAgbW92cSAgICBtbTMsIE1NV09SRCBbd2soNSldICAgICA7IG1tMz10bXAxMUgKIAotCW1vdnEJbW03LG1tNAotCW1vdnEJbW0wLG1tMwotCXBhZGRkCW1tNCxtbTEJCQk7IG1tND1kYXRhMUwKLQlwYWRkZAltbTMsbW02CQkJOyBtbTM9ZGF0YTFICi0JcHN1YmQJbW03LG1tMQkJCTsgbW03PWRhdGE2TAotCXBzdWJkCW1tMCxtbTYJCQk7IG1tMD1kYXRhNkgKKyAgICAgICAgbW92cSAgICBtbTcsbW00CisgICAgICAgIG1vdnEgICAgbW0wLG1tMworICAgICAgICBwYWRkZCAgIG1tNCxtbTEgICAgICAgICAgICAgICAgIDsgbW00PWRhdGExTAorICAgICAgICBwYWRkZCAgIG1tMyxtbTYgICAgICAgICAgICAgICAgIDsgbW0zPWRhdGExSAorICAgICAgICBwc3ViZCAgIG1tNyxtbTEgICAgICAgICAgICAgICAgIDsgbW03PWRhdGE2TAorICAgICAgICBwc3ViZCAgIG1tMCxtbTYgICAgICAgICAgICAgICAgIDsgbW0wPWRhdGE2SAogCi0JbW92cQltbTEsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldCTsgbW0xPVtQRF9ERVNDQUxFX1AxXQorICAgICAgICBtb3ZxICAgIG1tMSxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0gOyBtbTE9W1BEX0RFU0NBTEVfUDFdCiAKLQlwYWRkZAltbTQsbW0xCi0JcGFkZGQJbW0zLG1tMQotCXBzcmFkCW1tNCxERVNDQUxFX1AxCi0JcHNyYWQJbW0zLERFU0NBTEVfUDEKLQlwYWRkZAltbTcsbW0xCi0JcGFkZGQJbW0wLG1tMQotCXBzcmFkCW1tNyxERVNDQUxFX1AxCi0JcHNyYWQJbW0wLERFU0NBTEVfUDEKKyAgICAgICAgcGFkZGQgICBtbTQsbW0xCisgICAgICAgIHBhZGRkICAgbW0zLG1tMQorICAgICAgICBwc3JhZCAgIG1tNCxERVNDQUxFX1AxCisgICAgICAgIHBzcmFkICAgbW0zLERFU0NBTEVfUDEKKyAgICAgICAgcGFkZGQgICBtbTcsbW0xCisgICAgICAgIHBhZGRkICAgbW0wLG1tMQorICAgICAgICBwc3JhZCAgIG1tNyxERVNDQUxFX1AxCisgICAgICAgIHBzcmFkICAgbW0wLERFU0NBTEVfUDEKIAotCXBhY2tzc2R3ICBtbTQsbW0zCQk7IG1tND1kYXRhMT0oMTAgMTEgMTIgMTMpCi0JcGFja3NzZHcgIG1tNyxtbTAJCTsgbW03PWRhdGE2PSg2MCA2MSA2MiA2MykKKyAgICAgICAgcGFja3NzZHcgIG1tNCxtbTMgICAgICAgICAgICAgICA7IG1tND1kYXRhMT0oMTAgMTEgMTIgMTMpCisgICAgICAgIHBhY2tzc2R3ICBtbTcsbW0wICAgICAgICAgICAgICAgOyBtbTc9ZGF0YTY9KDYwIDYxIDYyIDYzKQogCi0JbW92cSAgICAgIG1tNixtbTUJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQotCXB1bnBja2x3ZCBtbTUsbW00CQk7IG1tNT0oMDAgMTAgMDEgMTEpCi0JcHVucGNraHdkIG1tNixtbTQJCTsgbW02PSgwMiAxMiAwMyAxMykKLQltb3ZxICAgICAgbW0xLG1tNwkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCi0JcHVucGNrbHdkIG1tNyxtbTIJCTsgbW03PSg2MCA3MCA2MSA3MSkKLQlwdW5wY2tod2QgbW0xLG1tMgkJOyBtbTE9KDYyIDcyIDYzIDczKQorICAgICAgICBtb3ZxICAgICAgbW02LG1tNSAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgICAgICBwdW5wY2tsd2QgbW01LG1tNCAgICAgICAgICAgICAgIDsgbW01PSgwMCAxMCAwMSAxMSkKKyAgICAgICAgcHVucGNraHdkIG1tNixtbTQgICAgICAgICAgICAgICA7IG1tNj0oMDIgMTIgMDMgMTMpCisgICAgICAgIG1vdnEgICAgICBtbTEsbW03ICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgICAgIHB1bnBja2x3ZCBtbTcsbW0yICAgICAgICAgICAgICAgOyBtbTc9KDYwIDcwIDYxIDcxKQorICAgICAgICBwdW5wY2tod2QgbW0xLG1tMiAgICAgICAgICAgICAgIDsgbW0xPSg2MiA3MiA2MyA3MykKIAotCW1vdnEJbW0zLCBNTVdPUkQgW3drKDYpXQk7IG1tMz10bXAxMkwKLQltb3ZxCW1tMCwgTU1XT1JEIFt3ayg3KV0JOyBtbTA9dG1wMTJICi0JbW92cQltbTQsIE1NV09SRCBbd2soMTApXQk7IG1tND10bXAxTAotCW1vdnEJbW0yLCBNTVdPUkQgW3drKDExKV0JOyBtbTI9dG1wMUgKKyAgICAgICAgbW92cSAgICBtbTMsIE1NV09SRCBbd2soNildICAgICA7IG1tMz10bXAxMkwKKyAgICAgICAgbW92cSAgICBtbTAsIE1NV09SRCBbd2soNyldICAgICA7IG1tMD10bXAxMkgKKyAgICAgICAgbW92cSAgICBtbTQsIE1NV09SRCBbd2soMTApXSAgICA7IG1tND10bXAxTAorICAgICAgICBtb3ZxICAgIG1tMiwgTU1XT1JEIFt3aygxMSldICAgIDsgbW0yPXRtcDFICiAKLQltb3ZxCU1NV09SRCBbd2soMCldLCBtbTUJOyB3aygwKT0oMDAgMTAgMDEgMTEpCi0JbW92cQlNTVdPUkQgW3drKDEpXSwgbW02CTsgd2soMSk9KDAyIDEyIDAzIDEzKQotCW1vdnEJTU1XT1JEIFt3ayg0KV0sIG1tNwk7IHdrKDQpPSg2MCA3MCA2MSA3MSkKLQltb3ZxCU1NV09SRCBbd2soNSldLCBtbTEJOyB3ayg1KT0oNjIgNzIgNjMgNzMpCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFt3aygwKV0sIG1tNSAgICAgOyB3aygwKT0oMDAgMTAgMDEgMTEpCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFt3aygxKV0sIG1tNiAgICAgOyB3aygxKT0oMDIgMTIgMDMgMTMpCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFt3ayg0KV0sIG1tNyAgICAgOyB3ayg0KT0oNjAgNzAgNjEgNzEpCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFt3ayg1KV0sIG1tMSAgICAgOyB3ayg1KT0oNjIgNzIgNjMgNzMpCiAKLQltb3ZxCW1tNSxtbTMKLQltb3ZxCW1tNixtbTAKLQlwYWRkZAltbTMsbW00CQkJOyBtbTM9ZGF0YTJMCi0JcGFkZGQJbW0wLG1tMgkJCTsgbW0wPWRhdGEySAotCXBzdWJkCW1tNSxtbTQJCQk7IG1tNT1kYXRhNUwKLQlwc3ViZAltbTYsbW0yCQkJOyBtbTY9ZGF0YTVICisgICAgICAgIG1vdnEgICAgbW01LG1tMworICAgICAgICBtb3ZxICAgIG1tNixtbTAKKyAgICAgICAgcGFkZGQgICBtbTMsbW00ICAgICAgICAgICAgICAgICA7IG1tMz1kYXRhMkwKKyAgICAgICAgcGFkZGQgICBtbTAsbW0yICAgICAgICAgICAgICAgICA7IG1tMD1kYXRhMkgKKyAgICAgICAgcHN1YmQgICBtbTUsbW00ICAgICAgICAgICAgICAgICA7IG1tNT1kYXRhNUwKKyAgICAgICAgcHN1YmQgICBtbTYsbW0yICAgICAgICAgICAgICAgICA7IG1tNj1kYXRhNUgKIAotCW1vdnEJbW03LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXQk7IG1tNz1bUERfREVTQ0FMRV9QMV0KKyAgICAgICAgbW92cSAgICBtbTcsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldIDsgbW03PVtQRF9ERVNDQUxFX1AxXQogCi0JcGFkZGQJbW0zLG1tNwotCXBhZGRkCW1tMCxtbTcKLQlwc3JhZAltbTMsREVTQ0FMRV9QMQotCXBzcmFkCW1tMCxERVNDQUxFX1AxCi0JcGFkZGQJbW01LG1tNwotCXBhZGRkCW1tNixtbTcKLQlwc3JhZAltbTUsREVTQ0FMRV9QMQotCXBzcmFkCW1tNixERVNDQUxFX1AxCisgICAgICAgIHBhZGRkICAgbW0zLG1tNworICAgICAgICBwYWRkZCAgIG1tMCxtbTcKKyAgICAgICAgcHNyYWQgICBtbTMsREVTQ0FMRV9QMQorICAgICAgICBwc3JhZCAgIG1tMCxERVNDQUxFX1AxCisgICAgICAgIHBhZGRkICAgbW01LG1tNworICAgICAgICBwYWRkZCAgIG1tNixtbTcKKyAgICAgICAgcHNyYWQgICBtbTUsREVTQ0FMRV9QMQorICAgICAgICBwc3JhZCAgIG1tNixERVNDQUxFX1AxCiAKLQlwYWNrc3NkdyAgbW0zLG1tMAkJOyBtbTM9ZGF0YTI9KDIwIDIxIDIyIDIzKQotCXBhY2tzc2R3ICBtbTUsbW02CQk7IG1tNT1kYXRhNT0oNTAgNTEgNTIgNTMpCisgICAgICAgIHBhY2tzc2R3ICBtbTMsbW0wICAgICAgICAgICAgICAgOyBtbTM9ZGF0YTI9KDIwIDIxIDIyIDIzKQorICAgICAgICBwYWNrc3NkdyAgbW01LG1tNiAgICAgICAgICAgICAgIDsgbW01PWRhdGE1PSg1MCA1MSA1MiA1MykKIAotCW1vdnEJbW0xLCBNTVdPUkQgW3drKDIpXQk7IG1tMT10bXAxM0wKLQltb3ZxCW1tNCwgTU1XT1JEIFt3aygzKV0JOyBtbTQ9dG1wMTNICi0JbW92cQltbTIsIE1NV09SRCBbd2soOCldCTsgbW0yPXRtcDBMCi0JbW92cQltbTcsIE1NV09SRCBbd2soOSldCTsgbW03PXRtcDBICisgICAgICAgIG1vdnEgICAgbW0xLCBNTVdPUkQgW3drKDIpXSAgICAgOyBtbTE9dG1wMTNMCisgICAgICAgIG1vdnEgICAgbW00LCBNTVdPUkQgW3drKDMpXSAgICAgOyBtbTQ9dG1wMTNICisgICAgICAgIG1vdnEgICAgbW0yLCBNTVdPUkQgW3drKDgpXSAgICAgOyBtbTI9dG1wMEwKKyAgICAgICAgbW92cSAgICBtbTcsIE1NV09SRCBbd2soOSldICAgICA7IG1tNz10bXAwSAogCi0JbW92cQltbTAsbW0xCi0JbW92cQltbTYsbW00Ci0JcGFkZGQJbW0xLG1tMgkJCTsgbW0xPWRhdGEzTAotCXBhZGRkCW1tNCxtbTcJCQk7IG1tND1kYXRhM0gKLQlwc3ViZAltbTAsbW0yCQkJOyBtbTA9ZGF0YTRMCi0JcHN1YmQJbW02LG1tNwkJCTsgbW02PWRhdGE0SAorICAgICAgICBtb3ZxICAgIG1tMCxtbTEKKyAgICAgICAgbW92cSAgICBtbTYsbW00CisgICAgICAgIHBhZGRkICAgbW0xLG1tMiAgICAgICAgICAgICAgICAgOyBtbTE9ZGF0YTNMCisgICAgICAgIHBhZGRkICAgbW00LG1tNyAgICAgICAgICAgICAgICAgOyBtbTQ9ZGF0YTNICisgICAgICAgIHBzdWJkICAgbW0wLG1tMiAgICAgICAgICAgICAgICAgOyBtbTA9ZGF0YTRMCisgICAgICAgIHBzdWJkICAgbW02LG1tNyAgICAgICAgICAgICAgICAgOyBtbTY9ZGF0YTRICiAKLQltb3ZxCW1tMixbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0JOyBtbTI9W1BEX0RFU0NBTEVfUDFdCisgICAgICAgIG1vdnEgICAgbW0yLFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXSA7IG1tMj1bUERfREVTQ0FMRV9QMV0KIAotCXBhZGRkCW1tMSxtbTIKLQlwYWRkZAltbTQsbW0yCi0JcHNyYWQJbW0xLERFU0NBTEVfUDEKLQlwc3JhZAltbTQsREVTQ0FMRV9QMQotCXBhZGRkCW1tMCxtbTIKLQlwYWRkZAltbTYsbW0yCi0JcHNyYWQJbW0wLERFU0NBTEVfUDEKLQlwc3JhZAltbTYsREVTQ0FMRV9QMQorICAgICAgICBwYWRkZCAgIG1tMSxtbTIKKyAgICAgICAgcGFkZGQgICBtbTQsbW0yCisgICAgICAgIHBzcmFkICAgbW0xLERFU0NBTEVfUDEKKyAgICAgICAgcHNyYWQgICBtbTQsREVTQ0FMRV9QMQorICAgICAgICBwYWRkZCAgIG1tMCxtbTIKKyAgICAgICAgcGFkZGQgICBtbTYsbW0yCisgICAgICAgIHBzcmFkICAgbW0wLERFU0NBTEVfUDEKKyAgICAgICAgcHNyYWQgICBtbTYsREVTQ0FMRV9QMQogCi0JcGFja3NzZHcgIG1tMSxtbTQJCTsgbW0xPWRhdGEzPSgzMCAzMSAzMiAzMykKLQlwYWNrc3NkdyAgbW0wLG1tNgkJOyBtbTA9ZGF0YTQ9KDQwIDQxIDQyIDQzKQorICAgICAgICBwYWNrc3NkdyAgbW0xLG1tNCAgICAgICAgICAgICAgIDsgbW0xPWRhdGEzPSgzMCAzMSAzMiAzMykKKyAgICAgICAgcGFja3NzZHcgIG1tMCxtbTYgICAgICAgICAgICAgICA7IG1tMD1kYXRhND0oNDAgNDEgNDIgNDMpCiAKLQltb3ZxCW1tNywgTU1XT1JEIFt3aygwKV0JOyBtbTc9KDAwIDEwIDAxIDExKQotCW1vdnEJbW0yLCBNTVdPUkQgW3drKDEpXQk7IG1tMj0oMDIgMTIgMDMgMTMpCisgICAgICAgIG1vdnEgICAgbW03LCBNTVdPUkQgW3drKDApXSAgICAgOyBtbTc9KDAwIDEwIDAxIDExKQorICAgICAgICBtb3ZxICAgIG1tMiwgTU1XT1JEIFt3aygxKV0gICAgIDsgbW0yPSgwMiAxMiAwMyAxMykKIAotCW1vdnEgICAgICBtbTQsbW0zCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKLQlwdW5wY2tsd2QgbW0zLG1tMQkJOyBtbTM9KDIwIDMwIDIxIDMxKQotCXB1bnBja2h3ZCBtbTQsbW0xCQk7IG1tND0oMjIgMzIgMjMgMzMpCi0JbW92cSAgICAgIG1tNixtbTAJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQotCXB1bnBja2x3ZCBtbTAsbW01CQk7IG1tMD0oNDAgNTAgNDEgNTEpCi0JcHVucGNraHdkIG1tNixtbTUJCTsgbW02PSg0MiA1MiA0MyA1MykKKyAgICAgICAgbW92cSAgICAgIG1tNCxtbTMgICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICAgICAgcHVucGNrbHdkIG1tMyxtbTEgICAgICAgICAgICAgICA7IG1tMz0oMjAgMzAgMjEgMzEpCisgICAgICAgIHB1bnBja2h3ZCBtbTQsbW0xICAgICAgICAgICAgICAgOyBtbTQ9KDIyIDMyIDIzIDMzKQorICAgICAgICBtb3ZxICAgICAgbW02LG1tMCAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgICAgICBwdW5wY2tsd2QgbW0wLG1tNSAgICAgICAgICAgICAgIDsgbW0wPSg0MCA1MCA0MSA1MSkKKyAgICAgICAgcHVucGNraHdkIG1tNixtbTUgICAgICAgICAgICAgICA7IG1tNj0oNDIgNTIgNDMgNTMpCiAKLQltb3ZxICAgICAgbW0xLG1tNwkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCi0JcHVucGNrbGRxIG1tNyxtbTMJCTsgbW03PSgwMCAxMCAyMCAzMCkKLQlwdW5wY2toZHEgbW0xLG1tMwkJOyBtbTE9KDAxIDExIDIxIDMxKQotCW1vdnEgICAgICBtbTUsbW0yCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKLQlwdW5wY2tsZHEgbW0yLG1tNAkJOyBtbTI9KDAyIDEyIDIyIDMyKQotCXB1bnBja2hkcSBtbTUsbW00CQk7IG1tNT0oMDMgMTMgMjMgMzMpCisgICAgICAgIG1vdnEgICAgICBtbTEsbW03ICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgICAgIHB1bnBja2xkcSBtbTcsbW0zICAgICAgICAgICAgICAgOyBtbTc9KDAwIDEwIDIwIDMwKQorICAgICAgICBwdW5wY2toZHEgbW0xLG1tMyAgICAgICAgICAgICAgIDsgbW0xPSgwMSAxMSAyMSAzMSkKKyAgICAgICAgbW92cSAgICAgIG1tNSxtbTIgICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICAgICAgcHVucGNrbGRxIG1tMixtbTQgICAgICAgICAgICAgICA7IG1tMj0oMDIgMTIgMjIgMzIpCisgICAgICAgIHB1bnBja2hkcSBtbTUsbW00ICAgICAgICAgICAgICAgOyBtbTU9KDAzIDEzIDIzIDMzKQogCi0JbW92cQltbTMsIE1NV09SRCBbd2soNCldCTsgbW0zPSg2MCA3MCA2MSA3MSkKLQltb3ZxCW1tNCwgTU1XT1JEIFt3ayg1KV0JOyBtbTQ9KDYyIDcyIDYzIDczKQorICAgICAgICBtb3ZxICAgIG1tMywgTU1XT1JEIFt3ayg0KV0gICAgIDsgbW0zPSg2MCA3MCA2MSA3MSkKKyAgICAgICAgbW92cSAgICBtbTQsIE1NV09SRCBbd2soNSldICAgICA7IG1tND0oNjIgNzIgNjMgNzMpCiAKLQltb3ZxCU1NV09SRCBbTU1CTE9DSygwLDAsZWRpLFNJWkVPRl9KQ09FRildLCBtbTcKLQltb3ZxCU1NV09SRCBbTU1CTE9DSygxLDAsZWRpLFNJWkVPRl9KQ09FRildLCBtbTEKLQltb3ZxCU1NV09SRCBbTU1CTE9DSygyLDAsZWRpLFNJWkVPRl9KQ09FRildLCBtbTIKLQltb3ZxCU1NV09SRCBbTU1CTE9DSygzLDAsZWRpLFNJWkVPRl9KQ09FRildLCBtbTUKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMCwwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW03CisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtNTUJMT0NLKDEsMCxlZGksU0laRU9GX0pDT0VGKV0sIG1tMQorICAgICAgICBtb3ZxICAgIE1NV09SRCBbTU1CTE9DSygyLDAsZWRpLFNJWkVPRl9KQ09FRildLCBtbTIKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMywwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW01CiAKLQltb3ZxICAgICAgbW03LG1tMAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCi0JcHVucGNrbGRxIG1tMCxtbTMJCTsgbW0wPSg0MCA1MCA2MCA3MCkKLQlwdW5wY2toZHEgbW03LG1tMwkJOyBtbTc9KDQxIDUxIDYxIDcxKQotCW1vdnEgICAgICBtbTEsbW02CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKLQlwdW5wY2tsZHEgbW02LG1tNAkJOyBtbTY9KDQyIDUyIDYyIDcyKQotCXB1bnBja2hkcSBtbTEsbW00CQk7IG1tMT0oNDMgNTMgNjMgNzMpCisgICAgICAgIG1vdnEgICAgICBtbTcsbW0wICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgICAgIHB1bnBja2xkcSBtbTAsbW0zICAgICAgICAgICAgICAgOyBtbTA9KDQwIDUwIDYwIDcwKQorICAgICAgICBwdW5wY2toZHEgbW03LG1tMyAgICAgICAgICAgICAgIDsgbW03PSg0MSA1MSA2MSA3MSkKKyAgICAgICAgbW92cSAgICAgIG1tMSxtbTYgICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICAgICAgcHVucGNrbGRxIG1tNixtbTQgICAgICAgICAgICAgICA7IG1tNj0oNDIgNTIgNjIgNzIpCisgICAgICAgIHB1bnBja2hkcSBtbTEsbW00ICAgICAgICAgICAgICAgOyBtbTE9KDQzIDUzIDYzIDczKQogCi0JbW92cQlNTVdPUkQgW01NQkxPQ0soMCwxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0wCi0JbW92cQlNTVdPUkQgW01NQkxPQ0soMSwxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW03Ci0JbW92cQlNTVdPUkQgW01NQkxPQ0soMiwxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW02Ci0JbW92cQlNTVdPUkQgW01NQkxPQ0soMywxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0xCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtNTUJMT0NLKDAsMSxlZGksU0laRU9GX0pDT0VGKV0sIG1tMAorICAgICAgICBtb3ZxICAgIE1NV09SRCBbTU1CTE9DSygxLDEsZWRpLFNJWkVPRl9KQ09FRildLCBtbTcKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMiwxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW02CisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtNTUJMT0NLKDMsMSxlZGksU0laRU9GX0pDT0VGKV0sIG1tMQogCiAubmV4dGNvbHVtbjoKLQlhZGQJZXNpLCBieXRlIDQqU0laRU9GX0pDT0VGCQk7IGNvZWZfYmxvY2sKLQlhZGQJZWR4LCBieXRlIDQqU0laRU9GX0lTTE9XX01VTFRfVFlQRQk7IHF1YW50cHRyCi0JYWRkCWVkaSwgYnl0ZSA0KkRDVFNJWkUqU0laRU9GX0pDT0VGCTsgd3NwdHIKLQlkZWMJZWN4CQkJCQk7IGN0cgotCWpuegluZWFyIC5jb2x1bW5sb29wCisgICAgICAgIGFkZCAgICAgZXNpLCBieXRlIDQqU0laRU9GX0pDT0VGICAgICAgICAgICAgICAgIDsgY29lZl9ibG9jaworICAgICAgICBhZGQgICAgIGVkeCwgYnl0ZSA0KlNJWkVPRl9JU0xPV19NVUxUX1RZUEUgICAgICA7IHF1YW50cHRyCisgICAgICAgIGFkZCAgICAgZWRpLCBieXRlIDQqRENUU0laRSpTSVpFT0ZfSkNPRUYgICAgICAgIDsgd3NwdHIKKyAgICAgICAgZGVjICAgICBlY3ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBjdHIKKyAgICAgICAgam56ICAgICBuZWFyIC5jb2x1bW5sb29wCiAKLQk7IC0tLS0gUGFzcyAyOiBwcm9jZXNzIHJvd3MgZnJvbSB3b3JrIGFycmF5LCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4KKyAgICAgICAgOyAtLS0tIFBhc3MgMjogcHJvY2VzcyByb3dzIGZyb20gd29yayBhcnJheSwgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuCiAKLQltb3YJZWF4LCBbb3JpZ2luYWxfZWJwXQotCWxlYQllc2ksIFt3b3Jrc3BhY2VdCQkJOyBKQ09FRiAqIHdzcHRyCi0JbW92CWVkaSwgSlNBTVBBUlJBWSBbb3V0cHV0X2J1ZihlYXgpXQk7IChKU0FNUFJPVyAqKQotCW1vdgllYXgsIEpESU1FTlNJT04gW291dHB1dF9jb2woZWF4KV0KLQltb3YJZWN4LCBEQ1RTSVpFLzQJCQkJOyBjdHIKLQlhbGlnbngJMTYsNworICAgICAgICBtb3YgICAgIGVheCwgW29yaWdpbmFsX2VicF0KKyAgICAgICAgbGVhICAgICBlc2ksIFt3b3Jrc3BhY2VdICAgICAgICAgICAgICAgICAgICAgICAgOyBKQ09FRiAqIHdzcHRyCisgICAgICAgIG1vdiAgICAgZWRpLCBKU0FNUEFSUkFZIFtvdXRwdXRfYnVmKGVheCldICAgICAgIDsgKEpTQU1QUk9XICopCisgICAgICAgIG1vdiAgICAgZWF4LCBKRElNRU5TSU9OIFtvdXRwdXRfY29sKGVheCldCisgICAgICAgIG1vdiAgICAgZWN4LCBEQ1RTSVpFLzQgICAgICAgICAgICAgICAgICAgICAgICAgIDsgY3RyCisgICAgICAgIGFsaWdueCAgMTYsNwogLnJvd2xvb3A6CiAKLQk7IC0tIEV2ZW4gcGFydAorICAgICAgICA7IC0tIEV2ZW4gcGFydAogCi0JbW92cQltbTAsIE1NV09SRCBbTU1CTE9DSygwLDAsZXNpLFNJWkVPRl9KQ09FRildCi0JbW92cQltbTEsIE1NV09SRCBbTU1CTE9DSygyLDAsZXNpLFNJWkVPRl9KQ09FRildCi0JbW92cQltbTIsIE1NV09SRCBbTU1CTE9DSyg0LDAsZXNpLFNJWkVPRl9KQ09FRildCi0JbW92cQltbTMsIE1NV09SRCBbTU1CTE9DSyg2LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdnEgICAgbW0wLCBNTVdPUkQgW01NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBtb3ZxICAgIG1tMSwgTU1XT1JEIFtNTUJMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgbW92cSAgICBtbTIsIE1NV09SRCBbTU1CTE9DSyg0LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdnEgICAgbW0zLCBNTVdPUkQgW01NQkxPQ0soNiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQogCi0JOyAoT3JpZ2luYWwpCi0JOyB6MSA9ICh6MiArIHozKSAqIDAuNTQxMTk2MTAwOwotCTsgdG1wMiA9IHoxICsgejMgKiAtMS44NDc3NTkwNjU7Ci0JOyB0bXAzID0gejEgKyB6MiAqIDAuNzY1MzY2ODY1OwotCTsKLQk7IChUaGlzIGltcGxlbWVudGF0aW9uKQotCTsgdG1wMiA9IHoyICogMC41NDExOTYxMDAgKyB6MyAqICgwLjU0MTE5NjEwMCAtIDEuODQ3NzU5MDY1KTsKLQk7IHRtcDMgPSB6MiAqICgwLjU0MTE5NjEwMCArIDAuNzY1MzY2ODY1KSArIHozICogMC41NDExOTYxMDA7CisgICAgICAgIDsgKE9yaWdpbmFsKQorICAgICAgICA7IHoxID0gKHoyICsgejMpICogMC41NDExOTYxMDA7CisgICAgICAgIDsgdG1wMiA9IHoxICsgejMgKiAtMS44NDc3NTkwNjU7CisgICAgICAgIDsgdG1wMyA9IHoxICsgejIgKiAwLjc2NTM2Njg2NTsKKyAgICAgICAgOworICAgICAgICA7IChUaGlzIGltcGxlbWVudGF0aW9uKQorICAgICAgICA7IHRtcDIgPSB6MiAqIDAuNTQxMTk2MTAwICsgejMgKiAoMC41NDExOTYxMDAgLSAxLjg0Nzc1OTA2NSk7CisgICAgICAgIDsgdG1wMyA9IHoyICogKDAuNTQxMTk2MTAwICsgMC43NjUzNjY4NjUpICsgejMgKiAwLjU0MTE5NjEwMDsKIAotCW1vdnEgICAgICBtbTQsbW0xCQk7IG1tMT1pbjI9ejIKLQltb3ZxICAgICAgbW01LG1tMQotCXB1bnBja2x3ZCBtbTQsbW0zCQk7IG1tMz1pbjY9ejMKLQlwdW5wY2tod2QgbW01LG1tMwotCW1vdnEgICAgICBtbTEsbW00Ci0JbW92cSAgICAgIG1tMyxtbTUKLQlwbWFkZHdkICAgbW00LFtHT1RPRkYoZWJ4LFBXX0YxMzBfRjA1NCldCTsgbW00PXRtcDNMCi0JcG1hZGR3ZCAgIG1tNSxbR09UT0ZGKGVieCxQV19GMTMwX0YwNTQpXQk7IG1tNT10bXAzSAotCXBtYWRkd2QgICBtbTEsW0dPVE9GRihlYngsUFdfRjA1NF9NRjEzMCldCTsgbW0xPXRtcDJMCi0JcG1hZGR3ZCAgIG1tMyxbR09UT0ZGKGVieCxQV19GMDU0X01GMTMwKV0JOyBtbTM9dG1wMkgKKyAgICAgICAgbW92cSAgICAgIG1tNCxtbTEgICAgICAgICAgICAgICA7IG1tMT1pbjI9ejIKKyAgICAgICAgbW92cSAgICAgIG1tNSxtbTEKKyAgICAgICAgcHVucGNrbHdkIG1tNCxtbTMgICAgICAgICAgICAgICA7IG1tMz1pbjY9ejMKKyAgICAgICAgcHVucGNraHdkIG1tNSxtbTMKKyAgICAgICAgbW92cSAgICAgIG1tMSxtbTQKKyAgICAgICAgbW92cSAgICAgIG1tMyxtbTUKKyAgICAgICAgcG1hZGR3ZCAgIG1tNCxbR09UT0ZGKGVieCxQV19GMTMwX0YwNTQpXSAgICAgICAgOyBtbTQ9dG1wM0wKKyAgICAgICAgcG1hZGR3ZCAgIG1tNSxbR09UT0ZGKGVieCxQV19GMTMwX0YwNTQpXSAgICAgICAgOyBtbTU9dG1wM0gKKyAgICAgICAgcG1hZGR3ZCAgIG1tMSxbR09UT0ZGKGVieCxQV19GMDU0X01GMTMwKV0gICAgICAgOyBtbTE9dG1wMkwKKyAgICAgICAgcG1hZGR3ZCAgIG1tMyxbR09UT0ZGKGVieCxQV19GMDU0X01GMTMwKV0gICAgICAgOyBtbTM9dG1wMkgKIAotCW1vdnEgICAgICBtbTYsbW0wCi0JcGFkZHcgICAgIG1tMCxtbTIJCTsgbW0wPWluMCtpbjQKLQlwc3VidyAgICAgbW02LG1tMgkJOyBtbTY9aW4wLWluNAorICAgICAgICBtb3ZxICAgICAgbW02LG1tMAorICAgICAgICBwYWRkdyAgICAgbW0wLG1tMiAgICAgICAgICAgICAgIDsgbW0wPWluMCtpbjQKKyAgICAgICAgcHN1YncgICAgIG1tNixtbTIgICAgICAgICAgICAgICA7IG1tNj1pbjAtaW40CiAKLQlweG9yICAgICAgbW03LG1tNwotCXB4b3IgICAgICBtbTIsbW0yCi0JcHVucGNrbHdkIG1tNyxtbTAJCTsgbW03PXRtcDBMCi0JcHVucGNraHdkIG1tMixtbTAJCTsgbW0yPXRtcDBICi0JcHNyYWQgICAgIG1tNywoMTYtQ09OU1RfQklUUykJOyBwc3JhZCBtbTcsMTYgJiBwc2xsZCBtbTcsQ09OU1RfQklUUwotCXBzcmFkICAgICBtbTIsKDE2LUNPTlNUX0JJVFMpCTsgcHNyYWQgbW0yLDE2ICYgcHNsbGQgbW0yLENPTlNUX0JJVFMKKyAgICAgICAgcHhvciAgICAgIG1tNyxtbTcKKyAgICAgICAgcHhvciAgICAgIG1tMixtbTIKKyAgICAgICAgcHVucGNrbHdkIG1tNyxtbTAgICAgICAgICAgICAgICA7IG1tNz10bXAwTAorICAgICAgICBwdW5wY2tod2QgbW0yLG1tMCAgICAgICAgICAgICAgIDsgbW0yPXRtcDBICisgICAgICAgIHBzcmFkICAgICBtbTcsKDE2LUNPTlNUX0JJVFMpICAgOyBwc3JhZCBtbTcsMTYgJiBwc2xsZCBtbTcsQ09OU1RfQklUUworICAgICAgICBwc3JhZCAgICAgbW0yLCgxNi1DT05TVF9CSVRTKSAgIDsgcHNyYWQgbW0yLDE2ICYgcHNsbGQgbW0yLENPTlNUX0JJVFMKIAotCW1vdnEJbW0wLG1tNwotCXBhZGRkCW1tNyxtbTQJCQk7IG1tNz10bXAxMEwKLQlwc3ViZAltbTAsbW00CQkJOyBtbTA9dG1wMTNMCi0JbW92cQltbTQsbW0yCi0JcGFkZGQJbW0yLG1tNQkJCTsgbW0yPXRtcDEwSAotCXBzdWJkCW1tNCxtbTUJCQk7IG1tND10bXAxM0gKKyAgICAgICAgbW92cSAgICBtbTAsbW03CisgICAgICAgIHBhZGRkICAgbW03LG1tNCAgICAgICAgICAgICAgICAgOyBtbTc9dG1wMTBMCisgICAgICAgIHBzdWJkICAgbW0wLG1tNCAgICAgICAgICAgICAgICAgOyBtbTA9dG1wMTNMCisgICAgICAgIG1vdnEgICAgbW00LG1tMgorICAgICAgICBwYWRkZCAgIG1tMixtbTUgICAgICAgICAgICAgICAgIDsgbW0yPXRtcDEwSAorICAgICAgICBwc3ViZCAgIG1tNCxtbTUgICAgICAgICAgICAgICAgIDsgbW00PXRtcDEzSAogCi0JbW92cQlNTVdPUkQgW3drKDApXSwgbW03CTsgd2soMCk9dG1wMTBMCi0JbW92cQlNTVdPUkQgW3drKDEpXSwgbW0yCTsgd2soMSk9dG1wMTBICi0JbW92cQlNTVdPUkQgW3drKDIpXSwgbW0wCTsgd2soMik9dG1wMTNMCi0JbW92cQlNTVdPUkQgW3drKDMpXSwgbW00CTsgd2soMyk9dG1wMTNICisgICAgICAgIG1vdnEgICAgTU1XT1JEIFt3aygwKV0sIG1tNyAgICAgOyB3aygwKT10bXAxMEwKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW3drKDEpXSwgbW0yICAgICA7IHdrKDEpPXRtcDEwSAorICAgICAgICBtb3ZxICAgIE1NV09SRCBbd2soMildLCBtbTAgICAgIDsgd2soMik9dG1wMTNMCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFt3aygzKV0sIG1tNCAgICAgOyB3aygzKT10bXAxM0gKIAotCXB4b3IgICAgICBtbTUsbW01Ci0JcHhvciAgICAgIG1tNyxtbTcKLQlwdW5wY2tsd2QgbW01LG1tNgkJOyBtbTU9dG1wMUwKLQlwdW5wY2tod2QgbW03LG1tNgkJOyBtbTc9dG1wMUgKLQlwc3JhZCAgICAgbW01LCgxNi1DT05TVF9CSVRTKQk7IHBzcmFkIG1tNSwxNiAmIHBzbGxkIG1tNSxDT05TVF9CSVRTCi0JcHNyYWQgICAgIG1tNywoMTYtQ09OU1RfQklUUykJOyBwc3JhZCBtbTcsMTYgJiBwc2xsZCBtbTcsQ09OU1RfQklUUworICAgICAgICBweG9yICAgICAgbW01LG1tNQorICAgICAgICBweG9yICAgICAgbW03LG1tNworICAgICAgICBwdW5wY2tsd2QgbW01LG1tNiAgICAgICAgICAgICAgIDsgbW01PXRtcDFMCisgICAgICAgIHB1bnBja2h3ZCBtbTcsbW02ICAgICAgICAgICAgICAgOyBtbTc9dG1wMUgKKyAgICAgICAgcHNyYWQgICAgIG1tNSwoMTYtQ09OU1RfQklUUykgICA7IHBzcmFkIG1tNSwxNiAmIHBzbGxkIG1tNSxDT05TVF9CSVRTCisgICAgICAgIHBzcmFkICAgICBtbTcsKDE2LUNPTlNUX0JJVFMpICAgOyBwc3JhZCBtbTcsMTYgJiBwc2xsZCBtbTcsQ09OU1RfQklUUwogCi0JbW92cQltbTIsbW01Ci0JcGFkZGQJbW01LG1tMQkJCTsgbW01PXRtcDExTAotCXBzdWJkCW1tMixtbTEJCQk7IG1tMj10bXAxMkwKLQltb3ZxCW1tMCxtbTcKLQlwYWRkZAltbTcsbW0zCQkJOyBtbTc9dG1wMTFICi0JcHN1YmQJbW0wLG1tMwkJCTsgbW0wPXRtcDEySAorICAgICAgICBtb3ZxICAgIG1tMixtbTUKKyAgICAgICAgcGFkZGQgICBtbTUsbW0xICAgICAgICAgICAgICAgICA7IG1tNT10bXAxMUwKKyAgICAgICAgcHN1YmQgICBtbTIsbW0xICAgICAgICAgICAgICAgICA7IG1tMj10bXAxMkwKKyAgICAgICAgbW92cSAgICBtbTAsbW03CisgICAgICAgIHBhZGRkICAgbW03LG1tMyAgICAgICAgICAgICAgICAgOyBtbTc9dG1wMTFICisgICAgICAgIHBzdWJkICAgbW0wLG1tMyAgICAgICAgICAgICAgICAgOyBtbTA9dG1wMTJICiAKLQltb3ZxCU1NV09SRCBbd2soNCldLCBtbTUJOyB3ayg0KT10bXAxMUwKLQltb3ZxCU1NV09SRCBbd2soNSldLCBtbTcJOyB3ayg1KT10bXAxMUgKLQltb3ZxCU1NV09SRCBbd2soNildLCBtbTIJOyB3ayg2KT10bXAxMkwKLQltb3ZxCU1NV09SRCBbd2soNyldLCBtbTAJOyB3ayg3KT10bXAxMkgKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW3drKDQpXSwgbW01ICAgICA7IHdrKDQpPXRtcDExTAorICAgICAgICBtb3ZxICAgIE1NV09SRCBbd2soNSldLCBtbTcgICAgIDsgd2soNSk9dG1wMTFICisgICAgICAgIG1vdnEgICAgTU1XT1JEIFt3ayg2KV0sIG1tMiAgICAgOyB3ayg2KT10bXAxMkwKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW3drKDcpXSwgbW0wICAgICA7IHdrKDcpPXRtcDEySAogCi0JOyAtLSBPZGQgcGFydAorICAgICAgICA7IC0tIE9kZCBwYXJ0CiAKLQltb3ZxCW1tNCwgTU1XT1JEIFtNTUJMT0NLKDEsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQltb3ZxCW1tNiwgTU1XT1JEIFtNTUJMT0NLKDMsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQltb3ZxCW1tMSwgTU1XT1JEIFtNTUJMT0NLKDUsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQltb3ZxCW1tMywgTU1XT1JEIFtNTUJMT0NLKDcsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgbW92cSAgICBtbTQsIE1NV09SRCBbTU1CTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdnEgICAgbW02LCBNTVdPUkQgW01NQkxPQ0soMywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBtb3ZxICAgIG1tMSwgTU1XT1JEIFtNTUJMT0NLKDUsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgbW92cSAgICBtbTMsIE1NV09SRCBbTU1CTE9DSyg3LDAsZXNpLFNJWkVPRl9KQ09FRildCiAKLQltb3ZxCW1tNSxtbTYKLQltb3ZxCW1tNyxtbTQKLQlwYWRkdwltbTUsbW0zCQkJOyBtbTU9ejMKLQlwYWRkdwltbTcsbW0xCQkJOyBtbTc9ejQKKyAgICAgICAgbW92cSAgICBtbTUsbW02CisgICAgICAgIG1vdnEgICAgbW03LG1tNAorICAgICAgICBwYWRkdyAgIG1tNSxtbTMgICAgICAgICAgICAgICAgIDsgbW01PXozCisgICAgICAgIHBhZGR3ICAgbW03LG1tMSAgICAgICAgICAgICAgICAgOyBtbTc9ejQKIAotCTsgKE9yaWdpbmFsKQotCTsgejUgPSAoejMgKyB6NCkgKiAxLjE3NTg3NTYwMjsKLQk7IHozID0gejMgKiAtMS45NjE1NzA1NjA7ICB6NCA9IHo0ICogLTAuMzkwMTgwNjQ0OwotCTsgejMgKz0gejU7ICB6NCArPSB6NTsKLQk7Ci0JOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKLQk7IHozID0gejMgKiAoMS4xNzU4NzU2MDIgLSAxLjk2MTU3MDU2MCkgKyB6NCAqIDEuMTc1ODc1NjAyOwotCTsgejQgPSB6MyAqIDEuMTc1ODc1NjAyICsgejQgKiAoMS4xNzU4NzU2MDIgLSAwLjM5MDE4MDY0NCk7CisgICAgICAgIDsgKE9yaWdpbmFsKQorICAgICAgICA7IHo1ID0gKHozICsgejQpICogMS4xNzU4NzU2MDI7CisgICAgICAgIDsgejMgPSB6MyAqIC0xLjk2MTU3MDU2MDsgIHo0ID0gejQgKiAtMC4zOTAxODA2NDQ7CisgICAgICAgIDsgejMgKz0gejU7ICB6NCArPSB6NTsKKyAgICAgICAgOworICAgICAgICA7IChUaGlzIGltcGxlbWVudGF0aW9uKQorICAgICAgICA7IHozID0gejMgKiAoMS4xNzU4NzU2MDIgLSAxLjk2MTU3MDU2MCkgKyB6NCAqIDEuMTc1ODc1NjAyOworICAgICAgICA7IHo0ID0gejMgKiAxLjE3NTg3NTYwMiArIHo0ICogKDEuMTc1ODc1NjAyIC0gMC4zOTAxODA2NDQpOwogCi0JbW92cSAgICAgIG1tMixtbTUKLQltb3ZxICAgICAgbW0wLG1tNQotCXB1bnBja2x3ZCBtbTIsbW03Ci0JcHVucGNraHdkIG1tMCxtbTcKLQltb3ZxICAgICAgbW01LG1tMgotCW1vdnEgICAgICBtbTcsbW0wCi0JcG1hZGR3ZCAgIG1tMixbR09UT0ZGKGVieCxQV19NRjA3OF9GMTE3KV0JOyBtbTI9ejNMCi0JcG1hZGR3ZCAgIG1tMCxbR09UT0ZGKGVieCxQV19NRjA3OF9GMTE3KV0JOyBtbTA9ejNICi0JcG1hZGR3ZCAgIG1tNSxbR09UT0ZGKGVieCxQV19GMTE3X0YwNzgpXQk7IG1tNT16NEwKLQlwbWFkZHdkICAgbW03LFtHT1RPRkYoZWJ4LFBXX0YxMTdfRjA3OCldCTsgbW03PXo0SAorICAgICAgICBtb3ZxICAgICAgbW0yLG1tNQorICAgICAgICBtb3ZxICAgICAgbW0wLG1tNQorICAgICAgICBwdW5wY2tsd2QgbW0yLG1tNworICAgICAgICBwdW5wY2tod2QgbW0wLG1tNworICAgICAgICBtb3ZxICAgICAgbW01LG1tMgorICAgICAgICBtb3ZxICAgICAgbW03LG1tMAorICAgICAgICBwbWFkZHdkICAgbW0yLFtHT1RPRkYoZWJ4LFBXX01GMDc4X0YxMTcpXSAgICAgICA7IG1tMj16M0wKKyAgICAgICAgcG1hZGR3ZCAgIG1tMCxbR09UT0ZGKGVieCxQV19NRjA3OF9GMTE3KV0gICAgICAgOyBtbTA9ejNICisgICAgICAgIHBtYWRkd2QgICBtbTUsW0dPVE9GRihlYngsUFdfRjExN19GMDc4KV0gICAgICAgIDsgbW01PXo0TAorICAgICAgICBwbWFkZHdkICAgbW03LFtHT1RPRkYoZWJ4LFBXX0YxMTdfRjA3OCldICAgICAgICA7IG1tNz16NEgKIAotCW1vdnEJTU1XT1JEIFt3aygxMCldLCBtbTIJOyB3aygxMCk9ejNMCi0JbW92cQlNTVdPUkQgW3drKDExKV0sIG1tMAk7IHdrKDExKT16M0gKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW3drKDEwKV0sIG1tMiAgICA7IHdrKDEwKT16M0wKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW3drKDExKV0sIG1tMCAgICA7IHdrKDExKT16M0gKIAotCTsgKE9yaWdpbmFsKQotCTsgejEgPSB0bXAwICsgdG1wMzsgIHoyID0gdG1wMSArIHRtcDI7Ci0JOyB0bXAwID0gdG1wMCAqIDAuMjk4NjMxMzM2OyAgdG1wMSA9IHRtcDEgKiAyLjA1MzExOTg2OTsKLQk7IHRtcDIgPSB0bXAyICogMy4wNzI3MTEwMjY7ICB0bXAzID0gdG1wMyAqIDEuNTAxMzIxMTEwOwotCTsgejEgPSB6MSAqIC0wLjg5OTk3NjIyMzsgIHoyID0gejIgKiAtMi41NjI5MTU0NDc7Ci0JOyB0bXAwICs9IHoxICsgejM7ICB0bXAxICs9IHoyICsgejQ7Ci0JOyB0bXAyICs9IHoyICsgejM7ICB0bXAzICs9IHoxICsgejQ7Ci0JOwotCTsgKFRoaXMgaW1wbGVtZW50YXRpb24pCi0JOyB0bXAwID0gdG1wMCAqICgwLjI5ODYzMTMzNiAtIDAuODk5OTc2MjIzKSArIHRtcDMgKiAtMC44OTk5NzYyMjM7Ci0JOyB0bXAxID0gdG1wMSAqICgyLjA1MzExOTg2OSAtIDIuNTYyOTE1NDQ3KSArIHRtcDIgKiAtMi41NjI5MTU0NDc7Ci0JOyB0bXAyID0gdG1wMSAqIC0yLjU2MjkxNTQ0NyArIHRtcDIgKiAoMy4wNzI3MTEwMjYgLSAyLjU2MjkxNTQ0Nyk7Ci0JOyB0bXAzID0gdG1wMCAqIC0wLjg5OTk3NjIyMyArIHRtcDMgKiAoMS41MDEzMjExMTAgLSAwLjg5OTk3NjIyMyk7Ci0JOyB0bXAwICs9IHozOyAgdG1wMSArPSB6NDsKLQk7IHRtcDIgKz0gejM7ICB0bXAzICs9IHo0OworICAgICAgICA7IChPcmlnaW5hbCkKKyAgICAgICAgOyB6MSA9IHRtcDAgKyB0bXAzOyAgejIgPSB0bXAxICsgdG1wMjsKKyAgICAgICAgOyB0bXAwID0gdG1wMCAqIDAuMjk4NjMxMzM2OyAgdG1wMSA9IHRtcDEgKiAyLjA1MzExOTg2OTsKKyAgICAgICAgOyB0bXAyID0gdG1wMiAqIDMuMDcyNzExMDI2OyAgdG1wMyA9IHRtcDMgKiAxLjUwMTMyMTExMDsKKyAgICAgICAgOyB6MSA9IHoxICogLTAuODk5OTc2MjIzOyAgejIgPSB6MiAqIC0yLjU2MjkxNTQ0NzsKKyAgICAgICAgOyB0bXAwICs9IHoxICsgejM7ICB0bXAxICs9IHoyICsgejQ7CisgICAgICAgIDsgdG1wMiArPSB6MiArIHozOyAgdG1wMyArPSB6MSArIHo0OworICAgICAgICA7CisgICAgICAgIDsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisgICAgICAgIDsgdG1wMCA9IHRtcDAgKiAoMC4yOTg2MzEzMzYgLSAwLjg5OTk3NjIyMykgKyB0bXAzICogLTAuODk5OTc2MjIzOworICAgICAgICA7IHRtcDEgPSB0bXAxICogKDIuMDUzMTE5ODY5IC0gMi41NjI5MTU0NDcpICsgdG1wMiAqIC0yLjU2MjkxNTQ0NzsKKyAgICAgICAgOyB0bXAyID0gdG1wMSAqIC0yLjU2MjkxNTQ0NyArIHRtcDIgKiAoMy4wNzI3MTEwMjYgLSAyLjU2MjkxNTQ0Nyk7CisgICAgICAgIDsgdG1wMyA9IHRtcDAgKiAtMC44OTk5NzYyMjMgKyB0bXAzICogKDEuNTAxMzIxMTEwIC0gMC44OTk5NzYyMjMpOworICAgICAgICA7IHRtcDAgKz0gejM7ICB0bXAxICs9IHo0OworICAgICAgICA7IHRtcDIgKz0gejM7ICB0bXAzICs9IHo0OwogCi0JbW92cSAgICAgIG1tMixtbTMKLQltb3ZxICAgICAgbW0wLG1tMwotCXB1bnBja2x3ZCBtbTIsbW00Ci0JcHVucGNraHdkIG1tMCxtbTQKLQltb3ZxICAgICAgbW0zLG1tMgotCW1vdnEgICAgICBtbTQsbW0wCi0JcG1hZGR3ZCAgIG1tMixbR09UT0ZGKGVieCxQV19NRjA2MF9NRjA4OSldCTsgbW0yPXRtcDBMCi0JcG1hZGR3ZCAgIG1tMCxbR09UT0ZGKGVieCxQV19NRjA2MF9NRjA4OSldCTsgbW0wPXRtcDBICi0JcG1hZGR3ZCAgIG1tMyxbR09UT0ZGKGVieCxQV19NRjA4OV9GMDYwKV0JOyBtbTM9dG1wM0wKLQlwbWFkZHdkICAgbW00LFtHT1RPRkYoZWJ4LFBXX01GMDg5X0YwNjApXQk7IG1tND10bXAzSAorICAgICAgICBtb3ZxICAgICAgbW0yLG1tMworICAgICAgICBtb3ZxICAgICAgbW0wLG1tMworICAgICAgICBwdW5wY2tsd2QgbW0yLG1tNAorICAgICAgICBwdW5wY2tod2QgbW0wLG1tNAorICAgICAgICBtb3ZxICAgICAgbW0zLG1tMgorICAgICAgICBtb3ZxICAgICAgbW00LG1tMAorICAgICAgICBwbWFkZHdkICAgbW0yLFtHT1RPRkYoZWJ4LFBXX01GMDYwX01GMDg5KV0gICAgICA7IG1tMj10bXAwTAorICAgICAgICBwbWFkZHdkICAgbW0wLFtHT1RPRkYoZWJ4LFBXX01GMDYwX01GMDg5KV0gICAgICA7IG1tMD10bXAwSAorICAgICAgICBwbWFkZHdkICAgbW0zLFtHT1RPRkYoZWJ4LFBXX01GMDg5X0YwNjApXSAgICAgICA7IG1tMz10bXAzTAorICAgICAgICBwbWFkZHdkICAgbW00LFtHT1RPRkYoZWJ4LFBXX01GMDg5X0YwNjApXSAgICAgICA7IG1tND10bXAzSAogCi0JcGFkZGQJbW0yLCBNTVdPUkQgW3drKDEwKV0JOyBtbTI9dG1wMEwKLQlwYWRkZAltbTAsIE1NV09SRCBbd2soMTEpXQk7IG1tMD10bXAwSAotCXBhZGRkCW1tMyxtbTUJCQk7IG1tMz10bXAzTAotCXBhZGRkCW1tNCxtbTcJCQk7IG1tND10bXAzSAorICAgICAgICBwYWRkZCAgIG1tMiwgTU1XT1JEIFt3aygxMCldICAgIDsgbW0yPXRtcDBMCisgICAgICAgIHBhZGRkICAgbW0wLCBNTVdPUkQgW3drKDExKV0gICAgOyBtbTA9dG1wMEgKKyAgICAgICAgcGFkZGQgICBtbTMsbW01ICAgICAgICAgICAgICAgICA7IG1tMz10bXAzTAorICAgICAgICBwYWRkZCAgIG1tNCxtbTcgICAgICAgICAgICAgICAgIDsgbW00PXRtcDNICiAKLQltb3ZxCU1NV09SRCBbd2soOCldLCBtbTIJOyB3ayg4KT10bXAwTAotCW1vdnEJTU1XT1JEIFt3ayg5KV0sIG1tMAk7IHdrKDkpPXRtcDBICisgICAgICAgIG1vdnEgICAgTU1XT1JEIFt3ayg4KV0sIG1tMiAgICAgOyB3ayg4KT10bXAwTAorICAgICAgICBtb3ZxICAgIE1NV09SRCBbd2soOSldLCBtbTAgICAgIDsgd2soOSk9dG1wMEgKIAotCW1vdnEgICAgICBtbTIsbW0xCi0JbW92cSAgICAgIG1tMCxtbTEKLQlwdW5wY2tsd2QgbW0yLG1tNgotCXB1bnBja2h3ZCBtbTAsbW02Ci0JbW92cSAgICAgIG1tMSxtbTIKLQltb3ZxICAgICAgbW02LG1tMAotCXBtYWRkd2QgICBtbTIsW0dPVE9GRihlYngsUFdfTUYwNTBfTUYyNTYpXQk7IG1tMj10bXAxTAotCXBtYWRkd2QgICBtbTAsW0dPVE9GRihlYngsUFdfTUYwNTBfTUYyNTYpXQk7IG1tMD10bXAxSAotCXBtYWRkd2QgICBtbTEsW0dPVE9GRihlYngsUFdfTUYyNTZfRjA1MCldCTsgbW0xPXRtcDJMCi0JcG1hZGR3ZCAgIG1tNixbR09UT0ZGKGVieCxQV19NRjI1Nl9GMDUwKV0JOyBtbTY9dG1wMkgKKyAgICAgICAgbW92cSAgICAgIG1tMixtbTEKKyAgICAgICAgbW92cSAgICAgIG1tMCxtbTEKKyAgICAgICAgcHVucGNrbHdkIG1tMixtbTYKKyAgICAgICAgcHVucGNraHdkIG1tMCxtbTYKKyAgICAgICAgbW92cSAgICAgIG1tMSxtbTIKKyAgICAgICAgbW92cSAgICAgIG1tNixtbTAKKyAgICAgICAgcG1hZGR3ZCAgIG1tMixbR09UT0ZGKGVieCxQV19NRjA1MF9NRjI1NildICAgICAgOyBtbTI9dG1wMUwKKyAgICAgICAgcG1hZGR3ZCAgIG1tMCxbR09UT0ZGKGVieCxQV19NRjA1MF9NRjI1NildICAgICAgOyBtbTA9dG1wMUgKKyAgICAgICAgcG1hZGR3ZCAgIG1tMSxbR09UT0ZGKGVieCxQV19NRjI1Nl9GMDUwKV0gICAgICAgOyBtbTE9dG1wMkwKKyAgICAgICAgcG1hZGR3ZCAgIG1tNixbR09UT0ZGKGVieCxQV19NRjI1Nl9GMDUwKV0gICAgICAgOyBtbTY9dG1wMkgKIAotCXBhZGRkCW1tMixtbTUJCQk7IG1tMj10bXAxTAotCXBhZGRkCW1tMCxtbTcJCQk7IG1tMD10bXAxSAotCXBhZGRkCW1tMSwgTU1XT1JEIFt3aygxMCldCTsgbW0xPXRtcDJMCi0JcGFkZGQJbW02LCBNTVdPUkQgW3drKDExKV0JOyBtbTY9dG1wMkgKKyAgICAgICAgcGFkZGQgICBtbTIsbW01ICAgICAgICAgICAgICAgICA7IG1tMj10bXAxTAorICAgICAgICBwYWRkZCAgIG1tMCxtbTcgICAgICAgICAgICAgICAgIDsgbW0wPXRtcDFICisgICAgICAgIHBhZGRkICAgbW0xLCBNTVdPUkQgW3drKDEwKV0gICAgOyBtbTE9dG1wMkwKKyAgICAgICAgcGFkZGQgICBtbTYsIE1NV09SRCBbd2soMTEpXSAgICA7IG1tNj10bXAySAogCi0JbW92cQlNTVdPUkQgW3drKDEwKV0sIG1tMgk7IHdrKDEwKT10bXAxTAotCW1vdnEJTU1XT1JEIFt3aygxMSldLCBtbTAJOyB3aygxMSk9dG1wMUgKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW3drKDEwKV0sIG1tMiAgICA7IHdrKDEwKT10bXAxTAorICAgICAgICBtb3ZxICAgIE1NV09SRCBbd2soMTEpXSwgbW0wICAgIDsgd2soMTEpPXRtcDFICiAKLQk7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQorICAgICAgICA7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQogCi0JbW92cQltbTUsIE1NV09SRCBbd2soMCldCTsgbW01PXRtcDEwTAotCW1vdnEJbW03LCBNTVdPUkQgW3drKDEpXQk7IG1tNz10bXAxMEgKKyAgICAgICAgbW92cSAgICBtbTUsIE1NV09SRCBbd2soMCldICAgICA7IG1tNT10bXAxMEwKKyAgICAgICAgbW92cSAgICBtbTcsIE1NV09SRCBbd2soMSldICAgICA7IG1tNz10bXAxMEgKIAotCW1vdnEJbW0yLG1tNQotCW1vdnEJbW0wLG1tNwotCXBhZGRkCW1tNSxtbTMJCQk7IG1tNT1kYXRhMEwKLQlwYWRkZAltbTcsbW00CQkJOyBtbTc9ZGF0YTBICi0JcHN1YmQJbW0yLG1tMwkJCTsgbW0yPWRhdGE3TAotCXBzdWJkCW1tMCxtbTQJCQk7IG1tMD1kYXRhN0gKKyAgICAgICAgbW92cSAgICBtbTIsbW01CisgICAgICAgIG1vdnEgICAgbW0wLG1tNworICAgICAgICBwYWRkZCAgIG1tNSxtbTMgICAgICAgICAgICAgICAgIDsgbW01PWRhdGEwTAorICAgICAgICBwYWRkZCAgIG1tNyxtbTQgICAgICAgICAgICAgICAgIDsgbW03PWRhdGEwSAorICAgICAgICBwc3ViZCAgIG1tMixtbTMgICAgICAgICAgICAgICAgIDsgbW0yPWRhdGE3TAorICAgICAgICBwc3ViZCAgIG1tMCxtbTQgICAgICAgICAgICAgICAgIDsgbW0wPWRhdGE3SAogCi0JbW92cQltbTMsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildCTsgbW0zPVtQRF9ERVNDQUxFX1AyXQorICAgICAgICBtb3ZxICAgIG1tMyxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyKV0gOyBtbTM9W1BEX0RFU0NBTEVfUDJdCiAKLQlwYWRkZAltbTUsbW0zCi0JcGFkZGQJbW03LG1tMwotCXBzcmFkCW1tNSxERVNDQUxFX1AyCi0JcHNyYWQJbW03LERFU0NBTEVfUDIKLQlwYWRkZAltbTIsbW0zCi0JcGFkZGQJbW0wLG1tMwotCXBzcmFkCW1tMixERVNDQUxFX1AyCi0JcHNyYWQJbW0wLERFU0NBTEVfUDIKKyAgICAgICAgcGFkZGQgICBtbTUsbW0zCisgICAgICAgIHBhZGRkICAgbW03LG1tMworICAgICAgICBwc3JhZCAgIG1tNSxERVNDQUxFX1AyCisgICAgICAgIHBzcmFkICAgbW03LERFU0NBTEVfUDIKKyAgICAgICAgcGFkZGQgICBtbTIsbW0zCisgICAgICAgIHBhZGRkICAgbW0wLG1tMworICAgICAgICBwc3JhZCAgIG1tMixERVNDQUxFX1AyCisgICAgICAgIHBzcmFkICAgbW0wLERFU0NBTEVfUDIKIAotCXBhY2tzc2R3ICBtbTUsbW03CQk7IG1tNT1kYXRhMD0oMDAgMTAgMjAgMzApCi0JcGFja3NzZHcgIG1tMixtbTAJCTsgbW0yPWRhdGE3PSgwNyAxNyAyNyAzNykKKyAgICAgICAgcGFja3NzZHcgIG1tNSxtbTcgICAgICAgICAgICAgICA7IG1tNT1kYXRhMD0oMDAgMTAgMjAgMzApCisgICAgICAgIHBhY2tzc2R3ICBtbTIsbW0wICAgICAgICAgICAgICAgOyBtbTI9ZGF0YTc9KDA3IDE3IDI3IDM3KQogCi0JbW92cQltbTQsIE1NV09SRCBbd2soNCldCTsgbW00PXRtcDExTAotCW1vdnEJbW0zLCBNTVdPUkQgW3drKDUpXQk7IG1tMz10bXAxMUgKKyAgICAgICAgbW92cSAgICBtbTQsIE1NV09SRCBbd2soNCldICAgICA7IG1tND10bXAxMUwKKyAgICAgICAgbW92cSAgICBtbTMsIE1NV09SRCBbd2soNSldICAgICA7IG1tMz10bXAxMUgKIAotCW1vdnEJbW03LG1tNAotCW1vdnEJbW0wLG1tMwotCXBhZGRkCW1tNCxtbTEJCQk7IG1tND1kYXRhMUwKLQlwYWRkZAltbTMsbW02CQkJOyBtbTM9ZGF0YTFICi0JcHN1YmQJbW03LG1tMQkJCTsgbW03PWRhdGE2TAotCXBzdWJkCW1tMCxtbTYJCQk7IG1tMD1kYXRhNkgKKyAgICAgICAgbW92cSAgICBtbTcsbW00CisgICAgICAgIG1vdnEgICAgbW0wLG1tMworICAgICAgICBwYWRkZCAgIG1tNCxtbTEgICAgICAgICAgICAgICAgIDsgbW00PWRhdGExTAorICAgICAgICBwYWRkZCAgIG1tMyxtbTYgICAgICAgICAgICAgICAgIDsgbW0zPWRhdGExSAorICAgICAgICBwc3ViZCAgIG1tNyxtbTEgICAgICAgICAgICAgICAgIDsgbW03PWRhdGE2TAorICAgICAgICBwc3ViZCAgIG1tMCxtbTYgICAgICAgICAgICAgICAgIDsgbW0wPWRhdGE2SAogCi0JbW92cQltbTEsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildCTsgbW0xPVtQRF9ERVNDQUxFX1AyXQorICAgICAgICBtb3ZxICAgIG1tMSxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyKV0gOyBtbTE9W1BEX0RFU0NBTEVfUDJdCiAKLQlwYWRkZAltbTQsbW0xCi0JcGFkZGQJbW0zLG1tMQotCXBzcmFkCW1tNCxERVNDQUxFX1AyCi0JcHNyYWQJbW0zLERFU0NBTEVfUDIKLQlwYWRkZAltbTcsbW0xCi0JcGFkZGQJbW0wLG1tMQotCXBzcmFkCW1tNyxERVNDQUxFX1AyCi0JcHNyYWQJbW0wLERFU0NBTEVfUDIKKyAgICAgICAgcGFkZGQgICBtbTQsbW0xCisgICAgICAgIHBhZGRkICAgbW0zLG1tMQorICAgICAgICBwc3JhZCAgIG1tNCxERVNDQUxFX1AyCisgICAgICAgIHBzcmFkICAgbW0zLERFU0NBTEVfUDIKKyAgICAgICAgcGFkZGQgICBtbTcsbW0xCisgICAgICAgIHBhZGRkICAgbW0wLG1tMQorICAgICAgICBwc3JhZCAgIG1tNyxERVNDQUxFX1AyCisgICAgICAgIHBzcmFkICAgbW0wLERFU0NBTEVfUDIKIAotCXBhY2tzc2R3ICBtbTQsbW0zCQk7IG1tND1kYXRhMT0oMDEgMTEgMjEgMzEpCi0JcGFja3NzZHcgIG1tNyxtbTAJCTsgbW03PWRhdGE2PSgwNiAxNiAyNiAzNikKKyAgICAgICAgcGFja3NzZHcgIG1tNCxtbTMgICAgICAgICAgICAgICA7IG1tND1kYXRhMT0oMDEgMTEgMjEgMzEpCisgICAgICAgIHBhY2tzc2R3ICBtbTcsbW0wICAgICAgICAgICAgICAgOyBtbTc9ZGF0YTY9KDA2IDE2IDI2IDM2KQogCi0JcGFja3Nzd2IgIG1tNSxtbTcJCTsgbW01PSgwMCAxMCAyMCAzMCAwNiAxNiAyNiAzNikKLQlwYWNrc3N3YiAgbW00LG1tMgkJOyBtbTQ9KDAxIDExIDIxIDMxIDA3IDE3IDI3IDM3KQorICAgICAgICBwYWNrc3N3YiAgbW01LG1tNyAgICAgICAgICAgICAgIDsgbW01PSgwMCAxMCAyMCAzMCAwNiAxNiAyNiAzNikKKyAgICAgICAgcGFja3Nzd2IgIG1tNCxtbTIgICAgICAgICAgICAgICA7IG1tND0oMDEgMTEgMjEgMzEgMDcgMTcgMjcgMzcpCiAKLQltb3ZxCW1tNiwgTU1XT1JEIFt3ayg2KV0JOyBtbTY9dG1wMTJMCi0JbW92cQltbTEsIE1NV09SRCBbd2soNyldCTsgbW0xPXRtcDEySAotCW1vdnEJbW0zLCBNTVdPUkQgW3drKDEwKV0JOyBtbTM9dG1wMUwKLQltb3ZxCW1tMCwgTU1XT1JEIFt3aygxMSldCTsgbW0wPXRtcDFICisgICAgICAgIG1vdnEgICAgbW02LCBNTVdPUkQgW3drKDYpXSAgICAgOyBtbTY9dG1wMTJMCisgICAgICAgIG1vdnEgICAgbW0xLCBNTVdPUkQgW3drKDcpXSAgICAgOyBtbTE9dG1wMTJICisgICAgICAgIG1vdnEgICAgbW0zLCBNTVdPUkQgW3drKDEwKV0gICAgOyBtbTM9dG1wMUwKKyAgICAgICAgbW92cSAgICBtbTAsIE1NV09SRCBbd2soMTEpXSAgICA7IG1tMD10bXAxSAogCi0JbW92cQlNTVdPUkQgW3drKDApXSwgbW01CTsgd2soMCk9KDAwIDEwIDIwIDMwIDA2IDE2IDI2IDM2KQotCW1vdnEJTU1XT1JEIFt3aygxKV0sIG1tNAk7IHdrKDEpPSgwMSAxMSAyMSAzMSAwNyAxNyAyNyAzNykKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW3drKDApXSwgbW01ICAgICA7IHdrKDApPSgwMCAxMCAyMCAzMCAwNiAxNiAyNiAzNikKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW3drKDEpXSwgbW00ICAgICA7IHdrKDEpPSgwMSAxMSAyMSAzMSAwNyAxNyAyNyAzNykKIAotCW1vdnEJbW03LG1tNgotCW1vdnEJbW0yLG1tMQotCXBhZGRkCW1tNixtbTMJCQk7IG1tNj1kYXRhMkwKLQlwYWRkZAltbTEsbW0wCQkJOyBtbTE9ZGF0YTJICi0JcHN1YmQJbW03LG1tMwkJCTsgbW03PWRhdGE1TAotCXBzdWJkCW1tMixtbTAJCQk7IG1tMj1kYXRhNUgKKyAgICAgICAgbW92cSAgICBtbTcsbW02CisgICAgICAgIG1vdnEgICAgbW0yLG1tMQorICAgICAgICBwYWRkZCAgIG1tNixtbTMgICAgICAgICAgICAgICAgIDsgbW02PWRhdGEyTAorICAgICAgICBwYWRkZCAgIG1tMSxtbTAgICAgICAgICAgICAgICAgIDsgbW0xPWRhdGEySAorICAgICAgICBwc3ViZCAgIG1tNyxtbTMgICAgICAgICAgICAgICAgIDsgbW03PWRhdGE1TAorICAgICAgICBwc3ViZCAgIG1tMixtbTAgICAgICAgICAgICAgICAgIDsgbW0yPWRhdGE1SAogCi0JbW92cQltbTUsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildCTsgbW01PVtQRF9ERVNDQUxFX1AyXQorICAgICAgICBtb3ZxICAgIG1tNSxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyKV0gOyBtbTU9W1BEX0RFU0NBTEVfUDJdCiAKLQlwYWRkZAltbTYsbW01Ci0JcGFkZGQJbW0xLG1tNQotCXBzcmFkCW1tNixERVNDQUxFX1AyCi0JcHNyYWQJbW0xLERFU0NBTEVfUDIKLQlwYWRkZAltbTcsbW01Ci0JcGFkZGQJbW0yLG1tNQotCXBzcmFkCW1tNyxERVNDQUxFX1AyCi0JcHNyYWQJbW0yLERFU0NBTEVfUDIKKyAgICAgICAgcGFkZGQgICBtbTYsbW01CisgICAgICAgIHBhZGRkICAgbW0xLG1tNQorICAgICAgICBwc3JhZCAgIG1tNixERVNDQUxFX1AyCisgICAgICAgIHBzcmFkICAgbW0xLERFU0NBTEVfUDIKKyAgICAgICAgcGFkZGQgICBtbTcsbW01CisgICAgICAgIHBhZGRkICAgbW0yLG1tNQorICAgICAgICBwc3JhZCAgIG1tNyxERVNDQUxFX1AyCisgICAgICAgIHBzcmFkICAgbW0yLERFU0NBTEVfUDIKIAotCXBhY2tzc2R3ICBtbTYsbW0xCQk7IG1tNj1kYXRhMj0oMDIgMTIgMjIgMzIpCi0JcGFja3NzZHcgIG1tNyxtbTIJCTsgbW03PWRhdGE1PSgwNSAxNSAyNSAzNSkKKyAgICAgICAgcGFja3NzZHcgIG1tNixtbTEgICAgICAgICAgICAgICA7IG1tNj1kYXRhMj0oMDIgMTIgMjIgMzIpCisgICAgICAgIHBhY2tzc2R3ICBtbTcsbW0yICAgICAgICAgICAgICAgOyBtbTc9ZGF0YTU9KDA1IDE1IDI1IDM1KQogCi0JbW92cQltbTQsIE1NV09SRCBbd2soMildCTsgbW00PXRtcDEzTAotCW1vdnEJbW0zLCBNTVdPUkQgW3drKDMpXQk7IG1tMz10bXAxM0gKLQltb3ZxCW1tMCwgTU1XT1JEIFt3ayg4KV0JOyBtbTA9dG1wMEwKLQltb3ZxCW1tNSwgTU1XT1JEIFt3ayg5KV0JOyBtbTU9dG1wMEgKKyAgICAgICAgbW92cSAgICBtbTQsIE1NV09SRCBbd2soMildICAgICA7IG1tND10bXAxM0wKKyAgICAgICAgbW92cSAgICBtbTMsIE1NV09SRCBbd2soMyldICAgICA7IG1tMz10bXAxM0gKKyAgICAgICAgbW92cSAgICBtbTAsIE1NV09SRCBbd2soOCldICAgICA7IG1tMD10bXAwTAorICAgICAgICBtb3ZxICAgIG1tNSwgTU1XT1JEIFt3ayg5KV0gICAgIDsgbW01PXRtcDBICiAKLQltb3ZxCW1tMSxtbTQKLQltb3ZxCW1tMixtbTMKLQlwYWRkZAltbTQsbW0wCQkJOyBtbTQ9ZGF0YTNMCi0JcGFkZGQJbW0zLG1tNQkJCTsgbW0zPWRhdGEzSAotCXBzdWJkCW1tMSxtbTAJCQk7IG1tMT1kYXRhNEwKLQlwc3ViZAltbTIsbW01CQkJOyBtbTI9ZGF0YTRICisgICAgICAgIG1vdnEgICAgbW0xLG1tNAorICAgICAgICBtb3ZxICAgIG1tMixtbTMKKyAgICAgICAgcGFkZGQgICBtbTQsbW0wICAgICAgICAgICAgICAgICA7IG1tND1kYXRhM0wKKyAgICAgICAgcGFkZGQgICBtbTMsbW01ICAgICAgICAgICAgICAgICA7IG1tMz1kYXRhM0gKKyAgICAgICAgcHN1YmQgICBtbTEsbW0wICAgICAgICAgICAgICAgICA7IG1tMT1kYXRhNEwKKyAgICAgICAgcHN1YmQgICBtbTIsbW01ICAgICAgICAgICAgICAgICA7IG1tMj1kYXRhNEgKIAotCW1vdnEJbW0wLFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQk7IG1tMD1bUERfREVTQ0FMRV9QMl0KKyAgICAgICAgbW92cSAgICBtbTAsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildIDsgbW0wPVtQRF9ERVNDQUxFX1AyXQogCi0JcGFkZGQJbW00LG1tMAotCXBhZGRkCW1tMyxtbTAKLQlwc3JhZAltbTQsREVTQ0FMRV9QMgotCXBzcmFkCW1tMyxERVNDQUxFX1AyCi0JcGFkZGQJbW0xLG1tMAotCXBhZGRkCW1tMixtbTAKLQlwc3JhZAltbTEsREVTQ0FMRV9QMgotCXBzcmFkCW1tMixERVNDQUxFX1AyCisgICAgICAgIHBhZGRkICAgbW00LG1tMAorICAgICAgICBwYWRkZCAgIG1tMyxtbTAKKyAgICAgICAgcHNyYWQgICBtbTQsREVTQ0FMRV9QMgorICAgICAgICBwc3JhZCAgIG1tMyxERVNDQUxFX1AyCisgICAgICAgIHBhZGRkICAgbW0xLG1tMAorICAgICAgICBwYWRkZCAgIG1tMixtbTAKKyAgICAgICAgcHNyYWQgICBtbTEsREVTQ0FMRV9QMgorICAgICAgICBwc3JhZCAgIG1tMixERVNDQUxFX1AyCiAKLQltb3ZxICAgICAgbW01LFtHT1RPRkYoZWJ4LFBCX0NFTlRFUkpTQU1QKV0JOyBtbTU9W1BCX0NFTlRFUkpTQU1QXQorICAgICAgICBtb3ZxICAgICAgbW01LFtHT1RPRkYoZWJ4LFBCX0NFTlRFUkpTQU1QKV0gICAgICA7IG1tNT1bUEJfQ0VOVEVSSlNBTVBdCiAKLQlwYWNrc3NkdyAgbW00LG1tMwkJOyBtbTQ9ZGF0YTM9KDAzIDEzIDIzIDMzKQotCXBhY2tzc2R3ICBtbTEsbW0yCQk7IG1tMT1kYXRhND0oMDQgMTQgMjQgMzQpCisgICAgICAgIHBhY2tzc2R3ICBtbTQsbW0zICAgICAgICAgICAgICAgOyBtbTQ9ZGF0YTM9KDAzIDEzIDIzIDMzKQorICAgICAgICBwYWNrc3NkdyAgbW0xLG1tMiAgICAgICAgICAgICAgIDsgbW0xPWRhdGE0PSgwNCAxNCAyNCAzNCkKIAotCW1vdnEgICAgICBtbTAsIE1NV09SRCBbd2soMCldCTsgbW0wPSgwMCAxMCAyMCAzMCAwNiAxNiAyNiAzNikKLQltb3ZxICAgICAgbW0zLCBNTVdPUkQgW3drKDEpXQk7IG1tMz0oMDEgMTEgMjEgMzEgMDcgMTcgMjcgMzcpCisgICAgICAgIG1vdnEgICAgICBtbTAsIE1NV09SRCBbd2soMCldICAgOyBtbTA9KDAwIDEwIDIwIDMwIDA2IDE2IDI2IDM2KQorICAgICAgICBtb3ZxICAgICAgbW0zLCBNTVdPUkQgW3drKDEpXSAgIDsgbW0zPSgwMSAxMSAyMSAzMSAwNyAxNyAyNyAzNykKIAotCXBhY2tzc3diICBtbTYsbW0xCQk7IG1tNj0oMDIgMTIgMjIgMzIgMDQgMTQgMjQgMzQpCi0JcGFja3Nzd2IgIG1tNCxtbTcJCTsgbW00PSgwMyAxMyAyMyAzMyAwNSAxNSAyNSAzNSkKKyAgICAgICAgcGFja3Nzd2IgIG1tNixtbTEgICAgICAgICAgICAgICA7IG1tNj0oMDIgMTIgMjIgMzIgMDQgMTQgMjQgMzQpCisgICAgICAgIHBhY2tzc3diICBtbTQsbW03ICAgICAgICAgICAgICAgOyBtbTQ9KDAzIDEzIDIzIDMzIDA1IDE1IDI1IDM1KQogCi0JcGFkZGIgICAgIG1tMCxtbTUKLQlwYWRkYiAgICAgbW0zLG1tNQotCXBhZGRiICAgICBtbTYsbW01Ci0JcGFkZGIgICAgIG1tNCxtbTUKKyAgICAgICAgcGFkZGIgICAgIG1tMCxtbTUKKyAgICAgICAgcGFkZGIgICAgIG1tMyxtbTUKKyAgICAgICAgcGFkZGIgICAgIG1tNixtbTUKKyAgICAgICAgcGFkZGIgICAgIG1tNCxtbTUKIAotCW1vdnEgICAgICBtbTIsbW0wCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKLQlwdW5wY2tsYncgbW0wLG1tMwkJOyBtbTA9KDAwIDAxIDEwIDExIDIwIDIxIDMwIDMxKQotCXB1bnBja2hidyBtbTIsbW0zCQk7IG1tMj0oMDYgMDcgMTYgMTcgMjYgMjcgMzYgMzcpCi0JbW92cSAgICAgIG1tMSxtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQotCXB1bnBja2xidyBtbTYsbW00CQk7IG1tNj0oMDIgMDMgMTIgMTMgMjIgMjMgMzIgMzMpCi0JcHVucGNraGJ3IG1tMSxtbTQJCTsgbW0xPSgwNCAwNSAxNCAxNSAyNCAyNSAzNCAzNSkKKyAgICAgICAgbW92cSAgICAgIG1tMixtbTAgICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICAgICAgcHVucGNrbGJ3IG1tMCxtbTMgICAgICAgICAgICAgICA7IG1tMD0oMDAgMDEgMTAgMTEgMjAgMjEgMzAgMzEpCisgICAgICAgIHB1bnBja2hidyBtbTIsbW0zICAgICAgICAgICAgICAgOyBtbTI9KDA2IDA3IDE2IDE3IDI2IDI3IDM2IDM3KQorICAgICAgICBtb3ZxICAgICAgbW0xLG1tNiAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgICAgICBwdW5wY2tsYncgbW02LG1tNCAgICAgICAgICAgICAgIDsgbW02PSgwMiAwMyAxMiAxMyAyMiAyMyAzMiAzMykKKyAgICAgICAgcHVucGNraGJ3IG1tMSxtbTQgICAgICAgICAgICAgICA7IG1tMT0oMDQgMDUgMTQgMTUgMjQgMjUgMzQgMzUpCiAKLQltb3ZxICAgICAgbW03LG1tMAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCi0JcHVucGNrbHdkIG1tMCxtbTYJCTsgbW0wPSgwMCAwMSAwMiAwMyAxMCAxMSAxMiAxMykKLQlwdW5wY2tod2QgbW03LG1tNgkJOyBtbTc9KDIwIDIxIDIyIDIzIDMwIDMxIDMyIDMzKQotCW1vdnEgICAgICBtbTUsbW0xCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKLQlwdW5wY2tsd2QgbW0xLG1tMgkJOyBtbTE9KDA0IDA1IDA2IDA3IDE0IDE1IDE2IDE3KQotCXB1bnBja2h3ZCBtbTUsbW0yCQk7IG1tNT0oMjQgMjUgMjYgMjcgMzQgMzUgMzYgMzcpCisgICAgICAgIG1vdnEgICAgICBtbTcsbW0wICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgICAgIHB1bnBja2x3ZCBtbTAsbW02ICAgICAgICAgICAgICAgOyBtbTA9KDAwIDAxIDAyIDAzIDEwIDExIDEyIDEzKQorICAgICAgICBwdW5wY2tod2QgbW03LG1tNiAgICAgICAgICAgICAgIDsgbW03PSgyMCAyMSAyMiAyMyAzMCAzMSAzMiAzMykKKyAgICAgICAgbW92cSAgICAgIG1tNSxtbTEgICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICAgICAgcHVucGNrbHdkIG1tMSxtbTIgICAgICAgICAgICAgICA7IG1tMT0oMDQgMDUgMDYgMDcgMTQgMTUgMTYgMTcpCisgICAgICAgIHB1bnBja2h3ZCBtbTUsbW0yICAgICAgICAgICAgICAgOyBtbTU9KDI0IDI1IDI2IDI3IDM0IDM1IDM2IDM3KQogCi0JbW92cSAgICAgIG1tMyxtbTAJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQotCXB1bnBja2xkcSBtbTAsbW0xCQk7IG1tMD0oMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcpCi0JcHVucGNraGRxIG1tMyxtbTEJCTsgbW0zPSgxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNykKLQltb3ZxICAgICAgbW00LG1tNwkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCi0JcHVucGNrbGRxIG1tNyxtbTUJCTsgbW03PSgyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNykKLQlwdW5wY2toZHEgbW00LG1tNQkJOyBtbTQ9KDMwIDMxIDMyIDMzIDM0IDM1IDM2IDM3KQorICAgICAgICBtb3ZxICAgICAgbW0zLG1tMCAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorICAgICAgICBwdW5wY2tsZHEgbW0wLG1tMSAgICAgICAgICAgICAgIDsgbW0wPSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNykKKyAgICAgICAgcHVucGNraGRxIG1tMyxtbTEgICAgICAgICAgICAgICA7IG1tMz0oMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcpCisgICAgICAgIG1vdnEgICAgICBtbTQsbW03ICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisgICAgICAgIHB1bnBja2xkcSBtbTcsbW01ICAgICAgICAgICAgICAgOyBtbTc9KDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3KQorICAgICAgICBwdW5wY2toZHEgbW00LG1tNSAgICAgICAgICAgICAgIDsgbW00PSgzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNykKIAotCXB1c2hwaWMJZWJ4CQkJOyBzYXZlIEdPVCBhZGRyZXNzCisgICAgICAgIHB1c2hwaWMgZWJ4ICAgICAgICAgICAgICAgICAgICAgOyBzYXZlIEdPVCBhZGRyZXNzCiAKLQltb3YJZWR4LCBKU0FNUFJPVyBbZWRpKzAqU0laRU9GX0pTQU1QUk9XXQotCW1vdgllYngsIEpTQU1QUk9XIFtlZGkrMSpTSVpFT0ZfSlNBTVBST1ddCi0JbW92cQlNTVdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdLCBtbTAKLQltb3ZxCU1NV09SRCBbZWJ4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIG1tMwotCW1vdgllZHgsIEpTQU1QUk9XIFtlZGkrMipTSVpFT0ZfSlNBTVBST1ddCi0JbW92CWVieCwgSlNBTVBST1cgW2VkaSszKlNJWkVPRl9KU0FNUFJPV10KLQltb3ZxCU1NV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIG1tNwotCW1vdnEJTU1XT1JEIFtlYngrZWF4KlNJWkVPRl9KU0FNUExFXSwgbW00CisgICAgICAgIG1vdiAgICAgZWR4LCBKU0FNUFJPVyBbZWRpKzAqU0laRU9GX0pTQU1QUk9XXQorICAgICAgICBtb3YgICAgIGVieCwgSlNBTVBST1cgW2VkaSsxKlNJWkVPRl9KU0FNUFJPV10KKyAgICAgICAgbW92cSAgICBNTVdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdLCBtbTAKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW2VieCtlYXgqU0laRU9GX0pTQU1QTEVdLCBtbTMKKyAgICAgICAgbW92ICAgICBlZHgsIEpTQU1QUk9XIFtlZGkrMipTSVpFT0ZfSlNBTVBST1ddCisgICAgICAgIG1vdiAgICAgZWJ4LCBKU0FNUFJPVyBbZWRpKzMqU0laRU9GX0pTQU1QUk9XXQorICAgICAgICBtb3ZxICAgIE1NV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIG1tNworICAgICAgICBtb3ZxICAgIE1NV09SRCBbZWJ4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIG1tNAogCi0JcG9wcGljCWVieAkJCTsgcmVzdG9yZSBHT1QgYWRkcmVzcworICAgICAgICBwb3BwaWMgIGVieCAgICAgICAgICAgICAgICAgICAgIDsgcmVzdG9yZSBHT1QgYWRkcmVzcwogCi0JYWRkCWVzaSwgYnl0ZSA0KlNJWkVPRl9KQ09FRgk7IHdzcHRyCi0JYWRkCWVkaSwgYnl0ZSA0KlNJWkVPRl9KU0FNUFJPVwotCWRlYwllY3gJCQkJOyBjdHIKLQlqbnoJbmVhciAucm93bG9vcAorICAgICAgICBhZGQgICAgIGVzaSwgYnl0ZSA0KlNJWkVPRl9KQ09FRiAgICAgICAgOyB3c3B0cgorICAgICAgICBhZGQgICAgIGVkaSwgYnl0ZSA0KlNJWkVPRl9KU0FNUFJPVworICAgICAgICBkZWMgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBjdHIKKyAgICAgICAgam56ICAgICBuZWFyIC5yb3dsb29wCiAKLQllbW1zCQk7IGVtcHR5IE1NWCBzdGF0ZQorICAgICAgICBlbW1zICAgICAgICAgICAgOyBlbXB0eSBNTVggc3RhdGUKIAotCXBvcAllZGkKLQlwb3AJZXNpCi07CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi07CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi0JcG9wCWVieAotCW1vdgllc3AsZWJwCQk7IGVzcCA8LSBhbGlnbmVkIGVicAotCXBvcAllc3AJCTsgZXNwIDwtIG9yaWdpbmFsIGVicAotCXBvcAllYnAKLQlyZXQKKyAgICAgICAgcG9wICAgICBlZGkKKyAgICAgICAgcG9wICAgICBlc2kKKzsgICAgICAgcG9wICAgICBlZHggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICAgICAgcG9wICAgICBlY3ggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICAgICAgcG9wICAgICBlYngKKyAgICAgICAgbW92ICAgICBlc3AsZWJwICAgICAgICAgOyBlc3AgPC0gYWxpZ25lZCBlYnAKKyAgICAgICAgcG9wICAgICBlc3AgICAgICAgICAgICAgOyBlc3AgPC0gb3JpZ2luYWwgZWJwCisgICAgICAgIHBvcCAgICAgZWJwCisgICAgICAgIHJldAogCiA7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQogOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgotCWFsaWduCTE2CisgICAgICAgIGFsaWduICAgMTYKZGlmZiAtLWdpdCBhL3NpbWQvamltbXhyZWQuYXNtIGIvc2ltZC9qaW1teHJlZC5hc20KaW5kZXggYTJiNzEwMy4uNWUyNDgzNiAxMDA2NDQKLS0tIGEvc2ltZC9qaW1teHJlZC5hc20KKysrIGIvc2ltZC9qaW1teHJlZC5hc20KQEAgLTI2LDc0ICsyNiw3NCBAQAogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSVkZWZpbmUgQ09OU1RfQklUUwkxMwotJWRlZmluZSBQQVNTMV9CSVRTCTIKKyVkZWZpbmUgQ09OU1RfQklUUyAgICAgIDEzCislZGVmaW5lIFBBU1MxX0JJVFMgICAgICAyCiAKLSVkZWZpbmUgREVTQ0FMRV9QMV80CShDT05TVF9CSVRTLVBBU1MxX0JJVFMrMSkKLSVkZWZpbmUgREVTQ0FMRV9QMl80CShDT05TVF9CSVRTK1BBU1MxX0JJVFMrMysxKQotJWRlZmluZSBERVNDQUxFX1AxXzIJKENPTlNUX0JJVFMtUEFTUzFfQklUUysyKQotJWRlZmluZSBERVNDQUxFX1AyXzIJKENPTlNUX0JJVFMrUEFTUzFfQklUUyszKzIpCislZGVmaW5lIERFU0NBTEVfUDFfNCAgICAoQ09OU1RfQklUUy1QQVNTMV9CSVRTKzEpCislZGVmaW5lIERFU0NBTEVfUDJfNCAgICAoQ09OU1RfQklUUytQQVNTMV9CSVRTKzMrMSkKKyVkZWZpbmUgREVTQ0FMRV9QMV8yICAgIChDT05TVF9CSVRTLVBBU1MxX0JJVFMrMikKKyVkZWZpbmUgREVTQ0FMRV9QMl8yICAgIChDT05TVF9CSVRTK1BBU1MxX0JJVFMrMysyKQogCiAlaWYgQ09OU1RfQklUUyA9PSAxMwotRl8wXzIxMQllcXUJIDE3MzAJCTsgRklYKDAuMjExMTY0MjQzKQotRl8wXzUwOQllcXUJIDQxNzYJCTsgRklYKDAuNTA5Nzk1NTc5KQotRl8wXzYwMQllcXUJIDQ5MjYJCTsgRklYKDAuNjAxMzQ0ODg3KQotRl8wXzcyMAllcXUJIDU5MDYJCTsgRklYKDAuNzIwOTU5ODIyKQotRl8wXzc2NQllcXUJIDYyNzAJCTsgRklYKDAuNzY1MzY2ODY1KQotRl8wXzg1MAllcXUJIDY5NjcJCTsgRklYKDAuODUwNDMwMDk1KQotRl8wXzg5OQllcXUJIDczNzMJCTsgRklYKDAuODk5OTc2MjIzKQotRl8xXzA2MQllcXUJIDg2OTcJCTsgRklYKDEuMDYxNTk0MzM3KQotRl8xXzI3MgllcXUJMTA0MjYJCTsgRklYKDEuMjcyNzU4NTgwKQotRl8xXzQ1MQllcXUJMTE4OTMJCTsgRklYKDEuNDUxNzc0OTgxKQotRl8xXzg0NwllcXUJMTUxMzcJCTsgRklYKDEuODQ3NzU5MDY1KQotRl8yXzE3MgllcXUJMTc3OTkJCTsgRklYKDIuMTcyNzM0ODAzKQotRl8yXzU2MgllcXUJMjA5OTUJCTsgRklYKDIuNTYyOTE1NDQ3KQotRl8zXzYyNAllcXUJMjk2OTIJCTsgRklYKDMuNjI0NTA5Nzg1KQorRl8wXzIxMSBlcXUgICAgICAxNzMwICAgICAgICAgICA7IEZJWCgwLjIxMTE2NDI0MykKK0ZfMF81MDkgZXF1ICAgICAgNDE3NiAgICAgICAgICAgOyBGSVgoMC41MDk3OTU1NzkpCitGXzBfNjAxIGVxdSAgICAgIDQ5MjYgICAgICAgICAgIDsgRklYKDAuNjAxMzQ0ODg3KQorRl8wXzcyMCBlcXUgICAgICA1OTA2ICAgICAgICAgICA7IEZJWCgwLjcyMDk1OTgyMikKK0ZfMF83NjUgZXF1ICAgICAgNjI3MCAgICAgICAgICAgOyBGSVgoMC43NjUzNjY4NjUpCitGXzBfODUwIGVxdSAgICAgIDY5NjcgICAgICAgICAgIDsgRklYKDAuODUwNDMwMDk1KQorRl8wXzg5OSBlcXUgICAgICA3MzczICAgICAgICAgICA7IEZJWCgwLjg5OTk3NjIyMykKK0ZfMV8wNjEgZXF1ICAgICAgODY5NyAgICAgICAgICAgOyBGSVgoMS4wNjE1OTQzMzcpCitGXzFfMjcyIGVxdSAgICAgMTA0MjYgICAgICAgICAgIDsgRklYKDEuMjcyNzU4NTgwKQorRl8xXzQ1MSBlcXUgICAgIDExODkzICAgICAgICAgICA7IEZJWCgxLjQ1MTc3NDk4MSkKK0ZfMV84NDcgZXF1ICAgICAxNTEzNyAgICAgICAgICAgOyBGSVgoMS44NDc3NTkwNjUpCitGXzJfMTcyIGVxdSAgICAgMTc3OTkgICAgICAgICAgIDsgRklYKDIuMTcyNzM0ODAzKQorRl8yXzU2MiBlcXUgICAgIDIwOTk1ICAgICAgICAgICA7IEZJWCgyLjU2MjkxNTQ0NykKK0ZfM182MjQgZXF1ICAgICAyOTY5MiAgICAgICAgICAgOyBGSVgoMy42MjQ1MDk3ODUpCiAlZWxzZQogOyBOQVNNIGNhbm5vdCBkbyBjb21waWxlLXRpbWUgYXJpdGhtZXRpYyBvbiBmbG9hdGluZy1wb2ludCBjb25zdGFudHMuCiAlZGVmaW5lIERFU0NBTEUoeCxuKSAgKCgoeCkrKDE8PCgobiktMSkpKT4+KG4pKQotRl8wXzIxMQllcXUJREVTQ0FMRSggMjI2NzM1ODc5LDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuMjExMTY0MjQzKQotRl8wXzUwOQllcXUJREVTQ0FMRSggNTQ3Mzg4ODM0LDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuNTA5Nzk1NTc5KQotRl8wXzYwMQllcXUJREVTQ0FMRSggNjQ1Njg5MTU1LDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuNjAxMzQ0ODg3KQotRl8wXzcyMAllcXUJREVTQ0FMRSggNzc0MTI0NzE0LDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuNzIwOTU5ODIyKQotRl8wXzc2NQllcXUJREVTQ0FMRSggODIxODA2NDEzLDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuNzY1MzY2ODY1KQotRl8wXzg1MAllcXUJREVTQ0FMRSggOTEzMTQyMzYxLDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuODUwNDMwMDk1KQotRl8wXzg5OQllcXUJREVTQ0FMRSggOTY2MzQyMTExLDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuODk5OTc2MjIzKQotRl8xXzA2MQllcXUJREVTQ0FMRSgxMTM5ODc4MjM5LDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuMDYxNTk0MzM3KQotRl8xXzI3MgllcXUJREVTQ0FMRSgxMzY2NjE0MTE5LDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuMjcyNzU4NTgwKQotRl8xXzQ1MQllcXUJREVTQ0FMRSgxNTU4ODMxNTE2LDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuNDUxNzc0OTgxKQotRl8xXzg0NwllcXUJREVTQ0FMRSgxOTg0MDE2MTg4LDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuODQ3NzU5MDY1KQotRl8yXzE3MgllcXUJREVTQ0FMRSgyMzMyOTU2MjMwLDMwLUNPTlNUX0JJVFMpCTsgRklYKDIuMTcyNzM0ODAzKQotRl8yXzU2MgllcXUJREVTQ0FMRSgyNzUxOTA5NTA2LDMwLUNPTlNUX0JJVFMpCTsgRklYKDIuNTYyOTE1NDQ3KQotRl8zXzYyNAllcXUJREVTQ0FMRSgzODkxNzg3NzQ3LDMwLUNPTlNUX0JJVFMpCTsgRklYKDMuNjI0NTA5Nzg1KQorRl8wXzIxMSBlcXUgICAgIERFU0NBTEUoIDIyNjczNTg3OSwzMC1DT05TVF9CSVRTKSAgICAgICA7IEZJWCgwLjIxMTE2NDI0MykKK0ZfMF81MDkgZXF1ICAgICBERVNDQUxFKCA1NDczODg4MzQsMzAtQ09OU1RfQklUUykgICAgICAgOyBGSVgoMC41MDk3OTU1NzkpCitGXzBfNjAxIGVxdSAgICAgREVTQ0FMRSggNjQ1Njg5MTU1LDMwLUNPTlNUX0JJVFMpICAgICAgIDsgRklYKDAuNjAxMzQ0ODg3KQorRl8wXzcyMCBlcXUgICAgIERFU0NBTEUoIDc3NDEyNDcxNCwzMC1DT05TVF9CSVRTKSAgICAgICA7IEZJWCgwLjcyMDk1OTgyMikKK0ZfMF83NjUgZXF1ICAgICBERVNDQUxFKCA4MjE4MDY0MTMsMzAtQ09OU1RfQklUUykgICAgICAgOyBGSVgoMC43NjUzNjY4NjUpCitGXzBfODUwIGVxdSAgICAgREVTQ0FMRSggOTEzMTQyMzYxLDMwLUNPTlNUX0JJVFMpICAgICAgIDsgRklYKDAuODUwNDMwMDk1KQorRl8wXzg5OSBlcXUgICAgIERFU0NBTEUoIDk2NjM0MjExMSwzMC1DT05TVF9CSVRTKSAgICAgICA7IEZJWCgwLjg5OTk3NjIyMykKK0ZfMV8wNjEgZXF1ICAgICBERVNDQUxFKDExMzk4NzgyMzksMzAtQ09OU1RfQklUUykgICAgICAgOyBGSVgoMS4wNjE1OTQzMzcpCitGXzFfMjcyIGVxdSAgICAgREVTQ0FMRSgxMzY2NjE0MTE5LDMwLUNPTlNUX0JJVFMpICAgICAgIDsgRklYKDEuMjcyNzU4NTgwKQorRl8xXzQ1MSBlcXUgICAgIERFU0NBTEUoMTU1ODgzMTUxNiwzMC1DT05TVF9CSVRTKSAgICAgICA7IEZJWCgxLjQ1MTc3NDk4MSkKK0ZfMV84NDcgZXF1ICAgICBERVNDQUxFKDE5ODQwMTYxODgsMzAtQ09OU1RfQklUUykgICAgICAgOyBGSVgoMS44NDc3NTkwNjUpCitGXzJfMTcyIGVxdSAgICAgREVTQ0FMRSgyMzMyOTU2MjMwLDMwLUNPTlNUX0JJVFMpICAgICAgIDsgRklYKDIuMTcyNzM0ODAzKQorRl8yXzU2MiBlcXUgICAgIERFU0NBTEUoMjc1MTkwOTUwNiwzMC1DT05TVF9CSVRTKSAgICAgICA7IEZJWCgyLjU2MjkxNTQ0NykKK0ZfM182MjQgZXF1ICAgICBERVNDQUxFKDM4OTE3ODc3NDcsMzAtQ09OU1RfQklUUykgICAgICAgOyBGSVgoMy42MjQ1MDk3ODUpCiAlZW5kaWYKIAogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCVNFQ1RJT04JU0VHX0NPTlNUCisgICAgICAgIFNFQ1RJT04gU0VHX0NPTlNUCiAKLQlhbGlnbnoJMTYKLQlnbG9iYWwJRVhUTihqY29uc3RfaWRjdF9yZWRfbW14KQorICAgICAgICBhbGlnbnogIDE2CisgICAgICAgIGdsb2JhbCAgRVhUTihqY29uc3RfaWRjdF9yZWRfbW14KQogCiBFWFROKGpjb25zdF9pZGN0X3JlZF9tbXgpOgogCi1QV19GMTg0X01GMDc2CXRpbWVzIDIgZHcgIEZfMV84NDcsLUZfMF83NjUKLVBXX0YyNTZfRjA4OQl0aW1lcyAyIGR3ICBGXzJfNTYyLCBGXzBfODk5Ci1QV19GMTA2X01GMjE3CXRpbWVzIDIgZHcgIEZfMV8wNjEsLUZfMl8xNzIKLVBXX01GMDYwX01GMDUwCXRpbWVzIDIgZHcgLUZfMF82MDEsLUZfMF81MDkKLVBXX0YxNDVfTUYwMjEJdGltZXMgMiBkdyAgRl8xXzQ1MSwtRl8wXzIxMQotUFdfRjM2Ml9NRjEyNwl0aW1lcyAyIGR3ICBGXzNfNjI0LC1GXzFfMjcyCi1QV19GMDg1X01GMDcyCXRpbWVzIDIgZHcgIEZfMF84NTAsLUZfMF83MjAKLVBEX0RFU0NBTEVfUDFfNAl0aW1lcyAyIGRkICAxIDw8IChERVNDQUxFX1AxXzQtMSkKLVBEX0RFU0NBTEVfUDJfNAl0aW1lcyAyIGRkICAxIDw8IChERVNDQUxFX1AyXzQtMSkKLVBEX0RFU0NBTEVfUDFfMgl0aW1lcyAyIGRkICAxIDw8IChERVNDQUxFX1AxXzItMSkKLVBEX0RFU0NBTEVfUDJfMgl0aW1lcyAyIGRkICAxIDw8IChERVNDQUxFX1AyXzItMSkKLVBCX0NFTlRFUkpTQU1QCXRpbWVzIDggZGIgIENFTlRFUkpTQU1QTEUKK1BXX0YxODRfTUYwNzYgICB0aW1lcyAyIGR3ICBGXzFfODQ3LC1GXzBfNzY1CitQV19GMjU2X0YwODkgICAgdGltZXMgMiBkdyAgRl8yXzU2MiwgRl8wXzg5OQorUFdfRjEwNl9NRjIxNyAgIHRpbWVzIDIgZHcgIEZfMV8wNjEsLUZfMl8xNzIKK1BXX01GMDYwX01GMDUwICB0aW1lcyAyIGR3IC1GXzBfNjAxLC1GXzBfNTA5CitQV19GMTQ1X01GMDIxICAgdGltZXMgMiBkdyAgRl8xXzQ1MSwtRl8wXzIxMQorUFdfRjM2Ml9NRjEyNyAgIHRpbWVzIDIgZHcgIEZfM182MjQsLUZfMV8yNzIKK1BXX0YwODVfTUYwNzIgICB0aW1lcyAyIGR3ICBGXzBfODUwLC1GXzBfNzIwCitQRF9ERVNDQUxFX1AxXzQgdGltZXMgMiBkZCAgMSA8PCAoREVTQ0FMRV9QMV80LTEpCitQRF9ERVNDQUxFX1AyXzQgdGltZXMgMiBkZCAgMSA8PCAoREVTQ0FMRV9QMl80LTEpCitQRF9ERVNDQUxFX1AxXzIgdGltZXMgMiBkZCAgMSA8PCAoREVTQ0FMRV9QMV8yLTEpCitQRF9ERVNDQUxFX1AyXzIgdGltZXMgMiBkZCAgMSA8PCAoREVTQ0FMRV9QMl8yLTEpCitQQl9DRU5URVJKU0FNUCAgdGltZXMgOCBkYiAgQ0VOVEVSSlNBTVBMRQogCi0JYWxpZ256CTE2CisgICAgICAgIGFsaWdueiAgMTYKIAogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCVNFQ1RJT04JU0VHX1RFWFQKLQlCSVRTCTMyCisgICAgICAgIFNFQ1RJT04gU0VHX1RFWFQKKyAgICAgICAgQklUUyAgICAzMgogOwogOyBQZXJmb3JtIGRlcXVhbnRpemF0aW9uIGFuZCBpbnZlcnNlIERDVCBvbiBvbmUgYmxvY2sgb2YgY29lZmZpY2llbnRzLAogOyBwcm9kdWNpbmcgYSByZWR1Y2VkLXNpemUgNHg0IG91dHB1dCBibG9jay4KQEAgLTEwMywzODggKzEwMywzODggQEAKIDsgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKIDsKIAotJWRlZmluZSBkY3RfdGFibGUoYikJKGIpKzgJCQk7IHZvaWQgKiBkY3RfdGFibGUKLSVkZWZpbmUgY29lZl9ibG9jayhiKQkoYikrMTIJCTsgSkNPRUZQVFIgY29lZl9ibG9jawotJWRlZmluZSBvdXRwdXRfYnVmKGIpCShiKSsxNgkJOyBKU0FNUEFSUkFZIG91dHB1dF9idWYKLSVkZWZpbmUgb3V0cHV0X2NvbChiKQkoYikrMjAJCTsgSkRJTUVOU0lPTiBvdXRwdXRfY29sCislZGVmaW5lIGRjdF90YWJsZShiKSAgICAoYikrOCAgICAgICAgICAgOyB2b2lkICogZGN0X3RhYmxlCislZGVmaW5lIGNvZWZfYmxvY2soYikgICAoYikrMTIgICAgICAgICAgOyBKQ09FRlBUUiBjb2VmX2Jsb2NrCislZGVmaW5lIG91dHB1dF9idWYoYikgICAoYikrMTYgICAgICAgICAgOyBKU0FNUEFSUkFZIG91dHB1dF9idWYKKyVkZWZpbmUgb3V0cHV0X2NvbChiKSAgIChiKSsyMCAgICAgICAgICA7IEpESU1FTlNJT04gb3V0cHV0X2NvbAogCi0lZGVmaW5lIG9yaWdpbmFsX2VicAllYnArMAotJWRlZmluZSB3ayhpKQkJZWJwLShXS19OVU0tKGkpKSpTSVpFT0ZfTU1XT1JECTsgbW13b3JkIHdrW1dLX05VTV0KLSVkZWZpbmUgV0tfTlVNCQkyCi0lZGVmaW5lIHdvcmtzcGFjZQl3aygwKS1EQ1RTSVpFMipTSVpFT0ZfSkNPRUYKLQkJCQkJOyBKQ09FRiB3b3Jrc3BhY2VbRENUU0laRTJdCislZGVmaW5lIG9yaWdpbmFsX2VicCAgICBlYnArMAorJWRlZmluZSB3ayhpKSAgICAgICAgICAgZWJwLShXS19OVU0tKGkpKSpTSVpFT0ZfTU1XT1JEICA7IG1td29yZCB3a1tXS19OVU1dCislZGVmaW5lIFdLX05VTSAgICAgICAgICAyCislZGVmaW5lIHdvcmtzcGFjZSAgICAgICB3aygwKS1EQ1RTSVpFMipTSVpFT0ZfSkNPRUYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IEpDT0VGIHdvcmtzcGFjZVtEQ1RTSVpFMl0KIAotCWFsaWduCTE2Ci0JZ2xvYmFsCUVYVE4oanNpbWRfaWRjdF80eDRfbW14KQorICAgICAgICBhbGlnbiAgIDE2CisgICAgICAgIGdsb2JhbCAgRVhUTihqc2ltZF9pZGN0XzR4NF9tbXgpCiAKIEVYVE4oanNpbWRfaWRjdF80eDRfbW14KToKLQlwdXNoCWVicAotCW1vdgllYXgsZXNwCQkJCTsgZWF4ID0gb3JpZ2luYWwgZWJwCi0Jc3ViCWVzcCwgYnl0ZSA0Ci0JYW5kCWVzcCwgYnl0ZSAoLVNJWkVPRl9NTVdPUkQpCTsgYWxpZ24gdG8gNjQgYml0cwotCW1vdglbZXNwXSxlYXgKLQltb3YJZWJwLGVzcAkJCQk7IGVicCA9IGFsaWduZWQgZWJwCi0JbGVhCWVzcCwgW3dvcmtzcGFjZV0KLQlwdXNocGljCWVieAotOwlwdXNoCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLTsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi0JcHVzaAllc2kKLQlwdXNoCWVkaQorICAgICAgICBwdXNoICAgIGVicAorICAgICAgICBtb3YgICAgIGVheCxlc3AgICAgICAgICAgICAgICAgICAgICAgICAgOyBlYXggPSBvcmlnaW5hbCBlYnAKKyAgICAgICAgc3ViICAgICBlc3AsIGJ5dGUgNAorICAgICAgICBhbmQgICAgIGVzcCwgYnl0ZSAoLVNJWkVPRl9NTVdPUkQpICAgICAgOyBhbGlnbiB0byA2NCBiaXRzCisgICAgICAgIG1vdiAgICAgW2VzcF0sZWF4CisgICAgICAgIG1vdiAgICAgZWJwLGVzcCAgICAgICAgICAgICAgICAgICAgICAgICA7IGVicCA9IGFsaWduZWQgZWJwCisgICAgICAgIGxlYSAgICAgZXNwLCBbd29ya3NwYWNlXQorICAgICAgICBwdXNocGljIGVieAorOyAgICAgICBwdXNoICAgIGVjeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgICAgICBwdXNoICAgIGVkeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgICAgICBwdXNoICAgIGVzaQorICAgICAgICBwdXNoICAgIGVkaQogCi0JZ2V0X0dPVAllYngJCTsgZ2V0IEdPVCBhZGRyZXNzCisgICAgICAgIGdldF9HT1QgZWJ4ICAgICAgICAgICAgIDsgZ2V0IEdPVCBhZGRyZXNzCiAKLQk7IC0tLS0gUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMgZnJvbSBpbnB1dCwgc3RvcmUgaW50byB3b3JrIGFycmF5LgorICAgICAgICA7IC0tLS0gUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMgZnJvbSBpbnB1dCwgc3RvcmUgaW50byB3b3JrIGFycmF5LgogCi07CW1vdgllYXgsIFtvcmlnaW5hbF9lYnBdCi0JbW92CWVkeCwgUE9JTlRFUiBbZGN0X3RhYmxlKGVheCldCTsgcXVhbnRwdHIKLQltb3YJZXNpLCBKQ09FRlBUUiBbY29lZl9ibG9jayhlYXgpXQkJOyBpbnB0cgotCWxlYQllZGksIFt3b3Jrc3BhY2VdCQkJOyBKQ09FRiAqIHdzcHRyCi0JbW92CWVjeCwgRENUU0laRS80CQkJCTsgY3RyCi0JYWxpZ254CTE2LDcKKzsgICAgICAgbW92ICAgICBlYXgsIFtvcmlnaW5hbF9lYnBdCisgICAgICAgIG1vdiAgICAgZWR4LCBQT0lOVEVSIFtkY3RfdGFibGUoZWF4KV0gICAgICAgICAgIDsgcXVhbnRwdHIKKyAgICAgICAgbW92ICAgICBlc2ksIEpDT0VGUFRSIFtjb2VmX2Jsb2NrKGVheCldICAgICAgICAgOyBpbnB0cgorICAgICAgICBsZWEgICAgIGVkaSwgW3dvcmtzcGFjZV0gICAgICAgICAgICAgICAgICAgICAgICA7IEpDT0VGICogd3NwdHIKKyAgICAgICAgbW92ICAgICBlY3gsIERDVFNJWkUvNCAgICAgICAgICAgICAgICAgICAgICAgICAgOyBjdHIKKyAgICAgICAgYWxpZ254ICAxNiw3CiAuY29sdW1ubG9vcDoKICVpZm5kZWYgTk9fWkVST19DT0xVTU5fVEVTVF80WDRfTU1YCi0JbW92CWVheCwgRFdPUkQgW0RXQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQotCW9yCWVheCwgRFdPUkQgW0RXQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQotCWpueglzaG9ydCAuY29sdW1uRENUCisgICAgICAgIG1vdiAgICAgZWF4LCBEV09SRCBbRFdCTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG9yICAgICAgZWF4LCBEV09SRCBbRFdCTE9DSygyLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIGpueiAgICAgc2hvcnQgLmNvbHVtbkRDVAogCi0JbW92cQltbTAsIE1NV09SRCBbTU1CTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCi0JbW92cQltbTEsIE1NV09SRCBbTU1CTE9DSygyLDAsZXNpLFNJWkVPRl9KQ09FRildCi0JcG9yCW1tMCwgTU1XT1JEIFtNTUJMT0NLKDMsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQlwb3IJbW0xLCBNTVdPUkQgW01NQkxPQ0soNSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQotCXBvcgltbTAsIE1NV09SRCBbTU1CTE9DSyg2LDAsZXNpLFNJWkVPRl9KQ09FRildCi0JcG9yCW1tMSwgTU1XT1JEIFtNTUJMT0NLKDcsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQlwb3IJbW0wLG1tMQotCXBhY2tzc3diIG1tMCxtbTAKLQltb3ZkCWVheCxtbTAKLQl0ZXN0CWVheCxlYXgKLQlqbnoJc2hvcnQgLmNvbHVtbkRDVAorICAgICAgICBtb3ZxICAgIG1tMCwgTU1XT1JEIFtNTUJMT0NLKDEsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgbW92cSAgICBtbTEsIE1NV09SRCBbTU1CTE9DSygyLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIHBvciAgICAgbW0wLCBNTVdPUkQgW01NQkxPQ0soMywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBwb3IgICAgIG1tMSwgTU1XT1JEIFtNTUJMT0NLKDUsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgcG9yICAgICBtbTAsIE1NV09SRCBbTU1CTE9DSyg2LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIHBvciAgICAgbW0xLCBNTVdPUkQgW01NQkxPQ0soNywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBwb3IgICAgIG1tMCxtbTEKKyAgICAgICAgcGFja3Nzd2IgbW0wLG1tMAorICAgICAgICBtb3ZkICAgIGVheCxtbTAKKyAgICAgICAgdGVzdCAgICBlYXgsZWF4CisgICAgICAgIGpueiAgICAgc2hvcnQgLmNvbHVtbkRDVAogCi0JOyAtLSBBQyB0ZXJtcyBhbGwgemVybworICAgICAgICA7IC0tIEFDIHRlcm1zIGFsbCB6ZXJvCiAKLQltb3ZxCW1tMCwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQlwbXVsbHcJbW0wLCBNTVdPUkQgW01NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKyAgICAgICAgbW92cSAgICBtbTAsIE1NV09SRCBbTU1CTE9DSygwLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIHBtdWxsdyAgbW0wLCBNTVdPUkQgW01NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KIAotCXBzbGx3CW1tMCxQQVNTMV9CSVRTCisgICAgICAgIHBzbGx3ICAgbW0wLFBBU1MxX0JJVFMKIAotCW1vdnEgICAgICBtbTIsbW0wCQk7IG1tMD1pbjA9KDAwIDAxIDAyIDAzKQotCXB1bnBja2x3ZCBtbTAsbW0wCQk7IG1tMD0oMDAgMDAgMDEgMDEpCi0JcHVucGNraHdkIG1tMixtbTIJCTsgbW0yPSgwMiAwMiAwMyAwMykKKyAgICAgICAgbW92cSAgICAgIG1tMixtbTAgICAgICAgICAgICAgICA7IG1tMD1pbjA9KDAwIDAxIDAyIDAzKQorICAgICAgICBwdW5wY2tsd2QgbW0wLG1tMCAgICAgICAgICAgICAgIDsgbW0wPSgwMCAwMCAwMSAwMSkKKyAgICAgICAgcHVucGNraHdkIG1tMixtbTIgICAgICAgICAgICAgICA7IG1tMj0oMDIgMDIgMDMgMDMpCiAKLQltb3ZxICAgICAgbW0xLG1tMAotCXB1bnBja2xkcSBtbTAsbW0wCQk7IG1tMD0oMDAgMDAgMDAgMDApCi0JcHVucGNraGRxIG1tMSxtbTEJCTsgbW0xPSgwMSAwMSAwMSAwMSkKLQltb3ZxICAgICAgbW0zLG1tMgotCXB1bnBja2xkcSBtbTIsbW0yCQk7IG1tMj0oMDIgMDIgMDIgMDIpCi0JcHVucGNraGRxIG1tMyxtbTMJCTsgbW0zPSgwMyAwMyAwMyAwMykKKyAgICAgICAgbW92cSAgICAgIG1tMSxtbTAKKyAgICAgICAgcHVucGNrbGRxIG1tMCxtbTAgICAgICAgICAgICAgICA7IG1tMD0oMDAgMDAgMDAgMDApCisgICAgICAgIHB1bnBja2hkcSBtbTEsbW0xICAgICAgICAgICAgICAgOyBtbTE9KDAxIDAxIDAxIDAxKQorICAgICAgICBtb3ZxICAgICAgbW0zLG1tMgorICAgICAgICBwdW5wY2tsZHEgbW0yLG1tMiAgICAgICAgICAgICAgIDsgbW0yPSgwMiAwMiAwMiAwMikKKyAgICAgICAgcHVucGNraGRxIG1tMyxtbTMgICAgICAgICAgICAgICA7IG1tMz0oMDMgMDMgMDMgMDMpCiAKLQltb3ZxCU1NV09SRCBbTU1CTE9DSygwLDAsZWRpLFNJWkVPRl9KQ09FRildLCBtbTAKLQltb3ZxCU1NV09SRCBbTU1CTE9DSygxLDAsZWRpLFNJWkVPRl9KQ09FRildLCBtbTEKLQltb3ZxCU1NV09SRCBbTU1CTE9DSygyLDAsZWRpLFNJWkVPRl9KQ09FRildLCBtbTIKLQltb3ZxCU1NV09SRCBbTU1CTE9DSygzLDAsZWRpLFNJWkVPRl9KQ09FRildLCBtbTMKLQlqbXAJbmVhciAubmV4dGNvbHVtbgotCWFsaWdueAkxNiw3CisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtNTUJMT0NLKDAsMCxlZGksU0laRU9GX0pDT0VGKV0sIG1tMAorICAgICAgICBtb3ZxICAgIE1NV09SRCBbTU1CTE9DSygxLDAsZWRpLFNJWkVPRl9KQ09FRildLCBtbTEKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMiwwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0yCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtNTUJMT0NLKDMsMCxlZGksU0laRU9GX0pDT0VGKV0sIG1tMworICAgICAgICBqbXAgICAgIG5lYXIgLm5leHRjb2x1bW4KKyAgICAgICAgYWxpZ254ICAxNiw3CiAlZW5kaWYKIC5jb2x1bW5EQ1Q6CiAKLQk7IC0tIE9kZCBwYXJ0CisgICAgICAgIDsgLS0gT2RkIHBhcnQKIAotCW1vdnEJbW0wLCBNTVdPUkQgW01NQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQotCW1vdnEJbW0xLCBNTVdPUkQgW01NQkxPQ0soMywwLGVzaSxTSVpFT0ZfSkNPRUYpXQotCXBtdWxsdwltbTAsIE1NV09SRCBbTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQotCXBtdWxsdwltbTEsIE1NV09SRCBbTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQotCW1vdnEJbW0yLCBNTVdPUkQgW01NQkxPQ0soNSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQotCW1vdnEJbW0zLCBNTVdPUkQgW01NQkxPQ0soNywwLGVzaSxTSVpFT0ZfSkNPRUYpXQotCXBtdWxsdwltbTIsIE1NV09SRCBbTU1CTE9DSyg1LDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQotCXBtdWxsdwltbTMsIE1NV09SRCBbTU1CTE9DSyg3LDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorICAgICAgICBtb3ZxICAgIG1tMCwgTU1XT1JEIFtNTUJMT0NLKDEsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgbW92cSAgICBtbTEsIE1NV09SRCBbTU1CTE9DSygzLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIHBtdWxsdyAgbW0wLCBNTVdPUkQgW01NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKyAgICAgICAgcG11bGx3ICBtbTEsIE1NV09SRCBbTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorICAgICAgICBtb3ZxICAgIG1tMiwgTU1XT1JEIFtNTUJMT0NLKDUsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgbW92cSAgICBtbTMsIE1NV09SRCBbTU1CTE9DSyg3LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIHBtdWxsdyAgbW0yLCBNTVdPUkQgW01NQkxPQ0soNSwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKyAgICAgICAgcG11bGx3ICBtbTMsIE1NV09SRCBbTU1CTE9DSyg3LDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQogCi0JbW92cSAgICAgIG1tNCxtbTAKLQltb3ZxICAgICAgbW01LG1tMAotCXB1bnBja2x3ZCBtbTQsbW0xCi0JcHVucGNraHdkIG1tNSxtbTEKLQltb3ZxICAgICAgbW0wLG1tNAotCW1vdnEgICAgICBtbTEsbW01Ci0JcG1hZGR3ZCAgIG1tNCxbR09UT0ZGKGVieCxQV19GMjU2X0YwODkpXQk7IG1tND0odG1wMkwpCi0JcG1hZGR3ZCAgIG1tNSxbR09UT0ZGKGVieCxQV19GMjU2X0YwODkpXQk7IG1tNT0odG1wMkgpCi0JcG1hZGR3ZCAgIG1tMCxbR09UT0ZGKGVieCxQV19GMTA2X01GMjE3KV0JOyBtbTA9KHRtcDBMKQotCXBtYWRkd2QgICBtbTEsW0dPVE9GRihlYngsUFdfRjEwNl9NRjIxNyldCTsgbW0xPSh0bXAwSCkKKyAgICAgICAgbW92cSAgICAgIG1tNCxtbTAKKyAgICAgICAgbW92cSAgICAgIG1tNSxtbTAKKyAgICAgICAgcHVucGNrbHdkIG1tNCxtbTEKKyAgICAgICAgcHVucGNraHdkIG1tNSxtbTEKKyAgICAgICAgbW92cSAgICAgIG1tMCxtbTQKKyAgICAgICAgbW92cSAgICAgIG1tMSxtbTUKKyAgICAgICAgcG1hZGR3ZCAgIG1tNCxbR09UT0ZGKGVieCxQV19GMjU2X0YwODkpXSAgICAgICAgOyBtbTQ9KHRtcDJMKQorICAgICAgICBwbWFkZHdkICAgbW01LFtHT1RPRkYoZWJ4LFBXX0YyNTZfRjA4OSldICAgICAgICA7IG1tNT0odG1wMkgpCisgICAgICAgIHBtYWRkd2QgICBtbTAsW0dPVE9GRihlYngsUFdfRjEwNl9NRjIxNyldICAgICAgIDsgbW0wPSh0bXAwTCkKKyAgICAgICAgcG1hZGR3ZCAgIG1tMSxbR09UT0ZGKGVieCxQV19GMTA2X01GMjE3KV0gICAgICAgOyBtbTE9KHRtcDBIKQogCi0JbW92cSAgICAgIG1tNixtbTIKLQltb3ZxICAgICAgbW03LG1tMgotCXB1bnBja2x3ZCBtbTYsbW0zCi0JcHVucGNraHdkIG1tNyxtbTMKLQltb3ZxICAgICAgbW0yLG1tNgotCW1vdnEgICAgICBtbTMsbW03Ci0JcG1hZGR3ZCAgIG1tNixbR09UT0ZGKGVieCxQV19NRjA2MF9NRjA1MCldCTsgbW02PSh0bXAyTCkKLQlwbWFkZHdkICAgbW03LFtHT1RPRkYoZWJ4LFBXX01GMDYwX01GMDUwKV0JOyBtbTc9KHRtcDJIKQotCXBtYWRkd2QgICBtbTIsW0dPVE9GRihlYngsUFdfRjE0NV9NRjAyMSldCTsgbW0yPSh0bXAwTCkKLQlwbWFkZHdkICAgbW0zLFtHT1RPRkYoZWJ4LFBXX0YxNDVfTUYwMjEpXQk7IG1tMz0odG1wMEgpCisgICAgICAgIG1vdnEgICAgICBtbTYsbW0yCisgICAgICAgIG1vdnEgICAgICBtbTcsbW0yCisgICAgICAgIHB1bnBja2x3ZCBtbTYsbW0zCisgICAgICAgIHB1bnBja2h3ZCBtbTcsbW0zCisgICAgICAgIG1vdnEgICAgICBtbTIsbW02CisgICAgICAgIG1vdnEgICAgICBtbTMsbW03CisgICAgICAgIHBtYWRkd2QgICBtbTYsW0dPVE9GRihlYngsUFdfTUYwNjBfTUYwNTApXSAgICAgIDsgbW02PSh0bXAyTCkKKyAgICAgICAgcG1hZGR3ZCAgIG1tNyxbR09UT0ZGKGVieCxQV19NRjA2MF9NRjA1MCldICAgICAgOyBtbTc9KHRtcDJIKQorICAgICAgICBwbWFkZHdkICAgbW0yLFtHT1RPRkYoZWJ4LFBXX0YxNDVfTUYwMjEpXSAgICAgICA7IG1tMj0odG1wMEwpCisgICAgICAgIHBtYWRkd2QgICBtbTMsW0dPVE9GRihlYngsUFdfRjE0NV9NRjAyMSldICAgICAgIDsgbW0zPSh0bXAwSCkKIAotCXBhZGRkCW1tNixtbTQJCQk7IG1tNj10bXAyTAotCXBhZGRkCW1tNyxtbTUJCQk7IG1tNz10bXAySAotCXBhZGRkCW1tMixtbTAJCQk7IG1tMj10bXAwTAotCXBhZGRkCW1tMyxtbTEJCQk7IG1tMz10bXAwSAorICAgICAgICBwYWRkZCAgIG1tNixtbTQgICAgICAgICAgICAgICAgIDsgbW02PXRtcDJMCisgICAgICAgIHBhZGRkICAgbW03LG1tNSAgICAgICAgICAgICAgICAgOyBtbTc9dG1wMkgKKyAgICAgICAgcGFkZGQgICBtbTIsbW0wICAgICAgICAgICAgICAgICA7IG1tMj10bXAwTAorICAgICAgICBwYWRkZCAgIG1tMyxtbTEgICAgICAgICAgICAgICAgIDsgbW0zPXRtcDBICiAKLQltb3ZxCU1NV09SRCBbd2soMCldLCBtbTIJOyB3aygwKT10bXAwTAotCW1vdnEJTU1XT1JEIFt3aygxKV0sIG1tMwk7IHdrKDEpPXRtcDBICisgICAgICAgIG1vdnEgICAgTU1XT1JEIFt3aygwKV0sIG1tMiAgICAgOyB3aygwKT10bXAwTAorICAgICAgICBtb3ZxICAgIE1NV09SRCBbd2soMSldLCBtbTMgICAgIDsgd2soMSk9dG1wMEgKIAotCTsgLS0gRXZlbiBwYXJ0CisgICAgICAgIDsgLS0gRXZlbiBwYXJ0CiAKLQltb3ZxCW1tNCwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQltb3ZxCW1tNSwgTU1XT1JEIFtNTUJMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQltb3ZxCW1tMCwgTU1XT1JEIFtNTUJMT0NLKDYsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQlwbXVsbHcJbW00LCBNTVdPUkQgW01NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KLQlwbXVsbHcJbW01LCBNTVdPUkQgW01NQkxPQ0soMiwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KLQlwbXVsbHcJbW0wLCBNTVdPUkQgW01NQkxPQ0soNiwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKyAgICAgICAgbW92cSAgICBtbTQsIE1NV09SRCBbTU1CTE9DSygwLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdnEgICAgbW01LCBNTVdPUkQgW01NQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBtb3ZxICAgIG1tMCwgTU1XT1JEIFtNTUJMT0NLKDYsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgcG11bGx3ICBtbTQsIE1NV09SRCBbTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorICAgICAgICBwbXVsbHcgIG1tNSwgTU1XT1JEIFtNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisgICAgICAgIHBtdWxsdyAgbW0wLCBNTVdPUkQgW01NQkxPQ0soNiwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KIAotCXB4b3IgICAgICBtbTEsbW0xCi0JcHhvciAgICAgIG1tMixtbTIKLQlwdW5wY2tsd2QgbW0xLG1tNAkJOyBtbTE9dG1wMEwKLQlwdW5wY2tod2QgbW0yLG1tNAkJOyBtbTI9dG1wMEgKLQlwc3JhZCAgICAgbW0xLCgxNi1DT05TVF9CSVRTLTEpCTsgcHNyYWQgbW0xLDE2ICYgcHNsbGQgbW0xLENPTlNUX0JJVFMrMQotCXBzcmFkICAgICBtbTIsKDE2LUNPTlNUX0JJVFMtMSkJOyBwc3JhZCBtbTIsMTYgJiBwc2xsZCBtbTIsQ09OU1RfQklUUysxCisgICAgICAgIHB4b3IgICAgICBtbTEsbW0xCisgICAgICAgIHB4b3IgICAgICBtbTIsbW0yCisgICAgICAgIHB1bnBja2x3ZCBtbTEsbW00ICAgICAgICAgICAgICAgOyBtbTE9dG1wMEwKKyAgICAgICAgcHVucGNraHdkIG1tMixtbTQgICAgICAgICAgICAgICA7IG1tMj10bXAwSAorICAgICAgICBwc3JhZCAgICAgbW0xLCgxNi1DT05TVF9CSVRTLTEpIDsgcHNyYWQgbW0xLDE2ICYgcHNsbGQgbW0xLENPTlNUX0JJVFMrMQorICAgICAgICBwc3JhZCAgICAgbW0yLCgxNi1DT05TVF9CSVRTLTEpIDsgcHNyYWQgbW0yLDE2ICYgcHNsbGQgbW0yLENPTlNUX0JJVFMrMQogCi0JbW92cSAgICAgIG1tMyxtbTUJCTsgbW01PWluMj16MgotCXB1bnBja2x3ZCBtbTUsbW0wCQk7IG1tMD1pbjY9ejMKLQlwdW5wY2tod2QgbW0zLG1tMAotCXBtYWRkd2QgICBtbTUsW0dPVE9GRihlYngsUFdfRjE4NF9NRjA3NildCTsgbW01PXRtcDJMCi0JcG1hZGR3ZCAgIG1tMyxbR09UT0ZGKGVieCxQV19GMTg0X01GMDc2KV0JOyBtbTM9dG1wMkgKKyAgICAgICAgbW92cSAgICAgIG1tMyxtbTUgICAgICAgICAgICAgICA7IG1tNT1pbjI9ejIKKyAgICAgICAgcHVucGNrbHdkIG1tNSxtbTAgICAgICAgICAgICAgICA7IG1tMD1pbjY9ejMKKyAgICAgICAgcHVucGNraHdkIG1tMyxtbTAKKyAgICAgICAgcG1hZGR3ZCAgIG1tNSxbR09UT0ZGKGVieCxQV19GMTg0X01GMDc2KV0gICAgICAgOyBtbTU9dG1wMkwKKyAgICAgICAgcG1hZGR3ZCAgIG1tMyxbR09UT0ZGKGVieCxQV19GMTg0X01GMDc2KV0gICAgICAgOyBtbTM9dG1wMkgKIAotCW1vdnEJbW00LG1tMQotCW1vdnEJbW0wLG1tMgotCXBhZGRkCW1tMSxtbTUJCQk7IG1tMT10bXAxMEwKLQlwYWRkZAltbTIsbW0zCQkJOyBtbTI9dG1wMTBICi0JcHN1YmQJbW00LG1tNQkJCTsgbW00PXRtcDEyTAotCXBzdWJkCW1tMCxtbTMJCQk7IG1tMD10bXAxMkgKKyAgICAgICAgbW92cSAgICBtbTQsbW0xCisgICAgICAgIG1vdnEgICAgbW0wLG1tMgorICAgICAgICBwYWRkZCAgIG1tMSxtbTUgICAgICAgICAgICAgICAgIDsgbW0xPXRtcDEwTAorICAgICAgICBwYWRkZCAgIG1tMixtbTMgICAgICAgICAgICAgICAgIDsgbW0yPXRtcDEwSAorICAgICAgICBwc3ViZCAgIG1tNCxtbTUgICAgICAgICAgICAgICAgIDsgbW00PXRtcDEyTAorICAgICAgICBwc3ViZCAgIG1tMCxtbTMgICAgICAgICAgICAgICAgIDsgbW0wPXRtcDEySAogCi0JOyAtLSBGaW5hbCBvdXRwdXQgc3RhZ2UKKyAgICAgICAgOyAtLSBGaW5hbCBvdXRwdXQgc3RhZ2UKIAotCW1vdnEJbW01LG1tMQotCW1vdnEJbW0zLG1tMgotCXBhZGRkCW1tMSxtbTYJCQk7IG1tMT1kYXRhMEwKLQlwYWRkZAltbTIsbW03CQkJOyBtbTI9ZGF0YTBICi0JcHN1YmQJbW01LG1tNgkJCTsgbW01PWRhdGEzTAotCXBzdWJkCW1tMyxtbTcJCQk7IG1tMz1kYXRhM0gKKyAgICAgICAgbW92cSAgICBtbTUsbW0xCisgICAgICAgIG1vdnEgICAgbW0zLG1tMgorICAgICAgICBwYWRkZCAgIG1tMSxtbTYgICAgICAgICAgICAgICAgIDsgbW0xPWRhdGEwTAorICAgICAgICBwYWRkZCAgIG1tMixtbTcgICAgICAgICAgICAgICAgIDsgbW0yPWRhdGEwSAorICAgICAgICBwc3ViZCAgIG1tNSxtbTYgICAgICAgICAgICAgICAgIDsgbW01PWRhdGEzTAorICAgICAgICBwc3ViZCAgIG1tMyxtbTcgICAgICAgICAgICAgICAgIDsgbW0zPWRhdGEzSAogCi0JbW92cQltbTYsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMV80KV0JOyBtbTY9W1BEX0RFU0NBTEVfUDFfNF0KKyAgICAgICAgbW92cSAgICBtbTYsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMV80KV0gICAgICAgOyBtbTY9W1BEX0RFU0NBTEVfUDFfNF0KIAotCXBhZGRkCW1tMSxtbTYKLQlwYWRkZAltbTIsbW02Ci0JcHNyYWQJbW0xLERFU0NBTEVfUDFfNAotCXBzcmFkCW1tMixERVNDQUxFX1AxXzQKLQlwYWRkZAltbTUsbW02Ci0JcGFkZGQJbW0zLG1tNgotCXBzcmFkCW1tNSxERVNDQUxFX1AxXzQKLQlwc3JhZAltbTMsREVTQ0FMRV9QMV80CisgICAgICAgIHBhZGRkICAgbW0xLG1tNgorICAgICAgICBwYWRkZCAgIG1tMixtbTYKKyAgICAgICAgcHNyYWQgICBtbTEsREVTQ0FMRV9QMV80CisgICAgICAgIHBzcmFkICAgbW0yLERFU0NBTEVfUDFfNAorICAgICAgICBwYWRkZCAgIG1tNSxtbTYKKyAgICAgICAgcGFkZGQgICBtbTMsbW02CisgICAgICAgIHBzcmFkICAgbW01LERFU0NBTEVfUDFfNAorICAgICAgICBwc3JhZCAgIG1tMyxERVNDQUxFX1AxXzQKIAotCXBhY2tzc2R3ICBtbTEsbW0yCQk7IG1tMT1kYXRhMD0oMDAgMDEgMDIgMDMpCi0JcGFja3NzZHcgIG1tNSxtbTMJCTsgbW01PWRhdGEzPSgzMCAzMSAzMiAzMykKKyAgICAgICAgcGFja3NzZHcgIG1tMSxtbTIgICAgICAgICAgICAgICA7IG1tMT1kYXRhMD0oMDAgMDEgMDIgMDMpCisgICAgICAgIHBhY2tzc2R3ICBtbTUsbW0zICAgICAgICAgICAgICAgOyBtbTU9ZGF0YTM9KDMwIDMxIDMyIDMzKQogCi0JbW92cQltbTcsIE1NV09SRCBbd2soMCldCTsgbW03PXRtcDBMCi0JbW92cQltbTYsIE1NV09SRCBbd2soMSldCTsgbW02PXRtcDBICisgICAgICAgIG1vdnEgICAgbW03LCBNTVdPUkQgW3drKDApXSAgICAgOyBtbTc9dG1wMEwKKyAgICAgICAgbW92cSAgICBtbTYsIE1NV09SRCBbd2soMSldICAgICA7IG1tNj10bXAwSAogCi0JbW92cQltbTIsbW00Ci0JbW92cQltbTMsbW0wCi0JcGFkZGQJbW00LG1tNwkJCTsgbW00PWRhdGExTAotCXBhZGRkCW1tMCxtbTYJCQk7IG1tMD1kYXRhMUgKLQlwc3ViZAltbTIsbW03CQkJOyBtbTI9ZGF0YTJMCi0JcHN1YmQJbW0zLG1tNgkJCTsgbW0zPWRhdGEySAorICAgICAgICBtb3ZxICAgIG1tMixtbTQKKyAgICAgICAgbW92cSAgICBtbTMsbW0wCisgICAgICAgIHBhZGRkICAgbW00LG1tNyAgICAgICAgICAgICAgICAgOyBtbTQ9ZGF0YTFMCisgICAgICAgIHBhZGRkICAgbW0wLG1tNiAgICAgICAgICAgICAgICAgOyBtbTA9ZGF0YTFICisgICAgICAgIHBzdWJkICAgbW0yLG1tNyAgICAgICAgICAgICAgICAgOyBtbTI9ZGF0YTJMCisgICAgICAgIHBzdWJkICAgbW0zLG1tNiAgICAgICAgICAgICAgICAgOyBtbTM9ZGF0YTJICiAKLQltb3ZxCW1tNyxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxXzQpXQk7IG1tNz1bUERfREVTQ0FMRV9QMV80XQorICAgICAgICBtb3ZxICAgIG1tNyxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxXzQpXSAgICAgICA7IG1tNz1bUERfREVTQ0FMRV9QMV80XQogCi0JcGFkZGQJbW00LG1tNwotCXBhZGRkCW1tMCxtbTcKLQlwc3JhZAltbTQsREVTQ0FMRV9QMV80Ci0JcHNyYWQJbW0wLERFU0NBTEVfUDFfNAotCXBhZGRkCW1tMixtbTcKLQlwYWRkZAltbTMsbW03Ci0JcHNyYWQJbW0yLERFU0NBTEVfUDFfNAotCXBzcmFkCW1tMyxERVNDQUxFX1AxXzQKKyAgICAgICAgcGFkZGQgICBtbTQsbW03CisgICAgICAgIHBhZGRkICAgbW0wLG1tNworICAgICAgICBwc3JhZCAgIG1tNCxERVNDQUxFX1AxXzQKKyAgICAgICAgcHNyYWQgICBtbTAsREVTQ0FMRV9QMV80CisgICAgICAgIHBhZGRkICAgbW0yLG1tNworICAgICAgICBwYWRkZCAgIG1tMyxtbTcKKyAgICAgICAgcHNyYWQgICBtbTIsREVTQ0FMRV9QMV80CisgICAgICAgIHBzcmFkICAgbW0zLERFU0NBTEVfUDFfNAogCi0JcGFja3NzZHcgIG1tNCxtbTAJCTsgbW00PWRhdGExPSgxMCAxMSAxMiAxMykKLQlwYWNrc3NkdyAgbW0yLG1tMwkJOyBtbTI9ZGF0YTI9KDIwIDIxIDIyIDIzKQorICAgICAgICBwYWNrc3NkdyAgbW00LG1tMCAgICAgICAgICAgICAgIDsgbW00PWRhdGExPSgxMCAxMSAxMiAxMykKKyAgICAgICAgcGFja3NzZHcgIG1tMixtbTMgICAgICAgICAgICAgICA7IG1tMj1kYXRhMj0oMjAgMjEgMjIgMjMpCiAKLQltb3ZxICAgICAgbW02LG1tMQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCi0JcHVucGNrbHdkIG1tMSxtbTQJCTsgbW0xPSgwMCAxMCAwMSAxMSkKLQlwdW5wY2tod2QgbW02LG1tNAkJOyBtbTY9KDAyIDEyIDAzIDEzKQotCW1vdnEgICAgICBtbTcsbW0yCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKLQlwdW5wY2tsd2QgbW0yLG1tNQkJOyBtbTI9KDIwIDMwIDIxIDMxKQotCXB1bnBja2h3ZCBtbTcsbW01CQk7IG1tNz0oMjIgMzIgMjMgMzMpCisgICAgICAgIG1vdnEgICAgICBtbTYsbW0xICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgICAgIHB1bnBja2x3ZCBtbTEsbW00ICAgICAgICAgICAgICAgOyBtbTE9KDAwIDEwIDAxIDExKQorICAgICAgICBwdW5wY2tod2QgbW02LG1tNCAgICAgICAgICAgICAgIDsgbW02PSgwMiAxMiAwMyAxMykKKyAgICAgICAgbW92cSAgICAgIG1tNyxtbTIgICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICAgICAgcHVucGNrbHdkIG1tMixtbTUgICAgICAgICAgICAgICA7IG1tMj0oMjAgMzAgMjEgMzEpCisgICAgICAgIHB1bnBja2h3ZCBtbTcsbW01ICAgICAgICAgICAgICAgOyBtbTc9KDIyIDMyIDIzIDMzKQogCi0JbW92cSAgICAgIG1tMCxtbTEJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQotCXB1bnBja2xkcSBtbTEsbW0yCQk7IG1tMT0oMDAgMTAgMjAgMzApCi0JcHVucGNraGRxIG1tMCxtbTIJCTsgbW0wPSgwMSAxMSAyMSAzMSkKLQltb3ZxICAgICAgbW0zLG1tNgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCi0JcHVucGNrbGRxIG1tNixtbTcJCTsgbW02PSgwMiAxMiAyMiAzMikKLQlwdW5wY2toZHEgbW0zLG1tNwkJOyBtbTM9KDAzIDEzIDIzIDMzKQorICAgICAgICBtb3ZxICAgICAgbW0wLG1tMSAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgICAgICBwdW5wY2tsZHEgbW0xLG1tMiAgICAgICAgICAgICAgIDsgbW0xPSgwMCAxMCAyMCAzMCkKKyAgICAgICAgcHVucGNraGRxIG1tMCxtbTIgICAgICAgICAgICAgICA7IG1tMD0oMDEgMTEgMjEgMzEpCisgICAgICAgIG1vdnEgICAgICBtbTMsbW02ICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgICAgIHB1bnBja2xkcSBtbTYsbW03ICAgICAgICAgICAgICAgOyBtbTY9KDAyIDEyIDIyIDMyKQorICAgICAgICBwdW5wY2toZHEgbW0zLG1tNyAgICAgICAgICAgICAgIDsgbW0zPSgwMyAxMyAyMyAzMykKIAotCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDAsMCxlZGksU0laRU9GX0pDT0VGKV0sIG1tMQotCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDEsMCxlZGksU0laRU9GX0pDT0VGKV0sIG1tMAotCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDIsMCxlZGksU0laRU9GX0pDT0VGKV0sIG1tNgotCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDMsMCxlZGksU0laRU9GX0pDT0VGKV0sIG1tMworICAgICAgICBtb3ZxICAgIE1NV09SRCBbTU1CTE9DSygwLDAsZWRpLFNJWkVPRl9KQ09FRildLCBtbTEKKyAgICAgICAgbW92cSAgICBNTVdPUkQgW01NQkxPQ0soMSwwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0wCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtNTUJMT0NLKDIsMCxlZGksU0laRU9GX0pDT0VGKV0sIG1tNgorICAgICAgICBtb3ZxICAgIE1NV09SRCBbTU1CTE9DSygzLDAsZWRpLFNJWkVPRl9KQ09FRildLCBtbTMKIAogLm5leHRjb2x1bW46Ci0JYWRkCWVzaSwgYnl0ZSA0KlNJWkVPRl9KQ09FRgkJOyBjb2VmX2Jsb2NrCi0JYWRkCWVkeCwgYnl0ZSA0KlNJWkVPRl9JU0xPV19NVUxUX1RZUEUJOyBxdWFudHB0cgotCWFkZAllZGksIGJ5dGUgNCpEQ1RTSVpFKlNJWkVPRl9KQ09FRgk7IHdzcHRyCi0JZGVjCWVjeAkJCQkJOyBjdHIKLQlqbnoJbmVhciAuY29sdW1ubG9vcAorICAgICAgICBhZGQgICAgIGVzaSwgYnl0ZSA0KlNJWkVPRl9KQ09FRiAgICAgICAgICAgICAgICA7IGNvZWZfYmxvY2sKKyAgICAgICAgYWRkICAgICBlZHgsIGJ5dGUgNCpTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFICAgICAgOyBxdWFudHB0cgorICAgICAgICBhZGQgICAgIGVkaSwgYnl0ZSA0KkRDVFNJWkUqU0laRU9GX0pDT0VGICAgICAgICA7IHdzcHRyCisgICAgICAgIGRlYyAgICAgZWN4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgY3RyCisgICAgICAgIGpueiAgICAgbmVhciAuY29sdW1ubG9vcAogCi0JOyAtLS0tIFBhc3MgMjogcHJvY2VzcyByb3dzIGZyb20gd29yayBhcnJheSwgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuCisgICAgICAgIDsgLS0tLSBQYXNzIDI6IHByb2Nlc3Mgcm93cyBmcm9tIHdvcmsgYXJyYXksIHN0b3JlIGludG8gb3V0cHV0IGFycmF5LgogCi0JbW92CWVheCwgW29yaWdpbmFsX2VicF0KLQlsZWEJZXNpLCBbd29ya3NwYWNlXQkJCTsgSkNPRUYgKiB3c3B0cgotCW1vdgllZGksIEpTQU1QQVJSQVkgW291dHB1dF9idWYoZWF4KV0JOyAoSlNBTVBST1cgKikKLQltb3YJZWF4LCBKRElNRU5TSU9OIFtvdXRwdXRfY29sKGVheCldCisgICAgICAgIG1vdiAgICAgZWF4LCBbb3JpZ2luYWxfZWJwXQorICAgICAgICBsZWEgICAgIGVzaSwgW3dvcmtzcGFjZV0gICAgICAgICAgICAgICAgICAgICAgICA7IEpDT0VGICogd3NwdHIKKyAgICAgICAgbW92ICAgICBlZGksIEpTQU1QQVJSQVkgW291dHB1dF9idWYoZWF4KV0gICAgICAgOyAoSlNBTVBST1cgKikKKyAgICAgICAgbW92ICAgICBlYXgsIEpESU1FTlNJT04gW291dHB1dF9jb2woZWF4KV0KIAotCTsgLS0gT2RkIHBhcnQKKyAgICAgICAgOyAtLSBPZGQgcGFydAogCi0JbW92cQltbTAsIE1NV09SRCBbTU1CTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCi0JbW92cQltbTEsIE1NV09SRCBbTU1CTE9DSygzLDAsZXNpLFNJWkVPRl9KQ09FRildCi0JbW92cQltbTIsIE1NV09SRCBbTU1CTE9DSyg1LDAsZXNpLFNJWkVPRl9KQ09FRildCi0JbW92cQltbTMsIE1NV09SRCBbTU1CTE9DSyg3LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdnEgICAgbW0wLCBNTVdPUkQgW01NQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBtb3ZxICAgIG1tMSwgTU1XT1JEIFtNTUJMT0NLKDMsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgbW92cSAgICBtbTIsIE1NV09SRCBbTU1CTE9DSyg1LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdnEgICAgbW0zLCBNTVdPUkQgW01NQkxPQ0soNywwLGVzaSxTSVpFT0ZfSkNPRUYpXQogCi0JbW92cSAgICAgIG1tNCxtbTAKLQltb3ZxICAgICAgbW01LG1tMAotCXB1bnBja2x3ZCBtbTQsbW0xCi0JcHVucGNraHdkIG1tNSxtbTEKLQltb3ZxICAgICAgbW0wLG1tNAotCW1vdnEgICAgICBtbTEsbW01Ci0JcG1hZGR3ZCAgIG1tNCxbR09UT0ZGKGVieCxQV19GMjU2X0YwODkpXQk7IG1tND0odG1wMkwpCi0JcG1hZGR3ZCAgIG1tNSxbR09UT0ZGKGVieCxQV19GMjU2X0YwODkpXQk7IG1tNT0odG1wMkgpCi0JcG1hZGR3ZCAgIG1tMCxbR09UT0ZGKGVieCxQV19GMTA2X01GMjE3KV0JOyBtbTA9KHRtcDBMKQotCXBtYWRkd2QgICBtbTEsW0dPVE9GRihlYngsUFdfRjEwNl9NRjIxNyldCTsgbW0xPSh0bXAwSCkKKyAgICAgICAgbW92cSAgICAgIG1tNCxtbTAKKyAgICAgICAgbW92cSAgICAgIG1tNSxtbTAKKyAgICAgICAgcHVucGNrbHdkIG1tNCxtbTEKKyAgICAgICAgcHVucGNraHdkIG1tNSxtbTEKKyAgICAgICAgbW92cSAgICAgIG1tMCxtbTQKKyAgICAgICAgbW92cSAgICAgIG1tMSxtbTUKKyAgICAgICAgcG1hZGR3ZCAgIG1tNCxbR09UT0ZGKGVieCxQV19GMjU2X0YwODkpXSAgICAgICAgOyBtbTQ9KHRtcDJMKQorICAgICAgICBwbWFkZHdkICAgbW01LFtHT1RPRkYoZWJ4LFBXX0YyNTZfRjA4OSldICAgICAgICA7IG1tNT0odG1wMkgpCisgICAgICAgIHBtYWRkd2QgICBtbTAsW0dPVE9GRihlYngsUFdfRjEwNl9NRjIxNyldICAgICAgIDsgbW0wPSh0bXAwTCkKKyAgICAgICAgcG1hZGR3ZCAgIG1tMSxbR09UT0ZGKGVieCxQV19GMTA2X01GMjE3KV0gICAgICAgOyBtbTE9KHRtcDBIKQogCi0JbW92cSAgICAgIG1tNixtbTIKLQltb3ZxICAgICAgbW03LG1tMgotCXB1bnBja2x3ZCBtbTYsbW0zCi0JcHVucGNraHdkIG1tNyxtbTMKLQltb3ZxICAgICAgbW0yLG1tNgotCW1vdnEgICAgICBtbTMsbW03Ci0JcG1hZGR3ZCAgIG1tNixbR09UT0ZGKGVieCxQV19NRjA2MF9NRjA1MCldCTsgbW02PSh0bXAyTCkKLQlwbWFkZHdkICAgbW03LFtHT1RPRkYoZWJ4LFBXX01GMDYwX01GMDUwKV0JOyBtbTc9KHRtcDJIKQotCXBtYWRkd2QgICBtbTIsW0dPVE9GRihlYngsUFdfRjE0NV9NRjAyMSldCTsgbW0yPSh0bXAwTCkKLQlwbWFkZHdkICAgbW0zLFtHT1RPRkYoZWJ4LFBXX0YxNDVfTUYwMjEpXQk7IG1tMz0odG1wMEgpCisgICAgICAgIG1vdnEgICAgICBtbTYsbW0yCisgICAgICAgIG1vdnEgICAgICBtbTcsbW0yCisgICAgICAgIHB1bnBja2x3ZCBtbTYsbW0zCisgICAgICAgIHB1bnBja2h3ZCBtbTcsbW0zCisgICAgICAgIG1vdnEgICAgICBtbTIsbW02CisgICAgICAgIG1vdnEgICAgICBtbTMsbW03CisgICAgICAgIHBtYWRkd2QgICBtbTYsW0dPVE9GRihlYngsUFdfTUYwNjBfTUYwNTApXSAgICAgIDsgbW02PSh0bXAyTCkKKyAgICAgICAgcG1hZGR3ZCAgIG1tNyxbR09UT0ZGKGVieCxQV19NRjA2MF9NRjA1MCldICAgICAgOyBtbTc9KHRtcDJIKQorICAgICAgICBwbWFkZHdkICAgbW0yLFtHT1RPRkYoZWJ4LFBXX0YxNDVfTUYwMjEpXSAgICAgICA7IG1tMj0odG1wMEwpCisgICAgICAgIHBtYWRkd2QgICBtbTMsW0dPVE9GRihlYngsUFdfRjE0NV9NRjAyMSldICAgICAgIDsgbW0zPSh0bXAwSCkKIAotCXBhZGRkCW1tNixtbTQJCQk7IG1tNj10bXAyTAotCXBhZGRkCW1tNyxtbTUJCQk7IG1tNz10bXAySAotCXBhZGRkCW1tMixtbTAJCQk7IG1tMj10bXAwTAotCXBhZGRkCW1tMyxtbTEJCQk7IG1tMz10bXAwSAorICAgICAgICBwYWRkZCAgIG1tNixtbTQgICAgICAgICAgICAgICAgIDsgbW02PXRtcDJMCisgICAgICAgIHBhZGRkICAgbW03LG1tNSAgICAgICAgICAgICAgICAgOyBtbTc9dG1wMkgKKyAgICAgICAgcGFkZGQgICBtbTIsbW0wICAgICAgICAgICAgICAgICA7IG1tMj10bXAwTAorICAgICAgICBwYWRkZCAgIG1tMyxtbTEgICAgICAgICAgICAgICAgIDsgbW0zPXRtcDBICiAKLQltb3ZxCU1NV09SRCBbd2soMCldLCBtbTIJOyB3aygwKT10bXAwTAotCW1vdnEJTU1XT1JEIFt3aygxKV0sIG1tMwk7IHdrKDEpPXRtcDBICisgICAgICAgIG1vdnEgICAgTU1XT1JEIFt3aygwKV0sIG1tMiAgICAgOyB3aygwKT10bXAwTAorICAgICAgICBtb3ZxICAgIE1NV09SRCBbd2soMSldLCBtbTMgICAgIDsgd2soMSk9dG1wMEgKIAotCTsgLS0gRXZlbiBwYXJ0CisgICAgICAgIDsgLS0gRXZlbiBwYXJ0CiAKLQltb3ZxCW1tNCwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQltb3ZxCW1tNSwgTU1XT1JEIFtNTUJMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQltb3ZxCW1tMCwgTU1XT1JEIFtNTUJMT0NLKDYsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgbW92cSAgICBtbTQsIE1NV09SRCBbTU1CTE9DSygwLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdnEgICAgbW01LCBNTVdPUkQgW01NQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBtb3ZxICAgIG1tMCwgTU1XT1JEIFtNTUJMT0NLKDYsMCxlc2ksU0laRU9GX0pDT0VGKV0KIAotCXB4b3IgICAgICBtbTEsbW0xCi0JcHhvciAgICAgIG1tMixtbTIKLQlwdW5wY2tsd2QgbW0xLG1tNAkJOyBtbTE9dG1wMEwKLQlwdW5wY2tod2QgbW0yLG1tNAkJOyBtbTI9dG1wMEgKLQlwc3JhZCAgICAgbW0xLCgxNi1DT05TVF9CSVRTLTEpCTsgcHNyYWQgbW0xLDE2ICYgcHNsbGQgbW0xLENPTlNUX0JJVFMrMQotCXBzcmFkICAgICBtbTIsKDE2LUNPTlNUX0JJVFMtMSkJOyBwc3JhZCBtbTIsMTYgJiBwc2xsZCBtbTIsQ09OU1RfQklUUysxCisgICAgICAgIHB4b3IgICAgICBtbTEsbW0xCisgICAgICAgIHB4b3IgICAgICBtbTIsbW0yCisgICAgICAgIHB1bnBja2x3ZCBtbTEsbW00ICAgICAgICAgICAgICAgOyBtbTE9dG1wMEwKKyAgICAgICAgcHVucGNraHdkIG1tMixtbTQgICAgICAgICAgICAgICA7IG1tMj10bXAwSAorICAgICAgICBwc3JhZCAgICAgbW0xLCgxNi1DT05TVF9CSVRTLTEpIDsgcHNyYWQgbW0xLDE2ICYgcHNsbGQgbW0xLENPTlNUX0JJVFMrMQorICAgICAgICBwc3JhZCAgICAgbW0yLCgxNi1DT05TVF9CSVRTLTEpIDsgcHNyYWQgbW0yLDE2ICYgcHNsbGQgbW0yLENPTlNUX0JJVFMrMQogCi0JbW92cSAgICAgIG1tMyxtbTUJCTsgbW01PWluMj16MgotCXB1bnBja2x3ZCBtbTUsbW0wCQk7IG1tMD1pbjY9ejMKLQlwdW5wY2tod2QgbW0zLG1tMAotCXBtYWRkd2QgICBtbTUsW0dPVE9GRihlYngsUFdfRjE4NF9NRjA3NildCTsgbW01PXRtcDJMCi0JcG1hZGR3ZCAgIG1tMyxbR09UT0ZGKGVieCxQV19GMTg0X01GMDc2KV0JOyBtbTM9dG1wMkgKKyAgICAgICAgbW92cSAgICAgIG1tMyxtbTUgICAgICAgICAgICAgICA7IG1tNT1pbjI9ejIKKyAgICAgICAgcHVucGNrbHdkIG1tNSxtbTAgICAgICAgICAgICAgICA7IG1tMD1pbjY9ejMKKyAgICAgICAgcHVucGNraHdkIG1tMyxtbTAKKyAgICAgICAgcG1hZGR3ZCAgIG1tNSxbR09UT0ZGKGVieCxQV19GMTg0X01GMDc2KV0gICAgICAgOyBtbTU9dG1wMkwKKyAgICAgICAgcG1hZGR3ZCAgIG1tMyxbR09UT0ZGKGVieCxQV19GMTg0X01GMDc2KV0gICAgICAgOyBtbTM9dG1wMkgKIAotCW1vdnEJbW00LG1tMQotCW1vdnEJbW0wLG1tMgotCXBhZGRkCW1tMSxtbTUJCQk7IG1tMT10bXAxMEwKLQlwYWRkZAltbTIsbW0zCQkJOyBtbTI9dG1wMTBICi0JcHN1YmQJbW00LG1tNQkJCTsgbW00PXRtcDEyTAotCXBzdWJkCW1tMCxtbTMJCQk7IG1tMD10bXAxMkgKKyAgICAgICAgbW92cSAgICBtbTQsbW0xCisgICAgICAgIG1vdnEgICAgbW0wLG1tMgorICAgICAgICBwYWRkZCAgIG1tMSxtbTUgICAgICAgICAgICAgICAgIDsgbW0xPXRtcDEwTAorICAgICAgICBwYWRkZCAgIG1tMixtbTMgICAgICAgICAgICAgICAgIDsgbW0yPXRtcDEwSAorICAgICAgICBwc3ViZCAgIG1tNCxtbTUgICAgICAgICAgICAgICAgIDsgbW00PXRtcDEyTAorICAgICAgICBwc3ViZCAgIG1tMCxtbTMgICAgICAgICAgICAgICAgIDsgbW0wPXRtcDEySAogCi0JOyAtLSBGaW5hbCBvdXRwdXQgc3RhZ2UKKyAgICAgICAgOyAtLSBGaW5hbCBvdXRwdXQgc3RhZ2UKIAotCW1vdnEJbW01LG1tMQotCW1vdnEJbW0zLG1tMgotCXBhZGRkCW1tMSxtbTYJCQk7IG1tMT1kYXRhMEwKLQlwYWRkZAltbTIsbW03CQkJOyBtbTI9ZGF0YTBICi0JcHN1YmQJbW01LG1tNgkJCTsgbW01PWRhdGEzTAotCXBzdWJkCW1tMyxtbTcJCQk7IG1tMz1kYXRhM0gKKyAgICAgICAgbW92cSAgICBtbTUsbW0xCisgICAgICAgIG1vdnEgICAgbW0zLG1tMgorICAgICAgICBwYWRkZCAgIG1tMSxtbTYgICAgICAgICAgICAgICAgIDsgbW0xPWRhdGEwTAorICAgICAgICBwYWRkZCAgIG1tMixtbTcgICAgICAgICAgICAgICAgIDsgbW0yPWRhdGEwSAorICAgICAgICBwc3ViZCAgIG1tNSxtbTYgICAgICAgICAgICAgICAgIDsgbW01PWRhdGEzTAorICAgICAgICBwc3ViZCAgIG1tMyxtbTcgICAgICAgICAgICAgICAgIDsgbW0zPWRhdGEzSAogCi0JbW92cQltbTYsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMl80KV0JOyBtbTY9W1BEX0RFU0NBTEVfUDJfNF0KKyAgICAgICAgbW92cSAgICBtbTYsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMl80KV0gICAgICAgOyBtbTY9W1BEX0RFU0NBTEVfUDJfNF0KIAotCXBhZGRkCW1tMSxtbTYKLQlwYWRkZAltbTIsbW02Ci0JcHNyYWQJbW0xLERFU0NBTEVfUDJfNAotCXBzcmFkCW1tMixERVNDQUxFX1AyXzQKLQlwYWRkZAltbTUsbW02Ci0JcGFkZGQJbW0zLG1tNgotCXBzcmFkCW1tNSxERVNDQUxFX1AyXzQKLQlwc3JhZAltbTMsREVTQ0FMRV9QMl80CisgICAgICAgIHBhZGRkICAgbW0xLG1tNgorICAgICAgICBwYWRkZCAgIG1tMixtbTYKKyAgICAgICAgcHNyYWQgICBtbTEsREVTQ0FMRV9QMl80CisgICAgICAgIHBzcmFkICAgbW0yLERFU0NBTEVfUDJfNAorICAgICAgICBwYWRkZCAgIG1tNSxtbTYKKyAgICAgICAgcGFkZGQgICBtbTMsbW02CisgICAgICAgIHBzcmFkICAgbW01LERFU0NBTEVfUDJfNAorICAgICAgICBwc3JhZCAgIG1tMyxERVNDQUxFX1AyXzQKIAotCXBhY2tzc2R3ICBtbTEsbW0yCQk7IG1tMT1kYXRhMD0oMDAgMTAgMjAgMzApCi0JcGFja3NzZHcgIG1tNSxtbTMJCTsgbW01PWRhdGEzPSgwMyAxMyAyMyAzMykKKyAgICAgICAgcGFja3NzZHcgIG1tMSxtbTIgICAgICAgICAgICAgICA7IG1tMT1kYXRhMD0oMDAgMTAgMjAgMzApCisgICAgICAgIHBhY2tzc2R3ICBtbTUsbW0zICAgICAgICAgICAgICAgOyBtbTU9ZGF0YTM9KDAzIDEzIDIzIDMzKQogCi0JbW92cQltbTcsIE1NV09SRCBbd2soMCldCTsgbW03PXRtcDBMCi0JbW92cQltbTYsIE1NV09SRCBbd2soMSldCTsgbW02PXRtcDBICisgICAgICAgIG1vdnEgICAgbW03LCBNTVdPUkQgW3drKDApXSAgICAgOyBtbTc9dG1wMEwKKyAgICAgICAgbW92cSAgICBtbTYsIE1NV09SRCBbd2soMSldICAgICA7IG1tNj10bXAwSAogCi0JbW92cQltbTIsbW00Ci0JbW92cQltbTMsbW0wCi0JcGFkZGQJbW00LG1tNwkJCTsgbW00PWRhdGExTAotCXBhZGRkCW1tMCxtbTYJCQk7IG1tMD1kYXRhMUgKLQlwc3ViZAltbTIsbW03CQkJOyBtbTI9ZGF0YTJMCi0JcHN1YmQJbW0zLG1tNgkJCTsgbW0zPWRhdGEySAorICAgICAgICBtb3ZxICAgIG1tMixtbTQKKyAgICAgICAgbW92cSAgICBtbTMsbW0wCisgICAgICAgIHBhZGRkICAgbW00LG1tNyAgICAgICAgICAgICAgICAgOyBtbTQ9ZGF0YTFMCisgICAgICAgIHBhZGRkICAgbW0wLG1tNiAgICAgICAgICAgICAgICAgOyBtbTA9ZGF0YTFICisgICAgICAgIHBzdWJkICAgbW0yLG1tNyAgICAgICAgICAgICAgICAgOyBtbTI9ZGF0YTJMCisgICAgICAgIHBzdWJkICAgbW0zLG1tNiAgICAgICAgICAgICAgICAgOyBtbTM9ZGF0YTJICiAKLQltb3ZxCW1tNyxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyXzQpXQk7IG1tNz1bUERfREVTQ0FMRV9QMl80XQorICAgICAgICBtb3ZxICAgIG1tNyxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyXzQpXSAgICAgICA7IG1tNz1bUERfREVTQ0FMRV9QMl80XQogCi0JcGFkZGQJbW00LG1tNwotCXBhZGRkCW1tMCxtbTcKLQlwc3JhZAltbTQsREVTQ0FMRV9QMl80Ci0JcHNyYWQJbW0wLERFU0NBTEVfUDJfNAotCXBhZGRkCW1tMixtbTcKLQlwYWRkZAltbTMsbW03Ci0JcHNyYWQJbW0yLERFU0NBTEVfUDJfNAotCXBzcmFkCW1tMyxERVNDQUxFX1AyXzQKKyAgICAgICAgcGFkZGQgICBtbTQsbW03CisgICAgICAgIHBhZGRkICAgbW0wLG1tNworICAgICAgICBwc3JhZCAgIG1tNCxERVNDQUxFX1AyXzQKKyAgICAgICAgcHNyYWQgICBtbTAsREVTQ0FMRV9QMl80CisgICAgICAgIHBhZGRkICAgbW0yLG1tNworICAgICAgICBwYWRkZCAgIG1tMyxtbTcKKyAgICAgICAgcHNyYWQgICBtbTIsREVTQ0FMRV9QMl80CisgICAgICAgIHBzcmFkICAgbW0zLERFU0NBTEVfUDJfNAogCi0JcGFja3NzZHcgIG1tNCxtbTAJCTsgbW00PWRhdGExPSgwMSAxMSAyMSAzMSkKLQlwYWNrc3NkdyAgbW0yLG1tMwkJOyBtbTI9ZGF0YTI9KDAyIDEyIDIyIDMyKQorICAgICAgICBwYWNrc3NkdyAgbW00LG1tMCAgICAgICAgICAgICAgIDsgbW00PWRhdGExPSgwMSAxMSAyMSAzMSkKKyAgICAgICAgcGFja3NzZHcgIG1tMixtbTMgICAgICAgICAgICAgICA7IG1tMj1kYXRhMj0oMDIgMTIgMjIgMzIpCiAKLQltb3ZxICAgICAgbW02LFtHT1RPRkYoZWJ4LFBCX0NFTlRFUkpTQU1QKV0JOyBtbTY9W1BCX0NFTlRFUkpTQU1QXQorICAgICAgICBtb3ZxICAgICAgbW02LFtHT1RPRkYoZWJ4LFBCX0NFTlRFUkpTQU1QKV0gICAgICA7IG1tNj1bUEJfQ0VOVEVSSlNBTVBdCiAKLQlwYWNrc3N3YiAgbW0xLG1tMgkJOyBtbTE9KDAwIDEwIDIwIDMwIDAyIDEyIDIyIDMyKQotCXBhY2tzc3diICBtbTQsbW01CQk7IG1tND0oMDEgMTEgMjEgMzEgMDMgMTMgMjMgMzMpCi0JcGFkZGIgICAgIG1tMSxtbTYKLQlwYWRkYiAgICAgbW00LG1tNgorICAgICAgICBwYWNrc3N3YiAgbW0xLG1tMiAgICAgICAgICAgICAgIDsgbW0xPSgwMCAxMCAyMCAzMCAwMiAxMiAyMiAzMikKKyAgICAgICAgcGFja3Nzd2IgIG1tNCxtbTUgICAgICAgICAgICAgICA7IG1tND0oMDEgMTEgMjEgMzEgMDMgMTMgMjMgMzMpCisgICAgICAgIHBhZGRiICAgICBtbTEsbW02CisgICAgICAgIHBhZGRiICAgICBtbTQsbW02CiAKLQltb3ZxICAgICAgbW03LG1tMQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCi0JcHVucGNrbGJ3IG1tMSxtbTQJCTsgbW0xPSgwMCAwMSAxMCAxMSAyMCAyMSAzMCAzMSkKLQlwdW5wY2toYncgbW03LG1tNAkJOyBtbTc9KDAyIDAzIDEyIDEzIDIyIDIzIDMyIDMzKQorICAgICAgICBtb3ZxICAgICAgbW03LG1tMSAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgICAgICBwdW5wY2tsYncgbW0xLG1tNCAgICAgICAgICAgICAgIDsgbW0xPSgwMCAwMSAxMCAxMSAyMCAyMSAzMCAzMSkKKyAgICAgICAgcHVucGNraGJ3IG1tNyxtbTQgICAgICAgICAgICAgICA7IG1tNz0oMDIgMDMgMTIgMTMgMjIgMjMgMzIgMzMpCiAKLQltb3ZxICAgICAgbW0wLG1tMQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCi0JcHVucGNrbHdkIG1tMSxtbTcJCTsgbW0xPSgwMCAwMSAwMiAwMyAxMCAxMSAxMiAxMykKLQlwdW5wY2tod2QgbW0wLG1tNwkJOyBtbTA9KDIwIDIxIDIyIDIzIDMwIDMxIDMyIDMzKQorICAgICAgICBtb3ZxICAgICAgbW0wLG1tMSAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgICAgICBwdW5wY2tsd2QgbW0xLG1tNyAgICAgICAgICAgICAgIDsgbW0xPSgwMCAwMSAwMiAwMyAxMCAxMSAxMiAxMykKKyAgICAgICAgcHVucGNraHdkIG1tMCxtbTcgICAgICAgICAgICAgICA7IG1tMD0oMjAgMjEgMjIgMjMgMzAgMzEgMzIgMzMpCiAKLQltb3YJZWR4LCBKU0FNUFJPVyBbZWRpKzAqU0laRU9GX0pTQU1QUk9XXQotCW1vdgllc2ksIEpTQU1QUk9XIFtlZGkrMipTSVpFT0ZfSlNBTVBST1ddCi0JbW92ZAlEV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIG1tMQotCW1vdmQJRFdPUkQgW2VzaStlYXgqU0laRU9GX0pTQU1QTEVdLCBtbTAKKyAgICAgICAgbW92ICAgICBlZHgsIEpTQU1QUk9XIFtlZGkrMCpTSVpFT0ZfSlNBTVBST1ddCisgICAgICAgIG1vdiAgICAgZXNpLCBKU0FNUFJPVyBbZWRpKzIqU0laRU9GX0pTQU1QUk9XXQorICAgICAgICBtb3ZkICAgIERXT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXSwgbW0xCisgICAgICAgIG1vdmQgICAgRFdPUkQgW2VzaStlYXgqU0laRU9GX0pTQU1QTEVdLCBtbTAKIAotCXBzcmxxCW1tMSw0KkJZVEVfQklUCi0JcHNybHEJbW0wLDQqQllURV9CSVQKKyAgICAgICAgcHNybHEgICBtbTEsNCpCWVRFX0JJVAorICAgICAgICBwc3JscSAgIG1tMCw0KkJZVEVfQklUCiAKLQltb3YJZWR4LCBKU0FNUFJPVyBbZWRpKzEqU0laRU9GX0pTQU1QUk9XXQotCW1vdgllc2ksIEpTQU1QUk9XIFtlZGkrMypTSVpFT0ZfSlNBTVBST1ddCi0JbW92ZAlEV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIG1tMQotCW1vdmQJRFdPUkQgW2VzaStlYXgqU0laRU9GX0pTQU1QTEVdLCBtbTAKKyAgICAgICAgbW92ICAgICBlZHgsIEpTQU1QUk9XIFtlZGkrMSpTSVpFT0ZfSlNBTVBST1ddCisgICAgICAgIG1vdiAgICAgZXNpLCBKU0FNUFJPVyBbZWRpKzMqU0laRU9GX0pTQU1QUk9XXQorICAgICAgICBtb3ZkICAgIERXT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXSwgbW0xCisgICAgICAgIG1vdmQgICAgRFdPUkQgW2VzaStlYXgqU0laRU9GX0pTQU1QTEVdLCBtbTAKIAotCWVtbXMJCTsgZW1wdHkgTU1YIHN0YXRlCisgICAgICAgIGVtbXMgICAgICAgICAgICA7IGVtcHR5IE1NWCBzdGF0ZQogCi0JcG9wCWVkaQotCXBvcAllc2kKLTsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLTsJcG9wCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLQlwb3BwaWMJZWJ4Ci0JbW92CWVzcCxlYnAJCTsgZXNwIDwtIGFsaWduZWQgZWJwCi0JcG9wCWVzcAkJOyBlc3AgPC0gb3JpZ2luYWwgZWJwCi0JcG9wCWVicAotCXJldAorICAgICAgICBwb3AgICAgIGVkaQorICAgICAgICBwb3AgICAgIGVzaQorOyAgICAgICBwb3AgICAgIGVkeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgICAgICBwb3AgICAgIGVjeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgICAgICBwb3BwaWMgIGVieAorICAgICAgICBtb3YgICAgIGVzcCxlYnAgICAgICAgICA7IGVzcCA8LSBhbGlnbmVkIGVicAorICAgICAgICBwb3AgICAgIGVzcCAgICAgICAgICAgICA7IGVzcCA8LSBvcmlnaW5hbCBlYnAKKyAgICAgICAgcG9wICAgICBlYnAKKyAgICAgICAgcmV0CiAKIAogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDk3LDIxMCArNDk3LDIxMCBAQAogOyAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQogOwogCi0lZGVmaW5lIGRjdF90YWJsZShiKQkoYikrOAkJCTsgdm9pZCAqIGRjdF90YWJsZQotJWRlZmluZSBjb2VmX2Jsb2NrKGIpCShiKSsxMgkJOyBKQ09FRlBUUiBjb2VmX2Jsb2NrCi0lZGVmaW5lIG91dHB1dF9idWYoYikJKGIpKzE2CQk7IEpTQU1QQVJSQVkgb3V0cHV0X2J1ZgotJWRlZmluZSBvdXRwdXRfY29sKGIpCShiKSsyMAkJOyBKRElNRU5TSU9OIG91dHB1dF9jb2wKKyVkZWZpbmUgZGN0X3RhYmxlKGIpICAgIChiKSs4ICAgICAgICAgICA7IHZvaWQgKiBkY3RfdGFibGUKKyVkZWZpbmUgY29lZl9ibG9jayhiKSAgIChiKSsxMiAgICAgICAgICA7IEpDT0VGUFRSIGNvZWZfYmxvY2sKKyVkZWZpbmUgb3V0cHV0X2J1ZihiKSAgIChiKSsxNiAgICAgICAgICA7IEpTQU1QQVJSQVkgb3V0cHV0X2J1ZgorJWRlZmluZSBvdXRwdXRfY29sKGIpICAgKGIpKzIwICAgICAgICAgIDsgSkRJTUVOU0lPTiBvdXRwdXRfY29sCiAKLQlhbGlnbgkxNgotCWdsb2JhbAlFWFROKGpzaW1kX2lkY3RfMngyX21teCkKKyAgICAgICAgYWxpZ24gICAxNgorICAgICAgICBnbG9iYWwgIEVYVE4oanNpbWRfaWRjdF8yeDJfbW14KQogCiBFWFROKGpzaW1kX2lkY3RfMngyX21teCk6Ci0JcHVzaAllYnAKLQltb3YJZWJwLGVzcAotCXB1c2gJZWJ4Ci07CXB1c2gJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLQlwdXNoCWVzaQotCXB1c2gJZWRpCisgICAgICAgIHB1c2ggICAgZWJwCisgICAgICAgIG1vdiAgICAgZWJwLGVzcAorICAgICAgICBwdXNoICAgIGVieAorOyAgICAgICBwdXNoICAgIGVjeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgICAgICBwdXNoICAgIGVkeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgICAgICBwdXNoICAgIGVzaQorICAgICAgICBwdXNoICAgIGVkaQogCi0JZ2V0X0dPVAllYngJCTsgZ2V0IEdPVCBhZGRyZXNzCisgICAgICAgIGdldF9HT1QgZWJ4ICAgICAgICAgICAgIDsgZ2V0IEdPVCBhZGRyZXNzCiAKLQk7IC0tLS0gUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMgZnJvbSBpbnB1dC4KKyAgICAgICAgOyAtLS0tIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQuCiAKLQltb3YJZWR4LCBQT0lOVEVSIFtkY3RfdGFibGUoZWJwKV0JOyBxdWFudHB0cgotCW1vdgllc2ksIEpDT0VGUFRSIFtjb2VmX2Jsb2NrKGVicCldCQk7IGlucHRyCisgICAgICAgIG1vdiAgICAgZWR4LCBQT0lOVEVSIFtkY3RfdGFibGUoZWJwKV0gICAgICAgICAgIDsgcXVhbnRwdHIKKyAgICAgICAgbW92ICAgICBlc2ksIEpDT0VGUFRSIFtjb2VmX2Jsb2NrKGVicCldICAgICAgICAgOyBpbnB0cgogCi0JOyB8IGlucHV0OiAgICAgICAgICAgICAgICAgIHwgcmVzdWx0OiAgICAgICAgfAotCTsgfCAwMCAwMSAqKiAwMyAqKiAwNSAqKiAwNyB8ICAgICAgICAgICAgICAgIHwKLQk7IHwgMTAgMTEgKiogMTMgKiogMTUgKiogMTcgfCAgICAgICAgICAgICAgICB8Ci0JOyB8ICoqICoqICoqICoqICoqICoqICoqICoqIHwgICAgICAgICAgICAgICAgfAotCTsgfCAzMCAzMSAqKiAzMyAqKiAzNSAqKiAzNyB8IEEwIEExIEEzIEE1IEE3IHwKLQk7IHwgKiogKiogKiogKiogKiogKiogKiogKiogfCBCMCBCMSBCMyBCNSBCNyB8Ci0JOyB8IDUwIDUxICoqIDUzICoqIDU1ICoqIDU3IHwgICAgICAgICAgICAgICAgfAotCTsgfCAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiB8ICAgICAgICAgICAgICAgIHwKLQk7IHwgNzAgNzEgKiogNzMgKiogNzUgKiogNzcgfCAgICAgICAgICAgICAgICB8CisgICAgICAgIDsgfCBpbnB1dDogICAgICAgICAgICAgICAgICB8IHJlc3VsdDogICAgICAgIHwKKyAgICAgICAgOyB8IDAwIDAxICoqIDAzICoqIDA1ICoqIDA3IHwgICAgICAgICAgICAgICAgfAorICAgICAgICA7IHwgMTAgMTEgKiogMTMgKiogMTUgKiogMTcgfCAgICAgICAgICAgICAgICB8CisgICAgICAgIDsgfCAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiB8ICAgICAgICAgICAgICAgIHwKKyAgICAgICAgOyB8IDMwIDMxICoqIDMzICoqIDM1ICoqIDM3IHwgQTAgQTEgQTMgQTUgQTcgfAorICAgICAgICA7IHwgKiogKiogKiogKiogKiogKiogKiogKiogfCBCMCBCMSBCMyBCNSBCNyB8CisgICAgICAgIDsgfCA1MCA1MSAqKiA1MyAqKiA1NSAqKiA1NyB8ICAgICAgICAgICAgICAgIHwKKyAgICAgICAgOyB8ICoqICoqICoqICoqICoqICoqICoqICoqIHwgICAgICAgICAgICAgICAgfAorICAgICAgICA7IHwgNzAgNzEgKiogNzMgKiogNzUgKiogNzcgfCAgICAgICAgICAgICAgICB8CiAKLQk7IC0tIE9kZCBwYXJ0CisgICAgICAgIDsgLS0gT2RkIHBhcnQKIAotCW1vdnEJbW0wLCBNTVdPUkQgW01NQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQotCW1vdnEJbW0xLCBNTVdPUkQgW01NQkxPQ0soMywwLGVzaSxTSVpFT0ZfSkNPRUYpXQotCXBtdWxsdwltbTAsIE1NV09SRCBbTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQotCXBtdWxsdwltbTEsIE1NV09SRCBbTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQotCW1vdnEJbW0yLCBNTVdPUkQgW01NQkxPQ0soNSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQotCW1vdnEJbW0zLCBNTVdPUkQgW01NQkxPQ0soNywwLGVzaSxTSVpFT0ZfSkNPRUYpXQotCXBtdWxsdwltbTIsIE1NV09SRCBbTU1CTE9DSyg1LDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQotCXBtdWxsdwltbTMsIE1NV09SRCBbTU1CTE9DSyg3LDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorICAgICAgICBtb3ZxICAgIG1tMCwgTU1XT1JEIFtNTUJMT0NLKDEsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgbW92cSAgICBtbTEsIE1NV09SRCBbTU1CTE9DSygzLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIHBtdWxsdyAgbW0wLCBNTVdPUkQgW01NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKyAgICAgICAgcG11bGx3ICBtbTEsIE1NV09SRCBbTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorICAgICAgICBtb3ZxICAgIG1tMiwgTU1XT1JEIFtNTUJMT0NLKDUsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgbW92cSAgICBtbTMsIE1NV09SRCBbTU1CTE9DSyg3LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIHBtdWxsdyAgbW0yLCBNTVdPUkQgW01NQkxPQ0soNSwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKyAgICAgICAgcG11bGx3ICBtbTMsIE1NV09SRCBbTU1CTE9DSyg3LDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQogCi0JOyBtbTA9KDEwIDExICoqIDEzKSwgbW0xPSgzMCAzMSAqKiAzMykKLQk7IG1tMj0oNTAgNTEgKiogNTMpLCBtbTM9KDcwIDcxICoqIDczKQorICAgICAgICA7IG1tMD0oMTAgMTEgKiogMTMpLCBtbTE9KDMwIDMxICoqIDMzKQorICAgICAgICA7IG1tMj0oNTAgNTEgKiogNTMpLCBtbTM9KDcwIDcxICoqIDczKQogCi0JcGNtcGVxZCAgIG1tNyxtbTcKLQlwc2xsZCAgICAgbW03LFdPUkRfQklUCQk7IG1tNz17MHgwMDAwIDB4RkZGRiAweDAwMDAgMHhGRkZGfQorICAgICAgICBwY21wZXFkICAgbW03LG1tNworICAgICAgICBwc2xsZCAgICAgbW03LFdPUkRfQklUICAgICAgICAgIDsgbW03PXsweDAwMDAgMHhGRkZGIDB4MDAwMCAweEZGRkZ9CiAKLQltb3ZxICAgICAgbW00LG1tMAkJOyBtbTQ9KDEwIDExICoqIDEzKQotCW1vdnEgICAgICBtbTUsbW0yCQk7IG1tNT0oNTAgNTEgKiogNTMpCi0JcHVucGNrbHdkIG1tNCxtbTEJCTsgbW00PSgxMCAzMCAxMSAzMSkKLQlwdW5wY2tsd2QgbW01LG1tMwkJOyBtbTU9KDUwIDcwIDUxIDcxKQotCXBtYWRkd2QgICBtbTQsW0dPVE9GRihlYngsUFdfRjM2Ml9NRjEyNyldCi0JcG1hZGR3ZCAgIG1tNSxbR09UT0ZGKGVieCxQV19GMDg1X01GMDcyKV0KKyAgICAgICAgbW92cSAgICAgIG1tNCxtbTAgICAgICAgICAgICAgICA7IG1tND0oMTAgMTEgKiogMTMpCisgICAgICAgIG1vdnEgICAgICBtbTUsbW0yICAgICAgICAgICAgICAgOyBtbTU9KDUwIDUxICoqIDUzKQorICAgICAgICBwdW5wY2tsd2QgbW00LG1tMSAgICAgICAgICAgICAgIDsgbW00PSgxMCAzMCAxMSAzMSkKKyAgICAgICAgcHVucGNrbHdkIG1tNSxtbTMgICAgICAgICAgICAgICA7IG1tNT0oNTAgNzAgNTEgNzEpCisgICAgICAgIHBtYWRkd2QgICBtbTQsW0dPVE9GRihlYngsUFdfRjM2Ml9NRjEyNyldCisgICAgICAgIHBtYWRkd2QgICBtbTUsW0dPVE9GRihlYngsUFdfRjA4NV9NRjA3MildCiAKLQlwc3JsZAltbTAsV09SRF9CSVQJCTsgbW0wPSgxMSAtLSAxMyAtLSkKLQlwYW5kCW1tMSxtbTcJCQk7IG1tMT0oLS0gMzEgLS0gMzMpCi0JcHNybGQJbW0yLFdPUkRfQklUCQk7IG1tMj0oNTEgLS0gNTMgLS0pCi0JcGFuZAltbTMsbW03CQkJOyBtbTM9KC0tIDcxIC0tIDczKQotCXBvcgltbTAsbW0xCQkJOyBtbTA9KDExIDMxIDEzIDMzKQotCXBvcgltbTIsbW0zCQkJOyBtbTI9KDUxIDcxIDUzIDczKQotCXBtYWRkd2QJbW0wLFtHT1RPRkYoZWJ4LFBXX0YzNjJfTUYxMjcpXQotCXBtYWRkd2QJbW0yLFtHT1RPRkYoZWJ4LFBXX0YwODVfTUYwNzIpXQorICAgICAgICBwc3JsZCAgIG1tMCxXT1JEX0JJVCAgICAgICAgICAgIDsgbW0wPSgxMSAtLSAxMyAtLSkKKyAgICAgICAgcGFuZCAgICBtbTEsbW03ICAgICAgICAgICAgICAgICA7IG1tMT0oLS0gMzEgLS0gMzMpCisgICAgICAgIHBzcmxkICAgbW0yLFdPUkRfQklUICAgICAgICAgICAgOyBtbTI9KDUxIC0tIDUzIC0tKQorICAgICAgICBwYW5kICAgIG1tMyxtbTcgICAgICAgICAgICAgICAgIDsgbW0zPSgtLSA3MSAtLSA3MykKKyAgICAgICAgcG9yICAgICBtbTAsbW0xICAgICAgICAgICAgICAgICA7IG1tMD0oMTEgMzEgMTMgMzMpCisgICAgICAgIHBvciAgICAgbW0yLG1tMyAgICAgICAgICAgICAgICAgOyBtbTI9KDUxIDcxIDUzIDczKQorICAgICAgICBwbWFkZHdkIG1tMCxbR09UT0ZGKGVieCxQV19GMzYyX01GMTI3KV0KKyAgICAgICAgcG1hZGR3ZCBtbTIsW0dPVE9GRihlYngsUFdfRjA4NV9NRjA3MildCiAKLQlwYWRkZAltbTQsbW01CQkJOyBtbTQ9dG1wMFtjb2wwIGNvbDFdCisgICAgICAgIHBhZGRkICAgbW00LG1tNSAgICAgICAgICAgICAgICAgOyBtbTQ9dG1wMFtjb2wwIGNvbDFdCiAKLQltb3ZxCW1tNiwgTU1XT1JEIFtNTUJMT0NLKDEsMSxlc2ksU0laRU9GX0pDT0VGKV0KLQltb3ZxCW1tMSwgTU1XT1JEIFtNTUJMT0NLKDMsMSxlc2ksU0laRU9GX0pDT0VGKV0KLQlwbXVsbHcJbW02LCBNTVdPUkQgW01NQkxPQ0soMSwxLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KLQlwbXVsbHcJbW0xLCBNTVdPUkQgW01NQkxPQ0soMywxLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KLQltb3ZxCW1tMywgTU1XT1JEIFtNTUJMT0NLKDUsMSxlc2ksU0laRU9GX0pDT0VGKV0KLQltb3ZxCW1tNSwgTU1XT1JEIFtNTUJMT0NLKDcsMSxlc2ksU0laRU9GX0pDT0VGKV0KLQlwbXVsbHcJbW0zLCBNTVdPUkQgW01NQkxPQ0soNSwxLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KLQlwbXVsbHcJbW01LCBNTVdPUkQgW01NQkxPQ0soNywxLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKyAgICAgICAgbW92cSAgICBtbTYsIE1NV09SRCBbTU1CTE9DSygxLDEsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdnEgICAgbW0xLCBNTVdPUkQgW01NQkxPQ0soMywxLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBwbXVsbHcgIG1tNiwgTU1XT1JEIFtNTUJMT0NLKDEsMSxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisgICAgICAgIHBtdWxsdyAgbW0xLCBNTVdPUkQgW01NQkxPQ0soMywxLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKyAgICAgICAgbW92cSAgICBtbTMsIE1NV09SRCBbTU1CTE9DSyg1LDEsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdnEgICAgbW01LCBNTVdPUkQgW01NQkxPQ0soNywxLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBwbXVsbHcgIG1tMywgTU1XT1JEIFtNTUJMT0NLKDUsMSxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisgICAgICAgIHBtdWxsdyAgbW01LCBNTVdPUkQgW01NQkxPQ0soNywxLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KIAotCTsgbW02PSgqKiAxNSAqKiAxNyksIG1tMT0oKiogMzUgKiogMzcpCi0JOyBtbTM9KCoqIDU1ICoqIDU3KSwgbW01PSgqKiA3NSAqKiA3NykKKyAgICAgICAgOyBtbTY9KCoqIDE1ICoqIDE3KSwgbW0xPSgqKiAzNSAqKiAzNykKKyAgICAgICAgOyBtbTM9KCoqIDU1ICoqIDU3KSwgbW01PSgqKiA3NSAqKiA3NykKIAotCXBzcmxkCW1tNixXT1JEX0JJVAkJOyBtbTY9KDE1IC0tIDE3IC0tKQotCXBhbmQJbW0xLG1tNwkJCTsgbW0xPSgtLSAzNSAtLSAzNykKLQlwc3JsZAltbTMsV09SRF9CSVQJCTsgbW0zPSg1NSAtLSA1NyAtLSkKLQlwYW5kCW1tNSxtbTcJCQk7IG1tNT0oLS0gNzUgLS0gNzcpCi0JcG9yCW1tNixtbTEJCQk7IG1tNj0oMTUgMzUgMTcgMzcpCi0JcG9yCW1tMyxtbTUJCQk7IG1tMz0oNTUgNzUgNTcgNzcpCi0JcG1hZGR3ZAltbTYsW0dPVE9GRihlYngsUFdfRjM2Ml9NRjEyNyldCi0JcG1hZGR3ZAltbTMsW0dPVE9GRihlYngsUFdfRjA4NV9NRjA3MildCisgICAgICAgIHBzcmxkICAgbW02LFdPUkRfQklUICAgICAgICAgICAgOyBtbTY9KDE1IC0tIDE3IC0tKQorICAgICAgICBwYW5kICAgIG1tMSxtbTcgICAgICAgICAgICAgICAgIDsgbW0xPSgtLSAzNSAtLSAzNykKKyAgICAgICAgcHNybGQgICBtbTMsV09SRF9CSVQgICAgICAgICAgICA7IG1tMz0oNTUgLS0gNTcgLS0pCisgICAgICAgIHBhbmQgICAgbW01LG1tNyAgICAgICAgICAgICAgICAgOyBtbTU9KC0tIDc1IC0tIDc3KQorICAgICAgICBwb3IgICAgIG1tNixtbTEgICAgICAgICAgICAgICAgIDsgbW02PSgxNSAzNSAxNyAzNykKKyAgICAgICAgcG9yICAgICBtbTMsbW01ICAgICAgICAgICAgICAgICA7IG1tMz0oNTUgNzUgNTcgNzcpCisgICAgICAgIHBtYWRkd2QgbW02LFtHT1RPRkYoZWJ4LFBXX0YzNjJfTUYxMjcpXQorICAgICAgICBwbWFkZHdkIG1tMyxbR09UT0ZGKGVieCxQV19GMDg1X01GMDcyKV0KIAotCXBhZGRkCW1tMCxtbTIJCQk7IG1tMD10bXAwW2NvbDEgY29sM10KLQlwYWRkZAltbTYsbW0zCQkJOyBtbTY9dG1wMFtjb2w1IGNvbDddCisgICAgICAgIHBhZGRkICAgbW0wLG1tMiAgICAgICAgICAgICAgICAgOyBtbTA9dG1wMFtjb2wxIGNvbDNdCisgICAgICAgIHBhZGRkICAgbW02LG1tMyAgICAgICAgICAgICAgICAgOyBtbTY9dG1wMFtjb2w1IGNvbDddCiAKLQk7IC0tIEV2ZW4gcGFydAorICAgICAgICA7IC0tIEV2ZW4gcGFydAogCi0JbW92cQltbTEsIE1NV09SRCBbTU1CTE9DSygwLDAsZXNpLFNJWkVPRl9KQ09FRildCi0JbW92cQltbTUsIE1NV09SRCBbTU1CTE9DSygwLDEsZXNpLFNJWkVPRl9KQ09FRildCi0JcG11bGx3CW1tMSwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCi0JcG11bGx3CW1tNSwgTU1XT1JEIFtNTUJMT0NLKDAsMSxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisgICAgICAgIG1vdnEgICAgbW0xLCBNTVdPUkQgW01NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBtb3ZxICAgIG1tNSwgTU1XT1JEIFtNTUJMT0NLKDAsMSxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgcG11bGx3ICBtbTEsIE1NV09SRCBbTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorICAgICAgICBwbXVsbHcgIG1tNSwgTU1XT1JEIFtNTUJMT0NLKDAsMSxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCiAKLQk7IG1tMT0oMDAgMDEgKiogMDMpLCBtbTU9KCoqIDA1ICoqIDA3KQorICAgICAgICA7IG1tMT0oMDAgMDEgKiogMDMpLCBtbTU9KCoqIDA1ICoqIDA3KQogCi0JbW92cQltbTIsbW0xCQkJCTsgbW0yPSgwMCAwMSAqKiAwMykKLQlwc2xsZAltbTEsV09SRF9CSVQJCQk7IG1tMT0oLS0gMDAgLS0gKiopCi0JcHNyYWQJbW0xLChXT1JEX0JJVC1DT05TVF9CSVRTLTIpCTsgbW0xPXRtcDEwW2NvbDAgKioqKl0KKyAgICAgICAgbW92cSAgICBtbTIsbW0xICAgICAgICAgICAgICAgICAgICAgICAgIDsgbW0yPSgwMCAwMSAqKiAwMykKKyAgICAgICAgcHNsbGQgICBtbTEsV09SRF9CSVQgICAgICAgICAgICAgICAgICAgIDsgbW0xPSgtLSAwMCAtLSAqKikKKyAgICAgICAgcHNyYWQgICBtbTEsKFdPUkRfQklULUNPTlNUX0JJVFMtMikgICAgIDsgbW0xPXRtcDEwW2NvbDAgKioqKl0KIAotCXBhbmQJbW0yLG1tNwkJCQk7IG1tMj0oLS0gMDEgLS0gMDMpCi0JcGFuZAltbTUsbW03CQkJCTsgbW01PSgtLSAwNSAtLSAwNykKLQlwc3JhZAltbTIsKFdPUkRfQklULUNPTlNUX0JJVFMtMikJOyBtbTI9dG1wMTBbY29sMSBjb2wzXQotCXBzcmFkCW1tNSwoV09SRF9CSVQtQ09OU1RfQklUUy0yKQk7IG1tNT10bXAxMFtjb2w1IGNvbDddCisgICAgICAgIHBhbmQgICAgbW0yLG1tNyAgICAgICAgICAgICAgICAgICAgICAgICA7IG1tMj0oLS0gMDEgLS0gMDMpCisgICAgICAgIHBhbmQgICAgbW01LG1tNyAgICAgICAgICAgICAgICAgICAgICAgICA7IG1tNT0oLS0gMDUgLS0gMDcpCisgICAgICAgIHBzcmFkICAgbW0yLChXT1JEX0JJVC1DT05TVF9CSVRTLTIpICAgICA7IG1tMj10bXAxMFtjb2wxIGNvbDNdCisgICAgICAgIHBzcmFkICAgbW01LChXT1JEX0JJVC1DT05TVF9CSVRTLTIpICAgICA7IG1tNT10bXAxMFtjb2w1IGNvbDddCiAKLQk7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQorICAgICAgICA7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQogCi0JbW92cSAgICAgIG1tMyxtbTEKLQlwYWRkZCAgICAgbW0xLG1tNAkJOyBtbTE9ZGF0YTBbY29sMCAqKioqXT0oQTAgKiopCi0JcHN1YmQgICAgIG1tMyxtbTQJCTsgbW0zPWRhdGExW2NvbDAgKioqKl09KEIwICoqKQotCXB1bnBja2xkcSBtbTEsbW0zCQk7IG1tMT0oQTAgQjApCisgICAgICAgIG1vdnEgICAgICBtbTMsbW0xCisgICAgICAgIHBhZGRkICAgICBtbTEsbW00ICAgICAgICAgICAgICAgOyBtbTE9ZGF0YTBbY29sMCAqKioqXT0oQTAgKiopCisgICAgICAgIHBzdWJkICAgICBtbTMsbW00ICAgICAgICAgICAgICAgOyBtbTM9ZGF0YTFbY29sMCAqKioqXT0oQjAgKiopCisgICAgICAgIHB1bnBja2xkcSBtbTEsbW0zICAgICAgICAgICAgICAgOyBtbTE9KEEwIEIwKQogCi0JbW92cQltbTcsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMV8yKV0JOyBtbTc9W1BEX0RFU0NBTEVfUDFfMl0KKyAgICAgICAgbW92cSAgICBtbTcsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMV8yKV0gICAgICAgOyBtbTc9W1BEX0RFU0NBTEVfUDFfMl0KIAotCW1vdnEJbW00LG1tMgotCW1vdnEJbW0zLG1tNQotCXBhZGRkCW1tMixtbTAJCQk7IG1tMj1kYXRhMFtjb2wxIGNvbDNdPShBMSBBMykKLQlwYWRkZAltbTUsbW02CQkJOyBtbTU9ZGF0YTBbY29sNSBjb2w3XT0oQTUgQTcpCi0JcHN1YmQJbW00LG1tMAkJCTsgbW00PWRhdGExW2NvbDEgY29sM109KEIxIEIzKQotCXBzdWJkCW1tMyxtbTYJCQk7IG1tMz1kYXRhMVtjb2w1IGNvbDddPShCNSBCNykKKyAgICAgICAgbW92cSAgICBtbTQsbW0yCisgICAgICAgIG1vdnEgICAgbW0zLG1tNQorICAgICAgICBwYWRkZCAgIG1tMixtbTAgICAgICAgICAgICAgICAgIDsgbW0yPWRhdGEwW2NvbDEgY29sM109KEExIEEzKQorICAgICAgICBwYWRkZCAgIG1tNSxtbTYgICAgICAgICAgICAgICAgIDsgbW01PWRhdGEwW2NvbDUgY29sN109KEE1IEE3KQorICAgICAgICBwc3ViZCAgIG1tNCxtbTAgICAgICAgICAgICAgICAgIDsgbW00PWRhdGExW2NvbDEgY29sM109KEIxIEIzKQorICAgICAgICBwc3ViZCAgIG1tMyxtbTYgICAgICAgICAgICAgICAgIDsgbW0zPWRhdGExW2NvbDUgY29sN109KEI1IEI3KQogCi0JcGFkZGQJbW0xLG1tNwotCXBzcmFkCW1tMSxERVNDQUxFX1AxXzIKKyAgICAgICAgcGFkZGQgICBtbTEsbW03CisgICAgICAgIHBzcmFkICAgbW0xLERFU0NBTEVfUDFfMgogCi0JcGFkZGQJbW0yLG1tNwotCXBhZGRkCW1tNSxtbTcKLQlwc3JhZAltbTIsREVTQ0FMRV9QMV8yCi0JcHNyYWQJbW01LERFU0NBTEVfUDFfMgotCXBhZGRkCW1tNCxtbTcKLQlwYWRkZAltbTMsbW03Ci0JcHNyYWQJbW00LERFU0NBTEVfUDFfMgotCXBzcmFkCW1tMyxERVNDQUxFX1AxXzIKKyAgICAgICAgcGFkZGQgICBtbTIsbW03CisgICAgICAgIHBhZGRkICAgbW01LG1tNworICAgICAgICBwc3JhZCAgIG1tMixERVNDQUxFX1AxXzIKKyAgICAgICAgcHNyYWQgICBtbTUsREVTQ0FMRV9QMV8yCisgICAgICAgIHBhZGRkICAgbW00LG1tNworICAgICAgICBwYWRkZCAgIG1tMyxtbTcKKyAgICAgICAgcHNyYWQgICBtbTQsREVTQ0FMRV9QMV8yCisgICAgICAgIHBzcmFkICAgbW0zLERFU0NBTEVfUDFfMgogCi0JOyAtLS0tIFBhc3MgMjogcHJvY2VzcyByb3dzLCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4KKyAgICAgICAgOyAtLS0tIFBhc3MgMjogcHJvY2VzcyByb3dzLCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4KIAotCW1vdgllZGksIEpTQU1QQVJSQVkgW291dHB1dF9idWYoZWJwKV0JOyAoSlNBTVBST1cgKikKLQltb3YJZWF4LCBKRElNRU5TSU9OIFtvdXRwdXRfY29sKGVicCldCisgICAgICAgIG1vdiAgICAgZWRpLCBKU0FNUEFSUkFZIFtvdXRwdXRfYnVmKGVicCldICAgICAgIDsgKEpTQU1QUk9XICopCisgICAgICAgIG1vdiAgICAgZWF4LCBKRElNRU5TSU9OIFtvdXRwdXRfY29sKGVicCldCiAKLQk7IHwgaW5wdXQ6fCByZXN1bHQ6fAotCTsgfCBBMCBCMCB8ICAgICAgICB8Ci0JOyB8IEExIEIxIHwgQzAgQzEgIHwKLQk7IHwgQTMgQjMgfCBEMCBEMSAgfAotCTsgfCBBNSBCNSB8ICAgICAgICB8Ci0JOyB8IEE3IEI3IHwgICAgICAgIHwKKyAgICAgICAgOyB8IGlucHV0OnwgcmVzdWx0OnwKKyAgICAgICAgOyB8IEEwIEIwIHwgICAgICAgIHwKKyAgICAgICAgOyB8IEExIEIxIHwgQzAgQzEgIHwKKyAgICAgICAgOyB8IEEzIEIzIHwgRDAgRDEgIHwKKyAgICAgICAgOyB8IEE1IEI1IHwgICAgICAgIHwKKyAgICAgICAgOyB8IEE3IEI3IHwgICAgICAgIHwKIAotCTsgLS0gT2RkIHBhcnQKKyAgICAgICAgOyAtLSBPZGQgcGFydAogCi0JcGFja3NzZHcgIG1tMixtbTQJCTsgbW0yPShBMSBBMyBCMSBCMykKLQlwYWNrc3NkdyAgbW01LG1tMwkJOyBtbTU9KEE1IEE3IEI1IEI3KQotCXBtYWRkd2QgICBtbTIsW0dPVE9GRihlYngsUFdfRjM2Ml9NRjEyNyldCi0JcG1hZGR3ZCAgIG1tNSxbR09UT0ZGKGVieCxQV19GMDg1X01GMDcyKV0KKyAgICAgICAgcGFja3NzZHcgIG1tMixtbTQgICAgICAgICAgICAgICA7IG1tMj0oQTEgQTMgQjEgQjMpCisgICAgICAgIHBhY2tzc2R3ICBtbTUsbW0zICAgICAgICAgICAgICAgOyBtbTU9KEE1IEE3IEI1IEI3KQorICAgICAgICBwbWFkZHdkICAgbW0yLFtHT1RPRkYoZWJ4LFBXX0YzNjJfTUYxMjcpXQorICAgICAgICBwbWFkZHdkICAgbW01LFtHT1RPRkYoZWJ4LFBXX0YwODVfTUYwNzIpXQogCi0JcGFkZGQgICAgIG1tMixtbTUJCTsgbW0yPXRtcDBbcm93MCByb3cxXQorICAgICAgICBwYWRkZCAgICAgbW0yLG1tNSAgICAgICAgICAgICAgIDsgbW0yPXRtcDBbcm93MCByb3cxXQogCi0JOyAtLSBFdmVuIHBhcnQKKyAgICAgICAgOyAtLSBFdmVuIHBhcnQKIAotCXBzbGxkICAgICBtbTEsKENPTlNUX0JJVFMrMikJOyBtbTE9dG1wMTBbcm93MCByb3cxXQorICAgICAgICBwc2xsZCAgICAgbW0xLChDT05TVF9CSVRTKzIpICAgIDsgbW0xPXRtcDEwW3JvdzAgcm93MV0KIAotCTsgLS0gRmluYWwgb3V0cHV0IHN0YWdlCisgICAgICAgIDsgLS0gRmluYWwgb3V0cHV0IHN0YWdlCiAKLQltb3ZxICAgICAgbW0wLFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDJfMildCTsgbW0wPVtQRF9ERVNDQUxFX1AyXzJdCisgICAgICAgIG1vdnEgICAgICBtbTAsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMl8yKV0gICAgIDsgbW0wPVtQRF9ERVNDQUxFX1AyXzJdCiAKLQltb3ZxICAgICAgbW02LG1tMQotCXBhZGRkICAgICBtbTEsbW0yCQk7IG1tMT1kYXRhMFtyb3cwIHJvdzFdPShDMCBDMSkKLQlwc3ViZCAgICAgbW02LG1tMgkJOyBtbTY9ZGF0YTFbcm93MCByb3cxXT0oRDAgRDEpCisgICAgICAgIG1vdnEgICAgICBtbTYsbW0xCisgICAgICAgIHBhZGRkICAgICBtbTEsbW0yICAgICAgICAgICAgICAgOyBtbTE9ZGF0YTBbcm93MCByb3cxXT0oQzAgQzEpCisgICAgICAgIHBzdWJkICAgICBtbTYsbW0yICAgICAgICAgICAgICAgOyBtbTY9ZGF0YTFbcm93MCByb3cxXT0oRDAgRDEpCiAKLQlwYWRkZCAgICAgbW0xLG1tMAotCXBhZGRkICAgICBtbTYsbW0wCi0JcHNyYWQgICAgIG1tMSxERVNDQUxFX1AyXzIKLQlwc3JhZCAgICAgbW02LERFU0NBTEVfUDJfMgorICAgICAgICBwYWRkZCAgICAgbW0xLG1tMAorICAgICAgICBwYWRkZCAgICAgbW02LG1tMAorICAgICAgICBwc3JhZCAgICAgbW0xLERFU0NBTEVfUDJfMgorICAgICAgICBwc3JhZCAgICAgbW02LERFU0NBTEVfUDJfMgogCi0JbW92cSAgICAgIG1tNyxtbTEJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cwotCXB1bnBja2xkcSBtbTEsbW02CQk7IG1tMT0oQzAgRDApCi0JcHVucGNraGRxIG1tNyxtbTYJCTsgbW03PShDMSBEMSkKKyAgICAgICAgbW92cSAgICAgIG1tNyxtbTEgICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMKKyAgICAgICAgcHVucGNrbGRxIG1tMSxtbTYgICAgICAgICAgICAgICA7IG1tMT0oQzAgRDApCisgICAgICAgIHB1bnBja2hkcSBtbTcsbW02ICAgICAgICAgICAgICAgOyBtbTc9KEMxIEQxKQogCi0JcGFja3NzZHcgIG1tMSxtbTcJCTsgbW0xPShDMCBEMCBDMSBEMSkKLQlwYWNrc3N3YiAgbW0xLG1tMQkJOyBtbTE9KEMwIEQwIEMxIEQxIEMwIEQwIEMxIEQxKQotCXBhZGRiICAgICBtbTEsW0dPVE9GRihlYngsUEJfQ0VOVEVSSlNBTVApXQorICAgICAgICBwYWNrc3NkdyAgbW0xLG1tNyAgICAgICAgICAgICAgIDsgbW0xPShDMCBEMCBDMSBEMSkKKyAgICAgICAgcGFja3Nzd2IgIG1tMSxtbTEgICAgICAgICAgICAgICA7IG1tMT0oQzAgRDAgQzEgRDEgQzAgRDAgQzEgRDEpCisgICAgICAgIHBhZGRiICAgICBtbTEsW0dPVE9GRihlYngsUEJfQ0VOVEVSSlNBTVApXQogCi0JbW92ZAllY3gsbW0xCi0JbW92ZAllYngsbW0xCQkJOyBlYng9KEMwIEQwIEMxIEQxKQotCXNocgllY3gsMipCWVRFX0JJVAkJOyBlY3g9KEMxIEQxIC0tIC0tKQorICAgICAgICBtb3ZkICAgIGVjeCxtbTEKKyAgICAgICAgbW92ZCAgICBlYngsbW0xICAgICAgICAgICAgICAgICA7IGVieD0oQzAgRDAgQzEgRDEpCisgICAgICAgIHNociAgICAgZWN4LDIqQllURV9CSVQgICAgICAgICAgOyBlY3g9KEMxIEQxIC0tIC0tKQogCi0JbW92CWVkeCwgSlNBTVBST1cgW2VkaSswKlNJWkVPRl9KU0FNUFJPV10KLQltb3YJZXNpLCBKU0FNUFJPVyBbZWRpKzEqU0laRU9GX0pTQU1QUk9XXQotCW1vdglXT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXSwgYngKLQltb3YJV09SRCBbZXNpK2VheCpTSVpFT0ZfSlNBTVBMRV0sIGN4CisgICAgICAgIG1vdiAgICAgZWR4LCBKU0FNUFJPVyBbZWRpKzAqU0laRU9GX0pTQU1QUk9XXQorICAgICAgICBtb3YgICAgIGVzaSwgSlNBTVBST1cgW2VkaSsxKlNJWkVPRl9KU0FNUFJPV10KKyAgICAgICAgbW92ICAgICBXT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXSwgYngKKyAgICAgICAgbW92ICAgICBXT1JEIFtlc2krZWF4KlNJWkVPRl9KU0FNUExFXSwgY3gKIAotCWVtbXMJCTsgZW1wdHkgTU1YIHN0YXRlCisgICAgICAgIGVtbXMgICAgICAgICAgICA7IGVtcHR5IE1NWCBzdGF0ZQogCi0JcG9wCWVkaQotCXBvcAllc2kKLTsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLTsJcG9wCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLQlwb3AJZWJ4Ci0JcG9wCWVicAotCXJldAorICAgICAgICBwb3AgICAgIGVkaQorICAgICAgICBwb3AgICAgIGVzaQorOyAgICAgICBwb3AgICAgIGVkeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgICAgICBwb3AgICAgIGVjeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgICAgICBwb3AgICAgIGVieAorICAgICAgICBwb3AgICAgIGVicAorICAgICAgICByZXQKIAogOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKIDsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KLQlhbGlnbgkxNgorICAgICAgICBhbGlnbiAgIDE2CmRpZmYgLS1naXQgYS9zaW1kL2ppc3MyZmx0LTY0LmFzbSBiL3NpbWQvamlzczJmbHQtNjQuYXNtCmluZGV4IDZlN2U2ZDQuLjZkNTdhMDEgMTAwNjQ0Ci0tLSBhL3NpbWQvamlzczJmbHQtNjQuYXNtCisrKyBiL3NpbWQvamlzczJmbHQtNjQuYXNtCkBAIC0yNiwzNCArMjYsMzQgQEAKIAogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0lbWFjcm8JdW5wY2tscHMyIDIJOyAlMT0oMCAxIDIgMykgLyAlMj0oNCA1IDYgNykgPT4gJTE9KDAgMSA0IDUpCi0Jc2h1ZnBzCSUxLCUyLDB4NDQKKyVtYWNybyAgdW5wY2tscHMyIDIgICAgIDsgJTE9KDAgMSAyIDMpIC8gJTI9KDQgNSA2IDcpID0+ICUxPSgwIDEgNCA1KQorICAgICAgICBzaHVmcHMgICUxLCUyLDB4NDQKICVlbmRtYWNybwogCi0lbWFjcm8JdW5wY2tocHMyIDIJOyAlMT0oMCAxIDIgMykgLyAlMj0oNCA1IDYgNykgPT4gJTE9KDIgMyA2IDcpCi0Jc2h1ZnBzCSUxLCUyLDB4RUUKKyVtYWNybyAgdW5wY2tocHMyIDIgICAgIDsgJTE9KDAgMSAyIDMpIC8gJTI9KDQgNSA2IDcpID0+ICUxPSgyIDMgNiA3KQorICAgICAgICBzaHVmcHMgICUxLCUyLDB4RUUKICVlbmRtYWNybwogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JU0VDVElPTglTRUdfQ09OU1QKKyAgICAgICAgU0VDVElPTiBTRUdfQ09OU1QKIAotCWFsaWduegkxNgotCWdsb2JhbAlFWFROKGpjb25zdF9pZGN0X2Zsb2F0X3NzZTIpCisgICAgICAgIGFsaWdueiAgMTYKKyAgICAgICAgZ2xvYmFsICBFWFROKGpjb25zdF9pZGN0X2Zsb2F0X3NzZTIpCiAKIEVYVE4oamNvbnN0X2lkY3RfZmxvYXRfc3NlMik6CiAKLVBEXzFfNDE0CXRpbWVzIDQgZGQgIDEuNDE0MjEzNTYyMzczMDk1MDQ4ODAxNjg5Ci1QRF8xXzg0Nwl0aW1lcyA0IGRkICAxLjg0Nzc1OTA2NTAyMjU3MzUxMjI1NjM2NgotUERfMV8wODIJdGltZXMgNCBkZCAgMS4wODIzOTIyMDAyOTIzOTM5Njg3OTk0NDYKLVBEX00yXzYxMwl0aW1lcyA0IGRkIC0yLjYxMzEyNTkyOTc1Mjc1MzA1NTcxMzI4NgotUERfUk5ESU5UX01BR0lDCXRpbWVzIDQgZGQgIDEwMDY2MzI5Ni4wCTsgKGZsb2F0KSgweDAwQzAwMDAwIDw8IDMpCi1QQl9DRU5URVJKU0FNUAl0aW1lcyAxNiBkYiBDRU5URVJKU0FNUExFCitQRF8xXzQxNCAgICAgICAgdGltZXMgNCBkZCAgMS40MTQyMTM1NjIzNzMwOTUwNDg4MDE2ODkKK1BEXzFfODQ3ICAgICAgICB0aW1lcyA0IGRkICAxLjg0Nzc1OTA2NTAyMjU3MzUxMjI1NjM2NgorUERfMV8wODIgICAgICAgIHRpbWVzIDQgZGQgIDEuMDgyMzkyMjAwMjkyMzkzOTY4Nzk5NDQ2CitQRF9NMl82MTMgICAgICAgdGltZXMgNCBkZCAtMi42MTMxMjU5Mjk3NTI3NTMwNTU3MTMyODYKK1BEX1JORElOVF9NQUdJQyB0aW1lcyA0IGRkICAxMDA2NjMyOTYuMCA7IChmbG9hdCkoMHgwMEMwMDAwMCA8PCAzKQorUEJfQ0VOVEVSSlNBTVAgIHRpbWVzIDE2IGRiIENFTlRFUkpTQU1QTEUKIAotCWFsaWduegkxNgorICAgICAgICBhbGlnbnogIDE2CiAKIDsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlTRUNUSU9OCVNFR19URVhUCi0JQklUUwk2NAorICAgICAgICBTRUNUSU9OIFNFR19URVhUCisgICAgICAgIEJJVFMgICAgNjQKIDsKIDsgUGVyZm9ybSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Qgb24gb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cy4KIDsKQEAgLTY3LDQxNyArNjcsNDE3IEBACiA7IHIxMiA9IEpTQU1QQVJSQVkgb3V0cHV0X2J1ZgogOyByMTMgPSBKRElNRU5TSU9OIG91dHB1dF9jb2wKIAotJWRlZmluZSBvcmlnaW5hbF9yYnAJcmJwKzAKLSVkZWZpbmUgd2soaSkJCXJicC0oV0tfTlVNLShpKSkqU0laRU9GX1hNTVdPUkQJOyB4bW13b3JkIHdrW1dLX05VTV0KLSVkZWZpbmUgV0tfTlVNCQkyCi0lZGVmaW5lIHdvcmtzcGFjZQl3aygwKS1EQ1RTSVpFMipTSVpFT0ZfRkFTVF9GTE9BVAotCQkJCQk7IEZBU1RfRkxPQVQgd29ya3NwYWNlW0RDVFNJWkUyXQorJWRlZmluZSBvcmlnaW5hbF9yYnAgICAgcmJwKzAKKyVkZWZpbmUgd2soaSkgICAgICAgICAgIHJicC0oV0tfTlVNLShpKSkqU0laRU9GX1hNTVdPUkQgOyB4bW13b3JkIHdrW1dLX05VTV0KKyVkZWZpbmUgV0tfTlVNICAgICAgICAgIDIKKyVkZWZpbmUgd29ya3NwYWNlICAgICAgIHdrKDApLURDVFNJWkUyKlNJWkVPRl9GQVNUX0ZMT0FUCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBGQVNUX0ZMT0FUIHdvcmtzcGFjZVtEQ1RTSVpFMl0KIAotCWFsaWduCTE2Ci0JZ2xvYmFsCUVYVE4oanNpbWRfaWRjdF9mbG9hdF9zc2UyKQorICAgICAgICBhbGlnbiAgIDE2CisgICAgICAgIGdsb2JhbCAgRVhUTihqc2ltZF9pZGN0X2Zsb2F0X3NzZTIpCiAKIEVYVE4oanNpbWRfaWRjdF9mbG9hdF9zc2UyKToKLQlwdXNoCXJicAotCW1vdglyYXgscnNwCQkJCTsgcmF4ID0gb3JpZ2luYWwgcmJwCi0Jc3ViCXJzcCwgYnl0ZSA0Ci0JYW5kCXJzcCwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKQk7IGFsaWduIHRvIDEyOCBiaXRzCi0JbW92CVtyc3BdLHJheAotCW1vdglyYnAscnNwCQkJCTsgcmJwID0gYWxpZ25lZCByYnAKLQlsZWEJcnNwLCBbd29ya3NwYWNlXQotCWNvbGxlY3RfYXJncwotCXB1c2gJcmJ4CisgICAgICAgIHB1c2ggICAgcmJwCisgICAgICAgIG1vdiAgICAgcmF4LHJzcCAgICAgICAgICAgICAgICAgICAgICAgICA7IHJheCA9IG9yaWdpbmFsIHJicAorICAgICAgICBzdWIgICAgIHJzcCwgYnl0ZSA0CisgICAgICAgIGFuZCAgICAgcnNwLCBieXRlICgtU0laRU9GX1hNTVdPUkQpICAgICA7IGFsaWduIHRvIDEyOCBiaXRzCisgICAgICAgIG1vdiAgICAgW3JzcF0scmF4CisgICAgICAgIG1vdiAgICAgcmJwLHJzcCAgICAgICAgICAgICAgICAgICAgICAgICA7IHJicCA9IGFsaWduZWQgcmJwCisgICAgICAgIGxlYSAgICAgcnNwLCBbd29ya3NwYWNlXQorICAgICAgICBjb2xsZWN0X2FyZ3MKKyAgICAgICAgcHVzaCAgICByYngKIAotCTsgLS0tLSBQYXNzIDE6IHByb2Nlc3MgY29sdW1ucyBmcm9tIGlucHV0LCBzdG9yZSBpbnRvIHdvcmsgYXJyYXkuCisgICAgICAgIDsgLS0tLSBQYXNzIDE6IHByb2Nlc3MgY29sdW1ucyBmcm9tIGlucHV0LCBzdG9yZSBpbnRvIHdvcmsgYXJyYXkuCiAKLQltb3YJcmR4LCByMTAJOyBxdWFudHB0cgotCW1vdglyc2ksIHIxMQkJOyBpbnB0cgotCWxlYQlyZGksIFt3b3Jrc3BhY2VdCQkJOyBGQVNUX0ZMT0FUICogd3NwdHIKLQltb3YJcmN4LCBEQ1RTSVpFLzQJCQkJOyBjdHIKKyAgICAgICAgbW92ICAgICByZHgsIHIxMCAgICAgICAgICAgICAgICA7IHF1YW50cHRyCisgICAgICAgIG1vdiAgICAgcnNpLCByMTEgICAgICAgICAgICAgICAgOyBpbnB0cgorICAgICAgICBsZWEgICAgIHJkaSwgW3dvcmtzcGFjZV0gICAgICAgICAgICAgICAgICAgICAgICA7IEZBU1RfRkxPQVQgKiB3c3B0cgorICAgICAgICBtb3YgICAgIHJjeCwgRENUU0laRS80ICAgICAgICAgICAgICAgICAgICAgICAgICA7IGN0cgogLmNvbHVtbmxvb3A6CiAlaWZuZGVmIE5PX1pFUk9fQ09MVU1OX1RFU1RfRkxPQVRfU1NFCi0JbW92CWVheCwgRFdPUkQgW0RXQkxPQ0soMSwwLHJzaSxTSVpFT0ZfSkNPRUYpXQotCW9yCWVheCwgRFdPUkQgW0RXQkxPQ0soMiwwLHJzaSxTSVpFT0ZfSkNPRUYpXQotCWpuegluZWFyIC5jb2x1bW5EQ1QKKyAgICAgICAgbW92ICAgICBlYXgsIERXT1JEIFtEV0JMT0NLKDEsMCxyc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgb3IgICAgICBlYXgsIERXT1JEIFtEV0JMT0NLKDIsMCxyc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgam56ICAgICBuZWFyIC5jb2x1bW5EQ1QKIAotCW1vdnEJeG1tMSwgWE1NX01NV09SRCBbTU1CTE9DSygxLDAscnNpLFNJWkVPRl9KQ09FRildCi0JbW92cQl4bW0yLCBYTU1fTU1XT1JEIFtNTUJMT0NLKDIsMCxyc2ksU0laRU9GX0pDT0VGKV0KLQltb3ZxCXhtbTMsIFhNTV9NTVdPUkQgW01NQkxPQ0soMywwLHJzaSxTSVpFT0ZfSkNPRUYpXQotCW1vdnEJeG1tNCwgWE1NX01NV09SRCBbTU1CTE9DSyg0LDAscnNpLFNJWkVPRl9KQ09FRildCi0JbW92cQl4bW01LCBYTU1fTU1XT1JEIFtNTUJMT0NLKDUsMCxyc2ksU0laRU9GX0pDT0VGKV0KLQltb3ZxCXhtbTYsIFhNTV9NTVdPUkQgW01NQkxPQ0soNiwwLHJzaSxTSVpFT0ZfSkNPRUYpXQotCW1vdnEJeG1tNywgWE1NX01NV09SRCBbTU1CTE9DSyg3LDAscnNpLFNJWkVPRl9KQ09FRildCi0JcG9yCXhtbTEseG1tMgotCXBvcgl4bW0zLHhtbTQKLQlwb3IJeG1tNSx4bW02Ci0JcG9yCXhtbTEseG1tMwotCXBvcgl4bW01LHhtbTcKLQlwb3IJeG1tMSx4bW01Ci0JcGFja3Nzd2IgeG1tMSx4bW0xCi0JbW92ZAllYXgseG1tMQotCXRlc3QJcmF4LHJheAotCWpueglzaG9ydCAuY29sdW1uRENUCisgICAgICAgIG1vdnEgICAgeG1tMSwgWE1NX01NV09SRCBbTU1CTE9DSygxLDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdnEgICAgeG1tMiwgWE1NX01NV09SRCBbTU1CTE9DSygyLDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdnEgICAgeG1tMywgWE1NX01NV09SRCBbTU1CTE9DSygzLDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdnEgICAgeG1tNCwgWE1NX01NV09SRCBbTU1CTE9DSyg0LDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdnEgICAgeG1tNSwgWE1NX01NV09SRCBbTU1CTE9DSyg1LDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdnEgICAgeG1tNiwgWE1NX01NV09SRCBbTU1CTE9DSyg2LDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdnEgICAgeG1tNywgWE1NX01NV09SRCBbTU1CTE9DSyg3LDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIHBvciAgICAgeG1tMSx4bW0yCisgICAgICAgIHBvciAgICAgeG1tMyx4bW00CisgICAgICAgIHBvciAgICAgeG1tNSx4bW02CisgICAgICAgIHBvciAgICAgeG1tMSx4bW0zCisgICAgICAgIHBvciAgICAgeG1tNSx4bW03CisgICAgICAgIHBvciAgICAgeG1tMSx4bW01CisgICAgICAgIHBhY2tzc3diIHhtbTEseG1tMQorICAgICAgICBtb3ZkICAgIGVheCx4bW0xCisgICAgICAgIHRlc3QgICAgcmF4LHJheAorICAgICAgICBqbnogICAgIHNob3J0IC5jb2x1bW5EQ1QKIAotCTsgLS0gQUMgdGVybXMgYWxsIHplcm8KKyAgICAgICAgOyAtLSBBQyB0ZXJtcyBhbGwgemVybwogCi0JbW92cSAgICAgIHhtbTAsIFhNTV9NTVdPUkQgW01NQkxPQ0soMCwwLHJzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBtb3ZxICAgICAgeG1tMCwgWE1NX01NV09SRCBbTU1CTE9DSygwLDAscnNpLFNJWkVPRl9KQ09FRildCiAKLQlwdW5wY2tsd2QgeG1tMCx4bW0wCQk7IHhtbTA9KDAwIDAwIDAxIDAxIDAyIDAyIDAzIDAzKQotCXBzcmFkICAgICB4bW0wLChEV09SRF9CSVQtV09SRF9CSVQpCTsgeG1tMD1pbjA9KDAwIDAxIDAyIDAzKQotCWN2dGRxMnBzICB4bW0wLHhtbTAJCQk7IHhtbTA9aW4wPSgwMCAwMSAwMiAwMykKKyAgICAgICAgcHVucGNrbHdkIHhtbTAseG1tMCAgICAgICAgICAgICA7IHhtbTA9KDAwIDAwIDAxIDAxIDAyIDAyIDAzIDAzKQorICAgICAgICBwc3JhZCAgICAgeG1tMCwoRFdPUkRfQklULVdPUkRfQklUKSAgICAgOyB4bW0wPWluMD0oMDAgMDEgMDIgMDMpCisgICAgICAgIGN2dGRxMnBzICB4bW0wLHhtbTAgICAgICAgICAgICAgICAgICAgICA7IHhtbTA9aW4wPSgwMCAwMSAwMiAwMykKIAotCW11bHBzCXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxyZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCisgICAgICAgIG11bHBzICAgeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KIAotCW1vdmFwcwl4bW0xLHhtbTAKLQltb3ZhcHMJeG1tMix4bW0wCi0JbW92YXBzCXhtbTMseG1tMAorICAgICAgICBtb3ZhcHMgIHhtbTEseG1tMAorICAgICAgICBtb3ZhcHMgIHhtbTIseG1tMAorICAgICAgICBtb3ZhcHMgIHhtbTMseG1tMAogCi0Jc2h1ZnBzCXhtbTAseG1tMCwweDAwCQkJOyB4bW0wPSgwMCAwMCAwMCAwMCkKLQlzaHVmcHMJeG1tMSx4bW0xLDB4NTUJCQk7IHhtbTE9KDAxIDAxIDAxIDAxKQotCXNodWZwcwl4bW0yLHhtbTIsMHhBQQkJCTsgeG1tMj0oMDIgMDIgMDIgMDIpCi0Jc2h1ZnBzCXhtbTMseG1tMywweEZGCQkJOyB4bW0zPSgwMyAwMyAwMyAwMykKKyAgICAgICAgc2h1ZnBzICB4bW0wLHhtbTAsMHgwMCAgICAgICAgICAgICAgICAgIDsgeG1tMD0oMDAgMDAgMDAgMDApCisgICAgICAgIHNodWZwcyAgeG1tMSx4bW0xLDB4NTUgICAgICAgICAgICAgICAgICA7IHhtbTE9KDAxIDAxIDAxIDAxKQorICAgICAgICBzaHVmcHMgIHhtbTIseG1tMiwweEFBICAgICAgICAgICAgICAgICAgOyB4bW0yPSgwMiAwMiAwMiAwMikKKyAgICAgICAgc2h1ZnBzICB4bW0zLHhtbTMsMHhGRiAgICAgICAgICAgICAgICAgIDsgeG1tMz0oMDMgMDMgMDMgMDMpCiAKLQltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0wCi0JbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDAsMSxyZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMAotCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygxLDAscmRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTEKLQltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMSwxLHJkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0xCi0JbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDIsMCxyZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMgotCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygyLDEscmRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTIKLQltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMywwLHJkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0zCi0JbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDMsMSxyZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMwotCWptcAluZWFyIC5uZXh0Y29sdW1uCisgICAgICAgIG1vdmFwcyAgWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0wCisgICAgICAgIG1vdmFwcyAgWE1NV09SRCBbWE1NQkxPQ0soMCwxLHJkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0wCisgICAgICAgIG1vdmFwcyAgWE1NV09SRCBbWE1NQkxPQ0soMSwwLHJkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0xCisgICAgICAgIG1vdmFwcyAgWE1NV09SRCBbWE1NQkxPQ0soMSwxLHJkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0xCisgICAgICAgIG1vdmFwcyAgWE1NV09SRCBbWE1NQkxPQ0soMiwwLHJkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0yCisgICAgICAgIG1vdmFwcyAgWE1NV09SRCBbWE1NQkxPQ0soMiwxLHJkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0yCisgICAgICAgIG1vdmFwcyAgWE1NV09SRCBbWE1NQkxPQ0soMywwLHJkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0zCisgICAgICAgIG1vdmFwcyAgWE1NV09SRCBbWE1NQkxPQ0soMywxLHJkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0zCisgICAgICAgIGptcCAgICAgbmVhciAubmV4dGNvbHVtbgogJWVuZGlmCiAuY29sdW1uRENUOgogCi0JOyAtLSBFdmVuIHBhcnQKKyAgICAgICAgOyAtLSBFdmVuIHBhcnQKIAotCW1vdnEgICAgICB4bW0wLCBYTU1fTU1XT1JEIFtNTUJMT0NLKDAsMCxyc2ksU0laRU9GX0pDT0VGKV0KLQltb3ZxICAgICAgeG1tMSwgWE1NX01NV09SRCBbTU1CTE9DSygyLDAscnNpLFNJWkVPRl9KQ09FRildCi0JbW92cSAgICAgIHhtbTIsIFhNTV9NTVdPUkQgW01NQkxPQ0soNCwwLHJzaSxTSVpFT0ZfSkNPRUYpXQotCW1vdnEgICAgICB4bW0zLCBYTU1fTU1XT1JEIFtNTUJMT0NLKDYsMCxyc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgbW92cSAgICAgIHhtbTAsIFhNTV9NTVdPUkQgW01NQkxPQ0soMCwwLHJzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBtb3ZxICAgICAgeG1tMSwgWE1NX01NV09SRCBbTU1CTE9DSygyLDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdnEgICAgICB4bW0yLCBYTU1fTU1XT1JEIFtNTUJMT0NLKDQsMCxyc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgbW92cSAgICAgIHhtbTMsIFhNTV9NTVdPUkQgW01NQkxPQ0soNiwwLHJzaSxTSVpFT0ZfSkNPRUYpXQogCi0JcHVucGNrbHdkIHhtbTAseG1tMAkJOyB4bW0wPSgwMCAwMCAwMSAwMSAwMiAwMiAwMyAwMykKLQlwdW5wY2tsd2QgeG1tMSx4bW0xCQk7IHhtbTE9KDIwIDIwIDIxIDIxIDIyIDIyIDIzIDIzKQotCXBzcmFkICAgICB4bW0wLChEV09SRF9CSVQtV09SRF9CSVQpCTsgeG1tMD1pbjA9KDAwIDAxIDAyIDAzKQotCXBzcmFkICAgICB4bW0xLChEV09SRF9CSVQtV09SRF9CSVQpCTsgeG1tMT1pbjI9KDIwIDIxIDIyIDIzKQotCWN2dGRxMnBzICB4bW0wLHhtbTAJCQk7IHhtbTA9aW4wPSgwMCAwMSAwMiAwMykKLQljdnRkcTJwcyAgeG1tMSx4bW0xCQkJOyB4bW0xPWluMj0oMjAgMjEgMjIgMjMpCisgICAgICAgIHB1bnBja2x3ZCB4bW0wLHhtbTAgICAgICAgICAgICAgOyB4bW0wPSgwMCAwMCAwMSAwMSAwMiAwMiAwMyAwMykKKyAgICAgICAgcHVucGNrbHdkIHhtbTEseG1tMSAgICAgICAgICAgICA7IHhtbTE9KDIwIDIwIDIxIDIxIDIyIDIyIDIzIDIzKQorICAgICAgICBwc3JhZCAgICAgeG1tMCwoRFdPUkRfQklULVdPUkRfQklUKSAgICAgOyB4bW0wPWluMD0oMDAgMDEgMDIgMDMpCisgICAgICAgIHBzcmFkICAgICB4bW0xLChEV09SRF9CSVQtV09SRF9CSVQpICAgICA7IHhtbTE9aW4yPSgyMCAyMSAyMiAyMykKKyAgICAgICAgY3Z0ZHEycHMgIHhtbTAseG1tMCAgICAgICAgICAgICAgICAgICAgIDsgeG1tMD1pbjA9KDAwIDAxIDAyIDAzKQorICAgICAgICBjdnRkcTJwcyAgeG1tMSx4bW0xICAgICAgICAgICAgICAgICAgICAgOyB4bW0xPWluMj0oMjAgMjEgMjIgMjMpCiAKLQlwdW5wY2tsd2QgeG1tMix4bW0yCQk7IHhtbTI9KDQwIDQwIDQxIDQxIDQyIDQyIDQzIDQzKQotCXB1bnBja2x3ZCB4bW0zLHhtbTMJCTsgeG1tMz0oNjAgNjAgNjEgNjEgNjIgNjIgNjMgNjMpCi0JcHNyYWQgICAgIHhtbTIsKERXT1JEX0JJVC1XT1JEX0JJVCkJOyB4bW0yPWluND0oNDAgNDEgNDIgNDMpCi0JcHNyYWQgICAgIHhtbTMsKERXT1JEX0JJVC1XT1JEX0JJVCkJOyB4bW0zPWluNj0oNjAgNjEgNjIgNjMpCi0JY3Z0ZHEycHMgIHhtbTIseG1tMgkJCTsgeG1tMj1pbjQ9KDQwIDQxIDQyIDQzKQotCWN2dGRxMnBzICB4bW0zLHhtbTMJCQk7IHhtbTM9aW42PSg2MCA2MSA2MiA2MykKKyAgICAgICAgcHVucGNrbHdkIHhtbTIseG1tMiAgICAgICAgICAgICA7IHhtbTI9KDQwIDQwIDQxIDQxIDQyIDQyIDQzIDQzKQorICAgICAgICBwdW5wY2tsd2QgeG1tMyx4bW0zICAgICAgICAgICAgIDsgeG1tMz0oNjAgNjAgNjEgNjEgNjIgNjIgNjMgNjMpCisgICAgICAgIHBzcmFkICAgICB4bW0yLChEV09SRF9CSVQtV09SRF9CSVQpICAgICA7IHhtbTI9aW40PSg0MCA0MSA0MiA0MykKKyAgICAgICAgcHNyYWQgICAgIHhtbTMsKERXT1JEX0JJVC1XT1JEX0JJVCkgICAgIDsgeG1tMz1pbjY9KDYwIDYxIDYyIDYzKQorICAgICAgICBjdnRkcTJwcyAgeG1tMix4bW0yICAgICAgICAgICAgICAgICAgICAgOyB4bW0yPWluND0oNDAgNDEgNDIgNDMpCisgICAgICAgIGN2dGRxMnBzICB4bW0zLHhtbTMgICAgICAgICAgICAgICAgICAgICA7IHhtbTM9aW42PSg2MCA2MSA2MiA2MykKIAotCW11bHBzICAgICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAscmR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQotCW11bHBzICAgICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygyLDAscmR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQotCW11bHBzICAgICB4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSyg0LDAscmR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQotCW11bHBzICAgICB4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg2LDAscmR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQorICAgICAgICBtdWxwcyAgICAgeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KKyAgICAgICAgbXVscHMgICAgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxyZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCisgICAgICAgIG11bHBzICAgICB4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSyg0LDAscmR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQorICAgICAgICBtdWxwcyAgICAgeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNiwwLHJkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KIAotCW1vdmFwcwl4bW00LHhtbTAKLQltb3ZhcHMJeG1tNSx4bW0xCi0Jc3VicHMJeG1tMCx4bW0yCQk7IHhtbTA9dG1wMTEKLQlzdWJwcwl4bW0xLHhtbTMKLQlhZGRwcwl4bW00LHhtbTIJCTsgeG1tND10bXAxMAotCWFkZHBzCXhtbTUseG1tMwkJOyB4bW01PXRtcDEzCisgICAgICAgIG1vdmFwcyAgeG1tNCx4bW0wCisgICAgICAgIG1vdmFwcyAgeG1tNSx4bW0xCisgICAgICAgIHN1YnBzICAgeG1tMCx4bW0yICAgICAgICAgICAgICAgOyB4bW0wPXRtcDExCisgICAgICAgIHN1YnBzICAgeG1tMSx4bW0zCisgICAgICAgIGFkZHBzICAgeG1tNCx4bW0yICAgICAgICAgICAgICAgOyB4bW00PXRtcDEwCisgICAgICAgIGFkZHBzICAgeG1tNSx4bW0zICAgICAgICAgICAgICAgOyB4bW01PXRtcDEzCiAKLQltdWxwcwl4bW0xLFtyZWwgUERfMV80MTRdCi0Jc3VicHMJeG1tMSx4bW01CQk7IHhtbTE9dG1wMTIKKyAgICAgICAgbXVscHMgICB4bW0xLFtyZWwgUERfMV80MTRdCisgICAgICAgIHN1YnBzICAgeG1tMSx4bW01ICAgICAgICAgICAgICAgOyB4bW0xPXRtcDEyCiAKLQltb3ZhcHMJeG1tNix4bW00Ci0JbW92YXBzCXhtbTcseG1tMAotCXN1YnBzCXhtbTQseG1tNQkJOyB4bW00PXRtcDMKLQlzdWJwcwl4bW0wLHhtbTEJCTsgeG1tMD10bXAyCi0JYWRkcHMJeG1tNix4bW01CQk7IHhtbTY9dG1wMAotCWFkZHBzCXhtbTcseG1tMQkJOyB4bW03PXRtcDEKKyAgICAgICAgbW92YXBzICB4bW02LHhtbTQKKyAgICAgICAgbW92YXBzICB4bW03LHhtbTAKKyAgICAgICAgc3VicHMgICB4bW00LHhtbTUgICAgICAgICAgICAgICA7IHhtbTQ9dG1wMworICAgICAgICBzdWJwcyAgIHhtbTAseG1tMSAgICAgICAgICAgICAgIDsgeG1tMD10bXAyCisgICAgICAgIGFkZHBzICAgeG1tNix4bW01ICAgICAgICAgICAgICAgOyB4bW02PXRtcDAKKyAgICAgICAgYWRkcHMgICB4bW03LHhtbTEgICAgICAgICAgICAgICA7IHhtbTc9dG1wMQogCi0JbW92YXBzCVhNTVdPUkQgW3drKDEpXSwgeG1tNAk7IHRtcDMKLQltb3ZhcHMJWE1NV09SRCBbd2soMCldLCB4bW0wCTsgdG1wMgorICAgICAgICBtb3ZhcHMgIFhNTVdPUkQgW3drKDEpXSwgeG1tNCAgIDsgdG1wMworICAgICAgICBtb3ZhcHMgIFhNTVdPUkQgW3drKDApXSwgeG1tMCAgIDsgdG1wMgogCi0JOyAtLSBPZGQgcGFydAorICAgICAgICA7IC0tIE9kZCBwYXJ0CiAKLQltb3ZxICAgICAgeG1tMiwgWE1NX01NV09SRCBbTU1CTE9DSygxLDAscnNpLFNJWkVPRl9KQ09FRildCi0JbW92cSAgICAgIHhtbTMsIFhNTV9NTVdPUkQgW01NQkxPQ0soMywwLHJzaSxTSVpFT0ZfSkNPRUYpXQotCW1vdnEgICAgICB4bW01LCBYTU1fTU1XT1JEIFtNTUJMT0NLKDUsMCxyc2ksU0laRU9GX0pDT0VGKV0KLQltb3ZxICAgICAgeG1tMSwgWE1NX01NV09SRCBbTU1CTE9DSyg3LDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdnEgICAgICB4bW0yLCBYTU1fTU1XT1JEIFtNTUJMT0NLKDEsMCxyc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgbW92cSAgICAgIHhtbTMsIFhNTV9NTVdPUkQgW01NQkxPQ0soMywwLHJzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBtb3ZxICAgICAgeG1tNSwgWE1NX01NV09SRCBbTU1CTE9DSyg1LDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdnEgICAgICB4bW0xLCBYTU1fTU1XT1JEIFtNTUJMT0NLKDcsMCxyc2ksU0laRU9GX0pDT0VGKV0KIAotCXB1bnBja2x3ZCB4bW0yLHhtbTIJCTsgeG1tMj0oMTAgMTAgMTEgMTEgMTIgMTIgMTMgMTMpCi0JcHVucGNrbHdkIHhtbTMseG1tMwkJOyB4bW0zPSgzMCAzMCAzMSAzMSAzMiAzMiAzMyAzMykKLQlwc3JhZCAgICAgeG1tMiwoRFdPUkRfQklULVdPUkRfQklUKQk7IHhtbTI9aW4xPSgxMCAxMSAxMiAxMykKLQlwc3JhZCAgICAgeG1tMywoRFdPUkRfQklULVdPUkRfQklUKQk7IHhtbTM9aW4zPSgzMCAzMSAzMiAzMykKLQljdnRkcTJwcyAgeG1tMix4bW0yCQkJOyB4bW0yPWluMT0oMTAgMTEgMTIgMTMpCi0JY3Z0ZHEycHMgIHhtbTMseG1tMwkJCTsgeG1tMz1pbjM9KDMwIDMxIDMyIDMzKQorICAgICAgICBwdW5wY2tsd2QgeG1tMix4bW0yICAgICAgICAgICAgIDsgeG1tMj0oMTAgMTAgMTEgMTEgMTIgMTIgMTMgMTMpCisgICAgICAgIHB1bnBja2x3ZCB4bW0zLHhtbTMgICAgICAgICAgICAgOyB4bW0zPSgzMCAzMCAzMSAzMSAzMiAzMiAzMyAzMykKKyAgICAgICAgcHNyYWQgICAgIHhtbTIsKERXT1JEX0JJVC1XT1JEX0JJVCkgICAgIDsgeG1tMj1pbjE9KDEwIDExIDEyIDEzKQorICAgICAgICBwc3JhZCAgICAgeG1tMywoRFdPUkRfQklULVdPUkRfQklUKSAgICAgOyB4bW0zPWluMz0oMzAgMzEgMzIgMzMpCisgICAgICAgIGN2dGRxMnBzICB4bW0yLHhtbTIgICAgICAgICAgICAgICAgICAgICA7IHhtbTI9aW4xPSgxMCAxMSAxMiAxMykKKyAgICAgICAgY3Z0ZHEycHMgIHhtbTMseG1tMyAgICAgICAgICAgICAgICAgICAgIDsgeG1tMz1pbjM9KDMwIDMxIDMyIDMzKQogCi0JcHVucGNrbHdkIHhtbTUseG1tNQkJOyB4bW01PSg1MCA1MCA1MSA1MSA1MiA1MiA1MyA1MykKLQlwdW5wY2tsd2QgeG1tMSx4bW0xCQk7IHhtbTE9KDcwIDcwIDcxIDcxIDcyIDcyIDczIDczKQotCXBzcmFkICAgICB4bW01LChEV09SRF9CSVQtV09SRF9CSVQpCTsgeG1tNT1pbjU9KDUwIDUxIDUyIDUzKQotCXBzcmFkICAgICB4bW0xLChEV09SRF9CSVQtV09SRF9CSVQpCTsgeG1tMT1pbjc9KDcwIDcxIDcyIDczKQotCWN2dGRxMnBzICB4bW01LHhtbTUJCQk7IHhtbTU9aW41PSg1MCA1MSA1MiA1MykKLQljdnRkcTJwcyAgeG1tMSx4bW0xCQkJOyB4bW0xPWluNz0oNzAgNzEgNzIgNzMpCisgICAgICAgIHB1bnBja2x3ZCB4bW01LHhtbTUgICAgICAgICAgICAgOyB4bW01PSg1MCA1MCA1MSA1MSA1MiA1MiA1MyA1MykKKyAgICAgICAgcHVucGNrbHdkIHhtbTEseG1tMSAgICAgICAgICAgICA7IHhtbTE9KDcwIDcwIDcxIDcxIDcyIDcyIDczIDczKQorICAgICAgICBwc3JhZCAgICAgeG1tNSwoRFdPUkRfQklULVdPUkRfQklUKSAgICAgOyB4bW01PWluNT0oNTAgNTEgNTIgNTMpCisgICAgICAgIHBzcmFkICAgICB4bW0xLChEV09SRF9CSVQtV09SRF9CSVQpICAgICA7IHhtbTE9aW43PSg3MCA3MSA3MiA3MykKKyAgICAgICAgY3Z0ZHEycHMgIHhtbTUseG1tNSAgICAgICAgICAgICAgICAgICAgIDsgeG1tNT1pbjU9KDUwIDUxIDUyIDUzKQorICAgICAgICBjdnRkcTJwcyAgeG1tMSx4bW0xICAgICAgICAgICAgICAgICAgICAgOyB4bW0xPWluNz0oNzAgNzEgNzIgNzMpCiAKLQltdWxwcyAgICAgeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLHJkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KLQltdWxwcyAgICAgeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soMywwLHJkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KLQltdWxwcyAgICAgeG1tNSwgWE1NV09SRCBbWE1NQkxPQ0soNSwwLHJkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KLQltdWxwcyAgICAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNywwLHJkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KKyAgICAgICAgbXVscHMgICAgIHhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxyZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCisgICAgICAgIG11bHBzICAgICB4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAscmR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQorICAgICAgICBtdWxwcyAgICAgeG1tNSwgWE1NV09SRCBbWE1NQkxPQ0soNSwwLHJkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KKyAgICAgICAgbXVscHMgICAgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxyZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCiAKLQltb3ZhcHMJeG1tNCx4bW0yCi0JbW92YXBzCXhtbTAseG1tNQotCWFkZHBzCXhtbTIseG1tMQkJOyB4bW0yPXoxMQotCWFkZHBzCXhtbTUseG1tMwkJOyB4bW01PXoxMwotCXN1YnBzCXhtbTQseG1tMQkJOyB4bW00PXoxMgotCXN1YnBzCXhtbTAseG1tMwkJOyB4bW0wPXoxMAorICAgICAgICBtb3ZhcHMgIHhtbTQseG1tMgorICAgICAgICBtb3ZhcHMgIHhtbTAseG1tNQorICAgICAgICBhZGRwcyAgIHhtbTIseG1tMSAgICAgICAgICAgICAgIDsgeG1tMj16MTEKKyAgICAgICAgYWRkcHMgICB4bW01LHhtbTMgICAgICAgICAgICAgICA7IHhtbTU9ejEzCisgICAgICAgIHN1YnBzICAgeG1tNCx4bW0xICAgICAgICAgICAgICAgOyB4bW00PXoxMgorICAgICAgICBzdWJwcyAgIHhtbTAseG1tMyAgICAgICAgICAgICAgIDsgeG1tMD16MTAKIAotCW1vdmFwcwl4bW0xLHhtbTIKLQlzdWJwcwl4bW0yLHhtbTUKLQlhZGRwcwl4bW0xLHhtbTUJCTsgeG1tMT10bXA3CisgICAgICAgIG1vdmFwcyAgeG1tMSx4bW0yCisgICAgICAgIHN1YnBzICAgeG1tMix4bW01CisgICAgICAgIGFkZHBzICAgeG1tMSx4bW01ICAgICAgICAgICAgICAgOyB4bW0xPXRtcDcKIAotCW11bHBzCXhtbTIsW3JlbCBQRF8xXzQxNF0JOyB4bW0yPXRtcDExCisgICAgICAgIG11bHBzICAgeG1tMixbcmVsIFBEXzFfNDE0XSAgICAgOyB4bW0yPXRtcDExCiAKLQltb3ZhcHMJeG1tMyx4bW0wCi0JYWRkcHMJeG1tMCx4bW00Ci0JbXVscHMJeG1tMCxbcmVsIFBEXzFfODQ3XQk7IHhtbTA9ejUKLQltdWxwcwl4bW0zLFtyZWwgUERfTTJfNjEzXQk7IHhtbTM9KHoxMCAqIC0yLjYxMzEyNTkzMCkKLQltdWxwcwl4bW00LFtyZWwgUERfMV8wODJdCTsgeG1tND0oejEyICogMS4wODIzOTIyMDApCi0JYWRkcHMJeG1tMyx4bW0wCQk7IHhtbTM9dG1wMTIKLQlzdWJwcwl4bW00LHhtbTAJCTsgeG1tND10bXAxMAorICAgICAgICBtb3ZhcHMgIHhtbTMseG1tMAorICAgICAgICBhZGRwcyAgIHhtbTAseG1tNAorICAgICAgICBtdWxwcyAgIHhtbTAsW3JlbCBQRF8xXzg0N10gICAgIDsgeG1tMD16NQorICAgICAgICBtdWxwcyAgIHhtbTMsW3JlbCBQRF9NMl82MTNdICAgIDsgeG1tMz0oejEwICogLTIuNjEzMTI1OTMwKQorICAgICAgICBtdWxwcyAgIHhtbTQsW3JlbCBQRF8xXzA4Ml0gICAgIDsgeG1tND0oejEyICogMS4wODIzOTIyMDApCisgICAgICAgIGFkZHBzICAgeG1tMyx4bW0wICAgICAgICAgICAgICAgOyB4bW0zPXRtcDEyCisgICAgICAgIHN1YnBzICAgeG1tNCx4bW0wICAgICAgICAgICAgICAgOyB4bW00PXRtcDEwCiAKLQk7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQorICAgICAgICA7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQogCi0Jc3VicHMJeG1tMyx4bW0xCQk7IHhtbTM9dG1wNgotCW1vdmFwcwl4bW01LHhtbTYKLQltb3ZhcHMJeG1tMCx4bW03Ci0JYWRkcHMJeG1tNix4bW0xCQk7IHhtbTY9ZGF0YTA9KDAwIDAxIDAyIDAzKQotCWFkZHBzCXhtbTcseG1tMwkJOyB4bW03PWRhdGExPSgxMCAxMSAxMiAxMykKLQlzdWJwcwl4bW01LHhtbTEJCTsgeG1tNT1kYXRhNz0oNzAgNzEgNzIgNzMpCi0Jc3VicHMJeG1tMCx4bW0zCQk7IHhtbTA9ZGF0YTY9KDYwIDYxIDYyIDYzKQotCXN1YnBzCXhtbTIseG1tMwkJOyB4bW0yPXRtcDUKKyAgICAgICAgc3VicHMgICB4bW0zLHhtbTEgICAgICAgICAgICAgICA7IHhtbTM9dG1wNgorICAgICAgICBtb3ZhcHMgIHhtbTUseG1tNgorICAgICAgICBtb3ZhcHMgIHhtbTAseG1tNworICAgICAgICBhZGRwcyAgIHhtbTYseG1tMSAgICAgICAgICAgICAgIDsgeG1tNj1kYXRhMD0oMDAgMDEgMDIgMDMpCisgICAgICAgIGFkZHBzICAgeG1tNyx4bW0zICAgICAgICAgICAgICAgOyB4bW03PWRhdGExPSgxMCAxMSAxMiAxMykKKyAgICAgICAgc3VicHMgICB4bW01LHhtbTEgICAgICAgICAgICAgICA7IHhtbTU9ZGF0YTc9KDcwIDcxIDcyIDczKQorICAgICAgICBzdWJwcyAgIHhtbTAseG1tMyAgICAgICAgICAgICAgIDsgeG1tMD1kYXRhNj0oNjAgNjEgNjIgNjMpCisgICAgICAgIHN1YnBzICAgeG1tMix4bW0zICAgICAgICAgICAgICAgOyB4bW0yPXRtcDUKIAotCW1vdmFwcyAgICB4bW0xLHhtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQotCXVucGNrbHBzICB4bW02LHhtbTcJCTsgeG1tNj0oMDAgMTAgMDEgMTEpCi0JdW5wY2tocHMgIHhtbTEseG1tNwkJOyB4bW0xPSgwMiAxMiAwMyAxMykKLQltb3ZhcHMgICAgeG1tMyx4bW0wCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKLQl1bnBja2xwcyAgeG1tMCx4bW01CQk7IHhtbTA9KDYwIDcwIDYxIDcxKQotCXVucGNraHBzICB4bW0zLHhtbTUJCTsgeG1tMz0oNjIgNzIgNjMgNzMpCisgICAgICAgIG1vdmFwcyAgICB4bW0xLHhtbTYgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgICAgIHVucGNrbHBzICB4bW02LHhtbTcgICAgICAgICAgICAgOyB4bW02PSgwMCAxMCAwMSAxMSkKKyAgICAgICAgdW5wY2tocHMgIHhtbTEseG1tNyAgICAgICAgICAgICA7IHhtbTE9KDAyIDEyIDAzIDEzKQorICAgICAgICBtb3ZhcHMgICAgeG1tMyx4bW0wICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgICAgICB1bnBja2xwcyAgeG1tMCx4bW01ICAgICAgICAgICAgIDsgeG1tMD0oNjAgNzAgNjEgNzEpCisgICAgICAgIHVucGNraHBzICB4bW0zLHhtbTUgICAgICAgICAgICAgOyB4bW0zPSg2MiA3MiA2MyA3MykKIAotCW1vdmFwcwl4bW03LCBYTU1XT1JEIFt3aygwKV0JOyB4bW03PXRtcDIKLQltb3ZhcHMJeG1tNSwgWE1NV09SRCBbd2soMSldCTsgeG1tNT10bXAzCisgICAgICAgIG1vdmFwcyAgeG1tNywgWE1NV09SRCBbd2soMCldICAgOyB4bW03PXRtcDIKKyAgICAgICAgbW92YXBzICB4bW01LCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTU9dG1wMwogCi0JbW92YXBzCVhNTVdPUkQgW3drKDApXSwgeG1tMAk7IHdrKDApPSg2MCA3MCA2MSA3MSkKLQltb3ZhcHMJWE1NV09SRCBbd2soMSldLCB4bW0zCTsgd2soMSk9KDYyIDcyIDYzIDczKQorICAgICAgICBtb3ZhcHMgIFhNTVdPUkQgW3drKDApXSwgeG1tMCAgIDsgd2soMCk9KDYwIDcwIDYxIDcxKQorICAgICAgICBtb3ZhcHMgIFhNTVdPUkQgW3drKDEpXSwgeG1tMyAgIDsgd2soMSk9KDYyIDcyIDYzIDczKQogCi0JYWRkcHMJeG1tNCx4bW0yCQk7IHhtbTQ9dG1wNAotCW1vdmFwcwl4bW0wLHhtbTcKLQltb3ZhcHMJeG1tMyx4bW01Ci0JYWRkcHMJeG1tNyx4bW0yCQk7IHhtbTc9ZGF0YTI9KDIwIDIxIDIyIDIzKQotCWFkZHBzCXhtbTUseG1tNAkJOyB4bW01PWRhdGE0PSg0MCA0MSA0MiA0MykKLQlzdWJwcwl4bW0wLHhtbTIJCTsgeG1tMD1kYXRhNT0oNTAgNTEgNTIgNTMpCi0Jc3VicHMJeG1tMyx4bW00CQk7IHhtbTM9ZGF0YTM9KDMwIDMxIDMyIDMzKQorICAgICAgICBhZGRwcyAgIHhtbTQseG1tMiAgICAgICAgICAgICAgIDsgeG1tND10bXA0CisgICAgICAgIG1vdmFwcyAgeG1tMCx4bW03CisgICAgICAgIG1vdmFwcyAgeG1tMyx4bW01CisgICAgICAgIGFkZHBzICAgeG1tNyx4bW0yICAgICAgICAgICAgICAgOyB4bW03PWRhdGEyPSgyMCAyMSAyMiAyMykKKyAgICAgICAgYWRkcHMgICB4bW01LHhtbTQgICAgICAgICAgICAgICA7IHhtbTU9ZGF0YTQ9KDQwIDQxIDQyIDQzKQorICAgICAgICBzdWJwcyAgIHhtbTAseG1tMiAgICAgICAgICAgICAgIDsgeG1tMD1kYXRhNT0oNTAgNTEgNTIgNTMpCisgICAgICAgIHN1YnBzICAgeG1tMyx4bW00ICAgICAgICAgICAgICAgOyB4bW0zPWRhdGEzPSgzMCAzMSAzMiAzMykKIAotCW1vdmFwcyAgICB4bW0yLHhtbTcJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQotCXVucGNrbHBzICB4bW03LHhtbTMJCTsgeG1tNz0oMjAgMzAgMjEgMzEpCi0JdW5wY2tocHMgIHhtbTIseG1tMwkJOyB4bW0yPSgyMiAzMiAyMyAzMykKLQltb3ZhcHMgICAgeG1tNCx4bW01CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKLQl1bnBja2xwcyAgeG1tNSx4bW0wCQk7IHhtbTU9KDQwIDUwIDQxIDUxKQotCXVucGNraHBzICB4bW00LHhtbTAJCTsgeG1tND0oNDIgNTIgNDMgNTMpCisgICAgICAgIG1vdmFwcyAgICB4bW0yLHhtbTcgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgICAgIHVucGNrbHBzICB4bW03LHhtbTMgICAgICAgICAgICAgOyB4bW03PSgyMCAzMCAyMSAzMSkKKyAgICAgICAgdW5wY2tocHMgIHhtbTIseG1tMyAgICAgICAgICAgICA7IHhtbTI9KDIyIDMyIDIzIDMzKQorICAgICAgICBtb3ZhcHMgICAgeG1tNCx4bW01ICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgICAgICB1bnBja2xwcyAgeG1tNSx4bW0wICAgICAgICAgICAgIDsgeG1tNT0oNDAgNTAgNDEgNTEpCisgICAgICAgIHVucGNraHBzICB4bW00LHhtbTAgICAgICAgICAgICAgOyB4bW00PSg0MiA1MiA0MyA1MykKIAotCW1vdmFwcyAgICB4bW0zLHhtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQotCXVucGNrbHBzMiB4bW02LHhtbTcJCTsgeG1tNj0oMDAgMTAgMjAgMzApCi0JdW5wY2tocHMyIHhtbTMseG1tNwkJOyB4bW0zPSgwMSAxMSAyMSAzMSkKLQltb3ZhcHMgICAgeG1tMCx4bW0xCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKLQl1bnBja2xwczIgeG1tMSx4bW0yCQk7IHhtbTE9KDAyIDEyIDIyIDMyKQotCXVucGNraHBzMiB4bW0wLHhtbTIJCTsgeG1tMD0oMDMgMTMgMjMgMzMpCisgICAgICAgIG1vdmFwcyAgICB4bW0zLHhtbTYgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgICAgIHVucGNrbHBzMiB4bW02LHhtbTcgICAgICAgICAgICAgOyB4bW02PSgwMCAxMCAyMCAzMCkKKyAgICAgICAgdW5wY2tocHMyIHhtbTMseG1tNyAgICAgICAgICAgICA7IHhtbTM9KDAxIDExIDIxIDMxKQorICAgICAgICBtb3ZhcHMgICAgeG1tMCx4bW0xICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgICAgICB1bnBja2xwczIgeG1tMSx4bW0yICAgICAgICAgICAgIDsgeG1tMT0oMDIgMTIgMjIgMzIpCisgICAgICAgIHVucGNraHBzMiB4bW0wLHhtbTIgICAgICAgICAgICAgOyB4bW0wPSgwMyAxMyAyMyAzMykKIAotCW1vdmFwcwl4bW03LCBYTU1XT1JEIFt3aygwKV0JOyB4bW03PSg2MCA3MCA2MSA3MSkKLQltb3ZhcHMJeG1tMiwgWE1NV09SRCBbd2soMSldCTsgeG1tMj0oNjIgNzIgNjMgNzMpCisgICAgICAgIG1vdmFwcyAgeG1tNywgWE1NV09SRCBbd2soMCldICAgOyB4bW03PSg2MCA3MCA2MSA3MSkKKyAgICAgICAgbW92YXBzICB4bW0yLCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTI9KDYyIDcyIDYzIDczKQogCi0JbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDAsMCxyZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNgotCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygxLDAscmRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTMKLQltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMiwwLHJkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0xCi0JbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDMsMCxyZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMAorICAgICAgICBtb3ZhcHMgIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxyZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNgorICAgICAgICBtb3ZhcHMgIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxyZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMworICAgICAgICBtb3ZhcHMgIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxyZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMQorICAgICAgICBtb3ZhcHMgIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxyZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMAogCi0JbW92YXBzICAgIHhtbTYseG1tNQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCi0JdW5wY2tscHMyIHhtbTUseG1tNwkJOyB4bW01PSg0MCA1MCA2MCA3MCkKLQl1bnBja2hwczIgeG1tNix4bW03CQk7IHhtbTY9KDQxIDUxIDYxIDcxKQotCW1vdmFwcyAgICB4bW0zLHhtbTQJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQotCXVucGNrbHBzMiB4bW00LHhtbTIJCTsgeG1tND0oNDIgNTIgNjIgNzIpCi0JdW5wY2tocHMyIHhtbTMseG1tMgkJOyB4bW0zPSg0MyA1MyA2MyA3MykKKyAgICAgICAgbW92YXBzICAgIHhtbTYseG1tNSAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICAgICAgdW5wY2tscHMyIHhtbTUseG1tNyAgICAgICAgICAgICA7IHhtbTU9KDQwIDUwIDYwIDcwKQorICAgICAgICB1bnBja2hwczIgeG1tNix4bW03ICAgICAgICAgICAgIDsgeG1tNj0oNDEgNTEgNjEgNzEpCisgICAgICAgIG1vdmFwcyAgICB4bW0zLHhtbTQgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgICAgIHVucGNrbHBzMiB4bW00LHhtbTIgICAgICAgICAgICAgOyB4bW00PSg0MiA1MiA2MiA3MikKKyAgICAgICAgdW5wY2tocHMyIHhtbTMseG1tMiAgICAgICAgICAgICA7IHhtbTM9KDQzIDUzIDYzIDczKQogCi0JbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDAsMSxyZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNQotCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygxLDEscmRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTYKLQltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMiwxLHJkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW00Ci0JbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDMsMSxyZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMworICAgICAgICBtb3ZhcHMgIFhNTVdPUkQgW1hNTUJMT0NLKDAsMSxyZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNQorICAgICAgICBtb3ZhcHMgIFhNTVdPUkQgW1hNTUJMT0NLKDEsMSxyZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNgorICAgICAgICBtb3ZhcHMgIFhNTVdPUkQgW1hNTUJMT0NLKDIsMSxyZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNAorICAgICAgICBtb3ZhcHMgIFhNTVdPUkQgW1hNTUJMT0NLKDMsMSxyZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMwogCiAubmV4dGNvbHVtbjoKLQlhZGQJcnNpLCBieXRlIDQqU0laRU9GX0pDT0VGCQk7IGNvZWZfYmxvY2sKLQlhZGQJcmR4LCBieXRlIDQqU0laRU9GX0ZMT0FUX01VTFRfVFlQRQk7IHF1YW50cHRyCi0JYWRkCXJkaSwgICAgICA0KkRDVFNJWkUqU0laRU9GX0ZBU1RfRkxPQVQJOyB3c3B0cgotCWRlYwlyY3gJCQkJCTsgY3RyCi0Jam56CW5lYXIgLmNvbHVtbmxvb3AKKyAgICAgICAgYWRkICAgICByc2ksIGJ5dGUgNCpTSVpFT0ZfSkNPRUYgICAgICAgICAgICAgICAgOyBjb2VmX2Jsb2NrCisgICAgICAgIGFkZCAgICAgcmR4LCBieXRlIDQqU0laRU9GX0ZMT0FUX01VTFRfVFlQRSAgICAgIDsgcXVhbnRwdHIKKyAgICAgICAgYWRkICAgICByZGksICAgICAgNCpEQ1RTSVpFKlNJWkVPRl9GQVNUX0ZMT0FUICAgOyB3c3B0cgorICAgICAgICBkZWMgICAgIHJjeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IGN0cgorICAgICAgICBqbnogICAgIG5lYXIgLmNvbHVtbmxvb3AKIAotCTsgLS0gUHJlZmV0Y2ggdGhlIG5leHQgY29lZmZpY2llbnQgYmxvY2sKKyAgICAgICAgOyAtLSBQcmVmZXRjaCB0aGUgbmV4dCBjb2VmZmljaWVudCBibG9jawogCi0JcHJlZmV0Y2hudGEgW3JzaSArIChEQ1RTSVpFMi04KSpTSVpFT0ZfSkNPRUYgKyAwKjMyXQotCXByZWZldGNobnRhIFtyc2kgKyAoRENUU0laRTItOCkqU0laRU9GX0pDT0VGICsgMSozMl0KLQlwcmVmZXRjaG50YSBbcnNpICsgKERDVFNJWkUyLTgpKlNJWkVPRl9KQ09FRiArIDIqMzJdCi0JcHJlZmV0Y2hudGEgW3JzaSArIChEQ1RTSVpFMi04KSpTSVpFT0ZfSkNPRUYgKyAzKjMyXQorICAgICAgICBwcmVmZXRjaG50YSBbcnNpICsgKERDVFNJWkUyLTgpKlNJWkVPRl9KQ09FRiArIDAqMzJdCisgICAgICAgIHByZWZldGNobnRhIFtyc2kgKyAoRENUU0laRTItOCkqU0laRU9GX0pDT0VGICsgMSozMl0KKyAgICAgICAgcHJlZmV0Y2hudGEgW3JzaSArIChEQ1RTSVpFMi04KSpTSVpFT0ZfSkNPRUYgKyAyKjMyXQorICAgICAgICBwcmVmZXRjaG50YSBbcnNpICsgKERDVFNJWkUyLTgpKlNJWkVPRl9KQ09FRiArIDMqMzJdCiAKLQk7IC0tLS0gUGFzcyAyOiBwcm9jZXNzIHJvd3MgZnJvbSB3b3JrIGFycmF5LCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4KKyAgICAgICAgOyAtLS0tIFBhc3MgMjogcHJvY2VzcyByb3dzIGZyb20gd29yayBhcnJheSwgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuCiAKLQltb3YJcmF4LCBbb3JpZ2luYWxfcmJwXQotCWxlYQlyc2ksIFt3b3Jrc3BhY2VdCQkJOyBGQVNUX0ZMT0FUICogd3NwdHIKLQltb3YJcmRpLCByMTIJOyAoSlNBTVBST1cgKikKLQltb3YJcmF4LCByMTMKLQltb3YJcmN4LCBEQ1RTSVpFLzQJCQkJOyBjdHIKKyAgICAgICAgbW92ICAgICByYXgsIFtvcmlnaW5hbF9yYnBdCisgICAgICAgIGxlYSAgICAgcnNpLCBbd29ya3NwYWNlXSAgICAgICAgICAgICAgICAgICAgICAgIDsgRkFTVF9GTE9BVCAqIHdzcHRyCisgICAgICAgIG1vdiAgICAgcmRpLCByMTIgICAgICAgIDsgKEpTQU1QUk9XICopCisgICAgICAgIG1vdiAgICAgcmF4LCByMTMKKyAgICAgICAgbW92ICAgICByY3gsIERDVFNJWkUvNCAgICAgICAgICAgICAgICAgICAgICAgICAgOyBjdHIKIC5yb3dsb29wOgogCi0JOyAtLSBFdmVuIHBhcnQKKyAgICAgICAgOyAtLSBFdmVuIHBhcnQKIAotCW1vdmFwcwl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAscnNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KLQltb3ZhcHMJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMiwwLHJzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCi0JbW92YXBzCXhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDQsMCxyc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQotCW1vdmFwcwl4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg2LDAscnNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICAgICAgbW92YXBzICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAscnNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICAgICAgbW92YXBzICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygyLDAscnNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICAgICAgbW92YXBzICB4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSyg0LDAscnNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICAgICAgbW92YXBzICB4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg2LDAscnNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KIAotCW1vdmFwcwl4bW00LHhtbTAKLQltb3ZhcHMJeG1tNSx4bW0xCi0Jc3VicHMJeG1tMCx4bW0yCQk7IHhtbTA9dG1wMTEKLQlzdWJwcwl4bW0xLHhtbTMKLQlhZGRwcwl4bW00LHhtbTIJCTsgeG1tND10bXAxMAotCWFkZHBzCXhtbTUseG1tMwkJOyB4bW01PXRtcDEzCisgICAgICAgIG1vdmFwcyAgeG1tNCx4bW0wCisgICAgICAgIG1vdmFwcyAgeG1tNSx4bW0xCisgICAgICAgIHN1YnBzICAgeG1tMCx4bW0yICAgICAgICAgICAgICAgOyB4bW0wPXRtcDExCisgICAgICAgIHN1YnBzICAgeG1tMSx4bW0zCisgICAgICAgIGFkZHBzICAgeG1tNCx4bW0yICAgICAgICAgICAgICAgOyB4bW00PXRtcDEwCisgICAgICAgIGFkZHBzICAgeG1tNSx4bW0zICAgICAgICAgICAgICAgOyB4bW01PXRtcDEzCiAKLQltdWxwcwl4bW0xLFtyZWwgUERfMV80MTRdCi0Jc3VicHMJeG1tMSx4bW01CQk7IHhtbTE9dG1wMTIKKyAgICAgICAgbXVscHMgICB4bW0xLFtyZWwgUERfMV80MTRdCisgICAgICAgIHN1YnBzICAgeG1tMSx4bW01ICAgICAgICAgICAgICAgOyB4bW0xPXRtcDEyCiAKLQltb3ZhcHMJeG1tNix4bW00Ci0JbW92YXBzCXhtbTcseG1tMAotCXN1YnBzCXhtbTQseG1tNQkJOyB4bW00PXRtcDMKLQlzdWJwcwl4bW0wLHhtbTEJCTsgeG1tMD10bXAyCi0JYWRkcHMJeG1tNix4bW01CQk7IHhtbTY9dG1wMAotCWFkZHBzCXhtbTcseG1tMQkJOyB4bW03PXRtcDEKKyAgICAgICAgbW92YXBzICB4bW02LHhtbTQKKyAgICAgICAgbW92YXBzICB4bW03LHhtbTAKKyAgICAgICAgc3VicHMgICB4bW00LHhtbTUgICAgICAgICAgICAgICA7IHhtbTQ9dG1wMworICAgICAgICBzdWJwcyAgIHhtbTAseG1tMSAgICAgICAgICAgICAgIDsgeG1tMD10bXAyCisgICAgICAgIGFkZHBzICAgeG1tNix4bW01ICAgICAgICAgICAgICAgOyB4bW02PXRtcDAKKyAgICAgICAgYWRkcHMgICB4bW03LHhtbTEgICAgICAgICAgICAgICA7IHhtbTc9dG1wMQogCi0JbW92YXBzCVhNTVdPUkQgW3drKDEpXSwgeG1tNAk7IHRtcDMKLQltb3ZhcHMJWE1NV09SRCBbd2soMCldLCB4bW0wCTsgdG1wMgorICAgICAgICBtb3ZhcHMgIFhNTVdPUkQgW3drKDEpXSwgeG1tNCAgIDsgdG1wMworICAgICAgICBtb3ZhcHMgIFhNTVdPUkQgW3drKDApXSwgeG1tMCAgIDsgdG1wMgogCi0JOyAtLSBPZGQgcGFydAorICAgICAgICA7IC0tIE9kZCBwYXJ0CiAKLQltb3ZhcHMJeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLHJzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCi0JbW92YXBzCXhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxyc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQotCW1vdmFwcwl4bW01LCBYTU1XT1JEIFtYTU1CTE9DSyg1LDAscnNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KLQltb3ZhcHMJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNywwLHJzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgICAgIG1vdmFwcyAgeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLHJzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgICAgIG1vdmFwcyAgeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soMywwLHJzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgICAgIG1vdmFwcyAgeG1tNSwgWE1NV09SRCBbWE1NQkxPQ0soNSwwLHJzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgICAgIG1vdmFwcyAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNywwLHJzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCiAKLQltb3ZhcHMJeG1tNCx4bW0yCi0JbW92YXBzCXhtbTAseG1tNQotCWFkZHBzCXhtbTIseG1tMQkJOyB4bW0yPXoxMQotCWFkZHBzCXhtbTUseG1tMwkJOyB4bW01PXoxMwotCXN1YnBzCXhtbTQseG1tMQkJOyB4bW00PXoxMgotCXN1YnBzCXhtbTAseG1tMwkJOyB4bW0wPXoxMAorICAgICAgICBtb3ZhcHMgIHhtbTQseG1tMgorICAgICAgICBtb3ZhcHMgIHhtbTAseG1tNQorICAgICAgICBhZGRwcyAgIHhtbTIseG1tMSAgICAgICAgICAgICAgIDsgeG1tMj16MTEKKyAgICAgICAgYWRkcHMgICB4bW01LHhtbTMgICAgICAgICAgICAgICA7IHhtbTU9ejEzCisgICAgICAgIHN1YnBzICAgeG1tNCx4bW0xICAgICAgICAgICAgICAgOyB4bW00PXoxMgorICAgICAgICBzdWJwcyAgIHhtbTAseG1tMyAgICAgICAgICAgICAgIDsgeG1tMD16MTAKIAotCW1vdmFwcwl4bW0xLHhtbTIKLQlzdWJwcwl4bW0yLHhtbTUKLQlhZGRwcwl4bW0xLHhtbTUJCTsgeG1tMT10bXA3CisgICAgICAgIG1vdmFwcyAgeG1tMSx4bW0yCisgICAgICAgIHN1YnBzICAgeG1tMix4bW01CisgICAgICAgIGFkZHBzICAgeG1tMSx4bW01ICAgICAgICAgICAgICAgOyB4bW0xPXRtcDcKIAotCW11bHBzCXhtbTIsW3JlbCBQRF8xXzQxNF0JOyB4bW0yPXRtcDExCisgICAgICAgIG11bHBzICAgeG1tMixbcmVsIFBEXzFfNDE0XSAgICAgOyB4bW0yPXRtcDExCiAKLQltb3ZhcHMJeG1tMyx4bW0wCi0JYWRkcHMJeG1tMCx4bW00Ci0JbXVscHMJeG1tMCxbcmVsIFBEXzFfODQ3XQk7IHhtbTA9ejUKLQltdWxwcwl4bW0zLFtyZWwgUERfTTJfNjEzXQk7IHhtbTM9KHoxMCAqIC0yLjYxMzEyNTkzMCkKLQltdWxwcwl4bW00LFtyZWwgUERfMV8wODJdCTsgeG1tND0oejEyICogMS4wODIzOTIyMDApCi0JYWRkcHMJeG1tMyx4bW0wCQk7IHhtbTM9dG1wMTIKLQlzdWJwcwl4bW00LHhtbTAJCTsgeG1tND10bXAxMAorICAgICAgICBtb3ZhcHMgIHhtbTMseG1tMAorICAgICAgICBhZGRwcyAgIHhtbTAseG1tNAorICAgICAgICBtdWxwcyAgIHhtbTAsW3JlbCBQRF8xXzg0N10gICAgIDsgeG1tMD16NQorICAgICAgICBtdWxwcyAgIHhtbTMsW3JlbCBQRF9NMl82MTNdICAgIDsgeG1tMz0oejEwICogLTIuNjEzMTI1OTMwKQorICAgICAgICBtdWxwcyAgIHhtbTQsW3JlbCBQRF8xXzA4Ml0gICAgIDsgeG1tND0oejEyICogMS4wODIzOTIyMDApCisgICAgICAgIGFkZHBzICAgeG1tMyx4bW0wICAgICAgICAgICAgICAgOyB4bW0zPXRtcDEyCisgICAgICAgIHN1YnBzICAgeG1tNCx4bW0wICAgICAgICAgICAgICAgOyB4bW00PXRtcDEwCiAKLQk7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQorICAgICAgICA7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQogCi0Jc3VicHMJeG1tMyx4bW0xCQk7IHhtbTM9dG1wNgotCW1vdmFwcwl4bW01LHhtbTYKLQltb3ZhcHMJeG1tMCx4bW03Ci0JYWRkcHMJeG1tNix4bW0xCQk7IHhtbTY9ZGF0YTA9KDAwIDEwIDIwIDMwKQotCWFkZHBzCXhtbTcseG1tMwkJOyB4bW03PWRhdGExPSgwMSAxMSAyMSAzMSkKLQlzdWJwcwl4bW01LHhtbTEJCTsgeG1tNT1kYXRhNz0oMDcgMTcgMjcgMzcpCi0Jc3VicHMJeG1tMCx4bW0zCQk7IHhtbTA9ZGF0YTY9KDA2IDE2IDI2IDM2KQotCXN1YnBzCXhtbTIseG1tMwkJOyB4bW0yPXRtcDUKKyAgICAgICAgc3VicHMgICB4bW0zLHhtbTEgICAgICAgICAgICAgICA7IHhtbTM9dG1wNgorICAgICAgICBtb3ZhcHMgIHhtbTUseG1tNgorICAgICAgICBtb3ZhcHMgIHhtbTAseG1tNworICAgICAgICBhZGRwcyAgIHhtbTYseG1tMSAgICAgICAgICAgICAgIDsgeG1tNj1kYXRhMD0oMDAgMTAgMjAgMzApCisgICAgICAgIGFkZHBzICAgeG1tNyx4bW0zICAgICAgICAgICAgICAgOyB4bW03PWRhdGExPSgwMSAxMSAyMSAzMSkKKyAgICAgICAgc3VicHMgICB4bW01LHhtbTEgICAgICAgICAgICAgICA7IHhtbTU9ZGF0YTc9KDA3IDE3IDI3IDM3KQorICAgICAgICBzdWJwcyAgIHhtbTAseG1tMyAgICAgICAgICAgICAgIDsgeG1tMD1kYXRhNj0oMDYgMTYgMjYgMzYpCisgICAgICAgIHN1YnBzICAgeG1tMix4bW0zICAgICAgICAgICAgICAgOyB4bW0yPXRtcDUKIAotCW1vdmFwcwl4bW0xLFtyZWwgUERfUk5ESU5UX01BR0lDXQk7IHhtbTE9W3JlbCBQRF9STkRJTlRfTUFHSUNdCi0JcGNtcGVxZAl4bW0zLHhtbTMKLQlwc3JsZAl4bW0zLFdPUkRfQklUCQk7IHhtbTM9ezB4RkZGRiAweDAwMDAgMHhGRkZGIDB4MDAwMCAuLn0KKyAgICAgICAgbW92YXBzICB4bW0xLFtyZWwgUERfUk5ESU5UX01BR0lDXSAgICAgIDsgeG1tMT1bcmVsIFBEX1JORElOVF9NQUdJQ10KKyAgICAgICAgcGNtcGVxZCB4bW0zLHhtbTMKKyAgICAgICAgcHNybGQgICB4bW0zLFdPUkRfQklUICAgICAgICAgICA7IHhtbTM9ezB4RkZGRiAweDAwMDAgMHhGRkZGIDB4MDAwMCAuLn0KIAotCWFkZHBzCXhtbTYseG1tMQk7IHhtbTY9cm91bmRpbnQoZGF0YTAvOCk9KDAwICoqIDEwICoqIDIwICoqIDMwICoqKQotCWFkZHBzCXhtbTcseG1tMQk7IHhtbTc9cm91bmRpbnQoZGF0YTEvOCk9KDAxICoqIDExICoqIDIxICoqIDMxICoqKQotCWFkZHBzCXhtbTAseG1tMQk7IHhtbTA9cm91bmRpbnQoZGF0YTYvOCk9KDA2ICoqIDE2ICoqIDI2ICoqIDM2ICoqKQotCWFkZHBzCXhtbTUseG1tMQk7IHhtbTU9cm91bmRpbnQoZGF0YTcvOCk9KDA3ICoqIDE3ICoqIDI3ICoqIDM3ICoqKQorICAgICAgICBhZGRwcyAgIHhtbTYseG1tMSAgICAgICA7IHhtbTY9cm91bmRpbnQoZGF0YTAvOCk9KDAwICoqIDEwICoqIDIwICoqIDMwICoqKQorICAgICAgICBhZGRwcyAgIHhtbTcseG1tMSAgICAgICA7IHhtbTc9cm91bmRpbnQoZGF0YTEvOCk9KDAxICoqIDExICoqIDIxICoqIDMxICoqKQorICAgICAgICBhZGRwcyAgIHhtbTAseG1tMSAgICAgICA7IHhtbTA9cm91bmRpbnQoZGF0YTYvOCk9KDA2ICoqIDE2ICoqIDI2ICoqIDM2ICoqKQorICAgICAgICBhZGRwcyAgIHhtbTUseG1tMSAgICAgICA7IHhtbTU9cm91bmRpbnQoZGF0YTcvOCk9KDA3ICoqIDE3ICoqIDI3ICoqIDM3ICoqKQogCi0JcGFuZAl4bW02LHhtbTMJCTsgeG1tNj0oMDAgLS0gMTAgLS0gMjAgLS0gMzAgLS0pCi0JcHNsbGQJeG1tNyxXT1JEX0JJVAkJOyB4bW03PSgtLSAwMSAtLSAxMSAtLSAyMSAtLSAzMSkKLQlwYW5kCXhtbTAseG1tMwkJOyB4bW0wPSgwNiAtLSAxNiAtLSAyNiAtLSAzNiAtLSkKLQlwc2xsZAl4bW01LFdPUkRfQklUCQk7IHhtbTU9KC0tIDA3IC0tIDE3IC0tIDI3IC0tIDM3KQotCXBvcgl4bW02LHhtbTcJCTsgeG1tNj0oMDAgMDEgMTAgMTEgMjAgMjEgMzAgMzEpCi0JcG9yCXhtbTAseG1tNQkJOyB4bW0wPSgwNiAwNyAxNiAxNyAyNiAyNyAzNiAzNykKKyAgICAgICAgcGFuZCAgICB4bW02LHhtbTMgICAgICAgICAgICAgICA7IHhtbTY9KDAwIC0tIDEwIC0tIDIwIC0tIDMwIC0tKQorICAgICAgICBwc2xsZCAgIHhtbTcsV09SRF9CSVQgICAgICAgICAgIDsgeG1tNz0oLS0gMDEgLS0gMTEgLS0gMjEgLS0gMzEpCisgICAgICAgIHBhbmQgICAgeG1tMCx4bW0zICAgICAgICAgICAgICAgOyB4bW0wPSgwNiAtLSAxNiAtLSAyNiAtLSAzNiAtLSkKKyAgICAgICAgcHNsbGQgICB4bW01LFdPUkRfQklUICAgICAgICAgICA7IHhtbTU9KC0tIDA3IC0tIDE3IC0tIDI3IC0tIDM3KQorICAgICAgICBwb3IgICAgIHhtbTYseG1tNyAgICAgICAgICAgICAgIDsgeG1tNj0oMDAgMDEgMTAgMTEgMjAgMjEgMzAgMzEpCisgICAgICAgIHBvciAgICAgeG1tMCx4bW01ICAgICAgICAgICAgICAgOyB4bW0wPSgwNiAwNyAxNiAxNyAyNiAyNyAzNiAzNykKIAotCW1vdmFwcwl4bW0xLCBYTU1XT1JEIFt3aygwKV0JOyB4bW0xPXRtcDIKLQltb3ZhcHMJeG1tMywgWE1NV09SRCBbd2soMSldCTsgeG1tMz10bXAzCisgICAgICAgIG1vdmFwcyAgeG1tMSwgWE1NV09SRCBbd2soMCldICAgOyB4bW0xPXRtcDIKKyAgICAgICAgbW92YXBzICB4bW0zLCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTM9dG1wMwogCi0JYWRkcHMJeG1tNCx4bW0yCQk7IHhtbTQ9dG1wNAotCW1vdmFwcwl4bW03LHhtbTEKLQltb3ZhcHMJeG1tNSx4bW0zCi0JYWRkcHMJeG1tMSx4bW0yCQk7IHhtbTE9ZGF0YTI9KDAyIDEyIDIyIDMyKQotCWFkZHBzCXhtbTMseG1tNAkJOyB4bW0zPWRhdGE0PSgwNCAxNCAyNCAzNCkKLQlzdWJwcwl4bW03LHhtbTIJCTsgeG1tNz1kYXRhNT0oMDUgMTUgMjUgMzUpCi0Jc3VicHMJeG1tNSx4bW00CQk7IHhtbTU9ZGF0YTM9KDAzIDEzIDIzIDMzKQorICAgICAgICBhZGRwcyAgIHhtbTQseG1tMiAgICAgICAgICAgICAgIDsgeG1tND10bXA0CisgICAgICAgIG1vdmFwcyAgeG1tNyx4bW0xCisgICAgICAgIG1vdmFwcyAgeG1tNSx4bW0zCisgICAgICAgIGFkZHBzICAgeG1tMSx4bW0yICAgICAgICAgICAgICAgOyB4bW0xPWRhdGEyPSgwMiAxMiAyMiAzMikKKyAgICAgICAgYWRkcHMgICB4bW0zLHhtbTQgICAgICAgICAgICAgICA7IHhtbTM9ZGF0YTQ9KDA0IDE0IDI0IDM0KQorICAgICAgICBzdWJwcyAgIHhtbTcseG1tMiAgICAgICAgICAgICAgIDsgeG1tNz1kYXRhNT0oMDUgMTUgMjUgMzUpCisgICAgICAgIHN1YnBzICAgeG1tNSx4bW00ICAgICAgICAgICAgICAgOyB4bW01PWRhdGEzPSgwMyAxMyAyMyAzMykKIAotCW1vdmFwcwl4bW0yLFtyZWwgUERfUk5ESU5UX01BR0lDXQk7IHhtbTI9W3JlbCBQRF9STkRJTlRfTUFHSUNdCi0JcGNtcGVxZAl4bW00LHhtbTQKLQlwc3JsZAl4bW00LFdPUkRfQklUCQk7IHhtbTQ9ezB4RkZGRiAweDAwMDAgMHhGRkZGIDB4MDAwMCAuLn0KKyAgICAgICAgbW92YXBzICB4bW0yLFtyZWwgUERfUk5ESU5UX01BR0lDXSAgICAgIDsgeG1tMj1bcmVsIFBEX1JORElOVF9NQUdJQ10KKyAgICAgICAgcGNtcGVxZCB4bW00LHhtbTQKKyAgICAgICAgcHNybGQgICB4bW00LFdPUkRfQklUICAgICAgICAgICA7IHhtbTQ9ezB4RkZGRiAweDAwMDAgMHhGRkZGIDB4MDAwMCAuLn0KIAotCWFkZHBzCXhtbTMseG1tMgk7IHhtbTM9cm91bmRpbnQoZGF0YTQvOCk9KDA0ICoqIDE0ICoqIDI0ICoqIDM0ICoqKQotCWFkZHBzCXhtbTcseG1tMgk7IHhtbTc9cm91bmRpbnQoZGF0YTUvOCk9KDA1ICoqIDE1ICoqIDI1ICoqIDM1ICoqKQotCWFkZHBzCXhtbTEseG1tMgk7IHhtbTE9cm91bmRpbnQoZGF0YTIvOCk9KDAyICoqIDEyICoqIDIyICoqIDMyICoqKQotCWFkZHBzCXhtbTUseG1tMgk7IHhtbTU9cm91bmRpbnQoZGF0YTMvOCk9KDAzICoqIDEzICoqIDIzICoqIDMzICoqKQorICAgICAgICBhZGRwcyAgIHhtbTMseG1tMiAgICAgICA7IHhtbTM9cm91bmRpbnQoZGF0YTQvOCk9KDA0ICoqIDE0ICoqIDI0ICoqIDM0ICoqKQorICAgICAgICBhZGRwcyAgIHhtbTcseG1tMiAgICAgICA7IHhtbTc9cm91bmRpbnQoZGF0YTUvOCk9KDA1ICoqIDE1ICoqIDI1ICoqIDM1ICoqKQorICAgICAgICBhZGRwcyAgIHhtbTEseG1tMiAgICAgICA7IHhtbTE9cm91bmRpbnQoZGF0YTIvOCk9KDAyICoqIDEyICoqIDIyICoqIDMyICoqKQorICAgICAgICBhZGRwcyAgIHhtbTUseG1tMiAgICAgICA7IHhtbTU9cm91bmRpbnQoZGF0YTMvOCk9KDAzICoqIDEzICoqIDIzICoqIDMzICoqKQogCi0JcGFuZAl4bW0zLHhtbTQJCTsgeG1tMz0oMDQgLS0gMTQgLS0gMjQgLS0gMzQgLS0pCi0JcHNsbGQJeG1tNyxXT1JEX0JJVAkJOyB4bW03PSgtLSAwNSAtLSAxNSAtLSAyNSAtLSAzNSkKLQlwYW5kCXhtbTEseG1tNAkJOyB4bW0xPSgwMiAtLSAxMiAtLSAyMiAtLSAzMiAtLSkKLQlwc2xsZAl4bW01LFdPUkRfQklUCQk7IHhtbTU9KC0tIDAzIC0tIDEzIC0tIDIzIC0tIDMzKQotCXBvcgl4bW0zLHhtbTcJCTsgeG1tMz0oMDQgMDUgMTQgMTUgMjQgMjUgMzQgMzUpCi0JcG9yCXhtbTEseG1tNQkJOyB4bW0xPSgwMiAwMyAxMiAxMyAyMiAyMyAzMiAzMykKKyAgICAgICAgcGFuZCAgICB4bW0zLHhtbTQgICAgICAgICAgICAgICA7IHhtbTM9KDA0IC0tIDE0IC0tIDI0IC0tIDM0IC0tKQorICAgICAgICBwc2xsZCAgIHhtbTcsV09SRF9CSVQgICAgICAgICAgIDsgeG1tNz0oLS0gMDUgLS0gMTUgLS0gMjUgLS0gMzUpCisgICAgICAgIHBhbmQgICAgeG1tMSx4bW00ICAgICAgICAgICAgICAgOyB4bW0xPSgwMiAtLSAxMiAtLSAyMiAtLSAzMiAtLSkKKyAgICAgICAgcHNsbGQgICB4bW01LFdPUkRfQklUICAgICAgICAgICA7IHhtbTU9KC0tIDAzIC0tIDEzIC0tIDIzIC0tIDMzKQorICAgICAgICBwb3IgICAgIHhtbTMseG1tNyAgICAgICAgICAgICAgIDsgeG1tMz0oMDQgMDUgMTQgMTUgMjQgMjUgMzQgMzUpCisgICAgICAgIHBvciAgICAgeG1tMSx4bW01ICAgICAgICAgICAgICAgOyB4bW0xPSgwMiAwMyAxMiAxMyAyMiAyMyAzMiAzMykKIAotCW1vdmRxYSAgICB4bW0yLFtyZWwgUEJfQ0VOVEVSSlNBTVBdCTsgeG1tMj1bcmVsIFBCX0NFTlRFUkpTQU1QXQorICAgICAgICBtb3ZkcWEgICAgeG1tMixbcmVsIFBCX0NFTlRFUkpTQU1QXSAgICAgOyB4bW0yPVtyZWwgUEJfQ0VOVEVSSlNBTVBdCiAKLQlwYWNrc3N3YiAgeG1tNix4bW0zCTsgeG1tNj0oMDAgMDEgMTAgMTEgMjAgMjEgMzAgMzEgMDQgMDUgMTQgMTUgMjQgMjUgMzQgMzUpCi0JcGFja3Nzd2IgIHhtbTEseG1tMAk7IHhtbTE9KDAyIDAzIDEyIDEzIDIyIDIzIDMyIDMzIDA2IDA3IDE2IDE3IDI2IDI3IDM2IDM3KQotCXBhZGRiICAgICB4bW02LHhtbTIKLQlwYWRkYiAgICAgeG1tMSx4bW0yCisgICAgICAgIHBhY2tzc3diICB4bW02LHhtbTMgICAgIDsgeG1tNj0oMDAgMDEgMTAgMTEgMjAgMjEgMzAgMzEgMDQgMDUgMTQgMTUgMjQgMjUgMzQgMzUpCisgICAgICAgIHBhY2tzc3diICB4bW0xLHhtbTAgICAgIDsgeG1tMT0oMDIgMDMgMTIgMTMgMjIgMjMgMzIgMzMgMDYgMDcgMTYgMTcgMjYgMjcgMzYgMzcpCisgICAgICAgIHBhZGRiICAgICB4bW02LHhtbTIKKyAgICAgICAgcGFkZGIgICAgIHhtbTEseG1tMgogCi0JbW92ZHFhICAgIHhtbTQseG1tNgk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKLQlwdW5wY2tsd2QgeG1tNix4bW0xCTsgeG1tNj0oMDAgMDEgMDIgMDMgMTAgMTEgMTIgMTMgMjAgMjEgMjIgMjMgMzAgMzEgMzIgMzMpCi0JcHVucGNraHdkIHhtbTQseG1tMQk7IHhtbTQ9KDA0IDA1IDA2IDA3IDE0IDE1IDE2IDE3IDI0IDI1IDI2IDI3IDM0IDM1IDM2IDM3KQorICAgICAgICBtb3ZkcWEgICAgeG1tNCx4bW02ICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICAgICAgcHVucGNrbHdkIHhtbTYseG1tMSAgICAgOyB4bW02PSgwMCAwMSAwMiAwMyAxMCAxMSAxMiAxMyAyMCAyMSAyMiAyMyAzMCAzMSAzMiAzMykKKyAgICAgICAgcHVucGNraHdkIHhtbTQseG1tMSAgICAgOyB4bW00PSgwNCAwNSAwNiAwNyAxNCAxNSAxNiAxNyAyNCAyNSAyNiAyNyAzNCAzNSAzNiAzNykKIAotCW1vdmRxYSAgICB4bW03LHhtbTYJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCi0JcHVucGNrbGRxIHhtbTYseG1tNAk7IHhtbTY9KDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3IDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3KQotCXB1bnBja2hkcSB4bW03LHhtbTQJOyB4bW03PSgyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNyAzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNykKKyAgICAgICAgbW92ZHFhICAgIHhtbTcseG1tNiAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisgICAgICAgIHB1bnBja2xkcSB4bW02LHhtbTQgICAgIDsgeG1tNj0oMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcgMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcpCisgICAgICAgIHB1bnBja2hkcSB4bW03LHhtbTQgICAgIDsgeG1tNz0oMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcgMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcpCiAKLQlwc2h1ZmQJeG1tNSx4bW02LDB4NEUJOyB4bW01PSgxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNyAwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNykKLQlwc2h1ZmQJeG1tMyx4bW03LDB4NEUJOyB4bW0zPSgzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNyAyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNykKKyAgICAgICAgcHNodWZkICB4bW01LHhtbTYsMHg0RSAgOyB4bW01PSgxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNyAwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNykKKyAgICAgICAgcHNodWZkICB4bW0zLHhtbTcsMHg0RSAgOyB4bW0zPSgzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNyAyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNykKIAotCW1vdglyZHgsIEpTQU1QUk9XIFtyZGkrMCpTSVpFT0ZfSlNBTVBST1ddCi0JbW92CXJieCwgSlNBTVBST1cgW3JkaSsyKlNJWkVPRl9KU0FNUFJPV10KLQltb3ZxCVhNTV9NTVdPUkQgW3JkeCtyYXgqU0laRU9GX0pTQU1QTEVdLCB4bW02Ci0JbW92cQlYTU1fTU1XT1JEIFtyYngrcmF4KlNJWkVPRl9KU0FNUExFXSwgeG1tNwotCW1vdglyZHgsIEpTQU1QUk9XIFtyZGkrMSpTSVpFT0ZfSlNBTVBST1ddCi0JbW92CXJieCwgSlNBTVBST1cgW3JkaSszKlNJWkVPRl9KU0FNUFJPV10KLQltb3ZxCVhNTV9NTVdPUkQgW3JkeCtyYXgqU0laRU9GX0pTQU1QTEVdLCB4bW01Ci0JbW92cQlYTU1fTU1XT1JEIFtyYngrcmF4KlNJWkVPRl9KU0FNUExFXSwgeG1tMworICAgICAgICBtb3YgICAgIHJkeCwgSlNBTVBST1cgW3JkaSswKlNJWkVPRl9KU0FNUFJPV10KKyAgICAgICAgbW92ICAgICByYngsIEpTQU1QUk9XIFtyZGkrMipTSVpFT0ZfSlNBTVBST1ddCisgICAgICAgIG1vdnEgICAgWE1NX01NV09SRCBbcmR4K3JheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTYKKyAgICAgICAgbW92cSAgICBYTU1fTU1XT1JEIFtyYngrcmF4KlNJWkVPRl9KU0FNUExFXSwgeG1tNworICAgICAgICBtb3YgICAgIHJkeCwgSlNBTVBST1cgW3JkaSsxKlNJWkVPRl9KU0FNUFJPV10KKyAgICAgICAgbW92ICAgICByYngsIEpTQU1QUk9XIFtyZGkrMypTSVpFT0ZfSlNBTVBST1ddCisgICAgICAgIG1vdnEgICAgWE1NX01NV09SRCBbcmR4K3JheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTUKKyAgICAgICAgbW92cSAgICBYTU1fTU1XT1JEIFtyYngrcmF4KlNJWkVPRl9KU0FNUExFXSwgeG1tMwogCi0JYWRkCXJzaSwgYnl0ZSA0KlNJWkVPRl9GQVNUX0ZMT0FUCTsgd3NwdHIKLQlhZGQJcmRpLCBieXRlIDQqU0laRU9GX0pTQU1QUk9XCi0JZGVjCXJjeAkJCQk7IGN0cgotCWpuegluZWFyIC5yb3dsb29wCisgICAgICAgIGFkZCAgICAgcnNpLCBieXRlIDQqU0laRU9GX0ZBU1RfRkxPQVQgICA7IHdzcHRyCisgICAgICAgIGFkZCAgICAgcmRpLCBieXRlIDQqU0laRU9GX0pTQU1QUk9XCisgICAgICAgIGRlYyAgICAgcmN4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IGN0cgorICAgICAgICBqbnogICAgIG5lYXIgLnJvd2xvb3AKIAotCXBvcAlyYngKLQl1bmNvbGxlY3RfYXJncwotCW1vdglyc3AscmJwCQk7IHJzcCA8LSBhbGlnbmVkIHJicAotCXBvcAlyc3AJCTsgcnNwIDwtIG9yaWdpbmFsIHJicAotCXBvcAlyYnAKLQlyZXQKKyAgICAgICAgcG9wICAgICByYngKKyAgICAgICAgdW5jb2xsZWN0X2FyZ3MKKyAgICAgICAgbW92ICAgICByc3AscmJwICAgICAgICAgOyByc3AgPC0gYWxpZ25lZCByYnAKKyAgICAgICAgcG9wICAgICByc3AgICAgICAgICAgICAgOyByc3AgPC0gb3JpZ2luYWwgcmJwCisgICAgICAgIHBvcCAgICAgcmJwCisgICAgICAgIHJldAogCiA7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQogOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgotCWFsaWduCTE2CisgICAgICAgIGFsaWduICAgMTYKZGlmZiAtLWdpdCBhL3NpbWQvamlzczJmbHQuYXNtIGIvc2ltZC9qaXNzMmZsdC5hc20KaW5kZXggMTdiYzM2My4uODZjOTA1NiAxMDA2NDQKLS0tIGEvc2ltZC9qaXNzMmZsdC5hc20KKysrIGIvc2ltZC9qaXNzMmZsdC5hc20KQEAgLTI1LDM0ICsyNSwzNCBAQAogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSVtYWNybwl1bnBja2xwczIgMgk7ICUxPSgwIDEgMiAzKSAvICUyPSg0IDUgNiA3KSA9PiAlMT0oMCAxIDQgNSkKLQlzaHVmcHMJJTEsJTIsMHg0NAorJW1hY3JvICB1bnBja2xwczIgMiAgICAgOyAlMT0oMCAxIDIgMykgLyAlMj0oNCA1IDYgNykgPT4gJTE9KDAgMSA0IDUpCisgICAgICAgIHNodWZwcyAgJTEsJTIsMHg0NAogJWVuZG1hY3JvCiAKLSVtYWNybwl1bnBja2hwczIgMgk7ICUxPSgwIDEgMiAzKSAvICUyPSg0IDUgNiA3KSA9PiAlMT0oMiAzIDYgNykKLQlzaHVmcHMJJTEsJTIsMHhFRQorJW1hY3JvICB1bnBja2hwczIgMiAgICAgOyAlMT0oMCAxIDIgMykgLyAlMj0oNCA1IDYgNykgPT4gJTE9KDIgMyA2IDcpCisgICAgICAgIHNodWZwcyAgJTEsJTIsMHhFRQogJWVuZG1hY3JvCiAKIDsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlTRUNUSU9OCVNFR19DT05TVAorICAgICAgICBTRUNUSU9OIFNFR19DT05TVAogCi0JYWxpZ256CTE2Ci0JZ2xvYmFsCUVYVE4oamNvbnN0X2lkY3RfZmxvYXRfc3NlMikKKyAgICAgICAgYWxpZ256ICAxNgorICAgICAgICBnbG9iYWwgIEVYVE4oamNvbnN0X2lkY3RfZmxvYXRfc3NlMikKIAogRVhUTihqY29uc3RfaWRjdF9mbG9hdF9zc2UyKToKIAotUERfMV80MTQJdGltZXMgNCBkZCAgMS40MTQyMTM1NjIzNzMwOTUwNDg4MDE2ODkKLVBEXzFfODQ3CXRpbWVzIDQgZGQgIDEuODQ3NzU5MDY1MDIyNTczNTEyMjU2MzY2Ci1QRF8xXzA4Mgl0aW1lcyA0IGRkICAxLjA4MjM5MjIwMDI5MjM5Mzk2ODc5OTQ0NgotUERfTTJfNjEzCXRpbWVzIDQgZGQgLTIuNjEzMTI1OTI5NzUyNzUzMDU1NzEzMjg2Ci1QRF9STkRJTlRfTUFHSUMJdGltZXMgNCBkZCAgMTAwNjYzMjk2LjAJOyAoZmxvYXQpKDB4MDBDMDAwMDAgPDwgMykKLVBCX0NFTlRFUkpTQU1QCXRpbWVzIDE2IGRiIENFTlRFUkpTQU1QTEUKK1BEXzFfNDE0ICAgICAgICB0aW1lcyA0IGRkICAxLjQxNDIxMzU2MjM3MzA5NTA0ODgwMTY4OQorUERfMV84NDcgICAgICAgIHRpbWVzIDQgZGQgIDEuODQ3NzU5MDY1MDIyNTczNTEyMjU2MzY2CitQRF8xXzA4MiAgICAgICAgdGltZXMgNCBkZCAgMS4wODIzOTIyMDAyOTIzOTM5Njg3OTk0NDYKK1BEX00yXzYxMyAgICAgICB0aW1lcyA0IGRkIC0yLjYxMzEyNTkyOTc1Mjc1MzA1NTcxMzI4NgorUERfUk5ESU5UX01BR0lDIHRpbWVzIDQgZGQgIDEwMDY2MzI5Ni4wIDsgKGZsb2F0KSgweDAwQzAwMDAwIDw8IDMpCitQQl9DRU5URVJKU0FNUCAgdGltZXMgMTYgZGIgQ0VOVEVSSlNBTVBMRQogCi0JYWxpZ256CTE2CisgICAgICAgIGFsaWdueiAgMTYKIAogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCVNFQ1RJT04JU0VHX1RFWFQKLQlCSVRTCTMyCisgICAgICAgIFNFQ1RJT04gU0VHX1RFWFQKKyAgICAgICAgQklUUyAgICAzMgogOwogOyBQZXJmb3JtIGRlcXVhbnRpemF0aW9uIGFuZCBpbnZlcnNlIERDVCBvbiBvbmUgYmxvY2sgb2YgY29lZmZpY2llbnRzLgogOwpAQCAtNjEsNDM4ICs2MSw0MzggQEAKIDsgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKIDsKIAotJWRlZmluZSBkY3RfdGFibGUoYikJKGIpKzgJCQk7IHZvaWQgKiBkY3RfdGFibGUKLSVkZWZpbmUgY29lZl9ibG9jayhiKQkoYikrMTIJCTsgSkNPRUZQVFIgY29lZl9ibG9jawotJWRlZmluZSBvdXRwdXRfYnVmKGIpCShiKSsxNgkJOyBKU0FNUEFSUkFZIG91dHB1dF9idWYKLSVkZWZpbmUgb3V0cHV0X2NvbChiKQkoYikrMjAJCTsgSkRJTUVOU0lPTiBvdXRwdXRfY29sCislZGVmaW5lIGRjdF90YWJsZShiKSAgICAoYikrOCAgICAgICAgICAgOyB2b2lkICogZGN0X3RhYmxlCislZGVmaW5lIGNvZWZfYmxvY2soYikgICAoYikrMTIgICAgICAgICAgOyBKQ09FRlBUUiBjb2VmX2Jsb2NrCislZGVmaW5lIG91dHB1dF9idWYoYikgICAoYikrMTYgICAgICAgICAgOyBKU0FNUEFSUkFZIG91dHB1dF9idWYKKyVkZWZpbmUgb3V0cHV0X2NvbChiKSAgIChiKSsyMCAgICAgICAgICA7IEpESU1FTlNJT04gb3V0cHV0X2NvbAogCi0lZGVmaW5lIG9yaWdpbmFsX2VicAllYnArMAotJWRlZmluZSB3ayhpKQkJZWJwLShXS19OVU0tKGkpKSpTSVpFT0ZfWE1NV09SRAk7IHhtbXdvcmQgd2tbV0tfTlVNXQotJWRlZmluZSBXS19OVU0JCTIKLSVkZWZpbmUgd29ya3NwYWNlCXdrKDApLURDVFNJWkUyKlNJWkVPRl9GQVNUX0ZMT0FUCi0JCQkJCTsgRkFTVF9GTE9BVCB3b3Jrc3BhY2VbRENUU0laRTJdCislZGVmaW5lIG9yaWdpbmFsX2VicCAgICBlYnArMAorJWRlZmluZSB3ayhpKSAgICAgICAgICAgZWJwLShXS19OVU0tKGkpKSpTSVpFT0ZfWE1NV09SRCA7IHhtbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0gICAgICAgICAgMgorJWRlZmluZSB3b3Jrc3BhY2UgICAgICAgd2soMCktRENUU0laRTIqU0laRU9GX0ZBU1RfRkxPQVQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IEZBU1RfRkxPQVQgd29ya3NwYWNlW0RDVFNJWkUyXQogCi0JYWxpZ24JMTYKLQlnbG9iYWwJRVhUTihqc2ltZF9pZGN0X2Zsb2F0X3NzZTIpCisgICAgICAgIGFsaWduICAgMTYKKyAgICAgICAgZ2xvYmFsICBFWFROKGpzaW1kX2lkY3RfZmxvYXRfc3NlMikKIAogRVhUTihqc2ltZF9pZGN0X2Zsb2F0X3NzZTIpOgotCXB1c2gJZWJwCi0JbW92CWVheCxlc3AJCQkJOyBlYXggPSBvcmlnaW5hbCBlYnAKLQlzdWIJZXNwLCBieXRlIDQKLQlhbmQJZXNwLCBieXRlICgtU0laRU9GX1hNTVdPUkQpCTsgYWxpZ24gdG8gMTI4IGJpdHMKLQltb3YJW2VzcF0sZWF4Ci0JbW92CWVicCxlc3AJCQkJOyBlYnAgPSBhbGlnbmVkIGVicAotCWxlYQllc3AsIFt3b3Jrc3BhY2VdCi0JcHVzaAllYngKLTsJcHVzaAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi07CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotCXB1c2gJZXNpCi0JcHVzaAllZGkKKyAgICAgICAgcHVzaCAgICBlYnAKKyAgICAgICAgbW92ICAgICBlYXgsZXNwICAgICAgICAgICAgICAgICAgICAgICAgIDsgZWF4ID0gb3JpZ2luYWwgZWJwCisgICAgICAgIHN1YiAgICAgZXNwLCBieXRlIDQKKyAgICAgICAgYW5kICAgICBlc3AsIGJ5dGUgKC1TSVpFT0ZfWE1NV09SRCkgICAgIDsgYWxpZ24gdG8gMTI4IGJpdHMKKyAgICAgICAgbW92ICAgICBbZXNwXSxlYXgKKyAgICAgICAgbW92ICAgICBlYnAsZXNwICAgICAgICAgICAgICAgICAgICAgICAgIDsgZWJwID0gYWxpZ25lZCBlYnAKKyAgICAgICAgbGVhICAgICBlc3AsIFt3b3Jrc3BhY2VdCisgICAgICAgIHB1c2ggICAgZWJ4Cis7ICAgICAgIHB1c2ggICAgZWN4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgICAgIHB1c2ggICAgZWR4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgICAgIHB1c2ggICAgZXNpCisgICAgICAgIHB1c2ggICAgZWRpCiAKLQlnZXRfR09UCWVieAkJOyBnZXQgR09UIGFkZHJlc3MKKyAgICAgICAgZ2V0X0dPVCBlYnggICAgICAgICAgICAgOyBnZXQgR09UIGFkZHJlc3MKIAotCTsgLS0tLSBQYXNzIDE6IHByb2Nlc3MgY29sdW1ucyBmcm9tIGlucHV0LCBzdG9yZSBpbnRvIHdvcmsgYXJyYXkuCisgICAgICAgIDsgLS0tLSBQYXNzIDE6IHByb2Nlc3MgY29sdW1ucyBmcm9tIGlucHV0LCBzdG9yZSBpbnRvIHdvcmsgYXJyYXkuCiAKLTsJbW92CWVheCwgW29yaWdpbmFsX2VicF0KLQltb3YJZWR4LCBQT0lOVEVSIFtkY3RfdGFibGUoZWF4KV0JOyBxdWFudHB0cgotCW1vdgllc2ksIEpDT0VGUFRSIFtjb2VmX2Jsb2NrKGVheCldCQk7IGlucHRyCi0JbGVhCWVkaSwgW3dvcmtzcGFjZV0JCQk7IEZBU1RfRkxPQVQgKiB3c3B0cgotCW1vdgllY3gsIERDVFNJWkUvNAkJCQk7IGN0cgotCWFsaWdueAkxNiw3Cis7ICAgICAgIG1vdiAgICAgZWF4LCBbb3JpZ2luYWxfZWJwXQorICAgICAgICBtb3YgICAgIGVkeCwgUE9JTlRFUiBbZGN0X3RhYmxlKGVheCldICAgICAgICAgICA7IHF1YW50cHRyCisgICAgICAgIG1vdiAgICAgZXNpLCBKQ09FRlBUUiBbY29lZl9ibG9jayhlYXgpXSAgICAgICAgIDsgaW5wdHIKKyAgICAgICAgbGVhICAgICBlZGksIFt3b3Jrc3BhY2VdICAgICAgICAgICAgICAgICAgICAgICAgOyBGQVNUX0ZMT0FUICogd3NwdHIKKyAgICAgICAgbW92ICAgICBlY3gsIERDVFNJWkUvNCAgICAgICAgICAgICAgICAgICAgICAgICAgOyBjdHIKKyAgICAgICAgYWxpZ254ICAxNiw3CiAuY29sdW1ubG9vcDoKICVpZm5kZWYgTk9fWkVST19DT0xVTU5fVEVTVF9GTE9BVF9TU0UKLQltb3YJZWF4LCBEV09SRCBbRFdCTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCi0Jb3IJZWF4LCBEV09SRCBbRFdCTE9DSygyLDAsZXNpLFNJWkVPRl9KQ09FRildCi0Jam56CW5lYXIgLmNvbHVtbkRDVAorICAgICAgICBtb3YgICAgIGVheCwgRFdPUkQgW0RXQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBvciAgICAgIGVheCwgRFdPUkQgW0RXQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBqbnogICAgIG5lYXIgLmNvbHVtbkRDVAogCi0JbW92cQl4bW0xLCBYTU1fTU1XT1JEIFtNTUJMT0NLKDEsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQltb3ZxCXhtbTIsIFhNTV9NTVdPUkQgW01NQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQotCW1vdnEJeG1tMywgWE1NX01NV09SRCBbTU1CTE9DSygzLDAsZXNpLFNJWkVPRl9KQ09FRildCi0JbW92cQl4bW00LCBYTU1fTU1XT1JEIFtNTUJMT0NLKDQsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQltb3ZxCXhtbTUsIFhNTV9NTVdPUkQgW01NQkxPQ0soNSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQotCW1vdnEJeG1tNiwgWE1NX01NV09SRCBbTU1CTE9DSyg2LDAsZXNpLFNJWkVPRl9KQ09FRildCi0JbW92cQl4bW03LCBYTU1fTU1XT1JEIFtNTUJMT0NLKDcsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQlwb3IJeG1tMSx4bW0yCi0JcG9yCXhtbTMseG1tNAotCXBvcgl4bW01LHhtbTYKLQlwb3IJeG1tMSx4bW0zCi0JcG9yCXhtbTUseG1tNwotCXBvcgl4bW0xLHhtbTUKLQlwYWNrc3N3YiB4bW0xLHhtbTEKLQltb3ZkCWVheCx4bW0xCi0JdGVzdAllYXgsZWF4Ci0Jam56CXNob3J0IC5jb2x1bW5EQ1QKKyAgICAgICAgbW92cSAgICB4bW0xLCBYTU1fTU1XT1JEIFtNTUJMT0NLKDEsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgbW92cSAgICB4bW0yLCBYTU1fTU1XT1JEIFtNTUJMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgbW92cSAgICB4bW0zLCBYTU1fTU1XT1JEIFtNTUJMT0NLKDMsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgbW92cSAgICB4bW00LCBYTU1fTU1XT1JEIFtNTUJMT0NLKDQsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgbW92cSAgICB4bW01LCBYTU1fTU1XT1JEIFtNTUJMT0NLKDUsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgbW92cSAgICB4bW02LCBYTU1fTU1XT1JEIFtNTUJMT0NLKDYsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgbW92cSAgICB4bW03LCBYTU1fTU1XT1JEIFtNTUJMT0NLKDcsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgcG9yICAgICB4bW0xLHhtbTIKKyAgICAgICAgcG9yICAgICB4bW0zLHhtbTQKKyAgICAgICAgcG9yICAgICB4bW01LHhtbTYKKyAgICAgICAgcG9yICAgICB4bW0xLHhtbTMKKyAgICAgICAgcG9yICAgICB4bW01LHhtbTcKKyAgICAgICAgcG9yICAgICB4bW0xLHhtbTUKKyAgICAgICAgcGFja3Nzd2IgeG1tMSx4bW0xCisgICAgICAgIG1vdmQgICAgZWF4LHhtbTEKKyAgICAgICAgdGVzdCAgICBlYXgsZWF4CisgICAgICAgIGpueiAgICAgc2hvcnQgLmNvbHVtbkRDVAogCi0JOyAtLSBBQyB0ZXJtcyBhbGwgemVybworICAgICAgICA7IC0tIEFDIHRlcm1zIGFsbCB6ZXJvCiAKLQltb3ZxICAgICAgeG1tMCwgWE1NX01NV09SRCBbTU1CTE9DSygwLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdnEgICAgICB4bW0wLCBYTU1fTU1XT1JEIFtNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0pDT0VGKV0KIAotCXB1bnBja2x3ZCB4bW0wLHhtbTAJCTsgeG1tMD0oMDAgMDAgMDEgMDEgMDIgMDIgMDMgMDMpCi0JcHNyYWQgICAgIHhtbTAsKERXT1JEX0JJVC1XT1JEX0JJVCkJOyB4bW0wPWluMD0oMDAgMDEgMDIgMDMpCi0JY3Z0ZHEycHMgIHhtbTAseG1tMAkJCTsgeG1tMD1pbjA9KDAwIDAxIDAyIDAzKQorICAgICAgICBwdW5wY2tsd2QgeG1tMCx4bW0wICAgICAgICAgICAgIDsgeG1tMD0oMDAgMDAgMDEgMDEgMDIgMDIgMDMgMDMpCisgICAgICAgIHBzcmFkICAgICB4bW0wLChEV09SRF9CSVQtV09SRF9CSVQpICAgICA7IHhtbTA9aW4wPSgwMCAwMSAwMiAwMykKKyAgICAgICAgY3Z0ZHEycHMgIHhtbTAseG1tMCAgICAgICAgICAgICAgICAgICAgIDsgeG1tMD1pbjA9KDAwIDAxIDAyIDAzKQogCi0JbXVscHMJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KKyAgICAgICAgbXVscHMgICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQogCi0JbW92YXBzCXhtbTEseG1tMAotCW1vdmFwcwl4bW0yLHhtbTAKLQltb3ZhcHMJeG1tMyx4bW0wCisgICAgICAgIG1vdmFwcyAgeG1tMSx4bW0wCisgICAgICAgIG1vdmFwcyAgeG1tMix4bW0wCisgICAgICAgIG1vdmFwcyAgeG1tMyx4bW0wCiAKLQlzaHVmcHMJeG1tMCx4bW0wLDB4MDAJCQk7IHhtbTA9KDAwIDAwIDAwIDAwKQotCXNodWZwcwl4bW0xLHhtbTEsMHg1NQkJCTsgeG1tMT0oMDEgMDEgMDEgMDEpCi0Jc2h1ZnBzCXhtbTIseG1tMiwweEFBCQkJOyB4bW0yPSgwMiAwMiAwMiAwMikKLQlzaHVmcHMJeG1tMyx4bW0zLDB4RkYJCQk7IHhtbTM9KDAzIDAzIDAzIDAzKQorICAgICAgICBzaHVmcHMgIHhtbTAseG1tMCwweDAwICAgICAgICAgICAgICAgICAgOyB4bW0wPSgwMCAwMCAwMCAwMCkKKyAgICAgICAgc2h1ZnBzICB4bW0xLHhtbTEsMHg1NSAgICAgICAgICAgICAgICAgIDsgeG1tMT0oMDEgMDEgMDEgMDEpCisgICAgICAgIHNodWZwcyAgeG1tMix4bW0yLDB4QUEgICAgICAgICAgICAgICAgICA7IHhtbTI9KDAyIDAyIDAyIDAyKQorICAgICAgICBzaHVmcHMgIHhtbTMseG1tMywweEZGICAgICAgICAgICAgICAgICAgOyB4bW0zPSgwMyAwMyAwMyAwMykKIAotCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygwLDAsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTAKLQltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMCwxLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0wCi0JbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMQotCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygxLDEsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTEKLQltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMiwwLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0yCi0JbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDIsMSxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMgotCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygzLDAsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTMKLQltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMywxLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0zCi0Jam1wCW5lYXIgLm5leHRjb2x1bW4KLQlhbGlnbngJMTYsNworICAgICAgICBtb3ZhcHMgIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMAorICAgICAgICBtb3ZhcHMgIFhNTVdPUkQgW1hNTUJMT0NLKDAsMSxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMAorICAgICAgICBtb3ZhcHMgIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMQorICAgICAgICBtb3ZhcHMgIFhNTVdPUkQgW1hNTUJMT0NLKDEsMSxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMQorICAgICAgICBtb3ZhcHMgIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMgorICAgICAgICBtb3ZhcHMgIFhNTVdPUkQgW1hNTUJMT0NLKDIsMSxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMgorICAgICAgICBtb3ZhcHMgIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMworICAgICAgICBtb3ZhcHMgIFhNTVdPUkQgW1hNTUJMT0NLKDMsMSxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMworICAgICAgICBqbXAgICAgIG5lYXIgLm5leHRjb2x1bW4KKyAgICAgICAgYWxpZ254ICAxNiw3CiAlZW5kaWYKIC5jb2x1bW5EQ1Q6CiAKLQk7IC0tIEV2ZW4gcGFydAorICAgICAgICA7IC0tIEV2ZW4gcGFydAogCi0JbW92cSAgICAgIHhtbTAsIFhNTV9NTVdPUkQgW01NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQotCW1vdnEgICAgICB4bW0xLCBYTU1fTU1XT1JEIFtNTUJMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQltb3ZxICAgICAgeG1tMiwgWE1NX01NV09SRCBbTU1CTE9DSyg0LDAsZXNpLFNJWkVPRl9KQ09FRildCi0JbW92cSAgICAgIHhtbTMsIFhNTV9NTVdPUkQgW01NQkxPQ0soNiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBtb3ZxICAgICAgeG1tMCwgWE1NX01NV09SRCBbTU1CTE9DSygwLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdnEgICAgICB4bW0xLCBYTU1fTU1XT1JEIFtNTUJMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgbW92cSAgICAgIHhtbTIsIFhNTV9NTVdPUkQgW01NQkxPQ0soNCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBtb3ZxICAgICAgeG1tMywgWE1NX01NV09SRCBbTU1CTE9DSyg2LDAsZXNpLFNJWkVPRl9KQ09FRildCiAKLQlwdW5wY2tsd2QgeG1tMCx4bW0wCQk7IHhtbTA9KDAwIDAwIDAxIDAxIDAyIDAyIDAzIDAzKQotCXB1bnBja2x3ZCB4bW0xLHhtbTEJCTsgeG1tMT0oMjAgMjAgMjEgMjEgMjIgMjIgMjMgMjMpCi0JcHNyYWQgICAgIHhtbTAsKERXT1JEX0JJVC1XT1JEX0JJVCkJOyB4bW0wPWluMD0oMDAgMDEgMDIgMDMpCi0JcHNyYWQgICAgIHhtbTEsKERXT1JEX0JJVC1XT1JEX0JJVCkJOyB4bW0xPWluMj0oMjAgMjEgMjIgMjMpCi0JY3Z0ZHEycHMgIHhtbTAseG1tMAkJCTsgeG1tMD1pbjA9KDAwIDAxIDAyIDAzKQotCWN2dGRxMnBzICB4bW0xLHhtbTEJCQk7IHhtbTE9aW4yPSgyMCAyMSAyMiAyMykKKyAgICAgICAgcHVucGNrbHdkIHhtbTAseG1tMCAgICAgICAgICAgICA7IHhtbTA9KDAwIDAwIDAxIDAxIDAyIDAyIDAzIDAzKQorICAgICAgICBwdW5wY2tsd2QgeG1tMSx4bW0xICAgICAgICAgICAgIDsgeG1tMT0oMjAgMjAgMjEgMjEgMjIgMjIgMjMgMjMpCisgICAgICAgIHBzcmFkICAgICB4bW0wLChEV09SRF9CSVQtV09SRF9CSVQpICAgICA7IHhtbTA9aW4wPSgwMCAwMSAwMiAwMykKKyAgICAgICAgcHNyYWQgICAgIHhtbTEsKERXT1JEX0JJVC1XT1JEX0JJVCkgICAgIDsgeG1tMT1pbjI9KDIwIDIxIDIyIDIzKQorICAgICAgICBjdnRkcTJwcyAgeG1tMCx4bW0wICAgICAgICAgICAgICAgICAgICAgOyB4bW0wPWluMD0oMDAgMDEgMDIgMDMpCisgICAgICAgIGN2dGRxMnBzICB4bW0xLHhtbTEgICAgICAgICAgICAgICAgICAgICA7IHhtbTE9aW4yPSgyMCAyMSAyMiAyMykKIAotCXB1bnBja2x3ZCB4bW0yLHhtbTIJCTsgeG1tMj0oNDAgNDAgNDEgNDEgNDIgNDIgNDMgNDMpCi0JcHVucGNrbHdkIHhtbTMseG1tMwkJOyB4bW0zPSg2MCA2MCA2MSA2MSA2MiA2MiA2MyA2MykKLQlwc3JhZCAgICAgeG1tMiwoRFdPUkRfQklULVdPUkRfQklUKQk7IHhtbTI9aW40PSg0MCA0MSA0MiA0MykKLQlwc3JhZCAgICAgeG1tMywoRFdPUkRfQklULVdPUkRfQklUKQk7IHhtbTM9aW42PSg2MCA2MSA2MiA2MykKLQljdnRkcTJwcyAgeG1tMix4bW0yCQkJOyB4bW0yPWluND0oNDAgNDEgNDIgNDMpCi0JY3Z0ZHEycHMgIHhtbTMseG1tMwkJCTsgeG1tMz1pbjY9KDYwIDYxIDYyIDYzKQorICAgICAgICBwdW5wY2tsd2QgeG1tMix4bW0yICAgICAgICAgICAgIDsgeG1tMj0oNDAgNDAgNDEgNDEgNDIgNDIgNDMgNDMpCisgICAgICAgIHB1bnBja2x3ZCB4bW0zLHhtbTMgICAgICAgICAgICAgOyB4bW0zPSg2MCA2MCA2MSA2MSA2MiA2MiA2MyA2MykKKyAgICAgICAgcHNyYWQgICAgIHhtbTIsKERXT1JEX0JJVC1XT1JEX0JJVCkgICAgIDsgeG1tMj1pbjQ9KDQwIDQxIDQyIDQzKQorICAgICAgICBwc3JhZCAgICAgeG1tMywoRFdPUkRfQklULVdPUkRfQklUKSAgICAgOyB4bW0zPWluNj0oNjAgNjEgNjIgNjMpCisgICAgICAgIGN2dGRxMnBzICB4bW0yLHhtbTIgICAgICAgICAgICAgICAgICAgICA7IHhtbTI9aW40PSg0MCA0MSA0MiA0MykKKyAgICAgICAgY3Z0ZHEycHMgIHhtbTMseG1tMyAgICAgICAgICAgICAgICAgICAgIDsgeG1tMz1pbjY9KDYwIDYxIDYyIDYzKQogCi0JbXVscHMgICAgIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCi0JbXVscHMgICAgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCi0JbXVscHMgICAgIHhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDQsMCxlZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCi0JbXVscHMgICAgIHhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDYsMCxlZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCisgICAgICAgIG11bHBzICAgICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQorICAgICAgICBtdWxwcyAgICAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMiwwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KKyAgICAgICAgbXVscHMgICAgIHhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDQsMCxlZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCisgICAgICAgIG11bHBzICAgICB4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg2LDAsZWR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQogCi0JbW92YXBzCXhtbTQseG1tMAotCW1vdmFwcwl4bW01LHhtbTEKLQlzdWJwcwl4bW0wLHhtbTIJCTsgeG1tMD10bXAxMQotCXN1YnBzCXhtbTEseG1tMwotCWFkZHBzCXhtbTQseG1tMgkJOyB4bW00PXRtcDEwCi0JYWRkcHMJeG1tNSx4bW0zCQk7IHhtbTU9dG1wMTMKKyAgICAgICAgbW92YXBzICB4bW00LHhtbTAKKyAgICAgICAgbW92YXBzICB4bW01LHhtbTEKKyAgICAgICAgc3VicHMgICB4bW0wLHhtbTIgICAgICAgICAgICAgICA7IHhtbTA9dG1wMTEKKyAgICAgICAgc3VicHMgICB4bW0xLHhtbTMKKyAgICAgICAgYWRkcHMgICB4bW00LHhtbTIgICAgICAgICAgICAgICA7IHhtbTQ9dG1wMTAKKyAgICAgICAgYWRkcHMgICB4bW01LHhtbTMgICAgICAgICAgICAgICA7IHhtbTU9dG1wMTMKIAotCW11bHBzCXhtbTEsW0dPVE9GRihlYngsUERfMV80MTQpXQotCXN1YnBzCXhtbTEseG1tNQkJOyB4bW0xPXRtcDEyCisgICAgICAgIG11bHBzICAgeG1tMSxbR09UT0ZGKGVieCxQRF8xXzQxNCldCisgICAgICAgIHN1YnBzICAgeG1tMSx4bW01ICAgICAgICAgICAgICAgOyB4bW0xPXRtcDEyCiAKLQltb3ZhcHMJeG1tNix4bW00Ci0JbW92YXBzCXhtbTcseG1tMAotCXN1YnBzCXhtbTQseG1tNQkJOyB4bW00PXRtcDMKLQlzdWJwcwl4bW0wLHhtbTEJCTsgeG1tMD10bXAyCi0JYWRkcHMJeG1tNix4bW01CQk7IHhtbTY9dG1wMAotCWFkZHBzCXhtbTcseG1tMQkJOyB4bW03PXRtcDEKKyAgICAgICAgbW92YXBzICB4bW02LHhtbTQKKyAgICAgICAgbW92YXBzICB4bW03LHhtbTAKKyAgICAgICAgc3VicHMgICB4bW00LHhtbTUgICAgICAgICAgICAgICA7IHhtbTQ9dG1wMworICAgICAgICBzdWJwcyAgIHhtbTAseG1tMSAgICAgICAgICAgICAgIDsgeG1tMD10bXAyCisgICAgICAgIGFkZHBzICAgeG1tNix4bW01ICAgICAgICAgICAgICAgOyB4bW02PXRtcDAKKyAgICAgICAgYWRkcHMgICB4bW03LHhtbTEgICAgICAgICAgICAgICA7IHhtbTc9dG1wMQogCi0JbW92YXBzCVhNTVdPUkQgW3drKDEpXSwgeG1tNAk7IHRtcDMKLQltb3ZhcHMJWE1NV09SRCBbd2soMCldLCB4bW0wCTsgdG1wMgorICAgICAgICBtb3ZhcHMgIFhNTVdPUkQgW3drKDEpXSwgeG1tNCAgIDsgdG1wMworICAgICAgICBtb3ZhcHMgIFhNTVdPUkQgW3drKDApXSwgeG1tMCAgIDsgdG1wMgogCi0JOyAtLSBPZGQgcGFydAorICAgICAgICA7IC0tIE9kZCBwYXJ0CiAKLQltb3ZxICAgICAgeG1tMiwgWE1NX01NV09SRCBbTU1CTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCi0JbW92cSAgICAgIHhtbTMsIFhNTV9NTVdPUkQgW01NQkxPQ0soMywwLGVzaSxTSVpFT0ZfSkNPRUYpXQotCW1vdnEgICAgICB4bW01LCBYTU1fTU1XT1JEIFtNTUJMT0NLKDUsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQltb3ZxICAgICAgeG1tMSwgWE1NX01NV09SRCBbTU1CTE9DSyg3LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdnEgICAgICB4bW0yLCBYTU1fTU1XT1JEIFtNTUJMT0NLKDEsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgbW92cSAgICAgIHhtbTMsIFhNTV9NTVdPUkQgW01NQkxPQ0soMywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBtb3ZxICAgICAgeG1tNSwgWE1NX01NV09SRCBbTU1CTE9DSyg1LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdnEgICAgICB4bW0xLCBYTU1fTU1XT1JEIFtNTUJMT0NLKDcsMCxlc2ksU0laRU9GX0pDT0VGKV0KIAotCXB1bnBja2x3ZCB4bW0yLHhtbTIJCTsgeG1tMj0oMTAgMTAgMTEgMTEgMTIgMTIgMTMgMTMpCi0JcHVucGNrbHdkIHhtbTMseG1tMwkJOyB4bW0zPSgzMCAzMCAzMSAzMSAzMiAzMiAzMyAzMykKLQlwc3JhZCAgICAgeG1tMiwoRFdPUkRfQklULVdPUkRfQklUKQk7IHhtbTI9aW4xPSgxMCAxMSAxMiAxMykKLQlwc3JhZCAgICAgeG1tMywoRFdPUkRfQklULVdPUkRfQklUKQk7IHhtbTM9aW4zPSgzMCAzMSAzMiAzMykKLQljdnRkcTJwcyAgeG1tMix4bW0yCQkJOyB4bW0yPWluMT0oMTAgMTEgMTIgMTMpCi0JY3Z0ZHEycHMgIHhtbTMseG1tMwkJCTsgeG1tMz1pbjM9KDMwIDMxIDMyIDMzKQorICAgICAgICBwdW5wY2tsd2QgeG1tMix4bW0yICAgICAgICAgICAgIDsgeG1tMj0oMTAgMTAgMTEgMTEgMTIgMTIgMTMgMTMpCisgICAgICAgIHB1bnBja2x3ZCB4bW0zLHhtbTMgICAgICAgICAgICAgOyB4bW0zPSgzMCAzMCAzMSAzMSAzMiAzMiAzMyAzMykKKyAgICAgICAgcHNyYWQgICAgIHhtbTIsKERXT1JEX0JJVC1XT1JEX0JJVCkgICAgIDsgeG1tMj1pbjE9KDEwIDExIDEyIDEzKQorICAgICAgICBwc3JhZCAgICAgeG1tMywoRFdPUkRfQklULVdPUkRfQklUKSAgICAgOyB4bW0zPWluMz0oMzAgMzEgMzIgMzMpCisgICAgICAgIGN2dGRxMnBzICB4bW0yLHhtbTIgICAgICAgICAgICAgICAgICAgICA7IHhtbTI9aW4xPSgxMCAxMSAxMiAxMykKKyAgICAgICAgY3Z0ZHEycHMgIHhtbTMseG1tMyAgICAgICAgICAgICAgICAgICAgIDsgeG1tMz1pbjM9KDMwIDMxIDMyIDMzKQogCi0JcHVucGNrbHdkIHhtbTUseG1tNQkJOyB4bW01PSg1MCA1MCA1MSA1MSA1MiA1MiA1MyA1MykKLQlwdW5wY2tsd2QgeG1tMSx4bW0xCQk7IHhtbTE9KDcwIDcwIDcxIDcxIDcyIDcyIDczIDczKQotCXBzcmFkICAgICB4bW01LChEV09SRF9CSVQtV09SRF9CSVQpCTsgeG1tNT1pbjU9KDUwIDUxIDUyIDUzKQotCXBzcmFkICAgICB4bW0xLChEV09SRF9CSVQtV09SRF9CSVQpCTsgeG1tMT1pbjc9KDcwIDcxIDcyIDczKQotCWN2dGRxMnBzICB4bW01LHhtbTUJCQk7IHhtbTU9aW41PSg1MCA1MSA1MiA1MykKLQljdnRkcTJwcyAgeG1tMSx4bW0xCQkJOyB4bW0xPWluNz0oNzAgNzEgNzIgNzMpCisgICAgICAgIHB1bnBja2x3ZCB4bW01LHhtbTUgICAgICAgICAgICAgOyB4bW01PSg1MCA1MCA1MSA1MSA1MiA1MiA1MyA1MykKKyAgICAgICAgcHVucGNrbHdkIHhtbTEseG1tMSAgICAgICAgICAgICA7IHhtbTE9KDcwIDcwIDcxIDcxIDcyIDcyIDczIDczKQorICAgICAgICBwc3JhZCAgICAgeG1tNSwoRFdPUkRfQklULVdPUkRfQklUKSAgICAgOyB4bW01PWluNT0oNTAgNTEgNTIgNTMpCisgICAgICAgIHBzcmFkICAgICB4bW0xLChEV09SRF9CSVQtV09SRF9CSVQpICAgICA7IHhtbTE9aW43PSg3MCA3MSA3MiA3MykKKyAgICAgICAgY3Z0ZHEycHMgIHhtbTUseG1tNSAgICAgICAgICAgICAgICAgICAgIDsgeG1tNT1pbjU9KDUwIDUxIDUyIDUzKQorICAgICAgICBjdnRkcTJwcyAgeG1tMSx4bW0xICAgICAgICAgICAgICAgICAgICAgOyB4bW0xPWluNz0oNzAgNzEgNzIgNzMpCiAKLQltdWxwcyAgICAgeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KLQltdWxwcyAgICAgeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soMywwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KLQltdWxwcyAgICAgeG1tNSwgWE1NV09SRCBbWE1NQkxPQ0soNSwwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KLQltdWxwcyAgICAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNywwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KKyAgICAgICAgbXVscHMgICAgIHhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCisgICAgICAgIG11bHBzICAgICB4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQorICAgICAgICBtdWxwcyAgICAgeG1tNSwgWE1NV09SRCBbWE1NQkxPQ0soNSwwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KKyAgICAgICAgbXVscHMgICAgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxlZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCiAKLQltb3ZhcHMJeG1tNCx4bW0yCi0JbW92YXBzCXhtbTAseG1tNQotCWFkZHBzCXhtbTIseG1tMQkJOyB4bW0yPXoxMQotCWFkZHBzCXhtbTUseG1tMwkJOyB4bW01PXoxMwotCXN1YnBzCXhtbTQseG1tMQkJOyB4bW00PXoxMgotCXN1YnBzCXhtbTAseG1tMwkJOyB4bW0wPXoxMAorICAgICAgICBtb3ZhcHMgIHhtbTQseG1tMgorICAgICAgICBtb3ZhcHMgIHhtbTAseG1tNQorICAgICAgICBhZGRwcyAgIHhtbTIseG1tMSAgICAgICAgICAgICAgIDsgeG1tMj16MTEKKyAgICAgICAgYWRkcHMgICB4bW01LHhtbTMgICAgICAgICAgICAgICA7IHhtbTU9ejEzCisgICAgICAgIHN1YnBzICAgeG1tNCx4bW0xICAgICAgICAgICAgICAgOyB4bW00PXoxMgorICAgICAgICBzdWJwcyAgIHhtbTAseG1tMyAgICAgICAgICAgICAgIDsgeG1tMD16MTAKIAotCW1vdmFwcwl4bW0xLHhtbTIKLQlzdWJwcwl4bW0yLHhtbTUKLQlhZGRwcwl4bW0xLHhtbTUJCTsgeG1tMT10bXA3CisgICAgICAgIG1vdmFwcyAgeG1tMSx4bW0yCisgICAgICAgIHN1YnBzICAgeG1tMix4bW01CisgICAgICAgIGFkZHBzICAgeG1tMSx4bW01ICAgICAgICAgICAgICAgOyB4bW0xPXRtcDcKIAotCW11bHBzCXhtbTIsW0dPVE9GRihlYngsUERfMV80MTQpXQk7IHhtbTI9dG1wMTEKKyAgICAgICAgbXVscHMgICB4bW0yLFtHT1RPRkYoZWJ4LFBEXzFfNDE0KV0gICAgIDsgeG1tMj10bXAxMQogCi0JbW92YXBzCXhtbTMseG1tMAotCWFkZHBzCXhtbTAseG1tNAotCW11bHBzCXhtbTAsW0dPVE9GRihlYngsUERfMV84NDcpXQk7IHhtbTA9ejUKLQltdWxwcwl4bW0zLFtHT1RPRkYoZWJ4LFBEX00yXzYxMyldCTsgeG1tMz0oejEwICogLTIuNjEzMTI1OTMwKQotCW11bHBzCXhtbTQsW0dPVE9GRihlYngsUERfMV8wODIpXQk7IHhtbTQ9KHoxMiAqIDEuMDgyMzkyMjAwKQotCWFkZHBzCXhtbTMseG1tMAkJOyB4bW0zPXRtcDEyCi0Jc3VicHMJeG1tNCx4bW0wCQk7IHhtbTQ9dG1wMTAKKyAgICAgICAgbW92YXBzICB4bW0zLHhtbTAKKyAgICAgICAgYWRkcHMgICB4bW0wLHhtbTQKKyAgICAgICAgbXVscHMgICB4bW0wLFtHT1RPRkYoZWJ4LFBEXzFfODQ3KV0gICAgIDsgeG1tMD16NQorICAgICAgICBtdWxwcyAgIHhtbTMsW0dPVE9GRihlYngsUERfTTJfNjEzKV0gICAgOyB4bW0zPSh6MTAgKiAtMi42MTMxMjU5MzApCisgICAgICAgIG11bHBzICAgeG1tNCxbR09UT0ZGKGVieCxQRF8xXzA4MildICAgICA7IHhtbTQ9KHoxMiAqIDEuMDgyMzkyMjAwKQorICAgICAgICBhZGRwcyAgIHhtbTMseG1tMCAgICAgICAgICAgICAgIDsgeG1tMz10bXAxMgorICAgICAgICBzdWJwcyAgIHhtbTQseG1tMCAgICAgICAgICAgICAgIDsgeG1tND10bXAxMAogCi0JOyAtLSBGaW5hbCBvdXRwdXQgc3RhZ2UKKyAgICAgICAgOyAtLSBGaW5hbCBvdXRwdXQgc3RhZ2UKIAotCXN1YnBzCXhtbTMseG1tMQkJOyB4bW0zPXRtcDYKLQltb3ZhcHMJeG1tNSx4bW02Ci0JbW92YXBzCXhtbTAseG1tNwotCWFkZHBzCXhtbTYseG1tMQkJOyB4bW02PWRhdGEwPSgwMCAwMSAwMiAwMykKLQlhZGRwcwl4bW03LHhtbTMJCTsgeG1tNz1kYXRhMT0oMTAgMTEgMTIgMTMpCi0Jc3VicHMJeG1tNSx4bW0xCQk7IHhtbTU9ZGF0YTc9KDcwIDcxIDcyIDczKQotCXN1YnBzCXhtbTAseG1tMwkJOyB4bW0wPWRhdGE2PSg2MCA2MSA2MiA2MykKLQlzdWJwcwl4bW0yLHhtbTMJCTsgeG1tMj10bXA1CisgICAgICAgIHN1YnBzICAgeG1tMyx4bW0xICAgICAgICAgICAgICAgOyB4bW0zPXRtcDYKKyAgICAgICAgbW92YXBzICB4bW01LHhtbTYKKyAgICAgICAgbW92YXBzICB4bW0wLHhtbTcKKyAgICAgICAgYWRkcHMgICB4bW02LHhtbTEgICAgICAgICAgICAgICA7IHhtbTY9ZGF0YTA9KDAwIDAxIDAyIDAzKQorICAgICAgICBhZGRwcyAgIHhtbTcseG1tMyAgICAgICAgICAgICAgIDsgeG1tNz1kYXRhMT0oMTAgMTEgMTIgMTMpCisgICAgICAgIHN1YnBzICAgeG1tNSx4bW0xICAgICAgICAgICAgICAgOyB4bW01PWRhdGE3PSg3MCA3MSA3MiA3MykKKyAgICAgICAgc3VicHMgICB4bW0wLHhtbTMgICAgICAgICAgICAgICA7IHhtbTA9ZGF0YTY9KDYwIDYxIDYyIDYzKQorICAgICAgICBzdWJwcyAgIHhtbTIseG1tMyAgICAgICAgICAgICAgIDsgeG1tMj10bXA1CiAKLQltb3ZhcHMgICAgeG1tMSx4bW02CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKLQl1bnBja2xwcyAgeG1tNix4bW03CQk7IHhtbTY9KDAwIDEwIDAxIDExKQotCXVucGNraHBzICB4bW0xLHhtbTcJCTsgeG1tMT0oMDIgMTIgMDMgMTMpCi0JbW92YXBzICAgIHhtbTMseG1tMAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCi0JdW5wY2tscHMgIHhtbTAseG1tNQkJOyB4bW0wPSg2MCA3MCA2MSA3MSkKLQl1bnBja2hwcyAgeG1tMyx4bW01CQk7IHhtbTM9KDYyIDcyIDYzIDczKQorICAgICAgICBtb3ZhcHMgICAgeG1tMSx4bW02ICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgICAgICB1bnBja2xwcyAgeG1tNix4bW03ICAgICAgICAgICAgIDsgeG1tNj0oMDAgMTAgMDEgMTEpCisgICAgICAgIHVucGNraHBzICB4bW0xLHhtbTcgICAgICAgICAgICAgOyB4bW0xPSgwMiAxMiAwMyAxMykKKyAgICAgICAgbW92YXBzICAgIHhtbTMseG1tMCAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICAgICAgdW5wY2tscHMgIHhtbTAseG1tNSAgICAgICAgICAgICA7IHhtbTA9KDYwIDcwIDYxIDcxKQorICAgICAgICB1bnBja2hwcyAgeG1tMyx4bW01ICAgICAgICAgICAgIDsgeG1tMz0oNjIgNzIgNjMgNzMpCiAKLQltb3ZhcHMJeG1tNywgWE1NV09SRCBbd2soMCldCTsgeG1tNz10bXAyCi0JbW92YXBzCXhtbTUsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTU9dG1wMworICAgICAgICBtb3ZhcHMgIHhtbTcsIFhNTVdPUkQgW3drKDApXSAgIDsgeG1tNz10bXAyCisgICAgICAgIG1vdmFwcyAgeG1tNSwgWE1NV09SRCBbd2soMSldICAgOyB4bW01PXRtcDMKIAotCW1vdmFwcwlYTU1XT1JEIFt3aygwKV0sIHhtbTAJOyB3aygwKT0oNjAgNzAgNjEgNzEpCi0JbW92YXBzCVhNTVdPUkQgW3drKDEpXSwgeG1tMwk7IHdrKDEpPSg2MiA3MiA2MyA3MykKKyAgICAgICAgbW92YXBzICBYTU1XT1JEIFt3aygwKV0sIHhtbTAgICA7IHdrKDApPSg2MCA3MCA2MSA3MSkKKyAgICAgICAgbW92YXBzICBYTU1XT1JEIFt3aygxKV0sIHhtbTMgICA7IHdrKDEpPSg2MiA3MiA2MyA3MykKIAotCWFkZHBzCXhtbTQseG1tMgkJOyB4bW00PXRtcDQKLQltb3ZhcHMJeG1tMCx4bW03Ci0JbW92YXBzCXhtbTMseG1tNQotCWFkZHBzCXhtbTcseG1tMgkJOyB4bW03PWRhdGEyPSgyMCAyMSAyMiAyMykKLQlhZGRwcwl4bW01LHhtbTQJCTsgeG1tNT1kYXRhND0oNDAgNDEgNDIgNDMpCi0Jc3VicHMJeG1tMCx4bW0yCQk7IHhtbTA9ZGF0YTU9KDUwIDUxIDUyIDUzKQotCXN1YnBzCXhtbTMseG1tNAkJOyB4bW0zPWRhdGEzPSgzMCAzMSAzMiAzMykKKyAgICAgICAgYWRkcHMgICB4bW00LHhtbTIgICAgICAgICAgICAgICA7IHhtbTQ9dG1wNAorICAgICAgICBtb3ZhcHMgIHhtbTAseG1tNworICAgICAgICBtb3ZhcHMgIHhtbTMseG1tNQorICAgICAgICBhZGRwcyAgIHhtbTcseG1tMiAgICAgICAgICAgICAgIDsgeG1tNz1kYXRhMj0oMjAgMjEgMjIgMjMpCisgICAgICAgIGFkZHBzICAgeG1tNSx4bW00ICAgICAgICAgICAgICAgOyB4bW01PWRhdGE0PSg0MCA0MSA0MiA0MykKKyAgICAgICAgc3VicHMgICB4bW0wLHhtbTIgICAgICAgICAgICAgICA7IHhtbTA9ZGF0YTU9KDUwIDUxIDUyIDUzKQorICAgICAgICBzdWJwcyAgIHhtbTMseG1tNCAgICAgICAgICAgICAgIDsgeG1tMz1kYXRhMz0oMzAgMzEgMzIgMzMpCiAKLQltb3ZhcHMgICAgeG1tMix4bW03CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKLQl1bnBja2xwcyAgeG1tNyx4bW0zCQk7IHhtbTc9KDIwIDMwIDIxIDMxKQotCXVucGNraHBzICB4bW0yLHhtbTMJCTsgeG1tMj0oMjIgMzIgMjMgMzMpCi0JbW92YXBzICAgIHhtbTQseG1tNQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCi0JdW5wY2tscHMgIHhtbTUseG1tMAkJOyB4bW01PSg0MCA1MCA0MSA1MSkKLQl1bnBja2hwcyAgeG1tNCx4bW0wCQk7IHhtbTQ9KDQyIDUyIDQzIDUzKQorICAgICAgICBtb3ZhcHMgICAgeG1tMix4bW03ICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgICAgICB1bnBja2xwcyAgeG1tNyx4bW0zICAgICAgICAgICAgIDsgeG1tNz0oMjAgMzAgMjEgMzEpCisgICAgICAgIHVucGNraHBzICB4bW0yLHhtbTMgICAgICAgICAgICAgOyB4bW0yPSgyMiAzMiAyMyAzMykKKyAgICAgICAgbW92YXBzICAgIHhtbTQseG1tNSAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICAgICAgdW5wY2tscHMgIHhtbTUseG1tMCAgICAgICAgICAgICA7IHhtbTU9KDQwIDUwIDQxIDUxKQorICAgICAgICB1bnBja2hwcyAgeG1tNCx4bW0wICAgICAgICAgICAgIDsgeG1tND0oNDIgNTIgNDMgNTMpCiAKLQltb3ZhcHMgICAgeG1tMyx4bW02CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKLQl1bnBja2xwczIgeG1tNix4bW03CQk7IHhtbTY9KDAwIDEwIDIwIDMwKQotCXVucGNraHBzMiB4bW0zLHhtbTcJCTsgeG1tMz0oMDEgMTEgMjEgMzEpCi0JbW92YXBzICAgIHhtbTAseG1tMQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCi0JdW5wY2tscHMyIHhtbTEseG1tMgkJOyB4bW0xPSgwMiAxMiAyMiAzMikKLQl1bnBja2hwczIgeG1tMCx4bW0yCQk7IHhtbTA9KDAzIDEzIDIzIDMzKQorICAgICAgICBtb3ZhcHMgICAgeG1tMyx4bW02ICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgICAgICB1bnBja2xwczIgeG1tNix4bW03ICAgICAgICAgICAgIDsgeG1tNj0oMDAgMTAgMjAgMzApCisgICAgICAgIHVucGNraHBzMiB4bW0zLHhtbTcgICAgICAgICAgICAgOyB4bW0zPSgwMSAxMSAyMSAzMSkKKyAgICAgICAgbW92YXBzICAgIHhtbTAseG1tMSAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICAgICAgdW5wY2tscHMyIHhtbTEseG1tMiAgICAgICAgICAgICA7IHhtbTE9KDAyIDEyIDIyIDMyKQorICAgICAgICB1bnBja2hwczIgeG1tMCx4bW0yICAgICAgICAgICAgIDsgeG1tMD0oMDMgMTMgMjMgMzMpCiAKLQltb3ZhcHMJeG1tNywgWE1NV09SRCBbd2soMCldCTsgeG1tNz0oNjAgNzAgNjEgNzEpCi0JbW92YXBzCXhtbTIsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTI9KDYyIDcyIDYzIDczKQorICAgICAgICBtb3ZhcHMgIHhtbTcsIFhNTVdPUkQgW3drKDApXSAgIDsgeG1tNz0oNjAgNzAgNjEgNzEpCisgICAgICAgIG1vdmFwcyAgeG1tMiwgWE1NV09SRCBbd2soMSldICAgOyB4bW0yPSg2MiA3MiA2MyA3MykKIAotCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygwLDAsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTYKLQltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0zCi0JbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMQotCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygzLDAsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTAKKyAgICAgICAgbW92YXBzICBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTYKKyAgICAgICAgbW92YXBzICBYTU1XT1JEIFtYTU1CTE9DSygxLDAsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTMKKyAgICAgICAgbW92YXBzICBYTU1XT1JEIFtYTU1CTE9DSygyLDAsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTEKKyAgICAgICAgbW92YXBzICBYTU1XT1JEIFtYTU1CTE9DSygzLDAsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTAKIAotCW1vdmFwcyAgICB4bW02LHhtbTUJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQotCXVucGNrbHBzMiB4bW01LHhtbTcJCTsgeG1tNT0oNDAgNTAgNjAgNzApCi0JdW5wY2tocHMyIHhtbTYseG1tNwkJOyB4bW02PSg0MSA1MSA2MSA3MSkKLQltb3ZhcHMgICAgeG1tMyx4bW00CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKLQl1bnBja2xwczIgeG1tNCx4bW0yCQk7IHhtbTQ9KDQyIDUyIDYyIDcyKQotCXVucGNraHBzMiB4bW0zLHhtbTIJCTsgeG1tMz0oNDMgNTMgNjMgNzMpCisgICAgICAgIG1vdmFwcyAgICB4bW02LHhtbTUgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgICAgIHVucGNrbHBzMiB4bW01LHhtbTcgICAgICAgICAgICAgOyB4bW01PSg0MCA1MCA2MCA3MCkKKyAgICAgICAgdW5wY2tocHMyIHhtbTYseG1tNyAgICAgICAgICAgICA7IHhtbTY9KDQxIDUxIDYxIDcxKQorICAgICAgICBtb3ZhcHMgICAgeG1tMyx4bW00ICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgICAgICB1bnBja2xwczIgeG1tNCx4bW0yICAgICAgICAgICAgIDsgeG1tND0oNDIgNTIgNjIgNzIpCisgICAgICAgIHVucGNraHBzMiB4bW0zLHhtbTIgICAgICAgICAgICAgOyB4bW0zPSg0MyA1MyA2MyA3MykKIAotCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygwLDEsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTUKLQltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMSwxLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW02Ci0JbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDIsMSxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNAotCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygzLDEsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTMKKyAgICAgICAgbW92YXBzICBYTU1XT1JEIFtYTU1CTE9DSygwLDEsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTUKKyAgICAgICAgbW92YXBzICBYTU1XT1JEIFtYTU1CTE9DSygxLDEsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTYKKyAgICAgICAgbW92YXBzICBYTU1XT1JEIFtYTU1CTE9DSygyLDEsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTQKKyAgICAgICAgbW92YXBzICBYTU1XT1JEIFtYTU1CTE9DSygzLDEsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTMKIAogLm5leHRjb2x1bW46Ci0JYWRkCWVzaSwgYnl0ZSA0KlNJWkVPRl9KQ09FRgkJOyBjb2VmX2Jsb2NrCi0JYWRkCWVkeCwgYnl0ZSA0KlNJWkVPRl9GTE9BVF9NVUxUX1RZUEUJOyBxdWFudHB0cgotCWFkZAllZGksICAgICAgNCpEQ1RTSVpFKlNJWkVPRl9GQVNUX0ZMT0FUCTsgd3NwdHIKLQlkZWMJZWN4CQkJCQk7IGN0cgotCWpuegluZWFyIC5jb2x1bW5sb29wCisgICAgICAgIGFkZCAgICAgZXNpLCBieXRlIDQqU0laRU9GX0pDT0VGICAgICAgICAgICAgICAgIDsgY29lZl9ibG9jaworICAgICAgICBhZGQgICAgIGVkeCwgYnl0ZSA0KlNJWkVPRl9GTE9BVF9NVUxUX1RZUEUgICAgICA7IHF1YW50cHRyCisgICAgICAgIGFkZCAgICAgZWRpLCAgICAgIDQqRENUU0laRSpTSVpFT0ZfRkFTVF9GTE9BVCAgIDsgd3NwdHIKKyAgICAgICAgZGVjICAgICBlY3ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBjdHIKKyAgICAgICAgam56ICAgICBuZWFyIC5jb2x1bW5sb29wCiAKLQk7IC0tIFByZWZldGNoIHRoZSBuZXh0IGNvZWZmaWNpZW50IGJsb2NrCisgICAgICAgIDsgLS0gUHJlZmV0Y2ggdGhlIG5leHQgY29lZmZpY2llbnQgYmxvY2sKIAotCXByZWZldGNobnRhIFtlc2kgKyAoRENUU0laRTItOCkqU0laRU9GX0pDT0VGICsgMCozMl0KLQlwcmVmZXRjaG50YSBbZXNpICsgKERDVFNJWkUyLTgpKlNJWkVPRl9KQ09FRiArIDEqMzJdCi0JcHJlZmV0Y2hudGEgW2VzaSArIChEQ1RTSVpFMi04KSpTSVpFT0ZfSkNPRUYgKyAyKjMyXQotCXByZWZldGNobnRhIFtlc2kgKyAoRENUU0laRTItOCkqU0laRU9GX0pDT0VGICsgMyozMl0KKyAgICAgICAgcHJlZmV0Y2hudGEgW2VzaSArIChEQ1RTSVpFMi04KSpTSVpFT0ZfSkNPRUYgKyAwKjMyXQorICAgICAgICBwcmVmZXRjaG50YSBbZXNpICsgKERDVFNJWkUyLTgpKlNJWkVPRl9KQ09FRiArIDEqMzJdCisgICAgICAgIHByZWZldGNobnRhIFtlc2kgKyAoRENUU0laRTItOCkqU0laRU9GX0pDT0VGICsgMiozMl0KKyAgICAgICAgcHJlZmV0Y2hudGEgW2VzaSArIChEQ1RTSVpFMi04KSpTSVpFT0ZfSkNPRUYgKyAzKjMyXQogCi0JOyAtLS0tIFBhc3MgMjogcHJvY2VzcyByb3dzIGZyb20gd29yayBhcnJheSwgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuCisgICAgICAgIDsgLS0tLSBQYXNzIDI6IHByb2Nlc3Mgcm93cyBmcm9tIHdvcmsgYXJyYXksIHN0b3JlIGludG8gb3V0cHV0IGFycmF5LgogCi0JbW92CWVheCwgW29yaWdpbmFsX2VicF0KLQlsZWEJZXNpLCBbd29ya3NwYWNlXQkJCTsgRkFTVF9GTE9BVCAqIHdzcHRyCi0JbW92CWVkaSwgSlNBTVBBUlJBWSBbb3V0cHV0X2J1ZihlYXgpXQk7IChKU0FNUFJPVyAqKQotCW1vdgllYXgsIEpESU1FTlNJT04gW291dHB1dF9jb2woZWF4KV0KLQltb3YJZWN4LCBEQ1RTSVpFLzQJCQkJOyBjdHIKLQlhbGlnbngJMTYsNworICAgICAgICBtb3YgICAgIGVheCwgW29yaWdpbmFsX2VicF0KKyAgICAgICAgbGVhICAgICBlc2ksIFt3b3Jrc3BhY2VdICAgICAgICAgICAgICAgICAgICAgICAgOyBGQVNUX0ZMT0FUICogd3NwdHIKKyAgICAgICAgbW92ICAgICBlZGksIEpTQU1QQVJSQVkgW291dHB1dF9idWYoZWF4KV0gICAgICAgOyAoSlNBTVBST1cgKikKKyAgICAgICAgbW92ICAgICBlYXgsIEpESU1FTlNJT04gW291dHB1dF9jb2woZWF4KV0KKyAgICAgICAgbW92ICAgICBlY3gsIERDVFNJWkUvNCAgICAgICAgICAgICAgICAgICAgICAgICAgOyBjdHIKKyAgICAgICAgYWxpZ254ICAxNiw3CiAucm93bG9vcDoKIAotCTsgLS0gRXZlbiBwYXJ0CisgICAgICAgIDsgLS0gRXZlbiBwYXJ0CiAKLQltb3ZhcHMJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCi0JbW92YXBzCXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQotCW1vdmFwcwl4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSyg0LDAsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KLQltb3ZhcHMJeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNiwwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgICAgIG1vdmFwcyAgeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgICAgIG1vdmFwcyAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMiwwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgICAgIG1vdmFwcyAgeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soNCwwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisgICAgICAgIG1vdmFwcyAgeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNiwwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCiAKLQltb3ZhcHMJeG1tNCx4bW0wCi0JbW92YXBzCXhtbTUseG1tMQotCXN1YnBzCXhtbTAseG1tMgkJOyB4bW0wPXRtcDExCi0Jc3VicHMJeG1tMSx4bW0zCi0JYWRkcHMJeG1tNCx4bW0yCQk7IHhtbTQ9dG1wMTAKLQlhZGRwcwl4bW01LHhtbTMJCTsgeG1tNT10bXAxMworICAgICAgICBtb3ZhcHMgIHhtbTQseG1tMAorICAgICAgICBtb3ZhcHMgIHhtbTUseG1tMQorICAgICAgICBzdWJwcyAgIHhtbTAseG1tMiAgICAgICAgICAgICAgIDsgeG1tMD10bXAxMQorICAgICAgICBzdWJwcyAgIHhtbTEseG1tMworICAgICAgICBhZGRwcyAgIHhtbTQseG1tMiAgICAgICAgICAgICAgIDsgeG1tND10bXAxMAorICAgICAgICBhZGRwcyAgIHhtbTUseG1tMyAgICAgICAgICAgICAgIDsgeG1tNT10bXAxMwogCi0JbXVscHMJeG1tMSxbR09UT0ZGKGVieCxQRF8xXzQxNCldCi0Jc3VicHMJeG1tMSx4bW01CQk7IHhtbTE9dG1wMTIKKyAgICAgICAgbXVscHMgICB4bW0xLFtHT1RPRkYoZWJ4LFBEXzFfNDE0KV0KKyAgICAgICAgc3VicHMgICB4bW0xLHhtbTUgICAgICAgICAgICAgICA7IHhtbTE9dG1wMTIKIAotCW1vdmFwcwl4bW02LHhtbTQKLQltb3ZhcHMJeG1tNyx4bW0wCi0Jc3VicHMJeG1tNCx4bW01CQk7IHhtbTQ9dG1wMwotCXN1YnBzCXhtbTAseG1tMQkJOyB4bW0wPXRtcDIKLQlhZGRwcwl4bW02LHhtbTUJCTsgeG1tNj10bXAwCi0JYWRkcHMJeG1tNyx4bW0xCQk7IHhtbTc9dG1wMQorICAgICAgICBtb3ZhcHMgIHhtbTYseG1tNAorICAgICAgICBtb3ZhcHMgIHhtbTcseG1tMAorICAgICAgICBzdWJwcyAgIHhtbTQseG1tNSAgICAgICAgICAgICAgIDsgeG1tND10bXAzCisgICAgICAgIHN1YnBzICAgeG1tMCx4bW0xICAgICAgICAgICAgICAgOyB4bW0wPXRtcDIKKyAgICAgICAgYWRkcHMgICB4bW02LHhtbTUgICAgICAgICAgICAgICA7IHhtbTY9dG1wMAorICAgICAgICBhZGRwcyAgIHhtbTcseG1tMSAgICAgICAgICAgICAgIDsgeG1tNz10bXAxCiAKLQltb3ZhcHMJWE1NV09SRCBbd2soMSldLCB4bW00CTsgdG1wMwotCW1vdmFwcwlYTU1XT1JEIFt3aygwKV0sIHhtbTAJOyB0bXAyCisgICAgICAgIG1vdmFwcyAgWE1NV09SRCBbd2soMSldLCB4bW00ICAgOyB0bXAzCisgICAgICAgIG1vdmFwcyAgWE1NV09SRCBbd2soMCldLCB4bW0wICAgOyB0bXAyCiAKLQk7IC0tIE9kZCBwYXJ0CisgICAgICAgIDsgLS0gT2RkIHBhcnQKIAotCW1vdmFwcwl4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KLQltb3ZhcHMJeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soMywwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCi0JbW92YXBzCXhtbTUsIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQotCW1vdmFwcwl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSyg3LDAsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICAgICAgbW92YXBzICB4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICAgICAgbW92YXBzICB4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICAgICAgbW92YXBzICB4bW01LCBYTU1XT1JEIFtYTU1CTE9DSyg1LDAsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICAgICAgbW92YXBzICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSyg3LDAsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KIAotCW1vdmFwcwl4bW00LHhtbTIKLQltb3ZhcHMJeG1tMCx4bW01Ci0JYWRkcHMJeG1tMix4bW0xCQk7IHhtbTI9ejExCi0JYWRkcHMJeG1tNSx4bW0zCQk7IHhtbTU9ejEzCi0Jc3VicHMJeG1tNCx4bW0xCQk7IHhtbTQ9ejEyCi0Jc3VicHMJeG1tMCx4bW0zCQk7IHhtbTA9ejEwCisgICAgICAgIG1vdmFwcyAgeG1tNCx4bW0yCisgICAgICAgIG1vdmFwcyAgeG1tMCx4bW01CisgICAgICAgIGFkZHBzICAgeG1tMix4bW0xICAgICAgICAgICAgICAgOyB4bW0yPXoxMQorICAgICAgICBhZGRwcyAgIHhtbTUseG1tMyAgICAgICAgICAgICAgIDsgeG1tNT16MTMKKyAgICAgICAgc3VicHMgICB4bW00LHhtbTEgICAgICAgICAgICAgICA7IHhtbTQ9ejEyCisgICAgICAgIHN1YnBzICAgeG1tMCx4bW0zICAgICAgICAgICAgICAgOyB4bW0wPXoxMAogCi0JbW92YXBzCXhtbTEseG1tMgotCXN1YnBzCXhtbTIseG1tNQotCWFkZHBzCXhtbTEseG1tNQkJOyB4bW0xPXRtcDcKKyAgICAgICAgbW92YXBzICB4bW0xLHhtbTIKKyAgICAgICAgc3VicHMgICB4bW0yLHhtbTUKKyAgICAgICAgYWRkcHMgICB4bW0xLHhtbTUgICAgICAgICAgICAgICA7IHhtbTE9dG1wNwogCi0JbXVscHMJeG1tMixbR09UT0ZGKGVieCxQRF8xXzQxNCldCTsgeG1tMj10bXAxMQorICAgICAgICBtdWxwcyAgIHhtbTIsW0dPVE9GRihlYngsUERfMV80MTQpXSAgICAgOyB4bW0yPXRtcDExCiAKLQltb3ZhcHMJeG1tMyx4bW0wCi0JYWRkcHMJeG1tMCx4bW00Ci0JbXVscHMJeG1tMCxbR09UT0ZGKGVieCxQRF8xXzg0NyldCTsgeG1tMD16NQotCW11bHBzCXhtbTMsW0dPVE9GRihlYngsUERfTTJfNjEzKV0JOyB4bW0zPSh6MTAgKiAtMi42MTMxMjU5MzApCi0JbXVscHMJeG1tNCxbR09UT0ZGKGVieCxQRF8xXzA4MildCTsgeG1tND0oejEyICogMS4wODIzOTIyMDApCi0JYWRkcHMJeG1tMyx4bW0wCQk7IHhtbTM9dG1wMTIKLQlzdWJwcwl4bW00LHhtbTAJCTsgeG1tND10bXAxMAorICAgICAgICBtb3ZhcHMgIHhtbTMseG1tMAorICAgICAgICBhZGRwcyAgIHhtbTAseG1tNAorICAgICAgICBtdWxwcyAgIHhtbTAsW0dPVE9GRihlYngsUERfMV84NDcpXSAgICAgOyB4bW0wPXo1CisgICAgICAgIG11bHBzICAgeG1tMyxbR09UT0ZGKGVieCxQRF9NMl82MTMpXSAgICA7IHhtbTM9KHoxMCAqIC0yLjYxMzEyNTkzMCkKKyAgICAgICAgbXVscHMgICB4bW00LFtHT1RPRkYoZWJ4LFBEXzFfMDgyKV0gICAgIDsgeG1tND0oejEyICogMS4wODIzOTIyMDApCisgICAgICAgIGFkZHBzICAgeG1tMyx4bW0wICAgICAgICAgICAgICAgOyB4bW0zPXRtcDEyCisgICAgICAgIHN1YnBzICAgeG1tNCx4bW0wICAgICAgICAgICAgICAgOyB4bW00PXRtcDEwCiAKLQk7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQorICAgICAgICA7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQogCi0Jc3VicHMJeG1tMyx4bW0xCQk7IHhtbTM9dG1wNgotCW1vdmFwcwl4bW01LHhtbTYKLQltb3ZhcHMJeG1tMCx4bW03Ci0JYWRkcHMJeG1tNix4bW0xCQk7IHhtbTY9ZGF0YTA9KDAwIDEwIDIwIDMwKQotCWFkZHBzCXhtbTcseG1tMwkJOyB4bW03PWRhdGExPSgwMSAxMSAyMSAzMSkKLQlzdWJwcwl4bW01LHhtbTEJCTsgeG1tNT1kYXRhNz0oMDcgMTcgMjcgMzcpCi0Jc3VicHMJeG1tMCx4bW0zCQk7IHhtbTA9ZGF0YTY9KDA2IDE2IDI2IDM2KQotCXN1YnBzCXhtbTIseG1tMwkJOyB4bW0yPXRtcDUKKyAgICAgICAgc3VicHMgICB4bW0zLHhtbTEgICAgICAgICAgICAgICA7IHhtbTM9dG1wNgorICAgICAgICBtb3ZhcHMgIHhtbTUseG1tNgorICAgICAgICBtb3ZhcHMgIHhtbTAseG1tNworICAgICAgICBhZGRwcyAgIHhtbTYseG1tMSAgICAgICAgICAgICAgIDsgeG1tNj1kYXRhMD0oMDAgMTAgMjAgMzApCisgICAgICAgIGFkZHBzICAgeG1tNyx4bW0zICAgICAgICAgICAgICAgOyB4bW03PWRhdGExPSgwMSAxMSAyMSAzMSkKKyAgICAgICAgc3VicHMgICB4bW01LHhtbTEgICAgICAgICAgICAgICA7IHhtbTU9ZGF0YTc9KDA3IDE3IDI3IDM3KQorICAgICAgICBzdWJwcyAgIHhtbTAseG1tMyAgICAgICAgICAgICAgIDsgeG1tMD1kYXRhNj0oMDYgMTYgMjYgMzYpCisgICAgICAgIHN1YnBzICAgeG1tMix4bW0zICAgICAgICAgICAgICAgOyB4bW0yPXRtcDUKIAotCW1vdmFwcwl4bW0xLFtHT1RPRkYoZWJ4LFBEX1JORElOVF9NQUdJQyldCTsgeG1tMT1bUERfUk5ESU5UX01BR0lDXQotCXBjbXBlcWQJeG1tMyx4bW0zCi0JcHNybGQJeG1tMyxXT1JEX0JJVAkJOyB4bW0zPXsweEZGRkYgMHgwMDAwIDB4RkZGRiAweDAwMDAgLi59CisgICAgICAgIG1vdmFwcyAgeG1tMSxbR09UT0ZGKGVieCxQRF9STkRJTlRfTUFHSUMpXSAgICAgIDsgeG1tMT1bUERfUk5ESU5UX01BR0lDXQorICAgICAgICBwY21wZXFkIHhtbTMseG1tMworICAgICAgICBwc3JsZCAgIHhtbTMsV09SRF9CSVQgICAgICAgICAgIDsgeG1tMz17MHhGRkZGIDB4MDAwMCAweEZGRkYgMHgwMDAwIC4ufQogCi0JYWRkcHMJeG1tNix4bW0xCTsgeG1tNj1yb3VuZGludChkYXRhMC84KT0oMDAgKiogMTAgKiogMjAgKiogMzAgKiopCi0JYWRkcHMJeG1tNyx4bW0xCTsgeG1tNz1yb3VuZGludChkYXRhMS84KT0oMDEgKiogMTEgKiogMjEgKiogMzEgKiopCi0JYWRkcHMJeG1tMCx4bW0xCTsgeG1tMD1yb3VuZGludChkYXRhNi84KT0oMDYgKiogMTYgKiogMjYgKiogMzYgKiopCi0JYWRkcHMJeG1tNSx4bW0xCTsgeG1tNT1yb3VuZGludChkYXRhNy84KT0oMDcgKiogMTcgKiogMjcgKiogMzcgKiopCisgICAgICAgIGFkZHBzICAgeG1tNix4bW0xICAgICAgIDsgeG1tNj1yb3VuZGludChkYXRhMC84KT0oMDAgKiogMTAgKiogMjAgKiogMzAgKiopCisgICAgICAgIGFkZHBzICAgeG1tNyx4bW0xICAgICAgIDsgeG1tNz1yb3VuZGludChkYXRhMS84KT0oMDEgKiogMTEgKiogMjEgKiogMzEgKiopCisgICAgICAgIGFkZHBzICAgeG1tMCx4bW0xICAgICAgIDsgeG1tMD1yb3VuZGludChkYXRhNi84KT0oMDYgKiogMTYgKiogMjYgKiogMzYgKiopCisgICAgICAgIGFkZHBzICAgeG1tNSx4bW0xICAgICAgIDsgeG1tNT1yb3VuZGludChkYXRhNy84KT0oMDcgKiogMTcgKiogMjcgKiogMzcgKiopCiAKLQlwYW5kCXhtbTYseG1tMwkJOyB4bW02PSgwMCAtLSAxMCAtLSAyMCAtLSAzMCAtLSkKLQlwc2xsZAl4bW03LFdPUkRfQklUCQk7IHhtbTc9KC0tIDAxIC0tIDExIC0tIDIxIC0tIDMxKQotCXBhbmQJeG1tMCx4bW0zCQk7IHhtbTA9KDA2IC0tIDE2IC0tIDI2IC0tIDM2IC0tKQotCXBzbGxkCXhtbTUsV09SRF9CSVQJCTsgeG1tNT0oLS0gMDcgLS0gMTcgLS0gMjcgLS0gMzcpCi0JcG9yCXhtbTYseG1tNwkJOyB4bW02PSgwMCAwMSAxMCAxMSAyMCAyMSAzMCAzMSkKLQlwb3IJeG1tMCx4bW01CQk7IHhtbTA9KDA2IDA3IDE2IDE3IDI2IDI3IDM2IDM3KQorICAgICAgICBwYW5kICAgIHhtbTYseG1tMyAgICAgICAgICAgICAgIDsgeG1tNj0oMDAgLS0gMTAgLS0gMjAgLS0gMzAgLS0pCisgICAgICAgIHBzbGxkICAgeG1tNyxXT1JEX0JJVCAgICAgICAgICAgOyB4bW03PSgtLSAwMSAtLSAxMSAtLSAyMSAtLSAzMSkKKyAgICAgICAgcGFuZCAgICB4bW0wLHhtbTMgICAgICAgICAgICAgICA7IHhtbTA9KDA2IC0tIDE2IC0tIDI2IC0tIDM2IC0tKQorICAgICAgICBwc2xsZCAgIHhtbTUsV09SRF9CSVQgICAgICAgICAgIDsgeG1tNT0oLS0gMDcgLS0gMTcgLS0gMjcgLS0gMzcpCisgICAgICAgIHBvciAgICAgeG1tNix4bW03ICAgICAgICAgICAgICAgOyB4bW02PSgwMCAwMSAxMCAxMSAyMCAyMSAzMCAzMSkKKyAgICAgICAgcG9yICAgICB4bW0wLHhtbTUgICAgICAgICAgICAgICA7IHhtbTA9KDA2IDA3IDE2IDE3IDI2IDI3IDM2IDM3KQogCi0JbW92YXBzCXhtbTEsIFhNTVdPUkQgW3drKDApXQk7IHhtbTE9dG1wMgotCW1vdmFwcwl4bW0zLCBYTU1XT1JEIFt3aygxKV0JOyB4bW0zPXRtcDMKKyAgICAgICAgbW92YXBzICB4bW0xLCBYTU1XT1JEIFt3aygwKV0gICA7IHhtbTE9dG1wMgorICAgICAgICBtb3ZhcHMgIHhtbTMsIFhNTVdPUkQgW3drKDEpXSAgIDsgeG1tMz10bXAzCiAKLQlhZGRwcwl4bW00LHhtbTIJCTsgeG1tND10bXA0Ci0JbW92YXBzCXhtbTcseG1tMQotCW1vdmFwcwl4bW01LHhtbTMKLQlhZGRwcwl4bW0xLHhtbTIJCTsgeG1tMT1kYXRhMj0oMDIgMTIgMjIgMzIpCi0JYWRkcHMJeG1tMyx4bW00CQk7IHhtbTM9ZGF0YTQ9KDA0IDE0IDI0IDM0KQotCXN1YnBzCXhtbTcseG1tMgkJOyB4bW03PWRhdGE1PSgwNSAxNSAyNSAzNSkKLQlzdWJwcwl4bW01LHhtbTQJCTsgeG1tNT1kYXRhMz0oMDMgMTMgMjMgMzMpCisgICAgICAgIGFkZHBzICAgeG1tNCx4bW0yICAgICAgICAgICAgICAgOyB4bW00PXRtcDQKKyAgICAgICAgbW92YXBzICB4bW03LHhtbTEKKyAgICAgICAgbW92YXBzICB4bW01LHhtbTMKKyAgICAgICAgYWRkcHMgICB4bW0xLHhtbTIgICAgICAgICAgICAgICA7IHhtbTE9ZGF0YTI9KDAyIDEyIDIyIDMyKQorICAgICAgICBhZGRwcyAgIHhtbTMseG1tNCAgICAgICAgICAgICAgIDsgeG1tMz1kYXRhND0oMDQgMTQgMjQgMzQpCisgICAgICAgIHN1YnBzICAgeG1tNyx4bW0yICAgICAgICAgICAgICAgOyB4bW03PWRhdGE1PSgwNSAxNSAyNSAzNSkKKyAgICAgICAgc3VicHMgICB4bW01LHhtbTQgICAgICAgICAgICAgICA7IHhtbTU9ZGF0YTM9KDAzIDEzIDIzIDMzKQogCi0JbW92YXBzCXhtbTIsW0dPVE9GRihlYngsUERfUk5ESU5UX01BR0lDKV0JOyB4bW0yPVtQRF9STkRJTlRfTUFHSUNdCi0JcGNtcGVxZAl4bW00LHhtbTQKLQlwc3JsZAl4bW00LFdPUkRfQklUCQk7IHhtbTQ9ezB4RkZGRiAweDAwMDAgMHhGRkZGIDB4MDAwMCAuLn0KKyAgICAgICAgbW92YXBzICB4bW0yLFtHT1RPRkYoZWJ4LFBEX1JORElOVF9NQUdJQyldICAgICAgOyB4bW0yPVtQRF9STkRJTlRfTUFHSUNdCisgICAgICAgIHBjbXBlcWQgeG1tNCx4bW00CisgICAgICAgIHBzcmxkICAgeG1tNCxXT1JEX0JJVCAgICAgICAgICAgOyB4bW00PXsweEZGRkYgMHgwMDAwIDB4RkZGRiAweDAwMDAgLi59CiAKLQlhZGRwcwl4bW0zLHhtbTIJOyB4bW0zPXJvdW5kaW50KGRhdGE0LzgpPSgwNCAqKiAxNCAqKiAyNCAqKiAzNCAqKikKLQlhZGRwcwl4bW03LHhtbTIJOyB4bW03PXJvdW5kaW50KGRhdGE1LzgpPSgwNSAqKiAxNSAqKiAyNSAqKiAzNSAqKikKLQlhZGRwcwl4bW0xLHhtbTIJOyB4bW0xPXJvdW5kaW50KGRhdGEyLzgpPSgwMiAqKiAxMiAqKiAyMiAqKiAzMiAqKikKLQlhZGRwcwl4bW01LHhtbTIJOyB4bW01PXJvdW5kaW50KGRhdGEzLzgpPSgwMyAqKiAxMyAqKiAyMyAqKiAzMyAqKikKKyAgICAgICAgYWRkcHMgICB4bW0zLHhtbTIgICAgICAgOyB4bW0zPXJvdW5kaW50KGRhdGE0LzgpPSgwNCAqKiAxNCAqKiAyNCAqKiAzNCAqKikKKyAgICAgICAgYWRkcHMgICB4bW03LHhtbTIgICAgICAgOyB4bW03PXJvdW5kaW50KGRhdGE1LzgpPSgwNSAqKiAxNSAqKiAyNSAqKiAzNSAqKikKKyAgICAgICAgYWRkcHMgICB4bW0xLHhtbTIgICAgICAgOyB4bW0xPXJvdW5kaW50KGRhdGEyLzgpPSgwMiAqKiAxMiAqKiAyMiAqKiAzMiAqKikKKyAgICAgICAgYWRkcHMgICB4bW01LHhtbTIgICAgICAgOyB4bW01PXJvdW5kaW50KGRhdGEzLzgpPSgwMyAqKiAxMyAqKiAyMyAqKiAzMyAqKikKIAotCXBhbmQJeG1tMyx4bW00CQk7IHhtbTM9KDA0IC0tIDE0IC0tIDI0IC0tIDM0IC0tKQotCXBzbGxkCXhtbTcsV09SRF9CSVQJCTsgeG1tNz0oLS0gMDUgLS0gMTUgLS0gMjUgLS0gMzUpCi0JcGFuZAl4bW0xLHhtbTQJCTsgeG1tMT0oMDIgLS0gMTIgLS0gMjIgLS0gMzIgLS0pCi0JcHNsbGQJeG1tNSxXT1JEX0JJVAkJOyB4bW01PSgtLSAwMyAtLSAxMyAtLSAyMyAtLSAzMykKLQlwb3IJeG1tMyx4bW03CQk7IHhtbTM9KDA0IDA1IDE0IDE1IDI0IDI1IDM0IDM1KQotCXBvcgl4bW0xLHhtbTUJCTsgeG1tMT0oMDIgMDMgMTIgMTMgMjIgMjMgMzIgMzMpCisgICAgICAgIHBhbmQgICAgeG1tMyx4bW00ICAgICAgICAgICAgICAgOyB4bW0zPSgwNCAtLSAxNCAtLSAyNCAtLSAzNCAtLSkKKyAgICAgICAgcHNsbGQgICB4bW03LFdPUkRfQklUICAgICAgICAgICA7IHhtbTc9KC0tIDA1IC0tIDE1IC0tIDI1IC0tIDM1KQorICAgICAgICBwYW5kICAgIHhtbTEseG1tNCAgICAgICAgICAgICAgIDsgeG1tMT0oMDIgLS0gMTIgLS0gMjIgLS0gMzIgLS0pCisgICAgICAgIHBzbGxkICAgeG1tNSxXT1JEX0JJVCAgICAgICAgICAgOyB4bW01PSgtLSAwMyAtLSAxMyAtLSAyMyAtLSAzMykKKyAgICAgICAgcG9yICAgICB4bW0zLHhtbTcgICAgICAgICAgICAgICA7IHhtbTM9KDA0IDA1IDE0IDE1IDI0IDI1IDM0IDM1KQorICAgICAgICBwb3IgICAgIHhtbTEseG1tNSAgICAgICAgICAgICAgIDsgeG1tMT0oMDIgMDMgMTIgMTMgMjIgMjMgMzIgMzMpCiAKLQltb3ZkcWEgICAgeG1tMixbR09UT0ZGKGVieCxQQl9DRU5URVJKU0FNUCldCTsgeG1tMj1bUEJfQ0VOVEVSSlNBTVBdCisgICAgICAgIG1vdmRxYSAgICB4bW0yLFtHT1RPRkYoZWJ4LFBCX0NFTlRFUkpTQU1QKV0gICAgIDsgeG1tMj1bUEJfQ0VOVEVSSlNBTVBdCiAKLQlwYWNrc3N3YiAgeG1tNix4bW0zCTsgeG1tNj0oMDAgMDEgMTAgMTEgMjAgMjEgMzAgMzEgMDQgMDUgMTQgMTUgMjQgMjUgMzQgMzUpCi0JcGFja3Nzd2IgIHhtbTEseG1tMAk7IHhtbTE9KDAyIDAzIDEyIDEzIDIyIDIzIDMyIDMzIDA2IDA3IDE2IDE3IDI2IDI3IDM2IDM3KQotCXBhZGRiICAgICB4bW02LHhtbTIKLQlwYWRkYiAgICAgeG1tMSx4bW0yCisgICAgICAgIHBhY2tzc3diICB4bW02LHhtbTMgICAgIDsgeG1tNj0oMDAgMDEgMTAgMTEgMjAgMjEgMzAgMzEgMDQgMDUgMTQgMTUgMjQgMjUgMzQgMzUpCisgICAgICAgIHBhY2tzc3diICB4bW0xLHhtbTAgICAgIDsgeG1tMT0oMDIgMDMgMTIgMTMgMjIgMjMgMzIgMzMgMDYgMDcgMTYgMTcgMjYgMjcgMzYgMzcpCisgICAgICAgIHBhZGRiICAgICB4bW02LHhtbTIKKyAgICAgICAgcGFkZGIgICAgIHhtbTEseG1tMgogCi0JbW92ZHFhICAgIHhtbTQseG1tNgk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKLQlwdW5wY2tsd2QgeG1tNix4bW0xCTsgeG1tNj0oMDAgMDEgMDIgMDMgMTAgMTEgMTIgMTMgMjAgMjEgMjIgMjMgMzAgMzEgMzIgMzMpCi0JcHVucGNraHdkIHhtbTQseG1tMQk7IHhtbTQ9KDA0IDA1IDA2IDA3IDE0IDE1IDE2IDE3IDI0IDI1IDI2IDI3IDM0IDM1IDM2IDM3KQorICAgICAgICBtb3ZkcWEgICAgeG1tNCx4bW02ICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICAgICAgcHVucGNrbHdkIHhtbTYseG1tMSAgICAgOyB4bW02PSgwMCAwMSAwMiAwMyAxMCAxMSAxMiAxMyAyMCAyMSAyMiAyMyAzMCAzMSAzMiAzMykKKyAgICAgICAgcHVucGNraHdkIHhtbTQseG1tMSAgICAgOyB4bW00PSgwNCAwNSAwNiAwNyAxNCAxNSAxNiAxNyAyNCAyNSAyNiAyNyAzNCAzNSAzNiAzNykKIAotCW1vdmRxYSAgICB4bW03LHhtbTYJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCi0JcHVucGNrbGRxIHhtbTYseG1tNAk7IHhtbTY9KDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3IDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3KQotCXB1bnBja2hkcSB4bW03LHhtbTQJOyB4bW03PSgyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNyAzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNykKKyAgICAgICAgbW92ZHFhICAgIHhtbTcseG1tNiAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisgICAgICAgIHB1bnBja2xkcSB4bW02LHhtbTQgICAgIDsgeG1tNj0oMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcgMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcpCisgICAgICAgIHB1bnBja2hkcSB4bW03LHhtbTQgICAgIDsgeG1tNz0oMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcgMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcpCiAKLQlwc2h1ZmQJeG1tNSx4bW02LDB4NEUJOyB4bW01PSgxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNyAwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNykKLQlwc2h1ZmQJeG1tMyx4bW03LDB4NEUJOyB4bW0zPSgzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNyAyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNykKKyAgICAgICAgcHNodWZkICB4bW01LHhtbTYsMHg0RSAgOyB4bW01PSgxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNyAwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNykKKyAgICAgICAgcHNodWZkICB4bW0zLHhtbTcsMHg0RSAgOyB4bW0zPSgzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNyAyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNykKIAotCXB1c2hwaWMJZWJ4CQkJOyBzYXZlIEdPVCBhZGRyZXNzCisgICAgICAgIHB1c2hwaWMgZWJ4ICAgICAgICAgICAgICAgICAgICAgOyBzYXZlIEdPVCBhZGRyZXNzCiAKLQltb3YJZWR4LCBKU0FNUFJPVyBbZWRpKzAqU0laRU9GX0pTQU1QUk9XXQotCW1vdgllYngsIEpTQU1QUk9XIFtlZGkrMipTSVpFT0ZfSlNBTVBST1ddCi0JbW92cQlYTU1fTU1XT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXSwgeG1tNgotCW1vdnEJWE1NX01NV09SRCBbZWJ4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTcKLQltb3YJZWR4LCBKU0FNUFJPVyBbZWRpKzEqU0laRU9GX0pTQU1QUk9XXQotCW1vdgllYngsIEpTQU1QUk9XIFtlZGkrMypTSVpFT0ZfSlNBTVBST1ddCi0JbW92cQlYTU1fTU1XT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXSwgeG1tNQotCW1vdnEJWE1NX01NV09SRCBbZWJ4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTMKKyAgICAgICAgbW92ICAgICBlZHgsIEpTQU1QUk9XIFtlZGkrMCpTSVpFT0ZfSlNBTVBST1ddCisgICAgICAgIG1vdiAgICAgZWJ4LCBKU0FNUFJPVyBbZWRpKzIqU0laRU9GX0pTQU1QUk9XXQorICAgICAgICBtb3ZxICAgIFhNTV9NTVdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdLCB4bW02CisgICAgICAgIG1vdnEgICAgWE1NX01NV09SRCBbZWJ4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTcKKyAgICAgICAgbW92ICAgICBlZHgsIEpTQU1QUk9XIFtlZGkrMSpTSVpFT0ZfSlNBTVBST1ddCisgICAgICAgIG1vdiAgICAgZWJ4LCBKU0FNUFJPVyBbZWRpKzMqU0laRU9GX0pTQU1QUk9XXQorICAgICAgICBtb3ZxICAgIFhNTV9NTVdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdLCB4bW01CisgICAgICAgIG1vdnEgICAgWE1NX01NV09SRCBbZWJ4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTMKIAotCXBvcHBpYwllYngJCQk7IHJlc3RvcmUgR09UIGFkZHJlc3MKKyAgICAgICAgcG9wcGljICBlYnggICAgICAgICAgICAgICAgICAgICA7IHJlc3RvcmUgR09UIGFkZHJlc3MKIAotCWFkZAllc2ksIGJ5dGUgNCpTSVpFT0ZfRkFTVF9GTE9BVAk7IHdzcHRyCi0JYWRkCWVkaSwgYnl0ZSA0KlNJWkVPRl9KU0FNUFJPVwotCWRlYwllY3gJCQkJOyBjdHIKLQlqbnoJbmVhciAucm93bG9vcAorICAgICAgICBhZGQgICAgIGVzaSwgYnl0ZSA0KlNJWkVPRl9GQVNUX0ZMT0FUICAgOyB3c3B0cgorICAgICAgICBhZGQgICAgIGVkaSwgYnl0ZSA0KlNJWkVPRl9KU0FNUFJPVworICAgICAgICBkZWMgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBjdHIKKyAgICAgICAgam56ICAgICBuZWFyIC5yb3dsb29wCiAKLQlwb3AJZWRpCi0JcG9wCWVzaQotOwlwb3AJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotOwlwb3AJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotCXBvcAllYngKLQltb3YJZXNwLGVicAkJOyBlc3AgPC0gYWxpZ25lZCBlYnAKLQlwb3AJZXNwCQk7IGVzcCA8LSBvcmlnaW5hbCBlYnAKLQlwb3AJZWJwCi0JcmV0CisgICAgICAgIHBvcCAgICAgZWRpCisgICAgICAgIHBvcCAgICAgZXNpCis7ICAgICAgIHBvcCAgICAgZWR4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgICAgIHBvcCAgICAgZWN4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgICAgIHBvcCAgICAgZWJ4CisgICAgICAgIG1vdiAgICAgZXNwLGVicCAgICAgICAgIDsgZXNwIDwtIGFsaWduZWQgZWJwCisgICAgICAgIHBvcCAgICAgZXNwICAgICAgICAgICAgIDsgZXNwIDwtIG9yaWdpbmFsIGVicAorICAgICAgICBwb3AgICAgIGVicAorICAgICAgICByZXQKIAogOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKIDsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KLQlhbGlnbgkxNgorICAgICAgICBhbGlnbiAgIDE2CmRpZmYgLS1naXQgYS9zaW1kL2ppc3MyZnN0LTY0LmFzbSBiL3NpbWQvamlzczJmc3QtNjQuYXNtCmluZGV4IDA4ODc1MDUuLjQzMmUyODkgMTAwNjQ0Ci0tLSBhL3NpbWQvamlzczJmc3QtNjQuYXNtCisrKyBiL3NpbWQvamlzczJmc3QtNjQuYXNtCkBAIC0yNywzMSArMjcsMzEgQEAKIAogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0lZGVmaW5lIENPTlNUX0JJVFMJOAk7IDE0IGlzIGFsc28gT0suCi0lZGVmaW5lIFBBU1MxX0JJVFMJMgorJWRlZmluZSBDT05TVF9CSVRTICAgICAgOCAgICAgICA7IDE0IGlzIGFsc28gT0suCislZGVmaW5lIFBBU1MxX0JJVFMgICAgICAyCiAKICVpZiBJRkFTVF9TQ0FMRV9CSVRTICE9IFBBU1MxX0JJVFMKICVlcnJvciAiJ0lGQVNUX1NDQUxFX0JJVFMnIG11c3QgYmUgZXF1YWwgdG8gJ1BBU1MxX0JJVFMnLiIKICVlbmRpZgogCiAlaWYgQ09OU1RfQklUUyA9PSA4Ci1GXzFfMDgyCWVxdQkyNzcJCTsgRklYKDEuMDgyMzkyMjAwKQotRl8xXzQxNAllcXUJMzYyCQk7IEZJWCgxLjQxNDIxMzU2MikKLUZfMV84NDcJZXF1CTQ3MwkJOyBGSVgoMS44NDc3NTkwNjUpCi1GXzJfNjEzCWVxdQk2NjkJCTsgRklYKDIuNjEzMTI1OTMwKQotRl8xXzYxMwllcXUJKEZfMl82MTMgLSAyNTYpCTsgRklYKDIuNjEzMTI1OTMwKSAtIEZJWCgxKQorRl8xXzA4MiBlcXUgICAgIDI3NyAgICAgICAgICAgICA7IEZJWCgxLjA4MjM5MjIwMCkKK0ZfMV80MTQgZXF1ICAgICAzNjIgICAgICAgICAgICAgOyBGSVgoMS40MTQyMTM1NjIpCitGXzFfODQ3IGVxdSAgICAgNDczICAgICAgICAgICAgIDsgRklYKDEuODQ3NzU5MDY1KQorRl8yXzYxMyBlcXUgICAgIDY2OSAgICAgICAgICAgICA7IEZJWCgyLjYxMzEyNTkzMCkKK0ZfMV82MTMgZXF1ICAgICAoRl8yXzYxMyAtIDI1NikgOyBGSVgoMi42MTMxMjU5MzApIC0gRklYKDEpCiAlZWxzZQogOyBOQVNNIGNhbm5vdCBkbyBjb21waWxlLXRpbWUgYXJpdGhtZXRpYyBvbiBmbG9hdGluZy1wb2ludCBjb25zdGFudHMuCi0lZGVmaW5lCURFU0NBTEUoeCxuKSAgKCgoeCkrKDE8PCgobiktMSkpKT4+KG4pKQotRl8xXzA4MgllcXUJREVTQ0FMRSgxMTYyMjA5Nzc1LDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuMDgyMzkyMjAwKQotRl8xXzQxNAllcXUJREVTQ0FMRSgxNTE4NTAwMjQ5LDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuNDE0MjEzNTYyKQotRl8xXzg0NwllcXUJREVTQ0FMRSgxOTg0MDE2MTg4LDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuODQ3NzU5MDY1KQotRl8yXzYxMwllcXUJREVTQ0FMRSgyODA1ODIyNjAyLDMwLUNPTlNUX0JJVFMpCTsgRklYKDIuNjEzMTI1OTMwKQotRl8xXzYxMwllcXUJKEZfMl82MTMgLSAoMSA8PCBDT05TVF9CSVRTKSkJOyBGSVgoMi42MTMxMjU5MzApIC0gRklYKDEpCislZGVmaW5lIERFU0NBTEUoeCxuKSAgKCgoeCkrKDE8PCgobiktMSkpKT4+KG4pKQorRl8xXzA4MiBlcXUgICAgIERFU0NBTEUoMTE2MjIwOTc3NSwzMC1DT05TVF9CSVRTKSAgICAgICA7IEZJWCgxLjA4MjM5MjIwMCkKK0ZfMV80MTQgZXF1ICAgICBERVNDQUxFKDE1MTg1MDAyNDksMzAtQ09OU1RfQklUUykgICAgICAgOyBGSVgoMS40MTQyMTM1NjIpCitGXzFfODQ3IGVxdSAgICAgREVTQ0FMRSgxOTg0MDE2MTg4LDMwLUNPTlNUX0JJVFMpICAgICAgIDsgRklYKDEuODQ3NzU5MDY1KQorRl8yXzYxMyBlcXUgICAgIERFU0NBTEUoMjgwNTgyMjYwMiwzMC1DT05TVF9CSVRTKSAgICAgICA7IEZJWCgyLjYxMzEyNTkzMCkKK0ZfMV82MTMgZXF1ICAgICAoRl8yXzYxMyAtICgxIDw8IENPTlNUX0JJVFMpKSAgIDsgRklYKDIuNjEzMTI1OTMwKSAtIEZJWCgxKQogJWVuZGlmCiAKIDsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlTRUNUSU9OCVNFR19DT05TVAorICAgICAgICBTRUNUSU9OIFNFR19DT05TVAogCiA7IFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTIDw9IDIgKHRvIGF2b2lkIG92ZXJmbG93KQogOyBDT05TVF9CSVRTICsgQ09OU1RfU0hJRlQgKyBQUkVfTVVMVElQTFlfU0NBTEVfQklUUyA9PSAxNiAoZm9yIHBtdWxodykKQEAgLTU5LDIyICs1OSwyMiBAQAogJWRlZmluZSBQUkVfTVVMVElQTFlfU0NBTEVfQklUUyAgIDIKICVkZWZpbmUgQ09OU1RfU0hJRlQgICAgICgxNiAtIFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTIC0gQ09OU1RfQklUUykKIAotCWFsaWduegkxNgotCWdsb2JhbAlFWFROKGpjb25zdF9pZGN0X2lmYXN0X3NzZTIpCisgICAgICAgIGFsaWdueiAgMTYKKyAgICAgICAgZ2xvYmFsICBFWFROKGpjb25zdF9pZGN0X2lmYXN0X3NzZTIpCiAKIEVYVE4oamNvbnN0X2lkY3RfaWZhc3Rfc3NlMik6CiAKLVBXX0YxNDE0CXRpbWVzIDggZHcgIEZfMV80MTQgPDwgQ09OU1RfU0hJRlQKLVBXX0YxODQ3CXRpbWVzIDggZHcgIEZfMV84NDcgPDwgQ09OU1RfU0hJRlQKLVBXX01GMTYxMwl0aW1lcyA4IGR3IC1GXzFfNjEzIDw8IENPTlNUX1NISUZUCi1QV19GMTA4Mgl0aW1lcyA4IGR3ICBGXzFfMDgyIDw8IENPTlNUX1NISUZUCi1QQl9DRU5URVJKU0FNUAl0aW1lcyAxNiBkYiBDRU5URVJKU0FNUExFCitQV19GMTQxNCAgICAgICAgdGltZXMgOCBkdyAgRl8xXzQxNCA8PCBDT05TVF9TSElGVAorUFdfRjE4NDcgICAgICAgIHRpbWVzIDggZHcgIEZfMV84NDcgPDwgQ09OU1RfU0hJRlQKK1BXX01GMTYxMyAgICAgICB0aW1lcyA4IGR3IC1GXzFfNjEzIDw8IENPTlNUX1NISUZUCitQV19GMTA4MiAgICAgICAgdGltZXMgOCBkdyAgRl8xXzA4MiA8PCBDT05TVF9TSElGVAorUEJfQ0VOVEVSSlNBTVAgIHRpbWVzIDE2IGRiIENFTlRFUkpTQU1QTEUKIAotCWFsaWduegkxNgorICAgICAgICBhbGlnbnogIDE2CiAKIDsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlTRUNUSU9OCVNFR19URVhUCi0JQklUUwk2NAorICAgICAgICBTRUNUSU9OIFNFR19URVhUCisgICAgICAgIEJJVFMgICAgNjQKIDsKIDsgUGVyZm9ybSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Qgb24gb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cy4KIDsKQEAgLTg4LDQwNSArODgsNDA1IEBACiA7IHIxMiA9IEpTQU1QQVJSQVkgb3V0cHV0X2J1ZgogOyByMTMgPSBKRElNRU5TSU9OIG91dHB1dF9jb2wKIAotJWRlZmluZSBvcmlnaW5hbF9yYnAJcmJwKzAKLSVkZWZpbmUgd2soaSkJCXJicC0oV0tfTlVNLShpKSkqU0laRU9GX1hNTVdPUkQJOyB4bW13b3JkIHdrW1dLX05VTV0KLSVkZWZpbmUgV0tfTlVNCQkyCislZGVmaW5lIG9yaWdpbmFsX3JicCAgICByYnArMAorJWRlZmluZSB3ayhpKSAgICAgICAgICAgcmJwLShXS19OVU0tKGkpKSpTSVpFT0ZfWE1NV09SRCA7IHhtbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0gICAgICAgICAgMgogCi0JYWxpZ24JMTYKLQlnbG9iYWwJRVhUTihqc2ltZF9pZGN0X2lmYXN0X3NzZTIpCisgICAgICAgIGFsaWduICAgMTYKKyAgICAgICAgZ2xvYmFsICBFWFROKGpzaW1kX2lkY3RfaWZhc3Rfc3NlMikKIAogRVhUTihqc2ltZF9pZGN0X2lmYXN0X3NzZTIpOgotCXB1c2gJcmJwCi0JbW92CXJheCxyc3AJCQkJOyByYXggPSBvcmlnaW5hbCByYnAKLQlzdWIJcnNwLCBieXRlIDQKLQlhbmQJcnNwLCBieXRlICgtU0laRU9GX1hNTVdPUkQpCTsgYWxpZ24gdG8gMTI4IGJpdHMKLQltb3YJW3JzcF0scmF4Ci0JbW92CXJicCxyc3AJCQkJOyByYnAgPSBhbGlnbmVkIHJicAotCWxlYQlyc3AsIFt3aygwKV0KLQljb2xsZWN0X2FyZ3MKKyAgICAgICAgcHVzaCAgICByYnAKKyAgICAgICAgbW92ICAgICByYXgscnNwICAgICAgICAgICAgICAgICAgICAgICAgIDsgcmF4ID0gb3JpZ2luYWwgcmJwCisgICAgICAgIHN1YiAgICAgcnNwLCBieXRlIDQKKyAgICAgICAgYW5kICAgICByc3AsIGJ5dGUgKC1TSVpFT0ZfWE1NV09SRCkgICAgIDsgYWxpZ24gdG8gMTI4IGJpdHMKKyAgICAgICAgbW92ICAgICBbcnNwXSxyYXgKKyAgICAgICAgbW92ICAgICByYnAscnNwICAgICAgICAgICAgICAgICAgICAgICAgIDsgcmJwID0gYWxpZ25lZCByYnAKKyAgICAgICAgbGVhICAgICByc3AsIFt3aygwKV0KKyAgICAgICAgY29sbGVjdF9hcmdzCiAKLQk7IC0tLS0gUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMgZnJvbSBpbnB1dC4KKyAgICAgICAgOyAtLS0tIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQuCiAKLQltb3YJcmR4LCByMTAJOyBxdWFudHB0cgotCW1vdglyc2ksIHIxMQkJOyBpbnB0cgorICAgICAgICBtb3YgICAgIHJkeCwgcjEwICAgICAgICAgICAgICAgIDsgcXVhbnRwdHIKKyAgICAgICAgbW92ICAgICByc2ksIHIxMSAgICAgICAgICAgICAgICA7IGlucHRyCiAKICVpZm5kZWYgTk9fWkVST19DT0xVTU5fVEVTVF9JRkFTVF9TU0UyCi0JbW92CWVheCwgRFdPUkQgW0RXQkxPQ0soMSwwLHJzaSxTSVpFT0ZfSkNPRUYpXQotCW9yCWVheCwgRFdPUkQgW0RXQkxPQ0soMiwwLHJzaSxTSVpFT0ZfSkNPRUYpXQotCWpuegluZWFyIC5jb2x1bW5EQ1QKKyAgICAgICAgbW92ICAgICBlYXgsIERXT1JEIFtEV0JMT0NLKDEsMCxyc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgb3IgICAgICBlYXgsIERXT1JEIFtEV0JMT0NLKDIsMCxyc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgam56ICAgICBuZWFyIC5jb2x1bW5EQ1QKIAotCW1vdmRxYQl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAscnNpLFNJWkVPRl9KQ09FRildCi0JbW92ZHFhCXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxyc2ksU0laRU9GX0pDT0VGKV0KLQlwb3IJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMywwLHJzaSxTSVpFT0ZfSkNPRUYpXQotCXBvcgl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSyg0LDAscnNpLFNJWkVPRl9KQ09FRildCi0JcG9yCXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxyc2ksU0laRU9GX0pDT0VGKV0KLQlwb3IJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNiwwLHJzaSxTSVpFT0ZfSkNPRUYpXQotCXBvcgl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSyg3LDAscnNpLFNJWkVPRl9KQ09FRildCi0JcG9yCXhtbTEseG1tMAotCXBhY2tzc3diIHhtbTEseG1tMQotCXBhY2tzc3diIHhtbTEseG1tMQotCW1vdmQJZWF4LHhtbTEKLQl0ZXN0CXJheCxyYXgKLQlqbnoJc2hvcnQgLmNvbHVtbkRDVAorICAgICAgICBtb3ZkcWEgIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxyc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgbW92ZHFhICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygyLDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIHBvciAgICAgeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMywwLHJzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBwb3IgICAgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDQsMCxyc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgcG9yICAgICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSyg1LDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIHBvciAgICAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNiwwLHJzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBwb3IgICAgIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxyc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgcG9yICAgICB4bW0xLHhtbTAKKyAgICAgICAgcGFja3Nzd2IgeG1tMSx4bW0xCisgICAgICAgIHBhY2tzc3diIHhtbTEseG1tMQorICAgICAgICBtb3ZkICAgIGVheCx4bW0xCisgICAgICAgIHRlc3QgICAgcmF4LHJheAorICAgICAgICBqbnogICAgIHNob3J0IC5jb2x1bW5EQ1QKIAotCTsgLS0gQUMgdGVybXMgYWxsIHplcm8KKyAgICAgICAgOyAtLSBBQyB0ZXJtcyBhbGwgemVybwogCi0JbW92ZHFhCXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxyc2ksU0laRU9GX0pDT0VGKV0KLQlwbXVsbHcJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKyAgICAgICAgbW92ZHFhICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIHBtdWxsdyAgeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KIAotCW1vdmRxYSAgICB4bW03LHhtbTAJCTsgeG1tMD1pbjA9KDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3KQotCXB1bnBja2x3ZCB4bW0wLHhtbTAJCTsgeG1tMD0oMDAgMDAgMDEgMDEgMDIgMDIgMDMgMDMpCi0JcHVucGNraHdkIHhtbTcseG1tNwkJOyB4bW03PSgwNCAwNCAwNSAwNSAwNiAwNiAwNyAwNykKKyAgICAgICAgbW92ZHFhICAgIHhtbTcseG1tMCAgICAgICAgICAgICA7IHhtbTA9aW4wPSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNykKKyAgICAgICAgcHVucGNrbHdkIHhtbTAseG1tMCAgICAgICAgICAgICA7IHhtbTA9KDAwIDAwIDAxIDAxIDAyIDAyIDAzIDAzKQorICAgICAgICBwdW5wY2tod2QgeG1tNyx4bW03ICAgICAgICAgICAgIDsgeG1tNz0oMDQgMDQgMDUgMDUgMDYgMDYgMDcgMDcpCiAKLQlwc2h1ZmQJeG1tNix4bW0wLDB4MDAJCTsgeG1tNj1jb2wwPSgwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCkKLQlwc2h1ZmQJeG1tMix4bW0wLDB4NTUJCTsgeG1tMj1jb2wxPSgwMSAwMSAwMSAwMSAwMSAwMSAwMSAwMSkKLQlwc2h1ZmQJeG1tNSx4bW0wLDB4QUEJCTsgeG1tNT1jb2wyPSgwMiAwMiAwMiAwMiAwMiAwMiAwMiAwMikKLQlwc2h1ZmQJeG1tMCx4bW0wLDB4RkYJCTsgeG1tMD1jb2wzPSgwMyAwMyAwMyAwMyAwMyAwMyAwMyAwMykKLQlwc2h1ZmQJeG1tMSx4bW03LDB4MDAJCTsgeG1tMT1jb2w0PSgwNCAwNCAwNCAwNCAwNCAwNCAwNCAwNCkKLQlwc2h1ZmQJeG1tNCx4bW03LDB4NTUJCTsgeG1tND1jb2w1PSgwNSAwNSAwNSAwNSAwNSAwNSAwNSAwNSkKLQlwc2h1ZmQJeG1tMyx4bW03LDB4QUEJCTsgeG1tMz1jb2w2PSgwNiAwNiAwNiAwNiAwNiAwNiAwNiAwNikKLQlwc2h1ZmQJeG1tNyx4bW03LDB4RkYJCTsgeG1tNz1jb2w3PSgwNyAwNyAwNyAwNyAwNyAwNyAwNyAwNykKKyAgICAgICAgcHNodWZkICB4bW02LHhtbTAsMHgwMCAgICAgICAgICA7IHhtbTY9Y29sMD0oMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDApCisgICAgICAgIHBzaHVmZCAgeG1tMix4bW0wLDB4NTUgICAgICAgICAgOyB4bW0yPWNvbDE9KDAxIDAxIDAxIDAxIDAxIDAxIDAxIDAxKQorICAgICAgICBwc2h1ZmQgIHhtbTUseG1tMCwweEFBICAgICAgICAgIDsgeG1tNT1jb2wyPSgwMiAwMiAwMiAwMiAwMiAwMiAwMiAwMikKKyAgICAgICAgcHNodWZkICB4bW0wLHhtbTAsMHhGRiAgICAgICAgICA7IHhtbTA9Y29sMz0oMDMgMDMgMDMgMDMgMDMgMDMgMDMgMDMpCisgICAgICAgIHBzaHVmZCAgeG1tMSx4bW03LDB4MDAgICAgICAgICAgOyB4bW0xPWNvbDQ9KDA0IDA0IDA0IDA0IDA0IDA0IDA0IDA0KQorICAgICAgICBwc2h1ZmQgIHhtbTQseG1tNywweDU1ICAgICAgICAgIDsgeG1tND1jb2w1PSgwNSAwNSAwNSAwNSAwNSAwNSAwNSAwNSkKKyAgICAgICAgcHNodWZkICB4bW0zLHhtbTcsMHhBQSAgICAgICAgICA7IHhtbTM9Y29sNj0oMDYgMDYgMDYgMDYgMDYgMDYgMDYgMDYpCisgICAgICAgIHBzaHVmZCAgeG1tNyx4bW03LDB4RkYgICAgICAgICAgOyB4bW03PWNvbDc9KDA3IDA3IDA3IDA3IDA3IDA3IDA3IDA3KQogCi0JbW92ZHFhCVhNTVdPUkQgW3drKDApXSwgeG1tMgk7IHdrKDApPWNvbDEKLQltb3ZkcWEJWE1NV09SRCBbd2soMSldLCB4bW0wCTsgd2soMSk9Y29sMwotCWptcAluZWFyIC5jb2x1bW5fZW5kCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMCldLCB4bW0yICAgOyB3aygwKT1jb2wxCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMSldLCB4bW0wICAgOyB3aygxKT1jb2wzCisgICAgICAgIGptcCAgICAgbmVhciAuY29sdW1uX2VuZAogJWVuZGlmCiAuY29sdW1uRENUOgogCi0JOyAtLSBFdmVuIHBhcnQKKyAgICAgICAgOyAtLSBFdmVuIHBhcnQKIAotCW1vdmRxYQl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAscnNpLFNJWkVPRl9KQ09FRildCi0JbW92ZHFhCXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxyc2ksU0laRU9GX0pDT0VGKV0KLQlwbXVsbHcJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJkeCxTSVpFT0ZfSUZBU1RfTVVMVF9UWVBFKV0KLQlwbXVsbHcJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMiwwLHJkeCxTSVpFT0ZfSUZBU1RfTVVMVF9UWVBFKV0KLQltb3ZkcWEJeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soNCwwLHJzaSxTSVpFT0ZfSkNPRUYpXQotCW1vdmRxYQl4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg2LDAscnNpLFNJWkVPRl9KQ09FRildCi0JcG11bGx3CXhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDQsMCxyZHgsU0laRU9GX0lGQVNUX01VTFRfVFlQRSldCi0JcG11bGx3CXhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDYsMCxyZHgsU0laRU9GX0lGQVNUX01VTFRfVFlQRSldCisgICAgICAgIG1vdmRxYSAgeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBtb3ZkcWEgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxyc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgcG11bGx3ICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAscmR4LFNJWkVPRl9JRkFTVF9NVUxUX1RZUEUpXQorICAgICAgICBwbXVsbHcgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxyZHgsU0laRU9GX0lGQVNUX01VTFRfVFlQRSldCisgICAgICAgIG1vdmRxYSAgeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soNCwwLHJzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBtb3ZkcWEgIHhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDYsMCxyc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgcG11bGx3ICB4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSyg0LDAscmR4LFNJWkVPRl9JRkFTVF9NVUxUX1RZUEUpXQorICAgICAgICBwbXVsbHcgIHhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDYsMCxyZHgsU0laRU9GX0lGQVNUX01VTFRfVFlQRSldCiAKLQltb3ZkcWEJeG1tNCx4bW0wCi0JbW92ZHFhCXhtbTUseG1tMQotCXBzdWJ3CXhtbTAseG1tMgkJOyB4bW0wPXRtcDExCi0JcHN1YncJeG1tMSx4bW0zCi0JcGFkZHcJeG1tNCx4bW0yCQk7IHhtbTQ9dG1wMTAKLQlwYWRkdwl4bW01LHhtbTMJCTsgeG1tNT10bXAxMworICAgICAgICBtb3ZkcWEgIHhtbTQseG1tMAorICAgICAgICBtb3ZkcWEgIHhtbTUseG1tMQorICAgICAgICBwc3VidyAgIHhtbTAseG1tMiAgICAgICAgICAgICAgIDsgeG1tMD10bXAxMQorICAgICAgICBwc3VidyAgIHhtbTEseG1tMworICAgICAgICBwYWRkdyAgIHhtbTQseG1tMiAgICAgICAgICAgICAgIDsgeG1tND10bXAxMAorICAgICAgICBwYWRkdyAgIHhtbTUseG1tMyAgICAgICAgICAgICAgIDsgeG1tNT10bXAxMwogCi0JcHNsbHcJeG1tMSxQUkVfTVVMVElQTFlfU0NBTEVfQklUUwotCXBtdWxodwl4bW0xLFtyZWwgUFdfRjE0MTRdCi0JcHN1YncJeG1tMSx4bW01CQk7IHhtbTE9dG1wMTIKKyAgICAgICAgcHNsbHcgICB4bW0xLFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisgICAgICAgIHBtdWxodyAgeG1tMSxbcmVsIFBXX0YxNDE0XQorICAgICAgICBwc3VidyAgIHhtbTEseG1tNSAgICAgICAgICAgICAgIDsgeG1tMT10bXAxMgogCi0JbW92ZHFhCXhtbTYseG1tNAotCW1vdmRxYQl4bW03LHhtbTAKLQlwc3Vidwl4bW00LHhtbTUJCTsgeG1tND10bXAzCi0JcHN1YncJeG1tMCx4bW0xCQk7IHhtbTA9dG1wMgotCXBhZGR3CXhtbTYseG1tNQkJOyB4bW02PXRtcDAKLQlwYWRkdwl4bW03LHhtbTEJCTsgeG1tNz10bXAxCisgICAgICAgIG1vdmRxYSAgeG1tNix4bW00CisgICAgICAgIG1vdmRxYSAgeG1tNyx4bW0wCisgICAgICAgIHBzdWJ3ICAgeG1tNCx4bW01ICAgICAgICAgICAgICAgOyB4bW00PXRtcDMKKyAgICAgICAgcHN1YncgICB4bW0wLHhtbTEgICAgICAgICAgICAgICA7IHhtbTA9dG1wMgorICAgICAgICBwYWRkdyAgIHhtbTYseG1tNSAgICAgICAgICAgICAgIDsgeG1tNj10bXAwCisgICAgICAgIHBhZGR3ICAgeG1tNyx4bW0xICAgICAgICAgICAgICAgOyB4bW03PXRtcDEKIAotCW1vdmRxYQlYTU1XT1JEIFt3aygxKV0sIHhtbTQJOyB3aygxKT10bXAzCi0JbW92ZHFhCVhNTVdPUkQgW3drKDApXSwgeG1tMAk7IHdrKDApPXRtcDIKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygxKV0sIHhtbTQgICA7IHdrKDEpPXRtcDMKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygwKV0sIHhtbTAgICA7IHdrKDApPXRtcDIKIAotCTsgLS0gT2RkIHBhcnQKKyAgICAgICAgOyAtLSBPZGQgcGFydAogCi0JbW92ZHFhCXhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxyc2ksU0laRU9GX0pDT0VGKV0KLQltb3ZkcWEJeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soMywwLHJzaSxTSVpFT0ZfSkNPRUYpXQotCXBtdWxsdwl4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAscmR4LFNJWkVPRl9JRkFTVF9NVUxUX1RZUEUpXQotCXBtdWxsdwl4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAscmR4LFNJWkVPRl9JRkFTVF9NVUxUX1RZUEUpXQotCW1vdmRxYQl4bW01LCBYTU1XT1JEIFtYTU1CTE9DSyg1LDAscnNpLFNJWkVPRl9KQ09FRildCi0JbW92ZHFhCXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxyc2ksU0laRU9GX0pDT0VGKV0KLQlwbXVsbHcJeG1tNSwgWE1NV09SRCBbWE1NQkxPQ0soNSwwLHJkeCxTSVpFT0ZfSUZBU1RfTVVMVF9UWVBFKV0KLQlwbXVsbHcJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNywwLHJkeCxTSVpFT0ZfSUZBU1RfTVVMVF9UWVBFKV0KKyAgICAgICAgbW92ZHFhICB4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdmRxYSAgeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soMywwLHJzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBwbXVsbHcgIHhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxyZHgsU0laRU9GX0lGQVNUX01VTFRfVFlQRSldCisgICAgICAgIHBtdWxsdyAgeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soMywwLHJkeCxTSVpFT0ZfSUZBU1RfTVVMVF9UWVBFKV0KKyAgICAgICAgbW92ZHFhICB4bW01LCBYTU1XT1JEIFtYTU1CTE9DSyg1LDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdmRxYSAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNywwLHJzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBwbXVsbHcgIHhtbTUsIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxyZHgsU0laRU9GX0lGQVNUX01VTFRfVFlQRSldCisgICAgICAgIHBtdWxsdyAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNywwLHJkeCxTSVpFT0ZfSUZBU1RfTVVMVF9UWVBFKV0KIAotCW1vdmRxYQl4bW00LHhtbTIKLQltb3ZkcWEJeG1tMCx4bW01Ci0JcHN1YncJeG1tMix4bW0xCQk7IHhtbTI9ejEyCi0JcHN1YncJeG1tNSx4bW0zCQk7IHhtbTU9ejEwCi0JcGFkZHcJeG1tNCx4bW0xCQk7IHhtbTQ9ejExCi0JcGFkZHcJeG1tMCx4bW0zCQk7IHhtbTA9ejEzCisgICAgICAgIG1vdmRxYSAgeG1tNCx4bW0yCisgICAgICAgIG1vdmRxYSAgeG1tMCx4bW01CisgICAgICAgIHBzdWJ3ICAgeG1tMix4bW0xICAgICAgICAgICAgICAgOyB4bW0yPXoxMgorICAgICAgICBwc3VidyAgIHhtbTUseG1tMyAgICAgICAgICAgICAgIDsgeG1tNT16MTAKKyAgICAgICAgcGFkZHcgICB4bW00LHhtbTEgICAgICAgICAgICAgICA7IHhtbTQ9ejExCisgICAgICAgIHBhZGR3ICAgeG1tMCx4bW0zICAgICAgICAgICAgICAgOyB4bW0wPXoxMwogCi0JbW92ZHFhCXhtbTEseG1tNQkJOyB4bW0xPXoxMCh1bnNjYWxlZCkKLQlwc2xsdwl4bW0yLFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCi0JcHNsbHcJeG1tNSxQUkVfTVVMVElQTFlfU0NBTEVfQklUUworICAgICAgICBtb3ZkcWEgIHhtbTEseG1tNSAgICAgICAgICAgICAgIDsgeG1tMT16MTAodW5zY2FsZWQpCisgICAgICAgIHBzbGx3ICAgeG1tMixQUkVfTVVMVElQTFlfU0NBTEVfQklUUworICAgICAgICBwc2xsdyAgIHhtbTUsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKIAotCW1vdmRxYQl4bW0zLHhtbTQKLQlwc3Vidwl4bW00LHhtbTAKLQlwYWRkdwl4bW0zLHhtbTAJCTsgeG1tMz10bXA3CisgICAgICAgIG1vdmRxYSAgeG1tMyx4bW00CisgICAgICAgIHBzdWJ3ICAgeG1tNCx4bW0wCisgICAgICAgIHBhZGR3ICAgeG1tMyx4bW0wICAgICAgICAgICAgICAgOyB4bW0zPXRtcDcKIAotCXBzbGx3CXhtbTQsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKLQlwbXVsaHcJeG1tNCxbcmVsIFBXX0YxNDE0XQk7IHhtbTQ9dG1wMTEKKyAgICAgICAgcHNsbHcgICB4bW00LFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisgICAgICAgIHBtdWxodyAgeG1tNCxbcmVsIFBXX0YxNDE0XSAgICAgOyB4bW00PXRtcDExCiAKLQk7IFRvIGF2b2lkIG92ZXJmbG93Li4uCi0JOwotCTsgKE9yaWdpbmFsKQotCTsgdG1wMTIgPSAtMi42MTMxMjU5MzAgKiB6MTAgKyB6NTsKLQk7Ci0JOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKLQk7IHRtcDEyID0gKC0xLjYxMzEyNTkzMCAtIDEpICogejEwICsgejU7Ci0JOyAgICAgICA9IC0xLjYxMzEyNTkzMCAqIHoxMCAtIHoxMCArIHo1OworICAgICAgICA7IFRvIGF2b2lkIG92ZXJmbG93Li4uCisgICAgICAgIDsKKyAgICAgICAgOyAoT3JpZ2luYWwpCisgICAgICAgIDsgdG1wMTIgPSAtMi42MTMxMjU5MzAgKiB6MTAgKyB6NTsKKyAgICAgICAgOworICAgICAgICA7IChUaGlzIGltcGxlbWVudGF0aW9uKQorICAgICAgICA7IHRtcDEyID0gKC0xLjYxMzEyNTkzMCAtIDEpICogejEwICsgejU7CisgICAgICAgIDsgICAgICAgPSAtMS42MTMxMjU5MzAgKiB6MTAgLSB6MTAgKyB6NTsKIAotCW1vdmRxYQl4bW0wLHhtbTUKLQlwYWRkdwl4bW01LHhtbTIKLQlwbXVsaHcJeG1tNSxbcmVsIFBXX0YxODQ3XQk7IHhtbTU9ejUKLQlwbXVsaHcJeG1tMCxbcmVsIFBXX01GMTYxM10KLQlwbXVsaHcJeG1tMixbcmVsIFBXX0YxMDgyXQotCXBzdWJ3CXhtbTAseG1tMQotCXBzdWJ3CXhtbTIseG1tNQkJOyB4bW0yPXRtcDEwCi0JcGFkZHcJeG1tMCx4bW01CQk7IHhtbTA9dG1wMTIKKyAgICAgICAgbW92ZHFhICB4bW0wLHhtbTUKKyAgICAgICAgcGFkZHcgICB4bW01LHhtbTIKKyAgICAgICAgcG11bGh3ICB4bW01LFtyZWwgUFdfRjE4NDddICAgICA7IHhtbTU9ejUKKyAgICAgICAgcG11bGh3ICB4bW0wLFtyZWwgUFdfTUYxNjEzXQorICAgICAgICBwbXVsaHcgIHhtbTIsW3JlbCBQV19GMTA4Ml0KKyAgICAgICAgcHN1YncgICB4bW0wLHhtbTEKKyAgICAgICAgcHN1YncgICB4bW0yLHhtbTUgICAgICAgICAgICAgICA7IHhtbTI9dG1wMTAKKyAgICAgICAgcGFkZHcgICB4bW0wLHhtbTUgICAgICAgICAgICAgICA7IHhtbTA9dG1wMTIKIAotCTsgLS0gRmluYWwgb3V0cHV0IHN0YWdlCisgICAgICAgIDsgLS0gRmluYWwgb3V0cHV0IHN0YWdlCiAKLQlwc3Vidwl4bW0wLHhtbTMJCTsgeG1tMD10bXA2Ci0JbW92ZHFhCXhtbTEseG1tNgotCW1vdmRxYQl4bW01LHhtbTcKLQlwYWRkdwl4bW02LHhtbTMJCTsgeG1tNj1kYXRhMD0oMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcpCi0JcGFkZHcJeG1tNyx4bW0wCQk7IHhtbTc9ZGF0YTE9KDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3KQotCXBzdWJ3CXhtbTEseG1tMwkJOyB4bW0xPWRhdGE3PSg3MCA3MSA3MiA3MyA3NCA3NSA3NiA3NykKLQlwc3Vidwl4bW01LHhtbTAJCTsgeG1tNT1kYXRhNj0oNjAgNjEgNjIgNjMgNjQgNjUgNjYgNjcpCi0JcHN1YncJeG1tNCx4bW0wCQk7IHhtbTQ9dG1wNQorICAgICAgICBwc3VidyAgIHhtbTAseG1tMyAgICAgICAgICAgICAgIDsgeG1tMD10bXA2CisgICAgICAgIG1vdmRxYSAgeG1tMSx4bW02CisgICAgICAgIG1vdmRxYSAgeG1tNSx4bW03CisgICAgICAgIHBhZGR3ICAgeG1tNix4bW0zICAgICAgICAgICAgICAgOyB4bW02PWRhdGEwPSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNykKKyAgICAgICAgcGFkZHcgICB4bW03LHhtbTAgICAgICAgICAgICAgICA7IHhtbTc9ZGF0YTE9KDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3KQorICAgICAgICBwc3VidyAgIHhtbTEseG1tMyAgICAgICAgICAgICAgIDsgeG1tMT1kYXRhNz0oNzAgNzEgNzIgNzMgNzQgNzUgNzYgNzcpCisgICAgICAgIHBzdWJ3ICAgeG1tNSx4bW0wICAgICAgICAgICAgICAgOyB4bW01PWRhdGE2PSg2MCA2MSA2MiA2MyA2NCA2NSA2NiA2NykKKyAgICAgICAgcHN1YncgICB4bW00LHhtbTAgICAgICAgICAgICAgICA7IHhtbTQ9dG1wNQogCi0JbW92ZHFhICAgIHhtbTMseG1tNgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCi0JcHVucGNrbHdkIHhtbTYseG1tNwkJOyB4bW02PSgwMCAxMCAwMSAxMSAwMiAxMiAwMyAxMykKLQlwdW5wY2tod2QgeG1tMyx4bW03CQk7IHhtbTM9KDA0IDE0IDA1IDE1IDA2IDE2IDA3IDE3KQotCW1vdmRxYSAgICB4bW0wLHhtbTUJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQotCXB1bnBja2x3ZCB4bW01LHhtbTEJCTsgeG1tNT0oNjAgNzAgNjEgNzEgNjIgNzIgNjMgNzMpCi0JcHVucGNraHdkIHhtbTAseG1tMQkJOyB4bW0wPSg2NCA3NCA2NSA3NSA2NiA3NiA2NyA3NykKKyAgICAgICAgbW92ZHFhICAgIHhtbTMseG1tNiAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICAgICAgcHVucGNrbHdkIHhtbTYseG1tNyAgICAgICAgICAgICA7IHhtbTY9KDAwIDEwIDAxIDExIDAyIDEyIDAzIDEzKQorICAgICAgICBwdW5wY2tod2QgeG1tMyx4bW03ICAgICAgICAgICAgIDsgeG1tMz0oMDQgMTQgMDUgMTUgMDYgMTYgMDcgMTcpCisgICAgICAgIG1vdmRxYSAgICB4bW0wLHhtbTUgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgICAgIHB1bnBja2x3ZCB4bW01LHhtbTEgICAgICAgICAgICAgOyB4bW01PSg2MCA3MCA2MSA3MSA2MiA3MiA2MyA3MykKKyAgICAgICAgcHVucGNraHdkIHhtbTAseG1tMSAgICAgICAgICAgICA7IHhtbTA9KDY0IDc0IDY1IDc1IDY2IDc2IDY3IDc3KQogCi0JbW92ZHFhCXhtbTcsIFhNTVdPUkQgW3drKDApXQk7IHhtbTc9dG1wMgotCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFt3aygxKV0JOyB4bW0xPXRtcDMKKyAgICAgICAgbW92ZHFhICB4bW03LCBYTU1XT1JEIFt3aygwKV0gICA7IHhtbTc9dG1wMgorICAgICAgICBtb3ZkcWEgIHhtbTEsIFhNTVdPUkQgW3drKDEpXSAgIDsgeG1tMT10bXAzCiAKLQltb3ZkcWEJWE1NV09SRCBbd2soMCldLCB4bW01CTsgd2soMCk9KDYwIDcwIDYxIDcxIDYyIDcyIDYzIDczKQotCW1vdmRxYQlYTU1XT1JEIFt3aygxKV0sIHhtbTAJOyB3aygxKT0oNjQgNzQgNjUgNzUgNjYgNzYgNjcgNzcpCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMCldLCB4bW01ICAgOyB3aygwKT0oNjAgNzAgNjEgNzEgNjIgNzIgNjMgNzMpCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMSldLCB4bW0wICAgOyB3aygxKT0oNjQgNzQgNjUgNzUgNjYgNzYgNjcgNzcpCiAKLQlwYWRkdwl4bW0yLHhtbTQJCTsgeG1tMj10bXA0Ci0JbW92ZHFhCXhtbTUseG1tNwotCW1vdmRxYQl4bW0wLHhtbTEKLQlwYWRkdwl4bW03LHhtbTQJCTsgeG1tNz1kYXRhMj0oMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcpCi0JcGFkZHcJeG1tMSx4bW0yCQk7IHhtbTE9ZGF0YTQ9KDQwIDQxIDQyIDQzIDQ0IDQ1IDQ2IDQ3KQotCXBzdWJ3CXhtbTUseG1tNAkJOyB4bW01PWRhdGE1PSg1MCA1MSA1MiA1MyA1NCA1NSA1NiA1NykKLQlwc3Vidwl4bW0wLHhtbTIJCTsgeG1tMD1kYXRhMz0oMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcpCisgICAgICAgIHBhZGR3ICAgeG1tMix4bW00ICAgICAgICAgICAgICAgOyB4bW0yPXRtcDQKKyAgICAgICAgbW92ZHFhICB4bW01LHhtbTcKKyAgICAgICAgbW92ZHFhICB4bW0wLHhtbTEKKyAgICAgICAgcGFkZHcgICB4bW03LHhtbTQgICAgICAgICAgICAgICA7IHhtbTc9ZGF0YTI9KDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3KQorICAgICAgICBwYWRkdyAgIHhtbTEseG1tMiAgICAgICAgICAgICAgIDsgeG1tMT1kYXRhND0oNDAgNDEgNDIgNDMgNDQgNDUgNDYgNDcpCisgICAgICAgIHBzdWJ3ICAgeG1tNSx4bW00ICAgICAgICAgICAgICAgOyB4bW01PWRhdGE1PSg1MCA1MSA1MiA1MyA1NCA1NSA1NiA1NykKKyAgICAgICAgcHN1YncgICB4bW0wLHhtbTIgICAgICAgICAgICAgICA7IHhtbTA9ZGF0YTM9KDMwIDMxIDMyIDMzIDM0IDM1IDM2IDM3KQogCi0JbW92ZHFhICAgIHhtbTQseG1tNwkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCi0JcHVucGNrbHdkIHhtbTcseG1tMAkJOyB4bW03PSgyMCAzMCAyMSAzMSAyMiAzMiAyMyAzMykKLQlwdW5wY2tod2QgeG1tNCx4bW0wCQk7IHhtbTQ9KDI0IDM0IDI1IDM1IDI2IDM2IDI3IDM3KQotCW1vdmRxYSAgICB4bW0yLHhtbTEJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQotCXB1bnBja2x3ZCB4bW0xLHhtbTUJCTsgeG1tMT0oNDAgNTAgNDEgNTEgNDIgNTIgNDMgNTMpCi0JcHVucGNraHdkIHhtbTIseG1tNQkJOyB4bW0yPSg0NCA1NCA0NSA1NSA0NiA1NiA0NyA1NykKKyAgICAgICAgbW92ZHFhICAgIHhtbTQseG1tNyAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICAgICAgcHVucGNrbHdkIHhtbTcseG1tMCAgICAgICAgICAgICA7IHhtbTc9KDIwIDMwIDIxIDMxIDIyIDMyIDIzIDMzKQorICAgICAgICBwdW5wY2tod2QgeG1tNCx4bW0wICAgICAgICAgICAgIDsgeG1tND0oMjQgMzQgMjUgMzUgMjYgMzYgMjcgMzcpCisgICAgICAgIG1vdmRxYSAgICB4bW0yLHhtbTEgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgICAgIHB1bnBja2x3ZCB4bW0xLHhtbTUgICAgICAgICAgICAgOyB4bW0xPSg0MCA1MCA0MSA1MSA0MiA1MiA0MyA1MykKKyAgICAgICAgcHVucGNraHdkIHhtbTIseG1tNSAgICAgICAgICAgICA7IHhtbTI9KDQ0IDU0IDQ1IDU1IDQ2IDU2IDQ3IDU3KQogCi0JbW92ZHFhICAgIHhtbTAseG1tMwkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCi0JcHVucGNrbGRxIHhtbTMseG1tNAkJOyB4bW0zPSgwNCAxNCAyNCAzNCAwNSAxNSAyNSAzNSkKLQlwdW5wY2toZHEgeG1tMCx4bW00CQk7IHhtbTA9KDA2IDE2IDI2IDM2IDA3IDE3IDI3IDM3KQotCW1vdmRxYSAgICB4bW01LHhtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQotCXB1bnBja2xkcSB4bW02LHhtbTcJCTsgeG1tNj0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEpCi0JcHVucGNraGRxIHhtbTUseG1tNwkJOyB4bW01PSgwMiAxMiAyMiAzMiAwMyAxMyAyMyAzMykKKyAgICAgICAgbW92ZHFhICAgIHhtbTAseG1tMyAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICAgICAgcHVucGNrbGRxIHhtbTMseG1tNCAgICAgICAgICAgICA7IHhtbTM9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1KQorICAgICAgICBwdW5wY2toZHEgeG1tMCx4bW00ICAgICAgICAgICAgIDsgeG1tMD0oMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCisgICAgICAgIG1vdmRxYSAgICB4bW01LHhtbTYgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgICAgIHB1bnBja2xkcSB4bW02LHhtbTcgICAgICAgICAgICAgOyB4bW02PSgwMCAxMCAyMCAzMCAwMSAxMSAyMSAzMSkKKyAgICAgICAgcHVucGNraGRxIHhtbTUseG1tNyAgICAgICAgICAgICA7IHhtbTU9KDAyIDEyIDIyIDMyIDAzIDEzIDIzIDMzKQogCi0JbW92ZHFhCXhtbTQsIFhNTVdPUkQgW3drKDApXQk7IHhtbTQ9KDYwIDcwIDYxIDcxIDYyIDcyIDYzIDczKQotCW1vdmRxYQl4bW03LCBYTU1XT1JEIFt3aygxKV0JOyB4bW03PSg2NCA3NCA2NSA3NSA2NiA3NiA2NyA3NykKKyAgICAgICAgbW92ZHFhICB4bW00LCBYTU1XT1JEIFt3aygwKV0gICA7IHhtbTQ9KDYwIDcwIDYxIDcxIDYyIDcyIDYzIDczKQorICAgICAgICBtb3ZkcWEgIHhtbTcsIFhNTVdPUkQgW3drKDEpXSAgIDsgeG1tNz0oNjQgNzQgNjUgNzUgNjYgNzYgNjcgNzcpCiAKLQltb3ZkcWEJWE1NV09SRCBbd2soMCldLCB4bW0zCTsgd2soMCk9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1KQotCW1vdmRxYQlYTU1XT1JEIFt3aygxKV0sIHhtbTAJOyB3aygxKT0oMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMCldLCB4bW0zICAgOyB3aygwKT0oMDQgMTQgMjQgMzQgMDUgMTUgMjUgMzUpCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMSldLCB4bW0wICAgOyB3aygxKT0oMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCiAKLQltb3ZkcWEgICAgeG1tMyx4bW0xCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKLQlwdW5wY2tsZHEgeG1tMSx4bW00CQk7IHhtbTE9KDQwIDUwIDYwIDcwIDQxIDUxIDYxIDcxKQotCXB1bnBja2hkcSB4bW0zLHhtbTQJCTsgeG1tMz0oNDIgNTIgNjIgNzIgNDMgNTMgNjMgNzMpCi0JbW92ZHFhICAgIHhtbTAseG1tMgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCi0JcHVucGNrbGRxIHhtbTIseG1tNwkJOyB4bW0yPSg0NCA1NCA2NCA3NCA0NSA1NSA2NSA3NSkKLQlwdW5wY2toZHEgeG1tMCx4bW03CQk7IHhtbTA9KDQ2IDU2IDY2IDc2IDQ3IDU3IDY3IDc3KQorICAgICAgICBtb3ZkcWEgICAgeG1tMyx4bW0xICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgICAgICBwdW5wY2tsZHEgeG1tMSx4bW00ICAgICAgICAgICAgIDsgeG1tMT0oNDAgNTAgNjAgNzAgNDEgNTEgNjEgNzEpCisgICAgICAgIHB1bnBja2hkcSB4bW0zLHhtbTQgICAgICAgICAgICAgOyB4bW0zPSg0MiA1MiA2MiA3MiA0MyA1MyA2MyA3MykKKyAgICAgICAgbW92ZHFhICAgIHhtbTAseG1tMiAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICAgICAgcHVucGNrbGRxIHhtbTIseG1tNyAgICAgICAgICAgICA7IHhtbTI9KDQ0IDU0IDY0IDc0IDQ1IDU1IDY1IDc1KQorICAgICAgICBwdW5wY2toZHEgeG1tMCx4bW03ICAgICAgICAgICAgIDsgeG1tMD0oNDYgNTYgNjYgNzYgNDcgNTcgNjcgNzcpCiAKLQltb3ZkcWEgICAgIHhtbTQseG1tNgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCi0JcHVucGNrbHFkcSB4bW02LHhtbTEJCTsgeG1tNj1jb2wwPSgwMCAxMCAyMCAzMCA0MCA1MCA2MCA3MCkKLQlwdW5wY2tocWRxIHhtbTQseG1tMQkJOyB4bW00PWNvbDE9KDAxIDExIDIxIDMxIDQxIDUxIDYxIDcxKQotCW1vdmRxYSAgICAgeG1tNyx4bW01CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKLQlwdW5wY2tscWRxIHhtbTUseG1tMwkJOyB4bW01PWNvbDI9KDAyIDEyIDIyIDMyIDQyIDUyIDYyIDcyKQotCXB1bnBja2hxZHEgeG1tNyx4bW0zCQk7IHhtbTc9Y29sMz0oMDMgMTMgMjMgMzMgNDMgNTMgNjMgNzMpCisgICAgICAgIG1vdmRxYSAgICAgeG1tNCx4bW02ICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisgICAgICAgIHB1bnBja2xxZHEgeG1tNix4bW0xICAgICAgICAgICAgOyB4bW02PWNvbDA9KDAwIDEwIDIwIDMwIDQwIDUwIDYwIDcwKQorICAgICAgICBwdW5wY2tocWRxIHhtbTQseG1tMSAgICAgICAgICAgIDsgeG1tND1jb2wxPSgwMSAxMSAyMSAzMSA0MSA1MSA2MSA3MSkKKyAgICAgICAgbW92ZHFhICAgICB4bW03LHhtbTUgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKyAgICAgICAgcHVucGNrbHFkcSB4bW01LHhtbTMgICAgICAgICAgICA7IHhtbTU9Y29sMj0oMDIgMTIgMjIgMzIgNDIgNTIgNjIgNzIpCisgICAgICAgIHB1bnBja2hxZHEgeG1tNyx4bW0zICAgICAgICAgICAgOyB4bW03PWNvbDM9KDAzIDEzIDIzIDMzIDQzIDUzIDYzIDczKQogCi0JbW92ZHFhCXhtbTEsIFhNTVdPUkQgW3drKDApXQk7IHhtbTE9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1KQotCW1vdmRxYQl4bW0zLCBYTU1XT1JEIFt3aygxKV0JOyB4bW0zPSgwNiAxNiAyNiAzNiAwNyAxNyAyNyAzNykKKyAgICAgICAgbW92ZHFhICB4bW0xLCBYTU1XT1JEIFt3aygwKV0gICA7IHhtbTE9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1KQorICAgICAgICBtb3ZkcWEgIHhtbTMsIFhNTVdPUkQgW3drKDEpXSAgIDsgeG1tMz0oMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCiAKLQltb3ZkcWEJWE1NV09SRCBbd2soMCldLCB4bW00CTsgd2soMCk9Y29sMQotCW1vdmRxYQlYTU1XT1JEIFt3aygxKV0sIHhtbTcJOyB3aygxKT1jb2wzCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMCldLCB4bW00ICAgOyB3aygwKT1jb2wxCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMSldLCB4bW03ICAgOyB3aygxKT1jb2wzCiAKLQltb3ZkcWEgICAgIHhtbTQseG1tMQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCi0JcHVucGNrbHFkcSB4bW0xLHhtbTIJCTsgeG1tMT1jb2w0PSgwNCAxNCAyNCAzNCA0NCA1NCA2NCA3NCkKLQlwdW5wY2tocWRxIHhtbTQseG1tMgkJOyB4bW00PWNvbDU9KDA1IDE1IDI1IDM1IDQ1IDU1IDY1IDc1KQotCW1vdmRxYSAgICAgeG1tNyx4bW0zCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKLQlwdW5wY2tscWRxIHhtbTMseG1tMAkJOyB4bW0zPWNvbDY9KDA2IDE2IDI2IDM2IDQ2IDU2IDY2IDc2KQotCXB1bnBja2hxZHEgeG1tNyx4bW0wCQk7IHhtbTc9Y29sNz0oMDcgMTcgMjcgMzcgNDcgNTcgNjcgNzcpCisgICAgICAgIG1vdmRxYSAgICAgeG1tNCx4bW0xICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisgICAgICAgIHB1bnBja2xxZHEgeG1tMSx4bW0yICAgICAgICAgICAgOyB4bW0xPWNvbDQ9KDA0IDE0IDI0IDM0IDQ0IDU0IDY0IDc0KQorICAgICAgICBwdW5wY2tocWRxIHhtbTQseG1tMiAgICAgICAgICAgIDsgeG1tND1jb2w1PSgwNSAxNSAyNSAzNSA0NSA1NSA2NSA3NSkKKyAgICAgICAgbW92ZHFhICAgICB4bW03LHhtbTMgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKyAgICAgICAgcHVucGNrbHFkcSB4bW0zLHhtbTAgICAgICAgICAgICA7IHhtbTM9Y29sNj0oMDYgMTYgMjYgMzYgNDYgNTYgNjYgNzYpCisgICAgICAgIHB1bnBja2hxZHEgeG1tNyx4bW0wICAgICAgICAgICAgOyB4bW03PWNvbDc9KDA3IDE3IDI3IDM3IDQ3IDU3IDY3IDc3KQogLmNvbHVtbl9lbmQ6CiAKLQk7IC0tIFByZWZldGNoIHRoZSBuZXh0IGNvZWZmaWNpZW50IGJsb2NrCisgICAgICAgIDsgLS0gUHJlZmV0Y2ggdGhlIG5leHQgY29lZmZpY2llbnQgYmxvY2sKIAotCXByZWZldGNobnRhIFtyc2kgKyBEQ1RTSVpFMipTSVpFT0ZfSkNPRUYgKyAwKjMyXQotCXByZWZldGNobnRhIFtyc2kgKyBEQ1RTSVpFMipTSVpFT0ZfSkNPRUYgKyAxKjMyXQotCXByZWZldGNobnRhIFtyc2kgKyBEQ1RTSVpFMipTSVpFT0ZfSkNPRUYgKyAyKjMyXQotCXByZWZldGNobnRhIFtyc2kgKyBEQ1RTSVpFMipTSVpFT0ZfSkNPRUYgKyAzKjMyXQorICAgICAgICBwcmVmZXRjaG50YSBbcnNpICsgRENUU0laRTIqU0laRU9GX0pDT0VGICsgMCozMl0KKyAgICAgICAgcHJlZmV0Y2hudGEgW3JzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDEqMzJdCisgICAgICAgIHByZWZldGNobnRhIFtyc2kgKyBEQ1RTSVpFMipTSVpFT0ZfSkNPRUYgKyAyKjMyXQorICAgICAgICBwcmVmZXRjaG50YSBbcnNpICsgRENUU0laRTIqU0laRU9GX0pDT0VGICsgMyozMl0KIAotCTsgLS0tLSBQYXNzIDI6IHByb2Nlc3Mgcm93cyBmcm9tIHdvcmsgYXJyYXksIHN0b3JlIGludG8gb3V0cHV0IGFycmF5LgorICAgICAgICA7IC0tLS0gUGFzcyAyOiBwcm9jZXNzIHJvd3MgZnJvbSB3b3JrIGFycmF5LCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4KIAotCW1vdglyYXgsIFtvcmlnaW5hbF9yYnBdCi0JbW92CXJkaSwgcjEyCTsgKEpTQU1QUk9XICopCi0JbW92CXJheCwgcjEzCisgICAgICAgIG1vdiAgICAgcmF4LCBbb3JpZ2luYWxfcmJwXQorICAgICAgICBtb3YgICAgIHJkaSwgcjEyICAgICAgICA7IChKU0FNUFJPVyAqKQorICAgICAgICBtb3YgICAgIHJheCwgcjEzCiAKLQk7IC0tIEV2ZW4gcGFydAorICAgICAgICA7IC0tIEV2ZW4gcGFydAogCi0JOyB4bW02PWNvbDAsIHhtbTU9Y29sMiwgeG1tMT1jb2w0LCB4bW0zPWNvbDYKKyAgICAgICAgOyB4bW02PWNvbDAsIHhtbTU9Y29sMiwgeG1tMT1jb2w0LCB4bW0zPWNvbDYKIAotCW1vdmRxYQl4bW0yLHhtbTYKLQltb3ZkcWEJeG1tMCx4bW01Ci0JcHN1YncJeG1tNix4bW0xCQk7IHhtbTY9dG1wMTEKLQlwc3Vidwl4bW01LHhtbTMKLQlwYWRkdwl4bW0yLHhtbTEJCTsgeG1tMj10bXAxMAotCXBhZGR3CXhtbTAseG1tMwkJOyB4bW0wPXRtcDEzCisgICAgICAgIG1vdmRxYSAgeG1tMix4bW02CisgICAgICAgIG1vdmRxYSAgeG1tMCx4bW01CisgICAgICAgIHBzdWJ3ICAgeG1tNix4bW0xICAgICAgICAgICAgICAgOyB4bW02PXRtcDExCisgICAgICAgIHBzdWJ3ICAgeG1tNSx4bW0zCisgICAgICAgIHBhZGR3ICAgeG1tMix4bW0xICAgICAgICAgICAgICAgOyB4bW0yPXRtcDEwCisgICAgICAgIHBhZGR3ICAgeG1tMCx4bW0zICAgICAgICAgICAgICAgOyB4bW0wPXRtcDEzCiAKLQlwc2xsdwl4bW01LFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCi0JcG11bGh3CXhtbTUsW3JlbCBQV19GMTQxNF0KLQlwc3Vidwl4bW01LHhtbTAJCTsgeG1tNT10bXAxMgorICAgICAgICBwc2xsdyAgIHhtbTUsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKyAgICAgICAgcG11bGh3ICB4bW01LFtyZWwgUFdfRjE0MTRdCisgICAgICAgIHBzdWJ3ICAgeG1tNSx4bW0wICAgICAgICAgICAgICAgOyB4bW01PXRtcDEyCiAKLQltb3ZkcWEJeG1tMSx4bW0yCi0JbW92ZHFhCXhtbTMseG1tNgotCXBzdWJ3CXhtbTIseG1tMAkJOyB4bW0yPXRtcDMKLQlwc3Vidwl4bW02LHhtbTUJCTsgeG1tNj10bXAyCi0JcGFkZHcJeG1tMSx4bW0wCQk7IHhtbTE9dG1wMAotCXBhZGR3CXhtbTMseG1tNQkJOyB4bW0zPXRtcDEKKyAgICAgICAgbW92ZHFhICB4bW0xLHhtbTIKKyAgICAgICAgbW92ZHFhICB4bW0zLHhtbTYKKyAgICAgICAgcHN1YncgICB4bW0yLHhtbTAgICAgICAgICAgICAgICA7IHhtbTI9dG1wMworICAgICAgICBwc3VidyAgIHhtbTYseG1tNSAgICAgICAgICAgICAgIDsgeG1tNj10bXAyCisgICAgICAgIHBhZGR3ICAgeG1tMSx4bW0wICAgICAgICAgICAgICAgOyB4bW0xPXRtcDAKKyAgICAgICAgcGFkZHcgICB4bW0zLHhtbTUgICAgICAgICAgICAgICA7IHhtbTM9dG1wMQogCi0JbW92ZHFhCXhtbTAsIFhNTVdPUkQgW3drKDApXQk7IHhtbTA9Y29sMQotCW1vdmRxYQl4bW01LCBYTU1XT1JEIFt3aygxKV0JOyB4bW01PWNvbDMKKyAgICAgICAgbW92ZHFhICB4bW0wLCBYTU1XT1JEIFt3aygwKV0gICA7IHhtbTA9Y29sMQorICAgICAgICBtb3ZkcWEgIHhtbTUsIFhNTVdPUkQgW3drKDEpXSAgIDsgeG1tNT1jb2wzCiAKLQltb3ZkcWEJWE1NV09SRCBbd2soMCldLCB4bW0yCTsgd2soMCk9dG1wMwotCW1vdmRxYQlYTU1XT1JEIFt3aygxKV0sIHhtbTYJOyB3aygxKT10bXAyCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMCldLCB4bW0yICAgOyB3aygwKT10bXAzCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMSldLCB4bW02ICAgOyB3aygxKT10bXAyCiAKLQk7IC0tIE9kZCBwYXJ0CisgICAgICAgIDsgLS0gT2RkIHBhcnQKIAotCTsgeG1tMD1jb2wxLCB4bW01PWNvbDMsIHhtbTQ9Y29sNSwgeG1tNz1jb2w3CisgICAgICAgIDsgeG1tMD1jb2wxLCB4bW01PWNvbDMsIHhtbTQ9Y29sNSwgeG1tNz1jb2w3CiAKLQltb3ZkcWEJeG1tMix4bW0wCi0JbW92ZHFhCXhtbTYseG1tNAotCXBzdWJ3CXhtbTAseG1tNwkJOyB4bW0wPXoxMgotCXBzdWJ3CXhtbTQseG1tNQkJOyB4bW00PXoxMAotCXBhZGR3CXhtbTIseG1tNwkJOyB4bW0yPXoxMQotCXBhZGR3CXhtbTYseG1tNQkJOyB4bW02PXoxMworICAgICAgICBtb3ZkcWEgIHhtbTIseG1tMAorICAgICAgICBtb3ZkcWEgIHhtbTYseG1tNAorICAgICAgICBwc3VidyAgIHhtbTAseG1tNyAgICAgICAgICAgICAgIDsgeG1tMD16MTIKKyAgICAgICAgcHN1YncgICB4bW00LHhtbTUgICAgICAgICAgICAgICA7IHhtbTQ9ejEwCisgICAgICAgIHBhZGR3ICAgeG1tMix4bW03ICAgICAgICAgICAgICAgOyB4bW0yPXoxMQorICAgICAgICBwYWRkdyAgIHhtbTYseG1tNSAgICAgICAgICAgICAgIDsgeG1tNj16MTMKIAotCW1vdmRxYQl4bW03LHhtbTQJCTsgeG1tNz16MTAodW5zY2FsZWQpCi0JcHNsbHcJeG1tMCxQUkVfTVVMVElQTFlfU0NBTEVfQklUUwotCXBzbGx3CXhtbTQsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKyAgICAgICAgbW92ZHFhICB4bW03LHhtbTQgICAgICAgICAgICAgICA7IHhtbTc9ejEwKHVuc2NhbGVkKQorICAgICAgICBwc2xsdyAgIHhtbTAsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKyAgICAgICAgcHNsbHcgICB4bW00LFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCiAKLQltb3ZkcWEJeG1tNSx4bW0yCi0JcHN1YncJeG1tMix4bW02Ci0JcGFkZHcJeG1tNSx4bW02CQk7IHhtbTU9dG1wNworICAgICAgICBtb3ZkcWEgIHhtbTUseG1tMgorICAgICAgICBwc3VidyAgIHhtbTIseG1tNgorICAgICAgICBwYWRkdyAgIHhtbTUseG1tNiAgICAgICAgICAgICAgIDsgeG1tNT10bXA3CiAKLQlwc2xsdwl4bW0yLFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCi0JcG11bGh3CXhtbTIsW3JlbCBQV19GMTQxNF0JOyB4bW0yPXRtcDExCisgICAgICAgIHBzbGx3ICAgeG1tMixQUkVfTVVMVElQTFlfU0NBTEVfQklUUworICAgICAgICBwbXVsaHcgIHhtbTIsW3JlbCBQV19GMTQxNF0gICAgIDsgeG1tMj10bXAxMQogCi0JOyBUbyBhdm9pZCBvdmVyZmxvdy4uLgotCTsKLQk7IChPcmlnaW5hbCkKLQk7IHRtcDEyID0gLTIuNjEzMTI1OTMwICogejEwICsgejU7Ci0JOwotCTsgKFRoaXMgaW1wbGVtZW50YXRpb24pCi0JOyB0bXAxMiA9ICgtMS42MTMxMjU5MzAgLSAxKSAqIHoxMCArIHo1OwotCTsgICAgICAgPSAtMS42MTMxMjU5MzAgKiB6MTAgLSB6MTAgKyB6NTsKKyAgICAgICAgOyBUbyBhdm9pZCBvdmVyZmxvdy4uLgorICAgICAgICA7CisgICAgICAgIDsgKE9yaWdpbmFsKQorICAgICAgICA7IHRtcDEyID0gLTIuNjEzMTI1OTMwICogejEwICsgejU7CisgICAgICAgIDsKKyAgICAgICAgOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKyAgICAgICAgOyB0bXAxMiA9ICgtMS42MTMxMjU5MzAgLSAxKSAqIHoxMCArIHo1OworICAgICAgICA7ICAgICAgID0gLTEuNjEzMTI1OTMwICogejEwIC0gejEwICsgejU7CiAKLQltb3ZkcWEJeG1tNix4bW00Ci0JcGFkZHcJeG1tNCx4bW0wCi0JcG11bGh3CXhtbTQsW3JlbCBQV19GMTg0N10JOyB4bW00PXo1Ci0JcG11bGh3CXhtbTYsW3JlbCBQV19NRjE2MTNdCi0JcG11bGh3CXhtbTAsW3JlbCBQV19GMTA4Ml0KLQlwc3Vidwl4bW02LHhtbTcKLQlwc3Vidwl4bW0wLHhtbTQJCTsgeG1tMD10bXAxMAotCXBhZGR3CXhtbTYseG1tNAkJOyB4bW02PXRtcDEyCisgICAgICAgIG1vdmRxYSAgeG1tNix4bW00CisgICAgICAgIHBhZGR3ICAgeG1tNCx4bW0wCisgICAgICAgIHBtdWxodyAgeG1tNCxbcmVsIFBXX0YxODQ3XSAgICAgOyB4bW00PXo1CisgICAgICAgIHBtdWxodyAgeG1tNixbcmVsIFBXX01GMTYxM10KKyAgICAgICAgcG11bGh3ICB4bW0wLFtyZWwgUFdfRjEwODJdCisgICAgICAgIHBzdWJ3ICAgeG1tNix4bW03CisgICAgICAgIHBzdWJ3ICAgeG1tMCx4bW00ICAgICAgICAgICAgICAgOyB4bW0wPXRtcDEwCisgICAgICAgIHBhZGR3ICAgeG1tNix4bW00ICAgICAgICAgICAgICAgOyB4bW02PXRtcDEyCiAKLQk7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQorICAgICAgICA7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQogCi0JcHN1YncJeG1tNix4bW01CQk7IHhtbTY9dG1wNgotCW1vdmRxYQl4bW03LHhtbTEKLQltb3ZkcWEJeG1tNCx4bW0zCi0JcGFkZHcJeG1tMSx4bW01CQk7IHhtbTE9ZGF0YTA9KDAwIDEwIDIwIDMwIDQwIDUwIDYwIDcwKQotCXBhZGR3CXhtbTMseG1tNgkJOyB4bW0zPWRhdGExPSgwMSAxMSAyMSAzMSA0MSA1MSA2MSA3MSkKLQlwc3Jhdwl4bW0xLChQQVNTMV9CSVRTKzMpCTsgZGVzY2FsZQotCXBzcmF3CXhtbTMsKFBBU1MxX0JJVFMrMykJOyBkZXNjYWxlCi0JcHN1YncJeG1tNyx4bW01CQk7IHhtbTc9ZGF0YTc9KDA3IDE3IDI3IDM3IDQ3IDU3IDY3IDc3KQotCXBzdWJ3CXhtbTQseG1tNgkJOyB4bW00PWRhdGE2PSgwNiAxNiAyNiAzNiA0NiA1NiA2NiA3NikKLQlwc3Jhdwl4bW03LChQQVNTMV9CSVRTKzMpCTsgZGVzY2FsZQotCXBzcmF3CXhtbTQsKFBBU1MxX0JJVFMrMykJOyBkZXNjYWxlCi0JcHN1YncJeG1tMix4bW02CQk7IHhtbTI9dG1wNQorICAgICAgICBwc3VidyAgIHhtbTYseG1tNSAgICAgICAgICAgICAgIDsgeG1tNj10bXA2CisgICAgICAgIG1vdmRxYSAgeG1tNyx4bW0xCisgICAgICAgIG1vdmRxYSAgeG1tNCx4bW0zCisgICAgICAgIHBhZGR3ICAgeG1tMSx4bW01ICAgICAgICAgICAgICAgOyB4bW0xPWRhdGEwPSgwMCAxMCAyMCAzMCA0MCA1MCA2MCA3MCkKKyAgICAgICAgcGFkZHcgICB4bW0zLHhtbTYgICAgICAgICAgICAgICA7IHhtbTM9ZGF0YTE9KDAxIDExIDIxIDMxIDQxIDUxIDYxIDcxKQorICAgICAgICBwc3JhdyAgIHhtbTEsKFBBU1MxX0JJVFMrMykgICAgIDsgZGVzY2FsZQorICAgICAgICBwc3JhdyAgIHhtbTMsKFBBU1MxX0JJVFMrMykgICAgIDsgZGVzY2FsZQorICAgICAgICBwc3VidyAgIHhtbTcseG1tNSAgICAgICAgICAgICAgIDsgeG1tNz1kYXRhNz0oMDcgMTcgMjcgMzcgNDcgNTcgNjcgNzcpCisgICAgICAgIHBzdWJ3ICAgeG1tNCx4bW02ICAgICAgICAgICAgICAgOyB4bW00PWRhdGE2PSgwNiAxNiAyNiAzNiA0NiA1NiA2NiA3NikKKyAgICAgICAgcHNyYXcgICB4bW03LChQQVNTMV9CSVRTKzMpICAgICA7IGRlc2NhbGUKKyAgICAgICAgcHNyYXcgICB4bW00LChQQVNTMV9CSVRTKzMpICAgICA7IGRlc2NhbGUKKyAgICAgICAgcHN1YncgICB4bW0yLHhtbTYgICAgICAgICAgICAgICA7IHhtbTI9dG1wNQogCi0JcGFja3Nzd2IgIHhtbTEseG1tNAk7IHhtbTE9KDAwIDEwIDIwIDMwIDQwIDUwIDYwIDcwIDA2IDE2IDI2IDM2IDQ2IDU2IDY2IDc2KQotCXBhY2tzc3diICB4bW0zLHhtbTcJOyB4bW0zPSgwMSAxMSAyMSAzMSA0MSA1MSA2MSA3MSAwNyAxNyAyNyAzNyA0NyA1NyA2NyA3NykKKyAgICAgICAgcGFja3Nzd2IgIHhtbTEseG1tNCAgICAgOyB4bW0xPSgwMCAxMCAyMCAzMCA0MCA1MCA2MCA3MCAwNiAxNiAyNiAzNiA0NiA1NiA2NiA3NikKKyAgICAgICAgcGFja3Nzd2IgIHhtbTMseG1tNyAgICAgOyB4bW0zPSgwMSAxMSAyMSAzMSA0MSA1MSA2MSA3MSAwNyAxNyAyNyAzNyA0NyA1NyA2NyA3NykKIAotCW1vdmRxYQl4bW01LCBYTU1XT1JEIFt3aygxKV0JOyB4bW01PXRtcDIKLQltb3ZkcWEJeG1tNiwgWE1NV09SRCBbd2soMCldCTsgeG1tNj10bXAzCisgICAgICAgIG1vdmRxYSAgeG1tNSwgWE1NV09SRCBbd2soMSldICAgOyB4bW01PXRtcDIKKyAgICAgICAgbW92ZHFhICB4bW02LCBYTU1XT1JEIFt3aygwKV0gICA7IHhtbTY9dG1wMwogCi0JcGFkZHcJeG1tMCx4bW0yCQk7IHhtbTA9dG1wNAotCW1vdmRxYQl4bW00LHhtbTUKLQltb3ZkcWEJeG1tNyx4bW02Ci0JcGFkZHcJeG1tNSx4bW0yCQk7IHhtbTU9ZGF0YTI9KDAyIDEyIDIyIDMyIDQyIDUyIDYyIDcyKQotCXBhZGR3CXhtbTYseG1tMAkJOyB4bW02PWRhdGE0PSgwNCAxNCAyNCAzNCA0NCA1NCA2NCA3NCkKLQlwc3Jhdwl4bW01LChQQVNTMV9CSVRTKzMpCTsgZGVzY2FsZQotCXBzcmF3CXhtbTYsKFBBU1MxX0JJVFMrMykJOyBkZXNjYWxlCi0JcHN1YncJeG1tNCx4bW0yCQk7IHhtbTQ9ZGF0YTU9KDA1IDE1IDI1IDM1IDQ1IDU1IDY1IDc1KQotCXBzdWJ3CXhtbTcseG1tMAkJOyB4bW03PWRhdGEzPSgwMyAxMyAyMyAzMyA0MyA1MyA2MyA3MykKLQlwc3Jhdwl4bW00LChQQVNTMV9CSVRTKzMpCTsgZGVzY2FsZQotCXBzcmF3CXhtbTcsKFBBU1MxX0JJVFMrMykJOyBkZXNjYWxlCisgICAgICAgIHBhZGR3ICAgeG1tMCx4bW0yICAgICAgICAgICAgICAgOyB4bW0wPXRtcDQKKyAgICAgICAgbW92ZHFhICB4bW00LHhtbTUKKyAgICAgICAgbW92ZHFhICB4bW03LHhtbTYKKyAgICAgICAgcGFkZHcgICB4bW01LHhtbTIgICAgICAgICAgICAgICA7IHhtbTU9ZGF0YTI9KDAyIDEyIDIyIDMyIDQyIDUyIDYyIDcyKQorICAgICAgICBwYWRkdyAgIHhtbTYseG1tMCAgICAgICAgICAgICAgIDsgeG1tNj1kYXRhND0oMDQgMTQgMjQgMzQgNDQgNTQgNjQgNzQpCisgICAgICAgIHBzcmF3ICAgeG1tNSwoUEFTUzFfQklUUyszKSAgICAgOyBkZXNjYWxlCisgICAgICAgIHBzcmF3ICAgeG1tNiwoUEFTUzFfQklUUyszKSAgICAgOyBkZXNjYWxlCisgICAgICAgIHBzdWJ3ICAgeG1tNCx4bW0yICAgICAgICAgICAgICAgOyB4bW00PWRhdGE1PSgwNSAxNSAyNSAzNSA0NSA1NSA2NSA3NSkKKyAgICAgICAgcHN1YncgICB4bW03LHhtbTAgICAgICAgICAgICAgICA7IHhtbTc9ZGF0YTM9KDAzIDEzIDIzIDMzIDQzIDUzIDYzIDczKQorICAgICAgICBwc3JhdyAgIHhtbTQsKFBBU1MxX0JJVFMrMykgICAgIDsgZGVzY2FsZQorICAgICAgICBwc3JhdyAgIHhtbTcsKFBBU1MxX0JJVFMrMykgICAgIDsgZGVzY2FsZQogCi0JbW92ZHFhICAgIHhtbTIsW3JlbCBQQl9DRU5URVJKU0FNUF0JOyB4bW0yPVtyZWwgUEJfQ0VOVEVSSlNBTVBdCisgICAgICAgIG1vdmRxYSAgICB4bW0yLFtyZWwgUEJfQ0VOVEVSSlNBTVBdICAgICA7IHhtbTI9W3JlbCBQQl9DRU5URVJKU0FNUF0KIAotCXBhY2tzc3diICB4bW01LHhtbTYJOyB4bW01PSgwMiAxMiAyMiAzMiA0MiA1MiA2MiA3MiAwNCAxNCAyNCAzNCA0NCA1NCA2NCA3NCkKLQlwYWNrc3N3YiAgeG1tNyx4bW00CTsgeG1tNz0oMDMgMTMgMjMgMzMgNDMgNTMgNjMgNzMgMDUgMTUgMjUgMzUgNDUgNTUgNjUgNzUpCisgICAgICAgIHBhY2tzc3diICB4bW01LHhtbTYgICAgIDsgeG1tNT0oMDIgMTIgMjIgMzIgNDIgNTIgNjIgNzIgMDQgMTQgMjQgMzQgNDQgNTQgNjQgNzQpCisgICAgICAgIHBhY2tzc3diICB4bW03LHhtbTQgICAgIDsgeG1tNz0oMDMgMTMgMjMgMzMgNDMgNTMgNjMgNzMgMDUgMTUgMjUgMzUgNDUgNTUgNjUgNzUpCiAKLQlwYWRkYiAgICAgeG1tMSx4bW0yCi0JcGFkZGIgICAgIHhtbTMseG1tMgotCXBhZGRiICAgICB4bW01LHhtbTIKLQlwYWRkYiAgICAgeG1tNyx4bW0yCisgICAgICAgIHBhZGRiICAgICB4bW0xLHhtbTIKKyAgICAgICAgcGFkZGIgICAgIHhtbTMseG1tMgorICAgICAgICBwYWRkYiAgICAgeG1tNSx4bW0yCisgICAgICAgIHBhZGRiICAgICB4bW03LHhtbTIKIAotCW1vdmRxYSAgICB4bW0wLHhtbTEJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCi0JcHVucGNrbGJ3IHhtbTEseG1tMwk7IHhtbTE9KDAwIDAxIDEwIDExIDIwIDIxIDMwIDMxIDQwIDQxIDUwIDUxIDYwIDYxIDcwIDcxKQotCXB1bnBja2hidyB4bW0wLHhtbTMJOyB4bW0wPSgwNiAwNyAxNiAxNyAyNiAyNyAzNiAzNyA0NiA0NyA1NiA1NyA2NiA2NyA3NiA3NykKLQltb3ZkcWEgICAgeG1tNix4bW01CTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQotCXB1bnBja2xidyB4bW01LHhtbTcJOyB4bW01PSgwMiAwMyAxMiAxMyAyMiAyMyAzMiAzMyA0MiA0MyA1MiA1MyA2MiA2MyA3MiA3MykKLQlwdW5wY2toYncgeG1tNix4bW03CTsgeG1tNj0oMDQgMDUgMTQgMTUgMjQgMjUgMzQgMzUgNDQgNDUgNTQgNTUgNjQgNjUgNzQgNzUpCisgICAgICAgIG1vdmRxYSAgICB4bW0wLHhtbTEgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgICAgICBwdW5wY2tsYncgeG1tMSx4bW0zICAgICA7IHhtbTE9KDAwIDAxIDEwIDExIDIwIDIxIDMwIDMxIDQwIDQxIDUwIDUxIDYwIDYxIDcwIDcxKQorICAgICAgICBwdW5wY2toYncgeG1tMCx4bW0zICAgICA7IHhtbTA9KDA2IDA3IDE2IDE3IDI2IDI3IDM2IDM3IDQ2IDQ3IDU2IDU3IDY2IDY3IDc2IDc3KQorICAgICAgICBtb3ZkcWEgICAgeG1tNix4bW01ICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICAgICAgcHVucGNrbGJ3IHhtbTUseG1tNyAgICAgOyB4bW01PSgwMiAwMyAxMiAxMyAyMiAyMyAzMiAzMyA0MiA0MyA1MiA1MyA2MiA2MyA3MiA3MykKKyAgICAgICAgcHVucGNraGJ3IHhtbTYseG1tNyAgICAgOyB4bW02PSgwNCAwNSAxNCAxNSAyNCAyNSAzNCAzNSA0NCA0NSA1NCA1NSA2NCA2NSA3NCA3NSkKIAotCW1vdmRxYSAgICB4bW00LHhtbTEJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCi0JcHVucGNrbHdkIHhtbTEseG1tNQk7IHhtbTE9KDAwIDAxIDAyIDAzIDEwIDExIDEyIDEzIDIwIDIxIDIyIDIzIDMwIDMxIDMyIDMzKQotCXB1bnBja2h3ZCB4bW00LHhtbTUJOyB4bW00PSg0MCA0MSA0MiA0MyA1MCA1MSA1MiA1MyA2MCA2MSA2MiA2MyA3MCA3MSA3MiA3MykKLQltb3ZkcWEgICAgeG1tMix4bW02CTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQotCXB1bnBja2x3ZCB4bW02LHhtbTAJOyB4bW02PSgwNCAwNSAwNiAwNyAxNCAxNSAxNiAxNyAyNCAyNSAyNiAyNyAzNCAzNSAzNiAzNykKLQlwdW5wY2tod2QgeG1tMix4bW0wCTsgeG1tMj0oNDQgNDUgNDYgNDcgNTQgNTUgNTYgNTcgNjQgNjUgNjYgNjcgNzQgNzUgNzYgNzcpCisgICAgICAgIG1vdmRxYSAgICB4bW00LHhtbTEgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgICAgICBwdW5wY2tsd2QgeG1tMSx4bW01ICAgICA7IHhtbTE9KDAwIDAxIDAyIDAzIDEwIDExIDEyIDEzIDIwIDIxIDIyIDIzIDMwIDMxIDMyIDMzKQorICAgICAgICBwdW5wY2tod2QgeG1tNCx4bW01ICAgICA7IHhtbTQ9KDQwIDQxIDQyIDQzIDUwIDUxIDUyIDUzIDYwIDYxIDYyIDYzIDcwIDcxIDcyIDczKQorICAgICAgICBtb3ZkcWEgICAgeG1tMix4bW02ICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICAgICAgcHVucGNrbHdkIHhtbTYseG1tMCAgICAgOyB4bW02PSgwNCAwNSAwNiAwNyAxNCAxNSAxNiAxNyAyNCAyNSAyNiAyNyAzNCAzNSAzNiAzNykKKyAgICAgICAgcHVucGNraHdkIHhtbTIseG1tMCAgICAgOyB4bW0yPSg0NCA0NSA0NiA0NyA1NCA1NSA1NiA1NyA2NCA2NSA2NiA2NyA3NCA3NSA3NiA3NykKIAotCW1vdmRxYSAgICB4bW0zLHhtbTEJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCi0JcHVucGNrbGRxIHhtbTEseG1tNgk7IHhtbTE9KDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3IDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3KQotCXB1bnBja2hkcSB4bW0zLHhtbTYJOyB4bW0zPSgyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNyAzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNykKLQltb3ZkcWEgICAgeG1tNyx4bW00CTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQotCXB1bnBja2xkcSB4bW00LHhtbTIJOyB4bW00PSg0MCA0MSA0MiA0MyA0NCA0NSA0NiA0NyA1MCA1MSA1MiA1MyA1NCA1NSA1NiA1NykKLQlwdW5wY2toZHEgeG1tNyx4bW0yCTsgeG1tNz0oNjAgNjEgNjIgNjMgNjQgNjUgNjYgNjcgNzAgNzEgNzIgNzMgNzQgNzUgNzYgNzcpCisgICAgICAgIG1vdmRxYSAgICB4bW0zLHhtbTEgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorICAgICAgICBwdW5wY2tsZHEgeG1tMSx4bW02ICAgICA7IHhtbTE9KDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3IDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3KQorICAgICAgICBwdW5wY2toZHEgeG1tMyx4bW02ICAgICA7IHhtbTM9KDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3IDMwIDMxIDMyIDMzIDM0IDM1IDM2IDM3KQorICAgICAgICBtb3ZkcWEgICAgeG1tNyx4bW00ICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKyAgICAgICAgcHVucGNrbGRxIHhtbTQseG1tMiAgICAgOyB4bW00PSg0MCA0MSA0MiA0MyA0NCA0NSA0NiA0NyA1MCA1MSA1MiA1MyA1NCA1NSA1NiA1NykKKyAgICAgICAgcHVucGNraGRxIHhtbTcseG1tMiAgICAgOyB4bW03PSg2MCA2MSA2MiA2MyA2NCA2NSA2NiA2NyA3MCA3MSA3MiA3MyA3NCA3NSA3NiA3NykKIAotCXBzaHVmZAl4bW01LHhtbTEsMHg0RQk7IHhtbTU9KDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3IDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3KQotCXBzaHVmZAl4bW0wLHhtbTMsMHg0RQk7IHhtbTA9KDMwIDMxIDMyIDMzIDM0IDM1IDM2IDM3IDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3KQotCXBzaHVmZAl4bW02LHhtbTQsMHg0RQk7IHhtbTY9KDUwIDUxIDUyIDUzIDU0IDU1IDU2IDU3IDQwIDQxIDQyIDQzIDQ0IDQ1IDQ2IDQ3KQotCXBzaHVmZAl4bW0yLHhtbTcsMHg0RQk7IHhtbTI9KDcwIDcxIDcyIDczIDc0IDc1IDc2IDc3IDYwIDYxIDYyIDYzIDY0IDY1IDY2IDY3KQorICAgICAgICBwc2h1ZmQgIHhtbTUseG1tMSwweDRFICA7IHhtbTU9KDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3IDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3KQorICAgICAgICBwc2h1ZmQgIHhtbTAseG1tMywweDRFICA7IHhtbTA9KDMwIDMxIDMyIDMzIDM0IDM1IDM2IDM3IDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3KQorICAgICAgICBwc2h1ZmQgIHhtbTYseG1tNCwweDRFICA7IHhtbTY9KDUwIDUxIDUyIDUzIDU0IDU1IDU2IDU3IDQwIDQxIDQyIDQzIDQ0IDQ1IDQ2IDQ3KQorICAgICAgICBwc2h1ZmQgIHhtbTIseG1tNywweDRFICA7IHhtbTI9KDcwIDcxIDcyIDczIDc0IDc1IDc2IDc3IDYwIDYxIDYyIDYzIDY0IDY1IDY2IDY3KQogCi0JbW92CXJkeCwgSlNBTVBST1cgW3JkaSswKlNJWkVPRl9KU0FNUFJPV10KLQltb3YJcnNpLCBKU0FNUFJPVyBbcmRpKzIqU0laRU9GX0pTQU1QUk9XXQotCW1vdnEJWE1NX01NV09SRCBbcmR4K3JheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTEKLQltb3ZxCVhNTV9NTVdPUkQgW3JzaStyYXgqU0laRU9GX0pTQU1QTEVdLCB4bW0zCi0JbW92CXJkeCwgSlNBTVBST1cgW3JkaSs0KlNJWkVPRl9KU0FNUFJPV10KLQltb3YJcnNpLCBKU0FNUFJPVyBbcmRpKzYqU0laRU9GX0pTQU1QUk9XXQotCW1vdnEJWE1NX01NV09SRCBbcmR4K3JheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTQKLQltb3ZxCVhNTV9NTVdPUkQgW3JzaStyYXgqU0laRU9GX0pTQU1QTEVdLCB4bW03CisgICAgICAgIG1vdiAgICAgcmR4LCBKU0FNUFJPVyBbcmRpKzAqU0laRU9GX0pTQU1QUk9XXQorICAgICAgICBtb3YgICAgIHJzaSwgSlNBTVBST1cgW3JkaSsyKlNJWkVPRl9KU0FNUFJPV10KKyAgICAgICAgbW92cSAgICBYTU1fTU1XT1JEIFtyZHgrcmF4KlNJWkVPRl9KU0FNUExFXSwgeG1tMQorICAgICAgICBtb3ZxICAgIFhNTV9NTVdPUkQgW3JzaStyYXgqU0laRU9GX0pTQU1QTEVdLCB4bW0zCisgICAgICAgIG1vdiAgICAgcmR4LCBKU0FNUFJPVyBbcmRpKzQqU0laRU9GX0pTQU1QUk9XXQorICAgICAgICBtb3YgICAgIHJzaSwgSlNBTVBST1cgW3JkaSs2KlNJWkVPRl9KU0FNUFJPV10KKyAgICAgICAgbW92cSAgICBYTU1fTU1XT1JEIFtyZHgrcmF4KlNJWkVPRl9KU0FNUExFXSwgeG1tNAorICAgICAgICBtb3ZxICAgIFhNTV9NTVdPUkQgW3JzaStyYXgqU0laRU9GX0pTQU1QTEVdLCB4bW03CiAKLQltb3YJcmR4LCBKU0FNUFJPVyBbcmRpKzEqU0laRU9GX0pTQU1QUk9XXQotCW1vdglyc2ksIEpTQU1QUk9XIFtyZGkrMypTSVpFT0ZfSlNBTVBST1ddCi0JbW92cQlYTU1fTU1XT1JEIFtyZHgrcmF4KlNJWkVPRl9KU0FNUExFXSwgeG1tNQotCW1vdnEJWE1NX01NV09SRCBbcnNpK3JheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTAKLQltb3YJcmR4LCBKU0FNUFJPVyBbcmRpKzUqU0laRU9GX0pTQU1QUk9XXQotCW1vdglyc2ksIEpTQU1QUk9XIFtyZGkrNypTSVpFT0ZfSlNBTVBST1ddCi0JbW92cQlYTU1fTU1XT1JEIFtyZHgrcmF4KlNJWkVPRl9KU0FNUExFXSwgeG1tNgotCW1vdnEJWE1NX01NV09SRCBbcnNpK3JheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTIKKyAgICAgICAgbW92ICAgICByZHgsIEpTQU1QUk9XIFtyZGkrMSpTSVpFT0ZfSlNBTVBST1ddCisgICAgICAgIG1vdiAgICAgcnNpLCBKU0FNUFJPVyBbcmRpKzMqU0laRU9GX0pTQU1QUk9XXQorICAgICAgICBtb3ZxICAgIFhNTV9NTVdPUkQgW3JkeCtyYXgqU0laRU9GX0pTQU1QTEVdLCB4bW01CisgICAgICAgIG1vdnEgICAgWE1NX01NV09SRCBbcnNpK3JheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTAKKyAgICAgICAgbW92ICAgICByZHgsIEpTQU1QUk9XIFtyZGkrNSpTSVpFT0ZfSlNBTVBST1ddCisgICAgICAgIG1vdiAgICAgcnNpLCBKU0FNUFJPVyBbcmRpKzcqU0laRU9GX0pTQU1QUk9XXQorICAgICAgICBtb3ZxICAgIFhNTV9NTVdPUkQgW3JkeCtyYXgqU0laRU9GX0pTQU1QTEVdLCB4bW02CisgICAgICAgIG1vdnEgICAgWE1NX01NV09SRCBbcnNpK3JheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTIKIAotCXVuY29sbGVjdF9hcmdzCi0JbW92CXJzcCxyYnAJCTsgcnNwIDwtIGFsaWduZWQgcmJwCi0JcG9wCXJzcAkJOyByc3AgPC0gb3JpZ2luYWwgcmJwCi0JcG9wCXJicAotCXJldAotCXJldAorICAgICAgICB1bmNvbGxlY3RfYXJncworICAgICAgICBtb3YgICAgIHJzcCxyYnAgICAgICAgICA7IHJzcCA8LSBhbGlnbmVkIHJicAorICAgICAgICBwb3AgICAgIHJzcCAgICAgICAgICAgICA7IHJzcCA8LSBvcmlnaW5hbCByYnAKKyAgICAgICAgcG9wICAgICByYnAKKyAgICAgICAgcmV0CisgICAgICAgIHJldAogCiA7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQogOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgotCWFsaWduCTE2CisgICAgICAgIGFsaWduICAgMTYKZGlmZiAtLWdpdCBhL3NpbWQvamlzczJmc3QuYXNtIGIvc2ltZC9qaXNzMmZzdC5hc20KaW5kZXggYjUzNjY0ZC4uMDMxMmJlMiAxMDA2NDQKLS0tIGEvc2ltZC9qaXNzMmZzdC5hc20KKysrIGIvc2ltZC9qaXNzMmZzdC5hc20KQEAgLTI2LDMxICsyNiwzMSBAQAogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSVkZWZpbmUgQ09OU1RfQklUUwk4CTsgMTQgaXMgYWxzbyBPSy4KLSVkZWZpbmUgUEFTUzFfQklUUwkyCislZGVmaW5lIENPTlNUX0JJVFMgICAgICA4ICAgICAgIDsgMTQgaXMgYWxzbyBPSy4KKyVkZWZpbmUgUEFTUzFfQklUUyAgICAgIDIKIAogJWlmIElGQVNUX1NDQUxFX0JJVFMgIT0gUEFTUzFfQklUUwogJWVycm9yICInSUZBU1RfU0NBTEVfQklUUycgbXVzdCBiZSBlcXVhbCB0byAnUEFTUzFfQklUUycuIgogJWVuZGlmCiAKICVpZiBDT05TVF9CSVRTID09IDgKLUZfMV8wODIJZXF1CTI3NwkJOyBGSVgoMS4wODIzOTIyMDApCi1GXzFfNDE0CWVxdQkzNjIJCTsgRklYKDEuNDE0MjEzNTYyKQotRl8xXzg0NwllcXUJNDczCQk7IEZJWCgxLjg0Nzc1OTA2NSkKLUZfMl82MTMJZXF1CTY2OQkJOyBGSVgoMi42MTMxMjU5MzApCi1GXzFfNjEzCWVxdQkoRl8yXzYxMyAtIDI1NikJOyBGSVgoMi42MTMxMjU5MzApIC0gRklYKDEpCitGXzFfMDgyIGVxdSAgICAgMjc3ICAgICAgICAgICAgIDsgRklYKDEuMDgyMzkyMjAwKQorRl8xXzQxNCBlcXUgICAgIDM2MiAgICAgICAgICAgICA7IEZJWCgxLjQxNDIxMzU2MikKK0ZfMV84NDcgZXF1ICAgICA0NzMgICAgICAgICAgICAgOyBGSVgoMS44NDc3NTkwNjUpCitGXzJfNjEzIGVxdSAgICAgNjY5ICAgICAgICAgICAgIDsgRklYKDIuNjEzMTI1OTMwKQorRl8xXzYxMyBlcXUgICAgIChGXzJfNjEzIC0gMjU2KSA7IEZJWCgyLjYxMzEyNTkzMCkgLSBGSVgoMSkKICVlbHNlCiA7IE5BU00gY2Fubm90IGRvIGNvbXBpbGUtdGltZSBhcml0aG1ldGljIG9uIGZsb2F0aW5nLXBvaW50IGNvbnN0YW50cy4KLSVkZWZpbmUJREVTQ0FMRSh4LG4pICAoKCh4KSsoMTw8KChuKS0xKSkpPj4obikpCi1GXzFfMDgyCWVxdQlERVNDQUxFKDExNjIyMDk3NzUsMzAtQ09OU1RfQklUUykJOyBGSVgoMS4wODIzOTIyMDApCi1GXzFfNDE0CWVxdQlERVNDQUxFKDE1MTg1MDAyNDksMzAtQ09OU1RfQklUUykJOyBGSVgoMS40MTQyMTM1NjIpCi1GXzFfODQ3CWVxdQlERVNDQUxFKDE5ODQwMTYxODgsMzAtQ09OU1RfQklUUykJOyBGSVgoMS44NDc3NTkwNjUpCi1GXzJfNjEzCWVxdQlERVNDQUxFKDI4MDU4MjI2MDIsMzAtQ09OU1RfQklUUykJOyBGSVgoMi42MTMxMjU5MzApCi1GXzFfNjEzCWVxdQkoRl8yXzYxMyAtICgxIDw8IENPTlNUX0JJVFMpKQk7IEZJWCgyLjYxMzEyNTkzMCkgLSBGSVgoMSkKKyVkZWZpbmUgREVTQ0FMRSh4LG4pICAoKCh4KSsoMTw8KChuKS0xKSkpPj4obikpCitGXzFfMDgyIGVxdSAgICAgREVTQ0FMRSgxMTYyMjA5Nzc1LDMwLUNPTlNUX0JJVFMpICAgICAgIDsgRklYKDEuMDgyMzkyMjAwKQorRl8xXzQxNCBlcXUgICAgIERFU0NBTEUoMTUxODUwMDI0OSwzMC1DT05TVF9CSVRTKSAgICAgICA7IEZJWCgxLjQxNDIxMzU2MikKK0ZfMV84NDcgZXF1ICAgICBERVNDQUxFKDE5ODQwMTYxODgsMzAtQ09OU1RfQklUUykgICAgICAgOyBGSVgoMS44NDc3NTkwNjUpCitGXzJfNjEzIGVxdSAgICAgREVTQ0FMRSgyODA1ODIyNjAyLDMwLUNPTlNUX0JJVFMpICAgICAgIDsgRklYKDIuNjEzMTI1OTMwKQorRl8xXzYxMyBlcXUgICAgIChGXzJfNjEzIC0gKDEgPDwgQ09OU1RfQklUUykpICAgOyBGSVgoMi42MTMxMjU5MzApIC0gRklYKDEpCiAlZW5kaWYKIAogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCVNFQ1RJT04JU0VHX0NPTlNUCisgICAgICAgIFNFQ1RJT04gU0VHX0NPTlNUCiAKIDsgUFJFX01VTFRJUExZX1NDQUxFX0JJVFMgPD0gMiAodG8gYXZvaWQgb3ZlcmZsb3cpCiA7IENPTlNUX0JJVFMgKyBDT05TVF9TSElGVCArIFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTID09IDE2IChmb3IgcG11bGh3KQpAQCAtNTgsMjIgKzU4LDIyIEBACiAlZGVmaW5lIFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTICAgMgogJWRlZmluZSBDT05TVF9TSElGVCAgICAgKDE2IC0gUFJFX01VTFRJUExZX1NDQUxFX0JJVFMgLSBDT05TVF9CSVRTKQogCi0JYWxpZ256CTE2Ci0JZ2xvYmFsCUVYVE4oamNvbnN0X2lkY3RfaWZhc3Rfc3NlMikKKyAgICAgICAgYWxpZ256ICAxNgorICAgICAgICBnbG9iYWwgIEVYVE4oamNvbnN0X2lkY3RfaWZhc3Rfc3NlMikKIAogRVhUTihqY29uc3RfaWRjdF9pZmFzdF9zc2UyKToKIAotUFdfRjE0MTQJdGltZXMgOCBkdyAgRl8xXzQxNCA8PCBDT05TVF9TSElGVAotUFdfRjE4NDcJdGltZXMgOCBkdyAgRl8xXzg0NyA8PCBDT05TVF9TSElGVAotUFdfTUYxNjEzCXRpbWVzIDggZHcgLUZfMV82MTMgPDwgQ09OU1RfU0hJRlQKLVBXX0YxMDgyCXRpbWVzIDggZHcgIEZfMV8wODIgPDwgQ09OU1RfU0hJRlQKLVBCX0NFTlRFUkpTQU1QCXRpbWVzIDE2IGRiIENFTlRFUkpTQU1QTEUKK1BXX0YxNDE0ICAgICAgICB0aW1lcyA4IGR3ICBGXzFfNDE0IDw8IENPTlNUX1NISUZUCitQV19GMTg0NyAgICAgICAgdGltZXMgOCBkdyAgRl8xXzg0NyA8PCBDT05TVF9TSElGVAorUFdfTUYxNjEzICAgICAgIHRpbWVzIDggZHcgLUZfMV82MTMgPDwgQ09OU1RfU0hJRlQKK1BXX0YxMDgyICAgICAgICB0aW1lcyA4IGR3ICBGXzFfMDgyIDw8IENPTlNUX1NISUZUCitQQl9DRU5URVJKU0FNUCAgdGltZXMgMTYgZGIgQ0VOVEVSSlNBTVBMRQogCi0JYWxpZ256CTE2CisgICAgICAgIGFsaWdueiAgMTYKIAogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCVNFQ1RJT04JU0VHX1RFWFQKLQlCSVRTCTMyCisgICAgICAgIFNFQ1RJT04gU0VHX1RFWFQKKyAgICAgICAgQklUUyAgICAzMgogOwogOyBQZXJmb3JtIGRlcXVhbnRpemF0aW9uIGFuZCBpbnZlcnNlIERDVCBvbiBvbmUgYmxvY2sgb2YgY29lZmZpY2llbnRzLgogOwpAQCAtODIsNDIxICs4Miw0MjEgQEAKIDsgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQogOwogCi0lZGVmaW5lIGRjdF90YWJsZShiKQkoYikrOAkJCTsganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIKLSVkZWZpbmUgY29lZl9ibG9jayhiKQkoYikrMTIJCTsgSkNPRUZQVFIgY29lZl9ibG9jawotJWRlZmluZSBvdXRwdXRfYnVmKGIpCShiKSsxNgkJOyBKU0FNUEFSUkFZIG91dHB1dF9idWYKLSVkZWZpbmUgb3V0cHV0X2NvbChiKQkoYikrMjAJCTsgSkRJTUVOU0lPTiBvdXRwdXRfY29sCislZGVmaW5lIGRjdF90YWJsZShiKSAgICAoYikrOCAgICAgICAgICAgOyBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0cgorJWRlZmluZSBjb2VmX2Jsb2NrKGIpICAgKGIpKzEyICAgICAgICAgIDsgSkNPRUZQVFIgY29lZl9ibG9jaworJWRlZmluZSBvdXRwdXRfYnVmKGIpICAgKGIpKzE2ICAgICAgICAgIDsgSlNBTVBBUlJBWSBvdXRwdXRfYnVmCislZGVmaW5lIG91dHB1dF9jb2woYikgICAoYikrMjAgICAgICAgICAgOyBKRElNRU5TSU9OIG91dHB1dF9jb2wKIAotJWRlZmluZSBvcmlnaW5hbF9lYnAJZWJwKzAKLSVkZWZpbmUgd2soaSkJCWVicC0oV0tfTlVNLShpKSkqU0laRU9GX1hNTVdPUkQJOyB4bW13b3JkIHdrW1dLX05VTV0KLSVkZWZpbmUgV0tfTlVNCQkyCislZGVmaW5lIG9yaWdpbmFsX2VicCAgICBlYnArMAorJWRlZmluZSB3ayhpKSAgICAgICAgICAgZWJwLShXS19OVU0tKGkpKSpTSVpFT0ZfWE1NV09SRCA7IHhtbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0gICAgICAgICAgMgogCi0JYWxpZ24JMTYKLQlnbG9iYWwJRVhUTihqc2ltZF9pZGN0X2lmYXN0X3NzZTIpCisgICAgICAgIGFsaWduICAgMTYKKyAgICAgICAgZ2xvYmFsICBFWFROKGpzaW1kX2lkY3RfaWZhc3Rfc3NlMikKIAogRVhUTihqc2ltZF9pZGN0X2lmYXN0X3NzZTIpOgotCXB1c2gJZWJwCi0JbW92CWVheCxlc3AJCQkJOyBlYXggPSBvcmlnaW5hbCBlYnAKLQlzdWIJZXNwLCBieXRlIDQKLQlhbmQJZXNwLCBieXRlICgtU0laRU9GX1hNTVdPUkQpCTsgYWxpZ24gdG8gMTI4IGJpdHMKLQltb3YJW2VzcF0sZWF4Ci0JbW92CWVicCxlc3AJCQkJOyBlYnAgPSBhbGlnbmVkIGVicAotCWxlYQllc3AsIFt3aygwKV0KLQlwdXNocGljCWVieAotOwlwdXNoCWVjeAkJOyB1bnVzZWQKLTsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi0JcHVzaAllc2kKLQlwdXNoCWVkaQorICAgICAgICBwdXNoICAgIGVicAorICAgICAgICBtb3YgICAgIGVheCxlc3AgICAgICAgICAgICAgICAgICAgICAgICAgOyBlYXggPSBvcmlnaW5hbCBlYnAKKyAgICAgICAgc3ViICAgICBlc3AsIGJ5dGUgNAorICAgICAgICBhbmQgICAgIGVzcCwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKSAgICAgOyBhbGlnbiB0byAxMjggYml0cworICAgICAgICBtb3YgICAgIFtlc3BdLGVheAorICAgICAgICBtb3YgICAgIGVicCxlc3AgICAgICAgICAgICAgICAgICAgICAgICAgOyBlYnAgPSBhbGlnbmVkIGVicAorICAgICAgICBsZWEgICAgIGVzcCwgW3drKDApXQorICAgICAgICBwdXNocGljIGVieAorOyAgICAgICBwdXNoICAgIGVjeCAgICAgICAgICAgICA7IHVudXNlZAorOyAgICAgICBwdXNoICAgIGVkeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorICAgICAgICBwdXNoICAgIGVzaQorICAgICAgICBwdXNoICAgIGVkaQogCi0JZ2V0X0dPVAllYngJCTsgZ2V0IEdPVCBhZGRyZXNzCisgICAgICAgIGdldF9HT1QgZWJ4ICAgICAgICAgICAgIDsgZ2V0IEdPVCBhZGRyZXNzCiAKLQk7IC0tLS0gUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMgZnJvbSBpbnB1dC4KKyAgICAgICAgOyAtLS0tIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQuCiAKLTsJbW92CWVheCwgW29yaWdpbmFsX2VicF0KLQltb3YJZWR4LCBQT0lOVEVSIFtkY3RfdGFibGUoZWF4KV0JOyBxdWFudHB0cgotCW1vdgllc2ksIEpDT0VGUFRSIFtjb2VmX2Jsb2NrKGVheCldCQk7IGlucHRyCis7ICAgICAgIG1vdiAgICAgZWF4LCBbb3JpZ2luYWxfZWJwXQorICAgICAgICBtb3YgICAgIGVkeCwgUE9JTlRFUiBbZGN0X3RhYmxlKGVheCldICAgICAgICAgICA7IHF1YW50cHRyCisgICAgICAgIG1vdiAgICAgZXNpLCBKQ09FRlBUUiBbY29lZl9ibG9jayhlYXgpXSAgICAgICAgIDsgaW5wdHIKIAogJWlmbmRlZiBOT19aRVJPX0NPTFVNTl9URVNUX0lGQVNUX1NTRTIKLQltb3YJZWF4LCBEV09SRCBbRFdCTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCi0Jb3IJZWF4LCBEV09SRCBbRFdCTE9DSygyLDAsZXNpLFNJWkVPRl9KQ09FRildCi0Jam56CW5lYXIgLmNvbHVtbkRDVAorICAgICAgICBtb3YgICAgIGVheCwgRFdPUkQgW0RXQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBvciAgICAgIGVheCwgRFdPUkQgW0RXQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBqbnogICAgIG5lYXIgLmNvbHVtbkRDVAogCi0JbW92ZHFhCXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQltb3ZkcWEJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQotCXBvcgl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAsZXNpLFNJWkVPRl9KQ09FRildCi0JcG9yCXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDQsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQlwb3IJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soNSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQotCXBvcgl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSyg2LDAsZXNpLFNJWkVPRl9KQ09FRildCi0JcG9yCXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQlwb3IJeG1tMSx4bW0wCi0JcGFja3Nzd2IgeG1tMSx4bW0xCi0JcGFja3Nzd2IgeG1tMSx4bW0xCi0JbW92ZAllYXgseG1tMQotCXRlc3QJZWF4LGVheAotCWpueglzaG9ydCAuY29sdW1uRENUCisgICAgICAgIG1vdmRxYSAgeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBtb3ZkcWEgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgcG9yICAgICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIHBvciAgICAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBwb3IgICAgIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgcG9yICAgICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSyg2LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIHBvciAgICAgeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soNywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBwb3IgICAgIHhtbTEseG1tMAorICAgICAgICBwYWNrc3N3YiB4bW0xLHhtbTEKKyAgICAgICAgcGFja3Nzd2IgeG1tMSx4bW0xCisgICAgICAgIG1vdmQgICAgZWF4LHhtbTEKKyAgICAgICAgdGVzdCAgICBlYXgsZWF4CisgICAgICAgIGpueiAgICAgc2hvcnQgLmNvbHVtbkRDVAogCi0JOyAtLSBBQyB0ZXJtcyBhbGwgemVybworICAgICAgICA7IC0tIEFDIHRlcm1zIGFsbCB6ZXJvCiAKLQltb3ZkcWEJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQotCXBtdWxsdwl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorICAgICAgICBtb3ZkcWEgIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgcG11bGx3ICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQogCi0JbW92ZHFhICAgIHhtbTcseG1tMAkJOyB4bW0wPWluMD0oMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcpCi0JcHVucGNrbHdkIHhtbTAseG1tMAkJOyB4bW0wPSgwMCAwMCAwMSAwMSAwMiAwMiAwMyAwMykKLQlwdW5wY2tod2QgeG1tNyx4bW03CQk7IHhtbTc9KDA0IDA0IDA1IDA1IDA2IDA2IDA3IDA3KQorICAgICAgICBtb3ZkcWEgICAgeG1tNyx4bW0wICAgICAgICAgICAgIDsgeG1tMD1pbjA9KDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3KQorICAgICAgICBwdW5wY2tsd2QgeG1tMCx4bW0wICAgICAgICAgICAgIDsgeG1tMD0oMDAgMDAgMDEgMDEgMDIgMDIgMDMgMDMpCisgICAgICAgIHB1bnBja2h3ZCB4bW03LHhtbTcgICAgICAgICAgICAgOyB4bW03PSgwNCAwNCAwNSAwNSAwNiAwNiAwNyAwNykKIAotCXBzaHVmZAl4bW02LHhtbTAsMHgwMAkJOyB4bW02PWNvbDA9KDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwKQotCXBzaHVmZAl4bW0yLHhtbTAsMHg1NQkJOyB4bW0yPWNvbDE9KDAxIDAxIDAxIDAxIDAxIDAxIDAxIDAxKQotCXBzaHVmZAl4bW01LHhtbTAsMHhBQQkJOyB4bW01PWNvbDI9KDAyIDAyIDAyIDAyIDAyIDAyIDAyIDAyKQotCXBzaHVmZAl4bW0wLHhtbTAsMHhGRgkJOyB4bW0wPWNvbDM9KDAzIDAzIDAzIDAzIDAzIDAzIDAzIDAzKQotCXBzaHVmZAl4bW0xLHhtbTcsMHgwMAkJOyB4bW0xPWNvbDQ9KDA0IDA0IDA0IDA0IDA0IDA0IDA0IDA0KQotCXBzaHVmZAl4bW00LHhtbTcsMHg1NQkJOyB4bW00PWNvbDU9KDA1IDA1IDA1IDA1IDA1IDA1IDA1IDA1KQotCXBzaHVmZAl4bW0zLHhtbTcsMHhBQQkJOyB4bW0zPWNvbDY9KDA2IDA2IDA2IDA2IDA2IDA2IDA2IDA2KQotCXBzaHVmZAl4bW03LHhtbTcsMHhGRgkJOyB4bW03PWNvbDc9KDA3IDA3IDA3IDA3IDA3IDA3IDA3IDA3KQorICAgICAgICBwc2h1ZmQgIHhtbTYseG1tMCwweDAwICAgICAgICAgIDsgeG1tNj1jb2wwPSgwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCkKKyAgICAgICAgcHNodWZkICB4bW0yLHhtbTAsMHg1NSAgICAgICAgICA7IHhtbTI9Y29sMT0oMDEgMDEgMDEgMDEgMDEgMDEgMDEgMDEpCisgICAgICAgIHBzaHVmZCAgeG1tNSx4bW0wLDB4QUEgICAgICAgICAgOyB4bW01PWNvbDI9KDAyIDAyIDAyIDAyIDAyIDAyIDAyIDAyKQorICAgICAgICBwc2h1ZmQgIHhtbTAseG1tMCwweEZGICAgICAgICAgIDsgeG1tMD1jb2wzPSgwMyAwMyAwMyAwMyAwMyAwMyAwMyAwMykKKyAgICAgICAgcHNodWZkICB4bW0xLHhtbTcsMHgwMCAgICAgICAgICA7IHhtbTE9Y29sND0oMDQgMDQgMDQgMDQgMDQgMDQgMDQgMDQpCisgICAgICAgIHBzaHVmZCAgeG1tNCx4bW03LDB4NTUgICAgICAgICAgOyB4bW00PWNvbDU9KDA1IDA1IDA1IDA1IDA1IDA1IDA1IDA1KQorICAgICAgICBwc2h1ZmQgIHhtbTMseG1tNywweEFBICAgICAgICAgIDsgeG1tMz1jb2w2PSgwNiAwNiAwNiAwNiAwNiAwNiAwNiAwNikKKyAgICAgICAgcHNodWZkICB4bW03LHhtbTcsMHhGRiAgICAgICAgICA7IHhtbTc9Y29sNz0oMDcgMDcgMDcgMDcgMDcgMDcgMDcgMDcpCiAKLQltb3ZkcWEJWE1NV09SRCBbd2soMCldLCB4bW0yCTsgd2soMCk9Y29sMQotCW1vdmRxYQlYTU1XT1JEIFt3aygxKV0sIHhtbTAJOyB3aygxKT1jb2wzCi0Jam1wCW5lYXIgLmNvbHVtbl9lbmQKLQlhbGlnbngJMTYsNworICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDApXSwgeG1tMiAgIDsgd2soMCk9Y29sMQorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDEpXSwgeG1tMCAgIDsgd2soMSk9Y29sMworICAgICAgICBqbXAgICAgIG5lYXIgLmNvbHVtbl9lbmQKKyAgICAgICAgYWxpZ254ICAxNiw3CiAlZW5kaWYKIC5jb2x1bW5EQ1Q6CiAKLQk7IC0tIEV2ZW4gcGFydAorICAgICAgICA7IC0tIEV2ZW4gcGFydAogCi0JbW92ZHFhCXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQltb3ZkcWEJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQotCXBtdWxsdwl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9JRkFTVF9NVUxUX1RZUEUpXQotCXBtdWxsdwl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygyLDAsZWR4LFNJWkVPRl9JRkFTVF9NVUxUX1RZUEUpXQotCW1vdmRxYQl4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSyg0LDAsZXNpLFNJWkVPRl9KQ09FRildCi0JbW92ZHFhCXhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDYsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQlwbXVsbHcJeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soNCwwLGVkeCxTSVpFT0ZfSUZBU1RfTVVMVF9UWVBFKV0KLQlwbXVsbHcJeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNiwwLGVkeCxTSVpFT0ZfSUZBU1RfTVVMVF9UWVBFKV0KKyAgICAgICAgbW92ZHFhICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdmRxYSAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBwbXVsbHcgIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0lGQVNUX01VTFRfVFlQRSldCisgICAgICAgIHBtdWxsdyAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMiwwLGVkeCxTSVpFT0ZfSUZBU1RfTVVMVF9UWVBFKV0KKyAgICAgICAgbW92ZHFhICB4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSyg0LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdmRxYSAgeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBwbXVsbHcgIHhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDQsMCxlZHgsU0laRU9GX0lGQVNUX01VTFRfVFlQRSldCisgICAgICAgIHBtdWxsdyAgeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNiwwLGVkeCxTSVpFT0ZfSUZBU1RfTVVMVF9UWVBFKV0KIAotCW1vdmRxYQl4bW00LHhtbTAKLQltb3ZkcWEJeG1tNSx4bW0xCi0JcHN1YncJeG1tMCx4bW0yCQk7IHhtbTA9dG1wMTEKLQlwc3Vidwl4bW0xLHhtbTMKLQlwYWRkdwl4bW00LHhtbTIJCTsgeG1tND10bXAxMAotCXBhZGR3CXhtbTUseG1tMwkJOyB4bW01PXRtcDEzCisgICAgICAgIG1vdmRxYSAgeG1tNCx4bW0wCisgICAgICAgIG1vdmRxYSAgeG1tNSx4bW0xCisgICAgICAgIHBzdWJ3ICAgeG1tMCx4bW0yICAgICAgICAgICAgICAgOyB4bW0wPXRtcDExCisgICAgICAgIHBzdWJ3ICAgeG1tMSx4bW0zCisgICAgICAgIHBhZGR3ICAgeG1tNCx4bW0yICAgICAgICAgICAgICAgOyB4bW00PXRtcDEwCisgICAgICAgIHBhZGR3ICAgeG1tNSx4bW0zICAgICAgICAgICAgICAgOyB4bW01PXRtcDEzCiAKLQlwc2xsdwl4bW0xLFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCi0JcG11bGh3CXhtbTEsW0dPVE9GRihlYngsUFdfRjE0MTQpXQotCXBzdWJ3CXhtbTEseG1tNQkJOyB4bW0xPXRtcDEyCisgICAgICAgIHBzbGx3ICAgeG1tMSxQUkVfTVVMVElQTFlfU0NBTEVfQklUUworICAgICAgICBwbXVsaHcgIHhtbTEsW0dPVE9GRihlYngsUFdfRjE0MTQpXQorICAgICAgICBwc3VidyAgIHhtbTEseG1tNSAgICAgICAgICAgICAgIDsgeG1tMT10bXAxMgogCi0JbW92ZHFhCXhtbTYseG1tNAotCW1vdmRxYQl4bW03LHhtbTAKLQlwc3Vidwl4bW00LHhtbTUJCTsgeG1tND10bXAzCi0JcHN1YncJeG1tMCx4bW0xCQk7IHhtbTA9dG1wMgotCXBhZGR3CXhtbTYseG1tNQkJOyB4bW02PXRtcDAKLQlwYWRkdwl4bW03LHhtbTEJCTsgeG1tNz10bXAxCisgICAgICAgIG1vdmRxYSAgeG1tNix4bW00CisgICAgICAgIG1vdmRxYSAgeG1tNyx4bW0wCisgICAgICAgIHBzdWJ3ICAgeG1tNCx4bW01ICAgICAgICAgICAgICAgOyB4bW00PXRtcDMKKyAgICAgICAgcHN1YncgICB4bW0wLHhtbTEgICAgICAgICAgICAgICA7IHhtbTA9dG1wMgorICAgICAgICBwYWRkdyAgIHhtbTYseG1tNSAgICAgICAgICAgICAgIDsgeG1tNj10bXAwCisgICAgICAgIHBhZGR3ICAgeG1tNyx4bW0xICAgICAgICAgICAgICAgOyB4bW03PXRtcDEKIAotCW1vdmRxYQlYTU1XT1JEIFt3aygxKV0sIHhtbTQJOyB3aygxKT10bXAzCi0JbW92ZHFhCVhNTVdPUkQgW3drKDApXSwgeG1tMAk7IHdrKDApPXRtcDIKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygxKV0sIHhtbTQgICA7IHdrKDEpPXRtcDMKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygwKV0sIHhtbTAgICA7IHdrKDApPXRtcDIKIAotCTsgLS0gT2RkIHBhcnQKKyAgICAgICAgOyAtLSBPZGQgcGFydAogCi0JbW92ZHFhCXhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQltb3ZkcWEJeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soMywwLGVzaSxTSVpFT0ZfSkNPRUYpXQotCXBtdWxsdwl4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9JRkFTVF9NVUxUX1RZUEUpXQotCXBtdWxsdwl4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9JRkFTVF9NVUxUX1RZUEUpXQotCW1vdmRxYQl4bW01LCBYTU1XT1JEIFtYTU1CTE9DSyg1LDAsZXNpLFNJWkVPRl9KQ09FRildCi0JbW92ZHFhCXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQlwbXVsbHcJeG1tNSwgWE1NV09SRCBbWE1NQkxPQ0soNSwwLGVkeCxTSVpFT0ZfSUZBU1RfTVVMVF9UWVBFKV0KLQlwbXVsbHcJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNywwLGVkeCxTSVpFT0ZfSUZBU1RfTVVMVF9UWVBFKV0KKyAgICAgICAgbW92ZHFhICB4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdmRxYSAgeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soMywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBwbXVsbHcgIHhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0lGQVNUX01VTFRfVFlQRSldCisgICAgICAgIHBtdWxsdyAgeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soMywwLGVkeCxTSVpFT0ZfSUZBU1RfTVVMVF9UWVBFKV0KKyAgICAgICAgbW92ZHFhICB4bW01LCBYTU1XT1JEIFtYTU1CTE9DSyg1LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdmRxYSAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBwbXVsbHcgIHhtbTUsIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxlZHgsU0laRU9GX0lGQVNUX01VTFRfVFlQRSldCisgICAgICAgIHBtdWxsdyAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNywwLGVkeCxTSVpFT0ZfSUZBU1RfTVVMVF9UWVBFKV0KIAotCW1vdmRxYQl4bW00LHhtbTIKLQltb3ZkcWEJeG1tMCx4bW01Ci0JcHN1YncJeG1tMix4bW0xCQk7IHhtbTI9ejEyCi0JcHN1YncJeG1tNSx4bW0zCQk7IHhtbTU9ejEwCi0JcGFkZHcJeG1tNCx4bW0xCQk7IHhtbTQ9ejExCi0JcGFkZHcJeG1tMCx4bW0zCQk7IHhtbTA9ejEzCisgICAgICAgIG1vdmRxYSAgeG1tNCx4bW0yCisgICAgICAgIG1vdmRxYSAgeG1tMCx4bW01CisgICAgICAgIHBzdWJ3ICAgeG1tMix4bW0xICAgICAgICAgICAgICAgOyB4bW0yPXoxMgorICAgICAgICBwc3VidyAgIHhtbTUseG1tMyAgICAgICAgICAgICAgIDsgeG1tNT16MTAKKyAgICAgICAgcGFkZHcgICB4bW00LHhtbTEgICAgICAgICAgICAgICA7IHhtbTQ9ejExCisgICAgICAgIHBhZGR3ICAgeG1tMCx4bW0zICAgICAgICAgICAgICAgOyB4bW0wPXoxMwogCi0JbW92ZHFhCXhtbTEseG1tNQkJOyB4bW0xPXoxMCh1bnNjYWxlZCkKLQlwc2xsdwl4bW0yLFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCi0JcHNsbHcJeG1tNSxQUkVfTVVMVElQTFlfU0NBTEVfQklUUworICAgICAgICBtb3ZkcWEgIHhtbTEseG1tNSAgICAgICAgICAgICAgIDsgeG1tMT16MTAodW5zY2FsZWQpCisgICAgICAgIHBzbGx3ICAgeG1tMixQUkVfTVVMVElQTFlfU0NBTEVfQklUUworICAgICAgICBwc2xsdyAgIHhtbTUsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKIAotCW1vdmRxYQl4bW0zLHhtbTQKLQlwc3Vidwl4bW00LHhtbTAKLQlwYWRkdwl4bW0zLHhtbTAJCTsgeG1tMz10bXA3CisgICAgICAgIG1vdmRxYSAgeG1tMyx4bW00CisgICAgICAgIHBzdWJ3ICAgeG1tNCx4bW0wCisgICAgICAgIHBhZGR3ICAgeG1tMyx4bW0wICAgICAgICAgICAgICAgOyB4bW0zPXRtcDcKIAotCXBzbGx3CXhtbTQsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKLQlwbXVsaHcJeG1tNCxbR09UT0ZGKGVieCxQV19GMTQxNCldCTsgeG1tND10bXAxMQorICAgICAgICBwc2xsdyAgIHhtbTQsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKyAgICAgICAgcG11bGh3ICB4bW00LFtHT1RPRkYoZWJ4LFBXX0YxNDE0KV0gICAgIDsgeG1tND10bXAxMQogCi0JOyBUbyBhdm9pZCBvdmVyZmxvdy4uLgotCTsKLQk7IChPcmlnaW5hbCkKLQk7IHRtcDEyID0gLTIuNjEzMTI1OTMwICogejEwICsgejU7Ci0JOwotCTsgKFRoaXMgaW1wbGVtZW50YXRpb24pCi0JOyB0bXAxMiA9ICgtMS42MTMxMjU5MzAgLSAxKSAqIHoxMCArIHo1OwotCTsgICAgICAgPSAtMS42MTMxMjU5MzAgKiB6MTAgLSB6MTAgKyB6NTsKKyAgICAgICAgOyBUbyBhdm9pZCBvdmVyZmxvdy4uLgorICAgICAgICA7CisgICAgICAgIDsgKE9yaWdpbmFsKQorICAgICAgICA7IHRtcDEyID0gLTIuNjEzMTI1OTMwICogejEwICsgejU7CisgICAgICAgIDsKKyAgICAgICAgOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKyAgICAgICAgOyB0bXAxMiA9ICgtMS42MTMxMjU5MzAgLSAxKSAqIHoxMCArIHo1OworICAgICAgICA7ICAgICAgID0gLTEuNjEzMTI1OTMwICogejEwIC0gejEwICsgejU7CiAKLQltb3ZkcWEJeG1tMCx4bW01Ci0JcGFkZHcJeG1tNSx4bW0yCi0JcG11bGh3CXhtbTUsW0dPVE9GRihlYngsUFdfRjE4NDcpXQk7IHhtbTU9ejUKLQlwbXVsaHcJeG1tMCxbR09UT0ZGKGVieCxQV19NRjE2MTMpXQotCXBtdWxodwl4bW0yLFtHT1RPRkYoZWJ4LFBXX0YxMDgyKV0KLQlwc3Vidwl4bW0wLHhtbTEKLQlwc3Vidwl4bW0yLHhtbTUJCTsgeG1tMj10bXAxMAotCXBhZGR3CXhtbTAseG1tNQkJOyB4bW0wPXRtcDEyCisgICAgICAgIG1vdmRxYSAgeG1tMCx4bW01CisgICAgICAgIHBhZGR3ICAgeG1tNSx4bW0yCisgICAgICAgIHBtdWxodyAgeG1tNSxbR09UT0ZGKGVieCxQV19GMTg0NyldICAgICA7IHhtbTU9ejUKKyAgICAgICAgcG11bGh3ICB4bW0wLFtHT1RPRkYoZWJ4LFBXX01GMTYxMyldCisgICAgICAgIHBtdWxodyAgeG1tMixbR09UT0ZGKGVieCxQV19GMTA4MildCisgICAgICAgIHBzdWJ3ICAgeG1tMCx4bW0xCisgICAgICAgIHBzdWJ3ICAgeG1tMix4bW01ICAgICAgICAgICAgICAgOyB4bW0yPXRtcDEwCisgICAgICAgIHBhZGR3ICAgeG1tMCx4bW01ICAgICAgICAgICAgICAgOyB4bW0wPXRtcDEyCiAKLQk7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQorICAgICAgICA7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQogCi0JcHN1YncJeG1tMCx4bW0zCQk7IHhtbTA9dG1wNgotCW1vdmRxYQl4bW0xLHhtbTYKLQltb3ZkcWEJeG1tNSx4bW03Ci0JcGFkZHcJeG1tNix4bW0zCQk7IHhtbTY9ZGF0YTA9KDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3KQotCXBhZGR3CXhtbTcseG1tMAkJOyB4bW03PWRhdGExPSgxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNykKLQlwc3Vidwl4bW0xLHhtbTMJCTsgeG1tMT1kYXRhNz0oNzAgNzEgNzIgNzMgNzQgNzUgNzYgNzcpCi0JcHN1YncJeG1tNSx4bW0wCQk7IHhtbTU9ZGF0YTY9KDYwIDYxIDYyIDYzIDY0IDY1IDY2IDY3KQotCXBzdWJ3CXhtbTQseG1tMAkJOyB4bW00PXRtcDUKKyAgICAgICAgcHN1YncgICB4bW0wLHhtbTMgICAgICAgICAgICAgICA7IHhtbTA9dG1wNgorICAgICAgICBtb3ZkcWEgIHhtbTEseG1tNgorICAgICAgICBtb3ZkcWEgIHhtbTUseG1tNworICAgICAgICBwYWRkdyAgIHhtbTYseG1tMyAgICAgICAgICAgICAgIDsgeG1tNj1kYXRhMD0oMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcpCisgICAgICAgIHBhZGR3ICAgeG1tNyx4bW0wICAgICAgICAgICAgICAgOyB4bW03PWRhdGExPSgxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNykKKyAgICAgICAgcHN1YncgICB4bW0xLHhtbTMgICAgICAgICAgICAgICA7IHhtbTE9ZGF0YTc9KDcwIDcxIDcyIDczIDc0IDc1IDc2IDc3KQorICAgICAgICBwc3VidyAgIHhtbTUseG1tMCAgICAgICAgICAgICAgIDsgeG1tNT1kYXRhNj0oNjAgNjEgNjIgNjMgNjQgNjUgNjYgNjcpCisgICAgICAgIHBzdWJ3ICAgeG1tNCx4bW0wICAgICAgICAgICAgICAgOyB4bW00PXRtcDUKIAotCW1vdmRxYSAgICB4bW0zLHhtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQotCXB1bnBja2x3ZCB4bW02LHhtbTcJCTsgeG1tNj0oMDAgMTAgMDEgMTEgMDIgMTIgMDMgMTMpCi0JcHVucGNraHdkIHhtbTMseG1tNwkJOyB4bW0zPSgwNCAxNCAwNSAxNSAwNiAxNiAwNyAxNykKLQltb3ZkcWEgICAgeG1tMCx4bW01CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKLQlwdW5wY2tsd2QgeG1tNSx4bW0xCQk7IHhtbTU9KDYwIDcwIDYxIDcxIDYyIDcyIDYzIDczKQotCXB1bnBja2h3ZCB4bW0wLHhtbTEJCTsgeG1tMD0oNjQgNzQgNjUgNzUgNjYgNzYgNjcgNzcpCisgICAgICAgIG1vdmRxYSAgICB4bW0zLHhtbTYgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgICAgIHB1bnBja2x3ZCB4bW02LHhtbTcgICAgICAgICAgICAgOyB4bW02PSgwMCAxMCAwMSAxMSAwMiAxMiAwMyAxMykKKyAgICAgICAgcHVucGNraHdkIHhtbTMseG1tNyAgICAgICAgICAgICA7IHhtbTM9KDA0IDE0IDA1IDE1IDA2IDE2IDA3IDE3KQorICAgICAgICBtb3ZkcWEgICAgeG1tMCx4bW01ICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgICAgICBwdW5wY2tsd2QgeG1tNSx4bW0xICAgICAgICAgICAgIDsgeG1tNT0oNjAgNzAgNjEgNzEgNjIgNzIgNjMgNzMpCisgICAgICAgIHB1bnBja2h3ZCB4bW0wLHhtbTEgICAgICAgICAgICAgOyB4bW0wPSg2NCA3NCA2NSA3NSA2NiA3NiA2NyA3NykKIAotCW1vdmRxYQl4bW03LCBYTU1XT1JEIFt3aygwKV0JOyB4bW03PXRtcDIKLQltb3ZkcWEJeG1tMSwgWE1NV09SRCBbd2soMSldCTsgeG1tMT10bXAzCisgICAgICAgIG1vdmRxYSAgeG1tNywgWE1NV09SRCBbd2soMCldICAgOyB4bW03PXRtcDIKKyAgICAgICAgbW92ZHFhICB4bW0xLCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTE9dG1wMwogCi0JbW92ZHFhCVhNTVdPUkQgW3drKDApXSwgeG1tNQk7IHdrKDApPSg2MCA3MCA2MSA3MSA2MiA3MiA2MyA3MykKLQltb3ZkcWEJWE1NV09SRCBbd2soMSldLCB4bW0wCTsgd2soMSk9KDY0IDc0IDY1IDc1IDY2IDc2IDY3IDc3KQorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDApXSwgeG1tNSAgIDsgd2soMCk9KDYwIDcwIDYxIDcxIDYyIDcyIDYzIDczKQorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDEpXSwgeG1tMCAgIDsgd2soMSk9KDY0IDc0IDY1IDc1IDY2IDc2IDY3IDc3KQogCi0JcGFkZHcJeG1tMix4bW00CQk7IHhtbTI9dG1wNAotCW1vdmRxYQl4bW01LHhtbTcKLQltb3ZkcWEJeG1tMCx4bW0xCi0JcGFkZHcJeG1tNyx4bW00CQk7IHhtbTc9ZGF0YTI9KDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3KQotCXBhZGR3CXhtbTEseG1tMgkJOyB4bW0xPWRhdGE0PSg0MCA0MSA0MiA0MyA0NCA0NSA0NiA0NykKLQlwc3Vidwl4bW01LHhtbTQJCTsgeG1tNT1kYXRhNT0oNTAgNTEgNTIgNTMgNTQgNTUgNTYgNTcpCi0JcHN1YncJeG1tMCx4bW0yCQk7IHhtbTA9ZGF0YTM9KDMwIDMxIDMyIDMzIDM0IDM1IDM2IDM3KQorICAgICAgICBwYWRkdyAgIHhtbTIseG1tNCAgICAgICAgICAgICAgIDsgeG1tMj10bXA0CisgICAgICAgIG1vdmRxYSAgeG1tNSx4bW03CisgICAgICAgIG1vdmRxYSAgeG1tMCx4bW0xCisgICAgICAgIHBhZGR3ICAgeG1tNyx4bW00ICAgICAgICAgICAgICAgOyB4bW03PWRhdGEyPSgyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNykKKyAgICAgICAgcGFkZHcgICB4bW0xLHhtbTIgICAgICAgICAgICAgICA7IHhtbTE9ZGF0YTQ9KDQwIDQxIDQyIDQzIDQ0IDQ1IDQ2IDQ3KQorICAgICAgICBwc3VidyAgIHhtbTUseG1tNCAgICAgICAgICAgICAgIDsgeG1tNT1kYXRhNT0oNTAgNTEgNTIgNTMgNTQgNTUgNTYgNTcpCisgICAgICAgIHBzdWJ3ICAgeG1tMCx4bW0yICAgICAgICAgICAgICAgOyB4bW0wPWRhdGEzPSgzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNykKIAotCW1vdmRxYSAgICB4bW00LHhtbTcJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQotCXB1bnBja2x3ZCB4bW03LHhtbTAJCTsgeG1tNz0oMjAgMzAgMjEgMzEgMjIgMzIgMjMgMzMpCi0JcHVucGNraHdkIHhtbTQseG1tMAkJOyB4bW00PSgyNCAzNCAyNSAzNSAyNiAzNiAyNyAzNykKLQltb3ZkcWEgICAgeG1tMix4bW0xCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKLQlwdW5wY2tsd2QgeG1tMSx4bW01CQk7IHhtbTE9KDQwIDUwIDQxIDUxIDQyIDUyIDQzIDUzKQotCXB1bnBja2h3ZCB4bW0yLHhtbTUJCTsgeG1tMj0oNDQgNTQgNDUgNTUgNDYgNTYgNDcgNTcpCisgICAgICAgIG1vdmRxYSAgICB4bW00LHhtbTcgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgICAgIHB1bnBja2x3ZCB4bW03LHhtbTAgICAgICAgICAgICAgOyB4bW03PSgyMCAzMCAyMSAzMSAyMiAzMiAyMyAzMykKKyAgICAgICAgcHVucGNraHdkIHhtbTQseG1tMCAgICAgICAgICAgICA7IHhtbTQ9KDI0IDM0IDI1IDM1IDI2IDM2IDI3IDM3KQorICAgICAgICBtb3ZkcWEgICAgeG1tMix4bW0xICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgICAgICBwdW5wY2tsd2QgeG1tMSx4bW01ICAgICAgICAgICAgIDsgeG1tMT0oNDAgNTAgNDEgNTEgNDIgNTIgNDMgNTMpCisgICAgICAgIHB1bnBja2h3ZCB4bW0yLHhtbTUgICAgICAgICAgICAgOyB4bW0yPSg0NCA1NCA0NSA1NSA0NiA1NiA0NyA1NykKIAotCW1vdmRxYSAgICB4bW0wLHhtbTMJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQotCXB1bnBja2xkcSB4bW0zLHhtbTQJCTsgeG1tMz0oMDQgMTQgMjQgMzQgMDUgMTUgMjUgMzUpCi0JcHVucGNraGRxIHhtbTAseG1tNAkJOyB4bW0wPSgwNiAxNiAyNiAzNiAwNyAxNyAyNyAzNykKLQltb3ZkcWEgICAgeG1tNSx4bW02CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKLQlwdW5wY2tsZHEgeG1tNix4bW03CQk7IHhtbTY9KDAwIDEwIDIwIDMwIDAxIDExIDIxIDMxKQotCXB1bnBja2hkcSB4bW01LHhtbTcJCTsgeG1tNT0oMDIgMTIgMjIgMzIgMDMgMTMgMjMgMzMpCisgICAgICAgIG1vdmRxYSAgICB4bW0wLHhtbTMgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgICAgIHB1bnBja2xkcSB4bW0zLHhtbTQgICAgICAgICAgICAgOyB4bW0zPSgwNCAxNCAyNCAzNCAwNSAxNSAyNSAzNSkKKyAgICAgICAgcHVucGNraGRxIHhtbTAseG1tNCAgICAgICAgICAgICA7IHhtbTA9KDA2IDE2IDI2IDM2IDA3IDE3IDI3IDM3KQorICAgICAgICBtb3ZkcWEgICAgeG1tNSx4bW02ICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgICAgICBwdW5wY2tsZHEgeG1tNix4bW03ICAgICAgICAgICAgIDsgeG1tNj0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEpCisgICAgICAgIHB1bnBja2hkcSB4bW01LHhtbTcgICAgICAgICAgICAgOyB4bW01PSgwMiAxMiAyMiAzMiAwMyAxMyAyMyAzMykKIAotCW1vdmRxYQl4bW00LCBYTU1XT1JEIFt3aygwKV0JOyB4bW00PSg2MCA3MCA2MSA3MSA2MiA3MiA2MyA3MykKLQltb3ZkcWEJeG1tNywgWE1NV09SRCBbd2soMSldCTsgeG1tNz0oNjQgNzQgNjUgNzUgNjYgNzYgNjcgNzcpCisgICAgICAgIG1vdmRxYSAgeG1tNCwgWE1NV09SRCBbd2soMCldICAgOyB4bW00PSg2MCA3MCA2MSA3MSA2MiA3MiA2MyA3MykKKyAgICAgICAgbW92ZHFhICB4bW03LCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTc9KDY0IDc0IDY1IDc1IDY2IDc2IDY3IDc3KQogCi0JbW92ZHFhCVhNTVdPUkQgW3drKDApXSwgeG1tMwk7IHdrKDApPSgwNCAxNCAyNCAzNCAwNSAxNSAyNSAzNSkKLQltb3ZkcWEJWE1NV09SRCBbd2soMSldLCB4bW0wCTsgd2soMSk9KDA2IDE2IDI2IDM2IDA3IDE3IDI3IDM3KQorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDApXSwgeG1tMyAgIDsgd2soMCk9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1KQorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDEpXSwgeG1tMCAgIDsgd2soMSk9KDA2IDE2IDI2IDM2IDA3IDE3IDI3IDM3KQogCi0JbW92ZHFhICAgIHhtbTMseG1tMQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCi0JcHVucGNrbGRxIHhtbTEseG1tNAkJOyB4bW0xPSg0MCA1MCA2MCA3MCA0MSA1MSA2MSA3MSkKLQlwdW5wY2toZHEgeG1tMyx4bW00CQk7IHhtbTM9KDQyIDUyIDYyIDcyIDQzIDUzIDYzIDczKQotCW1vdmRxYSAgICB4bW0wLHhtbTIJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQotCXB1bnBja2xkcSB4bW0yLHhtbTcJCTsgeG1tMj0oNDQgNTQgNjQgNzQgNDUgNTUgNjUgNzUpCi0JcHVucGNraGRxIHhtbTAseG1tNwkJOyB4bW0wPSg0NiA1NiA2NiA3NiA0NyA1NyA2NyA3NykKKyAgICAgICAgbW92ZHFhICAgIHhtbTMseG1tMSAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICAgICAgcHVucGNrbGRxIHhtbTEseG1tNCAgICAgICAgICAgICA7IHhtbTE9KDQwIDUwIDYwIDcwIDQxIDUxIDYxIDcxKQorICAgICAgICBwdW5wY2toZHEgeG1tMyx4bW00ICAgICAgICAgICAgIDsgeG1tMz0oNDIgNTIgNjIgNzIgNDMgNTMgNjMgNzMpCisgICAgICAgIG1vdmRxYSAgICB4bW0wLHhtbTIgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgICAgIHB1bnBja2xkcSB4bW0yLHhtbTcgICAgICAgICAgICAgOyB4bW0yPSg0NCA1NCA2NCA3NCA0NSA1NSA2NSA3NSkKKyAgICAgICAgcHVucGNraGRxIHhtbTAseG1tNyAgICAgICAgICAgICA7IHhtbTA9KDQ2IDU2IDY2IDc2IDQ3IDU3IDY3IDc3KQogCi0JbW92ZHFhICAgICB4bW00LHhtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQotCXB1bnBja2xxZHEgeG1tNix4bW0xCQk7IHhtbTY9Y29sMD0oMDAgMTAgMjAgMzAgNDAgNTAgNjAgNzApCi0JcHVucGNraHFkcSB4bW00LHhtbTEJCTsgeG1tND1jb2wxPSgwMSAxMSAyMSAzMSA0MSA1MSA2MSA3MSkKLQltb3ZkcWEgICAgIHhtbTcseG1tNQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCi0JcHVucGNrbHFkcSB4bW01LHhtbTMJCTsgeG1tNT1jb2wyPSgwMiAxMiAyMiAzMiA0MiA1MiA2MiA3MikKLQlwdW5wY2tocWRxIHhtbTcseG1tMwkJOyB4bW03PWNvbDM9KDAzIDEzIDIzIDMzIDQzIDUzIDYzIDczKQorICAgICAgICBtb3ZkcWEgICAgIHhtbTQseG1tNiAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorICAgICAgICBwdW5wY2tscWRxIHhtbTYseG1tMSAgICAgICAgICAgIDsgeG1tNj1jb2wwPSgwMCAxMCAyMCAzMCA0MCA1MCA2MCA3MCkKKyAgICAgICAgcHVucGNraHFkcSB4bW00LHhtbTEgICAgICAgICAgICA7IHhtbTQ9Y29sMT0oMDEgMTEgMjEgMzEgNDEgNTEgNjEgNzEpCisgICAgICAgIG1vdmRxYSAgICAgeG1tNyx4bW01ICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisgICAgICAgIHB1bnBja2xxZHEgeG1tNSx4bW0zICAgICAgICAgICAgOyB4bW01PWNvbDI9KDAyIDEyIDIyIDMyIDQyIDUyIDYyIDcyKQorICAgICAgICBwdW5wY2tocWRxIHhtbTcseG1tMyAgICAgICAgICAgIDsgeG1tNz1jb2wzPSgwMyAxMyAyMyAzMyA0MyA1MyA2MyA3MykKIAotCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFt3aygwKV0JOyB4bW0xPSgwNCAxNCAyNCAzNCAwNSAxNSAyNSAzNSkKLQltb3ZkcWEJeG1tMywgWE1NV09SRCBbd2soMSldCTsgeG1tMz0oMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCisgICAgICAgIG1vdmRxYSAgeG1tMSwgWE1NV09SRCBbd2soMCldICAgOyB4bW0xPSgwNCAxNCAyNCAzNCAwNSAxNSAyNSAzNSkKKyAgICAgICAgbW92ZHFhICB4bW0zLCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTM9KDA2IDE2IDI2IDM2IDA3IDE3IDI3IDM3KQogCi0JbW92ZHFhCVhNTVdPUkQgW3drKDApXSwgeG1tNAk7IHdrKDApPWNvbDEKLQltb3ZkcWEJWE1NV09SRCBbd2soMSldLCB4bW03CTsgd2soMSk9Y29sMworICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDApXSwgeG1tNCAgIDsgd2soMCk9Y29sMQorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDEpXSwgeG1tNyAgIDsgd2soMSk9Y29sMwogCi0JbW92ZHFhICAgICB4bW00LHhtbTEJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQotCXB1bnBja2xxZHEgeG1tMSx4bW0yCQk7IHhtbTE9Y29sND0oMDQgMTQgMjQgMzQgNDQgNTQgNjQgNzQpCi0JcHVucGNraHFkcSB4bW00LHhtbTIJCTsgeG1tND1jb2w1PSgwNSAxNSAyNSAzNSA0NSA1NSA2NSA3NSkKLQltb3ZkcWEgICAgIHhtbTcseG1tMwkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCi0JcHVucGNrbHFkcSB4bW0zLHhtbTAJCTsgeG1tMz1jb2w2PSgwNiAxNiAyNiAzNiA0NiA1NiA2NiA3NikKLQlwdW5wY2tocWRxIHhtbTcseG1tMAkJOyB4bW03PWNvbDc9KDA3IDE3IDI3IDM3IDQ3IDU3IDY3IDc3KQorICAgICAgICBtb3ZkcWEgICAgIHhtbTQseG1tMSAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorICAgICAgICBwdW5wY2tscWRxIHhtbTEseG1tMiAgICAgICAgICAgIDsgeG1tMT1jb2w0PSgwNCAxNCAyNCAzNCA0NCA1NCA2NCA3NCkKKyAgICAgICAgcHVucGNraHFkcSB4bW00LHhtbTIgICAgICAgICAgICA7IHhtbTQ9Y29sNT0oMDUgMTUgMjUgMzUgNDUgNTUgNjUgNzUpCisgICAgICAgIG1vdmRxYSAgICAgeG1tNyx4bW0zICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisgICAgICAgIHB1bnBja2xxZHEgeG1tMyx4bW0wICAgICAgICAgICAgOyB4bW0zPWNvbDY9KDA2IDE2IDI2IDM2IDQ2IDU2IDY2IDc2KQorICAgICAgICBwdW5wY2tocWRxIHhtbTcseG1tMCAgICAgICAgICAgIDsgeG1tNz1jb2w3PSgwNyAxNyAyNyAzNyA0NyA1NyA2NyA3NykKIC5jb2x1bW5fZW5kOgogCi0JOyAtLSBQcmVmZXRjaCB0aGUgbmV4dCBjb2VmZmljaWVudCBibG9jaworICAgICAgICA7IC0tIFByZWZldGNoIHRoZSBuZXh0IGNvZWZmaWNpZW50IGJsb2NrCiAKLQlwcmVmZXRjaG50YSBbZXNpICsgRENUU0laRTIqU0laRU9GX0pDT0VGICsgMCozMl0KLQlwcmVmZXRjaG50YSBbZXNpICsgRENUU0laRTIqU0laRU9GX0pDT0VGICsgMSozMl0KLQlwcmVmZXRjaG50YSBbZXNpICsgRENUU0laRTIqU0laRU9GX0pDT0VGICsgMiozMl0KLQlwcmVmZXRjaG50YSBbZXNpICsgRENUU0laRTIqU0laRU9GX0pDT0VGICsgMyozMl0KKyAgICAgICAgcHJlZmV0Y2hudGEgW2VzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDAqMzJdCisgICAgICAgIHByZWZldGNobnRhIFtlc2kgKyBEQ1RTSVpFMipTSVpFT0ZfSkNPRUYgKyAxKjMyXQorICAgICAgICBwcmVmZXRjaG50YSBbZXNpICsgRENUU0laRTIqU0laRU9GX0pDT0VGICsgMiozMl0KKyAgICAgICAgcHJlZmV0Y2hudGEgW2VzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDMqMzJdCiAKLQk7IC0tLS0gUGFzcyAyOiBwcm9jZXNzIHJvd3MgZnJvbSB3b3JrIGFycmF5LCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4KKyAgICAgICAgOyAtLS0tIFBhc3MgMjogcHJvY2VzcyByb3dzIGZyb20gd29yayBhcnJheSwgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuCiAKLQltb3YJZWF4LCBbb3JpZ2luYWxfZWJwXQotCW1vdgllZGksIEpTQU1QQVJSQVkgW291dHB1dF9idWYoZWF4KV0JOyAoSlNBTVBST1cgKikKLQltb3YJZWF4LCBKRElNRU5TSU9OIFtvdXRwdXRfY29sKGVheCldCisgICAgICAgIG1vdiAgICAgZWF4LCBbb3JpZ2luYWxfZWJwXQorICAgICAgICBtb3YgICAgIGVkaSwgSlNBTVBBUlJBWSBbb3V0cHV0X2J1ZihlYXgpXSAgICAgICA7IChKU0FNUFJPVyAqKQorICAgICAgICBtb3YgICAgIGVheCwgSkRJTUVOU0lPTiBbb3V0cHV0X2NvbChlYXgpXQogCi0JOyAtLSBFdmVuIHBhcnQKKyAgICAgICAgOyAtLSBFdmVuIHBhcnQKIAotCTsgeG1tNj1jb2wwLCB4bW01PWNvbDIsIHhtbTE9Y29sNCwgeG1tMz1jb2w2CisgICAgICAgIDsgeG1tNj1jb2wwLCB4bW01PWNvbDIsIHhtbTE9Y29sNCwgeG1tMz1jb2w2CiAKLQltb3ZkcWEJeG1tMix4bW02Ci0JbW92ZHFhCXhtbTAseG1tNQotCXBzdWJ3CXhtbTYseG1tMQkJOyB4bW02PXRtcDExCi0JcHN1YncJeG1tNSx4bW0zCi0JcGFkZHcJeG1tMix4bW0xCQk7IHhtbTI9dG1wMTAKLQlwYWRkdwl4bW0wLHhtbTMJCTsgeG1tMD10bXAxMworICAgICAgICBtb3ZkcWEgIHhtbTIseG1tNgorICAgICAgICBtb3ZkcWEgIHhtbTAseG1tNQorICAgICAgICBwc3VidyAgIHhtbTYseG1tMSAgICAgICAgICAgICAgIDsgeG1tNj10bXAxMQorICAgICAgICBwc3VidyAgIHhtbTUseG1tMworICAgICAgICBwYWRkdyAgIHhtbTIseG1tMSAgICAgICAgICAgICAgIDsgeG1tMj10bXAxMAorICAgICAgICBwYWRkdyAgIHhtbTAseG1tMyAgICAgICAgICAgICAgIDsgeG1tMD10bXAxMwogCi0JcHNsbHcJeG1tNSxQUkVfTVVMVElQTFlfU0NBTEVfQklUUwotCXBtdWxodwl4bW01LFtHT1RPRkYoZWJ4LFBXX0YxNDE0KV0KLQlwc3Vidwl4bW01LHhtbTAJCTsgeG1tNT10bXAxMgorICAgICAgICBwc2xsdyAgIHhtbTUsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKyAgICAgICAgcG11bGh3ICB4bW01LFtHT1RPRkYoZWJ4LFBXX0YxNDE0KV0KKyAgICAgICAgcHN1YncgICB4bW01LHhtbTAgICAgICAgICAgICAgICA7IHhtbTU9dG1wMTIKIAotCW1vdmRxYQl4bW0xLHhtbTIKLQltb3ZkcWEJeG1tMyx4bW02Ci0JcHN1YncJeG1tMix4bW0wCQk7IHhtbTI9dG1wMwotCXBzdWJ3CXhtbTYseG1tNQkJOyB4bW02PXRtcDIKLQlwYWRkdwl4bW0xLHhtbTAJCTsgeG1tMT10bXAwCi0JcGFkZHcJeG1tMyx4bW01CQk7IHhtbTM9dG1wMQorICAgICAgICBtb3ZkcWEgIHhtbTEseG1tMgorICAgICAgICBtb3ZkcWEgIHhtbTMseG1tNgorICAgICAgICBwc3VidyAgIHhtbTIseG1tMCAgICAgICAgICAgICAgIDsgeG1tMj10bXAzCisgICAgICAgIHBzdWJ3ICAgeG1tNix4bW01ICAgICAgICAgICAgICAgOyB4bW02PXRtcDIKKyAgICAgICAgcGFkZHcgICB4bW0xLHhtbTAgICAgICAgICAgICAgICA7IHhtbTE9dG1wMAorICAgICAgICBwYWRkdyAgIHhtbTMseG1tNSAgICAgICAgICAgICAgIDsgeG1tMz10bXAxCiAKLQltb3ZkcWEJeG1tMCwgWE1NV09SRCBbd2soMCldCTsgeG1tMD1jb2wxCi0JbW92ZHFhCXhtbTUsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTU9Y29sMworICAgICAgICBtb3ZkcWEgIHhtbTAsIFhNTVdPUkQgW3drKDApXSAgIDsgeG1tMD1jb2wxCisgICAgICAgIG1vdmRxYSAgeG1tNSwgWE1NV09SRCBbd2soMSldICAgOyB4bW01PWNvbDMKIAotCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTIJOyB3aygwKT10bXAzCi0JbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tNgk7IHdrKDEpPXRtcDIKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygwKV0sIHhtbTIgICA7IHdrKDApPXRtcDMKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygxKV0sIHhtbTYgICA7IHdrKDEpPXRtcDIKIAotCTsgLS0gT2RkIHBhcnQKKyAgICAgICAgOyAtLSBPZGQgcGFydAogCi0JOyB4bW0wPWNvbDEsIHhtbTU9Y29sMywgeG1tND1jb2w1LCB4bW03PWNvbDcKKyAgICAgICAgOyB4bW0wPWNvbDEsIHhtbTU9Y29sMywgeG1tND1jb2w1LCB4bW03PWNvbDcKIAotCW1vdmRxYQl4bW0yLHhtbTAKLQltb3ZkcWEJeG1tNix4bW00Ci0JcHN1YncJeG1tMCx4bW03CQk7IHhtbTA9ejEyCi0JcHN1YncJeG1tNCx4bW01CQk7IHhtbTQ9ejEwCi0JcGFkZHcJeG1tMix4bW03CQk7IHhtbTI9ejExCi0JcGFkZHcJeG1tNix4bW01CQk7IHhtbTY9ejEzCisgICAgICAgIG1vdmRxYSAgeG1tMix4bW0wCisgICAgICAgIG1vdmRxYSAgeG1tNix4bW00CisgICAgICAgIHBzdWJ3ICAgeG1tMCx4bW03ICAgICAgICAgICAgICAgOyB4bW0wPXoxMgorICAgICAgICBwc3VidyAgIHhtbTQseG1tNSAgICAgICAgICAgICAgIDsgeG1tND16MTAKKyAgICAgICAgcGFkZHcgICB4bW0yLHhtbTcgICAgICAgICAgICAgICA7IHhtbTI9ejExCisgICAgICAgIHBhZGR3ICAgeG1tNix4bW01ICAgICAgICAgICAgICAgOyB4bW02PXoxMwogCi0JbW92ZHFhCXhtbTcseG1tNAkJOyB4bW03PXoxMCh1bnNjYWxlZCkKLQlwc2xsdwl4bW0wLFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCi0JcHNsbHcJeG1tNCxQUkVfTVVMVElQTFlfU0NBTEVfQklUUworICAgICAgICBtb3ZkcWEgIHhtbTcseG1tNCAgICAgICAgICAgICAgIDsgeG1tNz16MTAodW5zY2FsZWQpCisgICAgICAgIHBzbGx3ICAgeG1tMCxQUkVfTVVMVElQTFlfU0NBTEVfQklUUworICAgICAgICBwc2xsdyAgIHhtbTQsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKIAotCW1vdmRxYQl4bW01LHhtbTIKLQlwc3Vidwl4bW0yLHhtbTYKLQlwYWRkdwl4bW01LHhtbTYJCTsgeG1tNT10bXA3CisgICAgICAgIG1vdmRxYSAgeG1tNSx4bW0yCisgICAgICAgIHBzdWJ3ICAgeG1tMix4bW02CisgICAgICAgIHBhZGR3ICAgeG1tNSx4bW02ICAgICAgICAgICAgICAgOyB4bW01PXRtcDcKIAotCXBzbGx3CXhtbTIsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKLQlwbXVsaHcJeG1tMixbR09UT0ZGKGVieCxQV19GMTQxNCldCTsgeG1tMj10bXAxMQorICAgICAgICBwc2xsdyAgIHhtbTIsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKyAgICAgICAgcG11bGh3ICB4bW0yLFtHT1RPRkYoZWJ4LFBXX0YxNDE0KV0gICAgIDsgeG1tMj10bXAxMQogCi0JOyBUbyBhdm9pZCBvdmVyZmxvdy4uLgotCTsKLQk7IChPcmlnaW5hbCkKLQk7IHRtcDEyID0gLTIuNjEzMTI1OTMwICogejEwICsgejU7Ci0JOwotCTsgKFRoaXMgaW1wbGVtZW50YXRpb24pCi0JOyB0bXAxMiA9ICgtMS42MTMxMjU5MzAgLSAxKSAqIHoxMCArIHo1OwotCTsgICAgICAgPSAtMS42MTMxMjU5MzAgKiB6MTAgLSB6MTAgKyB6NTsKKyAgICAgICAgOyBUbyBhdm9pZCBvdmVyZmxvdy4uLgorICAgICAgICA7CisgICAgICAgIDsgKE9yaWdpbmFsKQorICAgICAgICA7IHRtcDEyID0gLTIuNjEzMTI1OTMwICogejEwICsgejU7CisgICAgICAgIDsKKyAgICAgICAgOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKyAgICAgICAgOyB0bXAxMiA9ICgtMS42MTMxMjU5MzAgLSAxKSAqIHoxMCArIHo1OworICAgICAgICA7ICAgICAgID0gLTEuNjEzMTI1OTMwICogejEwIC0gejEwICsgejU7CiAKLQltb3ZkcWEJeG1tNix4bW00Ci0JcGFkZHcJeG1tNCx4bW0wCi0JcG11bGh3CXhtbTQsW0dPVE9GRihlYngsUFdfRjE4NDcpXQk7IHhtbTQ9ejUKLQlwbXVsaHcJeG1tNixbR09UT0ZGKGVieCxQV19NRjE2MTMpXQotCXBtdWxodwl4bW0wLFtHT1RPRkYoZWJ4LFBXX0YxMDgyKV0KLQlwc3Vidwl4bW02LHhtbTcKLQlwc3Vidwl4bW0wLHhtbTQJCTsgeG1tMD10bXAxMAotCXBhZGR3CXhtbTYseG1tNAkJOyB4bW02PXRtcDEyCisgICAgICAgIG1vdmRxYSAgeG1tNix4bW00CisgICAgICAgIHBhZGR3ICAgeG1tNCx4bW0wCisgICAgICAgIHBtdWxodyAgeG1tNCxbR09UT0ZGKGVieCxQV19GMTg0NyldICAgICA7IHhtbTQ9ejUKKyAgICAgICAgcG11bGh3ICB4bW02LFtHT1RPRkYoZWJ4LFBXX01GMTYxMyldCisgICAgICAgIHBtdWxodyAgeG1tMCxbR09UT0ZGKGVieCxQV19GMTA4MildCisgICAgICAgIHBzdWJ3ICAgeG1tNix4bW03CisgICAgICAgIHBzdWJ3ICAgeG1tMCx4bW00ICAgICAgICAgICAgICAgOyB4bW0wPXRtcDEwCisgICAgICAgIHBhZGR3ICAgeG1tNix4bW00ICAgICAgICAgICAgICAgOyB4bW02PXRtcDEyCiAKLQk7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQorICAgICAgICA7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQogCi0JcHN1YncJeG1tNix4bW01CQk7IHhtbTY9dG1wNgotCW1vdmRxYQl4bW03LHhtbTEKLQltb3ZkcWEJeG1tNCx4bW0zCi0JcGFkZHcJeG1tMSx4bW01CQk7IHhtbTE9ZGF0YTA9KDAwIDEwIDIwIDMwIDQwIDUwIDYwIDcwKQotCXBhZGR3CXhtbTMseG1tNgkJOyB4bW0zPWRhdGExPSgwMSAxMSAyMSAzMSA0MSA1MSA2MSA3MSkKLQlwc3Jhdwl4bW0xLChQQVNTMV9CSVRTKzMpCTsgZGVzY2FsZQotCXBzcmF3CXhtbTMsKFBBU1MxX0JJVFMrMykJOyBkZXNjYWxlCi0JcHN1YncJeG1tNyx4bW01CQk7IHhtbTc9ZGF0YTc9KDA3IDE3IDI3IDM3IDQ3IDU3IDY3IDc3KQotCXBzdWJ3CXhtbTQseG1tNgkJOyB4bW00PWRhdGE2PSgwNiAxNiAyNiAzNiA0NiA1NiA2NiA3NikKLQlwc3Jhdwl4bW03LChQQVNTMV9CSVRTKzMpCTsgZGVzY2FsZQotCXBzcmF3CXhtbTQsKFBBU1MxX0JJVFMrMykJOyBkZXNjYWxlCi0JcHN1YncJeG1tMix4bW02CQk7IHhtbTI9dG1wNQorICAgICAgICBwc3VidyAgIHhtbTYseG1tNSAgICAgICAgICAgICAgIDsgeG1tNj10bXA2CisgICAgICAgIG1vdmRxYSAgeG1tNyx4bW0xCisgICAgICAgIG1vdmRxYSAgeG1tNCx4bW0zCisgICAgICAgIHBhZGR3ICAgeG1tMSx4bW01ICAgICAgICAgICAgICAgOyB4bW0xPWRhdGEwPSgwMCAxMCAyMCAzMCA0MCA1MCA2MCA3MCkKKyAgICAgICAgcGFkZHcgICB4bW0zLHhtbTYgICAgICAgICAgICAgICA7IHhtbTM9ZGF0YTE9KDAxIDExIDIxIDMxIDQxIDUxIDYxIDcxKQorICAgICAgICBwc3JhdyAgIHhtbTEsKFBBU1MxX0JJVFMrMykgICAgIDsgZGVzY2FsZQorICAgICAgICBwc3JhdyAgIHhtbTMsKFBBU1MxX0JJVFMrMykgICAgIDsgZGVzY2FsZQorICAgICAgICBwc3VidyAgIHhtbTcseG1tNSAgICAgICAgICAgICAgIDsgeG1tNz1kYXRhNz0oMDcgMTcgMjcgMzcgNDcgNTcgNjcgNzcpCisgICAgICAgIHBzdWJ3ICAgeG1tNCx4bW02ICAgICAgICAgICAgICAgOyB4bW00PWRhdGE2PSgwNiAxNiAyNiAzNiA0NiA1NiA2NiA3NikKKyAgICAgICAgcHNyYXcgICB4bW03LChQQVNTMV9CSVRTKzMpICAgICA7IGRlc2NhbGUKKyAgICAgICAgcHNyYXcgICB4bW00LChQQVNTMV9CSVRTKzMpICAgICA7IGRlc2NhbGUKKyAgICAgICAgcHN1YncgICB4bW0yLHhtbTYgICAgICAgICAgICAgICA7IHhtbTI9dG1wNQogCi0JcGFja3Nzd2IgIHhtbTEseG1tNAk7IHhtbTE9KDAwIDEwIDIwIDMwIDQwIDUwIDYwIDcwIDA2IDE2IDI2IDM2IDQ2IDU2IDY2IDc2KQotCXBhY2tzc3diICB4bW0zLHhtbTcJOyB4bW0zPSgwMSAxMSAyMSAzMSA0MSA1MSA2MSA3MSAwNyAxNyAyNyAzNyA0NyA1NyA2NyA3NykKKyAgICAgICAgcGFja3Nzd2IgIHhtbTEseG1tNCAgICAgOyB4bW0xPSgwMCAxMCAyMCAzMCA0MCA1MCA2MCA3MCAwNiAxNiAyNiAzNiA0NiA1NiA2NiA3NikKKyAgICAgICAgcGFja3Nzd2IgIHhtbTMseG1tNyAgICAgOyB4bW0zPSgwMSAxMSAyMSAzMSA0MSA1MSA2MSA3MSAwNyAxNyAyNyAzNyA0NyA1NyA2NyA3NykKIAotCW1vdmRxYQl4bW01LCBYTU1XT1JEIFt3aygxKV0JOyB4bW01PXRtcDIKLQltb3ZkcWEJeG1tNiwgWE1NV09SRCBbd2soMCldCTsgeG1tNj10bXAzCisgICAgICAgIG1vdmRxYSAgeG1tNSwgWE1NV09SRCBbd2soMSldICAgOyB4bW01PXRtcDIKKyAgICAgICAgbW92ZHFhICB4bW02LCBYTU1XT1JEIFt3aygwKV0gICA7IHhtbTY9dG1wMwogCi0JcGFkZHcJeG1tMCx4bW0yCQk7IHhtbTA9dG1wNAotCW1vdmRxYQl4bW00LHhtbTUKLQltb3ZkcWEJeG1tNyx4bW02Ci0JcGFkZHcJeG1tNSx4bW0yCQk7IHhtbTU9ZGF0YTI9KDAyIDEyIDIyIDMyIDQyIDUyIDYyIDcyKQotCXBhZGR3CXhtbTYseG1tMAkJOyB4bW02PWRhdGE0PSgwNCAxNCAyNCAzNCA0NCA1NCA2NCA3NCkKLQlwc3Jhdwl4bW01LChQQVNTMV9CSVRTKzMpCTsgZGVzY2FsZQotCXBzcmF3CXhtbTYsKFBBU1MxX0JJVFMrMykJOyBkZXNjYWxlCi0JcHN1YncJeG1tNCx4bW0yCQk7IHhtbTQ9ZGF0YTU9KDA1IDE1IDI1IDM1IDQ1IDU1IDY1IDc1KQotCXBzdWJ3CXhtbTcseG1tMAkJOyB4bW03PWRhdGEzPSgwMyAxMyAyMyAzMyA0MyA1MyA2MyA3MykKLQlwc3Jhdwl4bW00LChQQVNTMV9CSVRTKzMpCTsgZGVzY2FsZQotCXBzcmF3CXhtbTcsKFBBU1MxX0JJVFMrMykJOyBkZXNjYWxlCisgICAgICAgIHBhZGR3ICAgeG1tMCx4bW0yICAgICAgICAgICAgICAgOyB4bW0wPXRtcDQKKyAgICAgICAgbW92ZHFhICB4bW00LHhtbTUKKyAgICAgICAgbW92ZHFhICB4bW03LHhtbTYKKyAgICAgICAgcGFkZHcgICB4bW01LHhtbTIgICAgICAgICAgICAgICA7IHhtbTU9ZGF0YTI9KDAyIDEyIDIyIDMyIDQyIDUyIDYyIDcyKQorICAgICAgICBwYWRkdyAgIHhtbTYseG1tMCAgICAgICAgICAgICAgIDsgeG1tNj1kYXRhND0oMDQgMTQgMjQgMzQgNDQgNTQgNjQgNzQpCisgICAgICAgIHBzcmF3ICAgeG1tNSwoUEFTUzFfQklUUyszKSAgICAgOyBkZXNjYWxlCisgICAgICAgIHBzcmF3ICAgeG1tNiwoUEFTUzFfQklUUyszKSAgICAgOyBkZXNjYWxlCisgICAgICAgIHBzdWJ3ICAgeG1tNCx4bW0yICAgICAgICAgICAgICAgOyB4bW00PWRhdGE1PSgwNSAxNSAyNSAzNSA0NSA1NSA2NSA3NSkKKyAgICAgICAgcHN1YncgICB4bW03LHhtbTAgICAgICAgICAgICAgICA7IHhtbTc9ZGF0YTM9KDAzIDEzIDIzIDMzIDQzIDUzIDYzIDczKQorICAgICAgICBwc3JhdyAgIHhtbTQsKFBBU1MxX0JJVFMrMykgICAgIDsgZGVzY2FsZQorICAgICAgICBwc3JhdyAgIHhtbTcsKFBBU1MxX0JJVFMrMykgICAgIDsgZGVzY2FsZQogCi0JbW92ZHFhICAgIHhtbTIsW0dPVE9GRihlYngsUEJfQ0VOVEVSSlNBTVApXQk7IHhtbTI9W1BCX0NFTlRFUkpTQU1QXQorICAgICAgICBtb3ZkcWEgICAgeG1tMixbR09UT0ZGKGVieCxQQl9DRU5URVJKU0FNUCldICAgICA7IHhtbTI9W1BCX0NFTlRFUkpTQU1QXQogCi0JcGFja3Nzd2IgIHhtbTUseG1tNgk7IHhtbTU9KDAyIDEyIDIyIDMyIDQyIDUyIDYyIDcyIDA0IDE0IDI0IDM0IDQ0IDU0IDY0IDc0KQotCXBhY2tzc3diICB4bW03LHhtbTQJOyB4bW03PSgwMyAxMyAyMyAzMyA0MyA1MyA2MyA3MyAwNSAxNSAyNSAzNSA0NSA1NSA2NSA3NSkKKyAgICAgICAgcGFja3Nzd2IgIHhtbTUseG1tNiAgICAgOyB4bW01PSgwMiAxMiAyMiAzMiA0MiA1MiA2MiA3MiAwNCAxNCAyNCAzNCA0NCA1NCA2NCA3NCkKKyAgICAgICAgcGFja3Nzd2IgIHhtbTcseG1tNCAgICAgOyB4bW03PSgwMyAxMyAyMyAzMyA0MyA1MyA2MyA3MyAwNSAxNSAyNSAzNSA0NSA1NSA2NSA3NSkKIAotCXBhZGRiICAgICB4bW0xLHhtbTIKLQlwYWRkYiAgICAgeG1tMyx4bW0yCi0JcGFkZGIgICAgIHhtbTUseG1tMgotCXBhZGRiICAgICB4bW03LHhtbTIKKyAgICAgICAgcGFkZGIgICAgIHhtbTEseG1tMgorICAgICAgICBwYWRkYiAgICAgeG1tMyx4bW0yCisgICAgICAgIHBhZGRiICAgICB4bW01LHhtbTIKKyAgICAgICAgcGFkZGIgICAgIHhtbTcseG1tMgogCi0JbW92ZHFhICAgIHhtbTAseG1tMQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKLQlwdW5wY2tsYncgeG1tMSx4bW0zCTsgeG1tMT0oMDAgMDEgMTAgMTEgMjAgMjEgMzAgMzEgNDAgNDEgNTAgNTEgNjAgNjEgNzAgNzEpCi0JcHVucGNraGJ3IHhtbTAseG1tMwk7IHhtbTA9KDA2IDA3IDE2IDE3IDI2IDI3IDM2IDM3IDQ2IDQ3IDU2IDU3IDY2IDY3IDc2IDc3KQotCW1vdmRxYSAgICB4bW02LHhtbTUJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCi0JcHVucGNrbGJ3IHhtbTUseG1tNwk7IHhtbTU9KDAyIDAzIDEyIDEzIDIyIDIzIDMyIDMzIDQyIDQzIDUyIDUzIDYyIDYzIDcyIDczKQotCXB1bnBja2hidyB4bW02LHhtbTcJOyB4bW02PSgwNCAwNSAxNCAxNSAyNCAyNSAzNCAzNSA0NCA0NSA1NCA1NSA2NCA2NSA3NCA3NSkKKyAgICAgICAgbW92ZHFhICAgIHhtbTAseG1tMSAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgICAgIHB1bnBja2xidyB4bW0xLHhtbTMgICAgIDsgeG1tMT0oMDAgMDEgMTAgMTEgMjAgMjEgMzAgMzEgNDAgNDEgNTAgNTEgNjAgNjEgNzAgNzEpCisgICAgICAgIHB1bnBja2hidyB4bW0wLHhtbTMgICAgIDsgeG1tMD0oMDYgMDcgMTYgMTcgMjYgMjcgMzYgMzcgNDYgNDcgNTYgNTcgNjYgNjcgNzYgNzcpCisgICAgICAgIG1vdmRxYSAgICB4bW02LHhtbTUgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgICAgICBwdW5wY2tsYncgeG1tNSx4bW03ICAgICA7IHhtbTU9KDAyIDAzIDEyIDEzIDIyIDIzIDMyIDMzIDQyIDQzIDUyIDUzIDYyIDYzIDcyIDczKQorICAgICAgICBwdW5wY2toYncgeG1tNix4bW03ICAgICA7IHhtbTY9KDA0IDA1IDE0IDE1IDI0IDI1IDM0IDM1IDQ0IDQ1IDU0IDU1IDY0IDY1IDc0IDc1KQogCi0JbW92ZHFhICAgIHhtbTQseG1tMQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKLQlwdW5wY2tsd2QgeG1tMSx4bW01CTsgeG1tMT0oMDAgMDEgMDIgMDMgMTAgMTEgMTIgMTMgMjAgMjEgMjIgMjMgMzAgMzEgMzIgMzMpCi0JcHVucGNraHdkIHhtbTQseG1tNQk7IHhtbTQ9KDQwIDQxIDQyIDQzIDUwIDUxIDUyIDUzIDYwIDYxIDYyIDYzIDcwIDcxIDcyIDczKQotCW1vdmRxYSAgICB4bW0yLHhtbTYJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCi0JcHVucGNrbHdkIHhtbTYseG1tMAk7IHhtbTY9KDA0IDA1IDA2IDA3IDE0IDE1IDE2IDE3IDI0IDI1IDI2IDI3IDM0IDM1IDM2IDM3KQotCXB1bnBja2h3ZCB4bW0yLHhtbTAJOyB4bW0yPSg0NCA0NSA0NiA0NyA1NCA1NSA1NiA1NyA2NCA2NSA2NiA2NyA3NCA3NSA3NiA3NykKKyAgICAgICAgbW92ZHFhICAgIHhtbTQseG1tMSAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgICAgIHB1bnBja2x3ZCB4bW0xLHhtbTUgICAgIDsgeG1tMT0oMDAgMDEgMDIgMDMgMTAgMTEgMTIgMTMgMjAgMjEgMjIgMjMgMzAgMzEgMzIgMzMpCisgICAgICAgIHB1bnBja2h3ZCB4bW00LHhtbTUgICAgIDsgeG1tND0oNDAgNDEgNDIgNDMgNTAgNTEgNTIgNTMgNjAgNjEgNjIgNjMgNzAgNzEgNzIgNzMpCisgICAgICAgIG1vdmRxYSAgICB4bW0yLHhtbTYgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgICAgICBwdW5wY2tsd2QgeG1tNix4bW0wICAgICA7IHhtbTY9KDA0IDA1IDA2IDA3IDE0IDE1IDE2IDE3IDI0IDI1IDI2IDI3IDM0IDM1IDM2IDM3KQorICAgICAgICBwdW5wY2tod2QgeG1tMix4bW0wICAgICA7IHhtbTI9KDQ0IDQ1IDQ2IDQ3IDU0IDU1IDU2IDU3IDY0IDY1IDY2IDY3IDc0IDc1IDc2IDc3KQogCi0JbW92ZHFhICAgIHhtbTMseG1tMQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKLQlwdW5wY2tsZHEgeG1tMSx4bW02CTsgeG1tMT0oMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcgMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcpCi0JcHVucGNraGRxIHhtbTMseG1tNgk7IHhtbTM9KDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3IDMwIDMxIDMyIDMzIDM0IDM1IDM2IDM3KQotCW1vdmRxYSAgICB4bW03LHhtbTQJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCi0JcHVucGNrbGRxIHhtbTQseG1tMgk7IHhtbTQ9KDQwIDQxIDQyIDQzIDQ0IDQ1IDQ2IDQ3IDUwIDUxIDUyIDUzIDU0IDU1IDU2IDU3KQotCXB1bnBja2hkcSB4bW03LHhtbTIJOyB4bW03PSg2MCA2MSA2MiA2MyA2NCA2NSA2NiA2NyA3MCA3MSA3MiA3MyA3NCA3NSA3NiA3NykKKyAgICAgICAgbW92ZHFhICAgIHhtbTMseG1tMSAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisgICAgICAgIHB1bnBja2xkcSB4bW0xLHhtbTYgICAgIDsgeG1tMT0oMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcgMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcpCisgICAgICAgIHB1bnBja2hkcSB4bW0zLHhtbTYgICAgIDsgeG1tMz0oMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcgMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcpCisgICAgICAgIG1vdmRxYSAgICB4bW03LHhtbTQgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorICAgICAgICBwdW5wY2tsZHEgeG1tNCx4bW0yICAgICA7IHhtbTQ9KDQwIDQxIDQyIDQzIDQ0IDQ1IDQ2IDQ3IDUwIDUxIDUyIDUzIDU0IDU1IDU2IDU3KQorICAgICAgICBwdW5wY2toZHEgeG1tNyx4bW0yICAgICA7IHhtbTc9KDYwIDYxIDYyIDYzIDY0IDY1IDY2IDY3IDcwIDcxIDcyIDczIDc0IDc1IDc2IDc3KQogCi0JcHNodWZkCXhtbTUseG1tMSwweDRFCTsgeG1tNT0oMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcgMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcpCi0JcHNodWZkCXhtbTAseG1tMywweDRFCTsgeG1tMD0oMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcgMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcpCi0JcHNodWZkCXhtbTYseG1tNCwweDRFCTsgeG1tNj0oNTAgNTEgNTIgNTMgNTQgNTUgNTYgNTcgNDAgNDEgNDIgNDMgNDQgNDUgNDYgNDcpCi0JcHNodWZkCXhtbTIseG1tNywweDRFCTsgeG1tMj0oNzAgNzEgNzIgNzMgNzQgNzUgNzYgNzcgNjAgNjEgNjIgNjMgNjQgNjUgNjYgNjcpCisgICAgICAgIHBzaHVmZCAgeG1tNSx4bW0xLDB4NEUgIDsgeG1tNT0oMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcgMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcpCisgICAgICAgIHBzaHVmZCAgeG1tMCx4bW0zLDB4NEUgIDsgeG1tMD0oMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcgMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcpCisgICAgICAgIHBzaHVmZCAgeG1tNix4bW00LDB4NEUgIDsgeG1tNj0oNTAgNTEgNTIgNTMgNTQgNTUgNTYgNTcgNDAgNDEgNDIgNDMgNDQgNDUgNDYgNDcpCisgICAgICAgIHBzaHVmZCAgeG1tMix4bW03LDB4NEUgIDsgeG1tMj0oNzAgNzEgNzIgNzMgNzQgNzUgNzYgNzcgNjAgNjEgNjIgNjMgNjQgNjUgNjYgNjcpCiAKLQltb3YJZWR4LCBKU0FNUFJPVyBbZWRpKzAqU0laRU9GX0pTQU1QUk9XXQotCW1vdgllc2ksIEpTQU1QUk9XIFtlZGkrMipTSVpFT0ZfSlNBTVBST1ddCi0JbW92cQlYTU1fTU1XT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXSwgeG1tMQotCW1vdnEJWE1NX01NV09SRCBbZXNpK2VheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTMKLQltb3YJZWR4LCBKU0FNUFJPVyBbZWRpKzQqU0laRU9GX0pTQU1QUk9XXQotCW1vdgllc2ksIEpTQU1QUk9XIFtlZGkrNipTSVpFT0ZfSlNBTVBST1ddCi0JbW92cQlYTU1fTU1XT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXSwgeG1tNAotCW1vdnEJWE1NX01NV09SRCBbZXNpK2VheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTcKKyAgICAgICAgbW92ICAgICBlZHgsIEpTQU1QUk9XIFtlZGkrMCpTSVpFT0ZfSlNBTVBST1ddCisgICAgICAgIG1vdiAgICAgZXNpLCBKU0FNUFJPVyBbZWRpKzIqU0laRU9GX0pTQU1QUk9XXQorICAgICAgICBtb3ZxICAgIFhNTV9NTVdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdLCB4bW0xCisgICAgICAgIG1vdnEgICAgWE1NX01NV09SRCBbZXNpK2VheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTMKKyAgICAgICAgbW92ICAgICBlZHgsIEpTQU1QUk9XIFtlZGkrNCpTSVpFT0ZfSlNBTVBST1ddCisgICAgICAgIG1vdiAgICAgZXNpLCBKU0FNUFJPVyBbZWRpKzYqU0laRU9GX0pTQU1QUk9XXQorICAgICAgICBtb3ZxICAgIFhNTV9NTVdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdLCB4bW00CisgICAgICAgIG1vdnEgICAgWE1NX01NV09SRCBbZXNpK2VheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTcKIAotCW1vdgllZHgsIEpTQU1QUk9XIFtlZGkrMSpTSVpFT0ZfSlNBTVBST1ddCi0JbW92CWVzaSwgSlNBTVBST1cgW2VkaSszKlNJWkVPRl9KU0FNUFJPV10KLQltb3ZxCVhNTV9NTVdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdLCB4bW01Ci0JbW92cQlYTU1fTU1XT1JEIFtlc2krZWF4KlNJWkVPRl9KU0FNUExFXSwgeG1tMAotCW1vdgllZHgsIEpTQU1QUk9XIFtlZGkrNSpTSVpFT0ZfSlNBTVBST1ddCi0JbW92CWVzaSwgSlNBTVBST1cgW2VkaSs3KlNJWkVPRl9KU0FNUFJPV10KLQltb3ZxCVhNTV9NTVdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdLCB4bW02Ci0JbW92cQlYTU1fTU1XT1JEIFtlc2krZWF4KlNJWkVPRl9KU0FNUExFXSwgeG1tMgorICAgICAgICBtb3YgICAgIGVkeCwgSlNBTVBST1cgW2VkaSsxKlNJWkVPRl9KU0FNUFJPV10KKyAgICAgICAgbW92ICAgICBlc2ksIEpTQU1QUk9XIFtlZGkrMypTSVpFT0ZfSlNBTVBST1ddCisgICAgICAgIG1vdnEgICAgWE1NX01NV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTUKKyAgICAgICAgbW92cSAgICBYTU1fTU1XT1JEIFtlc2krZWF4KlNJWkVPRl9KU0FNUExFXSwgeG1tMAorICAgICAgICBtb3YgICAgIGVkeCwgSlNBTVBST1cgW2VkaSs1KlNJWkVPRl9KU0FNUFJPV10KKyAgICAgICAgbW92ICAgICBlc2ksIEpTQU1QUk9XIFtlZGkrNypTSVpFT0ZfSlNBTVBST1ddCisgICAgICAgIG1vdnEgICAgWE1NX01NV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTYKKyAgICAgICAgbW92cSAgICBYTU1fTU1XT1JEIFtlc2krZWF4KlNJWkVPRl9KU0FNUExFXSwgeG1tMgogCi0JcG9wCWVkaQotCXBvcAllc2kKLTsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLTsJcG9wCWVjeAkJOyB1bnVzZWQKLQlwb3BwaWMJZWJ4Ci0JbW92CWVzcCxlYnAJCTsgZXNwIDwtIGFsaWduZWQgZWJwCi0JcG9wCWVzcAkJOyBlc3AgPC0gb3JpZ2luYWwgZWJwCi0JcG9wCWVicAotCXJldAorICAgICAgICBwb3AgICAgIGVkaQorICAgICAgICBwb3AgICAgIGVzaQorOyAgICAgICBwb3AgICAgIGVkeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgICAgICBwb3AgICAgIGVjeCAgICAgICAgICAgICA7IHVudXNlZAorICAgICAgICBwb3BwaWMgIGVieAorICAgICAgICBtb3YgICAgIGVzcCxlYnAgICAgICAgICA7IGVzcCA8LSBhbGlnbmVkIGVicAorICAgICAgICBwb3AgICAgIGVzcCAgICAgICAgICAgICA7IGVzcCA8LSBvcmlnaW5hbCBlYnAKKyAgICAgICAgcG9wICAgICBlYnAKKyAgICAgICAgcmV0CiAKIDsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCiA7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCi0JYWxpZ24JMTYKKyAgICAgICAgYWxpZ24gICAxNgpkaWZmIC0tZ2l0IGEvc2ltZC9qaXNzMmludC02NC5hc20gYi9zaW1kL2ppc3MyaW50LTY0LmFzbQppbmRleCAxMzc2NGQ2Li4xMGU5NTIxIDEwMDY0NAotLS0gYS9zaW1kL2ppc3MyaW50LTY0LmFzbQorKysgYi9zaW1kL2ppc3MyaW50LTY0LmFzbQpAQCAtMjcsNjcgKzI3LDY3IEBACiAKIDsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotJWRlZmluZSBDT05TVF9CSVRTCTEzCi0lZGVmaW5lIFBBU1MxX0JJVFMJMgorJWRlZmluZSBDT05TVF9CSVRTICAgICAgMTMKKyVkZWZpbmUgUEFTUzFfQklUUyAgICAgIDIKIAotJWRlZmluZSBERVNDQUxFX1AxCShDT05TVF9CSVRTLVBBU1MxX0JJVFMpCi0lZGVmaW5lIERFU0NBTEVfUDIJKENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQorJWRlZmluZSBERVNDQUxFX1AxICAgICAgKENPTlNUX0JJVFMtUEFTUzFfQklUUykKKyVkZWZpbmUgREVTQ0FMRV9QMiAgICAgIChDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKIAogJWlmIENPTlNUX0JJVFMgPT0gMTMKLUZfMF8yOTgJZXF1CSAyNDQ2CQk7IEZJWCgwLjI5ODYzMTMzNikKLUZfMF8zOTAJZXF1CSAzMTk2CQk7IEZJWCgwLjM5MDE4MDY0NCkKLUZfMF81NDEJZXF1CSA0NDMzCQk7IEZJWCgwLjU0MTE5NjEwMCkKLUZfMF83NjUJZXF1CSA2MjcwCQk7IEZJWCgwLjc2NTM2Njg2NSkKLUZfMF84OTkJZXF1CSA3MzczCQk7IEZJWCgwLjg5OTk3NjIyMykKLUZfMV8xNzUJZXF1CSA5NjMzCQk7IEZJWCgxLjE3NTg3NTYwMikKLUZfMV81MDEJZXF1CTEyMjk5CQk7IEZJWCgxLjUwMTMyMTExMCkKLUZfMV84NDcJZXF1CTE1MTM3CQk7IEZJWCgxLjg0Nzc1OTA2NSkKLUZfMV85NjEJZXF1CTE2MDY5CQk7IEZJWCgxLjk2MTU3MDU2MCkKLUZfMl8wNTMJZXF1CTE2ODE5CQk7IEZJWCgyLjA1MzExOTg2OSkKLUZfMl81NjIJZXF1CTIwOTk1CQk7IEZJWCgyLjU2MjkxNTQ0NykKLUZfM18wNzIJZXF1CTI1MTcyCQk7IEZJWCgzLjA3MjcxMTAyNikKK0ZfMF8yOTggZXF1ICAgICAgMjQ0NiAgICAgICAgICAgOyBGSVgoMC4yOTg2MzEzMzYpCitGXzBfMzkwIGVxdSAgICAgIDMxOTYgICAgICAgICAgIDsgRklYKDAuMzkwMTgwNjQ0KQorRl8wXzU0MSBlcXUgICAgICA0NDMzICAgICAgICAgICA7IEZJWCgwLjU0MTE5NjEwMCkKK0ZfMF83NjUgZXF1ICAgICAgNjI3MCAgICAgICAgICAgOyBGSVgoMC43NjUzNjY4NjUpCitGXzBfODk5IGVxdSAgICAgIDczNzMgICAgICAgICAgIDsgRklYKDAuODk5OTc2MjIzKQorRl8xXzE3NSBlcXUgICAgICA5NjMzICAgICAgICAgICA7IEZJWCgxLjE3NTg3NTYwMikKK0ZfMV81MDEgZXF1ICAgICAxMjI5OSAgICAgICAgICAgOyBGSVgoMS41MDEzMjExMTApCitGXzFfODQ3IGVxdSAgICAgMTUxMzcgICAgICAgICAgIDsgRklYKDEuODQ3NzU5MDY1KQorRl8xXzk2MSBlcXUgICAgIDE2MDY5ICAgICAgICAgICA7IEZJWCgxLjk2MTU3MDU2MCkKK0ZfMl8wNTMgZXF1ICAgICAxNjgxOSAgICAgICAgICAgOyBGSVgoMi4wNTMxMTk4NjkpCitGXzJfNTYyIGVxdSAgICAgMjA5OTUgICAgICAgICAgIDsgRklYKDIuNTYyOTE1NDQ3KQorRl8zXzA3MiBlcXUgICAgIDI1MTcyICAgICAgICAgICA7IEZJWCgzLjA3MjcxMTAyNikKICVlbHNlCiA7IE5BU00gY2Fubm90IGRvIGNvbXBpbGUtdGltZSBhcml0aG1ldGljIG9uIGZsb2F0aW5nLXBvaW50IGNvbnN0YW50cy4KICVkZWZpbmUgREVTQ0FMRSh4LG4pICAoKCh4KSsoMTw8KChuKS0xKSkpPj4obikpCi1GXzBfMjk4CWVxdQlERVNDQUxFKCAzMjA2NTI5NTUsMzAtQ09OU1RfQklUUykJOyBGSVgoMC4yOTg2MzEzMzYpCi1GXzBfMzkwCWVxdQlERVNDQUxFKCA0MTg5NTMyNzYsMzAtQ09OU1RfQklUUykJOyBGSVgoMC4zOTAxODA2NDQpCi1GXzBfNTQxCWVxdQlERVNDQUxFKCA1ODExMDQ4ODcsMzAtQ09OU1RfQklUUykJOyBGSVgoMC41NDExOTYxMDApCi1GXzBfNzY1CWVxdQlERVNDQUxFKCA4MjE4MDY0MTMsMzAtQ09OU1RfQklUUykJOyBGSVgoMC43NjUzNjY4NjUpCi1GXzBfODk5CWVxdQlERVNDQUxFKCA5NjYzNDIxMTEsMzAtQ09OU1RfQklUUykJOyBGSVgoMC44OTk5NzYyMjMpCi1GXzFfMTc1CWVxdQlERVNDQUxFKDEyNjI1ODY4MTMsMzAtQ09OU1RfQklUUykJOyBGSVgoMS4xNzU4NzU2MDIpCi1GXzFfNTAxCWVxdQlERVNDQUxFKDE2MTIwMzEyNjcsMzAtQ09OU1RfQklUUykJOyBGSVgoMS41MDEzMjExMTApCi1GXzFfODQ3CWVxdQlERVNDQUxFKDE5ODQwMTYxODgsMzAtQ09OU1RfQklUUykJOyBGSVgoMS44NDc3NTkwNjUpCi1GXzFfOTYxCWVxdQlERVNDQUxFKDIxMDYyMjAzNTAsMzAtQ09OU1RfQklUUykJOyBGSVgoMS45NjE1NzA1NjApCi1GXzJfMDUzCWVxdQlERVNDQUxFKDIyMDQ1MjA2NzMsMzAtQ09OU1RfQklUUykJOyBGSVgoMi4wNTMxMTk4NjkpCi1GXzJfNTYyCWVxdQlERVNDQUxFKDI3NTE5MDk1MDYsMzAtQ09OU1RfQklUUykJOyBGSVgoMi41NjI5MTU0NDcpCi1GXzNfMDcyCWVxdQlERVNDQUxFKDMyOTkyOTgzNDEsMzAtQ09OU1RfQklUUykJOyBGSVgoMy4wNzI3MTEwMjYpCitGXzBfMjk4IGVxdSAgICAgREVTQ0FMRSggMzIwNjUyOTU1LDMwLUNPTlNUX0JJVFMpICAgICAgIDsgRklYKDAuMjk4NjMxMzM2KQorRl8wXzM5MCBlcXUgICAgIERFU0NBTEUoIDQxODk1MzI3NiwzMC1DT05TVF9CSVRTKSAgICAgICA7IEZJWCgwLjM5MDE4MDY0NCkKK0ZfMF81NDEgZXF1ICAgICBERVNDQUxFKCA1ODExMDQ4ODcsMzAtQ09OU1RfQklUUykgICAgICAgOyBGSVgoMC41NDExOTYxMDApCitGXzBfNzY1IGVxdSAgICAgREVTQ0FMRSggODIxODA2NDEzLDMwLUNPTlNUX0JJVFMpICAgICAgIDsgRklYKDAuNzY1MzY2ODY1KQorRl8wXzg5OSBlcXUgICAgIERFU0NBTEUoIDk2NjM0MjExMSwzMC1DT05TVF9CSVRTKSAgICAgICA7IEZJWCgwLjg5OTk3NjIyMykKK0ZfMV8xNzUgZXF1ICAgICBERVNDQUxFKDEyNjI1ODY4MTMsMzAtQ09OU1RfQklUUykgICAgICAgOyBGSVgoMS4xNzU4NzU2MDIpCitGXzFfNTAxIGVxdSAgICAgREVTQ0FMRSgxNjEyMDMxMjY3LDMwLUNPTlNUX0JJVFMpICAgICAgIDsgRklYKDEuNTAxMzIxMTEwKQorRl8xXzg0NyBlcXUgICAgIERFU0NBTEUoMTk4NDAxNjE4OCwzMC1DT05TVF9CSVRTKSAgICAgICA7IEZJWCgxLjg0Nzc1OTA2NSkKK0ZfMV85NjEgZXF1ICAgICBERVNDQUxFKDIxMDYyMjAzNTAsMzAtQ09OU1RfQklUUykgICAgICAgOyBGSVgoMS45NjE1NzA1NjApCitGXzJfMDUzIGVxdSAgICAgREVTQ0FMRSgyMjA0NTIwNjczLDMwLUNPTlNUX0JJVFMpICAgICAgIDsgRklYKDIuMDUzMTE5ODY5KQorRl8yXzU2MiBlcXUgICAgIERFU0NBTEUoMjc1MTkwOTUwNiwzMC1DT05TVF9CSVRTKSAgICAgICA7IEZJWCgyLjU2MjkxNTQ0NykKK0ZfM18wNzIgZXF1ICAgICBERVNDQUxFKDMyOTkyOTgzNDEsMzAtQ09OU1RfQklUUykgICAgICAgOyBGSVgoMy4wNzI3MTEwMjYpCiAlZW5kaWYKIAogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCVNFQ1RJT04JU0VHX0NPTlNUCisgICAgICAgIFNFQ1RJT04gU0VHX0NPTlNUCiAKLQlhbGlnbnoJMTYKLQlnbG9iYWwJRVhUTihqY29uc3RfaWRjdF9pc2xvd19zc2UyKQorICAgICAgICBhbGlnbnogIDE2CisgICAgICAgIGdsb2JhbCAgRVhUTihqY29uc3RfaWRjdF9pc2xvd19zc2UyKQogCiBFWFROKGpjb25zdF9pZGN0X2lzbG93X3NzZTIpOgogCi1QV19GMTMwX0YwNTQJdGltZXMgNCBkdyAgKEZfMF81NDErRl8wXzc2NSksIEZfMF81NDEKLVBXX0YwNTRfTUYxMzAJdGltZXMgNCBkdyAgRl8wXzU0MSwgKEZfMF81NDEtRl8xXzg0NykKLVBXX01GMDc4X0YxMTcJdGltZXMgNCBkdyAgKEZfMV8xNzUtRl8xXzk2MSksIEZfMV8xNzUKLVBXX0YxMTdfRjA3OAl0aW1lcyA0IGR3ICBGXzFfMTc1LCAoRl8xXzE3NS1GXzBfMzkwKQotUFdfTUYwNjBfTUYwODkJdGltZXMgNCBkdyAgKEZfMF8yOTgtRl8wXzg5OSksLUZfMF84OTkKLVBXX01GMDg5X0YwNjAJdGltZXMgNCBkdyAtRl8wXzg5OSwgKEZfMV81MDEtRl8wXzg5OSkKLVBXX01GMDUwX01GMjU2CXRpbWVzIDQgZHcgIChGXzJfMDUzLUZfMl81NjIpLC1GXzJfNTYyCi1QV19NRjI1Nl9GMDUwCXRpbWVzIDQgZHcgLUZfMl81NjIsIChGXzNfMDcyLUZfMl81NjIpCi1QRF9ERVNDQUxFX1AxCXRpbWVzIDQgZGQgIDEgPDwgKERFU0NBTEVfUDEtMSkKLVBEX0RFU0NBTEVfUDIJdGltZXMgNCBkZCAgMSA8PCAoREVTQ0FMRV9QMi0xKQotUEJfQ0VOVEVSSlNBTVAJdGltZXMgMTYgZGIgQ0VOVEVSSlNBTVBMRQorUFdfRjEzMF9GMDU0ICAgIHRpbWVzIDQgZHcgIChGXzBfNTQxK0ZfMF83NjUpLCBGXzBfNTQxCitQV19GMDU0X01GMTMwICAgdGltZXMgNCBkdyAgRl8wXzU0MSwgKEZfMF81NDEtRl8xXzg0NykKK1BXX01GMDc4X0YxMTcgICB0aW1lcyA0IGR3ICAoRl8xXzE3NS1GXzFfOTYxKSwgRl8xXzE3NQorUFdfRjExN19GMDc4ICAgIHRpbWVzIDQgZHcgIEZfMV8xNzUsIChGXzFfMTc1LUZfMF8zOTApCitQV19NRjA2MF9NRjA4OSAgdGltZXMgNCBkdyAgKEZfMF8yOTgtRl8wXzg5OSksLUZfMF84OTkKK1BXX01GMDg5X0YwNjAgICB0aW1lcyA0IGR3IC1GXzBfODk5LCAoRl8xXzUwMS1GXzBfODk5KQorUFdfTUYwNTBfTUYyNTYgIHRpbWVzIDQgZHcgIChGXzJfMDUzLUZfMl81NjIpLC1GXzJfNTYyCitQV19NRjI1Nl9GMDUwICAgdGltZXMgNCBkdyAtRl8yXzU2MiwgKEZfM18wNzItRl8yXzU2MikKK1BEX0RFU0NBTEVfUDEgICB0aW1lcyA0IGRkICAxIDw8IChERVNDQUxFX1AxLTEpCitQRF9ERVNDQUxFX1AyICAgdGltZXMgNCBkZCAgMSA8PCAoREVTQ0FMRV9QMi0xKQorUEJfQ0VOVEVSSlNBTVAgIHRpbWVzIDE2IGRiIENFTlRFUkpTQU1QTEUKIAotCWFsaWduegkxNgorICAgICAgICBhbGlnbnogIDE2CiAKIDsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlTRUNUSU9OCVNFR19URVhUCi0JQklUUwk2NAorICAgICAgICBTRUNUSU9OIFNFR19URVhUCisgICAgICAgIEJJVFMgICAgNjQKIDsKIDsgUGVyZm9ybSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Qgb24gb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cy4KIDsKQEAgLTEwMSw3NDggKzEwMSw3NDggQEAKIDsgcjEyID0gSlNBTVBBUlJBWSBvdXRwdXRfYnVmCiA7IHIxMyA9IEpESU1FTlNJT04gb3V0cHV0X2NvbAogCi0lZGVmaW5lIG9yaWdpbmFsX3JicAlyYnArMAotJWRlZmluZSB3ayhpKQkJcmJwLShXS19OVU0tKGkpKSpTSVpFT0ZfWE1NV09SRAk7IHhtbXdvcmQgd2tbV0tfTlVNXQotJWRlZmluZSBXS19OVU0JCTEyCislZGVmaW5lIG9yaWdpbmFsX3JicCAgICByYnArMAorJWRlZmluZSB3ayhpKSAgICAgICAgICAgcmJwLShXS19OVU0tKGkpKSpTSVpFT0ZfWE1NV09SRCA7IHhtbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0gICAgICAgICAgMTIKIAotCWFsaWduCTE2Ci0JZ2xvYmFsCUVYVE4oanNpbWRfaWRjdF9pc2xvd19zc2UyKQorICAgICAgICBhbGlnbiAgIDE2CisgICAgICAgIGdsb2JhbCAgRVhUTihqc2ltZF9pZGN0X2lzbG93X3NzZTIpCiAKIEVYVE4oanNpbWRfaWRjdF9pc2xvd19zc2UyKToKLQlwdXNoCXJicAotCW1vdglyYXgscnNwCQkJCTsgcmF4ID0gb3JpZ2luYWwgcmJwCi0Jc3ViCXJzcCwgYnl0ZSA0Ci0JYW5kCXJzcCwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKQk7IGFsaWduIHRvIDEyOCBiaXRzCi0JbW92CVtyc3BdLHJheAotCW1vdglyYnAscnNwCQkJCTsgcmJwID0gYWxpZ25lZCByYnAKLQlsZWEJcnNwLCBbd2soMCldCi0JY29sbGVjdF9hcmdzCisgICAgICAgIHB1c2ggICAgcmJwCisgICAgICAgIG1vdiAgICAgcmF4LHJzcCAgICAgICAgICAgICAgICAgICAgICAgICA7IHJheCA9IG9yaWdpbmFsIHJicAorICAgICAgICBzdWIgICAgIHJzcCwgYnl0ZSA0CisgICAgICAgIGFuZCAgICAgcnNwLCBieXRlICgtU0laRU9GX1hNTVdPUkQpICAgICA7IGFsaWduIHRvIDEyOCBiaXRzCisgICAgICAgIG1vdiAgICAgW3JzcF0scmF4CisgICAgICAgIG1vdiAgICAgcmJwLHJzcCAgICAgICAgICAgICAgICAgICAgICAgICA7IHJicCA9IGFsaWduZWQgcmJwCisgICAgICAgIGxlYSAgICAgcnNwLCBbd2soMCldCisgICAgICAgIGNvbGxlY3RfYXJncwogCi0JOyAtLS0tIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQuCisgICAgICAgIDsgLS0tLSBQYXNzIDE6IHByb2Nlc3MgY29sdW1ucyBmcm9tIGlucHV0LgogCi0JbW92CXJkeCwgcjEwCTsgcXVhbnRwdHIKLQltb3YJcnNpLCByMTEJCTsgaW5wdHIKKyAgICAgICAgbW92ICAgICByZHgsIHIxMCAgICAgICAgICAgICAgICA7IHF1YW50cHRyCisgICAgICAgIG1vdiAgICAgcnNpLCByMTEgICAgICAgICAgICAgICAgOyBpbnB0cgogCiAlaWZuZGVmIE5PX1pFUk9fQ09MVU1OX1RFU1RfSVNMT1dfU1NFMgotCW1vdgllYXgsIERXT1JEIFtEV0JMT0NLKDEsMCxyc2ksU0laRU9GX0pDT0VGKV0KLQlvcgllYXgsIERXT1JEIFtEV0JMT0NLKDIsMCxyc2ksU0laRU9GX0pDT0VGKV0KLQlqbnoJbmVhciAuY29sdW1uRENUCisgICAgICAgIG1vdiAgICAgZWF4LCBEV09SRCBbRFdCTE9DSygxLDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG9yICAgICAgZWF4LCBEV09SRCBbRFdCTE9DSygyLDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIGpueiAgICAgbmVhciAuY29sdW1uRENUCiAKLQltb3ZkcWEJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLHJzaSxTSVpFT0ZfSkNPRUYpXQotCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygyLDAscnNpLFNJWkVPRl9KQ09FRildCi0JcG9yCXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxyc2ksU0laRU9GX0pDT0VGKV0KLQlwb3IJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNCwwLHJzaSxTSVpFT0ZfSkNPRUYpXQotCXBvcgl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSyg1LDAscnNpLFNJWkVPRl9KQ09FRildCi0JcG9yCXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDYsMCxyc2ksU0laRU9GX0pDT0VGKV0KLQlwb3IJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soNywwLHJzaSxTSVpFT0ZfSkNPRUYpXQotCXBvcgl4bW0xLHhtbTAKLQlwYWNrc3N3YiB4bW0xLHhtbTEKLQlwYWNrc3N3YiB4bW0xLHhtbTEKLQltb3ZkCWVheCx4bW0xCi0JdGVzdAlyYXgscmF4Ci0Jam56CXNob3J0IC5jb2x1bW5EQ1QKKyAgICAgICAgbW92ZHFhICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdmRxYSAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMiwwLHJzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBwb3IgICAgIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxyc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgcG9yICAgICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSyg0LDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIHBvciAgICAgeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soNSwwLHJzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBwb3IgICAgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDYsMCxyc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgcG9yICAgICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSyg3LDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIHBvciAgICAgeG1tMSx4bW0wCisgICAgICAgIHBhY2tzc3diIHhtbTEseG1tMQorICAgICAgICBwYWNrc3N3YiB4bW0xLHhtbTEKKyAgICAgICAgbW92ZCAgICBlYXgseG1tMQorICAgICAgICB0ZXN0ICAgIHJheCxyYXgKKyAgICAgICAgam56ICAgICBzaG9ydCAuY29sdW1uRENUCiAKLQk7IC0tIEFDIHRlcm1zIGFsbCB6ZXJvCisgICAgICAgIDsgLS0gQUMgdGVybXMgYWxsIHplcm8KIAotCW1vdmRxYQl4bW01LCBYTU1XT1JEIFtYTU1CTE9DSygwLDAscnNpLFNJWkVPRl9KQ09FRildCi0JcG11bGx3CXhtbTUsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxyZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisgICAgICAgIG1vdmRxYSAgeG1tNSwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBwbXVsbHcgIHhtbTUsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxyZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCiAKLQlwc2xsdwl4bW01LFBBU1MxX0JJVFMKKyAgICAgICAgcHNsbHcgICB4bW01LFBBU1MxX0JJVFMKIAotCW1vdmRxYSAgICB4bW00LHhtbTUJCTsgeG1tNT1pbjA9KDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3KQotCXB1bnBja2x3ZCB4bW01LHhtbTUJCTsgeG1tNT0oMDAgMDAgMDEgMDEgMDIgMDIgMDMgMDMpCi0JcHVucGNraHdkIHhtbTQseG1tNAkJOyB4bW00PSgwNCAwNCAwNSAwNSAwNiAwNiAwNyAwNykKKyAgICAgICAgbW92ZHFhICAgIHhtbTQseG1tNSAgICAgICAgICAgICA7IHhtbTU9aW4wPSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNykKKyAgICAgICAgcHVucGNrbHdkIHhtbTUseG1tNSAgICAgICAgICAgICA7IHhtbTU9KDAwIDAwIDAxIDAxIDAyIDAyIDAzIDAzKQorICAgICAgICBwdW5wY2tod2QgeG1tNCx4bW00ICAgICAgICAgICAgIDsgeG1tND0oMDQgMDQgMDUgMDUgMDYgMDYgMDcgMDcpCiAKLQlwc2h1ZmQJeG1tNyx4bW01LDB4MDAJCTsgeG1tNz1jb2wwPSgwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCkKLQlwc2h1ZmQJeG1tNix4bW01LDB4NTUJCTsgeG1tNj1jb2wxPSgwMSAwMSAwMSAwMSAwMSAwMSAwMSAwMSkKLQlwc2h1ZmQJeG1tMSx4bW01LDB4QUEJCTsgeG1tMT1jb2wyPSgwMiAwMiAwMiAwMiAwMiAwMiAwMiAwMikKLQlwc2h1ZmQJeG1tNSx4bW01LDB4RkYJCTsgeG1tNT1jb2wzPSgwMyAwMyAwMyAwMyAwMyAwMyAwMyAwMykKLQlwc2h1ZmQJeG1tMCx4bW00LDB4MDAJCTsgeG1tMD1jb2w0PSgwNCAwNCAwNCAwNCAwNCAwNCAwNCAwNCkKLQlwc2h1ZmQJeG1tMyx4bW00LDB4NTUJCTsgeG1tMz1jb2w1PSgwNSAwNSAwNSAwNSAwNSAwNSAwNSAwNSkKLQlwc2h1ZmQJeG1tMix4bW00LDB4QUEJCTsgeG1tMj1jb2w2PSgwNiAwNiAwNiAwNiAwNiAwNiAwNiAwNikKLQlwc2h1ZmQJeG1tNCx4bW00LDB4RkYJCTsgeG1tND1jb2w3PSgwNyAwNyAwNyAwNyAwNyAwNyAwNyAwNykKKyAgICAgICAgcHNodWZkICB4bW03LHhtbTUsMHgwMCAgICAgICAgICA7IHhtbTc9Y29sMD0oMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDApCisgICAgICAgIHBzaHVmZCAgeG1tNix4bW01LDB4NTUgICAgICAgICAgOyB4bW02PWNvbDE9KDAxIDAxIDAxIDAxIDAxIDAxIDAxIDAxKQorICAgICAgICBwc2h1ZmQgIHhtbTEseG1tNSwweEFBICAgICAgICAgIDsgeG1tMT1jb2wyPSgwMiAwMiAwMiAwMiAwMiAwMiAwMiAwMikKKyAgICAgICAgcHNodWZkICB4bW01LHhtbTUsMHhGRiAgICAgICAgICA7IHhtbTU9Y29sMz0oMDMgMDMgMDMgMDMgMDMgMDMgMDMgMDMpCisgICAgICAgIHBzaHVmZCAgeG1tMCx4bW00LDB4MDAgICAgICAgICAgOyB4bW0wPWNvbDQ9KDA0IDA0IDA0IDA0IDA0IDA0IDA0IDA0KQorICAgICAgICBwc2h1ZmQgIHhtbTMseG1tNCwweDU1ICAgICAgICAgIDsgeG1tMz1jb2w1PSgwNSAwNSAwNSAwNSAwNSAwNSAwNSAwNSkKKyAgICAgICAgcHNodWZkICB4bW0yLHhtbTQsMHhBQSAgICAgICAgICA7IHhtbTI9Y29sNj0oMDYgMDYgMDYgMDYgMDYgMDYgMDYgMDYpCisgICAgICAgIHBzaHVmZCAgeG1tNCx4bW00LDB4RkYgICAgICAgICAgOyB4bW00PWNvbDc9KDA3IDA3IDA3IDA3IDA3IDA3IDA3IDA3KQogCi0JbW92ZHFhCVhNTVdPUkQgW3drKDgpXSwgeG1tNgk7IHdrKDgpPWNvbDEKLQltb3ZkcWEJWE1NV09SRCBbd2soOSldLCB4bW01CTsgd2soOSk9Y29sMwotCW1vdmRxYQlYTU1XT1JEIFt3aygxMCldLCB4bW0zCTsgd2soMTApPWNvbDUKLQltb3ZkcWEJWE1NV09SRCBbd2soMTEpXSwgeG1tNAk7IHdrKDExKT1jb2w3Ci0Jam1wCW5lYXIgLmNvbHVtbl9lbmQKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3ayg4KV0sIHhtbTYgICA7IHdrKDgpPWNvbDEKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3ayg5KV0sIHhtbTUgICA7IHdrKDkpPWNvbDMKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygxMCldLCB4bW0zICA7IHdrKDEwKT1jb2w1CisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMTEpXSwgeG1tNCAgOyB3aygxMSk9Y29sNworICAgICAgICBqbXAgICAgIG5lYXIgLmNvbHVtbl9lbmQKICVlbmRpZgogLmNvbHVtbkRDVDoKIAotCTsgLS0gRXZlbiBwYXJ0CisgICAgICAgIDsgLS0gRXZlbiBwYXJ0CiAKLQltb3ZkcWEJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJzaSxTSVpFT0ZfSkNPRUYpXQotCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygyLDAscnNpLFNJWkVPRl9KQ09FRildCi0JcG11bGx3CXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxyZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCi0JcG11bGx3CXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxyZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCi0JbW92ZHFhCXhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDQsMCxyc2ksU0laRU9GX0pDT0VGKV0KLQltb3ZkcWEJeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNiwwLHJzaSxTSVpFT0ZfSkNPRUYpXQotCXBtdWxsdwl4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSyg0LDAscmR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQotCXBtdWxsdwl4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg2LDAscmR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorICAgICAgICBtb3ZkcWEgIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxyc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgbW92ZHFhICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygyLDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIHBtdWxsdyAgeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKyAgICAgICAgcG11bGx3ICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygyLDAscmR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorICAgICAgICBtb3ZkcWEgIHhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDQsMCxyc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgbW92ZHFhICB4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg2LDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIHBtdWxsdyAgeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soNCwwLHJkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKyAgICAgICAgcG11bGx3ICB4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg2LDAscmR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQogCi0JOyAoT3JpZ2luYWwpCi0JOyB6MSA9ICh6MiArIHozKSAqIDAuNTQxMTk2MTAwOwotCTsgdG1wMiA9IHoxICsgejMgKiAtMS44NDc3NTkwNjU7Ci0JOyB0bXAzID0gejEgKyB6MiAqIDAuNzY1MzY2ODY1OwotCTsKLQk7IChUaGlzIGltcGxlbWVudGF0aW9uKQotCTsgdG1wMiA9IHoyICogMC41NDExOTYxMDAgKyB6MyAqICgwLjU0MTE5NjEwMCAtIDEuODQ3NzU5MDY1KTsKLQk7IHRtcDMgPSB6MiAqICgwLjU0MTE5NjEwMCArIDAuNzY1MzY2ODY1KSArIHozICogMC41NDExOTYxMDA7CisgICAgICAgIDsgKE9yaWdpbmFsKQorICAgICAgICA7IHoxID0gKHoyICsgejMpICogMC41NDExOTYxMDA7CisgICAgICAgIDsgdG1wMiA9IHoxICsgejMgKiAtMS44NDc3NTkwNjU7CisgICAgICAgIDsgdG1wMyA9IHoxICsgejIgKiAwLjc2NTM2Njg2NTsKKyAgICAgICAgOworICAgICAgICA7IChUaGlzIGltcGxlbWVudGF0aW9uKQorICAgICAgICA7IHRtcDIgPSB6MiAqIDAuNTQxMTk2MTAwICsgejMgKiAoMC41NDExOTYxMDAgLSAxLjg0Nzc1OTA2NSk7CisgICAgICAgIDsgdG1wMyA9IHoyICogKDAuNTQxMTk2MTAwICsgMC43NjUzNjY4NjUpICsgejMgKiAwLjU0MTE5NjEwMDsKIAotCW1vdmRxYSAgICB4bW00LHhtbTEJCTsgeG1tMT1pbjI9ejIKLQltb3ZkcWEgICAgeG1tNSx4bW0xCi0JcHVucGNrbHdkIHhtbTQseG1tMwkJOyB4bW0zPWluNj16MwotCXB1bnBja2h3ZCB4bW01LHhtbTMKLQltb3ZkcWEgICAgeG1tMSx4bW00Ci0JbW92ZHFhICAgIHhtbTMseG1tNQotCXBtYWRkd2QgICB4bW00LFtyZWwgUFdfRjEzMF9GMDU0XQk7IHhtbTQ9dG1wM0wKLQlwbWFkZHdkICAgeG1tNSxbcmVsIFBXX0YxMzBfRjA1NF0JOyB4bW01PXRtcDNICi0JcG1hZGR3ZCAgIHhtbTEsW3JlbCBQV19GMDU0X01GMTMwXQk7IHhtbTE9dG1wMkwKLQlwbWFkZHdkICAgeG1tMyxbcmVsIFBXX0YwNTRfTUYxMzBdCTsgeG1tMz10bXAySAorICAgICAgICBtb3ZkcWEgICAgeG1tNCx4bW0xICAgICAgICAgICAgIDsgeG1tMT1pbjI9ejIKKyAgICAgICAgbW92ZHFhICAgIHhtbTUseG1tMQorICAgICAgICBwdW5wY2tsd2QgeG1tNCx4bW0zICAgICAgICAgICAgIDsgeG1tMz1pbjY9ejMKKyAgICAgICAgcHVucGNraHdkIHhtbTUseG1tMworICAgICAgICBtb3ZkcWEgICAgeG1tMSx4bW00CisgICAgICAgIG1vdmRxYSAgICB4bW0zLHhtbTUKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTQsW3JlbCBQV19GMTMwX0YwNTRdICAgICAgIDsgeG1tND10bXAzTAorICAgICAgICBwbWFkZHdkICAgeG1tNSxbcmVsIFBXX0YxMzBfRjA1NF0gICAgICAgOyB4bW01PXRtcDNICisgICAgICAgIHBtYWRkd2QgICB4bW0xLFtyZWwgUFdfRjA1NF9NRjEzMF0gICAgICA7IHhtbTE9dG1wMkwKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTMsW3JlbCBQV19GMDU0X01GMTMwXSAgICAgIDsgeG1tMz10bXAySAogCi0JbW92ZHFhICAgIHhtbTYseG1tMAotCXBhZGR3ICAgICB4bW0wLHhtbTIJCTsgeG1tMD1pbjAraW40Ci0JcHN1YncgICAgIHhtbTYseG1tMgkJOyB4bW02PWluMC1pbjQKKyAgICAgICAgbW92ZHFhICAgIHhtbTYseG1tMAorICAgICAgICBwYWRkdyAgICAgeG1tMCx4bW0yICAgICAgICAgICAgIDsgeG1tMD1pbjAraW40CisgICAgICAgIHBzdWJ3ICAgICB4bW02LHhtbTIgICAgICAgICAgICAgOyB4bW02PWluMC1pbjQKIAotCXB4b3IgICAgICB4bW03LHhtbTcKLQlweG9yICAgICAgeG1tMix4bW0yCi0JcHVucGNrbHdkIHhtbTcseG1tMAkJOyB4bW03PXRtcDBMCi0JcHVucGNraHdkIHhtbTIseG1tMAkJOyB4bW0yPXRtcDBICi0JcHNyYWQgICAgIHhtbTcsKDE2LUNPTlNUX0JJVFMpCTsgcHNyYWQgeG1tNywxNiAmIHBzbGxkIHhtbTcsQ09OU1RfQklUUwotCXBzcmFkICAgICB4bW0yLCgxNi1DT05TVF9CSVRTKQk7IHBzcmFkIHhtbTIsMTYgJiBwc2xsZCB4bW0yLENPTlNUX0JJVFMKKyAgICAgICAgcHhvciAgICAgIHhtbTcseG1tNworICAgICAgICBweG9yICAgICAgeG1tMix4bW0yCisgICAgICAgIHB1bnBja2x3ZCB4bW03LHhtbTAgICAgICAgICAgICAgOyB4bW03PXRtcDBMCisgICAgICAgIHB1bnBja2h3ZCB4bW0yLHhtbTAgICAgICAgICAgICAgOyB4bW0yPXRtcDBICisgICAgICAgIHBzcmFkICAgICB4bW03LCgxNi1DT05TVF9CSVRTKSAgOyBwc3JhZCB4bW03LDE2ICYgcHNsbGQgeG1tNyxDT05TVF9CSVRTCisgICAgICAgIHBzcmFkICAgICB4bW0yLCgxNi1DT05TVF9CSVRTKSAgOyBwc3JhZCB4bW0yLDE2ICYgcHNsbGQgeG1tMixDT05TVF9CSVRTCiAKLQltb3ZkcWEJeG1tMCx4bW03Ci0JcGFkZGQJeG1tNyx4bW00CQk7IHhtbTc9dG1wMTBMCi0JcHN1YmQJeG1tMCx4bW00CQk7IHhtbTA9dG1wMTNMCi0JbW92ZHFhCXhtbTQseG1tMgotCXBhZGRkCXhtbTIseG1tNQkJOyB4bW0yPXRtcDEwSAotCXBzdWJkCXhtbTQseG1tNQkJOyB4bW00PXRtcDEzSAorICAgICAgICBtb3ZkcWEgIHhtbTAseG1tNworICAgICAgICBwYWRkZCAgIHhtbTcseG1tNCAgICAgICAgICAgICAgIDsgeG1tNz10bXAxMEwKKyAgICAgICAgcHN1YmQgICB4bW0wLHhtbTQgICAgICAgICAgICAgICA7IHhtbTA9dG1wMTNMCisgICAgICAgIG1vdmRxYSAgeG1tNCx4bW0yCisgICAgICAgIHBhZGRkICAgeG1tMix4bW01ICAgICAgICAgICAgICAgOyB4bW0yPXRtcDEwSAorICAgICAgICBwc3ViZCAgIHhtbTQseG1tNSAgICAgICAgICAgICAgIDsgeG1tND10bXAxM0gKIAotCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTcJOyB3aygwKT10bXAxMEwKLQltb3ZkcWEJWE1NV09SRCBbd2soMSldLCB4bW0yCTsgd2soMSk9dG1wMTBICi0JbW92ZHFhCVhNTVdPUkQgW3drKDIpXSwgeG1tMAk7IHdrKDIpPXRtcDEzTAotCW1vdmRxYQlYTU1XT1JEIFt3aygzKV0sIHhtbTQJOyB3aygzKT10bXAxM0gKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygwKV0sIHhtbTcgICA7IHdrKDApPXRtcDEwTAorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDEpXSwgeG1tMiAgIDsgd2soMSk9dG1wMTBICisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMildLCB4bW0wICAgOyB3aygyKT10bXAxM0wKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygzKV0sIHhtbTQgICA7IHdrKDMpPXRtcDEzSAogCi0JcHhvciAgICAgIHhtbTUseG1tNQotCXB4b3IgICAgICB4bW03LHhtbTcKLQlwdW5wY2tsd2QgeG1tNSx4bW02CQk7IHhtbTU9dG1wMUwKLQlwdW5wY2tod2QgeG1tNyx4bW02CQk7IHhtbTc9dG1wMUgKLQlwc3JhZCAgICAgeG1tNSwoMTYtQ09OU1RfQklUUykJOyBwc3JhZCB4bW01LDE2ICYgcHNsbGQgeG1tNSxDT05TVF9CSVRTCi0JcHNyYWQgICAgIHhtbTcsKDE2LUNPTlNUX0JJVFMpCTsgcHNyYWQgeG1tNywxNiAmIHBzbGxkIHhtbTcsQ09OU1RfQklUUworICAgICAgICBweG9yICAgICAgeG1tNSx4bW01CisgICAgICAgIHB4b3IgICAgICB4bW03LHhtbTcKKyAgICAgICAgcHVucGNrbHdkIHhtbTUseG1tNiAgICAgICAgICAgICA7IHhtbTU9dG1wMUwKKyAgICAgICAgcHVucGNraHdkIHhtbTcseG1tNiAgICAgICAgICAgICA7IHhtbTc9dG1wMUgKKyAgICAgICAgcHNyYWQgICAgIHhtbTUsKDE2LUNPTlNUX0JJVFMpICA7IHBzcmFkIHhtbTUsMTYgJiBwc2xsZCB4bW01LENPTlNUX0JJVFMKKyAgICAgICAgcHNyYWQgICAgIHhtbTcsKDE2LUNPTlNUX0JJVFMpICA7IHBzcmFkIHhtbTcsMTYgJiBwc2xsZCB4bW03LENPTlNUX0JJVFMKIAotCW1vdmRxYQl4bW0yLHhtbTUKLQlwYWRkZAl4bW01LHhtbTEJCTsgeG1tNT10bXAxMUwKLQlwc3ViZAl4bW0yLHhtbTEJCTsgeG1tMj10bXAxMkwKLQltb3ZkcWEJeG1tMCx4bW03Ci0JcGFkZGQJeG1tNyx4bW0zCQk7IHhtbTc9dG1wMTFICi0JcHN1YmQJeG1tMCx4bW0zCQk7IHhtbTA9dG1wMTJICisgICAgICAgIG1vdmRxYSAgeG1tMix4bW01CisgICAgICAgIHBhZGRkICAgeG1tNSx4bW0xICAgICAgICAgICAgICAgOyB4bW01PXRtcDExTAorICAgICAgICBwc3ViZCAgIHhtbTIseG1tMSAgICAgICAgICAgICAgIDsgeG1tMj10bXAxMkwKKyAgICAgICAgbW92ZHFhICB4bW0wLHhtbTcKKyAgICAgICAgcGFkZGQgICB4bW03LHhtbTMgICAgICAgICAgICAgICA7IHhtbTc9dG1wMTFICisgICAgICAgIHBzdWJkICAgeG1tMCx4bW0zICAgICAgICAgICAgICAgOyB4bW0wPXRtcDEySAogCi0JbW92ZHFhCVhNTVdPUkQgW3drKDQpXSwgeG1tNQk7IHdrKDQpPXRtcDExTAotCW1vdmRxYQlYTU1XT1JEIFt3ayg1KV0sIHhtbTcJOyB3ayg1KT10bXAxMUgKLQltb3ZkcWEJWE1NV09SRCBbd2soNildLCB4bW0yCTsgd2soNik9dG1wMTJMCi0JbW92ZHFhCVhNTVdPUkQgW3drKDcpXSwgeG1tMAk7IHdrKDcpPXRtcDEySAorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDQpXSwgeG1tNSAgIDsgd2soNCk9dG1wMTFMCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soNSldLCB4bW03ICAgOyB3ayg1KT10bXAxMUgKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3ayg2KV0sIHhtbTIgICA7IHdrKDYpPXRtcDEyTAorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDcpXSwgeG1tMCAgIDsgd2soNyk9dG1wMTJICiAKLQk7IC0tIE9kZCBwYXJ0CisgICAgICAgIDsgLS0gT2RkIHBhcnQKIAotCW1vdmRxYQl4bW00LCBYTU1XT1JEIFtYTU1CTE9DSygxLDAscnNpLFNJWkVPRl9KQ09FRildCi0JbW92ZHFhCXhtbTYsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxyc2ksU0laRU9GX0pDT0VGKV0KLQlwbXVsbHcJeG1tNCwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLHJkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KLQlwbXVsbHcJeG1tNiwgWE1NV09SRCBbWE1NQkxPQ0soMywwLHJkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KLQltb3ZkcWEJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNSwwLHJzaSxTSVpFT0ZfSkNPRUYpXQotCW1vdmRxYQl4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg3LDAscnNpLFNJWkVPRl9KQ09FRildCi0JcG11bGx3CXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxyZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCi0JcG11bGx3CXhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxyZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisgICAgICAgIG1vdmRxYSAgeG1tNCwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLHJzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBtb3ZkcWEgIHhtbTYsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxyc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgcG11bGx3ICB4bW00LCBYTU1XT1JEIFtYTU1CTE9DSygxLDAscmR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorICAgICAgICBwbXVsbHcgIHhtbTYsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxyZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisgICAgICAgIG1vdmRxYSAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNSwwLHJzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBtb3ZkcWEgIHhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxyc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgcG11bGx3ICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSyg1LDAscmR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorICAgICAgICBwbXVsbHcgIHhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxyZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCiAKLQltb3ZkcWEJeG1tNSx4bW02Ci0JbW92ZHFhCXhtbTcseG1tNAotCXBhZGR3CXhtbTUseG1tMwkJOyB4bW01PXozCi0JcGFkZHcJeG1tNyx4bW0xCQk7IHhtbTc9ejQKKyAgICAgICAgbW92ZHFhICB4bW01LHhtbTYKKyAgICAgICAgbW92ZHFhICB4bW03LHhtbTQKKyAgICAgICAgcGFkZHcgICB4bW01LHhtbTMgICAgICAgICAgICAgICA7IHhtbTU9ejMKKyAgICAgICAgcGFkZHcgICB4bW03LHhtbTEgICAgICAgICAgICAgICA7IHhtbTc9ejQKIAotCTsgKE9yaWdpbmFsKQotCTsgejUgPSAoejMgKyB6NCkgKiAxLjE3NTg3NTYwMjsKLQk7IHozID0gejMgKiAtMS45NjE1NzA1NjA7ICB6NCA9IHo0ICogLTAuMzkwMTgwNjQ0OwotCTsgejMgKz0gejU7ICB6NCArPSB6NTsKLQk7Ci0JOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKLQk7IHozID0gejMgKiAoMS4xNzU4NzU2MDIgLSAxLjk2MTU3MDU2MCkgKyB6NCAqIDEuMTc1ODc1NjAyOwotCTsgejQgPSB6MyAqIDEuMTc1ODc1NjAyICsgejQgKiAoMS4xNzU4NzU2MDIgLSAwLjM5MDE4MDY0NCk7CisgICAgICAgIDsgKE9yaWdpbmFsKQorICAgICAgICA7IHo1ID0gKHozICsgejQpICogMS4xNzU4NzU2MDI7CisgICAgICAgIDsgejMgPSB6MyAqIC0xLjk2MTU3MDU2MDsgIHo0ID0gejQgKiAtMC4zOTAxODA2NDQ7CisgICAgICAgIDsgejMgKz0gejU7ICB6NCArPSB6NTsKKyAgICAgICAgOworICAgICAgICA7IChUaGlzIGltcGxlbWVudGF0aW9uKQorICAgICAgICA7IHozID0gejMgKiAoMS4xNzU4NzU2MDIgLSAxLjk2MTU3MDU2MCkgKyB6NCAqIDEuMTc1ODc1NjAyOworICAgICAgICA7IHo0ID0gejMgKiAxLjE3NTg3NTYwMiArIHo0ICogKDEuMTc1ODc1NjAyIC0gMC4zOTAxODA2NDQpOwogCi0JbW92ZHFhICAgIHhtbTIseG1tNQotCW1vdmRxYSAgICB4bW0wLHhtbTUKLQlwdW5wY2tsd2QgeG1tMix4bW03Ci0JcHVucGNraHdkIHhtbTAseG1tNwotCW1vdmRxYSAgICB4bW01LHhtbTIKLQltb3ZkcWEgICAgeG1tNyx4bW0wCi0JcG1hZGR3ZCAgIHhtbTIsW3JlbCBQV19NRjA3OF9GMTE3XQk7IHhtbTI9ejNMCi0JcG1hZGR3ZCAgIHhtbTAsW3JlbCBQV19NRjA3OF9GMTE3XQk7IHhtbTA9ejNICi0JcG1hZGR3ZCAgIHhtbTUsW3JlbCBQV19GMTE3X0YwNzhdCTsgeG1tNT16NEwKLQlwbWFkZHdkICAgeG1tNyxbcmVsIFBXX0YxMTdfRjA3OF0JOyB4bW03PXo0SAorICAgICAgICBtb3ZkcWEgICAgeG1tMix4bW01CisgICAgICAgIG1vdmRxYSAgICB4bW0wLHhtbTUKKyAgICAgICAgcHVucGNrbHdkIHhtbTIseG1tNworICAgICAgICBwdW5wY2tod2QgeG1tMCx4bW03CisgICAgICAgIG1vdmRxYSAgICB4bW01LHhtbTIKKyAgICAgICAgbW92ZHFhICAgIHhtbTcseG1tMAorICAgICAgICBwbWFkZHdkICAgeG1tMixbcmVsIFBXX01GMDc4X0YxMTddICAgICAgOyB4bW0yPXozTAorICAgICAgICBwbWFkZHdkICAgeG1tMCxbcmVsIFBXX01GMDc4X0YxMTddICAgICAgOyB4bW0wPXozSAorICAgICAgICBwbWFkZHdkICAgeG1tNSxbcmVsIFBXX0YxMTdfRjA3OF0gICAgICAgOyB4bW01PXo0TAorICAgICAgICBwbWFkZHdkICAgeG1tNyxbcmVsIFBXX0YxMTdfRjA3OF0gICAgICAgOyB4bW03PXo0SAogCi0JbW92ZHFhCVhNTVdPUkQgW3drKDEwKV0sIHhtbTIJOyB3aygxMCk9ejNMCi0JbW92ZHFhCVhNTVdPUkQgW3drKDExKV0sIHhtbTAJOyB3aygxMSk9ejNICisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMTApXSwgeG1tMiAgOyB3aygxMCk9ejNMCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMTEpXSwgeG1tMCAgOyB3aygxMSk9ejNICiAKLQk7IChPcmlnaW5hbCkKLQk7IHoxID0gdG1wMCArIHRtcDM7ICB6MiA9IHRtcDEgKyB0bXAyOwotCTsgdG1wMCA9IHRtcDAgKiAwLjI5ODYzMTMzNjsgIHRtcDEgPSB0bXAxICogMi4wNTMxMTk4Njk7Ci0JOyB0bXAyID0gdG1wMiAqIDMuMDcyNzExMDI2OyAgdG1wMyA9IHRtcDMgKiAxLjUwMTMyMTExMDsKLQk7IHoxID0gejEgKiAtMC44OTk5NzYyMjM7ICB6MiA9IHoyICogLTIuNTYyOTE1NDQ3OwotCTsgdG1wMCArPSB6MSArIHozOyAgdG1wMSArPSB6MiArIHo0OwotCTsgdG1wMiArPSB6MiArIHozOyAgdG1wMyArPSB6MSArIHo0OwotCTsKLQk7IChUaGlzIGltcGxlbWVudGF0aW9uKQotCTsgdG1wMCA9IHRtcDAgKiAoMC4yOTg2MzEzMzYgLSAwLjg5OTk3NjIyMykgKyB0bXAzICogLTAuODk5OTc2MjIzOwotCTsgdG1wMSA9IHRtcDEgKiAoMi4wNTMxMTk4NjkgLSAyLjU2MjkxNTQ0NykgKyB0bXAyICogLTIuNTYyOTE1NDQ3OwotCTsgdG1wMiA9IHRtcDEgKiAtMi41NjI5MTU0NDcgKyB0bXAyICogKDMuMDcyNzExMDI2IC0gMi41NjI5MTU0NDcpOwotCTsgdG1wMyA9IHRtcDAgKiAtMC44OTk5NzYyMjMgKyB0bXAzICogKDEuNTAxMzIxMTEwIC0gMC44OTk5NzYyMjMpOwotCTsgdG1wMCArPSB6MzsgIHRtcDEgKz0gejQ7Ci0JOyB0bXAyICs9IHozOyAgdG1wMyArPSB6NDsKKyAgICAgICAgOyAoT3JpZ2luYWwpCisgICAgICAgIDsgejEgPSB0bXAwICsgdG1wMzsgIHoyID0gdG1wMSArIHRtcDI7CisgICAgICAgIDsgdG1wMCA9IHRtcDAgKiAwLjI5ODYzMTMzNjsgIHRtcDEgPSB0bXAxICogMi4wNTMxMTk4Njk7CisgICAgICAgIDsgdG1wMiA9IHRtcDIgKiAzLjA3MjcxMTAyNjsgIHRtcDMgPSB0bXAzICogMS41MDEzMjExMTA7CisgICAgICAgIDsgejEgPSB6MSAqIC0wLjg5OTk3NjIyMzsgIHoyID0gejIgKiAtMi41NjI5MTU0NDc7CisgICAgICAgIDsgdG1wMCArPSB6MSArIHozOyAgdG1wMSArPSB6MiArIHo0OworICAgICAgICA7IHRtcDIgKz0gejIgKyB6MzsgIHRtcDMgKz0gejEgKyB6NDsKKyAgICAgICAgOworICAgICAgICA7IChUaGlzIGltcGxlbWVudGF0aW9uKQorICAgICAgICA7IHRtcDAgPSB0bXAwICogKDAuMjk4NjMxMzM2IC0gMC44OTk5NzYyMjMpICsgdG1wMyAqIC0wLjg5OTk3NjIyMzsKKyAgICAgICAgOyB0bXAxID0gdG1wMSAqICgyLjA1MzExOTg2OSAtIDIuNTYyOTE1NDQ3KSArIHRtcDIgKiAtMi41NjI5MTU0NDc7CisgICAgICAgIDsgdG1wMiA9IHRtcDEgKiAtMi41NjI5MTU0NDcgKyB0bXAyICogKDMuMDcyNzExMDI2IC0gMi41NjI5MTU0NDcpOworICAgICAgICA7IHRtcDMgPSB0bXAwICogLTAuODk5OTc2MjIzICsgdG1wMyAqICgxLjUwMTMyMTExMCAtIDAuODk5OTc2MjIzKTsKKyAgICAgICAgOyB0bXAwICs9IHozOyAgdG1wMSArPSB6NDsKKyAgICAgICAgOyB0bXAyICs9IHozOyAgdG1wMyArPSB6NDsKIAotCW1vdmRxYSAgICB4bW0yLHhtbTMKLQltb3ZkcWEgICAgeG1tMCx4bW0zCi0JcHVucGNrbHdkIHhtbTIseG1tNAotCXB1bnBja2h3ZCB4bW0wLHhtbTQKLQltb3ZkcWEgICAgeG1tMyx4bW0yCi0JbW92ZHFhICAgIHhtbTQseG1tMAotCXBtYWRkd2QgICB4bW0yLFtyZWwgUFdfTUYwNjBfTUYwODldCTsgeG1tMj10bXAwTAotCXBtYWRkd2QgICB4bW0wLFtyZWwgUFdfTUYwNjBfTUYwODldCTsgeG1tMD10bXAwSAotCXBtYWRkd2QgICB4bW0zLFtyZWwgUFdfTUYwODlfRjA2MF0JOyB4bW0zPXRtcDNMCi0JcG1hZGR3ZCAgIHhtbTQsW3JlbCBQV19NRjA4OV9GMDYwXQk7IHhtbTQ9dG1wM0gKKyAgICAgICAgbW92ZHFhICAgIHhtbTIseG1tMworICAgICAgICBtb3ZkcWEgICAgeG1tMCx4bW0zCisgICAgICAgIHB1bnBja2x3ZCB4bW0yLHhtbTQKKyAgICAgICAgcHVucGNraHdkIHhtbTAseG1tNAorICAgICAgICBtb3ZkcWEgICAgeG1tMyx4bW0yCisgICAgICAgIG1vdmRxYSAgICB4bW00LHhtbTAKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTIsW3JlbCBQV19NRjA2MF9NRjA4OV0gICAgIDsgeG1tMj10bXAwTAorICAgICAgICBwbWFkZHdkICAgeG1tMCxbcmVsIFBXX01GMDYwX01GMDg5XSAgICAgOyB4bW0wPXRtcDBICisgICAgICAgIHBtYWRkd2QgICB4bW0zLFtyZWwgUFdfTUYwODlfRjA2MF0gICAgICA7IHhtbTM9dG1wM0wKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTQsW3JlbCBQV19NRjA4OV9GMDYwXSAgICAgIDsgeG1tND10bXAzSAogCi0JcGFkZGQJeG1tMiwgWE1NV09SRCBbd2soMTApXQk7IHhtbTI9dG1wMEwKLQlwYWRkZAl4bW0wLCBYTU1XT1JEIFt3aygxMSldCTsgeG1tMD10bXAwSAotCXBhZGRkCXhtbTMseG1tNQkJOyB4bW0zPXRtcDNMCi0JcGFkZGQJeG1tNCx4bW03CQk7IHhtbTQ9dG1wM0gKKyAgICAgICAgcGFkZGQgICB4bW0yLCBYTU1XT1JEIFt3aygxMCldICA7IHhtbTI9dG1wMEwKKyAgICAgICAgcGFkZGQgICB4bW0wLCBYTU1XT1JEIFt3aygxMSldICA7IHhtbTA9dG1wMEgKKyAgICAgICAgcGFkZGQgICB4bW0zLHhtbTUgICAgICAgICAgICAgICA7IHhtbTM9dG1wM0wKKyAgICAgICAgcGFkZGQgICB4bW00LHhtbTcgICAgICAgICAgICAgICA7IHhtbTQ9dG1wM0gKIAotCW1vdmRxYQlYTU1XT1JEIFt3ayg4KV0sIHhtbTIJOyB3ayg4KT10bXAwTAotCW1vdmRxYQlYTU1XT1JEIFt3ayg5KV0sIHhtbTAJOyB3ayg5KT10bXAwSAorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDgpXSwgeG1tMiAgIDsgd2soOCk9dG1wMEwKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3ayg5KV0sIHhtbTAgICA7IHdrKDkpPXRtcDBICiAKLQltb3ZkcWEgICAgeG1tMix4bW0xCi0JbW92ZHFhICAgIHhtbTAseG1tMQotCXB1bnBja2x3ZCB4bW0yLHhtbTYKLQlwdW5wY2tod2QgeG1tMCx4bW02Ci0JbW92ZHFhICAgIHhtbTEseG1tMgotCW1vdmRxYSAgICB4bW02LHhtbTAKLQlwbWFkZHdkICAgeG1tMixbcmVsIFBXX01GMDUwX01GMjU2XQk7IHhtbTI9dG1wMUwKLQlwbWFkZHdkICAgeG1tMCxbcmVsIFBXX01GMDUwX01GMjU2XQk7IHhtbTA9dG1wMUgKLQlwbWFkZHdkICAgeG1tMSxbcmVsIFBXX01GMjU2X0YwNTBdCTsgeG1tMT10bXAyTAotCXBtYWRkd2QgICB4bW02LFtyZWwgUFdfTUYyNTZfRjA1MF0JOyB4bW02PXRtcDJICisgICAgICAgIG1vdmRxYSAgICB4bW0yLHhtbTEKKyAgICAgICAgbW92ZHFhICAgIHhtbTAseG1tMQorICAgICAgICBwdW5wY2tsd2QgeG1tMix4bW02CisgICAgICAgIHB1bnBja2h3ZCB4bW0wLHhtbTYKKyAgICAgICAgbW92ZHFhICAgIHhtbTEseG1tMgorICAgICAgICBtb3ZkcWEgICAgeG1tNix4bW0wCisgICAgICAgIHBtYWRkd2QgICB4bW0yLFtyZWwgUFdfTUYwNTBfTUYyNTZdICAgICA7IHhtbTI9dG1wMUwKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTAsW3JlbCBQV19NRjA1MF9NRjI1Nl0gICAgIDsgeG1tMD10bXAxSAorICAgICAgICBwbWFkZHdkICAgeG1tMSxbcmVsIFBXX01GMjU2X0YwNTBdICAgICAgOyB4bW0xPXRtcDJMCisgICAgICAgIHBtYWRkd2QgICB4bW02LFtyZWwgUFdfTUYyNTZfRjA1MF0gICAgICA7IHhtbTY9dG1wMkgKIAotCXBhZGRkCXhtbTIseG1tNQkJOyB4bW0yPXRtcDFMCi0JcGFkZGQJeG1tMCx4bW03CQk7IHhtbTA9dG1wMUgKLQlwYWRkZAl4bW0xLCBYTU1XT1JEIFt3aygxMCldCTsgeG1tMT10bXAyTAotCXBhZGRkCXhtbTYsIFhNTVdPUkQgW3drKDExKV0JOyB4bW02PXRtcDJICisgICAgICAgIHBhZGRkICAgeG1tMix4bW01ICAgICAgICAgICAgICAgOyB4bW0yPXRtcDFMCisgICAgICAgIHBhZGRkICAgeG1tMCx4bW03ICAgICAgICAgICAgICAgOyB4bW0wPXRtcDFICisgICAgICAgIHBhZGRkICAgeG1tMSwgWE1NV09SRCBbd2soMTApXSAgOyB4bW0xPXRtcDJMCisgICAgICAgIHBhZGRkICAgeG1tNiwgWE1NV09SRCBbd2soMTEpXSAgOyB4bW02PXRtcDJICiAKLQltb3ZkcWEJWE1NV09SRCBbd2soMTApXSwgeG1tMgk7IHdrKDEwKT10bXAxTAotCW1vdmRxYQlYTU1XT1JEIFt3aygxMSldLCB4bW0wCTsgd2soMTEpPXRtcDFICisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMTApXSwgeG1tMiAgOyB3aygxMCk9dG1wMUwKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygxMSldLCB4bW0wICA7IHdrKDExKT10bXAxSAogCi0JOyAtLSBGaW5hbCBvdXRwdXQgc3RhZ2UKKyAgICAgICAgOyAtLSBGaW5hbCBvdXRwdXQgc3RhZ2UKIAotCW1vdmRxYQl4bW01LCBYTU1XT1JEIFt3aygwKV0JOyB4bW01PXRtcDEwTAotCW1vdmRxYQl4bW03LCBYTU1XT1JEIFt3aygxKV0JOyB4bW03PXRtcDEwSAorICAgICAgICBtb3ZkcWEgIHhtbTUsIFhNTVdPUkQgW3drKDApXSAgIDsgeG1tNT10bXAxMEwKKyAgICAgICAgbW92ZHFhICB4bW03LCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTc9dG1wMTBICiAKLQltb3ZkcWEJeG1tMix4bW01Ci0JbW92ZHFhCXhtbTAseG1tNwotCXBhZGRkCXhtbTUseG1tMwkJOyB4bW01PWRhdGEwTAotCXBhZGRkCXhtbTcseG1tNAkJOyB4bW03PWRhdGEwSAotCXBzdWJkCXhtbTIseG1tMwkJOyB4bW0yPWRhdGE3TAotCXBzdWJkCXhtbTAseG1tNAkJOyB4bW0wPWRhdGE3SAorICAgICAgICBtb3ZkcWEgIHhtbTIseG1tNQorICAgICAgICBtb3ZkcWEgIHhtbTAseG1tNworICAgICAgICBwYWRkZCAgIHhtbTUseG1tMyAgICAgICAgICAgICAgIDsgeG1tNT1kYXRhMEwKKyAgICAgICAgcGFkZGQgICB4bW03LHhtbTQgICAgICAgICAgICAgICA7IHhtbTc9ZGF0YTBICisgICAgICAgIHBzdWJkICAgeG1tMix4bW0zICAgICAgICAgICAgICAgOyB4bW0yPWRhdGE3TAorICAgICAgICBwc3ViZCAgIHhtbTAseG1tNCAgICAgICAgICAgICAgIDsgeG1tMD1kYXRhN0gKIAotCW1vdmRxYQl4bW0zLFtyZWwgUERfREVTQ0FMRV9QMV0JOyB4bW0zPVtyZWwgUERfREVTQ0FMRV9QMV0KKyAgICAgICAgbW92ZHFhICB4bW0zLFtyZWwgUERfREVTQ0FMRV9QMV0gICAgICAgIDsgeG1tMz1bcmVsIFBEX0RFU0NBTEVfUDFdCiAKLQlwYWRkZAl4bW01LHhtbTMKLQlwYWRkZAl4bW03LHhtbTMKLQlwc3JhZAl4bW01LERFU0NBTEVfUDEKLQlwc3JhZAl4bW03LERFU0NBTEVfUDEKLQlwYWRkZAl4bW0yLHhtbTMKLQlwYWRkZAl4bW0wLHhtbTMKLQlwc3JhZAl4bW0yLERFU0NBTEVfUDEKLQlwc3JhZAl4bW0wLERFU0NBTEVfUDEKKyAgICAgICAgcGFkZGQgICB4bW01LHhtbTMKKyAgICAgICAgcGFkZGQgICB4bW03LHhtbTMKKyAgICAgICAgcHNyYWQgICB4bW01LERFU0NBTEVfUDEKKyAgICAgICAgcHNyYWQgICB4bW03LERFU0NBTEVfUDEKKyAgICAgICAgcGFkZGQgICB4bW0yLHhtbTMKKyAgICAgICAgcGFkZGQgICB4bW0wLHhtbTMKKyAgICAgICAgcHNyYWQgICB4bW0yLERFU0NBTEVfUDEKKyAgICAgICAgcHNyYWQgICB4bW0wLERFU0NBTEVfUDEKIAotCXBhY2tzc2R3ICB4bW01LHhtbTcJCTsgeG1tNT1kYXRhMD0oMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcpCi0JcGFja3NzZHcgIHhtbTIseG1tMAkJOyB4bW0yPWRhdGE3PSg3MCA3MSA3MiA3MyA3NCA3NSA3NiA3NykKKyAgICAgICAgcGFja3NzZHcgIHhtbTUseG1tNyAgICAgICAgICAgICA7IHhtbTU9ZGF0YTA9KDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3KQorICAgICAgICBwYWNrc3NkdyAgeG1tMix4bW0wICAgICAgICAgICAgIDsgeG1tMj1kYXRhNz0oNzAgNzEgNzIgNzMgNzQgNzUgNzYgNzcpCiAKLQltb3ZkcWEJeG1tNCwgWE1NV09SRCBbd2soNCldCTsgeG1tND10bXAxMUwKLQltb3ZkcWEJeG1tMywgWE1NV09SRCBbd2soNSldCTsgeG1tMz10bXAxMUgKKyAgICAgICAgbW92ZHFhICB4bW00LCBYTU1XT1JEIFt3ayg0KV0gICA7IHhtbTQ9dG1wMTFMCisgICAgICAgIG1vdmRxYSAgeG1tMywgWE1NV09SRCBbd2soNSldICAgOyB4bW0zPXRtcDExSAogCi0JbW92ZHFhCXhtbTcseG1tNAotCW1vdmRxYQl4bW0wLHhtbTMKLQlwYWRkZAl4bW00LHhtbTEJCTsgeG1tND1kYXRhMUwKLQlwYWRkZAl4bW0zLHhtbTYJCTsgeG1tMz1kYXRhMUgKLQlwc3ViZAl4bW03LHhtbTEJCTsgeG1tNz1kYXRhNkwKLQlwc3ViZAl4bW0wLHhtbTYJCTsgeG1tMD1kYXRhNkgKKyAgICAgICAgbW92ZHFhICB4bW03LHhtbTQKKyAgICAgICAgbW92ZHFhICB4bW0wLHhtbTMKKyAgICAgICAgcGFkZGQgICB4bW00LHhtbTEgICAgICAgICAgICAgICA7IHhtbTQ9ZGF0YTFMCisgICAgICAgIHBhZGRkICAgeG1tMyx4bW02ICAgICAgICAgICAgICAgOyB4bW0zPWRhdGExSAorICAgICAgICBwc3ViZCAgIHhtbTcseG1tMSAgICAgICAgICAgICAgIDsgeG1tNz1kYXRhNkwKKyAgICAgICAgcHN1YmQgICB4bW0wLHhtbTYgICAgICAgICAgICAgICA7IHhtbTA9ZGF0YTZICiAKLQltb3ZkcWEJeG1tMSxbcmVsIFBEX0RFU0NBTEVfUDFdCTsgeG1tMT1bcmVsIFBEX0RFU0NBTEVfUDFdCisgICAgICAgIG1vdmRxYSAgeG1tMSxbcmVsIFBEX0RFU0NBTEVfUDFdICAgICAgICA7IHhtbTE9W3JlbCBQRF9ERVNDQUxFX1AxXQogCi0JcGFkZGQJeG1tNCx4bW0xCi0JcGFkZGQJeG1tMyx4bW0xCi0JcHNyYWQJeG1tNCxERVNDQUxFX1AxCi0JcHNyYWQJeG1tMyxERVNDQUxFX1AxCi0JcGFkZGQJeG1tNyx4bW0xCi0JcGFkZGQJeG1tMCx4bW0xCi0JcHNyYWQJeG1tNyxERVNDQUxFX1AxCi0JcHNyYWQJeG1tMCxERVNDQUxFX1AxCisgICAgICAgIHBhZGRkICAgeG1tNCx4bW0xCisgICAgICAgIHBhZGRkICAgeG1tMyx4bW0xCisgICAgICAgIHBzcmFkICAgeG1tNCxERVNDQUxFX1AxCisgICAgICAgIHBzcmFkICAgeG1tMyxERVNDQUxFX1AxCisgICAgICAgIHBhZGRkICAgeG1tNyx4bW0xCisgICAgICAgIHBhZGRkICAgeG1tMCx4bW0xCisgICAgICAgIHBzcmFkICAgeG1tNyxERVNDQUxFX1AxCisgICAgICAgIHBzcmFkICAgeG1tMCxERVNDQUxFX1AxCiAKLQlwYWNrc3NkdyAgeG1tNCx4bW0zCQk7IHhtbTQ9ZGF0YTE9KDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3KQotCXBhY2tzc2R3ICB4bW03LHhtbTAJCTsgeG1tNz1kYXRhNj0oNjAgNjEgNjIgNjMgNjQgNjUgNjYgNjcpCisgICAgICAgIHBhY2tzc2R3ICB4bW00LHhtbTMgICAgICAgICAgICAgOyB4bW00PWRhdGExPSgxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNykKKyAgICAgICAgcGFja3NzZHcgIHhtbTcseG1tMCAgICAgICAgICAgICA7IHhtbTc9ZGF0YTY9KDYwIDYxIDYyIDYzIDY0IDY1IDY2IDY3KQogCi0JbW92ZHFhICAgIHhtbTYseG1tNQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCi0JcHVucGNrbHdkIHhtbTUseG1tNAkJOyB4bW01PSgwMCAxMCAwMSAxMSAwMiAxMiAwMyAxMykKLQlwdW5wY2tod2QgeG1tNix4bW00CQk7IHhtbTY9KDA0IDE0IDA1IDE1IDA2IDE2IDA3IDE3KQotCW1vdmRxYSAgICB4bW0xLHhtbTcJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQotCXB1bnBja2x3ZCB4bW03LHhtbTIJCTsgeG1tNz0oNjAgNzAgNjEgNzEgNjIgNzIgNjMgNzMpCi0JcHVucGNraHdkIHhtbTEseG1tMgkJOyB4bW0xPSg2NCA3NCA2NSA3NSA2NiA3NiA2NyA3NykKKyAgICAgICAgbW92ZHFhICAgIHhtbTYseG1tNSAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICAgICAgcHVucGNrbHdkIHhtbTUseG1tNCAgICAgICAgICAgICA7IHhtbTU9KDAwIDEwIDAxIDExIDAyIDEyIDAzIDEzKQorICAgICAgICBwdW5wY2tod2QgeG1tNix4bW00ICAgICAgICAgICAgIDsgeG1tNj0oMDQgMTQgMDUgMTUgMDYgMTYgMDcgMTcpCisgICAgICAgIG1vdmRxYSAgICB4bW0xLHhtbTcgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgICAgIHB1bnBja2x3ZCB4bW03LHhtbTIgICAgICAgICAgICAgOyB4bW03PSg2MCA3MCA2MSA3MSA2MiA3MiA2MyA3MykKKyAgICAgICAgcHVucGNraHdkIHhtbTEseG1tMiAgICAgICAgICAgICA7IHhtbTE9KDY0IDc0IDY1IDc1IDY2IDc2IDY3IDc3KQogCi0JbW92ZHFhCXhtbTMsIFhNTVdPUkQgW3drKDYpXQk7IHhtbTM9dG1wMTJMCi0JbW92ZHFhCXhtbTAsIFhNTVdPUkQgW3drKDcpXQk7IHhtbTA9dG1wMTJICi0JbW92ZHFhCXhtbTQsIFhNTVdPUkQgW3drKDEwKV0JOyB4bW00PXRtcDFMCi0JbW92ZHFhCXhtbTIsIFhNTVdPUkQgW3drKDExKV0JOyB4bW0yPXRtcDFICisgICAgICAgIG1vdmRxYSAgeG1tMywgWE1NV09SRCBbd2soNildICAgOyB4bW0zPXRtcDEyTAorICAgICAgICBtb3ZkcWEgIHhtbTAsIFhNTVdPUkQgW3drKDcpXSAgIDsgeG1tMD10bXAxMkgKKyAgICAgICAgbW92ZHFhICB4bW00LCBYTU1XT1JEIFt3aygxMCldICA7IHhtbTQ9dG1wMUwKKyAgICAgICAgbW92ZHFhICB4bW0yLCBYTU1XT1JEIFt3aygxMSldICA7IHhtbTI9dG1wMUgKIAotCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTUJOyB3aygwKT0oMDAgMTAgMDEgMTEgMDIgMTIgMDMgMTMpCi0JbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tNgk7IHdrKDEpPSgwNCAxNCAwNSAxNSAwNiAxNiAwNyAxNykKLQltb3ZkcWEJWE1NV09SRCBbd2soNCldLCB4bW03CTsgd2soNCk9KDYwIDcwIDYxIDcxIDYyIDcyIDYzIDczKQotCW1vdmRxYQlYTU1XT1JEIFt3ayg1KV0sIHhtbTEJOyB3ayg1KT0oNjQgNzQgNjUgNzUgNjYgNzYgNjcgNzcpCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMCldLCB4bW01ICAgOyB3aygwKT0oMDAgMTAgMDEgMTEgMDIgMTIgMDMgMTMpCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMSldLCB4bW02ICAgOyB3aygxKT0oMDQgMTQgMDUgMTUgMDYgMTYgMDcgMTcpCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soNCldLCB4bW03ICAgOyB3ayg0KT0oNjAgNzAgNjEgNzEgNjIgNzIgNjMgNzMpCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soNSldLCB4bW0xICAgOyB3ayg1KT0oNjQgNzQgNjUgNzUgNjYgNzYgNjcgNzcpCiAKLQltb3ZkcWEJeG1tNSx4bW0zCi0JbW92ZHFhCXhtbTYseG1tMAotCXBhZGRkCXhtbTMseG1tNAkJOyB4bW0zPWRhdGEyTAotCXBhZGRkCXhtbTAseG1tMgkJOyB4bW0wPWRhdGEySAotCXBzdWJkCXhtbTUseG1tNAkJOyB4bW01PWRhdGE1TAotCXBzdWJkCXhtbTYseG1tMgkJOyB4bW02PWRhdGE1SAorICAgICAgICBtb3ZkcWEgIHhtbTUseG1tMworICAgICAgICBtb3ZkcWEgIHhtbTYseG1tMAorICAgICAgICBwYWRkZCAgIHhtbTMseG1tNCAgICAgICAgICAgICAgIDsgeG1tMz1kYXRhMkwKKyAgICAgICAgcGFkZGQgICB4bW0wLHhtbTIgICAgICAgICAgICAgICA7IHhtbTA9ZGF0YTJICisgICAgICAgIHBzdWJkICAgeG1tNSx4bW00ICAgICAgICAgICAgICAgOyB4bW01PWRhdGE1TAorICAgICAgICBwc3ViZCAgIHhtbTYseG1tMiAgICAgICAgICAgICAgIDsgeG1tNj1kYXRhNUgKIAotCW1vdmRxYQl4bW03LFtyZWwgUERfREVTQ0FMRV9QMV0JOyB4bW03PVtyZWwgUERfREVTQ0FMRV9QMV0KKyAgICAgICAgbW92ZHFhICB4bW03LFtyZWwgUERfREVTQ0FMRV9QMV0gICAgICAgIDsgeG1tNz1bcmVsIFBEX0RFU0NBTEVfUDFdCiAKLQlwYWRkZAl4bW0zLHhtbTcKLQlwYWRkZAl4bW0wLHhtbTcKLQlwc3JhZAl4bW0zLERFU0NBTEVfUDEKLQlwc3JhZAl4bW0wLERFU0NBTEVfUDEKLQlwYWRkZAl4bW01LHhtbTcKLQlwYWRkZAl4bW02LHhtbTcKLQlwc3JhZAl4bW01LERFU0NBTEVfUDEKLQlwc3JhZAl4bW02LERFU0NBTEVfUDEKKyAgICAgICAgcGFkZGQgICB4bW0zLHhtbTcKKyAgICAgICAgcGFkZGQgICB4bW0wLHhtbTcKKyAgICAgICAgcHNyYWQgICB4bW0zLERFU0NBTEVfUDEKKyAgICAgICAgcHNyYWQgICB4bW0wLERFU0NBTEVfUDEKKyAgICAgICAgcGFkZGQgICB4bW01LHhtbTcKKyAgICAgICAgcGFkZGQgICB4bW02LHhtbTcKKyAgICAgICAgcHNyYWQgICB4bW01LERFU0NBTEVfUDEKKyAgICAgICAgcHNyYWQgICB4bW02LERFU0NBTEVfUDEKIAotCXBhY2tzc2R3ICB4bW0zLHhtbTAJCTsgeG1tMz1kYXRhMj0oMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcpCi0JcGFja3NzZHcgIHhtbTUseG1tNgkJOyB4bW01PWRhdGE1PSg1MCA1MSA1MiA1MyA1NCA1NSA1NiA1NykKKyAgICAgICAgcGFja3NzZHcgIHhtbTMseG1tMCAgICAgICAgICAgICA7IHhtbTM9ZGF0YTI9KDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3KQorICAgICAgICBwYWNrc3NkdyAgeG1tNSx4bW02ICAgICAgICAgICAgIDsgeG1tNT1kYXRhNT0oNTAgNTEgNTIgNTMgNTQgNTUgNTYgNTcpCiAKLQltb3ZkcWEJeG1tMSwgWE1NV09SRCBbd2soMildCTsgeG1tMT10bXAxM0wKLQltb3ZkcWEJeG1tNCwgWE1NV09SRCBbd2soMyldCTsgeG1tND10bXAxM0gKLQltb3ZkcWEJeG1tMiwgWE1NV09SRCBbd2soOCldCTsgeG1tMj10bXAwTAotCW1vdmRxYQl4bW03LCBYTU1XT1JEIFt3ayg5KV0JOyB4bW03PXRtcDBICisgICAgICAgIG1vdmRxYSAgeG1tMSwgWE1NV09SRCBbd2soMildICAgOyB4bW0xPXRtcDEzTAorICAgICAgICBtb3ZkcWEgIHhtbTQsIFhNTVdPUkQgW3drKDMpXSAgIDsgeG1tND10bXAxM0gKKyAgICAgICAgbW92ZHFhICB4bW0yLCBYTU1XT1JEIFt3ayg4KV0gICA7IHhtbTI9dG1wMEwKKyAgICAgICAgbW92ZHFhICB4bW03LCBYTU1XT1JEIFt3ayg5KV0gICA7IHhtbTc9dG1wMEgKIAotCW1vdmRxYQl4bW0wLHhtbTEKLQltb3ZkcWEJeG1tNix4bW00Ci0JcGFkZGQJeG1tMSx4bW0yCQk7IHhtbTE9ZGF0YTNMCi0JcGFkZGQJeG1tNCx4bW03CQk7IHhtbTQ9ZGF0YTNICi0JcHN1YmQJeG1tMCx4bW0yCQk7IHhtbTA9ZGF0YTRMCi0JcHN1YmQJeG1tNix4bW03CQk7IHhtbTY9ZGF0YTRICisgICAgICAgIG1vdmRxYSAgeG1tMCx4bW0xCisgICAgICAgIG1vdmRxYSAgeG1tNix4bW00CisgICAgICAgIHBhZGRkICAgeG1tMSx4bW0yICAgICAgICAgICAgICAgOyB4bW0xPWRhdGEzTAorICAgICAgICBwYWRkZCAgIHhtbTQseG1tNyAgICAgICAgICAgICAgIDsgeG1tND1kYXRhM0gKKyAgICAgICAgcHN1YmQgICB4bW0wLHhtbTIgICAgICAgICAgICAgICA7IHhtbTA9ZGF0YTRMCisgICAgICAgIHBzdWJkICAgeG1tNix4bW03ICAgICAgICAgICAgICAgOyB4bW02PWRhdGE0SAogCi0JbW92ZHFhCXhtbTIsW3JlbCBQRF9ERVNDQUxFX1AxXQk7IHhtbTI9W3JlbCBQRF9ERVNDQUxFX1AxXQorICAgICAgICBtb3ZkcWEgIHhtbTIsW3JlbCBQRF9ERVNDQUxFX1AxXSAgICAgICAgOyB4bW0yPVtyZWwgUERfREVTQ0FMRV9QMV0KIAotCXBhZGRkCXhtbTEseG1tMgotCXBhZGRkCXhtbTQseG1tMgotCXBzcmFkCXhtbTEsREVTQ0FMRV9QMQotCXBzcmFkCXhtbTQsREVTQ0FMRV9QMQotCXBhZGRkCXhtbTAseG1tMgotCXBhZGRkCXhtbTYseG1tMgotCXBzcmFkCXhtbTAsREVTQ0FMRV9QMQotCXBzcmFkCXhtbTYsREVTQ0FMRV9QMQorICAgICAgICBwYWRkZCAgIHhtbTEseG1tMgorICAgICAgICBwYWRkZCAgIHhtbTQseG1tMgorICAgICAgICBwc3JhZCAgIHhtbTEsREVTQ0FMRV9QMQorICAgICAgICBwc3JhZCAgIHhtbTQsREVTQ0FMRV9QMQorICAgICAgICBwYWRkZCAgIHhtbTAseG1tMgorICAgICAgICBwYWRkZCAgIHhtbTYseG1tMgorICAgICAgICBwc3JhZCAgIHhtbTAsREVTQ0FMRV9QMQorICAgICAgICBwc3JhZCAgIHhtbTYsREVTQ0FMRV9QMQogCi0JcGFja3NzZHcgIHhtbTEseG1tNAkJOyB4bW0xPWRhdGEzPSgzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNykKLQlwYWNrc3NkdyAgeG1tMCx4bW02CQk7IHhtbTA9ZGF0YTQ9KDQwIDQxIDQyIDQzIDQ0IDQ1IDQ2IDQ3KQorICAgICAgICBwYWNrc3NkdyAgeG1tMSx4bW00ICAgICAgICAgICAgIDsgeG1tMT1kYXRhMz0oMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcpCisgICAgICAgIHBhY2tzc2R3ICB4bW0wLHhtbTYgICAgICAgICAgICAgOyB4bW0wPWRhdGE0PSg0MCA0MSA0MiA0MyA0NCA0NSA0NiA0NykKIAotCW1vdmRxYQl4bW03LCBYTU1XT1JEIFt3aygwKV0JOyB4bW03PSgwMCAxMCAwMSAxMSAwMiAxMiAwMyAxMykKLQltb3ZkcWEJeG1tMiwgWE1NV09SRCBbd2soMSldCTsgeG1tMj0oMDQgMTQgMDUgMTUgMDYgMTYgMDcgMTcpCisgICAgICAgIG1vdmRxYSAgeG1tNywgWE1NV09SRCBbd2soMCldICAgOyB4bW03PSgwMCAxMCAwMSAxMSAwMiAxMiAwMyAxMykKKyAgICAgICAgbW92ZHFhICB4bW0yLCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTI9KDA0IDE0IDA1IDE1IDA2IDE2IDA3IDE3KQogCi0JbW92ZHFhICAgIHhtbTQseG1tMwkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCi0JcHVucGNrbHdkIHhtbTMseG1tMQkJOyB4bW0zPSgyMCAzMCAyMSAzMSAyMiAzMiAyMyAzMykKLQlwdW5wY2tod2QgeG1tNCx4bW0xCQk7IHhtbTQ9KDI0IDM0IDI1IDM1IDI2IDM2IDI3IDM3KQotCW1vdmRxYSAgICB4bW02LHhtbTAJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQotCXB1bnBja2x3ZCB4bW0wLHhtbTUJCTsgeG1tMD0oNDAgNTAgNDEgNTEgNDIgNTIgNDMgNTMpCi0JcHVucGNraHdkIHhtbTYseG1tNQkJOyB4bW02PSg0NCA1NCA0NSA1NSA0NiA1NiA0NyA1NykKKyAgICAgICAgbW92ZHFhICAgIHhtbTQseG1tMyAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICAgICAgcHVucGNrbHdkIHhtbTMseG1tMSAgICAgICAgICAgICA7IHhtbTM9KDIwIDMwIDIxIDMxIDIyIDMyIDIzIDMzKQorICAgICAgICBwdW5wY2tod2QgeG1tNCx4bW0xICAgICAgICAgICAgIDsgeG1tND0oMjQgMzQgMjUgMzUgMjYgMzYgMjcgMzcpCisgICAgICAgIG1vdmRxYSAgICB4bW02LHhtbTAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgICAgIHB1bnBja2x3ZCB4bW0wLHhtbTUgICAgICAgICAgICAgOyB4bW0wPSg0MCA1MCA0MSA1MSA0MiA1MiA0MyA1MykKKyAgICAgICAgcHVucGNraHdkIHhtbTYseG1tNSAgICAgICAgICAgICA7IHhtbTY9KDQ0IDU0IDQ1IDU1IDQ2IDU2IDQ3IDU3KQogCi0JbW92ZHFhICAgIHhtbTEseG1tNwkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCi0JcHVucGNrbGRxIHhtbTcseG1tMwkJOyB4bW03PSgwMCAxMCAyMCAzMCAwMSAxMSAyMSAzMSkKLQlwdW5wY2toZHEgeG1tMSx4bW0zCQk7IHhtbTE9KDAyIDEyIDIyIDMyIDAzIDEzIDIzIDMzKQotCW1vdmRxYSAgICB4bW01LHhtbTIJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQotCXB1bnBja2xkcSB4bW0yLHhtbTQJCTsgeG1tMj0oMDQgMTQgMjQgMzQgMDUgMTUgMjUgMzUpCi0JcHVucGNraGRxIHhtbTUseG1tNAkJOyB4bW01PSgwNiAxNiAyNiAzNiAwNyAxNyAyNyAzNykKKyAgICAgICAgbW92ZHFhICAgIHhtbTEseG1tNyAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICAgICAgcHVucGNrbGRxIHhtbTcseG1tMyAgICAgICAgICAgICA7IHhtbTc9KDAwIDEwIDIwIDMwIDAxIDExIDIxIDMxKQorICAgICAgICBwdW5wY2toZHEgeG1tMSx4bW0zICAgICAgICAgICAgIDsgeG1tMT0oMDIgMTIgMjIgMzIgMDMgMTMgMjMgMzMpCisgICAgICAgIG1vdmRxYSAgICB4bW01LHhtbTIgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgICAgIHB1bnBja2xkcSB4bW0yLHhtbTQgICAgICAgICAgICAgOyB4bW0yPSgwNCAxNCAyNCAzNCAwNSAxNSAyNSAzNSkKKyAgICAgICAgcHVucGNraGRxIHhtbTUseG1tNCAgICAgICAgICAgICA7IHhtbTU9KDA2IDE2IDI2IDM2IDA3IDE3IDI3IDM3KQogCi0JbW92ZHFhCXhtbTMsIFhNTVdPUkQgW3drKDQpXQk7IHhtbTM9KDYwIDcwIDYxIDcxIDYyIDcyIDYzIDczKQotCW1vdmRxYQl4bW00LCBYTU1XT1JEIFt3ayg1KV0JOyB4bW00PSg2NCA3NCA2NSA3NSA2NiA3NiA2NyA3NykKKyAgICAgICAgbW92ZHFhICB4bW0zLCBYTU1XT1JEIFt3ayg0KV0gICA7IHhtbTM9KDYwIDcwIDYxIDcxIDYyIDcyIDYzIDczKQorICAgICAgICBtb3ZkcWEgIHhtbTQsIFhNTVdPUkQgW3drKDUpXSAgIDsgeG1tND0oNjQgNzQgNjUgNzUgNjYgNzYgNjcgNzcpCiAKLQltb3ZkcWEJWE1NV09SRCBbd2soNildLCB4bW0yCTsgd2soNik9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1KQotCW1vdmRxYQlYTU1XT1JEIFt3ayg3KV0sIHhtbTUJOyB3ayg3KT0oMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soNildLCB4bW0yICAgOyB3ayg2KT0oMDQgMTQgMjQgMzQgMDUgMTUgMjUgMzUpCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soNyldLCB4bW01ICAgOyB3ayg3KT0oMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCiAKLQltb3ZkcWEgICAgeG1tMix4bW0wCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKLQlwdW5wY2tsZHEgeG1tMCx4bW0zCQk7IHhtbTA9KDQwIDUwIDYwIDcwIDQxIDUxIDYxIDcxKQotCXB1bnBja2hkcSB4bW0yLHhtbTMJCTsgeG1tMj0oNDIgNTIgNjIgNzIgNDMgNTMgNjMgNzMpCi0JbW92ZHFhICAgIHhtbTUseG1tNgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCi0JcHVucGNrbGRxIHhtbTYseG1tNAkJOyB4bW02PSg0NCA1NCA2NCA3NCA0NSA1NSA2NSA3NSkKLQlwdW5wY2toZHEgeG1tNSx4bW00CQk7IHhtbTU9KDQ2IDU2IDY2IDc2IDQ3IDU3IDY3IDc3KQorICAgICAgICBtb3ZkcWEgICAgeG1tMix4bW0wICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgICAgICBwdW5wY2tsZHEgeG1tMCx4bW0zICAgICAgICAgICAgIDsgeG1tMD0oNDAgNTAgNjAgNzAgNDEgNTEgNjEgNzEpCisgICAgICAgIHB1bnBja2hkcSB4bW0yLHhtbTMgICAgICAgICAgICAgOyB4bW0yPSg0MiA1MiA2MiA3MiA0MyA1MyA2MyA3MykKKyAgICAgICAgbW92ZHFhICAgIHhtbTUseG1tNiAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICAgICAgcHVucGNrbGRxIHhtbTYseG1tNCAgICAgICAgICAgICA7IHhtbTY9KDQ0IDU0IDY0IDc0IDQ1IDU1IDY1IDc1KQorICAgICAgICBwdW5wY2toZHEgeG1tNSx4bW00ICAgICAgICAgICAgIDsgeG1tNT0oNDYgNTYgNjYgNzYgNDcgNTcgNjcgNzcpCiAKLQltb3ZkcWEgICAgIHhtbTMseG1tNwkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCi0JcHVucGNrbHFkcSB4bW03LHhtbTAJCTsgeG1tNz1jb2wwPSgwMCAxMCAyMCAzMCA0MCA1MCA2MCA3MCkKLQlwdW5wY2tocWRxIHhtbTMseG1tMAkJOyB4bW0zPWNvbDE9KDAxIDExIDIxIDMxIDQxIDUxIDYxIDcxKQotCW1vdmRxYSAgICAgeG1tNCx4bW0xCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKLQlwdW5wY2tscWRxIHhtbTEseG1tMgkJOyB4bW0xPWNvbDI9KDAyIDEyIDIyIDMyIDQyIDUyIDYyIDcyKQotCXB1bnBja2hxZHEgeG1tNCx4bW0yCQk7IHhtbTQ9Y29sMz0oMDMgMTMgMjMgMzMgNDMgNTMgNjMgNzMpCisgICAgICAgIG1vdmRxYSAgICAgeG1tMyx4bW03ICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisgICAgICAgIHB1bnBja2xxZHEgeG1tNyx4bW0wICAgICAgICAgICAgOyB4bW03PWNvbDA9KDAwIDEwIDIwIDMwIDQwIDUwIDYwIDcwKQorICAgICAgICBwdW5wY2tocWRxIHhtbTMseG1tMCAgICAgICAgICAgIDsgeG1tMz1jb2wxPSgwMSAxMSAyMSAzMSA0MSA1MSA2MSA3MSkKKyAgICAgICAgbW92ZHFhICAgICB4bW00LHhtbTEgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKyAgICAgICAgcHVucGNrbHFkcSB4bW0xLHhtbTIgICAgICAgICAgICA7IHhtbTE9Y29sMj0oMDIgMTIgMjIgMzIgNDIgNTIgNjIgNzIpCisgICAgICAgIHB1bnBja2hxZHEgeG1tNCx4bW0yICAgICAgICAgICAgOyB4bW00PWNvbDM9KDAzIDEzIDIzIDMzIDQzIDUzIDYzIDczKQogCi0JbW92ZHFhCXhtbTAsIFhNTVdPUkQgW3drKDYpXQk7IHhtbTA9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1KQotCW1vdmRxYQl4bW0yLCBYTU1XT1JEIFt3ayg3KV0JOyB4bW0yPSgwNiAxNiAyNiAzNiAwNyAxNyAyNyAzNykKKyAgICAgICAgbW92ZHFhICB4bW0wLCBYTU1XT1JEIFt3ayg2KV0gICA7IHhtbTA9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1KQorICAgICAgICBtb3ZkcWEgIHhtbTIsIFhNTVdPUkQgW3drKDcpXSAgIDsgeG1tMj0oMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCiAKLQltb3ZkcWEJWE1NV09SRCBbd2soOCldLCB4bW0zCTsgd2soOCk9Y29sMQotCW1vdmRxYQlYTU1XT1JEIFt3ayg5KV0sIHhtbTQJOyB3ayg5KT1jb2wzCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soOCldLCB4bW0zICAgOyB3ayg4KT1jb2wxCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soOSldLCB4bW00ICAgOyB3ayg5KT1jb2wzCiAKLQltb3ZkcWEgICAgIHhtbTMseG1tMAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCi0JcHVucGNrbHFkcSB4bW0wLHhtbTYJCTsgeG1tMD1jb2w0PSgwNCAxNCAyNCAzNCA0NCA1NCA2NCA3NCkKLQlwdW5wY2tocWRxIHhtbTMseG1tNgkJOyB4bW0zPWNvbDU9KDA1IDE1IDI1IDM1IDQ1IDU1IDY1IDc1KQotCW1vdmRxYSAgICAgeG1tNCx4bW0yCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKLQlwdW5wY2tscWRxIHhtbTIseG1tNQkJOyB4bW0yPWNvbDY9KDA2IDE2IDI2IDM2IDQ2IDU2IDY2IDc2KQotCXB1bnBja2hxZHEgeG1tNCx4bW01CQk7IHhtbTQ9Y29sNz0oMDcgMTcgMjcgMzcgNDcgNTcgNjcgNzcpCisgICAgICAgIG1vdmRxYSAgICAgeG1tMyx4bW0wICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisgICAgICAgIHB1bnBja2xxZHEgeG1tMCx4bW02ICAgICAgICAgICAgOyB4bW0wPWNvbDQ9KDA0IDE0IDI0IDM0IDQ0IDU0IDY0IDc0KQorICAgICAgICBwdW5wY2tocWRxIHhtbTMseG1tNiAgICAgICAgICAgIDsgeG1tMz1jb2w1PSgwNSAxNSAyNSAzNSA0NSA1NSA2NSA3NSkKKyAgICAgICAgbW92ZHFhICAgICB4bW00LHhtbTIgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKyAgICAgICAgcHVucGNrbHFkcSB4bW0yLHhtbTUgICAgICAgICAgICA7IHhtbTI9Y29sNj0oMDYgMTYgMjYgMzYgNDYgNTYgNjYgNzYpCisgICAgICAgIHB1bnBja2hxZHEgeG1tNCx4bW01ICAgICAgICAgICAgOyB4bW00PWNvbDc9KDA3IDE3IDI3IDM3IDQ3IDU3IDY3IDc3KQogCi0JbW92ZHFhCVhNTVdPUkQgW3drKDEwKV0sIHhtbTMJOyB3aygxMCk9Y29sNQotCW1vdmRxYQlYTU1XT1JEIFt3aygxMSldLCB4bW00CTsgd2soMTEpPWNvbDcKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygxMCldLCB4bW0zICA7IHdrKDEwKT1jb2w1CisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMTEpXSwgeG1tNCAgOyB3aygxMSk9Y29sNwogLmNvbHVtbl9lbmQ6CiAKLQk7IC0tIFByZWZldGNoIHRoZSBuZXh0IGNvZWZmaWNpZW50IGJsb2NrCisgICAgICAgIDsgLS0gUHJlZmV0Y2ggdGhlIG5leHQgY29lZmZpY2llbnQgYmxvY2sKIAotCXByZWZldGNobnRhIFtyc2kgKyBEQ1RTSVpFMipTSVpFT0ZfSkNPRUYgKyAwKjMyXQotCXByZWZldGNobnRhIFtyc2kgKyBEQ1RTSVpFMipTSVpFT0ZfSkNPRUYgKyAxKjMyXQotCXByZWZldGNobnRhIFtyc2kgKyBEQ1RTSVpFMipTSVpFT0ZfSkNPRUYgKyAyKjMyXQotCXByZWZldGNobnRhIFtyc2kgKyBEQ1RTSVpFMipTSVpFT0ZfSkNPRUYgKyAzKjMyXQorICAgICAgICBwcmVmZXRjaG50YSBbcnNpICsgRENUU0laRTIqU0laRU9GX0pDT0VGICsgMCozMl0KKyAgICAgICAgcHJlZmV0Y2hudGEgW3JzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDEqMzJdCisgICAgICAgIHByZWZldGNobnRhIFtyc2kgKyBEQ1RTSVpFMipTSVpFT0ZfSkNPRUYgKyAyKjMyXQorICAgICAgICBwcmVmZXRjaG50YSBbcnNpICsgRENUU0laRTIqU0laRU9GX0pDT0VGICsgMyozMl0KIAotCTsgLS0tLSBQYXNzIDI6IHByb2Nlc3Mgcm93cyBmcm9tIHdvcmsgYXJyYXksIHN0b3JlIGludG8gb3V0cHV0IGFycmF5LgorICAgICAgICA7IC0tLS0gUGFzcyAyOiBwcm9jZXNzIHJvd3MgZnJvbSB3b3JrIGFycmF5LCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4KIAotCW1vdglyYXgsIFtvcmlnaW5hbF9yYnBdCi0JbW92CXJkaSwgcjEyCTsgKEpTQU1QUk9XICopCi0JbW92CXJheCwgcjEzCisgICAgICAgIG1vdiAgICAgcmF4LCBbb3JpZ2luYWxfcmJwXQorICAgICAgICBtb3YgICAgIHJkaSwgcjEyICAgICAgICA7IChKU0FNUFJPVyAqKQorICAgICAgICBtb3YgICAgIHJheCwgcjEzCiAKLQk7IC0tIEV2ZW4gcGFydAorICAgICAgICA7IC0tIEV2ZW4gcGFydAogCi0JOyB4bW03PWNvbDAsIHhtbTE9Y29sMiwgeG1tMD1jb2w0LCB4bW0yPWNvbDYKKyAgICAgICAgOyB4bW03PWNvbDAsIHhtbTE9Y29sMiwgeG1tMD1jb2w0LCB4bW0yPWNvbDYKIAotCTsgKE9yaWdpbmFsKQotCTsgejEgPSAoejIgKyB6MykgKiAwLjU0MTE5NjEwMDsKLQk7IHRtcDIgPSB6MSArIHozICogLTEuODQ3NzU5MDY1OwotCTsgdG1wMyA9IHoxICsgejIgKiAwLjc2NTM2Njg2NTsKLQk7Ci0JOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKLQk7IHRtcDIgPSB6MiAqIDAuNTQxMTk2MTAwICsgejMgKiAoMC41NDExOTYxMDAgLSAxLjg0Nzc1OTA2NSk7Ci0JOyB0bXAzID0gejIgKiAoMC41NDExOTYxMDAgKyAwLjc2NTM2Njg2NSkgKyB6MyAqIDAuNTQxMTk2MTAwOworICAgICAgICA7IChPcmlnaW5hbCkKKyAgICAgICAgOyB6MSA9ICh6MiArIHozKSAqIDAuNTQxMTk2MTAwOworICAgICAgICA7IHRtcDIgPSB6MSArIHozICogLTEuODQ3NzU5MDY1OworICAgICAgICA7IHRtcDMgPSB6MSArIHoyICogMC43NjUzNjY4NjU7CisgICAgICAgIDsKKyAgICAgICAgOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKyAgICAgICAgOyB0bXAyID0gejIgKiAwLjU0MTE5NjEwMCArIHozICogKDAuNTQxMTk2MTAwIC0gMS44NDc3NTkwNjUpOworICAgICAgICA7IHRtcDMgPSB6MiAqICgwLjU0MTE5NjEwMCArIDAuNzY1MzY2ODY1KSArIHozICogMC41NDExOTYxMDA7CiAKLQltb3ZkcWEgICAgeG1tNix4bW0xCQk7IHhtbTE9aW4yPXoyCi0JbW92ZHFhICAgIHhtbTUseG1tMQotCXB1bnBja2x3ZCB4bW02LHhtbTIJCTsgeG1tMj1pbjY9ejMKLQlwdW5wY2tod2QgeG1tNSx4bW0yCi0JbW92ZHFhICAgIHhtbTEseG1tNgotCW1vdmRxYSAgICB4bW0yLHhtbTUKLQlwbWFkZHdkICAgeG1tNixbcmVsIFBXX0YxMzBfRjA1NF0JOyB4bW02PXRtcDNMCi0JcG1hZGR3ZCAgIHhtbTUsW3JlbCBQV19GMTMwX0YwNTRdCTsgeG1tNT10bXAzSAotCXBtYWRkd2QgICB4bW0xLFtyZWwgUFdfRjA1NF9NRjEzMF0JOyB4bW0xPXRtcDJMCi0JcG1hZGR3ZCAgIHhtbTIsW3JlbCBQV19GMDU0X01GMTMwXQk7IHhtbTI9dG1wMkgKKyAgICAgICAgbW92ZHFhICAgIHhtbTYseG1tMSAgICAgICAgICAgICA7IHhtbTE9aW4yPXoyCisgICAgICAgIG1vdmRxYSAgICB4bW01LHhtbTEKKyAgICAgICAgcHVucGNrbHdkIHhtbTYseG1tMiAgICAgICAgICAgICA7IHhtbTI9aW42PXozCisgICAgICAgIHB1bnBja2h3ZCB4bW01LHhtbTIKKyAgICAgICAgbW92ZHFhICAgIHhtbTEseG1tNgorICAgICAgICBtb3ZkcWEgICAgeG1tMix4bW01CisgICAgICAgIHBtYWRkd2QgICB4bW02LFtyZWwgUFdfRjEzMF9GMDU0XSAgICAgICA7IHhtbTY9dG1wM0wKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTUsW3JlbCBQV19GMTMwX0YwNTRdICAgICAgIDsgeG1tNT10bXAzSAorICAgICAgICBwbWFkZHdkICAgeG1tMSxbcmVsIFBXX0YwNTRfTUYxMzBdICAgICAgOyB4bW0xPXRtcDJMCisgICAgICAgIHBtYWRkd2QgICB4bW0yLFtyZWwgUFdfRjA1NF9NRjEzMF0gICAgICA7IHhtbTI9dG1wMkgKIAotCW1vdmRxYSAgICB4bW0zLHhtbTcKLQlwYWRkdyAgICAgeG1tNyx4bW0wCQk7IHhtbTc9aW4wK2luNAotCXBzdWJ3ICAgICB4bW0zLHhtbTAJCTsgeG1tMz1pbjAtaW40CisgICAgICAgIG1vdmRxYSAgICB4bW0zLHhtbTcKKyAgICAgICAgcGFkZHcgICAgIHhtbTcseG1tMCAgICAgICAgICAgICA7IHhtbTc9aW4wK2luNAorICAgICAgICBwc3VidyAgICAgeG1tMyx4bW0wICAgICAgICAgICAgIDsgeG1tMz1pbjAtaW40CiAKLQlweG9yICAgICAgeG1tNCx4bW00Ci0JcHhvciAgICAgIHhtbTAseG1tMAotCXB1bnBja2x3ZCB4bW00LHhtbTcJCTsgeG1tND10bXAwTAotCXB1bnBja2h3ZCB4bW0wLHhtbTcJCTsgeG1tMD10bXAwSAotCXBzcmFkICAgICB4bW00LCgxNi1DT05TVF9CSVRTKQk7IHBzcmFkIHhtbTQsMTYgJiBwc2xsZCB4bW00LENPTlNUX0JJVFMKLQlwc3JhZCAgICAgeG1tMCwoMTYtQ09OU1RfQklUUykJOyBwc3JhZCB4bW0wLDE2ICYgcHNsbGQgeG1tMCxDT05TVF9CSVRTCisgICAgICAgIHB4b3IgICAgICB4bW00LHhtbTQKKyAgICAgICAgcHhvciAgICAgIHhtbTAseG1tMAorICAgICAgICBwdW5wY2tsd2QgeG1tNCx4bW03ICAgICAgICAgICAgIDsgeG1tND10bXAwTAorICAgICAgICBwdW5wY2tod2QgeG1tMCx4bW03ICAgICAgICAgICAgIDsgeG1tMD10bXAwSAorICAgICAgICBwc3JhZCAgICAgeG1tNCwoMTYtQ09OU1RfQklUUykgIDsgcHNyYWQgeG1tNCwxNiAmIHBzbGxkIHhtbTQsQ09OU1RfQklUUworICAgICAgICBwc3JhZCAgICAgeG1tMCwoMTYtQ09OU1RfQklUUykgIDsgcHNyYWQgeG1tMCwxNiAmIHBzbGxkIHhtbTAsQ09OU1RfQklUUwogCi0JbW92ZHFhCXhtbTcseG1tNAotCXBhZGRkCXhtbTQseG1tNgkJOyB4bW00PXRtcDEwTAotCXBzdWJkCXhtbTcseG1tNgkJOyB4bW03PXRtcDEzTAotCW1vdmRxYQl4bW02LHhtbTAKLQlwYWRkZAl4bW0wLHhtbTUJCTsgeG1tMD10bXAxMEgKLQlwc3ViZAl4bW02LHhtbTUJCTsgeG1tNj10bXAxM0gKKyAgICAgICAgbW92ZHFhICB4bW03LHhtbTQKKyAgICAgICAgcGFkZGQgICB4bW00LHhtbTYgICAgICAgICAgICAgICA7IHhtbTQ9dG1wMTBMCisgICAgICAgIHBzdWJkICAgeG1tNyx4bW02ICAgICAgICAgICAgICAgOyB4bW03PXRtcDEzTAorICAgICAgICBtb3ZkcWEgIHhtbTYseG1tMAorICAgICAgICBwYWRkZCAgIHhtbTAseG1tNSAgICAgICAgICAgICAgIDsgeG1tMD10bXAxMEgKKyAgICAgICAgcHN1YmQgICB4bW02LHhtbTUgICAgICAgICAgICAgICA7IHhtbTY9dG1wMTNICiAKLQltb3ZkcWEJWE1NV09SRCBbd2soMCldLCB4bW00CTsgd2soMCk9dG1wMTBMCi0JbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tMAk7IHdrKDEpPXRtcDEwSAotCW1vdmRxYQlYTU1XT1JEIFt3aygyKV0sIHhtbTcJOyB3aygyKT10bXAxM0wKLQltb3ZkcWEJWE1NV09SRCBbd2soMyldLCB4bW02CTsgd2soMyk9dG1wMTNICisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMCldLCB4bW00ICAgOyB3aygwKT10bXAxMEwKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygxKV0sIHhtbTAgICA7IHdrKDEpPXRtcDEwSAorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDIpXSwgeG1tNyAgIDsgd2soMik9dG1wMTNMCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMyldLCB4bW02ICAgOyB3aygzKT10bXAxM0gKIAotCXB4b3IgICAgICB4bW01LHhtbTUKLQlweG9yICAgICAgeG1tNCx4bW00Ci0JcHVucGNrbHdkIHhtbTUseG1tMwkJOyB4bW01PXRtcDFMCi0JcHVucGNraHdkIHhtbTQseG1tMwkJOyB4bW00PXRtcDFICi0JcHNyYWQgICAgIHhtbTUsKDE2LUNPTlNUX0JJVFMpCTsgcHNyYWQgeG1tNSwxNiAmIHBzbGxkIHhtbTUsQ09OU1RfQklUUwotCXBzcmFkICAgICB4bW00LCgxNi1DT05TVF9CSVRTKQk7IHBzcmFkIHhtbTQsMTYgJiBwc2xsZCB4bW00LENPTlNUX0JJVFMKKyAgICAgICAgcHhvciAgICAgIHhtbTUseG1tNQorICAgICAgICBweG9yICAgICAgeG1tNCx4bW00CisgICAgICAgIHB1bnBja2x3ZCB4bW01LHhtbTMgICAgICAgICAgICAgOyB4bW01PXRtcDFMCisgICAgICAgIHB1bnBja2h3ZCB4bW00LHhtbTMgICAgICAgICAgICAgOyB4bW00PXRtcDFICisgICAgICAgIHBzcmFkICAgICB4bW01LCgxNi1DT05TVF9CSVRTKSAgOyBwc3JhZCB4bW01LDE2ICYgcHNsbGQgeG1tNSxDT05TVF9CSVRTCisgICAgICAgIHBzcmFkICAgICB4bW00LCgxNi1DT05TVF9CSVRTKSAgOyBwc3JhZCB4bW00LDE2ICYgcHNsbGQgeG1tNCxDT05TVF9CSVRTCiAKLQltb3ZkcWEJeG1tMCx4bW01Ci0JcGFkZGQJeG1tNSx4bW0xCQk7IHhtbTU9dG1wMTFMCi0JcHN1YmQJeG1tMCx4bW0xCQk7IHhtbTA9dG1wMTJMCi0JbW92ZHFhCXhtbTcseG1tNAotCXBhZGRkCXhtbTQseG1tMgkJOyB4bW00PXRtcDExSAotCXBzdWJkCXhtbTcseG1tMgkJOyB4bW03PXRtcDEySAorICAgICAgICBtb3ZkcWEgIHhtbTAseG1tNQorICAgICAgICBwYWRkZCAgIHhtbTUseG1tMSAgICAgICAgICAgICAgIDsgeG1tNT10bXAxMUwKKyAgICAgICAgcHN1YmQgICB4bW0wLHhtbTEgICAgICAgICAgICAgICA7IHhtbTA9dG1wMTJMCisgICAgICAgIG1vdmRxYSAgeG1tNyx4bW00CisgICAgICAgIHBhZGRkICAgeG1tNCx4bW0yICAgICAgICAgICAgICAgOyB4bW00PXRtcDExSAorICAgICAgICBwc3ViZCAgIHhtbTcseG1tMiAgICAgICAgICAgICAgIDsgeG1tNz10bXAxMkgKIAotCW1vdmRxYQlYTU1XT1JEIFt3ayg0KV0sIHhtbTUJOyB3ayg0KT10bXAxMUwKLQltb3ZkcWEJWE1NV09SRCBbd2soNSldLCB4bW00CTsgd2soNSk9dG1wMTFICi0JbW92ZHFhCVhNTVdPUkQgW3drKDYpXSwgeG1tMAk7IHdrKDYpPXRtcDEyTAotCW1vdmRxYQlYTU1XT1JEIFt3ayg3KV0sIHhtbTcJOyB3ayg3KT10bXAxMkgKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3ayg0KV0sIHhtbTUgICA7IHdrKDQpPXRtcDExTAorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDUpXSwgeG1tNCAgIDsgd2soNSk9dG1wMTFICisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soNildLCB4bW0wICAgOyB3ayg2KT10bXAxMkwKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3ayg3KV0sIHhtbTcgICA7IHdrKDcpPXRtcDEySAogCi0JOyAtLSBPZGQgcGFydAorICAgICAgICA7IC0tIE9kZCBwYXJ0CiAKLQltb3ZkcWEJeG1tNiwgWE1NV09SRCBbd2soOSldCTsgeG1tNj1jb2wzCi0JbW92ZHFhCXhtbTMsIFhNTVdPUkQgW3drKDgpXQk7IHhtbTM9Y29sMQotCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFt3aygxMSldCTsgeG1tMT1jb2w3Ci0JbW92ZHFhCXhtbTIsIFhNTVdPUkQgW3drKDEwKV0JOyB4bW0yPWNvbDUKKyAgICAgICAgbW92ZHFhICB4bW02LCBYTU1XT1JEIFt3ayg5KV0gICA7IHhtbTY9Y29sMworICAgICAgICBtb3ZkcWEgIHhtbTMsIFhNTVdPUkQgW3drKDgpXSAgIDsgeG1tMz1jb2wxCisgICAgICAgIG1vdmRxYSAgeG1tMSwgWE1NV09SRCBbd2soMTEpXSAgOyB4bW0xPWNvbDcKKyAgICAgICAgbW92ZHFhICB4bW0yLCBYTU1XT1JEIFt3aygxMCldICA7IHhtbTI9Y29sNQogCi0JbW92ZHFhCXhtbTUseG1tNgotCW1vdmRxYQl4bW00LHhtbTMKLQlwYWRkdwl4bW01LHhtbTEJCTsgeG1tNT16MwotCXBhZGR3CXhtbTQseG1tMgkJOyB4bW00PXo0CisgICAgICAgIG1vdmRxYSAgeG1tNSx4bW02CisgICAgICAgIG1vdmRxYSAgeG1tNCx4bW0zCisgICAgICAgIHBhZGR3ICAgeG1tNSx4bW0xICAgICAgICAgICAgICAgOyB4bW01PXozCisgICAgICAgIHBhZGR3ICAgeG1tNCx4bW0yICAgICAgICAgICAgICAgOyB4bW00PXo0CiAKLQk7IChPcmlnaW5hbCkKLQk7IHo1ID0gKHozICsgejQpICogMS4xNzU4NzU2MDI7Ci0JOyB6MyA9IHozICogLTEuOTYxNTcwNTYwOyAgejQgPSB6NCAqIC0wLjM5MDE4MDY0NDsKLQk7IHozICs9IHo1OyAgejQgKz0gejU7Ci0JOwotCTsgKFRoaXMgaW1wbGVtZW50YXRpb24pCi0JOyB6MyA9IHozICogKDEuMTc1ODc1NjAyIC0gMS45NjE1NzA1NjApICsgejQgKiAxLjE3NTg3NTYwMjsKLQk7IHo0ID0gejMgKiAxLjE3NTg3NTYwMiArIHo0ICogKDEuMTc1ODc1NjAyIC0gMC4zOTAxODA2NDQpOworICAgICAgICA7IChPcmlnaW5hbCkKKyAgICAgICAgOyB6NSA9ICh6MyArIHo0KSAqIDEuMTc1ODc1NjAyOworICAgICAgICA7IHozID0gejMgKiAtMS45NjE1NzA1NjA7ICB6NCA9IHo0ICogLTAuMzkwMTgwNjQ0OworICAgICAgICA7IHozICs9IHo1OyAgejQgKz0gejU7CisgICAgICAgIDsKKyAgICAgICAgOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKyAgICAgICAgOyB6MyA9IHozICogKDEuMTc1ODc1NjAyIC0gMS45NjE1NzA1NjApICsgejQgKiAxLjE3NTg3NTYwMjsKKyAgICAgICAgOyB6NCA9IHozICogMS4xNzU4NzU2MDIgKyB6NCAqICgxLjE3NTg3NTYwMiAtIDAuMzkwMTgwNjQ0KTsKIAotCW1vdmRxYSAgICB4bW0wLHhtbTUKLQltb3ZkcWEgICAgeG1tNyx4bW01Ci0JcHVucGNrbHdkIHhtbTAseG1tNAotCXB1bnBja2h3ZCB4bW03LHhtbTQKLQltb3ZkcWEgICAgeG1tNSx4bW0wCi0JbW92ZHFhICAgIHhtbTQseG1tNwotCXBtYWRkd2QgICB4bW0wLFtyZWwgUFdfTUYwNzhfRjExN10JOyB4bW0wPXozTAotCXBtYWRkd2QgICB4bW03LFtyZWwgUFdfTUYwNzhfRjExN10JOyB4bW03PXozSAotCXBtYWRkd2QgICB4bW01LFtyZWwgUFdfRjExN19GMDc4XQk7IHhtbTU9ejRMCi0JcG1hZGR3ZCAgIHhtbTQsW3JlbCBQV19GMTE3X0YwNzhdCTsgeG1tND16NEgKKyAgICAgICAgbW92ZHFhICAgIHhtbTAseG1tNQorICAgICAgICBtb3ZkcWEgICAgeG1tNyx4bW01CisgICAgICAgIHB1bnBja2x3ZCB4bW0wLHhtbTQKKyAgICAgICAgcHVucGNraHdkIHhtbTcseG1tNAorICAgICAgICBtb3ZkcWEgICAgeG1tNSx4bW0wCisgICAgICAgIG1vdmRxYSAgICB4bW00LHhtbTcKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTAsW3JlbCBQV19NRjA3OF9GMTE3XSAgICAgIDsgeG1tMD16M0wKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTcsW3JlbCBQV19NRjA3OF9GMTE3XSAgICAgIDsgeG1tNz16M0gKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTUsW3JlbCBQV19GMTE3X0YwNzhdICAgICAgIDsgeG1tNT16NEwKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTQsW3JlbCBQV19GMTE3X0YwNzhdICAgICAgIDsgeG1tND16NEgKIAotCW1vdmRxYQlYTU1XT1JEIFt3aygxMCldLCB4bW0wCTsgd2soMTApPXozTAotCW1vdmRxYQlYTU1XT1JEIFt3aygxMSldLCB4bW03CTsgd2soMTEpPXozSAorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDEwKV0sIHhtbTAgIDsgd2soMTApPXozTAorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDExKV0sIHhtbTcgIDsgd2soMTEpPXozSAogCi0JOyAoT3JpZ2luYWwpCi0JOyB6MSA9IHRtcDAgKyB0bXAzOyAgejIgPSB0bXAxICsgdG1wMjsKLQk7IHRtcDAgPSB0bXAwICogMC4yOTg2MzEzMzY7ICB0bXAxID0gdG1wMSAqIDIuMDUzMTE5ODY5OwotCTsgdG1wMiA9IHRtcDIgKiAzLjA3MjcxMTAyNjsgIHRtcDMgPSB0bXAzICogMS41MDEzMjExMTA7Ci0JOyB6MSA9IHoxICogLTAuODk5OTc2MjIzOyAgejIgPSB6MiAqIC0yLjU2MjkxNTQ0NzsKLQk7IHRtcDAgKz0gejEgKyB6MzsgIHRtcDEgKz0gejIgKyB6NDsKLQk7IHRtcDIgKz0gejIgKyB6MzsgIHRtcDMgKz0gejEgKyB6NDsKLQk7Ci0JOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKLQk7IHRtcDAgPSB0bXAwICogKDAuMjk4NjMxMzM2IC0gMC44OTk5NzYyMjMpICsgdG1wMyAqIC0wLjg5OTk3NjIyMzsKLQk7IHRtcDEgPSB0bXAxICogKDIuMDUzMTE5ODY5IC0gMi41NjI5MTU0NDcpICsgdG1wMiAqIC0yLjU2MjkxNTQ0NzsKLQk7IHRtcDIgPSB0bXAxICogLTIuNTYyOTE1NDQ3ICsgdG1wMiAqICgzLjA3MjcxMTAyNiAtIDIuNTYyOTE1NDQ3KTsKLQk7IHRtcDMgPSB0bXAwICogLTAuODk5OTc2MjIzICsgdG1wMyAqICgxLjUwMTMyMTExMCAtIDAuODk5OTc2MjIzKTsKLQk7IHRtcDAgKz0gejM7ICB0bXAxICs9IHo0OwotCTsgdG1wMiArPSB6MzsgIHRtcDMgKz0gejQ7CisgICAgICAgIDsgKE9yaWdpbmFsKQorICAgICAgICA7IHoxID0gdG1wMCArIHRtcDM7ICB6MiA9IHRtcDEgKyB0bXAyOworICAgICAgICA7IHRtcDAgPSB0bXAwICogMC4yOTg2MzEzMzY7ICB0bXAxID0gdG1wMSAqIDIuMDUzMTE5ODY5OworICAgICAgICA7IHRtcDIgPSB0bXAyICogMy4wNzI3MTEwMjY7ICB0bXAzID0gdG1wMyAqIDEuNTAxMzIxMTEwOworICAgICAgICA7IHoxID0gejEgKiAtMC44OTk5NzYyMjM7ICB6MiA9IHoyICogLTIuNTYyOTE1NDQ3OworICAgICAgICA7IHRtcDAgKz0gejEgKyB6MzsgIHRtcDEgKz0gejIgKyB6NDsKKyAgICAgICAgOyB0bXAyICs9IHoyICsgejM7ICB0bXAzICs9IHoxICsgejQ7CisgICAgICAgIDsKKyAgICAgICAgOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKyAgICAgICAgOyB0bXAwID0gdG1wMCAqICgwLjI5ODYzMTMzNiAtIDAuODk5OTc2MjIzKSArIHRtcDMgKiAtMC44OTk5NzYyMjM7CisgICAgICAgIDsgdG1wMSA9IHRtcDEgKiAoMi4wNTMxMTk4NjkgLSAyLjU2MjkxNTQ0NykgKyB0bXAyICogLTIuNTYyOTE1NDQ3OworICAgICAgICA7IHRtcDIgPSB0bXAxICogLTIuNTYyOTE1NDQ3ICsgdG1wMiAqICgzLjA3MjcxMTAyNiAtIDIuNTYyOTE1NDQ3KTsKKyAgICAgICAgOyB0bXAzID0gdG1wMCAqIC0wLjg5OTk3NjIyMyArIHRtcDMgKiAoMS41MDEzMjExMTAgLSAwLjg5OTk3NjIyMyk7CisgICAgICAgIDsgdG1wMCArPSB6MzsgIHRtcDEgKz0gejQ7CisgICAgICAgIDsgdG1wMiArPSB6MzsgIHRtcDMgKz0gejQ7CiAKLQltb3ZkcWEgICAgeG1tMCx4bW0xCi0JbW92ZHFhICAgIHhtbTcseG1tMQotCXB1bnBja2x3ZCB4bW0wLHhtbTMKLQlwdW5wY2tod2QgeG1tNyx4bW0zCi0JbW92ZHFhICAgIHhtbTEseG1tMAotCW1vdmRxYSAgICB4bW0zLHhtbTcKLQlwbWFkZHdkICAgeG1tMCxbcmVsIFBXX01GMDYwX01GMDg5XQk7IHhtbTA9dG1wMEwKLQlwbWFkZHdkICAgeG1tNyxbcmVsIFBXX01GMDYwX01GMDg5XQk7IHhtbTc9dG1wMEgKLQlwbWFkZHdkICAgeG1tMSxbcmVsIFBXX01GMDg5X0YwNjBdCTsgeG1tMT10bXAzTAotCXBtYWRkd2QgICB4bW0zLFtyZWwgUFdfTUYwODlfRjA2MF0JOyB4bW0zPXRtcDNICisgICAgICAgIG1vdmRxYSAgICB4bW0wLHhtbTEKKyAgICAgICAgbW92ZHFhICAgIHhtbTcseG1tMQorICAgICAgICBwdW5wY2tsd2QgeG1tMCx4bW0zCisgICAgICAgIHB1bnBja2h3ZCB4bW03LHhtbTMKKyAgICAgICAgbW92ZHFhICAgIHhtbTEseG1tMAorICAgICAgICBtb3ZkcWEgICAgeG1tMyx4bW03CisgICAgICAgIHBtYWRkd2QgICB4bW0wLFtyZWwgUFdfTUYwNjBfTUYwODldICAgICA7IHhtbTA9dG1wMEwKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTcsW3JlbCBQV19NRjA2MF9NRjA4OV0gICAgIDsgeG1tNz10bXAwSAorICAgICAgICBwbWFkZHdkICAgeG1tMSxbcmVsIFBXX01GMDg5X0YwNjBdICAgICAgOyB4bW0xPXRtcDNMCisgICAgICAgIHBtYWRkd2QgICB4bW0zLFtyZWwgUFdfTUYwODlfRjA2MF0gICAgICA7IHhtbTM9dG1wM0gKIAotCXBhZGRkCXhtbTAsIFhNTVdPUkQgW3drKDEwKV0JOyB4bW0wPXRtcDBMCi0JcGFkZGQJeG1tNywgWE1NV09SRCBbd2soMTEpXQk7IHhtbTc9dG1wMEgKLQlwYWRkZAl4bW0xLHhtbTUJCTsgeG1tMT10bXAzTAotCXBhZGRkCXhtbTMseG1tNAkJOyB4bW0zPXRtcDNICisgICAgICAgIHBhZGRkICAgeG1tMCwgWE1NV09SRCBbd2soMTApXSAgOyB4bW0wPXRtcDBMCisgICAgICAgIHBhZGRkICAgeG1tNywgWE1NV09SRCBbd2soMTEpXSAgOyB4bW03PXRtcDBICisgICAgICAgIHBhZGRkICAgeG1tMSx4bW01ICAgICAgICAgICAgICAgOyB4bW0xPXRtcDNMCisgICAgICAgIHBhZGRkICAgeG1tMyx4bW00ICAgICAgICAgICAgICAgOyB4bW0zPXRtcDNICiAKLQltb3ZkcWEJWE1NV09SRCBbd2soOCldLCB4bW0wCTsgd2soOCk9dG1wMEwKLQltb3ZkcWEJWE1NV09SRCBbd2soOSldLCB4bW03CTsgd2soOSk9dG1wMEgKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3ayg4KV0sIHhtbTAgICA7IHdrKDgpPXRtcDBMCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soOSldLCB4bW03ICAgOyB3ayg5KT10bXAwSAogCi0JbW92ZHFhICAgIHhtbTAseG1tMgotCW1vdmRxYSAgICB4bW03LHhtbTIKLQlwdW5wY2tsd2QgeG1tMCx4bW02Ci0JcHVucGNraHdkIHhtbTcseG1tNgotCW1vdmRxYSAgICB4bW0yLHhtbTAKLQltb3ZkcWEgICAgeG1tNix4bW03Ci0JcG1hZGR3ZCAgIHhtbTAsW3JlbCBQV19NRjA1MF9NRjI1Nl0JOyB4bW0wPXRtcDFMCi0JcG1hZGR3ZCAgIHhtbTcsW3JlbCBQV19NRjA1MF9NRjI1Nl0JOyB4bW03PXRtcDFICi0JcG1hZGR3ZCAgIHhtbTIsW3JlbCBQV19NRjI1Nl9GMDUwXQk7IHhtbTI9dG1wMkwKLQlwbWFkZHdkICAgeG1tNixbcmVsIFBXX01GMjU2X0YwNTBdCTsgeG1tNj10bXAySAorICAgICAgICBtb3ZkcWEgICAgeG1tMCx4bW0yCisgICAgICAgIG1vdmRxYSAgICB4bW03LHhtbTIKKyAgICAgICAgcHVucGNrbHdkIHhtbTAseG1tNgorICAgICAgICBwdW5wY2tod2QgeG1tNyx4bW02CisgICAgICAgIG1vdmRxYSAgICB4bW0yLHhtbTAKKyAgICAgICAgbW92ZHFhICAgIHhtbTYseG1tNworICAgICAgICBwbWFkZHdkICAgeG1tMCxbcmVsIFBXX01GMDUwX01GMjU2XSAgICAgOyB4bW0wPXRtcDFMCisgICAgICAgIHBtYWRkd2QgICB4bW03LFtyZWwgUFdfTUYwNTBfTUYyNTZdICAgICA7IHhtbTc9dG1wMUgKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTIsW3JlbCBQV19NRjI1Nl9GMDUwXSAgICAgIDsgeG1tMj10bXAyTAorICAgICAgICBwbWFkZHdkICAgeG1tNixbcmVsIFBXX01GMjU2X0YwNTBdICAgICAgOyB4bW02PXRtcDJICiAKLQlwYWRkZAl4bW0wLHhtbTUJCTsgeG1tMD10bXAxTAotCXBhZGRkCXhtbTcseG1tNAkJOyB4bW03PXRtcDFICi0JcGFkZGQJeG1tMiwgWE1NV09SRCBbd2soMTApXQk7IHhtbTI9dG1wMkwKLQlwYWRkZAl4bW02LCBYTU1XT1JEIFt3aygxMSldCTsgeG1tNj10bXAySAorICAgICAgICBwYWRkZCAgIHhtbTAseG1tNSAgICAgICAgICAgICAgIDsgeG1tMD10bXAxTAorICAgICAgICBwYWRkZCAgIHhtbTcseG1tNCAgICAgICAgICAgICAgIDsgeG1tNz10bXAxSAorICAgICAgICBwYWRkZCAgIHhtbTIsIFhNTVdPUkQgW3drKDEwKV0gIDsgeG1tMj10bXAyTAorICAgICAgICBwYWRkZCAgIHhtbTYsIFhNTVdPUkQgW3drKDExKV0gIDsgeG1tNj10bXAySAogCi0JbW92ZHFhCVhNTVdPUkQgW3drKDEwKV0sIHhtbTAJOyB3aygxMCk9dG1wMUwKLQltb3ZkcWEJWE1NV09SRCBbd2soMTEpXSwgeG1tNwk7IHdrKDExKT10bXAxSAorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDEwKV0sIHhtbTAgIDsgd2soMTApPXRtcDFMCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMTEpXSwgeG1tNyAgOyB3aygxMSk9dG1wMUgKIAotCTsgLS0gRmluYWwgb3V0cHV0IHN0YWdlCisgICAgICAgIDsgLS0gRmluYWwgb3V0cHV0IHN0YWdlCiAKLQltb3ZkcWEJeG1tNSwgWE1NV09SRCBbd2soMCldCTsgeG1tNT10bXAxMEwKLQltb3ZkcWEJeG1tNCwgWE1NV09SRCBbd2soMSldCTsgeG1tND10bXAxMEgKKyAgICAgICAgbW92ZHFhICB4bW01LCBYTU1XT1JEIFt3aygwKV0gICA7IHhtbTU9dG1wMTBMCisgICAgICAgIG1vdmRxYSAgeG1tNCwgWE1NV09SRCBbd2soMSldICAgOyB4bW00PXRtcDEwSAogCi0JbW92ZHFhCXhtbTAseG1tNQotCW1vdmRxYQl4bW03LHhtbTQKLQlwYWRkZAl4bW01LHhtbTEJCTsgeG1tNT1kYXRhMEwKLQlwYWRkZAl4bW00LHhtbTMJCTsgeG1tND1kYXRhMEgKLQlwc3ViZAl4bW0wLHhtbTEJCTsgeG1tMD1kYXRhN0wKLQlwc3ViZAl4bW03LHhtbTMJCTsgeG1tNz1kYXRhN0gKKyAgICAgICAgbW92ZHFhICB4bW0wLHhtbTUKKyAgICAgICAgbW92ZHFhICB4bW03LHhtbTQKKyAgICAgICAgcGFkZGQgICB4bW01LHhtbTEgICAgICAgICAgICAgICA7IHhtbTU9ZGF0YTBMCisgICAgICAgIHBhZGRkICAgeG1tNCx4bW0zICAgICAgICAgICAgICAgOyB4bW00PWRhdGEwSAorICAgICAgICBwc3ViZCAgIHhtbTAseG1tMSAgICAgICAgICAgICAgIDsgeG1tMD1kYXRhN0wKKyAgICAgICAgcHN1YmQgICB4bW03LHhtbTMgICAgICAgICAgICAgICA7IHhtbTc9ZGF0YTdICiAKLQltb3ZkcWEJeG1tMSxbcmVsIFBEX0RFU0NBTEVfUDJdCTsgeG1tMT1bcmVsIFBEX0RFU0NBTEVfUDJdCisgICAgICAgIG1vdmRxYSAgeG1tMSxbcmVsIFBEX0RFU0NBTEVfUDJdICAgICAgICA7IHhtbTE9W3JlbCBQRF9ERVNDQUxFX1AyXQogCi0JcGFkZGQJeG1tNSx4bW0xCi0JcGFkZGQJeG1tNCx4bW0xCi0JcHNyYWQJeG1tNSxERVNDQUxFX1AyCi0JcHNyYWQJeG1tNCxERVNDQUxFX1AyCi0JcGFkZGQJeG1tMCx4bW0xCi0JcGFkZGQJeG1tNyx4bW0xCi0JcHNyYWQJeG1tMCxERVNDQUxFX1AyCi0JcHNyYWQJeG1tNyxERVNDQUxFX1AyCisgICAgICAgIHBhZGRkICAgeG1tNSx4bW0xCisgICAgICAgIHBhZGRkICAgeG1tNCx4bW0xCisgICAgICAgIHBzcmFkICAgeG1tNSxERVNDQUxFX1AyCisgICAgICAgIHBzcmFkICAgeG1tNCxERVNDQUxFX1AyCisgICAgICAgIHBhZGRkICAgeG1tMCx4bW0xCisgICAgICAgIHBhZGRkICAgeG1tNyx4bW0xCisgICAgICAgIHBzcmFkICAgeG1tMCxERVNDQUxFX1AyCisgICAgICAgIHBzcmFkICAgeG1tNyxERVNDQUxFX1AyCiAKLQlwYWNrc3NkdyAgeG1tNSx4bW00CQk7IHhtbTU9ZGF0YTA9KDAwIDEwIDIwIDMwIDQwIDUwIDYwIDcwKQotCXBhY2tzc2R3ICB4bW0wLHhtbTcJCTsgeG1tMD1kYXRhNz0oMDcgMTcgMjcgMzcgNDcgNTcgNjcgNzcpCisgICAgICAgIHBhY2tzc2R3ICB4bW01LHhtbTQgICAgICAgICAgICAgOyB4bW01PWRhdGEwPSgwMCAxMCAyMCAzMCA0MCA1MCA2MCA3MCkKKyAgICAgICAgcGFja3NzZHcgIHhtbTAseG1tNyAgICAgICAgICAgICA7IHhtbTA9ZGF0YTc9KDA3IDE3IDI3IDM3IDQ3IDU3IDY3IDc3KQogCi0JbW92ZHFhCXhtbTMsIFhNTVdPUkQgW3drKDQpXQk7IHhtbTM9dG1wMTFMCi0JbW92ZHFhCXhtbTEsIFhNTVdPUkQgW3drKDUpXQk7IHhtbTE9dG1wMTFICisgICAgICAgIG1vdmRxYSAgeG1tMywgWE1NV09SRCBbd2soNCldICAgOyB4bW0zPXRtcDExTAorICAgICAgICBtb3ZkcWEgIHhtbTEsIFhNTVdPUkQgW3drKDUpXSAgIDsgeG1tMT10bXAxMUgKIAotCW1vdmRxYQl4bW00LHhtbTMKLQltb3ZkcWEJeG1tNyx4bW0xCi0JcGFkZGQJeG1tMyx4bW0yCQk7IHhtbTM9ZGF0YTFMCi0JcGFkZGQJeG1tMSx4bW02CQk7IHhtbTE9ZGF0YTFICi0JcHN1YmQJeG1tNCx4bW0yCQk7IHhtbTQ9ZGF0YTZMCi0JcHN1YmQJeG1tNyx4bW02CQk7IHhtbTc9ZGF0YTZICisgICAgICAgIG1vdmRxYSAgeG1tNCx4bW0zCisgICAgICAgIG1vdmRxYSAgeG1tNyx4bW0xCisgICAgICAgIHBhZGRkICAgeG1tMyx4bW0yICAgICAgICAgICAgICAgOyB4bW0zPWRhdGExTAorICAgICAgICBwYWRkZCAgIHhtbTEseG1tNiAgICAgICAgICAgICAgIDsgeG1tMT1kYXRhMUgKKyAgICAgICAgcHN1YmQgICB4bW00LHhtbTIgICAgICAgICAgICAgICA7IHhtbTQ9ZGF0YTZMCisgICAgICAgIHBzdWJkICAgeG1tNyx4bW02ICAgICAgICAgICAgICAgOyB4bW03PWRhdGE2SAogCi0JbW92ZHFhCXhtbTIsW3JlbCBQRF9ERVNDQUxFX1AyXQk7IHhtbTI9W3JlbCBQRF9ERVNDQUxFX1AyXQorICAgICAgICBtb3ZkcWEgIHhtbTIsW3JlbCBQRF9ERVNDQUxFX1AyXSAgICAgICAgOyB4bW0yPVtyZWwgUERfREVTQ0FMRV9QMl0KIAotCXBhZGRkCXhtbTMseG1tMgotCXBhZGRkCXhtbTEseG1tMgotCXBzcmFkCXhtbTMsREVTQ0FMRV9QMgotCXBzcmFkCXhtbTEsREVTQ0FMRV9QMgotCXBhZGRkCXhtbTQseG1tMgotCXBhZGRkCXhtbTcseG1tMgotCXBzcmFkCXhtbTQsREVTQ0FMRV9QMgotCXBzcmFkCXhtbTcsREVTQ0FMRV9QMgorICAgICAgICBwYWRkZCAgIHhtbTMseG1tMgorICAgICAgICBwYWRkZCAgIHhtbTEseG1tMgorICAgICAgICBwc3JhZCAgIHhtbTMsREVTQ0FMRV9QMgorICAgICAgICBwc3JhZCAgIHhtbTEsREVTQ0FMRV9QMgorICAgICAgICBwYWRkZCAgIHhtbTQseG1tMgorICAgICAgICBwYWRkZCAgIHhtbTcseG1tMgorICAgICAgICBwc3JhZCAgIHhtbTQsREVTQ0FMRV9QMgorICAgICAgICBwc3JhZCAgIHhtbTcsREVTQ0FMRV9QMgogCi0JcGFja3NzZHcgIHhtbTMseG1tMQkJOyB4bW0zPWRhdGExPSgwMSAxMSAyMSAzMSA0MSA1MSA2MSA3MSkKLQlwYWNrc3NkdyAgeG1tNCx4bW03CQk7IHhtbTQ9ZGF0YTY9KDA2IDE2IDI2IDM2IDQ2IDU2IDY2IDc2KQorICAgICAgICBwYWNrc3NkdyAgeG1tMyx4bW0xICAgICAgICAgICAgIDsgeG1tMz1kYXRhMT0oMDEgMTEgMjEgMzEgNDEgNTEgNjEgNzEpCisgICAgICAgIHBhY2tzc2R3ICB4bW00LHhtbTcgICAgICAgICAgICAgOyB4bW00PWRhdGE2PSgwNiAxNiAyNiAzNiA0NiA1NiA2NiA3NikKIAotCXBhY2tzc3diICB4bW01LHhtbTQJCTsgeG1tNT0oMDAgMTAgMjAgMzAgNDAgNTAgNjAgNzAgMDYgMTYgMjYgMzYgNDYgNTYgNjYgNzYpCi0JcGFja3Nzd2IgIHhtbTMseG1tMAkJOyB4bW0zPSgwMSAxMSAyMSAzMSA0MSA1MSA2MSA3MSAwNyAxNyAyNyAzNyA0NyA1NyA2NyA3NykKKyAgICAgICAgcGFja3Nzd2IgIHhtbTUseG1tNCAgICAgICAgICAgICA7IHhtbTU9KDAwIDEwIDIwIDMwIDQwIDUwIDYwIDcwIDA2IDE2IDI2IDM2IDQ2IDU2IDY2IDc2KQorICAgICAgICBwYWNrc3N3YiAgeG1tMyx4bW0wICAgICAgICAgICAgIDsgeG1tMz0oMDEgMTEgMjEgMzEgNDEgNTEgNjEgNzEgMDcgMTcgMjcgMzcgNDcgNTcgNjcgNzcpCiAKLQltb3ZkcWEJeG1tNiwgWE1NV09SRCBbd2soNildCTsgeG1tNj10bXAxMkwKLQltb3ZkcWEJeG1tMiwgWE1NV09SRCBbd2soNyldCTsgeG1tMj10bXAxMkgKLQltb3ZkcWEJeG1tMSwgWE1NV09SRCBbd2soMTApXQk7IHhtbTE9dG1wMUwKLQltb3ZkcWEJeG1tNywgWE1NV09SRCBbd2soMTEpXQk7IHhtbTc9dG1wMUgKKyAgICAgICAgbW92ZHFhICB4bW02LCBYTU1XT1JEIFt3ayg2KV0gICA7IHhtbTY9dG1wMTJMCisgICAgICAgIG1vdmRxYSAgeG1tMiwgWE1NV09SRCBbd2soNyldICAgOyB4bW0yPXRtcDEySAorICAgICAgICBtb3ZkcWEgIHhtbTEsIFhNTVdPUkQgW3drKDEwKV0gIDsgeG1tMT10bXAxTAorICAgICAgICBtb3ZkcWEgIHhtbTcsIFhNTVdPUkQgW3drKDExKV0gIDsgeG1tNz10bXAxSAogCi0JbW92ZHFhCVhNTVdPUkQgW3drKDApXSwgeG1tNQk7IHdrKDApPSgwMCAxMCAyMCAzMCA0MCA1MCA2MCA3MCAwNiAxNiAyNiAzNiA0NiA1NiA2NiA3NikKLQltb3ZkcWEJWE1NV09SRCBbd2soMSldLCB4bW0zCTsgd2soMSk9KDAxIDExIDIxIDMxIDQxIDUxIDYxIDcxIDA3IDE3IDI3IDM3IDQ3IDU3IDY3IDc3KQorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDApXSwgeG1tNSAgIDsgd2soMCk9KDAwIDEwIDIwIDMwIDQwIDUwIDYwIDcwIDA2IDE2IDI2IDM2IDQ2IDU2IDY2IDc2KQorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDEpXSwgeG1tMyAgIDsgd2soMSk9KDAxIDExIDIxIDMxIDQxIDUxIDYxIDcxIDA3IDE3IDI3IDM3IDQ3IDU3IDY3IDc3KQogCi0JbW92ZHFhCXhtbTQseG1tNgotCW1vdmRxYQl4bW0wLHhtbTIKLQlwYWRkZAl4bW02LHhtbTEJCTsgeG1tNj1kYXRhMkwKLQlwYWRkZAl4bW0yLHhtbTcJCTsgeG1tMj1kYXRhMkgKLQlwc3ViZAl4bW00LHhtbTEJCTsgeG1tND1kYXRhNUwKLQlwc3ViZAl4bW0wLHhtbTcJCTsgeG1tMD1kYXRhNUgKKyAgICAgICAgbW92ZHFhICB4bW00LHhtbTYKKyAgICAgICAgbW92ZHFhICB4bW0wLHhtbTIKKyAgICAgICAgcGFkZGQgICB4bW02LHhtbTEgICAgICAgICAgICAgICA7IHhtbTY9ZGF0YTJMCisgICAgICAgIHBhZGRkICAgeG1tMix4bW03ICAgICAgICAgICAgICAgOyB4bW0yPWRhdGEySAorICAgICAgICBwc3ViZCAgIHhtbTQseG1tMSAgICAgICAgICAgICAgIDsgeG1tND1kYXRhNUwKKyAgICAgICAgcHN1YmQgICB4bW0wLHhtbTcgICAgICAgICAgICAgICA7IHhtbTA9ZGF0YTVICiAKLQltb3ZkcWEJeG1tNSxbcmVsIFBEX0RFU0NBTEVfUDJdCTsgeG1tNT1bcmVsIFBEX0RFU0NBTEVfUDJdCisgICAgICAgIG1vdmRxYSAgeG1tNSxbcmVsIFBEX0RFU0NBTEVfUDJdICAgICAgICA7IHhtbTU9W3JlbCBQRF9ERVNDQUxFX1AyXQogCi0JcGFkZGQJeG1tNix4bW01Ci0JcGFkZGQJeG1tMix4bW01Ci0JcHNyYWQJeG1tNixERVNDQUxFX1AyCi0JcHNyYWQJeG1tMixERVNDQUxFX1AyCi0JcGFkZGQJeG1tNCx4bW01Ci0JcGFkZGQJeG1tMCx4bW01Ci0JcHNyYWQJeG1tNCxERVNDQUxFX1AyCi0JcHNyYWQJeG1tMCxERVNDQUxFX1AyCisgICAgICAgIHBhZGRkICAgeG1tNix4bW01CisgICAgICAgIHBhZGRkICAgeG1tMix4bW01CisgICAgICAgIHBzcmFkICAgeG1tNixERVNDQUxFX1AyCisgICAgICAgIHBzcmFkICAgeG1tMixERVNDQUxFX1AyCisgICAgICAgIHBhZGRkICAgeG1tNCx4bW01CisgICAgICAgIHBhZGRkICAgeG1tMCx4bW01CisgICAgICAgIHBzcmFkICAgeG1tNCxERVNDQUxFX1AyCisgICAgICAgIHBzcmFkICAgeG1tMCxERVNDQUxFX1AyCiAKLQlwYWNrc3NkdyAgeG1tNix4bW0yCQk7IHhtbTY9ZGF0YTI9KDAyIDEyIDIyIDMyIDQyIDUyIDYyIDcyKQotCXBhY2tzc2R3ICB4bW00LHhtbTAJCTsgeG1tND1kYXRhNT0oMDUgMTUgMjUgMzUgNDUgNTUgNjUgNzUpCisgICAgICAgIHBhY2tzc2R3ICB4bW02LHhtbTIgICAgICAgICAgICAgOyB4bW02PWRhdGEyPSgwMiAxMiAyMiAzMiA0MiA1MiA2MiA3MikKKyAgICAgICAgcGFja3NzZHcgIHhtbTQseG1tMCAgICAgICAgICAgICA7IHhtbTQ9ZGF0YTU9KDA1IDE1IDI1IDM1IDQ1IDU1IDY1IDc1KQogCi0JbW92ZHFhCXhtbTMsIFhNTVdPUkQgW3drKDIpXQk7IHhtbTM9dG1wMTNMCi0JbW92ZHFhCXhtbTEsIFhNTVdPUkQgW3drKDMpXQk7IHhtbTE9dG1wMTNICi0JbW92ZHFhCXhtbTcsIFhNTVdPUkQgW3drKDgpXQk7IHhtbTc9dG1wMEwKLQltb3ZkcWEJeG1tNSwgWE1NV09SRCBbd2soOSldCTsgeG1tNT10bXAwSAorICAgICAgICBtb3ZkcWEgIHhtbTMsIFhNTVdPUkQgW3drKDIpXSAgIDsgeG1tMz10bXAxM0wKKyAgICAgICAgbW92ZHFhICB4bW0xLCBYTU1XT1JEIFt3aygzKV0gICA7IHhtbTE9dG1wMTNICisgICAgICAgIG1vdmRxYSAgeG1tNywgWE1NV09SRCBbd2soOCldICAgOyB4bW03PXRtcDBMCisgICAgICAgIG1vdmRxYSAgeG1tNSwgWE1NV09SRCBbd2soOSldICAgOyB4bW01PXRtcDBICiAKLQltb3ZkcWEJeG1tMix4bW0zCi0JbW92ZHFhCXhtbTAseG1tMQotCXBhZGRkCXhtbTMseG1tNwkJOyB4bW0zPWRhdGEzTAotCXBhZGRkCXhtbTEseG1tNQkJOyB4bW0xPWRhdGEzSAotCXBzdWJkCXhtbTIseG1tNwkJOyB4bW0yPWRhdGE0TAotCXBzdWJkCXhtbTAseG1tNQkJOyB4bW0wPWRhdGE0SAorICAgICAgICBtb3ZkcWEgIHhtbTIseG1tMworICAgICAgICBtb3ZkcWEgIHhtbTAseG1tMQorICAgICAgICBwYWRkZCAgIHhtbTMseG1tNyAgICAgICAgICAgICAgIDsgeG1tMz1kYXRhM0wKKyAgICAgICAgcGFkZGQgICB4bW0xLHhtbTUgICAgICAgICAgICAgICA7IHhtbTE9ZGF0YTNICisgICAgICAgIHBzdWJkICAgeG1tMix4bW03ICAgICAgICAgICAgICAgOyB4bW0yPWRhdGE0TAorICAgICAgICBwc3ViZCAgIHhtbTAseG1tNSAgICAgICAgICAgICAgIDsgeG1tMD1kYXRhNEgKIAotCW1vdmRxYQl4bW03LFtyZWwgUERfREVTQ0FMRV9QMl0JOyB4bW03PVtyZWwgUERfREVTQ0FMRV9QMl0KKyAgICAgICAgbW92ZHFhICB4bW03LFtyZWwgUERfREVTQ0FMRV9QMl0gICAgICAgIDsgeG1tNz1bcmVsIFBEX0RFU0NBTEVfUDJdCiAKLQlwYWRkZAl4bW0zLHhtbTcKLQlwYWRkZAl4bW0xLHhtbTcKLQlwc3JhZAl4bW0zLERFU0NBTEVfUDIKLQlwc3JhZAl4bW0xLERFU0NBTEVfUDIKLQlwYWRkZAl4bW0yLHhtbTcKLQlwYWRkZAl4bW0wLHhtbTcKLQlwc3JhZAl4bW0yLERFU0NBTEVfUDIKLQlwc3JhZAl4bW0wLERFU0NBTEVfUDIKKyAgICAgICAgcGFkZGQgICB4bW0zLHhtbTcKKyAgICAgICAgcGFkZGQgICB4bW0xLHhtbTcKKyAgICAgICAgcHNyYWQgICB4bW0zLERFU0NBTEVfUDIKKyAgICAgICAgcHNyYWQgICB4bW0xLERFU0NBTEVfUDIKKyAgICAgICAgcGFkZGQgICB4bW0yLHhtbTcKKyAgICAgICAgcGFkZGQgICB4bW0wLHhtbTcKKyAgICAgICAgcHNyYWQgICB4bW0yLERFU0NBTEVfUDIKKyAgICAgICAgcHNyYWQgICB4bW0wLERFU0NBTEVfUDIKIAotCW1vdmRxYSAgICB4bW01LFtyZWwgUEJfQ0VOVEVSSlNBTVBdCTsgeG1tNT1bcmVsIFBCX0NFTlRFUkpTQU1QXQorICAgICAgICBtb3ZkcWEgICAgeG1tNSxbcmVsIFBCX0NFTlRFUkpTQU1QXSAgICAgOyB4bW01PVtyZWwgUEJfQ0VOVEVSSlNBTVBdCiAKLQlwYWNrc3NkdyAgeG1tMyx4bW0xCQk7IHhtbTM9ZGF0YTM9KDAzIDEzIDIzIDMzIDQzIDUzIDYzIDczKQotCXBhY2tzc2R3ICB4bW0yLHhtbTAJCTsgeG1tMj1kYXRhND0oMDQgMTQgMjQgMzQgNDQgNTQgNjQgNzQpCisgICAgICAgIHBhY2tzc2R3ICB4bW0zLHhtbTEgICAgICAgICAgICAgOyB4bW0zPWRhdGEzPSgwMyAxMyAyMyAzMyA0MyA1MyA2MyA3MykKKyAgICAgICAgcGFja3NzZHcgIHhtbTIseG1tMCAgICAgICAgICAgICA7IHhtbTI9ZGF0YTQ9KDA0IDE0IDI0IDM0IDQ0IDU0IDY0IDc0KQogCi0JbW92ZHFhICAgIHhtbTcsIFhNTVdPUkQgW3drKDApXQk7IHhtbTc9KDAwIDEwIDIwIDMwIDQwIDUwIDYwIDcwIDA2IDE2IDI2IDM2IDQ2IDU2IDY2IDc2KQotCW1vdmRxYSAgICB4bW0xLCBYTU1XT1JEIFt3aygxKV0JOyB4bW0xPSgwMSAxMSAyMSAzMSA0MSA1MSA2MSA3MSAwNyAxNyAyNyAzNyA0NyA1NyA2NyA3NykKKyAgICAgICAgbW92ZHFhICAgIHhtbTcsIFhNTVdPUkQgW3drKDApXSA7IHhtbTc9KDAwIDEwIDIwIDMwIDQwIDUwIDYwIDcwIDA2IDE2IDI2IDM2IDQ2IDU2IDY2IDc2KQorICAgICAgICBtb3ZkcWEgICAgeG1tMSwgWE1NV09SRCBbd2soMSldIDsgeG1tMT0oMDEgMTEgMjEgMzEgNDEgNTEgNjEgNzEgMDcgMTcgMjcgMzcgNDcgNTcgNjcgNzcpCiAKLQlwYWNrc3N3YiAgeG1tNix4bW0yCQk7IHhtbTY9KDAyIDEyIDIyIDMyIDQyIDUyIDYyIDcyIDA0IDE0IDI0IDM0IDQ0IDU0IDY0IDc0KQotCXBhY2tzc3diICB4bW0zLHhtbTQJCTsgeG1tMz0oMDMgMTMgMjMgMzMgNDMgNTMgNjMgNzMgMDUgMTUgMjUgMzUgNDUgNTUgNjUgNzUpCisgICAgICAgIHBhY2tzc3diICB4bW02LHhtbTIgICAgICAgICAgICAgOyB4bW02PSgwMiAxMiAyMiAzMiA0MiA1MiA2MiA3MiAwNCAxNCAyNCAzNCA0NCA1NCA2NCA3NCkKKyAgICAgICAgcGFja3Nzd2IgIHhtbTMseG1tNCAgICAgICAgICAgICA7IHhtbTM9KDAzIDEzIDIzIDMzIDQzIDUzIDYzIDczIDA1IDE1IDI1IDM1IDQ1IDU1IDY1IDc1KQogCi0JcGFkZGIgICAgIHhtbTcseG1tNQotCXBhZGRiICAgICB4bW0xLHhtbTUKLQlwYWRkYiAgICAgeG1tNix4bW01Ci0JcGFkZGIgICAgIHhtbTMseG1tNQorICAgICAgICBwYWRkYiAgICAgeG1tNyx4bW01CisgICAgICAgIHBhZGRiICAgICB4bW0xLHhtbTUKKyAgICAgICAgcGFkZGIgICAgIHhtbTYseG1tNQorICAgICAgICBwYWRkYiAgICAgeG1tMyx4bW01CiAKLQltb3ZkcWEgICAgeG1tMCx4bW03CTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQotCXB1bnBja2xidyB4bW03LHhtbTEJOyB4bW03PSgwMCAwMSAxMCAxMSAyMCAyMSAzMCAzMSA0MCA0MSA1MCA1MSA2MCA2MSA3MCA3MSkKLQlwdW5wY2toYncgeG1tMCx4bW0xCTsgeG1tMD0oMDYgMDcgMTYgMTcgMjYgMjcgMzYgMzcgNDYgNDcgNTYgNTcgNjYgNjcgNzYgNzcpCi0JbW92ZHFhICAgIHhtbTIseG1tNgk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKLQlwdW5wY2tsYncgeG1tNix4bW0zCTsgeG1tNj0oMDIgMDMgMTIgMTMgMjIgMjMgMzIgMzMgNDIgNDMgNTIgNTMgNjIgNjMgNzIgNzMpCi0JcHVucGNraGJ3IHhtbTIseG1tMwk7IHhtbTI9KDA0IDA1IDE0IDE1IDI0IDI1IDM0IDM1IDQ0IDQ1IDU0IDU1IDY0IDY1IDc0IDc1KQorICAgICAgICBtb3ZkcWEgICAgeG1tMCx4bW03ICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICAgICAgcHVucGNrbGJ3IHhtbTcseG1tMSAgICAgOyB4bW03PSgwMCAwMSAxMCAxMSAyMCAyMSAzMCAzMSA0MCA0MSA1MCA1MSA2MCA2MSA3MCA3MSkKKyAgICAgICAgcHVucGNraGJ3IHhtbTAseG1tMSAgICAgOyB4bW0wPSgwNiAwNyAxNiAxNyAyNiAyNyAzNiAzNyA0NiA0NyA1NiA1NyA2NiA2NyA3NiA3NykKKyAgICAgICAgbW92ZHFhICAgIHhtbTIseG1tNiAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgICAgIHB1bnBja2xidyB4bW02LHhtbTMgICAgIDsgeG1tNj0oMDIgMDMgMTIgMTMgMjIgMjMgMzIgMzMgNDIgNDMgNTIgNTMgNjIgNjMgNzIgNzMpCisgICAgICAgIHB1bnBja2hidyB4bW0yLHhtbTMgICAgIDsgeG1tMj0oMDQgMDUgMTQgMTUgMjQgMjUgMzQgMzUgNDQgNDUgNTQgNTUgNjQgNjUgNzQgNzUpCiAKLQltb3ZkcWEgICAgeG1tNCx4bW03CTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQotCXB1bnBja2x3ZCB4bW03LHhtbTYJOyB4bW03PSgwMCAwMSAwMiAwMyAxMCAxMSAxMiAxMyAyMCAyMSAyMiAyMyAzMCAzMSAzMiAzMykKLQlwdW5wY2tod2QgeG1tNCx4bW02CTsgeG1tND0oNDAgNDEgNDIgNDMgNTAgNTEgNTIgNTMgNjAgNjEgNjIgNjMgNzAgNzEgNzIgNzMpCi0JbW92ZHFhICAgIHhtbTUseG1tMgk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKLQlwdW5wY2tsd2QgeG1tMix4bW0wCTsgeG1tMj0oMDQgMDUgMDYgMDcgMTQgMTUgMTYgMTcgMjQgMjUgMjYgMjcgMzQgMzUgMzYgMzcpCi0JcHVucGNraHdkIHhtbTUseG1tMAk7IHhtbTU9KDQ0IDQ1IDQ2IDQ3IDU0IDU1IDU2IDU3IDY0IDY1IDY2IDY3IDc0IDc1IDc2IDc3KQorICAgICAgICBtb3ZkcWEgICAgeG1tNCx4bW03ICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICAgICAgcHVucGNrbHdkIHhtbTcseG1tNiAgICAgOyB4bW03PSgwMCAwMSAwMiAwMyAxMCAxMSAxMiAxMyAyMCAyMSAyMiAyMyAzMCAzMSAzMiAzMykKKyAgICAgICAgcHVucGNraHdkIHhtbTQseG1tNiAgICAgOyB4bW00PSg0MCA0MSA0MiA0MyA1MCA1MSA1MiA1MyA2MCA2MSA2MiA2MyA3MCA3MSA3MiA3MykKKyAgICAgICAgbW92ZHFhICAgIHhtbTUseG1tMiAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgICAgIHB1bnBja2x3ZCB4bW0yLHhtbTAgICAgIDsgeG1tMj0oMDQgMDUgMDYgMDcgMTQgMTUgMTYgMTcgMjQgMjUgMjYgMjcgMzQgMzUgMzYgMzcpCisgICAgICAgIHB1bnBja2h3ZCB4bW01LHhtbTAgICAgIDsgeG1tNT0oNDQgNDUgNDYgNDcgNTQgNTUgNTYgNTcgNjQgNjUgNjYgNjcgNzQgNzUgNzYgNzcpCiAKLQltb3ZkcWEgICAgeG1tMSx4bW03CTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQotCXB1bnBja2xkcSB4bW03LHhtbTIJOyB4bW03PSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNyAxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNykKLQlwdW5wY2toZHEgeG1tMSx4bW0yCTsgeG1tMT0oMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcgMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcpCi0JbW92ZHFhICAgIHhtbTMseG1tNAk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKLQlwdW5wY2tsZHEgeG1tNCx4bW01CTsgeG1tND0oNDAgNDEgNDIgNDMgNDQgNDUgNDYgNDcgNTAgNTEgNTIgNTMgNTQgNTUgNTYgNTcpCi0JcHVucGNraGRxIHhtbTMseG1tNQk7IHhtbTM9KDYwIDYxIDYyIDYzIDY0IDY1IDY2IDY3IDcwIDcxIDcyIDczIDc0IDc1IDc2IDc3KQorICAgICAgICBtb3ZkcWEgICAgeG1tMSx4bW03ICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKyAgICAgICAgcHVucGNrbGRxIHhtbTcseG1tMiAgICAgOyB4bW03PSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNyAxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNykKKyAgICAgICAgcHVucGNraGRxIHhtbTEseG1tMiAgICAgOyB4bW0xPSgyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNyAzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNykKKyAgICAgICAgbW92ZHFhICAgIHhtbTMseG1tNCAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisgICAgICAgIHB1bnBja2xkcSB4bW00LHhtbTUgICAgIDsgeG1tND0oNDAgNDEgNDIgNDMgNDQgNDUgNDYgNDcgNTAgNTEgNTIgNTMgNTQgNTUgNTYgNTcpCisgICAgICAgIHB1bnBja2hkcSB4bW0zLHhtbTUgICAgIDsgeG1tMz0oNjAgNjEgNjIgNjMgNjQgNjUgNjYgNjcgNzAgNzEgNzIgNzMgNzQgNzUgNzYgNzcpCiAKLQlwc2h1ZmQJeG1tNix4bW03LDB4NEUJOyB4bW02PSgxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNyAwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNykKLQlwc2h1ZmQJeG1tMCx4bW0xLDB4NEUJOyB4bW0wPSgzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNyAyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNykKLQlwc2h1ZmQJeG1tMix4bW00LDB4NEUJOyB4bW0yPSg1MCA1MSA1MiA1MyA1NCA1NSA1NiA1NyA0MCA0MSA0MiA0MyA0NCA0NSA0NiA0NykKLQlwc2h1ZmQJeG1tNSx4bW0zLDB4NEUJOyB4bW01PSg3MCA3MSA3MiA3MyA3NCA3NSA3NiA3NyA2MCA2MSA2MiA2MyA2NCA2NSA2NiA2NykKKyAgICAgICAgcHNodWZkICB4bW02LHhtbTcsMHg0RSAgOyB4bW02PSgxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNyAwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNykKKyAgICAgICAgcHNodWZkICB4bW0wLHhtbTEsMHg0RSAgOyB4bW0wPSgzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNyAyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNykKKyAgICAgICAgcHNodWZkICB4bW0yLHhtbTQsMHg0RSAgOyB4bW0yPSg1MCA1MSA1MiA1MyA1NCA1NSA1NiA1NyA0MCA0MSA0MiA0MyA0NCA0NSA0NiA0NykKKyAgICAgICAgcHNodWZkICB4bW01LHhtbTMsMHg0RSAgOyB4bW01PSg3MCA3MSA3MiA3MyA3NCA3NSA3NiA3NyA2MCA2MSA2MiA2MyA2NCA2NSA2NiA2NykKIAotCW1vdglyZHgsIEpTQU1QUk9XIFtyZGkrMCpTSVpFT0ZfSlNBTVBST1ddCi0JbW92CXJzaSwgSlNBTVBST1cgW3JkaSsyKlNJWkVPRl9KU0FNUFJPV10KLQltb3ZxCVhNTV9NTVdPUkQgW3JkeCtyYXgqU0laRU9GX0pTQU1QTEVdLCB4bW03Ci0JbW92cQlYTU1fTU1XT1JEIFtyc2krcmF4KlNJWkVPRl9KU0FNUExFXSwgeG1tMQotCW1vdglyZHgsIEpTQU1QUk9XIFtyZGkrNCpTSVpFT0ZfSlNBTVBST1ddCi0JbW92CXJzaSwgSlNBTVBST1cgW3JkaSs2KlNJWkVPRl9KU0FNUFJPV10KLQltb3ZxCVhNTV9NTVdPUkQgW3JkeCtyYXgqU0laRU9GX0pTQU1QTEVdLCB4bW00Ci0JbW92cQlYTU1fTU1XT1JEIFtyc2krcmF4KlNJWkVPRl9KU0FNUExFXSwgeG1tMworICAgICAgICBtb3YgICAgIHJkeCwgSlNBTVBST1cgW3JkaSswKlNJWkVPRl9KU0FNUFJPV10KKyAgICAgICAgbW92ICAgICByc2ksIEpTQU1QUk9XIFtyZGkrMipTSVpFT0ZfSlNBTVBST1ddCisgICAgICAgIG1vdnEgICAgWE1NX01NV09SRCBbcmR4K3JheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTcKKyAgICAgICAgbW92cSAgICBYTU1fTU1XT1JEIFtyc2krcmF4KlNJWkVPRl9KU0FNUExFXSwgeG1tMQorICAgICAgICBtb3YgICAgIHJkeCwgSlNBTVBST1cgW3JkaSs0KlNJWkVPRl9KU0FNUFJPV10KKyAgICAgICAgbW92ICAgICByc2ksIEpTQU1QUk9XIFtyZGkrNipTSVpFT0ZfSlNBTVBST1ddCisgICAgICAgIG1vdnEgICAgWE1NX01NV09SRCBbcmR4K3JheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTQKKyAgICAgICAgbW92cSAgICBYTU1fTU1XT1JEIFtyc2krcmF4KlNJWkVPRl9KU0FNUExFXSwgeG1tMwogCi0JbW92CXJkeCwgSlNBTVBST1cgW3JkaSsxKlNJWkVPRl9KU0FNUFJPV10KLQltb3YJcnNpLCBKU0FNUFJPVyBbcmRpKzMqU0laRU9GX0pTQU1QUk9XXQotCW1vdnEJWE1NX01NV09SRCBbcmR4K3JheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTYKLQltb3ZxCVhNTV9NTVdPUkQgW3JzaStyYXgqU0laRU9GX0pTQU1QTEVdLCB4bW0wCi0JbW92CXJkeCwgSlNBTVBST1cgW3JkaSs1KlNJWkVPRl9KU0FNUFJPV10KLQltb3YJcnNpLCBKU0FNUFJPVyBbcmRpKzcqU0laRU9GX0pTQU1QUk9XXQotCW1vdnEJWE1NX01NV09SRCBbcmR4K3JheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTIKLQltb3ZxCVhNTV9NTVdPUkQgW3JzaStyYXgqU0laRU9GX0pTQU1QTEVdLCB4bW01CisgICAgICAgIG1vdiAgICAgcmR4LCBKU0FNUFJPVyBbcmRpKzEqU0laRU9GX0pTQU1QUk9XXQorICAgICAgICBtb3YgICAgIHJzaSwgSlNBTVBST1cgW3JkaSszKlNJWkVPRl9KU0FNUFJPV10KKyAgICAgICAgbW92cSAgICBYTU1fTU1XT1JEIFtyZHgrcmF4KlNJWkVPRl9KU0FNUExFXSwgeG1tNgorICAgICAgICBtb3ZxICAgIFhNTV9NTVdPUkQgW3JzaStyYXgqU0laRU9GX0pTQU1QTEVdLCB4bW0wCisgICAgICAgIG1vdiAgICAgcmR4LCBKU0FNUFJPVyBbcmRpKzUqU0laRU9GX0pTQU1QUk9XXQorICAgICAgICBtb3YgICAgIHJzaSwgSlNBTVBST1cgW3JkaSs3KlNJWkVPRl9KU0FNUFJPV10KKyAgICAgICAgbW92cSAgICBYTU1fTU1XT1JEIFtyZHgrcmF4KlNJWkVPRl9KU0FNUExFXSwgeG1tMgorICAgICAgICBtb3ZxICAgIFhNTV9NTVdPUkQgW3JzaStyYXgqU0laRU9GX0pTQU1QTEVdLCB4bW01CiAKLQl1bmNvbGxlY3RfYXJncwotCW1vdglyc3AscmJwCQk7IHJzcCA8LSBhbGlnbmVkIHJicAotCXBvcAlyc3AJCTsgcnNwIDwtIG9yaWdpbmFsIHJicAotCXBvcAlyYnAKLQlyZXQKKyAgICAgICAgdW5jb2xsZWN0X2FyZ3MKKyAgICAgICAgbW92ICAgICByc3AscmJwICAgICAgICAgOyByc3AgPC0gYWxpZ25lZCByYnAKKyAgICAgICAgcG9wICAgICByc3AgICAgICAgICAgICAgOyByc3AgPC0gb3JpZ2luYWwgcmJwCisgICAgICAgIHBvcCAgICAgcmJwCisgICAgICAgIHJldAogCiA7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQogOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgotCWFsaWduCTE2CisgICAgICAgIGFsaWduICAgMTYKZGlmZiAtLWdpdCBhL3NpbWQvamlzczJpbnQuYXNtIGIvc2ltZC9qaXNzMmludC5hc20KaW5kZXggYWRmMzlmYi4uZTc4ZjVmZiAxMDA2NDQKLS0tIGEvc2ltZC9qaXNzMmludC5hc20KKysrIGIvc2ltZC9qaXNzMmludC5hc20KQEAgLTI2LDY3ICsyNiw2NyBAQAogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSVkZWZpbmUgQ09OU1RfQklUUwkxMwotJWRlZmluZSBQQVNTMV9CSVRTCTIKKyVkZWZpbmUgQ09OU1RfQklUUyAgICAgIDEzCislZGVmaW5lIFBBU1MxX0JJVFMgICAgICAyCiAKLSVkZWZpbmUgREVTQ0FMRV9QMQkoQ09OU1RfQklUUy1QQVNTMV9CSVRTKQotJWRlZmluZSBERVNDQUxFX1AyCShDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyVkZWZpbmUgREVTQ0FMRV9QMSAgICAgIChDT05TVF9CSVRTLVBBU1MxX0JJVFMpCislZGVmaW5lIERFU0NBTEVfUDIgICAgICAoQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCiAKICVpZiBDT05TVF9CSVRTID09IDEzCi1GXzBfMjk4CWVxdQkgMjQ0NgkJOyBGSVgoMC4yOTg2MzEzMzYpCi1GXzBfMzkwCWVxdQkgMzE5NgkJOyBGSVgoMC4zOTAxODA2NDQpCi1GXzBfNTQxCWVxdQkgNDQzMwkJOyBGSVgoMC41NDExOTYxMDApCi1GXzBfNzY1CWVxdQkgNjI3MAkJOyBGSVgoMC43NjUzNjY4NjUpCi1GXzBfODk5CWVxdQkgNzM3MwkJOyBGSVgoMC44OTk5NzYyMjMpCi1GXzFfMTc1CWVxdQkgOTYzMwkJOyBGSVgoMS4xNzU4NzU2MDIpCi1GXzFfNTAxCWVxdQkxMjI5OQkJOyBGSVgoMS41MDEzMjExMTApCi1GXzFfODQ3CWVxdQkxNTEzNwkJOyBGSVgoMS44NDc3NTkwNjUpCi1GXzFfOTYxCWVxdQkxNjA2OQkJOyBGSVgoMS45NjE1NzA1NjApCi1GXzJfMDUzCWVxdQkxNjgxOQkJOyBGSVgoMi4wNTMxMTk4NjkpCi1GXzJfNTYyCWVxdQkyMDk5NQkJOyBGSVgoMi41NjI5MTU0NDcpCi1GXzNfMDcyCWVxdQkyNTE3MgkJOyBGSVgoMy4wNzI3MTEwMjYpCitGXzBfMjk4IGVxdSAgICAgIDI0NDYgICAgICAgICAgIDsgRklYKDAuMjk4NjMxMzM2KQorRl8wXzM5MCBlcXUgICAgICAzMTk2ICAgICAgICAgICA7IEZJWCgwLjM5MDE4MDY0NCkKK0ZfMF81NDEgZXF1ICAgICAgNDQzMyAgICAgICAgICAgOyBGSVgoMC41NDExOTYxMDApCitGXzBfNzY1IGVxdSAgICAgIDYyNzAgICAgICAgICAgIDsgRklYKDAuNzY1MzY2ODY1KQorRl8wXzg5OSBlcXUgICAgICA3MzczICAgICAgICAgICA7IEZJWCgwLjg5OTk3NjIyMykKK0ZfMV8xNzUgZXF1ICAgICAgOTYzMyAgICAgICAgICAgOyBGSVgoMS4xNzU4NzU2MDIpCitGXzFfNTAxIGVxdSAgICAgMTIyOTkgICAgICAgICAgIDsgRklYKDEuNTAxMzIxMTEwKQorRl8xXzg0NyBlcXUgICAgIDE1MTM3ICAgICAgICAgICA7IEZJWCgxLjg0Nzc1OTA2NSkKK0ZfMV85NjEgZXF1ICAgICAxNjA2OSAgICAgICAgICAgOyBGSVgoMS45NjE1NzA1NjApCitGXzJfMDUzIGVxdSAgICAgMTY4MTkgICAgICAgICAgIDsgRklYKDIuMDUzMTE5ODY5KQorRl8yXzU2MiBlcXUgICAgIDIwOTk1ICAgICAgICAgICA7IEZJWCgyLjU2MjkxNTQ0NykKK0ZfM18wNzIgZXF1ICAgICAyNTE3MiAgICAgICAgICAgOyBGSVgoMy4wNzI3MTEwMjYpCiAlZWxzZQogOyBOQVNNIGNhbm5vdCBkbyBjb21waWxlLXRpbWUgYXJpdGhtZXRpYyBvbiBmbG9hdGluZy1wb2ludCBjb25zdGFudHMuCiAlZGVmaW5lIERFU0NBTEUoeCxuKSAgKCgoeCkrKDE8PCgobiktMSkpKT4+KG4pKQotRl8wXzI5OAllcXUJREVTQ0FMRSggMzIwNjUyOTU1LDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuMjk4NjMxMzM2KQotRl8wXzM5MAllcXUJREVTQ0FMRSggNDE4OTUzMjc2LDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuMzkwMTgwNjQ0KQotRl8wXzU0MQllcXUJREVTQ0FMRSggNTgxMTA0ODg3LDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuNTQxMTk2MTAwKQotRl8wXzc2NQllcXUJREVTQ0FMRSggODIxODA2NDEzLDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuNzY1MzY2ODY1KQotRl8wXzg5OQllcXUJREVTQ0FMRSggOTY2MzQyMTExLDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuODk5OTc2MjIzKQotRl8xXzE3NQllcXUJREVTQ0FMRSgxMjYyNTg2ODEzLDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuMTc1ODc1NjAyKQotRl8xXzUwMQllcXUJREVTQ0FMRSgxNjEyMDMxMjY3LDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuNTAxMzIxMTEwKQotRl8xXzg0NwllcXUJREVTQ0FMRSgxOTg0MDE2MTg4LDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuODQ3NzU5MDY1KQotRl8xXzk2MQllcXUJREVTQ0FMRSgyMTA2MjIwMzUwLDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuOTYxNTcwNTYwKQotRl8yXzA1MwllcXUJREVTQ0FMRSgyMjA0NTIwNjczLDMwLUNPTlNUX0JJVFMpCTsgRklYKDIuMDUzMTE5ODY5KQotRl8yXzU2MgllcXUJREVTQ0FMRSgyNzUxOTA5NTA2LDMwLUNPTlNUX0JJVFMpCTsgRklYKDIuNTYyOTE1NDQ3KQotRl8zXzA3MgllcXUJREVTQ0FMRSgzMjk5Mjk4MzQxLDMwLUNPTlNUX0JJVFMpCTsgRklYKDMuMDcyNzExMDI2KQorRl8wXzI5OCBlcXUgICAgIERFU0NBTEUoIDMyMDY1Mjk1NSwzMC1DT05TVF9CSVRTKSAgICAgICA7IEZJWCgwLjI5ODYzMTMzNikKK0ZfMF8zOTAgZXF1ICAgICBERVNDQUxFKCA0MTg5NTMyNzYsMzAtQ09OU1RfQklUUykgICAgICAgOyBGSVgoMC4zOTAxODA2NDQpCitGXzBfNTQxIGVxdSAgICAgREVTQ0FMRSggNTgxMTA0ODg3LDMwLUNPTlNUX0JJVFMpICAgICAgIDsgRklYKDAuNTQxMTk2MTAwKQorRl8wXzc2NSBlcXUgICAgIERFU0NBTEUoIDgyMTgwNjQxMywzMC1DT05TVF9CSVRTKSAgICAgICA7IEZJWCgwLjc2NTM2Njg2NSkKK0ZfMF84OTkgZXF1ICAgICBERVNDQUxFKCA5NjYzNDIxMTEsMzAtQ09OU1RfQklUUykgICAgICAgOyBGSVgoMC44OTk5NzYyMjMpCitGXzFfMTc1IGVxdSAgICAgREVTQ0FMRSgxMjYyNTg2ODEzLDMwLUNPTlNUX0JJVFMpICAgICAgIDsgRklYKDEuMTc1ODc1NjAyKQorRl8xXzUwMSBlcXUgICAgIERFU0NBTEUoMTYxMjAzMTI2NywzMC1DT05TVF9CSVRTKSAgICAgICA7IEZJWCgxLjUwMTMyMTExMCkKK0ZfMV84NDcgZXF1ICAgICBERVNDQUxFKDE5ODQwMTYxODgsMzAtQ09OU1RfQklUUykgICAgICAgOyBGSVgoMS44NDc3NTkwNjUpCitGXzFfOTYxIGVxdSAgICAgREVTQ0FMRSgyMTA2MjIwMzUwLDMwLUNPTlNUX0JJVFMpICAgICAgIDsgRklYKDEuOTYxNTcwNTYwKQorRl8yXzA1MyBlcXUgICAgIERFU0NBTEUoMjIwNDUyMDY3MywzMC1DT05TVF9CSVRTKSAgICAgICA7IEZJWCgyLjA1MzExOTg2OSkKK0ZfMl81NjIgZXF1ICAgICBERVNDQUxFKDI3NTE5MDk1MDYsMzAtQ09OU1RfQklUUykgICAgICAgOyBGSVgoMi41NjI5MTU0NDcpCitGXzNfMDcyIGVxdSAgICAgREVTQ0FMRSgzMjk5Mjk4MzQxLDMwLUNPTlNUX0JJVFMpICAgICAgIDsgRklYKDMuMDcyNzExMDI2KQogJWVuZGlmCiAKIDsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlTRUNUSU9OCVNFR19DT05TVAorICAgICAgICBTRUNUSU9OIFNFR19DT05TVAogCi0JYWxpZ256CTE2Ci0JZ2xvYmFsCUVYVE4oamNvbnN0X2lkY3RfaXNsb3dfc3NlMikKKyAgICAgICAgYWxpZ256ICAxNgorICAgICAgICBnbG9iYWwgIEVYVE4oamNvbnN0X2lkY3RfaXNsb3dfc3NlMikKIAogRVhUTihqY29uc3RfaWRjdF9pc2xvd19zc2UyKToKIAotUFdfRjEzMF9GMDU0CXRpbWVzIDQgZHcgIChGXzBfNTQxK0ZfMF83NjUpLCBGXzBfNTQxCi1QV19GMDU0X01GMTMwCXRpbWVzIDQgZHcgIEZfMF81NDEsIChGXzBfNTQxLUZfMV84NDcpCi1QV19NRjA3OF9GMTE3CXRpbWVzIDQgZHcgIChGXzFfMTc1LUZfMV85NjEpLCBGXzFfMTc1Ci1QV19GMTE3X0YwNzgJdGltZXMgNCBkdyAgRl8xXzE3NSwgKEZfMV8xNzUtRl8wXzM5MCkKLVBXX01GMDYwX01GMDg5CXRpbWVzIDQgZHcgIChGXzBfMjk4LUZfMF84OTkpLC1GXzBfODk5Ci1QV19NRjA4OV9GMDYwCXRpbWVzIDQgZHcgLUZfMF84OTksIChGXzFfNTAxLUZfMF84OTkpCi1QV19NRjA1MF9NRjI1Ngl0aW1lcyA0IGR3ICAoRl8yXzA1My1GXzJfNTYyKSwtRl8yXzU2MgotUFdfTUYyNTZfRjA1MAl0aW1lcyA0IGR3IC1GXzJfNTYyLCAoRl8zXzA3Mi1GXzJfNTYyKQotUERfREVTQ0FMRV9QMQl0aW1lcyA0IGRkICAxIDw8IChERVNDQUxFX1AxLTEpCi1QRF9ERVNDQUxFX1AyCXRpbWVzIDQgZGQgIDEgPDwgKERFU0NBTEVfUDItMSkKLVBCX0NFTlRFUkpTQU1QCXRpbWVzIDE2IGRiIENFTlRFUkpTQU1QTEUKK1BXX0YxMzBfRjA1NCAgICB0aW1lcyA0IGR3ICAoRl8wXzU0MStGXzBfNzY1KSwgRl8wXzU0MQorUFdfRjA1NF9NRjEzMCAgIHRpbWVzIDQgZHcgIEZfMF81NDEsIChGXzBfNTQxLUZfMV84NDcpCitQV19NRjA3OF9GMTE3ICAgdGltZXMgNCBkdyAgKEZfMV8xNzUtRl8xXzk2MSksIEZfMV8xNzUKK1BXX0YxMTdfRjA3OCAgICB0aW1lcyA0IGR3ICBGXzFfMTc1LCAoRl8xXzE3NS1GXzBfMzkwKQorUFdfTUYwNjBfTUYwODkgIHRpbWVzIDQgZHcgIChGXzBfMjk4LUZfMF84OTkpLC1GXzBfODk5CitQV19NRjA4OV9GMDYwICAgdGltZXMgNCBkdyAtRl8wXzg5OSwgKEZfMV81MDEtRl8wXzg5OSkKK1BXX01GMDUwX01GMjU2ICB0aW1lcyA0IGR3ICAoRl8yXzA1My1GXzJfNTYyKSwtRl8yXzU2MgorUFdfTUYyNTZfRjA1MCAgIHRpbWVzIDQgZHcgLUZfMl81NjIsIChGXzNfMDcyLUZfMl81NjIpCitQRF9ERVNDQUxFX1AxICAgdGltZXMgNCBkZCAgMSA8PCAoREVTQ0FMRV9QMS0xKQorUERfREVTQ0FMRV9QMiAgIHRpbWVzIDQgZGQgIDEgPDwgKERFU0NBTEVfUDItMSkKK1BCX0NFTlRFUkpTQU1QICB0aW1lcyAxNiBkYiBDRU5URVJKU0FNUExFCiAKLQlhbGlnbnoJMTYKKyAgICAgICAgYWxpZ256ICAxNgogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JU0VDVElPTglTRUdfVEVYVAotCUJJVFMJMzIKKyAgICAgICAgU0VDVElPTiBTRUdfVEVYVAorICAgICAgICBCSVRTICAgIDMyCiA7CiA7IFBlcmZvcm0gZGVxdWFudGl6YXRpb24gYW5kIGludmVyc2UgRENUIG9uIG9uZSBibG9jayBvZiBjb2VmZmljaWVudHMuCiA7CkBAIC05NSw3NjUgKzk1LDc2NSBAQAogOyAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQogOwogCi0lZGVmaW5lIGRjdF90YWJsZShiKQkoYikrOAkJCTsganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIKLSVkZWZpbmUgY29lZl9ibG9jayhiKQkoYikrMTIJCTsgSkNPRUZQVFIgY29lZl9ibG9jawotJWRlZmluZSBvdXRwdXRfYnVmKGIpCShiKSsxNgkJOyBKU0FNUEFSUkFZIG91dHB1dF9idWYKLSVkZWZpbmUgb3V0cHV0X2NvbChiKQkoYikrMjAJCTsgSkRJTUVOU0lPTiBvdXRwdXRfY29sCislZGVmaW5lIGRjdF90YWJsZShiKSAgICAoYikrOCAgICAgICAgICAgOyBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0cgorJWRlZmluZSBjb2VmX2Jsb2NrKGIpICAgKGIpKzEyICAgICAgICAgIDsgSkNPRUZQVFIgY29lZl9ibG9jaworJWRlZmluZSBvdXRwdXRfYnVmKGIpICAgKGIpKzE2ICAgICAgICAgIDsgSlNBTVBBUlJBWSBvdXRwdXRfYnVmCislZGVmaW5lIG91dHB1dF9jb2woYikgICAoYikrMjAgICAgICAgICAgOyBKRElNRU5TSU9OIG91dHB1dF9jb2wKIAotJWRlZmluZSBvcmlnaW5hbF9lYnAJZWJwKzAKLSVkZWZpbmUgd2soaSkJCWVicC0oV0tfTlVNLShpKSkqU0laRU9GX1hNTVdPUkQJOyB4bW13b3JkIHdrW1dLX05VTV0KLSVkZWZpbmUgV0tfTlVNCQkxMgorJWRlZmluZSBvcmlnaW5hbF9lYnAgICAgZWJwKzAKKyVkZWZpbmUgd2soaSkgICAgICAgICAgIGVicC0oV0tfTlVNLShpKSkqU0laRU9GX1hNTVdPUkQgOyB4bW13b3JkIHdrW1dLX05VTV0KKyVkZWZpbmUgV0tfTlVNICAgICAgICAgIDEyCiAKLQlhbGlnbgkxNgotCWdsb2JhbAlFWFROKGpzaW1kX2lkY3RfaXNsb3dfc3NlMikKKyAgICAgICAgYWxpZ24gICAxNgorICAgICAgICBnbG9iYWwgIEVYVE4oanNpbWRfaWRjdF9pc2xvd19zc2UyKQogCiBFWFROKGpzaW1kX2lkY3RfaXNsb3dfc3NlMik6Ci0JcHVzaAllYnAKLQltb3YJZWF4LGVzcAkJCQk7IGVheCA9IG9yaWdpbmFsIGVicAotCXN1Ygllc3AsIGJ5dGUgNAotCWFuZAllc3AsIGJ5dGUgKC1TSVpFT0ZfWE1NV09SRCkJOyBhbGlnbiB0byAxMjggYml0cwotCW1vdglbZXNwXSxlYXgKLQltb3YJZWJwLGVzcAkJCQk7IGVicCA9IGFsaWduZWQgZWJwCi0JbGVhCWVzcCwgW3drKDApXQotCXB1c2hwaWMJZWJ4Ci07CXB1c2gJZWN4CQk7IHVudXNlZAotOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLQlwdXNoCWVzaQotCXB1c2gJZWRpCisgICAgICAgIHB1c2ggICAgZWJwCisgICAgICAgIG1vdiAgICAgZWF4LGVzcCAgICAgICAgICAgICAgICAgICAgICAgICA7IGVheCA9IG9yaWdpbmFsIGVicAorICAgICAgICBzdWIgICAgIGVzcCwgYnl0ZSA0CisgICAgICAgIGFuZCAgICAgZXNwLCBieXRlICgtU0laRU9GX1hNTVdPUkQpICAgICA7IGFsaWduIHRvIDEyOCBiaXRzCisgICAgICAgIG1vdiAgICAgW2VzcF0sZWF4CisgICAgICAgIG1vdiAgICAgZWJwLGVzcCAgICAgICAgICAgICAgICAgICAgICAgICA7IGVicCA9IGFsaWduZWQgZWJwCisgICAgICAgIGxlYSAgICAgZXNwLCBbd2soMCldCisgICAgICAgIHB1c2hwaWMgZWJ4Cis7ICAgICAgIHB1c2ggICAgZWN4ICAgICAgICAgICAgIDsgdW51c2VkCis7ICAgICAgIHB1c2ggICAgZWR4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgICAgIHB1c2ggICAgZXNpCisgICAgICAgIHB1c2ggICAgZWRpCiAKLQlnZXRfR09UCWVieAkJOyBnZXQgR09UIGFkZHJlc3MKKyAgICAgICAgZ2V0X0dPVCBlYnggICAgICAgICAgICAgOyBnZXQgR09UIGFkZHJlc3MKIAotCTsgLS0tLSBQYXNzIDE6IHByb2Nlc3MgY29sdW1ucyBmcm9tIGlucHV0LgorICAgICAgICA7IC0tLS0gUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMgZnJvbSBpbnB1dC4KIAotOwltb3YJZWF4LCBbb3JpZ2luYWxfZWJwXQotCW1vdgllZHgsIFBPSU5URVIgW2RjdF90YWJsZShlYXgpXQk7IHF1YW50cHRyCi0JbW92CWVzaSwgSkNPRUZQVFIgW2NvZWZfYmxvY2soZWF4KV0JCTsgaW5wdHIKKzsgICAgICAgbW92ICAgICBlYXgsIFtvcmlnaW5hbF9lYnBdCisgICAgICAgIG1vdiAgICAgZWR4LCBQT0lOVEVSIFtkY3RfdGFibGUoZWF4KV0gICAgICAgICAgIDsgcXVhbnRwdHIKKyAgICAgICAgbW92ICAgICBlc2ksIEpDT0VGUFRSIFtjb2VmX2Jsb2NrKGVheCldICAgICAgICAgOyBpbnB0cgogCiAlaWZuZGVmIE5PX1pFUk9fQ09MVU1OX1RFU1RfSVNMT1dfU1NFMgotCW1vdgllYXgsIERXT1JEIFtEV0JMT0NLKDEsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQlvcgllYXgsIERXT1JEIFtEV0JMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQlqbnoJbmVhciAuY29sdW1uRENUCisgICAgICAgIG1vdiAgICAgZWF4LCBEV09SRCBbRFdCTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG9yICAgICAgZWF4LCBEV09SRCBbRFdCTE9DSygyLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIGpueiAgICAgbmVhciAuY29sdW1uRENUCiAKLQltb3ZkcWEJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQotCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygyLDAsZXNpLFNJWkVPRl9KQ09FRildCi0JcG9yCXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQlwb3IJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQotCXBvcgl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSyg1LDAsZXNpLFNJWkVPRl9KQ09FRildCi0JcG9yCXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDYsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQlwb3IJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soNywwLGVzaSxTSVpFT0ZfSkNPRUYpXQotCXBvcgl4bW0xLHhtbTAKLQlwYWNrc3N3YiB4bW0xLHhtbTEKLQlwYWNrc3N3YiB4bW0xLHhtbTEKLQltb3ZkCWVheCx4bW0xCi0JdGVzdAllYXgsZWF4Ci0Jam56CXNob3J0IC5jb2x1bW5EQ1QKKyAgICAgICAgbW92ZHFhICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdmRxYSAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBwb3IgICAgIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgcG9yICAgICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSyg0LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIHBvciAgICAgeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soNSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBwb3IgICAgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDYsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgcG9yICAgICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSyg3LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIHBvciAgICAgeG1tMSx4bW0wCisgICAgICAgIHBhY2tzc3diIHhtbTEseG1tMQorICAgICAgICBwYWNrc3N3YiB4bW0xLHhtbTEKKyAgICAgICAgbW92ZCAgICBlYXgseG1tMQorICAgICAgICB0ZXN0ICAgIGVheCxlYXgKKyAgICAgICAgam56ICAgICBzaG9ydCAuY29sdW1uRENUCiAKLQk7IC0tIEFDIHRlcm1zIGFsbCB6ZXJvCisgICAgICAgIDsgLS0gQUMgdGVybXMgYWxsIHplcm8KIAotCW1vdmRxYQl4bW01LCBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZXNpLFNJWkVPRl9KQ09FRildCi0JcG11bGx3CXhtbTUsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisgICAgICAgIG1vdmRxYSAgeG1tNSwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBwbXVsbHcgIHhtbTUsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCiAKLQlwc2xsdwl4bW01LFBBU1MxX0JJVFMKKyAgICAgICAgcHNsbHcgICB4bW01LFBBU1MxX0JJVFMKIAotCW1vdmRxYSAgICB4bW00LHhtbTUJCTsgeG1tNT1pbjA9KDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3KQotCXB1bnBja2x3ZCB4bW01LHhtbTUJCTsgeG1tNT0oMDAgMDAgMDEgMDEgMDIgMDIgMDMgMDMpCi0JcHVucGNraHdkIHhtbTQseG1tNAkJOyB4bW00PSgwNCAwNCAwNSAwNSAwNiAwNiAwNyAwNykKKyAgICAgICAgbW92ZHFhICAgIHhtbTQseG1tNSAgICAgICAgICAgICA7IHhtbTU9aW4wPSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNykKKyAgICAgICAgcHVucGNrbHdkIHhtbTUseG1tNSAgICAgICAgICAgICA7IHhtbTU9KDAwIDAwIDAxIDAxIDAyIDAyIDAzIDAzKQorICAgICAgICBwdW5wY2tod2QgeG1tNCx4bW00ICAgICAgICAgICAgIDsgeG1tND0oMDQgMDQgMDUgMDUgMDYgMDYgMDcgMDcpCiAKLQlwc2h1ZmQJeG1tNyx4bW01LDB4MDAJCTsgeG1tNz1jb2wwPSgwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCkKLQlwc2h1ZmQJeG1tNix4bW01LDB4NTUJCTsgeG1tNj1jb2wxPSgwMSAwMSAwMSAwMSAwMSAwMSAwMSAwMSkKLQlwc2h1ZmQJeG1tMSx4bW01LDB4QUEJCTsgeG1tMT1jb2wyPSgwMiAwMiAwMiAwMiAwMiAwMiAwMiAwMikKLQlwc2h1ZmQJeG1tNSx4bW01LDB4RkYJCTsgeG1tNT1jb2wzPSgwMyAwMyAwMyAwMyAwMyAwMyAwMyAwMykKLQlwc2h1ZmQJeG1tMCx4bW00LDB4MDAJCTsgeG1tMD1jb2w0PSgwNCAwNCAwNCAwNCAwNCAwNCAwNCAwNCkKLQlwc2h1ZmQJeG1tMyx4bW00LDB4NTUJCTsgeG1tMz1jb2w1PSgwNSAwNSAwNSAwNSAwNSAwNSAwNSAwNSkKLQlwc2h1ZmQJeG1tMix4bW00LDB4QUEJCTsgeG1tMj1jb2w2PSgwNiAwNiAwNiAwNiAwNiAwNiAwNiAwNikKLQlwc2h1ZmQJeG1tNCx4bW00LDB4RkYJCTsgeG1tND1jb2w3PSgwNyAwNyAwNyAwNyAwNyAwNyAwNyAwNykKKyAgICAgICAgcHNodWZkICB4bW03LHhtbTUsMHgwMCAgICAgICAgICA7IHhtbTc9Y29sMD0oMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDApCisgICAgICAgIHBzaHVmZCAgeG1tNix4bW01LDB4NTUgICAgICAgICAgOyB4bW02PWNvbDE9KDAxIDAxIDAxIDAxIDAxIDAxIDAxIDAxKQorICAgICAgICBwc2h1ZmQgIHhtbTEseG1tNSwweEFBICAgICAgICAgIDsgeG1tMT1jb2wyPSgwMiAwMiAwMiAwMiAwMiAwMiAwMiAwMikKKyAgICAgICAgcHNodWZkICB4bW01LHhtbTUsMHhGRiAgICAgICAgICA7IHhtbTU9Y29sMz0oMDMgMDMgMDMgMDMgMDMgMDMgMDMgMDMpCisgICAgICAgIHBzaHVmZCAgeG1tMCx4bW00LDB4MDAgICAgICAgICAgOyB4bW0wPWNvbDQ9KDA0IDA0IDA0IDA0IDA0IDA0IDA0IDA0KQorICAgICAgICBwc2h1ZmQgIHhtbTMseG1tNCwweDU1ICAgICAgICAgIDsgeG1tMz1jb2w1PSgwNSAwNSAwNSAwNSAwNSAwNSAwNSAwNSkKKyAgICAgICAgcHNodWZkICB4bW0yLHhtbTQsMHhBQSAgICAgICAgICA7IHhtbTI9Y29sNj0oMDYgMDYgMDYgMDYgMDYgMDYgMDYgMDYpCisgICAgICAgIHBzaHVmZCAgeG1tNCx4bW00LDB4RkYgICAgICAgICAgOyB4bW00PWNvbDc9KDA3IDA3IDA3IDA3IDA3IDA3IDA3IDA3KQogCi0JbW92ZHFhCVhNTVdPUkQgW3drKDgpXSwgeG1tNgk7IHdrKDgpPWNvbDEKLQltb3ZkcWEJWE1NV09SRCBbd2soOSldLCB4bW01CTsgd2soOSk9Y29sMwotCW1vdmRxYQlYTU1XT1JEIFt3aygxMCldLCB4bW0zCTsgd2soMTApPWNvbDUKLQltb3ZkcWEJWE1NV09SRCBbd2soMTEpXSwgeG1tNAk7IHdrKDExKT1jb2w3Ci0Jam1wCW5lYXIgLmNvbHVtbl9lbmQKLQlhbGlnbngJMTYsNworICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDgpXSwgeG1tNiAgIDsgd2soOCk9Y29sMQorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDkpXSwgeG1tNSAgIDsgd2soOSk9Y29sMworICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDEwKV0sIHhtbTMgIDsgd2soMTApPWNvbDUKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygxMSldLCB4bW00ICA7IHdrKDExKT1jb2w3CisgICAgICAgIGptcCAgICAgbmVhciAuY29sdW1uX2VuZAorICAgICAgICBhbGlnbnggIDE2LDcKICVlbmRpZgogLmNvbHVtbkRDVDoKIAotCTsgLS0gRXZlbiBwYXJ0CisgICAgICAgIDsgLS0gRXZlbiBwYXJ0CiAKLQltb3ZkcWEJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQotCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygyLDAsZXNpLFNJWkVPRl9KQ09FRildCi0JcG11bGx3CXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCi0JcG11bGx3CXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCi0JbW92ZHFhCXhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDQsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQltb3ZkcWEJeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQotCXBtdWxsdwl4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSyg0LDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQotCXBtdWxsdwl4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg2LDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorICAgICAgICBtb3ZkcWEgIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgbW92ZHFhICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygyLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIHBtdWxsdyAgeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKyAgICAgICAgcG11bGx3ICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygyLDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorICAgICAgICBtb3ZkcWEgIHhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDQsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgbW92ZHFhICB4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg2LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIHBtdWxsdyAgeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soNCwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKyAgICAgICAgcG11bGx3ICB4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg2LDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQogCi0JOyAoT3JpZ2luYWwpCi0JOyB6MSA9ICh6MiArIHozKSAqIDAuNTQxMTk2MTAwOwotCTsgdG1wMiA9IHoxICsgejMgKiAtMS44NDc3NTkwNjU7Ci0JOyB0bXAzID0gejEgKyB6MiAqIDAuNzY1MzY2ODY1OwotCTsKLQk7IChUaGlzIGltcGxlbWVudGF0aW9uKQotCTsgdG1wMiA9IHoyICogMC41NDExOTYxMDAgKyB6MyAqICgwLjU0MTE5NjEwMCAtIDEuODQ3NzU5MDY1KTsKLQk7IHRtcDMgPSB6MiAqICgwLjU0MTE5NjEwMCArIDAuNzY1MzY2ODY1KSArIHozICogMC41NDExOTYxMDA7CisgICAgICAgIDsgKE9yaWdpbmFsKQorICAgICAgICA7IHoxID0gKHoyICsgejMpICogMC41NDExOTYxMDA7CisgICAgICAgIDsgdG1wMiA9IHoxICsgejMgKiAtMS44NDc3NTkwNjU7CisgICAgICAgIDsgdG1wMyA9IHoxICsgejIgKiAwLjc2NTM2Njg2NTsKKyAgICAgICAgOworICAgICAgICA7IChUaGlzIGltcGxlbWVudGF0aW9uKQorICAgICAgICA7IHRtcDIgPSB6MiAqIDAuNTQxMTk2MTAwICsgejMgKiAoMC41NDExOTYxMDAgLSAxLjg0Nzc1OTA2NSk7CisgICAgICAgIDsgdG1wMyA9IHoyICogKDAuNTQxMTk2MTAwICsgMC43NjUzNjY4NjUpICsgejMgKiAwLjU0MTE5NjEwMDsKIAotCW1vdmRxYSAgICB4bW00LHhtbTEJCTsgeG1tMT1pbjI9ejIKLQltb3ZkcWEgICAgeG1tNSx4bW0xCi0JcHVucGNrbHdkIHhtbTQseG1tMwkJOyB4bW0zPWluNj16MwotCXB1bnBja2h3ZCB4bW01LHhtbTMKLQltb3ZkcWEgICAgeG1tMSx4bW00Ci0JbW92ZHFhICAgIHhtbTMseG1tNQotCXBtYWRkd2QgICB4bW00LFtHT1RPRkYoZWJ4LFBXX0YxMzBfRjA1NCldCTsgeG1tND10bXAzTAotCXBtYWRkd2QgICB4bW01LFtHT1RPRkYoZWJ4LFBXX0YxMzBfRjA1NCldCTsgeG1tNT10bXAzSAotCXBtYWRkd2QgICB4bW0xLFtHT1RPRkYoZWJ4LFBXX0YwNTRfTUYxMzApXQk7IHhtbTE9dG1wMkwKLQlwbWFkZHdkICAgeG1tMyxbR09UT0ZGKGVieCxQV19GMDU0X01GMTMwKV0JOyB4bW0zPXRtcDJICisgICAgICAgIG1vdmRxYSAgICB4bW00LHhtbTEgICAgICAgICAgICAgOyB4bW0xPWluMj16MgorICAgICAgICBtb3ZkcWEgICAgeG1tNSx4bW0xCisgICAgICAgIHB1bnBja2x3ZCB4bW00LHhtbTMgICAgICAgICAgICAgOyB4bW0zPWluNj16MworICAgICAgICBwdW5wY2tod2QgeG1tNSx4bW0zCisgICAgICAgIG1vdmRxYSAgICB4bW0xLHhtbTQKKyAgICAgICAgbW92ZHFhICAgIHhtbTMseG1tNQorICAgICAgICBwbWFkZHdkICAgeG1tNCxbR09UT0ZGKGVieCxQV19GMTMwX0YwNTQpXSAgICAgICA7IHhtbTQ9dG1wM0wKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTUsW0dPVE9GRihlYngsUFdfRjEzMF9GMDU0KV0gICAgICAgOyB4bW01PXRtcDNICisgICAgICAgIHBtYWRkd2QgICB4bW0xLFtHT1RPRkYoZWJ4LFBXX0YwNTRfTUYxMzApXSAgICAgIDsgeG1tMT10bXAyTAorICAgICAgICBwbWFkZHdkICAgeG1tMyxbR09UT0ZGKGVieCxQV19GMDU0X01GMTMwKV0gICAgICA7IHhtbTM9dG1wMkgKIAotCW1vdmRxYSAgICB4bW02LHhtbTAKLQlwYWRkdyAgICAgeG1tMCx4bW0yCQk7IHhtbTA9aW4wK2luNAotCXBzdWJ3ICAgICB4bW02LHhtbTIJCTsgeG1tNj1pbjAtaW40CisgICAgICAgIG1vdmRxYSAgICB4bW02LHhtbTAKKyAgICAgICAgcGFkZHcgICAgIHhtbTAseG1tMiAgICAgICAgICAgICA7IHhtbTA9aW4wK2luNAorICAgICAgICBwc3VidyAgICAgeG1tNix4bW0yICAgICAgICAgICAgIDsgeG1tNj1pbjAtaW40CiAKLQlweG9yICAgICAgeG1tNyx4bW03Ci0JcHhvciAgICAgIHhtbTIseG1tMgotCXB1bnBja2x3ZCB4bW03LHhtbTAJCTsgeG1tNz10bXAwTAotCXB1bnBja2h3ZCB4bW0yLHhtbTAJCTsgeG1tMj10bXAwSAotCXBzcmFkICAgICB4bW03LCgxNi1DT05TVF9CSVRTKQk7IHBzcmFkIHhtbTcsMTYgJiBwc2xsZCB4bW03LENPTlNUX0JJVFMKLQlwc3JhZCAgICAgeG1tMiwoMTYtQ09OU1RfQklUUykJOyBwc3JhZCB4bW0yLDE2ICYgcHNsbGQgeG1tMixDT05TVF9CSVRTCisgICAgICAgIHB4b3IgICAgICB4bW03LHhtbTcKKyAgICAgICAgcHhvciAgICAgIHhtbTIseG1tMgorICAgICAgICBwdW5wY2tsd2QgeG1tNyx4bW0wICAgICAgICAgICAgIDsgeG1tNz10bXAwTAorICAgICAgICBwdW5wY2tod2QgeG1tMix4bW0wICAgICAgICAgICAgIDsgeG1tMj10bXAwSAorICAgICAgICBwc3JhZCAgICAgeG1tNywoMTYtQ09OU1RfQklUUykgIDsgcHNyYWQgeG1tNywxNiAmIHBzbGxkIHhtbTcsQ09OU1RfQklUUworICAgICAgICBwc3JhZCAgICAgeG1tMiwoMTYtQ09OU1RfQklUUykgIDsgcHNyYWQgeG1tMiwxNiAmIHBzbGxkIHhtbTIsQ09OU1RfQklUUwogCi0JbW92ZHFhCXhtbTAseG1tNwotCXBhZGRkCXhtbTcseG1tNAkJOyB4bW03PXRtcDEwTAotCXBzdWJkCXhtbTAseG1tNAkJOyB4bW0wPXRtcDEzTAotCW1vdmRxYQl4bW00LHhtbTIKLQlwYWRkZAl4bW0yLHhtbTUJCTsgeG1tMj10bXAxMEgKLQlwc3ViZAl4bW00LHhtbTUJCTsgeG1tND10bXAxM0gKKyAgICAgICAgbW92ZHFhICB4bW0wLHhtbTcKKyAgICAgICAgcGFkZGQgICB4bW03LHhtbTQgICAgICAgICAgICAgICA7IHhtbTc9dG1wMTBMCisgICAgICAgIHBzdWJkICAgeG1tMCx4bW00ICAgICAgICAgICAgICAgOyB4bW0wPXRtcDEzTAorICAgICAgICBtb3ZkcWEgIHhtbTQseG1tMgorICAgICAgICBwYWRkZCAgIHhtbTIseG1tNSAgICAgICAgICAgICAgIDsgeG1tMj10bXAxMEgKKyAgICAgICAgcHN1YmQgICB4bW00LHhtbTUgICAgICAgICAgICAgICA7IHhtbTQ9dG1wMTNICiAKLQltb3ZkcWEJWE1NV09SRCBbd2soMCldLCB4bW03CTsgd2soMCk9dG1wMTBMCi0JbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tMgk7IHdrKDEpPXRtcDEwSAotCW1vdmRxYQlYTU1XT1JEIFt3aygyKV0sIHhtbTAJOyB3aygyKT10bXAxM0wKLQltb3ZkcWEJWE1NV09SRCBbd2soMyldLCB4bW00CTsgd2soMyk9dG1wMTNICisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMCldLCB4bW03ICAgOyB3aygwKT10bXAxMEwKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygxKV0sIHhtbTIgICA7IHdrKDEpPXRtcDEwSAorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDIpXSwgeG1tMCAgIDsgd2soMik9dG1wMTNMCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMyldLCB4bW00ICAgOyB3aygzKT10bXAxM0gKIAotCXB4b3IgICAgICB4bW01LHhtbTUKLQlweG9yICAgICAgeG1tNyx4bW03Ci0JcHVucGNrbHdkIHhtbTUseG1tNgkJOyB4bW01PXRtcDFMCi0JcHVucGNraHdkIHhtbTcseG1tNgkJOyB4bW03PXRtcDFICi0JcHNyYWQgICAgIHhtbTUsKDE2LUNPTlNUX0JJVFMpCTsgcHNyYWQgeG1tNSwxNiAmIHBzbGxkIHhtbTUsQ09OU1RfQklUUwotCXBzcmFkICAgICB4bW03LCgxNi1DT05TVF9CSVRTKQk7IHBzcmFkIHhtbTcsMTYgJiBwc2xsZCB4bW03LENPTlNUX0JJVFMKKyAgICAgICAgcHhvciAgICAgIHhtbTUseG1tNQorICAgICAgICBweG9yICAgICAgeG1tNyx4bW03CisgICAgICAgIHB1bnBja2x3ZCB4bW01LHhtbTYgICAgICAgICAgICAgOyB4bW01PXRtcDFMCisgICAgICAgIHB1bnBja2h3ZCB4bW03LHhtbTYgICAgICAgICAgICAgOyB4bW03PXRtcDFICisgICAgICAgIHBzcmFkICAgICB4bW01LCgxNi1DT05TVF9CSVRTKSAgOyBwc3JhZCB4bW01LDE2ICYgcHNsbGQgeG1tNSxDT05TVF9CSVRTCisgICAgICAgIHBzcmFkICAgICB4bW03LCgxNi1DT05TVF9CSVRTKSAgOyBwc3JhZCB4bW03LDE2ICYgcHNsbGQgeG1tNyxDT05TVF9CSVRTCiAKLQltb3ZkcWEJeG1tMix4bW01Ci0JcGFkZGQJeG1tNSx4bW0xCQk7IHhtbTU9dG1wMTFMCi0JcHN1YmQJeG1tMix4bW0xCQk7IHhtbTI9dG1wMTJMCi0JbW92ZHFhCXhtbTAseG1tNwotCXBhZGRkCXhtbTcseG1tMwkJOyB4bW03PXRtcDExSAotCXBzdWJkCXhtbTAseG1tMwkJOyB4bW0wPXRtcDEySAorICAgICAgICBtb3ZkcWEgIHhtbTIseG1tNQorICAgICAgICBwYWRkZCAgIHhtbTUseG1tMSAgICAgICAgICAgICAgIDsgeG1tNT10bXAxMUwKKyAgICAgICAgcHN1YmQgICB4bW0yLHhtbTEgICAgICAgICAgICAgICA7IHhtbTI9dG1wMTJMCisgICAgICAgIG1vdmRxYSAgeG1tMCx4bW03CisgICAgICAgIHBhZGRkICAgeG1tNyx4bW0zICAgICAgICAgICAgICAgOyB4bW03PXRtcDExSAorICAgICAgICBwc3ViZCAgIHhtbTAseG1tMyAgICAgICAgICAgICAgIDsgeG1tMD10bXAxMkgKIAotCW1vdmRxYQlYTU1XT1JEIFt3ayg0KV0sIHhtbTUJOyB3ayg0KT10bXAxMUwKLQltb3ZkcWEJWE1NV09SRCBbd2soNSldLCB4bW03CTsgd2soNSk9dG1wMTFICi0JbW92ZHFhCVhNTVdPUkQgW3drKDYpXSwgeG1tMgk7IHdrKDYpPXRtcDEyTAotCW1vdmRxYQlYTU1XT1JEIFt3ayg3KV0sIHhtbTAJOyB3ayg3KT10bXAxMkgKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3ayg0KV0sIHhtbTUgICA7IHdrKDQpPXRtcDExTAorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDUpXSwgeG1tNyAgIDsgd2soNSk9dG1wMTFICisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soNildLCB4bW0yICAgOyB3ayg2KT10bXAxMkwKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3ayg3KV0sIHhtbTAgICA7IHdrKDcpPXRtcDEySAogCi0JOyAtLSBPZGQgcGFydAorICAgICAgICA7IC0tIE9kZCBwYXJ0CiAKLQltb3ZkcWEJeG1tNCwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQotCW1vdmRxYQl4bW02LCBYTU1XT1JEIFtYTU1CTE9DSygzLDAsZXNpLFNJWkVPRl9KQ09FRildCi0JcG11bGx3CXhtbTQsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCi0JcG11bGx3CXhtbTYsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCi0JbW92ZHFhCXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQltb3ZkcWEJeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNywwLGVzaSxTSVpFT0ZfSkNPRUYpXQotCXBtdWxsdwl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSyg1LDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQotCXBtdWxsdwl4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg3LDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorICAgICAgICBtb3ZkcWEgIHhtbTQsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgbW92ZHFhICB4bW02LCBYTU1XT1JEIFtYTU1CTE9DSygzLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIHBtdWxsdyAgeG1tNCwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKyAgICAgICAgcG11bGx3ICB4bW02LCBYTU1XT1JEIFtYTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorICAgICAgICBtb3ZkcWEgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgbW92ZHFhICB4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg3LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIHBtdWxsdyAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNSwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKyAgICAgICAgcG11bGx3ICB4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg3LDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQogCi0JbW92ZHFhCXhtbTUseG1tNgotCW1vdmRxYQl4bW03LHhtbTQKLQlwYWRkdwl4bW01LHhtbTMJCTsgeG1tNT16MwotCXBhZGR3CXhtbTcseG1tMQkJOyB4bW03PXo0CisgICAgICAgIG1vdmRxYSAgeG1tNSx4bW02CisgICAgICAgIG1vdmRxYSAgeG1tNyx4bW00CisgICAgICAgIHBhZGR3ICAgeG1tNSx4bW0zICAgICAgICAgICAgICAgOyB4bW01PXozCisgICAgICAgIHBhZGR3ICAgeG1tNyx4bW0xICAgICAgICAgICAgICAgOyB4bW03PXo0CiAKLQk7IChPcmlnaW5hbCkKLQk7IHo1ID0gKHozICsgejQpICogMS4xNzU4NzU2MDI7Ci0JOyB6MyA9IHozICogLTEuOTYxNTcwNTYwOyAgejQgPSB6NCAqIC0wLjM5MDE4MDY0NDsKLQk7IHozICs9IHo1OyAgejQgKz0gejU7Ci0JOwotCTsgKFRoaXMgaW1wbGVtZW50YXRpb24pCi0JOyB6MyA9IHozICogKDEuMTc1ODc1NjAyIC0gMS45NjE1NzA1NjApICsgejQgKiAxLjE3NTg3NTYwMjsKLQk7IHo0ID0gejMgKiAxLjE3NTg3NTYwMiArIHo0ICogKDEuMTc1ODc1NjAyIC0gMC4zOTAxODA2NDQpOworICAgICAgICA7IChPcmlnaW5hbCkKKyAgICAgICAgOyB6NSA9ICh6MyArIHo0KSAqIDEuMTc1ODc1NjAyOworICAgICAgICA7IHozID0gejMgKiAtMS45NjE1NzA1NjA7ICB6NCA9IHo0ICogLTAuMzkwMTgwNjQ0OworICAgICAgICA7IHozICs9IHo1OyAgejQgKz0gejU7CisgICAgICAgIDsKKyAgICAgICAgOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKyAgICAgICAgOyB6MyA9IHozICogKDEuMTc1ODc1NjAyIC0gMS45NjE1NzA1NjApICsgejQgKiAxLjE3NTg3NTYwMjsKKyAgICAgICAgOyB6NCA9IHozICogMS4xNzU4NzU2MDIgKyB6NCAqICgxLjE3NTg3NTYwMiAtIDAuMzkwMTgwNjQ0KTsKIAotCW1vdmRxYSAgICB4bW0yLHhtbTUKLQltb3ZkcWEgICAgeG1tMCx4bW01Ci0JcHVucGNrbHdkIHhtbTIseG1tNwotCXB1bnBja2h3ZCB4bW0wLHhtbTcKLQltb3ZkcWEgICAgeG1tNSx4bW0yCi0JbW92ZHFhICAgIHhtbTcseG1tMAotCXBtYWRkd2QgICB4bW0yLFtHT1RPRkYoZWJ4LFBXX01GMDc4X0YxMTcpXQk7IHhtbTI9ejNMCi0JcG1hZGR3ZCAgIHhtbTAsW0dPVE9GRihlYngsUFdfTUYwNzhfRjExNyldCTsgeG1tMD16M0gKLQlwbWFkZHdkICAgeG1tNSxbR09UT0ZGKGVieCxQV19GMTE3X0YwNzgpXQk7IHhtbTU9ejRMCi0JcG1hZGR3ZCAgIHhtbTcsW0dPVE9GRihlYngsUFdfRjExN19GMDc4KV0JOyB4bW03PXo0SAorICAgICAgICBtb3ZkcWEgICAgeG1tMix4bW01CisgICAgICAgIG1vdmRxYSAgICB4bW0wLHhtbTUKKyAgICAgICAgcHVucGNrbHdkIHhtbTIseG1tNworICAgICAgICBwdW5wY2tod2QgeG1tMCx4bW03CisgICAgICAgIG1vdmRxYSAgICB4bW01LHhtbTIKKyAgICAgICAgbW92ZHFhICAgIHhtbTcseG1tMAorICAgICAgICBwbWFkZHdkICAgeG1tMixbR09UT0ZGKGVieCxQV19NRjA3OF9GMTE3KV0gICAgICA7IHhtbTI9ejNMCisgICAgICAgIHBtYWRkd2QgICB4bW0wLFtHT1RPRkYoZWJ4LFBXX01GMDc4X0YxMTcpXSAgICAgIDsgeG1tMD16M0gKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTUsW0dPVE9GRihlYngsUFdfRjExN19GMDc4KV0gICAgICAgOyB4bW01PXo0TAorICAgICAgICBwbWFkZHdkICAgeG1tNyxbR09UT0ZGKGVieCxQV19GMTE3X0YwNzgpXSAgICAgICA7IHhtbTc9ejRICiAKLQltb3ZkcWEJWE1NV09SRCBbd2soMTApXSwgeG1tMgk7IHdrKDEwKT16M0wKLQltb3ZkcWEJWE1NV09SRCBbd2soMTEpXSwgeG1tMAk7IHdrKDExKT16M0gKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygxMCldLCB4bW0yICA7IHdrKDEwKT16M0wKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygxMSldLCB4bW0wICA7IHdrKDExKT16M0gKIAotCTsgKE9yaWdpbmFsKQotCTsgejEgPSB0bXAwICsgdG1wMzsgIHoyID0gdG1wMSArIHRtcDI7Ci0JOyB0bXAwID0gdG1wMCAqIDAuMjk4NjMxMzM2OyAgdG1wMSA9IHRtcDEgKiAyLjA1MzExOTg2OTsKLQk7IHRtcDIgPSB0bXAyICogMy4wNzI3MTEwMjY7ICB0bXAzID0gdG1wMyAqIDEuNTAxMzIxMTEwOwotCTsgejEgPSB6MSAqIC0wLjg5OTk3NjIyMzsgIHoyID0gejIgKiAtMi41NjI5MTU0NDc7Ci0JOyB0bXAwICs9IHoxICsgejM7ICB0bXAxICs9IHoyICsgejQ7Ci0JOyB0bXAyICs9IHoyICsgejM7ICB0bXAzICs9IHoxICsgejQ7Ci0JOwotCTsgKFRoaXMgaW1wbGVtZW50YXRpb24pCi0JOyB0bXAwID0gdG1wMCAqICgwLjI5ODYzMTMzNiAtIDAuODk5OTc2MjIzKSArIHRtcDMgKiAtMC44OTk5NzYyMjM7Ci0JOyB0bXAxID0gdG1wMSAqICgyLjA1MzExOTg2OSAtIDIuNTYyOTE1NDQ3KSArIHRtcDIgKiAtMi41NjI5MTU0NDc7Ci0JOyB0bXAyID0gdG1wMSAqIC0yLjU2MjkxNTQ0NyArIHRtcDIgKiAoMy4wNzI3MTEwMjYgLSAyLjU2MjkxNTQ0Nyk7Ci0JOyB0bXAzID0gdG1wMCAqIC0wLjg5OTk3NjIyMyArIHRtcDMgKiAoMS41MDEzMjExMTAgLSAwLjg5OTk3NjIyMyk7Ci0JOyB0bXAwICs9IHozOyAgdG1wMSArPSB6NDsKLQk7IHRtcDIgKz0gejM7ICB0bXAzICs9IHo0OworICAgICAgICA7IChPcmlnaW5hbCkKKyAgICAgICAgOyB6MSA9IHRtcDAgKyB0bXAzOyAgejIgPSB0bXAxICsgdG1wMjsKKyAgICAgICAgOyB0bXAwID0gdG1wMCAqIDAuMjk4NjMxMzM2OyAgdG1wMSA9IHRtcDEgKiAyLjA1MzExOTg2OTsKKyAgICAgICAgOyB0bXAyID0gdG1wMiAqIDMuMDcyNzExMDI2OyAgdG1wMyA9IHRtcDMgKiAxLjUwMTMyMTExMDsKKyAgICAgICAgOyB6MSA9IHoxICogLTAuODk5OTc2MjIzOyAgejIgPSB6MiAqIC0yLjU2MjkxNTQ0NzsKKyAgICAgICAgOyB0bXAwICs9IHoxICsgejM7ICB0bXAxICs9IHoyICsgejQ7CisgICAgICAgIDsgdG1wMiArPSB6MiArIHozOyAgdG1wMyArPSB6MSArIHo0OworICAgICAgICA7CisgICAgICAgIDsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisgICAgICAgIDsgdG1wMCA9IHRtcDAgKiAoMC4yOTg2MzEzMzYgLSAwLjg5OTk3NjIyMykgKyB0bXAzICogLTAuODk5OTc2MjIzOworICAgICAgICA7IHRtcDEgPSB0bXAxICogKDIuMDUzMTE5ODY5IC0gMi41NjI5MTU0NDcpICsgdG1wMiAqIC0yLjU2MjkxNTQ0NzsKKyAgICAgICAgOyB0bXAyID0gdG1wMSAqIC0yLjU2MjkxNTQ0NyArIHRtcDIgKiAoMy4wNzI3MTEwMjYgLSAyLjU2MjkxNTQ0Nyk7CisgICAgICAgIDsgdG1wMyA9IHRtcDAgKiAtMC44OTk5NzYyMjMgKyB0bXAzICogKDEuNTAxMzIxMTEwIC0gMC44OTk5NzYyMjMpOworICAgICAgICA7IHRtcDAgKz0gejM7ICB0bXAxICs9IHo0OworICAgICAgICA7IHRtcDIgKz0gejM7ICB0bXAzICs9IHo0OwogCi0JbW92ZHFhICAgIHhtbTIseG1tMwotCW1vdmRxYSAgICB4bW0wLHhtbTMKLQlwdW5wY2tsd2QgeG1tMix4bW00Ci0JcHVucGNraHdkIHhtbTAseG1tNAotCW1vdmRxYSAgICB4bW0zLHhtbTIKLQltb3ZkcWEgICAgeG1tNCx4bW0wCi0JcG1hZGR3ZCAgIHhtbTIsW0dPVE9GRihlYngsUFdfTUYwNjBfTUYwODkpXQk7IHhtbTI9dG1wMEwKLQlwbWFkZHdkICAgeG1tMCxbR09UT0ZGKGVieCxQV19NRjA2MF9NRjA4OSldCTsgeG1tMD10bXAwSAotCXBtYWRkd2QgICB4bW0zLFtHT1RPRkYoZWJ4LFBXX01GMDg5X0YwNjApXQk7IHhtbTM9dG1wM0wKLQlwbWFkZHdkICAgeG1tNCxbR09UT0ZGKGVieCxQV19NRjA4OV9GMDYwKV0JOyB4bW00PXRtcDNICisgICAgICAgIG1vdmRxYSAgICB4bW0yLHhtbTMKKyAgICAgICAgbW92ZHFhICAgIHhtbTAseG1tMworICAgICAgICBwdW5wY2tsd2QgeG1tMix4bW00CisgICAgICAgIHB1bnBja2h3ZCB4bW0wLHhtbTQKKyAgICAgICAgbW92ZHFhICAgIHhtbTMseG1tMgorICAgICAgICBtb3ZkcWEgICAgeG1tNCx4bW0wCisgICAgICAgIHBtYWRkd2QgICB4bW0yLFtHT1RPRkYoZWJ4LFBXX01GMDYwX01GMDg5KV0gICAgIDsgeG1tMj10bXAwTAorICAgICAgICBwbWFkZHdkICAgeG1tMCxbR09UT0ZGKGVieCxQV19NRjA2MF9NRjA4OSldICAgICA7IHhtbTA9dG1wMEgKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTMsW0dPVE9GRihlYngsUFdfTUYwODlfRjA2MCldICAgICAgOyB4bW0zPXRtcDNMCisgICAgICAgIHBtYWRkd2QgICB4bW00LFtHT1RPRkYoZWJ4LFBXX01GMDg5X0YwNjApXSAgICAgIDsgeG1tND10bXAzSAogCi0JcGFkZGQJeG1tMiwgWE1NV09SRCBbd2soMTApXQk7IHhtbTI9dG1wMEwKLQlwYWRkZAl4bW0wLCBYTU1XT1JEIFt3aygxMSldCTsgeG1tMD10bXAwSAotCXBhZGRkCXhtbTMseG1tNQkJOyB4bW0zPXRtcDNMCi0JcGFkZGQJeG1tNCx4bW03CQk7IHhtbTQ9dG1wM0gKKyAgICAgICAgcGFkZGQgICB4bW0yLCBYTU1XT1JEIFt3aygxMCldICA7IHhtbTI9dG1wMEwKKyAgICAgICAgcGFkZGQgICB4bW0wLCBYTU1XT1JEIFt3aygxMSldICA7IHhtbTA9dG1wMEgKKyAgICAgICAgcGFkZGQgICB4bW0zLHhtbTUgICAgICAgICAgICAgICA7IHhtbTM9dG1wM0wKKyAgICAgICAgcGFkZGQgICB4bW00LHhtbTcgICAgICAgICAgICAgICA7IHhtbTQ9dG1wM0gKIAotCW1vdmRxYQlYTU1XT1JEIFt3ayg4KV0sIHhtbTIJOyB3ayg4KT10bXAwTAotCW1vdmRxYQlYTU1XT1JEIFt3ayg5KV0sIHhtbTAJOyB3ayg5KT10bXAwSAorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDgpXSwgeG1tMiAgIDsgd2soOCk9dG1wMEwKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3ayg5KV0sIHhtbTAgICA7IHdrKDkpPXRtcDBICiAKLQltb3ZkcWEgICAgeG1tMix4bW0xCi0JbW92ZHFhICAgIHhtbTAseG1tMQotCXB1bnBja2x3ZCB4bW0yLHhtbTYKLQlwdW5wY2tod2QgeG1tMCx4bW02Ci0JbW92ZHFhICAgIHhtbTEseG1tMgotCW1vdmRxYSAgICB4bW02LHhtbTAKLQlwbWFkZHdkICAgeG1tMixbR09UT0ZGKGVieCxQV19NRjA1MF9NRjI1NildCTsgeG1tMj10bXAxTAotCXBtYWRkd2QgICB4bW0wLFtHT1RPRkYoZWJ4LFBXX01GMDUwX01GMjU2KV0JOyB4bW0wPXRtcDFICi0JcG1hZGR3ZCAgIHhtbTEsW0dPVE9GRihlYngsUFdfTUYyNTZfRjA1MCldCTsgeG1tMT10bXAyTAotCXBtYWRkd2QgICB4bW02LFtHT1RPRkYoZWJ4LFBXX01GMjU2X0YwNTApXQk7IHhtbTY9dG1wMkgKKyAgICAgICAgbW92ZHFhICAgIHhtbTIseG1tMQorICAgICAgICBtb3ZkcWEgICAgeG1tMCx4bW0xCisgICAgICAgIHB1bnBja2x3ZCB4bW0yLHhtbTYKKyAgICAgICAgcHVucGNraHdkIHhtbTAseG1tNgorICAgICAgICBtb3ZkcWEgICAgeG1tMSx4bW0yCisgICAgICAgIG1vdmRxYSAgICB4bW02LHhtbTAKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTIsW0dPVE9GRihlYngsUFdfTUYwNTBfTUYyNTYpXSAgICAgOyB4bW0yPXRtcDFMCisgICAgICAgIHBtYWRkd2QgICB4bW0wLFtHT1RPRkYoZWJ4LFBXX01GMDUwX01GMjU2KV0gICAgIDsgeG1tMD10bXAxSAorICAgICAgICBwbWFkZHdkICAgeG1tMSxbR09UT0ZGKGVieCxQV19NRjI1Nl9GMDUwKV0gICAgICA7IHhtbTE9dG1wMkwKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTYsW0dPVE9GRihlYngsUFdfTUYyNTZfRjA1MCldICAgICAgOyB4bW02PXRtcDJICiAKLQlwYWRkZAl4bW0yLHhtbTUJCTsgeG1tMj10bXAxTAotCXBhZGRkCXhtbTAseG1tNwkJOyB4bW0wPXRtcDFICi0JcGFkZGQJeG1tMSwgWE1NV09SRCBbd2soMTApXQk7IHhtbTE9dG1wMkwKLQlwYWRkZAl4bW02LCBYTU1XT1JEIFt3aygxMSldCTsgeG1tNj10bXAySAorICAgICAgICBwYWRkZCAgIHhtbTIseG1tNSAgICAgICAgICAgICAgIDsgeG1tMj10bXAxTAorICAgICAgICBwYWRkZCAgIHhtbTAseG1tNyAgICAgICAgICAgICAgIDsgeG1tMD10bXAxSAorICAgICAgICBwYWRkZCAgIHhtbTEsIFhNTVdPUkQgW3drKDEwKV0gIDsgeG1tMT10bXAyTAorICAgICAgICBwYWRkZCAgIHhtbTYsIFhNTVdPUkQgW3drKDExKV0gIDsgeG1tNj10bXAySAogCi0JbW92ZHFhCVhNTVdPUkQgW3drKDEwKV0sIHhtbTIJOyB3aygxMCk9dG1wMUwKLQltb3ZkcWEJWE1NV09SRCBbd2soMTEpXSwgeG1tMAk7IHdrKDExKT10bXAxSAorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDEwKV0sIHhtbTIgIDsgd2soMTApPXRtcDFMCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMTEpXSwgeG1tMCAgOyB3aygxMSk9dG1wMUgKIAotCTsgLS0gRmluYWwgb3V0cHV0IHN0YWdlCisgICAgICAgIDsgLS0gRmluYWwgb3V0cHV0IHN0YWdlCiAKLQltb3ZkcWEJeG1tNSwgWE1NV09SRCBbd2soMCldCTsgeG1tNT10bXAxMEwKLQltb3ZkcWEJeG1tNywgWE1NV09SRCBbd2soMSldCTsgeG1tNz10bXAxMEgKKyAgICAgICAgbW92ZHFhICB4bW01LCBYTU1XT1JEIFt3aygwKV0gICA7IHhtbTU9dG1wMTBMCisgICAgICAgIG1vdmRxYSAgeG1tNywgWE1NV09SRCBbd2soMSldICAgOyB4bW03PXRtcDEwSAogCi0JbW92ZHFhCXhtbTIseG1tNQotCW1vdmRxYQl4bW0wLHhtbTcKLQlwYWRkZAl4bW01LHhtbTMJCTsgeG1tNT1kYXRhMEwKLQlwYWRkZAl4bW03LHhtbTQJCTsgeG1tNz1kYXRhMEgKLQlwc3ViZAl4bW0yLHhtbTMJCTsgeG1tMj1kYXRhN0wKLQlwc3ViZAl4bW0wLHhtbTQJCTsgeG1tMD1kYXRhN0gKKyAgICAgICAgbW92ZHFhICB4bW0yLHhtbTUKKyAgICAgICAgbW92ZHFhICB4bW0wLHhtbTcKKyAgICAgICAgcGFkZGQgICB4bW01LHhtbTMgICAgICAgICAgICAgICA7IHhtbTU9ZGF0YTBMCisgICAgICAgIHBhZGRkICAgeG1tNyx4bW00ICAgICAgICAgICAgICAgOyB4bW03PWRhdGEwSAorICAgICAgICBwc3ViZCAgIHhtbTIseG1tMyAgICAgICAgICAgICAgIDsgeG1tMj1kYXRhN0wKKyAgICAgICAgcHN1YmQgICB4bW0wLHhtbTQgICAgICAgICAgICAgICA7IHhtbTA9ZGF0YTdICiAKLQltb3ZkcWEJeG1tMyxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0JOyB4bW0zPVtQRF9ERVNDQUxFX1AxXQorICAgICAgICBtb3ZkcWEgIHhtbTMsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldICAgICAgICA7IHhtbTM9W1BEX0RFU0NBTEVfUDFdCiAKLQlwYWRkZAl4bW01LHhtbTMKLQlwYWRkZAl4bW03LHhtbTMKLQlwc3JhZAl4bW01LERFU0NBTEVfUDEKLQlwc3JhZAl4bW03LERFU0NBTEVfUDEKLQlwYWRkZAl4bW0yLHhtbTMKLQlwYWRkZAl4bW0wLHhtbTMKLQlwc3JhZAl4bW0yLERFU0NBTEVfUDEKLQlwc3JhZAl4bW0wLERFU0NBTEVfUDEKKyAgICAgICAgcGFkZGQgICB4bW01LHhtbTMKKyAgICAgICAgcGFkZGQgICB4bW03LHhtbTMKKyAgICAgICAgcHNyYWQgICB4bW01LERFU0NBTEVfUDEKKyAgICAgICAgcHNyYWQgICB4bW03LERFU0NBTEVfUDEKKyAgICAgICAgcGFkZGQgICB4bW0yLHhtbTMKKyAgICAgICAgcGFkZGQgICB4bW0wLHhtbTMKKyAgICAgICAgcHNyYWQgICB4bW0yLERFU0NBTEVfUDEKKyAgICAgICAgcHNyYWQgICB4bW0wLERFU0NBTEVfUDEKIAotCXBhY2tzc2R3ICB4bW01LHhtbTcJCTsgeG1tNT1kYXRhMD0oMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcpCi0JcGFja3NzZHcgIHhtbTIseG1tMAkJOyB4bW0yPWRhdGE3PSg3MCA3MSA3MiA3MyA3NCA3NSA3NiA3NykKKyAgICAgICAgcGFja3NzZHcgIHhtbTUseG1tNyAgICAgICAgICAgICA7IHhtbTU9ZGF0YTA9KDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3KQorICAgICAgICBwYWNrc3NkdyAgeG1tMix4bW0wICAgICAgICAgICAgIDsgeG1tMj1kYXRhNz0oNzAgNzEgNzIgNzMgNzQgNzUgNzYgNzcpCiAKLQltb3ZkcWEJeG1tNCwgWE1NV09SRCBbd2soNCldCTsgeG1tND10bXAxMUwKLQltb3ZkcWEJeG1tMywgWE1NV09SRCBbd2soNSldCTsgeG1tMz10bXAxMUgKKyAgICAgICAgbW92ZHFhICB4bW00LCBYTU1XT1JEIFt3ayg0KV0gICA7IHhtbTQ9dG1wMTFMCisgICAgICAgIG1vdmRxYSAgeG1tMywgWE1NV09SRCBbd2soNSldICAgOyB4bW0zPXRtcDExSAogCi0JbW92ZHFhCXhtbTcseG1tNAotCW1vdmRxYQl4bW0wLHhtbTMKLQlwYWRkZAl4bW00LHhtbTEJCTsgeG1tND1kYXRhMUwKLQlwYWRkZAl4bW0zLHhtbTYJCTsgeG1tMz1kYXRhMUgKLQlwc3ViZAl4bW03LHhtbTEJCTsgeG1tNz1kYXRhNkwKLQlwc3ViZAl4bW0wLHhtbTYJCTsgeG1tMD1kYXRhNkgKKyAgICAgICAgbW92ZHFhICB4bW03LHhtbTQKKyAgICAgICAgbW92ZHFhICB4bW0wLHhtbTMKKyAgICAgICAgcGFkZGQgICB4bW00LHhtbTEgICAgICAgICAgICAgICA7IHhtbTQ9ZGF0YTFMCisgICAgICAgIHBhZGRkICAgeG1tMyx4bW02ICAgICAgICAgICAgICAgOyB4bW0zPWRhdGExSAorICAgICAgICBwc3ViZCAgIHhtbTcseG1tMSAgICAgICAgICAgICAgIDsgeG1tNz1kYXRhNkwKKyAgICAgICAgcHN1YmQgICB4bW0wLHhtbTYgICAgICAgICAgICAgICA7IHhtbTA9ZGF0YTZICiAKLQltb3ZkcWEJeG1tMSxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0JOyB4bW0xPVtQRF9ERVNDQUxFX1AxXQorICAgICAgICBtb3ZkcWEgIHhtbTEsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldICAgICAgICA7IHhtbTE9W1BEX0RFU0NBTEVfUDFdCiAKLQlwYWRkZAl4bW00LHhtbTEKLQlwYWRkZAl4bW0zLHhtbTEKLQlwc3JhZAl4bW00LERFU0NBTEVfUDEKLQlwc3JhZAl4bW0zLERFU0NBTEVfUDEKLQlwYWRkZAl4bW03LHhtbTEKLQlwYWRkZAl4bW0wLHhtbTEKLQlwc3JhZAl4bW03LERFU0NBTEVfUDEKLQlwc3JhZAl4bW0wLERFU0NBTEVfUDEKKyAgICAgICAgcGFkZGQgICB4bW00LHhtbTEKKyAgICAgICAgcGFkZGQgICB4bW0zLHhtbTEKKyAgICAgICAgcHNyYWQgICB4bW00LERFU0NBTEVfUDEKKyAgICAgICAgcHNyYWQgICB4bW0zLERFU0NBTEVfUDEKKyAgICAgICAgcGFkZGQgICB4bW03LHhtbTEKKyAgICAgICAgcGFkZGQgICB4bW0wLHhtbTEKKyAgICAgICAgcHNyYWQgICB4bW03LERFU0NBTEVfUDEKKyAgICAgICAgcHNyYWQgICB4bW0wLERFU0NBTEVfUDEKIAotCXBhY2tzc2R3ICB4bW00LHhtbTMJCTsgeG1tND1kYXRhMT0oMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcpCi0JcGFja3NzZHcgIHhtbTcseG1tMAkJOyB4bW03PWRhdGE2PSg2MCA2MSA2MiA2MyA2NCA2NSA2NiA2NykKKyAgICAgICAgcGFja3NzZHcgIHhtbTQseG1tMyAgICAgICAgICAgICA7IHhtbTQ9ZGF0YTE9KDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3KQorICAgICAgICBwYWNrc3NkdyAgeG1tNyx4bW0wICAgICAgICAgICAgIDsgeG1tNz1kYXRhNj0oNjAgNjEgNjIgNjMgNjQgNjUgNjYgNjcpCiAKLQltb3ZkcWEgICAgeG1tNix4bW01CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKLQlwdW5wY2tsd2QgeG1tNSx4bW00CQk7IHhtbTU9KDAwIDEwIDAxIDExIDAyIDEyIDAzIDEzKQotCXB1bnBja2h3ZCB4bW02LHhtbTQJCTsgeG1tNj0oMDQgMTQgMDUgMTUgMDYgMTYgMDcgMTcpCi0JbW92ZHFhICAgIHhtbTEseG1tNwkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCi0JcHVucGNrbHdkIHhtbTcseG1tMgkJOyB4bW03PSg2MCA3MCA2MSA3MSA2MiA3MiA2MyA3MykKLQlwdW5wY2tod2QgeG1tMSx4bW0yCQk7IHhtbTE9KDY0IDc0IDY1IDc1IDY2IDc2IDY3IDc3KQorICAgICAgICBtb3ZkcWEgICAgeG1tNix4bW01ICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgICAgICBwdW5wY2tsd2QgeG1tNSx4bW00ICAgICAgICAgICAgIDsgeG1tNT0oMDAgMTAgMDEgMTEgMDIgMTIgMDMgMTMpCisgICAgICAgIHB1bnBja2h3ZCB4bW02LHhtbTQgICAgICAgICAgICAgOyB4bW02PSgwNCAxNCAwNSAxNSAwNiAxNiAwNyAxNykKKyAgICAgICAgbW92ZHFhICAgIHhtbTEseG1tNyAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICAgICAgcHVucGNrbHdkIHhtbTcseG1tMiAgICAgICAgICAgICA7IHhtbTc9KDYwIDcwIDYxIDcxIDYyIDcyIDYzIDczKQorICAgICAgICBwdW5wY2tod2QgeG1tMSx4bW0yICAgICAgICAgICAgIDsgeG1tMT0oNjQgNzQgNjUgNzUgNjYgNzYgNjcgNzcpCiAKLQltb3ZkcWEJeG1tMywgWE1NV09SRCBbd2soNildCTsgeG1tMz10bXAxMkwKLQltb3ZkcWEJeG1tMCwgWE1NV09SRCBbd2soNyldCTsgeG1tMD10bXAxMkgKLQltb3ZkcWEJeG1tNCwgWE1NV09SRCBbd2soMTApXQk7IHhtbTQ9dG1wMUwKLQltb3ZkcWEJeG1tMiwgWE1NV09SRCBbd2soMTEpXQk7IHhtbTI9dG1wMUgKKyAgICAgICAgbW92ZHFhICB4bW0zLCBYTU1XT1JEIFt3ayg2KV0gICA7IHhtbTM9dG1wMTJMCisgICAgICAgIG1vdmRxYSAgeG1tMCwgWE1NV09SRCBbd2soNyldICAgOyB4bW0wPXRtcDEySAorICAgICAgICBtb3ZkcWEgIHhtbTQsIFhNTVdPUkQgW3drKDEwKV0gIDsgeG1tND10bXAxTAorICAgICAgICBtb3ZkcWEgIHhtbTIsIFhNTVdPUkQgW3drKDExKV0gIDsgeG1tMj10bXAxSAogCi0JbW92ZHFhCVhNTVdPUkQgW3drKDApXSwgeG1tNQk7IHdrKDApPSgwMCAxMCAwMSAxMSAwMiAxMiAwMyAxMykKLQltb3ZkcWEJWE1NV09SRCBbd2soMSldLCB4bW02CTsgd2soMSk9KDA0IDE0IDA1IDE1IDA2IDE2IDA3IDE3KQotCW1vdmRxYQlYTU1XT1JEIFt3ayg0KV0sIHhtbTcJOyB3ayg0KT0oNjAgNzAgNjEgNzEgNjIgNzIgNjMgNzMpCi0JbW92ZHFhCVhNTVdPUkQgW3drKDUpXSwgeG1tMQk7IHdrKDUpPSg2NCA3NCA2NSA3NSA2NiA3NiA2NyA3NykKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygwKV0sIHhtbTUgICA7IHdrKDApPSgwMCAxMCAwMSAxMSAwMiAxMiAwMyAxMykKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygxKV0sIHhtbTYgICA7IHdrKDEpPSgwNCAxNCAwNSAxNSAwNiAxNiAwNyAxNykKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3ayg0KV0sIHhtbTcgICA7IHdrKDQpPSg2MCA3MCA2MSA3MSA2MiA3MiA2MyA3MykKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3ayg1KV0sIHhtbTEgICA7IHdrKDUpPSg2NCA3NCA2NSA3NSA2NiA3NiA2NyA3NykKIAotCW1vdmRxYQl4bW01LHhtbTMKLQltb3ZkcWEJeG1tNix4bW0wCi0JcGFkZGQJeG1tMyx4bW00CQk7IHhtbTM9ZGF0YTJMCi0JcGFkZGQJeG1tMCx4bW0yCQk7IHhtbTA9ZGF0YTJICi0JcHN1YmQJeG1tNSx4bW00CQk7IHhtbTU9ZGF0YTVMCi0JcHN1YmQJeG1tNix4bW0yCQk7IHhtbTY9ZGF0YTVICisgICAgICAgIG1vdmRxYSAgeG1tNSx4bW0zCisgICAgICAgIG1vdmRxYSAgeG1tNix4bW0wCisgICAgICAgIHBhZGRkICAgeG1tMyx4bW00ICAgICAgICAgICAgICAgOyB4bW0zPWRhdGEyTAorICAgICAgICBwYWRkZCAgIHhtbTAseG1tMiAgICAgICAgICAgICAgIDsgeG1tMD1kYXRhMkgKKyAgICAgICAgcHN1YmQgICB4bW01LHhtbTQgICAgICAgICAgICAgICA7IHhtbTU9ZGF0YTVMCisgICAgICAgIHBzdWJkICAgeG1tNix4bW0yICAgICAgICAgICAgICAgOyB4bW02PWRhdGE1SAogCi0JbW92ZHFhCXhtbTcsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldCTsgeG1tNz1bUERfREVTQ0FMRV9QMV0KKyAgICAgICAgbW92ZHFhICB4bW03LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXSAgICAgICAgOyB4bW03PVtQRF9ERVNDQUxFX1AxXQogCi0JcGFkZGQJeG1tMyx4bW03Ci0JcGFkZGQJeG1tMCx4bW03Ci0JcHNyYWQJeG1tMyxERVNDQUxFX1AxCi0JcHNyYWQJeG1tMCxERVNDQUxFX1AxCi0JcGFkZGQJeG1tNSx4bW03Ci0JcGFkZGQJeG1tNix4bW03Ci0JcHNyYWQJeG1tNSxERVNDQUxFX1AxCi0JcHNyYWQJeG1tNixERVNDQUxFX1AxCisgICAgICAgIHBhZGRkICAgeG1tMyx4bW03CisgICAgICAgIHBhZGRkICAgeG1tMCx4bW03CisgICAgICAgIHBzcmFkICAgeG1tMyxERVNDQUxFX1AxCisgICAgICAgIHBzcmFkICAgeG1tMCxERVNDQUxFX1AxCisgICAgICAgIHBhZGRkICAgeG1tNSx4bW03CisgICAgICAgIHBhZGRkICAgeG1tNix4bW03CisgICAgICAgIHBzcmFkICAgeG1tNSxERVNDQUxFX1AxCisgICAgICAgIHBzcmFkICAgeG1tNixERVNDQUxFX1AxCiAKLQlwYWNrc3NkdyAgeG1tMyx4bW0wCQk7IHhtbTM9ZGF0YTI9KDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3KQotCXBhY2tzc2R3ICB4bW01LHhtbTYJCTsgeG1tNT1kYXRhNT0oNTAgNTEgNTIgNTMgNTQgNTUgNTYgNTcpCisgICAgICAgIHBhY2tzc2R3ICB4bW0zLHhtbTAgICAgICAgICAgICAgOyB4bW0zPWRhdGEyPSgyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNykKKyAgICAgICAgcGFja3NzZHcgIHhtbTUseG1tNiAgICAgICAgICAgICA7IHhtbTU9ZGF0YTU9KDUwIDUxIDUyIDUzIDU0IDU1IDU2IDU3KQogCi0JbW92ZHFhCXhtbTEsIFhNTVdPUkQgW3drKDIpXQk7IHhtbTE9dG1wMTNMCi0JbW92ZHFhCXhtbTQsIFhNTVdPUkQgW3drKDMpXQk7IHhtbTQ9dG1wMTNICi0JbW92ZHFhCXhtbTIsIFhNTVdPUkQgW3drKDgpXQk7IHhtbTI9dG1wMEwKLQltb3ZkcWEJeG1tNywgWE1NV09SRCBbd2soOSldCTsgeG1tNz10bXAwSAorICAgICAgICBtb3ZkcWEgIHhtbTEsIFhNTVdPUkQgW3drKDIpXSAgIDsgeG1tMT10bXAxM0wKKyAgICAgICAgbW92ZHFhICB4bW00LCBYTU1XT1JEIFt3aygzKV0gICA7IHhtbTQ9dG1wMTNICisgICAgICAgIG1vdmRxYSAgeG1tMiwgWE1NV09SRCBbd2soOCldICAgOyB4bW0yPXRtcDBMCisgICAgICAgIG1vdmRxYSAgeG1tNywgWE1NV09SRCBbd2soOSldICAgOyB4bW03PXRtcDBICiAKLQltb3ZkcWEJeG1tMCx4bW0xCi0JbW92ZHFhCXhtbTYseG1tNAotCXBhZGRkCXhtbTEseG1tMgkJOyB4bW0xPWRhdGEzTAotCXBhZGRkCXhtbTQseG1tNwkJOyB4bW00PWRhdGEzSAotCXBzdWJkCXhtbTAseG1tMgkJOyB4bW0wPWRhdGE0TAotCXBzdWJkCXhtbTYseG1tNwkJOyB4bW02PWRhdGE0SAorICAgICAgICBtb3ZkcWEgIHhtbTAseG1tMQorICAgICAgICBtb3ZkcWEgIHhtbTYseG1tNAorICAgICAgICBwYWRkZCAgIHhtbTEseG1tMiAgICAgICAgICAgICAgIDsgeG1tMT1kYXRhM0wKKyAgICAgICAgcGFkZGQgICB4bW00LHhtbTcgICAgICAgICAgICAgICA7IHhtbTQ9ZGF0YTNICisgICAgICAgIHBzdWJkICAgeG1tMCx4bW0yICAgICAgICAgICAgICAgOyB4bW0wPWRhdGE0TAorICAgICAgICBwc3ViZCAgIHhtbTYseG1tNyAgICAgICAgICAgICAgIDsgeG1tNj1kYXRhNEgKIAotCW1vdmRxYQl4bW0yLFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXQk7IHhtbTI9W1BEX0RFU0NBTEVfUDFdCisgICAgICAgIG1vdmRxYSAgeG1tMixbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0gICAgICAgIDsgeG1tMj1bUERfREVTQ0FMRV9QMV0KIAotCXBhZGRkCXhtbTEseG1tMgotCXBhZGRkCXhtbTQseG1tMgotCXBzcmFkCXhtbTEsREVTQ0FMRV9QMQotCXBzcmFkCXhtbTQsREVTQ0FMRV9QMQotCXBhZGRkCXhtbTAseG1tMgotCXBhZGRkCXhtbTYseG1tMgotCXBzcmFkCXhtbTAsREVTQ0FMRV9QMQotCXBzcmFkCXhtbTYsREVTQ0FMRV9QMQorICAgICAgICBwYWRkZCAgIHhtbTEseG1tMgorICAgICAgICBwYWRkZCAgIHhtbTQseG1tMgorICAgICAgICBwc3JhZCAgIHhtbTEsREVTQ0FMRV9QMQorICAgICAgICBwc3JhZCAgIHhtbTQsREVTQ0FMRV9QMQorICAgICAgICBwYWRkZCAgIHhtbTAseG1tMgorICAgICAgICBwYWRkZCAgIHhtbTYseG1tMgorICAgICAgICBwc3JhZCAgIHhtbTAsREVTQ0FMRV9QMQorICAgICAgICBwc3JhZCAgIHhtbTYsREVTQ0FMRV9QMQogCi0JcGFja3NzZHcgIHhtbTEseG1tNAkJOyB4bW0xPWRhdGEzPSgzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNykKLQlwYWNrc3NkdyAgeG1tMCx4bW02CQk7IHhtbTA9ZGF0YTQ9KDQwIDQxIDQyIDQzIDQ0IDQ1IDQ2IDQ3KQorICAgICAgICBwYWNrc3NkdyAgeG1tMSx4bW00ICAgICAgICAgICAgIDsgeG1tMT1kYXRhMz0oMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcpCisgICAgICAgIHBhY2tzc2R3ICB4bW0wLHhtbTYgICAgICAgICAgICAgOyB4bW0wPWRhdGE0PSg0MCA0MSA0MiA0MyA0NCA0NSA0NiA0NykKIAotCW1vdmRxYQl4bW03LCBYTU1XT1JEIFt3aygwKV0JOyB4bW03PSgwMCAxMCAwMSAxMSAwMiAxMiAwMyAxMykKLQltb3ZkcWEJeG1tMiwgWE1NV09SRCBbd2soMSldCTsgeG1tMj0oMDQgMTQgMDUgMTUgMDYgMTYgMDcgMTcpCisgICAgICAgIG1vdmRxYSAgeG1tNywgWE1NV09SRCBbd2soMCldICAgOyB4bW03PSgwMCAxMCAwMSAxMSAwMiAxMiAwMyAxMykKKyAgICAgICAgbW92ZHFhICB4bW0yLCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTI9KDA0IDE0IDA1IDE1IDA2IDE2IDA3IDE3KQogCi0JbW92ZHFhICAgIHhtbTQseG1tMwkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCi0JcHVucGNrbHdkIHhtbTMseG1tMQkJOyB4bW0zPSgyMCAzMCAyMSAzMSAyMiAzMiAyMyAzMykKLQlwdW5wY2tod2QgeG1tNCx4bW0xCQk7IHhtbTQ9KDI0IDM0IDI1IDM1IDI2IDM2IDI3IDM3KQotCW1vdmRxYSAgICB4bW02LHhtbTAJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQotCXB1bnBja2x3ZCB4bW0wLHhtbTUJCTsgeG1tMD0oNDAgNTAgNDEgNTEgNDIgNTIgNDMgNTMpCi0JcHVucGNraHdkIHhtbTYseG1tNQkJOyB4bW02PSg0NCA1NCA0NSA1NSA0NiA1NiA0NyA1NykKKyAgICAgICAgbW92ZHFhICAgIHhtbTQseG1tMyAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICAgICAgcHVucGNrbHdkIHhtbTMseG1tMSAgICAgICAgICAgICA7IHhtbTM9KDIwIDMwIDIxIDMxIDIyIDMyIDIzIDMzKQorICAgICAgICBwdW5wY2tod2QgeG1tNCx4bW0xICAgICAgICAgICAgIDsgeG1tND0oMjQgMzQgMjUgMzUgMjYgMzYgMjcgMzcpCisgICAgICAgIG1vdmRxYSAgICB4bW02LHhtbTAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgICAgIHB1bnBja2x3ZCB4bW0wLHhtbTUgICAgICAgICAgICAgOyB4bW0wPSg0MCA1MCA0MSA1MSA0MiA1MiA0MyA1MykKKyAgICAgICAgcHVucGNraHdkIHhtbTYseG1tNSAgICAgICAgICAgICA7IHhtbTY9KDQ0IDU0IDQ1IDU1IDQ2IDU2IDQ3IDU3KQogCi0JbW92ZHFhICAgIHhtbTEseG1tNwkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCi0JcHVucGNrbGRxIHhtbTcseG1tMwkJOyB4bW03PSgwMCAxMCAyMCAzMCAwMSAxMSAyMSAzMSkKLQlwdW5wY2toZHEgeG1tMSx4bW0zCQk7IHhtbTE9KDAyIDEyIDIyIDMyIDAzIDEzIDIzIDMzKQotCW1vdmRxYSAgICB4bW01LHhtbTIJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQotCXB1bnBja2xkcSB4bW0yLHhtbTQJCTsgeG1tMj0oMDQgMTQgMjQgMzQgMDUgMTUgMjUgMzUpCi0JcHVucGNraGRxIHhtbTUseG1tNAkJOyB4bW01PSgwNiAxNiAyNiAzNiAwNyAxNyAyNyAzNykKKyAgICAgICAgbW92ZHFhICAgIHhtbTEseG1tNyAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICAgICAgcHVucGNrbGRxIHhtbTcseG1tMyAgICAgICAgICAgICA7IHhtbTc9KDAwIDEwIDIwIDMwIDAxIDExIDIxIDMxKQorICAgICAgICBwdW5wY2toZHEgeG1tMSx4bW0zICAgICAgICAgICAgIDsgeG1tMT0oMDIgMTIgMjIgMzIgMDMgMTMgMjMgMzMpCisgICAgICAgIG1vdmRxYSAgICB4bW01LHhtbTIgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgICAgIHB1bnBja2xkcSB4bW0yLHhtbTQgICAgICAgICAgICAgOyB4bW0yPSgwNCAxNCAyNCAzNCAwNSAxNSAyNSAzNSkKKyAgICAgICAgcHVucGNraGRxIHhtbTUseG1tNCAgICAgICAgICAgICA7IHhtbTU9KDA2IDE2IDI2IDM2IDA3IDE3IDI3IDM3KQogCi0JbW92ZHFhCXhtbTMsIFhNTVdPUkQgW3drKDQpXQk7IHhtbTM9KDYwIDcwIDYxIDcxIDYyIDcyIDYzIDczKQotCW1vdmRxYQl4bW00LCBYTU1XT1JEIFt3ayg1KV0JOyB4bW00PSg2NCA3NCA2NSA3NSA2NiA3NiA2NyA3NykKKyAgICAgICAgbW92ZHFhICB4bW0zLCBYTU1XT1JEIFt3ayg0KV0gICA7IHhtbTM9KDYwIDcwIDYxIDcxIDYyIDcyIDYzIDczKQorICAgICAgICBtb3ZkcWEgIHhtbTQsIFhNTVdPUkQgW3drKDUpXSAgIDsgeG1tND0oNjQgNzQgNjUgNzUgNjYgNzYgNjcgNzcpCiAKLQltb3ZkcWEJWE1NV09SRCBbd2soNildLCB4bW0yCTsgd2soNik9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1KQotCW1vdmRxYQlYTU1XT1JEIFt3ayg3KV0sIHhtbTUJOyB3ayg3KT0oMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soNildLCB4bW0yICAgOyB3ayg2KT0oMDQgMTQgMjQgMzQgMDUgMTUgMjUgMzUpCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soNyldLCB4bW01ICAgOyB3ayg3KT0oMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCiAKLQltb3ZkcWEgICAgeG1tMix4bW0wCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKLQlwdW5wY2tsZHEgeG1tMCx4bW0zCQk7IHhtbTA9KDQwIDUwIDYwIDcwIDQxIDUxIDYxIDcxKQotCXB1bnBja2hkcSB4bW0yLHhtbTMJCTsgeG1tMj0oNDIgNTIgNjIgNzIgNDMgNTMgNjMgNzMpCi0JbW92ZHFhICAgIHhtbTUseG1tNgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCi0JcHVucGNrbGRxIHhtbTYseG1tNAkJOyB4bW02PSg0NCA1NCA2NCA3NCA0NSA1NSA2NSA3NSkKLQlwdW5wY2toZHEgeG1tNSx4bW00CQk7IHhtbTU9KDQ2IDU2IDY2IDc2IDQ3IDU3IDY3IDc3KQorICAgICAgICBtb3ZkcWEgICAgeG1tMix4bW0wICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgICAgICBwdW5wY2tsZHEgeG1tMCx4bW0zICAgICAgICAgICAgIDsgeG1tMD0oNDAgNTAgNjAgNzAgNDEgNTEgNjEgNzEpCisgICAgICAgIHB1bnBja2hkcSB4bW0yLHhtbTMgICAgICAgICAgICAgOyB4bW0yPSg0MiA1MiA2MiA3MiA0MyA1MyA2MyA3MykKKyAgICAgICAgbW92ZHFhICAgIHhtbTUseG1tNiAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICAgICAgcHVucGNrbGRxIHhtbTYseG1tNCAgICAgICAgICAgICA7IHhtbTY9KDQ0IDU0IDY0IDc0IDQ1IDU1IDY1IDc1KQorICAgICAgICBwdW5wY2toZHEgeG1tNSx4bW00ICAgICAgICAgICAgIDsgeG1tNT0oNDYgNTYgNjYgNzYgNDcgNTcgNjcgNzcpCiAKLQltb3ZkcWEgICAgIHhtbTMseG1tNwkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCi0JcHVucGNrbHFkcSB4bW03LHhtbTAJCTsgeG1tNz1jb2wwPSgwMCAxMCAyMCAzMCA0MCA1MCA2MCA3MCkKLQlwdW5wY2tocWRxIHhtbTMseG1tMAkJOyB4bW0zPWNvbDE9KDAxIDExIDIxIDMxIDQxIDUxIDYxIDcxKQotCW1vdmRxYSAgICAgeG1tNCx4bW0xCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKLQlwdW5wY2tscWRxIHhtbTEseG1tMgkJOyB4bW0xPWNvbDI9KDAyIDEyIDIyIDMyIDQyIDUyIDYyIDcyKQotCXB1bnBja2hxZHEgeG1tNCx4bW0yCQk7IHhtbTQ9Y29sMz0oMDMgMTMgMjMgMzMgNDMgNTMgNjMgNzMpCisgICAgICAgIG1vdmRxYSAgICAgeG1tMyx4bW03ICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisgICAgICAgIHB1bnBja2xxZHEgeG1tNyx4bW0wICAgICAgICAgICAgOyB4bW03PWNvbDA9KDAwIDEwIDIwIDMwIDQwIDUwIDYwIDcwKQorICAgICAgICBwdW5wY2tocWRxIHhtbTMseG1tMCAgICAgICAgICAgIDsgeG1tMz1jb2wxPSgwMSAxMSAyMSAzMSA0MSA1MSA2MSA3MSkKKyAgICAgICAgbW92ZHFhICAgICB4bW00LHhtbTEgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKyAgICAgICAgcHVucGNrbHFkcSB4bW0xLHhtbTIgICAgICAgICAgICA7IHhtbTE9Y29sMj0oMDIgMTIgMjIgMzIgNDIgNTIgNjIgNzIpCisgICAgICAgIHB1bnBja2hxZHEgeG1tNCx4bW0yICAgICAgICAgICAgOyB4bW00PWNvbDM9KDAzIDEzIDIzIDMzIDQzIDUzIDYzIDczKQogCi0JbW92ZHFhCXhtbTAsIFhNTVdPUkQgW3drKDYpXQk7IHhtbTA9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1KQotCW1vdmRxYQl4bW0yLCBYTU1XT1JEIFt3ayg3KV0JOyB4bW0yPSgwNiAxNiAyNiAzNiAwNyAxNyAyNyAzNykKKyAgICAgICAgbW92ZHFhICB4bW0wLCBYTU1XT1JEIFt3ayg2KV0gICA7IHhtbTA9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1KQorICAgICAgICBtb3ZkcWEgIHhtbTIsIFhNTVdPUkQgW3drKDcpXSAgIDsgeG1tMj0oMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCiAKLQltb3ZkcWEJWE1NV09SRCBbd2soOCldLCB4bW0zCTsgd2soOCk9Y29sMQotCW1vdmRxYQlYTU1XT1JEIFt3ayg5KV0sIHhtbTQJOyB3ayg5KT1jb2wzCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soOCldLCB4bW0zICAgOyB3ayg4KT1jb2wxCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soOSldLCB4bW00ICAgOyB3ayg5KT1jb2wzCiAKLQltb3ZkcWEgICAgIHhtbTMseG1tMAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCi0JcHVucGNrbHFkcSB4bW0wLHhtbTYJCTsgeG1tMD1jb2w0PSgwNCAxNCAyNCAzNCA0NCA1NCA2NCA3NCkKLQlwdW5wY2tocWRxIHhtbTMseG1tNgkJOyB4bW0zPWNvbDU9KDA1IDE1IDI1IDM1IDQ1IDU1IDY1IDc1KQotCW1vdmRxYSAgICAgeG1tNCx4bW0yCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKLQlwdW5wY2tscWRxIHhtbTIseG1tNQkJOyB4bW0yPWNvbDY9KDA2IDE2IDI2IDM2IDQ2IDU2IDY2IDc2KQotCXB1bnBja2hxZHEgeG1tNCx4bW01CQk7IHhtbTQ9Y29sNz0oMDcgMTcgMjcgMzcgNDcgNTcgNjcgNzcpCisgICAgICAgIG1vdmRxYSAgICAgeG1tMyx4bW0wICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisgICAgICAgIHB1bnBja2xxZHEgeG1tMCx4bW02ICAgICAgICAgICAgOyB4bW0wPWNvbDQ9KDA0IDE0IDI0IDM0IDQ0IDU0IDY0IDc0KQorICAgICAgICBwdW5wY2tocWRxIHhtbTMseG1tNiAgICAgICAgICAgIDsgeG1tMz1jb2w1PSgwNSAxNSAyNSAzNSA0NSA1NSA2NSA3NSkKKyAgICAgICAgbW92ZHFhICAgICB4bW00LHhtbTIgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKyAgICAgICAgcHVucGNrbHFkcSB4bW0yLHhtbTUgICAgICAgICAgICA7IHhtbTI9Y29sNj0oMDYgMTYgMjYgMzYgNDYgNTYgNjYgNzYpCisgICAgICAgIHB1bnBja2hxZHEgeG1tNCx4bW01ICAgICAgICAgICAgOyB4bW00PWNvbDc9KDA3IDE3IDI3IDM3IDQ3IDU3IDY3IDc3KQogCi0JbW92ZHFhCVhNTVdPUkQgW3drKDEwKV0sIHhtbTMJOyB3aygxMCk9Y29sNQotCW1vdmRxYQlYTU1XT1JEIFt3aygxMSldLCB4bW00CTsgd2soMTEpPWNvbDcKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygxMCldLCB4bW0zICA7IHdrKDEwKT1jb2w1CisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMTEpXSwgeG1tNCAgOyB3aygxMSk9Y29sNwogLmNvbHVtbl9lbmQ6CiAKLQk7IC0tIFByZWZldGNoIHRoZSBuZXh0IGNvZWZmaWNpZW50IGJsb2NrCisgICAgICAgIDsgLS0gUHJlZmV0Y2ggdGhlIG5leHQgY29lZmZpY2llbnQgYmxvY2sKIAotCXByZWZldGNobnRhIFtlc2kgKyBEQ1RTSVpFMipTSVpFT0ZfSkNPRUYgKyAwKjMyXQotCXByZWZldGNobnRhIFtlc2kgKyBEQ1RTSVpFMipTSVpFT0ZfSkNPRUYgKyAxKjMyXQotCXByZWZldGNobnRhIFtlc2kgKyBEQ1RTSVpFMipTSVpFT0ZfSkNPRUYgKyAyKjMyXQotCXByZWZldGNobnRhIFtlc2kgKyBEQ1RTSVpFMipTSVpFT0ZfSkNPRUYgKyAzKjMyXQorICAgICAgICBwcmVmZXRjaG50YSBbZXNpICsgRENUU0laRTIqU0laRU9GX0pDT0VGICsgMCozMl0KKyAgICAgICAgcHJlZmV0Y2hudGEgW2VzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDEqMzJdCisgICAgICAgIHByZWZldGNobnRhIFtlc2kgKyBEQ1RTSVpFMipTSVpFT0ZfSkNPRUYgKyAyKjMyXQorICAgICAgICBwcmVmZXRjaG50YSBbZXNpICsgRENUU0laRTIqU0laRU9GX0pDT0VGICsgMyozMl0KIAotCTsgLS0tLSBQYXNzIDI6IHByb2Nlc3Mgcm93cyBmcm9tIHdvcmsgYXJyYXksIHN0b3JlIGludG8gb3V0cHV0IGFycmF5LgorICAgICAgICA7IC0tLS0gUGFzcyAyOiBwcm9jZXNzIHJvd3MgZnJvbSB3b3JrIGFycmF5LCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4KIAotCW1vdgllYXgsIFtvcmlnaW5hbF9lYnBdCi0JbW92CWVkaSwgSlNBTVBBUlJBWSBbb3V0cHV0X2J1ZihlYXgpXQk7IChKU0FNUFJPVyAqKQotCW1vdgllYXgsIEpESU1FTlNJT04gW291dHB1dF9jb2woZWF4KV0KKyAgICAgICAgbW92ICAgICBlYXgsIFtvcmlnaW5hbF9lYnBdCisgICAgICAgIG1vdiAgICAgZWRpLCBKU0FNUEFSUkFZIFtvdXRwdXRfYnVmKGVheCldICAgICAgIDsgKEpTQU1QUk9XICopCisgICAgICAgIG1vdiAgICAgZWF4LCBKRElNRU5TSU9OIFtvdXRwdXRfY29sKGVheCldCiAKLQk7IC0tIEV2ZW4gcGFydAorICAgICAgICA7IC0tIEV2ZW4gcGFydAogCi0JOyB4bW03PWNvbDAsIHhtbTE9Y29sMiwgeG1tMD1jb2w0LCB4bW0yPWNvbDYKKyAgICAgICAgOyB4bW03PWNvbDAsIHhtbTE9Y29sMiwgeG1tMD1jb2w0LCB4bW0yPWNvbDYKIAotCTsgKE9yaWdpbmFsKQotCTsgejEgPSAoejIgKyB6MykgKiAwLjU0MTE5NjEwMDsKLQk7IHRtcDIgPSB6MSArIHozICogLTEuODQ3NzU5MDY1OwotCTsgdG1wMyA9IHoxICsgejIgKiAwLjc2NTM2Njg2NTsKLQk7Ci0JOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKLQk7IHRtcDIgPSB6MiAqIDAuNTQxMTk2MTAwICsgejMgKiAoMC41NDExOTYxMDAgLSAxLjg0Nzc1OTA2NSk7Ci0JOyB0bXAzID0gejIgKiAoMC41NDExOTYxMDAgKyAwLjc2NTM2Njg2NSkgKyB6MyAqIDAuNTQxMTk2MTAwOworICAgICAgICA7IChPcmlnaW5hbCkKKyAgICAgICAgOyB6MSA9ICh6MiArIHozKSAqIDAuNTQxMTk2MTAwOworICAgICAgICA7IHRtcDIgPSB6MSArIHozICogLTEuODQ3NzU5MDY1OworICAgICAgICA7IHRtcDMgPSB6MSArIHoyICogMC43NjUzNjY4NjU7CisgICAgICAgIDsKKyAgICAgICAgOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKyAgICAgICAgOyB0bXAyID0gejIgKiAwLjU0MTE5NjEwMCArIHozICogKDAuNTQxMTk2MTAwIC0gMS44NDc3NTkwNjUpOworICAgICAgICA7IHRtcDMgPSB6MiAqICgwLjU0MTE5NjEwMCArIDAuNzY1MzY2ODY1KSArIHozICogMC41NDExOTYxMDA7CiAKLQltb3ZkcWEgICAgeG1tNix4bW0xCQk7IHhtbTE9aW4yPXoyCi0JbW92ZHFhICAgIHhtbTUseG1tMQotCXB1bnBja2x3ZCB4bW02LHhtbTIJCTsgeG1tMj1pbjY9ejMKLQlwdW5wY2tod2QgeG1tNSx4bW0yCi0JbW92ZHFhICAgIHhtbTEseG1tNgotCW1vdmRxYSAgICB4bW0yLHhtbTUKLQlwbWFkZHdkICAgeG1tNixbR09UT0ZGKGVieCxQV19GMTMwX0YwNTQpXQk7IHhtbTY9dG1wM0wKLQlwbWFkZHdkICAgeG1tNSxbR09UT0ZGKGVieCxQV19GMTMwX0YwNTQpXQk7IHhtbTU9dG1wM0gKLQlwbWFkZHdkICAgeG1tMSxbR09UT0ZGKGVieCxQV19GMDU0X01GMTMwKV0JOyB4bW0xPXRtcDJMCi0JcG1hZGR3ZCAgIHhtbTIsW0dPVE9GRihlYngsUFdfRjA1NF9NRjEzMCldCTsgeG1tMj10bXAySAorICAgICAgICBtb3ZkcWEgICAgeG1tNix4bW0xICAgICAgICAgICAgIDsgeG1tMT1pbjI9ejIKKyAgICAgICAgbW92ZHFhICAgIHhtbTUseG1tMQorICAgICAgICBwdW5wY2tsd2QgeG1tNix4bW0yICAgICAgICAgICAgIDsgeG1tMj1pbjY9ejMKKyAgICAgICAgcHVucGNraHdkIHhtbTUseG1tMgorICAgICAgICBtb3ZkcWEgICAgeG1tMSx4bW02CisgICAgICAgIG1vdmRxYSAgICB4bW0yLHhtbTUKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTYsW0dPVE9GRihlYngsUFdfRjEzMF9GMDU0KV0gICAgICAgOyB4bW02PXRtcDNMCisgICAgICAgIHBtYWRkd2QgICB4bW01LFtHT1RPRkYoZWJ4LFBXX0YxMzBfRjA1NCldICAgICAgIDsgeG1tNT10bXAzSAorICAgICAgICBwbWFkZHdkICAgeG1tMSxbR09UT0ZGKGVieCxQV19GMDU0X01GMTMwKV0gICAgICA7IHhtbTE9dG1wMkwKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTIsW0dPVE9GRihlYngsUFdfRjA1NF9NRjEzMCldICAgICAgOyB4bW0yPXRtcDJICiAKLQltb3ZkcWEgICAgeG1tMyx4bW03Ci0JcGFkZHcgICAgIHhtbTcseG1tMAkJOyB4bW03PWluMCtpbjQKLQlwc3VidyAgICAgeG1tMyx4bW0wCQk7IHhtbTM9aW4wLWluNAorICAgICAgICBtb3ZkcWEgICAgeG1tMyx4bW03CisgICAgICAgIHBhZGR3ICAgICB4bW03LHhtbTAgICAgICAgICAgICAgOyB4bW03PWluMCtpbjQKKyAgICAgICAgcHN1YncgICAgIHhtbTMseG1tMCAgICAgICAgICAgICA7IHhtbTM9aW4wLWluNAogCi0JcHhvciAgICAgIHhtbTQseG1tNAotCXB4b3IgICAgICB4bW0wLHhtbTAKLQlwdW5wY2tsd2QgeG1tNCx4bW03CQk7IHhtbTQ9dG1wMEwKLQlwdW5wY2tod2QgeG1tMCx4bW03CQk7IHhtbTA9dG1wMEgKLQlwc3JhZCAgICAgeG1tNCwoMTYtQ09OU1RfQklUUykJOyBwc3JhZCB4bW00LDE2ICYgcHNsbGQgeG1tNCxDT05TVF9CSVRTCi0JcHNyYWQgICAgIHhtbTAsKDE2LUNPTlNUX0JJVFMpCTsgcHNyYWQgeG1tMCwxNiAmIHBzbGxkIHhtbTAsQ09OU1RfQklUUworICAgICAgICBweG9yICAgICAgeG1tNCx4bW00CisgICAgICAgIHB4b3IgICAgICB4bW0wLHhtbTAKKyAgICAgICAgcHVucGNrbHdkIHhtbTQseG1tNyAgICAgICAgICAgICA7IHhtbTQ9dG1wMEwKKyAgICAgICAgcHVucGNraHdkIHhtbTAseG1tNyAgICAgICAgICAgICA7IHhtbTA9dG1wMEgKKyAgICAgICAgcHNyYWQgICAgIHhtbTQsKDE2LUNPTlNUX0JJVFMpICA7IHBzcmFkIHhtbTQsMTYgJiBwc2xsZCB4bW00LENPTlNUX0JJVFMKKyAgICAgICAgcHNyYWQgICAgIHhtbTAsKDE2LUNPTlNUX0JJVFMpICA7IHBzcmFkIHhtbTAsMTYgJiBwc2xsZCB4bW0wLENPTlNUX0JJVFMKIAotCW1vdmRxYQl4bW03LHhtbTQKLQlwYWRkZAl4bW00LHhtbTYJCTsgeG1tND10bXAxMEwKLQlwc3ViZAl4bW03LHhtbTYJCTsgeG1tNz10bXAxM0wKLQltb3ZkcWEJeG1tNix4bW0wCi0JcGFkZGQJeG1tMCx4bW01CQk7IHhtbTA9dG1wMTBICi0JcHN1YmQJeG1tNix4bW01CQk7IHhtbTY9dG1wMTNICisgICAgICAgIG1vdmRxYSAgeG1tNyx4bW00CisgICAgICAgIHBhZGRkICAgeG1tNCx4bW02ICAgICAgICAgICAgICAgOyB4bW00PXRtcDEwTAorICAgICAgICBwc3ViZCAgIHhtbTcseG1tNiAgICAgICAgICAgICAgIDsgeG1tNz10bXAxM0wKKyAgICAgICAgbW92ZHFhICB4bW02LHhtbTAKKyAgICAgICAgcGFkZGQgICB4bW0wLHhtbTUgICAgICAgICAgICAgICA7IHhtbTA9dG1wMTBICisgICAgICAgIHBzdWJkICAgeG1tNix4bW01ICAgICAgICAgICAgICAgOyB4bW02PXRtcDEzSAogCi0JbW92ZHFhCVhNTVdPUkQgW3drKDApXSwgeG1tNAk7IHdrKDApPXRtcDEwTAotCW1vdmRxYQlYTU1XT1JEIFt3aygxKV0sIHhtbTAJOyB3aygxKT10bXAxMEgKLQltb3ZkcWEJWE1NV09SRCBbd2soMildLCB4bW03CTsgd2soMik9dG1wMTNMCi0JbW92ZHFhCVhNTVdPUkQgW3drKDMpXSwgeG1tNgk7IHdrKDMpPXRtcDEzSAorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDApXSwgeG1tNCAgIDsgd2soMCk9dG1wMTBMCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMSldLCB4bW0wICAgOyB3aygxKT10bXAxMEgKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygyKV0sIHhtbTcgICA7IHdrKDIpPXRtcDEzTAorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDMpXSwgeG1tNiAgIDsgd2soMyk9dG1wMTNICiAKLQlweG9yICAgICAgeG1tNSx4bW01Ci0JcHhvciAgICAgIHhtbTQseG1tNAotCXB1bnBja2x3ZCB4bW01LHhtbTMJCTsgeG1tNT10bXAxTAotCXB1bnBja2h3ZCB4bW00LHhtbTMJCTsgeG1tND10bXAxSAotCXBzcmFkICAgICB4bW01LCgxNi1DT05TVF9CSVRTKQk7IHBzcmFkIHhtbTUsMTYgJiBwc2xsZCB4bW01LENPTlNUX0JJVFMKLQlwc3JhZCAgICAgeG1tNCwoMTYtQ09OU1RfQklUUykJOyBwc3JhZCB4bW00LDE2ICYgcHNsbGQgeG1tNCxDT05TVF9CSVRTCisgICAgICAgIHB4b3IgICAgICB4bW01LHhtbTUKKyAgICAgICAgcHhvciAgICAgIHhtbTQseG1tNAorICAgICAgICBwdW5wY2tsd2QgeG1tNSx4bW0zICAgICAgICAgICAgIDsgeG1tNT10bXAxTAorICAgICAgICBwdW5wY2tod2QgeG1tNCx4bW0zICAgICAgICAgICAgIDsgeG1tND10bXAxSAorICAgICAgICBwc3JhZCAgICAgeG1tNSwoMTYtQ09OU1RfQklUUykgIDsgcHNyYWQgeG1tNSwxNiAmIHBzbGxkIHhtbTUsQ09OU1RfQklUUworICAgICAgICBwc3JhZCAgICAgeG1tNCwoMTYtQ09OU1RfQklUUykgIDsgcHNyYWQgeG1tNCwxNiAmIHBzbGxkIHhtbTQsQ09OU1RfQklUUwogCi0JbW92ZHFhCXhtbTAseG1tNQotCXBhZGRkCXhtbTUseG1tMQkJOyB4bW01PXRtcDExTAotCXBzdWJkCXhtbTAseG1tMQkJOyB4bW0wPXRtcDEyTAotCW1vdmRxYQl4bW03LHhtbTQKLQlwYWRkZAl4bW00LHhtbTIJCTsgeG1tND10bXAxMUgKLQlwc3ViZAl4bW03LHhtbTIJCTsgeG1tNz10bXAxMkgKKyAgICAgICAgbW92ZHFhICB4bW0wLHhtbTUKKyAgICAgICAgcGFkZGQgICB4bW01LHhtbTEgICAgICAgICAgICAgICA7IHhtbTU9dG1wMTFMCisgICAgICAgIHBzdWJkICAgeG1tMCx4bW0xICAgICAgICAgICAgICAgOyB4bW0wPXRtcDEyTAorICAgICAgICBtb3ZkcWEgIHhtbTcseG1tNAorICAgICAgICBwYWRkZCAgIHhtbTQseG1tMiAgICAgICAgICAgICAgIDsgeG1tND10bXAxMUgKKyAgICAgICAgcHN1YmQgICB4bW03LHhtbTIgICAgICAgICAgICAgICA7IHhtbTc9dG1wMTJICiAKLQltb3ZkcWEJWE1NV09SRCBbd2soNCldLCB4bW01CTsgd2soNCk9dG1wMTFMCi0JbW92ZHFhCVhNTVdPUkQgW3drKDUpXSwgeG1tNAk7IHdrKDUpPXRtcDExSAotCW1vdmRxYQlYTU1XT1JEIFt3ayg2KV0sIHhtbTAJOyB3ayg2KT10bXAxMkwKLQltb3ZkcWEJWE1NV09SRCBbd2soNyldLCB4bW03CTsgd2soNyk9dG1wMTJICisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soNCldLCB4bW01ICAgOyB3ayg0KT10bXAxMUwKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3ayg1KV0sIHhtbTQgICA7IHdrKDUpPXRtcDExSAorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDYpXSwgeG1tMCAgIDsgd2soNik9dG1wMTJMCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soNyldLCB4bW03ICAgOyB3ayg3KT10bXAxMkgKIAotCTsgLS0gT2RkIHBhcnQKKyAgICAgICAgOyAtLSBPZGQgcGFydAogCi0JbW92ZHFhCXhtbTYsIFhNTVdPUkQgW3drKDkpXQk7IHhtbTY9Y29sMwotCW1vdmRxYQl4bW0zLCBYTU1XT1JEIFt3ayg4KV0JOyB4bW0zPWNvbDEKLQltb3ZkcWEJeG1tMSwgWE1NV09SRCBbd2soMTEpXQk7IHhtbTE9Y29sNwotCW1vdmRxYQl4bW0yLCBYTU1XT1JEIFt3aygxMCldCTsgeG1tMj1jb2w1CisgICAgICAgIG1vdmRxYSAgeG1tNiwgWE1NV09SRCBbd2soOSldICAgOyB4bW02PWNvbDMKKyAgICAgICAgbW92ZHFhICB4bW0zLCBYTU1XT1JEIFt3ayg4KV0gICA7IHhtbTM9Y29sMQorICAgICAgICBtb3ZkcWEgIHhtbTEsIFhNTVdPUkQgW3drKDExKV0gIDsgeG1tMT1jb2w3CisgICAgICAgIG1vdmRxYSAgeG1tMiwgWE1NV09SRCBbd2soMTApXSAgOyB4bW0yPWNvbDUKIAotCW1vdmRxYQl4bW01LHhtbTYKLQltb3ZkcWEJeG1tNCx4bW0zCi0JcGFkZHcJeG1tNSx4bW0xCQk7IHhtbTU9ejMKLQlwYWRkdwl4bW00LHhtbTIJCTsgeG1tND16NAorICAgICAgICBtb3ZkcWEgIHhtbTUseG1tNgorICAgICAgICBtb3ZkcWEgIHhtbTQseG1tMworICAgICAgICBwYWRkdyAgIHhtbTUseG1tMSAgICAgICAgICAgICAgIDsgeG1tNT16MworICAgICAgICBwYWRkdyAgIHhtbTQseG1tMiAgICAgICAgICAgICAgIDsgeG1tND16NAogCi0JOyAoT3JpZ2luYWwpCi0JOyB6NSA9ICh6MyArIHo0KSAqIDEuMTc1ODc1NjAyOwotCTsgejMgPSB6MyAqIC0xLjk2MTU3MDU2MDsgIHo0ID0gejQgKiAtMC4zOTAxODA2NDQ7Ci0JOyB6MyArPSB6NTsgIHo0ICs9IHo1OwotCTsKLQk7IChUaGlzIGltcGxlbWVudGF0aW9uKQotCTsgejMgPSB6MyAqICgxLjE3NTg3NTYwMiAtIDEuOTYxNTcwNTYwKSArIHo0ICogMS4xNzU4NzU2MDI7Ci0JOyB6NCA9IHozICogMS4xNzU4NzU2MDIgKyB6NCAqICgxLjE3NTg3NTYwMiAtIDAuMzkwMTgwNjQ0KTsKKyAgICAgICAgOyAoT3JpZ2luYWwpCisgICAgICAgIDsgejUgPSAoejMgKyB6NCkgKiAxLjE3NTg3NTYwMjsKKyAgICAgICAgOyB6MyA9IHozICogLTEuOTYxNTcwNTYwOyAgejQgPSB6NCAqIC0wLjM5MDE4MDY0NDsKKyAgICAgICAgOyB6MyArPSB6NTsgIHo0ICs9IHo1OworICAgICAgICA7CisgICAgICAgIDsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisgICAgICAgIDsgejMgPSB6MyAqICgxLjE3NTg3NTYwMiAtIDEuOTYxNTcwNTYwKSArIHo0ICogMS4xNzU4NzU2MDI7CisgICAgICAgIDsgejQgPSB6MyAqIDEuMTc1ODc1NjAyICsgejQgKiAoMS4xNzU4NzU2MDIgLSAwLjM5MDE4MDY0NCk7CiAKLQltb3ZkcWEgICAgeG1tMCx4bW01Ci0JbW92ZHFhICAgIHhtbTcseG1tNQotCXB1bnBja2x3ZCB4bW0wLHhtbTQKLQlwdW5wY2tod2QgeG1tNyx4bW00Ci0JbW92ZHFhICAgIHhtbTUseG1tMAotCW1vdmRxYSAgICB4bW00LHhtbTcKLQlwbWFkZHdkICAgeG1tMCxbR09UT0ZGKGVieCxQV19NRjA3OF9GMTE3KV0JOyB4bW0wPXozTAotCXBtYWRkd2QgICB4bW03LFtHT1RPRkYoZWJ4LFBXX01GMDc4X0YxMTcpXQk7IHhtbTc9ejNICi0JcG1hZGR3ZCAgIHhtbTUsW0dPVE9GRihlYngsUFdfRjExN19GMDc4KV0JOyB4bW01PXo0TAotCXBtYWRkd2QgICB4bW00LFtHT1RPRkYoZWJ4LFBXX0YxMTdfRjA3OCldCTsgeG1tND16NEgKKyAgICAgICAgbW92ZHFhICAgIHhtbTAseG1tNQorICAgICAgICBtb3ZkcWEgICAgeG1tNyx4bW01CisgICAgICAgIHB1bnBja2x3ZCB4bW0wLHhtbTQKKyAgICAgICAgcHVucGNraHdkIHhtbTcseG1tNAorICAgICAgICBtb3ZkcWEgICAgeG1tNSx4bW0wCisgICAgICAgIG1vdmRxYSAgICB4bW00LHhtbTcKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTAsW0dPVE9GRihlYngsUFdfTUYwNzhfRjExNyldICAgICAgOyB4bW0wPXozTAorICAgICAgICBwbWFkZHdkICAgeG1tNyxbR09UT0ZGKGVieCxQV19NRjA3OF9GMTE3KV0gICAgICA7IHhtbTc9ejNICisgICAgICAgIHBtYWRkd2QgICB4bW01LFtHT1RPRkYoZWJ4LFBXX0YxMTdfRjA3OCldICAgICAgIDsgeG1tNT16NEwKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTQsW0dPVE9GRihlYngsUFdfRjExN19GMDc4KV0gICAgICAgOyB4bW00PXo0SAogCi0JbW92ZHFhCVhNTVdPUkQgW3drKDEwKV0sIHhtbTAJOyB3aygxMCk9ejNMCi0JbW92ZHFhCVhNTVdPUkQgW3drKDExKV0sIHhtbTcJOyB3aygxMSk9ejNICisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMTApXSwgeG1tMCAgOyB3aygxMCk9ejNMCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMTEpXSwgeG1tNyAgOyB3aygxMSk9ejNICiAKLQk7IChPcmlnaW5hbCkKLQk7IHoxID0gdG1wMCArIHRtcDM7ICB6MiA9IHRtcDEgKyB0bXAyOwotCTsgdG1wMCA9IHRtcDAgKiAwLjI5ODYzMTMzNjsgIHRtcDEgPSB0bXAxICogMi4wNTMxMTk4Njk7Ci0JOyB0bXAyID0gdG1wMiAqIDMuMDcyNzExMDI2OyAgdG1wMyA9IHRtcDMgKiAxLjUwMTMyMTExMDsKLQk7IHoxID0gejEgKiAtMC44OTk5NzYyMjM7ICB6MiA9IHoyICogLTIuNTYyOTE1NDQ3OwotCTsgdG1wMCArPSB6MSArIHozOyAgdG1wMSArPSB6MiArIHo0OwotCTsgdG1wMiArPSB6MiArIHozOyAgdG1wMyArPSB6MSArIHo0OwotCTsKLQk7IChUaGlzIGltcGxlbWVudGF0aW9uKQotCTsgdG1wMCA9IHRtcDAgKiAoMC4yOTg2MzEzMzYgLSAwLjg5OTk3NjIyMykgKyB0bXAzICogLTAuODk5OTc2MjIzOwotCTsgdG1wMSA9IHRtcDEgKiAoMi4wNTMxMTk4NjkgLSAyLjU2MjkxNTQ0NykgKyB0bXAyICogLTIuNTYyOTE1NDQ3OwotCTsgdG1wMiA9IHRtcDEgKiAtMi41NjI5MTU0NDcgKyB0bXAyICogKDMuMDcyNzExMDI2IC0gMi41NjI5MTU0NDcpOwotCTsgdG1wMyA9IHRtcDAgKiAtMC44OTk5NzYyMjMgKyB0bXAzICogKDEuNTAxMzIxMTEwIC0gMC44OTk5NzYyMjMpOwotCTsgdG1wMCArPSB6MzsgIHRtcDEgKz0gejQ7Ci0JOyB0bXAyICs9IHozOyAgdG1wMyArPSB6NDsKKyAgICAgICAgOyAoT3JpZ2luYWwpCisgICAgICAgIDsgejEgPSB0bXAwICsgdG1wMzsgIHoyID0gdG1wMSArIHRtcDI7CisgICAgICAgIDsgdG1wMCA9IHRtcDAgKiAwLjI5ODYzMTMzNjsgIHRtcDEgPSB0bXAxICogMi4wNTMxMTk4Njk7CisgICAgICAgIDsgdG1wMiA9IHRtcDIgKiAzLjA3MjcxMTAyNjsgIHRtcDMgPSB0bXAzICogMS41MDEzMjExMTA7CisgICAgICAgIDsgejEgPSB6MSAqIC0wLjg5OTk3NjIyMzsgIHoyID0gejIgKiAtMi41NjI5MTU0NDc7CisgICAgICAgIDsgdG1wMCArPSB6MSArIHozOyAgdG1wMSArPSB6MiArIHo0OworICAgICAgICA7IHRtcDIgKz0gejIgKyB6MzsgIHRtcDMgKz0gejEgKyB6NDsKKyAgICAgICAgOworICAgICAgICA7IChUaGlzIGltcGxlbWVudGF0aW9uKQorICAgICAgICA7IHRtcDAgPSB0bXAwICogKDAuMjk4NjMxMzM2IC0gMC44OTk5NzYyMjMpICsgdG1wMyAqIC0wLjg5OTk3NjIyMzsKKyAgICAgICAgOyB0bXAxID0gdG1wMSAqICgyLjA1MzExOTg2OSAtIDIuNTYyOTE1NDQ3KSArIHRtcDIgKiAtMi41NjI5MTU0NDc7CisgICAgICAgIDsgdG1wMiA9IHRtcDEgKiAtMi41NjI5MTU0NDcgKyB0bXAyICogKDMuMDcyNzExMDI2IC0gMi41NjI5MTU0NDcpOworICAgICAgICA7IHRtcDMgPSB0bXAwICogLTAuODk5OTc2MjIzICsgdG1wMyAqICgxLjUwMTMyMTExMCAtIDAuODk5OTc2MjIzKTsKKyAgICAgICAgOyB0bXAwICs9IHozOyAgdG1wMSArPSB6NDsKKyAgICAgICAgOyB0bXAyICs9IHozOyAgdG1wMyArPSB6NDsKIAotCW1vdmRxYSAgICB4bW0wLHhtbTEKLQltb3ZkcWEgICAgeG1tNyx4bW0xCi0JcHVucGNrbHdkIHhtbTAseG1tMwotCXB1bnBja2h3ZCB4bW03LHhtbTMKLQltb3ZkcWEgICAgeG1tMSx4bW0wCi0JbW92ZHFhICAgIHhtbTMseG1tNwotCXBtYWRkd2QgICB4bW0wLFtHT1RPRkYoZWJ4LFBXX01GMDYwX01GMDg5KV0JOyB4bW0wPXRtcDBMCi0JcG1hZGR3ZCAgIHhtbTcsW0dPVE9GRihlYngsUFdfTUYwNjBfTUYwODkpXQk7IHhtbTc9dG1wMEgKLQlwbWFkZHdkICAgeG1tMSxbR09UT0ZGKGVieCxQV19NRjA4OV9GMDYwKV0JOyB4bW0xPXRtcDNMCi0JcG1hZGR3ZCAgIHhtbTMsW0dPVE9GRihlYngsUFdfTUYwODlfRjA2MCldCTsgeG1tMz10bXAzSAorICAgICAgICBtb3ZkcWEgICAgeG1tMCx4bW0xCisgICAgICAgIG1vdmRxYSAgICB4bW03LHhtbTEKKyAgICAgICAgcHVucGNrbHdkIHhtbTAseG1tMworICAgICAgICBwdW5wY2tod2QgeG1tNyx4bW0zCisgICAgICAgIG1vdmRxYSAgICB4bW0xLHhtbTAKKyAgICAgICAgbW92ZHFhICAgIHhtbTMseG1tNworICAgICAgICBwbWFkZHdkICAgeG1tMCxbR09UT0ZGKGVieCxQV19NRjA2MF9NRjA4OSldICAgICA7IHhtbTA9dG1wMEwKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTcsW0dPVE9GRihlYngsUFdfTUYwNjBfTUYwODkpXSAgICAgOyB4bW03PXRtcDBICisgICAgICAgIHBtYWRkd2QgICB4bW0xLFtHT1RPRkYoZWJ4LFBXX01GMDg5X0YwNjApXSAgICAgIDsgeG1tMT10bXAzTAorICAgICAgICBwbWFkZHdkICAgeG1tMyxbR09UT0ZGKGVieCxQV19NRjA4OV9GMDYwKV0gICAgICA7IHhtbTM9dG1wM0gKIAotCXBhZGRkCXhtbTAsIFhNTVdPUkQgW3drKDEwKV0JOyB4bW0wPXRtcDBMCi0JcGFkZGQJeG1tNywgWE1NV09SRCBbd2soMTEpXQk7IHhtbTc9dG1wMEgKLQlwYWRkZAl4bW0xLHhtbTUJCTsgeG1tMT10bXAzTAotCXBhZGRkCXhtbTMseG1tNAkJOyB4bW0zPXRtcDNICisgICAgICAgIHBhZGRkICAgeG1tMCwgWE1NV09SRCBbd2soMTApXSAgOyB4bW0wPXRtcDBMCisgICAgICAgIHBhZGRkICAgeG1tNywgWE1NV09SRCBbd2soMTEpXSAgOyB4bW03PXRtcDBICisgICAgICAgIHBhZGRkICAgeG1tMSx4bW01ICAgICAgICAgICAgICAgOyB4bW0xPXRtcDNMCisgICAgICAgIHBhZGRkICAgeG1tMyx4bW00ICAgICAgICAgICAgICAgOyB4bW0zPXRtcDNICiAKLQltb3ZkcWEJWE1NV09SRCBbd2soOCldLCB4bW0wCTsgd2soOCk9dG1wMEwKLQltb3ZkcWEJWE1NV09SRCBbd2soOSldLCB4bW03CTsgd2soOSk9dG1wMEgKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3ayg4KV0sIHhtbTAgICA7IHdrKDgpPXRtcDBMCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soOSldLCB4bW03ICAgOyB3ayg5KT10bXAwSAogCi0JbW92ZHFhICAgIHhtbTAseG1tMgotCW1vdmRxYSAgICB4bW03LHhtbTIKLQlwdW5wY2tsd2QgeG1tMCx4bW02Ci0JcHVucGNraHdkIHhtbTcseG1tNgotCW1vdmRxYSAgICB4bW0yLHhtbTAKLQltb3ZkcWEgICAgeG1tNix4bW03Ci0JcG1hZGR3ZCAgIHhtbTAsW0dPVE9GRihlYngsUFdfTUYwNTBfTUYyNTYpXQk7IHhtbTA9dG1wMUwKLQlwbWFkZHdkICAgeG1tNyxbR09UT0ZGKGVieCxQV19NRjA1MF9NRjI1NildCTsgeG1tNz10bXAxSAotCXBtYWRkd2QgICB4bW0yLFtHT1RPRkYoZWJ4LFBXX01GMjU2X0YwNTApXQk7IHhtbTI9dG1wMkwKLQlwbWFkZHdkICAgeG1tNixbR09UT0ZGKGVieCxQV19NRjI1Nl9GMDUwKV0JOyB4bW02PXRtcDJICisgICAgICAgIG1vdmRxYSAgICB4bW0wLHhtbTIKKyAgICAgICAgbW92ZHFhICAgIHhtbTcseG1tMgorICAgICAgICBwdW5wY2tsd2QgeG1tMCx4bW02CisgICAgICAgIHB1bnBja2h3ZCB4bW03LHhtbTYKKyAgICAgICAgbW92ZHFhICAgIHhtbTIseG1tMAorICAgICAgICBtb3ZkcWEgICAgeG1tNix4bW03CisgICAgICAgIHBtYWRkd2QgICB4bW0wLFtHT1RPRkYoZWJ4LFBXX01GMDUwX01GMjU2KV0gICAgIDsgeG1tMD10bXAxTAorICAgICAgICBwbWFkZHdkICAgeG1tNyxbR09UT0ZGKGVieCxQV19NRjA1MF9NRjI1NildICAgICA7IHhtbTc9dG1wMUgKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTIsW0dPVE9GRihlYngsUFdfTUYyNTZfRjA1MCldICAgICAgOyB4bW0yPXRtcDJMCisgICAgICAgIHBtYWRkd2QgICB4bW02LFtHT1RPRkYoZWJ4LFBXX01GMjU2X0YwNTApXSAgICAgIDsgeG1tNj10bXAySAogCi0JcGFkZGQJeG1tMCx4bW01CQk7IHhtbTA9dG1wMUwKLQlwYWRkZAl4bW03LHhtbTQJCTsgeG1tNz10bXAxSAotCXBhZGRkCXhtbTIsIFhNTVdPUkQgW3drKDEwKV0JOyB4bW0yPXRtcDJMCi0JcGFkZGQJeG1tNiwgWE1NV09SRCBbd2soMTEpXQk7IHhtbTY9dG1wMkgKKyAgICAgICAgcGFkZGQgICB4bW0wLHhtbTUgICAgICAgICAgICAgICA7IHhtbTA9dG1wMUwKKyAgICAgICAgcGFkZGQgICB4bW03LHhtbTQgICAgICAgICAgICAgICA7IHhtbTc9dG1wMUgKKyAgICAgICAgcGFkZGQgICB4bW0yLCBYTU1XT1JEIFt3aygxMCldICA7IHhtbTI9dG1wMkwKKyAgICAgICAgcGFkZGQgICB4bW02LCBYTU1XT1JEIFt3aygxMSldICA7IHhtbTY9dG1wMkgKIAotCW1vdmRxYQlYTU1XT1JEIFt3aygxMCldLCB4bW0wCTsgd2soMTApPXRtcDFMCi0JbW92ZHFhCVhNTVdPUkQgW3drKDExKV0sIHhtbTcJOyB3aygxMSk9dG1wMUgKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygxMCldLCB4bW0wICA7IHdrKDEwKT10bXAxTAorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDExKV0sIHhtbTcgIDsgd2soMTEpPXRtcDFICiAKLQk7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQorICAgICAgICA7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQogCi0JbW92ZHFhCXhtbTUsIFhNTVdPUkQgW3drKDApXQk7IHhtbTU9dG1wMTBMCi0JbW92ZHFhCXhtbTQsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTQ9dG1wMTBICisgICAgICAgIG1vdmRxYSAgeG1tNSwgWE1NV09SRCBbd2soMCldICAgOyB4bW01PXRtcDEwTAorICAgICAgICBtb3ZkcWEgIHhtbTQsIFhNTVdPUkQgW3drKDEpXSAgIDsgeG1tND10bXAxMEgKIAotCW1vdmRxYQl4bW0wLHhtbTUKLQltb3ZkcWEJeG1tNyx4bW00Ci0JcGFkZGQJeG1tNSx4bW0xCQk7IHhtbTU9ZGF0YTBMCi0JcGFkZGQJeG1tNCx4bW0zCQk7IHhtbTQ9ZGF0YTBICi0JcHN1YmQJeG1tMCx4bW0xCQk7IHhtbTA9ZGF0YTdMCi0JcHN1YmQJeG1tNyx4bW0zCQk7IHhtbTc9ZGF0YTdICisgICAgICAgIG1vdmRxYSAgeG1tMCx4bW01CisgICAgICAgIG1vdmRxYSAgeG1tNyx4bW00CisgICAgICAgIHBhZGRkICAgeG1tNSx4bW0xICAgICAgICAgICAgICAgOyB4bW01PWRhdGEwTAorICAgICAgICBwYWRkZCAgIHhtbTQseG1tMyAgICAgICAgICAgICAgIDsgeG1tND1kYXRhMEgKKyAgICAgICAgcHN1YmQgICB4bW0wLHhtbTEgICAgICAgICAgICAgICA7IHhtbTA9ZGF0YTdMCisgICAgICAgIHBzdWJkICAgeG1tNyx4bW0zICAgICAgICAgICAgICAgOyB4bW03PWRhdGE3SAogCi0JbW92ZHFhCXhtbTEsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildCTsgeG1tMT1bUERfREVTQ0FMRV9QMl0KKyAgICAgICAgbW92ZHFhICB4bW0xLFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXSAgICAgICAgOyB4bW0xPVtQRF9ERVNDQUxFX1AyXQogCi0JcGFkZGQJeG1tNSx4bW0xCi0JcGFkZGQJeG1tNCx4bW0xCi0JcHNyYWQJeG1tNSxERVNDQUxFX1AyCi0JcHNyYWQJeG1tNCxERVNDQUxFX1AyCi0JcGFkZGQJeG1tMCx4bW0xCi0JcGFkZGQJeG1tNyx4bW0xCi0JcHNyYWQJeG1tMCxERVNDQUxFX1AyCi0JcHNyYWQJeG1tNyxERVNDQUxFX1AyCisgICAgICAgIHBhZGRkICAgeG1tNSx4bW0xCisgICAgICAgIHBhZGRkICAgeG1tNCx4bW0xCisgICAgICAgIHBzcmFkICAgeG1tNSxERVNDQUxFX1AyCisgICAgICAgIHBzcmFkICAgeG1tNCxERVNDQUxFX1AyCisgICAgICAgIHBhZGRkICAgeG1tMCx4bW0xCisgICAgICAgIHBhZGRkICAgeG1tNyx4bW0xCisgICAgICAgIHBzcmFkICAgeG1tMCxERVNDQUxFX1AyCisgICAgICAgIHBzcmFkICAgeG1tNyxERVNDQUxFX1AyCiAKLQlwYWNrc3NkdyAgeG1tNSx4bW00CQk7IHhtbTU9ZGF0YTA9KDAwIDEwIDIwIDMwIDQwIDUwIDYwIDcwKQotCXBhY2tzc2R3ICB4bW0wLHhtbTcJCTsgeG1tMD1kYXRhNz0oMDcgMTcgMjcgMzcgNDcgNTcgNjcgNzcpCisgICAgICAgIHBhY2tzc2R3ICB4bW01LHhtbTQgICAgICAgICAgICAgOyB4bW01PWRhdGEwPSgwMCAxMCAyMCAzMCA0MCA1MCA2MCA3MCkKKyAgICAgICAgcGFja3NzZHcgIHhtbTAseG1tNyAgICAgICAgICAgICA7IHhtbTA9ZGF0YTc9KDA3IDE3IDI3IDM3IDQ3IDU3IDY3IDc3KQogCi0JbW92ZHFhCXhtbTMsIFhNTVdPUkQgW3drKDQpXQk7IHhtbTM9dG1wMTFMCi0JbW92ZHFhCXhtbTEsIFhNTVdPUkQgW3drKDUpXQk7IHhtbTE9dG1wMTFICisgICAgICAgIG1vdmRxYSAgeG1tMywgWE1NV09SRCBbd2soNCldICAgOyB4bW0zPXRtcDExTAorICAgICAgICBtb3ZkcWEgIHhtbTEsIFhNTVdPUkQgW3drKDUpXSAgIDsgeG1tMT10bXAxMUgKIAotCW1vdmRxYQl4bW00LHhtbTMKLQltb3ZkcWEJeG1tNyx4bW0xCi0JcGFkZGQJeG1tMyx4bW0yCQk7IHhtbTM9ZGF0YTFMCi0JcGFkZGQJeG1tMSx4bW02CQk7IHhtbTE9ZGF0YTFICi0JcHN1YmQJeG1tNCx4bW0yCQk7IHhtbTQ9ZGF0YTZMCi0JcHN1YmQJeG1tNyx4bW02CQk7IHhtbTc9ZGF0YTZICisgICAgICAgIG1vdmRxYSAgeG1tNCx4bW0zCisgICAgICAgIG1vdmRxYSAgeG1tNyx4bW0xCisgICAgICAgIHBhZGRkICAgeG1tMyx4bW0yICAgICAgICAgICAgICAgOyB4bW0zPWRhdGExTAorICAgICAgICBwYWRkZCAgIHhtbTEseG1tNiAgICAgICAgICAgICAgIDsgeG1tMT1kYXRhMUgKKyAgICAgICAgcHN1YmQgICB4bW00LHhtbTIgICAgICAgICAgICAgICA7IHhtbTQ9ZGF0YTZMCisgICAgICAgIHBzdWJkICAgeG1tNyx4bW02ICAgICAgICAgICAgICAgOyB4bW03PWRhdGE2SAogCi0JbW92ZHFhCXhtbTIsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildCTsgeG1tMj1bUERfREVTQ0FMRV9QMl0KKyAgICAgICAgbW92ZHFhICB4bW0yLFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXSAgICAgICAgOyB4bW0yPVtQRF9ERVNDQUxFX1AyXQogCi0JcGFkZGQJeG1tMyx4bW0yCi0JcGFkZGQJeG1tMSx4bW0yCi0JcHNyYWQJeG1tMyxERVNDQUxFX1AyCi0JcHNyYWQJeG1tMSxERVNDQUxFX1AyCi0JcGFkZGQJeG1tNCx4bW0yCi0JcGFkZGQJeG1tNyx4bW0yCi0JcHNyYWQJeG1tNCxERVNDQUxFX1AyCi0JcHNyYWQJeG1tNyxERVNDQUxFX1AyCisgICAgICAgIHBhZGRkICAgeG1tMyx4bW0yCisgICAgICAgIHBhZGRkICAgeG1tMSx4bW0yCisgICAgICAgIHBzcmFkICAgeG1tMyxERVNDQUxFX1AyCisgICAgICAgIHBzcmFkICAgeG1tMSxERVNDQUxFX1AyCisgICAgICAgIHBhZGRkICAgeG1tNCx4bW0yCisgICAgICAgIHBhZGRkICAgeG1tNyx4bW0yCisgICAgICAgIHBzcmFkICAgeG1tNCxERVNDQUxFX1AyCisgICAgICAgIHBzcmFkICAgeG1tNyxERVNDQUxFX1AyCiAKLQlwYWNrc3NkdyAgeG1tMyx4bW0xCQk7IHhtbTM9ZGF0YTE9KDAxIDExIDIxIDMxIDQxIDUxIDYxIDcxKQotCXBhY2tzc2R3ICB4bW00LHhtbTcJCTsgeG1tND1kYXRhNj0oMDYgMTYgMjYgMzYgNDYgNTYgNjYgNzYpCisgICAgICAgIHBhY2tzc2R3ICB4bW0zLHhtbTEgICAgICAgICAgICAgOyB4bW0zPWRhdGExPSgwMSAxMSAyMSAzMSA0MSA1MSA2MSA3MSkKKyAgICAgICAgcGFja3NzZHcgIHhtbTQseG1tNyAgICAgICAgICAgICA7IHhtbTQ9ZGF0YTY9KDA2IDE2IDI2IDM2IDQ2IDU2IDY2IDc2KQogCi0JcGFja3Nzd2IgIHhtbTUseG1tNAkJOyB4bW01PSgwMCAxMCAyMCAzMCA0MCA1MCA2MCA3MCAwNiAxNiAyNiAzNiA0NiA1NiA2NiA3NikKLQlwYWNrc3N3YiAgeG1tMyx4bW0wCQk7IHhtbTM9KDAxIDExIDIxIDMxIDQxIDUxIDYxIDcxIDA3IDE3IDI3IDM3IDQ3IDU3IDY3IDc3KQorICAgICAgICBwYWNrc3N3YiAgeG1tNSx4bW00ICAgICAgICAgICAgIDsgeG1tNT0oMDAgMTAgMjAgMzAgNDAgNTAgNjAgNzAgMDYgMTYgMjYgMzYgNDYgNTYgNjYgNzYpCisgICAgICAgIHBhY2tzc3diICB4bW0zLHhtbTAgICAgICAgICAgICAgOyB4bW0zPSgwMSAxMSAyMSAzMSA0MSA1MSA2MSA3MSAwNyAxNyAyNyAzNyA0NyA1NyA2NyA3NykKIAotCW1vdmRxYQl4bW02LCBYTU1XT1JEIFt3ayg2KV0JOyB4bW02PXRtcDEyTAotCW1vdmRxYQl4bW0yLCBYTU1XT1JEIFt3ayg3KV0JOyB4bW0yPXRtcDEySAotCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFt3aygxMCldCTsgeG1tMT10bXAxTAotCW1vdmRxYQl4bW03LCBYTU1XT1JEIFt3aygxMSldCTsgeG1tNz10bXAxSAorICAgICAgICBtb3ZkcWEgIHhtbTYsIFhNTVdPUkQgW3drKDYpXSAgIDsgeG1tNj10bXAxMkwKKyAgICAgICAgbW92ZHFhICB4bW0yLCBYTU1XT1JEIFt3ayg3KV0gICA7IHhtbTI9dG1wMTJICisgICAgICAgIG1vdmRxYSAgeG1tMSwgWE1NV09SRCBbd2soMTApXSAgOyB4bW0xPXRtcDFMCisgICAgICAgIG1vdmRxYSAgeG1tNywgWE1NV09SRCBbd2soMTEpXSAgOyB4bW03PXRtcDFICiAKLQltb3ZkcWEJWE1NV09SRCBbd2soMCldLCB4bW01CTsgd2soMCk9KDAwIDEwIDIwIDMwIDQwIDUwIDYwIDcwIDA2IDE2IDI2IDM2IDQ2IDU2IDY2IDc2KQotCW1vdmRxYQlYTU1XT1JEIFt3aygxKV0sIHhtbTMJOyB3aygxKT0oMDEgMTEgMjEgMzEgNDEgNTEgNjEgNzEgMDcgMTcgMjcgMzcgNDcgNTcgNjcgNzcpCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMCldLCB4bW01ICAgOyB3aygwKT0oMDAgMTAgMjAgMzAgNDAgNTAgNjAgNzAgMDYgMTYgMjYgMzYgNDYgNTYgNjYgNzYpCisgICAgICAgIG1vdmRxYSAgWE1NV09SRCBbd2soMSldLCB4bW0zICAgOyB3aygxKT0oMDEgMTEgMjEgMzEgNDEgNTEgNjEgNzEgMDcgMTcgMjcgMzcgNDcgNTcgNjcgNzcpCiAKLQltb3ZkcWEJeG1tNCx4bW02Ci0JbW92ZHFhCXhtbTAseG1tMgotCXBhZGRkCXhtbTYseG1tMQkJOyB4bW02PWRhdGEyTAotCXBhZGRkCXhtbTIseG1tNwkJOyB4bW0yPWRhdGEySAotCXBzdWJkCXhtbTQseG1tMQkJOyB4bW00PWRhdGE1TAotCXBzdWJkCXhtbTAseG1tNwkJOyB4bW0wPWRhdGE1SAorICAgICAgICBtb3ZkcWEgIHhtbTQseG1tNgorICAgICAgICBtb3ZkcWEgIHhtbTAseG1tMgorICAgICAgICBwYWRkZCAgIHhtbTYseG1tMSAgICAgICAgICAgICAgIDsgeG1tNj1kYXRhMkwKKyAgICAgICAgcGFkZGQgICB4bW0yLHhtbTcgICAgICAgICAgICAgICA7IHhtbTI9ZGF0YTJICisgICAgICAgIHBzdWJkICAgeG1tNCx4bW0xICAgICAgICAgICAgICAgOyB4bW00PWRhdGE1TAorICAgICAgICBwc3ViZCAgIHhtbTAseG1tNyAgICAgICAgICAgICAgIDsgeG1tMD1kYXRhNUgKIAotCW1vdmRxYQl4bW01LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQk7IHhtbTU9W1BEX0RFU0NBTEVfUDJdCisgICAgICAgIG1vdmRxYSAgeG1tNSxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyKV0gICAgICAgIDsgeG1tNT1bUERfREVTQ0FMRV9QMl0KIAotCXBhZGRkCXhtbTYseG1tNQotCXBhZGRkCXhtbTIseG1tNQotCXBzcmFkCXhtbTYsREVTQ0FMRV9QMgotCXBzcmFkCXhtbTIsREVTQ0FMRV9QMgotCXBhZGRkCXhtbTQseG1tNQotCXBhZGRkCXhtbTAseG1tNQotCXBzcmFkCXhtbTQsREVTQ0FMRV9QMgotCXBzcmFkCXhtbTAsREVTQ0FMRV9QMgorICAgICAgICBwYWRkZCAgIHhtbTYseG1tNQorICAgICAgICBwYWRkZCAgIHhtbTIseG1tNQorICAgICAgICBwc3JhZCAgIHhtbTYsREVTQ0FMRV9QMgorICAgICAgICBwc3JhZCAgIHhtbTIsREVTQ0FMRV9QMgorICAgICAgICBwYWRkZCAgIHhtbTQseG1tNQorICAgICAgICBwYWRkZCAgIHhtbTAseG1tNQorICAgICAgICBwc3JhZCAgIHhtbTQsREVTQ0FMRV9QMgorICAgICAgICBwc3JhZCAgIHhtbTAsREVTQ0FMRV9QMgogCi0JcGFja3NzZHcgIHhtbTYseG1tMgkJOyB4bW02PWRhdGEyPSgwMiAxMiAyMiAzMiA0MiA1MiA2MiA3MikKLQlwYWNrc3NkdyAgeG1tNCx4bW0wCQk7IHhtbTQ9ZGF0YTU9KDA1IDE1IDI1IDM1IDQ1IDU1IDY1IDc1KQorICAgICAgICBwYWNrc3NkdyAgeG1tNix4bW0yICAgICAgICAgICAgIDsgeG1tNj1kYXRhMj0oMDIgMTIgMjIgMzIgNDIgNTIgNjIgNzIpCisgICAgICAgIHBhY2tzc2R3ICB4bW00LHhtbTAgICAgICAgICAgICAgOyB4bW00PWRhdGE1PSgwNSAxNSAyNSAzNSA0NSA1NSA2NSA3NSkKIAotCW1vdmRxYQl4bW0zLCBYTU1XT1JEIFt3aygyKV0JOyB4bW0zPXRtcDEzTAotCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFt3aygzKV0JOyB4bW0xPXRtcDEzSAotCW1vdmRxYQl4bW03LCBYTU1XT1JEIFt3ayg4KV0JOyB4bW03PXRtcDBMCi0JbW92ZHFhCXhtbTUsIFhNTVdPUkQgW3drKDkpXQk7IHhtbTU9dG1wMEgKKyAgICAgICAgbW92ZHFhICB4bW0zLCBYTU1XT1JEIFt3aygyKV0gICA7IHhtbTM9dG1wMTNMCisgICAgICAgIG1vdmRxYSAgeG1tMSwgWE1NV09SRCBbd2soMyldICAgOyB4bW0xPXRtcDEzSAorICAgICAgICBtb3ZkcWEgIHhtbTcsIFhNTVdPUkQgW3drKDgpXSAgIDsgeG1tNz10bXAwTAorICAgICAgICBtb3ZkcWEgIHhtbTUsIFhNTVdPUkQgW3drKDkpXSAgIDsgeG1tNT10bXAwSAogCi0JbW92ZHFhCXhtbTIseG1tMwotCW1vdmRxYQl4bW0wLHhtbTEKLQlwYWRkZAl4bW0zLHhtbTcJCTsgeG1tMz1kYXRhM0wKLQlwYWRkZAl4bW0xLHhtbTUJCTsgeG1tMT1kYXRhM0gKLQlwc3ViZAl4bW0yLHhtbTcJCTsgeG1tMj1kYXRhNEwKLQlwc3ViZAl4bW0wLHhtbTUJCTsgeG1tMD1kYXRhNEgKKyAgICAgICAgbW92ZHFhICB4bW0yLHhtbTMKKyAgICAgICAgbW92ZHFhICB4bW0wLHhtbTEKKyAgICAgICAgcGFkZGQgICB4bW0zLHhtbTcgICAgICAgICAgICAgICA7IHhtbTM9ZGF0YTNMCisgICAgICAgIHBhZGRkICAgeG1tMSx4bW01ICAgICAgICAgICAgICAgOyB4bW0xPWRhdGEzSAorICAgICAgICBwc3ViZCAgIHhtbTIseG1tNyAgICAgICAgICAgICAgIDsgeG1tMj1kYXRhNEwKKyAgICAgICAgcHN1YmQgICB4bW0wLHhtbTUgICAgICAgICAgICAgICA7IHhtbTA9ZGF0YTRICiAKLQltb3ZkcWEJeG1tNyxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyKV0JOyB4bW03PVtQRF9ERVNDQUxFX1AyXQorICAgICAgICBtb3ZkcWEgIHhtbTcsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildICAgICAgICA7IHhtbTc9W1BEX0RFU0NBTEVfUDJdCiAKLQlwYWRkZAl4bW0zLHhtbTcKLQlwYWRkZAl4bW0xLHhtbTcKLQlwc3JhZAl4bW0zLERFU0NBTEVfUDIKLQlwc3JhZAl4bW0xLERFU0NBTEVfUDIKLQlwYWRkZAl4bW0yLHhtbTcKLQlwYWRkZAl4bW0wLHhtbTcKLQlwc3JhZAl4bW0yLERFU0NBTEVfUDIKLQlwc3JhZAl4bW0wLERFU0NBTEVfUDIKKyAgICAgICAgcGFkZGQgICB4bW0zLHhtbTcKKyAgICAgICAgcGFkZGQgICB4bW0xLHhtbTcKKyAgICAgICAgcHNyYWQgICB4bW0zLERFU0NBTEVfUDIKKyAgICAgICAgcHNyYWQgICB4bW0xLERFU0NBTEVfUDIKKyAgICAgICAgcGFkZGQgICB4bW0yLHhtbTcKKyAgICAgICAgcGFkZGQgICB4bW0wLHhtbTcKKyAgICAgICAgcHNyYWQgICB4bW0yLERFU0NBTEVfUDIKKyAgICAgICAgcHNyYWQgICB4bW0wLERFU0NBTEVfUDIKIAotCW1vdmRxYSAgICB4bW01LFtHT1RPRkYoZWJ4LFBCX0NFTlRFUkpTQU1QKV0JOyB4bW01PVtQQl9DRU5URVJKU0FNUF0KKyAgICAgICAgbW92ZHFhICAgIHhtbTUsW0dPVE9GRihlYngsUEJfQ0VOVEVSSlNBTVApXSAgICAgOyB4bW01PVtQQl9DRU5URVJKU0FNUF0KIAotCXBhY2tzc2R3ICB4bW0zLHhtbTEJCTsgeG1tMz1kYXRhMz0oMDMgMTMgMjMgMzMgNDMgNTMgNjMgNzMpCi0JcGFja3NzZHcgIHhtbTIseG1tMAkJOyB4bW0yPWRhdGE0PSgwNCAxNCAyNCAzNCA0NCA1NCA2NCA3NCkKKyAgICAgICAgcGFja3NzZHcgIHhtbTMseG1tMSAgICAgICAgICAgICA7IHhtbTM9ZGF0YTM9KDAzIDEzIDIzIDMzIDQzIDUzIDYzIDczKQorICAgICAgICBwYWNrc3NkdyAgeG1tMix4bW0wICAgICAgICAgICAgIDsgeG1tMj1kYXRhND0oMDQgMTQgMjQgMzQgNDQgNTQgNjQgNzQpCiAKLQltb3ZkcWEgICAgeG1tNywgWE1NV09SRCBbd2soMCldCTsgeG1tNz0oMDAgMTAgMjAgMzAgNDAgNTAgNjAgNzAgMDYgMTYgMjYgMzYgNDYgNTYgNjYgNzYpCi0JbW92ZHFhICAgIHhtbTEsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTE9KDAxIDExIDIxIDMxIDQxIDUxIDYxIDcxIDA3IDE3IDI3IDM3IDQ3IDU3IDY3IDc3KQorICAgICAgICBtb3ZkcWEgICAgeG1tNywgWE1NV09SRCBbd2soMCldIDsgeG1tNz0oMDAgMTAgMjAgMzAgNDAgNTAgNjAgNzAgMDYgMTYgMjYgMzYgNDYgNTYgNjYgNzYpCisgICAgICAgIG1vdmRxYSAgICB4bW0xLCBYTU1XT1JEIFt3aygxKV0gOyB4bW0xPSgwMSAxMSAyMSAzMSA0MSA1MSA2MSA3MSAwNyAxNyAyNyAzNyA0NyA1NyA2NyA3NykKIAotCXBhY2tzc3diICB4bW02LHhtbTIJCTsgeG1tNj0oMDIgMTIgMjIgMzIgNDIgNTIgNjIgNzIgMDQgMTQgMjQgMzQgNDQgNTQgNjQgNzQpCi0JcGFja3Nzd2IgIHhtbTMseG1tNAkJOyB4bW0zPSgwMyAxMyAyMyAzMyA0MyA1MyA2MyA3MyAwNSAxNSAyNSAzNSA0NSA1NSA2NSA3NSkKKyAgICAgICAgcGFja3Nzd2IgIHhtbTYseG1tMiAgICAgICAgICAgICA7IHhtbTY9KDAyIDEyIDIyIDMyIDQyIDUyIDYyIDcyIDA0IDE0IDI0IDM0IDQ0IDU0IDY0IDc0KQorICAgICAgICBwYWNrc3N3YiAgeG1tMyx4bW00ICAgICAgICAgICAgIDsgeG1tMz0oMDMgMTMgMjMgMzMgNDMgNTMgNjMgNzMgMDUgMTUgMjUgMzUgNDUgNTUgNjUgNzUpCiAKLQlwYWRkYiAgICAgeG1tNyx4bW01Ci0JcGFkZGIgICAgIHhtbTEseG1tNQotCXBhZGRiICAgICB4bW02LHhtbTUKLQlwYWRkYiAgICAgeG1tMyx4bW01CisgICAgICAgIHBhZGRiICAgICB4bW03LHhtbTUKKyAgICAgICAgcGFkZGIgICAgIHhtbTEseG1tNQorICAgICAgICBwYWRkYiAgICAgeG1tNix4bW01CisgICAgICAgIHBhZGRiICAgICB4bW0zLHhtbTUKIAotCW1vdmRxYSAgICB4bW0wLHhtbTcJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCi0JcHVucGNrbGJ3IHhtbTcseG1tMQk7IHhtbTc9KDAwIDAxIDEwIDExIDIwIDIxIDMwIDMxIDQwIDQxIDUwIDUxIDYwIDYxIDcwIDcxKQotCXB1bnBja2hidyB4bW0wLHhtbTEJOyB4bW0wPSgwNiAwNyAxNiAxNyAyNiAyNyAzNiAzNyA0NiA0NyA1NiA1NyA2NiA2NyA3NiA3NykKLQltb3ZkcWEgICAgeG1tMix4bW02CTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQotCXB1bnBja2xidyB4bW02LHhtbTMJOyB4bW02PSgwMiAwMyAxMiAxMyAyMiAyMyAzMiAzMyA0MiA0MyA1MiA1MyA2MiA2MyA3MiA3MykKLQlwdW5wY2toYncgeG1tMix4bW0zCTsgeG1tMj0oMDQgMDUgMTQgMTUgMjQgMjUgMzQgMzUgNDQgNDUgNTQgNTUgNjQgNjUgNzQgNzUpCisgICAgICAgIG1vdmRxYSAgICB4bW0wLHhtbTcgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgICAgICBwdW5wY2tsYncgeG1tNyx4bW0xICAgICA7IHhtbTc9KDAwIDAxIDEwIDExIDIwIDIxIDMwIDMxIDQwIDQxIDUwIDUxIDYwIDYxIDcwIDcxKQorICAgICAgICBwdW5wY2toYncgeG1tMCx4bW0xICAgICA7IHhtbTA9KDA2IDA3IDE2IDE3IDI2IDI3IDM2IDM3IDQ2IDQ3IDU2IDU3IDY2IDY3IDc2IDc3KQorICAgICAgICBtb3ZkcWEgICAgeG1tMix4bW02ICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICAgICAgcHVucGNrbGJ3IHhtbTYseG1tMyAgICAgOyB4bW02PSgwMiAwMyAxMiAxMyAyMiAyMyAzMiAzMyA0MiA0MyA1MiA1MyA2MiA2MyA3MiA3MykKKyAgICAgICAgcHVucGNraGJ3IHhtbTIseG1tMyAgICAgOyB4bW0yPSgwNCAwNSAxNCAxNSAyNCAyNSAzNCAzNSA0NCA0NSA1NCA1NSA2NCA2NSA3NCA3NSkKIAotCW1vdmRxYSAgICB4bW00LHhtbTcJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCi0JcHVucGNrbHdkIHhtbTcseG1tNgk7IHhtbTc9KDAwIDAxIDAyIDAzIDEwIDExIDEyIDEzIDIwIDIxIDIyIDIzIDMwIDMxIDMyIDMzKQotCXB1bnBja2h3ZCB4bW00LHhtbTYJOyB4bW00PSg0MCA0MSA0MiA0MyA1MCA1MSA1MiA1MyA2MCA2MSA2MiA2MyA3MCA3MSA3MiA3MykKLQltb3ZkcWEgICAgeG1tNSx4bW0yCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQotCXB1bnBja2x3ZCB4bW0yLHhtbTAJOyB4bW0yPSgwNCAwNSAwNiAwNyAxNCAxNSAxNiAxNyAyNCAyNSAyNiAyNyAzNCAzNSAzNiAzNykKLQlwdW5wY2tod2QgeG1tNSx4bW0wCTsgeG1tNT0oNDQgNDUgNDYgNDcgNTQgNTUgNTYgNTcgNjQgNjUgNjYgNjcgNzQgNzUgNzYgNzcpCisgICAgICAgIG1vdmRxYSAgICB4bW00LHhtbTcgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgICAgICBwdW5wY2tsd2QgeG1tNyx4bW02ICAgICA7IHhtbTc9KDAwIDAxIDAyIDAzIDEwIDExIDEyIDEzIDIwIDIxIDIyIDIzIDMwIDMxIDMyIDMzKQorICAgICAgICBwdW5wY2tod2QgeG1tNCx4bW02ICAgICA7IHhtbTQ9KDQwIDQxIDQyIDQzIDUwIDUxIDUyIDUzIDYwIDYxIDYyIDYzIDcwIDcxIDcyIDczKQorICAgICAgICBtb3ZkcWEgICAgeG1tNSx4bW0yICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICAgICAgcHVucGNrbHdkIHhtbTIseG1tMCAgICAgOyB4bW0yPSgwNCAwNSAwNiAwNyAxNCAxNSAxNiAxNyAyNCAyNSAyNiAyNyAzNCAzNSAzNiAzNykKKyAgICAgICAgcHVucGNraHdkIHhtbTUseG1tMCAgICAgOyB4bW01PSg0NCA0NSA0NiA0NyA1NCA1NSA1NiA1NyA2NCA2NSA2NiA2NyA3NCA3NSA3NiA3NykKIAotCW1vdmRxYSAgICB4bW0xLHhtbTcJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCi0JcHVucGNrbGRxIHhtbTcseG1tMgk7IHhtbTc9KDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3IDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3KQotCXB1bnBja2hkcSB4bW0xLHhtbTIJOyB4bW0xPSgyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNyAzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNykKLQltb3ZkcWEgICAgeG1tMyx4bW00CTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQotCXB1bnBja2xkcSB4bW00LHhtbTUJOyB4bW00PSg0MCA0MSA0MiA0MyA0NCA0NSA0NiA0NyA1MCA1MSA1MiA1MyA1NCA1NSA1NiA1NykKLQlwdW5wY2toZHEgeG1tMyx4bW01CTsgeG1tMz0oNjAgNjEgNjIgNjMgNjQgNjUgNjYgNjcgNzAgNzEgNzIgNzMgNzQgNzUgNzYgNzcpCisgICAgICAgIG1vdmRxYSAgICB4bW0xLHhtbTcgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorICAgICAgICBwdW5wY2tsZHEgeG1tNyx4bW0yICAgICA7IHhtbTc9KDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3IDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3KQorICAgICAgICBwdW5wY2toZHEgeG1tMSx4bW0yICAgICA7IHhtbTE9KDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3IDMwIDMxIDMyIDMzIDM0IDM1IDM2IDM3KQorICAgICAgICBtb3ZkcWEgICAgeG1tMyx4bW00ICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKyAgICAgICAgcHVucGNrbGRxIHhtbTQseG1tNSAgICAgOyB4bW00PSg0MCA0MSA0MiA0MyA0NCA0NSA0NiA0NyA1MCA1MSA1MiA1MyA1NCA1NSA1NiA1NykKKyAgICAgICAgcHVucGNraGRxIHhtbTMseG1tNSAgICAgOyB4bW0zPSg2MCA2MSA2MiA2MyA2NCA2NSA2NiA2NyA3MCA3MSA3MiA3MyA3NCA3NSA3NiA3NykKIAotCXBzaHVmZAl4bW02LHhtbTcsMHg0RQk7IHhtbTY9KDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3IDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3KQotCXBzaHVmZAl4bW0wLHhtbTEsMHg0RQk7IHhtbTA9KDMwIDMxIDMyIDMzIDM0IDM1IDM2IDM3IDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3KQotCXBzaHVmZAl4bW0yLHhtbTQsMHg0RQk7IHhtbTI9KDUwIDUxIDUyIDUzIDU0IDU1IDU2IDU3IDQwIDQxIDQyIDQzIDQ0IDQ1IDQ2IDQ3KQotCXBzaHVmZAl4bW01LHhtbTMsMHg0RQk7IHhtbTU9KDcwIDcxIDcyIDczIDc0IDc1IDc2IDc3IDYwIDYxIDYyIDYzIDY0IDY1IDY2IDY3KQorICAgICAgICBwc2h1ZmQgIHhtbTYseG1tNywweDRFICA7IHhtbTY9KDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3IDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3KQorICAgICAgICBwc2h1ZmQgIHhtbTAseG1tMSwweDRFICA7IHhtbTA9KDMwIDMxIDMyIDMzIDM0IDM1IDM2IDM3IDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3KQorICAgICAgICBwc2h1ZmQgIHhtbTIseG1tNCwweDRFICA7IHhtbTI9KDUwIDUxIDUyIDUzIDU0IDU1IDU2IDU3IDQwIDQxIDQyIDQzIDQ0IDQ1IDQ2IDQ3KQorICAgICAgICBwc2h1ZmQgIHhtbTUseG1tMywweDRFICA7IHhtbTU9KDcwIDcxIDcyIDczIDc0IDc1IDc2IDc3IDYwIDYxIDYyIDYzIDY0IDY1IDY2IDY3KQogCi0JbW92CWVkeCwgSlNBTVBST1cgW2VkaSswKlNJWkVPRl9KU0FNUFJPV10KLQltb3YJZXNpLCBKU0FNUFJPVyBbZWRpKzIqU0laRU9GX0pTQU1QUk9XXQotCW1vdnEJWE1NX01NV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTcKLQltb3ZxCVhNTV9NTVdPUkQgW2VzaStlYXgqU0laRU9GX0pTQU1QTEVdLCB4bW0xCi0JbW92CWVkeCwgSlNBTVBST1cgW2VkaSs0KlNJWkVPRl9KU0FNUFJPV10KLQltb3YJZXNpLCBKU0FNUFJPVyBbZWRpKzYqU0laRU9GX0pTQU1QUk9XXQotCW1vdnEJWE1NX01NV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTQKLQltb3ZxCVhNTV9NTVdPUkQgW2VzaStlYXgqU0laRU9GX0pTQU1QTEVdLCB4bW0zCisgICAgICAgIG1vdiAgICAgZWR4LCBKU0FNUFJPVyBbZWRpKzAqU0laRU9GX0pTQU1QUk9XXQorICAgICAgICBtb3YgICAgIGVzaSwgSlNBTVBST1cgW2VkaSsyKlNJWkVPRl9KU0FNUFJPV10KKyAgICAgICAgbW92cSAgICBYTU1fTU1XT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXSwgeG1tNworICAgICAgICBtb3ZxICAgIFhNTV9NTVdPUkQgW2VzaStlYXgqU0laRU9GX0pTQU1QTEVdLCB4bW0xCisgICAgICAgIG1vdiAgICAgZWR4LCBKU0FNUFJPVyBbZWRpKzQqU0laRU9GX0pTQU1QUk9XXQorICAgICAgICBtb3YgICAgIGVzaSwgSlNBTVBST1cgW2VkaSs2KlNJWkVPRl9KU0FNUFJPV10KKyAgICAgICAgbW92cSAgICBYTU1fTU1XT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXSwgeG1tNAorICAgICAgICBtb3ZxICAgIFhNTV9NTVdPUkQgW2VzaStlYXgqU0laRU9GX0pTQU1QTEVdLCB4bW0zCiAKLQltb3YJZWR4LCBKU0FNUFJPVyBbZWRpKzEqU0laRU9GX0pTQU1QUk9XXQotCW1vdgllc2ksIEpTQU1QUk9XIFtlZGkrMypTSVpFT0ZfSlNBTVBST1ddCi0JbW92cQlYTU1fTU1XT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXSwgeG1tNgotCW1vdnEJWE1NX01NV09SRCBbZXNpK2VheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTAKLQltb3YJZWR4LCBKU0FNUFJPVyBbZWRpKzUqU0laRU9GX0pTQU1QUk9XXQotCW1vdgllc2ksIEpTQU1QUk9XIFtlZGkrNypTSVpFT0ZfSlNBTVBST1ddCi0JbW92cQlYTU1fTU1XT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXSwgeG1tMgotCW1vdnEJWE1NX01NV09SRCBbZXNpK2VheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTUKKyAgICAgICAgbW92ICAgICBlZHgsIEpTQU1QUk9XIFtlZGkrMSpTSVpFT0ZfSlNBTVBST1ddCisgICAgICAgIG1vdiAgICAgZXNpLCBKU0FNUFJPVyBbZWRpKzMqU0laRU9GX0pTQU1QUk9XXQorICAgICAgICBtb3ZxICAgIFhNTV9NTVdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdLCB4bW02CisgICAgICAgIG1vdnEgICAgWE1NX01NV09SRCBbZXNpK2VheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTAKKyAgICAgICAgbW92ICAgICBlZHgsIEpTQU1QUk9XIFtlZGkrNSpTSVpFT0ZfSlNBTVBST1ddCisgICAgICAgIG1vdiAgICAgZXNpLCBKU0FNUFJPVyBbZWRpKzcqU0laRU9GX0pTQU1QUk9XXQorICAgICAgICBtb3ZxICAgIFhNTV9NTVdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdLCB4bW0yCisgICAgICAgIG1vdnEgICAgWE1NX01NV09SRCBbZXNpK2VheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTUKIAotCXBvcAllZGkKLQlwb3AJZXNpCi07CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi07CXBvcAllY3gJCTsgdW51c2VkCi0JcG9wcGljCWVieAotCW1vdgllc3AsZWJwCQk7IGVzcCA8LSBhbGlnbmVkIGVicAotCXBvcAllc3AJCTsgZXNwIDwtIG9yaWdpbmFsIGVicAotCXBvcAllYnAKLQlyZXQKKyAgICAgICAgcG9wICAgICBlZGkKKyAgICAgICAgcG9wICAgICBlc2kKKzsgICAgICAgcG9wICAgICBlZHggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICAgICAgcG9wICAgICBlY3ggICAgICAgICAgICAgOyB1bnVzZWQKKyAgICAgICAgcG9wcGljICBlYngKKyAgICAgICAgbW92ICAgICBlc3AsZWJwICAgICAgICAgOyBlc3AgPC0gYWxpZ25lZCBlYnAKKyAgICAgICAgcG9wICAgICBlc3AgICAgICAgICAgICAgOyBlc3AgPC0gb3JpZ2luYWwgZWJwCisgICAgICAgIHBvcCAgICAgZWJwCisgICAgICAgIHJldAogCiA7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQogOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgotCWFsaWduCTE2CisgICAgICAgIGFsaWduICAgMTYKZGlmZiAtLWdpdCBhL3NpbWQvamlzczJyZWQtNjQuYXNtIGIvc2ltZC9qaXNzMnJlZC02NC5hc20KaW5kZXggNjgwN2YxNy4uYmQ3YzM1YyAxMDA2NDQKLS0tIGEvc2ltZC9qaXNzMnJlZC02NC5hc20KKysrIGIvc2ltZC9qaXNzMnJlZC02NC5hc20KQEAgLTI3LDc0ICsyNyw3NCBAQAogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSVkZWZpbmUgQ09OU1RfQklUUwkxMwotJWRlZmluZSBQQVNTMV9CSVRTCTIKKyVkZWZpbmUgQ09OU1RfQklUUyAgICAgIDEzCislZGVmaW5lIFBBU1MxX0JJVFMgICAgICAyCiAKLSVkZWZpbmUgREVTQ0FMRV9QMV80CShDT05TVF9CSVRTLVBBU1MxX0JJVFMrMSkKLSVkZWZpbmUgREVTQ0FMRV9QMl80CShDT05TVF9CSVRTK1BBU1MxX0JJVFMrMysxKQotJWRlZmluZSBERVNDQUxFX1AxXzIJKENPTlNUX0JJVFMtUEFTUzFfQklUUysyKQotJWRlZmluZSBERVNDQUxFX1AyXzIJKENPTlNUX0JJVFMrUEFTUzFfQklUUyszKzIpCislZGVmaW5lIERFU0NBTEVfUDFfNCAgICAoQ09OU1RfQklUUy1QQVNTMV9CSVRTKzEpCislZGVmaW5lIERFU0NBTEVfUDJfNCAgICAoQ09OU1RfQklUUytQQVNTMV9CSVRTKzMrMSkKKyVkZWZpbmUgREVTQ0FMRV9QMV8yICAgIChDT05TVF9CSVRTLVBBU1MxX0JJVFMrMikKKyVkZWZpbmUgREVTQ0FMRV9QMl8yICAgIChDT05TVF9CSVRTK1BBU1MxX0JJVFMrMysyKQogCiAlaWYgQ09OU1RfQklUUyA9PSAxMwotRl8wXzIxMQllcXUJIDE3MzAJCTsgRklYKDAuMjExMTY0MjQzKQotRl8wXzUwOQllcXUJIDQxNzYJCTsgRklYKDAuNTA5Nzk1NTc5KQotRl8wXzYwMQllcXUJIDQ5MjYJCTsgRklYKDAuNjAxMzQ0ODg3KQotRl8wXzcyMAllcXUJIDU5MDYJCTsgRklYKDAuNzIwOTU5ODIyKQotRl8wXzc2NQllcXUJIDYyNzAJCTsgRklYKDAuNzY1MzY2ODY1KQotRl8wXzg1MAllcXUJIDY5NjcJCTsgRklYKDAuODUwNDMwMDk1KQotRl8wXzg5OQllcXUJIDczNzMJCTsgRklYKDAuODk5OTc2MjIzKQotRl8xXzA2MQllcXUJIDg2OTcJCTsgRklYKDEuMDYxNTk0MzM3KQotRl8xXzI3MgllcXUJMTA0MjYJCTsgRklYKDEuMjcyNzU4NTgwKQotRl8xXzQ1MQllcXUJMTE4OTMJCTsgRklYKDEuNDUxNzc0OTgxKQotRl8xXzg0NwllcXUJMTUxMzcJCTsgRklYKDEuODQ3NzU5MDY1KQotRl8yXzE3MgllcXUJMTc3OTkJCTsgRklYKDIuMTcyNzM0ODAzKQotRl8yXzU2MgllcXUJMjA5OTUJCTsgRklYKDIuNTYyOTE1NDQ3KQotRl8zXzYyNAllcXUJMjk2OTIJCTsgRklYKDMuNjI0NTA5Nzg1KQorRl8wXzIxMSBlcXUgICAgICAxNzMwICAgICAgICAgICA7IEZJWCgwLjIxMTE2NDI0MykKK0ZfMF81MDkgZXF1ICAgICAgNDE3NiAgICAgICAgICAgOyBGSVgoMC41MDk3OTU1NzkpCitGXzBfNjAxIGVxdSAgICAgIDQ5MjYgICAgICAgICAgIDsgRklYKDAuNjAxMzQ0ODg3KQorRl8wXzcyMCBlcXUgICAgICA1OTA2ICAgICAgICAgICA7IEZJWCgwLjcyMDk1OTgyMikKK0ZfMF83NjUgZXF1ICAgICAgNjI3MCAgICAgICAgICAgOyBGSVgoMC43NjUzNjY4NjUpCitGXzBfODUwIGVxdSAgICAgIDY5NjcgICAgICAgICAgIDsgRklYKDAuODUwNDMwMDk1KQorRl8wXzg5OSBlcXUgICAgICA3MzczICAgICAgICAgICA7IEZJWCgwLjg5OTk3NjIyMykKK0ZfMV8wNjEgZXF1ICAgICAgODY5NyAgICAgICAgICAgOyBGSVgoMS4wNjE1OTQzMzcpCitGXzFfMjcyIGVxdSAgICAgMTA0MjYgICAgICAgICAgIDsgRklYKDEuMjcyNzU4NTgwKQorRl8xXzQ1MSBlcXUgICAgIDExODkzICAgICAgICAgICA7IEZJWCgxLjQ1MTc3NDk4MSkKK0ZfMV84NDcgZXF1ICAgICAxNTEzNyAgICAgICAgICAgOyBGSVgoMS44NDc3NTkwNjUpCitGXzJfMTcyIGVxdSAgICAgMTc3OTkgICAgICAgICAgIDsgRklYKDIuMTcyNzM0ODAzKQorRl8yXzU2MiBlcXUgICAgIDIwOTk1ICAgICAgICAgICA7IEZJWCgyLjU2MjkxNTQ0NykKK0ZfM182MjQgZXF1ICAgICAyOTY5MiAgICAgICAgICAgOyBGSVgoMy42MjQ1MDk3ODUpCiAlZWxzZQogOyBOQVNNIGNhbm5vdCBkbyBjb21waWxlLXRpbWUgYXJpdGhtZXRpYyBvbiBmbG9hdGluZy1wb2ludCBjb25zdGFudHMuCiAlZGVmaW5lIERFU0NBTEUoeCxuKSAgKCgoeCkrKDE8PCgobiktMSkpKT4+KG4pKQotRl8wXzIxMQllcXUJREVTQ0FMRSggMjI2NzM1ODc5LDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuMjExMTY0MjQzKQotRl8wXzUwOQllcXUJREVTQ0FMRSggNTQ3Mzg4ODM0LDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuNTA5Nzk1NTc5KQotRl8wXzYwMQllcXUJREVTQ0FMRSggNjQ1Njg5MTU1LDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuNjAxMzQ0ODg3KQotRl8wXzcyMAllcXUJREVTQ0FMRSggNzc0MTI0NzE0LDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuNzIwOTU5ODIyKQotRl8wXzc2NQllcXUJREVTQ0FMRSggODIxODA2NDEzLDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuNzY1MzY2ODY1KQotRl8wXzg1MAllcXUJREVTQ0FMRSggOTEzMTQyMzYxLDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuODUwNDMwMDk1KQotRl8wXzg5OQllcXUJREVTQ0FMRSggOTY2MzQyMTExLDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuODk5OTc2MjIzKQotRl8xXzA2MQllcXUJREVTQ0FMRSgxMTM5ODc4MjM5LDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuMDYxNTk0MzM3KQotRl8xXzI3MgllcXUJREVTQ0FMRSgxMzY2NjE0MTE5LDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuMjcyNzU4NTgwKQotRl8xXzQ1MQllcXUJREVTQ0FMRSgxNTU4ODMxNTE2LDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuNDUxNzc0OTgxKQotRl8xXzg0NwllcXUJREVTQ0FMRSgxOTg0MDE2MTg4LDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuODQ3NzU5MDY1KQotRl8yXzE3MgllcXUJREVTQ0FMRSgyMzMyOTU2MjMwLDMwLUNPTlNUX0JJVFMpCTsgRklYKDIuMTcyNzM0ODAzKQotRl8yXzU2MgllcXUJREVTQ0FMRSgyNzUxOTA5NTA2LDMwLUNPTlNUX0JJVFMpCTsgRklYKDIuNTYyOTE1NDQ3KQotRl8zXzYyNAllcXUJREVTQ0FMRSgzODkxNzg3NzQ3LDMwLUNPTlNUX0JJVFMpCTsgRklYKDMuNjI0NTA5Nzg1KQorRl8wXzIxMSBlcXUgICAgIERFU0NBTEUoIDIyNjczNTg3OSwzMC1DT05TVF9CSVRTKSAgICAgICA7IEZJWCgwLjIxMTE2NDI0MykKK0ZfMF81MDkgZXF1ICAgICBERVNDQUxFKCA1NDczODg4MzQsMzAtQ09OU1RfQklUUykgICAgICAgOyBGSVgoMC41MDk3OTU1NzkpCitGXzBfNjAxIGVxdSAgICAgREVTQ0FMRSggNjQ1Njg5MTU1LDMwLUNPTlNUX0JJVFMpICAgICAgIDsgRklYKDAuNjAxMzQ0ODg3KQorRl8wXzcyMCBlcXUgICAgIERFU0NBTEUoIDc3NDEyNDcxNCwzMC1DT05TVF9CSVRTKSAgICAgICA7IEZJWCgwLjcyMDk1OTgyMikKK0ZfMF83NjUgZXF1ICAgICBERVNDQUxFKCA4MjE4MDY0MTMsMzAtQ09OU1RfQklUUykgICAgICAgOyBGSVgoMC43NjUzNjY4NjUpCitGXzBfODUwIGVxdSAgICAgREVTQ0FMRSggOTEzMTQyMzYxLDMwLUNPTlNUX0JJVFMpICAgICAgIDsgRklYKDAuODUwNDMwMDk1KQorRl8wXzg5OSBlcXUgICAgIERFU0NBTEUoIDk2NjM0MjExMSwzMC1DT05TVF9CSVRTKSAgICAgICA7IEZJWCgwLjg5OTk3NjIyMykKK0ZfMV8wNjEgZXF1ICAgICBERVNDQUxFKDExMzk4NzgyMzksMzAtQ09OU1RfQklUUykgICAgICAgOyBGSVgoMS4wNjE1OTQzMzcpCitGXzFfMjcyIGVxdSAgICAgREVTQ0FMRSgxMzY2NjE0MTE5LDMwLUNPTlNUX0JJVFMpICAgICAgIDsgRklYKDEuMjcyNzU4NTgwKQorRl8xXzQ1MSBlcXUgICAgIERFU0NBTEUoMTU1ODgzMTUxNiwzMC1DT05TVF9CSVRTKSAgICAgICA7IEZJWCgxLjQ1MTc3NDk4MSkKK0ZfMV84NDcgZXF1ICAgICBERVNDQUxFKDE5ODQwMTYxODgsMzAtQ09OU1RfQklUUykgICAgICAgOyBGSVgoMS44NDc3NTkwNjUpCitGXzJfMTcyIGVxdSAgICAgREVTQ0FMRSgyMzMyOTU2MjMwLDMwLUNPTlNUX0JJVFMpICAgICAgIDsgRklYKDIuMTcyNzM0ODAzKQorRl8yXzU2MiBlcXUgICAgIERFU0NBTEUoMjc1MTkwOTUwNiwzMC1DT05TVF9CSVRTKSAgICAgICA7IEZJWCgyLjU2MjkxNTQ0NykKK0ZfM182MjQgZXF1ICAgICBERVNDQUxFKDM4OTE3ODc3NDcsMzAtQ09OU1RfQklUUykgICAgICAgOyBGSVgoMy42MjQ1MDk3ODUpCiAlZW5kaWYKIAogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCVNFQ1RJT04JU0VHX0NPTlNUCisgICAgICAgIFNFQ1RJT04gU0VHX0NPTlNUCiAKLQlhbGlnbnoJMTYKLQlnbG9iYWwJRVhUTihqY29uc3RfaWRjdF9yZWRfc3NlMikKKyAgICAgICAgYWxpZ256ICAxNgorICAgICAgICBnbG9iYWwgIEVYVE4oamNvbnN0X2lkY3RfcmVkX3NzZTIpCiAKIEVYVE4oamNvbnN0X2lkY3RfcmVkX3NzZTIpOgogCi1QV19GMTg0X01GMDc2CXRpbWVzIDQgZHcgIEZfMV84NDcsLUZfMF83NjUKLVBXX0YyNTZfRjA4OQl0aW1lcyA0IGR3ICBGXzJfNTYyLCBGXzBfODk5Ci1QV19GMTA2X01GMjE3CXRpbWVzIDQgZHcgIEZfMV8wNjEsLUZfMl8xNzIKLVBXX01GMDYwX01GMDUwCXRpbWVzIDQgZHcgLUZfMF82MDEsLUZfMF81MDkKLVBXX0YxNDVfTUYwMjEJdGltZXMgNCBkdyAgRl8xXzQ1MSwtRl8wXzIxMQotUFdfRjM2Ml9NRjEyNwl0aW1lcyA0IGR3ICBGXzNfNjI0LC1GXzFfMjcyCi1QV19GMDg1X01GMDcyCXRpbWVzIDQgZHcgIEZfMF84NTAsLUZfMF83MjAKLVBEX0RFU0NBTEVfUDFfNAl0aW1lcyA0IGRkICAxIDw8IChERVNDQUxFX1AxXzQtMSkKLVBEX0RFU0NBTEVfUDJfNAl0aW1lcyA0IGRkICAxIDw8IChERVNDQUxFX1AyXzQtMSkKLVBEX0RFU0NBTEVfUDFfMgl0aW1lcyA0IGRkICAxIDw8IChERVNDQUxFX1AxXzItMSkKLVBEX0RFU0NBTEVfUDJfMgl0aW1lcyA0IGRkICAxIDw8IChERVNDQUxFX1AyXzItMSkKLVBCX0NFTlRFUkpTQU1QCXRpbWVzIDE2IGRiIENFTlRFUkpTQU1QTEUKK1BXX0YxODRfTUYwNzYgICB0aW1lcyA0IGR3ICBGXzFfODQ3LC1GXzBfNzY1CitQV19GMjU2X0YwODkgICAgdGltZXMgNCBkdyAgRl8yXzU2MiwgRl8wXzg5OQorUFdfRjEwNl9NRjIxNyAgIHRpbWVzIDQgZHcgIEZfMV8wNjEsLUZfMl8xNzIKK1BXX01GMDYwX01GMDUwICB0aW1lcyA0IGR3IC1GXzBfNjAxLC1GXzBfNTA5CitQV19GMTQ1X01GMDIxICAgdGltZXMgNCBkdyAgRl8xXzQ1MSwtRl8wXzIxMQorUFdfRjM2Ml9NRjEyNyAgIHRpbWVzIDQgZHcgIEZfM182MjQsLUZfMV8yNzIKK1BXX0YwODVfTUYwNzIgICB0aW1lcyA0IGR3ICBGXzBfODUwLC1GXzBfNzIwCitQRF9ERVNDQUxFX1AxXzQgdGltZXMgNCBkZCAgMSA8PCAoREVTQ0FMRV9QMV80LTEpCitQRF9ERVNDQUxFX1AyXzQgdGltZXMgNCBkZCAgMSA8PCAoREVTQ0FMRV9QMl80LTEpCitQRF9ERVNDQUxFX1AxXzIgdGltZXMgNCBkZCAgMSA8PCAoREVTQ0FMRV9QMV8yLTEpCitQRF9ERVNDQUxFX1AyXzIgdGltZXMgNCBkZCAgMSA8PCAoREVTQ0FMRV9QMl8yLTEpCitQQl9DRU5URVJKU0FNUCAgdGltZXMgMTYgZGIgQ0VOVEVSSlNBTVBMRQogCi0JYWxpZ256CTE2CisgICAgICAgIGFsaWdueiAgMTYKIAogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCVNFQ1RJT04JU0VHX1RFWFQKLQlCSVRTCTY0CisgICAgICAgIFNFQ1RJT04gU0VHX1RFWFQKKyAgICAgICAgQklUUyAgICA2NAogOwogOyBQZXJmb3JtIGRlcXVhbnRpemF0aW9uIGFuZCBpbnZlcnNlIERDVCBvbiBvbmUgYmxvY2sgb2YgY29lZmZpY2llbnRzLAogOyBwcm9kdWNpbmcgYSByZWR1Y2VkLXNpemUgNHg0IG91dHB1dCBibG9jay4KQEAgLTEwOSwyOTIgKzEwOSwyOTIgQEAKIDsgcjEyID0gSlNBTVBBUlJBWSBvdXRwdXRfYnVmCiA7IHIxMyA9IEpESU1FTlNJT04gb3V0cHV0X2NvbAogCi0lZGVmaW5lIG9yaWdpbmFsX3JicAlyYnArMAotJWRlZmluZSB3ayhpKQkJcmJwLShXS19OVU0tKGkpKSpTSVpFT0ZfWE1NV09SRAk7IHhtbXdvcmQgd2tbV0tfTlVNXQotJWRlZmluZSBXS19OVU0JCTIKKyVkZWZpbmUgb3JpZ2luYWxfcmJwICAgIHJicCswCislZGVmaW5lIHdrKGkpICAgICAgICAgICByYnAtKFdLX05VTS0oaSkpKlNJWkVPRl9YTU1XT1JEIDsgeG1td29yZCB3a1tXS19OVU1dCislZGVmaW5lIFdLX05VTSAgICAgICAgICAyCiAKLQlhbGlnbgkxNgotCWdsb2JhbAlFWFROKGpzaW1kX2lkY3RfNHg0X3NzZTIpCisgICAgICAgIGFsaWduICAgMTYKKyAgICAgICAgZ2xvYmFsICBFWFROKGpzaW1kX2lkY3RfNHg0X3NzZTIpCiAKIEVYVE4oanNpbWRfaWRjdF80eDRfc3NlMik6Ci0JcHVzaAlyYnAKLQltb3YJcmF4LHJzcAkJCQk7IHJheCA9IG9yaWdpbmFsIHJicAotCXN1Yglyc3AsIGJ5dGUgNAotCWFuZAlyc3AsIGJ5dGUgKC1TSVpFT0ZfWE1NV09SRCkJOyBhbGlnbiB0byAxMjggYml0cwotCW1vdglbcnNwXSxyYXgKLQltb3YJcmJwLHJzcAkJCQk7IHJicCA9IGFsaWduZWQgcmJwCi0JbGVhCXJzcCwgW3drKDApXQotCWNvbGxlY3RfYXJncworICAgICAgICBwdXNoICAgIHJicAorICAgICAgICBtb3YgICAgIHJheCxyc3AgICAgICAgICAgICAgICAgICAgICAgICAgOyByYXggPSBvcmlnaW5hbCByYnAKKyAgICAgICAgc3ViICAgICByc3AsIGJ5dGUgNAorICAgICAgICBhbmQgICAgIHJzcCwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKSAgICAgOyBhbGlnbiB0byAxMjggYml0cworICAgICAgICBtb3YgICAgIFtyc3BdLHJheAorICAgICAgICBtb3YgICAgIHJicCxyc3AgICAgICAgICAgICAgICAgICAgICAgICAgOyByYnAgPSBhbGlnbmVkIHJicAorICAgICAgICBsZWEgICAgIHJzcCwgW3drKDApXQorICAgICAgICBjb2xsZWN0X2FyZ3MKIAotCTsgLS0tLSBQYXNzIDE6IHByb2Nlc3MgY29sdW1ucyBmcm9tIGlucHV0LgorICAgICAgICA7IC0tLS0gUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMgZnJvbSBpbnB1dC4KIAotCW1vdglyZHgsIHIxMAk7IHF1YW50cHRyCi0JbW92CXJzaSwgcjExCQk7IGlucHRyCisgICAgICAgIG1vdiAgICAgcmR4LCByMTAgICAgICAgICAgICAgICAgOyBxdWFudHB0cgorICAgICAgICBtb3YgICAgIHJzaSwgcjExICAgICAgICAgICAgICAgIDsgaW5wdHIKIAogJWlmbmRlZiBOT19aRVJPX0NPTFVNTl9URVNUXzRYNF9TU0UyCi0JbW92CWVheCwgRFdPUkQgW0RXQkxPQ0soMSwwLHJzaSxTSVpFT0ZfSkNPRUYpXQotCW9yCWVheCwgRFdPUkQgW0RXQkxPQ0soMiwwLHJzaSxTSVpFT0ZfSkNPRUYpXQotCWpueglzaG9ydCAuY29sdW1uRENUCisgICAgICAgIG1vdiAgICAgZWF4LCBEV09SRCBbRFdCTE9DSygxLDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG9yICAgICAgZWF4LCBEV09SRCBbRFdCTE9DSygyLDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIGpueiAgICAgc2hvcnQgLmNvbHVtbkRDVAogCi0JbW92ZHFhCXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxyc2ksU0laRU9GX0pDT0VGKV0KLQltb3ZkcWEJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMiwwLHJzaSxTSVpFT0ZfSkNPRUYpXQotCXBvcgl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAscnNpLFNJWkVPRl9KQ09FRildCi0JcG9yCXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxyc2ksU0laRU9GX0pDT0VGKV0KLQlwb3IJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soNiwwLHJzaSxTSVpFT0ZfSkNPRUYpXQotCXBvcgl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSyg3LDAscnNpLFNJWkVPRl9KQ09FRildCi0JcG9yCXhtbTAseG1tMQotCXBhY2tzc3diIHhtbTAseG1tMAotCXBhY2tzc3diIHhtbTAseG1tMAotCW1vdmQJZWF4LHhtbTAKLQl0ZXN0CXJheCxyYXgKLQlqbnoJc2hvcnQgLmNvbHVtbkRDVAorICAgICAgICBtb3ZkcWEgIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxyc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgbW92ZHFhICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygyLDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIHBvciAgICAgeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMywwLHJzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBwb3IgICAgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxyc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgcG9yICAgICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSyg2LDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIHBvciAgICAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNywwLHJzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBwb3IgICAgIHhtbTAseG1tMQorICAgICAgICBwYWNrc3N3YiB4bW0wLHhtbTAKKyAgICAgICAgcGFja3Nzd2IgeG1tMCx4bW0wCisgICAgICAgIG1vdmQgICAgZWF4LHhtbTAKKyAgICAgICAgdGVzdCAgICByYXgscmF4CisgICAgICAgIGpueiAgICAgc2hvcnQgLmNvbHVtbkRDVAogCi0JOyAtLSBBQyB0ZXJtcyBhbGwgemVybworICAgICAgICA7IC0tIEFDIHRlcm1zIGFsbCB6ZXJvCiAKLQltb3ZkcWEJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJzaSxTSVpFT0ZfSkNPRUYpXQotCXBtdWxsdwl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAscmR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorICAgICAgICBtb3ZkcWEgIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxyc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgcG11bGx3ICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAscmR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQogCi0JcHNsbHcJeG1tMCxQQVNTMV9CSVRTCisgICAgICAgIHBzbGx3ICAgeG1tMCxQQVNTMV9CSVRTCiAKLQltb3ZkcWEgICAgeG1tMyx4bW0wCTsgeG1tMD1pbjA9KDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3KQotCXB1bnBja2x3ZCB4bW0wLHhtbTAJOyB4bW0wPSgwMCAwMCAwMSAwMSAwMiAwMiAwMyAwMykKLQlwdW5wY2tod2QgeG1tMyx4bW0zCTsgeG1tMz0oMDQgMDQgMDUgMDUgMDYgMDYgMDcgMDcpCisgICAgICAgIG1vdmRxYSAgICB4bW0zLHhtbTAgICAgIDsgeG1tMD1pbjA9KDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3KQorICAgICAgICBwdW5wY2tsd2QgeG1tMCx4bW0wICAgICA7IHhtbTA9KDAwIDAwIDAxIDAxIDAyIDAyIDAzIDAzKQorICAgICAgICBwdW5wY2tod2QgeG1tMyx4bW0zICAgICA7IHhtbTM9KDA0IDA0IDA1IDA1IDA2IDA2IDA3IDA3KQogCi0JcHNodWZkCXhtbTEseG1tMCwweDUwCTsgeG1tMT1bY29sMCBjb2wxXT0oMDAgMDAgMDAgMDAgMDEgMDEgMDEgMDEpCi0JcHNodWZkCXhtbTAseG1tMCwweEZBCTsgeG1tMD1bY29sMiBjb2wzXT0oMDIgMDIgMDIgMDIgMDMgMDMgMDMgMDMpCi0JcHNodWZkCXhtbTYseG1tMywweDUwCTsgeG1tNj1bY29sNCBjb2w1XT0oMDQgMDQgMDQgMDQgMDUgMDUgMDUgMDUpCi0JcHNodWZkCXhtbTMseG1tMywweEZBCTsgeG1tMz1bY29sNiBjb2w3XT0oMDYgMDYgMDYgMDYgMDcgMDcgMDcgMDcpCisgICAgICAgIHBzaHVmZCAgeG1tMSx4bW0wLDB4NTAgIDsgeG1tMT1bY29sMCBjb2wxXT0oMDAgMDAgMDAgMDAgMDEgMDEgMDEgMDEpCisgICAgICAgIHBzaHVmZCAgeG1tMCx4bW0wLDB4RkEgIDsgeG1tMD1bY29sMiBjb2wzXT0oMDIgMDIgMDIgMDIgMDMgMDMgMDMgMDMpCisgICAgICAgIHBzaHVmZCAgeG1tNix4bW0zLDB4NTAgIDsgeG1tNj1bY29sNCBjb2w1XT0oMDQgMDQgMDQgMDQgMDUgMDUgMDUgMDUpCisgICAgICAgIHBzaHVmZCAgeG1tMyx4bW0zLDB4RkEgIDsgeG1tMz1bY29sNiBjb2w3XT0oMDYgMDYgMDYgMDYgMDcgMDcgMDcgMDcpCiAKLQlqbXAJbmVhciAuY29sdW1uX2VuZAorICAgICAgICBqbXAgICAgIG5lYXIgLmNvbHVtbl9lbmQKICVlbmRpZgogLmNvbHVtbkRDVDoKIAotCTsgLS0gT2RkIHBhcnQKKyAgICAgICAgOyAtLSBPZGQgcGFydAogCi0JbW92ZHFhCXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxyc2ksU0laRU9GX0pDT0VGKV0KLQltb3ZkcWEJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMywwLHJzaSxTSVpFT0ZfSkNPRUYpXQotCXBtdWxsdwl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAscmR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQotCXBtdWxsdwl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAscmR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQotCW1vdmRxYQl4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSyg1LDAscnNpLFNJWkVPRl9KQ09FRildCi0JbW92ZHFhCXhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxyc2ksU0laRU9GX0pDT0VGKV0KLQlwbXVsbHcJeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soNSwwLHJkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KLQlwbXVsbHcJeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNywwLHJkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKyAgICAgICAgbW92ZHFhICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdmRxYSAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMywwLHJzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBwbXVsbHcgIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxyZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisgICAgICAgIHBtdWxsdyAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMywwLHJkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKyAgICAgICAgbW92ZHFhICB4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSyg1LDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdmRxYSAgeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNywwLHJzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBwbXVsbHcgIHhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxyZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisgICAgICAgIHBtdWxsdyAgeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNywwLHJkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KIAotCW1vdmRxYSAgICB4bW00LHhtbTAKLQltb3ZkcWEgICAgeG1tNSx4bW0wCi0JcHVucGNrbHdkIHhtbTQseG1tMQotCXB1bnBja2h3ZCB4bW01LHhtbTEKLQltb3ZkcWEgICAgeG1tMCx4bW00Ci0JbW92ZHFhICAgIHhtbTEseG1tNQotCXBtYWRkd2QgICB4bW00LFtyZWwgUFdfRjI1Nl9GMDg5XQk7IHhtbTQ9KHRtcDJMKQotCXBtYWRkd2QgICB4bW01LFtyZWwgUFdfRjI1Nl9GMDg5XQk7IHhtbTU9KHRtcDJIKQotCXBtYWRkd2QgICB4bW0wLFtyZWwgUFdfRjEwNl9NRjIxN10JOyB4bW0wPSh0bXAwTCkKLQlwbWFkZHdkICAgeG1tMSxbcmVsIFBXX0YxMDZfTUYyMTddCTsgeG1tMT0odG1wMEgpCisgICAgICAgIG1vdmRxYSAgICB4bW00LHhtbTAKKyAgICAgICAgbW92ZHFhICAgIHhtbTUseG1tMAorICAgICAgICBwdW5wY2tsd2QgeG1tNCx4bW0xCisgICAgICAgIHB1bnBja2h3ZCB4bW01LHhtbTEKKyAgICAgICAgbW92ZHFhICAgIHhtbTAseG1tNAorICAgICAgICBtb3ZkcWEgICAgeG1tMSx4bW01CisgICAgICAgIHBtYWRkd2QgICB4bW00LFtyZWwgUFdfRjI1Nl9GMDg5XSAgICAgICA7IHhtbTQ9KHRtcDJMKQorICAgICAgICBwbWFkZHdkICAgeG1tNSxbcmVsIFBXX0YyNTZfRjA4OV0gICAgICAgOyB4bW01PSh0bXAySCkKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTAsW3JlbCBQV19GMTA2X01GMjE3XSAgICAgIDsgeG1tMD0odG1wMEwpCisgICAgICAgIHBtYWRkd2QgICB4bW0xLFtyZWwgUFdfRjEwNl9NRjIxN10gICAgICA7IHhtbTE9KHRtcDBIKQogCi0JbW92ZHFhICAgIHhtbTYseG1tMgotCW1vdmRxYSAgICB4bW03LHhtbTIKLQlwdW5wY2tsd2QgeG1tNix4bW0zCi0JcHVucGNraHdkIHhtbTcseG1tMwotCW1vdmRxYSAgICB4bW0yLHhtbTYKLQltb3ZkcWEgICAgeG1tMyx4bW03Ci0JcG1hZGR3ZCAgIHhtbTYsW3JlbCBQV19NRjA2MF9NRjA1MF0JOyB4bW02PSh0bXAyTCkKLQlwbWFkZHdkICAgeG1tNyxbcmVsIFBXX01GMDYwX01GMDUwXQk7IHhtbTc9KHRtcDJIKQotCXBtYWRkd2QgICB4bW0yLFtyZWwgUFdfRjE0NV9NRjAyMV0JOyB4bW0yPSh0bXAwTCkKLQlwbWFkZHdkICAgeG1tMyxbcmVsIFBXX0YxNDVfTUYwMjFdCTsgeG1tMz0odG1wMEgpCisgICAgICAgIG1vdmRxYSAgICB4bW02LHhtbTIKKyAgICAgICAgbW92ZHFhICAgIHhtbTcseG1tMgorICAgICAgICBwdW5wY2tsd2QgeG1tNix4bW0zCisgICAgICAgIHB1bnBja2h3ZCB4bW03LHhtbTMKKyAgICAgICAgbW92ZHFhICAgIHhtbTIseG1tNgorICAgICAgICBtb3ZkcWEgICAgeG1tMyx4bW03CisgICAgICAgIHBtYWRkd2QgICB4bW02LFtyZWwgUFdfTUYwNjBfTUYwNTBdICAgICA7IHhtbTY9KHRtcDJMKQorICAgICAgICBwbWFkZHdkICAgeG1tNyxbcmVsIFBXX01GMDYwX01GMDUwXSAgICAgOyB4bW03PSh0bXAySCkKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTIsW3JlbCBQV19GMTQ1X01GMDIxXSAgICAgIDsgeG1tMj0odG1wMEwpCisgICAgICAgIHBtYWRkd2QgICB4bW0zLFtyZWwgUFdfRjE0NV9NRjAyMV0gICAgICA7IHhtbTM9KHRtcDBIKQogCi0JcGFkZGQJeG1tNix4bW00CQk7IHhtbTY9dG1wMkwKLQlwYWRkZAl4bW03LHhtbTUJCTsgeG1tNz10bXAySAotCXBhZGRkCXhtbTIseG1tMAkJOyB4bW0yPXRtcDBMCi0JcGFkZGQJeG1tMyx4bW0xCQk7IHhtbTM9dG1wMEgKKyAgICAgICAgcGFkZGQgICB4bW02LHhtbTQgICAgICAgICAgICAgICA7IHhtbTY9dG1wMkwKKyAgICAgICAgcGFkZGQgICB4bW03LHhtbTUgICAgICAgICAgICAgICA7IHhtbTc9dG1wMkgKKyAgICAgICAgcGFkZGQgICB4bW0yLHhtbTAgICAgICAgICAgICAgICA7IHhtbTI9dG1wMEwKKyAgICAgICAgcGFkZGQgICB4bW0zLHhtbTEgICAgICAgICAgICAgICA7IHhtbTM9dG1wMEgKIAotCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTIJOyB3aygwKT10bXAwTAotCW1vdmRxYQlYTU1XT1JEIFt3aygxKV0sIHhtbTMJOyB3aygxKT10bXAwSAorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDApXSwgeG1tMiAgIDsgd2soMCk9dG1wMEwKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygxKV0sIHhtbTMgICA7IHdrKDEpPXRtcDBICiAKLQk7IC0tIEV2ZW4gcGFydAorICAgICAgICA7IC0tIEV2ZW4gcGFydAogCi0JbW92ZHFhCXhtbTQsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxyc2ksU0laRU9GX0pDT0VGKV0KLQltb3ZkcWEJeG1tNSwgWE1NV09SRCBbWE1NQkxPQ0soMiwwLHJzaSxTSVpFT0ZfSkNPRUYpXQotCW1vdmRxYQl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSyg2LDAscnNpLFNJWkVPRl9KQ09FRildCi0JcG11bGx3CXhtbTQsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxyZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCi0JcG11bGx3CXhtbTUsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxyZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCi0JcG11bGx3CXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDYsMCxyZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisgICAgICAgIG1vdmRxYSAgeG1tNCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBtb3ZkcWEgIHhtbTUsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxyc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgbW92ZHFhICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSyg2LDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIHBtdWxsdyAgeG1tNCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKyAgICAgICAgcG11bGx3ICB4bW01LCBYTU1XT1JEIFtYTU1CTE9DSygyLDAscmR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorICAgICAgICBwbXVsbHcgIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDYsMCxyZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCiAKLQlweG9yICAgICAgeG1tMSx4bW0xCi0JcHhvciAgICAgIHhtbTIseG1tMgotCXB1bnBja2x3ZCB4bW0xLHhtbTQJCTsgeG1tMT10bXAwTAotCXB1bnBja2h3ZCB4bW0yLHhtbTQJCTsgeG1tMj10bXAwSAotCXBzcmFkICAgICB4bW0xLCgxNi1DT05TVF9CSVRTLTEpIDsgcHNyYWQgeG1tMSwxNiAmIHBzbGxkIHhtbTEsQ09OU1RfQklUUysxCi0JcHNyYWQgICAgIHhtbTIsKDE2LUNPTlNUX0JJVFMtMSkgOyBwc3JhZCB4bW0yLDE2ICYgcHNsbGQgeG1tMixDT05TVF9CSVRTKzEKKyAgICAgICAgcHhvciAgICAgIHhtbTEseG1tMQorICAgICAgICBweG9yICAgICAgeG1tMix4bW0yCisgICAgICAgIHB1bnBja2x3ZCB4bW0xLHhtbTQgICAgICAgICAgICAgOyB4bW0xPXRtcDBMCisgICAgICAgIHB1bnBja2h3ZCB4bW0yLHhtbTQgICAgICAgICAgICAgOyB4bW0yPXRtcDBICisgICAgICAgIHBzcmFkICAgICB4bW0xLCgxNi1DT05TVF9CSVRTLTEpIDsgcHNyYWQgeG1tMSwxNiAmIHBzbGxkIHhtbTEsQ09OU1RfQklUUysxCisgICAgICAgIHBzcmFkICAgICB4bW0yLCgxNi1DT05TVF9CSVRTLTEpIDsgcHNyYWQgeG1tMiwxNiAmIHBzbGxkIHhtbTIsQ09OU1RfQklUUysxCiAKLQltb3ZkcWEgICAgeG1tMyx4bW01CQk7IHhtbTU9aW4yPXoyCi0JcHVucGNrbHdkIHhtbTUseG1tMAkJOyB4bW0wPWluNj16MwotCXB1bnBja2h3ZCB4bW0zLHhtbTAKLQlwbWFkZHdkICAgeG1tNSxbcmVsIFBXX0YxODRfTUYwNzZdCTsgeG1tNT10bXAyTAotCXBtYWRkd2QgICB4bW0zLFtyZWwgUFdfRjE4NF9NRjA3Nl0JOyB4bW0zPXRtcDJICisgICAgICAgIG1vdmRxYSAgICB4bW0zLHhtbTUgICAgICAgICAgICAgOyB4bW01PWluMj16MgorICAgICAgICBwdW5wY2tsd2QgeG1tNSx4bW0wICAgICAgICAgICAgIDsgeG1tMD1pbjY9ejMKKyAgICAgICAgcHVucGNraHdkIHhtbTMseG1tMAorICAgICAgICBwbWFkZHdkICAgeG1tNSxbcmVsIFBXX0YxODRfTUYwNzZdICAgICAgOyB4bW01PXRtcDJMCisgICAgICAgIHBtYWRkd2QgICB4bW0zLFtyZWwgUFdfRjE4NF9NRjA3Nl0gICAgICA7IHhtbTM9dG1wMkgKIAotCW1vdmRxYQl4bW00LHhtbTEKLQltb3ZkcWEJeG1tMCx4bW0yCi0JcGFkZGQJeG1tMSx4bW01CQk7IHhtbTE9dG1wMTBMCi0JcGFkZGQJeG1tMix4bW0zCQk7IHhtbTI9dG1wMTBICi0JcHN1YmQJeG1tNCx4bW01CQk7IHhtbTQ9dG1wMTJMCi0JcHN1YmQJeG1tMCx4bW0zCQk7IHhtbTA9dG1wMTJICisgICAgICAgIG1vdmRxYSAgeG1tNCx4bW0xCisgICAgICAgIG1vdmRxYSAgeG1tMCx4bW0yCisgICAgICAgIHBhZGRkICAgeG1tMSx4bW01ICAgICAgICAgICAgICAgOyB4bW0xPXRtcDEwTAorICAgICAgICBwYWRkZCAgIHhtbTIseG1tMyAgICAgICAgICAgICAgIDsgeG1tMj10bXAxMEgKKyAgICAgICAgcHN1YmQgICB4bW00LHhtbTUgICAgICAgICAgICAgICA7IHhtbTQ9dG1wMTJMCisgICAgICAgIHBzdWJkICAgeG1tMCx4bW0zICAgICAgICAgICAgICAgOyB4bW0wPXRtcDEySAogCi0JOyAtLSBGaW5hbCBvdXRwdXQgc3RhZ2UKKyAgICAgICAgOyAtLSBGaW5hbCBvdXRwdXQgc3RhZ2UKIAotCW1vdmRxYQl4bW01LHhtbTEKLQltb3ZkcWEJeG1tMyx4bW0yCi0JcGFkZGQJeG1tMSx4bW02CQk7IHhtbTE9ZGF0YTBMCi0JcGFkZGQJeG1tMix4bW03CQk7IHhtbTI9ZGF0YTBICi0JcHN1YmQJeG1tNSx4bW02CQk7IHhtbTU9ZGF0YTNMCi0JcHN1YmQJeG1tMyx4bW03CQk7IHhtbTM9ZGF0YTNICisgICAgICAgIG1vdmRxYSAgeG1tNSx4bW0xCisgICAgICAgIG1vdmRxYSAgeG1tMyx4bW0yCisgICAgICAgIHBhZGRkICAgeG1tMSx4bW02ICAgICAgICAgICAgICAgOyB4bW0xPWRhdGEwTAorICAgICAgICBwYWRkZCAgIHhtbTIseG1tNyAgICAgICAgICAgICAgIDsgeG1tMj1kYXRhMEgKKyAgICAgICAgcHN1YmQgICB4bW01LHhtbTYgICAgICAgICAgICAgICA7IHhtbTU9ZGF0YTNMCisgICAgICAgIHBzdWJkICAgeG1tMyx4bW03ICAgICAgICAgICAgICAgOyB4bW0zPWRhdGEzSAogCi0JbW92ZHFhCXhtbTYsW3JlbCBQRF9ERVNDQUxFX1AxXzRdCTsgeG1tNj1bcmVsIFBEX0RFU0NBTEVfUDFfNF0KKyAgICAgICAgbW92ZHFhICB4bW02LFtyZWwgUERfREVTQ0FMRV9QMV80XSAgICAgIDsgeG1tNj1bcmVsIFBEX0RFU0NBTEVfUDFfNF0KIAotCXBhZGRkCXhtbTEseG1tNgotCXBhZGRkCXhtbTIseG1tNgotCXBzcmFkCXhtbTEsREVTQ0FMRV9QMV80Ci0JcHNyYWQJeG1tMixERVNDQUxFX1AxXzQKLQlwYWRkZAl4bW01LHhtbTYKLQlwYWRkZAl4bW0zLHhtbTYKLQlwc3JhZAl4bW01LERFU0NBTEVfUDFfNAotCXBzcmFkCXhtbTMsREVTQ0FMRV9QMV80CisgICAgICAgIHBhZGRkICAgeG1tMSx4bW02CisgICAgICAgIHBhZGRkICAgeG1tMix4bW02CisgICAgICAgIHBzcmFkICAgeG1tMSxERVNDQUxFX1AxXzQKKyAgICAgICAgcHNyYWQgICB4bW0yLERFU0NBTEVfUDFfNAorICAgICAgICBwYWRkZCAgIHhtbTUseG1tNgorICAgICAgICBwYWRkZCAgIHhtbTMseG1tNgorICAgICAgICBwc3JhZCAgIHhtbTUsREVTQ0FMRV9QMV80CisgICAgICAgIHBzcmFkICAgeG1tMyxERVNDQUxFX1AxXzQKIAotCXBhY2tzc2R3ICB4bW0xLHhtbTIJCTsgeG1tMT1kYXRhMD0oMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcpCi0JcGFja3NzZHcgIHhtbTUseG1tMwkJOyB4bW01PWRhdGEzPSgzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNykKKyAgICAgICAgcGFja3NzZHcgIHhtbTEseG1tMiAgICAgICAgICAgICA7IHhtbTE9ZGF0YTA9KDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3KQorICAgICAgICBwYWNrc3NkdyAgeG1tNSx4bW0zICAgICAgICAgICAgIDsgeG1tNT1kYXRhMz0oMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcpCiAKLQltb3ZkcWEJeG1tNywgWE1NV09SRCBbd2soMCldCTsgeG1tNz10bXAwTAotCW1vdmRxYQl4bW02LCBYTU1XT1JEIFt3aygxKV0JOyB4bW02PXRtcDBICisgICAgICAgIG1vdmRxYSAgeG1tNywgWE1NV09SRCBbd2soMCldICAgOyB4bW03PXRtcDBMCisgICAgICAgIG1vdmRxYSAgeG1tNiwgWE1NV09SRCBbd2soMSldICAgOyB4bW02PXRtcDBICiAKLQltb3ZkcWEJeG1tMix4bW00Ci0JbW92ZHFhCXhtbTMseG1tMAotCXBhZGRkCXhtbTQseG1tNwkJOyB4bW00PWRhdGExTAotCXBhZGRkCXhtbTAseG1tNgkJOyB4bW0wPWRhdGExSAotCXBzdWJkCXhtbTIseG1tNwkJOyB4bW0yPWRhdGEyTAotCXBzdWJkCXhtbTMseG1tNgkJOyB4bW0zPWRhdGEySAorICAgICAgICBtb3ZkcWEgIHhtbTIseG1tNAorICAgICAgICBtb3ZkcWEgIHhtbTMseG1tMAorICAgICAgICBwYWRkZCAgIHhtbTQseG1tNyAgICAgICAgICAgICAgIDsgeG1tND1kYXRhMUwKKyAgICAgICAgcGFkZGQgICB4bW0wLHhtbTYgICAgICAgICAgICAgICA7IHhtbTA9ZGF0YTFICisgICAgICAgIHBzdWJkICAgeG1tMix4bW03ICAgICAgICAgICAgICAgOyB4bW0yPWRhdGEyTAorICAgICAgICBwc3ViZCAgIHhtbTMseG1tNiAgICAgICAgICAgICAgIDsgeG1tMz1kYXRhMkgKIAotCW1vdmRxYQl4bW03LFtyZWwgUERfREVTQ0FMRV9QMV80XQk7IHhtbTc9W3JlbCBQRF9ERVNDQUxFX1AxXzRdCisgICAgICAgIG1vdmRxYSAgeG1tNyxbcmVsIFBEX0RFU0NBTEVfUDFfNF0gICAgICA7IHhtbTc9W3JlbCBQRF9ERVNDQUxFX1AxXzRdCiAKLQlwYWRkZAl4bW00LHhtbTcKLQlwYWRkZAl4bW0wLHhtbTcKLQlwc3JhZAl4bW00LERFU0NBTEVfUDFfNAotCXBzcmFkCXhtbTAsREVTQ0FMRV9QMV80Ci0JcGFkZGQJeG1tMix4bW03Ci0JcGFkZGQJeG1tMyx4bW03Ci0JcHNyYWQJeG1tMixERVNDQUxFX1AxXzQKLQlwc3JhZAl4bW0zLERFU0NBTEVfUDFfNAorICAgICAgICBwYWRkZCAgIHhtbTQseG1tNworICAgICAgICBwYWRkZCAgIHhtbTAseG1tNworICAgICAgICBwc3JhZCAgIHhtbTQsREVTQ0FMRV9QMV80CisgICAgICAgIHBzcmFkICAgeG1tMCxERVNDQUxFX1AxXzQKKyAgICAgICAgcGFkZGQgICB4bW0yLHhtbTcKKyAgICAgICAgcGFkZGQgICB4bW0zLHhtbTcKKyAgICAgICAgcHNyYWQgICB4bW0yLERFU0NBTEVfUDFfNAorICAgICAgICBwc3JhZCAgIHhtbTMsREVTQ0FMRV9QMV80CiAKLQlwYWNrc3NkdyAgeG1tNCx4bW0wCQk7IHhtbTQ9ZGF0YTE9KDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3KQotCXBhY2tzc2R3ICB4bW0yLHhtbTMJCTsgeG1tMj1kYXRhMj0oMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcpCisgICAgICAgIHBhY2tzc2R3ICB4bW00LHhtbTAgICAgICAgICAgICAgOyB4bW00PWRhdGExPSgxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNykKKyAgICAgICAgcGFja3NzZHcgIHhtbTIseG1tMyAgICAgICAgICAgICA7IHhtbTI9ZGF0YTI9KDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3KQogCi0JbW92ZHFhICAgIHhtbTYseG1tMQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKLQlwdW5wY2tsd2QgeG1tMSx4bW00CTsgeG1tMT0oMDAgMTAgMDEgMTEgMDIgMTIgMDMgMTMpCi0JcHVucGNraHdkIHhtbTYseG1tNAk7IHhtbTY9KDA0IDE0IDA1IDE1IDA2IDE2IDA3IDE3KQotCW1vdmRxYSAgICB4bW03LHhtbTIJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCi0JcHVucGNrbHdkIHhtbTIseG1tNQk7IHhtbTI9KDIwIDMwIDIxIDMxIDIyIDMyIDIzIDMzKQotCXB1bnBja2h3ZCB4bW03LHhtbTUJOyB4bW03PSgyNCAzNCAyNSAzNSAyNiAzNiAyNyAzNykKKyAgICAgICAgbW92ZHFhICAgIHhtbTYseG1tMSAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgICAgIHB1bnBja2x3ZCB4bW0xLHhtbTQgICAgIDsgeG1tMT0oMDAgMTAgMDEgMTEgMDIgMTIgMDMgMTMpCisgICAgICAgIHB1bnBja2h3ZCB4bW02LHhtbTQgICAgIDsgeG1tNj0oMDQgMTQgMDUgMTUgMDYgMTYgMDcgMTcpCisgICAgICAgIG1vdmRxYSAgICB4bW03LHhtbTIgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgICAgICBwdW5wY2tsd2QgeG1tMix4bW01ICAgICA7IHhtbTI9KDIwIDMwIDIxIDMxIDIyIDMyIDIzIDMzKQorICAgICAgICBwdW5wY2tod2QgeG1tNyx4bW01ICAgICA7IHhtbTc9KDI0IDM0IDI1IDM1IDI2IDM2IDI3IDM3KQogCi0JbW92ZHFhICAgIHhtbTAseG1tMQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKLQlwdW5wY2tsZHEgeG1tMSx4bW0yCTsgeG1tMT1bY29sMCBjb2wxXT0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEpCi0JcHVucGNraGRxIHhtbTAseG1tMgk7IHhtbTA9W2NvbDIgY29sM109KDAyIDEyIDIyIDMyIDAzIDEzIDIzIDMzKQotCW1vdmRxYSAgICB4bW0zLHhtbTYJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCi0JcHVucGNrbGRxIHhtbTYseG1tNwk7IHhtbTY9W2NvbDQgY29sNV09KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1KQotCXB1bnBja2hkcSB4bW0zLHhtbTcJOyB4bW0zPVtjb2w2IGNvbDddPSgwNiAxNiAyNiAzNiAwNyAxNyAyNyAzNykKKyAgICAgICAgbW92ZHFhICAgIHhtbTAseG1tMSAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgICAgIHB1bnBja2xkcSB4bW0xLHhtbTIgICAgIDsgeG1tMT1bY29sMCBjb2wxXT0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEpCisgICAgICAgIHB1bnBja2hkcSB4bW0wLHhtbTIgICAgIDsgeG1tMD1bY29sMiBjb2wzXT0oMDIgMTIgMjIgMzIgMDMgMTMgMjMgMzMpCisgICAgICAgIG1vdmRxYSAgICB4bW0zLHhtbTYgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgICAgICBwdW5wY2tsZHEgeG1tNix4bW03ICAgICA7IHhtbTY9W2NvbDQgY29sNV09KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1KQorICAgICAgICBwdW5wY2toZHEgeG1tMyx4bW03ICAgICA7IHhtbTM9W2NvbDYgY29sN109KDA2IDE2IDI2IDM2IDA3IDE3IDI3IDM3KQogLmNvbHVtbl9lbmQ6CiAKLQk7IC0tIFByZWZldGNoIHRoZSBuZXh0IGNvZWZmaWNpZW50IGJsb2NrCisgICAgICAgIDsgLS0gUHJlZmV0Y2ggdGhlIG5leHQgY29lZmZpY2llbnQgYmxvY2sKIAotCXByZWZldGNobnRhIFtyc2kgKyBEQ1RTSVpFMipTSVpFT0ZfSkNPRUYgKyAwKjMyXQotCXByZWZldGNobnRhIFtyc2kgKyBEQ1RTSVpFMipTSVpFT0ZfSkNPRUYgKyAxKjMyXQotCXByZWZldGNobnRhIFtyc2kgKyBEQ1RTSVpFMipTSVpFT0ZfSkNPRUYgKyAyKjMyXQotCXByZWZldGNobnRhIFtyc2kgKyBEQ1RTSVpFMipTSVpFT0ZfSkNPRUYgKyAzKjMyXQorICAgICAgICBwcmVmZXRjaG50YSBbcnNpICsgRENUU0laRTIqU0laRU9GX0pDT0VGICsgMCozMl0KKyAgICAgICAgcHJlZmV0Y2hudGEgW3JzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDEqMzJdCisgICAgICAgIHByZWZldGNobnRhIFtyc2kgKyBEQ1RTSVpFMipTSVpFT0ZfSkNPRUYgKyAyKjMyXQorICAgICAgICBwcmVmZXRjaG50YSBbcnNpICsgRENUU0laRTIqU0laRU9GX0pDT0VGICsgMyozMl0KIAotCTsgLS0tLSBQYXNzIDI6IHByb2Nlc3Mgcm93cywgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuCisgICAgICAgIDsgLS0tLSBQYXNzIDI6IHByb2Nlc3Mgcm93cywgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuCiAKLQltb3YJcmF4LCBbb3JpZ2luYWxfcmJwXQotCW1vdglyZGksIHIxMgk7IChKU0FNUFJPVyAqKQotCW1vdglyYXgsIHIxMworICAgICAgICBtb3YgICAgIHJheCwgW29yaWdpbmFsX3JicF0KKyAgICAgICAgbW92ICAgICByZGksIHIxMiAgICAgICAgOyAoSlNBTVBST1cgKikKKyAgICAgICAgbW92ICAgICByYXgsIHIxMwogCi0JOyAtLSBFdmVuIHBhcnQKKyAgICAgICAgOyAtLSBFdmVuIHBhcnQKIAotCXB4b3IgICAgICB4bW00LHhtbTQKLQlwdW5wY2tsd2QgeG1tNCx4bW0xCQk7IHhtbTQ9dG1wMAotCXBzcmFkICAgICB4bW00LCgxNi1DT05TVF9CSVRTLTEpIDsgcHNyYWQgeG1tNCwxNiAmIHBzbGxkIHhtbTQsQ09OU1RfQklUUysxCisgICAgICAgIHB4b3IgICAgICB4bW00LHhtbTQKKyAgICAgICAgcHVucGNrbHdkIHhtbTQseG1tMSAgICAgICAgICAgICA7IHhtbTQ9dG1wMAorICAgICAgICBwc3JhZCAgICAgeG1tNCwoMTYtQ09OU1RfQklUUy0xKSA7IHBzcmFkIHhtbTQsMTYgJiBwc2xsZCB4bW00LENPTlNUX0JJVFMrMQogCi0JOyAtLSBPZGQgcGFydAorICAgICAgICA7IC0tIE9kZCBwYXJ0CiAKLQlwdW5wY2tod2QgeG1tMSx4bW0wCi0JcHVucGNraHdkIHhtbTYseG1tMwotCW1vdmRxYSAgICB4bW01LHhtbTEKLQltb3ZkcWEgICAgeG1tMix4bW02Ci0JcG1hZGR3ZCAgIHhtbTEsW3JlbCBQV19GMjU2X0YwODldCTsgeG1tMT0odG1wMikKLQlwbWFkZHdkICAgeG1tNixbcmVsIFBXX01GMDYwX01GMDUwXQk7IHhtbTY9KHRtcDIpCi0JcG1hZGR3ZCAgIHhtbTUsW3JlbCBQV19GMTA2X01GMjE3XQk7IHhtbTU9KHRtcDApCi0JcG1hZGR3ZCAgIHhtbTIsW3JlbCBQV19GMTQ1X01GMDIxXQk7IHhtbTI9KHRtcDApCisgICAgICAgIHB1bnBja2h3ZCB4bW0xLHhtbTAKKyAgICAgICAgcHVucGNraHdkIHhtbTYseG1tMworICAgICAgICBtb3ZkcWEgICAgeG1tNSx4bW0xCisgICAgICAgIG1vdmRxYSAgICB4bW0yLHhtbTYKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTEsW3JlbCBQV19GMjU2X0YwODldICAgICAgIDsgeG1tMT0odG1wMikKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTYsW3JlbCBQV19NRjA2MF9NRjA1MF0gICAgIDsgeG1tNj0odG1wMikKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTUsW3JlbCBQV19GMTA2X01GMjE3XSAgICAgIDsgeG1tNT0odG1wMCkKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTIsW3JlbCBQV19GMTQ1X01GMDIxXSAgICAgIDsgeG1tMj0odG1wMCkKIAotCXBhZGRkICAgICB4bW02LHhtbTEJCTsgeG1tNj10bXAyCi0JcGFkZGQgICAgIHhtbTIseG1tNQkJOyB4bW0yPXRtcDAKKyAgICAgICAgcGFkZGQgICAgIHhtbTYseG1tMSAgICAgICAgICAgICA7IHhtbTY9dG1wMgorICAgICAgICBwYWRkZCAgICAgeG1tMix4bW01ICAgICAgICAgICAgIDsgeG1tMj10bXAwCiAKLQk7IC0tIEV2ZW4gcGFydAorICAgICAgICA7IC0tIEV2ZW4gcGFydAogCi0JcHVucGNrbHdkIHhtbTAseG1tMwotCXBtYWRkd2QgICB4bW0wLFtyZWwgUFdfRjE4NF9NRjA3Nl0JOyB4bW0wPXRtcDIKKyAgICAgICAgcHVucGNrbHdkIHhtbTAseG1tMworICAgICAgICBwbWFkZHdkICAgeG1tMCxbcmVsIFBXX0YxODRfTUYwNzZdICAgICAgOyB4bW0wPXRtcDIKIAotCW1vdmRxYSAgICB4bW03LHhtbTQKLQlwYWRkZCAgICAgeG1tNCx4bW0wCQk7IHhtbTQ9dG1wMTAKLQlwc3ViZCAgICAgeG1tNyx4bW0wCQk7IHhtbTc9dG1wMTIKKyAgICAgICAgbW92ZHFhICAgIHhtbTcseG1tNAorICAgICAgICBwYWRkZCAgICAgeG1tNCx4bW0wICAgICAgICAgICAgIDsgeG1tND10bXAxMAorICAgICAgICBwc3ViZCAgICAgeG1tNyx4bW0wICAgICAgICAgICAgIDsgeG1tNz10bXAxMgogCi0JOyAtLSBGaW5hbCBvdXRwdXQgc3RhZ2UKKyAgICAgICAgOyAtLSBGaW5hbCBvdXRwdXQgc3RhZ2UKIAotCW1vdmRxYQl4bW0xLFtyZWwgUERfREVTQ0FMRV9QMl80XQk7IHhtbTE9W3JlbCBQRF9ERVNDQUxFX1AyXzRdCisgICAgICAgIG1vdmRxYSAgeG1tMSxbcmVsIFBEX0RFU0NBTEVfUDJfNF0gICAgICA7IHhtbTE9W3JlbCBQRF9ERVNDQUxFX1AyXzRdCiAKLQltb3ZkcWEJeG1tNSx4bW00Ci0JbW92ZHFhCXhtbTMseG1tNwotCXBhZGRkCXhtbTQseG1tNgkJOyB4bW00PWRhdGEwPSgwMCAxMCAyMCAzMCkKLQlwYWRkZAl4bW03LHhtbTIJCTsgeG1tNz1kYXRhMT0oMDEgMTEgMjEgMzEpCi0JcHN1YmQJeG1tNSx4bW02CQk7IHhtbTU9ZGF0YTM9KDAzIDEzIDIzIDMzKQotCXBzdWJkCXhtbTMseG1tMgkJOyB4bW0zPWRhdGEyPSgwMiAxMiAyMiAzMikKKyAgICAgICAgbW92ZHFhICB4bW01LHhtbTQKKyAgICAgICAgbW92ZHFhICB4bW0zLHhtbTcKKyAgICAgICAgcGFkZGQgICB4bW00LHhtbTYgICAgICAgICAgICAgICA7IHhtbTQ9ZGF0YTA9KDAwIDEwIDIwIDMwKQorICAgICAgICBwYWRkZCAgIHhtbTcseG1tMiAgICAgICAgICAgICAgIDsgeG1tNz1kYXRhMT0oMDEgMTEgMjEgMzEpCisgICAgICAgIHBzdWJkICAgeG1tNSx4bW02ICAgICAgICAgICAgICAgOyB4bW01PWRhdGEzPSgwMyAxMyAyMyAzMykKKyAgICAgICAgcHN1YmQgICB4bW0zLHhtbTIgICAgICAgICAgICAgICA7IHhtbTM9ZGF0YTI9KDAyIDEyIDIyIDMyKQogCi0JcGFkZGQJeG1tNCx4bW0xCi0JcGFkZGQJeG1tNyx4bW0xCi0JcHNyYWQJeG1tNCxERVNDQUxFX1AyXzQKLQlwc3JhZAl4bW03LERFU0NBTEVfUDJfNAotCXBhZGRkCXhtbTUseG1tMQotCXBhZGRkCXhtbTMseG1tMQotCXBzcmFkCXhtbTUsREVTQ0FMRV9QMl80Ci0JcHNyYWQJeG1tMyxERVNDQUxFX1AyXzQKKyAgICAgICAgcGFkZGQgICB4bW00LHhtbTEKKyAgICAgICAgcGFkZGQgICB4bW03LHhtbTEKKyAgICAgICAgcHNyYWQgICB4bW00LERFU0NBTEVfUDJfNAorICAgICAgICBwc3JhZCAgIHhtbTcsREVTQ0FMRV9QMl80CisgICAgICAgIHBhZGRkICAgeG1tNSx4bW0xCisgICAgICAgIHBhZGRkICAgeG1tMyx4bW0xCisgICAgICAgIHBzcmFkICAgeG1tNSxERVNDQUxFX1AyXzQKKyAgICAgICAgcHNyYWQgICB4bW0zLERFU0NBTEVfUDJfNAogCi0JcGFja3NzZHcgIHhtbTQseG1tMwkJOyB4bW00PSgwMCAxMCAyMCAzMCAwMiAxMiAyMiAzMikKLQlwYWNrc3NkdyAgeG1tNyx4bW01CQk7IHhtbTc9KDAxIDExIDIxIDMxIDAzIDEzIDIzIDMzKQorICAgICAgICBwYWNrc3NkdyAgeG1tNCx4bW0zICAgICAgICAgICAgIDsgeG1tND0oMDAgMTAgMjAgMzAgMDIgMTIgMjIgMzIpCisgICAgICAgIHBhY2tzc2R3ICB4bW03LHhtbTUgICAgICAgICAgICAgOyB4bW03PSgwMSAxMSAyMSAzMSAwMyAxMyAyMyAzMykKIAotCW1vdmRxYSAgICB4bW0wLHhtbTQJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQotCXB1bnBja2x3ZCB4bW00LHhtbTcJCTsgeG1tND0oMDAgMDEgMTAgMTEgMjAgMjEgMzAgMzEpCi0JcHVucGNraHdkIHhtbTAseG1tNwkJOyB4bW0wPSgwMiAwMyAxMiAxMyAyMiAyMyAzMiAzMykKKyAgICAgICAgbW92ZHFhICAgIHhtbTAseG1tNCAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKyAgICAgICAgcHVucGNrbHdkIHhtbTQseG1tNyAgICAgICAgICAgICA7IHhtbTQ9KDAwIDAxIDEwIDExIDIwIDIxIDMwIDMxKQorICAgICAgICBwdW5wY2tod2QgeG1tMCx4bW03ICAgICAgICAgICAgIDsgeG1tMD0oMDIgMDMgMTIgMTMgMjIgMjMgMzIgMzMpCiAKLQltb3ZkcWEgICAgeG1tNix4bW00CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKLQlwdW5wY2tsZHEgeG1tNCx4bW0wCQk7IHhtbTQ9KDAwIDAxIDAyIDAzIDEwIDExIDEyIDEzKQotCXB1bnBja2hkcSB4bW02LHhtbTAJCTsgeG1tNj0oMjAgMjEgMjIgMjMgMzAgMzEgMzIgMzMpCisgICAgICAgIG1vdmRxYSAgICB4bW02LHhtbTQgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgICAgIHB1bnBja2xkcSB4bW00LHhtbTAgICAgICAgICAgICAgOyB4bW00PSgwMCAwMSAwMiAwMyAxMCAxMSAxMiAxMykKKyAgICAgICAgcHVucGNraGRxIHhtbTYseG1tMCAgICAgICAgICAgICA7IHhtbTY9KDIwIDIxIDIyIDIzIDMwIDMxIDMyIDMzKQogCi0JcGFja3Nzd2IgIHhtbTQseG1tNgkJOyB4bW00PSgwMCAwMSAwMiAwMyAxMCAxMSAxMiAxMyAyMCAuLikKLQlwYWRkYiAgICAgeG1tNCxbcmVsIFBCX0NFTlRFUkpTQU1QXQorICAgICAgICBwYWNrc3N3YiAgeG1tNCx4bW02ICAgICAgICAgICAgIDsgeG1tND0oMDAgMDEgMDIgMDMgMTAgMTEgMTIgMTMgMjAgLi4pCisgICAgICAgIHBhZGRiICAgICB4bW00LFtyZWwgUEJfQ0VOVEVSSlNBTVBdCiAKLQlwc2h1ZmQgICAgeG1tMix4bW00LDB4MzkJOyB4bW0yPSgxMCAxMSAxMiAxMyAyMCAyMSAyMiAyMyAzMCAuLikKLQlwc2h1ZmQgICAgeG1tMSx4bW00LDB4NEUJOyB4bW0xPSgyMCAyMSAyMiAyMyAzMCAzMSAzMiAzMyAwMCAuLikKLQlwc2h1ZmQgICAgeG1tMyx4bW00LDB4OTMJOyB4bW0zPSgzMCAzMSAzMiAzMyAwMCAwMSAwMiAwMyAxMCAuLikKKyAgICAgICAgcHNodWZkICAgIHhtbTIseG1tNCwweDM5ICAgICAgICA7IHhtbTI9KDEwIDExIDEyIDEzIDIwIDIxIDIyIDIzIDMwIC4uKQorICAgICAgICBwc2h1ZmQgICAgeG1tMSx4bW00LDB4NEUgICAgICAgIDsgeG1tMT0oMjAgMjEgMjIgMjMgMzAgMzEgMzIgMzMgMDAgLi4pCisgICAgICAgIHBzaHVmZCAgICB4bW0zLHhtbTQsMHg5MyAgICAgICAgOyB4bW0zPSgzMCAzMSAzMiAzMyAwMCAwMSAwMiAwMyAxMCAuLikKIAotCW1vdglyZHgsIEpTQU1QUk9XIFtyZGkrMCpTSVpFT0ZfSlNBTVBST1ddCi0JbW92CXJzaSwgSlNBTVBST1cgW3JkaSsxKlNJWkVPRl9KU0FNUFJPV10KLQltb3ZkCVhNTV9EV09SRCBbcmR4K3JheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTQKLQltb3ZkCVhNTV9EV09SRCBbcnNpK3JheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTIKLQltb3YJcmR4LCBKU0FNUFJPVyBbcmRpKzIqU0laRU9GX0pTQU1QUk9XXQotCW1vdglyc2ksIEpTQU1QUk9XIFtyZGkrMypTSVpFT0ZfSlNBTVBST1ddCi0JbW92ZAlYTU1fRFdPUkQgW3JkeCtyYXgqU0laRU9GX0pTQU1QTEVdLCB4bW0xCi0JbW92ZAlYTU1fRFdPUkQgW3JzaStyYXgqU0laRU9GX0pTQU1QTEVdLCB4bW0zCisgICAgICAgIG1vdiAgICAgcmR4LCBKU0FNUFJPVyBbcmRpKzAqU0laRU9GX0pTQU1QUk9XXQorICAgICAgICBtb3YgICAgIHJzaSwgSlNBTVBST1cgW3JkaSsxKlNJWkVPRl9KU0FNUFJPV10KKyAgICAgICAgbW92ZCAgICBYTU1fRFdPUkQgW3JkeCtyYXgqU0laRU9GX0pTQU1QTEVdLCB4bW00CisgICAgICAgIG1vdmQgICAgWE1NX0RXT1JEIFtyc2krcmF4KlNJWkVPRl9KU0FNUExFXSwgeG1tMgorICAgICAgICBtb3YgICAgIHJkeCwgSlNBTVBST1cgW3JkaSsyKlNJWkVPRl9KU0FNUFJPV10KKyAgICAgICAgbW92ICAgICByc2ksIEpTQU1QUk9XIFtyZGkrMypTSVpFT0ZfSlNBTVBST1ddCisgICAgICAgIG1vdmQgICAgWE1NX0RXT1JEIFtyZHgrcmF4KlNJWkVPRl9KU0FNUExFXSwgeG1tMQorICAgICAgICBtb3ZkICAgIFhNTV9EV09SRCBbcnNpK3JheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTMKIAotCXVuY29sbGVjdF9hcmdzCi0JbW92CXJzcCxyYnAJCTsgcnNwIDwtIGFsaWduZWQgcmJwCi0JcG9wCXJzcAkJOyByc3AgPC0gb3JpZ2luYWwgcmJwCi0JcG9wCXJicAotCXJldAorICAgICAgICB1bmNvbGxlY3RfYXJncworICAgICAgICBtb3YgICAgIHJzcCxyYnAgICAgICAgICA7IHJzcCA8LSBhbGlnbmVkIHJicAorICAgICAgICBwb3AgICAgIHJzcCAgICAgICAgICAgICA7IHJzcCA8LSBvcmlnaW5hbCByYnAKKyAgICAgICAgcG9wICAgICByYnAKKyAgICAgICAgcmV0CiAKIAogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDEyLDE2NSArNDEyLDE2NSBAQAogOyByMTIgPSBKU0FNUEFSUkFZIG91dHB1dF9idWYKIDsgcjEzID0gSkRJTUVOU0lPTiBvdXRwdXRfY29sCiAKLQlhbGlnbgkxNgotCWdsb2JhbAlFWFROKGpzaW1kX2lkY3RfMngyX3NzZTIpCisgICAgICAgIGFsaWduICAgMTYKKyAgICAgICAgZ2xvYmFsICBFWFROKGpzaW1kX2lkY3RfMngyX3NzZTIpCiAKIEVYVE4oanNpbWRfaWRjdF8yeDJfc3NlMik6Ci0JcHVzaAlyYnAKLQltb3YJcmF4LHJzcAotCW1vdglyYnAscnNwCi0JY29sbGVjdF9hcmdzCi0JcHVzaAlyYngKKyAgICAgICAgcHVzaCAgICByYnAKKyAgICAgICAgbW92ICAgICByYXgscnNwCisgICAgICAgIG1vdiAgICAgcmJwLHJzcAorICAgICAgICBjb2xsZWN0X2FyZ3MKKyAgICAgICAgcHVzaCAgICByYngKIAotCTsgLS0tLSBQYXNzIDE6IHByb2Nlc3MgY29sdW1ucyBmcm9tIGlucHV0LgorICAgICAgICA7IC0tLS0gUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMgZnJvbSBpbnB1dC4KIAotCW1vdglyZHgsIHIxMAk7IHF1YW50cHRyCi0JbW92CXJzaSwgcjExCQk7IGlucHRyCisgICAgICAgIG1vdiAgICAgcmR4LCByMTAgICAgICAgICAgICAgICAgOyBxdWFudHB0cgorICAgICAgICBtb3YgICAgIHJzaSwgcjExICAgICAgICAgICAgICAgIDsgaW5wdHIKIAotCTsgfCBpbnB1dDogICAgICAgICAgICAgICAgICB8IHJlc3VsdDogICAgICAgIHwKLQk7IHwgMDAgMDEgKiogMDMgKiogMDUgKiogMDcgfCAgICAgICAgICAgICAgICB8Ci0JOyB8IDEwIDExICoqIDEzICoqIDE1ICoqIDE3IHwgICAgICAgICAgICAgICAgfAotCTsgfCAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiB8ICAgICAgICAgICAgICAgIHwKLQk7IHwgMzAgMzEgKiogMzMgKiogMzUgKiogMzcgfCBBMCBBMSBBMyBBNSBBNyB8Ci0JOyB8ICoqICoqICoqICoqICoqICoqICoqICoqIHwgQjAgQjEgQjMgQjUgQjcgfAotCTsgfCA1MCA1MSAqKiA1MyAqKiA1NSAqKiA1NyB8ICAgICAgICAgICAgICAgIHwKLQk7IHwgKiogKiogKiogKiogKiogKiogKiogKiogfCAgICAgICAgICAgICAgICB8Ci0JOyB8IDcwIDcxICoqIDczICoqIDc1ICoqIDc3IHwgICAgICAgICAgICAgICAgfAorICAgICAgICA7IHwgaW5wdXQ6ICAgICAgICAgICAgICAgICAgfCByZXN1bHQ6ICAgICAgICB8CisgICAgICAgIDsgfCAwMCAwMSAqKiAwMyAqKiAwNSAqKiAwNyB8ICAgICAgICAgICAgICAgIHwKKyAgICAgICAgOyB8IDEwIDExICoqIDEzICoqIDE1ICoqIDE3IHwgICAgICAgICAgICAgICAgfAorICAgICAgICA7IHwgKiogKiogKiogKiogKiogKiogKiogKiogfCAgICAgICAgICAgICAgICB8CisgICAgICAgIDsgfCAzMCAzMSAqKiAzMyAqKiAzNSAqKiAzNyB8IEEwIEExIEEzIEE1IEE3IHwKKyAgICAgICAgOyB8ICoqICoqICoqICoqICoqICoqICoqICoqIHwgQjAgQjEgQjMgQjUgQjcgfAorICAgICAgICA7IHwgNTAgNTEgKiogNTMgKiogNTUgKiogNTcgfCAgICAgICAgICAgICAgICB8CisgICAgICAgIDsgfCAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiB8ICAgICAgICAgICAgICAgIHwKKyAgICAgICAgOyB8IDcwIDcxICoqIDczICoqIDc1ICoqIDc3IHwgICAgICAgICAgICAgICAgfAogCi0JOyAtLSBPZGQgcGFydAorICAgICAgICA7IC0tIE9kZCBwYXJ0CiAKLQltb3ZkcWEJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLHJzaSxTSVpFT0ZfSkNPRUYpXQotCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAscnNpLFNJWkVPRl9KQ09FRildCi0JcG11bGx3CXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxyZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCi0JcG11bGx3CXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxyZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCi0JbW92ZHFhCXhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxyc2ksU0laRU9GX0pDT0VGKV0KLQltb3ZkcWEJeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNywwLHJzaSxTSVpFT0ZfSkNPRUYpXQotCXBtdWxsdwl4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSyg1LDAscmR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQotCXBtdWxsdwl4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg3LDAscmR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorICAgICAgICBtb3ZkcWEgIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxyc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgbW92ZHFhICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIHBtdWxsdyAgeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLHJkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKyAgICAgICAgcG11bGx3ICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAscmR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorICAgICAgICBtb3ZkcWEgIHhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxyc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgbW92ZHFhICB4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg3LDAscnNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIHBtdWxsdyAgeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soNSwwLHJkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKyAgICAgICAgcG11bGx3ICB4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg3LDAscmR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQogCi0JOyB4bW0wPSgxMCAxMSAqKiAxMyAqKiAxNSAqKiAxNyksIHhtbTE9KDMwIDMxICoqIDMzICoqIDM1ICoqIDM3KQotCTsgeG1tMj0oNTAgNTEgKiogNTMgKiogNTUgKiogNTcpLCB4bW0zPSg3MCA3MSAqKiA3MyAqKiA3NSAqKiA3NykKKyAgICAgICAgOyB4bW0wPSgxMCAxMSAqKiAxMyAqKiAxNSAqKiAxNyksIHhtbTE9KDMwIDMxICoqIDMzICoqIDM1ICoqIDM3KQorICAgICAgICA7IHhtbTI9KDUwIDUxICoqIDUzICoqIDU1ICoqIDU3KSwgeG1tMz0oNzAgNzEgKiogNzMgKiogNzUgKiogNzcpCiAKLQlwY21wZXFkICAgeG1tNyx4bW03Ci0JcHNsbGQgICAgIHhtbTcsV09SRF9CSVQJCTsgeG1tNz17MHgwMDAwIDB4RkZGRiAweDAwMDAgMHhGRkZGIC4ufQorICAgICAgICBwY21wZXFkICAgeG1tNyx4bW03CisgICAgICAgIHBzbGxkICAgICB4bW03LFdPUkRfQklUICAgICAgICAgOyB4bW03PXsweDAwMDAgMHhGRkZGIDB4MDAwMCAweEZGRkYgLi59CiAKLQltb3ZkcWEgICAgeG1tNCx4bW0wCQk7IHhtbTQ9KDEwIDExICoqIDEzICoqIDE1ICoqIDE3KQotCW1vdmRxYSAgICB4bW01LHhtbTIJCTsgeG1tNT0oNTAgNTEgKiogNTMgKiogNTUgKiogNTcpCi0JcHVucGNrbHdkIHhtbTQseG1tMQkJOyB4bW00PSgxMCAzMCAxMSAzMSAqKiAqKiAxMyAzMykKLQlwdW5wY2tsd2QgeG1tNSx4bW0zCQk7IHhtbTU9KDUwIDcwIDUxIDcxICoqICoqIDUzIDczKQotCXBtYWRkd2QgICB4bW00LFtyZWwgUFdfRjM2Ml9NRjEyN10KLQlwbWFkZHdkICAgeG1tNSxbcmVsIFBXX0YwODVfTUYwNzJdCisgICAgICAgIG1vdmRxYSAgICB4bW00LHhtbTAgICAgICAgICAgICAgOyB4bW00PSgxMCAxMSAqKiAxMyAqKiAxNSAqKiAxNykKKyAgICAgICAgbW92ZHFhICAgIHhtbTUseG1tMiAgICAgICAgICAgICA7IHhtbTU9KDUwIDUxICoqIDUzICoqIDU1ICoqIDU3KQorICAgICAgICBwdW5wY2tsd2QgeG1tNCx4bW0xICAgICAgICAgICAgIDsgeG1tND0oMTAgMzAgMTEgMzEgKiogKiogMTMgMzMpCisgICAgICAgIHB1bnBja2x3ZCB4bW01LHhtbTMgICAgICAgICAgICAgOyB4bW01PSg1MCA3MCA1MSA3MSAqKiAqKiA1MyA3MykKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTQsW3JlbCBQV19GMzYyX01GMTI3XQorICAgICAgICBwbWFkZHdkICAgeG1tNSxbcmVsIFBXX0YwODVfTUYwNzJdCiAKLQlwc3JsZAl4bW0wLFdPUkRfQklUCQk7IHhtbTA9KDExIC0tIDEzIC0tIDE1IC0tIDE3IC0tKQotCXBhbmQJeG1tMSx4bW03CQk7IHhtbTE9KC0tIDMxIC0tIDMzIC0tIDM1IC0tIDM3KQotCXBzcmxkCXhtbTIsV09SRF9CSVQJCTsgeG1tMj0oNTEgLS0gNTMgLS0gNTUgLS0gNTcgLS0pCi0JcGFuZAl4bW0zLHhtbTcJCTsgeG1tMz0oLS0gNzEgLS0gNzMgLS0gNzUgLS0gNzcpCi0JcG9yCXhtbTAseG1tMQkJOyB4bW0wPSgxMSAzMSAxMyAzMyAxNSAzNSAxNyAzNykKLQlwb3IJeG1tMix4bW0zCQk7IHhtbTI9KDUxIDcxIDUzIDczIDU1IDc1IDU3IDc3KQotCXBtYWRkd2QJeG1tMCxbcmVsIFBXX0YzNjJfTUYxMjddCi0JcG1hZGR3ZAl4bW0yLFtyZWwgUFdfRjA4NV9NRjA3Ml0KKyAgICAgICAgcHNybGQgICB4bW0wLFdPUkRfQklUICAgICAgICAgICA7IHhtbTA9KDExIC0tIDEzIC0tIDE1IC0tIDE3IC0tKQorICAgICAgICBwYW5kICAgIHhtbTEseG1tNyAgICAgICAgICAgICAgIDsgeG1tMT0oLS0gMzEgLS0gMzMgLS0gMzUgLS0gMzcpCisgICAgICAgIHBzcmxkICAgeG1tMixXT1JEX0JJVCAgICAgICAgICAgOyB4bW0yPSg1MSAtLSA1MyAtLSA1NSAtLSA1NyAtLSkKKyAgICAgICAgcGFuZCAgICB4bW0zLHhtbTcgICAgICAgICAgICAgICA7IHhtbTM9KC0tIDcxIC0tIDczIC0tIDc1IC0tIDc3KQorICAgICAgICBwb3IgICAgIHhtbTAseG1tMSAgICAgICAgICAgICAgIDsgeG1tMD0oMTEgMzEgMTMgMzMgMTUgMzUgMTcgMzcpCisgICAgICAgIHBvciAgICAgeG1tMix4bW0zICAgICAgICAgICAgICAgOyB4bW0yPSg1MSA3MSA1MyA3MyA1NSA3NSA1NyA3NykKKyAgICAgICAgcG1hZGR3ZCB4bW0wLFtyZWwgUFdfRjM2Ml9NRjEyN10KKyAgICAgICAgcG1hZGR3ZCB4bW0yLFtyZWwgUFdfRjA4NV9NRjA3Ml0KIAotCXBhZGRkCXhtbTQseG1tNQkJOyB4bW00PXRtcDBbY29sMCBjb2wxICoqKiogY29sM10KLQlwYWRkZAl4bW0wLHhtbTIJCTsgeG1tMD10bXAwW2NvbDEgY29sMyBjb2w1IGNvbDddCisgICAgICAgIHBhZGRkICAgeG1tNCx4bW01ICAgICAgICAgICAgICAgOyB4bW00PXRtcDBbY29sMCBjb2wxICoqKiogY29sM10KKyAgICAgICAgcGFkZGQgICB4bW0wLHhtbTIgICAgICAgICAgICAgICA7IHhtbTA9dG1wMFtjb2wxIGNvbDMgY29sNSBjb2w3XQogCi0JOyAtLSBFdmVuIHBhcnQKKyAgICAgICAgOyAtLSBFdmVuIHBhcnQKIAotCW1vdmRxYQl4bW02LCBYTU1XT1JEIFtYTU1CTE9DSygwLDAscnNpLFNJWkVPRl9KQ09FRildCi0JcG11bGx3CXhtbTYsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxyZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisgICAgICAgIG1vdmRxYSAgeG1tNiwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBwbXVsbHcgIHhtbTYsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxyZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCiAKLQk7IHhtbTY9KDAwIDAxICoqIDAzICoqIDA1ICoqIDA3KQorICAgICAgICA7IHhtbTY9KDAwIDAxICoqIDAzICoqIDA1ICoqIDA3KQogCi0JbW92ZHFhCXhtbTEseG1tNgkJOyB4bW0xPSgwMCAwMSAqKiAwMyAqKiAwNSAqKiAwNykKLQlwc2xsZAl4bW02LFdPUkRfQklUCQk7IHhtbTY9KC0tIDAwIC0tICoqIC0tICoqIC0tICoqKQotCXBhbmQJeG1tMSx4bW03CQk7IHhtbTE9KC0tIDAxIC0tIDAzIC0tIDA1IC0tIDA3KQotCXBzcmFkCXhtbTYsKFdPUkRfQklULUNPTlNUX0JJVFMtMikgOyB4bW02PXRtcDEwW2NvbDAgKioqKiAqKioqICoqKipdCi0JcHNyYWQJeG1tMSwoV09SRF9CSVQtQ09OU1RfQklUUy0yKSA7IHhtbTE9dG1wMTBbY29sMSBjb2wzIGNvbDUgY29sN10KKyAgICAgICAgbW92ZHFhICB4bW0xLHhtbTYgICAgICAgICAgICAgICA7IHhtbTE9KDAwIDAxICoqIDAzICoqIDA1ICoqIDA3KQorICAgICAgICBwc2xsZCAgIHhtbTYsV09SRF9CSVQgICAgICAgICAgIDsgeG1tNj0oLS0gMDAgLS0gKiogLS0gKiogLS0gKiopCisgICAgICAgIHBhbmQgICAgeG1tMSx4bW03ICAgICAgICAgICAgICAgOyB4bW0xPSgtLSAwMSAtLSAwMyAtLSAwNSAtLSAwNykKKyAgICAgICAgcHNyYWQgICB4bW02LChXT1JEX0JJVC1DT05TVF9CSVRTLTIpIDsgeG1tNj10bXAxMFtjb2wwICoqKiogKioqKiAqKioqXQorICAgICAgICBwc3JhZCAgIHhtbTEsKFdPUkRfQklULUNPTlNUX0JJVFMtMikgOyB4bW0xPXRtcDEwW2NvbDEgY29sMyBjb2w1IGNvbDddCiAKLQk7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQorICAgICAgICA7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQogCi0JbW92ZHFhCXhtbTMseG1tNgotCW1vdmRxYQl4bW01LHhtbTEKLQlwYWRkZAl4bW02LHhtbTQJOyB4bW02PWRhdGEwW2NvbDAgKioqKiAqKioqICoqKipdPShBMCAqKiAqKiAqKikKLQlwYWRkZAl4bW0xLHhtbTAJOyB4bW0xPWRhdGEwW2NvbDEgY29sMyBjb2w1IGNvbDddPShBMSBBMyBBNSBBNykKLQlwc3ViZAl4bW0zLHhtbTQJOyB4bW0zPWRhdGExW2NvbDAgKioqKiAqKioqICoqKipdPShCMCAqKiAqKiAqKikKLQlwc3ViZAl4bW01LHhtbTAJOyB4bW01PWRhdGExW2NvbDEgY29sMyBjb2w1IGNvbDddPShCMSBCMyBCNSBCNykKKyAgICAgICAgbW92ZHFhICB4bW0zLHhtbTYKKyAgICAgICAgbW92ZHFhICB4bW01LHhtbTEKKyAgICAgICAgcGFkZGQgICB4bW02LHhtbTQgICAgICAgOyB4bW02PWRhdGEwW2NvbDAgKioqKiAqKioqICoqKipdPShBMCAqKiAqKiAqKikKKyAgICAgICAgcGFkZGQgICB4bW0xLHhtbTAgICAgICAgOyB4bW0xPWRhdGEwW2NvbDEgY29sMyBjb2w1IGNvbDddPShBMSBBMyBBNSBBNykKKyAgICAgICAgcHN1YmQgICB4bW0zLHhtbTQgICAgICAgOyB4bW0zPWRhdGExW2NvbDAgKioqKiAqKioqICoqKipdPShCMCAqKiAqKiAqKikKKyAgICAgICAgcHN1YmQgICB4bW01LHhtbTAgICAgICAgOyB4bW01PWRhdGExW2NvbDEgY29sMyBjb2w1IGNvbDddPShCMSBCMyBCNSBCNykKIAotCW1vdmRxYQl4bW0yLFtyZWwgUERfREVTQ0FMRV9QMV8yXQk7IHhtbTI9W3JlbCBQRF9ERVNDQUxFX1AxXzJdCisgICAgICAgIG1vdmRxYSAgeG1tMixbcmVsIFBEX0RFU0NBTEVfUDFfMl0gICAgICA7IHhtbTI9W3JlbCBQRF9ERVNDQUxFX1AxXzJdCiAKLQlwdW5wY2tsZHEgIHhtbTYseG1tMwkJOyB4bW02PShBMCBCMCAqKiAqKikKKyAgICAgICAgcHVucGNrbGRxICB4bW02LHhtbTMgICAgICAgICAgICA7IHhtbTY9KEEwIEIwICoqICoqKQogCi0JbW92ZHFhICAgICB4bW03LHhtbTEKLQlwdW5wY2tscWRxIHhtbTEseG1tNQkJOyB4bW0xPShBMSBBMyBCMSBCMykKLQlwdW5wY2tocWRxIHhtbTcseG1tNQkJOyB4bW03PShBNSBBNyBCNSBCNykKKyAgICAgICAgbW92ZHFhICAgICB4bW03LHhtbTEKKyAgICAgICAgcHVucGNrbHFkcSB4bW0xLHhtbTUgICAgICAgICAgICA7IHhtbTE9KEExIEEzIEIxIEIzKQorICAgICAgICBwdW5wY2tocWRxIHhtbTcseG1tNSAgICAgICAgICAgIDsgeG1tNz0oQTUgQTcgQjUgQjcpCiAKLQlwYWRkZAl4bW02LHhtbTIKLQlwc3JhZAl4bW02LERFU0NBTEVfUDFfMgorICAgICAgICBwYWRkZCAgIHhtbTYseG1tMgorICAgICAgICBwc3JhZCAgIHhtbTYsREVTQ0FMRV9QMV8yCiAKLQlwYWRkZAl4bW0xLHhtbTIKLQlwYWRkZAl4bW03LHhtbTIKLQlwc3JhZAl4bW0xLERFU0NBTEVfUDFfMgotCXBzcmFkCXhtbTcsREVTQ0FMRV9QMV8yCisgICAgICAgIHBhZGRkICAgeG1tMSx4bW0yCisgICAgICAgIHBhZGRkICAgeG1tNyx4bW0yCisgICAgICAgIHBzcmFkICAgeG1tMSxERVNDQUxFX1AxXzIKKyAgICAgICAgcHNyYWQgICB4bW03LERFU0NBTEVfUDFfMgogCi0JOyAtLSBQcmVmZXRjaCB0aGUgbmV4dCBjb2VmZmljaWVudCBibG9jaworICAgICAgICA7IC0tIFByZWZldGNoIHRoZSBuZXh0IGNvZWZmaWNpZW50IGJsb2NrCiAKLQlwcmVmZXRjaG50YSBbcnNpICsgRENUU0laRTIqU0laRU9GX0pDT0VGICsgMCozMl0KLQlwcmVmZXRjaG50YSBbcnNpICsgRENUU0laRTIqU0laRU9GX0pDT0VGICsgMSozMl0KLQlwcmVmZXRjaG50YSBbcnNpICsgRENUU0laRTIqU0laRU9GX0pDT0VGICsgMiozMl0KLQlwcmVmZXRjaG50YSBbcnNpICsgRENUU0laRTIqU0laRU9GX0pDT0VGICsgMyozMl0KKyAgICAgICAgcHJlZmV0Y2hudGEgW3JzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDAqMzJdCisgICAgICAgIHByZWZldGNobnRhIFtyc2kgKyBEQ1RTSVpFMipTSVpFT0ZfSkNPRUYgKyAxKjMyXQorICAgICAgICBwcmVmZXRjaG50YSBbcnNpICsgRENUU0laRTIqU0laRU9GX0pDT0VGICsgMiozMl0KKyAgICAgICAgcHJlZmV0Y2hudGEgW3JzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDMqMzJdCiAKLQk7IC0tLS0gUGFzcyAyOiBwcm9jZXNzIHJvd3MsIHN0b3JlIGludG8gb3V0cHV0IGFycmF5LgorICAgICAgICA7IC0tLS0gUGFzcyAyOiBwcm9jZXNzIHJvd3MsIHN0b3JlIGludG8gb3V0cHV0IGFycmF5LgogCi0JbW92CXJkaSwgcjEyCTsgKEpTQU1QUk9XICopCi0JbW92CXJheCwgcjEzCisgICAgICAgIG1vdiAgICAgcmRpLCByMTIgICAgICAgIDsgKEpTQU1QUk9XICopCisgICAgICAgIG1vdiAgICAgcmF4LCByMTMKIAotCTsgfCBpbnB1dDp8IHJlc3VsdDp8Ci0JOyB8IEEwIEIwIHwgICAgICAgIHwKLQk7IHwgQTEgQjEgfCBDMCBDMSAgfAotCTsgfCBBMyBCMyB8IEQwIEQxICB8Ci0JOyB8IEE1IEI1IHwgICAgICAgIHwKLQk7IHwgQTcgQjcgfCAgICAgICAgfAorICAgICAgICA7IHwgaW5wdXQ6fCByZXN1bHQ6fAorICAgICAgICA7IHwgQTAgQjAgfCAgICAgICAgfAorICAgICAgICA7IHwgQTEgQjEgfCBDMCBDMSAgfAorICAgICAgICA7IHwgQTMgQjMgfCBEMCBEMSAgfAorICAgICAgICA7IHwgQTUgQjUgfCAgICAgICAgfAorICAgICAgICA7IHwgQTcgQjcgfCAgICAgICAgfAogCi0JOyAtLSBPZGQgcGFydAorICAgICAgICA7IC0tIE9kZCBwYXJ0CiAKLQlwYWNrc3NkdyAgeG1tMSx4bW0xCQk7IHhtbTE9KEExIEEzIEIxIEIzIEExIEEzIEIxIEIzKQotCXBhY2tzc2R3ICB4bW03LHhtbTcJCTsgeG1tNz0oQTUgQTcgQjUgQjcgQTUgQTcgQjUgQjcpCi0JcG1hZGR3ZCAgIHhtbTEsW3JlbCBQV19GMzYyX01GMTI3XQotCXBtYWRkd2QgICB4bW03LFtyZWwgUFdfRjA4NV9NRjA3Ml0KKyAgICAgICAgcGFja3NzZHcgIHhtbTEseG1tMSAgICAgICAgICAgICA7IHhtbTE9KEExIEEzIEIxIEIzIEExIEEzIEIxIEIzKQorICAgICAgICBwYWNrc3NkdyAgeG1tNyx4bW03ICAgICAgICAgICAgIDsgeG1tNz0oQTUgQTcgQjUgQjcgQTUgQTcgQjUgQjcpCisgICAgICAgIHBtYWRkd2QgICB4bW0xLFtyZWwgUFdfRjM2Ml9NRjEyN10KKyAgICAgICAgcG1hZGR3ZCAgIHhtbTcsW3JlbCBQV19GMDg1X01GMDcyXQogCi0JcGFkZGQgICAgIHhtbTEseG1tNwkJOyB4bW0xPXRtcDBbcm93MCByb3cxIHJvdzAgcm93MV0KKyAgICAgICAgcGFkZGQgICAgIHhtbTEseG1tNyAgICAgICAgICAgICA7IHhtbTE9dG1wMFtyb3cwIHJvdzEgcm93MCByb3cxXQogCi0JOyAtLSBFdmVuIHBhcnQKKyAgICAgICAgOyAtLSBFdmVuIHBhcnQKIAotCXBzbGxkICAgICB4bW02LChDT05TVF9CSVRTKzIpCTsgeG1tNj10bXAxMFtyb3cwIHJvdzEgKioqKiAqKioqXQorICAgICAgICBwc2xsZCAgICAgeG1tNiwoQ09OU1RfQklUUysyKSAgIDsgeG1tNj10bXAxMFtyb3cwIHJvdzEgKioqKiAqKioqXQogCi0JOyAtLSBGaW5hbCBvdXRwdXQgc3RhZ2UKKyAgICAgICAgOyAtLSBGaW5hbCBvdXRwdXQgc3RhZ2UKIAotCW1vdmRxYSAgICB4bW00LHhtbTYKLQlwYWRkZCAgICAgeG1tNix4bW0xCTsgeG1tNj1kYXRhMFtyb3cwIHJvdzEgKioqKiAqKioqXT0oQzAgQzEgKiogKiopCi0JcHN1YmQgICAgIHhtbTQseG1tMQk7IHhtbTQ9ZGF0YTFbcm93MCByb3cxICoqKiogKioqKl09KEQwIEQxICoqICoqKQorICAgICAgICBtb3ZkcWEgICAgeG1tNCx4bW02CisgICAgICAgIHBhZGRkICAgICB4bW02LHhtbTEgICAgIDsgeG1tNj1kYXRhMFtyb3cwIHJvdzEgKioqKiAqKioqXT0oQzAgQzEgKiogKiopCisgICAgICAgIHBzdWJkICAgICB4bW00LHhtbTEgICAgIDsgeG1tND1kYXRhMVtyb3cwIHJvdzEgKioqKiAqKioqXT0oRDAgRDEgKiogKiopCiAKLQlwdW5wY2tsZHEgeG1tNix4bW00CTsgeG1tNj0oQzAgRDAgQzEgRDEpCisgICAgICAgIHB1bnBja2xkcSB4bW02LHhtbTQgICAgIDsgeG1tNj0oQzAgRDAgQzEgRDEpCiAKLQlwYWRkZCAgICAgeG1tNixbcmVsIFBEX0RFU0NBTEVfUDJfMl0KLQlwc3JhZCAgICAgeG1tNixERVNDQUxFX1AyXzIKKyAgICAgICAgcGFkZGQgICAgIHhtbTYsW3JlbCBQRF9ERVNDQUxFX1AyXzJdCisgICAgICAgIHBzcmFkICAgICB4bW02LERFU0NBTEVfUDJfMgogCi0JcGFja3NzZHcgIHhtbTYseG1tNgkJOyB4bW02PShDMCBEMCBDMSBEMSBDMCBEMCBDMSBEMSkKLQlwYWNrc3N3YiAgeG1tNix4bW02CQk7IHhtbTY9KEMwIEQwIEMxIEQxIEMwIEQwIEMxIEQxIC4uKQotCXBhZGRiICAgICB4bW02LFtyZWwgUEJfQ0VOVEVSSlNBTVBdCisgICAgICAgIHBhY2tzc2R3ICB4bW02LHhtbTYgICAgICAgICAgICAgOyB4bW02PShDMCBEMCBDMSBEMSBDMCBEMCBDMSBEMSkKKyAgICAgICAgcGFja3Nzd2IgIHhtbTYseG1tNiAgICAgICAgICAgICA7IHhtbTY9KEMwIEQwIEMxIEQxIEMwIEQwIEMxIEQxIC4uKQorICAgICAgICBwYWRkYiAgICAgeG1tNixbcmVsIFBCX0NFTlRFUkpTQU1QXQogCi0JcGV4dHJ3CWVieCx4bW02LDB4MDAJCTsgZWJ4PShDMCBEMCAtLSAtLSkKLQlwZXh0cncJZWN4LHhtbTYsMHgwMQkJOyBlY3g9KEMxIEQxIC0tIC0tKQorICAgICAgICBwZXh0cncgIGVieCx4bW02LDB4MDAgICAgICAgICAgIDsgZWJ4PShDMCBEMCAtLSAtLSkKKyAgICAgICAgcGV4dHJ3ICBlY3gseG1tNiwweDAxICAgICAgICAgICA7IGVjeD0oQzEgRDEgLS0gLS0pCiAKLQltb3YJcmR4LCBKU0FNUFJPVyBbcmRpKzAqU0laRU9GX0pTQU1QUk9XXQotCW1vdglyc2ksIEpTQU1QUk9XIFtyZGkrMSpTSVpFT0ZfSlNBTVBST1ddCi0JbW92CVdPUkQgW3JkeCtyYXgqU0laRU9GX0pTQU1QTEVdLCBieAotCW1vdglXT1JEIFtyc2krcmF4KlNJWkVPRl9KU0FNUExFXSwgY3gKKyAgICAgICAgbW92ICAgICByZHgsIEpTQU1QUk9XIFtyZGkrMCpTSVpFT0ZfSlNBTVBST1ddCisgICAgICAgIG1vdiAgICAgcnNpLCBKU0FNUFJPVyBbcmRpKzEqU0laRU9GX0pTQU1QUk9XXQorICAgICAgICBtb3YgICAgIFdPUkQgW3JkeCtyYXgqU0laRU9GX0pTQU1QTEVdLCBieAorICAgICAgICBtb3YgICAgIFdPUkQgW3JzaStyYXgqU0laRU9GX0pTQU1QTEVdLCBjeAogCi0JcG9wCXJieAotCXVuY29sbGVjdF9hcmdzCi0JcG9wCXJicAotCXJldAorICAgICAgICBwb3AgICAgIHJieAorICAgICAgICB1bmNvbGxlY3RfYXJncworICAgICAgICBwb3AgICAgIHJicAorICAgICAgICByZXQKIAogOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKIDsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KLQlhbGlnbgkxNgorICAgICAgICBhbGlnbiAgIDE2CmRpZmYgLS1naXQgYS9zaW1kL2ppc3MycmVkLmFzbSBiL3NpbWQvamlzczJyZWQuYXNtCmluZGV4IDIzOGM2MWQuLjg4NmQ3OWQgMTAwNjQ0Ci0tLSBhL3NpbWQvamlzczJyZWQuYXNtCisrKyBiL3NpbWQvamlzczJyZWQuYXNtCkBAIC0yNiw3NCArMjYsNzQgQEAKIAogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0lZGVmaW5lIENPTlNUX0JJVFMJMTMKLSVkZWZpbmUgUEFTUzFfQklUUwkyCislZGVmaW5lIENPTlNUX0JJVFMgICAgICAxMworJWRlZmluZSBQQVNTMV9CSVRTICAgICAgMgogCi0lZGVmaW5lIERFU0NBTEVfUDFfNAkoQ09OU1RfQklUUy1QQVNTMV9CSVRTKzEpCi0lZGVmaW5lIERFU0NBTEVfUDJfNAkoQ09OU1RfQklUUytQQVNTMV9CSVRTKzMrMSkKLSVkZWZpbmUgREVTQ0FMRV9QMV8yCShDT05TVF9CSVRTLVBBU1MxX0JJVFMrMikKLSVkZWZpbmUgREVTQ0FMRV9QMl8yCShDT05TVF9CSVRTK1BBU1MxX0JJVFMrMysyKQorJWRlZmluZSBERVNDQUxFX1AxXzQgICAgKENPTlNUX0JJVFMtUEFTUzFfQklUUysxKQorJWRlZmluZSBERVNDQUxFX1AyXzQgICAgKENPTlNUX0JJVFMrUEFTUzFfQklUUyszKzEpCislZGVmaW5lIERFU0NBTEVfUDFfMiAgICAoQ09OU1RfQklUUy1QQVNTMV9CSVRTKzIpCislZGVmaW5lIERFU0NBTEVfUDJfMiAgICAoQ09OU1RfQklUUytQQVNTMV9CSVRTKzMrMikKIAogJWlmIENPTlNUX0JJVFMgPT0gMTMKLUZfMF8yMTEJZXF1CSAxNzMwCQk7IEZJWCgwLjIxMTE2NDI0MykKLUZfMF81MDkJZXF1CSA0MTc2CQk7IEZJWCgwLjUwOTc5NTU3OSkKLUZfMF82MDEJZXF1CSA0OTI2CQk7IEZJWCgwLjYwMTM0NDg4NykKLUZfMF83MjAJZXF1CSA1OTA2CQk7IEZJWCgwLjcyMDk1OTgyMikKLUZfMF83NjUJZXF1CSA2MjcwCQk7IEZJWCgwLjc2NTM2Njg2NSkKLUZfMF84NTAJZXF1CSA2OTY3CQk7IEZJWCgwLjg1MDQzMDA5NSkKLUZfMF84OTkJZXF1CSA3MzczCQk7IEZJWCgwLjg5OTk3NjIyMykKLUZfMV8wNjEJZXF1CSA4Njk3CQk7IEZJWCgxLjA2MTU5NDMzNykKLUZfMV8yNzIJZXF1CTEwNDI2CQk7IEZJWCgxLjI3Mjc1ODU4MCkKLUZfMV80NTEJZXF1CTExODkzCQk7IEZJWCgxLjQ1MTc3NDk4MSkKLUZfMV84NDcJZXF1CTE1MTM3CQk7IEZJWCgxLjg0Nzc1OTA2NSkKLUZfMl8xNzIJZXF1CTE3Nzk5CQk7IEZJWCgyLjE3MjczNDgwMykKLUZfMl81NjIJZXF1CTIwOTk1CQk7IEZJWCgyLjU2MjkxNTQ0NykKLUZfM182MjQJZXF1CTI5NjkyCQk7IEZJWCgzLjYyNDUwOTc4NSkKK0ZfMF8yMTEgZXF1ICAgICAgMTczMCAgICAgICAgICAgOyBGSVgoMC4yMTExNjQyNDMpCitGXzBfNTA5IGVxdSAgICAgIDQxNzYgICAgICAgICAgIDsgRklYKDAuNTA5Nzk1NTc5KQorRl8wXzYwMSBlcXUgICAgICA0OTI2ICAgICAgICAgICA7IEZJWCgwLjYwMTM0NDg4NykKK0ZfMF83MjAgZXF1ICAgICAgNTkwNiAgICAgICAgICAgOyBGSVgoMC43MjA5NTk4MjIpCitGXzBfNzY1IGVxdSAgICAgIDYyNzAgICAgICAgICAgIDsgRklYKDAuNzY1MzY2ODY1KQorRl8wXzg1MCBlcXUgICAgICA2OTY3ICAgICAgICAgICA7IEZJWCgwLjg1MDQzMDA5NSkKK0ZfMF84OTkgZXF1ICAgICAgNzM3MyAgICAgICAgICAgOyBGSVgoMC44OTk5NzYyMjMpCitGXzFfMDYxIGVxdSAgICAgIDg2OTcgICAgICAgICAgIDsgRklYKDEuMDYxNTk0MzM3KQorRl8xXzI3MiBlcXUgICAgIDEwNDI2ICAgICAgICAgICA7IEZJWCgxLjI3Mjc1ODU4MCkKK0ZfMV80NTEgZXF1ICAgICAxMTg5MyAgICAgICAgICAgOyBGSVgoMS40NTE3NzQ5ODEpCitGXzFfODQ3IGVxdSAgICAgMTUxMzcgICAgICAgICAgIDsgRklYKDEuODQ3NzU5MDY1KQorRl8yXzE3MiBlcXUgICAgIDE3Nzk5ICAgICAgICAgICA7IEZJWCgyLjE3MjczNDgwMykKK0ZfMl81NjIgZXF1ICAgICAyMDk5NSAgICAgICAgICAgOyBGSVgoMi41NjI5MTU0NDcpCitGXzNfNjI0IGVxdSAgICAgMjk2OTIgICAgICAgICAgIDsgRklYKDMuNjI0NTA5Nzg1KQogJWVsc2UKIDsgTkFTTSBjYW5ub3QgZG8gY29tcGlsZS10aW1lIGFyaXRobWV0aWMgb24gZmxvYXRpbmctcG9pbnQgY29uc3RhbnRzLgogJWRlZmluZSBERVNDQUxFKHgsbikgICgoKHgpKygxPDwoKG4pLTEpKSk+PihuKSkKLUZfMF8yMTEJZXF1CURFU0NBTEUoIDIyNjczNTg3OSwzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjIxMTE2NDI0MykKLUZfMF81MDkJZXF1CURFU0NBTEUoIDU0NzM4ODgzNCwzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjUwOTc5NTU3OSkKLUZfMF82MDEJZXF1CURFU0NBTEUoIDY0NTY4OTE1NSwzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjYwMTM0NDg4NykKLUZfMF83MjAJZXF1CURFU0NBTEUoIDc3NDEyNDcxNCwzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjcyMDk1OTgyMikKLUZfMF83NjUJZXF1CURFU0NBTEUoIDgyMTgwNjQxMywzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjc2NTM2Njg2NSkKLUZfMF84NTAJZXF1CURFU0NBTEUoIDkxMzE0MjM2MSwzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjg1MDQzMDA5NSkKLUZfMF84OTkJZXF1CURFU0NBTEUoIDk2NjM0MjExMSwzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjg5OTk3NjIyMykKLUZfMV8wNjEJZXF1CURFU0NBTEUoMTEzOTg3ODIzOSwzMC1DT05TVF9CSVRTKQk7IEZJWCgxLjA2MTU5NDMzNykKLUZfMV8yNzIJZXF1CURFU0NBTEUoMTM2NjYxNDExOSwzMC1DT05TVF9CSVRTKQk7IEZJWCgxLjI3Mjc1ODU4MCkKLUZfMV80NTEJZXF1CURFU0NBTEUoMTU1ODgzMTUxNiwzMC1DT05TVF9CSVRTKQk7IEZJWCgxLjQ1MTc3NDk4MSkKLUZfMV84NDcJZXF1CURFU0NBTEUoMTk4NDAxNjE4OCwzMC1DT05TVF9CSVRTKQk7IEZJWCgxLjg0Nzc1OTA2NSkKLUZfMl8xNzIJZXF1CURFU0NBTEUoMjMzMjk1NjIzMCwzMC1DT05TVF9CSVRTKQk7IEZJWCgyLjE3MjczNDgwMykKLUZfMl81NjIJZXF1CURFU0NBTEUoMjc1MTkwOTUwNiwzMC1DT05TVF9CSVRTKQk7IEZJWCgyLjU2MjkxNTQ0NykKLUZfM182MjQJZXF1CURFU0NBTEUoMzg5MTc4Nzc0NywzMC1DT05TVF9CSVRTKQk7IEZJWCgzLjYyNDUwOTc4NSkKK0ZfMF8yMTEgZXF1ICAgICBERVNDQUxFKCAyMjY3MzU4NzksMzAtQ09OU1RfQklUUykgICAgICAgOyBGSVgoMC4yMTExNjQyNDMpCitGXzBfNTA5IGVxdSAgICAgREVTQ0FMRSggNTQ3Mzg4ODM0LDMwLUNPTlNUX0JJVFMpICAgICAgIDsgRklYKDAuNTA5Nzk1NTc5KQorRl8wXzYwMSBlcXUgICAgIERFU0NBTEUoIDY0NTY4OTE1NSwzMC1DT05TVF9CSVRTKSAgICAgICA7IEZJWCgwLjYwMTM0NDg4NykKK0ZfMF83MjAgZXF1ICAgICBERVNDQUxFKCA3NzQxMjQ3MTQsMzAtQ09OU1RfQklUUykgICAgICAgOyBGSVgoMC43MjA5NTk4MjIpCitGXzBfNzY1IGVxdSAgICAgREVTQ0FMRSggODIxODA2NDEzLDMwLUNPTlNUX0JJVFMpICAgICAgIDsgRklYKDAuNzY1MzY2ODY1KQorRl8wXzg1MCBlcXUgICAgIERFU0NBTEUoIDkxMzE0MjM2MSwzMC1DT05TVF9CSVRTKSAgICAgICA7IEZJWCgwLjg1MDQzMDA5NSkKK0ZfMF84OTkgZXF1ICAgICBERVNDQUxFKCA5NjYzNDIxMTEsMzAtQ09OU1RfQklUUykgICAgICAgOyBGSVgoMC44OTk5NzYyMjMpCitGXzFfMDYxIGVxdSAgICAgREVTQ0FMRSgxMTM5ODc4MjM5LDMwLUNPTlNUX0JJVFMpICAgICAgIDsgRklYKDEuMDYxNTk0MzM3KQorRl8xXzI3MiBlcXUgICAgIERFU0NBTEUoMTM2NjYxNDExOSwzMC1DT05TVF9CSVRTKSAgICAgICA7IEZJWCgxLjI3Mjc1ODU4MCkKK0ZfMV80NTEgZXF1ICAgICBERVNDQUxFKDE1NTg4MzE1MTYsMzAtQ09OU1RfQklUUykgICAgICAgOyBGSVgoMS40NTE3NzQ5ODEpCitGXzFfODQ3IGVxdSAgICAgREVTQ0FMRSgxOTg0MDE2MTg4LDMwLUNPTlNUX0JJVFMpICAgICAgIDsgRklYKDEuODQ3NzU5MDY1KQorRl8yXzE3MiBlcXUgICAgIERFU0NBTEUoMjMzMjk1NjIzMCwzMC1DT05TVF9CSVRTKSAgICAgICA7IEZJWCgyLjE3MjczNDgwMykKK0ZfMl81NjIgZXF1ICAgICBERVNDQUxFKDI3NTE5MDk1MDYsMzAtQ09OU1RfQklUUykgICAgICAgOyBGSVgoMi41NjI5MTU0NDcpCitGXzNfNjI0IGVxdSAgICAgREVTQ0FMRSgzODkxNzg3NzQ3LDMwLUNPTlNUX0JJVFMpICAgICAgIDsgRklYKDMuNjI0NTA5Nzg1KQogJWVuZGlmCiAKIDsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlTRUNUSU9OCVNFR19DT05TVAorICAgICAgICBTRUNUSU9OIFNFR19DT05TVAogCi0JYWxpZ256CTE2Ci0JZ2xvYmFsCUVYVE4oamNvbnN0X2lkY3RfcmVkX3NzZTIpCisgICAgICAgIGFsaWdueiAgMTYKKyAgICAgICAgZ2xvYmFsICBFWFROKGpjb25zdF9pZGN0X3JlZF9zc2UyKQogCiBFWFROKGpjb25zdF9pZGN0X3JlZF9zc2UyKToKIAotUFdfRjE4NF9NRjA3Ngl0aW1lcyA0IGR3ICBGXzFfODQ3LC1GXzBfNzY1Ci1QV19GMjU2X0YwODkJdGltZXMgNCBkdyAgRl8yXzU2MiwgRl8wXzg5OQotUFdfRjEwNl9NRjIxNwl0aW1lcyA0IGR3ICBGXzFfMDYxLC1GXzJfMTcyCi1QV19NRjA2MF9NRjA1MAl0aW1lcyA0IGR3IC1GXzBfNjAxLC1GXzBfNTA5Ci1QV19GMTQ1X01GMDIxCXRpbWVzIDQgZHcgIEZfMV80NTEsLUZfMF8yMTEKLVBXX0YzNjJfTUYxMjcJdGltZXMgNCBkdyAgRl8zXzYyNCwtRl8xXzI3MgotUFdfRjA4NV9NRjA3Mgl0aW1lcyA0IGR3ICBGXzBfODUwLC1GXzBfNzIwCi1QRF9ERVNDQUxFX1AxXzQJdGltZXMgNCBkZCAgMSA8PCAoREVTQ0FMRV9QMV80LTEpCi1QRF9ERVNDQUxFX1AyXzQJdGltZXMgNCBkZCAgMSA8PCAoREVTQ0FMRV9QMl80LTEpCi1QRF9ERVNDQUxFX1AxXzIJdGltZXMgNCBkZCAgMSA8PCAoREVTQ0FMRV9QMV8yLTEpCi1QRF9ERVNDQUxFX1AyXzIJdGltZXMgNCBkZCAgMSA8PCAoREVTQ0FMRV9QMl8yLTEpCi1QQl9DRU5URVJKU0FNUAl0aW1lcyAxNiBkYiBDRU5URVJKU0FNUExFCitQV19GMTg0X01GMDc2ICAgdGltZXMgNCBkdyAgRl8xXzg0NywtRl8wXzc2NQorUFdfRjI1Nl9GMDg5ICAgIHRpbWVzIDQgZHcgIEZfMl81NjIsIEZfMF84OTkKK1BXX0YxMDZfTUYyMTcgICB0aW1lcyA0IGR3ICBGXzFfMDYxLC1GXzJfMTcyCitQV19NRjA2MF9NRjA1MCAgdGltZXMgNCBkdyAtRl8wXzYwMSwtRl8wXzUwOQorUFdfRjE0NV9NRjAyMSAgIHRpbWVzIDQgZHcgIEZfMV80NTEsLUZfMF8yMTEKK1BXX0YzNjJfTUYxMjcgICB0aW1lcyA0IGR3ICBGXzNfNjI0LC1GXzFfMjcyCitQV19GMDg1X01GMDcyICAgdGltZXMgNCBkdyAgRl8wXzg1MCwtRl8wXzcyMAorUERfREVTQ0FMRV9QMV80IHRpbWVzIDQgZGQgIDEgPDwgKERFU0NBTEVfUDFfNC0xKQorUERfREVTQ0FMRV9QMl80IHRpbWVzIDQgZGQgIDEgPDwgKERFU0NBTEVfUDJfNC0xKQorUERfREVTQ0FMRV9QMV8yIHRpbWVzIDQgZGQgIDEgPDwgKERFU0NBTEVfUDFfMi0xKQorUERfREVTQ0FMRV9QMl8yIHRpbWVzIDQgZGQgIDEgPDwgKERFU0NBTEVfUDJfMi0xKQorUEJfQ0VOVEVSSlNBTVAgIHRpbWVzIDE2IGRiIENFTlRFUkpTQU1QTEUKIAotCWFsaWduegkxNgorICAgICAgICBhbGlnbnogIDE2CiAKIDsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlTRUNUSU9OCVNFR19URVhUCi0JQklUUwkzMgorICAgICAgICBTRUNUSU9OIFNFR19URVhUCisgICAgICAgIEJJVFMgICAgMzIKIDsKIDsgUGVyZm9ybSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Qgb24gb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cywKIDsgcHJvZHVjaW5nIGEgcmVkdWNlZC1zaXplIDR4NCBvdXRwdXQgYmxvY2suCkBAIC0xMDMsMzA5ICsxMDMsMzA5IEBACiA7ICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQogOwogCi0lZGVmaW5lIGRjdF90YWJsZShiKQkoYikrOAkJCTsgdm9pZCAqIGRjdF90YWJsZQotJWRlZmluZSBjb2VmX2Jsb2NrKGIpCShiKSsxMgkJOyBKQ09FRlBUUiBjb2VmX2Jsb2NrCi0lZGVmaW5lIG91dHB1dF9idWYoYikJKGIpKzE2CQk7IEpTQU1QQVJSQVkgb3V0cHV0X2J1ZgotJWRlZmluZSBvdXRwdXRfY29sKGIpCShiKSsyMAkJOyBKRElNRU5TSU9OIG91dHB1dF9jb2wKKyVkZWZpbmUgZGN0X3RhYmxlKGIpICAgIChiKSs4ICAgICAgICAgICA7IHZvaWQgKiBkY3RfdGFibGUKKyVkZWZpbmUgY29lZl9ibG9jayhiKSAgIChiKSsxMiAgICAgICAgICA7IEpDT0VGUFRSIGNvZWZfYmxvY2sKKyVkZWZpbmUgb3V0cHV0X2J1ZihiKSAgIChiKSsxNiAgICAgICAgICA7IEpTQU1QQVJSQVkgb3V0cHV0X2J1ZgorJWRlZmluZSBvdXRwdXRfY29sKGIpICAgKGIpKzIwICAgICAgICAgIDsgSkRJTUVOU0lPTiBvdXRwdXRfY29sCiAKLSVkZWZpbmUgb3JpZ2luYWxfZWJwCWVicCswCi0lZGVmaW5lIHdrKGkpCQllYnAtKFdLX05VTS0oaSkpKlNJWkVPRl9YTU1XT1JECTsgeG1td29yZCB3a1tXS19OVU1dCi0lZGVmaW5lIFdLX05VTQkJMgorJWRlZmluZSBvcmlnaW5hbF9lYnAgICAgZWJwKzAKKyVkZWZpbmUgd2soaSkgICAgICAgICAgIGVicC0oV0tfTlVNLShpKSkqU0laRU9GX1hNTVdPUkQgOyB4bW13b3JkIHdrW1dLX05VTV0KKyVkZWZpbmUgV0tfTlVNICAgICAgICAgIDIKIAotCWFsaWduCTE2Ci0JZ2xvYmFsCUVYVE4oanNpbWRfaWRjdF80eDRfc3NlMikKKyAgICAgICAgYWxpZ24gICAxNgorICAgICAgICBnbG9iYWwgIEVYVE4oanNpbWRfaWRjdF80eDRfc3NlMikKIAogRVhUTihqc2ltZF9pZGN0XzR4NF9zc2UyKToKLQlwdXNoCWVicAotCW1vdgllYXgsZXNwCQkJCTsgZWF4ID0gb3JpZ2luYWwgZWJwCi0Jc3ViCWVzcCwgYnl0ZSA0Ci0JYW5kCWVzcCwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKQk7IGFsaWduIHRvIDEyOCBiaXRzCi0JbW92CVtlc3BdLGVheAotCW1vdgllYnAsZXNwCQkJCTsgZWJwID0gYWxpZ25lZCBlYnAKLQlsZWEJZXNwLCBbd2soMCldCi0JcHVzaHBpYwllYngKLTsJcHVzaAllY3gJCTsgdW51c2VkCi07CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotCXB1c2gJZXNpCi0JcHVzaAllZGkKKyAgICAgICAgcHVzaCAgICBlYnAKKyAgICAgICAgbW92ICAgICBlYXgsZXNwICAgICAgICAgICAgICAgICAgICAgICAgIDsgZWF4ID0gb3JpZ2luYWwgZWJwCisgICAgICAgIHN1YiAgICAgZXNwLCBieXRlIDQKKyAgICAgICAgYW5kICAgICBlc3AsIGJ5dGUgKC1TSVpFT0ZfWE1NV09SRCkgICAgIDsgYWxpZ24gdG8gMTI4IGJpdHMKKyAgICAgICAgbW92ICAgICBbZXNwXSxlYXgKKyAgICAgICAgbW92ICAgICBlYnAsZXNwICAgICAgICAgICAgICAgICAgICAgICAgIDsgZWJwID0gYWxpZ25lZCBlYnAKKyAgICAgICAgbGVhICAgICBlc3AsIFt3aygwKV0KKyAgICAgICAgcHVzaHBpYyBlYngKKzsgICAgICAgcHVzaCAgICBlY3ggICAgICAgICAgICAgOyB1bnVzZWQKKzsgICAgICAgcHVzaCAgICBlZHggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICAgICAgcHVzaCAgICBlc2kKKyAgICAgICAgcHVzaCAgICBlZGkKIAotCWdldF9HT1QJZWJ4CQk7IGdldCBHT1QgYWRkcmVzcworICAgICAgICBnZXRfR09UIGVieCAgICAgICAgICAgICA7IGdldCBHT1QgYWRkcmVzcwogCi0JOyAtLS0tIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQuCisgICAgICAgIDsgLS0tLSBQYXNzIDE6IHByb2Nlc3MgY29sdW1ucyBmcm9tIGlucHV0LgogCi07CW1vdgllYXgsIFtvcmlnaW5hbF9lYnBdCi0JbW92CWVkeCwgUE9JTlRFUiBbZGN0X3RhYmxlKGVheCldCTsgcXVhbnRwdHIKLQltb3YJZXNpLCBKQ09FRlBUUiBbY29lZl9ibG9jayhlYXgpXQkJOyBpbnB0cgorOyAgICAgICBtb3YgICAgIGVheCwgW29yaWdpbmFsX2VicF0KKyAgICAgICAgbW92ICAgICBlZHgsIFBPSU5URVIgW2RjdF90YWJsZShlYXgpXSAgICAgICAgICAgOyBxdWFudHB0cgorICAgICAgICBtb3YgICAgIGVzaSwgSkNPRUZQVFIgW2NvZWZfYmxvY2soZWF4KV0gICAgICAgICA7IGlucHRyCiAKICVpZm5kZWYgTk9fWkVST19DT0xVTU5fVEVTVF80WDRfU1NFMgotCW1vdgllYXgsIERXT1JEIFtEV0JMT0NLKDEsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQlvcgllYXgsIERXT1JEIFtEV0JMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQlqbnoJc2hvcnQgLmNvbHVtbkRDVAorICAgICAgICBtb3YgICAgIGVheCwgRFdPUkQgW0RXQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBvciAgICAgIGVheCwgRFdPUkQgW0RXQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBqbnogICAgIHNob3J0IC5jb2x1bW5EQ1QKIAotCW1vdmRxYQl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCi0JbW92ZHFhCXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQlwb3IJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMywwLGVzaSxTSVpFT0ZfSkNPRUYpXQotCXBvcgl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSyg1LDAsZXNpLFNJWkVPRl9KQ09FRildCi0JcG9yCXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDYsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQlwb3IJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNywwLGVzaSxTSVpFT0ZfSkNPRUYpXQotCXBvcgl4bW0wLHhtbTEKLQlwYWNrc3N3YiB4bW0wLHhtbTAKLQlwYWNrc3N3YiB4bW0wLHhtbTAKLQltb3ZkCWVheCx4bW0wCi0JdGVzdAllYXgsZWF4Ci0Jam56CXNob3J0IC5jb2x1bW5EQ1QKKyAgICAgICAgbW92ZHFhICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdmRxYSAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBwb3IgICAgIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgcG9yICAgICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSyg1LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIHBvciAgICAgeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soNiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBwb3IgICAgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgcG9yICAgICB4bW0wLHhtbTEKKyAgICAgICAgcGFja3Nzd2IgeG1tMCx4bW0wCisgICAgICAgIHBhY2tzc3diIHhtbTAseG1tMAorICAgICAgICBtb3ZkICAgIGVheCx4bW0wCisgICAgICAgIHRlc3QgICAgZWF4LGVheAorICAgICAgICBqbnogICAgIHNob3J0IC5jb2x1bW5EQ1QKIAotCTsgLS0gQUMgdGVybXMgYWxsIHplcm8KKyAgICAgICAgOyAtLSBBQyB0ZXJtcyBhbGwgemVybwogCi0JbW92ZHFhCXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQlwbXVsbHcJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKyAgICAgICAgbW92ZHFhICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIHBtdWxsdyAgeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KIAotCXBzbGx3CXhtbTAsUEFTUzFfQklUUworICAgICAgICBwc2xsdyAgIHhtbTAsUEFTUzFfQklUUwogCi0JbW92ZHFhICAgIHhtbTMseG1tMAk7IHhtbTA9aW4wPSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNykKLQlwdW5wY2tsd2QgeG1tMCx4bW0wCTsgeG1tMD0oMDAgMDAgMDEgMDEgMDIgMDIgMDMgMDMpCi0JcHVucGNraHdkIHhtbTMseG1tMwk7IHhtbTM9KDA0IDA0IDA1IDA1IDA2IDA2IDA3IDA3KQorICAgICAgICBtb3ZkcWEgICAgeG1tMyx4bW0wICAgICA7IHhtbTA9aW4wPSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNykKKyAgICAgICAgcHVucGNrbHdkIHhtbTAseG1tMCAgICAgOyB4bW0wPSgwMCAwMCAwMSAwMSAwMiAwMiAwMyAwMykKKyAgICAgICAgcHVucGNraHdkIHhtbTMseG1tMyAgICAgOyB4bW0zPSgwNCAwNCAwNSAwNSAwNiAwNiAwNyAwNykKIAotCXBzaHVmZAl4bW0xLHhtbTAsMHg1MAk7IHhtbTE9W2NvbDAgY29sMV09KDAwIDAwIDAwIDAwIDAxIDAxIDAxIDAxKQotCXBzaHVmZAl4bW0wLHhtbTAsMHhGQQk7IHhtbTA9W2NvbDIgY29sM109KDAyIDAyIDAyIDAyIDAzIDAzIDAzIDAzKQotCXBzaHVmZAl4bW02LHhtbTMsMHg1MAk7IHhtbTY9W2NvbDQgY29sNV09KDA0IDA0IDA0IDA0IDA1IDA1IDA1IDA1KQotCXBzaHVmZAl4bW0zLHhtbTMsMHhGQQk7IHhtbTM9W2NvbDYgY29sN109KDA2IDA2IDA2IDA2IDA3IDA3IDA3IDA3KQorICAgICAgICBwc2h1ZmQgIHhtbTEseG1tMCwweDUwICA7IHhtbTE9W2NvbDAgY29sMV09KDAwIDAwIDAwIDAwIDAxIDAxIDAxIDAxKQorICAgICAgICBwc2h1ZmQgIHhtbTAseG1tMCwweEZBICA7IHhtbTA9W2NvbDIgY29sM109KDAyIDAyIDAyIDAyIDAzIDAzIDAzIDAzKQorICAgICAgICBwc2h1ZmQgIHhtbTYseG1tMywweDUwICA7IHhtbTY9W2NvbDQgY29sNV09KDA0IDA0IDA0IDA0IDA1IDA1IDA1IDA1KQorICAgICAgICBwc2h1ZmQgIHhtbTMseG1tMywweEZBICA7IHhtbTM9W2NvbDYgY29sN109KDA2IDA2IDA2IDA2IDA3IDA3IDA3IDA3KQogCi0Jam1wCW5lYXIgLmNvbHVtbl9lbmQKLQlhbGlnbngJMTYsNworICAgICAgICBqbXAgICAgIG5lYXIgLmNvbHVtbl9lbmQKKyAgICAgICAgYWxpZ254ICAxNiw3CiAlZW5kaWYKIC5jb2x1bW5EQ1Q6CiAKLQk7IC0tIE9kZCBwYXJ0CisgICAgICAgIDsgLS0gT2RkIHBhcnQKIAotCW1vdmRxYQl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCi0JbW92ZHFhCXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQlwbXVsbHcJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KLQlwbXVsbHcJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMywwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KLQltb3ZkcWEJeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soNSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQotCW1vdmRxYQl4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg3LDAsZXNpLFNJWkVPRl9KQ09FRildCi0JcG11bGx3CXhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCi0JcG11bGx3CXhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisgICAgICAgIG1vdmRxYSAgeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBtb3ZkcWEgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgcG11bGx3ICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorICAgICAgICBwbXVsbHcgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisgICAgICAgIG1vdmRxYSAgeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soNSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBtb3ZkcWEgIHhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgcG11bGx3ICB4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSyg1LDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorICAgICAgICBwbXVsbHcgIHhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCiAKLQltb3ZkcWEgICAgeG1tNCx4bW0wCi0JbW92ZHFhICAgIHhtbTUseG1tMAotCXB1bnBja2x3ZCB4bW00LHhtbTEKLQlwdW5wY2tod2QgeG1tNSx4bW0xCi0JbW92ZHFhICAgIHhtbTAseG1tNAotCW1vdmRxYSAgICB4bW0xLHhtbTUKLQlwbWFkZHdkICAgeG1tNCxbR09UT0ZGKGVieCxQV19GMjU2X0YwODkpXQk7IHhtbTQ9KHRtcDJMKQotCXBtYWRkd2QgICB4bW01LFtHT1RPRkYoZWJ4LFBXX0YyNTZfRjA4OSldCTsgeG1tNT0odG1wMkgpCi0JcG1hZGR3ZCAgIHhtbTAsW0dPVE9GRihlYngsUFdfRjEwNl9NRjIxNyldCTsgeG1tMD0odG1wMEwpCi0JcG1hZGR3ZCAgIHhtbTEsW0dPVE9GRihlYngsUFdfRjEwNl9NRjIxNyldCTsgeG1tMT0odG1wMEgpCisgICAgICAgIG1vdmRxYSAgICB4bW00LHhtbTAKKyAgICAgICAgbW92ZHFhICAgIHhtbTUseG1tMAorICAgICAgICBwdW5wY2tsd2QgeG1tNCx4bW0xCisgICAgICAgIHB1bnBja2h3ZCB4bW01LHhtbTEKKyAgICAgICAgbW92ZHFhICAgIHhtbTAseG1tNAorICAgICAgICBtb3ZkcWEgICAgeG1tMSx4bW01CisgICAgICAgIHBtYWRkd2QgICB4bW00LFtHT1RPRkYoZWJ4LFBXX0YyNTZfRjA4OSldICAgICAgIDsgeG1tND0odG1wMkwpCisgICAgICAgIHBtYWRkd2QgICB4bW01LFtHT1RPRkYoZWJ4LFBXX0YyNTZfRjA4OSldICAgICAgIDsgeG1tNT0odG1wMkgpCisgICAgICAgIHBtYWRkd2QgICB4bW0wLFtHT1RPRkYoZWJ4LFBXX0YxMDZfTUYyMTcpXSAgICAgIDsgeG1tMD0odG1wMEwpCisgICAgICAgIHBtYWRkd2QgICB4bW0xLFtHT1RPRkYoZWJ4LFBXX0YxMDZfTUYyMTcpXSAgICAgIDsgeG1tMT0odG1wMEgpCiAKLQltb3ZkcWEgICAgeG1tNix4bW0yCi0JbW92ZHFhICAgIHhtbTcseG1tMgotCXB1bnBja2x3ZCB4bW02LHhtbTMKLQlwdW5wY2tod2QgeG1tNyx4bW0zCi0JbW92ZHFhICAgIHhtbTIseG1tNgotCW1vdmRxYSAgICB4bW0zLHhtbTcKLQlwbWFkZHdkICAgeG1tNixbR09UT0ZGKGVieCxQV19NRjA2MF9NRjA1MCldCTsgeG1tNj0odG1wMkwpCi0JcG1hZGR3ZCAgIHhtbTcsW0dPVE9GRihlYngsUFdfTUYwNjBfTUYwNTApXQk7IHhtbTc9KHRtcDJIKQotCXBtYWRkd2QgICB4bW0yLFtHT1RPRkYoZWJ4LFBXX0YxNDVfTUYwMjEpXQk7IHhtbTI9KHRtcDBMKQotCXBtYWRkd2QgICB4bW0zLFtHT1RPRkYoZWJ4LFBXX0YxNDVfTUYwMjEpXQk7IHhtbTM9KHRtcDBIKQorICAgICAgICBtb3ZkcWEgICAgeG1tNix4bW0yCisgICAgICAgIG1vdmRxYSAgICB4bW03LHhtbTIKKyAgICAgICAgcHVucGNrbHdkIHhtbTYseG1tMworICAgICAgICBwdW5wY2tod2QgeG1tNyx4bW0zCisgICAgICAgIG1vdmRxYSAgICB4bW0yLHhtbTYKKyAgICAgICAgbW92ZHFhICAgIHhtbTMseG1tNworICAgICAgICBwbWFkZHdkICAgeG1tNixbR09UT0ZGKGVieCxQV19NRjA2MF9NRjA1MCldICAgICA7IHhtbTY9KHRtcDJMKQorICAgICAgICBwbWFkZHdkICAgeG1tNyxbR09UT0ZGKGVieCxQV19NRjA2MF9NRjA1MCldICAgICA7IHhtbTc9KHRtcDJIKQorICAgICAgICBwbWFkZHdkICAgeG1tMixbR09UT0ZGKGVieCxQV19GMTQ1X01GMDIxKV0gICAgICA7IHhtbTI9KHRtcDBMKQorICAgICAgICBwbWFkZHdkICAgeG1tMyxbR09UT0ZGKGVieCxQV19GMTQ1X01GMDIxKV0gICAgICA7IHhtbTM9KHRtcDBIKQogCi0JcGFkZGQJeG1tNix4bW00CQk7IHhtbTY9dG1wMkwKLQlwYWRkZAl4bW03LHhtbTUJCTsgeG1tNz10bXAySAotCXBhZGRkCXhtbTIseG1tMAkJOyB4bW0yPXRtcDBMCi0JcGFkZGQJeG1tMyx4bW0xCQk7IHhtbTM9dG1wMEgKKyAgICAgICAgcGFkZGQgICB4bW02LHhtbTQgICAgICAgICAgICAgICA7IHhtbTY9dG1wMkwKKyAgICAgICAgcGFkZGQgICB4bW03LHhtbTUgICAgICAgICAgICAgICA7IHhtbTc9dG1wMkgKKyAgICAgICAgcGFkZGQgICB4bW0yLHhtbTAgICAgICAgICAgICAgICA7IHhtbTI9dG1wMEwKKyAgICAgICAgcGFkZGQgICB4bW0zLHhtbTEgICAgICAgICAgICAgICA7IHhtbTM9dG1wMEgKIAotCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTIJOyB3aygwKT10bXAwTAotCW1vdmRxYQlYTU1XT1JEIFt3aygxKV0sIHhtbTMJOyB3aygxKT10bXAwSAorICAgICAgICBtb3ZkcWEgIFhNTVdPUkQgW3drKDApXSwgeG1tMiAgIDsgd2soMCk9dG1wMEwKKyAgICAgICAgbW92ZHFhICBYTU1XT1JEIFt3aygxKV0sIHhtbTMgICA7IHdrKDEpPXRtcDBICiAKLQk7IC0tIEV2ZW4gcGFydAorICAgICAgICA7IC0tIEV2ZW4gcGFydAogCi0JbW92ZHFhCXhtbTQsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQltb3ZkcWEJeG1tNSwgWE1NV09SRCBbWE1NQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQotCW1vdmRxYQl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSyg2LDAsZXNpLFNJWkVPRl9KQ09FRildCi0JcG11bGx3CXhtbTQsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCi0JcG11bGx3CXhtbTUsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCi0JcG11bGx3CXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDYsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisgICAgICAgIG1vdmRxYSAgeG1tNCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBtb3ZkcWEgIHhtbTUsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgbW92ZHFhICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSyg2LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIHBtdWxsdyAgeG1tNCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKyAgICAgICAgcG11bGx3ICB4bW01LCBYTU1XT1JEIFtYTU1CTE9DSygyLDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorICAgICAgICBwbXVsbHcgIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDYsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCiAKLQlweG9yICAgICAgeG1tMSx4bW0xCi0JcHhvciAgICAgIHhtbTIseG1tMgotCXB1bnBja2x3ZCB4bW0xLHhtbTQJCTsgeG1tMT10bXAwTAotCXB1bnBja2h3ZCB4bW0yLHhtbTQJCTsgeG1tMj10bXAwSAotCXBzcmFkICAgICB4bW0xLCgxNi1DT05TVF9CSVRTLTEpIDsgcHNyYWQgeG1tMSwxNiAmIHBzbGxkIHhtbTEsQ09OU1RfQklUUysxCi0JcHNyYWQgICAgIHhtbTIsKDE2LUNPTlNUX0JJVFMtMSkgOyBwc3JhZCB4bW0yLDE2ICYgcHNsbGQgeG1tMixDT05TVF9CSVRTKzEKKyAgICAgICAgcHhvciAgICAgIHhtbTEseG1tMQorICAgICAgICBweG9yICAgICAgeG1tMix4bW0yCisgICAgICAgIHB1bnBja2x3ZCB4bW0xLHhtbTQgICAgICAgICAgICAgOyB4bW0xPXRtcDBMCisgICAgICAgIHB1bnBja2h3ZCB4bW0yLHhtbTQgICAgICAgICAgICAgOyB4bW0yPXRtcDBICisgICAgICAgIHBzcmFkICAgICB4bW0xLCgxNi1DT05TVF9CSVRTLTEpIDsgcHNyYWQgeG1tMSwxNiAmIHBzbGxkIHhtbTEsQ09OU1RfQklUUysxCisgICAgICAgIHBzcmFkICAgICB4bW0yLCgxNi1DT05TVF9CSVRTLTEpIDsgcHNyYWQgeG1tMiwxNiAmIHBzbGxkIHhtbTIsQ09OU1RfQklUUysxCiAKLQltb3ZkcWEgICAgeG1tMyx4bW01CQk7IHhtbTU9aW4yPXoyCi0JcHVucGNrbHdkIHhtbTUseG1tMAkJOyB4bW0wPWluNj16MwotCXB1bnBja2h3ZCB4bW0zLHhtbTAKLQlwbWFkZHdkICAgeG1tNSxbR09UT0ZGKGVieCxQV19GMTg0X01GMDc2KV0JOyB4bW01PXRtcDJMCi0JcG1hZGR3ZCAgIHhtbTMsW0dPVE9GRihlYngsUFdfRjE4NF9NRjA3NildCTsgeG1tMz10bXAySAorICAgICAgICBtb3ZkcWEgICAgeG1tMyx4bW01ICAgICAgICAgICAgIDsgeG1tNT1pbjI9ejIKKyAgICAgICAgcHVucGNrbHdkIHhtbTUseG1tMCAgICAgICAgICAgICA7IHhtbTA9aW42PXozCisgICAgICAgIHB1bnBja2h3ZCB4bW0zLHhtbTAKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTUsW0dPVE9GRihlYngsUFdfRjE4NF9NRjA3NildICAgICAgOyB4bW01PXRtcDJMCisgICAgICAgIHBtYWRkd2QgICB4bW0zLFtHT1RPRkYoZWJ4LFBXX0YxODRfTUYwNzYpXSAgICAgIDsgeG1tMz10bXAySAogCi0JbW92ZHFhCXhtbTQseG1tMQotCW1vdmRxYQl4bW0wLHhtbTIKLQlwYWRkZAl4bW0xLHhtbTUJCTsgeG1tMT10bXAxMEwKLQlwYWRkZAl4bW0yLHhtbTMJCTsgeG1tMj10bXAxMEgKLQlwc3ViZAl4bW00LHhtbTUJCTsgeG1tND10bXAxMkwKLQlwc3ViZAl4bW0wLHhtbTMJCTsgeG1tMD10bXAxMkgKKyAgICAgICAgbW92ZHFhICB4bW00LHhtbTEKKyAgICAgICAgbW92ZHFhICB4bW0wLHhtbTIKKyAgICAgICAgcGFkZGQgICB4bW0xLHhtbTUgICAgICAgICAgICAgICA7IHhtbTE9dG1wMTBMCisgICAgICAgIHBhZGRkICAgeG1tMix4bW0zICAgICAgICAgICAgICAgOyB4bW0yPXRtcDEwSAorICAgICAgICBwc3ViZCAgIHhtbTQseG1tNSAgICAgICAgICAgICAgIDsgeG1tND10bXAxMkwKKyAgICAgICAgcHN1YmQgICB4bW0wLHhtbTMgICAgICAgICAgICAgICA7IHhtbTA9dG1wMTJICiAKLQk7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQorICAgICAgICA7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQogCi0JbW92ZHFhCXhtbTUseG1tMQotCW1vdmRxYQl4bW0zLHhtbTIKLQlwYWRkZAl4bW0xLHhtbTYJCTsgeG1tMT1kYXRhMEwKLQlwYWRkZAl4bW0yLHhtbTcJCTsgeG1tMj1kYXRhMEgKLQlwc3ViZAl4bW01LHhtbTYJCTsgeG1tNT1kYXRhM0wKLQlwc3ViZAl4bW0zLHhtbTcJCTsgeG1tMz1kYXRhM0gKKyAgICAgICAgbW92ZHFhICB4bW01LHhtbTEKKyAgICAgICAgbW92ZHFhICB4bW0zLHhtbTIKKyAgICAgICAgcGFkZGQgICB4bW0xLHhtbTYgICAgICAgICAgICAgICA7IHhtbTE9ZGF0YTBMCisgICAgICAgIHBhZGRkICAgeG1tMix4bW03ICAgICAgICAgICAgICAgOyB4bW0yPWRhdGEwSAorICAgICAgICBwc3ViZCAgIHhtbTUseG1tNiAgICAgICAgICAgICAgIDsgeG1tNT1kYXRhM0wKKyAgICAgICAgcHN1YmQgICB4bW0zLHhtbTcgICAgICAgICAgICAgICA7IHhtbTM9ZGF0YTNICiAKLQltb3ZkcWEJeG1tNixbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxXzQpXQk7IHhtbTY9W1BEX0RFU0NBTEVfUDFfNF0KKyAgICAgICAgbW92ZHFhICB4bW02LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDFfNCldICAgICAgOyB4bW02PVtQRF9ERVNDQUxFX1AxXzRdCiAKLQlwYWRkZAl4bW0xLHhtbTYKLQlwYWRkZAl4bW0yLHhtbTYKLQlwc3JhZAl4bW0xLERFU0NBTEVfUDFfNAotCXBzcmFkCXhtbTIsREVTQ0FMRV9QMV80Ci0JcGFkZGQJeG1tNSx4bW02Ci0JcGFkZGQJeG1tMyx4bW02Ci0JcHNyYWQJeG1tNSxERVNDQUxFX1AxXzQKLQlwc3JhZAl4bW0zLERFU0NBTEVfUDFfNAorICAgICAgICBwYWRkZCAgIHhtbTEseG1tNgorICAgICAgICBwYWRkZCAgIHhtbTIseG1tNgorICAgICAgICBwc3JhZCAgIHhtbTEsREVTQ0FMRV9QMV80CisgICAgICAgIHBzcmFkICAgeG1tMixERVNDQUxFX1AxXzQKKyAgICAgICAgcGFkZGQgICB4bW01LHhtbTYKKyAgICAgICAgcGFkZGQgICB4bW0zLHhtbTYKKyAgICAgICAgcHNyYWQgICB4bW01LERFU0NBTEVfUDFfNAorICAgICAgICBwc3JhZCAgIHhtbTMsREVTQ0FMRV9QMV80CiAKLQlwYWNrc3NkdyAgeG1tMSx4bW0yCQk7IHhtbTE9ZGF0YTA9KDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3KQotCXBhY2tzc2R3ICB4bW01LHhtbTMJCTsgeG1tNT1kYXRhMz0oMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcpCisgICAgICAgIHBhY2tzc2R3ICB4bW0xLHhtbTIgICAgICAgICAgICAgOyB4bW0xPWRhdGEwPSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNykKKyAgICAgICAgcGFja3NzZHcgIHhtbTUseG1tMyAgICAgICAgICAgICA7IHhtbTU9ZGF0YTM9KDMwIDMxIDMyIDMzIDM0IDM1IDM2IDM3KQogCi0JbW92ZHFhCXhtbTcsIFhNTVdPUkQgW3drKDApXQk7IHhtbTc9dG1wMEwKLQltb3ZkcWEJeG1tNiwgWE1NV09SRCBbd2soMSldCTsgeG1tNj10bXAwSAorICAgICAgICBtb3ZkcWEgIHhtbTcsIFhNTVdPUkQgW3drKDApXSAgIDsgeG1tNz10bXAwTAorICAgICAgICBtb3ZkcWEgIHhtbTYsIFhNTVdPUkQgW3drKDEpXSAgIDsgeG1tNj10bXAwSAogCi0JbW92ZHFhCXhtbTIseG1tNAotCW1vdmRxYQl4bW0zLHhtbTAKLQlwYWRkZAl4bW00LHhtbTcJCTsgeG1tND1kYXRhMUwKLQlwYWRkZAl4bW0wLHhtbTYJCTsgeG1tMD1kYXRhMUgKLQlwc3ViZAl4bW0yLHhtbTcJCTsgeG1tMj1kYXRhMkwKLQlwc3ViZAl4bW0zLHhtbTYJCTsgeG1tMz1kYXRhMkgKKyAgICAgICAgbW92ZHFhICB4bW0yLHhtbTQKKyAgICAgICAgbW92ZHFhICB4bW0zLHhtbTAKKyAgICAgICAgcGFkZGQgICB4bW00LHhtbTcgICAgICAgICAgICAgICA7IHhtbTQ9ZGF0YTFMCisgICAgICAgIHBhZGRkICAgeG1tMCx4bW02ICAgICAgICAgICAgICAgOyB4bW0wPWRhdGExSAorICAgICAgICBwc3ViZCAgIHhtbTIseG1tNyAgICAgICAgICAgICAgIDsgeG1tMj1kYXRhMkwKKyAgICAgICAgcHN1YmQgICB4bW0zLHhtbTYgICAgICAgICAgICAgICA7IHhtbTM9ZGF0YTJICiAKLQltb3ZkcWEJeG1tNyxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxXzQpXQk7IHhtbTc9W1BEX0RFU0NBTEVfUDFfNF0KKyAgICAgICAgbW92ZHFhICB4bW03LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDFfNCldICAgICAgOyB4bW03PVtQRF9ERVNDQUxFX1AxXzRdCiAKLQlwYWRkZAl4bW00LHhtbTcKLQlwYWRkZAl4bW0wLHhtbTcKLQlwc3JhZAl4bW00LERFU0NBTEVfUDFfNAotCXBzcmFkCXhtbTAsREVTQ0FMRV9QMV80Ci0JcGFkZGQJeG1tMix4bW03Ci0JcGFkZGQJeG1tMyx4bW03Ci0JcHNyYWQJeG1tMixERVNDQUxFX1AxXzQKLQlwc3JhZAl4bW0zLERFU0NBTEVfUDFfNAorICAgICAgICBwYWRkZCAgIHhtbTQseG1tNworICAgICAgICBwYWRkZCAgIHhtbTAseG1tNworICAgICAgICBwc3JhZCAgIHhtbTQsREVTQ0FMRV9QMV80CisgICAgICAgIHBzcmFkICAgeG1tMCxERVNDQUxFX1AxXzQKKyAgICAgICAgcGFkZGQgICB4bW0yLHhtbTcKKyAgICAgICAgcGFkZGQgICB4bW0zLHhtbTcKKyAgICAgICAgcHNyYWQgICB4bW0yLERFU0NBTEVfUDFfNAorICAgICAgICBwc3JhZCAgIHhtbTMsREVTQ0FMRV9QMV80CiAKLQlwYWNrc3NkdyAgeG1tNCx4bW0wCQk7IHhtbTQ9ZGF0YTE9KDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3KQotCXBhY2tzc2R3ICB4bW0yLHhtbTMJCTsgeG1tMj1kYXRhMj0oMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcpCisgICAgICAgIHBhY2tzc2R3ICB4bW00LHhtbTAgICAgICAgICAgICAgOyB4bW00PWRhdGExPSgxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNykKKyAgICAgICAgcGFja3NzZHcgIHhtbTIseG1tMyAgICAgICAgICAgICA7IHhtbTI9ZGF0YTI9KDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3KQogCi0JbW92ZHFhICAgIHhtbTYseG1tMQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKLQlwdW5wY2tsd2QgeG1tMSx4bW00CTsgeG1tMT0oMDAgMTAgMDEgMTEgMDIgMTIgMDMgMTMpCi0JcHVucGNraHdkIHhtbTYseG1tNAk7IHhtbTY9KDA0IDE0IDA1IDE1IDA2IDE2IDA3IDE3KQotCW1vdmRxYSAgICB4bW03LHhtbTIJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCi0JcHVucGNrbHdkIHhtbTIseG1tNQk7IHhtbTI9KDIwIDMwIDIxIDMxIDIyIDMyIDIzIDMzKQotCXB1bnBja2h3ZCB4bW03LHhtbTUJOyB4bW03PSgyNCAzNCAyNSAzNSAyNiAzNiAyNyAzNykKKyAgICAgICAgbW92ZHFhICAgIHhtbTYseG1tMSAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgICAgIHB1bnBja2x3ZCB4bW0xLHhtbTQgICAgIDsgeG1tMT0oMDAgMTAgMDEgMTEgMDIgMTIgMDMgMTMpCisgICAgICAgIHB1bnBja2h3ZCB4bW02LHhtbTQgICAgIDsgeG1tNj0oMDQgMTQgMDUgMTUgMDYgMTYgMDcgMTcpCisgICAgICAgIG1vdmRxYSAgICB4bW03LHhtbTIgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgICAgICBwdW5wY2tsd2QgeG1tMix4bW01ICAgICA7IHhtbTI9KDIwIDMwIDIxIDMxIDIyIDMyIDIzIDMzKQorICAgICAgICBwdW5wY2tod2QgeG1tNyx4bW01ICAgICA7IHhtbTc9KDI0IDM0IDI1IDM1IDI2IDM2IDI3IDM3KQogCi0JbW92ZHFhICAgIHhtbTAseG1tMQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKLQlwdW5wY2tsZHEgeG1tMSx4bW0yCTsgeG1tMT1bY29sMCBjb2wxXT0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEpCi0JcHVucGNraGRxIHhtbTAseG1tMgk7IHhtbTA9W2NvbDIgY29sM109KDAyIDEyIDIyIDMyIDAzIDEzIDIzIDMzKQotCW1vdmRxYSAgICB4bW0zLHhtbTYJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCi0JcHVucGNrbGRxIHhtbTYseG1tNwk7IHhtbTY9W2NvbDQgY29sNV09KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1KQotCXB1bnBja2hkcSB4bW0zLHhtbTcJOyB4bW0zPVtjb2w2IGNvbDddPSgwNiAxNiAyNiAzNiAwNyAxNyAyNyAzNykKKyAgICAgICAgbW92ZHFhICAgIHhtbTAseG1tMSAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgICAgIHB1bnBja2xkcSB4bW0xLHhtbTIgICAgIDsgeG1tMT1bY29sMCBjb2wxXT0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEpCisgICAgICAgIHB1bnBja2hkcSB4bW0wLHhtbTIgICAgIDsgeG1tMD1bY29sMiBjb2wzXT0oMDIgMTIgMjIgMzIgMDMgMTMgMjMgMzMpCisgICAgICAgIG1vdmRxYSAgICB4bW0zLHhtbTYgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgICAgICBwdW5wY2tsZHEgeG1tNix4bW03ICAgICA7IHhtbTY9W2NvbDQgY29sNV09KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1KQorICAgICAgICBwdW5wY2toZHEgeG1tMyx4bW03ICAgICA7IHhtbTM9W2NvbDYgY29sN109KDA2IDE2IDI2IDM2IDA3IDE3IDI3IDM3KQogLmNvbHVtbl9lbmQ6CiAKLQk7IC0tIFByZWZldGNoIHRoZSBuZXh0IGNvZWZmaWNpZW50IGJsb2NrCisgICAgICAgIDsgLS0gUHJlZmV0Y2ggdGhlIG5leHQgY29lZmZpY2llbnQgYmxvY2sKIAotCXByZWZldGNobnRhIFtlc2kgKyBEQ1RTSVpFMipTSVpFT0ZfSkNPRUYgKyAwKjMyXQotCXByZWZldGNobnRhIFtlc2kgKyBEQ1RTSVpFMipTSVpFT0ZfSkNPRUYgKyAxKjMyXQotCXByZWZldGNobnRhIFtlc2kgKyBEQ1RTSVpFMipTSVpFT0ZfSkNPRUYgKyAyKjMyXQotCXByZWZldGNobnRhIFtlc2kgKyBEQ1RTSVpFMipTSVpFT0ZfSkNPRUYgKyAzKjMyXQorICAgICAgICBwcmVmZXRjaG50YSBbZXNpICsgRENUU0laRTIqU0laRU9GX0pDT0VGICsgMCozMl0KKyAgICAgICAgcHJlZmV0Y2hudGEgW2VzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDEqMzJdCisgICAgICAgIHByZWZldGNobnRhIFtlc2kgKyBEQ1RTSVpFMipTSVpFT0ZfSkNPRUYgKyAyKjMyXQorICAgICAgICBwcmVmZXRjaG50YSBbZXNpICsgRENUU0laRTIqU0laRU9GX0pDT0VGICsgMyozMl0KIAotCTsgLS0tLSBQYXNzIDI6IHByb2Nlc3Mgcm93cywgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuCisgICAgICAgIDsgLS0tLSBQYXNzIDI6IHByb2Nlc3Mgcm93cywgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuCiAKLQltb3YJZWF4LCBbb3JpZ2luYWxfZWJwXQotCW1vdgllZGksIEpTQU1QQVJSQVkgW291dHB1dF9idWYoZWF4KV0JOyAoSlNBTVBST1cgKikKLQltb3YJZWF4LCBKRElNRU5TSU9OIFtvdXRwdXRfY29sKGVheCldCisgICAgICAgIG1vdiAgICAgZWF4LCBbb3JpZ2luYWxfZWJwXQorICAgICAgICBtb3YgICAgIGVkaSwgSlNBTVBBUlJBWSBbb3V0cHV0X2J1ZihlYXgpXSAgICAgICA7IChKU0FNUFJPVyAqKQorICAgICAgICBtb3YgICAgIGVheCwgSkRJTUVOU0lPTiBbb3V0cHV0X2NvbChlYXgpXQogCi0JOyAtLSBFdmVuIHBhcnQKKyAgICAgICAgOyAtLSBFdmVuIHBhcnQKIAotCXB4b3IgICAgICB4bW00LHhtbTQKLQlwdW5wY2tsd2QgeG1tNCx4bW0xCQk7IHhtbTQ9dG1wMAotCXBzcmFkICAgICB4bW00LCgxNi1DT05TVF9CSVRTLTEpIDsgcHNyYWQgeG1tNCwxNiAmIHBzbGxkIHhtbTQsQ09OU1RfQklUUysxCisgICAgICAgIHB4b3IgICAgICB4bW00LHhtbTQKKyAgICAgICAgcHVucGNrbHdkIHhtbTQseG1tMSAgICAgICAgICAgICA7IHhtbTQ9dG1wMAorICAgICAgICBwc3JhZCAgICAgeG1tNCwoMTYtQ09OU1RfQklUUy0xKSA7IHBzcmFkIHhtbTQsMTYgJiBwc2xsZCB4bW00LENPTlNUX0JJVFMrMQogCi0JOyAtLSBPZGQgcGFydAorICAgICAgICA7IC0tIE9kZCBwYXJ0CiAKLQlwdW5wY2tod2QgeG1tMSx4bW0wCi0JcHVucGNraHdkIHhtbTYseG1tMwotCW1vdmRxYSAgICB4bW01LHhtbTEKLQltb3ZkcWEgICAgeG1tMix4bW02Ci0JcG1hZGR3ZCAgIHhtbTEsW0dPVE9GRihlYngsUFdfRjI1Nl9GMDg5KV0JOyB4bW0xPSh0bXAyKQotCXBtYWRkd2QgICB4bW02LFtHT1RPRkYoZWJ4LFBXX01GMDYwX01GMDUwKV0JOyB4bW02PSh0bXAyKQotCXBtYWRkd2QgICB4bW01LFtHT1RPRkYoZWJ4LFBXX0YxMDZfTUYyMTcpXQk7IHhtbTU9KHRtcDApCi0JcG1hZGR3ZCAgIHhtbTIsW0dPVE9GRihlYngsUFdfRjE0NV9NRjAyMSldCTsgeG1tMj0odG1wMCkKKyAgICAgICAgcHVucGNraHdkIHhtbTEseG1tMAorICAgICAgICBwdW5wY2tod2QgeG1tNix4bW0zCisgICAgICAgIG1vdmRxYSAgICB4bW01LHhtbTEKKyAgICAgICAgbW92ZHFhICAgIHhtbTIseG1tNgorICAgICAgICBwbWFkZHdkICAgeG1tMSxbR09UT0ZGKGVieCxQV19GMjU2X0YwODkpXSAgICAgICA7IHhtbTE9KHRtcDIpCisgICAgICAgIHBtYWRkd2QgICB4bW02LFtHT1RPRkYoZWJ4LFBXX01GMDYwX01GMDUwKV0gICAgIDsgeG1tNj0odG1wMikKKyAgICAgICAgcG1hZGR3ZCAgIHhtbTUsW0dPVE9GRihlYngsUFdfRjEwNl9NRjIxNyldICAgICAgOyB4bW01PSh0bXAwKQorICAgICAgICBwbWFkZHdkICAgeG1tMixbR09UT0ZGKGVieCxQV19GMTQ1X01GMDIxKV0gICAgICA7IHhtbTI9KHRtcDApCiAKLQlwYWRkZCAgICAgeG1tNix4bW0xCQk7IHhtbTY9dG1wMgotCXBhZGRkICAgICB4bW0yLHhtbTUJCTsgeG1tMj10bXAwCisgICAgICAgIHBhZGRkICAgICB4bW02LHhtbTEgICAgICAgICAgICAgOyB4bW02PXRtcDIKKyAgICAgICAgcGFkZGQgICAgIHhtbTIseG1tNSAgICAgICAgICAgICA7IHhtbTI9dG1wMAogCi0JOyAtLSBFdmVuIHBhcnQKKyAgICAgICAgOyAtLSBFdmVuIHBhcnQKIAotCXB1bnBja2x3ZCB4bW0wLHhtbTMKLQlwbWFkZHdkICAgeG1tMCxbR09UT0ZGKGVieCxQV19GMTg0X01GMDc2KV0JOyB4bW0wPXRtcDIKKyAgICAgICAgcHVucGNrbHdkIHhtbTAseG1tMworICAgICAgICBwbWFkZHdkICAgeG1tMCxbR09UT0ZGKGVieCxQV19GMTg0X01GMDc2KV0gICAgICA7IHhtbTA9dG1wMgogCi0JbW92ZHFhICAgIHhtbTcseG1tNAotCXBhZGRkICAgICB4bW00LHhtbTAJCTsgeG1tND10bXAxMAotCXBzdWJkICAgICB4bW03LHhtbTAJCTsgeG1tNz10bXAxMgorICAgICAgICBtb3ZkcWEgICAgeG1tNyx4bW00CisgICAgICAgIHBhZGRkICAgICB4bW00LHhtbTAgICAgICAgICAgICAgOyB4bW00PXRtcDEwCisgICAgICAgIHBzdWJkICAgICB4bW03LHhtbTAgICAgICAgICAgICAgOyB4bW03PXRtcDEyCiAKLQk7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQorICAgICAgICA7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQogCi0JbW92ZHFhCXhtbTEsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMl80KV0JOyB4bW0xPVtQRF9ERVNDQUxFX1AyXzRdCisgICAgICAgIG1vdmRxYSAgeG1tMSxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyXzQpXSAgICAgIDsgeG1tMT1bUERfREVTQ0FMRV9QMl80XQogCi0JbW92ZHFhCXhtbTUseG1tNAotCW1vdmRxYQl4bW0zLHhtbTcKLQlwYWRkZAl4bW00LHhtbTYJCTsgeG1tND1kYXRhMD0oMDAgMTAgMjAgMzApCi0JcGFkZGQJeG1tNyx4bW0yCQk7IHhtbTc9ZGF0YTE9KDAxIDExIDIxIDMxKQotCXBzdWJkCXhtbTUseG1tNgkJOyB4bW01PWRhdGEzPSgwMyAxMyAyMyAzMykKLQlwc3ViZAl4bW0zLHhtbTIJCTsgeG1tMz1kYXRhMj0oMDIgMTIgMjIgMzIpCisgICAgICAgIG1vdmRxYSAgeG1tNSx4bW00CisgICAgICAgIG1vdmRxYSAgeG1tMyx4bW03CisgICAgICAgIHBhZGRkICAgeG1tNCx4bW02ICAgICAgICAgICAgICAgOyB4bW00PWRhdGEwPSgwMCAxMCAyMCAzMCkKKyAgICAgICAgcGFkZGQgICB4bW03LHhtbTIgICAgICAgICAgICAgICA7IHhtbTc9ZGF0YTE9KDAxIDExIDIxIDMxKQorICAgICAgICBwc3ViZCAgIHhtbTUseG1tNiAgICAgICAgICAgICAgIDsgeG1tNT1kYXRhMz0oMDMgMTMgMjMgMzMpCisgICAgICAgIHBzdWJkICAgeG1tMyx4bW0yICAgICAgICAgICAgICAgOyB4bW0zPWRhdGEyPSgwMiAxMiAyMiAzMikKIAotCXBhZGRkCXhtbTQseG1tMQotCXBhZGRkCXhtbTcseG1tMQotCXBzcmFkCXhtbTQsREVTQ0FMRV9QMl80Ci0JcHNyYWQJeG1tNyxERVNDQUxFX1AyXzQKLQlwYWRkZAl4bW01LHhtbTEKLQlwYWRkZAl4bW0zLHhtbTEKLQlwc3JhZAl4bW01LERFU0NBTEVfUDJfNAotCXBzcmFkCXhtbTMsREVTQ0FMRV9QMl80CisgICAgICAgIHBhZGRkICAgeG1tNCx4bW0xCisgICAgICAgIHBhZGRkICAgeG1tNyx4bW0xCisgICAgICAgIHBzcmFkICAgeG1tNCxERVNDQUxFX1AyXzQKKyAgICAgICAgcHNyYWQgICB4bW03LERFU0NBTEVfUDJfNAorICAgICAgICBwYWRkZCAgIHhtbTUseG1tMQorICAgICAgICBwYWRkZCAgIHhtbTMseG1tMQorICAgICAgICBwc3JhZCAgIHhtbTUsREVTQ0FMRV9QMl80CisgICAgICAgIHBzcmFkICAgeG1tMyxERVNDQUxFX1AyXzQKIAotCXBhY2tzc2R3ICB4bW00LHhtbTMJCTsgeG1tND0oMDAgMTAgMjAgMzAgMDIgMTIgMjIgMzIpCi0JcGFja3NzZHcgIHhtbTcseG1tNQkJOyB4bW03PSgwMSAxMSAyMSAzMSAwMyAxMyAyMyAzMykKKyAgICAgICAgcGFja3NzZHcgIHhtbTQseG1tMyAgICAgICAgICAgICA7IHhtbTQ9KDAwIDEwIDIwIDMwIDAyIDEyIDIyIDMyKQorICAgICAgICBwYWNrc3NkdyAgeG1tNyx4bW01ICAgICAgICAgICAgIDsgeG1tNz0oMDEgMTEgMjEgMzEgMDMgMTMgMjMgMzMpCiAKLQltb3ZkcWEgICAgeG1tMCx4bW00CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKLQlwdW5wY2tsd2QgeG1tNCx4bW03CQk7IHhtbTQ9KDAwIDAxIDEwIDExIDIwIDIxIDMwIDMxKQotCXB1bnBja2h3ZCB4bW0wLHhtbTcJCTsgeG1tMD0oMDIgMDMgMTIgMTMgMjIgMjMgMzIgMzMpCisgICAgICAgIG1vdmRxYSAgICB4bW0wLHhtbTQgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgICAgIHB1bnBja2x3ZCB4bW00LHhtbTcgICAgICAgICAgICAgOyB4bW00PSgwMCAwMSAxMCAxMSAyMCAyMSAzMCAzMSkKKyAgICAgICAgcHVucGNraHdkIHhtbTAseG1tNyAgICAgICAgICAgICA7IHhtbTA9KDAyIDAzIDEyIDEzIDIyIDIzIDMyIDMzKQogCi0JbW92ZHFhICAgIHhtbTYseG1tNAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCi0JcHVucGNrbGRxIHhtbTQseG1tMAkJOyB4bW00PSgwMCAwMSAwMiAwMyAxMCAxMSAxMiAxMykKLQlwdW5wY2toZHEgeG1tNix4bW0wCQk7IHhtbTY9KDIwIDIxIDIyIDIzIDMwIDMxIDMyIDMzKQorICAgICAgICBtb3ZkcWEgICAgeG1tNix4bW00ICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgICAgICBwdW5wY2tsZHEgeG1tNCx4bW0wICAgICAgICAgICAgIDsgeG1tND0oMDAgMDEgMDIgMDMgMTAgMTEgMTIgMTMpCisgICAgICAgIHB1bnBja2hkcSB4bW02LHhtbTAgICAgICAgICAgICAgOyB4bW02PSgyMCAyMSAyMiAyMyAzMCAzMSAzMiAzMykKIAotCXBhY2tzc3diICB4bW00LHhtbTYJCTsgeG1tND0oMDAgMDEgMDIgMDMgMTAgMTEgMTIgMTMgMjAgLi4pCi0JcGFkZGIgICAgIHhtbTQsW0dPVE9GRihlYngsUEJfQ0VOVEVSSlNBTVApXQorICAgICAgICBwYWNrc3N3YiAgeG1tNCx4bW02ICAgICAgICAgICAgIDsgeG1tND0oMDAgMDEgMDIgMDMgMTAgMTEgMTIgMTMgMjAgLi4pCisgICAgICAgIHBhZGRiICAgICB4bW00LFtHT1RPRkYoZWJ4LFBCX0NFTlRFUkpTQU1QKV0KIAotCXBzaHVmZCAgICB4bW0yLHhtbTQsMHgzOQk7IHhtbTI9KDEwIDExIDEyIDEzIDIwIDIxIDIyIDIzIDMwIC4uKQotCXBzaHVmZCAgICB4bW0xLHhtbTQsMHg0RQk7IHhtbTE9KDIwIDIxIDIyIDIzIDMwIDMxIDMyIDMzIDAwIC4uKQotCXBzaHVmZCAgICB4bW0zLHhtbTQsMHg5Mwk7IHhtbTM9KDMwIDMxIDMyIDMzIDAwIDAxIDAyIDAzIDEwIC4uKQorICAgICAgICBwc2h1ZmQgICAgeG1tMix4bW00LDB4MzkgICAgICAgIDsgeG1tMj0oMTAgMTEgMTIgMTMgMjAgMjEgMjIgMjMgMzAgLi4pCisgICAgICAgIHBzaHVmZCAgICB4bW0xLHhtbTQsMHg0RSAgICAgICAgOyB4bW0xPSgyMCAyMSAyMiAyMyAzMCAzMSAzMiAzMyAwMCAuLikKKyAgICAgICAgcHNodWZkICAgIHhtbTMseG1tNCwweDkzICAgICAgICA7IHhtbTM9KDMwIDMxIDMyIDMzIDAwIDAxIDAyIDAzIDEwIC4uKQogCi0JbW92CWVkeCwgSlNBTVBST1cgW2VkaSswKlNJWkVPRl9KU0FNUFJPV10KLQltb3YJZXNpLCBKU0FNUFJPVyBbZWRpKzEqU0laRU9GX0pTQU1QUk9XXQotCW1vdmQJWE1NX0RXT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXSwgeG1tNAotCW1vdmQJWE1NX0RXT1JEIFtlc2krZWF4KlNJWkVPRl9KU0FNUExFXSwgeG1tMgotCW1vdgllZHgsIEpTQU1QUk9XIFtlZGkrMipTSVpFT0ZfSlNBTVBST1ddCi0JbW92CWVzaSwgSlNBTVBST1cgW2VkaSszKlNJWkVPRl9KU0FNUFJPV10KLQltb3ZkCVhNTV9EV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTEKLQltb3ZkCVhNTV9EV09SRCBbZXNpK2VheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTMKKyAgICAgICAgbW92ICAgICBlZHgsIEpTQU1QUk9XIFtlZGkrMCpTSVpFT0ZfSlNBTVBST1ddCisgICAgICAgIG1vdiAgICAgZXNpLCBKU0FNUFJPVyBbZWRpKzEqU0laRU9GX0pTQU1QUk9XXQorICAgICAgICBtb3ZkICAgIFhNTV9EV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTQKKyAgICAgICAgbW92ZCAgICBYTU1fRFdPUkQgW2VzaStlYXgqU0laRU9GX0pTQU1QTEVdLCB4bW0yCisgICAgICAgIG1vdiAgICAgZWR4LCBKU0FNUFJPVyBbZWRpKzIqU0laRU9GX0pTQU1QUk9XXQorICAgICAgICBtb3YgICAgIGVzaSwgSlNBTVBST1cgW2VkaSszKlNJWkVPRl9KU0FNUFJPV10KKyAgICAgICAgbW92ZCAgICBYTU1fRFdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdLCB4bW0xCisgICAgICAgIG1vdmQgICAgWE1NX0RXT1JEIFtlc2krZWF4KlNJWkVPRl9KU0FNUExFXSwgeG1tMwogCi0JcG9wCWVkaQotCXBvcAllc2kKLTsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLTsJcG9wCWVjeAkJOyB1bnVzZWQKLQlwb3BwaWMJZWJ4Ci0JbW92CWVzcCxlYnAJCTsgZXNwIDwtIGFsaWduZWQgZWJwCi0JcG9wCWVzcAkJOyBlc3AgPC0gb3JpZ2luYWwgZWJwCi0JcG9wCWVicAotCXJldAorICAgICAgICBwb3AgICAgIGVkaQorICAgICAgICBwb3AgICAgIGVzaQorOyAgICAgICBwb3AgICAgIGVkeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgICAgICBwb3AgICAgIGVjeCAgICAgICAgICAgICA7IHVudXNlZAorICAgICAgICBwb3BwaWMgIGVieAorICAgICAgICBtb3YgICAgIGVzcCxlYnAgICAgICAgICA7IGVzcCA8LSBhbGlnbmVkIGVicAorICAgICAgICBwb3AgICAgIGVzcCAgICAgICAgICAgICA7IGVzcCA8LSBvcmlnaW5hbCBlYnAKKyAgICAgICAgcG9wICAgICBlYnAKKyAgICAgICAgcmV0CiAKIAogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDE4LDE3NyArNDE4LDE3NyBAQAogOyAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKIDsKIAotJWRlZmluZSBkY3RfdGFibGUoYikJKGIpKzgJCQk7IHZvaWQgKiBkY3RfdGFibGUKLSVkZWZpbmUgY29lZl9ibG9jayhiKQkoYikrMTIJCTsgSkNPRUZQVFIgY29lZl9ibG9jawotJWRlZmluZSBvdXRwdXRfYnVmKGIpCShiKSsxNgkJOyBKU0FNUEFSUkFZIG91dHB1dF9idWYKLSVkZWZpbmUgb3V0cHV0X2NvbChiKQkoYikrMjAJCTsgSkRJTUVOU0lPTiBvdXRwdXRfY29sCislZGVmaW5lIGRjdF90YWJsZShiKSAgICAoYikrOCAgICAgICAgICAgOyB2b2lkICogZGN0X3RhYmxlCislZGVmaW5lIGNvZWZfYmxvY2soYikgICAoYikrMTIgICAgICAgICAgOyBKQ09FRlBUUiBjb2VmX2Jsb2NrCislZGVmaW5lIG91dHB1dF9idWYoYikgICAoYikrMTYgICAgICAgICAgOyBKU0FNUEFSUkFZIG91dHB1dF9idWYKKyVkZWZpbmUgb3V0cHV0X2NvbChiKSAgIChiKSsyMCAgICAgICAgICA7IEpESU1FTlNJT04gb3V0cHV0X2NvbAogCi0JYWxpZ24JMTYKLQlnbG9iYWwJRVhUTihqc2ltZF9pZGN0XzJ4Ml9zc2UyKQorICAgICAgICBhbGlnbiAgIDE2CisgICAgICAgIGdsb2JhbCAgRVhUTihqc2ltZF9pZGN0XzJ4Ml9zc2UyKQogCiBFWFROKGpzaW1kX2lkY3RfMngyX3NzZTIpOgotCXB1c2gJZWJwCi0JbW92CWVicCxlc3AKLQlwdXNoCWVieAotOwlwdXNoCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLTsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi0JcHVzaAllc2kKLQlwdXNoCWVkaQorICAgICAgICBwdXNoICAgIGVicAorICAgICAgICBtb3YgICAgIGVicCxlc3AKKyAgICAgICAgcHVzaCAgICBlYngKKzsgICAgICAgcHVzaCAgICBlY3ggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICAgICAgcHVzaCAgICBlZHggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICAgICAgcHVzaCAgICBlc2kKKyAgICAgICAgcHVzaCAgICBlZGkKIAotCWdldF9HT1QJZWJ4CQk7IGdldCBHT1QgYWRkcmVzcworICAgICAgICBnZXRfR09UIGVieCAgICAgICAgICAgICA7IGdldCBHT1QgYWRkcmVzcwogCi0JOyAtLS0tIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQuCisgICAgICAgIDsgLS0tLSBQYXNzIDE6IHByb2Nlc3MgY29sdW1ucyBmcm9tIGlucHV0LgogCi0JbW92CWVkeCwgUE9JTlRFUiBbZGN0X3RhYmxlKGVicCldCTsgcXVhbnRwdHIKLQltb3YJZXNpLCBKQ09FRlBUUiBbY29lZl9ibG9jayhlYnApXQkJOyBpbnB0cgorICAgICAgICBtb3YgICAgIGVkeCwgUE9JTlRFUiBbZGN0X3RhYmxlKGVicCldICAgICAgICAgICA7IHF1YW50cHRyCisgICAgICAgIG1vdiAgICAgZXNpLCBKQ09FRlBUUiBbY29lZl9ibG9jayhlYnApXSAgICAgICAgIDsgaW5wdHIKIAotCTsgfCBpbnB1dDogICAgICAgICAgICAgICAgICB8IHJlc3VsdDogICAgICAgIHwKLQk7IHwgMDAgMDEgKiogMDMgKiogMDUgKiogMDcgfCAgICAgICAgICAgICAgICB8Ci0JOyB8IDEwIDExICoqIDEzICoqIDE1ICoqIDE3IHwgICAgICAgICAgICAgICAgfAotCTsgfCAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiB8ICAgICAgICAgICAgICAgIHwKLQk7IHwgMzAgMzEgKiogMzMgKiogMzUgKiogMzcgfCBBMCBBMSBBMyBBNSBBNyB8Ci0JOyB8ICoqICoqICoqICoqICoqICoqICoqICoqIHwgQjAgQjEgQjMgQjUgQjcgfAotCTsgfCA1MCA1MSAqKiA1MyAqKiA1NSAqKiA1NyB8ICAgICAgICAgICAgICAgIHwKLQk7IHwgKiogKiogKiogKiogKiogKiogKiogKiogfCAgICAgICAgICAgICAgICB8Ci0JOyB8IDcwIDcxICoqIDczICoqIDc1ICoqIDc3IHwgICAgICAgICAgICAgICAgfAorICAgICAgICA7IHwgaW5wdXQ6ICAgICAgICAgICAgICAgICAgfCByZXN1bHQ6ICAgICAgICB8CisgICAgICAgIDsgfCAwMCAwMSAqKiAwMyAqKiAwNSAqKiAwNyB8ICAgICAgICAgICAgICAgIHwKKyAgICAgICAgOyB8IDEwIDExICoqIDEzICoqIDE1ICoqIDE3IHwgICAgICAgICAgICAgICAgfAorICAgICAgICA7IHwgKiogKiogKiogKiogKiogKiogKiogKiogfCAgICAgICAgICAgICAgICB8CisgICAgICAgIDsgfCAzMCAzMSAqKiAzMyAqKiAzNSAqKiAzNyB8IEEwIEExIEEzIEE1IEE3IHwKKyAgICAgICAgOyB8ICoqICoqICoqICoqICoqICoqICoqICoqIHwgQjAgQjEgQjMgQjUgQjcgfAorICAgICAgICA7IHwgNTAgNTEgKiogNTMgKiogNTUgKiogNTcgfCAgICAgICAgICAgICAgICB8CisgICAgICAgIDsgfCAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiB8ICAgICAgICAgICAgICAgIHwKKyAgICAgICAgOyB8IDcwIDcxICoqIDczICoqIDc1ICoqIDc3IHwgICAgICAgICAgICAgICAgfAogCi0JOyAtLSBPZGQgcGFydAorICAgICAgICA7IC0tIE9kZCBwYXJ0CiAKLQltb3ZkcWEJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQotCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAsZXNpLFNJWkVPRl9KQ09FRildCi0JcG11bGx3CXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCi0JcG11bGx3CXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCi0JbW92ZHFhCXhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQltb3ZkcWEJeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNywwLGVzaSxTSVpFT0ZfSkNPRUYpXQotCXBtdWxsdwl4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSyg1LDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQotCXBtdWxsdwl4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg3LDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorICAgICAgICBtb3ZkcWEgIHhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgbW92ZHFhICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIHBtdWxsdyAgeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKyAgICAgICAgcG11bGx3ICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorICAgICAgICBtb3ZkcWEgIHhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgbW92ZHFhICB4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg3LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIHBtdWxsdyAgeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soNSwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKyAgICAgICAgcG11bGx3ICB4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg3LDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQogCi0JOyB4bW0wPSgxMCAxMSAqKiAxMyAqKiAxNSAqKiAxNyksIHhtbTE9KDMwIDMxICoqIDMzICoqIDM1ICoqIDM3KQotCTsgeG1tMj0oNTAgNTEgKiogNTMgKiogNTUgKiogNTcpLCB4bW0zPSg3MCA3MSAqKiA3MyAqKiA3NSAqKiA3NykKKyAgICAgICAgOyB4bW0wPSgxMCAxMSAqKiAxMyAqKiAxNSAqKiAxNyksIHhtbTE9KDMwIDMxICoqIDMzICoqIDM1ICoqIDM3KQorICAgICAgICA7IHhtbTI9KDUwIDUxICoqIDUzICoqIDU1ICoqIDU3KSwgeG1tMz0oNzAgNzEgKiogNzMgKiogNzUgKiogNzcpCiAKLQlwY21wZXFkICAgeG1tNyx4bW03Ci0JcHNsbGQgICAgIHhtbTcsV09SRF9CSVQJCTsgeG1tNz17MHgwMDAwIDB4RkZGRiAweDAwMDAgMHhGRkZGIC4ufQorICAgICAgICBwY21wZXFkICAgeG1tNyx4bW03CisgICAgICAgIHBzbGxkICAgICB4bW03LFdPUkRfQklUICAgICAgICAgOyB4bW03PXsweDAwMDAgMHhGRkZGIDB4MDAwMCAweEZGRkYgLi59CiAKLQltb3ZkcWEgICAgeG1tNCx4bW0wCQk7IHhtbTQ9KDEwIDExICoqIDEzICoqIDE1ICoqIDE3KQotCW1vdmRxYSAgICB4bW01LHhtbTIJCTsgeG1tNT0oNTAgNTEgKiogNTMgKiogNTUgKiogNTcpCi0JcHVucGNrbHdkIHhtbTQseG1tMQkJOyB4bW00PSgxMCAzMCAxMSAzMSAqKiAqKiAxMyAzMykKLQlwdW5wY2tsd2QgeG1tNSx4bW0zCQk7IHhtbTU9KDUwIDcwIDUxIDcxICoqICoqIDUzIDczKQotCXBtYWRkd2QgICB4bW00LFtHT1RPRkYoZWJ4LFBXX0YzNjJfTUYxMjcpXQotCXBtYWRkd2QgICB4bW01LFtHT1RPRkYoZWJ4LFBXX0YwODVfTUYwNzIpXQorICAgICAgICBtb3ZkcWEgICAgeG1tNCx4bW0wICAgICAgICAgICAgIDsgeG1tND0oMTAgMTEgKiogMTMgKiogMTUgKiogMTcpCisgICAgICAgIG1vdmRxYSAgICB4bW01LHhtbTIgICAgICAgICAgICAgOyB4bW01PSg1MCA1MSAqKiA1MyAqKiA1NSAqKiA1NykKKyAgICAgICAgcHVucGNrbHdkIHhtbTQseG1tMSAgICAgICAgICAgICA7IHhtbTQ9KDEwIDMwIDExIDMxICoqICoqIDEzIDMzKQorICAgICAgICBwdW5wY2tsd2QgeG1tNSx4bW0zICAgICAgICAgICAgIDsgeG1tNT0oNTAgNzAgNTEgNzEgKiogKiogNTMgNzMpCisgICAgICAgIHBtYWRkd2QgICB4bW00LFtHT1RPRkYoZWJ4LFBXX0YzNjJfTUYxMjcpXQorICAgICAgICBwbWFkZHdkICAgeG1tNSxbR09UT0ZGKGVieCxQV19GMDg1X01GMDcyKV0KIAotCXBzcmxkCXhtbTAsV09SRF9CSVQJCTsgeG1tMD0oMTEgLS0gMTMgLS0gMTUgLS0gMTcgLS0pCi0JcGFuZAl4bW0xLHhtbTcJCTsgeG1tMT0oLS0gMzEgLS0gMzMgLS0gMzUgLS0gMzcpCi0JcHNybGQJeG1tMixXT1JEX0JJVAkJOyB4bW0yPSg1MSAtLSA1MyAtLSA1NSAtLSA1NyAtLSkKLQlwYW5kCXhtbTMseG1tNwkJOyB4bW0zPSgtLSA3MSAtLSA3MyAtLSA3NSAtLSA3NykKLQlwb3IJeG1tMCx4bW0xCQk7IHhtbTA9KDExIDMxIDEzIDMzIDE1IDM1IDE3IDM3KQotCXBvcgl4bW0yLHhtbTMJCTsgeG1tMj0oNTEgNzEgNTMgNzMgNTUgNzUgNTcgNzcpCi0JcG1hZGR3ZAl4bW0wLFtHT1RPRkYoZWJ4LFBXX0YzNjJfTUYxMjcpXQotCXBtYWRkd2QJeG1tMixbR09UT0ZGKGVieCxQV19GMDg1X01GMDcyKV0KKyAgICAgICAgcHNybGQgICB4bW0wLFdPUkRfQklUICAgICAgICAgICA7IHhtbTA9KDExIC0tIDEzIC0tIDE1IC0tIDE3IC0tKQorICAgICAgICBwYW5kICAgIHhtbTEseG1tNyAgICAgICAgICAgICAgIDsgeG1tMT0oLS0gMzEgLS0gMzMgLS0gMzUgLS0gMzcpCisgICAgICAgIHBzcmxkICAgeG1tMixXT1JEX0JJVCAgICAgICAgICAgOyB4bW0yPSg1MSAtLSA1MyAtLSA1NSAtLSA1NyAtLSkKKyAgICAgICAgcGFuZCAgICB4bW0zLHhtbTcgICAgICAgICAgICAgICA7IHhtbTM9KC0tIDcxIC0tIDczIC0tIDc1IC0tIDc3KQorICAgICAgICBwb3IgICAgIHhtbTAseG1tMSAgICAgICAgICAgICAgIDsgeG1tMD0oMTEgMzEgMTMgMzMgMTUgMzUgMTcgMzcpCisgICAgICAgIHBvciAgICAgeG1tMix4bW0zICAgICAgICAgICAgICAgOyB4bW0yPSg1MSA3MSA1MyA3MyA1NSA3NSA1NyA3NykKKyAgICAgICAgcG1hZGR3ZCB4bW0wLFtHT1RPRkYoZWJ4LFBXX0YzNjJfTUYxMjcpXQorICAgICAgICBwbWFkZHdkIHhtbTIsW0dPVE9GRihlYngsUFdfRjA4NV9NRjA3MildCiAKLQlwYWRkZAl4bW00LHhtbTUJCTsgeG1tND10bXAwW2NvbDAgY29sMSAqKioqIGNvbDNdCi0JcGFkZGQJeG1tMCx4bW0yCQk7IHhtbTA9dG1wMFtjb2wxIGNvbDMgY29sNSBjb2w3XQorICAgICAgICBwYWRkZCAgIHhtbTQseG1tNSAgICAgICAgICAgICAgIDsgeG1tND10bXAwW2NvbDAgY29sMSAqKioqIGNvbDNdCisgICAgICAgIHBhZGRkICAgeG1tMCx4bW0yICAgICAgICAgICAgICAgOyB4bW0wPXRtcDBbY29sMSBjb2wzIGNvbDUgY29sN10KIAotCTsgLS0gRXZlbiBwYXJ0CisgICAgICAgIDsgLS0gRXZlbiBwYXJ0CiAKLQltb3ZkcWEJeG1tNiwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQotCXBtdWxsdwl4bW02LCBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorICAgICAgICBtb3ZkcWEgIHhtbTYsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgcG11bGx3ICB4bW02LCBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQogCi0JOyB4bW02PSgwMCAwMSAqKiAwMyAqKiAwNSAqKiAwNykKKyAgICAgICAgOyB4bW02PSgwMCAwMSAqKiAwMyAqKiAwNSAqKiAwNykKIAotCW1vdmRxYQl4bW0xLHhtbTYJCTsgeG1tMT0oMDAgMDEgKiogMDMgKiogMDUgKiogMDcpCi0JcHNsbGQJeG1tNixXT1JEX0JJVAkJOyB4bW02PSgtLSAwMCAtLSAqKiAtLSAqKiAtLSAqKikKLQlwYW5kCXhtbTEseG1tNwkJOyB4bW0xPSgtLSAwMSAtLSAwMyAtLSAwNSAtLSAwNykKLQlwc3JhZAl4bW02LChXT1JEX0JJVC1DT05TVF9CSVRTLTIpIDsgeG1tNj10bXAxMFtjb2wwICoqKiogKioqKiAqKioqXQotCXBzcmFkCXhtbTEsKFdPUkRfQklULUNPTlNUX0JJVFMtMikgOyB4bW0xPXRtcDEwW2NvbDEgY29sMyBjb2w1IGNvbDddCisgICAgICAgIG1vdmRxYSAgeG1tMSx4bW02ICAgICAgICAgICAgICAgOyB4bW0xPSgwMCAwMSAqKiAwMyAqKiAwNSAqKiAwNykKKyAgICAgICAgcHNsbGQgICB4bW02LFdPUkRfQklUICAgICAgICAgICA7IHhtbTY9KC0tIDAwIC0tICoqIC0tICoqIC0tICoqKQorICAgICAgICBwYW5kICAgIHhtbTEseG1tNyAgICAgICAgICAgICAgIDsgeG1tMT0oLS0gMDEgLS0gMDMgLS0gMDUgLS0gMDcpCisgICAgICAgIHBzcmFkICAgeG1tNiwoV09SRF9CSVQtQ09OU1RfQklUUy0yKSA7IHhtbTY9dG1wMTBbY29sMCAqKioqICoqKiogKioqKl0KKyAgICAgICAgcHNyYWQgICB4bW0xLChXT1JEX0JJVC1DT05TVF9CSVRTLTIpIDsgeG1tMT10bXAxMFtjb2wxIGNvbDMgY29sNSBjb2w3XQogCi0JOyAtLSBGaW5hbCBvdXRwdXQgc3RhZ2UKKyAgICAgICAgOyAtLSBGaW5hbCBvdXRwdXQgc3RhZ2UKIAotCW1vdmRxYQl4bW0zLHhtbTYKLQltb3ZkcWEJeG1tNSx4bW0xCi0JcGFkZGQJeG1tNix4bW00CTsgeG1tNj1kYXRhMFtjb2wwICoqKiogKioqKiAqKioqXT0oQTAgKiogKiogKiopCi0JcGFkZGQJeG1tMSx4bW0wCTsgeG1tMT1kYXRhMFtjb2wxIGNvbDMgY29sNSBjb2w3XT0oQTEgQTMgQTUgQTcpCi0JcHN1YmQJeG1tMyx4bW00CTsgeG1tMz1kYXRhMVtjb2wwICoqKiogKioqKiAqKioqXT0oQjAgKiogKiogKiopCi0JcHN1YmQJeG1tNSx4bW0wCTsgeG1tNT1kYXRhMVtjb2wxIGNvbDMgY29sNSBjb2w3XT0oQjEgQjMgQjUgQjcpCisgICAgICAgIG1vdmRxYSAgeG1tMyx4bW02CisgICAgICAgIG1vdmRxYSAgeG1tNSx4bW0xCisgICAgICAgIHBhZGRkICAgeG1tNix4bW00ICAgICAgIDsgeG1tNj1kYXRhMFtjb2wwICoqKiogKioqKiAqKioqXT0oQTAgKiogKiogKiopCisgICAgICAgIHBhZGRkICAgeG1tMSx4bW0wICAgICAgIDsgeG1tMT1kYXRhMFtjb2wxIGNvbDMgY29sNSBjb2w3XT0oQTEgQTMgQTUgQTcpCisgICAgICAgIHBzdWJkICAgeG1tMyx4bW00ICAgICAgIDsgeG1tMz1kYXRhMVtjb2wwICoqKiogKioqKiAqKioqXT0oQjAgKiogKiogKiopCisgICAgICAgIHBzdWJkICAgeG1tNSx4bW0wICAgICAgIDsgeG1tNT1kYXRhMVtjb2wxIGNvbDMgY29sNSBjb2w3XT0oQjEgQjMgQjUgQjcpCiAKLQltb3ZkcWEJeG1tMixbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxXzIpXQk7IHhtbTI9W1BEX0RFU0NBTEVfUDFfMl0KKyAgICAgICAgbW92ZHFhICB4bW0yLFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDFfMildICAgICAgOyB4bW0yPVtQRF9ERVNDQUxFX1AxXzJdCiAKLQlwdW5wY2tsZHEgIHhtbTYseG1tMwkJOyB4bW02PShBMCBCMCAqKiAqKikKKyAgICAgICAgcHVucGNrbGRxICB4bW02LHhtbTMgICAgICAgICAgICA7IHhtbTY9KEEwIEIwICoqICoqKQogCi0JbW92ZHFhICAgICB4bW03LHhtbTEKLQlwdW5wY2tscWRxIHhtbTEseG1tNQkJOyB4bW0xPShBMSBBMyBCMSBCMykKLQlwdW5wY2tocWRxIHhtbTcseG1tNQkJOyB4bW03PShBNSBBNyBCNSBCNykKKyAgICAgICAgbW92ZHFhICAgICB4bW03LHhtbTEKKyAgICAgICAgcHVucGNrbHFkcSB4bW0xLHhtbTUgICAgICAgICAgICA7IHhtbTE9KEExIEEzIEIxIEIzKQorICAgICAgICBwdW5wY2tocWRxIHhtbTcseG1tNSAgICAgICAgICAgIDsgeG1tNz0oQTUgQTcgQjUgQjcpCiAKLQlwYWRkZAl4bW02LHhtbTIKLQlwc3JhZAl4bW02LERFU0NBTEVfUDFfMgorICAgICAgICBwYWRkZCAgIHhtbTYseG1tMgorICAgICAgICBwc3JhZCAgIHhtbTYsREVTQ0FMRV9QMV8yCiAKLQlwYWRkZAl4bW0xLHhtbTIKLQlwYWRkZAl4bW03LHhtbTIKLQlwc3JhZAl4bW0xLERFU0NBTEVfUDFfMgotCXBzcmFkCXhtbTcsREVTQ0FMRV9QMV8yCisgICAgICAgIHBhZGRkICAgeG1tMSx4bW0yCisgICAgICAgIHBhZGRkICAgeG1tNyx4bW0yCisgICAgICAgIHBzcmFkICAgeG1tMSxERVNDQUxFX1AxXzIKKyAgICAgICAgcHNyYWQgICB4bW03LERFU0NBTEVfUDFfMgogCi0JOyAtLSBQcmVmZXRjaCB0aGUgbmV4dCBjb2VmZmljaWVudCBibG9jaworICAgICAgICA7IC0tIFByZWZldGNoIHRoZSBuZXh0IGNvZWZmaWNpZW50IGJsb2NrCiAKLQlwcmVmZXRjaG50YSBbZXNpICsgRENUU0laRTIqU0laRU9GX0pDT0VGICsgMCozMl0KLQlwcmVmZXRjaG50YSBbZXNpICsgRENUU0laRTIqU0laRU9GX0pDT0VGICsgMSozMl0KLQlwcmVmZXRjaG50YSBbZXNpICsgRENUU0laRTIqU0laRU9GX0pDT0VGICsgMiozMl0KLQlwcmVmZXRjaG50YSBbZXNpICsgRENUU0laRTIqU0laRU9GX0pDT0VGICsgMyozMl0KKyAgICAgICAgcHJlZmV0Y2hudGEgW2VzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDAqMzJdCisgICAgICAgIHByZWZldGNobnRhIFtlc2kgKyBEQ1RTSVpFMipTSVpFT0ZfSkNPRUYgKyAxKjMyXQorICAgICAgICBwcmVmZXRjaG50YSBbZXNpICsgRENUU0laRTIqU0laRU9GX0pDT0VGICsgMiozMl0KKyAgICAgICAgcHJlZmV0Y2hudGEgW2VzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDMqMzJdCiAKLQk7IC0tLS0gUGFzcyAyOiBwcm9jZXNzIHJvd3MsIHN0b3JlIGludG8gb3V0cHV0IGFycmF5LgorICAgICAgICA7IC0tLS0gUGFzcyAyOiBwcm9jZXNzIHJvd3MsIHN0b3JlIGludG8gb3V0cHV0IGFycmF5LgogCi0JbW92CWVkaSwgSlNBTVBBUlJBWSBbb3V0cHV0X2J1ZihlYnApXQk7IChKU0FNUFJPVyAqKQotCW1vdgllYXgsIEpESU1FTlNJT04gW291dHB1dF9jb2woZWJwKV0KKyAgICAgICAgbW92ICAgICBlZGksIEpTQU1QQVJSQVkgW291dHB1dF9idWYoZWJwKV0gICAgICAgOyAoSlNBTVBST1cgKikKKyAgICAgICAgbW92ICAgICBlYXgsIEpESU1FTlNJT04gW291dHB1dF9jb2woZWJwKV0KIAotCTsgfCBpbnB1dDp8IHJlc3VsdDp8Ci0JOyB8IEEwIEIwIHwgICAgICAgIHwKLQk7IHwgQTEgQjEgfCBDMCBDMSAgfAotCTsgfCBBMyBCMyB8IEQwIEQxICB8Ci0JOyB8IEE1IEI1IHwgICAgICAgIHwKLQk7IHwgQTcgQjcgfCAgICAgICAgfAorICAgICAgICA7IHwgaW5wdXQ6fCByZXN1bHQ6fAorICAgICAgICA7IHwgQTAgQjAgfCAgICAgICAgfAorICAgICAgICA7IHwgQTEgQjEgfCBDMCBDMSAgfAorICAgICAgICA7IHwgQTMgQjMgfCBEMCBEMSAgfAorICAgICAgICA7IHwgQTUgQjUgfCAgICAgICAgfAorICAgICAgICA7IHwgQTcgQjcgfCAgICAgICAgfAogCi0JOyAtLSBPZGQgcGFydAorICAgICAgICA7IC0tIE9kZCBwYXJ0CiAKLQlwYWNrc3NkdyAgeG1tMSx4bW0xCQk7IHhtbTE9KEExIEEzIEIxIEIzIEExIEEzIEIxIEIzKQotCXBhY2tzc2R3ICB4bW03LHhtbTcJCTsgeG1tNz0oQTUgQTcgQjUgQjcgQTUgQTcgQjUgQjcpCi0JcG1hZGR3ZCAgIHhtbTEsW0dPVE9GRihlYngsUFdfRjM2Ml9NRjEyNyldCi0JcG1hZGR3ZCAgIHhtbTcsW0dPVE9GRihlYngsUFdfRjA4NV9NRjA3MildCisgICAgICAgIHBhY2tzc2R3ICB4bW0xLHhtbTEgICAgICAgICAgICAgOyB4bW0xPShBMSBBMyBCMSBCMyBBMSBBMyBCMSBCMykKKyAgICAgICAgcGFja3NzZHcgIHhtbTcseG1tNyAgICAgICAgICAgICA7IHhtbTc9KEE1IEE3IEI1IEI3IEE1IEE3IEI1IEI3KQorICAgICAgICBwbWFkZHdkICAgeG1tMSxbR09UT0ZGKGVieCxQV19GMzYyX01GMTI3KV0KKyAgICAgICAgcG1hZGR3ZCAgIHhtbTcsW0dPVE9GRihlYngsUFdfRjA4NV9NRjA3MildCiAKLQlwYWRkZCAgICAgeG1tMSx4bW03CQk7IHhtbTE9dG1wMFtyb3cwIHJvdzEgcm93MCByb3cxXQorICAgICAgICBwYWRkZCAgICAgeG1tMSx4bW03ICAgICAgICAgICAgIDsgeG1tMT10bXAwW3JvdzAgcm93MSByb3cwIHJvdzFdCiAKLQk7IC0tIEV2ZW4gcGFydAorICAgICAgICA7IC0tIEV2ZW4gcGFydAogCi0JcHNsbGQgICAgIHhtbTYsKENPTlNUX0JJVFMrMikJOyB4bW02PXRtcDEwW3JvdzAgcm93MSAqKioqICoqKipdCisgICAgICAgIHBzbGxkICAgICB4bW02LChDT05TVF9CSVRTKzIpICAgOyB4bW02PXRtcDEwW3JvdzAgcm93MSAqKioqICoqKipdCiAKLQk7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQorICAgICAgICA7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQogCi0JbW92ZHFhICAgIHhtbTQseG1tNgotCXBhZGRkICAgICB4bW02LHhtbTEJOyB4bW02PWRhdGEwW3JvdzAgcm93MSAqKioqICoqKipdPShDMCBDMSAqKiAqKikKLQlwc3ViZCAgICAgeG1tNCx4bW0xCTsgeG1tND1kYXRhMVtyb3cwIHJvdzEgKioqKiAqKioqXT0oRDAgRDEgKiogKiopCisgICAgICAgIG1vdmRxYSAgICB4bW00LHhtbTYKKyAgICAgICAgcGFkZGQgICAgIHhtbTYseG1tMSAgICAgOyB4bW02PWRhdGEwW3JvdzAgcm93MSAqKioqICoqKipdPShDMCBDMSAqKiAqKikKKyAgICAgICAgcHN1YmQgICAgIHhtbTQseG1tMSAgICAgOyB4bW00PWRhdGExW3JvdzAgcm93MSAqKioqICoqKipdPShEMCBEMSAqKiAqKikKIAotCXB1bnBja2xkcSB4bW02LHhtbTQJOyB4bW02PShDMCBEMCBDMSBEMSkKKyAgICAgICAgcHVucGNrbGRxIHhtbTYseG1tNCAgICAgOyB4bW02PShDMCBEMCBDMSBEMSkKIAotCXBhZGRkICAgICB4bW02LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDJfMildCi0JcHNyYWQgICAgIHhtbTYsREVTQ0FMRV9QMl8yCisgICAgICAgIHBhZGRkICAgICB4bW02LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDJfMildCisgICAgICAgIHBzcmFkICAgICB4bW02LERFU0NBTEVfUDJfMgogCi0JcGFja3NzZHcgIHhtbTYseG1tNgkJOyB4bW02PShDMCBEMCBDMSBEMSBDMCBEMCBDMSBEMSkKLQlwYWNrc3N3YiAgeG1tNix4bW02CQk7IHhtbTY9KEMwIEQwIEMxIEQxIEMwIEQwIEMxIEQxIC4uKQotCXBhZGRiICAgICB4bW02LFtHT1RPRkYoZWJ4LFBCX0NFTlRFUkpTQU1QKV0KKyAgICAgICAgcGFja3NzZHcgIHhtbTYseG1tNiAgICAgICAgICAgICA7IHhtbTY9KEMwIEQwIEMxIEQxIEMwIEQwIEMxIEQxKQorICAgICAgICBwYWNrc3N3YiAgeG1tNix4bW02ICAgICAgICAgICAgIDsgeG1tNj0oQzAgRDAgQzEgRDEgQzAgRDAgQzEgRDEgLi4pCisgICAgICAgIHBhZGRiICAgICB4bW02LFtHT1RPRkYoZWJ4LFBCX0NFTlRFUkpTQU1QKV0KIAotCXBleHRydwllYngseG1tNiwweDAwCQk7IGVieD0oQzAgRDAgLS0gLS0pCi0JcGV4dHJ3CWVjeCx4bW02LDB4MDEJCTsgZWN4PShDMSBEMSAtLSAtLSkKKyAgICAgICAgcGV4dHJ3ICBlYngseG1tNiwweDAwICAgICAgICAgICA7IGVieD0oQzAgRDAgLS0gLS0pCisgICAgICAgIHBleHRydyAgZWN4LHhtbTYsMHgwMSAgICAgICAgICAgOyBlY3g9KEMxIEQxIC0tIC0tKQogCi0JbW92CWVkeCwgSlNBTVBST1cgW2VkaSswKlNJWkVPRl9KU0FNUFJPV10KLQltb3YJZXNpLCBKU0FNUFJPVyBbZWRpKzEqU0laRU9GX0pTQU1QUk9XXQotCW1vdglXT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXSwgYngKLQltb3YJV09SRCBbZXNpK2VheCpTSVpFT0ZfSlNBTVBMRV0sIGN4CisgICAgICAgIG1vdiAgICAgZWR4LCBKU0FNUFJPVyBbZWRpKzAqU0laRU9GX0pTQU1QUk9XXQorICAgICAgICBtb3YgICAgIGVzaSwgSlNBTVBST1cgW2VkaSsxKlNJWkVPRl9KU0FNUFJPV10KKyAgICAgICAgbW92ICAgICBXT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXSwgYngKKyAgICAgICAgbW92ICAgICBXT1JEIFtlc2krZWF4KlNJWkVPRl9KU0FNUExFXSwgY3gKIAotCXBvcAllZGkKLQlwb3AJZXNpCi07CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi07CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi0JcG9wCWVieAotCXBvcAllYnAKLQlyZXQKKyAgICAgICAgcG9wICAgICBlZGkKKyAgICAgICAgcG9wICAgICBlc2kKKzsgICAgICAgcG9wICAgICBlZHggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsgICAgICAgcG9wICAgICBlY3ggICAgICAgICAgICAgOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKyAgICAgICAgcG9wICAgICBlYngKKyAgICAgICAgcG9wICAgICBlYnAKKyAgICAgICAgcmV0CiAKIDsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCiA7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCi0JYWxpZ24JMTYKKyAgICAgICAgYWxpZ24gICAxNgpkaWZmIC0tZ2l0IGEvc2ltZC9qaXNzZWZsdC5hc20gYi9zaW1kL2ppc3NlZmx0LmFzbQppbmRleCBkNjE0N2MxLi44YjgxMzU1IDEwMDY0NAotLS0gYS9zaW1kL2ppc3NlZmx0LmFzbQorKysgYi9zaW1kL2ppc3NlZmx0LmFzbQpAQCAtMjUsMzQgKzI1LDM0IEBACiAKIDsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotJW1hY3JvCXVucGNrbHBzMiAyCTsgJTE9KDAgMSAyIDMpIC8gJTI9KDQgNSA2IDcpID0+ICUxPSgwIDEgNCA1KQotCXNodWZwcwklMSwlMiwweDQ0CislbWFjcm8gIHVucGNrbHBzMiAyICAgICA7ICUxPSgwIDEgMiAzKSAvICUyPSg0IDUgNiA3KSA9PiAlMT0oMCAxIDQgNSkKKyAgICAgICAgc2h1ZnBzICAlMSwlMiwweDQ0CiAlZW5kbWFjcm8KIAotJW1hY3JvCXVucGNraHBzMiAyCTsgJTE9KDAgMSAyIDMpIC8gJTI9KDQgNSA2IDcpID0+ICUxPSgyIDMgNiA3KQotCXNodWZwcwklMSwlMiwweEVFCislbWFjcm8gIHVucGNraHBzMiAyICAgICA7ICUxPSgwIDEgMiAzKSAvICUyPSg0IDUgNiA3KSA9PiAlMT0oMiAzIDYgNykKKyAgICAgICAgc2h1ZnBzICAlMSwlMiwweEVFCiAlZW5kbWFjcm8KIAogOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCVNFQ1RJT04JU0VHX0NPTlNUCisgICAgICAgIFNFQ1RJT04gU0VHX0NPTlNUCiAKLQlhbGlnbnoJMTYKLQlnbG9iYWwJRVhUTihqY29uc3RfaWRjdF9mbG9hdF9zc2UpCisgICAgICAgIGFsaWdueiAgMTYKKyAgICAgICAgZ2xvYmFsICBFWFROKGpjb25zdF9pZGN0X2Zsb2F0X3NzZSkKIAogRVhUTihqY29uc3RfaWRjdF9mbG9hdF9zc2UpOgogCi1QRF8xXzQxNAl0aW1lcyA0IGRkICAxLjQxNDIxMzU2MjM3MzA5NTA0ODgwMTY4OQotUERfMV84NDcJdGltZXMgNCBkZCAgMS44NDc3NTkwNjUwMjI1NzM1MTIyNTYzNjYKLVBEXzFfMDgyCXRpbWVzIDQgZGQgIDEuMDgyMzkyMjAwMjkyMzkzOTY4Nzk5NDQ2Ci1QRF9NMl82MTMJdGltZXMgNCBkZCAtMi42MTMxMjU5Mjk3NTI3NTMwNTU3MTMyODYKLVBEXzBfMTI1CXRpbWVzIDQgZGQgIDAuMTI1CTsgMS84Ci1QQl9DRU5URVJKU0FNUAl0aW1lcyA4IGRiICBDRU5URVJKU0FNUExFCitQRF8xXzQxNCAgICAgICAgdGltZXMgNCBkZCAgMS40MTQyMTM1NjIzNzMwOTUwNDg4MDE2ODkKK1BEXzFfODQ3ICAgICAgICB0aW1lcyA0IGRkICAxLjg0Nzc1OTA2NTAyMjU3MzUxMjI1NjM2NgorUERfMV8wODIgICAgICAgIHRpbWVzIDQgZGQgIDEuMDgyMzkyMjAwMjkyMzkzOTY4Nzk5NDQ2CitQRF9NMl82MTMgICAgICAgdGltZXMgNCBkZCAtMi42MTMxMjU5Mjk3NTI3NTMwNTU3MTMyODYKK1BEXzBfMTI1ICAgICAgICB0aW1lcyA0IGRkICAwLjEyNSAgICAgICA7IDEvOAorUEJfQ0VOVEVSSlNBTVAgIHRpbWVzIDggZGIgIENFTlRFUkpTQU1QTEUKIAotCWFsaWduegkxNgorICAgICAgICBhbGlnbnogIDE2CiAKIDsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlTRUNUSU9OCVNFR19URVhUCi0JQklUUwkzMgorICAgICAgICBTRUNUSU9OIFNFR19URVhUCisgICAgICAgIEJJVFMgICAgMzIKIDsKIDsgUGVyZm9ybSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Qgb24gb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cy4KIDsKQEAgLTYxLDUxMiArNjEsNTEyIEBACiA7ICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKIDsKIAotJWRlZmluZSBkY3RfdGFibGUoYikJKGIpKzgJCQk7IHZvaWQgKiBkY3RfdGFibGUKLSVkZWZpbmUgY29lZl9ibG9jayhiKQkoYikrMTIJCTsgSkNPRUZQVFIgY29lZl9ibG9jawotJWRlZmluZSBvdXRwdXRfYnVmKGIpCShiKSsxNgkJOyBKU0FNUEFSUkFZIG91dHB1dF9idWYKLSVkZWZpbmUgb3V0cHV0X2NvbChiKQkoYikrMjAJCTsgSkRJTUVOU0lPTiBvdXRwdXRfY29sCislZGVmaW5lIGRjdF90YWJsZShiKSAgICAoYikrOCAgICAgICAgICAgOyB2b2lkICogZGN0X3RhYmxlCislZGVmaW5lIGNvZWZfYmxvY2soYikgICAoYikrMTIgICAgICAgICAgOyBKQ09FRlBUUiBjb2VmX2Jsb2NrCislZGVmaW5lIG91dHB1dF9idWYoYikgICAoYikrMTYgICAgICAgICAgOyBKU0FNUEFSUkFZIG91dHB1dF9idWYKKyVkZWZpbmUgb3V0cHV0X2NvbChiKSAgIChiKSsyMCAgICAgICAgICA7IEpESU1FTlNJT04gb3V0cHV0X2NvbAogCi0lZGVmaW5lIG9yaWdpbmFsX2VicAllYnArMAotJWRlZmluZSB3ayhpKQkJZWJwLShXS19OVU0tKGkpKSpTSVpFT0ZfWE1NV09SRAk7IHhtbXdvcmQgd2tbV0tfTlVNXQotJWRlZmluZSBXS19OVU0JCTIKLSVkZWZpbmUgd29ya3NwYWNlCXdrKDApLURDVFNJWkUyKlNJWkVPRl9GQVNUX0ZMT0FUCi0JCQkJCTsgRkFTVF9GTE9BVCB3b3Jrc3BhY2VbRENUU0laRTJdCislZGVmaW5lIG9yaWdpbmFsX2VicCAgICBlYnArMAorJWRlZmluZSB3ayhpKSAgICAgICAgICAgZWJwLShXS19OVU0tKGkpKSpTSVpFT0ZfWE1NV09SRCA7IHhtbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0gICAgICAgICAgMgorJWRlZmluZSB3b3Jrc3BhY2UgICAgICAgd2soMCktRENUU0laRTIqU0laRU9GX0ZBU1RfRkxPQVQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IEZBU1RfRkxPQVQgd29ya3NwYWNlW0RDVFNJWkUyXQogCi0JYWxpZ24JMTYKLQlnbG9iYWwJRVhUTihqc2ltZF9pZGN0X2Zsb2F0X3NzZSkKKyAgICAgICAgYWxpZ24gICAxNgorICAgICAgICBnbG9iYWwgIEVYVE4oanNpbWRfaWRjdF9mbG9hdF9zc2UpCiAKIEVYVE4oanNpbWRfaWRjdF9mbG9hdF9zc2UpOgotCXB1c2gJZWJwCi0JbW92CWVheCxlc3AJCQkJOyBlYXggPSBvcmlnaW5hbCBlYnAKLQlzdWIJZXNwLCBieXRlIDQKLQlhbmQJZXNwLCBieXRlICgtU0laRU9GX1hNTVdPUkQpCTsgYWxpZ24gdG8gMTI4IGJpdHMKLQltb3YJW2VzcF0sZWF4Ci0JbW92CWVicCxlc3AJCQkJOyBlYnAgPSBhbGlnbmVkIGVicAotCWxlYQllc3AsIFt3b3Jrc3BhY2VdCi0JcHVzaAllYngKLTsJcHVzaAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi07CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotCXB1c2gJZXNpCi0JcHVzaAllZGkKKyAgICAgICAgcHVzaCAgICBlYnAKKyAgICAgICAgbW92ICAgICBlYXgsZXNwICAgICAgICAgICAgICAgICAgICAgICAgIDsgZWF4ID0gb3JpZ2luYWwgZWJwCisgICAgICAgIHN1YiAgICAgZXNwLCBieXRlIDQKKyAgICAgICAgYW5kICAgICBlc3AsIGJ5dGUgKC1TSVpFT0ZfWE1NV09SRCkgICAgIDsgYWxpZ24gdG8gMTI4IGJpdHMKKyAgICAgICAgbW92ICAgICBbZXNwXSxlYXgKKyAgICAgICAgbW92ICAgICBlYnAsZXNwICAgICAgICAgICAgICAgICAgICAgICAgIDsgZWJwID0gYWxpZ25lZCBlYnAKKyAgICAgICAgbGVhICAgICBlc3AsIFt3b3Jrc3BhY2VdCisgICAgICAgIHB1c2ggICAgZWJ4Cis7ICAgICAgIHB1c2ggICAgZWN4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgICAgIHB1c2ggICAgZWR4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgICAgIHB1c2ggICAgZXNpCisgICAgICAgIHB1c2ggICAgZWRpCiAKLQlnZXRfR09UCWVieAkJOyBnZXQgR09UIGFkZHJlc3MKKyAgICAgICAgZ2V0X0dPVCBlYnggICAgICAgICAgICAgOyBnZXQgR09UIGFkZHJlc3MKIAotCTsgLS0tLSBQYXNzIDE6IHByb2Nlc3MgY29sdW1ucyBmcm9tIGlucHV0LCBzdG9yZSBpbnRvIHdvcmsgYXJyYXkuCisgICAgICAgIDsgLS0tLSBQYXNzIDE6IHByb2Nlc3MgY29sdW1ucyBmcm9tIGlucHV0LCBzdG9yZSBpbnRvIHdvcmsgYXJyYXkuCiAKLTsJbW92CWVheCwgW29yaWdpbmFsX2VicF0KLQltb3YJZWR4LCBQT0lOVEVSIFtkY3RfdGFibGUoZWF4KV0JOyBxdWFudHB0cgotCW1vdgllc2ksIEpDT0VGUFRSIFtjb2VmX2Jsb2NrKGVheCldCQk7IGlucHRyCi0JbGVhCWVkaSwgW3dvcmtzcGFjZV0JCQk7IEZBU1RfRkxPQVQgKiB3c3B0cgotCW1vdgllY3gsIERDVFNJWkUvNAkJCQk7IGN0cgotCWFsaWdueAkxNiw3Cis7ICAgICAgIG1vdiAgICAgZWF4LCBbb3JpZ2luYWxfZWJwXQorICAgICAgICBtb3YgICAgIGVkeCwgUE9JTlRFUiBbZGN0X3RhYmxlKGVheCldICAgICAgICAgICA7IHF1YW50cHRyCisgICAgICAgIG1vdiAgICAgZXNpLCBKQ09FRlBUUiBbY29lZl9ibG9jayhlYXgpXSAgICAgICAgIDsgaW5wdHIKKyAgICAgICAgbGVhICAgICBlZGksIFt3b3Jrc3BhY2VdICAgICAgICAgICAgICAgICAgICAgICAgOyBGQVNUX0ZMT0FUICogd3NwdHIKKyAgICAgICAgbW92ICAgICBlY3gsIERDVFNJWkUvNCAgICAgICAgICAgICAgICAgICAgICAgICAgOyBjdHIKKyAgICAgICAgYWxpZ254ICAxNiw3CiAuY29sdW1ubG9vcDoKICVpZm5kZWYgTk9fWkVST19DT0xVTU5fVEVTVF9GTE9BVF9TU0UKLQltb3YJZWF4LCBEV09SRCBbRFdCTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCi0Jb3IJZWF4LCBEV09SRCBbRFdCTE9DSygyLDAsZXNpLFNJWkVPRl9KQ09FRildCi0Jam56CW5lYXIgLmNvbHVtbkRDVAorICAgICAgICBtb3YgICAgIGVheCwgRFdPUkQgW0RXQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBvciAgICAgIGVheCwgRFdPUkQgW0RXQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBqbnogICAgIG5lYXIgLmNvbHVtbkRDVAogCi0JbW92cQltbTAsIE1NV09SRCBbTU1CTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCi0JbW92cQltbTEsIE1NV09SRCBbTU1CTE9DSygyLDAsZXNpLFNJWkVPRl9KQ09FRildCi0JcG9yCW1tMCwgTU1XT1JEIFtNTUJMT0NLKDMsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQlwb3IJbW0xLCBNTVdPUkQgW01NQkxPQ0soNCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQotCXBvcgltbTAsIE1NV09SRCBbTU1CTE9DSyg1LDAsZXNpLFNJWkVPRl9KQ09FRildCi0JcG9yCW1tMSwgTU1XT1JEIFtNTUJMT0NLKDYsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQlwb3IJbW0wLCBNTVdPUkQgW01NQkxPQ0soNywwLGVzaSxTSVpFT0ZfSkNPRUYpXQotCXBvcgltbTEsbW0wCi0JcGFja3Nzd2IgbW0xLG1tMQotCW1vdmQJZWF4LG1tMQotCXRlc3QJZWF4LGVheAotCWpueglzaG9ydCAuY29sdW1uRENUCisgICAgICAgIG1vdnEgICAgbW0wLCBNTVdPUkQgW01NQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBtb3ZxICAgIG1tMSwgTU1XT1JEIFtNTUJMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgcG9yICAgICBtbTAsIE1NV09SRCBbTU1CTE9DSygzLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIHBvciAgICAgbW0xLCBNTVdPUkQgW01NQkxPQ0soNCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBwb3IgICAgIG1tMCwgTU1XT1JEIFtNTUJMT0NLKDUsMCxlc2ksU0laRU9GX0pDT0VGKV0KKyAgICAgICAgcG9yICAgICBtbTEsIE1NV09SRCBbTU1CTE9DSyg2LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIHBvciAgICAgbW0wLCBNTVdPUkQgW01NQkxPQ0soNywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBwb3IgICAgIG1tMSxtbTAKKyAgICAgICAgcGFja3Nzd2IgbW0xLG1tMQorICAgICAgICBtb3ZkICAgIGVheCxtbTEKKyAgICAgICAgdGVzdCAgICBlYXgsZWF4CisgICAgICAgIGpueiAgICAgc2hvcnQgLmNvbHVtbkRDVAogCi0JOyAtLSBBQyB0ZXJtcyBhbGwgemVybworICAgICAgICA7IC0tIEFDIHRlcm1zIGFsbCB6ZXJvCiAKLQltb3ZxICAgICAgbW0wLCBNTVdPUkQgW01NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorICAgICAgICBtb3ZxICAgICAgbW0wLCBNTVdPUkQgW01NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQogCi0JcHVucGNraHdkIG1tMSxtbTAJCQk7IG1tMT0oKiogMDIgKiogMDMpCi0JcHVucGNrbHdkIG1tMCxtbTAJCQk7IG1tMD0oMDAgMDAgMDEgMDEpCi0JcHNyYWQgICAgIG1tMSwoRFdPUkRfQklULVdPUkRfQklUKQk7IG1tMT1pbjBIPSgwMiAwMykKLQlwc3JhZCAgICAgbW0wLChEV09SRF9CSVQtV09SRF9CSVQpCTsgbW0wPWluMEw9KDAwIDAxKQotCWN2dHBpMnBzICB4bW0zLG1tMQkJCTsgeG1tMz0oMDIgMDMgKiogKiopCi0JY3Z0cGkycHMgIHhtbTAsbW0wCQkJOyB4bW0wPSgwMCAwMSAqKiAqKikKLQltb3ZsaHBzICAgeG1tMCx4bW0zCQkJOyB4bW0wPWluMD0oMDAgMDEgMDIgMDMpCisgICAgICAgIHB1bnBja2h3ZCBtbTEsbW0wICAgICAgICAgICAgICAgICAgICAgICA7IG1tMT0oKiogMDIgKiogMDMpCisgICAgICAgIHB1bnBja2x3ZCBtbTAsbW0wICAgICAgICAgICAgICAgICAgICAgICA7IG1tMD0oMDAgMDAgMDEgMDEpCisgICAgICAgIHBzcmFkICAgICBtbTEsKERXT1JEX0JJVC1XT1JEX0JJVCkgICAgICA7IG1tMT1pbjBIPSgwMiAwMykKKyAgICAgICAgcHNyYWQgICAgIG1tMCwoRFdPUkRfQklULVdPUkRfQklUKSAgICAgIDsgbW0wPWluMEw9KDAwIDAxKQorICAgICAgICBjdnRwaTJwcyAgeG1tMyxtbTEgICAgICAgICAgICAgICAgICAgICAgOyB4bW0zPSgwMiAwMyAqKiAqKikKKyAgICAgICAgY3Z0cGkycHMgIHhtbTAsbW0wICAgICAgICAgICAgICAgICAgICAgIDsgeG1tMD0oMDAgMDEgKiogKiopCisgICAgICAgIG1vdmxocHMgICB4bW0wLHhtbTMgICAgICAgICAgICAgICAgICAgICA7IHhtbTA9aW4wPSgwMCAwMSAwMiAwMykKIAotCW11bHBzCXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCisgICAgICAgIG11bHBzICAgeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KIAotCW1vdmFwcwl4bW0xLHhtbTAKLQltb3ZhcHMJeG1tMix4bW0wCi0JbW92YXBzCXhtbTMseG1tMAorICAgICAgICBtb3ZhcHMgIHhtbTEseG1tMAorICAgICAgICBtb3ZhcHMgIHhtbTIseG1tMAorICAgICAgICBtb3ZhcHMgIHhtbTMseG1tMAogCi0Jc2h1ZnBzCXhtbTAseG1tMCwweDAwCQkJOyB4bW0wPSgwMCAwMCAwMCAwMCkKLQlzaHVmcHMJeG1tMSx4bW0xLDB4NTUJCQk7IHhtbTE9KDAxIDAxIDAxIDAxKQotCXNodWZwcwl4bW0yLHhtbTIsMHhBQQkJCTsgeG1tMj0oMDIgMDIgMDIgMDIpCi0Jc2h1ZnBzCXhtbTMseG1tMywweEZGCQkJOyB4bW0zPSgwMyAwMyAwMyAwMykKKyAgICAgICAgc2h1ZnBzICB4bW0wLHhtbTAsMHgwMCAgICAgICAgICAgICAgICAgIDsgeG1tMD0oMDAgMDAgMDAgMDApCisgICAgICAgIHNodWZwcyAgeG1tMSx4bW0xLDB4NTUgICAgICAgICAgICAgICAgICA7IHhtbTE9KDAxIDAxIDAxIDAxKQorICAgICAgICBzaHVmcHMgIHhtbTIseG1tMiwweEFBICAgICAgICAgICAgICAgICAgOyB4bW0yPSgwMiAwMiAwMiAwMikKKyAgICAgICAgc2h1ZnBzICB4bW0zLHhtbTMsMHhGRiAgICAgICAgICAgICAgICAgIDsgeG1tMz0oMDMgMDMgMDMgMDMpCiAKLQltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0wCi0JbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDAsMSxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMAotCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygxLDAsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTEKLQltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMSwxLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0xCi0JbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMgotCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygyLDEsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTIKLQltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMywwLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0zCi0JbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDMsMSxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMwotCWptcAluZWFyIC5uZXh0Y29sdW1uCi0JYWxpZ254CTE2LDcKKyAgICAgICAgbW92YXBzICBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTAKKyAgICAgICAgbW92YXBzICBYTU1XT1JEIFtYTU1CTE9DSygwLDEsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTAKKyAgICAgICAgbW92YXBzICBYTU1XT1JEIFtYTU1CTE9DSygxLDAsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTEKKyAgICAgICAgbW92YXBzICBYTU1XT1JEIFtYTU1CTE9DSygxLDEsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTEKKyAgICAgICAgbW92YXBzICBYTU1XT1JEIFtYTU1CTE9DSygyLDAsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTIKKyAgICAgICAgbW92YXBzICBYTU1XT1JEIFtYTU1CTE9DSygyLDEsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTIKKyAgICAgICAgbW92YXBzICBYTU1XT1JEIFtYTU1CTE9DSygzLDAsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTMKKyAgICAgICAgbW92YXBzICBYTU1XT1JEIFtYTU1CTE9DSygzLDEsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTMKKyAgICAgICAgam1wICAgICBuZWFyIC5uZXh0Y29sdW1uCisgICAgICAgIGFsaWdueCAgMTYsNwogJWVuZGlmCiAuY29sdW1uRENUOgogCi0JOyAtLSBFdmVuIHBhcnQKKyAgICAgICAgOyAtLSBFdmVuIHBhcnQKIAotCW1vdnEgICAgICBtbTAsIE1NV09SRCBbTU1CTE9DSygwLDAsZXNpLFNJWkVPRl9KQ09FRildCi0JbW92cSAgICAgIG1tMSwgTU1XT1JEIFtNTUJMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQltb3ZxICAgICAgbW0yLCBNTVdPUkQgW01NQkxPQ0soNCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQotCW1vdnEgICAgICBtbTMsIE1NV09SRCBbTU1CTE9DSyg2LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdnEgICAgICBtbTAsIE1NV09SRCBbTU1CTE9DSygwLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdnEgICAgICBtbTEsIE1NV09SRCBbTU1CTE9DSygyLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdnEgICAgICBtbTIsIE1NV09SRCBbTU1CTE9DSyg0LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdnEgICAgICBtbTMsIE1NV09SRCBbTU1CTE9DSyg2LDAsZXNpLFNJWkVPRl9KQ09FRildCiAKLQlwdW5wY2tod2QgbW00LG1tMAkJCTsgbW00PSgqKiAwMiAqKiAwMykKLQlwdW5wY2tsd2QgbW0wLG1tMAkJCTsgbW0wPSgwMCAwMCAwMSAwMSkKLQlwdW5wY2tod2QgbW01LG1tMQkJCTsgbW01PSgqKiAyMiAqKiAyMykKLQlwdW5wY2tsd2QgbW0xLG1tMQkJCTsgbW0xPSgyMCAyMCAyMSAyMSkKKyAgICAgICAgcHVucGNraHdkIG1tNCxtbTAgICAgICAgICAgICAgICAgICAgICAgIDsgbW00PSgqKiAwMiAqKiAwMykKKyAgICAgICAgcHVucGNrbHdkIG1tMCxtbTAgICAgICAgICAgICAgICAgICAgICAgIDsgbW0wPSgwMCAwMCAwMSAwMSkKKyAgICAgICAgcHVucGNraHdkIG1tNSxtbTEgICAgICAgICAgICAgICAgICAgICAgIDsgbW01PSgqKiAyMiAqKiAyMykKKyAgICAgICAgcHVucGNrbHdkIG1tMSxtbTEgICAgICAgICAgICAgICAgICAgICAgIDsgbW0xPSgyMCAyMCAyMSAyMSkKIAotCXBzcmFkICAgICBtbTQsKERXT1JEX0JJVC1XT1JEX0JJVCkJOyBtbTQ9aW4wSD0oMDIgMDMpCi0JcHNyYWQgICAgIG1tMCwoRFdPUkRfQklULVdPUkRfQklUKQk7IG1tMD1pbjBMPSgwMCAwMSkKLQljdnRwaTJwcyAgeG1tNCxtbTQJCQk7IHhtbTQ9KDAyIDAzICoqICoqKQotCWN2dHBpMnBzICB4bW0wLG1tMAkJCTsgeG1tMD0oMDAgMDEgKiogKiopCi0JcHNyYWQgICAgIG1tNSwoRFdPUkRfQklULVdPUkRfQklUKQk7IG1tNT1pbjJIPSgyMiAyMykKLQlwc3JhZCAgICAgbW0xLChEV09SRF9CSVQtV09SRF9CSVQpCTsgbW0xPWluMkw9KDIwIDIxKQotCWN2dHBpMnBzICB4bW01LG1tNQkJCTsgeG1tNT0oMjIgMjMgKiogKiopCi0JY3Z0cGkycHMgIHhtbTEsbW0xCQkJOyB4bW0xPSgyMCAyMSAqKiAqKikKKyAgICAgICAgcHNyYWQgICAgIG1tNCwoRFdPUkRfQklULVdPUkRfQklUKSAgICAgIDsgbW00PWluMEg9KDAyIDAzKQorICAgICAgICBwc3JhZCAgICAgbW0wLChEV09SRF9CSVQtV09SRF9CSVQpICAgICAgOyBtbTA9aW4wTD0oMDAgMDEpCisgICAgICAgIGN2dHBpMnBzICB4bW00LG1tNCAgICAgICAgICAgICAgICAgICAgICA7IHhtbTQ9KDAyIDAzICoqICoqKQorICAgICAgICBjdnRwaTJwcyAgeG1tMCxtbTAgICAgICAgICAgICAgICAgICAgICAgOyB4bW0wPSgwMCAwMSAqKiAqKikKKyAgICAgICAgcHNyYWQgICAgIG1tNSwoRFdPUkRfQklULVdPUkRfQklUKSAgICAgIDsgbW01PWluMkg9KDIyIDIzKQorICAgICAgICBwc3JhZCAgICAgbW0xLChEV09SRF9CSVQtV09SRF9CSVQpICAgICAgOyBtbTE9aW4yTD0oMjAgMjEpCisgICAgICAgIGN2dHBpMnBzICB4bW01LG1tNSAgICAgICAgICAgICAgICAgICAgICA7IHhtbTU9KDIyIDIzICoqICoqKQorICAgICAgICBjdnRwaTJwcyAgeG1tMSxtbTEgICAgICAgICAgICAgICAgICAgICAgOyB4bW0xPSgyMCAyMSAqKiAqKikKIAotCXB1bnBja2h3ZCBtbTYsbW0yCQkJOyBtbTY9KCoqIDQyICoqIDQzKQotCXB1bnBja2x3ZCBtbTIsbW0yCQkJOyBtbTI9KDQwIDQwIDQxIDQxKQotCXB1bnBja2h3ZCBtbTcsbW0zCQkJOyBtbTc9KCoqIDYyICoqIDYzKQotCXB1bnBja2x3ZCBtbTMsbW0zCQkJOyBtbTM9KDYwIDYwIDYxIDYxKQorICAgICAgICBwdW5wY2tod2QgbW02LG1tMiAgICAgICAgICAgICAgICAgICAgICAgOyBtbTY9KCoqIDQyICoqIDQzKQorICAgICAgICBwdW5wY2tsd2QgbW0yLG1tMiAgICAgICAgICAgICAgICAgICAgICAgOyBtbTI9KDQwIDQwIDQxIDQxKQorICAgICAgICBwdW5wY2tod2QgbW03LG1tMyAgICAgICAgICAgICAgICAgICAgICAgOyBtbTc9KCoqIDYyICoqIDYzKQorICAgICAgICBwdW5wY2tsd2QgbW0zLG1tMyAgICAgICAgICAgICAgICAgICAgICAgOyBtbTM9KDYwIDYwIDYxIDYxKQogCi0JcHNyYWQgICAgIG1tNiwoRFdPUkRfQklULVdPUkRfQklUKQk7IG1tNj1pbjRIPSg0MiA0MykKLQlwc3JhZCAgICAgbW0yLChEV09SRF9CSVQtV09SRF9CSVQpCTsgbW0yPWluNEw9KDQwIDQxKQotCWN2dHBpMnBzICB4bW02LG1tNgkJCTsgeG1tNj0oNDIgNDMgKiogKiopCi0JY3Z0cGkycHMgIHhtbTIsbW0yCQkJOyB4bW0yPSg0MCA0MSAqKiAqKikKLQlwc3JhZCAgICAgbW03LChEV09SRF9CSVQtV09SRF9CSVQpCTsgbW03PWluNkg9KDYyIDYzKQotCXBzcmFkICAgICBtbTMsKERXT1JEX0JJVC1XT1JEX0JJVCkJOyBtbTM9aW42TD0oNjAgNjEpCi0JY3Z0cGkycHMgIHhtbTcsbW03CQkJOyB4bW03PSg2MiA2MyAqKiAqKikKLQljdnRwaTJwcyAgeG1tMyxtbTMJCQk7IHhtbTM9KDYwIDYxICoqICoqKQorICAgICAgICBwc3JhZCAgICAgbW02LChEV09SRF9CSVQtV09SRF9CSVQpICAgICAgOyBtbTY9aW40SD0oNDIgNDMpCisgICAgICAgIHBzcmFkICAgICBtbTIsKERXT1JEX0JJVC1XT1JEX0JJVCkgICAgICA7IG1tMj1pbjRMPSg0MCA0MSkKKyAgICAgICAgY3Z0cGkycHMgIHhtbTYsbW02ICAgICAgICAgICAgICAgICAgICAgIDsgeG1tNj0oNDIgNDMgKiogKiopCisgICAgICAgIGN2dHBpMnBzICB4bW0yLG1tMiAgICAgICAgICAgICAgICAgICAgICA7IHhtbTI9KDQwIDQxICoqICoqKQorICAgICAgICBwc3JhZCAgICAgbW03LChEV09SRF9CSVQtV09SRF9CSVQpICAgICAgOyBtbTc9aW42SD0oNjIgNjMpCisgICAgICAgIHBzcmFkICAgICBtbTMsKERXT1JEX0JJVC1XT1JEX0JJVCkgICAgICA7IG1tMz1pbjZMPSg2MCA2MSkKKyAgICAgICAgY3Z0cGkycHMgIHhtbTcsbW03ICAgICAgICAgICAgICAgICAgICAgIDsgeG1tNz0oNjIgNjMgKiogKiopCisgICAgICAgIGN2dHBpMnBzICB4bW0zLG1tMyAgICAgICAgICAgICAgICAgICAgICA7IHhtbTM9KDYwIDYxICoqICoqKQogCi0JbW92bGhwcyAgIHhtbTAseG1tNAkJCTsgeG1tMD1pbjA9KDAwIDAxIDAyIDAzKQotCW1vdmxocHMgICB4bW0xLHhtbTUJCQk7IHhtbTE9aW4yPSgyMCAyMSAyMiAyMykKLQltdWxwcyAgICAgeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KLQltdWxwcyAgICAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMiwwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KKyAgICAgICAgbW92bGhwcyAgIHhtbTAseG1tNCAgICAgICAgICAgICAgICAgICAgIDsgeG1tMD1pbjA9KDAwIDAxIDAyIDAzKQorICAgICAgICBtb3ZsaHBzICAgeG1tMSx4bW01ICAgICAgICAgICAgICAgICAgICAgOyB4bW0xPWluMj0oMjAgMjEgMjIgMjMpCisgICAgICAgIG11bHBzICAgICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQorICAgICAgICBtdWxwcyAgICAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMiwwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KIAotCW1vdmxocHMgICB4bW0yLHhtbTYJCQk7IHhtbTI9aW40PSg0MCA0MSA0MiA0MykKLQltb3ZsaHBzICAgeG1tMyx4bW03CQkJOyB4bW0zPWluNj0oNjAgNjEgNjIgNjMpCi0JbXVscHMgICAgIHhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDQsMCxlZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCi0JbXVscHMgICAgIHhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDYsMCxlZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCisgICAgICAgIG1vdmxocHMgICB4bW0yLHhtbTYgICAgICAgICAgICAgICAgICAgICA7IHhtbTI9aW40PSg0MCA0MSA0MiA0MykKKyAgICAgICAgbW92bGhwcyAgIHhtbTMseG1tNyAgICAgICAgICAgICAgICAgICAgIDsgeG1tMz1pbjY9KDYwIDYxIDYyIDYzKQorICAgICAgICBtdWxwcyAgICAgeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soNCwwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KKyAgICAgICAgbXVscHMgICAgIHhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDYsMCxlZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCiAKLQltb3ZhcHMJeG1tNCx4bW0wCi0JbW92YXBzCXhtbTUseG1tMQotCXN1YnBzCXhtbTAseG1tMgkJOyB4bW0wPXRtcDExCi0Jc3VicHMJeG1tMSx4bW0zCi0JYWRkcHMJeG1tNCx4bW0yCQk7IHhtbTQ9dG1wMTAKLQlhZGRwcwl4bW01LHhtbTMJCTsgeG1tNT10bXAxMworICAgICAgICBtb3ZhcHMgIHhtbTQseG1tMAorICAgICAgICBtb3ZhcHMgIHhtbTUseG1tMQorICAgICAgICBzdWJwcyAgIHhtbTAseG1tMiAgICAgICAgICAgICAgIDsgeG1tMD10bXAxMQorICAgICAgICBzdWJwcyAgIHhtbTEseG1tMworICAgICAgICBhZGRwcyAgIHhtbTQseG1tMiAgICAgICAgICAgICAgIDsgeG1tND10bXAxMAorICAgICAgICBhZGRwcyAgIHhtbTUseG1tMyAgICAgICAgICAgICAgIDsgeG1tNT10bXAxMwogCi0JbXVscHMJeG1tMSxbR09UT0ZGKGVieCxQRF8xXzQxNCldCi0Jc3VicHMJeG1tMSx4bW01CQk7IHhtbTE9dG1wMTIKKyAgICAgICAgbXVscHMgICB4bW0xLFtHT1RPRkYoZWJ4LFBEXzFfNDE0KV0KKyAgICAgICAgc3VicHMgICB4bW0xLHhtbTUgICAgICAgICAgICAgICA7IHhtbTE9dG1wMTIKIAotCW1vdmFwcwl4bW02LHhtbTQKLQltb3ZhcHMJeG1tNyx4bW0wCi0Jc3VicHMJeG1tNCx4bW01CQk7IHhtbTQ9dG1wMwotCXN1YnBzCXhtbTAseG1tMQkJOyB4bW0wPXRtcDIKLQlhZGRwcwl4bW02LHhtbTUJCTsgeG1tNj10bXAwCi0JYWRkcHMJeG1tNyx4bW0xCQk7IHhtbTc9dG1wMQorICAgICAgICBtb3ZhcHMgIHhtbTYseG1tNAorICAgICAgICBtb3ZhcHMgIHhtbTcseG1tMAorICAgICAgICBzdWJwcyAgIHhtbTQseG1tNSAgICAgICAgICAgICAgIDsgeG1tND10bXAzCisgICAgICAgIHN1YnBzICAgeG1tMCx4bW0xICAgICAgICAgICAgICAgOyB4bW0wPXRtcDIKKyAgICAgICAgYWRkcHMgICB4bW02LHhtbTUgICAgICAgICAgICAgICA7IHhtbTY9dG1wMAorICAgICAgICBhZGRwcyAgIHhtbTcseG1tMSAgICAgICAgICAgICAgIDsgeG1tNz10bXAxCiAKLQltb3ZhcHMJWE1NV09SRCBbd2soMSldLCB4bW00CTsgdG1wMwotCW1vdmFwcwlYTU1XT1JEIFt3aygwKV0sIHhtbTAJOyB0bXAyCisgICAgICAgIG1vdmFwcyAgWE1NV09SRCBbd2soMSldLCB4bW00ICAgOyB0bXAzCisgICAgICAgIG1vdmFwcyAgWE1NV09SRCBbd2soMCldLCB4bW0wICAgOyB0bXAyCiAKLQk7IC0tIE9kZCBwYXJ0CisgICAgICAgIDsgLS0gT2RkIHBhcnQKIAotCW1vdnEgICAgICBtbTQsIE1NV09SRCBbTU1CTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCi0JbW92cSAgICAgIG1tMCwgTU1XT1JEIFtNTUJMT0NLKDMsMCxlc2ksU0laRU9GX0pDT0VGKV0KLQltb3ZxICAgICAgbW01LCBNTVdPUkQgW01NQkxPQ0soNSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQotCW1vdnEgICAgICBtbTEsIE1NV09SRCBbTU1CTE9DSyg3LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdnEgICAgICBtbTQsIE1NV09SRCBbTU1CTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdnEgICAgICBtbTAsIE1NV09SRCBbTU1CTE9DSygzLDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdnEgICAgICBtbTUsIE1NV09SRCBbTU1CTE9DSyg1LDAsZXNpLFNJWkVPRl9KQ09FRildCisgICAgICAgIG1vdnEgICAgICBtbTEsIE1NV09SRCBbTU1CTE9DSyg3LDAsZXNpLFNJWkVPRl9KQ09FRildCiAKLQlwdW5wY2tod2QgbW02LG1tNAkJCTsgbW02PSgqKiAxMiAqKiAxMykKLQlwdW5wY2tsd2QgbW00LG1tNAkJCTsgbW00PSgxMCAxMCAxMSAxMSkKLQlwdW5wY2tod2QgbW0yLG1tMAkJCTsgbW0yPSgqKiAzMiAqKiAzMykKLQlwdW5wY2tsd2QgbW0wLG1tMAkJCTsgbW0wPSgzMCAzMCAzMSAzMSkKKyAgICAgICAgcHVucGNraHdkIG1tNixtbTQgICAgICAgICAgICAgICAgICAgICAgIDsgbW02PSgqKiAxMiAqKiAxMykKKyAgICAgICAgcHVucGNrbHdkIG1tNCxtbTQgICAgICAgICAgICAgICAgICAgICAgIDsgbW00PSgxMCAxMCAxMSAxMSkKKyAgICAgICAgcHVucGNraHdkIG1tMixtbTAgICAgICAgICAgICAgICAgICAgICAgIDsgbW0yPSgqKiAzMiAqKiAzMykKKyAgICAgICAgcHVucGNrbHdkIG1tMCxtbTAgICAgICAgICAgICAgICAgICAgICAgIDsgbW0wPSgzMCAzMCAzMSAzMSkKIAotCXBzcmFkICAgICBtbTYsKERXT1JEX0JJVC1XT1JEX0JJVCkJOyBtbTY9aW4xSD0oMTIgMTMpCi0JcHNyYWQgICAgIG1tNCwoRFdPUkRfQklULVdPUkRfQklUKQk7IG1tND1pbjFMPSgxMCAxMSkKLQljdnRwaTJwcyAgeG1tNCxtbTYJCQk7IHhtbTQ9KDEyIDEzICoqICoqKQotCWN2dHBpMnBzICB4bW0yLG1tNAkJCTsgeG1tMj0oMTAgMTEgKiogKiopCi0JcHNyYWQgICAgIG1tMiwoRFdPUkRfQklULVdPUkRfQklUKQk7IG1tMj1pbjNIPSgzMiAzMykKLQlwc3JhZCAgICAgbW0wLChEV09SRF9CSVQtV09SRF9CSVQpCTsgbW0wPWluM0w9KDMwIDMxKQotCWN2dHBpMnBzICB4bW0wLG1tMgkJCTsgeG1tMD0oMzIgMzMgKiogKiopCi0JY3Z0cGkycHMgIHhtbTMsbW0wCQkJOyB4bW0zPSgzMCAzMSAqKiAqKikKKyAgICAgICAgcHNyYWQgICAgIG1tNiwoRFdPUkRfQklULVdPUkRfQklUKSAgICAgIDsgbW02PWluMUg9KDEyIDEzKQorICAgICAgICBwc3JhZCAgICAgbW00LChEV09SRF9CSVQtV09SRF9CSVQpICAgICAgOyBtbTQ9aW4xTD0oMTAgMTEpCisgICAgICAgIGN2dHBpMnBzICB4bW00LG1tNiAgICAgICAgICAgICAgICAgICAgICA7IHhtbTQ9KDEyIDEzICoqICoqKQorICAgICAgICBjdnRwaTJwcyAgeG1tMixtbTQgICAgICAgICAgICAgICAgICAgICAgOyB4bW0yPSgxMCAxMSAqKiAqKikKKyAgICAgICAgcHNyYWQgICAgIG1tMiwoRFdPUkRfQklULVdPUkRfQklUKSAgICAgIDsgbW0yPWluM0g9KDMyIDMzKQorICAgICAgICBwc3JhZCAgICAgbW0wLChEV09SRF9CSVQtV09SRF9CSVQpICAgICAgOyBtbTA9aW4zTD0oMzAgMzEpCisgICAgICAgIGN2dHBpMnBzICB4bW0wLG1tMiAgICAgICAgICAgICAgICAgICAgICA7IHhtbTA9KDMyIDMzICoqICoqKQorICAgICAgICBjdnRwaTJwcyAgeG1tMyxtbTAgICAgICAgICAgICAgICAgICAgICAgOyB4bW0zPSgzMCAzMSAqKiAqKikKIAotCXB1bnBja2h3ZCBtbTcsbW01CQkJOyBtbTc9KCoqIDUyICoqIDUzKQotCXB1bnBja2x3ZCBtbTUsbW01CQkJOyBtbTU9KDUwIDUwIDUxIDUxKQotCXB1bnBja2h3ZCBtbTMsbW0xCQkJOyBtbTM9KCoqIDcyICoqIDczKQotCXB1bnBja2x3ZCBtbTEsbW0xCQkJOyBtbTE9KDcwIDcwIDcxIDcxKQorICAgICAgICBwdW5wY2tod2QgbW03LG1tNSAgICAgICAgICAgICAgICAgICAgICAgOyBtbTc9KCoqIDUyICoqIDUzKQorICAgICAgICBwdW5wY2tsd2QgbW01LG1tNSAgICAgICAgICAgICAgICAgICAgICAgOyBtbTU9KDUwIDUwIDUxIDUxKQorICAgICAgICBwdW5wY2tod2QgbW0zLG1tMSAgICAgICAgICAgICAgICAgICAgICAgOyBtbTM9KCoqIDcyICoqIDczKQorICAgICAgICBwdW5wY2tsd2QgbW0xLG1tMSAgICAgICAgICAgICAgICAgICAgICAgOyBtbTE9KDcwIDcwIDcxIDcxKQogCi0JbW92bGhwcyAgIHhtbTIseG1tNAkJCTsgeG1tMj1pbjE9KDEwIDExIDEyIDEzKQotCW1vdmxocHMgICB4bW0zLHhtbTAJCQk7IHhtbTM9aW4zPSgzMCAzMSAzMiAzMykKKyAgICAgICAgbW92bGhwcyAgIHhtbTIseG1tNCAgICAgICAgICAgICAgICAgICAgIDsgeG1tMj1pbjE9KDEwIDExIDEyIDEzKQorICAgICAgICBtb3ZsaHBzICAgeG1tMyx4bW0wICAgICAgICAgICAgICAgICAgICAgOyB4bW0zPWluMz0oMzAgMzEgMzIgMzMpCiAKLQlwc3JhZCAgICAgbW03LChEV09SRF9CSVQtV09SRF9CSVQpCTsgbW03PWluNUg9KDUyIDUzKQotCXBzcmFkICAgICBtbTUsKERXT1JEX0JJVC1XT1JEX0JJVCkJOyBtbTU9aW41TD0oNTAgNTEpCi0JY3Z0cGkycHMgIHhtbTQsbW03CQkJOyB4bW00PSg1MiA1MyAqKiAqKikKLQljdnRwaTJwcyAgeG1tNSxtbTUJCQk7IHhtbTU9KDUwIDUxICoqICoqKQotCXBzcmFkICAgICBtbTMsKERXT1JEX0JJVC1XT1JEX0JJVCkJOyBtbTM9aW43SD0oNzIgNzMpCi0JcHNyYWQgICAgIG1tMSwoRFdPUkRfQklULVdPUkRfQklUKQk7IG1tMT1pbjdMPSg3MCA3MSkKLQljdnRwaTJwcyAgeG1tMCxtbTMJCQk7IHhtbTA9KDcyIDczICoqICoqKQotCWN2dHBpMnBzICB4bW0xLG1tMQkJCTsgeG1tMT0oNzAgNzEgKiogKiopCisgICAgICAgIHBzcmFkICAgICBtbTcsKERXT1JEX0JJVC1XT1JEX0JJVCkgICAgICA7IG1tNz1pbjVIPSg1MiA1MykKKyAgICAgICAgcHNyYWQgICAgIG1tNSwoRFdPUkRfQklULVdPUkRfQklUKSAgICAgIDsgbW01PWluNUw9KDUwIDUxKQorICAgICAgICBjdnRwaTJwcyAgeG1tNCxtbTcgICAgICAgICAgICAgICAgICAgICAgOyB4bW00PSg1MiA1MyAqKiAqKikKKyAgICAgICAgY3Z0cGkycHMgIHhtbTUsbW01ICAgICAgICAgICAgICAgICAgICAgIDsgeG1tNT0oNTAgNTEgKiogKiopCisgICAgICAgIHBzcmFkICAgICBtbTMsKERXT1JEX0JJVC1XT1JEX0JJVCkgICAgICA7IG1tMz1pbjdIPSg3MiA3MykKKyAgICAgICAgcHNyYWQgICAgIG1tMSwoRFdPUkRfQklULVdPUkRfQklUKSAgICAgIDsgbW0xPWluN0w9KDcwIDcxKQorICAgICAgICBjdnRwaTJwcyAgeG1tMCxtbTMgICAgICAgICAgICAgICAgICAgICAgOyB4bW0wPSg3MiA3MyAqKiAqKikKKyAgICAgICAgY3Z0cGkycHMgIHhtbTEsbW0xICAgICAgICAgICAgICAgICAgICAgIDsgeG1tMT0oNzAgNzEgKiogKiopCiAKLQltdWxwcyAgICAgeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KLQltdWxwcyAgICAgeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soMywwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KKyAgICAgICAgbXVscHMgICAgIHhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCisgICAgICAgIG11bHBzICAgICB4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQogCi0JbW92bGhwcyAgIHhtbTUseG1tNAkJCTsgeG1tNT1pbjU9KDUwIDUxIDUyIDUzKQotCW1vdmxocHMgICB4bW0xLHhtbTAJCQk7IHhtbTE9aW43PSg3MCA3MSA3MiA3MykKLQltdWxwcyAgICAgeG1tNSwgWE1NV09SRCBbWE1NQkxPQ0soNSwwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KLQltdWxwcyAgICAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNywwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KKyAgICAgICAgbW92bGhwcyAgIHhtbTUseG1tNCAgICAgICAgICAgICAgICAgICAgIDsgeG1tNT1pbjU9KDUwIDUxIDUyIDUzKQorICAgICAgICBtb3ZsaHBzICAgeG1tMSx4bW0wICAgICAgICAgICAgICAgICAgICAgOyB4bW0xPWluNz0oNzAgNzEgNzIgNzMpCisgICAgICAgIG11bHBzICAgICB4bW01LCBYTU1XT1JEIFtYTU1CTE9DSyg1LDAsZWR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQorICAgICAgICBtdWxwcyAgICAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNywwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KIAotCW1vdmFwcwl4bW00LHhtbTIKLQltb3ZhcHMJeG1tMCx4bW01Ci0JYWRkcHMJeG1tMix4bW0xCQk7IHhtbTI9ejExCi0JYWRkcHMJeG1tNSx4bW0zCQk7IHhtbTU9ejEzCi0Jc3VicHMJeG1tNCx4bW0xCQk7IHhtbTQ9ejEyCi0Jc3VicHMJeG1tMCx4bW0zCQk7IHhtbTA9ejEwCisgICAgICAgIG1vdmFwcyAgeG1tNCx4bW0yCisgICAgICAgIG1vdmFwcyAgeG1tMCx4bW01CisgICAgICAgIGFkZHBzICAgeG1tMix4bW0xICAgICAgICAgICAgICAgOyB4bW0yPXoxMQorICAgICAgICBhZGRwcyAgIHhtbTUseG1tMyAgICAgICAgICAgICAgIDsgeG1tNT16MTMKKyAgICAgICAgc3VicHMgICB4bW00LHhtbTEgICAgICAgICAgICAgICA7IHhtbTQ9ejEyCisgICAgICAgIHN1YnBzICAgeG1tMCx4bW0zICAgICAgICAgICAgICAgOyB4bW0wPXoxMAogCi0JbW92YXBzCXhtbTEseG1tMgotCXN1YnBzCXhtbTIseG1tNQotCWFkZHBzCXhtbTEseG1tNQkJOyB4bW0xPXRtcDcKKyAgICAgICAgbW92YXBzICB4bW0xLHhtbTIKKyAgICAgICAgc3VicHMgICB4bW0yLHhtbTUKKyAgICAgICAgYWRkcHMgICB4bW0xLHhtbTUgICAgICAgICAgICAgICA7IHhtbTE9dG1wNwogCi0JbXVscHMJeG1tMixbR09UT0ZGKGVieCxQRF8xXzQxNCldCTsgeG1tMj10bXAxMQorICAgICAgICBtdWxwcyAgIHhtbTIsW0dPVE9GRihlYngsUERfMV80MTQpXSAgICAgOyB4bW0yPXRtcDExCiAKLQltb3ZhcHMJeG1tMyx4bW0wCi0JYWRkcHMJeG1tMCx4bW00Ci0JbXVscHMJeG1tMCxbR09UT0ZGKGVieCxQRF8xXzg0NyldCTsgeG1tMD16NQotCW11bHBzCXhtbTMsW0dPVE9GRihlYngsUERfTTJfNjEzKV0JOyB4bW0zPSh6MTAgKiAtMi42MTMxMjU5MzApCi0JbXVscHMJeG1tNCxbR09UT0ZGKGVieCxQRF8xXzA4MildCTsgeG1tND0oejEyICogMS4wODIzOTIyMDApCi0JYWRkcHMJeG1tMyx4bW0wCQk7IHhtbTM9dG1wMTIKLQlzdWJwcwl4bW00LHhtbTAJCTsgeG1tND10bXAxMAorICAgICAgICBtb3ZhcHMgIHhtbTMseG1tMAorICAgICAgICBhZGRwcyAgIHhtbTAseG1tNAorICAgICAgICBtdWxwcyAgIHhtbTAsW0dPVE9GRihlYngsUERfMV84NDcpXSAgICAgOyB4bW0wPXo1CisgICAgICAgIG11bHBzICAgeG1tMyxbR09UT0ZGKGVieCxQRF9NMl82MTMpXSAgICA7IHhtbTM9KHoxMCAqIC0yLjYxMzEyNTkzMCkKKyAgICAgICAgbXVscHMgICB4bW00LFtHT1RPRkYoZWJ4LFBEXzFfMDgyKV0gICAgIDsgeG1tND0oejEyICogMS4wODIzOTIyMDApCisgICAgICAgIGFkZHBzICAgeG1tMyx4bW0wICAgICAgICAgICAgICAgOyB4bW0zPXRtcDEyCisgICAgICAgIHN1YnBzICAgeG1tNCx4bW0wICAgICAgICAgICAgICAgOyB4bW00PXRtcDEwCiAKLQk7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQorICAgICAgICA7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQogCi0Jc3VicHMJeG1tMyx4bW0xCQk7IHhtbTM9dG1wNgotCW1vdmFwcwl4bW01LHhtbTYKLQltb3ZhcHMJeG1tMCx4bW03Ci0JYWRkcHMJeG1tNix4bW0xCQk7IHhtbTY9ZGF0YTA9KDAwIDAxIDAyIDAzKQotCWFkZHBzCXhtbTcseG1tMwkJOyB4bW03PWRhdGExPSgxMCAxMSAxMiAxMykKLQlzdWJwcwl4bW01LHhtbTEJCTsgeG1tNT1kYXRhNz0oNzAgNzEgNzIgNzMpCi0Jc3VicHMJeG1tMCx4bW0zCQk7IHhtbTA9ZGF0YTY9KDYwIDYxIDYyIDYzKQotCXN1YnBzCXhtbTIseG1tMwkJOyB4bW0yPXRtcDUKKyAgICAgICAgc3VicHMgICB4bW0zLHhtbTEgICAgICAgICAgICAgICA7IHhtbTM9dG1wNgorICAgICAgICBtb3ZhcHMgIHhtbTUseG1tNgorICAgICAgICBtb3ZhcHMgIHhtbTAseG1tNworICAgICAgICBhZGRwcyAgIHhtbTYseG1tMSAgICAgICAgICAgICAgIDsgeG1tNj1kYXRhMD0oMDAgMDEgMDIgMDMpCisgICAgICAgIGFkZHBzICAgeG1tNyx4bW0zICAgICAgICAgICAgICAgOyB4bW03PWRhdGExPSgxMCAxMSAxMiAxMykKKyAgICAgICAgc3VicHMgICB4bW01LHhtbTEgICAgICAgICAgICAgICA7IHhtbTU9ZGF0YTc9KDcwIDcxIDcyIDczKQorICAgICAgICBzdWJwcyAgIHhtbTAseG1tMyAgICAgICAgICAgICAgIDsgeG1tMD1kYXRhNj0oNjAgNjEgNjIgNjMpCisgICAgICAgIHN1YnBzICAgeG1tMix4bW0zICAgICAgICAgICAgICAgOyB4bW0yPXRtcDUKIAotCW1vdmFwcyAgICB4bW0xLHhtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQotCXVucGNrbHBzICB4bW02LHhtbTcJCTsgeG1tNj0oMDAgMTAgMDEgMTEpCi0JdW5wY2tocHMgIHhtbTEseG1tNwkJOyB4bW0xPSgwMiAxMiAwMyAxMykKLQltb3ZhcHMgICAgeG1tMyx4bW0wCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKLQl1bnBja2xwcyAgeG1tMCx4bW01CQk7IHhtbTA9KDYwIDcwIDYxIDcxKQotCXVucGNraHBzICB4bW0zLHhtbTUJCTsgeG1tMz0oNjIgNzIgNjMgNzMpCisgICAgICAgIG1vdmFwcyAgICB4bW0xLHhtbTYgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgICAgIHVucGNrbHBzICB4bW02LHhtbTcgICAgICAgICAgICAgOyB4bW02PSgwMCAxMCAwMSAxMSkKKyAgICAgICAgdW5wY2tocHMgIHhtbTEseG1tNyAgICAgICAgICAgICA7IHhtbTE9KDAyIDEyIDAzIDEzKQorICAgICAgICBtb3ZhcHMgICAgeG1tMyx4bW0wICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgICAgICB1bnBja2xwcyAgeG1tMCx4bW01ICAgICAgICAgICAgIDsgeG1tMD0oNjAgNzAgNjEgNzEpCisgICAgICAgIHVucGNraHBzICB4bW0zLHhtbTUgICAgICAgICAgICAgOyB4bW0zPSg2MiA3MiA2MyA3MykKIAotCW1vdmFwcwl4bW03LCBYTU1XT1JEIFt3aygwKV0JOyB4bW03PXRtcDIKLQltb3ZhcHMJeG1tNSwgWE1NV09SRCBbd2soMSldCTsgeG1tNT10bXAzCisgICAgICAgIG1vdmFwcyAgeG1tNywgWE1NV09SRCBbd2soMCldICAgOyB4bW03PXRtcDIKKyAgICAgICAgbW92YXBzICB4bW01LCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTU9dG1wMwogCi0JbW92YXBzCVhNTVdPUkQgW3drKDApXSwgeG1tMAk7IHdrKDApPSg2MCA3MCA2MSA3MSkKLQltb3ZhcHMJWE1NV09SRCBbd2soMSldLCB4bW0zCTsgd2soMSk9KDYyIDcyIDYzIDczKQorICAgICAgICBtb3ZhcHMgIFhNTVdPUkQgW3drKDApXSwgeG1tMCAgIDsgd2soMCk9KDYwIDcwIDYxIDcxKQorICAgICAgICBtb3ZhcHMgIFhNTVdPUkQgW3drKDEpXSwgeG1tMyAgIDsgd2soMSk9KDYyIDcyIDYzIDczKQogCi0JYWRkcHMJeG1tNCx4bW0yCQk7IHhtbTQ9dG1wNAotCW1vdmFwcwl4bW0wLHhtbTcKLQltb3ZhcHMJeG1tMyx4bW01Ci0JYWRkcHMJeG1tNyx4bW0yCQk7IHhtbTc9ZGF0YTI9KDIwIDIxIDIyIDIzKQotCWFkZHBzCXhtbTUseG1tNAkJOyB4bW01PWRhdGE0PSg0MCA0MSA0MiA0MykKLQlzdWJwcwl4bW0wLHhtbTIJCTsgeG1tMD1kYXRhNT0oNTAgNTEgNTIgNTMpCi0Jc3VicHMJeG1tMyx4bW00CQk7IHhtbTM9ZGF0YTM9KDMwIDMxIDMyIDMzKQorICAgICAgICBhZGRwcyAgIHhtbTQseG1tMiAgICAgICAgICAgICAgIDsgeG1tND10bXA0CisgICAgICAgIG1vdmFwcyAgeG1tMCx4bW03CisgICAgICAgIG1vdmFwcyAgeG1tMyx4bW01CisgICAgICAgIGFkZHBzICAgeG1tNyx4bW0yICAgICAgICAgICAgICAgOyB4bW03PWRhdGEyPSgyMCAyMSAyMiAyMykKKyAgICAgICAgYWRkcHMgICB4bW01LHhtbTQgICAgICAgICAgICAgICA7IHhtbTU9ZGF0YTQ9KDQwIDQxIDQyIDQzKQorICAgICAgICBzdWJwcyAgIHhtbTAseG1tMiAgICAgICAgICAgICAgIDsgeG1tMD1kYXRhNT0oNTAgNTEgNTIgNTMpCisgICAgICAgIHN1YnBzICAgeG1tMyx4bW00ICAgICAgICAgICAgICAgOyB4bW0zPWRhdGEzPSgzMCAzMSAzMiAzMykKIAotCW1vdmFwcyAgICB4bW0yLHhtbTcJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQotCXVucGNrbHBzICB4bW03LHhtbTMJCTsgeG1tNz0oMjAgMzAgMjEgMzEpCi0JdW5wY2tocHMgIHhtbTIseG1tMwkJOyB4bW0yPSgyMiAzMiAyMyAzMykKLQltb3ZhcHMgICAgeG1tNCx4bW01CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKLQl1bnBja2xwcyAgeG1tNSx4bW0wCQk7IHhtbTU9KDQwIDUwIDQxIDUxKQotCXVucGNraHBzICB4bW00LHhtbTAJCTsgeG1tND0oNDIgNTIgNDMgNTMpCisgICAgICAgIG1vdmFwcyAgICB4bW0yLHhtbTcgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgICAgIHVucGNrbHBzICB4bW03LHhtbTMgICAgICAgICAgICAgOyB4bW03PSgyMCAzMCAyMSAzMSkKKyAgICAgICAgdW5wY2tocHMgIHhtbTIseG1tMyAgICAgICAgICAgICA7IHhtbTI9KDIyIDMyIDIzIDMzKQorICAgICAgICBtb3ZhcHMgICAgeG1tNCx4bW01ICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgICAgICB1bnBja2xwcyAgeG1tNSx4bW0wICAgICAgICAgICAgIDsgeG1tNT0oNDAgNTAgNDEgNTEpCisgICAgICAgIHVucGNraHBzICB4bW00LHhtbTAgICAgICAgICAgICAgOyB4bW00PSg0MiA1MiA0MyA1MykKIAotCW1vdmFwcyAgICB4bW0zLHhtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQotCXVucGNrbHBzMiB4bW02LHhtbTcJCTsgeG1tNj0oMDAgMTAgMjAgMzApCi0JdW5wY2tocHMyIHhtbTMseG1tNwkJOyB4bW0zPSgwMSAxMSAyMSAzMSkKLQltb3ZhcHMgICAgeG1tMCx4bW0xCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKLQl1bnBja2xwczIgeG1tMSx4bW0yCQk7IHhtbTE9KDAyIDEyIDIyIDMyKQotCXVucGNraHBzMiB4bW0wLHhtbTIJCTsgeG1tMD0oMDMgMTMgMjMgMzMpCisgICAgICAgIG1vdmFwcyAgICB4bW0zLHhtbTYgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgICAgIHVucGNrbHBzMiB4bW02LHhtbTcgICAgICAgICAgICAgOyB4bW02PSgwMCAxMCAyMCAzMCkKKyAgICAgICAgdW5wY2tocHMyIHhtbTMseG1tNyAgICAgICAgICAgICA7IHhtbTM9KDAxIDExIDIxIDMxKQorICAgICAgICBtb3ZhcHMgICAgeG1tMCx4bW0xICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgICAgICB1bnBja2xwczIgeG1tMSx4bW0yICAgICAgICAgICAgIDsgeG1tMT0oMDIgMTIgMjIgMzIpCisgICAgICAgIHVucGNraHBzMiB4bW0wLHhtbTIgICAgICAgICAgICAgOyB4bW0wPSgwMyAxMyAyMyAzMykKIAotCW1vdmFwcwl4bW03LCBYTU1XT1JEIFt3aygwKV0JOyB4bW03PSg2MCA3MCA2MSA3MSkKLQltb3ZhcHMJeG1tMiwgWE1NV09SRCBbd2soMSldCTsgeG1tMj0oNjIgNzIgNjMgNzMpCisgICAgICAgIG1vdmFwcyAgeG1tNywgWE1NV09SRCBbd2soMCldICAgOyB4bW03PSg2MCA3MCA2MSA3MSkKKyAgICAgICAgbW92YXBzICB4bW0yLCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTI9KDYyIDcyIDYzIDczKQogCi0JbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNgotCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygxLDAsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTMKLQltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMiwwLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0xCi0JbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDMsMCxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMAorICAgICAgICBtb3ZhcHMgIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNgorICAgICAgICBtb3ZhcHMgIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMworICAgICAgICBtb3ZhcHMgIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMQorICAgICAgICBtb3ZhcHMgIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMAogCi0JbW92YXBzICAgIHhtbTYseG1tNQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCi0JdW5wY2tscHMyIHhtbTUseG1tNwkJOyB4bW01PSg0MCA1MCA2MCA3MCkKLQl1bnBja2hwczIgeG1tNix4bW03CQk7IHhtbTY9KDQxIDUxIDYxIDcxKQotCW1vdmFwcyAgICB4bW0zLHhtbTQJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQotCXVucGNrbHBzMiB4bW00LHhtbTIJCTsgeG1tND0oNDIgNTIgNjIgNzIpCi0JdW5wY2tocHMyIHhtbTMseG1tMgkJOyB4bW0zPSg0MyA1MyA2MyA3MykKKyAgICAgICAgbW92YXBzICAgIHhtbTYseG1tNSAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICAgICAgdW5wY2tscHMyIHhtbTUseG1tNyAgICAgICAgICAgICA7IHhtbTU9KDQwIDUwIDYwIDcwKQorICAgICAgICB1bnBja2hwczIgeG1tNix4bW03ICAgICAgICAgICAgIDsgeG1tNj0oNDEgNTEgNjEgNzEpCisgICAgICAgIG1vdmFwcyAgICB4bW0zLHhtbTQgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisgICAgICAgIHVucGNrbHBzMiB4bW00LHhtbTIgICAgICAgICAgICAgOyB4bW00PSg0MiA1MiA2MiA3MikKKyAgICAgICAgdW5wY2tocHMyIHhtbTMseG1tMiAgICAgICAgICAgICA7IHhtbTM9KDQzIDUzIDYzIDczKQogCi0JbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDAsMSxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNQotCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygxLDEsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTYKLQltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMiwxLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW00Ci0JbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDMsMSxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMworICAgICAgICBtb3ZhcHMgIFhNTVdPUkQgW1hNTUJMT0NLKDAsMSxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNQorICAgICAgICBtb3ZhcHMgIFhNTVdPUkQgW1hNTUJMT0NLKDEsMSxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNgorICAgICAgICBtb3ZhcHMgIFhNTVdPUkQgW1hNTUJMT0NLKDIsMSxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNAorICAgICAgICBtb3ZhcHMgIFhNTVdPUkQgW1hNTUJMT0NLKDMsMSxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMwogCiAubmV4dGNvbHVtbjoKLQlhZGQJZXNpLCBieXRlIDQqU0laRU9GX0pDT0VGCQk7IGNvZWZfYmxvY2sKLQlhZGQJZWR4LCBieXRlIDQqU0laRU9GX0ZMT0FUX01VTFRfVFlQRQk7IHF1YW50cHRyCi0JYWRkCWVkaSwgICAgICA0KkRDVFNJWkUqU0laRU9GX0ZBU1RfRkxPQVQJOyB3c3B0cgotCWRlYwllY3gJCQkJCTsgY3RyCi0Jam56CW5lYXIgLmNvbHVtbmxvb3AKKyAgICAgICAgYWRkICAgICBlc2ksIGJ5dGUgNCpTSVpFT0ZfSkNPRUYgICAgICAgICAgICAgICAgOyBjb2VmX2Jsb2NrCisgICAgICAgIGFkZCAgICAgZWR4LCBieXRlIDQqU0laRU9GX0ZMT0FUX01VTFRfVFlQRSAgICAgIDsgcXVhbnRwdHIKKyAgICAgICAgYWRkICAgICBlZGksICAgICAgNCpEQ1RTSVpFKlNJWkVPRl9GQVNUX0ZMT0FUICAgOyB3c3B0cgorICAgICAgICBkZWMgICAgIGVjeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IGN0cgorICAgICAgICBqbnogICAgIG5lYXIgLmNvbHVtbmxvb3AKIAotCTsgLS0gUHJlZmV0Y2ggdGhlIG5leHQgY29lZmZpY2llbnQgYmxvY2sKKyAgICAgICAgOyAtLSBQcmVmZXRjaCB0aGUgbmV4dCBjb2VmZmljaWVudCBibG9jawogCi0JcHJlZmV0Y2hudGEgW2VzaSArIChEQ1RTSVpFMi04KSpTSVpFT0ZfSkNPRUYgKyAwKjMyXQotCXByZWZldGNobnRhIFtlc2kgKyAoRENUU0laRTItOCkqU0laRU9GX0pDT0VGICsgMSozMl0KLQlwcmVmZXRjaG50YSBbZXNpICsgKERDVFNJWkUyLTgpKlNJWkVPRl9KQ09FRiArIDIqMzJdCi0JcHJlZmV0Y2hudGEgW2VzaSArIChEQ1RTSVpFMi04KSpTSVpFT0ZfSkNPRUYgKyAzKjMyXQorICAgICAgICBwcmVmZXRjaG50YSBbZXNpICsgKERDVFNJWkUyLTgpKlNJWkVPRl9KQ09FRiArIDAqMzJdCisgICAgICAgIHByZWZldGNobnRhIFtlc2kgKyAoRENUU0laRTItOCkqU0laRU9GX0pDT0VGICsgMSozMl0KKyAgICAgICAgcHJlZmV0Y2hudGEgW2VzaSArIChEQ1RTSVpFMi04KSpTSVpFT0ZfSkNPRUYgKyAyKjMyXQorICAgICAgICBwcmVmZXRjaG50YSBbZXNpICsgKERDVFNJWkUyLTgpKlNJWkVPRl9KQ09FRiArIDMqMzJdCiAKLQk7IC0tLS0gUGFzcyAyOiBwcm9jZXNzIHJvd3MgZnJvbSB3b3JrIGFycmF5LCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4KKyAgICAgICAgOyAtLS0tIFBhc3MgMjogcHJvY2VzcyByb3dzIGZyb20gd29yayBhcnJheSwgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuCiAKLQltb3YJZWF4LCBbb3JpZ2luYWxfZWJwXQotCWxlYQllc2ksIFt3b3Jrc3BhY2VdCQkJOyBGQVNUX0ZMT0FUICogd3NwdHIKLQltb3YJZWRpLCBKU0FNUEFSUkFZIFtvdXRwdXRfYnVmKGVheCldCTsgKEpTQU1QUk9XICopCi0JbW92CWVheCwgSkRJTUVOU0lPTiBbb3V0cHV0X2NvbChlYXgpXQotCW1vdgllY3gsIERDVFNJWkUvNAkJCQk7IGN0cgotCWFsaWdueAkxNiw3CisgICAgICAgIG1vdiAgICAgZWF4LCBbb3JpZ2luYWxfZWJwXQorICAgICAgICBsZWEgICAgIGVzaSwgW3dvcmtzcGFjZV0gICAgICAgICAgICAgICAgICAgICAgICA7IEZBU1RfRkxPQVQgKiB3c3B0cgorICAgICAgICBtb3YgICAgIGVkaSwgSlNBTVBBUlJBWSBbb3V0cHV0X2J1ZihlYXgpXSAgICAgICA7IChKU0FNUFJPVyAqKQorICAgICAgICBtb3YgICAgIGVheCwgSkRJTUVOU0lPTiBbb3V0cHV0X2NvbChlYXgpXQorICAgICAgICBtb3YgICAgIGVjeCwgRENUU0laRS80ICAgICAgICAgICAgICAgICAgICAgICAgICA7IGN0cgorICAgICAgICBhbGlnbnggIDE2LDcKIC5yb3dsb29wOgogCi0JOyAtLSBFdmVuIHBhcnQKKyAgICAgICAgOyAtLSBFdmVuIHBhcnQKIAotCW1vdmFwcwl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KLQltb3ZhcHMJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMiwwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCi0JbW92YXBzCXhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDQsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQotCW1vdmFwcwl4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg2LDAsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICAgICAgbW92YXBzICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICAgICAgbW92YXBzICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygyLDAsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICAgICAgbW92YXBzICB4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSyg0LDAsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKyAgICAgICAgbW92YXBzICB4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg2LDAsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KIAotCW1vdmFwcwl4bW00LHhtbTAKLQltb3ZhcHMJeG1tNSx4bW0xCi0Jc3VicHMJeG1tMCx4bW0yCQk7IHhtbTA9dG1wMTEKLQlzdWJwcwl4bW0xLHhtbTMKLQlhZGRwcwl4bW00LHhtbTIJCTsgeG1tND10bXAxMAotCWFkZHBzCXhtbTUseG1tMwkJOyB4bW01PXRtcDEzCisgICAgICAgIG1vdmFwcyAgeG1tNCx4bW0wCisgICAgICAgIG1vdmFwcyAgeG1tNSx4bW0xCisgICAgICAgIHN1YnBzICAgeG1tMCx4bW0yICAgICAgICAgICAgICAgOyB4bW0wPXRtcDExCisgICAgICAgIHN1YnBzICAgeG1tMSx4bW0zCisgICAgICAgIGFkZHBzICAgeG1tNCx4bW0yICAgICAgICAgICAgICAgOyB4bW00PXRtcDEwCisgICAgICAgIGFkZHBzICAgeG1tNSx4bW0zICAgICAgICAgICAgICAgOyB4bW01PXRtcDEzCiAKLQltdWxwcwl4bW0xLFtHT1RPRkYoZWJ4LFBEXzFfNDE0KV0KLQlzdWJwcwl4bW0xLHhtbTUJCTsgeG1tMT10bXAxMgorICAgICAgICBtdWxwcyAgIHhtbTEsW0dPVE9GRihlYngsUERfMV80MTQpXQorICAgICAgICBzdWJwcyAgIHhtbTEseG1tNSAgICAgICAgICAgICAgIDsgeG1tMT10bXAxMgogCi0JbW92YXBzCXhtbTYseG1tNAotCW1vdmFwcwl4bW03LHhtbTAKLQlzdWJwcwl4bW00LHhtbTUJCTsgeG1tND10bXAzCi0Jc3VicHMJeG1tMCx4bW0xCQk7IHhtbTA9dG1wMgotCWFkZHBzCXhtbTYseG1tNQkJOyB4bW02PXRtcDAKLQlhZGRwcwl4bW03LHhtbTEJCTsgeG1tNz10bXAxCisgICAgICAgIG1vdmFwcyAgeG1tNix4bW00CisgICAgICAgIG1vdmFwcyAgeG1tNyx4bW0wCisgICAgICAgIHN1YnBzICAgeG1tNCx4bW01ICAgICAgICAgICAgICAgOyB4bW00PXRtcDMKKyAgICAgICAgc3VicHMgICB4bW0wLHhtbTEgICAgICAgICAgICAgICA7IHhtbTA9dG1wMgorICAgICAgICBhZGRwcyAgIHhtbTYseG1tNSAgICAgICAgICAgICAgIDsgeG1tNj10bXAwCisgICAgICAgIGFkZHBzICAgeG1tNyx4bW0xICAgICAgICAgICAgICAgOyB4bW03PXRtcDEKIAotCW1vdmFwcwlYTU1XT1JEIFt3aygxKV0sIHhtbTQJOyB0bXAzCi0JbW92YXBzCVhNTVdPUkQgW3drKDApXSwgeG1tMAk7IHRtcDIKKyAgICAgICAgbW92YXBzICBYTU1XT1JEIFt3aygxKV0sIHhtbTQgICA7IHRtcDMKKyAgICAgICAgbW92YXBzICBYTU1XT1JEIFt3aygwKV0sIHhtbTAgICA7IHRtcDIKIAotCTsgLS0gT2RkIHBhcnQKKyAgICAgICAgOyAtLSBPZGQgcGFydAogCi0JbW92YXBzCXhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQotCW1vdmFwcwl4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KLQltb3ZhcHMJeG1tNSwgWE1NV09SRCBbWE1NQkxPQ0soNSwwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCi0JbW92YXBzCXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgICAgICBtb3ZhcHMgIHhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgICAgICBtb3ZhcHMgIHhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgICAgICBtb3ZhcHMgIHhtbTUsIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorICAgICAgICBtb3ZhcHMgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQogCi0JbW92YXBzCXhtbTQseG1tMgotCW1vdmFwcwl4bW0wLHhtbTUKLQlhZGRwcwl4bW0yLHhtbTEJCTsgeG1tMj16MTEKLQlhZGRwcwl4bW01LHhtbTMJCTsgeG1tNT16MTMKLQlzdWJwcwl4bW00LHhtbTEJCTsgeG1tND16MTIKLQlzdWJwcwl4bW0wLHhtbTMJCTsgeG1tMD16MTAKKyAgICAgICAgbW92YXBzICB4bW00LHhtbTIKKyAgICAgICAgbW92YXBzICB4bW0wLHhtbTUKKyAgICAgICAgYWRkcHMgICB4bW0yLHhtbTEgICAgICAgICAgICAgICA7IHhtbTI9ejExCisgICAgICAgIGFkZHBzICAgeG1tNSx4bW0zICAgICAgICAgICAgICAgOyB4bW01PXoxMworICAgICAgICBzdWJwcyAgIHhtbTQseG1tMSAgICAgICAgICAgICAgIDsgeG1tND16MTIKKyAgICAgICAgc3VicHMgICB4bW0wLHhtbTMgICAgICAgICAgICAgICA7IHhtbTA9ejEwCiAKLQltb3ZhcHMJeG1tMSx4bW0yCi0Jc3VicHMJeG1tMix4bW01Ci0JYWRkcHMJeG1tMSx4bW01CQk7IHhtbTE9dG1wNworICAgICAgICBtb3ZhcHMgIHhtbTEseG1tMgorICAgICAgICBzdWJwcyAgIHhtbTIseG1tNQorICAgICAgICBhZGRwcyAgIHhtbTEseG1tNSAgICAgICAgICAgICAgIDsgeG1tMT10bXA3CiAKLQltdWxwcwl4bW0yLFtHT1RPRkYoZWJ4LFBEXzFfNDE0KV0JOyB4bW0yPXRtcDExCisgICAgICAgIG11bHBzICAgeG1tMixbR09UT0ZGKGVieCxQRF8xXzQxNCldICAgICA7IHhtbTI9dG1wMTEKIAotCW1vdmFwcwl4bW0zLHhtbTAKLQlhZGRwcwl4bW0wLHhtbTQKLQltdWxwcwl4bW0wLFtHT1RPRkYoZWJ4LFBEXzFfODQ3KV0JOyB4bW0wPXo1Ci0JbXVscHMJeG1tMyxbR09UT0ZGKGVieCxQRF9NMl82MTMpXQk7IHhtbTM9KHoxMCAqIC0yLjYxMzEyNTkzMCkKLQltdWxwcwl4bW00LFtHT1RPRkYoZWJ4LFBEXzFfMDgyKV0JOyB4bW00PSh6MTIgKiAxLjA4MjM5MjIwMCkKLQlhZGRwcwl4bW0zLHhtbTAJCTsgeG1tMz10bXAxMgotCXN1YnBzCXhtbTQseG1tMAkJOyB4bW00PXRtcDEwCisgICAgICAgIG1vdmFwcyAgeG1tMyx4bW0wCisgICAgICAgIGFkZHBzICAgeG1tMCx4bW00CisgICAgICAgIG11bHBzICAgeG1tMCxbR09UT0ZGKGVieCxQRF8xXzg0NyldICAgICA7IHhtbTA9ejUKKyAgICAgICAgbXVscHMgICB4bW0zLFtHT1RPRkYoZWJ4LFBEX00yXzYxMyldICAgIDsgeG1tMz0oejEwICogLTIuNjEzMTI1OTMwKQorICAgICAgICBtdWxwcyAgIHhtbTQsW0dPVE9GRihlYngsUERfMV8wODIpXSAgICAgOyB4bW00PSh6MTIgKiAxLjA4MjM5MjIwMCkKKyAgICAgICAgYWRkcHMgICB4bW0zLHhtbTAgICAgICAgICAgICAgICA7IHhtbTM9dG1wMTIKKyAgICAgICAgc3VicHMgICB4bW00LHhtbTAgICAgICAgICAgICAgICA7IHhtbTQ9dG1wMTAKIAotCTsgLS0gRmluYWwgb3V0cHV0IHN0YWdlCisgICAgICAgIDsgLS0gRmluYWwgb3V0cHV0IHN0YWdlCiAKLQlzdWJwcwl4bW0zLHhtbTEJCTsgeG1tMz10bXA2Ci0JbW92YXBzCXhtbTUseG1tNgotCW1vdmFwcwl4bW0wLHhtbTcKLQlhZGRwcwl4bW02LHhtbTEJCTsgeG1tNj1kYXRhMD0oMDAgMTAgMjAgMzApCi0JYWRkcHMJeG1tNyx4bW0zCQk7IHhtbTc9ZGF0YTE9KDAxIDExIDIxIDMxKQotCXN1YnBzCXhtbTUseG1tMQkJOyB4bW01PWRhdGE3PSgwNyAxNyAyNyAzNykKLQlzdWJwcwl4bW0wLHhtbTMJCTsgeG1tMD1kYXRhNj0oMDYgMTYgMjYgMzYpCi0Jc3VicHMJeG1tMix4bW0zCQk7IHhtbTI9dG1wNQorICAgICAgICBzdWJwcyAgIHhtbTMseG1tMSAgICAgICAgICAgICAgIDsgeG1tMz10bXA2CisgICAgICAgIG1vdmFwcyAgeG1tNSx4bW02CisgICAgICAgIG1vdmFwcyAgeG1tMCx4bW03CisgICAgICAgIGFkZHBzICAgeG1tNix4bW0xICAgICAgICAgICAgICAgOyB4bW02PWRhdGEwPSgwMCAxMCAyMCAzMCkKKyAgICAgICAgYWRkcHMgICB4bW03LHhtbTMgICAgICAgICAgICAgICA7IHhtbTc9ZGF0YTE9KDAxIDExIDIxIDMxKQorICAgICAgICBzdWJwcyAgIHhtbTUseG1tMSAgICAgICAgICAgICAgIDsgeG1tNT1kYXRhNz0oMDcgMTcgMjcgMzcpCisgICAgICAgIHN1YnBzICAgeG1tMCx4bW0zICAgICAgICAgICAgICAgOyB4bW0wPWRhdGE2PSgwNiAxNiAyNiAzNikKKyAgICAgICAgc3VicHMgICB4bW0yLHhtbTMgICAgICAgICAgICAgICA7IHhtbTI9dG1wNQogCi0JbW92YXBzCXhtbTEsW0dPVE9GRihlYngsUERfMF8xMjUpXQk7IHhtbTE9W1BEXzBfMTI1XQorICAgICAgICBtb3ZhcHMgIHhtbTEsW0dPVE9GRihlYngsUERfMF8xMjUpXSAgICAgOyB4bW0xPVtQRF8wXzEyNV0KIAotCW11bHBzCXhtbTYseG1tMQkJOyBkZXNjYWxlKDEvOCkKLQltdWxwcwl4bW03LHhtbTEJCTsgZGVzY2FsZSgxLzgpCi0JbXVscHMJeG1tNSx4bW0xCQk7IGRlc2NhbGUoMS84KQotCW11bHBzCXhtbTAseG1tMQkJOyBkZXNjYWxlKDEvOCkKKyAgICAgICAgbXVscHMgICB4bW02LHhtbTEgICAgICAgICAgICAgICA7IGRlc2NhbGUoMS84KQorICAgICAgICBtdWxwcyAgIHhtbTcseG1tMSAgICAgICAgICAgICAgIDsgZGVzY2FsZSgxLzgpCisgICAgICAgIG11bHBzICAgeG1tNSx4bW0xICAgICAgICAgICAgICAgOyBkZXNjYWxlKDEvOCkKKyAgICAgICAgbXVscHMgICB4bW0wLHhtbTEgICAgICAgICAgICAgICA7IGRlc2NhbGUoMS84KQogCi0JbW92aGxwcyAgIHhtbTMseG1tNgotCW1vdmhscHMgICB4bW0xLHhtbTcKLQljdnRwczJwaSAgbW0wLHhtbTYJCTsgcm91bmQgdG8gaW50MzIsIG1tMD1kYXRhMEw9KDAwIDEwKQotCWN2dHBzMnBpICBtbTEseG1tNwkJOyByb3VuZCB0byBpbnQzMiwgbW0xPWRhdGExTD0oMDEgMTEpCi0JY3Z0cHMycGkgIG1tMix4bW0zCQk7IHJvdW5kIHRvIGludDMyLCBtbTI9ZGF0YTBIPSgyMCAzMCkKLQljdnRwczJwaSAgbW0zLHhtbTEJCTsgcm91bmQgdG8gaW50MzIsIG1tMz1kYXRhMUg9KDIxIDMxKQotCXBhY2tzc2R3ICBtbTAsbW0yCQk7IG1tMD1kYXRhMD0oMDAgMTAgMjAgMzApCi0JcGFja3NzZHcgIG1tMSxtbTMJCTsgbW0xPWRhdGExPSgwMSAxMSAyMSAzMSkKKyAgICAgICAgbW92aGxwcyAgIHhtbTMseG1tNgorICAgICAgICBtb3ZobHBzICAgeG1tMSx4bW03CisgICAgICAgIGN2dHBzMnBpICBtbTAseG1tNiAgICAgICAgICAgICAgOyByb3VuZCB0byBpbnQzMiwgbW0wPWRhdGEwTD0oMDAgMTApCisgICAgICAgIGN2dHBzMnBpICBtbTEseG1tNyAgICAgICAgICAgICAgOyByb3VuZCB0byBpbnQzMiwgbW0xPWRhdGExTD0oMDEgMTEpCisgICAgICAgIGN2dHBzMnBpICBtbTIseG1tMyAgICAgICAgICAgICAgOyByb3VuZCB0byBpbnQzMiwgbW0yPWRhdGEwSD0oMjAgMzApCisgICAgICAgIGN2dHBzMnBpICBtbTMseG1tMSAgICAgICAgICAgICAgOyByb3VuZCB0byBpbnQzMiwgbW0zPWRhdGExSD0oMjEgMzEpCisgICAgICAgIHBhY2tzc2R3ICBtbTAsbW0yICAgICAgICAgICAgICAgOyBtbTA9ZGF0YTA9KDAwIDEwIDIwIDMwKQorICAgICAgICBwYWNrc3NkdyAgbW0xLG1tMyAgICAgICAgICAgICAgIDsgbW0xPWRhdGExPSgwMSAxMSAyMSAzMSkKIAotCW1vdmhscHMgICB4bW02LHhtbTUKLQltb3ZobHBzICAgeG1tNyx4bW0wCi0JY3Z0cHMycGkgIG1tNCx4bW01CQk7IHJvdW5kIHRvIGludDMyLCBtbTQ9ZGF0YTdMPSgwNyAxNykKLQljdnRwczJwaSAgbW01LHhtbTAJCTsgcm91bmQgdG8gaW50MzIsIG1tNT1kYXRhNkw9KDA2IDE2KQotCWN2dHBzMnBpICBtbTYseG1tNgkJOyByb3VuZCB0byBpbnQzMiwgbW02PWRhdGE3SD0oMjcgMzcpCi0JY3Z0cHMycGkgIG1tNyx4bW03CQk7IHJvdW5kIHRvIGludDMyLCBtbTc9ZGF0YTZIPSgyNiAzNikKLQlwYWNrc3NkdyAgbW00LG1tNgkJOyBtbTQ9ZGF0YTc9KDA3IDE3IDI3IDM3KQotCXBhY2tzc2R3ICBtbTUsbW03CQk7IG1tNT1kYXRhNj0oMDYgMTYgMjYgMzYpCisgICAgICAgIG1vdmhscHMgICB4bW02LHhtbTUKKyAgICAgICAgbW92aGxwcyAgIHhtbTcseG1tMAorICAgICAgICBjdnRwczJwaSAgbW00LHhtbTUgICAgICAgICAgICAgIDsgcm91bmQgdG8gaW50MzIsIG1tND1kYXRhN0w9KDA3IDE3KQorICAgICAgICBjdnRwczJwaSAgbW01LHhtbTAgICAgICAgICAgICAgIDsgcm91bmQgdG8gaW50MzIsIG1tNT1kYXRhNkw9KDA2IDE2KQorICAgICAgICBjdnRwczJwaSAgbW02LHhtbTYgICAgICAgICAgICAgIDsgcm91bmQgdG8gaW50MzIsIG1tNj1kYXRhN0g9KDI3IDM3KQorICAgICAgICBjdnRwczJwaSAgbW03LHhtbTcgICAgICAgICAgICAgIDsgcm91bmQgdG8gaW50MzIsIG1tNz1kYXRhNkg9KDI2IDM2KQorICAgICAgICBwYWNrc3NkdyAgbW00LG1tNiAgICAgICAgICAgICAgIDsgbW00PWRhdGE3PSgwNyAxNyAyNyAzNykKKyAgICAgICAgcGFja3NzZHcgIG1tNSxtbTcgICAgICAgICAgICAgICA7IG1tNT1kYXRhNj0oMDYgMTYgMjYgMzYpCiAKLQlwYWNrc3N3YiAgbW0wLG1tNQkJOyBtbTA9KDAwIDEwIDIwIDMwIDA2IDE2IDI2IDM2KQotCXBhY2tzc3diICBtbTEsbW00CQk7IG1tMT0oMDEgMTEgMjEgMzEgMDcgMTcgMjcgMzcpCisgICAgICAgIHBhY2tzc3diICBtbTAsbW01ICAgICAgICAgICAgICAgOyBtbTA9KDAwIDEwIDIwIDMwIDA2IDE2IDI2IDM2KQorICAgICAgICBwYWNrc3N3YiAgbW0xLG1tNCAgICAgICAgICAgICAgIDsgbW0xPSgwMSAxMSAyMSAzMSAwNyAxNyAyNyAzNykKIAotCW1vdmFwcwl4bW0zLCBYTU1XT1JEIFt3aygwKV0JOyB4bW0zPXRtcDIKLQltb3ZhcHMJeG1tMSwgWE1NV09SRCBbd2soMSldCTsgeG1tMT10bXAzCisgICAgICAgIG1vdmFwcyAgeG1tMywgWE1NV09SRCBbd2soMCldICAgOyB4bW0zPXRtcDIKKyAgICAgICAgbW92YXBzICB4bW0xLCBYTU1XT1JEIFt3aygxKV0gICA7IHhtbTE9dG1wMwogCi0JbW92YXBzCXhtbTYsW0dPVE9GRihlYngsUERfMF8xMjUpXQk7IHhtbTY9W1BEXzBfMTI1XQorICAgICAgICBtb3ZhcHMgIHhtbTYsW0dPVE9GRihlYngsUERfMF8xMjUpXSAgICAgOyB4bW02PVtQRF8wXzEyNV0KIAotCWFkZHBzCXhtbTQseG1tMgkJOyB4bW00PXRtcDQKLQltb3ZhcHMJeG1tNSx4bW0zCi0JbW92YXBzCXhtbTAseG1tMQotCWFkZHBzCXhtbTMseG1tMgkJOyB4bW0zPWRhdGEyPSgwMiAxMiAyMiAzMikKLQlhZGRwcwl4bW0xLHhtbTQJCTsgeG1tMT1kYXRhND0oMDQgMTQgMjQgMzQpCi0Jc3VicHMJeG1tNSx4bW0yCQk7IHhtbTU9ZGF0YTU9KDA1IDE1IDI1IDM1KQotCXN1YnBzCXhtbTAseG1tNAkJOyB4bW0wPWRhdGEzPSgwMyAxMyAyMyAzMykKKyAgICAgICAgYWRkcHMgICB4bW00LHhtbTIgICAgICAgICAgICAgICA7IHhtbTQ9dG1wNAorICAgICAgICBtb3ZhcHMgIHhtbTUseG1tMworICAgICAgICBtb3ZhcHMgIHhtbTAseG1tMQorICAgICAgICBhZGRwcyAgIHhtbTMseG1tMiAgICAgICAgICAgICAgIDsgeG1tMz1kYXRhMj0oMDIgMTIgMjIgMzIpCisgICAgICAgIGFkZHBzICAgeG1tMSx4bW00ICAgICAgICAgICAgICAgOyB4bW0xPWRhdGE0PSgwNCAxNCAyNCAzNCkKKyAgICAgICAgc3VicHMgICB4bW01LHhtbTIgICAgICAgICAgICAgICA7IHhtbTU9ZGF0YTU9KDA1IDE1IDI1IDM1KQorICAgICAgICBzdWJwcyAgIHhtbTAseG1tNCAgICAgICAgICAgICAgIDsgeG1tMD1kYXRhMz0oMDMgMTMgMjMgMzMpCiAKLQltdWxwcwl4bW0zLHhtbTYJCTsgZGVzY2FsZSgxLzgpCi0JbXVscHMJeG1tMSx4bW02CQk7IGRlc2NhbGUoMS84KQotCW11bHBzCXhtbTUseG1tNgkJOyBkZXNjYWxlKDEvOCkKLQltdWxwcwl4bW0wLHhtbTYJCTsgZGVzY2FsZSgxLzgpCisgICAgICAgIG11bHBzICAgeG1tMyx4bW02ICAgICAgICAgICAgICAgOyBkZXNjYWxlKDEvOCkKKyAgICAgICAgbXVscHMgICB4bW0xLHhtbTYgICAgICAgICAgICAgICA7IGRlc2NhbGUoMS84KQorICAgICAgICBtdWxwcyAgIHhtbTUseG1tNiAgICAgICAgICAgICAgIDsgZGVzY2FsZSgxLzgpCisgICAgICAgIG11bHBzICAgeG1tMCx4bW02ICAgICAgICAgICAgICAgOyBkZXNjYWxlKDEvOCkKIAotCW1vdmhscHMgICB4bW03LHhtbTMKLQltb3ZobHBzICAgeG1tMix4bW0xCi0JY3Z0cHMycGkgIG1tMix4bW0zCQk7IHJvdW5kIHRvIGludDMyLCBtbTI9ZGF0YTJMPSgwMiAxMikKLQljdnRwczJwaSAgbW0zLHhtbTEJCTsgcm91bmQgdG8gaW50MzIsIG1tMz1kYXRhNEw9KDA0IDE0KQotCWN2dHBzMnBpICBtbTYseG1tNwkJOyByb3VuZCB0byBpbnQzMiwgbW02PWRhdGEySD0oMjIgMzIpCi0JY3Z0cHMycGkgIG1tNyx4bW0yCQk7IHJvdW5kIHRvIGludDMyLCBtbTc9ZGF0YTRIPSgyNCAzNCkKLQlwYWNrc3NkdyAgbW0yLG1tNgkJOyBtbTI9ZGF0YTI9KDAyIDEyIDIyIDMyKQotCXBhY2tzc2R3ICBtbTMsbW03CQk7IG1tMz1kYXRhND0oMDQgMTQgMjQgMzQpCisgICAgICAgIG1vdmhscHMgICB4bW03LHhtbTMKKyAgICAgICAgbW92aGxwcyAgIHhtbTIseG1tMQorICAgICAgICBjdnRwczJwaSAgbW0yLHhtbTMgICAgICAgICAgICAgIDsgcm91bmQgdG8gaW50MzIsIG1tMj1kYXRhMkw9KDAyIDEyKQorICAgICAgICBjdnRwczJwaSAgbW0zLHhtbTEgICAgICAgICAgICAgIDsgcm91bmQgdG8gaW50MzIsIG1tMz1kYXRhNEw9KDA0IDE0KQorICAgICAgICBjdnRwczJwaSAgbW02LHhtbTcgICAgICAgICAgICAgIDsgcm91bmQgdG8gaW50MzIsIG1tNj1kYXRhMkg9KDIyIDMyKQorICAgICAgICBjdnRwczJwaSAgbW03LHhtbTIgICAgICAgICAgICAgIDsgcm91bmQgdG8gaW50MzIsIG1tNz1kYXRhNEg9KDI0IDM0KQorICAgICAgICBwYWNrc3NkdyAgbW0yLG1tNiAgICAgICAgICAgICAgIDsgbW0yPWRhdGEyPSgwMiAxMiAyMiAzMikKKyAgICAgICAgcGFja3NzZHcgIG1tMyxtbTcgICAgICAgICAgICAgICA7IG1tMz1kYXRhND0oMDQgMTQgMjQgMzQpCiAKLQltb3ZobHBzICAgeG1tNCx4bW01Ci0JbW92aGxwcyAgIHhtbTYseG1tMAotCWN2dHBzMnBpICBtbTUseG1tNQkJOyByb3VuZCB0byBpbnQzMiwgbW01PWRhdGE1TD0oMDUgMTUpCi0JY3Z0cHMycGkgIG1tNCx4bW0wCQk7IHJvdW5kIHRvIGludDMyLCBtbTQ9ZGF0YTNMPSgwMyAxMykKLQljdnRwczJwaSAgbW02LHhtbTQJCTsgcm91bmQgdG8gaW50MzIsIG1tNj1kYXRhNUg9KDI1IDM1KQotCWN2dHBzMnBpICBtbTcseG1tNgkJOyByb3VuZCB0byBpbnQzMiwgbW03PWRhdGEzSD0oMjMgMzMpCi0JcGFja3NzZHcgIG1tNSxtbTYJCTsgbW01PWRhdGE1PSgwNSAxNSAyNSAzNSkKLQlwYWNrc3NkdyAgbW00LG1tNwkJOyBtbTQ9ZGF0YTM9KDAzIDEzIDIzIDMzKQorICAgICAgICBtb3ZobHBzICAgeG1tNCx4bW01CisgICAgICAgIG1vdmhscHMgICB4bW02LHhtbTAKKyAgICAgICAgY3Z0cHMycGkgIG1tNSx4bW01ICAgICAgICAgICAgICA7IHJvdW5kIHRvIGludDMyLCBtbTU9ZGF0YTVMPSgwNSAxNSkKKyAgICAgICAgY3Z0cHMycGkgIG1tNCx4bW0wICAgICAgICAgICAgICA7IHJvdW5kIHRvIGludDMyLCBtbTQ9ZGF0YTNMPSgwMyAxMykKKyAgICAgICAgY3Z0cHMycGkgIG1tNix4bW00ICAgICAgICAgICAgICA7IHJvdW5kIHRvIGludDMyLCBtbTY9ZGF0YTVIPSgyNSAzNSkKKyAgICAgICAgY3Z0cHMycGkgIG1tNyx4bW02ICAgICAgICAgICAgICA7IHJvdW5kIHRvIGludDMyLCBtbTc9ZGF0YTNIPSgyMyAzMykKKyAgICAgICAgcGFja3NzZHcgIG1tNSxtbTYgICAgICAgICAgICAgICA7IG1tNT1kYXRhNT0oMDUgMTUgMjUgMzUpCisgICAgICAgIHBhY2tzc2R3ICBtbTQsbW03ICAgICAgICAgICAgICAgOyBtbTQ9ZGF0YTM9KDAzIDEzIDIzIDMzKQogCi0JbW92cSAgICAgIG1tNixbR09UT0ZGKGVieCxQQl9DRU5URVJKU0FNUCldCTsgbW02PVtQQl9DRU5URVJKU0FNUF0KKyAgICAgICAgbW92cSAgICAgIG1tNixbR09UT0ZGKGVieCxQQl9DRU5URVJKU0FNUCldICAgICAgOyBtbTY9W1BCX0NFTlRFUkpTQU1QXQogCi0JcGFja3Nzd2IgIG1tMixtbTMJCTsgbW0yPSgwMiAxMiAyMiAzMiAwNCAxNCAyNCAzNCkKLQlwYWNrc3N3YiAgbW00LG1tNQkJOyBtbTQ9KDAzIDEzIDIzIDMzIDA1IDE1IDI1IDM1KQorICAgICAgICBwYWNrc3N3YiAgbW0yLG1tMyAgICAgICAgICAgICAgIDsgbW0yPSgwMiAxMiAyMiAzMiAwNCAxNCAyNCAzNCkKKyAgICAgICAgcGFja3Nzd2IgIG1tNCxtbTUgICAgICAgICAgICAgICA7IG1tND0oMDMgMTMgMjMgMzMgMDUgMTUgMjUgMzUpCiAKLQlwYWRkYiAgICAgbW0wLG1tNgotCXBhZGRiICAgICBtbTEsbW02Ci0JcGFkZGIgICAgIG1tMixtbTYKLQlwYWRkYiAgICAgbW00LG1tNgorICAgICAgICBwYWRkYiAgICAgbW0wLG1tNgorICAgICAgICBwYWRkYiAgICAgbW0xLG1tNgorICAgICAgICBwYWRkYiAgICAgbW0yLG1tNgorICAgICAgICBwYWRkYiAgICAgbW00LG1tNgogCi0JbW92cSAgICAgIG1tNyxtbTAJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQotCXB1bnBja2xidyBtbTAsbW0xCQk7IG1tMD0oMDAgMDEgMTAgMTEgMjAgMjEgMzAgMzEpCi0JcHVucGNraGJ3IG1tNyxtbTEJCTsgbW03PSgwNiAwNyAxNiAxNyAyNiAyNyAzNiAzNykKLQltb3ZxICAgICAgbW0zLG1tMgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCi0JcHVucGNrbGJ3IG1tMixtbTQJCTsgbW0yPSgwMiAwMyAxMiAxMyAyMiAyMyAzMiAzMykKLQlwdW5wY2toYncgbW0zLG1tNAkJOyBtbTM9KDA0IDA1IDE0IDE1IDI0IDI1IDM0IDM1KQorICAgICAgICBtb3ZxICAgICAgbW03LG1tMCAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorICAgICAgICBwdW5wY2tsYncgbW0wLG1tMSAgICAgICAgICAgICAgIDsgbW0wPSgwMCAwMSAxMCAxMSAyMCAyMSAzMCAzMSkKKyAgICAgICAgcHVucGNraGJ3IG1tNyxtbTEgICAgICAgICAgICAgICA7IG1tNz0oMDYgMDcgMTYgMTcgMjYgMjcgMzYgMzcpCisgICAgICAgIG1vdnEgICAgICBtbTMsbW0yICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisgICAgICAgIHB1bnBja2xidyBtbTIsbW00ICAgICAgICAgICAgICAgOyBtbTI9KDAyIDAzIDEyIDEzIDIyIDIzIDMyIDMzKQorICAgICAgICBwdW5wY2toYncgbW0zLG1tNCAgICAgICAgICAgICAgIDsgbW0zPSgwNCAwNSAxNCAxNSAyNCAyNSAzNCAzNSkKIAotCW1vdnEgICAgICBtbTUsbW0wCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKLQlwdW5wY2tsd2QgbW0wLG1tMgkJOyBtbTA9KDAwIDAxIDAyIDAzIDEwIDExIDEyIDEzKQotCXB1bnBja2h3ZCBtbTUsbW0yCQk7IG1tNT0oMjAgMjEgMjIgMjMgMzAgMzEgMzIgMzMpCi0JbW92cSAgICAgIG1tNixtbTMJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQotCXB1bnBja2x3ZCBtbTMsbW03CQk7IG1tMz0oMDQgMDUgMDYgMDcgMTQgMTUgMTYgMTcpCi0JcHVucGNraHdkIG1tNixtbTcJCTsgbW02PSgyNCAyNSAyNiAyNyAzNCAzNSAzNiAzNykKKyAgICAgICAgbW92cSAgICAgIG1tNSxtbTAgICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKyAgICAgICAgcHVucGNrbHdkIG1tMCxtbTIgICAgICAgICAgICAgICA7IG1tMD0oMDAgMDEgMDIgMDMgMTAgMTEgMTIgMTMpCisgICAgICAgIHB1bnBja2h3ZCBtbTUsbW0yICAgICAgICAgICAgICAgOyBtbTU9KDIwIDIxIDIyIDIzIDMwIDMxIDMyIDMzKQorICAgICAgICBtb3ZxICAgICAgbW02LG1tMyAgICAgICAgICAgICAgIDsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorICAgICAgICBwdW5wY2tsd2QgbW0zLG1tNyAgICAgICAgICAgICAgIDsgbW0zPSgwNCAwNSAwNiAwNyAxNCAxNSAxNiAxNykKKyAgICAgICAgcHVucGNraHdkIG1tNixtbTcgICAgICAgICAgICAgICA7IG1tNj0oMjQgMjUgMjYgMjcgMzQgMzUgMzYgMzcpCiAKLQltb3ZxICAgICAgbW0xLG1tMAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCi0JcHVucGNrbGRxIG1tMCxtbTMJCTsgbW0wPSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNykKLQlwdW5wY2toZHEgbW0xLG1tMwkJOyBtbTE9KDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3KQotCW1vdnEgICAgICBtbTQsbW01CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKLQlwdW5wY2tsZHEgbW01LG1tNgkJOyBtbTU9KDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3KQotCXB1bnBja2hkcSBtbTQsbW02CQk7IG1tND0oMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcpCisgICAgICAgIG1vdnEgICAgICBtbTEsbW0wICAgICAgICAgICAgICAgOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisgICAgICAgIHB1bnBja2xkcSBtbTAsbW0zICAgICAgICAgICAgICAgOyBtbTA9KDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3KQorICAgICAgICBwdW5wY2toZHEgbW0xLG1tMyAgICAgICAgICAgICAgIDsgbW0xPSgxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNykKKyAgICAgICAgbW92cSAgICAgIG1tNCxtbTUgICAgICAgICAgICAgICA7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKyAgICAgICAgcHVucGNrbGRxIG1tNSxtbTYgICAgICAgICAgICAgICA7IG1tNT0oMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcpCisgICAgICAgIHB1bnBja2hkcSBtbTQsbW02ICAgICAgICAgICAgICAgOyBtbTQ9KDMwIDMxIDMyIDMzIDM0IDM1IDM2IDM3KQogCi0JcHVzaHBpYwllYngJCQk7IHNhdmUgR09UIGFkZHJlc3MKKyAgICAgICAgcHVzaHBpYyBlYnggICAgICAgICAgICAgICAgICAgICA7IHNhdmUgR09UIGFkZHJlc3MKIAotCW1vdgllZHgsIEpTQU1QUk9XIFtlZGkrMCpTSVpFT0ZfSlNBTVBST1ddCi0JbW92CWVieCwgSlNBTVBST1cgW2VkaSsxKlNJWkVPRl9KU0FNUFJPV10KLQltb3ZxCU1NV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIG1tMAotCW1vdnEJTU1XT1JEIFtlYngrZWF4KlNJWkVPRl9KU0FNUExFXSwgbW0xCi0JbW92CWVkeCwgSlNBTVBST1cgW2VkaSsyKlNJWkVPRl9KU0FNUFJPV10KLQltb3YJZWJ4LCBKU0FNUFJPVyBbZWRpKzMqU0laRU9GX0pTQU1QUk9XXQotCW1vdnEJTU1XT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXSwgbW01Ci0JbW92cQlNTVdPUkQgW2VieCtlYXgqU0laRU9GX0pTQU1QTEVdLCBtbTQKKyAgICAgICAgbW92ICAgICBlZHgsIEpTQU1QUk9XIFtlZGkrMCpTSVpFT0ZfSlNBTVBST1ddCisgICAgICAgIG1vdiAgICAgZWJ4LCBKU0FNUFJPVyBbZWRpKzEqU0laRU9GX0pTQU1QUk9XXQorICAgICAgICBtb3ZxICAgIE1NV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIG1tMAorICAgICAgICBtb3ZxICAgIE1NV09SRCBbZWJ4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIG1tMQorICAgICAgICBtb3YgICAgIGVkeCwgSlNBTVBST1cgW2VkaSsyKlNJWkVPRl9KU0FNUFJPV10KKyAgICAgICAgbW92ICAgICBlYngsIEpTQU1QUk9XIFtlZGkrMypTSVpFT0ZfSlNBTVBST1ddCisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXSwgbW01CisgICAgICAgIG1vdnEgICAgTU1XT1JEIFtlYngrZWF4KlNJWkVPRl9KU0FNUExFXSwgbW00CiAKLQlwb3BwaWMJZWJ4CQkJOyByZXN0b3JlIEdPVCBhZGRyZXNzCisgICAgICAgIHBvcHBpYyAgZWJ4ICAgICAgICAgICAgICAgICAgICAgOyByZXN0b3JlIEdPVCBhZGRyZXNzCiAKLQlhZGQJZXNpLCBieXRlIDQqU0laRU9GX0ZBU1RfRkxPQVQJOyB3c3B0cgotCWFkZAllZGksIGJ5dGUgNCpTSVpFT0ZfSlNBTVBST1cKLQlkZWMJZWN4CQkJCTsgY3RyCi0Jam56CW5lYXIgLnJvd2xvb3AKKyAgICAgICAgYWRkICAgICBlc2ksIGJ5dGUgNCpTSVpFT0ZfRkFTVF9GTE9BVCAgIDsgd3NwdHIKKyAgICAgICAgYWRkICAgICBlZGksIGJ5dGUgNCpTSVpFT0ZfSlNBTVBST1cKKyAgICAgICAgZGVjICAgICBlY3ggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgY3RyCisgICAgICAgIGpueiAgICAgbmVhciAucm93bG9vcAogCi0JZW1tcwkJOyBlbXB0eSBNTVggc3RhdGUKKyAgICAgICAgZW1tcyAgICAgICAgICAgIDsgZW1wdHkgTU1YIHN0YXRlCiAKLQlwb3AJZWRpCi0JcG9wCWVzaQotOwlwb3AJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotOwlwb3AJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotCXBvcAllYngKLQltb3YJZXNwLGVicAkJOyBlc3AgPC0gYWxpZ25lZCBlYnAKLQlwb3AJZXNwCQk7IGVzcCA8LSBvcmlnaW5hbCBlYnAKLQlwb3AJZWJwCi0JcmV0CisgICAgICAgIHBvcCAgICAgZWRpCisgICAgICAgIHBvcCAgICAgZXNpCis7ICAgICAgIHBvcCAgICAgZWR4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgICAgIHBvcCAgICAgZWN4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgICAgIHBvcCAgICAgZWJ4CisgICAgICAgIG1vdiAgICAgZXNwLGVicCAgICAgICAgIDsgZXNwIDwtIGFsaWduZWQgZWJwCisgICAgICAgIHBvcCAgICAgZXNwICAgICAgICAgICAgIDsgZXNwIDwtIG9yaWdpbmFsIGVicAorICAgICAgICBwb3AgICAgIGVicAorICAgICAgICByZXQKIAogOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKIDsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KLQlhbGlnbgkxNgorICAgICAgICBhbGlnbiAgIDE2CmRpZmYgLS1naXQgYS9zaW1kL2pzaW1kX2FybS5jIGIvc2ltZC9qc2ltZF9hcm0uYwppbmRleCBjYWU4NGRmLi5kNWNmNmE2IDEwMDY0NAotLS0gYS9zaW1kL2pzaW1kX2FybS5jCisrKyBiL3NpbWQvanNpbWRfYXJtLmMKQEAgLTMsMTYgKzMsMTQgQEAKICAqCiAgKiBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCiAgKiBDb3B5cmlnaHQgMjAwOS0yMDExIEQuIFIuIENvbW1hbmRlcgotICogCisgKgogICogQmFzZWQgb24gdGhlIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeSwKICAqIENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCiAgKgogICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgIm5vcm1hbCIgcG9ydGlvbnMKLSAqIG9mIHRoZSBsaWJyYXJ5IGFuZCB0aGUgU0lNRCBpbXBsZW1lbnRhdGlvbnMgd2hlbiBydW5uaW5nIG9uCi0gKiBBUk0gYXJjaGl0ZWN0dXJlLgotICoKLSAqIEJhc2VkIG9uIHRoZSBzdHVicyBmcm9tICdqc2ltZF9ub25lLmMnCisgKiBvZiB0aGUgbGlicmFyeSBhbmQgdGhlIFNJTUQgaW1wbGVtZW50YXRpb25zIHdoZW4gcnVubmluZyBvbiBhCisgKiAzMi1iaXQgQVJNIGFyY2hpdGVjdHVyZS4KICAqLwogCiAjZGVmaW5lIEpQRUdfSU5URVJOQUxTCkBAIC0xNzAsNiArMTY4LDcgQEAKICAgICByZXR1cm4gMDsKICAgaWYgKChSR0JfUElYRUxTSVpFICE9IDMpICYmIChSR0JfUElYRUxTSVpFICE9IDQpKQogICAgIHJldHVybiAwOworCiAgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9BUk1fTkVPTikKICAgICByZXR1cm4gMTsKIApAQCAtMTgzLDggKzE4Miw3IEBACiB7CiAgIHZvaWQgKCpuZW9uZmN0KShKRElNRU5TSU9OLCBKU0FNUEFSUkFZLCBKU0FNUElNQUdFLCBKRElNRU5TSU9OLCBpbnQpOwogCi0gIHN3aXRjaChjaW5mby0+aW5fY29sb3Jfc3BhY2UpCi0gIHsKKyAgc3dpdGNoKGNpbmZvLT5pbl9jb2xvcl9zcGFjZSkgewogICAgIGNhc2UgSkNTX0VYVF9SR0I6CiAgICAgICBuZW9uZmN0PWpzaW1kX2V4dHJnYl95Y2NfY29udmVydF9uZW9uOwogICAgICAgYnJlYWs7CkBAIC0yMTMsOCArMjExLDcgQEAKICAgfQogCiAgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9BUk1fTkVPTikKLSAgICBuZW9uZmN0KGNpbmZvLT5pbWFnZV93aWR0aCwgaW5wdXRfYnVmLAotICAgICAgICBvdXRwdXRfYnVmLCBvdXRwdXRfcm93LCBudW1fcm93cyk7CisgICAgbmVvbmZjdChjaW5mby0+aW1hZ2Vfd2lkdGgsIGlucHV0X2J1Ziwgb3V0cHV0X2J1Ziwgb3V0cHV0X3JvdywgbnVtX3Jvd3MpOwogfQogCiBHTE9CQUwodm9pZCkKQEAgLTIzMSw4ICsyMjgsNyBAQAogewogICB2b2lkICgqbmVvbmZjdCkoSkRJTUVOU0lPTiwgSlNBTVBJTUFHRSwgSkRJTUVOU0lPTiwgSlNBTVBBUlJBWSwgaW50KTsKIAotICBzd2l0Y2goY2luZm8tPm91dF9jb2xvcl9zcGFjZSkKLSAgeworICBzd2l0Y2goY2luZm8tPm91dF9jb2xvcl9zcGFjZSkgewogICAgIGNhc2UgSkNTX0VYVF9SR0I6CiAgICAgICBuZW9uZmN0PWpzaW1kX3ljY19leHRyZ2JfY29udmVydF9uZW9uOwogICAgICAgYnJlYWs7CkBAIC0yNjEsOCArMjU3LDcgQEAKICAgfQogCiAgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9BUk1fTkVPTikKLSAgICBuZW9uZmN0KGNpbmZvLT5vdXRwdXRfd2lkdGgsIGlucHV0X2J1ZiwKLSAgICAgICAgaW5wdXRfcm93LCBvdXRwdXRfYnVmLCBudW1fcm93cyk7CisgICAgbmVvbmZjdChjaW5mby0+b3V0cHV0X3dpZHRoLCBpbnB1dF9idWYsIGlucHV0X3Jvdywgb3V0cHV0X2J1ZiwgbnVtX3Jvd3MpOwogfQogCiBHTE9CQUwoaW50KQpAQCAtMzExLDcgKzMwNiw3IEBACiAKIEdMT0JBTCh2b2lkKQoganNpbWRfaDJ2Ml91cHNhbXBsZSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKLSAgICAgICAgICAgICAgICAgICAgIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLCAKKyAgICAgICAgICAgICAgICAgICAgIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAogICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLAogICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSAqIG91dHB1dF9kYXRhX3B0cikKIHsKQEAgLTMxOSw3ICszMTQsNyBAQAogCiBHTE9CQUwodm9pZCkKIGpzaW1kX2gydjFfdXBzYW1wbGUgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCi0gICAgICAgICAgICAgICAgICAgICBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwgCisgICAgICAgICAgICAgICAgICAgICBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwKICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIpCiB7CkBAIC0zNTIsNyArMzQ3LDcgQEAKIAogR0xPQkFMKHZvaWQpCiBqc2ltZF9oMnYyX2ZhbmN5X3Vwc2FtcGxlIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyKQogewpAQCAtMzYwLDEzICszNTUsMTQgQEAKIAogR0xPQkFMKHZvaWQpCiBqc2ltZF9oMnYxX2ZhbmN5X3Vwc2FtcGxlIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyKQogewogICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfQVJNX05FT04pCiAgICAganNpbWRfaDJ2MV9mYW5jeV91cHNhbXBsZV9uZW9uKGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwKLSAgICAgICAgY29tcHB0ci0+ZG93bnNhbXBsZWRfd2lkdGgsIGlucHV0X2RhdGEsIG91dHB1dF9kYXRhX3B0cik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBwdHItPmRvd25zYW1wbGVkX3dpZHRoLCBpbnB1dF9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZGF0YV9wdHIpOwogfQogCiBHTE9CQUwoaW50KQpAQCAtNTUyLDcgKzU0OCw3IEBACiAgIGlmIChzaXplb2YoSVNMT1dfTVVMVF9UWVBFKSAhPSAyKQogICAgIHJldHVybiAwOwogCi0gIGlmICgoc2ltZF9zdXBwb3J0ICYgSlNJTURfQVJNX05FT04pKQorICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfQVJNX05FT04pCiAgICAgcmV0dXJuIDE7CiAKICAgcmV0dXJuIDA7CkBAIC01NzUsNyArNTcxLDcgQEAKICAgaWYgKHNpemVvZihJU0xPV19NVUxUX1RZUEUpICE9IDIpCiAgICAgcmV0dXJuIDA7CiAKLSAgaWYgKChzaW1kX3N1cHBvcnQgJiBKU0lNRF9BUk1fTkVPTikpCisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9BUk1fTkVPTikKICAgICByZXR1cm4gMTsKIAogICByZXR1cm4gMDsKQEAgLTU4Niw4ICs1ODIsOSBAQAogICAgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9jb2wpCiB7Ci0gIGlmICgoc2ltZF9zdXBwb3J0ICYgSlNJTURfQVJNX05FT04pKQotICAgIGpzaW1kX2lkY3RfMngyX25lb24oY29tcHB0ci0+ZGN0X3RhYmxlLCBjb2VmX2Jsb2NrLCBvdXRwdXRfYnVmLCBvdXRwdXRfY29sKTsKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX0FSTV9ORU9OKQorICAgIGpzaW1kX2lkY3RfMngyX25lb24oY29tcHB0ci0+ZGN0X3RhYmxlLCBjb2VmX2Jsb2NrLCBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2NvbCk7CiB9CiAKIEdMT0JBTCh2b2lkKQpAQCAtNTk1LDggKzU5Miw5IEBACiAgICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAogICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKIHsKLSAgaWYgKChzaW1kX3N1cHBvcnQgJiBKU0lNRF9BUk1fTkVPTikpCi0gICAganNpbWRfaWRjdF80eDRfbmVvbihjb21wcHRyLT5kY3RfdGFibGUsIGNvZWZfYmxvY2ssIG91dHB1dF9idWYsIG91dHB1dF9jb2wpOworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfQVJNX05FT04pCisgICAganNpbWRfaWRjdF80eDRfbmVvbihjb21wcHRyLT5kY3RfdGFibGUsIGNvZWZfYmxvY2ssIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfY29sKTsKIH0KIAogR0xPQkFMKGludCkKQEAgLTY0MSw3ICs2MzksNyBAQAogICBpZiAoSUZBU1RfU0NBTEVfQklUUyAhPSAyKQogICAgIHJldHVybiAwOwogCi0gIGlmICgoc2ltZF9zdXBwb3J0ICYgSlNJTURfQVJNX05FT04pKQorICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfQVJNX05FT04pCiAgICAgcmV0dXJuIDE7CiAKICAgcmV0dXJuIDA7CkBAIC02NTcsMjYgKzY1NSwyNyBAQAogCiBHTE9CQUwodm9pZCkKIGpzaW1kX2lkY3RfaXNsb3cgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAotICAgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKLSAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9jb2wpCisgICAgICAgICAgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9jb2wpCiB7Ci0gIGlmICgoc2ltZF9zdXBwb3J0ICYgSlNJTURfQVJNX05FT04pKQotICAgIGpzaW1kX2lkY3RfaXNsb3dfbmVvbihjb21wcHRyLT5kY3RfdGFibGUsIGNvZWZfYmxvY2ssIG91dHB1dF9idWYsIG91dHB1dF9jb2wpOworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfQVJNX05FT04pCisgICAganNpbWRfaWRjdF9pc2xvd19uZW9uKGNvbXBwdHItPmRjdF90YWJsZSwgY29lZl9ibG9jaywgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2NvbCk7CiB9CiAKIEdMT0JBTCh2b2lkKQoganNpbWRfaWRjdF9pZmFzdCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCi0gICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAotICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKKyAgICAgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKIHsKLSAgaWYgKChzaW1kX3N1cHBvcnQgJiBKU0lNRF9BUk1fTkVPTikpCi0gICAganNpbWRfaWRjdF9pZmFzdF9uZW9uKGNvbXBwdHItPmRjdF90YWJsZSwgY29lZl9ibG9jaywgb3V0cHV0X2J1Ziwgb3V0cHV0X2NvbCk7CisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9BUk1fTkVPTikKKyAgICBqc2ltZF9pZGN0X2lmYXN0X25lb24oY29tcHB0ci0+ZGN0X3RhYmxlLCBjb2VmX2Jsb2NrLCBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfY29sKTsKIH0KIAogR0xPQkFMKHZvaWQpCiBqc2ltZF9pZGN0X2Zsb2F0IChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKLSAgICAgICAgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCi0gICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQorICAgICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQogewogfQotCmRpZmYgLS1naXQgYS9zaW1kL2pzaW1kX2FybV9uZW9uLlMgYi9zaW1kL2pzaW1kX2FybV9uZW9uLlMKaW5kZXggOTk2MmI4YS4uYWM2Yzg2MCAxMDA2NDQKLS0tIGEvc2ltZC9qc2ltZF9hcm1fbmVvbi5TCisrKyBiL3NpbWQvanNpbWRfYXJtX25lb24uUwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBBUk0gTkVPTiBvcHRpbWl6YXRpb25zIGZvciBsaWJqcGVnLXR1cmJvCisgKiBBUk12NyBORU9OIG9wdGltaXphdGlvbnMgZm9yIGxpYmpwZWctdHVyYm8KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgpAQCAtMzUsNiArMzUsNyBAQAogCiAjZGVmaW5lIFJFU1BFQ1RfU1RSSUNUX0FMSUdOTUVOVCAxCiAKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKiBTdXBwbGVtZW50YXJ5IG1hY3JvIGZvciBzZXR0aW5nIGZ1bmN0aW9uIGF0dHJpYnV0ZXMgKi8KQEAgLTYyLDYgKzYzLDcgQEAKICAgICB2dHJuLjMyIFx4MSwgXHgzCiAuZW5kbQogCisKICNkZWZpbmUgQ0VOVEVSSlNBTVBMRSAxMjgKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNjcwLDYgKzY3Miw3IEBACiAgICAgLnVucmVxICAgICAgICAgIFJPVzdSCiAuZW5kZnVuYwogCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKQEAgLTg5NCw2ICs4OTcsNyBAQAogICAgIC51bnJlcSAgICAgICAgICBUTVA0CiAuZW5kZnVuYwogCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKQEAgLTExMDgsNiArMTExMiw3IEBACiAKIC5wdXJnZW0gaWRjdF9oZWxwZXIKIAorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCkBAIC0xMjYyLDYgKzEyNjcsNyBAQAogCiAucHVyZ2VtIGlkY3RfaGVscGVyCiAKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgpAQCAtMTU2MSw2ICsxNTY3LDcgQEAKIC5wdXJnZW0gZG9fbG9hZAogLnB1cmdlbSBkb19zdG9yZQogCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKQEAgLTE4NzEsNiArMTg3OCw3IEBACiAucHVyZ2VtIGRvX2xvYWQKIC5wdXJnZW0gZG9fc3RvcmUKIAorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCkBAIC0xOTM0LDYgKzE5NDIsNyBAQAogICAgIC51bnJlcSAgICAgICAgICBUTVA0CiAuZW5kZnVuYwogCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKQEAgLTIwNTcsNiArMjA2Niw3IEBACiAgICAgLnVucmVxICAgICAgICAgIFRNUAogLmVuZGZ1bmMKIAorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCkBAIC0yMTU4LDYgKzIxNjgsNyBAQAogICAgIC51bnJlcSAgICAgICAgICBMT09QX0NPVU5UCiAuZW5kZnVuYwogCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKZGlmZiAtLWdpdCBhL3NpbWQvanNpbWRfaTM4Ni5jIGIvc2ltZC9qc2ltZF9pMzg2LmMKaW5kZXggZTk2ZjViOC4uNjM5YmU1MiAxMDA2NDQKLS0tIGEvc2ltZC9qc2ltZF9pMzg2LmMKKysrIGIvc2ltZC9qc2ltZF9pMzg2LmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgogICogQ29weXJpZ2h0IDIwMDktMjAxMSBELiBSLiBDb21tYW5kZXIKLSAqIAorICoKICAqIEJhc2VkIG9uIHRoZSB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnksCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYwpAQCAtMTM1LDggKzEzNSw3IEBACiAgIHZvaWQgKCpzc2UyZmN0KShKRElNRU5TSU9OLCBKU0FNUEFSUkFZLCBKU0FNUElNQUdFLCBKRElNRU5TSU9OLCBpbnQpOwogICB2b2lkICgqbW14ZmN0KShKRElNRU5TSU9OLCBKU0FNUEFSUkFZLCBKU0FNUElNQUdFLCBKRElNRU5TSU9OLCBpbnQpOwogCi0gIHN3aXRjaChjaW5mby0+aW5fY29sb3Jfc3BhY2UpCi0gIHsKKyAgc3dpdGNoKGNpbmZvLT5pbl9jb2xvcl9zcGFjZSkgewogICAgIGNhc2UgSkNTX0VYVF9SR0I6CiAgICAgICBzc2UyZmN0PWpzaW1kX2V4dHJnYl95Y2NfY29udmVydF9zc2UyOwogICAgICAgbW14ZmN0PWpzaW1kX2V4dHJnYl95Y2NfY29udmVydF9tbXg7CkBAIC0xNzMsMTEgKzE3Miw5IEBACiAKICAgaWYgKChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UyKSAmJgogICAgICAgSVNfQUxJR05FRF9TU0UoamNvbnN0X3JnYl95Y2NfY29udmVydF9zc2UyKSkKLSAgICBzc2UyZmN0KGNpbmZvLT5pbWFnZV93aWR0aCwgaW5wdXRfYnVmLAotICAgICAgICBvdXRwdXRfYnVmLCBvdXRwdXRfcm93LCBudW1fcm93cyk7CisgICAgc3NlMmZjdChjaW5mby0+aW1hZ2Vfd2lkdGgsIGlucHV0X2J1Ziwgb3V0cHV0X2J1Ziwgb3V0cHV0X3JvdywgbnVtX3Jvd3MpOwogICBlbHNlIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9NTVgpCi0gICAgbW14ZmN0KGNpbmZvLT5pbWFnZV93aWR0aCwgaW5wdXRfYnVmLAotICAgICAgICBvdXRwdXRfYnVmLCBvdXRwdXRfcm93LCBudW1fcm93cyk7CisgICAgbW14ZmN0KGNpbmZvLT5pbWFnZV93aWR0aCwgaW5wdXRfYnVmLCBvdXRwdXRfYnVmLCBvdXRwdXRfcm93LCBudW1fcm93cyk7CiB9CiAKIEdMT0JBTCh2b2lkKQpAQCAtMTg4LDggKzE4NSw3IEBACiAgIHZvaWQgKCpzc2UyZmN0KShKRElNRU5TSU9OLCBKU0FNUEFSUkFZLCBKU0FNUElNQUdFLCBKRElNRU5TSU9OLCBpbnQpOwogICB2b2lkICgqbW14ZmN0KShKRElNRU5TSU9OLCBKU0FNUEFSUkFZLCBKU0FNUElNQUdFLCBKRElNRU5TSU9OLCBpbnQpOwogCi0gIHN3aXRjaChjaW5mby0+aW5fY29sb3Jfc3BhY2UpCi0gIHsKKyAgc3dpdGNoKGNpbmZvLT5pbl9jb2xvcl9zcGFjZSkgewogICAgIGNhc2UgSkNTX0VYVF9SR0I6CiAgICAgICBzc2UyZmN0PWpzaW1kX2V4dHJnYl9ncmF5X2NvbnZlcnRfc3NlMjsKICAgICAgIG1teGZjdD1qc2ltZF9leHRyZ2JfZ3JheV9jb252ZXJ0X21teDsKQEAgLTIyNiwxMSArMjIyLDkgQEAKIAogICBpZiAoKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRTIpICYmCiAgICAgICBJU19BTElHTkVEX1NTRShqY29uc3RfcmdiX2dyYXlfY29udmVydF9zc2UyKSkKLSAgICBzc2UyZmN0KGNpbmZvLT5pbWFnZV93aWR0aCwgaW5wdXRfYnVmLAotICAgICAgICBvdXRwdXRfYnVmLCBvdXRwdXRfcm93LCBudW1fcm93cyk7CisgICAgc3NlMmZjdChjaW5mby0+aW1hZ2Vfd2lkdGgsIGlucHV0X2J1Ziwgb3V0cHV0X2J1Ziwgb3V0cHV0X3JvdywgbnVtX3Jvd3MpOwogICBlbHNlIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9NTVgpCi0gICAgbW14ZmN0KGNpbmZvLT5pbWFnZV93aWR0aCwgaW5wdXRfYnVmLAotICAgICAgICBvdXRwdXRfYnVmLCBvdXRwdXRfcm93LCBudW1fcm93cyk7CisgICAgbW14ZmN0KGNpbmZvLT5pbWFnZV93aWR0aCwgaW5wdXRfYnVmLCBvdXRwdXRfYnVmLCBvdXRwdXRfcm93LCBudW1fcm93cyk7CiB9CiAKIEdMT0JBTCh2b2lkKQpAQCAtMjQxLDggKzIzNSw3IEBACiAgIHZvaWQgKCpzc2UyZmN0KShKRElNRU5TSU9OLCBKU0FNUElNQUdFLCBKRElNRU5TSU9OLCBKU0FNUEFSUkFZLCBpbnQpOwogICB2b2lkICgqbW14ZmN0KShKRElNRU5TSU9OLCBKU0FNUElNQUdFLCBKRElNRU5TSU9OLCBKU0FNUEFSUkFZLCBpbnQpOwogCi0gIHN3aXRjaChjaW5mby0+b3V0X2NvbG9yX3NwYWNlKQotICB7CisgIHN3aXRjaChjaW5mby0+b3V0X2NvbG9yX3NwYWNlKSB7CiAgICAgY2FzZSBKQ1NfRVhUX1JHQjoKICAgICAgIHNzZTJmY3Q9anNpbWRfeWNjX2V4dHJnYl9jb252ZXJ0X3NzZTI7CiAgICAgICBtbXhmY3Q9anNpbWRfeWNjX2V4dHJnYl9jb252ZXJ0X21teDsKQEAgLTI3OSwxMSArMjcyLDkgQEAKIAogICBpZiAoKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRTIpICYmCiAgICAgICBJU19BTElHTkVEX1NTRShqY29uc3RfeWNjX3JnYl9jb252ZXJ0X3NzZTIpKQotICAgIHNzZTJmY3QoY2luZm8tPm91dHB1dF93aWR0aCwgaW5wdXRfYnVmLAotICAgICAgICBpbnB1dF9yb3csIG91dHB1dF9idWYsIG51bV9yb3dzKTsKKyAgICBzc2UyZmN0KGNpbmZvLT5vdXRwdXRfd2lkdGgsIGlucHV0X2J1ZiwgaW5wdXRfcm93LCBvdXRwdXRfYnVmLCBudW1fcm93cyk7CiAgIGVsc2UgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX01NWCkKLSAgICBtbXhmY3QoY2luZm8tPm91dHB1dF93aWR0aCwgaW5wdXRfYnVmLAotICAgICAgICBpbnB1dF9yb3csIG91dHB1dF9idWYsIG51bV9yb3dzKTsKKyAgICBtbXhmY3QoY2luZm8tPm91dHB1dF93aWR0aCwgaW5wdXRfYnVmLCBpbnB1dF9yb3csIG91dHB1dF9idWYsIG51bV9yb3dzKTsKIH0KIAogR0xPQkFMKGludCkKQEAgLTMzMCwxMiArMzIxLDEzIEBACiB7CiAgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UyKQogICAgIGpzaW1kX2gydjJfZG93bnNhbXBsZV9zc2UyKGNpbmZvLT5pbWFnZV93aWR0aCwgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yLAotICAgICAgICBjb21wcHRyLT52X3NhbXBfZmFjdG9yLCBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MsCi0gICAgICAgIGlucHV0X2RhdGEsIG91dHB1dF9kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcHRyLT52X3NhbXBfZmFjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcywgaW5wdXRfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZGF0YSk7CiAgIGVsc2UgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX01NWCkKICAgICBqc2ltZF9oMnYyX2Rvd25zYW1wbGVfbW14KGNpbmZvLT5pbWFnZV93aWR0aCwgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yLAotICAgICAgICBjb21wcHRyLT52X3NhbXBfZmFjdG9yLCBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MsCi0gICAgICAgIGlucHV0X2RhdGEsIG91dHB1dF9kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IsIGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2RhdGEsIG91dHB1dF9kYXRhKTsKIH0KIAogR0xPQkFMKHZvaWQpCkBAIC0zNDQsMTIgKzMzNiwxMyBAQAogewogICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfU1NFMikKICAgICBqc2ltZF9oMnYxX2Rvd25zYW1wbGVfc3NlMihjaW5mby0+aW1hZ2Vfd2lkdGgsIGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwKLSAgICAgICAgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciwgY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzLAotICAgICAgICBpbnB1dF9kYXRhLCBvdXRwdXRfZGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MsIGlucHV0X2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2RhdGEpOwogICBlbHNlIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9NTVgpCiAgICAganNpbWRfaDJ2MV9kb3duc2FtcGxlX21teChjaW5mby0+aW1hZ2Vfd2lkdGgsIGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwKLSAgICAgICAgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciwgY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzLAotICAgICAgICBpbnB1dF9kYXRhLCBvdXRwdXRfZGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcHRyLT52X3NhbXBfZmFjdG9yLCBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9kYXRhLCBvdXRwdXRfZGF0YSk7CiB9CiAKIEdMT0JBTChpbnQpCkBAIC0zOTIsMzAgKzM4NSwzMCBAQAogCiBHTE9CQUwodm9pZCkKIGpzaW1kX2gydjJfdXBzYW1wbGUgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCi0gICAgICAgICAgICAgICAgICAgICBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwgCisgICAgICAgICAgICAgICAgICAgICBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwKICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIpCiB7CiAgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UyKQotICAgIGpzaW1kX2gydjJfdXBzYW1wbGVfc3NlMihjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IsCi0gICAgICAgIGNpbmZvLT5vdXRwdXRfd2lkdGgsIGlucHV0X2RhdGEsIG91dHB1dF9kYXRhX3B0cik7CisgICAganNpbWRfaDJ2Ml91cHNhbXBsZV9zc2UyKGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwgY2luZm8tPm91dHB1dF93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfZGF0YSwgb3V0cHV0X2RhdGFfcHRyKTsKICAgZWxzZSBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfTU1YKQotICAgIGpzaW1kX2gydjJfdXBzYW1wbGVfbW14KGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwKLSAgICAgICAgY2luZm8tPm91dHB1dF93aWR0aCwgaW5wdXRfZGF0YSwgb3V0cHV0X2RhdGFfcHRyKTsKKyAgICBqc2ltZF9oMnYyX3Vwc2FtcGxlX21teChjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IsIGNpbmZvLT5vdXRwdXRfd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfZGF0YSwgb3V0cHV0X2RhdGFfcHRyKTsKIH0KIAogR0xPQkFMKHZvaWQpCiBqc2ltZF9oMnYxX3Vwc2FtcGxlIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAotICAgICAgICAgICAgICAgICAgICAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsIAorICAgICAgICAgICAgICAgICAgICAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCiAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyKQogewogICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfU1NFMikKLSAgICBqc2ltZF9oMnYxX3Vwc2FtcGxlX3NzZTIoY2luZm8tPm1heF92X3NhbXBfZmFjdG9yLAotICAgICAgICBjaW5mby0+b3V0cHV0X3dpZHRoLCBpbnB1dF9kYXRhLCBvdXRwdXRfZGF0YV9wdHIpOworICAgIGpzaW1kX2gydjFfdXBzYW1wbGVfc3NlMihjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IsIGNpbmZvLT5vdXRwdXRfd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2RhdGEsIG91dHB1dF9kYXRhX3B0cik7CiAgIGVsc2UgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX01NWCkKLSAgICBqc2ltZF9oMnYxX3Vwc2FtcGxlX21teChjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IsCi0gICAgICAgIGNpbmZvLT5vdXRwdXRfd2lkdGgsIGlucHV0X2RhdGEsIG91dHB1dF9kYXRhX3B0cik7CisgICAganNpbWRfaDJ2MV91cHNhbXBsZV9tbXgoY2luZm8tPm1heF92X3NhbXBfZmFjdG9yLCBjaW5mby0+b3V0cHV0X3dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2RhdGEsIG91dHB1dF9kYXRhX3B0cik7CiB9CiAKIEdMT0JBTChpbnQpCkBAIC00NjAsMzIgKzQ1MywzNiBAQAogCiBHTE9CQUwodm9pZCkKIGpzaW1kX2gydjJfZmFuY3lfdXBzYW1wbGUgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIpCiB7CiAgIGlmICgoc2ltZF9zdXBwb3J0ICYgSlNJTURfU1NFMikgJiYKICAgICAgIElTX0FMSUdORURfU1NFKGpjb25zdF9mYW5jeV91cHNhbXBsZV9zc2UyKSkKICAgICBqc2ltZF9oMnYyX2ZhbmN5X3Vwc2FtcGxlX3NzZTIoY2luZm8tPm1heF92X3NhbXBfZmFjdG9yLAotICAgICAgICBjb21wcHRyLT5kb3duc2FtcGxlZF93aWR0aCwgaW5wdXRfZGF0YSwgb3V0cHV0X2RhdGFfcHRyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHB0ci0+ZG93bnNhbXBsZWRfd2lkdGgsIGlucHV0X2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9kYXRhX3B0cik7CiAgIGVsc2UgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX01NWCkKICAgICBqc2ltZF9oMnYyX2ZhbmN5X3Vwc2FtcGxlX21teChjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IsCi0gICAgICAgIGNvbXBwdHItPmRvd25zYW1wbGVkX3dpZHRoLCBpbnB1dF9kYXRhLCBvdXRwdXRfZGF0YV9wdHIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBwdHItPmRvd25zYW1wbGVkX3dpZHRoLCBpbnB1dF9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9kYXRhX3B0cik7CiB9CiAKIEdMT0JBTCh2b2lkKQoganNpbWRfaDJ2MV9mYW5jeV91cHNhbXBsZSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSAqIG91dHB1dF9kYXRhX3B0cikKIHsKICAgaWYgKChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UyKSAmJgogICAgICAgSVNfQUxJR05FRF9TU0UoamNvbnN0X2ZhbmN5X3Vwc2FtcGxlX3NzZTIpKQogICAgIGpzaW1kX2gydjFfZmFuY3lfdXBzYW1wbGVfc3NlMihjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IsCi0gICAgICAgIGNvbXBwdHItPmRvd25zYW1wbGVkX3dpZHRoLCBpbnB1dF9kYXRhLCBvdXRwdXRfZGF0YV9wdHIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcHRyLT5kb3duc2FtcGxlZF93aWR0aCwgaW5wdXRfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2RhdGFfcHRyKTsKICAgZWxzZSBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfTU1YKQogICAgIGpzaW1kX2gydjFfZmFuY3lfdXBzYW1wbGVfbW14KGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwKLSAgICAgICAgY29tcHB0ci0+ZG93bnNhbXBsZWRfd2lkdGgsIGlucHV0X2RhdGEsIG91dHB1dF9kYXRhX3B0cik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHB0ci0+ZG93bnNhbXBsZWRfd2lkdGgsIGlucHV0X2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2RhdGFfcHRyKTsKIH0KIAogR0xPQkFMKGludCkKQEAgLTUzNyw4ICs1MzQsNyBAQAogICB2b2lkICgqc3NlMmZjdCkoSkRJTUVOU0lPTiwgSlNBTVBJTUFHRSwgSkRJTUVOU0lPTiwgSlNBTVBBUlJBWSk7CiAgIHZvaWQgKCptbXhmY3QpKEpESU1FTlNJT04sIEpTQU1QSU1BR0UsIEpESU1FTlNJT04sIEpTQU1QQVJSQVkpOwogCi0gIHN3aXRjaChjaW5mby0+b3V0X2NvbG9yX3NwYWNlKQotICB7CisgIHN3aXRjaChjaW5mby0+b3V0X2NvbG9yX3NwYWNlKSB7CiAgICAgY2FzZSBKQ1NfRVhUX1JHQjoKICAgICAgIHNzZTJmY3Q9anNpbWRfaDJ2Ml9leHRyZ2JfbWVyZ2VkX3Vwc2FtcGxlX3NzZTI7CiAgICAgICBtbXhmY3Q9anNpbWRfaDJ2Ml9leHRyZ2JfbWVyZ2VkX3Vwc2FtcGxlX21teDsKQEAgLTU3NSwxMSArNTcxLDkgQEAKIAogICBpZiAoKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRTIpICYmCiAgICAgICBJU19BTElHTkVEX1NTRShqY29uc3RfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIpKQotICAgIHNzZTJmY3QoY2luZm8tPm91dHB1dF93aWR0aCwgaW5wdXRfYnVmLAotICAgICAgICBpbl9yb3dfZ3JvdXBfY3RyLCBvdXRwdXRfYnVmKTsKKyAgICBzc2UyZmN0KGNpbmZvLT5vdXRwdXRfd2lkdGgsIGlucHV0X2J1ZiwgaW5fcm93X2dyb3VwX2N0ciwgb3V0cHV0X2J1Zik7CiAgIGVsc2UgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX01NWCkKLSAgICBtbXhmY3QoY2luZm8tPm91dHB1dF93aWR0aCwgaW5wdXRfYnVmLAotICAgICAgICBpbl9yb3dfZ3JvdXBfY3RyLCBvdXRwdXRfYnVmKTsKKyAgICBtbXhmY3QoY2luZm8tPm91dHB1dF93aWR0aCwgaW5wdXRfYnVmLCBpbl9yb3dfZ3JvdXBfY3RyLCBvdXRwdXRfYnVmKTsKIH0KIAogR0xPQkFMKHZvaWQpCkBAIC01OTEsOCArNTg1LDcgQEAKICAgdm9pZCAoKnNzZTJmY3QpKEpESU1FTlNJT04sIEpTQU1QSU1BR0UsIEpESU1FTlNJT04sIEpTQU1QQVJSQVkpOwogICB2b2lkICgqbW14ZmN0KShKRElNRU5TSU9OLCBKU0FNUElNQUdFLCBKRElNRU5TSU9OLCBKU0FNUEFSUkFZKTsKIAotICBzd2l0Y2goY2luZm8tPm91dF9jb2xvcl9zcGFjZSkKLSAgeworICBzd2l0Y2goY2luZm8tPm91dF9jb2xvcl9zcGFjZSkgewogICAgIGNhc2UgSkNTX0VYVF9SR0I6CiAgICAgICBzc2UyZmN0PWpzaW1kX2gydjFfZXh0cmdiX21lcmdlZF91cHNhbXBsZV9zc2UyOwogICAgICAgbW14ZmN0PWpzaW1kX2gydjFfZXh0cmdiX21lcmdlZF91cHNhbXBsZV9tbXg7CkBAIC02MjksMTEgKzYyMiw5IEBACiAKICAgaWYgKChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UyKSAmJgogICAgICAgSVNfQUxJR05FRF9TU0UoamNvbnN0X21lcmdlZF91cHNhbXBsZV9zc2UyKSkKLSAgICBzc2UyZmN0KGNpbmZvLT5vdXRwdXRfd2lkdGgsIGlucHV0X2J1ZiwKLSAgICAgICAgaW5fcm93X2dyb3VwX2N0ciwgb3V0cHV0X2J1Zik7CisgICAgc3NlMmZjdChjaW5mby0+b3V0cHV0X3dpZHRoLCBpbnB1dF9idWYsIGluX3Jvd19ncm91cF9jdHIsIG91dHB1dF9idWYpOwogICBlbHNlIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9NTVgpCi0gICAgbW14ZmN0KGNpbmZvLT5vdXRwdXRfd2lkdGgsIGlucHV0X2J1ZiwKLSAgICAgICAgaW5fcm93X2dyb3VwX2N0ciwgb3V0cHV0X2J1Zik7CisgICAgbW14ZmN0KGNpbmZvLT5vdXRwdXRfd2lkdGgsIGlucHV0X2J1ZiwgaW5fcm93X2dyb3VwX2N0ciwgb3V0cHV0X2J1Zik7CiB9CiAKIEdMT0JBTChpbnQpCkBAIC05MTIsNyArOTAzLDggQEAKICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9jb2wpCiB7CiAgIGlmICgoc2ltZF9zdXBwb3J0ICYgSlNJTURfU1NFMikgJiYgSVNfQUxJR05FRF9TU0UoamNvbnN0X2lkY3RfcmVkX3NzZTIpKQotICAgIGpzaW1kX2lkY3RfMngyX3NzZTIoY29tcHB0ci0+ZGN0X3RhYmxlLCBjb2VmX2Jsb2NrLCBvdXRwdXRfYnVmLCBvdXRwdXRfY29sKTsKKyAgICBqc2ltZF9pZGN0XzJ4Ml9zc2UyKGNvbXBwdHItPmRjdF90YWJsZSwgY29lZl9ibG9jaywgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9jb2wpOwogICBlbHNlIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9NTVgpCiAgICAganNpbWRfaWRjdF8yeDJfbW14KGNvbXBwdHItPmRjdF90YWJsZSwgY29lZl9ibG9jaywgb3V0cHV0X2J1Ziwgb3V0cHV0X2NvbCk7CiB9CkBAIC05MjMsNyArOTE1LDggQEAKICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9jb2wpCiB7CiAgIGlmICgoc2ltZF9zdXBwb3J0ICYgSlNJTURfU1NFMikgJiYgSVNfQUxJR05FRF9TU0UoamNvbnN0X2lkY3RfcmVkX3NzZTIpKQotICAgIGpzaW1kX2lkY3RfNHg0X3NzZTIoY29tcHB0ci0+ZGN0X3RhYmxlLCBjb2VmX2Jsb2NrLCBvdXRwdXRfYnVmLCBvdXRwdXRfY29sKTsKKyAgICBqc2ltZF9pZGN0XzR4NF9zc2UyKGNvbXBwdHItPmRjdF90YWJsZSwgY29lZl9ibG9jaywgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9jb2wpOwogICBlbHNlIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9NTVgpCiAgICAganNpbWRfaWRjdF80eDRfbW14KGNvbXBwdHItPmRjdF90YWJsZSwgY29lZl9ibG9jaywgb3V0cHV0X2J1Ziwgb3V0cHV0X2NvbCk7CiB9CkBAIC0xMDEwLDM5ICsxMDAzLDQzIEBACiAKIEdMT0JBTCh2b2lkKQoganNpbWRfaWRjdF9pc2xvdyAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCi0gICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAotICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKKyAgICAgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKIHsKICAgaWYgKChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UyKSAmJiBJU19BTElHTkVEX1NTRShqY29uc3RfaWRjdF9pc2xvd19zc2UyKSkKLSAgICBqc2ltZF9pZGN0X2lzbG93X3NzZTIoY29tcHB0ci0+ZGN0X3RhYmxlLCBjb2VmX2Jsb2NrLCBvdXRwdXRfYnVmLCBvdXRwdXRfY29sKTsKKyAgICBqc2ltZF9pZGN0X2lzbG93X3NzZTIoY29tcHB0ci0+ZGN0X3RhYmxlLCBjb2VmX2Jsb2NrLCBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfY29sKTsKICAgZWxzZSBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfTU1YKQotICAgIGpzaW1kX2lkY3RfaXNsb3dfbW14KGNvbXBwdHItPmRjdF90YWJsZSwgY29lZl9ibG9jaywgb3V0cHV0X2J1Ziwgb3V0cHV0X2NvbCk7CisgICAganNpbWRfaWRjdF9pc2xvd19tbXgoY29tcHB0ci0+ZGN0X3RhYmxlLCBjb2VmX2Jsb2NrLCBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9jb2wpOwogfQogCiBHTE9CQUwodm9pZCkKIGpzaW1kX2lkY3RfaWZhc3QgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAotICAgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKLSAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9jb2wpCisgICAgICAgICAgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9jb2wpCiB7CiAgIGlmICgoc2ltZF9zdXBwb3J0ICYgSlNJTURfU1NFMikgJiYgSVNfQUxJR05FRF9TU0UoamNvbnN0X2lkY3RfaWZhc3Rfc3NlMikpCi0gICAganNpbWRfaWRjdF9pZmFzdF9zc2UyKGNvbXBwdHItPmRjdF90YWJsZSwgY29lZl9ibG9jaywgb3V0cHV0X2J1Ziwgb3V0cHV0X2NvbCk7CisgICAganNpbWRfaWRjdF9pZmFzdF9zc2UyKGNvbXBwdHItPmRjdF90YWJsZSwgY29lZl9ibG9jaywgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2NvbCk7CiAgIGVsc2UgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX01NWCkKLSAgICBqc2ltZF9pZGN0X2lmYXN0X21teChjb21wcHRyLT5kY3RfdGFibGUsIGNvZWZfYmxvY2ssIG91dHB1dF9idWYsIG91dHB1dF9jb2wpOworICAgIGpzaW1kX2lkY3RfaWZhc3RfbW14KGNvbXBwdHItPmRjdF90YWJsZSwgY29lZl9ibG9jaywgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfY29sKTsKIH0KIAogR0xPQkFMKHZvaWQpCiBqc2ltZF9pZGN0X2Zsb2F0IChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKLSAgICAgICAgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCi0gICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQorICAgICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQogewogICBpZiAoKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRTIpICYmIElTX0FMSUdORURfU1NFKGpjb25zdF9pZGN0X2Zsb2F0X3NzZTIpKQotICAgIGpzaW1kX2lkY3RfZmxvYXRfc3NlMihjb21wcHRyLT5kY3RfdGFibGUsIGNvZWZfYmxvY2ssCi0gICAgICAgIG91dHB1dF9idWYsIG91dHB1dF9jb2wpOworICAgIGpzaW1kX2lkY3RfZmxvYXRfc3NlMihjb21wcHRyLT5kY3RfdGFibGUsIGNvZWZfYmxvY2ssIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9jb2wpOwogICBlbHNlIGlmICgoc2ltZF9zdXBwb3J0ICYgSlNJTURfU1NFKSAmJiBJU19BTElHTkVEX1NTRShqY29uc3RfaWRjdF9mbG9hdF9zc2UpKQotICAgIGpzaW1kX2lkY3RfZmxvYXRfc3NlKGNvbXBwdHItPmRjdF90YWJsZSwgY29lZl9ibG9jaywKLSAgICAgICAgb3V0cHV0X2J1Ziwgb3V0cHV0X2NvbCk7CisgICAganNpbWRfaWRjdF9mbG9hdF9zc2UoY29tcHB0ci0+ZGN0X3RhYmxlLCBjb2VmX2Jsb2NrLCBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9jb2wpOwogICBlbHNlIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF8zRE5PVykKLSAgICBqc2ltZF9pZGN0X2Zsb2F0XzNkbm93KGNvbXBwdHItPmRjdF90YWJsZSwgY29lZl9ibG9jaywKLSAgICAgICAgb3V0cHV0X2J1Ziwgb3V0cHV0X2NvbCk7CisgICAganNpbWRfaWRjdF9mbG9hdF8zZG5vdyhjb21wcHRyLT5kY3RfdGFibGUsIGNvZWZfYmxvY2ssIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfY29sKTsKIH0KIApkaWZmIC0tZ2l0IGEvc2ltZC9qc2ltZF94ODZfNjQuYyBiL3NpbWQvanNpbWRfeDg2XzY0LmMKaW5kZXggOGQxN2RiMy4uODdjOWQ1NiAxMDA2NDQKLS0tIGEvc2ltZC9qc2ltZF94ODZfNjQuYworKysgYi9zaW1kL2pzaW1kX3g4Nl82NC5jCkBAIC0zLDE0ICszLDE0IEBACiAgKgogICogQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgogICogQ29weXJpZ2h0IDIwMDktMjAxMSBELiBSLiBDb21tYW5kZXIKLSAqIAorICoKICAqIEJhc2VkIG9uIHRoZSB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnksCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYwogICoKICAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlICJub3JtYWwiIHBvcnRpb25zCiAgKiBvZiB0aGUgbGlicmFyeSBhbmQgdGhlIFNJTUQgaW1wbGVtZW50YXRpb25zIHdoZW4gcnVubmluZyBvbiBhCi0gKiB4ODZfNjQgYXJjaGl0ZWN0dXJlLgorICogNjQtYml0IHg4NiBhcmNoaXRlY3R1cmUuCiAgKi8KIAogI2RlZmluZSBKUEVHX0lOVEVSTkFMUwpAQCAtODcsOCArODcsNyBAQAogewogICB2b2lkICgqc3NlMmZjdCkoSkRJTUVOU0lPTiwgSlNBTVBBUlJBWSwgSlNBTVBJTUFHRSwgSkRJTUVOU0lPTiwgaW50KTsKIAotICBzd2l0Y2goY2luZm8tPmluX2NvbG9yX3NwYWNlKQotICB7CisgIHN3aXRjaChjaW5mby0+aW5fY29sb3Jfc3BhY2UpIHsKICAgICBjYXNlIEpDU19FWFRfUkdCOgogICAgICAgc3NlMmZjdD1qc2ltZF9leHRyZ2JfeWNjX2NvbnZlcnRfc3NlMjsKICAgICAgIGJyZWFrOwpAQCAtMTI2LDggKzEyNSw3IEBACiB7CiAgIHZvaWQgKCpzc2UyZmN0KShKRElNRU5TSU9OLCBKU0FNUEFSUkFZLCBKU0FNUElNQUdFLCBKRElNRU5TSU9OLCBpbnQpOwogCi0gIHN3aXRjaChjaW5mby0+aW5fY29sb3Jfc3BhY2UpCi0gIHsKKyAgc3dpdGNoKGNpbmZvLT5pbl9jb2xvcl9zcGFjZSkgewogICAgIGNhc2UgSkNTX0VYVF9SR0I6CiAgICAgICBzc2UyZmN0PWpzaW1kX2V4dHJnYl9ncmF5X2NvbnZlcnRfc3NlMjsKICAgICAgIGJyZWFrOwpAQCAtMTY1LDggKzE2Myw3IEBACiB7CiAgIHZvaWQgKCpzc2UyZmN0KShKRElNRU5TSU9OLCBKU0FNUElNQUdFLCBKRElNRU5TSU9OLCBKU0FNUEFSUkFZLCBpbnQpOwogCi0gIHN3aXRjaChjaW5mby0+b3V0X2NvbG9yX3NwYWNlKQotICB7CisgIHN3aXRjaChjaW5mby0+b3V0X2NvbG9yX3NwYWNlKSB7CiAgICAgY2FzZSBKQ1NfRVhUX1JHQjoKICAgICAgIHNzZTJmY3Q9anNpbWRfeWNjX2V4dHJnYl9jb252ZXJ0X3NzZTI7CiAgICAgICBicmVhazsKQEAgLTIyNSwxMCArMjIyLDggQEAKIGpzaW1kX2gydjJfZG93bnNhbXBsZSAoal9jb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAogICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEpCiB7Ci0gIGpzaW1kX2gydjJfZG93bnNhbXBsZV9zc2UyKGNpbmZvLT5pbWFnZV93aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcHRyLT52X3NhbXBfZmFjdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MsCisgIGpzaW1kX2gydjJfZG93bnNhbXBsZV9zc2UyKGNpbmZvLT5pbWFnZV93aWR0aCwgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcHRyLT52X3NhbXBfZmFjdG9yLCBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2RhdGEsIG91dHB1dF9kYXRhKTsKIH0KIApAQCAtMjM2LDEwICsyMzEsOCBAQAoganNpbWRfaDJ2MV9kb3duc2FtcGxlIChqX2NvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSkKIHsKLSAganNpbWRfaDJ2MV9kb3duc2FtcGxlX3NzZTIoY2luZm8tPmltYWdlX3dpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcywKKyAganNpbWRfaDJ2MV9kb3duc2FtcGxlX3NzZTIoY2luZm8tPmltYWdlX3dpZHRoLCBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IsIGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfZGF0YSwgb3V0cHV0X2RhdGEpOwogfQogCkBAIC0yNjksMjMgKzI2MiwyMSBAQAogCiBHTE9CQUwodm9pZCkKIGpzaW1kX2gydjJfdXBzYW1wbGUgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCi0gICAgICAgICAgICAgICAgICAgICBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwgCisgICAgICAgICAgICAgICAgICAgICBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwKICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIpCiB7Ci0gIGpzaW1kX2gydjJfdXBzYW1wbGVfc3NlMihjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjaW5mby0+b3V0cHV0X3dpZHRoLAorICBqc2ltZF9oMnYyX3Vwc2FtcGxlX3NzZTIoY2luZm8tPm1heF92X3NhbXBfZmFjdG9yLCBjaW5mby0+b3V0cHV0X3dpZHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfZGF0YSwgb3V0cHV0X2RhdGFfcHRyKTsKIH0KIAogR0xPQkFMKHZvaWQpCiBqc2ltZF9oMnYxX3Vwc2FtcGxlIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAotICAgICAgICAgICAgICAgICAgICAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsIAorICAgICAgICAgICAgICAgICAgICAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCiAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyKQogewotICBqc2ltZF9oMnYxX3Vwc2FtcGxlX3NzZTIoY2luZm8tPm1heF92X3NhbXBfZmFjdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY2luZm8tPm91dHB1dF93aWR0aCwKKyAganNpbWRfaDJ2MV91cHNhbXBsZV9zc2UyKGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwgY2luZm8tPm91dHB1dF93aWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2RhdGEsIG91dHB1dF9kYXRhX3B0cik7CiB9CiAKQEAgLTMyMSwyNCArMzEyLDI0IEBACiAKIEdMT0JBTCh2b2lkKQoganNpbWRfaDJ2Ml9mYW5jeV91cHNhbXBsZSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSAqIG91dHB1dF9kYXRhX3B0cikKIHsKICAganNpbWRfaDJ2Ml9mYW5jeV91cHNhbXBsZV9zc2UyKGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBwdHItPmRvd25zYW1wbGVkX3dpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfZGF0YSwgb3V0cHV0X2RhdGFfcHRyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBwdHItPmRvd25zYW1wbGVkX3dpZHRoLCBpbnB1dF9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2RhdGFfcHRyKTsKIH0KIAogR0xPQkFMKHZvaWQpCiBqc2ltZF9oMnYxX2ZhbmN5X3Vwc2FtcGxlIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyKQogewogICBqc2ltZF9oMnYxX2ZhbmN5X3Vwc2FtcGxlX3NzZTIoY2luZm8tPm1heF92X3NhbXBfZmFjdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHB0ci0+ZG93bnNhbXBsZWRfd2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9kYXRhLCBvdXRwdXRfZGF0YV9wdHIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHB0ci0+ZG93bnNhbXBsZWRfd2lkdGgsIGlucHV0X2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZGF0YV9wdHIpOwogfQogCiBHTE9CQUwoaW50KQpAQCAtMzc5LDggKzM3MCw3IEBACiB7CiAgIHZvaWQgKCpzc2UyZmN0KShKRElNRU5TSU9OLCBKU0FNUElNQUdFLCBKRElNRU5TSU9OLCBKU0FNUEFSUkFZKTsKIAotICBzd2l0Y2goY2luZm8tPm91dF9jb2xvcl9zcGFjZSkKLSAgeworICBzd2l0Y2goY2luZm8tPm91dF9jb2xvcl9zcGFjZSkgewogICAgIGNhc2UgSkNTX0VYVF9SR0I6CiAgICAgICBzc2UyZmN0PWpzaW1kX2gydjJfZXh0cmdiX21lcmdlZF91cHNhbXBsZV9zc2UyOwogICAgICAgYnJlYWs7CkBAIC00MTksOCArNDA5LDcgQEAKIHsKICAgdm9pZCAoKnNzZTJmY3QpKEpESU1FTlNJT04sIEpTQU1QSU1BR0UsIEpESU1FTlNJT04sIEpTQU1QQVJSQVkpOwogCi0gIHN3aXRjaChjaW5mby0+b3V0X2NvbG9yX3NwYWNlKQotICB7CisgIHN3aXRjaChjaW5mby0+b3V0X2NvbG9yX3NwYWNlKSB7CiAgICAgY2FzZSBKQ1NfRVhUX1JHQjoKICAgICAgIHNzZTJmY3Q9anNpbWRfaDJ2MV9leHRyZ2JfbWVyZ2VkX3Vwc2FtcGxlX3NzZTI7CiAgICAgICBicmVhazsKQEAgLTcyOCwyNiArNzE3LDI4IEBACiAKIEdMT0JBTCh2b2lkKQoganNpbWRfaWRjdF9pc2xvdyAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCi0gICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAotICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKKyAgICAgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKIHsKLSAganNpbWRfaWRjdF9pc2xvd19zc2UyKGNvbXBwdHItPmRjdF90YWJsZSwgY29lZl9ibG9jaywgb3V0cHV0X2J1Ziwgb3V0cHV0X2NvbCk7CisgIGpzaW1kX2lkY3RfaXNsb3dfc3NlMihjb21wcHRyLT5kY3RfdGFibGUsIGNvZWZfYmxvY2ssIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfY29sKTsKIH0KIAogR0xPQkFMKHZvaWQpCiBqc2ltZF9pZGN0X2lmYXN0IChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKLSAgICAgICAgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCi0gICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQorICAgICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQogewotICBqc2ltZF9pZGN0X2lmYXN0X3NzZTIoY29tcHB0ci0+ZGN0X3RhYmxlLCBjb2VmX2Jsb2NrLCBvdXRwdXRfYnVmLCBvdXRwdXRfY29sKTsKKyAganNpbWRfaWRjdF9pZmFzdF9zc2UyKGNvbXBwdHItPmRjdF90YWJsZSwgY29lZl9ibG9jaywgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9jb2wpOwogfQogCiBHTE9CQUwodm9pZCkKIGpzaW1kX2lkY3RfZmxvYXQgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAotICAgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKLSAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9jb2wpCisgICAgICAgICAgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9jb2wpCiB7Ci0gIGpzaW1kX2lkY3RfZmxvYXRfc3NlMihjb21wcHRyLT5kY3RfdGFibGUsIGNvZWZfYmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfYnVmLCBvdXRwdXRfY29sKTsKKyAganNpbWRfaWRjdF9mbG9hdF9zc2UyKGNvbXBwdHItPmRjdF90YWJsZSwgY29lZl9ibG9jaywgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9jb2wpOwogfQogCmRpZmYgLS1naXQgYS9zaW1kL2pzaW1kY3B1LmFzbSBiL3NpbWQvanNpbWRjcHUuYXNtCmluZGV4IGJkYmNjMjMuLmM0MmM0YWQgMTAwNjQ0Ci0tLSBhL3NpbWQvanNpbWRjcHUuYXNtCisrKyBiL3NpbWQvanNpbWRjcHUuYXNtCkBAIC0xOSw4ICsxOSw4IEBACiAlaW5jbHVkZSAianNpbWRleHQuaW5jIgogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JU0VDVElPTglTRUdfVEVYVAotCUJJVFMJMzIKKyAgICAgICAgU0VDVElPTiBTRUdfVEVYVAorICAgICAgICBCSVRTICAgIDMyCiA7CiA7IENoZWNrIGlmIHRoZSBDUFUgc3VwcG9ydHMgU0lNRCBpbnN0cnVjdGlvbnMKIDsKQEAgLTI4LDc4ICsyOCw3OCBAQAogOyBqcGVnX3NpbWRfY3B1X3N1cHBvcnQgKHZvaWQpCiA7CiAKLQlhbGlnbgkxNgotCWdsb2JhbAlFWFROKGpwZWdfc2ltZF9jcHVfc3VwcG9ydCkKKyAgICAgICAgYWxpZ24gICAxNgorICAgICAgICBnbG9iYWwgIEVYVE4oanBlZ19zaW1kX2NwdV9zdXBwb3J0KQogCiBFWFROKGpwZWdfc2ltZF9jcHVfc3VwcG9ydCk6Ci0JcHVzaAllYngKLTsJcHVzaAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCi07CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAotOwlwdXNoCWVzaQkJOyB1bnVzZWQKLQlwdXNoCWVkaQorICAgICAgICBwdXNoICAgIGVieAorOyAgICAgICBwdXNoICAgIGVjeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgICAgICBwdXNoICAgIGVkeCAgICAgICAgICAgICA7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOyAgICAgICBwdXNoICAgIGVzaSAgICAgICAgICAgICA7IHVudXNlZAorICAgICAgICBwdXNoICAgIGVkaQogCi0JeG9yCWVkaSxlZGkJCQk7IHNpbWQgc3VwcG9ydCBmbGFnCisgICAgICAgIHhvciAgICAgZWRpLGVkaSAgICAgICAgICAgICAgICAgOyBzaW1kIHN1cHBvcnQgZmxhZwogCi0JcHVzaGZkCi0JcG9wCWVheAotCW1vdgllZHgsZWF4Ci0JeG9yCWVheCwgMTw8MjEJCTsgZmxpcCBJRCBiaXQgaW4gRUZMQUdTCi0JcHVzaAllYXgKLQlwb3BmZAotCXB1c2hmZAotCXBvcAllYXgKLQl4b3IJZWF4LGVkeAotCWp6CXNob3J0IC5yZXR1cm4JCTsgQ1BVSUQgaXMgbm90IHN1cHBvcnRlZAorICAgICAgICBwdXNoZmQKKyAgICAgICAgcG9wICAgICBlYXgKKyAgICAgICAgbW92ICAgICBlZHgsZWF4CisgICAgICAgIHhvciAgICAgZWF4LCAxPDwyMSAgICAgICAgICAgICAgOyBmbGlwIElEIGJpdCBpbiBFRkxBR1MKKyAgICAgICAgcHVzaCAgICBlYXgKKyAgICAgICAgcG9wZmQKKyAgICAgICAgcHVzaGZkCisgICAgICAgIHBvcCAgICAgZWF4CisgICAgICAgIHhvciAgICAgZWF4LGVkeAorICAgICAgICBqeiAgICAgIHNob3J0IC5yZXR1cm4gICAgICAgICAgIDsgQ1BVSUQgaXMgbm90IHN1cHBvcnRlZAogCi0JOyBDaGVjayBmb3IgTU1YIGluc3RydWN0aW9uIHN1cHBvcnQKLQl4b3IJZWF4LGVheAotCWNwdWlkCi0JdGVzdAllYXgsZWF4Ci0JanoJc2hvcnQgLnJldHVybgorICAgICAgICA7IENoZWNrIGZvciBNTVggaW5zdHJ1Y3Rpb24gc3VwcG9ydAorICAgICAgICB4b3IgICAgIGVheCxlYXgKKyAgICAgICAgY3B1aWQKKyAgICAgICAgdGVzdCAgICBlYXgsZWF4CisgICAgICAgIGp6ICAgICAgc2hvcnQgLnJldHVybgogCi0JeG9yCWVheCxlYXgKLQlpbmMJZWF4Ci0JY3B1aWQKLQltb3YJZWF4LGVkeAkJCTsgZWF4ID0gU3RhbmRhcmQgZmVhdHVyZSBmbGFncworICAgICAgICB4b3IgICAgIGVheCxlYXgKKyAgICAgICAgaW5jICAgICBlYXgKKyAgICAgICAgY3B1aWQKKyAgICAgICAgbW92ICAgICBlYXgsZWR4ICAgICAgICAgICAgICAgICA7IGVheCA9IFN0YW5kYXJkIGZlYXR1cmUgZmxhZ3MKIAotCXRlc3QJZWF4LCAxPDwyMwkJOyBiaXQyMzpNTVgKLQlqeglzaG9ydCAubm9fbW14Ci0Jb3IJZWRpLCBieXRlIEpTSU1EX01NWAorICAgICAgICB0ZXN0ICAgIGVheCwgMTw8MjMgICAgICAgICAgICAgIDsgYml0MjM6TU1YCisgICAgICAgIGp6ICAgICAgc2hvcnQgLm5vX21teAorICAgICAgICBvciAgICAgIGVkaSwgYnl0ZSBKU0lNRF9NTVgKIC5ub19tbXg6Ci0JdGVzdAllYXgsIDE8PDI1CQk7IGJpdDI1OlNTRQotCWp6CXNob3J0IC5ub19zc2UKLQlvcgllZGksIGJ5dGUgSlNJTURfU1NFCisgICAgICAgIHRlc3QgICAgZWF4LCAxPDwyNSAgICAgICAgICAgICAgOyBiaXQyNTpTU0UKKyAgICAgICAganogICAgICBzaG9ydCAubm9fc3NlCisgICAgICAgIG9yICAgICAgZWRpLCBieXRlIEpTSU1EX1NTRQogLm5vX3NzZToKLQl0ZXN0CWVheCwgMTw8MjYJCTsgYml0MjY6U1NFMgotCWp6CXNob3J0IC5ub19zc2UyCi0Jb3IJZWRpLCBieXRlIEpTSU1EX1NTRTIKKyAgICAgICAgdGVzdCAgICBlYXgsIDE8PDI2ICAgICAgICAgICAgICA7IGJpdDI2OlNTRTIKKyAgICAgICAganogICAgICBzaG9ydCAubm9fc3NlMgorICAgICAgICBvciAgICAgIGVkaSwgYnl0ZSBKU0lNRF9TU0UyCiAubm9fc3NlMjoKIAotCTsgQ2hlY2sgZm9yIDNETm93ISBpbnN0cnVjdGlvbiBzdXBwb3J0Ci0JbW92CWVheCwgMHg4MDAwMDAwMAotCWNwdWlkCi0JY21wCWVheCwgMHg4MDAwMDAwMAotCWpiZQlzaG9ydCAucmV0dXJuCisgICAgICAgIDsgQ2hlY2sgZm9yIDNETm93ISBpbnN0cnVjdGlvbiBzdXBwb3J0CisgICAgICAgIG1vdiAgICAgZWF4LCAweDgwMDAwMDAwCisgICAgICAgIGNwdWlkCisgICAgICAgIGNtcCAgICAgZWF4LCAweDgwMDAwMDAwCisgICAgICAgIGpiZSAgICAgc2hvcnQgLnJldHVybgogCi0JbW92CWVheCwgMHg4MDAwMDAwMQotCWNwdWlkCi0JbW92CWVheCxlZHgJCQk7IGVheCA9IEV4dGVuZGVkIGZlYXR1cmUgZmxhZ3MKKyAgICAgICAgbW92ICAgICBlYXgsIDB4ODAwMDAwMDEKKyAgICAgICAgY3B1aWQKKyAgICAgICAgbW92ICAgICBlYXgsZWR4ICAgICAgICAgICAgICAgICA7IGVheCA9IEV4dGVuZGVkIGZlYXR1cmUgZmxhZ3MKIAotCXRlc3QJZWF4LCAxPDwzMQkJOyBiaXQzMTozRE5vdyEodmVuZG9yIGluZGVwZW5kZW50KQotCWp6CXNob3J0IC5ub18zZG5vdwotCW9yCWVkaSwgYnl0ZSBKU0lNRF8zRE5PVworICAgICAgICB0ZXN0ICAgIGVheCwgMTw8MzEgICAgICAgICAgICAgIDsgYml0MzE6M0ROb3chKHZlbmRvciBpbmRlcGVuZGVudCkKKyAgICAgICAganogICAgICBzaG9ydCAubm9fM2Rub3cKKyAgICAgICAgb3IgICAgICBlZGksIGJ5dGUgSlNJTURfM0ROT1cKIC5ub18zZG5vdzoKIAogLnJldHVybjoKLQltb3YJZWF4LGVkaQorICAgICAgICBtb3YgICAgIGVheCxlZGkKIAotCXBvcAllZGkKLTsJcG9wCWVzaQkJOyB1bnVzZWQKLTsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLTsJcG9wCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKLQlwb3AJZWJ4Ci0JcmV0CisgICAgICAgIHBvcCAgICAgZWRpCis7ICAgICAgIHBvcCAgICAgZXNpICAgICAgICAgICAgIDsgdW51c2VkCis7ICAgICAgIHBvcCAgICAgZWR4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7ICAgICAgIHBvcCAgICAgZWN4ICAgICAgICAgICAgIDsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisgICAgICAgIHBvcCAgICAgZWJ4CisgICAgICAgIHJldAogCiA7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQogOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgotCWFsaWduCTE2CisgICAgICAgIGFsaWduICAgMTYKZGlmZiAtLWdpdCBhL3NpbWQvanNpbWRleHQuaW5jIGIvc2ltZC9qc2ltZGV4dC5pbmMKaW5kZXggMjUzYjg5Ny4uMGYxYThkYSAxMDA2NDQKLS0tIGEvc2ltZC9qc2ltZGV4dC5pbmMKKysrIGIvc2ltZC9qc2ltZGV4dC5pbmMKQEAgLTMwLDcgKzMwLDcgQEAKIDsgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIDsgIFN5c3RlbS1kZXBlbmRlbnQgY29uZmlndXJhdGlvbnMKIAotJWlmZGVmIFdJTjMyCTsgLS0tLShuYXNtIC1md2luMzIgLURXSU4zMiAuLi4pLS0tLS0tLS0KKyVpZmRlZiBXSU4zMiAgICA7IC0tLS0obmFzbSAtZndpbjMyIC1EV0lOMzIgLi4uKS0tLS0tLS0tCiA7ICogTWljcm9zb2Z0IFZpc3VhbCBDKysKIDsgKiBNaW5HVyAoTWluaW1hbGlzdCBHTlUgZm9yIFdpbmRvd3MpCiA7ICogQ3lnV2luCkBAIC00Niw3ICs0Niw3IEBACiAlZGVmaW5lIFNFR19DT05TVCAgIC5yZGF0YSBhbGlnbj0xNiBwdWJsaWMgdXNlMzIgY2xhc3M9Q09OU1QKICVlbmRpZgogCi0lZWxpZmRlZiBXSU42NAk7IC0tLS0obmFzbSAtZndpbjY0IC1EV0lONjQgLi4uKS0tLS0tLS0tCislZWxpZmRlZiBXSU42NCAgOyAtLS0tKG5hc20gLWZ3aW42NCAtRFdJTjY0IC4uLiktLS0tLS0tLQogOyAqIE1pY3Jvc29mdCBWaXN1YWwgQysrCiAKIDsgLS0gc2VnbWVudCBkZWZpbml0aW9uIC0tCkBAIC01OCw5ICs1OCw5IEBACiAlZGVmaW5lIFNFR19URVhUICAgIC50ZXh0ICBhbGlnbj0xNiBwdWJsaWMgdXNlNjQgY2xhc3M9Q09ERQogJWRlZmluZSBTRUdfQ09OU1QgICAucmRhdGEgYWxpZ249MTYgcHVibGljIHVzZTY0IGNsYXNzPUNPTlNUCiAlZW5kaWYKLSVkZWZpbmUgRVhUTihuYW1lKSAgbmFtZQkJCTsgZm9vKCkgLT4gZm9vCislZGVmaW5lIEVYVE4obmFtZSkgIG5hbWUgICAgICAgICAgICAgICAgICAgICAgICA7IGZvbygpIC0+IGZvbwogCi0lZWxpZmRlZiBPQkozMgk7IC0tLS0obmFzbSAtZm9iaiAtRE9CSjMyIC4uLiktLS0tLS0tLS0tCislZWxpZmRlZiBPQkozMiAgOyAtLS0tKG5hc20gLWZvYmogLURPQkozMiAuLi4pLS0tLS0tLS0tLQogOyAqIEJvcmxhbmQgQysrIChXaW4zMikKIAogOyAtLSBzZWdtZW50IGRlZmluaXRpb24gLS0KQEAgLTY4LDcgKzY4LDcgQEAKICVkZWZpbmUgU0VHX1RFWFQgICAgLnRleHQgIGFsaWduPTE2IHB1YmxpYyB1c2UzMiBjbGFzcz1DT0RFCiAlZGVmaW5lIFNFR19DT05TVCAgIC5kYXRhICBhbGlnbj0xNiBwdWJsaWMgdXNlMzIgY2xhc3M9REFUQQogCi0lZWxpZmRlZiBFTEYJOyAtLS0tKG5hc20gLWZlbGZbNjRdIC1ERUxGIC4uLiktLS0tLS0tLS0tLS0KKyVlbGlmZGVmIEVMRiAgICA7IC0tLS0obmFzbSAtZmVsZls2NF0gLURFTEYgLi4uKS0tLS0tLS0tLS0tLQogOyAqIExpbnV4CiA7ICogKkJTRCBmYW1pbHkgVW5peCB1c2luZyBlbGYgZm9ybWF0CiA7ICogVW5peCBTeXN0ZW0gViwgaW5jbHVkaW5nIFNvbGFyaXMgeDg2LCBVbml4V2FyZSBhbmQgU0NPIFVuaXgKQEAgLTg4LDEwICs4OCwxMCBAQAogCiA7IFRvIG1ha2UgdGhlIGNvZGUgcG9zaXRpb24taW5kZXBlbmRlbnQsIGFwcGVuZCAtRFBJQyB0byB0aGUgY29tbWFuZGxpbmUKIDsKLSVkZWZpbmUgR09UX1NZTUJPTCAgX0dMT0JBTF9PRkZTRVRfVEFCTEVfCTsgRUxGIHN1cHBvcnRzIFBJQwotJWRlZmluZSBFWFROKG5hbWUpICBuYW1lCQkJOyBmb28oKSAtPiBmb28KKyVkZWZpbmUgR09UX1NZTUJPTCAgX0dMT0JBTF9PRkZTRVRfVEFCTEVfICAgICAgIDsgRUxGIHN1cHBvcnRzIFBJQworJWRlZmluZSBFWFROKG5hbWUpICBuYW1lICAgICAgICAgICAgICAgICAgICAgICAgOyBmb28oKSAtPiBmb28KIAotJWVsaWZkZWYgQU9VVAk7IC0tLS0obmFzbSAtZmFvdXRiL2FvdXQgLURBT1VUIC4uLiktLS0tCislZWxpZmRlZiBBT1VUICAgOyAtLS0tKG5hc20gLWZhb3V0Yi9hb3V0IC1EQU9VVCAuLi4pLS0tLQogOyAqIE9sZGVyIExpbnV4IHVzaW5nIGEub3V0IGZvcm1hdCAgKG5hc20gLWYgYW91dCAtREFPVVQgLi4uKQogOyAqICpCU0QgZmFtaWx5IFVuaXggdXNpbmcgYS5vdXQgZm9ybWF0ICAobmFzbSAtZiBhb3V0YiAtREFPVVQgLi4uKQogCkBAIC0xMDIsMjkgKzEwMiwyOSBAQAogCiA7IFRvIG1ha2UgdGhlIGNvZGUgcG9zaXRpb24taW5kZXBlbmRlbnQsIGFwcGVuZCAtRFBJQyB0byB0aGUgY29tbWFuZGxpbmUKIDsKLSVkZWZpbmUgR09UX1NZTUJPTCAgX19HTE9CQUxfT0ZGU0VUX1RBQkxFXwk7IEJTRC1zdHlsZSBhLm91dCBzdXBwb3J0cyBQSUMKKyVkZWZpbmUgR09UX1NZTUJPTCAgX19HTE9CQUxfT0ZGU0VUX1RBQkxFXyAgICAgIDsgQlNELXN0eWxlIGEub3V0IHN1cHBvcnRzIFBJQwogCi0lZWxpZmRlZiBNQUNITwk7IC0tLS0obmFzbSAtZm1hY2hvIC1ETUFDSE8gLi4uKS0tLS0tLS0tCislZWxpZmRlZiBNQUNITyAgOyAtLS0tKG5hc20gLWZtYWNobyAtRE1BQ0hPIC4uLiktLS0tLS0tLQogOyAqIE5lWFRzdGVwL09wZW5TdGVwL1JoYXBzb2R5L0Rhcndpbi9NYWNPUyBYIChNYWNoLU8gZm9ybWF0KQogCiA7IC0tIHNlZ21lbnQgZGVmaW5pdGlvbiAtLQogOwotJWRlZmluZSBTRUdfVEVYVCAgICAudGV4dCAgO2FsaWduPTE2CTsgbmFzbSBkb2Vzbid0IGFjY2VwdCBhbGlnbj0xNi4gd2h5PworJWRlZmluZSBTRUdfVEVYVCAgICAudGV4dCAgO2FsaWduPTE2ICAgIDsgbmFzbSBkb2Vzbid0IGFjY2VwdCBhbGlnbj0xNi4gd2h5PwogJWRlZmluZSBTRUdfQ09OU1QgICAucm9kYXRhIGFsaWduPTE2CiAKIDsgVGhlIGdlbmVyYXRpb24gb2YgcG9zaXRpb24taW5kZXBlbmRlbnQgY29kZSAoUElDKSBpcyB0aGUgZGVmYXVsdCBvbiBEYXJ3aW4uCiA7CiAlZGVmaW5lIFBJQwotJWRlZmluZSBHT1RfU1lNQk9MICBfTUFDSE9fUElDXwkJOyBNYWNoLU8gc3R5bGUgY29kZS1yZWxhdGl2ZSBhZGRyZXNzaW5nCislZGVmaW5lIEdPVF9TWU1CT0wgIF9NQUNIT19QSUNfICAgICAgICAgOyBNYWNoLU8gc3R5bGUgY29kZS1yZWxhdGl2ZSBhZGRyZXNzaW5nCiAKLSVlbHNlCQk7IC0tLS0oT3RoZXIgY2FzZSktLS0tLS0tLS0tLS0tLS0tLS0tLS0tCislZWxzZSAgICAgICAgICAgOyAtLS0tKE90aGVyIGNhc2UpLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiA7IC0tIHNlZ21lbnQgZGVmaW5pdGlvbiAtLQogOwogJWRlZmluZSBTRUdfVEVYVCAgICAudGV4dAogJWRlZmluZSBTRUdfQ09OU1QgICAuZGF0YQogCi0lZW5kaWYJOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCislZW5kaWYgIDsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiA7ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKQEAgLTE3OSw3ICsxNzksNyBAQAogOyAgRXh0ZXJuYWwgU3ltYm9sIE5hbWUKIDsKICVpZm5kZWYgRVhUTgotJWRlZmluZSBFWFROKG5hbWUpICAgXyAlKyBuYW1lCQk7IGZvbygpIC0+IF9mb28KKyVkZWZpbmUgRVhUTihuYW1lKSAgIF8gJSsgbmFtZSAgICAgICAgICA7IGZvbygpIC0+IF9mb28KICVlbmRpZgogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xOTYsNzkgKzE5Niw3OSBAQAogOyBBdCBwcmVzZW50LCBuYXNtIGRvZXNuJ3Qgc2VlbSB0byBzdXBwb3J0IFBJQyBnZW5lcmF0aW9uIGZvciBNYWNoLU8uCiA7IFRoZSBQSUMgc3VwcG9ydCBjb2RlIGJlbG93IGlzIGEgbGl0dGxlIHRyaWNreS4KIAotCVNFQ1RJT04JU0VHX0NPTlNUCisgICAgICAgIFNFQ1RJT04gU0VHX0NPTlNUCiBjb25zdF9iYXNlOgogCiAlZGVmaW5lIEdPVE9GRihnb3Qsc3ltKSAoZ290KSArIChzeW0pIC0gY29uc3RfYmFzZQogCi0laW1hY3JvIGdldF9HT1QJMQotCTsgTk9URTogdGhpcyBtYWNybyBkZXN0cm95cyBlY3ggcmVzaXN0ZXIuCi0JY2FsbAklJWdldGVpcAotCWFkZAllY3gsIGJ5dGUgKCUlcmVmIC0gJCkKLQlqbXAJc2hvcnQgJSVhZGp1c3QKKyVpbWFjcm8gZ2V0X0dPVCAxCisgICAgICAgIDsgTk9URTogdGhpcyBtYWNybyBkZXN0cm95cyBlY3ggcmVzaXN0ZXIuCisgICAgICAgIGNhbGwgICAgJSVnZXRlaXAKKyAgICAgICAgYWRkICAgICBlY3gsIGJ5dGUgKCUlcmVmIC0gJCkKKyAgICAgICAgam1wICAgICBzaG9ydCAlJWFkanVzdAogJSVnZXRlaXA6Ci0JbW92CWVjeCwgUE9JTlRFUiBbZXNwXQotCXJldAorICAgICAgICBtb3YgICAgIGVjeCwgUE9JTlRFUiBbZXNwXQorICAgICAgICByZXQKICUlYWRqdXN0OgotCXB1c2gJZWJwCi0JeG9yCWVicCxlYnAJCTsgZWJwID0gMAotJWlmaWRuaSAlMSxlYngJOyAoJTEgPT0gZWJ4KQotCTsgZGIgMHg4RCwweDlDICsgam1wIG5lYXIgY29uc3RfYmFzZSA9Ci0JOyAgIGxlYSBlYngsIFtlY3grZWJwKjgrKGNvbnN0X2Jhc2UtJSVyZWYpXSA7IDhELDlDLEU5LChvZmZzZXQzMikKLQlkYgkweDhELDB4OUMJCTsgOEQsOUMKLQlqbXAJbmVhciBjb25zdF9iYXNlCQk7IEU5LChjb25zdF9iYXNlLSUlcmVmKQorICAgICAgICBwdXNoICAgIGVicAorICAgICAgICB4b3IgICAgIGVicCxlYnAgICAgICAgICA7IGVicCA9IDAKKyVpZmlkbmkgJTEsZWJ4ICA7ICglMSA9PSBlYngpCisgICAgICAgIDsgZGIgMHg4RCwweDlDICsgam1wIG5lYXIgY29uc3RfYmFzZSA9CisgICAgICAgIDsgICBsZWEgZWJ4LCBbZWN4K2VicCo4Kyhjb25zdF9iYXNlLSUlcmVmKV0gOyA4RCw5QyxFOSwob2Zmc2V0MzIpCisgICAgICAgIGRiICAgICAgMHg4RCwweDlDICAgICAgICAgICAgICAgOyA4RCw5QworICAgICAgICBqbXAgICAgIG5lYXIgY29uc3RfYmFzZSAgICAgICAgIDsgRTksKGNvbnN0X2Jhc2UtJSVyZWYpCiAlJXJlZjoKICVlbHNlICA7ICglMSAhPSBlYngpCi0JOyBkYiAweDhELDB4OEMgKyBqbXAgbmVhciBjb25zdF9iYXNlID0KLQk7ICAgbGVhIGVjeCwgW2VjeCtlYnAqOCsoY29uc3RfYmFzZS0lJXJlZildIDsgOEQsOEMsRTksKG9mZnNldDMyKQotCWRiCTB4OEQsMHg4QwkJOyA4RCw4QwotCWptcAluZWFyIGNvbnN0X2Jhc2UJCTsgRTksKGNvbnN0X2Jhc2UtJSVyZWYpCi0lJXJlZjoJbW92CSUxLCBlY3gKKyAgICAgICAgOyBkYiAweDhELDB4OEMgKyBqbXAgbmVhciBjb25zdF9iYXNlID0KKyAgICAgICAgOyAgIGxlYSBlY3gsIFtlY3grZWJwKjgrKGNvbnN0X2Jhc2UtJSVyZWYpXSA7IDhELDhDLEU5LChvZmZzZXQzMikKKyAgICAgICAgZGIgICAgICAweDhELDB4OEMgICAgICAgICAgICAgICA7IDhELDhDCisgICAgICAgIGptcCAgICAgbmVhciBjb25zdF9iYXNlICAgICAgICAgOyBFOSwoY29uc3RfYmFzZS0lJXJlZikKKyUlcmVmOiAgbW92ICAgICAlMSwgZWN4CiAlZW5kaWYgOyAoJTEgPT0gZWJ4KQotCXBvcAllYnAKKyAgICAgICAgcG9wICAgICBlYnAKICVlbmRtYWNybwogCi0lZWxzZQk7IEdPVF9TWU1CT0wgIT0gX01BQ0hPX1BJQ18gLS0tLS0tLS0tLS0tLS0tLQorJWVsc2UgICA7IEdPVF9TWU1CT0wgIT0gX01BQ0hPX1BJQ18gLS0tLS0tLS0tLS0tLS0tLQogCiAlZGVmaW5lIEdPVE9GRihnb3Qsc3ltKSAoZ290KSArIChzeW0pIHdydCAuLmdvdG9mZgogCi0laW1hY3JvIGdldF9HT1QJMQotCWV4dGVybglHT1RfU1lNQk9MCi0JY2FsbAklJWdldGVpcAotCWFkZAklMSwgR09UX1NZTUJPTCArICQkIC0gJCB3cnQgLi5nb3RwYwotCWptcAlzaG9ydCAlJWRvbmUKKyVpbWFjcm8gZ2V0X0dPVCAxCisgICAgICAgIGV4dGVybiAgR09UX1NZTUJPTAorICAgICAgICBjYWxsICAgICUlZ2V0ZWlwCisgICAgICAgIGFkZCAgICAgJTEsIEdPVF9TWU1CT0wgKyAkJCAtICQgd3J0IC4uZ290cGMKKyAgICAgICAgam1wICAgICBzaG9ydCAlJWRvbmUKICUlZ2V0ZWlwOgotCW1vdgklMSwgUE9JTlRFUiBbZXNwXQotCXJldAorICAgICAgICBtb3YgICAgICUxLCBQT0lOVEVSIFtlc3BdCisgICAgICAgIHJldAogJSVkb25lOgogJWVuZG1hY3JvCiAKLSVlbmRpZgk7IEdPVF9TWU1CT0wgPT0gX01BQ0hPX1BJQ18gLS0tLS0tLS0tLS0tLS0tLQorJWVuZGlmICA7IEdPVF9TWU1CT0wgPT0gX01BQ0hPX1BJQ18gLS0tLS0tLS0tLS0tLS0tLQogCi0laW1hY3JvIHB1c2hwaWMJMS5ub2xpc3QKLQlwdXNoCSUxCislaW1hY3JvIHB1c2hwaWMgMS5ub2xpc3QKKyAgICAgICAgcHVzaCAgICAlMQogJWVuZG1hY3JvCi0laW1hY3JvIHBvcHBpYwkxLm5vbGlzdAotCXBvcAklMQorJWltYWNybyBwb3BwaWMgIDEubm9saXN0CisgICAgICAgIHBvcCAgICAgJTEKICVlbmRtYWNybwotJWltYWNybyBtb3ZwaWMJMi5ub2xpc3QKLQltb3YJJTEsJTIKKyVpbWFjcm8gbW92cGljICAyLm5vbGlzdAorICAgICAgICBtb3YgICAgICUxLCUyCiAlZW5kbWFjcm8KIAotJWVsc2UJOyAhUElDIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCislZWxzZSAgIDsgIVBJQyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAlZGVmaW5lIEdPVE9GRihnb3Qsc3ltKSAoc3ltKQogCi0laW1hY3JvIGdldF9HT1QJMS5ub2xpc3QKKyVpbWFjcm8gZ2V0X0dPVCAxLm5vbGlzdAogJWVuZG1hY3JvCi0laW1hY3JvIHB1c2hwaWMJMS5ub2xpc3QKKyVpbWFjcm8gcHVzaHBpYyAxLm5vbGlzdAogJWVuZG1hY3JvCi0laW1hY3JvIHBvcHBpYwkxLm5vbGlzdAorJWltYWNybyBwb3BwaWMgIDEubm9saXN0CiAlZW5kbWFjcm8KLSVpbWFjcm8gbW92cGljCTIubm9saXN0CislaW1hY3JvIG1vdnBpYyAgMi5ub2xpc3QKICVlbmRtYWNybwogCi0lZW5kaWYJOyAgUElDIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCislZW5kaWYgIDsgIFBJQyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiA7ICBBbGlnbiB0aGUgbmV4dCBpbnN0cnVjdGlvbiBvbiB7Miw0LDgsMTYsLi59LWJ5dGUgYm91bmRhcnkuCkBAIC0yNzgsMjggKzI3OCwyOCBAQAogJWRlZmluZSBGSUxMQihiLG4pICAoKCQkLShiKSkgJiAoKG4pLTEpKQogCiAlaW1hY3JvIGFsaWdueCAxLTIubm9saXN0IDB4RkZGRgotJSViczoJdGltZXMgTVNLTEUoRklMTEIoJSVicywlMSksJTIpICYgTVNLTEUoMTYsRklMTEIoJCwlMSkpICYgRklMTEIoJCwlMSkgXAotCSAgICAgICBkYiAweDkwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgbm9wCi0JdGltZXMgTVNLTEUoRklMTEIoJSVicywlMSksJTIpICYgRklMTEIoJCwlMSkvOSBcCi0JICAgICAgIGRiIDB4OEQsMHg5QywweDIzLDB4MDAsMHgwMCwweDAwLDB4MDAgOyBsZWEgZWJ4LFtlYngrMHgwMDAwMDAwMF0KLQl0aW1lcyBNU0tMRShGSUxMQiglJWJzLCUxKSwlMikgJiBGSUxMQigkLCUxKS83IFwKLQkgICAgICAgZGIgMHg4RCwweEFDLDB4MjUsMHgwMCwweDAwLDB4MDAsMHgwMCA7IGxlYSBlYnAsW2VicCsweDAwMDAwMDAwXQotCXRpbWVzIE1TS0xFKEZJTExCKCUlYnMsJTEpLCUyKSAmIEZJTExCKCQsJTEpLzYgXAotCSAgICAgICBkYiAweDhELDB4QUQsMHgwMCwweDAwLDB4MDAsMHgwMCAgICAgIDsgbGVhIGVicCxbZWJwKzB4MDAwMDAwMDBdCi0JdGltZXMgTVNLTEUoRklMTEIoJSVicywlMSksJTIpICYgRklMTEIoJCwlMSkvNCBcCi0JICAgICAgIGRiIDB4OEQsMHg2QywweDI1LDB4MDAgICAgICAgICAgICAgICAgOyBsZWEgZWJwLFtlYnArMHgwMF0KLQl0aW1lcyBNU0tMRShGSUxMQiglJWJzLCUxKSwlMikgJiBGSUxMQigkLCUxKS8zIFwKLQkgICAgICAgZGIgMHg4RCwweDZELDB4MDAgICAgICAgICAgICAgICAgICAgICA7IGxlYSBlYnAsW2VicCsweDAwXQotCXRpbWVzIE1TS0xFKEZJTExCKCUlYnMsJTEpLCUyKSAmIEZJTExCKCQsJTEpLzIgXAotCSAgICAgICBkYiAweDhCLDB4RUQgICAgICAgICAgICAgICAgICAgICAgICAgIDsgbW92IGVicCxlYnAKLQl0aW1lcyBNU0tMRShGSUxMQiglJWJzLCUxKSwlMikgJiBGSUxMQigkLCUxKS8xIFwKLQkgICAgICAgZGIgMHg5MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IG5vcAorJSViczogICB0aW1lcyBNU0tMRShGSUxMQiglJWJzLCUxKSwlMikgJiBNU0tMRSgxNixGSUxMQigkLCUxKSkgJiBGSUxMQigkLCUxKSBcCisgICAgICAgICAgICAgICBkYiAweDkwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgbm9wCisgICAgICAgIHRpbWVzIE1TS0xFKEZJTExCKCUlYnMsJTEpLCUyKSAmIEZJTExCKCQsJTEpLzkgXAorICAgICAgICAgICAgICAgZGIgMHg4RCwweDlDLDB4MjMsMHgwMCwweDAwLDB4MDAsMHgwMCA7IGxlYSBlYngsW2VieCsweDAwMDAwMDAwXQorICAgICAgICB0aW1lcyBNU0tMRShGSUxMQiglJWJzLCUxKSwlMikgJiBGSUxMQigkLCUxKS83IFwKKyAgICAgICAgICAgICAgIGRiIDB4OEQsMHhBQywweDI1LDB4MDAsMHgwMCwweDAwLDB4MDAgOyBsZWEgZWJwLFtlYnArMHgwMDAwMDAwMF0KKyAgICAgICAgdGltZXMgTVNLTEUoRklMTEIoJSVicywlMSksJTIpICYgRklMTEIoJCwlMSkvNiBcCisgICAgICAgICAgICAgICBkYiAweDhELDB4QUQsMHgwMCwweDAwLDB4MDAsMHgwMCAgICAgIDsgbGVhIGVicCxbZWJwKzB4MDAwMDAwMDBdCisgICAgICAgIHRpbWVzIE1TS0xFKEZJTExCKCUlYnMsJTEpLCUyKSAmIEZJTExCKCQsJTEpLzQgXAorICAgICAgICAgICAgICAgZGIgMHg4RCwweDZDLDB4MjUsMHgwMCAgICAgICAgICAgICAgICA7IGxlYSBlYnAsW2VicCsweDAwXQorICAgICAgICB0aW1lcyBNU0tMRShGSUxMQiglJWJzLCUxKSwlMikgJiBGSUxMQigkLCUxKS8zIFwKKyAgICAgICAgICAgICAgIGRiIDB4OEQsMHg2RCwweDAwICAgICAgICAgICAgICAgICAgICAgOyBsZWEgZWJwLFtlYnArMHgwMF0KKyAgICAgICAgdGltZXMgTVNLTEUoRklMTEIoJSVicywlMSksJTIpICYgRklMTEIoJCwlMSkvMiBcCisgICAgICAgICAgICAgICBkYiAweDhCLDB4RUQgICAgICAgICAgICAgICAgICAgICAgICAgIDsgbW92IGVicCxlYnAKKyAgICAgICAgdGltZXMgTVNLTEUoRklMTEIoJSVicywlMSksJTIpICYgRklMTEIoJCwlMSkvMSBcCisgICAgICAgICAgICAgICBkYiAweDkwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgbm9wCiAlZW5kbWFjcm8KIAogOyBBbGlnbiB0aGUgbmV4dCBkYXRhIG9uIHsyLDQsOCwxNiwuLn0tYnl0ZSBib3VuZGFyeS4KIDsKICVpbWFjcm8gYWxpZ256IDEubm9saXN0Ci0JYWxpZ24gJTEsIGRiIDAJCTsgZmlsbGluZyB6ZXJvcworICAgICAgICBhbGlnbiAlMSwgZGIgMCAgICAgICAgICA7IGZpbGxpbmcgemVyb3MKICVlbmRtYWNybwogCiAlaWZkZWYgX194ODZfNjRfXwpAQCAtMzA3LDYxICszMDcsNjEgQEAKICVpZmRlZiBXSU42NAogCiAlaW1hY3JvIGNvbGxlY3RfYXJncyAwCi0JcHVzaCByMTIKLQlwdXNoIHIxMwotCXB1c2ggcjE0Ci0JcHVzaCByMTUKLQltb3YgcjEwLCByY3gKLQltb3YgcjExLCByZHgKLQltb3YgcjEyLCByOAotCW1vdiByMTMsIHI5Ci0JbW92IHIxNCwgW3JheCs0OF0KLQltb3YgcjE1LCBbcmF4KzU2XQotCXB1c2ggcnNpCi0JcHVzaCByZGkKLQlzdWIgICAgIHJzcCwgU0laRU9GX1hNTVdPUkQKLQltb3ZhcHMgIFhNTVdPUkQgW3JzcF0sIHhtbTYKLQlzdWIgICAgIHJzcCwgU0laRU9GX1hNTVdPUkQKLQltb3ZhcHMgIFhNTVdPUkQgW3JzcF0sIHhtbTcKKyAgICAgICAgcHVzaCByMTIKKyAgICAgICAgcHVzaCByMTMKKyAgICAgICAgcHVzaCByMTQKKyAgICAgICAgcHVzaCByMTUKKyAgICAgICAgbW92IHIxMCwgcmN4CisgICAgICAgIG1vdiByMTEsIHJkeAorICAgICAgICBtb3YgcjEyLCByOAorICAgICAgICBtb3YgcjEzLCByOQorICAgICAgICBtb3YgcjE0LCBbcmF4KzQ4XQorICAgICAgICBtb3YgcjE1LCBbcmF4KzU2XQorICAgICAgICBwdXNoIHJzaQorICAgICAgICBwdXNoIHJkaQorICAgICAgICBzdWIgICAgIHJzcCwgU0laRU9GX1hNTVdPUkQKKyAgICAgICAgbW92YXBzICBYTU1XT1JEIFtyc3BdLCB4bW02CisgICAgICAgIHN1YiAgICAgcnNwLCBTSVpFT0ZfWE1NV09SRAorICAgICAgICBtb3ZhcHMgIFhNTVdPUkQgW3JzcF0sIHhtbTcKICVlbmRtYWNybwogCiAlaW1hY3JvIHVuY29sbGVjdF9hcmdzIDAKLQltb3ZhcHMgIHhtbTcsIFhNTVdPUkQgW3JzcF0KLQlhZGQgICAgIHJzcCwgU0laRU9GX1hNTVdPUkQKLQltb3ZhcHMgIHhtbTYsIFhNTVdPUkQgW3JzcF0KLQlhZGQgICAgIHJzcCwgU0laRU9GX1hNTVdPUkQKLQlwb3AgcmRpCi0JcG9wIHJzaQotCXBvcCByMTUKLQlwb3AgcjE0Ci0JcG9wIHIxMwotCXBvcCByMTIKKyAgICAgICAgbW92YXBzICB4bW03LCBYTU1XT1JEIFtyc3BdCisgICAgICAgIGFkZCAgICAgcnNwLCBTSVpFT0ZfWE1NV09SRAorICAgICAgICBtb3ZhcHMgIHhtbTYsIFhNTVdPUkQgW3JzcF0KKyAgICAgICAgYWRkICAgICByc3AsIFNJWkVPRl9YTU1XT1JECisgICAgICAgIHBvcCByZGkKKyAgICAgICAgcG9wIHJzaQorICAgICAgICBwb3AgcjE1CisgICAgICAgIHBvcCByMTQKKyAgICAgICAgcG9wIHIxMworICAgICAgICBwb3AgcjEyCiAlZW5kbWFjcm8KIAogJWVsc2UKIAogJWltYWNybyBjb2xsZWN0X2FyZ3MgMAotCXB1c2ggcjEwCi0JcHVzaCByMTEKLQlwdXNoIHIxMgotCXB1c2ggcjEzCi0JcHVzaCByMTQKLQlwdXNoIHIxNQotCW1vdiByMTAsIHJkaQotCW1vdiByMTEsIHJzaQotCW1vdiByMTIsIHJkeAotCW1vdiByMTMsIHJjeAotCW1vdiByMTQsIHI4Ci0JbW92IHIxNSwgcjkKKyAgICAgICAgcHVzaCByMTAKKyAgICAgICAgcHVzaCByMTEKKyAgICAgICAgcHVzaCByMTIKKyAgICAgICAgcHVzaCByMTMKKyAgICAgICAgcHVzaCByMTQKKyAgICAgICAgcHVzaCByMTUKKyAgICAgICAgbW92IHIxMCwgcmRpCisgICAgICAgIG1vdiByMTEsIHJzaQorICAgICAgICBtb3YgcjEyLCByZHgKKyAgICAgICAgbW92IHIxMywgcmN4CisgICAgICAgIG1vdiByMTQsIHI4CisgICAgICAgIG1vdiByMTUsIHI5CiAlZW5kbWFjcm8KIAogJWltYWNybyB1bmNvbGxlY3RfYXJncyAwCi0JcG9wIHIxNQotCXBvcCByMTQKLQlwb3AgcjEzCi0JcG9wIHIxMgotCXBvcCByMTEKLQlwb3AgcjEwCisgICAgICAgIHBvcCByMTUKKyAgICAgICAgcG9wIHIxNAorICAgICAgICBwb3AgcjEzCisgICAgICAgIHBvcCByMTIKKyAgICAgICAgcG9wIHIxMQorICAgICAgICBwb3AgcjEwCiAlZW5kbWFjcm8KIAogJWVuZGlmCmRpZmYgLS1naXQgYS9zdHJ1Y3R1cmUudHh0IGIvc3RydWN0dXJlLnR4dAppbmRleCBiNGRmZWY4Li42MDQ1Nzg0IDEwMDY0NAotLS0gYS9zdHJ1Y3R1cmUudHh0CisrKyBiL3N0cnVjdHVyZS50eHQKQEAgLTEsNyArMSw3IEBACiBJSkcgSlBFRyBMSUJSQVJZOiAgU1lTVEVNIEFSQ0hJVEVDVFVSRQogCitUaGlzIGZpbGUgd2FzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZToKIENvcHlyaWdodCAoQykgMTk5MS0yMDEyLCBUaG9tYXMgRy4gTGFuZSwgR3VpZG8gVm9sbGJlZGluZy4KLVRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgogSXQgd2FzIG1vZGlmaWVkIGJ5IFRoZSBsaWJqcGVnLXR1cmJvIFByb2plY3QgdG8gaW5jbHVkZSBvbmx5IGluZm9ybWF0aW9uCiByZWxldmFudCB0byBsaWJqcGVnLXR1cmJvLgogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgpAQCAtMjQsOCArMjQsOCBAQAogICBBICJjb2VmZmljaWVudCIgaXMgYSBmcmVxdWVuY3kgY29lZmZpY2llbnQgKGEgRENUIHRyYW5zZm9ybSBvdXRwdXQgbnVtYmVyKS4KICAgQSAiYmxvY2siIGlzIGFuIDh4OCBncm91cCBvZiBzYW1wbGVzIG9yIGNvZWZmaWNpZW50cy4KICAgQW4gIk1DVSIgKG1pbmltdW0gY29kZWQgdW5pdCkgaXMgYW4gaW50ZXJsZWF2ZWQgc2V0IG9mIGJsb2NrcyBvZiBzaXplCi0JZGV0ZXJtaW5lZCBieSB0aGUgc2FtcGxpbmcgZmFjdG9ycywgb3IgYSBzaW5nbGUgYmxvY2sgaW4gYQotCW5vbmludGVybGVhdmVkIHNjYW4uCisgICAgICAgIGRldGVybWluZWQgYnkgdGhlIHNhbXBsaW5nIGZhY3RvcnMsIG9yIGEgc2luZ2xlIGJsb2NrIGluIGEKKyAgICAgICAgbm9uaW50ZXJsZWF2ZWQgc2Nhbi4KIFdlIGRvIG5vdCB1c2UgdGhlIHRlcm1zICJwaXhlbCIgYW5kICJzYW1wbGUiIGludGVyY2hhbmdlYWJseS4gIFdoZW4gd2Ugc2F5CiBwaXhlbCwgd2UgbWVhbiBhbiBlbGVtZW50IG9mIHRoZSBmdWxsLXNpemUgaW1hZ2UsIHdoaWxlIGEgc2FtcGxlIGlzIGFuIGVsZW1lbnQKIG9mIHRoZSBkb3duc2FtcGxlZCBpbWFnZS4gIFRodXMgdGhlIG51bWJlciBvZiBzYW1wbGVzIG1heSB2YXJ5IGFjcm9zcwpAQCAtMjY0LDE0ICsyNjQsMTQgQEAKICAgIDFCLiAgUGVyLXBhc3MgY29udHJvbC4gIFRoaXMgZGV0ZXJtaW5lcyBob3cgbWFueSBwYXNzZXMgd2lsbCBiZSBwZXJmb3JtZWQKICAgICAgICAgYW5kIGNhbGxzIGVhY2ggYWN0aXZlIHByb2Nlc3NpbmcgbW9kdWxlIHRvIGNvbmZpZ3VyZSBpdHNlbGYKICAgICAgICAgYXBwcm9wcmlhdGVseSBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggcGFzcy4gIEVuZC1vZi1wYXNzIHByb2Nlc3NpbmcsCi0Jd2hlcmUgbmVjZXNzYXJ5LCBpcyBhbHNvIGludm9rZWQgZnJvbSB0aGUgbWFzdGVyIGNvbnRyb2wgbW9kdWxlLgorICAgICAgICB3aGVyZSBuZWNlc3NhcnksIGlzIGFsc28gaW52b2tlZCBmcm9tIHRoZSBtYXN0ZXIgY29udHJvbCBtb2R1bGUuCiAKICAgIE1ldGhvZCBzZWxlY3Rpb24gaXMgcGFydGlhbGx5IGRpc3RyaWJ1dGVkLCBpbiB0aGF0IGEgcGFydGljdWxhciBwcm9jZXNzaW5nCiAgICBtb2R1bGUgbWF5IGNvbnRhaW4gc2V2ZXJhbCBwb3NzaWJsZSBpbXBsZW1lbnRhdGlvbnMgb2YgYSBwYXJ0aWN1bGFyIG1ldGhvZCwKICAgIHdoaWNoIGl0IHdpbGwgc2VsZWN0IGFtb25nIHdoZW4gZ2l2ZW4gaXRzIGluaXRpYWxpemF0aW9uIGNhbGwuICBUaGUgbWFzdGVyCiAgICBjb250cm9sIGNvZGUgbmVlZCBvbmx5IGJlIGNvbmNlcm5lZCB3aXRoIGRlY2lzaW9ucyB0aGF0IGFmZmVjdCBtb3JlIHRoYW4KICAgIG9uZSBtb2R1bGUuCi0gCisKIDIuIERhdGEgYnVmZmVyaW5nIGNvbnRyb2wuICBBIHNlcGFyYXRlIGNvbnRyb2wgbW9kdWxlIGV4aXN0cyBmb3IgZWFjaAogICAgaW50ZXItcHJvY2Vzc2luZy1zdGVwIGRhdGEgYnVmZmVyLiAgVGhpcyBtb2R1bGUgaXMgcmVzcG9uc2libGUgZm9yCiAgICBpbnZva2luZyB0aGUgcHJvY2Vzc2luZyBzdGVwcyB0aGF0IHdyaXRlIG9yIHJlYWQgdGhhdCBkYXRhIGJ1ZmZlci4KQEAgLTQ1Nyw4ICs0NTcsOCBAQAogICBidWZmZXJlZCBieSB0aGUgY29lZmZpY2llbnQgY29udHJvbGxlciBoYXZlIE5PVCBiZWVuIGRlcXVhbnRpemVkOyB3ZQogICBtZXJnZSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1QgaW50byBhIHNpbmdsZSBzdGVwIGZvciBzcGVlZCByZWFzb25zLgogICBXaGVuIHNjYWxlZC1kb3duIG91dHB1dCBpcyBhc2tlZCBmb3IsIHNpbXBsaWZpZWQgRENUIGFsZ29yaXRobXMgbWF5IGJlIHVzZWQKLSAgdGhhdCBlbWl0IG9ubHkgMXgxLCAyeDIsIG9yIDR4NCBzYW1wbGVzIHBlciBEQ1QgYmxvY2ssIG5vdCB0aGUgZnVsbCA4eDguCi0gIFdvcmtzIG9uIG9uZSBEQ1QgYmxvY2sgYXQgYSB0aW1lLgorICB0aGF0IGVtaXQgZmV3ZXIgc2FtcGxlcyBwZXIgRENUIGJsb2NrLCBub3QgdGhlIGZ1bGwgOHg4LiAgV29ya3Mgb24gb25lIERDVAorICBibG9jayBhdCBhIHRpbWUuCiAKICogUG9zdHByb2Nlc3NpbmcgY29udHJvbGxlcjogYnVmZmVyIGNvbnRyb2xsZXIgZm9yIHRoZSBjb2xvciBxdWFudGl6YXRpb24KICAgaW5wdXQgYnVmZmVyLCB3aGVuIHF1YW50aXphdGlvbiBpcyBpbiB1c2UuICAoV2l0aG91dCBxdWFudGl6YXRpb24sIHRoaXMKQEAgLTU3MywxMCArNTczLDEwIEBACiAKIEFycmF5cyBvZiBwaXhlbCBzYW1wbGUgdmFsdWVzIHVzZSB0aGUgZm9sbG93aW5nIGRhdGEgc3RydWN0dXJlOgogCi0gICAgdHlwZWRlZiBzb21ldGhpbmcgSlNBTVBMRTsJCWEgcGl4ZWwgY29tcG9uZW50IHZhbHVlLCAwLi5NQVhKU0FNUExFCi0gICAgdHlwZWRlZiBKU0FNUExFICpKU0FNUFJPVzsJCXB0ciB0byBhIHJvdyBvZiBzYW1wbGVzCi0gICAgdHlwZWRlZiBKU0FNUFJPVyAqSlNBTVBBUlJBWTsJcHRyIHRvIGEgbGlzdCBvZiByb3dzCi0gICAgdHlwZWRlZiBKU0FNUEFSUkFZICpKU0FNUElNQUdFOwlwdHIgdG8gYSBsaXN0IG9mIGNvbG9yLWNvbXBvbmVudCBhcnJheXMKKyAgICB0eXBlZGVmIHNvbWV0aGluZyBKU0FNUExFOyAgICAgICAgICBhIHBpeGVsIGNvbXBvbmVudCB2YWx1ZSwgMC4uTUFYSlNBTVBMRQorICAgIHR5cGVkZWYgSlNBTVBMRSAqSlNBTVBST1c7ICAgICAgICAgIHB0ciB0byBhIHJvdyBvZiBzYW1wbGVzCisgICAgdHlwZWRlZiBKU0FNUFJPVyAqSlNBTVBBUlJBWTsgICAgICAgcHRyIHRvIGEgbGlzdCBvZiByb3dzCisgICAgdHlwZWRlZiBKU0FNUEFSUkFZICpKU0FNUElNQUdFOyAgICAgcHRyIHRvIGEgbGlzdCBvZiBjb2xvci1jb21wb25lbnQgYXJyYXlzCiAKIFRoZSBiYXNpYyBlbGVtZW50IHR5cGUgSlNBTVBMRSB3aWxsIHR5cGljYWxseSBiZSBvbmUgb2YgdW5zaWduZWQgY2hhciwKIChzaWduZWQpIGNoYXIsIG9yIHNob3J0LiAgU2hvcnQgd2lsbCBiZSB1c2VkIGlmIHNhbXBsZXMgd2lkZXIgdGhhbiA4IGJpdHMgYXJlCkBAIC02MTcsNyArNjE3LDcgQEAKIGlzIGhlbHBmdWwgd2hlbiBkZWFsaW5nIHdpdGggbm9uaW50ZXJsZWF2ZWQgSlBFRyBmaWxlcy4KIAogSW4gZ2VuZXJhbCwgYSBzcGVjaWZpYyBzYW1wbGUgdmFsdWUgaXMgYWNjZXNzZWQgYnkgY29kZSBzdWNoIGFzCi0JR0VUSlNBTVBMRShpbWFnZVtjb2xvcmNvbXBvbmVudF1bcm93XVtjb2xdKQorICAgICAgICBHRVRKU0FNUExFKGltYWdlW2NvbG9yY29tcG9uZW50XVtyb3ddW2NvbF0pCiB3aGVyZSBjb2wgaXMgbWVhc3VyZWQgZnJvbSB0aGUgaW1hZ2UgbGVmdCBlZGdlLCBidXQgcm93IGlzIG1lYXN1cmVkIGZyb20gdGhlCiBmaXJzdCBzYW1wbGUgcm93IGN1cnJlbnRseSBpbiBtZW1vcnkuICBFaXRoZXIgb2YgdGhlIGZpcnN0IHR3byBpbmRleGluZ3MgY2FuCiBiZSBwcmVjb21wdXRlZCBieSBjb3B5aW5nIHRoZSByZWxldmFudCBwb2ludGVyLgpAQCAtNjM2LDExICs2MzYsMTEgQEAKIAogQXJyYXlzIG9mIERDVC1jb2VmZmljaWVudCB2YWx1ZXMgdXNlIHRoZSBmb2xsb3dpbmcgZGF0YSBzdHJ1Y3R1cmU6CiAKLSAgICB0eXBlZGVmIHNob3J0IEpDT0VGOwkJYSAxNi1iaXQgc2lnbmVkIGludGVnZXIKLSAgICB0eXBlZGVmIEpDT0VGIEpCTE9DS1tEQ1RTSVpFMl07CWFuIDh4OCBibG9jayBvZiBjb2VmZmljaWVudHMKLSAgICB0eXBlZGVmIEpCTE9DSyAqSkJMT0NLUk9XOwkJcHRyIHRvIG9uZSBob3Jpem9udGFsIHJvdyBvZiA4eDggYmxvY2tzCi0gICAgdHlwZWRlZiBKQkxPQ0tST1cgKkpCTE9DS0FSUkFZOwlwdHIgdG8gYSBsaXN0IG9mIHN1Y2ggcm93cwotICAgIHR5cGVkZWYgSkJMT0NLQVJSQVkgKkpCTE9DS0lNQUdFOwlwdHIgdG8gYSBsaXN0IG9mIGNvbG9yIGNvbXBvbmVudCBhcnJheXMKKyAgICB0eXBlZGVmIHNob3J0IEpDT0VGOyAgICAgICAgICAgICAgICBhIDE2LWJpdCBzaWduZWQgaW50ZWdlcgorICAgIHR5cGVkZWYgSkNPRUYgSkJMT0NLW0RDVFNJWkUyXTsgICAgIGFuIDh4OCBibG9jayBvZiBjb2VmZmljaWVudHMKKyAgICB0eXBlZGVmIEpCTE9DSyAqSkJMT0NLUk9XOyAgICAgICAgICBwdHIgdG8gb25lIGhvcml6b250YWwgcm93IG9mIDh4OCBibG9ja3MKKyAgICB0eXBlZGVmIEpCTE9DS1JPVyAqSkJMT0NLQVJSQVk7ICAgICBwdHIgdG8gYSBsaXN0IG9mIHN1Y2ggcm93cworICAgIHR5cGVkZWYgSkJMT0NLQVJSQVkgKkpCTE9DS0lNQUdFOyAgIHB0ciB0byBhIGxpc3Qgb2YgY29sb3IgY29tcG9uZW50IGFycmF5cwogCiBUaGUgdW5kZXJseWluZyB0eXBlIGlzIGF0IGxlYXN0IGEgMTYtYml0IHNpZ25lZCBpbnRlZ2VyOyB3aGlsZSAic2hvcnQiIGlzIGJpZwogZW5vdWdoIG9uIGFsbCBtYWNoaW5lcyBvZiBpbnRlcmVzdCwgb24gc29tZSBtYWNoaW5lcyBpdCBpcyBwcmVmZXJhYmxlIHRvIHVzZQpAQCAtNzU5LDggKzc1OSw4IEBACiBpdCBzcGVlZHMgdXAgb3BlcmF0aW9ucyB3aGVuZXZlciBtYWxsb2MvZnJlZSBhcmUgc2xvdyAoYXMgdGhleSBvZnRlbiBhcmUpLgogVGhlIHBvb2xzIGNhbiBiZSByZWdhcmRlZCBhcyBsaWZldGltZSBpZGVudGlmaWVycyBmb3Igb2JqZWN0cy4gIFR3bwogcG9vbHMvbGlmZXRpbWVzIGFyZSBkZWZpbmVkOgotICAqIEpQT09MX1BFUk1BTkVOVAlsYXN0cyB1bnRpbCBtYXN0ZXIgcmVjb3JkIGlzIGRlc3Ryb3llZAotICAqIEpQT09MX0lNQUdFCQlsYXN0cyB1bnRpbCBkb25lIHdpdGggaW1hZ2UgKEpQRUcgZGF0YXN0cmVhbSkKKyAgKiBKUE9PTF9QRVJNQU5FTlQgICAgIGxhc3RzIHVudGlsIG1hc3RlciByZWNvcmQgaXMgZGVzdHJveWVkCisgICogSlBPT0xfSU1BR0UgICAgICAgICBsYXN0cyB1bnRpbCBkb25lIHdpdGggaW1hZ2UgKEpQRUcgZGF0YXN0cmVhbSkKIFBlcm1hbmVudCBsaWZldGltZSBpcyB1c2VkIGZvciBwYXJhbWV0ZXJzIGFuZCB0YWJsZXMgdGhhdCBzaG91bGQgYmUgY2FycmllZAogYWNyb3NzIGZyb20gb25lIGRhdGFzdHJlYW0gdG8gYW5vdGhlcjsgdGhpcyBpbmNsdWRlcyBhbGwgYXBwbGljYXRpb24tdmlzaWJsZQogcGFyYW1ldGVycy4gIEltYWdlIGxpZmV0aW1lIGlzIHVzZWQgZm9yIGV2ZXJ5dGhpbmcgZWxzZS4gIChBIHRoaXJkIGxpZmV0aW1lLApAQCAtODU3LDIwICs4NTcsMjAgQEAKIHRoZSBmb2xsb3dpbmcgcm91dGluZXMgZm9yIHVzZSBieSB0aGUgZnJvbnQgZW5kIChub25lIG9mIHRoZXNlIHJvdXRpbmVzCiBhcmUga25vd24gdG8gdGhlIHJlc3Qgb2YgdGhlIEpQRUcgY29kZSk6CiAKLWpwZWdfbWVtX2luaXQsIGpwZWdfbWVtX3Rlcm0Jc3lzdGVtLWRlcGVuZGVudCBpbml0aWFsaXphdGlvbi9zaHV0ZG93bgoranBlZ19tZW1faW5pdCwganBlZ19tZW1fdGVybSAgICBzeXN0ZW0tZGVwZW5kZW50IGluaXRpYWxpemF0aW9uL3NodXRkb3duCiAKLWpwZWdfZ2V0X3NtYWxsLCBqcGVnX2ZyZWVfc21hbGwJaW50ZXJmYWNlIHRvIG1hbGxvYyBhbmQgZnJlZSBsaWJyYXJ5IHJvdXRpbmVzCi0JCQkJKG9yIHRoZWlyIGVxdWl2YWxlbnRzKQoranBlZ19nZXRfc21hbGwsIGpwZWdfZnJlZV9zbWFsbCBpbnRlcmZhY2UgdG8gbWFsbG9jIGFuZCBmcmVlIGxpYnJhcnkgcm91dGluZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9yIHRoZWlyIGVxdWl2YWxlbnRzKQogCi1qcGVnX2dldF9sYXJnZSwganBlZ19mcmVlX2xhcmdlCWludGVyZmFjZSB0byBGQVIgbWFsbG9jL2ZyZWUgaW4gTVNET1MgbWFjaGluZXM7Ci0JCQkJZWxzZSB1c3VhbGx5IHRoZSBzYW1lIGFzCi0JCQkJanBlZ19nZXRfc21hbGwvanBlZ19mcmVlX3NtYWxsCitqcGVnX2dldF9sYXJnZSwganBlZ19mcmVlX2xhcmdlIGludGVyZmFjZSB0byBGQVIgbWFsbG9jL2ZyZWUgaW4gTVNET1MgbWFjaGluZXM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgdXN1YWxseSB0aGUgc2FtZSBhcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcGVnX2dldF9zbWFsbC9qcGVnX2ZyZWVfc21hbGwKIAotanBlZ19tZW1fYXZhaWxhYmxlCQllc3RpbWF0ZSBhdmFpbGFibGUgbWVtb3J5CitqcGVnX21lbV9hdmFpbGFibGUgICAgICAgICAgICAgIGVzdGltYXRlIGF2YWlsYWJsZSBtZW1vcnkKIAotanBlZ19vcGVuX2JhY2tpbmdfc3RvcmUJCWNyZWF0ZSBhIGJhY2tpbmctc3RvcmUgb2JqZWN0CitqcGVnX29wZW5fYmFja2luZ19zdG9yZSAgICAgICAgIGNyZWF0ZSBhIGJhY2tpbmctc3RvcmUgb2JqZWN0CiAKLXJlYWRfYmFja2luZ19zdG9yZSwJCW1hbmlwdWxhdGUgYSBiYWNraW5nLXN0b3JlIG9iamVjdAorcmVhZF9iYWNraW5nX3N0b3JlLCAgICAgICAgICAgICBtYW5pcHVsYXRlIGEgYmFja2luZy1zdG9yZSBvYmplY3QKIHdyaXRlX2JhY2tpbmdfc3RvcmUsCiBjbG9zZV9iYWNraW5nX3N0b3JlCiAKZGlmZiAtLWdpdCBhL3Rlc3RpbWFnZXMvbmlnaHRzaG90X2lzb18xMDAudHh0IGIvdGVzdGltYWdlcy9uaWdodHNob3RfaXNvXzEwMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMyMDg4NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbWFnZXMvbmlnaHRzaG90X2lzb18xMDAudHh0CkBAIC0wLDAgKzEsMjUgQEAKK2xpYmpwZWctdHVyYm8gbm90ZTogIFRoaXMgaW1hZ2Ugd2FzIGV4dHJhY3RlZCBmcm9tIHRoZSA4LWJpdCBuaWdodHNob3RfaXNvXzEwMAoraW1hZ2UuICBUaGUgb3JpZ2luYWwgY2FuIGJlIGRvd25sb2FkZWQgYXQgdGhlIGxpbmsgYmVsb3cuCisKK1RoZSBOZXcgSW1hZ2UgQ29tcHJlc3Npb24gVGVzdCBTZXQgLSBKYW4gMjAwOAoraHR0cDovL3d3dy5pbWFnZWNvbXByZXNzaW9uLmluZm8vdGVzdF9pbWFnZXMKKworVGhlIGltYWdlcyBoaXN0b3JpY2FsbHkgdXNlZCBmb3IgY29tcHJlc3Npb24gcmVzZWFyY2ggKGxlbmEsIGJhcmJyYSwgcGVwcGVyIGV0Yy4uLikgaGF2ZSBvdXRsaXZlZCB0aGVpciB1c2VmdWwgbGlmZSBhbmQgaXRzIGFib3V0IHRpbWUgdGhleSBiZWNvbWUgYSBwYXJ0IG9mIGhpc3Rvcnkgb25seS4gVGhleSBhcmUgdG9vIHNtYWxsLCBjb21lIGZyb20gZGF0YSBzb3VyY2VzIHRvbyBvbGQgYW5kIGFyZSBhdmFpbGFibGUgaW4gb25seSA4LWJpdCBwcmVjaXNpb24uCisKK1RoZXNlIGltYWdlcyBoYXZlIGJlZW4gY2FyZWZ1bGx5IHNlbGVjdGVkIHRvIGFpZCBpbiBpbWFnZSBjb21wcmVzc2lvbiBhbGdvcml0aG0gcmVzZWFyY2ggYW5kIGV2YWx1YXRpb24uIFRoZXNlIGFyZSBwaG90b2dyYXBoaWMgaW1hZ2VzIGNob3NlbiB0byBjb21lIGZyb20gYSB3aWRlIHZhcmlldHkgb2Ygc291cmNlcyBhbmQgZWFjaCBvbmUgcGlja2VkIHRvIHN0cmVzcyBkaWZmZXJlbnQgYXNwZWN0cyBvZiBhbGdvcml0aG1zLiBJbWFnZXMgYXJlIGF2YWlsYWJsZSBpbiA4LWJpdCwgMTYtYml0IGFuZCAxNi1iaXQgbGluZWFyIHZhcmlhdGlvbnMsIFJHQiBhbmQgZ3JheS4KKworSW1hZ2VzIGFyZSBhdmFpbGFibGUgd2l0aG91dCBhbnkgcHJvaGliaXRpdmUgY29weXJpZ2h0IHJlc3RyaWN0aW9ucy4KKworVGhlc2UgaW1hZ2VzIGFyZSAoYykgdGhlcmUgcmVzcGVjdGl2ZSBvd25lcnMuIFlvdSBhcmUgZ3JhbnRlZCBmdWxsIHJlZGlzdHJpYnV0aW9uIGFuZCBwdWJsaWNhdGlvbiByaWdodHMgb24gdGhlc2UgaW1hZ2VzIHByb3ZpZGVkOgorCisxLiBUaGUgb3JpZ2luIG9mIHRoZSBwaWN0dXJlcyBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90IGNsYWltIHRoYXQgeW91IHRvb2sgdGhlIG9yaWdpbmFsIHBpY3R1cmVzLiBJZiB5b3UgdXNlLCBwdWJsaXNoIG9yIHJlZGlzdHJpYnV0ZSB0aGVtLCBhbiBhY2tub3dsZWRnbWVudCB3b3VsZCBiZSBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLgorMi4gQWx0ZXJlZCB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZSBtaXNpbnRlcnByZXRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWxzLgorMy4gTm8gcGF5bWVudCBpcyByZXF1aXJlZCBmb3IgZGlzdHJpYnV0aW9uIHRoaXMgbWF0ZXJpYWwsIGl0IG11c3QgYmUgYXZhaWxhYmxlIGZyZWVseSB1bmRlciB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaGVyZS4gVGhhdCBpcywgaXQgaXMgcHJvaGliaXRlZCB0byBzZWxsIHRoZSBtYXRlcmlhbC4KKzQuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IGRpc3RyaWJ1dGlvbi4KKworQWNrbm93bGVkZ21lbnRzOiBBIGxvdCBvZiBwZW9wbGUgY29udHJpYnV0ZWQgYSBsb3Qgb2YgdGltZSBhbmQgZWZmb3J0IGluIG1ha2luZyB0aGlzIHRlc3Qgc2V0IHBvc3NpYmxlLiBUaGFua3MgdG8gZXZlcnlvbmUgd2hvIHZvaWNlZCB0aGVpciBvcGluaW9uIGluIGFueSBvZiB0aGUgZGlzY3Vzc2lvbnMgb25saW5lLiBUaGFua3MgdG8gQXhlbCBCZWNrZXIsIFRob21hcyBSaWNodGVyIGFuZCBOaWVscyBGcsO2aGxpbmcgZm9yIHRoZWlyIGV4dGVuc2l2ZSBoZWxwIGluIHBpY2tpbmcgaW1hZ2VzLCBydW5uaW5nIGFsbCB0aGUgdmFyaW91cyB0ZXN0cyBldGMuLi4gVGhhbmtzIHRvIFBldGUgRnJhc2VyLCBUb255IFN0b3J5LCBXYXluZSBKLiBDb3NzaGFsbCwgRGF2aWQgQ29mZmluLCBCcnVjZSBMaW5kYmxvb20gYW5kIHJhdy5mb3Rvc2l0ZS5wbCBmb3IgdGhlIGltYWdlcyB3aGljaCBtYWtlIHVwIHRoaXMgc2V0LgorCitTYWNoaW4gR2FyZyBbSW5kaWFdCitzYWNoaW5nYXJnQGMxMG4uaW5mbworCit3d3cuc2FjaGluZ2FyZy5jb20gfCB3d3cuYzEwbi5pbmZvIHwgd3d3LmltYWdlY29tcHJlc3Npb24uaW5mbwpkaWZmIC0tZ2l0IGEvdGVzdGltYWdlcy90ZXN0aW1nLmJtcCBiL3Rlc3RpbWFnZXMvdGVzdGltZy5ibXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2MDNkMTUuLjAwMDAwMDAKLS0tIGEvdGVzdGltYWdlcy90ZXN0aW1nLmJtcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RpbWFnZXMvdGVzdGltZ2FyaS5wcG0gYi90ZXN0aW1hZ2VzL3Rlc3RpbWdhcmkucHBtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2IzOGYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbWFnZXMvdGVzdGltZ2FyaS5wcG0KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0aW1hZ2VzL3Rlc3RpbWdjcm9wLmpwZyBiL3Rlc3RpbWFnZXMvdGVzdGltZ2Nyb3AuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOGZhMGIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbWFnZXMvdGVzdGltZ2Nyb3AuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdGltYWdlcy90ZXN0aW1nZmx0LW5vc2ltZC5qcGcgYi90ZXN0aW1hZ2VzL3Rlc3RpbWdmbHQtbm9zaW1kLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDYyZjM5Yi4uMDAwMDAwMAotLS0gYS90ZXN0aW1hZ2VzL3Rlc3RpbWdmbHQtbm9zaW1kLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RpbWFnZXMvdGVzdGltZ2ZsdC5qcGcgYi90ZXN0aW1hZ2VzL3Rlc3RpbWdmbHQuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzJmNGNjLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbWFnZXMvdGVzdGltZ2ZsdC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0aW1hZ2VzL3Rlc3RpbWdmbHQucHBtIGIvdGVzdGltYWdlcy90ZXN0aW1nZmx0LnBwbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzg5NDViNi4uMDAwMDAwMAotLS0gYS90ZXN0aW1hZ2VzL3Rlc3RpbWdmbHQucHBtCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1QNgotMjI3IDE0OQotMjU1Ci0wLy0wLy0xMC4yMS80MC01MS42Mi82Mi84My84My86My06My06My06My06My06My06Mi85MS45MS44MC04MC05MS45MS46Mi84MC04MC04MC04MC04MC04MC04MC04MC02Lis2Lis2Lis1LSo1LSo0LCk0LCk0LCk0LCk0LCk0LCk0LCk0LCk0LCk0LCkyLSkvKiQvLCUvLCUwLSYxLicyLygzMCkzMCk2Myw2Myw3NC04NS44NS45Ni86NzA6Ny5BOjBCPDBEPjJGQDRJQTRKQjVLQzZLQzZNRDVNRDVPQzNOQjJPQzNPQzNQRDRSRTVSPzFZPzJiQDRuQjV9RTaLSDiZRzmjRjevRzq4Rzm+RTrFRzvHRz7KRz/LSEDQRUDnRkztQ0zrREvrRUnuQ0nvQkTxPkL0PUH4O0H3OkD0Oj/wPD/pP0DiQD7XPzzLQTe7PS+1QC61QC60Py20Py2yPyyyPy2vQC2tQCyqQSymQS2iQiyfQCqbQSmYQCqWQSyUPi2SPy+SPy+RPi6RPiyQPSuSPCuSPCuUPyuUPyuUPSqUPSqUPSqVPiuWPyyWQC+WPzaVPjWXPTKfPzGpQjOzRDO8RDS/RDS5PzC1QTKsRjieSDuHSDlvQTJUOCpDMyY9NTI5NTQ5NTQ3MzI3MTE2MDA1MC01MC03Mi83Mi83Mi82MS42MS01MCw1MCw0MSwvLy0uMC0vLy0vLy0wLy0wLy0yLi0yLi00Kyw0Kyw0KiszKSo3KCs9LjFFNjlQOjxqQkN8SUiNTU2VT0+eVlqqZG6qb4OfdJCUe6OHf66Ahrp+iL1zea1gYZFUS3ZRRWlTSmdPR15NSF5UUWJmZG98fYKNkZCZnpijqZ+iqJqeoJOPkoF7fGxmZ1VYV0VRTkVVUltVUWJVUWIwLy0wLy0xMC4xMC40MC01MS42Mi82Mi84My84My86My06My06My06My06My06My05MS45MS44MC04MC04MC04MC05MS45MS44MC04MC04MC04MC04MC04MC04MC04MC02Lis2Lis1LSo1LSo1LSo0LCk0LCk0LCk1LSo1LSo1LSo1LSo1LSo1LSo1LSozLiowKyUwLSYwLSYxLicyLygzMCk0MSo0MSo2Myw2Myw3NC03NC04NS45Ni86NzA6Ny5AOS9BOy9DPTFFPzNIQDNJQTRKQjVKQjVMQzRMQzRNQTFNQTFNQTFOQjJPQzNRRDRQPjBVPzFeQTNqQzR4RDaERTSSRTWcQzOnQzSvQTS1QTS8QjfARDrERTzFRj3NQ0DhRUnnQknoQ0nqREjtREfvQkTzQEP2P0P4O0H3OkD0Oj/wPD/pP0DgQT7VQDzKQDa5Pi+1QC60Py20Py20Py2yPyywPy2vQC2tQCypQCumQS2hQSufQCqbQSmYQCqWQSyUPi2SPy+RPi6RPi6RPiyQPSuSPCuSPCuUPyuTPiqUPSqUPSqUPSqVPiuWPyyWQC+UQDWVPjWYPjOgPjGrQTO1RDS9QzS/RDW7QTK3QzasRjicSTuFRzpsQDNTOSpCNCk+NjM6NjU5NTQ4NDM4MjI3MTE2MS42MS43Mi83Mi83Mi82MS42MS01MCw1MCw0MSwvLy0uMC0vLy0vLy0wLy0wLy0yLi0yLi0zLS01LC01KywzKSo1KSs8LTBDNDdOODpkPj12RUGGSkmPTkyaVFakYWqlbH2dco6Re6KGgK5/hbl7hLtvdalbW41RSHVPQ2lPRmVPR19QSF9STl9bWWZub3SDh4iUmZWZnpeaoJSZnY+PkYN+f29qa1ldW0xWU0pYU1pWUmFYUWEvLiwvLiwwLy0xMC40MC00MC01MS41MS43Mi43Mi43Mi43Mi45Miw5Miw5Miw5Miw5MS44MC43Ly03Ly03Ly03Ly04MC45MS84MC44MC44MC44MC44MC44MC44MC44MC42Liw1LSs1LSs1LSs0LCo0LCo0LCo0LCo1LSs1LSs1LSs1LSs1LSs1LSs1LSszLioyLScxLicyLygzMCkzMCk0MSo0MSo1Mis2Myw2Myw2Myw3NC04NS45Ni85Ni86Ny4/OC5AOi5CPDBEPjJHPzRIQDVIQDNIQDNJQDFJQDFLPzFLPzFLPy9MQDBNQTFOQjJNQTFRQTFZQjJkQzJxQzN8QzKHQjKSQTCYPC2gOiunOy6vPTK1QDa6RDq/Rj3FRD7ZQ0XhQEbjQkfnQkbqREbwQ0X0QUT4P0T6O0D5Oj/1O0DwPUDoQEDcQT3RQDvGQDW3PS6zQC2zQC2yPyyyPy2wPy2vPiytQCyqPy2nQC2lQCyhQSudQSyaPyqYQCqVQCuUPi2RPi6RPi6RPi6QPSuQPSuQPSuQPSuRPiyRPiySPCuSPCuTPSyTPSyUPyuVPy6VQTaWPzWaPjOjPjKvQTS5QzW/RDXBQzXARDi4RjuuST2ZSj2BRztoQDRROixCNSw/NzQ9Nzc8NjY7NTU5NDE4MzA3Mi83Mi82Mi82Mi82Mi81MS41Mi00MSw0MSwyMSwuMC0sMS0uMC0uMC0vLy0vLy0wLy0yLi01Ly80Li41LC00Kis0Kis5LS8+MjRJNTZbOTdsPzl8RUCGSUSQT02YW2CbZnaUbYiMd56Dfa19grl1frdmbaRUVolNRXZMQWtNQWVPRmNRSGNNSF5OS1xbW2VxdHmFiYiHjIaKj4iNkIWGinx4emxmaVhaW01WU0xaVVtaVGBbU2AuLSsvLiwvLiwwLy0zLyw0MC00MC00MC02MS02MS02MS02MS04MSs4MSs4MSs4MSs3Ly03Ly02Liw2Liw2Liw2Liw3Ly03Ly04MC44MC44MC44MC44MC44MC44MC44MC41LSs1LSs1LSs0LCo0LCo0LCozKykzKyk2Liw2Liw2Liw2Liw2Liw2Liw2Liw0LywzMCszMCkzMCk0MSo0MSo1Mis1Mis1Mis1Mis1Mis2Myw3NC04NS44NS45Ni85Ni0+Ny0/OS1AOi5CPDBFPTJFPTJGPjFGPjFHPTFHPi9IPC5JPS9JPS9KPi5MQDBKQTBMRTNORTRVRDReRDNpRDJzQjF+QS+GPy2MOSmUOSedOSqjPC2sQDOzRTi4SDzBRj7SREPaQUPeQkPiREPnQ0TsQkPzQEP3P0H6O0D5Oj/1O0DuPkDlQUDaQj3NQDnCQDO1PS2wQCywQCywQCyvPiyuPyyuPyysPyupQC2mPyyjQCugQCqcQCuYQCqWQCmUPyqRPiyRPi6RPi6QPS2QPSuQPSuPPCqPPCqQPSuQPSuPPCqPPCqSPCuRPiyUPi2SPy2VQTaWPzWcPjKmQDSyQja8QzjBQzfCQjfCRjy5ST6sTECXSz58RjpiQDRMOi5BNy1AODU+OTY9Nzc8NzQ6NTI5NDE4MzA4MzA2Mi82Mi82Mi8zMi41Mi0yMSwyMSwxMi0tMi4tMi4vMS4vMS4wMC4wMC4xMC4xMC41MTA2MDA1Ly81LC00Kyw2LC06MDFEMjJUNzFjOzNxQTd7RTuCSESJUlWNX2yLaYKDc5h9eat4fbVvd7VgZqJRUotMRXlMQHBMQGhQRWdRRmZMQ15HQlZNTFpeXmZqbnF1eXh5fnh6gHZ3em9rb2FgYlRXWUxUVExdV1ldVl1dVl4tLS0tLS0uLSsvLiwwLy0xMC4zLyw0MC0zLywzLyw0Lys0Lys0Lys0Lys2Lyk2Lyk0Lyw0LywzLiszLiszLiszLis0Lyw0Lyw1MC01MC01MC01MC01MC01MC01MC01MC0zLiszLisyLSoyLSoyLSoxLCkxLCkxLCk0Lyw0Lyw0Lyw0Lyw0Lyw0Lyw0Lyw0Lyw0MSw0MSw0MSw0MSw1Mi01Mi01Mi01Mi01Mi01Mi02My42My43NC84NTA5NjE5Ni88NS09Niw/OC5AOS9COi9DOzBDOzBDOy5EOi5EOi5GOi5HOy1IPC5JPS9KPjBJQDFKRzZNSDVSRzVZRjViRTNqRDF1Qi98PyyCOymLOimTOiqaPSyjQjKsRjiySj27ST/MR0LUREPYRELcREHiQkLpQUHwPUD0PD75Oj/4Ojz0PD7tPz7hQj7TQzrFQTW5PzCyPy2uPyyuPyyuPyytPi2sPi2sPi2qPy2oPi6kPy2gPyyePyuaPyyXPyuVPiqTPiqRPiyQPy6PPi2PPi2PPi2OPSyOPSyOPSyOPSyOPSyOPSyOPSyPPCyPPi2RPi6QPy6UQjSXQTSdQDGoQDO2QTe/QznFQjjEQTe+Qzu3SD+mTEOQSkB0RTtaPjJFOS08NStAOTNAODU/NzU+NjM9NTI8NDE5NDA4My82Mi80My80My8yMy4zMi4xMi0xMi0wMi0tMi4sMi4tMi4tMi4vMS4vMS4wMC4xMC4zMjA1MTA1MTA0Li4yLCw0Kyw3Li89Ly5ONS5ZOS5lPTFuQDNzQjt5S0uAWmWDZ4B/cJd6eKp1e7drc7RfZKZUVJRPR4NMQndOQW1OQmhNQWVKQWBHQllHRlhLS1dNUFVdY2NgZmJiaWFgZlxaYFRXW01VWE1YWFBeWVZgV1hgV1osLCwsLCwuLSsuLSsvLiwwLy0zLywzLywyLisyLiszLiozLiozLiozLio1Lig1LSozLiszLisyLSoxLCkxLCkyLSozLiszLiszLiszLiszLiszLiszLiszLiszLiszLisyLSoyLSoyLSoyLSoxLCkxLCkxLCkwKygzLiszLiszLiszLiszLiszLiszLiszLis0MSw0MSw0MSw0MSw0MSw0MSw0MSw0MSw0MSw1Mi01Mi02My43NC84NTA4NTA4NS47NCw8NSs9Niw+Ny1ANy5BOS5BOS5BOS5DOS9DOS1FOS1GOi5HOy9IPC5KPjBIQTFKRzZJSDZORzVWRjZcRTNkQzJsQTB0Py17PCuCOymMOyqUPSycQDGjRjWqSjq0Sj3ESEDMRUHRRkHWRUDeQ0HkQD7sPj/xOjz3Ozz0OjvwPD3pQD3cQz3NQzi+QDKxPiyuPyyrQCyqPyuqPyuqPy2pPiypPiyoPyylPi2iPyygPyybPiyXPyuVPiqTPimRPyqPPiuPPi2PPi2PPi2OPSyOPSyOPSyNPCuOPSyLPCuNPCuLPCuLPC2MPSyNPi+OPzCUQjSXQTKgQDKsQjW5QznCQzrFQjrCQTu6QTmxSUCjTkeNTkVvRz1TPzRBOy85Ni1AOTNBNzU/NzQ+NjM8NDE5NDA4My83NC80My80My8zNC8yMy4yMy4wMi0wMi0uMy0tMy8tMy8uMy8uMy8wMi8wMi8xMS8xMS8yMS8zMjAzMjA0MC8yLi0xLSw0Li44LixHNC1PNClYOCtgPDBlPzZtR0Z5WWSCa4WAdZ98fLJ3fLxudbtkaK9bW6FSTY9MQn5PQXJMQGhJPWNIPmBIQl5FQ1hAQk87QEZCR0pETUpKUUpKUUlJUUZLUUVPVUlWV09eWVNgWVNgWFUrKysrKyssLCwtLS0vLiwvLiwwLy0wLy0xLSoxLSoxLSoxLSoyLSkyLSkyLSkyLSkyLSoyLCwxKysxKysxKysxKysyLCwyLCwxKysxKysxKysxKysxKysxKysxKysxKysyLCwyLCwyLCwxKysxKysxKyswKiowKiozLS0zLS0zLS0zLS0zLS0zLS0zLS0zLis0MSw0MSw0MSwzMCszMCszMCszMCszMCs0MSw0MSw1Mi02My43NC83NC84NTA4NS46Mys7NCw8NS09Ni4/Ni8/Ni0/Ni0/NyxCOC5COC5FOC9FOS1HOy9IPDBKPjJIQDNIRTZHRTZLRTVRRDRYQzJfQjJmPy5uPSx2PSx8OiqFOSmMOyqTPS6bQjKiRjesRji8Rz3CRj7JRj7QRT7ZREDiQz/pPz/wPj7yOjrxOzrsPDzkQTzWQzvGRDa1QC+qPSmqPy2pQC2pQC2oPyyoPi6oPi6nPS2lPi2jPS6gPy6ePy2aPy2WPyyTPiqRPyqPPimPPiuNPi2NPi2MPSyMPS6MPS6LPC2LPC2LPC2KPS2KOyyJPCyKPC+KPS2LPTCMPy+SQzSYQjOhQTOuQja8QzrCQzzEQz3AQz25RkGyUUqlWFKPWFFzUklXST5DQzc8PzY+OTNANzI+NzE9NjA6NS85NC44My82My40My40My4zNC8xMy4xMy4uMy0uMy0uMy0tMy8tMy8tMy8tMy8uMy8uMy8wMi8wMi8wMC4xMS8yMjAyMS8wLy0vLiwyLi00Lyw/MCtEMClLMylUOC1aPDRkRkZ1XWqDc42JgKuFhL5+g8d0esZtcL1jZa9WU5pMQ4JLP3FJPGdHO2NFPl9GQl1EQlc/QU47P0g6QkU+SEdETUhHUUlHUUhKUkdOVktVWE1eWk9hWU5hWE8rKysrKyssLCwtLS0uLC0vLiwwLy0wLy0xLSoxLSoxLSoxLSoyLSkyLSkyLSkyLSoyLCwxKysxKyswKiowKioxKysxKysyLCwwKiowKiowKiowKiowKiowKiowKiowKioyLCwyLCwyLCwxKysxKyswKiowKiowKioyLCwyLCwyLCwyLCwyLCwyLCwyLCwyLCwzLywzMCszMCszMCszMCszMCszMCsyLyo0MSw0MSw1Mi02My42My43NC84NTA4NTA5Miw6Mys7NCw8NS0+NS4+NS4+NS4+NSxCOC9COC5FOC9FOC9HOjFJPTFKPjJJPzNGQjZGQjZKQjVPQTRUQTJcQDJiPjBqPC1xPC53OSp9OCmFOCiMOiyVPS+bQjSkQjWyRjq6RTvBRj7KRz/UR0DeRkHnQ0HuQkDtOzvrOzvnPjvfQjvRRDq/RDSvQC2kPiimQS2mQS2mQS2lQC6lQC6kPy2kPy2kPi+iPi6fQC6cPy6YPy2VPiuRPyqPPimPPiuNPi2NPi2NPi2MPSyMPS6LPC2LPC2KPS2KPS2IPC6IPC6IPC6IPC+HPi+IPjGLPzGRRDSWQzOiQjStQza6QzvBRD7BRD67RUG5UEyyW1SlZVyRZl11X1RbVUlHTUFDST88OTI/ODI+NzE7NjA5NC43NC02My40My40My4zNC4yNC8xMy4vNC4uMy0uMy0uMy0tMy8tMy8tMy8tMy8uMy8uMy8wMi8wMi8vLy0wMC4yMjAyMjAxMC4vLiwwLy0zLyw4LCw7LClDMCpLNzBTPDZeSUh0Ym6HepSQiraMjcaEiM96gMxyeMZpa7ZXV59JRIRFPW5HPGREPGFDPl5DQVlAQ1ZARFA+RUtHUVJLV1VRXldVYFhTX1VSXlRUXlNZX1NeW0xhWkphWkosLS8sLS8sLS8sLi0tLS0tLS0uLSsuLSsvLiwvLiwxLSowLCkwLCkwLCkvKygvKygvKyovKyovKyovKyovKyovKyovKyowLCsvKyovKyovKyovKyovKyovKyovKyovKyovKyovKyovKyowLCswLCsxLSwxLSwyLi0xLSwxLSwxLSwxLSwxLSwxLSwxLSwxLSwwLCkxLSoyLiszLywzLywzLywzLywzLywzLywzLywzLywzLyw0MC01MS42Mi83NC84MC05Miw6My07NC49NC8+NS4+NS4+NS4/NC4/NSxCNS1DNi5ENy9GOTBHOjFGPDJHPjVIQDVKQDZQPzVUPjNYPDFeOTBiNittOS50OC18OCuDOSyNOy+TPTCYPzGePjCnQTOtQTS1Qzi+RTrKRz3URz7eRT/lQ0DoQD/qQkHmREHaRT7IRDi3QjGqQS6iQiyiQS6hQC2iPyyiPi6hPS2hPS2iPi6gPy+cPCyaPSyYPC2UPSyTPSyQPSuOPSqMPiqLPCuLPCuKPS2JPCyJPCyIOyuIOi2HOy2JPS+GPC+GPC+HPTCIPjOIQDKJQTWLQTSRRTWXRDSjRTmxST66R0C7RD67RUG4TUe0WlKvZl+jcWaRc2h+cmRqal5WXlNJUUZMTEJKRj1CPjU8OC85NSw3NCs2MywzMys0My4zNC4xNC0xNC0wMi0vMSwsMSssMSstMi4tMi4tMi4tMi4vMS4vMS4vMS4vMS4wMi8wMi8xMS8xMS8xMS8xMS8xMS80MC80KzA7LzNBMzJDNC9KOzZdT095bXmLhZ+TkLuUls+QldmDidN0esZqbrdfYqdaW5RMSXRIQmRBPl0+Plg/QlVBSVZMVVxVYGJicW5ufXh2hnxyf3VseW9ndWhfa19XX1BdXEhiXEZjXUcsLS8sLS8sLS8sLS8tLS0tLS0uLC0uLSsvLiwuLSswLCkwLCkvKygvKygvKygvKyguKikuKikuKikuKikvKyovKyovKyovKyovKyovKyovKyovKyovKyovKyovKyovKyovKyovKyovKyowLCswLCswLCsxLSwxLSwxLSwxLSwxLSwxLSwxLSwxLSwxLSwxLSwwLCswLCkxLSoyLiszLywzLywyLisyLisyLisyLisyLisyLiszLyw0MC01MS42Mi84MC45MS46Mi87NC49NC8+NTA+NTA9NC0/NC4/NC5BNC5CNS1DNi5FODBHOjJIOzNIPjVIPjVMPTZPPjZRPTRWOzJaOTBfNy9oNzBwNy53Ny2BOS2JOS6QPDGWPDGbPTGiQDOnQTOtQza0RDi+RTrJRjzURT3bRD3fREDgRUDeRkHURz7ERjiyQzKlQi2eQi2fQy6eQi2fQC6ePy2ePy2ePy2ePi6ePi6aPSyZPiyWPS2UPSyQPSuPPiuMPiqMPSyLPCuKPSuJPCyJPCyJPCyHOyuHOy2FPC2GPC+FPS+FPTGDPTGEPjKGQDaHQTeIQjaTRzmYRjijRzyvSkC4SUK4R0G3TEazVE6xZFyqcWaffm+Qf29/fG1tc2VaZlpOWE1MTkFLST1FQzdAPTQ9OjE4OC40NCwxMSkyMy0yMy0wMywvMisvMSwuMCsuMCsuMCsvMS4tMi4vMS4vMS4vMS4vMS4vMS4vMS4wMi8wMi8xMS8xMS8xMS8xMS8xMS8yMDE1KzQ5LTc8MjM/NTNIPzpeVlR4cnyKiJ6Tk7mUl8qQltSEi895gcJxebhrdK1obp5cX4BYWnFTVWpSV2pUXmhaZ21mdnZygn90iH9+koeDlYl+joF3h3pygHFmdGVaZVRbWkVgWkBiXEQsLS8sLS8sLS8sLS8sLS8sLi0tLS0tLS0uLSsuLSsuLSstLCovKyguKicuKicuKicsKyksKissKissKisrKSorKSorKSorKSotKywtKywtKywtKywtKywtKywtKywtKywsKissKistKywtKywtKywuLC0uLC0uLC0uLC0uLC0uLC0vLS4vLS4vLS4vLS4vLiwwLCswLCsxLSwyLi0yLi0yLi0yLi0xLSwxLSwxLSwxLSwxLSwyLi0zLy40MC81MS44MC45MS46Mi87MzA9MzE9NC89NC89NC8/NDA/NC5BNC5BNC5DNjBENzFGOTNGOTNIOzVKOzZLPDdOPTZQOzZTOjVWNzJbNi5jNjBrNi50NSx9Ny+HOS+NOzCUPDCWPDGdPzOgQDSiQDOoQDOxQza6RDjFRTrNRDrVRkDWRz/USULMST++RTquQzOhQi6cQS6dQi+cQS6cPy6bPi2bPi2bPi2bPi+bPzCYPC2WPS2UPC6TPS6PPi2MPSyLPCuKPSuJPCqJPCqJPCyHOyuHOy2FPC2EOi2DOy2EPDCCPDCCPDKCPjODPzSFQTiHQzqIRDmUSj2XSDugSD6rSkOyS0azTEeyU02uYFatc2emgXGdjHqRjnuCiXdzgG9jcWJYY1VOUkRNTkBISTtERDhAQDQ5Oy40NisvMSYwMSkwMSkvMCovMCouLyouLyovLy0vLy0vLy0uMC0vLy0vLy0vLy0vLy0vLy0vLy0wMC4wMC4wMC4wMC4wMC4wMC4wMC4xLzI2Kzk3Kzk4LzQ7NjNIRT5fXll6enyLjZqQlLGSl7+PlceEjsN9ibt7ibZ8i7J9jKt9iJp3g49xfodufYJufn5wg395joWDmY2LoZSRqJiQpZSInYqDloN8jXtqe2lcaFRYWEBdWTxfW0AtLjAtLjAtLjAtLjAtLjAtLjAuLi4uLi4uLC0uLSstLCotLCouKicuKicuKicuKiksKisrKSorKSorKSorKSoqKCkqKCkqKCksKissKissKissKissKissKissKissKissKissKissKissKissKistKywtKywtKywtKywuLC0uLC0uLC0uLC0vLS4vLS4vLS4vKyowLCsxLSwxLSwxLSwxLSwwLCswLCswLCswLCswLCswLCsxLSwyLi0zLy40MC85MS86MjA7MzE8NDE9MzE9MzE9MzE9NC8+My8+My9AMi9AMy1BNC5DNjBENzFFODJGOTNIOTRJOjVKOzZMOjZOOTRRODNUNTBeNzJlNjBvNi94OC+COTCKOi+QPDGUPjGZPzSbPzSbPzKfPzGlQTKuQjW4RDe/RTrHRz7LSEDKSkHDST62RjqqQjWeQTCZQC6ZQS2ZQS2YPy2XPiyXPiyZPiyZPS6XPi6VPCyUPSyTPS6QPS2OPSyKPSuKPS2JPCyIOymIOymHOyuHOyuEOyyEOyyDOy2AOyyBOy+APDGAPDGBPjWDQDeDQzqHRDyIRTyUTECWSDyeRz6nSkOuTEmuUUytXVaqal6ngG+hj3mamoKPm4OGlYB6i3hte2pibV1TWkpRVUZLT0BFSTpARDY7PTA1NywxMygwMSkvMCguLykuLSguLSkuLSkvLiwwLy0vLiwvLiwvLiwvLiwvLiwuLiwvLiwuLiwwLy0vLy0wLy0vLy0vLy0vLy0vLy0yLTE3LDo2KjgzLTE5NjFISj9iZlh7gHqLkJONk6OPlrCMlbaDkLKBkK+FmbKNpLaSqLOTqKuQpKOMoJ6HnpiCmY99mImBnIuIo5CUsJqYsZuUrZeLo42Fm4R+kXtrfGlYZk9TVjtaVjleWj0rLzIrLzIrLzIrLzItLjAtLjAtLjAtLy4tLS0tLS0uLSstLCotLCosKyksKyksKyksKissKissKisrKSorKSoqKCkqKCkqKCksKissKissKissKissKissKissKissKissKissKissKissKissKisrKSorKSorKSosKistKywtKywuLC0uLC0vLS4vLS4vLS4vKyovKyowLCswLCswLCswLCsvKyouKikvKyovKyovKyovKyowLCsxLSwzLy40MC85MDE6MjA7MzE8NDI9MzI9MzE8MjA8MjA9MjA9Mi4/MS4/MS5AMi9BMzBCNS9DNjBENjNDODREOTVFOjZHOTZIOTRLODRONTBYNzJfNjBpNzByNy99OjGGPDGMPjKQPjKXQDaXPzWXPzWXPzOcQDOjQzWrQzazRTi6RTu9Rz2+SD65Rz2wRDilQDSbPzCXQC+XQC2XQC2WPy6VPi2UPSyVPCyWPS+WPS+VPC6TOy2SPC+OPC6LPC2JPCyJPCyIPCyHOyuGOiqGOiqGOiqDOiuDOiuCOiyAOi6AOjCAPDGAPTR/PzaCQjmDRD2HRkCISD+RS0GSSD2aRz+jTEWoUEyoWFGpZl2mdmiijHebmYCVpIeMo4eGnYN+kX10gnFqdWVcZVJWX0xOVUNFTDo/RjY8QDI3Oi81OC0wMSkvMCguLSgvLCcvKygvKyoxLSwyLi0xLSwxLSwxLSwxLSwxLSwvLiwxLSwvLiwyLi0wLy0yLi0wLy0wLy0wLy0wLy0yLTE4LDo1KTUxKys2NixHTDhgaFF6g3CIkoeNl5aPmqCNmaWGlqOHm6KQqqmbubGgwLOYt6iatqebt6iYt6WRsZyJq5KJq5CQsZSSs5aVtJWQrY+IooWEm4F7knhnemRUYklRVDlWVTlYVzssMDMsMDMsMDMsMDMuLzEuLzEuLzEuLzEuLi4uLi4vLiwuLSsuLSsuLSstLCotLCotKywtKywtKywsKisrKSoqKCkqKCkqKCkrKSorKSorKSorKSorKSorKSorKSorKSosKissKisrKSorKSorKSoqKCkqKCkqKCksKissKissKistKywuLC0uLC0vLS4vLS4vKyovKyowLCswLCsvKyovKyouKiktKSgwLCswLCsvKyowLCsxLSwyLi0zLy40MC86MTI6MTI7MzE8NDI9MzI8MjE8MjA7MS89MjA8MS8+MC0+MC0/MS5AMi9BNC4/NC5ANTFANzJAOTNBOjRCOTRDODRGNzRINS9RNTFYNS9hNi9sOC11OS6APC+GPjCLPTGTPzWVPjWTPzWTPzSVQjSaQjSgQzSlRDSsQjWwRDi0RTqxRTuqQjehPzSaPjGWPjCVPy6UPyuTPSyTPSyTPCuTPCuUPC6UPC6TOy2SPC2PPC6NOy2KOyyJPCyHOyuHOyuGOiqGOiqFOSmDOimDOiuBOSp/OS1/OS2APDF/PDN+PjWAQTiCQzyFRj+ISUKKSUOOSkGQRz6XSEOfTkqnVlKnYFqpcGWkg3KclH2WoYOPqIqIp4iDoIR+ln55iHVwe2pkcFxdaVNSXkpKU0BCSzo+RTU6QDI5PDEzNCwyMioxLikvLCcvKSkwKioxKysyLCwxKysxKysxKysxKysxKyswLCswLCswLCsxLSwxLSwxLSwxLSwvLiwvLiwvLiwyLC44Kjc1KDEzKyg1NiZFSzFcZ0d1gmSGk3mOm4qRnpSQn5qLnpiNpZeXtJ6ixaWpzq2lya2myrCny7GkyKyXvp+Ls5GIsI2NspCOso6Qso+NrIqEoYKAmXt3jnJkeF1RX0VOUjdRUTVTUjYsMDMsMDMsMDMsMDMuLzEuLzEuLzEuLzEvLy8vLy8vLy8vLy8vLiwvLiwuLSsuLSsvLS4uLC0uLC0tKywsKisrKSorKSoqKCkrKSorKSorKSorKSorKSorKSorKSorKSorKSorKSorKSoqKCkqKCkqKCkpJygpJygrKSorKSosKistKywuLC0uLC0vLS4vLS4vKyovKyovKyovKyovKyouKiktKSgsKCcwLCswLCswLCswLCsxLSwyLi00MC80MC86MTI7MjM7MjM8MzQ9MzI8MjE8MjE7MTA8MS88MS8+MC89Ly4+MC0/MS4/MS4+My89NjA7NjA7ODM8OTQ9OjU+OTNANzJDNjBHNC5PNCtZNCtkNStuOCx4Oi1/Oy6FOy6PPDSRPDWQPjOPQDOQQTKTQjGXQTKZQDCgPjGmQDSqQjeqQjmlQDafPjWXPTKVPzKSPy2SPy2RPiyQPSuROyqROyqSPC2SPC2ROy6ROy6OOy2NOy2KOy6IOi2GOiyEOyyFOSmFOSmDOimCOSiCOSqBOSp+OCx+OCyAPDGAPTSAQDeBQjmERT6FSUGIS0aMTUaMSUGOSECYSkahU0+oXVipaGKpe26kjnmZnIGSp4aJrIuCqoiAoYR/mYB+i3d4gW5qeGFkcltaaFFRXUlJVENDTDs+RDY8PzQ2Ny80NCwzMCswKycxKCkxKCkyKSo0KywyKSoyKSoyKSoyKSoyKSowKiowKiowKioxKysxKyswLCswLCswLCswLCswLCsxKy02KTI1KS00LSU0NiFBSCZXYztxgFeCkm2NnH2QoIaQooyLoYqNqImVuI6gyJSk0J2p06uo0q6n0a2hy6WTvZeFr4eCrISHsIaIroWMsYiLq4aBn3t7lHRxiGtfc1dNXUJJTzNKTTBLSy8uLzEsMDEuLzEuLzEuMC8uMC8uMC8vLy8wMC4wMC4wMC4wLy0wLy0wLysvLiwxLSwyLi0xLSwxLSwwLCsvKywsKisrKSorKSorKSorKSorKSorKSorKSorKSorKSwrKSorKSwrKSotKCwqKCksKCkpJygpJygoJicqKCkrKSosKissKyktKywuLSsvLiwvLiwtLCotLCovKyovKyouKiktKSgsKCcsKCcxLSwyLSoyLSoyLSozLis0Lyw1MC02MS47MzE7MzE8NDI8NDI9MzE8MjA7MS87MS88MS88MS89Ly49Ly49Lyw+MC0/MS49Mi49NC09Ni47ODE5OTE5OjI5OjI7ODE/Ni9DMitKMSxUMileMypnNytvOS11PS56PC+HPTSLPTOLPzKMQDKOQDOPQDGSPzGVPS+YPC+cPjKiQjahQzeeQjeZPzSWPjKUPjGUPi+TPS6QPS2PPCyOPSyMPSyMPS6NPi+OPC6OPC6LPC+KOy6JOy6IOi2GOiyEOyyCOiuCOiuAOyt+Oyp+Oyt8Oip9OSx8Oi6APjKBPjWAQDaCQzqDRz2FSkKHTkWLT0eMSUOOSUSTUEqYXFSdaGCddWmeh3WemICUoYWPqomJrIuDqIeAoYR+m396kHl0iG9qfmNieV1ccFVVZ09PXEhHUkFBSDg9QTM4OC44NS43LywzKykyKCkyKCkzKSo0KiswKiwvKyowKiwwKiowKiwwKiwyKSwyKSwzKi0xKy0xKy0xKy0wLC0wLC0wLC0xKy80KS80Kis0LSU0NiE/RiVUYDhtfFGBkGeJmXSNnnqNoX6IoXqKp3uRtoKbxIify5CfyZmex52dxpqYwZWMt4qCrYCFroKMtYmEq3+JroWJqYJ+nHh2j29sg2ZablNKWj9HTTNGSjFERi4vMCsuMCsvMCswMSwwMSwwMSwxMi0yMS0zMi40My80My82Mi81MS40MSwzLyw0Lyw1MC01MC00LywzLisyLCwxLSwwLCswLCsuLC0uLC0tLS8tLS8sLC4rKy0qKS4pKSsuKS8uKS0vKC8uKS0vKS0uKS0uKisuKisvKyovKyotLCouLSktLSstLikuLyouLyotLS0tLS0uLC0vLS4vLiwwLy0yLisyLisyLSo0LCk1LSo2Lis4Lyo6MSw6MSo7Mis9NC09NC0+NTA+NTA+NTA9NC88My47Mi09Mi48MS08MS87MC49Ly4+MC8+MC9AMS5BMClAMik7NCo3Ny0zOS0xOS40Ny44My0/LSlGKidMKSdTKiZaLyhgNSxkPDBrQDB5QTJ/QC+GQTKLQjOPQDOTPTCTOy+SOC2TOy+TPS6UQTGVQjKUQzKSQTCRPi6ROyyXOzCXOjKSOzGMPTCIPzCEPy+CPy6DPi6IQDGIPzCKPjGKPDCJOy+IOi6GOi2DOy17OSt+QDN3PC5xNyl3Pi13Pi12Oy19PzJ7Oy+CQDSHRTmJST+ITEGGTUKEUEOHTkWRS0mXU1CUYlmRcGGKfWqHiXGJlnqKn4CNpIeNpomOp4qNp4yHpIh+n4J1mntvl3VpjWlihF9belhac1VablNXZU5QV0VKSz1DPzZAOTM7MC42KiozJykzJyszJyswJyorKy0pKyoqKiwqKCksJysuKCwxKC0yJy0zKC4zKC4zKDAyKDAwKTAwKTAvKjEvKjAvKS0xKyswLSgvLyM8PypWXEBwelh/i2eNnHWLnXOMoXaMpneKqHaJqnWOtHuZv4afwY+dvo+WuoqPs4OIrn2Fq3yDqnuFqn6DqH2Dpn6Annx5lHVyiW1ofGNZa1VNWkZJUTxDSDQ/Qi8vMCowMSswMSswMSsxMiwxMiwyMSwzMi00My40My43NC83NC82My41Mi01MCw1MCw3Lyw3Lyw2Liw2LiwzLisyLSowLCswLCsuLC0vLS4vLTAtLS8tLDErKi8pKi4pKC0uKS8vKC8vKC8vKC8vKS0vKS0uKisuKisvKyovKyouLSkuLSkuLyouLyouLykuLyouLi4uLjAuLi4uLi4vLiwvLiwxLSozLis1LSo1Lig3Lik4Lyg6Lyk7MCo8Mik9Myo+NSw+NSw+NS4+NS4+NS49NC08My48My49Mi48MS07MC47MC49Ly49Ly4+MC9AMS5DMCpDMClBMis+NCs6Ni05NSw6My08MS0/LStEKilJKihOKydULylaNS1fOjFlPTFwQTF4QC+AQTCIQDKPPzSRPTOTOjKTOzGNOS6LPC+LPi6MQDCNQTGNQTGOQS+RPzGVOzKVOzKQPDKLPTCGPjCDQC+BPy+CPy6FQDGGPi+JPTCIPC6HOy6EOyyCOiyAOyx4OCx4PDFzOS1uOStzPi5zPi5yOCp1Oix9PTGDQTWJRTqLST2JS0CGTkGEUEOHTkWRSkiXU1KSZl2Md2aDh3B/k3eAn3+EpoWIp4iNp4qQp4uQp42KpImBn4N3nH1vmHZlkmlgi2BZglpZe1hcd1hablNTYUpOVUNGSDtDQDc8NzM3Ly0zKisyKSoxKCsuKCorKyspKiwrKSwrKSwtKCwvKS0yKDAyKDAzKDAyKDAyKDEwKTEvKjEtKjEtKjMtKjEyLTEyLi0wLCktLSU4OixTWEJveF2Ai2mHlm+GmWyGnm6Io3CGpHCEpXCKrXeTtoCZuYeWtoSTs4GNr3yGq3iCqHeCqHmDqHyDpnyCpH9/nXt4knVxiG5oe2VZaldNWkhFTDxARDU7PS8xMiwxMiwxMiwxMiwyMy0yMy00My40My41NC81NC84NTA4NTA4NTA3NC83Mi42MS04MC04MC03Lyw2Lis0LywzLisxLSwxLSwxLS4vLS4wLjEvLTAtLS8sLC4rKi8rKS4vKC8xJy8vKS0vKS0vKS0vKS0uKisuKiswLCswLCsvLiovLiovLikwLyovMCovMCsvLy0vLy8wLi8wLi8vLiwvLiwxLSoyLSo2Lis3MCo5MCs6MSo8MSs9Myo+NCs/NSw/Ni0/Ni1ANy5ANy4/Ni8+NS49NC09NC09Mi48MS07MC47MC47MC47MC48MS8/MS5DMitFMCtILytLLS1MLC9LKy5JKi9FKy5BLSxALipBLihFLihNLilYMSpiMy1nNS5qOixvOy13OzCBPTSHPDaMPDWNOjSNOjSKPDKHPTKGPjKFPzOGQTKJQTOMQjWPQzWOPzKPPS+MPjGKPi6HPi+FPiyGPS6IPCyJOy6JPCyIOi2GOiqDOyx/PCl+PSt7PCt9PTF6PDF2Oi91Oy94QDF4QDF2PC52Oy1/PzWCQjiJRj2LSD+JSkGHS0GHTkOKTkaRSkiYVFGWZlyQdmWHhW6BkXR/nXuBpYGFqIeIqomNqouQqYyOpYmIn4OBmn15mHhplm1hkmVci2FchmBdgmBbfF1VclZQaFBGWUVCUD86RDkzOjIuMywqLykqLCkqKiguKCgxJioxJioxJiowJyoxKCsyKS4xKy8vKi4tKy4sKzArLDApLTAoLTAoLTEpLTAxLzIzLy4vKygqKiI1NypQVUFtdV18immAkGt+k2p/mWqDn26AoG5+oG2ApXGHrHiNr3yLrXqIqneEqXWBp3R/p3V/pnd/pnl/pHmAon19m3l3kXRwh21ofGNZa1VNWkhESDk9PzI5OS0yMy0yMy0zNC4zNC4zNC40NS81NC81NC82NTA3NjE5NjE6NzI6NzI5NjE5NDA5NDA6Mi85MS45MS44MC01MC00LywzLy4zLy4zLzAzLzAxLzAxLzIwLjEuLjAtLS8tKy4wKTAyKS4wKi4wKi4wKi4wKiwvKywvKyoxLSwxLSwwLyswLysxMCsxMCswMSswMSwxMS8xMTExLzAxMC4xMC4yLiszLiszLio5Miw5Miw7Mis8Myo+NCtANi1ANi1BNy5COC9BOC9COTBBOC9BODE/Ni8+NS4+NS49Mi49Mi48MS87MC47MC48MS89MjA9Mi5CMy5FMi5MLi5SKzBWJy9VJi5QJy9JKS5DLy48MSs7Mik/MilIMSlSLylfLipkLylpOS9rOy91PDN9PDaFOziJOzmKOzeIOjaJPjiGQDiGQjmFQjmFQzeGQjeHQTeJQTWIQDGIQS+HQC6HQC6HPi2IPCyIOyuJOiuKOCqIOSqHOiqDOil/PCl7PSh4Pih4PiqCPjF7Ny56Ny56PDF2Oy13PS98QTN7QDKAQjeDRTqGSD2ISj+HS0GHTUKIT0SKUUiOU0uQXFGOaFuLdGKFf2eAi21+lnZ/nnyDp4OEqoWHqomLqoqLpoeHoIKDmn59mHlxlW9plGlmj2dmjGVni2dkhmVffl9ad1tQaFBLXkpCUD84RDYyOi8uNCosLygrKiUyJiY1JSg0JSgyJigxJygvKSsvKywuLC0rKysqKy0qKy0oLC0oLC8nLC8nLC8qKy0uKisxKyswKycuKyI4OCxQVUFpcVl2g2V7jGh5j2h8lml/nGx9n215nmt6oG1/pXKCp3SApXF9pG99o3B9pXN+pXZ+pXh9pHh8oXh9n3p6mXd1kHFuh2plfGJYbFNOW0dERjk/PTE6OCw0NS80NS80NS81NjA1NjA1NjA3NjE3NjE4NzI4NzI7ODM8OTQ8OTQ8OTQ8NzM8NzM8NDE8NDE7MzA7MzA4MzA3Mi82MS42MS41MTA2MjE2MjEzMTIzMTIxLzAwLi8xLS4yLDA0Ky40Ky40Ky4yLC4yLCwyLCwyLCwzLy4zLywzLywzLywyMSwyMSwzMi0zMi4yMjAyMjAzMjAzMjA1MTA1MS42MS42MS07NC48NS89NC0/Ni1BNy5COC5FOC9DOS9EOjFEOjFFOzJEOjFDOTBCOC9ANS9ANS8+My8+My89Mi49Mi49MjA9MjA+MzE+MzFANTFFMzFNMDJULDRYKTNXKDJSKTFLLDFCMzA6Ni03Nys6NipCNClNMilYLyleLylmOjFqOzNzPDd6PTqCPDqGPDuHOzuGOjqBOjaBPjiBQTiBQjmDQzqDQzqFQDmEQDeCQzKCQzGDQjCEPy+GPS6IPC6JOi2LOS2JNyuHOCuFOSuCOit+PSt4Pip2Pyp4PiqBOS18LyeCOC+EPjR3NCtzNSp9QTZ9Qzd/RTqARzyCST6DSj+ES0KGTUSHUUeFV0p9YE57aVGAcFmBdV2CfGKDhmmGk3WInXyDo36Bp4CCqoWCrIaBqYR/pYB7nn16mXd6knB6kGx4jWx3jGt1jW1yiWxthGdrf2RgclhbaVJSW0hITD1AQDQ7Nyw3MCY1KiQ2KCc1JyczJycxJyYuKSYrKigrKykrLSonLCgnKyopKyopKyoqKiwrKSwrKSwtKSosIyQyKic1MCo4NipCQzVVWkZmcFdufV50iGVximJ1kGV4mGl2mmpzmWh0mml3n2t6om54oGx3n2t4oG55o3F7pXV7pXd8o3d5nnV6nHd3lnRzjm9thmhke19Xa1BOW0dDQzc+OjE5NSw1NjA1NjA2NzE2NzE3ODI3ODI4NzI4NzI5ODM6OTQ9OjU+OzY+OzY+OzY+OTU+OTU/NzQ/NzQ+NjM9NTI7NjM6NTI5NDE5NDE4NDE4NDM5NTQ4NDM3MzI0MzE1MTI0MC82LTA2LS42LTA2LS40Li40Li40Li40Lyw0MC00MC00MC01MS4zMi0zMi00My40My40My8zMzE1NDI1NDA4NDE4NTA5NDA6NS89NjA+Ny9ANy5BOS5DOS9EOjBHOjFIOzJGPDNGPDNGPDNGPDNFOzJDOTBCNzFBNjBANTFANTE/NDA+My8+MzE/NDJANTM/NTNANzJDNTJJMzVQMTZULzZTLjVQMDVKMjJDNTI9OTA8Oi09OitDNylJNihRMylXMildMitkMyxsNTB2NjR9NzeCODeDNzeCNjZ+NzV9OjR9PDZ9PjWAPzmDQDiGPzmFQTiAQjOAQzGBQjGDQDCFPS+HOy6IOi6HOS2FOSyDOSyCOix/PCx8PSx5Pix4Pyx8PSyHNSqLMiyhTEWoWFGLQTh8OTCCRjuASz15SDp6Sjx7TT58Tj99T0KBUUWHVUqCX0xya09vc1J8dViGdlyPeWKYf2mfi3OglHqWlnqPnXyLo3+IqIGFp4KApH57n3l+mXaDkXCFjm+DjnCAj3B/kHB7jnB3jG1zh2tqfmJmdlxfaFNWW0dPTT5HQTNANio9MCc7LCc5Kyg2KyczKygvLCcsLScrLicpLigpLigrLSgtLCovKyozKSo0KCo3Jyo3JygzKCQ8MyxFPjRJRzpRUkBdYktncVZqeVpugl1rhFxsiV1wkWJxlWVvlWRvl2VymmZ1n21ynGpxm2l0nm54onJ6pHZ5onZ5n3Z2mnR3mXZ1lHJvjWtqhWZjfF5VbE9OXEVDQzdAOTE7NCw2NzE3ODI3ODI3ODI4OTM4OTM5ODM6OTQ6OTQ7OjU+OzY/PDc/PDc/PDdAOzdAOzdCOjdCOjdBOTZAODU9ODQ9ODQ8NzM8NzM8NzM8NzQ8NzQ8NzQ7NjM5NTI5MzM4MzA4LzA5Ly44LzA4MC44MC44MC42MS42MS02MS02MS01Mi01Mi02My42My43NC81NC81NDA1NDA4NDE5NTI6NjM8OTQ9ODRAOTNANzBBOC9DOTBEOjBHOjFIPDBJPTFJPTFKPTRKPTRKPTRJPDNGPDNEOjFCOC9BNy5BODFANzBANzI/NjE/NjFANzJANzJBODM/NzRAODVCODZEOTdHOTZIOTZIOTZIOTRFODBFOC9FOS1FOStHOSxJOSpLOStRNypaLyZkLyduMy16NjODOTiJOzmLOzqLPTuLQT6HQDqCPTZ/PDN/OjOCPDSIPTeJQDeDQTWBQjOCQDKDPzKDPTGEPDCBOy+APC9+PC58PS57PS58Pi98Pi99Pi9/PS+GOS+QMSujOzjOa2bbfnmtWlSMQzyITEF/TkB0SjxxTT1wUT9xUkB0U0B6V0SCW0p+ZU9tc09ve1WEeVuYdV+pb2O2bWa+cWu9d2+7gnexjHqnl36en4CWoYGNoX6FnXmFmXaIkXKLkHKIkXKEk3KAlnJ8lnN4k3B0knBti2lphGVkeFxda1FWXkdNUDtFRDBCOytAMys/Miw7MCo3MCozMCkwMCguLycuLykvMCoyLyo2LCs6Kis+KCtDJitFJCtDJihGNS1MQzRWUEBbWEVgYkxnbVFpd1Zqe1dsgltngldmhldsjlxvlGFulGFulmJymmZznWtvm2pvmWlynG52n3N5onh4nnd1m3Zzl3N1l3ZzknJui2xphGNie1tUbU1NXUNHSDpFPDVANzA3ODI3ODI4OTM4OTM4OTM5OjQ6OTQ6OTQ7OjU8OzY/PDdAPThAPThAPThBPDhBPDhDOzhDOzhDOzhCOjc/OjY+OTU+OTU9ODQ+OTU+OTU+OTU+OTU9ODU8NzM6NTE7MzA6MC46MC45MS45MS45MS85MS45MS43Mi42MS02MS02My42My42My43NC83NC83NC81NDA2NTE5NTI7ODM8OTQ/OjRCOzVCOzNBOC9COi9DOS9FOy9IPDBJPTFKPjJKPjJLPjVLPjVKPTRKPTRGPDNFOzJDOTBCOC9COTJCOTJBODNANzJANzJBODNCOTRBOjQ/ODJAOTNCOzVEPTdGPTZHPDZLPDVOOzRNNi5ONixRNitRNitRNypQOStQOSlWNidmNipyNix+OzOJQDmVRECbSESfSkefTEagUUqZTESORDuFOzCENy2FNy2MOTGNPTSIPjWHPjeGPTaFPDWFPDWBPTR9PTN6PjN4QDN2QTN4QDN6PjN/PDODOjOINzOSNDKYKCazPTvte3r+lZLFaGOWR0CJS0B4SDpuTTxqUT1mVD5oVj5sWEB0W0V/YEyAaFB5c1GEd1WedFy0bF7JX1/TVlzZUVvXVFzkb3XZenjMhnzAj361lYCrlX2jknifj3acinKcinSZjXWVj3WRkXWLknOGkXOCkXJ8i255hmp1e2Ftb1dnYk5fVEJVRTVSPC9PNC1NMS1JMCxELyo+Lyg5LyY3Lic2Lyc4MSk6Lyk9LitBLCtGKStIKCtLJytIKSdUQjRZUTxkXkhnZUxpbE9udVZte1hsflhrhFpnhFZnh1Ztj11wlWJxlmJymWR1nWl0m2xvmWtvlmpymW13nXZ5n3h3mnl0lnVzlHV1lHVzkHFvimtphGVhfFtUbU1NXUJNTkBLQjlGPTY5OjQ5OjQ5OjQ5OjQ5OjQ6OzU9PDc9PDc9PDc9PDdAPThAPThBPjlCPzpEPztEPztFQDxFQDxFQDpEPzlEPzlDPjhFPjhEPTdCOzVCOzVCOzVCOzVCOjdCOzVBOjRBOjRBODNBODNBODNANzJANjQ+NzE+NzE+NzE8NzE8NzE7NjA6NS85Ni84NS43NC83NC85NjE5NjE5NjE6NzA8NzE9ODJBOjJCOzFDOjFEPDFGPDJKPjJLPzNMQDJOQDNOQDVOQDdOQDdMPzZLPjVJPDNIOzJFOzJFOzJCOTBBOC9AOTE/ODA/ODA/ODBAOTNAOTM8NS9NRD1NQDpLOjNUQDlSNjJPMCthPDZcMy1gNS5gNCteLyVeLyVmNixtPTFxPTCKSj6PRzuXST+fS0GfRj6bPjebPjeeRDumTkSkUEWoVkqrWUulT0KZQTWXOzCbPjaTOTiROTiMNjWGNTKGODSEPzh8QDZyPjFyQjRvQTJxPTB2OjCCNzKMNDOSLTGaJyzISEnoYmHFRUTNV1XheXarVk+GRjyEVkZtUj1pW0FpYkZqZUhqYEVuXkR8ZEyNalSSYkyybV3RbmjbWF3gO0znLUXyK0j1MEz2QFnsSVzkW2XlbnLie3zbgH3bg3/YiYLDf3a9gXe6hHi2hniyiHitineoi3mljHiagG+Zfm2YeGmTb2GNYlmEVU17SUJ4QT51OjxpLjJkMDRhMDNQJidHJSNMMC1NNTFHNC5FMixEMS1GMS5GLixGKilLLS1RNi9ZSDRgVzpmX0JnZEVrb051fFp1hF1vgVlsg1dsh1pwjV1ykmFzlWJ1l2R3mWZ2m2hxlWlzmG9zl3FxlW9zlXR3mXh6mHx5lnp4lXlzjXJth2prhGZpgmRhelpUbU1PX0ROTz9TS0BQRz45OjQ5OjQ5OjQ5OjQ6OzU7PDY+PTg/Pjk+PTg+PThBPjlBPjlCPzpDQDtEPztEPztGQT1FQDxFQDpFQDpEPzlEPzlFPjhFPjhFPjhFPjhFPjhEPTVDPDZDPDREOzRDOjFCOTJCOTJCOTJCOTJCOTRBODNAOTNAOTM+NzE8NzE7NjA7NjA5Ni84NS43NC83NC85NjE5Ni85Ni86NzA8NzE+OjFBOjBCPDBDOzBFOy9JPTFKPjBMQDJMQDJOQDNOQDNOQDVOQDdNPzZLPjVJPDNIOzJFOzJFOzJDOjFCOTBAOTFAOTFAOTFAOTFBOjRCOTJEOTNKNzFMLytWLixqNzZ1OTl7OzuFRUODRD+ESECFST+GSD2OSkGZTkihUEyiT0eTRDeUQjSaQjafQzigPjOcNy2cNy2fPTCjQzWbPzCZQDCgRTOkRzanRjauSDq2TkW0TE2vSEylQESZOTuROTiNPjqDQDh4PjNvPjB6STuFTEGEPziELCuSKS6zOUTSTFfcS07fTU3KPj3AQD/QYFyzWVGEQDWCVER5YUllW0BfXkBpaElzbE92Z0p+ZEuWY068ZFjWX1vmVVrrQU7yLEX+JUT/Jkj/J0n/Lk75M07yPFLwSVrrUF7lUV3jU13gWGLbYmnVZmzUam7SbXHPcXLNdXTJeHfHeXfKfHzJeXrIdnjHcXTGa3LFZm7FYWvDX2vFYG6zU1+lS1eaR1GNREuGRUltNjlIHBtUMS1NMCpIMStKNi9LODFLOjJPPjZVRThbTzVjWjlnYUFpZkVuck96gl16iWJ0hl5yiV9wiV9wi2BxjmB1kmR3lGR3lGR3lGZzkml4lnJ6l3h5lnh+mH2DnYSFnYeDm4WBmYN6knpyiW9thGhogWRgeVtUbU1OYUVSU0FWUEJVT0M4OTM4OTM4OTM5OjQ7PDY8PTc/PjlAPzpAPzpAPzpDQDtDQDtDQDtDQDtEPztEPztGQTtGQTtGQTtFQDpFQDpFQDpHQDhGPzdKQTpJQDlIPzhHPjVGPTZFPDNGPDNFOzFEOjFEOjFEOjFEOjFEOzREOzREOzRDPDQ/ODA/ODA8NzE7NjA6NS86NS85NC45NC45Ni85Ni86NS87Ny4+Ny9AOS9COTBDOzBFOzFGPDBJPTFLPzFNPzJNQDBQQDFPPzBQPzVNPzRMPjNLPTJJPDNIOzJFOzFEOjBDOjFDOjFBOjBBOjA/OzJAPDNAPDNEOzRVRDxUMy5qMjOOQUetTFfDVWLLXWbGX2ObQj6XST+WTEGcTkKsUkq+VVLMT1PETEulQDSdQjCgQDClPzGlOy6jNyukOCunPS+rRTahPiuYNySdOielPi2sQS+yQzK2RDqnMDKvOkK5REy9TFK6TVKtS0yWQT6CNzF7OC92Nix4MiqEMS2cMze5PUfVR1foTVviRknPNTPQOjm9MzHITkvGY12USj+MW0p9Y0xqX0NnZEV0b09/cFGBaEqNaE6waFnkYmL1UVr0RFH2N0n9MUr/Mk7/L03/K0n/Mk/8MEv3MUr1NUzyNE3wMkvzM0zzN1DyQFjvQ1vuRl3tSWHrTmPqUWXoVWjoVmvlU2rkUmnjT2nkTmnnTmzrUG/yU3PzVnX+aIXxYXzlW3XVVWzNWWzJZHKoUl1yLTJeJidZMCxXOjRRPzVCOi06OCk+QjFMTjlWTzNhVjZlXz9oZURxdVR/hmV+jGl3iGR4jGl1i2Vyi2Ryi2N2jGV5j2h6kGl6kGqAlXaEm36KnoWNoIqSo5CXqJaYqZmWppmRopKHmIZ6jXlwg21nfmJed1lUbU1QY0dTWERYVURZVkc3ODI3ODI4OTM5OjQ7PDY9PjhAPzpBQDtCQTxCQTxEQTxEQTxEQTxEQTxFQDxFQDxHQjxHQjxHQjxGQTtGQTtGQjlIQTlIQTlMQzxLQjlKQThJQDdIPjVHPTNGPDJFOzFEOjBEOjBFOzFFOzJEOzJFPDNFPDVFPDVAOTE/ODA9ODI8NzE7NjA6NS86NS86NS85Ni85Ni07Ny47Nyw/OC5AOi5DOzBEPC9GPDBGPS5KPjBLPy9NQDBNQDBPPy9PPzBPPzJPPjRMPjNLPTJKPDNHOjFFOzFEOjBEOzJEOzJCOzFAPDFAPDNBPTRCPjVHPTRTODFbKiaJOj++VGDZVGXmVGfjVWPLSk+fMzCWOi+RPjCZQTOuRj3FSUfVQkjNPkCxQjenRjWpQjOsQDOvPzOwPjOzQjS0RDayRzWpQi+jPCmkOyipPCirOiiuNiatMyi2OTe6OT29Nz68Nzy/PELGSkzEVFO+WFOZPzeMNCqJLCWdNjHDSEvcT1fiQVHbM0DeOjnNLirTODTINzTGRUDIXVWpV0uQV0Z3V0B2ZUl+cFN/cFGEZkqQZEupb1vVdWnuU1f8RFD3O0r4OUn+PU7/QFH/Ok75NEj/P1P+OU37NEv9M0v9MUr/L0n/ME7/NlP/M1T9NFb9Nlf6N1f4OVr4PVz3Pl71QGH4Q2b2QGb1P2X1P2f4P2j8Q23/RXL/SXP/T3X/UXX+VXbyU3HnVG7lYXjWZna3V2J9MTVqMC9ZMitQOCxHPi8+QS47RC8/Ry9QSy5fVDhnYENva058fGCIjnKHkXZ9i3F6jXF8j3N8j3N6jW96im19jG+DknWIl3qVo4qcqZWjrp2msaGstKexua6wt7Crta2hq6KVoZWDkYJzhHFofGNddFhTbE5QZEhSWkNXWURZWkg2NzE2NzE3ODI4OTM6OzU8PTc/PjlAPzpCQTxCQTxEQTxEQTxFQj1FQj1GQT1GQT1GQzxGQzxHQjxIQz1IRDtIRDtKQztKQzlMQzpLQjlLQThKQDZKPTRJPTFIPDBHOy9FOy9FOy9FOy9FOzFFOzFFOzFEOzJEOzJAOS9AOS9AOTE/ODA8NzE7NjA7NjA6NS87Ny47Ny47Ny48OC0/OC5BOy9DOzBEPC9HPTFHPi9LPzFNQDBNQDBOQTBPPy9PPzBPPzJOPjFOPTNKPDFJOzBHOy9EOjBEOjBEPDFEPDFCOzFAPDFBPTJBPzNCPzZKPDNcNS53MzKtTFPbXWnmTV/lP1PXNkW3JiuoMSudNyiSOiaXPCmsQDPDRD3UPj/NOzuxPzWoQjSqQDKtPzKyQDW4Qzm8SDu7SjysPi+qPy+oPSumOymqOSmwOiy3Oy+8PDHKRkHOREHQPj/QNznWNzzeQkXiTE7dUk/EQz7GS0PNVEzUU03ZS0rbP0LgNT7hMjfbNC7aNy7QMSvPOjS/ODSzQDm1W1CWVUN7TjmCYkmGa1CEYEaRWkWtZlTLcmTnbWjqRUvyOkTqOUPnPETnQkjnRkvoR03qRk30SlPzQU3zOEn2NUj5Mkf9L0b/Mkz/OFL/OVb/OVj/Olj9Olr+O13/PV//QGL/QWX/Q2n+RGv+RG38Q238Q2/8Q2/8QnH+Q3D/R3D/QGj/R23/TXDySWjpT2vlW3LZY3O9WWOOP0RgJiRRKyJWQDNWTz1JTDdARC1SSjNlWUN1alaAe2eOjXmYnIuUnYyHlIOCjoCJl4iPm42MmYiHkoKKk4KXno6kqJmytqe4vK6/wbbAwbnCw73FxsHDw8O+vr6wtbGiqaKNl4x5h3Zpe2Vcc1lUbU9SZkpRW0JVWkNXXEY1NjA1NjA2NzE3ODI4OTM6OzU9PDc+PThAPzpAPzpDQDtEQTxFQj1FQj1HQj5HQj5HRD1HRD1IQz1JRD5JRTxJRTxLRDpMRTtMQzpLQzhMQjhLQTVMQDRLPzNKPjJJPTFHPTFHPTFGPDBGPDBFOzFFOzFEOzJDOjFBOjBBOjBAOTFAOTE9ODI8NzE7NjA7NjA7Ny47Ny47Nyw8OC0/OS1BOy9EPC9FPTBIPzBKPjBMPy9NQDBOQTBOQTBPPy9PPy9PPzBOPjFNPDJMOzFJOzBHOy9GOTBDOS9DOzBCPDBCOzFAPDFAPjJBPzNCPzZOOzRtODSXRkXEWV/bV2LfQ1HeOEbUMzu9KyutMSehOCWYOiGXOSCkOya2Pi7DOjK+NzGnNyyiOi2lOS2nNyyvOjG4Qji6RTu3RTquPjKtPzCnPCykNieqNim2PjDDRDvKRz2+OC3OQDbhRD/sQkL0PUHzOT7rMjfeLjDbNzXiR0LoU0zlTkfcPTnZMTDjLzLqNjfZMSjePC/NLCLQNzG+MyywNy/JZ1y4bFyOV0OHWkODVj+JUj2pXEzObGHhZ2LkVFTwRUvxPUbkO0DZPT7SQT7SR0TdT03rV1ftTlPvRE3yOUf2NUb4MUb4LkT7MUf+N07+OFP9OFT9OFb+OVf/O1z/PmH/QWX/Q2v+O2X9PGj9Pmr9P236Pm74Pm/0PW32Omr/SHL/O2H/P2T/S27/S273Tm3vVW/jWm7ocoLEYGqXSEt0OjhcNi1QOStQQzJVTTpeUUFyZVWIfG6VjYKfnZGmp5+gp5+UnZiVnpuep6Smr6ymrKiip6OmqKO1tLDCwbzMycDRzsXV0MzV0M3Uzs7Vz9HRy8/Lxsq/vcCwsq+Yn5iAjH5tfmtgdFtXblJWak5TYEZWYEVYYEg1NjA1NjA1NjA1NjA2NzE4OTM6OTQ7OjU9PDc+PThBPjlDQDtEQTxGQz5IQz9IQz9HRD1IRT5JRD5JRD5KRj1KRj1NRjxNRjxNRTpMRDlNQzlNQzdOQjZNQTNOQDNNQTNKQTJKQTJJQDFIPzBHPTFGPDBEPDFDOzBDOjFDOjFBOjJAOTE/ODI/ODI8NzE8NzE8OC88OC08OC08OC1AOi5BOy9EPC9FPTBIPzBLPzFNQDBOQTBQQDBQQDBPQC1PPy9PPS9PPTFNPTBMPC9IOi9GOi5FOC9DOS9COi9BOy9BOjA/OzA/PTFAPjJAQDRQOTFyMS+oSkvAUlW7PkS9MDbCMDPBLy+6MSmpMSGjOSOcPSGZOx+bPCChPSOlOyWkNiWeNimgOC2iNiylNCytODG3QDq4QzyyQDaxQjetQTSoPC+mOCuvOjC8QzjDRD3FQDfDPi3PPi3ZNSvhKibtIiX6JSv/KjH/LjTtKSrnLivhMyzfNCzgMyzjMizpMC3nMivaMiXWNibQMibPNyzFNi69PjfIYFXSf3GmZVOPVkKKTTqjV0nIZlvfZF/nUlToQ0n1Rk3tQETfPz/UQDzJQDjGPznRRkHjTUzvSlD0QEv5OUj9N0j8NUj4M0X3Nkf6O036OFD8N1L7NlL9NlX/Nlj/OV3/O2H/PGf/Pmv/P23/QHH/QnT/QnX+QnX8QnT5QnD/Rm36QWH+RWX/S2r+S2v/VnT/X3r1XXTyan7mcH7TbnavXWGDQ0FnNi9oQjdzVUp5ZVyMfXajlpCto6Gyrqu2traytrmosLOwt722vcW9wcrAw8rEw8vJxs3Vztbd19vi2tjn3dvp3d3m2tzl2N/k1+Dg1N7Zz9jKxcu6urqip6OIkod0gnFleGJcc1dbb1Nbak1caUtdZ0w1NjE1NjE1NjE1NjA1NjE2NzE4NzI5ODM8OzY9PDdAPThCPzpEQTxGQzxHRD1IRT5IRT5IRT5IRTxKRj1KRjtLRztLRztOSDpNRztNRztNRTpNRDtNRDtNRD1OQz9OQz1NQzdNRDVLQjNKQTJIPjJHPTFFPTJEOzJDOjFDOjNBOjJAOTNAOTM/NzQ8NzM8NzE+Ny8+Ny88OC89OTA+OjFBOjJDPDJEPTNIQDVJPzNMQDJNQTFOQTBQQDBPQC1PQC1MPy9MPjFNPTBMOzFKOTFJODFFODBDOTBAOS8+Oi87Oy88PDA9PjA+PzFBPzBTOC2HPDfEXFvKWlmuODarLiqxMCquLiWtMiOsOSasQiqqRiymRCejQSajQSaiPCOfOSOgOSqjOzCmOjCmNy6tPDS2Qzy3RTuwQDWrPTCoPC+pOy6sPDC7RTnGTEHFRTy8OCy/NiTNOijdOy7mMyzxKyr5KCv9Jiv7JSf4Kir1LivvMizrNCzoMyrlMynkMijgMyXgOirRMh/cPzDONinHNyzCPzWzQTbRbGC/Z1mlUkKoT0HLY1rnaGLmUlLqQUbzQkrrPkTgOjzWPDzNQDnBPjS2OCy5Ni7EOTTiSEjpQEXwOkb2Okj6Okn4OEf3O0n7P07+QVX/P1b+PFT+OVT/OFX/OVr/Ol7/O2P/Pmn/Pmz/Pm//PnD+P3L6QHL4QHT3QXH3Q2r/TW3/U3P3SmjsQWH9VHP/Z4X/ZYL3XXfvX3joZ3vccH3GcXinZ2eNXlh7WlGXfneqmZK+sK3EvLrGwsPIx8zHx8/Dw8/LytjMytjRytrXzt/f1OTm2+nq4Ovt4+vv5eby6Ob06Ojw5Obu4ejt4Onq3efk2OLRytHBv8Krq6mRlo96hnhse2hidV9gclhicFZib1NjbVQyMS8zMjA0MzE2NTE4NzU5ODQ5ODQ5ODQ7OjU8OzY9PTU/PzdBQTlDQzlFRTtFRTtISEBISD5ISDxKSDtLSjhMSzdNTDhOSzhOSzpKRjpHRDtKRkNOSU1OSVBHRE9EP0VORT5MQzRKQDRLQTVNQzlMQjhGPTRCOTBFPDVDOjVAOTM/NzRAODU/NzU8NzQ8NDJDOjVCOTRBOTY+OTU+OTY+Ojc/OzhAPDlCPzpEQDdHQDZKQDRMQDBPQC1PQCtMPyxHQC5GPy9JOzBLODFNNTNMNzZKODhGOzlCPzo2OTA0PC85RDQ6QS82OSQ/PShiQzG8al65SkGmNyylNSmnNyulNSelNyaoPSujOCSlPCaqQCqtQCmsPSmsOSauNiWrNiWkNiehNymiOCqmPC6qQDKsQjSsQjKsQTGpPiyrPSytPCyzPS+9QzTERjjAPjG6MibHOSvMOCrQOCvWOC3bNy3iNS7pMy/uMS3xLiz0Li3zMCzxMSzqNSrjNyndOinbOijcOSbUMx/QMyDPOCfGNye+NijCQjXPU0nITUXPU0vhXFfuXVrwUFLtPkPyOT/3P0fqQUbfQ0TVQUHIPzm7PDOxOy+wPC+yPDDKS0LUS0PcRkXhPj/rPEH3P0f9P0n5O0f+RFH8Q1H+RFL/RFX9QFb8PFX/PFr/QmT/Rmv/QWr6O2f1Omf2PG35Q3P9SXn/S3r/TXn/TXT4UHPwT3DnTWnqTWr8WXj/Z4j/X4P1R2z3VnfoX3nDXm69e3+HYV6PeHCnkYS7p5zRxLvd1tDd3Nrc2+De3Ofi2+vm1+zr2O7x2fH23fP34vP35/T16/T07vL59PH59PD58e/27e7z6Ozu4+np3uTm3eLW0NTNycq7urijpaCLkIl5g3hyfW9we2t9hnN4gWx2fWswLi8xLzAzMjA1NDI2NTM3NjI4NzM4NzI6OTQ7OjU9PTU/PzdBQTdDQzlERDhFRTtISD5ISD5ISDxKSDlLSjZMSzZNTTVOTThLSjhLST1LSkVQUFJXVWBZWGpWVGpST2BPSUtNRD9IPzpGPThHPjlIPzpGPThCOzVEOjhBOTY/NzQ/NzRAODVAODU9ODU7NjI9NC89NC89NTI8NzQ9OTY+Ojk9PDo+PTlCPzpEPzlHQDZKQDRNQDBPQC1QPytMQCpCPyxCPy5GPDBIOjFKNjVJNTZGMzVANjVAPDk6PTY7PjVAQDRFPC1KOSleQjSATD6uUUKrOy2gMiOhNiajOieeNySeOSWjPiqhOyWnPCiuPyuzQC22PSy3OSq5Nym1NymqOSmlOiqlOiqlOyuoPi6rQTGrQi+rQC6uPyyrOiixPCu/RTbGSDnBPzG8OCvANinLNyvPNyzQOS7ROy3UPC/YOi7gOC/nNC3uMS30Liv0LivxMCvqNCnhNyjXOifVOiTePCfZNiPVOCXUPSrMOyrBNSbEOi/PRjzRRj/aSUbpT03zUFH0R0nwO0D1OkH4Q0jlQkXaREPSQkHFPji3OzGuOi2qPC2rPS62RTXGTD/UTkXcR0PjPz7vP0L6P0b9P0n4Q0r3Q0z6RFD/RlT9QlP5PlP8Plj/QmH/R2n/Q2n8P2n5QGr5QnD8Rnb+Snr/S3v/Snr/SHT1S3DxUXP1XHr5X3v6V3b8TnH9RWv6RGzvRWnaS2fIX3CxbnVrTEmQfnSwlonMsqXk08ns49zr5+bq6e7q5/Lt4vP24/n74fr/4v3/5///7P//8f3/9v7/+fv++vf9+vX89/T69fL47/D06+7x6O3v5uvm3eDc1tjKxsW0s6+eoZqOk4yJj4WHj4KPlYeJkICGjH4vLiwwLy0xMC4yMS80My81NDA3NjI3NjE6OTQ6OjI8PDQ+PjZAQDZCQjhDQzlERDpJRj1JRztKSDtMSThNSjdOTDdOTDdPTDlLSTpOS0JUUlNfXmZpaHhtbYVsa4praINgWWlZUVxPR1JIQEtIPkdHPUVFPEFAOjxDOjs/Ojc8NzQ8NzM9ODI+OTM+OjE9OTA4My05NC47NjA8OTI9OjM+OzQ/PDVAPDNFPjRHPzRJPzNMQDBPPzBQPy9QPy1MPyw8OyY6PSg/PCtBOy1CNzFBNjI+NDI7MzA9ODRCOzVIOTROMi5ZLClsLy6HOz2hRkWjOzCiMiSfMSCkOSelPCmeNySeOCKiPCakOyaqPSmxQS22QS+5Pi67PC2+Oi2+PC+yPC6sPC6pOSupOSurPCutPi2tPi2tPCyyPy2wOCi5Pi7LTD3LRzq8Niq6MibJOS7QNizUNivUOCzWOi7YOi/cOC7jNi/oMyzwMC30Liv0LivwMSnnMifdNibUOCLSNyHdOCTcNSPaOSfaPi/TPS7INinFOSzLQTfJPDXNPjjZRUHlS0nqSkrpQ0PsP0HrQ0PeQ0HVRD/NQj3CPTS2Oi6uOCqrOiqsOyusOCnARDjUTkXdSUXiP0DqPUH3Qkn/SFD0QUf0QEn5Q0/9R1T+RVX6QFX7P1j+QV//RWf/Q2n/Q2v/RnD/SXf/S3v/THz/Snr/Rnj/SHf/S3T7T3X/Wnz/YYD9VXbxQ2T7SWv/VHbcP1zNSWDYe4W4fHxhQzuPfG6ujoHVs6fz29H77OX68vD59/r39P307Pv66///6v//7P//7v//8///9///+////fz//vv//fn/+vj/+Pb/9fb98/T78PT58PPw5+rl3+HTz86+vbmtrqiipZ6do5mdo5ejq56eppebo5YvLiwvLiwwLy0xMCwyMS0zMi41NC82NTA4ODA5OTE7OzM9PTU/PzVBQTdCQjhDQzlIRTxKRjtLSDlNSjlQSzhPTThRTDhPTDtMSj5RUExeXWJtbHp6epKBgqGAgqiAgKZ7dZdya4plX3tZU21UTGRNRVpHQFBCPEhEP0ZAOz88ODc7NjM7NjA8OC89OS47OC86NzA5OTE7OzM+OzI/PTFAPDE/Oy9BOy1GPy9IPy5LPy9NQC9PPzBPPy9QPjBMPy9APSo/PixAPS4/Oy8/OzI+OTM9OjU6OTQ8OTREOTVNNTFWLStqKS2GMTieOUGsPkGmNy6lNyilOiiqPy2oPyygOSahOCOkOyalOiarPCmzPiy5QC+9Pi/BPTDFPTHEPjK9PzO2PTKyOS6uOCqvOSuwOiyyOiyzOSq2Oyy5Oy3EQjTLRTnIPjO+MSfAMijNOS/WNSvYNCraNi3bNy3eNy7hNizmMyzsMSrzMCz0Liv0LynvMCjkMibbNCTSNiDQNR/XMh7aMB/aNCTcPC7WPS/QOS7NPTLSRDrENS3FNjDKOzXYREDiTUnlS0neQz/WPTjTQDnOQTjHPjS+PC+1OiuwOCqvOSuxOy2sNCa9PzPRSEDYR0LfQUDmQET0R039TlXwP0XwP0X2Qk3+SFX+SFf8Qlf6QFj8QV7/QWP/Q2b/Rm3/SXL/TXn/T3z/THv/SXn/RHb/Tn7/Un3+S3L4TW//VnX/VXX3TWrwRmPvS2bSPlbhZHT+n6fTj45kOTJsSj6leW7QpZz11Mv/6eP/9PL//f///P/58//87///7///8P//8v//9P//9///+/3//Pv//fr//Pj/+vj/+ff/9vf/9fb/9Pj+8/f26+/s4+Ta1dLJxsG6ubSztKyxtKmwtqq2vrOwuK2stKkxMCwxMCwwLyswLysxMCwyMSw0My41NC83Ny84ODA5OTE7OzM9PTM/PzVBQTdEQThJRTpMRjpOSDpQSjpSSzlSTTpTTDpRSz1PSkRWVFVmZHF3eI2Hh6mNkLmPk8OPkMaOi8CHg7Z7d6lwbZppZI1fW35VUG5OSmFLR1hFQk0/PUI7Nzg5NTI5Ni84NSw4NSw2NzE3ODM4OTE7OzE+PC8/PCtCPSpDPClHPyxKPytLQCxMQS9NQDBNPzJMQDRLPjVMPzZLPjVGPDNCOTI9ODI6OTQ2OzQ2PTU3PDU+OjFINC1ZMi13NziUP0SmPkWpODqqOzCqPCurQC6sQS+pQC2lPCmmOyerPiqnOCStOie1PCu8PS7BPC3FOy7KPDDKPTPFPza+PjO6Oi+3Nyy3Nyy4OCu6OCu5Nyq7NyvHQTXNQzjGOS/BMSbGMynLNy3PNSvbNCvfMynhNC3iNizjNSznNSvsMSrwLyr1Lyz2LyryLynsMCfiMiPZNCHQNR/PNB7WMR7ZLx7YMiLYNinXOS3UOjDWPzbYRT3WRj7NQDfJPDXLQDnWS0TZTkfSRT7FOzHFPTHCPDDAPC+6Oyy3OSq0Oiu2PC25PzC1OS2/PDLJQDrSQz/bQ0LjREjtSk/2T1bsP0XtPkPyQkz7SVX/Sln9Rlj6Q1n7Q137QF/7QmL/RWr/SnP/Tnr/T3z/THn+SXb/Snf/VIH/VH39SnH5SW3/U3T/VnT4TmnrRF7kRl3qWGv/lqL/tbzznZ6OSEZrLimma2PNlo/zyMH/497/8fD//P3//f/89/7+9v//9v//+P//+P//+v///P///f3//fr//Pj/+/j/+fj/+Pf/9vj/9ff/9Pj/9Pj98fPz6erk3NrW0c3NysPJyb/KysDKzcLJ0Mi+yL+4wrk2NTE0My4zMi4xMCsxMCsyMSwzMi00My42Ni43Ny84ODA6OjI8PDI+PjRAQDZCQDRKRDhNRThPSDhSSztUSzpUTTtTTDxSS0FRTElZVl1saXx/fp2Mj7iWmcyZntiant6ZmNqUkdSMismGhb+BfrV4dqdua5ZmZYddWndWVGlNS1lEQUo+PD87Ojg7NzQ3NjI1NTU0NTc2NjQ4NzI8Oi4/PCtDPipGQCpHPypIQCtJQSxJQjBJQTRIQjZIQTlHQDpLPTxJOztDOTo9Nzc4NzUzODQvODMuOTE2PTU3NCtDMSddODB+Qz2WR0OePj+dNDCnOy+qPCuqPy2qPy2pPiypPiqsPyuwPy2rOCWyOSi5Oiu/OS3DOSzIOi7NOjDPPDLLPjXGOzTCOTHBOC7BOC7COS/COC7DNizFNy3RQznQQDfDMCbDLCPQNy/WPDTTMirgMyzkMSrnMivoMyrqMyvtMivwLyrzLSr2Lyr1LinyLynsMSjhNCTaNSLRNiDQNR/YNyPZMyPWMyTVMybVNSnUOCzUPDHWPzbsWVHhUkrTSEHMQzvKRTzMST/IRTvAPjG8Oiq8Oyi8Oiq5Oim3Oii4Oiu8PjC/QTPBQTbBPDPGPTfPQT3XRUXdR0jkSU3rTFDoQkbqQEPwQ0n5S1T+Tln8Slr8Rlz8Rl34QV35QmH9RWn/SnD/Tnf/T3r/Tnj/THb/UXv/Unn+T3b9T3L/Vnf/XXv/U2/uRF76VGzuUWT3ZHT/kp7/i5X0g4nHYGSnTU21amfOj4rvvLj/3tn/7+7/+vn//P79+//9+v/++///+///+////P//+/3/+/v/+/j/+/j//Pn/+/r/+/r/+Pr/9vj/8/f98fP57e/y5ubn3dvf2NLb187d28/g3tLf4dbc49vP2NPFzsk8OTQ7ODE4NTA1Mis0MSo0MSo1Mis2Myw3NC04NS45Ni87ODE9OjE/PDNBPjVDPzRKQjdNQzdQRzhTSjtXSztVTD1VSz9TSkNTSktdV2NubIKCgqaRlcWaoNqfpuqiqfGhpe+eoOuZm+WVmN2UldaQkcqJib2Cg7F6eaFycZFmY35YVmtQTlxJR1JGQ0xDQko/P0s9PUc7OkA7OTo8OTQ/Oy9DPS1FQCxGQCpGQStFQi9FQzRDQzdCQztBQz5AQUNCPEZEPkxDQU5FRU9DSE5BSUw+SEk9SERDSEFBPTJMOi5nRjeDT0GNSTyOPzKUOCmlPi+pPiyrPiqsPyutQCyvQC2wPy2yPSuxOCe2OCm9OSrDOSzIOC3MOC7SOi/UOzPPOjTNOjPLODHLODHMOTLNOjLMNzDLNi/TPDXVPjXSOTHMMijONCrYOzLaPDPXMyrkMSrpMSnsMSruMinwMSnyLyn0LSj2LCj3LSn1LinxMCnqMijiNSfZNiXTNyHPNyDUOSXVOCXTNiXRNCXSNCjTNyvSOC7QNy/jTkfoWFDnWlPaUUnMRz7ERDm/QDe5Pi+5PCq5PCa5PCi5Oie4OSi6OyrAPjDDQTTJRDvGQDfJQDrRRkPVSUjWSEfYR0rfSUvmRkjoQkTtREn1TFP8UVr7T137TF37S2D2RF73RGH5Rmb9SWz/TnX/T3j/T3j/UHn3VXrzVXb0VHb8WXj/XXv/Wnf7UWvySWD9V2v2VWfqTV72Xm3iS1rmVGHlVGHXWGHBZWbIg37lq6f/1NH/6+j/8/L/+Pn//v/7/P/7/P/7/P/8+//8+v39+fr99/f89/T/+vf/+/j//Pv/+/r/+Pj/8/P97vH66+7w4eTp3d3k2dXi2dLm39Xr59vx7eHx8eXs8+zb5uLO2dVAPTY9OjM6NzA3NC01Mis1Mis1Mis2Myw3NC03NC05Ni87ODE9OjE/PDNAPTRCPjNKQjdNQzdSRjhWSjpXSztYTDxXSz9USUNTSk1eWGZwbYiChKuRl8ucpOOjrfWnsP2qsf+mrPqhp/OgpO6fo+qdoeGZm9aVlsySksSJiLR5eZ9qaYtgXXxYVXBSUGhPTWVOSmNLR15GQlNAPUg/Oj4/OjZAPDFBPi9DQC9DQjBCQzNCRDc/RD0+REA8RUQ7Qko+Q1ZDSWFMUmhVXG5cYnJgZG9iYmpkYGFmWFdhSkRsRz6DU0WVWEaTSjeRQCuZPiuoQS6uQC+uQS2vQC2wQS60QS+yPSuwNya1Nyi8OCvCOCvIOC3NNi3RNy/VOC/YOzTSNzLQNzLQNzLRODLUOTTUOTTSNzLTNi/eQTrVOC/RMyrWOC/cPjXePTXaOTHcNS3nMivrMCnvMCjxMCn0Lyn3LSn3LCj3LCj3LSn0LynwMSnqNCnhNSfaNybUNyTQOCPONyLPOCXONyTPNibQNynSOSvRNyvONCrLNCvjTkfzZFzrYFnVT0bEQTe6OzK1OS24Pim4Pie5PCa5OyW6OSa9OSrAPC/EPjLKRDnKQTnORT/VS0jTTEnOR0TNRUXWSEfjSUnmQ0ToRUjyTVP4U1r5Ulz3T176T2H0SF71R2D4R2T7SWn/TnL/UXj/Unn/VHrwVXXvWnj5Xn39Xnz5VXD1TWf5T2n/WW7/W23/Y3TwTV74VWb0T2D8VWf1TF/kUl/AXl+7dnHXnJj6ycX/5eP/7ev/9PT///38///7///7///7///9/f39/Pr++fb9+PX/+PX/+fb/+vn/+vn/9vb88PD46ez05ubr3d3o2tnk2dPo3tXw6N358+X/+uz+/vL0+vbi7OvT3dxCPjVBPTRAPDM+OjE8OC86Ni04NCs3Myo2Mik2Mik3Myo4NCs7NjA+OTNBPDZFPjZJQDdNQzdSRjhVSTlXSjpYSztaTEFbTkhUSU1YUmBnZIF8fqeNksqXoOOeqvalsP+qs/+rsv+stP+ssvyqsfmqr/OorOypq+ifodqZmtKNjcGBf7F0cqFoZZJdWodYUn5YUXtZUXhWT3BNSF9DP00/OkA/OzpCPzg+PjRAQjVCRTo/RD08Qj46Q0I+Rkg/TFVFV29RZoNhco5pc450do2BeI2Eb4CAXmyKW2OSV1meV1WmVk2mTT+fQC6cOSSgOiSoPSmsPSquPyyxQC6zQC20Py22PSy5Oyy6Nie+NijENirLNy3RNy3WOC/aOTHaODPXODTYOTXZOjbYOTPYNjHYNjHaODPdOjPmQzzgPTbaNzDjQDf+W1L/bGP/XVTnPzbkMijtMinxMir0Lyn0Kib1KCX4KCb4Kyj3LSvzMCztMivjMSfaMCPUMSLUNCTTOijMOybKPCjNPCnPPCrSOizSOSvSOCzRNy3aQDjPODHcR0H0Y17lWFHLQjzFQDu3NCq3Oia2PCS5PCa6PCa9Oii/OivEPDDGPjLHPjTMQzvZUErfWFLUT0rDPzrAPzrPSETeSEfiR0XmSkvvUFTxUlfvTlbtS1jxTFz5Umb4T2b3S2X3Smb8TWz/UXP/Unb9Unb0V3buWHX1WHX7W3f/XHj/WnP/V27/Vmv/YnX9Vmf/XG3/W2zxRlj0RFj/UWXuVmXGZmeqaWXKj4vntrL40s//6+f97+78+Pf5/fz5///5///6//78/v3//vz/+/j+9vT++fX/+/f/+fb/9vT/9vb/9fX26Ojm2Njj1dTe0M3h1tDx59789Of++Oj//On///P6//no8fDY4eBDPzZCPjNBPTQ/OzI9OTA7Ny46Ni05NSw3Myo3Myo3Myo4NCs6NS89ODJAOzVEPTVIPzZMQjZPRjdUSDhWSThXSjlZSz5aTUVVSk5XUV9lYn95e6SKj8mUneKbpvWir/6rtP+stf+utv+vt/+wt/+vtvyvtPivsvWpquuio+OYmNiMismAf7t1ca5qZqFkX5lgV45gVopdVH9WUHRNSWJGQ1RCQUlBQUM8PDpBQj1GRUFDRD9BP0BEQkVPTVJXVmRjaIZxdZp/faKHfZ+SfZygfJilcIqkYHWsWWm2VmG6UVW4SEawQDSsOymsPCatPSeoOCSoNyWrOCauOSixOSiyOSi1Nyi4Nii7MyXCNCjKNy3TOjLZPDPePTXfPDXfPDXhPjnfPDffPDfhPjnlQj3oQz3nQjzmQTvlQDrmQjnkQDfcOC/UMSjYNivrST7/W0/xQDbuNizqKyPuKSP4LSn/Ly3+LCv2KCj6MC71NC/vNjHnNi7eMynWMibUMiXPNibLOifIOyfKPCjNOijPOSrQNynRNSnQNCjTOS/PNS3UPTblUErlVFHbTEjNQj+3MSi8Oyi7PSa9PCe+Oye+OSjAOCjCOizEOi/IPjTLQjjVT0bcV1DSUknDRD2/QzvMSEPbTEjfSkblTUzrU1LtVFfrUFbpTlbsT1r3Vmb4VWj5U2n6Umv+UW3/U3H/U3T/UnXyTW34VXT/XHr/X3v/XHb/VW/7Umn7UmX8VWb3UmL/Wmj/WmjzTl74U2P+WWnfU162YF+XXle2gX3ZqaXuyMX94d756en9+PX6/Pn5///4///3//36/v3///3/+/v/9/X9+PT++fX++fX+9vP/9/b/9fX26urq3Nvk1tPd0Mrf1czv5dv89eX/+ef//en//+/6//jo8e7b4d9FQTZFQTVDPzRBPTI/OzA9OS48OC07Nyw4NCs4NCs4NCs4NCs6NS89ODI/OjRBPTRGPzVKQjdORDhSRjZURzZXRzdXSjpYS0JXS0tYUF1iXnlzdZyFisKQmdyYpPCfrPqqs/6stv6vt/+xuf+zuv+0u/+1uf+1uf+vsvmsrPSjo+uZl+COjdODgMd4dbxzbbNrYKRpXZtjWpFdV4VWUndOS2hFRFZAQEw4NTxBPEBLQUJMQEJRPkJaRUpwV12CY3OXc5eke6euf6uye6O4dpzAcJPCY4PAVG7CR1zQS1zRSFDEPDy6NS64OSq1PCewPCWwOyewOymyOim0Oyq3PCy7PC3APC3EPC7ENirLOC7TPDHZPzXfQTjhPjfgPDPfOjTcNzHZNC7YMy3eOTPmQTvsRT/pQjzkPTXjPDTbNCzYNCvbNy3UMifMLCDWNirpRzr1Sz7yQDbvNC3wLSn2LCr6LCz8LCz4KizwKinsLyvoMi7jNS7cNCvYMSjVMSfRMyfNNyjLOinNOijQOinSOyrTOirUOCvUOCzRNCvWPDTVOjXVPDflT07tWVfZRUXCMy/AOyy/PCjAOyq/OinBOSnAOCjAOCrAOCzGPTPHQTbPSkHYVUvSUkfGRz7ARDrHRz7WS0TYSUPdTEnkU1DlU1TiUFPiTVPlTlfyWGT2Wmj9W3D+WnL9VW77UWz9UGz/UXD9R23/UHb/Wn3/W3v/VnL9VGv+V2v/XG37WWj4Wmj7YW32YGvtXWfvZm7sZm3JXF+gXVd7T0aYbWbBmJTdurbw1NH04N//9fT5+ff5//35///3//36/v3//////f//+Pn8+fT8+fL8+fT9+PT/+fb/+Pb57uzv5OLl2tbb0Mrc0sju5Nj99uT/++j//ef//+36/fTq8Oze499JRTlIRDhGQjZEQDRCPjNAPDE/OzA+Oi86Ni05NSw5NSw5NSw6NS88NzE+OTNAOzVDPzZIQTdMRDdPRjVSRTRVRjNVSDdWSj5YTUtYTldeWnFwcJaAhrqMltSVoemdqfWnsfmpsfmstP2wt/+xt/+yuf+0uP+0uP+vsfyrrfilp/KfnuqXluKMi9eCgc19ecV1bbZwZ6pmYJ5fWpBZWIRRUXVHR2NBPlE9NURIOEJUPUNgQEVuQ0qAT1WWXWSqZ3i9a4/JbprLb5jJaY/IYIPJV3jGSWfEO1XGMkjZQVDgRU3ROzzGNzHEPzC9QCyxOiStNiKtNSSuNSSzNSa2Nyi8OCvDOy3HOy7TQDbXQDfaQDbcPzbePTXeOTPdNi7bNCzTLijSLSfTLijYMy3hOjTjPDThODHcNS3cNS3QLCLNKR/ZNyziQjbcPzDQNCXLLh/pRjfzSTz9SD/8PDf0LSrxIyX1Jyn7LzLxLS7rLy7kMi7eMyzaMSrXMCrWLynTMCfTNyrSOSvWOivYPC3aPi/bPzDcQDPcQDPSNirmTELlSkXONTDfR0bzWlzfSUvVQT/IPC/EOyvDOirDOirCOirCOirBOSu+OSrCPDDCPjLIRjnPT0LOUETGSDy/QzfBQzfOSD/RRj/VSkXbUEvdUk/ZTUzaS03dTFHrWGDzW2f8YXH/YXX7WG31T2f1TWf/Tmv/T3X/Unn/VXf/VHH8VG39W3D/Y3X/anj/Z3X6Ym/1YW3tZGzjZmzZaGrOZ2i1ZmGNXlRlRzx/XlWpiIHNq6nmyMbv2tn/8/P5+Pb5/fz4///3///7/////v///P//+fr++/b7+/P7+vX++/b//fn/+/j+9PL47enq39ne1Mvd08nt5tb/+OX//uj//+b//+v4+u/q7+jj5t9OSDpNRzlMRjhKRDZIQjZGQDREPTNDPDI/ODA+Ny89Ni49Ni49NjA+NzFAOTM/OjRDPjhFQThLQzhORTZRRDNSRTJWRzRWSDtaTUdWTVJbV2hsa4t+grGKk86Sn+Oapu6mrvepr/mrsf2vs/2ws/+wtP6ws/+vs/2rrvuoq/ikp/Sgou+anOmTleKKjNmGhdGDf8l7dbtta6xkZZ5fYZJZW4RSUXNOSGJXRllfQ1FtQkyBRU+YTFasVV28W2TKWmjZUnDiUnXfVHXZUGzSSmLNQlfHOErFLj/UOEXjQ0vlRkrYPj7NPjbMRjrDSDa2Pyu3Pi24PS26PC29Pi/DPzDKQjTQRDfVRTrZRTnaQjfbPjXZOzLZNi3ZNSzaMyvZMirVMCrXNC3bNy7dOTDfODDeNy/dNi7cNSzWLybZNSvXNyvPMiPOMiPSOSnVPi3UOynYPC3nQzf4SkH9RD/5NjT1Ki32Ki32LjH3NjftNTXiMzDaMSzXMCrXLyzZMC3ZMCvjODHkOTHiOjHiOzLgPDDfPTDcPzDaPjHRNyvvV0z4YVrTOzbROzrmUFHcRkjmUFHPPDTKOi/GOCzFOSzEOi3EPC7DOy3AOyy+Oi2+PC7DQTPHSDnHSTvCRDa+QDK8PjDJRjzKRTzOSULVUEnXUk3VTkvTS0vXTE/pWmDwXmj8ZnL/aHj8XXHzUGXzTWX9Tmv/Vnr/VHj/UnL4VG32XXH7aHj7anf3ZXL8ZXTzX23sYGvqa3LfcnXDamaqZFyebGF9ZlZYSDlrWEqUfHK9oJzewsHu1tb+7u/79fX7+/v7///5///9/v///v//+///+v3//vn7/vX7/Pb//vn///r//vr/+/X/9/Lx6OHk3NHh2czw6df/+uT//+b//uX//+r3+evt8Ofo6eFRSz1QSjxPSTtNRzlLRTlJQzdHQDZHQDZCOzNBOjJAOTE/ODA/ODI/ODJBOjRAOzVCPzhFQjlLRTlNRjZQRTNSRTJVRjNVSDdZTENVS0xaU2NpaYV8gauJk8iTnt6apOumrPiprPusrf2tsP+usf+usf6tsP2tsP2prPmnqvekqPKipvCfo+2bn+mVmeORld6SktqJic98gMBzeLJvdaltcJ1pZ45qX315X3iCV2qOUF+iTlu7U17NVF3WUFfbSFLlQFHoP1LkQ1LcRFDWQ0vPQETKOTzJNDbkSkznSUrhQUHVNzTOOTXOQTjIRDi+PjHDRTbDRTbFRjfJRTjORjjRRzrXRzzaRz3WPjPVOzHWOC/VNCzWMyrYNCvbNCzaNi3bODHeOzTgPTTgPDPdOTDcNS3cNSzbNy3SLiTdOzDaPS7NMSLGLR3ONybSPSnNOibOOCfUOCniOi/zPTn/QED/PD7+MzfzLC/qLC7hKyrYKinUKyjXLyzeNDTkODjpOTnvNzXwNzTuNzPoNzHjNy3cNirXNSjRNSbNNSjnUEX/bWPbSEHINDLXQ0PTPkLqVlbZQTzSPjTLOC7GNivGOi3GPC/DPi/BPS67OSu7PC2+PzDAQTK/QTK9QC68PS67PC3ERDfERDnISD/QUEfTUkzQT0nSTkzVT07nX2PuYWf7aXT/bnr/ZHX1Vmr1UWn/VW//V3b/VnT6WHDxXnD0bnn2d4Dta3PeWGHxYG3xYG3sYm/vc33siIrMgXyqdGiZeWpza1hPTjpfVkeDcWevlpLcwL/v1dj86ev+9PX9+/z9/v/6/v/+/f///f//+///+f7///v5//X6/fb///r///r///j//ff//vb58Oft5drp4dT079z/++X//uX//+P//+j5+ury9Ofu8OVTTT1STDxRSz1PSTtNRzlLRTdKRDhJQzdFPjREPTNCOzNBOjJAOTNBOjRBOTZAOzdBQDtDQztJRTlNRzdPRzJSRjBVRjFVSDVXSz9SSEZYUl5qZ4J9gaeJk8SSntqYouekp/amp/qrqfyrrP6srf+trv6srvusrvuorPamqvSkqPGjp/ChqO6gp+2dpOibouaXnuKSmtuLk9KGj8qDjcKEiLeDgaiIeZqPbYiaY3qpWGm7UV/PTVngSVLoQUnqPUHpPTvjPjjdQznWSDrOSTjFRjPCQzDFQDHkVEngRz/aOzfYNjTYODjYOjvROTjINzTAOi++PC6/Oy7AOi7COCvDNyrGNCfGMibONCrQMyrRMyjUMynWMyrZNSzcNS3cOC/ePTPdPDLbOjDbOC/bNy3aNizYNCrXMynVMybTMyXQNCXPNibSPSnRPirKOSTAMhzIOibKNCXVMSfnNTH6PDz/PUD/Nz33MzfqLTHhLS7ZLS3XLy7cNDPjOTrpOz3wOT32Mjb4MDP0MDHtMS/kMSreMijVMSXPMyTJMSTRPTH6al/kVEzIOTXQQD/LOj3kUlPkSkjcQz3ROjPJNi7GOC7FOzDCPDC/PS+6Oyq8Py29QC68Py26Oyq6Oyi9Oyu+PCy8PjC8PjLARDjITELMUEjKTkbMTEnQTkznYGTsYWb4aHL/b3v/aHj3Wmv3VWr+WnL/WXP7XXTuYXLmanTrfYDxh4nod3naX2TxZ3T+bXzzZXXrbHf2kZXsop/ElIqijXxoalVIUTxXVUZ0aFykjIjbv77y1dn54+b/8/b/+vz+/v/8/f/++////P//+v//+P3///v5//X3/fP9//f///j//fb//ff///b/+e/17+Hy7Nz69eH//ef//eT//uL//+f9/uz5+uz39+tWTz9UTj5TSz5QSjxPRzpMRjhMRDdKRDhIQDVGQDRFPDNCOzFCOTJBOjJDOjNBPDZDQDlERDpKRjpNRzdPRzJRRjBUSDJVSDVVST1RR0VXUV1qaIB+gqiMlMWTndiZouefoPKjoPemo/qnp/2oqv+pq/6prP2nrfulq/WjqvKjp+6ip+ukqe2mqe6lqO2jp+6YoOiUoeWUn9+Un9eVm82alb6gjK+qg6ClZX+0XXDCUWPQSVfcQk7lPkbrPEHsPDzqPzjjQTTcRTTUSTTKSTPCRi6/QizCPy3iU0XeRDzdOTfmPj7qREblQETZOD3ONjXNQjvIRDjJQzjHQTXGPjLDOSzCNinCMifGMijLMyjONCrTNSzYNS7ZNC7bNC7bNCzkQjfdPTHZNyzaNizfOS3fOS3bNSnVMSXYOCjNMiDKMSHPOSjOOCfHNCLKNyXUQzDINybOOCrXNizeNS7mMy/uNTP2Ojn7Pz7/TEv6SEbyQkLsPj3qPD3nNzrlMjbmLDH0KzH4KS/0LC7vLy7oMSvgNCrZNSnTNyjGMCHALh/0ZFnrXVPPQDrUREPLOzvfTU3qUlHgSEXTOzbJNi/GOC7GOS/DOy2+Oiu9OyvBQC3AQS67PCm3OCW4OSa9PCm+Py61NymzNyu4PjHBRzrFS0DFSUHGSkLLSkXlYV/mXmDxZGr+bnf+a3XzXWnwWGX4XW36XnP1YnToZG/jbHLsfn/5jYv2hoXpcXP4cnn/eYb1YXHgWGb2iJH/tLTQrqKgm4ddalBEUjlRVD9qYlWciYLawL/y2Nn24OP/9Pf/+v3//v/9/P/+/P///f//+//++f37//r0//Ly/vL5//T8//b7/fL//fT///T///P79ef38eH++eX//ef+/OP+/eH//+r///H8/vP8/PJYT0BXUEBXTj9VTj5USzxSSztSSTpQSDtNQzdLQzZLQTVIQDNIPjJHPzJIPjJGQDRGQjlHRTlKRzhOSTZSSjVVSjRVSjRWSzlYTkRVTUtaVGJraIN7fqeJj8ORmdeYn+ejpPalovmiovyhovyhpf+iqP+jq/+krfyhqvWhqfGhqOylqO2qqe+tqfOxqfasqfigqfiXp/KSoeKWn9amo862nr65hZy4Z3q/TF3RRVLfPk3nO0fnPETmPULgQEDgQEDiPj/fPD3dRULJOjTKRDnKRjq6MSnbSkXnSUjpQ0XqPUHoOz/mPD/hPT7aPD3UPDvPQjvHPjbKRDvRTUHNSz6/PTC4Nim8OCu/NyvDNizINS3LMirRLyrULyvbMi/eNS7nQTXfOSvZMSTdMyblOSvnOy3fOCbVMh/PMh/MNB/KNSHHNCLHNCLKNCXNNSfPNSnKMCbNMynRNSnSNirSNCjVMybXMyfcNCngMinmMy7rNTLrMzPpLzLnLTLoLTTtLjX2LTP2Ky/vKyzsLy3qNS7jOSzZNyjQNCXDLRzEMyLnWEjpWU7LOzPfTknFNDHaSEjhT1DcSkrUQ0DMOzbIODDGOCzHOSvIPCvFPCrCOyi+OSa8Oyi7PCm6PSm6PSu3PCy0OCy1OzC5PTG7PzO7PzO+QDTAQDXEQTfvamH1cGnqY1/0bWr7cXHsYWT0Z23/cHn/bHr7aHjwZG/pYmnrZGrubG7ucW/ucW/7eXv/fYX5Wmz8Y3ffYnD7rK+2qpp9kXVdclFKWTpMUjhzblqllYjLt7Dt1dP/7vD/9vf/9/v9+Pz8/P7//////v///v/7//7w//Tl/unm++rv/+74//b8//T+//P//vH//fH/++7/+ur/+eb/+eP/+eH/+eH8+uX///X+//v///tZUEFYT0BYT0BWTT5VTD1USzxTSjtSSTpORTZNRDVMQzRLQjNKQTJKQTJKQTJJQTRHQzhIRDlMRjhPSDZSSjVTSzRWSzdUSzpYTkRVTE1ZVWNraIN7faaGjMCNldOWmuGfnuygnvKenvSen/mdov2fpv+gqv+hrPugrPSgq+2fp+iipeilpOqpo+2roO6kn++gp/eapvCcoeGjnNCxmMC/jarCcYTEVGLRQ0/iPEbsOEHvNz/qOj3lPD/cQEHbQUPgPEPaOT/aQUTLOzvMQj/KQD3BMzHlT1DmQ0boP0TqO0LnOD/iODvbODnVOjjPOzfURT/GPTXFPDTMRz7MTEHBQzW4Oiy3OSu5Nyq/NyvGNi3LNC3RMi7YMy/hNTPkODTkPjLhOy3eNinfNSbhNSfhNSfaNSLTNB/ROSTLOSLHOSXHOibJPCvLPCzMOCzONCrTNC7WNS3TNyvPNynLNSbHNCLLNCHPNCLYMiTeMibjMCvmLizmLC3mLC/mLTLoLjPsKy7tLC3sMC7oMi7gNCrbNSfVOCfSOSfVPy67KhnWRDXQPjHZRj7rVlDaQj/YQkHnVVbiUlLcS0jUQz7NPTXJOS7IOSvHOCjIOynEOyi/Oie9PCm9Piu6Py25QC+2Pi6yOiy0OzC3PTC4PjG6PzC9PzHBQjPFQzXraVzybWTnYlvwa2b1b2zoYmHxa2z8dHj/cX7/b3z2aXLtXWbqWWDxYmb3cXD+enj7dnf/eH75UmT+W3DkXW72pqmpppNqjGtadE9OXztSWTp1c1ypnY3WxLj24dz/9fH/+vr/+vv/+/z8/Pz8/v37//76/v/1//rt//Ph/+nh/ebp/+vz//H4//L9//L///H//e///e3/+un/9uX78+D68t389N/89+T7+/P8/Pr///1cUEJbT0FbT0FZTT9YTD5XSz1WSjxWSjxTRzlSRjhRRTdPQzVPQzVPQzVPQzVNQzdKQzlKRjtNRzlQSTdTSzZWSzVWSzdUSzpXTUNWTkxaV2JraYF5e6GFibmLkcuRltaYmN6ZmeOYmemane6boPSdo/efp/igqfSgqu+dqOicpOOcouCen+CeneGdmeObmeKWm9+amtqkldCxjMC/gqzHcpPJWXHHQlPXQUzfPkTjPT/lPT3lPD/jPT/hPkHhPkPgPEPXOD3VP0HOQD/KQz/DPDjEOTbpV1fgQkPkPkLoOz/jOTzcNjjWNjbROTbMOzbVSEHEOzG+NSvFQTXNSz7GSDq7PS+3OCm6Nim/NynHNyzPNi7XNTDeNzHmOTXpPTnXMyrXNSraNircNirdNSrdNynaOirXPizFNCG/NB+5NCG5NiK8OCm9OCm9MyjALSXjQDvlPjjePTPVPC7OOCnINyTINyLMNyPSNyXVMyTXLybZLifbLirdLy7bLy/cLi/bLCnfMCvgNS3cNSzVMybQNCXQOSbRPirUQS/CMSDnU0XSOzDaQTveQz/oSknwVFXtVVTnU1HjT03dSkPWQzvPPDLKOCvFNibENybANyW8Nya5Oie5PCq3Pi21PSyyPSywOiyxOy+0PC61PS+3PS65PzC+QzTDRTfcXFHqZ13kYVnwbGf2cG/nYWLsZmfzanHgUl7vXmv1aHHyZW3xYGf1Zmr5cXH+eHf6dHX/bnXzSl34UmjkW23xnKGjnIphgGBVb0hPZD1XYEF3d12tpZLh0cL/7ub/+PH//Pj//vr+//r7//z7//37//35//vz//bo/+7c/uPa+N7h+eHp/Obv/Oj2/ev9/uz9+un/+ur/+Of68eD06Njy59X269n48eH++vH9/Pj///tcUEJcUEJbT0FaTkBZTT9ZTT9YTD5YTD5VSTtUSDpTRzlSRjhSRjhSRjhSRjhQRjpMRTtLRzxPSTtSSzlUTDdXTDZXTDhXSztWTEJVTUtcVmBqaH55eZuChbKKjcKPlM6TldKVlNaVlduWmOOYm+iYnuyaou2bo+ucpeiYot+Wn9qVm9WUmNWTl9aSk9aRkNKFhL2Rg7alfbG3c6LIZo/TV3vVR2HUPEveQUrgQkPeQ0HgQj/hQUHkP0PnPkXnPUbjP0bWOj7RP0DQREPGQTy6NjHFPjrqWlndQULjQEPmPUDjOj3bODnTOTfQPDjOQTjPRTvCOi67MijAPC/HRTfERTa9Pi+4OSi9OCnCOSnLOC7SOi/ZODDgOTHoOzfrPjjYMSvZMircMyzdNSzgNS3fNy7bOS7WPS/JNyjGOinBPCu+PCy/Oy7BOzDFPDbOOTXrQ0DtQDzkQDfaPDHPOSrJOCXIOibJOyXPPCjQNyfPMSXRMSXUMSjWMyzUMSzRLyrTMirTNSzTNyvQNynNNSfKNyXLOifMPirMOyjPPCz0XlDgRjzSMy/SLizmQED7V1j/dXP/cm//amf2XlnnUEfVQTXHNSi9Lh7EOCfAOCi7OCa4Oym3PCy1PS2yPSywPC2vOy6tPC6wPC+wPC2xOy22Pi68QjPARjfLTUHfYFfiYVv0cGz4c3TmX2PkXWHmXWTWSFTnWWXzZ3L0Z2/2ZWz8a3D+c3b+dnb7cHP7ZW7xRFj0S2LlWGvrkpaglYNfellRbENTaD9cZ0V5fF+wqpTn3Mr/9ej/+fD/+/H+/vT9//f7//r5//r2//jy/PPq++va+N7O89LK68zP7M7X7tLg8Nbp89vy9+H29eH79uP89eP17Nvt4dHp3c3t4dHx6Nn89e389/H++fNcUEJcUEJbT0FbT0FaTkBZTT9ZTT9ZTT9XSz1WSjxVSTtVSTtUSDpVSTtVSTtTST1PRzxPST1RSTxTTDpVTThYTTdZTDlYTDxVS0FVS0lcVV1oZXh1dJN8fqWFh7eMj8KOkMOPkMiQks+QlNSSldyTl+CUmN+Vmt6VndySm9aMlc6HkMeFi8WBh8N9g8F+f7h9dJ+OcJSoZ4/BXITWTnbiQWPoOlXqOUvmQUfgRUPcR0HbR0PfRUXmQUfuPErtPUrmQknXPkDQQD/QSUXAPzmzMizIQzzgVVDcREPhQUPjP0DhPj/aPz3UQDzRRDvPRjzHPTLAOCq9NSm9OSq/PS2/PS29Oyu9PCnCOirHOyrPOy/VOy/bOC/gOC/nODPpOjXmOTXkNTLkMjDmMjHnMzLmNDDdMivUMCfLMSfLNy3IOjDENy7BNC3DNDDMOjvdP0DrODvtNzbkNzHYNSzMNCbGNSLENyPFOiXLPSnLOCbMNCbONSfUOCzUOjDTOS/QOC3QPjHKOy3FOCfENyXGOSfHPCnHPCnHOijNPi3NOirYPjLhQzrULy3kOjrfMTPfNTbXNTPWOzbeQz7lS0PqUUnqU0joVEjkVUfLPzDEPy6+PCy4PS23Pi20Py6wPy+uPjCsPC6sPC6sPC6sPSytPCyxPS63QTO6RDbGTEHdY1jgY13vb2z0cnLlYGPlYGXnYGf3a3b7b3r3a3btYGjwX2b9bHH/eXz/eXz6bXP4XmrzQVf0Q13oVWjmh42jk4Nnf11ZdEledUlod1CBiGazspbo4sz/+un//e3//u/9//L7//T4//T0//Ht++rk8uHY7tfF6Me75Ly63rq/3rzH4MDN4sPY5szj69Ps7tjz8N338t/z6tns4NLo2s3q3M/v4dby6N/x6OHy6eJbT0FbT0FbT0FaTkBaTkBZTT9ZTT9ZTT9YTD5YTD5XSz1WSjxWSjxXSz1XSz1YTD5RST5RST5TSz5VTDtYTTlYTTdZTDlZTDtXSz9VTEdZU1dlXm5uaoN1dJZ+faWEhbGGibSHibmKi8GLjciNjs+OjtSPj9WPkNOQlNOLkMqDisF7grh1fLJvdq1pb6tsapyAbIiTY3muWXbLUG/jQmTwN1b2NEz3OEjvQEXlRkLdSkPbSkXhR0foQ0ryPU7wPkzkQ0nXQ0PMQT7OSUS6OzSwNCzJSUDVTEbYQkHaPz3bOzvaPDvYQD3URT/NRzzLRzrAOCrBOCjAOCq+OSi8OSe7OCa9OijAOyjEOynKPSzSPC7XOy7cOC7hNi7kNi/oNTDpMzLoLi/pLDDuMDL1NDf1NzfuNDXmMjHaLirXNC/VNjLRMzLPLzHSLzTbNj3qOkTtMDbuMDLmMy/cMyzRNSnKNyfIOSjJPCjGOCTJNiTONijTOizaPjLdQTXdQTXYQTbTRzjJQTHCOyjAOSbDPCnGPSrFPCrFOCbMOivNNynNMCfmQzzbMi/vP0HjLzLaKizVMS/SNS7VODHWOTDSOC7MNSrGMibAMSPORTXGQTK8PS61OiqxOSmvOSurOiyqOiyrOy+rPTCsPi+sPC6rPCutPCyyPi+1QTLJU0fgZ17fZF/oa2nubm/mY2jwanH1b3j6cXv8c332bXXuYmv2ZG7/cnr/eH7/cXX6aXD4V2b5QVn0QFvqUWbhfoOsl4Z5j2ttiF1viVp5imCNl3K2t5jf3sL59N78+uX//+/7/+/1/+/v/+vn+uTc79nQ483F3sGw1q2o06aq0Kew06u21K681rHH2rrS38Hg5szo6tTy7drz6tnu4tTs29Hq2c/s29Pp2tPm2dHk189bTj5bTj5bTj5bTj5aTT1aTT1aTT1aTT1ZTDxZTDxYSztYSztYSztZTDxZTDxZTT9TST9USj5VTD1YTDxZTjpaTTpaTTpaTTxZTT9WS0VYT1JfV2JkX3NqZoFzb5B5eZ18fqR+gKmBgrKDhLyGhsaIh8uJiMyJiMqIiMiDg798fbV2d61wcadrbKRmZ6BsYI6CYHGVVl6zTl7SSl7sQFj3Nkv+M0b+OUPzP0LpREDhSELeSUPiRknpQkryPU7vPk7dQUXURkTIQT3JSEK0Oi+xNyzOT0bJQjzOPTjQNjTPMTDQNTHTPjjRRDvIRjnDRDXAOCjDOijCOiq/Oie9OCW+OSa/OifBOibEOSbLOinTOizZOSvdNyvhNSvkMyvqMy3rKivxKi34LTP8LzT/MTf/Mzf/Mzj9NTj5ODv1ODzyOT7yOUH0OUT3N0b7Nkj+NUXzKjT0LTLtMTLjNC/ZNi3QOCrOOyvOPSzLNSbROCrZOy/fPTLiPjTkPTTlPjXfQTbZSjzPRzfJQTHEPCzCOSnCOSfGOCrIOSnJMifTOS/hQDjrRD7eMC/gLi7rNDboNjbYMy3VNy7XOTDXOjHVOzHSOzDNOjDJOy/WTD/MRjq/QDG0OSqwNimsNiirNyqpOCqsOy2tPS+uPjCtPS+rPCurPCutPC6xPTDAS0HaZFreY17oa2nwb3PqaW71cnr8dn/uZnD3b3n5cnn2anP+bHb/d3//dXz5aG/5Y273UmL+Qlv3PFnqS2HddHu1momNnnp9mGt7l2aClWiRnXWsso7LzK3g4MTp7NHu9t7l89nZ7dHP5snF3sC81be0y66qyKSawZSWwo+Zw5OhyJmny52sy6G1zqfB0rDO2bvZ3cTl487s5dXv4dbr2tLn0s3j0Mrgz8jazMPVx75bTj5aTT1aTT1aTT1aTT1aTT1ZTDxZTDxaTT1ZTDxZTDxYSztYSztZTDxaTT1aTD9WSj5WSj5YTD5ZTjxaTTxaTTpaTTpaTTxbT0FXTURXTUxcUlpeWGZiXXFqZn9zcI13dpZ4eJx8e6eBfrWEf7+FgsWIgsiJhMeCfb9/ebd6da14cad1bqRzaqFwZ6B6YYuEUVqZSEWzRUjTSE/uQk74Okb+NkH+OUD1PT3uQT3mRD/jRULkQ0joQUvuPU3rP03YP0LRR0TFQTzDRz+yOS6zOi/RVUvDPjXJODPHLyzFKibILyrNOjPNQznDQza8Pi/AOyrEOynDPCnBOifCOyjDPCnCOyfDOCXENSTKNyXUOCnZNyrdNSrhMyrlMynqMir1MzP/NTj/ODz/NDr/LTL/KC3/KC3+KzH8LTP2KTDyJjH3KTb/LD//KkH8IDnzGi/2IjDzKC7tLDHmMC/aMSzUMyvRNSnQNirUNivdOTDmPTbrPjfrOjToNzHoNTDiOTLfSD3XSzzTRTfLPS/ENijCMyXINinPOC3ONCrUNi3mQzzgOTPgMjHSICDsODnlNjPVMSjSNCnSNCnPNSnONivKNirINSvFNyvjWU7YUkbKSDu+QDK3Oy+1Oy61PDG1PDGvOS2xOy+xPTCxPS6vOyytOSqtOSyuOi2xPDLQWVHcYl3scHD0dnnubXL1cXz2cn3/eoP/f4n/eYD0aHH3ZXD/cXz/dX//a3T4Xmr2T2H/QV73OFfpR17bbnS6nYuZqYSCnm59mWaAlmeNnHGhqYK0upbIza3V3L3M2bvB1LSyzKmnwp+evJiatpCWsoyQsYaJs4GGtX6NuYSVwIucwo+fxJGoxZmyyKG+zqrJ0rXa2cTm383q3tLp1s/hzMnbxsPUwbvOvbXIt7BaTT1aTT1aTT1aTT1aTT1aTT1aTT1aTT1YSztYSztYSztZTDxZTDxaTT1aTT1aTT1aTD9aTD9aTT1bTj1dTT1eTzxcTzxcTz5ZTT1ZTENXTEhYTk9aUFhdVWJgWWlhXHJqZoFva45zcJt2cad7dbODfsGKg8mKg8eIf8CKfryIebKDcqiGcqeNdKuHbKOGXISQSEykQjm2QTrNQ0DeQD/oOjv0PD7/REX3PjzzPTzsPj3qQEHrQknqQ03rQU7jQUzQPj7FQDm+Pza3PjOwPC+yPDDARDjSTUTHNjHUOzbNMi7MMy7WQzvIPjO1Nie7Piy7NiXBOifDPCnCOyjAOSXCOSbGOyjHOijLOifQOSjWNijYMiTaLiLgLyXsNy71PTX1ODL3NDD3MC34Kir7Jij7JSf7JSf7JSf7Jir3ISn4Ii7/Jzf/KD7/ITv/GDb9FzH/JzjvIyzmIyvjKy3dLS3UKyjSLSncNDHiNjLoNjTuNjbyNjXyMTLvLi/uLCzlLyzcOTLROjHSOTHsU0u8IxvEKyPfRj7ILibNLijePDfoRUDiOjfYLyraLiriNTHlPDffPjTVPC7PNSnLMybMNSrNOy7LOzDFOC7sYljgWk/IQzq5Niy6Oi+4OC2xMye0NiqwMCWwMiauMiavNCWwNieyOiq0PC6zPTGwOjC6QzvWXFfscHDxc3b2eHz7eYP1cXz/fIT9d4D6dH38c3v/cn7/cn3/bXj/Z3P8YG70SVz/Plz/PlvkQVbUZWu0lYCSoXqDnW19mWZ+lGOHl2qUn3eepoGgqIOcqISSo3+Ko3yAn3Z6mnF5mm98nXKBoHaDpHWCrXeDs3mLuH+RvISTvoaXvoecvoyivZCnvJOvvZq+wqfPzLnf08fj0srcx8TUv7zMurbBsqu5qqVaTT1aTT1aTT1aTT1aTT1aTT1aTT1aTT1YSztYSztYSztZTDxZTDxaTT1aTT1aTT1aTD9aTT1cTD1dTT1dTjteTzxcTzxcTz5dUEBbT0NbTkZZTkpaUFFcU1hfVV5fV2ZkXHRpYoNuZ5Fxap14cKyAebyHgMSKgcSPgb+QfrqNdKuMbqKXcaShdaiaap6ZV3udPUGqNSuxNSvCPDPTQDjdPjjoPzrzQT31PTv1Ozz0O0DxPkLuQEnoQUniQEvaQUbHPDm8PDO2PDGxOy+rOiyuOiu9QTXQSkHaR0DcQT3UNjPQNTHVQDnNQzi7OSuyNSO9OCfCOyjEPSrEPSrEOyjGOyjHOijKOSjPOSjPNibUMiPaMiXjNSrqOC7vODDwOTHnMSbnLyXqLiXvLCb2Kyf7Kyn+LCv/LS78Ki36JSv6JC7/Jzf/JDv/HDf/FDP8EzD1HjD2Ljn1MzzlKjHbKCzcLjDeMDLbKy7xOj70Nz33NDr2Mjb2LzT4MDP5MjX0ODfbMi3aOzXXODLkRT/kRT/OLyvRMi7BIh7UNTHhPzroRUDgPTjYMy3ZMizdNjDdOjHUOi7POSrJNSfHNSjIOSvKPDDKPDLGOS/tY1nhWE7JQDi6NCvCOTHDOjC/NizCOS+/NSu+NCq9NCq7NSm4Nim1NSiyNyiwNim0OzC7QjnTWVTobGrvcXT2eHz+fIT4doD+fIT8eYH5dn7+dX//c3//cH3/a3f8ZHH9X272SV3/Plz/PlzpQ1nTZWiujneJmG96lWJ1klx4jl1/kGOKlWuNmHCLlXCFlG1wh11siV1oiVxnjV5skGBxlWV5m2l6n2uBrHSEsXaKt3yNu32QvH+TvIKWvYabu4mbtYahs4uttpe+vajPxrfYx7/WwbzPvLjGt7S7raqypKNcTDxcTDxcTDxcTDxcTDxcTDxcTDxcTDxaSjpaSjpaSjpbSztbSztcTDxcTDxcTDxcTD1cTD1dSz1dTT1dTjteTzxeTzxcTzxfUkFdUUFcUERbTkZaT0tbUE5dUVNdUlpfU2djWHZoXYVrYpFza6R/drWGfb6JfbuXhb+ZgLebdqmecJ6udaK6dqW1aZiwUnS4PES+NS26NCvAPDDLQzfTRTnbQzjkPznxPTz3Oj75OkH2PUXvQEfmQUjZQEXPQELAOza4OTCxOSutOSqpOCitOSq7PzPPRjzZRD7XOTbZNzTaOzfcQz3dT0XOSDy1MyO+OSjBOifEOynGPSvJPSzIPCvJOinMOSnPOCfPMiPTLyPfNCruPTP0PzbxOTHpNCvgNCbeNCXiMiXlLyTrLCTuKyXxKyjyKyjzKy3wKCvyJi/4KDX+JTj8HDT8FjP4GDP0JTfyMDvzNT/yOUHwO0TwPEXpNT7kLDbwMjzzLzv2Ljn2LTf1LjP1LjHzLzHtNDLbLyviPTnaNjTfOzn/bWrlQ0HRLy3OLyzZOjffQDzgQTvbPDbVNy7WNS3VNCrSNirINifDNiXCNifEOCnFOy7GPDHGPDHFOzHrYFnhVE3JPDO/MCjLOzPRPjbOOzPSPTbYPTjXPDfUPTbPPDLJOzHCOi67Nyq2Nim5Oy+8QDbPVE3jZ2Xtb3L4en7/gYj7fIP7fIP7eYH7eID/d4H/c4H/bn3/Z3b7YHD8W231R17/PFr/PlzsRlrOYGGefmV2hVpphFFohU9tg1J0hVh7iF19iF54hFxxglhgek1ff1BhhVVljVlulWB1nGd9oGp+o22DrHKEsnSItniLuXmLuXmNuXqRun6UuoGTsX+VrICbqYaprZK6taLHua7LuLLItrS4rKyqoaKgl5pbSztbSztbSztbSztbSztbSztbSztbSztaSjpaSjpaSjpbSztbSztcTDxcTDxcTDxdSz1dSz1dTDxeTT1eTTteTzxeTzxeTzxeUUBeUUBdT0JbT0NcTkVcT0dcT0ldT09eUF9iVG1kWXtpXolwZ5x8dK2Fe7eIe7OZhbilhbSvgKq4eqHGeJ/RdZzKZIzGTWzcRlLfQUDVQT3PRTvMSDvNRzvTRTneQTruQEH1PEH6PUT4P0fwQUjiQUbSQEHGPzy/Pza2PDGvOSurOiqqOSmuOCq8PjDORDrVPDfVMzHgOznlQT/hRD/oU0zfVUq/OivBOSm+NyTANyXEOynJPSzKPSzLOSrOOCnONSfSMiTZMyflOS/xPjf1PjbwNS7kLybgNineNingNCrjMSfnLinqLSnsKijsKirqKSzoJyzrJzHyKjf2Jzv3ITn8Hz77JUH7NkjkKDbnLzv/UFv/YGz/UFzyPEnzOUfoKTjtKjjxLTn0MDrxMjfqMDHhKyrXKCXYMC3aNzLUMi/lQ0D/c3D1VlPdPjvlR0TbPTraPDnVOjXSODDRNy3QNirNNCbGMyO+NSO5NiS7OCa/OyzAPC+/OS3AOi/FPDLlWFHcTUfKNzDHMCnXPDfeQTraOzXfPDXnPjnpPTnmPznhQDjZPzXPPDLIOi7BOS27OSy7PTHLTkjgY1/sbm/6fH//hIj9foX4eYD4eYD8eYH/eIL/dIL/bn39ZXT5Xm73VmjzRVz9OFb/PFruSFzHWVqKbFJjckdcdEJceUNkeklsfVB0gVZ2g1hzgllvgVdth1psjlxvlWJ1nWh7pGyBqG+EqnGFq3CFrXGFsXSItHWJt3aJt3aJt3aLuHePuXqRtHyPq3uSpHybpIWtq5a+sqTIt6/HuLW0q66hnqWXkplbSztbSztbSztbSztbSztbSztbSztbSztaSjpaSjpaSjpbSztbSztcTDxcTDxcTDxdTDxeSzxeSzxeTT1eTTtfTjxeTzxeTzxeTzxeTj5eTj5cTz9eTkFdT0JeUEVeT0piTlliUWRjVHFkWn1sZZF4cqJ/d6iDdqSUfaeshqvCianOgp7ad5ThbInbWHfaRF/zQlT6RFDvSlDhSUjQRT7LRTzQRjzZRD7oQkLwQEP1QEf1QkjtREffQ0TPQT3CPze/QDe1PS+uOiurOiqqOSmuOCq7Oy7MPzbhRkHiPTvuQkLrQUHeOzbjSkLmWEzVSz7IQDK/Nye8MyPBOCjIPC3JOirLNynQOCvOMCXXMyngOC/pOzTtOjXtNjDrMCvlLCfjMCzjMS3nMTDsMzHzMjX2Mzf3NDj3NjvsLTXqLDbtLj3xMEPzLUb1KEb9K07/M1L0OUzlMz/wQE3/X2z/a3n/V2b1Q1P1PlDuM0TtM0HtMz7pNjzjOTnbODPONCrHLyTLMirHLijQNzLyWVT2XFryWFbbQT/iSEbcQkDUPDfONzDNNi3POC3POSvKNyfCNSO5OCOzOSS1Oii4PS25Oyy2Nim8Ny7GPTXbTkfZRUHONTDQMS3hPjnnQDrjODHnNTHrMjDuMjHrNTLnODPhOjLYOi/QOS7IOi6+Niq6OCvISULcX1nrbmz7fYD/hYn9f4P1dn32d378eYH/eIL/c4P/a339ZHb5XnD0U2X0Rl39OFb+PVrvTF3AVFJ6X0JXaDxZcT9bdkNmeUtuflF0gVZ4hVp5iF93jGF5lWV4mmh6oG18p3GBqnKEq3KFq3CGqW+HrXKIsHSJs3SItXSHtXSFt3KJuHSLuHeQtnuOrHiOo3iZpIKtrZXAuafOwLXSxMG8ucCoqracnKhaSjpaSjpaSjpaSjpaSjpaSjpaSjpaSjpaSjpaSjpaSjpbSztbSztcTDxcTDxdTDxeSzxeSzxeSzxfTD1eTTtfTjxeTzxeTzxdTjtdTjteTzxfTz9fTz9gUEBhUUFiUEZiTlBjTl1fUGVgVXNnYYV0b5d7dJ19cZePdpaug5/Mi6HbgpbmcoXrZHXpUGTpO1L5M0z/PFH7RVLpREvVP0DOQD7RQz/WRULjRUboQkTuQUXtQ0bnREXaRUHLQjq/PzS7PzOxOy2pOCioOSiqOSmwOCq8Oi3KOzPoSUXpPz/rPT7lNzjaMi/eQTruWlD0aFvaUEPJQTO+NSXCNifHOSvIOSvLNyvSOCzRMCbaNi3mOzTpOzTqNDDoLyzqLSvrLS3zNDn1Mzv4Mz38Mz3/MT7+MD39MT35MT71MEHyMUL0NEv1NU71ME72LU//MVj/Pl/mM0j5T1z/YW7/X27/V2b7UGD0RFjpOErzQVHqOkfdMjrSLzLKMi3COC29Oyu8OirEOi/AMijZSkL6a2PdTEfhUEvPOznPOzngTErUQDzKNzDKNy3OPC/NPCvLOinEOyi0OyatOiWvPCmzPi2xOSmvMye6Oi/KRDvWR0HYQz3UNzLXMi7nOzfsOjboMi7tMi3yLC30LCzyLi/vMzHoNzHiOjHaPDHSPjLCNim6NCnFQjrXWFLnamj6fH3/hon+gIT1dn33eH/9eoL/eIL/cYH/aXv7YnT4XW/yUWP3SWD/Olj9P1vwT1+6UU5xWDpTZjhddUVhfElugVN2hll7iF1+i2CBkGeCl2yAnGx9n218pG99qHCAqW+Cqm6DqWyFqWyIq3GIrnGIsHKGs3KEs2+DtXCFt3KJuHSLtXaJrHSOpXeaqISwtJnIw6/YzL7b0s3CwsyrscGbobFaSzhaSzhaSzhaSzhaSzhaSzhaSzhaSzhaSzhaSzhaSzhbTDlbTDlcTTpcTTpdTDpeSzxgSjxeSzxfTD1eTTtfTjxeTzxeTzxeTzpfUDtgTzthUD5hUD5hUD5hUDxiT0FlTU1kTVdgT19hVW1nYoB1cZJ8dpiAc5GPdY6tgJTOhpTffofucXn5Y2z6UFv6O03/Kkb/MlH/PFPxPE3gPEXXQEXVQ0TUQkPcQ0XgQkPkQUTiQkTeRELUQz7JQDi+PjO4PjGvOSuoNyepOimtPCq0PCzBPTHPPzffPTrlOTnjMDPiLzLgNDLbOTTmTUX8bGHyaFvZUUPGPC/GOi3IOi7JNyrNNivVOC/VNCzeNy/mOTPoNjLpMS/oLyzuMS/1MTX/MkP/MEX/LUb/KkL/JUD/Iz38IDr2IDr3J0H1K0X1Lk31L1DzK1D0KVT/MmD/QWjzQ1j/YG3/aHX4VmXtS1rxTFzrQlXaMkPrQFDdN0PJLTG6KCixLiSrOCalPyaoQCe4Py68OizdWU3hXVHMRj3NRD7BNjPJOzfkVVHVRkDJOTHHNyzJOizIOSjIOSjEPSmxPyemPCaoOyasPSqrNyisMyi8PTTTTEbWR0HdRUDbOTbcMzDpNzPsNTHrMCv0MS39LC//Ky36Li/0MS/tNC/mODHfOzHYPjLJOS69MyjAOzLPTkjhYV73eXr/iIr/g4f5eoH7fIP/e4b/eIT/bn7+ZXf3XnD1WmzrTGD1SWH8OVf7PVnuTV2ySkdoUTFRZDZcdERmfk51iFt/jmOEkGiGkmqIl26JnnOIpHSEpnR/p3J9qHB/qG6BqW2DqWyFqWyFqG6Hq26FrW+Fr2+BsGyAsmuCtm6Ft3KHs3SHrXSNp3ecrIWyuZrIxq/Xzr3Z0sy7v8qkrL+Smq1bSjhaSzhbSjhaSzhbSjhaSzhbSjhaSzhbSjhaSzhbSjhbTDlcSzlcTTpdTDpdTDpeSzxeSzxeSzxeTT1eTT1eTzxeTzxcTzxgUT5hUj1hUj9iUT9iUT9hUD5hTztiTD5oT0tnTlJiUFxjV2tqZn91dpR9fJyBeJeRepargZXGhJLafYXwdXr9a2z/WVv9REz+L0n/NVL/PFXzPE7pP0zjQ0vdQkjWPUDbQUPcQEHeQEHbQT/YQz/QQTnHPjS9PTC1PzGsOyupOCitPCy0Py67QDHKQTfYQz3ZNzThODXeLi7iMzDmOjbTMCfRNSnrVUf/d2rrW1DRQzfKPDDLOzDJNyrNNivUOjDaNzDfODLlNjPnMzLqMDHtMTL0Mzb9NDz+JTb/Izn/Ijn/Ijn/ITj/Hzb9HTX4HjbvGzLuHznwJULvKEfuJkrxJ03/M1z/RWj/YnX/YGz3V2PxUV3yUF3vTVriQE3UMj3aPUTMNzm7Ly6uLyimNSeiOyibPyacPiWqOSeyOCvRVUm7OzLEPzi+NDG9Mi/OQ0DlV1PVSEHIOTHENirFNijENSXGNSTDOiixPCinOiaoNyWtOSqsNCavMSXCPzXbUkrZSUHhSELeOzbeMi7qNDHtMS/vLSv8MjL+LC/9Ky75Ky3zKyvtLSrmMSrfNCzWOCzRPTG/Mii8Ny7ISULZXFjzd3f/iYv/h4r7gIX+f4b/fYj/doT/anz+X3P3WGz2VGnqRFz1RF71NlXxOlbgTFqlSENeSy1NYzVVbz9ifUp0jFyAlmeHmGyIm26KoHKLpXaMrHqGq3eBqnJ+p218pWl9pWeBpWeCpmmCpWuCqG2Dq22CrGx/rmh+sGmBs2qEtm+JtnOJr3KOrHiZsIStu5i/xanLyrXLzcK2vcWeqrqLl6ddSzdcSzddSzdcSzddSzdcSzddSzdcSzdeTDhdTDheTDhdTDheTDhdTDheTDhdTDpdSjxdSz1eTD5cTDxcTDxbTj1dUD9eU0FgU0JfUj9gUEBiUUFjUkJkUUJkTkFkTEJqTUloS01kUFlmW2xua4Z3e56Aha2JiLKPg6mlh6m+iKDQgpLieX7wc3H6amL/YV75SlfxPlHrOkzuP07vQ1HqQEvmPEflPkbhPELfPD/aPD3WPDrPPjnKPTTBOzC4OiynNiavQTCtPCysNii/QTXMRj3MPTXQNzLaODXcNzHeNS7eNi3eOCrdPCrZOifTNiXZOzDwU0zyWk/ZRTnHOCrNPi7UQjPSOi3UMyvwR0LhLy/uNTrzNj3uLDf/Qk3xJzP6JjL/KTL/KDL5HSf9Iir/Jy/+Jy/wHSbwHin5KzfqIC7sJjfxLUHnIzv/WHLnLUT/XWz/X2n+WmP5VVz1UFfrSE3dP0DOOTXLPjfEQTe3PzGmNyaZMiGZNiOaOyefPCmnOC2uNy/CRT+/Oze9MzHENjTFNTTUREPbTEjaS0XRRDvIOjDENCnHNSjLNCnFNSq8PC+zOSytLyOrKB6zLSTDOS/SQzvYSD/kUEbfRT3aNzDdMCrnMCzyMjH5MTP9MTT3LzH2MDH2MDHzMC7yMC7tMi3mNS3dOS/VPTC+MiXAPjG5PTPWX1npc3H/j4/7hIb7h4r/hIz/eIj/aH3/X3f/W3X/VW/4TGb4RWPxOln0O1vmP1nbXWmLQDtWRi1MXjZZdUJnhk13ll19nGN/nWeAoWqDpm6CqG+Ap25/pm1+pWx9pWl8pGh9o2Z/o2V/o2Z+pGt/pm2Bq2x/rGt+rWd/rmaBsWeDs2mHtW2LtHKNsHaOrnyZtImnvZmxwaSywa6msrCNmJ56hYtdSzddSzddSzddSzddSzddSzddSzddSzdeTDheTDheTDheTDheTDheTDheTDheSzpcSzteTD5fTT9eTj5bTj1bTj1cUT9eUkJfU0NdUUFdT0JfT0JgTkRiUEZjT0hlTkhpTUpnTlFkUl5nX3RubpB5fqiAh7uHisGelcqji7urf6O5eJDTeYPqfHv0dmr2aWD4XWHzT1rsRlLySFP4SVb1RVDvP0rrO0XkOT/gOjzaOjrVPTjOPzfHPjTAPC+3PCyrPCuqPy2pOCiyOizBQTbFPDTHNjHUPDfSNTDWNS3XNSrYNCjaNybbOibbOyXaOSfdNi7mQTvrTUThSTzQPi/HOCjKOCnTOy7eOzT2SkbkMDHwNjv2NkHxLjz/QE7vJzTzJCz3JSj7KSz9Kyz8Kiv4KCj2KCj3KyzvJCftJSjrJi39O0TZGyfwNEP8QVLYJjb/anX/Ymr+WmH8V130T1PlQkPXPDjRPja+OCy/RDW5SDapPiyZLx+QKRqPKBmSKBueLSWwOjbRVFDOSEfDNTTGNDXRPT3rV1XXRkHWRz/QQTnHOS/GMynKNizQNy/ONzDHPTPCOTHCNS7DMi3JNC7RODPYPzneRT3kSkDeQTjaNi3dMCrnMCzyMjH7MDP7MDP0MDLzMTL0MDHzLzDzMC7uMS3nNC3fOS3XPTG/MyS+PC+3PTLTXlfpdnP/kJD5hYj4hYr/gor/dIX/Znz/XHb/WHT/UW/+SWj8QGHzOlrxP1/hSWDBU1x7PzdSRi5NXzladkNlh0tzlVl4nF93nWJ7oWZ9pWl9pmp8pWl8pWl8pGh7o2V7oWR7oWR9oWN+omV8o2p9pmx9qWx9qml8q2V9rWN/r2OCsWOFsGiHsmuIr3CIq3OLq3yQrISQqoeMoot4h4BkcHBSXl5dTDhdTDhdTDhdTDhdTDhdTDhdTDhdTDhdTDhdTDhdTDhdTDhdTDhdTDhdTDhdTDheSzpfTj5hUEBgUEBdUD9cTz5bTz9bUkNbUUVbUUdcT0dcT0lfUE1jUU9mVFRnVVVnVVVnVlxoXW5saYZzdqN8g7qCisuKjdSYkdegisqqgrS5fZ/PgJPkhIbuf3bzc2r8Zmj3U1ztR1HwRk/2SFL3RVHyQUvuPUXkNz3gNzrZOTnUPDfNQDfFQTS+PzC2Pi2tPi2qPCurOiy4QjbHSD/AOzK7MCnKOjLNNi/QNi7VNyzYOCzZNyjZOCbcOSbgOirdNC3bNC7iQTnpT0PeSDrINSXIMiPZQDLiPjX1SEToMTPyNTv5N0D4NED/RVP4Mj/wKTDrIybsJCf5MTP1LS/uJibsJiX1MTLrKSr2ODroKzHiKTHrMz3/Ul7vPUv/XGn+XmbxVlzuT1TwTVLqRUndOjvVNzTUPznANizAPjG8QjWzPTGsNy2lMymhLCOcJyCaJR6pLyrHRUPCOjq8LCzIMzXXQUL0Xl3RQDvSQzvQQTnLPTPMOS/UPTTaQDjbQDvbQDzYPTvdPjvjQT/kPj7gOjrjPz3rSUTgQjndPDTZNSzdMivnMS3wMzH1MTL4MDL0MDL0MDL0MDHzLzDzMC7uMS3nNC3fOS3YPjLANCW6OCu1OzDQW1Ttenf/k5L7h4r6g4n9fon/coL/ZHn/W3T/VHH/Tm3/Rmf7PV/0PVzuRWLfVGeiQkZwPDFRSTJQYjxdeEVmh05yk1p1mF50ml94nmN7o2d8pGh5omZ5omZ5oWN4oGJ5n2J5oGF8oGJ6oGN6omZ7pGh7p2h7qGV7qWF7qWB9q2B/rmCHsmqKtW6LsnOJrHSGpneCnnV5k25vhmxTZVlBUE0yQT5eTTleTTleTTleTTleTTleTTleTTleTTleTTleTTleTTleTTleTTleTTleTTleTTleTDhgTjphUDxgUT5dUD9aTj5ZT0NYUEVYT0hbUU9fVVRiWFllWF9pWWNsXGZrXmdsYWlsZHFva4JydJp5frV/hsqFjNqMjuGOh9efi9OtisSzgKm9eY7Me4HegXrygnf/c3L/Y2f5VVz0TVT1R1D0Q03yPkfvPELlNjvgODjbOTfUPDfNQDbFQTS8QTG3Py6rOiqtPi2xPTC8RjrMUkfHSD+6NS66MSnIOTHNODHTOzDZPTHbOy3ZNifcNibgOCvgNS3bMivgPTTsTkLjSz3SOizROCrgQjbfNy7wPjrpLzDwMTb3NDz8OEL/Tlr/TFX9PkXyMzjiJCbtLzHqLCzwMjLoKirrLy7yOjrRGhzmMzfdLDLoOUDwRU7/WGPyTlfYPUPaQUThQkbhPkHeOT3cODnYODjTOTfJODPCOTG9OjLAQTrNTkjWVlPQTk7DQ0CyNzK2OTXPS0nZTUzjUVLvWVrqUlHxWVbJNTHOPjbSQjnQQDfTPzXZQjngQzziQD3pP0DnOD3sOT3yP0PvOj/oNTjsPj32TUreOTPbNjDaMyveMyzlNC7sMzDyMjH0MDH0MDL2LzL2MDH1LzD1Ly7wMC3pNC3gOC3ZPzPCNie3NSizOS7LVk/vfHn/k5L8iIv9gYn+eof9b3/8Y3f/WHH/T2z/Rmj/QGP5Olz0P17pS2TYWmiFNDNmPC5WUDhXZ0Nhe0tqiVBzkll0lVx1mF53nWJ5oWV6omZ3oGR2oGF3n2F2nmB4n2B4n2B7n2F6oGN6omZ6o2d6p2Z6p2J6qGB6qF18q11+rV+GsmeLtG6Ms3SKrXOGpnWAnXF0jmlpgGRRY1VEU0w4R0BeTTteTTteTTteTTteTTteTTteTTteTTteTTteTTteTTteTTteTTteTTteTTteTTldSzVfTTVgUDlfUDtcTz5aTkBYT0ZYUUtZUFFgV1xnYGhuZnNzaHlzZ3tzZ31xaH1vbH1wcYZyd5d2fat6gsF/h9KEiuCLjOaTjeOdjNqghL+edZ+gbIKsbnG8dmzSdmnyc23/bGz/Z2n+XmD7Ulf1Rk3vPELqNz3mNTvhNzjdOTjWPTfOQTfGQjW9QjC4QC+tNym0QDOvOjCwOzHIUkjVXFHJTUO7OzC+OTDBNy3MOS/WPjPbPTHaNircNCfiNirgMyziNzDkPTXlRTniRjneQjPeQTLiPjLbMCbqNzLsMC/vLjHxLjT6Nz//UFj/XWT/Wl//T1PhLjHjMDPgLC33RUXoNjbcLCzbLS7rPkDcMjXZMzf/YmjgPEPLKjLKLTTBJirVOz3hQEXbNjrZMzffOT3cNzvNLzDMNDPNOzvVR0beUlPsYGP1aWz0ZWvqXmHEQD7GRUDlXlv4aGf/b3D/amrlS0vXPTvJNDDRPjfXRDzWQzvVPjXVPDTYOjHcNDHuNTvxLTnwLDbyLjjvLDTrLDPzOTz+SkvfMy/cMy7aMyvcMyzjNS7qNDDvNC/yMjH0MDL2LzL3LzH2LjD1Ly7wMC3qMy3iNy3ZPzPGOCq0MiWyOC3DTkfvfHn/kpH/iIz/f4n/d4X6bHz4YXT7VG79SGf/PmL/Ol/6NlzzQWHgTmPCV19wLytfPzBbVz5ebEllfU1riVN0klx1ll92mV94nmN5oWN4oGJ1n2B1n2B1nV92nl93nl94n2B7n2F6oWJ6omR7pWV8pmR8p2B5p155qFp7qlx9rF6ArGGFr2eHrm2HqnCFpXODoHJ7lW5yimpleGVba15SYlVfTjxfTjxfTjxfTjxfTjxfTjxfTjxfTjxfTjxfTjxfTjxfTjxfTjxfTjxfTjxfTjpeTDRfTjRgTjheTzpbTj5ZT0VaU01aVFRfWmFoYnBybYF6dYx7dZF7cZN6cJN2cJJwc5JyeJp0fah3gbZ6g8R+hs+EidqLjN6Wj9yZis2bhbaig6OqhJGrfnmfbFuaUT68TULUUUniV1LrV1XxU1LxS03tPkPlNDrpOTzmOTvgOznYPTjTQDjKQjbAQTC6Py+zOSy6QTarNSujLiS+ST/ZZ1zZZFrLVUm4PDK4NinAMynOOjDZOzDaNizeMynkNi3fMSrkNzHjOzLdOS/ePjDjRjXkQjPeOCrfMSjpNC3wMzHvLS7tKi70MTf/RUr/Vlv/XWL/XGHiOTzjOTzVKyz0SkviODnXLy/bNTfMKCnMJyv4WFrdPkLWOj7RNjq6HyPEKCvcPD7mQUXdNDnZLDLeMTfZMDXNKC7SMzfkS072YWX7aG75Y2z3YGn6YGz4YmvWTEzVTkrqXFrqVlTnTU3jSEbPNDLOMy/ZQTzgS0TkT0jfSkPZQDjXOjPXNi7cLi31MTv7LTr4Kjf1JzT1KTT4MDr/PkP/SkrgMS7eMyzcMyzdNSzhNC3nNC/sMy7wMy/0MDL3LzL5LjH4LTD2Li7xLy3rMi3iNy3ZPTHJOy2zMSSxNyy6Qz3seXb/jY3/iI3/fIj/cYH2aHj2X3L5Umz5RGP/OV7/Nl35N1zwRmPRTl6iSUtlNStWRDBbWUBebEllfE5riFJ0kVt3lV94mWB7nmR6oGN2nmBzm11ynFxzm1x0nF12nV53nl97n2F6oWJ5oWJ6pGJ8p2J7pl94plt4p1l6qVl7qlp+ql+DrWWFrGuHqW2Jp3OJpXWEnXN8lHJ1iXBuf2xmd2VfUD1fUD1fUD1fUD1fUD1fUD1fUD1fUD1eTzxeTzxeTzxeTzxeTzxeTzxeTzxfTjphUDZhUDZhTzleTzxbT0FbUktcVlZfWmFrZ3Zzb4Z9epeCfqGBfKV9d6N7daV4dqdzealzfbB4gbh7hL9+hsSEicmNjs6Uk82ak8eglb2rm7W8prLJranFppSqiG2cZkqcRTKvQTS2QDTCQjnXSUXoTk7uSkvsP0PrPT/pOz3kPDvfPTrYPzfQQDXIPjHBPTC9OjC8QDavNCynMSe7ST/RY1bWaFvVZVfDT0K6PjK6NCnHNyzWOTDZNSzfMivnNjDiMCzjNC/iNy/eNy7gPjHlQzTkPjDeNCXmNCrpMCvwMy/wLi7vLS7yMTTzNzj2QkX2TVL8WV7pRkv2UVfYMzfrRkrdODzmQUXaNzrOLjDRMDXkSEvSNzvQNzq5IyXVOz3bODvlOz7rPEHnNjziLTbdKTLhMTvnPETwTFP9XWX/a3P/anP6YGr2Wmf5WGj3W2b0ZGToWlboV1TYQD3PMTDUNDTTMzPhQ0DjSkXpUkvqU0zhSkHZPzfYOTPbODHjMzPzLjf/MD7/MD76Kjf8Ljr/O0X/Q0j7QULjMS/fNC3dNC3dNSziNC3mMyztNC/xNDD0MDL3LzL5LjH4LTD2Li7xLy3rMi3jNy3YOi/NPjC1MSWxNyyyOzXpc3H/ior/h43/dob+aX3zYXTzW3D3UGr6Q2L/OGD/OGH5O1/sTGa/T1t+ODZdPTBORjFWWEBaZUVjeE1qhVJyjlt2lF55mmF7nmR4nmFzm11wmFlwmVdxmlhxmlh0m1x1nF15nV94n2B4oV95ol56pV55pFx4pFl4pFd5pVZ7p1h/qV+CrGSEq2iGqGyHpW+GonGAmm14kWpxhWlrf2Ridl1fUD1fUD1fUD1fUD1fUD1fUD1fUD1fUD1eTzxeTzxeTzxeTzxeTzxeTzxeTzxfTjpjUTljUTlhUDxdUEBaUEdcVFJfWmFhX210cop5eJiBgKiDgbB9fa95ea95dbB3d7V3fL54gMF9hcSCiMSFisGNj7+Xlr6gnbysp7u2rLW+s7HIuKvQvqbWwaLRu5bQrIivb1SuXEekRzWoPjDCRz/gV1HvV1bxTk/pQEPqPT/mPD3iPTvfPTrXPTXROjHJOTDBODDAPTW5OjO3PjXBT0XHWE3HXU/RZVjTY1XCTD68Oi3FOC7SOTHXNC3fMiznNjDmNDDhMi3gNS7jPDPnQzfmQzTiOi3fMyXqNSzmLibwMC3vLyzwMzHxNTTnLS7iMjTnQkb3WF32V1z/b3XlRErrSE3gPEP+W2D/b3XePUL/fYL/bXHqUVTUPkDGMDLWOj3ySEvuOT7wNz/4PUbyN0LoLTj0Pkr/XWf/bXf/anL/Y273XWf6Xmv/YW//XW75WWXyXF3jUEniSkfVNzTSLzDZNTTSMC7YOTXfRD/jSkTiSUHZQDjTNi/WNC/cNzHpNzfqJy/8MDz+Mj33Kzb5MDr/PkX9P0HsNDTiMy7gNS7eNi3fNCzhMyroMyzvNC/0NDH2MDH3LzL5LjH4LTD4Li7yLy3rMi3jNy3XOS7RPzK2MCWyNiyvNTDnb27/h4j/ho7/cIL8Y3jxXHD0WG73T2n7QmL/OWH/PGT2QWLkUmewUVdkLydXRDNHRy9SVDxVXj9idExpgVFxi1t2kl96mGJ8nWR4nF9ymVpul1Vul1Vul1VvmFZymVp0m1x3m113nl13nlt4oVt5o1t3o1h2old2olV3o1R5pVh6pFp+pl+BpmN/oWR+nGZ7l2ZyjF1pglhgdlJab1BSZ0hcTDxeTj5gUEBgUEBfTz9fTz9fTz9hUUFiUkJfTz9dTT1dTT1hUUFjU0NiUkJgUT5kUz9hUD5dUEBeUUlbUVBaU1plYXBzcYl5eJp6fKV+gLGAgbl9f7p4erdyc7Rsb7Z0d8h2e8yAg8qLjcaWl8OkpL6ysLu8ubTLxrPTzLDZz6zbz6fcz6Pd0KPZy5zZwpjRqIi4gGegXkjLemfWdGe9SD/XUU73Y2PpS0zlP0HiODnkOjriOjncNzXZNjHWOzbLODHANS7HQju5PTO/ST/GWEu5T0HOZFbRY1TMWEnFRznEOi/NNi3YNy/hNi/jNC/fMC3fMizgNzDkPTTgPDDdNynfNSjlNyzkLyTqLybsLynuMS3uMjDrNDDoNTHiNjTXNznmSk71WV3tTlPXOD3XNjz5WGD/foT/fob/b3X/Z2//aXD/Zmz1XGHxWFv7Wl//VVr/REv8OEL7N0H3Mz/uKznsMD7xPUj/U1//YGn/Z3L/ZXD+Ym3/Y27/YG/9XWftU1PfRkDWODXWNDHXMTHXLy7YMzHbOTThRD3cQjrZPzfWPDTXOTDbODHgOTPmNjbxNzzzNDv1Mzv2NDz3NjvyNTnrMzPjMS/eMyzeNS7fNy7gNSvkMyvpMizvMiz1MjD3MTL4MDP6LzL5LjH5Ly/zMC7sMy7lNy7gPzXMOCy/NiyvLya4OzfSWFf/mJr+e4P/bYD/ZXz4XHLwUGj0R2X8Q2X/O2L5OV71TmzTUmSJPT9RLSFDOyZDRy5LTTVaYERaakVjeE1xiFp4kmJ4lmB0lVxylllxmFlslVNtllJul1NvmFRymVh0m1p1nF11nFt0m1h0nVd2oFh3oVd2old2olV1oVR0oFN7pVt7o116nl51l1tti1Vifk1YckNTaj5BVzA/VS88UixbSzteTj5gUEBgUEBgUEBfTz9gUEBhUUFjU0NgUEBfTz9gUEBiUkJjU0NiUkJgUEBmVkdfUUZcT0deVFNhWmFkYG9ta4N2d5Z3eaJ7fa59f7h4fLlxdbVrcLRsb7Zucb51dtB8ftWJidOYmM6op8e4tsHJxbrTzrHb16ri26Xn3qXm3aLk26Ti2KPb0aDUx5vTvJq7nICpfGXFi3fKfW20VkrSYVv2cnDsWlvnS0zjP0DnPT7rPkDnOzviNjbbNjTWPTjJODPKPzi5Ni64PjO9S0C2SDvIXU3db2DUYFHGSDq9NSnFMSfUNi3cNS3bMCniNTHlOTXkPTfgPDPcOC7bNSnfNCrjNSrsNy7tNSvtMivrMCvnMCzjMizhNC7dNTLWODfYPkDkSkzzV1v6XmL8XGT+XWX/YWn0U1vvTlbxUVn/X2f/anH/Zmz1WmDzTlTtNDrxLDX0Kjb3LTnxJzXlIS3mJzbtN0P+UFr/WmT/Ymz/ZG3/ZW7/Y239W2j1UVrlRUXePDfbNjTeNjPfNTXcMzDaMi/bNjLgPjnbPjfYOzTXOjPbODHfODLlOTXnOjbqNzrrNzrtNjrvNznvNznsNjXlMzHfMizcMyzdNi3fNyziNizlMivqMiryMSz1MjD3MTL3MDP6LzL5LjH3Ly/zMC7sMy7lNy7fPDPUPTLCOC62MSq3NzTYWlv/kJP7c33/Znr/Xnb5V2/3T2n5Rmb7P2L8PGH0QWHlT2i5S1Z4OzhMMiM8OiM8QihFRy9PUzhWZEFgckpug1h1j192k110k1hxk1ZwlFRrkk9rlFBslVFtllJwl1ZymVhzmltzmll1nFl1nVd1n1d1n1d0nlRynlFxnVJwnFFumFBslE5ojExigUZYdT9OaTZGXS9AVytAVy1AVy1BWC5ZTDxbTj5eUUFeUUFeUUFeUUFfUkJgU0NhVERgU0NfUkJgU0NhVERhVERgU0NeUENiVU1cUU1bUVJjWWJrZHRxbYR2dZV6fKV5e6x5frZ4fLtuc7VlabBgZ69qbrhydcZ9fdeHhN2XlNupp9i7uc/Lysjc2L/l4bTp5Krt6Kbw6aXt5aTn4afi26fXz6HLw5y4r5Cpm4Gbg2uog3Cnb2CcUke6XVXdbWn3dXXvX1/kSkzlQETrQUTsPkDoODriNjbfPTrUOzbUQTrCNzC3Nyy3PjOuPS+2RjjbalzfaVvZW03KQjbFMijRNCvZNi3ZMizeNTLpQT7sR0PgPTbVMinVMSfaMifeMCXmNCroMSnnLinmLynjMiziNy/hPTTgQjnGLSjKNDPcREPwVlj6XmL3WmHzU1vxUVvoRlHqSFPvT1n8XGb/bXb/bnT0WV/jPkTpLjX0LTT7Mjz8Mj71KzntJzT2NkX/S1f3SVP1UFf4V1/+Xmb/Y2v/YGn3UlnpQkneOTfeNzHjNzXpPDjrOzvmOTXhNTHdNjDdOjPZOzLXOTDXOTDcNzHhODPnOjbpPDjjOTnjOTnmODfoODjoODjmNzThNDDbMivaNi3bNy3eOCziNiznMinrMCnzMCz3MS71MTL1MTP4MDL3LzH3Ly/yMC7uMy7nNi7dOTDcRDnHODC7NC61Ly7kX2L/g4j4bHf+Ynj+V3P6UG3+TGz/Q2b2Ol3zO1/sSWbUU2edREpsOzRPPiw9PCc6PyhFRC9GSDBRXDxZa0VnfFFyiVt0j1pxkFVtj1Jrj09pkE1pkUtpkkxrlFBtllRul1Vwl1hxmFd1nFl1nVd0nFVynFRwmlJtl01rlU1qlExljUdhiEVbf0FVdDtMaTNFYC1BWCo+VSdCXC9FXzJJYzZXSjpaTT1cTz9eUUFeUUFeUUFfUkJhVERgU0NgU0NgU0NhVERhVERgU0NfUkJcUERaT01aUVZiWGNqY3NxbYZ2dZV4eqN6fK13fLRzebdtcrRiaa9dZKxhZ7Fscr54e8qJid+VkeWkoeS2teHHxNnV0c7h3cTn5Lnr5q/u6q3u6Kzp4qvj26ra06nLwqG7tpmlpY2bmYSTiHaYgXGZcmObYlezaWDPcm37i4n1dXTqW13mTE7oQ0ftQETsPD/pOzzfOjjbPDjeRT/TQzvDOjC6Oi+wNimnMSO/STvbYVLqa1zbU0XJOizMNCfUNivXNC3ZNDLxTUv+WljtS0baOTHWMyrbNCveMijfLibhLCXhLCXeLSXcMSnaNizZOzDXPzTCLyfENCzOOjbZQ0LfRkjgRUnkR07qTVbxUV32VmL4WGL5XGX/Z3D/bXX0WWHeO0DqMTfxLjTyLTbyKjTrJTLsKDT7PUn/U1/tP0noQUnqR0z0UVb/WWD/WF30R03kNjjhNTPkNzPqOzjyQD70QD/vPTvmOTXgNzLdODLaOTHZODDZODDcNzHjNzPoOTbpOjfiOjfgOznjOjfmOjjnOjblODTgNS7aMyvaNizbNy3eOCziNiznMinrMCnyLyn2MC30MjL0MjP3MTL2MDH2MC/yMC7uMy7nNi7cOC/gRjzJOTG+My62LCzuZmr/eYD4Z3T/Ynn9VHH+S2v/R2r/PmPyNlnrPV7jUWjEWGWIQkJnQzdbTjtHRjFBQy1KSDNFRS1MVTZTYz5idExsg1Vwi1hujVJrjVBpjktnj0lokEpokUtqk01rlFBtllRvlldwl1Z0m1hzm1VxmVNvl1Bqk01nkEpljkhkjUdgh0RdgUFXeT1ScThNaTZMZjZOZTdPZjhMZjdPaTlTbT5VSDhXSjpbTj5cTz9cTz9dUEBfUkJhVERfUkJgU0NhVERhVERgU0NfUkJfUkJeUUlWTVJfWGhuZnt0cIl4dJd4d6F4eqt5e7RzebdqcrNgZ61bY6tfZ7Bqcrt2fMaAhM6TleCenuStrue7vebLyd/U09jd287h38bl4b7m4rzk37ng17ba0LXOxrG+taatp5uYmoyMjoCJhXmKfHGRdmubc2mobWW6b2nmiYTugX7zc3LxZWTxV1nwTU7uREXsQEDjOjfgOzfkQj3eRT/MPDPGPTPEQjWvMSOuMCLHSTvcWEvWTkDMPS/OOCrRNyvRMyrWNDL1VVX/a2j6XVjjRD7cOzPfOzLjODDiNC3jMiziMSvdMCnUMCfNLyTGLyTCMCPFOSzANCfBMynLOjXXQ0HbRUfbQkfaQEjfQ07rT1ryVmHyVmH6Xmn/Z2/zWWHhQkfqOjztNTfvMjjvMjjyMj33OUP/SFP/Vl/kNj/dNDvfNjvrQUT5Sk/8SU30O0HpMTPoNTHrOTXwPTnyPDnzOznwOjfpNzPiNzDfOzLcOzHbOjDcOTDfODLkNzPoNjTpNzXmOjjkOzjmOjjoOjnoOzfmOTXhNi/cMyzbNy3cOC7fOS3hNyrlMynpMSnxMCn0MS3zMzLxMzP0MjL0MDH0MS/yMC7uMy7nNi7eNy/gQzrKNzDAMS3AMTP4a3H/cXr6ZnT7XXT6UG3/Q2b/PWT/OWP1OF7mRWTZWm2rVlt3RT5kSj1hWUZUTztLSTRQSTZHRS5GTzJMXDhabEZmfE5thVNtilJsjE1ojUpmjkhnj0hnkUlpkkxqk09slVNulVZvllV0mVZzmFVulVJqkkxmj0tjjEhhikZfiEZagUJYfD9TdDtQbjhPazpSbD1XbkBacUNVbz9WcT5XcUFSRTVVSDhYSztaTT1bTj5cTz9eUUFgU0NgU0NhVERhVERhVERgU0NgU0NiVUVhVlBeVmNqZXx5dZB9eZp6eaF4eal2ebBzd7RqcrNjarBbY6tdZa5ocLl2fseBh9GIjNOZnd2jpeCvs+O7v+XGx+PPzt7U09jX1tHZ18vZ1sfX0cXSycDMw77Fubm0qKyjmp2Ki4Z4e3R5dnF1bGV/bGWNb2eOYVudYFvAc23YeXXwf3v8fHn/cnD9Y2P2U1TwSEfvQz/qPjrhPDbgQTvROjHTQzrdVErCPjK4Nim9OSzCPS7IPy/PQjHXQzXWQDHRNy3QMi/qTE36X13yV1PfRD/ZOjTbODHgNzDmOTPnOTLnOTLiOjHaOS/ROSzKOCvFOSqwKBi4MyLIQDLTST7SREDLOzrMNzvPOkDRN0HiSFLtVl/wWWL1Xmf3YGnqVVvcQUXlQD7sPzvzQEP7R0r/TFT/UVn/VF3/Vl7hNDraLzXcLzPnNzr0PUH4Oz/3NDjzMTLtNDLvOTXwODbtNDLrMjDqMjDnNDDhNC7jPDTgPTTfPDPeOzLhODPkNzPoNDPoNDPoODjnOTjoODjrOTnrOTfpNzXiNS/eMyzbNy3cOCzdOivfNyrjMijnMCjvMCjyMSzxNDLwNDPzMzLzMTHzMS/xMS7sMy7nNi7gOTHZPDPMNzHBMC3RQEP/bnX9a3X5YnHwUmn1SGb/O2H/NF7/NmL7PmTkTmnKXGmLR0ZqRjpdTDxdVkNYUT5SSjdPRzRJRC5ESi5HVTJTYz5ec0hnf01qh09qiktnjEdnjEZmjkdmkEhnkEppkk5rlFJtlFVtlFVxlVVwlVJqkU5njktjjEhgiUVfiEZehkdcgkVbfkRXeEFWcj9Vb0BZcEJdckdedUdbc0NZdEFYc0BOQjJRRTVVSTlXSztYTDxaTj5cUEBeUkJhVUViVkZiVkZhVUVfU0NhVUVmWkpoXVluZ3d1cI58eJl7eaB3eKZ2d61wda9qb69haKxeZq5fZ7BlbbZweMB9hc2JkNiPl9iZoNahqNaqsdu0ud+6v9/Awd3Dw9vHxtjGw9TFwdDBu8m8s8S7sMG1qLymmK+Wi5yIhYxxcXF0cG9wZmV3aGWGbmqEX1mVZF+bWlS5ZmDZc27wenb/e3f/d3P/aGb8Wlf+Uk71SELmPTbnRD3YOzTbRz3qXFLFOzDEPDC8Niq+NijHPi7RRDPUQjPUQTHXQTPSODbYPj7dQ0PcQkDWPTfVODHYNy/eNy/lOjPmOTPlOjPiOzPbPjXVQTXRRTjMRzauLRi8OyXNSjjRTD3GPTW6LyrAMDDKOT7XQUrhS1TrVWDwWmXwXWXsWWHfTFLUPkDPNC/YNy/gOznqQEDyQ0j1RErxQknuP0biNTvfMjbjMzbvODz1Nzn4MTT7LzL8MTTvMjDwOTXwNzTsMC7oLCrnMCzmMy7gMyzkPTXgPTTgPTTgPDPjOjXmOTXqNjXsNjXsNTfsNTftNTfuNjjuNjbrNTTkMi7eMSveNy7dOS3dOivfNyrhNCbmMSbtMSjxMSzwNDLuNTPxNDLyMjHzMS/xMS7sMy7nNi7iOzPSNCvSOjXGMjDoVln/cHj5Y27yWmnnSWDzRmT/OGL/L13/NWL/QmjcTGWxUFlqNS9eRzdYSzpVTjtbUD5WSThNQDBKQzBARixBTy5LWzZYakBieEdmgUpoiElmi0ZlikRji0JjjUVljkhnkExokU9pkVJrklNuklJskFBoj05ki0phikhfiEZfh0hfh0hfhUhfgkhdfkddeUZdd0hgd0tjeE9jek5ddUNbdkFadUBKQzNNRjZRSDlUSzxXSz1ZTT9cTz9eUUFkV0ZlWEdkWEhiVkZfVUlhV01nXlVsY2Z3col5dZp4dp50c59ycqR0da1scK9iZ6laYalfZa9mbLhtc792fMiBh9OPk92XnN6bodWgp9Oprdqus92xtN2ytNu0tNq2tNu1sdazrdGup8mrocSqnsKlmb2Zi6+Ifpl8eIZkYmdpZWZjWVpqW1h7Y195VlCSY12KTkaiVU29YFjWa2Pxd3L/f3r/enf/bmr+YVz3VE/pR0LuT0ndQj3eR0DqV0+6LCK+MSe+NCfHPi7RRTbLPi3BMiLKNyfbRTfeRT/TOTfMMy7NNTDUOzXXPTXdPDThPTTkOzTkOTLeNS7XNCvPNSnKOCvFPCzCPy3UUz7IRzK9PCm+Oi3DPTLEOzXCNzTCNDPcS07eTVLhUFXlVFnoWV3lVljcTU/TREDJNSvRNyvZODDdNTLiMjTlMjbmMTjmLjbsND7sMzvzNT/7OUL9ND76KzX/KDP/Lzn4LTP5NTf5NTnwLi/rKivpMC7oNTHiNS/jPDTgPTTgPTThPTTkOzbnOjbrNzbuNjbsNDbrMzXsMjXtMzTtNTXqNDHjMS3bMCjeOCzdOivdOiveOCjgNCbjMyTpMybsNCruNTDuNTLwNDLwMy/yMi/vMizsNCznNi7kPTTNLybXPjnMMzX5Ymf/b3n3W2nwTmPqQ135Rmb/OmX/MF3/NmH2R2jJSl2TQ0ZSLCNWSThTTDpPSDZbTz9VSTlGPy1IRjE+QidASihJVTFTZDpfckVlfUlnhEpliEhjiENhiUJiikNjjUVljkhmj01oj1BpkFFskFBrkE1mjUpjiklhiEdgh0Zgh0hghklegUdef0ZffUdgfElhe0tke01mfE5mfk5deENdekBee0NDQTVGRDhKRjtQRz5SSD5XST5dTT5fTz9gUT5hUj9gU0JfVkdiWVJnYl9vam5zb353cZN6dKB8eah5d6lwcKZnZ6NgYaJcX6RgYq1maLVvcMB5esyEgtaNi9+Wkuecmeagnt2hodejo9mkpNqmo9ilotelodSkoNOlntGjnc2imsmimciflsOZjbuOgrCDfJ5ybn1pZ2xkXmBmWlprWVVyV1B9V06MV0+VUkmoWlC1WFDBWlPYa2TseXL5gnz/i4b5dXH/dXPtX13fUEzZRUHvWlTMNzHFMirENirDNyjANyfDNybGOSjKOyvQPC7VPzHSOC7WPDLXPzTTOzDNNSjNMyfYOi/iQDXgOTDhOTDeNy7XNyvPNynJOirGPyzEQS/CPS7GQDTLRTrNRzzMQzvFPDS7Miy2KybHPDfQRULZT0zgVlPjWVbhWFLYT0nQQzrMOyrTOijcOCziNS7oLi/sKjLwKDP0Jzb6LT76Kz/7Kj/9KT//KD//Jj//JDz/JDz/JDj/Jzn/Kzz+LDnzKzXtLjXoNDXnOzndODTdOjPeOzTgOzXjOjXmOTXpNzPrNTTrMzXsNDbrNTTpNTTnNTPiNS/dNSzbNSncOCzbOSrcOSjeOSbfOCbiNyXjNiXmNCbsNS3tNC/wNTDxNC7xNSztNSvqNSrlNyzgOTDYNy/VOjbbP0L/bXf/YnP7U2r1SWP/S2r2N1n/Nl//PGf4PmPnTmqvSVZdIyFELCA/OidIRTRQTTxQSTlFQjE+Qy8/Ry9CSCZFSyVLUy5TXThba0Rhdktkfk5kg0pihkZgiEJhiUBji0JljUZokEpskFBtkVFskUxpjkhnjEdmi0hmikpliUljhUhhg0dkg0pkgUlif0djfkdkf0pkf0hlfkdhfUNbezxcfz1fgkI9PzQ/QTZGQzxKRT9QRT9URz5bSz5dTT1gTztgUTxeU0FeVkljW1hoY2lubHlzb4Z0cJV2cJ50cKJwbaJnZp9hYZ9dXqFcXKRlZLBrarp0csV9e8+GgtmNieCUjuaYk+WbltmcmNWdmdaemteemNadl9WcltSbldGeltGclM2ck8qbkseakMSTibuIf66CeJ10a3xtZGlmXV5mW1lpWlNvV017VUqKVkuaVkuwXFK6WVLBWFLTZmHgcWrjdm/tfnf9h4X/h4X3dXPuZ2TjVVPrWlXHMizCLyXFNynDNybANyXBOCbEOCfIOyrPOy3TPS/VOSzVOSzTOizSOizROSvROSvUOCvYOCzfOzHgOTDcOC7WOCzPOSrIOSjBOia+OSa+NirBODDGPTXJQDjKQTnIPzfFPDTCOTG/NC3HPjbRSEDYT0faUUnXTkbMQzvDNyrLOCbTOCTdNynlNCztLy/0KzP5KTf9KDr/K0D/KkH/KUH/JkH/I0D/ITz/Hj3/HTr/Hzr/IDn/JTv/KTv3LTnwMTnqNzrlOzvcOTTcOjXeOzTgOzXjOjXmOTXpNzPrNTTrMzXsNDbrNTToNjTkNzHfNi/cNSzZNSnbOSrbOSrcOSjcOSbeOSbfOCXhOCXjNiXnNSvqMyvrNCzrNSrrNSrqNijkNynhNyrfOzHVNCzTNTTzVFn/ZXP/W3D1R2L/SWj/QWT/O2D9M1v5O2HyTW3NTGKJOD9TKiRBNSc2OSg7PCxCQDFEQTBAPy09Qi4+Ryw9Qx1LUCdcYjxlb0podlJlelFkfk9kgkxhg0ZhhkFhiUBjjEBnjURpjkhrkE1skU5skUtqkEdojUhmi0ZnikpmiUlmhUpkg0hmg0tkgUlkf0hkgEZlgUdlgUdmf0VifkFdgD5fhD9ih0I2OS46PDE/PzdEQTpLQjtPRTxWSD1ZTDxeTzxcTzxcU0JeV01jXV1oZWxvbXtzcYlzb5Rxa5lqZphjYJVcW5RaWphcXaBcX6ZoarVub793eMp/gNKGhNiKiNyPi+CRjt2TkNOTkdCTkdCTkdCUj9GTjtCTjM+Si86VjM2Ti8eUi8SUi8CTi76MhLODeqWAcpV8ZXd1XmZpW1tkW1ZkW1JmWEtyVkiEVEiiWVC9YFnJXFnPWVfbY2Lha2nfb2vjdnH7ioT/iob/hYH/fXn3bmjuYVjENCvAMibEOCnBOifAOSbAOSXCOSbFOifMOivQOizWOi3TNSnONSfQOCrUPi/UPi/ONijLLyLaOi7aOC3ZNyzWOCzQOivJOinCOSa+NyS9NSnANizCOC7EOjDHPTPKQDbLQTfMQjjHOjHKQDbPRTvQRjzSSD7RRz3KQDbFNyvMNiXWNibfNyznNC/xMDP2LTX7Kzn/Kjz8Jzv8Jz37JT35Izv7ITr6Hjf8HDf+Gzb/Hjj/Hzb/JDj9Kjv3MjzxNj3rODvkOjrcOTTcOjXeOzTgOzXlOTXnODXpNzXrNTTtMzbuNDftNTXqNjXlNjHhNi/cNSzYNCjaOCnZOSnaOSfbOCXdOCXeNyTgNyThNiXhNSfiNCnjNSrjNijjNijhNyjeNinbNyvdPDLQMSvYODj/a3L/XW7+UGnxPFv/SGz/N13/PmX5NVvuPmLmVnGqP1FhIyhMLyk7NyswNyczNyY5PClAPSpBPChAPilCQiY/Rh1YYTRzflSAjGR3h2Bof1NhfUxhgEdgg0NghT9hiUBjjEBojkVqj0prkE1skU5uk01rkUhojUhnjEdoi0toi0toh0xnhktlhEtkg0pjgEZkgUdmgkhmgkdlgUZigEJjhkRlikVojUgyNSo1OC07PDRBPjdHQDpLQjtSRTxWSjxYTDxZTT1ZUUReV09jXmJpZ3JvboByb4xybZVqZ5RgXo9XV4tUVY5XWJhcX6JhY61sbrtyc8N7fM6Cg9WIhtmKiNuMiNyNitePjtKPjc6PjM+Oi86Pic+OiNCOhs+Nhc6PhcqOhcaPhcGQh7yPh7aJgqyAeJ1/b4yAX3B8WWBsWFlkW1ReX1FfXElqV0Z9U0WeVUy+XFnQWVvZWFzkY2fna2vhcGzleHPsfXbtenP+g37/hoH/gXv1a2HJPDLEOCnCOyi/Oie/Oya+OiXBOibFOifIOSnOOCrYOi7UNirONSfOOCnRPi7RPi7LOCjHLyHSNinTNSnSNCjSNinROSvNPCvIPSrEOynEOi3EOi/GOTDGOS/HOjHIOzHJPDPLPTPTRDzTRTvQQTnLPTPLPDTPQTfPQDjOOzHONSfZNSniNS7rMzHyLzX3Kzb5KTf8KTr5Jjn3Jjv3Jjv4Jzz7Jjz9JTr/JDr/Izr/Ijf+Izf6JTf5LDv3NT7yOT/oODrgODfcOTTcOjXeOzTgOzXlOTXnODXpNzXrNTTuNDfuNDfuNjbqNjXmNzLhNi/cNSzXNSrYOCrYOCjYOCjZOCbaNybcNyTdNiTdNiTbNSXcNijdNyfcOSjcOSjbOijZOSnXOivXOjHQMy7rSEv/b3n/Vmr4RF/4PF//QWf/M1z/OGL4PmPoTWzFT2WAMD1KHSBDMS0xMScuNic0PSw9Qi5CQCtCPCRFPiRIRSRVXDBwfk2Pn3KXqHyDmG1qhFdfe0pdfkVfg0NhhkBiikFmj0NrkEpskUxtkk9tkk9vlE5skklpjklojUhpjExpjExqiU5piE1mhUxkg0pkgUdlgkhng0hohElmgkdkgkRnikhpjklskUwtMyczNis4OTE8OzZCPTlHQDpNRD1RRz1TST1TSz5VTkRaVVFhXmVpZ3Vta4Fsa4pqaJBiYI9YVohQUIZRUY1YWZpgY6pmarRvcsF1eMl8f9CChdaGh9mHiNiKidmLitaLjM+LisyKic2Jh9CJhdGIhNGKg9GJgtCMhM+LhMiNhcGNhrqNhrCHgaV+d5Z/bYWEWWqAU1puVlRjXFJaYU9aX0hlWkR4VUKSTES4VFLQU1fbUlnlXmToZWrja2zmdXHkdW7ib2j3fnb/gnv/h370bGDJPzLBOCjAOyi/PSe/PSfAPCfCOyfFOifHOCjNNynYOi/YNy3SOCzPOSvMOivJOirIOSnJNyjPOSvRNyvSOCzRNyvPNyrMOCrLPCzLPi3KPDDJPTDKPDLJOy/IOjDHOS3FNy3FNSrQQDfQQDXNPTTJOS7LODDOOzHNOjLMNSzQLyXZMCnkMjDsMjX0Lzj5LTn7Kzv8LDz8LT/7Lj/8L0D8L0D+L0H/Lz//LT//LkD/KTn8KTj3Kzf1MDrxNj3tOD3jNzfcNDPcOTTcOjXeOzbiOjflOTXnODXqNjXsNDTxNDjxNDjvNTbtNzbmNzLhNi/aNizXNSrYOCrWOSjWOSjYOSbYOSbZOCbaNybZOCbVOCXVOibWOyfVPSjUPSjUPSrUPSzUPC7RNy/aOzj/XmX/YXH/UGn3PFv/QWn/NF//NGD7MVn0S2zbWXGVPk5aJS1DKSw6Mi8tMCkwOCs3QC88QSs8PCJBPB5VSChgWzV7hVOQo2yqvouovo2OpXdvi1thf0tef0ZghERjiEJljURqk0dvlE5wlVBvk1Nvk1NvlE5skklpjklnjEdpjExpjExpi09oik5nhktlhElkg0hlhElnhUlohkhnhUdlhURpjklpkUtslE4rMSUuNCo0NzA4OTM+OjdCPTpIQTtLRDxOSDxORz1PSkRXU1JfXmZmZXVnZ39nZoZiYYlbWYpRUYVOT4dSU5NbXqNlabNsb751d8p6fNF/gdaDhdiGh9mGh9eIh9WJidOHiMuGh8iGhcuFg86FgNCFgNKHf9KHgNCNhdKMhcuNhcGMhbiLhauEf517do18anqEVmOBUFZuVVFkXlBbZU1YYkliXkVzWEOPT0W0V1LQVVraU1rnXGPoYWflZ2rocG/seXLmcWj3fHTzc2r+eG3mXFHEOyu+NSPCOyfBPSjBPSjDPCjEOyjHOijLOSrPNyrWNSvYNy3UOi7OOizHOinEOCfGOinKPSzPPS7WQDLZQTTWPjHOOCrINCbKOCnLPCzJOizIOizJOy/JOy3KOi/IOSvINSvHNSjKNizPOy/SPjTTPzPWPzbVPjPONy7JLCPSKyXcLSrnMDLwMzn2MTv6MDz9MD/9MD/5MED3MUD3MUD2MD33Lzz3LTn5Kzj6Kjf8MDz5Lzv0MDrxNDvtNjvmNjnfNTXZNDLcOTTdOjXfOjbiOjflOTXnODXqNjXsNDTyNTnyNTnwNjftNzbmNzTfNi/aNi3WNirVNyvUOCnUOCnUOSfVOCfVOCXXNyfUOSXQOSTOPCXPPSbPPyfOQCjOQCrQPy7SOzDRNjHrSEn/ZnL/T2T/SGb7N1v/QW39L13/N2HyNFjjUGq8VWZtMTlFKCpFNjk3MzI1NDA2OTA2PS0zOyMzOBhDQx1qYTqFgVSfrnepwYe1zpevx5OSrn12lGJlhlFggkZghUJjiEJnj0ZtlkpymE9yl1JxlVVwlFRvlE5skUtojUhmi0Zoi0tpjExpi05pi09nhktmhUplhElmhUloiElpiUhph0dmhkNqj0prk01ullAoMCMrMScvNC0zNTA3NjQ8ODVAPThDPjhJRTxIRTxLSENSUFFbW2VhYnRiYnxgYIJfXohaWIpUVIpUVJBcXaBnabNwc8R2eM17f9h+gtuDhN6Eht2EhdiDhNaFhNSGhdGDhsuChciDg8uCgc2DgNGFgNSIgNWIgNONhdKLhMiLg76Lg7KJgqSBfJN3cIB2ZW9+VVt8UFFuVU5mX09dZU1aZElhYUdxXUWJVEatXVTIWlvUVlriW2HmXWTpYWXubGz1enPtcmr3eG/eWVDlW1DSRDjDNSfHOinFOifEPCbFPSfIPSjKOyrNOirQOCrUNirTMCfUMynSOCzNOyzHOyrCOyjAOyjDPCnIOyrVQzThSz3eSDrTPS/KNCbJNSfNOyzIOSnIOSnIOSvIOSnKOCvKOCnLNyvLNynNNivSPC7XPzTYQDPaQDbbQTXXOjHSMSncMC7lMTTuNDn1Nj75ND75MT76MED4Lz/yLjzvLzztLzntMDfvLTXvLDLyKzLxKjH1MjrzNDvyNTvsNTnlNTfhNTXeNjXcNzXcODbdOTffOjbjOjfmODfpNzfqNjfsNDb0NTr0NTrxNzruODfmNzTgNzDaNi3UNirTNyrROCrQOCrQOSjQOSjQOSbROCjQOSbLOSLIOiLIPiTHPyXIQCjIQCrMPS3POzHXOTb8VVz/XnH/R2P/P2H/OmH/N2f+M2D7OV7tRmLFTmGJQElTMTJBNjRAOjw6NDY/NTY+NzE3OSs0PSI5Qx5TWi6CglCip3GxxYqvy46wzJKmw42Srn17mWVniFFfgUVeg0BjiUBpj0RvlUpzmVBzmFNxlVVvk1Nuk05rkEpnjEdlikVnikpoi0tpi05pi05miEtkhklkhklliEhnikpoi0lpiUhmiUVqkkxslk5vmVEmLiEoMCUtMisxMy4zMzE3NjQ6OTU9PDdHRD1ERDxHRkJPT1FaWmRfYXBfYXpcXH5gX4lcWoxZWJFcXJpnZ61xc8B6fNF/gNyBhOGCheSFhuOEheGDg9uBgtWDgtKDgs6Eh8yDhsmEhMyDgs6FgtOHgtaKgteMg9SNhdCMg8SLgreKgquGgJx/eIhzbnVxYmV2V1V0U0xqVktmX01iZk9fZUljYkZwXkZ6UT+dW023WlPFU1LXVlriV1zqWWDyY2X3cm3wbWX3cWjRRDvUQTfFMSXINCbUQzLHOSXHOibJOyfNPCnQOivTOizYOCzZNyzPLCPOMCXONinLPCzHQC3BPiq+Oye8NyTANCPRQjLjT0HkTkDYQjTLNynLNynQPi/KOyvJOirHOCjGNyfINifKNijOOCrQOCvTOy7VOy/VOS3SNirVNyzaPDHdPDLcNzHoODjxOD33OkH7OUL6NEH1LzzyLDvvLDrtLzvqMTnqMzjrNDjtNTfxNTb0MzbzNTfwMzfvNjvtOTzpNjniNDXdMzPfNzbgOzndODbeOTfhOTbjOjfmODfpNzfqNjfsNDb0NTr0NTrxNzrsODnmOTXfODLYNy/TNyvQOCvNOirNOSvMOyrNOirNOijNOirMOyjFOSLCOiLDPSTCPiXDPyjGPyvKPC7QOTLfPD//XGb/UWj/SWb/OV3/PWj5Ll39PGjpO1zlXHCmTFZeLi5HODNCQz48ODk/NDhFMjZDNDE9Oik+RSZGVSpicz+Qm2GtvX+xy4yryYumw4uduoSOrHp7mWVmh1BafEBegT9hhz5ojkNvlUpymE9yl1JwlFRuklJuk05qj0lmi0ZkiURmiUloi0tpi05pi05miEtlh0pkh0dliEZnikhoi0doi0dlikRrk0xtl09wmlIoMCMnLyQoLSYpLiguMC0zMzE3ODM5OjQ9PTU/QDhERUBKTEtPUllWWGVaXHNdXn1ZWIJbWYteXZZlZaNubrZ3eMh/gdiEheKMjO6MjPCKiuyGh+SCgtyAgNaCgNODgs6Ag8iBhMeDg8uEhM6Gg9CIg9OLhNKMhM+KgMWKgLyJgK+HfZ+AeI13b3prZWdmXVhtW1FtW01pXExmXktkX0llYUhoYUdvX0ZvUDuFVUGlXU+/YVnRWVjdUVTuU1v4XGD5aGXmWVDURDzONzDRNy/XOjHWPS/UOyvPOSjNOibPOSjROinUOCnYOCrcNSzcNSzQLyXNMynMOCzKPi/FQC/BQC2+PSq8OSfCOSm+MCLpV0rfSz/DLyPRPTHOPC/HOCjKOyvJOinIOSjHOCfINybJNibLNSbMNCbQNynXOy7cPjLcPDDZNyzaOC3iPjTsQzz1QkXyOT/wMjz2ND/2MkDxLTvtLTrtMj3sNz7mNTvkNjjlNzjrOTnwOjnxNzjvNzfyOz3uPDzqOjrmODfhODXfNzTcNzXcNzXeOTfhOTjjOTnmOjrpOTvsOTztOTzvODz0NzvzNjrwODrtOTrnOzngOzXXOTDPNyzKOCvIOSnHOSvGOinHOinHOijIOyrHPCnBOSPEPSe+OiO2NB68OSXJRDPPPzbKMSz/XmX/Vmf/SWL/PFz4MVj3MFn7NmP1QmnnWW+sRlFvMzNOMyxCPzY+QzxANzhALTFMLzNLMi5BOSZESihabj1+ml+euHeoxYKryYufvoKYtoCUsn6CoG5mhFJYdkJZez9dgD5jh0Fpj0RulEltlUxslE5rkk9skU5pjklmikRjhkJjhkJmiUloi0tmikxkiEpni01ojE5ni0tmi0hlikVmi0Vqj0lrk0pxm1FynlN0oFUqMCQpLyMpLicpLigtLywxMzA1NjE3ODI7PDQ+PzdBRD1ISkdPUFRTVWFYWWtaXHVcWn9eXYlkYpRraqR1dLp/fs6Hh9+LjOmNje+MjPCJieuFhOKAgNiAftKAf8+BgcuFhsmGh8iHiMuJiM6LiM+Mhs6NhsyOhciKgLyJf7GGfKGCeJF7c4B0a25sYmBlXVJlYE1lXktmXktmXktoXUlqXkhrX0duXkV3X0d/W0OSWUatWkzHVlDeUlP1UVj/WF/wVVPjTEXZPjnVNjDZNi/cOTDbOSzWOSjTOCbROCbROCjUOCnXNyncNirfNCzdNSzOMCfJNSnIOSvGPS3EQS/BQC2/PCq+OSjEOCnLPC7kUkXcSDzINCjLOSzIOizCNCbKPSzLPCvKOyrKOyrLOinMOSnOOCnPNijTNyrWOCzZNyzXMynVMSfYMSjeNy7nPDX4REfxOD7tLznvLzrwMD3uLjvrMTzrNj/kNTrcMzbYMjLfOjjuRUL4SUb4REPzPz7pOjfnOTjlOTfiOTbhODXgODXhOTjhOTjgODfiODjlOTnnOTrpOTvsOTztOTzuNzvzNjryNTnuNjjqODjkOzjcOjXSOC7LNyvGOCrDOirCOirAOyrAOyrBPCnBPCvBPCm9OSTBPym7OiWzNR+5OifBOy/KOjLYPD3/Xmf/UGT/QVv5OFf2Nlv1O2D0PmTjSWWrP0yDPz5fOjJHOy86PjA4PjJGPDpSPj1OMC5TOC9WSzVjaUV4j1uNsHCdwn2hxoGauX2auYCatoONqXhyjl5ZdUVUcD1ce0Jff0BihkBpjUNtk0hslEtrk0xpkE1pkE1njEdliUNjhkJjhkRnikppjExojE5ni01pjU9pjU1pjktojUhnjEZmjkVskkltlUxwnFFvnVJ0oFUtMSMtMSMsLyYsLikvLy0xMS8zNC80NS05OzA8PjFAQjdFSEFLTUxRUldWVmJWV2lcWXReXX9mZIxwbqB6eLeFg86Ni9+QkOqQju+OjO2KieeHhN+Bf9N/fMt/fciAf8WGhceIiMaKisqMismMismMiMWMhL+LgreJgK2GfKGAdo97cIB1anBuZGJpX1ZjXU1fYUxfYUtjXkpnXEpsW0luXEhvXUdxXUV3YUl4WD+HUz2jVkTHWE/jVVP4T1T+TVPiPjzePDfdODTeNzHhNi/hNi7dNyvaNyjUNybTOCTTOCbVOCfYNindNSrgMyzdNSzLMyjENijCOSnBPCvCPy3CPy3BPCvAOCjDNSfbSTzaRjrVQTXOPC/ENijEOyu+NibGOinHOinHOinJOirKOCnLNynMNijNMyfVOS3VNyzWMyrXMyraMyvfNi/lOjPpPDjwPD3tNDnrMDfsMTjuMzztNDzrN0DqPUPdNzvhQUHsTkv4WVX9WlX6UUzvQj7lODTiNjLgNzLgNzLgNzLhODXiOTbkOzjkOzjhNzfkODjmODroODvrODzrODzrODzsODvvNTjuNDfsNTfnNzfiOjfZOjTPOC/HNyzCOCu/Oiu9Oyu7PCu7PCu7PCm7PCu7PCm4OSa9QCqzOSSxNiS2Oyu1MCfDNDDsUFT/W2n/SmD1OlXwN1bxQF3vSGbnSGTNTmGCODllPzZSQDJEQTA5PSw1Nyk+NitMOjBFLSNSPSxnXUKBiF+Sq3SXu3uWwXqWv3uUs3icuIWatIWAmm1cdUtIYjVOaDhbeEJffT9jg0BojERskkdqkklokkpnkExmj0tkiURkh0NjhkRliEZoi0trjk5rj09qjk5pkE9pkE9pkE1nj0lnj0hokkhslEtvmU1zoVZzo1d2pFkyNCYwNCYwMSkwMSsxMi0yMy4zNC40Nis5Oy07Pi0/QTNERjlJSkRNT05SUVdTU11YVmRcWm9kYX5ubJR6d6yEgsOMidaRj+OUkeqTkOuOi+KJhdmCf8x/fMN/fL+Afr+EgsGGhcGJiMKNisOLiL+JhbiHf66FfaSFe52Ado55bn5yZ21tYWFrXlZpW1BjXEpdYEtdYUpjXkpoW0ptWktxWkp0Wkl2W0ZzV0F4UjuKUT2qWUbNW1DjVFDwRknxPkHbMi/cNS/hNTHjNjDjNS7hNSvgNinbOCnWNyTTOCTROCbUOSfYNincNirgMyzaNi3INim/Nye8Nya9Oii/PivCPy3DOyvEOCnGNCfpVUnTPDHMOCzRQjS+NSXAPSvAPSvAOCjEOCfFOSjHOinIOSnLNynMNijNMyfSNirUMynVMinbNCziOTLpPjfsPznsPTroNDXsNTnvNjvuNTvqMjrlMjjkNz3iPEDzVVb8YmL/bWr/aWTzVlHkQTzfNjPdNC/fNjHeNzHeNzHfODLhODXiOTblOTfmOjjlNzjmODnoODvpOTzrODzrODzrODzsNzzuNTruNjjqNjflOTffPDfWPDTMOS/FOSy+OSq6Oyq2Oym1PCm1PCu0PSmzOyqzPCizOie3QCytOCatOCezOy2rKyLDNTT9YGf/VGT6R1zwPFXrPVjnR1/hT2TST1+0U1p2R0FYSDlLRDJGRTFCRTA9Pyo6OCM7Mx4/Mx1QRypua0iKk2aVrHSRtHSOt3ORunieu4WhuIqQp31sgltLXzpBVzBMYzdXcj9fe0Bkg0BpikNrkUZpkUhnkUdkj0hljkpih0JjhkJkh0VnikhqjU1sj09tkVFuklJqkVBqkU5qkkxokkpnkUdpk0dtl0twnE92pVd2plp4qFw3OCg2OCo2Niw1Ni41NjA1NjA2Ny82OCs7Pi09QC1AQy5ERzRJSz5NTkZRUE5SUlJWVVNZWF1hX2xraYF1c5uAfbKIhseMitOVkuGUkeKQjdyLh9OEgcSBfbp/fLV/fLOBfreEgbqHhLmJhbeKhLKGf6iBepuAeJB/c4d6bnpyZmptX15qW1RpW1BqWktmWkpiX0xiX0xlXkxpXEtuW0xyW0t3XEt7Wkd+VUGGUj2bUkG2VkbOUkjaR0DiODjlMzPdMS3fMy/iNS/jNS7hMyzfMyndNSjcOSjTOCTQOSTPOibROifVOCnZNyrdNSzYNy3GOiu7OSm1NiW3OCe9OyvCPS7HOy7HNyzQOTD1XFTWPTXJNSvPQTW4MyS3Oii8Pyu/OinDOirGOivIOizKOy3MOi3POC3RNy3QMyrSMSnWMSveNzHlPDfqPjroOzfmNzTpNzXvOzzwPD/qNjnkMTXkNTroQkbtTU//eHf/cW7xYFvdSkPRODPRMi7cNzPnPzzgOTPgOTPgNzLgNzLiNjLjNzPlNzblNzbmNjjnNznqNzvrODzrOD7rOD7oNz3qNzvuNzvuNznqNzrkOjrfPTrWPTfLOzLDOy+6OCq1OiqzOyqvPCmvPCqsPCisOymsOymqOyisPSqmOCenOSqqOC2sLynLQEP/aHL0TV7zSFvtRFnlSFvZT17JVF23VFecWFVkTT9PTDlMRzRKRTFGRC0/Qic9RCM+SCNLVi5cZzx4gVSLmWaRpG2NqW6PsnKXuX2ftoiSp4B1hmRSY0M/UDBCUzFPYTlWbD1ie0JlgkJpikNqkEVpkkZlkUZikEhjjkdih0JmhkNnikhpjEprjk5tkFBuklJvk1NqkU5rkk9qk01pk0tpk0lqlklumktynk92pVd2p1h3qFk/PS49Pi49PTE9PTM9PTU7PDQ7PTI7PS8/Qi9ARC1DRy5GSjNLTDpOT0FRUUlSUkhZV0paWk5fXlxnZXJxbol7eaGDgLeHhcSPjNGPjNONis+KhceDf7p+ea96d6Z5dqV7dqx8ea6AfK6DfamDfaN/eJd8dIt6coF2a3NyZmZtX1xqXFNrW05sWkxsW0trW0tpXU1nXk1pXU1qXU1uXU1zXk15XEyBWkmTYE+bVkenTkC4Sj3FQDfPNi7YMSveMSvhNTHhNi/iNS7iNC3gMineNCfcNibaOyjROSTNOyTMOybOOyfROinWOSrZNyzTOS3CPSy1OiiwNSOyNSO7OSnEPC7JOy/LNy3ZPzf4W1TjSUHOOjDMQDO4NiasMyC1PCm8OSe/NyfANyfDNyjFNynJNyrONyzRNy3ZPDPbOjLeOTPlPDfqPjrqPTnnODXjNDHoOTbrPDnsOjroODrsPkD4UFD/YmP/cHD5aGXiVFDKPTbAMSvJNDDWOzffPTrgOzfiOzXhOjTiOTThODPjNzPkNzPlNTXmNjbpNjnpNjnqNzvrODzrOD7qNz3oNz3pNjrvODzsODnoODrjOzrdPjrTPjfJPDLAPC+2OCmyOimuOymqOyipPCioOyelOialOiilPCmgOSigOymgOSqiNiq1PjjbVFj7ZXDuS1zvSV3pSlzbTVvJUVq0VlagWlKKYFJQSTdITTlOSTVIQCs7NRs2Nxc+TyVMZjZsilR3lFyEm2WJmmSNm2aQo2uUrXSYsHyDlW1ufVxRYEM8SjA5RixBUDFPXztXaj1jekRlgkJqi0RrkUZpkkZlkUZhj0ZjjkdjiENpiUZqjUtsj01sj09sj09tkVFuklJtlFFtlU9tllBslkxrl0ptmUpyn05zolF7rF17rF16q1xEQTBEQjNEQjZDQzlDQztDQztCQjZCQzNERjBFSC1HSi1KTTJPTjlSUT9UUkVVU0RcWkNcXERcXU9hYWFpaHhycZB7eqaBfrWGgr+Ig8OIhMGEgbp/e655c6F0b5dvbZVwbJ5ybqF2cJ53cpp3cpJ0b4Vza3pyaW5tYmBsX1dqXFFrW0xtXExvXE1vXEtxW01xW05vXE5tXU5sX09tYE9zYE96X06GWk2fX1OkUEWuQji6OzLGNi3OMSjWMindNSziNzDhNi/hNC3gMyzgNCrdNSjYNyXUOSXPOiLKPSLJPSTKPifNPCnSOyrVOSzPOy2/QC2wOyesNSGuMyG6OCjEPC7KOi/ONS3YOTPwTknxVE3ZQjnMQjW+Py6mMR2zPCi+PCzBOSvBNyrCNinFNyvJOS7POzHUOzPhRD3jQTzkPzvnPjvpPTvpOzroODjnODXnODXmOTXmNzTpOzr0Skr/XFv/ZGP4Y1/MPTnBODK9NC7DODHVQT3eRUDfPTvZNDLiOzXiOzPiOTTiOTTkODTlODTnNzfpNzfqNjnrNzrrNjvrODzrOD7oNz3oNz3pNjrrNzrpNjnmODngOznbPjnRPjbGPDG+PC6zOCmuOymqOyimOyekOyijOiehOiefOiahPiuVNiScPSuaOSmaMifDUEvta23uXGbsUF7pSlzfSFfNS1O5UlOkW1KSY1GAalVKTThETDdKQi9IOSRCNxtGSCNVcD1nk1Z+s2+Cs3GDpWh9klmDjVmOlmOJl2R8jF9YZkNHVDg5RS02Qio6RCw9SjBKWDdXaD5lfEZogkNsi0VskEZokkZjkUZhkUdhj0dmi0ZsjEltkE5ukU9sj09rjk5rj09tkVFwl1RxmVNwmVNwmlBvm05xnU50o1J3plV8rV56rV55rF1JQzNKRDZJRTlJRTpJRztJRztIRjlIRzVJSDNKSjJMTDJOTjRSUDtUUT5YUkRZVEFdWT5bWj5cWUheW1RkYWhua354c5N9eKCBe6eDfauFf62DfKZ9d511bo9vaYVrZ4JpZYhqZottaIhtaYJtaHxsZnJrYmdqYF5nXVRoXE5oW0trXEluXUtxX0txX0twXUxwXU5wXU9wXU5zXU93XU5+XU6HXEySWEyhVUikRjyrOS+6Ny3KNy/TNi3aNi3eNi3fNi/fNC3fNCzfNCzfNyzdNynYNifRNiTPOiTMPCTKPCbLPSfOOynROyrTOizOPC2+QS+vPCeoMyGsMyC2OSfBPS7JOy/MOC7MMirgQTv4W1TgSUDQRDfKRjerMh+5PizKRjfMQjXKQDPLPzLNPzPUQTfcRTzjRj/iQDviPTnjOjfiNjTjNTTkNjXlOTflPDnkPzngPTbcOjXfQDrqTUjqUUzTQDm4KSO4LSa+NS3JPjfRQDvWPjnaOzjjOzvnPT3iOTbiOTbiOTbkODblOTXnOjbpOTnqOjrqODjqODjrODvrODvpOTzoODvnNzrnNzrpNjrmNjjiODjeOjjWPTjMPTXCPDG5Oy2uOSiqOyqmOymiOyigOyeeOyieOyiaOyeYPy2MNSKZPS6YOCqXLybNXFj3eXzfWF/mWGTaUVvKS1K5TE+pVlCdX1SQZ1WAblZQVzg/Sio8OxxDPRtVUStsdkSDomaUwX6HvHaGuHN8nmFugk11flGCh151fVZbYkA7RCk0PCU1PSg9RDI8RTI5QytDUDJVZT5ne0hpg0Zsi0dtkUdqk0dmkkdikEdjjkdojUpsj01vklBuk1Bsj01pjktqj0pqkkxzm1RznVVznVNynlFynk9zolJ3plV6q1p2plp1pVtzo1lSSztSSztSSj1SSj1SSj1SSj1SSj1SSztVTjxWTz1XUD5YUT9ZUkBbVERcVUVcVUViW0hiW0lhWUxiWVJlXVtrYWlxZnR1ant6boR8cIh/c4t/c4l8cIR1anttYnJlXWpjYGtgX2dfXGNfWl5eWlleWVVhWlJiWk9lW09nW0tpXEtrXElrXEdtXUZtXUZqXkhpY01xZlRxWkp1T0KLV0qcXFCjWUysWkylTj2mRTSnPCyxNyjCOC3RODDcNDHdMS3fNi/eNy7eNy7eNy7eNy7bNyvYNinXNynVOCnUOCnSOSnSOSnSOSvSOSvUOCvNOyy9Oyu2Pi2uOSipMSCrMiG3OSrAPC/DOS7INSvONS3UOjDbQzjdSz7USDnCPSy3MiPdUEbYSkDTRTvURDvaRz/eR0DgQz7gPDrgNzTmODfsOjrsOjrnNzfiNjTgOTPcPTfZRj7PQjnEOi+8NCi3MSa5NSm/Oy/DPzPDOjDKPTTSPzfaPzriPTvnOznsODntOTrnNzrlODrlODrlOTnlOTflOTflOTXlOTXgNDDhNTHkNjXlNzbmODnnOTrnOTrmODrrOz7mOTvfOTncPTrWQT3NQjvBQTa3PzGpOimjPCugPSqbPCiZOiaWOSeVOCaQOSaQQTCLPC2HLyORLya8TErkbW/nbG/NVlq9TE61Tk+qUU2iVU+bWE+XXVKVYVSKalNXWi86TRY3Rg9UYSl+jlCbsG+fvHmcvXiStXN+nWFogExcbUNZZEJUXUJIUDk/RDA6PSxAQzI8QDE6PjA8QzM6QzBBTjJSZD5dc0Jng0hwj0tvk0tskkdqkklpk0tnkEpskFBtkVNvk1Nsk1Btkk1rk0ptlkptmElxnExxnk1yn05yoVB0o1J2p1V5qll6ql55pmNtmVpijk9XTj9XTj9XTj9XTj9XTj9XTj9XTj9XTj9YT0BZUEFZUEFbUkNcU0RdVEVeVUZfVkdkW0pjWkljWU1jWU9mW1VqX11uYmRwZGhyZWx0Z3B2aXJ2aXJzZm1tYGdnW19iWFleW1ZaWlJZVk9XVEtYVElYVEhcVkheV0djWktjWklmW0lnXEhpXUdqXkZrX0doYEljYk1uZ1R2XE2BU0aaVk2rVk+wUki3UUWvSDmsQzCsPSyxOSm+OCzLODDVNjLZNDDdNi7cOC7cOC7cOC7bNy3aOC3ZNyzXNyvXNyvVNyvVNyvVNyvUOCvUOCvUOCvOOiy+PC62Pi6uOSimMSCnMiCyOim5Pi6+PC7GOi3HNCrLNCnSOzDcRTrhT0LfUUPdT0PbRj/YQDvTPDXSOzTWPTfaPTjcODbdMzPnNzfrNzjuNznrNzjnNzflOTfiPTnbQjrKQTe/PzS4OiyxNievNSayOCm4PS2/QDHFQTTNQDbXQDffPTjjOjfpNzfvNTbwNjnpNjrnNjznNzrmODnmODflOTXlOTXjOjXiOTLjOjPjOjXkOzbkOzjkOzjlOTnlOTnkOjvjOzvfPD3ZPz3QQTvEPza3PTKsOy2lOyugPSqcPSuXPCmWOyiSOiaROCaMOSeAOSeAOCmJNSqdPDW/UVDXZWXRXmG3TU2sTkykVE2dWVCYXFGXXlOXXlOYX1aMZlFgXy9TZypecjN6kE+Zr26lvnyZsnCIoGJqgkhhdUJUZTtKWDdGUDc/SDU5PzE1OC06PC9BQjQ9PzQ6PTI9QTM6QzBATTNSZD5edEVng0hxkE1wlExukkhrlEhrk0xokUtrklFuklRtlFNtlFFrk0xrlEhsl0htmEhwnUpwnUpwoExzolF1plR4qVh4qVh4qF5tl1hii1FZgkhdVEVdVEVdVEVdVEVdVEVdVEVdVEVdVEVbUkNcU0RdVEVeVUZfVkdgV0hhWElhWEdlXUplXUhkW0pkW0xlW1FmW1VoXVloXVtpXV1qXl5rX19rX19pXlxmW1liV1NfVlFaVk1XVEtVUUhSTkNRTUJTT0NXUUNYUkJeV0deV0VhWUZjW0ZnXEhpXkhrYEpoYkxiYU1uZ1V5X1CIWE6iXFSxVlGySUW4RUC5QDe4PjG3Oy+4OCu8OCvDOSzJOy/ROi/ZOC7bNy3bNy3bOS7aOC3ZNyzZNyzXNyvXNyvVNyvVNyvUOCvUOCvUOCvSOSvNOyzAPjC2Pi6sOSejMiCjMx+qOiazPiy5Pi7EPzDEOCvFMijINCrQPDDYRjncTT/iTkTZOjbYNDPUMjDWNDLbOTfhPTzmPDzpOzztOTzuNTrrMjfqMzfoNTjlOTnhPDrZQDq+OC21OiuxNieuNCWtNSWwOCi1PCu7PS7IRDXPQzbWQjjcPTfiOTToNjTtNTXvNznqNjnpNjnpNjnnNzfnNzfmOTXlOTXlOjPjOjPkOzTkOzbjPDbjOzjiOjnhOTneODjdOTrcPDzaQD7TQj3IPzm5OjGtNyukNiehOyydPCuZPCuUOymTOiiQOSaPOCWKOSZ6NiN5NiWIOSygRj25U0/AV1S4UE+rSUaiTUicU0yZWVCXXlOXYVeXYVeYX1aLZVBzckZ6jVaTpm6kuYCrwIees3t8kFtbbzw/UiRBUytBUC8/TDI6QzA2PC42OTA1OC85Oy5AQTM9PzQ5PDE9QTM5Qi9ATTNRYz1gdkdphUpzkk9ylk5wlEptlkptlU5rlE5ulVRvllVvllNullBslEtslUlsl0humUlwnUxwnUxwn051pFN4qVh5qlt1pldxoFhfiUpWf0VPeD5hWElhWElhWElhWElhWElhWElhWElhWElfVkdgV0hgV0hhWEliWUpjWktkW0xkW0plXUhmXkdmXklnX0xnXk9mXFBmXFJmXFNoXVdoXVdoXVdoXlVnXVRlW1FkWlBjW05dWU1aVkpWUkZSTkJQTEBQTT5UTkBVTz9XUUFZVEFbVkNdWERhWkdkXUpmX0xmYU1kY1FsZVV2XE+KW1GpYly4W1a2RkS5PDrDPDjGOzbEOjDCOC29OCm8Oiq+Py7HPy/TOS3ZNyzaOC3ZOS3aOC3YOCzYOCzVNyvVNyvUOCvUOCvUOCvUOCvUOCvSOSvNOyzBPzG3Py+tOiiiMyCdMx2iOCKsPSm1QC68Py2/OivDNyrFNSrLNyvOOi7OPC/TOjLeNjXgMjTbMTLdMzTgODjlOzzqPT/sPD7uNzzsMzjpMDbmMjXlNTjhNzfaNjXONjG3NSivNyeuNiasNyasNyauOSiyOim1OirDQTHKQjTUQTfcPzjiOzXmOTXrNzbuODftNjjrNzjrNzjqODbqODboOTTnOjTmOzTiOTLhOjLfOjTgOzfeOjjcOjjbOTfZOTnWPDrVQDzSQz3KQTu7OzKvNiukNieeNyicOyqYOymUOymSOyiPOiaNOCSMNyOHOSWAPSp2NSOBNSeZRTqqUEisTUepTEemUUydUEqYVUyUWk+UXlKVYVaVYVaXYVeNZ1SJhV+ZqXitvY6muIiQoXRzhllOYDgvQRstPhwzQiU6Ri49RjM7QTM6PTI6PTQ8PTU5OS0/QDI8PjM5PDE8QDI5Qi8/TDJQYjxhd0hqhkt0k1Bzl09ylkxvmExvl1Btl09wl1RxmFVwmFJvl1BtlkptlkhumUpwm0txnk1yn050o1N5qFh7rF13p1ttnVNlkk1bhUZTfEJOdz1jWktjWktjWktjWktjWktjWktjWktjWktjWktjWktkW0xkW0xlXE1mXU5mXU5mXUxmXkdnX0hoYElpYUxpYU5pYE9oX1BnXk9qYFRpYFFpYFFoX05oX05oYE1oYE1oYU5kXk5gWkxbVUdWUEJQTT5OSzpOSzpOSzpQTTxSTz5UUUBWU0BYV0NbWkZdXEheXUtiYFFmXlFtV0qGW1KsaWO+Y2DBTU3IQkPQOz3UODnTODTMNzDBOSu6PSm1Qyu8QivOOyvXNynYOCrXOivZOSvWOSrWOSrUOCnUOCnUOCnUOCnSOSnSOSnSOSnSOSnNOyzBPzG2PjCrOiihNiKaNB6bNyCjPSavQi2zOyq6OyzCOizHOS3LOC7OOjDQPDDZOjTpOTzsNDzmMznjMjjiMzjhNDjiMzjiMjXpNjzpNDnnNDrnNzrjOTzbNzbQMjHAMCi0NiitOiitOiirOiirOiirOiisOSavNya4OivBOy/OPjPYPzfgPTjkOzjoOTbsODfuNjbuNjbuNjbtNzTqODToOjPnOjPkPDPhOjLfOzLfPDXcPTfbPTrZPjzXPTvUPj3OQDzJQjzFQjq5PTWtNy2jNSieNyiaOiqWOymTPCmROyqNOiiKOSaJOCWINySDOCWDQC11NCJ7MyWTRzqkUUmhTkaeTkehV06YVUySWEyQWk6NXE6PXVKUYFWXYVePaFeNiWaYpXqdqYGAjmpda0hEUzQyQCYkMhktOiYwOyo1PS45PzM8PzQ9PzQ6OzM6OjA5OS0+PzE7PTI4OzA7PzE4QS4+SzFQYjxieElrh0x1lFF0mFBzl01xmk5xmVJvmVFymlNymlNymlFwmU1tl0ttmElwm0xznk90oFF2olN4p1l7qV56qF9xn1ZjkUlZhkNdhkpWf0dRekJlXE1lXE1lXE1lXE1lXE1lXE1lXE1lXE1lXE1mXU5mXU5mXU5nXk9nXk9oX1BoX05nX0poYElpYUxqYk1qYk9qYk9qYVBqYVBqYVBpYU5oYE1oYEtoYEtoYElpYUpqYktmX01iXUpeWEhYUkJTTT1NSjlLSDdJSDZLSjhMSzlMTTtOTz1QUT9RVEFTVkVTVkVbWUxeVkljUUV6WE6haGG2ZWHEVlXWUVLZQEPfOj7cODfUNzDHOy68PyuxQyq1QSjKOyrUNyjVOCnVOSrWOSrVOSrVOSrUOCnUOCnSOSnSOSnSOSnSOSnSOSnSOSnNOyzBPzG1PS+rPCmiOSSZNh+VNR2bOyKnQSqyQi65QC+/OyzDNyrFMijLNCvSOzDfPTjqNTruMzzrNj3pOD7nOj7kOz7jOj3iOTzfNTjhNzriOT7hPT7bPT7ROTbDMi+2MCevOSurPiqrPiqpPiqqPSmpPCipOierOCWvNiW5NynFOzDQPTPZPDXfPDfkOzjpOjfuODfvNzXvNzXuODXrOjTpOzTnPDTkPTTiPjXgPzfeQTraQTvZQT7VQT/RQD3NQj/BQDq7QDizPTOqOC2hNSibNSeYOCiVPCqRPCiNPCmKPCiIOiaGOSeENyWDNiR/NiV9Oil0MyF+OSqXT0GjWU6cUkeVT0WYVkqVWU6QW02OWk2MW02OXFGTX1SZYFeRZ1d+eFh5g15yfFpVYEI7RSwvOyUwOyowPC4zPTI0PDE2PDI8PzZAQTk/QTY8PDA3Nys4OSs+PzE6PDE3Oi86PjA3QC09SjBPYTtieElrh0x1lFF1mVF0mE5xmk5ymlNwmlJzm1JznFBym09wmUtumUpwm0xznk92oVJ5pVh7p1p6qF14pl1xn1dnlE9dikVWg0JfiE5YgUlSe0NnXk9nXk9nXk9nXk9nXk9nXk9nXk9nXk9nXk9nXk9nXk9oX1BoX1BoX1BoX1BpYE9qYVBqYk9qYk9qYk9pYE9pYE9pYU5pYU5pYU5oYEtoYEtoYEloYEloYUdoYUdoYUdmX0xlXktiW0lcV0RXUj9QTTpMSThJSDZJSDZHSDZHSjlHSzpITDtJTTxITz9KTj9QUUNYUkZbT0NpUkSDWU2WVkywU0zUWlnbSUriP0LhOTnaNzLPOzHCPy20QiqzPCTJOinTNyjUOCnTOirVOSrTOirTOirTOirSOSnROinROinROinROinROinROinNOyzBPTC1PS+sPSyjPCmYOCCQNBuVOSChQSmtQy22QS+/PS/ANivCLyXHMCfQNi7eOjjoNTnuNj7sO0HqQEPmQUXgQkPcQEHZPz/NMTLQNjbTOjzRPTvJOzm+NzG1NC6tNCmqPC2lPiulPiulQCylPiukPiimOyepOieqNyWyNye7NyrFOC7MNzDUOjLePDfmPznrOTfsOTXsOTXrOjTpOzToOzTlPTTiPjTgQjfdQznaQzzVQjvPQT3KPzzHPTu/PjmxPDOpOi+iOCucNiiYNyeUOCmROimNOiiLPSmJPCqHPCmDOieCOSiANyZ/NiV9NiR4MyN4NSWFQjKYVUWdV0uUUEOQUESVWkyTWU2QWk6QXFGQXFGSW1SVXFWYW1aOYlVrYkVWYD1KUzQ9Ryw2PyoyPSw0PjM1PzY2PTY4Pzg9QjtDRj1FRzxDRDZAPi87OSo3OCo9PjA6PDE3Oi86PjA2Pyw9SjBOYDphd0hrh0x1lFF1mVF0mE5ym09ymlNwmlBxm09ynU5xnE1wm0xvmktynU51oVR5pVh/q2B+qWF6pV1xnFVmkUxfiUddh0VeiEliiVBZgElTekNoX1BoX1BoX1BoX1BoX1BoX1BoX1BoX1BoX1BoX1BoX1BoX1BoX1BoX1BpYFFpYFFtZFVsY1RqYVJpYFFoX1BnXk9nXk1oYE1pYU5pYUxpYUxpYUxpYUpoYEloYUdoYElnYUtmX0xlXkthWkdcV0RVUj9QTTxNTDpFRjRERzRESDdESDdCSTlCSzpCSzpDSjpJSz5TUURTUEFYTDxlSzp0RTWVSD7CWVPZUk/gREXgOjrcNzXVOzPKPi+6PSm1OCLJOinPOCfQOSjROinSOyrSOyrSOyrSOyrROinROinROinROinROinROinROinNOyzBOzC2Oi6tPCynPiuZOSOPMxqTNx6fPyeiOSOvPCnAPjDGPDHMOC7QNy/ZPDXjPz3sPULuP0TpQ0XiREPYQD/KOzfANTC7MS65Lyy8NTG+Oja7PDazOjKqOC6kOCyhOiuhPS2fPiugPyyhQC2hQC2hQSujPiqmPSqpOyqtOiiyNyi5NSm/NSvJOTDWPzjgQzzlPDfoOzXoOzXnPDTlPDXkPTThPjXeQDXcRDnYRDrSQzvKQTnEPzq8Oza4ODWwOTOiNy2ZOCiVNSeTNieROimPPCqLOimFOCaIPSqFPCuDPCqAPCl+Oid8OCV7NiZ7NiZ5MSOAOCqMRziWU0OSUEKLTD2QUkWZX1ORV0ySWU6UW1KWXVSWXVaXXFaWWVSMXlFhWDtFTSg2QB44QSY+RzI8RTQzPTItNy4xODE3PjZCRTxHSj9ISTtCQzE/Pio7OiY3OCg9PjA5OzA2OS46PjA2Pyw8SS9OYDphd0hqhkt1lFF0mFB0mE5ym09ymlNwmlBxnE1xnExxnExwm0twm0xznk93o1Z7p1yCrWWAq2R4o1xqlVBdh0VZg0FeiEhlj1BjilFagUpTekNpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFpX1NqYFdqYFdqYFdqYFdqYFZqYFZqYFRqYVJqYVJqYVBqYVBqYk9qYk9qYk9qYk1qYk1nX0pnX0pmXkllX0liXUlaWENTUD1NTDpISTdFSDdBRTZARDU/RTc/Rzg/Rzg+RjdHSz1JSz1BRTRLSjZcUTthRS+DSjnAal3cZ2DjVVPkRkXlQUDgQT3VPjXJPTDGPS3GNCXLNSbMNifNNyjNNyjOOCnROyzTPS7SPC3SPC3SPC3SPC3ROyzROyzROyzOPC27Mii2Ny6xOy+oOimaNyKUNR+VNx6cOSKsQS2xPCu6NinBNCrNNi/XPDfiQz/pR0ToREXoRUjdQ0PJOja7NjG0ODCuOC6pNCurOS+pOS6kOC6gOC2bOSyWOiuTPCuSPCuWPSuYPSqZPiuaPyybQC2dQSygQS2jQC2iOyqlOiirNyiwNim2Niu+OC3EOzHMPDPaPTbgPTbiPzjiQTfiQTneQjbaQDbXQDXYSD3SRTvHQTi7OzKyNS+qMy2mMSqfMiuZOS2SOyqROSuNOiqLOimIOymHOyuFPCuAOSd+OSl8OSh8OSh8OSh7OCd5NiZ4MyR3LSCLQTSXT0OTTUGOTECRUUWTVUqOUkeYXFKYXFKRVU2QVEyXWlWVWFOUV1STZ1pdVDVJUSpBSyhCSyw+SC83QCsyPS00PzE0PDFIUENaXlBXW0pNTzpERi5BQSc9PSU6Oyk+PzE7PTI6PTI7PzE0PSo7SC5QYjxjeUpsiE11lFFzl09ylkxwmU1ymlNxm1Fxnk1xnktyn05yn05zn1B2olV7p1x/qmKCrWZ4o15qk09giUdeh0VhiUpmjlBokFRkiVNbgExUeUVpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFpX1NqX1lqX1tqX1tqX1lqX1lqYFdqYFZqYFRqYFRqYVJqYVJqYVJqYVJqYVJqYVBqYVBoYE1oYEtnX0pnX0pkXUpeWUVVUj9PTjpJSjpFSDdCRDZARDU/RTc+Rjc+Rjc9RTZARjg+RTU+RjFITDVNSTBVPyd/UTq8c2LLY1jgX1rrVVTnR0fiQD7gQT7YPznOOjDNOSvNPCvPPS7PPi3POy3OOyvNOSvNOirOOizQOivQOizQOivQOizQOivQOizNOy7JPzXFQjq8QjeuPS+gNySWMR2WMR2bMh2mNSOyNyjDOy/RQTjeRT/mSUTpSkbqS0jeQ0HbRUTQQj68PDOvOS+pPTClPzGfPTCfPzGcPjKXPjCUPi+PPi2KPi6HQC6IPyyOPSqROyqSPCuTPSyUPyuWPyyXPiyZPiyfQC6hPS2kOiyoOCysOCuxOC22OjC8OS/KPDLQPDLTPzXVQTfXQznWQznURDnRRTjKQjbDQTS5PTOwOjCpNi+iNS6fNCyZNyyROy6OPSyKOyyIOyuGOiqEOyqDPCqBPCx+Oyp8Oyl7OSl5Oil4OSh3OCd1Nid3NCSANCeQRDeYTkORSz+MSj6PUUSSVEmQUkeTU0qYWE+WVU+XVlCcXViUV1KOU0+KY1RdVzVYYzlfakJaZkJJVDY2Qyk0QCo8SDRPWEdZYlFfZlRXXEZKTjdCRSo/PyM8PCI5Oig9PjA6PDE5PDE8QDI1Pis7SC5QYjxkektsiE11lFF0mFBylkxxmk5ymlNxm1FzoE9yn0xwnUxxnk10oFF4pFd8p19/qmN7pmFvmlVjjEpdhkRgiElljU5ljU5ji09kiVNbgExUeUVpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFpX1VqX1tqXl5qXl5qX11qX1lqYFdqYFZqYFRqYFRqYFRqYFRqYFRqYFRqYFRqYFZqYFRsYU9rYExpYU5pYU5mX0xhXEhZVkNTUj5NSzxISTlERjhBRTZBRTY/RjY+RDY8RDU9RjU3QC1ASDFJSzNGPyVXPyeHWkO3c2C2VkrZYlrwZWLsVFPmRkjrR0jmQ0TYOjfLNy3JOirJOizJOirLOSzKOCnINinINifKOCvLNynLNyvLNynLNyvMOCrMOCzLOC7CMy2+NS+2Ni2tMyihMCKeLx6gMSCnMyS8QTLHQzfWRz/hTEbnTEfpSkblRkLfREDXQ0HPREHBQDqxOzGkPC+hQTGcRTSYRTOTRDORRDSPQjKKQTCFQS6CQS9+QS5/QC6GOiqLOSuLOimKOyqLPCuNPCuOPSqPPCqWPy6WPS2bOyudOSqgOCulOS2oOi2uOS+4Oi6+OTDBOzDEPjPFPzPFQTTDQTPBQTS2OyyyOiyqOC2jNyueNiuZNyyYNy6TOy+LPC+IPCyHOy2EOyyCOiuAOyuAOyt/PCx9Oyt6Oyp6Oyx3OSp2OCl1Nyh0Nil2NCaIOzGURjyWTkKOSj2ISDyNT0KRU0iSUkmST0mZVE+ZU1GYV1OaXVqTWVWNW1SNbFuBfVh+iV6Ai2FseFJMWDQ2RCM9Si5MWkBlcVllb1ddZU1QVT5FSTA/Qyg9QCM6PCQ4OSc7PC44Oi85PDE9QTM2Pyw8SS9QYjxkekttiU52lVJ0mFBzl01xmk5ymlNwmlB1olFwoExunUxwn091pFZ5p1x9qGB8p2BwmVVmj01chEVchEVljE1pkFFmjU5ghkljiFJaf0xTeEVpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFqYVJqYVJqYVJqYVJqYVJqYVJqYVJqYFZrYFxrX19rYF5rYFxrYFprYVhrYVdrYVVrYVVrYVVrYVVrYVVrYVdrYVdrYVhrYVduYlJtYlBqYk9qYk9oYU5lXktfWkdZVkVSTz5NSzxHSDpERjhDRTdCRDZARDU8QzM8SDQ5Qi1GSjNMRjBPOiVxTDmaY0+qXk6hQTXGU0znY1/wXl7tU1XrSk/pRErhQUHMOTHHOS3FNyvFNyvIOC3KOi/LOzDNOjDRPjTRPjTSPjTSPjTTPzXTPzXTPzXTPjfTPzvRQj7LRD7GRj3CRjzDST7HTUDOUETZU0rdUEfiTUfkSUXkR0LiQz/gQT3bQj3VRkLJRD+6PzerPTCfPi6aQzCVRzOUSTaNRjSMRTOIQzOFQjGAQS99QC56QS58Py2COiyGOCyFOSuGOiyGOiyHOy2HOyuIOyuJOiuLOimOOCmQOCqVOSyZOy+dPS+iPDCqOi+tOC6vOS+wOi6wOi6wOiyvOSuuOCqoNymlNyieNimbNiqVNyuSOC2QOS+OPDCIPC6FPC2EOyyBOSp/Oip+OSp9Oip9Oyt8Oix6Oyx5Oyx3OSpzOCpxNihyNyl1NSmMRDiSSD2RSz+KSDqHSTyLT0STVEuXVEyWUUybVFCXUU+UU0+WXFiQX1iQaF6XfmqUlHCFkmZ1gldZaD9DUis/TypQYDxjclFldFVcaUtOWD1DTDE/RSs+Qik9QSg7PSc3OCg6Oy03OS45PDE9QTM3QC08SS9PYTtieElsiE12lVJ1mVF0mE5ym09ymlNvm1BxoE9vnk1vnk1zolJ6qF18qmF5pF10n1pjjEpeh0Vbg0Rfh0hnjk9qkVBmjUxgh0hih1FZfktSd0RpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFqYVJqYVJqYVJqYVJqYVJqYVJqYVJqYFRrYFprYFxrYFprYVhrYVdrYVVrYlNrYlNrYlNrYlNrYlNrYVVrYVdrYVdrYVhrYVdvY1VuYlJrYlFrYlFrYlFoYU9kXU1gWkpYUkJSTz5OSzxJRzhHRTZERTVCQzM+QjE9STE/Ry9MRzFTPitnPS2VWkytX1OcPjSeMyu2PznYWFXzaWf2ZGXrUlXmSk7oTlDaSUTTRjzNQDbLPjTOQDbSRDrVRz3XRz7aSkHaSkHdSkLdSkLeS0PeS0PfSkPgS0XrU1LoVFTjU1LcUk/YU0zYU0zbVE7gVU7gTEjhSUbjRULiQ0DkQkDiQ0DjREHgRkTZSkbKRUC5PjesPTKhPzKYQjGSRTOQRzSMRTOIQzOHQjODQDCBPy9+PzB6Py98Pi+AOi6DOS6DOS6DOS6DOy2DOy2DOy2DOy2BOSqDOiuFOSuHOiqJOiuNOy2PPC6TOy+aOi6eOS2fOS2gOiyhOSyiOCuiOCqiOCqfOCmcOCmYOCiUOCmPOSqMOiyJOi2HOy2EOi2COiyBOSuAOCp9OCl9Nyt8OCt7OSt6OCx5OS14Oi12OCtxNSpvNSlxNyt0OSuMSDuNSTyJST2ESTuFSz+MUkaTV02YWE+YUU2cVVGXU1CTVlGSYFmIYleDZ1uGemRuclFaaUBKWTBBUihJWjBXaT9kdk5qfFZYaUVMWzo/TC46RCk8RCw+Qy08QS06PSw4OSs6Oy02OC04OzA+QjQ3QC07SC5MXjhfdUZphUp0k1B0mFB0mE5ym09zm1RwnFFunU1tnkxwoVB3qFl8qmF6qGBynVhpk1Fag0FchEVhiElljE1njk1njktmjUpki0xjhlBZe0lSdEJpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFrYlNrYlNrYlNrYlNrYlNrYlNrYlNrYVVsYllsYllsYllsYlZsYlZsY1JsY1JsZFFsZFFsZFFsY1JsY1RsYlZsYlhsYlhsYlhvY1VuYlJrYlFsY1JsY1JrYlFnYFBkXU1eV0dZU0NTTT9NSjtLSDlHRTZFQjM/Qi87SC4/SC1PQy1hPS2DRTqrWFK0TkqeLCuyOjm5PTvTU1LycG7+dnbxZWbrWF7wXl/jVVHaUEbUR0DQQzrRRD3URz7WR0HWRz/ZSEPaSkLcSETdSkPeSkbeS0TgS0fgS0fiSEjhR0ncSEjZR0fWSETXSETYR0TbRUTgQkHkQULmQkHoQkLnQ0LkQkDfQT7bQT/bSkfKQz+5PDauPjOiQDOYQTCQQTCNRDOKQTKIQDGHPzGFPS+CPDCAPC9/PTF/PTGBOzGBOzGDOjOBOzGBOzGAPC+APDF/PS+APC+APS2BPC2AOyyCOiyBOSqCOCuDNymMOi6POC6ROS2UOi+XOy6aPS6ePC+fPi6ZOSmWOSiTOiqQOiuKOyyHOyuEOyyCOiuCOiyBOSt/Nyl+Nih7NSl7NSl7NSl6Nil4Nip4OCx3OSxzOCpwNClvNSlyOi12PDCLTUCJSzyESjyCTT2FUUOLVkiSWE2XV06TTkmZVE+XVlKWXVaQZVx7XlBmVkZgXkdFTy0+Tik/TyhKXDJfckVrflFleEtYakBNXzdAUS02RSY3RCo9RjE9RDQ6PjA3Oy04Oiw6Oy02OC04OzA+QjQ3QC05RixJWzVbcUJlgUZykU5zl090mE5ym09zm1RwnFFtnExvoE9zpFV4qFx6qGBzoFtpk1FgikhZgUJehkdljE1njk1mjUpljUdljUdmjUxhhE5YekhRc0FpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFrYlNrYlNrYlNrYlNrYlNrYlNrYlNrYlNsYlhsYlZsYlZsY1JsY1JsZE9sZE9sZE1sZE1sZE1sZE9sZFFsY1JsY1RsYlZsYlZvY1VuYlRrYlNsY1RtZFVsY1RpYFFmX09iW0teV0dYUUFSTDxPSTlKRzZJQzNBQy46RytARipVQCt4RzmjUEy0SEi2ODy6MznIQUXEP0DKSknfYmDxcXDwbm7nYmXiWlrbUU7VTETPRD/NQjvPRD/QRT7QQj7NQDnSQz/SQz3UQ0DVRD/XQ0HYREDZRUPaREPdQUTdQUTeREbdR0jfSUjgSkniSEjlR0jnQUPqQUTsQkXsQkXnQUHiQD7bPTrVPTraRkbJPTy5ODOwOzKmQDSYPzGQPjCOQTGKPC+KPDCJOzGIOjCHODGGOTGFOjSEOzSBOzOAPDOBOjSAPDN/PDN9PTF9PTN8PDB8PDB8PS58PS57PC18Oix7OSl6OCp7NyqCOi6DOS6HOS2JOS6NOS6ROy6VPC6WPS2SOSmROimNOiqKOyqHOyuDPCqAOyt+OyqAOCqAOCx+Nip9NSl8NCh6NCh6NCp5NSp1Mil2Nix2OC1yNitvMylvNSpzOi94QDOLUUOGTj+BTj2CUUCFVkaJWEmOVUqRUkmST0mXVE6TVE+RXFaKZlpuW0pQSzdFSzFBTjBLWjlXZ0NgckpneU9kekxWbD5HXS9BVi03SCQxQCE2Qio9RjU8RDk4PTY3OjM5Oy47PC42OC05PDE/QzU3QC03RCpGWDJWbD1hfUJvjktxlU1zl01ym090nFVxnVJvnlBxolF1pld2plpzoVlql1JijEpbhUVehkhgiEljiktljEtmjUpmjkhmi0ZliUlgg01XeUdQckBpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFrYlNrYlNrYlNrYlNrYlNrYlNrYlNrYlNsYlZsY1RsY1RsY1JsZFFsZE9sZE9sZE1sZE1sZE9sZE9sZFFsY1JsY1RsY1RsY1RuYlRtYVNtYVNtYVNtZFVsY1RqYVJnYFBkXU1fWUlaU0NUTj5QSzhNSDVJRDFEQy5ARipERChbQiyIVEevXFirPkGsLzPOSU7GP0XAOz67OzzERkfYWlvjZWbbWVvMR0jRSkfQRULNQj/QQj7URkLURkLQQj7JPjfPRD3PRD3SREDURUHWRULZRUPaREXdREbeP0PfQETeQkXfRUXhR0fgRkbgQkPhPj/oQkTpQEPoPkHnPT7kPj7jQT/hQ0DfRUPWQkLFOTi2NTCwOzSmPzaaPjOPPS+NPzKIPC+HOjCHOjCHODGHODGHODGIOTSIOzWCOTKAOjKAOjJ/OzJ+PDB+PDB8PDB8PDB4OCx5OS16Oi56Oi57PC17PC16Oyx6Oyx9Oy9/OS+ANy6BNyyENiqFNSqGNyqGNyiKOCqIOSqIOyuFPC2EPC2APSx+PCx9Oyt9OSx9Ny18Nix5NSp6NCp4NCl4NCl4NSxyMih1NSt2OC1yNituNCluNSp0OzB4QjaKVUeEUEKAT0CEU0SIV0mMVkqMUkeNTkeVVE6UVU6LUkuEWE1/ZFNlWkRHSzI9SixJWDlaa0loeVVjeFFZbkVTaD1OYzhKXzQ6TCYwPx4sOR01Pik9QzU8Qjg6PDc5PDU7PTI7PTA3OS45PDE/QzU4Py04QilFVTFVaDthekNuik1yk05ylk5ymlFznVNxnVJyoFV1o1h2pFt0olpvmlVmkE5eiEhbg0RkjE5hiUtgh0hiiUhmjUpnjktlikVhhUVgg01XeUdQckBpYFFpYFFpYFFqYVJqYVJrYlNrYlNrYlNqYVJqYVJqYVJqYVJqYVJqYVJqYVJqYVJrYlNrYlNrYlNrYlNrYlFrYlFrYlFrYlFsY1JsY1JsY1JsY1JsY1RsY1RsY1RuYlRrXVBwYFF0ZFdyZFduYlZqYFRoYFNoYlRnYVNlYlFjXU1bVkNWUT1TTjhOSDJHQSlLRyxJPyRiSTORZ1e2eG27bGW4WVe5T0+2QkW9QkXCREfIRkjNSEvQSkvSTE3TS0vPRUXQREXTRUTWRkXVRkLSQz3PRD3PRjzIRDjJRTnKRTzMRT/SREDXQ0PaQUTbP0PhQkbiQkThQ0TgREXgREXhRkTjRUTkRETjQ0PkQkDkQD/jPz7jPz7iQD3iQD3eQz/TQj/FPjq2OTOqNzCfOjCXPTKOPjOGPjKDPzKBPzOBPTKBOzOEOTOHODOIODGJOTKFOzCEPC6EPC6DOy2BOy+AOi6AOi6AOi5+Oi1+Oi1+Oi1+Oi19Oy99Oy99Oy99Oy99OTB9OTB+ODB+OC6ANy6ANy6ANy5+OCyAOCx+OCx9OSx8OC17OS16OCx4OCx4OCx4OC54OC53Ny11Nyx2Nix0NitzNSpxNSttMSdyNixuNCltMyhvNittNClxOC1/ST2FU0iFU0qGUkeIUkiLUEiQUUqUUUuVUkyTVE2NVEuJW06CY1FvX0hZVTpNVjdPXztqfllieFFZb0hVakNSZ0BNYjtJWTVDUjE3RCY0PiMyOiM2Oyc8PjBAQjVAQDY8PjM1OC0zOS00Oi43Oi85PS87Py49Qiw8RShTXzthckZuhlJzkVVylVFymlNznVNynVV1nlp+p2V+p2VwmFliiktehkdehkhehEdghkliiEtkik1mjU5ljE1jiktgh0hehEdfgkxUdkRLbTtpYFFpYFFpYFFqYVJqYVJrYlNrYlNrYlNqYVJqYVJqYVJqYVJqYVJqYVJqYVJqYVJrYlNrYlNrYlNrYlNrYlNrYlNrYlNrYlNsY1RsY1RsY1RsY1RsY1RsY1RsY1RuYlRyYlNxYVJyYlVyZFdyZlpvZ1ptZVhqZFZnY1draFltallqZ1RoY09jXkhbVT1STDRQSjBIPiVRPylrUD1/WEeETkKIRT2TRD+xV1a4VFS7UVHAUE/ATk3BTU3CTErDS0rQVFTISEfCPT7EPTrQQkDTRUHPQjvHPjTKRDnJRTnLRj3NRz7URkLYRETcQUXdQUXhQkbhQ0ThQ0TiREXiREPhRkThRkThRkTgRUHfREDgQj/fQT7gQT3gQT3gQT3eQz/URT/IQzy6PjasOjCgOTCUOi+KPDCCPDCAQTJ+QDN+PjR/PDODOjOGOTGIODGJOTCHOy6FPC2EOyyEOyyDOy2COiyCOiyCOix/OS1/OS1/OS1/OS1+Oi9+Oi9+Oi9+Oi99OTB9OTB9OTB9OTB9OTB9OTB8OTB8OTB8OTB6OjB6OjB5OS95OS95OS93OS53OS53OC93OC90OC5zNy1yNixyNixwNitwNitrMSZxNyxtNClsMyhvNitsMyhwNyx+SD6EUkmFU0yIUUqLUEqQUUyUUE2VUU6UU0+KT0eFU0iAW0t7ZVBzaVBoa0xmcVFneFRedE1YbkdQZj9MYTpLXzpLXDpHVjdDUDQ7RSw4QCk2Oyc3Oik8PS8/QDI+PjI7PTA0OjAzOzA1OzE2PDA6PC88Py4+QSw+RCpRWzlebURrgVJwjFJwk1NxmVJznVNznlZ4n158omV4nmFrkVRghkldg0Zdg0ZcgkVghklhh0pjiUxli05kik1iiEtghklehEldf0xSdEJJazlpYFFpYFFpYFFqYVJqYVJrYlNrYlNrYlNqYVJqYVJqYVJqYVJqYVJqYVJqYVJqYVJrYlNrYlNrYlNrYlNrYlNrYlNrYlNrYlNsY1RsY1RsY1RsY1RsY1RsY1RsY1RuYlRxZFRvX1BtXVBtX1JxZVlvZ1xsZFloYlZmYldxbWF7eGl+e2qAemp6dWJwaVZlYEpUVDxGRi5DPihNQi5TQC9VOChdNypsPTNuNzB1OTF+OzWHQDqSSUKbUEqlWFCtWlK7Xlm6U063R0W8Qj/IRELRRkPTREDPQDrQQTvQQzzSRT7UR0DWR0PaRkbbRUbeREbfQ0TfQ0TfQ0TfQ0TgREXfRUXfRUPfRUPeRUDeRUDcRD/bQz7cQz3cQz3cQz3bQz7WRUDORT/DQjyzPjWiOjGUOC2IOSyDOy2CQDJ/QDF+PjJ/PTGDOjGGOTGIODGJOTCHOy6EOyyEOyyEOyyCOiyCOiyCOiyCOix/OS1/OS1+Oi9+Oi9+Oi9+Oi9+Oi9+Oi99OTB9OTB9OTB9OTB8OTB7OC97OC97OC97OzF7OzF6OjB5OzB4Oi94Oi94Oi94Oi90OC50OC5zNy1zNy1yNixxNStvNSpvNSpqMSZvNittNClrMidsNippMydtNyt9Rz2HUEmHUEmLUEqOUUyRUk2SU06UVVCRVlCMV0+HW1B+Xk90Yk5vaVFvclVsd1lmd1VRZUJLXzpFWTZEVTNFVjZHVjlHVDhFUjg/STA8RC05Pio3Oyo6PC48PjA7PS85Oy42PDI1PTI2PDI2PDA6PC88PjA9QC09QylNVzVaaUBmfE1siE5ukVFxmVJ1n1V0n1d6oWB3nWBulFdjiUxcgkVcgkVcgkVagENfhUhhh0piiEtkik1jiUxhh0pfhUhdg0hbfUpQckBHaTdpYFFpYFFpYFFqYVJqYVJrYlNrYlNrYlNqYVJqYVJqYVJqYVJqYVJqYVJqYVJqYVJrYlNrYlNrYlNrYlNrYlNrYlNrYlNrYlNsY1RsY1RsY1RsY1RsY1RsY1RsY1RuYlRyZFdvYVRtX1JrX1NrYVdsY1psZVtqZl1qZl14dGmIhHiRjYGVj4GSjH6JgnJ9emdgY05PVD5ERzJGRTFIQzBGPSxMPCxWQzRQOStSNipWNCpZNSlcNithOS9lPTFtPTGKS0KcUkmuVU+2Tku8RkTGQULSREPYRkbUQD7VQT/WQj7WRUDZRUPaRkTbRUTdRUTeRETfQ0TfQ0TeRETeRETdRUTdRULdRULbRkLaRT/ZRD7YRT7XRDzXRDzZRD3YRT7URDzSRT7JRj66QTinOzGYOCyMOSuFPC2DQDB/QDF+PzB/PS+DOjGEOi+HOS+IOi6EOi2EOyyEOyyDOiuCOiyCOiyBOSt/Oit/OS1/OS1+Oi9+Oi9+Oi9+Oi9+Oi9+Oi99OTB8OTB9OTB7OC97OC97OC97OC94OC57OzF5OzB5OzB5OzB4Oi94Oi94Oi92Oi9zNy1zNy1zNy1yNixxNStvNSpvNSptNClqMSZvNitsMyhoMiZrNSloMiZsNip8RjyKT0eMT0qNUEuPUk2QU06RVlCQV1CMWlGJXVKFYVV5X1BpWkdkX0lkaE9cZktOXUBFVThBUTQ9TTA8Sy4/TTNDUTdGUjpHUztCTDQ+RzI6QS85PSw5PS45PS44PC03Oy03PTM2PTU2OzQ2PDI6PDE7PS88Pyw8QSpKUzRWZT5ieElqhkxukVFzm1R3oVd4olp7omFymFtli05cgkVagENcgkVcgkVagENfhUhghklhh0piiEthh0pghklehEddg0hZe0hOcD5FZzVoYVFoYVFoYVFpYlJpYlJqY1NqY1NqY1NpYlJpYlJpYlJpYlJpYlJpYlJpYlJpYlJrYlNrYlNrYlNrYlNrYlNrYlNrYlNrYlNsY1RsY1RsY1RsY1RsY1RsY1RsY1RsY1RyZlh0aFxzZ1ttY1lqYVhsZV1zbmh6d3CBfneQjYagnZSopZyrp5yopJmjnZGZlod6e2tjZlNPUj9HSjdFSDVCRTJCRTJFSDVLTDxKSDlHRDVEPjBBOSxBNytANipGNChTNSpxQjiMUEifUEuvSUe/R0nMRUnTQkXWQELZQELaQkHbQ0LaRUHaRUHcREHcREHeRETeREbeREbeREbeRETdRUTdRUTbRkLaRkLXRkHWRj7URT3URT3TRj3URT3VRj7UQTrTQzvORT3BQjmuPjOeOS2ROy6KPC+EPzCBPy+APi6APS2BOy+EOi2GOi2HOy6EOi2DOy2COiyCOiyCOiyBOSt/OS1/OS1/OS9+Oi9+Oi9+Oi99OjF9OjF9OjF9OjF8OTB6OjB8OTB5OS95OS94OC54OC52OC15OzB5OzB4Oi92Oi92Oi91OS51OS50Oi5yOC1xNi5xNi5wNS1vNCxuMytuMyttNCtqMShtNy1qNCpoMihqNCpmMidqNit9RDuNTkePTkiQUUqQVEyQVU+OV1CKWVKDW1F7WU12XE9rWkpdVUJZWERZXkhPWUE/SzM6SC83RS40Qis1QSs4RC49STNDTDdFTjlCSzY/SDU8RTI6QS84Py83Pi41PCw0Oiw1PDQ1PDU2OzU2OzQ5OzA6PC87Pi07QClHUDFSYTpgdkdphUtvklJ1nVZ5o1l5o1t4n2BukVdgg0lafUNbfkRegUdegUddgEZgg0lhhEpihUtihUthhEpgg0lfgkhegUlXfElMcEBCZjZoYVFoYVFoYVFpYlJpYlJqY1NqY1NqY1NpYlJpYlJpYlJpYlJpYlJpYlJpYlJpYlJrYlNrYlNrYlNrYlNrYlNrYlNrYlNrYlNsY1RsY1RsY1RsY1RsY1RsY1RsY1RsY1RrYVVuZFpwZlxsY1prZFxybWeEgXyRkIyno6C1sa7EwbzJxsHJxL7FwLrAubG5sqiknI+IgnJmY1RQUT9GSTg+RTM7RDE6RjI4RTM4RTM4QzI6QjM8QjRAQzhDRTpHRTk+NChQOi9lPzaARUGhUE+/WFvKUVbKQ0nVRkrXRUbaRkbbRUTdRULeRELdRD/eQ0HeRETeREbeREbeREbcREPcREPcREPaREPZRUHXRkHVRkDTRj3SRTzQRjzRRz3URT3UPzjVQDnQQzrGQzm2QTelPTCWPS+MPS6GPi+CPy+BPi6APS2BPC2DOy2EOi2FOy6COiyCOiyCOiyCOiyBOSt/Oit/OS1+OCx+Oi9+Oi9+Oi9+Oi99OjF9OjF9OjF9OjF6OjB6OjB5OS95OS94OC52OC12OC10OC13OS51OS51OS50Oi50OC1zOS1yOCxyOC1xNi5xNi5wNS1vNCxuMyttNCtsMypqNCpoMihsNixpMylmMidoNCllMSZpNSp7QjmOTUeSTUiRUEqPVEyNVk+HWE6BWU98XFFzXE5rW0xgV0ZWU0JQU0JKUT9ASTY0QCwzPCsyOyowOSgwOSgyOyo1Pi05QjE8RTQ/SDc/SDU+RzQ6RjI6QzI1QC8zPi0xPCwzOjMzOTU0OTU0OTI4OTE5Oy47Pi07QCpDTC9PXjddc0RphE1wk1N3n1l5o1l3oVlxmFlmiU9afUNYe0Fcf0VdgEZdgEZegUdgg0lgg0lgg0lgg0lgg0lfgkhegUddgEpWe0hKbkBBZTdoYVFoYVFoYVFpYlJpYlJqY1NqY1NqY1NpYlJpYlJpYlJpYlJpYlJpYlJpYlJpYlJrYlNrYlNrYlNrYlNrYlNrYlNrYlNrYlNsY1RsY1RsY1RsY1RsY1RsY1RsY1RsYlZqYFZqYVhrZFprZ151cGqIhYCfnpqwsK7DwsDT0tDi4d/n5uTn4+Di39rc19PYz8jOvLK4pZeXh3p5bV1fWUlLTDpARTE7RC8+SjY9SDc9RjU7QzQ7PjU6OzM5ODM4ODA9PTNDPDJONzFhODSISEivXV/FYGTKV1rNUVPTTk/XTUvbS0reSEfhRkTjREHiQkLfQ0TeREbeREbdQ0XdQ0XcQkTcQkLbQ0LaREPYREDVRD/TRj/SRTzQRjzQRz3URT3ZQDrZQDrRQjrIQzq8QzqsQDSZOy+MOSuJPS+DPi6BPi2APSyBPCyDOyyDOyyEPC2COiyCOiyCOiyBOSt/OS1/OS1+OC59OS5+Oi9+Oi99OjF9OjF9OjF9OjF9OjF9OjF6OjF5OjF4OTB4OTB3OC90OC5zNy1yOC10OC5zOS5yOC1xOC1yOC1wNyxwNyxwNyxvNi1vNi1uNSxuNSxtNCtsMyprMilpMylnMSdrNyxoNCllMSZoNCliMCVmNCl6QTiQTUeSTUiRUEqOVUyIWE6BWU94Wk9yXE5rXk5eV0dSUEFLTj1DSjo5QjEyOiswOCkxNysxNy0wNiwvNSsvNSkwOCsyOis0PC05RDQ7RjU9SDc8STc7RjU2QzEzQCwxPi0uODAwNjIxNjIyNzE3ODI5OzA6PC46Pyk/SCtLWTVbcUNog0xxk1Z3nlt3oVlznFZnjVBegUlVeEBXekJbfkZbfkZbfkZdgEhfgkpfgkpfgkpfgkpegUlegUldgEhdgEpVdkdKa0BAYTZoYVFoYVFoYVFpYlJpYlJqY1NqY1NqY1NpYlJpYlJpYlJpYlJpYlJpYlJpYlJpYlJrYlNrYlNrYlNrYlNrYlNrYlNrYlNrYlNsY1RsY1RsY1RsY1RsY1RsY1RsY1RsYlZwZ15uZ19sZ2F0cWqHhH+hoJy8vLrNz87Pz8/g4ODy8vL6+Pn79/b38/Dx7Onu49/o0MbdwbXBq52ikYF9dWJeXEdLTTdDSDJBSTJBSTRARzVCRDdBQTdCPTlDOTc/OjY5PDU+PzdCNzFKLitkNjaPUVKzZ2nGbm3AXFzHWlfQVlPXUU7cTEviSEjmQ0TlQkPfQ0bdREbdREbdQ0XdQ0XcQkTcQkLcQkLcREPZQ0LXQz/TRD7SRT7QRjzQRjzURT3cQz3bQTnSQjrKRDu/RTqwQTacOi2LNSaKPC+FPS6CPS2APSyBPCyBPCyDPCqEPC2COiyCOiyCOix/Oit/OS1+OCx9OS59OS5+Oi9+Oi99OjF9OjF9OjF9OjF9OjF7OzF5OjF3OzF4OTB1OS90OC5zOS5yOC1xNyxyOC1xOC1wNyxuOCxwNyxtNytvNitvNitvNi1vNi1uNSxtNCttNCtqNCppMyloNClmMidrNyxoNCljMSZlMyhiMCVlMyh4QjiOTUeST0mOUkqKVU2EWE96Wk9xW01pXU1aVERJSjo/QzQ+RDY5QTIwOCsvNyo2PDI0NzA1ODE1NzI0NzAyNS4wNiwwOC0xOSw2QTM6RTU9Sjk+Szk8STc2RTIyQSwxPi0sNi4uNDAwNTExNjA2NzE4Oi86PC46Pys8RSpJVzRZb0Fngk1wklZ2nVx1nlhwmVVghklYe0NTdj5XekJbfkZZfERZfERcf0dfgkpfgkpegUlegUlegUldgEhdgEhdf0xTdEdIaD8/XTdpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NqY1NrYlNrYlNrYlNsY1RsY1RtZFVtZFVtZFVtZFVtZFVtZFVtZFVtZFVtZFVtZFVsZFdpYlpnZF12c26Tko6vr63ExsXa3Nvq7u/z9Pb29/n8/P7///////3/+/r89/T98uz34dTy2MfgyrXGtp+qoIeIhGliYkZFSC1ESC9DRzBGRTFHRDVGPDNDNjBGNDJIOjk+PTk+PzpCOjdJNzVjR0aSamrFk5LoranSi4fHdG7AXVjGU1DVT07fSkznRkvpRkvfRUffSUvaREbUOz7YPkDhR0ngREfWOj3aQEDaQEDZQUDWQj7UQz7RQjzQQTvRQTneQz7bQTnTQDnJQDi+QjiwQDWfOi6QOCqMPTCHPi+DPi6BPi2APSx/PCuBPSqBPCx/Oit/OS1/OS1+OCx+OC58OC18OC18OC17OC98OTB8OTB8OTB6OjF6OjF6OjF6OjF5PTV3PDR3OzN1OjJ0OTFxOC9wNy5wNy5vNi1tNy1tNy1sOC1tNy1sOC1tNy1tNy1pMittNi9wOTJvODFrNC1nMipnMipoMytlMChpNy5kMildLSNgMCZfLyViMihzPjaMT0qPUEuIUUqBUkp9WU14XlFoWElUTj5ERTU+RTU6QzI1QDA0PC8zOzA0OjA0OjA2ODM3ODM2NjQ0NjEzNTAwNS4vNi4uNisuOSsyPS02QzI6RzY6STY4RzQ0Qy4xPy4qNCssMi4tMi4uMy00NS83OS46PC86Pys2PiZEUjFXbENoglJzlF13nl9ym1drlFJbfkRYeURUdUBUdUBXeENae0ZbfEdae0Zef0pig05ig05ef0pcfUhfgEtggUxefk1Uc0pGZEA8VzRpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NrYlNrYlNrYlNsY1RsY1RtZFVtZFVtZFVtZFVtZFVtZFVtZFVtZFVtZFVtZFVsZFlnZF1vbmqGhYOkpKLBw8LW2tvq7u/3+/z3+/74/P/8/f/+/v7///3//vr//Pn/+vP/8OD769Tt38XXzbLAu52ko4SCg2NnaktMUTNHSi9FQy5HQi9IPjJJOjNMOTVLPDk/OjdCQT9NSEVdUlB5amejjovOsq7oxb//19HrsqnNgnzAY17KVlbYUlPfSE3aQUTWREXVRUXYSEjcSkvbRUbVPD7WPD7bQUPZPz/ZPz/ZQUDXQUDWQj7TQj3SQTzTQDncQTzbQDvTQDnLQjq/QzuxQTagOzGSOC2MPTCHPi+DPi6BPi2APSx/PCuBPCyBPCx/Oit/OS1/OS1+OCx9OS58OC18OC18OC18OTB8OTB8OTB8OTB6OjF7OzJ7OzJ6OzJ3PDR1PDN1OjJzOjFyOTBuOC5vNi1tNy1tNy1sOC1sOC1sOC1sOC1qOC1sOC1sOC1rNi5uNzBvODFuOTFsNy9pNCxnMiplMypjMShkNCpfLyVeLiRiMiheLiRgMCZwPjWBSkWHUkyHWFJ+WE9yVktkUkRSSTo+Py86QTE2QTA1QDAzPjA0PDE0PDE1OzE3OjM3OTQ3NzU3NzU1NzI0NjExNi8vNi4vNywuOSsxPC40QTA4RTQ5SDU4RzQ0RTI0QjEuOC8uNS4uMy0tMisyMys0Nis4Oi05PSw3PyhEUTNXbEVoglV0lWB3nWJwmFlnj1BZfERXeENUdUBUdUBWd0JZekVZekVZekVbfEdfgEtggUxcfUhbfEdef0pef0pee01TbktGX0E5UjRpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NrYlNrYlNrYlNsY1RsY1RtZFVtZFVtZFVtZFVtZFVtZFVtZFVtZFVuZVZuZVZsZlplZF95e3iXmZiytrfN0dLk6ez0+fz6///7///8///9/v/+/v7//vz///v///r///T+/Of6+d3v8NHh5cTS2LS9xaCgqIOHkWxgZ0VRWDdFSC1EQy5KRDRMRDdLQThJPjpDOzlTSktpYV+Bd3ackpC+s6/Zzsjq3NP+6N3/8+n/5NvwqaPDZWO1QkXHREnaUlbbVVTRTUvKREHNQ0HURkXXRUbYRETZQ0TWPT/XPkDYQD/WQD/WQkDTQj/TQj3UQTrZQDrZQDrSQjrLRTzARDyyQjehPDKTOS6OPDCJPTCDPi+BPi5/PS1+PCyAPS2APS1/OS1/OS1+Oi99OS59OS58OC17OC97OC99OjF9OjF7OzJ7OzJ7OzJ7OzJ6OzR4PDR0OzJxOzFyOTBvOS9uOC5sOC1sNixrNyxsOC1qOC1qOC1qOC1qOC1pOS1qOC1qOC1uOTFtODBtODBtODBtODBpNy5mNCtjMShkMilhMSddLSNfMCZjNCpcLSNfMCZzRDx9UEqBVlB+WVFwVEleSj9PQzc/PC00NigyOyowOysxPC4yPS80PDE1OzE3OjE3OjM3OTQ3OTY2ODM1NzI1NzIyNzAwNy8wOC0uOSswOy0yPy41QjE3RTQ4RzQ4RzQ5RjU0PjMzOjIvNC0sMigvMCgxMyg1Nyo2Oik2PidFUjZZbUprhFp3l2Z3nGZsk1pfh0tXeENXdUNUckBUckBWdEJYdkRZd0VZd0VaeEZde0lffUtde0lde0lffUtefEpad0tQZ0pBV0AzSTJpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NqY1NrYlNrYlNsY1RsY1RtZFVtZFVtZFVtZFVtZFVtZFVuZVZuZVZuZVZuZVZtZ1tqa2aDh4ijp6i5vsHQ1djl7e/z+/31/f/7///7///8///8/vv9/vn+/fj//vf///P4/eb0/d7u99jm8s7d6cPO2rS2wZmhq4aAh2VmbUxNUjRGSDBISjVLSTpIRDlEQDdPR0RqYF+LgYCkmpm3r6zLxsLe29Tq5t368ej/+/H/9+3/3dX7trHlj47KY2SwQD/DUEvJVE3JUEjDRkDIR0LUTUrWS0jQQD/SPj7TPz/VPz7VQT/VQT/TQj/TQj3TQj3WPjnVQDrSQz3MRT/ART6yQTmiPTWVOzKOPDGJPTCDPi+BPi5/PS9+PCyAPS2APS1/OS1/OS1+Oi99OS59OS58OC17OC97OC9+OzJ+OzJ8PDN8PDN7OzJ7OzJ6OzR4PDRyOTBvOS9vOS9tOS5sOC1rNyxqNitoNitpNyxpNyxpNyxoOCxoOCxoOCxoOCxoOCxtOzJsNy9qNS1pNy5qOC9qOC9mNCthMSdkNCphMihdLiRhMihiMylZKiBhMih5TkWBXFZ2V1JpTkdXQzpJPDNAOi46Oy04PC4wOCkvOiozOy40PC82PDI1OzE2OTA2OTA3OTQ2ODM2ODM0OTIzODEzOS8xOS4xOS4uOSsvOiwwPSwyPy41QjE3RTQ7SDY8STg5Qzg3PzQyOC4tMycuMCUvMSQyNCY0OCc0PCdFUjhdcFByi2R7mm53nGlmjVhVfEVTc0FUckBTcT9TcT9UckBVc0FWdEJWdEJXdUNbeUdde0lcekhefEpffUtcekhXcklKXkU8TTsuPy1nZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNpY1NqY1NrYlNrYlNsY1RsY1RtZFVtZFVtZFVtZFVtZFVtZFVuZVZuZVZvZldvZlduZ11xcW+HjI+kqay3v8LN1djj7e/y/P70/v/4///7///7//z9//r8/fX6/PH4+Oz2+Or2/+jz/+Tw/eHu+dnp9NLe6MXK0q22vpmdo4F9gmJZXUJHTDVGSzdGSjlDRzlBQzhjXliFfXqroZ/Bt7XMwsHXz83m4d3x7un69/D89ev/8ej/8un/9Oz/5d/pqKS3aGOmTEG1UETBWU7HW1HGUUi/RD3CQTzLREHLQD3OQD7QQD/RQUDSQz/RQz/RQz/SQz3TPzvSQTzQRUDJRUC9Qz6vQDmgPjWVPTOOPDGJPDKDPTGBPTB/PTF+PC5/PS9/PS9+Oi9+Oi9+Oi99OS58OTB7OC97OC97OC98PDN8PDN8PDN7OzJ6OzR5OjN5OjN3OzNuNzBtODBsNy9sNy9rNi5oNi1oNi1oNi1pNy5oOC5oOC5nOC5nOC5nOC5nOC5oOC5rOTJoNi9mNC1nNS5pNzBoNzBlNC1iMSpjMitiMytfMChdMShdMShWKiFiNi17VUx0WVJhTkhOPzhBNy49Niw7OS05Oy45PDEzOS0zOy41Oy82PDA2PDA3Oi82OC00Ny42OTA0OTIzODEyOi8yOi8yOi8xOS4xOSwuOSsuOSsvOiwwOy0zPi42QzI6RTU8Rzc9RTg6QjU1Oy8wNigwMiUvMSQxMyUxNSQyOiVHUztidVd3j2t8m3JxlWdcglFKcD1Pbz5Rbj5Rbj5Rbj5Rbj5Rbj5TcEBTcEBXdERbeEhdekpdekpffExffExad0dSbEVDVT82RDcoNilnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNpY1NqY1NrYlNrYlNsY1RsY1RtZFVtZFVtZFVtZFVtZFVuZVZuZVZvZldwZ1hwZ1huZ11sbm16goWTmqCrtbfEztDc5ujt9/n0/v/1/v32//z6//r7//n7/vP4+u319ujx9OP0/er0/ej0/OXz+d/y9tvp7M3Y17nFxKWxsJKPjnJlZ09NUDtHSzpGTT1HT0JLUUd7e3OfmpTFvrjYzszf09Pn29vz6+n89/Tw7+r8/PT///b//fT/+e//8+r/597/18vYk4O4ZVOjSjq0VEa9V0m1Rju3QDjIS0XHQz7KQz/MQj/OQ0DOQz7OQz7NRD7NQj3QQTvSQz/OREHFRD+4QT2qPTieOzWVPDSOOzOJPDKDPTOBPTJ/PTF+PDB/PTF/PS9+Oi9+Oi9+Oi99OS58OTB7OC97OC97OC98PDN7OzJ7OzJ6OjF5OjN4OTJ3ODF1OTFuNzBsNy9sNy9qOC9pNy5pNy5oNi1nNy1nNy1nNy1mNy1mNy1mNy1mNy1mNy1mNy1oNzBoNi9nNS5nNS5nNi9oNzBnNi9mNS5hMiplNi5eMilcMCdgNCthNSxpPTR1U0pYR0BFPjY8NS85NSw7OC84Oi81NywzNis2OS41Oy83Oi82OS42OS41OC01NywzNisyOCwxOSwxOS4xOSwxOS4xOSwxOSwxOSwuOSsuOSsuOSsvOiwwOyszPi42QTE3QjI8RDU6QzI4Py81Oy01NyoyNCcxMyUwNCUxOCZIVD5leFx1jW10kmxmiV9Sd0tCaDlLazxOaztQbT1QbT1OaztOaztPbDxRbj5Wc0Nad0ddekpee0tffExffExWc0NOZ0A8SjkvOjIkLiZnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNpY1NqY1NrYlNrYlNsY1RsY1RtZFVtZFVtZFVtZFVtZFVuZVZuZVZvZldwZ1hxaFlvaF5oaWttdHqFjJSjrLG/yM3T3uLl8PLw/Pzy/Pv1/vn4//f6//b8//L6/ez4+ef29+f29ur39+v69+j89ub99eL37Nbn2MPVxq/AsZqek311bltaV0ZQUUNTVktbYlplbGSVmI2ysqjVzsbo3dnz4+P66uv/8fT/9/n//vv+/fn5+vT4+fH8/PD///P///H/++r/5tHxqpS8b1upVkSuUkO1UES7TEG/SkHCRz/GRT/JRUDKRUDKRT7JRD3IQzzJQjzRQz/QRUDMRUHCQz2zPTmmOzWcOzWVPDaMPDOHPTSFPDWBPTR/PDN+PDB/PTF/PTF+Oi9+Oi9+Oi99OS58OTB7OC97OC97OC97OzJ7OzJ5OjN4OTJ3ODF2NzB2NzBzNy9uNzBqOC9qOC9qOC9qOC9oOC5oOC5oOC5nNy1mNy1mNy1mNy1kOC1kOC1kOC1mNy1nNi9oNzBpODFpODFoNzBpODFqOzNsPTVnODBrPDRiNi1hNSxvQzp4TEN0SUBuTURDOTA1Ni40NS84OTE4OzI0Ny4xNCsyNSw1OC01OC01Nyw0Nis0Nis0Nis0NikzNykvNygtOCguOSsuOSkuOSsuOSkwOCkwOCkxOSowOCkwOCswOCswOCsxOSwzOy40PC05QjE6QzA7QjA6QTE6PC42OCoyNCYvMyQyOSdJVT9jdVtthGdmhGJXeVRJbkU/ZDhIZztMaTtOaz1Oaz1MaTtMaTtNajxPbD5VckRZdkhbeEpdekxee01ceUtRbkBHXzs2QjQrNC8jKSVnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNpY1NqY1NqY1NqYlVsYlZsYlZtY1dtZFVtZFVtZFVsZVVtZlZuZ1dvZ1puaFxvaF5tamVrb3JtdHqDipClrrPDzNHV3+Hm7vH0/P70/fr3/fn5/vf6//T8//L8//H8/+79/vD7+O/++vH/+e//+u3/+en/8t/v4MvdzrfBspuil4F8dWJiX05YWkxdY1dtd258hn2mrKK+wLXa1c/u5OL87u7/9PT/9Pf+9PX++Pj7+vj7/fj8//r4//X0/PH3/fH///H/+ej/9OP/zLu9f3CbUUSpU0a1U0iyQzrASkDESEDHRz7JRj7IRT3HRDzGQzvGQzvNRz7MRz7HRz68QzutPjWfOjKXOjORPjaKPTWGPTSDPTWBPTSAPDN/OzCBOzGBOzF+Oi9+Oi9+OjF9OTB8OTB7OC97OC97OC96OjF6OjF4OTJ3ODF2NzB1Ni91Ni9xNi5tODBrOTBqOC9qOC9pOS9pOS9pOS9oOC5nNy1mNy1nNy1mNy1mNy1mNy1mNy1mNy1mNS5qODFtOzRrOjNqOTJqOjBtPjRvQzhsQDVvRDtkPDJjPTJ6VkqGZFp5V01iTEE+OjEzODE0OTI3PDU0OjAvNSsyNSw5PDMzNisyNSoyNCkwMygxMygyNSo0Nis0NywuNiksNykvNyotOCovNyovNyovNyovNyoxOSwwOCswOC0vNywvNywvNywwOC0wOCs3PzA5QjE8RTQ9RDQ7QTM4PC4yNictNCQyOypKVkJjcltofGFddlhPbUtGZkFBYTpIZDtLaDxOaz9Oaz9LaDxKZzlMaT1Oaz1UcUVXdEhad0tbeExdek5adk1OakFDWzsyPjQqMDAhJydoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZqZFZqZFZqZFhsZFlsY1ptZVptZVhtZlZnYE5qZVJua1hvbF1oZVxmZWFzcXKBgoaKj5OWnqGrs7bDyMvY3eDq7u/29/n5+/r8/v3+/vz///r9/vb6/fL5/PH6/fL7/vP5+vL6+vL5+e38+uv+/Of5997p5crV1La6uZuYmHxwc1hfZE1ia1hyfWyEkIKRm5C0ubLLzMfj4t7y7uv38/L79/b9+fj8+Pf//vz+/vz+/vz9//r9//r9//r9//r9//r6/Pf///r/+/b/6uXYp6CjYFibRD21TkW/TUPCRjzERDnKRTzOSUDOS0HLSEDHRzzGRzjDSDi9SjizSDimRTWaQjSRQjWLQzWGQjWEQjaCQDSCPjOCPDKEOjGGOTGGOTF/OTF+OjF8OTF7ODB6Ny96Ny93Ny52Ni13Ny53Ny53OC93OC92Ny51Ni1xNStuMytsNy9pODFpODFoNzBoNzBnNi9nNi9nNi9mNS5nNi9pNzBpODFoNzBnNi9lNC1lMyxoMy1qNS9tODBrOTBqOjBpOy5pPTBrQTNnQjJqSTpkSDp2X09+a1yKeGqMf29SSj03OS40OjA0OjAzOS8zOS8zOS8yOC4yOC4xNy0xNy0zNi0wNiwyNSwvNSsxNCsvNSsvNC0uNS0vNC0uNS0vNC0vNC0vNC0vNC0wNS4vNC0vNC0uMywuMywvNC0vNC0vNi4xOzIzPTI2QDU4Qjc5RDY3QjQ1QDAzPi00Py5EUT1XZU5ba1FQYkhFWDxAVDhCVzZJYz5LZT5LZj1LZj1KZTxKZTpMZz5Paj9VcEdZdEtcdk9dd1Bdd1JXcU5IYj87TzYmMSsmKy4kKSxoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZqY1lrZFpsY1xtZFttZVptZlZpZFFqaFNtaldqa1tnZ19sbGx+f4SQk5qor7W4wsTR1tni5+ry8/X7/P7//v///v/+/fv//vr///r+//n7/PT4+/L2/PL3/fP3+vH4+u/4+u33+un5++Xy9drf4sPM0K+0uJeRlnZrcVVZYUlfa1V0gW+MmIqdp5y/wbzT09Hn5+Xz8/H39/X7+/n8/Pr7+/n+/vz+/vz+/vz+/vz+/vz+/vz+/vz7//71///1///+////+/r/7erwv7rCfnWfS0GvTUC5Sz7CTEDFSz7DRTm8PTS+PzbDRTnERjfDSje9TDqzSjemRjaZQzSRQzaNRTeFQzeCQjiBQTeBPjWCPDSDOjOGOTGEOTN+OTJ9OjJ6OjF6OjF5OTB4OC92Ny52Ny51Ni12Ny50OC50OC50OC5yNixvNSptNCtsNy9pODFqODFoNzBpNzBoNzBnNi9nNi9lMyxlMyxnNS5oNi9qODFqODFqODFqODFrNjBsNzFrOTBrOzFrOy9qPjFqQDBoQzFnSDZrUD1nUkF1ZlOBdWWLhnOGg3JLTDw2OS4zOS8zOS8zOS8yOC4yOC4yOC4xNy0xNy0xNy0xNy0wNiwwNiwvNSsvNSsvNSsvNC4vNC4vNC4vNC4vNC4vNC4vNC4vNC4wNS8vNC4uMy0uMy0uMy0uMy0vNC4vNi8uODAvOjIxPTM0QDY2QjY2QjY2QjQ1QjE2QzFDUD5QXUlSYElJV0BBTzZCUDdGVjtKYkBKZD9LZUBLZT5JYzxIYzpJZDtKZTxTbkVYcktcdlFdd1RbdFRUbU9DXD42STUmMS0nLDAkKS1oZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZqY1lrZFpsY1xtZFttZVptZlZtaFVraVRtaldqa1tra2N3d3eRkpenrLK/xszS3N7s8fT3/P/+///+/////v///v/+/fv//vr///r9/vj6+/P1+O/x9+vx9+v09+z1+ev2+Or1+OX19+Hu7tTb27/JyquwsZKTlnl1eWBrcFp0e2mIkIGfp5yuta3Nz8re3tzv7+34+Pb7+/n+/vz+/vz9/fv+/vz+/vz+/vz+/vz+/vz+/vz+/vz9//77///7///+/v7/+/n/+vT/9+390cbYnpCUTD2lUkKpTDunQDG3RzvPWU3PVUq8QDTDQzbGSDrDSz25STuqQjedPzWXQDeTRD2JQDmEQTmBQTh/PzZ+PjV9PTR/PDR9PTR6OzR4PDR3OzN3OzN1OjJ0OTF0OTF0OTFyOTByOTByOTByOTBvOS9uOC5sNixrNStsNy9qODFsNzFqODFrNjBpNzBpNzBoNi9nNS5nNS5mNS5nNi9oNzBpODFrOjNrOjNsOzRqOzNpOjBoPDFrPzJqQzRpRDJmRTJnSjhsVkFqWUd1alaGf22RjnuAf21ERzY1OC0yOC4yOC4yOC4xNy0xNy0xNy0wNiwxNy0xNy0xNy0wNiwwNiwvNSsvNSsvNSsvNC4vNC4vNC4vNC4vNC4vNC4vNC4vNC4vNC4vNC4uMy0tMiwtMiwuMy0vNC4uNS4rNS0rNi4tOS8vOzEyPjI0QDQ2QjQ3RDM4RTM/TDpFUj5DUTo7STI4Ri0+TDNEVDlKX0BKYkBMZEJLYz9JYT1HYDlGXzhHYDlSa0RYcExddVNedlZacVRQZ0s9VDguQS4mMS0nLDAlKi5oZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZqY1lrZFpsY1xtZFttZVptZlZuaVZsalVsa1dsbV1wcWmAgoGeoaa5vsTEy9Hb5ef1+v37///8/f/8/f/+/P38+/n//vz///v//vn7/PT19u7u8ebp7+Pn7d/t8eLw9OXx9OPx9N/y8dzq6tDY2LzHx6uysZWhoYmRk32Qk4CcnpGqraK2u7TAxb/c3Nrp6ef29vT7+/n9/fv///3///39/fv+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/v77+/3//v///v/38u/88+z//PP/++3/9OTsw7G5gXCVUECiTz+4WEq3TT+1RTnARzzBQTbIRTvFST+9Rz2vQDmhOzaaPTiWQT6NPzuHQDyBQDp9QDt6Pzl5QDl4Pzh4Pzh2PTR2PTR2PTR1PDNzPTNyPDJyPDJxOzFvOzBvOzBvOzBuOi9rOS5qOC1qOC1pNy5tODJuNzJtNjFsNzFsNzFrNjBpNzBpNzBsOjNqOTJoNzBmNy9mNy9mNy9oOTFmOjFqPzZmPjRlPTFmPjJoQzNpRTVmRzNjRzJjSjZoVkBpXElza1aFgm+Nj3pvcl85PSwyOCwyOC4xNy0xNy0xNy0wNiwwNiwwNiwxNy0xNy0xNy0wNiwwNiwvNSsvNSsvNSsuMy0uMy0uMy0uMy0uMy0uMy0uMy0uMy0uMy0uMy0tMiwtMiwtMiwtMiwuMy0tNC0qNCwpNCwqNiwrNy0uOi4xPTE0QDI2QjQ2QzI6RzU8STc4RTEyPysyQCk4Ri8+TjREWDxFXT1LYEFKYkBLYD9HXztIXjpGXjpTaUVYcE5gdVZedVhablNMY0k5TTQpOiglLislKi4kKS1oZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZqY1lrZFpsY1xtZFttZVptZlZsZ1RraVRubVlvcGBzdm2Dh4akp6y/xMrO1dvm8PL7///7///7/P79/v///v/+/fv///3///v+/fj3+PDv8Ojn6t/g5tre5dXn69rq79vt8Nvs8Nnu7tbo6NDa2L/MyrHCvae3taCxrp22tKfBvrXJyMPS087Z2dfo6Oby8vD6+vj8/Pr9/fv///3///38/Pr+/vz+/vz+/vz+/vz+/vz+/vz+/vz//vz//P///P//+/r8+/f9//n+//j+//T//+3//uz438vFnIqdYlCWSjqlTDy0UEC8TD6/QDfGQzvFRj+/RD2xPjumOjeeOjiZPj2RPTuKPzyEQD19QD14QTx0QjtyQztyQztxPzZzPjZzPjZyPTVyPTVyPTVwPjVvPTRuPjRtPTNsPDJrOzFqOzFpOjBpOjBqOjBuNzJwNjJwNjJtNjFtNjFsNzFpNzBpNzBsOzRrOjNoOTFlOTBlOTBlOTBlOjFkPDJmQjZjQTVjQzRkRDVkRzVkSTZiSTNfSTJeTDZlVj9qYk1ybVeEg2+Eh3JbYEwzOigyOCwyOC4xNy0xNy0xNy0wNiwwNiwwNiwxNy0xNy0xNy0wNiwwNiwvNSsvNSsvNSsuMy0uMy0uMy0uMy0uMy0uMy0uMy0uMy0tMiwtMiwsMSssMSssMSssMSstMiwsMywsNi4rNS0qNCsqNCsrNSwuOC0wOy0yPS8yPS01QC82QTA1QS0xPSkxPSk1QS04Ri89TzVAVDhGWT1IXEBKXT9JXj1LXj5LYD9UZ0dbcFFjdlpgdFlZa1NKXUc2RzQmNCUkLSokKSwiJypoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZqY1lrZFpsY1xtZFttZVpsZlZqZ1RralVsbllvcmFzdm2AhoSfpKi4v8fW3+Tt9/n7///7///7/P/+/////v/+/fv///v///r8/PTz9err7eLj59nd49Xc49Hj6NLn7NXp7dbq7NTr69Po5s/f2sTTzrjTzrrMxrbLw7jQycHX0s7g29jq5uXw7+3z8vD5+ff9/fv9/fv9/fv///3+/vz8/Pr+/vz+/vz+/vz+/vz+/vz+/vz+/vz//fz/+/z/+Pn//v3+//35//30//jv//X3//bw9+f//+3/7tvNp5Ska1iiW0eqV0WtTDu5RDrARDzART68RT+0QT6qPTqiOjmaOzmVPTyNPz2FPz19QDt3QjxyQztvRDtvRDtwPzhxPzZxPzZxPzZxPzZwPjVvPzVvPzVvQDZuPzVtPjRrPDJoPDFoPDFoPDFsPDJvODNxNjJwNjJwNjJtNjFsNzFqODFpODFoNzBnODBlOTBlOjFkPDJlPzRmQDVkQjZeQjRhRzhjTDpkTTtjTThgSzZdSzNdTTRdUTliWD9taFJzc1uAg252e2VGTzo0PSozOS0yOC4yOC4yOC4xNy0xNy0xNy0wNiwxNy0xNy0xNy0wNiwwNiwvNSsvNSsvNSstMiwtMiwtMiwtMiwtMiwtMiwtMiwtMiwtMiwsMSsrMCorMCorMCorMCosMSssMywuNS4sNi4qNCsqNCsqNCsrNSwtNywuOSstOCowOys0Py81QC80Py4zPyszPi0zQCw3Ri85SzNATzhCVDpHVzxIWz9NXUJNYERVZUpcb1NkdFpgclpYZ1JGV0Q0QjEkMiUkLSokKSwiJypoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZqZFZqZFZqY1lrZFpsY1xtZFtsZlpsZlZsaVZsa1ZrbVhqbl1scmh5f32VnaCut77S2+Dq8/j7///5/v/5+v7+/////v/6+ff///v+/fj5+fHx8+jp697j59jf5tbg6NPk6dLn7dPo7NPn6dHo6NDn5c7g28fX0L7a08PZ0cbe1Mvm3dju5OPz6er68fT/+fv6+ff+/vz///39/fv9/fv///3///38/Pr+/vz+/vz+/vz+/vz+/vz+/vz+/vz//fz/+fj/+vn//v38//33//7u//nx///y//31//rz+ev//e3/+uj0zrurd2KPUTqpW0eyTj64Sj25ST64SUC0R0CvRD6lPTqcOjeWPTmPPjqIPzmAQTp4QTp0RDpwRjpwRTxwPzhxPzhxPzhxPzhxPzhxPzhwPzhwPzhxQjpwQTluPzdsPTVpPTRqPjVqPjVuPTZvODNyNzNwNjJwNjJuNzJsNzFqODFpODFkOC9kOTBjOzFkPjNkQDRjQTVjQTVfQzVaRTRfTjxnVkJoV0NjUzxeTzhbTzVcUjddVjxdWT5ubFV0dl58gWtjbVUyPig2Qi4zOy4zOS8zOS8zOS8yOC4yOC4yOC4xNy0xNy0xNy0xNy0wNiwwNiwvNSsvNSsvNSstMiwtMiwtMiwtMiwtMiwtMiwtMiwtMiwsMSssMSsrMCoqLykqLykrMCosMSsrMistNC0rNS0qNCwqNCwrNSwrNSwsNistNywsNisvOiwyPS82QTE3QjI3QjE1QDA0Py4yPy00Qy46RzM9TDVBTzhEVDpKWD9MXEJUYklca1RjcVpebVhVYlBEUkEyPjAjLyUmLywmLCwkKipoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZqZFZqZFZqY1lrZFpsY1xtZFtsZlpsZlZvbFltbFdqbFdna1pmbGJye3iOmJqosbjK09jj7PH4/f/3/P/6+//+/////v/6+fX///r9/fX4+O7w8uXp693l6djj6tjl7dbm7NLp7dLq7dLo6M7o5s/o48/h2sjY0MPYzsTd0szp3tr47ev/9Pb/9fn/9fv/+fz//f7///3///3+/vz+/vz///3///39/fv+/vz+/vz+/vz+/vz+/vz+/vz+/vz//vr//fv//fv9/Pr5/fz4///1///z///t/frz//v7//r///T/9ub/89//483XrZWpb1moV0SuUUCsTz6vT0GxT0KtS0CkQzyZPDWVPjePPzaIPziBQTd7Qjd1RDZxRThxRThwPzhxPzhzPjhxPzhxPzhxPzhxPzhwPzhzQjtxQjpwPzhtPjZsPTVqPjVtPjZvPjdvODNxNzNvODNtODJtODJpODFoOTFmOjFmOzJkPjNkQDRiQjVgQzVdQTNcQDJXQjFURzRbUz5mXkdpXkhiWD9aUzlaUzdcVzpaVjtYVztrbVVzd151fWZVYUkmMhw4RDAzOy40OjA0OjAzOS8zOS8zOS8yOC4yOC4xNy0xNy0xNy0wNiwwNiwvNSsvNSsvNSstMiwtMiwtMiwtMiwtMiwtMiwtMiwtMiwsMSsrMCorMCoqLykqLykrMCorMCosMSsrMispMysqNCwrNS0rNSwsNi0tNy4tNywsNisuOC0yPDE2QTM5RDY5RDQ3QjQ2QTEwOysyPy01QjA5RjI8STVATjdGVD1KWD9SYElbaFRhblpcaVdRXk1CTkAvOy8iLCMrMS0oLiwmLCxoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZpZldpZldpZldpZldpZldpZldpZldpZldrZVdrZVdrZFpsZVttZF1uZVxtZ1ttZ1dxbltrbVdrbllrcmBqcmdweXaHkZOfqrC7xMnQ2d7q7/P2+/78/f/+/////v/+/fn///r+/vb6+vD2+Ov09ujw9OPq8d/n79jw9trt8tTr7tHs7NLo5tHh3Mnd1cje1Mrh1M7o2tny5OT66+7+8vT/9/v/+f///P///f7+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+//r//vr//vr+/vz9//77///6///6///7///+//////3/+/X/+/H//Oz/++X/89v/6tG6gmmmYkuXTzmfVD+oWkajUkGeSzugTT+OPDCLPTCGPjJ/PS94PS90Py9zQjN0RDZyPTVyPTd0PThzPjh1QDp1QDp0PzlxPzhzQTpxQDlyQDlxQDlwPzhuPzdvPjdvPjdrOTJtODJsOjNsOzRsOzRoPDNnPDNjPTJjPzNePjFkRzljRzlUPS1OOShNOCdAMR5XUTtQTjdLSTBPSzJdWT5pZUplYURWVTdYWDxdYENvc1p6gGZkbFU+SjItOSMyPio0PC81OzE0OjA0OjA0OjAzOS8zOS8zOS8zOS8zOS8zOS8yOC4xNy0xNy0wNiwwNiwxNjAxNjAwNS8wNS8vNC4vNC4vNC4vNC4sMSssMSssMSssMSssMSssMSsrMCorMCouNS4tNC0tNC0sMywtNC0tNCwuNS0uNS0rMiotNCwwNy81PTI5QTY9RTg/Rzw/Sjw3QjI1QC8zPi0xPSkyPio5RS9CTjhJVT9PW0dWYk5daFdZZFRMV0k8RjsvOS4pMyopLysoLionLStoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZpZldpZldpZldpZldpZldpZldpZldpZldrZVdrZVdrZFpsZVttZF1uZVxtZ1traFdvblpqbFZrbllrcmBqdGlxfHiJlJajrrS+x8zS2+Dr8PT3/P/9/v/+/////vz+/fn///r+/vT7++/3+ev09+bw9eHq8t3o7dbq79Hm68vk58rm5szj4czf2cne1Mrf1M7n2djt39/25+r77/P/9Pj/9/v/+v7//P///vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz9//z7//r7//r9//z9/v/+/f///P///P//+////P///P//+/n//PX//vH//+3/++X/8tn/69HgsZendVyRW0OWWkKaWUOaVkOZUkCORzWLRjaIRTSDRDN8QzJ3QjBzQC9vPi91QDh0Pzl1Pjl1QDp0PzlvPTZwPjdzQTpxPzhwPzhwPzhvPjdvPjdtPjZuPTZtPjZrPDRsPTVtPjZrPzZqPzZnQTZlQTViQjVkRzlbQTJeRzdeSThOPStGNyRHOCU/NyJMTDRHSzJERyxCRSpNTTFbWz9iYUNgYUJZWT1kZ0pzd15zeV9YYEk6RCwvOyU3Qy82PjE2PDI2PDI2PDI1OzE1OzE1OzE1OzE1OzE1OzE1OzE0OjA0OjAzOS8zOS8zOS8yNzEyNzEyNzExNjAxNjAxNjAwNS8wNS8uMy0uMy0tMiwtMiwsMSsrMCorMCorMCoqMSoqMSopMCkpMCkpMCkqMSorMiosMysuNS0tNCwuNS0wNy80OzM5QTY/Rj5CSj87Rjg6RTU3QjE0Py4zPys2Qi48SDJATDZMWERTX0tZZFRXYlJLVUo9RzwxOzIrNSwrMisqMCwpLytoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZpZldpZldpZldpZldpZldpZldpZldpZldrZVdrZVdsY1ptZFttZF1uZVxtZ1traFdtbFhpbVZqb1lrdGFpdWlxfXmKmJmlsri/ytDU3eLt8vb3/P/8/f/9//7//vz+/fj///f9/fP6++33+un09+Tv9N7n79jl69Hi58ne4cLd3cHe3sbe28jd18vg1c/k2dfu4uLz5+v67vL/9Pj/9/v/+fz/+v3//f3//vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz9//z4//z4//z7//7+/v7//P//+v//+f//+P//+f//+v//+vr//fj///b///P9/+//+ub/89v/+OD/7NPjv6esgmqHWUKFUTuSW0aXXUmNUz9/RjJ1PilyPilzQCt0RDB2RTRxPzRuPDNxPDR0QjlzQThvPzVxQTd4SD5uPjRtPjRtPjRtPjRsPTNqPjNsPTNqPjNnPzVnQTZnQTZnQzdlQzdjQzZgQzVeRDViSztVQjFaSTdgU0BSRzNDOyZFPShGQStBRSxCSC5BRSo8QCU/QiVMTzJfYEFpaktgYERucVR2emFnbVNKTzk0PCU0PSg9RjM4PjI4PjQ4PjQ4PjQ3PTM3PTM3PTM2PDI4PjQ4PjQ3PTM3PTM3PTM2PDI2PDI2PDI1OjQ0OTM0OTM0OTMzODIzODIzODIyNzEwNS8wNS8vNC4uMy0tMiwsMSsrMCorMCopLigpLigpLigpLigpLigqLykrMCosMSsxNjAvNC4sMSssMSsvNC42OzQ9QjxBSEBASz0+Szo8STc4RTM0QS0yPyszQSo1QyxEUT1LWERRXk1RXk1IVEg8SDwyPjQuOC8tNC0tNC0sMyxnZFVnZFVoZVZoZVZoZVZoZVZpZldpZldpZldpZldpZldpZldpZldpZldpZldpZldrZVdrZVdsY1ptZFttZF1tZlxtZ1tqaVdrbVhpbVZqb1lqc2BodGhtfHeImJims7m/ytDT3OPr8Pb2+//8/f/9//7///3//vn+/vb9/fH6++33+uf09+Lu89zl7dXi6M7b4MDX2rvW1rzZ18Ld18fe183l29ns4OD47PD78Pb/9fv/+f7/+v3/+/v/+/v//fz//vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz9//z4//74//77//7+/v7//P7/+v//+f//+P7/+v3/+fz/+fn//fr///j///j7//X8/vD//+3//On/8d//8N3/79rx0r20kHp5Uz5zSTN1SDN2STR6TTh+Tzt5TDduQS5lNyd7TUBzRDpxQjhzRDpvQzhnOzBkOC1nPTFpPzNpPzNpPzNnPzNmPjJmPjJmPjJlPzJiQDRiQjVgQzVfQzVfQzVbRDRZRDNXRDNYSTZPQi9cVD9vaVNjXkhNSzRJRzBJSzM+RCo/SC1ARio8QiY8QSNFSixYWTpkZUZtbVF4eFx0dl5bX0ZAQy42OyU4QCs8QzE5PzM5PzU5PzU4PjQ4PjQ3PTM3PTM3PTM4PjQ4PjQ4PjQ4PjQ4PjQ4PjQ4PjQ4PjQ3PDY3PDY3PDY2OzU2OzU2OzU1OjQ1OjQzODIzODIxNjAwNS8vNC4tMiwsMSssMSsrMCorMCoqLykqLykrMCosMSstMiwtMiwwNS8uMy0rMCorMCotMi4yNzE4PTk7QjpASz1ATTtATTs9SjY4RTEzQCwxPygwPic8STVCTztIVUNJVkVEUEI7RzsyPjQuOjAsNi4uNS4tNC1nZFVnZFVnZFVoZVZoZVZpZldpZldpZldpZldpZldpZldpZldpZldpZldpZldpZldrZVdsZFdsY1ptZFttZF1tZlxtZ1tqaVdrbVhpbldpcVpnc19kcmVqeXSFlZWjsre9yM7S2+Lq7/X0+f37/P/9//7///3///r///j///P+//H7/uv3+uXw9d7m7tbi6MzZ3L/V1bnS0LnU0b7a1Mjg2dHq4N/06e3+8/n/9/z/+////f///v///vz//vr//vr+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz9//76///6///7///+/v7//f7//Pz/+/z/+/r/+vj/+ff/+vf//fj///v///v9//r9/vn59O7//vb//fT//PP/++7/9+f75tXp0sDPtKG2moWUdWF3VkNsSTZtSDZyTTt1UD5tRjdpQjNnQjJqRTVuSTluSjpvSztvSztlQTFjQjFjQjFjQjFjQjFjQjFiQzFgQzNdRjZcRzZcRzZaRzZaRzZXSDVURzRSRzNQSDNOSDJmZE1+fmZyclpWWEBKTDRHTTM8RSo8Ris/SCtBRytBRihDSCpNTi9UVTZ4d1t7el5ublZVVT1DQi4/QSw+QS46Pi07PjM5PzU5PzU4PjQ4PjQ3PTM3PTM3PTM4PjQ4PjQ4PjQ4PjQ4PjQ4PjQ4PjQ4PjQ5Pjg5Pjg5Pjg4PTc4PTc4PTc3PDY3PDY2OzU1OjQ0OTMzODIyNzEwNS8vNC4vNC4tMi4tMi4sMS0rMCwrMCwsMS0tMi4tMi4sMS0sMS0sMS0sMS0uMjEwNTEzNzYzOjM7Rzk9TDlATzxATzo8SzY3Ri80QywyQSo2RS46STRATzxCUD8/TT44RjcxPzItOS0sNi0tNCwsMytmY1RmY1RnZFVoZVZoZVZpZldqZ1hqZ1hpZldpZldpZldpZldpZldpZldpZldpZldsZFdsZFdsY1ptZFttZF1tZlxtZ1tqaVdrbVhpbldpcVpnc19icGNneHKClJSjsrfAy9HU3eTr8Pb1+v77/P/9//7///3///r///j///T///P//+/6/ejy9+Dn8NXi6MzX2r3R0bXNy7TOy7rWz8Xe19Hs4uP37vP/9v7/+v///f///v////3+//r+//n+//r+//r+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/v79/v/9/v/9/v/9//79//z+//r+//n///f9/fP9/fX+/fj+/fn//vz+/v7//f///v/++f///P//+/z79vP/+PL//fT//vH//u3/+un/8+D35NPn0r/Uuqm6n46fhHOPcmJ8XUt9Xkx0VUNhRDJXOihZPCpbPixYPSpgRTJgRTJgRTJfRjJgRzNgRzNgRzNdSDNcSzdcTTpcTTpZTDlYTTlVTThSTDZRTDZOTDVRUTlpa1N8gGdtcVhTWT9GTDI+Ryw8Ris8Ris/SCtESi5FSixERypISSpMTS54d1t0c1dmZE1UUjtMSTZLSjZGRTM8PS08PzQ5PzU5PzU5PzU4PjQ4PjQ4PjQ4PjQ3PTM3PTM4PjQ4PjQ4PjQ4PjQ5PzU5PzU6Pzk6Pzk6Pzk6Pzk5Pjg5Pjg5Pjg4PTc4PTc4PTc3PDY2OzU1OjQ0OTMzODIzODIvNDAuMy8tMi4sMS0rMCwrMCwrMCwrMCwrMCwsMS0tMTAuMjEvMzIvMzIvMzItNC0zPzE3RjM9TDdATzo/Tjc8SzQ5SDE4RzA1RC04RzA8SzY+TTo8Sjk3RTYxPzItOS0rNSwtNCwsMytmY1RmY1RnZFVoZVZoZVZpZldqZ1hqZ1hpZldpZldpZldpZldpZldpZldpZldpZldsZFdsZFdsY1ptZFttZF1tZlxtZ1tqaVdqbFdobVZoclpmc19jcWRoeXOFl5elt7vH0tja4+rw9fv4/f/8/f/9//7///3//vn///X///L///D8/+z4++bv9N3i69Dd48fV1bnOzLPJxLDKxLTQyb/a0s/p4OP27fL/9///+v///f///v////39//r8//j8//j9//r+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/v7//P///P/+/f/9//76//r4//n4//X4//P4//P4//X8//j9//r//f7//P///P//+//99///+v///P///f///v/+/fv7+/P6+Oz///H//+///+3//u3//e3/9uf/7uD96tv649H/5tDjyrSlj3h0XkdlTzhiTDVcSDBeSjJcSjJcSjJdSzNdSzNeTDReTDRcTTZZTjhXTzpYUDtWUDpVTzlTTjhQTjdOTjZNTzdQVDtgZkxmb1RVXkNFTzRBSzA8Ris/SS4/SS5DTC9ITjJITS9GSSxPUDFZWDpxbVJqZkthXEZbVkBZVEFUUT5NSjlCQzM9QDU7QTc7QTc7QTc6QDY6QDY6QDY5PzU4PjQ4PjQ4PjQ5PzU5PzU6QDY6QDY6QDY7QDo7QDo7QDo6Pzk6Pzk5Pjg5Pjg5Pjg6Pzk6Pzk5Pjg5Pjg4PTc4PTc3PDY3PDY0OTUyNzMxNjIvNDAtMi4sMS0rLy4rLy4sMC8sMC8tMTAuMjEuMjMuMjMtMTIrMS0rOSovQC02SDI7TTc9Tzc8TjQ6TDI6TDI1Ry83STE6TDY8TTo7TDo2RzcwQDMtOy4sNi0tNCwsMytjZFJjZFJkZVNlZlRnZVZoZldpZ1hpZ1hoZldpZldpZldpZldpZldpZldpZldrZVdrZVdrZVdsZFlsZVttZF1tZlxrZ1tqaVdpa1ZobVdoclpndGBkcWdqe3WJm52qvMDN2N7g5+30+f/6///7///9//z+//r+/vb6+u76++36++n4+uXz9uHq7tff48rZ3MHT0bjMx7HFvqzGvrHMw7zWzsvm3eD06vL+9///+v///v/////+/v79//r8//r8//r9//z+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz//vz//vz//vz//f7//P///P///f/9//77//z4//n3//f3//X4//b5//b8//j///v//v3//P//+///+v//+v//+////P///v/+/f/7/fz8/vv+//r5+vL6/PH9++/++u7/+ez/++z//e///ez/8Nv/++Ls3MOejnVgUDdSQilYSC9YSC5bTTNbTTNaTjRaTjRbTzVbTzVcUDZbUThVTzdUTzlUTzlRTzhQTjdOTjZLTTVJTTRKTjVMUjhTXEFQWTxASSw7RihBTC4/SixETTBFTjFKUTJNUjRKTTBMTDBZWT1rak5oZEliXkVeWkFfWkRgW0daVUFRTzpLSjhBQjRAQjVAQjU+QTY+QTY+QTY9QDc9QDc5PzU5PzU5PzU6QDY6QDY6Qjc6Qjc6Qjc7QDk7QDk7QDo6Pzg6Pzk5Pjc5Pjg5Pjc7QDo7QDk7QDo7QDk6Pzk6Pzg6Pzk6Pzk4Pzg3PTk0OzQzODIxNjAvNC4uMy8uMy8uMjEuMjEsMi4sMi4rMisrMiosNCkpNiUkNh4pPSEyRis4TDE7TzY7TTU7TTU7TTU4SjI5SzM7TTU8TjY8Tjg3SDUxQjAuPC0tNywuNS0tNCxdZU5eZk9fZ1BgaFFkaVVmaVZnaldpalhmZ1VoZ1VoZVZoZVZqZFZrZVdrZVlsZlhsZlhraFltZ1trZ1xtZl5qZltpZVlnZVZnaFZma1Vlbllib11kcWhzg4CWqKy4x87S2+Li6e/y9/v3/P/4/Pv8/vn8//b8/vH3+Or5+ur49+Xy8d3u7dnr6tbg38rX0r7Xz7zLwK69tKW9s6nCt7HMwsHb0tfq4Oj68/v89v/++////v/+/f/8/f/8/v38/v3+/v7+/v7+/v7+/v7+/v7+/v7//vz//vz//vz//vz+/fn+/fn//Pn//fr//vv//vv//v///f7//P3//f7////+//39//z7/fj///v8/ff//fj//vr//fj/+vb/9/T/+fn/+v///P///f/////////9//z9//78/v3+/////////vz//vn//vP//u7//er//eb69Nz/+uDn4MaPiGxVTjJXTjFUSy5TSitXTjFXTjFVTjFVTjFUTzJUTzJUTjRTTzRRTTJSTjVRTzZQUDZNTzdLTzZITTZHTDVKUDZGTzRBSi09Ric+SCZESypGTStFTCpQVjRQVDNLTi9ISyxUVDhiYkZjY0laWkBbWUBcWkFdW0JdW0JbWUBYVj1VUzpTUThIRjFHRDFEQTBBPzBAPjE+PjI/PzU+QDU7PjU5PzU5PzU5QTY5QTQ4QzU4QzU4QzU6Qjc5QTY5QDg4QDU4Pzc5QTY5QDg6Qjc6QTk6Qjc5QDg6Qjc7Qjo8RDk9RDw+RT04Qjo4Qjo3QTg4QDU2PjE0PC8zOS8yNzEuNDAvNTEtNy8tOS0uOykwQCY2Ryc3TSc7Vis6Vys7VTA7VDQ7Ujg9UDo+Tzw+UDo6TDZAUjhFVz1GWT1EWD1AVDs1SDIrPCksNissMysrMipaZ01baE5caFBdaVFialNja1Rma1doa1hnaFZnaFZpZldpZldrZVdsZlhtZVptZ1ltZ1lraFlrZ1trZ1xqZl1qZltoZlplZlZoaVdnbFZmb1xlcmFqd256iomcq7K6yNHQ2eDh6ezy9/v4/v75/vr6//j7/vP5/e/4+ev3+Ob19OLt7Njp5tPl4s/c18TSy7nKv63BtKS5raG8r6bBtrLLwcDb0Nbm3+b78/799//++////v/+/f/8/f/8/f/8/f/+/v7+/v7+/v7+/v7+/v7+/v7//vz//vz//vz//vz//fr//Pn//Pn//fr//fn//vr//v3//fz//P3//f7//v///v///f79+/z//v3//vv//Pr/+PP47efy5d326N/78Or/+v3//P///f7///3///v9//z9//78/f/9/v/9/v///f///vz//vX//+7//uj//+T69t39++Lk4MeLh2xSTTBTTjBRSytRSytVTy9VTy9UTzFUTzFTTzJTTzJRUDRRUDRRTTJQTzNQTjVOUTZNTzdKUDZITTZFTTVIUTZFTjFCSy4/SSdCSShGTStKUCxLUS1OUi9QVDFWWjdeYkFfYkNZXD9UVzxUVDxWVj5XVT5YVj1ZVz5ZVz5YVztWVTlYVDlRSzNPSTNMRzRJRDFEQTJCQDNBPzM+QDU8PTU5PzU5PzU5QTY3QjQ4QzU3RDM3RDM6Qjc5QTY5QTY4QDU4QDU5QTY5QTY6Qjc6Qjc6Qjc6Qjc6Qjc7Qzg8RDk9RTo8Rjs9Rz88SD48Rjs7RjY8RDU6QjM5PzM4PTY3Pjc0PjYzPTQwPi0zQyk5TSpCWS9HYTFPcDtMbjtMaT1GYT5CWT88Uj08TTs6Szg9TzlEVjxLXkJNYEJMYERIXEA6UTcxRC4rNSorMiopMChaZ01baE5caFBealJialNkbFVnbFhpbFlpalhpalhraFlraFlsZlhtZ1luZltuaFptZ1lraFlrZ1tqZltqZl1pZVpoZlpmZ1doaVdlalRkbVpndGNvfHN/j46drLO2xM3N1t3e5unx9vr4/v76/v35/vj4+/L0+Orz9Obw8d/q6dfh4Mzc2cbX1MHQy7jHwK6/s6O9sKC8sKTDtq7LwLzVy8rj2N7r5Ov89P/99//++////v/+/f/8/f/8/f/9//7+/v7+/v7+/v7+/v7+/v7+/v7//vz//vz//vz//vz//fr//fr//Pn//Pn//Pj//Pj//fz//Pv/+/z//P3//v///v///f7+/P3//v3//vv//fv88+7q39ni1c3r3dT37Ob/+v3//P///f7///3///v9//z9//78/f/9/v/9/v///v////3//vX//u3//ef//uP7997+/OPj38aJhWpQSy5RTC5RSytRSytUTi5VTy9UTzFVUDJUUDNTTzJRUDRQTzNRTTJPTjJQTjVNUDVNTzdKUDZJTjdHTzdIUTZGTzJDTC9DTStGTSxKUS9PVTFTWTVRWTJXXzhqcEp5f1txdlZZXkBLTzRNUDVRUTlRUTlSUDlTUThUUjlVVDhZVTpaVjtYUjpWUDpSTTpOSTZIRTZEQjVCQDQ/QTY8PTU5PzU6QDY5QTY3QjQ3QjQ3RDM3RDM6Qjc6Qjc5QTY5QTY5QTY5QTY6Qjc6Qjc6Qjc6Qjc6Qjc6Qjc7Qzg8RDk+Rjs8Rjs/SUE+SkA/ST4+STk/Rzg+Rjc+RDg9Qjs+RT45Qzs2QDc0QjE5SS9CVjNQZz1YckJef0pbfUpYdUlNaEVDWkA5Tzo2RzU0RTI8TjhFVz1OYUVTZkhTZ0tOYkZAVz02STMvOS4vNi4tNCxaZ01baE5caFBealJibFRlbVZobVlpblprbFprbFpsaltsaVpuaFpuaFpvZ1xvaVtsaVpraFlqZlpqZltpZVxpZVpoZlpmZ1dmZ1ViZ1FhaldlcmFvfHN+jo2WpayrucLH0Nfa4efu8/f2/Pz4/Pv1+vTz9u3u8uTp6tzj5NLc28nT0r7Oy7jJxrPDvqu9tqTDt6fHuazNwbXWycHf1NDo3t3z6O748fj99f/++P///P/+/f/9/P/8/f/8/v39//7+/v7+/v7+/v7+/v7+/v7+/v7//vz//vz+/fv//vz//fr//fr//fr//Pn/+/f/+/f//fz//Pv++vv/+/z//f7//v///f7+/P3//Pv//vv//fv99O/t4tzm2dHw4tn88ev/+v3//P///f7///3///v9//r9//78/f/9/v/9/v///v////3//vX//u3//Ob//OH++eP//ufk38mKhm1QSjBSTTBTTC9TTS1UTi5VTy9VUDJVUDJUUDNTTzJQTzNPTjJQTDFOTTFPTTRMTzRMTjZKUDZKTzhIUDhKUzhHUDNHUDNJUzFNVDNPVjRWXDhcZD1nckh0gVWHkmiQm3OFj2xudVRaYUJSVjtMTjZOTjZNTTVOTDVPTTZSUDdXUzpZVTxaVD5YUjxUTzxRTDlLSDlHRThFQzdAQjc9PjY6QDY6QDY5QTY3QjQ3QjQ2QzI2QzI7Qzg6Qjc5QTY5QTY5QTY5QTY6Qjc7Qzg7Qzg6Qjc6Qjc7Qzg7Qzg9RTo+Rjs9Rzw9Rz88SD4+SD0+STk/Rzg+Rjc+RDg9Qjs9RD05Qzs2QDc0QjE5SS9EWDVSaT9bdUVae0ZXeUZUcUVJZEE9VDoySDMvQC4tPis2SDJAUjhMX0NSZUdTZ0tPY0dAVz02STMxOzAwNy8tNCxZZ01aaE5caFBealJibFRlbVZpblpqb1ttblxsbVtta1xtaltuaFpuaFpvaV1vaVtsaVpraFlqZlppZVppZVxpZVppZ1tnaFhnaFZjaFJhaldlcmFvfHN7i4qQn6aisLnBy9TU3eTp8fTy+vz0+vjx9vDt8Ofo7N7i49Xa28nS0b/MybbJxLHDvqu/uKa8s6LKvq7Txbjc0MTm2dHt4uD27O3/9Pr/+f//9///+v///P/+/f/9/P/7/P78/v3+///+/v7+/v7+/v7+/v7+/v7+/v7//vz//vz+/fv+/fv//fr//fr//fr//Pn/+vb++fX//fz/+/r9+fr++vv+/P3//f7//v///f7//Pv//fr//Pr/+PP37Oby5d346uH/9O7/+v3//P///f7///3///v9//r9//78/f/8/f/9/v///v////3//vX//ez/++P++t///Ob//+nn4syMiG9STDJUTzJUTTBVTjFUTi5VTy9WUTNWUTNVUTRTTzJPTjJOTTFQTDFOTTFOTDNLTjNMTjZLUTdLUDlKUjpMVTpJUjVKUzZPWTdTWjlUWzldYz9mbkeCkmOSpnOfsYGbqn+SoXqIlHBye1xcYkZMUDdLTTVMSzZMSjVMSjVQSzVUTjhWUDpXUTtWUDpTTjtRTDlMSTpJRzpHRTlDRTo9PjY6QDY6QDY5QTY3QjQ3QjQ2QzI2QzI7Qzg7Qzg6Qjc5QTY5QTY6Qjc7Qzg7Qzg7Qzg7Qzg7Qzg7Qzg8RDk9RTo+Rjs9Rzw9Rz88SD49Rzw9SDg+Rjc9RTY9Qzc9Qjs6QTo3QTk1PzY0QjE5SS9CVjNOZTtVbz9UdUBSdEFQbUFFYD05UDYtQy4rPCorPCkxQy08TjRIWz9QY0VSZkpOYkZAVz01SDIsNisrMionLiYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0aW1hZ2VzL3Rlc3RpbWdmc3QuanBnIGIvdGVzdGltYWdlcy90ZXN0aW1nZnN0LmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTU4NjA0Ny4uMDAwMDAwMAotLS0gYS90ZXN0aW1hZ2VzL3Rlc3RpbWdmc3QuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdGltYWdlcy90ZXN0aW1nZnN0LnBwbSBiL3Rlc3RpbWFnZXMvdGVzdGltZ2ZzdC5wcG0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxNThiZDEuLjAwMDAwMDAKLS0tIGEvdGVzdGltYWdlcy90ZXN0aW1nZnN0LnBwbQorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotUDYKLTIyNyAxNDkKLTI1NQotMC8rMC8rMC8rMTAsMjEtMzIuNTItNjMuODMvODMvODMtODMtOjMtOjMtOjMrOjMrNzIuNzIuNjEtNjEtNjEtNjEtNzIuNzIuNTAsNTAsNTAsNTAsNTAsNTAsNTAsNTAsNC8rMy4qMy4qMy4qMi0pMi0pMi0pMi0pMSwoMSwoMSwoMSwoMSwoMSwoMSwoMSwoLiskLiskLywlMC0mMS4nMi8oMi8oMzApNTIrNjMsNjMsNzQtODUuOTYvOTYvOjcuQDouQTstQz0vRkAyR0EzSUM1SkMzSkMzTEUzTEUzTEMyTEMyTEQxTUUyUEUzUUQzUD8vVj8vYEAxbUMzfUU2ikc3mEc2okU0r0g5tkY4vkY4wkY6xkg8yEg9ykc/0EVA5UZL60RM60RL60VJ7UJI7kFD8T5C8zxA9Ts+9Do98zk+7js+6D4/30A91j47ykA2uz0utD8rtD8rtD8rsj8ssj8ssEAsr0AsrUAsqUArpUAsoUErnUEqmUEpmEAolUEpkkArkD8skT4skT4skD0rkD0rkD4pkD4pkz4qkz4qkz4qkz4qlD0plT4qlj8rlT8ulEA1kz81lz0ynj4wqEEws0QxuUQyvUQxtz8vs0IyqkY3nEk7hkg5bUIyVDkoQzMmPDUvOTU0ODQzNzMyNjIvNTEuNDAtMy8sNjMuNTItNTItNTItNDEsNDEsNDEsMTArLS8qKzAqLS8qLS8qLi8qLi8qMS0qMS0qMi0qMSwpMykoMignNSkpOi4uRDY2Tzo5aUFCfElIi05NlFBPnlZZqWNrqG+AnHSOknyihX+rf4a6fIi8cnqrXmGOVEt2T0VoUklmTUheS0hbU1FfZGRue3yBjZGQmJ2XoqieoaeZnaGSjpKBentpZWZUWFdFUU5FVFFaVFBhVFBhLy4qLy4qMC8rMTAsMjEtMjEtNTItNTItNzIuNzIuNzIsNzIsOTIsOTIsOTIqOTIqNzIuNjEtNjEtNTAsNTAsNjEtNjEtNzIuNjEtNjEtNjEtNjEtNjEtNjEtNjEtNjEtMy4qMy4qMy4qMy4qMi0pMi0pMi0pMSwoMi0pMi0pMi0pMi0pMi0pMi0pMi0pMi0pLywlLywlMC0mMS4nMi8oMi8oMzApMzApNTIrNjMsNjMsNzQtODUuOTYvOTYvOTYtQDouQTstQz0vRT8xRkAySEI0SUIySUIySkMzSkMxS0IxSkEwS0MwTEQxT0QyUEMyTz8vVUAvXUAwaUIxd0QzhEU0kUQ0m0IypkIyrEExs0I0ukI0vkQ3wUU5xUY9ykM930VH50JI6ENJ6kRI7ENG70JE80BD9T5C9jw/9zo+8zo/7zw/5z8/3kA91D87yUA2uD0ts0ArtD8rsj8qsj8ssEAsrz8rrj8rrD8rqUArpUAsoUErnUEqmEAol0EolUEpkT8qkD8skT4skT4skD0rkD0rkD4pjz0okz4qkz4qkj0pkj0pkz4plT4qlT4qlT8ulEA1kz81lz0ynz8xq0Exs0QxvEQzvUQzukAxtEM1q0c4mkg6gkc5akAwUzkqQTMmPTYwOjY1OTU0ODQzNzMwNTEuNTEuNDAtNjMuNTItNTItNTItNDEsNDEsNDEsMTArLjArLDErLjArLjArLzArLzArMC8rMi4rMy4rMi0qMyspMykoNSkpOS0tQTU1TTg3ZD49dkVBhktHjk1LmVNTo2Bnomx8mnKMj3ughX+tfoW5eYS6bXSoWlyMUEl1TkRpTkVkTUhfTklfUE1eWlpmbW5zg4eIk5iSmJ2WmZ+TmJyNjZGAfH9uaWpYXVxKVVJJVVJZVVFgVVFgLi4sLi4sMC8rMC8rMTAsMjEtNDEsNTItNTItNTItNjErNjErNjErNjErODEpODEpNjEtNjEtNTAsNC8rNC8rNTAsNjEtNjEtNjEtNjEtNjEtNjEtNjEtNjEtNjEtNjEtMy4qMy4qMy4qMi0pMi0pMi0pMSwoMSwoMy4qMy4qMy4qMy4qMy4qMy4qMy4qMy4qMS4nMS4nMS4nMi8oMzApMzApNDEqNDEqNTIrNTIrNjMsNzQtNzQtODUuOTYvOTYtPzguQDouQjwwRD4yRT8xRkAyRz8ySEExSEExSEExSD8uSD8uSUAvSkEwTUExTUExTEAwUUExWUIyYkMxbkMye0Myh0IykUAvlzwqnzsrpjwsrj4ws0I0uEQ3vEY6xEQ710ND30BE4kFG5kNG6UNF70JE9EFE+EBC+Ds/9zo+9Dw+7z095kE/3EE80EA4xUE1tj4tsUEtsj8ssEAssEAsrz8rrz4srUAsqj8rpkAqo0Arn0Aqm0EpmEAolkAplUArkT8qkD8skD8sjz4rjz4rjz4rjzwqjzwqkD4pkD4pkD4pkD4pkD4pkz4qlD8rlT8ulEEzkz80mD8xoUAwrUIyt0QyvkMzwEIzvkQ1uEc5q0k8mUo9gEY6ZkExUDosQjYqPzgyPDc0OzYzOjUyOTQxODMwNjIvNTEuNjMuNTItMzItMzItMjEsMjEsMjEsMDErLjArLDErLDErLDErLjArLzArMC8rMC8rMy8sNC8sNS0rMyspNCopNy0sPTMyRzUzWzo1a0A5e0Y+hUpCj09Nl1tdmWdzkm+HiXicgX6re4K4c362Zm2jVFaJTUV2TEFrS0FjT0ZhT0phTElcTEtZWlpkcXV4hImFhYyFiZGGipCChYl6d3lrZmlYWltLU1NJWVRaWVNfWVNfLS0rLS0rLy4qMC8rMC8rMTAsNDEsNDEsNDEsNDEsNTAqNTAqNTAqNTAqNzAoNzAqNTAsNC8rNC8rMy4qMy4qNC8rNC8rNTAsNTAsNTAsNTAsNTAsNTAsNTAsNTAsNTAsMy4qMy4qMi0pMi0pMi0pMSwoMSwoMSwoNC8rNC8rNC8rNC8rNC8rNC8rNC8rNC8rMi8oMi8oMzApMzApNDEqNDEqNTIrNTIrNTIrNTIrNjMsNjMsNzQtODUuODUuOTYtPTYsPjgsQDouQjwwQz0vRD4wRT0wRT0wRT4uRT4uRj0uRj0sRz4tSD8uSz8vSkEwS0QyTUQzVUQyXUQwZ0QxckMvfEEvhj8tizonkTgmmjkooj0rqkAwsEU1tkg5v0Y70kRC2kFD3UND4UNC50NC7EJC8kBA9j5A+Ds/9zo+9Dw+7T8+5UE/2UI7y0E3vz8ysz4sr0Asrz8rrj8rrz8rrT4qrT4rrD8rqD8qpT8po0Arnj8pmkAolkAnlEAokkAqkD8qkD8sjz4rjz4rjz4rjj0qjzwqjzwqkD4pjz0ojz0ojz0ojzwqkD4pkT4skj8tk0EzlkAzmz8wpEAxsEIzu0M1wUM1wUM1wEY5uUk9rExAl0s+e0c6YEAzTDosPzcqQDkzPTg1PDc0OzYzOjUyOTQxNzMwNjIvNjMuMzItMzItMzItMjEsMTIsMjEsMDErLDErLDErLDErLDErLjArLjArLzArMC8rMjEtNDAtNC8sNCwqMyspNS0rOTEvQTIvUjcuYjwxcEI1eUU6gklCiFJSi2BqiWmAgnKXfHmod361bXeyX2WfUVKKTEV5TEBwTEBmT0RkT0ZjSURbRkNWTExYW15jaW1uc3l1d352eX91dHpsa29hX2FTVlhKU1NJW1dYW1ZcXFVcLCwqLCwqLS0rLi4sMC8rMC8rMTAsMTAsMzArMzArMzArMzArNC8pNC8pNC8pNC8pNC8rMy4rMy4rMi0qMi0qMy4rMy4rNC8sNC8sNC8sNC8sNC8sNC8sNC8sNC8sNC8sMi0qMi0qMi0qMi0qMSwpMSwpMCsoMCsoNC8sNC8sNC8sNC8sNC8sNC8sNC8sNC8rMzApMzApMzApNDEqNDEqNDEqNTIrNTIrNDEqNTIrNTIrNjMsNzQtODUuODUuODUsPDUrPTYsPjgsQDouQTsvQTsvQzsuQzsuQzsuQzwsRDssRDssRTwtRz4vSj4wSUAxSkc2Skc0UEg1V0YyYEUyakQvdEEufD8sgjsniDomkTonmT4roUIwqkY2sEo7uko+ykZB00NC2ERC3ERB4kNA6EA/7z098zs7+Do89zs88z086z894EM+00M6xEAzuUAvrz8rrUArrj8srD8rrT4rrD8rqz0sqT4spT4rpD8roD8snEArmEAqlT8olD8qkT8pjz4pjz4rjz4rjz4rjj0qjj0qjTwpjTwpjj0qjj0qjTwpjTwpjj0sjj0qjz4tkD8ulEMylkAxnUAxqEEytEM1vUM2wkI3wkI3vEM6tEg+pUtCkEpAdEU7WT8yRTkrOjYqPjkzPzc0Pzc0PTUyOjUxOTQwNzQvNzQvNDMuMzItMzItMjMtMTIsMDMsMTIsLzIrLTIsLDMsLDMsLDMsLTIsLzEsLzEsMDEsMTItMzIuNDAtMy4rMi0qMi0qNTAtOzAsTTcsVzosYz0wbEAzckM5eEtIf1pigWh+fm+WeXepdHq2anO0XGSjU1WSTUeDS0F2TkFtTkJmS0FjR0FdRUJXRkVVSUxVTVBVXWNhYGdgYWhgYGZcWV9TVlpMVVlLVlhNXFlUXVdXX1ZXKyspLCwqLCwqLS0rLy4qMC8rMC8rMC8rMi8qMi8qMi8qMi8qMy4oMy4oMy4oMy4qMy4rMi0qMSwpMSwpMSwpMSwpMi0qMy4rMi0qMi0qMi0qMi0qMi0qMi0qMi0qMi0qMi0qMi0qMi0qMSwpMSwpMCsoMCsoMCsoMy4rMy4rMy4rMy4rMy4rMy4rMy4rMy4rMzArMzApNDEqNDEqNDEqNDEqNDEqNDEqNDEqNDEqNTIrNjMsNjMsNzQtODUuODUuOzQsOzQqPTYsPjgsPzktPzktQDgtQDgrQjotQjotQzktQzorRDssRj0uST0vR0AwSUg2SUg2TUg1U0YzW0QyZEMwbEEucz8qezwqgjsniTsnkj0pmkEvoUYzqks5sks8w0hAzEU/0EVA1UU93UQ/5EE86z088Ts69jo79Do78Dw750A62kM8y0M3u0AwsT4rrD8qqj8rqj8rqj8rqT4qqT4qqD0rpz4roz4qoj8qnj8rmz8qlz8plD8qkT8pjz4pjz4rjz4rjz4rjj0qjj0qiz0pjTwpiz0pjTwpizwrijsqijsqizwrjD0sjT4vjT4tkkMyl0EwoEAwq0EzuEI2v0M3w0M6wUI5uEE5r0g/oU9EjE5Db0c9U0AyQDouNzcrPjkzPzc0PjYzPTUyOjUxOTQwNzQvNzQvNDMuMjMtMjMtMTQtMDMsMDMsMDMsLTIrLDMsLDMsLDMsLDMsLTIsLTIsLzEsLzEsMDEsMTItMzIuMTAsMS0qMS0qMi4rOC8qRjUrTTUpVjkrYDwuZT82akdDd1ljgWuCf3Sce3uvd3y8bHW6YmmvW1yfUk2PTEN8TUFvSz9lSD5hRj9eRkJbRURWP0FOO0BGQkdKRE1ISVBJSlFJSVFGSlJFTlZJVVhNXlpRYFlRYFlTKiwrKiwrLCwqLCwqLS0rLi4sMC8rMC8rLy4qLy4qMS4pMS4pMS4pMS4pMi0pMi0pMS0qMCwpMCwpLysoLysoMCwpMCwpMS0qLysoLysoLysoLysoLysoLysoLysoLysoMS0qMS0qMCwpMCwpLysoLysoLysoLysoMS0qMS0qMS0qMS0qMS0qMS0qMS0qMS0qMzArMzArMzArMzArMzArMzArMzArMzArNDEsNDEsNDEsNTItNjMuNzQvNzQvODUuOTIqOjMrOzQsPTYsPTYsPjctPjUsPjYrQTkuQTksQjgsQzktRDouRjwwSj4ySEAzRkQ1R0Y0S0YzUEUzVkMyXUIvZUAubD0rdT0sfDspgjkoiTopkz0smUIvoUY0qkY3uUc8wUU7x0c+z0Y82EU+4EM86UA97z078jo68Do56zw540A51kM7xUM1tEEuqD4oqUArp0AtqD8sqD8sqD8spT4rpT4tpD8toj8snz4rnD8tmT4rlT4qkz4qkD4pjz4pjz4rjT4tjD0sjD0sizwrij0rizwrij0rizwriTwsiTwsiTwsiTwsij0tiz0wjD8vkkMyl0EwoUExrEI1uUM5wEQ6w0I8v0M7uEc/r1FJo1lQjlpPcFJHVkg7QkI2PD80PDkwPjcxPjcxPDUvOTQuODMtNjMsNjMsNDMuMjMtMjMtMTQtMDMsLjMsLjMsLDMrLDMsLDMsLDMsLDMsLDMsLDMsLTIsLTIsLjArMTItMjMuMTItMC8rLy4qMC8rNC8rPjErQzEnSzMnUzksWTw0Y0dEc11pg3ONh4Cqg4S8foPHc3vEa3G7Y2WvVlOaSUOBSz9vST1lRjxhRT5dRUFaRENVPkJOOD9FOkJEPUhERE1IRlBHR1FGSFJHTFZLVVhNXlpOYVlMYVlOKSsqKiwrKyspLCwqLS0rLi4sLy4sMC8rLi0pLi0pMC0oMC0oMC0oMC0oMSwoMC0oMCwpMCwpLysoLysoLysoLysoMCwpMCwpLionLionLionLionLionLionLionLionMS0qMCwpMCwpMCwpLysoLysoLysoLionMCwpMCwpMCwpMCwpMCwpMCwpMCwpMCwpMy8sMzArMzArMi8qMi8qMi8qMi8qMi8qMzArNDEsNDEsNTItNjMuNzQvNzQvODUwOTIsOjMrOzQsPDUtPDUtPTYsPTQrPTQrQTgvQTkuQjguQzktRDouRjwwSj4yST8zRUIzRkM0SkMzTkIyU0IyWkAxYD8wZzwscDwudToqfDkphDgojDsqlD4tmkMyo0MzsUc6t0U6v0Y7yEg90kg+3UY/50Q/7UE96zw56js45z453kE6z0U6v0Q0rkEsoj4npUAspEEspUAspUAspD8rpD8rpD8toj8soD8snj8tmj8slz8rlD8rkT8qjz4pjD4qjT4tjD0sjD0siz4sij0rij0rij0riD0qiTwsiDwsiDwshTwthj0uhz4viD4xij4wkUQylkMxoUEzrUM2ukM7v0Q9wEM9ukU+t1BJsFxSpGZbkGZadV9SW1VHR00/Qko9OzgvPjcvPTYuOjUvOTQuNzQtNjMsMzMrMzQuMjMtMTQtMTQtLjMsLjMsLTQsLDMrLTQtLTQtLTQtLTQtLTQtLTQtLjMtLjMtLS8qLzEsMjMuMTItLzArLi8qLy4qMi4rNy0rOiwpQjEpSjYtUT02XUlIc2NuhXuUjYq1iozFhInNeX/LcXfDaGy2V1efSESBRT1sRT1iRD1fQj9cQkBWQENUPkRQPUZLR1FSS1dTUV5VU2BWUmBTUl5SU19TWV9RXVpJYFlHYFlHKy0sKy0sKy0sKy0sKy0sKy0qLCwqLCwqLy4qLi0pLi0pLi0pLywnLywnLywnLywnLionLCspLCspLSwqLSwqLSwqLSwqLSwqLSwqLSwqLSwqLSwqLSwqLSwqLSwqLSwqLCspLCspLSwqLSwqLi0rLi0rLy4sLy4sLy4sLy4sLy4sLy4sLi0rLi0rLi0rLi0pLysoMCwpMS0qMi4rMy8sMy8sMi4rMi4rMi4rMi4rMi4rMy8sMy8sNTEuNjIvNzQvNzAqODErOTIsOzQsPDUtPDUtPTQtPTQrPjUsPjUsPzUsQDYsQTctQzkvRzoxRjwyRz80Rz8yST8zTT8yUj4zVz0wWzktYTcpazoscjgqezkrgzksijsskT4ulj4wmz4vpkIzrEI0s0M1vkY4yUc600Y83UQ+5UM+6EA96UE+5UM+2UQ9yEQ3tkMxp0EroUEroUEroUAtoD8snz4roT4rnz4rnz4tnj8tnD0rmTwrlj0rlD0qkD0rjj0qjj0qjD4qizwriTwqiTwqiTwqiDsrhzsrhzsrhTwriDwuhj0uhj0uhT0vhj4wiEAyiUE1ikI0kEQ0lUQxo0Y3sUk+uUY/ukM9ukU+uE1FtFpRrWddoXFjkHRmfXFjaWtdVF9RR1JETExCSUU6Qj4zOzgvODUsNzQrNjMqMzMpMzQsMzQsMTQtMDMsLTIsLDErLDErLDErLTIsLTIsLTIsLTIsLTIsLTIsLTIsLTIsMDItMDItMDItMDItMTItMTItMTItMjEvNCsuOi8zQTMyQjUvSDs1Wk5Od214ioWckpG7k5bNkJXXg4nTdHrEZ260XmOlWluUTEpyRkNiQD1aPT9WP0JVQUlUSlVbU2FiYXBtbn12dYV7cIB1aXlsZ3VoXmxdV2BPXVxIYVtFYlxGLC4tLC4tLC4tLC4tLC4tLC4tLS0rLS0rLi0rLi0pLi0pLSwoLywnLywnLismLionLCspLCspLCspLCspLCspLCspLCspLCspLCspLCspLCspLCspLCspLCspLCspLCspLCspLCspLSwqLSwqLSwqLi0rLi0rLi0rLy4sLi0rLi0rLi0rLi0rLi0rLi0rLi0rLysoMCwpMS0qMi4rMi4rMi4rMi4rMi4rMi4rMS0qMS0qMi4rMi4rNDAtNTEuNjIvNy8sODErOjMtOzQuPDUvPDUtPTQtPTQtPjUuPjUsPzUsQDYtQTcuQzkvRjkwRzoxRz0zSD40Sz41TD4zUT00VDwyWTgvXTcsZzgubTcrdzctgDgsiDotjzwulT0xmT0woUEzpUEyqkM0skQ1vUU3yEY50kU82UQ93kM+30Q/3kdA00Y9wUY3sUMyo0MtnUItnkItnUEsnEArmz8qnT4qnT4snj8tnD8tmTwrmD0rlD0qkz4qjz4rjD4qjD4qij0piTwqiTwqiTwqhzwphzsrhTwrhDsqhDsshTwthDwuhDwugz0xhD4yhEAzhkI3iEM0kUg5lUY1oUg6r0pAuElCt0hBtktFslRMr2VaqHNlnn1sj39vfXtsbHRlWmZYTVlLS01ASkg8RUM3Pj4yPToxNzctNDQqMTEnMjMrMTIqMDMsLzIrLjArLDErLjArLDErLjArLDErLjArLDErLjArLDErLjArLjArLzEsLzEsLzEsLzEsMDEsMDEsMDEsMTAuMyw0OC42PDIzPjQyR0A6W1ZTdnN6ioidkJO2k5fHkJbShIzNeILAcHq3anOqZ2+dXF9+WFpxUVZpUVhoVF5oWWZsZXV1cYF+c4d+fZGFgZaHfI6AdYd3cIFxZHVlWmZSWllEX1k/YVtDKi4vKi4vKi4vKi4vLC4tLC4tLC4tLC4rLCwqLCwqLSwoLSwoLCsnLCsnLCsnKyomKyooKyooKyooKyooKyooKyooKyooKyooLCspLCspLCspLCspLCspLCspLCspLCspLCspLCspLCspLSwqLSwqLSwqLSwqLi0rLi0rLi0rLi0rLi0rLi0rLi0rLi0rLi0rLysoMCwpMS0qMS0qMi4rMi4rMS0qMS0qMCwpMCwpMCwpMCwpMS0qMy8sNDAtNTEuODAtOTEuOjIvOzMwPDQxPDUvPTQvPTQtPTQtPTQtPjMtPzUsQDYtQjgvRTgwRjkxSDszSDszSTw0TTw0Tjs0Ujk0VTgyWzYuYjcwaDYtcjYsezcshTksjTsvkjwvlj0vnEAznUAxoUEzp0EzsEI1uUM3xEQ5zEM51EU91kc/00k/y0g+vEY4rUMzn0MumUEtnEEum0Atm0Atmj8smj0rmj0smz4tmj8tmDwtlTwskz0skD0rjj0sjD0sij0riT4riD0qiD0qhzwphzwphzsrhDsqhDssgzssgzstgTsvgjwwgT0ygz80hEI2hUI5h0M2k0s9lkk5oEg8q0pBsktEsUtGsVRNrV9VrHJkpoFvnYx4j456gYp3coBvY3FiV2NVS1JCS00/R0k7Q0U3Pz8zOTsuMzUqLzEmMDEpLzAoLzAqLi8pLi8qLS8qLi8qLjArLzArLjArLzArLjArLzArLjArLzArLzArMDEsMDEsMDEsMDEsMDEsMDEsMDEsMS8wNCw3Niw3OC8yOzYySEU+XV5WeHl7iY2YjpSuj5e8jZXEhI7BfYm5e4q1fIywfIuofImad4SNcX6Gbn2AbH5+boN+eI2EgpqNiqKSj6iVj6aSh5yJgJWCeo16antpXGhSV1c/XFg7X1tAKi4vKi4vKi4vKi4vLC4tLC4tLC4tLC4tLCwqLCwqLSwoLCsnLCsnLCsnKyomKyomKyooKyooKyooKyooKiknKiknKiknKiknLCspLCspLCspLCspLCspLCspLCspLCspLCspLCspLCspLCspLCspLCspLCspLCspLSwqLSwqLSwqLi0rLi0rLi0rLi0rLi0rLysqLysoMCwpMS0qMS0qMCwpMCwpLysoLysoLysoLysoLysoMCwpMS0qMy8sMy8sODAuOTEuOjIvOzMwPDQxPDQxPDMuPDMuPTQvPDMsPTIsPjMtPzQuQDYtQzYuRDcvRjkzRjkzRzo0STozTDo2TTgzUDcyVDUwXTYvYzcubDUudjgtfzkviTsvjz0xkz0wmEA0mUAymD8xnUAxpEAxrUE0t0M2vkQ3x0c8ykc9yUk+wkg9tkY4qEIznEEvl0AtmEEtl0Aslj8rlj4qlj0rlj0rmT4slz4slTwslD0skD0rjj0qjD0sij0riD0qiD0qhzwphzwphjsohDsohDsqgjspgjorgDssgDoufzsugDwxgD4ygj82gkI4hEQ6hUU7kUs/lUk8nEg+pUtDq0xGrFJKq11TqWtep4FuoI54mpqCjpqChJaAeIt3bHppYW5dUltITlVDSk4/REg5P0M1Oj4wNTcsMTMoLzAoLi8nLS4oLC0nLC0oLi0pLy4qMC8rLy4qLi8qLy4qLi8qLy4qLi8qLy4qLi8qLzArLzArLzArLzArLzArLzArLzArMC4vNS04NSs2My0vOTYxSEo9YWVXeYB4iJGQjJShjJavipWzg5CwgJGthZmxjKOzkKmwk6ipj6Ohi6Cbh56WgJqNfZiJgJ2Lh6SOk7GZlrKZk62Ui6OLhJyEfJJ7aXxmWGZPU1Y7WFc5XVk8Ky8wKy8wKy8wKy8wKy8wKy8wLS8uLS8uLS0rLCwqLCwqLCwqLCsnLCsnLCsnLCsnKyspKioqKioqKioqKSkpKSkpKCgoKCgoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKysrKysrLCwsLCwsLS0tLS0tLS0tLy4sLysqLysqMCwrMCwrMCwrLysqLysqLiopLysqLysqLysqLysqMCwrMS0sMi4tMy8sOTEvOTEvOjIwOzMxOzMwOzMwPDIwOzItPDMuPDMuPTIuPTIsPTIsPzQuQjUvQzYwQjczQjczQzg0RDkzRzk2RzgzSjcxTTYwVjgwXTcuZzYvcTgtejowhDwwiz0wkD4ylj81lj81lT8ylz8xnEAxokIyq0Q1skQ1uUU4vEY6vkg8uUc8r0U4o0IymUAwlT8ulkEtlUAslD8rlD0qlD0slD0slTwslT4tkzstkjwtjzwsjj0sizwtiTwshzsrhTwrhjsohjsohDsqgzopgzorgjorgTkrfzorfzsufjwwfzwzfz81gUE4g0Q7hUY9hkc+j0tAkUk9mEg/oEtEp1BJqFhRp2dbpHZmoY11mZl9lKOGi6SHhJyCfJJ9c4JvanVkWmZSVV5JTFVCRE06PkU1OUAwNzstNDcsMDEpLzAoLi0oLCsmLCsnLysoMCwrMS0sMCwpLi0pMCwpLi0pMCwpLi0pMCwpLi0pLy4qLy4qLy4qLy4qLy4qLy4qLy4qMS0uNy04NSkzMSwpNjYqR0w4X2lRd4NthpKEi5eTjZqgi5mkhpehh5yhj6mombmuoMCxmLeol7ammLelmLijkLKaiauSiauQjrGTkrOUkrOUj6yOiKKFg5uBe5J4Z3tiVGJJUFQ5VFU2WFc5Ky8wKy8wKy8wKy8wKy8wKy8wLS8uLS8uLi4sLS0rLS0rLS0rLSwoLSwoLSwoLSwoLCwsLCwsKysrKioqKioqKSkpKCgoKCgoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKSkpKSkpKSkpKSkpKCgoKioqKioqKysrLCwsLCwsLS0tLi4uLi4uLiopLysqLysqLysqLysqLiopLSkoLSkoLysqLysqLysqLysqMCwrMS0sMy8uMy8uOjIwOjIwOzMxOzMxOzMwOzMwOzEvOzEvOzItOzItPDEtPDEtPDErPTIsQDMtPzQuPzYxPjcxPzgyQDkzQjk0Qjk0RDcxRzYvTzYvVjUsXjYsaTcsdDoufjwuhT0viz0wkz81kj40kj4zk0AylEExmUIxn0QypEMyqkM0r0M2s0U4r0U4qUM3oEAymD8xlT8wk0AukkArkz4qkj0pkzwrkzwrkzwrkz0skTssjzwsjj0sizwriTwshzsrhTwrhDsqhTonhTongzopgzopgTkqgTkqfjkqfTksfjwwfT0xfj40f0E2gkM6g0c9hUlBiUpDjUpBjUc9l0hDn09IplVRpmBYpnFjooNvm5V7lKGDjqmIhaaHgZ+DfpZ+eId0cHxoY29ZW2lSUF1JR1M/QEs6PEU0OT8xOT0vMjQpMDEpLy4pLismLSkmLyonMSsrMiwsMCsoLysoMCsoLysoLysoLysoLysoLysoMCwpLi0pLi0pLi0pLi0pLi0pLi0pMSstNio0NCkxMSwmNTYmQ0wvWmhFc4JhhJJ4jZyJj5+Uj56Xip6ViqWWlbWeocalp8+sosmspcmvpMuuocipl7+di7OQh6+KjbOOjLKLjrKMjKuJg6F/fpl6do9yY3dcUGBFTFI2UVIzUVIzKy8yKy8yKy8wKy8wKy8wKy8wLS8uLS8uLjAvLjAvLi4sLi4sLi4sLS0rLi0pLi0pLS0tLS0tLCwsKysrKioqKioqKSkpKSkpKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKSkpKSkpKSkpKCgoKCgoKCgoKSkpKioqKioqKysrLCwsLS0tLi4uLi4uLiopLiopLysqLysqLiopLSkoLCgnLCgnMCwrMCwrMCwrMCwrMS0sMi4tMy8uNDAvOjEyOjEyOzMxOzMxOzMxOzMxOzEvOzEvOzEvOzEvOzAsOzAsOzAsPDEtPzIsPjMtPDUvOzYwOzgzPDk0PDk0PTgyPzgyQDUvRzQtTjMqVzUrYjYrbTgqeDorfzwshTwtjz0ykDwyjj4zj0AzkEEykUIxlUIwmUAunj4upT8xqUE0qUM3o0E0nD4ylj4ylD4vkj8tkD8qkD0rjzwqkTsqkTsqkTsskjwtkTssjzwsjTstijssiDsrhzsrhDsqhDsqgzongzongjkogjkogTkqgDgpfjkqfTksfz0xfj4yfz81gEE4g0Q9hUlBh0pFiU1FikpBjkhAlUpFoVROp1xXqWlgp3xso455l5x+j6eFh62IgKmHfqGDfph9fYp2d4BtaXdgYnJYWGdQT11GSFRAQ0w7PkQ2PEAyNTcsMzQsMC8qLywnLikmMSknMikqMyorMiooMCsoMiooMCsoMCsoMCsoMCsoLysoMCwpMCwpMCwpMCwpMCwpMCwpMCwpMSsrNikyNSktMS0iNDYgP0kmVWQ5b4BUgJJqi5x8jqCGj6GLiqGHi6mHlLeNnsmUotGbptOqpdGtpNCsnsukkL2Ugq+EgayBhbCDha6CirGFiKuDf596eZRzcIlpX3NXTV1CSU8zSk0wSUwvLDAxLDAvLDAvLDAvLDAvLjAvLjAtLjAtLzEuMDAuLzArLzArMC8rLy4qLy4qLy4qLy4sLy4sLi0rLSwqLCspKykqKykqKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkrKSkpKyksKykqKigrKigpKScoKCgoKCYnJycnKSkpKSkpKioqKyspLCwqLS0rLi4sLi4sLCspLCspLSwqLysqLiopLSkoLCgnKycmMCwpMCwpMCwpMSwpMi0qNC8sNTAtNjEuOjIwOzMxOzMwOzMwOzMwOzMwOzEvOjAuOzEvOjAuOzAsOzAsOzAsOzAsPjAtPTIsPTQtPDUtOjcwOTkxODkxODkxOTkxPjcvQDEqSTApUjEoXDQqZjYqbzosdDwtejwthj4yiT0wiz8yjEAyjkExj0AxkUAvkz0slj0tnD8wn0IzoEM0nUE0mUAylT8wkj8vkz0skz0skD0tjj0sjTwrjD0sjD0sjD0sjD0uizwtij0tiTwshzsrhjoqhDsqgzopgToofzoqfzoqfjsqfTopfDoqfDoseTorfj4yfj4ygEA2gUI5gkY8hUpCh05Fik9HiklDjUhDkk9JmFxUnGhdnHVmnYh1nZmAk6KFjKqIiK2LgamHfqGDfZp+eY94c4duZ35iYXpcWnFVVGZMTVxFRlI+QEk4PUEzNzkuNTUtNC8rMCsoMCgmMScoMykqMyorLykpLionLiopLiopLykpLykpLykpLykpMCoqMCoqMCoqMCoqLysqLysqLysqMCosNCkvNCorMi4jMzUfPEYjUWA3bH1Rf5Bmh5lzip55i6F9iKF6h6d4kLV/msOHncqPnMiXnMecm8aZlsGUi7aIgax+g66AirWHgqx+h66ChqmBfJx3dZBvbIRkWm5TSVk+RE0yRUkwQ0cuLS8qLjEqLjEqLjEqLzIrMDErMDErMDErMjMtMzItNDMuMzItNTItNDEsMzArMi8qNTAsNC8sNC8sMy4rMS0qMCwrMCwrLSwqLiwtLiwtLS0vLS0vKywuKistKCktKSkrLikvLiktLikvLiktLiktLCotLiorLCorLCspLSwqLCwqLC0oLS4pLS4pLS4pLS4pLCwqLCwsLS0tLiwtLy4sLy4sMi4rMi4rMSwoMi0pMy4oNi8pNzAoODEpOjEqOjEqOzQsPDUtPDUtPDUtPTQvPDMuPDMuOzItOzItOzItOzAsOzAsOzAuOzAuPDEvPjAtQTApPzEoOzQqNTcqMjgsMTkuMzYtODMtPy0pRSkmSygkUiklWS4nYDUsZDwwa0AweEAvf0AuhUAwikEyj0AxkT4wkTsukTkrkjoskz0uk0AwlEMyk0IvkkEujz4rjzwslTswljovkjwvjD0uhz4tgz8sgj8sgT4rhUAwhz8whz4viDwuhzsthjoshDssgjorejgqfkAxdzwscTgndz4tdz4tdTwre0AwezwtgT8zh0U5iUk/h0tAhk1Cg09Ch05FkExJlFNPlGJZkXBhiX1nholuh5Z5h59/i6SGi6aHjaeKiqeJhaOHfJ+BdJl6bpZ0Z41oYIReWXtYWXRTWm5SVmZMTldESUs9QT8zPTgyOS8tNCopMycpMycrMiYqMCcqKioqJywoKCopKSkpKigpLSkqLigqMSgrMikuMikuMigwMigwMCkwLyowLyowLyouLyktMSsrMC0oLzAiOz4pU1w/bnlXfItki5t0iZ5zi6J0i6d2iadzh6pyjrR7l76FnMGNmr+MlbmJjrSDiK59g6t5gql6g6p9gqd7gqV9f596dpN0cIlsZn1hWWtVTVpGSFE8Q0g0PkMvLjEoLjEoLjEoLzIpMDEpMTIqMTIqMTIqNDQsNDQsNjMsNjMsNjMsNTIrNDEqMzApNy8sNi4rNi4rNS0qMi0qMi0qMCwrMCwrLiwtLiwtLS0vLS0vKywwKisvKSouKSgtLSguLicuLicuLigsLSgsLSkqLSkqLSkoLSwqLSwqLC0oLS4pLS4oLS4oLi8pLi8qLC4rLC4tLS0tLi4sLy4sLy4qMS0qMS4pMi0nMy4oNi8nNzAoOTAnOjEoPDIpOzIpPTQrPDUrPTYsPTYsPjUuPTQtPDMsOzIrOzItOzItOzAsOzAsOzAuOzAuPDEvPjAtQi8oQzEnPzIpPDMqOTUsOTUsODMtOjEsPy0pQysnRyknTisnVC8pWTQsXzoxZD0ub0Aud0Asf0AviEAyjj8ykT0ykjsxkTowjDosijssij4uiUAvikEui0IvjkEvkT8xkzsvlDoxkDwxij4whD8vgUAuf0AugD8tg0AvhD8vhj0uhTwthDssgzssgjorfzwsdzcreDwxcjorbjkpcz4scj0rcTkodDsqfD0ugkAyiEY6iUk9h0tAhU1Ag09Ch05Fj0lHlFNRkmZdjHdmgoZtfpN0f55+gqWEiKeHiqeJj6iLjqeKiKWHf6CDdJt8bZl2ZJNpXotgWIJaWHxWWXdVWG9SUmFKTVZDREg6QEA2OjcyNC8sMSsrMikqLykrLSkqKioqKSsqKSkpKSkpKyksLSgsLyktMCouMigwMCkwMCkwLyoxLyoxLSoxLCsxLCswMi0xMi4tLysoLCwkODosU1hCbndafYtnhZVug5lrhp5shqJvhaNvgqVth6x2kLV/mLmElreCkbOAiq97hap3gqh1gqh5gqd7gqV7gaR8fp17d5Jzb4hraHxjWWtVTVpIRE08PUQ0Oj4vLzIpLzIpMDMqMDMqMTIqMjMrMjMrMjMrNTUtNTUtNzQtODUuNzQtNjMsNjMsNTIrODErNzAqNTAsNC8rMy4qMi0pMS0qMCwpLy4sLy4sLi4uLi4uLS0vLCwuKSosKiosLiktLyktLyktLyktLiktLiorLiorLiopLi0rLi0pLi0pLy4qLi8pLi8pLzAqLzArLy8tLy8vLi4sLi4sLy4sLy4qMS0qMS4pNC8pNC8pNzAoODEpOzIpPDMqPjQqPTUqPzYtPjctPzYtPzYtPzYtPjUsPTQtPDMsOzItOzItOzAsOi8rOi8tOzAuPDEvPjAtQDEqRDEqRy8rSi4rSyssSiotRyosQysrQS4qPS4nQC8oQy8mTS8nVzApYjMtZTUraTkrbjosdjwufz0xhz00izs0jToyijoxiTwyhz0yhD8wg0AwhkEyh0Izi0E0jkI0jT4xjT4viz4uhz4thj8tgz8shD0rhTwriDwshzsrhzsrhjoqgjspfzwpez0oej0qfD4vejwvdTosdTstdz8wdz8wdT0udjstfkAzgkI2iEU8iUk/iUtAh0tAhk1CiE1FkUpIlVRQlmZckHZlh4VsgZJyf517gKSAhamFhqmIi6qKjqmKjKWHhp+CgJl8eJd3Z5ZsX5NlWopgWodeW4NeWXxbU3FVUGhQRllFQFE/OEQ2MDovLDMrKTApKC0pKSsoLigoMCcoLyYnLyYnLigqLykrMCosMCwtLSsuLCwuKywuKS0wKS0wKC0wJi4wKC0wMS8yMy8uLionKioiNTcpUFU/bHVae4lmf5FrfZRof5lqgZ9tf59tfaBqgKVxh6x2iq95ia54hqt3gql0gKZzfqZyfqV2f6Z5f6R5f6J6fJt5dpFyb4hrZ3tiWGpSTVpGQkk5PEAxODosMTQrMTQrMTQrMjUsMzQsMzQsNDUtNDUtNjYuNjYuOTYvOTYvOTYvOTYvODUuNzQtOTIsOTIsNjEtNjEtNTAsNC8rMi4rMi4rMC8tMTAuMS8wLy8vLy8vLS0tLCwuKysrLyouMCosMCouMCosLyssLysqLysqLysqLy4qLy4qLy4qMC8rLzAqMDErMDErMDErMDAuMDAuMDAuMDEsMC8rMC8qMi8qMi8oNjErNzMqOjMrOzQqPTQrPjUsQDYsQDYsQTgvQDkvQTgvQTgvQDcuPzYtPjUuPTQtPDMuOzItOzAsOzAsOzAuOzAuPDEvPTIuQTQuRTIsTC4sUisuVSgvVSYuUCctSCosQS8rOzIpOjMpPDImRzEmUjAnXi8pYjApZzguajoudDswfD00gzw2iTs3iTo1iDs1iD84hUE4hEI2gkI2hUM3hkI3h0E3iUE1iEAxh0Auh0Auhj8thT4shj0shzsriDsriDkqiDkqhjkpgzopfjsoez0odj4ndz0pgT8xejYreDgseTsudTosdjwuekAyekAyfkM1g0U6hkg9h0k+hko/hkxAh05DiVBFjFNKjVtQjmlZinRfg39mf4psfpZ0f596gqaCg6mEh6uHiKqHiaaHhqGCgZp8fJd4cJZvaJNoZI5mZI1lZYtmY4djXX5fWndbT2dPSF5JP1A+NkQzMDstLDQpKS4nKislMScmMyUlMSUnMCYnLyYnLigoLiopLCwsKSsqJysqJyssJiwsJiwsJC0sJisuJyssLiorMSwpLyomLisiNzkrUFVBaHJXdINie41neZBmepVof5xsfJ5seJ1peaBrfqVwgKdyfqVufaRve6NvfKRwfaVzfaR1faR3e6B1fJ93eZh2cpBubYZoZXxgV2tQTVtEQkY3PD0vNzgqMjUsMjUsMzYtMzYtNTYuNTYuNTYuNTYuNzcvODgwOzgxOzgxOzgxOzgxOjcwOjcwPDUvOzQuOTQwODMvNzIuNjEtNTEuNTEuNTEuMzIuMzIwMzIwMjEvMTAuMC4vLy4sMSstMyorMSstMSsrMSsrMSsrMCwrMCwpMi4rMi4rMTArMTArMTArMjEsMTIqMTIsMjIwMjIwMjIwMTItMjEtMjEsNDEsNTAqOzQuOzQsPTQtPjUsQDYtQTctQjguQzkvQzswQzswQzswQzswQjkwQDcuPzYtPjUsPTQtPDMsPDMuOzItOzItPDMuPDMuPTQvQDUxRTMvTDAvUywxWCkxVygyUikvSSwuQTItOjYrNjYqOTcoQjQnTDEmVjAnWy4oZDkwaDwzcTw0ej04gjw6hTs6hjs4hDo3gTo2gD03gEA3gUI5g0M6gkI5hUE4hEA1gUIwgUMug0Iug0AthT4shzsriDsriDkqiTcphzgphTkpfzsoez0oeD4odEAodj0pgDgqey4kgDgsgz8ydjQoczUofEA1fUM3fUU4f0Y7gkk+g0o/gkxAhE5Ch1FFhVdIfGFMeWlQfnBWgHZbgHxhg4ZphZNyh515gqJ9gaeAgKqCgK2EgKqEfKR/eZ96epl3epJweY9rd41pdY1pdIxqcopqbYRna39kX3FXWWhRT1tHRk07P0EzOjgrNDAlNCskNScmNScmMiYmMCgmLikmKyomKywnKiwpJywoJywoJysqKSsqKSsqKioqKyksLSkqKiUiMCsnNTAqODYqQEMyUlpDY3BUbH1bdIhjcYpgc5Bidpdodppqc5lmc5tnd59qeaFsdaBqdJ9qdqFseaNxe6V1eqR0e6J1eJ1yeZx0d5Z0cI5sbIVnZHteVWxPTFtEQkQ2PTsvODYqNDcuNDcuNDcuNTgvNjcvNjcvNzgwNzgwOTkxOTkxPDkyPTozPTozPTozPTozPDkyPTgyPjcxPDczOzYyOjUxOTQwODQxNzMwODQxODQxNjUxNjUxNTQyNDMvMjEvNDAtMy0tNS0rMy0tMy4rMy0tMy4rMi4rMi4rMy8sMzArMjEsMjEsMjEsMzItMjMrMjMtMzQvMzQvMzQvNDUvNTQvODUuOTQuOTUsPTYuPTYsPzYtQDgtQzkvRDowRTsxRTsxRjwyRT0yRT0yRDwxQzoxQjkwQDcuPzYtPzYvPjUuPTQvPTQvPTQvPTQvPjUwPzYxPzYxQzUySTQzTzEzUy41Uy8zTy8ySjIwQzYwPDgtOzksPDkqQTgpSDYoUDInVjEoWzMpYjMrazQvdDcyfTc1gTc2gjY2gTc0fjczfTo0fDs1fT41fz82gj83hT44hEA1gEMxfkQwgEEvgUAugz4uhTwthjoshzkshTkrgzorgDsrfj0rej0qeD4qdj8qezwqhDQpiTIpn0xEplhOiUA3ezktgkY7f0o8eUg6eEo7ekw9eU4+fU9AgFJDhVVHgV5KcmtOb3NQe3ZYhXdcjXlgloBonopyoJR6lZZ3jpx5i6N/iKiBhKmAf6V8eqB5fJp2gZBvhI1ugo1tf45tfo9veo9udotscYhraX1hZXVaXGhQU1tETE07RUIxPzcqOjAmOi0nOSsoNSomMislLiskKywmKi0mKC0mKS4oKy0oLSwoLysoMikqMykqNicqNigoMSgjOjMpRD4ySEY3T1I9W2NLZHFTaHlXbYNcaYRZaopbbZFhcJRkbpRhbpZib5pldJ9qcp1ocJxncp5rd6NyeaR2eaN1eJ9zdZpxdphzdJNxboxqaoVmYntdVWxPTFxCQUM1PTkuOjMpNTgvNTgvNTgvNjkwNzgwODkxODkxODkxOjoyOzszPjs0Pjs0Pzw1Pzw1Pzw1Pjs0Pzo0Pzo0PjkzPjkzPTgyPDcxPDczOzYyOjcyOzgzOzgzOjcyOjYzODUwNzMwNjMuNTAtNy8sNy8tNy8sNTAtNTAsNTAsNTAsNDEsNDEsNTItNTIrMzMrNDQsNDQsNDMuNDMvNTQwNjUxNzYxOjcyOzgxPTgyPTkwPzgwPzguQTgvQjovRDowRjwwSDwwRz0xRz0zRz0zRz0zRz0zRTsxRDowQTgvQDcuQDcwQDcwPzYvPzYvPjcxPjcxPzgyPzgyPzgyQDkzQjk0RDk1Rzk2SDk2SDk0RzoyQzkwQzkvQzktRTkrRjkpRzopSjkpUTcoWjAkZC8nbTIsdzYwgjg1hjs4ijw6iD04i0I8hkE6gT42fjsyfzsygTszhzw2iD82g0EzgEEygEEygT8xgT0wgTsvgDwvgDwvfjwuez0uez0ueT4uez0uez0ufD0ugzksjzEpoTs2zGtl2X93qlpRjEM6iExBfk0+dEo6cU47b1A8blI9c1RAeldEgVxJfWVNbXNNbnpShHlblnZfp29gs21ju3Bqu3duu4N2sYx5ppZ9nZ5/lKJ/i6F7hJ55hJp2iJJwiZBvhpFvhJRwgJZye5VydZNvcpFva4poaINiYXhbW2tQVF5FTFA5REMvQDoqPjQrPTIsOjEqNTEoMi8mLi8nLTAnLC8mLzAqMi8qNiwqOSsqPSkrQSYrRCUrQScoQzUsS0Q0VlE+W1lEXmJJZW5RaHhUZ3xVaYJYZYJUZoZXao9cbpNgbZRfbpZhb5plc55pb5tobZlmcJxrdqByeKF1eJ51dJpzc5dxdJZzc5JwbYtpaYRjYXxbVG1NTFxBR0g4RD0zQDcuNjkwNjkwNjkwNjkwODkxODkxOToyOToyOjoyOzszPjs0Pzw1QD02QD02QD02Pzw1QTw2QTw2QDs1Pzo0PjkzPjkzPTg0PTg0PDk0PDkyPDk0PDkyPDczOjcwOjUxOTQuOTEuOTIsOTEuOTIsOTEuNzIsNzIuNzIuNjEtNTItNTIrNTIrNDQsNDQsNDQsNTUtNTQvNTQvNzYxODgwPDkyPToxPzsyQDwxQDkvQDouQjovQzsuRTsvRj0uST0vSj4wSD4ySD40SD40Rz0zRjwyRDowQTgvQDcuQjkyQTgxQDcwPzgwPzgyPzgyQDkzQTo0PTgyPjkzQTo0Qzw0RTw1Rz00Sjs0TDszSzcuTTcsTjYqTzgqTzgoTzgoTzonVDcnZjYocTUqfToxiUA5k0Q/mUlCnUpEnExFn1BJlkxBjEQ4hDwwgzYshTcrjDovjT00iD41hj00hj02gz0zgjw0gDwxfT0zeT4wdz8ydUAwdUAyeT8xfT0zgTsxhzgzjzQvlSgjsD047Hx6/ZaRw2lhlUg+iEo9d0g4bUw5Z1E6ZVU8ZlY9bFhAdFxEfGBKf2dNeHJOg3ZTnXNbtGxex19c0lVZ11Fa1lNb43Bz2Hl1y4V7wI9+tJR9qpV6opJ4npB1m4lxm4tymIxylZBzjpF0iZJzhJJxgZBxe4xsd4Znc3xhbW9XZ2JMXlM/VUYzTzwuTDMsTTEtSDErQi8oPS4nOS8mNi8lNS4kODEpOTApPS4pQC0pRCorRykrSicrRyknUkIzWVE6ZF5GZmVJZ2xMa3VTa3tWaX5Va4VYZ4RUZoZVbI5bb5RgcJdicplkdJxocpxqb5lpbZdpcJpsd510eZ92d5t3cpZycpRzdZR0cpFxbIpoaYRjYXxbVG5LS15CTU4+S0I5Rj00ODsyNzoxNzoxNzoxOToyOjszOzw0PD01PDw0PDw0Pzw1QD02QT43Qj84Qj84Q0A5RUA6RUA6RD85RD85Qz44Qz44Qj03Qj03QDs1QDwzQDs1PzsyQTo0PzsyQTo0QToyQDkzQDcwQDcyPzgwPjcxPjcvPTYwOzYwPDcxOzYwOjcwOTYvODUuNzQtNzQtNjMsNjYuNjYuODUuOTYvOzYwPTkwQDkxQTowQjkwQzswRjwySD4ySz8zTEAyTEAyTEAyTUE1TEA0Sz8zSj4yRz0zRjwyRTsxRDowQjkwQTgvPzguPzguPjcvPTkwPTkwPjoxOzQsTUQ9S0A6SjkyUz84UjcwTi8qXjs1WjMsXjYuXjMqWy8kXDAjZTcqaz0wcT0wiEo9jEc4lUk8nkxBnkc+mD41mj01nUM6pE1DpFFDqFZIqlhKpU9CmEAylzsumz80kjk1jzo3jDY1hTQwhTczgz82fEA2cj4wckI0bkAwbz4wdjovgTgyiTQxkC0wmCcpx0dG52NfwkVDy1hV4Hp1q1dNhUU5hFZGbVI9Z1tBaGNGaGRHaGFEbV9EemRMi2tSkGJKsm5b0W5o2lld4DtL5ixD8CtH8jBL9kBX6klZ5Ftl429y4nx62oF72IN+1omBwX51vIJ2uYR2tod3r4h3q4p3p4t2pIt3l4FsmH9rlXhok29hjGJWg1RKekg/d0A9dDk7Zy8yZDAyXzExTiYkRyYhSjEsSzcwRzQuRDMsRDErRTIsRi4sRCopSi4tTzYvWEk0YFc6ZWBCZWVDaW9Lc31Yc4NcbYJXaoRXa4hYbo5dcZNgdJZjc5hidZpkdptocZZqcpltc5hvcZZtcpRxd5l2epl6eJd4d5R2cY5waodpaYRlZ4JhYHtaU25LTWBETk8/UUs/T0k9NzoxNzoxNzoxNzoxOToyOzw0PD01PT42Pj42Pj42QD02QT43QT43Qj84Qj84Q0A5RUA6RUA6RUA6RD85RD85Qz44Qz44Qz82Qz82Qj41RD01RD01Qzw0QjsxQjszQjsxQjkyQTgvQTgxQTgxQDkxQDkxQDkxQDkxPDcxOzYwOjcwOTYvODUuODUuNzQtNzQtNjYuNjYuOTYvOTYtOzcuPTkuQTowQjwwQzswQzsuRjwwSD8wSz8xTEAwTEAwTEAwTEAyTEA0Sz8zSj4ySTwzRjwyRTsxRDowQjkwQjkwQDkvPzguPTkwPjoxPjoxQToyQzoxSTgxSi4qVS0raTY1dDg4ezs7hERCgUQ/g0hAhEo/hEg9jUpBmE9Gn1BLn09GkUM2kUIzmEIznUQ2nz8zmTcsnDcrnjwvoEM0m0AumUAun0Qyo0Y1p0Y2rkg5tU1CskxKrUlLpEBCmDg5kTk3jD04gj82dj4xbj0ueUg5hEw/hEA3gi0qkSotsjpD0kxV2kxL3k9LyD47wEA9z2BZs1lQhEAzglVCeGBIY1w/XV4/aGlJcm1PdWdKfWVLk2NNumRX1V9b5FVZ6EBN8ixD/CZC/yVH/yZI/y1L+DJL8D1S7klZ6FBc41Fb4lJc31dh22Jp1WZs02lt0W1vzXFyynRzyHd0xnh0x3x5yHp4xnZ3xnF0xWpvxWZsxGBqw19pxF9ts1NfpUtVmUhPjUVJhEZJazg3Rh0ZVDEtSzApSDEpSTctSjkxSzoyTT82U0Y2W081Y1o5ZmI/Z2dDbnJNeIJdeolicodeb4lcbolcb4xecY5ec5NidZVjdZVjdZVmcpJpdpZxeph2eZZ3fph7g52ChJ6Fg5uDgZmBeZF5cYlva4RnZ4JjX3pZU25LTmFDUFNAVFFCUk5CNjkwNjkwNzoxODsyOjszPD01Pj83P0A4QEA4QEA4Qj84Qj84Q0A5Q0A5Q0A5Q0A5RUI7REE6REE6REE6RUE4REA3REA3REA3SEE5SEE3SD82Rz41Rj00RT0yRDsyRDwxQzoxQzswQzoxQzoxQzoxQzoxQjsxQjsxPDgvPDgvPDgvOzcuOTYvODUuODUuNzQtOTYtOTYtOTYtOjcuPDgvPTkuQTowQjwwQzswRDwvRz4vSj4uTD8vTUAvTUAvTUAwTT8yTT8yTD4zSj4yST0xRzsvRTsxRDowQzswQzswQTowPzswPzswPzswPzwzQjsxVUQ8UjMuaTMzjUBGrEtUwlRfy15kxV5hmkI+lkg+lEw+mk5BqlFJvVRQyk9SxExLo0E0m0IwnkEwoz8wpTstojYpojgqpD0uq0Y0oD0qmDcknDkkpD0qq0AuskMytkQ5pTExrjk/uURKvEtPuE5QrUtKlkE8gDcueTktdTcqdzMohDErnDQ1uDxE00dU5U1Z4UdHzzYxzjo2vTMwx01IxmRblEo9i1tHfWNKaWBBZWRFc3BPfnFRgGlKjGhOsGhZ4mJh81Ja80NQ9TZI/TJI/zFL/y9M/ytI/zFM+y9I9TFJ9DRL8jVL7zJI8jJL8zdP8kBY70Nb7UVc7Ele605j6VJl51Rn51Vo41Ro4lNn4lBn4k5o505q61Ft8lNz81Z1/WeE8WF841tz1FZry1tryWRypVJaci0wXCYmVzArVjsyTz8yQTstODkpPUEwS084Vk8yYFg0ZV89ZmZCcHRRfIZjfoxpdodjd41nc4xlcotkcYxjdI1ldo9ld5Bmd5BofZVzg5p9iJ+DiqGHkKONlqmVl6qXlaaWkKGPhpmGeYx4boVrZn9iXndXU25LT2RFU1hCV1ZEWFZHNTgvNTgvNjkwNzoxOjszPD01Pj83QEE5QUE5QUE5Q0A5Q0A5REE6REE6REE6REE6RUI7RUI7RUI7RUI7RkI5RkI5RkI5RkI3SkM5SUI4SUA3SEA1Rz80RT0yRDwxRDwvQzswQzswQzswQzswRDwxRDsyQzwyQzwyPzgwPTkwPDgvPDgvOjcwOTYvODUuODUuOTYtOTYtOTYtOjgsPDgtPjouQTsvQjwuRDwvRj0uST0tSz8vTUAvTUAvTUAvTUAvTUAwTD4xSz0ySjwxSDwwRzsvRDowRDowRDwxQjwwQDwxQDwxQDwxQD4yQD00RjwzUTkvWislhzs9vVVe2VVj5lVm4lRgyklOnzMwljovkD8ul0EwrUY9xEpF1EFHyz9AsUI3pUY0qEIzq0Ezrj4wrz8xsUEzs0U2sUg1qEEuoz0npDsmqDsnqjknqzYlrTMotjk3ujk9vDc8uzY7vj1BxElLxFRSvlhTmT82ijMphiwjnTYxwkdJ3E9X4EJQ2TM93Tk4zS4o0TgyxzgyxUQ+x1xSpldIj1hEdlY9dmVHe3BQf3BRgmdKjmRLqW9b0nRo7FNW+0NP9jxJ+DlI/j1O/0BR/jtM9zRF/z9T/jlN+jVJ/DJI/DBJ/i5I/y9L/zVS/zJR/TRU+zZU+jdX+DlY9zxb9T5d9D9e9kNj9UFk8z9k8z9m+D9o+0Js/0Vw/0hx/091/1Fy/lV28lNx5lNt42J21mZ0tVhifDE1ZzAtVzIqTjgrRT4sPUArOEQuPkYuUEsuXVQ1Zl9CbmpNeXxfh41xhJF1fIpweYxweo5ye49zeY5veItte4xsgZJyh5Z5laOKm6mSoq+dpbKhqrWnrritrrivqrSrn6uflKCSgZKAcYRwZXxiXHVXUm1MUGVGUFpCVVhDV1pFNDcuNTgvNTgvNzoxOToyPD01Pj83P0A4QUE5QUE5Q0A5REE6REE6REE6REE6RUI7RkM8RkM8RkM6RkM6R0M6R0M6SUI4SUI4S0I5S0M4SkI3SEAzSD4yRz0xRjwwRTwtRDouRDouRDouRDouQzsuRDwxRDwxQz0xQDkvQDkvPTkwPDgvPDgvOzcuOjUvOjUvOTYtOTcrOzcsOzcsPjctQDouQzswRDwvRjwwRz4vSj4uS0AuTUAvTUAvTUAtTUAvTj4vTj4xSz0wSjwvSDwwRzsvRDouQzktQzswQjwwQDwwQDwwPz0xQD4yQT8zSTwzXDUudTQwrExQ2l5o5U1c40BR1jZCtiUoqDEpmzcnkjomljsmqkAywUU71D4/yzs6sD4zp0MzqkAyrD4xsT80uEM5u0c6uUk7qj8tqD8spj0qpTooqTgmsDsqtzwtujwwykc/zkRBzz09zzY41Dg73UFE4ExM3VJPw0Q9xktDzFNK01RN2UtJ2z9C4DU94DE22jMt2TguzzIpzjkyvjcxs0E3tFxOlVRCeE42gGJGhWpNhGFFj1tDrWZSynFj5G1n6EVK7zpD6DlA5j1C5kNI5kVK50ZL6kdM8ktT8UFM8jlH9jVG+DFG/S9G/zJK/zhS/zlV/jlV/jlV/TpY/Txb/T5f/T9h/UFk/0Np/kRr/ENs/ENt/ENt/ENv/ENv/UJt/0dw/0Fm/0dt/01w8Upo6E5o5Vxw2GJyu1pjiz9BXickTyohVEEyVE87SUw3P0MsUUszY1hCc2tWf3pmi414l5yIk5yLhpOCgY9+iJaFjZuKi5iHhpGBiZKBlp2NoqmXsbWmuLytvcC1v8K5wsO9xMXAwcPAvL67r7Suoaigi5eLeIZ1aHtlXHNXU2xMUGhITltBVVpDV1xFNDcuNDcuNDcuNTgvODkxOjszOzw0PD01Pz83QEA4Qj84Q0A5REE6RUI7RkM8RkM8RkM8R0Q9R0Q7R0Q7SEQ7SUU8S0Q6S0Q6S0M4S0M4SkI1SUE0ST8zSD8wRz4vRz4vRj0uRj0uRjwwRTsvRDwvQzsuQzswQzswQTowQDkvPjoxPTkwPDgvPDgvOzYwOzcuOjcuOjgsOzcsPDgtPzktQTsvQzsuRD0tRz4vSD8uS0AuTEEvTUAvTUAvTUAtTUAvTj4vTj4xSz0wSjwvSDovRjouQzktQjotQzswQTsvPzsvPzsvPz0xQD4yQEA0TDsxazkylUZCw1ld2ldf3UNP3DhD0jM4vCsorDAkoDcilTkglTkgojwmtD8uwzowvjgvpzcroTstpDgspzcrrzoxtkE3ukU7t0Y4rD4vqj8vpjsrozUkqTUmtT0vw0U5ykg7vDgrzkA230Q/60FB8T1A8Tg96jM33C4v2zc14UZB51JL5U5H3D052DAv4i8y6jY12DAn3TsuyiwhzzgvvTMprzYtx2dbtm1cjVZBh1tCglY9iVM7qVxKzWte3mdh41VU70ZL7j1D4jw+2D4+0kE+0UZB3U9L6lZW7U5S7URL8DpH9TRF9zJE+C9C+zJF/jdM/jhR/ThU+zlU/DpV/zpb/z1g/0Bk/0No/jtl/Txo/T5q/D5s+j9s9z1s8zxs9Tpn/0dx/jpg/j5j/0xu/kxs9U5q71Vv4llt53F/wWBplUlLcTo1WzUqTzgqT0IxVU06XFBAcWVVhXxtk42BnJyQpKeen6aek52Vk56YnKehpK+ppK2ooaaipaeitLWwwsG8y8i/0M3E1NHK09DL1M7O1M7Q0MvPyMbJvb29r7Gul56Wf4t9bH1qXnVZVm9RVGxMUmFEVV9EVmBFNDcuNDcuNDcuNDcuNjcvNzgwOToyOjszPT01Pj42QT43Qj84REE6RUI7RkM8R0Q9R0Q9R0Q9R0Q7SEU8SUU8SkY9TEU7TEU7TEQ5TEQ3TUM3TEI2TkI0TUEzTUEzTEAwSkEwSUAvSUAxRz4vRT0wRDwvQzsuQzswQTowQTowQDkxQDkxPTkwPDgvPDcxOzcuOjcuOjgsOzcrPDgsPzktQTsvQzsuRD0tSD8wSD8uS0AuTEEvTUAtTUAtT0AtTj4uTj4vTT0wTDwvSTsuSDotRjosQzktQjotQTkuQDouPjouPzsvPz0xQD4yPz8zTjoxcDEspktKv1JVuj1BvC81wS8yvzAsuDInqTEgozkhnD0hljscmTsfnz0ipTsjozYinTYnnzcsojYspDQpqzgxtkE4t0I5sUE1sEI1rUE0pzsupTcorjotu0I3w0Q7w0E0wj0qzD4q2TUp4Ckj7CIi+SQo/yov/y4x7Ckn5i0o4DIp3zQq4DQq4zIq5zAq5jEq2jMj1TUl0DImzjYrxDcuuz81xmBU0H5wpmVTj1ZCiE46oVhHx2Va3mNe5VNU50RJ9EdL60FC3T880UA7yD83xD820UY/4kxL7klN8z9I+DhH/DZH+zVG+DNE9jZF+jtL+jlO+TdR+zZS+zZS/jdY/zld/zth/z1l/z5q/z9t/0Fv/0Jx/0J1/kJ0/EJ0+UJw/0Vs+kFh/UZl/0pp/Uxp/1Zx/1558l1z8Wp75W990m52rV1eg0Q/ZjUuZ0E2cVVJd2Vbin11oJWPq6Ser66qtLa1sbW2p6+xsLi7tbzCvcLIv8LHw8LIyMbL087U3NbY4dnW5t3Y593c5dvc5Nfe49jg3tTc1s/WycTKubm5oaagiJKHdINwZXlgXHNXWXFRWWlMW2hKW2hKNDcwMzYvMzYvMzYvNTYwNjcvNzgwODkxOzszPDw0Pj42Pz83Q0A5Q0M5R0Q9RUU9R0Q9R0Q7SEU8SEY6SUc7SkY6S0c7TUc5TEY4TEY4TUU6TUQ7TUQ7TEM8TEM8TEM6TUQ1TEMyS0IzSUAxRz8yRT0wRDwvRDwxQjsxQTowQToyQDkxPTkwPDcxPDcxPDcxOzcuOzcsOzcsPDgtPTkuPzswQjsxQz0xRkAySEAzSkEySkEwTEEvTUAtT0AtTj8sTD8vSj4wTDwvSzowSjkvSTgwRTgvQTgvPjovPTsvOzsvOjwuPD0vPT4wQT8wUzkshTw1wlxYx1pXrTczqi0psDEqrS8jrDMiqjokq0EnqkcqpEUnoUIkokAjoT4hnjghnzkqozswpDotpjcsrDwxtUU6tUU5r0E0qDwvqDwvqTssrDwuukQ4xkxBw0Q7uzcrvTYizDsm3Dor5jQq8Sso+Cgo/CYo+SQm+Coq9S4p7jIp6jQp5jQo5DIm4zEl4DMl4Dso0DEe2z4tzjYpxjgswEA1sUE1z21gvmhZpVJCpk5AymRY5Whi5lJS6UBF80JK6j1B3zs61Dw5y0A5wD0ztjgsuTYswzgx4khI6D9E7zpD9jtG+TtH9zlF9jtG+j5M/kJT/z9U/DxT/DpU/zhV/zlY/zpe/zpi/z5o/z5s/z5s/z9u/T5x+kBy+EBy90Fx9kJp/kxs/1Rz9Epn6kFe+1Rw/2iD/2V/9lx27l515md423F9xXB1p2dljF1Xe1pRln93p5iRvLGrw7u4w8HCxsfLxMfOwMPMysrWzMrY0cvZ1c/d3dXi49vm6OHp7OPo7uTj8efl8ujn7uTl7eDn7N/m6N3l4tjg0MnQwL7Bqauoj5aOeYV3a3pnYnZdYHJYYnBWYm9TYG1RMDEsMTItMzQvNTYxNjcyNzgyODkzODkzOToyOjszPD4zPkA1QUE3QkQ3REQ6REY7SEg+R0c9R0g6R0g4SEk3S0o2TEs2Tkw3Tks4Skc4R0U5SUZBTUlKTklPR0RNRD9DTkU8TEM0SkEyS0IzTEQ3S0M2Rj4zQjovRD0zQjszQDkzPzgyPjkzPTg0OzYyOjUxQjk0Qjk0QDkzPjkzPTo1Pjo3PTw4PTw3QEA4Qj82REA1SEAzSkEwTD8sTj8qTEAqR0AtRT8vSTswSjcwSzYxSzYzSjg4RDo4QD86NDowMTwuOUQzOUIvNTgjPz0oYkMvvGpctko+pTcqpDYppjgpozUkpDYlqD0poTgipDslqD8prD8orD4nrDkkqzYiqjckojcnnzgpoDkqozwtqT8vrEIyrEIyqkAwqD0rqz0srTwqsz4tvUM0xEY4wD4xtzElxjgqyzcp0Dgq1Tks2zct4TYu6DMs7TAs8S4s8y0q8i8r7zIs6jUq4zcp3Dko2jso2zom0zQfzzIfzTcmxjcnuzYnwEI0zlRHx05DzlNL31tW7V5a7lBR6z5C8Tg+9j9E6UBD3kNB00I/xj85ujsysTsvrzsssTstyUs/1EtD20ZC4D0+6TxA9z9H/D5I+DpE/UNO+0NP/ENR/0RV/UBW+ztU/zxa/0Ni/0Zr/0Fo+Txm9Dlk9D1r+EJy/Eh4/0t6/055/k509lFz71Bu5Uxo501n+1h1/2aF/1+D8kdp9ld35mB5wl1rvHp+h2Fej3lup5GEu6ec0MO629bQ29vZ29zg3dzk4tzq5djs6tft8dnv9N3x9+Lx9ejy9Ory8+3v+fTx+PPv9vHu9O7u8ejp7OPm6N/k493h1dDUy8nKurq4o6WgipGJeIN1cX1vb3xqfYZzd4BrdH1oLy8tMDAuMTEvMzMxNTYxNjcyNzgyNzgyOToyOjszOz0yPT80P0E0QUM2QkQ3Q0U4Rkg9R0c7R0g6SEk3SEo1TEs2TEw0TU01S0o2S0k8S0tDUFBQV1VgWFdnVVNpUk9gTkhKTEM8Rz43Rj02Rj83R0A4RT42QjszQzw2Pzo0PzgyPDcxPTgyPjk1PDczOzYwPDMuPTQvPTYwPDczPDk0PDs3PTw4Pj05QD86Qj84REA1SEAzTEAwTD8sTz4qTEAqQT8qQD8rRDwvSDoxSjczRzUzRDQ1PjY0Pj05Nzw1OT8zP0EzQzwsSTkpXEIzf0w7rVFCqjsqnzEgnzYjoTonnTgknTkioz8onzskpj0orUArsj8stDwrtDkptjcmszgoqDkoozkpozkpozwrqD8sqkEuqkEuqj8rrD8rqjknsTwqv0Y1xUc4wT8xuzcqvzUoyzcrzjYpzTkrzzst0jwu1zsu3jcu5jMs7TAs8S4q9C4r8DEp6DMo3zgo1Tom0zsk3Dwm2DYh1Dck0zwpyzopwDQlwjoszEY60EU+2ElD509M8VFR8khJ7zxA9Do/90JH5UJD2kVB0EI+wz43tzsxrjotqTsqqjwrtUQ0xUs+1E5D2kdA4kA+7j5B+j9G/UBH+ENK9kNJ+kVO/EZS/ENT+T5T+z1W/0Je/0Zo/0Np+kBn9kBp+ENu+0d0/Et5/0t6/0t6/kl080tv8VJy9Ft39156+ld2+01u+0Vr+UVq7UVo2Upmxl9wsG5yaktGj39ysJaJzLKl49PG7OPa6ejk6Onr6ebv6uLx9eL4++H6/+P7/+f9/+39//L8//f8/fn4/fn2/Pn0+/f0+PTx9vDw8uzs7+nr7efp5N7g2tbVyMfFsrOunaCZjpSKiJCFiJCDjZaFiZB+ho19LS0rLi4sLzArMTItMjMuNDUwNTYwNjcxODkxOToyOjwxPD4zPkAzQEI1QkQ3QkQ3R0c7SUc7Skg7Skk3S0o2TUs2Tkw3Tks4S0k6TktCVFNRX15kaWh4bGyEa2yKaWmDXlppWVFcT0hQSEFJRT5FRT9DQz0/QDo6QTs7Pjo3PDczOzYwPTgyPjoxPjoxPTkuODQrOTUsOzcuPDkwPToxPjsyPjsyPjwwQz80RT8zRz8ySz8vTUAwTj4uTz4sTD8sOjwkOT4nPTwqQTstQTgvPzYvPDQxOTQwPDk0QDs1Rzo0TDMuVysoay8uhjw9oEdDozswoDIhnTIgojkmojwmnTkinDghoT0mpDslqD4or0AstUAuuT4suzwrvjoruzwtsT4sqzwrqTopqDopqjsqrD0srD0qrD0qsT4srTgmuD8uyUs8ykg4uzYnujIkyDouzjYp0jYp0jkr0zos1jot2zks4jYs6DMs8DAt9C4r8i8r7TEo5TMn2zYj0zgi0Dgh2zkk2jUh2jkn2j8t0jwtyDYpxTksy0E2xjs0zD842ERA5EpI6UpH6UND7EBA60NC3EM+1EQ8zEE6wj00tTktrTcpqTopqjsqqzcowEQ41E5F20pF4EBA6D5B9kFI/0dP9EFH8kFH90NM/UdT/kVV+UBS+j5W/kFd/0Vl/0Rn/kRr/EZv/kl0/0t4/k17/0p6/0Z3/0d2/0pz+k9z/1p6/2GA/VZ070Vi+Upr/VRz2kBaykld2HuFt3t7X0I6j3xur4+C1bOn89vP+uzj9/Lu+Pb59/T98+v6+er9/+r//+v//+7///T///j///z+//38//36//34//v3/vn2/fT1+/Lz+vH0+fDz7+bn5N7e08/Ovr25rK+ooKacnaOZnKSXo6ucnaaVmqKTLS0rLS4pLi8qLzArMDEsMjMtMzQuNDUvNzgwODkxOTswOz0yPT8yP0E0QEI1QkI2SEY6SkY6S0g5TEk4TUo3Tkw3T004T0w7S0k9UVBLXVxhbWx6eXmRgIGgf4GnfX+leXWWcWqJZF56WVRrUUxiS0dYREBOQD1IQT5FPTs+OTg2OTUyOjcwPDgvPDgtOzktODguOTkxOjowPjsyPjwwPjwvPjssPjsqRT8vRj8tSD8uS0AuTUAwTj4uTj4uS0AuPz0oPD4pPj0rPjwvPTsvPDkwOjoyOTo0OjoyQzozSjUwVCwqZykqgzE1nTlBqj1ApDgsojclpTooqD8spz4pnzkjnjgipDsmpDokqzwosj8suD8uvT4twDwtxDwuwj4xu0Axsz0vrzkrrjgqrjgqrzoprzopsTkptDsquTsswUIzykY5xj4wvDIlwDImzTkt0zUq2DQq2DYr2jgr3Dgs3zcs5jMs6jIq8TAr9C8p8S4o7DAn4zEj2TQh0DUfzTUe1TMe1zAe2DUk2zsr1j0v0DoszT0y0kQ6wzYtwzYvyjs12ERA4k1H5EtG3kM+1Tw20EA3y0E2xT80vjwvtDkqsDgqrjorsDwtqzMlvT8zzkg/2EdC3EE/5EBB80ZM/E1S7j9E7z5E9ENL/EhT/khV+kNV+kBX/EFc/kNi/URm/kZs/0py/014/057/0x5/0l3/0V0/098/1J9/Upx90xu/1Z1/1Zz901o8EZh7kxk0D5T4WRy/p+l0ZCOZDkya0k9pHpu0KWc9dTL/+nj/vPv//z+//v/+PL++u///e///+////L///X///j+//r6//v4//75//34//v3/vn1//b3/vX2/vP3/vT19uzt6+Ph2tXSyMXAubqysrWqsbSpsLaqtr6xr7eqq7OmMTAsMC8qMC8qMC8qMC8qMjEsMzItNDQsNzcvODgwOTkvOzsxPT0zPz81QEA0QUE1SEQ4S0U5TUc5T0k5UEs4UUw4UUw5T0w9TktCVlRVZWVvd3iNhIeojI+4jpLCjpHEjIy+hoK0enemb2yXZmSLXFt7U1BtTEpgSUZXREJNPTxBOTc4NzYyODUuODYqNTUrNTYuNTgxODkxOjouPTsuPzwrQTwoQjwmRz8qRz8qSj8rS0AuTEAwSz8xSz8xSz8zTEA0SD40RTsyQDkxPDkyODkxNTw0NTw0Nz0zPDouRjMsVzIsdTg3kkBCpT1Epjg5pzsvqD0rqj8rq0ItqD8qpDsmpDslqD4opzgkrTontTwpuj0rvzsswzstyDwvyD4zxEA0vT0wuTkstzcqtzcquDgruDgrtzgpuTcpxkA0y0M1xTksvzElxTIoyjgrzzUp2jMq3zMp3zQq4DYp4zUq5jQq6jIq7zAo8i8p9C8p8S4o6zEl4jIj2TQh0DUfzDQd1DEe1i8d1TIh2DYn1jkq1Dou0z811UU81EU9zUA3yDsyy0E31UtB2U9F0EY8xDovxDwwwj0uvjwuujsstDkpszkqtT0tuD4vtTktvDwxyD850UI+2EJB4ERF7ElO9U9T6kBD7T5D8kNK+klT/UtX+0ZX+UJW+kJa+UFd+kNi/UVp/0tx/053/096/013/kl0/0p3/1N+/1R9/Elw+Ult/1N0/1Zx909o6UVd40dc51lp/5ah/7W68p6cjUhDaS4mpmtjzJeP8cnB/+Ld//Lu//z7//3/+fb9/ff///f///f///j///r///v+//z8//36//z4//v1//r3//n2//f4//b3//T2/vT1/PLz8enn5Nza1dDMzcrDyMi+ycu+yc2/yNDFvce+t8G4NTQvNDMuMjEsMTArMTArMTEpMzMrNDQsNjYuNjYuODguOjowPDwyPj40Pz8zQkA0SUM3TEQ3T0g4UUo4VEw5U0w6U0w8UUs/UEtHWVdca2p6fX6ci463k5nLl53XmJ7cl5jYkpLSjIrJhYS9fn6ydXakbGuTZWWHW1t3VVNoS0pYQ0JKPT0/Ojk3ODczNzYyNDY1MjY1NTYxNzcvOzksPzwrQz4qRT8nRz8oRz8oSEArSEEvSEIyR0E1R0A2R0A4SD07SDo6Qzk4PTg1NjY0MTczLjkxLjowNT0yNzUpQTEkWjgufkM9lEZCnT48nTQwpjwuqD0rqD8qqUArqD8qqT4qrD8qr0AsqjcksTgnuDspvjorwzksxzktzDkvzDwxyT80xTwywjkvwDctwTguwTktwDgswDYrxDct0UM30EA1wzAmwywjzzgt1Dwx0TMo3zMp5DIo5TMp6DMq6TIq7DEq7zAo8S4o9S4p9C8p8C8m6zEl4DMj1zQh0DUfzTUe1zYi1zQh1TQi1DQk0zYn1Dgs1Dwx0z8161hQ4VJK00k/y0I4ykY6zEo9xUU4vT4vvDoqujsoujsotzootjkntjsruj8vv0EzwUE2wTwzxTw2zkA81kRE3EhI40pM60xQ6EJG6kBD8ENJ+EpT/U1Y+0tY+UZZ+kdd9UFc90Ng+kVm/kpt/051/094/052/Et1/1F7/1J5/lB1/E5x/1Z3/117/lRu7UVc91Rp7lFi92Vy/5Kc/4uT8oSHx2BjpkxLtGtlzJCI7r22/97Y//Ds//n4//v9/Pr//Pv//fr///v///v///v9//v7//v4//z3//z2//z2//z5//v4//n4//b3/vL0/fHx+Ozs8Obk5tza3tfR2tbN3NrO3d7Q3eHT2+LaztjQxM3IOjoyODgwNTUtMzMrMjIqMjIqMzMrMzMpNTUrNjYsNzctOTkvOzsxPT0zPj40QT8zSUM3TUM3UEc4U0o5Vks5VUw7VEs8U0pBUUtLW1hhbG2Cf4KlkJTEmZ/ZnqbnoKjwoKTunKDpmJvilJfak5TUjpDJh4m8gYSveHqgcHGQY2N9WFZrTk1bSUdSRURMQkFJPj5IOj1EOzo/Ojk3PDkyPjouQz4rRD8pRUAqRUAqREEuREMxQ0M3QUI6QEM8QEJBPzxFQT5JQ0FMQkVMQkdNP0lLPUlHPUhCQ0k/QDwwSzkrZkY3gk5AjEo8jj8ykzcooz4sqD0pqT4qqT4qqkAqrkEsrj8rsD0qsDcktjknvTkqwjgrxjgqyjgr0Dku0jsyzjszyjoxyTkwyTkwzDkxzDkxyzgwyTYs0T0z1D0y0TkuyzEnzjQq2Dww2Tsw1zMp4zIo5zEm6TEn7DEo7zAo8S4o8y4o8ywn9y4n9C8n8DEn6TMm4DUk2DUi0jchzjgg1Dkl1Dck0TYk0DUj0TUm0zcr0Tctzzgv405H51dO5llQ2lFHzEc+w0M4vUE1uD8utjwntjwltjwltzomtzomuTopvT4vw0E0yEM6xT82yUA60UZB1ElG1UdG1khH3kpK5UVH50FD7ENI9UxT+1BZ+k5a+ktc+kpe9kRc9kNg+EVl+0lr/05y/1B3/1B3/VF39lZ48VZ29FV1+1h3/1x4/1t1+lJp8Upe/Vdr9VRk6U1b9V1q30tZ5lRh5VRh1llhwGZlx4R+5aun/9PO/+zo//Px//j2//3++vv9+Pz/+/z/+vv9+/v7+/r4+/f0+/jz//v1//z2//z5//z5//j3//Pz/O7u+evr7+Hh6N3b4tnU4drS5d7U6+fb7+3e7/Hj6/Lr2uXfzdjUPT01OzsxODgwNDQqMjIqMjIoMzMpMzMpNDQqNTUrNjYsODguOjowPDwyPj40QT8zSkI3TUQ1UkY4VUk5V0w6V0s7Vko8U0pBUUtNW1dlbW2HgYOqkJbKm6Pioqz0pq/8qbD+pKv5oKbynaTsnqPnnKDflpvVlJfMkJLCh4myeXmfammJXl56V1RvUlBmT01jTUthSUdcREFSQD1GPDo7PTozPzsvQD0sQkEtQEItQUIyQEQ1P0U7PUQ9O0RBOkNIPURUQkheTFNmVVxuXGJwX2NuYWJnZGBhZlhVYUpCaUc9g1NFlFdFkks3kD8qmD0op0Iuq0Asq0AsrUAssEEtskIusD0qrzcmtTgmuzcowjgrxjgsyzcrzzcs0zkv1Tsx0Tgwzzgx0Dcx0Tgy0zo00zoy0jgw0DYs3EI41DcuzzIp1Tcs2z0y3Twy2jkv3DUs5DIo6zAn7TEo8C8o8y4o9C0o9iwo9Ssn9y4n9C8n7jIn6DQm4DYl2Dcj0zgkzzgjzTgizTgizjckzTYj0Dcn0jkr0TcrzTUqyzQr4k1G82Rc62FX1E5Fw0A2uTsvtDkqtj0otz0ltz0muDsluDkmuzonwDwtxD4yyUM4yEI5zEU/00xG00xIzUZDzEVC1UdF4khI5kNE6EVI8UxQ+FNa+FFb909c+U5g9Ehe9EZf9UZj+Upp/k9w/1F1/1N3/1V57lVz7Vp29156/F15+VVw801l+FBn/1ps/1tt/2Nz701c91Vk805e/FVn9Ete5FJfwF5fu3Zx15yW+crE/+Xg/+3q/vTy///9+//++v//+P//+v/++/36+/v5/fn2/Pn0/fjy//r0//r3//r3//b1++/v9+np8+Xk6tzb59nW49jS5t3U7+fc+PLk/frp/f/x8/rz4Ovn0t3ZQD00QD4yPjsyPDouOjcuODUsNzQrNjMqNTIpNTIpNTIpNzQrOTYtPToxQD00Qz80SEA1TEM0UkY4VEg4Vkk4Vko6WU0/WU9GUklMVVFfZWWBen2mjJPKlp/inan1o7D/qLT/qrP+q7P8qrL6qrH3p6/wp6zspqrnn6HamJnPjI6/f4Cwc3KeaGWQXVqFVlR8WFF6WFJ2Vk9uTUhfQz9NPTtAPTw4QEA4PT8yP0M1QkY4P0U7O0I7OkNAPkZIPktURFZsUWaBYHGLaHSMc3WMf3iKgW9/f19qiVpikldZnFdSpVVMpEw+n0AunDkinzkipzwoqj0prD8qr0AssUEttD8ttj0quDspujYnvjYoxDYoyTcqzzcs1Tgv1zku2jkx1jcx1zoz2Dkz1zgy1jcx1Tcu2jkx3Dsz5UQ83j0z2Dct4UA2/FtR/21i/11S5z805DIo7DEo8TIq8i8p9Com8ygk9ikm9ywo9S4p8i8p7DEo4zEl2DEh0jEf0jUk0TonyzolyjwmzDsmzjsn0Dop0Tkr0Tcr0Tct2UE2zjcu3EdA9GRc5FdQykE5xUA5tTUotzomtjwkuT0lujwmvDsovjspwTwtxT0xxj0zykQ71k9J3VhR009KwD85wD86z0hE3khH4UZE5kpL7lBR8FFW7k1V7UtW8Uxa+FFj9k9j9Utl9Epl+k1r/1Fy/1N0/FN08ld27lh181l1+1t1/1x1/1lw/1ds/VZo/2Jz/Vdl/11r/1tq8UZW8URX/1Fl7lZjxmZnqmljyZCJ5baw9tPP/+rm+u/r+vbz+Pz7+f//+P//9//9+f76/v78//v4+/by/frz//r0//j1/vbz//f1//b09ujn5tjX49XU3tDN4NbN7+fc/PXl/fjl//zp///x+v/45/Dt2OHeQkA0QT8zPz0xPjwwPDouOjgsODUsNzQrNTIpNTIpNTIpNzQrOTYtPDkwPzwzQj41Rz80S0E1T0Y3U0c3VUg3Vkk4WEw+V01EVEtMV1FdZWJ9d3qjiZDHkpzhmqf1oa79qbX/qrb+rbf/rrj/rrf8rbb7rbT4rrP1pqrqoaLilpjVi4vHf364c3KsZ2afY16WX1aLYFaIXVR/VU9xTUliRUJTQkFJQEJBPD04QUI8RUZAQ0Q+Pz89Q0FCTkxRV1djYmeEcHSXf36ghn2ckXybnnyXpHCHo190q1hotlZhulJTtklEsEA0rDspqzsjrD4lpjcjpzglqTklrDkmrjknsTgntDcltzUluzMlwTUoyTcq0Tov2Twz2z003zwz3jsy4D023jw33Ts24D025EE650Q950I85UE45EA35UE44j822zku0zEm1zUq6Uk9/1tP8UA27TUr6isj7Ckj+C0p/TAt/Cwq9ikm9zAt8zMu7TYu5DYr3DQn1DIj0zMlzzYkyDokyDwlyTslyzolzjgnzjcmzjUnzjQo0zkvzzUr1D025VBK5VRP20xGzEE8tjAlvDsoujwluz0mvDsmvToovjkowTkrwjosxj4yyUM4005F21hQ0lJJwEQ8vkI6y0dC20xG3klF5ExL61NS7FNV6VBT6U5U605X9lVk91Rl+VNp+lJr/FJt/1Nx/1Nx/lNz8k1t91Rz/1t5/197/1t0/VVs+lNn+lNl+1Zm91Jg/Vto/Vto8U9c9lRj/Vho31NetmFell1UtYB61qmj7MnF+uHd+Onm+/bz+fv4+P/++P//9v/9+f76/v78//z7/fj1/Pn0/frz/fj0/vbz//j1//b09ero6dvY5NbT29DK3tTK7ubZ/PXj//rm//3o///v+f735/Dr2eLfRUE1REA0Qz8zQT0xPzsvPTktOzcsOzcsNzMoNzMoNzMqODQrOjYtPDgvPzo0QDwzRT40SUE2TkU2UkY2U0Y1VUg3V0o6WEtCVkxLVlBaYV93c3WchInAj5jblqTvnqv5qLT8q7X8rrj/sLr/srv/srv/s7r/tLj/rrL5qazxoKPomJjejY3TgoHHd3a8cm2waWChZ12ZY1qRXVeFVFJ3TExmQ0RWPz9JNzY7QT0+SkJATEBATj4/WkZIb1ZcgGRzlnKWo3qmrX6osXqht3WbvXCSwWKAwFRuwUdczktZ0ElQxD06uTYstjkntT0lsDwjrjsmrjsosDspszsqtTwpuj0rvjwswTwtwzcoyDkr0jsw2T813kA14T414Dwz3jox2zgx2DUu1zQt3jkz5kE76kY96UI64zw04jsz2TUr1zUq2Tcq0jIkyysd0zYn6Uc69Us+8kA07DQs7i0o9iwq+iws+ysr9iop7yko6y4q6DMs4TUr2zUp1jIm1DIn0DQlyzgmyDomyzonzjsp0Dop0Top0jkr1Dgr0DQo1jwy0zo00zs25E9L7FhW10VFwDMswDssvzwovjsnvzonvzopwDgowDgqvzcpxD4yxkA1z0s/1VVK0VNHw0c9v0M5xkY71ktE2ElB3UxH41JP5VNT4U9Q4k1R405U8lhk9lpo+ltt/Vpv/FZu+VFr+lBr/1Bv/Ehr/1F0/1t7/1t4/1dx/FRr/FZq/lts+llo91ln+mBs82Bq615m7mdu6mdtyV1doF1Ve09EmG1kv5iR27q179PQ8uDe/fXz+fn3+f/79//+9v/9+v79//////z+/vj4+vn0+vry+/jx/fjy//n2//f1+O/q7uPf5drU29HI3NLG7OXV/fbj//zm//7n///s9/3z6fDp3ePfSEQ4R0M3RkI2REA0Qj4yQDwwPzswPjovOjYrOTUqODQrOTUsOjYtPDgvPjkzPzo0Qj41R0E1S0M2TkU0UUY0U0YzVUg3Vko+V01LVk9XXltwbXCTf4W5i5XTlKDom6n0prD4qLL3rLT8rrf8sLj/sLj/sbj/sbj/rrL7qq73pKbwnZ/plJbhjIvXgYDMfHrFdG2zbWapZV+bXluQVleDUFByRkZgQT5RPDZCRjlAUzxCXz9EbENHf05SlV5kqWZ3vWuPyG2Yy2+YyGiNyGCDyFZ3xkpmxDxUxjNG2EBP3kRM0Ts8xTgvw0Auu0EqsDkhqzYiqzYkrjUksDUltTgmuzkpwDssxTsu0EEz1EA02EA13D823j0z3Tkw3DUt2DQr0i8o0C0m0y4o2DQr4Dkx4jsz3zgw2zQr3DUszyshzCod1zcp30Iz2j4v0DQlyS4c50U280k8+kg++Tw28ywp8CQl9CYo+S8v7y0r6TAt4zIs3TIr2DEp1DAn0y8m0jAl0zcq0jkp1Dsr1j0t2j4v2z8w2z8y2z8y0TUp5kxC40pCzTUw30dE8FpZ3kpK00I/xzsuwzwpwjoqwTkpwjoqwTkpwDgqvTgpwTsvwT0wyEY4zk5BzU9Bw0g5vkM0wEI0zkg9z0Y81ElC2lFJ3FFO2U5L10tM20xQ6ldf8lxn/GFv/2By+lht9E5m9Exl/E1q/09y/1J2/1Z1/1Rv+1Vr/Ftt/2Vz/2l3/2Zz+mJu9GJs7GVs4WZp12lqy2dltGdfjV9SZUg6fl5TqYh/yqum5MjF7dnY/fLw+Pf1+P359//99v/8+v79//7///3///r6+/r1+vvz+vry/frz//z4//z2/fbw9+7n6uDX3dXK3NTH6+bT/fjk///m//7l/v/q9/vt6fDo4OXeS0g5Skc4SUY3R0Q1RUIzQ0AxQj4yQT0xPDgtPDgtOzcuOjYtOzYwPDcxPjkzPzo0Qj41RUE2SkQ2TUY0UEUxUkYwVEc0VUg4WE1HVk1SWVZna2yLfYGwiJLNkZ7imaXtpq73p6/3qrD6rLP7rrT+rrT+r7P9r7P9qq74qKz2o6fxn6PtmZ3nkpTfiozXhobQgYDGeXa5bGyqYmWcXWGRV1qDUlFxTklgV0ZZX0NRbUJMf0ZNlk1UrFVdu1phyVln2VJw4lJ131Rz2VBq0kpgy0JUxjhIwi481DhF40NL40dK1j47yz41y0c4wkgztj8ptj0stj0suj0rvT4twkAwx0IzzkU100U310U42UI32D4y2Tsw2TYt2DQr2TIp1zMp1DEo1TQq2TYt2zgv3Dgv2zct3DUs3DUs0y8l2DYp1zcpzzIjzTIg0Ton1D0q0jso1Twq5kQ39kpA/EU/+TY09Sot9Sks9i4w9jY17TUz4jMu2jEs1zAq1TAq2C8q2TAr4zgw4Tkw4jov4jww4D0u3z0u2z4v2j4x0DYq71dM+GFY0Ds10Ds35FBO20dH5FBOzT00yDosxjgsxDgrxDotxDwuwTwtvjorvDoquzwrwEEwxUc4xkg5wkQ1vT8wvD4vyUc6yEY5zUg/01BG1lFM005J0kxL1U1P51pg711n/GZy/2d3/F1v8U9k8kxi/U9q/1Z3/1N1/1Nw91Nr9Vxu+Wh1+2t19mZw+WVx8V9q619o6Wpx3HJ0wWllqWVcnGxefmdVWUk5a1hKlHxyvJ+b3cHA69bV/e3t+/X1+/v5+f/9+P7+/P3///7///z///n8/v/5+v30+fzz/f72///4//74//r0//jw8Ofe49vO4NnJ7unV//rk///m///j/f/n9fnq6/Hl5uneTks6Tks6TEk6Skc4SEU2RkM0RUE1REA0QDwxPzswPTkwPDgvPDcxPTgyPjkzPzo0Qj84REI2SEU2TUY0TkYxUEUvVUYxVUg3WUxDVEtMWFRiaGmFfIGriJLHkp3dl6Tqpa32p635q677q7H9rrH+rbH7rbH7rLD6qKz2pqr0o6fwoaXunqLrmp7nlZnikZXcj5LXhonMeoC+cniybXSoa2+caWeMaV58eF91gFdpjlBfoVBZulJbzVRd1U9W20hS5UBR50BR4UNR3EVO1ENIzj9ByTk5yDQ040lJ50lK30FA0zg0zDkyzkE3x0M2vT8wwkQ1wkQ1xEU0x0U1y0Y30EY51Uc510g61T4z1Dwx1Dgs1TQq1TIp1zMq2zQr2jYs2jcu3Dsx3zwz3zwz3Dgu2TUr2TUr2jYs0S8i2zst2j0uzTEixS4bzTgk0D0pzDklzDkn0jkp4Dou8T43/0A//zw+/DQ28S0v6Ssr3ysq1yom0yso1y8s3DQx5Dg46Dg47zc18Dc07Tgx6Dcv4jYq3DYo1jQn0TUmzTUn5k9E/2xi2kdAxjUw1EJC0T9A6lZW10I80T0zyjctxjYrxjotxT0vwj0uvz0tuTopuj0rvUAuv0Iwv0IwvUAuuz4suj0rwkQ1wkQ2x0k9zlBE0VJJz1BJz05J009N519h7WJn+mhy/256/2V19FVn9FFm/lVs/1h1/1dz+lhv8V5u82129XZ9621x3Flf72Jr72Ft62Js7nJ664eJzIF8qHRnlnlnc21XT046X1ZHg3FnrpWR27++7dXV++jq/vT1/Pr7/P3/+f3+/f3///3///v///n+///7+f/1+P70/f/3///4///4//71//70+PHn7ObY6OLS8vDb/vzl///j/v/g/v/m+Pvo8PTl7vDjUU49UE08Tks6TUo5S0g5SUY3R0M3RkI2Qz80Qj4zQDwzPjoxPjkzPjkzPzo0Pzw1QEA4Q0M5SUU5TEY2TkYxUEUvVUYvVUg1V0s/UUlGVVJbaGiAfYGniJLDkZ3Zl6Hmoqj0paj5qKn7qaz9rK39q677q677qq74p6v1panyoajuoKftoKfrn6bqnaTom6Lmlp7fkZnaipTRhZDIgoy/gYi0goCnh3qYjW2FmGN3plhoulJdz01X30hR50BI6TxA6Dw64z823EQ31Ug3zEk1xUcxwkQuxD8u4lRI30g/2Ds21TYz1zg11js50Tk2xjcxvjotuzwrvTsrvjorwDgqwjYpwzQmxDIlzTUozjQo0TMo0zIo1jQp2DQq2jYs2jgt3j0z2z0y2zsv2jou2jgt2DYr1zUo1TMm1TMm0zMlzzQizzYk0Two0D8qxzkhvzEbxzklyjQl0zEm5DYv+Ts7/z5A/zg79TI26i4v3y0t2S0r1y8u3DQz4jg46Do87zg69DIz9zEy8jAu7TIt5DIo3TEl1TIjzjIjyDIjzz0u+mpf41RMxzgy0EA/yzs741FR4kpF20I80DkyyDUtxjguxTswwT0uvjwsuTwquj8tu0Esuz4quTwoujsouzwpvD0quj8vuj8wv0M3x0s/y09Fyk5GzE1Hzk5L5mFi6WFl92dw/256/2l491pr9lVn/Vpv/lpy+V1y62Fw5Gty6X1974eG5nh3119h8Ghy/G568WVy6mx39pGV7KKfw5WIoYx5aGxVSFI6V1ZEdGhcoo2I2b++8NbX9+Pl//T2//r8/v7/+/z//fz///3///r///j9/v/79//09/3z/P/2///4/f31//30///0/vrv8/Dh7+zZ+Pbf//3k/f3h/f7f///l/f/q9/rp9vfpVE4+U009Ukw8UEo6Tkg6TEY4SkQ2SkQ4R0E1RT8zQzwyQjsxQToyQToyQjszQDwzQUE5Q0M5SEY5TEY2TkYxUUYwU0cvVUg1U0k9UEhFVFFaZ2h9fYGni5PEkpzXmKHmnqHwoaL1pKT6pqb8p6n8qKr9p6z9pqz4pKr0oqnvoKfroqfpo6jqpKnrpajtoajulqDlk6DkkqDdk57WlJzLmJa+no2vqISgo2V8s1xtwlJiz0lU20FL4z5E6jtA6zs76j834kAx2kUx00gxyUkwwkYsvkIqwj8r4VNF3EM73Do34z096UNF5UFC2Tk7zDY1y0I4x0U3x0M2xkA0xj4ywzkswTUowDIkxTMmyTInzTMp0zUq1zQr2TUs2TUs2TUs5EI33T0x2DYp2TUp3Dgs3Tkt2TYn0zEi2DgozTIgyjEfzjklzDklxTQfyTgj0UMvxTYlyzgo1Tcr3DUs5TQu7TUz9Ds5+UA+/0xL+khG8EJB6z896Ts85zc65DE15Ssw8ysu9iot8y0s7y8s6DEp4DQo2TYn0zgmxjAfvS4d8mRW6l1TzkE600VByTs5301N6FNP30dC0Tw2yTYvxTctxjkvwjosvjspvTwpv0AtvkEtuj0ptzgltzgluzwpvD8rszgosjgpuD4xwUc6xUs+xUk/xUk/yktE5GBc5V9e8GVo/m91/Wp0811p8Fhl+F1r915w82Jx52Vv4Gxv6399946K84aD6HJy93F4/3uE9GFx3ldl9ImR/rSzz6+inZuEXWxPQ1M4UVQ/amJVm4iB2MC+8NjY9d/h//T3//r9//3//Pv//fz///7///r//fj8+f/68v/x8f3x9v/z+v/2+fzx/f3z///0///z+fbn9/Lf/Prl//7l/fzg/v3f///n///x+/3w/PzwV1BAVk8/VU4+VE09U0w8UUo6UEk5UEg7S0M2S0M2SUE0SEAzRz8yRj4xRj4xRkA0RUI5REQ4SEY3TUg1UEo0UkozVUo0U0s4Vk5DUk1KWFVgaGiAen2miI7CkJjWl57ko6T0pKH4oqL6oaL8oKT/oaf/oqr/oaz7oavzoKnuoKjppKfqqqntrarxr6j1qqn3nqn4lafxkqHilZ/UpaPLs569toWbtmh4vExa0ERP3j5K5TtE5jtB4z0/3z8/3kA94T0+3z073EQ/yToyykQ5yUU5ujEn2ktD5UpG6ERD6D5B6Ds/5Ts+4Dw92jw70j05zkE6xT80yEQ40U1BzEo9vjwuuDYovDgrvDYqwDYpxzQqyzIqzi8p0zAp2TIs3DUt5UE13Tor2TIi3TMk4zko5jwr3Tgl0zIezjMdyjQcxzUexjUgxzQiyDUlzDYnzjYoyTEkzDImzzUp0Dcp0TUo1DQm1zMn2zMm4DIp5TQu6zUy6zMz6C4x5iwx5ywz7C009S4z8yst7iwq6zAr6DYs4jgr2Dcl0DUjwy4awTMf5llI6FpMyjwy3U5GwzQu2ElF4FBP2ktH0kM/yzw2xjcvxTcrxzkryDwrxTwqwDsovTomuzolujsouj0ptz0otTwpsjgptDwuuD4vuT8wu0AxvT8xwEAzw0A27mth9G9o6WJe9G1q+nBw62Bj9Ghr/3F3/214+Wh17mVt6GNo6mVo7W1s7nFv7nFt+nh4/32D91tp+2R33WNw+Kyus6uYepF0W3NRSVo4TFI4cG5Zo5WIybav6tXS/+7t//b3//f4/Pj5+/v9/f7//v///v3/+f/97f/z5f7p5Pvp7f/t+P/2+//0/f/y//3w//3u//vr//ro//jl/vji/fng/fng+/rl/v70/v/6///6WE9AWE9AV04/Vk0+VEs8U0o7Ukk6Ukk6TkU2TUQ1TEM0SkEySUAxSUAxSUAxSEAzRkQ4R0U5Skc4Tkk2UUs1U0s0U0s0U0s4Vk5DU05LWFVgaGiCenyjhYu/jZXTk5ren57qn53wnZ3zm5/4naL9nqX9n6n+oaz7n6vzn6rsn6fmoaXlpaToqKLqqKDto6Dvnqf2mafumaHfopvOsZi/vYypwnGEwlRh0URN4T1E6jk/7Tg96Ts94z0/3EE/20FB3TxB2jk/2kFDyzs6zEI/x0A8wDIu5FBO5ERG6D9E6To/5jc84Dc62zg50zk3zjo20kU+xj01wz00y0k8zEw/wUM1tjsstjgpuTcpvDYqxDYsyTUr0DMs1jMu3jUy4jky4j4y3jss3TYm3zUm4TYl4DYl2jUi0zQfzzkhyjogxTkixTolyTwqyjsryzcrzDQp0jQr0zUs0TcrzTcoyDUjxzQgyjMgzzQg2DIk3TEl4zAp5i8r5iwt5S0v5i0y5y4z6Sst6y0t6TAt5TIr4DQo2zUn1Dck0Dkk0j8ruCoW00Qzzj8x2EU76ldP10I+1kJA5VVU4FJQ2ktH0kM9zT00yTkuxzgqxjkoxzwpwzonvzsmvTwnvD0quj8tt0AstD8trzkrsTsttj4wuD4vuT4vvD4vwEEywkM062lc8W5k5WJa8Gtm9W9s52Fg8Gpp/HR4/3F7/2959mly615k6Vpe7mJj9nBt+3p1+HZ0/3d7+FNk/Fpv4l1u9aapp6aSaYxrWnRPTmA6UFk6dHRap56N1MS38+Da//Pv//r5//n4/vr5+/v5+v79+f/9+f388//36v/y4P/o4Pzl6P/q8v/w9//x/P/x///w//3s//zs//ro/vXk+fLf+PLc+vTe+vfk+vry+/z3/v78WVBBWVBBWE9AV04/Vk0+VUw9VEs8VEs8UEc4T0Y3TkU2TUQ1TEM0TEM0TEM0S0M2SEQ4SEY5S0g3T0o2UUs1U0s0Vks1VEw5Vk5BU05LWldiaWmBeXuhhIi4ipDKkJXVlpncmJjgmJrnl5ztmaDxm6P0nqf2oKn0n6nunajmm6Phm6HdnKDfnp3hnZrhmpjhk5remZraopXNroy+voGqxnGQxllwxkNR1UJM3z5D4z0/5T095Tw/4j4/4T5B3z5D4D1C1jc71T9AzkA+yUI+wTw3wzgz6VhV30FC5D5C5Ts+4jg72zc41DY1zjkzyzw01Ec+xDsxvDYrxEI0y0w9xUc4uz0utTgmuDYmvDcoxTcrzTYr1DYt2zYw5Tk15j021jQp1zUo2TUp3DYq3DYo2jco2jso1T4pwzUfvTUduDYguDcivDknvDgpvDQovi4j4T864j033D4z1DstzDknyDciyDcizDch0jcl1DIj1jAk2S4m2y4q2y8t2y8t2i4s2i0p3jEr3jYt2jYq1DQkzzQizzgl0D0p00IvwDIe5lVEzzsv2UA43UI96EpJ71VT61VU5VRR4VBL2kpC1kM7zzwyyDkrxDcmwzcmvzgluzgkuDkmuTwotz4rsz4ssD0rrjorsDwtsjwusj0stT0tuD4vvUIzwkQ221tQ52dc4mJZ8Gxn9HBs5WFf6mVm8mtv4FNc7l5o9Whx8mVr8WBl9GVn+XJv/Xl1+HRy/2518klc+FJo41ps7pygoZyIYH9dVW9IUGU+VmE/dXhbq6SR39LC/u3l//fw//z4//35/f74+//6+//9+f/9+f/78f/25v/t2/3i2ffd3/ng6Pvl7vvn9fzq/P/s/Pvp//vo//jm+fDf8urX7+fU8+vY9vDg/Pnw/fz3//76WlFCWVBBWVBBWE9AV04/Vk0+Vk0+VUw9U0o7Ukk6UUg5UEc4T0Y3T0Y3UEc4T0g4SkY6S0c7Tkg4UUo3U0s2VEw1Vks1VEw5VkxAVU1KWldgamh9eHiagYSxh43BjZPNkJXPk5TUk5bZlJjhlZvnl5/qmaHqm6Prm6TlmKLflZ7XkpvUk5nVkpbVkpPWj5DQhYS9kIS2o32utnSix2aP0Fd400dh1DxL3EFH30FC3UJA30E+4EBA4z5C5j1E5j1E4j9E1Do80D4+z0VCxkE8ujYxxD036VpW3EJC4j9C5j1A4Ts92Tk50zk3zT01y0E3zkQ6wTktuTMnvzssxUY3w0Y0vD0stzgluzcowTkpyTos0Dos2Tgw4Dkx5jo26T432DEp1zMq2jMr3TUs3jYt3Tcr2jos1TwsxzgnwzonvzwqvjwsvTstvzsvwjwzzToz60NA7UA64z822DwvzTooxzklxjojyTsjzzwozjckzjEi0DAk1DEo1TIr0jEpzjAn0TMo0jQp0DcpzjYoyzUkyDciyTslzD4oyjwozj0s811P30c80TIs0S8s5T8/+VZX/3Ry/3Ju/2tl9F9Y5VFH1EI1xDUlvC8exDgnvzgluzgmtzootTwptT0ssT4srTwsrDstrDwurj0trzsssTwrtD8uu0Eyv0U2yU1B3l9W4WJb8XBr9XNx5F9g4l1g5F1j1UlS5lli82dw9Gdt9mVs+mtv+3Nz/HZ1+XFz+mRt8ENX80ph5Vhr65KWnZWCXHpYUWxDUmk/WmhEd3xcrqqR5tvJ//Tn//jv//vx/f3z/P/2+f/4+f/69v/48f3z6fvr2PnezfLRyuvMzuvN1+7S3e/V6PLa8fbg8/Xg+fbj+/Ti9Ova6uHQ6NzM7eHR8ejZ/PXt/Pfx/vnzXFBAW08/W08/Wk4+WU09WU09WEw8WEw8Vko6Vko6VUk5VEg4VEg4VEg4VUk5U0o7TUc7TEk6UEo6Uks4VU04V0w2V0w2VU06VUs/VE1HW1ZcaGV2dHSQfH6lg4e2iY/BjZDDjpHGkJLNkJTUkpXak5felJjfk5relZ3ckZrVi5TLh5HGg4zDgYfBfYPBfn+3fXSfjnCUpmiPv12E1U524UFj5jpU6DlI5kFH4EVD3EdB20hB30VD5kFF7jxI7T1I40JH1D4/zkA+zklEvz82sjMqx0I74FVQ2kVB4EJB4j9A4D0+2T461EE6zkQ6zEY7xT0xvzcpuzYnvDknvz0tvT4rvTwpvDsmwDsqxzsqzjwt0zst2zgv4Dgv5Tgy5zo05jk14zYy4TIv5DIu5zQw4zUu2zMq0i8myzEnyTcqxzowwjguwDMswjQwyzs620A+6Tk77DYz4zYw1zUqyzUkxDYiwzghxTojyT0myTgjyjQjzTYl0jkr1Dou0zktzzkrzz0uyDsqxTgnwzglxTonxT0nxzwnxzomzT4tzDkp1z0x4EI51C8r4zk53zEy3zU21DUy1js23UQ+5EtD6FFI6FRI51VG41ZFyUAwwz4tvjwstzwqtj4ts0AusD8trj8uqjwtqz0urD0sqzwrrDsrrz4utkAyukQ2xUxB3GJX4GRc73Bq83Fx4mBi5WBl5l9m9mp1+2949mpz62Bl8F9m/Wxx/3l5/3p6+m5x911p8kBW9ENd6FVo5IiNo5SBZoBdWXRJXHZHZ3hOgYhmsrGV5+HL//rn//zs//7v/P/x+//09//09P/x6/zq4/Hg2O7XxejHu+S8ud+4vd+6xeC/y+PD2ObM4evS6+/Y8vHc9/Lf8+rZ69/P59nM6tzP7uLW8efe8ejh8uniW08/W08/Wk4+Wk4+WU09WU09WU09WEw8WEw8V0s7Vko6Vko6Vko6Vko6V0s7VUw9T0k7UEo8Uks7VU06WE05WE03WE03WE05VUw9VE1FWFRVY19tbWuBc3STe32kg4axhom0hoq3iYu+i43GjI3OjI/SjI/UjZDTjpTSiY/Jgom/e4K2dXyyb3ataW+pbGqbgGyIk2N5rVp0yVBv4kNj7zZV9jRM9zhH7UBC5EVB3ElB2kpC30dE50JI8TxL7z1L4kNH1EJCy0E+zUlEuDwyrjQpyUlA1EtF1kI+2D482jw72jw72EA700Q8zEg8ykg6vzcpwDgovjkovTgnuzgmujkkvDsmwDsoxDspyTwq0D0t1zss2zct3jYr4zUu5zYw6DIx5y8v6S0u7S8v8zU18zc27TUz5DIu1y4p1jMu1TYy0TMwzi4w0i802zY96TxC7TA27jAy5TIu2jMq0DQnyDckxjklxzwlxDcjyDckzTcm0jsq2T0w3EAz3UE12EI00kY1yUIvwDsovjkmwDsoxD0pxDsoxTgmzDsqzTcozDAk5kM82jEu7T8+4i8y2Skr1DEs0jUu1Dcw0zkv0TkuzDUqxDIjvjEgzUQ0xkEyuzwrtDkprjkorTooqzoqqTopqjwtqz0uqz0sqz0sqzwrrD0ssD8vtUEyyVNH32Zd32Rd6Gtn7m5v5WJn7Wpw9G51+XB6/HN99m117mNq9mVs/3N4/3h8/3F1+mlw9Vdl+EBY8z9a6FBl4X6Dq5aDeI5obYhbbopZeItejJhws7eW3t3B+PPd+/nk///t+//v9f/v7v/r5fvk2vHX0OPNxd7BsNatqNOmqNGlrtOotdWuvNaxx9q60eDB4ObM5+nT7+3Y8erY7uLU6dvQ6tnP69rS6NvS5NrQ5NfPWk4+Wk4+WU09WU09WU09WEw8WEw8WEw8WEw8V0s7V0s7Vko6Vko6V0s7WEw8Vk0+UUk8Uko9U0w8Vk47WE05WU44WU03WE05V04/VUxDVlBQXllgY2BxaWd/cXCQeXmdfH+ifYGngYKyg4S6hobEiIfJiYjMiInKhojFgoS9e36zdXircHGna2yiZWaebGGMgWBxlVZesE5b0Upb7EBW9zZL/TJF/jlD8j4/6EM930hB3ElC4EZG50JI8TxL7j5L3UFE1EZCx0I7x0g/szovsDcszlBEyEM6zj04zjYzzTIuzzYx0T43z0U7xkc4wkM0vjkowTonwDsovjkmvDklvDokvTslwTomxDkmyzon0jsq1zop3DYq3zUo5DMr6DMs6Coq7ios9S0w+zAz/zI2/zQ3/zQ3/DU4+Dc69Tg88Tg98Tg+8zhD9zdG+jVH+zVE8yo08ywx6zIw4TQu2DUs0Dgqzjsrzj0qyDUlzzcp2Dou3j4y4T0z4j404j4030E22Es6zUg3yUExwzwpwTonwjknxTkoxzgoxjIk0jgs4D836kM93TEv3S0t6TU25jY22DMt1Tcu1jgv1zsv1Tsv0TstzTsuyDos1Ew+y0c4vj8wtDkqrjYmqzcoqTgqqDgqqzstrDwurT4trT4tqzwrqjsqrD0srj0twEw/2WNZ3WRc52xn7nBx6Whs9HF3/HZ/7Wdw9295+HF482px/m10/3d//3V8+Whv+WNs9VNi/kJb9DxY6Uxh3HV5tJuHjJ54fZlpe5dkgJZnj55zrLKOysur39/D5+rP7fbb5PPW2e3RzebIxN/Au9a1s8yuqsikmMKUk8KOmMSRocmXp8udrMuftc6mvtKtztm5193B5OPO7OXT7eHT69rQ5tPM49DJ3c/G2MzA1ce+WU09WU09WU09WEw8WEw8WEw8WEw8WEw8WEw8V0s7V0s7V0s7V0s7V0s7WEw8WU09U0o7VEs8VUw7WE07WU46WU44Wk44WUw5W08/V01DVk5LWlRYXFlkYF1waWd9cHCKdneVeHicfHunfn6ygoG9hYPEhoPIhoPGf328fnq1eXardnKldW6ic2qfcGeeemGJhFFamElFskZG0kdO7UNO+DpG/jZA/jo+9T097UE95kQ/4UZC5ERG50JJ7j5L6z9L1T9A0EdBwkI5wkg9rzktsDou0FRIwz41xzgyxi4pwyolxi4pyzszy0I4wUM0vD8tvzwqwzwpwDsovzonvzsmwT0owDwnwDgixDYiyTYk0Tgm2Dgo3TUo4DQo5TMp6TIq9TMx/jY4/zk6/zU4/y0x/Sgs/Sgs/Sow+ywy9Sow8iYv9ig0/yw9/yo//CA58xov9SEv8Cct6y0v4y8u2jEs0zIo0DQozzUp0zUq3Dov5j416j026Ts06Dcx5zYw4Tkw3Uk91ko70kY3yz0vwzUnwTQjxTYozTkrzTUq0zYt5kM83zgy3jIwzx8f6zk54zYy1DEo0TMo0DQozjQozTUoyjYoxjcpwzco4VlL1lJFykg7vT8xtjwvtDwusjwwsz0xrzktrzsssT0usDwtrDsrqzoqqzoqqzoqsDwv0FpQ22Ja6nBt83d3621x83F59XJ6/XqC/3+I/3mA8mlx92Vv/3B5/3R8/2x0+F5o9k9g/0Jc9jlV6Udc2W9zup6JmKiDgp5tfJpkf5dli5xvoKiBs7mVx8ys0du5y9m4wNSxscuopMKcnbuVmLaQlrKMkLGGibR/hrV+i7qDlcCKm8OPnsOQqMWXsMmfvs6pydKz2NrC5N/M6N/Q59bO4M3H2sfB08K6y720xbeuWk08Wk08Wk08Wk08Wk08Wk08Wk08Wk08V0o5WEs6WEs6WEs6WUw7WUw7WUw7WU09WEw+WU0/WU09Wk08W047W085W085XE88WU09V01BVk1GV05PWFFYW1VhXlppX1xvaGWAbWyOcm+adHKkenazgn2/iILIioPHh369iX+7h3qwg3KmhnKnjHSoh2yjhlyCkEhMokI2tEE6ykM/3T8+6Do79Dw8/0RD9j078T087D496kBB6EJG6UJK6kBL40JKzz8+w0A4uz81tD4yrj0tsDwtvkQ30UxDxjcv0zs2zDEtyzIs00M6xz8zszUmuz4suTYiwDklwzwowTomwDklwDklwzslxjsmyzon0Dkm1Dcm1TIj2C4f3jEj6zYr9D4z9Dcx9TQv9zAr9ywo+Scm+iYl+yUn+yUn+yYq9SIo+CIs/yc1/yg7/yI5/xg0/Rgv/yc47yMs5CMo4yst3Cws0yon0i0p3DUv4TUx5zUx7jY08TU08jIx7y8u7S0s5C4q2zoy0Dku0Dkw6lNKuiMawisg3kU9yC4kyy4n3D4150Q94Ds11i8p2S0p4jUx5Ds03D4z1TwuzTUoyTMlyjYqzTsuyTsvxTks6mJW31lNx0M3uTcqujovtzktsTMnszUprzElrzEjrjMkrjQlrzcnrzopsTwrsj4vsDouuUM51l1V6nBt8HR29Xd7+niA83F7/nyE+3iA93R6+3R7/3N9/3J9/214/mhz/GBt8kpb/z5Z/D5a40BV02RqtJWAkqF6gZ1qe5ljfZVjhZZpk6B1nqZ/nqiDmaeDkqN/iaJ7gJ91eJxwd5tveZ1vf6BzgKVygq11g7N3ibl9j7yBkr2Fl76HnL6LoL2NpruSrryZvcOnzs243dTF4NLJ3MfC0767yru0v7KquKujWUw7WUw7WUw7WUw7WUw7WUw7WUw7WUw7V0o5WEs6WEs6WEs6WUw7WUw7WUw7Wk08WUw8Wk09Wk08Wk08W047W085W085XE88W1A+W09BWE5FWE9KWVBRXFNYXVZdXlhkYVxzZ2KCbGePbmqcdW+rf3q6hn/DiYDDjYG/j323jXWpi22fl3GkoHSnmmqcmFZ6nT1BpzUqsDYpwT0x0EA33D825z438kA89Dw68zs78js/8D1B7UBG6EFI4UBI2EFGxTs4vDwztDswrzsuqjkprjorvEI1zko+10c/20I91Dcy0DUw1EE5zEI3uTorsTQiuzgkwTomxD0pwzwowzwoxDsoxjsmyDomzjgnzjUj0zMj2TMl4TUn6Tks7jku7zku5TAl5jAl6i4j7iwj9Csk+Csm/Ssq/y0u+iks9yQq+SMt/yY0/yU5/x01/xMw/BQu9R4u9i459DI75Csx2icr3C4w3jAx2yst8Dk78zY69TQ39TEz9i8y9y8x+DIz8zc22jEs2jwz1jcx40Q+4kU+zTApzzItwSIc0zQu3j855kQ/4D021jMs1jIp3TYu3Dkw0joszDkpyDYnxzUmyDkryjwwyDwvxDov7GJX4FhMyD81uTMowDovwTswvDYrwTguvjQqvjQpvTUpujQotzUntDYnsTYmrzcntDwuu0I301pS521q7XFz9Xh8+3yD93V//nyE+niA+XZ8/HV8/3N+/3B7/2p1/GRw+19s9Elc/z1Z/z5b6UNZ0mRnrY12iJdueJRhdJJcdo5cfZFgiJVpjJluipZug5NscIdda4hcaIlcZoxbapBfcJZjdptoeaBpga1ygrJ0h7d5jbt9j71/kb2AlbyDmr2HmrSFobOLrLeXvL6mzca01ce81MG7zru3xLazuK2psKWjWUw7WUw7WUw7WUw7WUw7WUw7WUw7WUw7V0o5WEs6WEs6WEs6WUw7WUw7WUw7Wk08WUw8XEw9XEw8XEw8XU47XU47W085XE88X1JBXVFBXFBEWU9FWU5KWU9NW1FQW1FZXFNmYll2Zl6FamKRcGujfXezhn2+iH67l4W/mIC0mnamnnCerXShunejtGiWsFJ0uDxEuzUsuTUpvzsuyEM00kQ42kI35D858D489Ts+9zpA9TxC70BH5UBG2UBDzkA/vzoztjourzkrqzoqqDkorDgpu0AxzUc810Q91To11zg02Tw320Q73U9DzUk6szQjvjkmwDkmwjsoxT4rxz4ryD0qyTopyjkmzzgnzzIj0zAh3zUo6z0y8kA28Dkx6DMq3jQl3jQl4TEi5S8i6S0k7Swl8Con8Sso8iwr7icq8iYv9yc0/CU3+x00+xcy9xcx8yQ28S868TY/8DhA7ztE7TxE6TY84i007zI58jA58y439S419C0y9S4x8y8w7DMx2y8r4D042TUz3zs5/2xp5EI/0S8tzi8r2To23j854EE72jwz1Tcu0zUq0zUqzzYoxTYlwjckwjYlwjkpxDotxDwuxTswxTsx6mBW3lRKyDsyvzAoyToyzz82zjsz0T0z1j011z011D00zzwyyTsvwTkruzcotTcotzsvu0E2z1RN42hj629v9nl9/4CH+nuC+3yD+3mB+3iA/nd+/3R//257/mZz+l9t+Vtq9Edb/ztX/z5Z7EZazV9gnX9ldoVaaIRRZoRObIRSc4dWeYlce4hddYRbb4FXYHpNX39QYIRUZY1ZbJRfdJtkep9pfKNqga1wg7Fxh7V1irh4i7l5jLp6jrp9krmAkrB8lKt9mqiEqKyRubSgxbmryrmxyLa0tqyrp6GhnZeZWUw7WUw7WUw7WUw7WUw7WUw7WUw7WUw7V0o5WEs6WEs6WEs6WUw7WUw7WUw7XEw8W0s8XEw8XEw8XEw8XU47XU47W085XFA6XlE+XVA/W08/Wk5AWk1EW05GXE9JWk5OXlBfYFRsZFl7Zl6Hb2ibenWtg3u0hXqymIS3pISzr4Cqt3mgxnmd0HSZymSLxk5q2UVR3UJA00M7zUQ6y0c6zEY600U53EI67EA+9D1B+TxD9z5G70JG4kJE0kBAxj87vj41tTsurjorqzoqqToprTkqvD4wzEM51D020zQw3zs55UE/30U951RK3lZIvjorvzopvjckvjckxDspyT0syTwqyzopzjgpzTQm0TEj2DIm5Dgs8D818z417TUt4y4l3zUo3DYo3zMn4zEn5i4m6Swo6yso6ysq6ikq6Ccs6iYw8io39Sc79iI5+iA7+iQ++zZH4ig15S87/1Bb/2Bs/09b8T1I8TlF6Co27Ss28C438zE58DE26S8w4Sso1ikj1TAq2DYx0zEu5EI//3Nw9VZT3D065UdE2jw52Tw31Doy0jgu0DgtzzcqzDQmxDMivDUhuTYiuzgmvjorvzssvjotwDovxDsx41lP2k1EyjcwxTAp1Tw23EI62Tw13js05j045z435EA34D812D4yzz0wxzssvzoruTksujwwy09H32Rf629v+Hx+/4SI/H2E93h/93h/+niA/3iC/3R//216/WVy+V5s9lVl8kVZ/ThU/jxX7UdbxVlZimxSYnNHWnVCW3hCYnpIa39OcYFUc4JXcYJWbIFWa4ZZa41bbpRhdJxne6Rsf6hugqlwg6tvhK5vhLBxiLV0iLZ1hrd1hrd1irh3jrh5kLN7j6t6kaN7mqOEq6uTvLOixbeuxbe0sautoJ6jlZKZWks4Wks4Wks4Wks4Wks4Wks4Wks4Wks4WUo3Wks4Wks4Wks4W0w5W0w5W0w5XE06XEs7XUw8XUw8XUw6XU47XU47XU45Xk86XE88W047W049W049XE8/XU9CXU9CXk9KYE9ZYlFkYVRuY1l7amWOdXKhfniogXWjlH2nq4WqwompzoKe2XaS3myG2ll12UVd8kNU+UVQ70pO3khHz0Y+ykQ7z0U72UQ+50NC70FD9D9E9UJI60VH3kRCzUI9wj83vEA0tT0vrDsrqjsqqTonrTgnujotyz414EVA4Dw660I/6UE+3Do140pC5lhM00s9yEAwvTgnujIiwDclxzsqyToqyzcpzzcpzTEk1TMo3zcu6Tsy7Toz7TYw6i8q5Csm4TAq4DEs5zEu6zIw8jEy9TI29jM39jU66yw06iw27C088C9A8y1E9ClG/CtL/zRR8zhJ5DI+70FL/2Bq/2t3/1dk9ERR9D9O7TRC7DRA7DQ+5zY84jg42jcyzTMpxi8kyjMqxS4lzzgx8VpT9l1Y8VdV20E/4EhF20NA0zs2zTYvzTYrzTktzTkryTYmwjUjtjgisTgjszoluD0rtjsrtTcpuzksxD412U9F10c/zTYvzjEs3z425UE44Tgx5TYx6jEv6zIv6zUx5jgx4Dkw2DovzjosxzssvDYqujgryElA3F9Z6m5s+X19/4aI+36C83Z89nd++niA/3iC/3OA/2x7/GRz+V5u8VJk80Vc/ThU/j1Y7ktcvlVSel9CVmc6V3I/W3ZDZHpJbH5OcoJVdYRZeIldd41fd5RkdZpneKBre6Zuf6twgqtvg6tvhKptha1vh69xh7Rzh7V0hLZxhbdyhrhzi7h3jrZ6jK14jaR2lqSAqq2SvrmlzcG1z8TAu7m+qKu0mZunWks4Wks4Wks4Wks4Wks4Wks4Wks4Wks4WUo3Wks4Wks4Wks4W0w5W0w5W0w5XE06XUo7Xks8XUw6XUw6Xk07XU47XU45Xk86Wk06W047W047XE88X1A9YFE+YFBAYE9FYk5QYk5aX1BjX1VwZ2GFcW+WeXScfHKXjXWVrYKdyoug2oGT43OD6mN051Bj6D1Q+DRK/ztQ+0VS6ENK1EBAy0A9z0Q/1kVA4kRD6EJE7kFF7UNG5UVF2URAykE5vz80uT8ysDosqTgoqDkoqDkmrTgnuzksyToy50pF6EA/6jw74zc12DMv3kE67VpQ9Ghb2VFBxkEwvTUlwDcnxzkrxzgoyjYo0DgrzzEm2TUr5Toy6Ts06TMv5y4p6C0o6y4s8jQ29TQ5+DM8+zI8/TE8/jA9/DA8+TE+9C9A8jFC8zNI9DRN9TBO9C1O/jJX/z1e5TJF+E5Z/2Fr/19r/lZj+VFg8kZW5zhH8UBQ6DlG2zI50DAyyDMtwjgtvTsrujsowjosvzMm2EtB+Wpi20xG4VBLzDs2zTw330tH1EE6yjcvyjgrzTsszTwryzonwzontDwkqzslrDwmsT4rrzoprjQluTkuyUQ71EdA10Q90TYx1jMu5Tw36jw15jMu7DEs8Ssq8ysr8S8t7DMu6Dcv4Dkw2Dwv0T0vwjYpujQpw0M611hR5mll+Hx6/4aG/ICC9Hd79nl/+3mB/3iC/3F+/2l4+mJx+F1t71Bi9Ulf/TtW/T9Z8E9fuVJNb1g4UmU3XHRCYXxJbIJRdIVYeodcfItggJFlgJdpfptre6BsfKRvfKhtfqptgatsgqpsg6lshatuhq5wh7FxhbJvhLNvgrRthLZvhrhzirR1h610i6V1mKiBr7aXxcOu1s2+2tHMwcHJq7G/mqCuWks4Wks4Wks4Wks4Wks4Wks4Wks4Wks4WUo3Wks4Wks4Wks4W0w5W0w5W0w5XE06XUo5Xks6Xks6XUw6Xk07Xk07XU45Xk86Xk86Xk86X1A7YFE8YVA8YVA8YVA8YE5AY05LY05VYFBdXlVqZ2N+cnGReneWfXOOjnaMrYGSzIaR336H7nF5+GJr91Ba9ztK/ilF/zJO/ztS8TxN3j1F1UBE00ND00FB3ENF4EJD4UFB4UNC3EQ/0kM7xkA1vj4xtz0wrTkqpzglqTonqzwpszsrwDwvzj413z065Dg44zEx3y8v3jUy2zk05U5D+21f8Wda11JDxT0vwzoqyDosyTcqzDUq0zkt1TQq2zcu5Toz6Dcx6DEt5y4r7DAu9TEz/zNB/zBC/y1D/ypB/yY+/yI6/CA59iA49ydB9CpE9S5L9S9Q8ytQ9ClU/zJg/0Jo8URX/19q/2hy91dj7EpZ8Etb6kNU2DFC6EBP2zdCxywwuCgnry8kqzglpT8mqEAnt0AsuTop3FpM4FxQzEY9zEM7wDcxxjs24lVO1EU9yDowxzgqyToqyDkoxzklxD0nsD4mpjwkpjwmqj0pqTgmqzMluzwz0UxD1EdA2kU/2Dk12jMt5zgz6zUx6i8o8zAs/Cws/Sss+i4t9DEt7TUt5jgv3jwx1z8yyTkuvDQovzwyzk9G32Jc9nl3/4eH/4OF+Ht/+XyC/XuD/3eB/25+/WR29l1v9Flr60xe9Ehe+zlU+jxW601bsUtGZlIxT2U0XHRCZn5MdYhafY5hg5BlhZJnh5hsh55wh6R0gqdzf6dyfKhtfalsf6lqgalrg6prhalshKptha1ugq9sgbBsgLJrgbVthLhwh7Rzhq5yjKh3mqyEsrmax8Wu1s282NHLu7/KpKy/kpqtWUo3WUo3WUo3WUo3WUo3WUo3WUo3WUo3WUo3Wks4Wks4Wks4W0w5W0w5W0w5XUw6XEs5Xks6XUw8XUw6Xk07XU47XU47XFA6XlI8YFE8YVI9YVI9YVA8YE87X046YE0+Z05JZ05SYlFbYFdoaWd/dXaUe3ybf3mVj3uUqYKVxoSQ2n2F73R3/Wts/Vla+0NL/DFH/zRR/zxU8zxO5z9M40NL3UJG1j0/20FD2z9A20A+20E/1kM8z0I5xT80vD4wtD4wqzoqqDkmqzwps0Auu0AxyUE110I72DYz4Dc03i8s4TIv5Ds00zAnzjUn6VVH/3dp6VtP0EI2yjwuyjstyTcqyjYq1Dou2Tgu3jcv4zYy5jIx6S8w7DAx8jQ2+zQ7/SY2/yI2/yI5/yM3/yA1/x41/R4z+B807xsy7R447yRB7yhH7SVJ8ChN/TNb/0Zo/2Jz/WBp9Fdg8FBa8FBc7kxZ4T9M0jI82T5EyzY4ujAtri8mpTYloT0mmz8mnD4kqDkmsjgp0VVJujovwz43uzQuuzIszUI941hR1Ug/xjkvxDYqxDcmwzQjxTQhwjsnsTwopjkkpzglqjknrDQkrTElwj8121JK2ElB30hB3Ts22zIt5zQw7DEs7i0o+TIv/Cws/Cot+Cos8ywp6y4o4zEn3DQp1Tcr0D4xvTMmuzksx0g/2F1W8Xd0/4mI/4aI+4CF/YCG/32F/3aB/2p8/l9z91hs9VNo6kRa9ENd9TdT8TtU301aokhAXEwrTGIzVG88YXxHdIxagJZlhplrh5psiKBwiaV0i6t5hax3gKlxe6dsfKZnfKZmf6Znf6ZngKZpgalrgatsgK1sfq1nfrBngLRqg7VsiLdxiLBxi6x3mbCErLqXv8Wpy8q1yszBtL3Enqq6i5enW0o2W0o2W0o2W0o2W0o2W0o2W0o2W0o2XEs3XEs3XEs3XEs3XEs3XEs3XEs3XEs5W0o6XEs7XEw9Wk08WUw7WU46XFE9XlM/XlM/X1I/XlE+YVI/Y1JCYlFBYk9AYkw/aU1JZkxNZFBZZltsa2uFdnubgIWrh4mwjoSnooemvIifzoKP4nl+8HNv+Wth/2Bc9ktU8D1Q6TpJ6z9N7UNQ50BK5D1F4z5E4TxC3Dw+2jw71T06zz83yD4zwDwvtjsrpzYkrUIuqzwpqzgmvUIzykY6zD40zzYw2Tcy2zYw3TYu3DYq3Dkq3Dsp1zsl0zYl2Tsw71JJ8VpP10U4xjcpzD0t00Ey0jot1DMp8EdC4C4u7jU68jU77iw1/0FM7ycy+SYv/ygw/ycx+R4m+yIq/yYu/icu8B0k7h8p9ys26SEu7CY38S1B5CI6/1dx5y1E/15s/l5o/Ftj+VVc81BV6UhN2j4/zTg0yT43xEI1tz8vpTgkmTIflzchmjsnnDsopzksrjcvwkU/vzs3vDIvxDY0xDUx00RA20xG2EtC0UQ6xzktwzMoxzUoyTUnxDYoujwtsTkprS8hqSkcsiwhwTkt0EM510c+41BG3UQ82Tgw2zAp5S8r8TEw+TEx+zEx9y8x9S8w9S8w8zAu8DAr6zMr5DYr2zks1D4wvjIjvj8wtz0w1V5W6HJu/46M+ISE+4eK/4SM/3iF/2h6/193/1t1/lRu+Exm90Rh8DlX8zpZ5T9X2lxnij85VUcsTF40WHU/Z4ZLd5ZdfZxjfJ1mgKFqgqVtgaduf6ZtfqdtfKVpe6Vme6NlfKNkfKNkfaRlfaVpfqdtfqprf6xrfq1nfq5kfrFkgrJmhrRribRvirB1jq58mLOIp72ZscGkssGupLOwi5ied4SKXEs3XEs3XEs3XEs3XEs3XEs3XEs3XEs3XUw4XUw4XUw4XUw4XUw4XUw4XUw4XUw6XEs7XUw8Xk4+XE8+Wk89Wk89WlI/W1NAXFRBXVFBXFBAXE5BX05EYE9FYlBGY09IZ05KZk1QY1NdZl5zbm+Odn2nfYe4hYu/nJXJoYu5qn6huHeN03mC6n169HZq9Whe+F1h8E5Z60VR70hS9kpW9EZQ7T9I6j1D4zo/3jo72Ts61Dw3zkA2xz8zvz0vtj0sqTwoqT4qqDkmrzopv0Ezwz0yxjcv1D020jUu1TQq1zUq1zUm2Dcl2jkl2zsl2jkl3DUs5kE76UxD4Eo80D4vxjcmyjko0zst3Dsx9UlF5DAx8DY79TY+8C45/z9N7iYx8yQq9iUo+igr/Cws+ysr9Scn9igo9ysq7iMm7CUo6iUs/TtE2Rsn7jRC+0BR1yU1/2p1/2Nq/Fth+1hd805S5UJD1zw40T42vTcrvkMzuUk1qT4qlzAdjyoYjigZkigbnC0ksDs00FNPzEhEwTU0xjQ00Dw66lZU10ZB1UY+z0E3xjguxTIoyTUrzzcszDguxjwywjkxwTQrwzMryDMszzgx10A33kU94ko/3UA32TYt3DEq5jAs8TEw+DAw+jAw9DAy8jAx8y8w8zAu8S8t7TIr5zUr3jgs1j4wvjIjvD0utT0v015V6XZx/5GN94WF94SH/YGJ/3WD/2Z5/1x2/1h0/1Fu/Ulm+z9g8zpa8UBd4UlewFJbez83UkYuTF42WXZAZYdKcpZZdZted51ieaFlfKVpfaZqfKVpe6RoeqRleaNke6Jje6JjfaFhe6JjeqNneqZrfKhpfapnfKtjfKxgfq9ggLFigrBlhrFqh69whqxziap7jq2Ej6mGjKOJdod/YW9vT11dXEs3XEs3XEs3XEs3XEs3XEs3XEs3XEs3XUw4XUw4XUw4XUw4XUw4XUw4XUw4XUw4XUw6X048YFE+XlFAW1A+Wk89WVA/WlFCW1JDW1FFWlBHXE9JXU9MYFFOZVNTZ1VVZ1VVZldcZl5ta2iDcneheYK5gYrLiI3RlpHUn4vIqYKxuX2fz4GR5ISG7X518XJp+mVn9VRc7UdR70VO9khS9kZQ8kFL7T5F4jc93jg62Do50j03zD81xEAzvUAutj4trT4rqD0rqTopt0M0xUk9vjwvujEnyDowyzct0DYs0zcr1Tgp2DYn2Dcj2jok3Top3DUs2TQu30E2509C20c5xzQkyDIj2D8x4T809UhC5zEw8jU5+DY/9zM//0RQ+DM97ygt6iQl6yMl9zEw9C4t7Scm6yUk9DAx6igp9Tc55Ssw4Cgw6TQ9/1Je7jxK/1tm/V1l8VZa7k9U7k1S6EVI3Dk61Tc00z44wDYswD4xvEIzsj4vqTgqpTMony0jmyYfmiUepzAqxUVCwTs4uy0sxTMz1kJA819d0D860UI60EI4yjwyzDkv1D002kA220E520A72D053T4740E/4j483jo440A760lE4EI53Dsz2DUs2jEq5DEs7jIw9TIw9jAv8zEy8jAx8y8w8zAu8S8t7TIr5zUr3jgs1z8xwDQluDkqtDwuzlxS63p0/5OP+YeH+YKG+36G/nJ//2V3/1t0/1Rx/05s/0Zl+jxe8zxb7kVi31RnoUFFcDwxUUowUGI6XXhDZohMcJRXcphbdJpfd59jeaJmeqNneaNkeKJjd6Fid6FieJ9geaBhe59heaBheqJmeqNneqdme6hjealfeqpefK1efq9ghLJnibRtirJzhqxzhKZ0gJ91eJJtb4ZsUmRYQE9MMkE+XUw4XUw4XUw4XUw4XUw4XUw4XUw4XUw4XUw4XUw4XUw4XUw4XUw4XUw4XUw4XUw4XEw1Xk43YE87YFE+XE8+Wk4+WE9AWFBFWE9GWlNNXlRTYVdYZVldZ1pha1tla15nbGFpa2VvbmyCcnSad360fofKhIvZi47fjIfXnIvRq4rBs4GnvHiNy3qA3IJ58IF2/nJx/2Nm9lVb80xT80hQ80RL8j5H7TxC5DU63zc32Dk20j02y0E2xEI0vEEvtUAuqzoorT4trz4uu0c4y1NFxUk9uTYstzEmxjkvzDkv0jwu2T0w2joq2Dcl2TYj3jgo3TUs2TIq3z406k5B40s90Tsq0Dcn30Iz3TYt7kA56DAu7zEz9TM7+zdB/05Y/0tU/T5D8DQ14SUk6y8u6S0s7jIx5iop6C8t8Tk50Roc5TI23C0y5jk/70ZN/1hg8U1U1zxA2kFD3kJF3j5A3jo73Dg52Dk20jk0yTkxwTgwvDkvwEE4y09H1VZQ0E5Mw0NAsjcytDkyzUxH2E5L4lJR7lpY6FJR71pWyDUuzT000UE4zz800j402EE43UM54kA76D4+5zk77Dk98T5C7js+6DU46z089k1I3Tgy2TYt2DQr2zMq4jQt6zQw8DMv8jAu8zEy8y8x9S8w9S8u8i8t7jEr6TQr3zcs2UAywjYntDUmsjosyFZM7n13/5OP+4eI/IGG/HqE+298+2J0/lhw/09s/0Zm/0Bi+Dlb8z5d6Utk11pohDMyZTstVU81VmhCYXxJaYhNcZNXc5dacphddp5ieaFleKJjdqBhdqBhdZ9gdp5gd55feJ9ge59heaBheaFjeqRleqdkeqdieKheeapbeqtafK1chLNlibRsi7Ryiq1zhaVzf5xwc41maH9iUGJUQ1JLN0Y/XU45XU45XU45XU45XU45XU45XU45XU45XU45XU45XU45XU45XU45XU45XU45Xk43XEwzXU0zX082Xk86W049V04/V09EV1BIVlFOXVdZZ2BobmZzcGh3cGd4cmZ6cWh7b2x9b3GGcneXdXyqeYHAf4fShIreiozjk47imozXoIS/m3Wen2x/rG5xvHZs0XVo8XJs/2xq/2dp/l5g+lFW9UZL7zxC6TY65jY54Tc32zk21D02zUA2xUMzvEEvtz8urDgptEAzrzsusDwvxlJF011Rx01CuTsvvDotwDgsyTos1T8x2z4v2DYn2jQm4DYp3zIr4TYv4j414kQ44UU43EMz3UAx4T8w2zAm6TYx6jEu7y4v8C0x+TY8/1BY/1xi/1pe/09S4S4x4i8y3iws9kRE5zU12ysr2y0s6j4+2zMz1zM0/2Nm3j1Cyiswyi4ywCcp1Do64EJD2jc62DI03zk73Dg5zS8uyzMwzTw50kdE3VNR62Fh9Wls9GVr6V5hwkE8xUY/415Z92ln/3Bw/2tq40tK1j47xzQtzj411UU800M40z811T0y1zox2zMw7jU68Cw28Cw28S037yw06ywz8jo8/UtJ3jIu2jMr2DQr2zQr4TQt5zQt7DMu8TEu9DAy9S4x9i4w9i4u9C4t8DAr6TQr3zcs2D8xxjgqtDIksTkrwE5E7Xx2/5KO/oeJ/3+J/naE+Gt7+GF0+1Vt/Ulm/z1h/zpf+DZZ8UJf3U5iwVZecC8pXD8tWVc+XW1IZX1Na4pRcZJZc5Zcc5led59jeaFjeKBidJ5fdJ5edZ1edZ1ed55feJ9ge59heqFieaFieqRkeqdieqhgeadceahae6pafKtbf6teg65mhq9rhqpthaZxg6ByepVscYlpZHdjWmpdUWFUXk86Xk86Xk86Xk86Xk86Xk86Xk86Xk86XU45XU45XU45XU45XU45XU45XU45XU43Xk0zX04yX082XU45Wk4+WE5CWVJMWVNTXllfZWJtcm5/eXSLe3WReXKRd3CRdHCRcHOScHmadH2odoC1eYLDfYXOg4jZiovbk4/Zl4vLmYa0oIOhqYOOq355nmtamlE+uk5B01BI4VZR61dV8FJR8EpM7T9B5TU46Dg65Tk53jo42D040UE2yEM0wEEwuj8vszksuUA1qzUpoi4hvEo/12db1mVXyVVItz0wtTUovjQnzTsu2Dwv2DYp3DQp4jYs3jAp5Dcw4jsy3Dot3D8w4kU040Mz3jgq3zEm6TQt7zIu7i4t7Cor8zI1/0VK/1Va/15g/1te4Tg74Tg71Cws8kpK4jg51y8v2jQ0zCgnyico9lhZ2j5B1Do80Dc6uB8hxCgp2zs75kFF3TQ31iwv2zE02TAzzCcr0TM040pM9GJj+Whr9mNp9V9o+V9r92Fq1E1K005H51xZ51ZT5k5N4UdFzjMxzTQv1kE63ktD41BG3UpA2EE21Tsx1DYt2i4s9DE5+iw5+Co39Scz9Cgz9zA3/D5A/0pJ3zAr2zIr2zQr2zQr4TUr5jUt7DMu8DMv9DAx9i4x+C0w+C4u9S0t8TAr6jMr4TYs2T0wyTstszEjsTcquUQ76nlz/4+L/4iK/3uH/nCA9Wd39V5x+FJq+UVi/zle/zdd+Tda70dhz09eoUhKZDQoVkQuWlpAXmxJZXxOa4hSc5FbdJVcd5pgeJ5jeKBidZ1ecpxccpxcc5tcc5tcdZxdd55fep5geaBheaFieqRie6ZfeadeeKZbeKdXeahXe6pZfalcgqxihaxphqpsh6hxiKV1g55zfJRwdYlwbX5rZXZkXk88Xk88Xk88Xk88Xk88Xk88Xk88Xk88XU47XU47XU47XU47XU47XU47XU47XU43YE81YVA0YFA3XE88WVBBWlFKXFZWX1phaWd1cW+EfHmWf36gfnyjeneieHWidXakcniocn6wd4G2eoO8fYXDg4jIio7NkpPMl5PFoJa7q5yzu6avya2pxKWTqohsmWZJnEUxrEExtkA0wkI51klC6E5M7UlI6kBB6jw96Dw84zs63z0610A3z0E1xj4wwDwvujovuz81rjUspjEnuko+zmJV02da02VWw09AuD4vuDQnxjgs0zkt1zUq3jMr5DYv4DIr4jUu3zcu3Dgs4D4x5UM04j8w3TMk5TUo6DAo7zIu7y0t7S0s8TAx8jY39kJF9k1Q+1hb6UZJ9FFU1zQ36UZJ3Dg55EFC2jc4zi4wzzEy4khK0Tg6zTc4tyIk1Ds92zg54zs76TxA5zY84C0z3Sow4TI55zxC70xR+l5i/2xx/2lw+V9p9Fpm91ln9lxm82Ni6FtU51ZT1z88zDEv0jQx0TMw3kM+4ktE5lJI6FRK30tB2EA11zox2Tgw4TMy8y43/zA9/y88+io3+y05/zpC/0JF+kJC4DEs3DMs3DUs3TUs4DQq5TQs7DQs8TQw9DAx9i4x+C0w+C4u9S0t8TAr6jMr4TYs1zsuzT4wtTEksTcqsjsz53Rv/YqH/4aK/3aD/Gl78mFy8ltu91Bq+UJh/zhe/zhf+Ttf6kxlvk5afjg2XT0uTEYuVVg9WmVDY3lLaIRRco5bdpRed5pgeZ9kd59hcppbb5lZb5lXcJlXcZpYcptZdJ1bd55feJ9gd6BeeKNeeaRdeaVadqVXdaRUd6ZVeKdWfalcgqxihKtohKhqhKVuhaNxf5pteJFpcIRoan5jYnZdX1A9X1A9X1A9X1A9X1A9X1A9X1A9X1A9Xk88Xk88Xk88Xk88Xk88Xk88Xk88Xk86YlI5YVE3YFE8W08/WlBHXFRSX1phYF5sc3GHeXiXgICmgYKufX2veHiud3avdnizdHy7d4DBe4XCf4jBhYrBjJC/lZe+nZ25q6e4tK20vrOvxrmp0L6m1cGg0buU0KyIr29TrlxGpEc1qD4wwUc831ZQ71dU8E5M6EBA5z095jw84j073T461j01zzsxxzkvwTgwwD01tjoytz41wFBExVlMxV5Pz2VX0mRVwkw+ujotwzks0Dku1jMq3TIr5DYv5DYv4DMs3jYt4z0x5kI25UIz4Toq3jIk6TQp5S0j7TAq7y8s7zIw8DQy5i4s4jIy5kJD9Fhb81da/29z40RI6EdM3j1C+1pf/3B03T5C/32A/25w6lFT0z0+xTAy1Ts98khL7To+7zg99z5E8jdA5y429D9I/11n/2x0/2py/mNr911l+V1o/mBu/l1s9lli8lxd4k9I4UlG0jcz0DEu1zUy0jAt2Dkz3kQ84UpB4UpB10A30jUs1TQs3Dcx5jc06CYu+TA6/jI99ys0+TA4/z5C/T9B6zUy4DMt3jYt3TYt3TUq4TMq5TIr7DQs9DQx9jAx9i4x+C0w+C4u9S0t8i8r6zMr4jYs1zktzj8xtTEksTUprzYu53Bs/YeF/4eL/29//GN38Vxv8llt909p+0Ji/zlf/zxh9UBh5FJnsFFXZC8nVkUxRkYsUVU6VF8/YnRKZ4FRcYtbdpJfeJliep5hdp1ecJlXbZZUbJZUbpdVb5hWcJlXcptZdZxddp1cdp9bd6Bad6Jad6NYdKNVc6JSdaRUdqVVeKRXfaddfqVifqBjfZtlepZjcoxdaIFXYHZSWm9QUmdIWUw7W049XlFAXlFAXVA/XE8+XVA/XlFAX1JBXE8+Wk08W049XlFAYFNCX1JBYFE+Y1Q/X1A7XVBAXFJIWlBOWlNaZGBvcnCGd3iXeXuifoCwgIG3fX+6d3m2cXKybG+0cnjGdnzKf4TIiI3FlZjBpKS8sbC4vLmyysWy0cyu18+q2M+k29Ci3NCg2cua2MGV0aiItoBmoF5Gynlm1XRkvEc+1lFM9mJg6EpJ4z8+4Tk54jo54Ds52jY02DYx1To1yTkxvzYuxUI6uDwyvkk/xFhLtk9AzGVWz2RUyVhIw0g5wzsvyjYs1zYs3zYv4TQu3jEr3TIr3zcu4z0x4Dww2jco3DUl4zcp5C8k5y8l7C8p7jEr7jMu6zQw5zQv4jYy1jY25UtN81hc609T1zg91TY7+Fdd/36E/36D/3B1/2hs/2lt/2dq811f71lb+ltf/1Za/0NK+jhA+jZA9jI+7Cw36zA78DxH/VNc/2Bo/2hw/2Vt/WFs/2Jt/2Bs/Fxk7FJS3kU/1Tc01TMw1jEv1C8r1zIu2zk04EM820M41z801Dwx1zkw2jcw3zgy5Dcz7zY78jU78zQ59jU69DU68TU26jIy4zEt3jMs3DUs3TYt4DUr4zIq6DEp7zIs9DIw9zEy9y8y+S4x+S8v9i4u8zAs7DQs4zct3kA0yzksvDYqrjAktzw10lhV/5iX/nuB/2x//2R79l1y8FBo9Edj+0Ji/zti+Tle9E1r0lFjiT09UCweQjolQkguSU00V2BBWmpDYXhKb4lZd5Ngd5Vfc5VZcJdYb5hWbJVTbJVRbZZSb5hUcZpYcptZdJtcdZxbcptVc51VdJ9XdaFWdqJVdaFUdKBTc59SeqRYeaNbd55bdJZZbItSYn5LV3FCUWs+P1gwPVYvOlMsWUw7W049XVA/XlFAXVA/XVA/XVA/X1JBYFNCXlFAXE8+XVA/YFNCYVRDYFNCXlFAZFdGX1FEXE9GXlRSYFpeY19tbWuBdXaVdnmieX2tfYC3eHy5cXW1a3CybG+0bXG7dXfOe33Sh4rRlpjLp6bFuLe/x8W40s+w2tap4Nuk5N6k492h5Nui4tmi29Ge1Mea0ruZu5yApnxjxIt3yX1ts1VJ0WBY9XFt7Fpa5kpL4j4/5j4+6T9A5Ts74DY22zY01Tw3yDcyyj84tzcutj0yvEw+tEg7xlxM2m9f0mFRxEk6ujQowzAm0zUs3DUt2i8o4DQw4jk05D014Dwy2zct2TUp3TUo4jUn6zYr7DQq7DEq6TEp5jEq4zIq4DMs2jUv0zg21z5A40pM8ldb+V1h+1xh/Fxk/2Bo8lJa7U1V71JZ/F9m/2pw/2dq81pd8U5T7DM48Csy8ys19S037yc05CAs5SY17DZC+1BZ/lpj/2Nq/2Vt/2Vt/2Js/Fpl9VFY5EVC3D032TUz3TUy3zYz2zIv2jIv2TYv3T822D401jwy1Dow2Tgw3Tgy4jk05zo26Dg46TY56zc47TY47jg36jY15TMv3jEr3DQr3DUs3Tcr4DUr4zIo6TEp8DAr9TIw9TEy9i8y9y8x9y8v9i4u8zAs7DQs5DYt3j4y0j4ywjgttTIotjcx2FtZ/4+Q+nN6/mV5/111+FZu9k9p+UZk+UBg+jxg80Fh5E5nuUtWeDs2SzEgOzkiOkMoRUcvT1M4VmRAXnNIbINVdI9cdpNdcZNXb5NVbZRRaZJOapNPa5RQbZZSbpdVcJlXcplac5pZc5xWc51VdJ5Wc59Uc59Ucp5RcJxPb5tQbZdNa5NNaIxMYIJFV3Y9TGg1RF4uPlgpPVYsPlctP1guWEs6W049XVA/XlFAXVA/XVA/XlFAYFNCYFNCX1JBX1JBYFNCYVRDYVRDX1JBXVBAYlVMW1BMW1FQYFlgamRycW2EdnWVeXukd3ureH20dny4bnOzZGmtYGetaW22cnXEfH7VhYXblpXZp6jYu7nPy8rG2de+5OG06OOp7eim7uml6+ak5+Gl4dqk18+gy8OctrCQp5uBmYNrp4Ntp29em1FEul1V3Gxo93Vz7mBe5EpK5EFC6UFB6z8/6Dg64jY23z060zs20kI6wTgwtzcstz8xrTwutkc22WpZ3mpb2VtNx0E1xTIozzUr2TYt2DEr3TUy50I+6kdA3zwz1TMo1TEl2jIn3DAk5jQq6DEp5i8p5C8o4zIs4jcv4T0030E4xS0oyTMy2UNC7lVX+F1h91tf81Nb8FBa50dR6EhS7k5Y+l1k/21z/25081he4j1D6C808i00+TE7/DM98ys47Cg09DVE/0pW9ElS9FBX91hd+19j/2Rp/2Bm9lFY6EJG3Tg23Dcx4Tg16Dw46j055jk14DQw3DUt2zow1zsv1jou1Tkt2jcu4Dkx5js06Tw44zo34jk25Dg25jg35zo25Tg04DUu2jEq2TUr2jYs3jgs4DYp5DIo6zAp8TAp9jAt9DIy8zEy9jAx9jAv9S8u8jEs7DQs5DYt3Dov2kM4xjkvujQrtDAs4V9f/4SG92t0/mJ3/VZw+lBt/Utr/ENl9Dtd8Txf6Ull01JknENHazw0Tz4sPT0lOT8lRUUtRkkuUVw6WWtDZ31PcYlZco9ZcI9UbI9PaZBNZ5BKaJFLaZJMapNNbJVRbpdVb5dYb5hWdJtYc51VcpxUcZtRbppPbJhNapZLaZRMZI1HYIdEW39BUnQ4S2kzRGAtP1kpPlUnQlwtRF4vSWM0V0o5WUw7XE8+XVA/XVA/XVA/X1JBYFNCX1JBX1JBYFNCYVRDYVRDYFNCXlFAXFBEWU5MWlFWX1hgZ2NycW2EdXSUeHqhenytdnuyc3m1anKzYmmtXGOrYGevbHK8dnzIiIrdlJPjo6PjtbTgxsXX09LO393E5+S56eav7ems7Oir5+Kq4tyq2dKoy8OfurWXpKSMmZiDk4h0l4BumHFim2NWsmhfz3Jr+oqG9HRx6lxb5UtL50RF6kBB7Dw/6Do73zo42js13UY/0kI6wDovuDourzUopzEjvkg62mJS6Wpb21NFyTosyzMm1DYr1zQt1zMx8U1L/FpV601E1zku1jQp2zQr3TIo3i0l3y0j3isk3i0l2zAo2TUr2Dov1j4zwS4mwzMrzjo22ERC3EZH3kVI40ZN6UxV7lFa81Zf9Vhh+Ftk/2hw/25z8lle3To/6TI28C8y8S408Cs06iYw6yk0+D1I/1Ne60BI5kFH50ZL8lFW/1pe/1dc80ZM4zY44TUz4zgx6js48T878kA+7jw45jkz4Dcw2zgv2Dov1zku1zku2zgv4Tgx5jkz6Ds14jo33zo24Tk24zo15jo25Dky3jUu2TIp2jYs2jgr3Dkq4DYp5DIo6zAp8i8p9DEt8zMy8jEy9DAx9jAv9S8u8jEs7DQs5DYt2jgt30c8yDgvvjMstC0q7GZn/3l99mly/2N4/FRu/Upq/0hq/j5j8jZZ6D1d4VFowlhih0E/ZUM3WU46R0cvQUMrSkgxREQqS1UzU2M+YnRKa4NTb4pVbo1Sao1NaI1IZ49IZpBIZ5BKaZJMa5RQbJVRbZVWbpdVdJtYc5tVcJpSbZdPapRMZpFJY45GY4xGX4ZDWoFAVng8UXA3TWk2TGY2TmU3TmU3S2U1Tmk2U209U0c3Vko6WU09W08/W08/XFBAXVFBX1NDXlJCXlJCX1NDX1NDXlJCXlJCXlJCXFJIVUxRXlhma2d4dHCJeHSVeHefeHqqdnuyc3m1aXGyYGerWmKqXmauaXG6dX3FfYTMkpbgnp7kra7mu73kycrf09LX2tvN4N7F5OG+5uK85N+53ti22NG1zsavvrWkraeZl5mLjI6AiYZ3iXtukHVqmnJoqG1luW5o5ImE7YB98XRw8GRj8FhX70xN7kRF6z8/4jk24Ds14UI83UY9yz0zwz0yw0E0rzEjqzAhx0k62lhK1U0/yz0vzDgq0DYqzzIp1DUx9VZT/2pn+l1Y4kU83Dsx3jow4Tku4TMq4jEp3zEq2zAo0y8mzS8kxS4jvzAixTksvTMmvzIoyjsz1URB2UVF20JH2kBI30RM609a8VVg8Vdf+V9n/mdu8Vpf4EFF6Do77DY17TM27TM48DM69TpD/0hS/1Ze4jc92zU53DY66UBD+EtN/ElN8zxA5zAy5zUx6Ts07zw48jw48Ts47To25zgz4jcw3zsy3Dsx2Tsw2jkv3Dgv4jcw5TYx5jcy5Ds44jo35Tk15zo26Ds35jkz3zYv2jMq2jYs2jgr3Dkq3jYp4zMm6DAm8C8o8jEs8TQy8DIy8zEx9DEv8zAu8TEs7DQs5DYt3Dgu3UM5yTYuvjEqvTEw9mtu/3J4+Wdy+15z+U9s/kJl/z5k/zlg9Dhb5kZi2FtrqlVadkQ9Yks7X1lDUU86S0k0UEk2RkQtRk8wTFw4WmxEZXtNbYVRbIlPa4tKZ4xHZo5HZpBGZ5FJaJFLapNPbJVRbZVWbZZUcplWcJhSbZVPaZJMZY5IYotFYIlDX4hEWoFAVn0+U3Q7UG44T2s4UWs7V25AWXBCVXA9VXI8VnI/UEQ0U0c3V0s7WU09WU09Wk4+XVFBXlJCXlJCX1NDYFREX1NDXlJCXlJCYVVFYVZQXlZhamV7eHSPfXmaenmhd3imdXitcni0aXGwYmmtW2OrXGSsZ2+4dX3FgIjQho3Rl5zcoKXdr7Pju7/lxMjhzM7b0tPX1tfR2dfL2dbH1tDE0Mm/zMO8w7m3s6mqo5qbiYqFd3pzdnZudWxjf2xljW9njmJZm2BYv3Js1nly7397+3t4/3Fv/WNj9VJT70dG70M/5z433zw130I5zzsx0UM53VVJwT0wtzUnvDoqwj0uxj4uz0Ix1kU01T8wzzcqzjMv6E1L+l9d8ldT30U92Dox2zgv3zgv5Dkx5Tkv5Tgx4Dkw2jkv0TksyDkrwjkpsCkWtzIhyEAy0kg90kU+yzs6yTc4zzo+zzhB30hR7FVe8Fli9F1k9mFn6VRa2kFD4z896z878UFB+khI/01S/1FW/1Vb/1de3jM52S8y2jAz5jg69D1B+Ds/9TQ38TAx7DUx7Dk08Dk17DUx6jEu6TMv5TMv4TQu4zw03zwz3Twy3Dsx4Dkx4zgx5zUx5zUx5zk45jg36Dk26jg26zk15zgz4jUu2zMq2zcr2zks3Tor3jYp4zMm5zEm7zAo8TEs8DQy7TQy8jIx8zEv8jAu8TEs7DQs5jUt4Dkw2DsyzDcwwC8q0EJB/m9z/Gty9mJu71Fo9Uhm/Ttg/zVe/zVf+z9i401mylxni0dGaUU5XE06XFdBV1I+UUo3T0c0SUQuREouRlYyU2M8XXNFZ39LaYZMaYlIZotFZY1GZI5EZY9HZ5FJaZJOapNPa5NUbJVTb5ZTbZVPapJMZ49JYotFYIlFXodDXodFW4JDWn5BVndAVHI+VHA/VnBBXHNHXnVHWXRBV3Q+VnM9TkIyUUU1VEg4V0s7WEw8WU09W08/XVFBYVVFYVVFYlZGYFREX1NDYVVFZlpKZ15ZbWZ2dHGMenmZeXmfdneldXeqcHWvam+vYGerXmauX2evZW22cHjAfYXNiJDYjZfVl6HUn6fVqbLbsrrfub/fvcHcwsTbxMXXxcLTxMDPwbvJu7XDuK/AtKm6pZmtlIybiIaLcXFxcnFtbmZjd2hjhm9pgmBXlGNcm1tStmZd1nNt7Xp1/3t3/3Zy/2hl+1lW/VFN9EdA5T425kU91jwy2kY86lxQxDotwTwtvDcovjYoxz4uz0My0UIx00Ix1UEz0Dgz1j493ERB2kI91Tw21Dcw1zYu3Dgv4zsy5Toy4zoz3zsy2z411UE10EQ1zEc0ri0XuzokzUo20Es8xj0zui8qvzEwyjk81UJK30xU61Ve7Vpi71xk61pf3k1S0z5AzjMu1zYu4Ds36EA98ENF80VH8UJH7D9D4jU53zI24zM27jc79Tc59TEz+i4x+jI07jMu7zgy8Dcy6TAr5ysp5zAs5TIt4DMs4zwz4D4z3j0z3zwz4jky5Tgy6TYy6zUy6jY36zQ27DQ07TU17jY06zUy4jQt3DEp3Tcr3Dgs3Tor3zcq4TQm5jEm6zEl7jIp7jUy7DQy8DMx8jIv8jAu8TEs7DQs5jUt4jsy0TMq0js0xjIu51VW/3F29mNr8Fpm5Ulf8kVj/zlg/zBb/zRh/0Jo201jsE9WajUvXUY2V0w4VE85WVE+VEk3TEEvSUQuQEYqQE8uS1s2VWs9YHhEZYJIZ4dGZYpEYopDY4tCY41FZY9HZo9LaJFNaZFSapNRbJNQapFOZ45LZItIYYpGX4hGXodFXoZHX4VIXoFHXH1GXHpGXHhHXnhJYXhMY3pMWnVCWXZAWXZASUIyTEU1UUg5U0o7V0s9WEw+W08/XVJAZFdGY1hGY1hGX1ZFXlVGYVdNZl1UaWNld3KIeXWYd3Wcc3KecnKkcnWsa2+uYWaoWmGnXmSuZmy4bXO/dnzIgIbQjJLclpvdmqHVn6jTpq3XrbLcr7TcsLTasbPZtLTasrDVsq7RrafJqKHDqJ7Ao5m7louth3+Xe3iDY2FkaGRlYlpYaVtYemNdd1ZNj2NaiU1DoVRKumBX1mtj73hy/4B6/3p3/25p/WBb9VNO5kdB7E9I3EI63UY96VZMuSsfvjIlvjUlxj4uz0Y0yj8swTIhyDck2UU33UY/0jo1yjItzTYv0zoy1jwy3Dsz4T005Dwz4Tkw3TYt1TQqzzUpyDkpxTwqwj8r1FM+x0YxvTwpvjorwjwxwzo0wTYzwDQz20xO3E1P4E9U5VRX51hc5VZY2U1O00RAyTUr0DYq2Dct3DUv4DIx5DE05TA15i427DQ87DM78TY/+jhB/DM9+is1/ykz/zA39yww+DQ2+DQ28C4v6yor6TAu5zQw4jUv4jsz3zwz3z404D005Ds05zo06jg07Tc06zMz6zMz7DIz7TQy7DQy5zQv4DIr2TEm3jgs3Dkq3Tor3jgo4DQm4zMk6DIl6zMp7TYw7DUx7zMx8DMv8TEs7zMq6zQs5DYr4zwzzC4l1z44zDQz+WNl/2949lxo7k9h6ERc+EVl/ztj/zFb/zZh9kdoyEtbk0NGUiwhVkk4Uk05Tkk1WVE+U0s4Rj8tR0cvPUQlP0snR1UxUmQ6XXNEY35JZYRIZYhGYodCYYlCYopBY41FZI1HZo9LZ5BOaI9OapFOaJBKZY1HY4pHYYhFYIdGYIdIYIdIXoFHXYBGX31HX3tIYHtIYXtLZX1NZn5MW3hAW3o/XHtCQUI0RkQ3SkY7Tkc9Ukg+Vko+Wk09XVA9YFE8XlI8XlM/XVZEYVpQZ2JfbmltcnB+dnGRenWee3ileXeocHCmZ2ejYGGhW16jX2GrZGe0b3DAeXrMhILVjYvflZPnm5jln5/dn6DWoqLYo6PZo6PXpaLXo6HTpKDTpJ3QopzMoJrIoJjHnZbCl465jIOug3ydcG57aGZpY19eZVtZa1lVcVZPfFZNiVdMklJIqFpQs1lQv1pS2Gtk6nlx94J7/4qF93Zx/XZz62Bd31BM2ERA71pUyzgwwzMoxDYowjYlwDclwDckxDkmyjsqzz4t1D4v0Dgr1Tsv1z8y0zsuzTUnzTQm1zkt4kA14Dou3zkt2zcr1TcrzzcpyDspxT4qxEEtwDwtxT8zykQ5zUc8zEM7xDszuzIstSwmxTw2z0ZA2U9M31ZQ41lW4VhS105IzUM5zDso0zsm2jgp4TUr5y8t6yov8Cgy8ig2+Sw9+Ss/+is/+yo//Sg+/yY+/yQ8/yQ6/yQ4/yg5/ys6+ys48ys16y405zU15Ds43Tgy2zoy3Dsz3js04zoz5Tgy6DYy6TYy6zMz6zMz6zU06TYy5zUx4jUu3TUs2DQo2zkq2zoo2zoo3Dkm3zgl4jcl4zYl5jQm6jUs7DUv7zQt8DUs8DQr7TUp6DYq4zcp3jou1jgv1To12j4//2x2/2Jx+lRo9Ehg/0to9TZY/zVc/z1k9j5i5U9orkpUXSMhQy0fPTonR0YyT046T0o3REMvPUIuPkcsQkgkRUwjSFItUl44WmtBYXdJZH9MZINKYYVFYIhBYYlAY4xAZY1EZ49IapFOa5JPaZFKZ49GZY1GY4tFY4pHZIhIYoZIYIRGYoNKYoFIYYBHYn9HZH9IZH9IY35HYX1DW3s8XH89X4JCOz8xPkI0REQ6SUU8TkU+UUc9WEo9W049X1A7XVE5XFQ/XldHYFtVZWNmbWt4cW+Fc2+Uc3CddHGgb22fZ2afYGCcXF2eWl2iY2WwaWu4dHLFfXvPhYHWjIjfk43ll5LkmJXYmZjSnJjTnZnWnZnWnJjVnJbSm5XRnZXQm5PMmpPJmZLGmJDBkYm4hn+rf3iac2t6bGNmZV1bZFtWaFlSbVdMelZKiVVImlZLr11SullSwFlS0WZe3XBp4XZu6353+oeE/4eE9nZz7WZj4lRS61pVxjMrvzAixDYowzcmwDckwDckxDkmxzoozTwr0jwt0jkp1Dgp0zoq0Top0Top0Dko1Dgp1zcp3Tsu3Tkt2zks1jkqzzkoxzomwTokvTomvjYqwTguxTw0yD81yUA4xz40xDszwDovvTQsxD4z0UhA1U9E2lFJ1U9Ey0I6wTcqyTgj0Tki2zgn5TQq7TAu8yow+Sk2/Sg6/ys//ytB/yhA/yc//yM9/yE8/x87/x45/x45/yE5/yU6/ik79S047zI55zc55Ts73Dk02zk03Dsz3js04zoz5Tgy5jcy6TYy6zMz6zMz6zUy6DYy5Dcx3zcu2jYq1zUo2Tkp2Ton2jkl2jkl3Tgk3jgi4Dci4TYk5TQq6TQr6jQp6zUq6zUo5zUn4zYm3zgo3jwv0jQr0zUy81RY/2Vz/1pt9Udg/0ln/0Bi/zpe/TNZ+Ttf8U5ry0xfiDk+UiskQDQmNjkmOTwpQEEvREEuQD8rOkIrPkcqPUQbSlElWmI7ZHBKZnZPZXpRZH5PZIJMYYNGYYZBYIk9Yos9ZY1EZ49Ia5BLbJFMapJJaJBHZY1GZIxFZotIZYpHZIZJYoRHZINIY4JJYn9FYn9FZIBGZYFGY39EYX9BXYA+X4Q/YodCNDosOT0vPz81REE4SUI6TkQ7VEg8V0s7XE88W1A8W1JBXVdLYl5bZ2Zrbm17cHCIcW+UbmuYameWY2GTXFuUWlqWW1ydXF+kaGq0bXC9d3jIfn/RhoTXiojcjorfkI3ckZDSkZHNk5LOk5HQkpDRkY/QkYzOkYzMkozKkYvHkorDkou/koq7jIWxgnulfnOTemV2c15jZltZY1xUYlxQZVlJcldGg1NFollQu2FZyVxZz1lX2mRg3mtm3G9o4ndv+ouE/4mF/4WA/3x39m1n7mFYwzUrvzMkwjkpwDkmvjolvTkkwTglxTonyTopzToq1Dst0jYpzjUn0Dgq0z0u0z0uzjYoyi4h2Tkt2Dgs1zcr1Dgr0DoryTopwTglvjckvTUnvzUqwTctxDovxz0zyT80y0E3y0M3xTsxyUE1zkQ6z0c70Uc90Eg8ykA2xDYozDYl1Dck3jYp5zQt8C8w9Sw0+io3/So7+yg7+ic6+iU7+SQ6+SE4+R83+x02/Rsz/x82/yA2/iQ1+io49zI88Dc96Tk74zs63Dk02zk03Toz3zo04zoz5Tgy6DYy6zUy7DQ07DQ06zU06DYy5Dcx3zcu2TUp1zUo2Tkp2Ton2Tol2jkl2zkk3Tgk3jck4DYl3zUm4TUp4jUn4zYo4jcm4Tcm3Tcn2Tco2z0xzjEo1jg3/2tx/11r/VFn8D1a/0lq/zdb/z1k9zVa7T9g5FZwqUBPXyMlSi8oOjcoMDclMTkkOTwnQD4pPz0mPj4mP0IjP0YcV2Axc35UfYxjdoheaH9TYX1MYYBHYINDYIU/YIk9Y4w+ZY1EZ49Ia5BNa5BNa5NMaZFIaI1HZ4xGZ4xJZotIZohLZIZJZYRJY4JHY4BGY4BGZIJGZYNHZIBFYoBCYodEYopEZY1HMDYoMzktOjszPj42RD85S0I7UEY8U0o7Vk08V049WFFBW1dMYV9gaGdvbG1/b2+Lb22UaWiUYF6PVlaKU1SMVliVW16hYGSra2+5cXTBenvLgYLSh4XYiYfajInajYrXjo3Pjo7MjY3NjovOjYrPi4jPjIbOjIbMjIXJi4XFjYXAjoe7joa1iIGqf3mdfnCKgF9weVlealhWY1xSXV5OXltIalhEfVNDnlVMvVxW0Fpa2Vla4mRl5Wto33Bp5Hdw6Xx17Htz/YR8/4eA/4F79Wthxz0ywjkpwjsovzsmvTslvjolwDklxDkmxjknyzgo1zsu1DYqzjUnzjgp0D0tzz4tyjcnxjAh0TUo0TUo0jQo0DcpzzkqzDsqxzwpxDspwzkswzkswzkuwzksxjkvyDwvyTwyyj4x0kU70kY5zkE3yT0wyj0zzkI1zUA2zD0vzjUl1zUm4jYs6zQw8S4y9Sw0+Co3+io69yY59yY59yY59yY5+SY5+yY6/iU6/yQ4/yI3/SI2+iY1+S059jQ98Dk+5zk63zc23Dk02zk03Toz3zo04zoz5Tgy6DYy6zUy7jQ17jQ17DY16Tc15Dcx3zYv2TUr1zUo2Dgq1jko2Dkm2Dkk2Tgk2jgj3Dcj3Dck2TYl2TYl2jcm2zgn2zgl2Ton1zon1Tkq1jou0DMs6UlL/295/1Zo90Vf9j1d/0Fm/zNb/zhf9z9j501pxVBjfy86Rx0fQDEqMDIlLDcmND0qPUIsQEAoQDwhQz4hSEUiVFwtb31Kj59wlql8gphqaYNUX3tIXX5FXoNAYYZAYos/Zo9BaJBHapJLbJFObJFObJRNapJJaI1HZ4xGZ4xJZ4xJZ4lMZohLZYRJZINIZIFHZIJGZoRIZoRGZoJFY4FBZotGZo5IapJMLDQnMDYqNjkwOzw2QT45RUA6S0Q6T0c8Uko9UUs9U09DWVZPYF9kZ2dzamuAa2yKaWiQYmCPVlaIT1CGT1GMVVmYX2KnZWmyb3K/cnjGfH/QgoXWhofXh4jYiYjWiorUiovMiovLiYrLiYjOh4XQh4TRh4PQiYLPjITNioPGjITAjYa6jYawh4GjfXiWf22Dg1lngFNYbVVRY11RWmJNV19HYlpDeFVCkkxCt1RPz1RW2lNX5V5i5mZn4Wtp5XZv43Rr4HBl9n11/4J5/4d+9GxgyEAywDgowDsovz0nvjwmvjwkwTomxDkmxzgnzDYn1zkt2Dgs0TgqzzkqyTopyDspxzooxzgnzjgp0Dgq0Tgq0DcpzTcoyzgoyTwqyj4tyDwtyDwtyDwvyDwtxzktxjgqxTcrxDYozkA0z0EzzT0yyDkryjctzjwvzDkvyzQp0C8l2TEo5DIu7DIz8y419i03+iw5+is7+y4/+y4/+S8/+jA+/S4+/y89/y49/y49/Sk4+yg39ys39TA68Tc86zg74Tc32TQy3Dk02zk03Toz4To05Tk15jc06DY06zU07jQ18TU27jY26jY15Dcx3zYv2TUr1jYo1Tgp1Dkn1Tgn1Tgl1zgl2Dcj2Dcj2Dcj1Tgl1Dkl0zsm0z0l1D0o0z4o0j0p0jwt0DYs2Ts4/15k/2Fu/09o9Dta/0Jn/jVf/zVe+jBW80xq2lpxlT9MWSYrQioqODMvKzEnLjkrNUEtOkIqOTwhPzwdUkcnX1oye4VRkKNsqb2Kpr6Mi6V1b4taYX9JXoBEX4RBYIg/ZY5CaZJEbJRLbZVOb5RRbpNQb5RObJJJaI1HZ4xGZ4xJaI1KaYtOaIpNZIZKY4VJZINHZINHZoVJZ4dIZ4VHZIRDaI1IaZFKbJRNKjIlLTUoMjcwNzozOzo1QD04RUE4SEQ5Tkg8TEg8TktCVFNPXV5jY2V0ZWd+ZWaFYWCIWVqKUFKFTE+GUlOTW16jZWmyanC8c3jJd3zOf4HUg4XYhYbYhYbWiIfViYnThofKhYbHhITKg4PLg4DPg4DRhYDShYDQjYXSi4TIjITAjIW4i4WrhH+deXaLe2t4gVZgflBTblVQZF5QWmRMVmNJX11EcldCjU9CtFdQzlZY2lNZ5Fxg6GFl5GZn6HFt63lv43Fm9ntz8nJp/nht5V1RxDsrvTYjwDwnwDwnvz0lwT0mxDsoxzooyjkozjYo1jYq2Dgs1DstzToqxjknwjkmxDsoyT4rzD0s00Aw2UEz1T0vzjgpyDUlxzgnyj0sxzopxzsqyTstyTwryDosyDkpxjcpxzUmyDYpzTss0j4y0j4w1T4z1D4wzTYrxy0h0Csl2i0p5zEw7zI29jE6+S87/C8++zE/+TBA9zE+9TE99DA69i459y44+Ss3+Ss3+y86+C469DA68DM67DU55Tc43TU02DQy3Dk03Dk03jkz4To05Tk15jc06DY06zU08TU28jY37zc36zc25Tgy3zYv2TUs1jYq0zcq0Tgo0Tgo0Tgm0zgm1Dck1jck0zgkzzgjzTskzT0jzD4mzT8nzT8pzT8r0Dwu0DUw6kdI/2dw/1Bi/0hl+Tda/0Fq+i9a/zdf8DRV4VFqulVlbTE5RSgqQzc3NTQwMzQvMzkvND0qMjoiMTgXQUMcaGA5hIJSn653qMCGtc6XrMeSkq57dpRgZIVOX4NFXYU/YYlAZ5BEbJVHb5dOcJhRcZZTb5RRb5ROa5FIZ4xGZotFZotIaI1KaYtOaYtOZYdLY4VIZINHZYVGZ4dIaIhHZ4dGZIdDao9JaZNLbZVOJTAiKjIlLzQtMzYvNjcyOjk1Pzw3Qj84SUU8SEU8SUhDUVFRW1tjYGFzYWN8XWCBXF6HV1eJUlOJU1WQXF2gZmiycHPCc3jKen7VfILagITbgYbagoTXgoXWg4XSg4XPg4bJgoXIgYTLgoLMg4DRg3/ThYDUhoHTjYXSi4TIi4O+iYOxh4Gjf3yRdXF/dWZtfVZZelFPbFZLZF9MXWVNWmRJYGBEcFxDh1RDrFxRx1tZ01VY4Vpe5l5i52Bk7Wtr83py63Jn9ndu3VhP5FpP0EQ3wzYlxjsowzonwjslwzwmxT0nyjwozToo0Dgq0zcq0TAm1DMp0TkszTssxTwqwjsowDsowzwpxzsq00Q03ko83Uc50jwuyDQmyDYnyzwsxjkoxjknyDkpyDkoyDkpyjkoyjgpyzgozTcp0Tss1j4x1z8x2kA02kEz1jou0TAm2y8r5DIy7TU39DU8+DM9+TE++DA99jA/8C457i457S857C827C007ywy8Sox8Sox9TI68zQ78jU77DU55DQ24DQ02zYy2zgz3Dk03Dk03jk14jk25jg35jY26DY26zQ28jU58jU58DY36zc25Tg03zYv2DUs0zUp0Tgq0Dkozzkozzko0Dko0Dkm0Tgm0DkkyTkhxzsixz0jxz8lxz8nyEAqyz4tzzsv1zk2+1Rb/15u/0hg/z9h/zph/zdk/TRg+zle6kZhw05giD9GUTEyQDY0QDo6OTU2PjY0OzYwNzopMzwhN0MdUVotgIJQoKdxsMSHrsqNr8ySpMKMka97eJliZ4hPXYFDXIQ+YIg/Z5BEbZZIcJhPcJhRbpVSbZRRbpNNapBHZotFZIlDZYpHZ4xJaIxOaIxOZYdKZIZJY4VIZIdHZolHZ4pGZolFZIlDaZFKapVNbphQIy4gKDAjLDIoLjMsMjQxNTUzOTg0PDs2RkM8REQ8RkdBTlBPV1phXmBvXmB3Wl1+XV+IWlqMV1iQW12aZmascXPAenzPfIDZgITfgYbig4figobfgYPYf4LTgIHRgYPNhIfKg4bJgoXMg4PNhIHQhoPUiIPVi4TUjITPjIPEiYK2iIGqhICZfHiHcG5zbmJidVhUclRKaVdJZWBMYWVMXmRIY2JGbl5EelE9nVtLtFpSxFRS11dY4lda6Vhd72Nk9XFs7m5j9nBn0EM60UE2xDIlxzQk1EMwxzklxjklyDsnyjwozjsp0jkp1Tcr1zcrzi0jzTElzTcpyzwsxj8swT4qvTomuzYjvTQi0EMy4k5A5E5A10EzyzcpyjgpzT4uyDspxzooxzgnxTYlyDcmyjcnyzgozzkq0jos1Dst0jkr0TUo1Tcr2jww3T0x2zcu5zg18Dk79TtA+DlB+DRA9S888S077Cw56i846TE56TI36jM37DQ27jQ18jQ28jQ27jQ37zY77Dg76TY54jQ13TMz3Dcz3js23Dk03Tg04Dg14jk25jg35jY26TU26zQ28jU58zY68DY36zc25Tg03jcx1zYs0DYqzjgqzDkpyzopyzonyzopyzonzDknyzolxDghwjogwjwhwj4lwkAoxT4qyDwtzTgx3js+/11m/1Jm/0ll/jhc/z5o+C1a/T1m5z1a41xto0xUXS0tRjkzQkM+PDg3PjU2QzM0QTQuPDspPEUmRVYqYHM8jZtgrb1/sMqLqsiKpMOIm7mDi6x3eJlkZodOWX0/XIE8X4c+Zo9DbJVHcJhPcJhRbpVSbJNQbZJMapBHZotFZIlEZYpHZ4xJaIxMaIxOZYdKZIdHY4ZGZIdFZ4pGZ4xGZ4tFZYpEapRMa5ZObplRKDAhJy8iKC4kKS4nLjAtMjIwNjcyOTo0PT01P0A4REU/SUtIT1JXVVdkWVtwXF17WViAWVqKXV6UY2WibW21dnfHfoDXgYThiYzriYztiYnphYbigoLaf4DTgoHRg4PNgIPGgITEg4PJg4PLhYLPhoPQiITRioTOh4DDiIC7h4CshH2egHmLdXB3amZlZV5WbFxPa1tLaF1LZV9JYmBJY2FIZmBGbV9EbFA4hFY/pV1Pv2FX0FlV21FR7VJY91xg+Gll5llQ1EQ7zjcu0Tct1zsv1j0v0zwrzjgnzTomzTomzzom0jkp1zcp2TUr2jYszS8kyzMmyzkqyT0sxUAtwUArvj0ovDklwTgmvjEg6VdI30s9wi4gzz0uzD0txTgnyDspyDspxzgnxjcmxzYlyDUlyjQlzDQm0Dcp1zsu2z0x3Dww2Tcs2Tcs4j407EM89UND8Tg98DM68zQ89TM+8C456y057DI96jc95DU64zU35DY36Tk57jo58Dg27jY07zs86zs76Tk55jg34Tg13zc03Dcz3Dcz3Tg03jk14jg45jo66Do76Tk77Dg77jc78zY68zY67zc37Dg35zs33zo01TgvzzcqyTcoxzgoxjkoxjsoxjopxjsoxzooxjsowDggwj4lvTshtTUcuzokyUQxzT8zyTAr/15l/1Zm/0li/jtb+DJW9TFZ+jdh80Nn5VpvqkZObTMySzIrQEA2PkM8Pjk2Pi4vSjAzSjIuQDkmQkknWG49fZtfm7h2p8SBqsiInbyAl7Z9k7F7gZ9tZIRSVndAWHo9XYA8YYc+aI5DbZNGbJRLa5NMaZJOapFOaI1IZYpEYYZBYYZBZIlGZotIZopKZIhIZ4tLZ4tLZ4tLZYpHZYpFZIxFao9Ja5NKb5tQb51ScqBVKS8hKS8hKC4kKS4nLS8qMDIvNDUwNzgyOz0yPT80QUQ7R0lETFBTU1ZfV1hqWVt0W1p8XVyGYmKUamukdHS6fX/MhobeiovojIzsi4vtiIjohYThgIDWf33QgH/NgYHJhIXGg4fGhofIiYjMiYjOiofOi4XLi4XFiIC7h3+whHyhgHiPe3N+dGtsamNdZF5SZF9MZF9LZF5IZV1IaF1HaF5FaV9GbV9EdF9EflpAkVhEq1lLx1ZO3FJQ9VJX/lhc7lVQ40xF2D421Tcu2TYt2zku2jos1jko0Dcl0Dkm0Dkm0Tgm1Tgp2TUp3DQr3DUszTElyDQmxjkoxT4rw0AswUArvj0ovTglwTgmyjsr41FC3Eg6xzUmyToqxjopwTUkyj0ryTwqyjsqyTopyzopyzgozTcozzYo0jYp1Tcr2Dgs1jQp1DAm2DEo3jcu5js090NE8Tg97TA37TA37y867S856TE76TU+4zY62zI12DIy3zo47kVC90pG90VB8T875zo25Tk35Dg24Tg14Dg14Dg14Dg14Dg13zc04Dg15Tk55zk66Tk76Tk76zg77jc78DY57zU47Tc26Dk24zo13Dsz0jguyjYqxjgqwzoowjoqwDsowDsqvzwowDsqwDsovDokwEAnuDojsjYeuDsnvzssyDkx1z09/11m/1Bj/kBa+ThX9TdZ9Dtd8z9k40llqj9Jgz8+XTsyRTsvOD4wNz8yRTw3UT46TjAuUTkvVks1YmpDdo5ajLBwnMF7oMV/l7p6mbh/mLaAjKp4co5eV3REU3E9XHtAXn49YoY+aI5DbJJFa5NKaZNLaJFNaJFNZotGY4hCYYZBYodCZYpHZ4xJZ4tLZopKaIxMaY5LaI1KZY1HZIxFZo5FaZFIbJZMb5tQb51ScZ9ULTEiLDAiLC8mLC8oLS8qLzEsMjUuMzYtODwuOj4wP0M1RUg/S01KUVJWVVVhVVZoXFl0Xl19ZWSMbm6geXm3g4PLi4zekJDqj47sjo3rionmhITcgH7RfnvKf33Gf4DDhYbGhojFiorIi4vJi4nIi4fEiYS+ioO3iH+shXugf3WOem9/dGltbmVgaF5UYlxMXWBLXWFKY15IZ1xIa1pGbVtFblxGb15Ed2JHeFk9hVM6olVDxldM4FVQ905R/U9R4j483D032zgx3TYu3zcu3zcs3Tcr2DYn0zYl0Tkk0Tgm0zgm1zcp2zUp3jMr3DUsyjQmxDYowDgowD0rwUAtwUAtvzwqwDgowjQm20k82kY600E0zD0vwzcowjoqvjckxTonxTonxzooyDkoyjkoyjcnyzUmzTQm1Tks1DYq1jQp1jIo2jMq3jYt4zsy6Ds17zs87TQ56TA27DE47TQ87DQ86Dc/5zxC2zc44EBA7E5L91hU/VpV+FFL7kM85Dcx4Dcy4Dcy4Dcy3zgy4Dkz4To04jo35Ds44Tc35Dg45Tk55zk66Tk86Tk86zg87Dg77jY47TU36TU25jg34Tk22DkzzzgvxjYrwjgrvjspvTsruj0puTwquTwouTwquTwotzoku0EqsjkkrzYhtjsrszEkwzQu609S/1pm/0pd9TtT7zdT8UBc70hk5klkzU5fgTc4ZD4zUT8xREEwNj0rNDgnPjYrSzkvRS0hUj0qZV5Bf4hdkapzlbx7lcB5lcB5kbN3m7eEmLSDf5ptXHVLR2I1TWk4W3hAX30/Y4Q/aIxCa5FEapJJaJJKZZBJZo9LY4hDY4dBY4ZCZIdDZ4xJaY5Lao5Oao5OaI9MaZBNaI9MZo9JZY9HZ5FHa5VJbZlMcqFTc6RVdaZXMTMlMDQlLzInLzIpLzEsMDItMTQrMjUqODwtOj4tPkIxQ0c4SEtCTU9MUVJWU1NdWFZkW1luYmJ+bW2Td3ergoLCi4vVkI7hlJHqkJDojovih4XYgn/Mf3zDf3y/f3+9goK+hYa/iInCionCi4i9iIS2hX+tg32jhHqcf3WNeG19cWZsbWJga15VaVtOYltJXWFKXWFKY15IZ1xIbVpJcVpIclxHdV1Fclg/d1I4iVM7qllEzVxO4lNN70VG8T5B2jEu2TQu3jUu4TYu4TUr4DYp3TUo2Tgm0zYj0Tkk0Tgm0Tgm1zcp2TUp3jMr2TcsyDYnvTgnuzgmuzonvT4rwD8swTwrxDgpxjQn6FRI0T0xyzksz0EzvTQkvzwqvzwqwDkmxDkmxTkoxzooyDkpyTgnyzUnzTQm0jYq0zMn1DEo2zQr4jky5z826j846j035zU16TU47TY67TY76DM44zI44TY84TxA8VZU+2Ng/21o/2hj8lVQ40E83jcx3TQv3jcx3TYw3jcx3jcx3zgy4Tgz4zo35jo44zc35Tc45jg55zk66Tk86Tk86jc76zY77jU67DU36Tc35Tk33js21jw0zDkvwjgrvDgpuToptjsptD0pszwosTwoszwoszwosTomtD8rrDkmqzglsjosqysiwjQy+2Bm/lRh+Edb7zxS6z1W50he4U9i0U5es1JZc0c+V0c3SkMwRUQvQUQvOz8oOTciOzMePjIaT0Ypa2tFiJRmlax0kbR0jLdyj7l3nLqEnriJkKd9a4FaSmA6QFYvTGM3V3I9X3tAYoM+Z4tBapBDaJJGZZFGYpBIY45HYYZBY4dBZIdDZolFaI1Ka5BNbZFRa5JRaZBNaZBNaJFLZ5FJZ5FHaZNHbZhJb5tMdaRWdaZXd6hZNzgoNTgnNTcqNTYuNTYwNTYwNTcsNjgqOz4rPD8qP0MsREc0SEo8TE1FT09NUVFRVlVTWVlbYGBsaGiAdHSafn6wh4XGjIrTlJHgkpHhkI3aiYfQg4DDgHy5f3y1f3yzf3+1gYG3hIS4iIa3h4SvhYGmgXqbf3ePfXSHeW96cmZqbV9calxTaFpNalpKZltJYV9KYV9KZF1KaFtIbFtJcVxJdVxIeltHfFY/hVM8mlM/tFdFzVNG2kc/4jk24jMw3DAs3TQt4jUv4jUu4TMq3zMn3DYo2zoo0jcj0Doizzok0Dkk1Dkn1zcn2zUp1jgswzoouDkmtDcjtTgkuzwpwT4sxTwsxjcpzzgt9FxR1j4zyDQozUEyuDMitjklvD8rvzopwzooxDsrxjopyTosyzkqzjcszzcqzzIp0jEn1DEq3TYu5Tw36j846Ds35Dcz5zg17Ts77zs86TY54jI14zY450NE601M/3l1/3Fs8WBb3UpD0Dcx0DMs2zgz50A63jkz3Tkw3zgw3jcv4Dcy4jYy4zc15Tc25Tc45jY45zc66Dg76Dg76Dg76Dc96TY67jc76zc46Dg45Ds43jw31Tw0yjwywDouuDkqtDsqsDsprzwprDwoqzwoqzsnqjsnqjsnqz4qpDknpjgnqjgtqi8oykBA/2dv9E5c80ha7URX5Eda2E5dyFNbtlNWmVhSY049Tk04SkgzSEYvRkQrP0IlPUQjPkgjS1YuXGc8doJSiphlj6Rsjaluj7Jyl7l9nbeHkaZ9c4diUGRBPk8vQVIwTWI5Vmw7X3tBY4I/aYtBapBDZ5FFZZFGYY9HYo1GYYZBZIdDZolFaItHaY5La5BNa5JRbZRTapFOapNPapNNaZNLaJRHapZHbppLb55OdaZXc6ZXdKdYPD0rPD0tPDwwOz0yOzw0Ozw0Oz0wOz4tPkEsQEQrQkYtRkoxSUw5TU9BUFBIUlJIV1hKWlpOXl5cZmZwbm6GeXigg4C1hoTDj4zRjo3TjIvPiIbFg4C5fHqsenemeXaleniqenquf32ugX6pgX2gfnqVfHSJeXGAdGpycGZlbWBaalxRalpLbFtLbFtJa1xJaF1LZl5LaF1Lal1MbV1NcV5NeF1MgFtJkWFNmVZFpk8+tUo6xUE1zjcu1zAo3TAp4DUu4TYu4jUu4TMq4DIn3TMk3DYm2Ton0DghzTsizDwkzTsk0Ton1Dkn2DYp0joswD0pszolrjUgsDYhuTonwj0syDosyjYq2D4091pR40k/zTktzEAxtzYjqzQetD0nuzonvzcnwDcnwDcnxDYoyTcqyzcrzzcs2Twz2zoy3Toz4zw25z456T055Tg04TQw5zo26js46jo65jg36j4+9U9P/2Nj/3Bt+Whj4lVOxzw1vzAqyTQu1js23z064Ds34Ds13zsy4Dkx4Dcw4jYy4zYy5DY15TU15zc55zc56Dg76Dg76Dg76Dg75zY85zc67Dg76jg45zk44zs43D030z81yTwyvzsuszgorzoorDwoqjsnqDsmpjwmpTslpDsmoz0nnzomnzoonzkqoTUptT442lRV+mRt7Uta7kla6Elb201Zx1JYtFZUn1lRiGFQT0g1Rk43S0kyRkAoOzYZNDgVPU4iS2c2aotUdpVcg5piiJtjiptkj6Jqk6xyl7B5g5Vrbn1cUF9APEsuOEcqQVAxT186V2o8YntCZYJCaYpDapBDZ5FFY5FGYJBGYI5GYYlDZolFao1Ja45Kao9Ma5BNapFQbJNQa5RQbJVPbJZOapZLapZJbZlKcZ5NcqFQeqtaeKtceKtcQ0IwQUIyQkM1QkI4QkI6QkI4QUM1QEMwQ0cwREgtR0otSk0yTU83T1E8U1FEVVNEW1tDWVtDXF1PYWFfaGd1cXGNenmjfn6yhIO/hYPChYTAhIG4fXusd3Sfc26Wb22Ub22ccW+gdHGedXOadXKPc3CDcWt3b2ltbGJgamBXalxRalpLbVxKb1xLb11JcVxLcFpMbltNbV1Oa15NbGFPcWBOel9OhVtLnmBRpFBFrUI4tzsxxDYszDIo1DIn3DQp4Dgv4TYu4TQt4DQq4DQo3TYm2Dcl0zgizjkhyj0iyT0kyT0kzTwn0Dsn1Dgpzzwsv0AtsDsnqTQgrDMgtzgnwzstyjovzjUt1zgy7U5I8VRN1kI4y0E0vT4tpjEdsTwovD0svzorvzcpwDYpxDYqyDgtzzsx1Dsz4UQ940E840A75T065j066Dw65zk45Tg05jk15jkz5Tg06Dw69EpK/1xb/2Ri9mJeyz05wDcxvDMrwzgx0kI63UY/3D051zQv4Ds13zsy4Toy4Tgx4zcz5Tg05jY26Tc36TY56TY56jc76jc76Dc96Dc95jc85zc66zc66Tc35Tc24Ds32j040D01xjwxvTstsTgnrTonqTonpjsnpDsmozoloDoknzsknj0qkzYkmTwqmTkpmTMnwVBK7Gps7Vtl609c6Exa3UlXzUtTt1NRpFxQkGNQfmpSSU02Q0s0SEIsRTkhQDcYREkhVHA9Z5NWfbJugbNugqVlfJFWgY5YjZdiiJZhe4tcV2VBR1Q4OUYsNkMpOEUrPUouSlg1V2g8ZHtFZoNDaotEa5FGaJJGY5FGYJBGYI5FY4tFaYxIbZBMbZBMa5BNao9MaZBNapFOb5hUcJlTb5pSbppPb5tOb55Oc6JRd6ZVfK1ceaxdeKtcR0QzR0Q1R0U4SEY6SEY6SEY6Rkc5RUY0RkgyR0kxS0sxTk40UFA4U1I+VlNEV1RBW1o+W1o+WllFXltSZGJnbWp7dnOQfHidfnumgH2qhH6qgn2mfHaadG+NbmqFamaBaGSFZ2aIa2iHbGqCa2h5aWZvaWNlaGFbZl1UZ1tNZ1pJa1xJbl1JcF9LcV9LcF5Kb1xNb1xOb1xNcF1OdV5OfF1LhltLkVdJn1ZHokY5qjovtzcsyDgv0Tct2DYr3TYt3TYt3TUs3jMp3zQq3jYp3Tcp1zgl0TYizjkjzDwkyjwmyjwmzTwn0Dop0jkpzj0svkEtrzwnqDMfqjMftjknwDwtyDwvyzctzDIq30I79VtT3Uk/0EQ3yEY2qzIftz4ryUU2zEI1yT8yyj4xzT8z1EE320Q74EY+4T864j054Tk24Dc04TUz4jY05Tk35Tw54j843j012zk03j856E1I6FFK0EA4tikiti0lvjUtyD40z0A41T042Tw34Tw65j474Tk24To04Tgz5Dg05Dg05jk16Dk26Tk56Tc36jg46Dg66Dg66Dg75zk75jg65Tc56DU45TU14Tc33Tk31j03zD40wTswtzwtrTooqDsnpTwnojsooDsnnjsmnTolmjsnl0AsijUhlz4uljkqli8mzVxY9nh731hf5Fhh2VFbyEtRtkxOqFVPm2BSjmhTgG9VT1Y1P0ooPDwaQj4ZVFIpanZEgqFlk8J+h7x0hbdwe51ga4JKc39PgYhcdHxTWGI9O0QnMjwjND0oPEUwPEUwOUMqQ1EwVWY8ZXxIZ4NGa4xHbJJHaJJGZZFEYpBHYY9GZYxJao9Mb5JObpNOa5BLZ49JZ49JaJJKcpxUcZ1Scp5Rb55OcJ9PcqFQd6ZVeapZdaVZcqVacqJYUUs7UUs7UUs9UUs9UUs9UUs9UUs9UUs7VE88VE88VVA9VlE+WFNAWVNDWlREW1VFYVxIYFtHX1lLYVpQZV1baWNnb2d0c2p7d26DeXCFfHOIfXSHeXCBcmp5amJvZV1oYl9oYF9lXl1iXVtcXVlYXllVXlpRYVtPZF1NZV1KZ1xIaFxGaV1Ha1xFbFxFal5GaWNNcWZUcFlJc08/ilZJnFxQo1lMqVpLpU49pEUzpjsrsDgowDgszzgv2TQw2zIt3TYu3TYt3jcu3jcu2zcr2Tcq1zcp1Dco1Dgp0jkp0Top0Top0Top0Tkr0jkrzTssujsqtT0srjknpjEfqjIhtToqwDwtwjgryDUrzDUs0zsw2kM43Eo91Eg5wj0stjEg3FBD2EpA00U71EQ72UY+3kdA3UM73z043zYz5jg36js46To35Tg04Dcy4Dkz3D0310c+zUM4xDovuzMntzEluTUovjwuwz8ywDouxz0y0j832kA44D045jo46jg47Dg55Tc45Dc55Dg45Dg45Dg25Dg05Dg05Dg04DQw4TUx4jYy5Dg05Tk35Tk35Tk55jg56Ts85jo63zk52zw51UA6zEI4wEA1tT8xqDopojsonzwnmjsnlzsmlTkklDgjkDklj0IuiTwqhS8ikC8muk1I4m5u5GxuzFVZvEtNtE1OqlFNoVROm1hPll5RlWFTiWlQVlksOUwUNkUMUWAle41Pma9unrt4nL14kbRwfp5faIBMWm1AV2VBVF1ASFA4PkMvOT4qPkMvPEAxOD8vOkMyOEQuP04xUmQ+XHRAZoJFb5BLbZNIaZJGaJJGZ5JKZ5BKaZBPa5JRbpNQbJROa5NMapRKa5VJbJhJcJ1Mbp1McKBMcaNOc6VQdaZUeKlXeqped6ZibJpaYo5PVk8/Vk8/Vk8/Vk8/Vk8/Vk8/Vk8/Vk8/V1BAV1BAWFFBWVJCW1REXFVFXVZGXVZGY1xKYltJYVpKYlpPZFtUaF5cbGJjb2RocGVrcmdtdGlvdGlvcWZsbGFlZltfYFhWXVpTWVlPV1dNV1VJV1NIWFRIW1VHXFZGYVpIY1tIY1tGZltFaF1HaV9Gal5GaGFHYmJKbmdUdlxLflNDmVdLqlhNrlJHtlFFrUc4rEMwqzwpsTkovTksyTkw1Dcy1zQv2zcu2zct2zct2jgt2jgt2Dgs1zcr1DYq1Tcr1Tcr1Dgr1Dgr0jkr0jkr0jkrzTssvTsrtT0srTgmpTIfpjMgrzoouT4svTsrxTksxTUqyTUp0Tov2kY63k9B3VFA3E5A20c910A50js00js01D022D042zk03DQx5zc36zc47TY46jY15jc04jk04Tw220I6yUE1vkAytzkrsDUmrjUksTgntz4tvkAxxEAxzEAz1j823D034zo16Tc17jY27zc56TY65jg65jg65Tk55Tk34zo14zoz4zoz4Tgx4jky4zoz4zoz5Ds24zo34zo34jg44zk64Do63jw62D860EE7xD82tz0wrDsrojsqnTwpmT0olzwnkzsnkTomkTklizolfzgkfjoniTUqmz01vVFO1WVkz15gt01Nq01Lo1NMnFhPl1tQll1SlV9Tl15Ti2VOX14uUmYnXXIxeY9Ol7Bso757l7JvhqBfaYFHX3ZAU2Y5SVk1Q1A2P0g1OD4wNTkrOTstP0IxPT8yOD4wO0EzN0MvP00zT2Q9XXVDZoRGcJFMbpRJbJJHapNHaZNLaJFLa5JRbJNUbZRRbJROapRKapRIapZHbJlIbZ1JbZ1HbqBJcaNOdadSd6hWdqpYeKheapZXX4tQVoJHW1REW1REW1REW1REW1REW1REW1REW1REWlNDWlNDW1REXFVFXVZGX1hIX1hIYFlHZF1KY11HY1xJY1xMZFxPZVxTZl1YZ11baF5caV9eamBfamBeaF5cZFtWYFdSXVZOWVVMVlRIU1FFUU9CUU1BUk9AVFFCWFJCXFdEXldEX1hFYlpFZV1IZ19Ial9JaGJKYmFMbWZTeF5PhlhLoFxTr1ZQsUpDtkU9t0E3uD4xtjssuDkqvDgrwjosyTsvzjou1jgs2Tcq2jgr2jgr2jgr2Dgq1zcp1Dco1Tgp1Dgp1Dgp1Dgp0jkp0jkp0jkpzTssvT4ttD8urDkmoTIeoTIeqTklsz4quT4swz4vxDgrwjMlxzMnzjwv1kc520494E5B2Dkz2DQy0jMv0zQw2To24Dw65T086Do77Dg77TU36zM16TI05zU15Tk34Tw42D83vjgsszkqsDYnrDQkrTUksDgntTwruz0uyEQ1zUM21UE13D414To05TYz7DY17zc56jY56TY56TY55zc35jk15Toz5Toz4zsy4zsy4jsz4zw04Tw24Ds33zo23jk33Tk43Dg32z082kA+0kE8yD83uTsvrTcrojcnoDspmzwolzwpkzwokTomjzoljjckiDomejYheDUihzksnkY8tlNOvlZTtlBOqUpGok1InFNKmFpPl19SlWFUlWFUlV9ViWVPcnFFeo1Vk6Zuo7h/qr+GnLR6eZBYWG85P1IkQFIoQVEtPUwvOEQuND0sMzktNTgtOTstP0IxPD4xNz0vOkAyN0MvPkwyT2Q9XnZEaIZIcpNOcJZLbpRJbJVJbJZOapNNbZRRbpVSb5dRbZVOa5VLapRIa5dIbZpJbZ1JbZ1JcKBMdKNSeKlXeKlYdKVWcJ9XXYlKVX5ETnc9YFlJYFlJYFlJYFlJYFlJYFlJYFlJYFlJXldHXldHX1hIYFlJYVpKYltLYltLY1xKZF5IZF5GZV9JZV5LZV5MZV1QZFxRZFtSZ15VZ15VZl1UZl1UZV1SZFxRY1tOYVtNXFhMWFZJVFJFUE4/T0w9T0w9UU49Uk8+VVI/WFNAWlVBXVhEYFtHYl1HZmBKZmFLY2JOa2RSdF1Ph1tQp2JbtVpVtkZEuTw4wTw3xTozxDowwjgtvTgpvDsovT4rxD8s0Tkr2Dgq2Tcq2Tkr2Dgq1jkq1Tgp1Dgp1Dgp1Dgp1Dgp0jkp0jkp0jkp0jkpzTwrvj8utD8uqjomoTQfnDMdojgirD4ntD8ruz4svzorwjYnxTYoyTcqzDotzD0t0jov3TU03jIy2jAw2zMy3jk35Dw76T096zs96zc66jM36TA15jIz5TU34Tg12TUzzjcwtjQnrjYmrDcmqzYlqzglrDkmsTkoszopw0ExyUEz00E02kA24Ds15Dg06jY17Tc27DU36jY36jY36Tc15zgz5jkz5Toy4zsy4Dkw3jox3js03js23Ts22js32To31zk41Ts51EA80kM9x0E4ujwwrDYqozUmnTYlmjsnlzwpkzwokDsmjTslizkkijgjhTgkgD0qdjUhfzYnl0U5qU9Hqk1GpktGpVBJm1FIl1VJk1tOkl5QkmFTlWFUlmBWi2ZTiIZfmKh3rb2OpriIkKF0coVXTmA2LkAYLD0ZMkEiOEYsOkYwOUIxNz0vOTwxOz0yOTosPkEwOz0wNjwuOkAyNkIuPUsxTmM8YHhGaYdJc5RPcphNcJZLb5hMbphQbZdPcJhScJhScJhRbpZNa5VJa5ZHbJhJbptKbp1Mb55Nc6JReKdXeqtadqdYbJxQZJNLWoRFUntBTXY8YltLYltLYltLYltLYltLYltLYltLYltLYVpKYltLYltLY1xMY1xMZF1NZV5OZV5MZF5GZV9HZmBIZ2FLaGFOZ2BNZl9NZl9PaWJSaGFRZ2BOZ2BOZl9MZl9MZ2FLZmFNYV5NXltMWFVGU1A/T0w7Tks6TEs5TUw6T046UE87UlE9VVRAWFdDWllEXVxHXl1JYmFPZl9PbFZIhVtPqmphvWRev01Mx0FCzzs70zk30TgzyzYvwTkruTwotEIqu0MqzDso1Tgn2Dgo1jko1jko1jko1Tgn1Dkn1Dkn0jkn0jkn0jkn0jkn0Ton0TonyzwrwT8vtD8uqjsooDcimTUdmTceojwlrEIssTwouDspwTkrxzktyzkszTkt0Dww2Dsy6Dg66zQ55jM34jQ24TQ23zU24DM14TM16DU56DM45zQ45jY44zk62zc1zzEuwDAotDYorTooqzooqzooqTomqTomrDkmrTgmtzoowDwtzT8z10A33z424zw26Dk26zc27Tc27Tc27Tc26zg06jg06Doz5zoz5Dwz3jox3jsy3Tw02z432T451z451z070z08zkA8yUI8xUI6uT0zrDgrozUonDYnmjspljsokTwojjwnjDsmiDokhjgkhzYjgzgjgkEtcjMheDMjk0c5olJHoE5DnE5EoFZLllZKklhKjlpMjVxOj11Sk19Ul2FXjmdWjYlmlqV6m6qBf49oXGxIRFMyMkEkJDIZLDojLjsnMj0tNz8wOkA0Oz4zOjwxOTktODkrPUAvOz0wNTstOT8xNUEtPUsxTWI7YHhGaohKdJVQc5lOcphNcJlNb5lRbphQcJpScZtRcJpQbphMbZdLbZhJb5tMcZ1OcaBQdKNTeKdXe6pceadccJ5VYpJIWIdBXYdIVX5EUHk/ZF1NZF1NZF1NZF1NZF1NZF1NZF1NZF1NZF1NZF1NZF1NZV5OZV5OZl9PZl9PZl9NZmBKZ2FJaGJKaGJMaWNNaWNNaGFOaGFOaGFOaGJMZ2FLZmBIZmBIZ2FHaGJIaGJKZWBMYF1KW1hFVlNAUU47TUo5SUg2SEc1S0o2Skw3S004TE88T1I/UVRBUlVCU1ZDWFlJXVdJYlBCelhMoGdetWVew1VU1lFS2UBC3To72zc21Dcwxzsuuz4qsEQos0EmyTsn0zgm1Dkn1Too1Too1Too1Dkn0jkn0jkn0jkn0jkn0Ton0Ton0Ton0TonyzwrwD4usz4tqjsooDoklzcelDYcmTshpkIqsUMsuD8svzsswjYpxTMmyzQp0jsw3z046DU57TQ66zY76Do85Ts84zs74Ts74Do63zU44DY34jk84Dw92z080Dg1wzIttS8mrzopqj0pqj0pqD0pqD0ppjwmpzolqDgkrTUktzgnxDwuzzwy1z013Tw04zw26Ds36zg07Tc07Tc06zgz6jkz5zoz5jsz4zwz4T413kA320E52UI71kE71EA80UA9zEE8wUA6ukA1sz0zqTktoDYomjYmljknlTwqkDsnjTwnijwohzomhDkkgzgjgzYkfzYjezomcTIgfDkolE8/o1lMnFJFlU9DmFZIlFpMkFtNjFtNjFtNjVtQkl5TmF9WjmdWfXdXeIRecHxYU2FAOUYqLjwjLzwoMD0sMT0vMjwxNT0yOT81PkE4P0E2OzsvNzgqNzgoPD8uOjwvNTstOD4wNEAsPEowTGE6YHhGaohKdJVQc5lOcphNcZpOcJpSb5lRcZtRcZtPcZtPb5pLbplKb5pLcp5PdaFSd6ZWeKdZeqlbd6VacZ9WZpRMW4pCVoNAX4hMV4BGUntBZV5OZV5OZV5OZV5OZV5OZV5OZV5OZV5OZV5OZV5OZl9PZl9PZl9PZ2BQZ2BQZ2BOaWJPaWNNaGJMaGFOaGFOaGFOaGFOaGFOZ2FLZ2FLZ2FLZmBIZmBGZ2JFZ2JFZ2FHZmBKY15KYFtHXFdDVVM+UE06S0o2SUg0Rkc1Rkk2Rkk2R0s6SEw7SU08R048Sk4/TlBCVVFFWE9AaFJEgVpLllZKr1JL01lW20lJ4EBA3jg42TcyzjsxwUAtsUInsT4jyDsn0Dcl0Tgm0jkn0zoo0zoo0jkn0Ton0Ton0Ton0Ton0Ton0Ton0Dsn0Dsnyzwrvz0vtDwuqzwpoz0nlzkgjzUbkzkeoEAnrUMttkEvvD0swDYpwi8lxi8m0DYu3To15zQ47TU97DtB6UBD5EFC30FA20A+2T89zDIyzzUz0jo50Dw6xzw3vTgxtDUsqzUppzwqpD0qpT4rpEAppEAppD4opTwnpzolqjcksDcmujgqwjgryzgu0zoy2zw24z446Dk06jkz6jkz6Doz5zoz5jsx4zwz4D4z4EI33EI410M50kI5zkE6yD85xD05vz44sDsypzsuoTcqnDYolzcnlDknkDsnjDsoiTwoiD0ohDsogzongDklfzgkfzYlfTYkdjMidzYkhUIyl1REnFhLlFBDkFBElFlLklpNj1tNj1tOkFxPklxSlVxTl1xWjWNVa2JDVmA7SVMxPEcpNEAoMj4qND8xNT80ND41NkA4PEM7QUc9REc8QkQ2PT4uOzooNzgoPD8uOTsuNDosNz0vNEAsO0kvTGE6YHhGaYdJdJVQc5lOcphNcZpOcZtTcJpQcJxPcJxNcJxNbptKbptKcJxNdKBReKRXfqpdfqpfeKZdb51VZJFMXIlEW4hDXIlIYIlNWYBJUnlCZ2BQZ2BQZ2BQZ2BQZ2BQZ2BQZ2BQZ2BQZl9PZl9PZl9PZl9PZ2BQZ2BQZ2BQZ2BQa2RUamNTaWJSZ2BOZl9NZl9NZl9NZl9MZ2BNZ2FLZ2FLZ2FJZ2FHZ2FHZ2FHZmBGZ2FJZmBKZF5IYFtFXFdDVVM+T046Skw3RUY0REc0Q0c2Qkk3Qkk5QUo5Qks6Q0o6SEw+UFFDUlBBWE07ZEs3c0Q0lUk8wVhS11FO3kRC3jo52zc11Dszyj4vuD4ptDchyDomzzgl0Dko0Dsn0jsq0Two0Top0Dsn0Top0Dsn0Top0Dsn0Dop0Dsn0DopyzwrvzsutTsurTwqpD4omDohjjQakjgenkAmoTgirzwpvj8uxjwvyjctzzYu2Ds04j486z5A7j9E6UNF4kRD1UA8yTo0vzQvuDErtzAqujUwvTk0ujs0sDkxqDgtozksoDornj0qnj8roD8sn0AqoEAqoEAqoj8qpD4oqDsnrToosjcotzUnvzUqyDow0z4330I75D015zw05zw05T005D004j404EA03UE120M41kM50UM5ykE3wz43vDs1tjkzrzoxojctmDcnkjUmkjclkTopjjspiTsnhDkmhj0qhD0pgT0ofzsofTonezglezckejUldzIifjkpjEc4lVJCklBCiks8j1FEmV9RkFhLj1pMklxQlVxRll1UlltTlllUil5RYVg5RU0mNT8cN0IkPUcvOkYyMz4wLTcsLzkwNT82QEY8RUs/R0k7QUQxPj0pOzomNjclOz4tOTsuNDosNz0vNEAsO0kvS2A5X3dFaYdJc5RPc5lOcphNcZpOcZtTcJpQcJxNcJ1Mb5xLbptKbptKcZ1OdqJVeqZbgq5jf6pidqRcaJVQWodEVoNAXIlGZY9PY4pRWYBJUnlCaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRZ2BQZ2BQZ2BQZ2BQZ2BQZ2BQZ2BQZ19SaGBVaF9WaF9WaGBVaGBVaGBTaGBTaGFRaGFPaGFOaGFOaGFOaGJMaGJMaGJMaGJMZ19IZV9HZV9JY15IYVxIWlhDUlE9S004SEk3REc0QEQzPUQ0PkU1Pkc2PkY3PUU2RUw8SEw7QUYySkk0W1E4YUUvgUo2vWpc3Gde4FVQ4kdF40E+30A61T41yT0wxj0txjUkyjQjzDYnyjclzTcozDkn0Dor0D0r0Tsszzwq0Tss0Tsq0Tss0Tsq0TsszD0tujImtjgssDwtpToomjcikTUckzcenDkirEIssTwquDYowDMpyjYs1Tw04UQ950hE50NE5kZI20NCyTo2ujUutDgurjgupjQpqTktpzgtozksnjgqmjgrljorkTsqkTsqlj0rlj4qmT4rmEAqmj8qm0ArnUEsoEAqoDsnpDknqDcnrjYmtTcpvTktxDsxyzsy2j003j0z4D814kE34EI320E12EAz1EA010g60EY5xkA1uzswsDUtqTIqpDEqnjMpmTktkjsqkDorjDkniDkohzoohDsogzwqfjonfDkmejklejknejknejkndzYkdzQkdy0gikAzl09Bk04/jkw+kVJDk1VIjVJEl1tQl1tRkFRMkFRMl1pVlFdSk1ZRk2hYXFMySFAnQUsmQEspPkgtNUErMTwrMz4uMTwuRVBCWF5QVVxKTE86Q0cuQEAmPDwkOTooPD8uOjwvNz0vOT8xMj4qOUctTmM8YnpIaohKc5RPcZdMcJZLcJlNcJpScJpQcJ1Mb59Lb59Lb55NcJ9Oc6JSeqZZfqpfgq1ld6JbaZRPX4lHXIZEYIpKZI5OZ5FSY4pTWoFMU3pFaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGBTaWBZaWBbaWBbaWBZaWBZaWBXaWFWaWFUaWJSaWJQaWJSaWJQaWJQaWJQaWJQaWJPaGBLZ19IZmBKZV9JY15KXllFVVI/T046SUo4RUg1QUU0PkU1PkU1Pkc2PkY3PUY1P0g3PUYzPUcvRkwyTUkuUz8mfVA5u3JhyWNV3l9Y6VVR5UdE30A830A82D85zTkvzTkrzTwrzjwtzj0szTsszDsqzTkrzToqzjoszjsrzjoszToqzzkrzzkqzzkrzDotyT81xEE3vEI1rj0tnTYjlTIdlTIbmzIdpTQisTYmwTsv0EI43UY95EpC6EtE6EtG3UJA2kRDzUI9uzsyrzktqT0woz8vnT0tnUAvmj4vlj8ukz0ujT4tij8shEAthj8rjTwpkTsqkTwokj0pkz4qlD8rlj8rlz8rnUAunz4tojsqpjgpqTgqsTgttDotvDotyTsxzzsx0j401UE11UM21EU30kQ4zkQ3x0E1wkAyuT0xrzktpzcsoTUrnTUsmTcskTssizwriTwqiDsphjsogzopgT0qgD0qfDsneTooeTooeDkneDkodjkndDcldjQkfTMmkEQ3l09BkUw9jEo8jlBBkVNGj1FGklJJl1dOlVROlldQm1xXk1ZRjVRNiWJRXVczWGM4Xmk/WmZCR1U0NkMnNEAoPEg0TFhEV2NPXWZRVFxFSE40QUUqPUAjOzshODolOz4tOTsuNz0vOT8xMj4qOkguTmM8YnpIa4lLdJVQcphNcZdMcJlNcJpSb5tOcJ9Ob59Jbp5Kbp1McaBQdaRWfKhdfqlhe6Zfb5pVYYtJXIZEX4lJY41NZI5OYoxNYolSWYBLUnlEaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGBVaWBbaV9daV9daWBbaWBZaWBXaWFWaWFUaWFUaWJSaWFUaWJSaWJSaWJSaWFUaWJSamJPaWFMaGBLZ2FLZWBMYVxIWVZDU1I+S0w6R0o3Q0Y1QEQzP0Y2P0Y2PkU1PEU0O0czNUErPkgwR0syRD4kVUAlhVtDtXJfs1ZH2GNZ7mVf61NQ5UdG6UdF5kRC2Ds2yzcryDkpyTosyToqyDkrxzgoyDYpxzUmyjgryjgpyjgryjgpyzcryzcpyzcryjctwTIqvjUvtjYtrDMooTAgnS8enzEgpjMhu0Axx0M31Ec94EtE5k1H50pF5UZC3kM/1kI+zkM+wUA6sTsxozwtnkEwmkUxlkUyk0UxkEMxjkMwiEEvhEEuf0EsfEIufkArhDsqiDkoiTopiTopijwoiz0pjTwpjzwqlUAslj0rmDsqmzoqnjgpozkrpjotqzosuDouvDotwDwwwj4yxEAzxEAzw0EzwUIztTorrzkrqjkrozcqnTcrmTcsljgskjouizwtiDwshTwrgzopgjspfzoqfjsqfj0rfDspejsqeTopdzoodTcocjcncTYmdDUmhjwxk0Y8lU1BjUk8iEg8jE5BkVNIkVFHkU5GmFNMl1ROl1ZQmVxXkVpTjFpTjWxZgH5YfYpcfotfaXhPSlg0NUUhO0orTFs+Y3FXYm9VW2VMTVY7Q0ktP0QmPUAhOj0iNzkkOj0sODotNz0vOkAyMz8rOkguTWI7YnpIa4lLdZZRc5lOcphNcJlNcJpSb5tOcqFQbqBJbJ5Jbp9NdKNTeahaeqhfeqhgb5pVZI5MW4RCW4RCY4xKaJFPZI1LXoZIYodRWX5KUndDaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGBVaWBbaV9daV9daWBbaWBZaWBXaWFWaWFUaWFUaWJSaWJSaWFUaWFUaWFUaWFWaWFUa2NQamJNamJNamJPaGFOZF9LX1pHWVZDUE89S0w6R0g4Q0Y1QUU0QUU2P0M0PEMxPEgyN0MrREkyS0cuTTsjb0w2mGRPp15NoEAyxVNJ52Ne72Bc61NS6UtM6EVI30FAyzgwxTkqxTcrxTcpxjgsyTosyjovyjst0D0z0D4x0T400T8y0j400j4y0z810j830z870UI+y0Q+xUU8wEY5wUk7x01AzlBE2FJH3VBH4UxF40pE40ZB4UQ/4EE92kE81EU/yEM8uj83qjwvnz4umEMvlUczkUg1jUYyikYziEQxg0IwfkEue0AueEEtekAsfzoqhDgqhTkrhTkrhjoqhjoqhjoqhzsriDspizopjDkpkDgqkzoqlzssmj0uoT0uqDkuqzkurjkvrzsusDosrzkrrjgqrDgppzYmpDYnnjcomjYnlDcokDgqkDotjTsthzsrgzwqgjorfzoqfjkpfTopfDspfDoqejsqejsqeDordDkpcjcncDcmcDcmdDYniUM3kUk9j0s+iEk6hkg7i1BCk1VKl1RLlVBJm1ROl1JNlFNNlVxVj19Vj2ddlX9qkpRtg5NkcoJVWGk9QlMpPk4nT186Y3NPZHNSWmlKTFk7QUwuPEUoPUMnPEAlOz0lNzgmOTwrNzksNjwuO0EzNEAsOkguTGE6YXlHaohKdJVQc5lOcphNcZpOcZtTb5tQcaBPbZ9KbZ5McqNSeahae6led6Vdcp9aYYtJXIZEW4RCXodFZY5MaJFPZI1LX4dIYYZQWH1JUXZCaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaWJSaWJSaWJSaWJSaWJSaWJSaWJSaWFUamFaamFcamFaamFYamJXamJVamNTamNRamNRamNRamNRamNTamJVamJVamJXamJVbGNSa2NQa2NQa2JRamNRZ2JPYl1KXVpHVVJBUVA+TEs5R0g2RUY0QkU0QEMyPUIuPEoxPUcsS0cuUz4pZD4rk1pJq19Smj4znjMrtj8311hS8Wpm9WVk6VNU5ElN505Q2ElB0EY5zD81yj4xzUA20kQ41EY81Uc72kpB2ko/2kpB20tA3UpC3ktB3ktD30pD6VRQ51NR41RQ3FNN11JL11JL2lRL31RN3U1F4UlE40VC4kNA4UI+4kM/4kVA30dC2ElFyUQ/uT43qzwxnz8xlkMxkkUzj0g0iUUyiEMzhkExg0Awfj8ufD4veT4uez0ufzktgjgrgjosgjosgDssgTwtgTwsgTwsgTkqgjkqhTkphzoqiTorijssjj0skjwtmDoumzksnjktnzkroDkqojgqojgooTcnnjcmmzcnlzcnkzcojzkqizopiTorhzstgzssgDsrfzorfTgpfTgpezgoejgoejgqeDkqeToreDotdDkrcTYobzUncTcpdDkri0k7jEo8iEo7hEk5hUs9jFJEklZLl1dOllFMmlVQl1NQklVQkWBZiGJXgmhZhnpibXNPWmk+SVgtQVImSFktV2k/ZHZMaXtTWGpETFw4PUwrOEUnOkQrPEQsO0AsOTwpNzgoODsqNjgrNjwuPEI0NUEtOUctSl84XnZEaIZIc5RPc5lOcphNcZpOcZtTb5tQbp1NbZ5McKFPdqdWfKpfeadecJ1YZ5RRWYNBW4VFYIlHY4xKZ45LZ45LZYxJZItMYIVPV3xJUHVCaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaWJSaWJSaWJSaWJSaWJSaWJSaWJSaWFUamFYamFYamJXamJVamNTamNRamNQamNQamROamROamNQamNRamNTamJVamJVamJVbGNSa2JRa2JRa2JRa2RSaWJQZl9NY15LXFZGVlNCUU49TEs5SUg2R0Y0REMxP0IvOkguP0grTkIqYD0qg0U6q1hQtE5KnCwosjs3uT450lJP8XBr/HZ18WVm6llc7l5e4lVO2U9E0Uc9zUM40UQ71Ec91kc/1kg+2UlB2UlA2kpC2kpB3UpD3ktD3ktE4EtF4UdH4EZG3EhG2EdE1khE1UdD10ZB2kVB3UI+40E/5kJB6EJC5kJA4kM/30I92UE82klGyUI+uTw2rD0yokAzl0Ewj0IwjUQziUEyhkExhj4whT0vgDwvfz0vfT0xfz0xgDowgDowgDowfzsugDwxfz0vfz0vfz0tfz0vfz0tfzwsgDsrfzorfzoqgDgpgTgpiTotjTkukDotkjoslzssmTwrnT0tnT4smDgoljkokjkpjTooiTophjoqgzorgjorfzorfjkqfTgpfDcoezYnejcnejYpeTcpdTYndjgpdzksczgqbzUnbTUmcTksdjwuikw/hks7hEs6gUw6hFFAi1ZIkVdMllZNk05JmVRPllVRk1xVj2Rbel5QZFdEYF5FRU8sPk4nPk8lSlwyXnFEaX9RY3lLVmw+TV81QFIsNkUkNUQnOkYuPEUyOD4wNjosNzkrOTwrNjgrNjwuPEI0NUEtN0UrRls0WXE/ZIJEcJFMcZdMcphNcptPcpxUcJxRbZxMbp9Oc6RTeKlaeqhfc6FZZ5RRXYpHWIJCXIZGY4xKZo9NZo1KZY1HZY1HZo1MX4ROVntIT3RBaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaWJSaWJSaWJSaWJSaWJSaWJSaWJSaWJSamJVamJVamNTamNRamNQamROamRMamRMamRMamRMamROamROamNRamNTamJVamJVbGNUa2JTamFSa2JTbGNUamNTaGFRZl9PYVpIXFdEVlE+T0w5TEk2SUYzRkMwQUMuOkcrQEYqVUArd0Y3ok9JskhItDc7uDM2yEJDwz4/ykpJ32Je73Jw7m5t5mFi4lpa2lFL1EtBzkU9zEM5z0Q90EY80EM8zUA30UI80kM700I91EQ810M/2EU+2ERA2kVB3EBB3UFE3UND3EZF30lI30lI4khG5EZF5kJD6UBD60FC60FC5kBA4T892T451Dw32kZEyD06uTgzrjwypkA0mD8vkD8ujUAwiT0viDwuiDouhjkvhjkxhDoxgzozhDs0gDoyfzsyfzsyfjwwfjsyfDwwfDwwfD0uez0wez0uez0uezwrejsseTopejgoeTcnfzktgjouhTkshzksjDoskTsskzwrlTwqkTgokDkojTooijsqhzsrgzwqgDsrfjsqfjkqfzcpfjYoezYnejQoeTUoeTUqeDYqczMndDYpdjgtcjYrbjQobTUoczsueEAxiVFCg048gE08gFE/hVZGiFdIjVRJkVJJkk9JllNNkVRPjlxTh2VZbFtJTkw1REouQE4tSlo2V2dCX3FJZXpPYnlLVW09RVwuQVYrNUojL0AgNEIoO0czO0M2Nzw1NzozOTsuOj0sNjgrNjwuPEI0NEAsNkQqQ1gxVW07YH5AbY5JcJZLcZdMcptPcpxUcJxRbp9Qb6NRcqVWdKdacaFXaZhQX4xJWYZFXYdHX4lJYotJZI1LZo1KZY1HZIxFY4pHXoRLVXpHTnNAaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRamNTamNTamNTamNTamNTamNTamNTamNTa2RUa2RUa2RSa2RRa2VPa2VPa2VNa2VNa2VNa2VNa2VPa2RRa2RSa2RUa2RUa2RUbmJUbWFTbGBSa2JTbGNUbGNUaWJSZ2BQZF1NXllGWFNAU047T0o2TEczSUQwQ0MrPkcqREQoW0IsiFRGrV1WqD4+qi8yy0hNxD9CvTs9ujo5w0ZE2FtZ4mVj21lZy0dF0ElFzkU/zEE8zkM80UY/0kdA0EM8yT81zkM8z0Q90UQ900Q+1UQ/2ERC2kRD3ERD3j9D3kBB3kJD30VF4EZG30VD30FA3j4+50FD6EBA5z0+5T094z094kA+4UQ/30ZB1kJAxTo3tjUvrzoxpkA0lz4wjz0viz8xhTwthTsuhjkvhjkxhjkxhzgxiDk0hzo0gjkyfzsyfzswfzswfjwwfTsvezsvezwtdzksdzkqeDoreTsseTsseTsseTssejssfTsvfTkufjgsfzcpgjYohDYphjcohjcmiDkqiDkqhzoqhTwrgTwsgD0sfjwsfTsrfDgrezcqezUpeTUoeDQndzUpdzUpdTUpcDIlczUoczcscTcrbTUobjYpcj0veEM1iFVEglFAf1BAglNDiFdJi1VJjFJHjU5FlFNNk1RNiFJIg1lNfWNSY1tER0swPEkrSFc2WWpGZXpTY3hPWW5DUWg8TWI3SV4zOkwmL0AeKzodMz8nPEU0PEI2Oj02OTw1OjwvOT0uNTkrNjwuPEI0Nj8sNUIoRFQwU2k6YXpBbYtLcJROcZdOcppRcpxScZ1ScZ9Uc6NXdaVbcqFZbJpSY5BLXYdFWYNDYoxMYIhJX4hGYYpIZo1KZ49JY4tFXoVEXoRLVHlGTXI/aF9QaWBRaWBRaWBRamFSamFSamFSa2JTamFSamFSamFSamFSamFSamFSamFSamFSamNTamNTamNTamNRamNRamNRamNRamNRa2RSa2RSa2RSa2RSa2RUa2RUa2RUbGNUa15OcGBRcWRUcGRUbGNUaWBRaGBTaGJSZ2FRZWJPYV5LWVdCVlE7VE85T0kxR0MoSkYpST8kYkoykWhWtHhtum1lt1lXuU9PtUNDukJDwUNExkZFzEdI0EpJ0UtK00tLzkRCz0NC00VD1EZC00Y/0EM8zkQ6zkY6x0M3x0U4ykU8zEY90kRA1kJC2UBD2z9D4EFF4EJD4UNE30RC4EVD4EVD4UZE40VC4kNA5EJA40E/4z894kA94kA94EE93EM+0kM9xD84tTkxqDgtnzoulT0vjD4xhD8wgT8xfz8zgD4ygDwxgzoxhjkxiDgxhzgxhTswgzstgzstgTwtgDssgDssfzwsfzwsfjotfjotfTstfTstfTstfTstfTstfTsvezktfDgtfDgtfTcrfjgsfjgsfjgsfjkqfTcrfTcrfDgrezkrejgqeDkqeDkqdjgpeDgsdjgrdzcrdTcqdDYpczUqczUqcTUqazElcDYqbjQoazMmbzcqajUnbjkrfUk7g1NFg1NHhFJHh1FHi1BIj1BJkVBKklFLklNMilRKhlpNf2JQbV5HVlU5S1Y0TV46an9YYXhOWXBGU2pAUWY9TWI7R1g0QlEwNkMlMj8jMDoiMzsmOz8uP0EzPz8zPD4zMzkrMjorMzkrNTstNz4uOUEsO0MsO0YoUWA5X3JEbodQcpBScZRQcZlScpxScp5TdZ5YfaZifaZkcJlXYotJXYZEXYVGXIRFXoZHYYhJZItMZYxNZYxLYolIX4ZFXYRFXoFLU3VCS207aF9QaWBRaWBRaWBRamFSamFSamFSa2JTamFSamFSamFSamFSamFSamFSamFSamFSamNTamNTamNTamNTamNTamNTamNTamNTa2RUa2RUa2RUa2RUa2RUa2RUa2RUbGNUcWFScWFRb2JScGRUcGdYb2hYbGZYZ2RVZ2RVa2hXbWpXamhTaGNNY19GW1U9UkwyUEsuRj8jUEAna1A7f1hHg09ChkY8kkU/sFdTtlRRulFOvVBNv05KwE1KwkxIw0xIz1NRx0dGwT07xD06zkNA0UY/zEI4xj0zyEQ3yEY5ykY6zUc+00VB1kRE20JF3UFF3kJF4EJD4UNC30RC4EVD30VD4EVB4UZC30RA30RA4EM+30I93kE83kE84EE93EM90kU8x0I5uj40qzsvnzoukzstiT0vgT4uf0AxfEEzfT8yfz0xgTsxhjkxiDgxiDgvhjothDssgzssgzssgjorgjorgDssfzorfzorfzorfjotfjotfjotfjotfTsvfTsvfDgtfDgtfDgtfDgtezktezktfDouejouejouejoueTkteDoteDotdzksdzksdzksdDgtdDgtczcsczcscjYrcDYqcDYqbzUpajIlbzcqbTUoazMmbDcpajUnbjkrfUk8g1NHg1NJhlFJi1BKj1BLk09MlFFLklNMiU5Gg1NHf1tLemRNcWpQaGtMY3FOZnhSXXRKVW5ET2U+S2E6Sl45Sls3RlU2QlE0O0UsNkAoMzsmNjsnOz4tP0AwPj8xOz0wMzsuMTwuNDouNTstOT0uO0AsPEErO0QpUVs5Xm1Ea4FQcIxSb5JQcJhRc51Tcp5Td55be6JjeJ9ga5JTYIdIXYRFXYRFXINEX4ZHYYhJY4pLZItMZItMYolKX4ZHXYNGXH9JUXNASWs5Z2BQaGFRaGFRaGFRaWJSaWJSaWJSamNTaWJSaWJSaWJSaWJSaWJSaWJSaWJSaWJSamNTamNTamNTamNTamNTamNTamNTamNTa2RUa2RUa2RUa2RUa2RUa2RUa2RUbGNUcGNTb19Qa11QbGBSbmRYb2daa2VZZWFVZmJWb21eendofntqf3pnenVhb2pWY2FKUlU6REcsQD4lTEErU0EtUzgnXTcqbD4xbjgudDgufjszh0E5kUg/m1FIpFdNrFlRu15XulNOt0dDukM/xUNBz0VC0UM/zj85z0I50EM6z0U700Y/1UZA10ZD2kRD3ENF3kJD3kJD30NE3kRE3kRC3kZD30VD3kZD3UVA3EQ/20Q92kM82kM82kM83EM92UQ91EU9zEY9wUI5sj0zoTkukTgqhzksgTwtf0AxfkAxfj8wfz0vgTsvhDovhzkvhzkvhDotgzssgzssgjorgjorgjorfzorfzorfjotfjotfjotfjotfTsvfTsvfTsvfTsvezgvezgvezgvezgvezgvezgveTkveTkvejoweTsweTsweDoveDovdjovdTkudTkudDguczctcjgtcTcscDYrcDYrbzUqbjUqajEmbzYrajQoaTMnbDYqaTMnbTcrfUc7hlJHhlJHilFIjFFJkVJLklNMk1RNkVZOiVdOhlxQfl5Pc2FLb2lRbnNVa3ZWZXZUUGQ/SV85RFgzQlYxQlYzRlc3RVQ3RFI4P0kwOkQsNj4pNzwoOT0sOz4tOz0vODwuNT0yMjwxNjwyNjwwOT0uOj4tPEErOkMoTVc1WWg/ZnxLbIhObZBOcJhRdJ5SdKBVeqFed55fbpVWYolKXINEW4JDXINEWoFCX4ZHYIdIYolKY4pLY4pLYYhJXoVGXYNGWH1HTXI/RGk2Z2BQaGFRaGFRaGFRaWJSaWJSaWJSamNTaWJSaWJSaWJSaWJSaWJSaWJSaWJSaWJSamNTamNTamNTamNTamNTamNTamNTamNTa2RUa2RUa2RUa2RUa2RUa2RUa2RUbGNUcWRUb2FUbGBSaV9TaWFUamRYaWVaaGZaaWdbd3VpiIR4kI1+lY+Bkox8iINwe3pmXmNMTFQ8Q0cwREYwRkQvRT0qTDwsVUIzTzgoUjYoVDQnVjQoXDYpYDgsZDwwbT0xikxBnFJJrVZPtU9Lu0VDw0FB0ERD10dG0UA71EA81EQ81UU92UVB2UVB20ZC3UVE3UND3UND3kRE3kRE3UVC3UVC3UVC20ZC20ZA2UY/2EU910Q810Q810Q810Q81UU81EQ80EY8yEU7ukE2pjwvlTgpizkrhDwtgT8vf0Axfj8wfz0vgTsvhDothzkvhzkthDssgzssgjorgjorgjorgTkqfzorfzorfjotfjotfjotfjotfTsvfTsvfTsvfTsvezgvezgvezgvezgvezgveDgueDgudzkueTsweTsweTswdjovdjovdTkudTkudTkuczctczctcTcscDYrcDYrbzUqbTQpbTQpajEmbTcrajQoaDImazUpaDImazUpe0U5iE9Gik9HjFFJjlJKkFRMkFVNkFdOi1lOiF5Sg2JTdl9NaVpHY15IZGhPXGZLTl1ARVU4QFExPEwvO0suPk4xQlA2RVM5R1M7QEw0PkcyOUItNz8qNz4sNz4sODwtNDosNT0yMz00Njs0NjwyOT0vOj4tO0AqOUInSVMxVWQ7YnhHaYVLbZBOcppTdqBUdqJXeqFecZhZZItMW4JDWYBBW4JDXINEWoFCXoVGX4ZHYYhJYYhJYYhJX4ZHXYRFXIJHV3xITHE+Q2g1Z2BQaGFRaGFRaGFRaWJSaWJSaWJSamNTaWJSaWJSaWJSaWJSaWJSaWJSaWJSaWJSamNTamNTamNTamNTamNTamNTamNTamNTa2RUa2RUa2RUa2RUa2RUa2RUa2RUbGNUcmZYc2dZcWdbbGRZaGFXaWVacm5lendugH12jY2Fn5yTp6WZqqabqKSYopyOmJWGeHtoYmdRTVI8RUo0Q0g0QEUxQUQxREc0S0w6SEk3RUQyQT4tQDosPzcqQDYqRjQmUjUnb0M4i1BInk9KrUlHvUZIykVI0UJE1UFB1kA/2EM/2URA2kU/2kU/3EQ/3ERB3kRE3kRE3UND3ERD3ERD3ERD2kVB2UVB2UY/1kY+1UY+1EU90kU70kU700Y81EY800A400M7y0U6v0M3rT8ynDotkTssiT0tgz4ugT8vfj8ufz0tgD0tgzsshjothjosgzorgjorgjorgjorfzorfzorfjkqfjkqfjotfjotfTsvfTsvfTsvfTsvfTsvfTsvejoweTkveTkveTkveDgudzkudjgtdjgteDovdjovdjovdTkudTkudDouczktczktcTcscTcscDYrcDYrbjUqbTQpbDMobDMoZzElbDYqaTMnZjIlaTUoZjIlaTUofEM4ik5EjU5Fj1BJj1NLjlVMjFhNiVlPg1tPeVlMdF1NaVpHXFVCWVhDWV5HTlhAP0szOUcuN0UsNEIrNEIrN0UuPEgyQEw2Q085QEw2PUk1OUUxOUIvN0AtNT4rND0qMjorMz00Mjw0NTozNTsxODswOT0uOj8rOUInR1EvUmE4X3VEaIRKb5JQdZ1WeKJWd6NYeJ9ea5FUXYNGV31AWX9CXIJFXIJFW4FEXoRHXoRHX4VIX4VIX4VIXoRHXYNGXIJHVntHS28/QmY2Z2BQaGFRaGFRaGFRaWJSaWJSaWJSamNTaWJSaWJSaWJSaWJSaWJSaWJSaWJSaWJSamNTamNTamNTamNTamNTamNTamNTamNTa2RUa2RUa2RUa2RUa2RUa2RUa2RUa2RUa2JTbmRYbmZbamNZaGRbcG1mg4B5kI+KpKOfsrGswcC7yMW+x8S7xMC3v7iuuLKmopyOhYJxZWRST1A+REk1PEUwOEQuOEUxOEUxN0QwN0QyOEMzO0M0PkQ4QkU6R0U5PDQnTTosZD82fkU+oVBPv1hZylFWyURH0kZH1kZG2UVD2kZC3UVC3UVA3UQ/3EM+3kRE3kRE3ERD3ERD3ERD20NC2URA2ERA2UVB1kY+1EU90kU80EY70EY7z0c700Y80z431UA5zkQ6xEQ5s0E2pD4wlTwsizwrhT4sgj8ugD4ufz4sgD0sgTwshDsshDssgjorgjorgjorgTkqfzorfjkqfjkqfToqfjotfjotfTsvfTsvfTsvfTsvfTsvezsvejoweDoveTkvdzkudzkudjgtdTcsczcsdTkudDoudDgtczktczktcTkscjgscjgscDYrcDYrcDYrbjUqbTQpbDMobDMoaTMnZzElazcqaDQnZjIlaDQnZTEkaDQne0I3jU1EkU5GkVBKjlNLi1dMh1hOgFpNeVxOc1xMa1tLX1hGVVRAUFNASlI9QEk2NEAsMzwrMTopMDkoLjkoMDsqMz4tN0IxOUQzPUg3PEg0PEg0OkYyOEQwNEEtMj4qMDsrMDoxMDk0MzgyNDkyNzoxODwuOT0sOEAoQ0wtT143XXNEaINMcJNTdp5XeKJWd6FXcJdYY4lMV31CVnw/WX9EW4FEW4FGW4FEXYNIXYNGXoRJXoRHXYNIXIJFXIJHW4FIVXpHSm4+QGQ2ZmBQZ2FRZ2FRZ2FRaGJSaGJSaGJSaWNTaGJSaGJSaGJSaGJSaGJSaGJSaGJSaGJSamNTamNTamNTamNTamNTamNTamNTamNTa2RUa2RUa2RUa2RUa2RUa2RUa2RUa2RUaWFUaWNXamNZa2dec3BphYR/np2Zr7CrwcG/0dHP4ODe5uXh5uPe4d7Z29bQ187HzLuxtqSWloZ3dm1cX1pHS004PkYvO0QvPUo2PEk1O0Y1O0M0Oz4zOjszOTgzODgwPD4xQT0xTDgvXzgxhklIr15dxWBkyFdZzVFT0U9P101L2UtJ3klF30ZB4UNA4UI/30NE3kRG3UNF3UNF3EJC20NC20NC2EM/2UVB1kVA1EU90kU80EY80EY8z0Y80kU710A510A30UM5yEQ4ukQ4q0EzmDwtizophj0sgz8sgD8tfz4sgD0sgT0qgzwqgzssgjorgDssfzorfzorfjkqfjkqfTksfTksfjovfTsvfTsvfTsvezsxezsxezsxezsxeToxdzsxeDkwdTkvdDguczctczctcTcscjgtcTgtcjgtcDcscDcsbjgsbzYrbzYrbzYtbzYtbjUsazUrajQqajQqaTMpaDQpZjInazcsaDQpYzEmZTMoYjAlZTMoekE4kE1Fkk1GkVBKjVRLh1dNf1lMd1pMb1xNa15OXVhFUlE/S047Qkk3OUIvMjsqMDgpMDYqMDYsMDYqLjYpLjYnLzcoMjorNDwtOUQ0OkU0PEk3PEk3OkczNUQvMj8rMD0sLTcvLTYxMTYwMjcwNTgvNzovOT0uOEApP0grS1k1W3FCZ4JLcJNTdp5YdqBWc51VZ41QXYBGVXhAV3pAW35GW35EW35GXYBGX4JKX4JIX4JKXoFHXoFJXYBGXYBIXYBKU3dHR2s9PmI2ZmBQZ2FRZ2FRZ2FRaGJSaGJSaGJSaWNTaGJSaGJSaGJSaGJSaGJSaGJSaGJSaGJSamNTamNTamNTamNTamNTamNTamNTamNTa2RUa2RUa2RUa2RUa2RUa2RUa2RUa2NWb2lda2dcbGhfc3BphIN+n6CbvLy6zc/Ozc/O3uDf8fHx+Pj2+Pf19vLv8Ovo7eLc5tDF28G0wayboJF+fXVgXlxFSk43QUkxQEoyQEk0QEc1QkQ3QUE3Qj03Qjo3Pjs2Nz0zPUA1QjcxSC8qYzc0jlJRs2dnxm5tv1tbxllWzVZS1VFN201L4EhF5EVC5UJD30NE3URG3ENF3UNF3EJC3EJC20FB2kJB2URA2ERA1UQ/00Q80UQ70EY8z0Y80kU720I82UA40kI5ykQ5v0U4rUE0mjoqiTYkiDwsgz8sgT4tfz4sgD0qgD0qgT0qgT0qgDssfzorfzorfzorfjkqfToqfTksfDgrfTsvfTsvfTsvfTsvezsxezsxezsxejwxdzsxdjwxdjowdDovdDgucjgtcTcscDcscDcscDcscDcsbTcrbTcrbTcrbDYqbDYqbTctbDYsbDYsazUrajQqaDQpaDQpZzMoZjInaTcsZTMoYzEmZTMoYS8kZTMod0E3jk1HkU5IjlJKilVNg1lNelpNcVtNaFxMV1RDSEk5P0MyPUQ0OUIxMDgpLzcoNjwwNDcwNDcwNTgxMTctMDYsLzcqMDgrMTksNkEzOEU0PEk3PUw5Okk0NkUwMkEsMD4tKjUtLDUwLzQuMTYvNDcwNzovOT0uOEArPEUqSVc0WW9BZoFMcJJVdZxZdJ1Xb5hUYIZJWHtDUnU9VnlBWn1FWXxEWXxEW35GXoFJXoFJXoFJXoFJXYBIXYBIXYBIXH5LU3RHRWg+Pl41aWNTaWNTaWNTaWNTaWNTaWNTaWNTaWNTaWNTaWNTaWNTaWNTaWNTaWNTaWNTaWNTaWJSamNTamNTamNTa2RUa2RUa2RUbGVVbGVVbGVVbGVVbGVVa2RUa2RUa2RUamRWaGRZZWVddHRskZKMrq+qw8XC2dva6e3u8fX29Pj3+/38///9///9/fz4+vbz+/Lr9+HU8tjH3sm0xbWeqZ+EiIRnYmJGRUgtREgvQkYvRkUxR0Q1RTwzQzYwRDUyRjs5Pj86PkE6Qjo3RzgzYkZDkGpnxJOP56ym0YqEx3Ruv15XxVRO1FBO3kxM50dJ6kdK3URG3klL2kRF1Ds92D5A4EZI30VF1Ts72T8/2UE+10I+1kI+00I90UI8z0I50EA33EM92kA40j83yUA2vUE1rkAznTwsjjgnij0thj8tgj0tgD0sfj0pfzwpfzwpgDwpfzorfjkqfTksfTksfDgrfDgrfDgtejgsezktezkteTkveTkveTkvejowejoxeToxdz0ydj0ydjwxczovczkucTgtcDcsbTcrbTcrbTcrbTcrbDgrbDgrbDgrbDgrbDgrZzMoazcsbzswbjovajYrZzMoZjInZTMoYzEmaDYrYzEmXS0hXy8jXi4iYjImcT80i09HjVBLh1BJgVJKelhMdV5QZVhIU009QkUyPUQyOUIxND8vMj0tMzsuMjotMzkvNjgzNTcyNTcyMjcwMTYvMDYsLjYrLjYpLTgqMD0sNkMxOUg1Okk0NUcxMUMtMD4tKDQqKTItLTIsLjMsMjUuNTgtODwtOEArNj8kRFIvV2xBZ4JPcpNadp1ccptXapNRWH5DVnlDU3ZAU3ZAVnlDWXxGWXxGWHtFXYBKYINNYINNXH9JW35IXYBKX4JMXX9NUnJJRGQ/OVczaWNTaWNTaWNTaWNTaWNTaWNTaWNTaWNTaWNTaWNTaWNTaWNTaWNTaWNTaWNTaWNTaWJSamNTamNTamNTa2RUa2RUa2RUbGVVbGVVbGVVbGVVbGVVbGVVbGVVbGVVamRWZWVdbm9phYaBo6WgwMK/1dnY6e3u9fv79vr79/v8+f38/f/8/v78//76//z5//vz//Dg+urR7N7E186xwLudpKOEgIRjZmxKTFEzRkkuQ0MrR0IvSD4yRzoySjg0Sjw5Pjo3Q0I+TklGXFJQeWplo46JzbKr58W8/9fO67KnzYN6wGNcyVhU11JT3klL2kFE1ERE00VE2EhH3EpK2kZG0z0+1T0820FB2D4+2EA/1kE91kE91UE90kE80EE50UE520I82UA40UE4ykE3vkI4sEA0njwvkDgqizwthj8tgj0tgD0sfj0rfj0pfzwpfzwrfzorfjkqfTksfTksfDgrfDgrezktejgsfDoufDouejowejowejowejowejoxeToxdjwxdDswdDswcDoucTgtbjgsbTcrazcqbDYqazcqazcqaTgqazcqaTgqaTgqaTgqajYrbDgtbjovbjovazcsZjQpZTMoZDInYjAlYzMnXi4iXS0hYjImXS8iXzEkbz81f0pChlFLhldRfVdOcVVKZFJEUEk5Pj8vOUAuNUAvM0AvMj8uMj0vMzsuNDowNjkyNjgzNjg1NTcyNDYxMTYvMTYvLzcsLzcsLTgqLzstNEEwN0YzOUg1NkgyM0UvM0EwLDguLDYuLTIsLTIrMDMqMzYrNjorNj4pNj4mRFIxVmtCaIJTc5RddpxfcJhZZo5PVnxDVXhCUnU/UnU/VXhCV3pEWHtFV3pEWn1HXYBKXoFLW35IWn1HXH9JXYBKW3tMUG5KRF9AN1IzZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTaWNTaWJSamNTamNTamNTa2RUa2RUa2RUbGVVbGVVbGVVbGVVbGVVbGVVbGVVbGVVaWVZZGVfeXt4l5mWsra1y9HR4+np8/j79///+///+///+//+/P77/v/6///6///6///0/fvk+fja7/DR4OTD0dezvcWenqmBh5JqXmhFUFc2Q0csREMuSEU0TEQ3SkA3SD84Qzs4UUxJaWFff3d0nJKQvbKs2M7F6dvQ/Onb//Tn/+TZ76uiwWZhtERDxkVJ2VNU2lZUzk1IyUNAy0RB0UZD1UVE1UND2EJD1j491j491T8+1kA/1UE900I90UI80kI62EE610A50UI6ykQ7v0Q8sEE2oTwwkjosizwthz4vgj0ugD0sfj0rfj0rfj0rfj0rfjsrfTksfTksfTksezktezktezktejgsezsxezsxezsxezsxejsyejsyeToxdzsxczoxcTsxcDowbjovbjgubDgtazcsaDYrazcsaTcsaTcsaDgsaTcsaDgsaDgsaDgsazkwazkwajgvajgvajgvaTcuZTMqYjIoYzMpYDEnWywiXzAmYzQqWS0iXDAlcEQ5fVBKf1dPfVhQb1NIXko/T0M3PzwtNDYoMTopMDsrMD0sMT0vMjwxNDwxNTsxNjkyNjgzNjgzNjgzMzgyMjcwMjcwMDgtMDgtLTgqLjosMj8uNEMwN0YzOEc0Nkc0OEY1Mj4yMDoxLzQtLDIoLTAnMDMoMzcoNDspNj4nRFEzWGxHa4RadpZkd51kbJRYX4dLVXhCVHRCUnJAUnJAVHRCVnZEVnZEVnZEV3dFW3tJXHxKWnpIWnpIXX1LW3tJWHdLTmdHP1c9MUkxZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTaWJSamNTamNTamNTa2RUa2RUa2RUbGVVbGVVbGVVbGVVbGVVbGVVbWZWbWZWamZaaWtmgoiIo6eoub+/zdXX5e3v8vr89Pz++f//+f//+v/8+v/5/P/4/f72///1///z9/3j8/zd7vjW5fHN3enDztqytcGZoKyEfYdiZm1LTFM0REgvSEo1S0k6R0U5REA3T0dEaWFeioKAopqXt6+sy8bA3drR6eXa+fPn//zv//fs/93V+rex5ZCNx2NjrkA/wVBKyFNKx1BIwkdAx0ZA0k1I1UpH0EA/zz470j480z891EA+00I900I90kM90kE81D851EE60UQ7ykU8vkU8sEE4oD4zlDovizwvhz0wgj0ugD0tfjwsfj0rfjwsfjwsfjotfTksfTksfTksezktezktezktejgsfDwyfDwyezsxezsxejsyeToxeToxdzsxcTgvbjovbTkubDgtazcsaDYraDYrZzUqaTcsaDgsaDgsaDgsaDgsZzksaDgsaDgsazsxaTcuZzUsaDYtajgvaDguZDQqYDAmYzQqYDEnXS4kYDEnYDQpViofXjIndk5EflxTdVhQZ05HV0M6SDwwQDouOjstNzssLzcoLjkpMDstMj0vNDwxNTsxNjkwNTgvNjkyNDkyNDkyMzgxMzgxMTkuMTkuMTksLTgqLjkrLzwrMj8uNUIwN0YzOUg1Okg3OEQ2ND8xMTcrLDImLC8kLTEjMTUmMTgmNDwlRVI4XXBQcYpje5tsdptoZYxXVHtEUXNAUXE/UHA+UHA+UXE/U3NBU3NBVHRCVXVDWXlHW3tJWnpIW3tJXX1LWXlHVnNHSF9DOk05LD8sZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTaWJSamNTamNTamNTa2RUa2RUa2RUbGVVa2RUbGVVbGVVbGVVbWZWbWZWbmdXa2dccHJvhY2PpKmst7/BzNTX4+3v8fv88/3+9///+P/++v/6+v/4+/7z+fvu+Pnr9vno9f/n8//k8P3f7fjY6PPR3ujFytKttr6Zm6N+e4JhWF5CR0w1Rks3REs5QEY4QEI3Yl1XhX54q6GfwLi1ysK/1dDM5OHa7u7m+fbt+/Tq/vDl//Pp//Ts/+Xf6aiktmljpUtAslBDv1lLx1tPw1FHvkU9wUA6ykVAykA9zEE+z0E90EI+0EI+0UM/0EM80UI80j840kI6z0Q9x0c+u0Q8rUE3nz00lDwyizswhz0ygjwwgDwvfjwufjwsfjwufjwufjotfTksfDoufDouezktezkteTkveDgufDwyfDwyejsyejsyeToxeToxeDkydjoybjguazkuajgtaTcsaTcsaDYrZzUqZjYqZzcrZjgrZjgrZjgrZjgrZDgrZjgrZjgrajowZzctZTUrZTUraDguaDguZDQqYDEnYTIoYjMpXDAlXDAlXDAlViofYTcrelZKcVhRX05GTD82QDYsPDYqOjgsOTsuOT0vMTksMjotNDwvNDwvNTsvNjkuNTgtNDcuMzkvMjovMjovMjovMTkuMTksMTksLzosLTgqLTgoLjkpLzwrMj8uNUIxOEU0Okc2O0Y2N0IyNDosLzUnLjIkLjIkMDQlLzYkMTkkRlI6YnVXdo5qe5pxcZVnXIJRSnA9TW89Tm49T28+T28+T28+T28+UHA/UXFAVHRDWHhHWnpJW3tKXX1MXX1MV3dGUW1EQVQ+M0M2JjYpZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTaGJSamNTamNTamNTa2RUa2RUa2RUbGVVa2RUbGVVbGVVbWZWbWZWbmdXb2hYbGhdam5teoKFk5ueq7W3w83P2uXn6/f38v788/769f/6+f/5+f/2+v7w9/vs9fbm8fTh8/zn8/zn8/vk8/nf8fXa6ezN19a3xMOksK+RjY1xZGZOTVA7REs5RU49RVBCSVFGe3txnpqRxL23187J3dPR5dvZ8Ovn+vfy7+7p+/vz///2//7z//ju//Pp/+bd/9fL15KCt2RSoks4sVRDvVdJtEU6tkA2yExExEM9yEM+ykM9zUQ+zUQ+zUQ+zEM7zUI70EE70UI8zEU/xEU+tkE6qT42nTw1lTw0izsyhz0ygjwwgDwvfjwufjwufjwufjwufjotfTksfDoufDouezktezkteTkveDguezsxezsxeToxeToxeDkwdzgvdzgxdDkxbDgtajgtajgtaTcsaTcsZzcrZzcrZzcrZjgrZjgrZjgrZjgrZDgrZDgrZDgrZDgraDguZjYsZTUrZjYsZzctZzctZjctZDUrYTIoZDUrXjInWy8kYDQpYDQpZz0xdFRJVUc+Qz82OTUsODYqOTkvNzksNDgqMzcpNDouNDouNDouNDouNTgtNDcsNDYrMzYrMjgsMTksMTksMDgrMDgrMDgrLjkrLjkrLjkpLTgoLTgoLjkpLzwrMj8uNEEwNkMyOkU0OEMyOD8vNDsrMzcpMTUnMDQlLTQkMDclSFQ+ZHdbdIxsc5FrZYheUndLQmg5SWo7TGw7TW08TW08TGw7TGw7TW08Tm49VHRDWHhHWnpJW3tKXX1MXHxLU3NCTGY/Oks4LjsxIy4mZmVTZmVTZmVTZmVTZmVTZmVTZmVTZmVTZmVTZmVTZmVTZmVTZmVTZmVTZmVTZ2RTaGJSamNTamNTamNTa2RUa2RUa2RUbGVVa2RUa2RUbGVVbWZWbmdXb2hYb2hYbWleZmppbHV6hI2SoaywvcjM0t3f5PDw7/v58v358/72+P/3+f/0+//w+f3s+Pnn9vfl9fbo9vfp+fbn+/bj/PTh9uvV5tfA1MasvbGZm5N8dG1aWFdFTlBCUVdLWWNaY21ilZiNsbGl08/G597Z8ePi+Ojo//Hx//b1//36/Pv39/rz9vnu+vzv///z///x//vq/+XQ7qqTum9ap1ZDrFNBtVFCuExAv0pBwkc/xUY/yEU9yUY+yUQ9yUQ9yEM8yEI50EM8z0Q9ykU+v0M7sz43pToymzozlD00izsyhz00gjwygDwxfjwwfjwwfjwwfjwwfTsvfDoufDoufDouezktezkteTkveDguejoxejoxeDkweDkwdzgxdjcwczcvcjcvbDgtajgtaTktaDgsaDgsaDgsaDgsZjgrZjgrZjgrZDgrZDgrZDgrZDgrZDgrZDgrZjYsZzYvaDcwaDcwZzgwZzgwaToyazw0ZDgvaT00YjYtYDQrbkM6dktCc0g/a01DQjkwNDcuMjUsNzovODsyNDcsMTQpMjUqNTgtNDcsMzcpMzcpMzUoMzUoNDYpMzcpLzcoLTgoLTgoLTgoLTgoLTgoLTgoLTgoLjkpLjkpLTgoLTgoLjkpLzoqMDsrMTwrN0MvN0MvOkEvOUAuOT0uNTkqMTUmLDMjMTgmSVU/Y3VbbYRnZYNfV3pSSG1EPmM3R2c4TGk5Tms7Tms7TGk5S2g4TWo6T2w8VXJCWHVFW3hIXHlJXntLXHlJUW4+RmA5NUMyKTQsICkkZmVTZmVTZmVTZmVTZmVTZmVTZmVTZmVTZmVTZmVTZmVTZmVTZmVTZmVTZmVTZ2RTaGJSaWNTaWNVamJVa2NWa2NWa2RUbGVVa2RUa2RSa2VVbGZWbWdZbmhcbWleamlkanBwbHZ4gYqPpK6wwszO1N7g4+3u8fv68/z39v329/72+f/z/P/y+//w/P/u/P3t+vjs/fnu//nt//rq//jo//Lf7t/I3c63vrKan5eAenVhYF9LVlpLXGRXa3drfIZ7pqygvb+02dbN7OXf+O3r//Ly//Pz/PLz/ff3+fr1+P33+v/59f/08/vu9f3u///x//no//Tj/Mu6un9vmlJDp1RGtFRIsEQ4vkk/w0c9x0c+yUY8yEU9x0Q8xkM7xUI4zEY7zEg8xkg8uUM5qj4ynzowlTsykD4ziTwyhD40gT00gDwxfzswfzswgDowfzswfTsvfDoufDoufDouezktezkteTkveDguejoxeTkweDkwdzgvdjcudTYtcjYucTYubDgtaTktaTktaTktaTktaDgsZzksZzksZTcqZTcqZTcqZTcqZTcqZTcqZTcqZTYsZjUuajgxbDozazozaTkvaTowbD0zbkI3a0E1bUU5Yz0yYj4yeFZKhWNXd1dMYkxBPDkwMjovMjovNT0yNDowLjQqMDYqNjwwMjUqMjUqMDQmMDQmMDQmMTUnMzcpMjgqLjYpLDcpLDcpLDcpLDcpLTgqLTgqLTgqLjkrLjkrLTgqLTgqLDcpLTgqLTgqLTgoND8uNkEwO0QzPEU0O0IyNj0tMDcnLDMjMjsoSlZCYnFaZ3tgXXZWT21JRWVAQGA5RWQ4S2g6TWo8TWo8S2g6Smc5S2g6Tms9VHFDV3RGWXZIW3hKXXpOWndLTWo+Qlo4MT8yJzAtHyglaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWZ2RTaGVWaGRYamRYa2Raa2VZbGRXbWZWZWBNamVRbmtYbWtcaGZaZWRfcXFvgIGDiJCSlZ+gqrS2wcnL19zf6O7u8/f4+Pr5/P77/f/6/f/5/P/2+v3y+Pvw+f3v+v7w+Prv+Prv+Pjs+/nq/vzn+Pbd6OTH1NO1u7qcmJl6cHRZXWVNYmtWcX5sg5GCkJyQtLmyy8zG4+Ld7+7p9/Pw+/f0/Pj1+/f0//76/v/6/f/6/f/6/f/5/f/5/f/5/f/5+fv2///6//z2/+rk16igoGBWmUU7s05Ev01CwkY8xEQ5ykg7zktBzktByUk+xkg6xUg2wkk2uko2sUg1pUY0mkMykEMzi0M1hEI0gUIzgEA0gD4ygTsxgzkuhTgugzkwfjovfToxfDkwezgveDgudzctdjYsdjYsdTcsdjgtdjgtdzkudDgtcjYrcDQqbTQpajgtZzguZzguZzguZjctZjctZzctZjYsZjYsZjYsaDguaDguaDguZzctZTUrZTMqZzIsajUvbDcvazkwaTktaTsuaT0waEEyZUExaUo4ZEk4dV5OfGtZiHhoi35uUUs9NzksMzsuMjotMjotMTksMTksMTksMTksMTcrMDYqMDYqMDYqLzUpLzUpLzUpLTUoLjYrLjYrLjYrLjYrLjYrLjYrLjYrLjYrLjYrLjYrLTUqLTUqLTUqLTUqLjYrLDYrMDovMj4yNkA1OEM1OEM1N0IyND8vMz4tMz8rRFE9V2VOW2tRUGNHRFc5QFU2QFg2SWM+SWU9SmY9SWU8SGU5SWY6S2g8TWo+U3BEV3RIWnZNXHhQXHhSVnJMRmE+OVA2JDEoJCwuISkraGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWZmVTZ2VWaGRYaGRZa2Rca2RabGRZbGZWaWRQamhRbGtXamtbZmhdamxpe3+CjpOZqLCzuMLDztbY3+fp7/P0+Pz9///////9/fz4/v35/v/5/f72+v30+Pvy9vzw9vzw9vnu9vnu9/nr9/rn+Prk8fTZ3+LDzNCvtLiXkZZ2aXJVWGJHX2tVdIFti5mIm6ebvMG60tPO5+jj8vPu9/jz+vv2+/z3+vv2/v/6/v/6/v/6/v/6/v/6/v/6/v/6+v/+9P//8///+//+//z6/+7o78C4wX51nkxArkw/uUs+wkxAxUs+wUU5uz8zvkA0wUY3wkc1wUo0u0w4sUo3o0Y0mEIxkEQ0i0Y3g0Q1gUM2gEA2gD00gDwxgzoxgzkwgjkwfToxezsxejoweTkvdzkudjgtdjgtdTcsczcsczcsdDgtdDgtcjgscTcrbzUpbTQpajgtaDguaDguZzguZzctZzctZzctZzctYzMpZDQqZTUrZzctaDguaTkvajgvajgvaTcwaTcwazkwajouajwvaT4uaEEwZ0QxZkczalE7ZlE+dWZRfnZjioVxhINxSUw7MzkrMjotMjotMTksMTksMDgrMDgrMDgrMDgrLzcqLzcqLzcqLjYpLjYpLjYpLTUoLTQsLTQsLTQsLTQsLTQsLTQsLTQsLTQsLjUtLjUtLTQsLDMrLDMrLTQsLjUtLDYtLTcuLjowMT0zNEA2NUE1NkI0NUIxNEEwNUIwQk87UF5HUV9ISFY9QU81QlA2RVU4SWE/SWU/S2VASWU9SGI7RmI5SGM6SGQ7Um1EVnJKW3VOW3dRW3RUUm1OQls9NEo1JDEqJCwvIiotaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWZmVTZ2VWaGRYaGRZa2Rca2Raa2VZbGZWbWhUa2lSa2pWaWpaamxhdXd0jpKVp6yyvsbJ0tze6vL09f3//P///P///////v78/fz4//76///6/f72+Pvy9fjt8ffr8ffr8/br9Pjq9fjn9Pfi9Pbe7O/U29y9xsmqrrGSkpd5dXlga3BZdHtpiJGAnaiarLarzM/I3t/a7/Dr9/jz+/z3/f75/v/6/P34/v/6/v/6/v/6/v/6/v/6/v/6/v/6/f/8+f//+f///f/+//z5//r0//ft/dHE15+Qkk09o1JBqEs6pT8wt0c5zlpLz1VIvEEyw0Q1xUc4w0s9uEg6qUM1nT8zlUE2kUQ6h0E5hEE4gEA3fj82fj41fT00fT00fT00ejsydzsxdjwxdTswdTswdDovcjkucjkucTgtcTgtbzktbzktbjgsbTcrbDYqazUpbDgtajgvajgvaDguaTcuaDYtaDYtaDYtZTUrZTUrZTUrZjYsZzctaDkvajowajsxazw0aToyaTowaDwvaT8xaUIxaUQyZUYyZUo1alY+aVhEdWpUhX5rkY96fn9tQ0Y1MjgqMTksMTksMDgrMDgrLzcqLzcqLzcqMDgrLzcqLzcqLzcqLjYpLjYpLjYpLTUoLTQsLTQsLTQsLTQsLTQsLTQsLTQsLTQsLjUtLTQsLDMrLDMrLDMrLDMrLTQsLDYtKjQrKjYsLDguLzsxMj4yNEAyNkMyN0QzN0QyP0w4RVM8QlA5O0kwOEYtPUsyQ1M4SV4/SGI9S2M/SmQ9SGE6RV84Rl84RV84UWpDVnBJXHRQXHZTWnJSTmdJPVQ4LkEtJTAqJCwuIiosaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWZmVTZ2VWaGRYaGRZa2Rca2Raa2VZbGZWa2lUa2tTbGtXa25dbnFmfoN/nqKlub7ExMzP2+Xn8/v9+f//+v7/+v79/Pz8+vr4/v35//75/v/3+vzx9Pfs7vHm6O7i5+3f7fHi7/Pi8fTh8PPe8PLa6OvQ2Ni8x8ersbGVnqGGkJJ8kJOAm5+Qqa2ftryyv8S9293Y6erl9vfy+/z3/P34/v/6/v/6/P34/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v78+vr6//////7/9fHu+/Ts//3x//vt//Tk68KwtoJtk1A9oE88tVhHtU4/tEQ2wEg6wEAzx0U4xUk/vEY8rj82oTw0mD42lUI8ij86hUA7gUA6fEA4ej85eD82eD84eD82dj00dTwxcz0zcz0xcjwycjwwcDwxcDwvbzswbzsubDovbDstazkuajkraTcsaTcsbDcvbDcvbDcvbDcvazYuaTcuaDYtaDYtazsxajowaDguZjctZTYsZDgtZTkuZjovaj82Zj40Yz0wZUAwaEMzaUYzZUYyYUYxYUs0aFY+aV1HcmpThYNujY95b3JfOT0sMTcpMDgrMDgrMDgrLzcqLzcqLzcqLjYpMDgrLzcqLzcqLzcqLjYpLjYpLjYpLTUoLTQsLTQsLTQsLTQsLTQsLTQsLTQsLTQsLTQsLDMrLDMrKzIqKzIqLDMrLDMrKzUsKjQrKTUrKTUrKzctLTktMDwwMz8xNUIxNUIxOUY0O0g0N0UuMkApMT8mN0UsPU0zRFk6RV07Sl8+SWE9SmA8Rl46SF46Rl46UmhEV29LYHVUXnZWWm5SS2JGOU00KDknJC8pIystISkraGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWZ2RTaGVWaGRYaGRZa2Rca2Raa2VZbGZWamhTampSbWxYbnFgc3Zrg4iEoqeqvMPJzdfZ5e/x+f//+f//+f3++v79/////f37///7///6/P319/nu7vHm5urc4ObY3uXV5urZ6e7a7O/a7PDZ7O7W6OjO2ti/y8mwv72mtrSfsa6btbOkvr6yyMjA0dLN2drV6Onk8fLt+vv2/P34/P34/v/6/v/6/P34/v/6/v/6/v/6/v/6/v/6/v/6/v/6//76//39//v+/vr5+vv2/P/4/P/2/v/z///t//7q9d/IxJuHm2JOk0o3pE06tFBAu0s9vkA0xUI6xUY/vkM8sT45pTk2nTk3mD06kT07ij88gz88fD86d0A7dEI5cUI6cUI4cD41cj4zcj01cj4zcD41bz0ybz00bz0ybT0zbT0xazwyajwvaTowaDotaDkvaTkvbjcwcDcwbzYvbTYvbTYvazYuaTcuaTcuazsxaTowaDkvZDgtYzktZDouZTsvZDwwY0E1YkI1YkIzYkUzY0Y0Y0gzYUgyXUkxXU00YlY8aWFKcm5VgoRug4hxWWFMMjknMDgpMDgrMDgrMDgrLzcqLzcqLzcqLjYpMDgrLzcqLzcqLzcqLjYpLjYpLjYpLTUoLDMrLDMrLDMrLDMrLDMrLDMrLDMrLDMrLDMrKzIqKzIqKjEpKjEpKzIqKzIqKjQrKzUsKjYsKTUrKTUrKjYqLDgsLzstMT4tMD0sM0AuNUIwM0AsMD0pLz0mM0EqNkYsPU81P1M3RVg8SF0+SVw+SV49Sl09Sl8+U2ZGWm9QYnVZYHRZWWtTSVxGNUcxJDUlIi0nISopICkoaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWZ2RTaGVWaGRYaGRZa2Rca2Raa2VZbGZWaWdSampSbG5ZbnFgcHZqgIaCnKSmt77E1d/h7ff5+f//+f//+Pz9/P///////f75///6///3+vzx8/Xo6e3f4ubX3OPT2+LQ4+jS5uvU6e3W6evT6+vT6ObN3NrD0s230s25zMa2ycO1zcm+1tHL3tvW6eXk7+7s8vPu+Pn0/f75/P34/P34/v/6/v/6+/z3/v/6/v/6/v/6/v/6/v/6/v/6/v/6//36//v6//f4//38/v/9+P/78v/37v/y9P/17/bk///s/+3Yy6eRomtXoVpGqlhDrUw7uEQ3v0M5wEU9u0Q8s0A7qj06ojo3mjs5lDw7jD48hT89fUA7d0I6ckM5b0Q7b0U5bz81cD41cD41cD41bz81bz81bz81bz81bj81bT40aj4zaT0yaDwxaDwxaDwxazsxbjcwcTYwcDcwbzYvbTYvbDcvaTcuaDguZjctZDgtZDouYjouZDwwZD4xZT8yY0IzXkI0Xkc3Yks5ZE45YUw3YEw0XUszXEwzXVE3YFk9bGhPc3NZgIRtdHxkRU45Mj4qMTkqMTksMTksMDgrMDgrLzcqLzcqLzcqMDgrLzcqLzcqLzcqLjYpLjYpLjYpLTUoLDMrLDMrLDMrLDMrLDMrLDMrLDMrLDMrKzIqKzIqKjEpKjEpKjEpKjEpKzIqKzIqLDYtKjYsKTUrKDQqKTUpKjYqKzcrLTkrLDgqLzwrMj8uM0AuM0AuMj8rMj8rM0EqNkUuOEowPlA2QlU5RVg8R1o8Sl0/TF9BUmVHW25SYnRaX3FZVmhSRldEMkMwIzEiIy4oIisqICkoaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWZ2RTaGVWamRYamNZa2Rca2Raa2VZbGZWbGpVa2tTam1Yam5da3FleX97lJyerba70dvd6fP1+f//9///9vr7/P//////+Pn0///6/v72+Prv8PLl6Oze4+fY3+bW3+fS5OrQ5uzQ6OzR5+nR6OjQ5uTN4NvH19C+2dLC2NDD3NPK5dzX7ePh8unq+fDx/Pj3+vn1/f75///7/f75/P34///7///7/P34/v/6/v/6/v/6/v/6/v/6/v/6/v/6//36//j3//n4//79/P/99f/96/748P/98f/79f/48fjo//zq//vo9M65qndijlA5qVtFsU09uEo7t0k8tUk9tEdArEM9pD45mTo0lTw4jj05iD85f0A5eEI4ckQ3b0U5b0U5bz81cD43cD43cD43bz43bz43cD84cD84cEE5b0A4az82aj41aT00aT00aj41bTw1bjcwcTYwcDcwcDcwbTYvbDcvaTkvZzguYzktYTktYjwvYj4wZEAyYkEyYUEyXkMyV0QzXU47ZVZBZldAYlM8W081W081XFI3XFc6Wlk7bW1TcnZbeYFpY21UMT8oNUIuMDsrMjotMjotMTksMTksMDgrMDgrMDgrMDgrLzcqLzcqLzcqLjYpLjYpLjYpLTUoLDMrLDMrLDMrLDMrLDMrLDMrLDMrLDMrKzIqKjEpKTAoKTAoKTAoKTAoKjEpKzIqKzUtKjQsKjQrKjQrKjQrKzUqLDYrLDcpLDcpLjkpMj0tNUAwN0IyNkEwNUAvM0AsMD8qNEMsOUgxPU0zQFA2RFQ5SFg9S1tAUmJHW2tRYXBZXm1YU2JPRFJBMT8uIS8iJTAqJC0qIisoaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWZ2RTaGVWamRYamNZa2Rca2Raa2VZamdWbWxXa21VaWxXZWxaZW1gcXp1jZeYp7C1ytTW4uzu9f3/9Pz+9/v8/P/////9+Pn0//75/f3z9/ns7/Hj6Ozd5enY4+rY5e3W5uzQ6O/Q6O3P5unO5ubO5ePO4drI2NHB183B3NLJ6d7a+O3r//P1//X2//T4/vj4/v37///7///7/v/6/f75///7///7/f75/v/6/v/6/v/6/v/6/v/6/v/6/v/6//76//76//76/Pv3+Pz7+P//9P//8P//6/767/73+//4///z//Xl//Le/+PM162VqHBXplhCrFE+q048rE8+r09BrExAoUM5mTw0lD00jj41iD82gEA2ekE2c0M1cEU1b0U3bz81cD43cD43cD43cT84cD84cD84cD84ckE6cEE5bj83az82bD01aj41az82bj02bzgxcDcwbjcwbTgwajgvaTkvaDkvZTsvZDwwYz8xYkEyYUEyX0IyXUIxW0AvVkEuU0YzWlQ+Zl5HZ2BGYFk/WVI2WFM2W1c6WFc5V1g5aW1ScXdbdX1lVWJIJTMcNkMvMTwsMzsuMjotMjotMTksMTksMTksMTksMDgrLzcqLzcqLzcqLjYpLjYpLjYpLTUoKzIqKzIqKzIqKzIqKzIqKzIqKzIqKzIqKjEpKjEpKTAoKTAoKTAoKTAoKjEpKjEpKDIqKTMrKTMqKjQrKzUsLDYtLDYrLDYrLDYrLjkrMj0vNkExOEM1OUQ0N0IyNUAvLjspMD8qNEMuN0YvO0ozP081RFQ6SFg+UWFHWWhRX25ZW2pXUF5NQU9ALjwtIS0jKDEsJi8sIywpaGVWaGVWaGVWaGVWZ2RVZ2RVZ2RVZ2RVaWZXaWZXaWZXaWZXaWZXaWZXaWZXaWZXamRUa2VXa2VZa2RabGVdbGVbamZaa2hXcG9aam5VaW5YanFfaHNlbnlzhZGRnqmtu8TJz9nb5+/y8/v9+v7/+//+/v78/f75///6/f3z+Prt9ffp8vbl7/Tg6vLd5+/X7/bX6/LR6u/R6ezR5ubO3tvI3NXF3NTJ39XM59nW8ePi+Ozs/vL0//b6//n9//z9//78/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6//75/v/5/v/6/f/++///+v//+P//+v///P///v/6//zz//vv//3s//vk//Pb/+nOuYFmpWJIlU82n1Q9qFpGo1JBnks7oE0/jz0xiz8xhj4wfj8udz4tc0Atc0QydEY2cD41cj03cz44cz44dUA6c0E6ckA5cT84ckA5cUA5cUA5b0A4cD84bj83bj83bj02ajgvbTgwazkwazsxajsxZz0xZDwwYj4wYD8wXj4vYkc2YUc2VD0rTjkmTDckQDEcV1E7T083S0kwTUwwW1o+Z2ZIYmFDVVQ2V1g5XWBBb3NYd4BjY21UPUowLDojMT4qMTwsMzsuMzsuMzsuMjotMjotMjotMTksMjotMTksMTksMDgrMDgrLzcqLzcqLzcqLzYuLzYuLzYuLjUtLjUtLjUtLTQsLTQsKzIqKzIqKzIqKzIqKjEpKjEpKjEpKjEpKzUtKzUtKjQsKjQsKjQrKzUsKzUsLDYtKDIpKjQpLjgtMj0vN0E2OkU3PUg6Pkk7NUIwNEEvMT4sLzwoMT8oN0UuQU84SFY/TlxFVWNMW2hUWGVTS1hHOkY4LjouKDQqJi8qJS4pJS4paGVWaGVWaGVWaGVWZ2RVZ2RVZ2RVZ2RVaWZXaWZXaWZXaWZXaWZXaWZXaWZXaWZXamRUa2VXa2VZa2RabGVdbGVbamZaamlXbm1YaW1Uam9ZanNgaXRmb3x1hpSUoK6xvcjM0tvg6fH09Pz++v7/+//+/v78/P33///4/f3z+fvu9vno8/jk8PXf6fHa5u/U6fDP5erK5OfK5ubM4+HM3tjI3NTJ3tXM5drW7d/e9efn++/x//T2//f7//n9//39//76/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/f/6+//5+//5/f/8/f/+/v7///3///3///z///3///39//v4//3z///x///s//ri//LY/+zQ37KVp3VakVtBllpCm1pEmlZBmlNBjkc1i0c0h0Y0gkUyfUQxd0MucUEtcD8uckA1cT84dD85c0E6dD85bz02cD43ckE6cD84cD84bz43bj83bT42bT42bT42bD01azwyazwyaj4zakA0aEA0ZUEzY0IzYUEyY0g3W0EwXEc0XEo2Tj0pRTYhRjciPjYfS0szR0syQ0csQkUoSk0wWls8YWJDX2BBV1o7Y2ZHc3dccnhcV2FIN0QqLzslN0MvNT0uNT0wNT0wNDwvNDwvNDwvMzsuMzsuNDwvNDwvMzsuMzsuMjotMjotMjotMTksMTgwMDcvMDcvMDcvLzYuLzYuLzYuLzYuLDMrLDMrLDMrKzIqKzIqKjEpKjEpKTAoKDIqJzEpJzEpJzEpJzEoKDIpKTMqKTMqKzUsKzUsLDYtLjgtMjwzN0E2PEY9P0k+OUY1OEUzNUIwMj8rMT4qNEIrOkgxP002SlhBUV9IV2RSVWJQSlZIO0c5MDwyKjYsKDIqKDEsJzArZ2RVZ2RVZ2RVZ2RVaGVWaGVWaGVWaGVWaWZXaWZXaWZXaWZXaWZXaWZXaWZXaWZXamRUa2VXa2VZa2RabGVdbGVbamZaamlXbWxXaGxTaHBZaXVhaXVncX53iZeXpbO2v8rO1N3i6vL19f3/+v7/+//+/v78/P33///3/Pzw+fvt9vno8vfj7vPd5+/Y4+zR4OfG3OHB297B3t7G3tvI3dfJ39bN49rV7uLi8+fp+u7w/vT1//f4//j5//r7//z8//76/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/f/6+P/6+P/8+//8/f/+//z///v///n///n///r///v9//r4//74///0///x/P/s/Prj//Pb//jg/+3T4sCnq4Nqh1lBhVM8kltGll1JjFM/f0YydT4pcj4pc0ArdEQudkU0cD4zbDwybz00c0M5c0E4bj40cUE3d0g+bT40bT40bD0zaj4zaj4zaT0yaT0yaD4yZz8zZkAzZkI0ZEM0Y0M0YUQ0X0QzW0QyYUw5VEIuWUo1X1M9UkcxQzskRDwlRUEoQUUsQEkuP0UpOkEiPUIkTE8wXF9AZmlKXmFCbXBRdXleZmxQSFA4Mz0kND0oPUYzNz8wNz8yNz8yNj4xNj4xNT0wNT0wNT0wNj4xNj4xNj4xNj4xNT0wNT0wNT0wNT0wMzoyMzoyMzoyMjkxMjkxMTgwMTgwMTgwLzYuLjUtLjUtLDMrKzIqKjEpKjEpKTAoKC8oJy4nJy4nJy4nKC8oKTApKjEqKjEqLzYvLTQtKzIrKzIqLjUuNDszPEM8Pkg/Pko8PUs6Okk2NkUwMkEsMD8oMkEqM0IrQ1I7SVhBUF9MT15LR1VGOkg5MT40LDguKzUtKjQsKTMrZ2RVZ2RVZ2RVZ2RVaGVWaGVWaGVWaGVWaWZXaWZXaWZXaWZXaWZXaWZXaWZXaWZXamRUa2VXa2VZa2RabGVdbGVbamZaamlXa21XaW1UaHBZaHRgZ3NlbXx1h5eWpLO2vsnN09zh6fH08/v9+f3/+v79/v78/f74/v72/Pzw+fvt9/rn8vfh7fLb5e3V4ujM2+DA1tm61ta819bB3NbG3tfN5NvW6+Hf9+3u+/D0//X5//n8//r6//r6//z5//76//76/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/f/6+P/8+P/++v/+/f/+//3+//v+//r+//n+//n8//n5//r5//35///4/v/2+v/z+v7v///t//zp//Hd//Db//Da8dK9s5B6eFI7ckkzckgwdUgxeUw1fE86eEs2bkEsZDckeE09cEQ3bkI3cUU4bkI3ZjotYzktZz0vaD4yZj8wZj4yZj8wZj4yZUAwZT8yZEAyYUEyX0IyX0QzXkQzXkQzWkUyV0UxVUQwV0gzTkIsXFQ9bmhQYl5FTEoxSUcuSUwxO0QpPUcsPkcqOUIjO0AiREkpVVg5YWRFam1OdXhZdHdcWl5DP0QtNDwkOEArPEMxOEAxNz8yNz8yNz8yNj4xNj4xNj4xNj4xNz8yNz8yNz8yNz8yNz8yNz8yNz8yNz8yNj01Nj01NTw0NTw0NDszNDszNDszNDszMjkxMTgwMDcvLzYuLTQsLDMrKzIqKjEpKjEqKTApKTApKTApKTApKjEqKzIrLDMsLjUuLDMsKjEqKTApLDMsMTgxNz43OUM6P0s9P047P047PEs2N0YvMkEqMD8oLz4nO0ozQVA5R1ZBSFdEQlA/OUc4MT8yLDkvKzYuKzUtKjQsZmNUZmNUZ2RVZ2RVaGVWaGVWaWZXaWZXaWZXaWZXaWZXaWZXaWZXaWZXaWZXaWZXamRUa2VXa2VZa2RabGVdbGVbamZaamlXa21XaG5UaHJaZnNfY3FiaXhxgpWTorG0vcjM0drf6PDz8vr8+Pz/+v79///9/v/5///2///y/P/u+v3q9vvl7/Td5e7T4ujM2N290tW20dG309K92tTG39jQ6eHe8unq/fT3//f8//v///7///78/v35/f74/v/5/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/f/8+v/++v//+//+/f/+//78//36//z6//z5//n3//r3//v3//34//76/v/7+//6/P/49/Tt//72//30//3x//vr//fn+efT6dO+zbSetZmDk3RfdlZBaUg1a0g1cE06c1A9a0Y0Z0IwZkExakUzbEg4bks4bko6bUw5YkEwYkEuYkEwYUIuYUIwYkMvYkMxYEMxXEUzW0YzWkg0WUg0WEczVEgyUkcxUEgxTkgwTUkwZWNKfn5kcHNYVFg9SU0yRkwwO0UqPEYrPkcqPkcoQEUnQkcnSk0uU1Q1dndYeXpbbm5UUlU6QEIsPkIrPkEuOT0sOD4wNz8yNz8yNz8yNj4xNj4xNj4xNT0wNj4xNj4xNj4xNz8yNz8yNz8yNz8yNz8yOD83OD83Nz42Nz42Nj01Nj01Nj01Nj01NDszNDszMzoyMjkxMDcvLzYuLjUtLTQsKzIrKzIrKjEqKjEqKjEqKjEqKzEtLDIuKzEtKzEtKjAsKzEtLTMvLzUxMTczMTsyOkg5O0w5Pk88PU85Okw0NUcvMUMpMEIoM0UtOEoyPU85P1A9PE07NUY2Lj4xLDotKjYsKzUsKjQrZmNUZmNUZmNUZ2RVaGVWaWZXaWZXaWZXaWZXaWZXaWZXaWZXaWZXaWZXaWZXaWZXamRUa2VXa2VZa2RabGVdbGVbamZaamlXa21XaG5UaHJaZXJeYW9gZndvgpWToLK0wMvP09zh6fH08vr8+Pz/+//+///9///6///2///z///x/v/s+f7n8vje5u/S4ujM1dq8z9K1zMy0zsu41c/D3tfR6+Ph9u3w//f8//r+//3///7////9/P/4/f/3/f/3/v/5/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v78/f7/+////f7//f/+/f/6/v/5/v/3/v/1/P7z/P31/f31/P33/f37/v7+/v7//v7/+/n+//v//vr7+vXy/fjy//70//7x//7t//ro//Ld9OPP5tG+0bqouJ6NnYNyjXJheFxHel5JcVVAYUUwVzsmVzwnWj8qWD0oX0QvXkUvX0YwX0YwX0YwXkgxXkgxXUkxXEw1WU03WU03WE03VU02U001UU00TkwzTUsyT1I3aWxRfIBlbHJWUVo9RE0wPUgqOUYqOUYqP0grQkssREkrQ0YnR0gpTE0ueHdZc3JUZWNKU1M5S0o1SEo0REUzOj0sOT8xOEAzOEAzNz8yNz8yNj4xNj4xNj4xNj4xNj4xNj4xNj4xNz8yNz8yNz8yNz8yOUA4OUA4OUA4OD83OD83Nz42Nz42Nz42Nz42Nj01Nj01NTw0NDszMzoyMjkxMTgwLTQtLTQtKzIrKjEqKTApKTApKS8rKS8rKS8rKjAsLDIuLTMvLjQwLjQwLTMvKzUtMkAvNUcxO003PU83PU83OUsxN0kvNUctMkQsNUcvOUs1O003Oks5NEUzLj8vLDotKjYsKjQrKTMqZWJTZmNUZmNUZ2RVaGVWaWZXaWZXamdYaWZXaWZXaWZXaWZXaWZXaWZXaWZXaWZXamRUa2VXa2VZa2RabGVdbGVbamZaamlXamxWaG5UaHJaZnNfYHFhaHlxhJeVpbe5xtHX2uPo7fX49f3/+f3/+//+///7/v/3///1///y/f/v/P/q9/zl7vTa4uvO3ePH09a5zMyyx8Wwx8Szz8i+2tLP6eDh9u3y/vf+//n///3///7//f/6+v/4+v/1/P/2/f/5/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v78//3//v3//f7/+//++v/6+P/39//z9//z9v/y+P/z+v/3+//5/f37//3///z///v/+/X//fn///3///3///3//P34+vry9/jq///x///v///t//7t//zs//Xm/+3f/OnY+OPO/ObO4MqypI52dF5GZFA3YU00XEgvXUkwW0owXEsxXEsxXUwyXEwyXEwyXE40WU82VlA4VlA4VlA4VFA3UE41Tk40S04zTE80TlQ4YGZKZW5RU15ARE8xQEstOUYoPUouPEktQksuRk8wR0wuRkkqTk8wWVg6cW1QamZJYFxDWFY9VlQ/U1I9S0o4QkMzO0EzOkI1OkI1OUE0OUE0OEAzOEAzOEAzNj4xNj4xNz8yNz8yOEAzOEAzOEAzOUE0OUA4OUA4OUA4OUA4OD83OD83OD83Nz42OD83OD83OD83Nz42Nz42Nj01Nj01Nj01MzgyMjcxMDUvLjMtLDEtKzAsKzAsKzAsKzAsLDEtLTEwLTEwLjIxLTEwLDAvKTMrKjgnLUAqNUgyOk41O082Ok4zOU0yOEwwNEgtNUkwOEs1Ok03OUw5NUg1LkAwKzwsKjYqKzUqKjQpYmNRYmNRY2RSZGVTZWZUaGdVaWdYaWdYaGZXaWZXaWZXaWZXaWZXaWZXaWZXa2VXamRUa2VXa2VZa2RabGVdamZbamZaamlXaGpUZ2xVaHJaZ3RgYXFkaHxziJqaqbu/zdje3+jt8vr9+P//+v//+//8/f/5/f/0+fnt+frs+fro9/rl8vbf6u7V3uTK19vA0tK4zMexxL+sxL6wysO71c3K5t3g8+rv/vf///r///3//////f/8+v/5+v/3+//4/f/6/v/6/v78/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6//76/v/6//76//78//z///3//v7//f/++v/6+P/39//19v/1+P/2+f/2+//4/v/6//76//z+//v///r///z///z//vz//v3//P3/+fv6+f74/P/69/rx+fvw+vru/fnt//nr//rr//3t//7q/PDY//vh6tzCnY90XlA1UEInV0kuV0kuWkwxW00yWU4yWk8zWk8zWlE0WlE0WFE1U080U082U082UU82T081S04zSk0ySEwxSU8zSVI1Uls+T1o8PkkpO0YmQEsrP0oqQ04wRE0wSFEyS1IzSU4wSk0uWVo7amlLZWRIX15CXVlAXVtCXVtEWFY/UE45S0o2QEMyPkIzPkIzPEI0O0EzO0EzO0E1O0E1OD4yNz8yOEAzOEAzOUE0OUE0OkI1OkI1OkI3OUE2OUA4OUE2OD83OEA1OD83Nz80OUA4OUE2OUA4OUE2OUA4OUE2OUA4OD83Nz42Nj02NDszMTgwMDUuLzQuLjMtLTIsLjMvLTIuLDIuKzIrKzIrKzIqKTMoKDUkIzccJz4hL0YpNk0xOE8zOk4zOU0yOU0yNkovN0swOU00O082Ok03Nkk1MEMwLD0rKzcrLDYrKzUqXGZOXGZOXmZPYGhRYWlSZWpUZ2pXZ2pXZmdVZ2ZUaGVUZ2RTamRWamRWa2VXbGZYbGZWamdYamZaamZbamZdaWVaaGRYZWZUZWhTZGxVZW5ZYW5cYXFmcYSAlaertsfO0dzg4ens7/f59P389/35+f74/P/2+//x9ffp+Pnn9vfl8fDc7u3Z6+rV4N/K1NK91s+8ycGuvbSlvLKowrexy8HA29LV6uHm+fL6/Pf+/vv//v3//f7/+f38+f76+v/7/f/8/f/8/f/+/f/8/v78/v78/v78/v78//76/v35/v35/v35//34/v34//75//77//38//z7/vz9/v78/v/9/v/9+v/5+P33/f/6+/z2/f31//74//74//r1//jy//r4//r//vv//v3//v7+/f/+/f/8+v/7+v/7/f/+/v7+//78//75//3y//3t//3q//7m+PTb/vrf5d/FjolsVE0wV04xVEssU0orVk0uVk0uVE4uVE0wVE8xU08yU08yUVA0T04yT04yUE8zUFA2TVA1Sk41R00zRE0ySFE2RU4xQUotPUYnPUclQUsoRUwqRU0oUFY0T1UzSk8vSEssUlU4YmJGYmJGWlo+WVk/WlpAXFpBW1tBWlo+V1c7VVQ4U1E4RkUwRUQwQ0IuP0AuPj8vPT8xPT8yPUEzOj0yOD4yOEAzOEAzN0I0N0I0OEMzOEM1N0I0N0I0NkA1NkEzNkA1NkEzN0E2N0I0N0E2N0I0N0E2N0I0OEI3OUQ2O0U6O0U6OEI5OEI5N0E2NkEzNj4xNDwvMjovMDcvLTQtLjUuLTcuLDgqLTooMEAmM0YmNkwmOVYqOFcrOlYuOVQzOlM2OlA5PE85PVA6OUszQFI4RFg8RVk9Qlk8PVQ4MkkvKTwoKjYoKjQpKTMoWWdNWWdNW2hOXWpQYGpSYmxUZmtVZ2xWZ2hWZmdVaGdVaGVUa2VXa2VXbWVYbGZYamdWamdWamZaamZaamZdaWVaZ2VYZWZUZ2pXZW1WZm9cZXJhaHhud4qImqywt8jP0Nne4Ojr7/f59f77+P76+P/3+/7z+Pzt9vno9vnm9PPf7OvX6ebT5eLP2tfE0Mu4yb6swbSkua2fu66lwbayy8HA2s/T5d/j+vP7+vf+/vv//v3//P3/+/z++f38+v79/f/+/f/+/f/+/f/+/v78/v78/v78/v78//76/v35//z5//z5//34//34//75//75//36//z5/fz6/v37/////////f39+/v7//79//77//z5//jw9+zm7+Xb9efe+/Ho//v9/vz//v7+/v78/f/6/f/6+v79+v7//f7//f7///3///78//71//7t//7o///j9vTb+/vh4eDEiYhqUUwvUk0vUkwsUUsrVE4sVE4sVE8vU1AvU08yUVAyUFA0T08zT04yT04yT08zTVAzTU83SU81SE40RU4zRlA1RE8xQUotPkgmQUgnRU0oSU8rSlAqTVMtTlQwVVs3XGJAX2JDWVw/VFc6VFQ6VVU7VlY8V1c9V1c9V1c7Vlc4VlU3VVQ2UEwzTkkzSUcyRkMwQ0IwP0AwPz8zPkAzOj0yOD4yOT8zOEAzN0I0N0I0N0QzN0QzN0I0N0I0NkEzNkEzNkEzNkEzN0I0N0I0N0I0N0I0N0I0N0I0OEM1OkU3O0Y4PEc5O0c9O0c7O0c5Okc2O0QzOUIxOEAzNz80Nj01ND41MjwzMD4tM0MpN00pQVguRWEwTm86TG47SWg8RGI+QFk8O1M7Ok06OUw4PE42RFc7SV1BTGFCSmJCRVw/OVI1LkQtKTUnKDInJzEmWWdNWWdNW2hOXWpQYWtTYmxUZ2xWZ2xWaWpYaGlXamlXamdWbGZYbGZYbWdZbWdZamdWamdWamZaamZaaWVcaWVaaGZZZWZUZ2pXY2tUZG1aZnNibX1zfI+Nmqyws8TLzNXc3ubp7/f59v/++P769/729/rv9Pjp8fTj7vHe6ejU4N/L3NnG19TBz8q3x8Cuv7SivbCgvLCiw7aty8C81cvK4tfb6uTo+/T8+/j//vv//v3//P3/+/z++v79+v79/f/+/f/+/f/+/f/+/v78/v78/v78/v78/v35/v35//z5//z5//34//34//34//34//36//z5/fz6/fz6/v7+/////v7+/Pz8//79//77//36+vPr6t/Z4NbM693U9uzj//v9/vz//v7+/v78/f/6/f/6+v79+v7//f7//f7///3///78//71//7t//7l//7i+Pbd+/vh4N/Dh4ZoT0otUUwuUkwsUkwsVE4uVE4uVE8vU1AvU08yUVAyT08zT08zTk0xT04yTk4yTVAzTE42SlA2SU81Rk80RlA1RE8xQ0wvQkwqRk0sSVEsT1UxUlgyUVkwV182aXFKeIBbcHZUWF09S1AyTVA1TlE2TlA4UVE5UVE3VFI5VVQ4VlU5V1Y6VlI5VE85T004S0g1R0Y0QkMzQEA0PkAzOz4zOT8zOT8zOEAzN0I0N0I0NkMyNkMyOEM1N0I0N0I0NkEzNkEzN0I0N0I0OEM1OEM1N0I0N0I0OEM1OEM1OkU3O0Y4PEc5PUk/PUk9PUk7PUo5P0g3Pkc2PEQ3O0M4PUQ8OUM6NkA3M0EwOEguQVczT2Y8VnJBXn9KWnxJVXRIS2lFQls+OFA4NUg1MkUxPE42RVg8TWFFUWZHUGhITGNGP1g7M0kyLjosLDYrKjQpWGZMWWdNXGlPXWpQYWtTY21VZm5XaG1Xam1aamtZa2pYa2pYa2hZbmhabmhabmhaa2hXa2hXamZaaWVZaWVcaWVaaGZZZmdVZWhVYGhRYWpXZXJhbX1ze46MlKaqqLnAxtHX2eDm7PT39P389vz49Pvz8vXq7fHi5+rZ4eTR29rG0tG9zcq3yMWywr2qvbakw7imx7qqzMC01snA3tPP6N7d8+js+PL2/fb+/Pn//vv//v3//P3/+/z++v79+//+/f/+/f/+/f/+/f/+/v78/v78/v78/v78/v35/v35//z5//z5//34//z3//z3/vv2//36//v4/Pv5/Pv5/f39/v7+/v7+/f39//v6//77//36/PXt7eLc49nP8OLZ/PLp//v7/vz//v7+/v/6/f/6/f/6+v/7+v7//P3//f7///3///78//71//3s//3k/v3h+vjf/v7k4d/Gh4ZqUEsuUk0vU0wvU00tVE4uVU8vVVAwVFEwVFAzUVAyTk4yTU0xTk0xTk0xTU0xTE8yTE42SlA2SlA2SFE2SFI3RlEzRk8ySFIwTFMyT1cyVlw4XGQ7Z3JHc4BUhpNoj5tzhI5pa3VSWWA/Ulc5S080S001TEw0TEw0T002UU82VFI5VlQ7WFM9VlE7UlA7Tks4Skk3REU1QkI2QEI1Oz4zOT8zOT8zOEAzN0I0N0I0NkMyNkMyOEM1OEM1N0I0N0I0N0I0N0I0OEM1OEM1OEM1OEM1OEM1OEM1OUQ2OkU3O0Y4PEc5PEg+PEg8PEg6PEk4Pkc2PUY1PEQ3PEQ5PUQ8OEI5NkA3M0EwOUkvQ1k1Umk/WnZFWntGV3lGUnFFR2VBPFU4MUkxLkEuLD8rNkgwQFM3Sl5CUWZHUWlJTWRHP1g7M0kyLzstLjgtKzUqWGZMWWdNW2lPXmtRYmxUZG5WZm5XaW5Ya25ba2xabGtZa2pYbGlabGlabmhab2lbbGlYa2hXamZaaWVZaGRbaGRZaGZZZ2hWZmlWYGhRYWpXZXJhbHxyeIuJjZ+jn7C3wczS1N3i5/Hz8fn78/n38Pfw7fDn5+vd4OLU2NvI0dC8y8q2x8Www76qvbikurOgyr6u08a23NDE5tnR7eLe9evq/vP3//r+/vf//fr///z//v3//P3/+/z++v79+//8/f/+/f/+/f/+/f/+/v78/v78/v78/v78/fz4/v35//36//36//34//z3/vv2/fr1//z5/vr3+/r4+/r4/Pz8/v7+/v7+/v7+//v6//z5//v4//jw9+zm8Obc+Orh//Xs//v7/vz9/v78/v/6/f/6/f/6+v/7+v7//P3//P3///3////7//7z//3q//zj/Pvf/fvk///o5OLJioltUk0wVE8xVU4xVU4xVE4uVU8vVVAwVVIxVFAzUVAyTk8wTE0uTUwwTUwwTU0xS04xTE42SlA2S1E3SVI3S1U6SFM1SlM2Tlg2Ulk4VFw3XGI+ZW1EgZFikqZznrKBmqt+kqF4hpVucXxaWmNES080S001S0o1Skk0TEo1UEs1U044VVA6VVA6VE85UU86T0w5S0o4Rkc3REQ4QkQ3PD80OkA0OkA0OUE0NkEzNkEzNUIxNUIxOUQ2OEM1N0I0N0I0N0I0N0I0OEM1OUQ2OEM1OEM1OEM1OUQ2OUQ2O0Y4PEc5PUg6O0c9O0c7PEg6PEk4Pkc2PUY1PEQ3O0M4OkE5NkA3NT82NEIxOUkvQVczTmU7VHA/U3Q/UnRBTm1BQ2E9N1AzLEQsKj0qKTwoMUMrO04yR1s/T2RFUGhITGNGPlc6M0kyKjYoKDInJS8kClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdGltYWdlcy90ZXN0aW1nZnN0MTAwLmpwZyBiL3Rlc3RpbWFnZXMvdGVzdGltZ2ZzdDEwMC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2ZDliNzUuLjAwMDAwMDAKLS0tIGEvdGVzdGltYWdlcy90ZXN0aW1nZnN0MTAwLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RpbWFnZXMvdGVzdGltZ2ZzdDFfMi5wcG0gYi90ZXN0aW1hZ2VzL3Rlc3RpbWdmc3QxXzIucHBtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTdmMzEwLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbWFnZXMvdGVzdGltZ2ZzdDFfMi5wcG0KKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLVA2Ci0xMTQgNzUKLTI1NQotMC8rMTAsMzIuNjMuODMvODMtOjMtOjMrNzIuNjEtNjEtNzIuNjEtNjEtNjEtNjEtNC8rMy4qMy4qMi0pMi0pMi0pMi0pMi0pLywlMC0mMi8oMzApNjMsNzQtOTYvOjcwQTstRT8xSEI0SkMzTEUzTEMyTEQxUEUzUj8wZkIygkQ1nEU0skQ1vkQ3xkY7ykc/6kNL60RL7UNG8z9C9zo+8zo/5EA/0j46tUAstD8rs0AtsEAsq0AspEEsnEIql0EokUAtkT4skT4skD4plD8rkz4qlT4qlj8rk0A4mz8yrkMxvUQxuUExpEc4eEQ2SjcmOjY1ODQzNjIvNDAtNjMuNTItNTItNDEsLDErLjArLzArMi4rMy4rMykoOCwsRzk5c0NDjk1LpVpepHCGin+peoe8ZWubU0dvTklgT0xdampyj5SQnqSYlZmIcnNhV1ZEVVFiVVFiLi4sMC8rMjEtNTItNTItNjErNjErODEpNjEtNTAsNTAsNjEtNjEtNjEtNjEtNjEtMy4qMy4qMi0pMSwoNC8rNC8rNC8rNC8rMi8oMzApNDEqNTIrNTIrNzQtODUuOTYvPzktQjwwRT8xRz8yR0AwSD8uSUAvTUExTEMyW0QycUQxiEEvljsppjwss0M1ukk73UFE4kRF7ERE9j9B+To/8zw+4UI+yUA2sUEtsEAsrz8rrj8sqUAroUErmUEplUEpkD8skD8sjz4rjzwqkD4pkD4pkT8qlD8rk0E1nkEytEMzwkM0wEY5o0k+cEQ3RjoqPTg1PDc0OTQxNzMwNjMuMzItMzItMjEsLTIsLTIsLzEsMTAsNDAtNS0rNiwrPjQzYDsyfEY6kFBOkmd4gXijc3+5Wl+WTkJyTkNjTUhfT05cb3N0f4Z+f4V3amxeVldHW1VfW1VfLCwqLS0rMC8rMTAsMzArMzArNC8pNC8pMy4rMi0qMi0qMy4rNC8sNC8sNC8sNC8sMy4rMi0qMSwpMSwpNC8sNC8sNC8sNC8sNDEqNDEqNDEqNTIrNTIrNjMsNzQtOTYvPDUrPzktQTsvQjotQzsuRDssRj0uSz8xRkk2UEg1YUUwdEEsgjsnkj0poUQyrk08z0VC1kVA5EI/8jw7+jk87z071kM7ukEwrUArrUAsrD8rqT4spD8rnj8rlkApkT8pkD8sjz4rjj0qjj0qjj0qjTwrjj0sjj8ulEMypUEyvEI1xkE4uUQ7m01DY0M4OjstQDg1PjYzOjUxNzQvNDMuMjMtMTQtMDMsLDMsLDMsLTIsLzEsMjMuNDAtMS0qNTAtTjcpYj0tcUU8gGFwfHakbnm7W2CiTkaCUEFqSkBiRkNYRUhRUlhWVVxUUVdLUlhKYFhVYFhVKiwrLCwqLi4sMC8rLy4qMS4pMS4pMi0pMS0qMCwpMCwpMS0qLysoLysoLysoLysoMS0qMCwpMCwpLysoMS0qMS0qMS0qMS0qMzArMzArMzArMzArNDEsNTItNzQvODUwOjMrPDUtPTYsPjUsQTkuQzktRjwwSz8zREU1TEUzWEMyZj8udTwrgzoplD4tn0Y0u0Y8xkg82kU+7kE98jo65z45ykQ4qUAqpkEtpj8spj8spD8toD8smj8slD8rjz4pjT4tjD0siz4sij0rij0tiDwsiT0viz8xk0UxqEI0v0M7w0I8t1BJmmBVZVVIPkk7PzgwPTYwOTQuNjMsMzQuMTQtLzQtLTQsLTQtLTQtLTQtLjMtLzEsMjMuLzArMC8rPC8pSzUoW0I7fWx+iIi8eoLNa269T0yTSj1oRD1fREJYPENNQkxLTFdPTVlNUlxRYVpKYVpKLC4tLC4tLC4tLS0rLy4qLi0pLywnLywnLSwqLSwqLSwqLSwqLSwqLSwqLSwqLSwqLSwqLSwqLi0rLy4sLy4sLy4sLy4sLy4sMCwpMi4rMy8sMy8sMi4rMi4rNDAtNjIvODErOzQuPDUtPjUuPjUsQDYtQzkvSDsyRz80TEA0VD4zXTktbTksfjgsjjwumD8xpkIzs0U2yUc63UQ+50I+3kU/vEQ0n0MsoEEtn0Asnz4rnj8tmj0slT4rjz4rjD4qij0riTwqiDwshTwrhj0uhT0vhT8ziEI2kkc0qkg7vEU/u0xFsGZbl3pqcnRmTV1QTUk+QT8zOjcuMzMpMzQsMDMsLTIsLDErLTIsLTIsLTIsLTIsMDItMDItMTItMTItNy02PzQyUklEgHyLkpTFiZDYcXnBYmimVFFwSUtiTFRhXWtscYJ6eYt/bX1wXGpbYVtDY11FKy8wKy8wLS8uLS8uLS0rLSwoLCsnLCsnLCspKyooKyooKyooLCspLCspLCspLCspLCspLSwqLSwqLSwqLi0rLi0rLy4sLy4sMCwpMS0qMi4rMS0qMCwpMCwpMi4rNDAtOTEuOzMwPDQxPTQvPTQtPzQuQTcuRTgwRzo0Sjs0Tzo1VTYxYzYwdTYtiDoulDwwmkEznkEyrkI1w0U50Uc9zUg/sUY2mUIumkIumEAsmT4smj8tlj0tkT4sjD0siT4riD0qhzwphDsqgzssgTsvgT0yg0A3hUU7k0s8o0lAskxHrl5VpoFuk5V/eot4YW9gUFRDR0k7PT8yMjQpMDEpLi8pLi8qLzArLzArLzArLzArLzArMDEsMDEsMDEsMDEsNis8NzExU1VIgYeHjpWyh5K/gI+2hJqyh5abfI6Odo2FgJuMkKyWjqaQf5WAYHFeWlY5YFw/Ky8wKy8wKy8wLS8uLi4sLS0rLSwoLSwoLCwsKysrKioqKSkpKysrKysrKysrKysrKysrKioqKioqKioqKysrLCwsLS0tLi4uLysqMCwrMCwrLiopLysqLysqMS0sMy8uOjIwOzMxPDQxPDIwPDMuPTIuPjMtQjUvQDcyQjk0RDk1SDcwVTcvaDgufjwwjD4xlj82k0AymkMyqEQ0tUU5t0c7p0I2lkAxk0EslD8rlD0slD0skjwtjj0siTwshTwrhjsohDsqgjorfzorfz0xfz81g0Q7hUlBjko/nUpEqldRpnVmmZl9iaiIfpqBc35tXGhSSlZCPUY1ODwuMTIqLi0oLysoMiwsMCwpMCwpMCwpMCwpLy4qLy4qLy4qLy4qNyk4NDEoUVw+foxyjpuUjJuejaifn8arn8CrnsKoj7SVi7COkLSQiqeIfZZ5Wm5VU1Q1VVY3LDAzLDAxLDAxLjAvLzEwLy8tLi4sLy4qLi4uLS0tKysrKioqKioqKioqKioqKioqKioqKioqKSkpKCgoKioqKysrLS0tLi4uLysqLysqLiopLCgnMCwrMCwrMi4tNDAvOzIzPDQyOzMxOzEvOzEvOzAsPDEtPzIsOjcwOTgzOjk0PTgyRjMsWjYqcTkqfzwrjzozjT8zjkIyk0Ivnj4uqEI2oEA0lT8ykUArkD0rkTsqkjwtjzwsizwthzsrhDsqgzongjkogTkqfTksfj4ygEE4hEhAiU5IjElBnlBMq2RepYh2jqaEf6+JfZ6Bf4Z0ZnheWGdQSFRAPUM1NTcsMS4pMSknNCorMiooMiooMCsoMCsoMCwpMCwpMCwpMCwpOSgyMzIeR1codopZjJ17jKCEj7CBnM6JoM6nnMuhhrWHhLKDhrCCgqV9c41qU2dLSUwvRkksLjEoLzIpMTIqMTIqNDQsNjMsNTIrMzApNy8sNi4rMi0qMCwrLiwtLS0vKywwKSouLygvLygvLiktLiorLSwqLS4pLi8pLi8pLC4tLi4uLy4sMi4rMi0nNi8nOTAnPDIpPDUrPTYsPTQtPDMsPDMuOzAsOzAuPTIwRi8nOTcqLjosMzYtQyspUScoWTIrXUEzdkIshkExlD4xkzkujzwsjUIvjkMujkAsmzgyjz0xgkEvfEIug0Iwhz4vhzsthDsseDwxcDsrc0AtdDwrgD4wikg8h01BgVFDmExOjW1geo1vfaKAjKaJkqaLgqOGa516YI1iWHxWWm5SUVVERj83Oi4uNicsMiUsJC0qJysqKyksMSgtMygwMycxMCkxLSoxMS0uLi0oSEs4d4JgiJtuiKNuhqdwkLZ9nbuHkrSBhqt4g6l6g6Z8e5h5bINpVGNQQ0o6O0IyMDMqMTQrMzQsMzQsNjYuOTYvODUuNzQtOTIsNjEtNC8rMi4rMC8tLy8vLi4wKistMCouMCouLyssLysqLy4qLy4qLzAqMDErMDAwLy8tMC8rMi8qNjErOTIqPTQrQDYsPzguQTgvPzYtPTQtPDMuOzAsOzAuPTIwQjQrTy0sWCYvTCgsPjErOzMoUTAnaC4saTsseT0yiTw2izs0hz41hEI0hkI1ikI2iz8viD8uhj8thzsriTorhzoqfzwpdz8ofDwwdjstdj4veD4wgkI2ikc+iUtAiE9Emk5OlGxgg4ltfKB8gqqFi6qKjaGFhZV7YZlqW45jWodgU3ZYRV5INUc3KTYsJC8nNCUoMiYoMSgrLyssKywuKC4uJS8wJDAwMiwuLismREc2c35gfJFof5trfZ9sgKdyhap0gKdyfqZyfqV2faJ5eJZ0aoFlUmRMQUM1ODosNDcuNDcuNjcvNzgwOTkxPDkyPTozPDkyPjcxOjUxOTQwNzMwNzMwNTQyMzIwMTAuNSwtMy0tMy0tMi4rMy8sMjEsMzItMjMrMzMxMzQvNDMuODMtPDUtPzYtQzkvRDowRDwxRDwxQjkwQDcuPjUuPTQvPTQvPjUwQDcyUi8zXCg0US0xPDgvNDsrRDYpWi8oYDgwcTo1gTk6gzk4fjo3fUE5gUI7hUA5fkYvgEIthj0sizkriTcpgjspeT8pcUIohTIqkkg9fDouf0U5fEg7f0s+gk5BilRIbm9Pe3dahoJljJd3gaR8fa2DeqqAdZ95hI1uf41se4xscoVpZXNaVVpGR0EzPC8mOSkpMyknLCsmKS4oJy0pKiwpLCorMSgrMionPzswUFVBaHdYbodfcJFicphncZxndaBqc59qeaV0eaN1d5xzc5JwZ4BiTmVIQj4zOjYrNjkwNjkwODkxOToyOzszPzw1QD02Pzw1QDs1Pzo0PjkzPTg0PDk0PDk0OjcyODUwOTEuOTEuNzIuNzIuNTItNTIrNDQsNTUtNTQwNzYxPDkyPzsyQDkvQzswRjwwSj4wSD40SD40RTsxQTgvQTgxQDcwPzgyQDkzPjkzPzw1QT43RD0zRjkwSTksSDsqRj4pZzMoejkzjkA8k0RAkUhBgj82gjkwizw1gUE1gkA0gT0yfT0xeT8xeEAxfD4xgTsxozMv5X97pFRLgUw+bk87aVU9c1hDg2BMY4BQk3hdvmVfzGJkyX92rpZ+lqB9h513jZBxh5Vyfphzc5dxaY1nX3hYU11CQkQuQjUtOjMpMTEnLjEmNDEqPC0qRicsTSQsTUUyYFtFZm1OanxWaINWaYtZb5ZhcZlkcJxpbpppd6B0dZt0dJZzb45sZYBfTWdETEM6RDsyODsyODsyOjszPT42PT01QT43Qj84Q0A5RUA6RUA6RD85Qz44Qj41Qzw0QjszQjszQTgxQTgxPzgwPzgwPDcxOjcwODUuNzQtNzcvOTYvPTkwQTowQzswRz0xTEAyTUExTUE1Sz8zRz0zRTsxQjkwQDkvPjoxPzsyQzw0STgxWzw3aD03bz43cj4zeUA1g0k+jkY3mkc5nT81nj4yoUk7o008o0c4qEQ1oEJDkzk5hzw3dUE0bEU0d0M2hzEwrDdA3lBOyEZExWJcgk09aFxCYWZGbGdJf2pPtmVU4lVb+ihF/yFJ/zVT71Fg5Wdr4GxvyHVxw3pzuYB1soR1q4FzqHZto2Rfm1RSk0hPfz5CaDg2TzArSjMtRjMsSjIuUTg0XVIyZmNAcXlSdIZcbYlZb49ddJdhdpljcpdudZdyepl5fpt/epR5bIZpY35dTmlGVE5CUUs/NjkwNzoxPD01P0A4QUE5Q0A5REE6REE6RUI7RUI7RkI5RUE4SUI4SUA3Rj4zRDwxQzswRDwxRDsyQzwyPTkwPDgvOTYvODUuOTYtOjcuPTkuQjwwRT0wSj4uTUAvTUAvTT8yTD4zSDwwRTsxRDwxQDwxQDwxQD00UTkvkUBG1U5f1lJdmT83lEg4uUxH2z9KoUYzpkAxqzstrT8wqkMwnzskqj0psTwrszY8vD9FuUhKo0xFfjwugzUrvUJH4UBS2jgzzDczyVRNlVZFcGJFb3BOgGtMpXNc/0tX/ThK/zVM/zBK/zVN/TFK/y9J/y9O/zVW/zla/EFg+EVj9UZl9UNn/ENs/0hy/1h671Vx21xxqk9YZS8tTzwuO0AsOUszW1EuaWVCfIJgfYxreI5qdY1peI5ofpNsjZ+FlqiSoK6dorCjlKKTd4p2YXpcT2pHVldFWFlHNTgvNjkwOjszPj83QUE5REE6RUI7RkM8R0Q9R0Q7SEQ7S0Q6TEQ5SkI1SD4yRz4vRj0uRTsvRDwvRDwxQTowPjoxPDgvOzYwOjgsPDgtQDouRDwvRz4vS0AuTkEwTUAtTj4xSz0wRzsvRDouQjwwQDwwQD4yQEA0dTo0zlVe7DxQ0CsypDQmkT0jsz8w1zQ1pEAwqjwvtkA2u0c6qj8tpToorzopwUE0yEI53T8+6To/4z9A0UQ92VNK3D496DA42jYq0DMquzgwsWJTgFtBgl9DrmNQ2mdg9j1F4TxA10hE31FP6ktP8jlH+jFE/zRK/jlV/DpV/z1d/0Jk/j9o/EFs+kFt90Bu/z9o/0Zr+Etp6FpwvlpkbDcxUUExRks0YlVCg3xqmZuNk52SjpuRmaWbl52Tra+kwsK2ycnBzcnIxsTHsbOwh5OHZXlgUm1MVV5DV2BFNDcuNDcuNjcvOToyPT01QT43RUI7R0Q9SEU+SEU8SkY9TUY8TUU4TkQ4T0M1TkIyTEMySkEyRj4xRDwvQjsxQToyPTkwPDcxOzktPDgsQTsvRD0tSUAvTEEvTkEuT0AtTj4xTDwvSDotQzktQTsvPzsvPz0xQEA0nkNCvEhJuS8vtjAlqTkhnUMhmUMinD8gnzgvpTYtsz43tEI4qz8zpzsuukQ6wUA6xD4j5DIm/yAk/yMp9yon6DMo5TMn6y8m1jci1DYqxDszw2VZnmFOn1tI3GFc8UNM7T9B00A5vkA0zkE68kFJ/zRH/DZH9T1J/TtT/ThU/zda/zlj/z5t/z9w/0B0+UF1+kdl/0xq/k1q/2F872Z4z2pymFRRf1BIjn96s6mnvLy+uL3DvMPNxsjU0s/a49nk7OHd7eHj69vl4tbgx8LImJ+YboBqXHVXXm1OXWxNMTEvNDQyNzgzODkzOjszPT80QUM2REY5R0k+SEk5SUs1TU0zS0o2SklEUlBbS0leT0Y3SUAxSUE0RDwxQjszPzgyPjk1OzYzQTYyPzc0PDs5PT09P0A7RUE2TEEvTz8oQEItSjkxTjQ1RjY5OD84MkUyN0EpUUszvUw8oTYknzomoD0moT0mrj8rszoptTYloTopoTwqp0IuqUIvqT4qtD8twkQ1vDgrzTYryzws0T0v4jcv8i8t9S8s5Dcp0z4o2jgj0TkkwzcmyUU41UpD8VNS9kFG/jlC4ERFzEE8sjwwqD8sv04+1klA7D9B/zxG+EVL+0VR+0BT/0Fb/0Vp9z5n90Nw/Ex7/0t37VJy51lx/1l6/0hx9ExwwGh2em1kuqCR3dXK4OTj5ODu9Nr1/973/+n2+PT1+/jz9/Pw8evr6ePl2NTVtra0jJGKe4V6hIt5foVzLi4sMDEsMzQvNTYwODkxOz0yP0E0QkQ3SUc7S0k6Tkw3T004TkxAYF9kdHSMc3aZamJ3Vk9fSkRQQz5EQT0+OzgzPTkwPTktOTYtPDkwPjwwPjwvRT8xSz8vTz8vUD0sN0EmPD0rPjovOzgzPzo0UDIwcioupTpEpTcmpDknojwmnzskpz0ntEEuvT4twTwtsD8vqzoqrDsrrTwqszsqw0U2wj0uwzcq1jYq1Tks2jos5jMs9C4r8i8p4DUkzjkh3DMg2zoo0TstzD81xToz2ERA50lG5UA+00M7xT80sjosqzwrtT0v1UpD5EBB/EdO8UBG+kZP/URU/EBZ/0Rl/0Zv/0x5/Ux6/0Z4/011/1d4+lBt+Etp1ktg04uOZFdHwZeL+OLX+/f2+PX//u3//+7///b///38//75//r2/vX2/fL27uXmzcnGrrGop62hqrKjpKydMzItMTArMjEsNDQsNzcvOjowPj40QUE1S0U5UEk5U0w5Ukw8VFBNcXKGjZC7kpnQkI/LgH20bm2ZXFt7UE9hQUBFOjk0OTcrMzgyODovPzwrRD4mST8mS0AsSkEyST81Tzw2RjkzODkzLzwyNDwvTTUriT8+qDc9qD0rqkEspz4pqT8prDkmuTwqxDotzDwxwz8zvTktvTktvDgrxT0xyjwwxjIozzgt4jEp4jQp6TQr7zAo9i8q8C8m3jQjzDcf2TIg1zQj1jgs1EA220xEzEM50ExAxUM2vzssujsqtToquT8wvT0yy0A720VG60xQ7UBE9kdO/UtZ+0Vb+UJg/kls/094/0x2/1B8/092/1R1+U9p7E1h/3qG/5udlktGvn92+tHL//f0/vz//fr///n///v+//z5//z2//v4//f4//P19uzr4NjV1NHI1NbIy9XNvsjAOzszNjYuMjIqMzMpNTUrODguPDwyPz81TEI2VEg4V0w6VEo+V1JYd3iXlpzWoqv2o6j5nKDql5vbjZDFgIKpaGiEVFNlS0lWQ0VUPj1DPjsyQz4qQ0EqQkMxP0U7O0RBQkFTSk1cTVdgTFhWTE5DYUo6iVI+jUAsqj8rq0Asr0ItsD0qtjknwjgrzDgs1DowzjkyzTgx0Tozzjcu1j4z0jUs2Tsw2Tgu6TEn7TEo9C8p9iwo9y4n7TMn3Dckzzkh0TkkzzYk0zcq0Tct30pD511TyEg9tz8xtj4ltjwluTonwj4xyEI5z0ZA00lH00lH6ERF70lN+1Fa+k5e9kVf+kho/1B0/1F46lt39lx4/VZw+VJm/1ts81Jh8k9g80xevHFs77iz/+3p//z7+f//+f///Pz6/Pn0//v1//z5//T0+Orq7N7d5NvU7+nd+Pfl5vHtz9rWQT8zPjwwOjgsODUsNTIpNjMqOzgvQT41S0E1U0c3V0o5Wk5CVU5VcHCUj5jZnaz/qbX/rLb+q7T5q7DyoKLfi4zEdHGmX12PXVSDVk9xRUFQPz89PkE2P0c8O0RBRk9UTWyLaXyagnyWj2p8oFhjr1JNq0ExpzshqDsnrD0psTwqtzoovTUnyjgr1zox3Tox3Do13Ts23zw14T435UE43jsy7kxB81FG7jYs7ywm+Cso+ioo9jEr6TQp1jMk0jclxT0lyz0nzzko0DYq0zkv405I3E9IwDkztz0lujwlvToowzstyUA22VRNyUpDw0ZA4khG6U9P7VFV7U1X+FNk909o/lFv/1Jz7Vd0+1x4/1pz/VRn/1ln/1tq+Ela/01jqmdf0ZyW+drX+/Pw9//99////f/8//r3/frz//f0//f17+Hg4dPQ6N7U/vfl///r7/j11t/cR0M3REA0QDwwPTkuOTUqODQrOzcuQDs1R0A2TkU2VEc0V0o6V05RaGeGh4/Nl6f1qbP4rrj9srv/srn/rLD5nqDqjIvXeXbDb2SoYlqTUlJ2QkNVPDo/UUFCZEdLh2Jpr3GivHWhwmaNyE1s0j5U2D9EwTkrtT0irDkmsDgnuDspwTwtzD0v2T814D003zgw1jMs2DMt5j834jsz2zQr1jQn2Dgq1Tkq8Uc49Toz9ykp+yot7i4r4jQt1zMp0zEmzDsozzwq1T4t2Dwv2T0x1z446lJR1EBAwTwpwDsowTkpwDgqxD4y0E5ByU1Bv0U41Ug/3E9I31FP3k1Q8Vll/V5w+lRs+lBr/0tz/1d2/1Zt/19w/V9t9GJs5GZq0WNifVdKoXty38C99+no9/z49v/+/v////r9+vvz/frz//r39+7p4tjP5N3N//vl///m8Pfw3eTdTUo5Skc4RkM0Qz8zPjovPDgvPDcxPzo0Q0A3S0U1UUYwV0gzV0xIYmB2g4q+lKPop633q7H7rbP9rrL8qa33oqbwmZ3njZHbhoXLbnKvYmiYXFl4a1BjiEpVtVFZz1Nb8EJj5Ude1UFPzTM95UFI3T8+ykI2ukUxvEExwUIxyUQ11EY410A11zku2DQr2zQr2Dct3Tox3Dgu3DUs1jQn0zYnzDUi0D0p1T4t8EI5/jY4+C0w6zIw2C8q1zIu4DQy6jcy5jow4Dos1zor3UU46VRN1UE/30pM0T40xzcsxTsuwDwtuzwrwEMxwUQyvD8txUU4zU1C0lFL009N6l9k/2l1+Vps+FJo/1J2/Vdv9Wx27WZt9GJt7mhx03t5nXJiX11IeWdby62r9uDi/Pj3+f////////n/+//3/P/2///4//z07+fc6+bT//3k///i8/fp6u7gUU49T0w7S0g5SEQ4REA1QDwzPzo0QDs1QUI8Skc4UUYwVkcwU0k/YF5sg4q2k6Heo6T3qKn8q6z8qq36pqrzoajsoanqnqfolp/gjZnViJTEjIaqlmmAuVNh4ENM9zg/6UAt1kktwkspvEUn3VA/3Do34jw+1DU5wUIxwz8wxTksxTMmzTMn1DMp2DQq2jYs3T802Tkt2zku1jQn1DQmzjUjzDsmxzsixTon3DUs+Tc4/jc88js93zo44Tk55TU4/Csw9C4t5DIo1TUlxjUk7mFXzkA81UZI5klEzzgxxjkvvz0tuT4su0EsuTonvj0otjwtwEY5x01CyUxG5mFi+mpz/WJy+llr+l5z4Gtx44qE4Hd0/nB87mFx852et5qKS2JGYF1OvqSj9tzf//f7/f7///3///f/+P/3+P70/f72///2+/fr9vTf/v7i///h/f7u+/zsWE9AV04/VEs8Ukk6TUQ1S0IzSUAxSUAxREQ6S0g3UkozVEw1VU5GYWBygYW1kpveo5/0n6D8n6X/oKz/n6zyoqfnq6Xtr6L0lar9kqLdrJ28vmx63UBJ9TY+6jw+1UZA4TpC0z8/ykM/z0A86UNH7Dk/4jk81Dw5y0A5ykU8xUc5tToruzkrxjYt0zEs4DQy4T4t3zQj5Tgn2jUhzTcexjggyzgozzUp0TMqzjgqyTgl0TYi4DIn7DAu7Csw6i008ysu7C8r4zUq1DckxDMe3E8+2UtB0kE83lJR0kRAyTkwyDkpxjsovjoluz4qtj8rszstuD4vvT8ww0Ez8W1h7Whh72lm9nBv/21672Rr8mFk9XRv/Xt5/1Zt9YGOfaaGU2lCYGRJvKyf++bj//j4/Pr7+///+v7/4//t5v/q9//z///y//3t//jn/Pbg/fng/P77/v/9WlFCWE9AVk0+VUw9UUg5T0Y3TkU2T0Y3SUc7T0o3VEw1V0w2Vk1EYl9wfYCripPOlpfYlprkmaDwnKXwnKflmKHamJzbl5bcjJLOqIa5yGyRz0db3UFF4kA+4z9A5D1E3DtA0UFAwj451ktG4j9C5zo+2Dg4zD01ykA2vjotxkg5uTwqvDgpyzks2zgx6Tw40zUp2jYs2zcr1j0rwDkjuDslujwtvTkt6z872z0xyDomyDoi0Dcl1DAk2DEr1DEs2DEp1zcrzTYjzTwnyjwo4U0/1zo170xN+WVj7VpT10Q6xDUlwTgmujkmtj0qsT4srTwusT0utj4uv0Q1211R6Whi7mpo6WRn5VRh82hv92Rq+3dz93Fy/Udg8XSEcZJzUWpAaG9Oyr+t//Xt//33+//5+f/78/312P3e1PLW4/Xd9Pnl+/jl+/Lh7eXS8urX/Pn0//34XFBAW08/Wk4+WU09V0s7Vko6VUk5Vko6TUk9U0w6WE03WE03VU1CX1xldHWUg4e2io67jY/Ij5LXkJXZj5jTg43AeYK5b3e1hHCLuVt/7D1k9jVK5kRC1kxB4UVG9jpL20JEzEVBtDov0EtE3EJA3zw91kE7ykg7wjgrvTgnvTwpvTwnxTwq0jwt3jcu5jgx5jQ05zEw7TUz3zQtzjQsyDkxxDIy1D5A8jE04DUtyDckwjwjxjskyzgm1T0v1D4wykMwvzonwj4pxDwmzDsq2z0y4jY04i4x1Dcy2kA43UU600Q0yUExuj0rsD0rrD0sqT4uqz0srD0stkIz01pP5mlj62lr7GZt+2968Gdu+2hu/3h49mVs/j1a7md4f5R1Y4FPeolgzcmu//nm///x9f/x6Pvn1ufUtN+0s9mwwdy51OPG6uzW9O3b693Q7dzS7OLZ6+HYWk4+WU09WU09WEw8WEw8V0s7WEw8WU09U0s+Vk08WU44Wk44WE5CWVNVYl9ycXCPeXydgIGxhoTFh4bKgYG9d3msb2+jZ2afjFdTxUlT/DhM/zRB8EE83UpC5EVJ9jtO1EVBxEU8rzsuyUs/zDczyzAszkE4vkU0wjsowDsovjwmvzsmxzkl1Too4DYp5jQq9i4x/zE2/y00/y40+jE39C84/jFC/Sc/9icv6DAu1DYrzToq0Dgq4T0z5Dwz5jsz0Uw7yUExwTgmxzopzjYp5D852ysr7DU31TQq1Tcs0DgryDkr1lFCvkAyrzkrrTwurDwurj8uqzwrrD0sxlFH4mhj7nBz9nN7+nR99nB3/253/3B39Vtl/zpa61prmqWFe5xlh5pstLiV2t3A1+bHvtm4rMqmo72ajL2GlsKNo8eXs8yiy9a24+HM6tzR4s3I1ce8zL6zWk08Wk08Wk08Wk08WEs6WUw7WUw7Wk08WU0/W049W085XFA6Wk4+WE9KWlNaX1llaGWCcG2afHe5iYLIi3+9iHSpknSoiWSaoUAwuz8z3T4490A89j078D1A60JJ5EBLxD84tD4yrD0sxkg81D850TQvz0I4szopvzgkwzwowjsnxjsmzjkl1jQl4TQm8Dov7jMq9C0m/Cgl/yco+yQp/yQw/yI4/xIx9iYz6Sox2iwt2TAt7Tc29jQ19y8x9i4w1jkw30I7yzEpzzIr1zgy5EE62DEr4zgx1DwuyzUnzDotxzsu5l5SwDwwvTowtzcstzMntDQnsTcosDsqtT8z32Vg8nV5+XeB/HqC+XZ8/3J9/2l09FZk/zpc5k9glZx6d5pgfZNikp1zkp54fZZucZVncphnfqBugbFzirp8kr6Dm76IpLmQvcGo2c3B17+9wrWvtaiiWUw7WUw7WUw7WUw7WEs6WUw7WUw7Wk08XEw9XU09XU47XFA6XlFAW09BWk9JXFFPYFRsZl6HdXCqhXy7m4S6qHmlwXafuVyI0j05xEAzyEk42kM49T0//TlD60BGzUFAuz0xrDsrqjsqw0M21js23zs530tBxEU0wDkmwjsoyT4ryzop0DQl3DQn8T817DQs2Dkm3zQj6S4l7Cwn6ysq8Cgy+CM3/hs38C078ztF/EtV7DdA8Cw49y449S4z7Cwr2jUx3jk3/11c2jg23D052Tw10TcrzjUnvjcjwDgowTwtxDsx4VdNxTUt0z431Tw04D022z41zD0vvTkquDww11xV8nZ4/n+G+XqB/HmB/3B9+2Nw81Bh/zdX5E1cdH9XXn9Ia4FQeIVZcoNZZoNVapJed6BogKZtg69wibd2iLl3jrp7ka97nKeFurOhyrexq6aqmZSYW0w5W0w5W0w5W0w5Wks4W0w5W0w5XE06Xks8Xk07XU47Xk86W047XE88X08/YFBBY09bYlVvbWqVfHainoCiz4ed5G2B4Eth/zpN7EdNykU+0UY/6kJC9D9G40VExUI4tz8xqTopqTonwjwx5kJA6z083z045lpNyUQzvjYmyDsqzjgq0zMn5zoz7DUv6i0p5zUz8DQ19zI59zQ87DE87jNE8y5K/zNX6z1H/1lk/1to8UBQ7jhH4jM60jcywTgoxjMp5VJK6VRQ1kE92EM/yzctzTssyTglrz0lsj0psjgpwD0z10hA0TQv5j025jUv8y0u7TQv4Tkw0DwuvDYq0FFK8XVz/4SG9Xh+/HqC/259+WFw8E9h/zdX3kxXWGg7W3dEbYFQeYZbfZBjeZtpeqVtf6tuhKpth61wh7RzhLZvh7l0irJ2kaZ7uLig1si9srbCmZ2pWks4Wks4Wks4Wks4Wks4W0w5W0w5XE06Xks6X0w7Xk07Xk86YFE8YFE6YVE6YFA5Z01OYFRibW2JfHmUnn6N14CG/Gpt/0hO/ylN/zlS3kFK00ND20JE3UJA1EQ8wkAzsjwuqDsnsD8ty0E24Tc35S4w3TUy5lJG6mVWyD4xyTos0Dgt2jcu5TYx6TAt8jUz/ydC/yRB/x89/h078yJB8ipO8ShU/zhq+l1m91tm7k1d3zpL3DpHuy0spTgkmEUltDso0VNFxEE3wjs12k9IxzktxjknxzkjpT8mpTwnpzYmyEg/2UhD2zYy6zQw8jEq/ykt+iws6jMr2jouxDgrw0M46Wxo/4eH+36E/XuD/2d581ps60pc/zVU00ZOSmAvXXhFfI1giZRqi55xh6l3fahwfKhpgahphKhrg61tf7FqgbdshrNykqx9u76j18u9qrXJi5aqXEs3XEs3XEs3XEs3XUw4XUw4XUw4XUw4XUs9W04+Wk89W1M+XlM/XlFAYlBCYk9Ba0xJZ1dicXaWf4q3mI23uYKZ5Xl3+Wxa8U9c6kRQ8UVR6z1G4Ts/1zw6zD81vTstpkAqqzooxUE10Dky2TYv2jYq2zom2Doh50A65k5DyTwrzz4t5UA66jE28zE8+TRF/CYo/Scp/Cgn+CYl8SUo8Skz6Cg39zpO/2Rt/Vhf70tM1D02v0Iwq0IskjMdkzQipzYwx0dExDQ01kJA2ElDyz40xzQqzjYruT0xtjAlwzUr10Q64Ek+2TUs7DAu/y4x8jEy8y8w8TEs4zcryjgpuD4v3Wpj/YuK+IeL/21//1p2/05q+T1e8T5cqExPSFY1XoBDdppdeaFlfqdrfaZqe6VmfKNkfqJie6Zufqprfa1jgbJjhrRriLB0lLOJnbaWgpCRY3FyXUw4XUw4XUw4XUw4Xk05Xk05Xk05Xk05Xk05YFE+W1A+WVBBWlJHXlNPZFZWaVlca11dbGqAd4C5hI3clovXsIKx0X2K6n5x/2Jn8ktT9kZQ8T1G4Tc61Tw3x0E1uUAtqT4sskExxEg8vjUrzDgu1jot2Tgm3Dol3DMu5Eg81UIy0zwr6EA37DIz+TU//0RQ8jAx7Coq7y0t7Cwr6S0u4i0y8UFL+09b5U9R50hM4T0+1To2wzowuT8yu0U7tDk0qDMsy0dD1UND6VNSzj42z0E30j403kE44T085z0+5zs77UVC3Tw02DQr6TMv9TIw8zEy9S8w8jEs5DYrzDorszkq3Gtj/46N+YCH/Wp6/1Zx/0dn+jtd6U1lgDs2Tlw7Y4JHcpZZdZ1heaJmeKJjdqBheJ9gfKBieqNne6hleqpefa5dhrRpirBzgqJzcYtoS1pVNUQ/Xk86Xk86Xk86Xk86XU45XU45XU45XU45Xk0xX082Wk4+WVJKXlldcWp6dm6FdmyHbnWIdH2oe4TPhYrmlY3inYG0qXeArG1b51xX9V1c9kxP7Tg95zc52j04yUQ1ukMvsz0xqzcqy1lOx1FFujotyjst2jos4DYp4jMu4T8030M03z8v5DMr8DAv8zA0/1FZ/1pc4TQ25zs73zMz2zMy3To740dKxi0wyzMy3zw/2zI11DAx1Dw76FpZ9GNo919ryUpD6l9c9Fxb1jw600A42ko/1T4z1zYu+i469yk29Cs1/EJD3jMs2TUr4zUs7zQv9i8y+C0w9S8s5jUr0DwusTYn1GNb/42M/3iH9GZ2+k5o/zhf+jtdxU9bYDwsWWRGZ4ROc5Rbd51ieKBidJ5edZ1ed55ffKBieaNjeqhgeahae6pZga1ghaxrh6VzepVsaXpqW2xcX1A9X1A9X1A9X1A9Xk88Xk88Xk88Xk88YlEzX1A7WlFIX1phcnCGf3+lfHqreXarcn64e4XAhIrGlJbJpp/Au6yxzLahsphzrlM+skI02k1G8EpK6z0+5Dw710A3xjwvvT00sTgvwlZJzWZXwlFBvjgs1Tcs4jQt4jQt3zkt5EIz4Dkp6DIn8S8t8TEw7zU28VJW91hc40JH5kZI5EZH9Fpc1kBBxjQ16j0/7js/5y8380JK/2Fn/2Vt+l5r/Flq6l1W3kZD0zQx1zg04ktC30tB1jkw3Tgy+io3/y06/zQ++j4/3zQt3DUs4jQr8DUu9y8y+S0w9i8s5zUr0z0vszUny1ZP/oqK/2t/7mBw+Elm/zZf90RkkkRETEgvVlxAZH5OdJBdeZxidJxdbphWcJlXc5xad55feKFdeaRcdaRUd6ZVfalcgqZmgZ9rdY9iZXldWGxQW049XlFAXVA/XlFAX1JBXE8+YFNCX1JBYlM+XlJGXlhcb22DeHukfYC3dHi4bnG2dXnUiY3Np6e/w8Cv1tKl39mf39ad1syXxKGDs3lhxGRW5mFc60tL5Ts85Do63jYzyTgzwD01vExAvVdI0GVVwEAzzzUr4DMt4TQw4jsy3Dgs4DYn6jIo7TAq6TIs4jUu2D9B7VJW6UpP/2Vt/2Nr/mFo/2Zp8Fpc/zxC+TE78Sk27TNA/lhi/2Zu/2Nu/Fpn4kdC2TUz2zIv2jUx3EI41T0y2jkx5Dg07jc78DY58DY35DIu3DUs3jgs5zIp8zIt9zAz+S4x9zAt6jUs1j4xuDYpxUpF/4iK/2N781dt+URj/zph301kYzktOUMoT1E5W3BFcoxcdpVcb5ZVa5RQbpdTcZpYdJtcdJ5WdaFWdKBTcp5Rc51TbZFRXXpES2U2PlcvPFUtWUw7XVA/XlFAYFNCYFNCYFNCYVRDXlFAXFFPYVphcW2EeHqjdnuza3O0YGevb3W/h4bkpqXfycfM4+Cz7emg7Oif4tukysOZoqWKl4VvnGdXxmli9nRy6ExN7UBC7Dg72zw40UE5uTsvrTws0mFR2VdJzDUq2DQr4z487EtD1jYq3TIo5TAn4y4n3zQs3D4zxTEt3EZF7FFV7U1X7k5Y+Fhi/2xy50xS8i4y+C858Cg1/kRR7kdP8VVZ/15j7URL3zgy6Tw47jw64jcw2Tsw1jou3Tkw6To13zw34jo35Tk12zQs2jgt3jgq6DEp9zAr8zIz9jAx9jAt6jUs3EA0wTctzUlH+3Z7/1t0/kxs+ztg7kNjsExUWUY1O0QpSkUvUWE8aoBScY5Wa5BNZ5FJaZJMbZZSb5dYdJxWcZtTa5dMZ5JKYIdEVXc7SmYzR14wSGIyUGo6VEg4WU09W08/XlJCX1NDYFREX1NDYFREX1hodnKLeHefdXqxanKzXGSsaXG6fobOmp3itbfnzM7b2drM4Ny/29W7zsW2sqejho6DfXtvjXJpomlg2X5583Zy+F5e8UdI6T434EI5zD40xEI1uTsszkk6zj8v0jkr4EJB+2Bc3UA33jow5DYt4TQt0zUqwzUnujIiyD4z00I/1D1C30VP8Vdh+GFo405S6js48js9/ENJ/1Jb3TQ54Tg7+ERH8jQ26jkz8To27jcz5DUw3zwz2jwx4Tgx6TYy4zs45zo26Dk03TUs2zks3Dkq5zIn8i8p7jUz8zEx9DEt6jUs3TwyxTUt4FRV+2t09VJt/zti/zdg3FNngUxGW1U/UE45TkYzRlQzXW9FaoVOaYxIZY9FZ5FJa5RQbZVWcJhSapJMY4xGX4hEWYBBU3Q9VG4+W3JGVnM9V3Q+T0MzVUk5WEw8XVFBY1dHYlZGYVVFa19Pc3CNd3eddHapam+vXWWtZW22eYHJjZbbm6fNq7XZtbvdur3cvLnWtK7KrqS/mIundXR5amZldmdig2FYnVpR1XBo/3p1/2pn/1BK7EU93EI41Uc7vzcpxj4uyz4s0kEu1j0/0j051Ds13Dky5Toy3zgw0jswx0IxvkIoxUQvwDoxxDU320pR6FVd6llg10hMzzcs3Ts25z0+5zo+4zY67Dg7+TI1/y0x7jcx7zQv6S0r5TQu4T0z3z405Toz7DYz7DQ27zM07TQy4DIr3Dgs3Tor4zMm7jIn7DYz8DMx8zIt6jUs2TYtzTgy+Wdq8lxn6Epj/zNf/zhlvElWV0AwUE43WUw7TEEvPEkrTmA4YXxFZYhEYopBY41FZo9LaZFSapFOZYxJYIlHX4dIXYNIXnxIX3lKZXpPW3hCXHlDP0M1SUY9Ukg/XU09YFI4XlZBY19cb258d3Gdd3OlZ2ihXl+iZWe0d3XJiobdmJLsnZzWoZ3YoZ3YoJvVoJjRnZbKmJDBhX2sbGtwY15bb1hShFZJolhNuVtR2XFo7oN7+IB/6mRj51NRxzMpxDcmwDckxzoo0T4u1Tkq1D0szzgn2jos4Dou2jgryzonvz8mwzoyy0I6yUA4vDYtxD4111FI21VMykQ7zTwh3zgo8Cwu+yc2/ylA/yhA/yNA/yA//yA6/yc88i445jo62zk03Tw05Toz6DYy7DIz6TYy4jcv2DYp2jso2zom3zkj4jcj6zQu7zQr7zUp5Dcn2jou3UJA/2R0+Utm/z9h/zZe60hldDc2NzkkQ0QyRkMyOEcwRkkeWGA7Y3NOZIBPYYZDYos9Zo5FbJFOaZJGZY1GZYpHY4VIZINKY4BGZYFHYn5DXIE8YYZBNDosPz83S0I7VUk7Wk87XFVFZWNmbm+Db2yXYmCRWFmSXWCjbHC6fH3NiIbZjorekJDMkY/Oj4zPj4rNj4nJkIm/joezfXedf15nZVxXXV5MdldFsVpT1FhY4mhl3nZt84R9/4N9+W5nxDgrwTonvTslwjkmyTop1jgszjYo0T4uyzMl1zcr1DYqzToqwjsnwTcswzkuxz0yykA1zEI3zUM4zkQ5yD4z0jcj5DYt9S4z/Ck4+ic6+SU7+yM6/iA3/yA3/Cg38zY95Do62zk03js05Toz6TYy7jQ16jY14jcw2DYp2Tkp2Tol2zkk3jck3TUo4Tco3zgm2Ton1Dgs91hc/lNm+kJk/zVe9j5iuERXSSonLTgnNj4pQj0nRUEmV2EvhZRpc4hdYH5KYIVAY4w+aJBHbJBQa5NKaI1HZ4xJZohLZYRJZIFHZoRIZYFEY4tFaJBKLTUoNzozQT45S0Q6UEo8VFFIY2NtaGmFYmGNUVOGVFiXZWmyc3jJgIPUhofXionViInJhobMhoPShoHTjITNjYW+iYOnd3SJjU9aaFpRUmZLaFxEp1BJ3FFY6l9k43Bt4nZq93x0+HJnwjoqvz0nvj4lxDsoyjko2jYs0Tkrxjsoxzwpzzws1TwuzTcoyTwqyDwtyTstyDosxjcpzT4wzz0w0DwwyjYq1S4m6jIy+C85/C09+jBA9zE++y87/y06/Cw69TA66zc62zY02zk03zo05jk16TU08zU37Tc24zgx2DYr1Dgp1Dkn1zgl2Dcj0Tol0D4l0EAo0D8s2D04/15p/kNi/zpl/y9a3FJrYzI4ODQxLTcuNEAqPD0dbl46k6htrMSQgZ1sYYJJX4dAaZJEb5dOcJRUbpRLaI1HaI1KaYtOZIZKZYRIZ4dIZ4VFaZFKbpZPJjEjLzQtNjY0Pzw3R0Q7TE1IXF5rXWF+W1yMV1iRZmiydnvPfoPegobfgoTXgoTRg4fHgYPNhIDUh4HXjITPioO2gn6VbmxxgVFPZ1tLWWhLZWFEk1hIyVVV41hd7WJn7nVq5mFY00U5yTopxDwmxj4ozjsp1Tcr0i8mzTkrwj0qvjsnyj4t4kw+0DoszDorxzooxzgnyjkozDkp0jos1Twu2j4x1zkt5zU19Tg++jI/9C497S856zI47jE18y8z8jU77TY64TU13Dk03Dk04Tk25zc36TU29DU67zc34zcz1TcszzkqzToozzko0DkmxTshxD4jxEApyjwu7klN/1Bn/ztj/zJj9UJgkENJPj04Ojg7QjQ0OT4oSlwsm55lrMqKpcSLg6RvYYVIXoY/apNFcZlQbpVUbJJJZotFZotIaIxOZYdKZIdHZ4pGZ4tFapVNb5pSKDAhKS4nLzEuNzgzPT80RklCUVRdWlxzW1qGY2SddXfEhYbjiozwh4fngIDWgoHPgobFhobMiIXSi4XPiYG9hH2feXJ6ZmJZZ19MZl5JZmBIaGFFdVo/pl5P1VVS/VNc6VpS1Tw02Tgu2Dss0Dkm0Dsn1zcp3zQszDImyTwrwkEsvTwnwzcm409ByTcoxzopyTwqyTopyjcnzTUn1Dgr2jou2DQq5D009j1C8TI68jA76zE84zY63zc270I+9D056Ts65Tk34Dg13Tg03jk15jo66Tk77Tk89DU67jg34js10DgtxzopxDspwzwpxDspwDwjtjgfvT8pzToz/1hl/z5c+DRa+jtmrklPUjowM0M2Rzc4Uy8xT04ycpRYn8N5n76ClLJ8bIlZV3g/YIQ+a5FEbJRLaZJQZotFYodCZotIZopKaIxMZ4xJZY1Ga5NKb51Sc6FWLzMkLjEoLzEuMzYtOT0uQUU2TU9MVVVhXFpyaWiQfn6+jY3jkI/tiIjigH3Mf37ChIbBiorGi4jBiIG0hXueeW5+b2RgaFxOWGVLZF5IcFlHcV1FcVw/kFg/1ldO/kVL3Dk03zYv4jYs3Tcp0zgk0jkn2TUp4TMswzcovToov0AtwDsq1EI10z8zyDosvzwqxTonxzooyjkozTUn1DYq1zMp4Tkw6D017TY67TQ66zM75TpA6E1L+WBb8lBL5Toz3zgy3zgy4Dkz5Ds45Dg45zk66Tk86zg87zU45zc33Do1yDgtvTkqtzwqtj0qtj0qtz0orTgksDUm3EZH/05h9DlU60dg1UpfY0Y4RUQwN0ArQzUoTzUkeHhSkbN2jMB1m7eEhZ9yS2Q8U209YYA9aY9CaJJIY5BLZIhCZYhEaY5LbJBQaZBNaJFLaJJIbplKdKVWeKlaOjspODovODkzOTsuPkIrQ0cuS00/UlFNWFhOZGRsd3edh4XGkY7bi4rQgn65fXmrfX2zhIKzg3+ifnaNd211bmFba1tMa1pIYmBLaF1Lb1xLeVxKiVlDqVI/0UQ64zEt3jUu4zUu4DIn2zgn0Doizjwl1Dkn3DYquD4psTcivj0qyDkr5kxC1T0ywzsrsT0mwTkpwjkpyDkrzjcs1Tcu3Dcx6T055Tg06To37Do66j0/91lY+mtl1EdA0Dcx4Tw43zsy4Dkx4zcz5Tc25zc56Dg76Tk86Dc97jc55jo42D42xT0xszoprT0pqTwnqTwnpj0ooTopqTku6Vhd9Elb6UhaxlNaoFpSSFI6SkUvQDwfQVIoYHhGg5Rej6JqkrV1ipx2VWZGP04xU2U7Y39Cao9CZpJFYI9HZIdDaYxIa5BNbJNSa5RQa5VNa5dIcp9Odqlad6pbRUQyREQ4RUU9Q0Y1RUkuSk0uT1E5VVNGW104XV5Oa2p6enmlgYC6g4C3eHaeb2yLa2mbb22Vb2yBbWdpaV9Va1tLb11Jcl1KdVlObF9Pa2NQf15NolJHuDkyzjQq2TYn3zcu4DQq4DYn1Dgiyj0ixz8lzTwn1TkqsUErqTQgvjorzjcu4D046E5Gx0M0qDskxUAxxDwuyz0x2EE44EE74Tw45Tk36Dg45js05jo29VBO4UxIvjcxwz001UI73jw54Dwz4jky5jk16jg46zc66zg86Dc95jc86jY34jk21D02wDwvrTonpjsnoTslnzskljsolTwqrEU87mVs7E5d0UhSp1pQgW5QP1E5SjklV08rbZ5deLxveZdXhopXd4FPQk8zOUMrPEYuT105Z39Fa49FZ5NGXpFGaYxIbpFNa5BNaZBNcZpUcZ1ScJ9Pd6dTd6pbdKdYVE09VE09VE09VE09Vk8/WFFBW1REXVZGYltJYlpPaF5ccWZsd2t1em54dGlxaF1jXl5WWlpQW1dMXlhKZFxJZ1xGal5GbV9FZGhRd1ZFolVLsVVIpko1qD0pxjkv3zEy3Dgu3Dgu2jgt1zcr1Tcr1Dgr0jkr0jkrtz4tqjUjrDclvjwsyTYs0zsw3Eo9zUQy20hA0UE42EM83jw36Tc37jg35Dg03z42xUU4tzkrsTgnu0Awxz8x2T836Dk28jY35jc85Tg64zo34zoz4Tgx4zoz5jo25Tk36Do83jw6zkE6tz8xoj0rmT0okzsnkTklgD8rkDMr0Vtbz1terFFOmlpQlF5SmV9US2AfVm0nkq5kmLNseZFTWGs+SlY+PEI2Pj8vOz8xOkIzSFk5YX1Db5NJapNHaJJKa5FUbZRRapRKa5hHbp5IcKJLdqhTd6tZbJhdW4dMXldHXldHXldHXldHXVZGXldHYFlJYVpKZF5GZF1KZV1QZl1WaF9aaF9aZl1WYVhPWVdLUlBDUU4/VFFAWlVCX1hFZF5IaGBJZGZRflxQrltVuUM/wD01vjotvTkqxD8u2Tcq2jgr2Tkr1Tgp1Dgp1Dgp0jkp0jkpuEAwpjcjoTchsz4qwTwtxjQnzz0w1Ec23jQ01zMx3zs56jw97jU66zE05jY23Dk0szkqrjYmrTgmtTwryEM02EA15Tk17jY26zc66jg45zo05jsz4jsy4Ds13js23Tk42jw70kE8uzswpTcomzwokzwojzoljTgkdjkkjj8ytFFMrE1JnFJJk15Qk2JUlmBWfo9bo7WBk6dyU2k4OEoiPEsuOEEwODsyPT4uOj4wOUEyR1g4Y39FcpZMbpdLbZdPb5ZTb5dQa5VJbZpJb59LdKNSeapZbp5SWYJITnc9Y1xMY1xMY1xMY1xMY1xMZF1NZV5OZl9PZmBGaGJKaWNNaGFOaGFOZ2FLZ2FJaGJIYV5NWFVET0w7S0o4Tk05T1E8VFZBWFpFXlxNc1dLsWZgzkxO3Dk82DYzvj0qq0gp1Dcm1jko1jko1Too0jkn0jkn0Ton0TonuT8wpTomljgeo0EotD8rwzksyjYq1D0y8DM66TQ55Dc54zY45zQ45zc63Tk4xy8qrDspqzwpqTwnqjomtzoozj4z3zw16Dk27jY07Tc06jkz5jsz4D003D842EA71D49xUI6tz0yojYpmTookTwoijwmhjklhTcjdTsnhkExoVNHm1NHklpLjFxOkF5TmmFYgY1ld4VhQlE0LTomMDwuNz80PUA3OjowOzwsOT0vOEAxRlc3ZYFHc5dNcZpOcJpScZtRcJpObplKcp5PdaRUeahacZ9WW4pCW4RKUntBZl9PZl9PZl9PZl9PZl9PZ2BQZ2BQaGFRamNQaWJPZ2BNZ2BNaGJMZ2FJZ2JFZ2JFZmBKYFtFVVM+TEs3RUg1RUk4RUw8RU49T09DWFFBe1FBuVNO4kZH4zc3yz0vq0Il0Dcl0Ton0jso0jso0Ton0Ton0Dsn0DsnuDwwqD0pkDkelT4irD8qwDwtyjMq2Tw18ThA6kBD2T89zTk3xDMwyDo2uDkyqTcsoj8qo0Aro0AppD4orDkmuzcqyzgu3UA56zo06Ts05zwy4T803UM50UM5xT44vDs2ojotmDcnkjkniTsnhj0qgzwofjonfTYkeTYlj0w8k1FDk1hKj1tNkV1QlVxTl1pVVV02PUYnN0MvMjwzND04QUY/REY4PTwoOjsrNzstNj4vRFU1ZIBGc5dNcZpOcZtTcJ1Mb5xLcJ1MeKRXgKxhcqBYXYpHXotIXoVOU3pDaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaWBbaWBZaWBXaWFUaWJQaWJQaWJPaWJPaGBJZmBKYFtHUVA8Rkk2P0Y2Pkc2PEc3Qkk5QUszUUwvmmBM2l9X6khG4D45zT0yyzgozToqzToqzzwszzwszzws0Tss0Dorvzoxrz4ulTYglTcerDwowjou2UA450hC40VGzD46sDouozwtoj4vmj0ukD0tiD8slD0qlT4ql0Asm0AroT4rqDkotDgswDww2Dsy3EA020M21UM2zkQ3uz0xqDYsoDMsjzwsijsqhjsogT0qfDsneTooeDkndTYlhjgslk5Ajk9Aj1RGl1hPlFVOmFlUlllUUlsuT1k0O0guNUAvR1JCWF9NR0syPj8gOzwsOT0vNz8wRVY2ZoJIc5dNcJlNcZtTcKBKb59Lc6JSfaleeaRdYoxKYIpKZY9PXoVQU3pFaGFRaGFRaGFRaGFRaWJSaWJSaWJSaWJSamBfamBeamFaamJXamJVamJVamJVamJXamJNamJNZF9LWVZDS0w6REc2P0Y2PUQ0OEYvQkoyUEUpmmZQu1VH7l9b7ElK5T9ByDosxzkryDkryDkrzTsuzjwvzzsvzzsvyTo2vT00rj0ttUEyzko+30pD5klE4UI+0EVAtT81nEEvk0gzjUYyhkMwfUMvdkQthzoqhzoqiTwqij0rjzwqkzoqnDsrojwuszkuuDwwuz0vuD0urDgpojgqljgskjouhj0sgzwqfzoqfTwqejsqeDorczgocTgnkUM5j0s+ikw/k1NJmFFLmFNOll1WlGlggY9ebX1QQFApT149YXBTTlk7QEcoPD8gOToqODwuOEAxRFU1ZoJIdJhOcZpOcZtTcKJLb6BOeahaeKZeZY9NXIVDZ5BOYotJXoNPUndDaGFRaGFRaGFRaGFRaWJSaWJSaWJSaWJSamFcamFYamJVamNRamNQamNRamJVamJXbGRRa2JRamNRY15LV1RDTUw6RUY0QUIyOEstUkIri01Ap0Y/sDs042Jd9GZl7FNY2E5DzUM40UQ61kg+2kpB20tC3ktD30xE501N3U5K105I205H4UZC5kJB5EI/30Q/0kdEsz41mUIxjUYyh0QzhUAxfj8wej8xgjougTsvgDwvgD0tfzwsgjorhDsshzsrkjoulzsunDsrnzsrmjkokjkpiTophDssgDssfjkqezgoejgqeDkqdTosbzUncjotjEo8hEs6h1JClldOmFFNl1ZSiGJXc2ZTUWA3RVYqWm1AYXdJTF42OEcoPEYuOT0uOToqNzstOUEyQVIyYX1DcpZMcZpOcZtTbZ5MdaZVeadeZ5RRWoREY4xKZo1KZY1HW4BNUHVCaGFRaGFRaGFRaGFRamNTamNTamNTamNTa2RUa2RRa2VNa2VLa2VLa2VNa2RSa2NWbGNUa2JTbGNUaGFRYVpIVVA9Tkk2SEMwN0oqbUY1tkhJxTM9yT1AyExK5Gpn2Vla1EtDzUQ80UY/zkE60kM91EM+2ERA2UVB4D9E30VF4EhH40ND6kBD7T9B5EA/20I80z8/tTgynz8xjj8wiTsuiTkwhzgxhzo0gDs0fjsyfDwyez0wdzwueD0tdzwseDspfTsvgjosiDkqjzkojjgnijsqgT0qfj0rgDgqfTUnejQoeTUqdDQoczcsbjYpdD8xh1JAf1I/hlhIjVNIl1JNj1ZPdmFQQkwxTFs8YXNNXHNFTGQ0N0wjMEAjOkU3Nzs6OzwsNzstOUEyPU4uWXU7bpJIcZpOcpxUb6NRc6ZZaplRW4hHYIpKYotJZo5IYopBWn9MTnNAaWBRamFSamFSa2JTamFSamFSamFSamFSamNTamNTamNTamNTa2RUa2RUa2RUa2RUcWBQcWRUbmVWaWNVZ2RTZGJNXVlAUUsxTUQnbFA6nGRXpExIu0tKyEhJ0EhI00lH00dIzz8+00Q+zEQ4xUc4yEg91ERD3D9G4UNE4UNC4EVD4UZC4kRB4UI+4kA940E+ykQ7sTsxmDwvhD8wfUI0fT80hDoxizgyhTwtgzssgzssgDssfzorfjotfjotfTsvfTkufTkufDoufDouejouejoueDotdzksdTkudDgtcjYrcDYqbTUobDQnbDcpd0I0gVVKiFFKk09MllFMjVJKf2BMZWRGWGpEXnhLUGk/TWI7RVQ1OEIpNTomPj8vQD4xMTwuNTstOj4tPkMsWmZAcIlScpdScp5ReqFidZxdYIdIXYRFYYhJZItMZItMX4ZHWHpHSmw6aGFRaWJSaWJSamNTaWJSaWJSaWJSaWJSamNTamNTamNTamNTa2RUa2RUa2RUa2RUcmJTa19RbWVYaWVZbWtehYJziINwd3JeTVc8Q0UtS0AsWT0vYDgsazsveUM3hU1AqFNMtUxIyERC1ENA0kI61EU910ZB20VE30NE3kRE3kZD3kZD20ZA2UQ92EM82UQ900Y9vkI4nDothTwtf0Eyfj8wgzsviTkwgzssgzssgjorfzorfjotfjotfTsvfTsvfDkwfDkwezgveTkvejwxeTswdjovdjovdDgucjgtcDYrbjUqbTQpajQoajQodT8zh1FHjVJKklNMkVZOiFxRdV5MaWlPXm1OR1s4P1MwQ1Q0RVM5P0kxNz8qOj4tOTstMz00NjwyOj4vPEEqUl46aIFKcJVQdaFSeJ9gZItMW4JDW4JDYIdIYolKYYhJXoVGUndERGk2aGFRaWJSaWJSamNTaWJSaWJSaWJSaWJSamNTamNTamNTamNTa2RUa2RUa2RUa2RUcWVXbmZba2degX53mZiTtbKruLSprqicf4JvUVZCPUk1OkczPEs2OEUzOUEyPUEzTzwtgUpDtU1O0UZL2kFD3ERB3UVA3EQ/3kRE3UVE3ERD2UVB10c/00Y90Uc80Eg810A5yEQ4qT8yjj0sg0Avfj8ugTwshzstgzssgjorfzorfzorfjotfTsvfTsvfTsvejoweTkvdzkudjgtdjovdTkudDouczktcTcscDYrbTQpbDMoajQoZzMmZzMmcT0wkE1FkVJLjFhNglpOc1xMXldEUldBQEw2NUEtMj4qNkIuPUk1Pko2OkYyNkIuMj4qMjs2NTozODswOj8pS1czZHxIc5hTeKRVbpRXWX9CW4FEXIJFXoRHX4VIXoRHXIJFUXVFQWU1Z2FRaGJSaGJSaWNTaGJSaGJSaGJSaGJSamNTamNTamNTamNTa2RUa2RUa2RUa2RUbGZabWlgh4aBtra00NLR7Ozq7+vo497a17uwnot8Y15KQUkyPUo2PkY3PT42PTk2NkEzSjcwiUxLxWJlzFRV11BN4UlG5kJA3kRG3kRG3UND20NC2UVB1EU90EY8zkg93UA5z0I4tUQ2kTophj8tgD8tgD0qhD0rgDssfzorfzorfTksfTsvfTsvezsxezsxdzsxdjowdDgucjgtcTgtcTgtbjgsbTcrbzYtbDYsajQqaDQpaTUqZTMoZDInbTswlUxGj1NLgVlNb1xNWVZFRko5OUIxMjorNDcwMTctLzcqMjotOUQ0PUo4OEcyMUArLTYzMTYwNjkwOj4tRE8vYXlHdJlWc59UYINLVnlBW35GW35GX4JKX4JKXoFJXYBITXFFPWE1aWNTaWNTaWNTaWNTaWNTaWNTaWNTaWNTamNTa2RUa2RUbGVVbGVVbGVVbGVVbGVVZ2dfjI2Hw8XC6e3u9fn6/f/+//78/Pj1/uPQ3Mqyp6CDZWZHR0ovSEMwSDkyTDc2O0A8TERBg2tn1q+o4KSaxGZe109P6UNH2EZH2kRF20FD2j4/2T8/10I+00I9z0I530A6z0E3t0E1ljorhz4tgT4tfz4qgD0qfzorfTksfTksezktfDouejowejowejoxdj0ydDswcTgtbjgsbTcrbDgrbDgrajkrazcsbzswajYrZTMoZTMoXy8jYDAkZzksi05JhVRNclhLUkw8O0QxNEEwMj0vNDowNzc1NTcyMTYvLzcsLzstNkUyN0kzMkQuKzQvLjMtMzYtOT0sPkkrYHdJdppdbJdSWHtFU3ZAV3pEWXxGXoFLXoFLXH9JXYBKS2lHN1UzZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTamNTa2RUa2RUbGVVbGVVbGVVbWZWbWZWcHRzqa2s2ODi9Pz++f//+//8/v/5///49/7d5/HOzNiwnKuAZG5JRkovSkc2SUA3U0tJhX17tbCs393R//bo/9rQ1nt4ykxQzVJLyUhD0UdE1kRE1j491kA/1UE90kM92D85zkQ6uEM6mjwwiT0vgT4ufz4sfz4sfjotfTksfDouezktfDwyezsxejsyejsycDowbjovbDgtaTcsaTcsaDgsaDgsaDgsazkwajgvajgvYzMpYjMpXi8lXDAlaj4zfVZPbE9HTUE1ODosLzoqMT0vNT0yNzoxNzk0NDkzMzgxMTkuLjkrMj8uN0YzN0g1NT80LjQqLjEmNDgpPkgvZXtVeJpnYYpQVHRCUnJAVHRCVXVDWHhGW3tJXHxKWHhGRVtELUMuZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTamNTa2RUa2RUbGVVbGVVbWZWbmdXb2hYdHx+pq6x1N7g8f399v/9+v/5+f3v9vfn8f/n7/zg5/HPxsyolJp4VFpARE06QUw+g3x2wrm02dHO7u3o9vfv//vw//Pq6rWvvGVUtlZGvE1Cw0Q9yUI+zkM+z0Q/zkM81EE6ykU+skE5mTw0iTwygT0wfz0vfz0vfjotfDoufDoueTkvfDwyejsyeToxeDkyazkuajgtaTcsZzcrZzksZzksZTksZTksaDguZjYsaDguZDUrYzQqXTEmXTEmcUc7V01EQDkvOTktNjosMzsuNDwvNjkuNTcsMjovMjotMTksLzosLjkpLzoqMj8uOEU0OUQzNDsrMDQmMDQlPUYxbYJjcpJpTnVGTW08Tm49Tm49UHA/VnZFW3tKXX1MUXFAOUY8JDEnZmVTZmVTZmVTZmVTZmVTZmVTZmVTZmVTamNTa2RUa2RUbGVVbGVVbWZWb2hYcGlZaHF2kp2hytXZ6ff38/74+f/2+//u+vzn+/fu//bq//Hh5tG8s6KObWZUVllOaHNrq6+g4drS/urr//P2//v69f/29f/x+//z/93DyoNtq1JAuExAwkc/x0c+yEU9xkM70kU+xUQ+qzw1ljw0iTw0gT00fz0xfz0xfTsvfDoufDoueTkvejoxeDkwdjcwczcvazkuaTktaTktZzksZjgrZDgrZDgrZDgrZzYvajkyaDkxbT42az82ZTkwfFFIdktCNDszMzswMzkvMzYrNDcsMzUoMzUoNDYpLTgoLTgoLTgoLTgoLjkpLTgoLjkpMDsrN0MtPEMxOT0uMDQlPkc0ZnpfWXlUQWc+Smc3Tms7S2g4TWo6VnNDW3hIXHlJSWY2LzgzICkkaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWZ2ZUaWVaa2RcbWVYaWRObWxYZ2hifoGIn6mqx8/R6+/w/Pz8//76/v/5+fzz9/3x9/rx+Prs9/nh2Ny7pKqIYm1PaXdgjJ2NxcbB6+zn+Pn0+vv2/v/6/v/6/v/6/v/67f////78266orlZMwUg9ykY6yEY5xEY6wUoytUw2nEcyiUY1f0Q0gEA0hDoviDgvfToxfDkweDgudzctdjgtdzkuczcscDQpaDkvZzguZzguZzctZTUraDguaTcuaDYtazQvbTgwazstaEEwZko1a1lFgHlmaWhWMzsuMjotMTksMTksMDgrLzcqLzcqLjYpLjUtLjUtLjUtLjUtLzYuLTQsLTQsLzYuLzsxNEA2N0M1NEEwPEk1VWNMSVc9RVM5SWU/SmY+SGQ7Smc7VXFIW3dPWHNSPFc4Ji4xIiotaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWZ2ZUaWVaa2RcbGZYa2lSamxXc3ZvpKeuzNbY8/v9/P///v78//76/f729Pfs7fPn8fXn8/bj7vHW0dKzpKeIgIRtj5aGrrit3N3Y9vfy/f75/v/6/v/6/v/6/v/6/v/6+////fz6//vz/9rKt3pnoks4v1FCwkg7x0M2wUg9pj82lUI6hkE6f0A5ez83ej42dz0ydTwxdDswcTsvcDoubzsubTksazcqbTgwajgvaTcuaTcuaDguZzctZzguaTowaT00Zz0xaUIxZkUyZ1E6b2NNiohzW15LMTksMTksMDgrLzcqMDgrLzcqLzcqLjYpLTQsLTQsLTQsLTQsLTQsLDMrLDMrLTQsKjYsLDguMT0xNkMyOkc1P002NkQrPkwzRl48SmI+SGE6Rl84VW5HXnZUVGtOMkkvJS0vIiosaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVUaWVaa2RcbGZYa2lSbnBben94rbS63efp+f//+v7////9///6+fvw6Oze3uXV5+zW6+/Y6urQ1dO6xsGtwL2u0M3G4eDe8fLt/P34/v/6/f75/v/6/v/6/v/6/v/6//n8///99//68//y/fznyaaQoFdEs1A9xUA5w0Q+sD06njo6jz49gEA+dEM8bUU7cT82cT82bz81bz81bT40aT0yaDwxaDwxcTYwcDcwbTYvaTcuaTowZjovYzsvZj4yYEQ2ZEk4Y0o0X0szX1M5b2tSfoNsQUo1MTksMTksMDgrLzcqMDgrLzcqLzcqLjYpLTQsLTQsLTQsLTQsLDMrKzIqKzIqLDMrKzctKTUrKzcrLjosMD0sNEEvMT4qNEIrO00zRFc7SFs9S14+WGtNYnRaUGJMKzwpIywrICkoaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVUa2Raa2RcbGZYbGxUaW5Yb3Zunqes2uTm9///+////f37///39Pbp5urb4unX5u3O5+vQ5+XO3NXD2tDE6t/b+O7v//b5/f75///7/v/6/v/6/v/6/v/6/v/6/v/6//z6///98f//7f//8//5///t7MiyrHRbtU49s0w9sUlAoD03lDw4hUA5dUM4bUg4cT84cT84cD84cD84cUI6az82aj41az82cjcxcDcwbTgwaDkvYzsvYz8xYUEyXkExV0w4ZltFXlQ5WlM3WVg6bnJXanRbMD8oMzsuMjotMTksMTksMDgrLzcqLzcqLjYpLDMrLDMrLDMrLDMrKzIqKTAoKTAoKzIqKjQsKjQrKzUsLDYrLTgqND8vOEMzNkEwMUArOEcwQFA2SFg+VmZMX25ZSlhHKDYnJi8sIywpaGVWaGVWaGVWaGVWaWZXaWZXaWZXaWZXa2VVbGVbbGVda2hZbG5WaXFabHhukqCjx9DV7vb5+////v/6///3+Prs8vfj6PDZ6vHP5+rN4uDL3dXK59nW+Orq//X5//v//v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/f/3/f/8/f7//f7///7///z0///s//XZ1qGCm15Cn1dBnk8+jkExhEEweEEtcUIucz44dD85dD85ckA5ckA5cD84bz43bT42bDoxbT0zaT8zZEAyX0IyX0g2TTsnRjUhTE42RkkuWls8Xl9AXF9Ac3ldS1g+MD4nNT0wNDwvMzsuMzsuMzsuMjotMTksMTksMDcvMDcvLzYuLjUtLDMrKzIqKzIqKjEpKjQsKTMrKTMqKzUsKzUsLzkuN0E2Pkg9N0QyM0AuNEIrQU84UF5HWWZUQ09BLDguJzArJi8qaGVWaGVWaGVWaGVWaWZXaWZXaWZXaWZXa2VVbGVbbGVda2hZa21VaXNbbHlvlqWoytPY7/f6+////v/6/v70+Pvq8PXf5OzU3OLA2trA3tjK5dzX9enr//T4//n6//z8/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/69v/8+//+//v///f///n///v5///09v/u//zj++XNyqiPkWVMg1E6ekYweEUwcEAqc0M5ckI4bz81bj81az80aj4zaT8zaD4yY0IzY0M0YEU0WkUyV0YyYVZAUUszSEQrPUcsPEUoQ0goX2JDa25Pa29UPEQsOUItOEAzNz8yNj4xNj4xNz8yNz8yNj4xNj4xNTw0NDszMzoyMzoyMDcvLzYuLDMrKjEpKTApKTApKTApKzIrLjUuKzIrMDcwPEM8Pkw7O0o3M0IrMUApQlE6TFtIQE4/LzwyLDYuKjQsZ2RVZ2RVaWZXaWZXaWZXaWZXaWZXaWZXa2VVbGVbbGVda2hZam5VZnJaZXVqkaWmydLX7vb5+v7////7///0/v/u9Pni4+zP1Ne4z8+33NXL7+bn//f8//3//v/6/f/3/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6+v///f/+//76//33//v1//34/v78+//+/vr5//33//zv//Lh4tC6uqGLmHtphWZUclE+aUg1YkMvZEUxYEQvYUUwYEUwYEUwW0o2Wks2Vks1UUszTkwzcXRZYGZKQ0wvOkcrQEksQ0goTU4veHdZX19FRUcxPkEuOEAzOEAzNz8yNj4xNz8yNz8yNz8yOEAzOUA4OD83Nz42Nz42Nj01NDszMjkxMDcvLTQtKzIrKjEqKzEtKzEtLDIuLjQwMDYyNkc0PU85Okw0NEYsNUcvPU85OEk3LDwvKzUsKTMqZmNUZ2RVaWZXamdYaWZXaWZXaWZXaWZXa2VVbGVbbGVda2hZaW1UZ3NbZXdrlqqr1N3k8/v++////v/5/f3x+/7r8Pbc3OXIz8+zxcKv08zG7uXq//n///7/+//5+f/0/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6//v//f7/9//38//y9f/z+f/4//3///r///v///3//P3/+P70/v/z///v//vs//bp/+7Uw7KYYlE3WkowW0sxW00yXE4zW1A0VVE4VFA3UFA2S04zTFI2WWRGQ1AyPUosP0wwR1AzSE0tW1o8aWVIXlpBWFZBTEk4O0M2O0M2OkI1OUE0Nz8yOEAzOUE0OkI1OkE5OUA4OUA4OD83OUA4OUA4OD83OD83Njs1MjcxLjMvLTIuLTIuLTEwLTEwLTEwKDslNkoxO080OU0xNkovOk03OEs4LT8vLDYrKjQpWWdNXWpQYmxUZ2xWZ2hWaWZVa2VXbWVYamdWa2dbamZdaGZXZmtVZHBcbX54p7rB2uLl8vv6+f/5+//x9/rn8/Le6ufU2NXCzL+uvbGlx7y64tne+/b9/v3//P3/+v79/f/+/f/+/v78/v78//76//z5//75///6//36/v37/////f39//38//z2/fPq//Ln/vz////9/v/7+v79/v////3///7y///k+fnftrWZU04wUUsrVU8tVE8vUVAyUFA0T04yUFA0S082RU4zRlA1QEkqQ0ooSE4oUFQxUlY1XV1BWlpAWFg+WlpAWFk6VVQ1TEcxRkQvQT8wPkAzOz4zOEAzOEM1N0QzOEM1NkEzNkEzOEM1OEM1OEM1OUQ2PEc5OUU7OEU0OEEwNT0wMjkyLzsvMUQmO1UmQmUtQF82PFQ8O047P1E3SF0+RFw8MEguKjQpKDInWWdNXWpQYmxUaG1XamtZa2pYbWdZbmhaa2hXamZaaWVcaGZXZGlTZHBcdYaAorW809rg8fn79/738/fp6+7b3t3J0s+8xcCtwrWkyb2x2s/N7+br/fj//v3//P3/+//+/f/+/f/+/v78/v78//76//36//34//34//36/fz6/////v7+//79//r0593U9efc/vz////9/v/7+v79/f7///7///7y//3g/PzitbSYUUwuUkwsVU8vVVAwUlEzT08zT04yTk4yS082SFE2R1E2RU4vS1IwVVs1YGtAfYhgb3ZUUVY4TU83T083U1E4VlU5V1I8T004R0U2QEI1Oz4zOUE0N0I0N0QzOEM1N0I0N0I0OEM1OEM1OEM1OkU3PEc5PUk/PUo5P0g3PEQ3PEM8NUE1PVAyVG4/Wn1FT25FOlI6MUQxPlA2T2RFT2dHOVE3LzkuKzUqWWdNXGpQZG5WaHBZbG9cbWxabGlab2lbbGlYaWVZaWVcaWdYZWpUZHBcc4R+laivytPa6/X38ffz6ezh3N/Ozs25xsGtvLej0MOz49bN8+jm//f8//r//v3//P3/+//8/f/+/f/+/v78/v78/v35//36//34/fr1//z5+/r4/f39//////38//v19uzj/e/k/vz////7/v/6+v79/P3///7///7v//ve///qubeeVE8yVU4xVU8vVlExUlEzTU4vTUwwTU0xS082SlM4SlQ5Tlc4VVw6ZGpEjKNtmrB/jZ50Z3JQS082S0o1T0o2U046VE85UE45S0k6REY5PUA1OUE0N0I0NUIxOUQ2OEM1OEM1OUQ2OUQ2OUQ2O0Y4PUg6PUk/PUo5Pkc2PEQ3OkE6NkI2PVAyT2k6VHc/SmlAMkoyKj0qNkguS2BBTmZGOVE3KjQpJC4jClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdGltYWdlcy90ZXN0aW1nZnN0MV80LnBwbSBiL3Rlc3RpbWFnZXMvdGVzdGltZ2ZzdDFfNC5wcG0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0ZWRhODUuLjAwMDAwMDAKLS0tIGEvdGVzdGltYWdlcy90ZXN0aW1nZnN0MV80LnBwbQorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotUDYKLTU3IDM4Ci0yNTUKLTAvLTUxLjcyLjkyLDgwLTgwLTgwLTgwLTUtKjQsKTUtKjUtKjEuJzQxKjYzLDk2L0I8MEhAM0pBMk1BMVlCNIZDM6s/MsBGO+ZDSPFBRPc6QNk/PbNALbA/LaY/LJhAKpE+LpA9K5M9LJQ/K5k/NrhCNLFFOV8+Lzs1NTcyLzYyLzQxLC4wLTAvLTUsLT0xM3lEQJxgbH9/sVhUhlBHYm9wdY6RhmJjU1lTYSwsLDAvLTIuKzMuKjItKjItKjItKjItKjItKjEsKTMuKzMuKzQxLDQxLDUyLTg1MDw1LUA3LkM5L0k9MUpHNmZBL4Q7KqJFNspFPuhAP/I7PcFCM6o/Lag/LKA/LpQ/K48+LYw9LIs8LYw9Lp5CM8JBO6pQSFBGPEA2NDk0MDQzLjAyLS0zLzAyLzIxLzMvLlA1KnNUWXx+u1lYnko+ZkRDVU1WUVFZTmFYUSwtLy0tLS4tKy8rKC4qKS4qKS8rKi8rKi8rKjAsKzEtLDEtLDEtKjIuKzEtKjQwLToyLz00Lz80LkU4MEo9NVY5M3I3L5I7MaZBNcdEOtlGP6pDMp1ALp09LZY9LYw9LIk8LIc7LYQ8MIZCN55IO7ZPSqF9bWhzZUtJPTc3LTAxKy8wKy4wLS8vLTAwLjAwLjovN2poaYySxHaCtmhvf2l5eIKXiGp7a2BaQCwwMy4vMS4uLi4tKy0rLCspKispKispKispKiooKSwqKy8tLi8rKi4qKTAsKzMvLjsyMzwyMTwxL0AyLz84MkE4M1g2LX87LpI+NJlBM61DNp0/M5I/LZM7LY88Loc7LYU5KYE5K4E+NYVJQZZLRahuY42lhXyPeVpmUj9FNzEwKzIpKjErKzErKzEtLDEtLDYsLWNxTY6cjZa6lp/Gp4qyjYmrhmd+Yk9PMzEyLDMyLTc0LzcyLjcvLDMtLS8tLiwrMC8oLy8pKy4tKy8wKi8vLzIuKzcwKj0zKj82LT41LjwxLTwxL0QxK0IwLkQsKlw0LHg+MI86M4s/Mo1BM5A8MYM+Log8LoA7K3c7MHY+L4ZDOoZNQpZcWH6VeIuoioCdgV6LYldwUz5EOi4tKy0pKjEoLS8qMCssMTAsK15jTISabIaodY6wfYKod36eeWByXD9BNDY3MTg3Mj06NT86Nj83NDs2Mjk1MjczMjcuLzUwLTQxLDQzLjU0MDs2MkA3Lkc6MUc9NEM5MD82MT82MUQ2NU0zNEE5Lks4Km02MYk9PYRBO4Q9N4FCMYU7Ln88LHs+LKhLRopHPnRNPIFWRnh3WKd4aJ6YfoWhe4aPcHiQcGFzWUdEMzkuKi4vKTEtKj0mLEhANWNsUW2KXnKYZXKcanegdHSTcVpzVUQ7NDg5Mz08N0I/OkQ/O0ZBO0Y/OUY/N0Q7NEI5MkI5Mjw3MTk0Ljk2L0A5L0Y8ME1AME0/NEg7MkI5MD87Mlw6OJxFS4RAN6RFQZxENqU9MqRFM6pAMqk8QZdEQHk9MrY6RNRAPqpWTGplR4VrUOZPVv8rSf07VfRMXeRXZ9hjbNBgbNBRZsFMX49ES1IzLkU9MmNaOXmDYHOMZHiTZoSdf46kj3uRfFlyUlVSQzY3MTs6NUI/OkdCPkhDPUxFPU1DOUxANEg+MkQ8MUE6Mjw3MTw4LUM7MEs/L08/L009MEY6LkE6MEE/M6hFSMwxN6A8JbA9K6U6MLZBOKg8L7s/NdQ8MfcuNOI9N+Y0MtY2Kr5OQ5FdSNZbVug+QdFGQfQ+Svw1SP45Vf87YP8/bftBcv9GavlUcrtXYWxMQYt+damrqKuztb68v9rSz9nP16eppmB3XVtlSjEwLjc2Mjw8NEJCOEpIPE5MN1BQSGJgeFdOUUg/QEE5Nj04Mj43MT47NkY/NVA/LUE+LUQ2NT47NGg7Nas7LaE6J6s+Krs5K6k7LKw+Lbc/L8E7L9E3K943LvQuK9o3Jtk2I8s9MdpGQvFBRNJBPq08LsdHPPNARvhETf1BWf9Cav1JeP9Ld/lWdfNKa55ubtO7r+7r8v7k/f/z/P349fbt8NLOzZedk5WbjTc0LzUyKzo3MEA9NE9FOVRLPGVjcZac1pSU2nx8rmBedkVDSDw7QEI8LEdALUVCO0k/R0BJSExCOJJCO6o/La0+K7g5Ks05L8g5Mcc5L846MNE3LegxKfAvKvIvKdY3ItY1I9M5L9xNRcVFOrs8Kbs8LchBO9tJSu9ESvxLXfpFZP9Od/tVef1Tbvlcbd9gadmemv/29v38///7+v/7+P/x9Orf3eTi1dDZ1EM/NDw4Lzg0Kz45M01DN1dKOmFccJSe5qy2/q61+5+g43Z0tWJYjUdEV0RAPVtPU4lzmqdmhL5JUrM8KK06KLo7LMw5L906M9o3MuQ9N905MOREOPE5MfoqKuwxLNYyJso8KNM6LNo/OtdFRb08J8E5K85IP8VJQd9LR+ZPVPhXaf5Rb/9Ud/9Yb/1ca+1XY6d1bvPe2/f//f/8/f369fvw7uXY0P/86Obs6FBKPElDN0I7M0E6NEdDOFNHMVtUW4uWzqmq/Kyv/KWp85qe5YaLzXV3oJJVZ9hIUeVEScdBOOBCP88+OcJAMss9MdQ3Ltk1LNs6MNo2LNQ0Jsw5Jds7L/w0N+c1NeE1NfIyMdw2Kt9LP9ZERdQ9NsM7L71ALr0+LcNFOc5NSPRkbfpYbftbc+t0ePRmdMiJgmJhT9/CxP37/v/6//r/9v/+9/Tu4P//4/b26lhPQFRLPE5FNkxDNEpGOlZLNV1WXYeMw52c7J2l+J2m56Se6JiZ2sFuiOQ9ROI/Qtk9QcxCP+g9Q9g6Ocg/N79BM8Q3Ld82M903K903J8M4I8Y4LNo5Mcs4Jt0yKOAtMOUvLNU4J9RDMt1EP+ZUVM06MME6J7c+LbQ8Lr5AMulmXu9pavNib/ZsbP5ib7aLhFtpRuPRx//8+fr+/d/95fT97P/46Pfv2v79+VpOPllNPVdLO1dLO1NLPllMOVpSUHNylISGtoyN0IWHwHFzrKRZbfk3T+FGQe0+S9JEQsFCOdQ5N8xDOcE5Kb47J806KuI2LPMwNPQwMuEzNOYyPu0vMcs4KNE5K908MspCMsU5KNc6MeMwM9Y3MdI+MsdDNq87LKw8Lq49LdpfWO9scvdueP9wd/tOYr1+eXiPYdfWuuPx2MPavqLNn7vUreTjzurZ0d/RyFpNPFpNPFhLOlpNPFxMPV5PPFtPQ11SVmhghYJ5upd8s6VpnL0+Nd1DOfY8P+JBR7g8MrhAMtc5NstDN8E6J8g7KdU1J+w3LucyJ/QqJvUmLv8bOPIuOuc2PPMwOPQtMNw6Nd0+Ot07ONc0K8c4KMc6MNRKQMg7Mss4MLw6LMpPSPd4f/x5gf9reP9FYLZtZHCLWISQaHCPY3qfbIe1d5K7f6S0j869ta+lpFpLOFpLOFpLOFxNOl5LPF9OPF9QPWFQPmNRX3VxlrqAlvJaaf85UNNDQ+ZBRdFCPK87LLs9L+c5OuJIQM9HOcw4LN82L+0xL/wsPP0oPPAsRPwvWPlTX/FJWts0PrQ7Ks1FOdNEQNFBOco5KKs8KLk9Mdg/Ous1MfktLt43LsVAN/h6e/x6gv1kdvlBW5VWRWl/UIKRaH6lcIGpbYasb4O1bo+tecnCsKCnuV1MOF1MOF1MOF1MOF5NPVtPP15SRmZTT2taZHyDuaeHuOd3c/RQW/FBTN06O8M/Mq0+Lcc8NdU3Lto5JeRBOtE9L+o4Nvs3RfYqLfUpKuwpL/M9TPRUXN9APbo/MKc4Lbk+OddDQ9BBOdI5Mc86Nt0+Otw7M/IwMPQwMusyLcI6LO57eP53hf9RbvRBYXFNP2qMUHqiZnujZ32hY32man2tYYmycImlf1tnZ19OPF9OPF9OPF9OPGBONlxTTnFsgnhxmnR8qoeL0qWVwraMfM9TSetHSOQ6O8hAMrQ5MclZTcM/M902LeI3MOE/MOwxLPo5PPROUuU8P+VCRdM6PeA6PuM0O/BXXPlfa+BSTt5AP9xHQNg5M/srOfw3Pt00Leo1LvkuMu4xLcI4K+d0cftqe/9BY9NDWldROW2JVnedYnKaW3eeX3mkX3inWYKqZH6ZbGFzXVxPPl5RQF9SQWBTQmFUTm5qg3d5sm1xuI2M3MbDvOTeotjRnayQeMNlW+xSVOg6O808N7hHOdBWSdU0LOU+ONw2KugwKOM2MNpBQ/NTW/paZPhdY/oyPPQxP/lVXvxYYeE8OOI2NNk8M+I5NOg4OuU2M902LfAwK/cwM/ExLsw5L+RkZf5Xc/s/YpRFSENHMGJ3THCSVmqTT3GYWXScVm+ZT2eLS05oOEdeNFVIOF1QQGJVRWRXR3BriXN2q2NqsnyDy6Wr28bH2cvFx7KmsHl4dItoYtBvafxiYu5FQNBCOMM+L9A9LeJGR9w7M+M2MMw6LcI9LMs7O+VNWehTWeM6N/ZDSeQ3O/k1Oe43M+kzMN88M+g2NOo2N+Y0MNw4LOwxKPEzM+8yLtI4MPJfZ/tCZOpDYWFLPVJHNUxaN2eFSWWNRmqSU2qRTmCJR1t8RV10SFp1QkBANlRHPl5TQWpncm9sm2BgoHFywo6K4ZiX05mT05iQy4uCsW5fZHJXTLhZU+N0bfZ6eNtLQ8E4Jsk6KtU5LNI5K9o4Lcc8KcU7McY8Ms5EOs9GPNk3KPgqNv8nP/8hPP8jOe02O906Nec4New0NN42Ldo5J943JOc1K+M3KeFCPv9Rav86YZg7Rjg8K0JBLV9oPWd+UmOIQmuQS2qPSWaIS2SBSWWBRmOIQy80LUE8OE9KRGFid1lZjWZos36A14WG1oaGzIaB1Y2ExX14j3hVU15iR7lTUehhZ+xxaddLPsM8KMw5KdQ2K8Q7KdRAMs05K8k6LMo4K9I7MNI6L+kyNPkvPfMxPPgvOfUxO+I2Nt45Nek3N/I1Od02LtI5KdQ5J8o8JMw/LfdNVv86ZNxCXEY2Nzg6LWRlO6W+hXORXWaMQ3GWU2qPSWmLTmaFSWiIR2yWTi0wJzM0L0BCN1RUYGJfioOB1IuJ6oF+zYeHx4qDxoR6n25kYmRfS21cSIhbROpRVOBBPds3LdE4Jt01LMY3KcA9K9RCNcc5K8c6Kcw2KNc2LOI5MvA1POwyPepGR+9CPuQ4NuE5NuU5Oes4PO42ONY5Mr86Kb08Kbg6JMc9M/9HXu5AYWtDOz48MFtKOI2yb5Wxfll1RWWJQWiRS2WIRGiMTGmOS2qSSXSiV0E/Mj8/NUVHL1JQQ11dUXp3ooiFyHl2o3h0p3lxiG9iXG5bTGxcTXVeTqRMQNg3L+E0Lt01KMw8JNU5KrM6J8Y6LeJFPrg9K8M7Lc87Md47Nuc5OOk6N+9MTdRJRNk7OOE6NOY2Nuo3O+g3Peg4Os09NK47KaU6Jp46KsxPTedIWqNdU0hHM1JeNnaYXIeYYldkSEdUNmmGRGORSGmMSGyQUG6XUXKeT3apWlpRQlpRQltSQ19WR2RbSmpfXXFlaWpeYFpXTllTR2FZRmleSHBfT69SS7M/MMs4MNs3Ldk3LNU3K9Q4K7I6KrE5KMo3LdNENtk7OOA8Ou00OeI5Nrk7LbQ7KtBANe03Nuk2OuU5NeI5MuM5Odw8PLg8Mps8KpE4JoY6LMFVVZ9WT5hfVnCESYScYFJkOj5ENjw+MUFNN2qISGyUS26VVGyWSnGhTXWmV12GTGZdTmZdTmZdTmdeT2lhTGlhTmlhTGhhR2BbSE9MO0pLOU9SQV5USK1VUd87PLlAK9Q4KdU5KtI5KdE6KbA8LZk7Iro8LdE4MO83P9w5Otg1OME2Mac+K6c8KLw6LN07Nu44Nec8NNpAOM09PK48MZY5KIk8KIM4JYI/L5lTR5BaTpZdVmNtSjZBMDg/Nz4+Mjk7Lj5KNG2LS3GZUHGbT3OeT3qmW2KPSlh/SGlgUWlgUWlgUWlgUWpfXWpgV2phUmphUmlhTF1YRUZJOD9FN0FJNHdUPttWUeBBPss5Ksw6K887LdE7Lb47M6Q7KMhCN+JFQM1CP6FAMJRBMYNALY47K5M9LJw7K6w6L8k8Msk/NLY8L502LYk8LII6K3w6KnU3KJFEOpBQRphVT5ddWWRvRUBNMVVeSUBDKDk7Lj5KNG6MTHGZUHCgTHqmW2iRT2SMTVl+SmlgUWlgUWtiU2tiU2xiWGxkUWxkUWxiVm5iVGhhUVdRQUhFNE1HL6xCQslJSOZeYNJHQNJFPtdGQdtHQ+FHSd1JR+dBQ+FCP8Q+O5dBMok9MII8MoE7M389MX07LYA7LIo6L5U5LJE6KYQ7LIA4Kns1KXY2LHE5LIdNP41VSJdTUG5dTVBgO1lvQTtMKjpANDk7LjxIMmeFRXKaUXKjUmqXUmCISWWNR1d5R2lgUWtiU2phUmphUmtiU2tiU2xjVGxjVHFhVGxkWXBtXmxmUFNLNHlLPpRBPalIQsBIR9BCPs5FPdlDROFDROBFQ95DP99CPcRBOZE6MH8/M4c4MYQ7LII6LH85LX46L305MHw5MHo6MHg6L3Q4LnA2K2wzKHA6LohRSpNSToJbTGJpSk5kPkhXODlBLD0+MDQ8MTw/LGFyRnKaU3OZXF2DRmKIS2CGSU9xP2hhUWpjU2liUmliUmtiU2tiU2xjVGxjVG5mW4uIg8PCvs7Jw5KGeEhNOTxHNj0+NlY/N7dQU9hKSeBFQd5ERtxEQ9ZFQNFHPdRBOqA+MYI/LoM7LII6LH85LX46L306MXk6MXY3LnM5LnI4LXA1LWwzKmkzKWs3LJJPSYBaT1xVRUBHNzQ6LDY+LzxHNjVBLTI4NDo8L1ZnPXScVWCDSVx/RWCDSV6BR0lqPWljU2ljU2ljU2ljU2tiU21kVW1kVW1kVYSEgt/j5Pr+///9+u7ny56if05RNks+NlhTULypo+y2rNpVWNNJR9hCQ9hAP9NCPdVAOqk+NIU9LoA9LH85LXw4LX06MXs7MnM6MW03LWw4LWo4LWw3L2c1LGExJ2Q1K35RS1NHOTQ/LzU7MTY4NTE2LzE9LzdGMzA3MDQ2KVFgP2+VWlV1Q1d3RVx8Slx8Sj5WPGdkU2dkU2dkU2dkU2tiU21kVW1kVXBnWIaNk97p6/b/+vn77ff66eXfxYN+aFFZTLSwp/Tm5vv69fzr4dWHc7pLQMlEP8pDPc5DPqQ9OIY8M389MX46L3s4L3s7Mnc4MWo4L2k3LmY3LWQ4LWk3MGk4MWU2LnFFPEE+NzY3LzU4LTU3LDA4KzA4Ky45KzI9LTlCMTQ2KFRiSVd6UE5rPU9sPlp3SVZzRSw2LmhlVmhlVmhlVmhlVmhkWG1kW2toVYCBg8nR1Pr6/P/++vX47/X36uXlyYuPdI2YiOHh3/v7+f7+/P7+/Pr//+e3rbpURsNJPsBIOJlDNoFBN4E7M3o7MnU5L3M5Lm82K2o4MWk3MGg2L2g3MGo5MmpAMmpVQnRxXjM5LzE3LTE3LS81Ky80Li80Li4zLS4zLS46MDRAMkJPO0FPNkljQEhiO1lzTkZfQiYrL2hlVmhlVmhlVmhlVmpkWG1kW21sWI6UlOvz9v7+/vv78+To2ejs0+Ldx9PLwOzj5Pr6+P7+/P7+/P7+/P/8/fT//fHq2Lt4Zb1HPag/PIo/PHFFPHE/OHA/OG4/N2k9NHE2Mmw3MWY7MmM/M2JNPF9POGZiSVZgSDM5LzE3LTE3LS81Ky0yLC0yLCwxKywxKyo0LC03LDI9LTVALztKM0hYPV1tUzxKOSUrK2hlVmhlVmlmV2lmV2tlWW1mXGtuWYGNi9zj6f7+/vz88O3y3OLlyOHZzvTo6v/4/P7+/P7+/P7+/P7+/Pv//P/7///8/f/96t+3nqZsWIRFM3VCL3Q/OXE/OG8+N20+Nmk+NWNBNV9KOUw/LERIL1hYPGptUj1HLzc9MzY8MjY8MjU7MTM4MjI3MS80LiwxKyoxKisyKy41LjlAODlGNTdEME5bSThEOCsxLWdkVWlmV2lmV2lmV2xkWW1mXGhwWX2NiuDn7f7+/v7/8erw1s/NtuPb2f/6//7/+v7+/P7+/P7+/P7+/P79//v/9/3/9//9///8///78ujdy8q0pqiNeGFIMl5IMV5KMlhNOVFMNlpcREpTOEBKL05OMmllTEpJNTpANjk/NTg+NDk/NTo/OTk+ODg9NzU6NDA1MSwxLS0xMC8zMjVHMTlLMzlLNTNENC00LFxoUGZrVWpoWW5mWWtnW2llWmVtWIybnuTs7/n88+zt29jTwMW3qt3S1v74//z9//7+/v/+/P/9+v/9+f/8+//9/v/8+fjq4f/9//3//P79///+69jWvVJLLlVPL1FQNFBONUlPNUVOMUtRL2FnQ11gQ1RUPFZVOU9KNkNBNDk/NThDNTlBNjlBNjpCNz1FOjxGOzpCNTQ+NUFVMEtrPDpNOkVYPD9WOi00LFtpUGdvWGxtXW5oWmtnW2llWmVtWIWUl9rj6uzx69bVw8K7qdrMwfjt8f/8//z+/f7+/v/+/P/9+v/69v76+f/9/v/8+fvt5P/9/v3//P7+///7593bxlRNMVZPMlBPMU1LMkxSOExVOF5kQo+qc3iIYUtNN1NMOlNOOklHOjtBNzZBMztDODtDODtDOD5GOz5IPTxENzdBOEhcN1BwQS9CL0FUOEVcQCkwKApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RpbWFnZXMvdGVzdGltZ2ZzdDFfOC5wcG0gYi90ZXN0aW1hZ2VzL3Rlc3RpbWdmc3QxXzgucHBtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMWRjYTEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbWFnZXMvdGVzdGltZ2ZzdDFfOC5wcG0KKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLVA2Ci0yOSAxOQotMjU1Ci0wLy01MCw0Lyw0LywyLSozLiszMCs3NC9COi9KPjBkQzKlQTLiQkLhPTuuPyycQCuPPi2QPS2sQjWCRjs6NTIzMi4vMS41Ly91S0xraqRTTmRjaV9cVlgtLjAuLSssKissKissKisuLC0wLCsyLi08MjBBNC5IOTR3OS6mQTWzQzeXPiyOPSyEOyyEQTikVEuEiXNHSzwwLysvLiwwLy1QTUaJm6d+mIt3j3dXVjo0NS86NzI4MzAyMDEyLC4xMCwzMi4/NSxCOC8+My9GMjFLNCyAOzSIPzaGPjCBPC2HQziBTUCNeGOLoIFthmZGSjwxLCkxKy1OTz95mWh/pXZrhmdAPjI5OjRDQDtHQjxJPzVEPDE8NzE9OS5MPy9KPDFAPDGaPkGfPzGnPzSsQDPCOjq+OjjDRz+VYk3pP0j5PlHvS2PnTGzUSmFuRT+Egm2Wo4+xuax3iHVYW0Y0My89PTNPSTlrbIFsZ4dJREo+OzZIQDNDPzxhPzaoPSu6Oyy5Oy/FOzDiNCvlMyfUOCvbRkK9PTDYREL3RVP+SHD9UnTaXWvozs3/8/3+9PPOy8awt69FQTU9ODJPRjd3eaCtsP2WltxpaJSCS1G4V2jIQT28PS7WOC/dODLYOi7wNTDiMy7bNy3aRUHFOy7DQzbWS0j4WW37X3TqaHC2nZj+/P/9+vX38N7r7udZTT9TRzlTSjlsaoCSldyOj8+9ZojlQETNQj/YPTvBPTDUNy7pMy/UNTHXNizaNi3SOSvbPDbWQTq7PS6zPS/oZmT4a3PbbnOjqIrp8eTM58jx6Nfu5+FbSztbSzteTT1eUEVxZ4y6cJPbP0DkQEG3PTDaPzrJPSzjNSz1LDL5J0DwQEvdMzTXPzrTOjK9Oy3YPTjXNi7gYF3+cHzRUll4i156n2uItHWyuJyjoqpeTTteTTtdUEBrYWx4eae5iJvpSk7UPDe8QzjTOS3ePjLzNjrxNzrmOT/lQETSS0jTRUPWPzjpNjrmNS/yMDDXWFH/XHSjSUtylVt4n2B6qGCFpm9ZaV5bTj5hVERsaIFxdrqwsNLOx62ddWvnV1bRQjrOQjXgPTjeNi3XQ0HwVl7xOD70R03mNzThOjToNjblNCryMjHdTUz4RmhjRztiekpqk09rlE5ceUNQajtBPjVeWltjY5+AgdSPjNGLg7RuXFLOYV7lYFnHOijPOSrROyzIOjDQQDftMDT6KTzyMDniOTbnNTPYOSbZOSn2R1iwO05FRzF3jVxpjkhpjEpmhEhokEo3ODBKS0NvbZSEgMqAfK9zZ2ttXku8TEHfOC/UOCm/OivNPzPJOizgOTPsPD/iQ0DiOTboODveOTW0Oyq6QDPeS1tQSTZ5i1ljeFFnjEZpjEpslk52plpgV0hiWUpoX1BrYVdYVUZYVUKLV0zFPTHYOCrSOSmqOyjKPDDgOjraNjWvPCrVOzPoOTbbPDi3OzOPOSiYSD2WXFFkc0hCSTc9RDJtkExvmU9wnlNXgEhpYFFqYVJrYVdrYlNnXk1ISTlrSjnbT07OQDbVQDnIQTvdQj6yQDaIPzCIPC6SOiysPDCaOiyBOSt2OCuMTkGNWFBUYj5DSzQ7QjBukU1xn1RkjUtUeUZqYVJqYVJrYlNsY1R1bWKbl4xqWkpuQzymR0PXRkPeRETZRD6xPzWCPDCCOix+Oi95OS91OS5wNitsNiqMU0xgWEU/TTQ6QS82PDBnhEpkh01hhEpJaj1nZFNnZFNsY1RuZVayt7r7/fja2L9bWkivpKLvvbbOV0/QQj68PzmCPDB9OS56OjFtOS5oOCxpNzBnODBSRDs0Oi4yOC4yPy4zOS1adE1TcEBbeEgxQjJoZVZoZVZrZVl5e3Dr7/L19u7o6tS1tqj19fP+/vz27uvLf3GwRDqAPzl1PDVvOjJsNzFmOjFlRTZnYk4yOC4wNiwuMy0tMiwvOTA7RzNFWjtOYkclKi1oZVZpZldsZlp0f3Hu8vX09+bd2sn99/f+/vz+/vz+/v7//vnhxrurhnR7VUhlRDVdRjZUTjhKTjNWWEI4PjQ3PTM2OzUyNzEtMi4xNjI4RzI9SzorMitha1NsaVpqZlp3gnrp7+/X1MPc0c39/P/+/v7//Pn+/P399O/+/v7//faYknhUTzJMTjZPVjVyflZSUDlLSDc5QTQ6Qjc8RDk9RTg9TDVBWjpDVzwqMSkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0aW1hZ2VzL3Rlc3RpbWdncmF5LmpwZyBiL3Rlc3RpbWFnZXMvdGVzdGltZ2dyYXkuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTUwNWEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbWFnZXMvdGVzdGltZ2dyYXkuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdGltYWdlcy90ZXN0aW1naW50LnBwbSBiL3Rlc3RpbWFnZXMvdGVzdGltZ2ludC5wcG0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5YzUwYTguLjAwMDAwMDAKLS0tIGEvdGVzdGltYWdlcy90ZXN0aW1naW50LnBwbQorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RpbWFnZXMvdGVzdGltZ2ludDFfMi5wcG0gYi90ZXN0aW1hZ2VzL3Rlc3RpbWdpbnQxXzIucHBtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTFjZDhhLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbWFnZXMvdGVzdGltZ2ludDFfMi5wcG0KKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLVA2Ci0xMTQgNzUKLTI1NQotMC8tMTAuNTEuNjIvODMvOjMtOjMtOjMtOTEuODAtODAtOTEuODAtODAtODAtODAtNi4rNS0qNS0qNCwpNCwpNCwpNCwpNCwpLywlMC0mMi8oMzApNjMsNzQtOTYvOjcwQTsvRT8zSUE0SkI1TUQ1TkIyTkIyUEQ0VD4xZ0E0gkQ1nEQ2skQ3v0M3yEU9ykc/7EJL60RL7UNG8z9C+DlA8zo/5T8/0j46tUAutD8ttD8tsD8tq0AspEEsnUEql0Eqkj8vkT4ukT4skjwrlD8rlD0qlT4rlj8slD84mz8yrkMzvkMzukAxpkY4eUQ2SjcoOjY1ODQzNzExNTAtNzIvNjEuNjEtNTAsLjAtLy8tMC8tMi4tNSwtMykqOisuRzg7c0NDkExLpVpfpW+Hi36qe4a8Z2qdU0dvUEhgUEtfampyj5SQnqSYlpiKcnNhV1ZEVVFiVVFiLy4sMC8tNDAtNTEuNjEtNjEtODErODErODAuNy8tNy8tODAuODAuODAuODAuODAuNS0rNS0rNCwqMyspNi4sNi4sNi4sNi4sMi8oMzApNDEqNTIrNTIrNzQtODUuOTYvPzktQjwwRj4zRz8ySD8wSj4wSz8vTUExTEMyW0Q0ckMxiEEvlzoppzsutEI3vEc93UFF40NF7ERE9j9D+zo/9DtA4UI/yj84s0Atsj8srz4srj8sqUAto0Arm0ArlkApkT4ukT4ukD0rjzwqkD0rkjwrkz0slD8rlEA2oEA0tkI1wkI1wEY7o0k+ckQ3RzksPTc3PDY2OTQxODMwNjIvNTEuNTItMjEsLTIuLzEuMDAuMTAuNS8vNSwtNiwtPzM1YTozfkU8kFBOk2Z6gXijdH65Wl+XTkJyTkNlT0ZhUE5cb3N2gIV/gYR5amxeVldJXFRfXFRfLCwsLi0rMC8tMy8sMy8sNC8rNC8rNi8pMy4rMi0qMi0qMy4rNC8sNC8sNC8sNC8sMy4rMi0qMSwpMSwpNC8sNC8sNC8sNC8sNDEsNDEsNDEsNTItNTItNjMuNzQvOTYxPDUrPzguQjovQjovRDouRjouSDwuSz8xR0g2Ukc1YUQydUAugjspkzwro0MzsEw9z0VC1kVC5EJA8js9+jk88Dw910I7ukAxrUAsrUAsrD4tqT4spT4tnj8rlz8rkz4pkD8ujz4tjj0sjj0sjj0sjTwrjj0skD8ulEI0pUEyvUE3x0E4ukM7m01DY0M4PDouQTc1PjYzPDQxODMvNDMvMjMuMjMuMDItLDIuLTIuLzEuMDAuMzIwNDAvMiwsNS8vUDUqYzwtcUU8gGFxfHamb3i7XF+kT0WCUEFsSz9jRkJZRUhRUlhWVVxUUVdLVFdMYFhWYFhWKysrLCwsLy4sMC8tMS0qMS0qMi0pMi0pMiwsMSsrMSsrMiwsMCoqMCoqMCoqMCoqMiwsMSsrMSsrMCoqMiwsMiwsMiwsMiwsMzArMzArMzArMzArNDEsNTItNzQvODUwOjMrPDUtPjUuPjUsQjguRTgvSDwwSz8zREU1TEU1WUIyaD4udjsrhTkplD4voUU2vEY8x0c+3EQ/7kA/8jo65z47ykQ4qj8rp0Atpj8spj8upT4toj4umj8tlD8rjz4pjT4tjD0sjD0uizwtij0tiTsuiT0viz8xk0UxqEI0wUI7w0I9uE9Lm19XZVRKPkg9QDcyPTYwOTQuNjMuNDMuMTMuLzQuLjMtLTMvLTMvLjMvMDIvMDAuMjIwMC8tMC8tPS4pSzUqXUI7fmt+ioe8eoHPa269T0yTSj1pRjxhREJaPkJNQkxNTFdRTlhPUlxRYVlMYVlMLC0vLC0vLS0tLi0rLy4sMCwpLysoLysoLysqLysqLysqLysqLysqLysqLysqLysqLysqLysqMCwrMS0sMS0sMS0sMS0sMS0sMCwpMi4rMy8sMy8sMi4rMi4rNDAtNjIvODAtOzQuPTQvPjUuPzQuQjUtRTgwSDsyRz41TT82VT0zXjgvbjgufjgsjzswmj4xp0EztEQ4yUY83kM+50JA3kU/vUM0oUIsoEEtoD8unz4tnz4umj0slj0tkD0rjD4qizwriTwsiTwshzsthjwvhT0xhz8ziEI2k0Y0qkg9vEU/u0tHsmVdmXlsc3RmT1xSTUk+Qj41OjcuMzMrMzQuMDMsLzEsLDErLTIuLTIuLzEuLzEuMDIvMTEvMTEvMTEvOCw2PzQyU0hEgnuNkpTHiY/ZcnjCYmenVFFwSkpkTFRhXWtscYJ8eop/b31wXGpdYVtDY11FLS4wLS4wLS4wLi4uLi0rLSwqLionLionLCorKykqKykqKykqLCorLCorLCorLCorLCorLSssLSssLSssLiwtLiwtLy0uLy0uMCwrMS0sMi4tMS0sMCwrMCwrMi4tNDAvOTEvOzMwPTMxPTQvPjMvQTQuQzYwRTgySDk0TDo2Tzo1VTYxZTYwdjYtiTkwlDwwnEA1oEAyrkI1w0U50UY/zUg/s0U4mkIumkIumj8tmT4smj4vlj0tkz0ujD0sij0tiTwqhzsrhDssgzstgTsvgT0yg0A3h0Q8lEo9pUhAs0tIsF1VpoFvk5V/fIt4YW9gUVNFR0k7PT8yMjQpMDEpLi8pLi8qMC8tLy8tLy8tLy8tLy8tMDAuMDAuMDAuMDAuNyo+NzEzU1VKgoaJj5SyiZHAgI+4hZm0h5adfI6Qd4yFgpqMkquYjqWRgZSAYHFfWlY5YFw/Ky8yKy8yLS4wLi4uLi4uLi0rLSwqLSwqLSssLCorKykqKigpLCorLCorLCorLCorLCorKykqKykqKykqLCorLSssLiwtLy0uLysqMCwrMCwrLiopLysqLysqMS0sMy8uOjEyOzMxPTMyPDIwPTIwPzEuQDIvQjUvQTYyQjk0RDk1STYyVzYxaTcufzswjD4xlj82kz80mkI0qEQ1tUU5uEY8qEI2lz8xlUAslD4tlD0slTwukzstjzwuiTwshzsrhjoqhjoqgzorfzktgDwxfz82g0Q9h0hBj0k/nUpEqldTqHRnmph/iqeIgJqBc35uXGhSTFVCPkU1ODswMjIqMC0oMCoqMiwsMSsrMSsrMCwrMCwrMS0sMS0sLy4sLy4sOSg6NDEqUls+f4tzj5qUjJugjqifocWrn8Crn8Gpj7OXi7CPkbOSiqeIfpV5Wm5VVFM3VlU5LDAzLDAzLi8xLi8xMDAwLy8vLy4sLy4sLy0uLiwtLCorKykqKykqKykqKykqKykqKykqKykqKigpKScoKykqLCorLiwtLy0uLysqLysqLiopLCgnMCwrMCwrMi4tNDAvOzIzPDM0PDIxOzEwPDEvPS8uPjAtPzEuOjcwOTgzOjk0PzgyRjMsWzUqcTksfzwskTk1jT8zjkIylEExnj4wqEE4oD82lj40kUAtkD0rkTsqkjwtkTsujTstiDothDsshTkpgjkogTkqfjgsgD00gEE4hEhAiU5IjUhBnlBMq2Rgp4h2kKWEgK6JfZ6Bf4Z0aHdgWWdQSFNCPUM1NjYuMi0pMSgpNCorMikqMikqMikqMCoqMSsrMCwrMCwrMCwrOSgyNDEgSVYqd4lZjZx7jaCEj7CDnsyLoc6nncqhh7SJhrGEiK+DhKR9c4xsU2dLSUwvRkksLzAqMDErMTIsMjEsNDMuNjMuNTItNC8rNy8sNi4sMi0qMCwrLiwtLS0vLCswKSouLygvLygvLyktLiorLysqLi0pLi8qLi8pLS0vLi4uLy4sMi4rNCwpNy4pOi8pPDIpPTQrPjUuPTQtPDMuPTIuOzAuPS8uPzEwRi8nOjYrLjosNDUtQysrUScoWTIrXUEzdkIshkExlD0zlTkujzwujkEvj0IwkD8smzgzkDwygkAwfkEvhEExiT0wiDouhjoteDwxcDstc0AvdTstgD4yi0c8h01BgVFDmktOjW1gfIxxfqGBjKaJk6WNhKKGa516Yo1iWXtWW21TUlVERz43PC4uNicsNCUsJiwsKSosLSgsMicvNCcwMycxMCgzLykzMS0uLi0oSEs4eIFiiZpuiqJwiKZwkrV9nbuJk7OBhqt4g6l6g6Z+fZh5boFrVGNQRUk6PUEyMTIsMjMtMzQuNDMuNjUwOTYxODUwODMvOTEuODAtNC8sMy0tMi4vMC4xLi4wKyovMigwMCouMCouLyssMS0sLy4qMC8qMTArMDAwMC4vMC8tMy4rODErOjEqPjQrQDYtQDcuQTgvPzYvPTQtPTIuOzAuOzAuPTIwRDMsUCwuWCYvTiYuPzAtPDIpUTApaS0saTssezwziTs3izo2iD41hUE2hkI1ikI2jD8viD8uhz4tiDsrizkrhzoqfzwpeD4ofjsydjovdj4veT4wgkI4ikc+iUpBiE9Emk5OlGxgg4lvfKB8gqqHjKmLjqCGhZV7Y5hqXY1jXIZiVHVYRV5INkY5KjYsJS8nNSUoNCUqMicrLyouLCwuKS0wJi4wJS8xMiwuLismREY4c35gfpBqf5trfZ9tgKZzh6l2gaZzfqZ0fqV4faJ5eJV2aoFnUmROQkI2OTktNTYwNTYwNjcxODcyOTgzPDk0PTo1PTg0PjYzPDQxOTQxODMwNzMyNzMyMzEyMS8wNSwvNSwvMy0tMy0tMy8sNDAtMzItMzItNDMxNDMxNjIvODMvPDUvPzYtQzkwRjkwRTsyRTsyQzkwQTYwPzQwPjMvPjMxPzQyQDcyUi81XCg0USwzPDcxNDsrRjYpWi8pYjcwczk3gTk6hDg6fjo3fUE5gUI7hUA7fkUxgkEviDwuizktiTcrgzoreT8rc0EqhTIqlEc/fDkwf0U5fUc7f0s+g01DilRKbm9QfHdah4FnjJd3gaN+fq2De6mCdp55hI1uf4xue4tucoVpZXNaVllISEA1PS8mOSkpMyknLCsnKS4oJy0pKiwrLiorMSgrMyknPzsyUVRBaXZacIZgcZBkcphnc5tpdaBrdJ5seqR0eaJ2d5t1dJJwZ4BiUGRJRD01PDUtNzgyNzgyODkzOjk0Ozo1Pzw3QD04QDs3Qjo3QTk2Pjk1PTg0PTg0PTg1OzYzOTQxOjAvOTEvOTEvNzIuNjEtNTItNjMuNzQvNTQwOTUyPDk0QTo0QTgvRDowSDwwSj4ySj00Sj00RTsyQjgvQTgxQDcyQDcyQTgzPjk1Pzw3QT43RTw1RzkwSjgsSDsrRj4rZzIqejkzjz8+lENAkUhCgz82gjkyizw1gUE1gz80gjwyfz0xeT8xeT8xfT0xgzoxozMx5X97plNNgUs/bk89alQ/c1hDg2BNY4BSk3hdv2RhzmFkyX54rpZ+lqB+iJx3j49ziZR0fphzdJZxaoxpYHhYU11EREMuQzQtOzIrMTEnLzAoNDEqPiwsRycsTiMsT0MzYFtFZ2tQa3tXaINYaYtZb5VicZlkcJxrb5lrd6B2dZt2dJZ1cI1uZYBfTWZGTEM8RDs0OTo0OTo0Ojs1Pj04PTw3QT45Qj86RD87RUA8RUA6RD85RT44RD03Qzw2Qjs1QjszQTgxQTgzQDcyPzgyPDcxOzYwODUuNzQvOTYxOTYvPTgyQTowQzswST0xTEAyTkAzTkA3Sz41STwzRTsyQjkwQDkxQDkxQTo0RDs0STgxWzw3aD03cD43czw1ej83hEg+j0Y3nEU7nz41nj00okk7o00+o0c4qEM3oUFFkzk7hzw5dUE2bEU2d0M4iTAyrDZC309PykVGxWJdgk0/aFxCYmVGbWZJgWlPt2RW5FVb+idH/yFJ/zRU8VBg52Vt4mtvyHVxw3p0uoB1soR3rIB1qnVto2Nhm1NUk0hPfz5CaTc4US8tSjMtRzItSjIuUzc0XVIyZ2JCcnhUdYZcbohbb49edZVjd5hjc5ZudZd0epl6gJqBepR7bYZpZH1fT2lGVU1CUko/NzgyODkzPD03QD86QUA7Q0A7REE8RUA8RkE7RkE7RkE7R0A4SkE6SUA3Rz00RTsxRDowRTsyRDsyRDs0PzgwPDcxOjUvOTQuOTYvOzcuPzguQzswRjwwSj4wTUAwTUAvTz40TD4zSDsyRTsxRDsyQjsxQDwzQT00UTgxkj9H1U1h1lJdmz43lEg6u0tH2z9KokUzp0Axqzsvrj4wqkMwnzomqj0pszsrszY+vD9HukdMo0tHfzswhDQtvUFJ4j9U2jg1zjY1yVNPlVZHcWFHcHBOgmtMpXNc/0pX/ThK/zVO/y9K/zVP/TFK/y5L/y9O/zVY/zla/EFg+EVj90Vn9kJn/ENs/0dz/1h68VRz21xxqk5ZZi4tUTswPD8sOUs1XVAwaWREfIFhfYxreI1sd41peY1ogJFtjZ+FmKeSoa2fo6+llKKVeIl2YnldT2pJWFdFWllHNjcxNzgyOjs1Pz45QUA7REE8RUI9R0I+R0Q9SEM9SEQ7S0Q6TEM6S0E3Sj4yST0xRjwwRTsvRTsxRDsyQTowQDkxPDcxOzYwOzcuPDgtQDouRDwvRz4vTD8vTkEwTz8vTj0zTTwySDovRDowQzswQDwxQD4yQj82djk0zlRf7TtR0Co0pDQmkjwjtD4w1zQ3pT8xqjwvtkA2u0c6rD4vpToorzkrwUE2ykE53j4+6To/5D5A0UQ92VNK3D496TA42jYq0TIsuzcys2FTgFpDgl5ErmJS3Gdg9zxH4jxA10hE31FP60pQ8jlH+jBG/zRM/jlV/jlX/z1f/0Fm/j9o/kBs+kBv90Bw/z9o/0Zr+Upr6FpwvlpkbTYzUkExRks0ZFVChHtqmpuNlZ2Sj5qSmqSbl52Tra+kwsK2y8jDzcnIyMPHsbOyiJKHZXhiU2xOVV1FV19HNTYwNTYwNjcxOjk0PTw3QT45RUI9SEM/SEU+SUQ+SkY9TUY8TUU6TkQ4T0M1T0E0TEM0SkEyRz0xRDwxQzoxQToyPzgyPDcxPDgtPDgtQTsvRDwvSz8xTUAvUEAwT0AtTz0xTDwvSDovQzkvQjovPzswPz0xQEA0oEJDvEhLuS8vuC8nqTkjn0Ijm0IinD4inzgvpTYvtD05tkE6qz8zpzsvukQ6wz86xD4l5DIo/yAm/yIr9ykp6DMq5TMp6y4o1jck1DYqxTozxWVZnmFOoVlK3GFc8UNM7j1D1D87vz80zkA88kFJ/zRH/DVI9TxK/TtV/jdU/zda/zlj/z1t/z9y/0B0+UF1+kdl/0tq/kxs/2F872Z6z2pymFRTf1BIkH56tKiovbu+uLzFvMLOxsjV1M7c49jm7OHf7+Dj69vl49Xix8LImZ6Ybn9sXHVXX2xOXmtNMjAxNTQyODc1OTg0Ozo1Pj42QkI4RUU5SEhASEk7S0o1TU01S0o4SklFUlBdS0lfT0Y3ST8zSkA2RDsyQzo1Pzc0QDg2OzU1QTYyPzc1Pjo7PT09QD87R0A2TUAvTz8oQkEvSjkxUDM3SDU5OT44M0Q0OEApUUszvUw+ozUmoDkmoD0oojwmrj8rszoptzUnozkpojsqp0IwqUIvqz4qtD8uwkQ1vDgrzTYrzTsu0z0v4jcv8i8t9i8s5jYp1D0o3Dcj0TkkwzcmykQ510pD8lJS+EFG/jlC4ERHzkA+sjwwqD4uv04+1klC7T9B/zxG+ERN/UVR+0BT/0Fd/0Vp+D1o+EJy/Ut7/0t371Fy6Fhz/1l6/0dz9UtwwGh2em1luqCR3dXK4uPl5t/v9Nr1/935/+j4+fP3+/jz+PPw8+rt6+Ln2dPVt7a0jJGKfYV6hIt7foV1Ly4sMTAuNDMvNjUwOTkxPDw0QEA2Q0M5SUY9TEk6Tkw3T004TkxAYF9ldHSMdXWZamJ3Vk9hS0NSRD1FQjw+PDczPTkwPTkuOTYvPDkwPjsyPzswRj4xSz8vUD8vUD0sOEAoPj0rQDkxPDczQTk2UTIwdCkupTlGpjYopDknojsooDokpzwotUAuvT4vwzsvsj4xqzosrDsrrzssszsrxEU2xDwwwzYs1zQr1jgt2zku5jMs9C4r9C8p4TQmzzkh3TIg2zkq0TstzD81xzoz2ERA50lI5T8/1UE9xT82sjosrDsrtT0v10pD5EBB/EdQ8UBG+0VR/URW/D9b/0Nn/0Zv/0x5/0t7/0V4/012/1d4+k9v+Upr2Epi04uOZlZHwZeL+OHZ+/f2+PX//uz//+7///X///3+//35//n3//X2/fL27uXozcnGr7Cqp62hqrKlpKyfMzIuMTAsMjEsNDMuNzcvOjoyPj40QUE3TEQ5UEk5U0w6U0w8VFBPc3GGjZC7k5jSko3NgH22b2ybXlp7UU5hQkBFPDk0OTcrNTc0ODkxPzwrRD4oST4oS0AsTEAyST82Tzw2Rjg1OTgzMDszNTsxTzQtij5AqDY+qjwrq0Aupz4rqz4qrDkmujssxDotzjsxxD41vTgvvTktvTcsxjwxyjwyxjIo0Dcv4jEp5DMr6TQr8C8q+C4q8C8o3jQjzTcf2zEg2TMl1jgt1j8220xEzEM70EtCxkE4vzssvDoqtToquj8wvT0yy0A73URG7EtR7UBE9kZQ/0pZ/ERc+kFh/0hu/096/0t4/1B8/053/1R1+05q7kxj/3qI/5qelktIv354/NHL//b2/vz///n///n///v///z5//v4//r5//b4//P39+vt4NjV1NHI1dXJy9XNvsjAPTozODUuNDEqNTIrNzQtOjcwPjsyQT41TEI2VEg6V0s7VEpAWFFYeHeXlpzWoqv2o6j5nJ/sl5rdjo/FgoGraGiEVVJlS0lXRURWPzxFPzo0Qz4rRUAqQkMxP0Q9O0RDQ0BVSk1eTldgTFhYTE5DYUo6iVI+jkAsqj8trUAssEEusTwqtjgpwjgrzjcu1jky0Dgzzzcy0TozzzYw1z010jUs2Tsy2Tgw6zAn7zAo9C8p9ywo9y0p7TIp3TYmzzkh0Tkk0TYk0zcq0Tct30pD51xVyEg9uD4ztz0muDsluzkpwj4xyEI5z0VC00lH00lJ6ERF70lN+1Fc+k1g9kVf+0ho/092/1B561p39lt6/VZy+lFo/1ts81Ji8k9g80xevnBs77i1/+zp//z7+f7/+v7//fv8/fj1//r3//v6//T0+Ons7N7e5drU7+nd+fbn5vDvz9nYQj41PzsyOzcuOTUsNjIpNzMqPDcxQj03S0E3U0c3V0o5W01CV01WcHCUkJjZn6v/q7T/rbX/rLP7rK/yoKLfjIvFdHGoYFuRXVSDVk9xRUFQQD89P0A4QEU+O0RDRk9UTWuNaXycgnyYkGl+oFhjsFFPq0ExpzojqTonrTwqsTwqtzkqvTUnyzct2Dox3Toz3Do33js23zw34j035UA63zsy70tC81FG7jYs7ywm+ioo+yko9zAt6TQr2DIk0zYlxzwnyz0p0Dgq0jYq0zkx405I3E5KwDk1tz0lujwmvjkoxDovykA22lNNyklDw0ZA4khG6U9P7VFV7U1Z+FJm+E5o/1Bv/1F17Vd0/Fx4/1p0/1Np/1hp/1tq+Uhc/01jqmdh0puY+9nX+/Px9//9+P///f/8//n3/vn1//f0//b27+Hh4dPQ6N7V/vfn///r7/j31t/eR0M3REA0QDwxPTkuOTUsODQrOzYwQDs1SD82TkU2Vkc0WUk8WE1RaGeHh4/Nmab1qrL6r7f/s7r/tLj/ra/5oJ/rjYrXeXbDcGOpYlqTU1F4QkNXPjlAUUFEZEdMiWFpsHCivHSiwmaNyExu0z5U2D5GwjgttT0krTgmsTgnuTorwzstzjsx2T814D023zgw1zIs2DMt5j854zoz2zQs1zMp2Dgs1jkq8Uc69jkz9ykp+yot7y0t4jQt2TIq1DAnzDsq0Tsq1j0t2Dwv2Twz2D056lJR1T9BwTwpwjoqwTkpwDgqxD4z0E1Dy01Bv0U61UhB3E5K31FQ30xS8Vll/V5y+lRs+lBr/0p1/1Z4/1Vv/19w/V9t9WJs5GZq02JkfVdMoXpz4b+9+Ojo9/v69////v////n9+/vz/fr1//r3+O3r4tfR5dvP//rn///m8fbw3uPdT0k7TEY4SEI2RT40QDkxPjcvPjcxQTo0Q0A5TEQ3UkUyV0g1V0xIY192g4q+lKPoqaz5rbD9r7L/rrH+qaz5oqXymZzpjpDdh4TLcHGxZGiYXFh5a1BjiUpVtVFZz1Nb8EJj5kZg10BRzTM/5UFI3j4+y0E3ukUzvEExwUIzy0M11UU62EA11zkw2DQr2zQs2Dcv3Tox3jcv3DUs1zMp0zYnzTQk0j0p1T4t8kE5/jY4+Swx6zEy2C8s2TEu4DQ06jcy5zky4Dou1zor3UU46VRN1kBB4ElO0j40xzcsxTsuwTwtvTstwUIzwUM0vD4vx0Q6z0xE1FBL1E5N615k/2l1+Vpu+FJq/1J4/VZw9Wt47mVv9WFv7mhz03t5n3FiX1xJeWdby62r9uDi/Pj5+f////7///n/+//3/f74///6//z27+bd7OXV//3k///k9Pbr6+3iU009UUs9TUc5SkQ4Rj81QjszQTo0Qjo3QUI8Skc4UUYwVkcwVUg/YV1ug4q2k6HepaL5qqj8q6z+q636pqr0o6fuoajsn6folp/ijZnViZPGjYWqmGiCuVJj4ENO9zg/6T8u2EguwksrvEQp3k8/3Tk34jxA1TQ6w0EzxD4yxTksxjImzzIp1DMp2DQr3DUt3T802Tgu3Dgu1zMp1DQmzjUlzTomyDokxTon3TQt+jY4/zY88js94Tk44Tk55TU4/Sox9C4v5DEq1TUnxzMl72FXzkA+1UZI5khFzzgxxjkvvz0vuz4svUAuuTonvzwqtzsvwEY5x0xEy0tI52Bk+2l0/WJy+lht+1104mpz5ImG4nZ2/29+72Fx9Zyet5qMTWFIYF1OwKSj+Nvg//f7/f7///3///f/+v/3+P70/v72///2/ffr+PPg//3k///i/f7w+/zuWE9AV04/VEs8Ukk6TUQ1S0IzSUAxSUAxRkM6TUc3UkozVks3Vk1IYl90gYW1kpveo5/2n6D8n6X/oKz/n6zyoqfpq6XvsKH0l6n9kqLerJ28v2t63UBL9zVA6zs+1kVC4TpC0z5AykM/0D4+60JH7DhB4jk81Ts5y0A7y0U8xUc7tTorvDgsyDUt1DAu4TMy4z0t3zMl5zco2zQhzjYfyDciyzgo0TUp0zEszzcqyjcl0TYk4DIn7TAu7Csw6i009Sou7i4t4zUq1DcmxTIg3U4+2kpC1EA+4FFT00RAyTkwyDkpxjsovjkmuz4qtz4ttDovuT0xvT8xw0Ez8W1h7Whh72lm9nBx/2x88GNr82Bm9XRv/Xt7/1Zt9oCQfqWGVGhDYWRJvauf/eXj//f6/Pr9+////P3/5P/t5v/q9//z///y//zv//jn/fXg/vjg/f39////XFBCWk5AWEw+V0s9U0c5UUU3UEQ2UUU3SkY9T0k5Vks1V0w4Vk1GYl9wfYCrjJLOl5bal5nmmp/xnKXynKfnmKHcmpvbl5XejZHOqoW7yGyT0Edb3UFF4kA+4z9A5D1E3jpB0UFBwj451ktI4j9C5zo+2jc4zTw3ykA2vzkux0c6uTssvTgpzDgu3Dcx6js41TQq2jYs3Tcr1j0twTgluDsnuzwtvjgv7D872z0yyDomyDok0Dcl1DAm2DEr1TAu2TAr2DYrzjUlzTwnzDso40xB1zo18ExN+mRj7llV2EQ6xjQnwzcmujkmtj0ssj0srzsusjwutj4uv0Q13FxR62di72lo6mNn5VRj82dw92Rq/HZ1+HBy/Udg8XSEc5JzUWpAaG9Qy76t//Xt//33+//6+f/79fz12P3e1fLW4/Xd9Pnl/ffn+/Lh7+PT9OnX/Pn0//34XFBCW09BWk5AWU0/V0s9Vko8VUk7Vko8T0g+U0w8WE03WUw5VkxDYVtndXSWhIa2i429jY/Kj5LXkZTZkZfThYzCeYK5b3e1hHCLulp/7T1k+DRM5kRC1kxC4UVI9jlN3EJEzkRBtTkx0EtE3UFC4Dw91kE9y0c7wjgrvTgpvTwpvTwpxTwq0zsu3jcu6Dcx5jQ06DAy7TU14DMvzjQsyTkxxDIy1j1C8jE04DUuyTYmwzslxzomzTco1T0w1D0yykIywTonxD0pxDsozDsq2z004jY24i0y1Dcy3D843UU61UM2yUExujwtsTwrrDwuqz0wqz0urTwstkIz01pP6Ghl62lr7GZt+2988Gdv/Wdw/3d69mVs/j1a72Z4f5N3ZIBQfIhizcmu//nn///x9f/x6frn1ufUtN+0tNiywty51eLG6uzW9O3b693Q7dzS7OLZ6+HYW04+Wk09Wk09WUw8WUw8WEs7WUw8Wk09VEpAWEw8Wk06Wk06WE5CW1JXY150c2+QeXydgICyhoPGiIXKgoC/eHiub2+lZ2agjVZTxUlU/DhM/zRB8EE+3klC5URK9jtQ1ERDxUQ+sDouykpBzDczzS8sz0A4vkQ1wzoowjsovzonwTomxzgn1jkq4DUr5jQq+C0x/zA3/yw0/y40+jE39C85/jBE/Sc/9icv6S8w1DYrzToq0Tgq4T0z5jsz5jsz00s7yUExwTgoyDkrzzUr5D853Ssr7TU31TQq1Tcs0DgtyDgt2FBEvkAysTkrrzsurTwurj4wqzwrrTwuxlFH42dl8G909nJ9+3N993B3/255/3B39Vtn/zla7FlsmqWHe5xniJlttLiV2t3A1+bJv9i4rsmoo72ajbyGl8GPo8eXs8ykzNW45eDN7NvT5MzK18a+zr21Wk09Wk09Wk09Wk09WEs7WUw8WUw8Wk09Wkw/W04+XU47XE88Wk5AWU5KXFJaYFhnaWSCcmycfXa5iYLIi3+/iHOrknSoiWOcoz8wvT413z049z89+Dw78D1A60FK5D9NxT44tj0yrTwuxkg81j450TMw0EI4szopvzglwzwpwzonxzoozjgn1zQl4zIo8Dkx7zMq9C0o/Scn/yco/CQp/yMy/yA6/xEz9iYz6Sox2iwt2S8v7TY49jM39y8y9i4w1jky30I7zTApzzIt2Tcy5UA82TAr4zcz1TwuzDQnzDotyDow5l1TwDsyvTowuTYstzIptDQnsjcosjostT8132Vi83V5+XeB/XqC+3V+/3F+/2l09lVl/zlc5k9glZx6eJlif5NilJx1k514fZZucZVpc5dpf59wgbF1jLl+kr6Dm72KpLmQvsCo2szD17+9w7SvtqeiW0s7W0s7W0s7W0s7Wko6W0s7W0s7XEw8XUs9Xk09XU47Xk88XlFAW09DXE9JXFFPYVNsaF2Hd2+rhny7m4S8qHmlwXahu1uJ1Dw5xT80yEk42kM49jw//TlD60BIz0BCuzwzrjorqjsqxUM22Do34Ds54UpDxkQ2wDkmwzooyT0syzop0DQn3DQp8z417jMs2Dkm3zMl6S4l7Swn7Cor8Cgy+iI5/xo58C079DpH/kpV7jZC8Cw6+S059S4z7Css3DQx3jk3/11c2jg23D062Tw10zYt0DQnvzYkwDgowzsvxDsx41ZPxTUt1T431Tw04Tw42z43zjsxvjgsujww11xX83V4/n+G+XqB/HmB/3B/+2Ny81Bj/zZZ5E1cdn5XYH5IbYFQeYRac4JZZoNVapJed6BogqVtg69yibd3irh3kLp7ka99nKeFu7Kjy7axrKaqmpSYW0s7W0s7W0s7W0s7Wko6W0s7W0s7XEw8Xks8X0w9Xk07Xk88XU47Xk4+X09AYFBBZE5bYlVxb2mVfXainoCi0Iaf5G2D4kpj/zpN7EdNy0Q+0UY/6kFE9D9G5ERExUI6uD4xqTopqjkpwjwx50JA7Dw+3z045lpNy0M1vzYmyDoszjgq1DEo5zoz7DUx6i0p6DQ18DM39zI59zQ87DE87jNG8y5K/zJZ6zxJ/1lm/1pq8j9S8DdH4zI60jcywTgoxzIr5lFL6VRQ2EA/2EM/yzYvzjosyTglsDwltDwrszgpwTwz2EdC0jMv6Dw45zQv8y0u7zMx4Tkw0jswvDYq0FFK8nR1/4OH9nd+/XqC/21/+WBy8U5h/zdZ3kxXWGc8W3dEbn9SeoVbfo9lepppeqVvgapwhqpth61yibNzhLZxh7l0i7F2k6V9ubei2Me9srXEmZyrWks4Wks4Wks4Wks4Wks4W0w5W0w5XE06YEo8X0w9Xk07Xk88YFE8YVA8YVA8YU85Z01QYVNkbW2JfXiWnn2O14CG/Gpt/0dO/ydP/zlS4EBK00JF20JE30FC1kI+wz8zsjwuqTopsD8ty0E34Tc35S4y3jUy5lJI7GRWyD4xyTku0Tct2zYw5TYx6TAu9DQz/yZD/yNC/x8+/h078yJB8ipO8idU/zdq/Fxo+Fpo7k1d4DlL3jlJvCwspjcmmEUltToq0VNFxUA5xDo33E5KxzkvxzgoxzklpT8opjsnqTUoyEg/20dD3TUy6zQw8jEs/ygt+iws6zIt2jouxTcrxUI66Wxq/4eJ/H2E/nqF/2d581ps60le/zVW1UVPTF8xXXdHfI1hiZRsjJ1ziKh3fahwfqdrg6dphaZthKxtf7FqgrZuiLJzlKt9u76j18u9qrXJi5aqXUs3XUs3XUs3XUs3Xkw4Xkw4Xkw4Xkw4XUs/XU0+W049XVJAXlNBYFBAY1BCZE5DbUtJZ1dicXaWgYm4mYy4u4Ga5Xl5+Wxb8U9c60NQ80RR7DxH4zo/1zw6zD82vjotpj8srTkqxkA30Dgz2TYx3DYq2zom2Doh5z88501DyTwrzz0u5UA66jE28zA++TRF/CUq/Scp/Scn+CYn8iQo8Skz6Cg39zpO/2Nt/Vhf8EpM1D02v0Eyq0ItkzIflDMipzYwx0dExDQ01kJC2ElDyz40xzQqzzUtuT0xtjAnxDQs2EM84Uk+2zQs7TAu/y4z8jEy8y8w8jAu5DYtyjgpuT0x3Wpl/oqL+IeL/2yB/1p2/05r+T1e8T5eqExPSFY1XoBEdppdeqBlfqdrfaZqfKRofKJlf6FkfaZufqprfaxkgbJjiLNria90lLOJnbaYhI+RZXByXUw4XUw4XUw4XUw4Xk05Xk05Xk05Xk05X0w7YVA+XE8+WVBBW1FIXlNPZVVWaVlca11dbWmCeX+5hYzcl4rZsIKz0X2K7H5x/2Fp8ktT90VR8T1G4zY61js3x0E1uUAvqz0stEAzxkc+vzQtzjcw1zku2Tco3jkm3jIu5Uc81UIy0zst6j847jE1+TU//0RS8y8z7Skr8Cwt7Ssr6S0u5C0y8kFL/U5b5U5T6EdM4T0+1To2wzowuT80vUQ8tDk0qTIszEZF10JE61NSzj04z0E30j403kE64T0+5z0+6Do87UVC3Tw02jMr6jMv9zEy9DAy9S8w8zAu5DYtzDortDgs3Wpl/46O+3+J/ml8/1Zx/0Zo+jtd6U1lgDo4UFs9Y4JJc5RbdpxheqJmeKFld59heJ9gfKBieqNpe6hne6lgfq1fiLNrirBzhKF1cYtoS1pVNUQ/X048X048X048X048Xk07Xk07Xk07Xk07YEwzX084Wk4+WVJMX1hfcWp6d22GdmuJb3SIdH2oe4TPhYrolozjnoC0qXeCrG1b51xX9lxc9kxP7Tg/5zc62zw4y0M3ukMvsz0xqzYszVhOyVBFvDkvzDkv2zku4TUp4jMu4j4030M04D4v5DMr8C8w9C82/1FZ/1pe4TQ26Do73zMz2zMz3jk95UZKxywyyzI03zw/3DE31C8z1Ds96Vhb9WJq919ryklE7F5c9Vtb1zw61D853ElB1j011zYu+i469yk29Cs1/kFF3jIu2zQs4zUu7zQv9i8y+C0w9S8u5zQt0DwusTUp1WJd/42N/3iH9GZ2+k1p/zdf/Dpfx05dYDwuWmNGZ4ROdZNdeZxieKBidJ5fdZ1ed55ffKBieaNjfKdieahae6paga1ih6tth6R0e5RtaXpqW2xcX1A9X1A9X1A9X1A9Xk88Xk88Xk88Xk88ZFA1YE87W1FIX1phcnCIgH6lfHqrenWtc324fITChIrGlZXJpp/Bu6yzzLahsphzr1JAskI02kxI8EpM7Dw/5Dw72D83yDwvvzw0sjcvxFVKz2VXwlFDwDgs1zYu5DMt5DIu4Dgv5EIz4Dkp6DEp8S8t8TAx7zU28VJX+Fdd5UJH6EVK5URJ9Vlc1kBCyDM16j0/7zpB6C4580JM/2Bp/2Vv+l5r/llq6l1W3kZD1TIz1zg140pE4UpB1jky3zgy/Ck4/y06/zRA+z0/4DMt3DUs5DMr8DUw9y8y+S0w9i4u6TQt0z0vszUpy1VR/4mL/2uA8F5x+Elm/zVh90RkkkRETUcxVlxCZn5OdJBdeptidZteb5hWcJlXdJtceZ1feKFdeaRcd6NWeaVWfqhegqZmgp5rdY9iZXldWGxQXU09YFBAX08/YFBAYVFBXk4+YlJCYVFBY1JAXlFIXldeb22FeXukfX+4dHi4bnG4dXjVi4zPp6fBw8Cx2NGl4dih39af1syZxKGDtXlhxGRW5mBd60tN5zo85jo63jYzyTgzwTw1vUtAvldI0mRVwkAz0TQt4DMt4jMw4jsz3Dgs4TUp6jIo7y8q6TIu4zQv2T5C7lJW6UlR/2Vt/2Nr/2Bo/2Vr8llc/zxE+jA88Sk27TNA/1hi/2Vw/2Nu/Fpp4kdC2TUz2zEx2jUx3kE61jw02zgx5Dg07jc78DY78DY55DIw3DUt3zcs5zIr9DEt9zAz+i4x9y8v6jUu1z0xuTQrxUlH/4eL/2N79FZt+URl/zhj301kYzgvOUMoUVE5XW9HdItddpVccZVXa5RQbpdTcplYdJtcdZ1XdqBYdKBTcp5Rc51VbpBTXXlGTWQ2QFYvPlQtWUw8XVBAXlFBYFNDYFNDYFNDYVREXlFBXFFPY1licW2EeHqjdnuzbXK2YGawb3XBiYXmqKThycfM5OCz7emg7uef4tukysKbpKSKl4VvnGdZxmli9nR06ExP7j9E7Dg72zw400A5uTsvrTwu1GBR2VdJzDUq2DQr5T087UpF1zQr3TIo5TAn5C0n3zQs3D4zxTEt3kZF7VFV7U1X701a+Fhi/2t050xS9C00+i458Sc1/0NR8EZP81RZ/11k7URL4Dcy6js47jw64jYy2zoy1zkw3zgy6zk33zs54zo35jk13DMs2jgt3zcs6TEp9zAt9DIz9y8x9jAv6zQu3T80wTYvzkhJ/HV8/1t2/0xs/Ttg8EJjsExWW0Y1O0MrSkUxUWE9an9UcY5Wa49PaJBKaZJMbZZUcJdYdJxWcppTbJZOaJJKYIdEVXc7S2YzR14wSGIzUGo7VUg4Wk09XE8/X1JCYFNDYVREYFNDYVREX1hqdnKNeHehd3myanG1XGStaXG6f4XPnJzitbfnzs3d29nM4Ny/3NW7zsS4sqelho6DfnpxjXJpomli23559XV0+F5e8UdI6T054kA7zT00xEI1ujotzkk60D4v0jkr4UFD+2Bc3UA54Dkx5jUv4jQt0zUqxDUnujIiyj0z00FB1D1E4ERP8Vdh+mBq5E1U7Do48js//UJL/1Jb3jM74jg7+ERH9DM46zgz8Tk37zY05DUw3zwz3Dsx4zcz6zU05Ds45zk46Dk23zQt2zku3jgq5zIp9C8p8DQz8zEx9DEv6zQu3TwyxTQv4lNX/Gp19VJt/zpi/zdi3FJpgUxGXFRBUk05TkYzRlQzXW9HaoVQaYxKZo5HZ5FJa5RSbpVWcpdUapFOY4xIX4hGWX9CVXM9VG4/XHFGV3I/WHNAT0MzVUk5WEw8XVFBY1dHYlZGYVVFa19PdG+PeHaddHapam+vXWWtZW22eYHJjpXbnabPrLTZtrrdvL3cvLnWtq3KsKPBmYqpdXR5a2VndmdkhWBanVpS1m9o/3p1/2ln/1BK7UQ93EI61Uc9vzcrxz4uzD0t00Au1z0/1Dw71Ds13Dky5jkz4Dcw0jswx0IzvkIoxUQxwjkxxDU33ElR6FVf6llg2EdMzzcs3jo46TxA5zpA4zY67Dg7+TI1/ywx7jcz7zMx6S0r5TQu4T004D005Tk17TU17DQ27zI27zM04jAs3Dgs3Tor4zMm8DEp7TUz8DMx8zEv6zQu2TYtzTg0+WZs81to6Ull/zFh/zdlvElYV0AwUk05W0s7TUAwPkkrT184Y3tHZYhGYopBY41FZo9NaZFTbJBQZYxLYIlHX4dIX4JIXnxIYXhMZXpRXHdCXXhDQEI3SkU/VEc/Xk09YVE6YFVDZF5ecG58d3Gfd3OmaGehXl6kZ2a0d3XJioXfmJLsn5vWoZ3YopzYoJvVoJjRnpXKmY/DhnyubGtxZVxdb1hShVVLolhNu1pR23Bo74J7+oB/6mRj51NRyTIrxDYowDclxzop0z0v1Tks1Dwuzzcp2jou4Tkw2zctyzopwD4owzoyy0I6yUA4vjUtxj0111FI21VMykQ7zzoi4Tcq8Cww+yc2/yhA/ydC/yJA/x8//x86/yc88y445zk62zk03js05Tk16TYy7DI16TU04jcw2TUp2zkq3Dkm3zgl4jcj7DMu8DMt7zUp5jYp2zku3UFC/2R0+Upn/z9i/zZg7EdndjY2NzgmRUM0SEI0OEcyRkggWV87Y3NPZIBPYYZDYos/aI5FbJBQa5FIZ4xHZolJZYRJZYJKZH9IZYFHZH1DXIE8YYZBNjkuPz83S0I7Vkg7W047XFRHZWNocG6DcWuXYmCRWFiUXWClbW+8fH3PiIbZjorekY/OkY/QkYvRkInPkYjJkYjBjoa1fnadgV1pZltZX11OdlZHsVpT1Fha42dn4HVv9IN9/4J/+W5nxTcrwTonvjolwjkmyzkq2DgszjYo0T4uyzMl1zcr1jYqzToqwjsnwTctwzkvxz0zzD82zkE4z0I50EM6yj000jcl5DYv9S41/Sg6+yY8+SU8/CI6/x85/yA3/Cc59DU95jo62zk03js05jk16TYy8DM37DY14zYw2TUr2Tkp2jkn3Tgl4Dck3zUo4Tco3zgo2jgp1Dcu+Fdc/1Fo+0Jk/zVf9z1iuERZSyknLTgoNj0rQzwpRkAoV2Axh5Rpc4hfYH5KYIVAY4xAao9JbJBQbZNKaI1IaItLZohMZYRLZIFHZ4NIZYFGZYpFao9KLjQoODkzQj06TEM8UUk8VVBKZGJvaWmFYmGNUlKGVleXZWmzdXjJgILVhofXionXiInJh4XOh4LSiIDTjITPjYW+iYOneHOKjU9caFlSU2VLaFxEp09L3VBZ6l9m429v5HVs93x0+HJnwzoqvz0nvz0nxDsoyjgp2jYt0TksxzopyDsq0Tst1TsvzTcpyjsryTsvyTsvyTkuxjYrzzwyzzwy0DwyyjYs1i0m6jI0+C46/S09+jBA+TBA+y49/yw7/is69TA66zY73TU02zk03zo25jk16zU08zQ57jY25Dcx2DYr1Tgp1Tgn1zgl2Dcl0Tol0j0n0EAo0T4u2D04/11r/0Ji/zll/y9b3VFrYzI4OTMzLzYuNEAsPTwdcF46k6hvrcSQgZ1tYYJLYYZBaZJGcZZQcJRWbpRLaI1IaYxMaYtPZoVKZYRJaIZIZ4VFaZFLbpZQKDAjLzQuNzY0Pzw3R0Q7TUxKXF5rX2B+XVuMV1iRZmiyeHrRf4LfhIXhg4TXhIPRg4bJg4PNhIDViYHXjITPi4O2g36VcGtyglBRaFpNWWhLZWFGlVdKyVVW41hf7mFn73Rs5mFY1EQ5yToqxjsmyD0ozjsr1Tcr0y8mzzkrwj0qvjsnyz4t4kw+0DoszTkryDkpxzgoyjgpzjgq0jot1Tsv2j4y1zku6DQ39jc/+jI/9i097S876zI47zA18y8z8jU77TY64TU13Tg23Dg24Tk25zc36zQ29jU67zc54zcz1zYs0Dgqzzkqzzko0DkoxjohxD4jxEApyzwu7klN/09o/ztj/zJk9kFikkJLPj04PDc7QzM2OT4oS1ssnZ5lrMqKpsOLhaNxYoNKYIU/bJJFc5hScJRWbJFLZotGZ4pKaYtOZYdKZIdHZ4pIZ4pGa5VNcJpSKDAhKS4oLzEwNzgzPT42RkhDUVRdWlx1W1mIZGOdd3bEhYbjjIvxh4fpgIDYgoHRgobGhobOiYXSjITRioC9hnyheXF8aGFbaV5MaF1LZ19IamBFdVlBpl5P1lRU/lJe6lpS1Tw22Tgw2Dss0Dkm0Top2DYp4DMszjEoyTstwkEuvTwpwzco409DyjYqyDkryjsqyTopyjcnzTUn1Dgr2zku2DQq5D009j1D8TE88y897DE85DU63zc38EE+9Dw66jo65Tk34Dg13Tg24Dg35jo66zg77Tk89DU67jc54jo30DgtxzkrxDsrxDspxDspwjsluDchvz4rzjkz/1dl/z5c+jNc+jtmsEhRVDkwNUM2Rzc6VS4xUU0ydJNYn8N7n76ClLJ+bIlZWXdBYIM/a5FEbJRNapFQZ4tFY4ZCZ4pKZopMaIxOZ4xJZ4xGbZNKcZ1SdaFWLzMkLjEqMDAuNDUvOjwuQkQ3TU9OVVVhXFpyamiQf3y/j4zjkI7viofigH3MgH3ChYXDi4rGi4fCiYG0hXueeW5+b2RiaFxOWGVLZV1KcFlJclxHcVxBkVdB1ldQ/kVN3Dk04TUx4zUu3jYp1Dck1Dkn2zUp4zIswzcovjkowUAtwjoq1EI11T4zyDosvzwqxTkoxzopyjgpzTUo1DYr1zMq4Tgx6Tw27TY67jM67DM75zpA6kxN+WBb81BL5jk13zgy3zgy4Tg15Ds45Dg46Dg76zg86zg88TQ46Tc33Do1yDgtvTkquTwqtzwqtzwquTworzgksDQo3EZI/05h9DlW60di1UpfY0U6RUQwOD8tQzUoTzUmendUkbN2jcB1nLeEhZ50TWM8U209YX8/ao5EaJJIZZBLZIdDZYhGao1NbJBQaZBPaZFLaJJIbphMdKRYeKhcOjsrOTkvODkzOTswPkEsQ0cwTE0/UlFNWFhOZWNueHaeh4XGkY7bjIjSgn65fXmrf3y1hYGzhH6kfnaNeG11bmBda1tOa1pKYl9MaFxMcVtNe1xKi1hFqlFB0UQ74zEv4DQw4zUu4DIp3Tcn0Dkkzjsn1Dgp3TUsuD0rszYkvzssyDgt6EtE1Tw0wzstszwowTkpxDgpyDkrzzcs1Tcu3jcx6T055jc06zk37Dk86z0/+Fha+mtn1EdA0Dcy4Tw44Toy4Tgz4zcz5jY26TY56jc76zg+6Dc97zc55zk62D04xjwxtDkprTwqqjsoqTwopzwqoTopqjgu6Vhf9Elc6UdcxlNaoFlTSVE8S0QxQDwhQVIoYXdGhZNgj6JqkrR3ipt3VmVIP04xU2U9ZX9Cao5EZ5FFYI9HZoZDaYxKbI9PbpJSbJNQa5VNa5dKcp9OeKlaeapbRkMyRkQ4RUU9REU3RkkuSk0uUVA7VlJGXFw4XV5Qa2p8ening3+6g4C3enSgb2yLbGedcWyVcGuCb2Zra15Va1tLb1xLcl1MdVlObl5PbWJQf15PolJJuTgy0DMq2zUp4TYv4DMs4DYp1Dckyj0ixz8lzTwp1TkssUErqzQgvjorzjcu4D046k1Gx0M0qTskxUAxxTsuyz0x2EE44EE74zs45jg36Dg45zo05zo29U9P40tIwDcxwzw21kE93zs64jsz4jk05jk16jg46zc67Dc86Dc95zY86jY54jg41D02wDwvrjkopjsnoTonoDkmlzoolzwqrUU87mVs7k1f00dSp1pSgm1SP1E7SzgnWE0tb51deLxveZdZh4lYd4BRRE4zOUItPEUwT106Z39FbY9FZ5NGXpBHa4tIbpFPbI9Pa49PcplWcpxUcp5Pd6ZVd6pbdKdYVUw9VUw9VUw9VUw9V04/WVBBXFNEXlVGY1pLY1lPaV5ccmVseGt1e216dWhyaVxlXl1YXFlSW1dMX1dKZFtKaFtIbF1GbV9FZGhReVVHolVNslRIqEk1qD0pxzkv4DAy3jcu3Dgu2zct2DYr1zcr1Tcr1Dgr1Dgrtz0uqjUkrjYlvjwuyTYs1Dow3Uk9zUQ020hB0UE42EM83zs56Tc37jc55Tc23z42x0Q6tzkrsTcovT8wxz8z2z436Dg48zU35jc+5jg65Tk34zo14Tgx5Tk15jo45jg56Do83js8zkE6tz4zozwrmTwqlTonkzglgT4tkTMr0lpc0VperFFOmlpQll1SmV5WS18gVm0pk61kmLNseZFVWWpATFY+PEI2Pj8xPD4zO0EzSVg5Y3xFcZJLbJJHaJJKbZFUbZRTa5NKbJdHcJ1IcaFNdqdVeapZbpddXYZMX1ZHX1ZHX1ZHX1ZHXlVGX1ZHYVhJYllKZV1GZV1KZlxSZ1xWaV5caV5aZ1xWYlhPWVdLU09EUU1BVlBCW1RCX1hFZV1IaGBLZGVTgFxQr1pXukJBwD01vjouvTkqxj4w2jYs2jgt2jgt1zcr1Tcr1Dgr1Dgr0jkruT8wpzYkozYhsz4swTwtxjMp0Dww1UY43jQ12DIy4Do66jw97zU66zE25jY43Dg2tDkqrzUmrTgntTwryEM02D835jk17zU26zc66jg46Dk25js04zoz4js13zo43jg42jw71EA8uzsypTconDsqlDspkDkmjjckdjkmkD4ytlBMrkxJnFFLlVxRlWFWmF9Wfo9bo7WBk6d0VWg6OEokPUowOT8xODs0PT4wOz0yOkAySFc4ZX5HdJVOcJZLbZdPcZVVb5dRbJVJbplJcZ5NdKNSeapbbp5SWYJITnc9ZFtMZFtMZFtMZFtMZFtMZVxNZl1OZ15PZ2BGaWFKamJPaWBPaWBPaGBNaGBLaWFKY11NWlRET0w7TEk4Tk07UVA+VFVDWFlHXlxPc1dMs2VhzkxO3Tg+2DYzvj0qq0gr1jYo1jkq1jkq1Tkq1Dgp0jkp0jkp0jkpuT8ypzomlzcfpEAotj4twzksyjYs1D0y8TE86TQ75TY75DU65zQ65zY83Tk6xy8srDspqzwpqjsorDkmuDkq0D0z4Ds36Dk27zU27jY06jkz5jsz4T003T442T891D49xkE6tzw0pDYpmTkpkTwojDsohzklhTYldzoniEAyoVNJm1JJk1lNjFxOkF5TmmFYgo1leYRiQ1A2LTooMTwuOD40Pj83OjowOzwuOjwxOT8xR1Y3Z4BJdZZPc5lOcJpScppRcZpObplKc55Pd6NUeadccZ9XXIlEXINMU3pDZ15PZ15PZ15PZ15PZ15PaF9QaF9QaWBRa2JRamFQaF9OaGBNaWFMaGBJaGFHaGFFZl9MYVpHV1I/TEs5Rkc1RUk4RUw8RU49UU9DWVBBe1FDuVNO5EVJ5DY3zD0vrUEn0Dcn0jkp0zoq0zoq0Top0Top0Top0TopujwwqD0rkjgelz0jrD8qwTsvyjMq2Tw18ThA6kBD2j4/zTk3xjIyyDo4uTgyqzYsoz4so0Aro0Arpj0orDknuzcqzDcw3UA77Dk16zo06Ds04j403UM50kI6xT46vjo4ojotmjYnkjkpizoniD0qgzwqgDknfTYkejUmj0w8k1FDk1hKkFpOkV1SlVxVmVpVVV04PUYpOUIxMjw0Njw4Q0Y/RUY4PTwoOjstODovNz0vRVQ1Zn9IdZZPc5lOcZtTcZxMcJtLcZxNeKRXgKtjdJ9YX4lHYIpKXoVOU3pDaWBRaWBRaWBRaWBRaWBRaWBRaWBRaWBRal9bal9ZamBXamBUamFSamFQamFQamJPaGBLZ19KYFtHUVA8Rkk4QUU2PkY3PEc3REg6QUo1UksxmmBM215Y60dI4D47zT0yyzgozToqzToqzzws0Tss0Tss0Tss0DorvzozsT0wljYgljYerjspwzku2j866UdE5ERGzD46sDowpTsuoz0xnDwukD0tiD8slTwqlT4rmEAsnD8toj0rqTgqtjgswDsy2Dsy3D823EI41kI2zkQ5uzwzqjUuoDMsjzwsjDsqhjoqgzwqfTopezooejgodzUlhjgslk5Cjk5Cj1NIl1hPlVROmFlUlllWUlswT1k2PUcuNUAwSVFEWl5NSEoyPj8gOzwuOjwxOD4wRlU2aIFKdZZPcphNcZtTcp9KcZ5NdaFSfahgeaRfY4xKYYlKZo5QX4RQVHlFaWBRaWBRaWBRaWBRamFSamFSamFSamFSa19ha19fa2Baa2FXa2FVa2FVa2FXa2FYbGFNamJPZV5LWVZDTUs8REY4QUU2PUM1OUUxREkyUkQqnGVQvFRJ7l5d7UhM5z5ByDosyDkryDkryjgrzTsuzzsvzzsvzzsvyTo2vT00sDwvtUEyzko+30pE50hE4UI+0EVCtT81nEEvlEczjUY0h0Iyf0Iwd0MuiDkshzoqiTwsizwrjzwslTkqnjktozsutDguujwwuz0vuD0urTcpojgrmDgskzkwhj0ugzssfzoqfjsrejsseDorczgqcjcpkkI5kEo+ikw/k1NKmFFNmVJQllxYlWlggo5gb3xRQU8rT14/Ym9TT1g9QUUqPD8iOTosOTswOT8xRVQ1aIFKdpdQc5lOcZtTcaFNcJ9OeadceqVeZo9NXIRFaI9QY4pJXoNQUndEaWBRaWBRaWBRaWBRamFSamFSamFSamFSa2Bca2FYa2FVa2JRa2JRa2JTa2FXa2FYbmJSa2JRa2JRZF1NWVNDTks8R0U2Q0EyOkovUkEti01CqEU/sDo242Ff9WRn7VJY2E5Ez0I50UQ71kc/2kpC3UpD3ktE4EtF501P3U1M105I3E1H4UZE5kJB5EJA4UNA0kdEsz41mkExjkUyiEMzhUAxgD4wej8xgjkwgzoxgTsvgDwvgDssgjorhjosiDotkzkumDounDotoDosmjkpkjkpiTorhDssgjosgDgqfDYqezcqeDgsdzksbzUpcjotjUk8hEo8h1JElldOmlBNl1ZSiWFXdWVVUWA5RVYsWm1AY3VLTF44OUYoPUUwOT0uOTosODovOkAyQlEyY3xFdJVOc5lOcZtTbZ5MdaZXeadfaZNRW4NEZItMZo1KZ4xHXX9NUnRCaWBRaWBRaWBRaWBRa2JTa2JTa2JTa2JTbGJWbGNSbGRPbGVLbGVLbGRPbGNSbGJWbmJUa2JTbGNUaWBRYVpKVk8/Tkg4SEIyN0oqbUY1uEdLxjM9yTxCyExK5Gpp2Vhc1EtFzkM+0UZBzkA80kM/1ENA2ERC2UVD4D9E30VH4EhH40NF7D9D7T5D5T8/20I90z5AtTgynz8zkD4wijovizgwiDczhzo0gDs0fzozfDwyez0yeTsuejwveTsseDorfjovgzkuijgsjzkqjjgnijsqgzwqfj0rgDgsfTUpfDQoejQqdjMqdTcsbzUqdD4yiVFCgFE/hlhIjVNIl1JNkFVRd2BQQkwzTFs8YXJOXXNFTGQ0N0wjMT8lPEQ5Nzs6OzwuODovOkAyPk0uW3Q9cJFKc5lOcpxUcaJRdaVZa5hTXYdHYYlLY4pJZo5IZIlDXH5MUHJAaWBRamFSamFSa2JTamFSamFSamFSamFSa2JTa2JTa2JTa2JTbGNUbGNUbGNUbGNUcV9Rc2NWbmRYaWNVZ2RVZmFOXVhCUUsxTkIobFA7nWNXpExIvElMyUZL0EhK00lJ00dKzz8/1EM+zEM5xkc4yEg91ERD3j5G4kJE4UNE4kRD40VE4kRB4UI/4kA95EA+zEM9sToymTsxhj4yfUI0fj40hDkzizgyhTwthDssgzstgjosfzktfzktfjovfjovfTkwfTkwfTkwfDkwfDkwejoweTkvdzkudzgvdDgucjYscDYrbjQpbDMobjUqeUA1g1RMiFFKk09Ml1BOjVJKgF9OZ2NGWWlFXndNUmk/TWE8RlM1OUEpNjkmPj8xQD4yMzswNTsvOz0vP0MsWmZCcIhUcpdScp5ReqBjdZteYIZJXYNGYYdKZIpNZIpNX4VIWHpISmw6aWBRamFSamFSa2JTamFSamFSamFSamFSa2JTa2JTa2JTa2JTbGNUbGNUbGNUbGNUcmJTbF5RbmRaa2RabmpfhYJziIJyeHFeTlY+Q0UvTD8uWT0vYDgubDoxeUM5hUxBqFNMt0tIyUNC1kJA1EA81EU/10ZD20VG30NE30NE30VF3kZD3UVC2UQ+2kM820Q91EU/vkI6njkvhzstgEEyfj4yhDoxiTkwhDsshDssgjosfzktfzktfjovfjovfjovfTkwfTkwezgvezgvezsxeTsweDoveDovdDguczctcTUrbzUqbTQpbDMoajQodT8ziVBJjlFMklNOkVZQiltRdV5MaWlPXm1OR1s4QVIyRFM2RlM5P0kxOT0sOz0vOTstNTw0NjwyOz0wPUArUl46aIBMcJVQdaFUeJ5hZIpNW4FEW4FEYIZJYohLYYdKXoRHVHZERmg2aGFRaWJSaWJSamNTaWJSaWJSaWJSaWJSa2JTa2JTa2JTa2JTbGNUbGNUbGNUbGNUcWVZb2VbbWZegX55m5iTtbKruLSrrqedgIFxUVVEP0g1OkczPUo4OUQzOkAyPUEzUTsug0pDtU1O0kVL20BE3UND3UVC3EQ/3kRG3kRG3ERD2kRD10ZB1EU90Uc90Uc910A5yUM6qj4yjjwug0AwgD4ugzsthzsugzstgjosgTkrfzktfjovfjovfToxfToxejoxeTkweDgvdjcueDkwdTkvdTkvczkucTYucDUtbjMrbDMqajQqaDIoZzMocT0ykUxHkVJLjVZPglpQc1xOX1ZFUldDQEw2NUEtMj4qNkIuP0g1QEk2PEUyOEEwND0sNDo2NTo0OTswOz4rS1Y0ZHxIc5hTeKRXcJNZW35EXYBGXoFHYINJYYRKYINJXoFHUXVFQWU1aGFRaWJSaWJSamNTaWJSaWJSaWJSaWJSa2JTa2JTa2JTa2JTbGNUbGNUbGNUbGNUbWRbbWlgiYaBtra00dHR7evs7+vo5d3b2Lqwnot9Y15LQ0g0Pko2PkY3PT44Pjk2NkA1SzYxi0tMxWJlzFRV2U9N4khG50FB3kRG3kRG3UNF3EJC2kRD1EU/0EY80Ec93j85z0I5t0I4kjkrhj4vgT4tgTwshD0rgjosgTkrfzktfTkufjovfToxfToxfToxeToxeDkwdDgucjgtcjgtcTgtcDcsbzYrbzYtbjUsbDMqaTMpaTUqZzMoZDInbTswlUtIj1NLg1hPb1xNW1VFRko7OUEyMjotNDcwMzYvMDYsMjotOUQ0PUo4OUY0MUArLzUzMTYyNzgwOz4tRE8vYXlHdJhYc59UYINLVnlBW35GW35GX4JKX4JKXoFJXYBIT29GP182aWNTaWNTaWNTaWNTaWNTaWNTaWNTaWNTa2JTbGNUbGNUbWRVbWRVbWRVbWRVbWRVaWZhjYyIw8XE6e3u9fn8/v7///78/fj1/uPQ3sqyp6CEZWZHR0ovSEMwSjkyTjY2PT88TERCg2tp1q+q4KScxGVf2U9P6UJJ2kVH2kRG20FD2j5B2j4/2UFA00I90EE730A6z0A4t0E3lzktiT0vgT4tgD0sgT0qfzktfjgsfTkufDgtfDkwfDkwejoxejoxdzw0dToycTgvcDcubTctbDgtbDgtbDgtbDUucDkyajUtZzIqZTMqXy8lYDAmaDgujU5JhVRNclhLUkw8O0QzNEEwNDwxNDowNzc1NjY0MzUwLzYuMDstN0QzOUg1MkQuLTMvLjMtNDUtOjwuPkgtYHdLdplfbJdSWXpFVHVAWHlEWntGX4BLX4BLXX5JXn9KTWhHOVQzaWNTaWNTaWNTaWNTaWNTaWNTaWNTaWNTa2JTbGNUbGNUbWRVbWRVbWRVbmVWbmVWcnRzqa2u2t/i9Pz++////f/+//76///49/7f5/HOzNiwnqqCZG5LR0ovSkc2SUA3VEpLhnx7tbCs39zT//Xq/9rQ2Hp6zEtQzlFNyUhD0kZF2ERE1j0/2EA/1UE/00I92T450EM8uUI6mjwyijwwgT4ufz0tgD0tfzktfTkufTkuezgvfjsyezsyezsyejs0cDowbzkvbDgtazcsaTcsaTcsaDgsaDgsbTgwbDcvajgvZDIpYzMpXi8lXi8lbD0zfVZRbE9HTUE1ODosLzoqMj0vNT0yNzoxNzk2NjgzMzgxMTkuLjkrMj8uN0U0OUg1Nz42LjQqLzEmNTcpPkgwZXtVeJpoYYpQVnRCVHJAVnRCV3VDWnhGXXtJXnxKWnhGR1pGL0IuZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTa2JTbGNUbGNUbWRVbWRVbmVWb2ZXcGdYdnt/pq6x1N7g8vz+9///+//6+vzx9vfp8f/n7/zg5/HPxsyolZh5VFpARUw6QUw+g3x2wri22tDP8Ozp9vfv//rw//Pq6rWvvGVUt1VIvU1Cw0Q+y0E+0EJA0UM/zkM+1EA8y0RAs0A7mTw0ijwygT0yfz0xfz0vfjovfTkufDkwezgvfDwzezsyeTozeDkybTgwbDcvaTcuaDYtaDguZzguZzguZzguaTcwZzUuaDcwZTQtYzQsXTEoXTEockY9WUxGQTgxOzgvNjkuNDouNTsvNjkuNTcsMzkvMzkvMTkuMTksLjkrLzosMz4uOUQ0O0M0NDosMTMmMTMlPUYxbYJjcpJpTnVGT2w8UG09UG09Um8/WHVFXXpKX3xMU3BAOkY8JTEnZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTa2JTbGNUbGNUbWRVbWRVbmVWcGdYcWhZaXB4k5yjytXZ6/b48/76+f/2+//u+vzn+/bw//bs//Hh5tG+tKKObmVWV1lOaXNrq6+h4tnS/urs//L2//v69/729v/z+//z/93Dy4Ntq1JCuktAwkc/yUVAyEU9xkM70kRAx0M/qzs3mDs2iTw0gjw0fzwzfz0xfjovfTkufDkwezgvejoxeDkydjcwdTYvazkwajgvaTkvaDguZjctZjctZDgtZDgtZzYvajkyaTgxbT42bT42ZTkwfVFIdktCNTozNDkyMzkvMzYtNTcsMzUqMzUqNDYpLTgoLTgoLTgoLzcoMDgpLzcqMDgrMjotOUItPEMxOjwuMTMlPkc0ZnpfWXhWQWc+Smc5Tms9S2g6TWo8VnNFW3hKXHlLSWY4MTc1IigmaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWa2RabGNcbWVYaWRQbWxYZ2hjgICKn6mryc7R7e7w/fv8//78//75+fzz9/3z+Pnz+Prs9/nh2Ny7pKqIY2xPaXZijpyNxcXD6+vp+Pj2+vr4/v78/v78/v78/v787v////383a2pr1VNwUg9ykY6yUQ7xUU8wkk0tks3nUYzikU1gUM2gkA0hDoxijcvfjkyfDkxejcvdzcudzcudzgvdTYtcDQqaTgxaDcwaDcwZzYvZjQtaTcwaTcwaDYvazQvbTgwazsvakAwaEk3a1hHgXhnamdWNDowMzkvMjguMjguMTctMDYsMDYsLzUrLzQuLzQuLzQuLzQuMDUvLjMtLjMtMDUvLzoyNEA2N0M3NEEwPEk3VWNMSVc+RVM5SmQ/S2U+SWQ7S2Y9VnFIXHZRWXJSPVY4KC0xJCktaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWa2RabGNcbWVYbWhUbGtXdHVwpKewzNbY9fr9/v////3+//76/v349Pfu7fPn8fXn8/bl8PDY0dKzpqaKgIRtj5WHsLev3Nza9vb0/f37/v78/v78/v78/v78/v78/P////v6//vz/9rKuHlno0o6v1FEwkg9x0M3wUg9pj82lkE6h0A6f0A5ez83ej42dzw0djszdDsyczoxcDowcDowbTkuazcsbTgybDcxazYwaTcwaTcwZzYvaDcwajkyaT00aDwxaUIzZkUyaVA8b2JPiod0XF1LMjguMjguMTctMDYsMTctMDYsMDYsLzUrLjMtLjMtLjMtLjMtLjMtLTIsLTIsLjMtKjUtLDguMT0xNkI0Okc1P0w4NkQtPkwzRl4+SmJASGA8Rl84VW1JXnZWVGtPMkkvJywwJCktaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWa2RabGNcbWVYa2lUbnBbfH55r7O83efp+////P3///7////7+vry6Ovg3uTW5+zW6+/Y6urS19O6xsGtwryw0M3I4eDe8fHv/Pz6/v78/f37/v78/v78/v78/v78//n8///9+P/78//0/fzoyqWSoldEs08/xUA5w0Q+sDw8njo6jz49gEA+dEM+bUU9cT82cT82cD41bz81bT40azwyaDwxaDwxcTYycDYybTYxaTcwajkyZjoxZToxZj40YUQ2ZEk4Y0o2X0szYVI7b2pUf4JtQUo1MjguMjguMTctMDYsMTctMDYsMDYsLzUrLjMtLjMtLjMtLjMtLTIsLDErLDErLTIsLDYuKjQrLDYtLzosMTwsNUAvMj4qNUEtO00zRFY8SFs9S15AWGtNYnRaUGJMKzwqJSotIicqaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWamRWa2RabGNcbGZYbWtWam1Yb3Zvnqeu2uPo+f7//f7//v37//759fXr5urb4unX5uzQ6OvQ5+XO3NXD2tDG6t/b+e3v//X7/f37///9/v78/v78/v78/v78/v78/v78//v6///98///7v//8//6///v7MiyrXNbtU4/tUs+s0hAojw4lDw4hUA5dUM4bkY6cT84cT84cT84cD84cUI6bT42aj41az82cjczcDYybTgyaTgxZToxYz8zYUE0XkEzWEs4Z1tFX1M7WlM3W1c8b3FZanRcMT8oNDowMzkvMjguMjguMTctMDYsMDYsLzUrLTIsLTIsLTIsLTIsLDErKi8pKi8pLDErKjQsKjQsKzUsLDYrLTcsND8xOEMzNkExMj8tOUYyQU84SVc+V2VOYG1ZS1hHKTUpKC4uJSsraGVWaGVWaGVWaGVWaWZXaWZXaWZXaWZXa2VXbGVbbWRdbWdZbm1Ya3BabXdvlJ+lx9DV8PX5/f7///78///3+fnt8vbl6PDb6/DQ5+rN5N/M3tTK59nY+Ons//X5//r//v78/v78/v78/v78/v78/v78/v78/v78/f/5/f/+/f7//v3///3///z2//7s//Ta15+Em11En1dBnk8+jkExhUAxeUAvckEwdD04dT45dD85dD85ckA5cD84bz43bj02bDozbTw1aj41ZT80YUE0YUc4TTopRjUjTE42SEguW1o+X15AXF9Cc3lfTVc/MD4nNjwyNTsxNDowNDowNDowMzkvMjguMjguMTYwMTYwMDUvLzQuLTIsLDErLDErKzAqLDMsKzIrKzIrLTQsLTQsMTgwOUE2QEg9OEMzND8uNUEtQk44UV1JWmVVRE5DLTcuKS8rKC4qaGVWaGVWaGVWaGVWaWZXaWZXaWZXaWZXa2VXbWRbbWRda2hZa21XanJbbHlwlqWqytPa8fb6/f7///76/v70+frq8PXf5OzU3eHA2trA3tjK5tvZ9ent//T6//n8//z8/v78/v78/v78/v78/v78/v78/v78/v789v/8/f/+//r///f///j///r6///2+P/w//zj/eXNyqiPkmRNhFA6ekYweEUwcEAsdEI5c0E4bz81bj81bT40aj4zaj4zaT0yZUE1ZEI2YUQ2W0Q0V0Y0YVZCUUs1SEMtPkcsPkQoREcqYWJDbW1Ra29WPkMtOUItOT81OD40Nz0zNz0zOD40OD40Nz0zNz0zNjs1NTo0NDkzNDkzMTYwMDUvLTIsKzAqKi8pKi8pKi8pLDErLzQuLDErMTYwPUI8P0w7PEk3NEEtMkApQ1A8TVpJQU1BMDwyLjUuLDMsZ2RVZ2RVaWZXaWZXaWZXaWZXaWZXaWZXbGRXbWRbbWRda2hZam5XaHJaZXVrkqSoydLZ8PX7/P3////7///2///w9Pni4+zR1te40M653NXN8OXp//b+//3///78/v/5/v78/v78/v78/v78/v78/v78/v78/v78+v///f7///78//35//v1//34/v78/f/+/vr5//35//vx//Lh5M+8uqGNmHtphmVUdFBAaUg3Y0IxZEUzYkMxYUQyYUQyYEUyW0o4W0o4V0o3Uko1UEs1cXNbYWVMRUsxPEYrQEksQ0gqTU4veHdbYF5HR0YyP0AuOT81OT81OD40Nz0zOD40OD40OD40OT81Oj85OT44OD03OD03Nzw2NTo0MzgyMTYwLjMvLDEtKzAsLDEtLDEtLTEwLzMyMTU0OEc0P045PEs0NkUuN0YvP047Okg5LjwvLTQsKzIqZmNUZ2RVaWZXamdYaWZXaWZXaWZXaWZXbGRXbWRbbWRda2hZaW1WZ3NbZnZslqmt1N3k9fr//f7///76/f3x/P3r8PXe3OXI0M+zx8Kv08zG7uXq//n///7//f/6+//2/v78/v78/v78/v78/v78/v78/v78/v78//r//v7/9//59P/y9f/z+//6//z///r///r///z//P3/+v32///z///v//vs//br/+3VxbGZYlA4W0kxW0syW00zXE40XU81VlA6VE85UU84S001TVE4WmNIRU80PUouQUswR1AzSUwvW1o8aWVKXllDWlVCTEk4PEI4PEI4O0E3OkA2OD40OT81OkA2O0E3O0A6Oj85Oj85OT44Oj85Oj85OT44OT44Njs3MjczLjMvLTEwLTEwLTEwLTEyLTEyKTonN0kzPE40OkwyN0kxO003OUo4Lj4xLjUtLDMrWmdNXWlRY2tUaGtYZ2hWaWZXa2VXbWVaamdWa2dcamZdaGZZZ2pVZHBcbn14qLnD2uHn9Pn8+v/5+//x+Pnp8/Le6ufU2tXCzL+uvbGlx7y64tjg+/X///z//P3//P3//v7+/v7+/v7+//78//78//z5//36//76//38//z9//7//vz9//38//v4//Lq//Lp//v///7//v/7/P3//v7///3///7y//7k+vjfuLSZU04wUUsrVU8vVE8xU08yUVA0UU0yUFA2S082RU01R1A1QEkqQ0ooSE4qUlMxVFU1XV1BWlpCWVdAW1lAWVg8VVQ2TUcxSEMwQj8wPz81Oz41OEA1OEM1N0QzOkI3OEA1OEA1OkI3OkI3OkI3O0M4PkY7OUQ8OUQ2OEEwNjwyMjg0LzsvMUQmPVQmQmUtQl42PVM+PE07P1E5SVw+Rlo+MUguLDMrKjEpWmdNXWlRY2tUaG1ZamtZbGlabWdZb2dca2hXamZbaWVcaGZZZWhTZHBcdoWAo7S+09rg8/j7+P358/br7O3d3t3J0s+8xcCtwrWlybyz2s/N7+Xt/ff///z//P3//f/+/v7+/v7+/v7+//78//78//36//z5//z4//38//v8//7///3+//79//n26dzU9efe//v////9/v/7/P79/f7///7///7y//zi/fvkt7OaUUwvUkwsVU8vVVAyVFAzUE8zUU0yTk40S082SFA4SFE2RU4vS1IwVVs3YGtBf4dgb3ZVUVU6T083UE43U1E4WFQ5WFI8UUw5SEU2QUE3Oz41OUE2N0I0N0QzOkI3OUE2OUE2OkI3OkI3OkI3PEQ5PkY7PUhAPkk7P0g3PUM5PEI+NUE1PVAyVm0/Wn1FUW1FO1E8MkMxPlA4UGNFUWVJOlE3MTgwLTQsWWdNXWlRZG5Wam9bbW5cbWtcbmhab2ldbGlYaWVaaWVcaWdaZmlUZHBcdIN+lqexytPc7PT38ffz6ezh3d7Oz8y5xsGuvbak0MOz49bN8+fn//b+//n///z//P3//f/+/v7+/v7+/v7+//78/v37//36//z5/vn1//z7/fn6/vz9//7///38//r3+Ovj/e/m//v////9/v/7/P79/P3///7///3x//ve///qu7agVE40VU4xVU8vVlEzVFAzTk0xT0swTU0zS082SlI6S1Q5Tlc4VVw6ZGpGjKNtnLB/jp12aHFSS082S0o1T0o2VE06VU85Uk06TEk6RUU7PUA3OUE2N0I0NUIxO0M4OkI3OkI3O0M4O0M4O0M4PUU6P0c8PUhAPkk7Pkc2PUM5OkA8NkI2PVAyUWg6VHc/TGhAM0k0KzwqNkgwTF9BUGRIOlE3LDMrJi0lClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdGltYWdlcy90ZXN0aW1naW50MV80LnBwbSBiL3Rlc3RpbWFnZXMvdGVzdGltZ2ludDFfNC5wcG0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0ZWRhODUuLjAwMDAwMDAKLS0tIGEvdGVzdGltYWdlcy90ZXN0aW1naW50MV80LnBwbQorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotUDYKLTU3IDM4Ci0yNTUKLTAvLTUxLjcyLjkyLDgwLTgwLTgwLTgwLTUtKjQsKTUtKjUtKjEuJzQxKjYzLDk2L0I8MEhAM0pBMk1BMVlCNIZDM6s/MsBGO+ZDSPFBRPc6QNk/PbNALbA/LaY/LJhAKpE+LpA9K5M9LJQ/K5k/NrhCNLFFOV8+Lzs1NTcyLzYyLzQxLC4wLTAvLTUsLT0xM3lEQJxgbH9/sVhUhlBHYm9wdY6RhmJjU1lTYSwsLDAvLTIuKzMuKjItKjItKjItKjItKjItKjEsKTMuKzMuKzQxLDQxLDUyLTg1MDw1LUA3LkM5L0k9MUpHNmZBL4Q7KqJFNspFPuhAP/I7PcFCM6o/Lag/LKA/LpQ/K48+LYw9LIs8LYw9Lp5CM8JBO6pQSFBGPEA2NDk0MDQzLjAyLS0zLzAyLzIxLzMvLlA1KnNUWXx+u1lYnko+ZkRDVU1WUVFZTmFYUSwtLy0tLS4tKy8rKC4qKS4qKS8rKi8rKi8rKjAsKzEtLDEtLDEtKjIuKzEtKjQwLToyLz00Lz80LkU4MEo9NVY5M3I3L5I7MaZBNcdEOtlGP6pDMp1ALp09LZY9LYw9LIk8LIc7LYQ8MIZCN55IO7ZPSqF9bWhzZUtJPTc3LTAxKy8wKy4wLS8vLTAwLjAwLjovN2poaYySxHaCtmhvf2l5eIKXiGp7a2BaQCwwMy4vMS4uLi4tKy0rLCspKispKispKispKiooKSwqKy8tLi8rKi4qKTAsKzMvLjsyMzwyMTwxL0AyLz84MkE4M1g2LX87LpI+NJlBM61DNp0/M5I/LZM7LY88Loc7LYU5KYE5K4E+NYVJQZZLRahuY42lhXyPeVpmUj9FNzEwKzIpKjErKzErKzEtLDEtLDYsLWNxTY6cjZa6lp/Gp4qyjYmrhmd+Yk9PMzEyLDMyLTc0LzcyLjcvLDMtLS8tLiwrMC8oLy8pKy4tKy8wKi8vLzIuKzcwKj0zKj82LT41LjwxLTwxL0QxK0IwLkQsKlw0LHg+MI86M4s/Mo1BM5A8MYM+Log8LoA7K3c7MHY+L4ZDOoZNQpZcWH6VeIuoioCdgV6LYldwUz5EOi4tKy0pKjEoLS8qMCssMTAsK15jTISabIaodY6wfYKod36eeWByXD9BNDY3MTg3Mj06NT86Nj83NDs2Mjk1MjczMjcuLzUwLTQxLDQzLjU0MDs2MkA3Lkc6MUc9NEM5MD82MT82MUQ2NU0zNEE5Lks4Km02MYk9PYRBO4Q9N4FCMYU7Ln88LHs+LKhLRopHPnRNPIFWRnh3WKd4aJ6YfoWhe4aPcHiQcGFzWUdEMzkuKi4vKTEtKj0mLEhANWNsUW2KXnKYZXKcanegdHSTcVpzVUQ7NDg5Mz08N0I/OkQ/O0ZBO0Y/OUY/N0Q7NEI5MkI5Mjw3MTk0Ljk2L0A5L0Y8ME1AME0/NEg7MkI5MD87Mlw6OJxFS4RAN6RFQZxENqU9MqRFM6pAMqk8QZdEQHk9MrY6RNRAPqpWTGplR4VrUOZPVv8rSf07VfRMXeRXZ9hjbNBgbNBRZsFMX49ES1IzLkU9MmNaOXmDYHOMZHiTZoSdf46kj3uRfFlyUlVSQzY3MTs6NUI/OkdCPkhDPUxFPU1DOUxANEg+MkQ8MUE6Mjw3MTw4LUM7MEs/L08/L009MEY6LkE6MEE/M6hFSMwxN6A8JbA9K6U6MLZBOKg8L7s/NdQ8MfcuNOI9N+Y0MtY2Kr5OQ5FdSNZbVug+QdFGQfQ+Svw1SP45Vf87YP8/bftBcv9GavlUcrtXYWxMQYt+damrqKuztb68v9rSz9nP16eppmB3XVtlSjEwLjc2Mjw8NEJCOEpIPE5MN1BQSGJgeFdOUUg/QEE5Nj04Mj43MT47NkY/NVA/LUE+LUQ2NT47NGg7Nas7LaE6J6s+Krs5K6k7LKw+Lbc/L8E7L9E3K943LvQuK9o3Jtk2I8s9MdpGQvFBRNJBPq08LsdHPPNARvhETf1BWf9Cav1JeP9Ld/lWdfNKa55ubtO7r+7r8v7k/f/z/P349fbt8NLOzZedk5WbjTc0LzUyKzo3MEA9NE9FOVRLPGVjcZac1pSU2nx8rmBedkVDSDw7QEI8LEdALUVCO0k/R0BJSExCOJJCO6o/La0+K7g5Ks05L8g5Mcc5L846MNE3LegxKfAvKvIvKdY3ItY1I9M5L9xNRcVFOrs8Kbs8LchBO9tJSu9ESvxLXfpFZP9Od/tVef1Tbvlcbd9gadmemv/29v38///7+v/7+P/x9Orf3eTi1dDZ1EM/NDw4Lzg0Kz45M01DN1dKOmFccJSe5qy2/q61+5+g43Z0tWJYjUdEV0RAPVtPU4lzmqdmhL5JUrM8KK06KLo7LMw5L906M9o3MuQ9N905MOREOPE5MfoqKuwxLNYyJso8KNM6LNo/OtdFRb08J8E5K85IP8VJQd9LR+ZPVPhXaf5Rb/9Ud/9Yb/1ca+1XY6d1bvPe2/f//f/8/f369fvw7uXY0P/86Obs6FBKPElDN0I7M0E6NEdDOFNHMVtUW4uWzqmq/Kyv/KWp85qe5YaLzXV3oJJVZ9hIUeVEScdBOOBCP88+OcJAMss9MdQ3Ltk1LNs6MNo2LNQ0Jsw5Jds7L/w0N+c1NeE1NfIyMdw2Kt9LP9ZERdQ9NsM7L71ALr0+LcNFOc5NSPRkbfpYbftbc+t0ePRmdMiJgmJhT9/CxP37/v/6//r/9v/+9/Tu4P//4/b26lhPQFRLPE5FNkxDNEpGOlZLNV1WXYeMw52c7J2l+J2m56Se6JiZ2sFuiOQ9ROI/Qtk9QcxCP+g9Q9g6Ocg/N79BM8Q3Ld82M903K903J8M4I8Y4LNo5Mcs4Jt0yKOAtMOUvLNU4J9RDMt1EP+ZUVM06MME6J7c+LbQ8Lr5AMulmXu9pavNib/ZsbP5ib7aLhFtpRuPRx//8+fr+/d/95fT97P/46Pfv2v79+VpOPllNPVdLO1dLO1NLPllMOVpSUHNylISGtoyN0IWHwHFzrKRZbfk3T+FGQe0+S9JEQsFCOdQ5N8xDOcE5Kb47J806KuI2LPMwNPQwMuEzNOYyPu0vMcs4KNE5K908MspCMsU5KNc6MeMwM9Y3MdI+MsdDNq87LKw8Lq49LdpfWO9scvdueP9wd/tOYr1+eXiPYdfWuuPx2MPavqLNn7vUreTjzurZ0d/RyFpNPFpNPFhLOlpNPFxMPV5PPFtPQ11SVmhghYJ5upd8s6VpnL0+Nd1DOfY8P+JBR7g8MrhAMtc5NstDN8E6J8g7KdU1J+w3LucyJ/QqJvUmLv8bOPIuOuc2PPMwOPQtMNw6Nd0+Ot07ONc0K8c4KMc6MNRKQMg7Mss4MLw6LMpPSPd4f/x5gf9reP9FYLZtZHCLWISQaHCPY3qfbIe1d5K7f6S0j869ta+lpFpLOFpLOFpLOFxNOl5LPF9OPF9QPWFQPmNRX3VxlrqAlvJaaf85UNNDQ+ZBRdFCPK87LLs9L+c5OuJIQM9HOcw4LN82L+0xL/wsPP0oPPAsRPwvWPlTX/FJWts0PrQ7Ks1FOdNEQNFBOco5KKs8KLk9Mdg/Ous1MfktLt43LsVAN/h6e/x6gv1kdvlBW5VWRWl/UIKRaH6lcIGpbYasb4O1bo+tecnCsKCnuV1MOF1MOF1MOF1MOF5NPVtPP15SRmZTT2taZHyDuaeHuOd3c/RQW/FBTN06O8M/Mq0+Lcc8NdU3Lto5JeRBOtE9L+o4Nvs3RfYqLfUpKuwpL/M9TPRUXN9APbo/MKc4Lbk+OddDQ9BBOdI5Mc86Nt0+Otw7M/IwMPQwMusyLcI6LO57eP53hf9RbvRBYXFNP2qMUHqiZnujZ32hY32man2tYYmycImlf1tnZ19OPF9OPF9OPF9OPGBONlxTTnFsgnhxmnR8qoeL0qWVwraMfM9TSetHSOQ6O8hAMrQ5MclZTcM/M902LeI3MOE/MOwxLPo5PPROUuU8P+VCRdM6PeA6PuM0O/BXXPlfa+BSTt5AP9xHQNg5M/srOfw3Pt00Leo1LvkuMu4xLcI4K+d0cftqe/9BY9NDWldROW2JVnedYnKaW3eeX3mkX3inWYKqZH6ZbGFzXVxPPl5RQF9SQWBTQmFUTm5qg3d5sm1xuI2M3MbDvOTeotjRnayQeMNlW+xSVOg6O808N7hHOdBWSdU0LOU+ONw2KugwKOM2MNpBQ/NTW/paZPhdY/oyPPQxP/lVXvxYYeE8OOI2NNk8M+I5NOg4OuU2M902LfAwK/cwM/ExLsw5L+RkZf5Xc/s/YpRFSENHMGJ3THCSVmqTT3GYWXScVm+ZT2eLS05oOEdeNFVIOF1QQGJVRWRXR3BriXN2q2NqsnyDy6Wr28bH2cvFx7KmsHl4dItoYtBvafxiYu5FQNBCOMM+L9A9LeJGR9w7M+M2MMw6LcI9LMs7O+VNWehTWeM6N/ZDSeQ3O/k1Oe43M+kzMN88M+g2NOo2N+Y0MNw4LOwxKPEzM+8yLtI4MPJfZ/tCZOpDYWFLPVJHNUxaN2eFSWWNRmqSU2qRTmCJR1t8RV10SFp1QkBANlRHPl5TQWpncm9sm2BgoHFywo6K4ZiX05mT05iQy4uCsW5fZHJXTLhZU+N0bfZ6eNtLQ8E4Jsk6KtU5LNI5K9o4Lcc8KcU7McY8Ms5EOs9GPNk3KPgqNv8nP/8hPP8jOe02O906Nec4New0NN42Ldo5J943JOc1K+M3KeFCPv9Rav86YZg7Rjg8K0JBLV9oPWd+UmOIQmuQS2qPSWaIS2SBSWWBRmOIQy80LUE8OE9KRGFid1lZjWZos36A14WG1oaGzIaB1Y2ExX14j3hVU15iR7lTUehhZ+xxaddLPsM8KMw5KdQ2K8Q7KdRAMs05K8k6LMo4K9I7MNI6L+kyNPkvPfMxPPgvOfUxO+I2Nt45Nek3N/I1Od02LtI5KdQ5J8o8JMw/LfdNVv86ZNxCXEY2Nzg6LWRlO6W+hXORXWaMQ3GWU2qPSWmLTmaFSWiIR2yWTi0wJzM0L0BCN1RUYGJfioOB1IuJ6oF+zYeHx4qDxoR6n25kYmRfS21cSIhbROpRVOBBPds3LdE4Jt01LMY3KcA9K9RCNcc5K8c6Kcw2KNc2LOI5MvA1POwyPepGR+9CPuQ4NuE5NuU5Oes4PO42ONY5Mr86Kb08Kbg6JMc9M/9HXu5AYWtDOz48MFtKOI2yb5Wxfll1RWWJQWiRS2WIRGiMTGmOS2qSSXSiV0E/Mj8/NUVHL1JQQ11dUXp3ooiFyHl2o3h0p3lxiG9iXG5bTGxcTXVeTqRMQNg3L+E0Lt01KMw8JNU5KrM6J8Y6LeJFPrg9K8M7Lc87Md47Nuc5OOk6N+9MTdRJRNk7OOE6NOY2Nuo3O+g3Peg4Os09NK47KaU6Jp46KsxPTedIWqNdU0hHM1JeNnaYXIeYYldkSEdUNmmGRGORSGmMSGyQUG6XUXKeT3apWlpRQlpRQltSQ19WR2RbSmpfXXFlaWpeYFpXTllTR2FZRmleSHBfT69SS7M/MMs4MNs3Ldk3LNU3K9Q4K7I6KrE5KMo3LdNENtk7OOA8Ou00OeI5Nrk7LbQ7KtBANe03Nuk2OuU5NeI5MuM5Odw8PLg8Mps8KpE4JoY6LMFVVZ9WT5hfVnCESYScYFJkOj5ENjw+MUFNN2qISGyUS26VVGyWSnGhTXWmV12GTGZdTmZdTmZdTmdeT2lhTGlhTmlhTGhhR2BbSE9MO0pLOU9SQV5USK1VUd87PLlAK9Q4KdU5KtI5KdE6KbA8LZk7Iro8LdE4MO83P9w5Otg1OME2Mac+K6c8KLw6LN07Nu44Nec8NNpAOM09PK48MZY5KIk8KIM4JYI/L5lTR5BaTpZdVmNtSjZBMDg/Nz4+Mjk7Lj5KNG2LS3GZUHGbT3OeT3qmW2KPSlh/SGlgUWlgUWlgUWlgUWpfXWpgV2phUmphUmlhTF1YRUZJOD9FN0FJNHdUPttWUeBBPss5Ksw6K887LdE7Lb47M6Q7KMhCN+JFQM1CP6FAMJRBMYNALY47K5M9LJw7K6w6L8k8Msk/NLY8L502LYk8LII6K3w6KnU3KJFEOpBQRphVT5ddWWRvRUBNMVVeSUBDKDk7Lj5KNG6MTHGZUHCgTHqmW2iRT2SMTVl+SmlgUWlgUWtiU2tiU2xiWGxkUWxkUWxiVm5iVGhhUVdRQUhFNE1HL6xCQslJSOZeYNJHQNJFPtdGQdtHQ+FHSd1JR+dBQ+FCP8Q+O5dBMok9MII8MoE7M389MX07LYA7LIo6L5U5LJE6KYQ7LIA4Kns1KXY2LHE5LIdNP41VSJdTUG5dTVBgO1lvQTtMKjpANDk7LjxIMmeFRXKaUXKjUmqXUmCISWWNR1d5R2lgUWtiU2phUmphUmtiU2tiU2xjVGxjVHFhVGxkWXBtXmxmUFNLNHlLPpRBPalIQsBIR9BCPs5FPdlDROFDROBFQ95DP99CPcRBOZE6MH8/M4c4MYQ7LII6LH85LX46L305MHw5MHo6MHg6L3Q4LnA2K2wzKHA6LohRSpNSToJbTGJpSk5kPkhXODlBLD0+MDQ8MTw/LGFyRnKaU3OZXF2DRmKIS2CGSU9xP2hhUWpjU2liUmliUmtiU2tiU2xjVGxjVG5mW4uIg8PCvs7Jw5KGeEhNOTxHNj0+NlY/N7dQU9hKSeBFQd5ERtxEQ9ZFQNFHPdRBOqA+MYI/LoM7LII6LH85LX46L306MXk6MXY3LnM5LnI4LXA1LWwzKmkzKWs3LJJPSYBaT1xVRUBHNzQ6LDY+LzxHNjVBLTI4NDo8L1ZnPXScVWCDSVx/RWCDSV6BR0lqPWljU2ljU2ljU2ljU2tiU21kVW1kVW1kVYSEgt/j5Pr+///9+u7ny56if05RNks+NlhTULypo+y2rNpVWNNJR9hCQ9hAP9NCPdVAOqk+NIU9LoA9LH85LXw4LX06MXs7MnM6MW03LWw4LWo4LWw3L2c1LGExJ2Q1K35RS1NHOTQ/LzU7MTY4NTE2LzE9LzdGMzA3MDQ2KVFgP2+VWlV1Q1d3RVx8Slx8Sj5WPGdkU2dkU2dkU2dkU2tiU21kVW1kVXBnWIaNk97p6/b/+vn77ff66eXfxYN+aFFZTLSwp/Tm5vv69fzr4dWHc7pLQMlEP8pDPc5DPqQ9OIY8M389MX46L3s4L3s7Mnc4MWo4L2k3LmY3LWQ4LWk3MGk4MWU2LnFFPEE+NzY3LzU4LTU3LDA4KzA4Ky45KzI9LTlCMTQ2KFRiSVd6UE5rPU9sPlp3SVZzRSw2LmhlVmhlVmhlVmhlVmhkWG1kW2toVYCBg8nR1Pr6/P/++vX47/X36uXlyYuPdI2YiOHh3/v7+f7+/P7+/Pr//+e3rbpURsNJPsBIOJlDNoFBN4E7M3o7MnU5L3M5Lm82K2o4MWk3MGg2L2g3MGo5MmpAMmpVQnRxXjM5LzE3LTE3LS81Ky80Li80Li4zLS4zLS46MDRAMkJPO0FPNkljQEhiO1lzTkZfQiYrL2hlVmhlVmhlVmhlVmpkWG1kW21sWI6UlOvz9v7+/vv78+To2ejs0+Ldx9PLwOzj5Pr6+P7+/P7+/P7+/P/8/fT//fHq2Lt4Zb1HPag/PIo/PHFFPHE/OHA/OG4/N2k9NHE2Mmw3MWY7MmM/M2JNPF9POGZiSVZgSDM5LzE3LTE3LS81Ky0yLC0yLCwxKywxKyo0LC03LDI9LTVALztKM0hYPV1tUzxKOSUrK2hlVmhlVmlmV2lmV2tlWW1mXGtuWYGNi9zj6f7+/vz88O3y3OLlyOHZzvTo6v/4/P7+/P7+/P7+/P7+/Pv//P/7///8/f/96t+3nqZsWIRFM3VCL3Q/OXE/OG8+N20+Nmk+NWNBNV9KOUw/LERIL1hYPGptUj1HLzc9MzY8MjY8MjU7MTM4MjI3MS80LiwxKyoxKisyKy41LjlAODlGNTdEME5bSThEOCsxLWdkVWlmV2lmV2lmV2xkWW1mXGhwWX2NiuDn7f7+/v7/8erw1s/NtuPb2f/6//7/+v7+/P7+/P7+/P7+/P79//v/9/3/9//9///8///78ujdy8q0pqiNeGFIMl5IMV5KMlhNOVFMNlpcREpTOEBKL05OMmllTEpJNTpANjk/NTg+NDk/NTo/OTk+ODg9NzU6NDA1MSwxLS0xMC8zMjVHMTlLMzlLNTNENC00LFxoUGZrVWpoWW5mWWtnW2llWmVtWIybnuTs7/n88+zt29jTwMW3qt3S1v74//z9//7+/v/+/P/9+v/9+f/8+//9/v/8+fjq4f/9//3//P79///+69jWvVJLLlVPL1FQNFBONUlPNUVOMUtRL2FnQ11gQ1RUPFZVOU9KNkNBNDk/NThDNTlBNjlBNjpCNz1FOjxGOzpCNTQ+NUFVMEtrPDpNOkVYPD9WOi00LFtpUGdvWGxtXW5oWmtnW2llWmVtWIWUl9rj6uzx69bVw8K7qdrMwfjt8f/8//z+/f7+/v/+/P/9+v/69v76+f/9/v/8+fvt5P/9/v3//P7+///7593bxlRNMVZPMlBPMU1LMkxSOExVOF5kQo+qc3iIYUtNN1NMOlNOOklHOjtBNzZBMztDODtDODtDOD5GOz5IPTxENzdBOEhcN1BwQS9CL0FUOEVcQCkwKApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RpbWFnZXMvdGVzdGltZ2ludDFfOC5wcG0gYi90ZXN0aW1hZ2VzL3Rlc3RpbWdpbnQxXzgucHBtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMWRjYTEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbWFnZXMvdGVzdGltZ2ludDFfOC5wcG0KKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLVA2Ci0yOSAxOQotMjU1Ci0wLy01MCw0Lyw0LywyLSozLiszMCs3NC9COi9KPjBkQzKlQTLiQkLhPTuuPyycQCuPPi2QPS2sQjWCRjs6NTIzMi4vMS41Ly91S0xraqRTTmRjaV9cVlgtLjAuLSssKissKissKisuLC0wLCsyLi08MjBBNC5IOTR3OS6mQTWzQzeXPiyOPSyEOyyEQTikVEuEiXNHSzwwLysvLiwwLy1QTUaJm6d+mIt3j3dXVjo0NS86NzI4MzAyMDEyLC4xMCwzMi4/NSxCOC8+My9GMjFLNCyAOzSIPzaGPjCBPC2HQziBTUCNeGOLoIFthmZGSjwxLCkxKy1OTz95mWh/pXZrhmdAPjI5OjRDQDtHQjxJPzVEPDE8NzE9OS5MPy9KPDFAPDGaPkGfPzGnPzSsQDPCOjq+OjjDRz+VYk3pP0j5PlHvS2PnTGzUSmFuRT+Egm2Wo4+xuax3iHVYW0Y0My89PTNPSTlrbIFsZ4dJREo+OzZIQDNDPzxhPzaoPSu6Oyy5Oy/FOzDiNCvlMyfUOCvbRkK9PTDYREL3RVP+SHD9UnTaXWvozs3/8/3+9PPOy8awt69FQTU9ODJPRjd3eaCtsP2WltxpaJSCS1G4V2jIQT28PS7WOC/dODLYOi7wNTDiMy7bNy3aRUHFOy7DQzbWS0j4WW37X3TqaHC2nZj+/P/9+vX38N7r7udZTT9TRzlTSjlsaoCSldyOj8+9ZojlQETNQj/YPTvBPTDUNy7pMy/UNTHXNizaNi3SOSvbPDbWQTq7PS6zPS/oZmT4a3PbbnOjqIrp8eTM58jx6Nfu5+FbSztbSzteTT1eUEVxZ4y6cJPbP0DkQEG3PTDaPzrJPSzjNSz1LDL5J0DwQEvdMzTXPzrTOjK9Oy3YPTjXNi7gYF3+cHzRUll4i156n2uItHWyuJyjoqpeTTteTTtdUEBrYWx4eae5iJvpSk7UPDe8QzjTOS3ePjLzNjrxNzrmOT/lQETSS0jTRUPWPzjpNjrmNS/yMDDXWFH/XHSjSUtylVt4n2B6qGCFpm9ZaV5bTj5hVERsaIFxdrqwsNLOx62ddWvnV1bRQjrOQjXgPTjeNi3XQ0HwVl7xOD70R03mNzThOjToNjblNCryMjHdTUz4RmhjRztiekpqk09rlE5ceUNQajtBPjVeWltjY5+AgdSPjNGLg7RuXFLOYV7lYFnHOijPOSrROyzIOjDQQDftMDT6KTzyMDniOTbnNTPYOSbZOSn2R1iwO05FRzF3jVxpjkhpjEpmhEhokEo3ODBKS0NvbZSEgMqAfK9zZ2ttXku8TEHfOC/UOCm/OivNPzPJOizgOTPsPD/iQ0DiOTboODveOTW0Oyq6QDPeS1tQSTZ5i1ljeFFnjEZpjEpslk52plpgV0hiWUpoX1BrYVdYVUZYVUKLV0zFPTHYOCrSOSmqOyjKPDDgOjraNjWvPCrVOzPoOTbbPDi3OzOPOSiYSD2WXFFkc0hCSTc9RDJtkExvmU9wnlNXgEhpYFFqYVJrYVdrYlNnXk1ISTlrSjnbT07OQDbVQDnIQTvdQj6yQDaIPzCIPC6SOiysPDCaOiyBOSt2OCuMTkGNWFBUYj5DSzQ7QjBukU1xn1RkjUtUeUZqYVJqYVJrYlNsY1R1bWKbl4xqWkpuQzymR0PXRkPeRETZRD6xPzWCPDCCOix+Oi95OS91OS5wNitsNiqMU0xgWEU/TTQ6QS82PDBnhEpkh01hhEpJaj1nZFNnZFNsY1RuZVayt7r7/fja2L9bWkivpKLvvbbOV0/QQj68PzmCPDB9OS56OjFtOS5oOCxpNzBnODBSRDs0Oi4yOC4yPy4zOS1adE1TcEBbeEgxQjJoZVZoZVZrZVl5e3Dr7/L19u7o6tS1tqj19fP+/vz27uvLf3GwRDqAPzl1PDVvOjJsNzFmOjFlRTZnYk4yOC4wNiwuMy0tMiwvOTA7RzNFWjtOYkclKi1oZVZpZldsZlp0f3Hu8vX09+bd2sn99/f+/vz+/vz+/v7//vnhxrurhnR7VUhlRDVdRjZUTjhKTjNWWEI4PjQ3PTM2OzUyNzEtMi4xNjI4RzI9SzorMitha1NsaVpqZlp3gnrp7+/X1MPc0c39/P/+/v7//Pn+/P399O/+/v7//faYknhUTzJMTjZPVjVyflZSUDlLSDc5QTQ6Qjc8RDk9RTg9TDVBWjpDVzwqMSkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0aW1hZ2VzL3Rlc3RpbWdwLmpwZyBiL3Rlc3RpbWFnZXMvdGVzdGltZ3AuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjhhOTBlLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbWFnZXMvdGVzdGltZ3AuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdGltYWdlcy90ZXN0aW1ncGEuanBnIGIvdGVzdGltYWdlcy90ZXN0aW1ncGEuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTVhNjkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbWFnZXMvdGVzdGltZ3BhLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RqYmVuY2guYyBiL3RqYmVuY2guYwppbmRleCAyNmExOTcyLi4zYzEwMzMwIDEwMDY0NAotLS0gYS90amJlbmNoLmMKKysrIGIvdGpiZW5jaC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykyMDA5LTIwMTIgRC4gUi4gQ29tbWFuZGVyLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykyMDA5LTIwMTQgRC4gUi4gQ29tbWFuZGVyLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KICNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxjZGpwZWcuaD4KQEAgLTEzOCw3ICsxMzksNyBAQAogCQlpZih5dXY9PVlVVkRFQ09ERSkKIAkJewogCQkJaWYodGpEZWNvbXByZXNzVG9ZVVYoaGFuZGxlLCBqcGVnYnVmWzBdLCBqcGVnc2l6ZVswXSwgZHN0YnVmLCBmbGFncyk9PS0xKQotCQkJX3Rocm93dGooImV4ZWN1dGluZyB0akRlY29tcHJlc3NUb1lVVigpIik7CisJCQkJX3Rocm93dGooImV4ZWN1dGluZyB0akRlY29tcHJlc3NUb1lVVigpIik7CiAJCX0KIAkJZWxzZSBmb3Iocm93PTAsIGRzdHB0cj1kc3RidWY7IHJvdzxudGlsZXNoOyByb3crKywgZHN0cHRyKz1waXRjaCp0aWxlaCkKIAkJewpAQCAtMjE2LDcgKzIxNyw3IEBACiAJCQkJCQlkc3RidWZbYmluZGV4XT1hYnMoZHN0YnVmW2JpbmRleF0teSk7CiAJCQkJCX0KIAkJCQl9Ci0JCQl9CQkKKwkJCX0KIAkJCWVsc2UKIAkJCXsKIAkJCQlmb3Iocm93PTA7IHJvdzxoOyByb3crKykKQEAgLTIzOCw3ICsyMzksNyBAQAogfQogCiAKLXZvaWQgZG90ZXN0eXV2KHVuc2lnbmVkIGNoYXIgKnNyY2J1ZiwgaW50IHcsIGludCBoLCBpbnQgc3Vic2FtcCwKK2ludCBkb3Rlc3R5dXYodW5zaWduZWQgY2hhciAqc3JjYnVmLCBpbnQgdywgaW50IGgsIGludCBzdWJzYW1wLAogCWNoYXIgKmZpbGVuYW1lKQogewogCWNoYXIgdGVtcHN0clsxMDI0XSwgdGVtcHN0cjJbODBdOwpAQCAtMzEwLDExICszMTEsMTEgQEAKIAlpZihmaWxlKSB7ZmNsb3NlKGZpbGUpOyAgZmlsZT1OVUxMO30KIAlpZihkc3RidWYpIHtmcmVlKGRzdGJ1Zik7ICBkc3RidWY9TlVMTDt9CiAJaWYoaGFuZGxlKSB7dGpEZXN0cm95KGhhbmRsZSk7ICBoYW5kbGU9TlVMTDt9Ci0JcmV0dXJuOworCXJldHVybiByZXR2YWw7CiB9CiAKIAotdm9pZCBkb3Rlc3QodW5zaWduZWQgY2hhciAqc3JjYnVmLCBpbnQgdywgaW50IGgsIGludCBzdWJzYW1wLCBpbnQganBlZ3F1YWwsCitpbnQgZG90ZXN0KHVuc2lnbmVkIGNoYXIgKnNyY2J1ZiwgaW50IHcsIGludCBoLCBpbnQgc3Vic2FtcCwgaW50IGpwZWdxdWFsLAogCWNoYXIgKmZpbGVuYW1lKQogewogCWNoYXIgdGVtcHN0clsxMDI0XSwgdGVtcHN0cjJbODBdOwpAQCAtMzI1LDcgKzMyNiw3IEBACiAJdW5zaWduZWQgbG9uZyAqanBlZ3NpemU9TlVMTDsKIAlpbnQgcHM9dGpQaXhlbFNpemVbcGZdLCBudGlsZXN3PTEsIG50aWxlc2g9MSwgcGl0Y2g9dypwczsKIAotCWlmKHl1dj09WVVWRU5DT0RFKSB7ZG90ZXN0eXV2KHNyY2J1ZiwgdywgaCwgc3Vic2FtcCwgZmlsZW5hbWUpOyAgcmV0dXJuO30KKwlpZih5dXY9PVlVVkVOQ09ERSkgcmV0dXJuIGRvdGVzdHl1dihzcmNidWYsIHcsIGgsIHN1YnNhbXAsIGZpbGVuYW1lKTsKIAogCWlmKCh0bXBidWY9KHVuc2lnbmVkIGNoYXIgKiltYWxsb2MocGl0Y2gqaCkpID09IE5VTEwpCiAJCV90aHJvd3VuaXgoImFsbG9jYXRpbmcgdGVtcG9yYXJ5IGltYWdlIGJ1ZmZlciIpOwpAQCAtMzUyLDcgKzM1Myw3IEBACiAJCWlmKChmbGFncyZUSkZMQUdfTk9SRUFMTE9DKSE9MCkKIAkJCWZvcihpPTA7IGk8bnRpbGVzdypudGlsZXNoOyBpKyspCiAJCQl7Ci0JCQkJaWYoKGpwZWdidWZbaV09KHVuc2lnbmVkIGNoYXIgKiltYWxsb2ModGpCdWZTaXplKHRpbGV3LCB0aWxlaCwKKwkJCQlpZigoanBlZ2J1ZltpXT0odW5zaWduZWQgY2hhciAqKXRqQWxsb2ModGpCdWZTaXplKHRpbGV3LCB0aWxlaCwKIAkJCQkJc3Vic2FtcCkpKT09TlVMTCkKIAkJCQkJX3Rocm93dW5peCgiYWxsb2NhdGluZyBKUEVHIHRpbGVzIik7CiAJCQl9CkBAIC00MzUsNyArNDM2LDcgQEAKIAogCQlmb3IoaT0wOyBpPG50aWxlc3cqbnRpbGVzaDsgaSsrKQogCQl7Ci0JCQlpZihqcGVnYnVmW2ldKSBmcmVlKGpwZWdidWZbaV0pOyAganBlZ2J1ZltpXT1OVUxMOworCQkJaWYoanBlZ2J1ZltpXSkgdGpGcmVlKGpwZWdidWZbaV0pOyAganBlZ2J1ZltpXT1OVUxMOwogCQl9CiAJCWZyZWUoanBlZ2J1Zik7ICBqcGVnYnVmPU5VTEw7CiAJCWZyZWUoanBlZ3NpemUpOyAganBlZ3NpemU9TlVMTDsKQEAgLTQ0OSwxOCArNDUwLDE4IEBACiAJewogCQlmb3IoaT0wOyBpPG50aWxlc3cqbnRpbGVzaDsgaSsrKQogCQl7Ci0JCQlpZihqcGVnYnVmW2ldKSBmcmVlKGpwZWdidWZbaV0pOyAganBlZ2J1ZltpXT1OVUxMOworCQkJaWYoanBlZ2J1ZltpXSkgdGpGcmVlKGpwZWdidWZbaV0pOyAganBlZ2J1ZltpXT1OVUxMOwogCQl9CiAJCWZyZWUoanBlZ2J1Zik7ICBqcGVnYnVmPU5VTEw7CiAJfQogCWlmKGpwZWdzaXplKSB7ZnJlZShqcGVnc2l6ZSk7ICBqcGVnc2l6ZT1OVUxMO30KIAlpZih0bXBidWYpIHtmcmVlKHRtcGJ1Zik7ICB0bXBidWY9TlVMTDt9CiAJaWYoaGFuZGxlKSB7dGpEZXN0cm95KGhhbmRsZSk7ICBoYW5kbGU9TlVMTDt9Ci0JcmV0dXJuOworCXJldHVybiByZXR2YWw7CiB9CiAKIAotdm9pZCBkb2RlY29tcHRlc3QoY2hhciAqZmlsZW5hbWUpCitpbnQgZG9kZWNvbXB0ZXN0KGNoYXIgKmZpbGVuYW1lKQogewogCUZJTEUgKmZpbGU9TlVMTDsgIHRqaGFuZGxlIGhhbmRsZT1OVUxMOwogCXVuc2lnbmVkIGNoYXIgKipqcGVnYnVmPU5VTEwsICpzcmNidWY9TlVMTDsKQEAgLTQ3NSw3ICs0NzYsNyBAQAogCiAJaWYoKGZpbGU9Zm9wZW4oZmlsZW5hbWUsICJyYiIpKT09TlVMTCkKIAkJX3Rocm93dW5peCgib3BlbmluZyBmaWxlIik7Ci0JaWYoZnNlZWsoZmlsZSwgMCwgU0VFS19FTkQpPDAgfHwgKHNyY3NpemU9ZnRlbGwoZmlsZSkpPDApCisJaWYoZnNlZWsoZmlsZSwgMCwgU0VFS19FTkQpPDAgfHwgKHNyY3NpemU9ZnRlbGwoZmlsZSkpPT0odW5zaWduZWQgbG9uZyktMSkKIAkJX3Rocm93dW5peCgiZGV0ZXJtaW5pbmcgZmlsZSBzaXplIik7CiAJaWYoKHNyY2J1Zj0odW5zaWduZWQgY2hhciAqKW1hbGxvYyhzcmNzaXplKSk9PU5VTEwpCiAJCV90aHJvd3VuaXgoImFsbG9jYXRpbmcgbWVtb3J5Iik7CkBAIC01MjAsMTAgKzUyMSwxMCBAQAogCQkJX3Rocm93dW5peCgiYWxsb2NhdGluZyBKUEVHIHNpemUgYXJyYXkiKTsKIAkJbWVtc2V0KGpwZWdzaXplLCAwLCBzaXplb2YodW5zaWduZWQgbG9uZykqbnRpbGVzdypudGlsZXNoKTsKIAotCQlpZigoZmxhZ3MmVEpGTEFHX05PUkVBTExPQykhPTApCisJCWlmKChmbGFncyZUSkZMQUdfTk9SRUFMTE9DKSE9MCB8fCAhZG90aWxlKQogCQkJZm9yKGk9MDsgaTxudGlsZXN3Km50aWxlc2g7IGkrKykKIAkJCXsKLQkJCQlpZigoanBlZ2J1ZltpXT0odW5zaWduZWQgY2hhciAqKW1hbGxvYyh0akJ1ZlNpemUodGlsZXcsIHRpbGVoLAorCQkJCWlmKChqcGVnYnVmW2ldPSh1bnNpZ25lZCBjaGFyICopdGpBbGxvYyh0akJ1ZlNpemUodGlsZXcsIHRpbGVoLAogCQkJCQlzdWJzYW1wKSkpPT1OVUxMKQogCQkJCQlfdGhyb3d1bml4KCJhbGxvY2F0aW5nIEpQRUcgdGlsZXMiKTsKIAkJCX0KQEAgLTU4Miw3ICs1ODMsNyBAQAogCQkJCQl0W3RpbGVdLmN1c3RvbUZpbHRlcj1jdXN0b21GaWx0ZXI7CiAJCQkJCWlmKHRbdGlsZV0ub3B0aW9ucyZUSlhPUFRfTk9PVVRQVVQgJiYganBlZ2J1Zlt0aWxlXSkKIAkJCQkJewotCQkJCQkJZnJlZShqcGVnYnVmW3RpbGVdKTsgIGpwZWdidWZbdGlsZV09TlVMTDsKKwkJCQkJCXRqRnJlZShqcGVnYnVmW3RpbGVdKTsgIGpwZWdidWZbdGlsZV09TlVMTDsKIAkJCQkJfQogCQkJCX0KIAkJCX0KQEAgLTYzNyw3ICs2MzgsNyBAQAogCiAJCWZvcihpPTA7IGk8bnRpbGVzdypudGlsZXNoOyBpKyspCiAJCXsKLQkJCWZyZWUoanBlZ2J1ZltpXSk7ICBqcGVnYnVmW2ldPU5VTEw7CisJCQl0akZyZWUoanBlZ2J1ZltpXSk7ICBqcGVnYnVmW2ldPU5VTEw7CiAJCX0KIAkJZnJlZShqcGVnYnVmKTsgIGpwZWdidWY9TlVMTDsKIAkJaWYoanBlZ3NpemUpIHtmcmVlKGpwZWdzaXplKTsgIGpwZWdzaXplPU5VTEw7fQpAQCAtNjUxLDcgKzY1Miw3IEBACiAJewogCQlmb3IoaT0wOyBpPG50aWxlc3cqbnRpbGVzaDsgaSsrKQogCQl7Ci0JCQlpZihqcGVnYnVmW2ldKSBmcmVlKGpwZWdidWZbaV0pOyAganBlZ2J1ZltpXT1OVUxMOworCQkJaWYoanBlZ2J1ZltpXSkgdGpGcmVlKGpwZWdidWZbaV0pOyAganBlZ2J1ZltpXT1OVUxMOwogCQl9CiAJCWZyZWUoanBlZ2J1Zik7ICBqcGVnYnVmPU5VTEw7CiAJfQpAQCAtNjU5LDcgKzY2MCw3IEBACiAJaWYoc3JjYnVmKSB7ZnJlZShzcmNidWYpOyAgc3JjYnVmPU5VTEw7fQogCWlmKHQpIHtmcmVlKHQpOyAgdD1OVUxMO30KIAlpZihoYW5kbGUpIHt0akRlc3Ryb3koaGFuZGxlKTsgIGhhbmRsZT1OVUxMO30KLQlyZXR1cm47CisJcmV0dXJuIHJldHZhbDsKIH0KIAogCkBAIC02ODYsNiArNjg3LDkgQEAKIAlwcmludGYoIiAgICAgY29kZWNcbiIpOwogCXByaW50ZigiLWFjY3VyYXRlZGN0ID0gVXNlIHRoZSBtb3N0IGFjY3VyYXRlIERDVC9JRENUIGFsZ29yaXRobXMgYXZhaWxhYmxlIGluIHRoZVxuIik7CiAJcHJpbnRmKCIgICAgIHVuZGVybHlpbmcgY29kZWNcbiIpOworCXByaW50ZigiLXN1YnNhbXAgPHM+ID0gV2hlbiB0ZXN0aW5nIEpQRUcgY29tcHJlc3Npb24sIHRoaXMgb3B0aW9uIHNwZWNpZmllcyB0aGUgbGV2ZWxcbiIpOworCXByaW50ZigiICAgICBvZiBjaHJvbWluYW5jZSBzdWJzYW1wbGluZyB0byB1c2UgKDxzPiA9IDQ0NCwgNDIyLCA0NDAsIDQyMCwgb3IgR1JBWSkuXG4iKTsKKwlwcmludGYoIiAgICAgVGhlIGRlZmF1bHQgaXMgdG8gdGVzdCBHcmF5c2NhbGUsIDQ6MjowLCA0OjI6MiwgYW5kIDQ6NDo0IGluIHNlcXVlbmNlLlxuIik7CiAJcHJpbnRmKCItcXVpZXQgPSBPdXRwdXQgcmVzdWx0cyBpbiB0YWJ1bGFyIHJhdGhlciB0aGFuIHZlcmJvc2UgZm9ybWF0XG4iKTsKIAlwcmludGYoIi15dXZlbmNvZGUgPSBFbmNvZGUgUkdCIGlucHV0IGFzIHBsYW5hciBZVVYgcmF0aGVyIHRoYW4gY29tcHJlc3NpbmcgYXMgSlBFR1xuIik7CiAJcHJpbnRmKCIteXV2ZGVjb2RlID0gRGVjb2RlIEpQRUcgaW1hZ2UgdG8gcGxhbmFyIFlVViByYXRoZXIgdGhhbiBSR0JcbiIpOwpAQCAtNzAwLDYgKzcwNCw3IEBACiAJCQlpZihpIT1uc2YtMSkgcHJpbnRmKCIsICIpOwogCQkJaWYoaT09bnNmLTIpIHByaW50Zigib3IgIik7CiAJCX0KKwkJaWYoaSU4PT0wICYmIGkhPTApIHByaW50ZigiXG4gICAgICIpOwogCX0KIAlwcmludGYoIilcbiIpOwogCXByaW50ZigiLWhmbGlwLCAtdmZsaXAsIC10cmFuc3Bvc2UsIC10cmFuc3ZlcnNlLCAtcm90OTAsIC1yb3QxODAsIC1yb3QyNzAgPVxuIik7CkBAIC03MTgsNyArNzIzLDcgQEAKIHsKIAl1bnNpZ25lZCBjaGFyICpzcmNidWY9TlVMTDsgIGludCB3LCBoLCBpLCBqOwogCWludCBtaW5xdWFsPS0xLCBtYXhxdWFsPS0xOyAgY2hhciAqdGVtcDsKLQlpbnQgbWluYXJnPTI7ICBpbnQgcmV0dmFsPTA7CisJaW50IG1pbmFyZz0yLCByZXR2YWw9MCwgc3Vic2FtcD0tMTsKIAogCWlmKChzY2FsaW5nZmFjdG9ycz10akdldFNjYWxpbmdGYWN0b3JzKCZuc2YpKT09TlVMTCB8fCBuc2Y9PTApCiAJCV90aHJvd3RqKCJleGVjdXRpbmcgdGpHZXRTY2FsaW5nRmFjdG9ycygpIik7CkBAIC04MjUsNyArODMwLDggQEAKIAkJCQl7CiAJCQkJCWZvcihqPTA7IGo8bnNmOyBqKyspCiAJCQkJCXsKLQkJCQkJCWlmKHRlbXAxPT1zY2FsaW5nZmFjdG9yc1tqXS5udW0gJiYgdGVtcDI9PXNjYWxpbmdmYWN0b3JzW2pdLmRlbm9tKQorCQkJCQkJaWYoKGRvdWJsZSl0ZW1wMS8oZG91YmxlKXRlbXAyCisJCQkJCQkJPT0gKGRvdWJsZSlzY2FsaW5nZmFjdG9yc1tqXS5udW0vKGRvdWJsZSlzY2FsaW5nZmFjdG9yc1tqXS5kZW5vbSkKIAkJCQkJCXsKIAkJCQkJCQlzZj1zY2FsaW5nZmFjdG9yc1tqXTsKIAkJCQkJCQltYXRjaD0xOyAgYnJlYWs7CkBAIC04NTQsNiArODYwLDIyIEBACiAJCQlpZighc3RyY21wKGFyZ3ZbaV0sICItPyIpKSB1c2FnZShhcmd2WzBdKTsKIAkJCWlmKCFzdHJjYXNlY21wKGFyZ3ZbaV0sICItYWxsb2MiKSkgZmxhZ3MmPSh+VEpGTEFHX05PUkVBTExPQyk7CiAJCQlpZighc3RyY2FzZWNtcChhcmd2W2ldLCAiLWJtcCIpKSBleHQ9ImJtcCI7CisJCQlpZighc3RyY2FzZWNtcChhcmd2W2ldLCAiLXN1YnNhbXAiKSAmJiBpPGFyZ2MtMSkKKwkJCXsKKwkJCQlpKys7CisJCQkJaWYodG91cHBlcihhcmd2W2ldWzBdKT09J0cnKSBzdWJzYW1wPVRKU0FNUF9HUkFZOworCQkJCWVsc2UKKwkJCQl7CisJCQkJCWludCB0ZW1wPWF0b2koYXJndltpXSk7CisJCQkJCXN3aXRjaCh0ZW1wKQorCQkJCQl7CisJCQkJCQljYXNlIDQ0NDogIHN1YnNhbXA9VEpTQU1QXzQ0NDsgIGJyZWFrOworCQkJCQkJY2FzZSA0MjI6ICBzdWJzYW1wPVRKU0FNUF80MjI7ICBicmVhazsKKwkJCQkJCWNhc2UgNDQwOiAgc3Vic2FtcD1USlNBTVBfNDQwOyAgYnJlYWs7CisJCQkJCQljYXNlIDQyMDogIHN1YnNhbXA9VEpTQU1QXzQyMDsgIGJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQogCQl9CiAJfQogCkBAIC04NzEsNiArODkzLDEzIEBACiAJCWRvdGlsZT0wOwogCX0KIAorCWlmKChmbGFncyZUSkZMQUdfTk9SRUFMTE9DKT09MCAmJiBkb3RpbGUpCisJeworCQlwcmludGYoIkRpc2FibGluZyB0aWxlZCBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIHRlc3RzLCBiZWNhdXNlIHRob3NlIHRlc3RzIGRvIG5vdFxuIik7CisJCXByaW50Zigid29yayB3aGVuIGR5bmFtaWMgSlBFRyBidWZmZXIgYWxsb2NhdGlvbiBpcyBlbmFibGVkLlxuXG4iKTsKKwkJZG90aWxlPTA7CisJfQorCiAJaWYoIWRlY29tcG9ubHkpCiAJewogCQlpZihsb2FkYm1wKGFyZ3ZbMV0sICZzcmNidWYsICZ3LCAmaCwgcGYsIChmbGFncyZUSkZMQUdfQk9UVE9NVVApIT0wKT09LTEpCkBAIC04OTMsMTggKzkyMiwyNyBAQAogCQlwcmludGYoIlxuIik7CiAJCWdvdG8gYmFpbG91dDsKIAl9Ci0JZm9yKGk9bWF4cXVhbDsgaT49bWlucXVhbDsgaS0tKQotCQlkb3Rlc3Qoc3JjYnVmLCB3LCBoLCBUSl9HUkFZU0NBTEUsIGksIGFyZ3ZbMV0pOwotCXByaW50ZigiXG4iKTsKLQlmb3IoaT1tYXhxdWFsOyBpPj1taW5xdWFsOyBpLS0pCi0JCWRvdGVzdChzcmNidWYsIHcsIGgsIFRKXzQyMCwgaSwgYXJndlsxXSk7Ci0JcHJpbnRmKCJcbiIpOwotCWZvcihpPW1heHF1YWw7IGk+PW1pbnF1YWw7IGktLSkKLQkJZG90ZXN0KHNyY2J1ZiwgdywgaCwgVEpfNDIyLCBpLCBhcmd2WzFdKTsKLQlwcmludGYoIlxuIik7Ci0JZm9yKGk9bWF4cXVhbDsgaT49bWlucXVhbDsgaS0tKQotCQlkb3Rlc3Qoc3JjYnVmLCB3LCBoLCBUSl80NDQsIGksIGFyZ3ZbMV0pOwotCXByaW50ZigiXG4iKTsKKwlpZihzdWJzYW1wPj0wICYmIHN1YnNhbXA8VEpfTlVNU0FNUCkKKwl7CisJCWZvcihpPW1heHF1YWw7IGk+PW1pbnF1YWw7IGktLSkKKwkJCWRvdGVzdChzcmNidWYsIHcsIGgsIHN1YnNhbXAsIGksIGFyZ3ZbMV0pOworCQlwcmludGYoIlxuIik7CisJfQorCWVsc2UKKwl7CisJCWZvcihpPW1heHF1YWw7IGk+PW1pbnF1YWw7IGktLSkKKwkJCWRvdGVzdChzcmNidWYsIHcsIGgsIFRKU0FNUF9HUkFZLCBpLCBhcmd2WzFdKTsKKwkJcHJpbnRmKCJcbiIpOworCQlmb3IoaT1tYXhxdWFsOyBpPj1taW5xdWFsOyBpLS0pCisJCQlkb3Rlc3Qoc3JjYnVmLCB3LCBoLCBUSlNBTVBfNDIwLCBpLCBhcmd2WzFdKTsKKwkJcHJpbnRmKCJcbiIpOworCQlmb3IoaT1tYXhxdWFsOyBpPj1taW5xdWFsOyBpLS0pCisJCQlkb3Rlc3Qoc3JjYnVmLCB3LCBoLCBUSlNBTVBfNDIyLCBpLCBhcmd2WzFdKTsKKwkJcHJpbnRmKCJcbiIpOworCQlmb3IoaT1tYXhxdWFsOyBpPj1taW5xdWFsOyBpLS0pCisJCQlkb3Rlc3Qoc3JjYnVmLCB3LCBoLCBUSlNBTVBfNDQ0LCBpLCBhcmd2WzFdKTsKKwkJcHJpbnRmKCJcbiIpOworCX0KIAogCWJhaWxvdXQ6CiAJaWYoc3JjYnVmKSBmcmVlKHNyY2J1Zik7CmRpZmYgLS1naXQgYS90amJlbmNodGVzdC5pbiBiL3RqYmVuY2h0ZXN0LmluCmluZGV4IGJlYTEyZjEuLjJhZTM0NWYgMTAwNzU1Ci0tLSBhL3RqYmVuY2h0ZXN0LmluCisrKyBiL3RqYmVuY2h0ZXN0LmluCkBAIC0yMiw5ICsyMiwxMSBAQAogRVhUPWJtcAogSU1BR0VTPSJ2Z2xfNTY3NF8wMDk4LiR7RVhUfSB2Z2xfNjQzNF8wMDE4YS4ke0VYVH0gdmdsXzY1NDhfMDAyNmEuJHtFWFR9IG5pZ2h0c2hvdF9pc29fMTAwLiR7RVhUfSIKIElNR0RJUj1Ac3JjZGlyQC90ZXN0aW1hZ2VzCi1PVVRESVI9X190amJlbmNodGVzdF9vdXRwdXQKK09VVERJUj1gbWt0ZW1wIC1kIC90bXAvX190amJlbmNodGVzdF9vdXRwdXQuWFhYWFhYYAogRVhFRElSPS4KIEJNUEFSRz0KK0FMTE9DPTAKK0FMTE9DQVJHPQogaWYgWyAiJEVYVCIgPSAiYm1wIiBdOyB0aGVuIEJNUEFSRz0tYm1wOyBmaQogCiBpZiBbIC1kICRPVVRESVIgXTsgdGhlbgpAQCAtMzQsNiArMzYsMTMgQEAKIAogZXhlYyA+JEVYRURJUi90amJlbmNodGVzdC5sb2cKIAoraWYgWyAkIyAtZ3QgMCBdOyB0aGVuCisJaWYgWyAiJDEiID0gIi1hbGxvYyIgXTsgdGhlbgorCQlBTExPQ0FSRz0tYWxsb2MKKwkJQUxMT0M9MQorCWZpCitmaQorCiAjIFN0YW5kYXJkIHRlc3RzCiBmb3IgaW1hZ2UgaW4gJElNQUdFUzsgZG8KIApAQCAtNjAsNyArNjksNyBAQAogCiAJIyBDb21wcmVzc2lvbgogCWZvciBkY3QgaW4gYWNjdXJhdGUgZmFzdDsgZG8KLQkJcnVubWUgJEVYRURJUi90amJlbmNoICRPVVRESVIvJGltYWdlIDk1IC1yZ2IgLXF1aWV0IC1iZW5jaHRpbWUgMC4wMSAtJHtkY3R9ZGN0CisJCXJ1bm1lICRFWEVESVIvdGpiZW5jaCAkT1VURElSLyRpbWFnZSA5NSAtcmdiIC1xdWlldCAtYmVuY2h0aW1lIDAuMDEgLSR7ZGN0fWRjdCAkQUxMT0NBUkcKIAkJZm9yIHNhbXAgaW4gR1JBWSA0MjAgNDIyIDQ0NDsgZG8KIAkJCXJ1bm1lIGNtcCAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1LmpwZyAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHtkY3R9X2NqcGVnLmpwZwogCQlkb25lCkBAIC03Myw0OSArODIsNzAgQEAKIAkJZmkKIAogCQkjIFRpbGVkIGNvbXByZXNzaW9uICYgZGVjb21wcmVzc2lvbgotCQlydW5tZSAkRVhFRElSL3RqYmVuY2ggJE9VVERJUi8kaW1hZ2UgOTUgLXJnYiAtdGlsZSAtcXVpZXQgLWJlbmNodGltZSAwLjAxICR7ZGN0YXJnfQorCQlydW5tZSAkRVhFRElSL3RqYmVuY2ggJE9VVERJUi8kaW1hZ2UgOTUgLXJnYiAtdGlsZSAtcXVpZXQgLWJlbmNodGltZSAwLjAxICR7ZGN0YXJnfSAkQUxMT0NBUkcKIAkJZm9yIHNhbXAgaW4gR1JBWSA0NDQ7IGRvCi0JCQlmb3IgaSBpbiAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1X1swLTldKlswLTldeFswLTldKlswLTldLiR7RVhUfSBcCi0JCQkJJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NV9mdWxsLiR7RVhUfTsgZG8KLQkJCQlydW5tZSBjbXAgJGkgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7ZGN0fV9kanBlZy4ke0VYVH0KLQkJCQlybSAkaQotCQkJZG9uZQorCQkJaWYgWyAkQUxMT0MgPSAxIF07IHRoZW4KKwkJCQlydW5tZSBjbXAgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NV9mdWxsLiR7RVhUfSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHtkY3R9X2RqcGVnLiR7RVhUfQorCQkJCXJtICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTVfZnVsbC4ke0VYVH0KKwkJCWVsc2UKKwkJCQlmb3IgaSBpbiAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1X1swLTldKlswLTldeFswLTldKlswLTldLiR7RVhUfSBcCisJCQkJCSRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTVfZnVsbC4ke0VYVH07IGRvCisJCQkJCXJ1bm1lIGNtcCAkaSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHtkY3R9X2RqcGVnLiR7RVhUfQorCQkJCQlybSAkaQorCQkJCWRvbmUKKwkJCWZpCiAJCWRvbmUKLQkJcnVubWUgJEVYRURJUi90amJlbmNoICRPVVRESVIvJGltYWdlIDk1IC1yZ2IgLXRpbGUgLXF1aWV0IC1iZW5jaHRpbWUgMC4wMSAtZmFzdHVwc2FtcGxlICR7ZGN0YXJnfQorCQlydW5tZSAkRVhFRElSL3RqYmVuY2ggJE9VVERJUi8kaW1hZ2UgOTUgLXJnYiAtdGlsZSAtcXVpZXQgLWJlbmNodGltZSAwLjAxIC1mYXN0dXBzYW1wbGUgJHtkY3Rhcmd9ICRBTExPQ0FSRwogCQlmb3Igc2FtcCBpbiA0MjAgNDIyOyBkbwotCQkJZm9yIGkgaW4gJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NV9bMC05XSpbMC05XXhbMC05XSpbMC05XS4ke0VYVH0gXAotCQkJCSRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTVfZnVsbC4ke0VYVH07IGRvCi0JCQkJcnVubWUgY21wICRpICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke2RjdH1fbm9zbW9vdGhfZGpwZWcuJHtFWFR9Ci0JCQkJcm0gJGkKLQkJCWRvbmUKKwkJCWlmIFsgJEFMTE9DID0gMSBdOyB0aGVuCisJCQkJcnVubWUgY21wICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTVfZnVsbC4ke0VYVH0gJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7ZGN0fV9ub3Ntb290aF9kanBlZy4ke0VYVH0KKwkJCQlybSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1X2Z1bGwuJHtFWFR9CisJCQllbHNlCisJCQkJZm9yIGkgaW4gJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NV9bMC05XSpbMC05XXhbMC05XSpbMC05XS4ke0VYVH0gXAorCQkJCQkkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1X2Z1bGwuJHtFWFR9OyBkbworCQkJCQlydW5tZSBjbXAgJGkgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7ZGN0fV9ub3Ntb290aF9kanBlZy4ke0VYVH0KKwkJCQkJcm0gJGkKKwkJCQlkb25lCisJCQlmaQogCQlkb25lCiAKIAkJIyBUaWxlZCBkZWNvbXByZXNzaW9uCiAJCWZvciBzYW1wIGluIEdSQVkgNDQ0OyBkbwotCQkJcnVubWUgJEVYRURJUi90amJlbmNoICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTUuanBnICRCTVBBUkcgLXRpbGUgLXF1aWV0IC1iZW5jaHRpbWUgMC4wMSAke2RjdGFyZ30KLQkJCWZvciBpIGluICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTVfWzAtOV0qWzAtOV14WzAtOV0qWzAtOV0uJHtFWFR9IFwKLQkJCQkkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1X2Z1bGwuJHtFWFR9OyBkbwotCQkJCXJ1bm1lIGNtcCAkaSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHtkY3R9X2RqcGVnLiR7RVhUfQotCQkJCXJtICRpCi0JCQlkb25lCisJCQlydW5tZSAkRVhFRElSL3RqYmVuY2ggJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NS5qcGcgJEJNUEFSRyAtdGlsZSAtcXVpZXQgLWJlbmNodGltZSAwLjAxICR7ZGN0YXJnfSAkQUxMT0NBUkcKKwkJCWlmIFsgJEFMTE9DID0gMSBdOyB0aGVuCisJCQkJcnVubWUgY21wICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTVfZnVsbC4ke0VYVH0gJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7ZGN0fV9kanBlZy4ke0VYVH0KKwkJCQlybSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1X2Z1bGwuJHtFWFR9CisJCQllbHNlCisJCQkJZm9yIGkgaW4gJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NV9bMC05XSpbMC05XXhbMC05XSpbMC05XS4ke0VYVH0gXAorCQkJCQkkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1X2Z1bGwuJHtFWFR9OyBkbworCQkJCQlydW5tZSBjbXAgJGkgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7ZGN0fV9kanBlZy4ke0VYVH0KKwkJCQkJcm0gJGkKKwkJCQlkb25lCisJCQlmaQogCQlkb25lCiAJCWZvciBzYW1wIGluIDQyMCA0MjI7IGRvCi0JCQlydW5tZSAkRVhFRElSL3RqYmVuY2ggJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NS5qcGcgJEJNUEFSRyAtdGlsZSAtcXVpZXQgLWJlbmNodGltZSAwLjAxIC1mYXN0dXBzYW1wbGUgJHtkY3Rhcmd9Ci0JCQlmb3IgaSBpbiAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1X1swLTldKlswLTldeFswLTldKlswLTldLiR7RVhUfSBcCi0JCQkJJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NV9mdWxsLiR7RVhUfTsgZG8KLQkJCQlydW5tZSBjbXAgJGkgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7ZGN0fV9ub3Ntb290aF9kanBlZy4ke0VYVH0KLQkJCQlybSAkaQotCQkJZG9uZQorCQkJcnVubWUgJEVYRURJUi90amJlbmNoICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTUuanBnICRCTVBBUkcgLXRpbGUgLXF1aWV0IC1iZW5jaHRpbWUgMC4wMSAtZmFzdHVwc2FtcGxlICR7ZGN0YXJnfSAkQUxMT0NBUkcKKwkJCWlmIFsgJEFMTE9DID0gMSBdOyB0aGVuCisJCQkJcnVubWUgY21wICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTVfZnVsbC4ke0VYVH0gJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7ZGN0fV9ub3Ntb290aF9kanBlZy4ke0VYVH0KKwkJCQlybSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1X2Z1bGwuJHtFWFR9CisJCQllbHNlCisJCQkJZm9yIGkgaW4gJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NV9bMC05XSpbMC05XXhbMC05XSpbMC05XS4ke0VYVH0gXAorCQkJCQkkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1X2Z1bGwuJHtFWFR9OyBkbworCQkJCQlydW5tZSBjbXAgJGkgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7ZGN0fV9ub3Ntb290aF9kanBlZy4ke0VYVH0KKwkJCQkJcm0gJGkKKwkJCQlkb25lCisJCQlmaQogCQlkb25lCiAJZG9uZQogCiAJIyBTY2FsZWQgZGVjb21wcmVzc2lvbgotCWZvciBzY2FsZSBpbiAyIDQgODsgZG8KKwlmb3Igc2NhbGUgaW4gMl8xIDE1XzggN180IDEzXzggM18yIDExXzggNV80IDlfOCA3XzggM180IDVfOCAxXzIgM184IDFfNCAxXzg7IGRvCisJCXNjYWxlYXJnPWBlY2hvICRzY2FsZSB8IHNlZCBzQF9AL0BnYAogCQlmb3Igc2FtcCBpbiBHUkFZIDQyMCA0MjIgNDQ0OyBkbwotCQkJJEVYRURJUi9kanBlZyAtcmdiIC1zY2FsZSAxLyR7c2NhbGV9ICRCTVBBUkcgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X2Zhc3RfY2pwZWcuanBnID4kT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fMV8ke3NjYWxlfV9kanBlZy4ke0VYVH0KLQkJCXJ1bm1lICRFWEVESVIvdGpiZW5jaCAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1LmpwZyAkQk1QQVJHIC1zY2FsZSAxLyR7c2NhbGV9IC1xdWlldCAtYmVuY2h0aW1lIDAuMDEKLQkJCXJ1bm1lIGNtcCAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1XzFfJHtzY2FsZX0uJHtFWFR9ICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8xXyR7c2NhbGV9X2RqcGVnLiR7RVhUfQotCQkJcm0gJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NV8xXyR7c2NhbGV9LiR7RVhUfQorCQkJJEVYRURJUi9kanBlZyAtcmdiIC1zY2FsZSAke3NjYWxlYXJnfSAkQk1QQVJHICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9mYXN0X2NqcGVnLmpwZyA+JE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7c2NhbGV9X2RqcGVnLiR7RVhUfQorCQkJcnVubWUgJEVYRURJUi90amJlbmNoICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTUuanBnICRCTVBBUkcgLXNjYWxlICR7c2NhbGVhcmd9IC1xdWlldCAtYmVuY2h0aW1lIDAuMDEgJEFMTE9DQVJHCisJCQlydW5tZSBjbXAgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NV8ke3NjYWxlfS4ke0VYVH0gJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7c2NhbGV9X2RqcGVnLiR7RVhUfQorCQkJcm0gJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NV8ke3NjYWxlfS4ke0VYVH0KIAkJZG9uZQogCWRvbmUKIApAQCAtMTMyLDQ0ICsxNjIsNjAgQEAKIAlmb3IgeGZvcm0gaW4gaGZsaXAgdmZsaXAgdHJhbnNwb3NlIHRyYW5zdmVyc2Ugcm90OTAgcm90MTgwIHJvdDI3MDsgZG8KIAkJZm9yIHNhbXAgaW4gR1JBWSA0NDQ7IGRvCiAJCQkkRVhFRElSL2RqcGVnIC1yZ2IgJEJNUEFSRyAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHt4Zm9ybX1fanBlZ3RyYW4uanBnID4kT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHt4Zm9ybX1fanBlZ3RyYW4uJHtFWFR9Ci0JCQlydW5tZSAkRVhFRElSL3RqYmVuY2ggJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NS5qcGcgJEJNUEFSRyAtJHhmb3JtIC10aWxlIC1xdWlldCAtYmVuY2h0aW1lIDAuMDEKLQkJCWZvciBpIGluICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTVfWzAtOV0qWzAtOV14WzAtOV0qWzAtOV0uJHtFWFR9IFwKLQkJCQkkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1X2Z1bGwuJHtFWFR9OyBkbwotCQkJCXJ1bm1lIGNtcCAkaSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHt4Zm9ybX1fanBlZ3RyYW4uJHtFWFR9Ci0JCQkJcm0gJGkKLQkJCWRvbmUKKwkJCXJ1bm1lICRFWEVESVIvdGpiZW5jaCAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1LmpwZyAkQk1QQVJHIC0keGZvcm0gLXRpbGUgLXF1aWV0IC1iZW5jaHRpbWUgMC4wMSAkQUxMT0NBUkcKKwkJCWlmIFsgJEFMTE9DID0gMSBdOyB0aGVuCisJCQkJcnVubWUgY21wICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTVfZnVsbC4ke0VYVH0gJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7eGZvcm19X2pwZWd0cmFuLiR7RVhUfQorCQkJCXJtICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTVfZnVsbC4ke0VYVH0KKwkJCWVsc2UKKwkJCQlmb3IgaSBpbiAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1X1swLTldKlswLTldeFswLTldKlswLTldLiR7RVhUfSBcCisJCQkJCSRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTVfZnVsbC4ke0VYVH07IGRvCisJCQkJCXJ1bm1lIGNtcCAkaSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHt4Zm9ybX1fanBlZ3RyYW4uJHtFWFR9CisJCQkJCXJtICRpCisJCQkJZG9uZQorCQkJZmkKIAkJZG9uZQogCQlmb3Igc2FtcCBpbiA0MjAgNDIyOyBkbwogCQkJJEVYRURJUi9kanBlZyAtbm9zbW9vdGggLXJnYiAkQk1QQVJHICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke3hmb3JtfV9qcGVndHJhbi5qcGcgPiRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke3hmb3JtfV9qcGVndHJhbi4ke0VYVH0KLQkJCXJ1bm1lICRFWEVESVIvdGpiZW5jaCAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1LmpwZyAkQk1QQVJHIC0keGZvcm0gLXRpbGUgLXF1aWV0IC1iZW5jaHRpbWUgMC4wMSAtZmFzdHVwc2FtcGxlCi0JCQlmb3IgaSBpbiAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1X1swLTldKlswLTldeFswLTldKlswLTldLiR7RVhUfSBcCi0JCQkJJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NV9mdWxsLiR7RVhUfTsgZG8KLQkJCQlydW5tZSBjbXAgJGkgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7eGZvcm19X2pwZWd0cmFuLiR7RVhUfQotCQkJCXJtICRpCi0JCQlkb25lCisJCQlydW5tZSAkRVhFRElSL3RqYmVuY2ggJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NS5qcGcgJEJNUEFSRyAtJHhmb3JtIC10aWxlIC1xdWlldCAtYmVuY2h0aW1lIDAuMDEgLWZhc3R1cHNhbXBsZSAkQUxMT0NBUkcKKwkJCWlmIFsgJEFMTE9DID0gMSBdOyB0aGVuCisJCQkJcnVubWUgY21wICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTVfZnVsbC4ke0VYVH0gJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7eGZvcm19X2pwZWd0cmFuLiR7RVhUfQorCQkJCXJtICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTVfZnVsbC4ke0VYVH0KKwkJCWVsc2UKKwkJCQlmb3IgaSBpbiAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1X1swLTldKlswLTldeFswLTldKlswLTldLiR7RVhUfSBcCisJCQkJCSRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTVfZnVsbC4ke0VYVH07IGRvCisJCQkJCXJ1bm1lIGNtcCAkaSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHt4Zm9ybX1fanBlZ3RyYW4uJHtFWFR9CisJCQkJCXJtICRpCisJCQkJZG9uZQorCQkJZmkKIAkJZG9uZQogCWRvbmUKIAogCSMgR3JheXNjYWxlIHRyYW5zZm9ybQogCWZvciB4Zm9ybSBpbiBoZmxpcCB2ZmxpcCB0cmFuc3Bvc2UgdHJhbnN2ZXJzZSByb3Q5MCByb3QxODAgcm90MjcwOyBkbwogCQlmb3Igc2FtcCBpbiBHUkFZIDQ0NCA0MjIgNDIwOyBkbwotCQkJcnVubWUgJEVYRURJUi90amJlbmNoICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTUuanBnICRCTVBBUkcgLSR4Zm9ybSAtdGlsZSAtcXVpZXQgLWJlbmNodGltZSAwLjAxIC1ncmF5c2NhbGUKLQkJCWZvciBpIGluICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTVfWzAtOV0qWzAtOV14WzAtOV0qWzAtOV0uJHtFWFR9IFwKLQkJCQkkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1X2Z1bGwuJHtFWFR9OyBkbwotCQkJCXJ1bm1lIGNtcCAkaSAkT1VURElSLyR7YmFzZW5hbWV9X0dSQVlfJHt4Zm9ybX1fanBlZ3RyYW4uJHtFWFR9Ci0JCQkJcm0gJGkKLQkJCWRvbmUKKwkJCXJ1bm1lICRFWEVESVIvdGpiZW5jaCAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1LmpwZyAkQk1QQVJHIC0keGZvcm0gLXRpbGUgLXF1aWV0IC1iZW5jaHRpbWUgMC4wMSAtZ3JheXNjYWxlICRBTExPQ0FSRworCQkJaWYgWyAkQUxMT0MgPSAxIF07IHRoZW4KKwkJCQlydW5tZSBjbXAgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NV9mdWxsLiR7RVhUfSAkT1VURElSLyR7YmFzZW5hbWV9X0dSQVlfJHt4Zm9ybX1fanBlZ3RyYW4uJHtFWFR9CisJCQkJcm0gJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NV9mdWxsLiR7RVhUfQorCQkJZWxzZQorCQkJCWZvciBpIGluICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTVfWzAtOV0qWzAtOV14WzAtOV0qWzAtOV0uJHtFWFR9IFwKKwkJCQkJJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NV9mdWxsLiR7RVhUfTsgZG8KKwkJCQkJcnVubWUgY21wICRpICRPVVRESVIvJHtiYXNlbmFtZX1fR1JBWV8ke3hmb3JtfV9qcGVndHJhbi4ke0VYVH0KKwkJCQkJcm0gJGkKKwkJCQlkb25lCisJCQlmaQogCQlkb25lCiAJZG9uZQogCiAJIyBUcmFuc2Zvcm1zIHdpdGggc2NhbGluZwogCWZvciB4Zm9ybSBpbiBoZmxpcCB2ZmxpcCB0cmFuc3Bvc2UgdHJhbnN2ZXJzZSByb3Q5MCByb3QxODAgcm90MjcwOyBkbwogCQlmb3Igc2FtcCBpbiBHUkFZIDQ0NCA0MjIgNDIwOyBkbwotCQkJZm9yIHNjYWxlIGluIDIgNCA4OyBkbwotCQkJCSRFWEVESVIvZGpwZWcgLXJnYiAtc2NhbGUgMS8ke3NjYWxlfSAkQk1QQVJHICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke3hmb3JtfV9qcGVndHJhbi5qcGcgPiRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke3hmb3JtfV8xXyR7c2NhbGV9X2pwZWd0cmFuLiR7RVhUfQotCQkJCXJ1bm1lICRFWEVESVIvdGpiZW5jaCAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1LmpwZyAkQk1QQVJHIC0keGZvcm0gLXNjYWxlIDEvJHtzY2FsZX0gLXF1aWV0IC1iZW5jaHRpbWUgMC4wMQotCQkJCXJ1bm1lIGNtcCAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1XzFfJHtzY2FsZX0uJHtFWFR9ICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke3hmb3JtfV8xXyR7c2NhbGV9X2pwZWd0cmFuLiR7RVhUfQotCQkJCXJtICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTVfMV8ke3NjYWxlfS4ke0VYVH0KKwkJCWZvciBzY2FsZSBpbiAyXzEgMTVfOCA3XzQgMTNfOCAzXzIgMTFfOCA1XzQgOV84IDdfOCAzXzQgNV84IDFfMiAzXzggMV80IDFfODsgZG8KKwkJCQlzY2FsZWFyZz1gZWNobyAkc2NhbGUgfCBzZWQgc0BfQC9AZ2AKKwkJCQkkRVhFRElSL2RqcGVnIC1yZ2IgLXNjYWxlICR7c2NhbGVhcmd9ICRCTVBBUkcgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7eGZvcm19X2pwZWd0cmFuLmpwZyA+JE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7eGZvcm19XyR7c2NhbGV9X2pwZWd0cmFuLiR7RVhUfQorCQkJCXJ1bm1lICRFWEVESVIvdGpiZW5jaCAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1LmpwZyAkQk1QQVJHIC0keGZvcm0gLXNjYWxlICR7c2NhbGVhcmd9IC1xdWlldCAtYmVuY2h0aW1lIDAuMDEgJEFMTE9DQVJHCisJCQkJcnVubWUgY21wICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTVfJHtzY2FsZX0uJHtFWFR9ICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke3hmb3JtfV8ke3NjYWxlfV9qcGVndHJhbi4ke0VYVH0KKwkJCQlybSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1XyR7c2NhbGV9LiR7RVhUfQogCQkJZG9uZQogCQlkb25lCiAJZG9uZQpkaWZmIC0tZ2l0IGEvdGpiZW5jaHRlc3QuamF2YS5pbiBiL3RqYmVuY2h0ZXN0LmphdmEuaW4KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDRjZGY0YQotLS0gL2Rldi9udWxsCisrKyBiL3RqYmVuY2h0ZXN0LmphdmEuaW4KQEAgLTAsMCArMSwxNzkgQEAKKyMhL2Jpbi9iYXNoCisKK3NldCAtdQorc2V0IC1lCit0cmFwIG9uZXhpdCBJTlQKK3RyYXAgb25leGl0IFRFUk0KK3RyYXAgb25leGl0IEVYSVQKKworb25leGl0KCkKK3sKKwlpZiBbIC1kICRPVVRESVIgXTsgdGhlbgorCQlybSAtcmYgJE9VVERJUgorCWZpCit9CisKK3J1bm1lKCkKK3sKKwllY2hvIFwqXCpcKiAkKgorCSQqCit9CisKK0lNQUdFUz0idmdsXzU2NzRfMDA5OC5ibXAgdmdsXzY0MzRfMDAxOGEuYm1wIHZnbF82NTQ4XzAwMjZhLmJtcCBuaWdodHNob3RfaXNvXzEwMC5ibXAiCitJTUdESVI9QHNyY2RpckAvdGVzdGltYWdlcworT1VURElSPWBta3RlbXAgLWQgL3RtcC9fX3RqYmVuY2h0ZXN0X2phdmFfb3V0cHV0LlhYWFhYWGAKK0VYRURJUj0uCitKQVZBPSJASkFWQUAgLWNwIGphdmEvdHVyYm9qcGVnLmphciAtRGphdmEubGlicmFyeS5wYXRoPS5saWJzIgorCitpZiBbIC1kICRPVVRESVIgXTsgdGhlbgorCXJtIC1yZiAkT1VURElSCitmaQorbWtkaXIgLXAgJE9VVERJUgorCitleGVjID4kRVhFRElSL3RqYmVuY2h0ZXN0LWphdmEubG9nCisKKyMgU3RhbmRhcmQgdGVzdHMKK2ZvciBpbWFnZSBpbiAkSU1BR0VTOyBkbworCisJY3AgJElNR0RJUi8kaW1hZ2UgJE9VVERJUgorCWJhc2VuYW1lPWBiYXNlbmFtZSAkaW1hZ2UgLmJtcGAKKwkkRVhFRElSL2NqcGVnIC1xdWFsaXR5IDk1IC1kY3QgZmFzdCAtZ3JheXNjYWxlICRJTUdESVIvJHtiYXNlbmFtZX0uYm1wID4kT1VURElSLyR7YmFzZW5hbWV9X0dSQVlfZmFzdF9janBlZy5qcGcKKwkkRVhFRElSL2NqcGVnIC1xdWFsaXR5IDk1IC1kY3QgZmFzdCAtc2FtcGxlIDJ4MiAkSU1HRElSLyR7YmFzZW5hbWV9LmJtcCA+JE9VVERJUi8ke2Jhc2VuYW1lfV80MjBfZmFzdF9janBlZy5qcGcKKwkkRVhFRElSL2NqcGVnIC1xdWFsaXR5IDk1IC1kY3QgZmFzdCAtc2FtcGxlIDJ4MSAkSU1HRElSLyR7YmFzZW5hbWV9LmJtcCA+JE9VVERJUi8ke2Jhc2VuYW1lfV80MjJfZmFzdF9janBlZy5qcGcKKwkkRVhFRElSL2NqcGVnIC1xdWFsaXR5IDk1IC1kY3QgZmFzdCAtc2FtcGxlIDF4MSAkSU1HRElSLyR7YmFzZW5hbWV9LmJtcCA+JE9VVERJUi8ke2Jhc2VuYW1lfV80NDRfZmFzdF9janBlZy5qcGcKKwkkRVhFRElSL2NqcGVnIC1xdWFsaXR5IDk1IC1kY3QgaW50IC1ncmF5c2NhbGUgJElNR0RJUi8ke2Jhc2VuYW1lfS5ibXAgPiRPVVRESVIvJHtiYXNlbmFtZX1fR1JBWV9hY2N1cmF0ZV9janBlZy5qcGcKKwkkRVhFRElSL2NqcGVnIC1xdWFsaXR5IDk1IC1kY3QgaW50IC1zYW1wbGUgMngyICRJTUdESVIvJHtiYXNlbmFtZX0uYm1wID4kT1VURElSLyR7YmFzZW5hbWV9XzQyMF9hY2N1cmF0ZV9janBlZy5qcGcKKwkkRVhFRElSL2NqcGVnIC1xdWFsaXR5IDk1IC1kY3QgaW50IC1zYW1wbGUgMngxICRJTUdESVIvJHtiYXNlbmFtZX0uYm1wID4kT1VURElSLyR7YmFzZW5hbWV9XzQyMl9hY2N1cmF0ZV9janBlZy5qcGcKKwkkRVhFRElSL2NqcGVnIC1xdWFsaXR5IDk1IC1kY3QgaW50IC1zYW1wbGUgMXgxICRJTUdESVIvJHtiYXNlbmFtZX0uYm1wID4kT1VURElSLyR7YmFzZW5hbWV9XzQ0NF9hY2N1cmF0ZV9janBlZy5qcGcKKwlmb3Igc2FtcCBpbiBHUkFZIDQyMCA0MjIgNDQ0OyBkbworCQkkRVhFRElSL2RqcGVnIC1yZ2IgLWJtcCAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fZmFzdF9janBlZy5qcGcgPiRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9kZWZhdWx0X2RqcGVnLmJtcAorCQkkRVhFRElSL2RqcGVnIC1kY3QgZmFzdCAtcmdiIC1ibXAgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X2Zhc3RfY2pwZWcuanBnID4kT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fZmFzdF9kanBlZy5ibXAKKwkJJEVYRURJUi9kanBlZyAtZGN0IGludCAtcmdiIC1ibXAgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X2FjY3VyYXRlX2NqcGVnLmpwZyA+JE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X2FjY3VyYXRlX2RqcGVnLmJtcAorCWRvbmUKKwlmb3Igc2FtcCBpbiA0MjAgNDIyOyBkbworCQkkRVhFRElSL2RqcGVnIC1ub3Ntb290aCAtYm1wICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9mYXN0X2NqcGVnLmpwZyA+JE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X2RlZmF1bHRfbm9zbW9vdGhfZGpwZWcuYm1wCisJCSRFWEVESVIvZGpwZWcgLWRjdCBmYXN0IC1ub3Ntb290aCAtYm1wICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9mYXN0X2NqcGVnLmpwZyA+JE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X2Zhc3Rfbm9zbW9vdGhfZGpwZWcuYm1wCisJCSRFWEVESVIvZGpwZWcgLWRjdCBpbnQgLW5vc21vb3RoIC1ibXAgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X2FjY3VyYXRlX2NqcGVnLmpwZyA+JE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X2FjY3VyYXRlX25vc21vb3RoX2RqcGVnLmJtcAorCWRvbmUKKworCSMgQ29tcHJlc3Npb24KKwlmb3IgZGN0IGluIGFjY3VyYXRlIGZhc3Q7IGRvCisJCXJ1bm1lICRKQVZBIFRKQmVuY2ggJE9VVERJUi8kaW1hZ2UgOTUgLXJnYiAtcXVpZXQgLWJlbmNodGltZSAwLjAxIC0ke2RjdH1kY3QKKwkJZm9yIHNhbXAgaW4gR1JBWSA0MjAgNDIyIDQ0NDsgZG8KKwkJCXJ1bm1lIGNtcCAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1LmpwZyAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHtkY3R9X2NqcGVnLmpwZworCQlkb25lCisJZG9uZQorCisJZm9yIGRjdCBpbiBmYXN0IGFjY3VyYXRlIGRlZmF1bHQ7IGRvCisJCWRjdGFyZz0tJHtkY3R9ZGN0CisJCWlmIFsgIiR7ZGN0fSIgPSAiZGVmYXVsdCIgXTsgdGhlbgorCQkJZGN0YXJnPQorCQlmaQorCisJCSMgVGlsZWQgY29tcHJlc3Npb24gJiBkZWNvbXByZXNzaW9uCisJCXJ1bm1lICRKQVZBIFRKQmVuY2ggJE9VVERJUi8kaW1hZ2UgOTUgLXJnYiAtdGlsZSAtcXVpZXQgLWJlbmNodGltZSAwLjAxICR7ZGN0YXJnfQorCQlmb3Igc2FtcCBpbiBHUkFZIDQ0NDsgZG8KKwkJCWZvciBpIGluICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTVfWzAtOV0qWzAtOV14WzAtOV0qWzAtOV0uYm1wIFwKKwkJCQkkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1X2Z1bGwuYm1wOyBkbworCQkJCXJ1bm1lIGNtcCAtaSA1NDo1NCAkaSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHtkY3R9X2RqcGVnLmJtcAorCQkJCXJtICRpCisJCQlkb25lCisJCWRvbmUKKwkJcnVubWUgJEpBVkEgVEpCZW5jaCAkT1VURElSLyRpbWFnZSA5NSAtcmdiIC10aWxlIC1xdWlldCAtYmVuY2h0aW1lIDAuMDEgLWZhc3R1cHNhbXBsZSAke2RjdGFyZ30KKwkJZm9yIHNhbXAgaW4gNDIwIDQyMjsgZG8KKwkJCWZvciBpIGluICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTVfWzAtOV0qWzAtOV14WzAtOV0qWzAtOV0uYm1wIFwKKwkJCQkkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1X2Z1bGwuYm1wOyBkbworCQkJCXJ1bm1lIGNtcCAtaSA1NDo1NCAkaSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHtkY3R9X25vc21vb3RoX2RqcGVnLmJtcAorCQkJCXJtICRpCisJCQlkb25lCisJCWRvbmUKKworCQkjIFRpbGVkIGRlY29tcHJlc3Npb24KKwkJZm9yIHNhbXAgaW4gR1JBWSA0NDQ7IGRvCisJCQlydW5tZSAkSkFWQSBUSkJlbmNoICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTUuanBnIC10aWxlIC1xdWlldCAtYmVuY2h0aW1lIDAuMDEgJHtkY3Rhcmd9CisJCQlmb3IgaSBpbiAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1X1swLTldKlswLTldeFswLTldKlswLTldLmJtcCBcCisJCQkJJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NV9mdWxsLmJtcDsgZG8KKwkJCQlydW5tZSBjbXAgLWkgNTQ6NTQgJGkgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7ZGN0fV9kanBlZy5ibXAKKwkJCQlybSAkaQorCQkJZG9uZQorCQlkb25lCisJCWZvciBzYW1wIGluIDQyMCA0MjI7IGRvCisJCQlydW5tZSAkSkFWQSBUSkJlbmNoICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTUuanBnIC10aWxlIC1xdWlldCAtYmVuY2h0aW1lIDAuMDEgLWZhc3R1cHNhbXBsZSAke2RjdGFyZ30KKwkJCWZvciBpIGluICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTVfWzAtOV0qWzAtOV14WzAtOV0qWzAtOV0uYm1wIFwKKwkJCQkkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1X2Z1bGwuYm1wOyBkbworCQkJCXJ1bm1lIGNtcCAkaSAtaSA1NDo1NCAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHtkY3R9X25vc21vb3RoX2RqcGVnLmJtcAorCQkJCXJtICRpCisJCQlkb25lCisJCWRvbmUKKwlkb25lCisKKwkjIFNjYWxlZCBkZWNvbXByZXNzaW9uCisJZm9yIHNjYWxlIGluIDJfMSAxNV84IDdfNCAxM184IDNfMiAxMV84IDVfNCA5XzggN184IDNfNCA1XzggMV8yIDNfOCAxXzQgMV84OyBkbworCQlzY2FsZWFyZz1gZWNobyAkc2NhbGUgfCBzZWQgc0BfQC9AZ2AKKwkJZm9yIHNhbXAgaW4gR1JBWSA0MjAgNDIyIDQ0NDsgZG8KKwkJCSRFWEVESVIvZGpwZWcgLXJnYiAtc2NhbGUgJHtzY2FsZWFyZ30gLWJtcCAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fZmFzdF9janBlZy5qcGcgPiRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke3NjYWxlfV9kanBlZy5ibXAKKwkJCXJ1bm1lICRKQVZBIFRKQmVuY2ggJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NS5qcGcgLXNjYWxlICR7c2NhbGVhcmd9IC1xdWlldCAtYmVuY2h0aW1lIDAuMDEKKwkJCXJ1bm1lIGNtcCAtaSA1NDo1NCAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1XyR7c2NhbGV9LmJtcCAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHtzY2FsZX1fZGpwZWcuYm1wCisJCQlybSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1XyR7c2NhbGV9LmJtcAorCQlkb25lCisJZG9uZQorCisJIyBUcmFuc2Zvcm1zCisJZm9yIHNhbXAgaW4gR1JBWSA0MjAgNDIyIDQ0NDsgZG8KKwkJJEVYRURJUi9qcGVndHJhbiAtZmxpcCBob3Jpem9udGFsIC10cmltICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTUuanBnID4kT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1faGZsaXBfanBlZ3RyYW4uanBnCisJCSRFWEVESVIvanBlZ3RyYW4gLWZsaXAgdmVydGljYWwgLXRyaW0gJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NS5qcGcgPiRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV92ZmxpcF9qcGVndHJhbi5qcGcKKwkJJEVYRURJUi9qcGVndHJhbiAtdHJhbnNwb3NlIC10cmltICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTUuanBnID4kT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fdHJhbnNwb3NlX2pwZWd0cmFuLmpwZworCQkkRVhFRElSL2pwZWd0cmFuIC10cmFuc3ZlcnNlIC10cmltICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTUuanBnID4kT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fdHJhbnN2ZXJzZV9qcGVndHJhbi5qcGcKKwkJJEVYRURJUi9qcGVndHJhbiAtcm90YXRlIDkwIC10cmltICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTUuanBnID4kT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fcm90OTBfanBlZ3RyYW4uanBnCisJCSRFWEVESVIvanBlZ3RyYW4gLXJvdGF0ZSAxODAgLXRyaW0gJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NS5qcGcgPiRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9yb3QxODBfanBlZ3RyYW4uanBnCisJCSRFWEVESVIvanBlZ3RyYW4gLXJvdGF0ZSAyNzAgLXRyaW0gJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NS5qcGcgPiRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9yb3QyNzBfanBlZ3RyYW4uanBnCisJZG9uZQorCWZvciB4Zm9ybSBpbiBoZmxpcCB2ZmxpcCB0cmFuc3Bvc2UgdHJhbnN2ZXJzZSByb3Q5MCByb3QxODAgcm90MjcwOyBkbworCQlmb3Igc2FtcCBpbiBHUkFZIDQ0NDsgZG8KKwkJCSRFWEVESVIvZGpwZWcgLXJnYiAtYm1wICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke3hmb3JtfV9qcGVndHJhbi5qcGcgPiRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke3hmb3JtfV9qcGVndHJhbi5ibXAKKwkJCXJ1bm1lICRKQVZBIFRKQmVuY2ggJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NS5qcGcgLSR4Zm9ybSAtdGlsZSAtcXVpZXQgLWJlbmNodGltZSAwLjAxCisJCQlmb3IgaSBpbiAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1X1swLTldKlswLTldeFswLTldKlswLTldLmJtcCBcCisJCQkJJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NV9mdWxsLmJtcDsgZG8KKwkJCQlydW5tZSBjbXAgLWkgNTQ6NTQgJGkgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7eGZvcm19X2pwZWd0cmFuLmJtcAorCQkJCXJtICRpCisJCQlkb25lCisJCWRvbmUKKwkJZm9yIHNhbXAgaW4gNDIwIDQyMjsgZG8KKwkJCSRFWEVESVIvZGpwZWcgLW5vc21vb3RoIC1yZ2IgLWJtcCAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHt4Zm9ybX1fanBlZ3RyYW4uanBnID4kT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHt4Zm9ybX1fanBlZ3RyYW4uYm1wCisJCQlydW5tZSAkSkFWQSBUSkJlbmNoICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTUuanBnIC0keGZvcm0gLXRpbGUgLXF1aWV0IC1iZW5jaHRpbWUgMC4wMSAtZmFzdHVwc2FtcGxlCisJCQlmb3IgaSBpbiAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1X1swLTldKlswLTldeFswLTldKlswLTldLmJtcCBcCisJCQkJJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NV9mdWxsLmJtcDsgZG8KKwkJCQlydW5tZSBjbXAgLWkgNTQ6NTQgJGkgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7eGZvcm19X2pwZWd0cmFuLmJtcAorCQkJCXJtICRpCisJCQlkb25lCisJCWRvbmUKKwlkb25lCisKKwkjIEdyYXlzY2FsZSB0cmFuc2Zvcm0KKwlmb3IgeGZvcm0gaW4gaGZsaXAgdmZsaXAgdHJhbnNwb3NlIHRyYW5zdmVyc2Ugcm90OTAgcm90MTgwIHJvdDI3MDsgZG8KKwkJZm9yIHNhbXAgaW4gR1JBWSA0NDQgNDIyIDQyMDsgZG8KKwkJCXJ1bm1lICRKQVZBIFRKQmVuY2ggJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NS5qcGcgLSR4Zm9ybSAtdGlsZSAtcXVpZXQgLWJlbmNodGltZSAwLjAxIC1ncmF5c2NhbGUKKwkJCWZvciBpIGluICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9ROTVfWzAtOV0qWzAtOV14WzAtOV0qWzAtOV0uYm1wIFwKKwkJCQkkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1X2Z1bGwuYm1wOyBkbworCQkJCXJ1bm1lIGNtcCAtaSA1NDo1NCAkaSAkT1VURElSLyR7YmFzZW5hbWV9X0dSQVlfJHt4Zm9ybX1fanBlZ3RyYW4uYm1wCisJCQkJcm0gJGkKKwkJCWRvbmUKKwkJZG9uZQorCWRvbmUKKworCSMgVHJhbnNmb3JtcyB3aXRoIHNjYWxpbmcKKwlmb3IgeGZvcm0gaW4gaGZsaXAgdmZsaXAgdHJhbnNwb3NlIHRyYW5zdmVyc2Ugcm90OTAgcm90MTgwIHJvdDI3MDsgZG8KKwkJZm9yIHNhbXAgaW4gR1JBWSA0NDQgNDIyIDQyMDsgZG8KKwkJCWZvciBzY2FsZSBpbiAyXzEgMTVfOCA3XzQgMTNfOCAzXzIgMTFfOCA1XzQgOV84IDdfOCAzXzQgNV84IDFfMiAzXzggMV80IDFfODsgZG8KKwkJCQlzY2FsZWFyZz1gZWNobyAkc2NhbGUgfCBzZWQgc0BfQC9AZ2AKKwkJCQkkRVhFRElSL2RqcGVnIC1yZ2IgLXNjYWxlICR7c2NhbGVhcmd9IC1ibXAgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7eGZvcm19X2pwZWd0cmFuLmpwZyA+JE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7eGZvcm19XyR7c2NhbGV9X2pwZWd0cmFuLmJtcAorCQkJCXJ1bm1lICRKQVZBIFRKQmVuY2ggJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NS5qcGcgLSR4Zm9ybSAtc2NhbGUgJHtzY2FsZWFyZ30gLXF1aWV0IC1iZW5jaHRpbWUgMC4wMQorCQkJCXJ1bm1lIGNtcCAtaSA1NDo1NCAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fUTk1XyR7c2NhbGV9LmJtcCAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHt4Zm9ybX1fJHtzY2FsZX1fanBlZ3RyYW4uYm1wCisJCQkJcm0gJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X1E5NV8ke3NjYWxlfS5ibXAKKwkJCWRvbmUKKwkJZG9uZQorCWRvbmUKKworZG9uZQorCitlY2hvIFNVQ0NFU1MhCmRpZmYgLS1naXQgYS90amV4YW1wbGV0ZXN0LmluIGIvdGpleGFtcGxldGVzdC5pbgppbmRleCA0MzAwODhlLi40MGIzNDJlIDEwMDc1NQotLS0gYS90amV4YW1wbGV0ZXN0LmluCisrKyBiL3RqZXhhbXBsZXRlc3QuaW4KQEAgLTg0LDEyICs4NCwxMyBAQAogCWRvbmUKIAogCSMgU2NhbGVkIGRlY29tcHJlc3Npb24KLQlmb3Igc2NhbGUgaW4gMiA0IDg7IGRvCisJZm9yIHNjYWxlIGluIDJfMSAxNV84IDdfNCAxM184IDNfMiAxMV84IDVfNCA5XzggN184IDNfNCA1XzggMV8yIDNfOCAxXzQgMV84OyBkbworCQlzY2FsZWFyZz1gZWNobyAkc2NhbGUgfCBzZWQgc0BfQC9AZ2AKIAkJZm9yIHNhbXAgaW4gR1JBWSA0MjAgNDIyIDQ0NDsgZG8KLQkJCSRFWEVESVIvZGpwZWcgLXJnYiAtYm1wIC1zY2FsZSAxLyR7c2NhbGV9ICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9mYXN0X2NqcGVnLmpwZyA+JE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XzFfJHtzY2FsZX1fZGpwZWcuYm1wCi0JCQlydW5tZSAkSkFWQSBUSkV4YW1wbGUgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X2Zhc3QuanBnICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8xXyR7c2NhbGV9LmJtcCAtc2NhbGUgMS8ke3NjYWxlfQotCQkJcnVubWUgY21wIC1pIDU0OjU0ICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8xXyR7c2NhbGV9LmJtcCAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fMV8ke3NjYWxlfV9kanBlZy5ibXAKLQkJCXJtICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8xXyR7c2NhbGV9LmJtcAorCQkJJEVYRURJUi9kanBlZyAtcmdiIC1ibXAgLXNjYWxlICR7c2NhbGVhcmd9ICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9mYXN0X2NqcGVnLmpwZyA+JE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7c2NhbGV9X2RqcGVnLmJtcAorCQkJcnVubWUgJEpBVkEgVEpFeGFtcGxlICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV9mYXN0LmpwZyAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHtzY2FsZX0uYm1wIC1zY2FsZSAke3NjYWxlYXJnfQorCQkJcnVubWUgY21wIC1pIDU0OjU0ICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke3NjYWxlfS5ibXAgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7c2NhbGV9X2RqcGVnLmJtcAorCQkJcm0gJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7c2NhbGV9LmJtcAogCQlkb25lCiAJZG9uZQogCkBAIC0xMzQsMTEgKzEzNSwxMiBAQAogCSMgVHJhbnNmb3JtcyB3aXRoIHNjYWxpbmcKIAlmb3IgeGZvcm0gaW4gaGZsaXAgdmZsaXAgdHJhbnNwb3NlIHRyYW5zdmVyc2Ugcm90OTAgcm90MTgwIHJvdDI3MDsgZG8KIAkJZm9yIHNhbXAgaW4gR1JBWSA0NDQgNDIyIDQyMDsgZG8KLQkJCWZvciBzY2FsZSBpbiAyIDQgODsgZG8KLQkJCQkkRVhFRElSL2RqcGVnIC1yZ2IgLWJtcCAtc2NhbGUgMS8ke3NjYWxlfSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHt4Zm9ybX1fanBlZ3RyYW4uanBnID4kT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHt4Zm9ybX1fMV8ke3NjYWxlfV9qcGVndHJhbi5ibXAKLQkJCQlydW5tZSAkSkFWQSBUSkV4YW1wbGUgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9X2Zhc3QuanBnICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke3hmb3JtfV8xXyR7c2NhbGV9LmJtcCAtJHhmb3JtIC1zY2FsZSAxLyR7c2NhbGV9IC1jcm9wIDE2LDE2LDcweDYwCi0JCQkJcnVubWUgY21wIC1pIDU0OjU0ICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke3hmb3JtfV8xXyR7c2NhbGV9LmJtcCAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHt4Zm9ybX1fMV8ke3NjYWxlfV9qcGVndHJhbi5ibXAKLQkJCQlybSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHt4Zm9ybX1fMV8ke3NjYWxlfS5ibXAKKwkJCWZvciBzY2FsZSBpbiAyXzEgMTVfOCA3XzQgMTNfOCAzXzIgMTFfOCA1XzQgOV84IDdfOCAzXzQgNV84IDFfMiAzXzggMV80IDFfODsgZG8KKwkJCQlzY2FsZWFyZz1gZWNobyAkc2NhbGUgfCBzZWQgc0BfQC9AZ2AKKwkJCQkkRVhFRElSL2RqcGVnIC1yZ2IgLWJtcCAtc2NhbGUgJHtzY2FsZWFyZ30gJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7eGZvcm19X2pwZWd0cmFuLmpwZyA+JE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7eGZvcm19XyR7c2NhbGV9X2pwZWd0cmFuLmJtcAorCQkJCXJ1bm1lICRKQVZBIFRKRXhhbXBsZSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fZmFzdC5qcGcgJE9VVERJUi8ke2Jhc2VuYW1lfV8ke3NhbXB9XyR7eGZvcm19XyR7c2NhbGV9LmJtcCAtJHhmb3JtIC1zY2FsZSAke3NjYWxlYXJnfSAtY3JvcCAxNiwxNiw3MHg2MAorCQkJCXJ1bm1lIGNtcCAtaSA1NDo1NCAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHt4Zm9ybX1fJHtzY2FsZX0uYm1wICRPVVRESVIvJHtiYXNlbmFtZX1fJHtzYW1wfV8ke3hmb3JtfV8ke3NjYWxlfV9qcGVndHJhbi5ibXAKKwkJCQlybSAkT1VURElSLyR7YmFzZW5hbWV9XyR7c2FtcH1fJHt4Zm9ybX1fJHtzY2FsZX0uYm1wCiAJCQlkb25lCiAJCWRvbmUKIAlkb25lCmRpZmYgLS1naXQgYS90anVuaXR0ZXN0LmMgYi90anVuaXR0ZXN0LmMKaW5kZXggYTYxZDI2Ni4uNGVjMTljNCAxMDA2NDQKLS0tIGEvdGp1bml0dGVzdC5jCisrKyBiL3RqdW5pdHRlc3QuYwpAQCAtMjE5LDcgKzIxOSw2IEBACiAJYmFpbG91dDoKIAlpZihyZXR2YWw9PTApCiAJewotCQlwcmludGYoIlxuIik7CiAJCWZvcihyb3c9MDsgcm93PGg7IHJvdysrKQogCQl7CiAJCQlmb3IoY29sPTA7IGNvbDx3OyBjb2wrKykKQEAgLTMxMiw3ICszMTEsNiBAQAogCQkJCXByaW50ZigiJS4zZCAiLCBidWZbeXBpdGNoKnBoICsgdXZwaXRjaCpjaCArICh1dnBpdGNoKnJvdytjb2wpXSk7CiAJCQlwcmludGYoIlxuIik7CiAJCX0KLQkJcHJpbnRmKCJcbiIpOwogCX0KIAogCXJldHVybiByZXR2YWw7CkBAIC00MDUsNyArNDAzLDcgQEAKIAlpZih5dXY9PVlVVkVOQ09ERSkgcmV0dXJuOwogCiAJaWYoeXV2PT1ZVVZERUNPREUpCi0JCXByaW50ZigiSlBFRyAtPiBZVVYgJXMgLi4uICIsIHN1Yk5hbWVbc3Vic2FtcF0pOworCQlwcmludGYoIkpQRUcgLT4gWVVWICVzIC4uLiAiLCBzdWJOYW1lTG9uZ1tzdWJzYW1wXSk7CiAJZWxzZQogCXsKIAkJcHJpbnRmKCJKUEVHIC0+ICVzICVzICIsIHBpeEZvcm1hdFN0cltwZl0sCkBAIC00NzUsNyArNDczLDcgQEAKIAkJCXNmMSk7CiAKIAliYWlsb3V0OgotCXByaW50ZigiXG4iKTsKKwlyZXR1cm47CiB9CiAKIApAQCAtNTE1LDEwICs1MTMsMTUgQEAKIAkJCWRlY29tcFRlc3QoZGhhbmRsZSwgZHN0QnVmLCBzaXplLCB3LCBoLCBwZiwgYmFzZW5hbWUsIHN1YnNhbXAsCiAJCQkJZmxhZ3MpOwogCQkJaWYocGY+PVRKUEZfUkdCWCAmJiBwZjw9VEpQRl9YUkdCKQorCQkJeworCQkJCXByaW50ZigiXG4iKTsKIAkJCQlkZWNvbXBUZXN0KGRoYW5kbGUsIGRzdEJ1Ziwgc2l6ZSwgdywgaCwgcGYrKFRKUEZfUkdCQS1USlBGX1JHQlgpLAogCQkJCQliYXNlbmFtZSwgc3Vic2FtcCwgZmxhZ3MpOworCQkJfQorCQkJcHJpbnRmKCJcbiIpOwogCQl9CiAJfQorCXByaW50ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuIik7CiAKIAliYWlsb3V0OgogCWlmKGNoYW5kbGUpIHRqRGVzdHJveShjaGFuZGxlKTsKQEAgLTYxMCw3ICs2MTMsNyBAQAogCiAJYmFpbG91dDoKIAlpZihzcmNCdWYpIGZyZWUoc3JjQnVmKTsKLQlpZihkc3RCdWYpIGZyZWUoZHN0QnVmKTsKKwlpZihkc3RCdWYpIHRqRnJlZShkc3RCdWYpOwogCWlmKGhhbmRsZSkgdGpEZXN0cm95KGhhbmRsZSk7CiB9CiAKQEAgLTY0Nyw3ICs2NTAsNyBAQAogCWJ1ZlNpemVUZXN0KCk7CiAJaWYoZG95dXYpCiAJewotCQlwcmludGYoIlxuXG4iKTsKKwkJcHJpbnRmKCJcbi0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiIpOwogCQl5dXY9WVVWREVDT0RFOwogCQlkb1Rlc3QoNDgsIDQ4LCBfb25seVJHQiwgMSwgVEpTQU1QXzQ0NCwgInRlc3RfeXV2MCIpOwogCQlkb1Rlc3QoMzUsIDM5LCBfb25seVJHQiwgMSwgVEpTQU1QXzQ0NCwgInRlc3RfeXV2MSIpOwpkaWZmIC0tZ2l0IGEvdHJhbnN1cHAuYyBiL3RyYW5zdXBwLmMKaW5kZXggZWYxMzcyMS4uNzJlZjhkOCAxMDA2NDQKLS0tIGEvdHJhbnN1cHAuYworKysgYi90cmFuc3VwcC5jCkBAIC0yLDggKzIsOCBAQAogICogdHJhbnN1cHAuYwogICoKICAqIFRoaXMgZmlsZSB3YXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlOgotICogQ29weXJpZ2h0IChDKSAxOTk3LTIwMDksIFRob21hcyBHLiBMYW5lLCBHdWlkbyBWb2xsYmVkaW5nLgotICogTW9kaWZpY2F0aW9uczoKKyAqIENvcHlyaWdodCAoQykgMTk5Ny0yMDExLCBUaG9tYXMgRy4gTGFuZSwgR3VpZG8gVm9sbGJlZGluZy4KKyAqIGxpYmpwZWctdHVyYm8gTW9kaWZpY2F0aW9uczoKICAqIENvcHlyaWdodCAoQykgMjAxMCwgRC4gUi4gQ29tbWFuZGVyLgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgogICoKQEAgLTIxLDkgKzIxLDkgQEAKIAogI2luY2x1ZGUgImppbmNsdWRlLmgiCiAjaW5jbHVkZSAianBlZ2xpYi5oIgotI2luY2x1ZGUgInRyYW5zdXBwLmgiCQkvKiBNeSBvd24gZXh0ZXJuYWwgaW50ZXJmYWNlICovCisjaW5jbHVkZSAidHJhbnN1cHAuaCIgICAgICAgICAgIC8qIE15IG93biBleHRlcm5hbCBpbnRlcmZhY2UgKi8KICNpbmNsdWRlICJqcGVnY29tcC5oIgotI2luY2x1ZGUgPGN0eXBlLmg+CQkvKiB0byBkZWNsYXJlIGlzZGlnaXQoKSAqLworI2luY2x1ZGUgPGN0eXBlLmg+ICAgICAgICAgICAgICAvKiB0byBkZWNsYXJlIGlzZGlnaXQoKSAqLwogCiAKICNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDcwCkBAIC04OSw5ICs4OSw5IEBACiAKIExPQ0FMKHZvaWQpCiBkb19jcm9wIChqX2RlY29tcHJlc3NfcHRyIHNyY2luZm8sIGpfY29tcHJlc3NfcHRyIGRzdGluZm8sCi0JIEpESU1FTlNJT04geF9jcm9wX29mZnNldCwgSkRJTUVOU0lPTiB5X2Nyb3Bfb2Zmc2V0LAotCSBqdmlydF9iYXJyYXlfcHRyICpzcmNfY29lZl9hcnJheXMsCi0JIGp2aXJ0X2JhcnJheV9wdHIgKmRzdF9jb2VmX2FycmF5cykKKyAgICAgICAgIEpESU1FTlNJT04geF9jcm9wX29mZnNldCwgSkRJTUVOU0lPTiB5X2Nyb3Bfb2Zmc2V0LAorICAgICAgICAganZpcnRfYmFycmF5X3B0ciAqc3JjX2NvZWZfYXJyYXlzLAorICAgICAgICAganZpcnRfYmFycmF5X3B0ciAqZHN0X2NvZWZfYXJyYXlzKQogLyogQ3JvcC4gIFRoaXMgaXMgb25seSB1c2VkIHdoZW4gbm8gcm90YXRlL2ZsaXAgaXMgcmVxdWVzdGVkIHdpdGggdGhlIGNyb3AuICovCiB7CiAgIEpESU1FTlNJT04gZHN0X2Jsa195LCB4X2Nyb3BfYmxvY2tzLCB5X2Nyb3BfYmxvY2tzOwpAQCAtMTA3LDE4ICsxMDcsMTggQEAKICAgICB4X2Nyb3BfYmxvY2tzID0geF9jcm9wX29mZnNldCAqIGNvbXBwdHItPmhfc2FtcF9mYWN0b3I7CiAgICAgeV9jcm9wX2Jsb2NrcyA9IHlfY3JvcF9vZmZzZXQgKiBjb21wcHRyLT52X3NhbXBfZmFjdG9yOwogICAgIGZvciAoZHN0X2Jsa195ID0gMDsgZHN0X2Jsa195IDwgY29tcHB0ci0+aGVpZ2h0X2luX2Jsb2NrczsKLQkgZHN0X2Jsa195ICs9IGNvbXBwdHItPnZfc2FtcF9mYWN0b3IpIHsKKyAgICAgICAgIGRzdF9ibGtfeSArPSBjb21wcHRyLT52X3NhbXBfZmFjdG9yKSB7CiAgICAgICBkc3RfYnVmZmVyID0gKCpzcmNpbmZvLT5tZW0tPmFjY2Vzc192aXJ0X2JhcnJheSkKLQkoKGpfY29tbW9uX3B0cikgc3JjaW5mbywgZHN0X2NvZWZfYXJyYXlzW2NpXSwgZHN0X2Jsa195LAotCSAoSkRJTUVOU0lPTikgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciwgVFJVRSk7CisgICAgICAgICgoal9jb21tb25fcHRyKSBzcmNpbmZvLCBkc3RfY29lZl9hcnJheXNbY2ldLCBkc3RfYmxrX3ksCisgICAgICAgICAoSkRJTUVOU0lPTikgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciwgVFJVRSk7CiAgICAgICBzcmNfYnVmZmVyID0gKCpzcmNpbmZvLT5tZW0tPmFjY2Vzc192aXJ0X2JhcnJheSkKLQkoKGpfY29tbW9uX3B0cikgc3JjaW5mbywgc3JjX2NvZWZfYXJyYXlzW2NpXSwKLQkgZHN0X2Jsa195ICsgeV9jcm9wX2Jsb2NrcywKLQkgKEpESU1FTlNJT04pIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IsIEZBTFNFKTsKKyAgICAgICAgKChqX2NvbW1vbl9wdHIpIHNyY2luZm8sIHNyY19jb2VmX2FycmF5c1tjaV0sCisgICAgICAgICBkc3RfYmxrX3kgKyB5X2Nyb3BfYmxvY2tzLAorICAgICAgICAgKEpESU1FTlNJT04pIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IsIEZBTFNFKTsKICAgICAgIGZvciAob2Zmc2V0X3kgPSAwOyBvZmZzZXRfeSA8IGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7IG9mZnNldF95KyspIHsKLQlqY29weV9ibG9ja19yb3coc3JjX2J1ZmZlcltvZmZzZXRfeV0gKyB4X2Nyb3BfYmxvY2tzLAotCQkJZHN0X2J1ZmZlcltvZmZzZXRfeV0sCi0JCQljb21wcHRyLT53aWR0aF9pbl9ibG9ja3MpOworICAgICAgICBqY29weV9ibG9ja19yb3coc3JjX2J1ZmZlcltvZmZzZXRfeV0gKyB4X2Nyb3BfYmxvY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgZHN0X2J1ZmZlcltvZmZzZXRfeV0sCisgICAgICAgICAgICAgICAgICAgICAgICBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MpOwogICAgICAgfQogICAgIH0KICAgfQpAQCAtMTI3LDggKzEyNyw4IEBACiAKIExPQ0FMKHZvaWQpCiBkb19mbGlwX2hfbm9fY3JvcCAoal9kZWNvbXByZXNzX3B0ciBzcmNpbmZvLCBqX2NvbXByZXNzX3B0ciBkc3RpbmZvLAotCQkgICBKRElNRU5TSU9OIHhfY3JvcF9vZmZzZXQsCi0JCSAgIGp2aXJ0X2JhcnJheV9wdHIgKnNyY19jb2VmX2FycmF5cykKKyAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIHhfY3JvcF9vZmZzZXQsCisgICAgICAgICAgICAgICAgICAganZpcnRfYmFycmF5X3B0ciAqc3JjX2NvZWZfYXJyYXlzKQogLyogSG9yaXpvbnRhbCBmbGlwOyBkb25lIGluLXBsYWNlLCBzbyBubyBzZXBhcmF0ZSBkZXN0IGFycmF5IGlzIHJlcXVpcmVkLgogICogTkI6IHRoaXMgb25seSB3b3JrcyB3aGVuIHlfY3JvcF9vZmZzZXQgaXMgemVyby4KICAqLwpAQCAtMTUzLDM5ICsxNTMsMzkgQEAKICAgICBjb21wX3dpZHRoID0gTUNVX2NvbHMgKiBjb21wcHRyLT5oX3NhbXBfZmFjdG9yOwogICAgIHhfY3JvcF9ibG9ja3MgPSB4X2Nyb3Bfb2Zmc2V0ICogY29tcHB0ci0+aF9zYW1wX2ZhY3RvcjsKICAgICBmb3IgKGJsa195ID0gMDsgYmxrX3kgPCBjb21wcHRyLT5oZWlnaHRfaW5fYmxvY2tzOwotCSBibGtfeSArPSBjb21wcHRyLT52X3NhbXBfZmFjdG9yKSB7CisgICAgICAgICBibGtfeSArPSBjb21wcHRyLT52X3NhbXBfZmFjdG9yKSB7CiAgICAgICBidWZmZXIgPSAoKnNyY2luZm8tPm1lbS0+YWNjZXNzX3ZpcnRfYmFycmF5KQotCSgoal9jb21tb25fcHRyKSBzcmNpbmZvLCBzcmNfY29lZl9hcnJheXNbY2ldLCBibGtfeSwKLQkgKEpESU1FTlNJT04pIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IsIFRSVUUpOworICAgICAgICAoKGpfY29tbW9uX3B0cikgc3JjaW5mbywgc3JjX2NvZWZfYXJyYXlzW2NpXSwgYmxrX3ksCisgICAgICAgICAoSkRJTUVOU0lPTikgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciwgVFJVRSk7CiAgICAgICBmb3IgKG9mZnNldF95ID0gMDsgb2Zmc2V0X3kgPCBjb21wcHRyLT52X3NhbXBfZmFjdG9yOyBvZmZzZXRfeSsrKSB7Ci0JLyogRG8gdGhlIG1pcnJvcmluZyAqLwotCWZvciAoYmxrX3ggPSAwOyBibGtfeCAqIDIgPCBjb21wX3dpZHRoOyBibGtfeCsrKSB7Ci0JICBwdHIxID0gYnVmZmVyW29mZnNldF95XVtibGtfeF07Ci0JICBwdHIyID0gYnVmZmVyW29mZnNldF95XVtjb21wX3dpZHRoIC0gYmxrX3ggLSAxXTsKLQkgIC8qIHRoaXMgdW5yb2xsZWQgbG9vcCBkb2Vzbid0IG5lZWQgdG8ga25vdyB3aGljaCByb3cgaXQncyBvbi4uLiAqLwotCSAgZm9yIChrID0gMDsgayA8IERDVFNJWkUyOyBrICs9IDIpIHsKLQkgICAgdGVtcDEgPSAqcHRyMTsJLyogc3dhcCBldmVuIGNvbHVtbiAqLwotCSAgICB0ZW1wMiA9ICpwdHIyOwotCSAgICAqcHRyMSsrID0gdGVtcDI7Ci0JICAgICpwdHIyKysgPSB0ZW1wMTsKLQkgICAgdGVtcDEgPSAqcHRyMTsJLyogc3dhcCBvZGQgY29sdW1uIHdpdGggc2lnbiBjaGFuZ2UgKi8KLQkgICAgdGVtcDIgPSAqcHRyMjsKLQkgICAgKnB0cjErKyA9IC10ZW1wMjsKLQkgICAgKnB0cjIrKyA9IC10ZW1wMTsKLQkgIH0KLQl9Ci0JaWYgKHhfY3JvcF9ibG9ja3MgPiAwKSB7Ci0JICAvKiBOb3cgbGVmdC1qdXN0aWZ5IHRoZSBwb3J0aW9uIG9mIHRoZSBkYXRhIHRvIGJlIGtlcHQuCi0JICAgKiBXZSBjYW4ndCB1c2UgYSBzaW5nbGUgamNvcHlfYmxvY2tfcm93KCkgY2FsbCBiZWNhdXNlIHRoYXQgcm91dGluZQotCSAgICogZGVwZW5kcyBvbiBtZW1jcHkoKSwgd2hvc2UgYmVoYXZpb3IgaXMgdW5zcGVjaWZpZWQgZm9yIG92ZXJsYXBwaW5nCi0JICAgKiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZWFzLiAgU2lnaC4KLQkgICAqLwotCSAgZm9yIChibGtfeCA9IDA7IGJsa194IDwgY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzOyBibGtfeCsrKSB7Ci0JICAgIGpjb3B5X2Jsb2NrX3JvdyhidWZmZXJbb2Zmc2V0X3ldICsgYmxrX3ggKyB4X2Nyb3BfYmxvY2tzLAotCQkJICAgIGJ1ZmZlcltvZmZzZXRfeV0gKyBibGtfeCwKLQkJCSAgICAoSkRJTUVOU0lPTikgMSk7Ci0JICB9Ci0JfQorICAgICAgICAvKiBEbyB0aGUgbWlycm9yaW5nICovCisgICAgICAgIGZvciAoYmxrX3ggPSAwOyBibGtfeCAqIDIgPCBjb21wX3dpZHRoOyBibGtfeCsrKSB7CisgICAgICAgICAgcHRyMSA9IGJ1ZmZlcltvZmZzZXRfeV1bYmxrX3hdOworICAgICAgICAgIHB0cjIgPSBidWZmZXJbb2Zmc2V0X3ldW2NvbXBfd2lkdGggLSBibGtfeCAtIDFdOworICAgICAgICAgIC8qIHRoaXMgdW5yb2xsZWQgbG9vcCBkb2Vzbid0IG5lZWQgdG8ga25vdyB3aGljaCByb3cgaXQncyBvbi4uLiAqLworICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBEQ1RTSVpFMjsgayArPSAyKSB7CisgICAgICAgICAgICB0ZW1wMSA9ICpwdHIxOyAgICAgIC8qIHN3YXAgZXZlbiBjb2x1bW4gKi8KKyAgICAgICAgICAgIHRlbXAyID0gKnB0cjI7CisgICAgICAgICAgICAqcHRyMSsrID0gdGVtcDI7CisgICAgICAgICAgICAqcHRyMisrID0gdGVtcDE7CisgICAgICAgICAgICB0ZW1wMSA9ICpwdHIxOyAgICAgIC8qIHN3YXAgb2RkIGNvbHVtbiB3aXRoIHNpZ24gY2hhbmdlICovCisgICAgICAgICAgICB0ZW1wMiA9ICpwdHIyOworICAgICAgICAgICAgKnB0cjErKyA9IC10ZW1wMjsKKyAgICAgICAgICAgICpwdHIyKysgPSAtdGVtcDE7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh4X2Nyb3BfYmxvY2tzID4gMCkgeworICAgICAgICAgIC8qIE5vdyBsZWZ0LWp1c3RpZnkgdGhlIHBvcnRpb24gb2YgdGhlIGRhdGEgdG8gYmUga2VwdC4KKyAgICAgICAgICAgKiBXZSBjYW4ndCB1c2UgYSBzaW5nbGUgamNvcHlfYmxvY2tfcm93KCkgY2FsbCBiZWNhdXNlIHRoYXQgcm91dGluZQorICAgICAgICAgICAqIGRlcGVuZHMgb24gbWVtY3B5KCksIHdob3NlIGJlaGF2aW9yIGlzIHVuc3BlY2lmaWVkIGZvciBvdmVybGFwcGluZworICAgICAgICAgICAqIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJlYXMuICBTaWdoLgorICAgICAgICAgICAqLworICAgICAgICAgIGZvciAoYmxrX3ggPSAwOyBibGtfeCA8IGNvbXBwdHItPndpZHRoX2luX2Jsb2NrczsgYmxrX3grKykgeworICAgICAgICAgICAgamNvcHlfYmxvY2tfcm93KGJ1ZmZlcltvZmZzZXRfeV0gKyBibGtfeCArIHhfY3JvcF9ibG9ja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyW29mZnNldF95XSArIGJsa194LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChKRElNRU5TSU9OKSAxKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgIH0KICAgICB9CiAgIH0KQEAgLTE5NCw5ICsxOTQsOSBAQAogCiBMT0NBTCh2b2lkKQogZG9fZmxpcF9oIChqX2RlY29tcHJlc3NfcHRyIHNyY2luZm8sIGpfY29tcHJlc3NfcHRyIGRzdGluZm8sCi0JICAgSkRJTUVOU0lPTiB4X2Nyb3Bfb2Zmc2V0LCBKRElNRU5TSU9OIHlfY3JvcF9vZmZzZXQsCi0JICAganZpcnRfYmFycmF5X3B0ciAqc3JjX2NvZWZfYXJyYXlzLAotCSAgIGp2aXJ0X2JhcnJheV9wdHIgKmRzdF9jb2VmX2FycmF5cykKKyAgICAgICAgICAgSkRJTUVOU0lPTiB4X2Nyb3Bfb2Zmc2V0LCBKRElNRU5TSU9OIHlfY3JvcF9vZmZzZXQsCisgICAgICAgICAgIGp2aXJ0X2JhcnJheV9wdHIgKnNyY19jb2VmX2FycmF5cywKKyAgICAgICAgICAganZpcnRfYmFycmF5X3B0ciAqZHN0X2NvZWZfYXJyYXlzKQogLyogSG9yaXpvbnRhbCBmbGlwIGluIGdlbmVyYWwgY3JvcHBpbmcgY2FzZSAqLwogewogICBKRElNRU5TSU9OIE1DVV9jb2xzLCBjb21wX3dpZHRoLCBkc3RfYmxrX3gsIGRzdF9ibGtfeTsKQEAgLTIyMCwzNCArMjIwLDM0IEBACiAgICAgeF9jcm9wX2Jsb2NrcyA9IHhfY3JvcF9vZmZzZXQgKiBjb21wcHRyLT5oX3NhbXBfZmFjdG9yOwogICAgIHlfY3JvcF9ibG9ja3MgPSB5X2Nyb3Bfb2Zmc2V0ICogY29tcHB0ci0+dl9zYW1wX2ZhY3RvcjsKICAgICBmb3IgKGRzdF9ibGtfeSA9IDA7IGRzdF9ibGtfeSA8IGNvbXBwdHItPmhlaWdodF9pbl9ibG9ja3M7Ci0JIGRzdF9ibGtfeSArPSBjb21wcHRyLT52X3NhbXBfZmFjdG9yKSB7CisgICAgICAgICBkc3RfYmxrX3kgKz0gY29tcHB0ci0+dl9zYW1wX2ZhY3RvcikgewogICAgICAgZHN0X2J1ZmZlciA9ICgqc3JjaW5mby0+bWVtLT5hY2Nlc3NfdmlydF9iYXJyYXkpCi0JKChqX2NvbW1vbl9wdHIpIHNyY2luZm8sIGRzdF9jb2VmX2FycmF5c1tjaV0sIGRzdF9ibGtfeSwKLQkgKEpESU1FTlNJT04pIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IsIFRSVUUpOworICAgICAgICAoKGpfY29tbW9uX3B0cikgc3JjaW5mbywgZHN0X2NvZWZfYXJyYXlzW2NpXSwgZHN0X2Jsa195LAorICAgICAgICAgKEpESU1FTlNJT04pIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IsIFRSVUUpOwogICAgICAgc3JjX2J1ZmZlciA9ICgqc3JjaW5mby0+bWVtLT5hY2Nlc3NfdmlydF9iYXJyYXkpCi0JKChqX2NvbW1vbl9wdHIpIHNyY2luZm8sIHNyY19jb2VmX2FycmF5c1tjaV0sCi0JIGRzdF9ibGtfeSArIHlfY3JvcF9ibG9ja3MsCi0JIChKRElNRU5TSU9OKSBjb21wcHRyLT52X3NhbXBfZmFjdG9yLCBGQUxTRSk7CisgICAgICAgICgoal9jb21tb25fcHRyKSBzcmNpbmZvLCBzcmNfY29lZl9hcnJheXNbY2ldLAorICAgICAgICAgZHN0X2Jsa195ICsgeV9jcm9wX2Jsb2NrcywKKyAgICAgICAgIChKRElNRU5TSU9OKSBjb21wcHRyLT52X3NhbXBfZmFjdG9yLCBGQUxTRSk7CiAgICAgICBmb3IgKG9mZnNldF95ID0gMDsgb2Zmc2V0X3kgPCBjb21wcHRyLT52X3NhbXBfZmFjdG9yOyBvZmZzZXRfeSsrKSB7Ci0JZHN0X3Jvd19wdHIgPSBkc3RfYnVmZmVyW29mZnNldF95XTsKLQlzcmNfcm93X3B0ciA9IHNyY19idWZmZXJbb2Zmc2V0X3ldOwotCWZvciAoZHN0X2Jsa194ID0gMDsgZHN0X2Jsa194IDwgY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzOyBkc3RfYmxrX3grKykgewotCSAgaWYgKHhfY3JvcF9ibG9ja3MgKyBkc3RfYmxrX3ggPCBjb21wX3dpZHRoKSB7Ci0JICAgIC8qIERvIHRoZSBtaXJyb3JhYmxlIGJsb2NrcyAqLwotCSAgICBkc3RfcHRyID0gZHN0X3Jvd19wdHJbZHN0X2Jsa194XTsKLQkgICAgc3JjX3B0ciA9IHNyY19yb3dfcHRyW2NvbXBfd2lkdGggLSB4X2Nyb3BfYmxvY2tzIC0gZHN0X2Jsa194IC0gMV07Ci0JICAgIC8qIHRoaXMgdW5yb2xsZWQgbG9vcCBkb2Vzbid0IG5lZWQgdG8ga25vdyB3aGljaCByb3cgaXQncyBvbi4uLiAqLwotCSAgICBmb3IgKGsgPSAwOyBrIDwgRENUU0laRTI7IGsgKz0gMikgewotCSAgICAgICpkc3RfcHRyKysgPSAqc3JjX3B0cisrOwkgLyogY29weSBldmVuIGNvbHVtbiAqLwotCSAgICAgICpkc3RfcHRyKysgPSAtICpzcmNfcHRyKys7IC8qIGNvcHkgb2RkIGNvbHVtbiB3aXRoIHNpZ24gY2hhbmdlICovCi0JICAgIH0KLQkgIH0gZWxzZSB7Ci0JICAgIC8qIENvcHkgbGFzdCBwYXJ0aWFsIGJsb2NrKHMpIHZlcmJhdGltICovCi0JICAgIGpjb3B5X2Jsb2NrX3JvdyhzcmNfcm93X3B0ciArIGRzdF9ibGtfeCArIHhfY3JvcF9ibG9ja3MsCi0JCQkgICAgZHN0X3Jvd19wdHIgKyBkc3RfYmxrX3gsCi0JCQkgICAgKEpESU1FTlNJT04pIDEpOwotCSAgfQotCX0KKyAgICAgICAgZHN0X3Jvd19wdHIgPSBkc3RfYnVmZmVyW29mZnNldF95XTsKKyAgICAgICAgc3JjX3Jvd19wdHIgPSBzcmNfYnVmZmVyW29mZnNldF95XTsKKyAgICAgICAgZm9yIChkc3RfYmxrX3ggPSAwOyBkc3RfYmxrX3ggPCBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3M7IGRzdF9ibGtfeCsrKSB7CisgICAgICAgICAgaWYgKHhfY3JvcF9ibG9ja3MgKyBkc3RfYmxrX3ggPCBjb21wX3dpZHRoKSB7CisgICAgICAgICAgICAvKiBEbyB0aGUgbWlycm9yYWJsZSBibG9ja3MgKi8KKyAgICAgICAgICAgIGRzdF9wdHIgPSBkc3Rfcm93X3B0cltkc3RfYmxrX3hdOworICAgICAgICAgICAgc3JjX3B0ciA9IHNyY19yb3dfcHRyW2NvbXBfd2lkdGggLSB4X2Nyb3BfYmxvY2tzIC0gZHN0X2Jsa194IC0gMV07CisgICAgICAgICAgICAvKiB0aGlzIHVucm9sbGVkIGxvb3AgZG9lc24ndCBuZWVkIHRvIGtub3cgd2hpY2ggcm93IGl0J3Mgb24uLi4gKi8KKyAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBEQ1RTSVpFMjsgayArPSAyKSB7CisgICAgICAgICAgICAgICpkc3RfcHRyKysgPSAqc3JjX3B0cisrOyAgIC8qIGNvcHkgZXZlbiBjb2x1bW4gKi8KKyAgICAgICAgICAgICAgKmRzdF9wdHIrKyA9IC0gKnNyY19wdHIrKzsgLyogY29weSBvZGQgY29sdW1uIHdpdGggc2lnbiBjaGFuZ2UgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogQ29weSBsYXN0IHBhcnRpYWwgYmxvY2socykgdmVyYmF0aW0gKi8KKyAgICAgICAgICAgIGpjb3B5X2Jsb2NrX3JvdyhzcmNfcm93X3B0ciArIGRzdF9ibGtfeCArIHhfY3JvcF9ibG9ja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0X3Jvd19wdHIgKyBkc3RfYmxrX3gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEpESU1FTlNJT04pIDEpOworICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgfQogICAgIH0KICAgfQpAQCAtMjU2LDkgKzI1Niw5IEBACiAKIExPQ0FMKHZvaWQpCiBkb19mbGlwX3YgKGpfZGVjb21wcmVzc19wdHIgc3JjaW5mbywgal9jb21wcmVzc19wdHIgZHN0aW5mbywKLQkgICBKRElNRU5TSU9OIHhfY3JvcF9vZmZzZXQsIEpESU1FTlNJT04geV9jcm9wX29mZnNldCwKLQkgICBqdmlydF9iYXJyYXlfcHRyICpzcmNfY29lZl9hcnJheXMsCi0JICAganZpcnRfYmFycmF5X3B0ciAqZHN0X2NvZWZfYXJyYXlzKQorICAgICAgICAgICBKRElNRU5TSU9OIHhfY3JvcF9vZmZzZXQsIEpESU1FTlNJT04geV9jcm9wX29mZnNldCwKKyAgICAgICAgICAganZpcnRfYmFycmF5X3B0ciAqc3JjX2NvZWZfYXJyYXlzLAorICAgICAgICAgICBqdmlydF9iYXJyYXlfcHRyICpkc3RfY29lZl9hcnJheXMpCiAvKiBWZXJ0aWNhbCBmbGlwICovCiB7CiAgIEpESU1FTlNJT04gTUNVX3Jvd3MsIGNvbXBfaGVpZ2h0LCBkc3RfYmxrX3gsIGRzdF9ibGtfeTsKQEAgLTI4NSw0OSArMjg1LDQ5IEBACiAgICAgeF9jcm9wX2Jsb2NrcyA9IHhfY3JvcF9vZmZzZXQgKiBjb21wcHRyLT5oX3NhbXBfZmFjdG9yOwogICAgIHlfY3JvcF9ibG9ja3MgPSB5X2Nyb3Bfb2Zmc2V0ICogY29tcHB0ci0+dl9zYW1wX2ZhY3RvcjsKICAgICBmb3IgKGRzdF9ibGtfeSA9IDA7IGRzdF9ibGtfeSA8IGNvbXBwdHItPmhlaWdodF9pbl9ibG9ja3M7Ci0JIGRzdF9ibGtfeSArPSBjb21wcHRyLT52X3NhbXBfZmFjdG9yKSB7CisgICAgICAgICBkc3RfYmxrX3kgKz0gY29tcHB0ci0+dl9zYW1wX2ZhY3RvcikgewogICAgICAgZHN0X2J1ZmZlciA9ICgqc3JjaW5mby0+bWVtLT5hY2Nlc3NfdmlydF9iYXJyYXkpCi0JKChqX2NvbW1vbl9wdHIpIHNyY2luZm8sIGRzdF9jb2VmX2FycmF5c1tjaV0sIGRzdF9ibGtfeSwKLQkgKEpESU1FTlNJT04pIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IsIFRSVUUpOworICAgICAgICAoKGpfY29tbW9uX3B0cikgc3JjaW5mbywgZHN0X2NvZWZfYXJyYXlzW2NpXSwgZHN0X2Jsa195LAorICAgICAgICAgKEpESU1FTlNJT04pIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IsIFRSVUUpOwogICAgICAgaWYgKHlfY3JvcF9ibG9ja3MgKyBkc3RfYmxrX3kgPCBjb21wX2hlaWdodCkgewotCS8qIFJvdyBpcyB3aXRoaW4gdGhlIG1pcnJvcmFibGUgYXJlYS4gKi8KLQlzcmNfYnVmZmVyID0gKCpzcmNpbmZvLT5tZW0tPmFjY2Vzc192aXJ0X2JhcnJheSkKLQkgICgoal9jb21tb25fcHRyKSBzcmNpbmZvLCBzcmNfY29lZl9hcnJheXNbY2ldLAotCSAgIGNvbXBfaGVpZ2h0IC0geV9jcm9wX2Jsb2NrcyAtIGRzdF9ibGtfeSAtCi0JICAgKEpESU1FTlNJT04pIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IsCi0JICAgKEpESU1FTlNJT04pIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IsIEZBTFNFKTsKKyAgICAgICAgLyogUm93IGlzIHdpdGhpbiB0aGUgbWlycm9yYWJsZSBhcmVhLiAqLworICAgICAgICBzcmNfYnVmZmVyID0gKCpzcmNpbmZvLT5tZW0tPmFjY2Vzc192aXJ0X2JhcnJheSkKKyAgICAgICAgICAoKGpfY29tbW9uX3B0cikgc3JjaW5mbywgc3JjX2NvZWZfYXJyYXlzW2NpXSwKKyAgICAgICAgICAgY29tcF9oZWlnaHQgLSB5X2Nyb3BfYmxvY2tzIC0gZHN0X2Jsa195IC0KKyAgICAgICAgICAgKEpESU1FTlNJT04pIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IsCisgICAgICAgICAgIChKRElNRU5TSU9OKSBjb21wcHRyLT52X3NhbXBfZmFjdG9yLCBGQUxTRSk7CiAgICAgICB9IGVsc2UgewotCS8qIEJvdHRvbS1lZGdlIGJsb2NrcyB3aWxsIGJlIGNvcGllZCB2ZXJiYXRpbS4gKi8KLQlzcmNfYnVmZmVyID0gKCpzcmNpbmZvLT5tZW0tPmFjY2Vzc192aXJ0X2JhcnJheSkKLQkgICgoal9jb21tb25fcHRyKSBzcmNpbmZvLCBzcmNfY29lZl9hcnJheXNbY2ldLAotCSAgIGRzdF9ibGtfeSArIHlfY3JvcF9ibG9ja3MsCi0JICAgKEpESU1FTlNJT04pIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IsIEZBTFNFKTsKKyAgICAgICAgLyogQm90dG9tLWVkZ2UgYmxvY2tzIHdpbGwgYmUgY29waWVkIHZlcmJhdGltLiAqLworICAgICAgICBzcmNfYnVmZmVyID0gKCpzcmNpbmZvLT5tZW0tPmFjY2Vzc192aXJ0X2JhcnJheSkKKyAgICAgICAgICAoKGpfY29tbW9uX3B0cikgc3JjaW5mbywgc3JjX2NvZWZfYXJyYXlzW2NpXSwKKyAgICAgICAgICAgZHN0X2Jsa195ICsgeV9jcm9wX2Jsb2NrcywKKyAgICAgICAgICAgKEpESU1FTlNJT04pIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IsIEZBTFNFKTsKICAgICAgIH0KICAgICAgIGZvciAob2Zmc2V0X3kgPSAwOyBvZmZzZXRfeSA8IGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7IG9mZnNldF95KyspIHsKLQlpZiAoeV9jcm9wX2Jsb2NrcyArIGRzdF9ibGtfeSA8IGNvbXBfaGVpZ2h0KSB7Ci0JICAvKiBSb3cgaXMgd2l0aGluIHRoZSBtaXJyb3JhYmxlIGFyZWEuICovCi0JICBkc3Rfcm93X3B0ciA9IGRzdF9idWZmZXJbb2Zmc2V0X3ldOwotCSAgc3JjX3Jvd19wdHIgPSBzcmNfYnVmZmVyW2NvbXBwdHItPnZfc2FtcF9mYWN0b3IgLSBvZmZzZXRfeSAtIDFdOwotCSAgc3JjX3Jvd19wdHIgKz0geF9jcm9wX2Jsb2NrczsKLQkgIGZvciAoZHN0X2Jsa194ID0gMDsgZHN0X2Jsa194IDwgY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzOwotCSAgICAgICBkc3RfYmxrX3grKykgewotCSAgICBkc3RfcHRyID0gZHN0X3Jvd19wdHJbZHN0X2Jsa194XTsKLQkgICAgc3JjX3B0ciA9IHNyY19yb3dfcHRyW2RzdF9ibGtfeF07Ci0JICAgIGZvciAoaSA9IDA7IGkgPCBEQ1RTSVpFOyBpICs9IDIpIHsKLQkgICAgICAvKiBjb3B5IGV2ZW4gcm93ICovCi0JICAgICAgZm9yIChqID0gMDsgaiA8IERDVFNJWkU7IGorKykKLQkJKmRzdF9wdHIrKyA9ICpzcmNfcHRyKys7Ci0JICAgICAgLyogY29weSBvZGQgcm93IHdpdGggc2lnbiBjaGFuZ2UgKi8KLQkgICAgICBmb3IgKGogPSAwOyBqIDwgRENUU0laRTsgaisrKQotCQkqZHN0X3B0cisrID0gLSAqc3JjX3B0cisrOwotCSAgICB9Ci0JICB9Ci0JfSBlbHNlIHsKLQkgIC8qIEp1c3QgY29weSByb3cgdmVyYmF0aW0uICovCi0JICBqY29weV9ibG9ja19yb3coc3JjX2J1ZmZlcltvZmZzZXRfeV0gKyB4X2Nyb3BfYmxvY2tzLAotCQkJICBkc3RfYnVmZmVyW29mZnNldF95XSwKLQkJCSAgY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzKTsKLQl9CisgICAgICAgIGlmICh5X2Nyb3BfYmxvY2tzICsgZHN0X2Jsa195IDwgY29tcF9oZWlnaHQpIHsKKyAgICAgICAgICAvKiBSb3cgaXMgd2l0aGluIHRoZSBtaXJyb3JhYmxlIGFyZWEuICovCisgICAgICAgICAgZHN0X3Jvd19wdHIgPSBkc3RfYnVmZmVyW29mZnNldF95XTsKKyAgICAgICAgICBzcmNfcm93X3B0ciA9IHNyY19idWZmZXJbY29tcHB0ci0+dl9zYW1wX2ZhY3RvciAtIG9mZnNldF95IC0gMV07CisgICAgICAgICAgc3JjX3Jvd19wdHIgKz0geF9jcm9wX2Jsb2NrczsKKyAgICAgICAgICBmb3IgKGRzdF9ibGtfeCA9IDA7IGRzdF9ibGtfeCA8IGNvbXBwdHItPndpZHRoX2luX2Jsb2NrczsKKyAgICAgICAgICAgICAgIGRzdF9ibGtfeCsrKSB7CisgICAgICAgICAgICBkc3RfcHRyID0gZHN0X3Jvd19wdHJbZHN0X2Jsa194XTsKKyAgICAgICAgICAgIHNyY19wdHIgPSBzcmNfcm93X3B0cltkc3RfYmxrX3hdOworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IERDVFNJWkU7IGkgKz0gMikgeworICAgICAgICAgICAgICAvKiBjb3B5IGV2ZW4gcm93ICovCisgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBEQ1RTSVpFOyBqKyspCisgICAgICAgICAgICAgICAgKmRzdF9wdHIrKyA9ICpzcmNfcHRyKys7CisgICAgICAgICAgICAgIC8qIGNvcHkgb2RkIHJvdyB3aXRoIHNpZ24gY2hhbmdlICovCisgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBEQ1RTSVpFOyBqKyspCisgICAgICAgICAgICAgICAgKmRzdF9wdHIrKyA9IC0gKnNyY19wdHIrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgLyogSnVzdCBjb3B5IHJvdyB2ZXJiYXRpbS4gKi8KKyAgICAgICAgICBqY29weV9ibG9ja19yb3coc3JjX2J1ZmZlcltvZmZzZXRfeV0gKyB4X2Nyb3BfYmxvY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RfYnVmZmVyW29mZnNldF95XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzKTsKKyAgICAgICAgfQogICAgICAgfQogICAgIH0KICAgfQpAQCAtMzM2LDkgKzMzNiw5IEBACiAKIExPQ0FMKHZvaWQpCiBkb190cmFuc3Bvc2UgKGpfZGVjb21wcmVzc19wdHIgc3JjaW5mbywgal9jb21wcmVzc19wdHIgZHN0aW5mbywKLQkgICAgICBKRElNRU5TSU9OIHhfY3JvcF9vZmZzZXQsIEpESU1FTlNJT04geV9jcm9wX29mZnNldCwKLQkgICAgICBqdmlydF9iYXJyYXlfcHRyICpzcmNfY29lZl9hcnJheXMsCi0JICAgICAganZpcnRfYmFycmF5X3B0ciAqZHN0X2NvZWZfYXJyYXlzKQorICAgICAgICAgICAgICBKRElNRU5TSU9OIHhfY3JvcF9vZmZzZXQsIEpESU1FTlNJT04geV9jcm9wX29mZnNldCwKKyAgICAgICAgICAgICAganZpcnRfYmFycmF5X3B0ciAqc3JjX2NvZWZfYXJyYXlzLAorICAgICAgICAgICAgICBqdmlydF9iYXJyYXlfcHRyICpkc3RfY29lZl9hcnJheXMpCiAvKiBUcmFuc3Bvc2Ugc291cmNlIGludG8gZGVzdGluYXRpb24gKi8KIHsKICAgSkRJTUVOU0lPTiBkc3RfYmxrX3gsIGRzdF9ibGtfeSwgeF9jcm9wX2Jsb2NrcywgeV9jcm9wX2Jsb2NrczsKQEAgLTM1NywyNSArMzU3LDI1IEBACiAgICAgeF9jcm9wX2Jsb2NrcyA9IHhfY3JvcF9vZmZzZXQgKiBjb21wcHRyLT5oX3NhbXBfZmFjdG9yOwogICAgIHlfY3JvcF9ibG9ja3MgPSB5X2Nyb3Bfb2Zmc2V0ICogY29tcHB0ci0+dl9zYW1wX2ZhY3RvcjsKICAgICBmb3IgKGRzdF9ibGtfeSA9IDA7IGRzdF9ibGtfeSA8IGNvbXBwdHItPmhlaWdodF9pbl9ibG9ja3M7Ci0JIGRzdF9ibGtfeSArPSBjb21wcHRyLT52X3NhbXBfZmFjdG9yKSB7CisgICAgICAgICBkc3RfYmxrX3kgKz0gY29tcHB0ci0+dl9zYW1wX2ZhY3RvcikgewogICAgICAgZHN0X2J1ZmZlciA9ICgqc3JjaW5mby0+bWVtLT5hY2Nlc3NfdmlydF9iYXJyYXkpCi0JKChqX2NvbW1vbl9wdHIpIHNyY2luZm8sIGRzdF9jb2VmX2FycmF5c1tjaV0sIGRzdF9ibGtfeSwKLQkgKEpESU1FTlNJT04pIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IsIFRSVUUpOworICAgICAgICAoKGpfY29tbW9uX3B0cikgc3JjaW5mbywgZHN0X2NvZWZfYXJyYXlzW2NpXSwgZHN0X2Jsa195LAorICAgICAgICAgKEpESU1FTlNJT04pIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IsIFRSVUUpOwogICAgICAgZm9yIChvZmZzZXRfeSA9IDA7IG9mZnNldF95IDwgY29tcHB0ci0+dl9zYW1wX2ZhY3Rvcjsgb2Zmc2V0X3krKykgewotCWZvciAoZHN0X2Jsa194ID0gMDsgZHN0X2Jsa194IDwgY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzOwotCSAgICAgZHN0X2Jsa194ICs9IGNvbXBwdHItPmhfc2FtcF9mYWN0b3IpIHsKLQkgIHNyY19idWZmZXIgPSAoKnNyY2luZm8tPm1lbS0+YWNjZXNzX3ZpcnRfYmFycmF5KQotCSAgICAoKGpfY29tbW9uX3B0cikgc3JjaW5mbywgc3JjX2NvZWZfYXJyYXlzW2NpXSwKLQkgICAgIGRzdF9ibGtfeCArIHhfY3JvcF9ibG9ja3MsCi0JICAgICAoSkRJTUVOU0lPTikgY29tcHB0ci0+aF9zYW1wX2ZhY3RvciwgRkFMU0UpOwotCSAgZm9yIChvZmZzZXRfeCA9IDA7IG9mZnNldF94IDwgY29tcHB0ci0+aF9zYW1wX2ZhY3Rvcjsgb2Zmc2V0X3grKykgewotCSAgICBkc3RfcHRyID0gZHN0X2J1ZmZlcltvZmZzZXRfeV1bZHN0X2Jsa194ICsgb2Zmc2V0X3hdOwotCSAgICBzcmNfcHRyID0gc3JjX2J1ZmZlcltvZmZzZXRfeF1bZHN0X2Jsa195ICsgb2Zmc2V0X3kgKyB5X2Nyb3BfYmxvY2tzXTsKLQkgICAgZm9yIChpID0gMDsgaSA8IERDVFNJWkU7IGkrKykKLQkgICAgICBmb3IgKGogPSAwOyBqIDwgRENUU0laRTsgaisrKQotCQlkc3RfcHRyW2oqRENUU0laRStpXSA9IHNyY19wdHJbaSpEQ1RTSVpFK2pdOwotCSAgfQotCX0KKyAgICAgICAgZm9yIChkc3RfYmxrX3ggPSAwOyBkc3RfYmxrX3ggPCBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3M7CisgICAgICAgICAgICAgZHN0X2Jsa194ICs9IGNvbXBwdHItPmhfc2FtcF9mYWN0b3IpIHsKKyAgICAgICAgICBzcmNfYnVmZmVyID0gKCpzcmNpbmZvLT5tZW0tPmFjY2Vzc192aXJ0X2JhcnJheSkKKyAgICAgICAgICAgICgoal9jb21tb25fcHRyKSBzcmNpbmZvLCBzcmNfY29lZl9hcnJheXNbY2ldLAorICAgICAgICAgICAgIGRzdF9ibGtfeCArIHhfY3JvcF9ibG9ja3MsCisgICAgICAgICAgICAgKEpESU1FTlNJT04pIGNvbXBwdHItPmhfc2FtcF9mYWN0b3IsIEZBTFNFKTsKKyAgICAgICAgICBmb3IgKG9mZnNldF94ID0gMDsgb2Zmc2V0X3ggPCBjb21wcHRyLT5oX3NhbXBfZmFjdG9yOyBvZmZzZXRfeCsrKSB7CisgICAgICAgICAgICBkc3RfcHRyID0gZHN0X2J1ZmZlcltvZmZzZXRfeV1bZHN0X2Jsa194ICsgb2Zmc2V0X3hdOworICAgICAgICAgICAgc3JjX3B0ciA9IHNyY19idWZmZXJbb2Zmc2V0X3hdW2RzdF9ibGtfeSArIG9mZnNldF95ICsgeV9jcm9wX2Jsb2Nrc107CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgRENUU0laRTsgaSsrKQorICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgRENUU0laRTsgaisrKQorICAgICAgICAgICAgICAgIGRzdF9wdHJbaipEQ1RTSVpFK2ldID0gc3JjX3B0cltpKkRDVFNJWkUral07CisgICAgICAgICAgfQorICAgICAgICB9CiAgICAgICB9CiAgICAgfQogICB9CkBAIC0zODQsOSArMzg0LDkgQEAKIAogTE9DQUwodm9pZCkKIGRvX3JvdF85MCAoal9kZWNvbXByZXNzX3B0ciBzcmNpbmZvLCBqX2NvbXByZXNzX3B0ciBkc3RpbmZvLAotCSAgIEpESU1FTlNJT04geF9jcm9wX29mZnNldCwgSkRJTUVOU0lPTiB5X2Nyb3Bfb2Zmc2V0LAotCSAgIGp2aXJ0X2JhcnJheV9wdHIgKnNyY19jb2VmX2FycmF5cywKLQkgICBqdmlydF9iYXJyYXlfcHRyICpkc3RfY29lZl9hcnJheXMpCisgICAgICAgICAgIEpESU1FTlNJT04geF9jcm9wX29mZnNldCwgSkRJTUVOU0lPTiB5X2Nyb3Bfb2Zmc2V0LAorICAgICAgICAgICBqdmlydF9iYXJyYXlfcHRyICpzcmNfY29lZl9hcnJheXMsCisgICAgICAgICAgIGp2aXJ0X2JhcnJheV9wdHIgKmRzdF9jb2VmX2FycmF5cykKIC8qIDkwIGRlZ3JlZSByb3RhdGlvbiBpcyBlcXVpdmFsZW50IHRvCiAgKiAgIDEuIFRyYW5zcG9zaW5nIHRoZSBpbWFnZTsKICAqICAgMi4gSG9yaXpvbnRhbCBtaXJyb3JpbmcuCkBAIC00MTMsNTAgKzQxMyw1MCBAQAogICAgIHhfY3JvcF9ibG9ja3MgPSB4X2Nyb3Bfb2Zmc2V0ICogY29tcHB0ci0+aF9zYW1wX2ZhY3RvcjsKICAgICB5X2Nyb3BfYmxvY2tzID0geV9jcm9wX29mZnNldCAqIGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7CiAgICAgZm9yIChkc3RfYmxrX3kgPSAwOyBkc3RfYmxrX3kgPCBjb21wcHRyLT5oZWlnaHRfaW5fYmxvY2tzOwotCSBkc3RfYmxrX3kgKz0gY29tcHB0ci0+dl9zYW1wX2ZhY3RvcikgeworICAgICAgICAgZHN0X2Jsa195ICs9IGNvbXBwdHItPnZfc2FtcF9mYWN0b3IpIHsKICAgICAgIGRzdF9idWZmZXIgPSAoKnNyY2luZm8tPm1lbS0+YWNjZXNzX3ZpcnRfYmFycmF5KQotCSgoal9jb21tb25fcHRyKSBzcmNpbmZvLCBkc3RfY29lZl9hcnJheXNbY2ldLCBkc3RfYmxrX3ksCi0JIChKRElNRU5TSU9OKSBjb21wcHRyLT52X3NhbXBfZmFjdG9yLCBUUlVFKTsKKyAgICAgICAgKChqX2NvbW1vbl9wdHIpIHNyY2luZm8sIGRzdF9jb2VmX2FycmF5c1tjaV0sIGRzdF9ibGtfeSwKKyAgICAgICAgIChKRElNRU5TSU9OKSBjb21wcHRyLT52X3NhbXBfZmFjdG9yLCBUUlVFKTsKICAgICAgIGZvciAob2Zmc2V0X3kgPSAwOyBvZmZzZXRfeSA8IGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7IG9mZnNldF95KyspIHsKLQlmb3IgKGRzdF9ibGtfeCA9IDA7IGRzdF9ibGtfeCA8IGNvbXBwdHItPndpZHRoX2luX2Jsb2NrczsKLQkgICAgIGRzdF9ibGtfeCArPSBjb21wcHRyLT5oX3NhbXBfZmFjdG9yKSB7Ci0JICBpZiAoeF9jcm9wX2Jsb2NrcyArIGRzdF9ibGtfeCA8IGNvbXBfd2lkdGgpIHsKLQkgICAgLyogQmxvY2sgaXMgd2l0aGluIHRoZSBtaXJyb3JhYmxlIGFyZWEuICovCi0JICAgIHNyY19idWZmZXIgPSAoKnNyY2luZm8tPm1lbS0+YWNjZXNzX3ZpcnRfYmFycmF5KQotCSAgICAgICgoal9jb21tb25fcHRyKSBzcmNpbmZvLCBzcmNfY29lZl9hcnJheXNbY2ldLAotCSAgICAgICBjb21wX3dpZHRoIC0geF9jcm9wX2Jsb2NrcyAtIGRzdF9ibGtfeCAtCi0JICAgICAgIChKRElNRU5TSU9OKSBjb21wcHRyLT5oX3NhbXBfZmFjdG9yLAotCSAgICAgICAoSkRJTUVOU0lPTikgY29tcHB0ci0+aF9zYW1wX2ZhY3RvciwgRkFMU0UpOwotCSAgfSBlbHNlIHsKLQkgICAgLyogRWRnZSBibG9ja3MgYXJlIHRyYW5zcG9zZWQgYnV0IG5vdCBtaXJyb3JlZC4gKi8KLQkgICAgc3JjX2J1ZmZlciA9ICgqc3JjaW5mby0+bWVtLT5hY2Nlc3NfdmlydF9iYXJyYXkpCi0JICAgICAgKChqX2NvbW1vbl9wdHIpIHNyY2luZm8sIHNyY19jb2VmX2FycmF5c1tjaV0sCi0JICAgICAgIGRzdF9ibGtfeCArIHhfY3JvcF9ibG9ja3MsCi0JICAgICAgIChKRElNRU5TSU9OKSBjb21wcHRyLT5oX3NhbXBfZmFjdG9yLCBGQUxTRSk7Ci0JICB9Ci0JICBmb3IgKG9mZnNldF94ID0gMDsgb2Zmc2V0X3ggPCBjb21wcHRyLT5oX3NhbXBfZmFjdG9yOyBvZmZzZXRfeCsrKSB7Ci0JICAgIGRzdF9wdHIgPSBkc3RfYnVmZmVyW29mZnNldF95XVtkc3RfYmxrX3ggKyBvZmZzZXRfeF07Ci0JICAgIGlmICh4X2Nyb3BfYmxvY2tzICsgZHN0X2Jsa194IDwgY29tcF93aWR0aCkgewotCSAgICAgIC8qIEJsb2NrIGlzIHdpdGhpbiB0aGUgbWlycm9yYWJsZSBhcmVhLiAqLwotCSAgICAgIHNyY19wdHIgPSBzcmNfYnVmZmVyW2NvbXBwdHItPmhfc2FtcF9mYWN0b3IgLSBvZmZzZXRfeCAtIDFdCi0JCVtkc3RfYmxrX3kgKyBvZmZzZXRfeSArIHlfY3JvcF9ibG9ja3NdOwotCSAgICAgIGZvciAoaSA9IDA7IGkgPCBEQ1RTSVpFOyBpKyspIHsKLQkJZm9yIChqID0gMDsgaiA8IERDVFNJWkU7IGorKykKLQkJICBkc3RfcHRyW2oqRENUU0laRStpXSA9IHNyY19wdHJbaSpEQ1RTSVpFK2pdOwotCQlpKys7Ci0JCWZvciAoaiA9IDA7IGogPCBEQ1RTSVpFOyBqKyspCi0JCSAgZHN0X3B0cltqKkRDVFNJWkUraV0gPSAtc3JjX3B0cltpKkRDVFNJWkUral07Ci0JICAgICAgfQotCSAgICB9IGVsc2UgewotCSAgICAgIC8qIEVkZ2UgYmxvY2tzIGFyZSB0cmFuc3Bvc2VkIGJ1dCBub3QgbWlycm9yZWQuICovCi0JICAgICAgc3JjX3B0ciA9IHNyY19idWZmZXJbb2Zmc2V0X3hdCi0JCVtkc3RfYmxrX3kgKyBvZmZzZXRfeSArIHlfY3JvcF9ibG9ja3NdOwotCSAgICAgIGZvciAoaSA9IDA7IGkgPCBEQ1RTSVpFOyBpKyspCi0JCWZvciAoaiA9IDA7IGogPCBEQ1RTSVpFOyBqKyspCi0JCSAgZHN0X3B0cltqKkRDVFNJWkUraV0gPSBzcmNfcHRyW2kqRENUU0laRStqXTsKLQkgICAgfQotCSAgfQotCX0KKyAgICAgICAgZm9yIChkc3RfYmxrX3ggPSAwOyBkc3RfYmxrX3ggPCBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3M7CisgICAgICAgICAgICAgZHN0X2Jsa194ICs9IGNvbXBwdHItPmhfc2FtcF9mYWN0b3IpIHsKKyAgICAgICAgICBpZiAoeF9jcm9wX2Jsb2NrcyArIGRzdF9ibGtfeCA8IGNvbXBfd2lkdGgpIHsKKyAgICAgICAgICAgIC8qIEJsb2NrIGlzIHdpdGhpbiB0aGUgbWlycm9yYWJsZSBhcmVhLiAqLworICAgICAgICAgICAgc3JjX2J1ZmZlciA9ICgqc3JjaW5mby0+bWVtLT5hY2Nlc3NfdmlydF9iYXJyYXkpCisgICAgICAgICAgICAgICgoal9jb21tb25fcHRyKSBzcmNpbmZvLCBzcmNfY29lZl9hcnJheXNbY2ldLAorICAgICAgICAgICAgICAgY29tcF93aWR0aCAtIHhfY3JvcF9ibG9ja3MgLSBkc3RfYmxrX3ggLQorICAgICAgICAgICAgICAgKEpESU1FTlNJT04pIGNvbXBwdHItPmhfc2FtcF9mYWN0b3IsCisgICAgICAgICAgICAgICAoSkRJTUVOU0lPTikgY29tcHB0ci0+aF9zYW1wX2ZhY3RvciwgRkFMU0UpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKiBFZGdlIGJsb2NrcyBhcmUgdHJhbnNwb3NlZCBidXQgbm90IG1pcnJvcmVkLiAqLworICAgICAgICAgICAgc3JjX2J1ZmZlciA9ICgqc3JjaW5mby0+bWVtLT5hY2Nlc3NfdmlydF9iYXJyYXkpCisgICAgICAgICAgICAgICgoal9jb21tb25fcHRyKSBzcmNpbmZvLCBzcmNfY29lZl9hcnJheXNbY2ldLAorICAgICAgICAgICAgICAgZHN0X2Jsa194ICsgeF9jcm9wX2Jsb2NrcywKKyAgICAgICAgICAgICAgIChKRElNRU5TSU9OKSBjb21wcHRyLT5oX3NhbXBfZmFjdG9yLCBGQUxTRSk7CisgICAgICAgICAgfQorICAgICAgICAgIGZvciAob2Zmc2V0X3ggPSAwOyBvZmZzZXRfeCA8IGNvbXBwdHItPmhfc2FtcF9mYWN0b3I7IG9mZnNldF94KyspIHsKKyAgICAgICAgICAgIGRzdF9wdHIgPSBkc3RfYnVmZmVyW29mZnNldF95XVtkc3RfYmxrX3ggKyBvZmZzZXRfeF07CisgICAgICAgICAgICBpZiAoeF9jcm9wX2Jsb2NrcyArIGRzdF9ibGtfeCA8IGNvbXBfd2lkdGgpIHsKKyAgICAgICAgICAgICAgLyogQmxvY2sgaXMgd2l0aGluIHRoZSBtaXJyb3JhYmxlIGFyZWEuICovCisgICAgICAgICAgICAgIHNyY19wdHIgPSBzcmNfYnVmZmVyW2NvbXBwdHItPmhfc2FtcF9mYWN0b3IgLSBvZmZzZXRfeCAtIDFdCisgICAgICAgICAgICAgICAgW2RzdF9ibGtfeSArIG9mZnNldF95ICsgeV9jcm9wX2Jsb2Nrc107CisgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBEQ1RTSVpFOyBpKyspIHsKKyAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgRENUU0laRTsgaisrKQorICAgICAgICAgICAgICAgICAgZHN0X3B0cltqKkRDVFNJWkUraV0gPSBzcmNfcHRyW2kqRENUU0laRStqXTsKKyAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IERDVFNJWkU7IGorKykKKyAgICAgICAgICAgICAgICAgIGRzdF9wdHJbaipEQ1RTSVpFK2ldID0gLXNyY19wdHJbaSpEQ1RTSVpFK2pdOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAvKiBFZGdlIGJsb2NrcyBhcmUgdHJhbnNwb3NlZCBidXQgbm90IG1pcnJvcmVkLiAqLworICAgICAgICAgICAgICBzcmNfcHRyID0gc3JjX2J1ZmZlcltvZmZzZXRfeF0KKyAgICAgICAgICAgICAgICBbZHN0X2Jsa195ICsgb2Zmc2V0X3kgKyB5X2Nyb3BfYmxvY2tzXTsKKyAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IERDVFNJWkU7IGkrKykKKyAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgRENUU0laRTsgaisrKQorICAgICAgICAgICAgICAgICAgZHN0X3B0cltqKkRDVFNJWkUraV0gPSBzcmNfcHRyW2kqRENUU0laRStqXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgIH0KICAgICB9CiAgIH0KQEAgLTQ2NSw5ICs0NjUsOSBAQAogCiBMT0NBTCh2b2lkKQogZG9fcm90XzI3MCAoal9kZWNvbXByZXNzX3B0ciBzcmNpbmZvLCBqX2NvbXByZXNzX3B0ciBkc3RpbmZvLAotCSAgICBKRElNRU5TSU9OIHhfY3JvcF9vZmZzZXQsIEpESU1FTlNJT04geV9jcm9wX29mZnNldCwKLQkgICAganZpcnRfYmFycmF5X3B0ciAqc3JjX2NvZWZfYXJyYXlzLAotCSAgICBqdmlydF9iYXJyYXlfcHRyICpkc3RfY29lZl9hcnJheXMpCisgICAgICAgICAgICBKRElNRU5TSU9OIHhfY3JvcF9vZmZzZXQsIEpESU1FTlNJT04geV9jcm9wX29mZnNldCwKKyAgICAgICAgICAgIGp2aXJ0X2JhcnJheV9wdHIgKnNyY19jb2VmX2FycmF5cywKKyAgICAgICAgICAgIGp2aXJ0X2JhcnJheV9wdHIgKmRzdF9jb2VmX2FycmF5cykKIC8qIDI3MCBkZWdyZWUgcm90YXRpb24gaXMgZXF1aXZhbGVudCB0bwogICogICAxLiBIb3Jpem9udGFsIG1pcnJvcmluZzsKICAqICAgMi4gVHJhbnNwb3NpbmcgdGhlIGltYWdlLgpAQCAtNDk0LDQwICs0OTQsNDAgQEAKICAgICB4X2Nyb3BfYmxvY2tzID0geF9jcm9wX29mZnNldCAqIGNvbXBwdHItPmhfc2FtcF9mYWN0b3I7CiAgICAgeV9jcm9wX2Jsb2NrcyA9IHlfY3JvcF9vZmZzZXQgKiBjb21wcHRyLT52X3NhbXBfZmFjdG9yOwogICAgIGZvciAoZHN0X2Jsa195ID0gMDsgZHN0X2Jsa195IDwgY29tcHB0ci0+aGVpZ2h0X2luX2Jsb2NrczsKLQkgZHN0X2Jsa195ICs9IGNvbXBwdHItPnZfc2FtcF9mYWN0b3IpIHsKKyAgICAgICAgIGRzdF9ibGtfeSArPSBjb21wcHRyLT52X3NhbXBfZmFjdG9yKSB7CiAgICAgICBkc3RfYnVmZmVyID0gKCpzcmNpbmZvLT5tZW0tPmFjY2Vzc192aXJ0X2JhcnJheSkKLQkoKGpfY29tbW9uX3B0cikgc3JjaW5mbywgZHN0X2NvZWZfYXJyYXlzW2NpXSwgZHN0X2Jsa195LAotCSAoSkRJTUVOU0lPTikgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciwgVFJVRSk7CisgICAgICAgICgoal9jb21tb25fcHRyKSBzcmNpbmZvLCBkc3RfY29lZl9hcnJheXNbY2ldLCBkc3RfYmxrX3ksCisgICAgICAgICAoSkRJTUVOU0lPTikgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciwgVFJVRSk7CiAgICAgICBmb3IgKG9mZnNldF95ID0gMDsgb2Zmc2V0X3kgPCBjb21wcHRyLT52X3NhbXBfZmFjdG9yOyBvZmZzZXRfeSsrKSB7Ci0JZm9yIChkc3RfYmxrX3ggPSAwOyBkc3RfYmxrX3ggPCBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3M7Ci0JICAgICBkc3RfYmxrX3ggKz0gY29tcHB0ci0+aF9zYW1wX2ZhY3RvcikgewotCSAgc3JjX2J1ZmZlciA9ICgqc3JjaW5mby0+bWVtLT5hY2Nlc3NfdmlydF9iYXJyYXkpCi0JICAgICgoal9jb21tb25fcHRyKSBzcmNpbmZvLCBzcmNfY29lZl9hcnJheXNbY2ldLAotCSAgICAgZHN0X2Jsa194ICsgeF9jcm9wX2Jsb2NrcywKLQkgICAgIChKRElNRU5TSU9OKSBjb21wcHRyLT5oX3NhbXBfZmFjdG9yLCBGQUxTRSk7Ci0JICBmb3IgKG9mZnNldF94ID0gMDsgb2Zmc2V0X3ggPCBjb21wcHRyLT5oX3NhbXBfZmFjdG9yOyBvZmZzZXRfeCsrKSB7Ci0JICAgIGRzdF9wdHIgPSBkc3RfYnVmZmVyW29mZnNldF95XVtkc3RfYmxrX3ggKyBvZmZzZXRfeF07Ci0JICAgIGlmICh5X2Nyb3BfYmxvY2tzICsgZHN0X2Jsa195IDwgY29tcF9oZWlnaHQpIHsKLQkgICAgICAvKiBCbG9jayBpcyB3aXRoaW4gdGhlIG1pcnJvcmFibGUgYXJlYS4gKi8KLQkgICAgICBzcmNfcHRyID0gc3JjX2J1ZmZlcltvZmZzZXRfeF0KLQkJW2NvbXBfaGVpZ2h0IC0geV9jcm9wX2Jsb2NrcyAtIGRzdF9ibGtfeSAtIG9mZnNldF95IC0gMV07Ci0JICAgICAgZm9yIChpID0gMDsgaSA8IERDVFNJWkU7IGkrKykgewotCQlmb3IgKGogPSAwOyBqIDwgRENUU0laRTsgaisrKSB7Ci0JCSAgZHN0X3B0cltqKkRDVFNJWkUraV0gPSBzcmNfcHRyW2kqRENUU0laRStqXTsKLQkJICBqKys7Ci0JCSAgZHN0X3B0cltqKkRDVFNJWkUraV0gPSAtc3JjX3B0cltpKkRDVFNJWkUral07Ci0JCX0KLQkgICAgICB9Ci0JICAgIH0gZWxzZSB7Ci0JICAgICAgLyogRWRnZSBibG9ja3MgYXJlIHRyYW5zcG9zZWQgYnV0IG5vdCBtaXJyb3JlZC4gKi8KLQkgICAgICBzcmNfcHRyID0gc3JjX2J1ZmZlcltvZmZzZXRfeF0KLQkJW2RzdF9ibGtfeSArIG9mZnNldF95ICsgeV9jcm9wX2Jsb2Nrc107Ci0JICAgICAgZm9yIChpID0gMDsgaSA8IERDVFNJWkU7IGkrKykKLQkJZm9yIChqID0gMDsgaiA8IERDVFNJWkU7IGorKykKLQkJICBkc3RfcHRyW2oqRENUU0laRStpXSA9IHNyY19wdHJbaSpEQ1RTSVpFK2pdOwotCSAgICB9Ci0JICB9Ci0JfQorICAgICAgICBmb3IgKGRzdF9ibGtfeCA9IDA7IGRzdF9ibGtfeCA8IGNvbXBwdHItPndpZHRoX2luX2Jsb2NrczsKKyAgICAgICAgICAgICBkc3RfYmxrX3ggKz0gY29tcHB0ci0+aF9zYW1wX2ZhY3RvcikgeworICAgICAgICAgIHNyY19idWZmZXIgPSAoKnNyY2luZm8tPm1lbS0+YWNjZXNzX3ZpcnRfYmFycmF5KQorICAgICAgICAgICAgKChqX2NvbW1vbl9wdHIpIHNyY2luZm8sIHNyY19jb2VmX2FycmF5c1tjaV0sCisgICAgICAgICAgICAgZHN0X2Jsa194ICsgeF9jcm9wX2Jsb2NrcywKKyAgICAgICAgICAgICAoSkRJTUVOU0lPTikgY29tcHB0ci0+aF9zYW1wX2ZhY3RvciwgRkFMU0UpOworICAgICAgICAgIGZvciAob2Zmc2V0X3ggPSAwOyBvZmZzZXRfeCA8IGNvbXBwdHItPmhfc2FtcF9mYWN0b3I7IG9mZnNldF94KyspIHsKKyAgICAgICAgICAgIGRzdF9wdHIgPSBkc3RfYnVmZmVyW29mZnNldF95XVtkc3RfYmxrX3ggKyBvZmZzZXRfeF07CisgICAgICAgICAgICBpZiAoeV9jcm9wX2Jsb2NrcyArIGRzdF9ibGtfeSA8IGNvbXBfaGVpZ2h0KSB7CisgICAgICAgICAgICAgIC8qIEJsb2NrIGlzIHdpdGhpbiB0aGUgbWlycm9yYWJsZSBhcmVhLiAqLworICAgICAgICAgICAgICBzcmNfcHRyID0gc3JjX2J1ZmZlcltvZmZzZXRfeF0KKyAgICAgICAgICAgICAgICBbY29tcF9oZWlnaHQgLSB5X2Nyb3BfYmxvY2tzIC0gZHN0X2Jsa195IC0gb2Zmc2V0X3kgLSAxXTsKKyAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IERDVFNJWkU7IGkrKykgeworICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBEQ1RTSVpFOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgIGRzdF9wdHJbaipEQ1RTSVpFK2ldID0gc3JjX3B0cltpKkRDVFNJWkUral07CisgICAgICAgICAgICAgICAgICBqKys7CisgICAgICAgICAgICAgICAgICBkc3RfcHRyW2oqRENUU0laRStpXSA9IC1zcmNfcHRyW2kqRENUU0laRStqXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIC8qIEVkZ2UgYmxvY2tzIGFyZSB0cmFuc3Bvc2VkIGJ1dCBub3QgbWlycm9yZWQuICovCisgICAgICAgICAgICAgIHNyY19wdHIgPSBzcmNfYnVmZmVyW29mZnNldF94XQorICAgICAgICAgICAgICAgIFtkc3RfYmxrX3kgKyBvZmZzZXRfeSArIHlfY3JvcF9ibG9ja3NdOworICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgRENUU0laRTsgaSsrKQorICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBEQ1RTSVpFOyBqKyspCisgICAgICAgICAgICAgICAgICBkc3RfcHRyW2oqRENUU0laRStpXSA9IHNyY19wdHJbaSpEQ1RTSVpFK2pdOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgfQogICAgIH0KICAgfQpAQCAtNTM2LDkgKzUzNiw5IEBACiAKIExPQ0FMKHZvaWQpCiBkb19yb3RfMTgwIChqX2RlY29tcHJlc3NfcHRyIHNyY2luZm8sIGpfY29tcHJlc3NfcHRyIGRzdGluZm8sCi0JICAgIEpESU1FTlNJT04geF9jcm9wX29mZnNldCwgSkRJTUVOU0lPTiB5X2Nyb3Bfb2Zmc2V0LAotCSAgICBqdmlydF9iYXJyYXlfcHRyICpzcmNfY29lZl9hcnJheXMsCi0JICAgIGp2aXJ0X2JhcnJheV9wdHIgKmRzdF9jb2VmX2FycmF5cykKKyAgICAgICAgICAgIEpESU1FTlNJT04geF9jcm9wX29mZnNldCwgSkRJTUVOU0lPTiB5X2Nyb3Bfb2Zmc2V0LAorICAgICAgICAgICAganZpcnRfYmFycmF5X3B0ciAqc3JjX2NvZWZfYXJyYXlzLAorICAgICAgICAgICAganZpcnRfYmFycmF5X3B0ciAqZHN0X2NvZWZfYXJyYXlzKQogLyogMTgwIGRlZ3JlZSByb3RhdGlvbiBpcyBlcXVpdmFsZW50IHRvCiAgKiAgIDEuIFZlcnRpY2FsIG1pcnJvcmluZzsKICAqICAgMi4gSG9yaXpvbnRhbCBtaXJyb3JpbmcuCkBAIC01NjUsNzcgKzU2NSw3NyBAQAogICAgIHhfY3JvcF9ibG9ja3MgPSB4X2Nyb3Bfb2Zmc2V0ICogY29tcHB0ci0+aF9zYW1wX2ZhY3RvcjsKICAgICB5X2Nyb3BfYmxvY2tzID0geV9jcm9wX29mZnNldCAqIGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7CiAgICAgZm9yIChkc3RfYmxrX3kgPSAwOyBkc3RfYmxrX3kgPCBjb21wcHRyLT5oZWlnaHRfaW5fYmxvY2tzOwotCSBkc3RfYmxrX3kgKz0gY29tcHB0ci0+dl9zYW1wX2ZhY3RvcikgeworICAgICAgICAgZHN0X2Jsa195ICs9IGNvbXBwdHItPnZfc2FtcF9mYWN0b3IpIHsKICAgICAgIGRzdF9idWZmZXIgPSAoKnNyY2luZm8tPm1lbS0+YWNjZXNzX3ZpcnRfYmFycmF5KQotCSgoal9jb21tb25fcHRyKSBzcmNpbmZvLCBkc3RfY29lZl9hcnJheXNbY2ldLCBkc3RfYmxrX3ksCi0JIChKRElNRU5TSU9OKSBjb21wcHRyLT52X3NhbXBfZmFjdG9yLCBUUlVFKTsKKyAgICAgICAgKChqX2NvbW1vbl9wdHIpIHNyY2luZm8sIGRzdF9jb2VmX2FycmF5c1tjaV0sIGRzdF9ibGtfeSwKKyAgICAgICAgIChKRElNRU5TSU9OKSBjb21wcHRyLT52X3NhbXBfZmFjdG9yLCBUUlVFKTsKICAgICAgIGlmICh5X2Nyb3BfYmxvY2tzICsgZHN0X2Jsa195IDwgY29tcF9oZWlnaHQpIHsKLQkvKiBSb3cgaXMgd2l0aGluIHRoZSB2ZXJ0aWNhbGx5IG1pcnJvcmFibGUgYXJlYS4gKi8KLQlzcmNfYnVmZmVyID0gKCpzcmNpbmZvLT5tZW0tPmFjY2Vzc192aXJ0X2JhcnJheSkKLQkgICgoal9jb21tb25fcHRyKSBzcmNpbmZvLCBzcmNfY29lZl9hcnJheXNbY2ldLAotCSAgIGNvbXBfaGVpZ2h0IC0geV9jcm9wX2Jsb2NrcyAtIGRzdF9ibGtfeSAtCi0JICAgKEpESU1FTlNJT04pIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IsCi0JICAgKEpESU1FTlNJT04pIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IsIEZBTFNFKTsKKyAgICAgICAgLyogUm93IGlzIHdpdGhpbiB0aGUgdmVydGljYWxseSBtaXJyb3JhYmxlIGFyZWEuICovCisgICAgICAgIHNyY19idWZmZXIgPSAoKnNyY2luZm8tPm1lbS0+YWNjZXNzX3ZpcnRfYmFycmF5KQorICAgICAgICAgICgoal9jb21tb25fcHRyKSBzcmNpbmZvLCBzcmNfY29lZl9hcnJheXNbY2ldLAorICAgICAgICAgICBjb21wX2hlaWdodCAtIHlfY3JvcF9ibG9ja3MgLSBkc3RfYmxrX3kgLQorICAgICAgICAgICAoSkRJTUVOU0lPTikgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciwKKyAgICAgICAgICAgKEpESU1FTlNJT04pIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IsIEZBTFNFKTsKICAgICAgIH0gZWxzZSB7Ci0JLyogQm90dG9tLWVkZ2Ugcm93cyBhcmUgb25seSBtaXJyb3JlZCBob3Jpem9udGFsbHkuICovCi0Jc3JjX2J1ZmZlciA9ICgqc3JjaW5mby0+bWVtLT5hY2Nlc3NfdmlydF9iYXJyYXkpCi0JICAoKGpfY29tbW9uX3B0cikgc3JjaW5mbywgc3JjX2NvZWZfYXJyYXlzW2NpXSwKLQkgICBkc3RfYmxrX3kgKyB5X2Nyb3BfYmxvY2tzLAotCSAgIChKRElNRU5TSU9OKSBjb21wcHRyLT52X3NhbXBfZmFjdG9yLCBGQUxTRSk7CisgICAgICAgIC8qIEJvdHRvbS1lZGdlIHJvd3MgYXJlIG9ubHkgbWlycm9yZWQgaG9yaXpvbnRhbGx5LiAqLworICAgICAgICBzcmNfYnVmZmVyID0gKCpzcmNpbmZvLT5tZW0tPmFjY2Vzc192aXJ0X2JhcnJheSkKKyAgICAgICAgICAoKGpfY29tbW9uX3B0cikgc3JjaW5mbywgc3JjX2NvZWZfYXJyYXlzW2NpXSwKKyAgICAgICAgICAgZHN0X2Jsa195ICsgeV9jcm9wX2Jsb2NrcywKKyAgICAgICAgICAgKEpESU1FTlNJT04pIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IsIEZBTFNFKTsKICAgICAgIH0KICAgICAgIGZvciAob2Zmc2V0X3kgPSAwOyBvZmZzZXRfeSA8IGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7IG9mZnNldF95KyspIHsKLQlkc3Rfcm93X3B0ciA9IGRzdF9idWZmZXJbb2Zmc2V0X3ldOwotCWlmICh5X2Nyb3BfYmxvY2tzICsgZHN0X2Jsa195IDwgY29tcF9oZWlnaHQpIHsKLQkgIC8qIFJvdyBpcyB3aXRoaW4gdGhlIG1pcnJvcmFibGUgYXJlYS4gKi8KLQkgIHNyY19yb3dfcHRyID0gc3JjX2J1ZmZlcltjb21wcHRyLT52X3NhbXBfZmFjdG9yIC0gb2Zmc2V0X3kgLSAxXTsKLQkgIGZvciAoZHN0X2Jsa194ID0gMDsgZHN0X2Jsa194IDwgY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzOyBkc3RfYmxrX3grKykgewotCSAgICBkc3RfcHRyID0gZHN0X3Jvd19wdHJbZHN0X2Jsa194XTsKLQkgICAgaWYgKHhfY3JvcF9ibG9ja3MgKyBkc3RfYmxrX3ggPCBjb21wX3dpZHRoKSB7Ci0JICAgICAgLyogUHJvY2VzcyB0aGUgYmxvY2tzIHRoYXQgY2FuIGJlIG1pcnJvcmVkIGJvdGggd2F5cy4gKi8KLQkgICAgICBzcmNfcHRyID0gc3JjX3Jvd19wdHJbY29tcF93aWR0aCAtIHhfY3JvcF9ibG9ja3MgLSBkc3RfYmxrX3ggLSAxXTsKLQkgICAgICBmb3IgKGkgPSAwOyBpIDwgRENUU0laRTsgaSArPSAyKSB7Ci0JCS8qIEZvciBldmVuIHJvdywgbmVnYXRlIGV2ZXJ5IG9kZCBjb2x1bW4uICovCi0JCWZvciAoaiA9IDA7IGogPCBEQ1RTSVpFOyBqICs9IDIpIHsKLQkJICAqZHN0X3B0cisrID0gKnNyY19wdHIrKzsKLQkJICAqZHN0X3B0cisrID0gLSAqc3JjX3B0cisrOwotCQl9Ci0JCS8qIEZvciBvZGQgcm93LCBuZWdhdGUgZXZlcnkgZXZlbiBjb2x1bW4uICovCi0JCWZvciAoaiA9IDA7IGogPCBEQ1RTSVpFOyBqICs9IDIpIHsKLQkJICAqZHN0X3B0cisrID0gLSAqc3JjX3B0cisrOwotCQkgICpkc3RfcHRyKysgPSAqc3JjX3B0cisrOwotCQl9Ci0JICAgICAgfQotCSAgICB9IGVsc2UgewotCSAgICAgIC8qIEFueSByZW1haW5pbmcgcmlnaHQtZWRnZSBibG9ja3MgYXJlIG9ubHkgbWlycm9yZWQgdmVydGljYWxseS4gKi8KLQkgICAgICBzcmNfcHRyID0gc3JjX3Jvd19wdHJbeF9jcm9wX2Jsb2NrcyArIGRzdF9ibGtfeF07Ci0JICAgICAgZm9yIChpID0gMDsgaSA8IERDVFNJWkU7IGkgKz0gMikgewotCQlmb3IgKGogPSAwOyBqIDwgRENUU0laRTsgaisrKQotCQkgICpkc3RfcHRyKysgPSAqc3JjX3B0cisrOwotCQlmb3IgKGogPSAwOyBqIDwgRENUU0laRTsgaisrKQotCQkgICpkc3RfcHRyKysgPSAtICpzcmNfcHRyKys7Ci0JICAgICAgfQotCSAgICB9Ci0JICB9Ci0JfSBlbHNlIHsKLQkgIC8qIFJlbWFpbmluZyByb3dzIGFyZSBqdXN0IG1pcnJvcmVkIGhvcml6b250YWxseS4gKi8KLQkgIHNyY19yb3dfcHRyID0gc3JjX2J1ZmZlcltvZmZzZXRfeV07Ci0JICBmb3IgKGRzdF9ibGtfeCA9IDA7IGRzdF9ibGtfeCA8IGNvbXBwdHItPndpZHRoX2luX2Jsb2NrczsgZHN0X2Jsa194KyspIHsKLQkgICAgaWYgKHhfY3JvcF9ibG9ja3MgKyBkc3RfYmxrX3ggPCBjb21wX3dpZHRoKSB7Ci0JICAgICAgLyogUHJvY2VzcyB0aGUgYmxvY2tzIHRoYXQgY2FuIGJlIG1pcnJvcmVkLiAqLwotCSAgICAgIGRzdF9wdHIgPSBkc3Rfcm93X3B0cltkc3RfYmxrX3hdOwotCSAgICAgIHNyY19wdHIgPSBzcmNfcm93X3B0cltjb21wX3dpZHRoIC0geF9jcm9wX2Jsb2NrcyAtIGRzdF9ibGtfeCAtIDFdOwotCSAgICAgIGZvciAoaSA9IDA7IGkgPCBEQ1RTSVpFMjsgaSArPSAyKSB7Ci0JCSpkc3RfcHRyKysgPSAqc3JjX3B0cisrOwotCQkqZHN0X3B0cisrID0gLSAqc3JjX3B0cisrOwotCSAgICAgIH0KLQkgICAgfSBlbHNlIHsKLQkgICAgICAvKiBBbnkgcmVtYWluaW5nIHJpZ2h0LWVkZ2UgYmxvY2tzIGFyZSBvbmx5IGNvcGllZC4gKi8KLQkgICAgICBqY29weV9ibG9ja19yb3coc3JjX3Jvd19wdHIgKyBkc3RfYmxrX3ggKyB4X2Nyb3BfYmxvY2tzLAotCQkJICAgICAgZHN0X3Jvd19wdHIgKyBkc3RfYmxrX3gsCi0JCQkgICAgICAoSkRJTUVOU0lPTikgMSk7Ci0JICAgIH0KLQkgIH0KLQl9CisgICAgICAgIGRzdF9yb3dfcHRyID0gZHN0X2J1ZmZlcltvZmZzZXRfeV07CisgICAgICAgIGlmICh5X2Nyb3BfYmxvY2tzICsgZHN0X2Jsa195IDwgY29tcF9oZWlnaHQpIHsKKyAgICAgICAgICAvKiBSb3cgaXMgd2l0aGluIHRoZSBtaXJyb3JhYmxlIGFyZWEuICovCisgICAgICAgICAgc3JjX3Jvd19wdHIgPSBzcmNfYnVmZmVyW2NvbXBwdHItPnZfc2FtcF9mYWN0b3IgLSBvZmZzZXRfeSAtIDFdOworICAgICAgICAgIGZvciAoZHN0X2Jsa194ID0gMDsgZHN0X2Jsa194IDwgY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzOyBkc3RfYmxrX3grKykgeworICAgICAgICAgICAgZHN0X3B0ciA9IGRzdF9yb3dfcHRyW2RzdF9ibGtfeF07CisgICAgICAgICAgICBpZiAoeF9jcm9wX2Jsb2NrcyArIGRzdF9ibGtfeCA8IGNvbXBfd2lkdGgpIHsKKyAgICAgICAgICAgICAgLyogUHJvY2VzcyB0aGUgYmxvY2tzIHRoYXQgY2FuIGJlIG1pcnJvcmVkIGJvdGggd2F5cy4gKi8KKyAgICAgICAgICAgICAgc3JjX3B0ciA9IHNyY19yb3dfcHRyW2NvbXBfd2lkdGggLSB4X2Nyb3BfYmxvY2tzIC0gZHN0X2Jsa194IC0gMV07CisgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBEQ1RTSVpFOyBpICs9IDIpIHsKKyAgICAgICAgICAgICAgICAvKiBGb3IgZXZlbiByb3csIG5lZ2F0ZSBldmVyeSBvZGQgY29sdW1uLiAqLworICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBEQ1RTSVpFOyBqICs9IDIpIHsKKyAgICAgICAgICAgICAgICAgICpkc3RfcHRyKysgPSAqc3JjX3B0cisrOworICAgICAgICAgICAgICAgICAgKmRzdF9wdHIrKyA9IC0gKnNyY19wdHIrKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLyogRm9yIG9kZCByb3csIG5lZ2F0ZSBldmVyeSBldmVuIGNvbHVtbi4gKi8KKyAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgRENUU0laRTsgaiArPSAyKSB7CisgICAgICAgICAgICAgICAgICAqZHN0X3B0cisrID0gLSAqc3JjX3B0cisrOworICAgICAgICAgICAgICAgICAgKmRzdF9wdHIrKyA9ICpzcmNfcHRyKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAvKiBBbnkgcmVtYWluaW5nIHJpZ2h0LWVkZ2UgYmxvY2tzIGFyZSBvbmx5IG1pcnJvcmVkIHZlcnRpY2FsbHkuICovCisgICAgICAgICAgICAgIHNyY19wdHIgPSBzcmNfcm93X3B0clt4X2Nyb3BfYmxvY2tzICsgZHN0X2Jsa194XTsKKyAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IERDVFNJWkU7IGkgKz0gMikgeworICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBEQ1RTSVpFOyBqKyspCisgICAgICAgICAgICAgICAgICAqZHN0X3B0cisrID0gKnNyY19wdHIrKzsKKyAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgRENUU0laRTsgaisrKQorICAgICAgICAgICAgICAgICAgKmRzdF9wdHIrKyA9IC0gKnNyY19wdHIrKzsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAvKiBSZW1haW5pbmcgcm93cyBhcmUganVzdCBtaXJyb3JlZCBob3Jpem9udGFsbHkuICovCisgICAgICAgICAgc3JjX3Jvd19wdHIgPSBzcmNfYnVmZmVyW29mZnNldF95XTsKKyAgICAgICAgICBmb3IgKGRzdF9ibGtfeCA9IDA7IGRzdF9ibGtfeCA8IGNvbXBwdHItPndpZHRoX2luX2Jsb2NrczsgZHN0X2Jsa194KyspIHsKKyAgICAgICAgICAgIGlmICh4X2Nyb3BfYmxvY2tzICsgZHN0X2Jsa194IDwgY29tcF93aWR0aCkgeworICAgICAgICAgICAgICAvKiBQcm9jZXNzIHRoZSBibG9ja3MgdGhhdCBjYW4gYmUgbWlycm9yZWQuICovCisgICAgICAgICAgICAgIGRzdF9wdHIgPSBkc3Rfcm93X3B0cltkc3RfYmxrX3hdOworICAgICAgICAgICAgICBzcmNfcHRyID0gc3JjX3Jvd19wdHJbY29tcF93aWR0aCAtIHhfY3JvcF9ibG9ja3MgLSBkc3RfYmxrX3ggLSAxXTsKKyAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IERDVFNJWkUyOyBpICs9IDIpIHsKKyAgICAgICAgICAgICAgICAqZHN0X3B0cisrID0gKnNyY19wdHIrKzsKKyAgICAgICAgICAgICAgICAqZHN0X3B0cisrID0gLSAqc3JjX3B0cisrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAvKiBBbnkgcmVtYWluaW5nIHJpZ2h0LWVkZ2UgYmxvY2tzIGFyZSBvbmx5IGNvcGllZC4gKi8KKyAgICAgICAgICAgICAgamNvcHlfYmxvY2tfcm93KHNyY19yb3dfcHRyICsgZHN0X2Jsa194ICsgeF9jcm9wX2Jsb2NrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdF9yb3dfcHRyICsgZHN0X2Jsa194LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEpESU1FTlNJT04pIDEpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgfQogICAgIH0KICAgfQpAQCAtNjQ0LDkgKzY0NCw5IEBACiAKIExPQ0FMKHZvaWQpCiBkb190cmFuc3ZlcnNlIChqX2RlY29tcHJlc3NfcHRyIHNyY2luZm8sIGpfY29tcHJlc3NfcHRyIGRzdGluZm8sCi0JICAgICAgIEpESU1FTlNJT04geF9jcm9wX29mZnNldCwgSkRJTUVOU0lPTiB5X2Nyb3Bfb2Zmc2V0LAotCSAgICAgICBqdmlydF9iYXJyYXlfcHRyICpzcmNfY29lZl9hcnJheXMsCi0JICAgICAgIGp2aXJ0X2JhcnJheV9wdHIgKmRzdF9jb2VmX2FycmF5cykKKyAgICAgICAgICAgICAgIEpESU1FTlNJT04geF9jcm9wX29mZnNldCwgSkRJTUVOU0lPTiB5X2Nyb3Bfb2Zmc2V0LAorICAgICAgICAgICAgICAganZpcnRfYmFycmF5X3B0ciAqc3JjX2NvZWZfYXJyYXlzLAorICAgICAgICAgICAgICAganZpcnRfYmFycmF5X3B0ciAqZHN0X2NvZWZfYXJyYXlzKQogLyogVHJhbnN2ZXJzZSB0cmFuc3Bvc2UgaXMgZXF1aXZhbGVudCB0bwogICogICAxLiAxODAgZGVncmVlIHJvdGF0aW9uOwogICogICAyLiBUcmFuc3Bvc2l0aW9uOwpAQCAtNjc2LDgxICs2NzYsODEgQEAKICAgICB4X2Nyb3BfYmxvY2tzID0geF9jcm9wX29mZnNldCAqIGNvbXBwdHItPmhfc2FtcF9mYWN0b3I7CiAgICAgeV9jcm9wX2Jsb2NrcyA9IHlfY3JvcF9vZmZzZXQgKiBjb21wcHRyLT52X3NhbXBfZmFjdG9yOwogICAgIGZvciAoZHN0X2Jsa195ID0gMDsgZHN0X2Jsa195IDwgY29tcHB0ci0+aGVpZ2h0X2luX2Jsb2NrczsKLQkgZHN0X2Jsa195ICs9IGNvbXBwdHItPnZfc2FtcF9mYWN0b3IpIHsKKyAgICAgICAgIGRzdF9ibGtfeSArPSBjb21wcHRyLT52X3NhbXBfZmFjdG9yKSB7CiAgICAgICBkc3RfYnVmZmVyID0gKCpzcmNpbmZvLT5tZW0tPmFjY2Vzc192aXJ0X2JhcnJheSkKLQkoKGpfY29tbW9uX3B0cikgc3JjaW5mbywgZHN0X2NvZWZfYXJyYXlzW2NpXSwgZHN0X2Jsa195LAotCSAoSkRJTUVOU0lPTikgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciwgVFJVRSk7CisgICAgICAgICgoal9jb21tb25fcHRyKSBzcmNpbmZvLCBkc3RfY29lZl9hcnJheXNbY2ldLCBkc3RfYmxrX3ksCisgICAgICAgICAoSkRJTUVOU0lPTikgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciwgVFJVRSk7CiAgICAgICBmb3IgKG9mZnNldF95ID0gMDsgb2Zmc2V0X3kgPCBjb21wcHRyLT52X3NhbXBfZmFjdG9yOyBvZmZzZXRfeSsrKSB7Ci0JZm9yIChkc3RfYmxrX3ggPSAwOyBkc3RfYmxrX3ggPCBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3M7Ci0JICAgICBkc3RfYmxrX3ggKz0gY29tcHB0ci0+aF9zYW1wX2ZhY3RvcikgewotCSAgaWYgKHhfY3JvcF9ibG9ja3MgKyBkc3RfYmxrX3ggPCBjb21wX3dpZHRoKSB7Ci0JICAgIC8qIEJsb2NrIGlzIHdpdGhpbiB0aGUgbWlycm9yYWJsZSBhcmVhLiAqLwotCSAgICBzcmNfYnVmZmVyID0gKCpzcmNpbmZvLT5tZW0tPmFjY2Vzc192aXJ0X2JhcnJheSkKLQkgICAgICAoKGpfY29tbW9uX3B0cikgc3JjaW5mbywgc3JjX2NvZWZfYXJyYXlzW2NpXSwKLQkgICAgICAgY29tcF93aWR0aCAtIHhfY3JvcF9ibG9ja3MgLSBkc3RfYmxrX3ggLQotCSAgICAgICAoSkRJTUVOU0lPTikgY29tcHB0ci0+aF9zYW1wX2ZhY3RvciwKLQkgICAgICAgKEpESU1FTlNJT04pIGNvbXBwdHItPmhfc2FtcF9mYWN0b3IsIEZBTFNFKTsKLQkgIH0gZWxzZSB7Ci0JICAgIHNyY19idWZmZXIgPSAoKnNyY2luZm8tPm1lbS0+YWNjZXNzX3ZpcnRfYmFycmF5KQotCSAgICAgICgoal9jb21tb25fcHRyKSBzcmNpbmZvLCBzcmNfY29lZl9hcnJheXNbY2ldLAotCSAgICAgICBkc3RfYmxrX3ggKyB4X2Nyb3BfYmxvY2tzLAotCSAgICAgICAoSkRJTUVOU0lPTikgY29tcHB0ci0+aF9zYW1wX2ZhY3RvciwgRkFMU0UpOwotCSAgfQotCSAgZm9yIChvZmZzZXRfeCA9IDA7IG9mZnNldF94IDwgY29tcHB0ci0+aF9zYW1wX2ZhY3Rvcjsgb2Zmc2V0X3grKykgewotCSAgICBkc3RfcHRyID0gZHN0X2J1ZmZlcltvZmZzZXRfeV1bZHN0X2Jsa194ICsgb2Zmc2V0X3hdOwotCSAgICBpZiAoeV9jcm9wX2Jsb2NrcyArIGRzdF9ibGtfeSA8IGNvbXBfaGVpZ2h0KSB7Ci0JICAgICAgaWYgKHhfY3JvcF9ibG9ja3MgKyBkc3RfYmxrX3ggPCBjb21wX3dpZHRoKSB7Ci0JCS8qIEJsb2NrIGlzIHdpdGhpbiB0aGUgbWlycm9yYWJsZSBhcmVhLiAqLwotCQlzcmNfcHRyID0gc3JjX2J1ZmZlcltjb21wcHRyLT5oX3NhbXBfZmFjdG9yIC0gb2Zmc2V0X3ggLSAxXQotCQkgIFtjb21wX2hlaWdodCAtIHlfY3JvcF9ibG9ja3MgLSBkc3RfYmxrX3kgLSBvZmZzZXRfeSAtIDFdOwotCQlmb3IgKGkgPSAwOyBpIDwgRENUU0laRTsgaSsrKSB7Ci0JCSAgZm9yIChqID0gMDsgaiA8IERDVFNJWkU7IGorKykgewotCQkgICAgZHN0X3B0cltqKkRDVFNJWkUraV0gPSBzcmNfcHRyW2kqRENUU0laRStqXTsKLQkJICAgIGorKzsKLQkJICAgIGRzdF9wdHJbaipEQ1RTSVpFK2ldID0gLXNyY19wdHJbaSpEQ1RTSVpFK2pdOwotCQkgIH0KLQkJICBpKys7Ci0JCSAgZm9yIChqID0gMDsgaiA8IERDVFNJWkU7IGorKykgewotCQkgICAgZHN0X3B0cltqKkRDVFNJWkUraV0gPSAtc3JjX3B0cltpKkRDVFNJWkUral07Ci0JCSAgICBqKys7Ci0JCSAgICBkc3RfcHRyW2oqRENUU0laRStpXSA9IHNyY19wdHJbaSpEQ1RTSVpFK2pdOwotCQkgIH0KLQkJfQotCSAgICAgIH0gZWxzZSB7Ci0JCS8qIFJpZ2h0LWVkZ2UgYmxvY2tzIGFyZSBtaXJyb3JlZCBpbiB5IG9ubHkgKi8KLQkJc3JjX3B0ciA9IHNyY19idWZmZXJbb2Zmc2V0X3hdCi0JCSAgW2NvbXBfaGVpZ2h0IC0geV9jcm9wX2Jsb2NrcyAtIGRzdF9ibGtfeSAtIG9mZnNldF95IC0gMV07Ci0JCWZvciAoaSA9IDA7IGkgPCBEQ1RTSVpFOyBpKyspIHsKLQkJICBmb3IgKGogPSAwOyBqIDwgRENUU0laRTsgaisrKSB7Ci0JCSAgICBkc3RfcHRyW2oqRENUU0laRStpXSA9IHNyY19wdHJbaSpEQ1RTSVpFK2pdOwotCQkgICAgaisrOwotCQkgICAgZHN0X3B0cltqKkRDVFNJWkUraV0gPSAtc3JjX3B0cltpKkRDVFNJWkUral07Ci0JCSAgfQotCQl9Ci0JICAgICAgfQotCSAgICB9IGVsc2UgewotCSAgICAgIGlmICh4X2Nyb3BfYmxvY2tzICsgZHN0X2Jsa194IDwgY29tcF93aWR0aCkgewotCQkvKiBCb3R0b20tZWRnZSBibG9ja3MgYXJlIG1pcnJvcmVkIGluIHggb25seSAqLwotCQlzcmNfcHRyID0gc3JjX2J1ZmZlcltjb21wcHRyLT5oX3NhbXBfZmFjdG9yIC0gb2Zmc2V0X3ggLSAxXQotCQkgIFtkc3RfYmxrX3kgKyBvZmZzZXRfeSArIHlfY3JvcF9ibG9ja3NdOwotCQlmb3IgKGkgPSAwOyBpIDwgRENUU0laRTsgaSsrKSB7Ci0JCSAgZm9yIChqID0gMDsgaiA8IERDVFNJWkU7IGorKykKLQkJICAgIGRzdF9wdHJbaipEQ1RTSVpFK2ldID0gc3JjX3B0cltpKkRDVFNJWkUral07Ci0JCSAgaSsrOwotCQkgIGZvciAoaiA9IDA7IGogPCBEQ1RTSVpFOyBqKyspCi0JCSAgICBkc3RfcHRyW2oqRENUU0laRStpXSA9IC1zcmNfcHRyW2kqRENUU0laRStqXTsKLQkJfQotCSAgICAgIH0gZWxzZSB7Ci0JCS8qIEF0IGxvd2VyIHJpZ2h0IGNvcm5lciwganVzdCB0cmFuc3Bvc2UsIG5vIG1pcnJvcmluZyAqLwotCQlzcmNfcHRyID0gc3JjX2J1ZmZlcltvZmZzZXRfeF0KLQkJICBbZHN0X2Jsa195ICsgb2Zmc2V0X3kgKyB5X2Nyb3BfYmxvY2tzXTsKLQkJZm9yIChpID0gMDsgaSA8IERDVFNJWkU7IGkrKykKLQkJICBmb3IgKGogPSAwOyBqIDwgRENUU0laRTsgaisrKQotCQkgICAgZHN0X3B0cltqKkRDVFNJWkUraV0gPSBzcmNfcHRyW2kqRENUU0laRStqXTsKLQkgICAgICB9Ci0JICAgIH0KLQkgIH0KLQl9CisgICAgICAgIGZvciAoZHN0X2Jsa194ID0gMDsgZHN0X2Jsa194IDwgY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzOworICAgICAgICAgICAgIGRzdF9ibGtfeCArPSBjb21wcHRyLT5oX3NhbXBfZmFjdG9yKSB7CisgICAgICAgICAgaWYgKHhfY3JvcF9ibG9ja3MgKyBkc3RfYmxrX3ggPCBjb21wX3dpZHRoKSB7CisgICAgICAgICAgICAvKiBCbG9jayBpcyB3aXRoaW4gdGhlIG1pcnJvcmFibGUgYXJlYS4gKi8KKyAgICAgICAgICAgIHNyY19idWZmZXIgPSAoKnNyY2luZm8tPm1lbS0+YWNjZXNzX3ZpcnRfYmFycmF5KQorICAgICAgICAgICAgICAoKGpfY29tbW9uX3B0cikgc3JjaW5mbywgc3JjX2NvZWZfYXJyYXlzW2NpXSwKKyAgICAgICAgICAgICAgIGNvbXBfd2lkdGggLSB4X2Nyb3BfYmxvY2tzIC0gZHN0X2Jsa194IC0KKyAgICAgICAgICAgICAgIChKRElNRU5TSU9OKSBjb21wcHRyLT5oX3NhbXBfZmFjdG9yLAorICAgICAgICAgICAgICAgKEpESU1FTlNJT04pIGNvbXBwdHItPmhfc2FtcF9mYWN0b3IsIEZBTFNFKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3JjX2J1ZmZlciA9ICgqc3JjaW5mby0+bWVtLT5hY2Nlc3NfdmlydF9iYXJyYXkpCisgICAgICAgICAgICAgICgoal9jb21tb25fcHRyKSBzcmNpbmZvLCBzcmNfY29lZl9hcnJheXNbY2ldLAorICAgICAgICAgICAgICAgZHN0X2Jsa194ICsgeF9jcm9wX2Jsb2NrcywKKyAgICAgICAgICAgICAgIChKRElNRU5TSU9OKSBjb21wcHRyLT5oX3NhbXBfZmFjdG9yLCBGQUxTRSk7CisgICAgICAgICAgfQorICAgICAgICAgIGZvciAob2Zmc2V0X3ggPSAwOyBvZmZzZXRfeCA8IGNvbXBwdHItPmhfc2FtcF9mYWN0b3I7IG9mZnNldF94KyspIHsKKyAgICAgICAgICAgIGRzdF9wdHIgPSBkc3RfYnVmZmVyW29mZnNldF95XVtkc3RfYmxrX3ggKyBvZmZzZXRfeF07CisgICAgICAgICAgICBpZiAoeV9jcm9wX2Jsb2NrcyArIGRzdF9ibGtfeSA8IGNvbXBfaGVpZ2h0KSB7CisgICAgICAgICAgICAgIGlmICh4X2Nyb3BfYmxvY2tzICsgZHN0X2Jsa194IDwgY29tcF93aWR0aCkgeworICAgICAgICAgICAgICAgIC8qIEJsb2NrIGlzIHdpdGhpbiB0aGUgbWlycm9yYWJsZSBhcmVhLiAqLworICAgICAgICAgICAgICAgIHNyY19wdHIgPSBzcmNfYnVmZmVyW2NvbXBwdHItPmhfc2FtcF9mYWN0b3IgLSBvZmZzZXRfeCAtIDFdCisgICAgICAgICAgICAgICAgICBbY29tcF9oZWlnaHQgLSB5X2Nyb3BfYmxvY2tzIC0gZHN0X2Jsa195IC0gb2Zmc2V0X3kgLSAxXTsKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgRENUU0laRTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgRENUU0laRTsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgIGRzdF9wdHJbaipEQ1RTSVpFK2ldID0gc3JjX3B0cltpKkRDVFNJWkUral07CisgICAgICAgICAgICAgICAgICAgIGorKzsKKyAgICAgICAgICAgICAgICAgICAgZHN0X3B0cltqKkRDVFNJWkUraV0gPSAtc3JjX3B0cltpKkRDVFNJWkUral07CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgRENUU0laRTsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgIGRzdF9wdHJbaipEQ1RTSVpFK2ldID0gLXNyY19wdHJbaSpEQ1RTSVpFK2pdOworICAgICAgICAgICAgICAgICAgICBqKys7CisgICAgICAgICAgICAgICAgICAgIGRzdF9wdHJbaipEQ1RTSVpFK2ldID0gc3JjX3B0cltpKkRDVFNJWkUral07CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8qIFJpZ2h0LWVkZ2UgYmxvY2tzIGFyZSBtaXJyb3JlZCBpbiB5IG9ubHkgKi8KKyAgICAgICAgICAgICAgICBzcmNfcHRyID0gc3JjX2J1ZmZlcltvZmZzZXRfeF0KKyAgICAgICAgICAgICAgICAgIFtjb21wX2hlaWdodCAtIHlfY3JvcF9ibG9ja3MgLSBkc3RfYmxrX3kgLSBvZmZzZXRfeSAtIDFdOworICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBEQ1RTSVpFOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBEQ1RTSVpFOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgZHN0X3B0cltqKkRDVFNJWkUraV0gPSBzcmNfcHRyW2kqRENUU0laRStqXTsKKyAgICAgICAgICAgICAgICAgICAgaisrOworICAgICAgICAgICAgICAgICAgICBkc3RfcHRyW2oqRENUU0laRStpXSA9IC1zcmNfcHRyW2kqRENUU0laRStqXTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIGlmICh4X2Nyb3BfYmxvY2tzICsgZHN0X2Jsa194IDwgY29tcF93aWR0aCkgeworICAgICAgICAgICAgICAgIC8qIEJvdHRvbS1lZGdlIGJsb2NrcyBhcmUgbWlycm9yZWQgaW4geCBvbmx5ICovCisgICAgICAgICAgICAgICAgc3JjX3B0ciA9IHNyY19idWZmZXJbY29tcHB0ci0+aF9zYW1wX2ZhY3RvciAtIG9mZnNldF94IC0gMV0KKyAgICAgICAgICAgICAgICAgIFtkc3RfYmxrX3kgKyBvZmZzZXRfeSArIHlfY3JvcF9ibG9ja3NdOworICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBEQ1RTSVpFOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBEQ1RTSVpFOyBqKyspCisgICAgICAgICAgICAgICAgICAgIGRzdF9wdHJbaipEQ1RTSVpFK2ldID0gc3JjX3B0cltpKkRDVFNJWkUral07CisgICAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgRENUU0laRTsgaisrKQorICAgICAgICAgICAgICAgICAgICBkc3RfcHRyW2oqRENUU0laRStpXSA9IC1zcmNfcHRyW2kqRENUU0laRStqXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLyogQXQgbG93ZXIgcmlnaHQgY29ybmVyLCBqdXN0IHRyYW5zcG9zZSwgbm8gbWlycm9yaW5nICovCisgICAgICAgICAgICAgICAgc3JjX3B0ciA9IHNyY19idWZmZXJbb2Zmc2V0X3hdCisgICAgICAgICAgICAgICAgICBbZHN0X2Jsa195ICsgb2Zmc2V0X3kgKyB5X2Nyb3BfYmxvY2tzXTsKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgRENUU0laRTsgaSsrKQorICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IERDVFNJWkU7IGorKykKKyAgICAgICAgICAgICAgICAgICAgZHN0X3B0cltqKkRDVFNJWkUraV0gPSBzcmNfcHRyW2kqRENUU0laRStqXTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgfQogICAgIH0KICAgfQpAQCAtNzczLDcgKzc3Myw3IEBACiAgIH0KICAgKnJlc3VsdCA9IHZhbDsKICAgaWYgKHB0ciA9PSAqc3RycHRyKQotICAgIHJldHVybiBGQUxTRTsJCS8qIG9vcHMsIG5vIGRpZ2l0cyAqLworICAgIHJldHVybiBGQUxTRTsgICAgICAgICAgICAgICAvKiBvb3BzLCBubyBkaWdpdHMgKi8KICAgKnN0cnB0ciA9IHB0cjsKICAgcmV0dXJuIFRSVUU7CiB9CkBAIC03ODMsNyArNzgzLDcgQEAKICAqIFRoZSByb3V0aW5lIHJldHVybnMgVFJVRSBpZiB0aGUgc3BlYyBzdHJpbmcgaXMgdmFsaWQsIEZBTFNFIGlmIG5vdC4KICAqCiAgKiBUaGUgY3JvcCBzcGVjIHN0cmluZyBzaG91bGQgaGF2ZSB0aGUgZm9ybWF0Ci0gKgk8d2lkdGg+eDxoZWlnaHQ+eystfTx4b2Zmc2V0PnsrLX08eW9mZnNldD4KKyAqICAgICAgPHdpZHRoPltmXXg8aGVpZ2h0PltmXXsrLX08eG9mZnNldD57Ky19PHlvZmZzZXQ+CiAgKiB3aGVyZSB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCBhbmQgeW9mZnNldCBhcmUgdW5zaWduZWQgaW50ZWdlcnMuCiAgKiBFYWNoIG9mIHRoZSBlbGVtZW50cyBjYW4gYmUgb21pdHRlZCB0byBpbmRpY2F0ZSBhIGRlZmF1bHQgdmFsdWUuCiAgKiAoQSB3ZWFrbmVzcyBvZiB0aGlzIHN0eWxlIGlzIHRoYXQgaXQgaXMgbm90IHBvc3NpYmxlIHRvIG9taXQgeG9mZnNldApAQCAtODA1LDE0ICs4MDUsMjIgQEAKICAgICAvKiBmZXRjaCB3aWR0aCAqLwogICAgIGlmICghIGp0X3JlYWRfaW50ZWdlcigmc3BlYywgJmluZm8tPmNyb3Bfd2lkdGgpKQogICAgICAgcmV0dXJuIEZBTFNFOwotICAgIGluZm8tPmNyb3Bfd2lkdGhfc2V0ID0gSkNST1BfUE9TOworICAgIGlmICgqc3BlYyA9PSAnZicgfHwgKnNwZWMgPT0gJ0YnKSB7CisgICAgICBzcGVjKys7CisgICAgICBpbmZvLT5jcm9wX3dpZHRoX3NldCA9IEpDUk9QX0ZPUkNFOworICAgIH0gZWxzZQorICAgICAgaW5mby0+Y3JvcF93aWR0aF9zZXQgPSBKQ1JPUF9QT1M7CiAgIH0KLSAgaWYgKCpzcGVjID09ICd4JyB8fCAqc3BlYyA9PSAnWCcpIHsJCisgIGlmICgqc3BlYyA9PSAneCcgfHwgKnNwZWMgPT0gJ1gnKSB7CiAgICAgLyogZmV0Y2ggaGVpZ2h0ICovCiAgICAgc3BlYysrOwogICAgIGlmICghIGp0X3JlYWRfaW50ZWdlcigmc3BlYywgJmluZm8tPmNyb3BfaGVpZ2h0KSkKICAgICAgIHJldHVybiBGQUxTRTsKLSAgICBpbmZvLT5jcm9wX2hlaWdodF9zZXQgPSBKQ1JPUF9QT1M7CisgICAgaWYgKCpzcGVjID09ICdmJyB8fCAqc3BlYyA9PSAnRicpIHsKKyAgICAgIHNwZWMrKzsKKyAgICAgIGluZm8tPmNyb3BfaGVpZ2h0X3NldCA9IEpDUk9QX0ZPUkNFOworICAgIH0gZWxzZQorICAgICAgaW5mby0+Y3JvcF9oZWlnaHRfc2V0ID0gSkNST1BfUE9TOwogICB9CiAgIGlmICgqc3BlYyA9PSAnKycgfHwgKnNwZWMgPT0gJy0nKSB7CiAgICAgLyogZmV0Y2ggeG9mZnNldCAqLwpAQCAtODgwLDcgKzg4OCw3IEBACiAKIEdMT0JBTChib29sZWFuKQoganRyYW5zZm9ybV9yZXF1ZXN0X3dvcmtzcGFjZSAoal9kZWNvbXByZXNzX3B0ciBzcmNpbmZvLAotCQkJICAgICAganBlZ190cmFuc2Zvcm1faW5mbyAqaW5mbykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpwZWdfdHJhbnNmb3JtX2luZm8gKmluZm8pCiB7CiAgIGp2aXJ0X2JhcnJheV9wdHIgKmNvZWZfYXJyYXlzOwogICBib29sZWFuIG5lZWRfd29ya3NwYWNlLCB0cmFuc3Bvc2VfaXQ7CkBAIC05MTMsMTggKzkyMSwxOCBAQAogICBpZiAoaW5mby0+cGVyZmVjdCkgewogICAgIGlmIChpbmZvLT5udW1fY29tcG9uZW50cyA9PSAxKSB7CiAgICAgICBpZiAoIWp0cmFuc2Zvcm1fcGVyZmVjdF90cmFuc2Zvcm0oc3JjaW5mby0+b3V0cHV0X3dpZHRoLAotCSAgc3JjaW5mby0+b3V0cHV0X2hlaWdodCwKLQkgIHNyY2luZm8tPl9taW5fRENUX2hfc2NhbGVkX3NpemUsCi0JICBzcmNpbmZvLT5fbWluX0RDVF92X3NjYWxlZF9zaXplLAotCSAgaW5mby0+dHJhbnNmb3JtKSkKLQlyZXR1cm4gRkFMU0U7CisgICAgICAgICAgc3JjaW5mby0+b3V0cHV0X2hlaWdodCwKKyAgICAgICAgICBzcmNpbmZvLT5fbWluX0RDVF9oX3NjYWxlZF9zaXplLAorICAgICAgICAgIHNyY2luZm8tPl9taW5fRENUX3Zfc2NhbGVkX3NpemUsCisgICAgICAgICAgaW5mby0+dHJhbnNmb3JtKSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0gZWxzZSB7CiAgICAgICBpZiAoIWp0cmFuc2Zvcm1fcGVyZmVjdF90cmFuc2Zvcm0oc3JjaW5mby0+b3V0cHV0X3dpZHRoLAotCSAgc3JjaW5mby0+b3V0cHV0X2hlaWdodCwKLQkgIHNyY2luZm8tPm1heF9oX3NhbXBfZmFjdG9yICogc3JjaW5mby0+X21pbl9EQ1RfaF9zY2FsZWRfc2l6ZSwKLQkgIHNyY2luZm8tPm1heF92X3NhbXBfZmFjdG9yICogc3JjaW5mby0+X21pbl9EQ1Rfdl9zY2FsZWRfc2l6ZSwKLQkgIGluZm8tPnRyYW5zZm9ybSkpCi0JcmV0dXJuIEZBTFNFOworICAgICAgICAgIHNyY2luZm8tPm91dHB1dF9oZWlnaHQsCisgICAgICAgICAgc3JjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IgKiBzcmNpbmZvLT5fbWluX0RDVF9oX3NjYWxlZF9zaXplLAorICAgICAgICAgIHNyY2luZm8tPm1heF92X3NhbXBfZmFjdG9yICogc3JjaW5mby0+X21pbl9EQ1Rfdl9zY2FsZWRfc2l6ZSwKKyAgICAgICAgICBpbmZvLT50cmFuc2Zvcm0pKQorICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQogICB9CiAKQEAgLTk0NSw5ICs5NTMsOSBAQAogICAgICAgaW5mby0+aU1DVV9zYW1wbGVfaGVpZ2h0ID0gc3JjaW5mby0+X21pbl9EQ1RfaF9zY2FsZWRfc2l6ZTsKICAgICB9IGVsc2UgewogICAgICAgaW5mby0+aU1DVV9zYW1wbGVfd2lkdGggPQotCXNyY2luZm8tPm1heF92X3NhbXBfZmFjdG9yICogc3JjaW5mby0+X21pbl9EQ1Rfdl9zY2FsZWRfc2l6ZTsKKyAgICAgICAgc3JjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IgKiBzcmNpbmZvLT5fbWluX0RDVF92X3NjYWxlZF9zaXplOwogICAgICAgaW5mby0+aU1DVV9zYW1wbGVfaGVpZ2h0ID0KLQlzcmNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvciAqIHNyY2luZm8tPl9taW5fRENUX2hfc2NhbGVkX3NpemU7CisgICAgICAgIHNyY2luZm8tPm1heF9oX3NhbXBfZmFjdG9yICogc3JjaW5mby0+X21pbl9EQ1RfaF9zY2FsZWRfc2l6ZTsKICAgICB9CiAgICAgYnJlYWs7CiAgIGRlZmF1bHQ6CkBAIC05NTgsOSArOTY2LDkgQEAKICAgICAgIGluZm8tPmlNQ1Vfc2FtcGxlX2hlaWdodCA9IHNyY2luZm8tPl9taW5fRENUX3Zfc2NhbGVkX3NpemU7CiAgICAgfSBlbHNlIHsKICAgICAgIGluZm8tPmlNQ1Vfc2FtcGxlX3dpZHRoID0KLQlzcmNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvciAqIHNyY2luZm8tPl9taW5fRENUX2hfc2NhbGVkX3NpemU7CisgICAgICAgIHNyY2luZm8tPm1heF9oX3NhbXBfZmFjdG9yICogc3JjaW5mby0+X21pbl9EQ1RfaF9zY2FsZWRfc2l6ZTsKICAgICAgIGluZm8tPmlNQ1Vfc2FtcGxlX2hlaWdodCA9Ci0Jc3JjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IgKiBzcmNpbmZvLT5fbWluX0RDVF92X3NjYWxlZF9zaXplOworICAgICAgICBzcmNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciAqIHNyY2luZm8tPl9taW5fRENUX3Zfc2NhbGVkX3NpemU7CiAgICAgfQogICAgIGJyZWFrOwogICB9CkBAIC05NzEsMTEgKzk3OSwxMSBAQAogICBpZiAoaW5mby0+Y3JvcCkgewogICAgIC8qIEluc2VydCBkZWZhdWx0IHZhbHVlcyBmb3IgdW5zZXQgY3JvcCBwYXJhbWV0ZXJzICovCiAgICAgaWYgKGluZm8tPmNyb3BfeG9mZnNldF9zZXQgPT0gSkNST1BfVU5TRVQpCi0gICAgICBpbmZvLT5jcm9wX3hvZmZzZXQgPSAwOwkvKiBkZWZhdWx0IHRvICswICovCisgICAgICBpbmZvLT5jcm9wX3hvZmZzZXQgPSAwOyAgIC8qIGRlZmF1bHQgdG8gKzAgKi8KICAgICBpZiAoaW5mby0+Y3JvcF95b2Zmc2V0X3NldCA9PSBKQ1JPUF9VTlNFVCkKLSAgICAgIGluZm8tPmNyb3BfeW9mZnNldCA9IDA7CS8qIGRlZmF1bHQgdG8gKzAgKi8KKyAgICAgIGluZm8tPmNyb3BfeW9mZnNldCA9IDA7ICAgLyogZGVmYXVsdCB0byArMCAqLwogICAgIGlmIChpbmZvLT5jcm9wX3hvZmZzZXQgPj0gaW5mby0+b3V0cHV0X3dpZHRoIHx8Ci0JaW5mby0+Y3JvcF95b2Zmc2V0ID49IGluZm8tPm91dHB1dF9oZWlnaHQpCisgICAgICAgIGluZm8tPmNyb3BfeW9mZnNldCA+PSBpbmZvLT5vdXRwdXRfaGVpZ2h0KQogICAgICAgRVJSRVhJVChzcmNpbmZvLCBKRVJSX0JBRF9DUk9QX1NQRUMpOwogICAgIGlmIChpbmZvLT5jcm9wX3dpZHRoX3NldCA9PSBKQ1JPUF9VTlNFVCkKICAgICAgIGluZm8tPmNyb3Bfd2lkdGggPSBpbmZvLT5vdXRwdXRfd2lkdGggLSBpbmZvLT5jcm9wX3hvZmZzZXQ7CkBAIC05ODMsOSArOTkxLDkgQEAKICAgICAgIGluZm8tPmNyb3BfaGVpZ2h0ID0gaW5mby0+b3V0cHV0X2hlaWdodCAtIGluZm8tPmNyb3BfeW9mZnNldDsKICAgICAvKiBFbnN1cmUgcGFyYW1ldGVycyBhcmUgdmFsaWQgKi8KICAgICBpZiAoaW5mby0+Y3JvcF93aWR0aCA8PSAwIHx8IGluZm8tPmNyb3Bfd2lkdGggPiBpbmZvLT5vdXRwdXRfd2lkdGggfHwKLQlpbmZvLT5jcm9wX2hlaWdodCA8PSAwIHx8IGluZm8tPmNyb3BfaGVpZ2h0ID4gaW5mby0+b3V0cHV0X2hlaWdodCB8fAotCWluZm8tPmNyb3BfeG9mZnNldCA+IGluZm8tPm91dHB1dF93aWR0aCAtIGluZm8tPmNyb3Bfd2lkdGggfHwKLQlpbmZvLT5jcm9wX3lvZmZzZXQgPiBpbmZvLT5vdXRwdXRfaGVpZ2h0IC0gaW5mby0+Y3JvcF9oZWlnaHQpCisgICAgICAgIGluZm8tPmNyb3BfaGVpZ2h0IDw9IDAgfHwgaW5mby0+Y3JvcF9oZWlnaHQgPiBpbmZvLT5vdXRwdXRfaGVpZ2h0IHx8CisgICAgICAgIGluZm8tPmNyb3BfeG9mZnNldCA+IGluZm8tPm91dHB1dF93aWR0aCAtIGluZm8tPmNyb3Bfd2lkdGggfHwKKyAgICAgICAgaW5mby0+Y3JvcF95b2Zmc2V0ID4gaW5mby0+b3V0cHV0X2hlaWdodCAtIGluZm8tPmNyb3BfaGVpZ2h0KQogICAgICAgRVJSRVhJVChzcmNpbmZvLCBKRVJSX0JBRF9DUk9QX1NQRUMpOwogICAgIC8qIENvbnZlcnQgbmVnYXRpdmUgY3JvcCBvZmZzZXRzIGludG8gcmVndWxhciBvZmZzZXRzICovCiAgICAgaWYgKGluZm8tPmNyb3BfeG9mZnNldF9zZXQgPT0gSkNST1BfTkVHKQpAQCAtOTk3LDEwICsxMDA1LDE2IEBACiAgICAgZWxzZQogICAgICAgeW9mZnNldCA9IGluZm8tPmNyb3BfeW9mZnNldDsKICAgICAvKiBOb3cgYWRqdXN0IHNvIHRoYXQgdXBwZXIgbGVmdCBjb3JuZXIgZmFsbHMgYXQgYW4gaU1DVSBib3VuZGFyeSAqLwotICAgIGluZm8tPm91dHB1dF93aWR0aCA9Ci0gICAgICBpbmZvLT5jcm9wX3dpZHRoICsgKHhvZmZzZXQgJSBpbmZvLT5pTUNVX3NhbXBsZV93aWR0aCk7Ci0gICAgaW5mby0+b3V0cHV0X2hlaWdodCA9Ci0gICAgICBpbmZvLT5jcm9wX2hlaWdodCArICh5b2Zmc2V0ICUgaW5mby0+aU1DVV9zYW1wbGVfaGVpZ2h0KTsKKyAgICBpZiAoaW5mby0+Y3JvcF93aWR0aF9zZXQgPT0gSkNST1BfRk9SQ0UpCisgICAgICBpbmZvLT5vdXRwdXRfd2lkdGggPSBpbmZvLT5jcm9wX3dpZHRoOworICAgIGVsc2UKKyAgICAgIGluZm8tPm91dHB1dF93aWR0aCA9CisgICAgICAgIGluZm8tPmNyb3Bfd2lkdGggKyAoeG9mZnNldCAlIGluZm8tPmlNQ1Vfc2FtcGxlX3dpZHRoKTsKKyAgICBpZiAoaW5mby0+Y3JvcF9oZWlnaHRfc2V0ID09IEpDUk9QX0ZPUkNFKQorICAgICAgaW5mby0+b3V0cHV0X2hlaWdodCA9IGluZm8tPmNyb3BfaGVpZ2h0OworICAgIGVsc2UKKyAgICAgIGluZm8tPm91dHB1dF9oZWlnaHQgPQorICAgICAgICBpbmZvLT5jcm9wX2hlaWdodCArICh5b2Zmc2V0ICUgaW5mby0+aU1DVV9zYW1wbGVfaGVpZ2h0KTsKICAgICAvKiBTYXZlIHgveSBvZmZzZXRzIG1lYXN1cmVkIGluIGlNQ1VzICovCiAgICAgaW5mby0+eF9jcm9wX29mZnNldCA9IHhvZmZzZXQgLyBpbmZvLT5pTUNVX3NhbXBsZV93aWR0aDsKICAgICBpbmZvLT55X2Nyb3Bfb2Zmc2V0ID0geW9mZnNldCAvIGluZm8tPmlNQ1Vfc2FtcGxlX2hlaWdodDsKQEAgLTEwNzksMzAgKzEwOTMsMzAgQEAKICAgaWYgKG5lZWRfd29ya3NwYWNlKSB7CiAgICAgY29lZl9hcnJheXMgPSAoanZpcnRfYmFycmF5X3B0ciAqKQogICAgICAgKCpzcmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgc3JjaW5mbywgSlBPT0xfSU1BR0UsCi0JCVNJWkVPRihqdmlydF9iYXJyYXlfcHRyKSAqIGluZm8tPm51bV9jb21wb25lbnRzKTsKKyAgICAgICAgICAgICAgICBTSVpFT0YoanZpcnRfYmFycmF5X3B0cikgKiBpbmZvLT5udW1fY29tcG9uZW50cyk7CiAgICAgd2lkdGhfaW5faU1DVXMgPSAoSkRJTUVOU0lPTikKICAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGluZm8tPm91dHB1dF93aWR0aCwKLQkJICAgIChsb25nKSBpbmZvLT5pTUNVX3NhbXBsZV93aWR0aCk7CisgICAgICAgICAgICAgICAgICAgIChsb25nKSBpbmZvLT5pTUNVX3NhbXBsZV93aWR0aCk7CiAgICAgaGVpZ2h0X2luX2lNQ1VzID0gKEpESU1FTlNJT04pCiAgICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBpbmZvLT5vdXRwdXRfaGVpZ2h0LAotCQkgICAgKGxvbmcpIGluZm8tPmlNQ1Vfc2FtcGxlX2hlaWdodCk7CisgICAgICAgICAgICAgICAgICAgIChsb25nKSBpbmZvLT5pTUNVX3NhbXBsZV9oZWlnaHQpOwogICAgIGZvciAoY2kgPSAwOyBjaSA8IGluZm8tPm51bV9jb21wb25lbnRzOyBjaSsrKSB7CiAgICAgICBjb21wcHRyID0gc3JjaW5mby0+Y29tcF9pbmZvICsgY2k7CiAgICAgICBpZiAoaW5mby0+bnVtX2NvbXBvbmVudHMgPT0gMSkgewotCS8qIHdlJ3JlIGdvaW5nIHRvIGZvcmNlIHNhbXAgZmFjdG9ycyB0byAxeDEgaW4gdGhpcyBjYXNlICovCi0JaF9zYW1wX2ZhY3RvciA9IHZfc2FtcF9mYWN0b3IgPSAxOworICAgICAgICAvKiB3ZSdyZSBnb2luZyB0byBmb3JjZSBzYW1wIGZhY3RvcnMgdG8gMXgxIGluIHRoaXMgY2FzZSAqLworICAgICAgICBoX3NhbXBfZmFjdG9yID0gdl9zYW1wX2ZhY3RvciA9IDE7CiAgICAgICB9IGVsc2UgaWYgKHRyYW5zcG9zZV9pdCkgewotCWhfc2FtcF9mYWN0b3IgPSBjb21wcHRyLT52X3NhbXBfZmFjdG9yOwotCXZfc2FtcF9mYWN0b3IgPSBjb21wcHRyLT5oX3NhbXBfZmFjdG9yOworICAgICAgICBoX3NhbXBfZmFjdG9yID0gY29tcHB0ci0+dl9zYW1wX2ZhY3RvcjsKKyAgICAgICAgdl9zYW1wX2ZhY3RvciA9IGNvbXBwdHItPmhfc2FtcF9mYWN0b3I7CiAgICAgICB9IGVsc2UgewotCWhfc2FtcF9mYWN0b3IgPSBjb21wcHRyLT5oX3NhbXBfZmFjdG9yOwotCXZfc2FtcF9mYWN0b3IgPSBjb21wcHRyLT52X3NhbXBfZmFjdG9yOworICAgICAgICBoX3NhbXBfZmFjdG9yID0gY29tcHB0ci0+aF9zYW1wX2ZhY3RvcjsKKyAgICAgICAgdl9zYW1wX2ZhY3RvciA9IGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7CiAgICAgICB9CiAgICAgICB3aWR0aF9pbl9ibG9ja3MgPSB3aWR0aF9pbl9pTUNVcyAqIGhfc2FtcF9mYWN0b3I7CiAgICAgICBoZWlnaHRfaW5fYmxvY2tzID0gaGVpZ2h0X2luX2lNQ1VzICogdl9zYW1wX2ZhY3RvcjsKICAgICAgIGNvZWZfYXJyYXlzW2NpXSA9ICgqc3JjaW5mby0+bWVtLT5yZXF1ZXN0X3ZpcnRfYmFycmF5KQotCSgoal9jb21tb25fcHRyKSBzcmNpbmZvLCBKUE9PTF9JTUFHRSwgRkFMU0UsCi0JIHdpZHRoX2luX2Jsb2NrcywgaGVpZ2h0X2luX2Jsb2NrcywgKEpESU1FTlNJT04pIHZfc2FtcF9mYWN0b3IpOworICAgICAgICAoKGpfY29tbW9uX3B0cikgc3JjaW5mbywgSlBPT0xfSU1BR0UsIEZBTFNFLAorICAgICAgICAgd2lkdGhfaW5fYmxvY2tzLCBoZWlnaHRfaW5fYmxvY2tzLCAoSkRJTUVOU0lPTikgdl9zYW1wX2ZhY3Rvcik7CiAgICAgfQogICAgIGluZm8tPndvcmtzcGFjZV9jb2VmX2FycmF5cyA9IGNvZWZfYXJyYXlzOwogICB9IGVsc2UKQEAgLTExNDYsMTEgKzExNjAsMTEgQEAKICAgICBxdGJscHRyID0gZHN0aW5mby0+cXVhbnRfdGJsX3B0cnNbdGJsbm9dOwogICAgIGlmIChxdGJscHRyICE9IE5VTEwpIHsKICAgICAgIGZvciAoaSA9IDA7IGkgPCBEQ1RTSVpFOyBpKyspIHsKLQlmb3IgKGogPSAwOyBqIDwgaTsgaisrKSB7Ci0JICBxdGVtcCA9IHF0YmxwdHItPnF1YW50dmFsW2kqRENUU0laRStqXTsKLQkgIHF0YmxwdHItPnF1YW50dmFsW2kqRENUU0laRStqXSA9IHF0YmxwdHItPnF1YW50dmFsW2oqRENUU0laRStpXTsKLQkgIHF0YmxwdHItPnF1YW50dmFsW2oqRENUU0laRStpXSA9IHF0ZW1wOwotCX0KKyAgICAgICAgZm9yIChqID0gMDsgaiA8IGk7IGorKykgeworICAgICAgICAgIHF0ZW1wID0gcXRibHB0ci0+cXVhbnR2YWxbaSpEQ1RTSVpFK2pdOworICAgICAgICAgIHF0YmxwdHItPnF1YW50dmFsW2kqRENUU0laRStqXSA9IHF0YmxwdHItPnF1YW50dmFsW2oqRENUU0laRStpXTsKKyAgICAgICAgICBxdGJscHRyLT5xdWFudHZhbFtqKkRDVFNJWkUraV0gPSBxdGVtcDsKKyAgICAgICAgfQogICAgICAgfQogICAgIH0KICAgfQpAQCAtMTE2Miw5ICsxMTc2LDEwIEBACiAgKiBXZSB0cnkgdG8gYWRqdXN0IHRoZSBUYWdzIEV4aWZJbWFnZVdpZHRoIGFuZCBFeGlmSW1hZ2VIZWlnaHQgaWYgcG9zc2libGUuCiAgKi8KIAorI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gNzAKIExPQ0FMKHZvaWQpCiBhZGp1c3RfZXhpZl9wYXJhbWV0ZXJzIChKT0NURVQgRkFSICogZGF0YSwgdW5zaWduZWQgaW50IGxlbmd0aCwKLQkJCUpESU1FTlNJT04gbmV3X3dpZHRoLCBKRElNRU5TSU9OIG5ld19oZWlnaHQpCisgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG5ld193aWR0aCwgSkRJTUVOU0lPTiBuZXdfaGVpZ2h0KQogewogICBib29sZWFuIGlzX21vdG9yb2xhOyAvKiBGbGFnIGZvciBieXRlIG9yZGVyICovCiAgIHVuc2lnbmVkIGludCBudW1iZXJfb2ZfdGFncywgdGFnbnVtOwpAQCAtMTI4MSwzNiArMTI5NiwzNyBAQAogICAgIH0KICAgICBpZiAodGFnbnVtID09IDB4QTAwMiB8fCB0YWdudW0gPT0gMHhBMDAzKSB7CiAgICAgICBpZiAodGFnbnVtID09IDB4QTAwMikKLQluZXdfdmFsdWUgPSBuZXdfd2lkdGg7IC8qIEV4aWZJbWFnZVdpZHRoIFRhZyAqLworICAgICAgICBuZXdfdmFsdWUgPSBuZXdfd2lkdGg7IC8qIEV4aWZJbWFnZVdpZHRoIFRhZyAqLwogICAgICAgZWxzZQotCW5ld192YWx1ZSA9IG5ld19oZWlnaHQ7IC8qIEV4aWZJbWFnZUhlaWdodCBUYWcgKi8KKyAgICAgICAgbmV3X3ZhbHVlID0gbmV3X2hlaWdodDsgLyogRXhpZkltYWdlSGVpZ2h0IFRhZyAqLwogICAgICAgaWYgKGlzX21vdG9yb2xhKSB7Ci0JZGF0YVtvZmZzZXQrMl0gPSAwOyAvKiBGb3JtYXQgPSB1bnNpZ25lZCBsb25nICg0IG9jdGV0cykgKi8KLQlkYXRhW29mZnNldCszXSA9IDQ7Ci0JZGF0YVtvZmZzZXQrNF0gPSAwOyAvKiBOdW1iZXIgT2YgQ29tcG9uZW50cyA9IDEgKi8KLQlkYXRhW29mZnNldCs1XSA9IDA7Ci0JZGF0YVtvZmZzZXQrNl0gPSAwOwotCWRhdGFbb2Zmc2V0KzddID0gMTsKLQlkYXRhW29mZnNldCs4XSA9IDA7Ci0JZGF0YVtvZmZzZXQrOV0gPSAwOwotCWRhdGFbb2Zmc2V0KzEwXSA9IChKT0NURVQpKChuZXdfdmFsdWUgPj4gOCkgJiAweEZGKTsKLQlkYXRhW29mZnNldCsxMV0gPSAoSk9DVEVUKShuZXdfdmFsdWUgJiAweEZGKTsKKyAgICAgICAgZGF0YVtvZmZzZXQrMl0gPSAwOyAvKiBGb3JtYXQgPSB1bnNpZ25lZCBsb25nICg0IG9jdGV0cykgKi8KKyAgICAgICAgZGF0YVtvZmZzZXQrM10gPSA0OworICAgICAgICBkYXRhW29mZnNldCs0XSA9IDA7IC8qIE51bWJlciBPZiBDb21wb25lbnRzID0gMSAqLworICAgICAgICBkYXRhW29mZnNldCs1XSA9IDA7CisgICAgICAgIGRhdGFbb2Zmc2V0KzZdID0gMDsKKyAgICAgICAgZGF0YVtvZmZzZXQrN10gPSAxOworICAgICAgICBkYXRhW29mZnNldCs4XSA9IDA7CisgICAgICAgIGRhdGFbb2Zmc2V0KzldID0gMDsKKyAgICAgICAgZGF0YVtvZmZzZXQrMTBdID0gKEpPQ1RFVCkoKG5ld192YWx1ZSA+PiA4KSAmIDB4RkYpOworICAgICAgICBkYXRhW29mZnNldCsxMV0gPSAoSk9DVEVUKShuZXdfdmFsdWUgJiAweEZGKTsKICAgICAgIH0gZWxzZSB7Ci0JZGF0YVtvZmZzZXQrMl0gPSA0OyAvKiBGb3JtYXQgPSB1bnNpZ25lZCBsb25nICg0IG9jdGV0cykgKi8KLQlkYXRhW29mZnNldCszXSA9IDA7Ci0JZGF0YVtvZmZzZXQrNF0gPSAxOyAvKiBOdW1iZXIgT2YgQ29tcG9uZW50cyA9IDEgKi8KLQlkYXRhW29mZnNldCs1XSA9IDA7Ci0JZGF0YVtvZmZzZXQrNl0gPSAwOwotCWRhdGFbb2Zmc2V0KzddID0gMDsKLQlkYXRhW29mZnNldCs4XSA9IChKT0NURVQpKG5ld192YWx1ZSAmIDB4RkYpOwotCWRhdGFbb2Zmc2V0KzldID0gKEpPQ1RFVCkoKG5ld192YWx1ZSA+PiA4KSAmIDB4RkYpOwotCWRhdGFbb2Zmc2V0KzEwXSA9IDA7Ci0JZGF0YVtvZmZzZXQrMTFdID0gMDsKKyAgICAgICAgZGF0YVtvZmZzZXQrMl0gPSA0OyAvKiBGb3JtYXQgPSB1bnNpZ25lZCBsb25nICg0IG9jdGV0cykgKi8KKyAgICAgICAgZGF0YVtvZmZzZXQrM10gPSAwOworICAgICAgICBkYXRhW29mZnNldCs0XSA9IDE7IC8qIE51bWJlciBPZiBDb21wb25lbnRzID0gMSAqLworICAgICAgICBkYXRhW29mZnNldCs1XSA9IDA7CisgICAgICAgIGRhdGFbb2Zmc2V0KzZdID0gMDsKKyAgICAgICAgZGF0YVtvZmZzZXQrN10gPSAwOworICAgICAgICBkYXRhW29mZnNldCs4XSA9IChKT0NURVQpKG5ld192YWx1ZSAmIDB4RkYpOworICAgICAgICBkYXRhW29mZnNldCs5XSA9IChKT0NURVQpKChuZXdfdmFsdWUgPj4gOCkgJiAweEZGKTsKKyAgICAgICAgZGF0YVtvZmZzZXQrMTBdID0gMDsKKyAgICAgICAgZGF0YVtvZmZzZXQrMTFdID0gMDsKICAgICAgIH0KICAgICB9CiAgICAgb2Zmc2V0ICs9IDEyOwogICB9IHdoaWxlICgtLW51bWJlcl9vZl90YWdzKTsKIH0KKyNlbmRpZgogCiAKIC8qIEFkanVzdCBvdXRwdXQgaW1hZ2UgcGFyYW1ldGVycyBhcyBuZWVkZWQuCkBAIC0xMzI2LDkgKzEzNDIsOSBAQAogCiBHTE9CQUwoanZpcnRfYmFycmF5X3B0ciAqKQoganRyYW5zZm9ybV9hZGp1c3RfcGFyYW1ldGVycyAoal9kZWNvbXByZXNzX3B0ciBzcmNpbmZvLAotCQkJICAgICAgal9jb21wcmVzc19wdHIgZHN0aW5mbywKLQkJCSAgICAgIGp2aXJ0X2JhcnJheV9wdHIgKnNyY19jb2VmX2FycmF5cywKLQkJCSAgICAgIGpwZWdfdHJhbnNmb3JtX2luZm8gKmluZm8pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqX2NvbXByZXNzX3B0ciBkc3RpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganZpcnRfYmFycmF5X3B0ciAqc3JjX2NvZWZfYXJyYXlzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganBlZ190cmFuc2Zvcm1faW5mbyAqaW5mbykKIHsKICAgLyogSWYgZm9yY2UtdG8tZ3JheXNjYWxlIGlzIHJlcXVlc3RlZCwgYWRqdXN0IGRlc3RpbmF0aW9uIHBhcmFtZXRlcnMgKi8KICAgaWYgKGluZm8tPmZvcmNlX2dyYXlzY2FsZSkgewpAQCAtMTMzOCwxMSArMTM1NCwxMSBAQAogICAgICAqIGlzbid0IHdvcnRoIGV4dHJhIGNvZGUgc3BhY2UuICBCdXQgd2UgY2hlY2sgaXQgdG8gYXZvaWQgY3Jhc2hpbmcuKQogICAgICAqLwogICAgIGlmICgoKGRzdGluZm8tPmpwZWdfY29sb3Jfc3BhY2UgPT0gSkNTX1lDYkNyICYmCi0JICBkc3RpbmZvLT5udW1fY29tcG9uZW50cyA9PSAzKSB8fAotCSAoZHN0aW5mby0+anBlZ19jb2xvcl9zcGFjZSA9PSBKQ1NfR1JBWVNDQUxFICYmCi0JICBkc3RpbmZvLT5udW1fY29tcG9uZW50cyA9PSAxKSkgJiYKLQlzcmNpbmZvLT5jb21wX2luZm9bMF0uaF9zYW1wX2ZhY3RvciA9PSBzcmNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvciAmJgotCXNyY2luZm8tPmNvbXBfaW5mb1swXS52X3NhbXBfZmFjdG9yID09IHNyY2luZm8tPm1heF92X3NhbXBfZmFjdG9yKSB7CisgICAgICAgICAgZHN0aW5mby0+bnVtX2NvbXBvbmVudHMgPT0gMykgfHwKKyAgICAgICAgIChkc3RpbmZvLT5qcGVnX2NvbG9yX3NwYWNlID09IEpDU19HUkFZU0NBTEUgJiYKKyAgICAgICAgICBkc3RpbmZvLT5udW1fY29tcG9uZW50cyA9PSAxKSkgJiYKKyAgICAgICAgc3JjaW5mby0+Y29tcF9pbmZvWzBdLmhfc2FtcF9mYWN0b3IgPT0gc3JjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IgJiYKKyAgICAgICAgc3JjaW5mby0+Y29tcF9pbmZvWzBdLnZfc2FtcF9mYWN0b3IgPT0gc3JjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IpIHsKICAgICAgIC8qIFdlIHVzZSBqcGVnX3NldF9jb2xvcnNwYWNlIHRvIG1ha2Ugc3VyZSBzdWJzaWRpYXJ5IHNldHRpbmdzIGdldCBmaXhlZAogICAgICAgICogcHJvcGVybHkuICBBbW9uZyBvdGhlciB0aGluZ3MsIGl0IHNldHMgdGhlIHRhcmdldCBoX3NhbXBfZmFjdG9yICYKICAgICAgICAqIHZfc2FtcF9mYWN0b3IgdG8gMSwgd2hpY2ggdHlwaWNhbGx5IHdvbid0IG1hdGNoIHRoZSBzb3VyY2UuCkBAIC0xNDA3LDExICsxNDIzLDExIEBACiAjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA3MAogICAgIC8qIEFkanVzdCBFeGlmIGltYWdlIHBhcmFtZXRlcnMgKi8KICAgICBpZiAoZHN0aW5mby0+anBlZ193aWR0aCAhPSBzcmNpbmZvLT5pbWFnZV93aWR0aCB8fAotCWRzdGluZm8tPmpwZWdfaGVpZ2h0ICE9IHNyY2luZm8tPmltYWdlX2hlaWdodCkKKyAgICAgICAgZHN0aW5mby0+anBlZ19oZWlnaHQgIT0gc3JjaW5mby0+aW1hZ2VfaGVpZ2h0KQogICAgICAgLyogQWxpZ24gZGF0YSBzZWdtZW50IHRvIHN0YXJ0IG9mIFRJRkYgc3RydWN0dXJlIGZvciBwYXJzaW5nICovCiAgICAgICBhZGp1c3RfZXhpZl9wYXJhbWV0ZXJzKHNyY2luZm8tPm1hcmtlcl9saXN0LT5kYXRhICsgNiwKLQlzcmNpbmZvLT5tYXJrZXJfbGlzdC0+ZGF0YV9sZW5ndGggLSA2LAotCWRzdGluZm8tPmpwZWdfd2lkdGgsIGRzdGluZm8tPmpwZWdfaGVpZ2h0KTsKKyAgICAgICAgc3JjaW5mby0+bWFya2VyX2xpc3QtPmRhdGFfbGVuZ3RoIC0gNiwKKyAgICAgICAgZHN0aW5mby0+anBlZ193aWR0aCwgZHN0aW5mby0+anBlZ19oZWlnaHQpOwogI2VuZGlmCiAgIH0KIApAQCAtMTQzMyw5ICsxNDQ5LDkgQEAKIAogR0xPQkFMKHZvaWQpCiBqdHJhbnNmb3JtX2V4ZWN1dGVfdHJhbnNmb3JtIChqX2RlY29tcHJlc3NfcHRyIHNyY2luZm8sCi0JCQkgICAgICBqX2NvbXByZXNzX3B0ciBkc3RpbmZvLAotCQkJICAgICAganZpcnRfYmFycmF5X3B0ciAqc3JjX2NvZWZfYXJyYXlzLAotCQkJICAgICAganBlZ190cmFuc2Zvcm1faW5mbyAqaW5mbykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpfY29tcHJlc3NfcHRyIGRzdGluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdmlydF9iYXJyYXlfcHRyICpzcmNfY29lZl9hcnJheXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcGVnX3RyYW5zZm9ybV9pbmZvICppbmZvKQogewogICBqdmlydF9iYXJyYXlfcHRyICpkc3RfY29lZl9hcnJheXMgPSBpbmZvLT53b3Jrc3BhY2VfY29lZl9hcnJheXM7CiAKQEAgLTE0NDYsMzkgKzE0NjIsMzkgQEAKICAgY2FzZSBKWEZPUk1fTk9ORToKICAgICBpZiAoaW5mby0+eF9jcm9wX29mZnNldCAhPSAwIHx8IGluZm8tPnlfY3JvcF9vZmZzZXQgIT0gMCkKICAgICAgIGRvX2Nyb3Aoc3JjaW5mbywgZHN0aW5mbywgaW5mby0+eF9jcm9wX29mZnNldCwgaW5mby0+eV9jcm9wX29mZnNldCwKLQkgICAgICBzcmNfY29lZl9hcnJheXMsIGRzdF9jb2VmX2FycmF5cyk7CisgICAgICAgICAgICAgIHNyY19jb2VmX2FycmF5cywgZHN0X2NvZWZfYXJyYXlzKTsKICAgICBicmVhazsKICAgY2FzZSBKWEZPUk1fRkxJUF9IOgogICAgIGlmIChpbmZvLT55X2Nyb3Bfb2Zmc2V0ICE9IDAgfHwgaW5mby0+c2xvd19oZmxpcCkKICAgICAgIGRvX2ZsaXBfaChzcmNpbmZvLCBkc3RpbmZvLCBpbmZvLT54X2Nyb3Bfb2Zmc2V0LCBpbmZvLT55X2Nyb3Bfb2Zmc2V0LAotCQlzcmNfY29lZl9hcnJheXMsIGRzdF9jb2VmX2FycmF5cyk7CisgICAgICAgICAgICAgICAgc3JjX2NvZWZfYXJyYXlzLCBkc3RfY29lZl9hcnJheXMpOwogICAgIGVsc2UKICAgICAgIGRvX2ZsaXBfaF9ub19jcm9wKHNyY2luZm8sIGRzdGluZm8sIGluZm8tPnhfY3JvcF9vZmZzZXQsCi0JCQlzcmNfY29lZl9hcnJheXMpOworICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2NvZWZfYXJyYXlzKTsKICAgICBicmVhazsKICAgY2FzZSBKWEZPUk1fRkxJUF9WOgogICAgIGRvX2ZsaXBfdihzcmNpbmZvLCBkc3RpbmZvLCBpbmZvLT54X2Nyb3Bfb2Zmc2V0LCBpbmZvLT55X2Nyb3Bfb2Zmc2V0LAotCSAgICAgIHNyY19jb2VmX2FycmF5cywgZHN0X2NvZWZfYXJyYXlzKTsKKyAgICAgICAgICAgICAgc3JjX2NvZWZfYXJyYXlzLCBkc3RfY29lZl9hcnJheXMpOwogICAgIGJyZWFrOwogICBjYXNlIEpYRk9STV9UUkFOU1BPU0U6CiAgICAgZG9fdHJhbnNwb3NlKHNyY2luZm8sIGRzdGluZm8sIGluZm8tPnhfY3JvcF9vZmZzZXQsIGluZm8tPnlfY3JvcF9vZmZzZXQsCi0JCSBzcmNfY29lZl9hcnJheXMsIGRzdF9jb2VmX2FycmF5cyk7CisgICAgICAgICAgICAgICAgIHNyY19jb2VmX2FycmF5cywgZHN0X2NvZWZfYXJyYXlzKTsKICAgICBicmVhazsKICAgY2FzZSBKWEZPUk1fVFJBTlNWRVJTRToKICAgICBkb190cmFuc3ZlcnNlKHNyY2luZm8sIGRzdGluZm8sIGluZm8tPnhfY3JvcF9vZmZzZXQsIGluZm8tPnlfY3JvcF9vZmZzZXQsCi0JCSAgc3JjX2NvZWZfYXJyYXlzLCBkc3RfY29lZl9hcnJheXMpOworICAgICAgICAgICAgICAgICAgc3JjX2NvZWZfYXJyYXlzLCBkc3RfY29lZl9hcnJheXMpOwogICAgIGJyZWFrOwogICBjYXNlIEpYRk9STV9ST1RfOTA6CiAgICAgZG9fcm90XzkwKHNyY2luZm8sIGRzdGluZm8sIGluZm8tPnhfY3JvcF9vZmZzZXQsIGluZm8tPnlfY3JvcF9vZmZzZXQsCi0JICAgICAgc3JjX2NvZWZfYXJyYXlzLCBkc3RfY29lZl9hcnJheXMpOworICAgICAgICAgICAgICBzcmNfY29lZl9hcnJheXMsIGRzdF9jb2VmX2FycmF5cyk7CiAgICAgYnJlYWs7CiAgIGNhc2UgSlhGT1JNX1JPVF8xODA6CiAgICAgZG9fcm90XzE4MChzcmNpbmZvLCBkc3RpbmZvLCBpbmZvLT54X2Nyb3Bfb2Zmc2V0LCBpbmZvLT55X2Nyb3Bfb2Zmc2V0LAotCSAgICAgICBzcmNfY29lZl9hcnJheXMsIGRzdF9jb2VmX2FycmF5cyk7CisgICAgICAgICAgICAgICBzcmNfY29lZl9hcnJheXMsIGRzdF9jb2VmX2FycmF5cyk7CiAgICAgYnJlYWs7CiAgIGNhc2UgSlhGT1JNX1JPVF8yNzA6CiAgICAgZG9fcm90XzI3MChzcmNpbmZvLCBkc3RpbmZvLCBpbmZvLT54X2Nyb3Bfb2Zmc2V0LCBpbmZvLT55X2Nyb3Bfb2Zmc2V0LAotCSAgICAgICBzcmNfY29lZl9hcnJheXMsIGRzdF9jb2VmX2FycmF5cyk7CisgICAgICAgICAgICAgICBzcmNfY29lZl9hcnJheXMsIGRzdF9jb2VmX2FycmF5cyk7CiAgICAgYnJlYWs7CiAgIH0KIH0KQEAgLTE1MDYsOCArMTUyMiw4IEBACiAKIEdMT0JBTChib29sZWFuKQoganRyYW5zZm9ybV9wZXJmZWN0X3RyYW5zZm9ybShKRElNRU5TSU9OIGltYWdlX3dpZHRoLCBKRElNRU5TSU9OIGltYWdlX2hlaWdodCwKLQkJCSAgICAgaW50IE1DVV93aWR0aCwgaW50IE1DVV9oZWlnaHQsCi0JCQkgICAgIEpYRk9STV9DT0RFIHRyYW5zZm9ybSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IE1DVV93aWR0aCwgaW50IE1DVV9oZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpYRk9STV9DT0RFIHRyYW5zZm9ybSkKIHsKICAgYm9vbGVhbiByZXN1bHQgPSBUUlVFOyAvKiBpbml0aWFsaXplIFRSVUUgKi8KIApAQCAtMTU3MCw3ICsxNTg2LDcgQEAKIAogR0xPQkFMKHZvaWQpCiBqY29weV9tYXJrZXJzX2V4ZWN1dGUgKGpfZGVjb21wcmVzc19wdHIgc3JjaW5mbywgal9jb21wcmVzc19wdHIgZHN0aW5mbywKLQkJICAgICAgIEpDT1BZX09QVElPTiBvcHRpb24pCisgICAgICAgICAgICAgICAgICAgICAgIEpDT1BZX09QVElPTiBvcHRpb24pCiB7CiAgIGpwZWdfc2F2ZWRfbWFya2VyX3B0ciBtYXJrZXI7CiAKQEAgLTE1ODEsMzQgKzE1OTcsMzQgQEAKICAgICovCiAgIGZvciAobWFya2VyID0gc3JjaW5mby0+bWFya2VyX2xpc3Q7IG1hcmtlciAhPSBOVUxMOyBtYXJrZXIgPSBtYXJrZXItPm5leHQpIHsKICAgICBpZiAoZHN0aW5mby0+d3JpdGVfSkZJRl9oZWFkZXIgJiYKLQltYXJrZXItPm1hcmtlciA9PSBKUEVHX0FQUDAgJiYKLQltYXJrZXItPmRhdGFfbGVuZ3RoID49IDUgJiYKLQlHRVRKT0NURVQobWFya2VyLT5kYXRhWzBdKSA9PSAweDRBICYmCi0JR0VUSk9DVEVUKG1hcmtlci0+ZGF0YVsxXSkgPT0gMHg0NiAmJgotCUdFVEpPQ1RFVChtYXJrZXItPmRhdGFbMl0pID09IDB4NDkgJiYKLQlHRVRKT0NURVQobWFya2VyLT5kYXRhWzNdKSA9PSAweDQ2ICYmCi0JR0VUSk9DVEVUKG1hcmtlci0+ZGF0YVs0XSkgPT0gMCkKLSAgICAgIGNvbnRpbnVlOwkJCS8qIHJlamVjdCBkdXBsaWNhdGUgSkZJRiAqLworICAgICAgICBtYXJrZXItPm1hcmtlciA9PSBKUEVHX0FQUDAgJiYKKyAgICAgICAgbWFya2VyLT5kYXRhX2xlbmd0aCA+PSA1ICYmCisgICAgICAgIEdFVEpPQ1RFVChtYXJrZXItPmRhdGFbMF0pID09IDB4NEEgJiYKKyAgICAgICAgR0VUSk9DVEVUKG1hcmtlci0+ZGF0YVsxXSkgPT0gMHg0NiAmJgorICAgICAgICBHRVRKT0NURVQobWFya2VyLT5kYXRhWzJdKSA9PSAweDQ5ICYmCisgICAgICAgIEdFVEpPQ1RFVChtYXJrZXItPmRhdGFbM10pID09IDB4NDYgJiYKKyAgICAgICAgR0VUSk9DVEVUKG1hcmtlci0+ZGF0YVs0XSkgPT0gMCkKKyAgICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAgICAgLyogcmVqZWN0IGR1cGxpY2F0ZSBKRklGICovCiAgICAgaWYgKGRzdGluZm8tPndyaXRlX0Fkb2JlX21hcmtlciAmJgotCW1hcmtlci0+bWFya2VyID09IEpQRUdfQVBQMCsxNCAmJgotCW1hcmtlci0+ZGF0YV9sZW5ndGggPj0gNSAmJgotCUdFVEpPQ1RFVChtYXJrZXItPmRhdGFbMF0pID09IDB4NDEgJiYKLQlHRVRKT0NURVQobWFya2VyLT5kYXRhWzFdKSA9PSAweDY0ICYmCi0JR0VUSk9DVEVUKG1hcmtlci0+ZGF0YVsyXSkgPT0gMHg2RiAmJgotCUdFVEpPQ1RFVChtYXJrZXItPmRhdGFbM10pID09IDB4NjIgJiYKLQlHRVRKT0NURVQobWFya2VyLT5kYXRhWzRdKSA9PSAweDY1KQotICAgICAgY29udGludWU7CQkJLyogcmVqZWN0IGR1cGxpY2F0ZSBBZG9iZSAqLworICAgICAgICBtYXJrZXItPm1hcmtlciA9PSBKUEVHX0FQUDArMTQgJiYKKyAgICAgICAgbWFya2VyLT5kYXRhX2xlbmd0aCA+PSA1ICYmCisgICAgICAgIEdFVEpPQ1RFVChtYXJrZXItPmRhdGFbMF0pID09IDB4NDEgJiYKKyAgICAgICAgR0VUSk9DVEVUKG1hcmtlci0+ZGF0YVsxXSkgPT0gMHg2NCAmJgorICAgICAgICBHRVRKT0NURVQobWFya2VyLT5kYXRhWzJdKSA9PSAweDZGICYmCisgICAgICAgIEdFVEpPQ1RFVChtYXJrZXItPmRhdGFbM10pID09IDB4NjIgJiYKKyAgICAgICAgR0VUSk9DVEVUKG1hcmtlci0+ZGF0YVs0XSkgPT0gMHg2NSkKKyAgICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAgICAgLyogcmVqZWN0IGR1cGxpY2F0ZSBBZG9iZSAqLwogI2lmZGVmIE5FRURfRkFSX1BPSU5URVJTCiAgICAgLyogV2UgY291bGQgdXNlIGpwZWdfd3JpdGVfbWFya2VyIGlmIHRoZSBkYXRhIHdlcmVuJ3QgRkFSLi4uICovCiAgICAgewogICAgICAgdW5zaWduZWQgaW50IGk7CiAgICAgICBqcGVnX3dyaXRlX21faGVhZGVyKGRzdGluZm8sIG1hcmtlci0+bWFya2VyLCBtYXJrZXItPmRhdGFfbGVuZ3RoKTsKICAgICAgIGZvciAoaSA9IDA7IGkgPCBtYXJrZXItPmRhdGFfbGVuZ3RoOyBpKyspCi0JanBlZ193cml0ZV9tX2J5dGUoZHN0aW5mbywgbWFya2VyLT5kYXRhW2ldKTsKKyAgICAgICAganBlZ193cml0ZV9tX2J5dGUoZHN0aW5mbywgbWFya2VyLT5kYXRhW2ldKTsKICAgICB9CiAjZWxzZQogICAgIGpwZWdfd3JpdGVfbWFya2VyKGRzdGluZm8sIG1hcmtlci0+bWFya2VyLAotCQkgICAgICBtYXJrZXItPmRhdGEsIG1hcmtlci0+ZGF0YV9sZW5ndGgpOworICAgICAgICAgICAgICAgICAgICAgIG1hcmtlci0+ZGF0YSwgbWFya2VyLT5kYXRhX2xlbmd0aCk7CiAjZW5kaWYKICAgfQogfQpkaWZmIC0tZ2l0IGEvdHJhbnN1cHAuaCBiL3RyYW5zdXBwLmgKaW5kZXggMTIyZDQ0OC4uNWIwZTFiYiAxMDA2NDQKLS0tIGEvdHJhbnN1cHAuaAorKysgYi90cmFuc3VwcC5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIHRyYW5zdXBwLmgKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTctMjAwOSwgVGhvbWFzIEcuIExhbmUsIEd1aWRvIFZvbGxiZWRpbmcuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTctMjAxMSwgVGhvbWFzIEcuIExhbmUsIEd1aWRvIFZvbGxiZWRpbmcuCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgogICoKQEAgLTE5LDcgKzE5LDcgQEAKIAogLyogSWYgeW91IGhhcHBlbiBub3QgdG8gd2FudCB0aGUgaW1hZ2UgdHJhbnNmb3JtIHN1cHBvcnQsIGRpc2FibGUgaXQgaGVyZSAqLwogI2lmbmRlZiBUUkFOU0ZPUk1TX1NVUFBPUlRFRAotI2RlZmluZSBUUkFOU0ZPUk1TX1NVUFBPUlRFRCAxCQkvKiAwIGRpc2FibGVzIHRyYW5zZm9ybSBjb2RlICovCisjZGVmaW5lIFRSQU5TRk9STVNfU1VQUE9SVEVEIDEgICAgICAgICAgLyogMCBkaXNhYmxlcyB0cmFuc2Zvcm0gY29kZSAqLwogI2VuZGlmCiAKIC8qCkBAIC01Nyw2ICs1Nyw3IEBACiAgKiBjb3JuZXIgdXAgYW5kL29yIGxlZnQgdG8gbWFrZSBpdCBzbywgc2ltdWx0YW5lb3VzbHkgaW5jcmVhc2luZyB0aGUgcmVnaW9uCiAgKiBkaW1lbnNpb25zIHRvIGtlZXAgdGhlIGxvd2VyIHJpZ2h0IGNyb3AgY29ybmVyIHVuY2hhbmdlZC4gIChUaHVzLCB0aGUKICAqIG91dHB1dCBpbWFnZSBjb3ZlcnMgYXQgbGVhc3QgdGhlIHJlcXVlc3RlZCByZWdpb24sIGJ1dCBtYXkgY292ZXIgbW9yZS4pCisgKiBUaGUgYWRqdXN0bWVudCBvZiB0aGUgcmVnaW9uIGRpbWVuc2lvbnMgbWF5IGJlIG9wdGlvbmFsbHkgZGlzYWJsZWQuCiAgKgogICogV2UgYWxzbyBwcm92aWRlIGEgbG9zc2xlc3MtcmVzaXplIG9wdGlvbiwgd2hpY2ggaXMga2luZCBvZiBhIGxvc3NsZXNzLWNyb3AKICAqIG9wZXJhdGlvbiBpbiB0aGUgRENUIGNvZWZmaWNpZW50IGJsb2NrIGRvbWFpbiAtIGl0IGRpc2NhcmRzIGhpZ2hlci1vcmRlcgpAQCAtNzksMTMgKzgwLDEzIEBACiAvKiBTaG9ydCBmb3JtcyBvZiBleHRlcm5hbCBuYW1lcyBmb3Igc3lzdGVtcyB3aXRoIGJyYWluLWRhbWFnZWQgbGlua2Vycy4gKi8KIAogI2lmZGVmIE5FRURfU0hPUlRfRVhURVJOQUxfTkFNRVMKLSNkZWZpbmUganRyYW5zZm9ybV9wYXJzZV9jcm9wX3NwZWMJalRyUGFyQ3JvcAotI2RlZmluZSBqdHJhbnNmb3JtX3JlcXVlc3Rfd29ya3NwYWNlCWpUclJlcXVlc3QKLSNkZWZpbmUganRyYW5zZm9ybV9hZGp1c3RfcGFyYW1ldGVycwlqVHJBZGp1c3QKLSNkZWZpbmUganRyYW5zZm9ybV9leGVjdXRlX3RyYW5zZm9ybQlqVHJFeGVjCi0jZGVmaW5lIGp0cmFuc2Zvcm1fcGVyZmVjdF90cmFuc2Zvcm0JalRyUGVyZmVjdAotI2RlZmluZSBqY29weV9tYXJrZXJzX3NldHVwCQlqQ01ya1NldHVwCi0jZGVmaW5lIGpjb3B5X21hcmtlcnNfZXhlY3V0ZQkJakNNcmtFeGVjCisjZGVmaW5lIGp0cmFuc2Zvcm1fcGFyc2VfY3JvcF9zcGVjICAgICAgalRyUGFyQ3JvcAorI2RlZmluZSBqdHJhbnNmb3JtX3JlcXVlc3Rfd29ya3NwYWNlICAgIGpUclJlcXVlc3QKKyNkZWZpbmUganRyYW5zZm9ybV9hZGp1c3RfcGFyYW1ldGVycyAgICBqVHJBZGp1c3QKKyNkZWZpbmUganRyYW5zZm9ybV9leGVjdXRlX3RyYW5zZm9ybSAgICBqVHJFeGVjCisjZGVmaW5lIGp0cmFuc2Zvcm1fcGVyZmVjdF90cmFuc2Zvcm0gICAgalRyUGVyZmVjdAorI2RlZmluZSBqY29weV9tYXJrZXJzX3NldHVwICAgICAgICAgICAgIGpDTXJrU2V0dXAKKyNkZWZpbmUgamNvcHlfbWFya2Vyc19leGVjdXRlICAgICAgICAgICBqQ01ya0V4ZWMKICNlbmRpZiAvKiBORUVEX1NIT1JUX0VYVEVSTkFMX05BTUVTICovCiAKIApAQCAtOTQsMjUgKzk1LDI3IEBACiAgKi8KIAogdHlwZWRlZiBlbnVtIHsKLQlKWEZPUk1fTk9ORSwJCS8qIG5vIHRyYW5zZm9ybWF0aW9uICovCi0JSlhGT1JNX0ZMSVBfSCwJCS8qIGhvcml6b250YWwgZmxpcCAqLwotCUpYRk9STV9GTElQX1YsCQkvKiB2ZXJ0aWNhbCBmbGlwICovCi0JSlhGT1JNX1RSQU5TUE9TRSwJLyogdHJhbnNwb3NlIGFjcm9zcyBVTC10by1MUiBheGlzICovCi0JSlhGT1JNX1RSQU5TVkVSU0UsCS8qIHRyYW5zcG9zZSBhY3Jvc3MgVVItdG8tTEwgYXhpcyAqLwotCUpYRk9STV9ST1RfOTAsCQkvKiA5MC1kZWdyZWUgY2xvY2t3aXNlIHJvdGF0aW9uICovCi0JSlhGT1JNX1JPVF8xODAsCQkvKiAxODAtZGVncmVlIHJvdGF0aW9uICovCi0JSlhGT1JNX1JPVF8yNzAJCS8qIDI3MC1kZWdyZWUgY2xvY2t3aXNlIChvciA5MCBjY3cpICovCisgIEpYRk9STV9OT05FLCAgICAgICAgICAgIC8qIG5vIHRyYW5zZm9ybWF0aW9uICovCisgIEpYRk9STV9GTElQX0gsICAgICAgICAgIC8qIGhvcml6b250YWwgZmxpcCAqLworICBKWEZPUk1fRkxJUF9WLCAgICAgICAgICAvKiB2ZXJ0aWNhbCBmbGlwICovCisgIEpYRk9STV9UUkFOU1BPU0UsICAgICAgIC8qIHRyYW5zcG9zZSBhY3Jvc3MgVUwtdG8tTFIgYXhpcyAqLworICBKWEZPUk1fVFJBTlNWRVJTRSwgICAgICAvKiB0cmFuc3Bvc2UgYWNyb3NzIFVSLXRvLUxMIGF4aXMgKi8KKyAgSlhGT1JNX1JPVF85MCwgICAgICAgICAgLyogOTAtZGVncmVlIGNsb2Nrd2lzZSByb3RhdGlvbiAqLworICBKWEZPUk1fUk9UXzE4MCwgICAgICAgICAvKiAxODAtZGVncmVlIHJvdGF0aW9uICovCisgIEpYRk9STV9ST1RfMjcwICAgICAgICAgIC8qIDI3MC1kZWdyZWUgY2xvY2t3aXNlIChvciA5MCBjY3cpICovCiB9IEpYRk9STV9DT0RFOwogCiAvKgogICogQ29kZXMgZm9yIGNyb3AgcGFyYW1ldGVycywgd2hpY2ggY2FuIGluZGl2aWR1YWxseSBiZSB1bnNwZWNpZmllZCwKLSAqIHBvc2l0aXZlLCBvciBuZWdhdGl2ZS4gIChOZWdhdGl2ZSB3aWR0aCBvciBoZWlnaHQgbWFrZXMgbm8gc2Vuc2UsIHRob3VnaC4pCisgKiBwb3NpdGl2ZSBvciBuZWdhdGl2ZSBmb3IgeG9mZnNldCBvciB5b2Zmc2V0LAorICogcG9zaXRpdmUgb3IgZm9yY2VkIGZvciB3aWR0aCBvciBoZWlnaHQuCiAgKi8KIAogdHlwZWRlZiBlbnVtIHsKLQlKQ1JPUF9VTlNFVCwKLQlKQ1JPUF9QT1MsCi0JSkNST1BfTkVHCisgIEpDUk9QX1VOU0VULAorICBKQ1JPUF9QT1MsCisgIEpDUk9QX05FRywKKyAgSkNST1BfRk9SQ0UKIH0gSkNST1BfQ09ERTsKIAogLyoKQEAgLTEyMywxMSArMTI2LDExIEBACiAKIHR5cGVkZWYgc3RydWN0IHsKICAgLyogT3B0aW9uczogc2V0IGJ5IGNhbGxlciAqLwotICBKWEZPUk1fQ09ERSB0cmFuc2Zvcm07CS8qIGltYWdlIHRyYW5zZm9ybSBvcGVyYXRvciAqLwotICBib29sZWFuIHBlcmZlY3Q7CQkvKiBpZiBUUlVFLCBmYWlsIGlmIHBhcnRpYWwgTUNVcyBhcmUgcmVxdWVzdGVkICovCi0gIGJvb2xlYW4gdHJpbTsJCQkvKiBpZiBUUlVFLCB0cmltIHBhcnRpYWwgTUNVcyBhcyBuZWVkZWQgKi8KLSAgYm9vbGVhbiBmb3JjZV9ncmF5c2NhbGU7CS8qIGlmIFRSVUUsIGNvbnZlcnQgY29sb3IgaW1hZ2UgdG8gZ3JheXNjYWxlICovCi0gIGJvb2xlYW4gY3JvcDsJCQkvKiBpZiBUUlVFLCBjcm9wIHNvdXJjZSBpbWFnZSAqLworICBKWEZPUk1fQ09ERSB0cmFuc2Zvcm07ICAgICAgICAvKiBpbWFnZSB0cmFuc2Zvcm0gb3BlcmF0b3IgKi8KKyAgYm9vbGVhbiBwZXJmZWN0OyAgICAgICAgICAgICAgLyogaWYgVFJVRSwgZmFpbCBpZiBwYXJ0aWFsIE1DVXMgYXJlIHJlcXVlc3RlZCAqLworICBib29sZWFuIHRyaW07ICAgICAgICAgICAgICAgICAvKiBpZiBUUlVFLCB0cmltIHBhcnRpYWwgTUNVcyBhcyBuZWVkZWQgKi8KKyAgYm9vbGVhbiBmb3JjZV9ncmF5c2NhbGU7ICAgICAgLyogaWYgVFJVRSwgY29udmVydCBjb2xvciBpbWFnZSB0byBncmF5c2NhbGUgKi8KKyAgYm9vbGVhbiBjcm9wOyAgICAgICAgICAgICAgICAgLyogaWYgVFJVRSwgY3JvcCBzb3VyY2UgaW1hZ2UgKi8KICAgYm9vbGVhbiBzbG93X2hmbGlwOyAgLyogRm9yIGJlc3QgcGVyZm9ybWFuY2UsIHRoZSBKWEZPUk1fRkxJUF9IIHRyYW5zZm9ybQogICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxseSBtb2RpZmllcyB0aGUgc291cmNlIGNvZWZmaWNpZW50cyBpbiBwbGFjZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0dGluZyB0aGlzIHRvIFRSVUUgd2lsbCBpbnN0ZWFkIHVzZSBhIHNsb3dlciwKQEAgLTEzOSwyMyArMTQyLDIzIEBACiAgIC8qIENyb3AgcGFyYW1ldGVyczogYXBwbGljYXRpb24gbmVlZCBub3Qgc2V0IHRoZXNlIHVubGVzcyBjcm9wIGlzIFRSVUUuCiAgICAqIFRoZXNlIGNhbiBiZSBmaWxsZWQgaW4gYnkganRyYW5zZm9ybV9wYXJzZV9jcm9wX3NwZWMoKS4KICAgICovCi0gIEpESU1FTlNJT04gY3JvcF93aWR0aDsJLyogV2lkdGggb2Ygc2VsZWN0ZWQgcmVnaW9uICovCi0gIEpDUk9QX0NPREUgY3JvcF93aWR0aF9zZXQ7Ci0gIEpESU1FTlNJT04gY3JvcF9oZWlnaHQ7CS8qIEhlaWdodCBvZiBzZWxlY3RlZCByZWdpb24gKi8KLSAgSkNST1BfQ09ERSBjcm9wX2hlaWdodF9zZXQ7Ci0gIEpESU1FTlNJT04gY3JvcF94b2Zmc2V0OwkvKiBYIG9mZnNldCBvZiBzZWxlY3RlZCByZWdpb24gKi8KLSAgSkNST1BfQ09ERSBjcm9wX3hvZmZzZXRfc2V0OwkvKiAobmVnYXRpdmUgbWVhc3VyZXMgZnJvbSByaWdodCBlZGdlKSAqLwotICBKRElNRU5TSU9OIGNyb3BfeW9mZnNldDsJLyogWSBvZmZzZXQgb2Ygc2VsZWN0ZWQgcmVnaW9uICovCi0gIEpDUk9QX0NPREUgY3JvcF95b2Zmc2V0X3NldDsJLyogKG5lZ2F0aXZlIG1lYXN1cmVzIGZyb20gYm90dG9tIGVkZ2UpICovCisgIEpESU1FTlNJT04gY3JvcF93aWR0aDsgICAgICAgIC8qIFdpZHRoIG9mIHNlbGVjdGVkIHJlZ2lvbiAqLworICBKQ1JPUF9DT0RFIGNyb3Bfd2lkdGhfc2V0OyAgICAvKiAoZm9yY2VkIGRpc2FibGVzIGFkanVzdG1lbnQpICovCisgIEpESU1FTlNJT04gY3JvcF9oZWlnaHQ7ICAgICAgIC8qIEhlaWdodCBvZiBzZWxlY3RlZCByZWdpb24gKi8KKyAgSkNST1BfQ09ERSBjcm9wX2hlaWdodF9zZXQ7ICAgLyogKGZvcmNlZCBkaXNhYmxlcyBhZGp1c3RtZW50KSAqLworICBKRElNRU5TSU9OIGNyb3BfeG9mZnNldDsgICAgICAvKiBYIG9mZnNldCBvZiBzZWxlY3RlZCByZWdpb24gKi8KKyAgSkNST1BfQ09ERSBjcm9wX3hvZmZzZXRfc2V0OyAgLyogKG5lZ2F0aXZlIG1lYXN1cmVzIGZyb20gcmlnaHQgZWRnZSkgKi8KKyAgSkRJTUVOU0lPTiBjcm9wX3lvZmZzZXQ7ICAgICAgLyogWSBvZmZzZXQgb2Ygc2VsZWN0ZWQgcmVnaW9uICovCisgIEpDUk9QX0NPREUgY3JvcF95b2Zmc2V0X3NldDsgIC8qIChuZWdhdGl2ZSBtZWFzdXJlcyBmcm9tIGJvdHRvbSBlZGdlKSAqLwogCiAgIC8qIEludGVybmFsIHdvcmtzcGFjZTogY2FsbGVyIHNob3VsZCBub3QgdG91Y2ggdGhlc2UgKi8KLSAgaW50IG51bV9jb21wb25lbnRzOwkJLyogIyBvZiBjb21wb25lbnRzIGluIHdvcmtzcGFjZSAqLworICBpbnQgbnVtX2NvbXBvbmVudHM7ICAgICAgICAgICAvKiAjIG9mIGNvbXBvbmVudHMgaW4gd29ya3NwYWNlICovCiAgIGp2aXJ0X2JhcnJheV9wdHIgKiB3b3Jrc3BhY2VfY29lZl9hcnJheXM7IC8qIHdvcmtzcGFjZSBmb3IgdHJhbnNmb3JtYXRpb25zICovCi0gIEpESU1FTlNJT04gb3V0cHV0X3dpZHRoOwkvKiBjcm9wcGVkIGRlc3RpbmF0aW9uIGRpbWVuc2lvbnMgKi8KKyAgSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGg7ICAgICAgLyogY3JvcHBlZCBkZXN0aW5hdGlvbiBkaW1lbnNpb25zICovCiAgIEpESU1FTlNJT04gb3V0cHV0X2hlaWdodDsKLSAgSkRJTUVOU0lPTiB4X2Nyb3Bfb2Zmc2V0OwkvKiBkZXN0aW5hdGlvbiBjcm9wIG9mZnNldHMgbWVhc3VyZWQgaW4gaU1DVXMgKi8KKyAgSkRJTUVOU0lPTiB4X2Nyb3Bfb2Zmc2V0OyAgICAgLyogZGVzdGluYXRpb24gY3JvcCBvZmZzZXRzIG1lYXN1cmVkIGluIGlNQ1VzICovCiAgIEpESU1FTlNJT04geV9jcm9wX29mZnNldDsKLSAgaW50IGlNQ1Vfc2FtcGxlX3dpZHRoOwkvKiBkZXN0aW5hdGlvbiBpTUNVIHNpemUgKi8KKyAgaW50IGlNQ1Vfc2FtcGxlX3dpZHRoOyAgICAgICAgLyogZGVzdGluYXRpb24gaU1DVSBzaXplICovCiAgIGludCBpTUNVX3NhbXBsZV9oZWlnaHQ7CiB9IGpwZWdfdHJhbnNmb3JtX2luZm87CiAKQEAgLTE2NCwzNCArMTY3LDM0IEBACiAKIC8qIFBhcnNlIGEgY3JvcCBzcGVjaWZpY2F0aW9uICh3cml0dGVuIGluIFgxMSBnZW9tZXRyeSBzdHlsZSkgKi8KIEVYVEVSTihib29sZWFuKSBqdHJhbnNmb3JtX3BhcnNlX2Nyb3Bfc3BlYwotCUpQUCgoanBlZ190cmFuc2Zvcm1faW5mbyAqaW5mbywgY29uc3QgY2hhciAqc3BlYykpOworICAgICAgICBKUFAoKGpwZWdfdHJhbnNmb3JtX2luZm8gKmluZm8sIGNvbnN0IGNoYXIgKnNwZWMpKTsKIC8qIFJlcXVlc3QgYW55IHJlcXVpcmVkIHdvcmtzcGFjZSAqLwogRVhURVJOKGJvb2xlYW4pIGp0cmFuc2Zvcm1fcmVxdWVzdF93b3Jrc3BhY2UKLQlKUFAoKGpfZGVjb21wcmVzc19wdHIgc3JjaW5mbywganBlZ190cmFuc2Zvcm1faW5mbyAqaW5mbykpOworICAgICAgICBKUFAoKGpfZGVjb21wcmVzc19wdHIgc3JjaW5mbywganBlZ190cmFuc2Zvcm1faW5mbyAqaW5mbykpOwogLyogQWRqdXN0IG91dHB1dCBpbWFnZSBwYXJhbWV0ZXJzICovCiBFWFRFUk4oanZpcnRfYmFycmF5X3B0ciAqKSBqdHJhbnNmb3JtX2FkanVzdF9wYXJhbWV0ZXJzCi0JSlBQKChqX2RlY29tcHJlc3NfcHRyIHNyY2luZm8sIGpfY29tcHJlc3NfcHRyIGRzdGluZm8sCi0JICAgICBqdmlydF9iYXJyYXlfcHRyICpzcmNfY29lZl9hcnJheXMsCi0JICAgICBqcGVnX3RyYW5zZm9ybV9pbmZvICppbmZvKSk7CisgICAgICAgIEpQUCgoal9kZWNvbXByZXNzX3B0ciBzcmNpbmZvLCBqX2NvbXByZXNzX3B0ciBkc3RpbmZvLAorICAgICAgICAgICAgIGp2aXJ0X2JhcnJheV9wdHIgKnNyY19jb2VmX2FycmF5cywKKyAgICAgICAgICAgICBqcGVnX3RyYW5zZm9ybV9pbmZvICppbmZvKSk7CiAvKiBFeGVjdXRlIHRoZSBhY3R1YWwgdHJhbnNmb3JtYXRpb24sIGlmIGFueSAqLwogRVhURVJOKHZvaWQpIGp0cmFuc2Zvcm1fZXhlY3V0ZV90cmFuc2Zvcm0KLQlKUFAoKGpfZGVjb21wcmVzc19wdHIgc3JjaW5mbywgal9jb21wcmVzc19wdHIgZHN0aW5mbywKLQkgICAgIGp2aXJ0X2JhcnJheV9wdHIgKnNyY19jb2VmX2FycmF5cywKLQkgICAgIGpwZWdfdHJhbnNmb3JtX2luZm8gKmluZm8pKTsKKyAgICAgICAgSlBQKChqX2RlY29tcHJlc3NfcHRyIHNyY2luZm8sIGpfY29tcHJlc3NfcHRyIGRzdGluZm8sCisgICAgICAgICAgICAganZpcnRfYmFycmF5X3B0ciAqc3JjX2NvZWZfYXJyYXlzLAorICAgICAgICAgICAgIGpwZWdfdHJhbnNmb3JtX2luZm8gKmluZm8pKTsKIC8qIERldGVybWluZSB3aGV0aGVyIGxvc3NsZXNzIHRyYW5zZm9ybWF0aW9uIGlzIHBlcmZlY3RseQogICogcG9zc2libGUgZm9yIGEgc3BlY2lmaWVkIGltYWdlIGFuZCB0cmFuc2Zvcm1hdGlvbi4KICAqLwogRVhURVJOKGJvb2xlYW4pIGp0cmFuc2Zvcm1fcGVyZmVjdF90cmFuc2Zvcm0KLQlKUFAoKEpESU1FTlNJT04gaW1hZ2Vfd2lkdGgsIEpESU1FTlNJT04gaW1hZ2VfaGVpZ2h0LAotCSAgICAgaW50IE1DVV93aWR0aCwgaW50IE1DVV9oZWlnaHQsCi0JICAgICBKWEZPUk1fQ09ERSB0cmFuc2Zvcm0pKTsKKyAgICAgICAgSlBQKChKRElNRU5TSU9OIGltYWdlX3dpZHRoLCBKRElNRU5TSU9OIGltYWdlX2hlaWdodCwKKyAgICAgICAgICAgICBpbnQgTUNVX3dpZHRoLCBpbnQgTUNVX2hlaWdodCwKKyAgICAgICAgICAgICBKWEZPUk1fQ09ERSB0cmFuc2Zvcm0pKTsKIAogLyoganRyYW5zZm9ybV9leGVjdXRlX3RyYW5zZm9ybSB1c2VkIHRvIGJlIGNhbGxlZAogICoganRyYW5zZm9ybV9leGVjdXRlX3RyYW5zZm9ybWF0aW9uLCBidXQgc29tZSBjb21waWxlcnMgY29tcGxhaW4gYWJvdXQKICAqIHJvdXRpbmUgbmFtZXMgdGhhdCBsb25nLiAgVGhpcyBtYWNybyBpcyBoZXJlIHRvIGF2b2lkIGJyZWFraW5nIGFueQogICogb2xkIHNvdXJjZSBjb2RlIHRoYXQgdXNlcyB0aGUgb3JpZ2luYWwgbmFtZS4uLgogICovCi0jZGVmaW5lIGp0cmFuc2Zvcm1fZXhlY3V0ZV90cmFuc2Zvcm1hdGlvbglqdHJhbnNmb3JtX2V4ZWN1dGVfdHJhbnNmb3JtCisjZGVmaW5lIGp0cmFuc2Zvcm1fZXhlY3V0ZV90cmFuc2Zvcm1hdGlvbiAgICAgICBqdHJhbnNmb3JtX2V4ZWN1dGVfdHJhbnNmb3JtCiAKICNlbmRpZiAvKiBUUkFOU0ZPUk1TX1NVUFBPUlRFRCAqLwogCkBAIC0yMDEsMTcgKzIwNCwxNyBAQAogICovCiAKIHR5cGVkZWYgZW51bSB7Ci0JSkNPUFlPUFRfTk9ORSwJCS8qIGNvcHkgbm8gb3B0aW9uYWwgbWFya2VycyAqLwotCUpDT1BZT1BUX0NPTU1FTlRTLAkvKiBjb3B5IG9ubHkgY29tbWVudCAoQ09NKSBtYXJrZXJzICovCi0JSkNPUFlPUFRfQUxMCQkvKiBjb3B5IGFsbCBvcHRpb25hbCBtYXJrZXJzICovCisgIEpDT1BZT1BUX05PTkUsICAgICAgICAgIC8qIGNvcHkgbm8gb3B0aW9uYWwgbWFya2VycyAqLworICBKQ09QWU9QVF9DT01NRU5UUywgICAgICAvKiBjb3B5IG9ubHkgY29tbWVudCAoQ09NKSBtYXJrZXJzICovCisgIEpDT1BZT1BUX0FMTCAgICAgICAgICAgIC8qIGNvcHkgYWxsIG9wdGlvbmFsIG1hcmtlcnMgKi8KIH0gSkNPUFlfT1BUSU9OOwogCi0jZGVmaW5lIEpDT1BZT1BUX0RFRkFVTFQgIEpDT1BZT1BUX0NPTU1FTlRTCS8qIHJlY29tbWVuZGVkIGRlZmF1bHQgKi8KKyNkZWZpbmUgSkNPUFlPUFRfREVGQVVMVCAgSkNPUFlPUFRfQ09NTUVOVFMgICAgIC8qIHJlY29tbWVuZGVkIGRlZmF1bHQgKi8KIAogLyogU2V0dXAgZGVjb21wcmVzc2lvbiBvYmplY3QgdG8gc2F2ZSBkZXNpcmVkIG1hcmtlcnMgaW4gbWVtb3J5ICovCiBFWFRFUk4odm9pZCkgamNvcHlfbWFya2Vyc19zZXR1cAotCUpQUCgoal9kZWNvbXByZXNzX3B0ciBzcmNpbmZvLCBKQ09QWV9PUFRJT04gb3B0aW9uKSk7CisgICAgICAgIEpQUCgoal9kZWNvbXByZXNzX3B0ciBzcmNpbmZvLCBKQ09QWV9PUFRJT04gb3B0aW9uKSk7CiAvKiBDb3B5IG1hcmtlcnMgc2F2ZWQgaW4gdGhlIGdpdmVuIHNvdXJjZSBvYmplY3QgdG8gdGhlIGRlc3RpbmF0aW9uIG9iamVjdCAqLwogRVhURVJOKHZvaWQpIGpjb3B5X21hcmtlcnNfZXhlY3V0ZQotCUpQUCgoal9kZWNvbXByZXNzX3B0ciBzcmNpbmZvLCBqX2NvbXByZXNzX3B0ciBkc3RpbmZvLAotCSAgICAgSkNPUFlfT1BUSU9OIG9wdGlvbikpOworICAgICAgICBKUFAoKGpfZGVjb21wcmVzc19wdHIgc3JjaW5mbywgal9jb21wcmVzc19wdHIgZHN0aW5mbywKKyAgICAgICAgICAgICBKQ09QWV9PUFRJT04gb3B0aW9uKSk7CmRpZmYgLS1naXQgYS90dXJib2pwZWctam5pLmMgYi90dXJib2pwZWctam5pLmMKaW5kZXggMWZmOWJiYS4uNzdjYTI4ZCAxMDA2NDQKLS0tIGEvdHVyYm9qcGVnLWpuaS5jCisrKyBiL3R1cmJvanBlZy1qbmkuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpMjAxMSBELiBSLiBDb21tYW5kZXIuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKTIwMTEtMjAxNCBELiBSLiBDb21tYW5kZXIuICBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CkBAIC0yOSw2ICsyOSw5IEBACiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSAidHVyYm9qcGVnLmgiCisjaWZkZWYgV0lOMzIKKyNpbmNsdWRlICJ0anV0aWwuaCIKKyNlbmRpZgogI2luY2x1ZGUgPGpuaS5oPgogI2luY2x1ZGUgImphdmEvb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpDb21wcmVzc29yLmgiCiAjaW5jbHVkZSAiamF2YS9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkRlY29tcHJlc3Nvci5oIgpAQCAtNDEsMTUgKzQ0LDIwIEBACiAJZ290byBiYWlsb3V0OyAgXAogfQogCi0jZGVmaW5lIGJhaWxpZjAoZikge2lmKCEoZikpIGdvdG8gYmFpbG91dDt9CisjZGVmaW5lIGJhaWxpZjAoZikge2lmKCEoZikpIHsgIFwKKwljaGFyIHRlbXBzWzgwXTsgIFwKKwlzbnByaW50Zih0ZW1wcywgODAsICJVbmV4cGVjdGVkIE5VTEwgY29uZGl0aW9uIGluIGxpbmUgJWQiLCBfX0xJTkVfXyk7ICBcCisJX3Rocm93KHRlbXBzKTsgIFwKK319CiAKICNkZWZpbmUgZ2V0aGFuZGxlKCkgIFwKIAlqY2xhc3MgX2Nscz0oKmVudiktPkdldE9iamVjdENsYXNzKGVudiwgb2JqKTsgIFwKIAlqZmllbGRJRCBfZmlkOyAgXAogCWlmKCFfY2xzKSBnb3RvIGJhaWxvdXQ7ICBcCiAJYmFpbGlmMChfZmlkPSgqZW52KS0+R2V0RmllbGRJRChlbnYsIF9jbHMsICJoYW5kbGUiLCAiSiIpKTsgIFwKLQloYW5kbGU9KHRqaGFuZGxlKShqbG9uZykoKmVudiktPkdldExvbmdGaWVsZChlbnYsIG9iaiwgX2ZpZCk7ICBcCisJaGFuZGxlPSh0amhhbmRsZSkoc2l6ZV90KSgqZW52KS0+R2V0TG9uZ0ZpZWxkKGVudiwgb2JqLCBfZmlkKTsgIFwKIAorLyogVHVyYm9KUEVHIDEuMi54OiBUSjo6YnVmU2l6ZSgpICovCiBKTklFWFBPUlQgamludCBKTklDQUxMIEphdmFfb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpfYnVmU2l6ZQogCShKTklFbnYgKmVudiwgamNsYXNzIGNscywgamludCB3aWR0aCwgamludCBoZWlnaHQsIGppbnQganBlZ1N1YnNhbXApCiB7CkBAIC02MCw2ICs2OCw3IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAorLyogVHVyYm9KUEVHIDEuMi54OiBUSjo6YnVmU2l6ZVlVVigpICovCiBKTklFWFBPUlQgamludCBKTklDQUxMIEphdmFfb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpfYnVmU2l6ZVlVVgogCShKTklFbnYgKmVudiwgamNsYXNzIGNscywgamludCB3aWR0aCwgamludCBoZWlnaHQsIGppbnQgc3Vic2FtcCkKIHsKQEAgLTcwLDYgKzc5LDcgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCisvKiBUdXJib0pQRUcgMS4yLng6IFRKQ29tcHJlc3Nvcjo6aW5pdCgpICovCiBKTklFWFBPUlQgdm9pZCBKTklDQUxMIEphdmFfb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpDb21wcmVzc29yX2luaXQKIAkoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqKQogewpAQCAtODIsMTAxICs5MiwxMTEgQEAKIAogCWJhaWxpZjAoY2xzPSgqZW52KS0+R2V0T2JqZWN0Q2xhc3MoZW52LCBvYmopKTsKIAliYWlsaWYwKGZpZD0oKmVudiktPkdldEZpZWxkSUQoZW52LCBjbHMsICJoYW5kbGUiLCAiSiIpKTsKLQkoKmVudiktPlNldExvbmdGaWVsZChlbnYsIG9iaiwgZmlkLCAoamxvbmcpaGFuZGxlKTsKKwkoKmVudiktPlNldExvbmdGaWVsZChlbnYsIG9iaiwgZmlkLCAoc2l6ZV90KWhhbmRsZSk7CiAKIAliYWlsb3V0OgogCXJldHVybjsKIH0KIAorc3RhdGljIGppbnQgVEpDb21wcmVzc29yX2NvbXByZXNzCisJKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgamFycmF5IHNyYywgamludCBzcmNFbGVtZW50U2l6ZSwgamludCB4LCBqaW50IHksCisJCWppbnQgd2lkdGgsIGppbnQgcGl0Y2gsIGppbnQgaGVpZ2h0LCBqaW50IHBmLCBqYnl0ZUFycmF5IGRzdCwKKwkJamludCBqcGVnU3Vic2FtcCwgamludCBqcGVnUXVhbCwgamludCBmbGFncykKK3sKKwl0amhhbmRsZSBoYW5kbGU9MDsKKwl1bnNpZ25lZCBsb25nIGpwZWdTaXplPTA7CisJanNpemUgYXJyYXlTaXplPTAsIGFjdHVhbFBpdGNoOworCXVuc2lnbmVkIGNoYXIgKnNyY0J1Zj1OVUxMLCAqanBlZ0J1Zj1OVUxMOworCisJZ2V0aGFuZGxlKCk7CisKKwlpZihwZjwwIHx8IHBmPj1vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9OVU1QRiB8fCB3aWR0aDwxIHx8IGhlaWdodDwxCisJCXx8IHBpdGNoPDApCisJCV90aHJvdygiSW52YWxpZCBhcmd1bWVudCBpbiBjb21wcmVzcygpIik7CisJaWYob3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpfTlVNUEYhPVRKX05VTVBGKQorCQlfdGhyb3coIk1pc21hdGNoIGJldHdlZW4gSmF2YSBhbmQgQyBBUEkiKTsKKworCWFjdHVhbFBpdGNoPShwaXRjaD09MCk/IHdpZHRoKnRqUGl4ZWxTaXplW3BmXTpwaXRjaDsKKwlhcnJheVNpemU9KHkraGVpZ2h0LTEpKmFjdHVhbFBpdGNoICsgKHgrd2lkdGgpKnRqUGl4ZWxTaXplW3BmXTsKKwlpZigoKmVudiktPkdldEFycmF5TGVuZ3RoKGVudiwgc3JjKSpzcmNFbGVtZW50U2l6ZTxhcnJheVNpemUpCisJCV90aHJvdygiU291cmNlIGJ1ZmZlciBpcyBub3QgbGFyZ2UgZW5vdWdoIik7CisJanBlZ1NpemU9dGpCdWZTaXplKHdpZHRoLCBoZWlnaHQsIGpwZWdTdWJzYW1wKTsKKwlpZigoKmVudiktPkdldEFycmF5TGVuZ3RoKGVudiwgZHN0KTwoanNpemUpanBlZ1NpemUpCisJCV90aHJvdygiRGVzdGluYXRpb24gYnVmZmVyIGlzIG5vdCBsYXJnZSBlbm91Z2giKTsKKworCWJhaWxpZjAoc3JjQnVmPSgqZW52KS0+R2V0UHJpbWl0aXZlQXJyYXlDcml0aWNhbChlbnYsIHNyYywgMCkpOworCWJhaWxpZjAoanBlZ0J1Zj0oKmVudiktPkdldFByaW1pdGl2ZUFycmF5Q3JpdGljYWwoZW52LCBkc3QsIDApKTsKKworCWlmKHRqQ29tcHJlc3MyKGhhbmRsZSwgJnNyY0J1Zlt5KmFjdHVhbFBpdGNoICsgeCp0alBpeGVsU2l6ZVtwZl1dLCB3aWR0aCwKKwkJcGl0Y2gsIGhlaWdodCwgcGYsICZqcGVnQnVmLCAmanBlZ1NpemUsIGpwZWdTdWJzYW1wLCBqcGVnUXVhbCwKKwkJZmxhZ3N8VEpGTEFHX05PUkVBTExPQyk9PS0xKQorCQlfdGhyb3codGpHZXRFcnJvclN0cigpKTsKKworCWJhaWxvdXQ6CisJaWYoanBlZ0J1ZikgKCplbnYpLT5SZWxlYXNlUHJpbWl0aXZlQXJyYXlDcml0aWNhbChlbnYsIGRzdCwganBlZ0J1ZiwgMCk7CisJaWYoc3JjQnVmKSAoKmVudiktPlJlbGVhc2VQcmltaXRpdmVBcnJheUNyaXRpY2FsKGVudiwgc3JjLCBzcmNCdWYsIDApOworCXJldHVybiAoamludClqcGVnU2l6ZTsKK30KKworLyogVHVyYm9KUEVHIDEuMy54OiBUSkNvbXByZXNzb3I6OmNvbXByZXNzKCkgYnl0ZSBzb3VyY2UgKi8KK0pOSUVYUE9SVCBqaW50IEpOSUNBTEwgSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkNvbXByZXNzb3JfY29tcHJlc3NfX18zQklJSUlJSV8zQklJSQorCShKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGpieXRlQXJyYXkgc3JjLCBqaW50IHgsIGppbnQgeSwgamludCB3aWR0aCwKKwkJamludCBwaXRjaCwgamludCBoZWlnaHQsIGppbnQgcGYsIGpieXRlQXJyYXkgZHN0LCBqaW50IGpwZWdTdWJzYW1wLAorCQlqaW50IGpwZWdRdWFsLCBqaW50IGZsYWdzKQoreworCXJldHVybiBUSkNvbXByZXNzb3JfY29tcHJlc3MoZW52LCBvYmosIHNyYywgMSwgeCwgeSwgd2lkdGgsIHBpdGNoLCBoZWlnaHQsCisJCXBmLCBkc3QsIGpwZWdTdWJzYW1wLCBqcGVnUXVhbCwgZmxhZ3MpOworfQorCisvKiBUdXJib0pQRUcgMS4yLng6IFRKQ29tcHJlc3Nvcjo6Y29tcHJlc3MoKSBieXRlIHNvdXJjZSAqLwogSk5JRVhQT1JUIGppbnQgSk5JQ0FMTCBKYXZhX29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKQ29tcHJlc3Nvcl9jb21wcmVzc19fXzNCSUlJSV8zQklJSQogCShKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGpieXRlQXJyYXkgc3JjLCBqaW50IHdpZHRoLCBqaW50IHBpdGNoLAogCQlqaW50IGhlaWdodCwgamludCBwZiwgamJ5dGVBcnJheSBkc3QsIGppbnQganBlZ1N1YnNhbXAsIGppbnQganBlZ1F1YWwsCiAJCWppbnQgZmxhZ3MpCiB7Ci0JdGpoYW5kbGUgaGFuZGxlPTA7Ci0JdW5zaWduZWQgbG9uZyBqcGVnU2l6ZT0wOyAganNpemUgYXJyYXlTaXplPTA7Ci0JdW5zaWduZWQgY2hhciAqc3JjQnVmPU5VTEwsICpqcGVnQnVmPU5VTEw7Ci0KLQlnZXRoYW5kbGUoKTsKLQotCWlmKHBmPDAgfHwgcGY+PW9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKX05VTVBGIHx8IHdpZHRoPDEgfHwgaGVpZ2h0PDEKLQkJfHwgcGl0Y2g8MCkKLQkJX3Rocm93KCJJbnZhbGlkIGFyZ3VtZW50IGluIGNvbXByZXNzKCkiKTsKLQlpZihvcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9OVU1QRiE9VEpfTlVNUEYpCi0JCV90aHJvdygiTWlzbWF0Y2ggYmV0d2VlbiBKYXZhIGFuZCBDIEFQSSIpOwotCi0JYXJyYXlTaXplPShwaXRjaD09MCk/IHdpZHRoKnRqUGl4ZWxTaXplW3BmXSpoZWlnaHQ6cGl0Y2gqaGVpZ2h0OwotCWlmKCgqZW52KS0+R2V0QXJyYXlMZW5ndGgoZW52LCBzcmMpPGFycmF5U2l6ZSkKLQkJX3Rocm93KCJTb3VyY2UgYnVmZmVyIGlzIG5vdCBsYXJnZSBlbm91Z2giKTsKLQlqcGVnU2l6ZT10akJ1ZlNpemUod2lkdGgsIGhlaWdodCwganBlZ1N1YnNhbXApOwotCWlmKCgqZW52KS0+R2V0QXJyYXlMZW5ndGgoZW52LCBkc3QpPChqc2l6ZSlqcGVnU2l6ZSkKLQkJX3Rocm93KCJEZXN0aW5hdGlvbiBidWZmZXIgaXMgbm90IGxhcmdlIGVub3VnaCIpOwotCi0JYmFpbGlmMChzcmNCdWY9KCplbnYpLT5HZXRQcmltaXRpdmVBcnJheUNyaXRpY2FsKGVudiwgc3JjLCAwKSk7Ci0JYmFpbGlmMChqcGVnQnVmPSgqZW52KS0+R2V0UHJpbWl0aXZlQXJyYXlDcml0aWNhbChlbnYsIGRzdCwgMCkpOwotCi0JaWYodGpDb21wcmVzczIoaGFuZGxlLCBzcmNCdWYsIHdpZHRoLCBwaXRjaCwgaGVpZ2h0LCBwZiwgJmpwZWdCdWYsCi0JCSZqcGVnU2l6ZSwganBlZ1N1YnNhbXAsIGpwZWdRdWFsLCBmbGFnc3xUSkZMQUdfTk9SRUFMTE9DKT09LTEpCi0JewotCQkoKmVudiktPlJlbGVhc2VQcmltaXRpdmVBcnJheUNyaXRpY2FsKGVudiwgZHN0LCBqcGVnQnVmLCAwKTsKLQkJKCplbnYpLT5SZWxlYXNlUHJpbWl0aXZlQXJyYXlDcml0aWNhbChlbnYsIHNyYywgc3JjQnVmLCAwKTsKLQkJanBlZ0J1Zj1zcmNCdWY9TlVMTDsKLQkJX3Rocm93KHRqR2V0RXJyb3JTdHIoKSk7Ci0JfQotCi0JYmFpbG91dDoKLQlpZihqcGVnQnVmKSAoKmVudiktPlJlbGVhc2VQcmltaXRpdmVBcnJheUNyaXRpY2FsKGVudiwgZHN0LCBqcGVnQnVmLCAwKTsKLQlpZihzcmNCdWYpICgqZW52KS0+UmVsZWFzZVByaW1pdGl2ZUFycmF5Q3JpdGljYWwoZW52LCBzcmMsIHNyY0J1ZiwgMCk7Ci0JcmV0dXJuIChqaW50KWpwZWdTaXplOworCXJldHVybiBUSkNvbXByZXNzb3JfY29tcHJlc3MoZW52LCBvYmosIHNyYywgMSwgMCwgMCwgd2lkdGgsIHBpdGNoLCBoZWlnaHQsCisJCXBmLCBkc3QsIGpwZWdTdWJzYW1wLCBqcGVnUXVhbCwgZmxhZ3MpOwogfQogCi1KTklFWFBPUlQgamludCBKTklDQUxMIEphdmFfb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpDb21wcmVzc29yX2NvbXByZXNzX19fM0lJSUlJXzNCSUlJCi0JKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgamludEFycmF5IHNyYywgamludCB3aWR0aCwgamludCBwaXRjaCwKLQkJamludCBoZWlnaHQsIGppbnQgcGYsIGpieXRlQXJyYXkgZHN0LCBqaW50IGpwZWdTdWJzYW1wLCBqaW50IGpwZWdRdWFsLAotCQlqaW50IGZsYWdzKQorLyogVHVyYm9KUEVHIDEuMy54OiBUSkNvbXByZXNzb3I6OmNvbXByZXNzKCkgaW50IHNvdXJjZSAqLworSk5JRVhQT1JUIGppbnQgSk5JQ0FMTCBKYXZhX29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKQ29tcHJlc3Nvcl9jb21wcmVzc19fXzNJSUlJSUlJXzNCSUlJCisJKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgamludEFycmF5IHNyYywgamludCB4LCBqaW50IHksIGppbnQgd2lkdGgsCisJCWppbnQgc3RyaWRlLCBqaW50IGhlaWdodCwgamludCBwZiwgamJ5dGVBcnJheSBkc3QsIGppbnQganBlZ1N1YnNhbXAsCisJCWppbnQganBlZ1F1YWwsIGppbnQgZmxhZ3MpCiB7Ci0JdGpoYW5kbGUgaGFuZGxlPTA7Ci0JdW5zaWduZWQgbG9uZyBqcGVnU2l6ZT0wOyAganNpemUgYXJyYXlTaXplPTA7Ci0JdW5zaWduZWQgY2hhciAqc3JjQnVmPU5VTEwsICpqcGVnQnVmPU5VTEw7Ci0KLQlnZXRoYW5kbGUoKTsKLQotCWlmKHBmPDAgfHwgcGY+PW9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKX05VTVBGIHx8IHdpZHRoPDEgfHwgaGVpZ2h0PDEKLQkJfHwgcGl0Y2g8MCkKKwlpZihwZjwwIHx8IHBmPj1vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9OVU1QRikKIAkJX3Rocm93KCJJbnZhbGlkIGFyZ3VtZW50IGluIGNvbXByZXNzKCkiKTsKLQlpZihvcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9OVU1QRiE9VEpfTlVNUEYpCi0JCV90aHJvdygiTWlzbWF0Y2ggYmV0d2VlbiBKYXZhIGFuZCBDIEFQSSIpOwogCWlmKHRqUGl4ZWxTaXplW3BmXSE9c2l6ZW9mKGppbnQpKQogCQlfdGhyb3coIlBpeGVsIGZvcm1hdCBtdXN0IGJlIDMyLWJpdCB3aGVuIGNvbXByZXNzaW5nIGZyb20gYW4gaW50ZWdlciBidWZmZXIuIik7CiAKLQlhcnJheVNpemU9KHBpdGNoPT0wKT8gd2lkdGgqaGVpZ2h0OnBpdGNoKmhlaWdodDsKLQlpZigoKmVudiktPkdldEFycmF5TGVuZ3RoKGVudiwgc3JjKTxhcnJheVNpemUpCi0JCV90aHJvdygiU291cmNlIGJ1ZmZlciBpcyBub3QgbGFyZ2UgZW5vdWdoIik7Ci0JanBlZ1NpemU9dGpCdWZTaXplKHdpZHRoLCBoZWlnaHQsIGpwZWdTdWJzYW1wKTsKLQlpZigoKmVudiktPkdldEFycmF5TGVuZ3RoKGVudiwgZHN0KTwoanNpemUpanBlZ1NpemUpCi0JCV90aHJvdygiRGVzdGluYXRpb24gYnVmZmVyIGlzIG5vdCBsYXJnZSBlbm91Z2giKTsKLQotCWJhaWxpZjAoc3JjQnVmPSgqZW52KS0+R2V0UHJpbWl0aXZlQXJyYXlDcml0aWNhbChlbnYsIHNyYywgMCkpOwotCWJhaWxpZjAoanBlZ0J1Zj0oKmVudiktPkdldFByaW1pdGl2ZUFycmF5Q3JpdGljYWwoZW52LCBkc3QsIDApKTsKLQotCWlmKHRqQ29tcHJlc3MyKGhhbmRsZSwgc3JjQnVmLCB3aWR0aCwgcGl0Y2gqc2l6ZW9mKGppbnQpLCBoZWlnaHQsIHBmLAotCQkmanBlZ0J1ZiwgJmpwZWdTaXplLCBqcGVnU3Vic2FtcCwganBlZ1F1YWwsIGZsYWdzfFRKRkxBR19OT1JFQUxMT0MpPT0tMSkKLQl7Ci0JCSgqZW52KS0+UmVsZWFzZVByaW1pdGl2ZUFycmF5Q3JpdGljYWwoZW52LCBkc3QsIGpwZWdCdWYsIDApOwotCQkoKmVudiktPlJlbGVhc2VQcmltaXRpdmVBcnJheUNyaXRpY2FsKGVudiwgc3JjLCBzcmNCdWYsIDApOwotCQlqcGVnQnVmPXNyY0J1Zj1OVUxMOwotCQlfdGhyb3codGpHZXRFcnJvclN0cigpKTsKLQl9CisJcmV0dXJuIFRKQ29tcHJlc3Nvcl9jb21wcmVzcyhlbnYsIG9iaiwgc3JjLCBzaXplb2YoamludCksIHgsIHksIHdpZHRoLAorCQlzdHJpZGUqc2l6ZW9mKGppbnQpLCBoZWlnaHQsIHBmLCBkc3QsIGpwZWdTdWJzYW1wLCBqcGVnUXVhbCwgZmxhZ3MpOwogCiAJYmFpbG91dDoKLQlpZihqcGVnQnVmKSAoKmVudiktPlJlbGVhc2VQcmltaXRpdmVBcnJheUNyaXRpY2FsKGVudiwgZHN0LCBqcGVnQnVmLCAwKTsKLQlpZihzcmNCdWYpICgqZW52KS0+UmVsZWFzZVByaW1pdGl2ZUFycmF5Q3JpdGljYWwoZW52LCBzcmMsIHNyY0J1ZiwgMCk7Ci0JcmV0dXJuIChqaW50KWpwZWdTaXplOworCXJldHVybiAwOwogfQogCi1KTklFWFBPUlQgdm9pZCBKTklDQUxMIEphdmFfb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpDb21wcmVzc29yX2VuY29kZVlVVl9fXzNCSUlJSV8zQklJCi0JKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgamJ5dGVBcnJheSBzcmMsIGppbnQgd2lkdGgsIGppbnQgcGl0Y2gsCi0JCWppbnQgaGVpZ2h0LCBqaW50IHBmLCBqYnl0ZUFycmF5IGRzdCwgamludCBzdWJzYW1wLCBqaW50IGZsYWdzKQorLyogVHVyYm9KUEVHIDEuMi54OiBUSkNvbXByZXNzb3I6OmNvbXByZXNzKCkgaW50IHNvdXJjZSAqLworSk5JRVhQT1JUIGppbnQgSk5JQ0FMTCBKYXZhX29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKQ29tcHJlc3Nvcl9jb21wcmVzc19fXzNJSUlJSV8zQklJSQorCShKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGppbnRBcnJheSBzcmMsIGppbnQgd2lkdGgsIGppbnQgc3RyaWRlLAorCQlqaW50IGhlaWdodCwgamludCBwZiwgamJ5dGVBcnJheSBkc3QsIGppbnQganBlZ1N1YnNhbXAsIGppbnQganBlZ1F1YWwsCisJCWppbnQgZmxhZ3MpCit7CisJaWYocGY8MCB8fCBwZj49b3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpfTlVNUEYpCisJCV90aHJvdygiSW52YWxpZCBhcmd1bWVudCBpbiBjb21wcmVzcygpIik7CisJaWYodGpQaXhlbFNpemVbcGZdIT1zaXplb2YoamludCkpCisJCV90aHJvdygiUGl4ZWwgZm9ybWF0IG11c3QgYmUgMzItYml0IHdoZW4gY29tcHJlc3NpbmcgZnJvbSBhbiBpbnRlZ2VyIGJ1ZmZlci4iKTsKKworCXJldHVybiBUSkNvbXByZXNzb3JfY29tcHJlc3MoZW52LCBvYmosIHNyYywgc2l6ZW9mKGppbnQpLCAwLCAwLCB3aWR0aCwKKwkJc3RyaWRlKnNpemVvZihqaW50KSwgaGVpZ2h0LCBwZiwgZHN0LCBqcGVnU3Vic2FtcCwganBlZ1F1YWwsIGZsYWdzKTsKKworCWJhaWxvdXQ6CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIFRKQ29tcHJlc3Nvcl9lbmNvZGVZVVYKKwkoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqYXJyYXkgc3JjLCBqaW50IHNyY0VsZW1lbnRTaXplLCBqaW50IHdpZHRoLAorCQlqaW50IHBpdGNoLCBqaW50IGhlaWdodCwgamludCBwZiwgamJ5dGVBcnJheSBkc3QsIGppbnQgc3Vic2FtcCwgamludCBmbGFncykKIHsKIAl0amhhbmRsZSBoYW5kbGU9MDsKIAlqc2l6ZSBhcnJheVNpemU9MDsKQEAgLTE5MSw3ICsyMTEsNyBAQAogCQlfdGhyb3coIk1pc21hdGNoIGJldHdlZW4gSmF2YSBhbmQgQyBBUEkiKTsKIAogCWFycmF5U2l6ZT0ocGl0Y2g9PTApPyB3aWR0aCp0alBpeGVsU2l6ZVtwZl0qaGVpZ2h0OnBpdGNoKmhlaWdodDsKLQlpZigoKmVudiktPkdldEFycmF5TGVuZ3RoKGVudiwgc3JjKTxhcnJheVNpemUpCisJaWYoKCplbnYpLT5HZXRBcnJheUxlbmd0aChlbnYsIHNyYykqc3JjRWxlbWVudFNpemU8YXJyYXlTaXplKQogCQlfdGhyb3coIlNvdXJjZSBidWZmZXIgaXMgbm90IGxhcmdlIGVub3VnaCIpOwogCWlmKCgqZW52KS0+R2V0QXJyYXlMZW5ndGgoZW52LCBkc3QpCiAJCTwoanNpemUpdGpCdWZTaXplWVVWKHdpZHRoLCBoZWlnaHQsIHN1YnNhbXApKQpAQCAtMjAyLDEyICsyMjIsNyBAQAogCiAJaWYodGpFbmNvZGVZVVYyKGhhbmRsZSwgc3JjQnVmLCB3aWR0aCwgcGl0Y2gsIGhlaWdodCwgcGYsIGRzdEJ1Ziwgc3Vic2FtcCwKIAkJZmxhZ3MpPT0tMSkKLQl7Ci0JCSgqZW52KS0+UmVsZWFzZVByaW1pdGl2ZUFycmF5Q3JpdGljYWwoZW52LCBkc3QsIGRzdEJ1ZiwgMCk7Ci0JCSgqZW52KS0+UmVsZWFzZVByaW1pdGl2ZUFycmF5Q3JpdGljYWwoZW52LCBzcmMsIHNyY0J1ZiwgMCk7Ci0JCWRzdEJ1Zj1zcmNCdWY9TlVMTDsKIAkJX3Rocm93KHRqR2V0RXJyb3JTdHIoKSk7Ci0JfQogCiAJYmFpbG91dDoKIAlpZihkc3RCdWYpICgqZW52KS0+UmVsZWFzZVByaW1pdGl2ZUFycmF5Q3JpdGljYWwoZW52LCBkc3QsIGRzdEJ1ZiwgMCk7CkBAIC0yMTUsNDkgKzIzMCwzMyBAQAogCXJldHVybjsKIH0KIAotSk5JRVhQT1JUIHZvaWQgSk5JQ0FMTCBKYXZhX29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKQ29tcHJlc3Nvcl9lbmNvZGVZVVZfX18zSUlJSUlfM0JJSQotCShKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGppbnRBcnJheSBzcmMsIGppbnQgd2lkdGgsIGppbnQgcGl0Y2gsCisvKiBUdXJib0pQRUcgMS4yLng6IFRKQ29tcHJlc3Nvcjo6ZW5jb2RlWVVWKCkgYnl0ZSBzb3VyY2UgKi8KK0pOSUVYUE9SVCB2b2lkIEpOSUNBTEwgSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkNvbXByZXNzb3JfZW5jb2RlWVVWX19fM0JJSUlJXzNCSUkKKwkoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqYnl0ZUFycmF5IHNyYywgamludCB3aWR0aCwgamludCBwaXRjaCwKIAkJamludCBoZWlnaHQsIGppbnQgcGYsIGpieXRlQXJyYXkgZHN0LCBqaW50IHN1YnNhbXAsIGppbnQgZmxhZ3MpCiB7Ci0JdGpoYW5kbGUgaGFuZGxlPTA7Ci0JanNpemUgYXJyYXlTaXplPTA7Ci0JdW5zaWduZWQgY2hhciAqc3JjQnVmPU5VTEwsICpkc3RCdWY9TlVMTDsKKwlUSkNvbXByZXNzb3JfZW5jb2RlWVVWKGVudiwgb2JqLCBzcmMsIDEsIHdpZHRoLCBwaXRjaCwgaGVpZ2h0LCBwZiwgZHN0LAorCQlzdWJzYW1wLCBmbGFncyk7Cit9CiAKLQlnZXRoYW5kbGUoKTsKLQotCWlmKHBmPDAgfHwgcGY+PW9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKX05VTVBGIHx8IHdpZHRoPDEgfHwgaGVpZ2h0PDEKLQkJfHwgcGl0Y2g8MCkKLQkJX3Rocm93KCJJbnZhbGlkIGFyZ3VtZW50IGluIGNvbXByZXNzKCkiKTsKLQlpZihvcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9OVU1QRiE9VEpfTlVNUEYpCi0JCV90aHJvdygiTWlzbWF0Y2ggYmV0d2VlbiBKYXZhIGFuZCBDIEFQSSIpOworLyogVHVyYm9KUEVHIDEuMi54OiBUSkNvbXByZXNzb3I6OmVuY29kZVlVVigpIGludCBzb3VyY2UgKi8KK0pOSUVYUE9SVCB2b2lkIEpOSUNBTEwgSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkNvbXByZXNzb3JfZW5jb2RlWVVWX19fM0lJSUlJXzNCSUkKKwkoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqaW50QXJyYXkgc3JjLCBqaW50IHdpZHRoLCBqaW50IHN0cmlkZSwKKwkJamludCBoZWlnaHQsIGppbnQgcGYsIGpieXRlQXJyYXkgZHN0LCBqaW50IHN1YnNhbXAsIGppbnQgZmxhZ3MpCit7CisJaWYocGY8MCB8fCBwZj49b3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpfTlVNUEYpCisJCV90aHJvdygiSW52YWxpZCBhcmd1bWVudCBpbiBlbmNvZGVZVVYoKSIpOwogCWlmKHRqUGl4ZWxTaXplW3BmXSE9c2l6ZW9mKGppbnQpKQogCQlfdGhyb3coIlBpeGVsIGZvcm1hdCBtdXN0IGJlIDMyLWJpdCB3aGVuIGVuY29kaW5nIGZyb20gYW4gaW50ZWdlciBidWZmZXIuIik7CiAKLQlhcnJheVNpemU9KHBpdGNoPT0wKT8gd2lkdGgqaGVpZ2h0OnBpdGNoKmhlaWdodDsKLQlpZigoKmVudiktPkdldEFycmF5TGVuZ3RoKGVudiwgc3JjKTxhcnJheVNpemUpCi0JCV90aHJvdygiU291cmNlIGJ1ZmZlciBpcyBub3QgbGFyZ2UgZW5vdWdoIik7Ci0JaWYoKCplbnYpLT5HZXRBcnJheUxlbmd0aChlbnYsIGRzdCkKLQkJPChqc2l6ZSl0akJ1ZlNpemVZVVYod2lkdGgsIGhlaWdodCwgc3Vic2FtcCkpCi0JCV90aHJvdygiRGVzdGluYXRpb24gYnVmZmVyIGlzIG5vdCBsYXJnZSBlbm91Z2giKTsKLQotCWJhaWxpZjAoc3JjQnVmPSgqZW52KS0+R2V0UHJpbWl0aXZlQXJyYXlDcml0aWNhbChlbnYsIHNyYywgMCkpOwotCWJhaWxpZjAoZHN0QnVmPSgqZW52KS0+R2V0UHJpbWl0aXZlQXJyYXlDcml0aWNhbChlbnYsIGRzdCwgMCkpOwotCi0JaWYodGpFbmNvZGVZVVYyKGhhbmRsZSwgc3JjQnVmLCB3aWR0aCwgcGl0Y2gqc2l6ZW9mKGppbnQpLCBoZWlnaHQsIHBmLAotCQlkc3RCdWYsIHN1YnNhbXAsIGZsYWdzKT09LTEpCi0JewotCQkoKmVudiktPlJlbGVhc2VQcmltaXRpdmVBcnJheUNyaXRpY2FsKGVudiwgZHN0LCBkc3RCdWYsIDApOwotCQkoKmVudiktPlJlbGVhc2VQcmltaXRpdmVBcnJheUNyaXRpY2FsKGVudiwgc3JjLCBzcmNCdWYsIDApOwotCQlkc3RCdWY9c3JjQnVmPU5VTEw7Ci0JCV90aHJvdyh0akdldEVycm9yU3RyKCkpOwotCX0KKwlUSkNvbXByZXNzb3JfZW5jb2RlWVVWKGVudiwgb2JqLCBzcmMsIHNpemVvZihqaW50KSwgd2lkdGgsCisJCXN0cmlkZSpzaXplb2YoamludCksIGhlaWdodCwgcGYsIGRzdCwgc3Vic2FtcCwgZmxhZ3MpOwogCiAJYmFpbG91dDoKLQlpZihkc3RCdWYpICgqZW52KS0+UmVsZWFzZVByaW1pdGl2ZUFycmF5Q3JpdGljYWwoZW52LCBkc3QsIGRzdEJ1ZiwgMCk7Ci0JaWYoc3JjQnVmKSAoKmVudiktPlJlbGVhc2VQcmltaXRpdmVBcnJheUNyaXRpY2FsKGVudiwgc3JjLCBzcmNCdWYsIDApOwogCXJldHVybjsKIH0KIAorLyogVHVyYm9KUEVHIDEuMi54OiBUSkNvbXByZXNzb3I6OmRlc3Ryb3koKSAqLwogSk5JRVhQT1JUIHZvaWQgSk5JQ0FMTCBKYXZhX29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKQ29tcHJlc3Nvcl9kZXN0cm95CiAJKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaikKIHsKQEAgLTI3Miw2ICsyNzEsNyBAQAogCXJldHVybjsKIH0KIAorLyogVHVyYm9KUEVHIDEuMi54OiBUSkRlY29tcHJlc3Nvcjo6aW5pdCgpICovCiBKTklFWFBPUlQgdm9pZCBKTklDQUxMIEphdmFfb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpEZWNvbXByZXNzb3JfaW5pdAogCShKTklFbnYgKmVudiwgam9iamVjdCBvYmopCiB7CkBAIC0yODMsMTYgKzI4MywxNyBAQAogCiAJYmFpbGlmMChjbHM9KCplbnYpLT5HZXRPYmplY3RDbGFzcyhlbnYsIG9iaikpOwogCWJhaWxpZjAoZmlkPSgqZW52KS0+R2V0RmllbGRJRChlbnYsIGNscywgImhhbmRsZSIsICJKIikpOwotCSgqZW52KS0+U2V0TG9uZ0ZpZWxkKGVudiwgb2JqLCBmaWQsIChqbG9uZyloYW5kbGUpOworCSgqZW52KS0+U2V0TG9uZ0ZpZWxkKGVudiwgb2JqLCBmaWQsIChzaXplX3QpaGFuZGxlKTsKIAogCWJhaWxvdXQ6CiAJcmV0dXJuOwogfQogCisvKiBUdXJib0pQRUcgMS4yLng6IFRKRGVjb21wcmVzc29yOjpnZXRTY2FsaW5nRmFjdG9ycygpICovCiBKTklFWFBPUlQgam9iamVjdEFycmF5IEpOSUNBTEwgSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9nZXRTY2FsaW5nRmFjdG9ycwogCShKTklFbnYgKmVudiwgamNsYXNzIGNscykKIHsKLSAgamNsYXNzIHNmY2xzPU5VTEw7ICBqZmllbGRJRCBmaWQ9MDsKKwlqY2xhc3Mgc2ZjbHM9TlVMTDsgIGpmaWVsZElEIGZpZD0wOwogCXRqc2NhbGluZ2ZhY3RvciAqc2Y9TlVMTDsgIGludCBuPTAsIGk7CiAJam9iamVjdCBzZm9iaj1OVUxMOwogCWpvYmplY3RBcnJheSBzZmphdmE9TlVMTDsKQEAgLTMxNyw2ICszMTgsNyBAQAogCXJldHVybiBzZmphdmE7CiB9CiAKKy8qIFR1cmJvSlBFRyAxLjIueDogVEpEZWNvbXByZXNzb3I6OmRlY29tcHJlc3NIZWFkZXIoKSAqLwogSk5JRVhQT1JUIHZvaWQgSk5JQ0FMTCBKYXZhX29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKRGVjb21wcmVzc29yX2RlY29tcHJlc3NIZWFkZXIKIAkoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqYnl0ZUFycmF5IHNyYywgamludCBqcGVnU2l6ZSkKIHsKQEAgLTMzMSwxMiArMzMzLDEwIEBACiAKIAliYWlsaWYwKGpwZWdCdWY9KCplbnYpLT5HZXRQcmltaXRpdmVBcnJheUNyaXRpY2FsKGVudiwgc3JjLCAwKSk7CiAKLQlpZih0akRlY29tcHJlc3NIZWFkZXIyKGhhbmRsZSwganBlZ0J1ZiwgKHVuc2lnbmVkIGxvbmcpanBlZ1NpemUsIAorCWlmKHRqRGVjb21wcmVzc0hlYWRlcjIoaGFuZGxlLCBqcGVnQnVmLCAodW5zaWduZWQgbG9uZylqcGVnU2l6ZSwKIAkJJndpZHRoLCAmaGVpZ2h0LCAmanBlZ1N1YnNhbXApPT0tMSkKLQl7Ci0JCSgqZW52KS0+UmVsZWFzZVByaW1pdGl2ZUFycmF5Q3JpdGljYWwoZW52LCBzcmMsIGpwZWdCdWYsIDApOwogCQlfdGhyb3codGpHZXRFcnJvclN0cigpKTsKLQl9CisKIAkoKmVudiktPlJlbGVhc2VQcmltaXRpdmVBcnJheUNyaXRpY2FsKGVudiwgc3JjLCBqcGVnQnVmLCAwKTsgIGpwZWdCdWY9TlVMTDsKIAogCWJhaWxpZjAoX2ZpZD0oKmVudiktPkdldEZpZWxkSUQoZW52LCBfY2xzLCAianBlZ1N1YnNhbXAiLCAiSSIpKTsKQEAgLTM0Nyw4OSArMzQ3LDEwMSBAQAogCSgqZW52KS0+U2V0SW50RmllbGQoZW52LCBvYmosIF9maWQsIGhlaWdodCk7CiAKIAliYWlsb3V0OgorCWlmKGpwZWdCdWYpICgqZW52KS0+UmVsZWFzZVByaW1pdGl2ZUFycmF5Q3JpdGljYWwoZW52LCBzcmMsIGpwZWdCdWYsIDApOwogCXJldHVybjsKIH0KIAorc3RhdGljIHZvaWQgVEpEZWNvbXByZXNzb3JfZGVjb21wcmVzcworCShKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGpieXRlQXJyYXkgc3JjLCBqaW50IGpwZWdTaXplLCBqYXJyYXkgZHN0LAorCQlqaW50IGRzdEVsZW1lbnRTaXplLCBqaW50IHgsIGppbnQgeSwgamludCB3aWR0aCwgamludCBwaXRjaCwgamludCBoZWlnaHQsCisJCWppbnQgcGYsIGppbnQgZmxhZ3MpCit7CisJdGpoYW5kbGUgaGFuZGxlPTA7CisJanNpemUgYXJyYXlTaXplPTAsIGFjdHVhbFBpdGNoOworCXVuc2lnbmVkIGNoYXIgKmpwZWdCdWY9TlVMTCwgKmRzdEJ1Zj1OVUxMOworCisJZ2V0aGFuZGxlKCk7CisKKwlpZihwZjwwIHx8IHBmPj1vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9OVU1QRikKKwkJX3Rocm93KCJJbnZhbGlkIGFyZ3VtZW50IGluIGRlY29tcHJlc3MoKSIpOworCWlmKG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKX05VTVBGIT1USl9OVU1QRikKKwkJX3Rocm93KCJNaXNtYXRjaCBiZXR3ZWVuIEphdmEgYW5kIEMgQVBJIik7CisKKwlpZigoKmVudiktPkdldEFycmF5TGVuZ3RoKGVudiwgc3JjKTxqcGVnU2l6ZSkKKwkJX3Rocm93KCJTb3VyY2UgYnVmZmVyIGlzIG5vdCBsYXJnZSBlbm91Z2giKTsKKwlhY3R1YWxQaXRjaD0ocGl0Y2g9PTApPyB3aWR0aCp0alBpeGVsU2l6ZVtwZl06cGl0Y2g7CisJYXJyYXlTaXplPSh5K2hlaWdodC0xKSphY3R1YWxQaXRjaCArICh4K3dpZHRoKSp0alBpeGVsU2l6ZVtwZl07CisJaWYoKCplbnYpLT5HZXRBcnJheUxlbmd0aChlbnYsIGRzdCkqZHN0RWxlbWVudFNpemU8YXJyYXlTaXplKQorCQlfdGhyb3coIkRlc3RpbmF0aW9uIGJ1ZmZlciBpcyBub3QgbGFyZ2UgZW5vdWdoIik7CisKKwliYWlsaWYwKGpwZWdCdWY9KCplbnYpLT5HZXRQcmltaXRpdmVBcnJheUNyaXRpY2FsKGVudiwgc3JjLCAwKSk7CisJYmFpbGlmMChkc3RCdWY9KCplbnYpLT5HZXRQcmltaXRpdmVBcnJheUNyaXRpY2FsKGVudiwgZHN0LCAwKSk7CisKKwlpZih0akRlY29tcHJlc3MyKGhhbmRsZSwganBlZ0J1ZiwgKHVuc2lnbmVkIGxvbmcpanBlZ1NpemUsCisJCSZkc3RCdWZbeSphY3R1YWxQaXRjaCArIHgqdGpQaXhlbFNpemVbcGZdXSwgd2lkdGgsIHBpdGNoLCBoZWlnaHQsIHBmLAorCQlmbGFncyk9PS0xKQorCQlfdGhyb3codGpHZXRFcnJvclN0cigpKTsKKworCWJhaWxvdXQ6CisJaWYoZHN0QnVmKSAoKmVudiktPlJlbGVhc2VQcmltaXRpdmVBcnJheUNyaXRpY2FsKGVudiwgZHN0LCBkc3RCdWYsIDApOworCWlmKGpwZWdCdWYpICgqZW52KS0+UmVsZWFzZVByaW1pdGl2ZUFycmF5Q3JpdGljYWwoZW52LCBzcmMsIGpwZWdCdWYsIDApOworCXJldHVybjsKK30KKworLyogVHVyYm9KUEVHIDEuMy54OiBUSkRlY29tcHJlc3Nvcjo6ZGVjb21wcmVzcygpIGJ5dGUgZGVzdGluYXRpb24gKi8KK0pOSUVYUE9SVCB2b2lkIEpOSUNBTEwgSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkRlY29tcHJlc3Nvcl9kZWNvbXByZXNzX19fM0JJXzNCSUlJSUlJSQorCShKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGpieXRlQXJyYXkgc3JjLCBqaW50IGpwZWdTaXplLCBqYnl0ZUFycmF5IGRzdCwKKwkJamludCB4LCBqaW50IHksIGppbnQgd2lkdGgsIGppbnQgcGl0Y2gsIGppbnQgaGVpZ2h0LCBqaW50IHBmLCBqaW50IGZsYWdzKQoreworCVRKRGVjb21wcmVzc29yX2RlY29tcHJlc3MoZW52LCBvYmosIHNyYywganBlZ1NpemUsIGRzdCwgMSwgeCwgeSwgd2lkdGgsCisJCXBpdGNoLCBoZWlnaHQsIHBmLCBmbGFncyk7Cit9CisKKy8qIFR1cmJvSlBFRyAxLjIueDogVEpEZWNvbXByZXNzb3I6OmRlY29tcHJlc3MoKSBieXRlIGRlc3RpbmF0aW9uICovCiBKTklFWFBPUlQgdm9pZCBKTklDQUxMIEphdmFfb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpEZWNvbXByZXNzb3JfZGVjb21wcmVzc19fXzNCSV8zQklJSUlJCiAJKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgamJ5dGVBcnJheSBzcmMsIGppbnQganBlZ1NpemUsIGpieXRlQXJyYXkgZHN0LAogCQlqaW50IHdpZHRoLCBqaW50IHBpdGNoLCBqaW50IGhlaWdodCwgamludCBwZiwgamludCBmbGFncykKIHsKLQl0amhhbmRsZSBoYW5kbGU9MDsKLQlqc2l6ZSBhcnJheVNpemU9MDsKLQl1bnNpZ25lZCBjaGFyICpqcGVnQnVmPU5VTEwsICpkc3RCdWY9TlVMTDsKLQotCWdldGhhbmRsZSgpOwotCi0JaWYocGY8MCB8fCBwZj49b3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpfTlVNUEYpCi0JCV90aHJvdygiSW52YWxpZCBhcmd1bWVudCBpbiBkZWNvbXByZXNzKCkiKTsKLQlpZihvcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9OVU1QRiE9VEpfTlVNUEYpCi0JCV90aHJvdygiTWlzbWF0Y2ggYmV0d2VlbiBKYXZhIGFuZCBDIEFQSSIpOwotCi0JaWYoKCplbnYpLT5HZXRBcnJheUxlbmd0aChlbnYsIHNyYyk8anBlZ1NpemUpCi0JCV90aHJvdygiU291cmNlIGJ1ZmZlciBpcyBub3QgbGFyZ2UgZW5vdWdoIik7Ci0JYXJyYXlTaXplPShwaXRjaD09MCk/IHdpZHRoKnRqUGl4ZWxTaXplW3BmXSpoZWlnaHQ6cGl0Y2gqaGVpZ2h0OwotCWlmKCgqZW52KS0+R2V0QXJyYXlMZW5ndGgoZW52LCBkc3QpPGFycmF5U2l6ZSkKLQkJX3Rocm93KCJEZXN0aW5hdGlvbiBidWZmZXIgaXMgbm90IGxhcmdlIGVub3VnaCIpOwotCi0JYmFpbGlmMChqcGVnQnVmPSgqZW52KS0+R2V0UHJpbWl0aXZlQXJyYXlDcml0aWNhbChlbnYsIHNyYywgMCkpOwotCWJhaWxpZjAoZHN0QnVmPSgqZW52KS0+R2V0UHJpbWl0aXZlQXJyYXlDcml0aWNhbChlbnYsIGRzdCwgMCkpOwotCi0JaWYodGpEZWNvbXByZXNzMihoYW5kbGUsIGpwZWdCdWYsICh1bnNpZ25lZCBsb25nKWpwZWdTaXplLCBkc3RCdWYsIHdpZHRoLAotCQlwaXRjaCwgaGVpZ2h0LCBwZiwgZmxhZ3MpPT0tMSkKLQl7Ci0JCSgqZW52KS0+UmVsZWFzZVByaW1pdGl2ZUFycmF5Q3JpdGljYWwoZW52LCBkc3QsIGRzdEJ1ZiwgMCk7Ci0JCSgqZW52KS0+UmVsZWFzZVByaW1pdGl2ZUFycmF5Q3JpdGljYWwoZW52LCBzcmMsIGpwZWdCdWYsIDApOwotCQlkc3RCdWY9anBlZ0J1Zj1OVUxMOwotCQlfdGhyb3codGpHZXRFcnJvclN0cigpKTsKLQl9Ci0KLQliYWlsb3V0OgotCWlmKGRzdEJ1ZikgKCplbnYpLT5SZWxlYXNlUHJpbWl0aXZlQXJyYXlDcml0aWNhbChlbnYsIGRzdCwgZHN0QnVmLCAwKTsKLQlpZihqcGVnQnVmKSAoKmVudiktPlJlbGVhc2VQcmltaXRpdmVBcnJheUNyaXRpY2FsKGVudiwgc3JjLCBqcGVnQnVmLCAwKTsKLQlyZXR1cm47CisJVEpEZWNvbXByZXNzb3JfZGVjb21wcmVzcyhlbnYsIG9iaiwgc3JjLCBqcGVnU2l6ZSwgZHN0LCAxLCAwLCAwLCB3aWR0aCwKKwkJcGl0Y2gsIGhlaWdodCwgcGYsIGZsYWdzKTsKIH0KIAotSk5JRVhQT1JUIHZvaWQgSk5JQ0FMTCBKYXZhX29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKRGVjb21wcmVzc29yX2RlY29tcHJlc3NfX18zQklfM0lJSUlJSQorLyogVHVyYm9KUEVHIDEuMy54OiBUSkRlY29tcHJlc3Nvcjo6ZGVjb21wcmVzcygpIGludCBkZXN0aW5hdGlvbiAqLworSk5JRVhQT1JUIHZvaWQgSk5JQ0FMTCBKYXZhX29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKRGVjb21wcmVzc29yX2RlY29tcHJlc3NfX18zQklfM0lJSUlJSUlJCiAJKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgamJ5dGVBcnJheSBzcmMsIGppbnQganBlZ1NpemUsIGppbnRBcnJheSBkc3QsCi0JCWppbnQgd2lkdGgsIGppbnQgcGl0Y2gsIGppbnQgaGVpZ2h0LCBqaW50IHBmLCBqaW50IGZsYWdzKQorCQlqaW50IHgsIGppbnQgeSwgamludCB3aWR0aCwgamludCBzdHJpZGUsIGppbnQgaGVpZ2h0LCBqaW50IHBmLCBqaW50IGZsYWdzKQogewotCXRqaGFuZGxlIGhhbmRsZT0wOwotCWpzaXplIGFycmF5U2l6ZT0wOwotCXVuc2lnbmVkIGNoYXIgKmpwZWdCdWY9TlVMTCwgKmRzdEJ1Zj1OVUxMOwotCi0JZ2V0aGFuZGxlKCk7Ci0KIAlpZihwZjwwIHx8IHBmPj1vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9OVU1QRikKIAkJX3Rocm93KCJJbnZhbGlkIGFyZ3VtZW50IGluIGRlY29tcHJlc3MoKSIpOwotCWlmKG9yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKX05VTVBGIT1USl9OVU1QRikKLQkJX3Rocm93KCJNaXNtYXRjaCBiZXR3ZWVuIEphdmEgYW5kIEMgQVBJIik7CiAJaWYodGpQaXhlbFNpemVbcGZdIT1zaXplb2YoamludCkpCiAJCV90aHJvdygiUGl4ZWwgZm9ybWF0IG11c3QgYmUgMzItYml0IHdoZW4gZGVjb21wcmVzc2luZyB0byBhbiBpbnRlZ2VyIGJ1ZmZlci4iKTsKIAotCWlmKCgqZW52KS0+R2V0QXJyYXlMZW5ndGgoZW52LCBzcmMpPGpwZWdTaXplKQotCQlfdGhyb3coIlNvdXJjZSBidWZmZXIgaXMgbm90IGxhcmdlIGVub3VnaCIpOwotCWFycmF5U2l6ZT0ocGl0Y2g9PTApPyB3aWR0aCpoZWlnaHQ6cGl0Y2gqaGVpZ2h0OwotCWlmKCgqZW52KS0+R2V0QXJyYXlMZW5ndGgoZW52LCBkc3QpPGFycmF5U2l6ZSkKLQkJX3Rocm93KCJEZXN0aW5hdGlvbiBidWZmZXIgaXMgbm90IGxhcmdlIGVub3VnaCIpOwotCi0JYmFpbGlmMChqcGVnQnVmPSgqZW52KS0+R2V0UHJpbWl0aXZlQXJyYXlDcml0aWNhbChlbnYsIHNyYywgMCkpOwotCWJhaWxpZjAoZHN0QnVmPSgqZW52KS0+R2V0UHJpbWl0aXZlQXJyYXlDcml0aWNhbChlbnYsIGRzdCwgMCkpOwotCi0JaWYodGpEZWNvbXByZXNzMihoYW5kbGUsIGpwZWdCdWYsICh1bnNpZ25lZCBsb25nKWpwZWdTaXplLCBkc3RCdWYsIHdpZHRoLAotCQlwaXRjaCpzaXplb2YoamludCksIGhlaWdodCwgcGYsIGZsYWdzKT09LTEpCi0JewotCQkoKmVudiktPlJlbGVhc2VQcmltaXRpdmVBcnJheUNyaXRpY2FsKGVudiwgZHN0LCBkc3RCdWYsIDApOwotCQkoKmVudiktPlJlbGVhc2VQcmltaXRpdmVBcnJheUNyaXRpY2FsKGVudiwgc3JjLCBqcGVnQnVmLCAwKTsKLQkJZHN0QnVmPWpwZWdCdWY9TlVMTDsKLQkJX3Rocm93KHRqR2V0RXJyb3JTdHIoKSk7Ci0JfQorCVRKRGVjb21wcmVzc29yX2RlY29tcHJlc3MoZW52LCBvYmosIHNyYywganBlZ1NpemUsIGRzdCwgc2l6ZW9mKGppbnQpLCB4LCB5LAorCQl3aWR0aCwgc3RyaWRlKnNpemVvZihqaW50KSwgaGVpZ2h0LCBwZiwgZmxhZ3MpOwogCiAJYmFpbG91dDoKLQlpZihkc3RCdWYpICgqZW52KS0+UmVsZWFzZVByaW1pdGl2ZUFycmF5Q3JpdGljYWwoZW52LCBkc3QsIGRzdEJ1ZiwgMCk7Ci0JaWYoanBlZ0J1ZikgKCplbnYpLT5SZWxlYXNlUHJpbWl0aXZlQXJyYXlDcml0aWNhbChlbnYsIHNyYywganBlZ0J1ZiwgMCk7CiAJcmV0dXJuOwogfQogCisvKiBUdXJib0pQRUcgMS4yLng6IFRKRGVjb21wcmVzc29yOjpkZWNvbXByZXNzKCkgaW50IGRlc3RpbmF0aW9uICovCitKTklFWFBPUlQgdm9pZCBKTklDQUxMIEphdmFfb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpEZWNvbXByZXNzb3JfZGVjb21wcmVzc19fXzNCSV8zSUlJSUlJCisJKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgamJ5dGVBcnJheSBzcmMsIGppbnQganBlZ1NpemUsIGppbnRBcnJheSBkc3QsCisJCWppbnQgd2lkdGgsIGppbnQgc3RyaWRlLCBqaW50IGhlaWdodCwgamludCBwZiwgamludCBmbGFncykKK3sKKwlpZihwZjwwIHx8IHBmPj1vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USl9OVU1QRikKKwkJX3Rocm93KCJJbnZhbGlkIGFyZ3VtZW50IGluIGRlY29tcHJlc3MoKSIpOworCWlmKHRqUGl4ZWxTaXplW3BmXSE9c2l6ZW9mKGppbnQpKQorCQlfdGhyb3coIlBpeGVsIGZvcm1hdCBtdXN0IGJlIDMyLWJpdCB3aGVuIGRlY29tcHJlc3NpbmcgdG8gYW4gaW50ZWdlciBidWZmZXIuIik7CisKKwlUSkRlY29tcHJlc3Nvcl9kZWNvbXByZXNzKGVudiwgb2JqLCBzcmMsIGpwZWdTaXplLCBkc3QsIHNpemVvZihqaW50KSwgMCwgMCwKKwkJd2lkdGgsIHN0cmlkZSpzaXplb2YoamludCksIGhlaWdodCwgcGYsIGZsYWdzKTsKKworCWJhaWxvdXQ6CisJcmV0dXJuOworCit9CisKKy8qIFR1cmJvSlBFRyAxLjIueDogVEpEZWNvbXByZXNzb3I6OmRlY29tcHJlc3NUb1lVVigpICovCiBKTklFWFBPUlQgdm9pZCBKTklDQUxMIEphdmFfb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpEZWNvbXByZXNzb3JfZGVjb21wcmVzc1RvWVVWCiAJKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgamJ5dGVBcnJheSBzcmMsIGppbnQganBlZ1NpemUsIGpieXRlQXJyYXkgZHN0LAogCQlqaW50IGZsYWdzKQpAQCAtNDU3LDEyICs0NjksNyBAQAogCiAJaWYodGpEZWNvbXByZXNzVG9ZVVYoaGFuZGxlLCBqcGVnQnVmLCAodW5zaWduZWQgbG9uZylqcGVnU2l6ZSwgZHN0QnVmLAogCQlmbGFncyk9PS0xKQotCXsKLQkJKCplbnYpLT5SZWxlYXNlUHJpbWl0aXZlQXJyYXlDcml0aWNhbChlbnYsIGRzdCwgZHN0QnVmLCAwKTsKLQkJKCplbnYpLT5SZWxlYXNlUHJpbWl0aXZlQXJyYXlDcml0aWNhbChlbnYsIHNyYywganBlZ0J1ZiwgMCk7Ci0JCWRzdEJ1Zj1qcGVnQnVmPU5VTEw7CiAJCV90aHJvdyh0akdldEVycm9yU3RyKCkpOwotCX0KIAogCWJhaWxvdXQ6CiAJaWYoZHN0QnVmKSAoKmVudiktPlJlbGVhc2VQcmltaXRpdmVBcnJheUNyaXRpY2FsKGVudiwgZHN0LCBkc3RCdWYsIDApOwpAQCAtNDcwLDYgKzQ3Nyw3IEBACiAJcmV0dXJuOwogfQogCisvKiBUdXJib0pQRUcgMS4yLng6IFRKVHJhbnNmb3JtZXI6OmluaXQoKSAqLwogSk5JRVhQT1JUIHZvaWQgSk5JQ0FMTCBKYXZhX29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKVHJhbnNmb3JtZXJfaW5pdAogCShKTklFbnYgKmVudiwgam9iamVjdCBvYmopCiB7CkBAIC00ODEsNyArNDg5LDcgQEAKIAogCWJhaWxpZjAoY2xzPSgqZW52KS0+R2V0T2JqZWN0Q2xhc3MoZW52LCBvYmopKTsKIAliYWlsaWYwKGZpZD0oKmVudiktPkdldEZpZWxkSUQoZW52LCBjbHMsICJoYW5kbGUiLCAiSiIpKTsKLQkoKmVudiktPlNldExvbmdGaWVsZChlbnYsIG9iaiwgZmlkLCAoamxvbmcpaGFuZGxlKTsKKwkoKmVudiktPlNldExvbmdGaWVsZChlbnYsIG9iaiwgZmlkLCAoc2l6ZV90KWhhbmRsZSk7CiAKIAliYWlsb3V0OgogCXJldHVybjsKQEAgLTUwMSwyMCArNTA5LDIwIEBACiAJSk5JQ3VzdG9tRmlsdGVyUGFyYW1zICpwYXJhbXM9KEpOSUN1c3RvbUZpbHRlclBhcmFtcyAqKXRyYW5zZm9ybS0+ZGF0YTsKIAlKTklFbnYgKmVudj1wYXJhbXMtPmVudjsKIAlqb2JqZWN0IHRvYmo9cGFyYW1zLT50b2JqLCBjZm9iaj1wYXJhbXMtPmNmb2JqOwotICBqb2JqZWN0IGFycmF5UmVnaW9uT2JqLCBwbGFuZVJlZ2lvbk9iaiwgYnVmb2JqLCBib3JvYmo7CisJam9iamVjdCBhcnJheVJlZ2lvbk9iaiwgcGxhbmVSZWdpb25PYmosIGJ1Zm9iaiwgYm9yb2JqOwogCWpjbGFzcyBjbHM7ICBqbWV0aG9kSUQgbWlkOyAgamZpZWxkSUQgZmlkOwogCiAJYmFpbGlmMChidWZvYmo9KCplbnYpLT5OZXdEaXJlY3RCeXRlQnVmZmVyKGVudiwgY29lZmZzLAogCQlzaXplb2Yoc2hvcnQpKmFycmF5UmVnaW9uLncqYXJyYXlSZWdpb24uaCkpOwogCWJhaWxpZjAoY2xzPSgqZW52KS0+RmluZENsYXNzKGVudiwgImphdmEvbmlvL0J5dGVPcmRlciIpKTsKLSAgYmFpbGlmMChtaWQ9KCplbnYpLT5HZXRTdGF0aWNNZXRob2RJRChlbnYsIGNscywgIm5hdGl2ZU9yZGVyIiwKKwliYWlsaWYwKG1pZD0oKmVudiktPkdldFN0YXRpY01ldGhvZElEKGVudiwgY2xzLCAibmF0aXZlT3JkZXIiLAogCQkiKClMamF2YS9uaW8vQnl0ZU9yZGVyOyIpKTsKIAliYWlsaWYwKGJvcm9iaj0oKmVudiktPkNhbGxTdGF0aWNPYmplY3RNZXRob2QoZW52LCBjbHMsIG1pZCkpOwogCWJhaWxpZjAoY2xzPSgqZW52KS0+R2V0T2JqZWN0Q2xhc3MoZW52LCBidWZvYmopKTsKIAliYWlsaWYwKG1pZD0oKmVudiktPkdldE1ldGhvZElEKGVudiwgY2xzLCAib3JkZXIiLAogCQkiKExqYXZhL25pby9CeXRlT3JkZXI7KUxqYXZhL25pby9CeXRlQnVmZmVyOyIpKTsKIAkoKmVudiktPkNhbGxPYmplY3RNZXRob2QoZW52LCBidWZvYmosIG1pZCwgYm9yb2JqKTsKLSAgYmFpbGlmMChtaWQ9KCplbnYpLT5HZXRNZXRob2RJRChlbnYsIGNscywgImFzU2hvcnRCdWZmZXIiLAorCWJhaWxpZjAobWlkPSgqZW52KS0+R2V0TWV0aG9kSUQoZW52LCBjbHMsICJhc1Nob3J0QnVmZmVyIiwKIAkJIigpTGphdmEvbmlvL1Nob3J0QnVmZmVyOyIpKTsKIAliYWlsaWYwKGJ1Zm9iaj0oKmVudiktPkNhbGxPYmplY3RNZXRob2QoZW52LCBidWZvYmosIG1pZCkpOwogCkBAIC01NTEsNiArNTU5LDcgQEAKIAlyZXR1cm4gLTE7CiB9CiAKKy8qIFR1cmJvSlBFRyAxLjIueDogVEpUcmFuc2Zvcm1lcjo6dHJhbnNmb3JtKCkgKi8KIEpOSUVYUE9SVCBqaW50QXJyYXkgSk5JQ0FMTCBKYXZhX29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKVHJhbnNmb3JtZXJfdHJhbnNmb3JtCiAJKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgamJ5dGVBcnJheSBqc3JjQnVmLCBqaW50IGpwZWdTaXplLAogCQlqb2JqZWN0QXJyYXkgZHN0b2Jqcywgam9iamVjdEFycmF5IHRvYmpzLCBqaW50IGZsYWdzKQpAQCAtNjI4LDcgKzYzNyw2IEBACiAJCX0KIAl9CiAKLQliYWlsaWYwKGpwZWdCdWY9KCplbnYpLT5HZXRQcmltaXRpdmVBcnJheUNyaXRpY2FsKGVudiwganNyY0J1ZiwgMCkpOwogCWZvcihpPTA7IGk8bjsgaSsrKQogCXsKIAkJaW50IHc9anBlZ1dpZHRoLCBoPWpwZWdIZWlnaHQ7CkBAIC02MzgsMjggKzY0NiwyOSBAQAogCQlpZigodW5zaWduZWQgbG9uZykoKmVudiktPkdldEFycmF5TGVuZ3RoKGVudiwgamRzdEJ1ZnNbaV0pCiAJCQk8dGpCdWZTaXplKHcsIGgsIGpwZWdTdWJzYW1wKSkKIAkJCV90aHJvdygiRGVzdGluYXRpb24gYnVmZmVyIGlzIG5vdCBsYXJnZSBlbm91Z2giKTsKLQkJYmFpbGlmMChkc3RCdWZzW2ldPSgqZW52KS0+R2V0UHJpbWl0aXZlQXJyYXlDcml0aWNhbChlbnYsIGpkc3RCdWZzW2ldLCAwKSk7CiAJfQorCWJhaWxpZjAoanBlZ0J1Zj0oKmVudiktPkdldFByaW1pdGl2ZUFycmF5Q3JpdGljYWwoZW52LCBqc3JjQnVmLCAwKSk7CisJZm9yKGk9MDsgaTxuOyBpKyspCisJCWJhaWxpZjAoZHN0QnVmc1tpXT0oKmVudiktPkdldFByaW1pdGl2ZUFycmF5Q3JpdGljYWwoZW52LCBqZHN0QnVmc1tpXSwgMCkpOwogCiAJaWYodGpUcmFuc2Zvcm0oaGFuZGxlLCBqcGVnQnVmLCBqcGVnU2l6ZSwgbiwgZHN0QnVmcywgZHN0U2l6ZXMsIHQsCiAJCWZsYWdzfFRKRkxBR19OT1JFQUxMT0MpPT0tMSkKLQl7Ci0JCSgqZW52KS0+UmVsZWFzZVByaW1pdGl2ZUFycmF5Q3JpdGljYWwoZW52LCBqc3JjQnVmLCBqcGVnQnVmLCAwKTsKLQkJanBlZ0J1Zj1OVUxMOwotCQlmb3IoaT0wOyBpPG47IGkrKykKLQkJewotCQkJKCplbnYpLT5SZWxlYXNlUHJpbWl0aXZlQXJyYXlDcml0aWNhbChlbnYsIGpkc3RCdWZzW2ldLCBkc3RCdWZzW2ldLCAwKTsKLQkJCWRzdEJ1ZnNbaV09TlVMTDsKLQkJfQogCQlfdGhyb3codGpHZXRFcnJvclN0cigpKTsKKworCWZvcihpPTA7IGk8bjsgaSsrKQorCXsKKwkJKCplbnYpLT5SZWxlYXNlUHJpbWl0aXZlQXJyYXlDcml0aWNhbChlbnYsIGpkc3RCdWZzW2ldLCBkc3RCdWZzW2ldLCAwKTsKKwkJZHN0QnVmc1tpXT1OVUxMOwogCX0KKwkoKmVudiktPlJlbGVhc2VQcmltaXRpdmVBcnJheUNyaXRpY2FsKGVudiwganNyY0J1ZiwganBlZ0J1ZiwgMCk7CisJanBlZ0J1Zj1OVUxMOwogCiAJamRzdFNpemVzPSgqZW52KS0+TmV3SW50QXJyYXkoZW52LCBuKTsKIAliYWlsaWYwKGRzdFNpemVzaT0oKmVudiktPkdldEludEFycmF5RWxlbWVudHMoZW52LCBqZHN0U2l6ZXMsIDApKTsKIAlmb3IoaT0wOyBpPG47IGkrKykgZHN0U2l6ZXNpW2ldPShpbnQpZHN0U2l6ZXNbaV07CiAKIAliYWlsb3V0OgotCWlmKGpwZWdCdWYpICgqZW52KS0+UmVsZWFzZVByaW1pdGl2ZUFycmF5Q3JpdGljYWwoZW52LCBqc3JjQnVmLCBqcGVnQnVmLCAwKTsKKwlpZihkc3RTaXplc2kpICgqZW52KS0+UmVsZWFzZUludEFycmF5RWxlbWVudHMoZW52LCBqZHN0U2l6ZXMsIGRzdFNpemVzaSwgMCk7CiAJaWYoZHN0QnVmcykKIAl7CiAJCWZvcihpPTA7IGk8bjsgaSsrKQpAQCAtNjY5LDEzICs2NzgsMTQgQEAKIAkJfQogCQlmcmVlKGRzdEJ1ZnMpOwogCX0KKwlpZihqcGVnQnVmKSAoKmVudiktPlJlbGVhc2VQcmltaXRpdmVBcnJheUNyaXRpY2FsKGVudiwganNyY0J1ZiwganBlZ0J1ZiwgMCk7CiAJaWYoamRzdEJ1ZnMpIGZyZWUoamRzdEJ1ZnMpOwogCWlmKGRzdFNpemVzKSBmcmVlKGRzdFNpemVzKTsKLQlpZihkc3RTaXplc2kpICgqZW52KS0+UmVsZWFzZUludEFycmF5RWxlbWVudHMoZW52LCBqZHN0U2l6ZXMsIGRzdFNpemVzaSwgMCk7CiAJaWYodCkgZnJlZSh0KTsKIAlyZXR1cm4gamRzdFNpemVzOwogfQogCisvKiBUdXJib0pQRUcgMS4yLng6IFRKRGVjb21wcmVzc29yOjpkZXN0cm95KCkgKi8KIEpOSUVYUE9SVCB2b2lkIEpOSUNBTEwgSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkRlY29tcHJlc3Nvcl9kZXN0cm95CiAJKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaikKIHsKZGlmZiAtLWdpdCBhL3R1cmJvanBlZy1tYXBmaWxlLmpuaSBiL3R1cmJvanBlZy1tYXBmaWxlLmpuaQppbmRleCA5YzA0NmNlLi4xMTVmMDc2IDEwMDc1NQotLS0gYS90dXJib2pwZWctbWFwZmlsZS5qbmkKKysrIGIvdHVyYm9qcGVnLW1hcGZpbGUuam5pCkBAIC00OSw3ICs0OSwxNiBAQAogCQlKYXZhX29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKRGVjb21wcmVzc29yX2RlY29tcHJlc3NfX18zQklfM0JJSUlJSTsKIAkJSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkRlY29tcHJlc3Nvcl9kZWNvbXByZXNzX19fM0JJXzNJSUlJSUk7CiAJCUphdmFfb3JnX2xpYmpwZWd0dXJib190dXJib2pwZWdfVEpEZWNvbXByZXNzb3JfZGVjb21wcmVzc1RvWVVWOwotCQlKYXZhX29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKRGVjb21wcmVzc29yX2Rlc3Ryb3k7CQkKKwkJSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkRlY29tcHJlc3Nvcl9kZXN0cm95OwogCQlKYXZhX29yZ19saWJqcGVndHVyYm9fdHVyYm9qcGVnX1RKVHJhbnNmb3JtZXJfaW5pdDsKIAkJSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USlRyYW5zZm9ybWVyX3RyYW5zZm9ybTsKIH0gVFVSQk9KUEVHXzEuMTsKKworVFVSQk9KUEVHXzEuMworeworCWdsb2JhbDoKKwkJSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkNvbXByZXNzb3JfY29tcHJlc3NfX18zQklJSUlJSV8zQklJSTsKKwkJSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkNvbXByZXNzb3JfY29tcHJlc3NfX18zSUlJSUlJSV8zQklJSTsKKwkJSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkRlY29tcHJlc3Nvcl9kZWNvbXByZXNzX19fM0JJXzNCSUlJSUlJSTsKKwkJSmF2YV9vcmdfbGlianBlZ3R1cmJvX3R1cmJvanBlZ19USkRlY29tcHJlc3Nvcl9kZWNvbXByZXNzX19fM0JJXzNJSUlJSUlJSTsKK30gVFVSQk9KUEVHXzEuMjsKZGlmZiAtLWdpdCBhL3R1cmJvanBlZy5jIGIvdHVyYm9qcGVnLmMKaW5kZXggYTUwNzU2NS4uMzNhZTg3NSAxMDA2NDQKLS0tIGEvdHVyYm9qcGVnLmMKKysrIGIvdHVyYm9qcGVnLmMKQEAgLTI2LDcgKzI2LDggQEAKICAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLS8qIFR1cmJvSlBFRy9PU1M6ICB0aGlzIGltcGxlbWVudHMgdGhlIFR1cmJvSlBFRyBBUEkgdXNpbmcgbGlianBlZy10dXJibyAqLworLyogVHVyYm9KUEVHL0xKVDogIHRoaXMgaW1wbGVtZW50cyB0aGUgVHVyYm9KUEVHIEFQSSB1c2luZyBsaWJqcGVnIG9yCisgICBsaWJqcGVnLXR1cmJvICovCiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgpAQCAtOTIsMTAgKzkzLDIyIEBACiAJSlhGT1JNX1RSQU5TVkVSU0UsIEpYRk9STV9ST1RfOTAsIEpYRk9STV9ST1RfMTgwLCBKWEZPUk1fUk9UXzI3MAogfTsKIAotI2RlZmluZSBOVU1TRiA0CisjZGVmaW5lIE5VTVNGIDE2CiBzdGF0aWMgY29uc3QgdGpzY2FsaW5nZmFjdG9yIHNmW05VTVNGXT17CisJezIsIDF9LAorCXsxNSwgOH0sCisJezcsIDR9LAorCXsxMywgOH0sCisJezMsIDJ9LAorCXsxMSwgOH0sCisJezUsIDR9LAorCXs5LCA4fSwKIAl7MSwgMX0sCisJezcsIDh9LAorCXszLCA0fSwKKwl7NSwgOH0sCiAJezEsIDJ9LAorCXszLCA4fSwKIAl7MSwgNH0sCiAJezEsIDh9CiB9OwpAQCAtMTA3LDYgKzEyMCwxNiBAQAogCWlmKCF0aGlzKSB7c25wcmludGYoZXJyU3RyLCBKTVNHX0xFTkdUSF9NQVgsICJJbnZhbGlkIGhhbmRsZSIpOyAgXAogCQlyZXR1cm4gLTE7fSAgXAogCWNpbmZvPSZ0aGlzLT5jaW5mbzsgIGRpbmZvPSZ0aGlzLT5kaW5mbzsKKyNkZWZpbmUgZ2V0Y2luc3RhbmNlKGhhbmRsZSkgdGppbnN0YW5jZSAqdGhpcz0odGppbnN0YW5jZSAqKWhhbmRsZTsgIFwKKwlqX2NvbXByZXNzX3B0ciBjaW5mbz1OVUxMOyAgXAorCWlmKCF0aGlzKSB7c25wcmludGYoZXJyU3RyLCBKTVNHX0xFTkdUSF9NQVgsICJJbnZhbGlkIGhhbmRsZSIpOyAgXAorCQlyZXR1cm4gLTE7fSAgXAorCWNpbmZvPSZ0aGlzLT5jaW5mbzsKKyNkZWZpbmUgZ2V0ZGluc3RhbmNlKGhhbmRsZSkgdGppbnN0YW5jZSAqdGhpcz0odGppbnN0YW5jZSAqKWhhbmRsZTsgIFwKKwlqX2RlY29tcHJlc3NfcHRyIGRpbmZvPU5VTEw7ICBcCisJaWYoIXRoaXMpIHtzbnByaW50ZihlcnJTdHIsIEpNU0dfTEVOR1RIX01BWCwgIkludmFsaWQgaGFuZGxlIik7ICBcCisJCXJldHVybiAtMTt9ICBcCisJZGluZm89JnRoaXMtPmRpbmZvOwogCiBzdGF0aWMgaW50IGdldFBpeGVsRm9ybWF0KGludCBwaXhlbFNpemUsIGludCBmbGFncykKIHsKQEAgLTE2MCwxMiArMTgzLDE3IEBACiAJCQljaW5mby0+aW5fY29sb3Jfc3BhY2U9SkNTX0VYVF9YQkdSOyAgYnJlYWs7CiAJCSNlbHNlCiAJCWNhc2UgVEpQRl9SR0I6Ci0JCQlpZihSR0JfUkVEPT0wICYmIFJHQl9HUkVFTj09MSAmJiBSR0JfQkxVRT09MiAmJiBSR0JfUElYRUxTSVpFPT0zKQotCQkJewotCQkJCWNpbmZvLT5pbl9jb2xvcl9zcGFjZT1KQ1NfUkdCOyAgYnJlYWs7Ci0JCQl9Ci0JCWRlZmF1bHQ6Ci0JCQlfdGhyb3coIlVuc3VwcG9ydGVkIHBpeGVsIGZvcm1hdCIpOworCQljYXNlIFRKUEZfQkdSOgorCQljYXNlIFRKUEZfUkdCWDoKKwkJY2FzZSBUSlBGX0JHUlg6CisJCWNhc2UgVEpQRl9YUkdCOgorCQljYXNlIFRKUEZfWEJHUjoKKwkJY2FzZSBUSlBGX1JHQkE6CisJCWNhc2UgVEpQRl9CR1JBOgorCQljYXNlIFRKUEZfQVJHQjoKKwkJY2FzZSBUSlBGX0FCR1I6CisJCQljaW5mby0+aW5fY29sb3Jfc3BhY2U9SkNTX1JHQjsgIHBpeGVsRm9ybWF0PVRKUEZfUkdCOworCQkJYnJlYWs7CiAJCSNlbmRpZgogCX0KIApAQCAtMTg5LDkgKzIxNyw2IEBACiAJY2luZm8tPmNvbXBfaW5mb1sxXS52X3NhbXBfZmFjdG9yPTE7CiAJY2luZm8tPmNvbXBfaW5mb1syXS52X3NhbXBfZmFjdG9yPTE7CiAKLQkjaWYgSkNTX0VYVEVOU0lPTlMhPTEKLQliYWlsb3V0OgotCSNlbmRpZgogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTIyOSwxMCArMjU0LDE2IEBACiAJCSNlbmRpZgogCQkjZWxzZQogCQljYXNlIFRKUEZfUkdCOgotCQkJaWYoUkdCX1JFRD09MCAmJiBSR0JfR1JFRU49PTEgJiYgUkdCX0JMVUU9PTIgJiYgUkdCX1BJWEVMU0laRT09MykKLQkJCXsKLQkJCQlkaW5mby0+b3V0X2NvbG9yX3NwYWNlPUpDU19SR0I7ICBicmVhazsKLQkJCX0KKwkJY2FzZSBUSlBGX0JHUjoKKwkJY2FzZSBUSlBGX1JHQlg6CisJCWNhc2UgVEpQRl9CR1JYOgorCQljYXNlIFRKUEZfWFJHQjoKKwkJY2FzZSBUSlBGX1hCR1I6CisJCWNhc2UgVEpQRl9SR0JBOgorCQljYXNlIFRKUEZfQkdSQToKKwkJY2FzZSBUSlBGX0FSR0I6CisJCWNhc2UgVEpQRl9BQkdSOgorCQkJZGluZm8tPm91dF9jb2xvcl9zcGFjZT1KQ1NfUkdCOyAgYnJlYWs7CiAJCSNlbmRpZgogCQlkZWZhdWx0OgogCQkJX3Rocm93KCJVbnN1cHBvcnRlZCBwaXhlbCBmb3JtYXQiKTsKQEAgLTI0OCw2ICsyNzksMTQgQEAKIHN0YXRpYyBpbnQgZ2V0U3Vic2FtcChqX2RlY29tcHJlc3NfcHRyIGRpbmZvKQogewogCWludCByZXR2YWw9LTEsIGksIGs7CisKKwkvKiBUaGUgc2FtcGxpbmcgZmFjdG9ycyBhY3R1YWxseSBoYXZlIG5vIG1lYW5pbmcgd2l0aCBncmF5c2NhbGUgSlBFRyBmaWxlcywKKwkgICBhbmQgaW4gZmFjdCBpdCdzIHBvc3NpYmxlIHRvIGdlbmVyYXRlIGdyYXlzY2FsZSBKUEVHcyB3aXRoIHNhbXBsaW5nCisJICAgZmFjdG9ycyA+IDEgKGV2ZW4gdGhvdWdoIHRob3NlIHNhbXBsaW5nIGZhY3RvcnMgYXJlIGlnbm9yZWQgYnkgdGhlCisJICAgZGVjb21wcmVzc29yLikgIFRodXMsIHdlIG5lZWQgdG8gdHJlYXQgZ3JheXNjYWxlIGFzIGEgc3BlY2lhbCBjYXNlLiAqLworCWlmKGRpbmZvLT5udW1fY29tcG9uZW50cz09MSAmJiBkaW5mby0+anBlZ19jb2xvcl9zcGFjZT09SkNTX0dSQVlTQ0FMRSkKKwkJcmV0dXJuIFRKU0FNUF9HUkFZOworCiAJZm9yKGk9MDsgaTxOVU1TVUJPUFQ7IGkrKykKIAl7CiAJCWlmKGRpbmZvLT5udW1fY29tcG9uZW50cz09cGl4ZWxzaXplW2ldKQpAQCAtMjczLDYgKzMxMiwxNDkgQEAKIH0KIAogCisjaWZuZGVmIEpDU19FWFRFTlNJT05TCisKKy8qIENvbnZlcnNpb24gZnVuY3Rpb25zIHRvIGVtdWxhdGUgdGhlIGNvbG9yc3BhY2UgZXh0ZW5zaW9ucy4gIFRoaXMgYWxsb3dzIHRoZQorICAgVHVyYm9KUEVHIHdyYXBwZXIgdG8gYmUgdXNlZCB3aXRoIGxpYmpwZWcgKi8KKworI2RlZmluZSBUT1JHQihQUywgUk9GRlNFVCwgR09GRlNFVCwgQk9GRlNFVCkgeyAgXAorCWludCByb3dQYWQ9cGl0Y2gtd2lkdGgqUFM7ICBcCisJd2hpbGUoaGVpZ2h0LS0pICBcCisJeyAgXAorCQl1bnNpZ25lZCBjaGFyICplbmRPZlJvdz1zcmMrd2lkdGgqUFM7ICBcCisJCXdoaWxlKHNyYzxlbmRPZlJvdykgIFwKKwkJeyAgXAorCQkJZHN0W1JHQl9SRURdPXNyY1tST0ZGU0VUXTsgIFwKKwkJCWRzdFtSR0JfR1JFRU5dPXNyY1tHT0ZGU0VUXTsgIFwKKwkJCWRzdFtSR0JfQkxVRV09c3JjW0JPRkZTRVRdOyAgXAorCQkJZHN0Kz1SR0JfUElYRUxTSVpFOyAgc3JjKz1QUzsgIFwKKwkJfSAgXAorCQlzcmMrPXJvd1BhZDsgIFwKKwl9ICBcCit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICp0b1JHQih1bnNpZ25lZCBjaGFyICpzcmMsIGludCB3aWR0aCwgaW50IHBpdGNoLAorCWludCBoZWlnaHQsIGludCBwaXhlbEZvcm1hdCwgdW5zaWduZWQgY2hhciAqZHN0KQoreworCXVuc2lnbmVkIGNoYXIgKnJldHZhbD1zcmM7CisJc3dpdGNoKHBpeGVsRm9ybWF0KQorCXsKKwkJY2FzZSBUSlBGX1JHQjoKKwkJCSNpZiBSR0JfUkVEIT0wIHx8IFJHQl9HUkVFTiE9MSB8fCBSR0JfQkxVRSE9MiB8fCBSR0JfUElYRUxTSVpFIT0zCisJCQlyZXR2YWw9ZHN0OyAgVE9SR0IoMywgMCwgMSwgMik7CisJCQkjZW5kaWYKKwkJCWJyZWFrOworCQljYXNlIFRKUEZfQkdSOgorCQkJI2lmIFJHQl9SRUQhPTIgfHwgUkdCX0dSRUVOIT0xIHx8IFJHQl9CTFVFIT0wIHx8IFJHQl9QSVhFTFNJWkUhPTMKKwkJCXJldHZhbD1kc3Q7ICBUT1JHQigzLCAyLCAxLCAwKTsKKwkJCSNlbmRpZgorCQkJYnJlYWs7CisJCWNhc2UgVEpQRl9SR0JYOgorCQljYXNlIFRKUEZfUkdCQToKKwkJCSNpZiBSR0JfUkVEIT0wIHx8IFJHQl9HUkVFTiE9MSB8fCBSR0JfQkxVRSE9MiB8fCBSR0JfUElYRUxTSVpFIT00CisJCQlyZXR2YWw9ZHN0OyAgVE9SR0IoNCwgMCwgMSwgMik7CisJCQkjZW5kaWYKKwkJCWJyZWFrOworCQljYXNlIFRKUEZfQkdSWDoKKwkJY2FzZSBUSlBGX0JHUkE6CisJCQkjaWYgUkdCX1JFRCE9MiB8fCBSR0JfR1JFRU4hPTEgfHwgUkdCX0JMVUUhPTAgfHwgUkdCX1BJWEVMU0laRSE9NAorCQkJcmV0dmFsPWRzdDsgIFRPUkdCKDQsIDIsIDEsIDApOworCQkJI2VuZGlmCisJCQlicmVhazsKKwkJY2FzZSBUSlBGX1hSR0I6CisJCWNhc2UgVEpQRl9BUkdCOgorCQkJI2lmIFJHQl9SRUQhPTEgfHwgUkdCX0dSRUVOIT0yIHx8IFJHQl9CTFVFIT0zIHx8IFJHQl9QSVhFTFNJWkUhPTQKKwkJCXJldHZhbD1kc3Q7ICBUT1JHQig0LCAxLCAyLCAzKTsKKwkJCSNlbmRpZgorCQkJYnJlYWs7CisJCWNhc2UgVEpQRl9YQkdSOgorCQljYXNlIFRKUEZfQUJHUjoKKwkJCSNpZiBSR0JfUkVEIT0zIHx8IFJHQl9HUkVFTiE9MiB8fCBSR0JfQkxVRSE9MSB8fCBSR0JfUElYRUxTSVpFIT00CisJCQlyZXR2YWw9ZHN0OyAgVE9SR0IoNCwgMywgMiwgMSk7CisJCQkjZW5kaWYKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0dmFsOworfQorCisjZGVmaW5lIEZST01SR0IoUFMsIFJPRkZTRVQsIEdPRkZTRVQsIEJPRkZTRVQsIFNFVEFMUEhBKSB7ICBcCisJaW50IHJvd1BhZD1waXRjaC13aWR0aCpQUzsgIFwKKwl3aGlsZShoZWlnaHQtLSkgIFwKKwl7ICBcCisJCXVuc2lnbmVkIGNoYXIgKmVuZE9mUm93PWRzdCt3aWR0aCpQUzsgIFwKKwkJd2hpbGUoZHN0PGVuZE9mUm93KSAgXAorCQl7ICBcCisJCQlkc3RbUk9GRlNFVF09c3JjW1JHQl9SRURdOyAgXAorCQkJZHN0W0dPRkZTRVRdPXNyY1tSR0JfR1JFRU5dOyAgXAorCQkJZHN0W0JPRkZTRVRdPXNyY1tSR0JfQkxVRV07ICBcCisJCQlTRVRBTFBIQSAgXAorCQkJZHN0Kz1QUzsgIHNyYys9UkdCX1BJWEVMU0laRTsgIFwKKwkJfSAgXAorCQlkc3QrPXJvd1BhZDsgIFwKKwl9ICBcCit9CisKK3N0YXRpYyB2b2lkIGZyb21SR0IodW5zaWduZWQgY2hhciAqc3JjLCB1bnNpZ25lZCBjaGFyICpkc3QsIGludCB3aWR0aCwKKwlpbnQgcGl0Y2gsIGludCBoZWlnaHQsIGludCBwaXhlbEZvcm1hdCkKK3sKKwlzd2l0Y2gocGl4ZWxGb3JtYXQpCisJeworCQljYXNlIFRKUEZfUkdCOgorCQkJI2lmIFJHQl9SRUQhPTAgfHwgUkdCX0dSRUVOIT0xIHx8IFJHQl9CTFVFIT0yIHx8IFJHQl9QSVhFTFNJWkUhPTMKKwkJCUZST01SR0IoMywgMCwgMSwgMiwpOworCQkJI2VuZGlmCisJCQlicmVhazsKKwkJY2FzZSBUSlBGX0JHUjoKKwkJCSNpZiBSR0JfUkVEIT0yIHx8IFJHQl9HUkVFTiE9MSB8fCBSR0JfQkxVRSE9MCB8fCBSR0JfUElYRUxTSVpFIT0zCisJCQlGUk9NUkdCKDMsIDIsIDEsIDAsKTsKKwkJCSNlbmRpZgorCQkJYnJlYWs7CisJCWNhc2UgVEpQRl9SR0JYOgorCQkJI2lmIFJHQl9SRUQhPTAgfHwgUkdCX0dSRUVOIT0xIHx8IFJHQl9CTFVFIT0yIHx8IFJHQl9QSVhFTFNJWkUhPTQKKwkJCUZST01SR0IoNCwgMCwgMSwgMiwpOworCQkJI2VuZGlmCisJCQlicmVhazsKKwkJY2FzZSBUSlBGX1JHQkE6CisJCQkjaWYgUkdCX1JFRCE9MCB8fCBSR0JfR1JFRU4hPTEgfHwgUkdCX0JMVUUhPTIgfHwgUkdCX1BJWEVMU0laRSE9NAorCQkJRlJPTVJHQig0LCAwLCAxLCAyLCBkc3RbM109MHhGRjspOworCQkJI2VuZGlmCisJCQlicmVhazsKKwkJY2FzZSBUSlBGX0JHUlg6CisJCQkjaWYgUkdCX1JFRCE9MiB8fCBSR0JfR1JFRU4hPTEgfHwgUkdCX0JMVUUhPTAgfHwgUkdCX1BJWEVMU0laRSE9NAorCQkJRlJPTVJHQig0LCAyLCAxLCAwLCk7CisJCQkjZW5kaWYKKwkJCWJyZWFrOworCQljYXNlIFRKUEZfQkdSQToKKwkJCSNpZiBSR0JfUkVEIT0yIHx8IFJHQl9HUkVFTiE9MSB8fCBSR0JfQkxVRSE9MCB8fCBSR0JfUElYRUxTSVpFIT00CisJCQlGUk9NUkdCKDQsIDIsIDEsIDAsIGRzdFszXT0weEZGOyk7ICByZXR1cm47CisJCQkjZW5kaWYKKwkJCWJyZWFrOworCQljYXNlIFRKUEZfWFJHQjoKKwkJCSNpZiBSR0JfUkVEIT0xIHx8IFJHQl9HUkVFTiE9MiB8fCBSR0JfQkxVRSE9MyB8fCBSR0JfUElYRUxTSVpFIT00CisJCQlGUk9NUkdCKDQsIDEsIDIsIDMsKTsgIHJldHVybjsKKwkJCSNlbmRpZgorCQkJYnJlYWs7CisJCWNhc2UgVEpQRl9BUkdCOgorCQkJI2lmIFJHQl9SRUQhPTEgfHwgUkdCX0dSRUVOIT0yIHx8IFJHQl9CTFVFIT0zIHx8IFJHQl9QSVhFTFNJWkUhPTQKKwkJCUZST01SR0IoNCwgMSwgMiwgMywgZHN0WzBdPTB4RkY7KTsgIHJldHVybjsKKwkJCSNlbmRpZgorCQkJYnJlYWs7CisJCWNhc2UgVEpQRl9YQkdSOgorCQkJI2lmIFJHQl9SRUQhPTMgfHwgUkdCX0dSRUVOIT0yIHx8IFJHQl9CTFVFIT0xIHx8IFJHQl9QSVhFTFNJWkUhPTQKKwkJCUZST01SR0IoNCwgMywgMiwgMSwpOyAgcmV0dXJuOworCQkJI2VuZGlmCisJCQlicmVhazsKKwkJY2FzZSBUSlBGX0FCR1I6CisJCQkjaWYgUkdCX1JFRCE9MyB8fCBSR0JfR1JFRU4hPTIgfHwgUkdCX0JMVUUhPTEgfHwgUkdCX1BJWEVMU0laRSE9NAorCQkJRlJPTVJHQig0LCAzLCAyLCAxLCBkc3RbMF09MHhGRjspOyAgcmV0dXJuOworCQkJI2VuZGlmCisJCQlicmVhazsKKwl9Cit9CisKKyNlbmRpZgorCisKIC8qIEdlbmVyYWwgQVBJIGZ1bmN0aW9ucyAqLwogCiBETExFWFBPUlQgY2hhciogRExMQ0FMTCB0akdldEVycm9yU3RyKHZvaWQpCkBAIC0zNTUsOSArNTM3LDkgQEAKIAlpZih3aWR0aDwxIHx8IGhlaWdodDwxIHx8IGpwZWdTdWJzYW1wPDAgfHwganBlZ1N1YnNhbXA+PU5VTVNVQk9QVCkKIAkJX3Rocm93KCJ0akJ1ZlNpemUoKTogSW52YWxpZCBhcmd1bWVudCIpOwogCi0JLy8gVGhpcyBhbGxvd3MgZm9yIHJhcmUgY29ybmVyIGNhc2VzIGluIHdoaWNoIGEgSlBFRyBpbWFnZSBjYW4gYWN0dWFsbHkgYmUKLQkvLyBsYXJnZXIgdGhhbiB0aGUgdW5jb21wcmVzc2VkIGlucHV0ICh3ZSB3b3VsZG4ndCBtZW50aW9uIGl0IGlmIGl0IGhhZG4ndAotCS8vIGhhcHBlbmVkIGJlZm9yZS4pCisJLyogVGhpcyBhbGxvd3MgZm9yIHJhcmUgY29ybmVyIGNhc2VzIGluIHdoaWNoIGEgSlBFRyBpbWFnZSBjYW4gYWN0dWFsbHkgYmUKKwkgICBsYXJnZXIgdGhhbiB0aGUgdW5jb21wcmVzc2VkIGlucHV0ICh3ZSB3b3VsZG4ndCBtZW50aW9uIGl0IGlmIGl0IGhhZG4ndAorCSAgIGhhcHBlbmVkIGJlZm9yZS4pICovCiAJbWN1dz10ak1DVVdpZHRoW2pwZWdTdWJzYW1wXTsKIAltY3VoPXRqTUNVSGVpZ2h0W2pwZWdTdWJzYW1wXTsKIAljaHJvbWFzZj1qcGVnU3Vic2FtcD09VEpTQU1QX0dSQVk/IDA6IDQqNjQvKG1jdXcqbWN1aCk7CkBAIC0zNjcsMTYgKzU0OSwxNSBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLQogRExMRVhQT1JUIHVuc2lnbmVkIGxvbmcgRExMQ0FMTCBUSkJVRlNJWkUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogewogCXVuc2lnbmVkIGxvbmcgcmV0dmFsPTA7CiAJaWYod2lkdGg8MSB8fCBoZWlnaHQ8MSkKIAkJX3Rocm93KCJUSkJVRlNJWkUoKTogSW52YWxpZCBhcmd1bWVudCIpOwogCi0JLy8gVGhpcyBhbGxvd3MgZm9yIHJhcmUgY29ybmVyIGNhc2VzIGluIHdoaWNoIGEgSlBFRyBpbWFnZSBjYW4gYWN0dWFsbHkgYmUKLQkvLyBsYXJnZXIgdGhhbiB0aGUgdW5jb21wcmVzc2VkIGlucHV0ICh3ZSB3b3VsZG4ndCBtZW50aW9uIGl0IGlmIGl0IGhhZG4ndAotCS8vIGhhcHBlbmVkIGJlZm9yZS4pCisJLyogVGhpcyBhbGxvd3MgZm9yIHJhcmUgY29ybmVyIGNhc2VzIGluIHdoaWNoIGEgSlBFRyBpbWFnZSBjYW4gYWN0dWFsbHkgYmUKKwkgICBsYXJnZXIgdGhhbiB0aGUgdW5jb21wcmVzc2VkIGlucHV0ICh3ZSB3b3VsZG4ndCBtZW50aW9uIGl0IGlmIGl0IGhhZG4ndAorCSAgIGhhcHBlbmVkIGJlZm9yZS4pICovCiAJcmV0dmFsPVBBRCh3aWR0aCwgMTYpICogUEFEKGhlaWdodCwgMTYpICogNiArIDIwNDg7CiAKIAliYWlsb3V0OgpAQCAtNDEzLDggKzU5NCwxMSBAQAogCXVuc2lnbmVkIGxvbmcgKmpwZWdTaXplLCBpbnQganBlZ1N1YnNhbXAsIGludCBqcGVnUXVhbCwgaW50IGZsYWdzKQogewogCWludCBpLCByZXR2YWw9MCwgYWxsb2M9MTsgIEpTQU1QUk9XICpyb3dfcG9pbnRlcj1OVUxMOworCSNpZm5kZWYgSkNTX0VYVEVOU0lPTlMKKwl1bnNpZ25lZCBjaGFyICpyZ2JCdWY9TlVMTDsKKwkjZW5kaWYKIAotCWdldGluc3RhbmNlKGhhbmRsZSkKKwlnZXRjaW5zdGFuY2UoaGFuZGxlKQogCWlmKCh0aGlzLT5pbml0JkNPTVBSRVNTKT09MCkKIAkJX3Rocm93KCJ0akNvbXByZXNzMigpOiBJbnN0YW5jZSBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgZm9yIGNvbXByZXNzaW9uIik7CiAKQEAgLTQzMiw2ICs2MTYsMTYgQEAKIAogCWlmKHBpdGNoPT0wKSBwaXRjaD13aWR0aCp0alBpeGVsU2l6ZVtwaXhlbEZvcm1hdF07CiAKKwkjaWZuZGVmIEpDU19FWFRFTlNJT05TCisJaWYocGl4ZWxGb3JtYXQhPVRKUEZfR1JBWSkKKwl7CisJCXJnYkJ1Zj0odW5zaWduZWQgY2hhciAqKW1hbGxvYyh3aWR0aCpoZWlnaHQqUkdCX1BJWEVMU0laRSk7CisJCWlmKCFyZ2JCdWYpIF90aHJvdygidGpDb21wcmVzczIoKTogTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSIpOworCQlzcmNCdWY9dG9SR0Ioc3JjQnVmLCB3aWR0aCwgcGl0Y2gsIGhlaWdodCwgcGl4ZWxGb3JtYXQsIHJnYkJ1Zik7CisJCXBpdGNoPXdpZHRoKlJHQl9QSVhFTFNJWkU7CisJfQorCSNlbmRpZgorCiAJY2luZm8tPmltYWdlX3dpZHRoPXdpZHRoOwogCWNpbmZvLT5pbWFnZV9oZWlnaHQ9aGVpZ2h0OwogCkBAIC00NjQsNiArNjU4LDkgQEAKIAogCWJhaWxvdXQ6CiAJaWYoY2luZm8tPmdsb2JhbF9zdGF0ZT5DU1RBVEVfU1RBUlQpIGpwZWdfYWJvcnRfY29tcHJlc3MoY2luZm8pOworCSNpZm5kZWYgSkNTX0VYVEVOU0lPTlMKKwlpZihyZ2JCdWYpIGZyZWUocmdiQnVmKTsKKwkjZW5kaWYKIAlpZihyb3dfcG9pbnRlcikgZnJlZShyb3dfcG9pbnRlcik7CiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTUwMiwxMCArNjk5LDExIEBACiAJSlNBTVBMRSAqcHRyPWRzdEJ1ZjsKIAl1bnNpZ25lZCBsb25nIHl1dnNpemU9MDsKIAlqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOworCSNpZm5kZWYgSkNTX0VYVEVOU0lPTlMKKwl1bnNpZ25lZCBjaGFyICpyZ2JCdWY9TlVMTDsKKwkjZW5kaWYKIAotCWdldGluc3RhbmNlKGhhbmRsZSk7Ci0JaWYoKHRoaXMtPmluaXQmQ09NUFJFU1MpPT0wKQotCQlfdGhyb3coInRqRW5jb2RlWVVWMigpOiBJbnN0YW5jZSBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgZm9yIGNvbXByZXNzaW9uIik7CisJZ2V0Y2luc3RhbmNlKGhhbmRsZSk7CiAKIAlmb3IoaT0wOyBpPE1BWF9DT01QT05FTlRTOyBpKyspCiAJewpAQCAtNTEzLDYgKzcxMSw5IEBACiAJCXRtcGJ1ZjJbaV09TlVMTDsgIF90bXBidWYyW2ldPU5VTEw7ICBvdXRidWZbaV09TlVMTDsKIAl9CiAKKwlpZigodGhpcy0+aW5pdCZDT01QUkVTUyk9PTApCisJCV90aHJvdygidGpFbmNvZGVZVVYyKCk6IEluc3RhbmNlIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCBmb3IgY29tcHJlc3Npb24iKTsKKwogCWlmKHNyY0J1Zj09TlVMTCB8fCB3aWR0aDw9MCB8fCBwaXRjaDwwIHx8IGhlaWdodDw9MCB8fCBwaXhlbEZvcm1hdDwwCiAJCXx8IHBpeGVsRm9ybWF0Pj1USl9OVU1QRiB8fCBkc3RCdWY9PU5VTEwgfHwgc3Vic2FtcDwwCiAJCXx8IHN1YnNhbXA+PU5VTVNVQk9QVCkKQEAgLTUyNyw2ICs3MjgsMTYgQEAKIAogCWlmKHBpdGNoPT0wKSBwaXRjaD13aWR0aCp0alBpeGVsU2l6ZVtwaXhlbEZvcm1hdF07CiAKKwkjaWZuZGVmIEpDU19FWFRFTlNJT05TCisJaWYocGl4ZWxGb3JtYXQhPVRKUEZfR1JBWSkKKwl7CisJCXJnYkJ1Zj0odW5zaWduZWQgY2hhciAqKW1hbGxvYyh3aWR0aCpoZWlnaHQqUkdCX1BJWEVMU0laRSk7CisJCWlmKCFyZ2JCdWYpIF90aHJvdygidGpFbmNvZGVZVVYyKCk6IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUiKTsKKwkJc3JjQnVmPXRvUkdCKHNyY0J1Ziwgd2lkdGgsIHBpdGNoLCBoZWlnaHQsIHBpeGVsRm9ybWF0LCByZ2JCdWYpOworCQlwaXRjaD13aWR0aCpSR0JfUElYRUxTSVpFOworCX0KKwkjZW5kaWYKKwogCWNpbmZvLT5pbWFnZV93aWR0aD13aWR0aDsKIAljaW5mby0+aW1hZ2VfaGVpZ2h0PWhlaWdodDsKIApAQCAtNjE5LDYgKzgzMCw5IEBACiAKIAliYWlsb3V0OgogCWlmKGNpbmZvLT5nbG9iYWxfc3RhdGU+Q1NUQVRFX1NUQVJUKSBqcGVnX2Fib3J0X2NvbXByZXNzKGNpbmZvKTsKKwkjaWZuZGVmIEpDU19FWFRFTlNJT05TCisJaWYocmdiQnVmKSBmcmVlKHJnYkJ1Zik7CisJI2VuZGlmCiAJaWYocm93X3BvaW50ZXIpIGZyZWUocm93X3BvaW50ZXIpOwogCWZvcihpPTA7IGk8TUFYX0NPTVBPTkVOVFM7IGkrKykKIAl7CkBAIC02ODUsNyArODk5LDcgQEAKIHsKIAlpbnQgcmV0dmFsPTA7CiAKLQlnZXRpbnN0YW5jZShoYW5kbGUpOworCWdldGRpbnN0YW5jZShoYW5kbGUpOwogCWlmKCh0aGlzLT5pbml0JkRFQ09NUFJFU1MpPT0wKQogCQlfdGhyb3coInRqRGVjb21wcmVzc0hlYWRlcjIoKTogSW5zdGFuY2UgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIGZvciBkZWNvbXByZXNzaW9uIik7CiAKQEAgLTc0Niw4ICs5NjAsMTIgQEAKIHsKIAlpbnQgaSwgcmV0dmFsPTA7ICBKU0FNUFJPVyAqcm93X3BvaW50ZXI9TlVMTDsKIAlpbnQganBlZ3dpZHRoLCBqcGVnaGVpZ2h0LCBzY2FsZWR3LCBzY2FsZWRoOworCSNpZm5kZWYgSkNTX0VYVEVOU0lPTlMKKwl1bnNpZ25lZCBjaGFyICpyZ2JCdWY9TlVMTDsKKwl1bnNpZ25lZCBjaGFyICpfZHN0QnVmPU5VTEw7ICBpbnQgX3BpdGNoPTA7CisJI2VuZGlmCiAKLQlnZXRpbnN0YW5jZShoYW5kbGUpOworCWdldGRpbnN0YW5jZShoYW5kbGUpOwogCWlmKCh0aGlzLT5pbml0JkRFQ09NUFJFU1MpPT0wKQogCQlfdGhyb3coInRqRGVjb21wcmVzczIoKTogSW5zdGFuY2UgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIGZvciBkZWNvbXByZXNzaW9uIik7CiAKQEAgLTc4Myw3ICsxMDAxLDcgQEAKIAkJc2NhbGVkdz1USlNDQUxFRChqcGVnd2lkdGgsIHNmW2ldKTsKIAkJc2NhbGVkaD1USlNDQUxFRChqcGVnaGVpZ2h0LCBzZltpXSk7CiAJCWlmKHNjYWxlZHc8PXdpZHRoICYmIHNjYWxlZGg8PWhlaWdodCkKLQkJCQlicmVhazsKKwkJCWJyZWFrOwogCX0KIAlpZihzY2FsZWR3PndpZHRoIHx8IHNjYWxlZGg+aGVpZ2h0KQogCQlfdGhyb3coInRqRGVjb21wcmVzczIoKTogQ291bGQgbm90IHNjYWxlIGRvd24gdG8gZGVzaXJlZCBpbWFnZSBkaW1lbnNpb25zIik7CkBAIC03OTMsNiArMTAxMSwyMSBAQAogCiAJanBlZ19zdGFydF9kZWNvbXByZXNzKGRpbmZvKTsKIAlpZihwaXRjaD09MCkgcGl0Y2g9ZGluZm8tPm91dHB1dF93aWR0aCp0alBpeGVsU2l6ZVtwaXhlbEZvcm1hdF07CisKKwkjaWZuZGVmIEpDU19FWFRFTlNJT05TCisJaWYocGl4ZWxGb3JtYXQhPVRKUEZfR1JBWSAmJgorCQkoUkdCX1JFRCE9dGpSZWRPZmZzZXRbcGl4ZWxGb3JtYXRdIHx8CisJCQlSR0JfR1JFRU4hPXRqR3JlZW5PZmZzZXRbcGl4ZWxGb3JtYXRdIHx8CisJCQlSR0JfQkxVRSE9dGpCbHVlT2Zmc2V0W3BpeGVsRm9ybWF0XSB8fAorCQkJUkdCX1BJWEVMU0laRSE9dGpQaXhlbFNpemVbcGl4ZWxGb3JtYXRdKSkKKwl7CisJCXJnYkJ1Zj0odW5zaWduZWQgY2hhciAqKW1hbGxvYyh3aWR0aCpoZWlnaHQqMyk7CisJCWlmKCFyZ2JCdWYpIF90aHJvdygidGpEZWNvbXByZXNzMigpOiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIik7CisJCV9waXRjaD1waXRjaDsgIHBpdGNoPXdpZHRoKjM7CisJCV9kc3RCdWY9ZHN0QnVmOyAgZHN0QnVmPXJnYkJ1ZjsKKwl9CisJI2VuZGlmCisKIAlpZigocm93X3BvaW50ZXI9KEpTQU1QUk9XICopbWFsbG9jKHNpemVvZihKU0FNUFJPVykKIAkJKmRpbmZvLT5vdXRwdXRfaGVpZ2h0KSk9PU5VTEwpCiAJCV90aHJvdygidGpEZWNvbXByZXNzMigpOiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIik7CkBAIC04MDksOCArMTA0MiwxNSBAQAogCX0KIAlqcGVnX2ZpbmlzaF9kZWNvbXByZXNzKGRpbmZvKTsKIAorCSNpZm5kZWYgSkNTX0VYVEVOU0lPTlMKKwlmcm9tUkdCKHJnYkJ1ZiwgX2RzdEJ1Ziwgd2lkdGgsIF9waXRjaCwgaGVpZ2h0LCBwaXhlbEZvcm1hdCk7CisJI2VuZGlmCisKIAliYWlsb3V0OgogCWlmKGRpbmZvLT5nbG9iYWxfc3RhdGU+RFNUQVRFX1NUQVJUKSBqcGVnX2Fib3J0X2RlY29tcHJlc3MoZGluZm8pOworCSNpZm5kZWYgSkNTX0VYVEVOU0lPTlMKKwlpZihyZ2JCdWYpIGZyZWUocmdiQnVmKTsKKwkjZW5kaWYKIAlpZihyb3dfcG9pbnRlcikgZnJlZShyb3dfcG9pbnRlcik7CiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTgzNiwxNSArMTA3NiwxNiBAQAogCQl0bXBidWZzaXplPTAsIHVzZXRtcGJ1Zj0wLCB0aFtNQVhfQ09NUE9ORU5UU107CiAJSlNBTVBMRSAqX3RtcGJ1Zj1OVUxMLCAqcHRyPWRzdEJ1ZjsgIEpTQU1QUk9XICp0bXBidWZbTUFYX0NPTVBPTkVOVFNdOwogCi0JZ2V0aW5zdGFuY2UoaGFuZGxlKTsKLQlpZigodGhpcy0+aW5pdCZERUNPTVBSRVNTKT09MCkKLQkJX3Rocm93KCJ0akRlY29tcHJlc3NUb1lVVigpOiBJbnN0YW5jZSBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgZm9yIGRlY29tcHJlc3Npb24iKTsKKwlnZXRkaW5zdGFuY2UoaGFuZGxlKTsKIAogCWZvcihpPTA7IGk8TUFYX0NPTVBPTkVOVFM7IGkrKykKIAl7CiAJCXRtcGJ1ZltpXT1OVUxMOyAgb3V0YnVmW2ldPU5VTEw7CiAJfQogCisJaWYoKHRoaXMtPmluaXQmREVDT01QUkVTUyk9PTApCisJCV90aHJvdygidGpEZWNvbXByZXNzVG9ZVVYoKTogSW5zdGFuY2UgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIGZvciBkZWNvbXByZXNzaW9uIik7CisKIAlpZihqcGVnQnVmPT1OVUxMIHx8IGpwZWdTaXplPD0wIHx8IGRzdEJ1Zj09TlVMTCkKIAkJX3Rocm93KCJ0akRlY29tcHJlc3NUb1lVVigpOiBJbnZhbGlkIGFyZ3VtZW50Iik7CiAKZGlmZiAtLWdpdCBhL3R1cmJvanBlZy5oIGIvdHVyYm9qcGVnLmgKaW5kZXggNzYxMDIyMS4uOTUxMTEyYiAxMDA2NDQKLS0tIGEvdHVyYm9qcGVnLmgKKysrIGIvdHVyYm9qcGVnLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKTIwMDktMjAxMiBELiBSLiBDb21tYW5kZXIuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKTIwMDktMjAxMyBELiBSLiBDb21tYW5kZXIuICBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CkBAIC01OSw2ICs1OSwxMCBAQAogICogcGVyY2VwdGlibGUgbG9zcyBvZiBpbWFnZSBjbGFyaXR5ICh0aGUgaHVtYW4gZXllIGlzIG1vcmUgc2Vuc2l0aXZlIHRvIHNtYWxsCiAgKiBjaGFuZ2VzIGluIGJyaWdodG5lc3MgdGhhbiBzbWFsbCBjaGFuZ2VzIGluIGNvbG9yLikgIFRoaXMgaXMgY2FsbGVkCiAgKiAiY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmciLgorICogPHA+CisgKiBAbm90ZSBUZWNobmljYWxseSwgdGhlIEpQRUcgZm9ybWF0IHVzZXMgdGhlIFlDYkNyIGNvbG9yc3BhY2UsIGJ1dCBwZXIgdGhlCisgKiBjb252ZW50aW9uIG9mIHRoZSBkaWdpdGFsIHZpZGVvIGNvbW11bml0eSwgdGhlIFR1cmJvSlBFRyBBUEkgdXNlcyAiWVVWIiB0bworICogcmVmZXIgdG8gYW4gaW1hZ2UgZm9ybWF0IGNvbnNpc3Rpbmcgb2YgWSwgQ2IsIGFuZCBDciBpbWFnZSBwbGFuZXMuCiAgKi8KIGVudW0gVEpTQU1QCiB7CkBAIC04NSw2ICs4OSw3IEBACiAgIC8qKgogICAgKiA0OjQ6MCBjaHJvbWluYW5jZSBzdWJzYW1wbGluZy4gIFRoZSBKUEVHIG9yIFlVViBpbWFnZSB3aWxsIGNvbnRhaW4gb25lCiAgICAqIGNocm9taW5hbmNlIGNvbXBvbmVudCBmb3IgZXZlcnkgMXgyIGJsb2NrIG9mIHBpeGVscyBpbiB0aGUgc291cmNlIGltYWdlLgorICAgKiBAbm90ZSA0OjQ6MCBzdWJzYW1wbGluZyBpcyBub3QgZnVsbHkgYWNjZWxlcmF0ZWQgaW4gbGlianBlZy10dXJiby4KICAgICovCiAgIFRKU0FNUF80NDAKIH07CkBAIC0yNDYsMTAgKzI1MSwxMSBAQAogICovCiAjZGVmaW5lIFRKRkxBR19GT1JDRVNTRTMgICAgIDEyOAogLyoqCi0gKiBXaGVuIGRlY29tcHJlc3NpbmcsIHVzZSB0aGUgZmFzdGVzdCBjaHJvbWluYW5jZSB1cHNhbXBsaW5nIGFsZ29yaXRobQotICogYXZhaWxhYmxlIGluIHRoZSB1bmRlcmx5aW5nIGNvZGVjLiAgVGhlIGRlZmF1bHQgaXMgdG8gdXNlIHNtb290aCB1cHNhbXBsaW5nLAotICogd2hpY2ggY3JlYXRlcyBhIHNtb290aCB0cmFuc2l0aW9uIGJldHdlZW4gbmVpZ2hib3JpbmcgY2hyb21pbmFuY2UgY29tcG9uZW50cwotICogaW4gb3JkZXIgdG8gcmVkdWNlIHVwc2FtcGxpbmcgYXJ0aWZhY3RzIGluIHRoZSBkZWNvbXByZXNzZWQgaW1hZ2UuCisgKiBXaGVuIGRlY29tcHJlc3NpbmcgYW4gaW1hZ2UgdGhhdCB3YXMgY29tcHJlc3NlZCB1c2luZyBjaHJvbWluYW5jZQorICogc3Vic2FtcGxpbmcsIHVzZSB0aGUgZmFzdGVzdCBjaHJvbWluYW5jZSB1cHNhbXBsaW5nIGFsZ29yaXRobSBhdmFpbGFibGUgaW4KKyAqIHRoZSB1bmRlcmx5aW5nIGNvZGVjLiAgVGhlIGRlZmF1bHQgaXMgdG8gdXNlIHNtb290aCB1cHNhbXBsaW5nLCB3aGljaAorICogY3JlYXRlcyBhIHNtb290aCB0cmFuc2l0aW9uIGJldHdlZW4gbmVpZ2hib3JpbmcgY2hyb21pbmFuY2UgY29tcG9uZW50cyBpbgorICogb3JkZXIgdG8gcmVkdWNlIHVwc2FtcGxpbmcgYXJ0aWZhY3RzIGluIHRoZSBkZWNvbXByZXNzZWQgaW1hZ2UuCiAgKi8KICNkZWZpbmUgVEpGTEFHX0ZBU1RVUFNBTVBMRSAgMjU2CiAvKioKQEAgLTI2MiwyNiArMjY4LDI2IEBACiAjZGVmaW5lIFRKRkxBR19OT1JFQUxMT0MgICAgIDEwMjQKIC8qKgogICogVXNlIHRoZSBmYXN0ZXN0IERDVC9JRENUIGFsZ29yaXRobSBhdmFpbGFibGUgaW4gdGhlIHVuZGVybHlpbmcgY29kZWMuICBUaGUKLSAqIGRlZmF1bHQgaWYgdGhpcyBmbGFnIGlzIG5vdCBzcGVjaWZpZWQgaXMgaW1wbGVtZW50YXRpb24tc3BlY2lmaWMuICBUaGUKLSAqIGxpYmpwZWcgaW1wbGVtZW50YXRpb24sIGZvciBleGFtcGxlLCB1c2VzIHRoZSBmYXN0IGFsZ29yaXRobSBieSBkZWZhdWx0IHdoZW4KLSAqIGNvbXByZXNzaW5nLCBiZWNhdXNlIHRoaXMgaGFzIGJlZW4gc2hvd24gdG8gaGF2ZSBvbmx5IGEgdmVyeSBzbGlnaHQgZWZmZWN0Ci0gKiBvbiBhY2N1cmFjeSwgYnV0IGl0IHVzZXMgdGhlIGFjY3VyYXRlIGFsZ29yaXRobSB3aGVuIGRlY29tcHJlc3NpbmcsIGJlY2F1c2UKLSAqIHRoaXMgaGFzIGJlZW4gc2hvd24gdG8gaGF2ZSBhIGxhcmdlciBlZmZlY3QuCisgKiBkZWZhdWx0IGlmIHRoaXMgZmxhZyBpcyBub3Qgc3BlY2lmaWVkIGlzIGltcGxlbWVudGF0aW9uLXNwZWNpZmljLiAgRm9yCisgKiBleGFtcGxlLCB0aGUgaW1wbGVtZW50YXRpb24gb2YgVHVyYm9KUEVHIGZvciBsaWJqcGVnWy10dXJib10gdXNlcyB0aGUgZmFzdAorICogYWxnb3JpdGhtIGJ5IGRlZmF1bHQgd2hlbiBjb21wcmVzc2luZywgYmVjYXVzZSB0aGlzIGhhcyBiZWVuIHNob3duIHRvIGhhdmUKKyAqIG9ubHkgYSB2ZXJ5IHNsaWdodCBlZmZlY3Qgb24gYWNjdXJhY3ksIGJ1dCBpdCB1c2VzIHRoZSBhY2N1cmF0ZSBhbGdvcml0aG0KKyAqIHdoZW4gZGVjb21wcmVzc2luZywgYmVjYXVzZSB0aGlzIGhhcyBiZWVuIHNob3duIHRvIGhhdmUgYSBsYXJnZXIgZWZmZWN0LgogICovCiAjZGVmaW5lIFRKRkxBR19GQVNURENUICAgICAgIDIwNDgKIC8qKgogICogVXNlIHRoZSBtb3N0IGFjY3VyYXRlIERDVC9JRENUIGFsZ29yaXRobSBhdmFpbGFibGUgaW4gdGhlIHVuZGVybHlpbmcgY29kZWMuCi0gKiBUaGUgZGVmYXVsdCBpZiB0aGlzIGZsYWcgaXMgbm90IHNwZWNpZmllZCBpcyBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYy4gIFRoZQotICogbGlianBlZyBpbXBsZW1lbnRhdGlvbiwgZm9yIGV4YW1wbGUsIHVzZXMgdGhlIGZhc3QgYWxnb3JpdGhtIGJ5IGRlZmF1bHQgd2hlbgotICogY29tcHJlc3NpbmcsIGJlY2F1c2UgdGhpcyBoYXMgYmVlbiBzaG93biB0byBoYXZlIG9ubHkgYSB2ZXJ5IHNsaWdodCBlZmZlY3QKLSAqIG9uIGFjY3VyYWN5LCBidXQgaXQgdXNlcyB0aGUgYWNjdXJhdGUgYWxnb3JpdGhtIHdoZW4gZGVjb21wcmVzc2luZywgYmVjYXVzZQotICogdGhpcyBoYXMgYmVlbiBzaG93biB0byBoYXZlIGEgbGFyZ2VyIGVmZmVjdC4KKyAqIFRoZSBkZWZhdWx0IGlmIHRoaXMgZmxhZyBpcyBub3Qgc3BlY2lmaWVkIGlzIGltcGxlbWVudGF0aW9uLXNwZWNpZmljLiAgRm9yCisgKiBleGFtcGxlLCB0aGUgaW1wbGVtZW50YXRpb24gb2YgVHVyYm9KUEVHIGZvciBsaWJqcGVnWy10dXJib10gdXNlcyB0aGUgZmFzdAorICogYWxnb3JpdGhtIGJ5IGRlZmF1bHQgd2hlbiBjb21wcmVzc2luZywgYmVjYXVzZSB0aGlzIGhhcyBiZWVuIHNob3duIHRvIGhhdmUKKyAqIG9ubHkgYSB2ZXJ5IHNsaWdodCBlZmZlY3Qgb24gYWNjdXJhY3ksIGJ1dCBpdCB1c2VzIHRoZSBhY2N1cmF0ZSBhbGdvcml0aG0KKyAqIHdoZW4gZGVjb21wcmVzc2luZywgYmVjYXVzZSB0aGlzIGhhcyBiZWVuIHNob3duIHRvIGhhdmUgYSBsYXJnZXIgZWZmZWN0LgogICovCiAjZGVmaW5lIFRKRkxBR19BQ0NVUkFURURDVCAgIDQwOTYKIAogCiAvKioKLSAqIE51bWJlciBvZiB0cmFuc2Zvcm0gb3BlcmF0aW9ucworICogVGhlIG51bWJlciBvZiB0cmFuc2Zvcm0gb3BlcmF0aW9ucwogICovCiAjZGVmaW5lIFRKX05VTVhPUCA4CiAKQEAgLTQzOSw4ICs0NDUsOCBAQAogICAvKioKICAgICogQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHRvIG1vZGlmeSB0aGUgRENUIGNvZWZmaWNpZW50cwogICAgKiBhZnRlciB0aGV5IGFyZSBsb3NzbGVzc2x5IHRyYW5zZm9ybWVkIGJ1dCBiZWZvcmUgdGhleSBhcmUgdHJhbnNjb2RlZCB0byBhCi0gICAqIG5ldyBKUEVHIGZpbGUuICBUaGlzIGFsbG93cyBmb3IgY3VzdG9tIGZpbHRlcnMgb3Igb3RoZXIgdHJhbnNmb3JtYXRpb25zIHRvCi0gICAqIGJlIGFwcGxpZWQgaW4gdGhlIGZyZXF1ZW5jeSBkb21haW4uCisgICAqIG5ldyBKUEVHIGltYWdlLiAgVGhpcyBhbGxvd3MgZm9yIGN1c3RvbSBmaWx0ZXJzIG9yIG90aGVyIHRyYW5zZm9ybWF0aW9ucworICAgKiB0byBiZSBhcHBsaWVkIGluIHRoZSBmcmVxdWVuY3kgZG9tYWluLgogICAgKgogICAgKiBAcGFyYW0gY29lZmZzIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgdHJhbnNmb3JtZWQgRENUIGNvZWZmaWNpZW50cy4gIChOT1RFOgogICAgKiAgICAgICAgdGhpcyBwb2ludGVyIGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlIHZhbGlkIG9uY2UgdGhlIGNhbGxiYWNrCkBAIC00NTksNyArNDY1LDcgQEAKICAgICogICAgICAgIDAsIDEsIGFuZCAyIGluIHR5cGljYWwgSlBFRyBpbWFnZXMuKQogICAgKiBAcGFyYW0gdHJhbnNmb3JtSUQgSUQgbnVtYmVyIG9mIHRoZSB0cmFuc2Zvcm1lZCBpbWFnZSB0byB3aGljaAogICAgKiAgICAgICAgPHR0PmNvZWZmczwvdHQ+IGJlbG9uZ3MuICBUaGlzIGlzIHRoZSBzYW1lIGFzIHRoZSBpbmRleCBvZiB0aGUKLSAgICogICAgICAgIHRyYW5zZm9ybSBpbiB0aGUgdHJhbnNmb3JtcyBhcnJheSB0aGF0IHdhcyBwYXNzZWQgdG8KKyAgICogICAgICAgIHRyYW5zZm9ybSBpbiB0aGUgPHR0PnRyYW5zZm9ybXM8L3R0PiBhcnJheSB0aGF0IHdhcyBwYXNzZWQgdG8KICAgICogICAgICAgICN0alRyYW5zZm9ybSgpLgogICAgKiBAcGFyYW0gdHJhbnNmb3JtIGEgcG9pbnRlciB0byBhICN0anRyYW5zZm9ybSBzdHJ1Y3R1cmUgdGhhdCBzcGVjaWZpZXMgdGhlCiAgICAqICAgICAgICBwYXJhbWV0ZXJzIGFuZC9vciBjcm9wcGluZyByZWdpb24gZm9yIHRoaXMgdHJhbnNmb3JtCkBAIC00ODUsNyArNDkxLDcgQEAKIC8qKgogICogQ29tcHV0ZSB0aGUgc2NhbGVkIHZhbHVlIG9mIDx0dD5kaW1lbnNpb248L3R0PiB1c2luZyB0aGUgZ2l2ZW4gc2NhbGluZwogICogZmFjdG9yLiAgVGhpcyBtYWNybyBwZXJmb3JtcyB0aGUgaW50ZWdlciBlcXVpdmFsZW50IG9mIDx0dD5jZWlsKGRpbWVuc2lvbiAqCi0gKiBzY2FsaW5nRmFjdG9yKTwvdHQ+LiAKKyAqIHNjYWxpbmdGYWN0b3IpPC90dD4uCiAgKi8KICNkZWZpbmUgVEpTQ0FMRUQoZGltZW5zaW9uLCBzY2FsaW5nRmFjdG9yKSAoKGRpbWVuc2lvbiAqIHNjYWxpbmdGYWN0b3IubnVtIFwKICAgKyBzY2FsaW5nRmFjdG9yLmRlbm9tIC0gMSkgLyBzY2FsaW5nRmFjdG9yLmRlbm9tKQpAQCAtNTYyLDcgKzU2OCw3IEBACiAgKiB0aGUgZ2l2ZW4gcGFyYW1ldGVycy4gIFRoZSBudW1iZXIgb2YgYnl0ZXMgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbiBpcwogICogbGFyZ2VyIHRoYW4gdGhlIHNpemUgb2YgdGhlIHVuY29tcHJlc3NlZCBzb3VyY2UgaW1hZ2UuICBUaGUgcmVhc29uIGZvciB0aGlzCiAgKiBpcyB0aGF0IHRoZSBKUEVHIGZvcm1hdCB1c2VzIDE2LWJpdCBjb2VmZmljaWVudHMsIGFuZCBpdCBpcyB0aHVzIHBvc3NpYmxlCi0gKiBmb3IgYSB2ZXJ5IGhpZ2gtcXVhbGl0eSBKUEVHIGltYWdlIHdpdGggdmVyeSBoaWdoIGZyZXF1ZW5jeSBjb250ZW50IHRvCisgKiBmb3IgYSB2ZXJ5IGhpZ2gtcXVhbGl0eSBKUEVHIGltYWdlIHdpdGggdmVyeSBoaWdoLWZyZXF1ZW5jeSBjb250ZW50IHRvCiAgKiBleHBhbmQgcmF0aGVyIHRoYW4gY29tcHJlc3Mgd2hlbiBjb252ZXJ0ZWQgdG8gdGhlIEpQRUcgZm9ybWF0LiAgU3VjaCBpbWFnZXMKICAqIHJlcHJlc2VudCBhIHZlcnkgcmFyZSBjb3JuZXIgY2FzZSwgYnV0IHNpbmNlIHRoZXJlIGlzIG5vIHdheSB0byBwcmVkaWN0IHRoZQogICogc2l6ZSBvZiBhIEpQRUcgaW1hZ2UgcHJpb3IgdG8gY29tcHJlc3Npb24sIHRoZSBjb3JuZXIgY2FzZSBoYXMgdG8gYmUKQEAgLTYwMiwxMyArNjA4LDE3IEBACiAgKiB1c2VzIHRoZSBhY2NlbGVyYXRlZCBjb2xvciBjb252ZXJzaW9uIHJvdXRpbmVzIGluIFR1cmJvSlBFRydzIHVuZGVybHlpbmcKICAqIGNvZGVjIHRvIHByb2R1Y2UgYSBwbGFuYXIgWVVWIGltYWdlIHRoYXQgaXMgc3VpdGFibGUgZm9yIFggVmlkZW8uCiAgKiBTcGVjaWZpY2FsbHksIGlmIHRoZSBjaHJvbWluYW5jZSBjb21wb25lbnRzIGFyZSBzdWJzYW1wbGVkIGFsb25nIHRoZQotICogaG9yaXpvbnRhbCBkaW1lbnNpb24sIHRoZW4gdGhlIHdpZHRoIG9mIHRoZSBsdW1pbmFuY2UgcGxhbmUgaXMgcGFkZGVkIHRvIDIKLSAqIGluIHRoZSBvdXRwdXQgaW1hZ2UgKHNhbWUgZ29lcyBmb3IgdGhlIGhlaWdodCBvZiB0aGUgbHVtaW5hbmNlIHBsYW5lLCBpZiB0aGUKLSAqIGNocm9taW5hbmNlIGNvbXBvbmVudHMgYXJlIHN1YnNhbXBsZWQgYWxvbmcgdGhlIHZlcnRpY2FsIGRpbWVuc2lvbi4pICBBbHNvLAotICogZWFjaCBsaW5lIG9mIGVhY2ggcGxhbmUgaW4gdGhlIG91dHB1dCBpbWFnZSBpcyBwYWRkZWQgdG8gNCBieXRlcy4gIEFsdGhvdWdoCi0gKiB0aGlzIHdpbGwgd29yayB3aXRoIGFueSBzdWJzYW1wbGluZyBvcHRpb24sIGl0IGlzIHJlYWxseSBvbmx5IHVzZWZ1bCBpbgotICogY29tYmluYXRpb24gd2l0aCBUSl80MjAsIHdoaWNoIHByb2R1Y2VzIGFuIGltYWdlIGNvbXBhdGlibGUgd2l0aCB0aGUgSTQyMAotICogKEFLQSAiWVVWNDIwUCIpIGZvcm1hdC4KKyAqIGhvcml6b250YWwgZGltZW5zaW9uLCB0aGVuIHRoZSB3aWR0aCBvZiB0aGUgbHVtaW5hbmNlIHBsYW5lIGlzIHBhZGRlZCB0byB0aGUKKyAqIG5lYXJlc3QgbXVsdGlwbGUgb2YgMiBpbiB0aGUgb3V0cHV0IGltYWdlIChzYW1lIGdvZXMgZm9yIHRoZSBoZWlnaHQgb2YgdGhlCisgKiBsdW1pbmFuY2UgcGxhbmUsIGlmIHRoZSBjaHJvbWluYW5jZSBjb21wb25lbnRzIGFyZSBzdWJzYW1wbGVkIGFsb25nIHRoZQorICogdmVydGljYWwgZGltZW5zaW9uLikgIEFsc28sIGVhY2ggbGluZSBvZiBlYWNoIHBsYW5lIGluIHRoZSBvdXRwdXQgaW1hZ2UgaXMKKyAqIHBhZGRlZCB0byA0IGJ5dGVzLiAgQWx0aG91Z2ggdGhpcyB3aWxsIHdvcmsgd2l0aCBhbnkgc3Vic2FtcGxpbmcgb3B0aW9uLCBpdAorICogaXMgcmVhbGx5IG9ubHkgdXNlZnVsIGluIGNvbWJpbmF0aW9uIHdpdGggVEpfNDIwLCB3aGljaCBwcm9kdWNlcyBhbiBpbWFnZQorICogY29tcGF0aWJsZSB3aXRoIHRoZSBJNDIwIChBS0EgIllVVjQyMFAiKSBmb3JtYXQuCisgKiA8cD4KKyAqIEBub3RlIFRlY2huaWNhbGx5LCB0aGUgSlBFRyBmb3JtYXQgdXNlcyB0aGUgWUNiQ3IgY29sb3JzcGFjZSwgYnV0IHBlciB0aGUKKyAqIGNvbnZlbnRpb24gb2YgdGhlIGRpZ2l0YWwgdmlkZW8gY29tbXVuaXR5LCB0aGUgVHVyYm9KUEVHIEFQSSB1c2VzICJZVVYiIHRvCisgKiByZWZlciB0byBhbiBpbWFnZSBmb3JtYXQgY29uc2lzdGluZyBvZiBZLCBDYiwgYW5kIENyIGltYWdlIHBsYW5lcy4KICAqCiAgKiBAcGFyYW0gaGFuZGxlIGEgaGFuZGxlIHRvIGEgVHVyYm9KUEVHIGNvbXByZXNzb3Igb3IgdHJhbnNmb3JtZXIgaW5zdGFuY2UKICAqIEBwYXJhbSBzcmNCdWYgcG9pbnRlciB0byBhbiBpbWFnZSBidWZmZXIgY29udGFpbmluZyBSR0Igb3IgZ3JheXNjYWxlIHBpeGVscwpAQCAtNjk0LDE0ICs3MDQsMTUgQEAKICAqICAgICAgICBpbWFnZS4gIFRoaXMgYnVmZmVyIHNob3VsZCBub3JtYWxseSBiZSA8dHQ+cGl0Y2ggKiBzY2FsZWRIZWlnaHQ8L3R0PgogICogICAgICAgIGJ5dGVzIGluIHNpemUsIHdoZXJlIDx0dD5zY2FsZWRIZWlnaHQ8L3R0PiBjYW4gYmUgZGV0ZXJtaW5lZCBieQogICogICAgICAgIGNhbGxpbmcgI1RKU0NBTEVEKCkgd2l0aCB0aGUgSlBFRyBpbWFnZSBoZWlnaHQgYW5kIG9uZSBvZiB0aGUgc2NhbGluZwotICogICAgICAgIGZhY3RvcnMgcmV0dXJuZWQgYnkgI3RqR2V0U2NhbGluZ0ZhY3RvcnMoKS4gIFRoZSBkc3RCdWYgcG9pbnRlciBtYXkKLSAqICAgICAgICBhbHNvIGJlIHVzZWQgdG8gZGVjb21wcmVzcyBpbnRvIGEgc3BlY2lmaWMgcmVnaW9uIG9mIGEgbGFyZ2VyIGJ1ZmZlci4KKyAqICAgICAgICBmYWN0b3JzIHJldHVybmVkIGJ5ICN0akdldFNjYWxpbmdGYWN0b3JzKCkuICBUaGUgPHR0PmRzdEJ1ZjwvdHQ+CisgKiAgICAgICAgcG9pbnRlciBtYXkgYWxzbyBiZSB1c2VkIHRvIGRlY29tcHJlc3MgaW50byBhIHNwZWNpZmljIHJlZ2lvbiBvZiBhCisgKiAgICAgICAgbGFyZ2VyIGJ1ZmZlci4KICAqIEBwYXJhbSB3aWR0aCBkZXNpcmVkIHdpZHRoIChpbiBwaXhlbHMpIG9mIHRoZSBkZXN0aW5hdGlvbiBpbWFnZS4gIElmIHRoaXMgaXMKLSAqICAgICAgICBzbWFsbGVyIHRoYW4gdGhlIHdpZHRoIG9mIHRoZSBKUEVHIGltYWdlIGJlaW5nIGRlY29tcHJlc3NlZCwgdGhlbgorICogICAgICAgIGRpZmZlcmVudCB0aGFuIHRoZSB3aWR0aCBvZiB0aGUgSlBFRyBpbWFnZSBiZWluZyBkZWNvbXByZXNzZWQsIHRoZW4KICAqICAgICAgICBUdXJib0pQRUcgd2lsbCB1c2Ugc2NhbGluZyBpbiB0aGUgSlBFRyBkZWNvbXByZXNzb3IgdG8gZ2VuZXJhdGUgdGhlCiAgKiAgICAgICAgbGFyZ2VzdCBwb3NzaWJsZSBpbWFnZSB0aGF0IHdpbGwgZml0IHdpdGhpbiB0aGUgZGVzaXJlZCB3aWR0aC4gIElmCi0gKiAgICAgICAgd2lkdGggaXMgc2V0IHRvIDAsIHRoZW4gb25seSB0aGUgaGVpZ2h0IHdpbGwgYmUgY29uc2lkZXJlZCB3aGVuCi0gKiAgICAgICAgZGV0ZXJtaW5pbmcgdGhlIHNjYWxlZCBpbWFnZSBzaXplLgorICogICAgICAgIDx0dD53aWR0aDwvdHQ+IGlzIHNldCB0byAwLCB0aGVuIG9ubHkgdGhlIGhlaWdodCB3aWxsIGJlIGNvbnNpZGVyZWQKKyAqICAgICAgICB3aGVuIGRldGVybWluaW5nIHRoZSBzY2FsZWQgaW1hZ2Ugc2l6ZS4KICAqIEBwYXJhbSBwaXRjaCBieXRlcyBwZXIgbGluZSBvZiB0aGUgZGVzdGluYXRpb24gaW1hZ2UuICBOb3JtYWxseSwgdGhpcyBpcwogICogICAgICAgIDx0dD5zY2FsZWRXaWR0aCAqICN0alBpeGVsU2l6ZVtwaXhlbEZvcm1hdF08L3R0PiBpZiB0aGUgZGVjb21wcmVzc2VkCiAgKiAgICAgICAgaW1hZ2UgaXMgdW5wYWRkZWQsIGVsc2UgPHR0PiNUSlBBRChzY2FsZWRXaWR0aCAqCkBAIC03MTEsMTQgKzcyMiwxNCBAQAogICogICAgICAgIGNhbGxpbmcgI1RKU0NBTEVEKCkgd2l0aCB0aGUgSlBFRyBpbWFnZSB3aWR0aCBhbmQgb25lIG9mIHRoZSBzY2FsaW5nCiAgKiAgICAgICAgZmFjdG9ycyByZXR1cm5lZCBieSAjdGpHZXRTY2FsaW5nRmFjdG9ycygpLikgIFlvdSBjYW4gYWxzbyBiZSBjbGV2ZXIKICAqICAgICAgICBhbmQgdXNlIHRoZSBwaXRjaCBwYXJhbWV0ZXIgdG8gc2tpcCBsaW5lcywgZXRjLiAgU2V0dGluZyB0aGlzCi0gKiAgICAgICAgcGFyYW1ldGVyIHRvIDAgaXMgdGhlIGVxdWl2YWxlbnQgb2Ygc2V0dGluZyBpdCB0byA8dHQ+c2NhbGVkV2lkdGgKLSAqICAgICAgICAqICN0alBpeGVsU2l6ZVtwaXhlbEZvcm1hdF08L3R0Pi4KKyAqICAgICAgICBwYXJhbWV0ZXIgdG8gMCBpcyB0aGUgZXF1aXZhbGVudCBvZiBzZXR0aW5nIGl0IHRvIDx0dD5zY2FsZWRXaWR0aCAqCisgKiAgICAgICAgI3RqUGl4ZWxTaXplW3BpeGVsRm9ybWF0XTwvdHQ+LgogICogQHBhcmFtIGhlaWdodCBkZXNpcmVkIGhlaWdodCAoaW4gcGl4ZWxzKSBvZiB0aGUgZGVzdGluYXRpb24gaW1hZ2UuICBJZiB0aGlzCi0gKiAgICAgICAgaXMgc21hbGxlciB0aGFuIHRoZSBoZWlnaHQgb2YgdGhlIEpQRUcgaW1hZ2UgYmVpbmcgZGVjb21wcmVzc2VkLCB0aGVuCi0gKiAgICAgICAgVHVyYm9KUEVHIHdpbGwgdXNlIHNjYWxpbmcgaW4gdGhlIEpQRUcgZGVjb21wcmVzc29yIHRvIGdlbmVyYXRlIHRoZQotICogICAgICAgIGxhcmdlc3QgcG9zc2libGUgaW1hZ2UgdGhhdCB3aWxsIGZpdCB3aXRoaW4gdGhlIGRlc2lyZWQgaGVpZ2h0LiAgSWYKLSAqICAgICAgICBoZWlnaHQgaXMgc2V0IHRvIDAsIHRoZW4gb25seSB0aGUgd2lkdGggd2lsbCBiZSBjb25zaWRlcmVkIHdoZW4KLSAqICAgICAgICBkZXRlcm1pbmluZyB0aGUgc2NhbGVkIGltYWdlIHNpemUuCisgKiAgICAgICAgaXMgZGlmZmVyZW50IHRoYW4gdGhlIGhlaWdodCBvZiB0aGUgSlBFRyBpbWFnZSBiZWluZyBkZWNvbXByZXNzZWQsCisgKiAgICAgICAgdGhlbiBUdXJib0pQRUcgd2lsbCB1c2Ugc2NhbGluZyBpbiB0aGUgSlBFRyBkZWNvbXByZXNzb3IgdG8gZ2VuZXJhdGUKKyAqICAgICAgICB0aGUgbGFyZ2VzdCBwb3NzaWJsZSBpbWFnZSB0aGF0IHdpbGwgZml0IHdpdGhpbiB0aGUgZGVzaXJlZCBoZWlnaHQuCisgKiAgICAgICAgSWYgPHR0PmhlaWdodDwvdHQ+IGlzIHNldCB0byAwLCB0aGVuIG9ubHkgdGhlIHdpZHRoIHdpbGwgYmUKKyAqICAgICAgICBjb25zaWRlcmVkIHdoZW4gZGV0ZXJtaW5pbmcgdGhlIHNjYWxlZCBpbWFnZSBzaXplLgogICogQHBhcmFtIHBpeGVsRm9ybWF0IHBpeGVsIGZvcm1hdCBvZiB0aGUgZGVzdGluYXRpb24gaW1hZ2UgKHNlZSBAcmVmCiAgKiAgICAgICAgVEpQRiAiUGl4ZWwgZm9ybWF0cyIuKQogICogQHBhcmFtIGZsYWdzIHRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIG9mIHRoZSBAcmVmIFRKRkxBR19CT1RUT01VUApAQCAtNzM1LDE2ICs3NDYsMjAgQEAKICAqIERlY29tcHJlc3MgYSBKUEVHIGltYWdlIHRvIGEgWVVWIHBsYW5hciBpbWFnZS4gIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgSlBFRwogICogZGVjb21wcmVzc2lvbiBidXQgbGVhdmVzIG91dCB0aGUgY29sb3IgY29udmVyc2lvbiBzdGVwLCBzbyBhIHBsYW5hciBZVVYKICAqIGltYWdlIGlzIGdlbmVyYXRlZCBpbnN0ZWFkIG9mIGFuIFJHQiBpbWFnZS4gIFRoZSBwYWRkaW5nIG9mIHRoZSBwbGFuZXMgaW4KLSAqIHRoaXMgaW1hZ2UgaXMgdGhlIHNhbWUgYXMgdGhlIGltYWdlcyBnZW5lcmF0ZWQgYnkgI3RqRW5jb2RlWVVWMigpLiAgTm90ZQotICogdGhhdCwgaWYgdGhlIHdpZHRoIG9yIGhlaWdodCBvZiB0aGUgaW1hZ2UgaXMgbm90IGFuIGV2ZW4gbXVsdGlwbGUgb2YgdGhlIE1DVQotICogYmxvY2sgc2l6ZSAoc2VlICN0ak1DVVdpZHRoIGFuZCAjdGpNQ1VIZWlnaHQpLCB0aGVuIGFuIGludGVybWVkaWF0ZSBidWZmZXIKLSAqIGNvcHkgd2lsbCBiZSBwZXJmb3JtZWQgd2l0aGluIFR1cmJvSlBFRy4KKyAqIHRoaXMgaW1hZ2UgaXMgdGhlIHNhbWUgYXMgaW4gdGhlIGltYWdlcyBnZW5lcmF0ZWQgYnkgI3RqRW5jb2RlWVVWMigpLiAgSWYKKyAqIHRoZSB3aWR0aCBvciBoZWlnaHQgb2YgdGhlIGltYWdlIGlzIG5vdCBhbiBldmVuIG11bHRpcGxlIG9mIHRoZSBNQ1UgYmxvY2sKKyAqIHNpemUgKHNlZSAjdGpNQ1VXaWR0aCBhbmQgI3RqTUNVSGVpZ2h0KSwgdGhlbiBhbiBpbnRlcm1lZGlhdGUgYnVmZmVyIGNvcHkKKyAqIHdpbGwgYmUgcGVyZm9ybWVkIHdpdGhpbiBUdXJib0pQRUcuCisgKiA8cD4KKyAqIEBub3RlIFRlY2huaWNhbGx5LCB0aGUgSlBFRyBmb3JtYXQgdXNlcyB0aGUgWUNiQ3IgY29sb3JzcGFjZSwgYnV0IHBlciB0aGUKKyAqIGNvbnZlbnRpb24gb2YgdGhlIGRpZ2l0YWwgdmlkZW8gY29tbXVuaXR5LCB0aGUgVHVyYm9KUEVHIEFQSSB1c2VzICJZVVYiIHRvCisgKiByZWZlciB0byBhbiBpbWFnZSBmb3JtYXQgY29uc2lzdGluZyBvZiBZLCBDYiwgYW5kIENyIGltYWdlIHBsYW5lcy4KICAqCiAgKiBAcGFyYW0gaGFuZGxlIGEgaGFuZGxlIHRvIGEgVHVyYm9KUEVHIGRlY29tcHJlc3NvciBvciB0cmFuc2Zvcm1lciBpbnN0YW5jZQogICogQHBhcmFtIGpwZWdCdWYgcG9pbnRlciB0byBhIGJ1ZmZlciBjb250YWluaW5nIHRoZSBKUEVHIGltYWdlIHRvIGRlY29tcHJlc3MKICAqIEBwYXJhbSBqcGVnU2l6ZSBzaXplIG9mIHRoZSBKUEVHIGltYWdlIChpbiBieXRlcykKICAqIEBwYXJhbSBkc3RCdWYgcG9pbnRlciB0byBhbiBpbWFnZSBidWZmZXIgdGhhdCB3aWxsIHJlY2VpdmUgdGhlIFlVViBpbWFnZS4KLSAqICAgICAgICBVc2UgI3RqQnVmU2l6ZVlVViB0byBkZXRlcm1pbmUgdGhlIGFwcHJvcHJpYXRlIHNpemUgZm9yIHRoaXMgYnVmZmVyCisgKiAgICAgICAgVXNlICN0akJ1ZlNpemVZVVYoKSB0byBkZXRlcm1pbmUgdGhlIGFwcHJvcHJpYXRlIHNpemUgZm9yIHRoaXMgYnVmZmVyCiAgKiAgICAgICAgYmFzZWQgb24gdGhlIGltYWdlIHdpZHRoLCBoZWlnaHQsIGFuZCBsZXZlbCBvZiBzdWJzYW1wbGluZy4KICAqIEBwYXJhbSBmbGFncyB0aGUgYml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZiB0aGUgQHJlZiBUSkZMQUdfQk9UVE9NVVAKICAqICAgICAgICAiZmxhZ3MiLgpAQCAtNzcxLDEyICs3ODYsMTIgQEAKICAqIHRvIGFub3RoZXIgd2l0aG91dCBhbHRlcmluZyB0aGUgdmFsdWVzIG9mIHRoZSBjb2VmZmljaWVudHMuICBXaGlsZSB0aGlzIGlzCiAgKiB0eXBpY2FsbHkgZmFzdGVyIHRoYW4gZGVjb21wcmVzc2luZyB0aGUgaW1hZ2UsIHRyYW5zZm9ybWluZyBpdCwgYW5kCiAgKiByZS1jb21wcmVzc2luZyBpdCwgbG9zc2xlc3MgdHJhbnNmb3JtcyBhcmUgbm90IGZyZWUuICBFYWNoIGxvc3NsZXNzCi0gKiB0cmFuc2Zvcm0gcmVxdWlyZXMgcmVhZGluZyBhbmQgSHVmZm1hbiBkZWNvZGluZyBhbGwgb2YgdGhlIGNvZWZmaWNpZW50cyBpbgotICogdGhlIHNvdXJjZSBpbWFnZSwgcmVnYXJkbGVzcyBvZiB0aGUgc2l6ZSBvZiB0aGUgZGVzdGluYXRpb24gaW1hZ2UuICBUaHVzLAotICogdGhpcyBmdW5jdGlvbiBwcm92aWRlcyBhIG1lYW5zIG9mIGdlbmVyYXRpbmcgbXVsdGlwbGUgdHJhbnNmb3JtZWQgaW1hZ2VzCi0gKiBmcm9tIHRoZSBzYW1lIHNvdXJjZSBvciBvZiBhcHBseWluZyBtdWx0aXBsZSB0cmFuc2Zvcm1hdGlvbnMgc2ltdWx0YW5lb3VzbHksCi0gKiBpbiBvcmRlciB0byBlbGltaW5hdGUgdGhlIG5lZWQgdG8gcmVhZCB0aGUgc291cmNlIGNvZWZmaWNpZW50cyBtdWx0aXBsZQotICogdGltZXMuCisgKiB0cmFuc2Zvcm0gcmVxdWlyZXMgcmVhZGluZyBhbmQgcGVyZm9ybWluZyBIdWZmbWFuIGRlY29kaW5nIG9uIGFsbCBvZiB0aGUKKyAqIGNvZWZmaWNpZW50cyBpbiB0aGUgc291cmNlIGltYWdlLCByZWdhcmRsZXNzIG9mIHRoZSBzaXplIG9mIHRoZSBkZXN0aW5hdGlvbgorICogaW1hZ2UuICBUaHVzLCB0aGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGEgbWVhbnMgb2YgZ2VuZXJhdGluZyBtdWx0aXBsZQorICogdHJhbnNmb3JtZWQgaW1hZ2VzIGZyb20gdGhlIHNhbWUgc291cmNlIG9yICBhcHBseWluZyBtdWx0aXBsZQorICogdHJhbnNmb3JtYXRpb25zIHNpbXVsdGFuZW91c2x5LCBpbiBvcmRlciB0byBlbGltaW5hdGUgdGhlIG5lZWQgdG8gcmVhZCB0aGUKKyAqIHNvdXJjZSBjb2VmZmljaWVudHMgbXVsdGlwbGUgdGltZXMuCiAgKgogICogQHBhcmFtIGhhbmRsZSBhIGhhbmRsZSB0byBhIFR1cmJvSlBFRyB0cmFuc2Zvcm1lciBpbnN0YW5jZQogICogQHBhcmFtIGpwZWdCdWYgcG9pbnRlciB0byBhIGJ1ZmZlciBjb250YWluaW5nIHRoZSBKUEVHIGltYWdlIHRvIHRyYW5zZm9ybQpAQCAtNzkyLDkgKzgwNyw5IEBACiAgKiAgICAgICAgLSMgc2V0IDx0dD5kc3RCdWZzW2ldPC90dD4gdG8gTlVMTCB0byB0ZWxsIFR1cmJvSlBFRyB0byBhbGxvY2F0ZSB0aGUKICAqICAgICAgICBidWZmZXIgZm9yIHlvdSwgb3IKICAqICAgICAgICAtIyBwcmUtYWxsb2NhdGUgdGhlIGJ1ZmZlciB0byBhICJ3b3JzdCBjYXNlIiBzaXplIGRldGVybWluZWQgYnkKLSAqICAgICAgICBjYWxsaW5nICN0akJ1ZlNpemUoKSB3aXRoIHRoZSBjcm9wcGVkIHdpZHRoIGFuZCBoZWlnaHQuICBUaGlzIHNob3VsZAotICogICAgICAgIGVuc3VyZSB0aGF0IHRoZSBidWZmZXIgbmV2ZXIgaGFzIHRvIGJlIHJlLWFsbG9jYXRlZCAoc2V0dGluZwotICogICAgICAgICNUSkZMQUdfTk9SRUFMTE9DIGd1YXJhbnRlZXMgdGhpcy4pCisgKiAgICAgICAgY2FsbGluZyAjdGpCdWZTaXplKCkgd2l0aCB0aGUgdHJhbnNmb3JtZWQgb3IgY3JvcHBlZCB3aWR0aCBhbmQKKyAqICAgICAgICBoZWlnaHQuICBUaGlzIHNob3VsZCBlbnN1cmUgdGhhdCB0aGUgYnVmZmVyIG5ldmVyIGhhcyB0byBiZQorICogICAgICAgIHJlLWFsbG9jYXRlZCAoc2V0dGluZyAjVEpGTEFHX05PUkVBTExPQyBndWFyYW50ZWVzIHRoaXMuKQogICogICAgICAgIC4KICAqICAgICAgICBJZiB5b3UgY2hvb3NlIG9wdGlvbiAxLCA8dHQ+ZHN0U2l6ZXNbaV08L3R0PiBzaG91bGQgYmUgc2V0IHRvCiAgKiAgICAgICAgdGhlIHNpemUgb2YgeW91ciBwcmUtYWxsb2NhdGVkIGJ1ZmZlci4gIEluIGFueSBjYXNlLCB1bmxlc3MgeW91IGhhdmUKQEAgLTgwNiw3ICs4MjEsNyBAQAogICogICAgICAgIDx0dD5kc3RTaXplc1tpXTwvdHQ+IHNob3VsZCBiZSBzZXQgdG8gdGhlIHNpemUgb2YgdGhlIGJ1ZmZlci4gIFVwb24KICAqICAgICAgICByZXR1cm4sIDx0dD5kc3RTaXplc1tpXTwvdHQ+IHdpbGwgY29udGFpbiB0aGUgc2l6ZSBvZiB0aGUgSlBFRyBpbWFnZQogICogICAgICAgIChpbiBieXRlcy4pCi0gKiBAcGFyYW0gdHJhbnNmb3JtcyBwb2ludGVyIHRvIGFuIGFycmF5IG9mIG4gdGp0cmFuc2Zvcm0gc3RydWN0dXJlcywgZWFjaCBvZgorICogQHBhcmFtIHRyYW5zZm9ybXMgcG9pbnRlciB0byBhbiBhcnJheSBvZiBuICN0anRyYW5zZm9ybSBzdHJ1Y3R1cmVzLCBlYWNoIG9mCiAgKiAgICAgICAgd2hpY2ggc3BlY2lmaWVzIHRoZSB0cmFuc2Zvcm0gcGFyYW1ldGVycyBhbmQvb3IgY3JvcHBpbmcgcmVnaW9uIGZvcgogICogICAgICAgIHRoZSBjb3JyZXNwb25kaW5nIHRyYW5zZm9ybWVkIG91dHB1dCBpbWFnZS4KICAqIEBwYXJhbSBmbGFncyB0aGUgYml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZiB0aGUgQHJlZiBUSkZMQUdfQk9UVE9NVVAKQEAgLTgzNyw3ICs4NTIsNyBAQAogICogKHJlKWFsbG9jYXRpb24gKGJ5IHNldHRpbmcgI1RKRkxBR19OT1JFQUxMT0MuKQogICoKICAqIEBwYXJhbSBieXRlcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGFsbG9jYXRlCi0gKiAKKyAqCiAgKiBAcmV0dXJuIGEgcG9pbnRlciB0byBhIG5ld2x5LWFsbG9jYXRlZCBidWZmZXIgd2l0aCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZgogICogICAgICAgICBieXRlcwogICoKZGlmZiAtLWdpdCBhL3VzYWdlLnR4dCBiL3VzYWdlLnR4dAppbmRleCAxNTc5NzJiLi5lZjhlNmQwIDEwMDY0NAotLS0gYS91c2FnZS50eHQKKysrIGIvdXNhZ2UudHh0CkBAIC0xNyw3ICsxNyw3IEBACiAKIFRoZXNlIHByb2dyYW1zIGltcGxlbWVudCBKUEVHIGltYWdlIGVuY29kaW5nLCBkZWNvZGluZywgYW5kIHRyYW5zY29kaW5nLgogSlBFRyAocHJvbm91bmNlZCAiamF5LXBlZyIpIGlzIGEgc3RhbmRhcmRpemVkIGNvbXByZXNzaW9uIG1ldGhvZCBmb3IKLWZ1bGwtY29sb3IgYW5kIGdyYXktc2NhbGUgaW1hZ2VzLgorZnVsbC1jb2xvciBhbmQgZ3JheXNjYWxlIGltYWdlcy4KIAogCiBHRU5FUkFMIFVTQUdFCkBAIC0yNiwzMSArMjYsMzEgQEAKIGFuZCBkanBlZyB0byBkZWNvbXByZXNzIGEgSlBFRyBmaWxlIGJhY2sgaW50byBhIGNvbnZlbnRpb25hbCBpbWFnZSBmb3JtYXQuCiAKIE9uIFVuaXgtbGlrZSBzeXN0ZW1zLCB5b3Ugc2F5OgotCWNqcGVnIFtzd2l0Y2hlc10gW2ltYWdlZmlsZV0gPmpwZWdmaWxlCisgICAgICAgIGNqcGVnIFtzd2l0Y2hlc10gW2ltYWdlZmlsZV0gPmpwZWdmaWxlCiBvcgotCWRqcGVnIFtzd2l0Y2hlc10gW2pwZWdmaWxlXSAgPmltYWdlZmlsZQorICAgICAgICBkanBlZyBbc3dpdGNoZXNdIFtqcGVnZmlsZV0gID5pbWFnZWZpbGUKIFRoZSBwcm9ncmFtcyByZWFkIHRoZSBzcGVjaWZpZWQgaW5wdXQgZmlsZSwgb3Igc3RhbmRhcmQgaW5wdXQgaWYgbm9uZSBpcwogbmFtZWQuICBUaGV5IGFsd2F5cyB3cml0ZSB0byBzdGFuZGFyZCBvdXRwdXQgKHdpdGggdHJhY2UvZXJyb3IgbWVzc2FnZXMgdG8KIHN0YW5kYXJkIGVycm9yKS4gIFRoZXNlIGNvbnZlbnRpb25zIGFyZSBoYW5keSBmb3IgcGlwaW5nIGltYWdlcyBiZXR3ZWVuCiBwcm9ncmFtcy4KIAogT24gbW9zdCBub24tVW5peCBzeXN0ZW1zLCB5b3Ugc2F5OgotCWNqcGVnIFtzd2l0Y2hlc10gaW1hZ2VmaWxlIGpwZWdmaWxlCisgICAgICAgIGNqcGVnIFtzd2l0Y2hlc10gaW1hZ2VmaWxlIGpwZWdmaWxlCiBvcgotCWRqcGVnIFtzd2l0Y2hlc10ganBlZ2ZpbGUgIGltYWdlZmlsZQorICAgICAgICBkanBlZyBbc3dpdGNoZXNdIGpwZWdmaWxlICBpbWFnZWZpbGUKIGkuZS4sIGJvdGggdGhlIGlucHV0IGFuZCBvdXRwdXQgZmlsZXMgYXJlIG5hbWVkIG9uIHRoZSBjb21tYW5kIGxpbmUuICBUaGlzCiBzdHlsZSBpcyBhIGxpdHRsZSBtb3JlIGZvb2xwcm9vZiwgYW5kIGl0IGxvc2VzIG5vIGZ1bmN0aW9uYWxpdHkgaWYgeW91IGRvbid0CiBoYXZlIHBpcGVzLiAgKFlvdSBjYW4gZ2V0IHRoaXMgc3R5bGUgb24gVW5peCB0b28sIGlmIHlvdSBwcmVmZXIsIGJ5IGRlZmluaW5nCiBUV09fRklMRV9DT01NQU5ETElORSB3aGVuIHlvdSBjb21waWxlIHRoZSBwcm9ncmFtczsgc2VlIGluc3RhbGwudHh0LikKIAogWW91IGNhbiBhbHNvIHNheToKLQljanBlZyBbc3dpdGNoZXNdIC1vdXRmaWxlIGpwZWdmaWxlICBpbWFnZWZpbGUKKyAgICAgICAgY2pwZWcgW3N3aXRjaGVzXSAtb3V0ZmlsZSBqcGVnZmlsZSAgaW1hZ2VmaWxlCiBvcgotCWRqcGVnIFtzd2l0Y2hlc10gLW91dGZpbGUgaW1hZ2VmaWxlICBqcGVnZmlsZQorICAgICAgICBkanBlZyBbc3dpdGNoZXNdIC1vdXRmaWxlIGltYWdlZmlsZSAganBlZ2ZpbGUKIFRoaXMgc3ludGF4IHdvcmtzIG9uIGFsbCBzeXN0ZW1zLCBzbyBpdCBpcyB1c2VmdWwgZm9yIHNjcmlwdHMuCiAKIFRoZSBjdXJyZW50bHkgc3VwcG9ydGVkIGltYWdlIGZpbGUgZm9ybWF0cyBhcmU6IFBQTSAoUEJNUExVUyBjb2xvciBmb3JtYXQpLAotUEdNIChQQk1QTFVTIGdyYXktc2NhbGUgZm9ybWF0KSwgQk1QLCBUYXJnYSwgYW5kIFJMRSAoVXRhaCBSYXN0ZXIgVG9vbGtpdAorUEdNIChQQk1QTFVTIGdyYXlzY2FsZSBmb3JtYXQpLCBCTVAsIFRhcmdhLCBhbmQgUkxFIChVdGFoIFJhc3RlciBUb29sa2l0CiBmb3JtYXQpLiAgKFJMRSBpcyBzdXBwb3J0ZWQgb25seSBpZiB0aGUgVVJUIGxpYnJhcnkgaXMgYXZhaWxhYmxlLikKIGNqcGVnIHJlY29nbml6ZXMgdGhlIGlucHV0IGltYWdlIGZvcm1hdCBhdXRvbWF0aWNhbGx5LCB3aXRoIHRoZSBleGNlcHRpb24KIG9mIHNvbWUgVGFyZ2EtZm9ybWF0IGZpbGVzLiAgWW91IGhhdmUgdG8gdGVsbCBkanBlZyB3aGljaCBmb3JtYXQgdG8gZ2VuZXJhdGUuCkBAIC02OSwzMSArNjksMzUgQEAKIAogVGhlIGJhc2ljIGNvbW1hbmQgbGluZSBzd2l0Y2hlcyBmb3IgY2pwZWcgYXJlOgogCi0JLXF1YWxpdHkgTlssLi4uXSAgU2NhbGUgcXVhbnRpemF0aW9uIHRhYmxlcyB0byBhZGp1c3QgaW1hZ2UgcXVhbGl0eS4KLQkJCVF1YWxpdHkgaXMgMCAod29yc3QpIHRvIDEwMCAoYmVzdCk7IGRlZmF1bHQgaXMgNzUuCi0JCQkoU2VlIGJlbG93IGZvciBtb3JlIGluZm8uKQorICAgICAgICAtcXVhbGl0eSBOWywuLi5dICBTY2FsZSBxdWFudGl6YXRpb24gdGFibGVzIHRvIGFkanVzdCBpbWFnZSBxdWFsaXR5LgorICAgICAgICAgICAgICAgICAgICAgICAgICBRdWFsaXR5IGlzIDAgKHdvcnN0KSB0byAxMDAgKGJlc3QpOyBkZWZhdWx0IGlzIDc1LgorICAgICAgICAgICAgICAgICAgICAgICAgICAoU2VlIGJlbG93IGZvciBtb3JlIGluZm8uKQogCi0JLWdyYXlzY2FsZQlDcmVhdGUgbW9ub2Nocm9tZSBKUEVHIGZpbGUgZnJvbSBjb2xvciBpbnB1dC4KLQkJCUJlIHN1cmUgdG8gdXNlIHRoaXMgc3dpdGNoIHdoZW4gY29tcHJlc3NpbmcgYSBncmF5c2NhbGUKLQkJCUJNUCBmaWxlLCBiZWNhdXNlIGNqcGVnIGlzbid0IGJyaWdodCBlbm91Z2ggdG8gbm90aWNlCi0JCQl3aGV0aGVyIGEgQk1QIGZpbGUgdXNlcyBvbmx5IHNoYWRlcyBvZiBncmF5LiAgQnkKLQkJCXNheWluZyAtZ3JheXNjYWxlLCB5b3UnbGwgZ2V0IGEgc21hbGxlciBKUEVHIGZpbGUgdGhhdAotCQkJdGFrZXMgbGVzcyB0aW1lIHRvIHByb2Nlc3MuCisgICAgICAgIC1ncmF5c2NhbGUgICAgICBDcmVhdGUgbW9ub2Nocm9tZSBKUEVHIGZpbGUgZnJvbSBjb2xvciBpbnB1dC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgdG8gdXNlIHRoaXMgc3dpdGNoIHdoZW4gY29tcHJlc3NpbmcgYSBncmF5c2NhbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIEJNUCBmaWxlLCBiZWNhdXNlIGNqcGVnIGlzbid0IGJyaWdodCBlbm91Z2ggdG8gbm90aWNlCisgICAgICAgICAgICAgICAgICAgICAgICB3aGV0aGVyIGEgQk1QIGZpbGUgdXNlcyBvbmx5IHNoYWRlcyBvZiBncmF5LiAgQnkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNheWluZyAtZ3JheXNjYWxlLCB5b3UnbGwgZ2V0IGEgc21hbGxlciBKUEVHIGZpbGUgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgdGFrZXMgbGVzcyB0aW1lIHRvIHByb2Nlc3MuCiAKLQktb3B0aW1pemUJUGVyZm9ybSBvcHRpbWl6YXRpb24gb2YgZW50cm9weSBlbmNvZGluZyBwYXJhbWV0ZXJzLgotCQkJV2l0aG91dCB0aGlzLCBkZWZhdWx0IGVuY29kaW5nIHBhcmFtZXRlcnMgYXJlIHVzZWQuCi0JCQktb3B0aW1pemUgdXN1YWxseSBtYWtlcyB0aGUgSlBFRyBmaWxlIGEgbGl0dGxlIHNtYWxsZXIsCi0JCQlidXQgY2pwZWcgcnVucyBzb21ld2hhdCBzbG93ZXIgYW5kIG5lZWRzIG11Y2ggbW9yZQotCQkJbWVtb3J5LiAgSW1hZ2UgcXVhbGl0eSBhbmQgc3BlZWQgb2YgZGVjb21wcmVzc2lvbiBhcmUKLQkJCXVuYWZmZWN0ZWQgYnkgLW9wdGltaXplLgorICAgICAgICAtcmdiICAgICAgICAgICAgQ3JlYXRlIFJHQiBKUEVHIGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICBVc2luZyB0aGlzIHN3aXRjaCBzdXBwcmVzc2VzIHRoZSBjb252ZXJzaW9uIGZyb20gUkdCCisgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnNwYWNlIGlucHV0IHRvIHRoZSBkZWZhdWx0IFlDYkNyIEpQRUcgY29sb3JzcGFjZS4KIAotCS1wcm9ncmVzc2l2ZQlDcmVhdGUgcHJvZ3Jlc3NpdmUgSlBFRyBmaWxlIChzZWUgYmVsb3cpLgorICAgICAgICAtb3B0aW1pemUgICAgICAgUGVyZm9ybSBvcHRpbWl6YXRpb24gb2YgZW50cm9weSBlbmNvZGluZyBwYXJhbWV0ZXJzLgorICAgICAgICAgICAgICAgICAgICAgICAgV2l0aG91dCB0aGlzLCBkZWZhdWx0IGVuY29kaW5nIHBhcmFtZXRlcnMgYXJlIHVzZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAtb3B0aW1pemUgdXN1YWxseSBtYWtlcyB0aGUgSlBFRyBmaWxlIGEgbGl0dGxlIHNtYWxsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBidXQgY2pwZWcgcnVucyBzb21ld2hhdCBzbG93ZXIgYW5kIG5lZWRzIG11Y2ggbW9yZQorICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5LiAgSW1hZ2UgcXVhbGl0eSBhbmQgc3BlZWQgb2YgZGVjb21wcmVzc2lvbiBhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuYWZmZWN0ZWQgYnkgLW9wdGltaXplLgogCi0JLXRhcmdhCQlJbnB1dCBmaWxlIGlzIFRhcmdhIGZvcm1hdC4gIFRhcmdhIGZpbGVzIHRoYXQgY29udGFpbgotCQkJYW4gImlkZW50aWZpY2F0aW9uIiBmaWVsZCB3aWxsIG5vdCBiZSBhdXRvbWF0aWNhbGx5Ci0JCQlyZWNvZ25pemVkIGJ5IGNqcGVnOyBmb3Igc3VjaCBmaWxlcyB5b3UgbXVzdCBzcGVjaWZ5Ci0JCQktdGFyZ2EgdG8gbWFrZSBjanBlZyB0cmVhdCB0aGUgaW5wdXQgYXMgVGFyZ2EgZm9ybWF0LgotCQkJRm9yIG1vc3QgVGFyZ2EgZmlsZXMsIHlvdSB3b24ndCBuZWVkIHRoaXMgc3dpdGNoLgorICAgICAgICAtcHJvZ3Jlc3NpdmUgICAgQ3JlYXRlIHByb2dyZXNzaXZlIEpQRUcgZmlsZSAoc2VlIGJlbG93KS4KKworICAgICAgICAtdGFyZ2EgICAgICAgICAgSW5wdXQgZmlsZSBpcyBUYXJnYSBmb3JtYXQuICBUYXJnYSBmaWxlcyB0aGF0IGNvbnRhaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFuICJpZGVudGlmaWNhdGlvbiIgZmllbGQgd2lsbCBub3QgYmUgYXV0b21hdGljYWxseQorICAgICAgICAgICAgICAgICAgICAgICAgcmVjb2duaXplZCBieSBjanBlZzsgZm9yIHN1Y2ggZmlsZXMgeW91IG11c3Qgc3BlY2lmeQorICAgICAgICAgICAgICAgICAgICAgICAgLXRhcmdhIHRvIG1ha2UgY2pwZWcgdHJlYXQgdGhlIGlucHV0IGFzIFRhcmdhIGZvcm1hdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBtb3N0IFRhcmdhIGZpbGVzLCB5b3Ugd29uJ3QgbmVlZCB0aGlzIHN3aXRjaC4KIAogVGhlIC1xdWFsaXR5IHN3aXRjaCBsZXRzIHlvdSB0cmFkZSBvZmYgY29tcHJlc3NlZCBmaWxlIHNpemUgYWdhaW5zdCBxdWFsaXR5IG9mCiB0aGUgcmVjb25zdHJ1Y3RlZCBpbWFnZTogdGhlIGhpZ2hlciB0aGUgcXVhbGl0eSBzZXR0aW5nLCB0aGUgbGFyZ2VyIHRoZSBKUEVHCkBAIC0xNjAsMzggKzE2NCw1NyBAQAogCiBTd2l0Y2hlcyBmb3IgYWR2YW5jZWQgdXNlcnM6CiAKLQktYXJpdGhtZXRpYwlVc2UgYXJpdGhtZXRpYyBjb2RpbmcuICBDQVVUSU9OOiBhcml0aG1ldGljIGNvZGVkIEpQRUcKLQkJCWlzIG5vdCB5ZXQgd2lkZWx5IGltcGxlbWVudGVkLCBzbyBtYW55IGRlY29kZXJzIHdpbGwKLQkJCWJlIHVuYWJsZSB0byB2aWV3IGFuIGFyaXRobWV0aWMgY29kZWQgSlBFRyBmaWxlIGF0Ci0JCQlhbGwuCisgICAgICAgIC1hcml0aG1ldGljICAgICBVc2UgYXJpdGhtZXRpYyBjb2RpbmcuICBDQVVUSU9OOiBhcml0aG1ldGljIGNvZGVkIEpQRUcKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzIG5vdCB5ZXQgd2lkZWx5IGltcGxlbWVudGVkLCBzbyBtYW55IGRlY29kZXJzIHdpbGwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlIHVuYWJsZSB0byB2aWV3IGFuIGFyaXRobWV0aWMgY29kZWQgSlBFRyBmaWxlIGF0CisgICAgICAgICAgICAgICAgICAgICAgICBhbGwuCiAKLQktZGN0IGludAlVc2UgaW50ZWdlciBEQ1QgbWV0aG9kIChkZWZhdWx0KS4KLQktZGN0IGZhc3QJVXNlIGZhc3QgaW50ZWdlciBEQ1QgKGxlc3MgYWNjdXJhdGUpLgotCS1kY3QgZmxvYXQJVXNlIGZsb2F0aW5nLXBvaW50IERDVCBtZXRob2QuCi0JCQlUaGUgZmxvYXQgbWV0aG9kIGlzIHZlcnkgc2xpZ2h0bHkgbW9yZSBhY2N1cmF0ZSB0aGFuCi0JCQl0aGUgaW50IG1ldGhvZCwgYnV0IGlzIG11Y2ggc2xvd2VyIHVubGVzcyB5b3VyIG1hY2hpbmUKLQkJCWhhcyB2ZXJ5IGZhc3QgZmxvYXRpbmctcG9pbnQgaGFyZHdhcmUuICBBbHNvIG5vdGUgdGhhdAotCQkJcmVzdWx0cyBvZiB0aGUgZmxvYXRpbmctcG9pbnQgbWV0aG9kIG1heSB2YXJ5IHNsaWdodGx5Ci0JCQlhY3Jvc3MgbWFjaGluZXMsIHdoaWxlIHRoZSBpbnRlZ2VyIG1ldGhvZHMgc2hvdWxkIGdpdmUKLQkJCXRoZSBzYW1lIHJlc3VsdHMgZXZlcnl3aGVyZS4gIFRoZSBmYXN0IGludGVnZXIgbWV0aG9kCi0JCQlpcyBtdWNoIGxlc3MgYWNjdXJhdGUgdGhhbiB0aGUgb3RoZXIgdHdvLgorICAgICAgICAtZGN0IGludCAgICAgICAgVXNlIGludGVnZXIgRENUIG1ldGhvZCAoZGVmYXVsdCkuCisgICAgICAgIC1kY3QgZmFzdCAgICAgICBVc2UgZmFzdCBpbnRlZ2VyIERDVCAobGVzcyBhY2N1cmF0ZSkuCisgICAgICAgICAgICAgICAgICAgICAgICBJbiBsaWJqcGVnLXR1cmJvLCB0aGUgZmFzdCBtZXRob2QgaXMgZ2VuZXJhbGx5IGFib3V0CisgICAgICAgICAgICAgICAgICAgICAgICA1LTE1JSBmYXN0ZXIgdGhhbiB0aGUgaW50IG1ldGhvZCB3aGVuIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgeDg2L3g4Ni02NCBTSU1EIGV4dGVuc2lvbnMgKHJlc3VsdHMgbWF5IHZhcnkgd2l0aCBvdGhlcgorICAgICAgICAgICAgICAgICAgICAgICAgU0lNRCBpbXBsZW1lbnRhdGlvbnMsIG9yIHdoZW4gdXNpbmcgbGlianBlZy10dXJibworICAgICAgICAgICAgICAgICAgICAgICAgd2l0aG91dCBTSU1EIGV4dGVuc2lvbnMuKSAgRm9yIHF1YWxpdHkgbGV2ZWxzIG9mIDkwIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgYmVsb3csIHRoZXJlIHNob3VsZCBiZSBsaXR0bGUgb3Igbm8gcGVyY2VwdGlibGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdHdvIGFsZ29yaXRobXMuICBGb3IgcXVhbGl0eQorICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzIGFib3ZlIDkwLCBob3dldmVyLCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZmFzdCBhbmQgdGhlIGludCBtZXRob2RzIGJlY29tZXMgbW9yZSBwcm9ub3VuY2VkLgorICAgICAgICAgICAgICAgICAgICAgICAgV2l0aCBxdWFsaXR5PTk3LCBmb3IgaW5zdGFuY2UsIHRoZSBmYXN0IG1ldGhvZCBpbmN1cnMKKyAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYWxseSBhYm91dCBhIDEtMyBkQiBsb3NzIChpbiBQU05SKSByZWxhdGl2ZSB0bworICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGludCBtZXRob2QsIGJ1dCB0aGlzIGNhbiBiZSBsYXJnZXIgZm9yIHNvbWUgaW1hZ2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgRG8gbm90IHVzZSB0aGUgZmFzdCBtZXRob2Qgd2l0aCBxdWFsaXR5IGxldmVscyBhYm92ZQorICAgICAgICAgICAgICAgICAgICAgICAgOTcuICBUaGUgYWxnb3JpdGhtIG9mdGVuIGRlZ2VuZXJhdGVzIGF0IHF1YWxpdHk9OTggYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBhYm92ZSBhbmQgY2FuIGFjdHVhbGx5IHByb2R1Y2UgYSBtb3JlIGxvc3N5IGltYWdlIHRoYW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxvd2VyIHF1YWxpdHkgbGV2ZWxzIGhhZCBiZWVuIHVzZWQuICBBbHNvLCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgbGlianBlZy10dXJibywgdGhlIGZhc3QgbWV0aG9kIGlzIG5vdCBmdWxseSBhY2NlcmF0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBxdWFsaXR5IGxldmVscyBhYm92ZSA5Nywgc28gaXQgd2lsbCBiZSBzbG93ZXIgdGhhbgorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGludCBtZXRob2QuCisgICAgICAgIC1kY3QgZmxvYXQgICAgICBVc2UgZmxvYXRpbmctcG9pbnQgRENUIG1ldGhvZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBmbG9hdCBtZXRob2QgaXMgbWFpbmx5IGEgbGVnYWN5IGZlYXR1cmUuICBJdCBkb2VzCisgICAgICAgICAgICAgICAgICAgICAgICBub3QgcHJvZHVjZSBzaWduaWZpY2FudGx5IG1vcmUgYWNjdXJhdGUgcmVzdWx0cyB0aGFuCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgaW50IG1ldGhvZCwgYW5kIGl0IGlzIG11Y2ggc2xvd2VyLiAgVGhlIGZsb2F0CisgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QgbWF5IGFsc28gZ2l2ZSBkaWZmZXJlbnQgcmVzdWx0cyBvbiBkaWZmZXJlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVzIGR1ZSB0byB2YXJ5aW5nIHJvdW5kb2ZmIGJlaGF2aW9yLCB3aGVyZWFzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgaW50ZWdlciBtZXRob2RzIHNob3VsZCBnaXZlIHRoZSBzYW1lIHJlc3VsdHMgb24gYWxsCisgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcy4KIAotCS1yZXN0YXJ0IE4JRW1pdCBhIEpQRUcgcmVzdGFydCBtYXJrZXIgZXZlcnkgTiBNQ1Ugcm93cywgb3IgZXZlcnkKLQkJCU4gTUNVIGJsb2NrcyBpZiAiQiIgaXMgYXR0YWNoZWQgdG8gdGhlIG51bWJlci4KLQkJCS1yZXN0YXJ0IDAgKHRoZSBkZWZhdWx0KSBtZWFucyBubyByZXN0YXJ0IG1hcmtlcnMuCisgICAgICAgIC1yZXN0YXJ0IE4gICAgICBFbWl0IGEgSlBFRyByZXN0YXJ0IG1hcmtlciBldmVyeSBOIE1DVSByb3dzLCBvciBldmVyeQorICAgICAgICAgICAgICAgICAgICAgICAgTiBNQ1UgYmxvY2tzIGlmICJCIiBpcyBhdHRhY2hlZCB0byB0aGUgbnVtYmVyLgorICAgICAgICAgICAgICAgICAgICAgICAgLXJlc3RhcnQgMCAodGhlIGRlZmF1bHQpIG1lYW5zIG5vIHJlc3RhcnQgbWFya2Vycy4KIAotCS1zbW9vdGggTglTbW9vdGggdGhlIGlucHV0IGltYWdlIHRvIGVsaW1pbmF0ZSBkaXRoZXJpbmcgbm9pc2UuCi0JCQlOLCByYW5naW5nIGZyb20gMSB0byAxMDAsIGluZGljYXRlcyB0aGUgc3RyZW5ndGggb2YKLQkJCXNtb290aGluZy4gIDAgKHRoZSBkZWZhdWx0KSBtZWFucyBubyBzbW9vdGhpbmcuCisgICAgICAgIC1zbW9vdGggTiAgICAgICBTbW9vdGggdGhlIGlucHV0IGltYWdlIHRvIGVsaW1pbmF0ZSBkaXRoZXJpbmcgbm9pc2UuCisgICAgICAgICAgICAgICAgICAgICAgICBOLCByYW5naW5nIGZyb20gMSB0byAxMDAsIGluZGljYXRlcyB0aGUgc3RyZW5ndGggb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIHNtb290aGluZy4gIDAgKHRoZSBkZWZhdWx0KSBtZWFucyBubyBzbW9vdGhpbmcuCiAKLQktbWF4bWVtb3J5IE4JU2V0IGxpbWl0IGZvciBhbW91bnQgb2YgbWVtb3J5IHRvIHVzZSBpbiBwcm9jZXNzaW5nCi0JCQlsYXJnZSBpbWFnZXMuICBWYWx1ZSBpcyBpbiB0aG91c2FuZHMgb2YgYnl0ZXMsIG9yCi0JCQltaWxsaW9ucyBvZiBieXRlcyBpZiAiTSIgaXMgYXR0YWNoZWQgdG8gdGhlIG51bWJlci4KLQkJCUZvciBleGFtcGxlLCAtbWF4IDRtIHNlbGVjdHMgNDAwMDAwMCBieXRlcy4gIElmIG1vcmUKLQkJCXNwYWNlIGlzIG5lZWRlZCwgdGVtcG9yYXJ5IGZpbGVzIHdpbGwgYmUgdXNlZC4KKyAgICAgICAgLW1heG1lbW9yeSBOICAgIFNldCBsaW1pdCBmb3IgYW1vdW50IG9mIG1lbW9yeSB0byB1c2UgaW4gcHJvY2Vzc2luZworICAgICAgICAgICAgICAgICAgICAgICAgbGFyZ2UgaW1hZ2VzLiAgVmFsdWUgaXMgaW4gdGhvdXNhbmRzIG9mIGJ5dGVzLCBvcgorICAgICAgICAgICAgICAgICAgICAgICAgbWlsbGlvbnMgb2YgYnl0ZXMgaWYgIk0iIGlzIGF0dGFjaGVkIHRvIHRoZSBudW1iZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgLW1heCA0bSBzZWxlY3RzIDQwMDAwMDAgYnl0ZXMuICBJZiBtb3JlCisgICAgICAgICAgICAgICAgICAgICAgICBzcGFjZSBpcyBuZWVkZWQsIHRlbXBvcmFyeSBmaWxlcyB3aWxsIGJlIHVzZWQuCiAKLQktdmVyYm9zZQlFbmFibGUgZGVidWcgcHJpbnRvdXQuICBNb3JlIC12J3MgZ2l2ZSBtb3JlIHByaW50b3V0LgotCW9yICAtZGVidWcJQWxzbywgdmVyc2lvbiBpbmZvcm1hdGlvbiBpcyBwcmludGVkIGF0IHN0YXJ0dXAuCisgICAgICAgIC12ZXJib3NlICAgICAgICBFbmFibGUgZGVidWcgcHJpbnRvdXQuICBNb3JlIC12J3MgZ2l2ZSBtb3JlIHByaW50b3V0LgorICAgICAgICBvciAgLWRlYnVnICAgICAgQWxzbywgdmVyc2lvbiBpbmZvcm1hdGlvbiBpcyBwcmludGVkIGF0IHN0YXJ0dXAuCiAKIFRoZSAtcmVzdGFydCBvcHRpb24gaW5zZXJ0cyBleHRyYSBtYXJrZXJzIHRoYXQgYWxsb3cgYSBKUEVHIGRlY29kZXIgdG8KIHJlc3luY2hyb25pemUgYWZ0ZXIgYSB0cmFuc21pc3Npb24gZXJyb3IuICBXaXRob3V0IHJlc3RhcnQgbWFya2VycywgYW55IGRhbWFnZQpAQCAtMjA5LDIyICsyMzIsMjIgQEAKIAogU3dpdGNoZXMgZm9yIHdpemFyZHM6CiAKLQktYmFzZWxpbmUJRm9yY2UgYmFzZWxpbmUtY29tcGF0aWJsZSBxdWFudGl6YXRpb24gdGFibGVzIHRvIGJlCi0JCQlnZW5lcmF0ZWQuICBUaGlzIGNsYW1wcyBxdWFudGl6YXRpb24gdmFsdWVzIHRvIDggYml0cwotCQkJZXZlbiBhdCBsb3cgcXVhbGl0eSBzZXR0aW5ncy4gIChUaGlzIHN3aXRjaCBpcyBwb29ybHkKLQkJCW5hbWVkLCBzaW5jZSBpdCBkb2VzIG5vdCBlbnN1cmUgdGhhdCB0aGUgb3V0cHV0IGlzCi0JCQlhY3R1YWxseSBiYXNlbGluZSBKUEVHLiAgRm9yIGV4YW1wbGUsIHlvdSBjYW4gdXNlCi0JCQktYmFzZWxpbmUgYW5kIC1wcm9ncmVzc2l2ZSB0b2dldGhlci4pCisgICAgICAgIC1iYXNlbGluZSAgICAgICBGb3JjZSBiYXNlbGluZS1jb21wYXRpYmxlIHF1YW50aXphdGlvbiB0YWJsZXMgdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlZC4gIFRoaXMgY2xhbXBzIHF1YW50aXphdGlvbiB2YWx1ZXMgdG8gOCBiaXRzCisgICAgICAgICAgICAgICAgICAgICAgICBldmVuIGF0IGxvdyBxdWFsaXR5IHNldHRpbmdzLiAgKFRoaXMgc3dpdGNoIGlzIHBvb3JseQorICAgICAgICAgICAgICAgICAgICAgICAgbmFtZWQsIHNpbmNlIGl0IGRvZXMgbm90IGVuc3VyZSB0aGF0IHRoZSBvdXRwdXQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbGx5IGJhc2VsaW5lIEpQRUcuICBGb3IgZXhhbXBsZSwgeW91IGNhbiB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIC1iYXNlbGluZSBhbmQgLXByb2dyZXNzaXZlIHRvZ2V0aGVyLikKIAotCS1xdGFibGVzIGZpbGUJVXNlIHRoZSBxdWFudGl6YXRpb24gdGFibGVzIGdpdmVuIGluIHRoZSBzcGVjaWZpZWQKLQkJCXRleHQgZmlsZS4KKyAgICAgICAgLXF0YWJsZXMgZmlsZSAgIFVzZSB0aGUgcXVhbnRpemF0aW9uIHRhYmxlcyBnaXZlbiBpbiB0aGUgc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0IGZpbGUuCiAKLQktcXNsb3RzIE5bLC4uLl0gU2VsZWN0IHdoaWNoIHF1YW50aXphdGlvbiB0YWJsZSB0byB1c2UgZm9yIGVhY2ggY29sb3IKLQkJCWNvbXBvbmVudC4KKyAgICAgICAgLXFzbG90cyBOWywuLi5dIFNlbGVjdCB3aGljaCBxdWFudGl6YXRpb24gdGFibGUgdG8gdXNlIGZvciBlYWNoIGNvbG9yCisgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuCiAKLQktc2FtcGxlIEh4VlssLi4uXSAgU2V0IEpQRUcgc2FtcGxpbmcgZmFjdG9ycyBmb3IgZWFjaCBjb2xvciBjb21wb25lbnQuCisgICAgICAgIC1zYW1wbGUgSHhWWywuLi5dICBTZXQgSlBFRyBzYW1wbGluZyBmYWN0b3JzIGZvciBlYWNoIGNvbG9yIGNvbXBvbmVudC4KIAotCS1zY2FucyBmaWxlCVVzZSB0aGUgc2NhbiBzY3JpcHQgZ2l2ZW4gaW4gdGhlIHNwZWNpZmllZCB0ZXh0IGZpbGUuCisgICAgICAgIC1zY2FucyBmaWxlICAgICBVc2UgdGhlIHNjYW4gc2NyaXB0IGdpdmVuIGluIHRoZSBzcGVjaWZpZWQgdGV4dCBmaWxlLgogCiBUaGUgIndpemFyZCIgc3dpdGNoZXMgYXJlIGludGVuZGVkIGZvciBleHBlcmltZW50YXRpb24gd2l0aCBKUEVHLiAgSWYgeW91CiBkb24ndCBrbm93IHdoYXQgeW91IGFyZSBkb2luZywgRE9OJ1QgVVNFIFRIRU0uICBUaGVzZSBzd2l0Y2hlcyBhcmUgZG9jdW1lbnRlZApAQCAtMjM1LDEwNSArMjU4LDEyNiBAQAogCiBUaGUgYmFzaWMgY29tbWFuZCBsaW5lIHN3aXRjaGVzIGZvciBkanBlZyBhcmU6CiAKLQktY29sb3JzIE4JUmVkdWNlIGltYWdlIHRvIGF0IG1vc3QgTiBjb2xvcnMuICBUaGlzIHJlZHVjZXMgdGhlCi0Jb3IgLXF1YW50aXplIE4JbnVtYmVyIG9mIGNvbG9ycyB1c2VkIGluIHRoZSBvdXRwdXQgaW1hZ2UsIHNvIHRoYXQgaXQKLQkJCWNhbiBiZSBkaXNwbGF5ZWQgb24gYSBjb2xvcm1hcHBlZCBkaXNwbGF5IG9yIHN0b3JlZCBpbgotCQkJYSBjb2xvcm1hcHBlZCBmaWxlIGZvcm1hdC4gIEZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZQotCQkJYW4gOC1iaXQgZGlzcGxheSwgeW91J2QgbmVlZCB0byByZWR1Y2UgdG8gMjU2IG9yIGZld2VyCi0JCQljb2xvcnMuICAoLWNvbG9ycyBpcyB0aGUgcmVjb21tZW5kZWQgbmFtZSwgLXF1YW50aXplCi0JCQlpcyBwcm92aWRlZCBvbmx5IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4pCisgICAgICAgIC1jb2xvcnMgTiAgICAgICBSZWR1Y2UgaW1hZ2UgdG8gYXQgbW9zdCBOIGNvbG9ycy4gIFRoaXMgcmVkdWNlcyB0aGUKKyAgICAgICAgb3IgLXF1YW50aXplIE4gIG51bWJlciBvZiBjb2xvcnMgdXNlZCBpbiB0aGUgb3V0cHV0IGltYWdlLCBzbyB0aGF0IGl0CisgICAgICAgICAgICAgICAgICAgICAgICBjYW4gYmUgZGlzcGxheWVkIG9uIGEgY29sb3JtYXBwZWQgZGlzcGxheSBvciBzdG9yZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGEgY29sb3JtYXBwZWQgZmlsZSBmb3JtYXQuICBGb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuIDgtYml0IGRpc3BsYXksIHlvdSdkIG5lZWQgdG8gcmVkdWNlIHRvIDI1NiBvciBmZXdlcgorICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JzLiAgKC1jb2xvcnMgaXMgdGhlIHJlY29tbWVuZGVkIG5hbWUsIC1xdWFudGl6ZQorICAgICAgICAgICAgICAgICAgICAgICAgaXMgcHJvdmlkZWQgb25seSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuKQogCi0JLWZhc3QJCVNlbGVjdCByZWNvbW1lbmRlZCBwcm9jZXNzaW5nIG9wdGlvbnMgZm9yIGZhc3QsIGxvdwotCQkJcXVhbGl0eSBvdXRwdXQuICAoVGhlIGRlZmF1bHQgb3B0aW9ucyBhcmUgY2hvc2VuIGZvcgotCQkJaGlnaGVzdCBxdWFsaXR5IG91dHB1dC4pICBDdXJyZW50bHksIHRoaXMgaXMgZXF1aXZhbGVudAotCQkJdG8gIi1kY3QgZmFzdCAtbm9zbW9vdGggLW9uZXBhc3MgLWRpdGhlciBvcmRlcmVkIi4KKyAgICAgICAgLWZhc3QgICAgICAgICAgIFNlbGVjdCByZWNvbW1lbmRlZCBwcm9jZXNzaW5nIG9wdGlvbnMgZm9yIGZhc3QsIGxvdworICAgICAgICAgICAgICAgICAgICAgICAgcXVhbGl0eSBvdXRwdXQuICAoVGhlIGRlZmF1bHQgb3B0aW9ucyBhcmUgY2hvc2VuIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGVzdCBxdWFsaXR5IG91dHB1dC4pICBDdXJyZW50bHksIHRoaXMgaXMgZXF1aXZhbGVudAorICAgICAgICAgICAgICAgICAgICAgICAgdG8gIi1kY3QgZmFzdCAtbm9zbW9vdGggLW9uZXBhc3MgLWRpdGhlciBvcmRlcmVkIi4KIAotCS1ncmF5c2NhbGUJRm9yY2UgZ3JheS1zY2FsZSBvdXRwdXQgZXZlbiBpZiBKUEVHIGZpbGUgaXMgY29sb3IuCi0JCQlVc2VmdWwgZm9yIHZpZXdpbmcgb24gbW9ub2Nocm9tZSBkaXNwbGF5czsgYWxzbywKLQkJCWRqcGVnIHJ1bnMgbm90aWNlYWJseSBmYXN0ZXIgaW4gdGhpcyBtb2RlLgorICAgICAgICAtZ3JheXNjYWxlICAgICAgRm9yY2UgZ3JheXNjYWxlIG91dHB1dCBldmVuIGlmIEpQRUcgZmlsZSBpcyBjb2xvci4KKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZWZ1bCBmb3Igdmlld2luZyBvbiBtb25vY2hyb21lIGRpc3BsYXlzOyBhbHNvLAorICAgICAgICAgICAgICAgICAgICAgICAgZGpwZWcgcnVucyBub3RpY2VhYmx5IGZhc3RlciBpbiB0aGlzIG1vZGUuCiAKLQktc2NhbGUgTS9OCVNjYWxlIHRoZSBvdXRwdXQgaW1hZ2UgYnkgYSBmYWN0b3IgTS9OLiAgQ3VycmVudGx5Ci0JCQl0aGUgc2NhbGUgZmFjdG9yIG11c3QgYmUgMS8xLCAxLzIsIDEvNCwgb3IgMS84LgotCQkJU2NhbGluZyBpcyBoYW5keSBpZiB0aGUgaW1hZ2UgaXMgbGFyZ2VyIHRoYW4geW91cgotCQkJc2NyZWVuOyBhbHNvLCBkanBlZyBydW5zIG11Y2ggZmFzdGVyIHdoZW4gc2NhbGluZwotCQkJZG93biB0aGUgb3V0cHV0LgorICAgICAgICAtc2NhbGUgTS9OICAgICAgU2NhbGUgdGhlIG91dHB1dCBpbWFnZSBieSBhIGZhY3RvciBNL04uICBDdXJyZW50bHkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzY2FsZSBmYWN0b3IgbXVzdCBiZSBNLzgsIHdoZXJlIE0gaXMgYW4gaW50ZWdlcgorICAgICAgICAgICAgICAgICAgICAgICAgYmV0d2VlbiAxIGFuZCAxNiBpbmNsdXNpdmUsIG9yIGFueSByZWR1Y2VkIGZyYWN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICB0aGVyZW9mIChzdWNoIGFzIDEvMiwgMy80LCBldGMuICBTY2FsaW5nIGlzIGhhbmR5IGlmCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgaW1hZ2UgaXMgbGFyZ2VyIHRoYW4geW91ciBzY3JlZW47IGFsc28sIGRqcGVnIHJ1bnMKKyAgICAgICAgICAgICAgICAgICAgICAgIG11Y2ggZmFzdGVyIHdoZW4gc2NhbGluZyBkb3duIHRoZSBvdXRwdXQuCiAKLQktYm1wCQlTZWxlY3QgQk1QIG91dHB1dCBmb3JtYXQgKFdpbmRvd3MgZmxhdm9yKS4gIDgtYml0Ci0JCQljb2xvcm1hcHBlZCBmb3JtYXQgaXMgZW1pdHRlZCBpZiAtY29sb3JzIG9yIC1ncmF5c2NhbGUKLQkJCWlzIHNwZWNpZmllZCwgb3IgaWYgdGhlIEpQRUcgZmlsZSBpcyBncmF5LXNjYWxlOwotCQkJb3RoZXJ3aXNlLCAyNC1iaXQgZnVsbC1jb2xvciBmb3JtYXQgaXMgZW1pdHRlZC4KKyAgICAgICAgLWJtcCAgICAgICAgICAgIFNlbGVjdCBCTVAgb3V0cHV0IGZvcm1hdCAoV2luZG93cyBmbGF2b3IpLiAgOC1iaXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9ybWFwcGVkIGZvcm1hdCBpcyBlbWl0dGVkIGlmIC1jb2xvcnMgb3IgLWdyYXlzY2FsZQorICAgICAgICAgICAgICAgICAgICAgICAgaXMgc3BlY2lmaWVkLCBvciBpZiB0aGUgSlBFRyBmaWxlIGlzIGdyYXlzY2FsZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyd2lzZSwgMjQtYml0IGZ1bGwtY29sb3IgZm9ybWF0IGlzIGVtaXR0ZWQuCiAKLQktZ2lmCQlTZWxlY3QgR0lGIG91dHB1dCBmb3JtYXQuICBTaW5jZSBHSUYgZG9lcyBub3Qgc3VwcG9ydAotCQkJbW9yZSB0aGFuIDI1NiBjb2xvcnMsIC1jb2xvcnMgMjU2IGlzIGFzc3VtZWQgKHVubGVzcwotCQkJeW91IHNwZWNpZnkgYSBzbWFsbGVyIG51bWJlciBvZiBjb2xvcnMpLiAgSWYgeW91Ci0JCQlzcGVjaWZ5IC1mYXN0LCB0aGUgZGVmYXVsdCBudW1iZXIgb2YgY29sb3JzIGlzIDIxNi4KKyAgICAgICAgLWdpZiAgICAgICAgICAgIFNlbGVjdCBHSUYgb3V0cHV0IGZvcm1hdC4gIFNpbmNlIEdJRiBkb2VzIG5vdCBzdXBwb3J0CisgICAgICAgICAgICAgICAgICAgICAgICBtb3JlIHRoYW4gMjU2IGNvbG9ycywgLWNvbG9ycyAyNTYgaXMgYXNzdW1lZCAodW5sZXNzCisgICAgICAgICAgICAgICAgICAgICAgICB5b3Ugc3BlY2lmeSBhIHNtYWxsZXIgbnVtYmVyIG9mIGNvbG9ycykuICBJZiB5b3UKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZnkgLWZhc3QsIHRoZSBkZWZhdWx0IG51bWJlciBvZiBjb2xvcnMgaXMgMjE2LgogCi0JLW9zMgkJU2VsZWN0IEJNUCBvdXRwdXQgZm9ybWF0IChPUy8yIDEueCBmbGF2b3IpLiAgOC1iaXQKLQkJCWNvbG9ybWFwcGVkIGZvcm1hdCBpcyBlbWl0dGVkIGlmIC1jb2xvcnMgb3IgLWdyYXlzY2FsZQotCQkJaXMgc3BlY2lmaWVkLCBvciBpZiB0aGUgSlBFRyBmaWxlIGlzIGdyYXktc2NhbGU7Ci0JCQlvdGhlcndpc2UsIDI0LWJpdCBmdWxsLWNvbG9yIGZvcm1hdCBpcyBlbWl0dGVkLgorICAgICAgICAtb3MyICAgICAgICAgICAgU2VsZWN0IEJNUCBvdXRwdXQgZm9ybWF0IChPUy8yIDEueCBmbGF2b3IpLiAgOC1iaXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9ybWFwcGVkIGZvcm1hdCBpcyBlbWl0dGVkIGlmIC1jb2xvcnMgb3IgLWdyYXlzY2FsZQorICAgICAgICAgICAgICAgICAgICAgICAgaXMgc3BlY2lmaWVkLCBvciBpZiB0aGUgSlBFRyBmaWxlIGlzIGdyYXlzY2FsZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyd2lzZSwgMjQtYml0IGZ1bGwtY29sb3IgZm9ybWF0IGlzIGVtaXR0ZWQuCiAKLQktcG5tCQlTZWxlY3QgUEJNUExVUyAoUFBNL1BHTSkgb3V0cHV0IGZvcm1hdCAodGhpcyBpcyB0aGUKLQkJCWRlZmF1bHQgZm9ybWF0KS4gIFBHTSBpcyBlbWl0dGVkIGlmIHRoZSBKUEVHIGZpbGUgaXMKLQkJCWdyYXktc2NhbGUgb3IgaWYgLWdyYXlzY2FsZSBpcyBzcGVjaWZpZWQ7IG90aGVyd2lzZQotCQkJUFBNIGlzIGVtaXR0ZWQuCisgICAgICAgIC1wbm0gICAgICAgICAgICBTZWxlY3QgUEJNUExVUyAoUFBNL1BHTSkgb3V0cHV0IGZvcm1hdCAodGhpcyBpcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgZm9ybWF0KS4gIFBHTSBpcyBlbWl0dGVkIGlmIHRoZSBKUEVHIGZpbGUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyYXlzY2FsZSBvciBpZiAtZ3JheXNjYWxlIGlzIHNwZWNpZmllZDsgb3RoZXJ3aXNlCisgICAgICAgICAgICAgICAgICAgICAgICBQUE0gaXMgZW1pdHRlZC4KIAotCS1ybGUJCVNlbGVjdCBSTEUgb3V0cHV0IGZvcm1hdC4gIChSZXF1aXJlcyBVUlQgbGlicmFyeS4pCisgICAgICAgIC1ybGUgICAgICAgICAgICBTZWxlY3QgUkxFIG91dHB1dCBmb3JtYXQuICAoUmVxdWlyZXMgVVJUIGxpYnJhcnkuKQogCi0JLXRhcmdhCQlTZWxlY3QgVGFyZ2Egb3V0cHV0IGZvcm1hdC4gIEdyYXktc2NhbGUgZm9ybWF0IGlzCi0JCQllbWl0dGVkIGlmIHRoZSBKUEVHIGZpbGUgaXMgZ3JheS1zY2FsZSBvciBpZgotCQkJLWdyYXlzY2FsZSBpcyBzcGVjaWZpZWQ7IG90aGVyd2lzZSwgY29sb3JtYXBwZWQgZm9ybWF0Ci0JCQlpcyBlbWl0dGVkIGlmIC1jb2xvcnMgaXMgc3BlY2lmaWVkOyBvdGhlcndpc2UsIDI0LWJpdAotCQkJZnVsbC1jb2xvciBmb3JtYXQgaXMgZW1pdHRlZC4KKyAgICAgICAgLXRhcmdhICAgICAgICAgIFNlbGVjdCBUYXJnYSBvdXRwdXQgZm9ybWF0LiAgR3JheXNjYWxlIGZvcm1hdCBpcworICAgICAgICAgICAgICAgICAgICAgICAgZW1pdHRlZCBpZiB0aGUgSlBFRyBmaWxlIGlzIGdyYXlzY2FsZSBvciBpZgorICAgICAgICAgICAgICAgICAgICAgICAgLWdyYXlzY2FsZSBpcyBzcGVjaWZpZWQ7IG90aGVyd2lzZSwgY29sb3JtYXBwZWQgZm9ybWF0CisgICAgICAgICAgICAgICAgICAgICAgICBpcyBlbWl0dGVkIGlmIC1jb2xvcnMgaXMgc3BlY2lmaWVkOyBvdGhlcndpc2UsIDI0LWJpdAorICAgICAgICAgICAgICAgICAgICAgICAgZnVsbC1jb2xvciBmb3JtYXQgaXMgZW1pdHRlZC4KIAogU3dpdGNoZXMgZm9yIGFkdmFuY2VkIHVzZXJzOgogCi0JLWRjdCBpbnQJVXNlIGludGVnZXIgRENUIG1ldGhvZCAoZGVmYXVsdCkuCi0JLWRjdCBmYXN0CVVzZSBmYXN0IGludGVnZXIgRENUIChsZXNzIGFjY3VyYXRlKS4KLQktZGN0IGZsb2F0CVVzZSBmbG9hdGluZy1wb2ludCBEQ1QgbWV0aG9kLgotCQkJVGhlIGZsb2F0IG1ldGhvZCBpcyB2ZXJ5IHNsaWdodGx5IG1vcmUgYWNjdXJhdGUgdGhhbgotCQkJdGhlIGludCBtZXRob2QsIGJ1dCBpcyBtdWNoIHNsb3dlciB1bmxlc3MgeW91ciBtYWNoaW5lCi0JCQloYXMgdmVyeSBmYXN0IGZsb2F0aW5nLXBvaW50IGhhcmR3YXJlLiAgQWxzbyBub3RlIHRoYXQKLQkJCXJlc3VsdHMgb2YgdGhlIGZsb2F0aW5nLXBvaW50IG1ldGhvZCBtYXkgdmFyeSBzbGlnaHRseQotCQkJYWNyb3NzIG1hY2hpbmVzLCB3aGlsZSB0aGUgaW50ZWdlciBtZXRob2RzIHNob3VsZCBnaXZlCi0JCQl0aGUgc2FtZSByZXN1bHRzIGV2ZXJ5d2hlcmUuICBUaGUgZmFzdCBpbnRlZ2VyIG1ldGhvZAotCQkJaXMgbXVjaCBsZXNzIGFjY3VyYXRlIHRoYW4gdGhlIG90aGVyIHR3by4KKyAgICAgICAgLWRjdCBpbnQgICAgICAgIFVzZSBpbnRlZ2VyIERDVCBtZXRob2QgKGRlZmF1bHQpLgorICAgICAgICAtZGN0IGZhc3QgICAgICAgVXNlIGZhc3QgaW50ZWdlciBEQ1QgKGxlc3MgYWNjdXJhdGUpLgorICAgICAgICAgICAgICAgICAgICAgICAgSW4gbGlianBlZy10dXJibywgdGhlIGZhc3QgbWV0aG9kIGlzIGdlbmVyYWxseSBhYm91dAorICAgICAgICAgICAgICAgICAgICAgICAgNS0xNSUgZmFzdGVyIHRoYW4gdGhlIGludCBtZXRob2Qgd2hlbiB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHg4Ni94ODYtNjQgU0lNRCBleHRlbnNpb25zIChyZXN1bHRzIG1heSB2YXJ5IHdpdGggb3RoZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIFNJTUQgaW1wbGVtZW50YXRpb25zLCBvciB3aGVuIHVzaW5nIGxpYmpwZWctdHVyYm8KKyAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhvdXQgU0lNRCBleHRlbnNpb25zLikgIElmIHRoZSBKUEVHIGltYWdlIHdhcworICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3NlZCB1c2luZyBhIHF1YWxpdHkgbGV2ZWwgb2YgODUgb3IgYmVsb3csIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZXJlIHNob3VsZCBiZSBsaXR0bGUgb3Igbm8gcGVyY2VwdGlibGUgZGlmZmVyZW5jZQorICAgICAgICAgICAgICAgICAgICAgICAgYmV0d2VlbiB0aGUgdHdvIGFsZ29yaXRobXMuICBXaGVuIGRlY29tcHJlc3NpbmcgaW1hZ2VzCisgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHdlcmUgY29tcHJlc3NlZCB1c2luZyBxdWFsaXR5IGxldmVscyBhYm92ZSA4NSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhvd2V2ZXIsIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGZhc3QgYW5kIGludAorICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kcyBiZWNvbWVzIG1vcmUgcHJvbm91bmNlZC4gIFdpdGggaW1hZ2VzCisgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2VkIHVzaW5nIHF1YWxpdHk9OTcsIGZvciBpbnN0YW5jZSwgdGhlIGZhc3QKKyAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCBpbmN1cnMgZ2VuZXJhbGx5IGFib3V0IGEgNC02IGRCIGxvc3MgKGluIFBTTlIpCisgICAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZSB0byB0aGUgaW50IG1ldGhvZCwgYnV0IHRoaXMgY2FuIGJlIGxhcmdlciBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvbWUgaW1hZ2VzLiAgSWYgeW91IGNhbiBhdm9pZCBpdCwgZG8gbm90IHVzZSB0aGUgZmFzdAorICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kIHdoZW4gZGVjb21wcmVzc2luZyBpbWFnZXMgdGhhdCB3ZXJlIGNvbXByZXNzZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIHF1YWxpdHkgbGV2ZWxzIGFib3ZlIDk3LiAgVGhlIGFsZ29yaXRobSBvZnRlbgorICAgICAgICAgICAgICAgICAgICAgICAgZGVnZW5lcmF0ZXMgZm9yIHN1Y2ggaW1hZ2VzIGFuZCBjYW4gYWN0dWFsbHkgcHJvZHVjZQorICAgICAgICAgICAgICAgICAgICAgICAgYSBtb3JlIGxvc3N5IG91dHB1dCBpbWFnZSB0aGFuIGlmIHRoZSBKUEVHIGltYWdlIGhhZAorICAgICAgICAgICAgICAgICAgICAgICAgYmVlbiBjb21wcmVzc2VkIHVzaW5nIGxvd2VyIHF1YWxpdHkgbGV2ZWxzLgorICAgICAgICAtZGN0IGZsb2F0ICAgICAgVXNlIGZsb2F0aW5nLXBvaW50IERDVCBtZXRob2QuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZmxvYXQgbWV0aG9kIGlzIG1haW5seSBhIGxlZ2FjeSBmZWF0dXJlLiAgSXQgZG9lcworwqAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBwcm9kdWNlIHNpZ25pZmljYW50bHkgbW9yZSBhY2N1cmF0ZSByZXN1bHRzIHRoYW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBpbnQgbWV0aG9kLCBhbmQgaXQgaXMgbXVjaCBzbG93ZXIuICBUaGUgZmxvYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCBtYXkgYWxzbyBnaXZlIGRpZmZlcmVudCByZXN1bHRzIG9uIGRpZmZlcmVudAorICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZXMgZHVlIHRvIHZhcnlpbmcgcm91bmRvZmYgYmVoYXZpb3IsIHdoZXJlYXMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBpbnRlZ2VyIG1ldGhvZHMgc2hvdWxkIGdpdmUgdGhlIHNhbWUgcmVzdWx0cyBvbiBhbGwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVzLgogCi0JLWRpdGhlciBmcwlVc2UgRmxveWQtU3RlaW5iZXJnIGRpdGhlcmluZyBpbiBjb2xvciBxdWFudGl6YXRpb24uCi0JLWRpdGhlciBvcmRlcmVkCVVzZSBvcmRlcmVkIGRpdGhlcmluZyBpbiBjb2xvciBxdWFudGl6YXRpb24uCi0JLWRpdGhlciBub25lCURvIG5vdCB1c2UgZGl0aGVyaW5nIGluIGNvbG9yIHF1YW50aXphdGlvbi4KLQkJCUJ5IGRlZmF1bHQsIEZsb3lkLVN0ZWluYmVyZyBkaXRoZXJpbmcgaXMgYXBwbGllZCB3aGVuCi0JCQlxdWFudGl6aW5nIGNvbG9yczsgdGhpcyBpcyBzbG93IGJ1dCB1c3VhbGx5IHByb2R1Y2VzCi0JCQl0aGUgYmVzdCByZXN1bHRzLiAgT3JkZXJlZCBkaXRoZXIgaXMgYSBjb21wcm9taXNlCi0JCQliZXR3ZWVuIHNwZWVkIGFuZCBxdWFsaXR5OyBubyBkaXRoZXJpbmcgaXMgZmFzdCBidXQKLQkJCXVzdWFsbHkgbG9va3MgYXdmdWwuICBOb3RlIHRoYXQgdGhlc2Ugc3dpdGNoZXMgaGF2ZQotCQkJbm8gZWZmZWN0IHVubGVzcyBjb2xvciBxdWFudGl6YXRpb24gaXMgYmVpbmcgZG9uZS4KLQkJCU9yZGVyZWQgZGl0aGVyIGlzIG9ubHkgYXZhaWxhYmxlIGluIC1vbmVwYXNzIG1vZGUuCisgICAgICAgIC1kaXRoZXIgZnMgICAgICBVc2UgRmxveWQtU3RlaW5iZXJnIGRpdGhlcmluZyBpbiBjb2xvciBxdWFudGl6YXRpb24uCisgICAgICAgIC1kaXRoZXIgb3JkZXJlZCBVc2Ugb3JkZXJlZCBkaXRoZXJpbmcgaW4gY29sb3IgcXVhbnRpemF0aW9uLgorICAgICAgICAtZGl0aGVyIG5vbmUgICAgRG8gbm90IHVzZSBkaXRoZXJpbmcgaW4gY29sb3IgcXVhbnRpemF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgRmxveWQtU3RlaW5iZXJnIGRpdGhlcmluZyBpcyBhcHBsaWVkIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHF1YW50aXppbmcgY29sb3JzOyB0aGlzIGlzIHNsb3cgYnV0IHVzdWFsbHkgcHJvZHVjZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBiZXN0IHJlc3VsdHMuICBPcmRlcmVkIGRpdGhlciBpcyBhIGNvbXByb21pc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJldHdlZW4gc3BlZWQgYW5kIHF1YWxpdHk7IG5vIGRpdGhlcmluZyBpcyBmYXN0IGJ1dAorICAgICAgICAgICAgICAgICAgICAgICAgdXN1YWxseSBsb29rcyBhd2Z1bC4gIE5vdGUgdGhhdCB0aGVzZSBzd2l0Y2hlcyBoYXZlCisgICAgICAgICAgICAgICAgICAgICAgICBubyBlZmZlY3QgdW5sZXNzIGNvbG9yIHF1YW50aXphdGlvbiBpcyBiZWluZyBkb25lLgorICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXJlZCBkaXRoZXIgaXMgb25seSBhdmFpbGFibGUgaW4gLW9uZXBhc3MgbW9kZS4KIAotCS1tYXAgRklMRQlRdWFudGl6ZSB0byB0aGUgY29sb3JzIHVzZWQgaW4gdGhlIHNwZWNpZmllZCBpbWFnZQotCQkJZmlsZS4gIFRoaXMgaXMgdXNlZnVsIGZvciBwcm9kdWNpbmcgbXVsdGlwbGUgZmlsZXMKLQkJCXdpdGggaWRlbnRpY2FsIGNvbG9yIG1hcHMsIG9yIGZvciBmb3JjaW5nIGEgcHJlZGVmaW5lZAotCQkJc2V0IG9mIGNvbG9ycyB0byBiZSB1c2VkLiAgVGhlIEZJTEUgbXVzdCBiZSBhIEdJRgotCQkJb3IgUFBNIGZpbGUuICBUaGlzIG9wdGlvbiBvdmVycmlkZXMgLWNvbG9ycyBhbmQKLQkJCS1vbmVwYXNzLgorICAgICAgICAtbWFwIEZJTEUgICAgICAgUXVhbnRpemUgdG8gdGhlIGNvbG9ycyB1c2VkIGluIHRoZSBzcGVjaWZpZWQgaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUuICBUaGlzIGlzIHVzZWZ1bCBmb3IgcHJvZHVjaW5nIG11bHRpcGxlIGZpbGVzCisgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGlkZW50aWNhbCBjb2xvciBtYXBzLCBvciBmb3IgZm9yY2luZyBhIHByZWRlZmluZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldCBvZiBjb2xvcnMgdG8gYmUgdXNlZC4gIFRoZSBGSUxFIG11c3QgYmUgYSBHSUYKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yIFBQTSBmaWxlLiAgVGhpcyBvcHRpb24gb3ZlcnJpZGVzIC1jb2xvcnMgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAtb25lcGFzcy4KIAotCS1ub3Ntb290aAlVc2UgYSBmYXN0ZXIsIGxvd2VyLXF1YWxpdHkgdXBzYW1wbGluZyByb3V0aW5lLgorICAgICAgICAtbm9zbW9vdGggICAgICAgVXNlIGEgZmFzdGVyLCBsb3dlci1xdWFsaXR5IHVwc2FtcGxpbmcgcm91dGluZS4KIAotCS1vbmVwYXNzCVVzZSBvbmUtcGFzcyBpbnN0ZWFkIG9mIHR3by1wYXNzIGNvbG9yIHF1YW50aXphdGlvbi4KLQkJCVRoZSBvbmUtcGFzcyBtZXRob2QgaXMgZmFzdGVyIGFuZCBuZWVkcyBsZXNzIG1lbW9yeSwKLQkJCWJ1dCBpdCBwcm9kdWNlcyBhIGxvd2VyLXF1YWxpdHkgaW1hZ2UuICAtb25lcGFzcyBpcwotCQkJaWdub3JlZCB1bmxlc3MgeW91IGFsc28gc2F5IC1jb2xvcnMgTi4gIEFsc28sCi0JCQl0aGUgb25lLXBhc3MgbWV0aG9kIGlzIGFsd2F5cyB1c2VkIGZvciBncmF5LXNjYWxlCi0JCQlvdXRwdXQgKHRoZSB0d28tcGFzcyBtZXRob2QgaXMgbm8gaW1wcm92ZW1lbnQgdGhlbikuCisgICAgICAgIC1vbmVwYXNzICAgICAgICBVc2Ugb25lLXBhc3MgaW5zdGVhZCBvZiB0d28tcGFzcyBjb2xvciBxdWFudGl6YXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgb25lLXBhc3MgbWV0aG9kIGlzIGZhc3RlciBhbmQgbmVlZHMgbGVzcyBtZW1vcnksCisgICAgICAgICAgICAgICAgICAgICAgICBidXQgaXQgcHJvZHVjZXMgYSBsb3dlci1xdWFsaXR5IGltYWdlLiAgLW9uZXBhc3MgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZWQgdW5sZXNzIHlvdSBhbHNvIHNheSAtY29sb3JzIE4uICBBbHNvLAorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG9uZS1wYXNzIG1ldGhvZCBpcyBhbHdheXMgdXNlZCBmb3IgZ3JheXNjYWxlCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgKHRoZSB0d28tcGFzcyBtZXRob2QgaXMgbm8gaW1wcm92ZW1lbnQgdGhlbikuCiAKLQktbWF4bWVtb3J5IE4JU2V0IGxpbWl0IGZvciBhbW91bnQgb2YgbWVtb3J5IHRvIHVzZSBpbiBwcm9jZXNzaW5nCi0JCQlsYXJnZSBpbWFnZXMuICBWYWx1ZSBpcyBpbiB0aG91c2FuZHMgb2YgYnl0ZXMsIG9yCi0JCQltaWxsaW9ucyBvZiBieXRlcyBpZiAiTSIgaXMgYXR0YWNoZWQgdG8gdGhlIG51bWJlci4KLQkJCUZvciBleGFtcGxlLCAtbWF4IDRtIHNlbGVjdHMgNDAwMDAwMCBieXRlcy4gIElmIG1vcmUKLQkJCXNwYWNlIGlzIG5lZWRlZCwgdGVtcG9yYXJ5IGZpbGVzIHdpbGwgYmUgdXNlZC4KKyAgICAgICAgLW1heG1lbW9yeSBOICAgIFNldCBsaW1pdCBmb3IgYW1vdW50IG9mIG1lbW9yeSB0byB1c2UgaW4gcHJvY2Vzc2luZworICAgICAgICAgICAgICAgICAgICAgICAgbGFyZ2UgaW1hZ2VzLiAgVmFsdWUgaXMgaW4gdGhvdXNhbmRzIG9mIGJ5dGVzLCBvcgorICAgICAgICAgICAgICAgICAgICAgICAgbWlsbGlvbnMgb2YgYnl0ZXMgaWYgIk0iIGlzIGF0dGFjaGVkIHRvIHRoZSBudW1iZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgLW1heCA0bSBzZWxlY3RzIDQwMDAwMDAgYnl0ZXMuICBJZiBtb3JlCisgICAgICAgICAgICAgICAgICAgICAgICBzcGFjZSBpcyBuZWVkZWQsIHRlbXBvcmFyeSBmaWxlcyB3aWxsIGJlIHVzZWQuCiAKLQktdmVyYm9zZQlFbmFibGUgZGVidWcgcHJpbnRvdXQuICBNb3JlIC12J3MgZ2l2ZSBtb3JlIHByaW50b3V0LgotCW9yICAtZGVidWcJQWxzbywgdmVyc2lvbiBpbmZvcm1hdGlvbiBpcyBwcmludGVkIGF0IHN0YXJ0dXAuCisgICAgICAgIC12ZXJib3NlICAgICAgICBFbmFibGUgZGVidWcgcHJpbnRvdXQuICBNb3JlIC12J3MgZ2l2ZSBtb3JlIHByaW50b3V0LgorICAgICAgICBvciAgLWRlYnVnICAgICAgQWxzbywgdmVyc2lvbiBpbmZvcm1hdGlvbiBpcyBwcmludGVkIGF0IHN0YXJ0dXAuCiAKIAogSElOVFMgRk9SIENKUEVHCkBAIC0zNzYsMTIgKzQyMCw2IEBACiBtdWNoIGxvd2VyIHF1YWxpdHkgdGhhbiB0aGUgZGVmYXVsdCBiZWhhdmlvci4gICItZGl0aGVyIG5vbmUiIG1heSBnaXZlCiBhY2NlcHRhYmxlIHJlc3VsdHMgaW4gdHdvLXBhc3MgbW9kZSwgYnV0IGlzIHNlbGRvbSB0b2xlcmFibGUgaW4gb25lLXBhc3MgbW9kZS4KIAotSWYgeW91IGFyZSBmb3J0dW5hdGUgZW5vdWdoIHRvIGhhdmUgdmVyeSBmYXN0IGZsb2F0aW5nIHBvaW50IGhhcmR3YXJlLAotIi1kY3QgZmxvYXQiIG1heSBiZSBldmVuIGZhc3RlciB0aGFuICItZGN0IGZhc3QiLiAgQnV0IG9uIG1vc3QgbWFjaGluZXMKLSItZGN0IGZsb2F0IiBpcyBzbG93ZXIgdGhhbiAiLWRjdCBpbnQiOyBpbiB0aGlzIGNhc2UgaXQgaXMgbm90IHdvcnRoIHVzaW5nLAotYmVjYXVzZSBpdHMgdGhlb3JldGljYWwgYWNjdXJhY3kgYWR2YW50YWdlIGlzIHRvbyBzbWFsbCB0byBiZSBzaWduaWZpY2FudAotaW4gcHJhY3RpY2UuCi0KIFR3by1wYXNzIGNvbG9yIHF1YW50aXphdGlvbiByZXF1aXJlcyBhIGdvb2QgZGVhbCBvZiBtZW1vcnk7IG9uIE1TLURPUyBtYWNoaW5lcwogaXQgbWF5IHJ1biBvdXQgb2YgbWVtb3J5IGV2ZW4gd2l0aCAtbWF4bWVtb3J5IDAuICBJbiB0aGF0IGNhc2UgeW91IGNhbiBzdGlsbAogZGVjb21wcmVzcywgd2l0aCBzb21lIGxvc3Mgb2YgaW1hZ2UgcXVhbGl0eSwgYnkgc3BlY2lmeWluZyAtb25lcGFzcyBmb3IKQEAgLTQ0MSwzMSArNDc5LDMxIEBACiAKIGpwZWd0cmFuIHVzZXMgYSBjb21tYW5kIGxpbmUgc3ludGF4IHNpbWlsYXIgdG8gY2pwZWcgb3IgZGpwZWcuCiBPbiBVbml4LWxpa2Ugc3lzdGVtcywgeW91IHNheToKLQlqcGVndHJhbiBbc3dpdGNoZXNdIFtpbnB1dGZpbGVdID5vdXRwdXRmaWxlCisgICAgICAgIGpwZWd0cmFuIFtzd2l0Y2hlc10gW2lucHV0ZmlsZV0gPm91dHB1dGZpbGUKIE9uIG1vc3Qgbm9uLVVuaXggc3lzdGVtcywgeW91IHNheToKLQlqcGVndHJhbiBbc3dpdGNoZXNdIGlucHV0ZmlsZSBvdXRwdXRmaWxlCisgICAgICAgIGpwZWd0cmFuIFtzd2l0Y2hlc10gaW5wdXRmaWxlIG91dHB1dGZpbGUKIHdoZXJlIGJvdGggdGhlIGlucHV0IGFuZCBvdXRwdXQgZmlsZXMgYXJlIEpQRUcgZmlsZXMuCiAKIFRvIHNwZWNpZnkgdGhlIGNvZGVkIEpQRUcgcmVwcmVzZW50YXRpb24gdXNlZCBpbiB0aGUgb3V0cHV0IGZpbGUsCiBqcGVndHJhbiBhY2NlcHRzIGEgc3Vic2V0IG9mIHRoZSBzd2l0Y2hlcyByZWNvZ25pemVkIGJ5IGNqcGVnOgotCS1vcHRpbWl6ZQlQZXJmb3JtIG9wdGltaXphdGlvbiBvZiBlbnRyb3B5IGVuY29kaW5nIHBhcmFtZXRlcnMuCi0JLXByb2dyZXNzaXZlCUNyZWF0ZSBwcm9ncmVzc2l2ZSBKUEVHIGZpbGUuCi0JLWFyaXRobWV0aWMJVXNlIGFyaXRobWV0aWMgY29kaW5nLgotCS1yZXN0YXJ0IE4JRW1pdCBhIEpQRUcgcmVzdGFydCBtYXJrZXIgZXZlcnkgTiBNQ1Ugcm93cywgb3IgZXZlcnkKLQkJCU4gTUNVIGJsb2NrcyBpZiAiQiIgaXMgYXR0YWNoZWQgdG8gdGhlIG51bWJlci4KLQktc2NhbnMgZmlsZQlVc2UgdGhlIHNjYW4gc2NyaXB0IGdpdmVuIGluIHRoZSBzcGVjaWZpZWQgdGV4dCBmaWxlLgorICAgICAgICAtb3B0aW1pemUgICAgICAgUGVyZm9ybSBvcHRpbWl6YXRpb24gb2YgZW50cm9weSBlbmNvZGluZyBwYXJhbWV0ZXJzLgorICAgICAgICAtcHJvZ3Jlc3NpdmUgICAgQ3JlYXRlIHByb2dyZXNzaXZlIEpQRUcgZmlsZS4KKyAgICAgICAgLWFyaXRobWV0aWMgICAgIFVzZSBhcml0aG1ldGljIGNvZGluZy4KKyAgICAgICAgLXJlc3RhcnQgTiAgICAgIEVtaXQgYSBKUEVHIHJlc3RhcnQgbWFya2VyIGV2ZXJ5IE4gTUNVIHJvd3MsIG9yIGV2ZXJ5CisgICAgICAgICAgICAgICAgICAgICAgICBOIE1DVSBibG9ja3MgaWYgIkIiIGlzIGF0dGFjaGVkIHRvIHRoZSBudW1iZXIuCisgICAgICAgIC1zY2FucyBmaWxlICAgICBVc2UgdGhlIHNjYW4gc2NyaXB0IGdpdmVuIGluIHRoZSBzcGVjaWZpZWQgdGV4dCBmaWxlLgogU2VlIHRoZSBwcmV2aW91cyBkaXNjdXNzaW9uIG9mIGNqcGVnIGZvciBtb3JlIGRldGFpbHMgYWJvdXQgdGhlc2Ugc3dpdGNoZXMuCiBJZiB5b3Ugc3BlY2lmeSBub25lIG9mIHRoZXNlIHN3aXRjaGVzLCB5b3UgZ2V0IGEgcGxhaW4gYmFzZWxpbmUtSlBFRyBvdXRwdXQKIGZpbGUuICBUaGUgcXVhbGl0eSBzZXR0aW5nIGFuZCBzbyBmb3J0aCBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgaW5wdXQgZmlsZS4KIAogVGhlIGltYWdlIGNhbiBiZSBsb3NzbGVzc2x5IHRyYW5zZm9ybWVkIGJ5IGdpdmluZyBvbmUgb2YgdGhlc2Ugc3dpdGNoZXM6Ci0JLWZsaXAgaG9yaXpvbnRhbAlNaXJyb3IgaW1hZ2UgaG9yaXpvbnRhbGx5IChsZWZ0LXJpZ2h0KS4KLQktZmxpcCB2ZXJ0aWNhbAkJTWlycm9yIGltYWdlIHZlcnRpY2FsbHkgKHRvcC1ib3R0b20pLgotCS1yb3RhdGUgOTAJCVJvdGF0ZSBpbWFnZSA5MCBkZWdyZWVzIGNsb2Nrd2lzZS4KLQktcm90YXRlIDE4MAkJUm90YXRlIGltYWdlIDE4MCBkZWdyZWVzLgotCS1yb3RhdGUgMjcwCQlSb3RhdGUgaW1hZ2UgMjcwIGRlZ3JlZXMgY2xvY2t3aXNlIChvciA5MCBjY3cpLgotCS10cmFuc3Bvc2UJCVRyYW5zcG9zZSBpbWFnZSAoYWNyb3NzIFVMLXRvLUxSIGF4aXMpLgotCS10cmFuc3ZlcnNlCQlUcmFuc3ZlcnNlIHRyYW5zcG9zZSAoYWNyb3NzIFVSLXRvLUxMIGF4aXMpLgorICAgICAgICAtZmxpcCBob3Jpem9udGFsICAgICAgICBNaXJyb3IgaW1hZ2UgaG9yaXpvbnRhbGx5IChsZWZ0LXJpZ2h0KS4KKyAgICAgICAgLWZsaXAgdmVydGljYWwgICAgICAgICAgTWlycm9yIGltYWdlIHZlcnRpY2FsbHkgKHRvcC1ib3R0b20pLgorICAgICAgICAtcm90YXRlIDkwICAgICAgICAgICAgICBSb3RhdGUgaW1hZ2UgOTAgZGVncmVlcyBjbG9ja3dpc2UuCisgICAgICAgIC1yb3RhdGUgMTgwICAgICAgICAgICAgIFJvdGF0ZSBpbWFnZSAxODAgZGVncmVlcy4KKyAgICAgICAgLXJvdGF0ZSAyNzAgICAgICAgICAgICAgUm90YXRlIGltYWdlIDI3MCBkZWdyZWVzIGNsb2Nrd2lzZSAob3IgOTAgY2N3KS4KKyAgICAgICAgLXRyYW5zcG9zZSAgICAgICAgICAgICAgVHJhbnNwb3NlIGltYWdlIChhY3Jvc3MgVUwtdG8tTFIgYXhpcykuCisgICAgICAgIC10cmFuc3ZlcnNlICAgICAgICAgICAgIFRyYW5zdmVyc2UgdHJhbnNwb3NlIChhY3Jvc3MgVVItdG8tTEwgYXhpcykuCiAKIFRoZSB0cmFuc3Bvc2UgdHJhbnNmb3JtYXRpb24gaGFzIG5vIHJlc3RyaWN0aW9ucyByZWdhcmRpbmcgaW1hZ2UgZGltZW5zaW9ucy4KIFRoZSBvdGhlciB0cmFuc2Zvcm1hdGlvbnMgb3BlcmF0ZSByYXRoZXIgb2RkbHkgaWYgdGhlIGltYWdlIGRpbWVuc2lvbnMgYXJlIG5vdApAQCAtNDg2LDcgKzUyNCw3IEBACiBGb3IgcHJhY3RpY2FsIHVzZSwgeW91IG1heSBwcmVmZXIgdG8gZGlzY2FyZCBhbnkgdW50cmFuc2Zvcm1hYmxlIGVkZ2UgcGl4ZWxzCiByYXRoZXIgdGhhbiBoYXZpbmcgYSBzdHJhbmdlLWxvb2tpbmcgc3RyaXAgYWxvbmcgdGhlIHJpZ2h0IGFuZC9vciBib3R0b20gZWRnZXMKIG9mIGEgdHJhbnNmb3JtZWQgaW1hZ2UuICBUbyBkbyB0aGlzLCBhZGQgdGhlIC10cmltIHN3aXRjaDoKLQktdHJpbQkJRHJvcCBub24tdHJhbnNmb3JtYWJsZSBlZGdlIGJsb2Nrcy4KKyAgICAgICAgLXRyaW0gICAgICAgICAgIERyb3Agbm9uLXRyYW5zZm9ybWFibGUgZWRnZSBibG9ja3MuCiBPYnZpb3VzbHksIGEgdHJhbnNmb3JtYXRpb24gd2l0aCAtdHJpbSBpcyBub3QgcmV2ZXJzaWJsZSwgc28gc3RyaWN0bHkgc3BlYWtpbmcKIGpwZWd0cmFuIHdpdGggdGhpcyBzd2l0Y2ggaXMgbm90IGxvc3NsZXNzLiAgQWxzbywgdGhlIGV4cGVjdGVkIG1hdGhlbWF0aWNhbAogZXF1aXZhbGVuY2VzIGJldHdlZW4gdGhlIHRyYW5zZm9ybWF0aW9ucyBubyBsb25nZXIgaG9sZC4gIEZvciBleGFtcGxlLApAQCAtNDk0LDggKzUzMiw4IEBACiAiLXJvdCAxODAgLXRyaW0iIHRyaW1zIGJvdGggZWRnZXMuCiAKIElmIHlvdSBhcmUgb25seSBpbnRlcmVzdGVkIGluIHBlcmZlY3QgdHJhbnNmb3JtYXRpb25zLCBhZGQgdGhlIC1wZXJmZWN0IHN3aXRjaDoKLQktcGVyZmVjdAlGYWlsIHdpdGggYW4gZXJyb3IgaWYgdGhlIHRyYW5zZm9ybWF0aW9uIGlzIG5vdAotCQkJcGVyZmVjdC4KKyAgICAgICAgLXBlcmZlY3QgICAgICAgIEZhaWwgd2l0aCBhbiBlcnJvciBpZiB0aGUgdHJhbnNmb3JtYXRpb24gaXMgbm90CisgICAgICAgICAgICAgICAgICAgICAgICBwZXJmZWN0LgogRm9yIGV4YW1wbGUsIHlvdSBtYXkgd2FudCB0byBkbwogICBqcGVndHJhbiAtcm90IDkwIC1wZXJmZWN0IGZvby5qcGcgfHwgZGpwZWcgZm9vLmpwZyB8IHBubWZsaXAgLXI5MCB8IGNqcGVnCiB0byBkbyBhIHBlcmZlY3Qgcm90YXRpb24sIGlmIGF2YWlsYWJsZSwgb3IgYW4gYXBwcm94aW1hdGVkIG9uZSBpZiBub3QuCkBAIC01MDgsMTIgKzU0NiwxMiBAQAogbmVhcmVzdCBpTUNVIGJvdW5kYXJ5ICh0aGUgbG93ZXIgcmlnaHQgY29ybmVyIGlzIHVuY2hhbmdlZC4pCiAKIFRoZSBpbWFnZSBjYW4gYmUgbG9zc2xlc3NseSBjcm9wcGVkIGJ5IGdpdmluZyB0aGUgc3dpdGNoOgotCS1jcm9wIFd4SCtYK1kJQ3JvcCB0byBhIHJlY3Rhbmd1bGFyIHJlZ2lvbiBvZiB3aWR0aCBXIGFuZCBoZWlnaHQgSCwKLQkJCXN0YXJ0aW5nIGF0IHBvaW50IFgsWS4KKyAgICAgICAgLWNyb3AgV3hIK1grWSAgIENyb3AgdG8gYSByZWN0YW5ndWxhciByZWdpb24gb2Ygd2lkdGggVyBhbmQgaGVpZ2h0IEgsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGFydGluZyBhdCBwb2ludCBYLFkuCiAKIE90aGVyIG5vdC1zdHJpY3RseS1sb3NzbGVzcyB0cmFuc2Zvcm1hdGlvbiBzd2l0Y2hlcyBhcmU6CiAKLQktZ3JheXNjYWxlCUZvcmNlIGdyYXlzY2FsZSBvdXRwdXQuCisgICAgICAgIC1ncmF5c2NhbGUgICAgICBGb3JjZSBncmF5c2NhbGUgb3V0cHV0LgogVGhpcyBvcHRpb24gZGlzY2FyZHMgdGhlIGNocm9taW5hbmNlIGNoYW5uZWxzIGlmIHRoZSBpbnB1dCBpbWFnZSBpcyBZQ2JDcgogKGllLCBhIHN0YW5kYXJkIGNvbG9yIEpQRUcpLCByZXN1bHRpbmcgaW4gYSBncmF5c2NhbGUgSlBFRyBmaWxlLiAgVGhlCiBsdW1pbmFuY2UgY2hhbm5lbCBpcyBwcmVzZXJ2ZWQgZXhhY3RseSwgc28gdGhpcyBpcyBhIGJldHRlciBtZXRob2Qgb2YgcmVkdWNpbmcKQEAgLTUyNSwyNCArNTYzLDI0IEBACiAKIGpwZWd0cmFuIGFsc28gcmVjb2duaXplcyB0aGVzZSBzd2l0Y2hlcyB0aGF0IGNvbnRyb2wgd2hhdCB0byBkbyB3aXRoICJleHRyYSIKIG1hcmtlcnMsIHN1Y2ggYXMgY29tbWVudCBibG9ja3M6Ci0JLWNvcHkgbm9uZQlDb3B5IG5vIGV4dHJhIG1hcmtlcnMgZnJvbSBzb3VyY2UgZmlsZS4gIFRoaXMgc2V0dGluZwotCQkJc3VwcHJlc3NlcyBhbGwgY29tbWVudHMgYW5kIG90aGVyIGV4Y2VzcyBiYWdnYWdlCi0JCQlwcmVzZW50IGluIHRoZSBzb3VyY2UgZmlsZS4KLQktY29weSBjb21tZW50cwlDb3B5IG9ubHkgY29tbWVudCBtYXJrZXJzLiAgVGhpcyBzZXR0aW5nIGNvcGllcwotCQkJY29tbWVudHMgZnJvbSB0aGUgc291cmNlIGZpbGUgYnV0IGRpc2NhcmRzCi0JCQlhbnkgb3RoZXIgZGF0YSB0aGF0IGlzIGluZXNzZW50aWFsIGZvciBpbWFnZSBkaXNwbGF5LgotCS1jb3B5IGFsbAlDb3B5IGFsbCBleHRyYSBtYXJrZXJzLiAgVGhpcyBzZXR0aW5nIHByZXNlcnZlcwotCQkJbWlzY2VsbGFuZW91cyBtYXJrZXJzIGZvdW5kIGluIHRoZSBzb3VyY2UgZmlsZSwgc3VjaAotCQkJYXMgSkZJRiB0aHVtYm5haWxzLCBFeGlmIGRhdGEsIGFuZCBQaG90b3Nob3Agc2V0dGluZ3MuCi0JCQlJbiBzb21lIGZpbGVzLCB0aGVzZSBleHRyYSBtYXJrZXJzIGNhbiBiZSBzaXphYmxlLgorICAgICAgICAtY29weSBub25lICAgICAgQ29weSBubyBleHRyYSBtYXJrZXJzIGZyb20gc291cmNlIGZpbGUuICBUaGlzIHNldHRpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1cHByZXNzZXMgYWxsIGNvbW1lbnRzIGFuZCBvdGhlciBleGNlc3MgYmFnZ2FnZQorICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VudCBpbiB0aGUgc291cmNlIGZpbGUuCisgICAgICAgIC1jb3B5IGNvbW1lbnRzICBDb3B5IG9ubHkgY29tbWVudCBtYXJrZXJzLiAgVGhpcyBzZXR0aW5nIGNvcGllcworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudHMgZnJvbSB0aGUgc291cmNlIGZpbGUgYnV0IGRpc2NhcmRzCisgICAgICAgICAgICAgICAgICAgICAgICBhbnkgb3RoZXIgZGF0YSB0aGF0IGlzIGluZXNzZW50aWFsIGZvciBpbWFnZSBkaXNwbGF5LgorICAgICAgICAtY29weSBhbGwgICAgICAgQ29weSBhbGwgZXh0cmEgbWFya2Vycy4gIFRoaXMgc2V0dGluZyBwcmVzZXJ2ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIG1pc2NlbGxhbmVvdXMgbWFya2VycyBmb3VuZCBpbiB0aGUgc291cmNlIGZpbGUsIHN1Y2gKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzIEpGSUYgdGh1bWJuYWlscywgRXhpZiBkYXRhLCBhbmQgUGhvdG9zaG9wIHNldHRpbmdzLgorICAgICAgICAgICAgICAgICAgICAgICAgSW4gc29tZSBmaWxlcywgdGhlc2UgZXh0cmEgbWFya2VycyBjYW4gYmUgc2l6YWJsZS4KIFRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIC1jb3B5IGNvbW1lbnRzLiAgKE5vdGU6IGluIElKRyByZWxlYXNlcyB2NiBhbmQgdjZhLAoganBlZ3RyYW4gYWx3YXlzIGRpZCB0aGUgZXF1aXZhbGVudCBvZiAtY29weSBub25lLikKIAogQWRkaXRpb25hbCBzd2l0Y2hlcyByZWNvZ25pemVkIGJ5IGpwZWd0cmFuIGFyZToKLQktb3V0ZmlsZSBmaWxlbmFtZQotCS1tYXhtZW1vcnkgTgotCS12ZXJib3NlCi0JLWRlYnVnCisgICAgICAgIC1vdXRmaWxlIGZpbGVuYW1lCisgICAgICAgIC1tYXhtZW1vcnkgTgorICAgICAgICAtdmVyYm9zZQorICAgICAgICAtZGVidWcKIFRoZXNlIHdvcmsgdGhlIHNhbWUgYXMgaW4gY2pwZWcgb3IgZGpwZWcuCiAKIApAQCAtNTYxLDcgKzU5OSw3IEBACiAKIHJkanBnY29tIHNlYXJjaGVzIGEgSlBFRyBmaWxlIGFuZCBwcmludHMgdGhlIGNvbnRlbnRzIG9mIGFueSBDT00gYmxvY2tzIG9uCiBzdGFuZGFyZCBvdXRwdXQuICBUaGUgY29tbWFuZCBsaW5lIHN5bnRheCBpcwotCXJkanBnY29tIFstcmF3XSBbLXZlcmJvc2VdIFtpbnB1dGZpbGVuYW1lXQorICAgICAgICByZGpwZ2NvbSBbLXJhd10gWy12ZXJib3NlXSBbaW5wdXRmaWxlbmFtZV0KIFRoZSBzd2l0Y2ggIi1yYXciIChvciBqdXN0ICItciIpIGNhdXNlcyByZGpwZ2NvbSB0byBvdXRwdXQgbm9uLXByaW50YWJsZQogY2hhcmFjdGVycyBpbiBKUEVHIGNvbW1lbnRzLiAgVGhlc2UgY2hhcmFjdGVycyBhcmUgbm9ybWFsbHkgZXNjYXBlZCBmb3IKIHNlY3VyaXR5IHJlYXNvbnMuCkBAIC01NzksMTggKzYxNywxOCBAQAogCiBUaGUgY29tbWFuZCBsaW5lIHN5bnRheCBmb3Igd3JqcGdjb20gaXMgc2ltaWxhciB0byBjanBlZydzLiAgT24gVW5peC1saWtlCiBzeXN0ZW1zLCBpdCBpcwotCXdyanBnY29tIFtzd2l0Y2hlc10gW2lucHV0ZmlsZW5hbWVdCisgICAgICAgIHdyanBnY29tIFtzd2l0Y2hlc10gW2lucHV0ZmlsZW5hbWVdCiBUaGUgb3V0cHV0IGZpbGUgaXMgd3JpdHRlbiB0byBzdGFuZGFyZCBvdXRwdXQuICBUaGUgaW5wdXQgZmlsZSBjb21lcyBmcm9tCiB0aGUgbmFtZWQgZmlsZSwgb3IgZnJvbSBzdGFuZGFyZCBpbnB1dCBpZiBubyBpbnB1dCBmaWxlIGlzIG5hbWVkLgogCiBPbiBtb3N0IG5vbi1Vbml4IHN5c3RlbXMsIHRoZSBzeW50YXggaXMKLQl3cmpwZ2NvbSBbc3dpdGNoZXNdIGlucHV0ZmlsZW5hbWUgb3V0cHV0ZmlsZW5hbWUKKyAgICAgICAgd3JqcGdjb20gW3N3aXRjaGVzXSBpbnB1dGZpbGVuYW1lIG91dHB1dGZpbGVuYW1lCiB3aGVyZSBib3RoIGlucHV0IGFuZCBvdXRwdXQgZmlsZSBuYW1lcyBtdXN0IGJlIGdpdmVuIGV4cGxpY2l0bHkuCiAKIHdyanBnY29tIHVuZGVyc3RhbmRzIHRocmVlIHN3aXRjaGVzOgotCS1yZXBsYWNlCQkgRGVsZXRlIGFueSBleGlzdGluZyBDT00gYmxvY2tzIGZyb20gdGhlIGZpbGUuCi0JLWNvbW1lbnQgIkNvbW1lbnQgdGV4dCIJIFN1cHBseSBuZXcgQ09NIHRleHQgb24gY29tbWFuZCBsaW5lLgotCS1jZmlsZSBuYW1lCQkgUmVhZCB0ZXh0IGZvciBuZXcgQ09NIGJsb2NrIGZyb20gbmFtZWQgZmlsZS4KKyAgICAgICAgLXJlcGxhY2UgICAgICAgICAgICAgICAgIERlbGV0ZSBhbnkgZXhpc3RpbmcgQ09NIGJsb2NrcyBmcm9tIHRoZSBmaWxlLgorICAgICAgICAtY29tbWVudCAiQ29tbWVudCB0ZXh0IiAgU3VwcGx5IG5ldyBDT00gdGV4dCBvbiBjb21tYW5kIGxpbmUuCisgICAgICAgIC1jZmlsZSBuYW1lICAgICAgICAgICAgICBSZWFkIHRleHQgZm9yIG5ldyBDT00gYmxvY2sgZnJvbSBuYW1lZCBmaWxlLgogKFN3aXRjaCBuYW1lcyBjYW4gYmUgYWJicmV2aWF0ZWQuKSAgSWYgeW91IGhhdmUgb25seSBvbmUgbGluZSBvZiBjb21tZW50IHRleHQKIHRvIGFkZCwgeW91IGNhbiBwcm92aWRlIGl0IG9uIHRoZSBjb21tYW5kIGxpbmUgd2l0aCAtY29tbWVudC4gIFRoZSBjb21tZW50CiB0ZXh0IG11c3QgYmUgc3Vycm91bmRlZCB3aXRoIHF1b3RlcyBzbyB0aGF0IGl0IGlzIHRyZWF0ZWQgYXMgYSBzaW5nbGUKZGlmZiAtLWdpdCBhL3dpbi9qY29uZmlnLmguaW4gYi93aW4vamNvbmZpZy5oLmluCmluZGV4IGJlNGI1YzMuLjUxNmNhNTkgMTAwNjQ0Ci0tLSBhL3dpbi9qY29uZmlnLmguaW4KKysrIGIvd2luL2pjb25maWcuaC5pbgpAQCAtNSwxMyArNSwxNCBAQAogI2RlZmluZSBMSUJKUEVHX1RVUkJPX1ZFUlNJT04gQFZFUlNJT05ACiAjY21ha2VkZWZpbmUgQ19BUklUSF9DT0RJTkdfU1VQUE9SVEVECiAjY21ha2VkZWZpbmUgRF9BUklUSF9DT0RJTkdfU1VQUE9SVEVECisjY21ha2VkZWZpbmUgTUVNX1NSQ0RTVF9TVVBQT1JURUQKIAogI2RlZmluZSBIQVZFX1BST1RPVFlQRVMKICNkZWZpbmUgSEFWRV9VTlNJR05FRF9DSEFSCiAjZGVmaW5lIEhBVkVfVU5TSUdORURfU0hPUlQKIC8qICNkZWZpbmUgdm9pZCBjaGFyICovCiAvKiAjZGVmaW5lIGNvbnN0ICovCi0jdW5kZWYgQ0hBUl9JU19VTlNJR05FRAorI3VuZGVmIF9fQ0hBUl9VTlNJR05FRF9fCiAjZGVmaW5lIEhBVkVfU1REREVGX0gKICNkZWZpbmUgSEFWRV9TVERMSUJfSAogI3VuZGVmIE5FRURfQlNEX1NUUklOR1MKZGlmZiAtLWdpdCBhL3dpbi9jb25maWcuaC5pbiBiL3dpbi9qY29uZmlnaW50LmguaW4Kc2ltaWxhcml0eSBpbmRleCA4MCUKcmVuYW1lIGZyb20gd2luL2NvbmZpZy5oLmluCnJlbmFtZSB0byB3aW4vamNvbmZpZ2ludC5oLmluCmluZGV4IGZmNTU2YzQuLjIxMzFiZjUgMTAwNjQ0Ci0tLSBhL3dpbi9jb25maWcuaC5pbgorKysgYi93aW4vamNvbmZpZ2ludC5oLmluCkBAIC0xLDEwICsxLDEwIEBACi0jZGVmaW5lIFZFUlNJT04gIkBWRVJTSU9OQCINCi0jZGVmaW5lIEJVSUxEICJAQlVJTERAIg0KLSNkZWZpbmUgUEFDS0FHRV9OQU1FICJAQ01BS0VfUFJPSkVDVF9OQU1FQCINCisjZGVmaW5lIFZFUlNJT04gIkBWRVJTSU9OQCIKKyNkZWZpbmUgQlVJTEQgIkBCVUlMREAiCisjZGVmaW5lIFBBQ0tBR0VfTkFNRSAiQENNQUtFX1BST0pFQ1RfTkFNRUAiCiAKICNpZm5kZWYgSU5MSU5FCiAjaWYgZGVmaW5lZChfX0dOVUNfXykKLSNkZWZpbmUgSU5MSU5FIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKQorI2RlZmluZSBJTkxJTkUgaW5saW5lIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKQogI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKICNkZWZpbmUgSU5MSU5FIF9fZm9yY2VpbmxpbmUKICNlbHNlCmRpZmYgLS1naXQgYS93aW4vanBlZzYyLW1lbXNyY2RzdC5kZWYgYi93aW4vanBlZzYyLW1lbXNyY2RzdC5kZWYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDUxMWM4ZQotLS0gL2Rldi9udWxsCisrKyBiL3dpbi9qcGVnNjItbWVtc3JjZHN0LmRlZgpAQCAtMCwwICsxLDEwNCBAQAorRVhQT1JUUworCWpjb3B5X2Jsb2NrX3JvdyBAIDEgOyAKKwlqY29weV9zYW1wbGVfcm93cyBAIDIgOyAKKwlqZGl2X3JvdW5kX3VwIEAgMyA7IAorCWppbml0XzFwYXNzX3F1YW50aXplciBAIDQgOyAKKwlqaW5pdF8ycGFzc19xdWFudGl6ZXIgQCA1IDsgCisJamluaXRfY19jb2VmX2NvbnRyb2xsZXIgQCA2IDsgCisJamluaXRfY19tYWluX2NvbnRyb2xsZXIgQCA3IDsgCisJamluaXRfY19tYXN0ZXJfY29udHJvbCBAIDggOyAKKwlqaW5pdF9jX3ByZXBfY29udHJvbGxlciBAIDkgOyAKKwlqaW5pdF9jb2xvcl9jb252ZXJ0ZXIgQCAxMCA7IAorCWppbml0X2NvbG9yX2RlY29udmVydGVyIEAgMTEgOyAKKwlqaW5pdF9jb21wcmVzc19tYXN0ZXIgQCAxMiA7IAorCWppbml0X2RfY29lZl9jb250cm9sbGVyIEAgMTMgOyAKKwlqaW5pdF9kX21haW5fY29udHJvbGxlciBAIDE0IDsgCisJamluaXRfZF9wb3N0X2NvbnRyb2xsZXIgQCAxNSA7IAorCWppbml0X2Rvd25zYW1wbGVyIEAgMTYgOyAKKwlqaW5pdF9mb3J3YXJkX2RjdCBAIDE3IDsgCisJamluaXRfaHVmZl9kZWNvZGVyIEAgMTggOyAKKwlqaW5pdF9odWZmX2VuY29kZXIgQCAxOSA7IAorCWppbml0X2lucHV0X2NvbnRyb2xsZXIgQCAyMCA7IAorCWppbml0X2ludmVyc2VfZGN0IEAgMjEgOyAKKwlqaW5pdF9tYXJrZXJfcmVhZGVyIEAgMjIgOyAKKwlqaW5pdF9tYXJrZXJfd3JpdGVyIEAgMjMgOyAKKwlqaW5pdF9tYXN0ZXJfZGVjb21wcmVzcyBAIDI0IDsgCisJamluaXRfbWVtb3J5X21nciBAIDI1IDsgCisJamluaXRfbWVyZ2VkX3Vwc2FtcGxlciBAIDI2IDsgCisJamluaXRfcGh1ZmZfZGVjb2RlciBAIDI3IDsgCisJamluaXRfcGh1ZmZfZW5jb2RlciBAIDI4IDsgCisJamluaXRfdXBzYW1wbGVyIEAgMjkgOyAKKwlqcGVnX0NyZWF0ZUNvbXByZXNzIEAgMzAgOyAKKwlqcGVnX0NyZWF0ZURlY29tcHJlc3MgQCAzMSA7IAorCWpwZWdfYWJvcnQgQCAzMiA7IAorCWpwZWdfYWJvcnRfY29tcHJlc3MgQCAzMyA7IAorCWpwZWdfYWJvcnRfZGVjb21wcmVzcyBAIDM0IDsgCisJanBlZ19hZGRfcXVhbnRfdGFibGUgQCAzNSA7IAorCWpwZWdfYWxsb2NfaHVmZl90YWJsZSBAIDM2IDsgCisJanBlZ19hbGxvY19xdWFudF90YWJsZSBAIDM3IDsgCisJanBlZ19jYWxjX291dHB1dF9kaW1lbnNpb25zIEAgMzggOyAKKwlqcGVnX2NvbnN1bWVfaW5wdXQgQCAzOSA7IAorCWpwZWdfY29weV9jcml0aWNhbF9wYXJhbWV0ZXJzIEAgNDAgOyAKKwlqcGVnX2RlZmF1bHRfY29sb3JzcGFjZSBAIDQxIDsgCisJanBlZ19kZXN0cm95IEAgNDIgOyAKKwlqcGVnX2Rlc3Ryb3lfY29tcHJlc3MgQCA0MyA7IAorCWpwZWdfZGVzdHJveV9kZWNvbXByZXNzIEAgNDQgOyAKKwlqcGVnX2ZkY3RfZmxvYXQgQCA0NSA7IAorCWpwZWdfZmRjdF9pZmFzdCBAIDQ2IDsgCisJanBlZ19mZGN0X2lzbG93IEAgNDcgOyAKKwlqcGVnX2ZpbGxfYml0X2J1ZmZlciBAIDQ4IDsgCisJanBlZ19maW5pc2hfY29tcHJlc3MgQCA0OSA7IAorCWpwZWdfZmluaXNoX2RlY29tcHJlc3MgQCA1MCA7IAorCWpwZWdfZmluaXNoX291dHB1dCBAIDUxIDsgCisJanBlZ19mcmVlX2xhcmdlIEAgNTIgOyAKKwlqcGVnX2ZyZWVfc21hbGwgQCA1MyA7IAorCWpwZWdfZ2VuX29wdGltYWxfdGFibGUgQCA1NCA7IAorCWpwZWdfZ2V0X2xhcmdlIEAgNTUgOyAKKwlqcGVnX2dldF9zbWFsbCBAIDU2IDsgCisJanBlZ19oYXNfbXVsdGlwbGVfc2NhbnMgQCA1NyA7IAorCWpwZWdfaHVmZl9kZWNvZGUgQCA1OCA7IAorCWpwZWdfaWRjdF8xeDEgQCA1OSA7IAorCWpwZWdfaWRjdF8yeDIgQCA2MCA7IAorCWpwZWdfaWRjdF80eDQgQCA2MSA7IAorCWpwZWdfaWRjdF9mbG9hdCBAIDYyIDsgCisJanBlZ19pZGN0X2lmYXN0IEAgNjMgOyAKKwlqcGVnX2lkY3RfaXNsb3cgQCA2NCA7IAorCWpwZWdfaW5wdXRfY29tcGxldGUgQCA2NSA7IAorCWpwZWdfbWFrZV9jX2Rlcml2ZWRfdGJsIEAgNjYgOyAKKwlqcGVnX21ha2VfZF9kZXJpdmVkX3RibCBAIDY3IDsgCisJanBlZ19tZW1fYXZhaWxhYmxlIEAgNjggOyAKKwlqcGVnX21lbV9pbml0IEAgNjkgOyAKKwlqcGVnX21lbV90ZXJtIEAgNzAgOyAKKwlqcGVnX25ld19jb2xvcm1hcCBAIDcxIDsgCisJanBlZ19vcGVuX2JhY2tpbmdfc3RvcmUgQCA3MiA7IAorCWpwZWdfcXVhbGl0eV9zY2FsaW5nIEAgNzMgOyAKKwlqcGVnX3JlYWRfY29lZmZpY2llbnRzIEAgNzQgOyAKKwlqcGVnX3JlYWRfaGVhZGVyIEAgNzUgOyAKKwlqcGVnX3JlYWRfcmF3X2RhdGEgQCA3NiA7IAorCWpwZWdfcmVhZF9zY2FubGluZXMgQCA3NyA7IAorCWpwZWdfcmVzeW5jX3RvX3Jlc3RhcnQgQCA3OCA7IAorCWpwZWdfc2F2ZV9tYXJrZXJzIEAgNzkgOyAKKwlqcGVnX3NldF9jb2xvcnNwYWNlIEAgODAgOyAKKwlqcGVnX3NldF9kZWZhdWx0cyBAIDgxIDsgCisJanBlZ19zZXRfbGluZWFyX3F1YWxpdHkgQCA4MiA7IAorCWpwZWdfc2V0X21hcmtlcl9wcm9jZXNzb3IgQCA4MyA7IAorCWpwZWdfc2V0X3F1YWxpdHkgQCA4NCA7IAorCWpwZWdfc2ltcGxlX3Byb2dyZXNzaW9uIEAgODUgOyAKKwlqcGVnX3N0YXJ0X2NvbXByZXNzIEAgODYgOyAKKwlqcGVnX3N0YXJ0X2RlY29tcHJlc3MgQCA4NyA7IAorCWpwZWdfc3RhcnRfb3V0cHV0IEAgODggOyAKKwlqcGVnX3N0ZF9lcnJvciBAIDg5IDsgCisJanBlZ19zdGRpb19kZXN0IEAgOTAgOyAKKwlqcGVnX3N0ZGlvX3NyYyBAIDkxIDsgCisJanBlZ19zdXBwcmVzc190YWJsZXMgQCA5MiA7IAorCWpwZWdfd3JpdGVfY29lZmZpY2llbnRzIEAgOTMgOyAKKwlqcGVnX3dyaXRlX21fYnl0ZSBAIDk0IDsgCisJanBlZ193cml0ZV9tX2hlYWRlciBAIDk1IDsgCisJanBlZ193cml0ZV9tYXJrZXIgQCA5NiA7IAorCWpwZWdfd3JpdGVfcmF3X2RhdGEgQCA5NyA7IAorCWpwZWdfd3JpdGVfc2NhbmxpbmVzIEAgOTggOyAKKwlqcGVnX3dyaXRlX3RhYmxlcyBAIDk5IDsgCisJanJvdW5kX3VwIEAgMTAwIDsgCisJanplcm9fZmFyIEAgMTAxIDsgCisJanBlZ19tZW1fZGVzdCBAIDEwMiA7IAorCWpwZWdfbWVtX3NyYyBAIDEwMyA7IApkaWZmIC0tZ2l0IGEvd2luL2pwZWc3LW1lbXNyY2RzdC5kZWYgYi93aW4vanBlZzctbWVtc3JjZHN0LmRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzlmNTE3Ci0tLSAvZGV2L251bGwKKysrIGIvd2luL2pwZWc3LW1lbXNyY2RzdC5kZWYKQEAgLTAsMCArMSwxMDYgQEAKK0VYUE9SVFMKKwlqY29weV9ibG9ja19yb3cgQCAxIDsgCisJamNvcHlfc2FtcGxlX3Jvd3MgQCAyIDsgCisJamRpdl9yb3VuZF91cCBAIDMgOyAKKwlqaW5pdF8xcGFzc19xdWFudGl6ZXIgQCA0IDsgCisJamluaXRfMnBhc3NfcXVhbnRpemVyIEAgNSA7IAorCWppbml0X2NfY29lZl9jb250cm9sbGVyIEAgNiA7IAorCWppbml0X2NfbWFpbl9jb250cm9sbGVyIEAgNyA7IAorCWppbml0X2NfbWFzdGVyX2NvbnRyb2wgQCA4IDsgCisJamluaXRfY19wcmVwX2NvbnRyb2xsZXIgQCA5IDsgCisJamluaXRfY29sb3JfY29udmVydGVyIEAgMTAgOyAKKwlqaW5pdF9jb2xvcl9kZWNvbnZlcnRlciBAIDExIDsgCisJamluaXRfY29tcHJlc3NfbWFzdGVyIEAgMTIgOyAKKwlqaW5pdF9kX2NvZWZfY29udHJvbGxlciBAIDEzIDsgCisJamluaXRfZF9tYWluX2NvbnRyb2xsZXIgQCAxNCA7IAorCWppbml0X2RfcG9zdF9jb250cm9sbGVyIEAgMTUgOyAKKwlqaW5pdF9kb3duc2FtcGxlciBAIDE2IDsgCisJamluaXRfZm9yd2FyZF9kY3QgQCAxNyA7IAorCWppbml0X2h1ZmZfZGVjb2RlciBAIDE4IDsgCisJamluaXRfaHVmZl9lbmNvZGVyIEAgMTkgOyAKKwlqaW5pdF9pbnB1dF9jb250cm9sbGVyIEAgMjAgOyAKKwlqaW5pdF9pbnZlcnNlX2RjdCBAIDIxIDsgCisJamluaXRfbWFya2VyX3JlYWRlciBAIDIyIDsgCisJamluaXRfbWFya2VyX3dyaXRlciBAIDIzIDsgCisJamluaXRfbWFzdGVyX2RlY29tcHJlc3MgQCAyNCA7IAorCWppbml0X21lbW9yeV9tZ3IgQCAyNSA7IAorCWppbml0X21lcmdlZF91cHNhbXBsZXIgQCAyNiA7IAorCWppbml0X3BodWZmX2RlY29kZXIgQCAyNyA7IAorCWppbml0X3BodWZmX2VuY29kZXIgQCAyOCA7IAorCWppbml0X3Vwc2FtcGxlciBAIDI5IDsgCisJanBlZ19DcmVhdGVDb21wcmVzcyBAIDMwIDsgCisJanBlZ19DcmVhdGVEZWNvbXByZXNzIEAgMzEgOyAKKwlqcGVnX2Fib3J0IEAgMzIgOyAKKwlqcGVnX2Fib3J0X2NvbXByZXNzIEAgMzMgOyAKKwlqcGVnX2Fib3J0X2RlY29tcHJlc3MgQCAzNCA7IAorCWpwZWdfYWRkX3F1YW50X3RhYmxlIEAgMzUgOyAKKwlqcGVnX2FsbG9jX2h1ZmZfdGFibGUgQCAzNiA7IAorCWpwZWdfYWxsb2NfcXVhbnRfdGFibGUgQCAzNyA7IAorCWpwZWdfY2FsY19qcGVnX2RpbWVuc2lvbnMgQCAzOCA7IAorCWpwZWdfY2FsY19vdXRwdXRfZGltZW5zaW9ucyBAIDM5IDsgCisJanBlZ19jb25zdW1lX2lucHV0IEAgNDAgOyAKKwlqcGVnX2NvcHlfY3JpdGljYWxfcGFyYW1ldGVycyBAIDQxIDsgCisJanBlZ19kZWZhdWx0X2NvbG9yc3BhY2UgQCA0MiA7IAorCWpwZWdfZGVmYXVsdF9xdGFibGVzIEAgNDMgOworCWpwZWdfZGVzdHJveSBAIDQ0IDsgCisJanBlZ19kZXN0cm95X2NvbXByZXNzIEAgNDUgOyAKKwlqcGVnX2Rlc3Ryb3lfZGVjb21wcmVzcyBAIDQ2IDsgCisJanBlZ19mZGN0X2Zsb2F0IEAgNDcgOyAKKwlqcGVnX2ZkY3RfaWZhc3QgQCA0OCA7IAorCWpwZWdfZmRjdF9pc2xvdyBAIDQ5IDsgCisJanBlZ19maWxsX2JpdF9idWZmZXIgQCA1MCA7IAorCWpwZWdfZmluaXNoX2NvbXByZXNzIEAgNTEgOyAKKwlqcGVnX2ZpbmlzaF9kZWNvbXByZXNzIEAgNTIgOyAKKwlqcGVnX2ZpbmlzaF9vdXRwdXQgQCA1MyA7IAorCWpwZWdfZnJlZV9sYXJnZSBAIDU0IDsgCisJanBlZ19mcmVlX3NtYWxsIEAgNTUgOyAKKwlqcGVnX2dlbl9vcHRpbWFsX3RhYmxlIEAgNTYgOyAKKwlqcGVnX2dldF9sYXJnZSBAIDU3IDsgCisJanBlZ19nZXRfc21hbGwgQCA1OCA7IAorCWpwZWdfaGFzX211bHRpcGxlX3NjYW5zIEAgNTkgOyAKKwlqcGVnX2h1ZmZfZGVjb2RlIEAgNjAgOyAKKwlqcGVnX2lkY3RfMXgxIEAgNjEgOyAKKwlqcGVnX2lkY3RfMngyIEAgNjIgOyAKKwlqcGVnX2lkY3RfNHg0IEAgNjMgOyAKKwlqcGVnX2lkY3RfZmxvYXQgQCA2NCA7IAorCWpwZWdfaWRjdF9pZmFzdCBAIDY1IDsgCisJanBlZ19pZGN0X2lzbG93IEAgNjYgOyAKKwlqcGVnX2lucHV0X2NvbXBsZXRlIEAgNjcgOyAKKwlqcGVnX21ha2VfY19kZXJpdmVkX3RibCBAIDY4IDsgCisJanBlZ19tYWtlX2RfZGVyaXZlZF90YmwgQCA2OSA7IAorCWpwZWdfbWVtX2F2YWlsYWJsZSBAIDcwIDsgCisJanBlZ19tZW1faW5pdCBAIDcxIDsgCisJanBlZ19tZW1fdGVybSBAIDcyIDsgCisJanBlZ19uZXdfY29sb3JtYXAgQCA3MyA7IAorCWpwZWdfb3Blbl9iYWNraW5nX3N0b3JlIEAgNzQgOyAKKwlqcGVnX3F1YWxpdHlfc2NhbGluZyBAIDc1IDsgCisJanBlZ19yZWFkX2NvZWZmaWNpZW50cyBAIDc2IDsgCisJanBlZ19yZWFkX2hlYWRlciBAIDc3IDsgCisJanBlZ19yZWFkX3Jhd19kYXRhIEAgNzggOyAKKwlqcGVnX3JlYWRfc2NhbmxpbmVzIEAgNzkgOyAKKwlqcGVnX3Jlc3luY190b19yZXN0YXJ0IEAgODAgOyAKKwlqcGVnX3NhdmVfbWFya2VycyBAIDgxIDsgCisJanBlZ19zZXRfY29sb3JzcGFjZSBAIDgyIDsgCisJanBlZ19zZXRfZGVmYXVsdHMgQCA4MyA7IAorCWpwZWdfc2V0X2xpbmVhcl9xdWFsaXR5IEAgODQgOyAKKwlqcGVnX3NldF9tYXJrZXJfcHJvY2Vzc29yIEAgODUgOyAKKwlqcGVnX3NldF9xdWFsaXR5IEAgODYgOyAKKwlqcGVnX3NpbXBsZV9wcm9ncmVzc2lvbiBAIDg3IDsgCisJanBlZ19zdGFydF9jb21wcmVzcyBAIDg4IDsgCisJanBlZ19zdGFydF9kZWNvbXByZXNzIEAgODkgOyAKKwlqcGVnX3N0YXJ0X291dHB1dCBAIDkwIDsgCisJanBlZ19zdGRfZXJyb3IgQCA5MSA7IAorCWpwZWdfc3RkaW9fZGVzdCBAIDkyIDsgCisJanBlZ19zdGRpb19zcmMgQCA5MyA7IAorCWpwZWdfc3VwcHJlc3NfdGFibGVzIEAgOTQgOyAKKwlqcGVnX3dyaXRlX2NvZWZmaWNpZW50cyBAIDk1IDsgCisJanBlZ193cml0ZV9tX2J5dGUgQCA5NiA7IAorCWpwZWdfd3JpdGVfbV9oZWFkZXIgQCA5NyA7IAorCWpwZWdfd3JpdGVfbWFya2VyIEAgOTggOyAKKwlqcGVnX3dyaXRlX3Jhd19kYXRhIEAgOTkgOyAKKwlqcGVnX3dyaXRlX3NjYW5saW5lcyBAIDEwMCA7IAorCWpwZWdfd3JpdGVfdGFibGVzIEAgMTAxIDsgCisJanJvdW5kX3VwIEAgMTAyIDsgCisJanplcm9fZmFyIEAgMTAzIDsgCisJanBlZ19tZW1fZGVzdCBAIDEwNCA7IAorCWpwZWdfbWVtX3NyYyBAIDEwNSA7IApkaWZmIC0tZ2l0IGEvd2l6YXJkLnR4dCBiL3dpemFyZC50eHQKaW5kZXggNTQxNzBiMi4uZWRlNzIxZSAxMDA2NDQKLS0tIGEvd2l6YXJkLnR4dAorKysgYi93aXphcmQudHh0CkBAIC0zMCw3ICszMCw3IEBACiBZb3UgY2FuIHN1YnN0aXR1dGUgYSBkaWZmZXJlbnQgc2V0IG9mIHF1YW50aXphdGlvbiB2YWx1ZXMgYnkgdXNpbmcgdGhlCiAtcXRhYmxlcyBzd2l0Y2g6CiAKLQktcXRhYmxlcyBmaWxlCVVzZSB0aGUgcXVhbnRpemF0aW9uIHRhYmxlcyBnaXZlbiBpbiB0aGUgbmFtZWQgZmlsZS4KKyAgICAgICAgLXF0YWJsZXMgZmlsZSAgIFVzZSB0aGUgcXVhbnRpemF0aW9uIHRhYmxlcyBnaXZlbiBpbiB0aGUgbmFtZWQgZmlsZS4KIAogVGhlIHNwZWNpZmllZCBmaWxlIHNob3VsZCBiZSBhIHRleHQgZmlsZSBjb250YWluaW5nIGRlY2ltYWwgcXVhbnRpemF0aW9uCiB2YWx1ZXMuICBUaGUgZmlsZSBzaG91bGQgY29udGFpbiBvbmUgdG8gZm91ciB0YWJsZXMsIGVhY2ggb2YgNjQgZWxlbWVudHMuCkBAIC00MywyNyArNDMsMjcgQEAKIHdpdGggJyMnIGFuZCBleHRlbmRzIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUuICBIZXJlIGlzIGFuIGV4YW1wbGUgZmlsZSB0aGF0CiBkdXBsaWNhdGVzIHRoZSBkZWZhdWx0IHF1YW50aXphdGlvbiB0YWJsZXM6CiAKLQkjIFF1YW50aXphdGlvbiB0YWJsZXMgZ2l2ZW4gaW4gSlBFRyBzcGVjLCBzZWN0aW9uIEsuMQorICAgICAgICAjIFF1YW50aXphdGlvbiB0YWJsZXMgZ2l2ZW4gaW4gSlBFRyBzcGVjLCBzZWN0aW9uIEsuMQogCi0JIyBUaGlzIGlzIHRhYmxlIDAgKHRoZSBsdW1pbmFuY2UgdGFibGUpOgotCSAgMTYgIDExICAxMCAgMTYgIDI0ICA0MCAgNTEgIDYxCi0JICAxMiAgMTIgIDE0ICAxOSAgMjYgIDU4ICA2MCAgNTUKLQkgIDE0ICAxMyAgMTYgIDI0ICA0MCAgNTcgIDY5ICA1NgotCSAgMTQgIDE3ICAyMiAgMjkgIDUxICA4NyAgODAgIDYyCi0JICAxOCAgMjIgIDM3ICA1NiAgNjggMTA5IDEwMyAgNzcKLQkgIDI0ICAzNSAgNTUgIDY0ICA4MSAxMDQgMTEzICA5MgotCSAgNDkgIDY0ICA3OCAgODcgMTAzIDEyMSAxMjAgMTAxCi0JICA3MiAgOTIgIDk1ICA5OCAxMTIgMTAwIDEwMyAgOTkKKyAgICAgICAgIyBUaGlzIGlzIHRhYmxlIDAgKHRoZSBsdW1pbmFuY2UgdGFibGUpOgorICAgICAgICAgIDE2ICAxMSAgMTAgIDE2ICAyNCAgNDAgIDUxICA2MQorICAgICAgICAgIDEyICAxMiAgMTQgIDE5ICAyNiAgNTggIDYwICA1NQorICAgICAgICAgIDE0ICAxMyAgMTYgIDI0ICA0MCAgNTcgIDY5ICA1NgorICAgICAgICAgIDE0ICAxNyAgMjIgIDI5ICA1MSAgODcgIDgwICA2MgorICAgICAgICAgIDE4ICAyMiAgMzcgIDU2ICA2OCAxMDkgMTAzICA3NworICAgICAgICAgIDI0ICAzNSAgNTUgIDY0ICA4MSAxMDQgMTEzICA5MgorICAgICAgICAgIDQ5ICA2NCAgNzggIDg3IDEwMyAxMjEgMTIwIDEwMQorICAgICAgICAgIDcyICA5MiAgOTUgIDk4IDExMiAxMDAgMTAzICA5OQogCi0JIyBUaGlzIGlzIHRhYmxlIDEgKHRoZSBjaHJvbWluYW5jZSB0YWJsZSk6Ci0JICAxNyAgMTggIDI0ICA0NyAgOTkgIDk5ICA5OSAgOTkKLQkgIDE4ICAyMSAgMjYgIDY2ICA5OSAgOTkgIDk5ICA5OQotCSAgMjQgIDI2ICA1NiAgOTkgIDk5ICA5OSAgOTkgIDk5Ci0JICA0NyAgNjYgIDk5ICA5OSAgOTkgIDk5ICA5OSAgOTkKLQkgIDk5ICA5OSAgOTkgIDk5ICA5OSAgOTkgIDk5ICA5OQotCSAgOTkgIDk5ICA5OSAgOTkgIDk5ICA5OSAgOTkgIDk5Ci0JICA5OSAgOTkgIDk5ICA5OSAgOTkgIDk5ICA5OSAgOTkKLQkgIDk5ICA5OSAgOTkgIDk5ICA5OSAgOTkgIDk5ICA5OQorICAgICAgICAjIFRoaXMgaXMgdGFibGUgMSAodGhlIGNocm9taW5hbmNlIHRhYmxlKToKKyAgICAgICAgICAxNyAgMTggIDI0ICA0NyAgOTkgIDk5ICA5OSAgOTkKKyAgICAgICAgICAxOCAgMjEgIDI2ICA2NiAgOTkgIDk5ICA5OSAgOTkKKyAgICAgICAgICAyNCAgMjYgIDU2ICA5OSAgOTkgIDk5ICA5OSAgOTkKKyAgICAgICAgICA0NyAgNjYgIDk5ICA5OSAgOTkgIDk5ICA5OSAgOTkKKyAgICAgICAgICA5OSAgOTkgIDk5ICA5OSAgOTkgIDk5ICA5OSAgOTkKKyAgICAgICAgICA5OSAgOTkgIDk5ICA5OSAgOTkgIDk5ICA5OSAgOTkKKyAgICAgICAgICA5OSAgOTkgIDk5ICA5OSAgOTkgIDk5ICA5OSAgOTkKKyAgICAgICAgICA5OSAgOTkgIDk5ICA5OSAgOTkgIDk5ICA5OSAgOTkKIAogSWYgdGhlIC1xdGFibGVzIHN3aXRjaCBpcyB1c2VkIHdpdGhvdXQgLXF1YWxpdHksIHRoZW4gdGhlIHNwZWNpZmllZCB0YWJsZXMKIGFyZSB1c2VkIGV4YWN0bHkgYXMtaXMuICBJZiBib3RoIC1xdGFibGVzIGFuZCAtcXVhbGl0eSBhcmUgdXNlZCwgdGhlbiB0aGUKQEAgLTc1LDggKzc1LDggQEAKIHRhYmxlIDEgZm9yIGNocm9taW5hbmNlIGNvbXBvbmVudHMuICBUbyBvdmVycmlkZSB0aGlzIGNob2ljZSwgdXNlIHRoZSAtcXNsb3RzCiBzd2l0Y2g6CiAKLQktcXNsb3RzIE5bLC4uLl0JCVNlbGVjdCB3aGljaCBxdWFudGl6YXRpb24gdGFibGUgdG8gdXNlIGZvcgotCQkJCWVhY2ggY29sb3IgY29tcG9uZW50LgorICAgICAgICAtcXNsb3RzIE5bLC4uLl0gICAgICAgICBTZWxlY3Qgd2hpY2ggcXVhbnRpemF0aW9uIHRhYmxlIHRvIHVzZSBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWFjaCBjb2xvciBjb21wb25lbnQuCiAKIFRoZSAtcXNsb3RzIHN3aXRjaCBzcGVjaWZpZXMgYSBxdWFudGl6YXRpb24gdGFibGUgbnVtYmVyIGZvciBlYWNoIGNvbG9yCiBjb21wb25lbnQsIGluIHRoZSBvcmRlciBpbiB3aGljaCB0aGUgY29tcG9uZW50cyBhcHBlYXIgaW4gdGhlIEpQRUcgU09GIG1hcmtlci4KQEAgLTkzLDggKzkzLDggQEAKIGNvbXByZXNzaW5nIFlDYkNyIGRhdGEsIGFuZCBubyBkb3duc2FtcGxpbmcgZm9yIGFsbCBvdGhlciBjb2xvciBzcGFjZXMuCiBZb3UgY2FuIG92ZXJyaWRlIHRoaXMgZGVmYXVsdCB3aXRoIHRoZSAtc2FtcGxlIHN3aXRjaDoKIAotCS1zYW1wbGUgSHhWWywuLi5dCVNldCBKUEVHIHNhbXBsaW5nIGZhY3RvcnMgZm9yIGVhY2ggY29sb3IKLQkJCQljb21wb25lbnQuCisgICAgICAgIC1zYW1wbGUgSHhWWywuLi5dICAgICAgIFNldCBKUEVHIHNhbXBsaW5nIGZhY3RvcnMgZm9yIGVhY2ggY29sb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LgogCiBUaGUgLXNhbXBsZSBzd2l0Y2ggc3BlY2lmaWVzIHRoZSBKUEVHIHNhbXBsaW5nIGZhY3RvcnMgZm9yIGVhY2ggY29sb3IKIGNvbXBvbmVudCwgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgYXBwZWFyIGluIHRoZSBKUEVHIFNPRiBtYXJrZXIuCkBAIC0xMTksNyArMTE5LDcgQEAKIGZpbGVzIG9yIHByb2dyZXNzaXZlIEpQRUcgZmlsZXMgd2l0aCBjdXN0b20gcHJvZ3Jlc3Npb24gcGFyYW1ldGVycyBieSB1c2luZwogdGhlIC1zY2FucyBzd2l0Y2g6CiAKLQktc2NhbnMgZmlsZQlVc2UgdGhlIHNjYW4gc2VxdWVuY2UgZ2l2ZW4gaW4gdGhlIG5hbWVkIGZpbGUuCisgICAgICAgIC1zY2FucyBmaWxlICAgICBVc2UgdGhlIHNjYW4gc2VxdWVuY2UgZ2l2ZW4gaW4gdGhlIG5hbWVkIGZpbGUuCiAKIFRoZSBzcGVjaWZpZWQgZmlsZSBzaG91bGQgYmUgYSB0ZXh0IGZpbGUgY29udGFpbmluZyBhICJzY2FuIHNjcmlwdCIuCiBUaGUgc2NyaXB0IHNwZWNpZmllcyB0aGUgY29udGVudHMgYW5kIG9yZGVyaW5nIG9mIHRoZSBzY2FucyB0byBiZSBlbWl0dGVkLgpAQCAtMTM4LDEwICsxMzgsMTAgQEAKIHBvc2l0aW9uYWwgaW5kZXhlcy4pCiAKIFRoZSBwcm9ncmVzc2lvbiBwYXJhbWV0ZXJzIGZvciBlYWNoIHNjYW4gYXJlOgotCVNzCVppZ3phZyBpbmRleCBvZiBmaXJzdCBjb2VmZmljaWVudCBpbmNsdWRlZCBpbiBzY2FuCi0JU2UJWmlnemFnIGluZGV4IG9mIGxhc3QgY29lZmZpY2llbnQgaW5jbHVkZWQgaW4gc2NhbgotCUFoCVplcm8gZm9yIGZpcnN0IHNjYW4gb2YgYSBjb2VmZmljaWVudCwgZWxzZSBBbCBvZiBwcmlvciBzY2FuCi0JQWwJU3VjY2Vzc2l2ZSBhcHByb3hpbWF0aW9uIGxvdyBiaXQgcG9zaXRpb24gZm9yIHNjYW4KKyAgICAgICAgU3MgICAgICBaaWd6YWcgaW5kZXggb2YgZmlyc3QgY29lZmZpY2llbnQgaW5jbHVkZWQgaW4gc2NhbgorICAgICAgICBTZSAgICAgIFppZ3phZyBpbmRleCBvZiBsYXN0IGNvZWZmaWNpZW50IGluY2x1ZGVkIGluIHNjYW4KKyAgICAgICAgQWggICAgICBaZXJvIGZvciBmaXJzdCBzY2FuIG9mIGEgY29lZmZpY2llbnQsIGVsc2UgQWwgb2YgcHJpb3Igc2NhbgorICAgICAgICBBbCAgICAgIFN1Y2Nlc3NpdmUgYXBwcm94aW1hdGlvbiBsb3cgYml0IHBvc2l0aW9uIGZvciBzY2FuCiBJZiB0aGUgcHJvZ3Jlc3Npb24gcGFyYW1ldGVycyBhcmUgb21pdHRlZCwgdGhlIHZhbHVlcyAwLDYzLDAsMCBhcmUgdXNlZCwKIHByb2R1Y2luZyBhIHNlcXVlbnRpYWwgSlBFRyBmaWxlLiAgY2pwZWcgYXV0b21hdGljYWxseSBkZXRlcm1pbmVzIHdoZXRoZXIKIHRoZSBzY3JpcHQgcmVwcmVzZW50cyBhIHByb2dyZXNzaXZlIG9yIHNlcXVlbnRpYWwgZmlsZSwgYnkgb2JzZXJ2aW5nIHdoZXRoZXIKQEAgLTE1Niw1MiArMTU2LDUyIEBACiBsZWdpYmlsaXR5LCBjb21tYXMgb3IgZGFzaGVzIGNhbiBiZSBwbGFjZWQgYmV0d2VlbiB2YWx1ZXMuICAoQWN0dWFsbHksIGFueQogc2luZ2xlIHB1bmN0dWF0aW9uIGNoYXJhY3RlciBvdGhlciB0aGFuICc6JyBvciAnOycgY2FuIGJlIGluc2VydGVkLikgIEZvcgogZXhhbXBsZSwgdGhlIGZvbGxvd2luZyB0d28gc2NhbiBkZWZpbml0aW9ucyBhcmUgZXF1aXZhbGVudDoKLQkwIDEgMjogMCA2MyAwIDA7Ci0JMCwxLDIgOiAwLTYzLCAwLDAgOworICAgICAgICAwIDEgMjogMCA2MyAwIDA7CisgICAgICAgIDAsMSwyIDogMC02MywgMCwwIDsKIAogSGVyZSBpcyBhbiBleGFtcGxlIG9mIGEgc2NhbiBzY3JpcHQgdGhhdCBnZW5lcmF0ZXMgYSBwYXJ0aWFsbHkgaW50ZXJsZWF2ZWQKIHNlcXVlbnRpYWwgSlBFRyBmaWxlOgogCi0JMDsJCQkjIFkgb25seSBpbiBmaXJzdCBzY2FuCi0JMSAyOwkJCSMgQ2IgYW5kIENyIGluIHNlY29uZCBzY2FuCisgICAgICAgIDA7ICAgICAgICAgICAgICAgICAgICAgICMgWSBvbmx5IGluIGZpcnN0IHNjYW4KKyAgICAgICAgMSAyOyAgICAgICAgICAgICAgICAgICAgIyBDYiBhbmQgQ3IgaW4gc2Vjb25kIHNjYW4KIAogSGVyZSBpcyBhbiBleGFtcGxlIG9mIGEgcHJvZ3Jlc3NpdmUgc2NhbiBzY3JpcHQgdXNpbmcgb25seSBzcGVjdHJhbCBzZWxlY3Rpb24KIChubyBzdWNjZXNzaXZlIGFwcHJveGltYXRpb24pOgogCi0JIyBJbnRlcmxlYXZlZCBEQyBzY2FuIGZvciBZLENiLENyOgotCTAsMSwyOiAwLTAsICAgMCwgMCA7Ci0JIyBBQyBzY2FuczoKLQkwOiAgICAgMS0yLCAgIDAsIDAgOwkjIEZpcnN0IHR3byBZIEFDIGNvZWZmaWNpZW50cwotCTA6ICAgICAzLTUsICAgMCwgMCA7CSMgVGhyZWUgbW9yZQotCTE6ICAgICAxLTYzLCAgMCwgMCA7CSMgQWxsIEFDIGNvZWZmaWNpZW50cyBmb3IgQ2IKLQkyOiAgICAgMS02MywgIDAsIDAgOwkjIEFsbCBBQyBjb2VmZmljaWVudHMgZm9yIENyCi0JMDogICAgIDYtOSwgICAwLCAwIDsJIyBNb3JlIFkgY29lZmZpY2llbnRzCi0JMDogICAgIDEwLTYzLCAwLCAwIDsJIyBSZW1haW5pbmcgWSBjb2VmZmljaWVudHMKKyAgICAgICAgIyBJbnRlcmxlYXZlZCBEQyBzY2FuIGZvciBZLENiLENyOgorICAgICAgICAwLDEsMjogMC0wLCAgIDAsIDAgOworICAgICAgICAjIEFDIHNjYW5zOgorICAgICAgICAwOiAgICAgMS0yLCAgIDAsIDAgOyAgICAjIEZpcnN0IHR3byBZIEFDIGNvZWZmaWNpZW50cworICAgICAgICAwOiAgICAgMy01LCAgIDAsIDAgOyAgICAjIFRocmVlIG1vcmUKKyAgICAgICAgMTogICAgIDEtNjMsICAwLCAwIDsgICAgIyBBbGwgQUMgY29lZmZpY2llbnRzIGZvciBDYgorICAgICAgICAyOiAgICAgMS02MywgIDAsIDAgOyAgICAjIEFsbCBBQyBjb2VmZmljaWVudHMgZm9yIENyCisgICAgICAgIDA6ICAgICA2LTksICAgMCwgMCA7ICAgICMgTW9yZSBZIGNvZWZmaWNpZW50cworICAgICAgICAwOiAgICAgMTAtNjMsIDAsIDAgOyAgICAjIFJlbWFpbmluZyBZIGNvZWZmaWNpZW50cwogCiBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgYSBzdWNjZXNzaXZlLWFwcHJveGltYXRpb24gc2NyaXB0LiAgVGhpcyBpcyBlcXVpdmFsZW50CiB0byB0aGUgZGVmYXVsdCBzY3JpcHQgdXNlZCBieSAiY2pwZWcgLXByb2dyZXNzaXZlIiBmb3IgWUNiQ3IgaW1hZ2VzOgogCi0JIyBJbml0aWFsIERDIHNjYW4gZm9yIFksQ2IsQ3IgKGxvd2VzdCBiaXQgbm90IHNlbnQpCi0JMCwxLDI6IDAtMCwgICAwLCAxIDsKLQkjIEZpcnN0IEFDIHNjYW46IHNlbmQgZmlyc3QgNSBZIEFDIGNvZWZmaWNpZW50cywgbWludXMgMiBsb3dlc3QgYml0czoKLQkwOiAgICAgMS01LCAgIDAsIDIgOwotCSMgU2VuZCBhbGwgQ3IsQ2IgQUMgY29lZmZpY2llbnRzLCBtaW51cyBsb3dlc3QgYml0OgotCSMgKGNocm9tYSBkYXRhIGlzIHVzdWFsbHkgdG9vIHNtYWxsIHRvIGJlIHdvcnRoIHN1YmRpdmlkaW5nIGZ1cnRoZXI7Ci0JIyAgYnV0IG5vdGUgd2Ugc2VuZCBDciBmaXJzdCBzaW5jZSBleWUgaXMgbGVhc3Qgc2Vuc2l0aXZlIHRvIENiKQotCTI6ICAgICAxLTYzLCAgMCwgMSA7Ci0JMTogICAgIDEtNjMsICAwLCAxIDsKLQkjIFNlbmQgcmVtYWluaW5nIFkgQUMgY29lZmZpY2llbnRzLCBtaW51cyAyIGxvd2VzdCBiaXRzOgotCTA6ICAgICA2LTYzLCAgMCwgMiA7Ci0JIyBTZW5kIG5leHQtdG8tbG93ZXN0IGJpdCBvZiBhbGwgWSBBQyBjb2VmZmljaWVudHM6Ci0JMDogICAgIDEtNjMsICAyLCAxIDsKLQkjIEF0IHRoaXMgcG9pbnQgd2UndmUgc2VudCBhbGwgYnV0IHRoZSBsb3dlc3QgYml0IG9mIGFsbCBjb2VmZmljaWVudHMuCi0JIyBTZW5kIGxvd2VzdCBiaXQgb2YgREMgY29lZmZpY2llbnRzCi0JMCwxLDI6IDAtMCwgICAxLCAwIDsKLQkjIFNlbmQgbG93ZXN0IGJpdCBvZiBBQyBjb2VmZmljaWVudHMKLQkyOiAgICAgMS02MywgIDEsIDAgOwotCTE6ICAgICAxLTYzLCAgMSwgMCA7Ci0JIyBZIEFDIGxvd2VzdCBiaXQgc2NhbiBpcyBsYXN0OyBpdCdzIHVzdWFsbHkgdGhlIGxhcmdlc3Qgc2NhbgotCTA6ICAgICAxLTYzLCAgMSwgMCA7CisgICAgICAgICMgSW5pdGlhbCBEQyBzY2FuIGZvciBZLENiLENyIChsb3dlc3QgYml0IG5vdCBzZW50KQorICAgICAgICAwLDEsMjogMC0wLCAgIDAsIDEgOworICAgICAgICAjIEZpcnN0IEFDIHNjYW46IHNlbmQgZmlyc3QgNSBZIEFDIGNvZWZmaWNpZW50cywgbWludXMgMiBsb3dlc3QgYml0czoKKyAgICAgICAgMDogICAgIDEtNSwgICAwLCAyIDsKKyAgICAgICAgIyBTZW5kIGFsbCBDcixDYiBBQyBjb2VmZmljaWVudHMsIG1pbnVzIGxvd2VzdCBiaXQ6CisgICAgICAgICMgKGNocm9tYSBkYXRhIGlzIHVzdWFsbHkgdG9vIHNtYWxsIHRvIGJlIHdvcnRoIHN1YmRpdmlkaW5nIGZ1cnRoZXI7CisgICAgICAgICMgIGJ1dCBub3RlIHdlIHNlbmQgQ3IgZmlyc3Qgc2luY2UgZXllIGlzIGxlYXN0IHNlbnNpdGl2ZSB0byBDYikKKyAgICAgICAgMjogICAgIDEtNjMsICAwLCAxIDsKKyAgICAgICAgMTogICAgIDEtNjMsICAwLCAxIDsKKyAgICAgICAgIyBTZW5kIHJlbWFpbmluZyBZIEFDIGNvZWZmaWNpZW50cywgbWludXMgMiBsb3dlc3QgYml0czoKKyAgICAgICAgMDogICAgIDYtNjMsICAwLCAyIDsKKyAgICAgICAgIyBTZW5kIG5leHQtdG8tbG93ZXN0IGJpdCBvZiBhbGwgWSBBQyBjb2VmZmljaWVudHM6CisgICAgICAgIDA6ICAgICAxLTYzLCAgMiwgMSA7CisgICAgICAgICMgQXQgdGhpcyBwb2ludCB3ZSd2ZSBzZW50IGFsbCBidXQgdGhlIGxvd2VzdCBiaXQgb2YgYWxsIGNvZWZmaWNpZW50cy4KKyAgICAgICAgIyBTZW5kIGxvd2VzdCBiaXQgb2YgREMgY29lZmZpY2llbnRzCisgICAgICAgIDAsMSwyOiAwLTAsICAgMSwgMCA7CisgICAgICAgICMgU2VuZCBsb3dlc3QgYml0IG9mIEFDIGNvZWZmaWNpZW50cworICAgICAgICAyOiAgICAgMS02MywgIDEsIDAgOworICAgICAgICAxOiAgICAgMS02MywgIDEsIDAgOworICAgICAgICAjIFkgQUMgbG93ZXN0IGJpdCBzY2FuIGlzIGxhc3Q7IGl0J3MgdXN1YWxseSB0aGUgbGFyZ2VzdCBzY2FuCisgICAgICAgIDA6ICAgICAxLTYzLCAgMSwgMCA7CiAKIEl0IG1heSBiZSB3b3J0aCBwb2ludGluZyBvdXQgdGhhdCB0aGlzIHNjcmlwdCBpcyB0dW5lZCBmb3IgcXVhbGl0eSBzZXR0aW5ncwogb2YgYXJvdW5kIDUwIHRvIDc1LiAgRm9yIGxvd2VyIHF1YWxpdHkgc2V0dGluZ3MsIHlvdSdkIHByb2JhYmx5IHdhbnQgdG8gdXNlCmRpZmYgLS1naXQgYS93cmJtcC5jIGIvd3JibXAuYwppbmRleCAzMjgzYjBmLi5iOGUyMTNiIDEwMDY0NAotLS0gYS93cmJtcC5jCisrKyBiL3dyYm1wLmMKQEAgLTE3LDcgKzE3LDcgQEAKICAqIFRoaXMgY29kZSBjb250cmlidXRlZCBieSBKYW1lcyBBcnRodXIgQm91Y2hlci4KICAqLwogCi0jaW5jbHVkZSAiY2RqcGVnLmgiCQkvKiBDb21tb24gZGVjbHMgZm9yIGNqcGVnL2RqcGVnIGFwcGxpY2F0aW9ucyAqLworI2luY2x1ZGUgImNkanBlZy5oIiAgICAgICAgICAgICAvKiBDb21tb24gZGVjbHMgZm9yIGNqcGVnL2RqcGVnIGFwcGxpY2F0aW9ucyAqLwogCiAjaWZkZWYgQk1QX1NVUFBPUlRFRAogCkBAIC00MiwxNSArNDIsMTUgQEAKIC8qIFByaXZhdGUgdmVyc2lvbiBvZiBkYXRhIGRlc3RpbmF0aW9uIG9iamVjdCAqLwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gIHN0cnVjdCBkanBlZ19kZXN0X3N0cnVjdCBwdWI7CS8qIHB1YmxpYyBmaWVsZHMgKi8KKyAgc3RydWN0IGRqcGVnX2Rlc3Rfc3RydWN0IHB1YjsgLyogcHVibGljIGZpZWxkcyAqLwogCi0gIGJvb2xlYW4gaXNfb3MyOwkJLyogc2F2ZXMgdGhlIE9TMiBmb3JtYXQgcmVxdWVzdCBmbGFnICovCisgIGJvb2xlYW4gaXNfb3MyOyAgICAgICAgICAgICAgIC8qIHNhdmVzIHRoZSBPUzIgZm9ybWF0IHJlcXVlc3QgZmxhZyAqLwogCi0gIGp2aXJ0X3NhcnJheV9wdHIgd2hvbGVfaW1hZ2U7CS8qIG5lZWRlZCB0byByZXZlcnNlIHJvdyBvcmRlciAqLwotICBKRElNRU5TSU9OIGRhdGFfd2lkdGg7CS8qIEpTQU1QTEVzIHBlciByb3cgKi8KLSAgSkRJTUVOU0lPTiByb3dfd2lkdGg7CQkvKiBwaHlzaWNhbCB3aWR0aCBvZiBvbmUgcm93IGluIHRoZSBCTVAgZmlsZSAqLwotICBpbnQgcGFkX2J5dGVzOwkJLyogbnVtYmVyIG9mIHBhZGRpbmcgYnl0ZXMgbmVlZGVkIHBlciByb3cgKi8KLSAgSkRJTUVOU0lPTiBjdXJfb3V0cHV0X3JvdzsJLyogbmV4dCByb3cjIHRvIHdyaXRlIHRvIHZpcnR1YWwgYXJyYXkgKi8KKyAganZpcnRfc2FycmF5X3B0ciB3aG9sZV9pbWFnZTsgLyogbmVlZGVkIHRvIHJldmVyc2Ugcm93IG9yZGVyICovCisgIEpESU1FTlNJT04gZGF0YV93aWR0aDsgICAgICAgIC8qIEpTQU1QTEVzIHBlciByb3cgKi8KKyAgSkRJTUVOU0lPTiByb3dfd2lkdGg7ICAgICAgICAgLyogcGh5c2ljYWwgd2lkdGggb2Ygb25lIHJvdyBpbiB0aGUgQk1QIGZpbGUgKi8KKyAgaW50IHBhZF9ieXRlczsgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHBhZGRpbmcgYnl0ZXMgbmVlZGVkIHBlciByb3cgKi8KKyAgSkRJTUVOU0lPTiBjdXJfb3V0cHV0X3JvdzsgICAgLyogbmV4dCByb3cjIHRvIHdyaXRlIHRvIHZpcnR1YWwgYXJyYXkgKi8KIH0gYm1wX2Rlc3Rfc3RydWN0OwogCiB0eXBlZGVmIGJtcF9kZXN0X3N0cnVjdCAqIGJtcF9kZXN0X3B0cjsKQEAgLTU4LDggKzU4LDggQEAKIAogLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KIExPQ0FMKHZvaWQpIHdyaXRlX2NvbG9ybWFwCi0JSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBibXBfZGVzdF9wdHIgZGVzdCwKLQkgICAgIGludCBtYXBfY29sb3JzLCBpbnQgbWFwX2VudHJ5X3NpemUpKTsKKyAgICAgICAgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBibXBfZGVzdF9wdHIgZGVzdCwKKyAgICAgICAgICAgICBpbnQgbWFwX2NvbG9ycywgaW50IG1hcF9lbnRyeV9zaXplKSk7CiAKIAogLyoKQEAgLTY5LDcgKzY5LDcgQEAKIAogTUVUSE9EREVGKHZvaWQpCiBwdXRfcGl4ZWxfcm93cyAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgZGpwZWdfZGVzdF9wdHIgZGluZm8sCi0JCUpESU1FTlNJT04gcm93c19zdXBwbGllZCkKKyAgICAgICAgICAgICAgICBKRElNRU5TSU9OIHJvd3Nfc3VwcGxpZWQpCiAvKiBUaGlzIHZlcnNpb24gaXMgZm9yIHdyaXRpbmcgMjQtYml0IHBpeGVscyAqLwogewogICBibXBfZGVzdF9wdHIgZGVzdCA9IChibXBfZGVzdF9wdHIpIGRpbmZvOwpAQCAtOTAsNyArOTAsNyBAQAogICBpbnB0ciA9IGRlc3QtPnB1Yi5idWZmZXJbMF07CiAgIG91dHB0ciA9IGltYWdlX3B0clswXTsKICAgZm9yIChjb2wgPSBjaW5mby0+b3V0cHV0X3dpZHRoOyBjb2wgPiAwOyBjb2wtLSkgewotICAgIG91dHB0clsyXSA9ICppbnB0cisrOwkvKiBjYW4gb21pdCBHRVRKU0FNUExFKCkgc2FmZWx5ICovCisgICAgb3V0cHRyWzJdID0gKmlucHRyKys7ICAgICAgIC8qIGNhbiBvbWl0IEdFVEpTQU1QTEUoKSBzYWZlbHkgKi8KICAgICBvdXRwdHJbMV0gPSAqaW5wdHIrKzsKICAgICBvdXRwdHJbMF0gPSAqaW5wdHIrKzsKICAgICBvdXRwdHIgKz0gMzsKQEAgLTEwNCw3ICsxMDQsNyBAQAogCiBNRVRIT0RERUYodm9pZCkKIHB1dF9ncmF5X3Jvd3MgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGRqcGVnX2Rlc3RfcHRyIGRpbmZvLAotCSAgICAgICBKRElNRU5TSU9OIHJvd3Nfc3VwcGxpZWQpCisgICAgICAgICAgICAgICBKRElNRU5TSU9OIHJvd3Nfc3VwcGxpZWQpCiAvKiBUaGlzIHZlcnNpb24gaXMgZm9yIGdyYXlzY2FsZSBPUiBxdWFudGl6ZWQgY29sb3Igb3V0cHV0ICovCiB7CiAgIGJtcF9kZXN0X3B0ciBkZXN0ID0gKGJtcF9kZXN0X3B0cikgZGluZm87CkBAIC0xMjMsNyArMTIzLDcgQEAKICAgaW5wdHIgPSBkZXN0LT5wdWIuYnVmZmVyWzBdOwogICBvdXRwdHIgPSBpbWFnZV9wdHJbMF07CiAgIGZvciAoY29sID0gY2luZm8tPm91dHB1dF93aWR0aDsgY29sID4gMDsgY29sLS0pIHsKLSAgICAqb3V0cHRyKysgPSAqaW5wdHIrKzsJLyogY2FuIG9taXQgR0VUSlNBTVBMRSgpIHNhZmVseSAqLworICAgICpvdXRwdHIrKyA9ICppbnB0cisrOyAgICAgICAvKiBjYW4gb21pdCBHRVRKU0FNUExFKCkgc2FmZWx5ICovCiAgIH0KIAogICAvKiBaZXJvIG91dCB0aGUgcGFkIGJ5dGVzLiAqLwpAQCAtMTYwLDEzICsxNjAsMTMgQEAKICAgY2hhciBibXBmaWxlaGVhZGVyWzE0XTsKICAgY2hhciBibXBpbmZvaGVhZGVyWzQwXTsKICNkZWZpbmUgUFVUXzJCKGFycmF5LG9mZnNldCx2YWx1ZSkgIFwKLQkoYXJyYXlbb2Zmc2V0XSA9IChjaGFyKSAoKHZhbHVlKSAmIDB4RkYpLCBcCi0JIGFycmF5W29mZnNldCsxXSA9IChjaGFyKSAoKCh2YWx1ZSkgPj4gOCkgJiAweEZGKSkKKyAgICAgICAgKGFycmF5W29mZnNldF0gPSAoY2hhcikgKCh2YWx1ZSkgJiAweEZGKSwgXAorICAgICAgICAgYXJyYXlbb2Zmc2V0KzFdID0gKGNoYXIpICgoKHZhbHVlKSA+PiA4KSAmIDB4RkYpKQogI2RlZmluZSBQVVRfNEIoYXJyYXksb2Zmc2V0LHZhbHVlKSAgXAotCShhcnJheVtvZmZzZXRdID0gKGNoYXIpICgodmFsdWUpICYgMHhGRiksIFwKLQkgYXJyYXlbb2Zmc2V0KzFdID0gKGNoYXIpICgoKHZhbHVlKSA+PiA4KSAmIDB4RkYpLCBcCi0JIGFycmF5W29mZnNldCsyXSA9IChjaGFyKSAoKCh2YWx1ZSkgPj4gMTYpICYgMHhGRiksIFwKLQkgYXJyYXlbb2Zmc2V0KzNdID0gKGNoYXIpICgoKHZhbHVlKSA+PiAyNCkgJiAweEZGKSkKKyAgICAgICAgKGFycmF5W29mZnNldF0gPSAoY2hhcikgKCh2YWx1ZSkgJiAweEZGKSwgXAorICAgICAgICAgYXJyYXlbb2Zmc2V0KzFdID0gKGNoYXIpICgoKHZhbHVlKSA+PiA4KSAmIDB4RkYpLCBcCisgICAgICAgICBhcnJheVtvZmZzZXQrMl0gPSAoY2hhcikgKCgodmFsdWUpID4+IDE2KSAmIDB4RkYpLCBcCisgICAgICAgICBhcnJheVtvZmZzZXQrM10gPSAoY2hhcikgKCgodmFsdWUpID4+IDI0KSAmIDB4RkYpKQogICBJTlQzMiBoZWFkZXJzaXplLCBiZlNpemU7CiAgIGludCBiaXRzX3Blcl9waXhlbCwgY21hcF9lbnRyaWVzOwogCkBAIC0xODksMjMgKzE4OSwyMyBAQAogICAvKiBGaWxlIHNpemUgKi8KICAgaGVhZGVyc2l6ZSA9IDE0ICsgNDAgKyBjbWFwX2VudHJpZXMgKiA0OyAvKiBIZWFkZXIgYW5kIGNvbG9ybWFwICovCiAgIGJmU2l6ZSA9IGhlYWRlcnNpemUgKyAoSU5UMzIpIGRlc3QtPnJvd193aWR0aCAqIChJTlQzMikgY2luZm8tPm91dHB1dF9oZWlnaHQ7Ci0gIAorCiAgIC8qIFNldCB1bnVzZWQgZmllbGRzIG9mIGhlYWRlciB0byAwICovCiAgIE1FTVpFUk8oYm1wZmlsZWhlYWRlciwgU0laRU9GKGJtcGZpbGVoZWFkZXIpKTsKICAgTUVNWkVSTyhibXBpbmZvaGVhZGVyLCBTSVpFT0YoYm1waW5mb2hlYWRlcikpOwogCiAgIC8qIEZpbGwgdGhlIGZpbGUgaGVhZGVyICovCi0gIGJtcGZpbGVoZWFkZXJbMF0gPSAweDQyOwkvKiBmaXJzdCAyIGJ5dGVzIGFyZSBBU0NJSSAnQicsICdNJyAqLworICBibXBmaWxlaGVhZGVyWzBdID0gMHg0MjsgICAgICAvKiBmaXJzdCAyIGJ5dGVzIGFyZSBBU0NJSSAnQicsICdNJyAqLwogICBibXBmaWxlaGVhZGVyWzFdID0gMHg0RDsKICAgUFVUXzRCKGJtcGZpbGVoZWFkZXIsIDIsIGJmU2l6ZSk7IC8qIGJmU2l6ZSAqLwogICAvKiB3ZSBsZWF2ZSBiZlJlc2VydmVkMSAmIGJmUmVzZXJ2ZWQyID0gMCAqLwogICBQVVRfNEIoYm1wZmlsZWhlYWRlciwgMTAsIGhlYWRlcnNpemUpOyAvKiBiZk9mZkJpdHMgKi8KIAogICAvKiBGaWxsIHRoZSBpbmZvIGhlYWRlciAoTWljcm9zb2Z0IGNhbGxzIHRoaXMgYSBCSVRNQVBJTkZPSEVBREVSKSAqLwotICBQVVRfMkIoYm1waW5mb2hlYWRlciwgMCwgNDApOwkvKiBiaVNpemUgKi8KKyAgUFVUXzJCKGJtcGluZm9oZWFkZXIsIDAsIDQwKTsgLyogYmlTaXplICovCiAgIFBVVF80QihibXBpbmZvaGVhZGVyLCA0LCBjaW5mby0+b3V0cHV0X3dpZHRoKTsgLyogYmlXaWR0aCAqLwogICBQVVRfNEIoYm1waW5mb2hlYWRlciwgOCwgY2luZm8tPm91dHB1dF9oZWlnaHQpOyAvKiBiaUhlaWdodCAqLwotICBQVVRfMkIoYm1waW5mb2hlYWRlciwgMTIsIDEpOwkvKiBiaVBsYW5lcyAtIG11c3QgYmUgMSAqLworICBQVVRfMkIoYm1waW5mb2hlYWRlciwgMTIsIDEpOyAvKiBiaVBsYW5lcyAtIG11c3QgYmUgMSAqLwogICBQVVRfMkIoYm1waW5mb2hlYWRlciwgMTQsIGJpdHNfcGVyX3BpeGVsKTsgLyogYmlCaXRDb3VudCAqLwogICAvKiB3ZSBsZWF2ZSBiaUNvbXByZXNzaW9uID0gMCwgZm9yIG5vbmUgKi8KICAgLyogd2UgbGVhdmUgYmlTaXplSW1hZ2UgPSAwOyB0aGlzIGlzIGNvcnJlY3QgZm9yIHVuY29tcHJlc3NlZCBkYXRhICovCkBAIC0yNTQsMjMgKzI1NCwyMyBAQAogICAvKiBGaWxlIHNpemUgKi8KICAgaGVhZGVyc2l6ZSA9IDE0ICsgMTIgKyBjbWFwX2VudHJpZXMgKiAzOyAvKiBIZWFkZXIgYW5kIGNvbG9ybWFwICovCiAgIGJmU2l6ZSA9IGhlYWRlcnNpemUgKyAoSU5UMzIpIGRlc3QtPnJvd193aWR0aCAqIChJTlQzMikgY2luZm8tPm91dHB1dF9oZWlnaHQ7Ci0gIAorCiAgIC8qIFNldCB1bnVzZWQgZmllbGRzIG9mIGhlYWRlciB0byAwICovCiAgIE1FTVpFUk8oYm1wZmlsZWhlYWRlciwgU0laRU9GKGJtcGZpbGVoZWFkZXIpKTsKICAgTUVNWkVSTyhibXBjb3JlaGVhZGVyLCBTSVpFT0YoYm1wY29yZWhlYWRlcikpOwogCiAgIC8qIEZpbGwgdGhlIGZpbGUgaGVhZGVyICovCi0gIGJtcGZpbGVoZWFkZXJbMF0gPSAweDQyOwkvKiBmaXJzdCAyIGJ5dGVzIGFyZSBBU0NJSSAnQicsICdNJyAqLworICBibXBmaWxlaGVhZGVyWzBdID0gMHg0MjsgICAgICAvKiBmaXJzdCAyIGJ5dGVzIGFyZSBBU0NJSSAnQicsICdNJyAqLwogICBibXBmaWxlaGVhZGVyWzFdID0gMHg0RDsKICAgUFVUXzRCKGJtcGZpbGVoZWFkZXIsIDIsIGJmU2l6ZSk7IC8qIGJmU2l6ZSAqLwogICAvKiB3ZSBsZWF2ZSBiZlJlc2VydmVkMSAmIGJmUmVzZXJ2ZWQyID0gMCAqLwogICBQVVRfNEIoYm1wZmlsZWhlYWRlciwgMTAsIGhlYWRlcnNpemUpOyAvKiBiZk9mZkJpdHMgKi8KIAogICAvKiBGaWxsIHRoZSBpbmZvIGhlYWRlciAoTWljcm9zb2Z0IGNhbGxzIHRoaXMgYSBCSVRNQVBDT1JFSEVBREVSKSAqLwotICBQVVRfMkIoYm1wY29yZWhlYWRlciwgMCwgMTIpOwkvKiBiY1NpemUgKi8KKyAgUFVUXzJCKGJtcGNvcmVoZWFkZXIsIDAsIDEyKTsgLyogYmNTaXplICovCiAgIFBVVF8yQihibXBjb3JlaGVhZGVyLCA0LCBjaW5mby0+b3V0cHV0X3dpZHRoKTsgLyogYmNXaWR0aCAqLwogICBQVVRfMkIoYm1wY29yZWhlYWRlciwgNiwgY2luZm8tPm91dHB1dF9oZWlnaHQpOyAvKiBiY0hlaWdodCAqLwotICBQVVRfMkIoYm1wY29yZWhlYWRlciwgOCwgMSk7CS8qIGJjUGxhbmVzIC0gbXVzdCBiZSAxICovCisgIFBVVF8yQihibXBjb3JlaGVhZGVyLCA4LCAxKTsgIC8qIGJjUGxhbmVzIC0gbXVzdCBiZSAxICovCiAgIFBVVF8yQihibXBjb3JlaGVhZGVyLCAxMCwgYml0c19wZXJfcGl4ZWwpOyAvKiBiY0JpdENvdW50ICovCiAKICAgaWYgKEpGV1JJVEUoZGVzdC0+cHViLm91dHB1dF9maWxlLCBibXBmaWxlaGVhZGVyLCAxNCkgIT0gKHNpemVfdCkgMTQpCkBAIC0yOTAsNyArMjkwLDcgQEAKIAogTE9DQUwodm9pZCkKIHdyaXRlX2NvbG9ybWFwIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBibXBfZGVzdF9wdHIgZGVzdCwKLQkJaW50IG1hcF9jb2xvcnMsIGludCBtYXBfZW50cnlfc2l6ZSkKKyAgICAgICAgICAgICAgICBpbnQgbWFwX2NvbG9ycywgaW50IG1hcF9lbnRyeV9zaXplKQogewogICBKU0FNUEFSUkFZIGNvbG9ybWFwID0gY2luZm8tPmNvbG9ybWFwOwogICBpbnQgbnVtX2NvbG9ycyA9IGNpbmZvLT5hY3R1YWxfbnVtYmVyX29mX2NvbG9yczsKQEAgLTMwMSwyMCArMzAxLDIwIEBACiAgICAgaWYgKGNpbmZvLT5vdXRfY29sb3JfY29tcG9uZW50cyA9PSAzKSB7CiAgICAgICAvKiBOb3JtYWwgY2FzZSB3aXRoIFJHQiBjb2xvcm1hcCAqLwogICAgICAgZm9yIChpID0gMDsgaSA8IG51bV9jb2xvcnM7IGkrKykgewotCXB1dGMoR0VUSlNBTVBMRShjb2xvcm1hcFsyXVtpXSksIG91dGZpbGUpOwotCXB1dGMoR0VUSlNBTVBMRShjb2xvcm1hcFsxXVtpXSksIG91dGZpbGUpOwotCXB1dGMoR0VUSlNBTVBMRShjb2xvcm1hcFswXVtpXSksIG91dGZpbGUpOwotCWlmIChtYXBfZW50cnlfc2l6ZSA9PSA0KQotCSAgcHV0YygwLCBvdXRmaWxlKTsKKyAgICAgICAgcHV0YyhHRVRKU0FNUExFKGNvbG9ybWFwWzJdW2ldKSwgb3V0ZmlsZSk7CisgICAgICAgIHB1dGMoR0VUSlNBTVBMRShjb2xvcm1hcFsxXVtpXSksIG91dGZpbGUpOworICAgICAgICBwdXRjKEdFVEpTQU1QTEUoY29sb3JtYXBbMF1baV0pLCBvdXRmaWxlKTsKKyAgICAgICAgaWYgKG1hcF9lbnRyeV9zaXplID09IDQpCisgICAgICAgICAgcHV0YygwLCBvdXRmaWxlKTsKICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgLyogR3JheXNjYWxlIGNvbG9ybWFwIChvbmx5IGhhcHBlbnMgd2l0aCBncmF5c2NhbGUgcXVhbnRpemF0aW9uKSAqLwogICAgICAgZm9yIChpID0gMDsgaSA8IG51bV9jb2xvcnM7IGkrKykgewotCXB1dGMoR0VUSlNBTVBMRShjb2xvcm1hcFswXVtpXSksIG91dGZpbGUpOwotCXB1dGMoR0VUSlNBTVBMRShjb2xvcm1hcFswXVtpXSksIG91dGZpbGUpOwotCXB1dGMoR0VUSlNBTVBMRShjb2xvcm1hcFswXVtpXSksIG91dGZpbGUpOwotCWlmIChtYXBfZW50cnlfc2l6ZSA9PSA0KQotCSAgcHV0YygwLCBvdXRmaWxlKTsKKyAgICAgICAgcHV0YyhHRVRKU0FNUExFKGNvbG9ybWFwWzBdW2ldKSwgb3V0ZmlsZSk7CisgICAgICAgIHB1dGMoR0VUSlNBTVBMRShjb2xvcm1hcFswXVtpXSksIG91dGZpbGUpOworICAgICAgICBwdXRjKEdFVEpTQU1QTEUoY29sb3JtYXBbMF1baV0pLCBvdXRmaWxlKTsKKyAgICAgICAgaWYgKG1hcF9lbnRyeV9zaXplID09IDQpCisgICAgICAgICAgcHV0YygwLCBvdXRmaWxlKTsKICAgICAgIH0KICAgICB9CiAgIH0gZWxzZSB7CkBAIC0zMjQsMTAgKzMyNCwxMCBAQAogICAgICAgcHV0YyhpLCBvdXRmaWxlKTsKICAgICAgIHB1dGMoaSwgb3V0ZmlsZSk7CiAgICAgICBpZiAobWFwX2VudHJ5X3NpemUgPT0gNCkKLQlwdXRjKDAsIG91dGZpbGUpOworICAgICAgICBwdXRjKDAsIG91dGZpbGUpOwogICAgIH0KICAgfQotICAvKiBQYWQgY29sb3JtYXAgd2l0aCB6ZXJvcyB0byBlbnN1cmUgc3BlY2lmaWVkIG51bWJlciBvZiBjb2xvcm1hcCBlbnRyaWVzICovIAorICAvKiBQYWQgY29sb3JtYXAgd2l0aCB6ZXJvcyB0byBlbnN1cmUgc3BlY2lmaWVkIG51bWJlciBvZiBjb2xvcm1hcCBlbnRyaWVzICovCiAgIGlmIChpID4gbWFwX2NvbG9ycykKICAgICBFUlJFWElUMShjaW5mbywgSkVSUl9UT09fTUFOWV9DT0xPUlMsIGkpOwogICBmb3IgKDsgaSA8IG1hcF9jb2xvcnM7IGkrKykgewpAQCAtMzk1LDcgKzM5NSw3IEBACiAgIC8qIENyZWF0ZSBtb2R1bGUgaW50ZXJmYWNlIG9iamVjdCwgZmlsbCBpbiBtZXRob2QgcG9pbnRlcnMgKi8KICAgZGVzdCA9IChibXBfZGVzdF9wdHIpCiAgICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAotCQkJCSAgU0laRU9GKGJtcF9kZXN0X3N0cnVjdCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJWkVPRihibXBfZGVzdF9zdHJ1Y3QpKTsKICAgZGVzdC0+cHViLnN0YXJ0X291dHB1dCA9IHN0YXJ0X291dHB1dF9ibXA7CiAgIGRlc3QtPnB1Yi5maW5pc2hfb3V0cHV0ID0gZmluaXNoX291dHB1dF9ibXA7CiAgIGRlc3QtPmlzX29zMiA9IGlzX29zMjsKZGlmZiAtLWdpdCBhL3dyZ2lmLmMgYi93cmdpZi5jCmluZGV4IDVmZTgzMjguLjE5M2Y3YjUgMTAwNjQ0Ci0tLSBhL3dyZ2lmLmMKKysrIGIvd3JnaWYuYwpAQCAtMzcsNyArMzcsNyBAQAogICogICAgQ29tcHVTZXJ2ZSBJbmNvcnBvcmF0ZWQuIgogICovCiAKLSNpbmNsdWRlICJjZGpwZWcuaCIJCS8qIENvbW1vbiBkZWNscyBmb3IgY2pwZWcvZGpwZWcgYXBwbGljYXRpb25zICovCisjaW5jbHVkZSAiY2RqcGVnLmgiICAgICAgICAgICAgIC8qIENvbW1vbiBkZWNscyBmb3IgY2pwZWcvZGpwZWcgYXBwbGljYXRpb25zICovCiAKICNpZmRlZiBHSUZfU1VQUE9SVEVECiAKQEAgLTQ1LDMxICs0NSwzMSBAQAogLyogUHJpdmF0ZSB2ZXJzaW9uIG9mIGRhdGEgZGVzdGluYXRpb24gb2JqZWN0ICovCiAKIHR5cGVkZWYgc3RydWN0IHsKLSAgc3RydWN0IGRqcGVnX2Rlc3Rfc3RydWN0IHB1YjsJLyogcHVibGljIGZpZWxkcyAqLworICBzdHJ1Y3QgZGpwZWdfZGVzdF9zdHJ1Y3QgcHViOyAvKiBwdWJsaWMgZmllbGRzICovCiAKLSAgal9kZWNvbXByZXNzX3B0ciBjaW5mbzsJLyogYmFjayBsaW5rIHNhdmVzIHBhc3Npbmcgc2VwYXJhdGUgcGFybSAqLworICBqX2RlY29tcHJlc3NfcHRyIGNpbmZvOyAgICAgICAvKiBiYWNrIGxpbmsgc2F2ZXMgcGFzc2luZyBzZXBhcmF0ZSBwYXJtICovCiAKICAgLyogU3RhdGUgZm9yIHBhY2tpbmcgdmFyaWFibGUtd2lkdGggY29kZXMgaW50byBhIGJpdHN0cmVhbSAqLwotICBpbnQgbl9iaXRzOwkJCS8qIGN1cnJlbnQgbnVtYmVyIG9mIGJpdHMvY29kZSAqLwotICBpbnQgbWF4Y29kZTsJCQkvKiBtYXhpbXVtIGNvZGUsIGdpdmVuIG5fYml0cyAqLwotICBJTlQzMiBjdXJfYWNjdW07CQkvKiBob2xkcyBiaXRzIG5vdCB5ZXQgb3V0cHV0ICovCi0gIGludCBjdXJfYml0czsJCQkvKiAjIG9mIGJpdHMgaW4gY3VyX2FjY3VtICovCisgIGludCBuX2JpdHM7ICAgICAgICAgICAgICAgICAgIC8qIGN1cnJlbnQgbnVtYmVyIG9mIGJpdHMvY29kZSAqLworICBpbnQgbWF4Y29kZTsgICAgICAgICAgICAgICAgICAvKiBtYXhpbXVtIGNvZGUsIGdpdmVuIG5fYml0cyAqLworICBJTlQzMiBjdXJfYWNjdW07ICAgICAgICAgICAgICAvKiBob2xkcyBiaXRzIG5vdCB5ZXQgb3V0cHV0ICovCisgIGludCBjdXJfYml0czsgICAgICAgICAgICAgICAgIC8qICMgb2YgYml0cyBpbiBjdXJfYWNjdW0gKi8KIAogICAvKiBTdGF0ZSBmb3IgR0lGIGNvZGUgYXNzaWdubWVudCAqLwotICBpbnQgQ2xlYXJDb2RlOwkJLyogY2xlYXIgY29kZSAoZG9lc24ndCBjaGFuZ2UpICovCi0gIGludCBFT0ZDb2RlOwkJCS8qIEVPRiBjb2RlIChkaXR0bykgKi8KLSAgaW50IGNvZGVfY291bnRlcjsJCS8qIGNvdW50cyBvdXRwdXQgc3ltYm9scyAqLworICBpbnQgQ2xlYXJDb2RlOyAgICAgICAgICAgICAgICAvKiBjbGVhciBjb2RlIChkb2Vzbid0IGNoYW5nZSkgKi8KKyAgaW50IEVPRkNvZGU7ICAgICAgICAgICAgICAgICAgLyogRU9GIGNvZGUgKGRpdHRvKSAqLworICBpbnQgY29kZV9jb3VudGVyOyAgICAgICAgICAgICAvKiBjb3VudHMgb3V0cHV0IHN5bWJvbHMgKi8KIAogICAvKiBHSUYgZGF0YSBwYWNrZXQgY29uc3RydWN0aW9uIGJ1ZmZlciAqLwotICBpbnQgYnl0ZXNpbnBrdDsJCS8qICMgb2YgYnl0ZXMgaW4gY3VycmVudCBwYWNrZXQgKi8KLSAgY2hhciBwYWNrZXRidWZbMjU2XTsJCS8qIHdvcmtzcGFjZSBmb3IgYWNjdW11bGF0aW5nIHBhY2tldCAqLworICBpbnQgYnl0ZXNpbnBrdDsgICAgICAgICAgICAgICAvKiAjIG9mIGJ5dGVzIGluIGN1cnJlbnQgcGFja2V0ICovCisgIGNoYXIgcGFja2V0YnVmWzI1Nl07ICAgICAgICAgIC8qIHdvcmtzcGFjZSBmb3IgYWNjdW11bGF0aW5nIHBhY2tldCAqLwogCiB9IGdpZl9kZXN0X3N0cnVjdDsKIAogdHlwZWRlZiBnaWZfZGVzdF9zdHJ1Y3QgKiBnaWZfZGVzdF9wdHI7CiAKIC8qIExhcmdlc3QgdmFsdWUgdGhhdCB3aWxsIGZpdCBpbiBOIGJpdHMgKi8KLSNkZWZpbmUgTUFYQ09ERShuX2JpdHMpCSgoMSA8PCAobl9iaXRzKSkgLSAxKQorI2RlZmluZSBNQVhDT0RFKG5fYml0cykgKCgxIDw8IChuX2JpdHMpKSAtIDEpCiAKIAogLyoKQEAgLTgxLDEwICs4MSwxMCBAQAogZmx1c2hfcGFja2V0IChnaWZfZGVzdF9wdHIgZGluZm8pCiAvKiBmbHVzaCBhbnkgYWNjdW11bGF0ZWQgZGF0YSAqLwogewotICBpZiAoZGluZm8tPmJ5dGVzaW5wa3QgPiAwKSB7CS8qIG5ldmVyIHdyaXRlIHplcm8tbGVuZ3RoIHBhY2tldCAqLworICBpZiAoZGluZm8tPmJ5dGVzaW5wa3QgPiAwKSB7ICAvKiBuZXZlciB3cml0ZSB6ZXJvLWxlbmd0aCBwYWNrZXQgKi8KICAgICBkaW5mby0+cGFja2V0YnVmWzBdID0gKGNoYXIpIGRpbmZvLT5ieXRlc2lucGt0Kys7CiAgICAgaWYgKEpGV1JJVEUoZGluZm8tPnB1Yi5vdXRwdXRfZmlsZSwgZGluZm8tPnBhY2tldGJ1ZiwgZGluZm8tPmJ5dGVzaW5wa3QpCi0JIT0gKHNpemVfdCkgZGluZm8tPmJ5dGVzaW5wa3QpCisgICAgICAgICE9IChzaXplX3QpIGRpbmZvLT5ieXRlc2lucGt0KQogICAgICAgRVJSRVhJVChkaW5mby0+Y2luZm8sIEpFUlJfRklMRV9XUklURSk7CiAgICAgZGluZm8tPmJ5dGVzaW5wa3QgPSAwOwogICB9CkBAIC05MywxMCArOTMsMTAgQEAKIAogLyogQWRkIGEgY2hhcmFjdGVyIHRvIGN1cnJlbnQgcGFja2V0OyBmbHVzaCB0byBkaXNrIGlmIG5lY2Vzc2FyeSAqLwogI2RlZmluZSBDSEFSX09VVChkaW5mbyxjKSAgXAotCXsgKGRpbmZvKS0+cGFja2V0YnVmWysrKGRpbmZvKS0+Ynl0ZXNpbnBrdF0gPSAoY2hhcikgKGMpOyAgXAotCSAgICBpZiAoKGRpbmZvKS0+Ynl0ZXNpbnBrdCA+PSAyNTUpICBcCi0JICAgICAgZmx1c2hfcGFja2V0KGRpbmZvKTsgIFwKLQl9CisgICAgICAgIHsgKGRpbmZvKS0+cGFja2V0YnVmWysrKGRpbmZvKS0+Ynl0ZXNpbnBrdF0gPSAoY2hhcikgKGMpOyAgXAorICAgICAgICAgICAgaWYgKChkaW5mbyktPmJ5dGVzaW5wa3QgPj0gMjU1KSAgXAorICAgICAgICAgICAgICBmbHVzaF9wYWNrZXQoZGluZm8pOyAgXAorICAgICAgICB9CiAKIAogLyogUm91dGluZSB0byBjb252ZXJ0IHZhcmlhYmxlLXdpZHRoIGNvZGVzIGludG8gYSBieXRlIHN0cmVhbSAqLwpAQCAtMTczLDcgKzE3Myw3IEBACiAgICAgZGluZm8tPmNvZGVfY291bnRlcisrOwogICB9IGVsc2UgewogICAgIG91dHB1dChkaW5mbywgZGluZm8tPkNsZWFyQ29kZSk7Ci0gICAgZGluZm8tPmNvZGVfY291bnRlciA9IGRpbmZvLT5DbGVhckNvZGUgKyAyOwkvKiByZXNldCB0aGUgY291bnRlciAqLworICAgIGRpbmZvLT5jb2RlX2NvdW50ZXIgPSBkaW5mby0+Q2xlYXJDb2RlICsgMjsgLyogcmVzZXQgdGhlIGNvdW50ZXIgKi8KICAgfQogfQogCkBAIC0yMTgsNyArMjE4LDcgQEAKIExPQ0FMKHZvaWQpCiBlbWl0X2hlYWRlciAoZ2lmX2Rlc3RfcHRyIGRpbmZvLCBpbnQgbnVtX2NvbG9ycywgSlNBTVBBUlJBWSBjb2xvcm1hcCkKIC8qIE91dHB1dCB0aGUgR0lGIGZpbGUgaGVhZGVyLCBpbmNsdWRpbmcgY29sb3IgbWFwICovCi0vKiBJZiBjb2xvcm1hcD09TlVMTCwgc3ludGhlc2l6ZSBhIGdyYXktc2NhbGUgY29sb3JtYXAgKi8KKy8qIElmIGNvbG9ybWFwPT1OVUxMLCBzeW50aGVzaXplIGEgZ3JheXNjYWxlIGNvbG9ybWFwICovCiB7CiAgIGludCBCaXRzUGVyUGl4ZWwsIENvbG9yTWFwU2l6ZSwgSW5pdENvZGVTaXplLCBGbGFnQnl0ZTsKICAgaW50IGNzaGlmdCA9IGRpbmZvLT5jaW5mby0+ZGF0YV9wcmVjaXNpb24gLSA4OwpAQCAtMjQ4LDkgKzI0OCw5IEBACiAgIC8qIFdyaXRlIHRoZSBMb2dpY2FsIFNjcmVlbiBEZXNjcmlwdG9yICovCiAgIHB1dF93b3JkKGRpbmZvLCAodW5zaWduZWQgaW50KSBkaW5mby0+Y2luZm8tPm91dHB1dF93aWR0aCk7CiAgIHB1dF93b3JkKGRpbmZvLCAodW5zaWduZWQgaW50KSBkaW5mby0+Y2luZm8tPm91dHB1dF9oZWlnaHQpOwotICBGbGFnQnl0ZSA9IDB4ODA7CQkvKiBZZXMsIHRoZXJlIGlzIGEgZ2xvYmFsIGNvbG9yIHRhYmxlICovCisgIEZsYWdCeXRlID0gMHg4MDsgICAgICAgICAgICAgIC8qIFllcywgdGhlcmUgaXMgYSBnbG9iYWwgY29sb3IgdGFibGUgKi8KICAgRmxhZ0J5dGUgfD0gKEJpdHNQZXJQaXhlbC0xKSA8PCA0OyAvKiBjb2xvciByZXNvbHV0aW9uICovCi0gIEZsYWdCeXRlIHw9IChCaXRzUGVyUGl4ZWwtMSk7CS8qIHNpemUgb2YgZ2xvYmFsIGNvbG9yIHRhYmxlICovCisgIEZsYWdCeXRlIHw9IChCaXRzUGVyUGl4ZWwtMSk7IC8qIHNpemUgb2YgZ2xvYmFsIGNvbG9yIHRhYmxlICovCiAgIHB1dGMoRmxhZ0J5dGUsIGRpbmZvLT5wdWIub3V0cHV0X2ZpbGUpOwogICBwdXRjKDAsIGRpbmZvLT5wdWIub3V0cHV0X2ZpbGUpOyAvKiBCYWNrZ3JvdW5kIGNvbG9yIGluZGV4ICovCiAgIHB1dGMoMCwgZGluZm8tPnB1Yi5vdXRwdXRfZmlsZSk7IC8qIFJlc2VydmVkIChhc3BlY3QgcmF0aW8gaW4gR0lGODkpICovCkBAIC0yNjAsMTggKzI2MCwxOCBAQAogICBmb3IgKGk9MDsgaSA8IENvbG9yTWFwU2l6ZTsgaSsrKSB7CiAgICAgaWYgKGkgPCBudW1fY29sb3JzKSB7CiAgICAgICBpZiAoY29sb3JtYXAgIT0gTlVMTCkgewotCWlmIChkaW5mby0+Y2luZm8tPm91dF9jb2xvcl9zcGFjZSA9PSBKQ1NfUkdCKSB7Ci0JICAvKiBOb3JtYWwgY2FzZTogUkdCIGNvbG9yIG1hcCAqLwotCSAgcHV0YyhHRVRKU0FNUExFKGNvbG9ybWFwWzBdW2ldKSA+PiBjc2hpZnQsIGRpbmZvLT5wdWIub3V0cHV0X2ZpbGUpOwotCSAgcHV0YyhHRVRKU0FNUExFKGNvbG9ybWFwWzFdW2ldKSA+PiBjc2hpZnQsIGRpbmZvLT5wdWIub3V0cHV0X2ZpbGUpOwotCSAgcHV0YyhHRVRKU0FNUExFKGNvbG9ybWFwWzJdW2ldKSA+PiBjc2hpZnQsIGRpbmZvLT5wdWIub3V0cHV0X2ZpbGUpOwotCX0gZWxzZSB7Ci0JICAvKiBHcmF5c2NhbGUgImNvbG9yIG1hcCI6IHBvc3NpYmxlIGlmIHF1YW50aXppbmcgZ3JheXNjYWxlIGltYWdlICovCi0JICBwdXRfM2J5dGVzKGRpbmZvLCBHRVRKU0FNUExFKGNvbG9ybWFwWzBdW2ldKSA+PiBjc2hpZnQpOwotCX0KKyAgICAgICAgaWYgKGRpbmZvLT5jaW5mby0+b3V0X2NvbG9yX3NwYWNlID09IEpDU19SR0IpIHsKKyAgICAgICAgICAvKiBOb3JtYWwgY2FzZTogUkdCIGNvbG9yIG1hcCAqLworICAgICAgICAgIHB1dGMoR0VUSlNBTVBMRShjb2xvcm1hcFswXVtpXSkgPj4gY3NoaWZ0LCBkaW5mby0+cHViLm91dHB1dF9maWxlKTsKKyAgICAgICAgICBwdXRjKEdFVEpTQU1QTEUoY29sb3JtYXBbMV1baV0pID4+IGNzaGlmdCwgZGluZm8tPnB1Yi5vdXRwdXRfZmlsZSk7CisgICAgICAgICAgcHV0YyhHRVRKU0FNUExFKGNvbG9ybWFwWzJdW2ldKSA+PiBjc2hpZnQsIGRpbmZvLT5wdWIub3V0cHV0X2ZpbGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIC8qIEdyYXlzY2FsZSAiY29sb3IgbWFwIjogcG9zc2libGUgaWYgcXVhbnRpemluZyBncmF5c2NhbGUgaW1hZ2UgKi8KKyAgICAgICAgICBwdXRfM2J5dGVzKGRpbmZvLCBHRVRKU0FNUExFKGNvbG9ybWFwWzBdW2ldKSA+PiBjc2hpZnQpOworICAgICAgICB9CiAgICAgICB9IGVsc2UgewotCS8qIENyZWF0ZSBhIGdyYXktc2NhbGUgbWFwIG9mIG51bV9jb2xvcnMgdmFsdWVzLCByYW5nZSAwLi4yNTUgKi8KLQlwdXRfM2J5dGVzKGRpbmZvLCAoaSAqIDI1NSArIChudW1fY29sb3JzLTEpLzIpIC8gKG51bV9jb2xvcnMtMSkpOworICAgICAgICAvKiBDcmVhdGUgYSBncmF5c2NhbGUgbWFwIG9mIG51bV9jb2xvcnMgdmFsdWVzLCByYW5nZSAwLi4yNTUgKi8KKyAgICAgICAgcHV0XzNieXRlcyhkaW5mbywgKGkgKiAyNTUgKyAobnVtX2NvbG9ycy0xKS8yKSAvIChudW1fY29sb3JzLTEpKTsKICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgLyogZmlsbCBvdXQgdGhlIG1hcCB0byBhIHBvd2VyIG9mIDIgKi8KQEAgLTI4MCw3ICsyODAsNyBAQAogICB9CiAgIC8qIFdyaXRlIGltYWdlIHNlcGFyYXRvciBhbmQgSW1hZ2UgRGVzY3JpcHRvciAqLwogICBwdXRjKCcsJywgZGluZm8tPnB1Yi5vdXRwdXRfZmlsZSk7IC8qIHNlcGFyYXRvciAqLwotICBwdXRfd29yZChkaW5mbywgMCk7CQkvKiBsZWZ0L3RvcCBvZmZzZXQgKi8KKyAgcHV0X3dvcmQoZGluZm8sIDApOyAgICAgICAgICAgLyogbGVmdC90b3Agb2Zmc2V0ICovCiAgIHB1dF93b3JkKGRpbmZvLCAwKTsKICAgcHV0X3dvcmQoZGluZm8sICh1bnNpZ25lZCBpbnQpIGRpbmZvLT5jaW5mby0+b3V0cHV0X3dpZHRoKTsgLyogaW1hZ2Ugc2l6ZSAqLwogICBwdXRfd29yZChkaW5mbywgKHVuc2lnbmVkIGludCkgZGluZm8tPmNpbmZvLT5vdXRwdXRfaGVpZ2h0KTsKQEAgLTMxNyw3ICszMTcsNyBAQAogCiBNRVRIT0RERUYodm9pZCkKIHB1dF9waXhlbF9yb3dzIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBkanBlZ19kZXN0X3B0ciBkaW5mbywKLQkJSkRJTUVOU0lPTiByb3dzX3N1cHBsaWVkKQorICAgICAgICAgICAgICAgIEpESU1FTlNJT04gcm93c19zdXBwbGllZCkKIHsKICAgZ2lmX2Rlc3RfcHRyIGRlc3QgPSAoZ2lmX2Rlc3RfcHRyKSBkaW5mbzsKICAgcmVnaXN0ZXIgSlNBTVBST1cgcHRyOwpAQCAtMzY0LDggKzM2NCw4IEBACiAgIC8qIENyZWF0ZSBtb2R1bGUgaW50ZXJmYWNlIG9iamVjdCwgZmlsbCBpbiBtZXRob2QgcG9pbnRlcnMgKi8KICAgZGVzdCA9IChnaWZfZGVzdF9wdHIpCiAgICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAotCQkJCSAgU0laRU9GKGdpZl9kZXN0X3N0cnVjdCkpOwotICBkZXN0LT5jaW5mbyA9IGNpbmZvOwkJLyogbWFrZSBiYWNrIGxpbmsgZm9yIHN1YnJvdXRpbmVzICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0laRU9GKGdpZl9kZXN0X3N0cnVjdCkpOworICBkZXN0LT5jaW5mbyA9IGNpbmZvOyAgICAgICAgICAvKiBtYWtlIGJhY2sgbGluayBmb3Igc3Vicm91dGluZXMgKi8KICAgZGVzdC0+cHViLnN0YXJ0X291dHB1dCA9IHN0YXJ0X291dHB1dF9naWY7CiAgIGRlc3QtPnB1Yi5wdXRfcGl4ZWxfcm93cyA9IHB1dF9waXhlbF9yb3dzOwogICBkZXN0LT5wdWIuZmluaXNoX291dHB1dCA9IGZpbmlzaF9vdXRwdXRfZ2lmOwpkaWZmIC0tZ2l0IGEvd3JqcGdjb20uYyBiL3dyanBnY29tLmMKaW5kZXggOGMwNGIwNS4uYTFiMmZiMSAxMDA2NDQKLS0tIGEvd3JqcGdjb20uYworKysgYi93cmpwZ2NvbS5jCkBAIC0xLDggKzEsMTAgQEAKIC8qCiAgKiB3cmpwZ2NvbS5jCiAgKgorICogVGhpcyBmaWxlIHdhcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmU6CiAgKiBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5NywgVGhvbWFzIEcuIExhbmUuCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgorICogbGlianBlZy10dXJibyBNb2RpZmljYXRpb25zOgorICogQ29weXJpZ2h0IChDKSAyMDE0LCBELiBSLiBDb21tYW5kZXIKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KICAqCiAgKiBUaGlzIGZpbGUgY29udGFpbnMgYSB2ZXJ5IHNpbXBsZSBzdGFuZC1hbG9uZSBhcHBsaWNhdGlvbiB0aGF0IGluc2VydHMKQEAgLTExLDQ4ICsxMyw0OCBAQAogICogSlBFRyBtYXJrZXJzLgogICovCiAKLSNkZWZpbmUgSlBFR19DSlBFR19ESlBFRwkvKiB0byBnZXQgdGhlIGNvbW1hbmQtbGluZSBjb25maWcgc3ltYm9scyAqLwotI2luY2x1ZGUgImppbmNsdWRlLmgiCQkvKiBnZXQgYXV0by1jb25maWcgc3ltYm9scywgPHN0ZGlvLmg+ICovCisjZGVmaW5lIEpQRUdfQ0pQRUdfREpQRUcgICAgICAgIC8qIHRvIGdldCB0aGUgY29tbWFuZC1saW5lIGNvbmZpZyBzeW1ib2xzICovCisjaW5jbHVkZSAiamluY2x1ZGUuaCIgICAgICAgICAgIC8qIGdldCBhdXRvLWNvbmZpZyBzeW1ib2xzLCA8c3RkaW8uaD4gKi8KIAotI2lmbmRlZiBIQVZFX1NURExJQl9ICQkvKiA8c3RkbGliLmg+IHNob3VsZCBkZWNsYXJlIG1hbGxvYygpICovCisjaWZuZGVmIEhBVkVfU1RETElCX0ggICAgICAgICAgIC8qIDxzdGRsaWIuaD4gc2hvdWxkIGRlY2xhcmUgbWFsbG9jKCkgKi8KIGV4dGVybiB2b2lkICogbWFsbG9jICgpOwogI2VuZGlmCi0jaW5jbHVkZSA8Y3R5cGUuaD4JCS8qIHRvIGRlY2xhcmUgaXN1cHBlcigpLCB0b2xvd2VyKCkgKi8KKyNpbmNsdWRlIDxjdHlwZS5oPiAgICAgICAgICAgICAgLyogdG8gZGVjbGFyZSBpc3VwcGVyKCksIHRvbG93ZXIoKSAqLwogI2lmZGVmIFVTRV9TRVRNT0RFCi0jaW5jbHVkZSA8ZmNudGwuaD4JCS8qIHRvIGRlY2xhcmUgc2V0bW9kZSgpJ3MgcGFyYW1ldGVyIG1hY3JvcyAqLworI2luY2x1ZGUgPGZjbnRsLmg+ICAgICAgICAgICAgICAvKiB0byBkZWNsYXJlIHNldG1vZGUoKSdzIHBhcmFtZXRlciBtYWNyb3MgKi8KIC8qIElmIHlvdSBoYXZlIHNldG1vZGUoKSBidXQgbm90IDxpby5oPiwganVzdCBkZWxldGUgdGhpcyBsaW5lOiAqLwotI2luY2x1ZGUgPGlvLmg+CQkJLyogdG8gZGVjbGFyZSBzZXRtb2RlKCkgKi8KKyNpbmNsdWRlIDxpby5oPiAgICAgICAgICAgICAgICAgLyogdG8gZGVjbGFyZSBzZXRtb2RlKCkgKi8KICNlbmRpZgogCi0jaWZkZWYgVVNFX0NDT01NQU5ECQkvKiBjb21tYW5kLWxpbmUgcmVhZGVyIGZvciBNYWNpbnRvc2ggKi8KKyNpZmRlZiBVU0VfQ0NPTU1BTkQgICAgICAgICAgICAgLyogY29tbWFuZC1saW5lIHJlYWRlciBmb3IgTWFjaW50b3NoICovCiAjaWZkZWYgX19NV0VSS1NfXwogI2luY2x1ZGUgPFNJT1VYLmg+ICAgICAgICAgICAgICAvKiBNZXRyb3dlcmtzIG5lZWRzIHRoaXMgKi8KLSNpbmNsdWRlIDxjb25zb2xlLmg+CQkvKiAuLi4gYW5kIHRoaXMgKi8KKyNpbmNsdWRlIDxjb25zb2xlLmg+ICAgICAgICAgICAgLyogLi4uIGFuZCB0aGlzICovCiAjZW5kaWYKICNpZmRlZiBUSElOS19DCi0jaW5jbHVkZSA8Y29uc29sZS5oPgkJLyogVGhpbmsgZGVjbGFyZXMgaXQgaGVyZSAqLworI2luY2x1ZGUgPGNvbnNvbGUuaD4gICAgICAgICAgICAvKiBUaGluayBkZWNsYXJlcyBpdCBoZXJlICovCiAjZW5kaWYKICNlbmRpZgogCi0jaWZkZWYgRE9OVF9VU0VfQl9NT0RFCQkvKiBkZWZpbmUgbW9kZSBwYXJhbWV0ZXJzIGZvciBmb3BlbigpICovCi0jZGVmaW5lIFJFQURfQklOQVJZCSJyIgotI2RlZmluZSBXUklURV9CSU5BUlkJInciCisjaWZkZWYgRE9OVF9VU0VfQl9NT0RFICAgICAgICAgIC8qIGRlZmluZSBtb2RlIHBhcmFtZXRlcnMgZm9yIGZvcGVuKCkgKi8KKyNkZWZpbmUgUkVBRF9CSU5BUlkgICAgICJyIgorI2RlZmluZSBXUklURV9CSU5BUlkgICAgInciCiAjZWxzZQotI2lmZGVmIFZNUwkJCS8qIFZNUyBpcyB2ZXJ5IG5vbnN0YW5kYXJkICovCi0jZGVmaW5lIFJFQURfQklOQVJZCSJyYiIsICJjdHg9c3RtIgotI2RlZmluZSBXUklURV9CSU5BUlkJIndiIiwgImN0eD1zdG0iCi0jZWxzZQkJCQkvKiBzdGFuZGFyZCBBTlNJLWNvbXBsaWFudCBjYXNlICovCi0jZGVmaW5lIFJFQURfQklOQVJZCSJyYiIKLSNkZWZpbmUgV1JJVEVfQklOQVJZCSJ3YiIKKyNpZmRlZiBWTVMgICAgICAgICAgICAgICAgICAgICAgLyogVk1TIGlzIHZlcnkgbm9uc3RhbmRhcmQgKi8KKyNkZWZpbmUgUkVBRF9CSU5BUlkgICAgICJyYiIsICJjdHg9c3RtIgorI2RlZmluZSBXUklURV9CSU5BUlkgICAgIndiIiwgImN0eD1zdG0iCisjZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0YW5kYXJkIEFOU0ktY29tcGxpYW50IGNhc2UgKi8KKyNkZWZpbmUgUkVBRF9CSU5BUlkgICAgICJyYiIKKyNkZWZpbmUgV1JJVEVfQklOQVJZICAgICJ3YiIKICNlbmRpZgogI2VuZGlmCiAKLSNpZm5kZWYgRVhJVF9GQUlMVVJFCQkvKiBkZWZpbmUgZXhpdCgpIGNvZGVzIGlmIG5vdCBwcm92aWRlZCAqLworI2lmbmRlZiBFWElUX0ZBSUxVUkUgICAgICAgICAgICAvKiBkZWZpbmUgZXhpdCgpIGNvZGVzIGlmIG5vdCBwcm92aWRlZCAqLwogI2RlZmluZSBFWElUX0ZBSUxVUkUgIDEKICNlbmRpZgogI2lmbmRlZiBFWElUX1NVQ0NFU1MKICNpZmRlZiBWTVMKLSNkZWZpbmUgRVhJVF9TVUNDRVNTICAxCQkvKiBWTVMgaXMgdmVyeSBub25zdGFuZGFyZCAqLworI2RlZmluZSBFWElUX1NVQ0NFU1MgIDEgICAgICAgICAvKiBWTVMgaXMgdmVyeSBub25zdGFuZGFyZCAqLwogI2Vsc2UKICNkZWZpbmUgRVhJVF9TVUNDRVNTICAwCiAjZW5kaWYKQEAgLTYzLDcgKzY1LDcgQEAKICAqLwogCiAjaWZuZGVmIE1BWF9DT01fTEVOR1RICi0jZGVmaW5lIE1BWF9DT01fTEVOR1RIIDY1MDAwTAkvKiBtdXN0IGJlIDw9IDY1NTMzIGluIGFueSBjYXNlICovCisjZGVmaW5lIE1BWF9DT01fTEVOR1RIIDY1MDAwTCAgIC8qIG11c3QgYmUgPD0gNjU1MzMgaW4gYW55IGNhc2UgKi8KICNlbmRpZgogCiAKQEAgLTcyLDEyICs3NCwxMiBAQAogICogVG8gcmV1c2UgdGhpcyBjb2RlIGluIGFub3RoZXIgYXBwbGljYXRpb24sIHlvdSBtaWdodCBuZWVkIHRvIGNoYW5nZSB0aGVzZS4KICAqLwogCi1zdGF0aWMgRklMRSAqIGluZmlsZTsJCS8qIGlucHV0IEpQRUcgZmlsZSAqLworc3RhdGljIEZJTEUgKiBpbmZpbGU7ICAgICAgICAgICAvKiBpbnB1dCBKUEVHIGZpbGUgKi8KIAogLyogUmV0dXJuIG5leHQgaW5wdXQgYnl0ZSwgb3IgRU9GIGlmIG5vIG1vcmUgKi8KICNkZWZpbmUgTkVYVEJZVEUoKSAgZ2V0YyhpbmZpbGUpCiAKLXN0YXRpYyBGSUxFICogb3V0ZmlsZTsJCS8qIG91dHB1dCBKUEVHIGZpbGUgKi8KK3N0YXRpYyBGSUxFICogb3V0ZmlsZTsgICAgICAgICAgLyogb3V0cHV0IEpQRUcgZmlsZSAqLwogCiAvKiBFbWl0IGFuIG91dHB1dCBieXRlICovCiAjZGVmaW5lIFBVVEJZVEUoeCkgIHB1dGMoKHgpLCBvdXRmaWxlKQpAQCAtMTU0LDExICsxNTYsMTEgQEAKICAqIGluIHRoaXMgcHJvZ3JhbS4gIChTZWUgamRtYXJrZXIuYyBmb3IgYSBtb3JlIGNvbXBsZXRlIGxpc3QuKQogICovCiAKLSNkZWZpbmUgTV9TT0YwICAweEMwCQkvKiBTdGFydCBPZiBGcmFtZSBOICovCi0jZGVmaW5lIE1fU09GMSAgMHhDMQkJLyogTiBpbmRpY2F0ZXMgd2hpY2ggY29tcHJlc3Npb24gcHJvY2VzcyAqLwotI2RlZmluZSBNX1NPRjIgIDB4QzIJCS8qIE9ubHkgU09GMC1TT0YyIGFyZSBub3cgaW4gY29tbW9uIHVzZSAqLworI2RlZmluZSBNX1NPRjAgIDB4QzAgICAgICAgICAgICAvKiBTdGFydCBPZiBGcmFtZSBOICovCisjZGVmaW5lIE1fU09GMSAgMHhDMSAgICAgICAgICAgIC8qIE4gaW5kaWNhdGVzIHdoaWNoIGNvbXByZXNzaW9uIHByb2Nlc3MgKi8KKyNkZWZpbmUgTV9TT0YyICAweEMyICAgICAgICAgICAgLyogT25seSBTT0YwLVNPRjIgYXJlIG5vdyBpbiBjb21tb24gdXNlICovCiAjZGVmaW5lIE1fU09GMyAgMHhDMwotI2RlZmluZSBNX1NPRjUgIDB4QzUJCS8qIE5COiBjb2RlcyBDNCBhbmQgQ0MgYXJlIE5PVCBTT0YgbWFya2VycyAqLworI2RlZmluZSBNX1NPRjUgIDB4QzUgICAgICAgICAgICAvKiBOQjogY29kZXMgQzQgYW5kIENDIGFyZSBOT1QgU09GIG1hcmtlcnMgKi8KICNkZWZpbmUgTV9TT0Y2ICAweEM2CiAjZGVmaW5lIE1fU09GNyAgMHhDNwogI2RlZmluZSBNX1NPRjkgIDB4QzkKQEAgLTE2NywxMCArMTY5LDEwIEBACiAjZGVmaW5lIE1fU09GMTMgMHhDRAogI2RlZmluZSBNX1NPRjE0IDB4Q0UKICNkZWZpbmUgTV9TT0YxNSAweENGCi0jZGVmaW5lIE1fU09JICAgMHhEOAkJLyogU3RhcnQgT2YgSW1hZ2UgKGJlZ2lubmluZyBvZiBkYXRhc3RyZWFtKSAqLwotI2RlZmluZSBNX0VPSSAgIDB4RDkJCS8qIEVuZCBPZiBJbWFnZSAoZW5kIG9mIGRhdGFzdHJlYW0pICovCi0jZGVmaW5lIE1fU09TICAgMHhEQQkJLyogU3RhcnQgT2YgU2NhbiAoYmVnaW5zIGNvbXByZXNzZWQgZGF0YSkgKi8KLSNkZWZpbmUgTV9DT00gICAweEZFCQkvKiBDT01tZW50ICovCisjZGVmaW5lIE1fU09JICAgMHhEOCAgICAgICAgICAgIC8qIFN0YXJ0IE9mIEltYWdlIChiZWdpbm5pbmcgb2YgZGF0YXN0cmVhbSkgKi8KKyNkZWZpbmUgTV9FT0kgICAweEQ5ICAgICAgICAgICAgLyogRW5kIE9mIEltYWdlIChlbmQgb2YgZGF0YXN0cmVhbSkgKi8KKyNkZWZpbmUgTV9TT1MgICAweERBICAgICAgICAgICAgLyogU3RhcnQgT2YgU2NhbiAoYmVnaW5zIGNvbXByZXNzZWQgZGF0YSkgKi8KKyNkZWZpbmUgTV9DT00gICAweEZFICAgICAgICAgICAgLyogQ09NbWVudCAqLwogCiAKIC8qCkBAIC0zMDIsNDAgKzMwNCw0MCBAQAogICAgICAgLyogTm90ZSB0aGF0IG1hcmtlciBjb2RlcyAweEM0LCAweEM4LCAweENDIGFyZSBub3QsIGFuZCBtdXN0IG5vdCBiZSwKICAgICAgICAqIHRyZWF0ZWQgYXMgU09Gbi4gIEM0IGluIHBhcnRpY3VsYXIgaXMgYWN0dWFsbHkgREhULgogICAgICAgICovCi0gICAgY2FzZSBNX1NPRjA6CQkvKiBCYXNlbGluZSAqLwotICAgIGNhc2UgTV9TT0YxOgkJLyogRXh0ZW5kZWQgc2VxdWVudGlhbCwgSHVmZm1hbiAqLwotICAgIGNhc2UgTV9TT0YyOgkJLyogUHJvZ3Jlc3NpdmUsIEh1ZmZtYW4gKi8KLSAgICBjYXNlIE1fU09GMzoJCS8qIExvc3NsZXNzLCBIdWZmbWFuICovCi0gICAgY2FzZSBNX1NPRjU6CQkvKiBEaWZmZXJlbnRpYWwgc2VxdWVudGlhbCwgSHVmZm1hbiAqLwotICAgIGNhc2UgTV9TT0Y2OgkJLyogRGlmZmVyZW50aWFsIHByb2dyZXNzaXZlLCBIdWZmbWFuICovCi0gICAgY2FzZSBNX1NPRjc6CQkvKiBEaWZmZXJlbnRpYWwgbG9zc2xlc3MsIEh1ZmZtYW4gKi8KLSAgICBjYXNlIE1fU09GOToJCS8qIEV4dGVuZGVkIHNlcXVlbnRpYWwsIGFyaXRobWV0aWMgKi8KLSAgICBjYXNlIE1fU09GMTA6CQkvKiBQcm9ncmVzc2l2ZSwgYXJpdGhtZXRpYyAqLwotICAgIGNhc2UgTV9TT0YxMToJCS8qIExvc3NsZXNzLCBhcml0aG1ldGljICovCi0gICAgY2FzZSBNX1NPRjEzOgkJLyogRGlmZmVyZW50aWFsIHNlcXVlbnRpYWwsIGFyaXRobWV0aWMgKi8KLSAgICBjYXNlIE1fU09GMTQ6CQkvKiBEaWZmZXJlbnRpYWwgcHJvZ3Jlc3NpdmUsIGFyaXRobWV0aWMgKi8KLSAgICBjYXNlIE1fU09GMTU6CQkvKiBEaWZmZXJlbnRpYWwgbG9zc2xlc3MsIGFyaXRobWV0aWMgKi8KKyAgICBjYXNlIE1fU09GMDogICAgICAgICAgICAgICAgLyogQmFzZWxpbmUgKi8KKyAgICBjYXNlIE1fU09GMTogICAgICAgICAgICAgICAgLyogRXh0ZW5kZWQgc2VxdWVudGlhbCwgSHVmZm1hbiAqLworICAgIGNhc2UgTV9TT0YyOiAgICAgICAgICAgICAgICAvKiBQcm9ncmVzc2l2ZSwgSHVmZm1hbiAqLworICAgIGNhc2UgTV9TT0YzOiAgICAgICAgICAgICAgICAvKiBMb3NzbGVzcywgSHVmZm1hbiAqLworICAgIGNhc2UgTV9TT0Y1OiAgICAgICAgICAgICAgICAvKiBEaWZmZXJlbnRpYWwgc2VxdWVudGlhbCwgSHVmZm1hbiAqLworICAgIGNhc2UgTV9TT0Y2OiAgICAgICAgICAgICAgICAvKiBEaWZmZXJlbnRpYWwgcHJvZ3Jlc3NpdmUsIEh1ZmZtYW4gKi8KKyAgICBjYXNlIE1fU09GNzogICAgICAgICAgICAgICAgLyogRGlmZmVyZW50aWFsIGxvc3NsZXNzLCBIdWZmbWFuICovCisgICAgY2FzZSBNX1NPRjk6ICAgICAgICAgICAgICAgIC8qIEV4dGVuZGVkIHNlcXVlbnRpYWwsIGFyaXRobWV0aWMgKi8KKyAgICBjYXNlIE1fU09GMTA6ICAgICAgICAgICAgICAgLyogUHJvZ3Jlc3NpdmUsIGFyaXRobWV0aWMgKi8KKyAgICBjYXNlIE1fU09GMTE6ICAgICAgICAgICAgICAgLyogTG9zc2xlc3MsIGFyaXRobWV0aWMgKi8KKyAgICBjYXNlIE1fU09GMTM6ICAgICAgICAgICAgICAgLyogRGlmZmVyZW50aWFsIHNlcXVlbnRpYWwsIGFyaXRobWV0aWMgKi8KKyAgICBjYXNlIE1fU09GMTQ6ICAgICAgICAgICAgICAgLyogRGlmZmVyZW50aWFsIHByb2dyZXNzaXZlLCBhcml0aG1ldGljICovCisgICAgY2FzZSBNX1NPRjE1OiAgICAgICAgICAgICAgIC8qIERpZmZlcmVudGlhbCBsb3NzbGVzcywgYXJpdGhtZXRpYyAqLwogICAgICAgcmV0dXJuIG1hcmtlcjsKIAotICAgIGNhc2UgTV9TT1M6CQkJLyogc2hvdWxkIG5vdCBzZWUgY29tcHJlc3NlZCBkYXRhIGJlZm9yZSBTT0YgKi8KKyAgICBjYXNlIE1fU09TOiAgICAgICAgICAgICAgICAgLyogc2hvdWxkIG5vdCBzZWUgY29tcHJlc3NlZCBkYXRhIGJlZm9yZSBTT0YgKi8KICAgICAgIEVSUkVYSVQoIlNPUyB3aXRob3V0IHByaW9yIFNPRm4iKTsKICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBNX0VPSToJCQkvKiBpbiBjYXNlIGl0J3MgYSB0YWJsZXMtb25seSBKUEVHIHN0cmVhbSAqLworICAgIGNhc2UgTV9FT0k6ICAgICAgICAgICAgICAgICAvKiBpbiBjYXNlIGl0J3MgYSB0YWJsZXMtb25seSBKUEVHIHN0cmVhbSAqLwogICAgICAgcmV0dXJuIG1hcmtlcjsKIAotICAgIGNhc2UgTV9DT006CQkJLyogRXhpc3RpbmcgQ09NOiBjb25kaXRpb25hbGx5IGRpc2NhcmQgKi8KKyAgICBjYXNlIE1fQ09NOiAgICAgICAgICAgICAgICAgLyogRXhpc3RpbmcgQ09NOiBjb25kaXRpb25hbGx5IGRpc2NhcmQgKi8KICAgICAgIGlmIChrZWVwX0NPTSkgewotCXdyaXRlX21hcmtlcihtYXJrZXIpOwotCWNvcHlfdmFyaWFibGUoKTsKKyAgICAgICAgd3JpdGVfbWFya2VyKG1hcmtlcik7CisgICAgICAgIGNvcHlfdmFyaWFibGUoKTsKICAgICAgIH0gZWxzZSB7Ci0Jc2tpcF92YXJpYWJsZSgpOworICAgICAgICBza2lwX3ZhcmlhYmxlKCk7CiAgICAgICB9CiAgICAgICBicmVhazsKIAotICAgIGRlZmF1bHQ6CQkJLyogQW55dGhpbmcgZWxzZSBqdXN0IGdldHMgY29waWVkICovCisgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgIC8qIEFueXRoaW5nIGVsc2UganVzdCBnZXRzIGNvcGllZCAqLwogICAgICAgd3JpdGVfbWFya2VyKG1hcmtlcik7Ci0gICAgICBjb3B5X3ZhcmlhYmxlKCk7CQkvKiB3ZSBhc3N1bWUgaXQgaGFzIGEgcGFyYW1ldGVyIGNvdW50Li4uICovCisgICAgICBjb3B5X3ZhcmlhYmxlKCk7ICAgICAgICAgIC8qIHdlIGFzc3VtZSBpdCBoYXMgYSBwYXJhbWV0ZXIgY291bnQuLi4gKi8KICAgICAgIGJyZWFrOwogICAgIH0KICAgfSAvKiBlbmQgbG9vcCAqLwpAQCAtMzQ0LDcgKzM0Niw3IEBACiAKIC8qIENvbW1hbmQgbGluZSBwYXJzaW5nIGNvZGUgKi8KIAotc3RhdGljIGNvbnN0IGNoYXIgKiBwcm9nbmFtZTsJLyogcHJvZ3JhbSBuYW1lIGZvciBlcnJvciBtZXNzYWdlcyAqLworc3RhdGljIGNvbnN0IGNoYXIgKiBwcm9nbmFtZTsgICAvKiBwcm9ncmFtIG5hbWUgZm9yIGVycm9yIG1lc3NhZ2VzICovCiAKIAogc3RhdGljIHZvaWQKQEAgLTM3MCw3ICszNzIsNyBAQAogICBmcHJpbnRmKHN0ZGVyciwgIklmIHlvdSBkbyBub3QgZ2l2ZSBlaXRoZXIgLWNvbW1lbnQgb3IgLWNmaWxlIG9uIHRoZSBjb21tYW5kIGxpbmUsXG4iKTsKICAgZnByaW50ZihzdGRlcnIsICJ0aGVuIHRoZSBjb21tZW50IHRleHQgaXMgcmVhZCBmcm9tIHN0YW5kYXJkIGlucHV0LlxuIik7CiAgIGZwcmludGYoc3RkZXJyLCAiSXQgY2FuIGJlIG11bHRpcGxlIGxpbmVzLCB1cCB0byAldSBjaGFyYWN0ZXJzIHRvdGFsLlxuIiwKLQkgICh1bnNpZ25lZCBpbnQpIE1BWF9DT01fTEVOR1RIKTsKKyAgICAgICAgICAodW5zaWduZWQgaW50KSBNQVhfQ09NX0xFTkdUSCk7CiAjaWZuZGVmIFRXT19GSUxFX0NPTU1BTkRMSU5FCiAgIGZwcmludGYoc3RkZXJyLCAiWW91IG11c3Qgc3BlY2lmeSBhbiBpbnB1dCBKUEVHIGZpbGUgbmFtZSB3aGVuIHN1cHBseWluZ1xuIik7CiAgIGZwcmludGYoc3RkZXJyLCAiY29tbWVudCB0ZXh0IGZyb20gc3RhbmRhcmQgaW5wdXQuXG4iKTsKQEAgLTM5MSwxNyArMzkzLDE3IEBACiAKICAgd2hpbGUgKChjYSA9ICphcmcrKykgIT0gJ1wwJykgewogICAgIGlmICgoY2sgPSAqa2V5d29yZCsrKSA9PSAnXDAnKQotICAgICAgcmV0dXJuIDA7CQkJLyogYXJnIGxvbmdlciB0aGFuIGtleXdvcmQsIG5vIGdvb2QgKi8KLSAgICBpZiAoaXN1cHBlcihjYSkpCQkvKiBmb3JjZSBhcmcgdG8gbGNhc2UgKGFzc3VtZSBjayBpcyBhbHJlYWR5KSAqLworICAgICAgcmV0dXJuIDA7ICAgICAgICAgICAgICAgICAvKiBhcmcgbG9uZ2VyIHRoYW4ga2V5d29yZCwgbm8gZ29vZCAqLworICAgIGlmIChpc3VwcGVyKGNhKSkgICAgICAgICAgICAvKiBmb3JjZSBhcmcgdG8gbGNhc2UgKGFzc3VtZSBjayBpcyBhbHJlYWR5KSAqLwogICAgICAgY2EgPSB0b2xvd2VyKGNhKTsKICAgICBpZiAoY2EgIT0gY2spCi0gICAgICByZXR1cm4gMDsJCQkvKiBubyBnb29kICovCi0gICAgbm1hdGNoZWQrKzsJCQkvKiBjb3VudCBtYXRjaGVkIGNoYXJhY3RlcnMgKi8KKyAgICAgIHJldHVybiAwOyAgICAgICAgICAgICAgICAgLyogbm8gZ29vZCAqLworICAgIG5tYXRjaGVkKys7ICAgICAgICAgICAgICAgICAvKiBjb3VudCBtYXRjaGVkIGNoYXJhY3RlcnMgKi8KICAgfQogICAvKiByZWFjaGVkIGVuZCBvZiBhcmd1bWVudDsgZmFpbCBpZiBpdCdzIHRvbyBzaG9ydCBmb3IgdW5pcXVlIGFiYnJldiAqLwogICBpZiAobm1hdGNoZWQgPCBtaW5jaGFycykKICAgICByZXR1cm4gMDsKLSAgcmV0dXJuIDE7CQkJLyogQS1PSyAqLworICByZXR1cm4gMTsgICAgICAgICAgICAgICAgICAgICAvKiBBLU9LICovCiB9CiAKIApAQCAtNDI3LDIxICs0MjksMjEgQEAKIAogICBwcm9nbmFtZSA9IGFyZ3ZbMF07CiAgIGlmIChwcm9nbmFtZSA9PSBOVUxMIHx8IHByb2duYW1lWzBdID09IDApCi0gICAgcHJvZ25hbWUgPSAid3JqcGdjb20iOwkvKiBpbiBjYXNlIEMgbGlicmFyeSBkb2Vzbid0IHByb3ZpZGUgaXQgKi8KKyAgICBwcm9nbmFtZSA9ICJ3cmpwZ2NvbSI7ICAgICAgLyogaW4gY2FzZSBDIGxpYnJhcnkgZG9lc24ndCBwcm92aWRlIGl0ICovCiAKICAgLyogUGFyc2Ugc3dpdGNoZXMsIGlmIGFueSAqLwogICBmb3IgKGFyZ24gPSAxOyBhcmduIDwgYXJnYzsgYXJnbisrKSB7CiAgICAgYXJnID0gYXJndlthcmduXTsKICAgICBpZiAoYXJnWzBdICE9ICctJykKLSAgICAgIGJyZWFrOwkJCS8qIG5vdCBzd2l0Y2gsIG11c3QgYmUgZmlsZSBuYW1lICovCi0gICAgYXJnKys7CQkJLyogYWR2YW5jZSBvdmVyICctJyAqLworICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAvKiBub3Qgc3dpdGNoLCBtdXN0IGJlIGZpbGUgbmFtZSAqLworICAgIGFyZysrOyAgICAgICAgICAgICAgICAgICAgICAvKiBhZHZhbmNlIG92ZXIgJy0nICovCiAgICAgaWYgKGtleW1hdGNoKGFyZywgInJlcGxhY2UiLCAxKSkgewogICAgICAga2VlcF9DT00gPSAwOwogICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAiY2ZpbGUiLCAyKSkgewogICAgICAgaWYgKCsrYXJnbiA+PSBhcmdjKSB1c2FnZSgpOwogICAgICAgaWYgKChjb21tZW50X2ZpbGUgPSBmb3Blbihhcmd2W2FyZ25dLCAiciIpKSA9PSBOVUxMKSB7Ci0JZnByaW50ZihzdGRlcnIsICIlczogY2FuJ3Qgb3BlbiAlc1xuIiwgcHJvZ25hbWUsIGFyZ3ZbYXJnbl0pOwotCWV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogY2FuJ3Qgb3BlbiAlc1xuIiwgcHJvZ25hbWUsIGFyZ3ZbYXJnbl0pOworICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CiAgICAgICB9CiAgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJjb21tZW50IiwgMSkpIHsKICAgICAgIGlmICgrK2FyZ24gPj0gYXJnYykgdXNhZ2UoKTsKQEAgLTQ1MCwyMSArNDUyLDM2IEBACiAgICAgICAgKiB1bmRlciBNUy1ET0cgYW5kIG11c3QgcGFyc2Ugb3V0IHRoZSBxdW90ZWQgc3RyaW5nIG91cnNlbHZlcy4gIFNpZ2guCiAgICAgICAgKi8KICAgICAgIGlmIChjb21tZW50X2FyZ1swXSA9PSAnIicpIHsKLQljb21tZW50X2FyZyA9IChjaGFyICopIG1hbGxvYygoc2l6ZV90KSBNQVhfQ09NX0xFTkdUSCk7Ci0JaWYgKGNvbW1lbnRfYXJnID09IE5VTEwpCi0JICBFUlJFWElUKCJJbnN1ZmZpY2llbnQgbWVtb3J5Iik7Ci0Jc3RyY3B5KGNvbW1lbnRfYXJnLCBhcmd2W2FyZ25dKzEpOwotCWZvciAoOzspIHsKLQkgIGNvbW1lbnRfbGVuZ3RoID0gKHVuc2lnbmVkIGludCkgc3RybGVuKGNvbW1lbnRfYXJnKTsKLQkgIGlmIChjb21tZW50X2xlbmd0aCA+IDAgJiYgY29tbWVudF9hcmdbY29tbWVudF9sZW5ndGgtMV0gPT0gJyInKSB7Ci0JICAgIGNvbW1lbnRfYXJnW2NvbW1lbnRfbGVuZ3RoLTFdID0gJ1wwJzsgLyogemFwIHRlcm1pbmF0aW5nIHF1b3RlICovCi0JICAgIGJyZWFrOwotCSAgfQotCSAgaWYgKCsrYXJnbiA+PSBhcmdjKQotCSAgICBFUlJFWElUKCJNaXNzaW5nIGVuZGluZyBxdW90ZSBtYXJrIik7Ci0JICBzdHJjYXQoY29tbWVudF9hcmcsICIgIik7Ci0JICBzdHJjYXQoY29tbWVudF9hcmcsIGFyZ3ZbYXJnbl0pOwotCX0KKyAgICAgICAgY29tbWVudF9hcmcgPSAoY2hhciAqKSBtYWxsb2MoKHNpemVfdCkgTUFYX0NPTV9MRU5HVEgpOworICAgICAgICBpZiAoY29tbWVudF9hcmcgPT0gTlVMTCkKKyAgICAgICAgICBFUlJFWElUKCJJbnN1ZmZpY2llbnQgbWVtb3J5Iik7CisgICAgICAgIGlmIChzdHJsZW4oYXJndlthcmduXSkgKyAyID49IChzaXplX3QpIE1BWF9DT01fTEVOR1RIKSB7CisgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb21tZW50IHRleHQgbWF5IG5vdCBleGNlZWQgJXUgYnl0ZXNcbiIsCisgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50KSBNQVhfQ09NX0xFTkdUSCk7CisgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgICB9CisgICAgICAgIHN0cmNweShjb21tZW50X2FyZywgYXJndlthcmduXSsxKTsKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgIGNvbW1lbnRfbGVuZ3RoID0gKHVuc2lnbmVkIGludCkgc3RybGVuKGNvbW1lbnRfYXJnKTsKKyAgICAgICAgICBpZiAoY29tbWVudF9sZW5ndGggPiAwICYmIGNvbW1lbnRfYXJnW2NvbW1lbnRfbGVuZ3RoLTFdID09ICciJykgeworICAgICAgICAgICAgY29tbWVudF9hcmdbY29tbWVudF9sZW5ndGgtMV0gPSAnXDAnOyAvKiB6YXAgdGVybWluYXRpbmcgcXVvdGUgKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoKythcmduID49IGFyZ2MpCisgICAgICAgICAgICBFUlJFWElUKCJNaXNzaW5nIGVuZGluZyBxdW90ZSBtYXJrIik7CisgICAgICAgICAgaWYgKHN0cmxlbihjb21tZW50X2FyZykgKyBzdHJsZW4oYXJndlthcmduXSkgKyAyID49CisgICAgICAgICAgICAgIChzaXplX3QpIE1BWF9DT01fTEVOR1RIKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvbW1lbnQgdGV4dCBtYXkgbm90IGV4Y2VlZCAldSBieXRlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCkgTUFYX0NPTV9MRU5HVEgpOworICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgICAgIH0KKyAgICAgICAgICBzdHJjYXQoY29tbWVudF9hcmcsICIgIik7CisgICAgICAgICAgc3RyY2F0KGNvbW1lbnRfYXJnLCBhcmd2W2FyZ25dKTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIGlmIChzdHJsZW4oYXJndlthcmduXSkgPj0gKHNpemVfdCkgTUFYX0NPTV9MRU5HVEgpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb21tZW50IHRleHQgbWF5IG5vdCBleGNlZWQgJXUgYnl0ZXNcbiIsCisgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCkgTUFYX0NPTV9MRU5HVEgpOworICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CiAgICAgICB9CiAgICAgICBjb21tZW50X2xlbmd0aCA9ICh1bnNpZ25lZCBpbnQpIHN0cmxlbihjb21tZW50X2FyZyk7CiAgICAgfSBlbHNlCkBAIC00ODgsMTAgKzUwNSwxMCBAQAogICAgIH0KICAgfSBlbHNlIHsKICAgICAvKiBkZWZhdWx0IGlucHV0IGZpbGUgaXMgc3RkaW4gKi8KLSNpZmRlZiBVU0VfU0VUTU9ERQkJLyogbmVlZCB0byBoYWNrIGZpbGUgbW9kZT8gKi8KKyNpZmRlZiBVU0VfU0VUTU9ERSAgICAgICAgICAgICAgLyogbmVlZCB0byBoYWNrIGZpbGUgbW9kZT8gKi8KICAgICBzZXRtb2RlKGZpbGVubyhzdGRpbiksIE9fQklOQVJZKTsKICNlbmRpZgotI2lmZGVmIFVTRV9GRE9QRU4JCS8qIG5lZWQgdG8gcmUtb3BlbiBpbiBiaW5hcnkgbW9kZT8gKi8KKyNpZmRlZiBVU0VfRkRPUEVOICAgICAgICAgICAgICAgLyogbmVlZCB0byByZS1vcGVuIGluIGJpbmFyeSBtb2RlPyAqLwogICAgIGlmICgoaW5maWxlID0gZmRvcGVuKGZpbGVubyhzdGRpbiksIFJFQURfQklOQVJZKSkgPT0gTlVMTCkgewogICAgICAgZnByaW50ZihzdGRlcnIsICIlczogY2FuJ3Qgb3BlbiBzdGRpblxuIiwgcHJvZ25hbWUpOwogICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwpAQCAtNTA2LDcgKzUyMyw3IEBACiAgIC8qIE11c3QgaGF2ZSBleHBsaWNpdCBvdXRwdXQgZmlsZSBuYW1lICovCiAgIGlmIChhcmduICE9IGFyZ2MtMikgewogICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IG11c3QgbmFtZSBvbmUgaW5wdXQgYW5kIG9uZSBvdXRwdXQgZmlsZVxuIiwKLQkgICAgcHJvZ25hbWUpOworICAgICAgICAgICAgcHJvZ25hbWUpOwogICAgIHVzYWdlKCk7CiAgIH0KICAgaWYgKChvdXRmaWxlID0gZm9wZW4oYXJndlthcmduKzFdLCBXUklURV9CSU5BUlkpKSA9PSBOVUxMKSB7CkBAIC01MjAsMTAgKzUzNywxMCBAQAogICAgIHVzYWdlKCk7CiAgIH0KICAgLyogZGVmYXVsdCBvdXRwdXQgZmlsZSBpcyBzdGRvdXQgKi8KLSNpZmRlZiBVU0VfU0VUTU9ERQkJLyogbmVlZCB0byBoYWNrIGZpbGUgbW9kZT8gKi8KKyNpZmRlZiBVU0VfU0VUTU9ERSAgICAgICAgICAgICAgLyogbmVlZCB0byBoYWNrIGZpbGUgbW9kZT8gKi8KICAgc2V0bW9kZShmaWxlbm8oc3Rkb3V0KSwgT19CSU5BUlkpOwogI2VuZGlmCi0jaWZkZWYgVVNFX0ZET1BFTgkJLyogbmVlZCB0byByZS1vcGVuIGluIGJpbmFyeSBtb2RlPyAqLworI2lmZGVmIFVTRV9GRE9QRU4gICAgICAgICAgICAgICAvKiBuZWVkIHRvIHJlLW9wZW4gaW4gYmluYXJ5IG1vZGU/ICovCiAgIGlmICgob3V0ZmlsZSA9IGZkb3BlbihmaWxlbm8oc3Rkb3V0KSwgV1JJVEVfQklOQVJZKSkgPT0gTlVMTCkgewogICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGNhbid0IG9wZW4gc3Rkb3V0XG4iLCBwcm9nbmFtZSk7CiAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwpAQCAtNTQ1LDkgKzU2Miw5IEBACiAgICAgc3JjX2ZpbGUgPSAoY29tbWVudF9maWxlICE9IE5VTEwgPyBjb21tZW50X2ZpbGUgOiBzdGRpbik7CiAgICAgd2hpbGUgKChjID0gZ2V0YyhzcmNfZmlsZSkpICE9IEVPRikgewogICAgICAgaWYgKGNvbW1lbnRfbGVuZ3RoID49ICh1bnNpZ25lZCBpbnQpIE1BWF9DT01fTEVOR1RIKSB7Ci0JZnByaW50ZihzdGRlcnIsICJDb21tZW50IHRleHQgbWF5IG5vdCBleGNlZWQgJXUgYnl0ZXNcbiIsCi0JCSh1bnNpZ25lZCBpbnQpIE1BWF9DT01fTEVOR1RIKTsKLQlleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ29tbWVudCB0ZXh0IG1heSBub3QgZXhjZWVkICV1IGJ5dGVzXG4iLAorICAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQpIE1BWF9DT01fTEVOR1RIKTsKKyAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwogICAgICAgfQogICAgICAgY29tbWVudF9hcmdbY29tbWVudF9sZW5ndGgrK10gPSAoY2hhcikgYzsKICAgICB9CkBAIC01NzksNSArNTk2LDUgQEAKIAogICAvKiBBbGwgZG9uZS4gKi8KICAgZXhpdChFWElUX1NVQ0NFU1MpOwotICByZXR1cm4gMDsJCQkvKiBzdXBwcmVzcyBuby1yZXR1cm4tdmFsdWUgd2FybmluZ3MgKi8KKyAgcmV0dXJuIDA7ICAgICAgICAgICAgICAgICAgICAgLyogc3VwcHJlc3Mgbm8tcmV0dXJuLXZhbHVlIHdhcm5pbmdzICovCiB9CmRpZmYgLS1naXQgYS93cnBwbS5jIGIvd3JwcG0uYwppbmRleCA2OGUwYzg1Li42YjdlYmY0IDEwMDY0NAotLS0gYS93cnBwbS5jCisrKyBiL3dycHBtLmMKQEAgLTE2LDcgKzE2LDcgQEAKICAqIGFuIG9yZGluYXJ5IHN0ZGlvIHN0cmVhbS4KICAqLwogCi0jaW5jbHVkZSAiY2RqcGVnLmgiCQkvKiBDb21tb24gZGVjbHMgZm9yIGNqcGVnL2RqcGVnIGFwcGxpY2F0aW9ucyAqLworI2luY2x1ZGUgImNkanBlZy5oIiAgICAgICAgICAgICAvKiBDb21tb24gZGVjbHMgZm9yIGNqcGVnL2RqcGVnIGFwcGxpY2F0aW9ucyAqLwogCiAjaWZkZWYgUFBNX1NVUFBPUlRFRAogCkBAIC00MiwxMSArNDIsMTEgQEAKICNkZWZpbmUgUFBNX01BWFZBTCAyNTUKICNlbHNlCiAvKiBUaGUgd29yZC1wZXItc2FtcGxlIGZvcm1hdCBhbHdheXMgcHV0cyB0aGUgTVNCIGZpcnN0LiAqLwotI2RlZmluZSBQVVRQUE1TQU1QTEUocHRyLHYpCQkJXAotCXsgcmVnaXN0ZXIgaW50IHZhbF8gPSB2OwkJXAotCSAgKnB0cisrID0gKGNoYXIpICgodmFsXyA+PiA4KSAmIDB4RkYpOwlcCi0JICAqcHRyKysgPSAoY2hhcikgKHZhbF8gJiAweEZGKTsJXAotCX0KKyNkZWZpbmUgUFVUUFBNU0FNUExFKHB0cix2KSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeyByZWdpc3RlciBpbnQgdmFsXyA9IHY7ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAqcHRyKysgPSAoY2hhcikgKCh2YWxfID4+IDgpICYgMHhGRik7IFwKKyAgICAgICAgICAqcHRyKysgPSAoY2hhcikgKHZhbF8gJiAweEZGKTsgICAgICAgIFwKKyAgICAgICAgfQogI2RlZmluZSBCWVRFU1BFUlNBTVBMRSAyCiAjZGVmaW5lIFBQTV9NQVhWQUwgKCgxPDxCSVRTX0lOX0pTQU1QTEUpLTEpCiAjZW5kaWYKQEAgLTY3LDEzICs2NywxMyBAQAogLyogUHJpdmF0ZSB2ZXJzaW9uIG9mIGRhdGEgZGVzdGluYXRpb24gb2JqZWN0ICovCiAKIHR5cGVkZWYgc3RydWN0IHsKLSAgc3RydWN0IGRqcGVnX2Rlc3Rfc3RydWN0IHB1YjsJLyogcHVibGljIGZpZWxkcyAqLworICBzdHJ1Y3QgZGpwZWdfZGVzdF9zdHJ1Y3QgcHViOyAvKiBwdWJsaWMgZmllbGRzICovCiAKICAgLyogVXN1YWxseSB0aGVzZSB0d28gcG9pbnRlcnMgcG9pbnQgdG8gdGhlIHNhbWUgcGxhY2U6ICovCi0gIGNoYXIgKmlvYnVmZmVyOwkJLyogZndyaXRlJ3MgSS9PIGJ1ZmZlciAqLwotICBKU0FNUFJPVyBwaXhyb3c7CQkvKiBkZWNvbXByZXNzb3Igb3V0cHV0IGJ1ZmZlciAqLwotICBzaXplX3QgYnVmZmVyX3dpZHRoOwkJLyogd2lkdGggb2YgSS9PIGJ1ZmZlciAqLwotICBKRElNRU5TSU9OIHNhbXBsZXNfcGVyX3JvdzsJLyogSlNBTVBMRXMgcGVyIG91dHB1dCByb3cgKi8KKyAgY2hhciAqaW9idWZmZXI7ICAgICAgICAgICAgICAgLyogZndyaXRlJ3MgSS9PIGJ1ZmZlciAqLworICBKU0FNUFJPVyBwaXhyb3c7ICAgICAgICAgICAgICAvKiBkZWNvbXByZXNzb3Igb3V0cHV0IGJ1ZmZlciAqLworICBzaXplX3QgYnVmZmVyX3dpZHRoOyAgICAgICAgICAvKiB3aWR0aCBvZiBJL08gYnVmZmVyICovCisgIEpESU1FTlNJT04gc2FtcGxlc19wZXJfcm93OyAgIC8qIEpTQU1QTEVzIHBlciBvdXRwdXQgcm93ICovCiB9IHBwbV9kZXN0X3N0cnVjdDsKIAogdHlwZWRlZiBwcG1fZGVzdF9zdHJ1Y3QgKiBwcG1fZGVzdF9wdHI7CkBAIC04OSw3ICs4OSw3IEBACiAKIE1FVEhPRERFRih2b2lkKQogcHV0X3BpeGVsX3Jvd3MgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGRqcGVnX2Rlc3RfcHRyIGRpbmZvLAotCQlKRElNRU5TSU9OIHJvd3Nfc3VwcGxpZWQpCisgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiByb3dzX3N1cHBsaWVkKQogewogICBwcG1fZGVzdF9wdHIgZGVzdCA9IChwcG1fZGVzdF9wdHIpIGRpbmZvOwogCkBAIC0xMDQsNyArMTA0LDcgQEAKIAogTUVUSE9EREVGKHZvaWQpCiBjb3B5X3BpeGVsX3Jvd3MgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGRqcGVnX2Rlc3RfcHRyIGRpbmZvLAotCQkgSkRJTUVOU0lPTiByb3dzX3N1cHBsaWVkKQorICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIHJvd3Nfc3VwcGxpZWQpCiB7CiAgIHBwbV9kZXN0X3B0ciBkZXN0ID0gKHBwbV9kZXN0X3B0cikgZGluZm87CiAgIHJlZ2lzdGVyIGNoYXIgKiBidWZmZXJwdHI7CkBAIC0xMjcsNyArMTI3LDcgQEAKIAogTUVUSE9EREVGKHZvaWQpCiBwdXRfZGVtYXBwZWRfcmdiIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBkanBlZ19kZXN0X3B0ciBkaW5mbywKLQkJICBKRElNRU5TSU9OIHJvd3Nfc3VwcGxpZWQpCisgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIHJvd3Nfc3VwcGxpZWQpCiB7CiAgIHBwbV9kZXN0X3B0ciBkZXN0ID0gKHBwbV9kZXN0X3B0cikgZGluZm87CiAgIHJlZ2lzdGVyIGNoYXIgKiBidWZmZXJwdHI7CkBAIC0xNTIsNyArMTUyLDcgQEAKIAogTUVUSE9EREVGKHZvaWQpCiBwdXRfZGVtYXBwZWRfZ3JheSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgZGpwZWdfZGVzdF9wdHIgZGluZm8sCi0JCSAgIEpESU1FTlNJT04gcm93c19zdXBwbGllZCkKKyAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIHJvd3Nfc3VwcGxpZWQpCiB7CiAgIHBwbV9kZXN0X3B0ciBkZXN0ID0gKHBwbV9kZXN0X3B0cikgZGluZm87CiAgIHJlZ2lzdGVyIGNoYXIgKiBidWZmZXJwdHI7CkBAIC0xODMsMTQgKzE4MywxNCBAQAogICBjYXNlIEpDU19HUkFZU0NBTEU6CiAgICAgLyogZW1pdCBoZWFkZXIgZm9yIHJhdyBQR00gZm9ybWF0ICovCiAgICAgZnByaW50ZihkZXN0LT5wdWIub3V0cHV0X2ZpbGUsICJQNVxuJWxkICVsZFxuJWRcbiIsCi0JICAgIChsb25nKSBjaW5mby0+b3V0cHV0X3dpZHRoLCAobG9uZykgY2luZm8tPm91dHB1dF9oZWlnaHQsCi0JICAgIFBQTV9NQVhWQUwpOworICAgICAgICAgICAgKGxvbmcpIGNpbmZvLT5vdXRwdXRfd2lkdGgsIChsb25nKSBjaW5mby0+b3V0cHV0X2hlaWdodCwKKyAgICAgICAgICAgIFBQTV9NQVhWQUwpOwogICAgIGJyZWFrOwogICBjYXNlIEpDU19SR0I6CiAgICAgLyogZW1pdCBoZWFkZXIgZm9yIHJhdyBQUE0gZm9ybWF0ICovCiAgICAgZnByaW50ZihkZXN0LT5wdWIub3V0cHV0X2ZpbGUsICJQNlxuJWxkICVsZFxuJWRcbiIsCi0JICAgIChsb25nKSBjaW5mby0+b3V0cHV0X3dpZHRoLCAobG9uZykgY2luZm8tPm91dHB1dF9oZWlnaHQsCi0JICAgIFBQTV9NQVhWQUwpOworICAgICAgICAgICAgKGxvbmcpIGNpbmZvLT5vdXRwdXRfd2lkdGgsIChsb25nKSBjaW5mby0+b3V0cHV0X2hlaWdodCwKKyAgICAgICAgICAgIFBQTV9NQVhWQUwpOwogICAgIGJyZWFrOwogICBkZWZhdWx0OgogICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfUFBNX0NPTE9SU1BBQ0UpOwpAQCAtMjI0LDcgKzIyNCw3IEBACiAgIC8qIENyZWF0ZSBtb2R1bGUgaW50ZXJmYWNlIG9iamVjdCwgZmlsbCBpbiBtZXRob2QgcG9pbnRlcnMgKi8KICAgZGVzdCA9IChwcG1fZGVzdF9wdHIpCiAgICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAotCQkJCSAgU0laRU9GKHBwbV9kZXN0X3N0cnVjdCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJWkVPRihwcG1fZGVzdF9zdHJ1Y3QpKTsKICAgZGVzdC0+cHViLnN0YXJ0X291dHB1dCA9IHN0YXJ0X291dHB1dF9wcG07CiAgIGRlc3QtPnB1Yi5maW5pc2hfb3V0cHV0ID0gZmluaXNoX291dHB1dF9wcG07CiAKZGlmZiAtLWdpdCBhL3dycmxlLmMgYi93cnJsZS5jCmluZGV4IGE0ZTczMzcuLjRmZGYzNzIgMTAwNjQ0Ci0tLSBhL3dycmxlLmMKKysrIGIvd3JybGUuYwpAQCAtMTYsNyArMTYsNyBAQAogICogd2l0aCB1cGRhdGVzIGZyb20gUm9iZXJ0IEh1dGNoaW5zb24uCiAgKi8KIAotI2luY2x1ZGUgImNkanBlZy5oIgkJLyogQ29tbW9uIGRlY2xzIGZvciBjanBlZy9kanBlZyBhcHBsaWNhdGlvbnMgKi8KKyNpbmNsdWRlICJjZGpwZWcuaCIgICAgICAgICAgICAgLyogQ29tbW9uIGRlY2xzIGZvciBjanBlZy9kanBlZyBhcHBsaWNhdGlvbnMgKi8KIAogI2lmZGVmIFJMRV9TVVBQT1JURUQKIApAQCAtNDcsMTUgKzQ3LDE1IEBACiAgKiB0aG91Z2ggbm90IGFsbCBvZiB0aGUgZW50cmllcyBuZWVkIGJlIHVzZWQuCiAgKi8KIAotI2RlZmluZSBDTUFQQklUUwk4Ci0jZGVmaW5lIENNQVBMRU5HVEgJKDE8PChDTUFQQklUUykpCisjZGVmaW5lIENNQVBCSVRTICAgICAgICA4CisjZGVmaW5lIENNQVBMRU5HVEggICAgICAoMTw8KENNQVBCSVRTKSkKIAogdHlwZWRlZiBzdHJ1Y3QgewogICBzdHJ1Y3QgZGpwZWdfZGVzdF9zdHJ1Y3QgcHViOyAvKiBwdWJsaWMgZmllbGRzICovCiAKLSAganZpcnRfc2FycmF5X3B0ciBpbWFnZTsJLyogdmlydHVhbCBhcnJheSB0byBzdG9yZSB0aGUgb3V0cHV0IGltYWdlICovCi0gIHJsZV9tYXAgKmNvbG9ybWFwOwkgCS8qIFJMRS1zdHlsZSBjb2xvciBtYXAsIG9yIE5VTEwgaWYgbm9uZSAqLwotICBybGVfcGl4ZWwgKipybGVfcm93OwkJLyogVG8gcGFzcyByb3dzIHRvIHJsZV9wdXRyb3coKSAqLworICBqdmlydF9zYXJyYXlfcHRyIGltYWdlOyAgICAgICAvKiB2aXJ0dWFsIGFycmF5IHRvIHN0b3JlIHRoZSBvdXRwdXQgaW1hZ2UgKi8KKyAgcmxlX21hcCAqY29sb3JtYXA7ICAgICAgICAgICAgLyogUkxFLXN0eWxlIGNvbG9yIG1hcCwgb3IgTlVMTCBpZiBub25lICovCisgIHJsZV9waXhlbCAqKnJsZV9yb3c7ICAgICAgICAgIC8qIFRvIHBhc3Mgcm93cyB0byBybGVfcHV0cm93KCkgKi8KIAogfSBybGVfZGVzdF9zdHJ1Y3Q7CiAKQEAgLTY0LDcgKzY0LDcgQEAKIC8qIEZvcndhcmQgZGVjbGFyYXRpb25zICovCiBNRVRIT0RERUYodm9pZCkgcmxlX3B1dF9waXhlbF9yb3dzCiAgICAgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBkanBlZ19kZXN0X3B0ciBkaW5mbywKLQkgSkRJTUVOU0lPTiByb3dzX3N1cHBsaWVkKSk7CisgICAgICAgICBKRElNRU5TSU9OIHJvd3Nfc3VwcGxpZWQpKTsKIAogCiAvKgpAQCAtOTcsOCArOTcsOCBAQAogICAgKi8KIAogICBpZiAoY2luZm8tPm91dHB1dF93aWR0aCA+IDMyNzY3IHx8IGNpbmZvLT5vdXRwdXRfaGVpZ2h0ID4gMzI3NjcpCi0gICAgRVJSRVhJVDIoY2luZm8sIEpFUlJfUkxFX0RJTUVOU0lPTlMsIGNpbmZvLT5vdXRwdXRfd2lkdGgsIAotCSAgICAgY2luZm8tPm91dHB1dF9oZWlnaHQpOworICAgIEVSUkVYSVQyKGNpbmZvLCBKRVJSX1JMRV9ESU1FTlNJT05TLCBjaW5mby0+b3V0cHV0X3dpZHRoLAorICAgICAgICAgICAgIGNpbmZvLT5vdXRwdXRfaGVpZ2h0KTsKIAogICBpZiAoY2luZm8tPm91dF9jb2xvcl9zcGFjZSAhPSBKQ1NfR1JBWVNDQUxFICYmCiAgICAgICBjaW5mby0+b3V0X2NvbG9yX3NwYWNlICE9IEpDU19SR0IpCkBAIC0xNTEsNyArMTUxLDcgQEAKIAogTUVUSE9EREVGKHZvaWQpCiBybGVfcHV0X3BpeGVsX3Jvd3MgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGRqcGVnX2Rlc3RfcHRyIGRpbmZvLAotCQkgICAgSkRJTUVOU0lPTiByb3dzX3N1cHBsaWVkKQorICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIHJvd3Nfc3VwcGxpZWQpCiB7CiAgIHJsZV9kZXN0X3B0ciBkZXN0ID0gKHJsZV9kZXN0X3B0cikgZGluZm87CiAKQEAgLTE3Miw3ICsxNzIsNyBAQAogZmluaXNoX291dHB1dF9ybGUgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGRqcGVnX2Rlc3RfcHRyIGRpbmZvKQogewogICBybGVfZGVzdF9wdHIgZGVzdCA9IChybGVfZGVzdF9wdHIpIGRpbmZvOwotICBybGVfaGRyIGhlYWRlcjsJCS8qIE91dHB1dCBmaWxlIGluZm9ybWF0aW9uICovCisgIHJsZV9oZHIgaGVhZGVyOyAgICAgICAgICAgICAgIC8qIE91dHB1dCBmaWxlIGluZm9ybWF0aW9uICovCiAgIHJsZV9waXhlbCAqKnJsZV9yb3csICpyZWQsICpncmVlbiwgKmJsdWU7CiAgIEpTQU1QUk9XIG91dHB1dF9yb3c7CiAgIGNoYXIgY21hcGNvbW1lbnRbODBdOwpAQCAtMjIzLDcgKzIyMyw3IEBACiAgICAgZm9yIChyb3cgPSBjaW5mby0+b3V0cHV0X2hlaWdodC0xOyByb3cgPj0gMDsgcm93LS0pIHsKICAgICAgIHJsZV9yb3cgPSAocmxlX3BpeGVsICoqKSAoKmNpbmZvLT5tZW0tPmFjY2Vzc192aXJ0X3NhcnJheSkKICAgICAgICAgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBkZXN0LT5pbWFnZSwKLQkgKEpESU1FTlNJT04pIHJvdywgKEpESU1FTlNJT04pIDEsIEZBTFNFKTsKKyAgICAgICAgIChKRElNRU5TSU9OKSByb3csIChKRElNRU5TSU9OKSAxLCBGQUxTRSk7CiAgICAgICBybGVfcHV0cm93KHJsZV9yb3csIChpbnQpIGNpbmZvLT5vdXRwdXRfd2lkdGgsICZoZWFkZXIpOwogI2lmZGVmIFBST0dSRVNTX1JFUE9SVAogICAgICAgaWYgKHByb2dyZXNzICE9IE5VTEwpIHsKQEAgLTIzNyw3ICsyMzcsNyBAQAogICAgICAgcmxlX3JvdyA9IChybGVfcGl4ZWwgKiopIGRlc3QtPnJsZV9yb3c7CiAgICAgICBvdXRwdXRfcm93ID0gKiAoKmNpbmZvLT5tZW0tPmFjY2Vzc192aXJ0X3NhcnJheSkKICAgICAgICAgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBkZXN0LT5pbWFnZSwKLQkgKEpESU1FTlNJT04pIHJvdywgKEpESU1FTlNJT04pIDEsIEZBTFNFKTsKKyAgICAgICAgIChKRElNRU5TSU9OKSByb3csIChKRElNRU5TSU9OKSAxLCBGQUxTRSk7CiAgICAgICByZWQgPSBybGVfcm93WzBdOwogICAgICAgZ3JlZW4gPSBybGVfcm93WzFdOwogICAgICAgYmx1ZSA9IHJsZV9yb3dbMl07CmRpZmYgLS1naXQgYS93cnRhcmdhLmMgYi93cnRhcmdhLmMKaW5kZXggY2YxMDRkMi4uZmZkY2U2MyAxMDA2NDQKLS0tIGEvd3J0YXJnYS5jCisrKyBiL3dydGFyZ2EuYwpAQCAtMTQsNyArMTQsNyBAQAogICogQmFzZWQgb24gY29kZSBjb250cmlidXRlZCBieSBMZWUgRGFuaWVsIENyb2NrZXIuCiAgKi8KIAotI2luY2x1ZGUgImNkanBlZy5oIgkJLyogQ29tbW9uIGRlY2xzIGZvciBjanBlZy9kanBlZyBhcHBsaWNhdGlvbnMgKi8KKyNpbmNsdWRlICJjZGpwZWcuaCIgICAgICAgICAgICAgLyogQ29tbW9uIGRlY2xzIGZvciBjanBlZy9kanBlZyBhcHBsaWNhdGlvbnMgKi8KIAogI2lmZGVmIFRBUkdBX1NVUFBPUlRFRAogCkBAIC00MSwxMCArNDEsMTAgQEAKIC8qIFByaXZhdGUgdmVyc2lvbiBvZiBkYXRhIGRlc3RpbmF0aW9uIG9iamVjdCAqLwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gIHN0cnVjdCBkanBlZ19kZXN0X3N0cnVjdCBwdWI7CS8qIHB1YmxpYyBmaWVsZHMgKi8KKyAgc3RydWN0IGRqcGVnX2Rlc3Rfc3RydWN0IHB1YjsgLyogcHVibGljIGZpZWxkcyAqLwogCi0gIGNoYXIgKmlvYnVmZmVyOwkJLyogcGh5c2ljYWwgSS9PIGJ1ZmZlciAqLwotICBKRElNRU5TSU9OIGJ1ZmZlcl93aWR0aDsJLyogd2lkdGggb2Ygb25lIHJvdyAqLworICBjaGFyICppb2J1ZmZlcjsgICAgICAgICAgICAgICAvKiBwaHlzaWNhbCBJL08gYnVmZmVyICovCisgIEpESU1FTlNJT04gYnVmZmVyX3dpZHRoOyAgICAgIC8qIHdpZHRoIG9mIG9uZSByb3cgKi8KIH0gdGdhX2Rlc3Rfc3RydWN0OwogCiB0eXBlZGVmIHRnYV9kZXN0X3N0cnVjdCAqIHRnYV9kZXN0X3B0cjsKQEAgLTYwLDI3ICs2MCwyNyBAQAogICBNRU1aRVJPKHRhcmdhaGVhZGVyLCBTSVpFT0YodGFyZ2FoZWFkZXIpKTsKIAogICBpZiAobnVtX2NvbG9ycyA+IDApIHsKLSAgICB0YXJnYWhlYWRlclsxXSA9IDE7CQkvKiBjb2xvciBtYXAgdHlwZSAxICovCisgICAgdGFyZ2FoZWFkZXJbMV0gPSAxOyAgICAgICAgIC8qIGNvbG9yIG1hcCB0eXBlIDEgKi8KICAgICB0YXJnYWhlYWRlcls1XSA9IChjaGFyKSAobnVtX2NvbG9ycyAmIDB4RkYpOwogICAgIHRhcmdhaGVhZGVyWzZdID0gKGNoYXIpIChudW1fY29sb3JzID4+IDgpOwotICAgIHRhcmdhaGVhZGVyWzddID0gMjQ7CS8qIDI0IGJpdHMgcGVyIGNtYXAgZW50cnkgKi8KKyAgICB0YXJnYWhlYWRlcls3XSA9IDI0OyAgICAgICAgLyogMjQgYml0cyBwZXIgY21hcCBlbnRyeSAqLwogICB9CiAKICAgdGFyZ2FoZWFkZXJbMTJdID0gKGNoYXIpIChjaW5mby0+b3V0cHV0X3dpZHRoICYgMHhGRik7CiAgIHRhcmdhaGVhZGVyWzEzXSA9IChjaGFyKSAoY2luZm8tPm91dHB1dF93aWR0aCA+PiA4KTsKICAgdGFyZ2FoZWFkZXJbMTRdID0gKGNoYXIpIChjaW5mby0+b3V0cHV0X2hlaWdodCAmIDB4RkYpOwogICB0YXJnYWhlYWRlclsxNV0gPSAoY2hhcikgKGNpbmZvLT5vdXRwdXRfaGVpZ2h0ID4+IDgpOwotICB0YXJnYWhlYWRlclsxN10gPSAweDIwOwkvKiBUb3AtZG93biwgbm9uLWludGVybGFjZWQgKi8KKyAgdGFyZ2FoZWFkZXJbMTddID0gMHgyMDsgICAgICAgLyogVG9wLWRvd24sIG5vbi1pbnRlcmxhY2VkICovCiAKICAgaWYgKGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UgPT0gSkNTX0dSQVlTQ0FMRSkgewotICAgIHRhcmdhaGVhZGVyWzJdID0gMzsJCS8qIGltYWdlIHR5cGUgPSB1bmNvbXByZXNzZWQgZ3JheS1zY2FsZSAqLwotICAgIHRhcmdhaGVhZGVyWzE2XSA9IDg7CS8qIGJpdHMgcGVyIHBpeGVsICovCi0gIH0gZWxzZSB7CQkJLyogbXVzdCBiZSBSR0IgKi8KKyAgICB0YXJnYWhlYWRlclsyXSA9IDM7ICAgICAgICAgLyogaW1hZ2UgdHlwZSA9IHVuY29tcHJlc3NlZCBncmF5c2NhbGUgKi8KKyAgICB0YXJnYWhlYWRlclsxNl0gPSA4OyAgICAgICAgLyogYml0cyBwZXIgcGl4ZWwgKi8KKyAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgLyogbXVzdCBiZSBSR0IgKi8KICAgICBpZiAobnVtX2NvbG9ycyA+IDApIHsKLSAgICAgIHRhcmdhaGVhZGVyWzJdID0gMTsJLyogaW1hZ2UgdHlwZSA9IGNvbG9ybWFwcGVkIFJHQiAqLworICAgICAgdGFyZ2FoZWFkZXJbMl0gPSAxOyAgICAgICAvKiBpbWFnZSB0eXBlID0gY29sb3JtYXBwZWQgUkdCICovCiAgICAgICB0YXJnYWhlYWRlclsxNl0gPSA4OwogICAgIH0gZWxzZSB7Ci0gICAgICB0YXJnYWhlYWRlclsyXSA9IDI7CS8qIGltYWdlIHR5cGUgPSB1bmNvbXByZXNzZWQgUkdCICovCisgICAgICB0YXJnYWhlYWRlclsyXSA9IDI7ICAgICAgIC8qIGltYWdlIHR5cGUgPSB1bmNvbXByZXNzZWQgUkdCICovCiAgICAgICB0YXJnYWhlYWRlclsxNl0gPSAyNDsKICAgICB9CiAgIH0KQEAgLTk3LDcgKzk3LDcgQEAKIAogTUVUSE9EREVGKHZvaWQpCiBwdXRfcGl4ZWxfcm93cyAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgZGpwZWdfZGVzdF9wdHIgZGluZm8sCi0JCUpESU1FTlNJT04gcm93c19zdXBwbGllZCkKKyAgICAgICAgICAgICAgICBKRElNRU5TSU9OIHJvd3Nfc3VwcGxpZWQpCiAvKiB1c2VkIGZvciB1bnF1YW50aXplZCBmdWxsLWNvbG9yIG91dHB1dCAqLwogewogICB0Z2FfZGVzdF9wdHIgZGVzdCA9ICh0Z2FfZGVzdF9wdHIpIGRpbmZvOwpAQCAtMTE4LDcgKzExOCw3IEBACiAKIE1FVEhPRERFRih2b2lkKQogcHV0X2dyYXlfcm93cyAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgZGpwZWdfZGVzdF9wdHIgZGluZm8sCi0JICAgICAgIEpESU1FTlNJT04gcm93c19zdXBwbGllZCkKKyAgICAgICAgICAgICAgIEpESU1FTlNJT04gcm93c19zdXBwbGllZCkKIC8qIHVzZWQgZm9yIGdyYXlzY2FsZSBPUiBxdWFudGl6ZWQgY29sb3Igb3V0cHV0ICovCiB7CiAgIHRnYV9kZXN0X3B0ciBkZXN0ID0gKHRnYV9kZXN0X3B0cikgZGluZm87CkBAIC0xNDIsNyArMTQyLDcgQEAKIAogTUVUSE9EREVGKHZvaWQpCiBwdXRfZGVtYXBwZWRfZ3JheSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgZGpwZWdfZGVzdF9wdHIgZGluZm8sCi0JCSAgIEpESU1FTlNJT04gcm93c19zdXBwbGllZCkKKyAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIHJvd3Nfc3VwcGxpZWQpCiB7CiAgIHRnYV9kZXN0X3B0ciBkZXN0ID0gKHRnYV9kZXN0X3B0cikgZGluZm87CiAgIHJlZ2lzdGVyIEpTQU1QUk9XIGlucHRyOwpAQCAtMTgzLDE0ICsxODMsMTQgQEAKICAgICAgIC8qIFdlIG9ubHkgc3VwcG9ydCA4LWJpdCBjb2xvcm1hcCBpbmRleGVzLCBzbyBvbmx5IDI1NiBjb2xvcnMgKi8KICAgICAgIG51bV9jb2xvcnMgPSBjaW5mby0+YWN0dWFsX251bWJlcl9vZl9jb2xvcnM7CiAgICAgICBpZiAobnVtX2NvbG9ycyA+IDI1NikKLQlFUlJFWElUMShjaW5mbywgSkVSUl9UT09fTUFOWV9DT0xPUlMsIG51bV9jb2xvcnMpOworICAgICAgICBFUlJFWElUMShjaW5mbywgSkVSUl9UT09fTUFOWV9DT0xPUlMsIG51bV9jb2xvcnMpOwogICAgICAgd3JpdGVfaGVhZGVyKGNpbmZvLCBkaW5mbywgbnVtX2NvbG9ycyk7CiAgICAgICAvKiBXcml0ZSB0aGUgY29sb3JtYXAuICBOb3RlIFRhcmdhIHVzZXMgQkdSIGJ5dGUgb3JkZXIgKi8KICAgICAgIG91dGZpbGUgPSBkZXN0LT5wdWIub3V0cHV0X2ZpbGU7CiAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2NvbG9yczsgaSsrKSB7Ci0JcHV0YyhHRVRKU0FNUExFKGNpbmZvLT5jb2xvcm1hcFsyXVtpXSksIG91dGZpbGUpOwotCXB1dGMoR0VUSlNBTVBMRShjaW5mby0+Y29sb3JtYXBbMV1baV0pLCBvdXRmaWxlKTsKLQlwdXRjKEdFVEpTQU1QTEUoY2luZm8tPmNvbG9ybWFwWzBdW2ldKSwgb3V0ZmlsZSk7CisgICAgICAgIHB1dGMoR0VUSlNBTVBMRShjaW5mby0+Y29sb3JtYXBbMl1baV0pLCBvdXRmaWxlKTsKKyAgICAgICAgcHV0YyhHRVRKU0FNUExFKGNpbmZvLT5jb2xvcm1hcFsxXVtpXSksIG91dGZpbGUpOworICAgICAgICBwdXRjKEdFVEpTQU1QTEUoY2luZm8tPmNvbG9ybWFwWzBdW2ldKSwgb3V0ZmlsZSk7CiAgICAgICB9CiAgICAgICBkZXN0LT5wdWIucHV0X3BpeGVsX3Jvd3MgPSBwdXRfZ3JheV9yb3dzOwogICAgIH0gZWxzZSB7CkBAIC0yMjksNyArMjI5LDcgQEAKICAgLyogQ3JlYXRlIG1vZHVsZSBpbnRlcmZhY2Ugb2JqZWN0LCBmaWxsIGluIG1ldGhvZCBwb2ludGVycyAqLwogICBkZXN0ID0gKHRnYV9kZXN0X3B0cikKICAgICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCi0JCQkJICBTSVpFT0YodGdhX2Rlc3Rfc3RydWN0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0laRU9GKHRnYV9kZXN0X3N0cnVjdCkpOwogICBkZXN0LT5wdWIuc3RhcnRfb3V0cHV0ID0gc3RhcnRfb3V0cHV0X3RnYTsKICAgZGVzdC0+cHViLmZpbmlzaF9vdXRwdXQgPSBmaW5pc2hfb3V0cHV0X3RnYTsKIApAQCAtMjQwLDcgKzI0MCw3IEBACiAgIGRlc3QtPmJ1ZmZlcl93aWR0aCA9IGNpbmZvLT5vdXRwdXRfd2lkdGggKiBjaW5mby0+b3V0cHV0X2NvbXBvbmVudHM7CiAgIGRlc3QtPmlvYnVmZmVyID0gKGNoYXIgKikKICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAotCQkJCShzaXplX3QpIChkZXN0LT5idWZmZXJfd2lkdGggKiBTSVpFT0YoY2hhcikpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNpemVfdCkgKGRlc3QtPmJ1ZmZlcl93aWR0aCAqIFNJWkVPRihjaGFyKSkpOwogCiAgIC8qIENyZWF0ZSBkZWNvbXByZXNzb3Igb3V0cHV0IGJ1ZmZlci4gKi8KICAgZGVzdC0+cHViLmJ1ZmZlciA9ICgqY2luZm8tPm1lbS0+YWxsb2Nfc2FycmF5KQo=