ZGlmZiAtLWdpdCBhL3Rjay9kb2NzL0NBSjIuMS1SZWxlYXNlTm90ZXMuaHRtbCBiL3Rjay9kb2NzL0NBSjIuMS1SZWxlYXNlTm90ZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzE4NzlkCi0tLSAvZGV2L251bGwKKysrIGIvdGNrL2RvY3MvQ0FKMi4xLVJlbGVhc2VOb3Rlcy5odG1sCkBAIC0wLDAgKzEsNzMgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+CisgIDxoZWFkPgorICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+CisgICAgPHRpdGxlPkpha2FydGEgQW5ub3RhdGlvbnMgVENLLCBWZXJzaW9uIDIuMSBSZWxlYXNlIE5vdGVzLCBEZWNlbWJlciAyMDIxPC90aXRsZT4KKyAgICA8IS0tCisgICAgQ29weXJpZ2h0IChjKSAyMDE4LCAyMDIxIE9yYWNsZSBhbmQvb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQorICAgIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYuIDIuMCwgd2hpY2ggaXMgYXZhaWxhYmxlIGF0ICAgIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC4gICAgVGhpcyBTb3VyY2UgQ29kZSBtYXkgYWxzbyBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgZm9sbG93aW5nIFNlY29uZGFyeQorICAgIExpY2Vuc2VzIHdoZW4gdGhlIGNvbmRpdGlvbnMgZm9yIHN1Y2ggYXZhaWxhYmlsaXR5IHNldCBmb3J0aCBpbiB0aGUgICAgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2LiAyLjAgYXJlIHNhdGlzZmllZDogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsICAgIHZlcnNpb24gMiB3aXRoIHRoZSBHTlUgQ2xhc3NwYXRoIEV4Y2VwdGlvbiwgd2hpY2ggaXMgYXZhaWxhYmxlIGF0ICAgIGh0dHBzOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvY2xhc3NwYXRoL2xpY2Vuc2UuaHRtbC4KKyAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAtLT4KKyAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorPCEtLQorYm9keSB7ICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmRkOyBjb2xvcjogIzAwMDAwMH0KK3ByZSB7ICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlZWVlOyBjb2xvcjogIzAwMDA5OTsgZm9udC1zaXplOiBzbWFsbGVyfQorY29kZSB7ICBjb2xvcjogIzAwMDA5OTsgZm9udC1zaXplOiBzbWFsbGVyfQoraDEgeyAgY29sb3I6ICMwMDAwOTl9CitoMiB7ICBjb2xvcjogIzAwMDA5OX0KK2gzIHsgIGNvbG9yOiAjMDAwMDk5OyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZX0KK2g0IHsgIGZvbnQtc3R5bGU6IGl0YWxpYzsgY29sb3I6ICMwMDAwOTl9CisudGFibGV0aXRsZSB7ICBmb250LXN0eWxlOiBpdGFsaWM7IGNvbG9yOiAjZmZmZmNjOyBmb250LXNpemU6IHNtYWxsOyBmb250LXZhcmlhbnQ6IHNtYWxsLWNhcHN9Cisuc3VidGl0bGUgeyAgZm9udC1zdHlsZTogaXRhbGljOyBjb2xvcjogI2ZmZmZjYzsgZm9udC12YXJpYW50OiBzbWFsbC1jYXBzfQorLmVtcGhhc2l6ZSAgeyAgZm9udC1zdHlsZTogaXRhbGljOyBjb2xvcjogIzAwMDA5OX0KKy5zdGVwICB7IGZvbnQtd2VpZ2h0OiBib2xkfQorLm5vdGUgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmYwOyBib3JkZXItYm90dG9tLXdpZHRoOiB0aGluOyBib3JkZXItdG9wLXdpZHRoOiB0aGluOyBib3JkZXItdG9wLXN0eWxlOiBpbnNldDsgYm9yZGVyLWJvdHRvbS1zdHlsZTogaW5zZXQ7IGZvbnQtc2l6ZTogLTEwJTt9Cit0aCB7ICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlZWVlOyBwYWRkaW5nLWxlZnQ6IDJwdDsgcGFkZGluZy1yaWdodDogMnB0O30KKy0tPgorPC9zdHlsZT48L2hlYWQ+CisgIDxib2R5PgorICAgIDxkaXYgYWxpZ249ImNlbnRlciI+CisgICAgICA8aDE+SmFrYXJ0YSBBbm5vdGF0aW9ucyBUZWNobm9sb2d5IENvbXBhdGliaWxpdHkgS2l0LCBWZXJzaW9uIDIuMTxicj4KKyAgICAgICAgPGVtIGNsYXNzPSJlbXBoYXNpemUiPlJlbGVhc2UgTm90ZXMsIERlY2VtYmVyIDIwMjE8L2VtPjwvaDE+CisgICAgPC9kaXY+CisgICAgPGgyPjxhIG5hbWU9ImtpdF9jb250ZW50cyI+S2l0IENvbnRlbnRzPC9hPjwvaDI+CisgICAgPHA+VGhlIEpha2FydGEgQW5ub3RhdGlvbnMsIFZlcnNpb24gMi4xIFRlY2hub2xvZ3kgQ29tcGF0aWJpbGl0eSBLaXQgKFRDSykKKyAgICAgIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgaXRlbXM6PC9wPgorICAgIDx1bD4KKyAgICAgIDxsaT4KKyAgICAgICAgPHA+PHN0cm9uZz5KYWthcnRhIEFubm90YXRpb25zIFRDSyBTaWduYXR1cmUgVGVzdHM6PC9zdHJvbmc+IENoZWNrIHRoYXQKKyAgICAgICAgICBhbGwgcHVibGljIEFQSXMgYXJlIHN1cHBvcnRlZCBhbmQvb3IgZGVmaW5lZCBhcyBzcGVjaWZpZWQgaW4gdGhlCisgICAgICAgICAgSmFrYXJ0YSBBbm5vdGF0aW9ucyBzcGVjaWZpY2F0aW9uLCBWZXJzaW9uIDIuMSBpbXBsZW1lbnRhdGlvbiB1bmRlcgorICAgICAgICAgIHRlc3QuPC9wPgorICAgICAgPC9saT4KKyAgICA8L3VsPgorICAgIDxocj4KKyAgICA8aDI+PGEgbmFtZT0icGxhdGZvcm0iPlBsYXRmb3JtIE5vdGVzPC9hPjwvaDI+CisgICAgPHA+VGhlIEpha2FydGEgQW5ub3RhdGlvbnMgVENLIHRlc3RzIGhhdmUgYmVlbiBidWlsdCB3aXRoIEpESyAxMSBhbmQgdGVzdGVkCisgICAgICB3aXRoIE9wZW5KREsgMTEgYW5kIE9wZW5KREsgMTcuPC9wPgorICAgIDxwPlRoZSBKYWthcnRhIEFubm90YXRpb25zIFRDSyB0ZXN0cyBoYXZlIGJlZW4gcnVuIG9uIHRoZSBmb2xsb3dpbmcKKyAgICAgIHBsYXRmb3Jtczo8L3A+CisgICAgPHVsPgorICAgICAgPGxpPkRlYmlhbiBMaW51eCAxMDwvbGk+CisgICAgPC91bD4KKyAgICA8cD5UaGUgSmFrYXJ0YSBBbm5vdGF0aW9ucyBUQ0sgdGVzdHMgaGF2ZSBiZWVuIHJ1biBhZ2FpbnN0IHRoZSBmb2xsb3dpbmcKKyAgICAgIENvbW1vbiBBbm5vdGF0aW9ucyBmb3IgSmFrYXJ0YSBFRSBjb21wYXRpYmxlIGltcGxlbWVudGF0aW9uczo8L3A+CisgICAgPHVsPgorICAgICAgPGxpPkpha2FydGEgQW5ub3RhdGlvbnMgZm9yIEphdmEgQ29tcGF0aWJsZSBJbXBsZW1lbnRhdGlvbiBWZXJzaW9uIDIuMTwvbGk+CisgICAgPC91bD4KKyAgICA8aHI+CisgICAgPGgyPjxhIG5hbWU9Imluc3RhbGxfc2V0dXBfcnVuIj5JbnN0YWxsaW5nLCBTZXR0aW5nIFVwLCBhbmQgUnVubmluZyB0aGUKKyAgICAgICAgSmFrYXJ0YSBBbm5vdGF0aW9ucyBUQ0s8L2E+PC9oMj4KKyAgICA8cD5SZWZlciB0byB0aGUgPGNpdGU+SmFrYXJ0YSBBbm5vdGF0aW9ucyBmb3IgSmFrYXJ0YSBFRSBUQ0sgMi4xIFVzZXIncworICAgICAgICBHdWlkZTwvY2l0ZT4gZm9yIGNvbXBsZXRlIGluc3RydWN0aW9ucyBvbiBpbnN0YWxsaW5nLCBzZXR0aW5nIHVwLCBhbmQKKyAgICAgIHJ1bm5pbmcgdGhlIEpha2FydGEgQW5ub3RhdGlvbnMgVENLLiBUaGUgb25saW5lIHZlcnNpb24gb2YgdGhlIEpUIEhhcm5lc3MKKyAgICAgIHZlcnNpb24gNS4wIGRvY3VtZW50YXRpb24gaXMgYXZhaWxhYmxlIDxhIGhyZWY9Imh0dHBzOi8vd2lraS5vcGVuamRrLmphdmEubmV0L2Rpc3BsYXkvQ29kZVRvb2xzL0RvY3VtZW50YXRpb24iPmhlcmU8L2E+LjwvcD4KKyAgICA8aHI+CisgICAgPHA+PGNpdGU+PHNtYWxsPjwvc21hbGw+PC9jaXRlPjwvcD4KKyAgICA8YWRkcmVzcz48c21hbGw+IENvcHlyaWdodCCpIDIwMTMsIDIwMjEgT3JhY2xlIGFuZC9vciBpdHMgYWZmaWxpYXRlcy4gQWxsCisgICAgICAgIHJpZ2h0cyByZXNlcnZlZC4gPC9zbWFsbD48L2FkZHJlc3M+CisgICAgPGNpdGU+CisgICAgICA8cD48L3A+CisgICAgPC9jaXRlPgorICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS90Y2svZG9jcy9DQUozLjAtUmVsZWFzZU5vdGVzLmh0bWwgYi90Y2svZG9jcy9DQUozLjAtUmVsZWFzZU5vdGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFlYzlhNQotLS0gL2Rldi9udWxsCisrKyBiL3Rjay9kb2NzL0NBSjMuMC1SZWxlYXNlTm90ZXMuaHRtbApAQCAtMCwwICsxLDcyIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorICA8aGVhZD4KKyAgICA8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgorICAgIDx0aXRsZT5KYWthcnRhIEFubm90YXRpb25zIFRDSywgVmVyc2lvbiAyLjEgUmVsZWFzZSBOb3RlcywgRGVjZW1iZXIgMjAyMTwvdGl0bGU+CisgICAgPCEtLQorICAgIENvcHlyaWdodCAoYykgMjAyNCBPcmFjbGUgYW5kL29yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKKyAgICB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2LiAyLjAsIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCAgICBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAuICAgIFRoaXMgU291cmNlIENvZGUgbWF5IGFsc28gYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIGZvbGxvd2luZyBTZWNvbmRhcnkKKyAgICBMaWNlbnNlcyB3aGVuIHRoZSBjb25kaXRpb25zIGZvciBzdWNoIGF2YWlsYWJpbGl0eSBzZXQgZm9ydGggaW4gdGhlICAgIEVjbGlwc2UgUHVibGljIExpY2Vuc2Ugdi4gMi4wIGFyZSBzYXRpc2ZpZWQ6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCAgICB2ZXJzaW9uIDIgd2l0aCB0aGUgR05VIENsYXNzcGF0aCBFeGNlcHRpb24sIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCAgICBodHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2NsYXNzcGF0aC9saWNlbnNlLmh0bWwuCisgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wLS0+CisgICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKzwhLS0KK2JvZHkgeyAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZkZDsgY29sb3I6ICMwMDAwMDB9CitwcmUgeyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZWVlZTsgY29sb3I6ICMwMDAwOTk7IGZvbnQtc2l6ZTogc21hbGxlcn0KK2NvZGUgeyAgY29sb3I6ICMwMDAwOTk7IGZvbnQtc2l6ZTogc21hbGxlcn0KK2gxIHsgIGNvbG9yOiAjMDAwMDk5fQoraDIgeyAgY29sb3I6ICMwMDAwOTl9CitoMyB7ICBjb2xvcjogIzAwMDA5OTsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmV9CitoNCB7ICBmb250LXN0eWxlOiBpdGFsaWM7IGNvbG9yOiAjMDAwMDk5fQorLnRhYmxldGl0bGUgeyAgZm9udC1zdHlsZTogaXRhbGljOyBjb2xvcjogI2ZmZmZjYzsgZm9udC1zaXplOiBzbWFsbDsgZm9udC12YXJpYW50OiBzbWFsbC1jYXBzfQorLnN1YnRpdGxlIHsgIGZvbnQtc3R5bGU6IGl0YWxpYzsgY29sb3I6ICNmZmZmY2M7IGZvbnQtdmFyaWFudDogc21hbGwtY2Fwc30KKy5lbXBoYXNpemUgIHsgIGZvbnQtc3R5bGU6IGl0YWxpYzsgY29sb3I6ICMwMDAwOTl9Cisuc3RlcCAgeyBmb250LXdlaWdodDogYm9sZH0KKy5ub3RlIHsgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmMDsgYm9yZGVyLWJvdHRvbS13aWR0aDogdGhpbjsgYm9yZGVyLXRvcC13aWR0aDogdGhpbjsgYm9yZGVyLXRvcC1zdHlsZTogaW5zZXQ7IGJvcmRlci1ib3R0b20tc3R5bGU6IGluc2V0OyBmb250LXNpemU6IC0xMCU7fQordGggeyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZWVlZTsgcGFkZGluZy1sZWZ0OiAycHQ7IHBhZGRpbmctcmlnaHQ6IDJwdDt9CistLT4KKzwvc3R5bGU+PC9oZWFkPgorICA8Ym9keT4KKyAgICA8ZGl2IGFsaWduPSJjZW50ZXIiPgorICAgICAgPGgxPkpha2FydGEgQW5ub3RhdGlvbnMgVGVjaG5vbG9neSBDb21wYXRpYmlsaXR5IEtpdCwgVmVyc2lvbiAzLjA8YnI+CisgICAgICAgIDxlbSBjbGFzcz0iZW1waGFzaXplIj5SZWxlYXNlIE5vdGVzLCBGZWJydWFyeSAyMDI0PC9lbT48L2gxPgorICAgIDwvZGl2PgorICAgIDxoMj48YSBuYW1lPSJraXRfY29udGVudHMiPktpdCBDb250ZW50czwvYT48L2gyPgorICAgIDxwPlRoZSBKYWthcnRhIEFubm90YXRpb25zLCBWZXJzaW9uIDMuMCBUZWNobm9sb2d5IENvbXBhdGliaWxpdHkgS2l0IChUQ0spCisgICAgICBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGl0ZW1zOjwvcD4KKyAgICA8dWw+CisgICAgICA8bGk+CisgICAgICAgIDxwPjxzdHJvbmc+SmFrYXJ0YSBBbm5vdGF0aW9ucyBUQ0sgU2lnbmF0dXJlIFRlc3RzOjwvc3Ryb25nPiBDaGVjayB0aGF0CisgICAgICAgICAgYWxsIHB1YmxpYyBBUElzIGFyZSBzdXBwb3J0ZWQgYW5kL29yIGRlZmluZWQgYXMgc3BlY2lmaWVkIGluIHRoZQorICAgICAgICAgIEpha2FydGEgQW5ub3RhdGlvbnMgc3BlY2lmaWNhdGlvbiwgVmVyc2lvbiAzLjAgaW1wbGVtZW50YXRpb24gdW5kZXIKKyAgICAgICAgICB0ZXN0LjwvcD4KKyAgICAgIDwvbGk+CisgICAgPC91bD4KKyAgICA8aHI+CisgICAgPGgyPjxhIG5hbWU9InBsYXRmb3JtIj5QbGF0Zm9ybSBOb3RlczwvYT48L2gyPgorICAgIDxwPlRoZSBKYWthcnRhIEFubm90YXRpb25zIFRDSyB0ZXN0cyBoYXZlIGJlZW4gYnVpbHQgd2l0aCBKREsgMTcgYW5kIHRlc3RlZAorICAgICAgd2l0aCBPcGVuSkRLIDE3PC9wPgorICAgIDxwPlRoZSBKYWthcnRhIEFubm90YXRpb25zIFRDSyB0ZXN0cyBoYXZlIGJlZW4gcnVuIG9uIHRoZSBmb2xsb3dpbmcKKyAgICAgIHBsYXRmb3Jtczo8L3A+CisgICAgPHVsPgorICAgICAgPGxpPkRlYmlhbiBMaW51eCAxMDwvbGk+CisgICAgPC91bD4KKyAgICA8cD5UaGUgSmFrYXJ0YSBBbm5vdGF0aW9ucyBUQ0sgdGVzdHMgaGF2ZSBiZWVuIHJ1biBhZ2FpbnN0IHRoZSBmb2xsb3dpbmcKKyAgICAgIENvbW1vbiBBbm5vdGF0aW9ucyBmb3IgSmFrYXJ0YSBFRSBjb21wYXRpYmxlIGltcGxlbWVudGF0aW9uczo8L3A+CisgICAgPHVsPgorICAgICAgPGxpPkpha2FydGEgQW5ub3RhdGlvbnMgZm9yIEphdmEgQ29tcGF0aWJsZSBJbXBsZW1lbnRhdGlvbiBWZXJzaW9uIDMuMDwvbGk+CisgICAgPC91bD4KKyAgICA8aHI+CisgICAgPGgyPjxhIG5hbWU9Imluc3RhbGxfc2V0dXBfcnVuIj5JbnN0YWxsaW5nLCBTZXR0aW5nIFVwLCBhbmQgUnVubmluZyB0aGUKKyAgICAgICAgSmFrYXJ0YSBBbm5vdGF0aW9ucyBUQ0s8L2E+PC9oMj4KKyAgICA8cD5SZWZlciB0byB0aGUgPGEgaHJlZj0iaHRtbC11c2Vyc2d1aWRlL3RvYy5odG1sIj5KYWthcnRhIEFubm90YXRpb25zIGZvciBKYWthcnRhIEVFIFRDSyAzLjAgVXNlcidzCisgICAgICAgIEd1aWRlPC9hPiAgZm9yIGNvbXBsZXRlIGluc3RydWN0aW9ucyBvbiBpbnN0YWxsaW5nLCBzZXR0aW5nIHVwLCBhbmQKKyAgICAgIHJ1bm5pbmcgdGhlIEpha2FydGEgQW5ub3RhdGlvbnMgVENLLgorICAgIDxocj4KKyAgICA8cD48Y2l0ZT48c21hbGw+PC9zbWFsbD48L2NpdGU+PC9wPgorICAgIDxhZGRyZXNzPjxzbWFsbD4gQ29weXJpZ2h0IChjKSAyMDEzLCAyMDI0IE9yYWNsZSBhbmQvb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbAorICAgICAgICByaWdodHMgcmVzZXJ2ZWQuIDwvc21hbGw+PC9hZGRyZXNzPgorICAgIDxjaXRlPgorICAgICAgPHA+PC9wPgorICAgIDwvY2l0ZT4KKyAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvdGNrL2RvY3MvTElDRU5TRV9FRlRMLm1kIGIvdGNrL2RvY3MvTElDRU5TRV9FRlRMLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyMTA2ODIKLS0tIC9kZXYvbnVsbAorKysgYi90Y2svZG9jcy9MSUNFTlNFX0VGVEwubWQKQEAgLTAsMCArMSw4MyBAQAorIyBFY2xpcHNlIEZvdW5kYXRpb24gVGVjaG5vbG9neSBDb21wYXRpYmlsaXR5IEtpdCBMaWNlbnNlIC0gdiAxLjAKKworQ29weXJpZ2h0IChjKSAyMDE4LCBFY2xpcHNlIEZvdW5kYXRpb24sIEluYy4gYW5kIGl0cyBsaWNlbnNvcnMuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gYmluYXJ5IGZvcm0gaXMgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlCitmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisxLiAgVXNlIG9mIHRoZSBUZWNobm9sb2d5IENvbXBhdGliaWxpdHkgS2l0IGFjY29tcGFueWluZyB0aGlzIGxpY2Vuc2UKKyAgICAodGhlICJUQ0siKSBhbmQgaXRzIGRvY3VtZW50YXRpb24gaXMgcGVybWl0dGVkIHNvbGVseSBmb3IgdGhlCisgICAgcHVycG9zZSBvZiB0ZXN0aW5nIGNvbXBhdGliaWxpdHkgb2YgYW4gaW1wbGVtZW50YXRpb24gKHRoZQorICAgICJQcm9kdWN0Iikgb2YgYSBzcGVjaWZpY2F0aW9uICh0aGUgIlNwZWNpZmljYXRpb24iKSBtYWRlIGF2YWlsYWJsZQorICAgIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIEluYy4gKCJFY2xpcHNlIikuCisKKzIuICBPbmx5IHRob3NlIG1vZGlmaWNhdGlvbnMgZXhwcmVzc2x5IHBlcm1pdHRlZCBieSB0aGUgVENLIGFuZCBpdHMKKyAgICBkb2N1bWVudGF0aW9uIGFyZSBwZXJtaXR0ZWQuIEV4Y2VwdCBpbiB0aGVzZSBsaW1pdGVkIGNpcmN1bXN0YW5jZXMsCisgICAgbm8gbW9kaWZpY2F0aW9ucyB0byB0aGUgVENLIGFyZSBwZXJtaXR0ZWQgdW5kZXIgdGhpcyBsaWNlbnNlLgorCiszLiAgQSBQcm9kdWN0IHdpbGwgYmUgZGVlbWVkIHRvIGJlICJjb21wYXRpYmxlIiB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uCisgICAgaWYgaXQgZnVsbHkgYW5kIGNvbXBsZXRlbHkgbWVldHMgYW5kIHNhdGlzZmllcyBhbGwgcmVxdWlyZW1lbnRzIG9mCisgICAgdGhlIFRDSy4KKworNC4gIEJlZm9yZSBhbnkgY2xhaW0gb2YgY29tcGF0aWJpbGl0eSAob3IgYW55IHNpbWlsYXIgY2xhaW0gc3VnZ2VzdGluZworICAgIGNvbXBhdGliaWxpdHkpIGlzIG1hZGUgYmFzZWQgb24gdGhlIFRDSywgdGhlIHRlc3RpbmcgcGFydHkgbXVzdDoKKworICAgIGEuICB1c2UgdGhlIFRDSyB0byBkZW1vbnN0cmF0ZSB0aGF0IHRoZSBQcm9kdWN0IGZ1bGx5IGFuZAorCWNvbXBsZXRlbHkgbWVldHMgYW5kIHNhdGlzZmllcyBhbGwgcmVxdWlyZW1lbnRzIG9mIHRoZSBUQ0s7CisKKyAgICBiLiAgbWFrZSBUQ0sgdGVzdCByZXN1bHRzIHNob3dpbmcgZnVsbCBhbmQgY29tcGxldGUgc2F0aXNmYWN0aW9uIG9mCisJYWxsIHJlcXVpcmVtZW50cyBvZiB0aGUgVENLIHB1YmxpY2x5IGF2YWlsYWJsZSBvbiB0aGUgdGVzdGluZworCXBhcnR5J3Mgd2Vic2l0ZSBhbmQgc2VuZCBhIGxpbmsgdG8gc3VjaCB0ZXN0IHJlc3VsdHMgdG8gRWNsaXBzZQorCWF0IFt0Y2tAZWNsaXBzZS5vcmddKG1haWx0bzp0Y2tAZWNsaXBzZS5vcmcpOyBhbmQKKworICAgIGMuICBjb21wbHkgd2l0aCBhbnkgcmVxdWlyZW1lbnRzIHN0YXRlZCBpbiB0aGUgU3BlY2lmaWNhdGlvbiB3aXRoCisJcmVnYXJkIHRvIHN1YnNldHRpbmcsIHN1cGVyc2V0dGluZywgbW9kaWZ5aW5nIG9yIGV4dGVuZGluZyB0aGUKKwlTcGVjaWZpY2F0aW9uIGluIGFueSBQcm9kdWN0IGNsYWltZWQgdG8gYmUgY29tcGF0aWJsZSB3aXRoIHRoZQorCVNwZWNpZmljYXRpb24uCisKKzUuICBUaGUgdGVzdCByZXN1bHRzIG11c3QgYmUgY29udGludW91c2x5IGF2YWlsYWJsZSBhbmQgdGhlIGxpbmsgbXVzdAorICAgIGJlIGxpdmUgZm9yIGF0IGxlYXN0IGFzIGxvbmcgYXMgdGhlIFByb2R1Y3QgaXMgYXZhaWxhYmxlIGluIHRoZQorICAgIG1hcmtldHBsYWNlLgorCis2LiAgVGhlIFRDSyBtYXkgbm90IGJlIHVzZWQgYXMgYSBiYXNpcyBmb3IgYW55IHN0YXRlbWVudHMgb2YgcGFydGlhbAorICAgIGNvbXBhdGliaWxpdHkuIFRoZSBUQ0sgbWF5IG9ubHkgYmUgdXNlZCBhcyBhIGJhc2lzIGZvciB0cnVlLAorICAgIGZhY3R1YWwgc3RhdGVtZW50cyBvZiBmdWxsIGNvbXBhdGliaWxpdHkgb2YgUHJvZHVjdHMgdGhhdCBmdWxseQorICAgIG1lZXQgYW5kIHNhdGlzZnkgYWxsIHJlcXVpcmVtZW50cyBvZiB0aGUgVENLLgorCis3LiAgQSBkZXRlcm1pbmF0aW9uIHRoYXQgYSBQcm9kdWN0IGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgVENLIGRvZXMgbm90LAorICAgIGluIGl0c2VsZiwgZ2l2ZSByaXNlIHRvIHRoZSByaWdodCB0byB1c2UgYW55IG5hbWUsIG1hcmssIGxvZ28KKyAgICBhc3NvY2lhdGVkIHdpdGggdGhlIFRDSywgRWNsaXBzZSwgb3IgRWNsaXBzZSdzIGNvbnRyaWJ1dG9ycyBvcgorICAgIGxpY2Vuc29ycy4KKworOC4gIFVwb24gdGhlIHJlcXVlc3Qgb2YgRWNsaXBzZSwgYSB0ZXN0ZXIgd2lsbCByZXRyYWN0IGFueSBzdGF0ZW1lbnRzCisgICAgb2YgY29tcGF0aWJpbGl0eSAob3IgYW55IHNpbWlsYXIgY2xhaW0gc3VnZ2VzdGluZyBjb21wYXRpYmlsaXR5KQorICAgIHdoaWNoIEVjbGlwc2UgcmVhc29uYWJseSBkZXRlcm1pbmVzIHRvIGJlIGZhbHNlIG9yIG1pc2xlYWRpbmcgb3IgaW4KKyAgICB2aW9sYXRpb24gb2YgdGhlIHRlcm1zIG9mIHRoaXMgbGljZW5zZS4KKworOS4gIFJlZGlzdHJpYnV0aW9uIG9mIHRoZSBUQ0sgbXVzdCBiZSB1bmRlciB0aGlzIEVjbGlwc2UgRm91bmRhdGlvbgorICAgIFRlY2hub2xvZ3kgQ29tcGF0aWJpbGl0eSBLaXQgTGljZW5zZSBhbmQgbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKzEwLiBOZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzIG9yIGxvZ29zIG9mIEVjbGlwc2UsIG5vciB0aGUgbmFtZXMsCisgICAgdHJhZGVtYXJrcyBvciBsb2dvcyBvZiBpdHMgY29udHJpYnV0b3JzIG9yIGxpY2Vuc29ycyBtYXkgYmUgdXNlZCB0bworICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyB0ZXN0ZWQgd2l0aCB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKzExLiBUaGUgc291cmNlIGNvZGUgZm9yIHRoZSBUQ0sgYWNjb21wYW55aW5nIHRoaXMgbGljZW5zZSBpcyBhdmFpbGFibGUKKyAgICBmcm9tIEVjbGlwc2UuCisKK1RPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLCBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIE9OCitBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSCitFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SCitDT05ESVRJT05TIE9GIFRJVExFLCBOT04tIElORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SCitBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcsCitORUlUSEVSIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWQorTElBQklMSVRZIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCitTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcKK0lOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIE9SIFRIRQorRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgpkaWZmIC0tZ2l0IGEvdGNrL2RvY3MvVENLLUV4Y2x1ZGUtTGlzdC50eHQgYi90Y2svZG9jcy9UQ0stRXhjbHVkZS1MaXN0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDBhODBlCi0tLSAvZGV2L251bGwKKysrIGIvdGNrL2RvY3MvVENLLUV4Y2x1ZGUtTGlzdC50eHQKQEAgLTAsMCArMSwxOSBAQAorIworIyBDb3B5cmlnaHQgKGMpIDIwMjQgT3JhY2xlIGFuZC9vciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCisjIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYuIDIuMCwgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CisjIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC4KKyMKKyMgVGhpcyBTb3VyY2UgQ29kZSBtYXkgYWxzbyBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgZm9sbG93aW5nIFNlY29uZGFyeQorIyBMaWNlbnNlcyB3aGVuIHRoZSBjb25kaXRpb25zIGZvciBzdWNoIGF2YWlsYWJpbGl0eSBzZXQgZm9ydGggaW4gdGhlCisjIEVjbGlwc2UgUHVibGljIExpY2Vuc2Ugdi4gMi4wIGFyZSBzYXRpc2ZpZWQ6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorIyB2ZXJzaW9uIDIgd2l0aCB0aGUgR05VIENsYXNzcGF0aCBFeGNlcHRpb24sIHdoaWNoIGlzIGF2YWlsYWJsZSBhdAorIyBodHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2NsYXNzcGF0aC9saWNlbnNlLmh0bWwuCisjCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAorIworCisjIFRoaXMgZmlsZSBsaXN0cyB0aGUgZXhjbHVkZWQgdGVzdHMgZnJvbSBKYWthcnRhIEFubm90YXRpb25zIFRDSy4gCisjIFRoaXMgaXMgaW50ZW5kZWQgb25seSBmb3IgZG9jdW1lbnRhdGlvbiBwdXJwb3NlIGFuZCBpcyBub3QgdXNlZCB0byBleGNsdWRlIGFueSB0ZXN0cy4KKyMgTm8gdGVzdHMgYXJlIGV4Y2x1ZGVkIGluIHRoaXMgdmVyc2lvbgpkaWZmIC0tZ2l0IGEvdGNrL2RvY3MvaW5kZXguaHRtbCBiL3Rjay9kb2NzL2luZGV4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYyNGNkNQotLS0gL2Rldi9udWxsCisrKyBiL3Rjay9kb2NzL2luZGV4Lmh0bWwKQEAgLTAsMCArMSw1NiBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKyAgPGhlYWQ+CisgICAgPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KKyAgICA8IS0tCisgICAgQ29weXJpZ2h0IChjKSAyMDE4LCAyMDI0IE9yYWNsZSBhbmQvb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQorICAgIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYuIDIuMCwgd2hpY2ggaXMgYXZhaWxhYmxlIGF0ICAgIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC4gICAgVGhpcyBTb3VyY2UgQ29kZSBtYXkgYWxzbyBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgZm9sbG93aW5nIFNlY29uZGFyeQorICAgIExpY2Vuc2VzIHdoZW4gdGhlIGNvbmRpdGlvbnMgZm9yIHN1Y2ggYXZhaWxhYmlsaXR5IHNldCBmb3J0aCBpbiB0aGUgICAgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2LiAyLjAgYXJlIHNhdGlzZmllZDogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsICAgIHZlcnNpb24gMiB3aXRoIHRoZSBHTlUgQ2xhc3NwYXRoIEV4Y2VwdGlvbiwgd2hpY2ggaXMgYXZhaWxhYmxlIGF0ICAgIGh0dHBzOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvY2xhc3NwYXRoL2xpY2Vuc2UuaHRtbC4KKyAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAtLT4KKyAgICA8dGl0bGU+V2VsY29tZSB0byB0aGUgSmFrYXJ0YSBBbm5vdGF0aW9ucyBUQ0ssIFZlcnNpb24gMi4wPC90aXRsZT4KKyAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorPCEtLQorcHJlIHsgIGJhY2tncm91bmQtY29sb3I6ICNlZWVlZWU7IGNvbG9yOiAjMDAwMDk5fQorY29kZSB7ICBjb2xvcjogIzAwMDA5OX0KK2gxIHsgIGNvbG9yOiAjMDAwMDk5fQoraDIgeyAgY29sb3I6ICMwMDAwOTl9CitoMyB7ICBjb2xvcjogIzAwMDA5OTsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmV9CitoNCB7ICBmb250LXN0eWxlOiBpdGFsaWM7IGNvbG9yOiAjMDAwMDk5fQorLnRhYmxldGl0bGUgeyAgZm9udC1zdHlsZTogaXRhbGljOyBjb2xvcjogI2ZmZmZjYzsgZm9udC1zaXplOiBzbWFsbDsgZm9udC12YXJpYW50OiBzbWFsbC1jYXBzfQorLnN1YnRpdGxlIHsgIGZvbnQtc3R5bGU6IGl0YWxpYzsgY29sb3I6ICNmZmZmY2M7IGZvbnQtdmFyaWFudDogc21hbGwtY2Fwc30KKy5lbXBoYXNpemUgIHsgIGZvbnQtc3R5bGU6IGl0YWxpYzsgY29sb3I6ICMwMDAwOTl9CistLT4KKzwvc3R5bGU+IDwvaGVhZD4KKyAgPGJvZHkgdmxpbms9IiM4NDAwODQiIHRleHQ9IiMwMDAwMDAiIGxpbms9IiMwMDAwZmYiIGJnY29sb3I9IiNmZmZmZGQiIGFsaW5rPSIjMDAwMGZmIj4KKyAgICA8ZGl2IGFsaWduPSJDZW50ZXIiPgorICAgICAgPGgxPldlbGNvbWUgdG8gdGhlIEpha2FydGEgQW5ub3RhdGlvbnM8YnI+CisgICAgICAgIFRlY2hub2xvZ3kgQ29tcGF0aWJpbGl0eSBLaXQsIFZlcnNpb24gMy4wPGJyPgorICAgICAgICA8c3BhbiBjbGFzcz0iZW1waGFzaXplIj5Zb3VyIFN0YXJ0aW5nIFBvaW50PC9zcGFuPjwvaDE+CisgICAgPC9kaXY+CisgICAgPGhyPgorICAgIDxoMj5HdWlkZSB0byBKYWthcnRhIEFubm90YXRpb25zIFRDSyAzLjAgRG9jdW1lbnRhdGlvbjwvaDI+CisgICAgPHA+VGhlIEpha2FydGEgQW5ub3RhdGlvbnMgVGVjaG5vbG9neSBDb21wYXRpYmlsaXR5IEtpdCAoVENLKSAzLjAKKyAgICAgIGRvY3VtZW50YXRpb24gaW5jbHVkZXMgdGhlIGZvbGxvd2luZzo8L3A+CisgICAgPHVsPgorICAgICAgPGxpPiBUaGUgPGVtPjxhIGhyZWY9IkNBSjMuMC1SZWxlYXNlTm90ZXMuaHRtbCI+SmFrYXJ0YSBBbm5vdGF0aW9ucyAzLjAKKyAgICAgICAgICAgIFRDSyBSZWxlYXNlIE5vdGVzPC9hPjwvZW0+IHByb3ZpZGVzIHRoZSBpbmZvcm1hdGlvbiBvbiB0aGUgdGVzdAorICAgICAgICBoYXJuZXNzLCB0aGUgdGVzdCBzdWl0ZSBhbmQgdGhlIHBsYXRmb3JtcyB0ZXN0ZWQuCisgICAgICAgIDx1bD4KKyAgICAgICAgICA8bGk+UmVsZWFzZSBOb3RlcyBtYXkgYmUgcmV2aXNlZCBhbmQgZGlzdHJpYnV0ZWQgYnkgdGhlIEpha2FydGEKKyAgICAgICAgICAgIEFubm90YXRpb25zIHNwZWNpZmljYXRpb24gd2ViLXNpdGU6IDxhIGhyZWY9Imh0dHBzOi8vamFrYXJ0YS5lZS9zcGVjaWZpY2F0aW9ucy9hbm5vdGF0aW9ucy8zLjAvIj5odHRwczovL2pha2FydGEuZWUvc3BlY2lmaWNhdGlvbnMvYW5ub3RhdGlvbnMvMy4wLzwvYT48L2xpPgorICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgIDxsaT5UaGUgPGVtPkpha2FydGEgQW5ub3RhdGlvbnMgVENLIFVzZXJzIEd1aWRlIDwvZW0+IHByb3ZpZGVzIHRoZQorICAgICAgICBpbmZvcm1hdGlvbiB0aGF0IHlvdSBuZWVkIHRvIGluc3RhbGwsIHNldCB1cCwgYW5kIHJ1biB0aGUgSmFrYXJ0YQorICAgICAgICBBbm5vdGF0aW9ucyBUQ0ssIFZlcnNpb24gMy4wLiBJbiBhZGRpdGlvbiwgdGhlIGd1aWRlIHByb3ZpZGVzIHRoZSBydWxlcworICAgICAgICB5b3UgbXVzdCBjb21wbHkgd2l0aCB0byBwYXNzIHRoZSBKYWthcnRhIEFubm90YXRpb25zIFRDSy4gPC9saT4KKyAgICA8L3VsPgorICAgIDxocj4KKyAgICA8cD48Y2l0ZT48c21hbGw+PC9zbWFsbD48L2NpdGU+PC9wPgorICAgIDxhZGRyZXNzPjxzbWFsbD4gQ29weXJpZ2h0IChjKSAyMDE2LCAyMDI0IE9yYWNsZSBhbmQvb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbAorICAgICAgICByaWdodHMgcmVzZXJ2ZWQuIDwvc21hbGw+PC9hZGRyZXNzPgorICAgIDxjaXRlPgorICAgICAgPHA+PC9wPgorICAgIDwvY2l0ZT4KKyAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvdGNrL2RvY3MvdGNrLXJ1bm5lci9wb20ueG1sIGIvdGNrL2RvY3MvdGNrLXJ1bm5lci9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViMDk2YmYKLS0tIC9kZXYvbnVsbAorKysgYi90Y2svZG9jcy90Y2stcnVubmVyL3BvbS54bWwKQEAgLTAsMCArMSwxNzMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgICAgQ29weXJpZ2h0IChjKSAyMDI0IE9yYWNsZSBhbmQvb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKKyAgICB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2LiAyLjAsIHdoaWNoIGlzIGF2YWlsYWJsZSBhdAorICAgIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC4KKworICAgIFRoaXMgU291cmNlIENvZGUgbWF5IGFsc28gYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIGZvbGxvd2luZyBTZWNvbmRhcnkKKyAgICBMaWNlbnNlcyB3aGVuIHRoZSBjb25kaXRpb25zIGZvciBzdWNoIGF2YWlsYWJpbGl0eSBzZXQgZm9ydGggaW4gdGhlCisgICAgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2LiAyLjAgYXJlIHNhdGlzZmllZDogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgICAgdmVyc2lvbiAyIHdpdGggdGhlIEdOVSBDbGFzc3BhdGggRXhjZXB0aW9uLCB3aGljaCBpcyBhdmFpbGFibGUgYXQKKyAgICBodHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2NsYXNzcGF0aC9saWNlbnNlLmh0bWwuCisKKyAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKKy0tPgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvbWF2ZW4tdjRfMF8wLnhzZCI+CisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCisgICAgPHBhcmVudD4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuZWU0ajwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+cHJvamVjdDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+MS4wLjk8L3ZlcnNpb24+CisgICAgPC9wYXJlbnQ+CisKKyAgICA8Z3JvdXBJZD5qYWthcnRhLmFubm90YXRpb248L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+amFrYXJ0YS5hbm5vdGF0aW9uLXRjay1pbXBsPC9hcnRpZmFjdElkPgorICAgIDx2ZXJzaW9uPjMuMC4wPC92ZXJzaW9uPgorICAgIDxwYWNrYWdpbmc+amFyPC9wYWNrYWdpbmc+CisKKyAgICA8cHJvcGVydGllcz4KKyAgICAgICAgPGdsYXNzZmlzaC5jb250YWluZXIudmVyc2lvbj44LjAuMC1NMTwvZ2xhc3NmaXNoLmNvbnRhaW5lci52ZXJzaW9uPgorICAgICAgICA8Z2xhc3NmaXNoLnRvcGxldmVsLmRpcj5nbGFzc2Zpc2g3PC9nbGFzc2Zpc2gudG9wbGV2ZWwuZGlyPgorICAgICAgICA8anVuaXQuanVwaXRlci52ZXJzaW9uPjUuMTAuMjwvanVuaXQuanVwaXRlci52ZXJzaW9uPgorICAgICAgICA8dGNrLmFydGlmYWN0SWQ+amFrYXJ0YS1hbm5vdGF0aW9ucy10Y2s8L3Rjay5hcnRpZmFjdElkPgorICAgICAgICA8dGNrLnZlcnNpb24+My4wLjA8L3Rjay52ZXJzaW9uPgorICAgICAgICA8amltYWdlLmRpcj4ke3Byb2plY3QuYnVpbGQuZGlyZWN0b3J5fS9qZGstYnVuZGxlPC9qaW1hZ2UuZGlyPgorICAgIDwvcHJvcGVydGllcz4KKworICAgIDxkZXBlbmRlbmN5TWFuYWdlbWVudD4KKyAgICAgICAgPGRlcGVuZGVuY2llcz4KKyAgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5qdW5pdDwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qdW5pdC1ib208L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPHZlcnNpb24+JHtqdW5pdC5qdXBpdGVyLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICAgICAgIDx0eXBlPnBvbTwvdHlwZT4KKyAgICAgICAgICAgICAgICA8c2NvcGU+aW1wb3J0PC9zY29wZT4KKyAgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgIDxncm91cElkPmpha2FydGEudGNrPC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnNpZ3Rlc3QtbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjIuMjwvdmVyc2lvbj4KKyAgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgIDxncm91cElkPmpha2FydGEuYW5ub3RhdGlvbjwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD4ke3Rjay5hcnRpZmFjdElkfTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3Rjay52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPC9kZXBlbmRlbmNpZXM+CisgICAgPC9kZXBlbmRlbmN5TWFuYWdlbWVudD4KKworICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmp1bml0Lmp1cGl0ZXI8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qdW5pdC1qdXBpdGVyPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+amFrYXJ0YS5hbm5vdGF0aW9uPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+JHt0Y2suYXJ0aWZhY3RJZH08L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5qYWthcnRhLnRjazwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnNpZ3Rlc3QtbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgPC9kZXBlbmRlbmNpZXM+CisKKyAgICA8YnVpbGQ+CisgICAgICAgIDxwbHVnaW5NYW5hZ2VtZW50PgorICAgICAgICAgICAgPHBsdWdpbnM+CisgICAgICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1kZXBlbmRlbmN5LXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+My4zLjA8L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1mYWlsc2FmZS1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjMuMi41PC92ZXJzaW9uPgorICAgICAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgICAgPC9wbHVnaW5zPgorICAgICAgICA8L3BsdWdpbk1hbmFnZW1lbnQ+CisKKyAgICAgICAgPHBsdWdpbnM+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1kZXBlbmRlbmN5LXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpZD51bnBhY2stc2VydmVyPC9pZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD51bnBhY2s8L2dvYWw+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBoYXNlPnByZS1pbnRlZ3JhdGlvbi10ZXN0PC9waGFzZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdEl0ZW1zPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmdsYXNzZmlzaC5tYWluLmRpc3RyaWJ1dGlvbnM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD4ke2dsYXNzZmlzaC1hcnRpZmFjdC1pZH08L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2dsYXNzZmlzaC5jb250YWluZXIudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHlwZT56aXA8L3R5cGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3ZlcldyaXRlPnRydWU8L292ZXJXcml0ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+JHtwcm9qZWN0LmJ1aWxkLmRpcmVjdG9yeX08L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hcnRpZmFjdEl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hcnRpZmFjdEl0ZW1zPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+CisgICAgICAgICAgICA8L3BsdWdpbj4KKworICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tZmFpbHNhZmUtcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDxleGVjdXRpb25zPgorICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPGlkPnNpZy10ZXN0PC9pZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5pbnRlZ3JhdGlvbi10ZXN0PC9nb2FsPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPnZlcmlmeTwvZ29hbD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVwZW5kZW5jaWVzVG9TY2FuPmpha2FydGEuYW5ub3RhdGlvbjoke3Rjay5hcnRpZmFjdElkfTwvZGVwZW5kZW5jaWVzVG9TY2FuPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzeXN0ZW1Qcm9wZXJ0eVZhcmlhYmxlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGppbWFnZS5kaXI+JHtqaW1hZ2UuZGlyfTwvamltYWdlLmRpcj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNpZ1Rlc3RDbGFzc3BhdGg+JHtwcm9qZWN0LmJ1aWxkLmRpcmVjdG9yeX0vJHtnbGFzc2Zpc2gudG9wbGV2ZWwuZGlyfS9nbGFzc2Zpc2gvbW9kdWxlcy9qYWthcnRhLmFubm90YXRpb24tYXBpLmphcjoke2ppbWFnZS5kaXJ9L2phdmEuYmFzZToke2ppbWFnZS5kaXJ9L2phdmEucm1pOiR7amltYWdlLmRpcn0vamF2YS5zcWw6JHtqaW1hZ2UuZGlyfS9qYXZhLm5hbWluZzwvc2lnVGVzdENsYXNzcGF0aD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNhLnNpZy5nZW5lcmF0ZWQ+dHJ1ZTwvY2Euc2lnLmdlbmVyYXRlZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNhLnNpZy5wb3N0Y29uc3RydWN0PnRydWU8L2NhLnNpZy5wb3N0Y29uc3RydWN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2Euc2lnLnByaW9yaXR5PnRydWU8L2NhLnNpZy5wcmlvcml0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNhLnNpZy5wcmVkZXN0cm95PnRydWU8L2NhLnNpZy5wcmVkZXN0cm95PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2Euc2lnLnJlc291cmNlPnRydWU8L2NhLnNpZy5yZXNvdXJjZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNhLnNpZy5yZXNvdXJjZXM+dHJ1ZTwvY2Euc2lnLnJlc291cmNlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNhLnNpZy5zZWN1cml0eWRlY2xhcmVyb2xlcz50cnVlPC9jYS5zaWcuc2VjdXJpdHlkZWNsYXJlcm9sZXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjYS5zaWcuc2VjdXJpdHlkZW55YWxsPnRydWU8L2NhLnNpZy5zZWN1cml0eWRlbnlhbGw+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjYS5zaWcuc2VjdXJpdHlwZXJtaXRhbGw+dHJ1ZTwvY2Euc2lnLnNlY3VyaXR5cGVybWl0YWxsPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2Euc2lnLnNlY3VyaXR5cm9sZXNhbGxvd2VkPnRydWU8L2NhLnNpZy5zZWN1cml0eXJvbGVzYWxsb3dlZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNhLnNpZy5zZWN1cml0eXJ1bmFzPnRydWU8L2NhLnNpZy5zZWN1cml0eXJ1bmFzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2Euc2lnLnNxbGRhdGFzb3VyY2VkZWZpbml0aW9uPnRydWU8L2NhLnNpZy5zcWxkYXRhc291cmNlZGVmaW5pdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNhLnNpZy5zcWxkYXRhc291cmNlZGVmaW5pdGlvbnM+dHJ1ZTwvY2Euc2lnLnNxbGRhdGFzb3VyY2VkZWZpbml0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N5c3RlbVByb3BlcnR5VmFyaWFibGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgPC9wbHVnaW5zPgorICAgIDwvYnVpbGQ+CisKKyAgICA8cHJvZmlsZXM+CisgICAgICAgIDxwcm9maWxlPgorICAgICAgICAgICAgPGlkPmZ1bGw8L2lkPgorICAgICAgICAgICAgPGFjdGl2YXRpb24+CisgICAgICAgICAgICAgICAgPGFjdGl2ZUJ5RGVmYXVsdD50cnVlPC9hY3RpdmVCeURlZmF1bHQ+CisgICAgICAgICAgICA8L2FjdGl2YXRpb24+CisgICAgICAgICAgICA8cHJvcGVydGllcz4KKyAgICAgICAgICAgICAgICA8Z2xhc3NmaXNoLWFydGlmYWN0LWlkPmdsYXNzZmlzaDwvZ2xhc3NmaXNoLWFydGlmYWN0LWlkPgorICAgICAgICAgICAgPC9wcm9wZXJ0aWVzPgorICAgICAgICA8L3Byb2ZpbGU+CisgICAgICAgIDxwcm9maWxlPgorICAgICAgICAgICAgPGlkPndlYjwvaWQ+CisgICAgICAgICAgICA8cHJvcGVydGllcz4KKyAgICAgICAgICAgICAgICA8Z2xhc3NmaXNoLWFydGlmYWN0LWlkPndlYjwvZ2xhc3NmaXNoLWFydGlmYWN0LWlkPgorICAgICAgICAgICAgPC9wcm9wZXJ0aWVzPgorICAgICAgICA8L3Byb2ZpbGU+CisgICAgPC9wcm9maWxlcz4KKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3Rjay9kb2NzL3VzZXJndWlkZS9SRUFETUUubWQgYi90Y2svZG9jcy91c2VyZ3VpZGUvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzZWMyYjYKLS0tIC9kZXYvbnVsbAorKysgYi90Y2svZG9jcy91c2VyZ3VpZGUvUkVBRE1FLm1kCkBAIC0wLDAgKzEsNzcgQEAKKyMgQSBKQmFrZSBwcm9qZWN0IHRlbXBsYXRlCisKKyMjIEFib3V0IEpCYWtlCisKK0pCYWtlIGlzIGEgc3RhdGljIHNpdGUgZ2VuZXJhdG9yLCBpdCdzIGluc3BpcmVkIGZyb20gamVreWxsIGFuZCB3cml0dGVuCitpbiBqYXZhLiAgVGhlIGJhc2ljIGlkZWEgaXMgdG8gaGF2ZSB0ZW1wbGF0ZXMgZm9yIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlCitwYWdlLCBhbmQgdGhlIGJvZHkgZ2VuZXJhdGVkIGZyb20gYXNjaWlkb2MgY29udGVudC4KKworIyMgUHJlIHJlcXVpc2l0ZXMKKworLSBNYXZlbgorLSBKREs4KworCitEZXBsb3lpbmcgdG8gR2l0aHViIHdpbGwgcmVxdWlyZSBwYXNzd29yZCBsZXNzIGF1dGhlbnRpY2F0aW9uLgorCitUaGlzIGlzIGRvbmUgYnkgZXhwb3J0aW5nIHlvdXIgU1NIIHB1YmxpYyBrZXkgaW50byB5b3VyIEdpdGh1YiBhY2NvdW50LgorCisjIyBCdWlsZCB0aGUgc2l0ZSBsb2NhbGx5CisKK1RoZSBzaXRlIGlzIGdlbmVyYXRlZCB1bmRlciB0YXJnZXQvc3RhZ2luZy4KKworT3BlbiBmaWxlOi8vL1BBVEhfVE9fUFJPSkVDVF9ESVIvdGFyZ2V0L3N0YWdpbmcgaW4gYSBicm93c2VyIHRvIHZpZXcgdGhlIHNpdGUuCisKK2BgYAorbXZuIGdlbmVyYXRlLXJlc291cmNlcworYGBgCisKK09yIHlvdSBjYW4gaW52b2tlIHRoZSBKQmFrZSBwbHVnaW4gZGlyZWN0bHkuCisKK2BgYAorbXZuIGpiYWtlOmJ1aWxkCitgYGAKKworIyMjIFJlYnVpbGQgdGhlIHNpdGUgb24gY2hhbmdlcworCitgYGAKK212biBqYmFrZTp3YXRjaAorYGBgCisKK0lmIHlvdSBrZWVwIHRoaXMgY29tbWFuZCBydW5uaW5nLCBjaGFuZ2VzIHRvIHRoZSBzb3VyY2VzIHdpbGwgYmUKK2RldGVjdGVkIGFuZCB0aGUgc2l0ZSB3aWxsIGJlIHJlbmRlcmVkIGluY3JlbWVudGFsbHkuCisKK1RoaXMgaXMgY29udmVuaWVudCB3aGVuIHdyaXRpbmcgY29udGVudC4KKworIyMjIFNlcnZlIHRoZSBzaXRlIGxvY2FsbHkKKworYGBgCittdm4gamJha2U6c2VydmUKK2BgYAorCitJZiBhIHdlYnNlcnZlciBpcyByZXF1aXJlZCAoZS5nLiBhYnNvbHV0ZSBwYXRoIGFyZSB1c2VkKSwgdGhpcyBjb21tYW5kCit3aWxsIHN0YXJ0IGEgd2Vic2VydmVyIChqZXR0eSkgYXQgaHR0cDovL2xvY2FsaG9zdDo4ODIwLiAgSXQgd2lsbCBhbHNvCit3YXRjaCBmb3IgY2hhbmdlcyBhbmQgcmVidWlsZCBpbmNyZW1lbnRhbGx5LgorCisjIyBEZXBsb3kgdGhlIHNpdGUgdG8gR2l0aHViIFBhZ2VzCisKK2BgYAorbXZuIGRlcGxveQorYGBgCisKKyMjIFByb2R1Y2UgYSB6aXAgZmlsZSBmb3IgZG93bmxvYWQKKworVG8gcHJvZHVjZSBhIHppcCBmaWxlIGNvbnRhaW5pbmcgdGhlIGdlbmVyYXRlZCBodG1sIGZpbGVzLCB1c2U6CisKK2BgYAorbXZuIHBhY2thZ2UKK2BgYAorCitXaGVuIG1ha2luZyBhIHJlbGVhc2Ugb24gR2l0SHViLCB0aGlzIHppcCBmaWxlIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgcmVsZWFzZS4KKworIyMgTGlua3MKKworLSBbSkJha2UgbWF2ZW4gcGx1Z2luIGRvY3VtZW50YXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9CbGF6ZWJpdC9qYmFrZS1tYXZlbi1wbHVnaW4pCistIFtKQmFrZSBkb2N1bWVudGF0aW9uXShodHRwOi8vamJha2Uub3JnL2RvY3MvMi41LjEpCistIFtGcmVlbWFya2VyIGRvY3VtZW50YXRpb25dKGh0dHA6Ly9mcmVlbWFya2VyLm9yZy9kb2NzKQorLSBbQXNjaWlEb2MgVXNlciBHdWlkZV0oaHR0cDovL2FzY2lpZG9jLm9yZy91c2VyZ3VpZGUuaHRtbCkKKy0gW0FzY2lpZG9jdG9yIHF1aWNrIHJlZmVyZW5jZV0oaHR0cDovL2FzY2lpZG9jdG9yLm9yZy9kb2NzL2FzY2lpZG9jLXN5bnRheC1xdWljay1yZWZlcmVuY2UpCmRpZmYgLS1naXQgYS90Y2svZG9jcy91c2VyZ3VpZGUvcG9tLnhtbCBiL3Rjay9kb2NzL3VzZXJndWlkZS9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NzcxODEKLS0tIC9kZXYvbnVsbAorKysgYi90Y2svZG9jcy91c2VyZ3VpZGUvcG9tLnhtbApAQCAtMCwwICsxLDI2NiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKworICAgIENvcHlyaWdodCAoYykgMjAyNCBPcmFjbGUgYW5kL29yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCisgICAgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2Ugdi4gMi4wLCB3aGljaCBpcyBhdmFpbGFibGUgYXQKKyAgICBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAuCisKKyAgICBUaGlzIFNvdXJjZSBDb2RlIG1heSBhbHNvIGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBmb2xsb3dpbmcgU2Vjb25kYXJ5CisgICAgTGljZW5zZXMgd2hlbiB0aGUgY29uZGl0aW9ucyBmb3Igc3VjaCBhdmFpbGFiaWxpdHkgc2V0IGZvcnRoIGluIHRoZQorICAgIEVjbGlwc2UgUHVibGljIExpY2Vuc2Ugdi4gMi4wIGFyZSBzYXRpc2ZpZWQ6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICAgIHZlcnNpb24gMiB3aXRoIHRoZSBHTlUgQ2xhc3NwYXRoIEV4Y2VwdGlvbiwgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CisgICAgaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9jbGFzc3BhdGgvbGljZW5zZS5odG1sLgorCisgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCisKKy0tPgorCis8cHJvamVjdCB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIgorICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvbWF2ZW4tdjRfMF8wLnhzZCI+CisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmVlNGo8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPnByb2plY3Q8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjEuMC45PC92ZXJzaW9uPgorICAgIDwvcGFyZW50PgorICAgIDxncm91cElkPmpha2FydGEuYW5ub3RhdGlvbnM8L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+amFrYXJ0YS5hbm5vdGF0aW9ucy10Y2stdWc8L2FydGlmYWN0SWQ+CisgICAgPHBhY2thZ2luZz5wb208L3BhY2thZ2luZz4KKyAgICA8dmVyc2lvbj4zLjAuMDwvdmVyc2lvbj4KKyAgICA8bmFtZT5FY2xpcHNlIEZvdW5kYXRpb24gVGVjaG5vbG9neSBDb21wYXRpYmlsaXR5IEtpdCBVc2VyJ3MgR3VpZGUgZm9yIEpha2FydGEgQW5ub3RhdGlvbnMgUmVsZWFzZSAzLjA8L25hbWU+CisKKyAgICA8cHJvcGVydGllcz4KKyAgICAgICAgPHByb2plY3QuYnVpbGQuc291cmNlRW5jb2Rpbmc+VVRGLTg8L3Byb2plY3QuYnVpbGQuc291cmNlRW5jb2Rpbmc+CisgICAgICAgIDxzaXRlLm91dHB1dC5kaXI+JHtwcm9qZWN0LmJ1aWxkLmRpcmVjdG9yeX0vc3RhZ2luZzwvc2l0ZS5vdXRwdXQuZGlyPgorICAgICAgICA8bWF2ZW4uc2l0ZS5za2lwPnRydWU8L21hdmVuLnNpdGUuc2tpcD4KKyAgICAgICAgPGFzY2lpZG9jdG9yai52ZXJzaW9uPjIuNS4xMTwvYXNjaWlkb2N0b3JqLnZlcnNpb24+CisgICAgICAgIDxhc2NpaWRvY3RvcmouZGlhZ3JhbS52ZXJzaW9uPjIuMy4wPC9hc2NpaWRvY3RvcmouZGlhZ3JhbS52ZXJzaW9uPgorICAgICAgICA8YXNjaWlkb2N0b3JqLm1hdmVuLnBsdWdpbi52ZXJzaW9uPjMuMC4wPC9hc2NpaWRvY3RvcmoubWF2ZW4ucGx1Z2luLnZlcnNpb24+CisgICAgICAgIDxhc2NpaWRvY3RvcmoucGRmLnZlcnNpb24+Mi4zLjEzPC9hc2NpaWRvY3RvcmoucGRmLnZlcnNpb24+CisgICAgICAgIDxqYmFrZS5tYXZlbi5wbHVnaW4udmVyc2lvbj4yLjcuMC1yYy43PC9qYmFrZS5tYXZlbi5wbHVnaW4udmVyc2lvbj4KKyAgICAgICAgPGZyZWVtYXJrZXIudmVyc2lvbj4yLjMuMzI8L2ZyZWVtYXJrZXIudmVyc2lvbj4KKyAgICAgICAgPCEtLSBzdGF0dXM6IERSQUZULCBCRVRBLCBldGMuLCBvciBibGFuayBmb3IgZmluYWwgLS0+CisgICAgICAgIDxzdGF0dXM+PC9zdGF0dXM+CisgICAgICAgIDxkb2MucGRmPkpha2FydGEtQW5ub3RhdGlvbnMtVENLLVVzZXJzLUd1aWRlLnBkZjwvZG9jLnBkZj4KKyAgICAgICAgPG1hdmVuLmRlcGxveS5za2lwPnRydWU8L21hdmVuLmRlcGxveS5za2lwPgorICAgIDwvcHJvcGVydGllcz4KKworICAgIDxkaXN0cmlidXRpb25NYW5hZ2VtZW50PgorICAgICAgICA8c2l0ZT4KKyAgICAgICAgICAgIDx1cmw+c2NtOmdpdDpnaXRAZ2l0aHViLmNvbTpqYWthcnRhZWUvY29tbW9uLWFubm90YXRpb25zLWFwaS5naXQ8L3VybD4KKyAgICAgICAgPC9zaXRlPgorICAgIDwvZGlzdHJpYnV0aW9uTWFuYWdlbWVudD4KKworICAgIDxzY20+CisgICAgICAgIDxjb25uZWN0aW9uPnNjbTpnaXQ6aHR0cHM6Ly9naXRodWIuY29tL2pha2FydGFlZS9jb21tb24tYW5ub3RhdGlvbnMtYXBpLmdpdDwvY29ubmVjdGlvbj4KKyAgICAgICAgPGRldmVsb3BlckNvbm5lY3Rpb24+c2NtOmdpdDpnaXRAZ2l0aHViLmNvbTpqYWthcnRhZWUvY29tbW9uLWFubm90YXRpb25zLWFwaS5naXQ8L2RldmVsb3BlckNvbm5lY3Rpb24+CisgICAgICAgIDx1cmw+aHR0cHM6Ly9naXRodWIuY29tL2pha2FydGFlZS9jb21tb24tYW5ub3RhdGlvbnMtYXBpPC91cmw+CisgICAgICAgIDx0YWc+SEVBRDwvdGFnPgorICAgIDwvc2NtPgorCisgICAgPGJ1aWxkPgorICAgICAgICA8ZGVmYXVsdEdvYWw+cGFja2FnZTwvZGVmYXVsdEdvYWw+CisgICAgICAgIDxwbHVnaW5zPgorICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tY2xlYW4tcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZXNldHM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZXNldD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGlyZWN0b3J5PnNyYy9tYWluL2piYWtlL2NvbnRlbnQ8L2RpcmVjdG9yeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5jbHVkZXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlPnRvYy5hZG9jPC9pbmNsdWRlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaW5jbHVkZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbGVzZXQ+CisgICAgICAgICAgICAgICAgICAgIDwvZmlsZXNldHM+CisgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1lbmZvcmNlci1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+CisgICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8aWQ+ZW5mb3JjZS12ZXJzaW9uczwvaWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+ZW5mb3JjZTwvZ29hbD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cnVsZXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZXF1aXJlSmF2YVZlcnNpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj5bMTcsKTwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtZXNzYWdlPllvdSBuZWVkIEpESzE3IG9yIG5ld2VyPC9tZXNzYWdlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JlcXVpcmVKYXZhVmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3J1bGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmdsYXNzZmlzaC5kb2M8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z2xhc3NmaXNoLWRvYy1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+CisgICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8aWQ+Z2VuZXJhdGUtdG9jPC9pZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwaGFzZT5nZW5lcmF0ZS1yZXNvdXJjZXM8L3BoYXNlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPnRvYzwvZ29hbD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2hhcHRlclBhdHRlcm5zPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQS1DMC05XStccy4qLFByZWZhY2UuKixQYXJ0XHMuKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2hhcHRlclBhdHRlcm5zPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpZD5nZW5lcmF0ZS1ib29rPC9pZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwaGFzZT5nZW5lcmF0ZS1yZXNvdXJjZXM8L3BoYXNlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPmJvb2s8L2dvYWw+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgorICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmpiYWtlPC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmpiYWtlLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPG91dHB1dERpcmVjdG9yeT4ke3NpdGUub3V0cHV0LmRpcn08L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgICAgICAgICAgICAgPHByb3BlcnRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8c3RhdHVzPiR7c3RhdHVzfTwvc3RhdHVzPgorICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnRpZXM+CisgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgIDxleGVjdXRpb25zPgorICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPGlkPmJ1aWxkLXNpdGU8L2lkPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBoYXNlPmdlbmVyYXRlLXJlc291cmNlczwvcGhhc2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+Z2VuZXJhdGU8L2dvYWw+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgorICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFzY2lpZG9jdG9yPC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmFzY2lpZG9jdG9yLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPHNvdXJjZURpcmVjdG9yeT4ke3Byb2plY3QuYnVpbGQuZGlyZWN0b3J5fS9ib29rPC9zb3VyY2VEaXJlY3Rvcnk+CisgICAgICAgICAgICAgICAgICAgIDxzb3VyY2VEb2N1bWVudE5hbWU+Ym9vay5hZG9jPC9zb3VyY2VEb2N1bWVudE5hbWU+CisgICAgICAgICAgICAgICAgICAgIDwhLS0gWFhYIC0gYmVsb3cgZGVwZW5kcyBvbiBydW5uaW5nIGpiYWtlIGZpcnN0IC0tPgorICAgICAgICAgICAgICAgICAgICA8aW1hZ2VzRGlyPiR7cHJvamVjdC5idWlsZC5kaXJlY3Rvcnl9L3N0YWdpbmcvPC9pbWFnZXNEaXI+CisgICAgICAgICAgICAgICAgICAgIDxiYWNrZW5kPnBkZjwvYmFja2VuZD4KKyAgICAgICAgICAgICAgICAgICAgPG91dHB1dEZpbGU+JHtkb2MucGRmfTwvb3V0cHV0RmlsZT4KKyAgICAgICAgICAgICAgICAgICAgPGF0dHJpYnV0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGRmLXN0eWxlc2Rpcj4ke3Byb2plY3QuYmFzZWRpcn0vc3JjL3RoZW1lPC9wZGYtc3R5bGVzZGlyPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBkZi1zdHlsZT5qYWthcnRhZWU8L3BkZi1zdHlsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkb2N0eXBlPmJvb2s8L2RvY3R5cGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8c3RhdHVzPiR7c3RhdHVzfTwvc3RhdHVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGNvbXBhdC1tb2RlLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRhLXVyaS8+CisgICAgICAgICAgICAgICAgICAgICAgICA8aWNvbnM+Zm9udDwvaWNvbnM+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFnZW51bXMvPgorICAgICAgICAgICAgICAgICAgICAgICAgPHRvYy8+CisgICAgICAgICAgICAgICAgICAgICAgICA8aWNvbnM+Zm9udDwvaWNvbnM+CisgICAgICAgICAgICAgICAgICAgICAgICA8c2VjdGFuY2hvcnM+dHJ1ZTwvc2VjdGFuY2hvcnM+CisgICAgICAgICAgICAgICAgICAgICAgICA8aWRwcmVmaXgvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGlkc2VwYXJhdG9yPi08L2lkc2VwYXJhdG9yPgorICAgICAgICAgICAgICAgICAgICAgICAgPGRvY2luZm8xPnRydWU8L2RvY2luZm8xPgorICAgICAgICAgICAgICAgICAgICAgICAgPGVtYmVkQXNzZXRzPnRydWU8L2VtYmVkQXNzZXRzPgorICAgICAgICAgICAgICAgICAgICA8L2F0dHJpYnV0ZXM+CisgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgIDxleGVjdXRpb25zPgorICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPGlkPmdlbmVyYXRlLXBkZi1kb2M8L2lkPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBoYXNlPmdlbmVyYXRlLXJlc291cmNlczwvcGhhc2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+cHJvY2Vzcy1hc2NpaWRvYzwvZ29hbD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+CisgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2NtLXB1Ymxpc2gtcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDxleGVjdXRpb25zPgorICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPGlkPmRlcGxveS1zaXRlPC9pZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwaGFzZT5kZXBsb3k8L3BoYXNlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPnB1Ymxpc2gtc2NtPC9nb2FsPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzY21CcmFuY2g+Z2gtcGFnZXM8L3NjbUJyYW5jaD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2tpcERlbGV0ZWRGaWxlcz5mYWxzZTwvc2tpcERlbGV0ZWRGaWxlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2hlY2tpbkNvbW1lbnQ+VXBkYXRlIHNpdGU8L2NoZWNraW5Db21tZW50PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgPC9wbHVnaW5zPgorCisgICAgICAgIDxwbHVnaW5NYW5hZ2VtZW50PgorICAgICAgICAgICAgPHBsdWdpbnM+CisgICAgICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1jbGVhbi1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjMuMy4yPC92ZXJzaW9uPgorICAgICAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5nbGFzc2Zpc2guZG9jPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5nbGFzc2Zpc2gtZG9jLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+MS4zPC92ZXJzaW9uPgorICAgICAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tZW5mb3JjZXItcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4zLjQuMTwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWFzc2VtYmx5LXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+My42LjA8L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zY20tcHVibGlzaC1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjMuMi4xPC92ZXJzaW9uPgorICAgICAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5qYmFrZTwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+amJha2UtbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2piYWtlLm1hdmVuLnBsdWdpbi52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgPGRlcGVuZGVuY2llcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hc2NpaWRvY3RvcjwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5hc2NpaWRvY3Rvcmo8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+JHthc2NpaWRvY3RvcmoudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXNjaWlkb2N0b3I8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+YXNjaWlkb2N0b3JqLWRpYWdyYW08L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+JHthc2NpaWRvY3RvcmouZGlhZ3JhbS52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5mcmVlbWFya2VyPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmZyZWVtYXJrZXI8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+JHtmcmVlbWFya2VyLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgICAgICA8L2RlcGVuZGVuY2llcz4KKyAgICAgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXNjaWlkb2N0b3I8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmFzY2lpZG9jdG9yLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+JHthc2NpaWRvY3RvcmoubWF2ZW4ucGx1Z2luLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICAgICAgICAgICA8ZGVwZW5kZW5jaWVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFzY2lpZG9jdG9yPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmFzY2lpZG9jdG9yai1wZGY8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+JHthc2NpaWRvY3RvcmoucGRmLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgICAgICA8L2RlcGVuZGVuY2llcz4KKyAgICAgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgICAgIDwvcGx1Z2lucz4KKyAgICAgICAgPC9wbHVnaW5NYW5hZ2VtZW50PgorICAgIDwvYnVpbGQ+Cis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS90Y2svZG9jcy91c2VyZ3VpZGUvc3JjL21haW4vamJha2UvYXNzZXRzL1JFQURNRS5tZCBiL3Rjay9kb2NzL3VzZXJndWlkZS9zcmMvbWFpbi9qYmFrZS9hc3NldHMvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4Zjk2MmMKLS0tIC9kZXYvbnVsbAorKysgYi90Y2svZG9jcy91c2VyZ3VpZGUvc3JjL21haW4vamJha2UvYXNzZXRzL1JFQURNRS5tZApAQCAtMCwwICsxLDQgQEAKKyMgQWJvdXQKKworVGhlIHt7c2l0ZS50aXRsZX19IHByb2plY3QgY29udGFpbnMgdGhlIFtBc2NpaURvY10oaHR0cDovL2FzY2lpZG9jLm9yZy8pCitzb3VyY2UgY29kZSBmb3IgdGhlIC4uLgpkaWZmIC0tZ2l0IGEvdGNrL2RvY3MvdXNlcmd1aWRlL3NyYy9tYWluL2piYWtlL2Fzc2V0cy9fY29uZmlnLnltbCBiL3Rjay9kb2NzL3VzZXJndWlkZS9zcmMvbWFpbi9qYmFrZS9hc3NldHMvX2NvbmZpZy55bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVlYmU2MgotLS0gL2Rldi9udWxsCisrKyBiL3Rjay9kb2NzL3VzZXJndWlkZS9zcmMvbWFpbi9qYmFrZS9hc3NldHMvX2NvbmZpZy55bWwKQEAgLTAsMCArMSwxMyBAQAorcmVtb3RlX3RoZW1lOiBqYWthcnRhZWUvamVreWxsLXRoZW1lLWpha2FydGEtZWUKKwordGl0bGU6IFt0Y2tfY29hX3YxXzNdCitkZXNjcmlwdGlvbjogW0pha2FydGEgRUUgVGVjaG5vbG9neSBDb21wYXRpYmlsaXR5IEtpdCBVc2VyJ3MgR3VpZGUgZm9yIEpha2FydGEgQW5ub3RhdGlvbnMsIFJlbGVhc2UgMy4wXQorCisjIHNpZGViYXIgbGlua3MgdXJsCitsaW5rczoKKyAgc291cmNlOiBodHRwczovL2dpdGh1Yi5jb20vamFrYXJ0YWVlL2NvbW1vbi1hbm5vdGF0aW9ucy1hcGkKKyAgZG93bmxvYWQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9qYWthcnRhZWUvY29tbW9uLWFubm90YXRpb25zLWFwaS9yZWxlYXNlcworICAjbWFpbGluZ2xpc3Q6IGh0dHBzOi8vamF2YWVlLmdyb3Vwcy5pby9nL3Rja19jb2FfdjFfMworICAjamF2YWRvY3M6CisgIGRvY3M6IGh0dHBzOi8vamFrYXJ0YS5lZS9zcGVjaWZpY2F0aW9ucy9hbm5vdGF0aW9ucy8zLjAKKyAgI2ZhcToKZGlmZiAtLWdpdCBhL3Rjay9kb2NzL3VzZXJndWlkZS9zcmMvbWFpbi9qYmFrZS9hc3NldHMvY3NzL3N0eWxlLmNzcyBiL3Rjay9kb2NzL3VzZXJndWlkZS9zcmMvbWFpbi9qYmFrZS9hc3NldHMvY3NzL3N0eWxlLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODJmNzU1Ci0tLSAvZGV2L251bGwKKysrIGIvdGNrL2RvY3MvdXNlcmd1aWRlL3NyYy9tYWluL2piYWtlL2Fzc2V0cy9jc3Mvc3R5bGUuY3NzCkBAIC0wLDAgKzEsMzEzIEBACisvKiBDU1MgKi8KKy8qISBub3JtYWxpemUuY3NzIHYzLjAuMiB8IE1JVCBMaWNlbnNlIHwgZ2l0LmlvL25vcm1hbGl6ZSAqLworLyoqIDEuIFNldCBkZWZhdWx0IGZvbnQgZmFtaWx5IHRvIHNhbnMtc2VyaWYuIDIuIFByZXZlbnQgaU9TIHRleHQgc2l6ZSBhZGp1c3QgYWZ0ZXIgb3JpZW50YXRpb24gY2hhbmdlLCB3aXRob3V0IGRpc2FibGluZyB1c2VyIHpvb20uICovCitodG1sIHsgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7IC8qIDEgKi8gLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC8qIDIgKi8gLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAvKiAyICovIH0KKworLyogSFRNTDUgZGlzcGxheSBkZWZpbml0aW9ucyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyoqIENvcnJlY3QgYGJsb2NrYCBkaXNwbGF5IG5vdCBkZWZpbmVkIGZvciBhbnkgSFRNTDUgZWxlbWVudCBpbiBJRSA4LzkuIENvcnJlY3QgYGJsb2NrYCBkaXNwbGF5IG5vdCBkZWZpbmVkIGZvciBgZGV0YWlsc2Agb3IgYHN1bW1hcnlgIGluIElFIDEwLzExIGFuZCBGaXJlZm94LiBDb3JyZWN0IGBibG9ja2AgZGlzcGxheSBub3QgZGVmaW5lZCBmb3IgYG1haW5gIGluIElFIDExLiAqLworYXJ0aWNsZSwgYXNpZGUsIGRldGFpbHMsIGZpZ2NhcHRpb24sIGZpZ3VyZSwgZm9vdGVyLCBoZWFkZXIsIGhncm91cCwgbWFpbiwgbWVudSwgbmF2LCBzZWN0aW9uLCBzdW1tYXJ5IHsgZGlzcGxheTogYmxvY2s7IH0KKworLyoqIDEuIENvcnJlY3QgYGlubGluZS1ibG9ja2AgZGlzcGxheSBub3QgZGVmaW5lZCBpbiBJRSA4LzkuIDIuIE5vcm1hbGl6ZSB2ZXJ0aWNhbCBhbGlnbm1lbnQgb2YgYHByb2dyZXNzYCBpbiBDaHJvbWUsIEZpcmVmb3gsIGFuZCBPcGVyYS4gKi8KK2F1ZGlvLCBjYW52YXMsIHByb2dyZXNzLCB2aWRlbyB7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgLyogMSAqLyB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7IC8qIDIgKi8gfQorCisvKiogUHJldmVudCBtb2Rlcm4gYnJvd3NlcnMgZnJvbSBkaXNwbGF5aW5nIGBhdWRpb2Agd2l0aG91dCBjb250cm9scy4gUmVtb3ZlIGV4Y2VzcyBoZWlnaHQgaW4gaU9TIDUgZGV2aWNlcy4gKi8KK2F1ZGlvOm5vdChbY29udHJvbHNdKSB7IGRpc3BsYXk6IG5vbmU7IGhlaWdodDogMDsgfQorCisvKiogQWRkcmVzcyBgW2hpZGRlbl1gIHN0eWxpbmcgbm90IHByZXNlbnQgaW4gSUUgOC85LzEwLiBIaWRlIHRoZSBgdGVtcGxhdGVgIGVsZW1lbnQgaW4gSUUgOC85LzExLCBTYWZhcmksIGFuZCBGaXJlZm94IDwgMjIuICovCitbaGlkZGVuXSwgdGVtcGxhdGUgeyBkaXNwbGF5OiBub25lOyB9CisKKy8qIExpbmtzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiogUmVtb3ZlIHRoZSBncmF5IGJhY2tncm91bmQgY29sb3IgZnJvbSBhY3RpdmUgbGlua3MgaW4gSUUgMTAuICovCithIHsgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IH0KKworLyoqIEltcHJvdmUgcmVhZGFiaWxpdHkgd2hlbiBmb2N1c2VkIGFuZCBhbHNvIG1vdXNlIGhvdmVyZWQgaW4gYWxsIGJyb3dzZXJzLiAqLworYTphY3RpdmUsIGE6aG92ZXIgeyBvdXRsaW5lOiAwOyB9CisKKy8qIFRleHQtbGV2ZWwgc2VtYW50aWNzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiogQWRkcmVzcyBzdHlsaW5nIG5vdCBwcmVzZW50IGluIElFIDgvOS8xMC8xMSwgU2FmYXJpLCBhbmQgQ2hyb21lLiAqLworYWJiclt0aXRsZV0geyBib3JkZXItYm90dG9tOiAxcHggZG90dGVkOyB9CisKKy8qKiBBZGRyZXNzIHN0eWxlIHNldCB0byBgYm9sZGVyYCBpbiBGaXJlZm94IDQrLCBTYWZhcmksIGFuZCBDaHJvbWUuICovCitiLCBzdHJvbmcgeyBmb250LXdlaWdodDogYm9sZDsgfQorCisvKiogQWRkcmVzcyBzdHlsaW5nIG5vdCBwcmVzZW50IGluIFNhZmFyaSBhbmQgQ2hyb21lLiAqLworZGZuIHsgZm9udC1zdHlsZTogaXRhbGljOyB9CisKKy8qKiBBZGRyZXNzIHZhcmlhYmxlIGBoMWAgZm9udC1zaXplIGFuZCBtYXJnaW4gd2l0aGluIGBzZWN0aW9uYCBhbmQgYGFydGljbGVgIGNvbnRleHRzIGluIEZpcmVmb3ggNCssIFNhZmFyaSwgYW5kIENocm9tZS4gKi8KK2gxIHsgZm9udC1zaXplOiAyZW07IG1hcmdpbjogMC42N2VtIDA7IH0KKworLyoqIEFkZHJlc3Mgc3R5bGluZyBub3QgcHJlc2VudCBpbiBJRSA4LzkuICovCittYXJrIHsgYmFja2dyb3VuZDogI2ZmMDsgY29sb3I6ICMwMDA7IH0KKworLyoqIEFkZHJlc3MgaW5jb25zaXN0ZW50IGFuZCB2YXJpYWJsZSBmb250IHNpemUgaW4gYWxsIGJyb3dzZXJzLiAqLworc21hbGwgeyBmb250LXNpemU6IDgwJTsgfQorCisvKiogUHJldmVudCBgc3ViYCBhbmQgYHN1cGAgYWZmZWN0aW5nIGBsaW5lLWhlaWdodGAgaW4gYWxsIGJyb3dzZXJzLiAqLworc3ViLCBzdXAgeyBmb250LXNpemU6IDc1JTsgbGluZS1oZWlnaHQ6IDA7IHBvc2l0aW9uOiByZWxhdGl2ZTsgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOyB9CisKK3N1cCB7IHRvcDogLTAuNWVtOyB9CisKK3N1YiB7IGJvdHRvbTogLTAuMjVlbTsgfQorCisvKiBFbWJlZGRlZCBjb250ZW50ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiogUmVtb3ZlIGJvcmRlciB3aGVuIGluc2lkZSBgYWAgZWxlbWVudCBpbiBJRSA4LzkvMTAuICovCitpbWcgeyBib3JkZXI6IDA7IH0KKworLyoqIENvcnJlY3Qgb3ZlcmZsb3cgbm90IGhpZGRlbiBpbiBJRSA5LzEwLzExLiAqLworc3ZnOm5vdCg6cm9vdCkgeyBvdmVyZmxvdzogaGlkZGVuOyB9CisKKy8qIEdyb3VwaW5nIGNvbnRlbnQgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qKiBBZGRyZXNzIG1hcmdpbiBub3QgcHJlc2VudCBpbiBJRSA4LzkgYW5kIFNhZmFyaS4gKi8KK2ZpZ3VyZSB7IG1hcmdpbjogMWVtIDQwcHg7IH0KKworLyoqIEFkZHJlc3MgZGlmZmVyZW5jZXMgYmV0d2VlbiBGaXJlZm94IGFuZCBvdGhlciBicm93c2Vycy4gKi8KK2hyIHsgYm94LXNpemluZzogY29udGVudC1ib3g7IGhlaWdodDogMDsgfQorCisvKiogQ29udGFpbiBvdmVyZmxvdyBpbiBhbGwgYnJvd3NlcnMuICovCitwcmUgeyBvdmVyZmxvdzogYXV0bzsgfQorCisvKiogQWRkcmVzcyBvZGQgYGVtYC11bml0IGZvbnQgc2l6ZSByZW5kZXJpbmcgaW4gYWxsIGJyb3dzZXJzLiAqLworY29kZSwga2JkLCBwcmUsIHNhbXAgeyBmb250LWZhbWlseTogbW9ub3NwYWNlLCBtb25vc3BhY2U7IGZvbnQtc2l6ZTogMWVtOyB9CisKKy8qIEZvcm1zID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiogS25vd24gbGltaXRhdGlvbjogYnkgZGVmYXVsdCwgQ2hyb21lIGFuZCBTYWZhcmkgb24gT1MgWCBhbGxvdyB2ZXJ5IGxpbWl0ZWQgc3R5bGluZyBvZiBgc2VsZWN0YCwgdW5sZXNzIGEgYGJvcmRlcmAgcHJvcGVydHkgaXMgc2V0LiAqLworLyoqIDEuIENvcnJlY3QgY29sb3Igbm90IGJlaW5nIGluaGVyaXRlZC4gS25vd24gaXNzdWU6IGFmZmVjdHMgY29sb3Igb2YgZGlzYWJsZWQgZWxlbWVudHMuIDIuIENvcnJlY3QgZm9udCBwcm9wZXJ0aWVzIG5vdCBiZWluZyBpbmhlcml0ZWQuIDMuIEFkZHJlc3MgbWFyZ2lucyBzZXQgZGlmZmVyZW50bHkgaW4gRmlyZWZveCA0KywgU2FmYXJpLCBhbmQgQ2hyb21lLiAqLworYnV0dG9uLCBpbnB1dCwgb3B0Z3JvdXAsIHNlbGVjdCwgdGV4dGFyZWEgeyBjb2xvcjogaW5oZXJpdDsgLyogMSAqLyBmb250OiBpbmhlcml0OyAvKiAyICovIG1hcmdpbjogMDsgLyogMyAqLyB9CisKKy8qKiBBZGRyZXNzIGBvdmVyZmxvd2Agc2V0IHRvIGBoaWRkZW5gIGluIElFIDgvOS8xMC8xMS4gKi8KK2J1dHRvbiB7IG92ZXJmbG93OiB2aXNpYmxlOyB9CisKKy8qKiBBZGRyZXNzIGluY29uc2lzdGVudCBgdGV4dC10cmFuc2Zvcm1gIGluaGVyaXRhbmNlIGZvciBgYnV0dG9uYCBhbmQgYHNlbGVjdGAuIEFsbCBvdGhlciBmb3JtIGNvbnRyb2wgZWxlbWVudHMgZG8gbm90IGluaGVyaXQgYHRleHQtdHJhbnNmb3JtYCB2YWx1ZXMuIENvcnJlY3QgYGJ1dHRvbmAgc3R5bGUgaW5oZXJpdGFuY2UgaW4gRmlyZWZveCwgSUUgOC85LzEwLzExLCBhbmQgT3BlcmEuIENvcnJlY3QgYHNlbGVjdGAgc3R5bGUgaW5oZXJpdGFuY2UgaW4gRmlyZWZveC4gKi8KK2J1dHRvbiwgc2VsZWN0IHsgdGV4dC10cmFuc2Zvcm06IG5vbmU7IH0KKworLyoqIDEuIEF2b2lkIHRoZSBXZWJLaXQgYnVnIGluIEFuZHJvaWQgNC4wLiogd2hlcmUgKDIpIGRlc3Ryb3lzIG5hdGl2ZSBgYXVkaW9gIGFuZCBgdmlkZW9gIGNvbnRyb2xzLiAyLiBDb3JyZWN0IGluYWJpbGl0eSB0byBzdHlsZSBjbGlja2FibGUgYGlucHV0YCB0eXBlcyBpbiBpT1MuIDMuIEltcHJvdmUgdXNhYmlsaXR5IGFuZCBjb25zaXN0ZW5jeSBvZiBjdXJzb3Igc3R5bGUgYmV0d2VlbiBpbWFnZS10eXBlIGBpbnB1dGAgYW5kIG90aGVycy4gKi8KK2J1dHRvbiwgaHRtbCBpbnB1dFt0eXBlPSJidXR0b24iXSwgaW5wdXRbdHlwZT0icmVzZXQiXSwgaW5wdXRbdHlwZT0ic3VibWl0Il0geyAtd2Via2l0LWFwcGVhcmFuY2U6IGJ1dHRvbjsgLyogMiAqLyBjdXJzb3I6IHBvaW50ZXI7IC8qIDMgKi8gfQorCisvKiogUmUtc2V0IGRlZmF1bHQgY3Vyc29yIGZvciBkaXNhYmxlZCBlbGVtZW50cy4gKi8KK2J1dHRvbltkaXNhYmxlZF0sIGh0bWwgaW5wdXRbZGlzYWJsZWRdIHsgY3Vyc29yOiBkZWZhdWx0OyB9CisKKy8qKiBSZW1vdmUgaW5uZXIgcGFkZGluZyBhbmQgYm9yZGVyIGluIEZpcmVmb3ggNCsuICovCitidXR0b246Oi1tb3otZm9jdXMtaW5uZXIsIGlucHV0OjotbW96LWZvY3VzLWlubmVyIHsgYm9yZGVyOiAwOyBwYWRkaW5nOiAwOyB9CisKKy8qKiBBZGRyZXNzIEZpcmVmb3ggNCsgc2V0dGluZyBgbGluZS1oZWlnaHRgIG9uIGBpbnB1dGAgdXNpbmcgYCFpbXBvcnRhbnRgIGluIHRoZSBVQSBzdHlsZXNoZWV0LiAqLworaW5wdXQgeyBsaW5lLWhlaWdodDogbm9ybWFsOyB9CisKKy8qKiBJdCdzIHJlY29tbWVuZGVkIHRoYXQgeW91IGRvbid0IGF0dGVtcHQgdG8gc3R5bGUgdGhlc2UgZWxlbWVudHMuIEZpcmVmb3gncyBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IHJlc3BlY3QgYm94LXNpemluZywgcGFkZGluZywgb3Igd2lkdGguICAxLiBBZGRyZXNzIGJveCBzaXppbmcgc2V0IHRvIGBjb250ZW50LWJveGAgaW4gSUUgOC85LzEwLiAyLiBSZW1vdmUgZXhjZXNzIHBhZGRpbmcgaW4gSUUgOC85LzEwLiAqLworaW5wdXRbdHlwZT0iY2hlY2tib3giXSwgaW5wdXRbdHlwZT0icmFkaW8iXSB7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IC8qIDEgKi8gcGFkZGluZzogMDsgLyogMiAqLyB9CisKKy8qKiBGaXggdGhlIGN1cnNvciBzdHlsZSBmb3IgQ2hyb21lJ3MgaW5jcmVtZW50L2RlY3JlbWVudCBidXR0b25zLiBGb3IgY2VydGFpbiBgZm9udC1zaXplYCB2YWx1ZXMgb2YgdGhlIGBpbnB1dGAsIGl0IGNhdXNlcyB0aGUgY3Vyc29yIHN0eWxlIG9mIHRoZSBkZWNyZW1lbnQgYnV0dG9uIHRvIGNoYW5nZSBmcm9tIGBkZWZhdWx0YCB0byBgdGV4dGAuICovCitpbnB1dFt0eXBlPSJudW1iZXIiXTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiwgaW5wdXRbdHlwZT0ibnVtYmVyIl06Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24geyBoZWlnaHQ6IGF1dG87IH0KKworLyoqIDEuIEFkZHJlc3MgYGFwcGVhcmFuY2VgIHNldCB0byBgc2VhcmNoZmllbGRgIGluIFNhZmFyaSBhbmQgQ2hyb21lLiAyLiBBZGRyZXNzIGBib3gtc2l6aW5nYCBzZXQgdG8gYGJvcmRlci1ib3hgIGluIFNhZmFyaSBhbmQgQ2hyb21lIChpbmNsdWRlIGAtbW96YCB0byBmdXR1cmUtcHJvb2YpLiAqLworaW5wdXRbdHlwZT0ic2VhcmNoIl0geyAtd2Via2l0LWFwcGVhcmFuY2U6IHRleHRmaWVsZDsgLyogMSAqLyAvKiAyICovIGJveC1zaXppbmc6IGNvbnRlbnQtYm94OyB9CisKKy8qKiBSZW1vdmUgaW5uZXIgcGFkZGluZyBhbmQgc2VhcmNoIGNhbmNlbCBidXR0b24gaW4gU2FmYXJpIGFuZCBDaHJvbWUgb24gT1MgWC4gU2FmYXJpIChidXQgbm90IENocm9tZSkgY2xpcHMgdGhlIGNhbmNlbCBidXR0b24gd2hlbiB0aGUgc2VhcmNoIGlucHV0IGhhcyBwYWRkaW5nIChhbmQgYHRleHRmaWVsZGAgYXBwZWFyYW5jZSkuICovCitpbnB1dFt0eXBlPSJzZWFyY2giXTo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbiwgaW5wdXRbdHlwZT0ic2VhcmNoIl06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24geyAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7IH0KKworLyoqIERlZmluZSBjb25zaXN0ZW50IGJvcmRlciwgbWFyZ2luLCBhbmQgcGFkZGluZy4gKi8KK2ZpZWxkc2V0IHsgYm9yZGVyOiAxcHggc29saWQgI2MwYzBjMDsgbWFyZ2luOiAwIDJweDsgcGFkZGluZzogMC4zNWVtIDAuNjI1ZW0gMC43NWVtOyB9CisKKy8qKiAxLiBDb3JyZWN0IGBjb2xvcmAgbm90IGJlaW5nIGluaGVyaXRlZCBpbiBJRSA4LzkvMTAvMTEuIDIuIFJlbW92ZSBwYWRkaW5nIHNvIHBlb3BsZSBhcmVuJ3QgY2F1Z2h0IG91dCBpZiB0aGV5IHplcm8gb3V0IGZpZWxkc2V0cy4gKi8KK2xlZ2VuZCB7IGJvcmRlcjogMDsgLyogMSAqLyBwYWRkaW5nOiAwOyAvKiAyICovIH0KKworLyoqIFJlbW92ZSBkZWZhdWx0IHZlcnRpY2FsIHNjcm9sbGJhciBpbiBJRSA4LzkvMTAvMTEuICovCit0ZXh0YXJlYSB7IG92ZXJmbG93OiBhdXRvOyB9CisKKy8qKiBEb24ndCBpbmhlcml0IHRoZSBgZm9udC13ZWlnaHRgIChhcHBsaWVkIGJ5IGEgcnVsZSBhYm92ZSkuIE5PVEU6IHRoZSBkZWZhdWx0IGNhbm5vdCBzYWZlbHkgYmUgY2hhbmdlZCBpbiBDaHJvbWUgYW5kIFNhZmFyaSBvbiBPUyBYLiAqLworb3B0Z3JvdXAgeyBmb250LXdlaWdodDogYm9sZDsgfQorCisvKiBUYWJsZXMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qKiBSZW1vdmUgbW9zdCBzcGFjaW5nIGJldHdlZW4gdGFibGUgY2VsbHMuICovCit0YWJsZSB7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7IGJvcmRlci1zcGFjaW5nOiAwOyB9CisKK3RkLCB0aCB7IHBhZGRpbmc6IDA7IH0KKworLyogTEFZT1VUIFNUWUxFUyAqLworCitwIHsgbWFyZ2luLXRvcDogMDsgfQorCitjb2RlLCBwcmUgeyBtYXJnaW4tYm90dG9tOiAzMHB4OyBmb250LWZhbWlseTogTW9uYWNvLCAiQml0c3RyZWFtIFZlcmEgU2FucyBNb25vIiwgIkx1Y2lkYSBDb25zb2xlIiwgVGVybWluYWwsIG1vbm9zcGFjZTsgZm9udC1zaXplOiAxM3B4OyBjb2xvcjogIzIyMjsgfQorCitjb2RlIHsgcGFkZGluZzogMCAzcHg7IGJhY2tncm91bmQtY29sb3I6ICNmMmY4ZmM7IGJvcmRlcjogc29saWQgMXB4ICNkYmU3ZjM7IH0KKworcHJlIHsgcGFkZGluZzogMjBweDsgb3ZlcmZsb3c6IGF1dG87IHRleHQtc2hhZG93OiBub25lOyBiYWNrZ3JvdW5kOiAjZmZmOyBib3JkZXI6IHNvbGlkIDFweCAjZjJmMmYyOyB9CisKK3ByZSBjb2RlIHsgcGFkZGluZzogMDsgY29sb3I6ICMyODc5ZDA7IGJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlcjogbm9uZTsgfQorCit1bCwgb2wsIGRsIHsgbWFyZ2luLWJvdHRvbTogMjBweDsgfQorCisvKiBDT01NT04gU1RZTEVTICovCisKK3RkLmhhbGlnbi1yaWdodCB7IHRleHQtYWxpZ246IHJpZ2h0OyB9IAorCit0ZC5oYWxpZ24tY2VudGVyIHsgdGV4dC1hbGlnbjogY2VudGVyOyB9IAorCitmb3JtIHsgcGFkZGluZzogMjBweDsgYmFja2dyb3VuZDogI2YyZjJmMjsgfQorCitoMiB7IAorICAgZm9udC1zaXplOiAyZW07CisgICBsaW5lLWhlaWdodDogMS4yZW07CisgICBmb250LXdlaWdodDogMjAwOworICAgbGV0dGVyLXNwYWNpbmc6IDA7Cit9CisKK2gzIHsgCisgICBmb250LXNpemU6IDEuNGVtOworICAgbGluZS1oZWlnaHQ6IDEuMmVtOworICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgIGxldHRlci1zcGFjaW5nOiAwOworfQorCisuc2VjdDEgeworICAgbWFyZ2luLWxlZnQ6IDQlOworICAgbWFyZ2luLXJpZ2h0OiA0JTsKKyAgIGZvbnQ6IDEzcHgvMjBweCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmICAKK30KKworYTpsaW5rIHsKKyAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgIGNvbG9yOiAjMDk1NjlkOworfQorCisjcHJlYW1ibGUgaHJ7CisgICBtYXJnaW4tbGVmdDogMCU7CisgICBtYXJnaW4tcmlnaHQ6IDAlOworfQorCisjcHJlYW1ibGUgLnNlY3Rpb25ib2R5IHRhYmxlICB7CisgICBmb250LXdlaWdodDogMjAwOworICAgbWFyZ2luLWxlZnQ6IDQlOworICAgbWFyZ2luLXJpZ2h0OiA0JTsKK30KKworaHIgeworICAgbWFyZ2luLWJvdHRvbTogMTJweDsKK30KKwordGFibGUudGFibGVibG9jay5mcmFtZS1hbGwuZ3JpZC1hbGwuc3ByZWFkIHsKKyAgIGZvbnQtc2l6ZTogMTJweDsKK30KKworY29kZSB7CisgICBmb250LXNpemU6LjllbTsKKyAgIGJvcmRlcjogMXB4IHNvbGlkICNlYWVhZWE7CisgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjZmNmY2OworICAgYm9yZGVyLXJhZGl1czogM3B4OworICAgcGFkZGluZzogMXB4OworICAgcGFkZGluZy1sZWZ0OjJweDsKKyAgIHBhZGRpbmctcmlnaHQ6MnB4OworfQorCitwcmUucHJldHR5cHJpbnQuaGlnaGxpZ2h0IHsKKyAgIGJvcmRlcjogMXB4IHNvbGlkICNlYWVhZWE7CisgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjZmNmY2OworICAgYm9yZGVyLXJhZGl1czogNHB4OworICAgcGFkZGluZzogOHB4OworICAgcGFkZGluZy10b3A6NHB4OworICAgcGFkZGluZy1ib3R0b206NHB4OworfQorCisubGFuZ3VhZ2Utb2FjX25vX3dhcm4geworICAgZm9udC1zaXplOi45ZW07CisgICBjb2xvcjojMjIyOworICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7Cit9CisKKyNkb2MtdGl0bGUgeworICAgbWFyZ2luLWxlZnQ6IDQlOworfQorCisjdG9wLW5hdiB7CisgICBtYXJnaW4tbGVmdDogNCU7CisgICBmb250LXNpemU6IDEycHg7Cit9CisKKyNib3R0b20tbmF2IHsKKyAgIG1hcmdpbi1sZWZ0OiA0JTsKKyAgIGZvbnQtc2l6ZTogMTJweDsKK30KKworLnZlY3Rvci1mb250IHsKKyAgIGNvbG9yOmdyZXk7IAorICAgZm9udC1zaXplOiAyMHB4OworfQorCisjY29weXJpZ2h0IHsKKyAgIHBhZGRpbmctdG9wOiAxMHB4OworICAgcGFkZGluZy1ib3R0b206IDRweDsKKyAgIGRpc3BsYXk6IHRhYmxlOworICAgbWFyZ2luOjAgYXV0bzsKKyAgIGNvbG9yOiBncmV5OworICAgZm9udC1zaXplOiAxMnB4OworICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKK30KKworLmJldGEge2NvbG9yOiAjRkYwMDAwfQorCisvKiBHRU5FUkFMIEVMRU1FTlQgVFlQRSBTVFlMRVMgKi8KKworLyogI01lZGlhIFF1ZXJpZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiBTbWFsbGVyIHRoYW4gc3RhbmRhcmQgOTYwIChkZXZpY2VzIGFuZCBicm93c2VycykgKi8KKy8qIFRhYmxldCBQb3J0cmFpdCBzaXplIHRvIHN0YW5kYXJkIDk2MCAoZGV2aWNlcyBhbmQgYnJvd3NlcnMpICovCitAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSBhbmQgKG1heC13aWR0aDogOTU5cHgpIHsgLmlubmVyIHsgd2lkdGg6IDc0MHB4OyB9CisgIGhlYWRlciBoMSwgaGVhZGVyIGgyIHsgd2lkdGg6IDM0MHB4OyB9CisgIGhlYWRlciBoMSB7IGZvbnQtc2l6ZTogNjBweDsgfQorICBoZWFkZXIgaDIgeyBmb250LXNpemU6IDMwcHg7IH0KK30KKy8qIEFsbCBNb2JpbGUgU2l6ZXMgKGRldmljZXMgYW5kIGJyb3dzZXIpICovCitAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2N3B4KSB7IC5pbm5lciB7IHdpZHRoOiA5MyU7IH0KKyAgaGVhZGVyIHsgcGFkZGluZzogMjBweCAwOyB9CisgIGhlYWRlciAuaW5uZXIgeyBwb3NpdGlvbjogcmVsYXRpdmU7IH0KKyAgaGVhZGVyIGgxLCBoZWFkZXIgaDIgeyB3aWR0aDogMTAwJTsgfQorICBoZWFkZXIgaDEgeyBmb250LXNpemU6IDQ4cHg7IH0KKyAgaGVhZGVyIGgyIHsgZm9udC1zaXplOiAyNHB4OyB9CisgIGhlYWRlciBhLmJ1dHRvbiB7IHBvc2l0aW9uOiByZWxhdGl2ZTsgZGlzcGxheTogaW5saW5lLWJsb2NrOyB3aWR0aDogYXV0bzsgaGVpZ2h0OiBhdXRvOyBwYWRkaW5nOiA1cHggMTBweDsgbWFyZ2luLXRvcDogMTVweDsgZm9udC1zaXplOiAxM3B4OyBsaW5lLWhlaWdodDogMTsgY29sb3I6ICMyODc5ZDA7IHRleHQtYWxpZ246IGNlbnRlcjsgYmFja2dyb3VuZC1jb2xvcjogIzlkZGNmZjsgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsgYm9yZGVyLXJhZGl1czogNXB4OyAtbW96LWJvcmRlci1yYWRpdXM6IDVweDsgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA1cHg7IH0KKyAgaGVhZGVyIGEuYnV0dG9uIHNtYWxsIHsgZGlzcGxheTogaW5saW5lOyBmb250LXNpemU6IDEzcHg7IH0KK30KKy8qIE1vYmlsZSBMYW5kc2NhcGUgU2l6ZSB0byBUYWJsZXQgUG9ydHJhaXQgKGRldmljZXMgYW5kIGJyb3dzZXJzKSAqLworLyogTW9iaWxlIFBvcnRyYWl0IFNpemUgdG8gTW9iaWxlIExhbmRzY2FwZSBTaXplIChkZXZpY2VzIGFuZCBicm93c2VycykgKi8KKworaGVhZGVyIGgxIHsgcGFkZGluZy10b3A6IDE0cHg7IGZvbnQtc2l6ZTogMmVtOyBmb250LXdlaWdodDogMjAwOyBsaW5lLWhlaWdodDogMS40OyBjb2xvcjogI0ZGRkZGRjsgbGV0dGVyLXNwYWNpbmc6IDBweDsgYm9yZGVyLWJvdHRvbTogMHB4OyB9CisKK2hlYWRlciBoMiB7IGZvbnQtc2l6ZTogMS4yZW07IG1hcmdpbi10b3A6IDA7IG1hcmdpbi1ib3R0b206IDA7IGZvbnQtd2VpZ2h0OiAyMDA7IGxpbmUtaGVpZ2h0OiAuODsgY29sb3I6ICNlYzdEMTE7IGxldHRlci1zcGFjaW5nOiAwOyB9CisKKy8vaGVhZGVyIGEuYnV0dG9uIHsgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgdXJsKC4uL2ltYWdlcy9sb2dvLnBuZykgMCAwIG5vLXJlcGVhdDsgcGFkZGluZy1sZWZ0OiAzMnB4OyB9CisKK2hlYWRlciBhOmhvdmVyIHsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9CisKKy8qIEFkbW9uaXRpb24gKE5vdGUpIGJsb2NrICovCisuYWRtb25pdGlvbmJsb2NrID4gdGFibGUgeworICBib3JkZXI6IDA7CisgIGJhY2tncm91bmQ6IG5vbmU7CisgIHdpZHRoOiAxMDAlOworICB0YWJsZS1sYXlvdXQ6IGF1dG87CisgIG1hcmdpbi1ib3R0b206IDEwLjVweDsKK30KKy5hZG1vbml0aW9uYmxvY2sgPiB0YWJsZSB0ZC5pY29uIHsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworICB3aWR0aDogNjBweDsKK30KKy5hZG1vbml0aW9uYmxvY2sgPiB0YWJsZSB0ZC5pY29uIGltZyB7CisgIG1heC13aWR0aDogbm9uZTsKK30KKy5hZG1vbml0aW9uYmxvY2sgPiB0YWJsZSB0ZC5pY29uIC50aXRsZSB7CisgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Cit9CisuYWRtb25pdGlvbmJsb2NrID4gdGFibGUgdGQuY29udGVudCB7CisgIHBhZGRpbmctbGVmdDogMWVtOworICBwYWRkaW5nLXJpZ2h0OiAxZW07CisgIGJvcmRlci1sZWZ0OiAzcHggc29saWQgI2RkZDsKK30KKy5hZG1vbml0aW9uYmxvY2sgPiB0YWJsZSB0ZC5jb250ZW50ID4gOmxhc3QtY2hpbGQgPiA6bGFzdC1jaGlsZCB7CisgIG1hcmdpbi1ib3R0b206IDA7Cit9CisuYWRtb25pdGlvbmJsb2NrIHRkLmljb24gW2NsYXNzXj0iZmEgaWNvbi0iXTpiZWZvcmUgeworICBmb250LXNpemU6IDIuNWVtOworICB0ZXh0LXNoYWRvdzogMXB4IDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjUpOworICBjdXJzb3I6IGRlZmF1bHQ7Cit9CisuYWRtb25pdGlvbmJsb2NrIHRkLmljb24gLmljb24tbm90ZTpiZWZvcmUgeworICBjb250ZW50OiAiXGYwNWEiOworICBjb2xvcjogIzViYzBkZTsKK30KZGlmZiAtLWdpdCBhL3Rjay9kb2NzL3VzZXJndWlkZS9zcmMvbWFpbi9qYmFrZS9hc3NldHMvaW1nL2VjbGlwc2VfZm91bmRhdGlvbl9sb2dvX3RpbnkucG5nIGIvdGNrL2RvY3MvdXNlcmd1aWRlL3NyYy9tYWluL2piYWtlL2Fzc2V0cy9pbWcvZWNsaXBzZV9mb3VuZGF0aW9uX2xvZ29fdGlueS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU4MzBhZQotLS0gL2Rldi9udWxsCisrKyBiL3Rjay9kb2NzL3VzZXJndWlkZS9zcmMvbWFpbi9qYmFrZS9hc3NldHMvaW1nL2VjbGlwc2VfZm91bmRhdGlvbl9sb2dvX3RpbnkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rjay9kb2NzL3VzZXJndWlkZS9zcmMvbWFpbi9qYmFrZS9jb250ZW50L1JFQURNRSBiL3Rjay9kb2NzL3VzZXJndWlkZS9zcmMvbWFpbi9qYmFrZS9jb250ZW50L1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWZhMmMyCi0tLSAvZGV2L251bGwKKysrIGIvdGNrL2RvY3MvdXNlcmd1aWRlL3NyYy9tYWluL2piYWtlL2NvbnRlbnQvUkVBRE1FCkBAIC0wLDAgKzEsNzcgQEAKK1RoZSBmaWxlIGF0dHJpYnV0ZXMuY29uZiBkZWZpbmVzIHNldmVyYWwgYXR0cmlidXRlcyAodmFyaWFibGVzKSB0aGF0CituZWVkIHRvIGJlIGN1c3RvbWl6ZWQgZm9yIGVhY2ggdGVjaG5vbG9neS4KKworVGhlICouYWRvYyBmaWxlcyBzaG91bGQgbm90IGJlIG1vZGlmaWVkLgorCitUaGUgZm9sbG93aW5nICJpbmNsdWRlIiBmaWxlcyBzaG91bGQgYmUgY3VzdG9taXplZCBhcyBuZWNlc3NhcnkKK2ZvciB0aGUgc3BlY2lmaWMgdGVjaG5vbG9neToKKworLSBydWxlcy5pbmMKKworCUFkZGl0aW9uYWwgY29tcGF0aWJpbGl0eSBydWxlcyBuZWVkZWQgYnkgc29tZSB0ZWNobm9sb2dpZXMuCisJVGhlIHJ1bGVzIGluIHJ1bGVzLmFkb2Mgc2hvdWxkIE5PVCBiZSBjaGFuZ2VkLgorCistIGRlZm5zLmluYworCisJQWRkaXRpb25hbCBkZWZpbml0aW9ucyBuZWVkZWQgYnkgYWRkaXRpb25hbCBjb21wYXRpYmlsaXR5CisJcnVsZXMgaW4gcnVsZXMuaW5jLgorCistIGNvbmZpZy5pbmMKKworCURldGFpbGVkIGluc3RydWN0aW9ucyBmb3IgY29uZmlndXJpbmcgdGhlIFRDSywgaW5jbHVkZWQgaW4KKwlDaGFwdGVyIDQuICBVbmZvcnR1bmF0ZWx5LCB0aGVzZSBhcmUgc2VjdGlvbnMgNC4xIC0gNC4zLAorCXNvIGV2ZW4gaWYgdGhlIFRDSyBkb2Vzbid0IHJlcXVpcmUgMyBzZWN0aW9ucyB5b3UgbmVlZCB0bworCW1ha2UgdXAgc29tZXRoaW5nLCBvciBlbHNlIGNoYW5nZSB0aGUgc2VjdGlvbnMgdG8gIk4vQSIuCisKKy0gcGFja2FnZXMuaW5jCisKKwlBIHNpbXBsZSBsaXN0IG9mIEpha2FydGEgRUUgcGFja2FnZSBuYW1lcyBmb3IgdGhlIHRlY2hub2xvZ3kuCisKKy0gdGNrLXBhY2thZ2VzLmluYworCisJQSBsaXN0IG9mIGFkZGl0aW9uYWwgc29mdHdhcmUgcGFja2FnZXMgaW5jbHVkZWQgaW4gdGhlIFRDSy4KKworLSByZXEtc29mdHdhcmUuaW5jCisKKwlBIGxpc3Qgb2Ygc29mdHdhcmUgcmVxdWlyZWQgaW4gYWRkaXRpb24gdG8gdGhlIFRDSyBhbmQgQ0kuCisKKy0gaW5zdGFsbC1zZXJ2ZXIuaW5jCisKKwlTdGVwcyB0byBpbnN0YWxsIHRoZSBKYWthcnRhIEVFIENJLCBpZiBuZWVkZWQuCisJRm9yIHN0YW5kYWxvbmUgdGVjaG5vbG9naWVzLCBubyBzZXJ2ZXIgbWF5IGJlIHJlcXVpcmVkLAorCWFuZCB0aGlzIGZpbGUgY2FuIGJlIGVtcHR5LgorCVRoaXMgaXMgdXNlZCBpbiBpbnN0YWxsLmFkb2MgaW4gc2VjdGlvbiAzLjIuCisKKy0gaW5zdGFsbC1zZXJ2ZXItdmkuaW5jCisKKwlTdGVwcyB0byBpbnN0YWxsIGEgVmVuZG9yJ3Mgd2ViIHNlcnZlciwgaWYgbmVlZGVkLgorCUZvciBzdGFuZGFsb25lIHRlY2hub2xvZ2llcywgbm8gd2ViIHNlcnZlciBtYXkgYmUgcmVxdWlyZWQsCisJYW5kIHRoaXMgZmlsZSBjYW4gYmUgZW1wdHkuCisJVGhpcyBpcyB1c2VkIGluIGluc3RhbGwuYWRvYyBpbiBzZWN0aW9uIDMuMi4KKworLSB1c2luZy1leGFtcGxlcy5pbmMKKworCUNvbW1hbmQgbGluZSBleGFtcGxlcyBzaG93aW5nIGhvdyB0byBydW4gdGhlIFRDSy4KKworLSB1c2luZy5pbmMKKworCU9wdGlvbmFsIGFkZGl0aW9uYWwgaW5zdHJ1Y3Rpb25zIGZvciBydW5uaW5nIHRoZSBUQ0suCisKKy0gZGVidWctdGlwcy5pbmMKKworCVRlY2hub2xvZ3ktc3BlY2lmaWMgdHJvdWJsZXNob290aW5nIHRpcHMgZm9yIENoYXB0ZXIgNi4KKwlJZiB0aGlzIGlzbid0IG5lZWRlZCwgaXQgY2FuIGJlIGFuIGVtcHR5IGZpbGUsIGJ1dCB0b2MuYWRvYworCXdpbGwgbmVlZCB0byBiZSBmaXhlZC4KKworLSByZWJ1aWxkLmluYworCisJU3BlY2lhbCBpbnN0cnVjdGlvbnMgZm9yIHJlYnVpbGRpbmcgdGhlIFdBUiBmaWxlcyB1c2VkIGJ5IHNvbWUgVENLcy4KKwlJZiBuZWVkZWQsIGN1c3RvbWl6ZSBpdCBhcHByb3ByaWF0ZWx5IGFuZCBkZWZpbmUgdGhlICJyZWJ1aWxkIgorCWF0dHJpYnV0ZSBpbiBhdHRyaWJ1dGVzLmNvbmYuCisKKy0gdGl0bGUuaW5jCisJQWRkIGFjcm9ueW0gcmVmZXJlbmNlcyBhcyByZXF1aXJlZCBkbyBkaXN0aW5ndWlzaCBiZXR3ZWVuIGxlZ2FjeSBhbmQgCisJY3VycmVudCBBUElzLgorCitOb3RlIHRoYXQgdGhpcyB0ZW1wbGF0ZSBpcyBOT1Qgc3VmZmljaWVudCBmb3IgdGhlIEpha2FydGEgRUUgcGxhdGZvcm0KK29yIEpha2FydGEgRUUgV2ViIFByb2ZpbGUuCmRpZmYgLS1naXQgYS90Y2svZG9jcy91c2VyZ3VpZGUvc3JjL21haW4vamJha2UvY29udGVudC9hdHRyaWJ1dGVzLmNvbmYgYi90Y2svZG9jcy91c2VyZ3VpZGUvc3JjL21haW4vamJha2UvY29udGVudC9hdHRyaWJ1dGVzLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYxZjMzMwotLS0gL2Rldi9udWxsCisrKyBiL3Rjay9kb2NzL3VzZXJndWlkZS9zcmMvbWFpbi9qYmFrZS9jb250ZW50L2F0dHJpYnV0ZXMuY29uZgpAQCAtMCwwICsxLDM3IEBACis6VGVjaG5vbG9neUZ1bGxOYW1lOiBKYWthcnRhIEFubm90YXRpb25zCis6VGVjaG5vbG9neVNob3J0TmFtZTogQW5ub3RhdGlvbnMKKzpMZWdhY3lBY3JvbnltOiBDQUoKKzpUZWNobm9sb2d5VmVyc2lvbjogMy4wCis6VGVjaG5vbG9neVJJOiBKYWthcnRhIEFubm90YXRpb25zIDMuMAorOlJlbGVhc2VEYXRlOiBGZWJydWFyeSAyMDI0Cis6Q29weXJpZ2h0RGF0ZXM6IDIwMTgsIDIwMjQKKzpUZWNobm9sb2d5UklVUkw6IGh0dHBzOi8vcHJvamVjdHMuZWNsaXBzZS5vcmcvcHJvamVjdHMvZWU0ai5jYQorOlNwZWNpZmljYXRpb25VUkw6IGh0dHBzOi8vamFrYXJ0YS5lZS9zcGVjaWZpY2F0aW9ucy9hbm5vdGF0aW9ucy8zLjAvCis6VENLSW5xdWlyeUxpc3Q6IG1haWx0bzpjYS1kZXZAZWNsaXBzZS5vcmdbY2EtZGV2QGVjbGlwc2Uub3JnXQorOlNwZWNpZmljYXRpb25JbnF1aXJ5TGlzdDogbWFpbHRvOmNhLWRldkBlY2xpcHNlLm9yZ1tjYS1kZXZAZWNsaXBzZS5vcmddCis6dGVjaElEOiBBbm5vdGF0aW9ucworLy8gRGVmaW5lIHRoaXMgYXR0cmlidXRlICh1bmNvbW1lbnQgaXQpIGlmIHRoZSBUQ0sgaW5jbHVkZXMgbm8gQVBJIHRlc3RzLiAgKFJhcmUuKQorLy8gOm5vLWFwaS10ZXN0czoKKy8vIERlZmluZSB0aGlzIGF0dHJpYnV0ZSAodW5jb21tZW50IGl0KSBpZiB0aGUgVENLIGluY2x1ZGVzIGVuZC10by1lbmQgdGVzdHMuCisvLyA6ZW5kLXRvLWVuZC10ZXN0czoKKy8vIERlZmluZSB0aGlzIGF0dHJpYnV0ZSAodW5jb21tZW50IGl0KSBpZiBzdWJzZXRzIG9mIHRoZSBBUEkgYXJlIGFsbG93ZWQuCisvLyAoQ29tbW9uIEFubm90YXRpb25zIG9ubHkpCisvLyA6c3Vic2V0LWFsbG93ZWQ6CisvLworLy8gVGhlIGVudmlyb25tZW50IHZhcmlhYmxlIHVzZWQgdG8gc3BlY2lmeSB0aGUgaG9tZSBkaXJlY3RvcnkKKy8vIGZvciB0aGUgdGVjaG5vbG9neS4gIFVzZWQgaW4gY29uZmlnLmluYy4KKzpUZWNobm9sb2d5SG9tZUVudjogQ0FKX0hPTUUKKy8vIEphdmEgU0UgdmVyc2lvbiByZXF1aXJlZC4KKzpTRXZlcnNpb246IDE3KworOk1hdmVuVmVyc2lvbjogMy42LjMrCis6SmFrYXJ0YUVFVmVyc2lvbjogMTEKKzpKYXZhVGVzdFZlcnNpb246IDUuMAorCis6ZXhjbHVkZUxpc3RGaWxlTmFtZTogVENLLUV4Y2x1ZGUtTGlzdC50eHQKKzpUQ0tQYWNrYWdlTmFtZTogamFrYXJ0YS1hbm5vdGF0aW9ucy10Y2steC55LnouemlwCisvLyBEaXJlY3RvcnkgbmFtZXMgdXNlZCBpbiBleGFtcGxlcyBpbiB1c2luZy5hZG9jLgorOnNpZ1Rlc3REaXJlY3RvcnlFeGFtcGxlOiBlZS5qYWthcnRhLnRjay5hbm5vdGF0aW9ucy5zaWduYXR1cmV0ZXN0Cis6c2luZ2xlVGVzdERpcmVjdG9yeUV4YW1wbGU6IGVlLmpha2FydGEudGNrLmFubm90YXRpb25zLnNpZ25hdHVyZXRlc3QKKzpzdWJzZXRUZXN0RGlyZWN0b3J5RXhhbXBsZTogZWUuamFrYXJ0YS50Y2suYW5ub3RhdGlvbnMuc2lnbmF0dXJldGVzdAorLy8gRGVmaW5lIHRoaXMgYXR0cmlidXRlICh1bmNvbW1lbnQgaXQpIGlmIHRoZSBUQ0sgbmVlZHMgdGhlIHJlYnVpbGQgYXBwZW5kaXguCisvLyA6cmVidWlsZDoKZGlmZiAtLWdpdCBhL3Rjay9kb2NzL3VzZXJndWlkZS9zcmMvbWFpbi9qYmFrZS9jb250ZW50L2NvbmZpZy5hZG9jIGIvdGNrL2RvY3MvdXNlcmd1aWRlL3NyYy9tYWluL2piYWtlL2NvbnRlbnQvY29uZmlnLmFkb2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y0M2EwMwotLS0gL2Rldi9udWxsCisrKyBiL3Rjay9kb2NzL3VzZXJndWlkZS9zcmMvbWFpbi9qYmFrZS9jb250ZW50L2NvbmZpZy5hZG9jCkBAIC0wLDAgKzEsNDcgQEAKK3R5cGU9cGFnZQorc3RhdHVzPXB1Ymxpc2hlZAordGl0bGU9U2V0dXAgYW5kIENvbmZpZ3VyYXRpb24KK25leHQ9dXNpbmcuaHRtbAorcHJldj1pbnN0YWxsLmh0bWwKK35+fn5+fgoraW5jbHVkZTo6YXR0cmlidXRlcy5jb25mW10KK1NldHVwIGFuZCBDb25maWd1cmF0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PQorCitbW0dCRlZWXV0KKworCisKK1tbc2V0dXAtYW5kLWNvbmZpZ3VyYXRpb25dXQorNCBTZXR1cCBhbmQgQ29uZmlndXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK1tOT1RFXQorPT09PQorVGhlIEpha2FydGEgRUUgU3BlY2lmaWNhdGlvbiBwcm9jZXNzIHByb3ZpZGVzIGZvciBhbnkgbnVtYmVyIG9mIGNvbXBhdGlibGUgaW1wbGVtZW50YXRpb25zLgorQXMgYWRkaXRpb25hbCBpbXBsZW1lbnRhdGlvbnMgYmVjb21lIGF2YWlsYWJsZSwgcmVmZXIgdG8gcHJvamVjdCBvciBwcm9kdWN0IGRvY3VtZW50YXRpb24gZnJvbQordGhvc2UgdmVuZG9ycyBmb3Igc3BlY2lmaWMgVENLIHNldHVwIGFuZCBvcGVyYXRpb25hbCBndWlkYW5jZS4KKworPT09PQorCitUaGlzIGNoYXB0ZXIgZGVzY3JpYmVzIGhvdyB0byBzZXQgdXAgdGhlIHtUZWNobm9sb2d5U2hvcnROYW1lfSBUQ0suCitCZWZvcmUgcHJvY2VlZGluZyB3aXRoIHRoZSBpbnN0cnVjdGlvbnMgaW4KK3RoaXMgY2hhcHRlciwgYmUgc3VyZSB0byBpbnN0YWxsIGFsbCByZXF1aXJlZCBzb2Z0d2FyZSwgYXMgZGVzY3JpYmVkIGluCitsaW5rOmluc3RhbGwuaHRtbCNHQkZUUFtDaGFwdGVyIDMsICJJbnN0YWxsYXRpb24uIl0KKworQWZ0ZXIgY29tcGxldGluZyB0aGUgaW5zdHJ1Y3Rpb25zIGluIHRoaXMgY2hhcHRlciwgcHJvY2VlZCB0bworbGluazp1c2luZy5odG1sI0dCRldPW0NoYXB0ZXIgNSwgIkV4ZWN1dGluZyBUZXN0cywiXSBmb3IgaW5zdHJ1Y3Rpb25zIG9uCitydW5uaW5nIHRoZSB7VGVjaG5vbG9neVNob3J0TmFtZX0gVENLLgorCitbTk9URV0KKz09PT0KK1RoZSB7VGVjaG5vbG9neVNob3J0TmFtZX0gVENLIGlzIG5vdCBkZXBlbmRlZCBvbiBhbnkgcGFydGljdWxhciBidWlsZCAKK3Rvb2wgdG8gcnVuIHRoZSB0ZXN0cy4gSXQgd2lsbCBiZSBjb252ZW5pZW50IGFuZCBhZHZpc2FibGUgdG8gY3JlYXRlIGEgCitBcGFjaGUgTWF2ZW4gcHJvamVjdCB0byBzZXR1cCBhbmQgcnVuIHRoZSBUQ0suCitUaGlzIGNoYXB0ZXIgd2lsbCBoZW5jZWZvcnRoIHVzZSBpbnN0cnVjdGlvbnMgYW5kIHN0ZXBzIHRvIHByb3ZpZGUgc2V0dXAgCit3aXRoIEFwYWNoZSBNYXZlbiBhcyBhIGJ1aWxkIHRvb2wuIAorPT09PQorCitpbmNsdWRlOjpjb25maWcuaW5jW10KKwpkaWZmIC0tZ2l0IGEvdGNrL2RvY3MvdXNlcmd1aWRlL3NyYy9tYWluL2piYWtlL2NvbnRlbnQvY29uZmlnLmluYyBiL3Rjay9kb2NzL3VzZXJndWlkZS9zcmMvbWFpbi9qYmFrZS9jb250ZW50L2NvbmZpZy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVlMzliMgotLS0gL2Rldi9udWxsCisrKyBiL3Rjay9kb2NzL3VzZXJndWlkZS9zcmMvbWFpbi9qYmFrZS9jb250ZW50L2NvbmZpZy5pbmMKQEAgLTAsMCArMSwxMzUgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCitOT1RFIFRPIFdSSVRFUlM6CitUaGUgZm9sbG93aW5nIHNlY3Rpb25zIHNob3VsZCBiZSBjdXN0b21pemVkIGZvciB0aGUgdGVjaG5vbG9neS4KK1RoaXMgdGV4dCB3YXMgb3JpZ2luYWxseSBmcm9tIHRoZSBKQVgtUlMgVENLLiAgTW9zdCByZWZlcmVuY2VzCit0byBKQVgtUlMgaGF2ZSBiZWVuIHBhcmFtZXRlcml6ZWQgdG8gc2VydmUgYXMgYSBzaW1wbGUgc3RhcnRpbmcKK3BvaW50IGZvciBjdXN0b21pemF0aW9uLiAgVGhlcmUgYXJlIHN0aWxsIG1hbnkgZGV0YWlscyB0aGF0IHdpbGwKK25lZWQgdG8gYmUgY2hhbmdlZCBvciByZW1vdmVkLiAgVGhlIG1ham9yIHNlY3Rpb25zIDQuMSwgNC4yLCBhbmQKKzQuMyBzaG91bGQgYmUgcHJlc2VydmVkLiAgSWYgdGhlaXIgdGl0bGVzIGFyZSBjaGFuZ2VkLCB0aGUgbGlua3MKK2F0IHRoZSB0b3Agb2YgY29uZmlnLmFkb2Mgd2lsbCBuZWVkIHRvIGJlIGNoYW5nZWQgYXMgd2VsbCBhcyB3ZWxsCithcyB0b2MuYWRvYy4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK1tbR0JGVlVdXVtbY29uZmlndXJpbmcteW91ci1lbnZpcm9ubWVudC10by1ydW4tdGhlLXRjay1hZ2FpbnN0LXRoZS1yZWZlcmVuY2UtaW1wbGVtZW50YXRpb25dXQorCis0LjEgQ29uZmlndXJpbmcgWW91ciBFbnZpcm9ubWVudCB0byBSdW4gdGhlIFRDSyBBZ2FpbnN0IGEgQ29tcGF0aWJsZSBJbXBsZW1lbnRhdGlvbgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworQWZ0ZXIgY29uZmlndXJpbmcgeW91ciBlbnZpcm9ubWVudCBhcyBkZXNjcmliZWQgaW4gdGhpcyBzZWN0aW9uLAorY29udGludWUgd2l0aCB0aGUgaW5zdHJ1Y3Rpb25zIGluIGxpbms6dXNpbmcuaHRtbCNHQkZXT1tDaGFwdGVyIDUsICJFeGVjdXRpbmcgVGVzdHMuIl0KKworCitbTk9URV0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0luIHRoZXNlIGluc3RydWN0aW9ucywgdmFyaWFibGVzIGluIGFuZ2xlIGJyYWNrZXRzIG5lZWQgdG8gYmUgZXhwYW5kZWQKK2ZvciBlYWNoIHBsYXRmb3JtLiBGb3IgZXhhbXBsZSwgYDxKQVZBX0hPTUU+YCBiZWNvbWVzIGAkSkFWQV9IT01FYCBvbgorU29sYXJpcy9MaW51eCBhbmQgYCVKQVZBX0hPTUUlYCBvbiBXaW5kb3dzLiBJbiBhZGRpdGlvbiwgdGhlIGZvcndhcmQKK3NsYXNoZXMgKGAvYCkgdXNlZCBpbiBhbGwgb2YgdGhlIGV4YW1wbGVzIG5lZWQgdG8gYmUgcmVwbGFjZWQgd2l0aAorYmFja3NsYXNoZXMgKGBcYCkgZm9yIFdpbmRvd3MuIEZpbmFsbHksIGJlIHN1cmUgdG8gdXNlIHRoZSBhcHByb3ByaWF0ZQorc2VwYXJhdG9yIGZvciB5b3VyIG9wZXJhdGluZyBzeXN0ZW0gd2hlbiBzcGVjaWZ5aW5nIG11bHRpcGxlIHBhdGgKK2VudHJpZXMgKGA7YCBvbiBXaW5kb3dzLCBgOmAgb24gVU5JWC9MaW51eCkuCisKK09uIFdpbmRvd3MsIHlvdSBtdXN0IGVzY2FwZSBhbnkgYmFja3NsYXNoZXMgd2l0aCBhbiBleHRyYSBiYWNrc2xhc2ggaW4KK3BhdGggc2VwYXJhdG9ycyB1c2VkIGluIGFueSBvZiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMsIG9yIHVzZSBmb3J3YXJkCitzbGFzaGVzIGFzIGEgcGF0aCBzZXBhcmF0b3IgaW5zdGVhZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCisxLiAgU2V0IHRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIGluIHlvdXIgc2hlbGwgZW52aXJvbm1lbnQ6CisgIGEuICBgSkFWQV9IT01FYCB0byB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIEphdmEgU0Uge1NFdmVyc2lvbn0gaXMgaW5zdGFsbGVkCisgIGIuICBgTTJfSE9NRWAgdG8gdGhlIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgQXBhY2hlIE1hdmVuIGJ1aWxkIHRvb2wgaXMgaW5zdGFsbGVkLgorICBjLiAgYFBBVEhgIHRvIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBkaXJlY3RvcmllczogYEpBVkFfSE9NRS9iaW5gLAorICBhbmQgYE0yX0hPTUUvYmluYAorMi4gIFNldCB0aGUgZm9sbG93aW5nIFN5c3RlbSBwcm9wZXJ0aWVzOgorICBhLiAgU2V0IHRoZSBgc2lnVGVzdENsYXNzUGF0aGAKKyAgcHJvcGVydHkgdG8gcG9pbnQgdG8gYSBKYWthcnRhIEFubm90YXRpb25zIENJIGNsYXNzZXMvamFycyB0aGF0IGNvbnRhaW4gdGhlCisgIGFubm90YXRpb25zIGJlaW5nIHN1cHBvcnRlZCBpbiBTdGVwIGxpbms6I0JBQkpISEFKW2NdLCBiZWxvdy4KKyAgYi4gU2V0IHRoZSBgamltYWdlLmRpcmAgcHJvcGVydHkgdG8gdGhlIGxvY2F0aW9uIHdoZXJlIEpESyBtb2R1bGVzIHdpbGwgYmUgZXh0cmFjdGVkLgorICBjLiAgW1tCQUJKSEhBSl1dIERlcGVuZGluZyBvbiB0aGUgYW5ub3RhdGlvbnMgdGhhdCBhcmUgc3VwcG9ydGVkIG9yIHVuc3VwcG9ydGVkIGluIHlvdXIKKyAgSmFrYXJ0YSBBbm5vdGF0aW9ucyBpbXBsZW1lbnRhdGlvbiwgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzCisgIHNob3VsZCBiZSBzZXQgdG8gYHRydWVgIG9yIGBmYWxzZWAgcmVzcGVjdGl2ZWx5LiArCisgIEJ5IGRlZmF1bHQsIGFsbCBvZiB0aGVzZSBhbm5vdGF0aW9ucyBhcmUgc3VwcG9ydGVkIGluIHRoZSBKYWthcnRhIEFubm90YXRpb25zIENJLiArCitbc291cmNlLG9hY19ub193YXJuXQorLS0tLQorI2pha2FydGEuYW5ub3RhdGlvbi5HZW5lcmF0ZWQKK2NhLnNpZy5nZW5lcmF0ZWQ9dHJ1ZQorCisjamFrYXJ0YS5hbm5vdGF0aW9uLlBvc3RDb25zdHJ1Y3QKK2NhLnNpZy5wb3N0Y29uc3RydWN0PXRydWUKKworI2pha2FydGEuYW5ub3RhdGlvbi5QcmVEZXN0cm95CitjYS5zaWcucHJlZGVzdHJveT10cnVlCisKKyNqYWthcnRhLmFubm90YXRpb24uUHJpb3JpdHljYS5zaWcucHJpb3JpdHk9dHJ1ZQorCisjamFrYXJ0YS5hbm5vdGF0aW9uLlJlc291cmNlCitjYS5zaWcucmVzb3VyY2U9dHJ1ZQorCisjamFrYXJ0YS5hbm5vdGF0aW9uLlJlc291cmNlcworY2Euc2lnLnJlc291cmNlcz10cnVlCisKKyNqYWthcnRhLmFubm90YXRpb24uc2VjdXJpdHkuRGVjbGFyZVJvbGVzCitjYS5zaWcuc2VjdXJpdHlkZWNsYXJlcm9sZXM9dHJ1ZQorCisjamFrYXJ0YS5hbm5vdGF0aW9uLnNlY3VyaXR5LkRlbnlBbGwKK2NhLnNpZy5zZWN1cml0eWRlbnlhbGw9dHJ1ZQorCisjamFrYXJ0YS5hbm5vdGF0aW9uLnNlY3VyaXR5LlBlcm1pdEFsbAorY2Euc2lnLnNlY3VyaXR5cGVybWl0YWxsPXRydWUKKworI2pha2FydGEuYW5ub3RhdGlvbi5zZWN1cml0eS5Sb2xlc0FsbG93ZWQKK2NhLnNpZy5zZWN1cml0eXJvbGVzYWxsb3dlZD10cnVlCisKKyNqYWthcnRhLmFubm90YXRpb24uc2VjdXJpdHkuUnVuQXMKK2NhLnNpZy5zZWN1cml0eXJ1bmFzPXRydWUKKworI2pha2FydGEuYW5ub3RhdGlvbi5zcWwuRGF0YVNvdXJjZURlZmluaXRpb24KK2NhLnNpZy5zcWxkYXRhc291cmNlZGVmaW5pdGlvbj10cnVlCisKKyNqYWthcnRhLmFubm90YXRpb24uc3FsLkRhdGFTb3VyY2VEZWZpbml0aW9ucworY2Euc2lnLnNxbGRhdGFzb3VyY2VkZWZpbml0aW9ucz10cnVlCistLS0tCiszLiBTZXQgdGhlIGJlbG93IGphcnMgdG8gdGhlIGNsYXNzcGF0aAorICBhLiBKQVIgZmlsZSBmb3IgdGhlIHtUZWNobm9sb2d5U2hvcnROYW1lfSB7VGVjaG5vbG9neVZlcnNpb259IEFQSS4gKworICBlZy4gIGAke3dlYi5ob21lfS9tb2R1bGVzL2pha2FydGEuYW5ub3RhdGlvbnMtYXBpLmphcmAuCisgIGIuIEpVbml0IDUgamFycyAoNS4xMC4yKykKKyAgTWF2ZW4gY29yZGluYXRlcyA6CisrCitbc291cmNlLG9hY19ub193YXJuXQorLS0tLQorICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgIDxncm91cElkPm9yZy5qdW5pdDwvZ3JvdXBJZD4KKyAgICAgICAgICA8YXJ0aWZhY3RJZD5qdW5pdC1ib208L2FydGlmYWN0SWQ+CisgICAgICAgICAgPHZlcnNpb24+NS4xMC4yPC92ZXJzaW9uPgorICAgICAgICAgIDx0eXBlPnBvbTwvdHlwZT4KKyAgICAgICAgICA8c2NvcGU+aW1wb3J0PC9zY29wZT4KKyAgICAgICA8L2RlcGVuZGVuY3k+CistLS0tCisrCisgYy4gc2lndGVzdC1tYXZlbi1wbHVnaW4gKDIuMikgdG8gcnVuIHRoZSBzaWduYXR1cmUgdGVzdHMuCisgIE1hdmVuIGNvcmRpbmF0ZXMgOgorKworW3NvdXJjZSxvYWNfbm9fd2Fybl0KKy0tLS0KKyAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+amFrYXJ0YS50Y2s8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zaWd0ZXN0LW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMjwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorLS0tLQorCitbW0dDTEhVXV1bW2NvbmZpZ3VyaW5nLXlvdXItZW52aXJvbm1lbnQtdG8tcmVwYWNrYWdlLWFuZC1ydW4tdGhlLXRjay1hZ2FpbnN0LXRoZS12ZW5kb3ItaW1wbGVtZW50YXRpb25dXQorCis0LjIgQ29uZmlndXJpbmcgWW91ciBFbnZpcm9ubWVudCB0byBSZXBhY2thZ2UgYW5kIFJ1biB0aGUgVENLIEFnYWluc3QgdGhlIFZlbmRvciBJbXBsZW1lbnRhdGlvbgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhpcyBpcyBub3QgcmVxdWlyZWQgZm9yIHRoZSBKYWthcnRhIEFubm90YXRpb25zIFRDSy4KKworW1tHSEdER11dW1twdWJsaXNoaW5nLXRoZS10ZXN0LWFwcGxpY2F0aW9uc11dCisKKzQuMyBQdWJsaXNoaW5nIHRoZSBUZXN0IEFwcGxpY2F0aW9ucworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoaXMgaXMgbm90IHJlcXVpcmVkIGZvciB0aGUgSmFrYXJ0YSBBbm5vdGF0aW9ucyBUQ0suCmRpZmYgLS1naXQgYS90Y2svZG9jcy91c2VyZ3VpZGUvc3JjL21haW4vamJha2UvY29udGVudC9kZWJ1Zy10aXBzLmluYyBiL3Rjay9kb2NzL3VzZXJndWlkZS9zcmMvbWFpbi9qYmFrZS9jb250ZW50L2RlYnVnLXRpcHMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxM2UyYzAKLS0tIC9kZXYvbnVsbAorKysgYi90Y2svZG9jcy91c2VyZ3VpZGUvc3JjL21haW4vamJha2UvY29udGVudC9kZWJ1Zy10aXBzLmluYwpAQCAtMCwwICsxLDE1IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworTk9URSBUTyBXUklURVJTOgorVGhlIGZvbGxvd2luZyBzZWN0aW9ucyBzaG91bGQgYmUgY3VzdG9taXplZCBmb3IgdGhlIHRlY2hub2xvZ3kuCitUaGlzIHRleHQgd2FzIG9yaWdpbmFsbHkgZnJvbSB0aGUgSkFDQyBUQ0suICBTb21lIHJlZmVyZW5jZXMKK3RvIEpBQ0MgaGF2ZSBiZWVuIHBhcmFtZXRlcml6ZWQgdG8gc2VydmUgYXMgYSBzaW1wbGUgc3RhcnRpbmcKK3BvaW50IGZvciBjdXN0b21pemF0aW9uLiAgVGhlcmUgYXJlIHN0aWxsIG1hbnkgZGV0YWlscyB0aGF0IHdpbGwKK25lZWQgdG8gYmUgY2hhbmdlZCBvciByZW1vdmVkLgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworW1tHQkZIQV1dW1t0cm91Ymxlc2hvb3RpbmctdGlwc11dCisKKzYuNyBUcm91Ymxlc2hvb3RpbmcgVGlwcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK05vbmUgZm9yIHRoZSBKYWthcnRhIEFubm90YXRpb25zIFRDSy4KZGlmZiAtLWdpdCBhL3Rjay9kb2NzL3VzZXJndWlkZS9zcmMvbWFpbi9qYmFrZS9jb250ZW50L2RlYnVnLmFkb2MgYi90Y2svZG9jcy91c2VyZ3VpZGUvc3JjL21haW4vamJha2UvY29udGVudC9kZWJ1Zy5hZG9jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2MDFhYWIKLS0tIC9kZXYvbnVsbAorKysgYi90Y2svZG9jcy91c2VyZ3VpZGUvc3JjL21haW4vamJha2UvY29udGVudC9kZWJ1Zy5hZG9jCkBAIC0wLDAgKzEsNzIgQEAKK3R5cGU9cGFnZQorc3RhdHVzPXB1Ymxpc2hlZAordGl0bGU9RGVidWdnaW5nIFRlc3QgUHJvYmxlbXMKK25leHQ9ZmFxLmh0bWwKK3ByZXY9dXNpbmcuaHRtbAorfn5+fn5+CitpbmNsdWRlOjphdHRyaWJ1dGVzLmNvbmZbXQorRGVidWdnaW5nIFRlc3QgUHJvYmxlbXMKKz09PT09PT09PT09PT09PT09PT09PT09CisKK1tbR0JGVVZdXQorCisKK1tbZGVidWdnaW5nLXRlc3QtcHJvYmxlbXNdXQorNiBEZWJ1Z2dpbmcgVGVzdCBQcm9ibGVtcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVyZSBhcmUgYSBudW1iZXIgb2YgcmVhc29ucyB0aGF0IHRlc3RzIGNhbiBmYWlsIHRvIGV4ZWN1dGUgcHJvcGVybHkuCitUaGlzIGNoYXB0ZXIgcHJvdmlkZXMgc29tZSBhcHByb2FjaGVzIGZvciBkZWFsaW5nIHdpdGggdGhlc2UgZmFpbHVyZXMuCisKKworVGhpcyBjaGFwdGVyIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgdG9waWNzOgorCisqIGxpbms6I0dCRllQW092ZXJ2aWV3XQorKiBsaW5rOiNHQkZWUFtUZXN0IEluZm9ybWF0aW9uXQorKiBsaW5rOiNHQkZZRltDb25maWd1cmF0aW9uIEZhaWx1cmVzXQorCitbW0dCRllQXV1bW292ZXJ2aWV3XV0KKworNi4xIE92ZXJ2aWV3Cit+fn5+fn5+fn5+fn4KKworVGhlIGdvYWwgb2YgYSB0ZXN0IHJ1biBpcyBmb3IgYWxsIHRlc3RzIGluIHRoZSB0ZXN0IHN1aXRlIHRoYXQgYXJlIG5vdAorZmlsdGVyZWQgb3V0IHRvIGhhdmUgcGFzc2luZyByZXN1bHRzLiBJZiB0aGUgcm9vdCB0ZXN0IHN1aXRlIGZvbGRlcgorY29udGFpbnMgdGVzdHMgd2l0aCBlcnJvcnMgb3IgZmFpbGluZyByZXN1bHRzLCB5b3UgbXVzdCB0cm91Ymxlc2hvb3QgYW5kCitjb3JyZWN0IHRoZSBjYXVzZSB0byBzYXRpc2ZhY3RvcmlseSBjb21wbGV0ZSB0aGUgdGVzdCBydW4uCisKKyogRXJyb3JzOiBUZXN0cyB3aXRoIGVycm9ycyBjb3VsZCBub3QgYmUgZXhlY3V0ZWQgYnkgdGhlIEpVbml0CitmcmFtZXdvcmsuIFRoZXNlIGVycm9ycyB1c3VhbGx5IG9jY3VyIGJlY2F1c2UgdGhlIHRlc3QgZW52aXJvbm1lbnQgaXMgbm90Citwcm9wZXJseSBjb25maWd1cmVkLgorKiBGYWlsdXJlczogVGVzdHMgdGhhdCBmYWlsIHdlcmUgZXhlY3V0ZWQgYnV0IGhhZCBmYWlsaW5nIHJlc3VsdHMuCisKKworRm9yIGV2ZXJ5IHRlc3QgcnVuLCB0aGUgSlVuaXQgZnJhbWV3b3JrIGNyZWF0ZXMgYSBzZXQgb2YgcmVwb3J0IGZpbGVzCitpbiB0aGUgdGFyZ2V0IGRpcmVjdG9yeS4KKworCitJZiBhIGxhcmdlIG51bWJlciBvZiB0ZXN0cyBmYWlsZWQsIHlvdSBzaG91bGQgcmVhZAorbGluazojR0JGWUZbQ29uZmlndXJhdGlvbiBGYWlsdXJlc10gdG8gc2VlIGlmIGEKK2NvbmZpZ3VyYXRpb24gaXNzdWUgaXMgdGhlIGNhdXNlIG9mIHRoZSBmYWlsdXJlcy4KKworCisKK1tbR0JGVlBdXVtbdGVzdC1pbmZvcm1hdGlvbl1dCisKKzYuMiBUZXN0IEluZm9ybWF0aW9uCit+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitJZiB5b3UgbmVlZCBtb3JlIGluZm9ybWF0aW9uIHRvIGlkZW50aWZ5IHRoZSBjYXVzZSBvZiB0aGUgZXJyb3Igb3IKK2ZhaWx1cmUsIHVzZSB0aGUgSlVuaXQgcmVwb3J0cyBnZW5lcmF0ZWQgYWZ0ZXIgcnVubmluZyB0aGUgdGVzdHMuCisKKworW1tHQkZZRl1dW1tjb25maWd1cmF0aW9uLWZhaWx1cmVzXV0KKworNi4zIENvbmZpZ3VyYXRpb24gRmFpbHVyZXMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0NvbmZpZ3VyYXRpb24gZmFpbHVyZXMgYXJlIGVhc2lseSByZWNvZ25pemVkIGJlY2F1c2UgbWFueSB0ZXN0cyBmYWlsIHRoZQorc2FtZSB3YXkuIFdoZW4gYWxsIHlvdXIgdGVzdHMgYmVnaW4gdG8gZmFpbCwgeW91IG1heSB3YW50IHRvIHN0b3AgdGhlCitydW4gaW1tZWRpYXRlbHkgYW5kIHN0YXJ0IHZpZXdpbmcgaW5kaXZpZHVhbCB0ZXN0IG91dHB1dC4KKworaW5jbHVkZTo6ZGVidWctdGlwcy5pbmNbXQpkaWZmIC0tZ2l0IGEvdGNrL2RvY3MvdXNlcmd1aWRlL3NyYy9tYWluL2piYWtlL2NvbnRlbnQvZGVmbnMuaW5jIGIvdGNrL2RvY3MvdXNlcmd1aWRlL3NyYy9tYWluL2piYWtlL2NvbnRlbnQvZGVmbnMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzOGRiMmQKLS0tIC9kZXYvbnVsbAorKysgYi90Y2svZG9jcy91c2VyZ3VpZGUvc3JjL21haW4vamJha2UvY29udGVudC9kZWZucy5pbmMKQEAgLTAsMCArMSw0NiBAQAorLy8gTk9URSBUTyBXUklURVJTOgorLy8gTW9zdCB0ZWNobm9sb2dpZXMgd2lsbCBvbmx5IG5lZWQgdGhlIGNvbXBhdGliaWxpdHkgcnVsZXMgaW4gcnVsZXMuYWRvYy4KKy8vIFNvbWUgdGVjaG5vbG9naWVzIHdpbGwgbmVlZCBhZGRpdGlvbmFsIGRlZmluaXRpb25zIHRvIGdvIHdpdGggYWRkaXRpb25hbAorLy8gcnVsZXMuICBJZiB0aGV5J3JlIG5lZWRlZCwgcmVtb3ZlIHRoZSBjb21tZW50IGNoYXJhY3RlcnMgYmVsb3cKKy8vIGFuZCB1cGRhdGUgdGhlIGRlZmluaXRpb25zIGFzIGFwcHJvcHJpYXRlLgorLy8KKy8vIFRoZSBmaXJzdCBibG9jayBiZWxvdyBpcyBhZGRpdGlvbmFsIGRlZmluaXRpb25zIG5lZWRlZCBieQorLy8gSmFrYXJ0YSBYTUwgV2ViIFNlcnZpY2VzLgorLy8KKy8vIFRoZSBzZWNvbmQgYmxvY2sgYmVsb3cgaXMgYWRkaXRpb25hbCBkZWZpbnRpb25zIG5lZWRlZCBieQorLy8gSmFrYXJ0YSBTZXJ2ZXIgUGFnZXMuCisvLworLy8gTk9URTogVGhpcyBzZXQgb2YgZXhhbXBsZXMgaXMgTk9UIGNvbXBsZXRlLCBidXQgc2hvdWxkIGJlLgorLy8KKy8vCisvLyBKYWthcnRhIFhNTCBXZWIgU2VydmljZXMKKy8vCisvLyB8RGV2ZWxvcG1lbnQgS2l0IHxBIHNvZnR3YXJlIHByb2R1Y3QgdGhhdCBpbXBsZW1lbnRzIG9yIGluY29ycG9yYXRlcyBhCisvLyBDb21waWxlciwgYSBTY2hlbWEgQ29tcGlsZXIsIGEgU2NoZW1hIEdlbmVyYXRvciwgYSBKYXZhLXRvLVdTREwgVG9vbCwgYQorLy8gV1NETC10by1KYXZhIFRvb2wsIGFuZC9vciBhbiBSTUkgQ29tcGlsZXIuCisvLworLy8gfEphdmEtdG8tV1NETCBPdXRwdXQgfE91dHB1dCBvZiBhIEphdmEtdG8tV1NETCBUb29sIHRoYXQgaXMgcmVxdWlyZWQgZm9yCisvLyBXZWIgc2VydmljZSBkZXBsb3ltZW50IGFuZCBpbnZvY2F0aW9uLgorLy8KKy8vIHxKYXZhLXRvLVdTREwgVG9vbCB8QSBzb2Z0d2FyZSBkZXZlbG9wbWVudCB0b29sIHRoYXQgaW1wbGVtZW50cyBvcgorLy8gaW5jb3Jwb3JhdGVzIGEgZnVuY3Rpb24gdGhhdCBnZW5lcmF0ZXMgd2ViIHNlcnZpY2UgZW5kcG9pbnQgZGVzY3JpcHRpb25zCisvLyBpbiBXU0RMIGFuZCBYTUwgc2NoZW1hIGZvcm1hdCBmcm9tIFNvdXJjZSBDb2RlIGFzIHNwZWNpZmllZCBieSB0aGUKKy8vIEpha2FydGEgWE1MIFdlYiBTZXJ2aWNlcyBTcGVjaWZpY2F0aW9uLgorLy8KKy8vIHxXU0RMLXRvLUphdmEgT3V0cHV0IHxPdXRwdXQgb2YgYSBXU0RMLXRvLUphdmEgdG9vbCB0aGF0IGlzIHJlcXVpcmVkIGZvcgorLy8gV2ViIHNlcnZpY2UgZGVwbG95bWVudCBhbmQgaW52b2NhdGlvbi4KKy8vCisvLyB8V1NETC10by1KYXZhIFRvb2wgfEEgc29mdHdhcmUgZGV2ZWxvcG1lbnQgdG9vbCB0aGF0IGltcGxlbWVudHMgb3IKKy8vIGluY29ycG9yYXRlcyBhIGZ1bmN0aW9uIHRoYXQgZ2VuZXJhdGVzIHdlYiBzZXJ2aWNlIGludGVyZmFjZXMgZm9yCisvLyBjbGllbnRzIGFuZCBlbmRwb2ludHMgZnJvbSBhIFdTREwgZGVzY3JpcHRpb24gYXMgc3BlY2lmaWVkIGJ5IHRoZQorLy8gSmFrYXJ0YSBYTUwgV2ViIFNlcnZpY2VzIFNwZWNpZmljYXRpb24uCisvLworLy8KKy8vIEpha2FydGEgU2VydmVyIFBhZ2VzCisvLworLy8gfEpha2FydGEgU2VydmVyIFBhZ2UgfEEgdGV4dC1iYXNlZCBkb2N1bWVudCB0aGF0IHVzZXMgSmFrYXJ0YSBTZXJ2ZXIKKy8vIFBhZ2VzIHRlY2hub2xvZ3kuCisvLworLy8gfEpha2FydGEgU2VydmVyIFBhZ2UgSW1wbGVtZW50YXRpb24gQ2xhc3MgfEEgcHJvZ3JhbSBjb25zdHJ1Y3RlZCBieQorLy8gdHJhbnNmb3JtaW5nIHRoZSBKYWthcnRhIFNlcnZlciBQYWdlIHRleHQgaW50byBhIEphdmEgbGFuZ3VhZ2UgcHJvZ3JhbQorLy8gdXNpbmcgdGhlIHRyYW5zZm9ybWF0aW9uIHJ1bGVzIGRlc2NyaWJlZCBpbiB0aGUgU3BlY2lmaWNhdGlvbnMuCmRpZmYgLS1naXQgYS90Y2svZG9jcy91c2VyZ3VpZGUvc3JjL21haW4vamJha2UvY29udGVudC9mYXEuYWRvYyBiL3Rjay9kb2NzL3VzZXJndWlkZS9zcmMvbWFpbi9qYmFrZS9jb250ZW50L2ZhcS5hZG9jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4NjNlZDUKLS0tIC9kZXYvbnVsbAorKysgYi90Y2svZG9jcy91c2VyZ3VpZGUvc3JjL21haW4vamJha2UvY29udGVudC9mYXEuYWRvYwpAQCAtMCwwICsxLDU0IEBACit0eXBlPXBhZ2UKK3N0YXR1cz1wdWJsaXNoZWQKK3RpdGxlPUFwcGVuZGl4IEE6IEZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb25zCituZXh0PXJlYnVpbGQuaHRtbAorcHJldj1kZWJ1Zy5odG1sCit+fn5+fn4KK2luY2x1ZGU6OmF0dHJpYnV0ZXMuY29uZltdCitBcHBlbmRpeCBBOiBGcmVxdWVudGx5IEFza2VkIFF1ZXN0aW9ucworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworW1tHQkZZRF1dCisKKworW1thLWZyZXF1ZW50bHktYXNrZWQtcXVlc3Rpb25zXV0KK0EgRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBhcHBlbmRpeCBjb250YWlucyB0aGUgZm9sbG93aW5nIHF1ZXN0aW9ucy4KKworKiBsaW5rOiNHQkZZUVtXaGVyZSBkbyBJIHN0YXJ0IHRvIGRlYnVnIGEgdGVzdCBmYWlsdXJlP10KKyogbGluazojR0JGWVJbSG93IGRvIEkgcmVzdGFydCBhIGNyYXNoZWQgdGVzdCBydW4/XQorKiBsaW5rOiNHQkZXVVtXaGF0IHdvdWxkIGNhdXNlIHRlc3RzIGJlIGFkZGVkIHRvIHRoZSBleGNsdWRlIGxpc3Q/XQorCitbW0dCRllRXV1bW2EuMS13aGVyZS1kby1pLXN0YXJ0LXRvLWRlYnVnLWEtdGVzdC1mYWlsdXJlXV0KKworQS4xIFdoZXJlIGRvIEkgc3RhcnQgdG8gZGVidWcgYSB0ZXN0IGZhaWx1cmU/Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworU2VlIGxpbms6ZGVidWcuaHRtbCNHQkZVVltDaGFwdGVyIDYsICJEZWJ1Z2dpbmcgVGVzdCBQcm9ibGVtcywiXSBmb3IgbW9yZQoraW5mb3JtYXRpb24uCisKK1tbR0JGWVJdXVtbYS4yLWhvdy1kby1pLXJlc3RhcnQtYS1jcmFzaGVkLXRlc3QtcnVuXV0KKworQS4yIEhvdyBkbyBJIHJlc3RhcnQgYSBjcmFzaGVkIHRlc3QgcnVuPworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitJZiB5b3UgbmVlZCB0byByZXN0YXJ0IGEgdGVzdCBydW4sIHlvdSBjYW4gZmlndXJlIG91dCB3aGljaCB0ZXN0IGNyYXNoZWQKK3RoZSB0ZXN0IHN1aXRlIGJ5IGxvb2tpbmcgYXQgdGhlIGxvZ3MuCisKK1tbR0JGV1VdXVtbYS4zLXdoYXQtd291bGQtY2F1c2UtdGVzdHMtYmUtYWRkZWQtdG8tdGhlLWV4Y2x1ZGUtbGlzdF1dCisKK0EuMyBXaGF0IHdvdWxkIGNhdXNlIHRlc3RzIGJlIGFkZGVkIHRvIHRoZSBleGNsdWRlIGxpc3Q/Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitUaGUgZXhjbHVkZSBmaWxlICgre2V4Y2x1ZGVMaXN0RmlsZU5hbWV9KykgY29udGFpbnMgYWxsIHRlc3RzIHRoYXQgYXJlIG5vdAorcmVxdWlyZWQgdG8gYmUgcnVuLiBUaGUgZmlsZSBpcyB1c2VkIG9ubHkgZm9yIGRvY3VtZW50YXRpb24gcHVycG9zZS4gVGhlIHRlc3RzIGFyZSBleGNsdWRlZCB1c2luZworQERpc2FibGVkIHRhZyBpbiBKVW5pdCB3aGVuIG5lY2Vzc2FyeS4gVGhlIGZvbGxvd2luZyBpcyBhIGxpc3Qgb2YgcmVhc29ucyBmb3IgYSB0ZXN0IHRvIGJlCitpbmNsdWRlZCBpbiB0aGUgRXhjbHVkZSBMaXN0OgorCisqIEFuIGVycm9yIGluIGEgQ29tcGF0aWJsZSBJbXBsZW1lbnRhdGlvbiB0aGF0IGRvZXMgbm90IGFsbG93IHRoZSB0ZXN0IHRvCitleGVjdXRlIHByb3Blcmx5IGhhcyBiZWVuIGRpc2NvdmVyZWQuCisqIEFuIGVycm9yIGluIHRoZSBzcGVjaWZpY2F0aW9uIHRoYXQgd2FzIHVzZWQgYXMgdGhlIGJhc2lzIG9mIHRoZSB0ZXN0CitoYXMgYmVlbiBkaXNjb3ZlcmVkLgorKiBBbiBlcnJvciBpbiB0aGUgdGVzdCBoYXMgYmVlbiBkaXNjb3ZlcmVkLgpkaWZmIC0tZ2l0IGEvdGNrL2RvY3MvdXNlcmd1aWRlL3NyYy9tYWluL2piYWtlL2NvbnRlbnQvaW5zdGFsbC1zZXJ2ZXItdmkuaW5jIGIvdGNrL2RvY3MvdXNlcmd1aWRlL3NyYy9tYWluL2piYWtlL2NvbnRlbnQvaW5zdGFsbC1zZXJ2ZXItdmkuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi90Y2svZG9jcy91c2VyZ3VpZGUvc3JjL21haW4vamJha2UvY29udGVudC9pbnN0YWxsLXNlcnZlci12aS5pbmMKZGlmZiAtLWdpdCBhL3Rjay9kb2NzL3VzZXJndWlkZS9zcmMvbWFpbi9qYmFrZS9jb250ZW50L2luc3RhbGwtc2VydmVyLmluYyBiL3Rjay9kb2NzL3VzZXJndWlkZS9zcmMvbWFpbi9qYmFrZS9jb250ZW50L2luc3RhbGwtc2VydmVyLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvdGNrL2RvY3MvdXNlcmd1aWRlL3NyYy9tYWluL2piYWtlL2NvbnRlbnQvaW5zdGFsbC1zZXJ2ZXIuaW5jCmRpZmYgLS1naXQgYS90Y2svZG9jcy91c2VyZ3VpZGUvc3JjL21haW4vamJha2UvY29udGVudC9pbnN0YWxsLmFkb2MgYi90Y2svZG9jcy91c2VyZ3VpZGUvc3JjL21haW4vamJha2UvY29udGVudC9pbnN0YWxsLmFkb2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg5NzQ1OQotLS0gL2Rldi9udWxsCisrKyBiL3Rjay9kb2NzL3VzZXJndWlkZS9zcmMvbWFpbi9qYmFrZS9jb250ZW50L2luc3RhbGwuYWRvYwpAQCAtMCwwICsxLDgxIEBACit0eXBlPXBhZ2UKK3N0YXR1cz1wdWJsaXNoZWQKK3RpdGxlPUluc3RhbGxhdGlvbgorbmV4dD1jb25maWcuaHRtbAorcHJldj1ydWxlcy5odG1sCit+fn5+fn4KK2luY2x1ZGU6OmF0dHJpYnV0ZXMuY29uZltdCitJbnN0YWxsYXRpb24KKz09PT09PT09PT09PQorCitbW0dCRlRQXV0KKworCitbW2luc3RhbGxhdGlvbl1dCiszIEluc3RhbGxhdGlvbgorLS0tLS0tLS0tLS0tLS0KKworVGhpcyBjaGFwdGVyIGV4cGxhaW5zIGhvdyB0byBpbnN0YWxsIHRoZSB7VGVjaG5vbG9neUZ1bGxOYW1lfSBUQ0sgc29mdHdhcmUuCisKK0FmdGVyIGluc3RhbGxpbmcgdGhlIHNvZnR3YXJlIGFjY29yZGluZyB0byB0aGUgaW5zdHJ1Y3Rpb25zIGluIHRoaXMKK2NoYXB0ZXIsIHByb2NlZWQgdG8gbGluazpjb25maWcuaHRtbCNHQkZWVltDaGFwdGVyIDQsICJTZXR1cCBhbmQKK0NvbmZpZ3VyYXRpb24sIl0gZm9yIGluc3RydWN0aW9ucyBvbiBjb25maWd1cmluZyB5b3VyIHRlc3QgZW52aXJvbm1lbnQuCisKK1tbR0JGVURdXVtbb2J0YWluaW5nLXRoZS1yZWZlcmVuY2UtaW1wbGVtZW50YXRpb25dXQorCiszLjEgT2J0YWluaW5nIGEgQ29tcGF0aWJsZSBJbXBsZW1lbnRhdGlvbgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworRWFjaCBjb21wYXRpYmxlIGltcGxlbWVudGF0aW9uIChDSSkgd2lsbCBwcm92aWRlIGluc3RydWN0aW9ucyBmb3Igb2J0YWluaW5nCit0aGVpciBpbXBsZW1lbnRhdGlvbi4KK3tUZWNobm9sb2d5Ukl9IGlzIGEgY29tcGF0aWJsZSBpbXBsZW1lbnRhdGlvbiB3aGljaCBtYXkgYmUgb2J0YWluZWQKK2Zyb20ge1RlY2hub2xvZ3lSSVVSTH0KKworW1tHQkZUU11dW1tpbnN0YWxsaW5nLXRoZS1zb2Z0d2FyZV1dCisKKzMuMiBJbnN0YWxsaW5nIHRoZSBTb2Z0d2FyZQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0JlZm9yZSB5b3UgY2FuIHJ1biB0aGUge1RlY2hub2xvZ3lTaG9ydE5hbWV9IFRDSyB0ZXN0cywgeW91IG11c3QKK2luc3RhbGwgYW5kIHNldCB1cCB0aGUgZm9sbG93aW5nIHNvZnR3YXJlIGNvbXBvbmVudHM6CisKK2luY2x1ZGU6OnJlcS1zb2Z0d2FyZS5pbmNbXQorKiBKYXZhIFNFIHtTRXZlcnNpb259CisqIEEgQ0kgZm9yIHtUZWNobm9sb2d5U2hvcnROYW1lfSB7VGVjaG5vbG9neVZlcnNpb259LCBvbmUgZXhhbXBsZSBpcyB7VGVjaG5vbG9neVJJfQorKiB7VGVjaG5vbG9neVNob3J0TmFtZX0gVENLIHZlcnNpb24ge1RlY2hub2xvZ3lWZXJzaW9ufSAKKyogVGhlIHtUZWNobm9sb2d5U2hvcnROYW1lfSB7VGVjaG5vbG9neVZlcnNpb259IFZlbmRvciBJbXBsZW1lbnRhdGlvbiAoVkkpCisqIEFueSBKdXBpdGVyIEFQSSBjb21wYXRpYmxlIHRlc3QgcnVubmVyIChlZy4gQXBhY2hlIE1hdmVuIHtNYXZlblZlcnNpb259KQorCitGb2xsb3cgdGhlc2Ugc3RlcHM6CisKKy4gIEluc3RhbGwgdGhlIEphdmEgU0Uge1NFdmVyc2lvbn0gc29mdHdhcmUsIGlmIGl0IGlzIG5vdCBhbHJlYWR5IGluc3RhbGxlZC4gKworRG93bmxvYWQgYW5kIGluc3RhbGwgdGhlIEphdmEgU0Uge1NFdmVyc2lvbn0gc29mdHdhcmUgZnJvbQoraHR0cDovL3d3dy5vcmFjbGUuY29tL3RlY2huZXR3b3JrL2phdmEvamF2YXNlL2Rvd25sb2Fkcy9pbmRleC5odG1sLgorUmVmZXIgdG8gdGhlIGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMgdGhhdCBhY2NvbXBhbnkgdGhlIHNvZnR3YXJlIGZvcgorYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KKworLiAgSW5zdGFsbCB0aGUgYnVpbGQgdG9vbCB0aGF0IHdpbGwgYmUgdXNlZCB0byBydW4gdGhlIFRDSywgaWYgaXQgaXMgbm90IGFscmVhZHkgaW5zdGFsbGVkLiArCitJdCB3aWxsIGJlIGNvbnZlbmllbnQgdG8gdXNlIEFwYWNoZSBNYXZlbiB7TWF2ZW5WZXJzaW9ufSBmb3IgcnVubmluZyB0aGUgdGVzdHMuIFRoZSB0ZXN0IGtpdCAKK2lzIG5vdCBkZXBlbmRlZCBvbiBNYXZlbiwgYW55IGJ1aWxkIHRvb2wgY29tcGF0aWJsZSB3aXRoIEp1cGl0ZXIgQVBJIGlzIHN1ZmZpdGllbnQuCisKKy4gIEluc3RhbGwgdGhlIHtUZWNobm9sb2d5U2hvcnROYW1lfSBUQ0sge1RlY2hub2xvZ3lWZXJzaW9ufSBzb2Z0d2FyZS4KKyAgYS4gIENvcHkgb3IgZG93bmxvYWQgdGhlIHtUZWNobm9sb2d5U2hvcnROYW1lfSBUQ0sgc29mdHdhcmUgdG8geW91cgorICAgICAgbG9jYWwgc3lzdGVtLiArCisgICAgICBZb3UgY2FuIG9idGFpbiB0aGUge1RlY2hub2xvZ3lTaG9ydE5hbWV9IFRDSyBzb2Z0d2FyZSBmcm9tIHRoZQorICAgICAgSmFrYXJ0YSBFRSBzaXRlIHtTcGVjaWZpY2F0aW9uVVJMfS4KKyAgYi4gIFVzZSB0aGUgYHVuemlwYCBjb21tYW5kIHRvIGV4dHJhY3QgdGhlIGJ1bmRsZSBpbiB0aGUgZGlyZWN0b3J5IG9mCisgICAgICB5b3VyIGNob2ljZTogKworICAgICAgK3VuemlwIHtUQ0tQYWNrYWdlTmFtZX0rICsKKyAgICAgIAoraW5jbHVkZTo6aW5zdGFsbC1zZXJ2ZXIuaW5jW10KKy4gIEluc3RhbGwgYSB7VGVjaG5vbG9neVNob3J0TmFtZX0ge1RlY2hub2xvZ3lWZXJzaW9ufSBDb21wYXRpYmxlCitJbXBsZW1lbnRhdGlvbi4gKworQSBDb21wYXRpYmxlIEltcGxlbWVudGF0aW9uIGlzIHVzZWQgdG8gdmFsaWRhdGUgeW91ciBpbml0aWFsCitjb25maWd1cmF0aW9uIGFuZCBzZXR1cCBvZiB0aGUge1RlY2hub2xvZ3lTaG9ydE5hbWV9IFRDSwore1RlY2hub2xvZ3lWZXJzaW9ufSB0ZXN0cywgd2hpY2ggYXJlIGV4cGxhaW5lZCBmdXJ0aGVyIGluCitsaW5rOmNvbmZpZy5odG1sI0dCRlZWW0NoYXB0ZXIgNCwgIlNldHVwIGFuZCBDb25maWd1cmF0aW9uLiJdICsKK1RoZSBDb21wYXRpYmxlIEltcGxlbWVudGF0aW9ucyBmb3Ige1RlY2hub2xvZ3lTaG9ydE5hbWV9IGFyZSBsaXN0ZWQgb24KK3RoZSBKYWthcnRhIEVFIFNwZWNpZmljYXRpb25zIHdlYiBzaXRlOiB7U3BlY2lmaWNhdGlvblVSTH0uCitpbmNsdWRlOjppbnN0YWxsLXNlcnZlci12aS5pbmNbXQorLiAgSW5zdGFsbCB0aGUge1RlY2hub2xvZ3lTaG9ydE5hbWV9IFZJIHRvIGJlIHRlc3RlZC4gKworRm9sbG93IHRoZSBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zIGZvciB0aGUgcGFydGljdWxhciBWSSB1bmRlciB0ZXN0LgpkaWZmIC0tZ2l0IGEvdGNrL2RvY3MvdXNlcmd1aWRlL3NyYy9tYWluL2piYWtlL2NvbnRlbnQvaW50cm8uYWRvYyBiL3Rjay9kb2NzL3VzZXJndWlkZS9zcmMvbWFpbi9qYmFrZS9jb250ZW50L2ludHJvLmFkb2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkyOWM0YwotLS0gL2Rldi9udWxsCisrKyBiL3Rjay9kb2NzL3VzZXJndWlkZS9zcmMvbWFpbi9qYmFrZS9jb250ZW50L2ludHJvLmFkb2MKQEAgLTAsMCArMSwzMDkgQEAKK3R5cGU9cGFnZQorc3RhdHVzPXB1Ymxpc2hlZAordGl0bGU9SW50cm9kdWN0aW9uCituZXh0PXJ1bGVzLmh0bWwKK3ByZXY9cHJlZmFjZS5odG1sCit+fn5+fn4KK2luY2x1ZGU6OmF0dHJpYnV0ZXMuY29uZltdCitJbnRyb2R1Y3Rpb24KKz09PT09PT09PT09PQorCitbW0dCRk9XXV0KKworCitbW2ludHJvZHVjdGlvbl1dCisxIEludHJvZHVjdGlvbgorLS0tLS0tLS0tLS0tLS0KKworVGhpcyBjaGFwdGVyIHByb3ZpZGVzIGFuIG92ZXJ2aWV3IG9mIHRoZSBwcmluY2lwbGVzIHRoYXQgYXBwbHkKK2dlbmVyYWxseSB0byBhbGwgVGVjaG5vbG9neSBDb21wYXRpYmlsaXR5IEtpdHMgKFRDS3MpIGFuZCBkZXNjcmliZXMgdGhlCit7VGVjaG5vbG9neUZ1bGxOYW1lfSBUQ0sgKHtUZWNobm9sb2d5U2hvcnROYW1lfSB7VGVjaG5vbG9neVZlcnNpb259IFRDSykuIAorSXQgYWxzbyBpbmNsdWRlcyBhIGhpZ2ggbGV2ZWwgbGlzdGluZworb2Ygd2hhdCBpcyBuZWVkZWQgdG8gZ2V0IHVwIGFuZCBydW5uaW5nIHdpdGggdGhlIHtUZWNobm9sb2d5U2hvcnROYW1lfQorVENLLgorCitUaGlzIGNoYXB0ZXIgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyB0b3BpY3M6CisKKyogbGluazojR0JGVEtbQ29tcGF0aWJpbGl0eSBUZXN0aW5nXQorKiBsaW5rOiNHQkZRUltBYm91dCB0aGUgVENLXQorKiBsaW5rOiNHQkZRV1tHZXR0aW5nIFN0YXJ0ZWQgV2l0aCB0aGUgVENLXQorCitbW0dCRlRLXV1bW2NvbXBhdGliaWxpdHktdGVzdGluZ11dCisKKzEuMSBDb21wYXRpYmlsaXR5IFRlc3RpbmcKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworQ29tcGF0aWJpbGl0eSB0ZXN0aW5nIGRpZmZlcnMgZnJvbSB0cmFkaXRpb25hbCBwcm9kdWN0IHRlc3RpbmcgaW4gYQorbnVtYmVyIG9mIHdheXMuIFRoZSBmb2N1cyBvZiBjb21wYXRpYmlsaXR5IHRlc3RpbmcgaXMgdG8gdGVzdCB0aG9zZQorZmVhdHVyZXMgYW5kIGFyZWFzIG9mIGFuIGltcGxlbWVudGF0aW9uIHRoYXQgYXJlIGxpa2VseSB0byBkaWZmZXIgYWNyb3NzCitvdGhlciBpbXBsZW1lbnRhdGlvbnMsIHN1Y2ggYXMgdGhvc2UgZmVhdHVyZXMgdGhhdDoKKworKiBSZWx5IG9uIGhhcmR3YXJlIG9yIG9wZXJhdGluZyBzeXN0ZW0tc3BlY2lmaWMgYmVoYXZpb3IKKyogQXJlIGRpZmZpY3VsdCB0byBwb3J0CisqIE1hc2sgb3IgYWJzdHJhY3QgaGFyZHdhcmUgb3Igb3BlcmF0aW5nIHN5c3RlbSBiZWhhdmlvcgorCitDb21wYXRpYmlsaXR5IHRlc3QgZGV2ZWxvcG1lbnQgZm9yIGEgZ2l2ZW4gZmVhdHVyZSByZWxpZXMgb24gYSBjb21wbGV0ZQorc3BlY2lmaWNhdGlvbiBhbmQgY29tcGF0aWJsZSBpbXBsZW1lbnRhdGlvbiAoQ0kpIGZvciB0aGF0IGZlYXR1cmUuCitDb21wYXRpYmlsaXR5IHRlc3RpbmcgaXMgbm90IHByaW1hcmlseSBjb25jZXJuZWQgd2l0aCByb2J1c3RuZXNzLAorcGVyZm9ybWFuY2UsIG5vciBlYXNlIG9mIHVzZS4KKworW1tHQkZRTl1dW1t3aHktY29tcGF0aWJpbGl0eS10ZXN0aW5nLWlzLWltcG9ydGFudF1dCisKKzEuMS4xIFdoeSBDb21wYXRpYmlsaXR5IFRlc3RpbmcgaXMgSW1wb3J0YW50CiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitKYWthcnRhIHBsYXRmb3JtIGNvbXBhdGliaWxpdHkgaXMgaW1wb3J0YW50IHRvIGRpZmZlcmVudCBncm91cHMgaW52b2x2ZWQKK3dpdGggSmFrYXJ0YSB0ZWNobm9sb2dpZXMgZm9yIGRpZmZlcmVudCByZWFzb25zOgorCisqIENvbXBhdGliaWxpdHkgdGVzdGluZyBlbnN1cmVzIHRoYXQgdGhlIEpha2FydGEgcGxhdGZvcm0gZG9lcyBub3QgYmVjb21lCitmcmFnbWVudGVkIGFzIGl0IGlzIHBvcnRlZCB0byBkaWZmZXJlbnQgb3BlcmF0aW5nIHN5c3RlbXMgYW5kIGhhcmR3YXJlCitlbnZpcm9ubWVudHMuCisqIENvbXBhdGliaWxpdHkgdGVzdGluZyBiZW5lZml0cyBkZXZlbG9wZXJzIHdvcmtpbmcgaW4gdGhlIEpha2FydGEKK3Byb2dyYW1taW5nIGxhbmd1YWdlLCBhbGxvd2luZyB0aGVtIHRvIHdyaXRlIGFwcGxpY2F0aW9ucyBvbmNlIGFuZCB0aGVuCit0byBkZXBsb3kgdGhlbSBhY3Jvc3MgaGV0ZXJvZ2VuZW91cyBjb21wdXRpbmcgZW52aXJvbm1lbnRzIHdpdGhvdXQKK3BvcnRpbmcuCisqIENvbXBhdGliaWxpdHkgdGVzdGluZyBhbGxvd3MgYXBwbGljYXRpb24gdXNlcnMgdG8gb2J0YWluIGFwcGxpY2F0aW9ucworZnJvbSBkaXNwYXJhdGUgc291cmNlcyBhbmQgZGVwbG95IHRoZW0gd2l0aCBjb25maWRlbmNlLgorKiBDb25mb3JtYW5jZSB0ZXN0aW5nIGJlbmVmaXRzIEpha2FydGEgcGxhdGZvcm0gaW1wbGVtZW50b3JzIGJ5IGVuc3VyaW5nIGEKK2xldmVsIHBsYXlpbmcgZmllbGQgZm9yIGFsbCBKYWthcnRhIHBsYXRmb3JtIHBvcnRzLgorCitbW0dCRlBSXV1bW3Rjay1jb21wYXRpYmlsaXR5LXJ1bGVzXV0KKworMS4xLjIgVENLIENvbXBhdGliaWxpdHkgUnVsZXMKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK0NvbXBhdGliaWxpdHkgY3JpdGVyaWEgZm9yIGFsbCB0ZWNobm9sb2d5IGltcGxlbWVudGF0aW9ucyBhcmUgZW1ib2RpZWQKK2luIHRoZSBUQ0sgQ29tcGF0aWJpbGl0eSBSdWxlcyB0aGF0IGFwcGx5IHRvIGEgc3BlY2lmaWVkIHRlY2hub2xvZ3kuCitFYWNoIFRDSyB0ZXN0cyBmb3IgYWRoZXJlbmNlIHRvIHRoZXNlIFJ1bGVzIGFzIGRlc2NyaWJlZCBpbgorbGluazpydWxlcy5odG1sI0dCRlNOW0NoYXB0ZXIgMiwgIlByb2NlZHVyZSBmb3IgQ2VydGlmaWNhdGlvbi4iXQorCitbW0dCRlBXXV1bW3Rjay1vdmVydmlld11dCisKKzEuMS4zIFRDSyBPdmVydmlldworXl5eXl5eXl5eXl5eXl5eXl5eCisKK0EgVENLIGlzIGEgc2V0IG9mIHRvb2xzIGFuZCB0ZXN0cyB1c2VkIHRvIHZlcmlmeSB0aGF0IGEgdmVuZG9yJ3MgY29tcGF0aWJsZQoraW1wbGVtZW50YXRpb24gb2YgYSBKYWthcnRhIEVFIHRlY2hub2xvZ3kgY29uZm9ybXMgdG8gdGhlIGFwcGxpY2FibGUKK3NwZWNpZmljYXRpb24uIEFsbCB0ZXN0cyBpbiB0aGUgVENLIGFyZSBiYXNlZCBvbiB0aGUgd3JpdHRlbgorc3BlY2lmaWNhdGlvbnMgZm9yIHRoZSBKYWthcnRhIEVFIHBsYXRmb3JtLiBBIFRDSyB0ZXN0cyBjb21wYXRpYmlsaXR5IG9mIGEKK3ZlbmRvcidzIGNvbXBhdGlibGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIHRlY2hub2xvZ3kgdG8gdGhlIGFwcGxpY2FibGUKK3NwZWNpZmljYXRpb24gb2YgdGhlIHRlY2hub2xvZ3kuIENvbXBhdGliaWxpdHkgdGVzdGluZyBpcyBhIG1lYW5zIG9mCitlbnN1cmluZyBjb3JyZWN0bmVzcywgY29tcGxldGVuZXNzLCBhbmQgY29uc2lzdGVuY3kgYWNyb3NzIGFsbAoraW1wbGVtZW50YXRpb25zIGRldmVsb3BlZCBieSB0ZWNobm9sb2d5IGxpY2Vuc2Vlcy4KKworVGhlIHNldCBvZiB0ZXN0cyBpbmNsdWRlZCB3aXRoIGVhY2ggVENLIGlzIGNhbGxlZCB0aGUgdGVzdCBzdWl0ZS4gTW9zdAordGVzdHMgaW4gYSBUQ0sncyB0ZXN0IHN1aXRlIGFyZSBzZWxmLWNoZWNraW5nLCBidXQgc29tZSB0ZXN0cyBtYXkKK3JlcXVpcmUgdGVzdGVyIGludGVyYWN0aW9uLiBNb3N0IHRlc3RzIHJldHVybiBlaXRoZXIgYSBQYXNzIG9yIEZhaWwKK3N0YXR1cy4gRm9yIGEgZ2l2ZW4gcGxhdGZvcm0gdG8gYmUgY2VydGlmaWVkLCBhbGwgb2YgdGhlIHJlcXVpcmVkIHRlc3RzCittdXN0IHBhc3MuIFRoZSBkZWZpbml0aW9uIG9mIHJlcXVpcmVkIHRlc3RzIG1heSBjaGFuZ2UgZnJvbSBwbGF0Zm9ybSB0bworcGxhdGZvcm0uCisKK1RoZSBkZWZpbml0aW9uIG9mIHJlcXVpcmVkIHRlc3RzIHdpbGwgY2hhbmdlIG92ZXIgdGltZS4gQmVmb3JlIHlvdXIKK2ZpbmFsIGNlcnRpZmljYXRpb24gdGVzdCBwYXNzLCBiZSBzdXJlIHRvIGRvd25sb2FkIHRoZSBsYXRlc3QgdmVyc2lvbgorb2YgdGhpcyBUQ0suCisKK1tbR0JGUEJdXVtbamF2YS1jb21tdW5pdHktcHJvY2Vzcy1qY3AtcHJvZ3JhbS1hbmQtY29tcGF0aWJpbGl0eS10ZXN0aW5nXV0KKworMS4xLjQgSmFrYXJ0YSBFRSBTcGVjaWZpY2F0aW9uIFByb2Nlc3MgKEpFU1ApIFByb2dyYW0gYW5kIENvbXBhdGliaWxpdHkgVGVzdGluZworXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitUaGUgSmFrYXJ0YSBFRSBTcGVjaWZpY2F0aW9uIFByb2Nlc3MgKEpFU1ApIHByb2dyYW0gaXMgdGhlIGZvcm1hbGl6YXRpb24gb2YgdGhlCitvcGVuIHByb2Nlc3MgdGhhdCBoYXMgYmVlbiB1c2VkIHNpbmNlIDIwMTkgdG8gZGV2ZWxvcCBhbmQgcmV2aXNlIEpha2FydGEgRUUKK3RlY2hub2xvZ3kgc3BlY2lmaWNhdGlvbnMgaW4gY29vcGVyYXRpb24gd2l0aCB0aGUgaW50ZXJuYXRpb25hbCBKYWthcnRhIEVFCitjb21tdW5pdHkuIFRoZSBKRVNQIHByb2dyYW0gc3BlY2lmaWVzIHRoYXQgdGhlIGZvbGxvd2luZyB0aHJlZSBtYWpvcgorY29tcG9uZW50cyBtdXN0IGJlIGluY2x1ZGVkIGFzIGRlbGl2ZXJhYmxlcyBpbiBhIGZpbmFsIEpha2FydGEgRUUgdGVjaG5vbG9neQorcmVsZWFzZSB1bmRlciB0aGUgZGlyZWN0aW9uIG9mIHRoZSByZXNwb25zaWJsZSBFeHBlcnQgR3JvdXA6CisKKyogVGVjaG5vbG9neSBTcGVjaWZpY2F0aW9uCisqIENvbXBhdGlibGUgSW1wbGVtZW50YXRpb24gKENJKQorKiBUZWNobm9sb2d5IENvbXBhdGliaWxpdHkgS2l0IChUQ0spCisKK0ZvciBmdXJ0aGVyIGluZm9ybWF0aW9uIGFib3V0IHRoZSBKRVNQIHByb2dyYW0sIGdvIHRvIEpha2FydGEgRUUgU3BlY2lmaWNhdGlvbgorUHJvY2VzcyBjb21tdW5pdHkgcGFnZSBodHRwczovL2pha2FydGEuZWUvc3BlY2lmaWNhdGlvbnMuCisKK1tbR0JGUVJdXVtbYWJvdXQtdGhlLXRja11dCisKKzEuMiBBYm91dCB0aGUgVENLCit+fn5+fn5+fn5+fn5+fn5+fgorCitUaGUge1RlY2hub2xvZ3lTaG9ydE5hbWV9IFRDSyB7VGVjaG5vbG9neVZlcnNpb259IGlzIGRlc2lnbmVkIGFzIGEKK3BvcnRhYmxlLCBjb25maWd1cmFibGUsIGF1dG9tYXRlZCB0ZXN0IHN1aXRlIGZvciB2ZXJpZnlpbmcgdGhlCitjb21wYXRpYmlsaXR5IG9mIGEgdmVuZG9yJ3MgaW1wbGVtZW50YXRpb24gb2YgdGhlCit7VGVjaG5vbG9neVNob3J0TmFtZX0ge1RlY2hub2xvZ3lWZXJzaW9ufSBTcGVjaWZpY2F0aW9uLgorCitbW0dCRlFWXV1bW3Rjay1zcGVjaWZpY2F0aW9ucy1hbmQtcmVxdWlyZW1lbnRzXV0KKworMS4yLjEgVENLIFNwZWNpZmljYXRpb25zIGFuZCBSZXF1aXJlbWVudHMKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK1RoaXMgc2VjdGlvbiBsaXN0cyB0aGUgYXBwbGljYWJsZSByZXF1aXJlbWVudHMgYW5kIHNwZWNpZmljYXRpb25zLgorCisqIFNwZWNpZmljYXRpb24gUmVxdWlyZW1lbnRzOiBTb2Z0d2FyZSByZXF1aXJlbWVudHMgZm9yIGEKK3tUZWNobm9sb2d5U2hvcnROYW1lfSBpbXBsZW1lbnRhdGlvbiBhcmUgZGVzY3JpYmVkIGluIGRldGFpbCBpbiB0aGUKK3tUZWNobm9sb2d5U2hvcnROYW1lfSB7VGVjaG5vbG9neVZlcnNpb259IFNwZWNpZmljYXRpb24uICBMaW5rcyB0byB0aGUKK3tUZWNobm9sb2d5U2hvcnROYW1lfSBzcGVjaWZpY2F0aW9uIGFuZCBvdGhlciBwcm9kdWN0IGluZm9ybWF0aW9uIGNhbgorYmUgZm91bmQgYXQge1NwZWNpZmljYXRpb25VUkx9LgorKiB7VGVjaG5vbG9neVNob3J0TmFtZX0gVmVyc2lvbjogVGhlIHtUZWNobm9sb2d5U2hvcnROYW1lfSB7VGVjaG5vbG9neVZlcnNpb259IFRDSworaXMgYmFzZWQgb24gdGhlIHtUZWNobm9sb2d5U2hvcnROYW1lfQorU3BlY2lmaWNhdGlvbiwgVmVyc2lvbiB7VGVjaG5vbG9neVZlcnNpb259LgorKiBDb21wYXRpYmxlIEltcGxlbWVudGF0aW9uOiBPbmUge1RlY2hub2xvZ3lTaG9ydE5hbWV9Cit7VGVjaG5vbG9neVZlcnNpb259IENvbXBhdGlibGUgSW1wbGVtZW50YXRpb24sIHtUZWNobm9sb2d5Ukl9IGlzCithdmFpbGFibGUgZnJvbSB0aGUgRWNsaXBzZSBFRTRKIHByb2plY3QKKyhodHRwczovL3Byb2plY3RzLmVjbGlwc2Uub3JnL3Byb2plY3RzL2VlNGopLiBTZWUgdGhlIENJIGRvY3VtZW50YXRpb24gcGFnZSBhdAore1RlY2hub2xvZ3lSSVVSTH0gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK1NlZSB0aGUge1RlY2hub2xvZ3lTaG9ydE5hbWV9IFRDSyBSZWxlYXNlIE5vdGVzIGZvciBtb3JlIHNwZWNpZmljCitpbmZvcm1hdGlvbiBhYm91dCBKYXZhIFNFIHZlcnNpb24gcmVxdWlyZW1lbnRzLCBzdXBwb3J0ZWQgcGxhdGZvcm1zLAorcmVzdHJpY3Rpb25zLCBhbmQgc28gb24uCisKK1tbR0JGU1FdXVtbdGNrLWNvbXBvbmVudHNdXQorCisxLjIuMiBUQ0sgQ29tcG9uZW50cworXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworVGhlIHtUZWNobm9sb2d5U2hvcnROYW1lfSBUQ0sge1RlY2hub2xvZ3lWZXJzaW9ufSBpbmNsdWRlcyB0aGUKK2ZvbGxvd2luZyBjb21wb25lbnRzOgorCisqIHtUZWNobm9sb2d5U2hvcnROYW1lfSBUQ0sgc2lnbmF0dXJlIHRlc3RzOyBjaGVjayB0aGF0IGFsbCBwdWJsaWMgQVBJcworYXJlIHN1cHBvcnRlZCBhbmQvb3IgZGVmaW5lZCBhcyBzcGVjaWZpZWQgaW4gdGhlIHtUZWNobm9sb2d5U2hvcnROYW1lfQorVmVyc2lvbiB7VGVjaG5vbG9neVZlcnNpb259IGltcGxlbWVudGF0aW9uIHVuZGVyIHRlc3QuCisqIElmIGFwcGxpY2FibGUsIGFuIGV4Y2x1ZGUgbGlzdCwgd2hpY2ggcHJvdmlkZXMgYSBsaXN0IG9mIHRlc3RzIHRoYXQgeW91cgoraW1wbGVtZW50YXRpb24gaXMgbm90IHJlcXVpcmVkIHRvIHBhc3MuCitpZm5kZWY6Om5vLWFwaS10ZXN0c1tdCisqIEFQSSB0ZXN0cyBmb3IgYWxsIG9mIHRoZSB7VGVjaG5vbG9neVNob3J0TmFtZX0gQVBJIGluIGFsbCByZWxhdGVkIHBhY2thZ2VzOgoraW5jbHVkZTo6cGFja2FnZXMuaW5jW10KK2VuZGlmOjpuby1hcGktdGVzdHNbXQoraWZkZWY6OmVuZC10by1lbmQtdGVzdHNbXQorKiBFbmQtdG8tZW5kIHRlc3RzIHRoYXQgZGVtb25zdHJhdGUgY29tcGxpYW5jZSB3aXRoIHRoZSB7VGVjaG5vbG9neUZ1bGxOYW1lfQorU3BlY2lmaWNhdGlvbi4KK2VuZGlmOjplbmQtdG8tZW5kLXRlc3RzW10KKworVGhlIHtUZWNobm9sb2d5U2hvcnROYW1lfSBUQ0sgdGVzdHMgcnVuIG9uIHRoZSBmb2xsb3dpbmcgcGxhdGZvcm1zOgorCitpbmNsdWRlOjpwbGF0Zm9ybXMuaW5jW10KKworCitbW0dCRlJBXV1bW3Rjay1jb21wYXRpYmlsaXR5LXRlc3Qtc3VpdGVdXQorCisxLjIuMyBUQ0sgQ29tcGF0aWJpbGl0eSBUZXN0IFN1aXRlCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK1RoZSB0ZXN0IHN1aXRlIGlzIHRoZSBjb2xsZWN0aW9uIG9mIHRlc3RzIAordG8gdGVzdCBhIHBhcnRpY3VsYXIgdGVjaG5vbG9neSBpbXBsZW1lbnRhdGlvbi4gSW4gdGhpcyBjYXNlLCBpdCBpcyB0aGUKK2NvbGxlY3Rpb24gb2YgSlVuaXQgdGVzdHMgdXNlZCBieSB0aGUge1RlY2hub2xvZ3lTaG9ydE5hbWV9IFRDSwore1RlY2hub2xvZ3lWZXJzaW9ufSB0byB0ZXN0IGEge1RlY2hub2xvZ3lTaG9ydE5hbWV9IHtUZWNobm9sb2d5VmVyc2lvbn0KK2ltcGxlbWVudGF0aW9uLiBUaGUgdGVzdHMgYXJlIGRlc2lnbmVkIHRvIHZlcmlmeSB0aGF0IGEgdmVuZG9yJ3MKK3J1bnRpbWUgaW1wbGVtZW50YXRpb24gb2YgdGhlIHRlY2hub2xvZ3kgY29tcGxpZXMgd2l0aCB0aGUgYXBwcm9wcmlhdGUKK3NwZWNpZmljYXRpb24uIFRoZSBpbmRpdmlkdWFsIHRlc3RzIGNvcnJlc3BvbmQgdG8gYXNzZXJ0aW9ucyBvZiB0aGUKK3NwZWNpZmljYXRpb24uCisKK1RoZSB0ZXN0cyB0aGF0IG1ha2UgdXAgdGhlIFRDSyBjb21wYXRpYmlsaXR5IHRlc3Qgc3VpdGUgYXJlIHByZWNvbXBpbGVkCithbmQgaW5kZXhlZCB3aXRoaW4gdGhlIFRDSyBqYXIgZGlyZWN0b3J5IHN0cnVjdHVyZS4gCisKK1tbR0JGU0hdXVtbZXhjbHVkZS1saXN0c11dCisKKzEuMi40IEV4Y2x1ZGUgTGlzdHMKK15eXl5eXl5eXl5eXl5eXl5eXl4KKworRWFjaCB2ZXJzaW9uIG9mIGEgVENLIGluY2x1ZGVzIGFuIEV4Y2x1ZGUgTGlzdCBjb250YWluZWQgaW4gYSBgVENLLUV4Y2x1ZGUtTGlzdC50eHRgCitmaWxlLiAKK1RoaXMgaXMgYSBsaXN0IG9mIHRlc3QgZmlsZSBVUkxzIHRoYXQgaWRlbnRpZnkgdGVzdHMgd2hpY2ggZG8gbm90CitoYXZlIHRvIGJlIHJ1biBmb3IgdGhlIHNwZWNpZmljIHZlcnNpb24gb2YgdGhlIFRDSyBiZWluZyB1c2VkLiAKK1doZW5ldmVyIHRlc3RzIGFyZSBydW4sIHRoZSBKVW5pdCBmcmFtZXdvcmsgYXV0b21hdGljYWxseSBleGNsdWRlcwordGhlc2UgdGVzdHMgZnJvbSBiZWluZyBleGVjdXRlZCBhcyB0aG9zZSBhcmUgZGlzYWJsZWQgdXNpbmcgJ0BEaXNhYmxlZCcgdGFnIGluIEpVbml0LgorCitBIHZlbmRvcidzIGNvbXBhdGlibGUgaW1wbGVtZW50YXRpb24gaXMgbm90IHJlcXVpcmVkIHRvIHBhc3Mgb3IgcnVuIGFueSB0ZXN0IG9uIHRoZSBFeGNsdWRlIExpc3QuCitUaGUgRXhjbHVkZSBMaXN0IGZpbGUsICt7ZXhjbHVkZUxpc3RGaWxlTmFtZX0rLCBpcyBkb2N1bWVudGVkIGluIHRoZQore1RlY2hub2xvZ3lTaG9ydE5hbWV9IFRDSy4gUGxlYXNlIG5vdGUgdGhpcyBmaWxlIGlzIG5vdCBwYXJzZWQgdG8gZXhjbHVkZSBhbnkgdGVzdCBhbmQgaXMgb25seQorZm9yIGRvY3VtZW50YXRpb24gcHVycG9zZS4KKworCitbTk9URV0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0Zyb20gdGltZSB0byB0aW1lLCB1cGRhdGVzIHRvIHRoZSBFeGNsdWRlIExpc3QgYXJlIG1hZGUgYXZhaWxhYmxlLgorVGhlIGV4Y2x1ZGUgbGlzdCBpcyBpbmNsdWRlZCBpbiB0aGUgVENLIFpJUCBhcmNoaXZlLgorRWFjaCB0aW1lIGFuIHVwZGF0ZSBpcyBhcHByb3ZlZCBhbmQgcmVsZWFzZWQsIHRoZSB2ZXJzaW9uIG51bWJlciAKK3dpbGwgYmUgaW5jcmVtZW50ZWQuCitZb3Ugc2hvdWxkIGFsd2F5cyBtYWtlIHN1cmUgeW91IGFyZSB1c2luZyBhbiB1cC10by1kYXRlIGNvcHkgb2YgdGhlCitFeGNsdWRlIExpc3QgYmVmb3JlIHJ1bm5pbmcgdGhlIHtUZWNobm9sb2d5U2hvcnROYW1lfSBUQ0sgdG8gdmVyaWZ5IHlvdXIKK2ltcGxlbWVudGF0aW9uLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKK0EgdGVzdCBtaWdodCBiZSBpbiB0aGUgRXhjbHVkZSBMaXN0IGZvciByZWFzb25zIHN1Y2ggYXM6CisKKyogQW4gZXJyb3IgaW4gYW4gdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbiBBUEkgaGFzIGJlZW4gZGlzY292ZXJlZCB3aGljaAorZG9lcyBub3QgYWxsb3cgdGhlIHRlc3QgdG8gZXhlY3V0ZSBwcm9wZXJseS4KKyogQW4gZXJyb3IgaW4gdGhlIHNwZWNpZmljYXRpb24gdGhhdCB3YXMgdXNlZCBhcyB0aGUgYmFzaXMgb2YgdGhlIHRlc3QKK2hhcyBiZWVuIGRpc2NvdmVyZWQuCisqIEFuIGVycm9yIGluIHRoZSB0ZXN0IGl0c2VsZiBoYXMgYmVlbiBkaXNjb3ZlcmVkLgorKiBUaGUgdGVzdCBmYWlscyBkdWUgdG8gYSBidWcgaW4gdGhlIHRvb2xzIHVzZWQgdG8gcnVuIHRoZSB0ZXN0LgorCitJbiBhZGRpdGlvbiwgYWxsIHRlc3RzIGFyZSBydW4gYWdhaW5zdCB0aGUgY29tcGF0aWJsZSBpbXBsZW1lbnRhdGlvbnMuCitBbnkgdGVzdHMgdGhhdCBmYWlsIHdoZW4gcnVuIG9uIGEgY29tcGF0aWJsZSBKYWthcnRhIHBsYXRmb3JtIGFyZSBwdXQgb24gdGhlCitFeGNsdWRlIExpc3QuIEFueSB0ZXN0IHRoYXQgaXMgbm90IHNwZWNpZmljYXRpb24tYmFzZWQsIG9yIGZvciB3aGljaCB0aGUKK3NwZWNpZmljYXRpb24gaXMgdmFndWUsIG1heSBiZSBleGNsdWRlZC4gQW55IHRlc3QgdGhhdCBpcyBmb3VuZCB0byBiZQoraW1wbGVtZW50YXRpb24gZGVwZW5kZW50IChiYXNlZCBvbiBhIHBhcnRpY3VsYXIgdGhyZWFkIHNjaGVkdWxpbmcgbW9kZWwsCitiYXNlZCBvbiBhIHBhcnRpY3VsYXIgZmlsZSBzeXN0ZW0gYmVoYXZpb3IsIGFuZCBzbyBvbikgbWF5IGJlIGV4Y2x1ZGVkLgorCisKK1tOT1RFXQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVmVuZG9ycyBhcmUgbm90IHBlcm1pdHRlZCB0byBhbHRlciBvciBtb2RpZnkgRXhjbHVkZSBMaXN0cy4gQ2hhbmdlcyB0bworYW4gRXhjbHVkZSBMaXN0IGNhbiBvbmx5IGJlIG1hZGUgYnkgdXNpbmcgdGhlIHByb2NlZHVyZSBkZXNjcmliZWQgaW4KK2xpbms6cnVsZXMuaHRtbCNDSkFKRUFFSVtTZWN0aW9uIDIuMy4xLCAiVENLIFRlc3QgQXBwZWFscyBTdGVwcy4iXQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKK1tbR0JGUlJdXVtbdGNrLWNvbmZpZ3VyYXRpb25dXQorCisxLjIuNSBUQ0sgQ29uZmlndXJhdGlvbgorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworWW91IG5lZWQgdG8gc2V0IHNldmVyYWwgdmFyaWFibGVzIGluIHlvdXIgdGVzdCBlbnZpcm9ubWVudCwgCithbmQgcnVuIHRoZSB7VGVjaG5vbG9neVNob3J0TmFtZX0gdGVzdHMsIGFzIGRlc2NyaWJlZCBpbiAKK2xpbms6Y29uZmlnLmh0bWwjR0JGVlZbQ2hhcHRlciA0LCAiU2V0dXAgYW5kIENvbmZpZ3VyYXRpb24uIl0KKworaW5jbHVkZTo6aW50cm8uaW5jW10KKworW1tHQkZRV11dW1tnZXR0aW5nLXN0YXJ0ZWQtd2l0aC10aGUtdGNrXV0KKworW05PVEVdCis9PT09CitUaGUgSmFrYXJ0YSBFRSBTcGVjaWZpY2F0aW9uIFByb2Nlc3Mgc3VwcG9ydCBtdWx0aXBsZSBjb21wYXRpYmxlIGltcGxlbWVudGF0aW9ucy4gCitUaGVzZSBpbnN0cnVjdGlvbnMgZXhwbGFpbiBob3cgdG8gZ2V0IHN0YXJ0ZWQgd2l0aCB0aGUge1RlY2hub2xvZ3lSSX0gQ0kuCitJZiB5b3UgYXJlIHVzaW5nIGFub3RoZXIgY29tcGF0aWJsZSBpbXBsZW1lbnRhdGlvbiwgcmVmZXIgdG8gbWF0ZXJpYWwgcHJvdmlkZWQKK2J5IHRoYXQgaW1wbGVtZW50YXRpb24gZm9yIHNwZWNpZmljIGluc3RydWN0aW9ucyBhbmQgcHJvY2VkdXJlcy4KKworPT09PQorCisxLjMgR2V0dGluZyBTdGFydGVkIFdpdGggdGhlIFRDSworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhpcyBzZWN0aW9uIHByb3ZpZGVzIGFuIGdlbmVyYWwgb3ZlcnZpZXcgb2Ygd2hhdCBuZWVkcyB0byBiZSBkb25lIHRvCitpbnN0YWxsLCBzZXQgdXAsIHRlc3QsIGFuZCB1c2UgdGhlIHtUZWNobm9sb2d5U2hvcnROYW1lfSBUQ0suIFRoZXNlCitzdGVwcyBhcmUgZXhwbGFpbmVkIGluIG1vcmUgZGV0YWlsIGluIHN1YnNlcXVlbnQgY2hhcHRlcnMgb2YgdGhpcworZ3VpZGUuCisKKzEuICBNYWtlIHN1cmUgdGhhdCB0aGUgZm9sbG93aW5nIHNvZnR3YXJlIGhhcyBiZWVuIGNvcnJlY3RseSBpbnN0YWxsZWQKK29uIHRoZSBzeXN0ZW0gOgoraW5jbHVkZTo6cmVxLXNvZnR3YXJlLmluY1tdCisqIEphdmEgU0Uge1NFdmVyc2lvbn0KKyogQSBDSSBmb3Ige1RlY2hub2xvZ3lTaG9ydE5hbWV9IHtUZWNobm9sb2d5VmVyc2lvbn0uIE9uZSBleGFtcGxlIGlzIHtUZWNobm9sb2d5Ukl9LgorKiB7VGVjaG5vbG9neVNob3J0TmFtZX0gVENLIHZlcnNpb24ge1RlY2hub2xvZ3lWZXJzaW9ufQorKiBUaGUge1RlY2hub2xvZ3lTaG9ydE5hbWV9IHtUZWNobm9sb2d5VmVyc2lvbn0gVmVuZG9yIEltcGxlbWVudGF0aW9uIChWSSkgKworU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBlYWNoIG9mIHRoZXNlIHNvZnR3YXJlIGFwcGxpY2F0aW9ucyBmb3IKK2luc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMuIFNlZSBsaW5rOmluc3RhbGwuaHRtbCNHQkZUUFtDaGFwdGVyIDMsCisiSW5zdGFsbGF0aW9uLCJdIGZvciBpbnN0cnVjdGlvbnMgb24gaW5zdGFsbGluZyB0aGUge1RlY2hub2xvZ3lTaG9ydE5hbWV9IFRDSy4KKzIuICBTZXQgdXAgdGhlIHtUZWNobm9sb2d5U2hvcnROYW1lfSBUQ0sgc29mdHdhcmUuICsKK1NlZSBsaW5rOmNvbmZpZy5odG1sI0dCRlZWW0NoYXB0ZXIgNCwgIlNldHVwIGFuZCBDb25maWd1cmF0aW9uLCJdIGZvcgorZGV0YWlscyBhYm91dCB0aGUgZm9sbG93aW5nIHN0ZXBzLgorICBhLiAgU2V0IHVwIHlvdXIgc2hlbGwgZW52aXJvbm1lbnQuCisgIGIuICBTZXQgdGhlIHJlcXVpcmVkIFN5c3RlbSBwcm9wZXJ0aWVzLgorMy4gIFRlc3QgdGhlIHtUZWNobm9sb2d5U2hvcnROYW1lfSB7VGVjaG5vbG9neVZlcnNpb259IGltcGxlbWVudGF0aW9uLiArCitUZXN0IHRoZSB7VGVjaG5vbG9neVNob3J0TmFtZX0gaW1wbGVtZW50YXRpb24gaW5zdGFsbGF0aW9uIGJ5IHJ1bm5pbmcKK3RoZSB0ZXN0IHN1aXRlLiAgU2VlIGxpbms6dXNpbmcuaHRtbCNHQkZXT1tDaGFwdGVyIDUsICJFeGVjdXRpbmcgVGVzdHMuIl0KZGlmZiAtLWdpdCBhL3Rjay9kb2NzL3VzZXJndWlkZS9zcmMvbWFpbi9qYmFrZS9jb250ZW50L2ludHJvLmluYyBiL3Rjay9kb2NzL3VzZXJndWlkZS9zcmMvbWFpbi9qYmFrZS9jb250ZW50L2ludHJvLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvdGNrL2RvY3MvdXNlcmd1aWRlL3NyYy9tYWluL2piYWtlL2NvbnRlbnQvaW50cm8uaW5jCmRpZmYgLS1naXQgYS90Y2svZG9jcy91c2VyZ3VpZGUvc3JjL21haW4vamJha2UvY29udGVudC9wYWNrYWdlcy5pbmMgYi90Y2svZG9jcy91c2VyZ3VpZGUvc3JjL21haW4vamJha2UvY29udGVudC9wYWNrYWdlcy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdjNjJkZQotLS0gL2Rldi9udWxsCisrKyBiL3Rjay9kb2NzL3VzZXJndWlkZS9zcmMvbWFpbi9qYmFrZS9jb250ZW50L3BhY2thZ2VzLmluYwpAQCAtMCwwICsxLDUgQEAKKyoqIGBqYWthcnRhLmFubm90YXRpb25gCisKKyoqIGBqYWthcnRhLmFubm90YXRpb24uc2VjdXJpdHlgCisKKyoqIGBqYWthcnRhLmFubm90YXRpb24uc3FsYApkaWZmIC0tZ2l0IGEvdGNrL2RvY3MvdXNlcmd1aWRlL3NyYy9tYWluL2piYWtlL2NvbnRlbnQvcGxhdGZvcm1zLmluYyBiL3Rjay9kb2NzL3VzZXJndWlkZS9zcmMvbWFpbi9qYmFrZS9jb250ZW50L3BsYXRmb3Jtcy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFmYTJkMgotLS0gL2Rldi9udWxsCisrKyBiL3Rjay9kb2NzL3VzZXJndWlkZS9zcmMvbWFpbi9qYmFrZS9jb250ZW50L3BsYXRmb3Jtcy5pbmMKQEAgLTAsMCArMSBAQAorKiBEZWJpYW4gR05VL0xpbnV4IDEwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGNrL2RvY3MvdXNlcmd1aWRlL3NyYy9tYWluL2piYWtlL2NvbnRlbnQvcHJlZmFjZS5hZG9jIGIvdGNrL2RvY3MvdXNlcmd1aWRlL3NyYy9tYWluL2piYWtlL2NvbnRlbnQvcHJlZmFjZS5hZG9jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMTFlMGIKLS0tIC9kZXYvbnVsbAorKysgYi90Y2svZG9jcy91c2VyZ3VpZGUvc3JjL21haW4vamJha2UvY29udGVudC9wcmVmYWNlLmFkb2MKQEAgLTAsMCArMSwxNDIgQEAKK3R5cGU9cGFnZQorc3RhdHVzPXB1Ymxpc2hlZAordGl0bGU9UHJlZmFjZQorbmV4dD1pbnRyby5odG1sCitwcmV2PXRpdGxlLmh0bWwKK35+fn5+fgoraW5jbHVkZTo6YXR0cmlidXRlcy5jb25mW10KK1ByZWZhY2UKKz09PT09PT0KKworW1tUQ0pSUzAwMDAxXV1bW0dCRlRJXV0KKworCitbW3ByZWZhY2VdXQorUHJlZmFjZQorLS0tLS0tLQorCitUaGlzIGd1aWRlIGRlc2NyaWJlcyBob3cgdG8gaW5zdGFsbCwgY29uZmlndXJlLCBhbmQgcnVuIHRoZSBUZWNobm9sb2d5CitDb21wYXRpYmlsaXR5IEtpdCAoVENLKSB0aGF0IGlzIHVzZWQgdG8gdGVzdCB0aGUge1RlY2hub2xvZ3lGdWxsTmFtZX0KKyh7VGVjaG5vbG9neVNob3J0TmFtZX0ge1RlY2hub2xvZ3lWZXJzaW9ufSkgdGVjaG5vbG9neS4KKworVGhlIHtUZWNobm9sb2d5U2hvcnROYW1lfSBUQ0sgaXMgYSBwb3J0YWJsZSwgY29uZmlndXJhYmxlIGF1dG9tYXRlZAordGVzdCBzdWl0ZSBmb3IgdmVyaWZ5aW5nIHRoZSBjb21wYXRpYmlsaXR5IG9mIGEgdmVuZG9yJ3MKK2ltcGxlbWVudGF0aW9uIG9mIHRoZSB7VGVjaG5vbG9neVNob3J0TmFtZX0ge1RlY2hub2xvZ3lWZXJzaW9ufQorU3BlY2lmaWNhdGlvbiAoaGVyZWFmdGVyIHJlZmVycmVkIHRvIGFzIHRoZSB2ZW5kb3IgaW1wbGVtZW50YXRpb24gb3IgVkkpLgorVGhlIHtUZWNobm9sb2d5U2hvcnROYW1lfSBUQ0sgdXNlcyB0aGUgSlVuaXQgZnJhbWV3b3JrIHRvIHJ1biB0aGUgdGVzdCBzdWl0ZS4KKworCitbTk9URV0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK05vdGUgQWxsIHJlZmVyZW5jZXMgdG8gc3BlY2lmaWMgV2ViIFVSTHMgYXJlIGdpdmVuIGZvciB0aGUgc2FrZSBvZiB5b3VyCitjb252ZW5pZW5jZSBpbiBsb2NhdGluZyB0aGUgcmVzb3VyY2VzIHF1aWNrbHkuIFRoZXNlIHJlZmVyZW5jZXMgYXJlCithbHdheXMgc3ViamVjdCB0byBjaGFuZ2VzIHRoYXQgYXJlIGluIG1hbnkgY2FzZXMgYmV5b25kIHRoZSBjb250cm9sIG9mCit0aGUgYXV0aG9ycyBvZiB0aGlzIGd1aWRlLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitKYWthcnRhIEVFIGlzIGEgY29tbXVuaXR5IHNwb25zb3JlZCBhbmQgY29tbXVuaXR5IHJ1biBwcm9ncmFtLiAKK09yZ2FuaXphdGlvbnMgY29udHJpYnV0ZSwgYWxvbmcgc2lkZSBpbmRpdmlkdWFsIGNvbnRyaWJ1dG9ycyB3aG8gdXNlLCBldm9sdmUgCithbmQgYXNzaXN0IG90aGVycy4KK0NvbW1lcmNpYWwgc3VwcG9ydCBpcyBub3QgYXZhaWxhYmxlIHRocm91Z2ggdGhlIEVjbGlwc2UgRm91bmRhdGlvbiByZXNvdXJjZXMuCitQbGVhc2UgcmVmZXIgdG8gdGhlIEVjbGlwc2UgRUU0SiBwcm9qZWN0IHNpdGUKKyhodHRwczovL3Byb2plY3RzLmVjbGlwc2Uub3JnL3Byb2plY3RzL2VlNGopLgorVGhlcmUsIHlvdSB3aWxsIGZpbmQgYWRkaXRpb25hbCBkZXRhaWxzIGFzIHdlbGwgYXMgYSBsaXN0IG9mIGFsbCB0aGUgYXNzb2NpYXRlZCBzdWItcHJvamVjdHMgCisoSW1wbGVtZW50YXRpb25zIGFuZCBBUElzKSwgdGhhdCBtYWtlIHVwIEpha2FydGEgRUUgYW5kIGRlZmluZSB0aGVzZSBzcGVjaWZpY2F0aW9ucy4gCitJZiB5b3UgaGF2ZSBxdWVzdGlvbnMgYWJvdXQgdGhpcyBTcGVjaWZpY2F0aW9uIHlvdSBtYXkKK3NlbmQgaW5xdWlyaWVzIHRvIHtTcGVjaWZpY2F0aW9uSW5xdWlyeUxpc3R9LiAKK0lmIHlvdSBoYXZlIHF1ZXN0aW9ucyBhYm91dCB0aGlzIFRDSywgeW91IG1heSBzZW5kIGlucXVpcmllcyB0byAKK3tUQ0tJbnF1aXJ5TGlzdH0uCisKK1tbVENKUlMwMDAzNF1dW1tHQkZVU11dCisKKworW1t3aG8tc2hvdWxkLXVzZS10aGlzLWJvb2tdXQorV2hvIFNob3VsZCBVc2UgVGhpcyBCb29rCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhpcyBndWlkZSBpcyBmb3IgdmVuZG9ycyB0aGF0IGltcGxlbWVudCB0aGUge1RlY2hub2xvZ3lTaG9ydE5hbWV9Cit7VGVjaG5vbG9neVZlcnNpb259IHRlY2hub2xvZ3kgdG8gYXNzaXN0IHRoZW0gaW4gcnVubmluZyB0aGUgdGVzdCBzdWl0ZQordGhhdCB2ZXJpZmllcyBjb21wYXRpYmlsaXR5IG9mIHRoZWlyIGltcGxlbWVudGF0aW9uIG9mIHRoZQore1RlY2hub2xvZ3lTaG9ydE5hbWV9IHtUZWNobm9sb2d5VmVyc2lvbn0gU3BlY2lmaWNhdGlvbi4KKworCitbW1RDSlJTMDAwMzVdXVtbR0JGUE9dXQorCisKK1tbYmVmb3JlLXlvdS1yZWFkLXRoaXMtYm9va11dCitCZWZvcmUgWW91IFJlYWQgVGhpcyBCb29rCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1lvdSBzaG91bGQgYmUgZmFtaWxpYXIgd2l0aCB0aGUge1RlY2hub2xvZ3lTaG9ydE5hbWV9Cit7VGVjaG5vbG9neVZlcnNpb259LCB2ZXJzaW9uIHtUZWNobm9sb2d5VmVyc2lvbn0gU3BlY2lmaWNhdGlvbiwgCit3aGljaCBjYW4gYmUgZm91bmQgYXQge1NwZWNpZmljYXRpb25VUkx9LgorCisKK1tbVENKUlMwMDAzNl1dW1tHQkZXRl1dCisKKworW1t0eXBvZ3JhcGhpYy1jb252ZW50aW9uc11dCitUeXBvZ3JhcGhpYyBDb252ZW50aW9ucworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhlIGZvbGxvd2luZyB0YWJsZSBkZXNjcmliZXMgdGhlIHR5cG9ncmFwaGljIGNvbnZlbnRpb25zIHRoYXQgYXJlIHVzZWQKK2luIHRoaXMgYm9vay4KKworW3dpZHRoPSIxMDAlIixjb2xzPSIxNSUsNDAlLDQ1JSIsb3B0aW9ucz0iaGVhZGVyIixdCit8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3xDb252ZW50aW9uIHxNZWFuaW5nIHxFeGFtcGxlCit8KkJvbGRmYWNlKiB8Qm9sZGZhY2UgdHlwZSBpbmRpY2F0ZXMgZ3JhcGhpY2FsIHVzZXIgaW50ZXJmYWNlIGVsZW1lbnRzCithc3NvY2lhdGVkIHdpdGggYW4gYWN0aW9uLCB0ZXJtcyBkZWZpbmVkIGluIHRleHQsIG9yIHdoYXQgeW91IHR5cGUsCitjb250cmFzdGVkIHdpdGggb25zY3JlZW4gY29tcHV0ZXIgb3V0cHV0LiBhfAorRnJvbSB0aGUgKkZpbGUqIG1lbnUsIHNlbGVjdCAqT3BlbiBQcm9qZWN0Ki4KKworQSAqY2FjaGUqIGlzIGEgY29weSB0aGF0IGlzIHN0b3JlZCBsb2NhbGx5LgorCitgbWFjaGluZV9uYW1lJSAqc3UqYCArCitgUGFzc3dvcmQ6YAorCit8YE1vbm9zcGFjZWAgfE1vbm9zcGFjZSB0eXBlIGluZGljYXRlcyB0aGUgbmFtZXMgb2YgZmlsZXMgYW5kCitkaXJlY3RvcmllcywgY29tbWFuZHMgd2l0aGluIGEgcGFyYWdyYXBoLCBVUkxzLCBjb2RlIGluIGV4YW1wbGVzLCB0ZXh0Cit0aGF0IGFwcGVhcnMgb24gdGhlIHNjcmVlbiwgb3IgdGV4dCB0aGF0IHlvdSBlbnRlci4gYXwKK0VkaXQgeW91ciBgLmxvZ2luYCBmaWxlLgorCitVc2UgYGxzYCBgLWFgIHRvIGxpc3QgYWxsIGZpbGVzLgorCitgbWFjaGluZV9uYW1lJSB5b3UgaGF2ZSBtYWlsLmAKKworfF9JdGFsaWNfIHxJdGFsaWMgdHlwZSBpbmRpY2F0ZXMgYm9vayB0aXRsZXMsIGVtcGhhc2lzLCBvciBwbGFjZWhvbGRlcgordmFyaWFibGVzIGZvciB3aGljaCB5b3Ugc3VwcGx5IHBhcnRpY3VsYXIgdmFsdWVzLiBhfAorUmVhZCBDaGFwdGVyIDYgaW4gdGhlIF9Vc2VyJ3MgR3VpZGVfLgorCitEbyBfbm90XyBzYXZlIHRoZSBmaWxlLgorCitUaGUgY29tbWFuZCB0byByZW1vdmUgYSBmaWxlIGlzIGBybWAgX2ZpbGVuYW1lXy4KKworfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworW1tUQ0pSUzAwMDM3XV1bW0ZXQlNEXV0KKworCitbW3NoZWxsLXByb21wdHMtaW4tY29tbWFuZC1leGFtcGxlc11dCitTaGVsbCBQcm9tcHRzIGluIENvbW1hbmQgRXhhbXBsZXMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitUaGUgZm9sbG93aW5nIHRhYmxlIHNob3dzIHRoZSBkZWZhdWx0IFVOSVggc3lzdGVtIHByb21wdCBhbmQgc3VwZXJ1c2VyCitwcm9tcHQgZm9yIHRoZSBDIHNoZWxsLCBCb3VybmUgc2hlbGwsIGFuZCBLb3JuIHNoZWxsLgorCitbd2lkdGg9IjEwMCUiLGNvbHM9IjUwJSw1MCUiLG9wdGlvbnM9ImhlYWRlciIsXQorfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cit8U2hlbGwgfFByb21wdAorfEMgc2hlbGwgfGBtYWNoaW5lX25hbWUlYAorfEMgc2hlbGwgZm9yIHN1cGVydXNlciB8YG1hY2hpbmVfbmFtZSNgCit8Qm91cm5lIHNoZWxsIGFuZCBLb3JuIHNoZWxsIHxgJGAgKworfEJvdXJuZSBzaGVsbCBhbmQgS29ybiBzaGVsbCBmb3Igc3VwZXJ1c2VyIHxgI2AgKworfEJhc2ggc2hlbGwgfGBzaGVsbF9uYW1lLXNoZWxsX3ZlcnNpb24kYAorfEJhc2ggc2hlbGwgZm9yIHN1cGVydXNlciB8YHNoZWxsX25hbWUtc2hlbGxfdmVyc2lvbiNgCit8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCisKZGlmZiAtLWdpdCBhL3Rjay9kb2NzL3VzZXJndWlkZS9zcmMvbWFpbi9qYmFrZS9jb250ZW50L3JlYnVpbGQuYWRvYyBiL3Rjay9kb2NzL3VzZXJndWlkZS9zcmMvbWFpbi9qYmFrZS9jb250ZW50L3JlYnVpbGQuYWRvYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDAyMWNmCi0tLSAvZGV2L251bGwKKysrIGIvdGNrL2RvY3MvdXNlcmd1aWRlL3NyYy9tYWluL2piYWtlL2NvbnRlbnQvcmVidWlsZC5hZG9jCkBAIC0wLDAgKzEsMjAgQEAKK3R5cGU9cGFnZQorc3RhdHVzPXB1Ymxpc2hlZAordGl0bGU9QXBwZW5kaXggQjogUmVidWlsZCBSdWxlcworcHJldj1mYXEuaHRtbAorfn5+fn5+CitpbmNsdWRlOjphdHRyaWJ1dGVzLmNvbmZbXQorCitBcHBlbmRpeCBCOiBSZWJ1aWxkIFJ1bGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKKworaWZkZWY6OnJlYnVpbGRbXQoraW5jbHVkZTo6cmVidWlsZC5pbmNbXQorZW5kaWY6OnJlYnVpbGRbXQoraWZuZGVmOjpyZWJ1aWxkW10KKworPDw8CitBcHBlbmRpeCBCIGlzIG5vdCB1c2VkIGZvciB0aGUge1RlY2hub2xvZ3lTaG9ydE5hbWV9IFRDSy4KKworZW5kaWY6OnJlYnVpbGRbXQpkaWZmIC0tZ2l0IGEvdGNrL2RvY3MvdXNlcmd1aWRlL3NyYy9tYWluL2piYWtlL2NvbnRlbnQvcmVidWlsZC5pbmMgYi90Y2svZG9jcy91c2VyZ3VpZGUvc3JjL21haW4vamJha2UvY29udGVudC9yZWJ1aWxkLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjkyYmM0Ci0tLSAvZGV2L251bGwKKysrIGIvdGNrL2RvY3MvdXNlcmd1aWRlL3NyYy9tYWluL2piYWtlL2NvbnRlbnQvcmVidWlsZC5pbmMKQEAgLTAsMCArMSw4IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworTk9URSBUTyBXUklURVJTOgorVGhlIGZvbGxvd2luZyBzZWN0aW9ucyBzaG91bGQgYmUgY3VzdG9taXplZCBmb3IgdGhlIHRlY2hub2xvZ3kuCitUaGlzIGlzIG5vdCByZXF1aXJlZCBmb3IgSmFrYXJ0YSBBbm5vdGF0aW9ucworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworW1tHQ0xJWl1dCisKZGlmZiAtLWdpdCBhL3Rjay9kb2NzL3VzZXJndWlkZS9zcmMvbWFpbi9qYmFrZS9jb250ZW50L3JlcS1zb2Z0d2FyZS5pbmMgYi90Y2svZG9jcy91c2VyZ3VpZGUvc3JjL21haW4vamJha2UvY29udGVudC9yZXEtc29mdHdhcmUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MThkOWYKLS0tIC9kZXYvbnVsbAorKysgYi90Y2svZG9jcy91c2VyZ3VpZGUvc3JjL21haW4vamJha2UvY29udGVudC9yZXEtc29mdHdhcmUuaW5jCkBAIC0wLDAgKzEsOSBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK05PVEUgVE8gV1JJVEVSUzoKK1RoaXMgaXMgYSBsaXN0IG9mIHNvZnR3YXJlIHJlcXVpcmVkIGluIGFkZGl0aW9uIHRvIHRoZSBUQ0sgYW5kIHRoZSBSSS4KK0ZvciBtYW55IEphdmEgRUUgQVBJcywgdGhlIEphdmEgRUUgUkkgd2lsbCBiZSByZXF1aXJlZCwgYXMgZGVzY3JpYmVkIGJlbG93LgorRm9yIHN0YW5kYWxvbmUgdGVjaG5vbG9naWVzLCBubyBvdGhlciBzb2Z0d2FyZSBtYXkgYmUgcmVxdWlyZWQsIGFuZCB0aGUKK2JlbG93IGxpbmUgY2FuIGJlIHJlbW92ZWQuCisKK1RoaXMgaXMgdXNlZCBpbiBpbnRyby5hZG9jIGluIHNlY3Rpb24gMS4zIGFuZCBpbnN0YWxsLmFkb2MgaW4gc2VjdGlvbiAzLjIuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpkaWZmIC0tZ2l0IGEvdGNrL2RvY3MvdXNlcmd1aWRlL3NyYy9tYWluL2piYWtlL2NvbnRlbnQvcnVsZXMuYWRvYyBiL3Rjay9kb2NzL3VzZXJndWlkZS9zcmMvbWFpbi9qYmFrZS9jb250ZW50L3J1bGVzLmFkb2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZiMDhjZQotLS0gL2Rldi9udWxsCisrKyBiL3Rjay9kb2NzL3VzZXJndWlkZS9zcmMvbWFpbi9qYmFrZS9jb250ZW50L3J1bGVzLmFkb2MKQEAgLTAsMCArMSw0MDMgQEAKK3R5cGU9cGFnZQorc3RhdHVzPXB1Ymxpc2hlZAordGl0bGU9UHJvY2VkdXJlIGZvciBDZXJ0aWZpY2F0aW9uCituZXh0PWluc3RhbGwuaHRtbAorcHJldj1pbnRyby5odG1sCit+fn5+fn4KK2luY2x1ZGU6OmF0dHJpYnV0ZXMuY29uZltdCitQcm9jZWR1cmUgZm9yIENlcnRpZmljYXRpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitbW0dCRlNOXV0KKworCitbW3Byb2NlZHVyZS1mb3ItY2VydGlmaWNhdGlvbl1dCisyIFByb2NlZHVyZSBmb3IgQ2VydGlmaWNhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBjaGFwdGVyIGRlc2NyaWJlcyB0aGUgY29tcGF0aWJpbGl0eSB0ZXN0aW5nIHByb2NlZHVyZSBhbmQKK2NvbXBhdGliaWxpdHkgcmVxdWlyZW1lbnRzIGZvciB7VGVjaG5vbG9neUZ1bGxOYW1lfS4KK1RoaXMgY2hhcHRlciBjb250YWlucyB0aGUgZm9sbG93aW5nIHNlY3Rpb25zOgorCisqIGxpbms6I0NKQUZGREdJW0NlcnRpZmljYXRpb24gT3ZlcnZpZXddCisqIGxpbms6I0NKQUZHSUdHW0NvbXBhdGliaWxpdHkgUmVxdWlyZW1lbnRzXQorKiBsaW5rOiNDSkFJSUJESltUZXN0IEFwcGVhbHMgUHJvY2Vzc10KKyogbGluazojQ0pBSkVDSUVbU3BlY2lmaWNhdGlvbnMgZm9yIHtUZWNobm9sb2d5RnVsbE5hbWV9XQorKiBsaW5rOiNDSkFCQUhHSVtMaWJyYXJpZXMgZm9yIHtUZWNobm9sb2d5RnVsbE5hbWV9XQorCitbW0NKQUZGREdJXV1bW2NlcnRpZmljYXRpb24tb3ZlcnZpZXddXQorCisyLjEgQ2VydGlmaWNhdGlvbiBPdmVydmlldworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhlIGNlcnRpZmljYXRpb24gcHJvY2VzcyBmb3Ige3RlY2hub2xvZ3lTaG9ydE5hbWV9IHtUZWNobm9sb2d5VmVyc2lvbn0KK2NvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgYWN0aXZpdGllczoKKworKiBJbnN0YWxsIHRoZSBhcHByb3ByaWF0ZSB2ZXJzaW9uIG9mIHRoZSBUZWNobm9sb2d5IENvbXBhdGliaWxpdHkgS2l0CisoVENLKSBhbmQgZXhlY3V0ZSBpdCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGluc3RydWN0aW9ucyBpbiB0aGlzIFVzZXIncworR3VpZGUuCisqIEVuc3VyZSB0aGF0IHlvdSBtZWV0IHRoZSByZXF1aXJlbWVudHMgb3V0bGluZWQgaW4KK2xpbms6I0NKQUZHSUdHW0NvbXBhdGliaWxpdHkgUmVxdWlyZW1lbnRzXSBiZWxvdy4KKyogQ2VydGlmeSB0byB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRoYXQgeW91IGhhdmUgZmluaXNoZWQKK3Rlc3RpbmcgYW5kIHRoYXQgeW91IG1lZXQgYWxsIG9mIHRoZSBjb21wYXRpYmlsaXR5IHJlcXVpcmVtZW50cywKK2FzIHJlcXVpcmVkIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gVENLIExpY2Vuc2UuCisKK1tbQ0pBRkdJR0ddXVtbY29tcGF0aWJpbGl0eS1yZXF1aXJlbWVudHNdXQorCisyLjIgQ29tcGF0aWJpbGl0eSBSZXF1aXJlbWVudHMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitUaGUgY29tcGF0aWJpbGl0eSByZXF1aXJlbWVudHMgZm9yIHtUZWNobm9sb2d5U2hvcnROYW1lfQore1RlY2hub2xvZ3lWZXJzaW9ufSBjb25zaXN0IG9mIG1lZXRpbmcgdGhlIHJlcXVpcmVtZW50cyBzZXQgZm9ydGggYnkKK3RoZSBydWxlcyBhbmQgYXNzb2NpYXRlZCBkZWZpbml0aW9ucyBjb250YWluZWQgaW4gdGhpcyBzZWN0aW9uLgorCitbW3N0aHJlZjRdXVtbZGVmaW5pdGlvbnNdXQorCisyLjIuMSBEZWZpbml0aW9ucworXl5eXl5eXl5eXl5eXl5eXl4KKworVGhlc2UgZGVmaW5pdGlvbnMgYXJlIGZvciB1c2Ugb25seSB3aXRoIHRoZXNlIGNvbXBhdGliaWxpdHkgcmVxdWlyZW1lbnRzCithbmQgYXJlIG5vdCBpbnRlbmRlZCBmb3IgYW55IG90aGVyIHB1cnBvc2UuCisKK1tbc3RocmVmNV1dW1tzdGhyZWY2XV0KKworVGFibGUgMi0xIERlZmluaXRpb25zwqAKKworW3dpZHRoPSIxMDAlIixjb2xzPSIyNSUsNzUlIixvcHRpb25zPSJoZWFkZXIiLF0KK3w9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorfFRlcm0gfERlZmluaXRpb24KK3xBUEkgRGVmaW5pdGlvbiBQcm9kdWN0IHxBIFByb2R1Y3QgZm9yIHdoaWNoIHRoZSBvbmx5IEphdmEgY2xhc3MgZmlsZXMKK2NvbnRhaW5lZCBpbiB0aGUgcHJvZHVjdCBhcmUgdGhvc2UgY29ycmVzcG9uZGluZyB0byB0aGUgYXBwbGljYXRpb24KK3Byb2dyYW1taW5nIGludGVyZmFjZXMgZGVmaW5lZCBieSB0aGUgU3BlY2lmaWNhdGlvbnMsIGFuZCB3aGljaCBpcworaW50ZW5kZWQgb25seSBhcyBhIG1lYW5zIGZvciBmb3JtYWxseSBzcGVjaWZ5aW5nIHRoZSBhcHBsaWNhdGlvbgorcHJvZ3JhbW1pbmcgaW50ZXJmYWNlcyBkZWZpbmVkIGJ5IHRoZSBTcGVjaWZpY2F0aW9ucy4KKworfENvbXB1dGF0aW9uYWwgUmVzb3VyY2UgYXwKK0EgcGllY2Ugb2YgaGFyZHdhcmUgb3Igc29mdHdhcmUgdGhhdCBtYXkgdmFyeSBpbiBxdWFudGl0eSwgZXhpc3RlbmNlLCBvcgordmVyc2lvbiwgd2hpY2ggbWF5IGJlIHJlcXVpcmVkIHRvIGV4aXN0IGluIGEgbWluaW11bSBxdWFudGl0eSBhbmQvb3IgYXQKK2Egc3BlY2lmaWMgb3IgbWluaW11bSByZXZpc2lvbiBsZXZlbCBzbyBhcyB0byBzYXRpc2Z5IHRoZSByZXF1aXJlbWVudHMKK29mIHRoZSBUZXN0IFN1aXRlLgorCitFeGFtcGxlcyBvZiBjb21wdXRhdGlvbmFsIHJlc291cmNlcyB0aGF0IG1heSB2YXJ5IGluIHF1YW50aXR5IGFyZSBSQU0KK2FuZCBmaWxlIGRlc2NyaXB0b3JzLgorCitFeGFtcGxlcyBvZiBjb21wdXRhdGlvbmFsIHJlc291cmNlcyB0aGF0IG1heSB2YXJ5IGluIGV4aXN0ZW5jZSAodGhhdCBpcywKK21heSBvciBtYXkgbm90IGV4aXN0KSBhcmUgZ3JhcGhpY3MgY2FyZHMgYW5kIGRldmljZSBkcml2ZXJzLgorCitFeGFtcGxlcyBvZiBjb21wdXRhdGlvbmFsIHJlc291cmNlcyB0aGF0IG1heSB2YXJ5IGluIHZlcnNpb24gYXJlCitvcGVyYXRpbmcgc3lzdGVtcyBhbmQgZGV2aWNlIGRyaXZlcnMuCisKK3xDb25maWd1cmF0aW9uIERlc2NyaXB0b3IgfEFueSBmaWxlIHdob3NlIGZvcm1hdCBpcyB3ZWxsIGRlZmluZWQgYnkgYQorc3BlY2lmaWNhdGlvbiBhbmQgd2hpY2ggY29udGFpbnMgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgYSBzZXQgb2YKK0phdmEgY2xhc3NlcywgYXJjaGl2ZSwgb3Igb3RoZXIgZmVhdHVyZSBkZWZpbmVkIGluIHRoZSBzcGVjaWZpY2F0aW9uLgorCit8Q29uZm9ybWFuY2UgVGVzdHMgfEFsbCB0ZXN0cyBpbiB0aGUgVGVzdCBTdWl0ZSBmb3IgYW4gaW5kaWNhdGVkCitUZWNobm9sb2d5IFVuZGVyIFRlc3QsIGFzIHJlbGVhc2VkIGFuZCBkaXN0cmlidXRlZCBieSB0aGUgCitFY2xpcHNlIEZvdW5kYXRpb24sIGV4Y2x1ZGluZyB0aG9zZSB0ZXN0cyBvbiB0aGUgCitwdWJsaXNoZWQgRXhjbHVkZSBMaXN0IGZvciB0aGUgVGVjaG5vbG9neSBVbmRlciBUZXN0LgorCit8Q29udGFpbmVyIHxBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYXNzb2NpYXRlZCBMaWJyYXJpZXMsIGFzIHNwZWNpZmllZAoraW4gdGhlIFNwZWNpZmljYXRpb25zLCBhbmQgYSB2ZXJzaW9uIG9mIGEgSmF2YSBQbGF0Zm9ybSwgU3RhbmRhcmQKK0VkaXRpb24gUnVudGltZSBQcm9kdWN0LCBhcyBzcGVjaWZpZWQgaW4gdGhlIFNwZWNpZmljYXRpb25zLCBvciBhIGxhdGVyCit2ZXJzaW9uIG9mIGEgSmF2YSBQbGF0Zm9ybSwgU3RhbmRhcmQgRWRpdGlvbiBSdW50aW1lIFByb2R1Y3QgdGhhdCBhbHNvCittZWV0cyB0aGVzZSBjb21wYXRpYmlsaXR5IHJlcXVpcmVtZW50cy4KKworfERvY3VtZW50ZWQgfE1hZGUgdGVjaG5pY2FsbHkgYWNjZXNzaWJsZSBhbmQgbWFkZSBrbm93biB0byB1c2VycywKK3R5cGljYWxseSBieSBtZWFucyBzdWNoIGFzIG1hcmtldGluZyBtYXRlcmlhbHMsIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiwKK3VzYWdlIG1lc3NhZ2VzLCBvciBkZXZlbG9wZXIgc3VwcG9ydCBwcm9ncmFtcy4KKworfEV4Y2x1ZGUgTGlzdCB8VGhlIG1vc3QgY3VycmVudCBsaXN0IG9mIHRlc3RzLCByZWxlYXNlZCBhbmQgZGlzdHJpYnV0ZWQgYnkgdGhlCitFY2xpcHNlIEZvdW5kYXRpb24sIHRoYXQgYXJlIG5vdCByZXF1aXJlZCB0byBiZSBwYXNzZWQgdG8gY2VydGlmeQorY29uZm9ybWFuY2UuIFRoZSBKYWthcnRhIEVFIFNwZWNpZmljYXRpb24gQ29tbWl0dGVlIG1heSBhZGQgdG8gdGhlIEV4Y2x1ZGUgTGlzdCBmb3IgdGhhdAorVGVzdCBTdWl0ZSBhcyBuZWVkZWQgYXQgYW55IHRpbWUsIGluIHdoaWNoIGNhc2UgdGhlIHVwZGF0ZWQgVENLIHZlcnNpb24KK3N1cHBsYW50cyBhbnkgcHJldmlvdXMgRXhjbHVkZSBMaXN0cyBmb3IgdGhhdCBUZXN0IFN1aXRlLgorCit8TGlicmFyaWVzIGF8CitUaGUgY2xhc3MgbGlicmFyaWVzLCBhcyBzcGVjaWZpZWQgdGhyb3VnaCB0aGUgSmFrYXJ0YSBFRSBTcGVjaWZpY2F0aW9uIFByb2Nlc3MKKyhKRVNQKSwgZm9yIHRoZSBUZWNobm9sb2d5IFVuZGVyIFRlc3QuCisKK1RoZSBMaWJyYXJpZXMgZm9yIHtUZWNobm9sb2d5RnVsbE5hbWV9IGFyZSBsaXN0ZWQgYXQgdGhlIGVuZCBvZiB0aGlzIGNoYXB0ZXIuCisKK3xMb2NhdGlvbiBSZXNvdXJjZSBhfAorQSBsb2NhdGlvbiBvZiBjbGFzc2VzIG9yIG5hdGl2ZSBsaWJyYXJpZXMgdGhhdCBhcmUgY29tcG9uZW50cyBvZiB0aGUKK3Rlc3QgdG9vbHMgb3IgdGVzdHMsIHN1Y2ggdGhhdCB0aGVzZSBjbGFzc2VzIG9yIGxpYnJhcmllcyBtYXkgYmUKK3JlcXVpcmVkIHRvIGV4aXN0IGluIGEgY2VydGFpbiBsb2NhdGlvbiBpbiBvcmRlciB0byBzYXRpc2Z5IHRoZQorcmVxdWlyZW1lbnRzIG9mIHRoZSB0ZXN0IHN1aXRlLgorCitGb3IgZXhhbXBsZSwgY2xhc3NlcyBtYXkgYmUgcmVxdWlyZWQgdG8gZXhpc3QgaW4gZGlyZWN0b3JpZXMgbmFtZWQgaW4gYQorQ0xBU1NQQVRIIHZhcmlhYmxlLCBvciBuYXRpdmUgbGlicmFyaWVzIG1heSBiZSByZXF1aXJlZCB0byBleGlzdCBpbgorZGlyZWN0b3JpZXMgbmFtZWQgaW4gYSBQQVRIIHZhcmlhYmxlLgorCit8TWFpbnRlbmFuY2UgTGVhZCB8VGhlIGNvcnJlc3BvbmRpbmcgSmFrYXJ0YSBFRSBTcGVjaWZpY2F0aW9uIFByb2plY3QKK2lzIHJlc3BvbnNpYmxlIGZvciBtYWludGFpbmluZyB0aGUgU3BlY2lmaWNhdGlvbiwgYW5kIHRoZSBUQ0sgZm9yIHRoZQorVGVjaG5vbG9neS4gIFRoZSBTcGVjaWZpY2F0aW9uIFByb2plY3QgVGVhbSB3aWxsIHByb3Bvc2UgcmV2aXNpb25zIGFuZAordXBkYXRlcyB0byB0aGUgSmFrYXJ0YSBFRSBTcGVjaWZpY2F0aW9uIENvbW1pdHRlZSB3aGljaCB3aWxsIGFwcHJvdmUKK2FuZCByZWxlYXNlIG5ldyB2ZXJzaW9ucyBvZiB0aGUgc3BlY2lmaWNhdGlvbiBhbmQgVENLLgorCit8T3BlcmF0aW5nIE1vZGUgYXwKK0FueSBEb2N1bWVudGVkIG9wdGlvbiBvZiBhIFByb2R1Y3QgdGhhdCBjYW4gYmUgY2hhbmdlZCBieSBhIHVzZXIgaW4KK29yZGVyIHRvIG1vZGlmeSB0aGUgYmVoYXZpb3Igb2YgdGhlIFByb2R1Y3QuCisKK0ZvciBleGFtcGxlLCBhbiBPcGVyYXRpbmcgTW9kZSBjYW4gYmUgYmluYXJ5IChlbmFibGUvZGlzYWJsZQorb3B0aW1pemF0aW9uKSwgYW4gZW51bWVyYXRpb24gKHNlbGVjdCBmcm9tIGEgbGlzdCBvZiBwcm90b2NvbHMpLCBvciBhCityYW5nZSAoc2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBhY3RpdmUgdGhyZWFkcykuCisKK05vdGUgdGhhdCBhbiBPcGVyYXRpbmcgTW9kZSBtYXkgYmUgc2VsZWN0ZWQgYnkgYSBjb21tYW5kIGxpbmUgc3dpdGNoLCBhbgorZW52aXJvbm1lbnQgdmFyaWFibGUsIGEgR1VJIHVzZXIgaW50ZXJmYWNlIGVsZW1lbnQsIGEgY29uZmlndXJhdGlvbiBvcgorY29udHJvbCBmaWxlLCBldGMuCisKK3xQcm9kdWN0IHxBIHZlbmRvcidzIHByb2R1Y3QgaW4gd2hpY2ggdGhlIFRlY2hub2xvZ3kgVW5kZXIgVGVzdCBpcworaW1wbGVtZW50ZWQgb3IgaW5jb3Jwb3JhdGVkLCBhbmQgdGhhdCBpcyBzdWJqZWN0IHRvIGNvbXBhdGliaWxpdHkKK3Rlc3RpbmcuCisKK3xQcm9kdWN0IENvbmZpZ3VyYXRpb24gYXwKK0Egc3BlY2lmaWMgc2V0dGluZyBvciBpbnN0YW50aWF0aW9uIG9mIGFuIE9wZXJhdGluZyBNb2RlLgorCitGb3IgZXhhbXBsZSwgYSBQcm9kdWN0IHN1cHBvcnRpbmcgYW4gT3BlcmF0aW5nIE1vZGUgdGhhdCBwZXJtaXRzIHVzZXIKK3NlbGVjdGlvbiBvZiBhbiBleHRlcm5hbCBlbmNyeXB0aW9uIHBhY2thZ2UgbWF5IGhhdmUgYSBQcm9kdWN0CitDb25maWd1cmF0aW9uIHRoYXQgbGlua3MgdGhlIFByb2R1Y3QgdG8gdGhhdCBlbmNyeXB0aW9uIHBhY2thZ2UuCisKK3xSZWJ1aWxkYWJsZSBUZXN0cyB8VGVzdHMgdGhhdCBtdXN0IGJlIGJ1aWx0IHVzaW5nIGFuCitpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyBtZWNoYW5pc20uIFRoaXMgbWVjaGFuaXNtIG11c3QgcHJvZHVjZQorc3BlY2lmaWNhdGlvbi1kZWZpbmVkIGFydGlmYWN0cy4gUmVidWlsZGluZyBhbmQgcnVubmluZyB0aGVzZSB0ZXN0cworYWdhaW5zdCBhIGtub3duIGNvbXBhdGlibGUgaW1wbGVtZW50YXRpb24gdmVyaWZpZXMgdGhhdCB0aGUgbWVjaGFuaXNtIGdlbmVyYXRlcworY29tcGF0aWJsZSBhcnRpZmFjdHMuCisKK3xSZXNvdXJjZSB8QSBDb21wdXRhdGlvbmFsIFJlc291cmNlLCBhIExvY2F0aW9uIFJlc291cmNlLCBvciBhIFNlY3VyaXR5CitSZXNvdXJjZS4KKworfFJ1bGVzIHxUaGVzZSBkZWZpbml0aW9ucyBhbmQgcnVsZXMgaW4gdGhpcyBDb21wYXRpYmlsaXR5IFJlcXVpcmVtZW50cworc2VjdGlvbiBvZiB0aGlzIFVzZXIncyBHdWlkZS4KKworfFJ1bnRpbWUgfFRoZSBDb250YWluZXJzIHNwZWNpZmllZCBpbiB0aGUgU3BlY2lmaWNhdGlvbnMuCisKK3xTZWN1cml0eSBSZXNvdXJjZSBhfAorQSBzZWN1cml0eSBwcml2aWxlZ2Ugb3IgcG9saWN5IG5lY2Vzc2FyeSBmb3IgdGhlIHByb3BlciBleGVjdXRpb24gb2YgdGhlCitUZXN0IFN1aXRlLgorCitGb3IgZXhhbXBsZSwgdGhlIHVzZXIgZXhlY3V0aW5nIHRoZSBUZXN0IFN1aXRlIHdpbGwgbmVlZCB0aGUgcHJpdmlsZWdlCit0byBhY2Nlc3MgdGhlIGZpbGVzIGFuZCBuZXR3b3JrIHJlc291cmNlcyBuZWNlc3NhcnkgZm9yIHVzZSBvZiB0aGUKK1Byb2R1Y3QuCisKK3xTcGVjaWZpY2F0aW9ucyBhfAorVGhlIGRvY3VtZW50cyBwcm9kdWNlZCB0aHJvdWdoIHRoZSBKYWthcnRhIEVFIFNwZWNpZmljYXRpb24gUHJvY2VzcyAoSkVTUCkKK3RoYXQgZGVmaW5lIGEgcGFydGljdWxhciBWZXJzaW9uIG9mIGEgVGVjaG5vbG9neS4KKworVGhlIFNwZWNpZmljYXRpb25zIGZvciB0aGUgVGVjaG5vbG9neSBVbmRlciBUZXN0IGFyZSByZWZlcmVuY2VkIGxhdGVyIGluCit0aGlzIGNoYXB0ZXIuCisKK3xUZWNobm9sb2d5IHxTcGVjaWZpY2F0aW9ucyBhbmQgb25lIG9yIG1vcmUgY29tcGF0aWJsZSBpbXBsZW1lbnRhdGlvbnMgcHJvZHVjZWQKK3Rocm91Z2ggdGhlIEpha2FydGEgRUUgU3BlY2lmaWNhdGlvbiBQcm9jZXNzIChKRVNQKS4KKworfFRlY2hub2xvZ3kgVW5kZXIgVGVzdCB8U3BlY2lmaWNhdGlvbnMgYW5kIGEgY29tcGF0aWJsZSBpbXBsZW1lbnRhdGlvbgorZm9yIHtUZWNobm9sb2d5RnVsbE5hbWV9IFZlcnNpb24ge1RlY2hub2xvZ3lWZXJzaW9ufS4KKworfFRlc3QgU3VpdGUgfFRoZSByZXF1aXJlbWVudHMsIHRlc3RzLCBhbmQgdGVzdGluZyB0b29scyBkaXN0cmlidXRlZCBieQordGhlIE1haW50ZW5hbmNlIExlYWQgYXMgYXBwbGljYWJsZSB0byBhIGdpdmVuIFZlcnNpb24gb2YgdGhlIFRlY2hub2xvZ3kuCisKK3xWZXJzaW9uIHxBIHJlbGVhc2Ugb2YgdGhlIFRlY2hub2xvZ3ksIGFzIHByb2R1Y2VkIHRocm91Z2ggdGhlCitKYWthcnRhIEVFIFNwZWNpZmljYXRpb24gUHJvY2VzcyAoSkVTUCkuCisKK2luY2x1ZGU6OmRlZm5zLmluY1tdCit8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCitbW3N0aHJlZjddXVtbcnVsZXMtZm9yLXByb2R1Y3RzXV0KKworMi4yLjIgUnVsZXMgZm9yIHtUZWNobm9sb2d5RnVsbE5hbWV9IFByb2R1Y3RzCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworVGhlIGZvbGxvd2luZyBydWxlcyBhcHBseSBmb3IgZWFjaCB2ZXJzaW9uIG9mIGFuIG9wZXJhdGluZyBzeXN0ZW0sCitzb2Z0d2FyZSBjb21wb25lbnQsIGFuZCBoYXJkd2FyZSBwbGF0Zm9ybSBEb2N1bWVudGVkIGFzIHN1cHBvcnRpbmcgdGhlCitQcm9kdWN0OgorCisqe3RlY2hJRH0xKiBUaGUgUHJvZHVjdCBtdXN0IGJlIGFibGUgdG8gc2F0aXNmeSBhbGwgYXBwbGljYWJsZSBjb21wYXRpYmlsaXR5CityZXF1aXJlbWVudHMsIGluY2x1ZGluZyBwYXNzaW5nIGFsbCBDb25mb3JtYW5jZSBUZXN0cywgaW4gZXZlcnkgUHJvZHVjdAorQ29uZmlndXJhdGlvbiBhbmQgaW4gZXZlcnkgY29tYmluYXRpb24gb2YgUHJvZHVjdCBDb25maWd1cmF0aW9ucywgZXhjZXB0Citvbmx5IGFzIHNwZWNpZmljYWxseSBleGVtcHRlZCBieSB0aGVzZSBSdWxlcy4KKworRm9yIGV4YW1wbGUsIGlmIGEgUHJvZHVjdCBwcm92aWRlcyBkaXN0aW5jdCBPcGVyYXRpbmcgTW9kZXMgdG8gb3B0aW1pemUKK3BlcmZvcm1hbmNlLCB0aGVuIHRoYXQgUHJvZHVjdCBtdXN0IHNhdGlzZnkgYWxsIGFwcGxpY2FibGUgY29tcGF0aWJpbGl0eQorcmVxdWlyZW1lbnRzIGZvciBhIFByb2R1Y3QgaW4gZWFjaCBQcm9kdWN0IENvbmZpZ3VyYXRpb24sIGFuZAorY29tYmluYXRpb24gb2YgUHJvZHVjdCBDb25maWd1cmF0aW9ucywgb2YgdGhvc2UgT3BlcmF0aW5nIE1vZGVzLgorCisqe3RlY2hJRH0xLjEqIElmIGFuIE9wZXJhdGluZyBNb2RlIGNvbnRyb2xzIGEgUmVzb3VyY2UgbmVjZXNzYXJ5IGZvciB0aGUKK2Jhc2ljIGV4ZWN1dGlvbiBvZiB0aGUgVGVzdCBTdWl0ZSwgdGVzdGluZyBtYXkgYWx3YXlzIHVzZSBhIFByb2R1Y3QKK0NvbmZpZ3VyYXRpb24gb2YgdGhhdCBPcGVyYXRpbmcgTW9kZSBwcm92aWRpbmcgdGhhdCBSZXNvdXJjZSwgZXZlbiBpZgorb3RoZXIgUHJvZHVjdCBDb25maWd1cmF0aW9ucyBkbyBub3QgcHJvdmlkZSB0aGF0IFJlc291cmNlLgorTm90d2l0aHN0YW5kaW5nIHN1Y2ggZXhjZXB0aW9ucywgZWFjaCBQcm9kdWN0IG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgc2V0CitvZiBQcm9kdWN0IENvbmZpZ3VyYXRpb25zIG9mIHN1Y2ggT3BlcmF0aW5nIE1vZGVzIHRoYXQgaXMgYWJsZSB0byBwYXNzCithbGwgdGhlIENvbmZvcm1hbmNlIFRlc3RzLgorCitGb3IgZXhhbXBsZSwgYSBQcm9kdWN0IHdpdGggYW4gT3BlcmF0aW5nIE1vZGUgdGhhdCBjb250cm9scyBhIHNlY3VyaXR5Citwb2xpY3kgKGkuZS4sIFNlY3VyaXR5IFJlc291cmNlKSB3aGljaCBoYXMgb25lIG9yIG1vcmUgUHJvZHVjdAorQ29uZmlndXJhdGlvbnMgdGhhdCBjYXVzZSBDb25mb3JtYW5jZSBUZXN0cyB0byBmYWlsIG1heSBiZSB0ZXN0ZWQgdXNpbmcKK2EgUHJvZHVjdCBDb25maWd1cmF0aW9uIHRoYXQgYWxsb3dzIGFsbCBDb25mb3JtYW5jZSBUZXN0cyB0byBwYXNzLgorCisqe3RlY2hJRH0xLjIqIEEgUHJvZHVjdCBDb25maWd1cmF0aW9uIG9mIGFuIE9wZXJhdGluZyBNb2RlIHRoYXQgY2F1c2VzIHRoZQorUHJvZHVjdCB0byByZXBvcnQgb25seSB2ZXJzaW9uLCB1c2FnZSwgb3IgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbiBpcworZXhlbXB0ZWQgZnJvbSB0aGVzZSBjb21wYXRpYmlsaXR5IHJ1bGVzLgorCisqe3RlY2hJRH0xLjMqIEFuIEFQSSBEZWZpbml0aW9uIFByb2R1Y3QgaXMgZXhlbXB0IGZyb20gYWxsIGZ1bmN0aW9uYWwKK3Rlc3RpbmcgcmVxdWlyZW1lbnRzIGRlZmluZWQgaGVyZSwgZXhjZXB0IHRoZSBzaWduYXR1cmUgdGVzdHMuCisKKyp7dGVjaElEfTIqIFNvbWUgQ29uZm9ybWFuY2UgVGVzdHMgbWF5IGhhdmUgcHJvcGVydGllcyB0aGF0IG1heSBiZSBjaGFuZ2VkLgorUHJvcGVydGllcyB0aGF0IGNhbiBiZSBjaGFuZ2VkIGFyZSBpZGVudGlmaWVkIGluIHRoZSBjb25maWd1cmF0aW9uCitpbnRlcnZpZXcuIFByb3BlcnRpZXMgdGhhdCBjYW4gYmUgY2hhbmdlZCBhcmUgaWRlbnRpZmllZCBpbiB0aGUgSmF2YVRlc3QKK0Vudmlyb25tZW50ICguanRlKSBmaWxlcyBpbiB0aGUgVGVzdCBTdWl0ZQoraW5zdGFsbGF0aW9uLiBBcGFydCBmcm9tIGNoYW5naW5nIHN1Y2ggcHJvcGVydGllcyBhbmQgb3RoZXIgYWxsb3dlZAorbW9kaWZpY2F0aW9ucyBkZXNjcmliZWQgaW4gdGhpcyBVc2VyJ3MgR3VpZGUgKGlmIGFueSksIG5vIHNvdXJjZSBvcgorYmluYXJ5IGNvZGUgZm9yIGEgQ29uZm9ybWFuY2UgVGVzdCBtYXkgYmUgYWx0ZXJlZCBpbiBhbnkgd2F5IHdpdGhvdXQKK3ByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gQW55IHN1Y2ggYWxsb3dlZCBhbHRlcmF0aW9ucyB0byB0aGUKK0NvbmZvcm1hbmNlIFRlc3RzIHdpbGwgYmUgcHJvdmlkZWQgdmlhIHRoZSBKYWthcnRhIEVFIFNwZWNpZmljYXRpb24gUHJvamVjdCAKK3dlYnNpdGUgYW5kIGFwcGx5IHRvIGFsbCB2ZW5kb3IgY29tcGF0aWJsZSBpbXBsZW1lbnRhdGlvbnMuCisKKyp7dGVjaElEfTMqIFRoZSB0ZXN0aW5nIHRvb2xzIHN1cHBsaWVkIGFzIHBhcnQgb2YgdGhlIFRlc3QgU3VpdGUgb3IgYXMKK3VwZGF0ZWQgYnkgdGhlIE1haW50ZW5hbmNlIExlYWQgbXVzdCBiZSB1c2VkIHRvIGNlcnRpZnkgY29tcGxpYW5jZS4KKworKnt0ZWNoSUR9NCogVGhlIEV4Y2x1ZGUgTGlzdCBhc3NvY2lhdGVkIHdpdGggdGhlIFRlc3QgU3VpdGUgY2Fubm90IGJlCittb2RpZmllZC4KKworKnt0ZWNoSUR9NSogVGhlIE1haW50ZW5hbmNlIExlYWQgY2FuIGRlZmluZSBleGNlcHRpb25zIHRvIHRoZXNlIFJ1bGVzLiBTdWNoCitleGNlcHRpb25zIHdvdWxkIGJlIG1hZGUgYXZhaWxhYmxlIGFzIGFib3ZlLCBhbmQgd2lsbCBhcHBseSB0byBhbGwgdmVuZG9yIGltcGxlbWVudGF0aW9ucy4KKworKnt0ZWNoSUR9NiogQWxsIGhhcmR3YXJlIGFuZCBzb2Z0d2FyZSBjb21wb25lbnQgYWRkaXRpb25zLCBkZWxldGlvbnMsIGFuZAorbW9kaWZpY2F0aW9ucyB0byBhIERvY3VtZW50ZWQgc3VwcG9ydGluZyBoYXJkd2FyZS9zb2Z0d2FyZSBwbGF0Zm9ybSwKK3RoYXQgYXJlIG5vdCBwYXJ0IG9mIHRoZSBQcm9kdWN0IGJ1dCByZXF1aXJlZCBmb3IgdGhlIFByb2R1Y3QgdG8gc2F0aXNmeQordGhlIGNvbXBhdGliaWxpdHkgcmVxdWlyZW1lbnRzLCBtdXN0IGJlIERvY3VtZW50ZWQgYW5kIGF2YWlsYWJsZSB0bwordXNlcnMgb2YgdGhlIFByb2R1Y3QuCisKK0ZvciBleGFtcGxlLCBpZiBhIHBhdGNoIHRvIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIGEgc3VwcG9ydGluZworb3BlcmF0aW5nIHN5c3RlbSBpcyByZXF1aXJlZCBmb3IgdGhlIFByb2R1Y3QgdG8gcGFzcyB0aGUgQ29uZm9ybWFuY2UKK1Rlc3RzLCB0aGF0IHBhdGNoIG11c3QgYmUgRG9jdW1lbnRlZCBhbmQgYXZhaWxhYmxlIHRvIHVzZXJzIG9mIHRoZQorUHJvZHVjdC4KKworKnt0ZWNoSUR9NyogVGhlIFByb2R1Y3QgbXVzdCBjb250YWluIHRoZSBmdWxsIHNldCBvZiBwdWJsaWMgYW5kIHByb3RlY3RlZAorY2xhc3NlcyBhbmQgaW50ZXJmYWNlcyBmb3IgYWxsIHRoZSBMaWJyYXJpZXMuIFRob3NlIGNsYXNzZXMgYW5kCitpbnRlcmZhY2VzIG11c3QgY29udGFpbiBleGFjdGx5IHRoZSBzZXQgb2YgcHVibGljIGFuZCBwcm90ZWN0ZWQgbWV0aG9kcywKK2NvbnN0cnVjdG9ycywgYW5kIGZpZWxkcyBkZWZpbmVkIGJ5IHRoZSBTcGVjaWZpY2F0aW9ucyBmb3IgdGhvc2UKK0xpYnJhcmllcy4gTm8gc3Vic2V0dGluZywgc3VwZXJzZXR0aW5nLCBvciBtb2RpZmljYXRpb25zIG9mIHRoZSBwdWJsaWMKK2FuZCBwcm90ZWN0ZWQgQVBJIG9mIHRoZSBMaWJyYXJpZXMgYXJlIGFsbG93ZWQgZXhjZXB0IG9ubHkgYXMKK3NwZWNpZmljYWxseSBleGVtcHRlZCBieSB0aGVzZSBSdWxlcy4KKworKnt0ZWNoSUR9Ny4xKiBJZiBhIFByb2R1Y3QgaW5jbHVkZXMgVGVjaG5vbG9naWVzIGluIGFkZGl0aW9uIHRvIHRoZQorVGVjaG5vbG9neSBVbmRlciBUZXN0LCB0aGVuIGl0IG11c3QgY29udGFpbiB0aGUgZnVsbCBzZXQgb2YgY29tYmluZWQKK3B1YmxpYyBhbmQgcHJvdGVjdGVkIGNsYXNzZXMgYW5kIGludGVyZmFjZXMuIFRoZSBBUEkgb2YgdGhlIFByb2R1Y3QKK211c3QgY29udGFpbiB0aGUgdW5pb24gb2YgdGhlIGluY2x1ZGVkIFRlY2hub2xvZ2llcy4gTm8gZnVydGhlcgorbW9kaWZpY2F0aW9ucyB0byB0aGUgQVBJcyBvZiB0aGUgaW5jbHVkZWQgVGVjaG5vbG9naWVzIGFyZSBhbGxvd2VkLgorCitpZmRlZjo6c3Vic2V0LWFsbG93ZWRbXQorKnt0ZWNoSUR9Ny4yKiBUaGUgUHJvZHVjdCBtYXkgY29udGFpbiBhIHN1YnNldCBvZiB0aGUgY2xhc3NlcyBhbmQKK2ludGVyZmFjZXMgZm9yIHRoZSBMaWJyYXJpZXMuCitlbmRpZjo6c3Vic2V0LWFsbG93ZWRbXQorCisqe3RlY2hJRH04KiBFeGNlcHQgZm9yIHRlc3RzIHNwZWNpZmljYWxseSByZXF1aXJlZCBieSB0aGlzIFRDSyB0byBiZSByZWJ1aWx0CisoaWYgYW55KSwgdGhlIGJpbmFyeSBDb25mb3JtYW5jZSBUZXN0cyBzdXBwbGllZCBhcyBwYXJ0IG9mIHRoZSBUZXN0CitTdWl0ZSBvciBhcyB1cGRhdGVkIGJ5IHRoZSBNYWludGVuYW5jZSBMZWFkIG11c3QgYmUgdXNlZCB0byBjZXJ0aWZ5Citjb21wbGlhbmNlLgorCisqe3RlY2hJRH05KiBUaGUgZnVuY3Rpb25hbCBwcm9ncmFtbWF0aWMgYmVoYXZpb3Igb2YgYW55IGJpbmFyeSBjbGFzcyBvcgoraW50ZXJmYWNlIG11c3QgYmUgdGhhdCBkZWZpbmVkIGJ5IHRoZSBTcGVjaWZpY2F0aW9ucy4KKworaW5jbHVkZTo6cnVsZXMuaW5jW10KKworW1tDSkFJSUJESl1dW1t0ZXN0LWFwcGVhbHMtcHJvY2Vzc11dCisKKzIuMyBUZXN0IEFwcGVhbHMgUHJvY2Vzcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0pha2FydGEgaGFzIGEgd2VsbCBlc3RhYmxpc2hlZCBwcm9jZXNzIGZvciBtYW5hZ2luZyBjaGFsbGVuZ2VzIHRvIGl0cworVENLcy4gQW55IGltcGxlbWVudG9yIG1heSBzdWJtaXQgYSBjaGFsbGVuZ2UgdG8gb25lIG9yIG1vcmUgdGVzdHMgaW4gdGhlCit7VGVjaG5vbG9neVNob3J0TmFtZX0gVENLIGFzIGl0IHJlbGF0ZXMgdG8gdGhlaXIgaW1wbGVtZW50YXRpb24uICBJbXBsZW1lbnRvcgorbWVhbnMgdGhlIGVudGl0eSBhcyBhIHdob2xlIGluIGNoYXJnZSBvZiBwcm9kdWNpbmcgdGhlIGZpbmFsIGNlcnRpZmllZCByZWxlYXNlLgorKkNoYWxsZW5nZXMgZmlsZWQgc2hvdWxkIHJlcHJlc2VudCB0aGUgY29uc2Vuc3VzIG9mIHRoYXQgZW50aXR5Ki4KKworMi4zLjEgVmFsaWQgQ2hhbGxlbmdlcworXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorQW55IHRlc3QgY2FzZSAoZS5nLiwgdGVzdCBjbGFzcywgQFRlc3QgbWV0aG9kKSwgdGVzdCBjYXNlIGNvbmZpZ3VyYXRpb24gKGUuZy4sIGRlcGxveW1lbnQgZGVzY3JpcHRvciksIHRlc3QgYmVhbnMsIGFubm90YXRpb25zLCBhbmQgb3RoZXIgcmVzb3VyY2VzIGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgVENLIG1heSBiZSBjaGFsbGVuZ2VkLgorCitUaGUgZm9sbG93aW5nIHNjZW5hcmlvcyBhcmUgY29uc2lkZXJlZCBpbiBzY29wZSBmb3IgdGVzdCBjaGFsbGVuZ2VzOgorCisqIENsYWltcyB0aGF0IGEgdGVzdCBhc3NlcnRpb24gY29uZmxpY3RzIHdpdGggdGhlIHNwZWNpZmljYXRpb24uCisqIENsYWltcyB0aGF0IGEgdGVzdCBhc3NlcnRzIHJlcXVpcmVtZW50cyBvdmVyIGFuZCBhYm92ZSB0aGF0IG9mIHRoZSBzcGVjaWZpY2F0aW9uLgorKiBDbGFpbXMgdGhhdCBhbiBhc3NlcnRpb24gb2YgdGhlIHNwZWNpZmljYXRpb24gaXMgbm90IHN1ZmZpY2llbnRseSBpbXBsZW1lbnRhYmxlLgorKiBDbGFpbXMgdGhhdCBhIHRlc3QgaXMgbm90IHBvcnRhYmxlIG9yIGRlcGVuZHMgb24gYSBwYXJ0aWN1bGFyIGltcGxlbWVudGF0aW9uLgorCisyLjMuMiBJbnZhbGlkIENoYWxsZW5nZXMKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorVGhlIGZvbGxvd2luZyBzY2VuYXJpb3MgYXJlIGNvbnNpZGVyZWQgb3V0IG9mIHNjb3BlIGZvciB0ZXN0IGNoYWxsZW5nZXMgYW5kIHdpbGwgYmUgaW1tZWRpYXRlbHkgY2xvc2VkIGlmIGZpbGVkOgorCisqIENoYWxsZW5naW5nIGFuIGltcGxlbWVudGF0aW9u4oCZcyBjbGFpbSBvZiBwYXNzaW5nIGEgdGVzdC4gIENlcnRpZmljYXRpb24gaXMgYW4gaG9ub3Igc3lzdGVtIGFuZCB0aGVzZSBpc3N1ZXMgbXVzdCBiZSByYWlzZWQgZGlyZWN0bHkgd2l0aCB0aGUgaW1wbGVtZW50YXRpb24uCisqIENoYWxsZW5naW5nIHRoZSB1c2VmdWxuZXNzIG9mIGEgc3BlY2lmaWNhdGlvbiByZXF1aXJlbWVudC4gIFRoZSBjaGFsbGVuZ2UgcHJvY2VzcyBjYW5ub3QgYmUgdXNlZCB0byBieXBhc3MgdGhlIHNwZWNpZmljYXRpb24gcHJvY2VzcyBhbmQgcmFpc2UgaW4gcXVlc3Rpb24gdGhlIG5lZWQgb3IgcmVsZXZhbmNlIG9mIGEgc3BlY2lmaWNhdGlvbiByZXF1aXJlbWVudC4KKyogQ2xhaW1zIHRoZSBUQ0sgaXMgaW5hZGVxdWF0ZSBvciBtaXNzaW5nIGFzc2VydGlvbnMgcmVxdWlyZWQgYnkgdGhlIHNwZWNpZmljYXRpb24uICBTZWUgdGhlIEltcHJvdmVtZW50IHNlY3Rpb24sIHdoaWNoIGlzIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRlc3QgY2hhbGxlbmdlcy4KKyogQ2hhbGxlbmdlcyB0aGF0IGRvIG5vdCByZXByZXNlbnQgYSBjb25zZW5zdXMgb2YgdGhlIGltcGxlbWVudGluZyBjb21tdW5pdHkgd2lsbCBiZSBjbG9zZWQgdW50aWwgc3VjaCB0aW1lIHRoYXQgdGhlIGNvbW11bml0eSBkb2VzIGFncmVlIG9yIGFncmVlbWVudCBjYW5ub3QgYmUgbWFkZS4gIFRoZSB0ZXN0IGNoYWxsZW5nZSBwcm9jZXNzIGlzIG5vdCB0aGUgcGxhY2UgZm9yIGltcGxlbWVudGF0aW9ucyB0byBpbml0aWF0ZSB0aGVpciBvd24gaW50ZXJuYWwgZGlzY3Vzc2lvbnMuCisqIENoYWxsZW5nZXMgdG8gdGVzdHMgdGhhdCBhcmUgYWxyZWFkeSBleGNsdWRlZCBmb3IgYW55IHJlYXNvbi4KKyogQ2hhbGxlbmdlcyB0aGF0IGFuIGV4Y2x1ZGVkIHRlc3Qgc2hvdWxkIG5vdCBoYXZlIGJlZW4gZXhjbHVkZWQgYW5kIHNob3VsZCBiZSByZS1hZGRlZCBzaG91bGQgYmUgb3BlbmVkIGFzIGEgbmV3IGVuaGFuY2VtZW50IHJlcXVlc3QKKworVGVzdCBjaGFsbGVuZ2VzIG11c3QgYmUgbWFkZSBpbiB3cml0aW5nIHZpYSB0aGUge1RlY2hub2xvZ3lTaG9ydE5hbWV9IHNwZWNpZmljYXRpb24gcHJvamVjdCBpc3N1ZSB0cmFja2VyCithcyBkZXNjcmliZWQgaW4gbGluazojQ0pBSkVBRUlbU2VjdGlvbiAyLjMuMywgIlRDSyBUZXN0IEFwcGVhbHMgU3RlcHMuIl0KKworQWxsIHRlc3RzIGZvdW5kIHRvIGJlIGludmFsaWQgd2lsbCBiZSBwbGFjZWQgb24gdGhlIEV4Y2x1ZGUgTGlzdAorZm9yIHRoYXQgdmVyc2lvbiBvZiB0aGUge1RlY2hub2xvZ3lTaG9ydE5hbWV9IFRDSy4KKworCitbW0NKQUpFQUVJXV1bW3Rjay10ZXN0LWFwcGVhbHMtc3RlcHNdXQorCisyLjMuMyBUQ0sgVGVzdCBBcHBlYWxzIFN0ZXBzCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKKzEuIENoYWxsZW5nZXMgc2hvdWxkIGJlIGZpbGVkIHZpYSB0aGUge1RlY2hub2xvZ3lGdWxsTmFtZX0gc3BlY2lmaWNhdGlvbiBwcm9qZWN04oCZcyBpc3N1ZSB0cmFja2VyIHVzaW5nIHRoZSBsYWJlbCBgY2hhbGxlbmdlYCBhbmQgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOgorKiBUaGUgcmVsZXZhbnQgc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGFuZCBzZWN0aW9uIG51bWJlcihzKQorKiBUaGUgY29vcmRpbmF0ZXMgb2YgdGhlIGNoYWxsZW5nZWQgdGVzdChzKQorKiBUaGUgZXhhY3QgVENLIGFuZCBleGNsdWRlIGxpc3QgdmVyc2lvbnMKKyogVGhlIGltcGxlbWVudGF0aW9uIGJlaW5nIHRlc3RlZCwgaW5jbHVkaW5nIG5hbWUgYW5kIGNvbXBhbnkKKyogVGhlIGZ1bGwgdGVzdCBuYW1lCisqIEEgZnVsbCBkZXNjcmlwdGlvbiBvZiB3aHkgdGhlIHRlc3QgaXMgaW52YWxpZCBhbmQgd2hhdCB0aGUgY29ycmVjdCBiZWhhdmlvciBpcyBiZWxpZXZlZCB0byBiZQorKiBBbnkgc3VwcG9ydGluZyBtYXRlcmlhbDsgZGVidWcgbG9ncywgdGVzdCBvdXRwdXQsIHRlc3QgbG9ncywgcnVuIHNjcmlwdHMsIGV0Yy4KKworCisKKzIuIFNwZWNpZmljYXRpb24gcHJvamVjdCBldmFsdWF0ZXMgdGhlIGNoYWxsZW5nZS4gKworQ2hhbGxlbmdlcyBjYW4gYmUgcmVzb2x2ZWQgYnkgYSBzcGVjaWZpY2F0aW9uIHByb2plY3QgbGVhZCwgb3IgYSBwcm9qZWN0IGNoYWxsZW5nZSB0cmlhZ2UgdGVhbSwgYWZ0ZXIgYSBjb25zZW5zdXMgb2YgdGhlIHNwZWNpZmljYXRpb24gcHJvamVjdCBjb21taXR0ZXJzIGlzIHJlYWNoZWQgb3IgYXR0ZW1wdHMgdG8gZ2FpbiBjb25zZW5zdXMgZmFpbHMuCitTcGVjaWZpY2F0aW9uIHByb2plY3RzIG1heSBleGVyY2lzZSBsYXp5IGNvbnNlbnN1cywgdm90aW5nIG9yIGFueSBwcmFjdGljZSB0aGF0IGZvbGxvd3MgdGhlIHByaW5jaXBsZXMgb2YgRWNsaXBzZSBGb3VuZGF0aW9uIERldmVsb3BtZW50IFByb2Nlc3MuCitUaGUgZXhwZWN0ZWQgdGltZWZyYW1lIGZvciBhIHJlc3BvbnNlIGlzIHR3byB3ZWVrcyBvciBsZXNzLgorSWYgY29uc2Vuc3VzIGNhbm5vdCBiZSByZWFjaGVkIGJ5IHRoZSBzcGVjaWZpY2F0aW9uIHByb2plY3QgZm9yIGEgcHJvbG9uZ2VkIHBlcmlvZCBvZiB0aW1lLCB0aGUgZGVmYXVsdCByZWNvbW1lbmRhdGlvbiBpcyB0byBleGNsdWRlIHRoZSB0ZXN0cyBhbmQgYWRkcmVzcyB0aGUgZGlzcHV0ZSBpbiBhIGZ1dHVyZSByZXZpc2lvbiBvZiB0aGUgc3BlY2lmaWNhdGlvbi4KKworMy4gIEFjY2VwdGVkIENoYWxsZW5nZXMuICsKK0EgY29uc2Vuc3VzIHRoYXQgYSB0ZXN0IHByb2R1Y2VzIGludmFsaWQgcmVzdWx0cyB3aWxsIHJlc3VsdCBpbiB0aGUgZXhjbHVzaW9uIG9mIHRoYXQgdGVzdCBmcm9tIGNlcnRpZmljYXRpb24gcmVxdWlyZW1lbnRzLCBhbmQgYW4gaW1tZWRpYXRlIHVwZGF0ZSBhbmQgcmVsZWFzZSBvZiBhbiBvZmZpY2lhbCBkaXN0cmlidXRpb24gb2YgdGhlIFRDSyBpbmNsdWRpbmcgdGhlIG5ldyBleGNsdWRlIGxpc3QuIFRoZSBhc3NvY2lhdGVkIGBjaGFsbGVuZ2VgIGlzc3VlIG11c3QgYmUgY2xvc2VkIHdpdGggYW4gYGFjY2VwdGVkYCBsYWJlbCB0byBpbmRpY2F0ZSBpdCBoYXMgYmVlbiByZXNvbHZlZC4KKworNC4gIFJlamVjdGVkIENoYWxsZW5nZXMgYW5kIFJlbWVkeS4gKworV2hlbiBhYGNoYWxsZW5nZWAgaXNzdWUgaXMgcmVqZWN0ZWQsIGl0IG11c3QgYmUgY2xvc2VkIHdpdGggYSBsYWJlbCBvZiBgaW52YWxpZGAgdG8gaW5kaWNhdGUgaXQgaGFzIGJlZW4gcmVqZWN0ZWQuCitUaGVyZSBhcHBlYWwgcHJvY2VzcyBmb3IgY2hhbGxlbmdlcyByZWplY3RlZCBvbiB0ZWNobmljYWwgdGVybXMgaXMgb3V0bGluZWQgaW4gRXNjYWxhdGlvbiBBcHBlYWwuCitJZiwgaG93ZXZlciwgYW4gaW1wbGVtZW50ZXIgZmVlbHMgdGhlIFRDSyBjaGFsbGVuZ2UgcHJvY2VzcyB3YXMgbm90IGZvbGxvd2VkLCBhbiBhcHBlYWwgaXNzdWUgc2hvdWxkIGJlIGZpbGVkIHdpdGggc3BlY2lmaWNhdGlvbiBwcm9qZWN04oCZcyBUQ0sgaXNzdWUgdHJhY2tlciB1c2luZyB0aGUgbGFiZWwgYGNoYWxsZW5nZS1hcHBlYWxgLgorQSBwcm9qZWN0IGxlYWQgc2hvdWxkIGVzY2FsYXRlIHRoZSBpc3N1ZSB3aXRoIHRoZSBKYWthcnRhIEVFIFNwZWNpZmljYXRpb24gQ29tbWl0dGVlIHZpYSBlbWFpbCAoamFrYXJ0YS5lZS1zcGVjQGVjbGlwc2Uub3JnKS4KK1RoZSBjb21taXR0ZWUgd2lsbCBldmFsdWF0ZSB0aGUgbWF0dGVyIHB1cmVseSBpbiB0ZXJtcyBvZiBkdWUgcHJvY2Vzcy4KK0lmIHRoZSBhcHBlYWwgaXMgYWNjZXB0ZWQsIHRoZSBvcmlnaW5hbCBUQ0sgY2hhbGxlbmdlIGlzc3VlIHdpbGwgYmUgcmVvcGVuZWQgYW5kIGEgbGFiZWwgb2YgYGFwcGVhbGVkLWNoYWxsZW5nZWAgYWRkZWQsIGFsb25nIHdpdGggYSBkaXNjdXNzaW9uIG9mIHRoZSBhcHBlYWwgZGVjaXNpb24sIGFuZCB0aGUgYGNoYWxsZW5nZS1hcHBlYWxgIGlzc3VlIHdpdGggYmUgY2xvc2VkLgorSWYgdGhlIGFwcGVhbCBpcyByZWplY3RlZCwgdGhlIGBjaGFsbGVuZ2UtYXBwZWFsYCBpc3N1ZSBzaG91bGQgY2xvc2VkIHdpdGggYSBsYWJlbCBvZiBgaW52YWxpZGAuCisKKzUuIEVzY2FsYXRpb24gQXBwZWFsLiArCitJZiB0aGVyZSBpcyBhIGNvbmNlcm4gdGhhdCBhIFRDSyBwcm9jZXNzIGlzc3VlIGhhcyBub3QgYmVlbiByZXNvbHZlZCBzYXRpc2ZhY3RvcmlseSwgdGhlCitodHRwczovL3d3dy5lY2xpcHNlLm9yZy9wcm9qZWN0cy9kZXZfcHJvY2Vzcy8jNl81X0dyaWV2YW5jZV9IYW5kbGluZ1tFY2xpcHNlIERldmVsb3BtZW50IFByb2Nlc3MgR3JpZXZhbmNlIEhhbmRsaW5nXSBwcm9jZWR1cmUgc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGVzY2FsYXRlIHRoZSByZXNvbHV0aW9uLiBOb3RlIHRoYXQgdGhpcyBpcyBub3QgYSBtZWNoYW5pc20gdG8gYXR0ZW1wdCB0byBoYW5kbGUgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgaXNzdWVzLgorCisKK1tbQ0pBSkVDSUVdXVtbc3BlY2lmaWNhdGlvbnMtZm9yLXRlY2hub2xvZ3ldXQorCisyLjQgU3BlY2lmaWNhdGlvbnMgZm9yIHtUZWNobm9sb2d5RnVsbE5hbWV9Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoZSB7VGVjaG5vbG9neUZ1bGxOYW1lfSBzcGVjaWZpY2F0aW9uIGlzIGF2YWlsYWJsZSBmcm9tIHRoZSBzcGVjaWZpY2F0aW9uCitwcm9qZWN0IHdlYi1zaXRlOiB7U3BlY2lmaWNhdGlvblVSTH0uCisKK1tbQ0pBQkFIR0ldXVtbbGlicmFyaWVzLWZvci10ZWNobm9sb2d5XV0KKworMi41IExpYnJhcmllcyBmb3Ige1RlY2hub2xvZ3lGdWxsTmFtZX0KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoZSBmb2xsb3dpbmcgaXMgYSBsaXN0IG9mIHRoZSBwYWNrYWdlcyBjb21wcmlzaW5nIHRoZSByZXF1aXJlZCBjbGFzcworbGlicmFyaWVzIGZvciB7VGVjaG5vbG9neVNob3J0TmFtZX0ge1RlY2hub2xvZ3lWZXJzaW9ufToKKworaW5jbHVkZTo6cGFja2FnZXMuaW5jW10KKworRm9yIHRoZSBsYXRlc3QgbGlzdCBvZiBwYWNrYWdlcywgYWxzbyBzZWU6CisKK3tTcGVjaWZpY2F0aW9uVVJMfQpkaWZmIC0tZ2l0IGEvdGNrL2RvY3MvdXNlcmd1aWRlL3NyYy9tYWluL2piYWtlL2NvbnRlbnQvcnVsZXMuaW5jIGIvdGNrL2RvY3MvdXNlcmd1aWRlL3NyYy9tYWluL2piYWtlL2NvbnRlbnQvcnVsZXMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1YTI1MGYKLS0tIC9kZXYvbnVsbAorKysgYi90Y2svZG9jcy91c2VyZ3VpZGUvc3JjL21haW4vamJha2UvY29udGVudC9ydWxlcy5pbmMKQEAgLTAsMCArMSw3OCBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK05PVEUgVE8gV1JJVEVSUzoKK01vc3QgdGVjaG5vbG9naWVzIHdpbGwgb25seSBuZWVkIHRoZSBjb21wYXRpYmlsaXR5IHJ1bGVzIGluIHJ1bGVzLmFkb2MuCitTb21lIHRlY2hub2xvZ2llcyB3aWxsIG5lZWQgYWRkaXRpb25hbCBydWxlcy4gIElmIHRoZXkncmUgbmVlZGVkLAorcmVtb3ZlIHRoZSBjb21tZW50IGJsb2NrIGRlbGltaXRlcnMgYmVsb3cgYW5kIHVwZGF0ZSB0aGUgcnVsZXMgYXMKK2FwcHJvcHJpYXRlLiAgWW91IG1heSBuZWVkIHRvIGFkanVzdCB0aGUgcnVsZSBudW1iZXJzIHRvIGF2b2lkIGdhcHMuCisKK1RoZSBmaXJzdCBjb21tZW50IGJsb2NrIGJlbG93IGlzIGFkZGl0aW9uYWwgcnVsZXMgbmVlZGVkIGJ5IEpQQS4KKworVGhlIHNlY29uZCBjb21tZW50IGJsb2NrIGJlbG93IGlzIGFkZGl0aW9uYWwgcnVsZXMgbmVlZGVkIGJ5CitKU1AgYW5kIFNlcnZsZXQuICAoQW5kIEVKQiwgaWYgaXQgaGFkIGEgc3RhbmRhbG9uZSBUQ0suKQorCitUaGUgdGhpcmQgY29tbWVudCBibG9jayBiZWxvdyBpcyBhZGRpdGlvbmFsIHJ1bGVzIHRoYXQgYXBwbHkKK3RvIGFueSB0ZWNobm9sb2d5IHRoYXQgZGVmaW5lcyBkZXBsb3ltZW50IGRlc2NyaXB0b3JzLgorCitUaGUgZm91cnRoIGNvbW1lbnQgYmxvY2sgaXMgc3BlY2lhbCBydWxlcyB0aGF0IGFwcGx5IG9ubHkgdG8gSlNQLgorCitOT1RFOiBUaGlzIHNldCBvZiBleGFtcGxlcyBpcyBOT1QgY29tcGxldGUsIGJ1dCBzaG91bGQgYmUuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKnt0ZWNoSUR9MTAqIFRoZSBSdW50aW1lIG11c3QgcmVwb3J0IGFuIGVycm9yIHdoZW4gcHJvY2Vzc2luZyBhCitDb25maWd1cmF0aW9uIERlc2NyaXB0b3IgdGhhdCBkb2VzIG5vdCBjb25mb3JtIHRvIHRoZSBTcGVjaWZpY2F0aW9ucy4KKworKnt0ZWNoSUR9MTEqIEFuIGVycm9yIG11c3QgYmUgcmVwb3J0ZWQgd2hlbiBwcm9jZXNzaW5nIGEgY29uZmlndXJhdGlvbgorZGVzY3JpcHRvciB0aGF0IGluY2x1ZGVzIGEgSmF2YSBQZXJzaXN0ZW5jZSBRTCBleHByZXNzaW9uIHRoYXQgZG9lcyBub3QKK2NvbmZvcm0gdG8gdGhlIFNwZWNpZmljYXRpb25zLgorCisqe3RlY2hJRH0xMiogVGhlIHByZXNlbmNlIG9mIGFuIFhNTCBjb21tZW50IGluIGEgQ29uZmlndXJhdGlvbgorRGVzY3JpcHRvciwgd2hlbiBwcm9jZXNzZWQgYnkgdGhlIFJ1bnRpbWUsIG11c3Qgbm90IGNhdXNlIHRoZQorZnVuY3Rpb25hbCBwcm9ncmFtbWF0aWMgYmVoYXZpb3Igb2YgdGhlIFJ1bnRpbWUgdG8gdmFyeSBmcm9tIHRoZQorZnVuY3Rpb25hbCBwcm9ncmFtbWF0aWMgYmVoYXZpb3Igb2YgdGhlIFJ1bnRpbWUgaW4gdGhlIGFic2VuY2Ugb2YgdGhhdAorY29tbWVudC4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisqe3RlY2hJRH0xMCogRWFjaCBDb250YWluZXIgbXVzdCBtYWtlIHRlY2huaWNhbGx5IGFjY2Vzc2libGUgYWxsIEphdmEgU0UKK1J1bnRpbWUgaW50ZXJmYWNlcyBhbmQgZnVuY3Rpb25hbGl0eSwgYXMgZGVmaW5lZCBieSB0aGUgU3BlY2lmaWNhdGlvbnMsCit0byBwcm9ncmFtcyBydW5uaW5nIGluIHRoZSBDb250YWluZXIsIGV4Y2VwdCBvbmx5IGFzIHNwZWNpZmljYWxseQorZXhlbXB0ZWQgYnkgdGhlc2UgUnVsZXMuCisKKyp7dGVjaElEfTEwLjEqIENvbnRhaW5lcnMgbWF5IGltcG9zZSBzZWN1cml0eSBjb25zdHJhaW50cywgYXMgZGVmaW5lZCBieQordGhlIFNwZWNpZmljYXRpb25zLgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyp7dGVjaElEfTExKiBBIERlcGxveW1lbnQgVG9vbCBtdXN0IHJlcG9ydCBhbiBlcnJvciB3aGVuIHByb2Nlc3NpbmcgYQorQ29uZmlndXJhdGlvbiBEZXNjcmlwdG9yIHRoYXQgZG9lcyBub3QgY29uZm9ybSB0byB0aGUgU3BlY2lmaWNhdGlvbnMuCisKKyp7dGVjaElEfTEyKiBUaGUgcHJlc2VuY2Ugb2YgYW4gWE1MIGNvbW1lbnQgaW4gYSBDb25maWd1cmF0aW9uCitEZXNjcmlwdG9yLCB3aGVuIHByb2Nlc3NlZCBieSBhIERlcGxveW1lbnQgVG9vbCwgbXVzdCBub3QgY2F1c2UgdGhlCitmdW5jdGlvbmFsIHByb2dyYW1tYXRpYyBiZWhhdmlvciBvZiB0aGUgRGVwbG95bWVudCBUb29sIHRvIHZhcnkgZnJvbQordGhlIGZ1bmN0aW9uYWwgcHJvZ3JhbW1hdGljIGJlaGF2aW9yIG9mIHRoZSBEZXBsb3ltZW50IFRvb2wgaW4gdGhlCithYnNlbmNlIG9mIHRoYXQgY29tbWVudC4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisqe3RlY2hJRH0xMSogQSB3ZWIgQ29udGFpbmVyIG11c3QgcmVwb3J0IGFuIGVycm9yLCBhcyBkZWZpbmVkIGJ5IHRoZQorU3BlY2lmaWNhdGlvbnMsIHdoZW4gcHJvY2Vzc2luZyBhIEpTUCBQYWdlIHRoYXQgZG9lcyBub3QgY29uZm9ybSB0byB0aGUKK1NwZWNpZmljYXRpb25zLgorCisqe3RlY2hJRH0xMiogVGhlIHByZXNlbmNlIG9mIGEgSmF2YSBsYW5ndWFnZSBjb21tZW50IG9yIEphdmEgbGFuZ3VhZ2UKK2RpcmVjdGl2ZSBpbiBhIEpTUCBQYWdlIHRoYXQgc3BlY2lmaWVzIOKAnWphdmHigJ0gYXMgdGhlIHNjcmlwdGluZworbGFuZ3VhZ2UsIHdoZW4gcHJvY2Vzc2VkIGJ5IGEgd2ViIENvbnRhaW5lciwgbXVzdCBub3QgY2F1c2UgdGhlCitmdW5jdGlvbmFsIHByb2dyYW1tYXRpYyBiZWhhdmlvciBvZiB0aGF0IEpTUCBQYWdlIHRvIHZhcnkgZnJvbSB0aGUKK2Z1bmN0aW9uYWwgcHJvZ3JhbW1hdGljIGJlaGF2aW9yIG9mIHRoYXQgSlNQIFBhZ2UgaW4gdGhlIGFic2VuY2Ugb2YKK3RoYXQgSmF2YSBsYW5ndWFnZSBjb21tZW50IG9yIEphdmEgbGFuZ3VhZ2UgZGlyZWN0aXZlLgorCisqe3RlY2hJRH0xMyogVGhlIGNvbnRlbnRzIG9mIGFueSBmaXhlZCB0ZW1wbGF0ZSBkYXRhIChkZWZpbmVkIGJ5IHRoZQorU3BlY2lmaWNhdGlvbnMpIGluIGEgSlNQIFBhZ2UsIHdoZW4gcHJvY2Vzc2VkIGJ5IGEgd2ViIENvbnRhaW5lciwgbXVzdAorbm90IGFmZmVjdCB0aGUgZnVuY3Rpb25hbCBwcm9ncmFtbWF0aWMgYmVoYXZpb3Igb2YgdGhhdCBKU1AgUGFnZSwKK2V4Y2VwdCBhcyBkZWZpbmVkIGJ5IHRoZSBTcGVjaWZpY2F0aW9ucy4KKworKnt0ZWNoSUR9MTQqIFRoZSBmdW5jdGlvbmFsIHByb2dyYW1tYXRpYyBiZWhhdmlvciBvZiBhIEpTUCBQYWdlIHRoYXQKK3NwZWNpZmllcyDigJ1qYXZh4oCdIGFzIHRoZSBzY3JpcHRpbmcgbGFuZ3VhZ2UgbXVzdCBiZSBlcXVpdmFsZW50IHRvIHRoZQorZnVuY3Rpb25hbCBwcm9ncmFtbWF0aWMgYmVoYXZpb3Igb2YgdGhlIEpTUCBQYWdlIEltcGxlbWVudGF0aW9uIENsYXNzCitjb25zdHJ1Y3RlZCBmcm9tIHRoYXQgSlNQIFBhZ2UuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpkaWZmIC0tZ2l0IGEvdGNrL2RvY3MvdXNlcmd1aWRlL3NyYy9tYWluL2piYWtlL2NvbnRlbnQvdGNrLXBhY2thZ2VzLmluYyBiL3Rjay9kb2NzL3VzZXJndWlkZS9zcmMvbWFpbi9qYmFrZS9jb250ZW50L3Rjay1wYWNrYWdlcy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3Rjay9kb2NzL3VzZXJndWlkZS9zcmMvbWFpbi9qYmFrZS9jb250ZW50L3Rjay1wYWNrYWdlcy5pbmMKZGlmZiAtLWdpdCBhL3Rjay9kb2NzL3VzZXJndWlkZS9zcmMvbWFpbi9qYmFrZS9jb250ZW50L3RpdGxlLmFkb2MgYi90Y2svZG9jcy91c2VyZ3VpZGUvc3JjL21haW4vamJha2UvY29udGVudC90aXRsZS5hZG9jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjOWQ3MzUKLS0tIC9kZXYvbnVsbAorKysgYi90Y2svZG9jcy91c2VyZ3VpZGUvc3JjL21haW4vamJha2UvY29udGVudC90aXRsZS5hZG9jCkBAIC0wLDAgKzEsNDAgQEAKK3R5cGU9cGFnZQorc3RhdHVzPXB1Ymxpc2hlZAordGl0bGU9VENLIFVzZXIncyBHdWlkZSBmb3IgVGVjaG5vbG9neSBJbXBsZW1lbnRvcnMKK25leHQ9cHJlZmFjZS5odG1sCitwcmV2PXRvYy5odG1sCit+fn5+fn4KK2luY2x1ZGU6OmF0dHJpYnV0ZXMuY29uZltdCisKK1RDSyBVc2VyJ3MgR3VpZGUgZm9yIHtUZWNobm9sb2d5RnVsbE5hbWV9LCBSZWxlYXNlIHtUZWNobm9sb2d5VmVyc2lvbn0gZm9yIEpha2FydGEgRUUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworW1tlY2xpcHNlLWZvdW5kYXRpb25dXQorRWNsaXBzZSBGb3VuZGF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0KKworVGVjaG5vbG9neSBDb21wYXRpYmlsaXR5IEtpdCBVc2VyJ3MgR3VpZGUgZm9yIHtUZWNobm9sb2d5RnVsbE5hbWV9CisKK1JlbGVhc2Uge1RlY2hub2xvZ3lWZXJzaW9ufSBmb3IgSmFrYXJ0YSBFRQorCit7UmVsZWFzZURhdGV9CisKK1tbc3RocmVmMV1dCisKKycnJycnCisKK1RlY2hub2xvZ3kgQ29tcGF0aWJpbGl0eSBLaXQgVXNlcidzIEd1aWRlIGZvciB7VGVjaG5vbG9neUZ1bGxOYW1lfSwKK1JlbGVhc2Uge1RlY2hub2xvZ3lWZXJzaW9ufSBmb3IgSmFrYXJ0YSBFRQorCitDb3B5cmlnaHQgwqkge0NvcHlyaWdodERhdGVzfcKgT3JhY2xlIGFuZC9vciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2LiAyLjAsIHdoaWNoIGlzIGF2YWlsYWJsZSBhdAoraHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLgorCitTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMAorCitPcmFjbGUgYW5kIEphdmEgYXJlIHJlZ2lzdGVyZWQgdHJhZGVtYXJrcyBvZiBPcmFjbGUgYW5kL29yIGl0cworYWZmaWxpYXRlcy4gT3RoZXIgbmFtZXMgbWF5IGJlIHRyYWRlbWFya3Mgb2YgdGhlaXIgcmVzcGVjdGl2ZSBvd25lcnMuCisKK2luY2x1ZGU6OnRpdGxlLmluY1tdCmRpZmYgLS1naXQgYS90Y2svZG9jcy91c2VyZ3VpZGUvc3JjL21haW4vamJha2UvY29udGVudC90aXRsZS5pbmMgYi90Y2svZG9jcy91c2VyZ3VpZGUvc3JjL21haW4vamJha2UvY29udGVudC90aXRsZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjViZjQ3ZQotLS0gL2Rldi9udWxsCisrKyBiL3Rjay9kb2NzL3VzZXJndWlkZS9zcmMvbWFpbi9qYmFrZS9jb250ZW50L3RpdGxlLmluYwpAQCAtMCwwICsxLDExIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworTk9URSBUTyBXUklURVJTOgorVGhpcyBpcyBpbmNsdWRlZCBhdCB0aGUgdGFpbCBlbmQgb2YgdGhlIFRpdGxlIHBhZ2UuCitUaGUgZm9sbG93aW5nIHNlY3Rpb24gc2hvdWxkIGJlIGN1c3RvbWl6ZWQgZm9yIHRoZSB0ZWNobm9sb2d5LgorVGhpcyBpcyBwcm92aWRlZCB0byBhbGxvdyBlYWNoIHRlY2hub2xvZ3kgdG8gY3VzdG9taXplIGxlZ2FjeSBhY3JvbnltIG5hbWVzCit0aGF0IGFyZSB1c2VkIGluIHRoaXMgVENLLiAKK0JlIHN1cmUgdG8gY3VzdG9taXplIExlZ2FjeUFjcm9ueW0gaW4gYXR0cmlidXRlcy5jb25mCitBZGQgYWRkaXRpb25hbCBsaW5lcyBhcyBuZWVkZWQgZm9yIGFjcm9ueW1zIGZvdW5kIGluIHlvdXIgVENLIHVzZXIgZ3VpZGUuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitSZWZlcmVuY2VzIGluIHRoaXMgZG9jdW1lbnQgdG8ge0xlZ2FjeUFjcm9ueW19IHJlZmVyIHRvIHRoZSB7VGVjaG5vbG9neUZ1bGxOYW1lfSB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLgpkaWZmIC0tZ2l0IGEvdGNrL2RvY3MvdXNlcmd1aWRlL3NyYy9tYWluL2piYWtlL2NvbnRlbnQvdXNpbmctZXhhbXBsZXMuaW5jIGIvdGNrL2RvY3MvdXNlcmd1aWRlL3NyYy9tYWluL2piYWtlL2NvbnRlbnQvdXNpbmctZXhhbXBsZXMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMzNiYjcKLS0tIC9kZXYvbnVsbAorKysgYi90Y2svZG9jcy91c2VyZ3VpZGUvc3JjL21haW4vamJha2UvY29udGVudC91c2luZy1leGFtcGxlcy5pbmMKQEAgLTAsMCArMSw0OSBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK05PVEUgVE8gV1JJVEVSUzoKK1RoZXNlIENMSSBleGFtcGxlcyBjYW4gYmUgY3VzdG9taXplZCBhcyBuZWNlc3NhcnkuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitTdGFydCB0aGUgSlVuaXQgdGVzdHMgdXNpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kOgorCistLQorW3NvdXJjZSxvYWNfbm9fd2Fybl0KKy0tLS0KK212biB2ZXJpZnkKKy0tLS0KKy0tCisKK1tbR0NNQ1VdXQorCitFeGFtcGxlIDUtMSB7VGVjaG5vbG9neVNob3J0TmFtZX0gVENLIFNpZ25hdHVyZSBUZXN0cworCitUbyBydW4gdGhlIHtUZWNobm9sb2d5U2hvcnROYW1lfSBUQ0sgc2lnbmF0dXJlIHRlc3RzLCBlbnRlciB0aGUKK2ZvbGxvd2luZyBjb21tYW5kczoKKworW3NvdXJjZSxzdWJzPSJhdHRyaWJ1dGVzIl0KKy0tLS0KK212biB2ZXJpZnkgLURpdC50ZXN0PWVlLmpha2FydGEudGNrLmFubm90YXRpb25zLnNpZ25hdHVyZXRlc3QuKioKKy0tLS0KKworW1tHQ01CVl1dCisKKworRXhhbXBsZSA1LTIgU2luZ2xlIFRlc3QgRGlyZWN0b3J5CisKK1RvIHJ1biBhIHNpbmdsZSB0ZXN0IGRpcmVjdG9yeSwgZW50ZXIgdGhlIGZvbGxvd2luZyBjb21tYW5kczoKKworW3NvdXJjZSxzdWJzPSJhdHRyaWJ1dGVzIl0KKy0tLS0KK212biB2ZXJpZnkgLURpdC50ZXN0PXtzaW5nbGVUZXN0RGlyZWN0b3J5RXhhbXBsZX0uKioKKy0tLS0KKworW1tHQ01DQV1dCisKKworRXhhbXBsZSA1LTMgU3Vic2V0IG9mIFRlc3QgRGlyZWN0b3JpZXMKKworVG8gcnVuIGEgc3Vic2V0IG9mIHRlc3QgZGlyZWN0b3JpZXMsIGVudGVyIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6CisKK1tzb3VyY2Usc3Vicz0iYXR0cmlidXRlcyJdCistLS0tCittdm4gdmVyaWZ5IC1EaXQudGVzdD17c3Vic2V0VGVzdERpcmVjdG9yeUV4YW1wbGV9LioqCistLS0tCmRpZmYgLS1naXQgYS90Y2svZG9jcy91c2VyZ3VpZGUvc3JjL21haW4vamJha2UvY29udGVudC91c2luZy5hZG9jIGIvdGNrL2RvY3MvdXNlcmd1aWRlL3NyYy9tYWluL2piYWtlL2NvbnRlbnQvdXNpbmcuYWRvYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTkxNjRlCi0tLSAvZGV2L251bGwKKysrIGIvdGNrL2RvY3MvdXNlcmd1aWRlL3NyYy9tYWluL2piYWtlL2NvbnRlbnQvdXNpbmcuYWRvYwpAQCAtMCwwICsxLDE1OCBAQAordHlwZT1wYWdlCitzdGF0dXM9cHVibGlzaGVkCit0aXRsZT1FeGVjdXRpbmcgVGVzdHMKK25leHQ9ZGVidWcuaHRtbAorcHJldj1jb25maWcuaHRtbAorfn5+fn5+CitpbmNsdWRlOjphdHRyaWJ1dGVzLmNvbmZbXQorRXhlY3V0aW5nIFRlc3RzCis9PT09PT09PT09PT09PT0KKworW1tHQkZXT11dCisKKworW1tleGVjdXRpbmctdGVzdHNdXQorNSBFeGVjdXRpbmcgVGVzdHMKKy0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSB7VGVjaG5vbG9neVNob3J0TmFtZX0gVENLIHVzZXMgdGhlIEpVbml0IGZyYW1ld29yawordG8gZXhlY3V0ZSB0aGUgdGVzdHMuCisKK1RoaXMgY2hhcHRlciBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIHRvcGljczoKKworKiBsaW5rOiNHQkZVWltTdGFydGluZyB0aGUgdGVzdHNdCisqIGxpbms6I0dCRldNW1J1bm5pbmcgYSBTdWJzZXQgb2YgdGhlIFRlc3RzXQorKiBsaW5rOiNHQ0xSUltSdW5uaW5nIHRoZSBUQ0sgQWdhaW5zdCB5b3VyIHNlbGVjdGVkIENJXQorKiBsaW5rOiNHQ0xSWltSdW5uaW5nIHRoZSBUQ0sgQWdhaW5zdCBhIFZlbmRvcidzIEltcGxlbWVudGF0aW9uXQorKiBsaW5rOiNHQkZWS1tUZXN0IFJlcG9ydHNdCisKKworW05PVEVdCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgaW5zdHJ1Y3Rpb25zIGluIHRoaXMgY2hhcHRlciBhc3N1bWUgdGhhdCB5b3UgaGF2ZSBpbnN0YWxsZWQgYW5kCitjb25maWd1cmVkIHlvdXIgdGVzdCBlbnZpcm9ubWVudCBhcyBkZXNjcmliZWQgaW4KK2xpbms6aW5zdGFsbC5odG1sI0dCRlRQW0NoYXB0ZXIgMywgIkluc3RhbGxhdGlvbiwiXSBhbmQKK2xpbms6Y29uZmlnLmh0bWwjR0JGVlZbQ2hhcHRlciA0LCAiU2V0dXAgYW5kIENvbmZpZ3VyYXRpb24sIl0sCityZXNwZWN0aXZlbHkuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2lmZGVmOjpyZWJ1aWxkW10KK0FzIGV4cGxhaW5lZCBpbiBsaW5rOnJlYnVpbGQuaHRtbCNHQ0xJWltBcHBlbmRpeCBCLCAiUGFja2FnaW5nIHRoZQorVGVzdCBBcHBsaWNhdGlvbnMgaW4gU2VydmxldC1Db21wbGlhbnQgV0FSCitGaWxlcyBXaXRoIFZJLVNwZWNpZmljIEluZm9ybWF0aW9uLCJdIHRoZSB7VGVjaG5vbG9neVNob3J0TmFtZX0gVENLCitpbnRyb2R1Y2VzIHRoZSBjb25jZXB0IG9mIHJlcGFja2FnaW5nIHRoZSBUQ0sgdGVzdHMuCitlbmRpZjo6cmVidWlsZFtdCisKK1tOT1RFXQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIEpha2FydGEgUkVTVCBUQ0sgaXMgbm90IGRlcGVuZGVkIG9uIGFueSBwYXJ0aWN1bGFyIGJ1aWxkIHRvb2wgdG8gCitydW4gdGhlIHRlc3RzLiBJdCB3aWxsIGJlIGNvbnZlbmllbnQgYW5kIGFkdmlzYWJsZSB0byBjcmVhdGUgYSAKK0FwYWNoZSBNYXZlbiBwcm9qZWN0IHRvIHNldHVwIGFuZCBydW4gdGhlIFRDSy4gVGhpcyBjaGFwdGVyIHdpbGwgCitoZW5jZWZvcnRoIHVzZSBpbnN0cnVjdGlvbnMgYW5kIHN0ZXBzIHRvIHByb3ZpZGUgc2V0dXAgd2l0aCBBcGFjaGUgCitNYXZlbiBhcyBhIGJ1aWxkIHRvb2wuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworCitbW0dCRlVaXV1bW3N0YXJ0aW5nLWphdmF0ZXN0XV0KKworNS4xIFN0YXJ0aW5nIHRoZSB0ZXN0cworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitUaGUge1RlY2hub2xvZ3lTaG9ydE5hbWV9IFRDSyBjYW4gYmUgcnVuIGZyb20gdGhlIGNvbW1hbmQgbGluZQoraW4geW91ciBzaGVsbCBlbnZpcm9ubWVudCBieSBleGVjdXRpbmcgdGhlIFRDSyBqYXIuCisKKworW05PVEVdCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgYG12bmAgY29tbWFuZCByZWZlcmVuY2VkIGluIHRoZSBmb2xsb3dpbmcKK3R3byBwcm9jZWR1cmVzIGFuZCBlbHNld2hlcmUgaW4gdGhpcyBndWlkZSBpcyB0aGUgQXBhY2hlIE1hdmVuCitidWlsZCB0b29sLCB3aGljaCB3aWxsIG5lZWQgdG8gYmUgZG93bmxvYWRlZCBzZXBhcmF0ZWx5LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKKworCitbW0dCRlZXXV1bW3RvLXN0YXJ0LWphdmF0ZXN0LWluLWNvbW1hbmQtbGluZS1tb2RlXV0KKworNS4xLjEgVG8gU3RhcnQgVGVzdHMgaW4gQ29tbWFuZC1MaW5lIE1vZGUKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK2luY2x1ZGU6OnVzaW5nLWV4YW1wbGVzLmluY1tdCisKK1tbR0JGV01dXVtbcnVubmluZy1hLXN1YnNldC1vZi10aGUtdGVzdHNdXQorCis1LjIgUnVubmluZyBhIFN1YnNldCBvZiB0aGUgVGVzdHMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitVc2UgdGhlIGZvbGxvd2luZyBtb2RlcyB0byBydW4gYSBzdWJzZXQgb2YgdGhlIHRlc3RzOgorCisqIGxpbms6I0dCRldLW1NlY3Rpb24gNS4yLjEsICJUbyBSdW4gYSBTdWJzZXQgb2YgVGVzdHMgaW4gQ29tbWFuZC1MaW5lIE1vZGUiXQorCisKK1tbR0JGV0tdXVtbdG8tcnVuLWEtc3Vic2V0LW9mLXRlc3RzLWluLWNvbW1hbmQtbGluZS1tb2RlXV0KKworNS4yLjEgVG8gUnVuIGEgU3Vic2V0IG9mIFRlc3RzIGluIENvbW1hbmQtTGluZSBNb2RlCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworU3RhcnQgdGhlIHRlc3QgcnVuIGJ5IGV4ZWN1dGluZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6ICsKKworW3NvdXJjZSxzdWJzPSJhdHRyaWJ1dGVzIl0KKy0tLS0KK212biB2ZXJpZnkgLURpdC50ZXN0PXtzdWJzZXRUZXN0RGlyZWN0b3J5RXhhbXBsZX0uKioKKy0tLS0KKworVGhlIHRlc3RzIGluIHRoZSBkaXJlY3RvcnkgYW5kIGl0cyBzdWJkaXJlY3RvcmllcyBhcmUgcnVuLgorCisKK1tbR0NMUlJdXVtbcnVubmluZy10aGUtdGNrLWFnYWluc3QtdGhlLXJpXV0KKworNS4zIFJ1bm5pbmcgdGhlIFRDSyBBZ2FpbnN0IGFub3RoZXIgQ0kKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1NvbWUgdGVzdCBzY2VuYXJpb3MgYXJlIGRlc2lnbmVkIHRvIGVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIGFuZCBkZXBsb3ltZW50IG9mCithbGwgdGhlIHByZWJ1aWx0IHtUZWNobm9sb2d5U2hvcnROYW1lfSBUQ0sgdGVzdHMgYWdhaW5zdCBvbmUgQ29tcGF0aWJsZQorSW1wbGVtZW50YXRpb24gYXJlIHN1Y2Nlc3NmdWwgb3BlcmF0aW5nIHdpdGggb3RoZXIgY29tcGF0aWJsZSBpbXBsZW1lbnRhdGlvbnMsIGFuZCB0aGF0IHRoZSBUQ0sgaXMgcmVhZHkgZm9yCitjb21wYXRpYmlsaXR5IHRlc3RpbmcgYWdhaW5zdCB0aGUgVmVuZG9yIGFuZCBDb21wYXRpYmxlIEltcGxlbWVudGF0aW9ucy4KKworMS4gIFZlcmlmeSB0aGF0IHlvdSBoYXZlIGZvbGxvd2VkIHRoZSBjb25maWd1cmF0aW9uIGluc3RydWN0aW9ucyBpbgorbGluazpjb25maWcuaHRtbCNHQkZWVVtTZWN0aW9uIDQuMSwgIkNvbmZpZ3VyaW5nIFlvdXIgRW52aXJvbm1lbnQgdG8gUnVuCit0aGUgVENLIEFnYWluc3QgdGhlIENvbXBhdGlibGUgSW1wbGVtZW50YXRpb24uIl0KKzIuICBJZiByZXF1aXJlZCwgdmVyaWZ5IHRoYXQgeW91IGhhdmUgY29tcGxldGVkIHRoZSBzdGVwcyBpbgorbGluazpjb25maWcuaHRtbCNHQ0xJV1tTZWN0aW9uIDQuMy4yLCAiRGVwbG95aW5nIHRoZSBQcmVidWlsdCBBcmNoaXZlcy4iXQorMy4gIFJ1biB0aGUgdGVzdHMsIGFzIGRlc2NyaWJlZCBpbiBsaW5rOiNHQkZVWltTZWN0aW9uIDUuMSwgIlN0YXJ0aW5nCit0aGUgdGVzdHMsIl0gYW5kLCBpZiBkZXNpcmVkLCBsaW5rOiNHQkZXTVtTZWN0aW9uIDUuMiwgIlJ1bm5pbmcgYSBTdWJzZXQKK29mIHRoZSBUZXN0cy4iXQorCitbW0dDTFJaXV1bW3J1bm5pbmctdGhlLXRjay1hZ2FpbnN0LWEtdmVuZG9ycy1pbXBsZW1lbnRhdGlvbl1dCisKKzUuNCBSdW5uaW5nIHRoZSBUQ0sgQWdhaW5zdCBhIFZlbmRvcidzIEltcGxlbWVudGF0aW9uCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitUaGlzIHRlc3Qgc2NlbmFyaW8gaXMgb25lIG9mIHRoZSBjb21wYXRpYmlsaXR5IHRlc3QgcGhhc2VzIHRoYXQgYWxsCitWZW5kb3JzIG11c3QgcGFzcy4KKworMS4gIFZlcmlmeSB0aGF0IHlvdSBoYXZlIGZvbGxvd2VkIHRoZSBjb25maWd1cmF0aW9uIGluc3RydWN0aW9ucyBpbgorbGluazpjb25maWcuaHRtbCNHQ0xIVVtTZWN0aW9uIDQuMiwgIkNvbmZpZ3VyaW5nIFlvdXIgRW52aXJvbm1lbnQgdG8KK1JlcGFja2FnZSBhbmQgUnVuIHRoZSBUQ0sgQWdhaW5zdCB0aGUgVmVuZG9yIEltcGxlbWVudGF0aW9uLiJdCisyLiAgSWYgcmVxdWlyZWQsIHZlcmlmeSB0aGF0IHlvdSBoYXZlIGNvbXBsZXRlZCB0aGUgc3RlcHMgaW4KK2xpbms6Y29uZmlnLmh0bWwjR0NMSUxbU2VjdGlvbiA0LjMuMywgIkRlcGxveWluZyB0aGUKK1Rlc3QgQXBwbGljYXRpb25zIEFnYWluc3QgdGhlIFZlbmRvciBJbXBsZW1lbnRhdGlvbi4iXQorMy4gIFJ1biB0aGUgdGVzdHMsIGFzIGRlc2NyaWJlZCBpbiBsaW5rOiNHQkZVWltTZWN0aW9uIDUuMSwgIlN0YXJ0aW5nCit0aGUgdGVzdHMsIl0gYW5kLCBpZiBkZXNpcmVkLCBsaW5rOiNHQkZXTVtTZWN0aW9uIDUuMiwgIlJ1bm5pbmcgYSBTdWJzZXQKK29mIHRoZSBUZXN0cy4iXQorCitbW0dCRlZLXV1bW3Rlc3QtcmVwb3J0c11dCisKKzUuNSBUZXN0IFJlcG9ydHMKK35+fn5+fn5+fn5+fn5+fn4KKworQSBzZXQgb2YgcmVwb3J0IGZpbGVzIGlzIGNyZWF0ZWQgZm9yIGV2ZXJ5IHRlc3QgcnVuLiBUaGVzZSByZXBvcnQgZmlsZXMKK2NhbiBiZSBmb3VuZCBpbiB0aGUgdGFyZ2V0IGRpcmVjdG9yeSB0aGF0IHRoZSB0ZXN0IGlzIHJ1bi4gQWZ0ZXIgYSB0ZXN0IHJ1biBpcworY29tcGxldGVkLCB0aGUgSlVuaXQgZnJhbWV3b3JrIHdyaXRlcyAgcmVwb3J0cyBmb3IgdGhlIHRlc3QgcnVuLgpkaWZmIC0tZ2l0IGEvdGNrL2RvY3MvdXNlcmd1aWRlL3NyYy9tYWluL2piYWtlL2NvbnRlbnQvdXNpbmcuaW5jIGIvdGNrL2RvY3MvdXNlcmd1aWRlL3NyYy9tYWluL2piYWtlL2NvbnRlbnQvdXNpbmcuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi90Y2svZG9jcy91c2VyZ3VpZGUvc3JjL21haW4vamJha2UvY29udGVudC91c2luZy5pbmMKZGlmZiAtLWdpdCBhL3Rjay9kb2NzL3VzZXJndWlkZS9zcmMvbWFpbi9qYmFrZS9qYmFrZS5wcm9wZXJ0aWVzIGIvdGNrL2RvY3MvdXNlcmd1aWRlL3NyYy9tYWluL2piYWtlL2piYWtlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVjNzA1NgotLS0gL2Rldi9udWxsCisrKyBiL3Rjay9kb2NzL3VzZXJndWlkZS9zcmMvbWFpbi9qYmFrZS9qYmFrZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjQgQEAKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDIxIE9yYWNsZSBhbmQvb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQorIyB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2LiAyLjAsIHdoaWNoIGlzIGF2YWlsYWJsZSBhdAorIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAuCisjCisjIFRoaXMgU291cmNlIENvZGUgbWF5IGFsc28gYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIGZvbGxvd2luZyBTZWNvbmRhcnkKKyMgTGljZW5zZXMgd2hlbiB0aGUgY29uZGl0aW9ucyBmb3Igc3VjaCBhdmFpbGFiaWxpdHkgc2V0IGZvcnRoIGluIHRoZQorIyBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYuIDIuMCBhcmUgc2F0aXNmaWVkOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyMgdmVyc2lvbiAyIHdpdGggdGhlIEdOVSBDbGFzc3BhdGggRXhjZXB0aW9uLCB3aGljaCBpcyBhdmFpbGFibGUgYXQKKyMgaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9jbGFzc3BhdGgvbGljZW5zZS5odG1sLgorIworIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKKyMKKworc2l0ZS5ob3N0PWh0dHA6Ly9qYmFrZS5vcmcKK3JlbmRlci50YWdzPWZhbHNlCityZW5kZXIuc2l0ZW1hcD1mYWxzZQorcmVuZGVyLmFyY2hpdmU9ZmFsc2UKK3JlbmRlci5mZWVkPWZhbHNlCityZW5kZXIuaW5kZXg9ZmFsc2UKK2FzY2lpZG9jdG9yLm9wdGlvbi5zYWZlPTAKK2FzY2lpZG9jdG9yLmF0dHJpYnV0ZXMuZXhwb3J0PXRydWUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90Y2svZG9jcy91c2VyZ3VpZGUvc3JjL21haW4vamJha2UvdGVtcGxhdGVzL2Zvb3Rlci5mdGwgYi90Y2svZG9jcy91c2VyZ3VpZGUvc3JjL21haW4vamJha2UvdGVtcGxhdGVzL2Zvb3Rlci5mdGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM2YjY0NgotLS0gL2Rldi9udWxsCisrKyBiL3Rjay9kb2NzL3VzZXJndWlkZS9zcmMvbWFpbi9qYmFrZS90ZW1wbGF0ZXMvZm9vdGVyLmZ0bApAQCAtMCwwICsxLDQ0IEBACis8Iy0tIGEgZm9vdGVyIHRlbXBsYXRlIGZyYWdtZW50IGluY2x1ZGVkIGluIHRoZSBwYWdlIHRlbXBsYXRlIC0tPgorPGhyIC8+CisKKzx0YWJsZSB3aWR0aD0iOTAlIiBpZD0iYm90dG9tLW5hdiIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIj4KKwk8Y29sZ3JvdXA+CisJCTxjb2wgd2lkdGg9IjEyJSIvPgorCQk8Y29sIHdpZHRoPSIxMiUiLz4KKwkJPGNvbCB3aWR0aD0iKiIvPgorCTwvY29sZ3JvdXA+CisJPHRyPgorCSAgICA8I2lmIGNvbnRlbnQucHJldj8/PgorCQk8dGQgYWxpZ249ImxlZnQiPgorCQk8YSBocmVmPSIke2NvbnRlbnQucHJldn0iPgorCQkJPHNwYW4gY2xhc3M9IiB2ZWN0b3ItZm9udCI+PGkgY2xhc3M9ImZhIGZhLWFycm93LWNpcmNsZS1sZWZ0IiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9pPjwvc3Bhbj4KKwkJCTxzcGFuIHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6LTJweDsiPlByZXZpb3VzPC9zcGFuPgorCQk8L2E+CisJCTwvdGQ+CisJCTwvI2lmPgorCisJCTwjaWYgY29udGVudC5uZXh0Pz8+CisJCTx0ZCBhbGlnbj0ibGVmdCI+CisJCTxhIGhyZWY9IiR7Y29udGVudC5uZXh0fSI+CisJCQk8c3BhbiBjbGFzcz0idmVjdG9yLWZvbnQiPjxpIGNsYXNzPSJmYSBmYS1hcnJvdy1jaXJjbGUtcmlnaHQgdmVjdG9yLWZvbnQiIGFyaWEtaGlkZGVuPSJ0cnVlIj48L2k+PC9zcGFuPgorCQkJPHNwYW4gc3R5bGU9InBvc2l0aW9uOnJlbGF0aXZlO3RvcDotMnB4OyI+TmV4dDwvc3Bhbj4KKwkJPC9hPgorCQk8L3RkPgorCQk8LyNpZj4KKworCQk8dGQgYWxpZ249InJpZ2h0Ij4KKwkJPGEgaHJlZj0idG9jLmh0bWwiPgorCQkJPHNwYW4gY2xhc3M9InZlY3Rvci1mb250Ij48aSBjbGFzcz0iZmEgZmEtbGlzdCB2ZWN0b3ItZm9udCIgYXJpYS1oaWRkZW49InRydWUiPjwvaT48L3NwYW4+CisJCQk8c3BhbiBzdHlsZT0icG9zaXRpb246cmVsYXRpdmU7dG9wOi0ycHg7Ij5Db250ZW50czwvc3Bhbj4KKwkJPC9hPgorCQk8L3RkPgorCTwvdHI+Cis8L3RhYmxlPgorCis8c3BhbiBpZD0iY29weXJpZ2h0Ij4KKwkJPGltZyBzcmM9ImltZy9lY2xpcHNlX2ZvdW5kYXRpb25fbG9nb190aW55LnBuZyIgaGVpZ2h0PSIyMHB4IiBhbHQ9IkVjbGlwc2UgRm91bmRhdGlvbiBMb2dvIiBhbGlnbj0idG9wIi8+Jm5ic3A7CisJCTxzcGFuID5Db3B5cmlnaHQmbmJzcDsmY29weTsmbmJzcDsyMDE3LCZuYnNwOzIwMjEmbmJzcDtPcmFjbGUmbmJzcDthbmQvb3ImbmJzcDtpdHMmbmJzcDthZmZpbGlhdGVzLiZuYnNwO0FsbCZuYnNwO3JpZ2h0cyZuYnNwO3Jlc2VydmVkLjwvc3Bhbj4KKzwvc3Bhbj4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvdGNrL2RvY3MvdXNlcmd1aWRlL3NyYy9tYWluL2piYWtlL3RlbXBsYXRlcy9oZWFkZXIuZnRsIGIvdGNrL2RvY3MvdXNlcmd1aWRlL3NyYy9tYWluL2piYWtlL3RlbXBsYXRlcy9oZWFkZXIuZnRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwYjcyYWUKLS0tIC9kZXYvbnVsbAorKysgYi90Y2svZG9jcy91c2VyZ3VpZGUvc3JjL21haW4vamJha2UvdGVtcGxhdGVzL2hlYWRlci5mdGwKQEAgLTAsMCArMSw1NCBAQAorPCFET0NUWVBFIGh0bWw+Cis8Iy0tIGEgaGVhZGVyIHRlbXBsYXRlIGZyYWdtZW50IGluY2x1ZGVkIGluIHRoZSBwYWdlIHRlbXBsYXRlIC0tPgorPGh0bWwgbGFuZz0iZW4iPgorICA8aGVhZD4KKyAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCIvPgorICAgIDx0aXRsZT48I2lmIChjb250ZW50LnRpdGxlKT8/PjwjZXNjYXBlIHggYXMgeD94bWw+JHtjb250ZW50LnRpdGxlfTwvI2VzY2FwZT48LyNpZj48L3RpdGxlPgorICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIj4KKyAgICA8bGluayBocmVmPSI8I2lmIChjb250ZW50LnJvb3RwYXRoKT8/PiR7Y29udGVudC5yb290cGF0aH08I2Vsc2U+PC8jaWY+Y3NzL3N0eWxlLmNzcyIgcmVsPSJzdHlsZXNoZWV0Ij4KKyAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly91c2UuZm9udGF3ZXNvbWUuY29tLzk2YzRkODk2MTEuanMiPjwvc2NyaXB0PgorICA8L2hlYWQ+CisgIDxib2R5PgorPHRhYmxlIGlkPSJkb2MtdGl0bGUiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCI+CisgIDx0cj4KKyAgPHRkIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+CisgIDxiPiR7Y29udGVudC50aXRsZX08L2I+PGJyIC8+CisgIDwvdGQ+CisgIDwvdHI+Cis8L3RhYmxlPgorPGhyIC8+CisKKzx0YWJsZSB3aWR0aD0iOTAlIiBpZD0idG9wLW5hdiIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIj4KKwk8Y29sZ3JvdXA+CisJCTxjb2wgd2lkdGg9IjEyJSIvPgorCQk8Y29sIHdpZHRoPSIxMiUiLz4KKwkJPGNvbCB3aWR0aD0iKiIvPgorCTwvY29sZ3JvdXA+CisJPHRyPgorCSAgICA8I2lmIGNvbnRlbnQucHJldj8/PgorCQk8dGQgYWxpZ249ImxlZnQiPgorCQk8YSBocmVmPSIke2NvbnRlbnQucHJldn0iPgorCQkJPHNwYW4gY2xhc3M9InZlY3Rvci1mb250Ij48aSBjbGFzcz0iZmEgZmEtYXJyb3ctY2lyY2xlLWxlZnQiIGFyaWEtaGlkZGVuPSJ0cnVlIj48L2k+PC9zcGFuPgorCQkJPHNwYW4gc3R5bGU9InBvc2l0aW9uOnJlbGF0aXZlO3RvcDotMnB4OyI+UHJldmlvdXM8L3NwYW4+CisJCTwvYT4KKwkJPC90ZD4KKwkgICAgPC8jaWY+CisKKwkgICAgPCNpZiBjb250ZW50Lm5leHQ/Pz4KKwkJPHRkIGFsaWduPSJsZWZ0Ij4KKwkJPGEgaHJlZj0iJHtjb250ZW50Lm5leHR9Ij4KKwkJCTxzcGFuIGNsYXNzPSIgdmVjdG9yLWZvbnQiPjxpIGNsYXNzPSJmYSBmYS1hcnJvdy1jaXJjbGUtcmlnaHQgdmVjdG9yLWZvbnQiIGFyaWEtaGlkZGVuPSJ0cnVlIj48L2k+PC9zcGFuPgorCQkJPHNwYW4gc3R5bGU9InBvc2l0aW9uOnJlbGF0aXZlO3RvcDotMnB4OyI+TmV4dDwvc3Bhbj4KKwkJPC9hPgorCQk8L3RkPgorCSAgICA8LyNpZj4KKworCQk8dGQgYWxpZ249InJpZ2h0Ij4KKwkJPGEgaHJlZj0idG9jLmh0bWwiPgorCQkJPHNwYW4gY2xhc3M9IiB2ZWN0b3ItZm9udCI+PGkgY2xhc3M9ImZhIGZhLWxpc3QgdmVjdG9yLWZvbnQiIGFyaWEtaGlkZGVuPSJ0cnVlIj48L2k+PC9zcGFuPgorCQkJPHNwYW4gc3R5bGU9InBvc2l0aW9uOnJlbGF0aXZlO3RvcDotMnB4OyI+Q29udGVudHM8L3NwYW4+CisJCTwvYT4KKwkJPC90ZD4KKwk8L3RyPgorPC90YWJsZT4KKwpkaWZmIC0tZ2l0IGEvdGNrL2RvY3MvdXNlcmd1aWRlL3NyYy9tYWluL2piYWtlL3RlbXBsYXRlcy9tZW51LmZ0bCBiL3Rjay9kb2NzL3VzZXJndWlkZS9zcmMvbWFpbi9qYmFrZS90ZW1wbGF0ZXMvbWVudS5mdGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg4YzAzZAotLS0gL2Rldi9udWxsCisrKyBiL3Rjay9kb2NzL3VzZXJndWlkZS9zcmMvbWFpbi9qYmFrZS90ZW1wbGF0ZXMvbWVudS5mdGwKQEAgLTAsMCArMSBAQAorPCMtLSBhIG1lbnUgYmFyIHRlbXBsYXRlIGZyYWdtZW50IGluY2x1ZGVkIGluIHRoZSBwYWdlIHRlbXBsYXRlIC0tPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rjay9kb2NzL3VzZXJndWlkZS9zcmMvbWFpbi9qYmFrZS90ZW1wbGF0ZXMvcGFnZS5mdGwgYi90Y2svZG9jcy91c2VyZ3VpZGUvc3JjL21haW4vamJha2UvdGVtcGxhdGVzL3BhZ2UuZnRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjYTUxZGIKLS0tIC9kZXYvbnVsbAorKysgYi90Y2svZG9jcy91c2VyZ3VpZGUvc3JjL21haW4vamJha2UvdGVtcGxhdGVzL3BhZ2UuZnRsCkBAIC0wLDAgKzEsOCBAQAorPCMtLSBhIHRvcCBsZXZlbCBwYWdlIGxheW91dCB0ZW1wbGF0ZSAtLT4KKworPCNpbmNsdWRlICJoZWFkZXIuZnRsIj4KKzwjaW5jbHVkZSAibWVudS5mdGwiPgorCiske2NvbnRlbnQuYm9keX0KKworPCNpbmNsdWRlICJmb290ZXIuZnRsIj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90Y2svZG9jcy91c2VyZ3VpZGUvc3JjL3RoZW1lL2pha2FydGFlZS10aGVtZS55bWwgYi90Y2svZG9jcy91c2VyZ3VpZGUvc3JjL3RoZW1lL2pha2FydGFlZS10aGVtZS55bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA5MmEyZgotLS0gL2Rldi9udWxsCisrKyBiL3Rjay9kb2NzL3VzZXJndWlkZS9zcmMvdGhlbWUvamFrYXJ0YWVlLXRoZW1lLnltbApAQCAtMCwwICsxLDI5OSBAQAorIworIyBGb2xsb3dpbmcgaXMgdGhlIGFzY2lpZG9jdG9yLXBkZiBkZWZhdWx0IHRoZW1lIFsxXSwgd2l0aCBzbWFsbAorIyBjdXN0b21pemF0aW9ucywgbW9zdGx5IGZvciBoZWFkZXIgYW5kIGZvb3RlciwgbWFya2VkICJFRSIuCisjCisjIFsxXSBodHRwczovL2dpdGh1Yi5jb20vYXNjaWlkb2N0b3IvYXNjaWlkb2N0b3ItcGRmL2Jsb2IvbWFzdGVyL2RhdGEvdGhlbWVzL2RlZmF1bHQtdGhlbWUueW1sCisjCitmb250OgorICBjYXRhbG9nOgorICAgICMgTm90byBTZXJpZiBzdXBwb3J0cyBMYXRpbiwgTGF0aW4tMSBTdXBwbGVtZW50LCBMYXRpbiBFeHRlbmRlZC1BLCBHcmVlaywgQ3lyaWxsaWMsIFZpZXRuYW1lc2UgJiBhbiBhc3NvcnRtZW50IG9mIHN5bWJvbHMKKyAgICBOb3RvIFNlcmlmOgorICAgICAgbm9ybWFsOiBub3Rvc2VyaWYtcmVndWxhci1zdWJzZXQudHRmCisgICAgICBib2xkOiBub3Rvc2VyaWYtYm9sZC1zdWJzZXQudHRmCisgICAgICBpdGFsaWM6IG5vdG9zZXJpZi1pdGFsaWMtc3Vic2V0LnR0ZgorICAgICAgYm9sZF9pdGFsaWM6IG5vdG9zZXJpZi1ib2xkX2l0YWxpYy1zdWJzZXQudHRmCisgICAgIyBNKyAxbW4gc3VwcG9ydHMgQVNDSUkgYW5kIHRoZSBjaXJjbGVkIG51bWJlcnMgdXNlZCBmb3IgY29udW1zCisgICAgTSsgMW1uOgorICAgICAgbm9ybWFsOiBtcGx1czFtbi1yZWd1bGFyLWFzY2lpLWNvbnVtcy50dGYKKyAgICAgIGJvbGQ6IG1wbHVzMW1uLWJvbGQtYXNjaWkudHRmCisgICAgICBpdGFsaWM6IG1wbHVzMW1uLWl0YWxpYy1hc2NpaS50dGYKKyAgICAgIGJvbGRfaXRhbGljOiBtcGx1czFtbi1ib2xkX2l0YWxpYy1hc2NpaS50dGYKKyAgICAjIE0rIDFwIHN1cHBvcnRzIExhdGluLCBMYXRpbi0xIFN1cHBsZW1lbnQsIExhdGluIEV4dGVuZGVkLCBHcmVlaywgQ3lyaWxsaWMsIFZpZXRuYW1lc2UsIEphcGFuZXNlICYgYW4gYXNzb3J0bWVudCBvZiBzeW1ib2xzCisgICAgIyBJdCBhbHNvIHByb3ZpZGVzIGFycm93cyBmb3IgLT4sIDwtLCA9PiBhbmQgPD0gcmVwbGFjZW1lbnRzIGluIGNhc2UgdGhlc2UgZ2x5cGhzIGFyZSBtaXNzaW5nIGZyb20gZm9udAorICAgIE0rIDFwIEZhbGxiYWNrOgorICAgICAgbm9ybWFsOiBtcGx1czFwLXJlZ3VsYXItZmFsbGJhY2sudHRmCisgICAgICBib2xkOiBtcGx1czFwLXJlZ3VsYXItZmFsbGJhY2sudHRmCisgICAgICBpdGFsaWM6IG1wbHVzMXAtcmVndWxhci1mYWxsYmFjay50dGYKKyAgICAgIGJvbGRfaXRhbGljOiBtcGx1czFwLXJlZ3VsYXItZmFsbGJhY2sudHRmCisgIGZhbGxiYWNrczoKKyAgICAtIE0rIDFwIEZhbGxiYWNrCitwYWdlOgorICBiYWNrZ3JvdW5kX2NvbG9yOiBmZmZmZmYKKyAgbGF5b3V0OiBwb3J0cmFpdAorICBtYXJnaW46IFswLjVpbiwgMC42N2luLCAwLjY3aW4sIDAuNjdpbl0KKyAgIyBtYXJnaW5faW5uZXIgYW5kIG1hcmdpbl9vdXRlciBrZXlzIGFyZSB1c2VkIGZvciByZWN0by92ZXJzbyBwcmludCBtYXJnaW5zIHdoZW4gbWVkaWE9cHJlcHJlc3MKKyAgbWFyZ2luX2lubmVyOiAwLjc1aW4KKyAgbWFyZ2luX291dGVyOiAwLjU5aW4KKyAgI3NpemU6IEE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRUUKKyAgc2l6ZTogTGV0dGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRUUKK2Jhc2U6CisgIGFsaWduOiBqdXN0aWZ5CisgICMgY29sb3IgYXMgaGV4IHN0cmluZyAobGVhZGluZyAjIGlzIG9wdGlvbmFsKQorICBmb250X2NvbG9yOiAzMzMzMzMKKyAgIyBjb2xvciBhcyBSR0IgYXJyYXkKKyAgI2ZvbnRfY29sb3I6IFs1MSwgNTEsIDUxXQorICAjIGNvbG9yIGFzIENNWUsgYXJyYXkgKGFwcHJveGltYXRlZCkKKyAgI2ZvbnRfY29sb3I6IFswLCAwLCAwLCAwLjkyXQorICAjZm9udF9jb2xvcjogWzAsIDAsIDAsIDkyJV0KKyAgZm9udF9mYW1pbHk6IE5vdG8gU2VyaWYKKyAgIyBjaG9vc2Ugb25lIG9mIHRoZXNlIGZvbnRfc2l6ZS9saW5lX2hlaWdodF9sZW5ndGggY29tYmluYXRpb25zCisgICNmb250X3NpemU6IDE0CisgICNsaW5lX2hlaWdodF9sZW5ndGg6IDIwCisgICNmb250X3NpemU6IDExLjI1CisgICNsaW5lX2hlaWdodF9sZW5ndGg6IDE4CisgICNmb250X3NpemU6IDExLjIKKyAgI2xpbmVfaGVpZ2h0X2xlbmd0aDogMTYKKyAgZm9udF9zaXplOiAxMC41CisgICNsaW5lX2hlaWdodF9sZW5ndGg6IDE1CisgICMgY29ycmVjdCBsaW5lIGhlaWdodCBmb3IgTm90byBTZXJpZiBtZXRyaWNzCisgIGxpbmVfaGVpZ2h0X2xlbmd0aDogMTIKKyAgI2ZvbnRfc2l6ZTogMTEuMjUKKyAgI2xpbmVfaGVpZ2h0X2xlbmd0aDogMTgKKyAgbGluZV9oZWlnaHQ6ICRiYXNlX2xpbmVfaGVpZ2h0X2xlbmd0aCAvICRiYXNlX2ZvbnRfc2l6ZQorICBmb250X3NpemVfbGFyZ2U6IHJvdW5kKCRiYXNlX2ZvbnRfc2l6ZSAqIDEuMjUpCisgIGZvbnRfc2l6ZV9zbWFsbDogcm91bmQoJGJhc2VfZm9udF9zaXplICogMC44NSkKKyAgZm9udF9zaXplX21pbjogJGJhc2VfZm9udF9zaXplICogMC43NQorICBmb250X3N0eWxlOiBub3JtYWwKKyAgYm9yZGVyX2NvbG9yOiBlZWVlZWUKKyAgYm9yZGVyX3JhZGl1czogNAorICBib3JkZXJfd2lkdGg6IDAuNQorIyBGSVhNRSB2ZXJ0aWNhbF9yaHl0aG0gaXMgd2VpcmQ7IHdlIHNob3VsZCB0aGluayBpbiB0ZXJtcyBvZiBlbXMKKyN2ZXJ0aWNhbF9yaHl0aG06ICRiYXNlX2xpbmVfaGVpZ2h0X2xlbmd0aCAqIDIgLyAzCisjIGNvcnJlY3QgbGluZSBoZWlnaHQgZm9yIE5vdG8gU2VyaWYgbWV0cmljcyAoY29tZXMgd2l0aCBidWlsdC1pbiBsaW5lIGhlaWdodCkKK3ZlcnRpY2FsX3JoeXRobTogJGJhc2VfbGluZV9oZWlnaHRfbGVuZ3RoCitob3Jpem9udGFsX3JoeXRobTogJGJhc2VfbGluZV9oZWlnaHRfbGVuZ3RoCisjIFFVRVNUSU9OIHNob3VsZCB2ZXJ0aWNhbF9zcGFjaW5nIGJlIGJsb2NrX3NwYWNpbmcgaW5zdGVhZD8KK3ZlcnRpY2FsX3NwYWNpbmc6ICR2ZXJ0aWNhbF9yaHl0aG0KK2xpbms6CisgIGZvbnRfY29sb3I6IDQyOGJjYQorIyBsaXRlcmFsIGlzIGN1cnJlbnRseSB1c2VkIGZvciBpbmxpbmUgbW9ub3NwYWNlZCBpbiBwcm9zZSBhbmQgdGFibGUgY2VsbHMKK2xpdGVyYWw6CisgIGZvbnRfY29sb3I6IGIxMjE0NgorICBmb250X2ZhbWlseTogTSsgMW1uCittZW51X2NhcmV0X2NvbnRlbnQ6ICIgPGZvbnQgc2l6ZT1cIjEuMTVlbVwiPjxjb2xvciByZ2I9XCJiMTIxNDZcIj5cdTIwM2E8L2NvbG9yPjwvZm9udD4gIgoraGVhZGluZzoKKyAgYWxpZ246IGxlZnQKKyAgI2ZvbnRfY29sb3I6IDE4MTgxOAorICBmb250X2NvbG9yOiAkYmFzZV9mb250X2NvbG9yCisgIGZvbnRfZmFtaWx5OiAkYmFzZV9mb250X2ZhbWlseQorICBmb250X3N0eWxlOiBib2xkCisgICMgaDEgaXMgdXNlZCBmb3IgcGFydCB0aXRsZXMgKGJvb2sgZG9jdHlwZSkgb3IgdGhlIGRvY3RpdGxlIChhcnRpY2xlIGRvY3R5cGUpCisgICNoMV9mb250X3NpemU6IGZsb29yKCRiYXNlX2ZvbnRfc2l6ZSAqIDIuNikgIyBFRQorICBoMV9mb250X3NpemU6IGZsb29yKCRiYXNlX2ZvbnRfc2l6ZSAqIDIuNSkgIyBFRSwgc3F1ZWV6ZSB0aXRsZSBvbnRvIG9uZSBsaW5lCisgICMgaDIgaXMgdXNlZCBmb3IgY2hhcHRlciB0aXRsZXMgKGJvb2sgZG9jdHlwZSBvbmx5KQorICBoMl9mb250X3NpemU6IGZsb29yKCRiYXNlX2ZvbnRfc2l6ZSAqIDIuMTUpCisgIGgzX2ZvbnRfc2l6ZTogcm91bmQoJGJhc2VfZm9udF9zaXplICogMS43KQorICBoNF9mb250X3NpemU6ICRiYXNlX2ZvbnRfc2l6ZV9sYXJnZQorICBoNV9mb250X3NpemU6ICRiYXNlX2ZvbnRfc2l6ZQorICBoNl9mb250X3NpemU6ICRiYXNlX2ZvbnRfc2l6ZV9zbWFsbAorICAjbGluZV9oZWlnaHQ6IDEuNAorICAjIGNvcnJlY3QgbGluZSBoZWlnaHQgZm9yIE5vdG8gU2VyaWYgbWV0cmljcyAoY29tZXMgd2l0aCBidWlsdC1pbiBsaW5lIGhlaWdodCkKKyAgbGluZV9oZWlnaHQ6IDEKKyAgbWFyZ2luX3RvcDogJHZlcnRpY2FsX3JoeXRobSAqIDAuNAorICBtYXJnaW5fYm90dG9tOiAkdmVydGljYWxfcmh5dGhtICogMC45Cit0aXRsZV9wYWdlOgorICBhbGlnbjogcmlnaHQKKyAgbG9nbzoKKyAgICB0b3A6IDEwJQorICB0aXRsZToKKyAgICB0b3A6IDU1JQorICAgIGZvbnRfc2l6ZTogJGhlYWRpbmdfaDFfZm9udF9zaXplCisgICAgZm9udF9jb2xvcjogOTk5OTk5CisgICAgbGluZV9oZWlnaHQ6IDAuOQorICBzdWJ0aXRsZToKKyAgICBmb250X3NpemU6ICRoZWFkaW5nX2gzX2ZvbnRfc2l6ZQorICAgIGZvbnRfc3R5bGU6IGJvbGRfaXRhbGljCisgICAgbGluZV9oZWlnaHQ6IDEKKyAgYXV0aG9yczoKKyAgICBtYXJnaW5fdG9wOiAkYmFzZV9mb250X3NpemUgKiAxLjI1CisgICAgZm9udF9zaXplOiAkYmFzZV9mb250X3NpemVfbGFyZ2UKKyAgICBmb250X2NvbG9yOiAxODE4MTgKKyAgcmV2aXNpb246CisgICAgbWFyZ2luX3RvcDogJGJhc2VfZm9udF9zaXplICogMS4yNQorYmxvY2s6CisgIG1hcmdpbl90b3A6IDAKKyAgbWFyZ2luX2JvdHRvbTogJHZlcnRpY2FsX3JoeXRobQorY2FwdGlvbjoKKyAgYWxpZ246IGxlZnQKKyAgZm9udF9zaXplOiAkYmFzZV9mb250X3NpemUgKiAwLjk1CisgIGZvbnRfc3R5bGU6IGl0YWxpYworICAjIEZJWE1FIHBlcmhhcHMgc2V0IGxpbmVfaGVpZ2h0IGluc3RlYWQgb2YgLyBpbiBhZGRpdGlvbiB0byBtYXJnaW5zPworICBtYXJnaW5faW5zaWRlOiAkdmVydGljYWxfcmh5dGhtIC8gMworICAjbWFyZ2luX2luc2lkZTogJHZlcnRpY2FsX3JoeXRobSAvIDQKKyAgbWFyZ2luX291dHNpZGU6IDAKK2xlYWQ6CisgIGZvbnRfc2l6ZTogJGJhc2VfZm9udF9zaXplX2xhcmdlCisgIGxpbmVfaGVpZ2h0OiAxLjQKK2Fic3RyYWN0OgorICBmb250X2NvbG9yOiA1YzYyNjYKKyAgZm9udF9zaXplOiAkbGVhZF9mb250X3NpemUKKyAgbGluZV9oZWlnaHQ6ICRsZWFkX2xpbmVfaGVpZ2h0CisgIGZvbnRfc3R5bGU6IGl0YWxpYworICBmaXJzdF9saW5lX2ZvbnRfc3R5bGU6IGJvbGQKKyAgdGl0bGU6CisgICAgYWxpZ246IGNlbnRlcgorICAgIGZvbnRfY29sb3I6ICRoZWFkaW5nX2ZvbnRfY29sb3IKKyAgICBmb250X2ZhbWlseTogJGhlYWRpbmdfZm9udF9mYW1pbHkKKyAgICBmb250X3NpemU6ICRoZWFkaW5nX2g0X2ZvbnRfc2l6ZQorICAgIGZvbnRfc3R5bGU6ICRoZWFkaW5nX2ZvbnRfc3R5bGUKK2FkbW9uaXRpb246CisgIGNvbHVtbl9ydWxlX2NvbG9yOiAkYmFzZV9ib3JkZXJfY29sb3IKKyAgY29sdW1uX3J1bGVfd2lkdGg6ICRiYXNlX2JvcmRlcl93aWR0aAorICBwYWRkaW5nOiBbMCwgJGhvcml6b250YWxfcmh5dGhtLCAwLCAkaG9yaXpvbnRhbF9yaHl0aG1dCisgICNpY29uOgorICAjICB0aXA6CisgICMgICAgbmFtZTogZmEtbGlnaHRidWxiLW8KKyAgIyAgICBzdHJva2VfY29sb3I6IDExMTExMQorICAjICAgIHNpemU6IDI0CisgIGxhYmVsOgorICAgIHRleHRfdHJhbnNmb3JtOiB1cHBlcmNhc2UKKyAgICBmb250X3N0eWxlOiBib2xkCitibG9ja3F1b3RlOgorICBmb250X2NvbG9yOiAkYmFzZV9mb250X2NvbG9yCisgIGZvbnRfc2l6ZTogJGJhc2VfZm9udF9zaXplX2xhcmdlCisgIGJvcmRlcl9jb2xvcjogJGJhc2VfYm9yZGVyX2NvbG9yCisgIGJvcmRlcl93aWR0aDogNQorICAjIEZJWE1FIGRpc2FibGUgbmVnYXRpdmUgcGFkZGluZyBib3R0b20gb25jZSBtYXJnaW4gY29sbGFwc2luZyBpcyBpbXBsZW1lbnRlZAorICBwYWRkaW5nOiBbMCwgJGhvcml6b250YWxfcmh5dGhtLCAkYmxvY2tfbWFyZ2luX2JvdHRvbSAqIC0wLjc1LCAkaG9yaXpvbnRhbF9yaHl0aG0gKyAkYmxvY2txdW90ZV9ib3JkZXJfd2lkdGggLyAyXQorICBjaXRlX2ZvbnRfc2l6ZTogJGJhc2VfZm9udF9zaXplX3NtYWxsCisgIGNpdGVfZm9udF9jb2xvcjogOTk5OTk5CisjIGNvZGUgaXMgdXNlZCBmb3Igc291cmNlIGJsb2NrcyAocGVyaGFwcyBjaGFuZ2UgdG8gc291cmNlIG9yIGxpc3Rpbmc/KQorY29kZToKKyAgZm9udF9jb2xvcjogJGJhc2VfZm9udF9jb2xvcgorICBmb250X2ZhbWlseTogJGxpdGVyYWxfZm9udF9mYW1pbHkKKyAgZm9udF9zaXplOiBjZWlsKCRiYXNlX2ZvbnRfc2l6ZSkKKyAgcGFkZGluZzogJGNvZGVfZm9udF9zaXplCisgIGxpbmVfaGVpZ2h0OiAxLjI1CisgICMgbGluZV9nYXAgaXMgYW4gZXhwZXJpbWVudGFsIHByb3BlcnR5IHRvIGNvbnRyb2wgaG93IGEgYmFja2dyb3VuZCBjb2xvciBpcyBhcHBsaWVkIHRvIGFuIGlubGluZSBibG9jayBlbGVtZW50CisgIGxpbmVfZ2FwOiAzLjgKKyAgYmFja2dyb3VuZF9jb2xvcjogZjVmNWY1CisgIGJvcmRlcl9jb2xvcjogY2NjY2NjCisgIGJvcmRlcl9yYWRpdXM6ICRiYXNlX2JvcmRlcl9yYWRpdXMKKyAgYm9yZGVyX3dpZHRoOiAwLjc1Citjb251bToKKyAgZm9udF9mYW1pbHk6IE0rIDFtbgorICBmb250X2NvbG9yOiAkbGl0ZXJhbF9mb250X2NvbG9yCisgIGZvbnRfc2l6ZTogJGJhc2VfZm9udF9zaXplCisgIGxpbmVfaGVpZ2h0OiA0IC8gMworZXhhbXBsZToKKyAgYm9yZGVyX2NvbG9yOiAkYmFzZV9ib3JkZXJfY29sb3IKKyAgYm9yZGVyX3JhZGl1czogJGJhc2VfYm9yZGVyX3JhZGl1cworICBib3JkZXJfd2lkdGg6IDAuNzUKKyAgYmFja2dyb3VuZF9jb2xvcjogZmZmZmZmCisgICMgRklYTUUgcmVlbmFibGUgcGFkZGluZyBib3R0b20gb25jZSBtYXJnaW4gY29sbGFwc2luZyBpcyBpbXBsZW1lbnRlZAorICBwYWRkaW5nOiBbJHZlcnRpY2FsX3JoeXRobSwgJGhvcml6b250YWxfcmh5dGhtLCAwLCAkaG9yaXpvbnRhbF9yaHl0aG1dCitpbWFnZToKKyAgYWxpZ246IGxlZnQKK3Byb3NlOgorICBtYXJnaW5fdG9wOiAkYmxvY2tfbWFyZ2luX3RvcAorICBtYXJnaW5fYm90dG9tOiAkYmxvY2tfbWFyZ2luX2JvdHRvbQorc2lkZWJhcjoKKyAgYmFja2dyb3VuZF9jb2xvcjogZWVlZWVlCisgIGJvcmRlcl9jb2xvcjogZTFlMWUxCisgIGJvcmRlcl9yYWRpdXM6ICRiYXNlX2JvcmRlcl9yYWRpdXMKKyAgYm9yZGVyX3dpZHRoOiAkYmFzZV9ib3JkZXJfd2lkdGgKKyAgIyBGSVhNRSByZWVuYWJsZSBwYWRkaW5nIGJvdHRvbSBvbmNlIG1hcmdpbiBjb2xsYXBzaW5nIGlzIGltcGxlbWVudGVkCisgIHBhZGRpbmc6IFskdmVydGljYWxfcmh5dGhtLCAkdmVydGljYWxfcmh5dGhtICogMS4yNSwgMCwgJHZlcnRpY2FsX3JoeXRobSAqIDEuMjVdCisgIHRpdGxlOgorICAgIGFsaWduOiBjZW50ZXIKKyAgICBmb250X2NvbG9yOiAkaGVhZGluZ19mb250X2NvbG9yCisgICAgZm9udF9mYW1pbHk6ICRoZWFkaW5nX2ZvbnRfZmFtaWx5CisgICAgZm9udF9zaXplOiAkaGVhZGluZ19oNF9mb250X3NpemUKKyAgICBmb250X3N0eWxlOiAkaGVhZGluZ19mb250X3N0eWxlCit0aGVtYXRpY19icmVhazoKKyAgYm9yZGVyX2NvbG9yOiAkYmFzZV9ib3JkZXJfY29sb3IKKyAgYm9yZGVyX3N0eWxlOiBzb2xpZAorICBib3JkZXJfd2lkdGg6ICRiYXNlX2JvcmRlcl93aWR0aAorICBtYXJnaW5fdG9wOiAkdmVydGljYWxfcmh5dGhtICogMC41CisgIG1hcmdpbl9ib3R0b206ICR2ZXJ0aWNhbF9yaHl0aG0gKiAxLjUKK2Rlc2NyaXB0aW9uX2xpc3Q6CisgIHRlcm1fZm9udF9zdHlsZTogYm9sZAorICB0ZXJtX3NwYWNpbmc6ICR2ZXJ0aWNhbF9yaHl0aG0gLyA0CisgIGRlc2NyaXB0aW9uX2luZGVudDogJGhvcml6b250YWxfcmh5dGhtICogMS4yNQorb3V0bGluZV9saXN0OgorICBpbmRlbnQ6ICRob3Jpem9udGFsX3JoeXRobSAqIDEuNQorICAjbWFya2VyX2ZvbnRfY29sb3I6IDQwNDA0MAorICAjIE5PVEUgb3V0bGluZV9saXN0X2l0ZW1fc3BhY2luZyBhcHBsaWVzIHRvIGxpc3QgaXRlbXMgdGhhdCBkbyBub3QgaGF2ZSBjb21wbGV4IGNvbnRlbnQKKyAgaXRlbV9zcGFjaW5nOiAkdmVydGljYWxfcmh5dGhtIC8gMgordGFibGU6CisgIGJhY2tncm91bmRfY29sb3I6ICRwYWdlX2JhY2tncm91bmRfY29sb3IKKyAgI2hlYWRfYmFja2dyb3VuZF9jb2xvcjogPGhleCB2YWx1ZT4KKyAgI2hlYWRfZm9udF9jb2xvcjogJGJhc2VfZm9udF9jb2xvcgorICBoZWFkX2ZvbnRfc3R5bGU6IGJvbGQKKyAgI2JvZHlfYmFja2dyb3VuZF9jb2xvcjogPGhleCB2YWx1ZT4KKyAgYm9keV9zdHJpcGVfYmFja2dyb3VuZF9jb2xvcjogZjlmOWY5CisgIGZvb3RfYmFja2dyb3VuZF9jb2xvcjogZjBmMGYwCisgIGJvcmRlcl9jb2xvcjogZGRkZGRkCisgIGJvcmRlcl93aWR0aDogJGJhc2VfYm9yZGVyX3dpZHRoCisgIGNlbGxfcGFkZGluZzogMwordG9jOgorICBpbmRlbnQ6ICRob3Jpem9udGFsX3JoeXRobQorICBsaW5lX2hlaWdodDogMS40CisgIGRvdF9sZWFkZXI6CisgICAgI2NvbnRlbnQ6ICIuICIKKyAgICBmb250X2NvbG9yOiBhOWE5YTkKKyAgICAjbGV2ZWxzOiAyIDMKKyMgTk9URSBpbiBhZGRpdGlvbiB0byBmb290ZXIsIGhlYWRlciBpcyBhbHNvIHN1cHBvcnRlZAorZm9vdGVyOgorICBmb250X3NpemU6ICRiYXNlX2ZvbnRfc2l6ZV9zbWFsbAorICAjIE5PVEUgaWYgYmFja2dyb3VuZF9jb2xvciBpcyBzZXQsIGJhY2tncm91bmQgYW5kIGJvcmRlciB3aWxsIHNwYW4gd2lkdGggb2YgcGFnZQorICAjYm9yZGVyX2NvbG9yOiBkZGRkZGQgICAgICAgICAgICAgICAgICAgICAgICAgIyBFRQorICAjYm9yZGVyX3dpZHRoOiAwLjI1ICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBFRQorICBoZWlnaHQ6ICRiYXNlX2xpbmVfaGVpZ2h0X2xlbmd0aCAqIDIuNQorICBsaW5lX2hlaWdodDogMQorICBwYWRkaW5nOiBbJGJhc2VfbGluZV9oZWlnaHRfbGVuZ3RoIC8gMiwgMSwgMCwgMV0KKyAgdmVydGljYWxfYWxpZ246IHRvcAorICAjaW1hZ2VfdmVydGljYWxfYWxpZ246IDxhbGlnbm1lbnQ+IG9yIDxudW1iZXI+CisgICMgYWRkaXRpb25hbCBhdHRyaWJ1dGVzIGZvciBjb250ZW50OgorICAjICoge3BhZ2UtY291bnR9CisgICMgKiB7cGFnZS1udW1iZXJ9CisgICMgKiB7ZG9jdW1lbnQtdGl0bGV9CisgICMgKiB7ZG9jdW1lbnQtc3VidGl0bGV9CisgICMgKiB7Y2hhcHRlci10aXRsZX0KKyAgIyAqIHtzZWN0aW9uLXRpdGxlfQorICAjICoge3NlY3Rpb24tb3ItY2hhcHRlci10aXRsZX0KKyAgcmVjdG86CisgICAgI2NvbHVtbnM6ICI8NTAlID0wJSA+NTAlIgorICAgIHJpZ2h0OgorICAgICAgI2NvbnRlbnQ6ICd7cGFnZS1udW1iZXJ9JyAgICAgICAgICAgICAgICAgIyBFRQorICAgICAgI2NvbnRlbnQ6ICd7c2VjdGlvbi1vci1jaGFwdGVyLXRpdGxlfSB8IHtwYWdlLW51bWJlcn0nCisgICAgICAjY29udGVudDogJ3tkb2N1bWVudC10aXRsZX0gfCB7cGFnZS1udW1iZXJ9JworICAgICAgY29udGVudDogJ3tkb2N1bWVudC10aXRsZX17bmJzcH17bmJzcH17bmJzcH0gKntwYWdlLW51bWJlcn0qJyAjIEVFCisgICAgI2NlbnRlcjoKKyAgICAjICBjb250ZW50OiAne3BhZ2UtbnVtYmVyfScKKyAgICBsZWZ0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRUUKKyAgICAgIGNvbnRlbnQ6ICd7c3RhdHVzfScgICAgICAgICAgICAgICAgICAgICAgICMgRUUKKyAgdmVyc286CisgICAgI2NvbHVtbnM6ICRmb290ZXJfcmVjdG9fY29sdW1ucworICAgIGxlZnQ6CisgICAgICAjY29udGVudDogJGZvb3Rlcl9yZWN0b19yaWdodF9jb250ZW50ICAgICAjIEVFCisgICAgICAjY29udGVudDogJ3twYWdlLW51bWJlcn0gfCB7Y2hhcHRlci10aXRsZX0nCisgICAgICBjb250ZW50OiAnKntwYWdlLW51bWJlcn0qIHtuYnNwfXtuYnNwfXtuYnNwfXtkb2N1bWVudC10aXRsZX0nICMgRUUKKyAgICAjY2VudGVyOgorICAgICMgIGNvbnRlbnQ6ICd7cGFnZS1udW1iZXJ9JworICAgIHJpZ2h0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBFRQorICAgICAgY29udGVudDogJ3tzdGF0dXN9JyAgICAgICAgICAgICAgICAgICAgICAgIyBFRQoraGVhZGVyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBFRQorICBmb250X3NpemU6ICRiYXNlX2ZvbnRfc2l6ZV9zbWFsbCAgICAgICAgICAgICAgIyBFRQorICBib3JkZXJfY29sb3I6IGRkZGRkZCAgICAgICAgICAgICAgICAgICAgICAgICAgIyBFRQorICBib3JkZXJfd2lkdGg6IDAuMjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBFRQorICBoZWlnaHQ6ICRiYXNlX2xpbmVfaGVpZ2h0X2xlbmd0aCAqIDIuNSAgICAgICAgIyBFRQorICBsaW5lX2hlaWdodDogMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBFRQorICBwYWRkaW5nOiBbJGJhc2VfbGluZV9oZWlnaHRfbGVuZ3RoIC8gMiwgMSwgMCwgMV0gIyBFRQorICB2ZXJ0aWNhbF9hbGlnbjogdG9wICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBFRQorICByZWN0bzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBFRQorICAgIHJpZ2h0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBFRQorICAgICAgY29udGVudDogJ3tzZWN0aW9uLW9yLWNoYXB0ZXItdGl0bGV9JyAgICAgIyBFRQorICB2ZXJzbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBFRQorICAgIGxlZnQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBFRQorICAgICAgY29udGVudDogJ3tzZWN0aW9uLW9yLWNoYXB0ZXItdGl0bGV9JyAgICAgIyBFRQpkaWZmIC0tZ2l0IGEvdGNrL3BvbS54bWwgYi90Y2svcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDdiYzVkCi0tLSAvZGV2L251bGwKKysrIGIvdGNrL3BvbS54bWwKQEAgLTAsMCArMSwxOTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisKKyAgICBDb3B5cmlnaHQgKGMpIDIwMjQgQ29udHJpYnV0b3JzIHRvIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24KKyAgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCisgICAgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2Ugdi4gMi4wLCB3aGljaCBpcyBhdmFpbGFibGUgYXQKKyAgICBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAuCisKKyAgICBUaGlzIFNvdXJjZSBDb2RlIG1heSBhbHNvIGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBmb2xsb3dpbmcgU2Vjb25kYXJ5CisgICAgTGljZW5zZXMgd2hlbiB0aGUgY29uZGl0aW9ucyBmb3Igc3VjaCBhdmFpbGFiaWxpdHkgc2V0IGZvcnRoIGluIHRoZQorICAgIEVjbGlwc2UgUHVibGljIExpY2Vuc2Ugdi4gMi4wIGFyZSBzYXRpc2ZpZWQ6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICAgIHZlcnNpb24gMiB3aXRoIHRoZSBHTlUgQ2xhc3NwYXRoIEV4Y2VwdGlvbiwgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CisgICAgaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9jbGFzc3BhdGgvbGljZW5zZS5odG1sLgorCisgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCisKKy0tPgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCisgICAgPHBhcmVudD4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuZWU0ajwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+cHJvamVjdDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+MS4wLjk8L3ZlcnNpb24+CisgICAgPC9wYXJlbnQ+CisKKyAgICA8Z3JvdXBJZD5qYWthcnRhLmFubm90YXRpb248L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+amFrYXJ0YS1hbm5vdGF0aW9ucy10Y2s8L2FydGlmYWN0SWQ+CisgICAgPHZlcnNpb24+My4wLjA8L3ZlcnNpb24+CisgICAgPHBhY2thZ2luZz5qYXI8L3BhY2thZ2luZz4KKworICAgIDxuYW1lPkFubm90YXRpb25zLVRDSzwvbmFtZT4KKyAgICA8ZGVzY3JpcHRpb24+Q29tbW9uIEFubm90YXRpb25zIFRDSzwvZGVzY3JpcHRpb24+CisKKyAgICA8cHJvcGVydGllcz4KKyAgICAgICAgPGpha2FydGEuYW5ub3RhdGlvbnMtYXBpLnZlcnNpb24+My4wLjA8L2pha2FydGEuYW5ub3RhdGlvbnMtYXBpLnZlcnNpb24+CisgICAgICAgIDxqdW5pdC5qdXBpdGVyLnZlcnNpb24+NS4xMC4yPC9qdW5pdC5qdXBpdGVyLnZlcnNpb24+CisKKyAgICAgICAgPG1hdmVuLmNvbXBpbGVyLnJlbGVhc2U+MTc8L21hdmVuLmNvbXBpbGVyLnJlbGVhc2U+CisgICAgICAgIDxtYXZlbi5jb21waWxlci50ZXN0UmVsZWFzZT4ke21hdmVuLmNvbXBpbGVyLnJlbGVhc2V9PC9tYXZlbi5jb21waWxlci50ZXN0UmVsZWFzZT4KKyAgICA8L3Byb3BlcnRpZXM+CisKKyAgICA8ZGVwZW5kZW5jaWVzPgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPmpha2FydGEuYW5ub3RhdGlvbjwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmpha2FydGEuYW5ub3RhdGlvbi1hcGk8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4ke2pha2FydGEuYW5ub3RhdGlvbnMtYXBpLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmp1bml0Lmp1cGl0ZXI8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qdW5pdC1qdXBpdGVyPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+JHtqdW5pdC5qdXBpdGVyLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICAgPHNjb3BlPmNvbXBpbGU8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgPC9kZXBlbmRlbmNpZXM+CisKKyAgICA8YnVpbGQ+CisgICAgICAgIDxwbHVnaW5NYW5hZ2VtZW50PgorICAgICAgICAgICAgPHBsdWdpbnM+CisgICAgICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1qYXZhZG9jLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+My42LjM8L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zb3VyY2UtcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4zLjMuMDwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWNvbXBpbGVyLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+My4xMi4xPC92ZXJzaW9uPgorICAgICAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tYXNzZW1ibHktcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4zLjYuMDwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5qYWthcnRhLnRjazwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+c2lndGVzdC1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjIuMjwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgICAgIDwvcGx1Z2lucz4KKyAgICAgICAgPC9wbHVnaW5NYW5hZ2VtZW50PgorCisgICAgICAgIDxmaW5hbE5hbWU+JHtidW5kbGUtbmFtZX0tJHtwcm9qZWN0LnZlcnNpb259PC9maW5hbE5hbWU+CisgICAgICAgIDxyZXNvdXJjZXM+CisgICAgICAgICAgICA8cmVzb3VyY2U+CisgICAgICAgICAgICAgICAgPGRpcmVjdG9yeT5zcmMvbWFpbi9yZXNvdXJjZXM8L2RpcmVjdG9yeT4KKyAgICAgICAgICAgICAgICA8aW5jbHVkZXM+CisgICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlPkxJQ0VOU0VfJHtsaWNlbnNlfS5tZDwvaW5jbHVkZT4KKyAgICAgICAgICAgICAgICAgICAgPGluY2x1ZGU+Y29tLzwvaW5jbHVkZT4KKyAgICAgICAgICAgICAgICAgICAgPGluY2x1ZGU+KiovKnNpZyovKio8L2luY2x1ZGU+CisgICAgICAgICAgICAgICAgPC9pbmNsdWRlcz4KKyAgICAgICAgICAgIDwvcmVzb3VyY2U+CisgICAgICAgIDwvcmVzb3VyY2VzPgorICAgICAgICA8cGx1Z2lucz4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWphdmFkb2MtcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8ZG9jbGludD5ub25lPC9kb2NsaW50PgorICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc291cmNlLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpZD5hdHRhY2gtc291cmNlczwvaWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+amFyLW5vLWZvcms8L2dvYWw+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgorICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWFzc2VtYmx5LXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpZD5kaXN0cmlidXRpb248L2lkPgorICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPnNpbmdsZTwvZ29hbD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGhhc2U+cGFja2FnZTwvcGhhc2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVzY3JpcHRvcnM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZXNjcmlwdG9yPnNyYy9tYWluL2Fzc2VtYmx5L2Fzc2VtYmx5LnhtbDwvZGVzY3JpcHRvcj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rlc2NyaXB0b3JzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlc2NhcGVTdHJpbmc+XDwvZXNjYXBlU3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHBlbmRBc3NlbWJseUlkPmZhbHNlPC9hcHBlbmRBc3NlbWJseUlkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaW5hbE5hbWU+JHtidW5kbGUtbmFtZX0tJHtwcm9qZWN0LnZlcnNpb259PC9maW5hbE5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICA8L3BsdWdpbnM+CisgICAgPC9idWlsZD4KKworICAgIDxwcm9maWxlcz4KKyAgICAgICAgPHByb2ZpbGU+CisgICAgICAgICAgICA8aWQ+RUZUTDwvaWQ+CisgICAgICAgICAgICA8YWN0aXZhdGlvbj4KKyAgICAgICAgICAgICAgICA8YWN0aXZlQnlEZWZhdWx0PnRydWU8L2FjdGl2ZUJ5RGVmYXVsdD4KKyAgICAgICAgICAgIDwvYWN0aXZhdGlvbj4KKyAgICAgICAgICAgIDxwcm9wZXJ0aWVzPgorICAgICAgICAgICAgICAgIDxidW5kbGUtbmFtZT5qYWthcnRhLWFubm90YXRpb25zLXRjazwvYnVuZGxlLW5hbWU+CisgICAgICAgICAgICAgICAgPGxpY2Vuc2U+RUZUTDwvbGljZW5zZT4KKyAgICAgICAgICAgIDwvcHJvcGVydGllcz4KKyAgICAgICAgPC9wcm9maWxlPgorICAgICAgICA8cHJvZmlsZT4KKyAgICAgICAgICAgIDxpZD5FUEw8L2lkPgorICAgICAgICAgICAgPHByb3BlcnRpZXM+CisgICAgICAgICAgICAgICAgPGJ1bmRsZS1uYW1lPmFubm90YXRpb25zLXRjazwvYnVuZGxlLW5hbWU+CisgICAgICAgICAgICAgICAgPGxpY2Vuc2U+RVBMPC9saWNlbnNlPgorICAgICAgICAgICAgPC9wcm9wZXJ0aWVzPgorICAgICAgICA8L3Byb2ZpbGU+CisgICAgICAgIDxwcm9maWxlPgorICAgICAgICAgICAgPGlkPnJlY29yZC1zaWduYXR1cmU8L2lkPgorICAgICAgICAgICAgPGFjdGl2YXRpb24+CisgICAgICAgICAgICAgICAgPGFjdGl2ZUJ5RGVmYXVsdD5mYWxzZTwvYWN0aXZlQnlEZWZhdWx0PgorICAgICAgICAgICAgPC9hY3RpdmF0aW9uPgorICAgICAgICAgICAgPHByb3BlcnRpZXM+CisgICAgICAgICAgICAgICAgPGJ1bmRsZS1uYW1lPmpha2FydGEtYW5ub3RhdGlvbnMtdGNrPC9idW5kbGUtbmFtZT4KKyAgICAgICAgICAgICAgICA8bGljZW5zZT5FRlRMPC9saWNlbnNlPgorICAgICAgICAgICAgPC9wcm9wZXJ0aWVzPgorICAgICAgICAgICAgPGJ1aWxkPgorICAgICAgICAgICAgICAgIDxwbHVnaW5zPgorICAgICAgICAgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+amFrYXJ0YS50Y2s8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zaWd0ZXN0LW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzaWdmaWxlPiR7cHJvamVjdC5idWlsZC5kaXJlY3Rvcnl9L2pha2FydGEuYW5ub3RhdGlvbi5zaWdfJHtwcm9qZWN0LnZlcnNpb259PC9zaWdmaWxlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYWNrYWdlcz5qYWthcnRhLmFubm90YXRpb24samFrYXJ0YS5hbm5vdGF0aW9uLnNlY3VyaXR5LGpha2FydGEuYW5ub3RhdGlvbi5zcWw8L3BhY2thZ2VzPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+Z2VuZXJhdGU8L2dvYWw+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+CisgICAgICAgICAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgICAgICAgIDwvcGx1Z2lucz4KKyAgICAgICAgICAgIDwvYnVpbGQ+CisgICAgICAgIDwvcHJvZmlsZT4KKyAgICA8L3Byb2ZpbGVzPgorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGNrL3NyYy9tYWluL2Fzc2VtYmx5L2Fzc2VtYmx5LnhtbCBiL3Rjay9zcmMvbWFpbi9hc3NlbWJseS9hc3NlbWJseS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVlNGY3ZQotLS0gL2Rldi9udWxsCisrKyBiL3Rjay9zcmMvbWFpbi9hc3NlbWJseS9hc3NlbWJseS54bWwKQEAgLTAsMCArMSw4MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKworICAgIENvcHlyaWdodCAoYykgMjAyNCBPcmFjbGUgYW5kL29yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCisgICAgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2Ugdi4gMi4wLCB3aGljaCBpcyBhdmFpbGFibGUgYXQKKyAgICBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAuCisKKyAgICBUaGlzIFNvdXJjZSBDb2RlIG1heSBhbHNvIGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBmb2xsb3dpbmcgU2Vjb25kYXJ5CisgICAgTGljZW5zZXMgd2hlbiB0aGUgY29uZGl0aW9ucyBmb3Igc3VjaCBhdmFpbGFiaWxpdHkgc2V0IGZvcnRoIGluIHRoZQorICAgIEVjbGlwc2UgUHVibGljIExpY2Vuc2Ugdi4gMi4wIGFyZSBzYXRpc2ZpZWQ6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICAgIHZlcnNpb24gMiB3aXRoIHRoZSBHTlUgQ2xhc3NwYXRoIEV4Y2VwdGlvbiwgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CisgICAgaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9jbGFzc3BhdGgvbGljZW5zZS5odG1sLgorCisgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCisKKy0tPgorCis8YXNzZW1ibHkgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL0FTU0VNQkxZLzIuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvQVNTRU1CTFkvMi4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL2Fzc2VtYmx5LTIuMC4wLnhzZCI+CisgICAgPGlkPmRpc3RyaWJ1dGlvbjwvaWQ+CisgICAgPGJhc2VEaXJlY3Rvcnk+YW5ub3RhdGlvbnMtdGNrPC9iYXNlRGlyZWN0b3J5PgorICAgIDxmb3JtYXRzPgorICAgICAgICA8Zm9ybWF0PnppcDwvZm9ybWF0PgorICAgIDwvZm9ybWF0cz4KKworICAgIDxmaWxlcz4KKyAgICAgICAgPCEtLSBsaWNlbnNlIC0tPgorICAgICAgICA8ZmlsZT4KKyAgICAgICAgICAgIDxzb3VyY2U+JHtwcm9qZWN0LmJhc2VkaXJ9L3NyYy9tYWluL3Jlc291cmNlcy9MSUNFTlNFXyR7bGljZW5zZX0ubWQ8L3NvdXJjZT4KKyAgICAgICAgICAgIDxkZXN0TmFtZT5MSUNFTlNFLm1kPC9kZXN0TmFtZT4KKyAgICAgICAgPC9maWxlPgorICAgIDwvZmlsZXM+CisgICAgPGZpbGVTZXRzPgorICAgICAgICA8ZmlsZVNldD4KKyAgICAgICAgICAgIDxkaXJlY3Rvcnk+JHtwcm9qZWN0LmJ1aWxkLmRpcmVjdG9yeX08L2RpcmVjdG9yeT4KKyAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+YXJ0aWZhY3RzPC9vdXRwdXREaXJlY3Rvcnk+CisgICAgICAgICAgICA8ZmlsZU1vZGU+NzU1PC9maWxlTW9kZT4KKyAgICAgICAgICAgIDxpbmNsdWRlcz4KKyAgICAgICAgICAgICAgICA8aW5jbHVkZT4qKi8qLmphcjwvaW5jbHVkZT4KKyAgICAgICAgICAgIDwvaW5jbHVkZXM+CisgICAgICAgIDwvZmlsZVNldD4KKyAgICAgICAgPGZpbGVTZXQ+CisgICAgICAgICAgICA8ZGlyZWN0b3J5PiR7cHJvamVjdC5iYXNlZGlyfS9kb2NzPC9kaXJlY3Rvcnk+CisgICAgICAgICAgICA8b3V0cHV0RGlyZWN0b3J5PmRvY3M8L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgICAgIDxmaWxlTW9kZT43NTU8L2ZpbGVNb2RlPgorICAgICAgICAgICAgPGluY2x1ZGVzPgorICAgICAgICAgICAgICAgIDxpbmNsdWRlPiouaHRtbDwvaW5jbHVkZT4KKyAgICAgICAgICAgICAgICA8aW5jbHVkZT4qLnR4dDwvaW5jbHVkZT4KKyAgICAgICAgICAgIDwvaW5jbHVkZXM+CisgICAgICAgIDwvZmlsZVNldD4KKyAgICAgICAgPGZpbGVTZXQ+CisgICAgICAgICAgICA8ZGlyZWN0b3J5PiR7cHJvamVjdC5iYXNlZGlyfS9kb2NzL3Rjay1ydW5uZXI8L2RpcmVjdG9yeT4KKyAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+dGNrLXJ1bm5lcjwvb3V0cHV0RGlyZWN0b3J5PgorICAgICAgICAgICAgPGZpbGVNb2RlPjc1NTwvZmlsZU1vZGU+CisgICAgICAgIDwvZmlsZVNldD4KKyAgICAgICAgPGZpbGVTZXQ+CisgICAgICAgICAgICA8ZGlyZWN0b3J5PiR7cHJvamVjdC5iYXNlZGlyfS9kb2NzL3VzZXJndWlkZS90YXJnZXQvZ2VuZXJhdGVkLWRvY3M8L2RpcmVjdG9yeT4KKyAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+ZG9jcy9wZGYtdXNlcnNndWlkZTwvb3V0cHV0RGlyZWN0b3J5PgorICAgICAgICAgICAgPGZpbGVNb2RlPjc1NTwvZmlsZU1vZGU+CisgICAgICAgICAgICA8aW5jbHVkZXM+CisgICAgICAgICAgICAgICAgPGluY2x1ZGU+Ki5wZGY8L2luY2x1ZGU+CisgICAgICAgICAgICA8L2luY2x1ZGVzPgorICAgICAgICA8L2ZpbGVTZXQ+CisgICAgICAgIDxmaWxlU2V0PgorICAgICAgICAgICAgPGRpcmVjdG9yeT4ke3Byb2plY3QuYmFzZWRpcn0vZG9jcy91c2VyZ3VpZGUvdGFyZ2V0L3N0YWdpbmc8L2RpcmVjdG9yeT4KKyAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+ZG9jcy9odG1sLXVzZXJzZ3VpZGU8L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgICAgIDxmaWxlTW9kZT43NTU8L2ZpbGVNb2RlPgorICAgICAgICAgICAgPGluY2x1ZGVzPgorICAgICAgICAgICAgICAgIDxpbmNsdWRlPiouaHRtbDwvaW5jbHVkZT4KKyAgICAgICAgICAgICAgICA8aW5jbHVkZT5jc3MvKio8L2luY2x1ZGU+CisgICAgICAgICAgICAgICAgPGluY2x1ZGU+aW1nLyoqPC9pbmNsdWRlPgorICAgICAgICAgICAgPC9pbmNsdWRlcz4KKyAgICAgICAgPC9maWxlU2V0PgorICAgICAgICA8ZmlsZVNldD4KKyAgICAgICAgICAgIDxkaXJlY3Rvcnk+JHtwcm9qZWN0LmJhc2VkaXJ9L3NyYy9tYWluL2Rpc3Q8L2RpcmVjdG9yeT4KKyAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+Ljwvb3V0cHV0RGlyZWN0b3J5PgorICAgICAgICAgICAgPGZpbHRlcmVkPmZhbHNlPC9maWx0ZXJlZD4KKyAgICAgICAgPC9maWxlU2V0PgorICAgIDwvZmlsZVNldHM+Cis8L2Fzc2VtYmx5PgpkaWZmIC0tZ2l0IGEvdGNrL3NyYy9tYWluL2Rpc3QvUkVBRE1FIGIvdGNrL3NyYy9tYWluL2Rpc3QvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiNDI5ZjcKLS0tIC9kZXYvbnVsbAorKysgYi90Y2svc3JjL21haW4vZGlzdC9SRUFETUUKQEAgLTAsMCArMSwyMyBAQAorVGhlIHBvbS54bWwgaW4gdGhpcyBmb2xkZXIgY2FuIGJlIHVzZWQgdG8gcnVuIHRoZSBKYWthcnRhIEFubm90YXRpb25zIFN0YW5kYWxvbmUgVENLCithZ2FpbnN0IEdsYXNzZmlzaCA4LjAuMAorCisKK0JlbG93IGFyZSB0aGUgaW5zdHJ1Y3Rpb25zIHRvIHJ1biB0aGUgSmFrYXJ0YSBBbm5vdGF0aW9ucyBUQ0sKKworMS4gSW5zdGFsbCBKYXZhMTcrICwgc2V0IEpBVkFfSE9NRQorCisyLiBJbnN0YWxsIE1hdmVuIDMuNisgc2V0IE0yX0hPTUUKKworMy4gc2V0IGVudmlyb25tZW50IHZhcmlhYmxlczoKKyBTRVQgUEFUSCA6IGFkZCBNMl9IT01FL2JpbiwgSkFWQV9IT01FL2JpbgorZWc6IGV4cG9ydCBQQVRIPSRNMl9IT01FL2JpbjokSkFWQV9IT01FL2JpbjokUEFUSAorIFNFVCBBTk5PVEFUSU9OU19UQ0tfSE9NRSA6IHJvb3QgZm9sZGVyIG9mIHRoZSBUQ0sgaW5zdGFsbGF0aW9uCitlZzogZXhwb3J0IEFOTk9UQVRJT05TX1RDS19IT01FPS4KKworNC4gSW5zdGFsbCB0aGUgdGNrIGphciBqYWthcnRhLWFubm90YXRpb25zLXRjay08dmVyc2lvbj4uamFyIGF2YWlsYWJsZQorIGluIHRoZSBhbm5vdGF0aW9ucy10Y2svYXJ0aWZhY3RzIGZvbGRlciB1c2luZyBhcnRpZmFjdC1pbnN0YWxsLnNoIHNjcmlwdAorZWc6IGNkICRBTk5PVEFUSU9OU19UQ0tfSE9NRS9hcnRpZmFjdHMgJiYgLi9hcnRpZmFjdC1pbnN0YWxsLnNoCisKKzUuIFVzZSB0aGUgc2FtcGxlIHBvbS54bWwgYXZhaWxhYmxlIGluIHRoZSBhbm5vdGF0aW9ucy10Y2svdGNrLXJ1bm5lciwKK3RvIHJ1biB0aGUgdGVzdCB3aXRoIEdsYXNzZmlzaCwgdmVyaWZ5IHRoZSBzeXN0ZW0gcHJvcGVydGllcyBzZXQuCitlZzogYG12biBjbGVhbiB2ZXJpZnkgLWYgJCRBTk5PVEFUSU9OU19UQ0tfSE9NRS90Y2stcnVubmVyL3BvbS54bWxgCmRpZmYgLS1naXQgYS90Y2svc3JjL21haW4vZGlzdC9hcnRpZmFjdHMvYXJ0aWZhY3QtaW5zdGFsbC5zaCBiL3Rjay9zcmMvbWFpbi9kaXN0L2FydGlmYWN0cy9hcnRpZmFjdC1pbnN0YWxsLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjlhMGUxYWQKLS0tIC9kZXYvbnVsbAorKysgYi90Y2svc3JjL21haW4vZGlzdC9hcnRpZmFjdHMvYXJ0aWZhY3QtaW5zdGFsbC5zaApAQCAtMCwwICsxLDM0IEBACisjIS91c3IvYmluL2VudiBiYXNoCisjCisjIENvcHlyaWdodCAoYykgMjAyNCBPcmFjbGUgYW5kL29yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKKyMgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2Ugdi4gMi4wLCB3aGljaCBpcyBhdmFpbGFibGUgYXQKKyMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLgorIworIyBUaGlzIFNvdXJjZSBDb2RlIG1heSBhbHNvIGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBmb2xsb3dpbmcgU2Vjb25kYXJ5CisjIExpY2Vuc2VzIHdoZW4gdGhlIGNvbmRpdGlvbnMgZm9yIHN1Y2ggYXZhaWxhYmlsaXR5IHNldCBmb3J0aCBpbiB0aGUKKyMgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2LiAyLjAgYXJlIHNhdGlzZmllZDogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisjIHZlcnNpb24gMiB3aXRoIHRoZSBHTlUgQ2xhc3NwYXRoIEV4Y2VwdGlvbiwgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CisjIGh0dHBzOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvY2xhc3NwYXRoL2xpY2Vuc2UuaHRtbC4KKyMKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCisjCisKKyMjc2NyaXB0IHRvIGluc3RhbGwgdGhlIGFydGlmYWN0IGRpcmVjdG9yeSBjb250ZW50cyBpbnRvIGEgbG9jYWwgbWF2ZW4gcmVwb3NpdG9yeQorCitpZiBbWyAkMSA9fiBeWzAtOV0rXC5bMC05XStcLlswLTldKy4qJCBdXTsgdGhlbgorICBWRVJTSU9OPSIkMSIKK2Vsc2UKKyAgVkVSU0lPTj0iMy4wLjAiCitmaQorCisjIHRlc3QgamFyCittdm4gb3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zOm1hdmVuLWluc3RhbGwtcGx1Z2luOjMuMC4wLU0xOmluc3RhbGwtZmlsZSBcCistRGZpbGU9amFrYXJ0YS1hbm5vdGF0aW9ucy10Y2stIiRWRVJTSU9OIi5qYXIgLURncm91cElkPWpha2FydGEuYW5ub3RhdGlvbiBcCistRGFydGlmYWN0SWQ9amFrYXJ0YS1hbm5vdGF0aW9ucy10Y2sgLUR2ZXJzaW9uPSIkVkVSU0lPTiIgLURwYWNrYWdpbmc9amFyCisKKyMgdGVzdCBzb3VyY2VzIGphcgorbXZuIG9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczptYXZlbi1pbnN0YWxsLXBsdWdpbjozLjAuMC1NMTppbnN0YWxsLWZpbGUgXAorLURmaWxlPWpha2FydGEtYW5ub3RhdGlvbnMtdGNrLSIkVkVSU0lPTiItc291cmNlcy5qYXIgLURncm91cElkPWpha2FydGEuYW5ub3RhdGlvbiBcCistRGFydGlmYWN0SWQ9amFrYXJ0YS1hbm5vdGF0aW9ucy10Y2stc291cmNlcyAtRHZlcnNpb249IiRWRVJTSU9OIiAtRHBhY2thZ2luZz1qYXIKZGlmZiAtLWdpdCBhL3Rjay9zcmMvbWFpbi9qYXZhL2VlL2pha2FydGEvdGNrL2Fubm90YXRpb25zL3NpZ25hdHVyZXRlc3QvQ0FKU2lnVGVzdElULmphdmEgYi90Y2svc3JjL21haW4vamF2YS9lZS9qYWthcnRhL3Rjay9hbm5vdGF0aW9ucy9zaWduYXR1cmV0ZXN0L0NBSlNpZ1Rlc3RJVC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlZWVhNGIKLS0tIC9kZXYvbnVsbAorKysgYi90Y2svc3JjL21haW4vamF2YS9lZS9qYWthcnRhL3Rjay9hbm5vdGF0aW9ucy9zaWduYXR1cmV0ZXN0L0NBSlNpZ1Rlc3RJVC5qYXZhCkBAIC0wLDAgKzEsMjkxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDI0IE9yYWNsZSBhbmQvb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCisgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2LiAyLjAsIHdoaWNoIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLgorICoKKyAqIFRoaXMgU291cmNlIENvZGUgbWF5IGFsc28gYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIGZvbGxvd2luZyBTZWNvbmRhcnkKKyAqIExpY2Vuc2VzIHdoZW4gdGhlIGNvbmRpdGlvbnMgZm9yIHN1Y2ggYXZhaWxhYmlsaXR5IHNldCBmb3J0aCBpbiB0aGUKKyAqIEVjbGlwc2UgUHVibGljIExpY2Vuc2Ugdi4gMi4wIGFyZSBzYXRpc2ZpZWQ6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyIHdpdGggdGhlIEdOVSBDbGFzc3BhdGggRXhjZXB0aW9uLCB3aGljaCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHBzOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvY2xhc3NwYXRoL2xpY2Vuc2UuaHRtbC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKKyAqLworCitwYWNrYWdlIGVlLmpha2FydGEudGNrLmFubm90YXRpb25zLnNpZ25hdHVyZXRlc3Q7CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKKworaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5UZXN0OworCitpbXBvcnQgamF2YS5sYW5nLlN5c3RlbS5Mb2dnZXI7CisvKgorICogVGhpcyBjbGFzcyBpcyBhIHNpbXBsZSBleGFtcGxlIG9mIGEgc2lnbmF0dXJlIHRlc3QgdGhhdCBleHRlbmRzIHRoZQorICogU2lnVGVzdCBmcmFtZXdvcmsgY2xhc3MuICBUaGlzIHNpZ25hdHVyZSB0ZXN0IGlzIHJ1biBvdXRzaWRlIG9mIHRoZQorICogSjJFRSBjb250YWluZXJzLiAgVGhpcyBjbGFzcyBhbHNvIGNvbnRhaW5zIHRoZSBib2lsZXJwbGF0ZQorICogY29kZSBuZWNlc3NhcnkgdG8gY3JlYXRlIGEgc2lnbmF0dXJlIHRlc3QgdXNpbmcgdGhlIHRlc3QgZnJhbWV3b3JrLgorICogVG8gc2VlIGEgY29tcGxldGUgVENLIGV4YW1wbGUgc2VlIHRoZSBqMmVlIGRpcmVjdG9yeSBmb3IgdGhlIEoyRUUKKyAqIFRDSyBzaWduYXR1cmUgdGVzdCBjbGFzcy4KKyAqLworcHVibGljIGNsYXNzIENBSlNpZ1Rlc3RJVCBleHRlbmRzIFNpZ1Rlc3QgeworCisgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBTeXN0ZW0uZ2V0TG9nZ2VyKENBSlNpZ1Rlc3RJVC5jbGFzcy5nZXROYW1lKCkpOworCisgIHByaXZhdGUgUHJvcGVydGllcyBwcm9wcyA9IG51bGw7CisKKyAgcHVibGljIENBSlNpZ1Rlc3RJVCgpIHsKKyAgICBwcm9wcyA9IFN5c3RlbS5nZXRQcm9wZXJ0aWVzKCk7CisgICAgc2V0dXAoKTsKKyAgfQorCisgIC8vIGFsbCB0aGUgY2xhc3NlcyB0aGF0IG1ha2UgdXAgY29tbW9uIGFubm90YXRpb25zCisgIHByaXZhdGUgZmluYWwgU3RyaW5nIEdFTkVSQVRFRCA9ICJqYWthcnRhLmFubm90YXRpb24uR2VuZXJhdGVkIjsKKworICBwcml2YXRlIGZpbmFsIFN0cmluZyBQT1NUQ09OU1RSVUNUID0gImpha2FydGEuYW5ub3RhdGlvbi5Qb3N0Q29uc3RydWN0IjsKKworICBwcml2YXRlIGZpbmFsIFN0cmluZyBQUkVERVNUUk9ZID0gImpha2FydGEuYW5ub3RhdGlvbi5QcmVEZXN0cm95IjsKKworICBwcml2YXRlIGZpbmFsIFN0cmluZyBQUklPUklUWSA9ICJqYWthcnRhLmFubm90YXRpb24uUHJpb3JpdHkiOworCisgIHByaXZhdGUgZmluYWwgU3RyaW5nIFJFU09VUkNFID0gImpha2FydGEuYW5ub3RhdGlvbi5SZXNvdXJjZSxqYWthcnRhLmFubm90YXRpb24uUmVzb3VyY2UkQXV0aGVudGljYXRpb25UeXBlIjsKKworICBwcml2YXRlIGZpbmFsIFN0cmluZyBSRVNPVVJDRVMgPSAiamFrYXJ0YS5hbm5vdGF0aW9uLlJlc291cmNlcyI7CisKKyAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgU0VDVVJJVFlERUNMQVJFUk9MRVMgPSAiamFrYXJ0YS5hbm5vdGF0aW9uLnNlY3VyaXR5LkRlY2xhcmVSb2xlcyI7CisKKyAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgU0VDVVJJVFlERU5ZQUxMID0gImpha2FydGEuYW5ub3RhdGlvbi5zZWN1cml0eS5EZW55QWxsIjsKKworICBwcml2YXRlIGZpbmFsIFN0cmluZyBTRUNVUklUWVBFUk1JVEFMTCA9ICJqYWthcnRhLmFubm90YXRpb24uc2VjdXJpdHkuUGVybWl0QWxsIjsKKworICBwcml2YXRlIGZpbmFsIFN0cmluZyBTRUNVUklUWVJPTEVTQUxMT1dFRCA9ICJqYWthcnRhLmFubm90YXRpb24uc2VjdXJpdHkuUm9sZXNBbGxvd2VkIjsKKworICBwcml2YXRlIGZpbmFsIFN0cmluZyBTRUNVUklUWVJVTkFTID0gImpha2FydGEuYW5ub3RhdGlvbi5zZWN1cml0eS5SdW5BcyI7CisKKyAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgU1FMREFUQVNPVVJDRURFRklOSVRJT04gPSAiamFrYXJ0YS5hbm5vdGF0aW9uLnNxbC5EYXRhU291cmNlRGVmaW5pdGlvbiI7CisKKyAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgU1FMREFUQVNPVVJDRURFRklOSVRJT05TID0gImpha2FydGEuYW5ub3RhdGlvbi5zcWwuRGF0YVNvdXJjZURlZmluaXRpb25zIjsKKworICBwcml2YXRlIGJvb2xlYW4gY2FfZ2VuZXJhdGVkID0gZmFsc2U7CisKKyAgcHJpdmF0ZSBib29sZWFuIGNhX3Bvc3Rjb25zdHJ1Y3QgPSBmYWxzZTsKKworICBwcml2YXRlIGJvb2xlYW4gY2FfcHJpb3JpdHkgPSBmYWxzZTsKKworICBwcml2YXRlIGJvb2xlYW4gY2FfcHJlZGVzdHJveSA9IGZhbHNlOworCisgIHByaXZhdGUgYm9vbGVhbiBjYV9yZXNvdXJjZSA9IGZhbHNlOworCisgIHByaXZhdGUgYm9vbGVhbiBjYV9yZXNvdXJjZXMgPSBmYWxzZTsKKworICBwcml2YXRlIGJvb2xlYW4gY2Ffc2VjdXJpdHlkZWNsYXJlcm9sZXMgPSBmYWxzZTsKKworICBwcml2YXRlIGJvb2xlYW4gY2Ffc2VjdXJpdHlkZW55YWxsID0gZmFsc2U7CisKKyAgcHJpdmF0ZSBib29sZWFuIGNhX3NlY3VyaXR5cGVybWl0YWxsID0gZmFsc2U7CisKKyAgcHJpdmF0ZSBib29sZWFuIGNhX3NlY3VyaXR5cm9sZXNhbGxvd2VkID0gZmFsc2U7CisKKyAgcHJpdmF0ZSBib29sZWFuIGNhX3NlY3VyaXR5cnVuYXMgPSBmYWxzZTsKKworICBwcml2YXRlIGJvb2xlYW4gY2Ffc3FsZGF0YXNvdXJjZWRlZmluaXRpb24gPSBmYWxzZTsKKworICBwcml2YXRlIGJvb2xlYW4gY2Ffc3FsZGF0YXNvdXJjZWRlZmluaXRpb25zID0gZmFsc2U7CisKKyAgLyoqKioqIEFic3RyYWN0IE1ldGhvZCBJbXBsZW1lbnRhdGlvbiAqKioqKi8KKworICAvKioKKyAgICogUmV0dXJucyBhIGxpc3Qgb2Ygc3RyaW5ncyB3aGVyZSBlYWNoIHN0cmluZyByZXByZXNlbnRzIGEgcGFja2FnZSBuYW1lLiBFYWNoCisgICAqIHBhY2thZ2UgbmFtZSB3aWxsIGhhdmUgaXQncyBzaWduYXR1cmUgdGVzdGVkIGJ5IHRoZSBzaWduYXR1cmUgdGVzdAorICAgKiBmcmFtZXdvcmsuCisgICAqCisgICAqIEByZXR1cm4gU3RyaW5nW10gVGhlIG5hbWVzIG9mIHRoZSBwYWNrYWdlcyB3aG9zZSBzaWduYXR1cmVzIHNob3VsZCBiZQorICAgKiAgICAgICAgIHZlcmlmaWVkLgorICAgKi8KKyAgcHJvdGVjdGVkIFN0cmluZ1tdIGdldFBhY2thZ2VzKCkgeworICAgIHJldHVybiBuZXcgU3RyaW5nW10ge307CisgIH0KKworICBwcm90ZWN0ZWQgU3RyaW5nW10gZ2V0Q2xhc3NlcygpIHsKKyAgICAvLyBnZW5lcmF0ZSBhIFN0cmluZ1tdIG9mIHRoZSBjbGFzc2VzIHRoYXQgc2hvdWxkIGJlIHZlcmlmaWVkIGJhc2VkCisgICAgLy8gb24gd2hhdCBhbm5vdGF0aW9ucyBhcmUgc2VsZWN0ZWQgaW4gdGhlIHRzLmp0ZQorICAgIEFycmF5TGlzdCBjbGFzc2VzQXJyYXkgPSBuZXcgQXJyYXlMaXN0KCk7CisgICAgaWYgKGNhX2dlbmVyYXRlZCkgeworICAgICAgY2xhc3Nlc0FycmF5LmFkZChHRU5FUkFURUQpOworICAgIH0KKyAgICBpZiAoY2FfcG9zdGNvbnN0cnVjdCkgeworICAgICAgY2xhc3Nlc0FycmF5LmFkZChQT1NUQ09OU1RSVUNUKTsKKyAgICB9CisgICAgaWYgKGNhX3ByaW9yaXR5KSB7CisgICAgICBjbGFzc2VzQXJyYXkuYWRkKFBSSU9SSVRZKTsKKyAgICB9CisgICAgaWYgKGNhX3ByZWRlc3Ryb3kpIHsKKyAgICAgIGNsYXNzZXNBcnJheS5hZGQoUFJFREVTVFJPWSk7CisgICAgfQorICAgIGlmIChjYV9yZXNvdXJjZSkgeworICAgICAgU3RyaW5nW10gcyA9IFJFU09VUkNFLnNwbGl0KCIsIik7CisgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgY2xhc3Nlc0FycmF5LmFkZChzW2ldKTsKKyAgICAgIH0KKyAgICB9CisgICAgaWYgKGNhX3Jlc291cmNlcykgeworICAgICAgY2xhc3Nlc0FycmF5LmFkZChSRVNPVVJDRVMpOworICAgIH0KKyAgICBpZiAoY2Ffc2VjdXJpdHlkZWNsYXJlcm9sZXMpIHsKKyAgICAgIGNsYXNzZXNBcnJheS5hZGQoU0VDVVJJVFlERUNMQVJFUk9MRVMpOworICAgIH0KKyAgICBpZiAoY2Ffc2VjdXJpdHlkZW55YWxsKSB7CisgICAgICBjbGFzc2VzQXJyYXkuYWRkKFNFQ1VSSVRZREVOWUFMTCk7CisgICAgfQorICAgIGlmIChjYV9zZWN1cml0eXBlcm1pdGFsbCkgeworICAgICAgY2xhc3Nlc0FycmF5LmFkZChTRUNVUklUWVBFUk1JVEFMTCk7CisgICAgfQorICAgIGlmIChjYV9zZWN1cml0eXJvbGVzYWxsb3dlZCkgeworICAgICAgY2xhc3Nlc0FycmF5LmFkZChTRUNVUklUWVJPTEVTQUxMT1dFRCk7CisgICAgfQorICAgIGlmIChjYV9zZWN1cml0eXJ1bmFzKSB7CisgICAgICBjbGFzc2VzQXJyYXkuYWRkKFNFQ1VSSVRZUlVOQVMpOworICAgIH0KKyAgICBpZiAoY2Ffc3FsZGF0YXNvdXJjZWRlZmluaXRpb24pIHsKKyAgICAgIGNsYXNzZXNBcnJheS5hZGQoU1FMREFUQVNPVVJDRURFRklOSVRJT04pOworICAgIH0KKyAgICBpZiAoY2Ffc3FsZGF0YXNvdXJjZWRlZmluaXRpb25zKSB7CisgICAgICBjbGFzc2VzQXJyYXkuYWRkKFNRTERBVEFTT1VSQ0VERUZJTklUSU9OUyk7CisgICAgfQorICAgIHJldHVybiAoU3RyaW5nW10pIGNsYXNzZXNBcnJheS50b0FycmF5KG5ldyBTdHJpbmdbY2xhc3Nlc0FycmF5LnNpemUoKV0pOworCisgIH0KKworCisgIC8qCisgICAqIFRoZSBmb2xsb3dpbmcgY29tbWVudHMgYXJlIHNwZWNpZmllZCBpbiB0aGUgYmFzZSBjbGFzcyB0aGF0IGRlZmluZXMgdGhlCisgICAqIHNpZ25hdHVyZSB0ZXN0cy4gVGhpcyBpcyBkb25lIHNvIHRoZSB0ZXN0IGZpbmRlcnMgd2lsbCBmaW5kIHRoZSByaWdodCBjbGFzcworICAgKiB0byBydW4uIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGVzZSBtZXRob2RzIGlzIGluaGVyaXRlZCBmcm9tIHRoZSBzdXBlcgorICAgKiBjbGFzcyB3aGljaCBpcyBwYXJ0IG9mIHRoZSBzaWduYXR1cmUgdGVzdCBmcmFtZXdvcmsuCisgICAqLworCisgIC8vIE5PVEU6IElmIHRoZSBBUEkgdW5kZXIgdGVzdCBpcyBub3QgcGFydCBvZiB5b3VyIHRlc3RpbmcgcnVudGltZQorICAvLyBlbnZpcm9ubWVudCwgeW91IG1heSB1c2UgdGhlIHByb3BlcnR5IHNpZ1Rlc3RDbGFzc3BhdGggdG8gc3BlY2lmeQorICAvLyB3aGVyZSB0aGUgQVBJIHVuZGVyIHRlc3QgbGl2ZXMuIFRoaXMgc2hvdWxkIGFsbW9zdCBuZXZlciBiZSB1c2VkLgorICAvLyBOb3JtYWxseSB0aGUgQVBJIHVuZGVyIHRlc3Qgc2hvdWxkIGJlIHNwZWNpZmllZCBpbiB0aGUgY2xhc3NwYXRoCisgIC8vIG9mIHRoZSBWTSBydW5uaW5nIHRoZSBzaWduYXR1cmUgdGVzdHMuIFVzZSBlaXRoZXIgdGhlIGZpcnN0CisgIC8vIGNvbW1lbnQgb3IgdGhlIG9uZSBiZWxvdyBpdCBkZXBlbmRpbmcgb24gd2hpY2ggcHJvcGVydGllcyB5b3VyCisgIC8vIHNpZ25hdHVyZSB0ZXN0cyBuZWVkLiBQbGVhc2UgZG8gbm90IHVzZSBib3RoIGNvbW1lbnRzLgorCisgIC8qCisgICAqIEBjbGFzcy5zZXR1cF9wcm9wczogdHNfaG9tZTsgc2lnVGVzdENsYXNzcGF0aCwgTG9jYXRpb24gb2YgY2EgamFyIGZpbGVzOworICAgKiBjYS5zaWcuZ2VuZXJhdGVkOyBjYS5zaWcucG9zdGNvbnN0cnVjdDsKKyAgICogY2Euc2lnLnByaW9yaXR5OyBjYS5zaWcucHJlZGVzdHJveTsgY2Euc2lnLnJlc291cmNlOyBjYS5zaWcucmVzb3VyY2VzOworICAgKiBjYS5zaWcuc2VjdXJpdHlkZWNsYXJlcm9sZXM7IGNhLnNpZy5zZWN1cml0eWRlbnlhbGw7CisgICAqIGNhLnNpZy5zZWN1cml0eXBlcm1pdGFsbDsgY2Euc2lnLnNlY3VyaXR5cm9sZXNhbGxvd2VkOworICAgKiBjYS5zaWcuc2VjdXJpdHlydW5hczsgY2Euc2lnLnNxbGRhdGFzb3VyY2VkZWZpbml0aW9uOworICAgKiBjYS5zaWcuc3FsZGF0YXNvdXJjZWRlZmluaXRpb25zOworICAgKi8KKyAgcHVibGljIHZvaWQgc2V0dXAoKSB7CisgICAgc3VwZXIuc2V0dXAoKTsKKworICAgIC8vIHJlYWQgaW4gdGhlIHZhbHVlcyBmcm9tIHRoZSB0cy5qdGUgZmlsZQorICAgIGNhX2dlbmVyYXRlZCA9IEJvb2xlYW4udmFsdWVPZihwcm9wcy5nZXRQcm9wZXJ0eSgiY2Euc2lnLmdlbmVyYXRlZCIpKQorICAgICAgICAuYm9vbGVhblZhbHVlKCk7CisgICAgY2FfcG9zdGNvbnN0cnVjdCA9IEJvb2xlYW4udmFsdWVPZihwcm9wcy5nZXRQcm9wZXJ0eSgiY2Euc2lnLnBvc3Rjb25zdHJ1Y3QiKSkKKyAgICAgICAgLmJvb2xlYW5WYWx1ZSgpOworICAgIGNhX3ByaW9yaXR5ID0gQm9vbGVhbi52YWx1ZU9mKHByb3BzLmdldFByb3BlcnR5KCJjYS5zaWcucHJpb3JpdHkiKSkKKyAgICAgICAgLmJvb2xlYW5WYWx1ZSgpOworICAgIGNhX3ByZWRlc3Ryb3kgPSBCb29sZWFuLnZhbHVlT2YocHJvcHMuZ2V0UHJvcGVydHkoImNhLnNpZy5wcmVkZXN0cm95IikpCisgICAgICAgIC5ib29sZWFuVmFsdWUoKTsKKyAgICBjYV9yZXNvdXJjZSA9IEJvb2xlYW4udmFsdWVPZihwcm9wcy5nZXRQcm9wZXJ0eSgiY2Euc2lnLnJlc291cmNlIikpCisgICAgICAgIC5ib29sZWFuVmFsdWUoKTsKKyAgICBjYV9yZXNvdXJjZXMgPSBCb29sZWFuLnZhbHVlT2YocHJvcHMuZ2V0UHJvcGVydHkoImNhLnNpZy5yZXNvdXJjZXMiKSkKKyAgICAgICAgLmJvb2xlYW5WYWx1ZSgpOworICAgIGNhX3NlY3VyaXR5ZGVjbGFyZXJvbGVzID0gQm9vbGVhbgorICAgICAgICAudmFsdWVPZihwcm9wcy5nZXRQcm9wZXJ0eSgiY2Euc2lnLnNlY3VyaXR5ZGVjbGFyZXJvbGVzIikpLmJvb2xlYW5WYWx1ZSgpOworICAgIGNhX3NlY3VyaXR5ZGVueWFsbCA9IEJvb2xlYW4KKyAgICAgICAgLnZhbHVlT2YocHJvcHMuZ2V0UHJvcGVydHkoImNhLnNpZy5zZWN1cml0eWRlbnlhbGwiKSkuYm9vbGVhblZhbHVlKCk7CisgICAgY2Ffc2VjdXJpdHlwZXJtaXRhbGwgPSBCb29sZWFuCisgICAgICAgIC52YWx1ZU9mKHByb3BzLmdldFByb3BlcnR5KCJjYS5zaWcuc2VjdXJpdHlwZXJtaXRhbGwiKSkuYm9vbGVhblZhbHVlKCk7CisgICAgY2Ffc2VjdXJpdHlyb2xlc2FsbG93ZWQgPSBCb29sZWFuCisgICAgICAgIC52YWx1ZU9mKHByb3BzLmdldFByb3BlcnR5KCJjYS5zaWcuc2VjdXJpdHlyb2xlc2FsbG93ZWQiKSkuYm9vbGVhblZhbHVlKCk7CisgICAgY2Ffc2VjdXJpdHlydW5hcyA9IEJvb2xlYW4udmFsdWVPZihwcm9wcy5nZXRQcm9wZXJ0eSgiY2Euc2lnLnNlY3VyaXR5cnVuYXMiKSkKKyAgICAgICAgLmJvb2xlYW5WYWx1ZSgpOworICAgIGNhX3NxbGRhdGFzb3VyY2VkZWZpbml0aW9uID0gQm9vbGVhbgorICAgICAgICAudmFsdWVPZihwcm9wcy5nZXRQcm9wZXJ0eSgiY2Euc2lnLnNxbGRhdGFzb3VyY2VkZWZpbml0aW9uIikpCisgICAgICAgIC5ib29sZWFuVmFsdWUoKTsKKyAgICBjYV9zcWxkYXRhc291cmNlZGVmaW5pdGlvbnMgPSBCb29sZWFuCisgICAgICAgIC52YWx1ZU9mKHByb3BzLmdldFByb3BlcnR5KCJjYS5zaWcuc3FsZGF0YXNvdXJjZWRlZmluaXRpb25zIikpCisgICAgICAgIC5ib29sZWFuVmFsdWUoKTsKKyAgfQorCisgIC8qCisgICAqIEB0ZXN0TmFtZTogc2lnbmF0dXJlVGVzdAorICAgKiAKKyAgICogQGFzc2VydGlvbjogQSBDQUogcGxhdGZvcm0gbXVzdCBpbXBsZW1lbnQgdGhlIHJlcXVpcmVkIGNsYXNzZXMgYW5kIEFQSXMKKyAgICogc3BlY2lmaWVkIGluIHRoZSBDQUogU3BlY2lmaWNhdGlvbi4KKyAgICogCisgICAqIEB0ZXN0X1N0cmF0ZWd5OiBVc2luZyByZWZsZWN0aW9uLCBnYXRoZXIgdGhlIGltcGxlbWVudGF0aW9uIHNwZWNpZmljCisgICAqIGNsYXNzZXMgYW5kIEFQSXMuIENvbXBhcmUgdGhlc2UgcmVzdWx0cyB3aXRoIHRoZSBleHBlY3RlZCAocmVxdWlyZWQpCisgICAqIGNsYXNzZXMgYW5kIEFQSXMuCisgICAqCisgICAqLworICBAVGVzdAorICBwdWJsaWMgdm9pZCBzaWduYXR1cmVUZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisKKyAgICAgIGxvZ2dlci5sb2coTG9nZ2VyLkxldmVsLklORk8sICIkJCQgc2lnbmF0dXJlVGVzdCgpIGNhbGxlZCIpOworICAgICAgU3RyaW5nIG1hcEZpbGUgPSBudWxsOworICAgICAgU3RyaW5nIHBhY2thZ2VGaWxlID0gbnVsbDsKKyAgICAgIFByb3BlcnRpZXMgbWFwRmlsZUFzUHJvcHMgPSBudWxsOworICAgICAgU3RyaW5nW10gcGFja2FnZXMgPSBnZXRQYWNrYWdlcygpOworICAgICAgU3RyaW5nIGFwaVBhY2thZ2UgPSAiamFrYXJ0YS5hbm5vdGF0aW9uIjsKKyAgCisgICAgdHJ5IHsKKyAgCisgICAgICBJbnB1dFN0cmVhbSBpblN0cmVhbU1hcGZpbGUgPSBDQUpTaWdUZXN0SVQuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKCJlZS9qYWthcnRhL3Rjay9hbm5vdGF0aW9ucy9zaWduYXR1cmV0ZXN0L3NpZy10ZXN0Lm1hcCIpOworICAgICAgRmlsZSBtRmlsZSA9IHdyaXRlU3RyZWFtVG9UZW1wRmlsZShpblN0cmVhbU1hcGZpbGUsICJzaWctdGVzdCIsICIubWFwIik7CisgICAgICBtYXBGaWxlID0gbUZpbGUuZ2V0Q2Fub25pY2FsUGF0aCgpOworICAgICAgbG9nZ2VyLmxvZyhMb2dnZXIuTGV2ZWwuSU5GTywgIm1hcEZpbGUgbG9jYXRpb24gaXMgOiIrbWFwRmlsZSk7CisgIAorICAgICAgSW5wdXRTdHJlYW0gaW5TdHJlYW1QYWNrYWdlRmlsZSA9IENBSlNpZ1Rlc3RJVC5jbGFzcy5nZXRDbGFzc0xvYWRlcigpLmdldFJlc291cmNlQXNTdHJlYW0oImVlL2pha2FydGEvdGNrL2Fubm90YXRpb25zL3NpZ25hdHVyZXRlc3Qvc2lnLXRlc3QtcGtnLWxpc3QudHh0Iik7CisgICAgICBGaWxlIHBGaWxlID0gd3JpdGVTdHJlYW1Ub1RlbXBGaWxlKGluU3RyZWFtUGFja2FnZUZpbGUsICJzaWctdGVzdC1wa2ctbGlzdCIsICIudHh0Iik7CisgICAgICBwYWNrYWdlRmlsZSA9IHBGaWxlLmdldENhbm9uaWNhbFBhdGgoKTsKKyAgICAgIGxvZ2dlci5sb2coTG9nZ2VyLkxldmVsLklORk8sICJwYWNrYWdlRmlsZSBsb2NhdGlvbiBpcyA6IitwYWNrYWdlRmlsZSk7CisgICAgCisgICAgICBtYXBGaWxlQXNQcm9wcyA9IGdldFNpZ1Rlc3REcml2ZXIoKS5sb2FkTWFwRmlsZShtYXBGaWxlKTsKKyAgICAgIFN0cmluZyBwYWNrYWdlVmVyc2lvbiA9IG1hcEZpbGVBc1Byb3BzLmdldFByb3BlcnR5KGFwaVBhY2thZ2UpOworICAgICAgbG9nZ2VyLmxvZyhMb2dnZXIuTGV2ZWwuSU5GTywgIlBhY2thZ2UgdmVyc2lvbiBmcm9tIG1hcGZpbGUgOiIrcGFja2FnZVZlcnNpb24pOworICAKKyAgICAgIElucHV0U3RyZWFtIGluU3RyZWFtU2lnRmlsZSA9IENBSlNpZ1Rlc3RJVC5jbGFzcy5nZXRDbGFzc0xvYWRlcigpLmdldFJlc291cmNlQXNTdHJlYW0oImVlL2pha2FydGEvdGNrL2Fubm90YXRpb25zL3NpZ25hdHVyZXRlc3QvamFrYXJ0YS5hbm5vdGF0aW9uLnNpZ18iK3BhY2thZ2VWZXJzaW9uKTsKKyAgICAgIEZpbGUgc2lnRmlsZSA9IHdyaXRlU3RyZWFtVG9TaWdGaWxlKGluU3RyZWFtU2lnRmlsZSwgYXBpUGFja2FnZSwgcGFja2FnZVZlcnNpb24pOworICAgICAgbG9nZ2VyLmxvZyhMb2dnZXIuTGV2ZWwuSU5GTywgInNpZ25hdHVyZSBGaWxlIGxvY2F0aW9uIGlzIDoiK3NpZ0ZpbGUuZ2V0Q2Fub25pY2FsUGF0aCgpKTsKKyAgICAgIAorICAgICAgfSBjYXRjaChJT0V4Y2VwdGlvbiBleCkgeworICAgICAgICAgIGxvZ2dlci5sb2coTG9nZ2VyLkxldmVsLkVSUk9SICwgIkV4Y2VwdGlvbiB3aGlsZSBjcmVhdGluZyB0ZW1wIGZpbGVzIDoiK2V4KTsKKyAgICAgIH0KKyAgCisgICAgICBzdXBlci5zaWduYXR1cmVUZXN0KG1hcEZpbGUsIHBhY2thZ2VGaWxlLCBtYXBGaWxlQXNQcm9wcywgcGFja2FnZXMpOworICAgIAorICB9CisKKyAgLyoKKyAgICogQ2FsbCB0aGUgcGFyZW50IGNsYXNzJ3MgY2xlYW51cCBtZXRob2QuCisgICAqLworCisgIC8qCisgICAqIGRlZmluZSB3aGljaCBzaWcgZHJpdmVyIHdlIHdpbGwgdXNlCisgICAqLworICBwcm90ZWN0ZWQgU2lnbmF0dXJlVGVzdERyaXZlciBnZXRTaWdUZXN0RHJpdmVyKCkgeworCisgICAgaWYgKGRyaXZlciA9PSBudWxsKSB7CisgICAgICBkcml2ZXIgPSBTaWduYXR1cmVUZXN0RHJpdmVyRmFjdG9yeQorICAgICAgICAgIC5nZXRJbnN0YW5jZShTaWduYXR1cmVUZXN0RHJpdmVyRmFjdG9yeS5TSUdfVEVTVCk7CisgICAgfQorCisgICAgcmV0dXJuIGRyaXZlcjsKKworICB9IC8vIEVORCBnZXRTaWdUZXN0RHJpdmVyCisKK30gLy8gZW5kIGNsYXNzIENBSlNpZ1Rlc3QKZGlmZiAtLWdpdCBhL3Rjay9zcmMvbWFpbi9qYXZhL2VlL2pha2FydGEvdGNrL2Fubm90YXRpb25zL3NpZ25hdHVyZXRlc3QvUGFja2FnZUxpc3QuamF2YSBiL3Rjay9zcmMvbWFpbi9qYXZhL2VlL2pha2FydGEvdGNrL2Fubm90YXRpb25zL3NpZ25hdHVyZXRlc3QvUGFja2FnZUxpc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Yzk5YTAxCi0tLSAvZGV2L251bGwKKysrIGIvdGNrL3NyYy9tYWluL2phdmEvZWUvamFrYXJ0YS90Y2svYW5ub3RhdGlvbnMvc2lnbmF0dXJldGVzdC9QYWNrYWdlTGlzdC5qYXZhCkBAIC0wLDAgKzEsNDEyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDIwIE9yYWNsZSBhbmQvb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCisgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2LiAyLjAsIHdoaWNoIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLgorICoKKyAqIFRoaXMgU291cmNlIENvZGUgbWF5IGFsc28gYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIGZvbGxvd2luZyBTZWNvbmRhcnkKKyAqIExpY2Vuc2VzIHdoZW4gdGhlIGNvbmRpdGlvbnMgZm9yIHN1Y2ggYXZhaWxhYmlsaXR5IHNldCBmb3J0aCBpbiB0aGUKKyAqIEVjbGlwc2UgUHVibGljIExpY2Vuc2Ugdi4gMi4wIGFyZSBzYXRpc2ZpZWQ6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyIHdpdGggdGhlIEdOVSBDbGFzc3BhdGggRXhjZXB0aW9uLCB3aGljaCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHBzOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvY2xhc3NwYXRoL2xpY2Vuc2UuaHRtbC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKKyAqLworCisvKgorICogJElkJAorICovCisKK3BhY2thZ2UgZWUuamFrYXJ0YS50Y2suYW5ub3RhdGlvbnMuc2lnbmF0dXJldGVzdDsKKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFdyaXRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CitpbXBvcnQgamF2YS51dGlsLlRyZWVTZXQ7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgcGFja2FnZSBsaXN0IGZpbGUuIEEgcGFja2FnZSBsaXN0IGZpbGUgaXMgdXNlZCBpbgorICogY29uanVuY3Rpb24gd2l0aCBhIHNldCBvZiBzaWduYXR1cmUgZmlsZXMgdG8gZXhlY3V0ZSBBUEkgc2lnbmF0dXJlIHRlc3RzLgorICogVXNlcnMgc3BlY2lmeSB3aGljaCBzZXQgb2YgcGFja2FnZSBBUElzIGFyZSB2ZXJpZmllZC4gRWFjaCBwYWNrYWdlJ3MKKyAqIHNpZ25hdHVyZSBpcyB2ZXJpZmllZCBpbmRlcGVuZGVudGx5LiBBcyBzdWNoIGFsbCB2YWxpZCBzdWItcGFja2FnZXMgbXVzdCBiZQorICogZXhjbHVkZWQgd2hpbGUgYSBwYWNrYWdlJ3Mgc2lnbmF0dXJlIGlzIGJlaW5nIHZlcmlmaWVkLiBUaGlzIGFsbG93cyBBUEkgY2hlY2sKKyAqIHRvIGRldGVybWluZSBpbmNvbXBhdGlibGUgYWRkaXRpb25hbCBwYWNrYWdlcyBpbmNsdWRlZCBpbiBhIGRpc3RyaWJ1dGlvbi4KKyAqIDxwLz4KKyAqIFRoaXMgY2xhc3MgYnVpbGRzIGEgcGFja2FnZSBsaXN0IGZpbGUgd2hlbiBzaWduYXR1cmVzIGFyZSByZWNvcmRlZCBhbmQKKyAqIHByb3ZpZGVzIGFuIEFQSSB0byBwcm92aWRlIHZhbGlkIHN1Yi1wYWNrYWdlIGxpc3RzIHdoZW4gc2lnbmF0dXJlcyBhcmUgcGxheWVkCisgKiBiYWNrICh2ZXJpZmllZCkuCisgKiA8cC8+CisgKiBJbiByZWNvcmQgbW9kZSwgdGhpcyBjbGFzcyByZWFkcyB0aGUgZXhpc3RpbmcgcGFja2FnZSBsaXN0IGZpbGUsIGlmIG9uZQorICogZXhpc3RzLCBhbmQgcmVtb3ZlcyB0aGUgcGFja2FnZSAoYXMgd2VsbCBhcyBzdWItcGFja2FnZXMpIHRoYXQgYXJlIGN1cnJlbnRseQorICogYmVpbmcgcmVjb3JkZWQuIEFsbCBwYWNrYWdlIG5hbWVzIHJlYWQgZnJvbSB0aGUgZXhpc3RpbmcgcGFja2FnZSBsaXN0IGZpbGUKKyAqIGFyZSBoZWxkIGluIGEgdHJlZSBzZXQgd2hpY2ggc29ydHMgdGhlIHBhY2thZ2UgbmFtZXMgYW5kIGtlZXBzIGR1cGxpY2F0ZQorICogcGFja2FnZSBuYW1lcyBmcm9tIG9jdXJyaW5nLiBUaGUgdXNlciBjYW4gdGhlbiBpbnN0cnVjdCB0aGlzIGNsYXNzIHRvIHdyaXRlCisgKiBvdXQgdGhlIHBhY2thZ2UgbGlzdCBmaWxlLiBBdCB0aGlzIHBvaW50IHRoaXMgY2xhc3MgcmVhZHMgdGhlIGN1cnJlbnRseQorICogcmVjb3JkZWQgc2lnbmF0dXJlIGZpbGUgYW5kIGV4dHJhY3RzIGVhY2ggcGFja2FnZSBuYW1lcyBhbmQgYWRkcyBpdCB0byB0aGUKKyAqIHRyZWUgc2V0LiBBZnRlciB0aGlzIHN0ZXAgdGhlIHByZXZpb3VzIHBhY2thZ2UgbGlzdCBmaWxlIGlzIHNhdmVkIGFzIGEgYmFja3VwCisgKiBhbmQgdGhlIG5ldyBwYWNrYWdlIGxpc3QgZmlsZSBpcyB3cml0dGVuIHRvIGRpc2suCisgKiA8cC8+CisgKiBJbiBwbGF5YmFjayBtb2RlLCB0aGlzIGNsYXNzIHJlYWRzIHRoZSBjb250ZW50cyBvZiB0aGUgcGFja2FnZSBsaXN0IGZpbGUgYW5kCisgKiBzdG9yZXMgZWFjaCBwYWNrYWdlIG5hbWUgaW4gYSB0cmVlIHNldC4gVXNlcnMgY2FuIHRoZW4gaW52b2tlIHRoZQorICogZ2V0U3ViUGFja2FnZXMgbWV0aG9kIHRvIHJldHJpZXZlIHRoZSB2YWxpZCBzdWItcGFja2FnZXMgZm9yIGFueSBnaXZlbgorICogcGFja2FnZS4gVGhpcyBpcyBkb25lIGJ5IHNpbXBseSBleGFtaW5pbmcgdGhlIHBhY2thZ2UgbmFtZXMgaW4gdGhlIHRyZWUgc2V0CisgKiBhbmQgcmV0dXJuaW5nIGFueSBwYWNrYWdlIG5hbWUgdGhhdCBzdGFydHMgd2l0aCB0aGUgcGFyZW50IHBhY2thZ2UgbmFtZSBhbmQgYQorICogdHJhaWxpbmcgcGVyaW9kIGNoYXJhY3Rlci4KKyAqLworY2xhc3MgUGFja2FnZUxpc3QgeworCisgIC8vIEFueSBsaW5lIGluIHRoZSBwYWNrYWdlRmlsZSBzdGFydGluZyB3aXRoIHRoaXMgY2hhcmFjdGVyIGlzIGEgY29tbWVudAorICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyIENPTU1FTlRfQ0hBUiA9ICcjJzsKKworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFDS1VQX0VYVCA9ICIuYmFrIjsKKworICAvLyBGaWxlIGNvbnRhaW5pbmcgdGhlIGxpc3Qgb2YgcGFja2FnZXMgYW5kIHN1Yi1wYWNrYWdlcworICBwcml2YXRlIEZpbGUgcGFja2FnZUZpbGU7CisKKyAgLy8gU2lnbmF0dXJlIGZpbGUgd2hlcmUgdGhlIHBhY2thZ2Ugc2lnbmF0dXJlcyB3ZXJlIHJlY29yZGVkCisgIHByaXZhdGUgRmlsZSBzaWdGaWxlOworCisgIC8vIE5hbWUgb2YgdGhlIHBhY2thZ2UgYmVpbmcgcmVjb3JkZWQKKyAgcHJpdmF0ZSBTdHJpbmcgYWRkaXRpb25hbFBhY2thZ2VOYW1lOworCisgIC8vIE5hbWUgb2YgcGFja2FnZXMgYW5kIHN1Yi1wYWNrYWdlcyBpbiB0aGUKKyAgcHJpdmF0ZSBTZXQgcGFja2FnZU5hbWVzID0gbmV3IFRyZWVTZXQoKTsKKworICAvKioKKyAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgUGFja2FnZUxpc3QgY2xhc3MuIFRoZSBQYWNrYWdlTGlzdCBpbnN0YW5jZQorICAgKiByZWFkcyB0aGUgc3BlY2lmaWVkIHBhY2thZ2UgZmlsZSBhbmQgcG9wdWxhdGVzIGl0J3MgaW50ZXJuYWwgc3RhdGUgd2l0aCB0aGUKKyAgICogcGFja2FnZSBuYW1lcyBmb3VuZCBpbiB0aGlzIGZpbGUuIFVzZXJzIHNob3VsZCB1c2UgdGhpcyBjJ3RvciB3aGVuIHBsYXlpbmcKKyAgICogYmFjayBzaWduYXR1cmUgZmlsZXMuIFVzZXJzIGNhbiBpbml0IHRoZSBQYWNrYWdlTGlzdCBpbnN0YW5jZSB0aGVuIHVzZSB0aGUKKyAgICogIlN0cmluZ1tdIGdldFN1YlBhY2thZ2VzKFN0cmluZyBwYWNrYWdlTmFtZSkiIG1ldGhvZCB0byBnZXQgdGhlIGxpc3Qgb2YKKyAgICogdmFsaWQgc3ViLXBhY2thZ2VzIGZvciBldmVyeSBwYWNrYWdlIHdobydzIHNpZ25hdHVyZSBpcyBiZWluZyB2ZXJpZmllZC4KKyAgICoKKyAgICogQHBhcmFtIHBhY2thZ2VGaWxlTmFtZQorICAgKiAgICAgICAgICBUaGUgbmFtZSBvZiB0aGUgZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBwYWNrYWdlIGxpc3QuIFRoaXMgZmlsZQorICAgKiAgICAgICAgICBjb250YWlucyB0aGUgbmFtZXMgb2YgYWxsIHRoZSBwYWNrYWdlcyB0aGF0IGV4aXN0IGFjcm9zcyBhbGwgdGhlCisgICAqICAgICAgICAgIHNpZ25hdHVyZSBmaWxlcyB0aGF0IG1ha2V1cCB0aGlzIGRlbGl2ZXJhYmxlLiBUaGlzIGZpbGUgaXMgdXNlZCB0bworICAgKiAgICAgICAgICBnZW5lcmF0ZSBhIGxpc3Qgb2YgdmFsaWQgc3ViLXBhY2thZ2VzIHRoYXQgbXVzdCBiZSBleGNsdWVkIHdoZW4KKyAgICogICAgICAgICAgdGVzdGluZyB0aGVvciBwYXJlbnQgcGFja2FnZSdzIHNpZ25hdHVyZS4KKyAgICoKKyAgICogQHRocm93cyBFeGNlcHRpb24KKyAgICogICAgICAgICAgIHdoZW4gdGhlIHBhY2thZ2VGaWxlTmFtZSBkb2VzIG5vdCBleGlzdC4KKyAgICovCisgIHB1YmxpYyBQYWNrYWdlTGlzdChTdHJpbmcgcGFja2FnZUZpbGVOYW1lKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBwYWNrYWdlRmlsZSA9IG5ldyBGaWxlKHBhY2thZ2VGaWxlTmFtZSk7CisgICAgaWYgKHBhY2thZ2VGaWxlLmV4aXN0cygpICYmIHBhY2thZ2VGaWxlLmlzRmlsZSgpKSB7CisgICAgICBleHRyYWN0RXhpc3RpbmdQYWNrYWdlTmFtZXMoKTsKKyAgICB9IGVsc2UgeworICAgICAgdGhyb3cgbmV3IEZpbGVOb3RGb3VuZEV4Y2VwdGlvbihwYWNrYWdlRmlsZU5hbWUpOworICAgIH0KKyAgfQorCisgIC8qKgorICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBQYWNrYWdlTGlzdCBjbGFzcy4gVGhlIFBhY2thZ2VMaXN0IGluc3RhbmNlCisgICAqIHJlYWRzIHRoZSBjb250ZW50cyBvZiB0aGUgcGFja2FnZUZpbGVOYW1lIGFuZCBzdG9yZXMgaXQgaW4gaXQncyBpbnRlcm5hbAorICAgKiBzdGF0ZS4gTmV4dCwgYW55IHBhY2thZ2VzIHdob3MgbmFtZSBzdGFydHMgd2l0aCB0aGUgc3BlY2lmaWVkIHBhY2thZ2VOYW1lCisgICAqIGFyZSByZW1vdmVkIGZyb20gdGhlIGludGVybmFsIHBhY2thZ2UgbGlzdC4gVGhpcyBpcyBkb25lIGJlY2F1c2UgdGhpcyBpcworICAgKiB0aGUgcGFja2FnZSBiZWluZyByZWNvcmRlZCBhbmQgd2UgbmVlZCB0byByZW1vdmUgYW55IHByZXZpb3VzbHkgcmVjb3JkZWQKKyAgICogcGFja2FnZSBuYW1lcyBpbiBjYXNlIGFueSBzdWItcGFja2FnZXMgaGF2ZSBiZWVuIHJlbW92ZWQgc2luY2UgdGhlIGxhc3QKKyAgICogdGltZSB0aGUgc2lnbmF0dXJlcyB3ZXJlIHJlY29yZGVkLiBVc2VycyBzaG91bGQgdXNlIHRoaXMgYyd0b3Igd2hlbiB0aGV5CisgICAqIGFyZSByZWNvcmRpbmcgc2lnbmF0dXJlIGZpbGVzIG5ldmVyIGR1cmluZyBwbGF5YmFjay4KKyAgICoKKyAgICogQHBhcmFtIHBhY2thZ2VOYW1lCisgICAqICAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSBwYWNrYWdlIHdob3Mgc2lnbmF0dXJlcyBhcmUgYmVpbmcgcmVjb3JkZWQgKGFsb25nCisgICAqICAgICAgICAgIHdpdGggc3ViLXBhY2thZ2VzKS4KKyAgICogQHBhcmFtIHNpZ0ZpbGVOYW1lCisgICAqICAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSBmaWxlIHRoYXQgY29udGFpbnMgdGhlIHJlY29yZWQgc2lnbmF0dXJlcy4KKyAgICogQHBhcmFtIHBhY2thZ2VGaWxlTmFtZQorICAgKiAgICAgICAgICBUaGUgbmFtZSBvZiB0aGUgZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBwYWNrYWdlIGxpc3QuIFRoaXMgZmlsZQorICAgKiAgICAgICAgICBjb250YWlucyB0aGUgbmFtZXMgb2YgYWxsIHRoZSBwYWNrYWdlcyB0aGF0IGV4aXN0IGFjcm9zcyBhbGwgdGhlCisgICAqICAgICAgICAgIHNpZ25hdHVyZSBmaWxlcyB0aGF0IG1ha2V1cCB0aGlzIGRlbGl2ZXJhYmxlLiBUaGlzIGZpbGUgaXMgdXNlZCB0bworICAgKiAgICAgICAgICBnZW5lcmF0ZSBhIGxpc3Qgb2YgdmFsaWQgc3ViLXBhY2thZ2VzIHRoYXQgbXVzdCBiZSBleGNsdWVkIHdoZW4KKyAgICogICAgICAgICAgdGVzdGluZyB0aGVpciBwYXJlbnQgcGFja2FnZSdzIHNpZ25hdHVyZS4KKyAgICoKKyAgICogQHRocm93cyBFeGNlcHRpb24KKyAgICogICAgICAgICAgIHdoZW4gYW4gZXJyb3Igb2NjdXJzIHJlYWRpbmcgdGhlIHBhY2thZ2VGaWxlTmFtZSBvciB0aGUKKyAgICogICAgICAgICAgIHNpZ0ZpbGVOYW1lIGRvZXMgbm90IGV4aXN0LgorICAgKi8KKyAgcHVibGljIFBhY2thZ2VMaXN0KFN0cmluZyBwYWNrYWdlTmFtZSwgU3RyaW5nIHNpZ0ZpbGVOYW1lLAorICAgICAgU3RyaW5nIHBhY2thZ2VGaWxlTmFtZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgdGhpcy5hZGRpdGlvbmFsUGFja2FnZU5hbWUgPSBwYWNrYWdlTmFtZTsKKyAgICBzaWdGaWxlID0gbmV3IEZpbGUoc2lnRmlsZU5hbWUpOworICAgIGlmICghc2lnRmlsZS5leGlzdHMoKSB8fCAhc2lnRmlsZS5pc0ZpbGUoKSkgeworICAgICAgdGhyb3cgbmV3IEZpbGVOb3RGb3VuZEV4Y2VwdGlvbihzaWdGaWxlTmFtZSk7CisgICAgfQorICAgIHBhY2thZ2VGaWxlID0gbmV3IEZpbGUocGFja2FnZUZpbGVOYW1lKTsKKyAgICBpZiAocGFja2FnZUZpbGUuZXhpc3RzKCkgJiYgcGFja2FnZUZpbGUuaXNGaWxlKCkpIHsKKyAgICAgIGV4dHJhY3RFeGlzdGluZ1BhY2thZ2VOYW1lcygpOworICAgICAgcmVtb3ZlRXhpc3RpbmdQYWNrYWdlKCk7CisgICAgfQorICB9CisKKyAgLyoqCisgICAqIFJlYWQgdGhlIHBhY2thZ2UgbmFtZXMgc3RvcmVkIGluIHRoZSBwYWNrYWdlIGxpc3QgZmlsZS4gRWFjaCBwYWNrYWdlIG5hbWUKKyAgICogZm91bmQgaW4gdGhlIHBhY2thZ2UgbGlzdCBmaWxlIGlzIGFkZGVkIHRvIHRoZSBpbnRlcm5hbCB0cmVlIHNldC4KKyAgICoKKyAgICogQHRocm93cyBFeGNlcHRpb24KKyAgICogICAgICAgICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIG9wZW5pbmcgb3IgcmVhZGluZyB0aGUgcGFja2FnZSBsaXN0IGZpbGUuCisgICAqLworICBwcml2YXRlIHZvaWQgZXh0cmFjdEV4aXN0aW5nUGFja2FnZU5hbWVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgQnVmZmVyZWRSZWFkZXIgaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIocGFja2FnZUZpbGUpKTsKKyAgICBTdHJpbmcgbGluZTsKKyAgICBTdHJpbmcgdHJpbUxpbmU7CisgICAgdHJ5IHsKKyAgICAgIHdoaWxlICgobGluZSA9IGluLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKKyAgICAgICAgdHJpbUxpbmUgPSBsaW5lLnRyaW0oKTsKKyAgICAgICAgaWYgKGlzQ29tbWVudCh0cmltTGluZSkgfHwgIiIuZXF1YWxzKHRyaW1MaW5lKSkgeworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIHBhY2thZ2VOYW1lcy5hZGQodHJpbUxpbmUpOworICAgICAgfQorICAgIH0gZmluYWxseSB7CisgICAgICB0cnkgeworICAgICAgICBpbi5jbG9zZSgpOworICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICAvKioKKyAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBzcGVjaWZpZWQgc3RyaW5nIHN0YXJ0cyB3aXRoIGEgY29tbWVudCBjaGFyYWN0ZXIgYXMKKyAgICogZGVub3RlZCBieSB0aGUgQ09NTUVOVF9DSEFSIGNvbnN0YW50LgorICAgKgorICAgKiBAcGFyYW0gbGluZQorICAgKiAgICAgICAgICBEZXRlcm1pbnMgb2YgdGhpcyBsaW5lIGlzIGEgY29tbWVudCBsaW5lCisgICAqCisgICAqIEByZXR1cm4gYm9vbGVhbiBUcnVlIGlmIHRoZSBzcGVjaWZpZWQgbGluZSBpcyBhIGNvbW1lbnQgbGluZSBlbHNlIGZhbHNlLgorICAgKi8KKyAgcHJpdmF0ZSBib29sZWFuIGlzQ29tbWVudChTdHJpbmcgbGluZSkgeworICAgIGlmIChsaW5lID09IG51bGwpIHsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgU3RyaW5nIHRoZUxpbmUgPSBsaW5lLnRyaW0oKTsKKyAgICBpZiAodGhlTGluZS5sZW5ndGgoKSA+IDApIHsKKyAgICAgIHJldHVybiAodGhlTGluZS5jaGFyQXQoMCkgPT0gQ09NTUVOVF9DSEFSKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICAvKioKKyAgICogUmVtb3ZlcyBwYWNrYWdlIG5hbWVzIGZyb20gdGhlIHBhY2thZ2UgbGlzdCBmaWxlLiBUaGUgcGFja2FnZXMgdGhhdCBhcmUKKyAgICogcmVtb3ZlZCBhcmUgdGhlIG9uZXMgY3VycmVudGx5IGJlaW5nIHJlY29yZGVkLiBUaGUgcGFja2FnZXMgYmVpbmcgcmVjb3JkZWQKKyAgICogaXMgZGVub3RlZCBieSB0aGlzLmFkZGl0aW9uYWxQYWNrYWdlTmFtZS4gVGhpcyBpbmNsdWRlcyBhbnkgc3ViLXBhY2thZ2VzIG9mCisgICAqIHRoZSBhZGRpdGlvbmFsUGFja2FnZU5hbWUuIFRoaXMgc3RlcCBpcyBuZWNlc3NhcnkgaW4gdGhlIGNhc2VzIHdoZXJlIGEKKyAgICogc3ViLXBhY2thZ2UgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIGEgcGFyZW50IHBhY2thZ2UgaW4gYmV0d2VlbiBzaWduYXR1cmUKKyAgICogcmVjb3JkaW5ncy4KKyAgICovCisgIHByaXZhdGUgdm9pZCByZW1vdmVFeGlzdGluZ1BhY2thZ2UoKSB7CisgICAgU3RyaW5nIGRlbFBhY2thZ2UgPSB0aGlzLmFkZGl0aW9uYWxQYWNrYWdlTmFtZTsKKyAgICBTdHJpbmcgcGFja2FnZU5hbWU7CisgICAgTGlzdCBkZWxQa2dzID0gbmV3IEFycmF5TGlzdCgpOworICAgIC8vIGl0ZXJhdGUgb3ZlciBwYWNrYWdlIHNldCBhbmQgZmluZCBwYWNrYWdlIG5hbWVzIHRvIHJlbW92ZQorICAgIGZvciAoSXRlcmF0b3IgaSA9IHBhY2thZ2VOYW1lcy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKKyAgICAgIHBhY2thZ2VOYW1lID0gKFN0cmluZykgaS5uZXh0KCk7CisgICAgICBpZiAocGFja2FnZU5hbWUuc3RhcnRzV2l0aChkZWxQYWNrYWdlKSkgeworICAgICAgICBkZWxQa2dzLmFkZChwYWNrYWdlTmFtZSk7CisgICAgICB9CisgICAgfQorICAgIC8vIGFjdHVhbGx5IHJlbW92ZSB0aGUgcGFja2FnZSBuYW1lcyBmcm9tIHRoZSBzZXQKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlbFBrZ3Muc2l6ZSgpOyBpKyspIHsKKyAgICAgIHBhY2thZ2VOYW1lID0gKFN0cmluZykgKGRlbFBrZ3MuZ2V0KGkpKTsKKyAgICAgIHBhY2thZ2VOYW1lcy5yZW1vdmUocGFja2FnZU5hbWUpOworICAgICAgU3lzdGVtLm91dC5wcmludGxuKAorICAgICAgICAgICJQYWNrYWdlTGlzdC5yZW1vdmVFeGlzdGluZ1BhY2thZ2UoKSBcIiIgKyBwYWNrYWdlTmFtZSArICJcIiIpOworICAgIH0KKyAgfQorCisgIC8qKgorICAgKiBXcml0ZSB0aGUgcGFja2FnZSBsaXN0IG91dCB0byB0aGUgcGFja2FnZSBsaXN0IGZpbGUuIFRoaXMgaXMgZG9uZSBieQorICAgKiByZWFkaW5nIGFsbCB0aGUgcGFja2FnZSBuYW1lcyBpbiB0aGUgc3BlY2lmaWVkIHNpZ25hdHVyZSBmaWxlIGFuZCBhZGRpbmcKKyAgICogdGhlbSB0byB0aGUgaW50ZXJuYWwgdHJlZSBzZXQuIFRoZW4gdGhlIG9sZCBwYWNrYWdlIGxpc3QgZmlsZSBpcyByZW1vdmVkCisgICAqIGFuZCB0aGUgbmV3IHBhY2thZ2UgbGlzdCBmaWxlIGlzIHdyaXR0ZW4gb3V0LgorICAgKgorICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgorICAgKiAgICAgICAgICAgaWYgdGhlcmUgaXMgYSBwcm9ibGVtIHJlbW92aW5nIHRoZSBleGlzdGluZyBwYWNrYWdlIGZpbGUgb3IKKyAgICogICAgICAgICAgIHdyaXR0aW5nIHRoZSBuZXcgcGFja2FnZSBsaXN0IGZpbGUuCisgICAqLworICBwdWJsaWMgdm9pZCB3cml0ZVBrZ0xpc3RGaWxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgcmVhZFBrZ3NGcm9tU2lnRmlsZSgpOworICAgIHJlbW92ZVBrZ0ZpbGUoKTsKKyAgICB3cml0ZVBrZ0ZpbGUoKTsKKyAgfQorCisgIC8qKgorICAgKiBFeHRyYWN0IHRoZSBwYWNrYWdlIG5hbWUgZnJvbSB0aGUgc3BlY2lmaWVkIHN0cmluZy4gVGhlIHNwZWNpZmllZCBzdHJpbmcKKyAgICogc2hvdWxkIGhhdmUgdGhlIGZvcm06ICJwYWNrYWdlIGpha2FydGEuZWpiOyIKKyAgICoKKyAgICogQHBhcmFtIHBhY2thZ2VMaW5lCisgICAqICAgICAgICAgIFRoZSBzdHJpbmcgY29udGFpbmluZyB0aGUgcGFja2FnZSBuYW1lLgorICAgKgorICAgKiBAcmV0dXJuIFN0cmluZyBUaGUgZXh0cmFjdGVkIHBhY2thZ2UgbmFtZS4KKyAgICoKKyAgICogQHRocm93cyBFeGNlcHRpb24KKyAgICogICAgICAgICAgIGlmIHRoZSBzcGVjaWZpZWQgc3RyaW5nIGRvZXMgbm90IGNvbmZvcm0gdG8gdGhlIGV4cGVjdGVkIGZvcm1hdC4KKyAgICovCisgIHByaXZhdGUgU3RyaW5nIHBhcnNlUGFja2FnZU5hbWUoU3RyaW5nIHBhY2thZ2VMaW5lKSB0aHJvd3MgRXhjZXB0aW9uIHsKKworICAgIC8vIHNpZyB0ZXN0IGZyYW1ld29yayBkb2Vzbid0IGhhdmUgdGhlIGNvbmNlcHQgb2YgcGFja2FnZSBlbnRyaWVzCisgICAgLy8gYXMgdGhlIEFwaUNoZWNrIHNpZ25hdHVyZSBmb3JtYXQgZG9lcy4KKyAgICAvLyBJbnN0ZWFkLCB3ZSBuZWVkIHRvIHBhcnNlIGFuIGVudHJ5IHNpbWlsYXIgdG8gdGhpczoKKyAgICAvLyBDTFNTIHB1YmxpYyBqYWthcnRhLnNvbWUucGFja2FnZS5Tb21lQ2xhc3MKKworICAgIHJldHVybiBwYWNrYWdlTGluZS5zdWJzdHJpbmcocGFja2FnZUxpbmUubGFzdEluZGV4T2YoJyAnKSArIDEsCisgICAgICAgIHBhY2thZ2VMaW5lLmxhc3RJbmRleE9mKCcuJykpOworICB9CisKKyAgLyoqCisgICAqIFJlYWRzIHRoZSBwYWNrYWdlIG5hbWVzIGZyb20gdGhlIHNpZ25hdHVyZSBmaWxlLiBFYWNoIHBhY2thZ2UgbmFtZSB0aGF0IGlzCisgICAqIHJlYWQgaXMgYWRkZWQgdG8gdGhpcyBjbGFzc2VzIGludGVybmFsIHRyZWUgc2V0LgorICAgKgorICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgorICAgKiAgICAgICAgICAgaWYgdGhlcmUgaXMgYW4gZXJyb3Igb3BlbmluZyBvciByZWFkaW5nIHRoZSBzaWduYXR1cmUgZmlsZS4KKyAgICovCisgIHByaXZhdGUgdm9pZCByZWFkUGtnc0Zyb21TaWdGaWxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgQnVmZmVyZWRSZWFkZXIgaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoc2lnRmlsZSkpOworICAgIFN0cmluZyBsaW5lOworICAgIFN0cmluZyB0cmltTGluZTsKKyAgICB0cnkgeworICAgICAgd2hpbGUgKChsaW5lID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCkgeworICAgICAgICB0cmltTGluZSA9IGxpbmUudHJpbSgpOworICAgICAgICBpZiAodHJpbUxpbmUuc3RhcnRzV2l0aCgiQ0xTUyIpKSB7CisgICAgICAgICAgcGFja2FnZU5hbWVzLmFkZChwYXJzZVBhY2thZ2VOYW1lKHRyaW1MaW5lKSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9IGZpbmFsbHkgeworICAgICAgdHJ5IHsKKyAgICAgICAgaW4uY2xvc2UoKTsKKyAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICB9CisgICAgfQorICB9CisKKyAgLyoqCisgICAqIFJlbW92ZXMgdGhlIGV4aXN0aW5nIHBhY2thZ2UgbGlzdCBmaWxlLiBUaGUgcGFja2FnZSBsaXN0IGZpbGUgaXMgYWN0dWFsbHkKKyAgICogbW92ZWQgdG8gYSBiYWNrdXAgZmlsZSBpZiBpdCBleGlzdHMuIFRoZSBvbGQgYmFja3VwIGlzIGxvc3QuCisgICAqCisgICAqIEB0aHJvd3MgRXhjZXB0aW9uCisgICAqICAgICAgICAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBtb3ZpbmcgdGhlIGN1cnJlbnQgcGFja2FnZSBsaXN0IGZpbGUgdG8gYQorICAgKiAgICAgICAgICAgYmFja3VwIGZpbGUuCisgICAqLworICBwcml2YXRlIHZvaWQgcmVtb3ZlUGtnRmlsZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIEZpbGUgYmFja3VwUGtnRmlsZSA9IG5ldyBGaWxlKHBhY2thZ2VGaWxlLmdldFBhdGgoKSArIEJBQ0tVUF9FWFQpOworICAgIGlmIChiYWNrdXBQa2dGaWxlLmV4aXN0cygpICYmIGJhY2t1cFBrZ0ZpbGUuaXNGaWxlKCkpIHsKKyAgICAgIGJhY2t1cFBrZ0ZpbGUuZGVsZXRlKCk7CisgICAgfQorICAgIGlmIChwYWNrYWdlRmlsZS5pc0ZpbGUoKSAmJiBwYWNrYWdlRmlsZS5leGlzdHMoKSkgeworICAgICAgRmlsZSBjb3B5UGFja2FnZUZpbGUgPSBuZXcgRmlsZShwYWNrYWdlRmlsZS5nZXRQYXRoKCkpOworICAgICAgY29weVBhY2thZ2VGaWxlLnJlbmFtZVRvKGJhY2t1cFBrZ0ZpbGUpOworICAgIH0KKyAgfQorCisgIC8qKgorICAgKiBXcml0ZSBhIHNpbXBsZSBoZWFkZXIgdG8gdGhlIHBhY2thZ2UgbGlzdCBmaWxlIHRvIGV4cGxhaW4gd2hhdCB0aGUgZmlsZSBpcy4KKyAgICoKKyAgICogQHBhcmFtIG91dAorICAgKiAgICAgICAgICBUaGUgQnVmZmVyZWRXcml0ZXIgdG8gZHVtcCB0aGUgaGVhZGVyIHRvLgorICAgKgorICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgorICAgKiAgICAgICAgICAgaWYgdGhlcmUgaXMgYW55IGVycm9ycyB3cml0aW5nIHRoZSBoZWFkZXIgdG8gdGhlIHNwZWNpZmllZAorICAgKiAgICAgICAgICAgQnVmZmVyZWRXcml0ZXIuCisgICAqLworICBwcml2YXRlIHZvaWQgd3JpdGVIZWFkZXIoQnVmZmVyZWRXcml0ZXIgb3V0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBvdXQud3JpdGUoQ09NTUVOVF9DSEFSKTsKKyAgICBvdXQud3JpdGUoQ09NTUVOVF9DSEFSKTsKKyAgICBvdXQubmV3TGluZSgpOworICAgIG91dC53cml0ZShDT01NRU5UX0NIQVIgKyAiIFRoaXMgZmlsZSBjb250YWlucyBhIGxpc3Qgb2YgYWxsIHRoZSBwYWNrYWdlcyIpOworICAgIG91dC5uZXdMaW5lKCk7CisgICAgb3V0LndyaXRlKENPTU1FTlRfQ0hBUiArICIgY29udGFpbmVkIGluIHRoZSBzaWduYXR1cmUgZmlsZXMgZm9yIHRoaXMiKTsKKyAgICBvdXQubmV3TGluZSgpOworICAgIG91dC53cml0ZSgKKyAgICAgICAgQ09NTUVOVF9DSEFSICsgIiBkZWxpdmVyYWJsZS4gIFRoaXMgZmlsZSBpcyB1c2VkIHRvIGV4Y2x1ZGUgdmFsaWQiKTsKKyAgICBvdXQubmV3TGluZSgpOworICAgIG91dC53cml0ZShDT01NRU5UX0NIQVIgKyAiIHN1Yi1wYWNrYWdlcyBmcm9tIGJlaW5nIHZlcmlmaWVkIHdoZW4gdGhlaXIiKTsKKyAgICBvdXQubmV3TGluZSgpOworICAgIG91dC53cml0ZShDT01NRU5UX0NIQVIgKyAiIHBhcmVudCBwYWNrYWdlJ3Mgc2lnbmF0dXJlIGlzIGNoZWNrZWQuIik7CisgICAgb3V0Lm5ld0xpbmUoKTsKKyAgICBvdXQud3JpdGUoQ09NTUVOVF9DSEFSKTsKKyAgICBvdXQud3JpdGUoQ09NTUVOVF9DSEFSKTsKKyAgICBvdXQubmV3TGluZSgpOworICAgIG91dC5uZXdMaW5lKCk7CisgIH0KKworICAvKioKKyAgICogV3JpdGUgdGhlIGxpc3Qgb2YgcGFja2FnZSBuYW1lcyBvdXQgdG8gYSBwYWNrYWdlIGxpc3QgZmlsZS4KKyAgICoKKyAgICogQHRocm93cyBFeGNlcHRpb24KKyAgICogICAgICAgICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGNyZWF0aW5nIGFuZCB3cml0dGluZyB0aGUgcGFja2FnZSBsaXN0IGZpbGUuCisgICAqLworICBwcml2YXRlIHZvaWQgd3JpdGVQa2dGaWxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgQnVmZmVyZWRXcml0ZXIgb3V0ID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgb3V0ID0gbmV3IEJ1ZmZlcmVkV3JpdGVyKG5ldyBGaWxlV3JpdGVyKHBhY2thZ2VGaWxlKSk7CisgICAgICB3cml0ZUhlYWRlcihvdXQpOworICAgICAgZm9yIChJdGVyYXRvciBpID0gcGFja2FnZU5hbWVzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgeworICAgICAgICBTdHJpbmcgcGFja2FnZU5hbWUgPSAoU3RyaW5nKSBpLm5leHQoKTsKKyAgICAgICAgb3V0LndyaXRlKHBhY2thZ2VOYW1lKTsKKyAgICAgICAgb3V0Lm5ld0xpbmUoKTsKKyAgICAgICAgU3lzdGVtLm91dAorICAgICAgICAgICAgLnByaW50bG4oIlBhY2thZ2VMaXN0LndyaXRlUGtnRmlsZSgpIFwiIiArIHBhY2thZ2VOYW1lICsgIlwiIik7CisgICAgICB9CisgICAgfSBmaW5hbGx5IHsKKyAgICAgIGlmIChvdXQgIT0gbnVsbCkgeworICAgICAgICBvdXQuY2xvc2UoKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICAvKioKKyAgICogUmV0dXJucyB0aGUgbGlzdCBvZiBzdWItcGFja2FnZXMgdGhhdCBleGlzdCBpbiB0aGUgc3BlY2lmaWVkIHBhY2thZ2UgbmFtZS4KKyAgICoKKyAgICogQHBhcmFtIHBrZ05hbWUKKyAgICogICAgICAgICAgVGhlIG5hbWUgb2YgdGhlIHBhY2thZ2Ugd2Ugd2FudCB0aGUgc3ViLXBhY2thZ2UgbGlzdCBmb3IuCisgICAqCisgICAqIEByZXR1cm4gU3RyaW5nW10gVGhlIHN1Yi1wYWNrYWdlcyB0aGF0IGxpdmUgdW5kZXIgdGhlIHNwZWNpZmllZCBwYXJlbnQKKyAgICogICAgICAgICBwYWNrYWdlLgorICAgKi8KKyAgcHVibGljIFN0cmluZ1tdIGdldFN1YlBhY2thZ2VzKFN0cmluZyBwa2dOYW1lKSB7CisgICAgTGlzdCByZXN1bHQgPSBuZXcgQXJyYXlMaXN0KCk7CisgICAgU3RyaW5nIHN1YlBhY2thZ2VOYW1lID0gcGtnTmFtZSArICIuIjsKKyAgICBmb3IgKEl0ZXJhdG9yIGkgPSBwYWNrYWdlTmFtZXMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7CisgICAgICBTdHJpbmcgcGFja2FnZU5hbWUgPSAoU3RyaW5nKSBpLm5leHQoKTsKKyAgICAgIGlmIChwYWNrYWdlTmFtZS5zdGFydHNXaXRoKHN1YlBhY2thZ2VOYW1lKSkgeworICAgICAgICByZXN1bHQuYWRkKHBhY2thZ2VOYW1lKTsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIChTdHJpbmdbXSkgKHJlc3VsdC50b0FycmF5KG5ldyBTdHJpbmdbcmVzdWx0LnNpemUoKV0pKTsKKyAgfQorCisgIC8qKgorICAgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIHN1Yi1wYWNrYWdlcyB0aGF0IGV4aXN0IGluIHRoZSBzcGVjaWZpZWQgcGFja2FnZSBuYW1lLgorICAgKiBUaGUgcmV0dXJuZWQgc3RyaW5nIG1hdGNoZXMgdGhlIEFQSSBjaGVjayBmb3JtYXQgb2Ygc3BlY2lmeWluZyBtdWx0aXBsZQorICAgKiBwYWNrYWdlcyB3aXRoIGEgc2luZ2xlIHN0cmluZy4gRWFjaCBwYWNrYWdlIG5hbWUgaXMgc2VwYXJhdGVkIHdpdGggdGhlICIrIgorICAgKiBjaGFyYWN0ZXIuCisgICAqCisgICAqIEBwYXJhbSBwa2dOYW1lCisgICAqICAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSBwYWNrYWdlIHdlIHdhbnQgdGhlIHN1Yi1wYWNrYWdlIGxpc3QgZm9yLgorICAgKgorICAgKiBAcmV0dXJuIFN0cmluZyBUaGUgc3ViLXBhY2thZ2VzIHRoYXQgbGl2ZSB1bmRlciB0aGUgc3BlY2lmaWVkIHBhcmVudAorICAgKiAgICAgICAgIHBhY2thZ2UuCisgICAqLworICBwdWJsaWMgU3RyaW5nIGdldFN1YlBhY2thZ2VzRm9ybWF0dGVkKFN0cmluZyBwa2dOYW1lKSB7CisgICAgU3RyaW5nQnVmZmVyIGZvcm1hdHRlZFJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICBTdHJpbmdbXSByZXN1bHQgPSBnZXRTdWJQYWNrYWdlcyhwa2dOYW1lKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykgeworICAgICAgZm9ybWF0dGVkUmVzdWx0LmFwcGVuZChyZXN1bHRbaV0pOworICAgICAgaWYgKGkgPCAocmVzdWx0Lmxlbmd0aCAtIDEpKSB7CisgICAgICAgIGZvcm1hdHRlZFJlc3VsdC5hcHBlbmQoIisiKTsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZvcm1hdHRlZFJlc3VsdC50b1N0cmluZygpOworICB9CisKK30gLy8gZW5kIGNsYXNzIFBhY2thZ2VMaXN0CmRpZmYgLS1naXQgYS90Y2svc3JjL21haW4vamF2YS9lZS9qYWthcnRhL3Rjay9hbm5vdGF0aW9ucy9zaWduYXR1cmV0ZXN0L1NpZ1Rlc3QuamF2YSBiL3Rjay9zcmMvbWFpbi9qYXZhL2VlL2pha2FydGEvdGNrL2Fubm90YXRpb25zL3NpZ25hdHVyZXRlc3QvU2lnVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlYzg5NTIKLS0tIC9kZXYvbnVsbAorKysgYi90Y2svc3JjL21haW4vamF2YS9lZS9qYWthcnRhL3Rjay9hbm5vdGF0aW9ucy9zaWduYXR1cmV0ZXN0L1NpZ1Rlc3QuamF2YQpAQCAtMCwwICsxLDI5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAyMSBPcmFjbGUgYW5kL29yIGl0cyBhZmZpbGlhdGVzIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQorICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2Ugdi4gMi4wLCB3aGljaCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC4KKyAqCisgKiBUaGlzIFNvdXJjZSBDb2RlIG1heSBhbHNvIGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBmb2xsb3dpbmcgU2Vjb25kYXJ5CisgKiBMaWNlbnNlcyB3aGVuIHRoZSBjb25kaXRpb25zIGZvciBzdWNoIGF2YWlsYWJpbGl0eSBzZXQgZm9ydGggaW4gdGhlCisgKiBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYuIDIuMCBhcmUgc2F0aXNmaWVkOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiB3aXRoIHRoZSBHTlUgQ2xhc3NwYXRoIEV4Y2VwdGlvbiwgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2NsYXNzcGF0aC9saWNlbnNlLmh0bWwuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCisgKi8KKworLyoKKyAqICRJZCQKKyAqLworCitwYWNrYWdlIGVlLmpha2FydGEudGNrLmFubm90YXRpb25zLnNpZ25hdHVyZXRlc3Q7CisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworCitpbXBvcnQgamF2YS5sYW5nLlN5c3RlbS5Mb2dnZXI7CisKKy8qKgorICogVGhpcyBjbGFzcyBzaG91bGQgYmUgZXh0ZW5kZWQgYnkgVENLIGRldmVsb3BlcnMgdGhhdCB3aXNoIHRvIGNyZWF0ZSBhIHNldCBvZgorICogc2lnbmF0dXJlIHRlc3RzIHRoYXQgcnVuIG91dHNpZGUgb2YgYW55IEphdmEgRUUgY29udGFpbmVyLiBEZXZlbG9wZXJzIG11c3QKKyAqIGltcGxlbWVudCB0aGUgZ2V0UGFja2FnZXMgbWV0aG9kIHRvIHNwZWNpZnkgd2hpY2ggcGFja2FnZXMgYXJlIHRvIGJlIHRlc3RlZAorICogYnkgdGhlIHNpZ25hdHVyZSB0ZXN0IGZyYW1ld29yay4KKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIFNpZ1Rlc3QgeworCisgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBTeXN0ZW0uZ2V0TG9nZ2VyKFNpZ1Rlc3QuY2xhc3MuZ2V0TmFtZSgpKTsKKworICBwcm90ZWN0ZWQgU2lnbmF0dXJlVGVzdERyaXZlciBkcml2ZXI7CisKKyAgLyoqCisgICAqIDxwPgorICAgKiBSZXR1cm5zIGEge0BsaW5rIFNpZ25hdHVyZVRlc3REcml2ZXJ9IGFwcHJvcHJpYXRlIGZvciB0aGUgcGFydGljdWxhciBUQ0sKKyAgICogKHVzaW5nIEFQSSBjaGVjayBvciB0aGUgU2lnbmF0dXJlIFRlc3QgRnJhbWV3b3JrKS4KKyAgICogPC9wPgorICAgKgorICAgKiA8cD4KKyAgICogVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gYQorICAgKiB7QGxpbmsgU2lnbmF0dXJlVGVzdERyaXZlcn0gdGhhdCB3aWxsIHVzZSBBUEkgQ2hlY2suIFRDSyBkZXZlbG9wZXJzIGNhbgorICAgKiBvdmVycmlkZSB0aGlzIHRvIHJldHVybiB0aGUgZGVzaXJlZCB7QGxpbmsgU2lnbmF0dXJlVGVzdERyaXZlcn0gZm9yIHRoZWlyCisgICAqIFRDSy4KKyAgICovCisgIHByb3RlY3RlZCBTaWduYXR1cmVUZXN0RHJpdmVyIGdldFNpZ1Rlc3REcml2ZXIoKSB7CisKKyAgICBpZiAoZHJpdmVyID09IG51bGwpIHsKKyAgICAgIGRyaXZlciA9IFNpZ25hdHVyZVRlc3REcml2ZXJGYWN0b3J5LmdldEluc3RhbmNlKFNpZ25hdHVyZVRlc3REcml2ZXJGYWN0b3J5LlNJR19URVNUKTsKKyAgICB9CisKKyAgICByZXR1cm4gZHJpdmVyOworCisgIH0gLy8gRU5EIGdldFNpZ1Rlc3REcml2ZXIKKworCisgIC8qKgorICAgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIE9wdGlvbmFsIFBhY2thZ2VzIHdoaWNoIGFyZSBub3QgYWNjb3VudGVkIGZvci4gQnkKKyAgICogJ3VubGlzdGVkIG9wdGlvbmFsJyB3ZSBtZWFuIHRoZSBwYWNrYWdlcyB3aGljaCBhcmUgT3B0aW9uYWwgdG8gdGhlCisgICAqIHRlY2hub2xvZ3kgdW5kZXIgdGVzdCB0aGF0IHRoZSB1c2VyIGRpZCBOT1Qgc3BlY2lmaWNhbGx5IGxpc3QgZm9yIHRlc3RpbmcuCisgICAqIEZvciBleGFtcGxlLCB3aXRoIEphdmEgRUUgNyBpbXBsZW1lbnRhdGlvbiwgYSB1c2VyIGNvdWxkIGFkZGl0aW9uYWxseSBvcHQKKyAgICogdG8gdGVzdCBhIEpTUi04OCB0ZWNobm9sb2d5IGFsb25nIHdpdGggdGhlIEphdmEgRUUgdGVjaG5vbG9neS4gQnV0IGlmIHRoZQorICAgKiB1c2VyIGNob29zZXMgTk9UIHRvIGxpc3QgdGhpcyBvcHRpb25hbCB0ZWNobm9sb2d5IGZvciB0ZXN0aW5nICh2aWEgdHMuanRlCisgICAqIGphdmFlZS5sZXZlbCBwcm9wKSB0aGVuIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIHRoZSBwYWNrYWdlcyBmb3IgSlNSLTg4CisgICAqIHRlY2hub2xvZ3kgd2l0aCB0aGlzIG1ldGhvZCBjYWxsLgorICAgKiA8cC8+CisgICAqIFRoaXMgaXMgdXNlZnVsIGZvciBjaGVja2luZyBmb3IgYSBzY2VuYXJpb3Mgd2hlbiBhIHVzZXIgbWF5IGhhdmUgZm9yZ290dGVuCisgICAqIHRvIGlkZW50aWZ5IGEgd2hvbGUgb3IgcGFydGlhbCB0ZWNobm9sb2d5IGltcGxlbWVudGF0aW9uIGFuZCBpbiBzdWNoIGNhc2VzLAorICAgKiBKYXZhIEVFIHBsYXRmb3JtIHN0aWxsIHJlcXVpcmVzIHRlc3RpbmcgaXQuCisgICAqIDxwLz4KKyAgICogQW55IHBhcnRpYWwgb3IgY29tcGxldGUgaW1wbCBvZiBhbiB1bmxpc3RlZE9wdGlvbmFsUGFja2FnZSBzZW5kcyB1cCBhIHJlZAorICAgKiBmbGFnIGluZGljYXRpbmcgdGhhdCB0aGUgdXNlciBtdXN0IGFsc28gcGFzcyB0ZXN0cyBmb3IgdGhpcyBvcHRpb25hbAorICAgKiB0ZWNobm9sb2d5IGFyZWEuCisgICAqIDxwLz4KKyAgICogU3ViLWNsYXNzZXMgYXJlIGZyZWUgdG8gb3ZlcnJpZGUgdGhpcyBtZXRob2QgaWYgdGhleSB1c2UgYSBkaWZmZXJlbnQKKyAgICogc2lnbmF0dXJlIHJlcG9zaXRvcnkgZGlyZWN0b3J5LiBNb3N0IHVzZXJzIHNob3VsZCBiZSBhYmxlIHRvIHVzZSB0aGlzCisgICAqIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gLSB3aGljaCBtZWFucyB0aGF0IHRoZXJlIHdhcyBOTyBvcHRpb25hbCB0ZWNobm9sb2d5CisgICAqIHBhY2thZ2VzIHRoYXQgbmVlZCB0byBiZSB0ZXN0ZWQuCisgICAqCisgICAqIEByZXR1cm4gQXJyYXlMaXN0PFN0cmluZz4KKyAgICovCisgIHByb3RlY3RlZCBBcnJheUxpc3Q8U3RyaW5nPiBnZXRVbmxpc3RlZE9wdGlvbmFsUGFja2FnZXMoKSB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICAvKioKKyAgICogUmV0dXJucyB0aGUgbGlzdCBvZiBwYWNrYWdlcyB0aGF0IG11c3QgYmUgdGVzdGVkIGJ5IHRoZSBzaWdhbnR1cmUgdGVzdAorICAgKiBmcmFtZXdvcmsuIFRDSyBkZXZlbG9wZXJzIG11c3QgaW1wbGVtZW50IHRoaXMgbWV0aG9kIGluIHRoZWlyIHNpZ25hdHVyZQorICAgKiB0ZXN0IHN1Yi1jbGFzcy4KKyAgICoKKyAgICogQHJldHVybiBTdHJpbmcgQSBsaXN0IG9mIHBhY2thZ2VzIHRoYXQgdGhlIGRldmVsb3BlciB3aXNoZXMgdG8gdGVzdCB1c2luZworICAgKiAgICAgICAgIHRoZSBzaWduYXR1cmUgdGVzdCBmcmFtZXdvcmsuCisgICAqLworICBwcm90ZWN0ZWQgYWJzdHJhY3QgU3RyaW5nW10gZ2V0UGFja2FnZXMoKTsKKworICAvKioKKyAgICogUmV0dXJucyBhbiBhcnJheSBvZiBpbmRpdmlkdWFsIGNsYXNzZXMgdGhhdCBtdXN0IGJlIHRlc3RlZCBieSB0aGUgc2lnbmF0dXJlCisgICAqIHRlc3QgZnJhbXdvcmsuIFRDSyBkZXZlbG9wZXJzIG1heSBvdmVycmlkZSB0aGlzIG1ldGhvZCB3aGVuIHRoaXMKKyAgICogZnVuY3Rpb25hbGl0eSBpcyBuZWVkZWQuIE1vc3Qgd2lsbCBvbmx5IG5lZWQgcGFja2FnZSBsZXZlbCBncmFudWxhcml0eS4KKyAgICoKKyAgICogQHJldHVybiBhbiBBcnJheSBvZiBTdHJpbmdzIGNvbnRhaW5pbmcgdGhlIGluZGl2aWR1YWwgY2xhc3NlcyB0aGUgZnJhbWV3b3JrCisgICAqICAgICAgICAgc2hvdWxkIHRlc3QuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kIHJldHVybnMgYQorICAgKiAgICAgICAgIHplcm8tbGVuZ3RoIGFycmF5LgorICAgKi8KKyAgcHJvdGVjdGVkIFN0cmluZ1tdIGdldENsYXNzZXMoKSB7CisKKyAgICByZXR1cm4gbmV3IFN0cmluZ1tdIHt9OworCisgIH0gLy8gRU5EIGdldENsYXNzZXMKKworICBwcm90ZWN0ZWQgU2lnVGVzdERhdGEgdGVzdEluZm87IC8vIGhvbGRzIHRoZSBiaW4uZGlyIHByb3BlcnR5CisKKyAgLyoqCisgICAqIENhbGxlZCBieSB0aGUgdGVzdCBmcmFtZXdvcmsgdG8gaW5pdGlhbGl6ZSB0aGlzIHRlc3QuIFRoZSBtZXRob2Qgc2ltcGx5CisgICAqIHJldHJpZXZlcyBzb21lIHN0YXRlIGluZm9ybWF0aW9uIHRoYXQgaXMgbmVjZXNzYXJ5IHRvIHJ1biB0aGUgdGVzdCB3aGVuCisgICAqIHdoZW4gdGhlIHRlc3QgZnJhbWV3b3JrIGludm9rZXMgdGhlIHJ1biBtZXRob2QgKGFjdHVhbGx5IHRoZSB0ZXN0MSBtZXRob2QpLgorICAgKgorICAgKiBAcGFyYW0gYXJncworICAgKiAgICAgICAgICBMaXN0IG9mIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhpcyB0ZXN0LgorICAgKiBAcGFyYW0gcAorICAgKiAgICAgICAgICBQcm9wZXJ0aWVzIHNwZWNpZmllZCBieSB0aGUgdGVzdCB1c2VyIGFuZCBwYXNzZWQgdG8gdGhpcyB0ZXN0IHZpYQorICAgKiAgICAgICAgICB0aGUgdGVzdCBmcmFtZXdvcmsuCisgICAqLworICBwdWJsaWMgdm9pZCBzZXR1cCgpIHsKKyAgICB0cnkgeworICAgICAgbG9nZ2VyLmxvZyhMb2dnZXIuTGV2ZWwuVFJBQ0UsICIkJCQgU2lnVGVzdC5zZXR1cCgpIGNhbGxlZCIpOworICAgICAgdGhpcy50ZXN0SW5mbyA9IG5ldyBTaWdUZXN0RGF0YSgpOworICAgICAgbG9nZ2VyLmxvZyhMb2dnZXIuTGV2ZWwuVFJBQ0UsIiQkJCBTaWdUZXN0LnNldHVwKCkgY29tcGxldGUiKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgbG9nZ2VyLmxvZyhMb2dnZXIuTGV2ZWwuRVJST1IsICJVbmV4cGVjdGVkIGV4Y2VwdGlvbiAiICsgZS5nZXRNZXNzYWdlKCkpOworICAgIH0KKyAgfQorCisgIC8qKgorICAgKiBDYWxsZWQgYnkgdGhlIHRlc3QgZnJhbWV3b3JrIHRvIHJ1biB0aGlzIHRlc3QuIFRoaXMgbWV0aG9kIHV0aWxpemVzIHRoZQorICAgKiBzdGF0ZSBpbmZvcm1hdGlvbiBzZXQgaW4gdGhlIHNldHVwIG1ldGhvZCB0byBydW4gdGhlIHNpZ25hdHVyZSB0ZXN0cy4gQWxsCisgICAqIHNpZ25hdHVyZSB0ZXN0IGNvZGUgcmVzaWRlcyBpbiB0aGUgdXRpbGl0eSBjbGFzcyBzbyBpdCBjYW4gYmUgcmV1c2VkIGJ5IHRoZQorICAgKiBzaWduYXR1cmUgdGVzdCBmcmFtZXdvcmsgYmFzZSBjbGFzc2VzLgorICAgKgorICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgorICAgKiAgICAgICAgICAgV2hlbiBhbiBlcnJvciBvY2N1cnMgZXhlY3V0aW5nIHRoZSBzaWduYXR1cmUgdGVzdHMuCisgICAqLworICBwdWJsaWMgdm9pZCBzaWduYXR1cmVUZXN0KFN0cmluZyBtYXBGaWxlLCBTdHJpbmcgcGFja2FnZUZpbGUsIFByb3BlcnRpZXMgbWFwRmlsZUFzUHJvcHMsIFN0cmluZ1tdIHBhY2thZ2VzKQorICAgdGhyb3dzIEV4Y2VwdGlvbiB7CisKKyAgICBTaWdUZXN0UmVzdWx0IHJlc3VsdHMgPSBudWxsOworICAgIFN0cmluZyByZXBvc2l0b3J5RGlyID0gU3lzdGVtLmdldFByb3BlcnR5KCJqYXZhLmlvLnRtcGRpciIpOworICAgIFN0cmluZ1tdIGNsYXNzZXMgPSBnZXRDbGFzc2VzKCk7CisgICAgU3RyaW5nIHRlc3RDbGFzc3BhdGggPSB0ZXN0SW5mby5nZXRUZXN0Q2xhc3NwYXRoKCk7IC8vIFN5c3RlbS5nZXRQcm9wZXJ0eSgic2lnVGVzdENsYXNzcGF0aCIpOworICAgIFN0cmluZyBvcHRpb25hbFBrZ1RvSWdub3JlID0gdGVzdEluZm8uZ2V0T3B0aW9uYWxUZWNoUGFja2FnZXNUb0lnbm9yZSgpOworCisgICAgLy8gdW5saXN0ZWQgb3B0aW9uYWwgdGVjaG5vbG9neSBwYWNrYWdlcyBhcmUgcGFja2FnZXMgZm9yIG9wdGlvbmFsCisgICAgLy8gdGVjaG5vbG9naWVzIHRoYXQgd2VyZSBub3Qgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLiBXZSB3YW50IHRvCisgICAgLy8gZW5zdXJlIHRoZXJlIGFyZSBubyBmdWxsIG9yIHBhcnRpYWwgaW1wbGVtZW50YXRpb25zIG9mIGFuCisgICAgLy8gb3B0aW9uYWwgdGVjaG5vbG9neSB3aGljaCB3ZXJlIG5vdCBkZWNsYXJlZC4KKyAgICBBcnJheUxpc3Q8U3RyaW5nPiB1bmxpc3RlZFRlY2hub2xvZ3lQa2dzID0gZ2V0VW5saXN0ZWRPcHRpb25hbFBhY2thZ2VzKCk7CisKKyAgICAvLyBJZiB0ZXN0aW5nIHdpdGggSmF2YSA5KywgZXh0cmFjdCB0aGUgSkRLJ3MgbW9kdWxlcyBzbyB0aGV5IGNhbiBiZSB1c2VkCisgICAgLy8gb24gdGhlIHRlc3RjYXNlJ3MgY2xhc3NwYXRoLgorCisgICAgU3RyaW5nIGppbWFnZURpciA9IHRlc3RJbmZvLmdldEpJbWFnZURpcigpOworICAgIEZpbGUgZiA9IG5ldyBGaWxlKGppbWFnZURpcik7CisgICAgZi5ta2RpcnMoKTsKKworICAgIFN0cmluZyBqYXZhSG9tZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgiamF2YS5ob21lIik7CisgICAgbG9nZ2VyLmxvZyhMb2dnZXIuTGV2ZWwuSU5GTywgIkV4ZWN1dGluZyBKSW1hZ2UiKTsKKworICAgIHRyeSB7CisgICAgICBQcm9jZXNzQnVpbGRlciBwYiA9IG5ldyBQcm9jZXNzQnVpbGRlcihqYXZhSG9tZSArICIvYmluL2ppbWFnZSIsICJleHRyYWN0IiwgIi0tZGlyPSIgKyBqaW1hZ2VEaXIsIGphdmFIb21lICsgIi9saWIvbW9kdWxlcyIpOworICAgICAgbG9nZ2VyLmxvZyhMb2dnZXIuTGV2ZWwuSU5GTywgamF2YUhvbWUgKyAiL2Jpbi9qaW1hZ2UgZXh0cmFjdCAtLWRpcj0iICsgamltYWdlRGlyICsgIiAiICsgamF2YUhvbWUgKyAiL2xpYi9tb2R1bGVzIik7CisgICAgICBwYi5yZWRpcmVjdEVycm9yU3RyZWFtKHRydWUpOworICAgICAgUHJvY2VzcyBwcm9jID0gcGIuc3RhcnQoKTsKKyAgICAgIEJ1ZmZlcmVkUmVhZGVyIG91dCA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIocHJvYy5nZXRJbnB1dFN0cmVhbSgpKSk7CisgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CisgICAgICB3aGlsZSAoKGxpbmUgPSBvdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgeworICAgICAgICBsb2dnZXIubG9nKExvZ2dlci5MZXZlbC5JTkZPLGxpbmUpOworICAgICAgfQorCisgICAgICBpbnQgcmMgPSBwcm9jLndhaXRGb3IoKTsKKyAgICAgIGxvZ2dlci5sb2coTG9nZ2VyLkxldmVsLklORk8sIkpJbWFnZSBSQyA9ICIgKyByYyk7CisgICAgICBvdXQuY2xvc2UoKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgbG9nZ2VyLmxvZyhMb2dnZXIuTGV2ZWwuSU5GTywiRXhjZXB0aW9uIHdoaWxlIGV4ZWN1dGluZyBKSW1hZ2UhICBTb21lIHRlc3RzIG1heSBmYWlsLiIpOworICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CisgICAgCisKKyAgICB0cnkgeworICAgICAgcmVzdWx0cyA9IGdldFNpZ1Rlc3REcml2ZXIoKS5leGVjdXRlU2lnVGVzdChwYWNrYWdlRmlsZSwgbWFwRmlsZSwKKyAgICAgICAgICByZXBvc2l0b3J5RGlyLCBwYWNrYWdlcywgY2xhc3NlcywgdGVzdENsYXNzcGF0aCwKKyAgICAgICAgICB1bmxpc3RlZFRlY2hub2xvZ3lQa2dzLCBvcHRpb25hbFBrZ1RvSWdub3JlKTsKKyAgICAgIGxvZ2dlci5sb2coTG9nZ2VyLkxldmVsLklORk8scmVzdWx0cy50b1N0cmluZygpKTsKKyAgICAgIGlmICghcmVzdWx0cy5wYXNzZWQoKSkgeworICAgICAgICBsb2dnZXIubG9nKExvZ2dlci5MZXZlbC5UUkFDRSwicmVzdWx0cy5wYXNzZWQoKSByZXR1cm5lZCBmYWxzZSIpOworICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCk7CisgICAgICB9CisgICAgICBsb2dnZXIubG9nKExvZ2dlci5MZXZlbC5UUkFDRSwiJCQkIFNpZ1Rlc3QudGVzdDEoKSByZXR1cm5pbmciKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgaWYgKHJlc3VsdHMgIT0gbnVsbCAmJiAhcmVzdWx0cy5wYXNzZWQoKSkgeworICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJTaWdUZXN0LnRlc3QxKCkgZmFpbGVkISwgZGlmZnMgZm91bmQiKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGxvZ2dlci5sb2coTG9nZ2VyLkxldmVsLkVSUk9SLCJVbmV4cGVjdGVkIGV4Y2VwdGlvbiAiICsgZS5nZXRNZXNzYWdlKCkpOworICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJ0ZXN0IGZhaWxlZCB3aXRoIGFuIHVuZXhwZWN0ZWQgZXhjZXB0aW9uIiwgZSk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcHVibGljIEZpbGUgd3JpdGVTdHJlYW1Ub1RlbXBGaWxlKElucHV0U3RyZWFtIGlucHV0U3RyZWFtLCBTdHJpbmcgdGVtcEZpbGVQcmVmaXgsIFN0cmluZyB0ZW1wRmlsZVN1ZmZpeCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICBGaWxlT3V0cHV0U3RyZWFtIG91dHB1dFN0cmVhbSA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgRmlsZSBmaWxlID0gRmlsZS5jcmVhdGVUZW1wRmlsZSh0ZW1wRmlsZVByZWZpeCwgdGVtcEZpbGVTdWZmaXgpOworICAgICAgICBmaWxlLmRlbGV0ZU9uRXhpdCgpOworICAgICAgICBvdXRwdXRTdHJlYW0gPSBuZXcgRmlsZU91dHB1dFN0cmVhbShmaWxlKTsKKyAgICAgICAgYnl0ZVtdIGJ1ZmZlciA9IG5ldyBieXRlWzEwMjRdOworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgaW50IGJ5dGVzUmVhZCA9IGlucHV0U3RyZWFtLnJlYWQoYnVmZmVyKTsKKyAgICAgICAgICAgIGlmIChieXRlc1JlYWQgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dHB1dFN0cmVhbS53cml0ZShidWZmZXIsIDAsIGJ5dGVzUmVhZCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZpbGU7CisgICAgfQorICAgIGZpbmFsbHkgeworICAgICAgICBpZiAob3V0cHV0U3RyZWFtICE9IG51bGwpIHsKKyAgICAgICAgICAgIG91dHB1dFN0cmVhbS5jbG9zZSgpOworICAgICAgICB9CisgICAgfQorICB9CisKKyAgcHVibGljIEZpbGUgd3JpdGVTdHJlYW1Ub1NpZ0ZpbGUoSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0sIFN0cmluZyBhcGlQYWNrYWdlLCBTdHJpbmcgcGFja2FnZVZlcnNpb24pIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgRmlsZU91dHB1dFN0cmVhbSBvdXRwdXRTdHJlYW0gPSBudWxsOworICAgIFN0cmluZyB0bXBkaXIgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImphdmEuaW8udG1wZGlyIik7CisgICAgdHJ5IHsKKyAgICAgICAgRmlsZSBzaWdmaWxlID0gbmV3IEZpbGUodG1wZGlyKyBGaWxlLnNlcGFyYXRvciArIGFwaVBhY2thZ2UgKyAiLnNpZ18iK3BhY2thZ2VWZXJzaW9uKTsKKyAgICAgICAgaWYoc2lnZmlsZS5leGlzdHMoKSl7CisgICAgICAgICAgc2lnZmlsZS5kZWxldGUoKTsKKyAgICAgICAgICBsb2dnZXIubG9nKExvZ2dlci5MZXZlbC5JTkZPLCJFeGlzdGluZyBzaWduYXR1cmUgZmlsZSBkZWxldGVkIHRvIGNyZWF0ZSBuZXcgb25lIik7CisgICAgICAgIH0KKyAgICAgICAgaWYoIXNpZ2ZpbGUuY3JlYXRlTmV3RmlsZSgpKXsKKyAgICAgICAgICBsb2dnZXIubG9nKExvZ2dlci5MZXZlbC5FUlJPUiwic2lnbmF0dXJlIGZpbGUgaXMgbm90IGNyZWF0ZWQiKTsKKyAgICAgICAgfQorICAgICAgICBvdXRwdXRTdHJlYW0gPSBuZXcgRmlsZU91dHB1dFN0cmVhbShzaWdmaWxlKTsKKyAgICAgICAgYnl0ZVtdIGJ1ZmZlciA9IG5ldyBieXRlWzEwMjRdOworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgaW50IGJ5dGVzUmVhZCA9IGlucHV0U3RyZWFtLnJlYWQoYnVmZmVyKTsKKyAgICAgICAgICAgIGlmIChieXRlc1JlYWQgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dHB1dFN0cmVhbS53cml0ZShidWZmZXIsIDAsIGJ5dGVzUmVhZCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNpZ2ZpbGU7CisgICAgfQorCisgICAgZmluYWxseSB7CisgICAgICAgIGlmIChvdXRwdXRTdHJlYW0gIT0gbnVsbCkgeworICAgICAgICAgICAgb3V0cHV0U3RyZWFtLmNsb3NlKCk7CisgICAgICAgIH0KKyAgICB9CisgIH0KKworICAvKioKKyAgICogQ2FsbGVkIGJ5IHRoZSB0ZXN0IGZyYW1ld29yayB0byBjbGVhbnVwIGFueSBvdXRzdGFuZGluZyBzdGF0ZS4gVGhpcyBtZXRob2QKKyAgICogc2ltcGx5IHBhc3NlcyB0aGUgbWVzc2FnZSB0aHJvdWdoIHRvIHRoZSB1dGlsaXR5IGNsYXNzIHNvIHRoZQorICAgKiBpbXBsZW1lbnRhdGlvbiBjYW4gYmUgdXNlZCBieSBib3RoIGZyYW1ld29yayBiYXNlIGNsYXNzZXMuCisgICAqCisgICAqIEB0aHJvd3MgRXhjZXB0aW9uCisgICAqICAgICAgICAgICBXaGVuIGFuIGVycm9yIG9jY3VycyBjbGVhbmluZyB1cCB0aGUgc3RhdGUgb2YgdGhpcyB0ZXN0LgorICAgKi8KKyAgcHVibGljIHZvaWQgY2xlYW51cCgpIHRocm93cyBFeGNlcHRpb24geworICAgIGxvZ2dlci5sb2coTG9nZ2VyLkxldmVsLlRSQUNFLCIkJCQgU2lnVGVzdC5jbGVhbnVwKCkgY2FsbGVkIik7CisgICAgdHJ5IHsKKyAgICAgIGdldFNpZ1Rlc3REcml2ZXIoKS5jbGVhbnVwSW1wbCgpOworICAgICAgbG9nZ2VyLmxvZyhMb2dnZXIuTGV2ZWwuVFJBQ0UsIiQkJCBTaWdUZXN0LmNsZWFudXAoKSByZXR1cm5pbmciKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiQ2xlYW51cCBmYWlsZWQhIiwgZSk7CisgICAgfQorICB9CisKK30gLy8gZW5kIGNsYXNzIFNpZ1Rlc3QKZGlmZiAtLWdpdCBhL3Rjay9zcmMvbWFpbi9qYXZhL2VlL2pha2FydGEvdGNrL2Fubm90YXRpb25zL3NpZ25hdHVyZXRlc3QvU2lnVGVzdERhdGEuamF2YSBiL3Rjay9zcmMvbWFpbi9qYXZhL2VlL2pha2FydGEvdGNrL2Fubm90YXRpb25zL3NpZ25hdHVyZXRlc3QvU2lnVGVzdERhdGEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzAyZjMzCi0tLSAvZGV2L251bGwKKysrIGIvdGNrL3NyYy9tYWluL2phdmEvZWUvamFrYXJ0YS90Y2svYW5ub3RhdGlvbnMvc2lnbmF0dXJldGVzdC9TaWdUZXN0RGF0YS5qYXZhCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMjEgT3JhY2xlIGFuZC9vciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKKyAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYuIDIuMCwgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAuCisgKgorICogVGhpcyBTb3VyY2UgQ29kZSBtYXkgYWxzbyBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgZm9sbG93aW5nIFNlY29uZGFyeQorICogTGljZW5zZXMgd2hlbiB0aGUgY29uZGl0aW9ucyBmb3Igc3VjaCBhdmFpbGFiaWxpdHkgc2V0IGZvcnRoIGluIHRoZQorICogRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2LiAyLjAgYXJlIHNhdGlzZmllZDogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIgd2l0aCB0aGUgR05VIENsYXNzcGF0aCBFeGNlcHRpb24sIHdoaWNoIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9jbGFzc3BhdGgvbGljZW5zZS5odG1sLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAorICovCisKKy8qCisgKiAkSWQkCisgKi8KKworcGFja2FnZSBlZS5qYWthcnRhLnRjay5hbm5vdGF0aW9ucy5zaWduYXR1cmV0ZXN0OworCitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CisKKy8qKgorICogVGhpcyBjbGFzcyBob2xkcyB0aGUgZGF0YSBwYXNzZWQgdG8gYSBzaWduYXR1cmUgdGVzdCBpbnZvY2F0aW9uIGR1cmluZyB0aGUKKyAqIHNldHVwIHBoYXNlLiBUaGlzIGFsbG93cyB1cyB0byBrZWVwIHRoZSBwYXNzZWQgZGF0YSBzZXBhcmF0ZSBhbmQgcmV1c2UgdGhlCisgKiBkYXRhIGJldHdlZW4gdGhlIHNpZ25hdHVyZSB0ZXN0IGZyYW1ld29yayBiYXNlIGNsYXNzZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBTaWdUZXN0RGF0YSB7CisKKyAgcHJpdmF0ZSBQcm9wZXJ0aWVzIHByb3BzOworCisgIHB1YmxpYyBTaWdUZXN0RGF0YSgpIHsKKyAgICB0aGlzLnByb3BzID0gU3lzdGVtLmdldFByb3BlcnRpZXMoKTsKKyAgfQorCisgIHB1YmxpYyBTdHJpbmcgZ2V0VGVzdENsYXNzcGF0aCgpIHsKKyAgICByZXR1cm4gcHJvcHMuZ2V0UHJvcGVydHkoInNpZ1Rlc3RDbGFzc3BhdGgiLCAiIik7CisgIH0KKworICBwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5KFN0cmluZyBwcm9wKSB7CisgICAgcmV0dXJuIHByb3BzLmdldFByb3BlcnR5KHByb3ApOworICB9CisKKyAgcHVibGljIFN0cmluZyBnZXRPcHRpb25hbFRlY2hQYWNrYWdlc1RvSWdub3JlKCkgeworICAgIHJldHVybiBwcm9wcy5nZXRQcm9wZXJ0eSgib3B0aW9uYWwudGVjaC5wYWNrYWdlcy50by5pZ25vcmUiLCAiIik7CisgIH0KKworICBwdWJsaWMgU3RyaW5nIGdldEpJbWFnZURpcigpIHsKKyAgICByZXR1cm4gcHJvcHMuZ2V0UHJvcGVydHkoImppbWFnZS5kaXIiLCAiIik7CisgIH0KK30gLy8gZW5kIGNsYXNzIFNpZ1Rlc3REYXRhCmRpZmYgLS1naXQgYS90Y2svc3JjL21haW4vamF2YS9lZS9qYWthcnRhL3Rjay9hbm5vdGF0aW9ucy9zaWduYXR1cmV0ZXN0L1NpZ1Rlc3REcml2ZXIuamF2YSBiL3Rjay9zcmMvbWFpbi9qYXZhL2VlL2pha2FydGEvdGNrL2Fubm90YXRpb25zL3NpZ25hdHVyZXRlc3QvU2lnVGVzdERyaXZlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhNGQxNGEKLS0tIC9kZXYvbnVsbAorKysgYi90Y2svc3JjL21haW4vamF2YS9lZS9qYWthcnRhL3Rjay9hbm5vdGF0aW9ucy9zaWduYXR1cmV0ZXN0L1NpZ1Rlc3REcml2ZXIuamF2YQpAQCAtMCwwICsxLDI0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAyMSBPcmFjbGUgYW5kL29yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQorICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2Ugdi4gMi4wLCB3aGljaCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC4KKyAqCisgKiBUaGlzIFNvdXJjZSBDb2RlIG1heSBhbHNvIGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBmb2xsb3dpbmcgU2Vjb25kYXJ5CisgKiBMaWNlbnNlcyB3aGVuIHRoZSBjb25kaXRpb25zIGZvciBzdWNoIGF2YWlsYWJpbGl0eSBzZXQgZm9ydGggaW4gdGhlCisgKiBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYuIDIuMCBhcmUgc2F0aXNmaWVkOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiB3aXRoIHRoZSBHTlUgQ2xhc3NwYXRoIEV4Y2VwdGlvbiwgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2NsYXNzcGF0aC9saWNlbnNlLmh0bWwuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCisgKi8KKworcGFja2FnZSBlZS5qYWthcnRhLnRjay5hbm5vdGF0aW9ucy5zaWduYXR1cmV0ZXN0OworCitpbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS5sYW5nLlN5c3RlbS5Mb2dnZXI7CisKKworLyoqCisgKiA8cD4KKyAqIFdyYXBwZXIgZm9yIHRoZSA8Y29kZT5TaWcgVGVzdDwvY29kZT4gZnJhbWV3b3JrLgorICogPC9wPgorICovCitwdWJsaWMgY2xhc3MgU2lnVGVzdERyaXZlciBleHRlbmRzIFNpZ25hdHVyZVRlc3REcml2ZXIgeworCisgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBTeXN0ZW0uZ2V0TG9nZ2VyKFNpZ1Rlc3REcml2ZXIuY2xhc3MuZ2V0TmFtZSgpKTsKKworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0xBU1NQQVRIX0ZMQUcgPSAiLUNsYXNzcGF0aCI7CisKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEZJTEVOQU1FX0ZMQUcgPSAiLUZpbGVOYW1lIjsKKworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFDS0FHRV9GTEFHID0gIi1QYWNrYWdlIjsKKworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFDS0FHRV9OT19TVUJTX0ZMQUcgPSAiLVBhY2thZ2VXaXRob3V0U3VicGFja2FnZXMiOworCisgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBUElfVkVSU0lPTl9GTEFHID0gIi1BcGlWZXJzaW9uIjsKKworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhDTFVERV9GTEFHID0gIi1FeGNsdWRlIjsKKyAgCisgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTVEFUSUNfRkxBRyA9ICItU3RhdGljIjsKKworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0hFQ0tWQUxVRV9GTEFHID0gIi1DaGVja1ZhbHVlIjsgLy8gb25seSB2YWxpZCB3LworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLXN0YXRpYworCisgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBOT19DSEVDS1ZBTFVFX0ZMQUcgPSAiLU5vQ2hlY2tWYWx1ZSI7CisKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNNT0RFX0ZMQUcgPSAiLW1vZGUiOyAvLyByZXF1aXJlcyBhcmcgb2YgYmluIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3JjCisKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFQlVHX0ZMQUcgPSAiLURlYnVnIjsKKworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9STUFUUExBSU5fRkxBRyA9ICItRm9ybWF0UGxhaW4iOworICAKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVYQ0xVREVfSkRLX0NMQVNTX0ZMQUcgPSAiLUlnbm9yZUpES0NsYXNzIjsKKworICBwcml2YXRlIHN0YXRpYyBTdHJpbmdbXSBleGNsdWRlSmRrQ2xhc3NlcyA9IHsKKyAgICAgICAgICAiamF2YS51dGlsLk1hcCIsCisgICAgICAgICAgImphdmEubGFuZy5PYmplY3QiLAorICAgICAgICAgICJqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtIiwKKyAgICAgICAgICAiamF2YS5pby5JbnB1dFN0cmVhbSIsCisgICAgICAgICAgImphdmEubGFuZy5EZXByZWNhdGVkIiwKKyAgICAgICAgICAiamF2YS5pby5Xcml0ZXIiLAorICAgICAgICAgICJqYXZhLmlvLk91dHB1dFN0cmVhbSIsCisgICAgICAgICAgImphdmEudXRpbC5MaXN0IiwKKyAgICAgICAgICAiamF2YS51dGlsLkNvbGxlY3Rpb24iLAorICAgICAgICAgICJqYXZhLmxhbmcuaW5zdHJ1bWVudC5JbGxlZ2FsQ2xhc3NGb3JtYXRFeGNlcHRpb24iLAorICAgICAgICAgICJqYXZheC50cmFuc2FjdGlvbi54YS5YQUV4Y2VwdGlvbiIsCisgICAgICAgICAgImphdmEubGFuZy5hbm5vdGF0aW9uLlJlcGVhdGFibGUiLAorICAgICAgICAgICJqYXZhLmxhbmcuSW50ZXJydXB0ZWRFeGNlcHRpb24iLAorICAgICAgICAgICJqYXZhLmxhbmcuQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24iLAorICAgICAgICAgICJqYXZhLmxhbmcuVGhyb3dhYmxlIiwKKyAgICAgICAgICAiamF2YS5sYW5nLlRocmVhZCIsCisgICAgICAgICAgImphdmEubGFuZy5FbnVtIgorICB9OworICAgICAgICAgIAorICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE1ldGhvZHMgZnJvbSBTaWduYXR1cmVUZXN0RHJpdmVyCisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmcgbm9ybWFsaXplRmlsZU5hbWUoRmlsZSBmKSB7CisgICAgU3RyaW5nIHNVUkwgPSBudWxsOworICAgIHRyeSB7CisgICAgICBzVVJMID0gZi50b1VSSSgpLnRvVVJMKCkudG9FeHRlcm5hbEZvcm0oKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7CisgICAgfQorICAgIHJldHVybiBzVVJMOworICB9CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBTdHJpbmdbXSBjcmVhdGVUZXN0QXJndW1lbnRzKFN0cmluZyBwYWNrYWdlTGlzdEZpbGUsIFN0cmluZyBtYXBGaWxlLAorICAgICAgU3RyaW5nIHNpZ25hdHVyZVJlcG9zaXRvcnlEaXIsIFN0cmluZyBwYWNrYWdlT3JDbGFzc1VuZGVyVGVzdCwKKyAgICAgIFN0cmluZyBjbGFzc3BhdGgsIGJvb2xlYW4gYlN0YXRpY01vZGUpIHRocm93cyBFeGNlcHRpb24geworCisgICAgU2lnbmF0dXJlRmlsZUluZm8gaW5mbyA9IGdldFNpZ0ZpbGVJbmZvKHBhY2thZ2VPckNsYXNzVW5kZXJUZXN0LCBtYXBGaWxlLAorICAgICAgICBzaWduYXR1cmVSZXBvc2l0b3J5RGlyKTsKKworICAgIFBhY2thZ2VMaXN0IHBhY2thZ2VMaXN0ID0gbmV3IFBhY2thZ2VMaXN0KHBhY2thZ2VMaXN0RmlsZSk7CisgICAgU3RyaW5nW10gc3ViUGFja2FnZXMgPSBwYWNrYWdlTGlzdC5nZXRTdWJQYWNrYWdlcyhwYWNrYWdlT3JDbGFzc1VuZGVyVGVzdCk7CisKKyAgICBMaXN0IGNvbW1hbmQgPSBuZXcgQXJyYXlMaXN0KCk7CisKKyAgICBpZiAoYlN0YXRpY01vZGUpIHsKKyAgICAgIC8vIHN0YXRpYyBtb2RlIGFsbG93cyBmaW5lciBsZXZlbCBvZiBjb25zdGFudHMgY2hlY2tpbmcKKyAgICAgIC8vIC1DaGVja1ZhbHVlIHNheXMgdG8gY2hlY2sgdGhlIGFjdHVhbCBjb25zdCB2YWx1ZXMKKyAgICAgIGxvZ2dlci5sb2coTG9nZ2VyLkxldmVsLlRSQUNFLCJTZXR0aW5nIHN0YXRpYyBtb2RlIGZsYWcgdG8gYWxsb3cgY29uc3RhbnQgY2hlY2tpbmcuIik7CisgICAgICBjb21tYW5kLmFkZChTVEFUSUNfRkxBRyk7CisgICAgICBjb21tYW5kLmFkZChDSEVDS1ZBTFVFX0ZMQUcpOworCisgICAgICAvLyBzcGVjaWZ5aW5nICItbW9kZSBzcmMiIGFsbG93cyBzdHJpY3RlciAyIHdheSB2ZXJpZmljYXRpb24gb2YgY29uc3RhbnQKKyAgICAgIC8vIHZhbHMKKyAgICAgIC8vIChub3RlIHRoYXQgdXNpbmcgIi1tb2RlIGJpbiIgbW9kZSBpcyBsZXNzIHN0cmljdCkKKyAgICAgIGNvbW1hbmQuYWRkKFNNT0RFX0ZMQUcpOworICAgICAgLy8gY29tbWFuZC5hZGQoImJpbiIpOworICAgICAgY29tbWFuZC5hZGQoInNyYyIpOworICAgIH0gZWxzZSB7CisgICAgICBsb2dnZXIubG9nKExvZ2dlci5MZXZlbC5UUkFDRSwiTm90IFNldHRpbmcgc3RhdGljIG1vZGUgZmxhZyB0byBhbGxvdyBjb25zdGFudCBjaGVja2luZy4iKTsKKyAgICB9CisKKyAgICAvLyBjb21tYW5kLmFkZChERUJVR19GTEFHKTsKKyAgICAKKyAgICBjb21tYW5kLmFkZCgiLVZlcmJvc2UiKTsKKworICAgIGNvbW1hbmQuYWRkKEZJTEVOQU1FX0ZMQUcpOworICAgIGNvbW1hbmQuYWRkKGluZm8uZ2V0RmlsZSgpKTsKKworICAgIGNvbW1hbmQuYWRkKENMQVNTUEFUSF9GTEFHKTsKKyAgICBjb21tYW5kLmFkZChjbGFzc3BhdGgpOworCisgICAgY29tbWFuZC5hZGQoUEFDS0FHRV9GTEFHKTsKKyAgICBjb21tYW5kLmFkZChwYWNrYWdlT3JDbGFzc1VuZGVyVGVzdCk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHN1YlBhY2thZ2VzLmxlbmd0aDsgaSsrKSB7CisgICAgICBjb21tYW5kLmFkZChFWENMVURFX0ZMQUcpOworICAgICAgY29tbWFuZC5hZGQoc3ViUGFja2FnZXNbaV0pOworICAgIH0KKworICAgIGZvcihTdHJpbmcgamRrQ2xhc3NOYW1lOmV4Y2x1ZGVKZGtDbGFzc2VzKSB7CisgICAgICBjb21tYW5kLmFkZChFWENMVURFX0pES19DTEFTU19GTEFHKTsKKyAgICAgIGNvbW1hbmQuYWRkKGpka0NsYXNzTmFtZSk7CisgICAgfQorICAgIAorICAgICAgICAgICAgCisgICAgY29tbWFuZC5hZGQoQVBJX1ZFUlNJT05fRkxBRyk7CisgICAgY29tbWFuZC5hZGQoaW5mby5nZXRWZXJzaW9uKCkpOworCisgICAgcmV0dXJuICgoU3RyaW5nW10pIGNvbW1hbmQudG9BcnJheShuZXcgU3RyaW5nW2NvbW1hbmQuc2l6ZSgpXSkpOworCisgIH0gLy8gRU5EIGNyZWF0ZVRlc3RBcmd1bWVudHMKKworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIGJvb2xlYW4gcnVuU2lnbmF0dXJlVGVzdChTdHJpbmcgcGFja2FnZU9yQ2xhc3NOYW1lLAorICAgICAgU3RyaW5nW10gdGVzdEFyZ3VtZW50cykgdGhyb3dzIEV4Y2VwdGlvbiB7CisKKyAgICBDbGFzcyBzaWdUZXN0Q2xhc3MgPSBDbGFzcworICAgICAgICAuZm9yTmFtZSgiY29tLnN1bi50ZGsuc2lnbmF0dXJldGVzdC5TaWduYXR1cmVUZXN0Iik7CisgICAgT2JqZWN0IHNpZ1Rlc3RJbnN0YW5jZSA9IHNpZ1Rlc3RDbGFzcy5uZXdJbnN0YW5jZSgpOworCisgICAgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIG91dHB1dCA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKKworICAgIC8vIGRvIHNvbWUgbG9nZ2luZyB0byBoZWxwIHdpdGggdHJvdWJsZXNob290aW5nCisgICAgbG9nZ2VyLmxvZyhMb2dnZXIuTGV2ZWwuVFJBQ0UsCisgICAgICAgICJcbkNhbGxpbmc6ICBjb20uc3VuLnRkay5zaWduYXR1cmV0ZXN0LlNpZ25hdHVyZVRlc3QoKSB3aXRoIGZvbGxvd2luZyBhcmdzOiIpOworICAgIGZvciAoaW50IGlpID0gMDsgaWkgPCB0ZXN0QXJndW1lbnRzLmxlbmd0aDsgaWkrKykgeworICAgICAgbG9nZ2VyLmxvZyhMb2dnZXIuTGV2ZWwuVFJBQ0UsIiAgIHRlc3RBcmd1bWVudHNbIiArIGlpICsgIl0gPSAiICsgdGVzdEFyZ3VtZW50c1tpaV0pOworICAgIH0KKworICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorICAgIE1ldGhvZCBydW5NZXRob2QgPSBzaWdUZXN0Q2xhc3MuZ2V0RGVjbGFyZWRNZXRob2QoInJ1biIsCisgICAgICAgIG5ldyBDbGFzc1tdIHsgU3RyaW5nW10uY2xhc3MsIFByaW50V3JpdGVyLmNsYXNzLCBQcmludFdyaXRlci5jbGFzcyB9KTsKKyAgICBydW5NZXRob2QuaW52b2tlKHNpZ1Rlc3RJbnN0YW5jZSwKKyAgICAgICAgbmV3IE9iamVjdFtdIHsgdGVzdEFyZ3VtZW50cywgbmV3IFByaW50V3JpdGVyKG91dHB1dCwgdHJ1ZSksIG51bGwgfSk7CisKKyAgICBTdHJpbmcgcmF3TWVzc2FnZXMgPSBvdXRwdXQudG9TdHJpbmcoKTsKKworICAgIC8vIGN1cnJlbnRseSwgdGhlcmUgaXMgbm8gd2F5IHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgZXJyb3IgbXNncyBpbgorICAgIC8vIHRoZSByYXdtZXNzYWdlcywgc28gd2Ugd2lsbCBhbHdheXMgZHVtcCB0aGlzIGFuZCBjYWxsIGl0IGEgc3RhdHVzLgorICAgIC8vIFRlc3RVdGlsLmxvZ01zZygKKyAgICAvLyAgICAgIioqKioqKioqKiogU3RhdHVzIFJlcG9ydCAnIiArIHBhY2thZ2VPckNsYXNzTmFtZSArICInICoqKioqKioqKipcbiIpOworICAgIC8vIFRlc3RVdGlsLmxvZ01zZyhyYXdNZXNzYWdlcyk7CisgICAgbG9nZ2VyLmxvZyhMb2dnZXIuTGV2ZWwuSU5GTywgIioqKioqKioqKiogU3RhdHVzIFJlcG9ydCAnIiArIHBhY2thZ2VPckNsYXNzTmFtZSArICInICoqKioqKioqKipcbiIpOworICAgIGxvZ2dlci5sb2coTG9nZ2VyLkxldmVsLklORk8sIHJhd01lc3NhZ2VzKTsgICAgCisKKyAgICByZXR1cm4gc2lnVGVzdEluc3RhbmNlLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDcpLnN0YXJ0c1dpdGgoIlBhc3NlZC4iKTsKKyAgfSAvLyBFTkQgcnVuU2lnbmF0dXJlVGVzdAorCisgIC8qCisgICAqIAorICAgKiBAcmV0dXJuIFRoaXMgcmV0dXJucyB0cnVlIGlmIHRoZSBwYWNrYWdlT3JDbGFzc05hbWUgaXMgZm91bmQgaW4gdGhlIGltcGwuCisgICAqLworICBAT3ZlcnJpZGUKKyAgcHJvdGVjdGVkIGJvb2xlYW4gcnVuUGFja2FnZVNlYXJjaChTdHJpbmcgcGFja2FnZU9yQ2xhc3NOYW1lLAorICAgICAgU3RyaW5nW10gdGVzdEFyZ3VtZW50cykgdGhyb3dzIEV4Y2VwdGlvbiB7CisKKyAgICBDbGFzcyBzaWdUZXN0Q2xhc3MgPSBDbGFzcworICAgICAgICAuZm9yTmFtZSgiY29tLnN1bi50ZGsuc2lnbmF0dXJldGVzdC5TaWduYXR1cmVUZXN0Iik7CisgICAgT2JqZWN0IHNpZ1Rlc3RJbnN0YW5jZSA9IHNpZ1Rlc3RDbGFzcy5uZXdJbnN0YW5jZSgpOworCisgICAgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIG91dHB1dCA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKKworICAgIC8vIHdlIHdhbnQgdG8gcmVwbGFjZSB0aGUgUEFDS0FHRV9GTEFHIHdpdGggUEFDS0FHRV9OT19TVUJTX0ZMQUcKKyAgICBmb3IgKGludCBpaSA9IDA7IGlpIDwgdGVzdEFyZ3VtZW50cy5sZW5ndGg7IGlpKyspIHsKKyAgICAgIGlmICh0ZXN0QXJndW1lbnRzW2lpXS5lcXVhbHMoUEFDS0FHRV9GTEFHKSkgeworICAgICAgICB0ZXN0QXJndW1lbnRzW2lpXSA9IFBBQ0tBR0VfTk9fU1VCU19GTEFHOworICAgICAgfQorICAgIH0KKworICAgIC8vIGR1bXAgYXJncyBmb3IgZGVidWdnaW5nIGFpZAorICAgIGxvZ2dlci5sb2coTG9nZ2VyLkxldmVsLlRSQUNFLAorICAgICAgICAiXG5DYWxsaW5nOiAgY29tLnN1bi50ZGsuc2lnbmF0dXJldGVzdC5TaWduYXR1cmVUZXN0KCkgd2l0aCBmb2xsb3dpbmcgYXJnczoiKTsKKyAgICBmb3IgKGludCBpaSA9IDA7IGlpIDwgdGVzdEFyZ3VtZW50cy5sZW5ndGg7IGlpKyspIHsKKyAgICAgIGxvZ2dlci5sb2coTG9nZ2VyLkxldmVsLlRSQUNFLCIJICB0ZXN0QXJndW1lbnRzWyIgKyBpaSArICJdID0gIiArIHRlc3RBcmd1bWVudHNbaWldKTsKKyAgICB9CisKKyAgICBAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKyAgICBNZXRob2QgcnVuTWV0aG9kID0gc2lnVGVzdENsYXNzLmdldERlY2xhcmVkTWV0aG9kKCJydW4iLAorICAgICAgICBuZXcgQ2xhc3NbXSB7IFN0cmluZ1tdLmNsYXNzLCBQcmludFdyaXRlci5jbGFzcywgUHJpbnRXcml0ZXIuY2xhc3MgfSk7CisgICAgcnVuTWV0aG9kLmludm9rZShzaWdUZXN0SW5zdGFuY2UsCisgICAgICAgIG5ldyBPYmplY3RbXSB7IHRlc3RBcmd1bWVudHMsIG5ldyBQcmludFdyaXRlcihvdXRwdXQsIHRydWUpLCBudWxsIH0pOworCisgICAgU3RyaW5nIHJhd01lc3NhZ2VzID0gb3V0cHV0LnRvU3RyaW5nKCk7CisKKyAgICAvLyBjdXJyZW50bHksIHRoZXJlIGlzIG5vIHdheSB0byBkZXRlcm1pbmUgaWYgdGhlcmUgYXJlIGVycm9yIG1zZ3MgaW4KKyAgICAvLyB0aGUgcmF3bWVzc2FnZXMsIHNvIHdlIHdpbGwgYWx3YXlzIGR1bXAgdGhpcyBhbmQgY2FsbCBpdCBhIHN0YXR1cy4KKyAgICAvLyBUZXN0VXRpbC5sb2dNc2coCisgICAgLy8gICAgICIqKioqKioqKioqIFN0YXR1cyBSZXBvcnQgJyIgKyBwYWNrYWdlT3JDbGFzc05hbWUgKyAiJyAqKioqKioqKioqXG4iKTsKKyAgICAvLyBUZXN0VXRpbC5sb2dNc2cocmF3TWVzc2FnZXMpOworICAgIGxvZ2dlci5sb2coTG9nZ2VyLkxldmVsLklORk8sICIqKioqKioqKioqIFN0YXR1cyBSZXBvcnQgJyIgKyBwYWNrYWdlT3JDbGFzc05hbWUgKyAiJyAqKioqKioqKioqXG4iKTsKKyAgICBsb2dnZXIubG9nKExvZ2dlci5MZXZlbC5JTkZPLCByYXdNZXNzYWdlcyk7CisKKyAgICByZXR1cm4gc2lnVGVzdEluc3RhbmNlLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDcpLnN0YXJ0c1dpdGgoIlBhc3NlZC4iKTsKKyAgfQorCit9CmRpZmYgLS1naXQgYS90Y2svc3JjL21haW4vamF2YS9lZS9qYWthcnRhL3Rjay9hbm5vdGF0aW9ucy9zaWduYXR1cmV0ZXN0L1NpZ1Rlc3RSZXN1bHQuamF2YSBiL3Rjay9zcmMvbWFpbi9qYXZhL2VlL2pha2FydGEvdGNrL2Fubm90YXRpb25zL3NpZ25hdHVyZXRlc3QvU2lnVGVzdFJlc3VsdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxNTk3MGIKLS0tIC9kZXYvbnVsbAorKysgYi90Y2svc3JjL21haW4vamF2YS9lZS9qYWthcnRhL3Rjay9hbm5vdGF0aW9ucy9zaWduYXR1cmV0ZXN0L1NpZ1Rlc3RSZXN1bHQuamF2YQpAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAyMCBPcmFjbGUgYW5kL29yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQorICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2Ugdi4gMi4wLCB3aGljaCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC4KKyAqCisgKiBUaGlzIFNvdXJjZSBDb2RlIG1heSBhbHNvIGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBmb2xsb3dpbmcgU2Vjb25kYXJ5CisgKiBMaWNlbnNlcyB3aGVuIHRoZSBjb25kaXRpb25zIGZvciBzdWNoIGF2YWlsYWJpbGl0eSBzZXQgZm9ydGggaW4gdGhlCisgKiBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYuIDIuMCBhcmUgc2F0aXNmaWVkOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiB3aXRoIHRoZSBHTlUgQ2xhc3NwYXRoIEV4Y2VwdGlvbiwgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2NsYXNzcGF0aC9saWNlbnNlLmh0bWwuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCisgKi8KKworLyoKKyAqICRJZCQKKyAqLworcGFja2FnZSBlZS5qYWthcnRhLnRjay5hbm5vdGF0aW9ucy5zaWduYXR1cmV0ZXN0OworCitpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworcHVibGljIGNsYXNzIFNpZ1Rlc3RSZXN1bHQgaW1wbGVtZW50cyBTZXJpYWxpemFibGUgeworCisgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBOTCA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiLCAiXG4iKTsKKworICBwcml2YXRlIExpc3QgZmFpbGVkUGtncyA9IG5ldyBBcnJheUxpc3QoKTsKKworICBwcml2YXRlIExpc3QgcGFzc2VkUGtncyA9IG5ldyBBcnJheUxpc3QoKTsKKworICBwcml2YXRlIExpc3QgZmFpbGVkQ2xhc3NlcyA9IG5ldyBBcnJheUxpc3QoKTsKKworICBwcml2YXRlIExpc3QgcGFzc2VkQ2xhc3NlcyA9IG5ldyBBcnJheUxpc3QoKTsKKworICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFB1YmxpYyBNZXRob2RzCisKKyAgcHVibGljIHN5bmNocm9uaXplZCBib29sZWFuIHBhc3NlZCgpIHsKKworICAgIHJldHVybiAoZmFpbGVkUGtncy5zaXplKCkgPT0gMCAmJiBmYWlsZWRDbGFzc2VzLnNpemUoKSA9PSAwKTsKKworICB9IC8vIGVuZCBwYXNzZWQKKworICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgYWRkRmFpbGVkUGtnKFN0cmluZyBwa2cpIHsKKworICAgIGZhaWxlZFBrZ3MuYWRkKHBrZyk7CisKKyAgfSAvLyBFTkQgYWRkRmFpbGVkUGtnCisKKyAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIGFkZFBhc3NlZFBrZyhTdHJpbmcgcGtnKSB7CisKKyAgICBwYXNzZWRQa2dzLmFkZChwa2cpOworCisgIH0gLy8gRU5EIGFkZFBhc3NlZFBrZworCisgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBhZGRGYWlsZWRDbGFzcyhTdHJpbmcgY2xhc3NOYW1lKSB7CisKKyAgICBmYWlsZWRDbGFzc2VzLmFkZChjbGFzc05hbWUpOworCisgIH0gLy8gRU5EIGFkZEZhaWxlZENsYXNzCisKKyAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIGFkZFBhc3NlZENsYXNzKFN0cmluZyBjbGFzc05hbWUpIHsKKworICAgIHBhc3NlZENsYXNzZXMuYWRkKGNsYXNzTmFtZSk7CisKKyAgfSAvLyBFTkQgYWRkUGFzc2VkQ2xhc3MKKworICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCisgICAgU3RyaW5nIGRlbGltID0gIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIKKyAgICAgICAgKyBOTDsKKyAgICBpZiAoIXBrZ3NUZXN0ZWQoKSAmJiAhY2xhc3Nlc1Rlc3RlZCgpKSB7CisgICAgICByZXR1cm4gKGRlbGltICsgIioqKioqKioqIE5vIHBhY2thZ2VzIG9yIGNsYXNzZXMgd2VyZSB0ZXN0ZWQgKioqKioqKioqKiIKKyAgICAgICAgICArIE5MICsgZGVsaW0pOworICAgIH0KKyAgICBTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgIGJ1Zi5hcHBlbmQoZGVsaW0pOworICAgIGJ1Zi5hcHBlbmQoZGVsaW0pOworICAgIGlmIChwYXNzZWQoKSkgeworICAgICAgYnVmLmFwcGVuZCgiQWxsIHBhY2thZ2Ugc2lnbmF0dXJlcyBwYXNzZWQuIikuYXBwZW5kKE5MKTsKKyAgICB9IGVsc2UgeworICAgICAgYnVmLmFwcGVuZCgiU29tZSBzaWduYXR1cmVzIGZhaWxlZC4iKS5hcHBlbmQoTkwpOworICAgICAgaWYgKGZhaWxlZFBrZ3Muc2l6ZSgpID4gMCkgeworICAgICAgICBidWYuYXBwZW5kKCJcdEZhaWxlZCBwYWNrYWdlcyBsaXN0ZWQgYmVsb3c6ICIpLmFwcGVuZChOTCk7CisgICAgICAgIGZvcm1hdExpc3QoZmFpbGVkUGtncywgYnVmKTsKKyAgICAgIH0KKyAgICAgIGlmIChmYWlsZWRDbGFzc2VzLnNpemUoKSA+IDApIHsKKyAgICAgICAgYnVmLmFwcGVuZCgiXHRGYWlsZWQgY2xhc3NlcyBsaXN0ZWQgYmVsb3c6ICIpLmFwcGVuZChOTCk7CisgICAgICAgIGZvcm1hdExpc3QoZmFpbGVkQ2xhc3NlcywgYnVmKTsKKyAgICAgIH0KKyAgICB9CisgICAgaWYgKHBhc3NlZFBrZ3Muc2l6ZSgpID4gMCkgeworICAgICAgYnVmLmFwcGVuZCgiXHRQYXNzZWQgcGFja2FnZXMgbGlzdGVkIGJlbG93OiAiKS5hcHBlbmQoTkwpOworICAgICAgZm9ybWF0TGlzdChwYXNzZWRQa2dzLCBidWYpOworICAgIH0KKyAgICBpZiAocGFzc2VkQ2xhc3Nlcy5zaXplKCkgPiAwKSB7CisgICAgICBidWYuYXBwZW5kKCJcdFBhc3NlZCBjbGFzc2VzIGxpc3RlZCBiZWxvdzogIikuYXBwZW5kKE5MKTsKKyAgICAgIGZvcm1hdExpc3QocGFzc2VkQ2xhc3NlcywgYnVmKTsKKyAgICB9CisgICAgYnVmLmFwcGVuZCgiXHQiKTsKKyAgICBidWYuYXBwZW5kKGRlbGltKTsKKyAgICBidWYuYXBwZW5kKGRlbGltKTsKKyAgICByZXR1cm4gYnVmLnRvU3RyaW5nKCk7CisKKyAgfSAvLyBFTkQgdG9TdHJpbmcKKworICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUHJpdmF0ZSBNZXRob2RzCisKKyAgcHJpdmF0ZSBzeW5jaHJvbml6ZWQgdm9pZCBmb3JtYXRMaXN0KExpc3QgbGlzdCwgU3RyaW5nQnVmZmVyIGJ1ZikgeworCisgICAgc3luY2hyb25pemVkICh0aGlzKSB7CisgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpc3Quc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgU3RyaW5nIHBrZyA9IChTdHJpbmcpIChsaXN0LmdldChpKSk7CisgICAgICAgIGJ1Zi5hcHBlbmQoIlx0XHQiKS5hcHBlbmQocGtnKS5hcHBlbmQoTkwpOworICAgICAgfQorICAgIH0KKworICB9IC8vIEVORCBmb3JtYXRMaXN0CisKKyAgcHJpdmF0ZSBzeW5jaHJvbml6ZWQgYm9vbGVhbiBwa2dzVGVzdGVkKCkgeworCisgICAgcmV0dXJuIChmYWlsZWRQa2dzLnNpemUoKSAhPSAwIHx8IHBhc3NlZFBrZ3Muc2l6ZSgpICE9IDApOworCisgIH0gLy8gRU5EIHBrZ3NUZXN0ZWQKKworICBwcml2YXRlIHN5bmNocm9uaXplZCBib29sZWFuIGNsYXNzZXNUZXN0ZWQoKSB7CisKKyAgICByZXR1cm4gKGZhaWxlZENsYXNzZXMuc2l6ZSgpICE9IDAgfHwgcGFzc2VkQ2xhc3Nlcy5zaXplKCkgIT0gMCk7CisKKyAgfSAvLyBFTkQgY2xhc3Nlc1Rlc3RlZAorCit9IC8vIGVuZCBjbGFzcyBTaWdUZXN0UmVzdWx0CmRpZmYgLS1naXQgYS90Y2svc3JjL21haW4vamF2YS9lZS9qYWthcnRhL3Rjay9hbm5vdGF0aW9ucy9zaWduYXR1cmV0ZXN0L1NpZ25hdHVyZVRlc3REcml2ZXIuamF2YSBiL3Rjay9zcmMvbWFpbi9qYXZhL2VlL2pha2FydGEvdGNrL2Fubm90YXRpb25zL3NpZ25hdHVyZXRlc3QvU2lnbmF0dXJlVGVzdERyaXZlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlYjYyZjgKLS0tIC9kZXYvbnVsbAorKysgYi90Y2svc3JjL21haW4vamF2YS9lZS9qYWthcnRhL3Rjay9hbm5vdGF0aW9ucy9zaWduYXR1cmV0ZXN0L1NpZ25hdHVyZVRlc3REcml2ZXIuamF2YQpAQCAtMCwwICsxLDYwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAyMyBPcmFjbGUgYW5kL29yIGl0cyBhZmZpbGlhdGVzIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQorICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2Ugdi4gMi4wLCB3aGljaCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC4KKyAqCisgKiBUaGlzIFNvdXJjZSBDb2RlIG1heSBhbHNvIGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBmb2xsb3dpbmcgU2Vjb25kYXJ5CisgKiBMaWNlbnNlcyB3aGVuIHRoZSBjb25kaXRpb25zIGZvciBzdWNoIGF2YWlsYWJpbGl0eSBzZXQgZm9ydGggaW4gdGhlCisgKiBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYuIDIuMCBhcmUgc2F0aXNmaWVkOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiB3aXRoIHRoZSBHTlUgQ2xhc3NwYXRoIEV4Y2VwdGlvbiwgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2NsYXNzcGF0aC9saWNlbnNlLmh0bWwuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCisgKi8KKworcGFja2FnZSBlZS5qYWthcnRhLnRjay5hbm5vdGF0aW9ucy5zaWduYXR1cmV0ZXN0OworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5sYW5nLlN5c3RlbS5Mb2dnZXI7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CisKKworLyoqCisgKiBBbGxvd3MgdGhlIHNpZ3Rlc3QgZnJhbWV3b3JrIHRvIGJlIGV4dGVuZGVkIHVzaW5nIGRpZmZlcmVudCBzaWduYXR1cmUgdGVzdAorICogaW1wbGVtZW50YXRpb25zIChlLmcuIEFwaUNoZWNrLCBvciBTaWdUZXN0KQorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgU2lnbmF0dXJlVGVzdERyaXZlciB7CisKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IFN5c3RlbS5nZXRMb2dnZXIoU2lnbmF0dXJlVGVzdERyaXZlci5jbGFzcy5nZXROYW1lKCkpOworCisgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTSUdfRklMRV9FWFQgPSAiLnNpZyI7CisKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNJR19GSUxFX1ZFUl9TRVAgPSAiXyI7CisKKyAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQdWJsaWMgTWV0aG9kcworCisKKyAgLyoqCisgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcGFzc2VkIGluIHZlcnNpb24gbWF0Y2hlcyB0aGUgY3VycmVudCBKYXZhIHZlcnNpb24KKyAgICogYmVpbmcgdXNlZC4KKyAgICogCisgICAqLworICBwdWJsaWMgQm9vbGVhbiBpc0phdmFTRVZlcnNpb24oU3RyaW5nIHZlcikgeworCisgICAgU3RyaW5nIHN0ck9TVmVyc2lvbiA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgiamF2YS52ZXJzaW9uIik7CisgICAgaWYgKHN0ck9TVmVyc2lvbi5zdGFydHNXaXRoKHZlcikpIHsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICB9CisKKyAgLyoqCisgICAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBjbGVhbnVwIG1ldGhvZCBkZWZpbmVkIGluIGJvdGggdGhlIFNpZ1Rlc3QgYW5kCisgICAqIFNpZ1Rlc3RFRSBjbGFzcy4KKyAgICovCisgIHB1YmxpYyB2b2lkIGNsZWFudXBJbXBsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisKKyAgICB0cnkgeworICAgICAgbG9nZ2VyLmxvZyhMb2dnZXIuTGV2ZWwuSU5GTywiY2xlYW51cCIpOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICBsb2dnZXIubG9nKExvZ2dlci5MZXZlbC5FUlJPUiwiRXhjZXB0aW9uIGluIGNsZWFudXAgbWV0aG9kIiArIGUpOworICAgICAgdGhyb3cgZTsKKyAgICB9CisKKyAgfSAvLyBFTkQgY2xlYW51cEltcGwKKworICAvKioKKyAgICogPHA+CisgICAqIEV4ZWN1dGUgdGhlIHNpZ25hdHVyZSB0ZXN0LiBCeSBkZWZhdWx0LCB0aGlzIG1ldGhvZCBwYXNzZXMgdGhlIHJlc3VsdCBvZgorICAgKiB7QGxpbmsgI2NyZWF0ZVRlc3RBcmd1bWVudHMoU3RyaW5nLCBTdHJpbmcsIFN0cmluZywgU3RyaW5nLCBTdHJpbmcpfSBhbmQKKyAgICogcGFzc2VzIHRoZSByZXN1bHQgdG8ge0BsaW5rICNydW5TaWduYXR1cmVUZXN0KFN0cmluZywgU3RyaW5nW10pfS4KKyAgICoKKyAgICogQHBhcmFtIHBhY2thZ2VMaXN0RmlsZQorICAgKiAgICAgICAgICAtIGZpbGUgY29udGFpbmluZyB0aGUgcGFja2FnZXMvY2xhc3NlcyB0aGF0IGFyZSB0byBiZSB2ZXJpZmllZAorICAgKiBAcGFyYW0gbWFwRmlsZQorICAgKiAgICAgICAgICBzaWctdGVzdC5tYXAgZmlsZQorICAgKiBAcGFyYW0gc2lnbmF0dXJlUmVwb3NpdG9yeURpcgorICAgKiAgICAgICAgICBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgcmVjb3JkZWQgc2lnbmF0dXJlcworICAgKiBAcGFyYW0gcGFja2FnZXNVbmRlclRlc3QKKyAgICogICAgICAgICAgcGFja2FnZXMsIGRlZmluZWQgYnkgdGhlIHRlc3QgY2xpZW50LCB0aGF0IHNob3VsZCBiZSB0ZXN0ZWQKKyAgICogQHBhcmFtIGNsYXNzZXNVbmRlclRlc3QKKyAgICogICAgICAgICAgY2xhc3NlcywgZGVmaW5lZCBieSB0aGUgdGVzdCBjbGllbnQsIHRoYXQgc2hvdWxkIGJlIHRlc3RlZAorICAgKiBAcGFyYW0gY2xhc3NwYXRoCisgICAqICAgICAgICAgIFRoZSBsb2NhdGlvbiBvZiB0aGUgQVBJIGJlaW5nIHZlcmlmaWVkLiBOb3JtYWxseSB0aGUgY2hlY2tlZCBBUEkKKyAgICogICAgICAgICAgd2lsbCBiZSBhdmFpbGFibGUgaW4gdGhlIHRlc3QgZW52aXJvbm1lbnQgYW5kIHRlc3RDbGFzc3BhdGggd2lsbAorICAgKiAgICAgICAgICBiZSBudWxsLiBJbiBzb21lIHJhcmUgY2FzZXMgdGhlIHRlc3RlZCBBUEkgbWF5IG5vdCBiZSBwYXJ0IG9mIHRoZQorICAgKiAgICAgICAgICB0ZXN0IGVudmlyb25tZW50IGFuZCB3aWxsIGhhdmUgdG8gc3BlY2lmaWVkIHVzaW5nIHRoaXMgcGFyYW1ldGVyLgorICAgKiBAcGFyYW0gdW5hY2NvdW50ZWRUZWNoUGtncworICAgKiAgICAgICAgICBwYWNrYWdlcyB0aGF0IHNob3VsZCBub3QgZXhpc3Qgd2l0aGluIHRoZSB0ZWNobm9sb2d5IHVuZGVyIHRlc3QuCisgICAqICAgICAgICAgIFRoZXNlIHdpbGwgYmUgc2VhcmNoZWQgZm9yIGFuZCBpZiBmb3VuZCwgd2lsbCBiZSBmbGFnZ2VkIGFzIGVycm9yCisgICAqICAgICAgICAgIHNpbmNlIHRoZXkgd2VyZSBub3QgZXhwbGljaXRseSBkZWNsYXJlZCBhcyBiZWluZyB1bmRlciB0ZXN0LiBUaGVpcgorICAgKiAgICAgICAgICBleGlzdGVuY2UgcmVxdWlyZXMgZXhwbGljaXQgdGVzdGluZy4KKyAgICoKKyAgICogQHJldHVybiBhIHtAbGluayBTaWdUZXN0UmVzdWx0fSBjb250YWluaW5nIHRoZSByZXN1bHQgb2YgdGhlIHRlc3QgZXhlY3V0aW9uCisgICAqLworICBwdWJsaWMgU2lnVGVzdFJlc3VsdCBleGVjdXRlU2lnVGVzdChTdHJpbmcgcGFja2FnZUxpc3RGaWxlLCBTdHJpbmcgbWFwRmlsZSwKKyAgICAgIFN0cmluZyBzaWduYXR1cmVSZXBvc2l0b3J5RGlyLCBTdHJpbmdbXSBwYWNrYWdlc1VuZGVyVGVzdCwKKyAgICAgIFN0cmluZ1tdIGNsYXNzZXNVbmRlclRlc3QsIFN0cmluZyBjbGFzc3BhdGgsCisgICAgICBBcnJheUxpc3Q8U3RyaW5nPiB1bmFjY291bnRlZFRlY2hQa2dzLCBTdHJpbmcgb3B0aW9uYWxQa2dUb0lnbm9yZSkKKyAgICAgIHRocm93cyBFeGNlcHRpb24geworCisgICAgU2lnVGVzdFJlc3VsdCByZXN1bHQgPSBuZXcgU2lnVGVzdFJlc3VsdCgpOworCisgICAgbG9nZ2VyLmxvZyhMb2dnZXIuTGV2ZWwuSU5GTywib3B0aW9uYWxQa2dUb0lnbm9yZSA9ICIgKyBvcHRpb25hbFBrZ1RvSWdub3JlKTsKKyAgICBTdHJpbmdbXSBhcnJheU9wdGlvbmFsUGtnc1RvSWdub3JlID0gbnVsbDsKKyAgICBpZiAob3B0aW9uYWxQa2dUb0lnbm9yZSAhPSBudWxsKSB7CisgICAgICBhcnJheU9wdGlvbmFsUGtnc1RvSWdub3JlID0gb3B0aW9uYWxQa2dUb0lnbm9yZS5zcGxpdCgiLCIpOworICAgIH0KKworICAgIGlmIChwYWNrYWdlc1VuZGVyVGVzdCAhPSBudWxsICYmIHBhY2thZ2VzVW5kZXJUZXN0Lmxlbmd0aCA+IDApIHsKKyAgICAgIGxvZ2dlci5sb2coTG9nZ2VyLkxldmVsLklORk8sIioqKioqKioqKiogQkVHSU4gUEFDS0FHRSBMRVZFTCBTSUdOQVRVUkUgIgorICAgICAgICAgICsgIlZBTElEQVRJT04gKioqKioqKioqKlxuXG4iKTsKKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGFja2FnZXNVbmRlclRlc3QubGVuZ3RoOyBpKyspIHsKKworICAgICAgICBTdHJpbmcgcGFja2FnZU5hbWUgPSBwYWNrYWdlc1VuZGVyVGVzdFtpXTsKKworICAgICAgICBsb2dnZXIubG9nKExvZ2dlci5MZXZlbC5JTkZPLCIqKioqKioqKioqIEJFR0lOIFZBTElEQVRFIFBBQ0tBR0UgJyIKKyAgICAgICAgICAgICsgcGFja2FnZXNVbmRlclRlc3RbaV0gKyAiJyAqKioqKioqKioqXG4iKTsKKworICAgICAgICBsb2dnZXIubG9nKExvZ2dlci5MZXZlbC5JTkZPLAorICAgICAgICAgICAgIioqKioqKioqKiogVkFMSURBVEUgSU4gU1RBVElDIE1PREUgLSBUTyBDSEVDSyBDT05TQU5UIFZBTFVFUyAqKioqIik7CisgICAgICAgIGxvZ2dlci5sb2coTG9nZ2VyLkxldmVsLklORk8sIlN0YXRpYyBtb2RlIHN1cHBvcnRzIGNoZWNrcyBvZiBzdGF0aWMgY29uc3RhbnRzIHZhbHVlcyAiKTsKKworICAgICAgICBTdHJpbmdbXSBhcmdzID0gY3JlYXRlVGVzdEFyZ3VtZW50cyhwYWNrYWdlTGlzdEZpbGUsIG1hcEZpbGUsCisgICAgICAgICAgICBzaWduYXR1cmVSZXBvc2l0b3J5RGlyLCBwYWNrYWdlTmFtZSwgY2xhc3NwYXRoLCB0cnVlKTsKKyAgICAgICAgZHVtcFRlc3RBcmd1bWVudHMoYXJncyk7CisKKyAgICAgICAgaWYgKHJ1blNpZ25hdHVyZVRlc3QocGFja2FnZU5hbWUsIGFyZ3MpKSB7CisgICAgICAgICAgbG9nZ2VyLmxvZyhMb2dnZXIuTGV2ZWwuSU5GTywiKioqKioqKioqKiBQYWNrYWdlICciICsgcGFja2FnZU5hbWUKKyAgICAgICAgICAgICAgKyAiJyAtIFBBU1NFRCAoU1RBVElDIE1PREUpICoqKioqKioqKioiKTsKKyAgICAgICAgICByZXN1bHQuYWRkUGFzc2VkUGtnKHBhY2thZ2VOYW1lICsgIihzdGF0aWMgbW9kZSkiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICByZXN1bHQuYWRkRmFpbGVkUGtnKHBhY2thZ2VOYW1lICsgIihzdGF0aWMgbW9kZSkiKTsKKyAgICAgICAgICBsb2dnZXIubG9nKExvZ2dlci5MZXZlbC5JTkZPLCIqKioqKioqKioqIFBhY2thZ2UgJyIgKyBwYWNrYWdlTmFtZQorICAgICAgICAgICAgICArICInIC0gRkFJTEVEIChTVEFUSUMgTU9ERSkgKioqKioqKioqKiIpOworICAgICAgICB9CisKKyAgICAgICAgbG9nZ2VyLmxvZyhMb2dnZXIuTGV2ZWwuSU5GTywiXG5cbiIpOworICAgICAgICBsb2dnZXIubG9nKExvZ2dlci5MZXZlbC5JTkZPLCIqKioqKioqKioqIFZBTElEQVRFIElOIFJFRkxFQ1RJVkUgTU9ERSAgKioqKiIpOworICAgICAgICBsb2dnZXIubG9nKExvZ2dlci5MZXZlbC5JTkZPLAorICAgICAgICAgICAgIlJlZmxlY3RpdmUgbW9kZSBzdXBwb3J0cyB2ZXJpZmljYXRpb24gd2l0aGluIGNvbnRhaW5lcnMgKGllIGVqYiwgc2VydmxldCwgZXRjKSIpOworCisgICAgICAgIFN0cmluZ1tdIGFyZ3MyID0gY3JlYXRlVGVzdEFyZ3VtZW50cyhwYWNrYWdlTGlzdEZpbGUsIG1hcEZpbGUsCisgICAgICAgICAgICBzaWduYXR1cmVSZXBvc2l0b3J5RGlyLCBwYWNrYWdlTmFtZSwgY2xhc3NwYXRoLCBmYWxzZSk7CisgICAgICAgIGR1bXBUZXN0QXJndW1lbnRzKGFyZ3MyKTsKKworICAgICAgICBpZiAocnVuU2lnbmF0dXJlVGVzdChwYWNrYWdlTmFtZSwgYXJnczIpKSB7CisgICAgICAgICAgbG9nZ2VyLmxvZyhMb2dnZXIuTGV2ZWwuSU5GTywiKioqKioqKioqKiBQYWNrYWdlICciICsgcGFja2FnZU5hbWUKKyAgICAgICAgICAgICAgKyAiJyAtIFBBU1NFRCAoUkVGTEVDVElPTiBNT0RFKSAqKioqKioqKioqIik7CisgICAgICAgICAgcmVzdWx0LmFkZFBhc3NlZFBrZyhwYWNrYWdlTmFtZSArICIocmVmbGVjdGlvbiBtb2RlKSIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHJlc3VsdC5hZGRGYWlsZWRQa2cocGFja2FnZU5hbWUgKyAiKHJlZmxlY3Rpb24gbW9kZSkiKTsKKyAgICAgICAgICBsb2dnZXIubG9nKExvZ2dlci5MZXZlbC5JTkZPLCIqKioqKioqKioqIFBhY2thZ2UgJyIgKyBwYWNrYWdlTmFtZQorICAgICAgICAgICAgICArICInIC0gRkFJTEVEIChSRUZMRUNUSU9OIE1PREUpICoqKioqKioqKioiKTsKKyAgICAgICAgfQorCisgICAgICAgIGxvZ2dlci5sb2coTG9nZ2VyLkxldmVsLklORk8sIioqKioqKioqKiogRU5EIFZBTElEQVRFIFBBQ0tBR0UgJyIKKyAgICAgICAgICAgICsgcGFja2FnZXNVbmRlclRlc3RbaV0gKyAiJyAqKioqKioqKioqXG4iKTsKKworICAgICAgICBsb2dnZXIubG9nKExvZ2dlci5MZXZlbC5JTkZPLCJcbiIpOworICAgICAgICBsb2dnZXIubG9nKExvZ2dlci5MZXZlbC5JTkZPLCJcbiIpOworCisgICAgICB9CisgICAgfQorCisgICAgaWYgKGNsYXNzZXNVbmRlclRlc3QgIT0gbnVsbCAmJiBjbGFzc2VzVW5kZXJUZXN0Lmxlbmd0aCA+IDApIHsKKyAgICAgIGxvZ2dlci5sb2coTG9nZ2VyLkxldmVsLklORk8sIioqKioqKioqKiogQkVHSU4gQ0xBU1MgTEVWRUwgU0lHTkFUVVJFICIKKyAgICAgICAgICArICJWQUxJREFUSU9OICoqKioqKioqKipcblxuIik7CisKKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2xhc3Nlc1VuZGVyVGVzdC5sZW5ndGg7IGkrKykgeworCisgICAgICAgIFN0cmluZyBjbGFzc05hbWUgPSBjbGFzc2VzVW5kZXJUZXN0W2ldOworCisgICAgICAgIGxvZ2dlci5sb2coTG9nZ2VyLkxldmVsLklORk8sIioqKioqKioqKiogQkVHSU4gVkFMSURBVEUgQ0xBU1MgJyIKKyAgICAgICAgICAgICsgY2xhc3Nlc1VuZGVyVGVzdFtpXSArICInICoqKioqKioqKipcbiIpOworCisgICAgICAgIGxvZ2dlci5sb2coTG9nZ2VyLkxldmVsLklORk8sCisgICAgICAgICAgICAiKioqKioqKioqKiBWQUxJREFURSBJTiBTVEFUSUMgTU9ERSAtIFRPIENIRUNLIENPTlNBTlQgVkFMVUVTICoqKioiKTsKKyAgICAgICAgbG9nZ2VyLmxvZyhMb2dnZXIuTGV2ZWwuSU5GTywiU3RhdGljIG1vZGUgc3VwcG9ydHMgY2hlY2tzIG9mIHN0YXRpYyBjb25zdGFudHMgdmFsdWVzICIpOworCisgICAgICAgIFN0cmluZ1tdIGFyZ3MgPSBjcmVhdGVUZXN0QXJndW1lbnRzKHBhY2thZ2VMaXN0RmlsZSwgbWFwRmlsZSwKKyAgICAgICAgICAgIHNpZ25hdHVyZVJlcG9zaXRvcnlEaXIsIGNsYXNzTmFtZSwgY2xhc3NwYXRoLCB0cnVlKTsKKyAgICAgICAgZHVtcFRlc3RBcmd1bWVudHMoYXJncyk7CisKKyAgICAgICAgaWYgKHJ1blNpZ25hdHVyZVRlc3QoY2xhc3NOYW1lLCBhcmdzKSkgeworICAgICAgICAgIGxvZ2dlci5sb2coTG9nZ2VyLkxldmVsLklORk8sIioqKioqKioqKiogQ2xhc3MgJyIgKyBjbGFzc05hbWUKKyAgICAgICAgICAgICAgKyAiJyAtIFBBU1NFRCAoU1RBVElDIE1PREUpICoqKioqKioqKioiKTsKKyAgICAgICAgICByZXN1bHQuYWRkUGFzc2VkQ2xhc3MoY2xhc3NOYW1lICsgIihzdGF0aWMgbW9kZSkiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBsb2dnZXIubG9nKExvZ2dlci5MZXZlbC5JTkZPLCIqKioqKioqKioqIENsYXNzICciICsgY2xhc3NOYW1lCisgICAgICAgICAgICAgICsgIicgLSBGQUlMRUQgKFNUQVRJQyBNT0RFKSAqKioqKioqKioqIik7CisgICAgICAgICAgcmVzdWx0LmFkZEZhaWxlZENsYXNzKGNsYXNzTmFtZSArICIoc3RhdGljIG1vZGUpIik7CisgICAgICAgIH0KKworICAgICAgICBsb2dnZXIubG9nKExvZ2dlci5MZXZlbC5JTkZPLCJcblxuIik7CisgICAgICAgIGxvZ2dlci5sb2coTG9nZ2VyLkxldmVsLklORk8sIioqKioqKioqKiogVkFMSURBVEUgSU4gUkVGTEVDVElWRSBNT0RFICAqKioqIik7CisgICAgICAgIGxvZ2dlci5sb2coTG9nZ2VyLkxldmVsLklORk8sCisgICAgICAgICAgICAiUmVmbGVjdGl2ZSBtb2RlIHN1cHBvcnRzIHZlcmlmaWNhdGlvbiB3aXRoaW4gY29udGFpbmVycyAoaWUgZWpiLCBzZXJ2bGV0LCBldGMpIik7CisKKyAgICAgICAgU3RyaW5nW10gYXJnczIgPSBjcmVhdGVUZXN0QXJndW1lbnRzKHBhY2thZ2VMaXN0RmlsZSwgbWFwRmlsZSwKKyAgICAgICAgICAgIHNpZ25hdHVyZVJlcG9zaXRvcnlEaXIsIGNsYXNzTmFtZSwgY2xhc3NwYXRoLCBmYWxzZSk7CisgICAgICAgIGR1bXBUZXN0QXJndW1lbnRzKGFyZ3MyKTsKKworICAgICAgICBpZiAocnVuU2lnbmF0dXJlVGVzdChjbGFzc05hbWUsIGFyZ3MyKSkgeworICAgICAgICAgIGxvZ2dlci5sb2coTG9nZ2VyLkxldmVsLklORk8sIioqKioqKioqKiogQ2xhc3MgJyIgKyBjbGFzc05hbWUKKyAgICAgICAgICAgICAgKyAiJyAtIFBBU1NFRCAoUkVGTEVDVElPTiBNT0RFKSAqKioqKioqKioqIik7CisgICAgICAgICAgcmVzdWx0LmFkZFBhc3NlZENsYXNzKGNsYXNzTmFtZSArICIocmVmbGVjdGlvbiBtb2RlKSIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGxvZ2dlci5sb2coTG9nZ2VyLkxldmVsLklORk8sIioqKioqKioqKiogQ2xhc3MgJyIgKyBjbGFzc05hbWUKKyAgICAgICAgICAgICAgKyAiJyAtIEZBSUxFRCAoUkVGTEVDVElPTiBNT0RFKSAqKioqKioqKioqIik7CisgICAgICAgICAgcmVzdWx0LmFkZEZhaWxlZENsYXNzKGNsYXNzTmFtZSArICIocmVmbGVjdGlvbiBtb2RlKSIpOworICAgICAgICB9CisKKyAgICAgICAgbG9nZ2VyLmxvZyhMb2dnZXIuTGV2ZWwuSU5GTywiKioqKioqKioqKiBFTkQgVkFMSURBVEUgQ0xBU1MgJyIgKyBjbGFzc2VzVW5kZXJUZXN0W2ldCisgICAgICAgICAgICArICInICoqKioqKioqKipcbiIpOworCisgICAgICAgIGxvZ2dlci5sb2coTG9nZ2VyLkxldmVsLklORk8sIlxuIik7CisgICAgICAgIGxvZ2dlci5sb2coTG9nZ2VyLkxldmVsLklORk8sIlxuIik7CisKKyAgICAgIH0KKyAgICB9CisKKyAgICAvKgorICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCBjaGVjayBpZiB0aGVyZSBhcmUgT3B0aW9uYWwgVGVjaG5vbG9naWVzIGJlaW5nCisgICAgICogaW1wbGVtZW50ZWQgYnV0IG5vdCBleHBsaWNpdGx5IGRlZmluZWQgdGhydSAodHMuanRlKSBqYXZhZWUubGV2ZWwKKyAgICAgKiBwcm9wZXJ0eS4gVGhpcyBpcyBhIHByb2JsZW0gYmVjYXVzZSBpZiBhbiBvcHRpb25hbCB0ZWNobm9sZ3kgaXMgZGVmaW5lZAorICAgICAqIChlaXRoZXIgd2hvbGUgb3IgcGFydGlhbGx5KSB0aGFuIHRoZSBUQ0sgdGVzdHMgKGFuZCBzaWcgdGVzdHMpIGZvciB0aG9zZQorICAgICAqIE9wdGlvbmFsIFRlY2hub2xvZ3kocykgTVVTVCBiZSBydW4gYWNjb3JkaW5nIHRvIHJlbGF0ZWQgc3BlY3MuCisgICAgICovCisgICAgaWYgKHVuYWNjb3VudGVkVGVjaFBrZ3MgIT0gbnVsbCkgeworICAgICAgZm9yIChpbnQgaWkgPSAwOyBpaSA8IHVuYWNjb3VudGVkVGVjaFBrZ3Muc2l6ZSgpOyBpaSsrKSB7CisgICAgICAgIC8vICd1bmFjY291bnRlZFRlY2hQa2dzJyBhcmUgdCBob3NlIHBhY2thZ2VzIHdoaWNoIGRvIG5vdCBiZWxpbmcgdG8KKyAgICAgICAgLy8gYmFzZSB0ZWNobm9sb2d5IG5vciBvbmUgb2YgdGhlICpkZWNsYXJlZCogb3B0aW9uYWxhbCB0ZWNobm9sb2dpZXMuCisgICAgICAgIC8vICd1bmFjY291bnRlZFRlY2hQa2dzJyByZWZlcnMgdG8gcGFja2FnZXMgZm9yIE9wdGlvbmFsIFRlY2hub2xvZ2llcworICAgICAgICAvLyB3aGljaCB3ZXJlIG5vdCBkZWZpbmVkIHRocnUgKHRzLmp0ZSkgamF2YWVlLmxldmVsIHByb3BlcnR5LgorICAgICAgICAvLyBTbywgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyB3aG9sZSBvciBwYXJ0aWFsIGltcGxlbWVudGF0aW9ucyBvZgorICAgICAgICAvLyB1bmRlY2xhcmVkIG9wdGlvbmFsIHRlY2hub2xvZ2llcyBpbiB0aGUgaW1wbGVtZW50YXRpb24KKworICAgICAgICBTdHJpbmcgcGFja2FnZU5hbWUgPSB1bmFjY291bnRlZFRlY2hQa2dzLmdldChpaSk7CisKKyAgICAgICAgLy8gdGhpcyBpcyBhIHNwZWNpYWwgY2FzZSBleGNlcHRpb24gdG8gb3VyIHZhbGlkYXRpb24gb2YgT3B0aW9uYWwKKyAgICAgICAgLy8gVGVjaG5vbG9naWVzLiBOb3JtYWxseSBhbnkgcGFydGlhbCB0ZWNobm9sb2d5IGltcGxlbWVudGF0aW9ucworICAgICAgICAvLyB3b3VsZCBiZSBhIGNvbXBhdGliaWxpdHkgZmFpbHVyZS4gSE9XRVZFUiwgRUUgNyBTcGVjIChzZWUgc2VjdGlvbgorICAgICAgICAvLyBFRSA2LjEuMiBvZiB0aGUgUGxhdGZvcm0gc3BlYyBpbiB0aGUgZm9vdG5vdGUgb24gcC4gMTU2LikKKyAgICAgICAgLy8gcmVxdWlyZXMgdXMgdG8gYWRkIHNwZWNpYWwgaGFuZGxpbmcgdG8gYXZvaWQgdGVzdGluZyAnY2VydGFpbicgcGtncworICAgICAgICAvLyB3aXRoaW4gYW4gb3B0aW9uYWwgdGVjaG5vbG9neS4KKyAgICAgICAgaWYgKGlzSWdub3JlUGFja2FnZVVuZGVyVGVzdChwYWNrYWdlTmFtZSwgYXJyYXlPcHRpb25hbFBrZ3NUb0lnbm9yZSkpIHsKKyAgICAgICAgICBsb2dnZXIubG9nKExvZ2dlci5MZXZlbC5JTkZPLAorICAgICAgICAgICAgICAiSWdub3Jpbmcgc3BlY2lhbCBvcHRpb25hbCB0ZWNobm9sb2d5IHBhY2thZ2U6ICIgKyBwYWNrYWdlTmFtZSk7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBsb2dnZXIubG9nKExvZ2dlci5MZXZlbC5JTkZPLCJcblxuIik7CisgICAgICAgIGxvZ2dlci5sb2coTG9nZ2VyLkxldmVsLklORk8sCisgICAgICAgICAgICAiKioqKioqKioqKiBDSEVDSyBJRiBPUFRJT05BTCBURUNITk9MT0dJRVMgRVhJU1QgSU4gUkVGTEVDVElWRSBNT0RFICAqKioqIik7CisgICAgICAgIGxvZ2dlci5sb2coTG9nZ2VyLkxldmVsLklORk8sCisgICAgICAgICAgICAiUmVmbGVjdGl2ZSBtb2RlIHN1cHBvcnRzIHZlcmlmaWNhdGlvbiB3aXRoaW4gY29udGFpbmVycyAoaWUgZWpiLCBzZXJ2bGV0LCBldGMpIik7CisKKyAgICAgICAgU3RyaW5nW10gYXJnczMgPSBjcmVhdGVUZXN0QXJndW1lbnRzKHBhY2thZ2VMaXN0RmlsZSwgbWFwRmlsZSwKKyAgICAgICAgICAgIHNpZ25hdHVyZVJlcG9zaXRvcnlEaXIsIHBhY2thZ2VOYW1lLCBjbGFzc3BhdGgsIGZhbHNlKTsKKyAgICAgICAgZHVtcFRlc3RBcmd1bWVudHMoYXJnczMpOworCisgICAgICAgIC8vIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLQorICAgICAgICAvLyAtIC0gLSAtCisgICAgICAgIC8vIE5PVEU6IHRoaXMgaXMgdGhlIG9wcG9zaXRlIG9mIGFib3ZlIGluIHRoYXQgKmlmKiB3ZSBmaW5kIHRoYXQgYW4KKyAgICAgICAgLy8gdW5kZWNsYXJlZAorICAgICAgICAvLyBvcHRpb25hbCB0ZWNobm9sb2d5IHBhY2thZ2UgZXhpc3RzIC0gdGhlbiB3ZSB3YW50IHRvIHJhaXNlIGEgcmVkCisgICAgICAgIC8vIGZsYWcuCisgICAgICAgIC8vIFRoZSB1c2VyIHdvdWxkIGhhdmUgdG8gZWl0aGVyIHJlbW92ZSB0aGUgdGVjaG5vbG9neSBmcm9tIHRoZSBpbXBsIGlmCisgICAgICAgIC8vIHRoZXkgZG8gbm90IHdhbnQgdG8gaW5jbHVkZSBpdCBpbiB0aGVpciBpbXBsIC1PUi0gdGhleSBtdXN0CisgICAgICAgIC8vIGV4cGxpY2l0bHkKKyAgICAgICAgLy8gc2V0IGphdmFlZS5sZXZlbCAoaW4gdHMuanRlKSB0byBpbmNsdWRlIHRoYXQgT3B0aW9uYWwgVGVjaG5vbG9neSBBTkQKKyAgICAgICAgLy8gYWZ0ZXIgc2V0dGluZyB0aGlzIHByb3BlcnR5LCB0aGV5IGhhdmUgdG8gcGFzcyBhbGwgcmVsYXRlZCBUQ0sgdGVzdHMuCisgICAgICAgIGlmIChydW5QYWNrYWdlU2VhcmNoKHBhY2thZ2VOYW1lLCBhcmdzMykpIHsKKyAgICAgICAgICAvLyBpZiB0aGlzIHBhc3NlZCB3ZSBoYXZlIGFuIGlzc3VlIGJlY2F1c2UgaXQgc2hvdWxkIG5vdCBleGlzdCAtIHRodXMKKyAgICAgICAgICAvLyBzaG91bGQgTk9UIHBhc3MuCisgICAgICAgICAgbG9nZ2VyLmxvZyhMb2dnZXIuTGV2ZWwuSU5GTywiKioqKioqKioqKiBQYWNrYWdlICciICsgcGFja2FnZU5hbWUKKyAgICAgICAgICAgICAgKyAiJyAtIFdBUyBGT1VORCBCVVQgU0hPVUxEIE5PVCBCRSAoUkVGTEVDVElPTiBNT0RFKSAqKioqKioqKioqIik7CisgICAgICAgICAgU3RyaW5nIGVyciA9ICJFUlJPUjogIEFuIGFyZWEgb2YgY29uY2VybiBoYXMgYmVlbiBpZGVudGlmaWVkLiAgIjsKKyAgICAgICAgICBlcnIgKz0gIllvdSBtdXN0IHJ1biBzaWd0ZXN0cyB3aXRoICh0cy5qdGUpIGphdmFlZS5sZXZlbCBzZXQgdG8gIjsKKyAgICAgICAgICBlcnIgKz0gImluY2x1ZGUgYWxsIG9wdGlvbmFsIHRlY2hub2xvZ3kga2V5d29yZHMuICBXaG9sZSBhbmQvb3IgIjsKKyAgICAgICAgICBlcnIgKz0gInBhcnRpYWwgaW1wbGVtZW50YXRpb25zIG9mIE9wdGlvbmFsIFRlY2hub2xvZ2llcyAiOworICAgICAgICAgIGVyciArPSAibXVzdCBiZSBpbXBsZW1lbnRlZCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNzIEFORCBtdXN0IHBhc3MgIjsKKyAgICAgICAgICBlcnIgKz0gImFsbCByZWxhdGVkIFRDSyB0ZXN0cy4gIFRvIHByb3Blcmx5IHBhc3MgdGhlICI7CisgICAgICAgICAgZXJyICs9ICJzaWduYXR1cmUgdGVzdHMgLSB5b3UgbXVzdCBpZGVudGlmeSBhbGwgT3B0aW9uYWwgVGVjaG5vbG9neSAiOworICAgICAgICAgIGVyciArPSAiYXJlYXMgKHZpYSBqYXZhZWUubGV2ZWwpIHRoYXQgeW91IHdpc2ggdG8gcGFzcyBzaWduYXR1cmUgdGVzdHMgZm9yLiI7CisgICAgICAgICAgbG9nZ2VyLmxvZyhMb2dnZXIuTGV2ZWwuSU5GTyxlcnIpOworICAgICAgICAgIHJlc3VsdC5hZGRGYWlsZWRQa2cocGFja2FnZU5hbWUKKyAgICAgICAgICAgICAgKyAiIChVbmRlY2xhcmVkIE9wdGlvbmFsIFRlY2hub2xvZ3kgcGFja2FnZSBmb3VuZCBpbiByZWZsZWN0aW9uIG1vZGUpIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgbG9nZ2VyLmxvZyhMb2dnZXIuTGV2ZWwuSU5GTywiKioqKioqKioqKiBVbmRlY2xhcmVkIE9wdGlvbmFsIFRlY2hub2xvZ3kgcGFja2FnZSAnIgorICAgICAgICAgICAgICArIHBhY2thZ2VOYW1lICsgIicgLSBQQVNTRUQgKFJFRkxFQ1RJT04gTU9ERSkgKioqKioqKioqKiIpOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKKworICB9IC8vIEVORCBleGVjdXRlU2lnVGVzdAorCisgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUHJvdGVjdGVkIE1ldGhvZHMKKworICAvKioKKyAgICogVXNpbmcgYSBjb21tb24gc2V0IG9mIGluZm9ybWF0aW9uLCBjcmVhdGUgYXJndW1lbnRzIHRoYXQgYXJlIGFwcHJvcHJpYXRlIHRvCisgICAqIGJlIHVzZWQgd2l0aCB0aGUgdW5kZXJseWluZyBzaWduYXR1cmUgdGVzdCBmcmFtZXdvcmsuCisgICAqCisgICAqIEBwYXJhbSBwYWNrYWdlTGlzdEZpbGUKKyAgICogICAgICAgICAgLSBmaWxlIGNvbnRhaW5pbmcgdGhlIHBhY2thZ2VzL2NsYXNzZXMgdGhhdCBhcmUgdG8gYmUgdmVyaWZpZWQKKyAgICogQHBhcmFtIG1hcEZpbGUKKyAgICogICAgICAgICAgc2lnLXRlc3QubWFwIGZpbGUKKyAgICogQHBhcmFtIHNpZ25hdHVyZVJlcG9zaXRvcnlEaXIKKyAgICogICAgICAgICAgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIHJlY29yZGVkIHNpZ25hdHVyZXMKKyAgICogQHBhcmFtIHBhY2thZ2VPckNsYXNzVW5kZXJUZXN0CisgICAqICAgICAgICAgIHRoZSBjbGFzcyBvciBwYWNrYWdlCisgICAqIEBwYXJhbSBjbGFzc3BhdGgKKyAgICogICAgICAgICAgVGhlIGxvY2F0aW9uIG9mIHRoZSBBUEkgYmVpbmcgdmVyaWZpZWQuIE5vcm1hbGx5IHRoZSBjaGVja2VkIEFQSQorICAgKiAgICAgICAgICB3aWxsIGJlIGF2YWlsYWJsZSBpbiB0aGUgdGVzdCBlbnZpcm9ubWVudCBhbmQgdGVzdENsYXNzcGF0aCB3aWxsCisgICAqICAgICAgICAgIGJlIG51bGwuIEluIHNvbWUgcmFyZSBjYXNlcyB0aGUgdGVzdGVkIEFQSSBtYXkgbm90IGJlIHBhcnQgb2YgdGhlCisgICAqICAgICAgICAgIHRlc3QgZW52aXJvbm1lbnQgYW5kIHdpbGwgaGF2ZSB0byBzcGVjaWZpZWQgdXNpbmcgdGhpcyBwYXJhbWV0ZXIuCisgICAqLworICBwcm90ZWN0ZWQgYWJzdHJhY3QgU3RyaW5nW10gY3JlYXRlVGVzdEFyZ3VtZW50cyhTdHJpbmcgcGFja2FnZUxpc3RGaWxlLAorICAgICAgU3RyaW5nIG1hcEZpbGUsIFN0cmluZyBzaWduYXR1cmVSZXBvc2l0b3J5RGlyLAorICAgICAgU3RyaW5nIHBhY2thZ2VPckNsYXNzVW5kZXJUZXN0LCBTdHJpbmcgY2xhc3NwYXRoLCBib29sZWFuIGJTdGF0aWNNb2RlKQorICAgICAgdGhyb3dzIEV4Y2VwdGlvbjsKKworICAvKioKKyAgICogSW52b2tlIHRoZSB1bmRlcmx5aW5nIHNpZ25hdHVyZSB0ZXN0IGZyYW1ld29yayBmb3IgdGhlIHNwZWNpZmllZCBwYWNrYWdlIG9yCisgICAqIGNsYXNzLgorICAgKgorICAgKiBAcGFyYW0gcGFja2FnZU9yQ2xhc3NOYW1lCisgICAqICAgICAgICAgIHRoZSBwYWNrYWdlIG9yIGNsYXNzIHRvIGJlIHZhbGlkYXRlZAorICAgKiBAcGFyYW0gdGVzdEFyZ3VtZW50cworICAgKiAgICAgICAgICB0aGUgYXJndW1lbnRzIG5lY2Vzc2FyeSB0byBpbnZva2UgdGhlIHNpZ25hdHVyZSB0ZXN0IGZyYW1ld29yaworICAgKgorICAgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSB0ZXN0IHBhc3NlZCwgb3RoZXJ3aXNlIDxjb2RlPmZhbHNlPC9jb2RlPgorICAgKi8KKyAgcHJvdGVjdGVkIGFic3RyYWN0IGJvb2xlYW4gcnVuU2lnbmF0dXJlVGVzdChTdHJpbmcgcGFja2FnZU9yQ2xhc3NOYW1lLAorICAgICAgU3RyaW5nW10gdGVzdEFyZ3VtZW50cykgdGhyb3dzIEV4Y2VwdGlvbjsKKworICAvKioKKyAgICogVGhpcyBjaGVja3MgaWYgYSBjbGFzcyBleGlzdHMgb3Igbm90IHdpdGhpbiB0aGUgaW1wbC4KKyAgICoKKyAgICogQHBhcmFtIHBhY2thZ2VPckNsYXNzTmFtZQorICAgKiAgICAgICAgICB0aGUgcGFja2FnZSBvciBjbGFzcyB0byBiZSB2YWxpZGF0ZWQKKyAgICoKKyAgICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgcGFja2FnZSB3YXMgZm91bmQgdG8gZXhpc3QsIG90aGVyd2lzZQorICAgKiAgICAgICAgIDxjb2RlPmZhbHNlPC9jb2RlPgorICAgKi8KKyAgcHJvdGVjdGVkIGFic3RyYWN0IGJvb2xlYW4gcnVuUGFja2FnZVNlYXJjaChTdHJpbmcgcGFja2FnZU9yQ2xhc3NOYW1lLAorICAgICAgU3RyaW5nW10gdGVzdEFyZ3VtZW50cykgdGhyb3dzIEV4Y2VwdGlvbjsKKworCisgIC8qKgorICAgKiBMb2FkcyB0aGUgc3BlY2lmaWVkIGZpbGUgaW50byBhIFByb3BlcnRpZXMgb2JqZWN0IHByb3ZpZGVkIHRoZSBzcGVjaWZpZWQKKyAgICogZmlsZSBleGlzdHMgYW5kIGlzIGEgcmVndWxhciBmaWxlLiBUaGUgY2FsbCB0byBuZXcgRmlsZUlucHV0U3RyZWFtIHZlcmlmaWVzCisgICAqIHRoYXQgdGhlIHNwZWNmaWVkIGZpbGUgaXMgYSByZWd1bGFyIGZpbGUgYW5kIGV4aXN0cy4KKyAgICoKKyAgICogQHBhcmFtIG1hcEZpbGUKKyAgICogICAgICAgICAgdGhlIHBhdGggYW5kIG5hbWUgb2YgdGhlIG1hcCBmaWxlIHRvIGJlIGxvYWRlZAorICAgKgorICAgKiBAcmV0dXJuIFByb3BlcnRpZXMgVGhlIFByb3BlcnRpZXMgb2JqZWN0IGluaXRpYWxpemVkIHdpdGggdGhlIGNvbnRlbnRzIG9mCisgICAqICAgICAgICAgdGhlIHNwZWNpZmllZCBmaWxlCisgICAqCisgICAqIEB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbgorICAgKiAgICAgICAgICAgSWYgdGhlIHNwZWNpZmllZCBtYXAgZmlsZSBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgYSByZWd1bGFyCisgICAqICAgICAgICAgICBmaWxlLCBjYW4gYWxzbyBiZSB0aHJvd24gaWYgdGhlcmUgaXMgYW4gZXJyb3IgY3JlYXRpbmcgYW4gaW5wdXQKKyAgICogICAgICAgICAgIHN0cmVhbSBmcm9tIHRoZSBzcGVjaWZpZWQgZmlsZS4KKyAgICovCisgIHB1YmxpYyBQcm9wZXJ0aWVzIGxvYWRNYXBGaWxlKFN0cmluZyBtYXBGaWxlKQorICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBGaWxlTm90Rm91bmRFeGNlcHRpb24geworCisgICAgRmlsZUlucHV0U3RyZWFtIGluID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgRmlsZSBtYXAgPSBuZXcgRmlsZShtYXBGaWxlKTsKKyAgICAgIFByb3BlcnRpZXMgcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOworICAgICAgaW4gPSBuZXcgRmlsZUlucHV0U3RyZWFtKG1hcCk7CisgICAgICBwcm9wcy5sb2FkKGluKTsKKyAgICAgIHJldHVybiBwcm9wczsKKyAgICB9IGZpbmFsbHkgeworICAgICAgdHJ5IHsKKyAgICAgICAgaWYgKGluICE9IG51bGwpIHsKKyAgICAgICAgICBpbi5jbG9zZSgpOworICAgICAgICB9CisgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdCkgeworICAgICAgICAvLyBkbyBub3RoaW5nCisgICAgICB9CisgICAgfQorCisgIH0gLy8gRU5EIGxvYWRNYXBGaWxlCisKKyAgLyoqCisgICAqIFRoaXMgbWV0aG9kIHdpbGwgYXR0ZW1wdCB0byBidWlsZCBhIGZ1bGx5LXF1YWxpZmllZCBmaWxlbmFtZSBpbiB0aGUgZm9ybWF0CisgICAqIG9mIDxjb2RlPnJlc3Bvc2l0b3J5RGlyPC9jb2RlPiArIDwvY29kZT5iYXNlTmFtZTwvY29kZT4gKworICAgKiA8Y29kZT4uc2lnXzwvY29kZT4gKyA8L2NvZGU+dmVyc2lvbjwvY29kZT4uCisgICAqCisgICAqIEBwYXJhbSBiYXNlTmFtZQorICAgKiAgICAgICAgICB0aGUgYmFzZSBwb3J0aW9uIG9mIHRoZSBzaWduYXR1cmUgZmlsZW5hbWUKKyAgICogQHBhcmFtIHJlcG9zaXRvcnlEaXIKKyAgICogICAgICAgICAgdGhlIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgc2lnbmF0dXJlcyBhcmUgc3RvcmVkCisgICAqIEBwYXJhbSB2ZXJzaW9uCisgICAqICAgICAgICAgIHRoZSB2ZXJzaW9uIG9mIHRoZSBzaWduYXR1cmUgZmlsZQorICAgKiBAdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbgorICAgKiAgICAgICAgICAgaWYgdGhlIGZpbGUgY2Fubm90IGJlIHZhbGlkYXRlZCBhcyBleGlzdGluZyBhbmQgaXMgaW4gZmFjdCBhIGZpbGUKKyAgICogQHJldHVybiBhIHZhbGlkLCBmdWxseSBxdWFsaWZpZWQgZmlsZW5hbWUsIGFwcHJvcHJpYXRlIGZvciB0aGUgc3lzdGVtIHRoZQorICAgKiAgICAgICAgIHRlc3QgaXMgYmVpbmcgcnVuIG9uCisgICAqLworICBwcm90ZWN0ZWQgU3RyaW5nIGdldFNpZ0ZpbGVOYW1lKFN0cmluZyBiYXNlTmFtZSwgU3RyaW5nIHJlcG9zaXRvcnlEaXIsCisgICAgICBTdHJpbmcgdmVyc2lvbikgdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiB7CisKKyAgICBTdHJpbmcgc2lnRmlsZTsKKyAgICBpZiAocmVwb3NpdG9yeURpci5lbmRzV2l0aChGaWxlLnNlcGFyYXRvcikpIHsKKyAgICAgIHNpZ0ZpbGUgPSByZXBvc2l0b3J5RGlyICsgYmFzZU5hbWUgKyBTSUdfRklMRV9FWFQgKyBTSUdfRklMRV9WRVJfU0VQCisgICAgICAgICAgKyB2ZXJzaW9uOworICAgIH0gZWxzZSB7CisgICAgICBzaWdGaWxlID0gcmVwb3NpdG9yeURpciArIEZpbGUuc2VwYXJhdG9yICsgYmFzZU5hbWUgKyBTSUdfRklMRV9FWFQKKyAgICAgICAgICArIFNJR19GSUxFX1ZFUl9TRVAgKyB2ZXJzaW9uOworICAgIH0KKworICAgIEZpbGUgdGVzdEZpbGUgPSBuZXcgRmlsZShzaWdGaWxlKTsKKworICAgIGlmICghdGVzdEZpbGUuZXhpc3RzKCkgJiYgIXRlc3RGaWxlLmlzRmlsZSgpKSB7CisgICAgICB0aHJvdyBuZXcgRmlsZU5vdEZvdW5kRXhjZXB0aW9uKAorICAgICAgICAgICJTaWduYXR1cmUgZmlsZSBcIiIgKyBzaWdGaWxlICsgIlwiIGRvZXMgbm90IGV4aXN0LiIpOworICAgIH0KKworICAgIC8vIHdlIGFyZSBhY3R1YWxseSByZXF1aXJpbmcgdGhpcyBub3JtYWxpemVGaWxlTmFtZSBjYWxsIHRvIGdldAorICAgIC8vIHRoaW5ncyB3b3JraW5nIG9uIFdpbmRvd3MuIFdpdGhvdXQgdGhpcywgaWYgd2UganVzdCByZXR1cm4gdGhlCisgICAgLy8gdGVzdEZpbGU7IHdlIHdpbGwgZmFpbCBvbiB3aW5kb3dzLiAoU29sYXJpcyB3b3JrcyBlaXRoZXIgd2F5KQorICAgIC8vIElNUE9SVEFOVCBVUERBVEUhISAoNC81LzIwMTEpCisgICAgLy8gaW4gc2lndGVzdCAyLjI6IHRoZXkgc3RvcHBlZCBzdXBwb3J0aW5nIHRoZSBub3JtYWxpemVkIHZlcnNpb24gd2hpY2gKKyAgICAvLyBjcmVhdGVkIGEgc3RyaW5nIGZpbGVuYW1lID0KKyAgICAvLyAiZmlsZTovL2NvbS9zdW4vdHMvdGVzdHMvc2lnbmF0dXJldGVzdC9mb28uc2lnIgorICAgIC8vIHNvIG5vdyB1c2UgZmlsZSBwYXRoIGFuZCBuYW1lIG9ubHkuCisgICAgLy8gcmV0dXJuIG5vcm1hbGl6ZUZpbGVOYW1lKHRlc3RGaWxlKTsKKyAgICByZXR1cm4gdGVzdEZpbGUudG9TdHJpbmcoKTsKKworICB9IC8vIEVORCBnZXRTaWdGaWxlTmFtZQorCisgIHByb3RlY3RlZCBhYnN0cmFjdCBTdHJpbmcgbm9ybWFsaXplRmlsZU5hbWUoRmlsZSBmKTsKKworICAvKioKKyAgICogUmV0dXJucyB0aGUgbmFtZSBhbmQgcGF0aCB0byB0aGUgc2lnbmF0dXJlIGZpbGUgdGhhdCBjb250YWlucyB0aGUgc3BlY2lmaWVkCisgICAqIHBhY2thZ2UncyBzaWduYXR1cmVzLgorICAgKgorICAgKiBAcGFyYW0gcGFja2FnZU5hbWUKKyAgICogICAgICAgICAgVGhlIHBhY2thZ2UgdW5kZXIgdGVzdAorICAgKiBAcGFyYW0gbWFwRmlsZQorICAgKiAgICAgICAgICBUaGUgbmFtZSBvZiB0aGUgZmlsZSB0aGF0IG1hcHMgcGFja2FnZSBuYW1lcyB0byB2ZXJzaW9ucworICAgKiBAcGFyYW0gcmVwb3NpdG9yeURpcgorICAgKiAgICAgICAgICBUaGUgZGlyZWN0b3J5IHRoYXQgY29uYXRpc24gYWxsIHNpZ25hdHVyZSBmaWxlcworICAgKgorICAgKiBAcmV0dXJuIFN0cmluZyBUaGUgcGF0aCBhbmQgbmFtZSBvZiB0aGUgc2lnYW50dXJlIGZpbGUgdGhhdCBjb250YWlucyB0aGUKKyAgICogICAgICAgICBzcGVjaWZpZWQgcGFja2FnZSdzIHNpZ25hdHVyZXMKKyAgICoKKyAgICogQHRocm93cyBFeGNlcHRpb24KKyAgICogICAgICAgICAgIGlmIHRoZSBkZXRlcm1pbmVkIHNpZ25hdHVyZSBmaWxlIGlzIG5vdCBhIHJlZ3VsYXIgZmlsZSBvciBkb2VzCisgICAqICAgICAgICAgICBub3QgZXhpc3QKKyAgICovCisgIHByb3RlY3RlZCBTaWduYXR1cmVGaWxlSW5mbyBnZXRTaWdGaWxlSW5mbyhTdHJpbmcgcGFja2FnZU5hbWUsIFN0cmluZyBtYXBGaWxlLAorICAgICAgU3RyaW5nIHJlcG9zaXRvcnlEaXIpIHRocm93cyBFeGNlcHRpb24geworCisgICAgU3RyaW5nIG9yaWdpbmFsUGFja2FnZSA9IHBhY2thZ2VOYW1lOworICAgIFN0cmluZyBuYW1lID0gbnVsbDsKKyAgICBTdHJpbmcgdmVyc2lvbiA9IG51bGw7CisgICAgUHJvcGVydGllcyBwcm9wcyA9IGxvYWRNYXBGaWxlKG1hcEZpbGUpOworCisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgIGJvb2xlYW4gcGFja2FnZUZvdW5kID0gZmFsc2U7CisgICAgICBmb3IgKEVudW1lcmF0aW9uPD8+IGUgPSBwcm9wcy5wcm9wZXJ0eU5hbWVzKCk7IGUuaGFzTW9yZUVsZW1lbnRzKCk7KSB7CisgICAgICAgIG5hbWUgPSAoU3RyaW5nKSAoZS5uZXh0RWxlbWVudCgpKTsKKyAgICAgICAgaWYgKG5hbWUuZXF1YWxzKHBhY2thZ2VOYW1lKSkgeworICAgICAgICAgIHZlcnNpb24gPSBwcm9wcy5nZXRQcm9wZXJ0eShuYW1lKTsKKyAgICAgICAgICBwYWNrYWdlRm91bmQgPSB0cnVlOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9IC8vIGVuZCBpZgorICAgICAgfSAvLyBlbmQgZm9yCisKKyAgICAgIGlmIChwYWNrYWdlRm91bmQpIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIC8qCisgICAgICAgKiBJZiB3ZSBnZXQgaGVyZSB3ZSBkaWQgbm90IGZpbmQgYSBwYWNrYWdlIG5hbWUgaW4gdGhlIHByb3BlcnRpZXMgZmlsZQorICAgICAgICogdGhhdCBtYXRjaGVzIHRoZSBwYWNrYWdlIG5hbWUgdW5kZXIgdGVzdC4gU28gd2UgbG9vayBmb3IgYSBwYWNrYWdlIG5hbWUKKyAgICAgICAqIGluIHRoZSBwcm9wZXJ0aWVzIGZpbGUgdGhhdCBjb3VsZCBiZSB0aGUgcGFyZW50IHBhY2thZ2UgZm9yIHRoZSBwYWNrYWdlCisgICAgICAgKiB1bmRlciB0ZXN0LiBXZSBkbyB0aGlzIGJ5IHJlbW92aW5nIHRoZSBzcGVjaWZpZWQgcGFja2FnZXMgbGFzdCBwYWNrYWdlCisgICAgICAgKiBuYW1lIHNlY3Rpb24uIFNvIGpha2FydGEuZWpiLnNwaSB3b3VsZCBiZWNvbWUgamFrYXJ0YS5lamIKKyAgICAgICAqLworICAgICAgaW50IGluZGV4ID0gcGFja2FnZU5hbWUubGFzdEluZGV4T2YoIi4iKTsKKyAgICAgIGlmIChpbmRleCA8PSAwKSB7CisgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlBhY2thZ2UgXCIiICsgb3JpZ2luYWxQYWNrYWdlCisgICAgICAgICAgICArICJcIiBub3Qgc3BlY2lmaWVkIGluIG1hcHBpbmcgZmlsZSBcIiIgKyBtYXBGaWxlICsgIlwiLiIpOworICAgICAgfQorICAgICAgcGFja2FnZU5hbWUgPSBwYWNrYWdlTmFtZS5zdWJzdHJpbmcoMCwgaW5kZXgpOworICAgIH0gLy8gZW5kIHdoaWxlCisKKyAgICAvKiBSZXR1cm4gdGhlIGV4cGVjdGVkIG5hbWUgb2YgdGhlIHNpZ25hdHVyZSBmaWxlICovCisKKyAgICByZXR1cm4gbmV3IFNpZ25hdHVyZUZpbGVJbmZvKGdldFNpZ0ZpbGVOYW1lKG5hbWUsIHJlcG9zaXRvcnlEaXIsIHZlcnNpb24pLAorICAgICAgICB2ZXJzaW9uKTsKKworICB9IC8vIEVORCBnZXRTaWdGaWxlSW5mbworCisgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQcml2YXRlIE1ldGhvZHMKKworICAvKgorICAgKiBUaGlzIHJldHVybnMgdHJ1ZSBpcyB0aGUgcGFzc2VkIGluIHBhY2thZ2VOYW1lIG1hdGNoZXMgb25lIG9mIHRoZSBwYWNrYWdlcworICAgKiB0aGF0IGFyZSBsaXN0ZWQgaW4gdGhlIGFycmF5T3B0aW9uYWxQa2dzVG9JZ25vcmUuIGFycmF5T3B0aW9uYWxQa2dzVG9JZ25vcmUKKyAgICogaXMgdWx0aW1hdGVseSBkZWZpbmVkIGluIHRoZSB0cy5qdGUgcHJvcGVydHkKKyAgICogJ29wdGlvbmFsLnRlY2gucGFja2FnZXMudG8uaWdub3JlJyBJZiBvbmUgb2YgdGhlIGVudHJpZXMgaW4KKyAgICogYXJyYXlPcHRpb25hbFBrZ3NUb0lnbm9yZSBtYXRjaGVzIHRoZSBwYWNrYWdlTmFtZSB0aGVuIHRoYXQgbWVhbnMgd2UgcmV0dXJuCisgICAqIFRSVUUgdG8gaW5kaWNhdGUgd2Ugc2hvdWxkIGlnbm9yZSBhbmQgTk9UIFRFU1QgdGhhdCBwYXJ0aWN1bGFyIHBhY2thZ2UuCisgICAqLworICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSWdub3JlUGFja2FnZVVuZGVyVGVzdChTdHJpbmcgcGFja2FnZU5hbWUsCisgICAgICBTdHJpbmdbXSBhcnJheU9wdGlvbmFsUGtnc1RvSWdub3JlKSB7CisKKyAgICAvLyBpZiBhbnl0aGluZyBpcyBudWxsIC0gY29uc2lkZXIgbm8gbWF0Y2gKKyAgICBpZiAoKHBhY2thZ2VOYW1lID09IG51bGwpIHx8IChhcnJheU9wdGlvbmFsUGtnc1RvSWdub3JlID09IG51bGwpKSB7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZm9yIChpbnQgaWkgPSAwOyBpaSA8IGFycmF5T3B0aW9uYWxQa2dzVG9JZ25vcmUubGVuZ3RoOyBpaSsrKSB7CisgICAgICBpZiAocGFja2FnZU5hbWUuZXF1YWxzKGFycmF5T3B0aW9uYWxQa2dzVG9JZ25vcmVbaWldKSkgeworICAgICAgICAvLyB3ZSBmb3VuZCBhIG1hdGNoIC0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgLyoqCisgICAqIFByaW50cyB0aGUgc3BlY2lmaWVkIGxpc3Qgb2YgcGFyYW1ldGVycyB0byB0aGUgbWVzc2FnZSBsb2cuIFVzZWQgZm9yCisgICAqIGRlYnVnZ2luZyBwdXJwb3NlcyBvbmx5LgorICAgKgorICAgKiBAcGFyYW0gcGFyYW1zCisgICAqICAgICAgICAgIFRoZSBsaXN0IG9mIHBhcmFtZXRlcnMgdG8gZHVtcC4KKyAgICovCisgIHByaXZhdGUgc3RhdGljIHZvaWQgZHVtcFRlc3RBcmd1bWVudHMoU3RyaW5nW10gcGFyYW1zKSB7CisKKyAgICBpZiAocGFyYW1zICE9IG51bGwgJiYgcGFyYW1zLmxlbmd0aCA+IDApIHsKKyAgICAgIGxvZ2dlci5sb2coTG9nZ2VyLkxldmVsLlRSQUNFLCAiLS0tLS0tLS0tLS0tLS0tLS0gQkVHSU4gU0lHIFBBUkFNIERVTVAgLS0tLS0tLS0tLS0tLS0tLS0iKTsKKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIGxvZ2dlci5sb2coTG9nZ2VyLkxldmVsLlRSQUNFLCIgICBQYXJhbVsiICsgaSArICJdOiAiICsgcGFyYW1zW2ldKTsKKyAgICAgIH0KKyAgICAgIGxvZ2dlci5sb2coTG9nZ2VyLkxldmVsLlRSQUNFLCAiLS0tLS0tLS0tLS0tLS0tLS0tIEVORCBTSUcgUEFSQU0gRFVNUCAtLS0tLS0tLS0tLS0tLS0tLS0iKTsKKyAgICB9CisKKyAgfSAvLyBFTkQgZHVtcFRlc3RBcmd1bWVudHMKKworICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBJbm5lciBDbGFzc2VzCisKKyAgLyoqCisgICAqIEEgc2ltcGxlIGRhdGEgc3RydWN0dXJlIGNvbnRhaW5pbmcgdGhlIGZ1bGx5IHF1YWxpZmllZCBwYXRoIHRvIHRoZQorICAgKiBzaWduYXR1cmUgZmlsZSBhcyB3ZWxsIGFzIHRoZSB2ZXJzaW9uIGJlaW5nIHRlc3RlZC4KKyAgICovCisgIHByb3RlY3RlZCBzdGF0aWMgY2xhc3MgU2lnbmF0dXJlRmlsZUluZm8geworCisgICAgcHJpdmF0ZSBTdHJpbmcgZmlsZTsKKworICAgIHByaXZhdGUgU3RyaW5nIHZlcnNpb247CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDb25zdHJ1Y3RvcnMKKworICAgIHB1YmxpYyBTaWduYXR1cmVGaWxlSW5mbyhTdHJpbmcgZmlsZSwgU3RyaW5nIHZlcnNpb24pIHsKKworICAgICAgaWYgKGZpbGUgPT0gbnVsbCkgeworICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCInZmlsZScgYXJndW1lbnQgY2Fubm90IGJlIG51bGwiKTsKKyAgICAgIH0KKworICAgICAgaWYgKHZlcnNpb24gPT0gbnVsbCkgeworICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCIndmVyc2lvbicgYXJndW1lbnQgY2Fubm90IGJlIG51bGwiKTsKKyAgICAgIH0KKworICAgICAgdGhpcy5maWxlID0gZmlsZTsKKyAgICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb247CisKKyAgICB9IC8vIEVORCBTaWduYXR1cmVGaWxlSW5mbworCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFB1YmxpYyBNZXRob2RzCisKKyAgICBwdWJsaWMgU3RyaW5nIGdldEZpbGUoKSB7CisKKyAgICAgIHJldHVybiBmaWxlOworCisgICAgfSAvLyBFTkQgZ2V0RmlsZUluY2x1ZGluZ1BhdGgKKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0VmVyc2lvbigpIHsKKworICAgICAgcmV0dXJuIHZlcnNpb247CisKKyAgICB9IC8vIEVORCBnZXRWZXJzaW9uCisKKyAgfQorCit9IC8vIEVORCBTaWdUZXN0RHJpdmVyCmRpZmYgLS1naXQgYS90Y2svc3JjL21haW4vamF2YS9lZS9qYWthcnRhL3Rjay9hbm5vdGF0aW9ucy9zaWduYXR1cmV0ZXN0L1NpZ25hdHVyZVRlc3REcml2ZXJGYWN0b3J5LmphdmEgYi90Y2svc3JjL21haW4vamF2YS9lZS9qYWthcnRhL3Rjay9hbm5vdGF0aW9ucy9zaWduYXR1cmV0ZXN0L1NpZ25hdHVyZVRlc3REcml2ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA4ZGRhYQotLS0gL2Rldi9udWxsCisrKyBiL3Rjay9zcmMvbWFpbi9qYXZhL2VlL2pha2FydGEvdGNrL2Fubm90YXRpb25zL3NpZ25hdHVyZXRlc3QvU2lnbmF0dXJlVGVzdERyaXZlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDE4IE9yYWNsZSBhbmQvb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCisgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2LiAyLjAsIHdoaWNoIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLgorICoKKyAqIFRoaXMgU291cmNlIENvZGUgbWF5IGFsc28gYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIGZvbGxvd2luZyBTZWNvbmRhcnkKKyAqIExpY2Vuc2VzIHdoZW4gdGhlIGNvbmRpdGlvbnMgZm9yIHN1Y2ggYXZhaWxhYmlsaXR5IHNldCBmb3J0aCBpbiB0aGUKKyAqIEVjbGlwc2UgUHVibGljIExpY2Vuc2Ugdi4gMi4wIGFyZSBzYXRpc2ZpZWQ6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyIHdpdGggdGhlIEdOVSBDbGFzc3BhdGggRXhjZXB0aW9uLCB3aGljaCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHBzOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvY2xhc3NwYXRoL2xpY2Vuc2UuaHRtbC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKKyAqLworCisvKgorICogJElkJAorICovCisKK3BhY2thZ2UgZWUuamFrYXJ0YS50Y2suYW5ub3RhdGlvbnMuc2lnbmF0dXJldGVzdDsKKworLyoqCisgKiA8cD4KKyAqIEZhY3RvcnkgdG8gb2J0YWluIFNpZ25hdHVyZVRlc3REcml2ZXIgaW1wbGVtZW50YXRpb25zLgorICogPC9wPgorICovCitwdWJsaWMgY2xhc3MgU2lnbmF0dXJlVGVzdERyaXZlckZhY3RvcnkgeworCisgIC8qKgorICAgKiA8cD4KKyAgICogSWRlbnRpZmllciBmb3IgdGhlIGRyaXZlciB0aGF0IHVzZXMgQVBJIENoZWNrIHRvIHBlcmZvcm0gc2lnbmF0dXJlCisgICAqIHZhbGlkYXRpb24uCisgICAqIDwvcD4KKyAgICovCisgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFQSV9DSEVDSyA9ICJhcGljaGVjayI7CisKKyAgLyoqCisgICAqIDxwPgorICAgKiBJZGVudGlmaWVyIGZvciB0aGUgZHJpdmVyIHRoYXQgdXNlcyB0aGUgU2lnbmF0dXJlIFRlc3QgZnJhbXdvcmsgZm9yCisgICAqIHNpZ25hdHVyZSB2YWxpZGF0aW9uLgorICAgKiA8L3A+CisgICAqLworICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTSUdfVEVTVCA9ICJzaWd0ZXN0IjsKKworICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ29uc3RydWN0b3JzCisKKyAgLy8gQWNjZXNzIHZpYSBmYWN0b3J5IG1ldGhvZAorICBwcml2YXRlIFNpZ25hdHVyZVRlc3REcml2ZXJGYWN0b3J5KCkgeworICB9IC8vIEVORCBTaWduYXR1cmVUZXN0RHJpdmVyRmFjdG9yeQorCisgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUHVibGljIE1ldGhvZHMKKworICAvKioKKyAgICogPHA+CisgICAqIE9idGFpbiBhIHtAbGluayBTaWduYXR1cmVUZXN0RHJpdmVyfSBpbnN0YW5jZSBiYXNlZCBvbiB0aGUKKyAgICogPGNvZGU+dHlwZTwvY29kZT4gYXJndW1lbnQuCisgICAqCisgICAqIEBwYXJhbSB0eXBlCisgICAqICAgICAgICAgIHRoZSBkcml2ZXIgdHlwZSB0byBjcmVhdGUKKyAgICogQHJldHVybiBhIHtAbGluayBTaWduYXR1cmVUZXN0RHJpdmVyfSBpbXBsZW1lbnRhdGlvbgorICAgKi8KKyAgcHVibGljIHN0YXRpYyBTaWduYXR1cmVUZXN0RHJpdmVyIGdldEluc3RhbmNlKFN0cmluZyB0eXBlKSB7CisKKyAgICBpZiAodHlwZSA9PSBudWxsIHx8IHR5cGUubGVuZ3RoKCkgPT0gMCkgeworICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVHlwZSB3YXMgbnVsbCBvciBlbXB0eSIpOworICAgIH0KKworICAgIGlmIChTSUdfVEVTVC5lcXVhbHModHlwZSkpIHsKKyAgICAgIHJldHVybiBuZXcgU2lnVGVzdERyaXZlcigpOworICAgIH0gZWxzZSB7CisgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJVbmtub3duIFR5cGU6ICciICsgdHlwZSArICdcJycpOworICAgIH0KKworICB9IC8vIEVORCBnZXRJbnN0YW5jZQorCit9IC8vIEVORCBTaWduYXR1cmVUZXN0RHJpdmVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvdGNrL3NyYy9tYWluL3Jlc291cmNlcy9MSUNFTlNFX0VGVEwubWQgYi90Y2svc3JjL21haW4vcmVzb3VyY2VzL0xJQ0VOU0VfRUZUTC5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjEwNjgyCi0tLSAvZGV2L251bGwKKysrIGIvdGNrL3NyYy9tYWluL3Jlc291cmNlcy9MSUNFTlNFX0VGVEwubWQKQEAgLTAsMCArMSw4MyBAQAorIyBFY2xpcHNlIEZvdW5kYXRpb24gVGVjaG5vbG9neSBDb21wYXRpYmlsaXR5IEtpdCBMaWNlbnNlIC0gdiAxLjAKKworQ29weXJpZ2h0IChjKSAyMDE4LCBFY2xpcHNlIEZvdW5kYXRpb24sIEluYy4gYW5kIGl0cyBsaWNlbnNvcnMuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gYmluYXJ5IGZvcm0gaXMgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlCitmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisxLiAgVXNlIG9mIHRoZSBUZWNobm9sb2d5IENvbXBhdGliaWxpdHkgS2l0IGFjY29tcGFueWluZyB0aGlzIGxpY2Vuc2UKKyAgICAodGhlICJUQ0siKSBhbmQgaXRzIGRvY3VtZW50YXRpb24gaXMgcGVybWl0dGVkIHNvbGVseSBmb3IgdGhlCisgICAgcHVycG9zZSBvZiB0ZXN0aW5nIGNvbXBhdGliaWxpdHkgb2YgYW4gaW1wbGVtZW50YXRpb24gKHRoZQorICAgICJQcm9kdWN0Iikgb2YgYSBzcGVjaWZpY2F0aW9uICh0aGUgIlNwZWNpZmljYXRpb24iKSBtYWRlIGF2YWlsYWJsZQorICAgIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIEluYy4gKCJFY2xpcHNlIikuCisKKzIuICBPbmx5IHRob3NlIG1vZGlmaWNhdGlvbnMgZXhwcmVzc2x5IHBlcm1pdHRlZCBieSB0aGUgVENLIGFuZCBpdHMKKyAgICBkb2N1bWVudGF0aW9uIGFyZSBwZXJtaXR0ZWQuIEV4Y2VwdCBpbiB0aGVzZSBsaW1pdGVkIGNpcmN1bXN0YW5jZXMsCisgICAgbm8gbW9kaWZpY2F0aW9ucyB0byB0aGUgVENLIGFyZSBwZXJtaXR0ZWQgdW5kZXIgdGhpcyBsaWNlbnNlLgorCiszLiAgQSBQcm9kdWN0IHdpbGwgYmUgZGVlbWVkIHRvIGJlICJjb21wYXRpYmxlIiB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uCisgICAgaWYgaXQgZnVsbHkgYW5kIGNvbXBsZXRlbHkgbWVldHMgYW5kIHNhdGlzZmllcyBhbGwgcmVxdWlyZW1lbnRzIG9mCisgICAgdGhlIFRDSy4KKworNC4gIEJlZm9yZSBhbnkgY2xhaW0gb2YgY29tcGF0aWJpbGl0eSAob3IgYW55IHNpbWlsYXIgY2xhaW0gc3VnZ2VzdGluZworICAgIGNvbXBhdGliaWxpdHkpIGlzIG1hZGUgYmFzZWQgb24gdGhlIFRDSywgdGhlIHRlc3RpbmcgcGFydHkgbXVzdDoKKworICAgIGEuICB1c2UgdGhlIFRDSyB0byBkZW1vbnN0cmF0ZSB0aGF0IHRoZSBQcm9kdWN0IGZ1bGx5IGFuZAorCWNvbXBsZXRlbHkgbWVldHMgYW5kIHNhdGlzZmllcyBhbGwgcmVxdWlyZW1lbnRzIG9mIHRoZSBUQ0s7CisKKyAgICBiLiAgbWFrZSBUQ0sgdGVzdCByZXN1bHRzIHNob3dpbmcgZnVsbCBhbmQgY29tcGxldGUgc2F0aXNmYWN0aW9uIG9mCisJYWxsIHJlcXVpcmVtZW50cyBvZiB0aGUgVENLIHB1YmxpY2x5IGF2YWlsYWJsZSBvbiB0aGUgdGVzdGluZworCXBhcnR5J3Mgd2Vic2l0ZSBhbmQgc2VuZCBhIGxpbmsgdG8gc3VjaCB0ZXN0IHJlc3VsdHMgdG8gRWNsaXBzZQorCWF0IFt0Y2tAZWNsaXBzZS5vcmddKG1haWx0bzp0Y2tAZWNsaXBzZS5vcmcpOyBhbmQKKworICAgIGMuICBjb21wbHkgd2l0aCBhbnkgcmVxdWlyZW1lbnRzIHN0YXRlZCBpbiB0aGUgU3BlY2lmaWNhdGlvbiB3aXRoCisJcmVnYXJkIHRvIHN1YnNldHRpbmcsIHN1cGVyc2V0dGluZywgbW9kaWZ5aW5nIG9yIGV4dGVuZGluZyB0aGUKKwlTcGVjaWZpY2F0aW9uIGluIGFueSBQcm9kdWN0IGNsYWltZWQgdG8gYmUgY29tcGF0aWJsZSB3aXRoIHRoZQorCVNwZWNpZmljYXRpb24uCisKKzUuICBUaGUgdGVzdCByZXN1bHRzIG11c3QgYmUgY29udGludW91c2x5IGF2YWlsYWJsZSBhbmQgdGhlIGxpbmsgbXVzdAorICAgIGJlIGxpdmUgZm9yIGF0IGxlYXN0IGFzIGxvbmcgYXMgdGhlIFByb2R1Y3QgaXMgYXZhaWxhYmxlIGluIHRoZQorICAgIG1hcmtldHBsYWNlLgorCis2LiAgVGhlIFRDSyBtYXkgbm90IGJlIHVzZWQgYXMgYSBiYXNpcyBmb3IgYW55IHN0YXRlbWVudHMgb2YgcGFydGlhbAorICAgIGNvbXBhdGliaWxpdHkuIFRoZSBUQ0sgbWF5IG9ubHkgYmUgdXNlZCBhcyBhIGJhc2lzIGZvciB0cnVlLAorICAgIGZhY3R1YWwgc3RhdGVtZW50cyBvZiBmdWxsIGNvbXBhdGliaWxpdHkgb2YgUHJvZHVjdHMgdGhhdCBmdWxseQorICAgIG1lZXQgYW5kIHNhdGlzZnkgYWxsIHJlcXVpcmVtZW50cyBvZiB0aGUgVENLLgorCis3LiAgQSBkZXRlcm1pbmF0aW9uIHRoYXQgYSBQcm9kdWN0IGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgVENLIGRvZXMgbm90LAorICAgIGluIGl0c2VsZiwgZ2l2ZSByaXNlIHRvIHRoZSByaWdodCB0byB1c2UgYW55IG5hbWUsIG1hcmssIGxvZ28KKyAgICBhc3NvY2lhdGVkIHdpdGggdGhlIFRDSywgRWNsaXBzZSwgb3IgRWNsaXBzZSdzIGNvbnRyaWJ1dG9ycyBvcgorICAgIGxpY2Vuc29ycy4KKworOC4gIFVwb24gdGhlIHJlcXVlc3Qgb2YgRWNsaXBzZSwgYSB0ZXN0ZXIgd2lsbCByZXRyYWN0IGFueSBzdGF0ZW1lbnRzCisgICAgb2YgY29tcGF0aWJpbGl0eSAob3IgYW55IHNpbWlsYXIgY2xhaW0gc3VnZ2VzdGluZyBjb21wYXRpYmlsaXR5KQorICAgIHdoaWNoIEVjbGlwc2UgcmVhc29uYWJseSBkZXRlcm1pbmVzIHRvIGJlIGZhbHNlIG9yIG1pc2xlYWRpbmcgb3IgaW4KKyAgICB2aW9sYXRpb24gb2YgdGhlIHRlcm1zIG9mIHRoaXMgbGljZW5zZS4KKworOS4gIFJlZGlzdHJpYnV0aW9uIG9mIHRoZSBUQ0sgbXVzdCBiZSB1bmRlciB0aGlzIEVjbGlwc2UgRm91bmRhdGlvbgorICAgIFRlY2hub2xvZ3kgQ29tcGF0aWJpbGl0eSBLaXQgTGljZW5zZSBhbmQgbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKzEwLiBOZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzIG9yIGxvZ29zIG9mIEVjbGlwc2UsIG5vciB0aGUgbmFtZXMsCisgICAgdHJhZGVtYXJrcyBvciBsb2dvcyBvZiBpdHMgY29udHJpYnV0b3JzIG9yIGxpY2Vuc29ycyBtYXkgYmUgdXNlZCB0bworICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyB0ZXN0ZWQgd2l0aCB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKzExLiBUaGUgc291cmNlIGNvZGUgZm9yIHRoZSBUQ0sgYWNjb21wYW55aW5nIHRoaXMgbGljZW5zZSBpcyBhdmFpbGFibGUKKyAgICBmcm9tIEVjbGlwc2UuCisKK1RPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLCBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIE9OCitBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSCitFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SCitDT05ESVRJT05TIE9GIFRJVExFLCBOT04tIElORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SCitBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcsCitORUlUSEVSIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWQorTElBQklMSVRZIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCitTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcKK0lOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIE9SIFRIRQorRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgpkaWZmIC0tZ2l0IGEvdGNrL3NyYy9tYWluL3Jlc291cmNlcy9MSUNFTlNFX0VQTC5tZCBiL3Rjay9zcmMvbWFpbi9yZXNvdXJjZXMvTElDRU5TRV9FUEwubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ0MjhlZAotLS0gL2Rldi9udWxsCisrKyBiL3Rjay9zcmMvbWFpbi9yZXNvdXJjZXMvTElDRU5TRV9FUEwubWQKQEAgLTAsMCArMSw2MzcgQEAKKyMgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIHYgMi4wCisKKyAgICAgICAgVEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIEVDTElQU0UKKyAgICAgICAgUFVCTElDIExJQ0VOU0UgKCJBR1JFRU1FTlQiKS4gQU5ZIFVTRSwgUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTgorICAgICAgICBPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBSRUNJUElFTlQnUyBBQ0NFUFRBTkNFIE9GIFRISVMgQUdSRUVNRU5ULgorCisgICAgMS4gREVGSU5JVElPTlMKKworICAgICJDb250cmlidXRpb24iIG1lYW5zOgorCisgICAgICBhKSBpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29udGVudAorICAgICAgICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZAorCisgICAgICBiKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6IAorICAgICAgICAgaSkgY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kIAorICAgICAgICAgaWkpIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTsKKyAgICAgIHdoZXJlIHN1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tCisgICAgICBhbmQgYXJlIERpc3RyaWJ1dGVkIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24KKyAgICAgICJvcmlnaW5hdGVzIiBmcm9tIGEgQ29udHJpYnV0b3IgaWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5CisgICAgICBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uIHN1Y2ggQ29udHJpYnV0b3IncyBiZWhhbGYuCisgICAgICBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGNoYW5nZXMgb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIHRoYXQKKyAgICAgIGFyZSBub3QgTW9kaWZpZWQgV29ya3MuCisKKyAgICAiQ29udHJpYnV0b3IiIG1lYW5zIGFueSBwZXJzb24gb3IgZW50aXR5IHRoYXQgRGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uCisKKyAgICAiTGljZW5zZWQgUGF0ZW50cyIgbWVhbiBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaAorICAgIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZSBvciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUKKyAgICBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uCisKKyAgICAiUHJvZ3JhbSIgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMgRGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMKKyAgICBBZ3JlZW1lbnQuCisKKyAgICAiUmVjaXBpZW50IiBtZWFucyBhbnlvbmUgd2hvIHJlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50CisgICAgb3IgYW55IFNlY29uZGFyeSBMaWNlbnNlIChhcyBhcHBsaWNhYmxlKSwgaW5jbHVkaW5nIENvbnRyaWJ1dG9ycy4KKworICAgICJEZXJpdmF0aXZlIFdvcmtzIiBzaGFsbCBtZWFuIGFueSB3b3JrLCB3aGV0aGVyIGluIFNvdXJjZSBDb2RlIG9yIG90aGVyCisgICAgZm9ybSwgdGhhdCBpcyBiYXNlZCBvbiAob3IgZGVyaXZlZCBmcm9tKSB0aGUgUHJvZ3JhbSBhbmQgZm9yIHdoaWNoIHRoZQorICAgIGVkaXRvcmlhbCByZXZpc2lvbnMsIGFubm90YXRpb25zLCBlbGFib3JhdGlvbnMsIG9yIG90aGVyIG1vZGlmaWNhdGlvbnMKKyAgICByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4KKworICAgICJNb2RpZmllZCBXb3JrcyIgc2hhbGwgbWVhbiBhbnkgd29yayBpbiBTb3VyY2UgQ29kZSBvciBvdGhlciBmb3JtIHRoYXQKKyAgICByZXN1bHRzIGZyb20gYW4gYWRkaXRpb24gdG8sIGRlbGV0aW9uIGZyb20sIG9yIG1vZGlmaWNhdGlvbiBvZiB0aGUKKyAgICBjb250ZW50cyBvZiB0aGUgUHJvZ3JhbSwgaW5jbHVkaW5nLCBmb3IgcHVycG9zZXMgb2YgY2xhcml0eSBhbnkgbmV3IGZpbGUKKyAgICBpbiBTb3VyY2UgQ29kZSBmb3JtIHRoYXQgY29udGFpbnMgYW55IGNvbnRlbnRzIG9mIHRoZSBQcm9ncmFtLiBNb2RpZmllZAorICAgIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgY29udGFpbiBvbmx5IGRlY2xhcmF0aW9ucywKKyAgICBpbnRlcmZhY2VzLCB0eXBlcywgY2xhc3Nlcywgc3RydWN0dXJlcywgb3IgZmlsZXMgb2YgdGhlIFByb2dyYW0gc29sZWx5CisgICAgaW4gZWFjaCBjYXNlIGluIG9yZGVyIHRvIGxpbmsgdG8sIGJpbmQgYnkgbmFtZSwgb3Igc3ViY2xhc3MgdGhlIFByb2dyYW0KKyAgICBvciBNb2RpZmllZCBXb3JrcyB0aGVyZW9mLgorCisgICAgIkRpc3RyaWJ1dGUiIG1lYW5zIHRoZSBhY3RzIG9mIGEpIGRpc3RyaWJ1dGluZyBvciBiKSBtYWtpbmcgYXZhaWxhYmxlCisgICAgaW4gYW55IG1hbm5lciB0aGF0IGVuYWJsZXMgdGhlIHRyYW5zZmVyIG9mIGEgY29weS4KKworICAgICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlIGZvcm0gb2YgYSBQcm9ncmFtIHByZWZlcnJlZCBmb3IgbWFraW5nCisgICAgbW9kaWZpY2F0aW9ucywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBzb3VyY2UgY29kZSwKKyAgICBkb2N1bWVudGF0aW9uIHNvdXJjZSwgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisKKyAgICAiU2Vjb25kYXJ5IExpY2Vuc2UiIG1lYW5zIGVpdGhlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgICAgVmVyc2lvbiAyLjAsIG9yIGFueSBsYXRlciB2ZXJzaW9ucyBvZiB0aGF0IGxpY2Vuc2UsIGluY2x1ZGluZyBhbnkKKyAgICBleGNlcHRpb25zIG9yIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgYXMgaWRlbnRpZmllZCBieSB0aGUgaW5pdGlhbAorICAgIENvbnRyaWJ1dG9yLgorCisgICAgMi4gR1JBTlQgT0YgUklHSFRTCisKKyAgICAgIGEpIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieQorICAgICAgZ3JhbnRzIFJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodAorICAgICAgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgRGVyaXZhdGl2ZSBXb3JrcyBvZiwgcHVibGljbHkgZGlzcGxheSwKKyAgICAgIHB1YmxpY2x5IHBlcmZvcm0sIERpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCisgICAgICBDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzLgorCisgICAgICBiKSBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkKKyAgICAgIGdyYW50cyBSZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBwYXRlbnQKKyAgICAgIGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsCisgICAgICBpbXBvcnQgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsCisgICAgICBpZiBhbnksIGluIFNvdXJjZSBDb2RlIG9yIG90aGVyIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwKKyAgICAgIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQKKyAgICAgIHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQgYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uCisgICAgICBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uIHRvIGJlIGNvdmVyZWQgYnkgdGhlCisgICAgICBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvIGFueSBvdGhlcgorICAgICAgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzCisgICAgICBsaWNlbnNlZCBoZXJldW5kZXIuCisKKyAgICAgIGMpIFJlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZQorICAgICAgbGljZW5zZXMgdG8gaXRzIENvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUKKyAgICAgIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvciB0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZQorICAgICAgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4KKyAgICAgIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50IGZvciBjbGFpbXMKKyAgICAgIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsCisgICAgICBwcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZQorICAgICAgcmlnaHRzIGFuZCBsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5CisgICAgICBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkgdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwKKyAgICAgIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsIGlmIGEgdGhpcmQgcGFydHkKKyAgICAgIHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBEaXN0cmlidXRlIHRoZQorICAgICAgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UKKyAgICAgIGJlZm9yZSBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uCisKKyAgICAgIGQpIEVhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzCisgICAgICBzdWZmaWNpZW50IGNvcHlyaWdodCByaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudAorICAgICAgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbiB0aGlzIEFncmVlbWVudC4KKworICAgICAgZSkgTm90d2l0aHN0YW5kaW5nIHRoZSB0ZXJtcyBvZiBhbnkgU2Vjb25kYXJ5IExpY2Vuc2UsIG5vCisgICAgICBDb250cmlidXRvciBtYWtlcyBhZGRpdGlvbmFsIGdyYW50cyB0byBhbnkgUmVjaXBpZW50IChvdGhlciB0aGFuCisgICAgICB0aG9zZSBzZXQgZm9ydGggaW4gdGhpcyBBZ3JlZW1lbnQpIGFzIGEgcmVzdWx0IG9mIHN1Y2ggUmVjaXBpZW50J3MKKyAgICAgIHJlY2VpcHQgb2YgdGhlIFByb2dyYW0gdW5kZXIgdGhlIHRlcm1zIG9mIGEgU2Vjb25kYXJ5IExpY2Vuc2UKKyAgICAgIChpZiBwZXJtaXR0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMykuCisKKyAgICAzLiBSRVFVSVJFTUVOVFMKKworICAgIDMuMSBJZiBhIENvbnRyaWJ1dG9yIERpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtIGluIGFueSBmb3JtLCB0aGVuOgorCisgICAgICBhKSB0aGUgUHJvZ3JhbSBtdXN0IGFsc28gYmUgbWFkZSBhdmFpbGFibGUgYXMgU291cmNlIENvZGUsIGluCisgICAgICBhY2NvcmRhbmNlIHdpdGggc2VjdGlvbiAzLjIsIGFuZCB0aGUgQ29udHJpYnV0b3IgbXVzdCBhY2NvbXBhbnkKKyAgICAgIHRoZSBQcm9ncmFtIHdpdGggYSBzdGF0ZW1lbnQgdGhhdCB0aGUgU291cmNlIENvZGUgZm9yIHRoZSBQcm9ncmFtCisgICAgICBpcyBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZCBpbmZvcm1zIFJlY2lwaWVudHMgaG93IHRvCisgICAgICBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEgbWVkaXVtIGN1c3RvbWFyaWx5CisgICAgICB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZTsgYW5kCisKKyAgICAgIGIpIHRoZSBDb250cmlidXRvciBtYXkgRGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSB1bmRlciBhIGxpY2Vuc2UKKyAgICAgIGRpZmZlcmVudCB0aGFuIHRoaXMgQWdyZWVtZW50LCBwcm92aWRlZCB0aGF0IHN1Y2ggbGljZW5zZToKKyAgICAgICAgIGkpIGVmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIG90aGVyIENvbnRyaWJ1dG9ycyBhbGwKKyAgICAgICAgIHdhcnJhbnRpZXMgYW5kIGNvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZworICAgICAgICAgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlIGFuZCBub24taW5mcmluZ2VtZW50LCBhbmQKKyAgICAgICAgIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eSBhbmQgZml0bmVzcworICAgICAgICAgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOworCisgICAgICAgICBpaSkgZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBvdGhlciBDb250cmlidXRvcnMgYWxsCisgICAgICAgICBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLAorICAgICAgICAgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoIGFzIGxvc3QgcHJvZml0czsKKworICAgICAgICAgaWlpKSBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnRzJyByaWdodHMKKyAgICAgICAgIGluIHRoZSBTb3VyY2UgQ29kZSB1bmRlciBzZWN0aW9uIDMuMjsgYW5kCisKKyAgICAgICAgIGl2KSByZXF1aXJlcyBhbnkgc3Vic2VxdWVudCBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkgYW55CisgICAgICAgICBwYXJ0eSB0byBiZSB1bmRlciBhIGxpY2Vuc2UgdGhhdCBzYXRpc2ZpZXMgdGhlIHJlcXVpcmVtZW50cworICAgICAgICAgb2YgdGhpcyBzZWN0aW9uIDMuCisKKyAgICAzLjIgV2hlbiB0aGUgUHJvZ3JhbSBpcyBEaXN0cmlidXRlZCBhcyBTb3VyY2UgQ29kZToKKworICAgICAgYSkgaXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudCwgb3IgaWYgdGhlCisgICAgICBQcm9ncmFtIChpKSBpcyBjb21iaW5lZCB3aXRoIG90aGVyIG1hdGVyaWFsIGluIGEgc2VwYXJhdGUgZmlsZSBvcgorICAgICAgZmlsZXMgbWFkZSBhdmFpbGFibGUgdW5kZXIgYSBTZWNvbmRhcnkgTGljZW5zZSwgYW5kIChpaSkgdGhlIGluaXRpYWwKKyAgICAgIENvbnRyaWJ1dG9yIGF0dGFjaGVkIHRvIHRoZSBTb3VyY2UgQ29kZSB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbgorICAgICAgRXhoaWJpdCBBIG9mIHRoaXMgQWdyZWVtZW50LCB0aGVuIHRoZSBQcm9ncmFtIG1heSBiZSBtYWRlIGF2YWlsYWJsZQorICAgICAgdW5kZXIgdGhlIHRlcm1zIG9mIHN1Y2ggU2Vjb25kYXJ5IExpY2Vuc2VzLCBhbmQKKworICAgICAgYikgYSBjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YKKyAgICAgIHRoZSBQcm9ncmFtLgorCisgICAgMy4zIENvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkgY29weXJpZ2h0LCBwYXRlbnQsCisgICAgdHJhZGVtYXJrLCBhdHRyaWJ1dGlvbiBub3RpY2VzLCBkaXNjbGFpbWVycyBvZiB3YXJyYW50eSwgb3IgbGltaXRhdGlvbnMKKyAgICBvZiBsaWFiaWxpdHkgKCJub3RpY2VzIikgY29udGFpbmVkIHdpdGhpbiB0aGUgUHJvZ3JhbSBmcm9tIGFueSBjb3B5IG9mCisgICAgdGhlIFByb2dyYW0gd2hpY2ggdGhleSBEaXN0cmlidXRlLCBwcm92aWRlZCB0aGF0IENvbnRyaWJ1dG9ycyBtYXkgYWRkCisgICAgdGhlaXIgb3duIGFwcHJvcHJpYXRlIG5vdGljZXMuCisKKyAgICA0LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTgorCisgICAgQ29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5IGFjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMKKyAgICB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycyBhbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMKKyAgICBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlIG9mIHRoZSBQcm9ncmFtLAorICAgIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKKyAgICBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbAorICAgIGxpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMKKyAgICB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvcgorICAgICgiQ29tbWVyY2lhbCBDb250cmlidXRvciIpIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkKKyAgICBvdGhlciBDb250cmlidXRvciAoIkluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIikgYWdhaW5zdCBhbnkgbG9zc2VzLAorICAgIGRhbWFnZXMgYW5kIGNvc3RzIChjb2xsZWN0aXZlbHkgIkxvc3NlcyIpIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzCisgICAgYW5kIG90aGVyIGxlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkCisgICAgQ29udHJpYnV0b3IgdG8gdGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2gKKyAgICBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluIGNvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtCisgICAgaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90CisgICAgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMgcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkCisgICAgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIgdG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQKKyAgICBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KKyAgICB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB0byBjb250cm9sLAorICAgIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kIGFueQorICAgIHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkKKyAgICBwYXJ0aWNpcGF0ZSBpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuCisKKyAgICBGb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbAorICAgIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEgQ29tbWVyY2lhbAorICAgIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQorICAgIGNsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlCisgICAgY2xhaW1zIGFuZCB3YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IncyByZXNwb25zaWJpbGl0eQorICAgIGFsb25lLiBVbmRlciB0aGlzIHNlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8KKyAgICBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlIG90aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlCisgICAgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYSBjb3VydCByZXF1aXJlcyBhbnkgb3RoZXIgQ29udHJpYnV0b3IgdG8KKyAgICBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5CisgICAgdGhvc2UgZGFtYWdlcy4KKworICAgIDUuIE5PIFdBUlJBTlRZCisKKyAgICBFWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTIEFHUkVFTUVOVCwgQU5EIFRPIFRIRSBFWFRFTlQKKyAgICBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICJBUyBJUyIKKyAgICBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SCisgICAgSU1QTElFRCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRgorICAgIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgICAgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUKKyAgICBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwKKyAgICByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCwKKyAgICBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCisgICAgY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMKKyAgICBvciBlcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4KKworICAgIDYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZCisKKyAgICBFWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTIEFHUkVFTUVOVCwgQU5EIFRPIFRIRSBFWFRFTlQKKyAgICBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTCisgICAgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAgICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUCisgICAgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICAgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgICAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBPUiBUSEUKKyAgICBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgICAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisgICAgNy4gR0VORVJBTAorCisgICAgSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKKyAgICBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YKKyAgICB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQgZnVydGhlcgorICAgIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQorICAgIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KKworICAgIElmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eQorICAgIChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZQorICAgIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGggb3RoZXIgc29mdHdhcmUKKyAgICBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2ggUmVjaXBpZW50J3MKKyAgICByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlIHN1Y2gKKyAgICBsaXRpZ2F0aW9uIGlzIGZpbGVkLgorCisgICAgQWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCBzaGFsbCB0ZXJtaW5hdGUgaWYgaXQKKyAgICBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yIGNvbmRpdGlvbnMgb2YgdGhpcworICAgIEFncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlIHBlcmlvZCBvZgorICAgIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MKKyAgICByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZQorICAgIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLgorICAgIEhvd2V2ZXIsIFJlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMKKyAgICBncmFudGVkIGJ5IFJlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4KKworICAgIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGlzIEFncmVlbWVudCwKKyAgICBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzIGNvcHlyaWdodGVkIGFuZAorICAgIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50IFN0ZXdhcmQKKyAgICByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCisgICAgdGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQKKyAgICBTdGV3YXJkIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uCisgICAgaXMgdGhlIGluaXRpYWwgQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUKKyAgICByZXNwb25zaWJpbGl0eSB0byBzZXJ2ZSBhcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZQorICAgIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbiBvZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZworICAgIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbSAoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUKKyAgICBEaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mIHRoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzCisgICAgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mIHRoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLAorICAgIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBEaXN0cmlidXRlIHRoZSBQcm9ncmFtIChpbmNsdWRpbmcgaXRzCisgICAgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLgorCisgICAgRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50CisgICAgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55CisgICAgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIgZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwKKyAgICBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90IGV4cHJlc3NseSBncmFudGVkCisgICAgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLiBOb3RoaW5nIGluIHRoaXMgQWdyZWVtZW50IGlzIGludGVuZGVkCisgICAgdG8gYmUgZW5mb3JjZWFibGUgYnkgYW55IGVudGl0eSB0aGF0IGlzIG5vdCBhIENvbnRyaWJ1dG9yIG9yIFJlY2lwaWVudC4KKyAgICBObyB0aGlyZC1wYXJ0eSBiZW5lZmljaWFyeSByaWdodHMgYXJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQuCisKKyAgICBFeGhpYml0IEEgLSBGb3JtIG9mIFNlY29uZGFyeSBMaWNlbnNlcyBOb3RpY2UKKworICAgICJUaGlzIFNvdXJjZSBDb2RlIG1heSBhbHNvIGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBmb2xsb3dpbmcgCisgICAgU2Vjb25kYXJ5IExpY2Vuc2VzIHdoZW4gdGhlIGNvbmRpdGlvbnMgZm9yIHN1Y2ggYXZhaWxhYmlsaXR5IHNldCBmb3J0aCAKKyAgICBpbiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSwgdi4gMi4wIGFyZSBzYXRpc2ZpZWQ6IHtuYW1lIGxpY2Vuc2UocyksCisgICAgdmVyc2lvbihzKSwgYW5kIGV4Y2VwdGlvbnMgb3IgYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBoZXJlfS4iCisKKyAgICAgIFNpbXBseSBpbmNsdWRpbmcgYSBjb3B5IG9mIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgdGhpcyBFeGhpYml0IEEKKyAgICAgIGlzIG5vdCBzdWZmaWNpZW50IHRvIGxpY2Vuc2UgdGhlIFNvdXJjZSBDb2RlIHVuZGVyIFNlY29uZGFyeSBMaWNlbnNlcy4KKworICAgICAgSWYgaXQgaXMgbm90IHBvc3NpYmxlIG9yIGRlc2lyYWJsZSB0byBwdXQgdGhlIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIKKyAgICAgIGZpbGUsIHRoZW4gWW91IG1heSBpbmNsdWRlIHRoZSBub3RpY2UgaW4gYSBsb2NhdGlvbiAoc3VjaCBhcyBhIExJQ0VOU0UKKyAgICAgIGZpbGUgaW4gYSByZWxldmFudCBkaXJlY3RvcnkpIHdoZXJlIGEgcmVjaXBpZW50IHdvdWxkIGJlIGxpa2VseSB0bworICAgICAgbG9vayBmb3Igc3VjaCBhIG5vdGljZS4KKworICAgICAgWW91IG1heSBhZGQgYWRkaXRpb25hbCBhY2N1cmF0ZSBub3RpY2VzIG9mIGNvcHlyaWdodCBvd25lcnNoaXAuCisKKy0tLQorCisjIyAgICBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKworICAgIENvcHlyaWdodCAoQykgMTk4OSwgMjAyMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzM1CisgICAgVVNBCisKKyAgICBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyAgICBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworICAgIFByZWFtYmxlCisKKyAgICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyIGZyZWVkb20gdG8KKyAgICBzaGFyZSBhbmQgY2hhbmdlIGl0LiBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzCisgICAgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUgc29mdHdhcmUtLXRvCisgICAgbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiBUaGlzIEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZAorICAgIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvIHVzaW5nIGl0LiAoU29tZSBvdGhlciBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsCisgICAgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pIFlvdSBjYW4gYXBwbHkgaXQgdG8geW91ciBwcm9ncmFtcywgdG9vLgorCisgICAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdCBwcmljZS4KKyAgICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIHRoZQorICAgIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IgdGhpcworICAgIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQgaWYgeW91CisgICAgd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdCBpbiBuZXcKKyAgICBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICAgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQgYW55b25lCisgICAgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuIFRoZXNlCisgICAgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKKyAgICBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyIGdyYXRpcworICAgIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0IHlvdSBoYXZlLgorICAgIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZSBzb3VyY2UgY29kZS4KKyAgICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpciByaWdodHMuCisKKyAgICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisgICAgKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKKyAgICBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorCisgICAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KKyAgICB0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorICAgIHNvZnR3YXJlLiBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCisgICAgd2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KKyAgICB0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAorICAgIGF1dGhvcnMnIHJlcHV0YXRpb25zLgorCisgICAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUgcGF0ZW50cy4KKyAgICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUgcHJvZ3JhbSB3aWxsCisgICAgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlIHByb2dyYW0KKyAgICBwcm9wcmlldGFyeS4gVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkgcGF0ZW50IG11c3QKKyAgICBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorCisgICAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKKyAgICBtb2RpZmljYXRpb24gZm9sbG93LgorCisgICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgICAwLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIGNvbnRhaW5zIGEKKyAgICBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIKKyAgICB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiBUaGUgIlByb2dyYW0iLCBiZWxvdywgcmVmZXJzCisgICAgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIgbWVhbnMKKyAgICBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3OiB0aGF0IGlzCisgICAgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsIGVpdGhlcgorICAgIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuCisgICAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4gdGhlIHRlcm0KKyAgICAibW9kaWZpY2F0aW9uIi4pIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCisgICAgQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKKyAgICBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuIFRoZSBhY3Qgb2YgcnVubmluZworICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtIGlzCisgICAgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbQorICAgIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFByb2dyYW0pLiBXaGV0aGVyIHRoYXQKKyAgICBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorCisgICAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzIHNvdXJjZQorICAgIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91IGNvbnNwaWN1b3VzbHkKKyAgICBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlCisgICAgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvCisgICAgdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7IGFuZCBnaXZlIGFueSBvdGhlcgorICAgIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCisgICAgWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCisgICAgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKworICAgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24gb2YKKyAgICBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kIGRpc3RyaWJ1dGUKKyAgICBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxIGFib3ZlLCBwcm92aWRlZAorICAgIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgICAgICBhKSBZb3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAgICAgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgICAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KKyAgICAgICAgd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55IHBhcnQKKyAgICAgICAgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkIHBhcnRpZXMKKyAgICAgICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgICAgICBjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5CisgICAgICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKyAgICAgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorICAgICAgICBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGEgbm90aWNlCisgICAgICAgIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlIGEKKyAgICAgICAgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIgdGhlc2UKKyAgICAgICAgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4KKyAgICAgICAgKEV4Y2VwdGlvbjogaWYgdGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dCBkb2VzIG5vdAorICAgICAgICBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtCisgICAgICAgIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorCisgICAgVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuIElmCisgICAgaWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwgYW5kCisgICAgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KKyAgICB0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCisgICAgc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiBCdXQgd2hlbiB5b3UKKyAgICBkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQgb24KKyAgICB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YgdGhpcworICAgIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZSBlbnRpcmUKKyAgICB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KKworICAgIFRodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAorICAgIHlvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworICAgIGV4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorICAgIGNvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisKKyAgICBJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCisgICAgd2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pIG9uIGEgdm9sdW1lIG9mIGEKKyAgICBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIgdGhlCisgICAgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCisgICAgdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCisgICAgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgICAgIGEpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKKyAgICAgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEKKyAgICAgICAgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisgICAgICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyIGNvc3QKKyAgICAgICAgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUKKyAgICAgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQorICAgICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorICAgICAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICAgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIgdG8KKyAgICAgICAgZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAoVGhpcyBhbHRlcm5hdGl2ZSBpcyBhbGxvd2VkCisgICAgICAgIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdSByZWNlaXZlZCB0aGUKKyAgICAgICAgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoIGFuIG9mZmVyLCBpbgorICAgICAgICBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQorCisgICAgVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorICAgIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UgY29kZQorICAgIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueQorICAgIGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0byBjb250cm9sCisgICAgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gSG93ZXZlciwgYXMgYSBzcGVjaWFsCisgICAgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IGlzCisgICAgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0pIHdpdGggdGhlIG1ham9yCisgICAgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBvbgorICAgIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudCBpdHNlbGYgYWNjb21wYW5pZXMgdGhlCisgICAgZXhlY3V0YWJsZS4KKworICAgIElmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzCisgICAgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5CisgICAgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlCisgICAgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90IGNvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UKKyAgICBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKworICAgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorICAgIGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiBBbnkgYXR0ZW1wdCBvdGhlcndpc2UKKyAgICB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcyB2b2lkLCBhbmQgd2lsbAorICAgIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gSG93ZXZlciwgcGFydGllcworICAgIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlciB0aGlzIExpY2Vuc2Ugd2lsbAorICAgIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoIHBhcnRpZXMgcmVtYWluIGluCisgICAgZnVsbCBjb21wbGlhbmNlLgorCisgICAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CisgICAgc2lnbmVkIGl0LiBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorICAgIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuIFRoZXNlIGFjdGlvbnMgYXJlCisgICAgcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiBUaGVyZWZvcmUsIGJ5CisgICAgbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCisgICAgUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQgYWxsCisgICAgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nIHRoZQorICAgIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKyAgICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCisgICAgUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKKyAgICBvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCisgICAgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlciByZXN0cmljdGlvbnMKKyAgICBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4gWW91IGFyZSBub3QKKyAgICByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0byB0aGlzIExpY2Vuc2UuCisKKyAgICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CisgICAgaW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKKyAgICBjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCisgICAgb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorICAgIGV4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuIElmIHlvdSBjYW5ub3QgZGlzdHJpYnV0ZQorICAgIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kCisgICAgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdSBtYXkgbm90CisgICAgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudCBsaWNlbnNlIHdvdWxkCisgICAgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkgYWxsIHRob3NlIHdobworICAgIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4gdGhlIG9ubHkgd2F5IHlvdQorICAgIGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvIHJlZnJhaW4gZW50aXJlbHkgZnJvbQorICAgIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKworICAgIElmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorICAgIGFueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KKyAgICBhcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgorICAgIGNpcmN1bXN0YW5jZXMuCisKKyAgICBJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CisgICAgcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKKyAgICBzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCisgICAgaW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzIGltcGxlbWVudGVkCisgICAgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiBNYW55IHBlb3BsZSBoYXZlIG1hZGUgZ2VuZXJvdXMKKyAgICBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHRocm91Z2ggdGhhdAorICAgIHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQgc3lzdGVtOyBpdCBpcyB1cCB0bworICAgIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nIHRvIGRpc3RyaWJ1dGUKKyAgICBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90IGltcG9zZSB0aGF0IGNob2ljZS4KKworICAgIFRoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0byBiZQorICAgIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KKyAgICBjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKKyAgICBvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlIG1heQorICAgIGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nIHRob3NlCisgICAgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZyBjb3VudHJpZXMKKyAgICBub3QgdGh1cyBleGNsdWRlZC4gSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzIHRoZQorICAgIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldworICAgIHZlcnNpb25zIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBTdWNoIG5ldworICAgIHZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heQorICAgIGRpZmZlciBpbiBkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKKyAgICBFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gSWYgdGhlIFByb2dyYW0KKyAgICBzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorICAgIGxhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kCisgICAgY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uCisgICAgbnVtYmVyIG9mIHRoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgICAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorICAgIHByb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRvIHRoZQorICAgIGF1dGhvciB0byBhc2sgZm9yIHBlcm1pc3Npb24uIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUKKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlCisgICAgc29tZXRpbWVzIG1ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZQorICAgIHR3byBnb2FscyBvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUKKyAgICBzb2Z0d2FyZSBhbmQgb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisKKyAgICBOTyBXQVJSQU5UWQorCisgICAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PCisgICAgV0FSUkFOVFkgRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4KKyAgICBFWENFUFQgV0hFTiBPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUgorICAgIE9USEVSIFBBUlRJRVMgUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgICAgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAgICBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFRIRQorICAgIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTSBJUyBXSVRICisgICAgWU9VLiBTSE9VTEQgVEhFIFBST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTAorICAgIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgICAgMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4KKyAgICBXUklUSU5HIFdJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWQorICAgIEFORC9PUiBSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUgorICAgIERBTUFHRVMsIElOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMCisgICAgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0KKyAgICAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRAorICAgIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWSBZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YKKyAgICBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFBST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUgorICAgIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworCisgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisKKyAgICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0CisgICAgcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAorICAgIGZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCisgICAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uIEl0IGlzIHNhZmVzdCB0bworICAgIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkgY29udmV5CisgICAgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCB0aGUKKyAgICAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCisgICAgICAgIE9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLgorICAgICAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiA8bmFtZSBvZiBhdXRob3I+CisKKyAgICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICAgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgICAgICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorICAgICAgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICAgICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzM1IFVTQQorCisgICAgQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKKyAgICBJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzCisgICAgd2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKworICAgICAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIHllYXIgbmFtZSBvZiBhdXRob3IKKyAgICAgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlCisgICAgICAgIGBzaG93IHcnLiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlCisgICAgICAgIGl0IHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KKworICAgIFRoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZQorICAgIGFwcHJvcHJpYXRlIHBhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcworICAgIHlvdSB1c2UgbWF5IGJlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3JyBhbmQgYHNob3cgYyc7IHRoZXkKKyAgICBjb3VsZCBldmVuIGJlIG1vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uCisKKyAgICBZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorICAgIHNjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmCisgICAgbmVjZXNzYXJ5LiBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisKKyAgICAgICAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUKKyAgICAgICAgcHJvZ3JhbSBgR25vbW92aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5CisgICAgICAgIEphbWVzIEhhY2tlci4KKworICAgICAgICBzaWduYXR1cmUgb2YgVHkgQ29vbiwgMSBBcHJpbCAxOTg5CisgICAgICAgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisKKyAgICBUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtCisgICAgaW50byBwcm9wcmlldGFyeSBwcm9ncmFtcy4gSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UKKyAgICBtYXkgY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zCisgICAgd2l0aCB0aGUgbGlicmFyeS4gSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMaWJyYXJ5CisgICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KKworLS0tCisKKyMjIENMQVNTUEFUSCBFWENFUFRJT04KKworICAgIExpbmtpbmcgdGhpcyBsaWJyYXJ5IHN0YXRpY2FsbHkgb3IgZHluYW1pY2FsbHkgd2l0aCBvdGhlciBtb2R1bGVzIGlzCisgICAgbWFraW5nIGEgY29tYmluZWQgd29yayBiYXNlZCBvbiB0aGlzIGxpYnJhcnkuICBUaHVzLCB0aGUgdGVybXMgYW5kCisgICAgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGNvdmVyIHRoZSB3aG9sZQorICAgIGNvbWJpbmF0aW9uLgorCisgICAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIGNvcHlyaWdodCBob2xkZXJzIG9mIHRoaXMgbGlicmFyeSBnaXZlIHlvdQorICAgIHBlcm1pc3Npb24gdG8gbGluayB0aGlzIGxpYnJhcnkgd2l0aCBpbmRlcGVuZGVudCBtb2R1bGVzIHRvIHByb2R1Y2UgYW4KKyAgICBleGVjdXRhYmxlLCByZWdhcmRsZXNzIG9mIHRoZSBsaWNlbnNlIHRlcm1zIG9mIHRoZXNlIGluZGVwZW5kZW50CisgICAgbW9kdWxlcywgYW5kIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHVuZGVyCisgICAgdGVybXMgb2YgeW91ciBjaG9pY2UsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCwgZm9yIGVhY2ggbGlua2VkCisgICAgaW5kZXBlbmRlbnQgbW9kdWxlLCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIGxpY2Vuc2Ugb2YgdGhhdAorICAgIG1vZHVsZS4gIEFuIGluZGVwZW5kZW50IG1vZHVsZSBpcyBhIG1vZHVsZSB3aGljaCBpcyBub3QgZGVyaXZlZCBmcm9tIG9yCisgICAgYmFzZWQgb24gdGhpcyBsaWJyYXJ5LiAgSWYgeW91IG1vZGlmeSB0aGlzIGxpYnJhcnksIHlvdSBtYXkgZXh0ZW5kIHRoaXMKKyAgICBleGNlcHRpb24gdG8geW91ciB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCBidXQgeW91IGFyZSBub3Qgb2JsaWdhdGVkIHRvCisgICAgZG8gc28uICBJZiB5b3UgZG8gbm90IHdpc2ggdG8gZG8gc28sIGRlbGV0ZSB0aGlzIGV4Y2VwdGlvbiBzdGF0ZW1lbnQKKyAgICBmcm9tIHlvdXIgdmVyc2lvbi4KZGlmZiAtLWdpdCBhL3Rjay9zcmMvbWFpbi9yZXNvdXJjZXMvZWUvamFrYXJ0YS90Y2svYW5ub3RhdGlvbnMvc2lnbmF0dXJldGVzdC9qYWthcnRhLmFubm90YXRpb24uc2lnXzMuMCBiL3Rjay9zcmMvbWFpbi9yZXNvdXJjZXMvZWUvamFrYXJ0YS90Y2svYW5ub3RhdGlvbnMvc2lnbmF0dXJldGVzdC9qYWthcnRhLmFubm90YXRpb24uc2lnXzMuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjEwZWY4Ci0tLSAvZGV2L251bGwKKysrIGIvdGNrL3NyYy9tYWluL3Jlc291cmNlcy9lZS9qYWthcnRhL3Rjay9hbm5vdGF0aW9ucy9zaWduYXR1cmV0ZXN0L2pha2FydGEuYW5ub3RhdGlvbi5zaWdfMy4wCkBAIC0wLDAgKzEsMjIzIEBACisjU2lnbmF0dXJlIGZpbGUgdjQuMQorI1ZlcnNpb24gMy4wLjAKKworQ0xTUyBwdWJsaWMgYWJzdHJhY3QgaW50ZXJmYWNlICFhbm5vdGF0aW9uIGpha2FydGEuYW5ub3RhdGlvbi5HZW5lcmF0ZWQKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uRG9jdW1lbnRlZCgpCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbihqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb25Qb2xpY3kgdmFsdWU9U09VUkNFKQorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5UYXJnZXQoamF2YS5sYW5nLmFubm90YXRpb24uRWxlbWVudFR5cGVbXSB2YWx1ZT1bUEFDS0FHRSwgVFlQRSwgQU5OT1RBVElPTl9UWVBFLCBNRVRIT0QsIENPTlNUUlVDVE9SLCBGSUVMRCwgTE9DQUxfVkFSSUFCTEUsIFBBUkFNRVRFUl0pCitpbnRmIGphdmEubGFuZy5hbm5vdGF0aW9uLkFubm90YXRpb24KK21ldGggcHVibGljIGFic3RyYWN0ICFoYXNkZWZhdWx0IGphdmEubGFuZy5TdHJpbmcgY29tbWVudHMoKQorbWV0aCBwdWJsaWMgYWJzdHJhY3QgIWhhc2RlZmF1bHQgamF2YS5sYW5nLlN0cmluZyBkYXRlKCkKK21ldGggcHVibGljIGFic3RyYWN0IGphdmEubGFuZy5TdHJpbmdbXSB2YWx1ZSgpCisKK0NMU1MgcHVibGljIGFic3RyYWN0IGludGVyZmFjZSAhYW5ub3RhdGlvbiBqYWthcnRhLmFubm90YXRpb24uTWFuYWdlZEJlYW4KKyBhbm5vIDAgamF2YS5sYW5nLkRlcHJlY2F0ZWQoYm9vbGVhbiBmb3JSZW1vdmFsPWZhbHNlLCBqYXZhLmxhbmcuU3RyaW5nIHNpbmNlPSIiKQorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb24oamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uUG9saWN5IHZhbHVlPVJVTlRJTUUpCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLlRhcmdldChqYXZhLmxhbmcuYW5ub3RhdGlvbi5FbGVtZW50VHlwZVtdIHZhbHVlPVtUWVBFXSkKK2ludGYgamF2YS5sYW5nLmFubm90YXRpb24uQW5ub3RhdGlvbgorbWV0aCBwdWJsaWMgYWJzdHJhY3QgIWhhc2RlZmF1bHQgamF2YS5sYW5nLlN0cmluZyB2YWx1ZSgpCisKK0NMU1MgcHVibGljIGFic3RyYWN0IGludGVyZmFjZSAhYW5ub3RhdGlvbiBqYWthcnRhLmFubm90YXRpb24uTm9ubnVsbAorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Eb2N1bWVudGVkKCkKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uKGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeSB2YWx1ZT1SVU5USU1FKQoraW50ZiBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Bbm5vdGF0aW9uCisKK0NMU1MgcHVibGljIGFic3RyYWN0IGludGVyZmFjZSAhYW5ub3RhdGlvbiBqYWthcnRhLmFubm90YXRpb24uTnVsbGFibGUKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uRG9jdW1lbnRlZCgpCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbihqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb25Qb2xpY3kgdmFsdWU9UlVOVElNRSkKK2ludGYgamF2YS5sYW5nLmFubm90YXRpb24uQW5ub3RhdGlvbgorCitDTFNTIHB1YmxpYyBhYnN0cmFjdCBpbnRlcmZhY2UgIWFubm90YXRpb24gamFrYXJ0YS5hbm5vdGF0aW9uLlBvc3RDb25zdHJ1Y3QKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uRG9jdW1lbnRlZCgpCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbihqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb25Qb2xpY3kgdmFsdWU9UlVOVElNRSkKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uVGFyZ2V0KGphdmEubGFuZy5hbm5vdGF0aW9uLkVsZW1lbnRUeXBlW10gdmFsdWU9W01FVEhPRF0pCitpbnRmIGphdmEubGFuZy5hbm5vdGF0aW9uLkFubm90YXRpb24KKworQ0xTUyBwdWJsaWMgYWJzdHJhY3QgaW50ZXJmYWNlICFhbm5vdGF0aW9uIGpha2FydGEuYW5ub3RhdGlvbi5QcmVEZXN0cm95CisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLkRvY3VtZW50ZWQoKQorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb24oamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uUG9saWN5IHZhbHVlPVJVTlRJTUUpCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLlRhcmdldChqYXZhLmxhbmcuYW5ub3RhdGlvbi5FbGVtZW50VHlwZVtdIHZhbHVlPVtNRVRIT0RdKQoraW50ZiBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Bbm5vdGF0aW9uCisKK0NMU1MgcHVibGljIGFic3RyYWN0IGludGVyZmFjZSAhYW5ub3RhdGlvbiBqYWthcnRhLmFubm90YXRpb24uUHJpb3JpdHkKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uRG9jdW1lbnRlZCgpCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbihqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb25Qb2xpY3kgdmFsdWU9UlVOVElNRSkKK2ludGYgamF2YS5sYW5nLmFubm90YXRpb24uQW5ub3RhdGlvbgorbWV0aCBwdWJsaWMgYWJzdHJhY3QgaW50IHZhbHVlKCkKKworQ0xTUyBwdWJsaWMgYWJzdHJhY3QgaW50ZXJmYWNlICFhbm5vdGF0aW9uIGpha2FydGEuYW5ub3RhdGlvbi5SZXNvdXJjZQorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXBlYXRhYmxlKGphdmEubGFuZy5DbGFzczw/IGV4dGVuZHMgamF2YS5sYW5nLmFubm90YXRpb24uQW5ub3RhdGlvbj4gdmFsdWU9Y2xhc3MgamFrYXJ0YS5hbm5vdGF0aW9uLlJlc291cmNlcykKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uKGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeSB2YWx1ZT1SVU5USU1FKQorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5UYXJnZXQoamF2YS5sYW5nLmFubm90YXRpb24uRWxlbWVudFR5cGVbXSB2YWx1ZT1bVFlQRSwgRklFTEQsIE1FVEhPRF0pCitpbm5yIHB1YmxpYyBmaW5hbCBzdGF0aWMgIWVudW0gQXV0aGVudGljYXRpb25UeXBlCitpbnRmIGphdmEubGFuZy5hbm5vdGF0aW9uLkFubm90YXRpb24KK21ldGggcHVibGljIGFic3RyYWN0ICFoYXNkZWZhdWx0IGJvb2xlYW4gc2hhcmVhYmxlKCkKK21ldGggcHVibGljIGFic3RyYWN0ICFoYXNkZWZhdWx0IGpha2FydGEuYW5ub3RhdGlvbi5SZXNvdXJjZSRBdXRoZW50aWNhdGlvblR5cGUgYXV0aGVudGljYXRpb25UeXBlKCkKK21ldGggcHVibGljIGFic3RyYWN0ICFoYXNkZWZhdWx0IGphdmEubGFuZy5DbGFzczw/PiB0eXBlKCkKK21ldGggcHVibGljIGFic3RyYWN0ICFoYXNkZWZhdWx0IGphdmEubGFuZy5TdHJpbmcgZGVzY3JpcHRpb24oKQorbWV0aCBwdWJsaWMgYWJzdHJhY3QgIWhhc2RlZmF1bHQgamF2YS5sYW5nLlN0cmluZyBsb29rdXAoKQorbWV0aCBwdWJsaWMgYWJzdHJhY3QgIWhhc2RlZmF1bHQgamF2YS5sYW5nLlN0cmluZyBtYXBwZWROYW1lKCkKK21ldGggcHVibGljIGFic3RyYWN0ICFoYXNkZWZhdWx0IGphdmEubGFuZy5TdHJpbmcgbmFtZSgpCisKK0NMU1MgcHVibGljIGZpbmFsIHN0YXRpYyAhZW51bSBqYWthcnRhLmFubm90YXRpb24uUmVzb3VyY2UkQXV0aGVudGljYXRpb25UeXBlCisgb3V0ZXIgamFrYXJ0YS5hbm5vdGF0aW9uLlJlc291cmNlCitmbGQgcHVibGljIGZpbmFsIHN0YXRpYyBqYWthcnRhLmFubm90YXRpb24uUmVzb3VyY2UkQXV0aGVudGljYXRpb25UeXBlIEFQUExJQ0FUSU9OCitmbGQgcHVibGljIGZpbmFsIHN0YXRpYyBqYWthcnRhLmFubm90YXRpb24uUmVzb3VyY2UkQXV0aGVudGljYXRpb25UeXBlIENPTlRBSU5FUgorbWV0aCBwdWJsaWMgc3RhdGljIGpha2FydGEuYW5ub3RhdGlvbi5SZXNvdXJjZSRBdXRoZW50aWNhdGlvblR5cGUgdmFsdWVPZihqYXZhLmxhbmcuU3RyaW5nKQorbWV0aCBwdWJsaWMgc3RhdGljIGpha2FydGEuYW5ub3RhdGlvbi5SZXNvdXJjZSRBdXRoZW50aWNhdGlvblR5cGVbXSB2YWx1ZXMoKQorc3VwciBqYXZhLmxhbmcuRW51bTxqYWthcnRhLmFubm90YXRpb24uUmVzb3VyY2UkQXV0aGVudGljYXRpb25UeXBlPgorCitDTFNTIHB1YmxpYyBhYnN0cmFjdCBpbnRlcmZhY2UgIWFubm90YXRpb24gamFrYXJ0YS5hbm5vdGF0aW9uLlJlc291cmNlcworIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Eb2N1bWVudGVkKCkKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uKGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeSB2YWx1ZT1SVU5USU1FKQorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5UYXJnZXQoamF2YS5sYW5nLmFubm90YXRpb24uRWxlbWVudFR5cGVbXSB2YWx1ZT1bVFlQRV0pCitpbnRmIGphdmEubGFuZy5hbm5vdGF0aW9uLkFubm90YXRpb24KK21ldGggcHVibGljIGFic3RyYWN0IGpha2FydGEuYW5ub3RhdGlvbi5SZXNvdXJjZVtdIHZhbHVlKCkKKworQ0xTUyBwdWJsaWMgYWJzdHJhY3QgaW50ZXJmYWNlICFhbm5vdGF0aW9uIGpha2FydGEuYW5ub3RhdGlvbi5zZWN1cml0eS5EZWNsYXJlUm9sZXMKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uRG9jdW1lbnRlZCgpCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbihqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb25Qb2xpY3kgdmFsdWU9UlVOVElNRSkKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uVGFyZ2V0KGphdmEubGFuZy5hbm5vdGF0aW9uLkVsZW1lbnRUeXBlW10gdmFsdWU9W1RZUEVdKQoraW50ZiBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Bbm5vdGF0aW9uCittZXRoIHB1YmxpYyBhYnN0cmFjdCBqYXZhLmxhbmcuU3RyaW5nW10gdmFsdWUoKQorCitDTFNTIHB1YmxpYyBhYnN0cmFjdCBpbnRlcmZhY2UgIWFubm90YXRpb24gamFrYXJ0YS5hbm5vdGF0aW9uLnNlY3VyaXR5LkRlbnlBbGwKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uRG9jdW1lbnRlZCgpCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbihqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb25Qb2xpY3kgdmFsdWU9UlVOVElNRSkKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uVGFyZ2V0KGphdmEubGFuZy5hbm5vdGF0aW9uLkVsZW1lbnRUeXBlW10gdmFsdWU9W1RZUEUsIE1FVEhPRF0pCitpbnRmIGphdmEubGFuZy5hbm5vdGF0aW9uLkFubm90YXRpb24KKworQ0xTUyBwdWJsaWMgYWJzdHJhY3QgaW50ZXJmYWNlICFhbm5vdGF0aW9uIGpha2FydGEuYW5ub3RhdGlvbi5zZWN1cml0eS5QZXJtaXRBbGwKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uRG9jdW1lbnRlZCgpCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbihqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb25Qb2xpY3kgdmFsdWU9UlVOVElNRSkKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uVGFyZ2V0KGphdmEubGFuZy5hbm5vdGF0aW9uLkVsZW1lbnRUeXBlW10gdmFsdWU9W1RZUEUsIE1FVEhPRF0pCitpbnRmIGphdmEubGFuZy5hbm5vdGF0aW9uLkFubm90YXRpb24KKworQ0xTUyBwdWJsaWMgYWJzdHJhY3QgaW50ZXJmYWNlICFhbm5vdGF0aW9uIGpha2FydGEuYW5ub3RhdGlvbi5zZWN1cml0eS5Sb2xlc0FsbG93ZWQKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uRG9jdW1lbnRlZCgpCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbihqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb25Qb2xpY3kgdmFsdWU9UlVOVElNRSkKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uVGFyZ2V0KGphdmEubGFuZy5hbm5vdGF0aW9uLkVsZW1lbnRUeXBlW10gdmFsdWU9W1RZUEUsIE1FVEhPRF0pCitpbnRmIGphdmEubGFuZy5hbm5vdGF0aW9uLkFubm90YXRpb24KK21ldGggcHVibGljIGFic3RyYWN0IGphdmEubGFuZy5TdHJpbmdbXSB2YWx1ZSgpCisKK0NMU1MgcHVibGljIGFic3RyYWN0IGludGVyZmFjZSAhYW5ub3RhdGlvbiBqYWthcnRhLmFubm90YXRpb24uc2VjdXJpdHkuUnVuQXMKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uRG9jdW1lbnRlZCgpCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbihqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb25Qb2xpY3kgdmFsdWU9UlVOVElNRSkKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uVGFyZ2V0KGphdmEubGFuZy5hbm5vdGF0aW9uLkVsZW1lbnRUeXBlW10gdmFsdWU9W1RZUEVdKQoraW50ZiBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Bbm5vdGF0aW9uCittZXRoIHB1YmxpYyBhYnN0cmFjdCBqYXZhLmxhbmcuU3RyaW5nIHZhbHVlKCkKKworQ0xTUyBwdWJsaWMgYWJzdHJhY3QgaW50ZXJmYWNlICFhbm5vdGF0aW9uIGpha2FydGEuYW5ub3RhdGlvbi5zcWwuRGF0YVNvdXJjZURlZmluaXRpb24KKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uUmVwZWF0YWJsZShqYXZhLmxhbmcuQ2xhc3M8PyBleHRlbmRzIGphdmEubGFuZy5hbm5vdGF0aW9uLkFubm90YXRpb24+IHZhbHVlPWNsYXNzIGpha2FydGEuYW5ub3RhdGlvbi5zcWwuRGF0YVNvdXJjZURlZmluaXRpb25zKQorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb24oamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uUG9saWN5IHZhbHVlPVJVTlRJTUUpCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLlRhcmdldChqYXZhLmxhbmcuYW5ub3RhdGlvbi5FbGVtZW50VHlwZVtdIHZhbHVlPVtUWVBFXSkKK2ludGYgamF2YS5sYW5nLmFubm90YXRpb24uQW5ub3RhdGlvbgorbWV0aCBwdWJsaWMgYWJzdHJhY3QgIWhhc2RlZmF1bHQgYm9vbGVhbiB0cmFuc2FjdGlvbmFsKCkKK21ldGggcHVibGljIGFic3RyYWN0ICFoYXNkZWZhdWx0IGludCBpbml0aWFsUG9vbFNpemUoKQorbWV0aCBwdWJsaWMgYWJzdHJhY3QgIWhhc2RlZmF1bHQgaW50IGlzb2xhdGlvbkxldmVsKCkKK21ldGggcHVibGljIGFic3RyYWN0ICFoYXNkZWZhdWx0IGludCBsb2dpblRpbWVvdXQoKQorbWV0aCBwdWJsaWMgYWJzdHJhY3QgIWhhc2RlZmF1bHQgaW50IG1heElkbGVUaW1lKCkKK21ldGggcHVibGljIGFic3RyYWN0ICFoYXNkZWZhdWx0IGludCBtYXhQb29sU2l6ZSgpCittZXRoIHB1YmxpYyBhYnN0cmFjdCAhaGFzZGVmYXVsdCBpbnQgbWF4U3RhdGVtZW50cygpCittZXRoIHB1YmxpYyBhYnN0cmFjdCAhaGFzZGVmYXVsdCBpbnQgbWluUG9vbFNpemUoKQorbWV0aCBwdWJsaWMgYWJzdHJhY3QgIWhhc2RlZmF1bHQgaW50IHBvcnROdW1iZXIoKQorbWV0aCBwdWJsaWMgYWJzdHJhY3QgIWhhc2RlZmF1bHQgamF2YS5sYW5nLlN0cmluZyBkYXRhYmFzZU5hbWUoKQorbWV0aCBwdWJsaWMgYWJzdHJhY3QgIWhhc2RlZmF1bHQgamF2YS5sYW5nLlN0cmluZyBkZXNjcmlwdGlvbigpCittZXRoIHB1YmxpYyBhYnN0cmFjdCAhaGFzZGVmYXVsdCBqYXZhLmxhbmcuU3RyaW5nIHBhc3N3b3JkKCkKK21ldGggcHVibGljIGFic3RyYWN0ICFoYXNkZWZhdWx0IGphdmEubGFuZy5TdHJpbmcgc2VydmVyTmFtZSgpCittZXRoIHB1YmxpYyBhYnN0cmFjdCAhaGFzZGVmYXVsdCBqYXZhLmxhbmcuU3RyaW5nIHVybCgpCittZXRoIHB1YmxpYyBhYnN0cmFjdCAhaGFzZGVmYXVsdCBqYXZhLmxhbmcuU3RyaW5nIHVzZXIoKQorbWV0aCBwdWJsaWMgYWJzdHJhY3QgIWhhc2RlZmF1bHQgamF2YS5sYW5nLlN0cmluZ1tdIHByb3BlcnRpZXMoKQorbWV0aCBwdWJsaWMgYWJzdHJhY3QgamF2YS5sYW5nLlN0cmluZyBjbGFzc05hbWUoKQorbWV0aCBwdWJsaWMgYWJzdHJhY3QgamF2YS5sYW5nLlN0cmluZyBuYW1lKCkKKworQ0xTUyBwdWJsaWMgYWJzdHJhY3QgaW50ZXJmYWNlICFhbm5vdGF0aW9uIGpha2FydGEuYW5ub3RhdGlvbi5zcWwuRGF0YVNvdXJjZURlZmluaXRpb25zCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbihqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb25Qb2xpY3kgdmFsdWU9UlVOVElNRSkKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uVGFyZ2V0KGphdmEubGFuZy5hbm5vdGF0aW9uLkVsZW1lbnRUeXBlW10gdmFsdWU9W1RZUEVdKQoraW50ZiBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Bbm5vdGF0aW9uCittZXRoIHB1YmxpYyBhYnN0cmFjdCBqYWthcnRhLmFubm90YXRpb24uc3FsLkRhdGFTb3VyY2VEZWZpbml0aW9uW10gdmFsdWUoKQorCitDTFNTIHB1YmxpYyBhYnN0cmFjdCBpbnRlcmZhY2UgamF2YS5pby5TZXJpYWxpemFibGUKKworQ0xTUyBwdWJsaWMgYWJzdHJhY3QgaW50ZXJmYWNlIGphdmEubGFuZy5Db21wYXJhYmxlPCUwIGV4dGVuZHMgamF2YS5sYW5nLk9iamVjdD4KK21ldGggcHVibGljIGFic3RyYWN0IGludCBjb21wYXJlVG8oe2phdmEubGFuZy5Db21wYXJhYmxlJTB9KQorCitDTFNTIHB1YmxpYyBhYnN0cmFjdCBpbnRlcmZhY2UgIWFubm90YXRpb24gamF2YS5sYW5nLkRlcHJlY2F0ZWQKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uRG9jdW1lbnRlZCgpCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbihqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb25Qb2xpY3kgdmFsdWU9UlVOVElNRSkKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uVGFyZ2V0KGphdmEubGFuZy5hbm5vdGF0aW9uLkVsZW1lbnRUeXBlW10gdmFsdWU9W0NPTlNUUlVDVE9SLCBGSUVMRCwgTE9DQUxfVkFSSUFCTEUsIE1FVEhPRCwgUEFDS0FHRSwgTU9EVUxFLCBQQVJBTUVURVIsIFRZUEVdKQoraW50ZiBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Bbm5vdGF0aW9uCittZXRoIHB1YmxpYyBhYnN0cmFjdCAhaGFzZGVmYXVsdCBib29sZWFuIGZvclJlbW92YWwoKQorbWV0aCBwdWJsaWMgYWJzdHJhY3QgIWhhc2RlZmF1bHQgamF2YS5sYW5nLlN0cmluZyBzaW5jZSgpCisKK0NMU1MgcHVibGljIGFic3RyYWN0IGphdmEubGFuZy5FbnVtPCUwIGV4dGVuZHMgamF2YS5sYW5nLkVudW08e2phdmEubGFuZy5FbnVtJTB9Pj4KK2NvbnMgcHJvdGVjdGVkIGluaXQoamF2YS5sYW5nLlN0cmluZyxpbnQpCitpbm5yIHB1YmxpYyBmaW5hbCBzdGF0aWMgRW51bURlc2MKK2ludGYgamF2YS5pby5TZXJpYWxpemFibGUKK2ludGYgamF2YS5sYW5nLkNvbXBhcmFibGU8e2phdmEubGFuZy5FbnVtJTB9PgoraW50ZiBqYXZhLmxhbmcuY29uc3RhbnQuQ29uc3RhYmxlCittZXRoIHByb3RlY3RlZCBmaW5hbCBqYXZhLmxhbmcuT2JqZWN0IGNsb25lKCkgdGhyb3dzIGphdmEubGFuZy5DbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbgorbWV0aCBwcm90ZWN0ZWQgZmluYWwgdm9pZCBmaW5hbGl6ZSgpCittZXRoIHB1YmxpYyBmaW5hbCBib29sZWFuIGVxdWFscyhqYXZhLmxhbmcuT2JqZWN0KQorbWV0aCBwdWJsaWMgZmluYWwgaW50IGNvbXBhcmVUbyh7amF2YS5sYW5nLkVudW0lMH0pCittZXRoIHB1YmxpYyBmaW5hbCBpbnQgaGFzaENvZGUoKQorbWV0aCBwdWJsaWMgZmluYWwgaW50IG9yZGluYWwoKQorbWV0aCBwdWJsaWMgZmluYWwgamF2YS5sYW5nLkNsYXNzPHtqYXZhLmxhbmcuRW51bSUwfT4gZ2V0RGVjbGFyaW5nQ2xhc3MoKQorbWV0aCBwdWJsaWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBuYW1lKCkKK21ldGggcHVibGljIGZpbmFsIGphdmEudXRpbC5PcHRpb25hbDxqYXZhLmxhbmcuRW51bSRFbnVtRGVzYzx7amF2YS5sYW5nLkVudW0lMH0+PiBkZXNjcmliZUNvbnN0YWJsZSgpCittZXRoIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIHRvU3RyaW5nKCkKK21ldGggcHVibGljIHN0YXRpYyA8JTAgZXh0ZW5kcyBqYXZhLmxhbmcuRW51bTx7JSUwfT4+IHslJTB9IHZhbHVlT2YoamF2YS5sYW5nLkNsYXNzPHslJTB9PixqYXZhLmxhbmcuU3RyaW5nKQorc3VwciBqYXZhLmxhbmcuT2JqZWN0CitoZmRzIG5hbWUsb3JkaW5hbAorCitDTFNTIHB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0Citjb25zIHB1YmxpYyBpbml0KCkKK21ldGggcHJvdGVjdGVkIGphdmEubGFuZy5PYmplY3QgY2xvbmUoKSB0aHJvd3MgamF2YS5sYW5nLkNsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uCittZXRoIHByb3RlY3RlZCB2b2lkIGZpbmFsaXplKCkgdGhyb3dzIGphdmEubGFuZy5UaHJvd2FibGUKKyBhbm5vIDAgamF2YS5sYW5nLkRlcHJlY2F0ZWQoYm9vbGVhbiBmb3JSZW1vdmFsPWZhbHNlLCBqYXZhLmxhbmcuU3RyaW5nIHNpbmNlPSI5IikKK21ldGggcHVibGljIGJvb2xlYW4gZXF1YWxzKGphdmEubGFuZy5PYmplY3QpCittZXRoIHB1YmxpYyBmaW5hbCBqYXZhLmxhbmcuQ2xhc3M8Pz4gZ2V0Q2xhc3MoKQorbWV0aCBwdWJsaWMgZmluYWwgdm9pZCBub3RpZnkoKQorbWV0aCBwdWJsaWMgZmluYWwgdm9pZCBub3RpZnlBbGwoKQorbWV0aCBwdWJsaWMgZmluYWwgdm9pZCB3YWl0KCkgdGhyb3dzIGphdmEubGFuZy5JbnRlcnJ1cHRlZEV4Y2VwdGlvbgorbWV0aCBwdWJsaWMgZmluYWwgdm9pZCB3YWl0KGxvbmcpIHRocm93cyBqYXZhLmxhbmcuSW50ZXJydXB0ZWRFeGNlcHRpb24KK21ldGggcHVibGljIGZpbmFsIHZvaWQgd2FpdChsb25nLGludCkgdGhyb3dzIGphdmEubGFuZy5JbnRlcnJ1cHRlZEV4Y2VwdGlvbgorbWV0aCBwdWJsaWMgaW50IGhhc2hDb2RlKCkKK21ldGggcHVibGljIGphdmEubGFuZy5TdHJpbmcgdG9TdHJpbmcoKQorCitDTFNTIHB1YmxpYyBhYnN0cmFjdCBpbnRlcmZhY2UgamF2YS5sYW5nLmFubm90YXRpb24uQW5ub3RhdGlvbgorbWV0aCBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBlcXVhbHMoamF2YS5sYW5nLk9iamVjdCkKK21ldGggcHVibGljIGFic3RyYWN0IGludCBoYXNoQ29kZSgpCittZXRoIHB1YmxpYyBhYnN0cmFjdCBqYXZhLmxhbmcuQ2xhc3M8PyBleHRlbmRzIGphdmEubGFuZy5hbm5vdGF0aW9uLkFubm90YXRpb24+IGFubm90YXRpb25UeXBlKCkKK21ldGggcHVibGljIGFic3RyYWN0IGphdmEubGFuZy5TdHJpbmcgdG9TdHJpbmcoKQorCitDTFNTIHB1YmxpYyBhYnN0cmFjdCBpbnRlcmZhY2UgIWFubm90YXRpb24gamF2YS5sYW5nLmFubm90YXRpb24uRG9jdW1lbnRlZAorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Eb2N1bWVudGVkKCkKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uKGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeSB2YWx1ZT1SVU5USU1FKQorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5UYXJnZXQoamF2YS5sYW5nLmFubm90YXRpb24uRWxlbWVudFR5cGVbXSB2YWx1ZT1bQU5OT1RBVElPTl9UWVBFXSkKK2ludGYgamF2YS5sYW5nLmFubm90YXRpb24uQW5ub3RhdGlvbgorCitDTFNTIHB1YmxpYyBhYnN0cmFjdCBpbnRlcmZhY2UgIWFubm90YXRpb24gamF2YS5sYW5nLmFubm90YXRpb24uUmVwZWF0YWJsZQorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Eb2N1bWVudGVkKCkKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uKGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeSB2YWx1ZT1SVU5USU1FKQorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5UYXJnZXQoamF2YS5sYW5nLmFubm90YXRpb24uRWxlbWVudFR5cGVbXSB2YWx1ZT1bQU5OT1RBVElPTl9UWVBFXSkKK2ludGYgamF2YS5sYW5nLmFubm90YXRpb24uQW5ub3RhdGlvbgorbWV0aCBwdWJsaWMgYWJzdHJhY3QgamF2YS5sYW5nLkNsYXNzPD8gZXh0ZW5kcyBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Bbm5vdGF0aW9uPiB2YWx1ZSgpCisKK0NMU1MgcHVibGljIGFic3RyYWN0IGludGVyZmFjZSAhYW5ub3RhdGlvbiBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb24KKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uRG9jdW1lbnRlZCgpCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbihqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb25Qb2xpY3kgdmFsdWU9UlVOVElNRSkKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uVGFyZ2V0KGphdmEubGFuZy5hbm5vdGF0aW9uLkVsZW1lbnRUeXBlW10gdmFsdWU9W0FOTk9UQVRJT05fVFlQRV0pCitpbnRmIGphdmEubGFuZy5hbm5vdGF0aW9uLkFubm90YXRpb24KK21ldGggcHVibGljIGFic3RyYWN0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeSB2YWx1ZSgpCisKK0NMU1MgcHVibGljIGFic3RyYWN0IGludGVyZmFjZSAhYW5ub3RhdGlvbiBqYXZhLmxhbmcuYW5ub3RhdGlvbi5UYXJnZXQKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uRG9jdW1lbnRlZCgpCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbihqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb25Qb2xpY3kgdmFsdWU9UlVOVElNRSkKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uVGFyZ2V0KGphdmEubGFuZy5hbm5vdGF0aW9uLkVsZW1lbnRUeXBlW10gdmFsdWU9W0FOTk9UQVRJT05fVFlQRV0pCitpbnRmIGphdmEubGFuZy5hbm5vdGF0aW9uLkFubm90YXRpb24KK21ldGggcHVibGljIGFic3RyYWN0IGphdmEubGFuZy5hbm5vdGF0aW9uLkVsZW1lbnRUeXBlW10gdmFsdWUoKQorCitDTFNTIHB1YmxpYyBhYnN0cmFjdCBpbnRlcmZhY2UgamF2YS5sYW5nLmNvbnN0YW50LkNvbnN0YWJsZQorbWV0aCBwdWJsaWMgYWJzdHJhY3QgamF2YS51dGlsLk9wdGlvbmFsPD8gZXh0ZW5kcyBqYXZhLmxhbmcuY29uc3RhbnQuQ29uc3RhbnREZXNjPiBkZXNjcmliZUNvbnN0YWJsZSgpCisKZGlmZiAtLWdpdCBhL3Rjay9zcmMvbWFpbi9yZXNvdXJjZXMvZWUvamFrYXJ0YS90Y2svYW5ub3RhdGlvbnMvc2lnbmF0dXJldGVzdC9zaWctdGVzdC1wa2ctbGlzdC50eHQgYi90Y2svc3JjL21haW4vcmVzb3VyY2VzL2VlL2pha2FydGEvdGNrL2Fubm90YXRpb25zL3NpZ25hdHVyZXRlc3Qvc2lnLXRlc3QtcGtnLWxpc3QudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMWU5ZDAKLS0tIC9kZXYvbnVsbAorKysgYi90Y2svc3JjL21haW4vcmVzb3VyY2VzL2VlL2pha2FydGEvdGNrL2Fubm90YXRpb25zL3NpZ25hdHVyZXRlc3Qvc2lnLXRlc3QtcGtnLWxpc3QudHh0CkBAIC0wLDAgKzEsMjYgQEAKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE4LCAyMDIwIE9yYWNsZSBhbmQvb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQorIyB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2LiAyLjAsIHdoaWNoIGlzIGF2YWlsYWJsZSBhdAorIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAuCisjCisjIFRoaXMgU291cmNlIENvZGUgbWF5IGFsc28gYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIGZvbGxvd2luZyBTZWNvbmRhcnkKKyMgTGljZW5zZXMgd2hlbiB0aGUgY29uZGl0aW9ucyBmb3Igc3VjaCBhdmFpbGFiaWxpdHkgc2V0IGZvcnRoIGluIHRoZQorIyBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYuIDIuMCBhcmUgc2F0aXNmaWVkOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyMgdmVyc2lvbiAyIHdpdGggdGhlIEdOVSBDbGFzc3BhdGggRXhjZXB0aW9uLCB3aGljaCBpcyBhdmFpbGFibGUgYXQKKyMgaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9jbGFzc3BhdGgvbGljZW5zZS5odG1sLgorIworIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKKyMKKworIyMKKyMgVGhpcyBmaWxlIGNvbnRhaW5zIGEgbGlzdCBvZiBhbGwgdGhlIHBhY2thZ2VzCisjIGNvbnRhaW5lZCBpbiB0aGUgc2lnbmF0dXJlIGZpbGVzIGZvciB0aGlzCisjIGRlbGl2ZXJhYmxlLiAgVGhpcyBmaWxlIGlzIHVzZWQgdG8gZXhjbHVkZSB2YWxpZAorIyBzdWItcGFja2FnZXMgZnJvbSBiZWluZyB2ZXJpZmllZCB3aGVuIHRoZWlyCisjIHBhcmVudCBwYWNrYWdlJ3Mgc2lnbmF0dXJlIGlzIGNoZWNrZWQuCisjIworamFrYXJ0YS5hbm5vdGF0aW9uCitqYWthcnRhLmFubm90YXRpb24uc2VjdXJpdHkKK2pha2FydGEuYW5ub3RhdGlvbi5zcWwKZGlmZiAtLWdpdCBhL3Rjay9zcmMvbWFpbi9yZXNvdXJjZXMvZWUvamFrYXJ0YS90Y2svYW5ub3RhdGlvbnMvc2lnbmF0dXJldGVzdC9zaWctdGVzdC5tYXAgYi90Y2svc3JjL21haW4vcmVzb3VyY2VzL2VlL2pha2FydGEvdGNrL2Fubm90YXRpb25zL3NpZ25hdHVyZXRlc3Qvc2lnLXRlc3QubWFwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1Zjg3NjAKLS0tIC9kZXYvbnVsbAorKysgYi90Y2svc3JjL21haW4vcmVzb3VyY2VzL2VlL2pha2FydGEvdGNrL2Fubm90YXRpb25zL3NpZ25hdHVyZXRlc3Qvc2lnLXRlc3QubWFwCkBAIC0wLDAgKzEsMTYgQEAKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE4LCAyMDI0IE9yYWNsZSBhbmQvb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQorIyB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2LiAyLjAsIHdoaWNoIGlzIGF2YWlsYWJsZSBhdAorIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAuCisjCisjIFRoaXMgU291cmNlIENvZGUgbWF5IGFsc28gYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIGZvbGxvd2luZyBTZWNvbmRhcnkKKyMgTGljZW5zZXMgd2hlbiB0aGUgY29uZGl0aW9ucyBmb3Igc3VjaCBhdmFpbGFiaWxpdHkgc2V0IGZvcnRoIGluIHRoZQorIyBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYuIDIuMCBhcmUgc2F0aXNmaWVkOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyMgdmVyc2lvbiAyIHdpdGggdGhlIEdOVSBDbGFzc3BhdGggRXhjZXB0aW9uLCB3aGljaCBpcyBhdmFpbGFibGUgYXQKKyMgaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9jbGFzc3BhdGgvbGljZW5zZS5odG1sLgorIworIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKKyMKK2pha2FydGEuYW5ub3RhdGlvbj0zLjAKZGlmZiAtLWdpdCBhL3Rjay9zcmMvbWFpbi9yZXNvdXJjZXMvamFrYXJ0YS5hbm5vdGF0aW9uLnNpZ18yLjEgYi90Y2svc3JjL21haW4vcmVzb3VyY2VzL2pha2FydGEuYW5ub3RhdGlvbi5zaWdfMi4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2YTFiZmEKLS0tIC9kZXYvbnVsbAorKysgYi90Y2svc3JjL21haW4vcmVzb3VyY2VzL2pha2FydGEuYW5ub3RhdGlvbi5zaWdfMi4xCkBAIC0wLDAgKzEsMjE2IEBACisjU2lnbmF0dXJlIGZpbGUgdjQuMQorI1ZlcnNpb24gMi4xCisKK0NMU1MgcHVibGljIGFic3RyYWN0IGludGVyZmFjZSAhYW5ub3RhdGlvbiBqYWthcnRhLmFubm90YXRpb24uR2VuZXJhdGVkCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLkRvY3VtZW50ZWQoKQorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb24oamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uUG9saWN5IHZhbHVlPVNPVVJDRSkKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uVGFyZ2V0KGphdmEubGFuZy5hbm5vdGF0aW9uLkVsZW1lbnRUeXBlW10gdmFsdWU9W1BBQ0tBR0UsIFRZUEUsIEFOTk9UQVRJT05fVFlQRSwgTUVUSE9ELCBDT05TVFJVQ1RPUiwgRklFTEQsIExPQ0FMX1ZBUklBQkxFLCBQQVJBTUVURVJdKQoraW50ZiBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Bbm5vdGF0aW9uCittZXRoIHB1YmxpYyBhYnN0cmFjdCAhaGFzZGVmYXVsdCBqYXZhLmxhbmcuU3RyaW5nIGNvbW1lbnRzKCkKK21ldGggcHVibGljIGFic3RyYWN0ICFoYXNkZWZhdWx0IGphdmEubGFuZy5TdHJpbmcgZGF0ZSgpCittZXRoIHB1YmxpYyBhYnN0cmFjdCBqYXZhLmxhbmcuU3RyaW5nW10gdmFsdWUoKQorCitDTFNTIHB1YmxpYyBhYnN0cmFjdCBpbnRlcmZhY2UgIWFubm90YXRpb24gamFrYXJ0YS5hbm5vdGF0aW9uLk1hbmFnZWRCZWFuCisgYW5ubyAwIGphdmEubGFuZy5EZXByZWNhdGVkKGJvb2xlYW4gZm9yUmVtb3ZhbD1mYWxzZSwgamF2YS5sYW5nLlN0cmluZyBzaW5jZT0iIikKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uKGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeSB2YWx1ZT1SVU5USU1FKQorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5UYXJnZXQoamF2YS5sYW5nLmFubm90YXRpb24uRWxlbWVudFR5cGVbXSB2YWx1ZT1bVFlQRV0pCitpbnRmIGphdmEubGFuZy5hbm5vdGF0aW9uLkFubm90YXRpb24KK21ldGggcHVibGljIGFic3RyYWN0ICFoYXNkZWZhdWx0IGphdmEubGFuZy5TdHJpbmcgdmFsdWUoKQorCitDTFNTIHB1YmxpYyBhYnN0cmFjdCBpbnRlcmZhY2UgIWFubm90YXRpb24gamFrYXJ0YS5hbm5vdGF0aW9uLk5vbm51bGwKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uRG9jdW1lbnRlZCgpCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbihqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb25Qb2xpY3kgdmFsdWU9UlVOVElNRSkKK2ludGYgamF2YS5sYW5nLmFubm90YXRpb24uQW5ub3RhdGlvbgorCitDTFNTIHB1YmxpYyBhYnN0cmFjdCBpbnRlcmZhY2UgIWFubm90YXRpb24gamFrYXJ0YS5hbm5vdGF0aW9uLk51bGxhYmxlCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLkRvY3VtZW50ZWQoKQorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb24oamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uUG9saWN5IHZhbHVlPVJVTlRJTUUpCitpbnRmIGphdmEubGFuZy5hbm5vdGF0aW9uLkFubm90YXRpb24KKworQ0xTUyBwdWJsaWMgYWJzdHJhY3QgaW50ZXJmYWNlICFhbm5vdGF0aW9uIGpha2FydGEuYW5ub3RhdGlvbi5Qb3N0Q29uc3RydWN0CisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLkRvY3VtZW50ZWQoKQorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb24oamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uUG9saWN5IHZhbHVlPVJVTlRJTUUpCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLlRhcmdldChqYXZhLmxhbmcuYW5ub3RhdGlvbi5FbGVtZW50VHlwZVtdIHZhbHVlPVtNRVRIT0RdKQoraW50ZiBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Bbm5vdGF0aW9uCisKK0NMU1MgcHVibGljIGFic3RyYWN0IGludGVyZmFjZSAhYW5ub3RhdGlvbiBqYWthcnRhLmFubm90YXRpb24uUHJlRGVzdHJveQorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Eb2N1bWVudGVkKCkKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uKGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeSB2YWx1ZT1SVU5USU1FKQorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5UYXJnZXQoamF2YS5sYW5nLmFubm90YXRpb24uRWxlbWVudFR5cGVbXSB2YWx1ZT1bTUVUSE9EXSkKK2ludGYgamF2YS5sYW5nLmFubm90YXRpb24uQW5ub3RhdGlvbgorCitDTFNTIHB1YmxpYyBhYnN0cmFjdCBpbnRlcmZhY2UgIWFubm90YXRpb24gamFrYXJ0YS5hbm5vdGF0aW9uLlByaW9yaXR5CisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLkRvY3VtZW50ZWQoKQorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb24oamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uUG9saWN5IHZhbHVlPVJVTlRJTUUpCitpbnRmIGphdmEubGFuZy5hbm5vdGF0aW9uLkFubm90YXRpb24KK21ldGggcHVibGljIGFic3RyYWN0IGludCB2YWx1ZSgpCisKK0NMU1MgcHVibGljIGFic3RyYWN0IGludGVyZmFjZSAhYW5ub3RhdGlvbiBqYWthcnRhLmFubm90YXRpb24uUmVzb3VyY2UKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uUmVwZWF0YWJsZShqYXZhLmxhbmcuQ2xhc3M8PyBleHRlbmRzIGphdmEubGFuZy5hbm5vdGF0aW9uLkFubm90YXRpb24+IHZhbHVlPWNsYXNzIGpha2FydGEuYW5ub3RhdGlvbi5SZXNvdXJjZXMpCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbihqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb25Qb2xpY3kgdmFsdWU9UlVOVElNRSkKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uVGFyZ2V0KGphdmEubGFuZy5hbm5vdGF0aW9uLkVsZW1lbnRUeXBlW10gdmFsdWU9W1RZUEUsIEZJRUxELCBNRVRIT0RdKQoraW5uciBwdWJsaWMgZmluYWwgc3RhdGljICFlbnVtIEF1dGhlbnRpY2F0aW9uVHlwZQoraW50ZiBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Bbm5vdGF0aW9uCittZXRoIHB1YmxpYyBhYnN0cmFjdCAhaGFzZGVmYXVsdCBib29sZWFuIHNoYXJlYWJsZSgpCittZXRoIHB1YmxpYyBhYnN0cmFjdCAhaGFzZGVmYXVsdCBqYWthcnRhLmFubm90YXRpb24uUmVzb3VyY2UkQXV0aGVudGljYXRpb25UeXBlIGF1dGhlbnRpY2F0aW9uVHlwZSgpCittZXRoIHB1YmxpYyBhYnN0cmFjdCAhaGFzZGVmYXVsdCBqYXZhLmxhbmcuQ2xhc3M8Pz4gdHlwZSgpCittZXRoIHB1YmxpYyBhYnN0cmFjdCAhaGFzZGVmYXVsdCBqYXZhLmxhbmcuU3RyaW5nIGRlc2NyaXB0aW9uKCkKK21ldGggcHVibGljIGFic3RyYWN0ICFoYXNkZWZhdWx0IGphdmEubGFuZy5TdHJpbmcgbG9va3VwKCkKK21ldGggcHVibGljIGFic3RyYWN0ICFoYXNkZWZhdWx0IGphdmEubGFuZy5TdHJpbmcgbWFwcGVkTmFtZSgpCittZXRoIHB1YmxpYyBhYnN0cmFjdCAhaGFzZGVmYXVsdCBqYXZhLmxhbmcuU3RyaW5nIG5hbWUoKQorCitDTFNTIHB1YmxpYyBmaW5hbCBzdGF0aWMgIWVudW0gamFrYXJ0YS5hbm5vdGF0aW9uLlJlc291cmNlJEF1dGhlbnRpY2F0aW9uVHlwZQorIG91dGVyIGpha2FydGEuYW5ub3RhdGlvbi5SZXNvdXJjZQorZmxkIHB1YmxpYyBmaW5hbCBzdGF0aWMgamFrYXJ0YS5hbm5vdGF0aW9uLlJlc291cmNlJEF1dGhlbnRpY2F0aW9uVHlwZSBBUFBMSUNBVElPTgorZmxkIHB1YmxpYyBmaW5hbCBzdGF0aWMgamFrYXJ0YS5hbm5vdGF0aW9uLlJlc291cmNlJEF1dGhlbnRpY2F0aW9uVHlwZSBDT05UQUlORVIKK21ldGggcHVibGljIHN0YXRpYyBqYWthcnRhLmFubm90YXRpb24uUmVzb3VyY2UkQXV0aGVudGljYXRpb25UeXBlIHZhbHVlT2YoamF2YS5sYW5nLlN0cmluZykKK21ldGggcHVibGljIHN0YXRpYyBqYWthcnRhLmFubm90YXRpb24uUmVzb3VyY2UkQXV0aGVudGljYXRpb25UeXBlW10gdmFsdWVzKCkKK3N1cHIgamF2YS5sYW5nLkVudW08amFrYXJ0YS5hbm5vdGF0aW9uLlJlc291cmNlJEF1dGhlbnRpY2F0aW9uVHlwZT4KKworQ0xTUyBwdWJsaWMgYWJzdHJhY3QgaW50ZXJmYWNlICFhbm5vdGF0aW9uIGpha2FydGEuYW5ub3RhdGlvbi5SZXNvdXJjZXMKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uRG9jdW1lbnRlZCgpCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbihqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb25Qb2xpY3kgdmFsdWU9UlVOVElNRSkKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uVGFyZ2V0KGphdmEubGFuZy5hbm5vdGF0aW9uLkVsZW1lbnRUeXBlW10gdmFsdWU9W1RZUEVdKQoraW50ZiBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Bbm5vdGF0aW9uCittZXRoIHB1YmxpYyBhYnN0cmFjdCBqYWthcnRhLmFubm90YXRpb24uUmVzb3VyY2VbXSB2YWx1ZSgpCisKK0NMU1MgcHVibGljIGFic3RyYWN0IGludGVyZmFjZSAhYW5ub3RhdGlvbiBqYWthcnRhLmFubm90YXRpb24uc2VjdXJpdHkuRGVjbGFyZVJvbGVzCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLkRvY3VtZW50ZWQoKQorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb24oamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uUG9saWN5IHZhbHVlPVJVTlRJTUUpCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLlRhcmdldChqYXZhLmxhbmcuYW5ub3RhdGlvbi5FbGVtZW50VHlwZVtdIHZhbHVlPVtUWVBFXSkKK2ludGYgamF2YS5sYW5nLmFubm90YXRpb24uQW5ub3RhdGlvbgorbWV0aCBwdWJsaWMgYWJzdHJhY3QgamF2YS5sYW5nLlN0cmluZ1tdIHZhbHVlKCkKKworQ0xTUyBwdWJsaWMgYWJzdHJhY3QgaW50ZXJmYWNlICFhbm5vdGF0aW9uIGpha2FydGEuYW5ub3RhdGlvbi5zZWN1cml0eS5EZW55QWxsCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLkRvY3VtZW50ZWQoKQorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb24oamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uUG9saWN5IHZhbHVlPVJVTlRJTUUpCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLlRhcmdldChqYXZhLmxhbmcuYW5ub3RhdGlvbi5FbGVtZW50VHlwZVtdIHZhbHVlPVtUWVBFLCBNRVRIT0RdKQoraW50ZiBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Bbm5vdGF0aW9uCisKK0NMU1MgcHVibGljIGFic3RyYWN0IGludGVyZmFjZSAhYW5ub3RhdGlvbiBqYWthcnRhLmFubm90YXRpb24uc2VjdXJpdHkuUGVybWl0QWxsCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLkRvY3VtZW50ZWQoKQorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb24oamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uUG9saWN5IHZhbHVlPVJVTlRJTUUpCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLlRhcmdldChqYXZhLmxhbmcuYW5ub3RhdGlvbi5FbGVtZW50VHlwZVtdIHZhbHVlPVtUWVBFLCBNRVRIT0RdKQoraW50ZiBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Bbm5vdGF0aW9uCisKK0NMU1MgcHVibGljIGFic3RyYWN0IGludGVyZmFjZSAhYW5ub3RhdGlvbiBqYWthcnRhLmFubm90YXRpb24uc2VjdXJpdHkuUm9sZXNBbGxvd2VkCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLkRvY3VtZW50ZWQoKQorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb24oamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uUG9saWN5IHZhbHVlPVJVTlRJTUUpCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLlRhcmdldChqYXZhLmxhbmcuYW5ub3RhdGlvbi5FbGVtZW50VHlwZVtdIHZhbHVlPVtUWVBFLCBNRVRIT0RdKQoraW50ZiBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Bbm5vdGF0aW9uCittZXRoIHB1YmxpYyBhYnN0cmFjdCBqYXZhLmxhbmcuU3RyaW5nW10gdmFsdWUoKQorCitDTFNTIHB1YmxpYyBhYnN0cmFjdCBpbnRlcmZhY2UgIWFubm90YXRpb24gamFrYXJ0YS5hbm5vdGF0aW9uLnNlY3VyaXR5LlJ1bkFzCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLkRvY3VtZW50ZWQoKQorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb24oamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uUG9saWN5IHZhbHVlPVJVTlRJTUUpCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLlRhcmdldChqYXZhLmxhbmcuYW5ub3RhdGlvbi5FbGVtZW50VHlwZVtdIHZhbHVlPVtUWVBFXSkKK2ludGYgamF2YS5sYW5nLmFubm90YXRpb24uQW5ub3RhdGlvbgorbWV0aCBwdWJsaWMgYWJzdHJhY3QgamF2YS5sYW5nLlN0cmluZyB2YWx1ZSgpCisKK0NMU1MgcHVibGljIGFic3RyYWN0IGludGVyZmFjZSAhYW5ub3RhdGlvbiBqYWthcnRhLmFubm90YXRpb24uc3FsLkRhdGFTb3VyY2VEZWZpbml0aW9uCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLlJlcGVhdGFibGUoamF2YS5sYW5nLkNsYXNzPD8gZXh0ZW5kcyBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Bbm5vdGF0aW9uPiB2YWx1ZT1jbGFzcyBqYWthcnRhLmFubm90YXRpb24uc3FsLkRhdGFTb3VyY2VEZWZpbml0aW9ucykKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uKGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeSB2YWx1ZT1SVU5USU1FKQorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5UYXJnZXQoamF2YS5sYW5nLmFubm90YXRpb24uRWxlbWVudFR5cGVbXSB2YWx1ZT1bVFlQRV0pCitpbnRmIGphdmEubGFuZy5hbm5vdGF0aW9uLkFubm90YXRpb24KK21ldGggcHVibGljIGFic3RyYWN0ICFoYXNkZWZhdWx0IGJvb2xlYW4gdHJhbnNhY3Rpb25hbCgpCittZXRoIHB1YmxpYyBhYnN0cmFjdCAhaGFzZGVmYXVsdCBpbnQgaW5pdGlhbFBvb2xTaXplKCkKK21ldGggcHVibGljIGFic3RyYWN0ICFoYXNkZWZhdWx0IGludCBpc29sYXRpb25MZXZlbCgpCittZXRoIHB1YmxpYyBhYnN0cmFjdCAhaGFzZGVmYXVsdCBpbnQgbG9naW5UaW1lb3V0KCkKK21ldGggcHVibGljIGFic3RyYWN0ICFoYXNkZWZhdWx0IGludCBtYXhJZGxlVGltZSgpCittZXRoIHB1YmxpYyBhYnN0cmFjdCAhaGFzZGVmYXVsdCBpbnQgbWF4UG9vbFNpemUoKQorbWV0aCBwdWJsaWMgYWJzdHJhY3QgIWhhc2RlZmF1bHQgaW50IG1heFN0YXRlbWVudHMoKQorbWV0aCBwdWJsaWMgYWJzdHJhY3QgIWhhc2RlZmF1bHQgaW50IG1pblBvb2xTaXplKCkKK21ldGggcHVibGljIGFic3RyYWN0ICFoYXNkZWZhdWx0IGludCBwb3J0TnVtYmVyKCkKK21ldGggcHVibGljIGFic3RyYWN0ICFoYXNkZWZhdWx0IGphdmEubGFuZy5TdHJpbmcgZGF0YWJhc2VOYW1lKCkKK21ldGggcHVibGljIGFic3RyYWN0ICFoYXNkZWZhdWx0IGphdmEubGFuZy5TdHJpbmcgZGVzY3JpcHRpb24oKQorbWV0aCBwdWJsaWMgYWJzdHJhY3QgIWhhc2RlZmF1bHQgamF2YS5sYW5nLlN0cmluZyBwYXNzd29yZCgpCittZXRoIHB1YmxpYyBhYnN0cmFjdCAhaGFzZGVmYXVsdCBqYXZhLmxhbmcuU3RyaW5nIHNlcnZlck5hbWUoKQorbWV0aCBwdWJsaWMgYWJzdHJhY3QgIWhhc2RlZmF1bHQgamF2YS5sYW5nLlN0cmluZyB1cmwoKQorbWV0aCBwdWJsaWMgYWJzdHJhY3QgIWhhc2RlZmF1bHQgamF2YS5sYW5nLlN0cmluZyB1c2VyKCkKK21ldGggcHVibGljIGFic3RyYWN0ICFoYXNkZWZhdWx0IGphdmEubGFuZy5TdHJpbmdbXSBwcm9wZXJ0aWVzKCkKK21ldGggcHVibGljIGFic3RyYWN0IGphdmEubGFuZy5TdHJpbmcgY2xhc3NOYW1lKCkKK21ldGggcHVibGljIGFic3RyYWN0IGphdmEubGFuZy5TdHJpbmcgbmFtZSgpCisKK0NMU1MgcHVibGljIGFic3RyYWN0IGludGVyZmFjZSAhYW5ub3RhdGlvbiBqYWthcnRhLmFubm90YXRpb24uc3FsLkRhdGFTb3VyY2VEZWZpbml0aW9ucworIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb24oamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uUG9saWN5IHZhbHVlPVJVTlRJTUUpCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLlRhcmdldChqYXZhLmxhbmcuYW5ub3RhdGlvbi5FbGVtZW50VHlwZVtdIHZhbHVlPVtUWVBFXSkKK2ludGYgamF2YS5sYW5nLmFubm90YXRpb24uQW5ub3RhdGlvbgorbWV0aCBwdWJsaWMgYWJzdHJhY3QgamFrYXJ0YS5hbm5vdGF0aW9uLnNxbC5EYXRhU291cmNlRGVmaW5pdGlvbltdIHZhbHVlKCkKKworQ0xTUyBwdWJsaWMgYWJzdHJhY3QgaW50ZXJmYWNlIGphdmEuaW8uU2VyaWFsaXphYmxlCisKK0NMU1MgcHVibGljIGFic3RyYWN0IGludGVyZmFjZSBqYXZhLmxhbmcuQ29tcGFyYWJsZTwlMCBleHRlbmRzIGphdmEubGFuZy5PYmplY3Q+CittZXRoIHB1YmxpYyBhYnN0cmFjdCBpbnQgY29tcGFyZVRvKHtqYXZhLmxhbmcuQ29tcGFyYWJsZSUwfSkKKworQ0xTUyBwdWJsaWMgYWJzdHJhY3QgaW50ZXJmYWNlICFhbm5vdGF0aW9uIGphdmEubGFuZy5EZXByZWNhdGVkCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLkRvY3VtZW50ZWQoKQorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb24oamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uUG9saWN5IHZhbHVlPVJVTlRJTUUpCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLlRhcmdldChqYXZhLmxhbmcuYW5ub3RhdGlvbi5FbGVtZW50VHlwZVtdIHZhbHVlPVtDT05TVFJVQ1RPUiwgRklFTEQsIExPQ0FMX1ZBUklBQkxFLCBNRVRIT0QsIFBBQ0tBR0UsIE1PRFVMRSwgUEFSQU1FVEVSLCBUWVBFXSkKK2ludGYgamF2YS5sYW5nLmFubm90YXRpb24uQW5ub3RhdGlvbgorbWV0aCBwdWJsaWMgYWJzdHJhY3QgIWhhc2RlZmF1bHQgYm9vbGVhbiBmb3JSZW1vdmFsKCkKK21ldGggcHVibGljIGFic3RyYWN0ICFoYXNkZWZhdWx0IGphdmEubGFuZy5TdHJpbmcgc2luY2UoKQorCitDTFNTIHB1YmxpYyBhYnN0cmFjdCBqYXZhLmxhbmcuRW51bTwlMCBleHRlbmRzIGphdmEubGFuZy5FbnVtPHtqYXZhLmxhbmcuRW51bSUwfT4+Citjb25zIHByb3RlY3RlZCBpbml0KGphdmEubGFuZy5TdHJpbmcsaW50KQoraW50ZiBqYXZhLmlvLlNlcmlhbGl6YWJsZQoraW50ZiBqYXZhLmxhbmcuQ29tcGFyYWJsZTx7amF2YS5sYW5nLkVudW0lMH0+CittZXRoIHByb3RlY3RlZCBmaW5hbCBqYXZhLmxhbmcuT2JqZWN0IGNsb25lKCkgdGhyb3dzIGphdmEubGFuZy5DbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbgorbWV0aCBwcm90ZWN0ZWQgZmluYWwgdm9pZCBmaW5hbGl6ZSgpCittZXRoIHB1YmxpYyBmaW5hbCBib29sZWFuIGVxdWFscyhqYXZhLmxhbmcuT2JqZWN0KQorbWV0aCBwdWJsaWMgZmluYWwgaW50IGNvbXBhcmVUbyh7amF2YS5sYW5nLkVudW0lMH0pCittZXRoIHB1YmxpYyBmaW5hbCBpbnQgaGFzaENvZGUoKQorbWV0aCBwdWJsaWMgZmluYWwgaW50IG9yZGluYWwoKQorbWV0aCBwdWJsaWMgZmluYWwgamF2YS5sYW5nLkNsYXNzPHtqYXZhLmxhbmcuRW51bSUwfT4gZ2V0RGVjbGFyaW5nQ2xhc3MoKQorbWV0aCBwdWJsaWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBuYW1lKCkKK21ldGggcHVibGljIGphdmEubGFuZy5TdHJpbmcgdG9TdHJpbmcoKQorbWV0aCBwdWJsaWMgc3RhdGljIDwlMCBleHRlbmRzIGphdmEubGFuZy5FbnVtPHslJTB9Pj4geyUlMH0gdmFsdWVPZihqYXZhLmxhbmcuQ2xhc3M8eyUlMH0+LGphdmEubGFuZy5TdHJpbmcpCitzdXByIGphdmEubGFuZy5PYmplY3QKKworQ0xTUyBwdWJsaWMgamF2YS5sYW5nLk9iamVjdAorY29ucyBwdWJsaWMgaW5pdCgpCittZXRoIHByb3RlY3RlZCBqYXZhLmxhbmcuT2JqZWN0IGNsb25lKCkgdGhyb3dzIGphdmEubGFuZy5DbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbgorbWV0aCBwcm90ZWN0ZWQgdm9pZCBmaW5hbGl6ZSgpIHRocm93cyBqYXZhLmxhbmcuVGhyb3dhYmxlCisgYW5ubyAwIGphdmEubGFuZy5EZXByZWNhdGVkKGJvb2xlYW4gZm9yUmVtb3ZhbD1mYWxzZSwgamF2YS5sYW5nLlN0cmluZyBzaW5jZT0iOSIpCittZXRoIHB1YmxpYyBib29sZWFuIGVxdWFscyhqYXZhLmxhbmcuT2JqZWN0KQorbWV0aCBwdWJsaWMgZmluYWwgamF2YS5sYW5nLkNsYXNzPD8+IGdldENsYXNzKCkKK21ldGggcHVibGljIGZpbmFsIHZvaWQgbm90aWZ5KCkKK21ldGggcHVibGljIGZpbmFsIHZvaWQgbm90aWZ5QWxsKCkKK21ldGggcHVibGljIGZpbmFsIHZvaWQgd2FpdCgpIHRocm93cyBqYXZhLmxhbmcuSW50ZXJydXB0ZWRFeGNlcHRpb24KK21ldGggcHVibGljIGZpbmFsIHZvaWQgd2FpdChsb25nKSB0aHJvd3MgamF2YS5sYW5nLkludGVycnVwdGVkRXhjZXB0aW9uCittZXRoIHB1YmxpYyBmaW5hbCB2b2lkIHdhaXQobG9uZyxpbnQpIHRocm93cyBqYXZhLmxhbmcuSW50ZXJydXB0ZWRFeGNlcHRpb24KK21ldGggcHVibGljIGludCBoYXNoQ29kZSgpCittZXRoIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIHRvU3RyaW5nKCkKKworQ0xTUyBwdWJsaWMgYWJzdHJhY3QgaW50ZXJmYWNlIGphdmEubGFuZy5hbm5vdGF0aW9uLkFubm90YXRpb24KK21ldGggcHVibGljIGFic3RyYWN0IGJvb2xlYW4gZXF1YWxzKGphdmEubGFuZy5PYmplY3QpCittZXRoIHB1YmxpYyBhYnN0cmFjdCBpbnQgaGFzaENvZGUoKQorbWV0aCBwdWJsaWMgYWJzdHJhY3QgamF2YS5sYW5nLkNsYXNzPD8gZXh0ZW5kcyBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Bbm5vdGF0aW9uPiBhbm5vdGF0aW9uVHlwZSgpCittZXRoIHB1YmxpYyBhYnN0cmFjdCBqYXZhLmxhbmcuU3RyaW5nIHRvU3RyaW5nKCkKKworQ0xTUyBwdWJsaWMgYWJzdHJhY3QgaW50ZXJmYWNlICFhbm5vdGF0aW9uIGphdmEubGFuZy5hbm5vdGF0aW9uLkRvY3VtZW50ZWQKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uRG9jdW1lbnRlZCgpCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbihqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb25Qb2xpY3kgdmFsdWU9UlVOVElNRSkKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uVGFyZ2V0KGphdmEubGFuZy5hbm5vdGF0aW9uLkVsZW1lbnRUeXBlW10gdmFsdWU9W0FOTk9UQVRJT05fVFlQRV0pCitpbnRmIGphdmEubGFuZy5hbm5vdGF0aW9uLkFubm90YXRpb24KKworQ0xTUyBwdWJsaWMgYWJzdHJhY3QgaW50ZXJmYWNlICFhbm5vdGF0aW9uIGphdmEubGFuZy5hbm5vdGF0aW9uLlJlcGVhdGFibGUKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uRG9jdW1lbnRlZCgpCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbihqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb25Qb2xpY3kgdmFsdWU9UlVOVElNRSkKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uVGFyZ2V0KGphdmEubGFuZy5hbm5vdGF0aW9uLkVsZW1lbnRUeXBlW10gdmFsdWU9W0FOTk9UQVRJT05fVFlQRV0pCitpbnRmIGphdmEubGFuZy5hbm5vdGF0aW9uLkFubm90YXRpb24KK21ldGggcHVibGljIGFic3RyYWN0IGphdmEubGFuZy5DbGFzczw/IGV4dGVuZHMgamF2YS5sYW5nLmFubm90YXRpb24uQW5ub3RhdGlvbj4gdmFsdWUoKQorCitDTFNTIHB1YmxpYyBhYnN0cmFjdCBpbnRlcmZhY2UgIWFubm90YXRpb24gamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLkRvY3VtZW50ZWQoKQorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb24oamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uUG9saWN5IHZhbHVlPVJVTlRJTUUpCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLlRhcmdldChqYXZhLmxhbmcuYW5ub3RhdGlvbi5FbGVtZW50VHlwZVtdIHZhbHVlPVtBTk5PVEFUSU9OX1RZUEVdKQoraW50ZiBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Bbm5vdGF0aW9uCittZXRoIHB1YmxpYyBhYnN0cmFjdCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb25Qb2xpY3kgdmFsdWUoKQorCitDTFNTIHB1YmxpYyBhYnN0cmFjdCBpbnRlcmZhY2UgIWFubm90YXRpb24gamF2YS5sYW5nLmFubm90YXRpb24uVGFyZ2V0CisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLkRvY3VtZW50ZWQoKQorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb24oamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uUG9saWN5IHZhbHVlPVJVTlRJTUUpCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLlRhcmdldChqYXZhLmxhbmcuYW5ub3RhdGlvbi5FbGVtZW50VHlwZVtdIHZhbHVlPVtBTk5PVEFUSU9OX1RZUEVdKQoraW50ZiBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Bbm5vdGF0aW9uCittZXRoIHB1YmxpYyBhYnN0cmFjdCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5FbGVtZW50VHlwZVtdIHZhbHVlKCkKKwpkaWZmIC0tZ2l0IGEvdGNrL3NyYy9tYWluL3Jlc291cmNlcy9qYWthcnRhLmFubm90YXRpb24uc2lnXzMuMCBiL3Rjay9zcmMvbWFpbi9yZXNvdXJjZXMvamFrYXJ0YS5hbm5vdGF0aW9uLnNpZ18zLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIxMGVmOAotLS0gL2Rldi9udWxsCisrKyBiL3Rjay9zcmMvbWFpbi9yZXNvdXJjZXMvamFrYXJ0YS5hbm5vdGF0aW9uLnNpZ18zLjAKQEAgLTAsMCArMSwyMjMgQEAKKyNTaWduYXR1cmUgZmlsZSB2NC4xCisjVmVyc2lvbiAzLjAuMAorCitDTFNTIHB1YmxpYyBhYnN0cmFjdCBpbnRlcmZhY2UgIWFubm90YXRpb24gamFrYXJ0YS5hbm5vdGF0aW9uLkdlbmVyYXRlZAorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Eb2N1bWVudGVkKCkKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uKGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeSB2YWx1ZT1TT1VSQ0UpCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLlRhcmdldChqYXZhLmxhbmcuYW5ub3RhdGlvbi5FbGVtZW50VHlwZVtdIHZhbHVlPVtQQUNLQUdFLCBUWVBFLCBBTk5PVEFUSU9OX1RZUEUsIE1FVEhPRCwgQ09OU1RSVUNUT1IsIEZJRUxELCBMT0NBTF9WQVJJQUJMRSwgUEFSQU1FVEVSXSkKK2ludGYgamF2YS5sYW5nLmFubm90YXRpb24uQW5ub3RhdGlvbgorbWV0aCBwdWJsaWMgYWJzdHJhY3QgIWhhc2RlZmF1bHQgamF2YS5sYW5nLlN0cmluZyBjb21tZW50cygpCittZXRoIHB1YmxpYyBhYnN0cmFjdCAhaGFzZGVmYXVsdCBqYXZhLmxhbmcuU3RyaW5nIGRhdGUoKQorbWV0aCBwdWJsaWMgYWJzdHJhY3QgamF2YS5sYW5nLlN0cmluZ1tdIHZhbHVlKCkKKworQ0xTUyBwdWJsaWMgYWJzdHJhY3QgaW50ZXJmYWNlICFhbm5vdGF0aW9uIGpha2FydGEuYW5ub3RhdGlvbi5NYW5hZ2VkQmVhbgorIGFubm8gMCBqYXZhLmxhbmcuRGVwcmVjYXRlZChib29sZWFuIGZvclJlbW92YWw9ZmFsc2UsIGphdmEubGFuZy5TdHJpbmcgc2luY2U9IiIpCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbihqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb25Qb2xpY3kgdmFsdWU9UlVOVElNRSkKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uVGFyZ2V0KGphdmEubGFuZy5hbm5vdGF0aW9uLkVsZW1lbnRUeXBlW10gdmFsdWU9W1RZUEVdKQoraW50ZiBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Bbm5vdGF0aW9uCittZXRoIHB1YmxpYyBhYnN0cmFjdCAhaGFzZGVmYXVsdCBqYXZhLmxhbmcuU3RyaW5nIHZhbHVlKCkKKworQ0xTUyBwdWJsaWMgYWJzdHJhY3QgaW50ZXJmYWNlICFhbm5vdGF0aW9uIGpha2FydGEuYW5ub3RhdGlvbi5Ob25udWxsCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLkRvY3VtZW50ZWQoKQorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb24oamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uUG9saWN5IHZhbHVlPVJVTlRJTUUpCitpbnRmIGphdmEubGFuZy5hbm5vdGF0aW9uLkFubm90YXRpb24KKworQ0xTUyBwdWJsaWMgYWJzdHJhY3QgaW50ZXJmYWNlICFhbm5vdGF0aW9uIGpha2FydGEuYW5ub3RhdGlvbi5OdWxsYWJsZQorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Eb2N1bWVudGVkKCkKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uKGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeSB2YWx1ZT1SVU5USU1FKQoraW50ZiBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Bbm5vdGF0aW9uCisKK0NMU1MgcHVibGljIGFic3RyYWN0IGludGVyZmFjZSAhYW5ub3RhdGlvbiBqYWthcnRhLmFubm90YXRpb24uUG9zdENvbnN0cnVjdAorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Eb2N1bWVudGVkKCkKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uKGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeSB2YWx1ZT1SVU5USU1FKQorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5UYXJnZXQoamF2YS5sYW5nLmFubm90YXRpb24uRWxlbWVudFR5cGVbXSB2YWx1ZT1bTUVUSE9EXSkKK2ludGYgamF2YS5sYW5nLmFubm90YXRpb24uQW5ub3RhdGlvbgorCitDTFNTIHB1YmxpYyBhYnN0cmFjdCBpbnRlcmZhY2UgIWFubm90YXRpb24gamFrYXJ0YS5hbm5vdGF0aW9uLlByZURlc3Ryb3kKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uRG9jdW1lbnRlZCgpCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbihqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb25Qb2xpY3kgdmFsdWU9UlVOVElNRSkKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uVGFyZ2V0KGphdmEubGFuZy5hbm5vdGF0aW9uLkVsZW1lbnRUeXBlW10gdmFsdWU9W01FVEhPRF0pCitpbnRmIGphdmEubGFuZy5hbm5vdGF0aW9uLkFubm90YXRpb24KKworQ0xTUyBwdWJsaWMgYWJzdHJhY3QgaW50ZXJmYWNlICFhbm5vdGF0aW9uIGpha2FydGEuYW5ub3RhdGlvbi5Qcmlvcml0eQorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Eb2N1bWVudGVkKCkKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uKGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeSB2YWx1ZT1SVU5USU1FKQoraW50ZiBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Bbm5vdGF0aW9uCittZXRoIHB1YmxpYyBhYnN0cmFjdCBpbnQgdmFsdWUoKQorCitDTFNTIHB1YmxpYyBhYnN0cmFjdCBpbnRlcmZhY2UgIWFubm90YXRpb24gamFrYXJ0YS5hbm5vdGF0aW9uLlJlc291cmNlCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLlJlcGVhdGFibGUoamF2YS5sYW5nLkNsYXNzPD8gZXh0ZW5kcyBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Bbm5vdGF0aW9uPiB2YWx1ZT1jbGFzcyBqYWthcnRhLmFubm90YXRpb24uUmVzb3VyY2VzKQorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb24oamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uUG9saWN5IHZhbHVlPVJVTlRJTUUpCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLlRhcmdldChqYXZhLmxhbmcuYW5ub3RhdGlvbi5FbGVtZW50VHlwZVtdIHZhbHVlPVtUWVBFLCBGSUVMRCwgTUVUSE9EXSkKK2lubnIgcHVibGljIGZpbmFsIHN0YXRpYyAhZW51bSBBdXRoZW50aWNhdGlvblR5cGUKK2ludGYgamF2YS5sYW5nLmFubm90YXRpb24uQW5ub3RhdGlvbgorbWV0aCBwdWJsaWMgYWJzdHJhY3QgIWhhc2RlZmF1bHQgYm9vbGVhbiBzaGFyZWFibGUoKQorbWV0aCBwdWJsaWMgYWJzdHJhY3QgIWhhc2RlZmF1bHQgamFrYXJ0YS5hbm5vdGF0aW9uLlJlc291cmNlJEF1dGhlbnRpY2F0aW9uVHlwZSBhdXRoZW50aWNhdGlvblR5cGUoKQorbWV0aCBwdWJsaWMgYWJzdHJhY3QgIWhhc2RlZmF1bHQgamF2YS5sYW5nLkNsYXNzPD8+IHR5cGUoKQorbWV0aCBwdWJsaWMgYWJzdHJhY3QgIWhhc2RlZmF1bHQgamF2YS5sYW5nLlN0cmluZyBkZXNjcmlwdGlvbigpCittZXRoIHB1YmxpYyBhYnN0cmFjdCAhaGFzZGVmYXVsdCBqYXZhLmxhbmcuU3RyaW5nIGxvb2t1cCgpCittZXRoIHB1YmxpYyBhYnN0cmFjdCAhaGFzZGVmYXVsdCBqYXZhLmxhbmcuU3RyaW5nIG1hcHBlZE5hbWUoKQorbWV0aCBwdWJsaWMgYWJzdHJhY3QgIWhhc2RlZmF1bHQgamF2YS5sYW5nLlN0cmluZyBuYW1lKCkKKworQ0xTUyBwdWJsaWMgZmluYWwgc3RhdGljICFlbnVtIGpha2FydGEuYW5ub3RhdGlvbi5SZXNvdXJjZSRBdXRoZW50aWNhdGlvblR5cGUKKyBvdXRlciBqYWthcnRhLmFubm90YXRpb24uUmVzb3VyY2UKK2ZsZCBwdWJsaWMgZmluYWwgc3RhdGljIGpha2FydGEuYW5ub3RhdGlvbi5SZXNvdXJjZSRBdXRoZW50aWNhdGlvblR5cGUgQVBQTElDQVRJT04KK2ZsZCBwdWJsaWMgZmluYWwgc3RhdGljIGpha2FydGEuYW5ub3RhdGlvbi5SZXNvdXJjZSRBdXRoZW50aWNhdGlvblR5cGUgQ09OVEFJTkVSCittZXRoIHB1YmxpYyBzdGF0aWMgamFrYXJ0YS5hbm5vdGF0aW9uLlJlc291cmNlJEF1dGhlbnRpY2F0aW9uVHlwZSB2YWx1ZU9mKGphdmEubGFuZy5TdHJpbmcpCittZXRoIHB1YmxpYyBzdGF0aWMgamFrYXJ0YS5hbm5vdGF0aW9uLlJlc291cmNlJEF1dGhlbnRpY2F0aW9uVHlwZVtdIHZhbHVlcygpCitzdXByIGphdmEubGFuZy5FbnVtPGpha2FydGEuYW5ub3RhdGlvbi5SZXNvdXJjZSRBdXRoZW50aWNhdGlvblR5cGU+CisKK0NMU1MgcHVibGljIGFic3RyYWN0IGludGVyZmFjZSAhYW5ub3RhdGlvbiBqYWthcnRhLmFubm90YXRpb24uUmVzb3VyY2VzCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLkRvY3VtZW50ZWQoKQorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb24oamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uUG9saWN5IHZhbHVlPVJVTlRJTUUpCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLlRhcmdldChqYXZhLmxhbmcuYW5ub3RhdGlvbi5FbGVtZW50VHlwZVtdIHZhbHVlPVtUWVBFXSkKK2ludGYgamF2YS5sYW5nLmFubm90YXRpb24uQW5ub3RhdGlvbgorbWV0aCBwdWJsaWMgYWJzdHJhY3QgamFrYXJ0YS5hbm5vdGF0aW9uLlJlc291cmNlW10gdmFsdWUoKQorCitDTFNTIHB1YmxpYyBhYnN0cmFjdCBpbnRlcmZhY2UgIWFubm90YXRpb24gamFrYXJ0YS5hbm5vdGF0aW9uLnNlY3VyaXR5LkRlY2xhcmVSb2xlcworIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Eb2N1bWVudGVkKCkKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uKGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeSB2YWx1ZT1SVU5USU1FKQorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5UYXJnZXQoamF2YS5sYW5nLmFubm90YXRpb24uRWxlbWVudFR5cGVbXSB2YWx1ZT1bVFlQRV0pCitpbnRmIGphdmEubGFuZy5hbm5vdGF0aW9uLkFubm90YXRpb24KK21ldGggcHVibGljIGFic3RyYWN0IGphdmEubGFuZy5TdHJpbmdbXSB2YWx1ZSgpCisKK0NMU1MgcHVibGljIGFic3RyYWN0IGludGVyZmFjZSAhYW5ub3RhdGlvbiBqYWthcnRhLmFubm90YXRpb24uc2VjdXJpdHkuRGVueUFsbAorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Eb2N1bWVudGVkKCkKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uKGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeSB2YWx1ZT1SVU5USU1FKQorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5UYXJnZXQoamF2YS5sYW5nLmFubm90YXRpb24uRWxlbWVudFR5cGVbXSB2YWx1ZT1bVFlQRSwgTUVUSE9EXSkKK2ludGYgamF2YS5sYW5nLmFubm90YXRpb24uQW5ub3RhdGlvbgorCitDTFNTIHB1YmxpYyBhYnN0cmFjdCBpbnRlcmZhY2UgIWFubm90YXRpb24gamFrYXJ0YS5hbm5vdGF0aW9uLnNlY3VyaXR5LlBlcm1pdEFsbAorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Eb2N1bWVudGVkKCkKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uKGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeSB2YWx1ZT1SVU5USU1FKQorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5UYXJnZXQoamF2YS5sYW5nLmFubm90YXRpb24uRWxlbWVudFR5cGVbXSB2YWx1ZT1bVFlQRSwgTUVUSE9EXSkKK2ludGYgamF2YS5sYW5nLmFubm90YXRpb24uQW5ub3RhdGlvbgorCitDTFNTIHB1YmxpYyBhYnN0cmFjdCBpbnRlcmZhY2UgIWFubm90YXRpb24gamFrYXJ0YS5hbm5vdGF0aW9uLnNlY3VyaXR5LlJvbGVzQWxsb3dlZAorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Eb2N1bWVudGVkKCkKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uKGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeSB2YWx1ZT1SVU5USU1FKQorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5UYXJnZXQoamF2YS5sYW5nLmFubm90YXRpb24uRWxlbWVudFR5cGVbXSB2YWx1ZT1bVFlQRSwgTUVUSE9EXSkKK2ludGYgamF2YS5sYW5nLmFubm90YXRpb24uQW5ub3RhdGlvbgorbWV0aCBwdWJsaWMgYWJzdHJhY3QgamF2YS5sYW5nLlN0cmluZ1tdIHZhbHVlKCkKKworQ0xTUyBwdWJsaWMgYWJzdHJhY3QgaW50ZXJmYWNlICFhbm5vdGF0aW9uIGpha2FydGEuYW5ub3RhdGlvbi5zZWN1cml0eS5SdW5BcworIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Eb2N1bWVudGVkKCkKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uKGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeSB2YWx1ZT1SVU5USU1FKQorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5UYXJnZXQoamF2YS5sYW5nLmFubm90YXRpb24uRWxlbWVudFR5cGVbXSB2YWx1ZT1bVFlQRV0pCitpbnRmIGphdmEubGFuZy5hbm5vdGF0aW9uLkFubm90YXRpb24KK21ldGggcHVibGljIGFic3RyYWN0IGphdmEubGFuZy5TdHJpbmcgdmFsdWUoKQorCitDTFNTIHB1YmxpYyBhYnN0cmFjdCBpbnRlcmZhY2UgIWFubm90YXRpb24gamFrYXJ0YS5hbm5vdGF0aW9uLnNxbC5EYXRhU291cmNlRGVmaW5pdGlvbgorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXBlYXRhYmxlKGphdmEubGFuZy5DbGFzczw/IGV4dGVuZHMgamF2YS5sYW5nLmFubm90YXRpb24uQW5ub3RhdGlvbj4gdmFsdWU9Y2xhc3MgamFrYXJ0YS5hbm5vdGF0aW9uLnNxbC5EYXRhU291cmNlRGVmaW5pdGlvbnMpCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbihqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb25Qb2xpY3kgdmFsdWU9UlVOVElNRSkKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uVGFyZ2V0KGphdmEubGFuZy5hbm5vdGF0aW9uLkVsZW1lbnRUeXBlW10gdmFsdWU9W1RZUEVdKQoraW50ZiBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Bbm5vdGF0aW9uCittZXRoIHB1YmxpYyBhYnN0cmFjdCAhaGFzZGVmYXVsdCBib29sZWFuIHRyYW5zYWN0aW9uYWwoKQorbWV0aCBwdWJsaWMgYWJzdHJhY3QgIWhhc2RlZmF1bHQgaW50IGluaXRpYWxQb29sU2l6ZSgpCittZXRoIHB1YmxpYyBhYnN0cmFjdCAhaGFzZGVmYXVsdCBpbnQgaXNvbGF0aW9uTGV2ZWwoKQorbWV0aCBwdWJsaWMgYWJzdHJhY3QgIWhhc2RlZmF1bHQgaW50IGxvZ2luVGltZW91dCgpCittZXRoIHB1YmxpYyBhYnN0cmFjdCAhaGFzZGVmYXVsdCBpbnQgbWF4SWRsZVRpbWUoKQorbWV0aCBwdWJsaWMgYWJzdHJhY3QgIWhhc2RlZmF1bHQgaW50IG1heFBvb2xTaXplKCkKK21ldGggcHVibGljIGFic3RyYWN0ICFoYXNkZWZhdWx0IGludCBtYXhTdGF0ZW1lbnRzKCkKK21ldGggcHVibGljIGFic3RyYWN0ICFoYXNkZWZhdWx0IGludCBtaW5Qb29sU2l6ZSgpCittZXRoIHB1YmxpYyBhYnN0cmFjdCAhaGFzZGVmYXVsdCBpbnQgcG9ydE51bWJlcigpCittZXRoIHB1YmxpYyBhYnN0cmFjdCAhaGFzZGVmYXVsdCBqYXZhLmxhbmcuU3RyaW5nIGRhdGFiYXNlTmFtZSgpCittZXRoIHB1YmxpYyBhYnN0cmFjdCAhaGFzZGVmYXVsdCBqYXZhLmxhbmcuU3RyaW5nIGRlc2NyaXB0aW9uKCkKK21ldGggcHVibGljIGFic3RyYWN0ICFoYXNkZWZhdWx0IGphdmEubGFuZy5TdHJpbmcgcGFzc3dvcmQoKQorbWV0aCBwdWJsaWMgYWJzdHJhY3QgIWhhc2RlZmF1bHQgamF2YS5sYW5nLlN0cmluZyBzZXJ2ZXJOYW1lKCkKK21ldGggcHVibGljIGFic3RyYWN0ICFoYXNkZWZhdWx0IGphdmEubGFuZy5TdHJpbmcgdXJsKCkKK21ldGggcHVibGljIGFic3RyYWN0ICFoYXNkZWZhdWx0IGphdmEubGFuZy5TdHJpbmcgdXNlcigpCittZXRoIHB1YmxpYyBhYnN0cmFjdCAhaGFzZGVmYXVsdCBqYXZhLmxhbmcuU3RyaW5nW10gcHJvcGVydGllcygpCittZXRoIHB1YmxpYyBhYnN0cmFjdCBqYXZhLmxhbmcuU3RyaW5nIGNsYXNzTmFtZSgpCittZXRoIHB1YmxpYyBhYnN0cmFjdCBqYXZhLmxhbmcuU3RyaW5nIG5hbWUoKQorCitDTFNTIHB1YmxpYyBhYnN0cmFjdCBpbnRlcmZhY2UgIWFubm90YXRpb24gamFrYXJ0YS5hbm5vdGF0aW9uLnNxbC5EYXRhU291cmNlRGVmaW5pdGlvbnMKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uKGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeSB2YWx1ZT1SVU5USU1FKQorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5UYXJnZXQoamF2YS5sYW5nLmFubm90YXRpb24uRWxlbWVudFR5cGVbXSB2YWx1ZT1bVFlQRV0pCitpbnRmIGphdmEubGFuZy5hbm5vdGF0aW9uLkFubm90YXRpb24KK21ldGggcHVibGljIGFic3RyYWN0IGpha2FydGEuYW5ub3RhdGlvbi5zcWwuRGF0YVNvdXJjZURlZmluaXRpb25bXSB2YWx1ZSgpCisKK0NMU1MgcHVibGljIGFic3RyYWN0IGludGVyZmFjZSBqYXZhLmlvLlNlcmlhbGl6YWJsZQorCitDTFNTIHB1YmxpYyBhYnN0cmFjdCBpbnRlcmZhY2UgamF2YS5sYW5nLkNvbXBhcmFibGU8JTAgZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PgorbWV0aCBwdWJsaWMgYWJzdHJhY3QgaW50IGNvbXBhcmVUbyh7amF2YS5sYW5nLkNvbXBhcmFibGUlMH0pCisKK0NMU1MgcHVibGljIGFic3RyYWN0IGludGVyZmFjZSAhYW5ub3RhdGlvbiBqYXZhLmxhbmcuRGVwcmVjYXRlZAorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Eb2N1bWVudGVkKCkKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uKGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeSB2YWx1ZT1SVU5USU1FKQorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5UYXJnZXQoamF2YS5sYW5nLmFubm90YXRpb24uRWxlbWVudFR5cGVbXSB2YWx1ZT1bQ09OU1RSVUNUT1IsIEZJRUxELCBMT0NBTF9WQVJJQUJMRSwgTUVUSE9ELCBQQUNLQUdFLCBNT0RVTEUsIFBBUkFNRVRFUiwgVFlQRV0pCitpbnRmIGphdmEubGFuZy5hbm5vdGF0aW9uLkFubm90YXRpb24KK21ldGggcHVibGljIGFic3RyYWN0ICFoYXNkZWZhdWx0IGJvb2xlYW4gZm9yUmVtb3ZhbCgpCittZXRoIHB1YmxpYyBhYnN0cmFjdCAhaGFzZGVmYXVsdCBqYXZhLmxhbmcuU3RyaW5nIHNpbmNlKCkKKworQ0xTUyBwdWJsaWMgYWJzdHJhY3QgamF2YS5sYW5nLkVudW08JTAgZXh0ZW5kcyBqYXZhLmxhbmcuRW51bTx7amF2YS5sYW5nLkVudW0lMH0+PgorY29ucyBwcm90ZWN0ZWQgaW5pdChqYXZhLmxhbmcuU3RyaW5nLGludCkKK2lubnIgcHVibGljIGZpbmFsIHN0YXRpYyBFbnVtRGVzYworaW50ZiBqYXZhLmlvLlNlcmlhbGl6YWJsZQoraW50ZiBqYXZhLmxhbmcuQ29tcGFyYWJsZTx7amF2YS5sYW5nLkVudW0lMH0+CitpbnRmIGphdmEubGFuZy5jb25zdGFudC5Db25zdGFibGUKK21ldGggcHJvdGVjdGVkIGZpbmFsIGphdmEubGFuZy5PYmplY3QgY2xvbmUoKSB0aHJvd3MgamF2YS5sYW5nLkNsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uCittZXRoIHByb3RlY3RlZCBmaW5hbCB2b2lkIGZpbmFsaXplKCkKK21ldGggcHVibGljIGZpbmFsIGJvb2xlYW4gZXF1YWxzKGphdmEubGFuZy5PYmplY3QpCittZXRoIHB1YmxpYyBmaW5hbCBpbnQgY29tcGFyZVRvKHtqYXZhLmxhbmcuRW51bSUwfSkKK21ldGggcHVibGljIGZpbmFsIGludCBoYXNoQ29kZSgpCittZXRoIHB1YmxpYyBmaW5hbCBpbnQgb3JkaW5hbCgpCittZXRoIHB1YmxpYyBmaW5hbCBqYXZhLmxhbmcuQ2xhc3M8e2phdmEubGFuZy5FbnVtJTB9PiBnZXREZWNsYXJpbmdDbGFzcygpCittZXRoIHB1YmxpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIG5hbWUoKQorbWV0aCBwdWJsaWMgZmluYWwgamF2YS51dGlsLk9wdGlvbmFsPGphdmEubGFuZy5FbnVtJEVudW1EZXNjPHtqYXZhLmxhbmcuRW51bSUwfT4+IGRlc2NyaWJlQ29uc3RhYmxlKCkKK21ldGggcHVibGljIGphdmEubGFuZy5TdHJpbmcgdG9TdHJpbmcoKQorbWV0aCBwdWJsaWMgc3RhdGljIDwlMCBleHRlbmRzIGphdmEubGFuZy5FbnVtPHslJTB9Pj4geyUlMH0gdmFsdWVPZihqYXZhLmxhbmcuQ2xhc3M8eyUlMH0+LGphdmEubGFuZy5TdHJpbmcpCitzdXByIGphdmEubGFuZy5PYmplY3QKK2hmZHMgbmFtZSxvcmRpbmFsCisKK0NMU1MgcHVibGljIGphdmEubGFuZy5PYmplY3QKK2NvbnMgcHVibGljIGluaXQoKQorbWV0aCBwcm90ZWN0ZWQgamF2YS5sYW5nLk9iamVjdCBjbG9uZSgpIHRocm93cyBqYXZhLmxhbmcuQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24KK21ldGggcHJvdGVjdGVkIHZvaWQgZmluYWxpemUoKSB0aHJvd3MgamF2YS5sYW5nLlRocm93YWJsZQorIGFubm8gMCBqYXZhLmxhbmcuRGVwcmVjYXRlZChib29sZWFuIGZvclJlbW92YWw9ZmFsc2UsIGphdmEubGFuZy5TdHJpbmcgc2luY2U9IjkiKQorbWV0aCBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoamF2YS5sYW5nLk9iamVjdCkKK21ldGggcHVibGljIGZpbmFsIGphdmEubGFuZy5DbGFzczw/PiBnZXRDbGFzcygpCittZXRoIHB1YmxpYyBmaW5hbCB2b2lkIG5vdGlmeSgpCittZXRoIHB1YmxpYyBmaW5hbCB2b2lkIG5vdGlmeUFsbCgpCittZXRoIHB1YmxpYyBmaW5hbCB2b2lkIHdhaXQoKSB0aHJvd3MgamF2YS5sYW5nLkludGVycnVwdGVkRXhjZXB0aW9uCittZXRoIHB1YmxpYyBmaW5hbCB2b2lkIHdhaXQobG9uZykgdGhyb3dzIGphdmEubGFuZy5JbnRlcnJ1cHRlZEV4Y2VwdGlvbgorbWV0aCBwdWJsaWMgZmluYWwgdm9pZCB3YWl0KGxvbmcsaW50KSB0aHJvd3MgamF2YS5sYW5nLkludGVycnVwdGVkRXhjZXB0aW9uCittZXRoIHB1YmxpYyBpbnQgaGFzaENvZGUoKQorbWV0aCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyB0b1N0cmluZygpCisKK0NMU1MgcHVibGljIGFic3RyYWN0IGludGVyZmFjZSBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Bbm5vdGF0aW9uCittZXRoIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGVxdWFscyhqYXZhLmxhbmcuT2JqZWN0KQorbWV0aCBwdWJsaWMgYWJzdHJhY3QgaW50IGhhc2hDb2RlKCkKK21ldGggcHVibGljIGFic3RyYWN0IGphdmEubGFuZy5DbGFzczw/IGV4dGVuZHMgamF2YS5sYW5nLmFubm90YXRpb24uQW5ub3RhdGlvbj4gYW5ub3RhdGlvblR5cGUoKQorbWV0aCBwdWJsaWMgYWJzdHJhY3QgamF2YS5sYW5nLlN0cmluZyB0b1N0cmluZygpCisKK0NMU1MgcHVibGljIGFic3RyYWN0IGludGVyZmFjZSAhYW5ub3RhdGlvbiBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Eb2N1bWVudGVkCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLkRvY3VtZW50ZWQoKQorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb24oamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uUG9saWN5IHZhbHVlPVJVTlRJTUUpCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLlRhcmdldChqYXZhLmxhbmcuYW5ub3RhdGlvbi5FbGVtZW50VHlwZVtdIHZhbHVlPVtBTk5PVEFUSU9OX1RZUEVdKQoraW50ZiBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Bbm5vdGF0aW9uCisKK0NMU1MgcHVibGljIGFic3RyYWN0IGludGVyZmFjZSAhYW5ub3RhdGlvbiBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXBlYXRhYmxlCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLkRvY3VtZW50ZWQoKQorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb24oamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uUG9saWN5IHZhbHVlPVJVTlRJTUUpCisgYW5ubyAwIGphdmEubGFuZy5hbm5vdGF0aW9uLlRhcmdldChqYXZhLmxhbmcuYW5ub3RhdGlvbi5FbGVtZW50VHlwZVtdIHZhbHVlPVtBTk5PVEFUSU9OX1RZUEVdKQoraW50ZiBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Bbm5vdGF0aW9uCittZXRoIHB1YmxpYyBhYnN0cmFjdCBqYXZhLmxhbmcuQ2xhc3M8PyBleHRlbmRzIGphdmEubGFuZy5hbm5vdGF0aW9uLkFubm90YXRpb24+IHZhbHVlKCkKKworQ0xTUyBwdWJsaWMgYWJzdHJhY3QgaW50ZXJmYWNlICFhbm5vdGF0aW9uIGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbgorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Eb2N1bWVudGVkKCkKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uKGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeSB2YWx1ZT1SVU5USU1FKQorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5UYXJnZXQoamF2YS5sYW5nLmFubm90YXRpb24uRWxlbWVudFR5cGVbXSB2YWx1ZT1bQU5OT1RBVElPTl9UWVBFXSkKK2ludGYgamF2YS5sYW5nLmFubm90YXRpb24uQW5ub3RhdGlvbgorbWV0aCBwdWJsaWMgYWJzdHJhY3QgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uUG9saWN5IHZhbHVlKCkKKworQ0xTUyBwdWJsaWMgYWJzdHJhY3QgaW50ZXJmYWNlICFhbm5vdGF0aW9uIGphdmEubGFuZy5hbm5vdGF0aW9uLlRhcmdldAorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Eb2N1bWVudGVkKCkKKyBhbm5vIDAgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uKGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeSB2YWx1ZT1SVU5USU1FKQorIGFubm8gMCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5UYXJnZXQoamF2YS5sYW5nLmFubm90YXRpb24uRWxlbWVudFR5cGVbXSB2YWx1ZT1bQU5OT1RBVElPTl9UWVBFXSkKK2ludGYgamF2YS5sYW5nLmFubm90YXRpb24uQW5ub3RhdGlvbgorbWV0aCBwdWJsaWMgYWJzdHJhY3QgamF2YS5sYW5nLmFubm90YXRpb24uRWxlbWVudFR5cGVbXSB2YWx1ZSgpCisKK0NMU1MgcHVibGljIGFic3RyYWN0IGludGVyZmFjZSBqYXZhLmxhbmcuY29uc3RhbnQuQ29uc3RhYmxlCittZXRoIHB1YmxpYyBhYnN0cmFjdCBqYXZhLnV0aWwuT3B0aW9uYWw8PyBleHRlbmRzIGphdmEubGFuZy5jb25zdGFudC5Db25zdGFudERlc2M+IGRlc2NyaWJlQ29uc3RhYmxlKCkKKwo=