LyoKICogQ29weXJpZ2h0IChjKSAyMDIxLCBBbGxpYW5jZSBmb3IgT3BlbiBNZWRpYS4gQWxsIHJpZ2h0cyByZXNlcnZlZAogKgogKiBUaGlzIHNvdXJjZSBjb2RlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBCU0QgMy1DbGF1c2UgQ2xlYXIgTGljZW5zZQogKiBhbmQgdGhlIEFsbGlhbmNlIGZvciBPcGVuIE1lZGlhIFBhdGVudCBMaWNlbnNlIDEuMC4gSWYgdGhlIEJTRCAzLUNsYXVzZSBDbGVhcgogKiBMaWNlbnNlIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlIGluIHRoZSBMSUNFTlNFIGZpbGUsIHlvdQogKiBjYW4gb2J0YWluIGl0IGF0IGFvbWVkaWEub3JnL2xpY2Vuc2Uvc29mdHdhcmUtbGljZW5zZS9ic2QtMy1jLWMvLiAgSWYgdGhlCiAqIEFsbGlhbmNlIGZvciBPcGVuIE1lZGlhIFBhdGVudCBMaWNlbnNlIDEuMCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcwogKiBzb3VyY2UgY29kZSBpbiB0aGUgUEFURU5UUyBmaWxlLCB5b3UgY2FuIG9idGFpbiBpdCBhdAogKiBhb21lZGlhLm9yZy9saWNlbnNlL3BhdGVudC1saWNlbnNlLy4KICovCgojaWZuZGVmIEFPTV9BVjFfQ09NTU9OX0NPTU1PTl9EQVRBX0hfCiNkZWZpbmUgQU9NX0FWMV9DT01NT05fQ09NTU9OX0RBVEFfSF8KCiNpbmNsdWRlIDxhc3NlcnQuaD4KI2luY2x1ZGUgPHN0ZGJvb2wuaD4KCiNpbmNsdWRlICJhdjEvY29tbW9uL2VudW1zLmgiCiNpbmNsdWRlICJhb20vYW9tX2ludGVnZXIuaCIKI2luY2x1ZGUgImFvbV9kc3AvYW9tX2RzcF9jb21tb24uaCIKCiNpZmRlZiBfX2NwbHVzcGx1cwpleHRlcm4gIkMiIHsKI2VuZGlmCgovLyBMb2cgMiBjb252ZXJzaW9uIGxvb2t1cCB0YWJsZXMgaW4gdW5pdHMgb2YgbW9kZSBpbmZvICg0eDQpLgovLyBUaGUgTWlfV2lkdGhfTG9nMiB0YWJsZSBpbiB0aGUgc3BlYyAoU2VjdGlvbiA5LjMuIENvbnZlcnNpb24gdGFibGVzKS4Kc3RhdGljIGNvbnN0IHVpbnQ4X3QgbWlfc2l6ZV93aWRlX2xvZzJbQkxPQ0tfU0laRVNfQUxMXSA9IHsKICAwLCAwLCAxLCAxLCAxLCAyLCAyLCAyLCAzLCAzLCAzLCA0LCA0LCA0LCA1LCA1LAogIDUsIDYsIDYsIDAsIDIsIDEsIDMsIDIsIDQsIDAsIDMsIDEsIDQsIDAsIDQsCn07Ci8vIFRoZSBNaV9IZWlnaHRfTG9nMiB0YWJsZSBpbiB0aGUgc3BlYyAoU2VjdGlvbiA5LjMuIENvbnZlcnNpb24gdGFibGVzKS4Kc3RhdGljIGNvbnN0IHVpbnQ4X3QgbWlfc2l6ZV9oaWdoX2xvZzJbQkxPQ0tfU0laRVNfQUxMXSA9IHsKICAwLCAxLCAwLCAxLCAyLCAxLCAyLCAzLCAyLCAzLCA0LCAzLCA0LCA1LCA0LCA1LAogIDYsIDUsIDYsIDIsIDAsIDMsIDEsIDQsIDIsIDMsIDAsIDQsIDEsIDQsIDAsCn07CgovLyBXaWR0aC9oZWlnaHQgbG9va3VwIHRhYmxlcyBpbiB1bml0cyBvZiBtb2RlIGluZm8gKDR4NCkuCi8vIFRoZSBOdW1fNHg0X0Jsb2Nrc19XaWRlIHRhYmxlIGluIHRoZSBzcGVjIChTZWN0aW9uIDkuMy4gQ29udmVyc2lvbiB0YWJsZXMpLgpzdGF0aWMgY29uc3QgdWludDhfdCBtaV9zaXplX3dpZGVbQkxPQ0tfU0laRVNfQUxMXSA9IHsKICAxLCAgMSwgIDIsICAyLCAyLCA0LCA0LCA0LCA4LCAgOCwgOCwgMTYsIDE2LCAxNiwgMzIsIDMyLAogIDMyLCA2NCwgNjQsIDEsIDQsIDIsIDgsIDQsIDE2LCAxLCA4LCAyLCAgMTYsIDEsICAxNiwKfTsKCi8vIFRoZSBOdW1fNHg0X0Jsb2Nrc19IaWdoIHRhYmxlIGluIHRoZSBzcGVjIChTZWN0aW9uIDkuMy4gQ29udmVyc2lvbiB0YWJsZXMpLgpzdGF0aWMgY29uc3QgdWludDhfdCBtaV9zaXplX2hpZ2hbQkxPQ0tfU0laRVNfQUxMXSA9IHsKICAxLCAgMiwgIDEsICAyLCA0LCAyLCA0LCA4LCAgNCwgOCwgMTYsIDgsICAxNiwgMzIsIDE2LCAzMiwKICA2NCwgMzIsIDY0LCA0LCAxLCA4LCAyLCAxNiwgNCwgOCwgMSwgIDE2LCAyLCAgMTYsIDEsCn07CgovLyBXaWR0aC9oZWlnaHQgbG9va3VwIHRhYmxlcyBpbiB1bml0cyBvZiBzYW1wbGVzLgovLyBUaGUgQmxvY2tfV2lkdGggdGFibGUgaW4gdGhlIHNwZWMgKFNlY3Rpb24gOS4zLiBDb252ZXJzaW9uIHRhYmxlcykuCnN0YXRpYyBjb25zdCB1aW50MTZfdCBibG9ja19zaXplX3dpZGVbQkxPQ0tfU0laRVNfQUxMXSA9IHsKICA0LCAgIDQsICAgOCwgICA4LCA4LCAgMTYsIDE2LCAxNiwgMzIsIDMyLCAzMiwgNjQsIDY0LCA2NCwgMTI4LCAxMjgsCiAgMTI4LCAyNTYsIDI1NiwgNCwgMTYsIDgsICAzMiwgMTYsIDY0LCA0LCAgMzIsIDgsICA2NCwgNCwgIDY0LAp9OwoKLy8gVGhlIEJsb2NrX0hlaWdodCB0YWJsZSBpbiB0aGUgc3BlYyAoU2VjdGlvbiA5LjMuIENvbnZlcnNpb24gdGFibGVzKS4Kc3RhdGljIGNvbnN0IHVpbnQxNl90IGJsb2NrX3NpemVfaGlnaFtCTE9DS19TSVpFU19BTExdID0gewogIDQsICAgOCwgICA0LCAgIDgsICAxNiwgOCwgIDE2LCAzMiwgMTYsIDMyLCA2NCwgMzIsIDY0LCAxMjgsIDY0LCAxMjgsCiAgMjU2LCAxMjgsIDI1NiwgMTYsIDQsICAzMiwgOCwgIDY0LCAxNiwgMzIsIDQsICA2NCwgOCwgIDY0LCAgNCwKfTsKCi8vIE1hcHMgYSBibG9jayBzaXplIHRvIGEgY29udGV4dC4KLy8gVGhlIFNpemVfR3JvdXAgdGFibGUgaW4gdGhlIHNwZWMgKFNlY3Rpb24gOS4zLiBDb252ZXJzaW9uIHRhYmxlcykuCi8vIEFPTU1JTigzLCBBT01NSU4obWlfc2l6ZV93aWRlX2xvZzIoYnNpemUpLCBtaV9zaXplX2hpZ2hfbG9nMihic2l6ZSkpKQpzdGF0aWMgY29uc3QgdWludDhfdCBzaXplX2dyb3VwX2xvb2t1cFtCTE9DS19TSVpFU19BTExdID0gewogIDAsIDAsIDAsIDEsIDEsIDEsIDIsIDIsIDIsIDMsIDMsIDMsIDMsIDMsIDMsIDMsCiAgMywgMywgMywgMCwgMCwgMSwgMSwgMiwgMiwgMSwgMSwgMiwgMiwgMiwgMiwKfTsKCi8vIE1hcHMgYSBibG9jayBzaXplIHRvIGEgdHJhbnNmb3JtIHBhcnRpdGlvbiBjb250ZXh0LgovLyAxKSAwOiBmb3IgYmxvY2sgc2l6ZXMgZG8gbm90IGFsbG93IDR3YXkgcGFydGl0aW9uCi8vIDIpIEZvciA4eDggPD0gc3F1YXJlIGJsb2NrIHNpemUgPCA2NHg2NCwgYXNzdW1pbmcgaSBtYXBwaW5nIHZhbHVlIGlzIGEgdXNlZAovLyAgICBmb3IgTnhOIHNxdWFyZSBibG9jayBzaXplLCB0aGVuIChpICsgMSkgaXMgdGhlIG1hcHBpbmcgdmFsdWUgb2YgKE4peCgyTikKLy8gICAgYW5kICgyTil4KE4pIHNpemVzLgovLyAzKSBGb3IgYmxvY2sgc2l6ZSA+PSA2NHg2NCwgdGhlIG1hcHBpbmcgdmFsdWUgaXMgNwovLyA0KSBGb3IgMTo0LzQ6MSBhbmQgMTo4Lzg6MSBibG9jayBzaXplcywgbWFwcGluZyB2YWx1ZSBpcyA4CgpzdGF0aWMgY29uc3QgdWludDhfdCBzaXplX3RvX3R4X3BhcnRfZ3JvdXBfbG9va3VwW0JMT0NLX1NJWkVTX0FMTF0gPSB7CiAgMCwgMCwgMCwgMSwgMiwgMiwgMywgNCwgNCwgNSwgNiwgNiwgNywgNywgNywgNywKICA3LCA3LCA3LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4Cn07CgovKgpNYXBzIGEgYmxvY2sgc2l6ZSB0byBhIHRyYW5zZm9ybSBwYXJ0aXRpb24gY29udGV4dC4Kc2l6ZV90b190eF90eXBlX2dyb3VwX3ZlcnRfYW5kX2hvcnpfbG9va3VwIC0gMS0yCnNpemVfdG9fdHhfdHlwZV9ncm91cF92ZXJ0X29yX2hvcnpfbG9va3VwIC0gMC0xMwpzaXplX3RvX3R4X3R5cGVfZ3JvdXBfdmVydF9hbmRfaG9yel9sb29rdXAgLSB1c2VkIHdoZW4gYmxvY2sgY2FuIHN1cHBvcnQKYm90aCB2ZXJ0aWNhbCBhbmQgaG9yaXpvbnRhbCBUWCBwYXJ0aXRpb25zLgpzaXplX3RvX3R4X3R5cGVfZ3JvdXBfdmVydF9vcl9ob3J6X2xvb2t1cCAtIHVzZWQgd2hlbiBibG9jayBjYW4gc3VwcG9ydAplaXRoZXIgdmVydGljYWwgb3IgaG9yaXpvbnRhbCBUWCBwYXJ0aXRpb25zLgowIGluIHNpemVfdG9fdHhfdHlwZV9ncm91cF92ZXJ0X29yX2hvcnpfbG9va3VwIGlzIGNhc2Ugd2hlbiB0aGVyZSB3aWxsIG5vdApiZSBhbnkgVFggcGFydGl0aW9ucyAoVFhfUEFSVElUSU9OX05PTkUpCiovCnN0YXRpYyBjb25zdCB1aW50OF90CiAgICBzaXplX3RvX3R4X3R5cGVfZ3JvdXBfdmVydF9hbmRfaG9yel9sb29rdXBbQkxPQ0tfU0laRVNfQUxMXSA9IHsKICAgICAgQkxPQ0tfSU5WQUxJRCwgIC8vIHVudXNlZAogICAgICBCTE9DS19JTlZBTElELCAgLy8gdW51c2VkCiAgICAgIEJMT0NLX0lOVkFMSUQsICAvLyB1bnVzZWQKICAgICAgMCwKICAgICAgMSwKICAgICAgMiwKICAgICAgMywKICAgICAgNCwKICAgICAgNSwKICAgICAgNiwKICAgICAgNywKICAgICAgOCwKICAgICAgOSwKICAgICAgOSwKICAgICAgOSwKICAgICAgOSwKICAgICAgOSwKICAgICAgOSwKICAgICAgOSwKICAgICAgQkxPQ0tfSU5WQUxJRCwgIC8vIHVudXNlZAogICAgICBCTE9DS19JTlZBTElELCAgLy8gdW51c2VkCiAgICAgIDEwLAogICAgICAxMSwKICAgICAgMTIsCiAgICAgIDEzLAogICAgICBCTE9DS19JTlZBTElELCAgLy8gdW51c2VkCiAgICAgIEJMT0NLX0lOVkFMSUQsICAvLyB1bnVzZWQKICAgICAgMTAsCiAgICAgIDExLAogICAgICBCTE9DS19JTlZBTElELCAgLy8gdW51c2VkCiAgICAgIEJMT0NLX0lOVkFMSUQgICAvLyB1bnVzZWQKICAgIH07CgpzdGF0aWMgY29uc3QgdWludDhfdAogICAgc2l6ZV90b190eF90eXBlX2dyb3VwX3ZlcnRfb3JfaG9yel9sb29rdXBbQkxPQ0tfU0laRVNfQUxMXSA9IHsKICAgICAgMCwKICAgICAgMCwKICAgICAgMCwKICAgICAgQkxPQ0tfSU5WQUxJRCwgIC8vIHVudXNlZAogICAgICBCTE9DS19JTlZBTElELCAgLy8gdW51c2VkCiAgICAgIEJMT0NLX0lOVkFMSUQsICAvLyB1bnVzZWQKICAgICAgQkxPQ0tfSU5WQUxJRCwgIC8vIHVudXNlZAogICAgICBCTE9DS19JTlZBTElELCAgLy8gdW51c2VkCiAgICAgIEJMT0NLX0lOVkFMSUQsICAvLyB1bnVzZWQKICAgICAgQkxPQ0tfSU5WQUxJRCwgIC8vIHVudXNlZAogICAgICBCTE9DS19JTlZBTElELCAgLy8gdW51c2VkCiAgICAgIEJMT0NLX0lOVkFMSUQsICAvLyB1bnVzZWQKICAgICAgQkxPQ0tfSU5WQUxJRCwgIC8vIHVudXNlZAogICAgICBCTE9DS19JTlZBTElELCAgLy8gdW51c2VkCiAgICAgIEJMT0NLX0lOVkFMSUQsICAvLyB1bnVzZWQKICAgICAgQkxPQ0tfSU5WQUxJRCwgIC8vIHVudXNlZAogICAgICBCTE9DS19JTlZBTElELCAgLy8gdW51c2VkCiAgICAgIEJMT0NLX0lOVkFMSUQsICAvLyB1bnVzZWQKICAgICAgQkxPQ0tfSU5WQUxJRCwgIC8vIHVudXNlZAogICAgICAxLAogICAgICAyLAogICAgICBCTE9DS19JTlZBTElELCAgLy8gdW51c2VkCiAgICAgIEJMT0NLX0lOVkFMSUQsICAvLyB1bnVzZWQKICAgICAgQkxPQ0tfSU5WQUxJRCwgIC8vIHVudXNlZAogICAgICBCTE9DS19JTlZBTElELCAgLy8gdW51c2VkCiAgICAgIDEsCiAgICAgIDIsCiAgICAgIEJMT0NLX0lOVkFMSUQsICAvLyB1bnVzZWQKICAgICAgQkxPQ0tfSU5WQUxJRCwgIC8vIHVudXNlZAogICAgICAxLAogICAgICAyCiAgICB9OwoKc3RhdGljIGNvbnN0IHVpbnQ4X3Qgc2l6ZV90b190eF90eXBlX2dyb3VwX2xvb2t1cFtCTE9DS19TSVpFU19BTExdID0gewogIDAsICAwLCAgMCwgIDEsICAyLCAgMywgIDQsICA1LCAgNiwgIDcsICA4LCAgOSwgIDEwLCAxMCwgMTAsIDEwLAogIDEwLCAxMCwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDExLCAxMiwgMTMsIDE0LCAxMSwgMTIKfTsKCnN0YXRpYyBjb25zdCB1aW50OF90IGZzY19ic2l6ZV9ncm91cHNbQkxPQ0tfU0laRVNfQUxMXSA9IHsKICAwLCAxLCAxLCAyLCAzLCAzLCA0LCA1LCA1LCA1LCA2LCA2LCA2LCA2LCA2LCA2LAogIDYsIDYsIDYsIDMsIDMsIDQsIDQsIDYsIDYsIDQsIDQsIDYsIDYsIDYsIDYKfTsKCnN0YXRpYyBjb25zdCB1aW50OF90IG51bV9wZWxzX2xvZzJfbG9va3VwW0JMT0NLX1NJWkVTX0FMTF0gPSB7CiAgNCwgIDUsICA1LCAgNiwgNywgNywgOCwgOSwgIDksICAxMCwgMTEsIDExLCAxMiwgMTMsIDEzLCAxNCwKICAxNSwgMTUsIDE2LCA2LCA2LCA4LCA4LCAxMCwgMTAsIDcsICA3LCAgOSwgIDksICA4LCAgOCwKfTsKCi8vIFN1cHBvcnRlZCB3ZWlnaHRpbmcgZmFjdG9yIGZvciBjb21wb3VuZCB3ZWlnaHRlZCBwcmVkaWN0aW9uCnN0YXRpYyBjb25zdCBpbnQ4X3QgY3dwX3dlaWdodGluZ19mYWN0b3JbMl1bTUFYX0NXUF9OVU1dID0gewogIHsgOCwgMTIsIDQsIDEwLCA2IH0sCiAgeyA4LCAxMiwgNCwgMjAsIC00IH0sCn07CgojaWYgQ09ORklHX1RJUF9FTkhBTkNFTUVOVAovLyBTdXBwb3J0ZWQgd2VpZ2h0aW5nIGZhY3RvciBmb3IgVElQCnN0YXRpYyBjb25zdCBpbnQ4X3QgdGlwX3dlaWdodGluZ19mYWN0b3JzW01BWF9USVBfV1REX05VTV0gPSB7IDgsICAxMiwgMTYsIDE4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMCwgNCwgIDYsICAtNCB9OwojZW5kaWYgIC8vIENPTkZJR19USVBfRU5IQU5DRU1FTlQKCiNpZiBDT05GSUdfVlFfTVZEX0NPRElORwovLyBTdXBwb3J0ZWQgc2V0IG9mIE1WRCB2YWx1ZXMgaW4gdW5pdCBvZiAxLzggcGVsIGZvciBBTVZEIG1vZGUKc3RhdGljIGNvbnN0IGludDE2X3QgYW12ZF9pbmRleF90b19tdmRbTUFYX0FNVkRfSU5ERVggKyAxXSA9IHsgMCwgIDIsICA0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2LCAgOCwgIDE2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMiwgNjQsIDEyOCB9OwojZW5kaWYgIC8vIENPTkZJR19WUV9NVkRfQ09ESU5HCgovKiBjbGFuZy1mb3JtYXQgb2ZmICovCi8vIFRoaXMgdGFibGUgY292ZXJzIGFsbCBibG9jayBzaXplcy4Kc3RhdGljIGNvbnN0IEJMT0NLX1NJWkUKICAgIHN1YnNpemVfbG9va3VwW0FMTF9QQVJUSVRJT05fVFlQRVNdW0JMT0NLX1NJWkVTX0FMTF0gPSB7IHsKICAgIC8vIFBBUlRJVElPTl9OT05FCiAgICBCTE9DS180WDQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA0CiAgICBCTE9DS180WDgsICAgICBCTE9DS184WDQsICAgICBCTE9DS184WDgsICAgICAvLyA4CiAgICBCTE9DS184WDE2LCAgICBCTE9DS18xNlg4LCAgICBCTE9DS18xNlgxNiwgICAvLyAxNgogICAgQkxPQ0tfMTZYMzIsICAgQkxPQ0tfMzJYMTYsICAgQkxPQ0tfMzJYMzIsICAgLy8gMzIKICAgIEJMT0NLXzMyWDY0LCAgIEJMT0NLXzY0WDMyLCAgIEJMT0NLXzY0WDY0LCAgIC8vIDY0CiAgICBCTE9DS182NFgxMjgsICBCTE9DS18xMjhYNjQsICBCTE9DS18xMjhYMTI4LCAvLyAxMjgKICAgIEJMT0NLXzEyOFgyNTYsIEJMT0NLXzI1NlgxMjgsIEJMT0NLXzI1NlgyNTYsIC8vIDI1NgogICAgQkxPQ0tfNFgxNiwgICAgQkxPQ0tfMTZYNCwgICAgICAgICAgICAgICAgICAgLy8gNCwxNgogICAgQkxPQ0tfOFgzMiwgICAgQkxPQ0tfMzJYOCwgICAgICAgICAgICAgICAgICAgLy8gOCwzMgogICAgQkxPQ0tfMTZYNjQsICAgQkxPQ0tfNjRYMTYsICAgICAgICAgICAgICAgICAgLy8gMTYsNjQKICAgIEJMT0NLXzRYMzIsICAgIEJMT0NLXzMyWDQsICAgICAgICAgICAgICAgICAgIC8vIDQsIDMyCiAgICBCTE9DS184WDY0LCAgICBCTE9DS182NFg4LCAgICAgICAgICAgICAgICAgICAvLyA4LCA2NAogICAgQkxPQ0tfNFg2NCwgICAgQkxPQ0tfNjRYNCwgICAgICAgICAgICAgICAgICAgLy8gNCwgNjQKICB9LCB7CiAgICAvLyBQQVJUSVRJT05fSE9SWgogICAgQkxPQ0tfSU5WQUxJRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gNAogICAgQkxPQ0tfNFg0LCAgICAgQkxPQ0tfSU5WQUxJRCwgQkxPQ0tfOFg0LCAgICAgLy8gOAogICAgQkxPQ0tfOFg4LCAgICAgQkxPQ0tfMTZYNCwgICAgQkxPQ0tfMTZYOCwgICAgLy8gMTYKICAgIEJMT0NLXzE2WDE2LCAgIEJMT0NLXzMyWDgsICAgIEJMT0NLXzMyWDE2LCAgIC8vIDMyCiAgICBCTE9DS18zMlgzMiwgICBCTE9DS182NFgxNiwgICBCTE9DS182NFgzMiwgICAvLyA2NAogICAgQkxPQ0tfNjRYNjQsICAgQkxPQ0tfSU5WQUxJRCwgQkxPQ0tfMTI4WDY0LCAgLy8gMTI4CiAgICBCTE9DS18xMjhYMTI4LCBCTE9DS19JTlZBTElELCBCTE9DS18yNTZYMTI4LCAvLyAyNTYKICAgIEJMT0NLXzRYOCwgICAgIEJMT0NLX0lOVkFMSUQsICAgICAgICAgICAgICAgIC8vIDQsMTYKICAgIEJMT0NLXzhYMTYsICAgIEJMT0NLXzMyWDQsICAgICAgICAgICAgICAgICAgIC8vIDgsMzIKICAgIEJMT0NLXzE2WDMyLCAgIEJMT0NLXzY0WDgsICAgICAgICAgICAgICAgICAgIC8vIDE2LDY0CiAgICBCTE9DS180WDE2LCAgICBCTE9DS19JTlZBTElELCAgICAgICAgICAgICAgICAvLyA0LCAzMgogICAgQkxPQ0tfOFgzMiwgICAgQkxPQ0tfNjRYNCwgICAgICAgICAgICAgICAgICAgLy8gOCwgNjQKICAgIEJMT0NLXzRYMzIsICAgIEJMT0NLX0lOVkFMSUQsICAgICAgICAgICAgICAgIC8vIDQsIDY0CiAgfSwgewogICAgLy8gUEFSVElUSU9OX1ZFUlQKICAgIEJMT0NLX0lOVkFMSUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDQKICAgIEJMT0NLX0lOVkFMSUQsIEJMT0NLXzRYNCwgICAgIEJMT0NLXzRYOCwgICAgIC8vIDgKICAgIEJMT0NLXzRYMTYsICAgIEJMT0NLXzhYOCwgICAgIEJMT0NLXzhYMTYsICAgIC8vIDE2CiAgICBCTE9DS184WDMyLCAgICBCTE9DS18xNlgxNiwgICBCTE9DS18xNlgzMiwgICAvLyAzMgogICAgQkxPQ0tfMTZYNjQsICAgQkxPQ0tfMzJYMzIsICAgQkxPQ0tfMzJYNjQsICAgLy8gNjQKICAgIEJMT0NLX0lOVkFMSUQsIEJMT0NLXzY0WDY0LCAgIEJMT0NLXzY0WDEyOCwgIC8vIDEyOAogICAgQkxPQ0tfSU5WQUxJRCwgQkxPQ0tfMTI4WDEyOCwgQkxPQ0tfMTI4WDI1NiwgLy8gMjU2CiAgICBCTE9DS19JTlZBTElELCBCTE9DS184WDQsICAgICAgICAgICAgICAgICAgICAvLyA0LDE2CiAgICBCTE9DS180WDMyLCAgICBCTE9DS18xNlg4LCAgICAgICAgICAgICAgICAgICAvLyA4LDMyCiAgICBCTE9DS184WDY0LCAgICBCTE9DS18zMlgxNiwgICAgICAgICAgICAgICAgICAvLyAxNiw2NAogICAgQkxPQ0tfSU5WQUxJRCwgQkxPQ0tfMTZYNCwgICAgICAgICAgICAgICAgICAgLy8gNCwgMzIKICAgIEJMT0NLXzRYNjQsICAgIEJMT0NLXzMyWDgsICAgICAgICAgICAgICAgICAgIC8vIDgsIDY0CiAgICBCTE9DS19JTlZBTElELCBCTE9DS18zMlg0LCAgICAgICAgICAgICAgICAgICAvLyA0LCA2NAogIH0sIHsKICAgIC8vIFBBUlRJVElPTl9IT1JaXzMKICAgIEJMT0NLX0lOVkFMSUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDQKICAgIEJMT0NLX0lOVkFMSUQsIEJMT0NLX0lOVkFMSUQsIEJMT0NLX0lOVkFMSUQsIC8vIDgKICAgIEJMT0NLXzhYNCwgICAgIEJMT0NLX0lOVkFMSUQsIEJMT0NLXzE2WDQsICAgIC8vIDE2CiAgICBCTE9DS18xNlg4LCAgICBCTE9DS18zMlg0LCBCTE9DS18zMlg4LCAgICAgICAvLyAzMgogICAgQkxPQ0tfMzJYMTYsICAgQkxPQ0tfNjRYOCwgQkxPQ0tfNjRYMTYsICAgICAgLy8gNjQKICAgIEJMT0NLX0lOVkFMSUQsIEJMT0NLX0lOVkFMSUQsIEJMT0NLX0lOVkFMSUQsIC8vIDEyOAogICAgQkxPQ0tfSU5WQUxJRCwgQkxPQ0tfSU5WQUxJRCwgQkxPQ0tfSU5WQUxJRCwgLy8gMjU2CiAgICBCTE9DS19JTlZBTElELCBCTE9DS19JTlZBTElELCAgICAgICAgICAgICAgICAvLyA0LDE2CiAgICBCTE9DS184WDgsICAgICBCTE9DS19JTlZBTElELCAgICAgICAgICAgICAgICAvLyA4LDMyCiAgICBCTE9DS18xNlgxNiwgICBCTE9DS182NFg0LCAgICAgICAgICAgICAgICAgICAvLyAxNiw2NAogICAgQkxPQ0tfSU5WQUxJRCwgQkxPQ0tfSU5WQUxJRCwgICAgICAgICAgICAgICAgLy8gNCwgMzIKICAgIEJMT0NLX0lOVkFMSUQsIEJMT0NLX0lOVkFMSUQsICAgICAgICAgICAgICAgIC8vIDgsIDY0CiAgICBCTE9DS19JTlZBTElELCBCTE9DS19JTlZBTElELCAgICAgICAgICAgICAgICAvLyA0LCA2NAogIH0sIHsKICAgIC8vIFBBUlRJVElPTl9WRVJUXzMKICAgIEJMT0NLX0lOVkFMSUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDQKICAgIEJMT0NLX0lOVkFMSUQsIEJMT0NLX0lOVkFMSUQsIEJMT0NLX0lOVkFMSUQsIC8vIDgKICAgIEJMT0NLX0lOVkFMSUQsIEJMT0NLXzRYOCwgICAgIEJMT0NLXzRYMTYsICAgIC8vIDE2CiAgICBCTE9DS180WDMyLCAgICBCTE9DS184WDE2LCAgICBCTE9DS184WDMyLCAgICAvLyAzMgogICAgQkxPQ0tfOFg2NCwgICAgQkxPQ0tfMTZYMzIsICAgQkxPQ0tfMTZYNjQsICAgLy8gNjQKICAgIEJMT0NLX0lOVkFMSUQsIEJMT0NLX0lOVkFMSUQsIEJMT0NLX0lOVkFMSUQsIC8vIDEyOAogICAgQkxPQ0tfSU5WQUxJRCwgQkxPQ0tfSU5WQUxJRCwgQkxPQ0tfSU5WQUxJRCwgLy8gMjU2CiAgICBCTE9DS19JTlZBTElELCBCTE9DS19JTlZBTElELCAgICAgICAgICAgICAgICAvLyA0LDE2CiAgICBCTE9DS19JTlZBTElELCBCTE9DS184WDgsICAgICAgICAgICAgICAgICAgICAvLyA4LDMyCiAgICBCTE9DS180WDY0LCAgICBCTE9DS18xNlgxNiwgICAgICAgICAgICAgICAgICAvLyAxNiw2NAogICAgQkxPQ0tfSU5WQUxJRCwgQkxPQ0tfSU5WQUxJRCwgICAgICAgICAgICAgICAgLy8gNCwgMzIKICAgIEJMT0NLX0lOVkFMSUQsIEJMT0NLX0lOVkFMSUQsICAgICAgICAgICAgICAgIC8vIDgsIDY0CiAgICBCTE9DS19JTlZBTElELCBCTE9DS19JTlZBTElELCAgICAgICAgICAgICAgICAvLyA0LCA2NAogIH0sIHsgIC8vIFBBUlRJVElPTl9IT1JaXzRBCiAgICBCTE9DS19JTlZBTElELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA0CiAgICBCTE9DS19JTlZBTElELCBCTE9DS19JTlZBTElELCBCTE9DS19JTlZBTElELCAvLyA4CiAgICBCTE9DS19JTlZBTElELCBCTE9DS19JTlZBTElELCBCTE9DS19JTlZBTElELCAvLyAxNgogICAgQkxPQ0tfMTZYNCwgICAgQkxPQ0tfSU5WQUxJRCwgQkxPQ0tfMzJYNCwgICAgLy8gMzIKICAgIEJMT0NLXzMyWDgsICAgIEJMT0NLXzY0WDQsICAgIEJMT0NLXzY0WDgsICAgIC8vIDY0CiAgICBCTE9DS19JTlZBTElELCBCTE9DS19JTlZBTElELCBCTE9DS19JTlZBTElELCAvLyAxMjgKICAgIEJMT0NLX0lOVkFMSUQsIEJMT0NLX0lOVkFMSUQsIEJMT0NLX0lOVkFMSUQsIC8vIDI1NgogICAgQkxPQ0tfSU5WQUxJRCwgQkxPQ0tfSU5WQUxJRCwgICAgICAgICAgICAgICAgLy8gNCwxNgogICAgQkxPQ0tfOFg0LCAgICAgQkxPQ0tfSU5WQUxJRCwgICAgICAgICAgICAgICAgLy8gOCwzMgogICAgQkxPQ0tfMTZYOCwgICAgQkxPQ0tfSU5WQUxJRCwgICAgICAgICAgICAgICAgLy8gMTYsNjQKICAgIEJMT0NLX0lOVkFMSUQsIEJMT0NLX0lOVkFMSUQsICAgICAgICAgICAgICAgIC8vIDQsIDMyCiAgICBCTE9DS19JTlZBTElELCBCTE9DS19JTlZBTElELCAgICAgICAgICAgICAgICAvLyA4LCA2NAogICAgQkxPQ0tfSU5WQUxJRCwgQkxPQ0tfSU5WQUxJRCwgICAgICAgICAgICAgICAgLy8gNCwgNjQKICB9LCB7ICAvLyBQQVJUSVRJT05fSE9SWl80QgogICAgQkxPQ0tfSU5WQUxJRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gNAogICAgQkxPQ0tfSU5WQUxJRCwgQkxPQ0tfSU5WQUxJRCwgQkxPQ0tfSU5WQUxJRCwgLy8gOAogICAgQkxPQ0tfSU5WQUxJRCwgQkxPQ0tfSU5WQUxJRCwgQkxPQ0tfSU5WQUxJRCwgLy8gMTYKICAgIEJMT0NLXzE2WDQsICAgIEJMT0NLX0lOVkFMSUQsIEJMT0NLXzMyWDQsICAgIC8vIDMyCiAgICBCTE9DS18zMlg4LCAgICBCTE9DS182NFg0LCAgICBCTE9DS182NFg4LCAgICAvLyA2NAogICAgQkxPQ0tfSU5WQUxJRCwgQkxPQ0tfSU5WQUxJRCwgQkxPQ0tfSU5WQUxJRCwgLy8gMTI4CiAgICBCTE9DS19JTlZBTElELCBCTE9DS19JTlZBTElELCBCTE9DS19JTlZBTElELCAvLyAyNTYKICAgIEJMT0NLX0lOVkFMSUQsIEJMT0NLX0lOVkFMSUQsICAgICAgICAgICAgICAgIC8vIDQsMTYKICAgIEJMT0NLXzhYNCwgICAgIEJMT0NLX0lOVkFMSUQsICAgICAgICAgICAgICAgIC8vIDgsMzIKICAgIEJMT0NLXzE2WDgsICAgIEJMT0NLX0lOVkFMSUQsICAgICAgICAgICAgICAgIC8vIDE2LDY0CiAgICBCTE9DS19JTlZBTElELCBCTE9DS19JTlZBTElELCAgICAgICAgICAgICAgICAvLyA0LCAzMgogICAgQkxPQ0tfSU5WQUxJRCwgQkxPQ0tfSU5WQUxJRCwgICAgICAgICAgICAgICAgLy8gOCwgNjQKICAgIEJMT0NLX0lOVkFMSUQsIEJMT0NLX0lOVkFMSUQsICAgICAgICAgICAgICAgIC8vIDQsIDY0CiAgfSwgeyAgLy8gUEFSVElUSU9OX1ZFUlRfNEEKICAgIEJMT0NLX0lOVkFMSUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDQKICAgIEJMT0NLX0lOVkFMSUQsIEJMT0NLX0lOVkFMSUQsIEJMT0NLX0lOVkFMSUQsIC8vIDgKICAgIEJMT0NLX0lOVkFMSUQsIEJMT0NLX0lOVkFMSUQsIEJMT0NLX0lOVkFMSUQsIC8vIDE2CiAgICBCTE9DS19JTlZBTElELCBCTE9DS180WDE2LCAgICBCTE9DS180WDMyLCAgICAvLyAzMgogICAgQkxPQ0tfNFg2NCwgICAgQkxPQ0tfOFgzMiwgICAgQkxPQ0tfOFg2NCwgICAgLy8gNjQKICAgIEJMT0NLX0lOVkFMSUQsIEJMT0NLX0lOVkFMSUQsIEJMT0NLX0lOVkFMSUQsIC8vIDEyOAogICAgQkxPQ0tfSU5WQUxJRCwgQkxPQ0tfSU5WQUxJRCwgQkxPQ0tfSU5WQUxJRCwgLy8gMjU2CiAgICBCTE9DS19JTlZBTElELCBCTE9DS19JTlZBTElELCAgICAgICAgICAgICAgICAvLyA0LDE2CiAgICBCTE9DS19JTlZBTElELCBCTE9DS180WDgsICAgICAgICAgICAgICAgICAgICAvLyA4LDMyCiAgICBCTE9DS19JTlZBTElELCBCTE9DS184WDE2LCAgICAgICAgICAgICAgICAgICAvLyAxNiw2NAogICAgQkxPQ0tfSU5WQUxJRCwgQkxPQ0tfSU5WQUxJRCwgICAgICAgICAgICAgICAgLy8gNCwgMzIKICAgIEJMT0NLX0lOVkFMSUQsIEJMT0NLX0lOVkFMSUQsICAgICAgICAgICAgICAgIC8vIDgsIDY0CiAgICBCTE9DS19JTlZBTElELCBCTE9DS19JTlZBTElELCAgICAgICAgICAgICAgICAvLyA0LCA2NAogIH0sIHsgIC8vIFBBUlRJVElPTl9WRVJUXzRCCiAgICAgQkxPQ0tfSU5WQUxJRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gNAogICAgQkxPQ0tfSU5WQUxJRCwgQkxPQ0tfSU5WQUxJRCwgQkxPQ0tfSU5WQUxJRCwgLy8gOAogICAgQkxPQ0tfSU5WQUxJRCwgQkxPQ0tfSU5WQUxJRCwgQkxPQ0tfSU5WQUxJRCwgLy8gMTYKICAgIEJMT0NLX0lOVkFMSUQsIEJMT0NLXzRYMTYsICAgIEJMT0NLXzRYMzIsICAgIC8vIDMyCiAgICBCTE9DS180WDY0LCAgICBCTE9DS184WDMyLCAgICBCTE9DS184WDY0LCAgICAvLyA2NAogICAgQkxPQ0tfSU5WQUxJRCwgQkxPQ0tfSU5WQUxJRCwgQkxPQ0tfSU5WQUxJRCwgLy8gMTI4CiAgICBCTE9DS19JTlZBTElELCBCTE9DS19JTlZBTElELCBCTE9DS19JTlZBTElELCAvLyAyNTYKICAgIEJMT0NLX0lOVkFMSUQsIEJMT0NLX0lOVkFMSUQsICAgICAgICAgICAgICAgIC8vIDQsMTYKICAgIEJMT0NLX0lOVkFMSUQsIEJMT0NLXzRYOCwgICAgICAgICAgICAgICAgICAgIC8vIDgsMzIKICAgIEJMT0NLX0lOVkFMSUQsIEJMT0NLXzhYMTYsICAgICAgICAgICAgICAgICAgIC8vIDE2LDY0CiAgICBCTE9DS19JTlZBTElELCBCTE9DS19JTlZBTElELCAgICAgICAgICAgICAgICAvLyA0LCAzMgogICAgQkxPQ0tfSU5WQUxJRCwgQkxPQ0tfSU5WQUxJRCwgICAgICAgICAgICAgICAgLy8gOCwgNjQKICAgIEJMT0NLX0lOVkFMSUQsIEJMT0NLX0lOVkFMSUQsICAgICAgICAgICAgICAgIC8vIDQsIDY0CiAgfSwgewogICAgLy8gUEFSVElUSU9OX1NQTElUCiAgICBCTE9DS19JTlZBTElELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA0CiAgICBCTE9DS19JTlZBTElELCBCTE9DS19JTlZBTElELCBCTE9DS180WDQsICAgICAvLyA4CiAgICBCTE9DS19JTlZBTElELCBCTE9DS19JTlZBTElELCBCTE9DS184WDgsICAgICAvLyAxNgogICAgQkxPQ0tfSU5WQUxJRCwgQkxPQ0tfSU5WQUxJRCwgQkxPQ0tfMTZYMTYsICAgLy8gMzIKICAgIEJMT0NLX0lOVkFMSUQsIEJMT0NLX0lOVkFMSUQsIEJMT0NLXzMyWDMyLCAgIC8vIDY0CiAgICBCTE9DS19JTlZBTElELCBCTE9DS19JTlZBTElELCBCTE9DS182NFg2NCwgICAvLyAxMjgKICAgIEJMT0NLX0lOVkFMSUQsIEJMT0NLX0lOVkFMSUQsIEJMT0NLXzEyOFgxMjgsIC8vIDI1NgogICAgQkxPQ0tfSU5WQUxJRCwgQkxPQ0tfSU5WQUxJRCwgICAgICAgICAgICAgICAgLy8gNCwxNgogICAgQkxPQ0tfSU5WQUxJRCwgQkxPQ0tfSU5WQUxJRCwgICAgICAgICAgICAgICAgLy8gOCwzMgogICAgQkxPQ0tfSU5WQUxJRCwgQkxPQ0tfSU5WQUxJRCwgICAgICAgICAgICAgICAgLy8gMTYsNjQKICAgIEJMT0NLX0lOVkFMSUQsIEJMT0NLX0lOVkFMSUQsICAgICAgICAgICAgICAgIC8vIDQsIDMyCiAgICBCTE9DS19JTlZBTElELCBCTE9DS19JTlZBTElELCAgICAgICAgICAgICAgICAvLyA4LCA2NAogICAgQkxPQ0tfSU5WQUxJRCwgQkxPQ0tfSU5WQUxJRCwgICAgICAgICAgICAgICAgLy8gNCwgNjQKICB9LAp9OwovKiBjbGFuZy1mb3JtYXQgb24gKi8KCnN0YXRpYyBBT01fSU5MSU5FIFBBUlRJVElPTl9UWVBFIHNkcF9jaHJvbWFfcGFydF9mcm9tX2x1bWEoCiAgICBCTE9DS19TSVpFIGJzaXplLCBQQVJUSVRJT05fVFlQRSBsdW1hX3BhcnQsIGludCBzc3gsIGludCBzc3kpIHsKICBjb25zdCBpbnQgYmhfY2hyID0gYmxvY2tfc2l6ZV9oaWdoW2JzaXplXSA+PiBzc3k7CiAgY29uc3QgaW50IGJ3X2NociA9IGJsb2NrX3NpemVfd2lkZVtic2l6ZV0gPj4gc3N4OwogIGFzc2VydChiaF9jaHIgPj0gMTYgJiYgYndfY2hyID49IDE2ICYmCiAgICAgICAgICJDdXJyZW50IGltcGxlbWVudGF0aW9uIGNhbm5vdCBoYW5kbGUgU0RQIGZvciBzdWIgMTZ4MTYgYmxvY2tzISIpOwoKICBzd2l0Y2ggKGx1bWFfcGFydCkgewogICAgY2FzZSBQQVJUSVRJT05fTk9ORTogcmV0dXJuIFBBUlRJVElPTl9OT05FOwogICAgY2FzZSBQQVJUSVRJT05fSE9SWjogcmV0dXJuIChiaF9jaHIgPCA4KSA/IFBBUlRJVElPTl9OT05FIDogUEFSVElUSU9OX0hPUlo7CiAgICBjYXNlIFBBUlRJVElPTl9WRVJUOiByZXR1cm4gKGJ3X2NociA8IDgpID8gUEFSVElUSU9OX05PTkUgOiBQQVJUSVRJT05fVkVSVDsKICAgIGNhc2UgUEFSVElUSU9OX0hPUlpfNEE6CiAgICAgIGlmIChiaF9jaHIgPj0gMzIpIHsKICAgICAgICByZXR1cm4gUEFSVElUSU9OX0hPUlpfNEE7CiAgICAgIH0gZWxzZSBpZiAoYmhfY2hyID49IDgpIHsKICAgICAgICByZXR1cm4gUEFSVElUSU9OX0hPUlo7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIFBBUlRJVElPTl9OT05FOwogICAgICB9CiAgICBjYXNlIFBBUlRJVElPTl9IT1JaXzRCOgogICAgICBpZiAoYmhfY2hyID49IDMyKSB7CiAgICAgICAgcmV0dXJuIFBBUlRJVElPTl9IT1JaXzRCOwogICAgICB9IGVsc2UgaWYgKGJoX2NociA+PSA4KSB7CiAgICAgICAgcmV0dXJuIFBBUlRJVElPTl9IT1JaOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBQQVJUSVRJT05fTk9ORTsKICAgICAgfQogICAgY2FzZSBQQVJUSVRJT05fVkVSVF80QToKICAgICAgaWYgKGJ3X2NociA+PSAzMikgewogICAgICAgIHJldHVybiBQQVJUSVRJT05fVkVSVF80QTsKICAgICAgfSBlbHNlIGlmIChid19jaHIgPj0gOCkgewogICAgICAgIHJldHVybiBQQVJUSVRJT05fVkVSVDsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gUEFSVElUSU9OX05PTkU7CiAgICAgIH0KICAgIGNhc2UgUEFSVElUSU9OX1ZFUlRfNEI6CiAgICAgIGlmIChid19jaHIgPj0gMzIpIHsKICAgICAgICByZXR1cm4gUEFSVElUSU9OX1ZFUlRfNEI7CiAgICAgIH0gZWxzZSBpZiAoYndfY2hyID49IDgpIHsKICAgICAgICByZXR1cm4gUEFSVElUSU9OX1ZFUlQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIFBBUlRJVElPTl9OT05FOwogICAgICB9CiAgICBjYXNlIFBBUlRJVElPTl9IT1JaXzM6CiAgICAgIGlmIChiaF9jaHIgPj0gMTYpCiAgICAgICAgcmV0dXJuIFBBUlRJVElPTl9IT1JaXzM7CiAgICAgIGVsc2UKICAgICAgICByZXR1cm4gKGJoX2NociA8IDgpID8gUEFSVElUSU9OX05PTkUgOiBQQVJUSVRJT05fSE9SWjsKICAgIGNhc2UgUEFSVElUSU9OX1ZFUlRfMzoKICAgICAgaWYgKGJ3X2NociA+PSAxNikKICAgICAgICByZXR1cm4gUEFSVElUSU9OX1ZFUlRfMzsKICAgICAgZWxzZQogICAgICAgIHJldHVybiAoYndfY2hyIDwgOCkgPyBQQVJUSVRJT05fTk9ORSA6IFBBUlRJVElPTl9WRVJUOwogICAgY2FzZSBQQVJUSVRJT05fU1BMSVQ6CiAgICAgIHJldHVybiAoYmhfY2hyIDwgOCB8fCBid19jaHIgPCA4KSA/IFBBUlRJVElPTl9OT05FIDogUEFSVElUSU9OX1NQTElUOwogICAgY2FzZSBQQVJUSVRJT05fSU5WQUxJRDogcmV0dXJuIFBBUlRJVElPTl9JTlZBTElEOwogICAgZGVmYXVsdDogYXNzZXJ0KDApOwogIH0KICByZXR1cm4gUEFSVElUSU9OX0lOVkFMSUQ7Cn0KCi8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KCnN0YXRpYyBjb25zdCBUWF9TSVpFIG1heF90eHNpemVfbG9va3VwW0JMT0NLX1NJWkVTX0FMTF0gPSB7CiAgLy8gICAgICAgICAgICAgICAgICAgNFg0CiAgICAgICAgICAgICAgICAgICAgICAgVFhfNFg0LAogIC8vIDRYOCwgICAgOFg0LCAgICAgIDhYOAogIFRYXzRYNCwgICAgVFhfNFg0LCAgIFRYXzhYOCwKICAvLyA4WDE2LCAgIDE2WDgsICAgICAxNlgxNgogIFRYXzhYOCwgICAgVFhfOFg4LCAgIFRYXzE2WDE2LAogIC8vIDE2WDMyLCAgMzJYMTYsICAgIDMyWDMyCiAgVFhfMTZYMTYsICBUWF8xNlgxNiwgVFhfMzJYMzIsCiAgLy8gMzJYNjQsICA2NFgzMiwKICBUWF8zMlgzMiwgIFRYXzMyWDMyLAogIC8vIDY0WDY0CiAgVFhfNjRYNjQsCiAgLy8gNjR4MTI4LCAxMjh4NjQsICAgMTI4eDEyOAogIFRYXzY0WDY0LCAgVFhfNjRYNjQsIFRYXzY0WDY0LAogIC8vIDEyOFgyNTYsMjU2WDEyOCwgIDI1NlgyNTYKICBUWF82NFg2NCwgIFRYXzY0WDY0LCBUWF82NFg2NCwKICAvLyA0eDE2LCAgIDE2eDQsICAgICA4eDMyCiAgVFhfNFg0LCAgICBUWF80WDQsICAgVFhfOFg4LAogIC8vIDMyeDgsICAgMTZ4NjQsICAgIDY0eDE2CiAgVFhfOFg4LCAgICBUWF8xNlgxNiwgVFhfMTZYMTYsCiAgLy8gNHgzMiwgICAzMng0LCAgICAgOHg2NAogIFRYXzRYNCwgICAgVFhfNFg0LCAgIFRYXzhYOCwKICAvLyA2NHg4LCAgIDR4NjQsICAgICA2NHg0CiAgVFhfOFg4LCAgICBUWF80WDQsICAgVFhfNFg0LAp9OwoKc3RhdGljIGNvbnN0IFRYX1NJWkUgbWF4X3R4c2l6ZV9yZWN0X2xvb2t1cFtCTE9DS19TSVpFU19BTExdID0gewogICAgICAvLyA0WDQKICAgICAgVFhfNFg0LAogICAgICAvLyA0WDgsICAgIDhYNCwgICAgICA4WDgKICAgICAgVFhfNFg4LCAgICBUWF84WDQsICAgVFhfOFg4LAogICAgICAvLyA4WDE2LCAgIDE2WDgsICAgICAxNlgxNgogICAgICBUWF84WDE2LCAgIFRYXzE2WDgsICBUWF8xNlgxNiwKICAgICAgLy8gMTZYMzIsICAzMlgxNiwgICAgMzJYMzIKICAgICAgVFhfMTZYMzIsICBUWF8zMlgxNiwgVFhfMzJYMzIsCiAgICAgIC8vIDMyWDY0LCAgNjRYMzIsCiAgICAgIFRYXzMyWDY0LCAgVFhfNjRYMzIsCiAgICAgIC8vIDY0WDY0CiAgICAgIFRYXzY0WDY0LAogICAgICAvLyA2NHgxMjgsIDEyOHg2NCwgICAxMjh4MTI4CiAgICAgIFRYXzY0WDY0LCAgVFhfNjRYNjQsIFRYXzY0WDY0LAogICAgICAvLyAxMjhYMjU2LDI1NlgxMjgsICAyNTZYMjU2CiAgICAgIFRYXzY0WDY0LCAgVFhfNjRYNjQsIFRYXzY0WDY0LAogICAgICAvLyA0eDE2LCAgIDE2eDQsCiAgICAgIFRYXzRYMTYsICAgVFhfMTZYNCwKICAgICAgLy8gOHgzMiwgICAzMng4CiAgICAgIFRYXzhYMzIsICAgVFhfMzJYOCwKICAgICAgLy8gMTZ4NjQsICA2NHgxNgogICAgICBUWF8xNlg2NCwgIFRYXzY0WDE2LAogICAgICAvLyA0eDMyLCAgIDMyeDQsCiAgICAgIFRYXzRYMzIsICAgVFhfMzJYNCwKICAgICAgLy8gOHg2NCwgICA2NHg4CiAgICAgIFRYXzhYNjQsICAgVFhfNjRYOCwKICAgICAgLy8gNHg2NCwgICA2NHg0CiAgICAgIFRYXzRYNjQsICAgVFhfNjRYNAp9OwoKI2lmIENPTkZJR19MT1NTTEVTU19MQVJHRVJfSURUWApzdGF0aWMgY29uc3QgVFhfU0laRSBsb3NzbGVzc19tYXhfdHhzaXplX2xvb2t1cFtCTE9DS19TSVpFU19BTExdID0gewogICAgICAvLyA0WDQKICAgICAgVFhfNFg0LAogICAgICAvLyA0WDgsICAgIDhYNCwgICAgICA4WDgKICAgICAgVFhfNFg4LCAgICBUWF84WDQsICAgVFhfOFg4LAogICAgICAvLyA4WDE2LCAgIDE2WDgsICAgICAxNlgxNgogICAgICBUWF84WDE2LCAgIFRYXzE2WDgsICBUWF8xNlgxNiwKICAgICAgLy8gMTZYMzIsICAzMlgxNiwgICAgMzJYMzIKICAgICAgVFhfMTZYMzIsICBUWF8zMlgxNiwgVFhfMzJYMzIsCiAgICAgIC8vIDMyWDY0LCAgNjRYMzIsCiAgICAgIFRYXzMyWDMyLCAgVFhfMzJYMzIsCiAgICAgIC8vIDY0WDY0CiAgICAgIFRYXzMyWDMyLAogICAgICAvLyA2NHgxMjgsIDEyOHg2NCwgICAxMjh4MTI4CiAgICAgIFRYXzMyWDMyLCAgVFhfMzJYMzIsIFRYXzMyWDMyLAogICAgICAvLyAxMjhYMjU2LDI1NlgxMjgsICAyNTZYMjU2CiAgICAgIFRYXzMyWDMyLCAgVFhfMzJYMzIsIFRYXzMyWDMyLAogICAgICAvLyA0eDE2LCAgIDE2eDQsCiAgICAgIFRYXzRYMTYsICAgVFhfMTZYNCwKICAgICAgLy8gOHgzMiwgICAzMng4CiAgICAgIFRYXzhYMzIsICAgVFhfMzJYOCwKICAgICAgLy8gMTZ4NjQsICA2NHgxNgogICAgICBUWF8xNlgzMiwgIFRYXzMyWDE2LAogICAgICAvLyA0eDMyLCAgIDMyeDQsCiAgICAgIFRYXzRYMzIsICAgVFhfMzJYNCwKICAgICAgLy8gOHg2NCwgICA2NHg4CiAgICAgIFRYXzhYMzIsICAgVFhfMzJYOCwKICAgICAgLy8gNHg2NCwgICA2NHg0CiAgICAgIFRYXzRYMzIsICAgVFhfMzJYNAp9OwojZW5kaWYgIC8vIENPTkZJR19MT1NTTEVTU19MQVJHRVJfSURUWAoKc3RhdGljIGNvbnN0IFRYX1RZUEVfMUQgdnR4X3RhYltUWF9UWVBFU10gPSB7CiAgRENUXzFELCAgICAgIEFEU1RfMUQsIERDVF8xRCwgICAgICBBRFNUXzFELAogIEZMSVBBRFNUXzFELCBEQ1RfMUQsICBGTElQQURTVF8xRCwgQURTVF8xRCwgRkxJUEFEU1RfMUQsIElEVFhfMUQsCiAgRENUXzFELCAgICAgIElEVFhfMUQsIEFEU1RfMUQsICAgICBJRFRYXzFELCBGTElQQURTVF8xRCwgSURUWF8xRCwKfTsKCnN0YXRpYyBjb25zdCBUWF9UWVBFXzFEIGh0eF90YWJbVFhfVFlQRVNdID0gewogIERDVF8xRCwgIERDVF8xRCwgICAgICBBRFNUXzFELCAgICAgQURTVF8xRCwKICBEQ1RfMUQsICBGTElQQURTVF8xRCwgRkxJUEFEU1RfMUQsIEZMSVBBRFNUXzFELCBBRFNUXzFELCBJRFRYXzFELAogIElEVFhfMUQsIERDVF8xRCwgICAgICBJRFRYXzFELCAgICAgQURTVF8xRCwgICAgIElEVFhfMUQsIEZMSVBBRFNUXzFELAp9OwoKI2RlZmluZSBUWFNJWkVfQ0FUX0lOVkFMSUQgKC0xKQoKLyogY2xhbmctZm9ybWF0IG9uICovCgojaWYgQ09ORklHX0lOU1BFQ1RJT04KLy8gU21hbGxlc3Qgc3ViX3R4IHNpemUgdW5pdHMuIFVzZWQgdG8gY29tcHV0ZSB0aGUgaW5kZXggaW4gdGhlCi8vIHR4IHR5cGUgbWFwLgovLyBUT0RPKHVydmFuZyk6IElzIHRoaXMgZXZlbiByZXF1aXJlZD8Kc3RhdGljIGNvbnN0IFRYX1NJWkUgc21hbGxlc3Rfc3ViX3R4X3NpemVfbWFwW1RYX1NJWkVTX0FMTF0gPSB7CiAgVFhfNFg0LCAgICAvLyBUWF80WDQKICBUWF80WDQsICAgIC8vIFRYXzhYOAogIFRYXzRYNCwgICAgLy8gVFhfMTZYMTYKICBUWF84WDgsICAgIC8vIFRYXzMyWDMyCiAgVFhfMTZYMTYsICAvLyBUWF82NFg2NAogIFRYXzRYNCwgICAgLy8gVFhfNFg4CiAgVFhfNFg0LCAgICAvLyBUWF84WDQKICBUWF80WDQsICAgIC8vIFRYXzhYMTYKICBUWF80WDQsICAgIC8vIFRYXzE2WDgKICBUWF80WDgsICAgIC8vIFRYXzE2WDMyCiAgVFhfOFg0LCAgICAvLyBUWF8zMlgxNgogIFRYXzhYMTYsICAgLy8gVFhfMzJYNjQKICBUWF8xNlg4LCAgIC8vIFRYXzY0WDMyCiAgVFhfNFg0LCAgICAvLyBUWF80WDE2CiAgVFhfNFg0LCAgICAvLyBUWF8xNlg0CiAgVFhfNFg4LCAgICAvLyBUWF84WDMyCiAgVFhfOFg0LCAgICAvLyBUWF8zMlg4CiAgVFhfNFgxNiwgICAvLyBUWF8xNlg2NAogIFRYXzE2WDQsICAgLy8gVFhfNjRYMTYKfTsKI2VuZGlmICAvLyBDT05GSUdfSU5TUEVDVElPTgoKc3RhdGljIGNvbnN0IFRYX1NJWkUgc3ViX3R4X3NpemVfbWFwW1RYX1NJWkVTX0FMTF0gPSB7CiAgVFhfNFg0LCAgICAvLyBUWF80WDQKICBUWF80WDQsICAgIC8vIFRYXzhYOAogIFRYXzhYOCwgICAgLy8gVFhfMTZYMTYKICBUWF8xNlgxNiwgIC8vIFRYXzMyWDMyCiAgVFhfMzJYMzIsICAvLyBUWF82NFg2NAogIFRYXzRYNCwgICAgLy8gVFhfNFg4CiAgVFhfNFg0LCAgICAvLyBUWF84WDQKICBUWF84WDgsICAgIC8vIFRYXzhYMTYKICBUWF84WDgsICAgIC8vIFRYXzE2WDgKICBUWF8xNlgxNiwgIC8vIFRYXzE2WDMyCiAgVFhfMTZYMTYsICAvLyBUWF8zMlgxNgogIFRYXzMyWDMyLCAgLy8gVFhfMzJYNjQKICBUWF8zMlgzMiwgIC8vIFRYXzY0WDMyCiAgVFhfNFg4LCAgICAvLyBUWF80WDE2CiAgVFhfOFg0LCAgICAvLyBUWF8xNlg0CiAgVFhfOFgxNiwgICAvLyBUWF84WDMyCiAgVFhfMTZYOCwgICAvLyBUWF8zMlg4CiAgVFhfMTZYMzIsICAvLyBUWF8xNlg2NAogIFRYXzMyWDE2LCAgLy8gVFhfNjRYMTYKICBUWF80WDE2LCAgIC8vIFRYXzRYMzIKICBUWF8xNlg0LCAgIC8vIFRYXzMyWDQKICBUWF84WDMyLCAgIC8vIFRYXzhYNjQKICBUWF8zMlg4LCAgIC8vIFRYXzY0WDgKICBUWF80WDMyLCAgIC8vIFRYXzRYNjQKICBUWF8zMlg0LCAgIC8vIFRYXzY0WDQKfTsKCnN0YXRpYyBjb25zdCBUWF9TSVpFIHR4c2l6ZV9ob3J6X21hcFtUWF9TSVpFU19BTExdID0gewogIFRYXzRYNCwgICAgLy8gVFhfNFg0CiAgVFhfOFg4LCAgICAvLyBUWF84WDgKICBUWF8xNlgxNiwgIC8vIFRYXzE2WDE2CiAgVFhfMzJYMzIsICAvLyBUWF8zMlgzMgogIFRYXzY0WDY0LCAgLy8gVFhfNjRYNjQKICBUWF80WDQsICAgIC8vIFRYXzRYOAogIFRYXzhYOCwgICAgLy8gVFhfOFg0CiAgVFhfOFg4LCAgICAvLyBUWF84WDE2CiAgVFhfMTZYMTYsICAvLyBUWF8xNlg4CiAgVFhfMTZYMTYsICAvLyBUWF8xNlgzMgogIFRYXzMyWDMyLCAgLy8gVFhfMzJYMTYKICBUWF8zMlgzMiwgIC8vIFRYXzMyWDY0CiAgVFhfNjRYNjQsICAvLyBUWF82NFgzMgogIFRYXzRYNCwgICAgLy8gVFhfNFgxNgogIFRYXzE2WDE2LCAgLy8gVFhfMTZYNAogIFRYXzhYOCwgICAgLy8gVFhfOFgzMgogIFRYXzMyWDMyLCAgLy8gVFhfMzJYOAogIFRYXzE2WDE2LCAgLy8gVFhfMTZYNjQKICBUWF82NFg2NCwgIC8vIFRYXzY0WDE2CiAgVFhfNFg0LCAgICAvLyBUWF80WDMyCiAgVFhfMzJYMzIsICAvLyBUWF8zMlg0CiAgVFhfOFg4LCAgICAvLyBUWF84WDY0CiAgVFhfNjRYNjQsICAvLyBUWF82NFg4CiAgVFhfNFg0LCAgICAvLyBUWF80WDY0CiAgVFhfNjRYNjQsICAvLyBUWF82NFg0Cn07CgpzdGF0aWMgY29uc3QgVFhfU0laRSB0eHNpemVfdmVydF9tYXBbVFhfU0laRVNfQUxMXSA9IHsKICBUWF80WDQsICAgIC8vIFRYXzRYNAogIFRYXzhYOCwgICAgLy8gVFhfOFg4CiAgVFhfMTZYMTYsICAvLyBUWF8xNlgxNgogIFRYXzMyWDMyLCAgLy8gVFhfMzJYMzIKICBUWF82NFg2NCwgIC8vIFRYXzY0WDY0CiAgVFhfOFg4LCAgICAvLyBUWF80WDgKICBUWF80WDQsICAgIC8vIFRYXzhYNAogIFRYXzE2WDE2LCAgLy8gVFhfOFgxNgogIFRYXzhYOCwgICAgLy8gVFhfMTZYOAogIFRYXzMyWDMyLCAgLy8gVFhfMTZYMzIKICBUWF8xNlgxNiwgIC8vIFRYXzMyWDE2CiAgVFhfNjRYNjQsICAvLyBUWF8zMlg2NAogIFRYXzMyWDMyLCAgLy8gVFhfNjRYMzIKICBUWF8xNlgxNiwgIC8vIFRYXzRYMTYKICBUWF80WDQsICAgIC8vIFRYXzE2WDQKICBUWF8zMlgzMiwgIC8vIFRYXzhYMzIKICBUWF84WDgsICAgIC8vIFRYXzMyWDgKICBUWF82NFg2NCwgIC8vIFRYXzE2WDY0CiAgVFhfMTZYMTYsICAvLyBUWF82NFgxNgogIFRYXzMyWDMyLCAgLy8gVFhfNFgzMgogIFRYXzRYNCwgICAgLy8gVFhfMzJYNAogIFRYXzY0WDY0LCAgLy8gVFhfOFg2NAogIFRYXzhYOCwgICAgLy8gVFhfNjRYOAogIFRYXzY0WDY0LCAgLy8gVFhfNFg2NAogIFRYXzRYNCwgICAgLy8gVFhfNjRYNAp9OwoKI2RlZmluZSBUWF9TSVpFX1dfTUlOIDQKCi8vIFRyYW5zZm9ybSBibG9jayB3aWR0aCBpbiBwaXhlbHMKc3RhdGljIGNvbnN0IGludCB0eF9zaXplX3dpZGVbVFhfU0laRVNfQUxMXSA9IHsKICA0LCA4LCAgMTYsIDMyLCA2NCwgNCwgIDgsIDgsICAxNiwgMTYsIDMyLCAzMiwgNjQsCiAgNCwgMTYsIDgsICAzMiwgMTYsIDY0LCA0LCAzMiwgOCwgIDY0LCA0LCAgNjQsCn07CgojZGVmaW5lIFRYX1NJWkVfSF9NSU4gNAoKLy8gVHJhbnNmb3JtIGJsb2NrIGhlaWdodCBpbiBwaXhlbHMKc3RhdGljIGNvbnN0IGludCB0eF9zaXplX2hpZ2hbVFhfU0laRVNfQUxMXSA9IHsKICA0LCAgOCwgMTYsIDMyLCA2NCwgOCwgIDQsICAxNiwgOCwgIDMyLCAxNiwgNjQsIDMyLAogIDE2LCA0LCAzMiwgOCwgIDY0LCAxNiwgMzIsIDQsICA2NCwgOCwgIDY0LCA0LAp9OwoKLy8gVHJhbnNmb3JtIGJsb2NrIHdpZHRoIGluIHVuaXQKc3RhdGljIGNvbnN0IGludCB0eF9zaXplX3dpZGVfdW5pdFtUWF9TSVpFU19BTExdID0gewogIDEsIDIsIDQsIDgsIDE2LCAxLCAgMiwgMiwgNCwgNCwgIDgsIDgsICAxNiwKICAxLCA0LCAyLCA4LCA0LCAgMTYsIDEsIDgsIDIsIDE2LCAxLCAxNiwKfTsKCi8vIFRyYW5zZm9ybSBibG9jayBoZWlnaHQgaW4gdW5pdApzdGF0aWMgY29uc3QgaW50IHR4X3NpemVfaGlnaF91bml0W1RYX1NJWkVTX0FMTF0gPSB7CiAgMSwgMiwgNCwgOCwgMTYsIDIsIDEsIDQsIDIsICA4LCA0LCAgMTYsIDgsCiAgNCwgMSwgOCwgMiwgMTYsIDQsIDgsIDEsIDE2LCAyLCAxNiwgMSwKfTsKCi8vIFRyYW5zZm9ybSBibG9jayB3aWR0aCBpbiBsb2cyCnN0YXRpYyBjb25zdCBpbnQgdHhfc2l6ZV93aWRlX2xvZzJbVFhfU0laRVNfQUxMXSA9IHsKICAyLCAzLCA0LCA1LCA2LCAyLCAzLCAzLCA0LCA0LCA1LCA1LCA2LCAyLCA0LCAzLCA1LCA0LCA2LCAyLCA1LCAzLCA2LCAyLCA2LAp9OwoKLy8gVHJhbnNmb3JtIGJsb2NrIGhlaWdodCBpbiBsb2cyCnN0YXRpYyBjb25zdCBpbnQgdHhfc2l6ZV9oaWdoX2xvZzJbVFhfU0laRVNfQUxMXSA9IHsKICAyLCAzLCA0LCA1LCA2LCAzLCAyLCA0LCAzLCA1LCA0LCA2LCA1LCA0LCAyLCA1LCAzLCA2LCA0LCA1LCAyLCA2LCAzLCA2LCAyLAp9OwoKc3RhdGljIGNvbnN0IGludCB0eF9zaXplXzJkW1RYX1NJWkVTX0FMTCArIDFdID0gewogIDE2LCA2NCwgMjU2LCAxMDI0LCA0MDk2LCAzMiwgICAzMiwgIDEyOCwgMTI4LCA1MTIsIDUxMiwgMjA0OCwgMjA0OCwKICA2NCwgNjQsIDI1NiwgMjU2LCAgMTAyNCwgMTAyNCwgMTI4LCAxMjgsIDUxMiwgNTEyLCAyNTYsIDI1NiwKfTsKCnN0YXRpYyBjb25zdCBCTE9DS19TSVpFIHR4c2l6ZV90b19ic2l6ZVtUWF9TSVpFU19BTExdID0gewogIEJMT0NLXzRYNCwgICAgLy8gVFhfNFg0CiAgQkxPQ0tfOFg4LCAgICAvLyBUWF84WDgKICBCTE9DS18xNlgxNiwgIC8vIFRYXzE2WDE2CiAgQkxPQ0tfMzJYMzIsICAvLyBUWF8zMlgzMgogIEJMT0NLXzY0WDY0LCAgLy8gVFhfNjRYNjQKICBCTE9DS180WDgsICAgIC8vIFRYXzRYOAogIEJMT0NLXzhYNCwgICAgLy8gVFhfOFg0CiAgQkxPQ0tfOFgxNiwgICAvLyBUWF84WDE2CiAgQkxPQ0tfMTZYOCwgICAvLyBUWF8xNlg4CiAgQkxPQ0tfMTZYMzIsICAvLyBUWF8xNlgzMgogIEJMT0NLXzMyWDE2LCAgLy8gVFhfMzJYMTYKICBCTE9DS18zMlg2NCwgIC8vIFRYXzMyWDY0CiAgQkxPQ0tfNjRYMzIsICAvLyBUWF82NFgzMgogIEJMT0NLXzRYMTYsICAgLy8gVFhfNFgxNgogIEJMT0NLXzE2WDQsICAgLy8gVFhfMTZYNAogIEJMT0NLXzhYMzIsICAgLy8gVFhfOFgzMgogIEJMT0NLXzMyWDgsICAgLy8gVFhfMzJYOAogIEJMT0NLXzE2WDY0LCAgLy8gVFhfMTZYNjQKICBCTE9DS182NFgxNiwgIC8vIFRYXzY0WDE2CiAgQkxPQ0tfNFgzMiwgICAvLyBUWF80WDMyCiAgQkxPQ0tfMzJYNCwgICAvLyBUWF8zMlg0CiAgQkxPQ0tfOFg2NCwgICAvLyBUWF84WDY0CiAgQkxPQ0tfNjRYOCwgICAvLyBUWF82NFg4CiAgQkxPQ0tfNFg2NCwgICAvLyBUWF80WDY0CiAgQkxPQ0tfNjRYNCwgICAvLyBUWF82NFg0Cn07CgpzdGF0aWMgY29uc3QgVFhfU0laRSB0eHNpemVfc3FyX21hcFtUWF9TSVpFU19BTExdID0gewogIFRYXzRYNCwgICAgLy8gVFhfNFg0CiAgVFhfOFg4LCAgICAvLyBUWF84WDgKICBUWF8xNlgxNiwgIC8vIFRYXzE2WDE2CiAgVFhfMzJYMzIsICAvLyBUWF8zMlgzMgogIFRYXzY0WDY0LCAgLy8gVFhfNjRYNjQKICBUWF80WDQsICAgIC8vIFRYXzRYOAogIFRYXzRYNCwgICAgLy8gVFhfOFg0CiAgVFhfOFg4LCAgICAvLyBUWF84WDE2CiAgVFhfOFg4LCAgICAvLyBUWF8xNlg4CiAgVFhfMTZYMTYsICAvLyBUWF8xNlgzMgogIFRYXzE2WDE2LCAgLy8gVFhfMzJYMTYKICBUWF8zMlgzMiwgIC8vIFRYXzMyWDY0CiAgVFhfMzJYMzIsICAvLyBUWF82NFgzMgogIFRYXzRYNCwgICAgLy8gVFhfNFgxNgogIFRYXzRYNCwgICAgLy8gVFhfMTZYNAogIFRYXzhYOCwgICAgLy8gVFhfOFgzMgogIFRYXzhYOCwgICAgLy8gVFhfMzJYOAogIFRYXzE2WDE2LCAgLy8gVFhfMTZYNjQKICBUWF8xNlgxNiwgIC8vIFRYXzY0WDE2CiAgVFhfNFg0LCAgICAvLyBUWF80WDMyCiAgVFhfNFg0LCAgICAvLyBUWF8zMlg0CiAgVFhfOFg4LCAgICAvLyBUWF84WDY0CiAgVFhfOFg4LCAgICAvLyBUWF82NFg4CiAgVFhfNFg0LCAgICAvLyBUWF80WDY0CiAgVFhfNFg0LCAgICAvLyBUWF82NFg0Cn07CgpzdGF0aWMgY29uc3QgVFhfU0laRSB0eHNpemVfc3FyX3VwX21hcFtUWF9TSVpFU19BTExdID0gewogIFRYXzRYNCwgICAgLy8gVFhfNFg0CiAgVFhfOFg4LCAgICAvLyBUWF84WDgKICBUWF8xNlgxNiwgIC8vIFRYXzE2WDE2CiAgVFhfMzJYMzIsICAvLyBUWF8zMlgzMgogIFRYXzY0WDY0LCAgLy8gVFhfNjRYNjQKICBUWF84WDgsICAgIC8vIFRYXzRYOAogIFRYXzhYOCwgICAgLy8gVFhfOFg0CiAgVFhfMTZYMTYsICAvLyBUWF84WDE2CiAgVFhfMTZYMTYsICAvLyBUWF8xNlg4CiAgVFhfMzJYMzIsICAvLyBUWF8xNlgzMgogIFRYXzMyWDMyLCAgLy8gVFhfMzJYMTYKICBUWF82NFg2NCwgIC8vIFRYXzMyWDY0CiAgVFhfNjRYNjQsICAvLyBUWF82NFgzMgogIFRYXzE2WDE2LCAgLy8gVFhfNFgxNgogIFRYXzE2WDE2LCAgLy8gVFhfMTZYNAogIFRYXzMyWDMyLCAgLy8gVFhfOFgzMgogIFRYXzMyWDMyLCAgLy8gVFhfMzJYOAogIFRYXzY0WDY0LCAgLy8gVFhfMTZYNjQKICBUWF82NFg2NCwgIC8vIFRYXzY0WDE2CiAgVFhfMzJYMzIsICAvLyBUWF80WDMyCiAgVFhfMzJYMzIsICAvLyBUWF8zMlg0CiAgVFhfNjRYNjQsICAvLyBUWF84WDY0CiAgVFhfNjRYNjQsICAvLyBUWF82NFg4CiAgVFhfNjRYNjQsICAvLyBUWF80WDY0CiAgVFhfNjRYNjQsICAvLyBUWF82NFg0Cn07CgpzdGF0aWMgY29uc3QgaW50OF90IHR4c2l6ZV9sb2cyX21pbnVzNFtUWF9TSVpFU19BTExdID0gewogIDAsICAvLyBUWF80WDQKICAyLCAgLy8gVFhfOFg4CiAgNCwgIC8vIFRYXzE2WDE2CiAgNiwgIC8vIFRYXzMyWDMyCiAgNiwgIC8vIFRYXzY0WDY0CiAgMSwgIC8vIFRYXzRYOAogIDEsICAvLyBUWF84WDQKICAzLCAgLy8gVFhfOFgxNgogIDMsICAvLyBUWF8xNlg4CiAgNSwgIC8vIFRYXzE2WDMyCiAgNSwgIC8vIFRYXzMyWDE2CiAgNiwgIC8vIFRYXzMyWDY0CiAgNiwgIC8vIFRYXzY0WDMyCiAgMiwgIC8vIFRYXzRYMTYKICAyLCAgLy8gVFhfMTZYNAogIDQsICAvLyBUWF84WDMyCiAgNCwgIC8vIFRYXzMyWDgKICA1LCAgLy8gVFhfMTZYNjQKICA1LCAgLy8gVFhfNjRYMTYKICAzLCAgLy8gVFhfNFgzMgogIDMsICAvLyBUWF8zMlg0CiAgNCwgIC8vIFRYXzhYNjQKICA0LCAgLy8gVFhfNjRYOAogIDMsICAvLyBUWF80WDY0CiAgMywgIC8vIFRYXzY0WDQKfTsKCi8qIGNsYW5nLWZvcm1hdCBvZmYgKi8Kc3RhdGljIGNvbnN0IFRYX1NJWkUgdHhfbW9kZV90b19iaWdnZXN0X3R4X3NpemVbVFhfTU9ERVNdID0gewogIFRYXzRYNCwgICAgLy8gT05MWV80WDQKICBUWF82NFg2NCwgIC8vIFRYX01PREVfTEFSR0VTVAogIFRYXzY0WDY0LCAgLy8gVFhfTU9ERV9TRUxFQ1QKfTsKCi8vIFRoZSBTdWJzYW1wbGVkX1NpemUgdGFibGUgaW4gdGhlIHNwZWMgKFNlY3Rpb24gNS4xMS4zOC4gR2V0IHBsYW5lIHJlc2lkdWFsCi8vIHNpemUgZnVuY3Rpb24pLgpzdGF0aWMgY29uc3QgQkxPQ0tfU0laRSBzc19zaXplX2xvb2t1cFtCTE9DS19TSVpFU19BTExdWzJdWzJdID0gewogIC8vICBzc194ID09IDAgICAgICBzc194ID09IDAgICAgICAgICAgc3NfeCA9PSAxICAgICAgc3NfeCA9PSAxCiAgLy8gIHNzX3kgPT0gMCAgICAgIHNzX3kgPT0gMSAgICAgICAgICBzc195ID09IDAgICAgICBzc195ID09IDEKICB7IHsgQkxPQ0tfNFg0LCAgICAgQkxPQ0tfNFg0IH0sICAgICB7IEJMT0NLXzRYNCwgICAgIEJMT0NLXzRYNCB9IH0sCiAgeyB7IEJMT0NLXzRYOCwgICAgIEJMT0NLXzRYNCB9LCAgICAgeyBCTE9DS19JTlZBTElELCBCTE9DS180WDQgfSB9LAogIHsgeyBCTE9DS184WDQsICAgICBCTE9DS19JTlZBTElEIH0sIHsgQkxPQ0tfNFg0LCAgICAgQkxPQ0tfNFg0IH0gfSwKICB7IHsgQkxPQ0tfOFg4LCAgICAgQkxPQ0tfOFg0IH0sICAgICB7IEJMT0NLXzRYOCwgICAgIEJMT0NLXzRYNCB9IH0sCiAgeyB7IEJMT0NLXzhYMTYsICAgIEJMT0NLXzhYOCB9LCAgICAgeyBCTE9DS180WDE2LCAgICBCTE9DS180WDggfSB9LAogIHsgeyBCTE9DS18xNlg4LCAgICBCTE9DS18xNlg0IH0sICAgIHsgQkxPQ0tfOFg4LCAgICAgQkxPQ0tfOFg0IH0gfSwKICB7IHsgQkxPQ0tfMTZYMTYsICAgQkxPQ0tfMTZYOCB9LCAgICB7IEJMT0NLXzhYMTYsICAgIEJMT0NLXzhYOCB9IH0sCiAgeyB7IEJMT0NLXzE2WDMyLCAgIEJMT0NLXzE2WDE2IH0sICAgeyBCTE9DS184WDMyLCAgICBCTE9DS184WDE2IH0gfSwKICB7IHsgQkxPQ0tfMzJYMTYsICAgQkxPQ0tfMzJYOCB9LCAgICB7IEJMT0NLXzE2WDE2LCAgIEJMT0NLXzE2WDggfSB9LAogIHsgeyBCTE9DS18zMlgzMiwgICBCTE9DS18zMlgxNiB9LCAgIHsgQkxPQ0tfMTZYMzIsICAgQkxPQ0tfMTZYMTYgfSB9LAogIHsgeyBCTE9DS18zMlg2NCwgICBCTE9DS18zMlgzMiB9LCAgIHsgQkxPQ0tfMTZYNjQsICAgQkxPQ0tfMTZYMzIgfSB9LAogIHsgeyBCTE9DS182NFgzMiwgICBCTE9DS182NFgxNiB9LCAgIHsgQkxPQ0tfMzJYMzIsICAgQkxPQ0tfMzJYMTYgfSB9LAogIHsgeyBCTE9DS182NFg2NCwgICBCTE9DS182NFgzMiB9LCAgIHsgQkxPQ0tfMzJYNjQsICAgQkxPQ0tfMzJYMzIgfSB9LAogIHsgeyBCTE9DS182NFgxMjgsICBCTE9DS182NFg2NCB9LCAgIHsgQkxPQ0tfSU5WQUxJRCwgQkxPQ0tfMzJYNjQgfSB9LAogIHsgeyBCTE9DS18xMjhYNjQsICBCTE9DS19JTlZBTElEIH0sIHsgQkxPQ0tfNjRYNjQsICAgQkxPQ0tfNjRYMzIgfSB9LAogIHsgeyBCTE9DS18xMjhYMTI4LCBCTE9DS18xMjhYNjQgfSwgIHsgQkxPQ0tfNjRYMTI4LCAgQkxPQ0tfNjRYNjQgfSB9LAogIHsgeyBCTE9DS18xMjhYMjU2LCBCTE9DS18xMjhYMTI4IH0sIHsgQkxPQ0tfSU5WQUxJRCwgQkxPQ0tfNjRYMTI4IH0gfSwKICB7IHsgQkxPQ0tfMjU2WDEyOCwgQkxPQ0tfSU5WQUxJRCB9LCB7IEJMT0NLXzEyOFgxMjgsIEJMT0NLXzEyOFg2NCB9IH0sCiAgeyB7IEJMT0NLXzI1NlgyNTYsIEJMT0NLXzI1NlgxMjggfSwgeyBCTE9DS18xMjhYMjU2LCBCTE9DS18xMjhYMTI4IH0gfSwKICB7IHsgQkxPQ0tfNFgxNiwgICAgQkxPQ0tfNFg4IH0sICAgICB7IEJMT0NLX0lOVkFMSUQsIEJMT0NLXzRYOCB9IH0sCiAgeyB7IEJMT0NLXzE2WDQsICAgIEJMT0NLX0lOVkFMSUQgfSwgeyBCTE9DS184WDQsICAgICBCTE9DS184WDQgfSB9LAogIHsgeyBCTE9DS184WDMyLCAgICBCTE9DS184WDE2IH0sICAgIHsgQkxPQ0tfNFgzMiwgICAgQkxPQ0tfNFgxNiB9IH0sCiAgeyB7IEJMT0NLXzMyWDgsICAgIEJMT0NLXzMyWDQgfSwgICAgeyBCTE9DS18xNlg4LCAgICBCTE9DS18xNlg0IH0gfSwKICB7IHsgQkxPQ0tfMTZYNjQsICAgQkxPQ0tfMTZYMzIgfSwgICB7IEJMT0NLXzhYNjQsICAgIEJMT0NLXzhYMzIgfSB9LAogIHsgeyBCTE9DS182NFgxNiwgICBCTE9DS182NFg4IH0sICAgIHsgQkxPQ0tfMzJYMTYsICAgQkxPQ0tfMzJYOCB9IH0sCiAgeyB7IEJMT0NLXzRYMzIsIEJMT0NLXzRYMTZ9LCB7IEJMT0NLX0lOVkFMSUQsIEJMT0NLXzRYMTYgfSB9LAogIHsgeyBCTE9DS18zMlg0LCBCTE9DS19JTlZBTElEIH0sIHsgQkxPQ0tfMTZYNCwgQkxPQ0tfMTZYNCB9IH0sCiAgeyB7IEJMT0NLXzhYNjQsIEJMT0NLXzhYMzIgfSwgeyBCTE9DS180WDY0LCBCTE9DS180WDMyIH0gfSwKICB7IHsgQkxPQ0tfNjRYOCwgQkxPQ0tfNjRYNCB9LCB7IEJMT0NLXzMyWDgsIEJMT0NLXzMyWDQgfSB9LAogIHsgeyBCTE9DS180WDY0LCBCTE9DS180WDMyIH0sIHsgQkxPQ0tfSU5WQUxJRCwgQkxPQ0tfNFgzMiB9IH0sCiAgeyB7IEJMT0NLXzY0WDQsIEJMT0NLX0lOVkFMSUR9LCB7IEJMT0NLXzMyWDQsIEJMT0NLXzMyWDQgfSB9LAp9OwovKiBjbGFuZy1mb3JtYXQgb24gKi8KCi8vIEdlbmVyYXRlcyA2IGJpdCBmaWVsZCBpbiB3aGljaCBlYWNoIGJpdCBzZXQgdG8gMSByZXByZXNlbnRzCi8vIGEgYmxvY2tzaXplIHBhcnRpdGlvbi4gRm9yIGV4YW1wbGU6Ci8vIC0gMTExMTExIG1lYW5zIHdlIHNwbGl0IDI1NngyNTYsIDEyOHgxMjgsIDY0eDY0LCAzMngzMiwgMTZ4MTYgYW5kIDh4OCB0byA0eDQuCi8vIC0gMTEwMDAwIG1lYW5zIHdlIHNwbGl0IDI1NngyNTYgYW5kIDEyOHgxMjggdG8gNjR4NjQuCi8vIC0gMDAwMDAwIG1lYW5zIHdlIGtlZXAgMjU2eDI1NiAobm8gc3BsaXRzKS4KLyogY2xhbmctZm9ybWF0IG9mZiAqLwpzdGF0aWMgY29uc3Qgc3RydWN0IHsKICBQQVJUSVRJT05fQ09OVEVYVCBhYm92ZTsKICBQQVJUSVRJT05fQ09OVEVYVCBsZWZ0Owp9IHBhcnRpdGlvbl9jb250ZXh0X2xvb2t1cFtCTE9DS19TSVpFU19BTExdID0gewogIHsgMzIgKyAzMSwgMzIgKyAzMSB9LCAgLy8gNFg0ICAgLSB7MGIxMTExMTEsIDBiMTExMTExfQogIHsgMzIgKyAzMSwgMzIgKyAzMCB9LCAgLy8gNFg4ICAgLSB7MGIxMTExMTEsIDBiMTExMTEwfQogIHsgMzIgKyAzMCwgMzIgKyAzMSB9LCAgLy8gOFg0ICAgLSB7MGIxMTExMTAsIDBiMTExMTExfQogIHsgMzIgKyAzMCwgMzIgKyAzMCB9LCAgLy8gOFg4ICAgLSB7MGIxMTExMTAsIDBiMTExMTEwfQogIHsgMzIgKyAzMCwgMzIgKyAyOCB9LCAgLy8gOFgxNiAgLSB7MGIxMTExMTAsIDBiMTExMTAwfQogIHsgMzIgKyAyOCwgMzIgKyAzMCB9LCAgLy8gMTZYOCAgLSB7MGIxMTExMDAsIDBiMTExMTEwfQogIHsgMzIgKyAyOCwgMzIgKyAyOCB9LCAgLy8gMTZYMTYgLSB7MGIxMTExMDAsIDBiMTExMTAwfQogIHsgMzIgKyAyOCwgMzIgKyAyNCB9LCAgLy8gMTZYMzIgLSB7MGIxMTExMDAsIDBiMTExMDAwfQogIHsgMzIgKyAyNCwgMzIgKyAyOCB9LCAgLy8gMzJYMTYgLSB7MGIxMTEwMDAsIDBiMTExMTAwfQogIHsgMzIgKyAyNCwgMzIgKyAyNCB9LCAgLy8gMzJYMzIgLSB7MGIxMTEwMDAsIDBiMTExMDAwfQogIHsgMzIgKyAyNCwgMzIgKyAxNiB9LCAgLy8gMzJYNjQgLSB7MGIxMTEwMDAsIDBiMTEwMDAwfQogIHsgMzIgKyAxNiwgMzIgKyAyNCB9LCAgLy8gNjRYMzIgLSB7MGIxMTAwMDAsIDBiMTExMDAwfQogIHsgMzIgKyAxNiwgMzIgKyAxNiB9LCAgLy8gNjRYNjQgLSB7MGIxMTAwMDAsIDBiMTEwMDAwfQogIHsgMzIgKyAxNiwgMzIgKyAgMCB9LCAgLy8gNjRYMTI4LSB7MGIxMTAwMDAsIDBiMTAwMDAwfQogIHsgMzIgKyAgMCwgMzIgKyAxNiB9LCAgLy8gMTI4WDY0LSB7MGIxMDAwMDAsIDBiMTEwMDAwfQogIHsgMzIgKyAgMCwgMzIgKyAgMCB9LCAgLy8gMTI4WDEyOC17MGIxMDAwMDAsIDBiMTAwMDAwfQogIHsgMzIgKyAgMCwgIDAgKyAgMCB9LCAgLy8gMTI4WDI1Ni17MGIxMDAwMDAsIDBiMDAwMDAwfQogIHsgIDAgKyAgMCwgMzIgKyAgMCB9LCAgLy8gMjU2WDEyOC17MGIwMDAwMDAsIDBiMTAwMDAwfQogIHsgIDAgKyAgMCwgIDAgKyAgMCB9LCAgLy8gMjU2WDI1Ni17MGIwMDAwMDAsIDBiMDAwMDAwfQogIHsgMzIgKyAzMSwgMzIgKyAyOCB9LCAgLy8gNFgxNiAgLSB7MGIxMTExMTEsIDBiMTExMTAwfQogIHsgMzIgKyAyOCwgMzIgKyAzMSB9LCAgLy8gMTZYNCAgLSB7MGIxMTExMDAsIDBiMTExMTExfQogIHsgMzIgKyAzMCwgMzIgKyAyNCB9LCAgLy8gOFgzMiAgLSB7MGIxMTExMTAsIDBiMTExMDAwfQogIHsgMzIgKyAyNCwgMzIgKyAzMCB9LCAgLy8gMzJYOCAgLSB7MGIxMTEwMDAsIDBiMTExMTEwfQogIHsgMzIgKyAyOCwgMzIgKyAxNiB9LCAgLy8gMTZYNjQgLSB7MGIxMTExMDAsIDBiMTEwMDAwfQogIHsgMzIgKyAxNiwgMzIgKyAyOCB9LCAgLy8gNjRYMTYgLSB7MGIxMTAwMDAsIDBiMTExMTAwfQogIHsgMzIgKyAzMSwgMzIgKyAyNCB9LCAgLy8gNFgzMiAgLSB7MGIxMTExMTEsIDBiMTExMDAwfQogIHsgMzIgKyAyNCwgMzIgKyAzMSB9LCAgLy8gMzJYNCAgLSB7MGIxMTEwMDAsIDBiMTExMTExfQogIHsgMzIgKyAzMCwgMzIgKyAxNiB9LCAgLy8gOFg2NCAgLSB7MGIxMTExMTAsIDBiMTEwMDAwfQogIHsgMzIgKyAxNiwgMzIgKyAzMCB9LCAgLy8gNjRYOCAgLSB7MGIxMTAwMDAsIDBiMTExMTEwfQogIHsgMzIgKyAzMSwgMzIgKyAxNiB9LCAgLy8gNFg2NCAgLSB7MGIxMTExMTAsIDBiMTEwMDAwfQogIHsgMzIgKyAxNiwgMzIgKyAzMSB9LCAgLy8gNjRYNCAgLSB7MGIxMTAwMDAsIDBiMTExMTEwfQp9OwovKiBjbGFuZy1mb3JtYXQgb24gKi8KCnN0YXRpYyBjb25zdCBpbnQgaW50cmFfbW9kZV9jb250ZXh0W0lOVFJBX01PREVTXSA9IHsKICAwLCAxLCAyLCAzLCA0LCA0LCA0LCA0LCAzLCAwLCAxLCAyLCAwLAp9OwoKLy8gTm90ZTogdGhpcyBpcyBhbHNvIHVzZWQgaW4gdW5pdCB0ZXN0cy4gU28gd2hlbmV2ZXIgb25lIGNoYW5nZXMgdGhlIHRhYmxlLAovLyB0aGUgdW5pdCB0ZXN0cyBuZWVkIHRvIGJlIGNoYW5nZWQgYWNjb3JkaW5nbHkuCnN0YXRpYyBjb25zdCBpbnQgcXVhbnRfZGlzdF93ZWlnaHRbNF1bMl0gPSB7CiAgeyAyLCAzIH0sIHsgMiwgNSB9LCB7IDIsIDcgfSwgeyAxLCBNQVhfRlJBTUVfRElTVEFOQ0UgfQp9OwoKc3RhdGljIGNvbnN0IGludCBxdWFudF9kaXN0X2xvb2t1cF90YWJsZVs0XVsyXSA9IHsKICB7IDksIDcgfSwKICB7IDExLCA1IH0sCiAgeyAxMiwgNCB9LAogIHsgMTMsIDMgfSwKfTsKCi8vIE1hcHBpbmcgb2YgbW9kZSBkZXBlbmRlbnQgVFggIGJhc2VkIG9uIGludHJhIG1vZGVzLgpzdGF0aWMgY29uc3QgaW50IGF2MV9tZF9jbGFzc1tJTlRSQV9NT0RFU10gPSB7CiAgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwKfTsKCi8vIE1hcHBpbmcgYmV0d2VlbiBtb2RlIGRlcGVuZGVudCBUWCBzaXplIGdyb3VwcyBiYXNlZCBvbiBhbGxvd2VkIFRYIHNpemVzLgpzdGF0aWMgY29uc3QgaW50IGF2MV9zaXplX2NsYXNzW1RYX1NJWkVTX0FMTF0gPSB7CiAgMCwgMSwgMiwgMywgMywgMCwgMCwgMSwgMSwgMywgMywgMywgMywKI2lmIENPTkZJR19DT0VGRl9QQVJTSU5HCiAgMSwgMSwKI2Vsc2UKICAwLCAwLAojZW5kaWYgIC8vIENPTkZJR19DT0VGRl9QQVJTSU5HCiAgMywgMywgMywgMywgMywgMywgMywgMywgMywgMwp9OwoKc3RhdGljIEFPTV9JTkxJTkUgYm9vbCBpc19ic2l6ZV9nZXEoQkxPQ0tfU0laRSBic2l6ZTEsIEJMT0NLX1NJWkUgYnNpemUyKSB7CiAgaWYgKGJzaXplMSA9PSBCTE9DS19JTlZBTElEIHx8IGJzaXplMiA9PSBCTE9DS19JTlZBTElEKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIHJldHVybiBibG9ja19zaXplX3dpZGVbYnNpemUxXSA+PSBibG9ja19zaXplX3dpZGVbYnNpemUyXSAmJgogICAgICAgICBibG9ja19zaXplX2hpZ2hbYnNpemUxXSA+PSBibG9ja19zaXplX2hpZ2hbYnNpemUyXTsKfQoKc3RhdGljIEFPTV9JTkxJTkUgYm9vbCBpc19ic2l6ZV9ndChCTE9DS19TSVpFIGJzaXplMSwgQkxPQ0tfU0laRSBic2l6ZTIpIHsKICBpZiAoYnNpemUxID09IEJMT0NLX0lOVkFMSUQgfHwgYnNpemUyID09IEJMT0NLX0lOVkFMSUQpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgcmV0dXJuIGJsb2NrX3NpemVfd2lkZVtic2l6ZTFdID4gYmxvY2tfc2l6ZV93aWRlW2JzaXplMl0gJiYKICAgICAgICAgYmxvY2tfc2l6ZV9oaWdoW2JzaXplMV0gPiBibG9ja19zaXplX2hpZ2hbYnNpemUyXTsKfQoKc3RhdGljIGNvbnN0IGludCBmd2RfdHhfc2hpZnRbVFhfU0laRVNfQUxMXVsyXSA9IHsKICB7IDEsIDEwIH0sICAvLyBUWF80WDQsICAgIC8vIDR4NCB0cmFuc2Zvcm0KICB7IDIsIDEwIH0sICAvLyBUWF84WDgsICAgIC8vIDh4OCB0cmFuc2Zvcm0KICB7IDIsIDExIH0sICAvLyBUWF8xNlgxNiwgIC8vIDE2eDE2IHRyYW5zZm9ybQogIHsgMywgMTIgfSwgIC8vIFRYXzMyWDMyLCAgLy8gMzJ4MzIgdHJhbnNmb3JtCiAgeyAzLCAxNCB9LCAgLy8gVFhfNjRYNjQsICAvLyA2NHg2NCB0cmFuc2Zvcm0KICB7IDEsIDExIH0sICAvLyBUWF80WDgsICAgIC8vIDR4OCB0cmFuc2Zvcm0KICB7IDEsIDExIH0sICAvLyBUWF84WDQsICAgIC8vIDh4NCB0cmFuc2Zvcm0KICB7IDEsIDEyIH0sICAvLyBUWF84WDE2LCAgIC8vIDh4MTYgdHJhbnNmb3JtCiAgeyAyLCAxMSB9LCAgLy8gVFhfMTZYOCwgICAvLyAxNng4IHRyYW5zZm9ybQogIHsgMiwgMTMgfSwgIC8vIFRYXzE2WDMyLCAgLy8gMTZ4MzIgdHJhbnNmb3JtCiAgeyAzLCAxMiB9LCAgLy8gVFhfMzJYMTYsICAvLyAzMngxNiB0cmFuc2Zvcm0KICB7IDMsIDE0IH0sICAvLyBUWF8zMlg2NCwgIC8vIDMyeDY0IHRyYW5zZm9ybQogIHsgMywgMTQgfSwgIC8vIFRYXzY0WDMyLCAgLy8gNjR4MzIgdHJhbnNmb3JtCiAgeyAxLCAxMSB9LCAgLy8gVFhfNFgxNiwgICAvLyA0eDE2IHRyYW5zZm9ybQogIHsgMSwgMTEgfSwgIC8vIFRYXzE2WDQsICAgLy8gMTZ4NCB0cmFuc2Zvcm0KICB7IDEsIDEyIH0sICAvLyBUWF84WDMyLCAgIC8vIDh4MzIgdHJhbnNmb3JtCiAgeyAzLCAxMCB9LCAgLy8gVFhfMzJYOCwgICAvLyAzMng4IHRyYW5zZm9ybQogIHsgMiwgMTMgfSwgIC8vIFRYXzE2WDY0LCAgLy8gMTZ4NjQgdHJhbnNmb3JtCiAgeyAzLCAxMiB9LCAgLy8gVFhfNjRYMTYsICAvLyA2NHgxNiB0cmFuc2Zvcm0KICB7IDEsIDEyIH0sICAvLyBUWF80WDMyLCAgIC8vIDR4MzIgdHJhbnNmb3JtCiAgeyAxLCAxMiB9LCAgLy8gVFhfMzJYNCwgICAvLyAzMng0IHRyYW5zZm9ybQogIHsgMiwgMTMgfSwgIC8vIFRYXzhYNjQsICAgLy8gOHg2NCB0cmFuc2Zvcm0KICB7IDQsIDExIH0sICAvLyBUWF82NFg4LCAgIC8vIDY0eDggdHJhbnNmb3JtCiAgeyAxLCAxMiB9LCAgLy8gVFhfNFg2NCwgICAvLyA0eDY0IHRyYW5zZm9ybQogIHsgMSwgMTIgfSwgIC8vIFRYXzY0WDQsICAgLy8gNjR4NCB0cmFuc2Zvcm0KfTsKCnN0YXRpYyBjb25zdCBpbnQgaW52X3R4X3NoaWZ0W1RYX1NJWkVTX0FMTF1bMl0gPSB7CiAgeyA3LCAxMCB9LCAgLy8gVFhfNFg0LCAgICAvLyA0eDQgdHJhbnNmb3JtCiAgeyA3LCAxMSB9LCAgLy8gVFhfOFg4LCAgICAvLyA4eDggdHJhbnNmb3JtCiAgeyA2LCAxMyB9LCAgLy8gVFhfMTZYMTYsICAvLyAxNngxNiB0cmFuc2Zvcm0KICB7IDYsIDEzIH0sICAvLyBUWF8zMlgzMiwgIC8vIDMyeDMyIHRyYW5zZm9ybQogIHsgNiwgMTMgfSwgIC8vIFRYXzY0WDY0LCAgLy8gNjR4NjQgdHJhbnNmb3JtCiAgeyA3LCAxMCB9LCAgLy8gVFhfNFg4LCAgICAvLyA0eDggdHJhbnNmb3JtCiAgeyA3LCAxMCB9LCAgLy8gVFhfOFg0LCAgICAvLyA4eDQgdHJhbnNmb3JtCiAgeyA3LCAxMSB9LCAgLy8gVFhfOFgxNiwgICAvLyA4eDE2IHRyYW5zZm9ybQogIHsgNywgMTEgfSwgIC8vIFRYXzE2WDgsICAgLy8gMTZ4OCB0cmFuc2Zvcm0KICB7IDYsIDEyIH0sICAvLyBUWF8xNlgzMiwgIC8vIDE2eDMyIHRyYW5zZm9ybd8KICB7IDYsIDEyIH0sICAvLyBUWF8zMlgxNiwgIC8vIDMyeDE2IHRyYW5zZm9ybQogIHsgNiwgMTIgfSwgIC8vIFRYXzMyWDY0LCAgLy8gMzJ4NjQgdHJhbnNmb3JtCiAgeyA2LCAxMiB9LCAgLy8gVFhfNjRYMzIsICAvLyA2NHgzMiB0cmFuc2Zvcm0KICB7IDYsIDEyIH0sICAvLyBUWF80WDE2LCAgIC8vIDR4MTYgdHJhbnNmb3JtCiAgeyA2LCAxMiB9LCAgLy8gVFhfMTZYNCwgICAvLyAxNng0IHRyYW5zZm9ybQogIHsgNiwgMTMgfSwgIC8vIFRYXzhYMzIsICAgLy8gOHgzMiB0cmFuc2Zvcm0KICB7IDYsIDEzIH0sICAvLyBUWF8zMlg4LCAgIC8vIDMyeDggdHJhbnNmb3JtCiAgeyA2LCAxMyB9LCAgLy8gVFhfMTZYNjQsICAvLyAxNng2NCB0cmFuc2Zvcm0KICB7IDYsIDEzIH0sICAvLyBUWF82NFgxNiwgIC8vIDY0eDE2IHRyYW5zZm9ybQogIHsgNywgMTEgfSwgIC8vIFRYXzRYMzIsICAgLy8gNHgzMiB0cmFuc2Zvcm0KICB7IDcsIDExIH0sICAvLyBUWF8zMlg0LCAgIC8vIDMyeDQgdHJhbnNmb3JtCiAgeyA2LCAxMiB9LCAgLy8gVFhfOFg2NCwgICAvLyA4eDY0IHRyYW5zZm9ybQogIHsgNiwgMTIgfSwgIC8vIFRYXzY0WDgsICAgLy8gNjR4OCB0cmFuc2Zvcm0KICB7IDYsIDEzIH0sICAvLyBUWF80WDY0LCAgIC8vIDR4NjQgdHJhbnNmb3JtCiAgeyA2LCAxMyB9LCAgLy8gVFhfNjRYNCwgICAvLyA2NHg0IHRyYW5zZm9ybQp9OwoKc3RhdGljIGNvbnN0IGludCBnX2hvcl90eF90eXBlW1RYX1RZUEVTXSA9IHsKICBEQ1QyLCAgLy8gRENUX0RDVCwgICAgICAgICAgICAvLyBEQ1QgaW4gYm90aCBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbAogIERDVDIsICAvLyBBRFNUX0RDVCwgICAgICAgICAgIC8vIEFEU1QgaW4gdmVydGljYWwsIERDVCBpbiBob3Jpem9udGFsCiAgRFNUNywgIC8vIERDVF9BRFNULCAgICAgICAgICAgLy8gRENUIGluIHZlcnRpY2FsLCBBRFNUIGluIGhvcml6b250YWwKICBEU1Q3LCAgLy8gQURTVF9BRFNULCAgICAgICAgICAvLyBBRFNUIGluIGJvdGggZGlyZWN0aW9ucwogIERDVDIsICAvLyBGTElQQURTVF9EQ1QsICAgICAgIC8vIEZMSVBBRFNUIGluIHZlcnRpY2FsLCBEQ1QgaW4gaG9yaXpvbnRhbAogIERDVDgsICAvLyBEQ1RfRkxJUEFEU1QsICAgICAgIC8vIERDVCBpbiB2ZXJ0aWNhbCwgRkxJUEFEU1QgaW4gaG9yaXpvbnRhbAogIERDVDgsICAvLyBGTElQQURTVF9GTElQQURTVCwgIC8vIEZMSVBBRFNUIGluIGJvdGggZGlyZWN0aW9ucwogIERDVDgsICAvLyBBRFNUX0ZMSVBBRFNULCAgICAgIC8vIEFEU1QgaW4gdmVydGljYWwsIEZMSVBBRFNUIGluIGhvcml6b250YWwKICBEU1Q3LCAgLy8gRkxJUEFEU1RfQURTVCwgICAgICAvLyBGTElQQURTVCBpbiB2ZXJ0aWNhbCwgQURTVCBpbiBob3Jpem9udGFsCiAgSURULCAgIC8vIElEVFgsICAgICAgICAgICAgICAgLy8gSWRlbnRpdHkgaW4gYm90aCBkaXJlY3Rpb25zCiAgSURULCAgIC8vIFZfRENULCAgICAgICAgICAgICAgLy8gRENUIGluIHZlcnRpY2FsLCBpZGVudGl0eSBpbiBob3Jpem9udGFsCiAgRENUMiwgIC8vIEhfRENULCAgICAgICAgICAgICAgLy8gSWRlbnRpdHkgaW4gdmVydGljYWwsIERDVCBpbiBob3Jpem9udGFsCiAgSURULCAgIC8vIFZfQURTVCwgICAgICAgICAgICAgLy8gQURTVCBpbiB2ZXJ0aWNhbCwgaWRlbnRpdHkgaW4gaG9yaXpvbnRhbAogIERTVDcsICAvLyBIX0FEU1QsICAgICAgICAgICAgIC8vIElkZW50aXR5IGluIHZlcnRpY2FsLCBBRFNUIGluIGhvcml6b250YWwKICBJRFQsICAgLy8gVl9GTElQQURTVCwgICAgICAgICAvLyBGTElQQURTVCBpbiB2ZXJ0aWNhbCwgaWRlbnRpdHkgaW4gaG9yaXpvbnRhbAogIERDVDgsICAvLyBIX0ZMSVBBRFNULCAgICAgICAgIC8vIElkZW50aXR5IGluIHZlcnRpY2FsLCBGTElQQURTVCBpbiBob3Jpem9udGFsCn07CgpzdGF0aWMgY29uc3QgaW50IGdfdmVyX3R4X3R5cGVbVFhfVFlQRVNdID0gewogIERDVDIsICAvLyBEQ1RfRENULCAgICAgICAgICAgIC8vIERDVCBpbiBib3RoIGhvcml6b250YWwgYW5kIHZlcnRpY2FsCiAgRFNUNywgIC8vIEFEU1RfRENULCAgICAgICAgICAgLy8gQURTVCBpbiB2ZXJ0aWNhbCwgRENUIGluIGhvcml6b250YWwKICBEQ1QyLCAgLy8gRENUX0FEU1QsICAgICAgICAgICAvLyBEQ1QgaW4gdmVydGljYWwsIEFEU1QgaW4gaG9yaXpvbnRhbAogIERTVDcsICAvLyBBRFNUX0FEU1QsICAgICAgICAgIC8vIEFEU1QgaW4gYm90aCBkaXJlY3Rpb25zCiAgRENUOCwgIC8vIEZMSVBBRFNUX0RDVCwgICAgICAgLy8gRkxJUEFEU1QgaW4gdmVydGljYWwsIERDVCBpbiBob3Jpem9udGFsCiAgRENUMiwgIC8vIERDVF9GTElQQURTVCwgICAgICAgLy8gRENUIGluIHZlcnRpY2FsLCBGTElQQURTVCBpbiBob3Jpem9udGFsCiAgRENUOCwgIC8vIEZMSVBBRFNUX0ZMSVBBRFNULCAgLy8gRkxJUEFEU1QgaW4gYm90aCBkaXJlY3Rpb25zCiAgRFNUNywgIC8vIEFEU1RfRkxJUEFEU1QsICAgICAgLy8gQURTVCBpbiB2ZXJ0aWNhbCwgRkxJUEFEU1QgaW4gaG9yaXpvbnRhbAogIERDVDgsICAvLyBGTElQQURTVF9BRFNULCAgICAgIC8vIEZMSVBBRFNUIGluIHZlcnRpY2FsLCBBRFNUIGluIGhvcml6b250YWwKICBJRFQsICAgLy8gSURUWCwgICAgICAgICAgICAgICAvLyBJZGVudGl0eSBpbiBib3RoIGRpcmVjdGlvbnMKICBEQ1QyLCAgLy8gVl9EQ1QsICAgICAgICAgICAgICAvLyBEQ1QgaW4gdmVydGljYWwsIGlkZW50aXR5IGluIGhvcml6b250YWwKICBJRFQsICAgLy8gSF9EQ1QsICAgICAgICAgICAgICAvLyBJZGVudGl0eSBpbiB2ZXJ0aWNhbCwgRENUIGluIGhvcml6b250YWwKICBEU1Q3LCAgLy8gVl9BRFNULCAgICAgICAgICAgICAvLyBBRFNUIGluIHZlcnRpY2FsLCBpZGVudGl0eSBpbiBob3Jpem9udGFsCiAgSURULCAgIC8vIEhfQURTVCwgICAgICAgICAgICAgLy8gSWRlbnRpdHkgaW4gdmVydGljYWwsIEFEU1QgaW4gaG9yaXpvbnRhbAogIERDVDgsICAvLyBWX0ZMSVBBRFNULCAgICAgICAgIC8vIEZMSVBBRFNUIGluIHZlcnRpY2FsLCBpZGVudGl0eSBpbiBob3Jpem9udGFsCiAgSURULCAgIC8vIEhfRkxJUEFEU1QsICAgICAgICAgLy8gSWRlbnRpdHkgaW4gdmVydGljYWwsIEZMSVBBRFNUIGluIGhvcml6b250YWwKfTsKCnN0YXRpYyBjb25zdCBpbnQgbWluX2NsYXNzX3dpdGhfb2Zmc2V0WzddID0geyA0LCAzLCAyLCAwLCAwLCAwLCAwIH07CgojaWZkZWYgX19jcGx1c3BsdXMKfSAgLy8gZXh0ZXJuICJDIgojZW5kaWYKCiNlbmRpZiAgLy8gQU9NX0FWMV9DT01NT05fQ09NTU9OX0RBVEFfSF8K