LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCiAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCiAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCiAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQogKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCiAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICoKICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICoKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAogKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgogKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCiAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKICogdW5kZXIgdGhlIExpY2Vuc2UuCiAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCgovLyBNQVJLRVIodXBkYXRlX3ByZWNvbXAucHkpOiBhdXRvZ2VuIGluY2x1ZGUgc3RhdGVtZW50LCBkbyBub3QgcmVtb3ZlCiNpbmNsdWRlICJwcmVjb21waWxlZF9zdnguaHh4IgojaW5jbHVkZSAic3Z4L0VuaGFuY2VkQ3VzdG9tU2hhcGVHZW9tZXRyeS5oeHgiCiNpbmNsdWRlIDxjb20vc3VuL3N0YXIvZHJhd2luZy9FbmhhbmNlZEN1c3RvbVNoYXBlR2x1ZVBvaW50VHlwZS5ocHA+Ci8qCnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIFZlcnRbXSA9CnsKCXsgMCwgMCwgfQp9OwpzdGF0aWMgY29uc3Qgc2FsX3VJbnQxNiBTZWdtW10gPQp7CgkweDQwMDAsCgkweDgwMDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhIENhbGNbXSA9CnsKCXsgMHgwMDAwLCAwLCAwLCAwIH0KfTsKc3RhdGljIGNvbnN0IHNhbF9JbnQzMiBEZWZhdWx0W10gPQp7CgkwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlRleHRSZWN0IFRleHRSZWN0W10gPQp7Cgl7IHsgMCwgMCB9LCB7IDAsIDAgfSB9Cn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRWZXJ0LCBzaXplb2YoIG1zb19zcHRWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0U2VnbSwgc2l6ZW9mKCBtc29fc3B0U2VnbSApID4+IDEsCgkoU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEqKW1zb19zcHRDYWxjLCBzaXplb2YoIG1zb19zcHRDYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0RGVmYXVsdCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0VGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdFRleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTIxNjAwLCAyMTYwMCwKCU14ODAwMDAwMDAsIE14ODAwMDAwMDAsCgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdFZlcnQsIHNpemVvZiggbXNvX3NwdFZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKFN2eE1TRGZmSGFuZGxlcyopbXNvX3NwdEhhbmRsZXMsIHNpemVvZiggbXNvX3NwdEhhbmRsZXMgKSAvIHNpemVvZiggU3Z4TVNEZmZIYW5kbGVzICkKfTsKKi8KCnN0YXRpYyBjb25zdCBzYWxfSW50MzIgbXNvX3NwdERlZmF1bHQwW10gPQp7CgkxLCAwCn07CnN0YXRpYyBjb25zdCBzYWxfSW50MzIgbXNvX3NwdERlZmF1bHQxNDAwW10gPQp7CgkxLCAxNDAwCn07CnN0YXRpYyBjb25zdCBzYWxfSW50MzIgbXNvX3NwdERlZmF1bHQxODAwW10gPQp7CgkxLCAxODAwCn07CnN0YXRpYyBjb25zdCBzYWxfSW50MzIgbXNvX3NwdERlZmF1bHQyNTAwW10gPQp7CgkxLCAyNTAwCn07CnN0YXRpYyBjb25zdCBzYWxfSW50MzIgbXNvX3NwdERlZmF1bHQyNzAwW10gPQp7CgkxLCAyNzAwCn07CnN0YXRpYyBjb25zdCBzYWxfSW50MzIgbXNvX3NwdERlZmF1bHQzNjAwW10gPQp7CgkxLCAzNjAwCn07CnN0YXRpYyBjb25zdCBzYWxfSW50MzIgbXNvX3NwdERlZmF1bHQzNzAwW10gPQp7CgkxLCAzNzAwCn07CnN0YXRpYyBjb25zdCBzYWxfSW50MzIgbXNvX3NwdERlZmF1bHQ1NDAwW10gPQp7CgkxLCA1NDAwCn07CnN0YXRpYyBjb25zdCBzYWxfSW50MzIgbXNvX3NwdERlZmF1bHQ3MjAwW10gPQp7CgkxLCA3MjAwCn07CnN0YXRpYyBjb25zdCBzYWxfSW50MzIgbXNvX3NwdERlZmF1bHQ4MTAwW10gPQp7CgkxLCA4MTAwCn07CnN0YXRpYyBjb25zdCBzYWxfSW50MzIgbXNvX3NwdERlZmF1bHQ5NjAwW10gPQp7CgkxLCA5NjAwCn07CnN0YXRpYyBjb25zdCBzYWxfSW50MzIgbXNvX3NwdERlZmF1bHQxMDgwMFtdID0KewoJMSwgMTA4MDAKfTsKc3RhdGljIGNvbnN0IHNhbF9JbnQzMiBtc29fc3B0RGVmYXVsdDEyMDAwW10gPQp7CgkxLCAxMjAwMAp9OwpzdGF0aWMgY29uc3Qgc2FsX0ludDMyIG1zb19zcHREZWZhdWx0MTM1MDBbXSA9CnsKCTEsIDEzNTAwCn07CnN0YXRpYyBjb25zdCBzYWxfSW50MzIgbXNvX3NwdERlZmF1bHQxNjIwMFtdID0KewoJMSwgMTYyMDAKfTsKc3RhdGljIGNvbnN0IHNhbF9JbnQzMiBtc29fc3B0RGVmYXVsdDE2MjAwYW5kNTQwMFtdID0KewoJMiwgMTYyMDAsIDU0MDAKfTsKCnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRBcmNWZXJ0W10gPQp7Cgl7IDAsIDAgfSwgeyAyMTYwMCwgMjE2MDAgfSwgeyAzIE1TT19JLCAxIE1TT19JIH0sIHsgNyBNU09fSSwgNSBNU09fSSB9LCB7IDEwODAwLCAxMDgwMCB9LAoJeyAwLCAwIH0sIHsgMjE2MDAsIDIxNjAwIH0sIHsgMyBNU09fSSwgMSBNU09fSSB9LCB7IDcgTVNPX0ksIDUgTVNPX0kgfQp9OwpzdGF0aWMgY29uc3Qgc2FsX3VJbnQxNiBtc29fc3B0QXJjU2VnbVtdID0KewoJMHhhNTA0LCAweGFiMDAsIDB4MDAwMSwgMHg2MDAxLCAweDgwMDAsCgkweGE1MDQsIDB4YWEwMCwgMHg4MDAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSBtc29fc3B0QXJjQ2FsY1tdID0KewoJeyAweDQwMDksIHsgMTA4MDAsIERGRl9Qcm9wX2FkanVzdFZhbHVlLCAwIH0gfSwKCXsgMHgyMDAwLCB7IDB4NDAwLCAxMDgwMCwgMCB9IH0sCgl7IDB4NDAwYSwgeyAxMDgwMCwgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAgfSB9LAoJeyAweDIwMDAsIHsgMHg0MDIsIDEwODAwLCAwIH0gfSwKCXsgMHg0MDA5LCB7IDEwODAwLCBERkZfUHJvcF9hZGp1c3QyVmFsdWUsIDAgfSB9LAoJeyAweDIwMDAsIHsgMHg0MDQsIDEwODAwLCAwIH0gfSwKCXsgMHg0MDBhLCB7IDEwODAwLCBERkZfUHJvcF9hZGp1c3QyVmFsdWUsIDAgfSB9LAoJeyAweDIwMDAsIHsgMHg0MDYsIDEwODAwLCAwIH0gfQp9OwpzdGF0aWMgY29uc3Qgc2FsX0ludDMyIG1zb19zcHRBcmNEZWZhdWx0W10gPQp7CgkyLCAyNzAsIDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdFN0YW5kYXJkR2x1ZVBvaW50c1tdID0KewoJeyAxMDgwMCwgMCB9LCB7IDAsIDEwODAwIH0sIHsgMTA4MDAsIDIxNjAwIH0sIHsgMjE2MDAsIDEwODAwIH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmSGFuZGxlIG1zb19zcHRBcmNIYW5kbGVbXSA9CnsKCXsJTVNERkZfSEFORExFX0ZMQUdTX1BPTEFSIHwgTVNERkZfSEFORExFX0ZMQUdTX1JBRElVU19SQU5HRSwKCQkxMDgwMCwgMHgxMDAsIDEwODAwLCAxMDgwMCwgMTA4MDAsIDEwODAwLCBNeDgwMDAwMDAwLCAweDdmZmZmZmZmIH0sCgl7CU1TREZGX0hBTkRMRV9GTEFHU19QT0xBUiB8IE1TREZGX0hBTkRMRV9GTEFHU19SQURJVVNfUkFOR0UsCgkJMTA4MDAsIDB4MTAxLCAxMDgwMCwgMTA4MDAsIDEwODAwLCAxMDgwMCwgTXg4MDAwMDAwMCwgMHg3ZmZmZmZmZiB9Cn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvQXJjID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRBcmNWZXJ0LCBzaXplb2YoIG1zb19zcHRBcmNWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0QXJjU2VnbSwgc2l6ZW9mKCBtc29fc3B0QXJjU2VnbSApID4+IDEsCgkoU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEqKW1zb19zcHRBcmNDYWxjLCBzaXplb2YoIG1zb19zcHRBcmNDYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0QXJjRGVmYXVsdCwKCU5VTEwsIDAsCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJTlVMTCwgMCwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdEFyY0hhbmRsZSwgc2l6ZW9mKCBtc29fc3B0QXJjSGFuZGxlICkgLyBzaXplb2YoIFN2eE1TRGZmSGFuZGxlICkJCS8vIGhhbmRsZXMKfTsKCnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRUZXh0U2ltcGxlVmVydFtdID0KewoJeyAwLCAwIH0sIHsgMjE2MDAsIDAgfSwgeyAyMTYwMCwgMjE2MDAgfSwgeyAwLCAyMTYwMCB9LCB7IDAsIDAgfQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb1RleHRTaW1wbGUgPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdFRleHRTaW1wbGVWZXJ0LCBzaXplb2YoIG1zb19zcHRUZXh0U2ltcGxlVmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCglOVUxMLCAwLAoJTlVMTCwgMCwKCU5VTEwsCglOVUxMLCAwLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCU5VTEwsIDAsCglOVUxMLCAwCQkvLyBoYW5kbGVzCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0UmVjdGFuZ2xlVmVydFtdID0KewoJeyAwLCAwIH0sIHsgMjE2MDAsIDAgfSwgeyAyMTYwMCwgMjE2MDAgfSwgeyAwLCAyMTYwMCB9LCB7IDAsIDAgfQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb1JlY3RhbmdsZSA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0UmVjdGFuZ2xlVmVydCwgc2l6ZW9mKCBtc29fc3B0UmVjdGFuZ2xlVmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCglOVUxMLCAwLAoJTlVMTCwgMCwKCU5VTEwsCglOVUxMLCAwLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCU5VTEwsIDAsCglOVUxMLCAwCQkvLyBoYW5kbGVzCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0Um91bmRSZWN0YW5nbGVWZXJ0W10gPQkvLyBhZGogdmFsdWUgMCAtPiAxMDgwMAp7Cgl7IDcgTVNPX0ksIDAgfSwgeyAwLCA4IE1TT19JIH0sCXsgMCwgOSBNU09fSSB9LCB7IDcgTVNPX0ksIDIxNjAwIH0sCgl7IDEwIE1TT19JLCAyMTYwMCB9LCB7IDIxNjAwLCA5IE1TT19JIH0sIHsgMjE2MDAsIDggTVNPX0kgfSwgeyAxMCBNU09fSSwgMCB9Cn07CnN0YXRpYyBjb25zdCBzYWxfdUludDE2IG1zb19zcHRSb3VuZFJlY3RhbmdsZVNlZ21bXSA9CnsKCTB4NDAwMCwgMHhhNzAxLCAweDAwMDEsIDB4YTgwMSwgMHgwMDAxLCAweGE3MDEsIDB4MDAwMSwgMHhhODAxLCAweDYwMDAsIDB4ODAwMAp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgbXNvX3NwdFJvdW5kUmVjdGFuZ2xlQ2FsY1tdID0KewoJeyAweDAwMGUsIHsgMCwgNDUsIDAgfSB9LAoJeyAweDYwMDksIHsgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDB4NDAwLCAwIH0gfSwKCXsgMHgyMDAxLCB7IDB4NDAxLCAzMTYzLCA3NjM2IH0gfSwKCXsgMHg2MDAwLCB7IERGRl9Qcm9wX2dlb0xlZnQsIDB4NDAyLCAwIH0gfSwKCXsgMHg2MDAwLCB7IERGRl9Qcm9wX2dlb1RvcCwgMHg0MDIsIDAgfSB9LAoJeyAweGEwMDAsIHsgREZGX1Byb3BfZ2VvUmlnaHQsIDAsIDB4NDAyIH0gfSwKCXsgMHhhMDAwLCB7IERGRl9Qcm9wX2dlb0JvdHRvbSwgMCwgMHg0MDIgfSB9LAoJeyAweDYwMDAsIHsgREZGX1Byb3BfZ2VvTGVmdCwgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAgfSB9LAoJeyAweDYwMDAsIHsgREZGX1Byb3BfZ2VvVG9wLCBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMCB9IH0sCgl7IDB4YTAwMCwgeyBERkZfUHJvcF9nZW9Cb3R0b20sIDAsIERGRl9Qcm9wX2FkanVzdFZhbHVlIH0gfSwKCXsgMHhhMDAwLCB7IERGRl9Qcm9wX2dlb1JpZ2h0LCAwLCBERkZfUHJvcF9hZGp1c3RWYWx1ZSB9IH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgbXNvX3NwdFJvdW5kUmVjdGFuZ2xlVGV4dFJlY3RbXSA9CnsKCXsgeyAzIE1TT19JLCA0IE1TT19JIH0sIHsgNSBNU09fSSwgNiBNU09fSSB9IH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmSGFuZGxlIG1zb19zcHRSb3VuZFJlY3RhbmdsZUhhbmRsZVtdID0KewoJewlNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0UgfCBNU0RGRl9IQU5ETEVfRkxBR1NfU1dJVENIRUQsCgkJMHgxMDAsIDAsIDEwODAwLCAxMDgwMCwgMCwgMTA4MDAsIE14ODAwMDAwMDAsIDB4N2ZmZmZmZmYgfQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb1JvdW5kUmVjdGFuZ2xlID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRSb3VuZFJlY3RhbmdsZVZlcnQsIHNpemVvZiggbXNvX3NwdFJvdW5kUmVjdGFuZ2xlVmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdFJvdW5kUmVjdGFuZ2xlU2VnbSwgc2l6ZW9mKCBtc29fc3B0Um91bmRSZWN0YW5nbGVTZWdtICkgPj4gMSwKCShTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSopbXNvX3NwdFJvdW5kUmVjdGFuZ2xlQ2FsYywgc2l6ZW9mKCBtc29fc3B0Um91bmRSZWN0YW5nbGVDYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0RGVmYXVsdDM2MDAsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdFJvdW5kUmVjdGFuZ2xlVGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdFJvdW5kUmVjdGFuZ2xlVGV4dFJlY3QgKSAvIHNpemVvZiggU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyApLAoJMjE2MDAsIDIxNjAwLAoJMTA4MDAsIDEwODAwLAoJTlVMTCwgMCwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdFJvdW5kUmVjdGFuZ2xlSGFuZGxlLCBzaXplb2YoIG1zb19zcHRSb3VuZFJlY3RhbmdsZUhhbmRsZSApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCQkvLyBoYW5kbGVzCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0UmlnaHRUcmlhbmdsZVZlcnRbXSA9CnsKCXsgMCwgMCB9LCB7IDIxNjAwLCAyMTYwMCB9LCB7IDAsIDIxNjAwIH0sIHsgMCwgMCB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzIG1zb19zcHRSaWdodFRyaWFuZ2xlVGV4dFJlY3RbXSA9CnsKCXsgeyAxOTAwLCAxMjcwMCB9LCB7IDEyNzAwLCAxOTcwMCB9IH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdFJpZ2h0VHJpYW5nbGVHbHVlUG9pbnRzW10gPQp7Cgl7IDAsIDAgfSwgeyAwLCAxMDgwMCB9LCB7IDAsIDIxNjAwIH0sIHsgMTA4MDAsIDIxNjAwIH0sIHsgMjE2MDAsIDIxNjAwIH0sIHsgMTA4MDAsIDEwODAwIH0KfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29SaWdodFRyaWFuZ2xlID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRSaWdodFRyaWFuZ2xlVmVydCwgc2l6ZW9mKCBtc29fc3B0UmlnaHRUcmlhbmdsZVZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJTlVMTCwgMCwKCU5VTEwsIDAsCglOVUxMLAoJKFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMqKW1zb19zcHRSaWdodFRyaWFuZ2xlVGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdFJpZ2h0VHJpYW5nbGVUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRSaWdodFRyaWFuZ2xlR2x1ZVBvaW50cywgc2l6ZW9mKCBtc29fc3B0UmlnaHRUcmlhbmdsZUdsdWVQb2ludHMgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJTlVMTCwgMAkJLy8gaGFuZGxlcwp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdEVsbGlwc2VWZXJ0W10gPQp7Cgl7IDEwODAwLCAxMDgwMCB9LCB7IDEwODAwLCAxMDgwMCB9LCAgeyAwLCAzNjAgfQp9OwpzdGF0aWMgY29uc3Qgc2FsX3VJbnQxNiBtc29fc3B0RWxsaXBzZVNlZ21bXSA9CnsKCTB4YTIwMywgMHg2MDAwLCAweDgwMDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgbXNvX3NwdEVsbGlwc2VUZXh0UmVjdFtdID0KewoJeyB7IDMxNjMsIDMxNjMgfSwgeyAxODQzNywgMTg0MzcgfSB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRFbGxpcHNlR2x1ZVBvaW50c1tdID0KewoJeyAxMDgwMCwgMCB9LCB7IDMxNjMsIDMxNjMgfSwgeyAwLCAxMDgwMCB9LCB7IDMxNjMsIDE4NDM3IH0sIHsgMTA4MDAsIDIxNjAwIH0sIHsgMTg0MzcsIDE4NDM3IH0sIHsgMjE2MDAsIDEwODAwIH0sIHsgMTg0MzcsIDMxNjMgfQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb0VsbGlwc2UgPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdEVsbGlwc2VWZXJ0LCBzaXplb2YoIG1zb19zcHRFbGxpcHNlVmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdEVsbGlwc2VTZWdtLCBzaXplb2YoIG1zb19zcHRFbGxpcHNlU2VnbSApID4+IDEsCglOVUxMLCAwLAoJTlVMTCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0RWxsaXBzZVRleHRSZWN0LCBzaXplb2YoIG1zb19zcHRFbGxpcHNlVGV4dFJlY3QgKSAvIHNpemVvZiggU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyApLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0RWxsaXBzZUdsdWVQb2ludHMsIHNpemVvZiggbXNvX3NwdEVsbGlwc2VHbHVlUG9pbnRzICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCU5VTEwsIDAJCS8vIGhhbmRsZXMKfTsKCnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRQYXJhbGxlbG9ncmFtVmVydFtdID0JLy8gYWRqdXN0bWVudDEgOiAwIC0gMjE2MDAKewoJeyAwIE1TT19JLCAwIH0sCXsgMjE2MDAsIDAgfSwgeyAxIE1TT19JLCAyMTYwMCB9LCB7IDAsIDIxNjAwIH0KfTsKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvX3NwdFBhcmFsbGVsb2dyYW1TZWdtW10gPQp7CgkweDQwMDAsCTB4MDAwMywJMHg2MDAxLAkweDgwMDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhIG1zb19zcHRQYXJhbGxlbG9ncmFtQ2FsY1tdID0KewoJeyAweDQwMDAsIHsgMCwgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAgfSB9LAoJeyAweDgwMDAsIHsgMCwgMjE2MDAsIERGRl9Qcm9wX2FkanVzdFZhbHVlIH0gfSwKCXsgMHgyMDAxLCB7IERGRl9Qcm9wX2FkanVzdFZhbHVlLCAxMCwgMjQgfSB9LAoJeyAweDIwMDAsIHsgMHgwNDAyLCAxNzUwLCAwIH0gfSwKCXsgMHg4MDAwLCB7IDIxNjAwLCAwLCAweDA0MDMgfSB9LAoJeyAweDIwMDEsIHsgMHg0MDAsIDEsIDIgfSB9LAoJeyAweDQwMDAsIHsgMTA4MDAsIDB4NDA1LCAwIH0gfSwKCXsgMHgyMDAwLCB7IDB4NDAwLCAwLCAxMDgwMCB9IH0sCgl7IDB4NjAwNiwgeyAweDQwNywgMHg0MGQsIDAgfSB9LAoJeyAweDgwMDAsIHsgMTA4MDAsIDAsIDB4NDA1IH0gfSwKCXsgMHg2MDA2LCB7IDB4NDA3LCAweDQwYywgMjE2MDAgfSB9LAoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIDB4NDA1IH0gfSwKCXsgMHg4MDAxLCB7IDIxNjAwLCAxMDgwMCwgMHg0MDAgfSB9LAoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIDB4NDBjIH0gfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyBtc29fc3B0UGFyYWxsZWxvZ3JhbVRleHRSZWN0W10gPQp7Cgl7IHsgMyBNU09fSSwgMyBNU09fSSB9LCB7IDQgTVNPX0ksIDQgTVNPX0kgfSB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRQYXJhbGxlbG9ncmFtR2x1ZVBvaW50c1tdID0KewoJeyA2IE1TT19JLCAwIH0sIHsgMTA4MDAsIDggTVNPX0kgfSwgeyAxMSBNU09fSSwgMTA4MDAgfSwgeyA5IE1TT19JLCAyMTYwMCB9LCB7IDEwODAwLCAxMCBNU09fSSB9LCB7IDUgTVNPX0ksIDEwODAwIH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmSGFuZGxlIG1zb19zcHRQYXJhbGxlbG9ncmFtSGFuZGxlW10gPQp7Cgl7CU1TREZGX0hBTkRMRV9GTEFHU19SQU5HRSwKCQkweDEwMCwgMCwgMTA4MDAsIDEwODAwLCAwLCAyMTYwMCwgTXg4MDAwMDAwMCwgMHg3ZmZmZmZmZiB9Cn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvUGFyYWxsZWxvZ3JhbSA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0UGFyYWxsZWxvZ3JhbVZlcnQsIHNpemVvZiggbXNvX3NwdFBhcmFsbGVsb2dyYW1WZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0UGFyYWxsZWxvZ3JhbVNlZ20sIHNpemVvZiggbXNvX3NwdFBhcmFsbGVsb2dyYW1TZWdtICkgPj4gMSwKCShTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSopbXNvX3NwdFBhcmFsbGVsb2dyYW1DYWxjLCBzaXplb2YoIG1zb19zcHRQYXJhbGxlbG9ncmFtQ2FsYyApIC8gc2l6ZW9mKCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSApLAoJKHNhbF9JbnQzMiopbXNvX3NwdERlZmF1bHQ1NDAwLAoJKFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMqKW1zb19zcHRQYXJhbGxlbG9ncmFtVGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdFBhcmFsbGVsb2dyYW1UZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRQYXJhbGxlbG9ncmFtR2x1ZVBvaW50cywgc2l6ZW9mKCBtc29fc3B0UGFyYWxsZWxvZ3JhbUdsdWVQb2ludHMgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKFN2eE1TRGZmSGFuZGxlKiltc29fc3B0UGFyYWxsZWxvZ3JhbUhhbmRsZSwgc2l6ZW9mKCBtc29fc3B0UGFyYWxsZWxvZ3JhbUhhbmRsZSApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCQkvLyBoYW5kbGVzCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0RGlhbW9uZFZlcnRbXSA9CnsKCXsgMTA4MDAsIDAgfSwgeyAyMTYwMCwgMTA4MDAgfSwgeyAxMDgwMCwgMjE2MDAgfSwgewkwLCAxMDgwMCB9LCB7IDEwODAwLCAwIH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgbXNvX3NwdERpYW1vbmRUZXh0UmVjdFtdID0KewoJeyB7IDU0MDAsIDU0MDAgfSwgeyAxNjIwMCwgMTYyMDAgfSB9Cn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvRGlhbW9uZCA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0RGlhbW9uZFZlcnQsIHNpemVvZiggbXNvX3NwdERpYW1vbmRWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCU5VTEwsIDAsCglOVUxMLCAwLAoJTlVMTCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0RGlhbW9uZFRleHRSZWN0LCBzaXplb2YoIG1zb19zcHREaWFtb25kVGV4dFJlY3QgKSAvIHNpemVvZiggU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyApLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0U3RhbmRhcmRHbHVlUG9pbnRzLCBzaXplb2YoIG1zb19zcHRTdGFuZGFyZEdsdWVQb2ludHMgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJTlVMTCwgMAkJLy8gaGFuZGxlcwp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdFRyYXBlem9pZFZlcnRbXSA9CQkvLyBhZGp1c3RtZW50MSA6IDAgLSAxMDgwMAp7Cgl7IDAsIDAgfSwgeyAyMTYwMCwgMCB9LCB7MCBNU09fSSwgMjE2MDAgfSwgeyAxIE1TT19JLCAyMTYwMCB9Cn07CnN0YXRpYyBjb25zdCBzYWxfdUludDE2IG1zb19zcHRUcmFwZXpvaWRTZWdtW10gPQp7CgkweDQwMDAsIDB4MDAwMywJMHg2MDAxLAkweDgwMDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhIG1zb19zcHRUcmFwZXpvaWRDYWxjW10gPQp7Cgl7IDB4ODAwMCwgeyAyMTYwMCwgMCwgREZGX1Byb3BfYWRqdXN0VmFsdWUgfSB9LAoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAsIDAgfSB9LAoJeyAweDIwMDEsIHsgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDEwLCAxOCB9IH0sCgl7IDB4MjAwMCwgeyAweDA0MDIsIDE3NTAsIDAgfSB9LAoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIDB4NDAzIH0gfSwKCXsgMHgyMDAxLCB7IERGRl9Qcm9wX2FkanVzdFZhbHVlLCAxLCAyIH0gfSwKCXsgMHg4MDAwLCB7IDIxNjAwLCAwLCAweDQwNSB9IH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgbXNvX3NwdFRyYXBlem9pZFRleHRSZWN0W10gPQp7Cgl7IHsgMyBNU09fSSwgMyBNU09fSSB9LCB7IDQgTVNPX0ksIDQgTVNPX0kgfSB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRUcmFwZXpvaWRHbHVlUG9pbnRzW10gPQp7Cgl7IDYgTVNPX0ksIDEwODAwIH0sIHsgMTA4MDAsIDIxNjAwIH0sIHsgNSBNU09fSSwgMTA4MDAgfSwgeyAxMDgwMCwgMCB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkhhbmRsZSBtc29fc3B0VHJhcGV6b2lkSGFuZGxlW10gPQp7Cgl7CU1TREZGX0hBTkRMRV9GTEFHU19SQU5HRSwKCQkweDEwMCwgMSwgMTA4MDAsIDEwODAwLCAwLCAxMDgwMCwgTXg4MDAwMDAwMCwgMHg3ZmZmZmZmZiB9Cn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvVHJhcGV6b2lkID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRUcmFwZXpvaWRWZXJ0LCBzaXplb2YoIG1zb19zcHRUcmFwZXpvaWRWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0VHJhcGV6b2lkU2VnbSwgc2l6ZW9mKCBtc29fc3B0VHJhcGV6b2lkU2VnbSApID4+IDEsCgkoU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEqKW1zb19zcHRUcmFwZXpvaWRDYWxjLCBzaXplb2YoIG1zb19zcHRUcmFwZXpvaWRDYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0RGVmYXVsdDU0MDAsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdFRyYXBlem9pZFRleHRSZWN0LCBzaXplb2YoIG1zb19zcHRUcmFwZXpvaWRUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRUcmFwZXpvaWRHbHVlUG9pbnRzLCBzaXplb2YoIG1zb19zcHRUcmFwZXpvaWRHbHVlUG9pbnRzICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdFRyYXBlem9pZEhhbmRsZSwgc2l6ZW9mKCBtc29fc3B0VHJhcGV6b2lkSGFuZGxlICkgLyBzaXplb2YoIFN2eE1TRGZmSGFuZGxlICkJCS8vIGhhbmRsZXMKfTsKCnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRPY3RhZ29uVmVydFtdID0JCS8vIGFkanVzdG1lbnQxIDogMCAtIDEwODAwCnsKCXsgMCBNU09fSSwgMCB9LCB7IDIgTVNPX0ksIDAgfSwgeyAyMTYwMCwgMSBNU09fSSB9LCB7IDIxNjAwLCAzIE1TT19JIH0sCgl7IDIgTVNPX0ksIDIxNjAwIH0sIHsgMCBNU09fSSwgMjE2MDAgfSwgeyAwLCAzIE1TT19JIH0sIHsgMCwgMSBNU09fSSB9Cn07CnN0YXRpYyBjb25zdCBzYWxfdUludDE2IG1zb19zcHRPY3RhZ29uU2VnbVtdID0KewoJMHg0MDAwLCAweDAwMDcsIDB4NjAwMSwgMHg4MDAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSBtc29fc3B0T2N0YWdvbkNhbGNbXSA9CnsKCXsgMHg2MDAwLCB7IERGRl9Qcm9wX2dlb0xlZnQsIERGRl9Qcm9wX2FkanVzdFZhbHVlLCAwIH0gfSwKCXsgMHg2MDAwLCB7IERGRl9Qcm9wX2dlb1RvcCwgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAgfSB9LAoJeyAweGEwMDAsIHsgREZGX1Byb3BfZ2VvUmlnaHQsIDAsIERGRl9Qcm9wX2FkanVzdFZhbHVlIH0gfSwKCXsgMHhhMDAwLCB7IERGRl9Qcm9wX2dlb0JvdHRvbSwgMCwgREZGX1Byb3BfYWRqdXN0VmFsdWUgfSB9LAoJeyAweDIwMDEsIHsgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDEsIDIgfSB9LAoJeyAweDYwMDAsIHsgREZGX1Byb3BfZ2VvTGVmdCwgMHg0MDQsIDAgfSB9LAoJeyAweDYwMDAsIHsgREZGX1Byb3BfZ2VvVG9wLCAweDQwNCwgMCB9IH0sCgl7IDB4YTAwMCwgeyBERkZfUHJvcF9nZW9SaWdodCwgMCwgMHg0MDQgfSB9LAoJeyAweGEwMDAsIHsgREZGX1Byb3BfZ2VvQm90dG9tLCAwLCAweDQwNCB9IH0KfTsKc3RhdGljIGNvbnN0IHNhbF9JbnQzMiBtc29fc3B0T2N0YWdvbkRlZmF1bHRbXSA9CnsKCTEsIDUwMDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgbXNvX3NwdE9jdGFnb25UZXh0UmVjdFtdID0KewoJeyB7IDUgTVNPX0ksIDYgTVNPX0kgfSwgeyA3IE1TT19JLCA4IE1TT19JIH0gfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZIYW5kbGUgbXNvX3NwdE9jdGFnb25IYW5kbGVbXSA9CnsKCXsJTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFLAoJCTB4MTAwLCAwLCAxMDgwMCwgMTA4MDAsIDAsIDEwODAwLCBNeDgwMDAwMDAwLCAweDdmZmZmZmZmIH0KfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29PY3RhZ29uID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRPY3RhZ29uVmVydCwgc2l6ZW9mKCBtc29fc3B0T2N0YWdvblZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKHNhbF91SW50MTYqKW1zb19zcHRPY3RhZ29uU2VnbSwgc2l6ZW9mKCBtc29fc3B0T2N0YWdvblNlZ20gKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0T2N0YWdvbkNhbGMsIHNpemVvZiggbXNvX3NwdE9jdGFnb25DYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0T2N0YWdvbkRlZmF1bHQsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdE9jdGFnb25UZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0T2N0YWdvblRleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTIxNjAwLCAyMTYwMCwKCTEwODAwLCAxMDgwMCwKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0U3RhbmRhcmRHbHVlUG9pbnRzLCBzaXplb2YoIG1zb19zcHRTdGFuZGFyZEdsdWVQb2ludHMgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKFN2eE1TRGZmSGFuZGxlKiltc29fc3B0T2N0YWdvbkhhbmRsZSwgc2l6ZW9mKCBtc29fc3B0T2N0YWdvbkhhbmRsZSApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCQkvLyBoYW5kbGVzCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0SXNvY2VsZXNUcmlhbmdsZVZlcnRbXSA9CS8vIGFkanVzdG1lbnQxIDogMCAtIDIxNjAwCnsKCXsgMCBNU09fSSwgMCB9LCB7IDIxNjAwLCAyMTYwMCB9LCB7IDAsIDIxNjAwIH0KfTsKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvX3NwdElzb2NlbGVzVHJpYW5nbGVTZWdtW10gPQp7CgkweDQwMDAsIDB4MDAwMiwgMHg2MDAxLCAweDgwMDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhIG1zb19zcHRJc29jZWxlc1RyaWFuZ2xlQ2FsY1tdID0KewoJeyAweDQwMDAsIHsgMCwgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAgfSB9LAoJeyAweDIwMDEsIHsgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDEsIDIgfSB9LAoJeyAweDIwMDAsIHsgMHg0MDEsIDEwODAwLCAwIH0gfSwKCXsgMHgyMDAxLCB7IERGRl9Qcm9wX2FkanVzdFZhbHVlLCAyLCAzIH0gfSwKCXsgMHgyMDAwLCB7IDB4NDAzLCA3MjAwLCAwIH0gfSwKCXsgMHg4MDAwLCB7IDIxNjAwLCAwLCAweDQwMCB9IH0sCgl7IDB4MjAwMSwgeyAweDQwNSwgMSwgMiB9IH0sCgl7IDB4ODAwMCwgeyAyMTYwMCwgMCwgMHg0MDYgfSB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzIG1zb19zcHRJc29jZWxlc1RyaWFuZ2xlVGV4dFJlY3RbXSA9CnsKCXsgeyAxIE1TT19JLCAxMDgwMCB9LCB7IDIgTVNPX0ksIDE4MDAwIH0gfSwKCXsgeyAzIE1TT19JLCA3MjAwIH0sIHsgNCBNU09fSSwgMjE2MDAJfSB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRJc29jZWxlc1RyaWFuZ2xlR2x1ZVBvaW50c1tdID0KewoJeyAwIE1TT19JLCAwIH0sIHsgMSBNU09fSSwgMTA4MDAgfSwgeyAwLCAyMTYwMCB9LCB7IDEwODAwLCAyMTYwMCB9LCB7IDIxNjAwLCAyMTYwMCB9LCB7IDcgTVNPX0ksIDEwODAwIH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmSGFuZGxlIG1zb19zcHRJc29jZWxlc1RyaWFuZ2xlSGFuZGxlW10gPQp7Cgl7CU1TREZGX0hBTkRMRV9GTEFHU19SQU5HRSwKCQkweDEwMCwgMCwgMTA4MDAsIDEwODAwLCAwLCAyMTYwMCwgTXg4MDAwMDAwMCwgMHg3ZmZmZmZmZiB9Cn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvSXNvY2VsZXNUcmlhbmdsZSA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0SXNvY2VsZXNUcmlhbmdsZVZlcnQsIHNpemVvZiggbXNvX3NwdElzb2NlbGVzVHJpYW5nbGVWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0SXNvY2VsZXNUcmlhbmdsZVNlZ20sIHNpemVvZiggbXNvX3NwdElzb2NlbGVzVHJpYW5nbGVTZWdtICkgPj4gMSwKCShTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSopbXNvX3NwdElzb2NlbGVzVHJpYW5nbGVDYWxjLCBzaXplb2YoIG1zb19zcHRJc29jZWxlc1RyaWFuZ2xlQ2FsYyApIC8gc2l6ZW9mKCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSApLAoJKHNhbF9JbnQzMiopbXNvX3NwdERlZmF1bHQxMDgwMCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0SXNvY2VsZXNUcmlhbmdsZVRleHRSZWN0LCBzaXplb2YoIG1zb19zcHRJc29jZWxlc1RyaWFuZ2xlVGV4dFJlY3QgKSAvIHNpemVvZiggU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyApLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0SXNvY2VsZXNUcmlhbmdsZUdsdWVQb2ludHMsIHNpemVvZiggbXNvX3NwdElzb2NlbGVzVHJpYW5nbGVHbHVlUG9pbnRzICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdElzb2NlbGVzVHJpYW5nbGVIYW5kbGUsIHNpemVvZiggbXNvX3NwdElzb2NlbGVzVHJpYW5nbGVIYW5kbGUgKSAvIHNpemVvZiggU3Z4TVNEZmZIYW5kbGUgKQkJLy8gaGFuZGxlcwp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdEhleGFnb25WZXJ0W10gPQkJCQkvLyBhZGp1c3RtZW50MSA6IDAgLSAxMDgwMAp7Cgl7IDAgTVNPX0ksIDAgfSwgeyAxIE1TT19JLCAwIH0sIHsgMjE2MDAsIDEwODAwIH0sIHsgMSBNU09fSSwgMjE2MDAgfSwKCXsgMCBNU09fSSwgMjE2MDAgfSwgeyAwLCAxMDgwMCB9Cn07CnN0YXRpYyBjb25zdCBzYWxfdUludDE2IG1zb19zcHRIZXhhZ29uU2VnbVtdID0KewoJMHg0MDAwLCAweDAwMDUsIDB4NjAwMSwgMHg4MDAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSBtc29fc3B0SGV4YWdvbkNhbGNbXSA9CnsKCXsgMHgyMDAwLCB7IERGRl9Qcm9wX2FkanVzdFZhbHVlLCAwLCAwIH0gfSwKCXsgMHg4MDAwLCB7IDIxNjAwLCAwLCBERkZfUHJvcF9hZGp1c3RWYWx1ZSB9IH0sCgl7IDB4MjAwMSwgeyBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMTAwLCAyMzQgfSB9LAoJeyAweDIwMDAsIHsgMHg0MDIsIDE3MDAsIDAgfSB9LAoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIDB4NDAzIH0gfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyBtc29fc3B0SGV4YWdvblRleHRSZWN0W10gPQp7Cgl7IHsgMyBNU09fSSwgMyBNU09fSSB9LCB7IDQgTVNPX0ksIDQgTVNPX0kgfSB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkhhbmRsZSBtc29fc3B0SGV4YWdvbkhhbmRsZVtdID0KewoJewlNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0UsCgkJMHgxMDAsIDAsIDEwODAwLCAxMDgwMCwgMCwgMTA4MDAsIE14ODAwMDAwMDAsIDB4N2ZmZmZmZmYgfQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb0hleGFnb24gPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdEhleGFnb25WZXJ0LCBzaXplb2YoIG1zb19zcHRIZXhhZ29uVmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdEhleGFnb25TZWdtLCBzaXplb2YoIG1zb19zcHRIZXhhZ29uU2VnbSApID4+IDEsCgkoU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEqKW1zb19zcHRIZXhhZ29uQ2FsYywgc2l6ZW9mKCBtc29fc3B0SGV4YWdvbkNhbGMgKSAvIHNpemVvZiggU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgKSwKCShzYWxfSW50MzIqKW1zb19zcHREZWZhdWx0NTQwMCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0SGV4YWdvblRleHRSZWN0LCBzaXplb2YoIG1zb19zcHRIZXhhZ29uVGV4dFJlY3QgKSAvIHNpemVvZiggU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyApLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0U3RhbmRhcmRHbHVlUG9pbnRzLCBzaXplb2YoIG1zb19zcHRTdGFuZGFyZEdsdWVQb2ludHMgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKFN2eE1TRGZmSGFuZGxlKiltc29fc3B0SGV4YWdvbkhhbmRsZSwgc2l6ZW9mKCBtc29fc3B0SGV4YWdvbkhhbmRsZSApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCQkvLyBoYW5kbGVzCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0UGVudGFnb25WZXJ0W10gPQp7Cgl7IDEwODAwLCAwIH0sIHsgMCwgODI2MCB9LCB7IDQyMzAsIDIxNjAwIH0sIHsgMTczNzAsIDIxNjAwIH0sCgl7IDIxNjAwLCA4MjYwIH0sIHsgMTA4MDAsIDAgfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyBtc29fc3B0UGVudGFnb25UZXh0UmVjdFtdID0KewoJeyB7IDQyMzAsIDUwODAgfSwgeyAxNzM3MCwgMjE2MDAgfSB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRQZW50YWdvbkdsdWVQb2ludHNbXSA9CnsKCXsgMTA4MDAsIDAgfSwgeyAwLCA4MjYwIH0sIHsgNDIzMCwgMjE2MDAgfSwgeyAxMDgwMCwgMjE2MDAgfSwKCXsgMTczNzAsIDIxNjAwIH0sIHsgMjE2MDAsIDgyNjAgfQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb1BlbnRhZ29uID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRQZW50YWdvblZlcnQsIHNpemVvZiggbXNvX3NwdFBlbnRhZ29uVmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCglOVUxMLCAwLAoJTlVMTCwgMCwKCU5VTEwsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdFBlbnRhZ29uVGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdFBlbnRhZ29uVGV4dFJlY3QgKSAvIHNpemVvZiggU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyApLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0UGVudGFnb25HbHVlUG9pbnRzLCBzaXplb2YoIG1zb19zcHRQZW50YWdvbkdsdWVQb2ludHMgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJTlVMTCwgMAkJLy8gaGFuZGxlcwp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdFBsdXNWZXJ0W10gPQkJCQkvLyBhZGp1c3RtZW50MSA6IDAgLSAxMDgwMAp7Cgl7IDEgTVNPX0ksIDAgfSwgeyAyIE1TT19JLCAwIH0sIHsgMiBNU09fSSwgMSBNU09fSSB9LCB7IDIxNjAwLCAxIE1TT19JIH0sCgl7IDIxNjAwLCAzIE1TT19JIH0sIHsgMiBNU09fSSwgMyBNU09fSSB9LCB7IDIgTVNPX0ksIDIxNjAwIH0sIHsgMSBNU09fSSwgMjE2MDAgfSwKCXsgMSBNU09fSSwgMyBNU09fSSB9LCB7IDAsIDMgTVNPX0kgfSwgeyAwLCAxIE1TT19JIH0sIHsgMSBNU09fSSwgMSBNU09fSSB9LCB7IDEgTVNPX0ksIDAgfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgbXNvX3NwdFBsdXNDYWxjW10gPQp7Cgl7IDB4MjAwMSwgeyBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMTA3OTksIDEwODAwIH0gfSwKICAgIHsgMHgyMDAwLCB7IDB4NDAwLCAwLCAwIH0gfSwKICAgIHsgMHhhMDAwLCB7IERGRl9Qcm9wX2dlb1JpZ2h0LCAwLCAweDQwMCB9IH0sCiAgICB7IDB4YTAwMCwgeyBERkZfUHJvcF9nZW9Cb3R0b20sIDAsIDB4NDAwIH0gfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyBtc29fc3B0UGx1c1RleHRSZWN0W10gPQp7Cgl7IHsgMSBNU09fSSwgMSBNU09fSSB9LCB7IDIgTVNPX0ksIDMgTVNPX0kgfSB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkhhbmRsZSBtc29fc3B0UGx1c0hhbmRsZVtdID0KewoJewlNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0UgfCBNU0RGRl9IQU5ETEVfRkxBR1NfU1dJVENIRUQsCgkJMHgxMDAsIDAsIDEwODAwLCAxMDgwMCwgMCwgMTA4MDAsIE14ODAwMDAwMDAsIDB4N2ZmZmZmZmYgfQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb1BsdXMgPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdFBsdXNWZXJ0LCBzaXplb2YoIG1zb19zcHRQbHVzVmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCglOVUxMLCAwLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0UGx1c0NhbGMsIHNpemVvZiggbXNvX3NwdFBsdXNDYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0RGVmYXVsdDU0MDAsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdFBsdXNUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0UGx1c1RleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTIxNjAwLCAyMTYwMCwKCTEwODAwLCAxMDgwMCwKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0U3RhbmRhcmRHbHVlUG9pbnRzLCBzaXplb2YoIG1zb19zcHRTdGFuZGFyZEdsdWVQb2ludHMgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKFN2eE1TRGZmSGFuZGxlKiltc29fc3B0UGx1c0hhbmRsZSwgc2l6ZW9mKCBtc29fc3B0UGx1c0hhbmRsZSApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCQkvLyBoYW5kbGVzCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0Q2FuVmVydFtdID0JCS8vIGFkanVzdG1lbnQxIDogMCAtIDEwODAwCnsKCXsgNDQsIDAgfSwKCXsgMjAsIDAgfSwgeyAwLCAyIE1TT19JIH0sIHsgMCwgMCBNU09fSSB9LAkJCS8vIGNjcAoJeyAwLCAzIE1TT19JIH0sCQkJCQkJCQkJCS8vIHAKCXsgMCwgNCBNU09fSSB9LCB7IDIwLCAyMTYwMCB9LCB7IDQ0LCAyMTYwMCB9LAkJLy8gY2NwCgl7IDY4LCAyMTYwMCB9LCB7IDg4LCA0IE1TT19JIH0sIHsgODgsIDMgTVNPX0kgfSwJLy8gY2NwCgl7IDg4LCAwIE1TT19JIH0sCQkJCQkJCQkJLy8gcAoJeyA4OCwgMiBNU09fSSB9LCB7IDY4LCAwIH0sIHsgNDQsIDAgfSwJCQkJLy8gY2NwCgl7IDQ0LCAwIH0sCQkJCQkJCQkJCQkvLyBwCgl7IDIwLCAwIH0sIHsgMCwgMiBNU09fSSB9LCB7IDAsIDAgTVNPX0kgfSwJCQkvLyBjY3AKCXsgMCwgNSBNU09fSSB9LCB7IDIwLCA2IE1TT19JIH0sIHsgNDQsIDYgTVNPX0kgfSwJLy8gY2NwCgl7IDY4LCA2IE1TT19JIH0seyA4OCwgNSBNU09fSSB9LCB7IDg4LCAwIE1TT19JIH0sCS8vIGNjcAoJeyA4OCwgMiBNU09fSSB9LHsgNjgsIDAgfSwgeyA0NCwgMCB9CQkJCS8vIGNjcAp9OwpzdGF0aWMgY29uc3Qgc2FsX3VJbnQxNiBtc29fc3B0Q2FuU2VnbVtdID0KewoJMHg0MDAwLCAweDIwMDEsIDB4MDAwMSwgMHgyMDAyLCAweDAwMDEsIDB4MjAwMSwgMHg2MDAxLCAweDgwMDAsCgkweDQwMDAsIDB4MjAwNCwgMHg2MDAxLCAweDgwMDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhIG1zb19zcHRDYW5DYWxjW10gPQp7Cgl7IDB4MjAwMSwgeyBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMiwgNCB9IH0sCQkvLyAxLzQKCXsgMHgyMDAxLCB7IDB4MDQwMCwgNiwgMTEgfSB9LAoJeyAweGEwMDAsIHsgMHgwNDAwLCAwLCAweDA0MDEgfSB9LAoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIDB4MDQwMCB9IH0sCgl7IDB4NjAwMCwgeyAweDA0MDMsIDB4MDQwMSwgMCB9IH0sCgl7IDB4NjAwMCwgeyAweDA0MDAsIDB4MDQwMSwgMCB9IH0sCgl7IDB4MjAwMSwgeyBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMiwgMiB9IH0sCgl7IDB4MDAwMCwgeyA0NCwgMCwgMCB9IH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgbXNvX3NwdENhblRleHRSZWN0W10gPQp7Cgl7IHsgMCwgNiBNU09fSSB9LCB7IDg4LCAzIE1TT19JIH0gfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0Q2FuR2x1ZVBvaW50c1tdID0KewoJeyA0NCwgNiBNU09fSSB9LCB7IDQ0LCAwIH0sIHsgMCwgMTA4MDAgfSwgeyA0NCwgMjE2MDAgfSwgeyA4OCwgMTA4MDAgfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZIYW5kbGUgbXNvX3NwdENhbkhhbmRsZVtdID0KewoJewlNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0UsCgkJNyArIDMsIDB4MTAwLCA0NCwgMTA4MDAsIE14ODAwMDAwMDAsIDB4N2ZmZmZmZmYsIDAsIDEwODAwIH0KfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29DYW4gPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdENhblZlcnQsIHNpemVvZiggbXNvX3NwdENhblZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKHNhbF91SW50MTYqKW1zb19zcHRDYW5TZWdtLCBzaXplb2YoIG1zb19zcHRDYW5TZWdtICkgPj4gMSwKCShTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSopbXNvX3NwdENhbkNhbGMsIHNpemVvZiggbXNvX3NwdENhbkNhbGMgKSAvIHNpemVvZiggU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgKSwKCShzYWxfSW50MzIqKW1zb19zcHREZWZhdWx0NTQwMCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0Q2FuVGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdENhblRleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTg4LCAyMTYwMCwKCU14ODAwMDAwMDAsIE14ODAwMDAwMDAsCgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdENhbkdsdWVQb2ludHMsIHNpemVvZiggbXNvX3NwdENhbkdsdWVQb2ludHMgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKFN2eE1TRGZmSGFuZGxlKiltc29fc3B0Q2FuSGFuZGxlLCBzaXplb2YoIG1zb19zcHRDYW5IYW5kbGUgKSAvIHNpemVvZiggU3Z4TVNEZmZIYW5kbGUgKQkJLy8gaGFuZGxlcwp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdEFycm93VmVydFtdID0JLy8gYWRqdXN0bWVudDE6IHggMCAtIDIxNjAwCnsJCQkJCQkJCQkJCQkJLy8gYWRqdXN0bWVudDI6IHkgMCAtIDEwODAwCgl7IDAsIDAgTVNPX0kgfSwgeyAxIE1TT19JLCAwIE1TT19JIH0sIHsgMSBNU09fSSwgMCB9LCB7IDIxNjAwLCAxMDgwMCB9LAoJeyAxIE1TT19JLCAyMTYwMCB9LCB7IDEgTVNPX0ksIDIgTVNPX0kgfSwgeyAwLCAyIE1TT19JIH0KfTsKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvX3NwdEFycm93U2VnbVtdID0KewoJMHg0MDAwLCAweDAwMDYsIDB4NjAwMSwJMHg4MDAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSBtc29fc3B0QXJyb3dDYWxjW10gPQp7Cgl7IDB4MjAwMCwgeyBERkZfUHJvcF9hZGp1c3QyVmFsdWUsIDAsIDAgfSB9LAoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAsIDAgfSB9LAoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIERGRl9Qcm9wX2FkanVzdDJWYWx1ZSB9IH0sCgl7IDB4ODAwMCwgeyAyMTYwMCwgMCwgMHg0MDEgfSB9LAoJeyAweDYwMDEsIHsgMHg0MDMsIDB4NDAwLCAxMDgwMCB9IH0sCgl7IDB4NjAwMCwgeyAweDQwMSwgMHg0MDQsIDAgfSB9LAoJeyAweDYwMDEsIHsgMHg0MDEsIDB4NDAwLCAxMDgwMCB9IH0sCgl7IDB4YTAwMCwgeyAweDQwMSwgMCwgMHg0MDYgfSB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzIG1zb19zcHRBcnJvd1RleHRSZWN0W10gPQp7Cgl7IHsgMCwgMCBNU09fSSB9LCB7IDUgTVNPX0ksIDIgTVNPX0kgfSB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkhhbmRsZSBtc29fc3B0QXJyb3dIYW5kbGVbXSA9CnsKCXsJTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFLAoJCTB4MTAwLCAweDEwMSwgMTA4MDAsIDEwODAwLCAwLCAyMTYwMCwgMCwgMTA4MDAgfQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb0Fycm93ID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRBcnJvd1ZlcnQsIHNpemVvZiggbXNvX3NwdEFycm93VmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdEFycm93U2VnbSwgc2l6ZW9mKCBtc29fc3B0QXJyb3dTZWdtICkgPj4gMSwKCShTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSopbXNvX3NwdEFycm93Q2FsYywgc2l6ZW9mKCBtc29fc3B0QXJyb3dDYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0RGVmYXVsdDE2MjAwYW5kNTQwMCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0QXJyb3dUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0QXJyb3dUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJTlVMTCwgMCwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdEFycm93SGFuZGxlLCBzaXplb2YoIG1zb19zcHRBcnJvd0hhbmRsZSApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCQkvLyBoYW5kbGVzCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0TGVmdEFycm93VmVydFtdID0JLy8gYWRqdXN0bWVudDE6IHggMCAtIDIxNjAwCnsJCQkJCQkJCQkJCQkJCS8vIGFkanVzdG1lbnQyOiB5IDAgLSAxMDgwMAoJeyAyMTYwMCwgMCBNU09fSSB9LCB7IDEgTVNPX0ksIDAgTVNPX0kgfSwgeyAxIE1TT19JLCAwIH0sIHsgMCwgMTA4MDAgfSwKCXsgMSBNU09fSSwgMjE2MDAgfSwgeyAxIE1TT19JLCAyIE1TT19JIH0sIHsgMjE2MDAsIDIgTVNPX0kgfQp9OwpzdGF0aWMgY29uc3Qgc2FsX3VJbnQxNiBtc29fc3B0TGVmdEFycm93U2VnbVtdID0KewoJMHg0MDAwLCAweDAwMDYsIDB4NjAwMSwJMHg4MDAwCn07CnN0YXRpYyBjb25zdCBzYWxfSW50MzIgbXNvX3NwdExlZnRBcnJvd0RlZmF1bHRbXSA9CnsKCTIsIDU0MDAsIDU0MDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgbXNvX3NwdExlZnRBcnJvd1RleHRSZWN0W10gPQp7Cgl7IHsgNyBNU09fSSwgMCBNU09fSSB9LCB7IDIxNjAwLCAyIE1TT19JIH0gfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZIYW5kbGUgbXNvX3NwdExlZnRBcnJvd0hhbmRsZVtdID0KewoJewlNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0UsCgkJMHgxMDAsIDB4MTAxLCAxMDgwMCwgMTA4MDAsIDAsIDIxNjAwLCAwLCAxMDgwMCB9Cn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvTGVmdEFycm93ID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRMZWZ0QXJyb3dWZXJ0LCBzaXplb2YoIG1zb19zcHRMZWZ0QXJyb3dWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0TGVmdEFycm93U2VnbSwgc2l6ZW9mKCBtc29fc3B0TGVmdEFycm93U2VnbSApID4+IDEsCgkoU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEqKW1zb19zcHRBcnJvd0NhbGMsIHNpemVvZiggbXNvX3NwdEFycm93Q2FsYyApIC8gc2l6ZW9mKCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSApLAoJKHNhbF9JbnQzMiopbXNvX3NwdExlZnRBcnJvd0RlZmF1bHQsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdExlZnRBcnJvd1RleHRSZWN0LCBzaXplb2YoIG1zb19zcHRMZWZ0QXJyb3dUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJTlVMTCwgMCwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdExlZnRBcnJvd0hhbmRsZSwgc2l6ZW9mKCBtc29fc3B0TGVmdEFycm93SGFuZGxlICkgLyBzaXplb2YoIFN2eE1TRGZmSGFuZGxlICkJCS8vIGhhbmRsZXMKfTsKCnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHREb3duQXJyb3dWZXJ0W10gPQkvLyBhZGp1c3RtZW50MTogeCAwIC0gMjE2MDAKewkJCQkJCQkJCQkJCQkJLy8gYWRqdXN0bWVudDI6IHkgMCAtIDEwODAwCgl7IDAgTVNPX0ksIDAgfSwJeyAwIE1TT19JLCAxIE1TT19JIH0sIHsgMCwgMSBNU09fSSB9LCB7IDEwODAwLCAyMTYwMCB9LAoJeyAyMTYwMCwgMSBNU09fSSB9LCB7IDIgTVNPX0ksIDEgTVNPX0kgfSwgeyAyIE1TT19JLCAwIH0KfTsKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvX3NwdERvd25BcnJvd1NlZ21bXSA9CnsKCTB4NDAwMCwgMHgwMDA2LCAweDYwMDEsCTB4ODAwMAp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyBtc29fc3B0RG93bkFycm93VGV4dFJlY3RbXSA9CnsKCXsgeyAwIE1TT19JLCAwIH0sIHsgMiBNU09fSSwgNSBNU09fSSB9IH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmSGFuZGxlIG1zb19zcHREb3duQXJyb3dIYW5kbGVbXSA9CnsKCXsJTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFLAoJCTB4MTAxLCAweDEwMCwgMTA4MDAsIDEwODAwLCAwLCAxMDgwMCwgMCwgMjE2MDAgfQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb0Rvd25BcnJvdyA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0RG93bkFycm93VmVydCwgc2l6ZW9mKCBtc29fc3B0RG93bkFycm93VmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdERvd25BcnJvd1NlZ20sIHNpemVvZiggbXNvX3NwdERvd25BcnJvd1NlZ20gKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0QXJyb3dDYWxjLCBzaXplb2YoIG1zb19zcHRBcnJvd0NhbGMgKSAvIHNpemVvZiggU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgKSwKCShzYWxfSW50MzIqKW1zb19zcHREZWZhdWx0MTYyMDBhbmQ1NDAwLAoJKFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMqKW1zb19zcHREb3duQXJyb3dUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0RG93bkFycm93VGV4dFJlY3QgKSAvIHNpemVvZiggU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyApLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCU5VTEwsIDAsCgkoU3Z4TVNEZmZIYW5kbGUqKW1zb19zcHREb3duQXJyb3dIYW5kbGUsIHNpemVvZiggbXNvX3NwdERvd25BcnJvd0hhbmRsZSApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCQkvLyBoYW5kbGVzCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0VXBBcnJvd1ZlcnRbXSA9CS8vIGFkanVzdG1lbnQxOiB4IDAgLSAyMTYwMAp7CQkJCQkJCQkJCQkJCQkvLyBhZGp1c3RtZW50MjogeSAwIC0gMTA4MDAKCXsgMCBNU09fSSwgMjE2MDAgfSwJeyAwIE1TT19JLCAxIE1TT19JIH0sIHsgMCwgMSBNU09fSSB9LCB7IDEwODAwLCAwIH0sCgl7IDIxNjAwLCAxIE1TT19JIH0sIHsgMiBNU09fSSwgMSBNU09fSSB9LCB7IDIgTVNPX0ksIDIxNjAwIH0KfTsKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvX3NwdFVwQXJyb3dTZWdtW10gPQp7CgkweDQwMDAsIDB4MDAwNiwgMHg2MDAxLAkweDgwMDAKfTsKc3RhdGljIGNvbnN0IHNhbF9JbnQzMiBtc29fc3B0VXBBcnJvd0RlZmF1bHRbXSA9CnsKCTIsIDU0MDAsIDU0MDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgbXNvX3NwdFVwQXJyb3dUZXh0UmVjdFtdID0KewoJeyB7IDAgTVNPX0ksIDcgTVNPX0kgfSwgeyAyIE1TT19JLCAyMTYwMCB9IH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmSGFuZGxlIG1zb19zcHRVcEFycm93SGFuZGxlW10gPQp7Cgl7CU1TREZGX0hBTkRMRV9GTEFHU19SQU5HRSwKCQkweDEwMSwgMHgxMDAsIDEwODAwLCAxMDgwMCwgMCwgMTA4MDAsIDAsIDIxNjAwIH0KfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29VcEFycm93ID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRVcEFycm93VmVydCwgc2l6ZW9mKCBtc29fc3B0VXBBcnJvd1ZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKHNhbF91SW50MTYqKW1zb19zcHRVcEFycm93U2VnbSwgc2l6ZW9mKCBtc29fc3B0VXBBcnJvd1NlZ20gKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0QXJyb3dDYWxjLCBzaXplb2YoIG1zb19zcHRBcnJvd0NhbGMgKSAvIHNpemVvZiggU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgKSwKCShzYWxfSW50MzIqKW1zb19zcHRVcEFycm93RGVmYXVsdCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0VXBBcnJvd1RleHRSZWN0LCBzaXplb2YoIG1zb19zcHRVcEFycm93VGV4dFJlY3QgKSAvIHNpemVvZiggU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyApLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCU5VTEwsIDAsCgkoU3Z4TVNEZmZIYW5kbGUqKW1zb19zcHRVcEFycm93SGFuZGxlLCBzaXplb2YoIG1zb19zcHRVcEFycm93SGFuZGxlICkgLyBzaXplb2YoIFN2eE1TRGZmSGFuZGxlICkJCS8vIGhhbmRsZXMKfTsKCnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRMZWZ0UmlnaHRBcnJvd1ZlcnRbXSA9CS8vIGFkanVzdG1lbnQxOiB4IDAgLSAxMDgwMAp7CQkJCQkJCQkJCQkJCQkJLy8gYWRqdXN0bWVudDI6IHkgMCAtIDEwODAwCgl7IDAsIDEwODAwIH0sIHsgMCBNU09fSSwgMCB9LCB7IDAgTVNPX0ksIDEgTVNPX0kgfSwJeyAyIE1TT19JLCAxIE1TT19JIH0sCgl7IDIgTVNPX0ksIDAgfSwgeyAyMTYwMCwgMTA4MDAgfSwgeyAyIE1TT19JLCAyMTYwMCB9LCB7IDIgTVNPX0ksIDMgTVNPX0kgfSwKCXsgMCBNU09fSSwgMyBNU09fSSB9LCB7IDAgTVNPX0ksIDIxNjAwIH0KfTsKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvX3NwdExlZnRSaWdodEFycm93U2VnbVtdID0KewoJMHg0MDAwLCAweDAwMDksIDB4NjAwMSwgMHg4MDAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSBtc29fc3B0RG91YmxlQXJyb3dDYWxjW10gPQp7Cgl7IDB4MjAwMCwgeyBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMCwgMCB9IH0sCgl7IDB4MjAwMCwgeyBERkZfUHJvcF9hZGp1c3QyVmFsdWUsIDAsIDAgfSB9LAoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIERGRl9Qcm9wX2FkanVzdFZhbHVlIH0gfSwKCXsgMHg4MDAwLCB7IDIxNjAwLCAwLCBERkZfUHJvcF9hZGp1c3QyVmFsdWUgfSB9LAoJeyAweDgwMDAsIHsgMTA4MDAsIDAsIERGRl9Qcm9wX2FkanVzdDJWYWx1ZSB9IH0sCgl7IDB4NjAwMSwgeyBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMHg0MDQsIDEwODAwIH0gfSwKCXsgMHg4MDAwLCB7IDIxNjAwLCAwLCAweDQwNSB9IH0sCgl7IDB4ODAwMCwgeyAxMDgwMCwgMCwgREZGX1Byb3BfYWRqdXN0VmFsdWUgfSB9LAoJeyAweDYwMDEsIHsgREZGX1Byb3BfYWRqdXN0MlZhbHVlLCAweDQwNywgMTA4MDAgfSB9LAoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIDB4NDA4IH0gfQp9OwpzdGF0aWMgY29uc3Qgc2FsX0ludDMyIG1zb19zcHRMZWZ0UmlnaHRBcnJvd0RlZmF1bHRbXSA9CnsKCTIsIDQzMDAsIDU0MDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgbXNvX3NwdExlZnRSaWdodEFycm93VGV4dFJlY3RbXSA9CnsKCXsgeyA1IE1TT19JLCAxIE1TT19JIH0sIHsgNiBNU09fSSwgMyBNU09fSSB9IH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmSGFuZGxlIG1zb19zcHRMZWZ0UmlnaHRBcnJvd0hhbmRsZVtdID0KewoJewlNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0UsCgkJMHgxMDAsIDB4MTAxLCAxMDgwMCwgMTA4MDAsIDAsIDEwODAwLCAwLCAxMDgwMCB9Cn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvTGVmdFJpZ2h0QXJyb3cgPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdExlZnRSaWdodEFycm93VmVydCwgc2l6ZW9mKCBtc29fc3B0TGVmdFJpZ2h0QXJyb3dWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0TGVmdFJpZ2h0QXJyb3dTZWdtLCBzaXplb2YoIG1zb19zcHRMZWZ0UmlnaHRBcnJvd1NlZ20gKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0RG91YmxlQXJyb3dDYWxjLCBzaXplb2YoIG1zb19zcHREb3VibGVBcnJvd0NhbGMgKSAvIHNpemVvZiggU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgKSwKCShzYWxfSW50MzIqKW1zb19zcHRMZWZ0UmlnaHRBcnJvd0RlZmF1bHQsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdExlZnRSaWdodEFycm93VGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdExlZnRSaWdodEFycm93VGV4dFJlY3QgKSAvIHNpemVvZiggU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyApLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCU5VTEwsIDAsCgkoU3Z4TVNEZmZIYW5kbGUqKW1zb19zcHRMZWZ0UmlnaHRBcnJvd0hhbmRsZSwgc2l6ZW9mKCBtc29fc3B0TGVmdFJpZ2h0QXJyb3dIYW5kbGUgKSAvIHNpemVvZiggU3Z4TVNEZmZIYW5kbGUgKQkJLy8gaGFuZGxlcwp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdFVwRG93bkFycm93VmVydFtdID0JLy8gYWRqdXN0bWVudDE6IHggMCAtIDEwODAwCnsJCQkJCQkJCQkJCQkJCQkvLyBhZGp1c3RtZW50MjogeSAwIC0gMTA4MDAKCXsgMCwgMSBNU09fSSB9LAl7IDEwODAwLCAwIH0sIHsgMjE2MDAsIDEgTVNPX0kgfSwgeyAyIE1TT19JLCAxIE1TT19JIH0sCgl7IDIgTVNPX0ksIDMgTVNPX0kgfSwgeyAyMTYwMCwgMyBNU09fSSB9LCB7IDEwODAwLCAyMTYwMCB9LCB7IDAsIDMgTVNPX0kgfSwKCXsgMCBNU09fSSwgMyBNU09fSSB9LCB7IDAgTVNPX0ksIDEgTVNPX0kgfQp9OwpzdGF0aWMgY29uc3Qgc2FsX3VJbnQxNiBtc29fc3B0VXBEb3duQXJyb3dTZWdtW10gPQp7CgkweDQwMDAsIDB4MDAwOSwgMHg2MDAxLCAweDgwMDAKfTsKc3RhdGljIGNvbnN0IHNhbF9JbnQzMiBtc29fc3B0VXBEb3duQXJyb3dEZWZhdWx0W10gPQp7CgkyLCA1NDAwLCA0MzAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzIG1zb19zcHRVcERvd25BcnJvd1RleHRSZWN0W10gPQp7Cgl7IHsgMCBNU09fSSwgOCBNU09fSSB9LCB7IDIgTVNPX0ksIDkgTVNPX0kgfSB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkhhbmRsZSBtc29fc3B0VXBEb3duQXJyb3dIYW5kbGVbXSA9CnsKCXsJTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFLAoJCTB4MTAwLCAweDEwMSwgMTA4MDAsIDEwODAwLCAwLCAxMDgwMCwgMCwgMTA4MDAgfQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb1VwRG93bkFycm93ID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRVcERvd25BcnJvd1ZlcnQsIHNpemVvZiggbXNvX3NwdFVwRG93bkFycm93VmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdFVwRG93bkFycm93U2VnbSwgc2l6ZW9mKCBtc29fc3B0VXBEb3duQXJyb3dTZWdtICkgPj4gMSwKCShTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSopbXNvX3NwdERvdWJsZUFycm93Q2FsYywgc2l6ZW9mKCBtc29fc3B0RG91YmxlQXJyb3dDYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0VXBEb3duQXJyb3dEZWZhdWx0LAoJKFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMqKW1zb19zcHRVcERvd25BcnJvd1RleHRSZWN0LCBzaXplb2YoIG1zb19zcHRVcERvd25BcnJvd1RleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTIxNjAwLCAyMTYwMCwKCU14ODAwMDAwMDAsIE14ODAwMDAwMDAsCglOVUxMLCAwLAoJKFN2eE1TRGZmSGFuZGxlKiltc29fc3B0VXBEb3duQXJyb3dIYW5kbGUsIHNpemVvZiggbXNvX3NwdFVwRG93bkFycm93SGFuZGxlICkgLyBzaXplb2YoIFN2eE1TRGZmSGFuZGxlICkJCS8vIGhhbmRsZXMKfTsKCnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRRdWFkQXJyb3dWZXJ0W10gPQkvLyBhZGp1c3RtZW50MTogeCAwIC0gMTA4MDAsIGFkanVzdG1lbnQyOiB4IDAgLSAxMDgwMAp7CQkJCQkJCQkJCQkJCQkvLyBhZGp1c3RtZW50MzogeSAwIC0gMTA4MDAKCXsgMCwgMTA4MDAgfSwgeyAwIE1TT19JLCAxIE1TT19JIH0sIHsgMCBNU09fSSwgMiBNU09fSSB9LCB7IDIgTVNPX0ksIDIgTVNPX0kgfSwKCXsgMiBNU09fSSwgMCBNU09fSSB9LCB7IDEgTVNPX0ksIDAgTVNPX0kgfSwgeyAxMDgwMCwgMCB9LCB7IDMgTVNPX0ksIDAgTVNPX0kgfSwKCXsgNCBNU09fSSwgMCBNU09fSSB9LCB7IDQgTVNPX0ksIDIgTVNPX0kgfSwgeyA1IE1TT19JLCAyIE1TT19JIH0sIHsgNSBNU09fSSwgMSBNU09fSSB9LAoJeyAyMTYwMCwgMTA4MDAgfSwgeyA1IE1TT19JLCAzIE1TT19JIH0sIHsgNSBNU09fSSwgNCBNU09fSSB9LCB7IDQgTVNPX0ksIDQgTVNPX0kgfSwKCXsgNCBNU09fSSwgNSBNU09fSSB9LCB7IDMgTVNPX0ksIDUgTVNPX0kgfSwgeyAxMDgwMCwgMjE2MDAgfSwgeyAxIE1TT19JLCA1IE1TT19JIH0sCgl7IDIgTVNPX0ksIDUgTVNPX0kgfSwgeyAyIE1TT19JLCA0IE1TT19JIH0sIHsgMCBNU09fSSwgNCBNU09fSSB9LCB7IDAgTVNPX0ksIDMgTVNPX0kgfQp9OwpzdGF0aWMgY29uc3Qgc2FsX3VJbnQxNiBtc29fc3B0UXVhZEFycm93U2VnbVtdID0KewoJMHg0MDAwLCAweDAwMTcsIDB4NjAwMSwgMHg4MDAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSBtc29fc3B0UXVhZEFycm93Q2FsY1tdID0KewoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0M1ZhbHVlLCAwLCAwIH0gfSwKCXsgMHgyMDAwLCB7IERGRl9Qcm9wX2FkanVzdFZhbHVlLCAwLCAwIH0gfSwKCXsgMHgyMDAwLCB7IERGRl9Qcm9wX2FkanVzdDJWYWx1ZSwgMCwgMCB9IH0sCgl7IDB4ODAwMCwgeyAyMTYwMCwgMCwgREZGX1Byb3BfYWRqdXN0VmFsdWUgfSB9LAoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIERGRl9Qcm9wX2FkanVzdDJWYWx1ZSB9IH0sCgl7IDB4ODAwMCwgeyAyMTYwMCwgMCwgREZGX1Byb3BfYWRqdXN0M1ZhbHVlIH0gfQp9OwpzdGF0aWMgY29uc3Qgc2FsX0ludDMyIG1zb19zcHRRdWFkQXJyb3dEZWZhdWx0W10gPQp7CgkzLCA2NTAwLCA4NjAwLCA0MzAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzIG1zb19zcHRRdWFkQXJyb3dUZXh0UmVjdFtdID0JLy8gdG9kbwp7Cgl7IHsgMCwgMCB9LCB7IDIxNjAwLCAyMTYwMCB9IH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmSGFuZGxlIG1zb19zcHRRdWFkQXJyb3dIYW5kbGVbXSA9CnsKCXsJTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFIHwgTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFX1lfTUFYX0lTX1NQRUNJQUwgfCBNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0VfWF9NSU5fSVNfU1BFQ0lBTCwKCQkweDEwMSwgMHgxMDIsIDEwODAwLCAxMDgwMCwgMHgxMDAsIDEwODAwLCAwLCAweDEwMCB9LAoJewlNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0UgfCBNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0VfWF9NSU5fSVNfU1BFQ0lBTCB8IE1TREZGX0hBTkRMRV9GTEFHU19SQU5HRV9YX01BWF9JU19TUEVDSUFMLAoJCTB4MTAwLCAwLCAxMDgwMCwgMTA4MDAsIDB4MTAyLCAweDEwMSwgTXg4MDAwMDAwMCwgMHg3ZmZmZmZmZiB9Cn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvUXVhZEFycm93ID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRRdWFkQXJyb3dWZXJ0LCBzaXplb2YoIG1zb19zcHRRdWFkQXJyb3dWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0UXVhZEFycm93U2VnbSwgc2l6ZW9mKCBtc29fc3B0UXVhZEFycm93U2VnbSApID4+IDEsCgkoU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEqKW1zb19zcHRRdWFkQXJyb3dDYWxjLCBzaXplb2YoIG1zb19zcHRRdWFkQXJyb3dDYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0UXVhZEFycm93RGVmYXVsdCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0UXVhZEFycm93VGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdFF1YWRBcnJvd1RleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTIxNjAwLCAyMTYwMCwKCU14ODAwMDAwMDAsIE14ODAwMDAwMDAsCglOVUxMLCAwLAoJKFN2eE1TRGZmSGFuZGxlKiltc29fc3B0UXVhZEFycm93SGFuZGxlLCBzaXplb2YoIG1zb19zcHRRdWFkQXJyb3dIYW5kbGUgKSAvIHNpemVvZiggU3Z4TVNEZmZIYW5kbGUgKQkJLy8gaGFuZGxlcwp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdExlZnRSaWdodFVwQXJyb3dWZXJ0W10gPQkvLyBhZGp1c3RtZW50MTogeCAwIC0gMTA4MDAsIGFkanVzdG1lbnQyOiB4IDAgLSAxMDgwMAp7CQkJCQkJCQkJCQkJCQkJCS8vIGFkanVzdG1lbnQzOiB5IDAgLSAyMTYwMAoJeyAxMDgwMCwgMCB9LCB7IDMgTVNPX0ksIDIgTVNPX0kgfSwJeyA0IE1TT19JLCAyIE1TT19JIH0sIHsgNCBNU09fSSwgMSBNU09fSSB9LAoJeyA1IE1TT19JLCAxIE1TT19JIH0sIHsgNSBNU09fSSwgMCBNU09fSSB9LAl7IDIxNjAwLCAxMDgwMCB9LCB7IDUgTVNPX0ksIDMgTVNPX0kgfSwKCXsgNSBNU09fSSwgNCBNU09fSSB9LCB7IDIgTVNPX0ksIDQgTVNPX0kgfSwJeyAyIE1TT19JLCAzIE1TT19JIH0sIHsgMCwgMTA4MDAgfSwKCXsgMiBNU09fSSwgMCBNU09fSSB9LCB7IDIgTVNPX0ksIDEgTVNPX0kgfSwJeyAxIE1TT19JLCAxIE1TT19JIH0sIHsgMSBNU09fSSwgMiBNU09fSSB9LAoJeyAwIE1TT19JLCAyIE1TT19JIH0KfTsKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvX3NwdExlZnRSaWdodFVwQXJyb3dTZWdtW10gPQp7CgkweDQwMDAsIDB4MDAxMCwgMHg2MDAxLCAweDgwMDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhIG1zb19zcHRMZWZ0UmlnaHRVcEFycm93Q2FsY1tdID0KewoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAsIDAgfSB9LAkJCQkvLyAwCgl7IDB4MjAwMCwgeyBERkZfUHJvcF9hZGp1c3QyVmFsdWUsIDAsIDAgfSB9LAkJCS8vIDEKCXsgMHg2MDAxLCB7IDB4MDQwMywgREZGX1Byb3BfYWRqdXN0M1ZhbHVlLCAyMTYwMCB9IH0sCS8vIDIKCXsgMHg4MDAwLCB7IDIxNjAwLCAwLCBERkZfUHJvcF9hZGp1c3RWYWx1ZSB9IH0sCQkJLy8gMwoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIERGRl9Qcm9wX2FkanVzdDJWYWx1ZSB9IH0sCQkvLyA0Cgl7IDB4ODAwMCwgeyAyMTYwMCwgMCwgMHgwNDAyIH0gfQkJCQkJCS8vIDUKfTsKc3RhdGljIGNvbnN0IHNhbF9JbnQzMiBtc29fc3B0TGVmdFJpZ2h0VXBBcnJvd0RlZmF1bHRbXSA9CnsKCTMsIDY1MDAsIDg2MDAsIDYyMDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgbXNvX3NwdExlZnRSaWdodFVwQXJyb3dUZXh0UmVjdFtdID0JCS8vIHRvZG8KewoJeyB7IDAsIDAgfSwgeyAyMTYwMCwgMjE2MDAgfSB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkhhbmRsZSBtc29fc3B0TGVmdFJpZ2h0VXBBcnJvd0hhbmRsZVtdID0KewoJewlNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0UgfCBNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0VfWV9NQVhfSVNfU1BFQ0lBTCB8IE1TREZGX0hBTkRMRV9GTEFHU19SQU5HRV9YX01JTl9JU19TUEVDSUFMLAoJCTB4MTAxLCAweDEwMiwgMTA4MDAsIDEwODAwLCAweDEwMCwgMTA4MDAsIDAsIDB4MTAwIH0sCgl7CU1TREZGX0hBTkRMRV9GTEFHU19SQU5HRSB8IE1TREZGX0hBTkRMRV9GTEFHU19SQU5HRV9YX01JTl9JU19TUEVDSUFMIHwgTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFX1hfTUFYX0lTX1NQRUNJQUwsCgkJMHgxMDAsIDAsIDEwODAwLCAxMDgwMCwgMHgxMDIsIDB4MTAxLCBNeDgwMDAwMDAwLCAweDdmZmZmZmZmIH0KfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29MZWZ0UmlnaHRVcEFycm93ID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRMZWZ0UmlnaHRVcEFycm93VmVydCwgc2l6ZW9mKCBtc29fc3B0TGVmdFJpZ2h0VXBBcnJvd1ZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKHNhbF91SW50MTYqKW1zb19zcHRMZWZ0UmlnaHRVcEFycm93U2VnbSwgc2l6ZW9mKCBtc29fc3B0TGVmdFJpZ2h0VXBBcnJvd1NlZ20gKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0TGVmdFJpZ2h0VXBBcnJvd0NhbGMsIHNpemVvZiggbXNvX3NwdExlZnRSaWdodFVwQXJyb3dDYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0TGVmdFJpZ2h0VXBBcnJvd0RlZmF1bHQsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdExlZnRSaWdodFVwQXJyb3dUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0TGVmdFJpZ2h0VXBBcnJvd1RleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTIxNjAwLCAyMTYwMCwKCU14ODAwMDAwMDAsIE14ODAwMDAwMDAsCglOVUxMLCAwLAoJKFN2eE1TRGZmSGFuZGxlKiltc29fc3B0TGVmdFJpZ2h0VXBBcnJvd0hhbmRsZSwgc2l6ZW9mKCBtc29fc3B0TGVmdFJpZ2h0VXBBcnJvd0hhbmRsZSApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCQkvLyBoYW5kbGVzCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0QmVudEFycm93VmVydFtdID0JLy8gYWRqdXN0bWVudDEgOiB4IDEyNDI3IC0gMjE2MDAKewkJCQkJCQkJCQkJCQkJLy8gYWRqdXN0bWVudDIgOiB5IDAgLSA2MDc5Cgl7IDAsIDIxNjAwIH0sIHsgMCwgMTIxNjAgfSwgeyAxMjQyNywgMSBNU09fSSB9LCB7IDAgTVNPX0ksIDEgTVNPX0kgfSwKCXsgMCBNU09fSSwgMCB9LCB7IDIxNjAwLCA2MDc5IH0sIHsgMCBNU09fSSwgMTIxNTggfSwgeyAwIE1TT19JLCAyIE1TT19JIH0sCgl7IDEyNDI3LCAyIE1TT19JIH0sIHsgNCBNU09fSSwgMTIxNjAgfSwgeyA0IE1TT19JLCAyMTYwMCB9Cn07CnN0YXRpYyBjb25zdCBzYWxfdUludDE2IG1zb19zcHRCZW50QXJyb3dTZWdtW10gPQp7CgkweDQwMDAsIDB4MDAwMSwgMHhhODAxLCAweDAwMDYsIDB4YTcwMSwgMHgwMDAxLCAweDYwMDEsIDB4ODAwMAp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgbXNvX3NwdEJlbnRBcnJvd0NhbGNbXSA9CnsKCXsgMHgyMDAwLCB7IERGRl9Qcm9wX2FkanVzdFZhbHVlLCAwLCAwIH0gfSwKCXsgMHgyMDAwLCB7IERGRl9Qcm9wX2FkanVzdDJWYWx1ZSwgMCwgMCB9IH0sCgl7IDB4ODAwMCwgeyAxMjE1OCwgMCwgREZGX1Byb3BfYWRqdXN0MlZhbHVlIH0gfSwKCXsgMHg4MDAwLCB7IDYwNzksIDAsIERGRl9Qcm9wX2FkanVzdDJWYWx1ZSB9IH0sCgl7IDB4MjAwMSwgeyAweDA0MDMsIDIsIDEgfSB9Cn07CnN0YXRpYyBjb25zdCBzYWxfSW50MzIgbXNvX3NwdEJlbnRBcnJvd0RlZmF1bHRbXSA9CnsKCTIsIDE1MTAwLCAyOTAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzIG1zb19zcHRCZW50QXJyb3dUZXh0UmVjdFtdID0JLy8gdG9kbwp7Cgl7IHsgMCwgMCB9LCB7IDIxNjAwLCAyMTYwMCB9IH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmSGFuZGxlIG1zb19zcHRCZW50QXJyb3dIYW5kbGVbXSA9CnsKCXsJTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFLAoJCTB4MTAwLCAweDEwMSwgMTA4MDAsIDEwODAwLCAxMjQyNywgMjE2MDAsIDAsIDYwNzkgfQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb0JlbnRBcnJvdyA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0QmVudEFycm93VmVydCwgc2l6ZW9mKCBtc29fc3B0QmVudEFycm93VmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdEJlbnRBcnJvd1NlZ20sIHNpemVvZiggbXNvX3NwdEJlbnRBcnJvd1NlZ20gKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0QmVudEFycm93Q2FsYywgc2l6ZW9mKCBtc29fc3B0QmVudEFycm93Q2FsYyApIC8gc2l6ZW9mKCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSApLAoJKHNhbF9JbnQzMiopbXNvX3NwdEJlbnRBcnJvd0RlZmF1bHQsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdEJlbnRBcnJvd1RleHRSZWN0LCBzaXplb2YoIG1zb19zcHRCZW50QXJyb3dUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJTlVMTCwgMCwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdEJlbnRBcnJvd0hhbmRsZSwgc2l6ZW9mKCBtc29fc3B0QmVudEFycm93SGFuZGxlICkgLyBzaXplb2YoIFN2eE1TRGZmSGFuZGxlICkJCS8vIGhhbmRsZXMKfTsKCnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRVdHVybkFycm93VmVydFtdID0KewoJeyAwLCAyMTYwMCB9LCB7IDAsIDg1NTAgfSwJCQkJCQkJCQkJCS8vIHBwCgl7IDAsIDM1NDAgfSwgeyA0MzcwLCAwIH0sIHsgOTI3MCwgMCB9LAkJCQkJCQkJLy8gY2NwCgl7IDEzODkwLCAwIH0sIHsgMTg1NzAsIDMyMzAgfSwgeyAxODYwMCwgODMwMCB9LAkJCQkJCS8vIGNjcAoJeyAyMTYwMCwgODMwMCB9LCB7IDE1NjgwLCAxNDI2MCB9LCB7IDk3MDAsIDgzMDAgfSwgeyAxMjUwMCwgODMwMCB9LCAvLyBwcHBwCgl7IDEyMzIwLCA2MzgwIH0sIHsgMTA4NzAsIDU4NTAgfSwgeyA5MzIwLCA1ODUwIH0sCQkJCQkvLyBjY3AKCXsgNzc3MCwgNTg1MCB9LCB7IDYwNDAsIDY0MTAgfSwgeyA2MTEwLCA4NTIwIH0sCQkJCQkJLy8gY2NwCgl7IDYxMTAsIDIxNjAwIH0KfTsKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvX3NwdFV0dXJuQXJyb3dTZWdtW10gPQp7CgkweDQwMDAsIDB4MDAwMSwgMHgyMDAyLCAweDAwMDQsIDB4MjAwMiwgMHgwMDAxLCAweDYwMDAsIDB4ODAwMAp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyBtc29fc3B0VXR1cm5BcnJvd1RleHRSZWN0W10gPQp7Cgl7IHsgMCwgODI4MCB9LCB7IDYxMTAsIDIxNjAwIH0gfQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb1V0dXJuQXJyb3cgPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdFV0dXJuQXJyb3dWZXJ0LCBzaXplb2YoIG1zb19zcHRVdHVybkFycm93VmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdFV0dXJuQXJyb3dTZWdtLCBzaXplb2YoIG1zb19zcHRVdHVybkFycm93U2VnbSApID4+IDEsCglOVUxMLCAwLAoJTlVMTCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0VXR1cm5BcnJvd1RleHRSZWN0LCBzaXplb2YoIG1zb19zcHRVdHVybkFycm93VGV4dFJlY3QgKSAvIHNpemVvZiggU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyApLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCU5VTEwsIDAsCglOVUxMLCAwCQkvLyBoYW5kbGVzCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0TGVmdFVwQXJyb3dWZXJ0W10gPQkvLyBhZGp1c3RtZW50MSA6IHggMCAtIDIxNjAwLCBhZGp1c3RtZW50MiA6IHggMCAtIDIxNjAwCnsJCQkJCQkJCQkJCQkJCQkvLyBhZGp1c3RtZW50MyA6IHkgMCAtIDIxNjAwCgl7IDAsIDUgTVNPX0kgfSwJeyAyIE1TT19JLCAwIE1TT19JIH0sIHsgMiBNU09fSSwgNyBNU09fSSB9LCB7IDcgTVNPX0ksIDcgTVNPX0kgfSwKCXsgNyBNU09fSSwgMiBNU09fSSB9LCB7IDAgTVNPX0ksIDIgTVNPX0kgfSwgeyA1IE1TT19JLCAwIH0sIHsgMjE2MDAsIDIgTVNPX0kgfSwKCXsgMSBNU09fSSwgMiBNU09fSSB9LCB7IDEgTVNPX0ksIDEgTVNPX0kgfSwJeyAyIE1TT19JLCAxIE1TT19JIH0sIHsgMiBNU09fSSwgMjE2MDAgfQp9OwpzdGF0aWMgY29uc3Qgc2FsX3VJbnQxNiBtc29fc3B0TGVmdFVwQXJyb3dTZWdtW10gPQp7CgkweDQwMDAsIDB4MDAwYiwgMHg2MDAxLCAweDgwMDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhIG1zb19zcHRMZWZ0VXBBcnJvd0NhbGNbXSA9CnsKCXsgMHgyMDAwLCB7IERGRl9Qcm9wX2FkanVzdFZhbHVlLCAwLCAwIH0gfSwJCS8vIDAKCXsgMHgyMDAwLCB7IERGRl9Qcm9wX2FkanVzdDJWYWx1ZSwgMCwgMCB9IH0sCQkvLyAxCgl7IDB4MjAwMCwgeyBERkZfUHJvcF9hZGp1c3QzVmFsdWUsIDAsIDAgfSB9LAkJLy8gMgoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIERGRl9Qcm9wX2FkanVzdFZhbHVlIH0gfSwJLy8gMwoJeyAweDIwMDEsIHsgMHgwNDAzLCAxLCAyIH0gfSwJCQkJCQkvLyA0Cgl7IDB4NjAwMCwgeyBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMHgwNDA0LCAwIH0gfSwJLy8gNQoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIERGRl9Qcm9wX2FkanVzdDJWYWx1ZSB9IH0sCS8vIDYKCXsgMHg2MDAwLCB7IERGRl9Qcm9wX2FkanVzdFZhbHVlLCAweDA0MDYsIDAgfSB9LAkvLyA3Cgl7IDB4ODAwMCwgeyAyMTYwMCwgMCwgMHg0MDYgfSB9LAkJCQkJLy8gOAoJeyAweGEwMDAsIHsgMHg0MDgsIDAsIDB4NDA2IH0gfQkJCQkJLy8gOQp9OwpzdGF0aWMgY29uc3Qgc2FsX0ludDMyIG1zb19zcHRMZWZ0VXBBcnJvd0RlZmF1bHRbXSA9CnsKCTMsIDkzNDAsIDE4NTAwLCA2MjAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzIG1zb19zcHRMZWZ0VXBBcnJvd1RleHRSZWN0W10gPQp7Cgl7IHsgMiBNU09fSSwgNyBNU09fSSB9LCB7IDEgTVNPX0ksIDEgTVNPX0kgfSB9LAoJeyB7IDcgTVNPX0ksIDIgTVNPX0kgfSwgeyAxIE1TT19JLCAxIE1TT19JIH0gfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZIYW5kbGUgbXNvX3NwdExlZnRVcEFycm93SGFuZGxlW10gPQp7Cgl7CU1TREZGX0hBTkRMRV9GTEFHU19SQU5HRSB8IE1TREZGX0hBTkRMRV9GTEFHU19SQU5HRV9ZX01BWF9JU19TUEVDSUFMIHwgTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFX1hfTUlOX0lTX1NQRUNJQUwsCgkJMHgxMDEsIDB4MTAyLCAxMDgwMCwgMTA4MDAsIDMgKyA1LCAyMTYwMCwgMCwgMHgxMDAgfSwKCXsJTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFIHwgTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFX1hfTUlOX0lTX1NQRUNJQUwgfCBNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0VfWF9NQVhfSVNfU1BFQ0lBTCwKCQkweDEwMCwgMCwgMTA4MDAsIDEwODAwLCAweDEwMiwgMyArIDksIE14ODAwMDAwMDAsIDB4N2ZmZmZmZmYgfQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb0xlZnRVcEFycm93ID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRMZWZ0VXBBcnJvd1ZlcnQsIHNpemVvZiggbXNvX3NwdExlZnRVcEFycm93VmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdExlZnRVcEFycm93U2VnbSwgc2l6ZW9mKCBtc29fc3B0TGVmdFVwQXJyb3dTZWdtICkgPj4gMSwKCShTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSopbXNvX3NwdExlZnRVcEFycm93Q2FsYywgc2l6ZW9mKCBtc29fc3B0TGVmdFVwQXJyb3dDYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0TGVmdFVwQXJyb3dEZWZhdWx0LAoJKFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMqKW1zb19zcHRMZWZ0VXBBcnJvd1RleHRSZWN0LCBzaXplb2YoIG1zb19zcHRMZWZ0VXBBcnJvd1RleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTIxNjAwLCAyMTYwMCwKCU14ODAwMDAwMDAsIE14ODAwMDAwMDAsCglOVUxMLCAwLAoJKFN2eE1TRGZmSGFuZGxlKiltc29fc3B0TGVmdFVwQXJyb3dIYW5kbGUsIHNpemVvZiggbXNvX3NwdExlZnRVcEFycm93SGFuZGxlICkgLyBzaXplb2YoIFN2eE1TRGZmSGFuZGxlICkJCS8vIGhhbmRsZXMKfTsKCnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRCZW50VXBBcnJvd1ZlcnRbXSA9CS8vIGFkanVzdG1lbnQxIDogeCAwIC0gMjE2MDAsIGFkanVzdG1lbnQyIDogeCAwIC0gMjE2MDAKewkJCQkJCQkJCQkJCQkJCS8vIGFkanVzdG1lbnQzIDogeSAwIC0gMjE2MDAKCXsgMCwgOCBNU09fSSB9LCB7IDcgTVNPX0ksIDggTVNPX0kgfSwgeyA3IE1TT19JLCAyIE1TT19JIH0sIHsgMCBNU09fSSwgMiBNU09fSSB9LAoJeyA1IE1TT19JLCAwIH0sIHsgMjE2MDAsIDIgTVNPX0kgfSwgeyAxIE1TT19JLCAyIE1TT19JIH0sIHsgMSBNU09fSSwgMjE2MDAgfSwKCXsgMCwgMjE2MDAgfQp9OwpzdGF0aWMgY29uc3Qgc2FsX3VJbnQxNiBtc29fc3B0QmVudFVwQXJyb3dTZWdtW10gPQp7CgkweDQwMDAsIDB4MDAwOCwgMHg2MDAxLCAweDgwMDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhIG1zb19zcHRCZW50VXBBcnJvd0NhbGNbXSA9CnsKCXsgMHgyMDAwLCB7IERGRl9Qcm9wX2FkanVzdFZhbHVlLCAwLCAwIH0gfSwJCS8vIDAKCXsgMHgyMDAwLCB7IERGRl9Qcm9wX2FkanVzdDJWYWx1ZSwgMCwgMCB9IH0sCQkvLyAxCgl7IDB4MjAwMCwgeyBERkZfUHJvcF9hZGp1c3QzVmFsdWUsIDAsIDAgfSB9LAkJLy8gMgoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIERGRl9Qcm9wX2FkanVzdFZhbHVlIH0gfSwJLy8gMwoJeyAweDIwMDEsIHsgMHgwNDAzLCAxLCAyIH0gfSwJCQkJCQkvLyA0Cgl7IDB4NjAwMCwgeyBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMHgwNDA0LCAwIH0gfSwJLy8gNQoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIERGRl9Qcm9wX2FkanVzdDJWYWx1ZSB9IH0sCS8vIDYKCXsgMHg2MDAwLCB7IERGRl9Qcm9wX2FkanVzdFZhbHVlLCAweDA0MDYsIDAgfSB9LAkvLyA3Cgl7IDB4NjAwMCwgeyAweDA0MDcsIDB4MDQwNiwgMCB9IH0sCQkJCQkvLyA4Cgl7IDB4ODAwMCwgeyAyMTYwMCwgMCwgMHg0MDYgfSB9LAkJCQkJLy8gOQoJeyAweGEwMDAsIHsgMHg0MDksIDAsIDB4NDA2IH0gfQkJCQkJLy8gYQp9OwpzdGF0aWMgY29uc3Qgc2FsX0ludDMyIG1zb19zcHRCZW50VXBBcnJvd0RlZmF1bHRbXSA9CnsKCTMsIDkzNDAsIDE4NTAwLCA3MjAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzIG1zb19zcHRCZW50VXBBcnJvd1RleHRSZWN0W10gPQp7Cgl7IHsgMiBNU09fSSwgNyBNU09fSSB9LCB7IDEgTVNPX0ksIDEgTVNPX0kgfSB9LAoJeyB7IDcgTVNPX0ksIDIgTVNPX0kgfSwgeyAxIE1TT19JLCAxIE1TT19JIH0gfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZIYW5kbGUgbXNvX3NwdEJlbnRVcEFycm93SGFuZGxlW10gPQp7Cgl7CU1TREZGX0hBTkRMRV9GTEFHU19SQU5HRSB8IE1TREZGX0hBTkRMRV9GTEFHU19SQU5HRV9ZX01BWF9JU19TUEVDSUFMIHwgTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFX1hfTUlOX0lTX1NQRUNJQUwsCgkJMHgxMDEsIDB4MTAyLCAxMDgwMCwgMTA4MDAsIDMgKyA1LCAyMTYwMCwgMCwgMHgxMDAgfSwKCXsJTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFIHwgTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFX1hfTUlOX0lTX1NQRUNJQUwgfCBNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0VfWF9NQVhfSVNfU1BFQ0lBTCwKCQkweDEwMCwgMCwgMTA4MDAsIDEwODAwLCAweDEwMiwgMyArIDEwLCBNeDgwMDAwMDAwLCAweDdmZmZmZmZmIH0KfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29CZW50VXBBcnJvdyA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0QmVudFVwQXJyb3dWZXJ0LCBzaXplb2YoIG1zb19zcHRCZW50VXBBcnJvd1ZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKHNhbF91SW50MTYqKW1zb19zcHRCZW50VXBBcnJvd1NlZ20sIHNpemVvZiggbXNvX3NwdEJlbnRVcEFycm93U2VnbSApID4+IDEsCgkoU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEqKW1zb19zcHRCZW50VXBBcnJvd0NhbGMsIHNpemVvZiggbXNvX3NwdEJlbnRVcEFycm93Q2FsYyApIC8gc2l6ZW9mKCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSApLAoJKHNhbF9JbnQzMiopbXNvX3NwdEJlbnRVcEFycm93RGVmYXVsdCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0QmVudFVwQXJyb3dUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0QmVudFVwQXJyb3dUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJTlVMTCwgMCwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdEJlbnRVcEFycm93SGFuZGxlLCBzaXplb2YoIG1zb19zcHRCZW50VXBBcnJvd0hhbmRsZSApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0Q3VydmVkUmlnaHRWZXJ0W10gPQp7Cgl7IDAsIDAgfSwgeyAyMyBNU09fSSwgMyBNU09fSSB9LCB7IDIyIE1TT19JLCAwIH0sIHsgMCwgNCBNU09fSSB9LCB7IDAsIDE1IE1TT19JIH0sIHsgMjMgTVNPX0ksIDEgTVNPX0kgfSwgeyAwLCA3IE1TT19JIH0sIHsgMiBNU09fSSwgMTMgTVNPX0kgfSwKCXsgMiBNU09fSSwgMTQgTVNPX0kgfSwgeyAyMiBNU09fSSwgOCBNU09fSSB9LCB7IDIgTVNPX0ksIDEyIE1TT19JIH0sCgl7IDAsIDAgfSwgeyAyMyBNU09fSSwgMyBNU09fSSB9LCB7IDIgTVNPX0ksIDExIE1TT19JIH0sIHsgMjYgTVNPX0ksIDE3IE1TT19JIH0sIHsgMCwgMTUgTVNPX0kgfSwgeyAyMyBNU09fSSwgMSBNU09fSSB9LCB7IDI2IE1TT19JLCAxNyBNU09fSSB9LCB7IDIyIE1TT19JLCAxNSBNU09fSSB9LAoJeyAwLCAwIH0sIHsgMjMgTVNPX0ksIDMgTVNPX0kgfSwgeyAyMiBNU09fSSwgMCB9LCB7IDAsIDQgTVNPX0kgfSwKCXsgMCwgMCB9LCB7IDIzIE1TT19JLCAzIE1TT19JIH0sIHsgMCwgNCBNU09fSSB9LCB7IDI2IE1TT19JLCAxNyBNU09fSSB9LAoJeyAwLCAxNSBNU09fSSB9LCB7IDIzIE1TT19JLCAxIE1TT19JIH0sIHsgMjYgTVNPX0ksIDE3IE1TT19JIH0sIHsgMjIgTVNPX0ksIDE1IE1TT19JIH0KfTsKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvX3NwdEN1cnZlZFJpZ2h0U2VnbVtdID0KewoJMHhhNDA4LAoJMHgwMDAzLAoJMHhhNTA4LAoJMHg2MDAwLAoJMHg4MDAwLAoJMHhhNDA0LAoJMHhhMzA0LAoJMHhhNTA0LAoJMHg2MDAwLAoJMHg4MDAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSBtc29fc3B0Q3VydmVkUmlnaHRDYWxjW10gPQp7Cgl7IDB4MjAwMCwgeyBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMCwgMCB9IH0sCgl7IDB4MjAwMCwgeyBERkZfUHJvcF9hZGp1c3QyVmFsdWUsIDAsIDAgfSB9LAoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0M1ZhbHVlLCAwLCAwIH0gfSwKCXsgMHhhMDAwLCB7IERGRl9Qcm9wX2FkanVzdFZhbHVlLCAyMTYwMCwgREZGX1Byb3BfYWRqdXN0MlZhbHVlIH0gfSwKCXsgMHgyMDAxLCB7IDB4NDAzLCAxLCAyIH0gfSwKCXsgMHg2MDAwLCB7IERGRl9Qcm9wX2FkanVzdDJWYWx1ZSwgREZGX1Byb3BfYWRqdXN0MlZhbHVlLCAyMTYwMCB9IH0sCgl7IDB4ZTAwMCwgeyAweDQwNSwgREZGX1Byb3BfYWRqdXN0MlZhbHVlLCBERkZfUHJvcF9hZGp1c3RWYWx1ZSB9IH0sCgl7IDB4MjAwMSwgeyAweDQwNiwgMSwgMiB9IH0sCgl7IDB4NDAwMiwgeyAyMTYwMCwgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAgfSB9LAoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIERGRl9Qcm9wX2FkanVzdDNWYWx1ZSB9IH0sCgl7IDB4YTAwZiwgeyAweDQwOSwgMjE2MDAsIDB4NDA0IH0gfSwKCXsgMHg2MDAwLCB7IDB4NDA0LCAweDQwYSwgMCB9IH0sCgl7IDB4NjAwMCwgeyAweDQwYiwgREZGX1Byb3BfYWRqdXN0MlZhbHVlLCAyMTYwMCB9IH0sCgl7IDB4NjAwMCwgeyAweDQwNywgMHg0MGEsIDAgfSB9LAoJeyAweGEwMDAsIHsgMHg0MGMsIDIxNjAwLCBERkZfUHJvcF9hZGp1c3RWYWx1ZSB9IH0sCgl7IDB4YTAwMCwgeyAweDQwNSwgMCwgREZGX1Byb3BfYWRqdXN0VmFsdWUgfSB9LAoJeyAweDIwMDEsIHsgMHg0MGYsIDEsIDIgfSB9LAoJeyAweDYwMDIsIHsgMHg0MDQsIDB4NDA3LCAwIH0gfSwKCXsgMHg2MDAwLCB7IERGRl9Qcm9wX2FkanVzdFZhbHVlLCBERkZfUHJvcF9hZGp1c3QyVmFsdWUsIDIxNjAwIH0gfSwKCXsgMHgyMDAxLCB7IDB4NDEyLCAxLCAyIH0gfSwKCXsgMHhhMDAwLCB7IDB4NDExLCAwLCAweDQxMyB9IH0sCgl7IDB4MDAwMCwgeyAyMTYwMCwgMCwgMCB9IH0sCgl7IDB4MDAwMCwgeyAyMTYwMCwgMCwgMCB9IH0sCgl7IDB4MDAwMSwgeyAyMTYwMCwgMiwgMSB9IH0sCgl7IDB4YTAwMCwgeyAweDQxMSwgMCwgMHg0MDQgfSB9LAoJeyAweDYwMGYsIHsgMHg0MTgsIDB4NDA0LCAyMTYwMCB9IH0sCgl7IDB4ODAwMCwgeyAyMTYwMCwgMCwgMHg0MTkgfSB9LAoJeyAweDIwMDAsIHsgMHg0MDgsIDEyOCwgMCB9IH0sCgl7IDB4MjAwMSwgeyAweDQwNSwgMSwgMiB9IH0sCgl7IDB4MjAwMCwgeyAweDQwNSwgMCwgMTI4IH0gfSwKCXsgMHhlMDAwLCB7IERGRl9Qcm9wX2FkanVzdFZhbHVlLCAweDQxMSwgMHg0MGMgfSB9LAoJeyAweDYwMGYsIHsgMHg0MTQsIDB4NDA0LCAyMTYwMCB9IH0sCgl7IDB4ODAwMCwgeyAyMTYwMCwgMCwgREZGX1Byb3BfYWRqdXN0VmFsdWUgfSB9LAoJeyAweDIwMDEsIHsgMHg0MjAsIDEsIDIgfSB9LAoJeyAweDAwMDEsIHsgMjE2MDAsIDIxNjAwLCAxIH0gfSwKCXsgMHg2MDAxLCB7IDB4NDA5LCAweDQwOSwgMSB9IH0sCgl7IDB4YTAwMCwgeyAweDQyMiwgMCwgMHg0MjMgfSB9LAoJeyAweDIwMGQsIHsgMHg0MjQsIDAsIDAgfSB9LAoJeyAweDIwMDAsIHsgMHg0MjUsIDIxNjAwLCAwIH0gfSwKCXsgMHg4MDAxLCB7IDIxNjAwLCAyMTYwMCwgMHg0MjYgfSB9LAoJeyAweDIwMDAsIHsgMHg0MjcsIDY0LCAwIH0gfSwKCXsgMHgyMDAxLCB7IERGRl9Qcm9wX2FkanVzdFZhbHVlLCAxLCAyIH0gfSwKCXsgMHg2MDBmLCB7IDB4NDIxLCAweDQyOSwgMjE2MDAgfSB9LAoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIDB4NDJhIH0gfSwKCXsgMHgyMDAwLCB7IDB4NDJiLCA2NCwgMCB9IH0sCgl7IDB4MjAwMSwgeyAweDQwNCwgMSwgMiB9IH0sCgl7IDB4YTAwMCwgeyBERkZfUHJvcF9hZGp1c3QyVmFsdWUsIDAsIDB4NDJkIH0gfSwKCXsgMHgwMDAxLCB7IDIxNjAwLCAyMTk1LCAxNjM4NCB9IH0sCgl7IDB4MDAwMSwgeyAyMTYwMCwgMTQxODksIDE2Mzg0IH0gfQp9OwpzdGF0aWMgY29uc3Qgc2FsX0ludDMyIG1zb19zcHRDdXJ2ZWRSaWdodERlZmF1bHRbXSA9CnsKCTMsIDEyOTYwLCAxOTQ0MCwgMTQ0MDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgbXNvX3NwdEN1cnZlZFJpZ2h0VGV4dFJlY3RbXSA9CnsKCXsgeyA0NyBNU09fSSwgNDUgTVNPX0kgfSwgeyA0OCBNU09fSSwgNDYgTVNPX0kgfSB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRDdXJ2ZWRSaWdodEdsdWVQb2ludHNbXSA9CnsKCXsgMCwgMTcgTVNPX0kgfSwgeyAyIE1TT19JLCAxNCBNU09fSSB9LCB7IDIyIE1TT19JLCA4IE1TT19JIH0sIHsgMiBNU09fSSwgMTIgTVNPX0kgfSwgeyAyMiBNU09fSSwgMTYgTVNPX0kgfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZIYW5kbGUgbXNvX3NwdEN1cnZlZFJpZ2h0SGFuZGxlc1tdID0KewoJewlNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0UgfCBNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0VfWV9NSU5fSVNfU1BFQ0lBTCB8IE1TREZGX0hBTkRMRV9GTEFHU19SQU5HRV9ZX01BWF9JU19TUEVDSUFMLAoJCTIxNjAwLCAweDEwMCwgMTA4MDAsIDEwODAwLCAwLCAxMDgwMCwgMyArIDQwLCAzICsgMjkgfSwKCXsJTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFIHwgTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFX1lfTUlOX0lTX1NQRUNJQUwgfCBNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0VfWV9NQVhfSVNfU1BFQ0lBTCwKCQkyMTYwMCwgMHgxMDEsIDEwODAwLCAxMDgwMCwgMCwgMTA4MDAsIDMgKyAyNywgMyArIDIxIH0sCgl7CU1TREZGX0hBTkRMRV9GTEFHU19SQU5HRSB8IE1TREZGX0hBTkRMRV9GTEFHU19SQU5HRV9YX01JTl9JU19TUEVDSUFMIHwgTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFX1hfTUFYX0lTX1NQRUNJQUwsCgkJMHgxMDIsIDIxNjAwLCAxMDgwMCwgMTA4MDAsIDMgKyA0NCwgMyArIDIyLCAzMzc1LCAyMTYwMCB9Cn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvQ3VydmVkUmlnaHRBcnJvdyA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0Q3VydmVkUmlnaHRWZXJ0LCBzaXplb2YoIG1zb19zcHRDdXJ2ZWRSaWdodFZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKHNhbF91SW50MTYqKW1zb19zcHRDdXJ2ZWRSaWdodFNlZ20sIHNpemVvZiggbXNvX3NwdEN1cnZlZFJpZ2h0U2VnbSApID4+IDEsCgkoU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEqKW1zb19zcHRDdXJ2ZWRSaWdodENhbGMsIHNpemVvZiggbXNvX3NwdEN1cnZlZFJpZ2h0Q2FsYyApIC8gc2l6ZW9mKCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSApLAoJKHNhbF9JbnQzMiopbXNvX3NwdEN1cnZlZFJpZ2h0RGVmYXVsdCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0Q3VydmVkUmlnaHRUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0Q3VydmVkUmlnaHRUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRDdXJ2ZWRSaWdodEdsdWVQb2ludHMsIHNpemVvZiggbXNvX3NwdEN1cnZlZFJpZ2h0R2x1ZVBvaW50cyApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoU3Z4TVNEZmZIYW5kbGUqKW1zb19zcHRDdXJ2ZWRSaWdodEhhbmRsZXMsIHNpemVvZiggbXNvX3NwdEN1cnZlZFJpZ2h0SGFuZGxlcyApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0Q3VydmVkRG93blZlcnRbXSA9CnsKCXsgMCwgMCB9LCB7IDMgTVNPX0ksIDIzIE1TT19JIH0sIHsgMCwgMjIgTVNPX0kgfSwgeyA0IE1TT19JLCAwIH0sCgl7IDE1IE1TT19JLCAwIH0sIHsgMSBNU09fSSwgMjMgTVNPX0kgfSwgeyA3IE1TT19JLCAwIH0sIHsgMTMgTVNPX0ksIDIgTVNPX0kgfSwKCXsgMTQgTVNPX0ksIDIgTVNPX0kgfSwgeyA4IE1TT19JLCAyMiBNU09fSSB9LCB7IDEyIE1TT19JLCAyIE1TT19JIH0sCgl7IDAsIDAgfSwgeyAzIE1TT19JLCAyMyBNU09fSSB9LCB7IDExIE1TT19JLCAyIE1TT19JIH0sIHsgMTcgTVNPX0ksIDI2IE1TT19JIH0sIHsgMTUgTVNPX0ksIDAgfSwKCXsgMSBNU09fSSwgMjMgTVNPX0kgfSwgeyAxNyBNU09fSSwgMjYgTVNPX0kgfSwgeyAxNSBNU09fSSwgMjIgTVNPX0kgfSwKCXsgMCwgMCB9LCB7IDMgTVNPX0ksIDIzIE1TT19JIH0sIHsgMCwgMjIgTVNPX0kgfSwgeyA0IE1TT19JLCAwIH0sCgl7IDAsIDAgfSwgeyAzIE1TT19JLCAyMyBNU09fSSB9LCB7IDQgTVNPX0ksIDAgfSwgeyAxNyBNU09fSSwgMjYgTVNPX0kgfSwKCXsgMTUgTVNPX0ksIDAgfSwgeyAxIE1TT19JLCAyMyBNU09fSSB9LCB7IDE3IE1TT19JLCAyNiBNU09fSSB9LCB7IDE1IE1TT19JLCAyMiBNU09fSSB9Cn07CnN0YXRpYyBjb25zdCBzYWxfdUludDE2IG1zb19zcHRDdXJ2ZWREb3duU2VnbVtdID0KewoJMHhhNjA4LAoJMHgwMDAzLAoJMHhhMzA4LAoJMHg2MDAwLAoJMHg4MDAwLAoJMHhhNjA0LAoJMHhhNTA0LAoJMHhhMzA0LAoJMHg2MDAwLAoJMHg4MDAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzIG1zb19zcHRDdXJ2ZWREb3duVGV4dFJlY3RbXSA9CnsKCXsgeyA0NSBNU09fSSwgNDcgTVNPX0kgfSwgeyA0NiBNU09fSSwgNDggTVNPX0kgfSB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRDdXJ2ZWREb3duR2x1ZVBvaW50c1tdID0KewoJeyAxNyBNU09fSSwgMCB9LCB7IDE2IE1TT19JLCAyMiBNU09fSSB9LCB7IDEyIE1TT19JLCAyIE1TT19JIH0sIHsgOCBNU09fSSwgMjIgTVNPX0kgfSwgeyAxNCBNU09fSSwgMiBNU09fSSB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkhhbmRsZSBtc29fc3B0Q3VydmVkRG93bkhhbmRsZXNbXSA9CnsKCXsJTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFIHwgTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFX1hfTUlOX0lTX1NQRUNJQUwgfCBNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0VfWF9NQVhfSVNfU1BFQ0lBTCwKCQkweDEwMCwgMjE2MDAsIDEwODAwLCAxMDgwMCwgMyArIDQwLCAzICsgMjksIDAsIDEwODAwIH0sCgl7CU1TREZGX0hBTkRMRV9GTEFHU19SQU5HRSB8IE1TREZGX0hBTkRMRV9GTEFHU19SQU5HRV9YX01JTl9JU19TUEVDSUFMIHwgTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFX1hfTUFYX0lTX1NQRUNJQUwsCgkJMHgxMDEsIDIxNjAwLCAxMDgwMCwgMTA4MDAsIDMgKyAyNywgMyArIDIxLCAwLCAxMDgwMCB9LAoJewlNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0UgfCBNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0VfWV9NSU5fSVNfU1BFQ0lBTCB8IE1TREZGX0hBTkRMRV9GTEFHU19SQU5HRV9ZX01BWF9JU19TUEVDSUFMLAoJCTIxNjAwLCAweDEwMiwgMTA4MDAsIDEwODAwLCAzMzc1LCAyMTYwMCwgMyArIDQ0LCAzICsgMjIgfQp9OwoKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29DdXJ2ZWREb3duQXJyb3cgPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdEN1cnZlZERvd25WZXJ0LCBzaXplb2YoIG1zb19zcHRDdXJ2ZWREb3duVmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdEN1cnZlZERvd25TZWdtLCBzaXplb2YoIG1zb19zcHRDdXJ2ZWREb3duU2VnbSApID4+IDEsCgkoU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEqKW1zb19zcHRDdXJ2ZWRSaWdodENhbGMsIHNpemVvZiggbXNvX3NwdEN1cnZlZFJpZ2h0Q2FsYyApIC8gc2l6ZW9mKCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSApLAoJKHNhbF9JbnQzMiopbXNvX3NwdEN1cnZlZFJpZ2h0RGVmYXVsdCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0Q3VydmVkRG93blRleHRSZWN0LCBzaXplb2YoIG1zb19zcHRDdXJ2ZWREb3duVGV4dFJlY3QgKSAvIHNpemVvZiggU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyApLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0Q3VydmVkRG93bkdsdWVQb2ludHMsIHNpemVvZiggbXNvX3NwdEN1cnZlZERvd25HbHVlUG9pbnRzICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdEN1cnZlZERvd25IYW5kbGVzLCBzaXplb2YoIG1zb19zcHRDdXJ2ZWREb3duSGFuZGxlcyApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0Q3VydmVkVXBWZXJ0W10gPQp7Cgl7IDAsIDIyIE1TT19JIH0sIHsgMyBNU09fSSwgMjEgTVNPX0kgfSwgeyAwLCAwIH0sIHsgNCBNU09fSSwgMjEgTVNPX0kgfSwKCXsgMTQgTVNPX0ksIDIyIE1TT19JIH0sIHsgMSBNU09fSSwgMjEgTVNPX0kgfSwgeyA3IE1TT19JLCAyMSBNU09fSSB9LAoJeyAxMiBNU09fSSwgMiBNU09fSSB9LCB7IDEzIE1TT19JLCAyIE1TT19JIH0sIHsgOCBNU09fSSwgMCB9LCB7IDExIE1TT19JLCAyIE1TT19JIH0sCgl7IDAsIDIyIE1TT19JIH0sIHsgMyBNU09fSSwgMjEgTVNPX0kgfSwgeyAxMCBNU09fSSwgMiBNU09fSSB9LCB7IDE2IE1TT19JLCAyNCBNU09fSSB9LAoJeyAxNCBNU09fSSwgMjIgTVNPX0kgfSwgeyAxIE1TT19JLCAyMSBNU09fSSB9LCB7IDE2IE1TT19JLCAyNCBNU09fSSB9LCB7IDE0IE1TT19JLCAwIH0sCgl7IDAsIDIyIE1TT19JIH0sIHsgMyBNU09fSSwgMjEgTVNPX0kgfSwgeyAwLCAwIH0sIHsgNCBNU09fSSwgMjEgTVNPX0kgfSwKCXsgMTQgTVNPX0ksIDIyIE1TT19JIH0sIHsgMSBNU09fSSwgMjEgTVNPX0kgfSwgeyA3IE1TT19JLCAyMSBNU09fSSB9LCB7IDE2IE1TT19JLCAyNCBNU09fSSB9LAoJeyAxNCBNU09fSSwgMjIgTVNPX0kgfSwgeyAxIE1TT19JLCAyMSBNU09fSSB9LCB7IDE2IE1TT19JLCAyNCBNU09fSSB9LCB7IDE0IE1TT19JLCAwIH0KfTsKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvX3NwdEN1cnZlZFVwU2VnbVtdID0KewoJMHhhNDA4LAoJMHgwMDAzLAoJMHhhNTA4LAoJMHg2MDAwLAoJMHg4MDAwLAoJMHhhNDA0LAoJMHhhNTA4LAoJMHhhNTA0LAoJMHg2MDAwLAoJMHg4MDAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSBtc29fc3B0Q3VydmVkVXBDYWxjW10gPQp7Cgl7IDB4MjAwMCwgeyBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMCwgMCB9IH0sCgl7IDB4MjAwMCwgeyBERkZfUHJvcF9hZGp1c3QyVmFsdWUsIDAsIDAgfSB9LAoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0M1ZhbHVlLCAwLCAwIH0gfSwKCXsgMHhhMDAwLCB7IERGRl9Qcm9wX2FkanVzdFZhbHVlLCAyMTYwMCwgREZGX1Byb3BfYWRqdXN0MlZhbHVlIH0gfSwKCXsgMHgyMDAxLCB7IDB4NDAzLCAxLCAyIH0gfSwKCXsgMHg2MDAwLCB7IERGRl9Qcm9wX2FkanVzdDJWYWx1ZSwgREZGX1Byb3BfYWRqdXN0MlZhbHVlLCAyMTYwMCB9IH0sCgl7IDB4ZTAwMCwgeyAweDQwNSwgREZGX1Byb3BfYWRqdXN0MlZhbHVlLCBERkZfUHJvcF9hZGp1c3RWYWx1ZSB9IH0sCgl7IDB4MjAwMSwgeyAweDQwNiwgMSwgMiB9IH0sCgl7IDB4NDAwMiwgeyAyMTYwMCwgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAgfSB9LAoJeyAweGEwMGYsIHsgREZGX1Byb3BfYWRqdXN0M1ZhbHVlLCAyMTYwMCwgMHg0MDQgfSB9LAoJeyAweDYwMDAsIHsgMHg0MDQsIDB4NDA5LCAwIH0gfSwKCXsgMHg2MDAwLCB7IDB4NDBhLCBERkZfUHJvcF9hZGp1c3QyVmFsdWUsIDIxNjAwIH0gfSwKCXsgMHg2MDAwLCB7IDB4NDA3LCAweDQwOSwgMCB9IH0sCgl7IDB4YTAwMCwgeyAweDQwYiwgMjE2MDAsIERGRl9Qcm9wX2FkanVzdFZhbHVlIH0gfSwKCXsgMHhhMDAwLCB7IDB4NDA1LCAwLCBERkZfUHJvcF9hZGp1c3RWYWx1ZSB9IH0sCgl7IDB4MjAwMSwgeyAweDQwZSwgMSwgMiB9IH0sCgl7IDB4NjAwMiwgeyAweDQwNCwgMHg0MDcsIDAgfSB9LAoJeyAweDYwMDAsIHsgREZGX1Byb3BfYWRqdXN0VmFsdWUsIERGRl9Qcm9wX2FkanVzdDJWYWx1ZSwgMjE2MDAgfSB9LAoJeyAweDIwMDEsIHsgMHg0MTEsIDEsIDIgfSB9LAoJeyAweGEwMDAsIHsgMHg0MTAsIDAsIDB4NDEyIH0gfSwKCXsgMHgwMDAwLCB7IDIxNjAwLCAwLCAwIH0gfSwKCXsgMHgwMDAwLCB7IDIxNjAwLCAwLCAwIH0gfSwKCXsgMHgwMDAwLCB7IDAsIDAsIDIxNjAwIH0gfSwKCXsgMHhhMDAwLCB7IDB4NDEwLCAwLCAweDQwNCB9IH0sCgl7IDB4NjAwZiwgeyAweDQxNywgMHg0MDQsIDIxNjAwIH0gfSwKCXsgMHgyMDAwLCB7IDB4NDA4LCAxMjgsIDAgfSB9LAoJeyAweDIwMDEsIHsgMHg0MDUsIDEsIDIgfSB9LAoJeyAweDIwMDAsIHsgMHg0MDUsIDAsIDEyOCB9IH0sCgl7IDB4ZTAwMCwgeyBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMHg0MTAsIDB4NDBiIH0gfSwKCXsgMHg4MDAwLCB7IDIxNjAwLCAwLCBERkZfUHJvcF9hZGp1c3RWYWx1ZSB9IH0sCgl7IDB4MjAwMSwgeyAweDQxZCwgMSwgMiB9IH0sCgl7IDB4MDAwMSwgeyAyMTYwMCwgMjE2MDAsIDEgfSB9LAoJeyAweDYwMDEsIHsgREZGX1Byb3BfYWRqdXN0M1ZhbHVlLCBERkZfUHJvcF9hZGp1c3QzVmFsdWUsIDEgfSB9LAoJeyAweGEwMDAsIHsgMHg0MWYsIDAsIDB4NDIwIH0gfSwKCXsgMHgyMDBkLCB7IDB4NDIxLCAwLCAwIH0gfSwKCXsgMHgyMDAwLCB7IDB4NDIyLCAyMTYwMCwgMCB9IH0sCgl7IDB4ODAwMSwgeyAyMTYwMCwgMjE2MDAsIDB4NDIzIH0gfSwKCXsgMHgyMDAwLCB7IDB4NDI0LCA2NCwgMCB9IH0sCgl7IDB4MjAwMSwgeyBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMSwgMiB9IH0sCgl7IDB4NjAwZiwgeyAweDQxZSwgMHg0MjYsIDIxNjAwIH0gfSwKCXsgMHgyMDAwLCB7IDB4NDI3LCAwLCA2NCB9IH0sCgl7IDB4MjAwMSwgeyAweDQwNCwgMSwgMiB9IH0sCgl7IDB4YTAwMCwgeyBERkZfUHJvcF9hZGp1c3QyVmFsdWUsIDAsIDB4NDI5IH0gfSwKCXsgMHgwMDAxLCB7IDIxNjAwLCAyMTk1LCAxNjM4NCB9IH0sCgl7IDB4MDAwMSwgeyAyMTYwMCwgMTQxODksIDE2Mzg0IH0gfQp9OwpzdGF0aWMgY29uc3Qgc2FsX0ludDMyIG1zb19zcHRDdXJ2ZWRVcERlZmF1bHRbXSA9CnsKCTMsIDEyOTYwLCAxOTQ0MCwgNzIwMAp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyBtc29fc3B0Q3VydmVkVXBUZXh0UmVjdFtdID0KewoJeyB7IDQxIE1TT19JLCA0MyBNU09fSSB9LCB7IDQyIE1TT19JLCA0NCBNU09fSSB9IH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdEN1cnZlZFVwR2x1ZVBvaW50c1tdID0KewoJeyA4IE1TT19JLCAwIH0sIHsgMTEgTVNPX0ksIDIgTVNPX0kgfSwgeyAxNSBNU09fSSwgMCB9LCB7IDE2IE1TT19JLCAyMSBNU09fSSB9LCB7IDEzIE1TT19JLCAyIE1TT19JIH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmSGFuZGxlIG1zb19zcHRDdXJ2ZWRVcEhhbmRsZXNbXSA9CnsKCXsJTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFIHwgTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFX1hfTUlOX0lTX1NQRUNJQUwgfCBNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0VfWF9NQVhfSVNfU1BFQ0lBTCwKCQkweDEwMCwgMCwgMTA4MDAsIDEwODAwLCAzICsgMzcsIDMgKyAyNywgMCwgMTA4MDAgfSwKCXsJTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFIHwgTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFX1hfTUlOX0lTX1NQRUNJQUwgfCBNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0VfWF9NQVhfSVNfU1BFQ0lBTCwKCQkweDEwMSwgMCwgMTA4MDAsIDEwODAwLCAzICsgMjUsIDMgKyAyMCwgMCwgMTA4MDAgfSwKCXsJTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFIHwgTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFX1lfTUFYX0lTX1NQRUNJQUwsCgkJMjE2MDAsIDB4MTAyLCAxMDgwMCwgMTA4MDAsIDMzNzUsIDIxNjAwLCAwLCAzICsgNDAgfQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb0N1cnZlZFVwQXJyb3cgPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdEN1cnZlZFVwVmVydCwgc2l6ZW9mKCBtc29fc3B0Q3VydmVkVXBWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0Q3VydmVkVXBTZWdtLCBzaXplb2YoIG1zb19zcHRDdXJ2ZWRVcFNlZ20gKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0Q3VydmVkVXBDYWxjLCBzaXplb2YoIG1zb19zcHRDdXJ2ZWRVcENhbGMgKSAvIHNpemVvZiggU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgKSwKCShzYWxfSW50MzIqKW1zb19zcHRDdXJ2ZWRVcERlZmF1bHQsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdEN1cnZlZFVwVGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdEN1cnZlZFVwVGV4dFJlY3QgKSAvIHNpemVvZiggU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyApLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0Q3VydmVkVXBHbHVlUG9pbnRzLCBzaXplb2YoIG1zb19zcHRDdXJ2ZWRVcEdsdWVQb2ludHMgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKFN2eE1TRGZmSGFuZGxlKiltc29fc3B0Q3VydmVkVXBIYW5kbGVzLCBzaXplb2YoIG1zb19zcHRDdXJ2ZWRVcEhhbmRsZXMgKSAvIHNpemVvZiggU3Z4TVNEZmZIYW5kbGUgKQp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdEN1cnZlZExlZnRWZXJ0W10gPQp7Cgl7IDIyIE1TT19JLCAwIH0sIHsgMjEgTVNPX0ksIDMgTVNPX0kgfSwgeyAwLCAwIH0sIHsgMjEgTVNPX0ksIDQgTVNPX0kgfSwKCXsgMjIgTVNPX0ksIDE0IE1TT19JIH0sIHsgMjEgTVNPX0ksIDEgTVNPX0kgfSwgeyAyMSBNU09fSSwgNyBNU09fSSB9LCB7IDIgTVNPX0ksIDEyIE1TT19JIH0sCgl7IDIgTVNPX0ksIDEzIE1TT19JIH0sIHsgMCwgOCBNU09fSSB9LCB7IDIgTVNPX0ksIDExIE1TT19JIH0sCgl7IDIyIE1TT19JLCAwIH0sIHsgMjEgTVNPX0ksIDMgTVNPX0kgfSwgeyAyIE1TT19JLCAxMCBNU09fSSB9LCB7IDI0IE1TT19JLCAxNiBNU09fSSB9LAoJeyAyMiBNU09fSSwgMTQgTVNPX0kgfSwgeyAyMSBNU09fSSwgMSBNU09fSSB9LCB7IDI0IE1TT19JLCAxNiBNU09fSSB9LCB7IDAsIDE0IE1TT19JIH0sCgl7IDIyIE1TT19JLCAwIH0sIHsgMjEgTVNPX0ksIDMgTVNPX0kgfSwgeyAwLCAwIH0sIHsgMjEgTVNPX0ksIDQgTVNPX0kgfSwKCXsgMjIgTVNPX0ksIDE0IE1TT19JIH0sIHsgMjEgTVNPX0ksIDEgTVNPX0kgfSwgeyAyMSBNU09fSSwgNyBNU09fSSB9LCB7IDI0IE1TT19JLCAxNiBNU09fSSB9LAoJeyAyMiBNU09fSSwgMTQgTVNPX0kgfSwgeyAyMSBNU09fSSwgMSBNU09fSSB9LCB7IDI0IE1TT19JLCAxNiBNU09fSSB9LCB7IDAsIDE0IE1TT19JIH0KfTsKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvX3NwdEN1cnZlZExlZnRTZWdtW10gPQp7CgkweGE2MDgsCgkweDAwMDMsCgkweGEzMDgsCgkweDYwMDAsCgkweDgwMDAsCgkweGE2MDQsCgkweGEzMDgsCgkweDYwMDAsCgkweDgwMDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgbXNvX3NwdEN1cnZlZExlZnRUZXh0UmVjdFtdID0KewoJeyB7IDQzIE1TT19JLCA0MSBNU09fSSB9LCB7IDQ0IE1TT19JLCA0MiBNU09fSSB9IH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdEN1cnZlZExlZnRHbHVlUG9pbnRzW10gPQp7Cgl7IDAsIDE1IE1TT19JIH0sIHsgMiBNU09fSSwgMTEgTVNPX0kgfSwgeyAwLCA4IE1TT19JIH0sIHsgMiBNU09fSSwgMTMgTVNPX0kgfSwgeyAyMSBNU09fSSwgMTYgTVNPX0kgfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZIYW5kbGUgbXNvX3NwdEN1cnZlZExlZnRIYW5kbGVzW10gPQp7Cgl7CU1TREZGX0hBTkRMRV9GTEFHU19SQU5HRSB8IE1TREZGX0hBTkRMRV9GTEFHU19SQU5HRV9ZX01JTl9JU19TUEVDSUFMIHwgTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFX1lfTUFYX0lTX1NQRUNJQUwsCgkJMCwgMHgxMDAsIDEwODAwLCAxMDgwMCwgMCwgMTA4MDAsIDMgKyAzNywgMyArIDI3IH0sCgl7CU1TREZGX0hBTkRMRV9GTEFHU19SQU5HRSB8IE1TREZGX0hBTkRMRV9GTEFHU19SQU5HRV9ZX01JTl9JU19TUEVDSUFMIHwgTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFX1lfTUFYX0lTX1NQRUNJQUwsCgkJMCwgMHgxMDEsIDEwODAwLCAxMDgwMCwgMCwgMTA4MDAsIDMgKyAyNSwgMyArIDIwIH0sCgl7CU1TREZGX0hBTkRMRV9GTEFHU19SQU5HRSB8IE1TREZGX0hBTkRMRV9GTEFHU19SQU5HRV9YX01BWF9JU19TUEVDSUFMLAoJCTB4MTAyLCAyMTYwMCwgMTA4MDAsIDEwODAwLCAwLCAzICsgNDAsIDMzNzUsIDIxNjAwIH0KfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29DdXJ2ZWRMZWZ0QXJyb3cgPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdEN1cnZlZExlZnRWZXJ0LCBzaXplb2YoIG1zb19zcHRDdXJ2ZWRMZWZ0VmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdEN1cnZlZExlZnRTZWdtLCBzaXplb2YoIG1zb19zcHRDdXJ2ZWRMZWZ0U2VnbSApID4+IDEsCgkoU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEqKW1zb19zcHRDdXJ2ZWRVcENhbGMsIHNpemVvZiggbXNvX3NwdEN1cnZlZFVwQ2FsYyApIC8gc2l6ZW9mKCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSApLAoJKHNhbF9JbnQzMiopbXNvX3NwdEN1cnZlZFVwRGVmYXVsdCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0Q3VydmVkTGVmdFRleHRSZWN0LCBzaXplb2YoIG1zb19zcHRDdXJ2ZWRMZWZ0VGV4dFJlY3QgKSAvIHNpemVvZiggU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyApLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0Q3VydmVkTGVmdEdsdWVQb2ludHMsIHNpemVvZiggbXNvX3NwdEN1cnZlZExlZnRHbHVlUG9pbnRzICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdEN1cnZlZExlZnRIYW5kbGVzLCBzaXplb2YoIG1zb19zcHRDdXJ2ZWRMZWZ0SGFuZGxlcyApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0U3RyaXBlZFJpZ2h0QXJyb3dWZXJ0W10gPQkvLyBhZGp1c3RtZW50MSA6IHggMzM3NSAtIDIxNjAwCnsJCQkJCQkJCQkJCQkJCQkJLy8gYWRqdXN0bWVudDIgOiB5IDAgLSAxMDgwMAoJeyAzMzc1LAkwIE1TT19JIH0sIHsgMSBNU09fSSwgMCBNU09fSSB9LCB7IDEgTVNPX0ksIDAgfSwgeyAyMTYwMCwgMTA4MDAgfSwKCXsgMSBNU09fSSwgMjE2MDAgfSwJeyAxIE1TT19JLCAyIE1TT19JIH0sIHsgMzM3NSwgMiBNU09fSSB9LCB7IDAsIDAgTVNPX0kgfSwKCXsgNjc1LCAwIE1TT19JIH0sIHsgNjc1LCAyIE1TT19JIH0sIHsgMCwgMiBNU09fSSB9LCB7IDEzNTAsIDAgTVNPX0kgfSwKCXsgMjcwMCwgMCBNU09fSSB9LCB7IDI3MDAsIDIgTVNPX0kgfSwgeyAxMzUwLCAyIE1TT19JIH0KfTsKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvX3NwdFN0cmlwZWRSaWdodEFycm93U2VnbVtdID0KewoJMHg0MDAwLCAweDAwMDYsIDB4NjAwMSwJMHg4MDAwLAoJMHg0MDAwLCAweDAwMDMsIDB4NjAwMSwgMHg4MDAwLAoJMHg0MDAwLCAweDAwMDMsIDB4NjAwMSwgMHg4MDAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSBtc29fc3B0U3RyaXBlZFJpZ2h0QXJyb3dDYWxjW10gPQp7Cgl7IDB4MjAwMCwgeyBERkZfUHJvcF9hZGp1c3QyVmFsdWUsIDAsIDAgfSB9LAoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAsIDAgfSB9LAoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIERGRl9Qcm9wX2FkanVzdDJWYWx1ZSB9IH0sCgl7IDB4ODAwMCwgeyAyMTYwMCwgMCwgMHg0MDEgfSB9LAoJeyAweDYwMDEsIHsgMHg0MDMsIDB4NDAwLCAxMDgwMCB9IH0sCgl7IDB4NjAwMCwgeyAweDQwMSwgMHg0MDQsIDAgfSB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzIG1zb19zcHRTdHJpcGVkUmlnaHRBcnJvd1RleHRSZWN0W10gPQp7Cgl7IHsgMzM3NSwgMCBNU09fSSB9LCB7IDUgTVNPX0ksIDIgTVNPX0kgfSB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkhhbmRsZSBtc29fc3B0U3RyaXBlZFJpZ2h0QXJyb3dIYW5kbGVbXSA9CnsKCXsJTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFLAoJCTB4MTAwLCAweDEwMSwgMTA4MDAsIDEwODAwLCAzMzc1LCAyMTYwMCwgMCwgMTA4MDAgfQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb1N0cmlwZWRSaWdodEFycm93ID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRTdHJpcGVkUmlnaHRBcnJvd1ZlcnQsIHNpemVvZiggbXNvX3NwdFN0cmlwZWRSaWdodEFycm93VmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdFN0cmlwZWRSaWdodEFycm93U2VnbSwgc2l6ZW9mKCBtc29fc3B0U3RyaXBlZFJpZ2h0QXJyb3dTZWdtICkgPj4gMSwKCShTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSopbXNvX3NwdFN0cmlwZWRSaWdodEFycm93Q2FsYywgc2l6ZW9mKCBtc29fc3B0U3RyaXBlZFJpZ2h0QXJyb3dDYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0RGVmYXVsdDE2MjAwYW5kNTQwMCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0U3RyaXBlZFJpZ2h0QXJyb3dUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0U3RyaXBlZFJpZ2h0QXJyb3dUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJTlVMTCwgMCwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdFN0cmlwZWRSaWdodEFycm93SGFuZGxlLCBzaXplb2YoIG1zb19zcHRTdHJpcGVkUmlnaHRBcnJvd0hhbmRsZSApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0Tm90Y2hlZFJpZ2h0QXJyb3dWZXJ0W10gPQkvLyBhZGp1c3RtZW50MSA6IHggMCAtIDIxNjAwCShkZWZhdWx0IDE2MjAwKQp7CQkJCQkJCQkJCQkJCQkJCS8vIGFkanVzdG1lbnQyIDogeSAwIC0gMTA4MDAJKGRlZmF1bHQgNTQwMCkKCXsgMCwgMSBNU09fSSB9LCB7IDAgTVNPX0ksIDEgTVNPX0kgfSwgeyAwIE1TT19JLCAwIH0sIHsgMjE2MDAsIDEwODAwIH0sCgl7IDAgTVNPX0ksIDIxNjAwIH0sIHsgMCBNU09fSSwgMiBNU09fSSB9LCB7IDAsIDIgTVNPX0kgfSwgeyA1IE1TT19JLCAxMDgwMCB9LCB7IDAsIDEgTVNPX0kgfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgbXNvX3NwdE5vdGNoZWRSaWdodEFycm93Q2FsY1tdID0KewoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAsIDAgfSB9LAoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0MlZhbHVlLCAwLCAwIH0gfSwKCXsgMHg4MDAwLCB7IDIxNjAwLCAwLCBERkZfUHJvcF9hZGp1c3QyVmFsdWUgfSB9LAoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIERGRl9Qcm9wX2FkanVzdFZhbHVlIH0gfSwKCXsgMHg4MDAwLCB7IDEwODAwLCAwLCBERkZfUHJvcF9hZGp1c3QyVmFsdWUgfSB9LAoJeyAweDYwMDEsIHsgMHg0MDMsIDB4NDA0LCAxMDgwMCB9IH0sCiAgICB7IDB4ODAwMCwgeyAyMTYwMCwgMCwgMHg0MDUgfX0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgbXNvX3NwdE5vdGNoZWRSaWdodEFycm93VGV4dFJlY3RbXSA9CS8vIHRvZG8KewoJeyB7IDUgTVNPX0ksIDEgTVNPX0kgfSwgeyA2IE1TT19JLCAyIE1TT19JIH0gfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZIYW5kbGUgbXNvX3NwdE5vdGNoZWRSaWdodEFycm93SGFuZGxlW10gPQp7Cgl7CU1TREZGX0hBTkRMRV9GTEFHU19SQU5HRSwKCQkweDEwMCwgMHgxMDEsIDEwODAwLCAxMDgwMCwgMCwgMjE2MDAsIDAsIDEwODAwIH0KfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29Ob3RjaGVkUmlnaHRBcnJvdyA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0Tm90Y2hlZFJpZ2h0QXJyb3dWZXJ0LCBzaXplb2YoIG1zb19zcHROb3RjaGVkUmlnaHRBcnJvd1ZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJTlVMTCwgMCwKCShTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSopbXNvX3NwdE5vdGNoZWRSaWdodEFycm93Q2FsYywgc2l6ZW9mKCBtc29fc3B0Tm90Y2hlZFJpZ2h0QXJyb3dDYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0RGVmYXVsdDE2MjAwYW5kNTQwMCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0Tm90Y2hlZFJpZ2h0QXJyb3dUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0Tm90Y2hlZFJpZ2h0QXJyb3dUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJTlVMTCwgMCwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdE5vdGNoZWRSaWdodEFycm93SGFuZGxlLCBzaXplb2YoIG1zb19zcHROb3RjaGVkUmlnaHRBcnJvd0hhbmRsZSApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0SG9tZVBsYXRlVmVydFtdID0JLy8gYWRqdXN0bWVudDEgOiB4IDAgLSAyMTYwMAp7Cgl7IDAsIDAgfSwgeyAwIE1TT19JLCAwIH0sIHsgMjE2MDAsIDEwODAwIH0sIHsgMCBNU09fSSwgMjE2MDAgfSwKCXsgMCwgMjE2MDAgfQp9OwpzdGF0aWMgY29uc3Qgc2FsX3VJbnQxNiBtc29fc3B0SG9tZVBsYXRlU2VnbVtdID0KewoJMHg0MDAwLCAweDAwMDQsIDB4NjAwMSwgMHg4MDAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSBtc29fc3B0SG9tZVBsYXRlQ2FsY1tdID0KewoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAsIDAgfSB9Cn07CnN0YXRpYyBjb25zdCBzYWxfSW50MzIgbXNvX3NwdEhvbWVQbGF0ZURlZmF1bHRbXSA9CnsKCTEsIDE2MjAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzIG1zb19zcHRIb21lUGxhdGVUZXh0UmVjdFtdID0JLy8gdG9kbwp7Cgl7IHsgMCwgMCB9LCB7IDIxNjAwLCAyMTYwMCB9IH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmSGFuZGxlIG1zb19zcHRIb21lUGxhdGVIYW5kbGVbXSA9CnsKCXsJTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFLAoJCTB4MTAwLCAwLCAxMDgwMCwgMTA4MDAsIDAsIDIxNjAwLCBNeDgwMDAwMDAwLCAweDdmZmZmZmZmIH0KfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29Ib21lUGxhdGUgPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdEhvbWVQbGF0ZVZlcnQsIHNpemVvZiggbXNvX3NwdEhvbWVQbGF0ZVZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKHNhbF91SW50MTYqKW1zb19zcHRIb21lUGxhdGVTZWdtLCBzaXplb2YoIG1zb19zcHRIb21lUGxhdGVTZWdtICkgPj4gMSwKCShTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSopbXNvX3NwdEhvbWVQbGF0ZUNhbGMsIHNpemVvZiggbXNvX3NwdEhvbWVQbGF0ZUNhbGMgKSAvIHNpemVvZiggU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgKSwKCShzYWxfSW50MzIqKW1zb19zcHRIb21lUGxhdGVEZWZhdWx0LAoJKFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMqKW1zb19zcHRIb21lUGxhdGVUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0SG9tZVBsYXRlVGV4dFJlY3QgKSAvIHNpemVvZiggU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyApLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCU5VTEwsIDAsCgkoU3Z4TVNEZmZIYW5kbGUqKW1zb19zcHRIb21lUGxhdGVIYW5kbGUsIHNpemVvZiggbXNvX3NwdEhvbWVQbGF0ZUhhbmRsZSApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0Q2hldnJvblZlcnRbXSA9CS8vIGFkanVzdG1lbnQxIDogeCAwIC0gMjE2MDAKewoJeyAwLCAwIH0sIHsgMCBNU09fSSwgMCB9LCB7IDIxNjAwLCAxMDgwMCB9LCB7IDAgTVNPX0ksIDIxNjAwIH0sCgl7IDAsIDIxNjAwIH0sIHsgMSBNU09fSSwgMTA4MDAgfQp9OwpzdGF0aWMgY29uc3Qgc2FsX3VJbnQxNiBtc29fc3B0Q2hldnJvblNlZ21bXSA9CnsKCTB4NDAwMCwgMHgwMDA1LCAweDYwMDEsIDB4ODAwMAp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgbXNvX3NwdENoZXZyb25DYWxjW10gPQp7Cgl7IDB4MjAwMCwgeyBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMCwgMCB9IH0sCgl7IDB4ODAwMCwgeyAyMTYwMCwgMCwgMHgwNDAwIH0gfQp9OwpzdGF0aWMgY29uc3Qgc2FsX0ludDMyIG1zb19zcHRDaGV2cm9uRGVmYXVsdFtdID0KewoJMSwgMTYyMDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgbXNvX3NwdENoZXZyb25UZXh0UmVjdFtdID0JLy8gdG9kbwp7Cgl7IHsgMCwgMCB9LCB7IDIxNjAwLCAyMTYwMCB9IH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmSGFuZGxlIG1zb19zcHRDaGV2cm9uSGFuZGxlW10gPQp7Cgl7CU1TREZGX0hBTkRMRV9GTEFHU19SQU5HRSwKCQkweDEwMCwgMCwgMTA4MDAsIDEwODAwLCAwLCAyMTYwMCwgTXg4MDAwMDAwMCwgMHg3ZmZmZmZmZiB9Cn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvQ2hldnJvbiA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0Q2hldnJvblZlcnQsIHNpemVvZiggbXNvX3NwdENoZXZyb25WZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0Q2hldnJvblNlZ20sIHNpemVvZiggbXNvX3NwdENoZXZyb25TZWdtICkgPj4gMSwKCShTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSopbXNvX3NwdENoZXZyb25DYWxjLCBzaXplb2YoIG1zb19zcHRDaGV2cm9uQ2FsYyApIC8gc2l6ZW9mKCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSApLAoJKHNhbF9JbnQzMiopbXNvX3NwdENoZXZyb25EZWZhdWx0LAoJKFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMqKW1zb19zcHRDaGV2cm9uVGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdENoZXZyb25UZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJTlVMTCwgMCwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdENoZXZyb25IYW5kbGUsIHNpemVvZiggbXNvX3NwdENoZXZyb25IYW5kbGUgKSAvIHNpemVvZiggU3Z4TVNEZmZIYW5kbGUgKQp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdFJpZ2h0QXJyb3dDYWxsb3V0VmVydFtdID0JLy8gYWRqdXN0bWVudDEgOiB4IDAgLSAyMTAwMAp7CQkJCQkJCQkJCQkJCQkJCS8vIGFkanVzdG1lbnQyIDogeSAwIC0gMTA4MDAKCXsgMCwgMCB9LCB7IDAgTVNPX0ksIDAgfSwgeyAwIE1TT19JLCAzIE1TT19JIH0sIHsgMiBNU09fSSwgMyBNU09fSSB9LAoJeyAyIE1TT19JLCAxIE1TT19JIH0sIHsgMjE2MDAsIDEwODAwIH0sIHsgMiBNU09fSSwgNCBNU09fSSB9LCB7IDIgTVNPX0ksIDUgTVNPX0kgfSwKCXsgMCBNU09fSSwgNSBNU09fSSB9LCB7IDAgTVNPX0ksIDIxNjAwIH0sIHsgMCwgMjE2MDAgfQp9OwpzdGF0aWMgY29uc3Qgc2FsX3VJbnQxNiBtc29fc3B0UmlnaHRBcnJvd0NhbGxvdXRTZWdtW10gPQp7CgkweDQwMDAsIDB4MDAwYSwgMHg2MDAxLAkweDgwMDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhIG1zb19zcHRSaWdodEFycm93Q2FsbG91dENhbGNbXSA9CnsKCXsgMHgyMDAwLCB7IERGRl9Qcm9wX2FkanVzdFZhbHVlLCAwLCAwIH0gfSwKCXsgMHgyMDAwLCB7IERGRl9Qcm9wX2FkanVzdDJWYWx1ZSwgMCwgMCB9IH0sCgl7IDB4MjAwMCwgeyBERkZfUHJvcF9hZGp1c3QzVmFsdWUsIDAsIDAgfSB9LAoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0NFZhbHVlLCAwLCAwIH0gfSwKCXsgMHg4MDAwLCB7IDIxNjAwLCAwLCAweDA0MDEgfSB9LAoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIDB4MDQwMyB9IH0KfTsKc3RhdGljIGNvbnN0IHNhbF9JbnQzMiBtc29fc3B0UmlnaHRBcnJvd0NhbGxvdXREZWZhdWx0W10gPQp7Cgk0LCAxNDQwMCwgNTQwMCwgMTgwMDAsIDgxMDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgbXNvX3NwdFJpZ2h0QXJyb3dDYWxsb3V0VGV4dFJlY3RbXSA9CnsKCXsgeyAwLCAwIH0sIHsgMCBNU09fSSwgMjE2MDAgfSB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkhhbmRsZSBtc29fc3B0UmlnaHRBcnJvd0NhbGxvdXRIYW5kbGVbXSA9CnsKCXsJTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFIHwgTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFX1hfTUFYX0lTX1NQRUNJQUwsCgkJMHgxMDAsIDAsIDEwODAwLCAxMDgwMCwgMCwgMHgxMDIsIE14ODAwMDAwMDAsIDB4N2ZmZmZmZmYgfSwKCXsJTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFIHwgTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFX1hfTUlOX0lTX1NQRUNJQUwgfCBNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0VfWV9NSU5fSVNfU1BFQ0lBTCwKCQkweDEwMiwgMHgxMDMsIDEwODAwLCAxMDgwMCwgMHgxMDAsIDIxNjAwLCAweDEwMSwgMTA4MDAgfSwKCXsJTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFIHwgTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFX1lfTUFYX0lTX1NQRUNJQUwsCgkJMSwgMHgxMDEsIDEwODAwLCAxMDgwMCwgTXg4MDAwMDAwMCwgMHg3ZmZmZmZmZiwgMCwgMHgxMDMgfQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb1JpZ2h0QXJyb3dDYWxsb3V0ID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRSaWdodEFycm93Q2FsbG91dFZlcnQsIHNpemVvZiggbXNvX3NwdFJpZ2h0QXJyb3dDYWxsb3V0VmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdFJpZ2h0QXJyb3dDYWxsb3V0U2VnbSwgc2l6ZW9mKCBtc29fc3B0UmlnaHRBcnJvd0NhbGxvdXRTZWdtICkgPj4gMSwKCShTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSopbXNvX3NwdFJpZ2h0QXJyb3dDYWxsb3V0Q2FsYywgc2l6ZW9mKCBtc29fc3B0UmlnaHRBcnJvd0NhbGxvdXRDYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0UmlnaHRBcnJvd0NhbGxvdXREZWZhdWx0LAoJKFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMqKW1zb19zcHRSaWdodEFycm93Q2FsbG91dFRleHRSZWN0LCBzaXplb2YoIG1zb19zcHRSaWdodEFycm93Q2FsbG91dFRleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTIxNjAwLCAyMTYwMCwKCU14ODAwMDAwMDAsIE14ODAwMDAwMDAsCglOVUxMLCAwLAoJKFN2eE1TRGZmSGFuZGxlKiltc29fc3B0UmlnaHRBcnJvd0NhbGxvdXRIYW5kbGUsIHNpemVvZiggbXNvX3NwdFJpZ2h0QXJyb3dDYWxsb3V0SGFuZGxlICkgLyBzaXplb2YoIFN2eE1TRGZmSGFuZGxlICkKfTsKCnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRMZWZ0QXJyb3dDYWxsb3V0VmVydFtdID0JLy8gYWRqdXN0bWVudDEgOiB4IDAgLSAyMTYwMCwgYWRqdXN0bWVudDIgOiB5IDAgLSAxMDgwMAp7CQkJCQkJCQkJCQkJCQkJCS8vIGFkanVzdG1lbnQzIDogeCAwIC0gMjE2MDAsIGFkanVzdG1lbnQ0IDogeSAwIC0gMTA4MDAKCXsgMCBNU09fSSwgMCB9LCB7IDIxNjAwLCAwIH0sIHsgMjE2MDAsIDIxNjAwIH0sIHsgMCBNU09fSSwgMjE2MDAgfSwKCXsgMCBNU09fSSwgNSBNU09fSSB9LCB7IDIgTVNPX0ksIDUgTVNPX0kgfSwgeyAyIE1TT19JLCA0IE1TT19JIH0sIHsgMCwgMTA4MDAgfSwKCXsgMiBNU09fSSwgMSBNU09fSSB9LCB7IDIgTVNPX0ksIDMgTVNPX0kgfSwgeyAwIE1TT19JLCAzIE1TT19JIH0KfTsKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvX3NwdExlZnRBcnJvd0NhbGxvdXRTZWdtW10gPQp7CgkweDQwMDAsIDB4MDAwYSwgMHg2MDAxLAkweDgwMDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhIG1zb19zcHRMZWZ0QXJyb3dDYWxsb3V0Q2FsY1tdID0KewoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAsIDAgfSB9LAoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0MlZhbHVlLCAwLCAwIH0gfSwKCXsgMHgyMDAwLCB7IERGRl9Qcm9wX2FkanVzdDNWYWx1ZSwgMCwgMCB9IH0sCgl7IDB4MjAwMCwgeyBERkZfUHJvcF9hZGp1c3Q0VmFsdWUsIDAsIDAgfSB9LAoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIDB4MDQwMSB9IH0sCgl7IDB4ODAwMCwgeyAyMTYwMCwgMCwgMHgwNDAzIH0gfQp9OwpzdGF0aWMgY29uc3Qgc2FsX0ludDMyIG1zb19zcHRMZWZ0QXJyb3dDYWxsb3V0RGVmYXVsdFtdID0KewoJNCwgNzIwMCwgNTQwMCwgMzYwMCwgODEwMAp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyBtc29fc3B0TGVmdEFycm93Q2FsbG91dFRleHRSZWN0W10gPQp7Cgl7IHsgMCBNU09fSSwgMCB9LCB7IDIxNjAwLCAyMTYwMCB9IH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmSGFuZGxlIG1zb19zcHRMZWZ0QXJyb3dDYWxsb3V0SGFuZGxlW10gPQp7Cgl7CU1TREZGX0hBTkRMRV9GTEFHU19SQU5HRSB8IE1TREZGX0hBTkRMRV9GTEFHU19SQU5HRV9YX01JTl9JU19TUEVDSUFMLAoJCTB4MTAwLCAwLCAxMDgwMCwgMTA4MDAsIDB4MTAyLCAyMTYwMCwgTXg4MDAwMDAwMCwgMHg3ZmZmZmZmZiB9LAoJewlNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0UgfCBNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0VfWF9NQVhfSVNfU1BFQ0lBTCB8IE1TREZGX0hBTkRMRV9GTEFHU19SQU5HRV9ZX01JTl9JU19TUEVDSUFMLAoJCTB4MTAyLCAweDEwMywgMTA4MDAsIDEwODAwLCAwLCAweDEwMCwgMHgxMDEsIDEwODAwIH0sCgl7CU1TREZGX0hBTkRMRV9GTEFHU19SQU5HRSB8IE1TREZGX0hBTkRMRV9GTEFHU19SQU5HRV9ZX01BWF9JU19TUEVDSUFMLAoJCTAsIDB4MTAxLCAxMDgwMCwgMTA4MDAsIE14ODAwMDAwMDAsIDB4N2ZmZmZmZmYsIDAsIDB4MTAzIH0KfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29MZWZ0QXJyb3dDYWxsb3V0ID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRMZWZ0QXJyb3dDYWxsb3V0VmVydCwgc2l6ZW9mKCBtc29fc3B0TGVmdEFycm93Q2FsbG91dFZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKHNhbF91SW50MTYqKW1zb19zcHRMZWZ0QXJyb3dDYWxsb3V0U2VnbSwgc2l6ZW9mKCBtc29fc3B0TGVmdEFycm93Q2FsbG91dFNlZ20gKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0TGVmdEFycm93Q2FsbG91dENhbGMsIHNpemVvZiggbXNvX3NwdExlZnRBcnJvd0NhbGxvdXRDYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0TGVmdEFycm93Q2FsbG91dERlZmF1bHQsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdExlZnRBcnJvd0NhbGxvdXRUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0TGVmdEFycm93Q2FsbG91dFRleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTIxNjAwLCAyMTYwMCwKCU14ODAwMDAwMDAsIE14ODAwMDAwMDAsCglOVUxMLCAwLAoJKFN2eE1TRGZmSGFuZGxlKiltc29fc3B0TGVmdEFycm93Q2FsbG91dEhhbmRsZSwgc2l6ZW9mKCBtc29fc3B0TGVmdEFycm93Q2FsbG91dEhhbmRsZSApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0VXBBcnJvd0NhbGxvdXRWZXJ0W10gPQp7Cgl7IDIxNjAwLCAwIE1TT19JIH0sIHsgMjE2MDAsIDIxNjAwIH0sIHsgMCwgMjE2MDAgfSwgeyAwLCAwIE1TT19JIH0sCgl7IDMgTVNPX0ksIDAgTVNPX0kgfSwgeyAzIE1TT19JLCAyIE1TT19JIH0sIHsgMSBNU09fSSwgMiBNU09fSSB9LCB7IDEwODAwLCAwIH0sCgl7IDQgTVNPX0ksIDIgTVNPX0kgfSwgeyA1IE1TT19JLCAyIE1TT19JIH0sIHsgNSBNU09fSSwgMCBNU09fSSB9Cn07CnN0YXRpYyBjb25zdCBzYWxfdUludDE2IG1zb19zcHRVcEFycm93Q2FsbG91dFNlZ21bXSA9CnsKCTB4NDAwMCwgMHgwMDBhLCAweDYwMDEsCTB4ODAwMAp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgbXNvX3NwdFVwQXJyb3dDYWxsb3V0Q2FsY1tdID0KewoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAsIDAgfSB9LAoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0MlZhbHVlLCAwLCAwIH0gfSwKCXsgMHgyMDAwLCB7IERGRl9Qcm9wX2FkanVzdDNWYWx1ZSwgMCwgMCB9IH0sCgl7IDB4MjAwMCwgeyBERkZfUHJvcF9hZGp1c3Q0VmFsdWUsIDAsIDAgfSB9LAoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIDB4MDQwMSB9IH0sCgl7IDB4ODAwMCwgeyAyMTYwMCwgMCwgMHgwNDAzIH0gfQp9OwpzdGF0aWMgY29uc3Qgc2FsX0ludDMyIG1zb19zcHRVcEFycm93Q2FsbG91dERlZmF1bHRbXSA9CnsKCTQsIDcyMDAsIDU0MDAsIDM2MDAsIDgxMDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgbXNvX3NwdFVwQXJyb3dDYWxsb3V0VGV4dFJlY3RbXSA9CnsKCXsgeyAwLCAwIE1TT19JIH0sIHsgMjE2MDAsIDIxNjAwIH0gfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZIYW5kbGUgbXNvX3NwdFVwQXJyb3dDYWxsb3V0SGFuZGxlW10gPQp7Cgl7CU1TREZGX0hBTkRMRV9GTEFHU19SQU5HRSB8IE1TREZGX0hBTkRMRV9GTEFHU19SQU5HRV9ZX01JTl9JU19TUEVDSUFMLAoJCTAsIDB4MTAwLCAxMDgwMCwgMTA4MDAsIE14ODAwMDAwMDAsIDB4N2ZmZmZmZmYsIDB4MTAyLCAyMTYwMCB9LAoJewlNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0UgfCBNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0VfWF9NSU5fSVNfU1BFQ0lBTCB8IE1TREZGX0hBTkRMRV9GTEFHU19SQU5HRV9ZX01BWF9JU19TUEVDSUFMLAoJCTB4MTAzLCAweDEwMiwgMTA4MDAsIDEwODAwLCAweDEwMSwgMTA4MDAsIDAsIDB4MTAwIH0sCgl7CU1TREZGX0hBTkRMRV9GTEFHU19SQU5HRSB8IE1TREZGX0hBTkRMRV9GTEFHU19SQU5HRV9YX01BWF9JU19TUEVDSUFMLAoJCTB4MTAxLCAwLCAxMDgwMCwgMTA4MDAsIDAsIDB4MTAzLCBNeDgwMDAwMDAwLCAweDdmZmZmZmZmIH0KfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29VcEFycm93Q2FsbG91dCA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0VXBBcnJvd0NhbGxvdXRWZXJ0LCBzaXplb2YoIG1zb19zcHRVcEFycm93Q2FsbG91dFZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKHNhbF91SW50MTYqKW1zb19zcHRVcEFycm93Q2FsbG91dFNlZ20sIHNpemVvZiggbXNvX3NwdFVwQXJyb3dDYWxsb3V0U2VnbSApID4+IDEsCgkoU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEqKW1zb19zcHRVcEFycm93Q2FsbG91dENhbGMsIHNpemVvZiggbXNvX3NwdFVwQXJyb3dDYWxsb3V0Q2FsYyApIC8gc2l6ZW9mKCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSApLAoJKHNhbF9JbnQzMiopbXNvX3NwdFVwQXJyb3dDYWxsb3V0RGVmYXVsdCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0VXBBcnJvd0NhbGxvdXRUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0VXBBcnJvd0NhbGxvdXRUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJTlVMTCwgMCwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdFVwQXJyb3dDYWxsb3V0SGFuZGxlLCBzaXplb2YoIG1zb19zcHRVcEFycm93Q2FsbG91dEhhbmRsZSApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0RG93bkFycm93Q2FsbG91dFZlcnRbXSA9CnsKCXsgMCwgMCBNU09fSSB9LCB7IDAsIDAgfSwgeyAyMTYwMCwgMCB9LCB7IDIxNjAwLCAwIE1TT19JIH0sCgl7IDUgTVNPX0ksIDAgTVNPX0kgfSwgeyA1IE1TT19JLCAyIE1TT19JIH0sIHsgNCBNU09fSSwgMiBNU09fSSB9LCB7IDEwODAwLCAyMTYwMCB9LAoJeyAxIE1TT19JLCAyIE1TT19JIH0sIHsgMyBNU09fSSwgMiBNU09fSSB9LCB7IDMgTVNPX0ksIDAgTVNPX0kgfQp9OwpzdGF0aWMgY29uc3Qgc2FsX3VJbnQxNiBtc29fc3B0RG93bkFycm93Q2FsbG91dFNlZ21bXSA9CnsKCTB4NDAwMCwgMHgwMDBhLCAweDYwMDEsCTB4ODAwMAp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgbXNvX3NwdERvd25BcnJvd0NhbGxvdXRDYWxjW10gPQp7Cgl7IDB4MjAwMCwgeyBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMCwgMCB9IH0sCgl7IDB4MjAwMCwgeyBERkZfUHJvcF9hZGp1c3QyVmFsdWUsIDAsIDAgfSB9LAoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0M1ZhbHVlLCAwLCAwIH0gfSwKCXsgMHgyMDAwLCB7IERGRl9Qcm9wX2FkanVzdDRWYWx1ZSwgMCwgMCB9IH0sCgl7IDB4ODAwMCwgeyAyMTYwMCwgMCwgMHgwNDAxIH0gfSwKCXsgMHg4MDAwLCB7IDIxNjAwLCAwLCAweDA0MDMgfSB9Cn07CnN0YXRpYyBjb25zdCBzYWxfSW50MzIgbXNvX3NwdERvd25BcnJvd0NhbGxvdXREZWZhdWx0W10gPQp7Cgk0LCAxNDQwMCwgNTQwMCwgMTgwMDAsIDgxMDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgbXNvX3NwdERvd25BcnJvd0NhbGxvdXRUZXh0UmVjdFtdID0KewoJeyB7IDAsIDAgfSwgeyAyMTYwMCwgMCBNU09fSSB9IH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmSGFuZGxlIG1zb19zcHREb3duQXJyb3dDYWxsb3V0SGFuZGxlW10gPQp7Cgl7CU1TREZGX0hBTkRMRV9GTEFHU19SQU5HRSB8IE1TREZGX0hBTkRMRV9GTEFHU19SQU5HRV9ZX01BWF9JU19TUEVDSUFMLAoJCTAsIDB4MTAwLCAxMDgwMCwgMTA4MDAsIE14ODAwMDAwMDAsIDB4N2ZmZmZmZmYsIDAsIDB4MTAyIH0sCgl7CU1TREZGX0hBTkRMRV9GTEFHU19SQU5HRSB8IE1TREZGX0hBTkRMRV9GTEFHU19SQU5HRV9YX01JTl9JU19TUEVDSUFMIHwgTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFX1lfTUlOX0lTX1NQRUNJQUwsCgkJMHgxMDMsIDB4MTAyLCAxMDgwMCwgMTA4MDAsIDB4MTAxLCAxMDgwMCwgMHgxMDAsIDIxNjAwIH0sCgl7CU1TREZGX0hBTkRMRV9GTEFHU19SQU5HRSB8IE1TREZGX0hBTkRMRV9GTEFHU19SQU5HRV9YX01BWF9JU19TUEVDSUFMLAoJCTB4MTAxLCAxLCAxMDgwMCwgMTA4MDAsIDAsIDB4MTAzLCBNeDgwMDAwMDAwLCAweDdmZmZmZmZmIH0KfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29Eb3duQXJyb3dDYWxsb3V0ID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHREb3duQXJyb3dDYWxsb3V0VmVydCwgc2l6ZW9mKCBtc29fc3B0RG93bkFycm93Q2FsbG91dFZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKHNhbF91SW50MTYqKW1zb19zcHREb3duQXJyb3dDYWxsb3V0U2VnbSwgc2l6ZW9mKCBtc29fc3B0RG93bkFycm93Q2FsbG91dFNlZ20gKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0RG93bkFycm93Q2FsbG91dENhbGMsIHNpemVvZiggbXNvX3NwdERvd25BcnJvd0NhbGxvdXRDYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0RG93bkFycm93Q2FsbG91dERlZmF1bHQsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdERvd25BcnJvd0NhbGxvdXRUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0RG93bkFycm93Q2FsbG91dFRleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTIxNjAwLCAyMTYwMCwKCU14ODAwMDAwMDAsIE14ODAwMDAwMDAsCglOVUxMLCAwLAoJKFN2eE1TRGZmSGFuZGxlKiltc29fc3B0RG93bkFycm93Q2FsbG91dEhhbmRsZSwgc2l6ZW9mKCBtc29fc3B0RG93bkFycm93Q2FsbG91dEhhbmRsZSApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0TGVmdFJpZ2h0QXJyb3dDYWxsb3V0VmVydFtdID0KewoJeyAwIE1TT19JLCAwIH0sIHsgNCBNU09fSSwgMCB9LCB7IDQgTVNPX0ksIDMgTVNPX0kgfSwgeyA2IE1TT19JLCAzIE1TT19JIH0sCgl7IDYgTVNPX0ksIDEgTVNPX0kgfSwgeyAyMTYwMCwgMTA4MDAgfSwgeyA2IE1TT19JLCA1IE1TT19JIH0sIHsgNiBNU09fSSwgNyBNU09fSSB9LAoJeyA0IE1TT19JLCA3IE1TT19JIH0sIHsgNCBNU09fSSwgMjE2MDAgfSwgeyAwIE1TT19JLCAyMTYwMCB9LCB7IDAgTVNPX0ksIDcgTVNPX0kgfSwKCXsgMiBNU09fSSwgNyBNU09fSSB9LCB7IDIgTVNPX0ksIDUgTVNPX0kgfSwgeyAwLCAxMDgwMCB9LCB7IDIgTVNPX0ksIDEgTVNPX0kgfSwKCXsgMiBNU09fSSwgMyBNU09fSSB9LCB7IDAgTVNPX0ksIDMgTVNPX0kgfQp9OwpzdGF0aWMgY29uc3Qgc2FsX3VJbnQxNiBtc29fc3B0TGVmdFJpZ2h0QXJyb3dDYWxsb3V0U2VnbVtdID0KewoJMHg0MDAwLCAweDAwMTEsIDB4NjAwMSwgMHg4MDAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSBtc29fc3B0TGVmdFJpZ2h0QXJyb3dDYWxsb3V0Q2FsY1tdID0KewoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAsIDAgfSB9LAoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0MlZhbHVlLCAwLCAwIH0gfSwKCXsgMHgyMDAwLCB7IERGRl9Qcm9wX2FkanVzdDNWYWx1ZSwgMCwgMCB9IH0sCgl7IDB4MjAwMCwgeyBERkZfUHJvcF9hZGp1c3Q0VmFsdWUsIDAsIDAgfSB9LAoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIDB4MDQwMCB9IH0sCgl7IDB4ODAwMCwgeyAyMTYwMCwgMCwgMHgwNDAxIH0gfSwKCXsgMHg4MDAwLCB7IDIxNjAwLCAwLCAweDA0MDIgfSB9LAoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIDB4MDQwMyB9IH0KfTsKc3RhdGljIGNvbnN0IHNhbF9JbnQzMiBtc29fc3B0TGVmdFJpZ2h0QXJyb3dDYWxsb3V0RGVmYXVsdFtdID0KewoJNCwgNTQwMCwgNTUwMCwgMjcwMCwgODEwMAp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyBtc29fc3B0TGVmdFJpZ2h0QXJyb3dDYWxsb3V0VGV4dFJlY3RbXSA9CnsKCXsgeyAwIE1TT19JLCAwIH0sIHsgNCBNU09fSSwgMjE2MDAgfSB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkhhbmRsZSBtc29fc3B0TGVmdFJpZ2h0QXJyb3dDYWxsb3V0SGFuZGxlW10gPQp7Cgl7CU1TREZGX0hBTkRMRV9GTEFHU19SQU5HRSB8IE1TREZGX0hBTkRMRV9GTEFHU19SQU5HRV9YX01JTl9JU19TUEVDSUFMLAoJCTB4MTAwLCAwLCAxMDgwMCwgMTA4MDAsIDB4MTAyLCAxMDgwMCwgTXg4MDAwMDAwMCwgMHg3ZmZmZmZmZiB9LAoJewlNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0UgfCBNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0VfWF9NQVhfSVNfU1BFQ0lBTCB8IE1TREZGX0hBTkRMRV9GTEFHU19SQU5HRV9ZX01JTl9JU19TUEVDSUFMLAoJCTB4MTAyLCAweDEwMywgMTA4MDAsIDEwODAwLCAwLCAweDEwMCwgMHgxMDEsIDEwODAwIH0sCgl7CU1TREZGX0hBTkRMRV9GTEFHU19SQU5HRSB8IE1TREZGX0hBTkRMRV9GTEFHU19SQU5HRV9ZX01BWF9JU19TUEVDSUFMLAoJCTAsIDB4MTAxLCAxMDgwMCwgMTA4MDAsIE14ODAwMDAwMDAsIDB4N2ZmZmZmZmYsIDAsIDB4MTAzIH0KfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29MZWZ0UmlnaHRBcnJvd0NhbGxvdXQgPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdExlZnRSaWdodEFycm93Q2FsbG91dFZlcnQsIHNpemVvZiggbXNvX3NwdExlZnRSaWdodEFycm93Q2FsbG91dFZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKHNhbF91SW50MTYqKW1zb19zcHRMZWZ0UmlnaHRBcnJvd0NhbGxvdXRTZWdtLCBzaXplb2YoIG1zb19zcHRMZWZ0UmlnaHRBcnJvd0NhbGxvdXRTZWdtICkgPj4gMSwKCShTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSopbXNvX3NwdExlZnRSaWdodEFycm93Q2FsbG91dENhbGMsIHNpemVvZiggbXNvX3NwdExlZnRSaWdodEFycm93Q2FsbG91dENhbGMgKSAvIHNpemVvZiggU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgKSwKCShzYWxfSW50MzIqKW1zb19zcHRMZWZ0UmlnaHRBcnJvd0NhbGxvdXREZWZhdWx0LAoJKFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMqKW1zb19zcHRMZWZ0UmlnaHRBcnJvd0NhbGxvdXRUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0TGVmdFJpZ2h0QXJyb3dDYWxsb3V0VGV4dFJlY3QgKSAvIHNpemVvZiggU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyApLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCU5VTEwsIDAsCgkoU3Z4TVNEZmZIYW5kbGUqKW1zb19zcHRMZWZ0UmlnaHRBcnJvd0NhbGxvdXRIYW5kbGUsIHNpemVvZiggbXNvX3NwdExlZnRSaWdodEFycm93Q2FsbG91dEhhbmRsZSApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0VXBEb3duQXJyb3dDYWxsb3V0VmVydFtdID0KewoJeyAwLCAwIE1TT19JIH0sIHsgMCwgNCBNU09fSSB9LCB7IDMgTVNPX0ksIDQgTVNPX0kgfSwgeyAzIE1TT19JLCA2IE1TT19JIH0sCgl7IDEgTVNPX0ksIDYgTVNPX0kgfSwgeyAxMDgwMCwgMjE2MDAgfSwgeyA1IE1TT19JLCA2IE1TT19JIH0sIHsgNyBNU09fSSwgNiBNU09fSSB9LAoJeyA3IE1TT19JLCA0IE1TT19JIH0sIHsgMjE2MDAsIDQgTVNPX0kgfSwgeyAyMTYwMCwgMCBNU09fSSB9LCB7IDcgTVNPX0ksIDAgTVNPX0kgfSwKCXsgNyBNU09fSSwgMiBNU09fSSB9LCB7IDUgTVNPX0ksIDIgTVNPX0kgfSwgeyAxMDgwMCwgMCB9LCB7IDEgTVNPX0ksIDIgTVNPX0kgfSwKCXsgMyBNU09fSSwgMiBNU09fSSB9LCB7IDMgTVNPX0ksIDAgTVNPX0kgfQp9OwpzdGF0aWMgY29uc3Qgc2FsX3VJbnQxNiBtc29fc3B0VXBEb3duQXJyb3dDYWxsb3V0U2VnbVtdID0KewoJMHg0MDAwLCAweDAwMTEsIDB4NjAwMSwgMHg4MDAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSBtc29fc3B0VXBEb3duQXJyb3dDYWxsb3V0Q2FsY1tdID0KewoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAsIDAgfSB9LAoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0MlZhbHVlLCAwLCAwIH0gfSwKCXsgMHgyMDAwLCB7IERGRl9Qcm9wX2FkanVzdDNWYWx1ZSwgMCwgMCB9IH0sCgl7IDB4MjAwMCwgeyBERkZfUHJvcF9hZGp1c3Q0VmFsdWUsIDAsIDAgfSB9LAoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIDB4MDQwMCB9IH0sCgl7IDB4ODAwMCwgeyAyMTYwMCwgMCwgMHgwNDAxIH0gfSwKCXsgMHg4MDAwLCB7IDIxNjAwLCAwLCAweDA0MDIgfSB9LAoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIDB4MDQwMyB9IH0KfTsKc3RhdGljIGNvbnN0IHNhbF9JbnQzMiBtc29fc3B0VXBEb3duQXJyb3dDYWxsb3V0RGVmYXVsdFtdID0KewoJNCwgNTQwMCwgNTUwMCwgMjcwMCwgODEwMAp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyBtc29fc3B0VXBEb3duQXJyb3dDYWxsb3V0VGV4dFJlY3RbXSA9CnsKCXsgeyAwLCAwIE1TT19JIH0sIHsgMjE2MDAsIDQgTVNPX0kgfSB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkhhbmRsZSBtc29fc3B0VXBEb3duQXJyb3dDYWxsb3V0SGFuZGxlW10gPQp7Cgl7CU1TREZGX0hBTkRMRV9GTEFHU19SQU5HRSB8IE1TREZGX0hBTkRMRV9GTEFHU19SQU5HRV9ZX01JTl9JU19TUEVDSUFMLAoJCTAsIDB4MTAwLCAxMDgwMCwgMTA4MDAsIE14ODAwMDAwMDAsIDB4N2ZmZmZmZmYsIDB4MTAyLCAxMDgwMCB9LAoJewlNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0UgfCBNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0VfWF9NSU5fSVNfU1BFQ0lBTCB8IE1TREZGX0hBTkRMRV9GTEFHU19SQU5HRV9ZX01BWF9JU19TUEVDSUFMLAoJCTB4MTAzLCAweDEwMiwgMTA4MDAsIDEwODAwLCAweDEwMSwgMTA4MDAsIDAsIDB4MTAwIH0sCgl7CU1TREZGX0hBTkRMRV9GTEFHU19SQU5HRSB8IE1TREZGX0hBTkRMRV9GTEFHU19SQU5HRV9YX01BWF9JU19TUEVDSUFMLAoJCTB4MTAxLCAwLCAxMDgwMCwgMTA4MDAsIDAsIDB4MTAzLCBNeDgwMDAwMDAwLCAweDdmZmZmZmZmIH0KfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29VcERvd25BcnJvd0NhbGxvdXQgPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdFVwRG93bkFycm93Q2FsbG91dFZlcnQsIHNpemVvZiggbXNvX3NwdFVwRG93bkFycm93Q2FsbG91dFZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKHNhbF91SW50MTYqKW1zb19zcHRVcERvd25BcnJvd0NhbGxvdXRTZWdtLCBzaXplb2YoIG1zb19zcHRVcERvd25BcnJvd0NhbGxvdXRTZWdtICkgPj4gMSwKCShTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSopbXNvX3NwdFVwRG93bkFycm93Q2FsbG91dENhbGMsIHNpemVvZiggbXNvX3NwdFVwRG93bkFycm93Q2FsbG91dENhbGMgKSAvIHNpemVvZiggU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgKSwKCShzYWxfSW50MzIqKW1zb19zcHRVcERvd25BcnJvd0NhbGxvdXREZWZhdWx0LAoJKFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMqKW1zb19zcHRVcERvd25BcnJvd0NhbGxvdXRUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0VXBEb3duQXJyb3dDYWxsb3V0VGV4dFJlY3QgKSAvIHNpemVvZiggU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyApLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCU5VTEwsIDAsCgkoU3Z4TVNEZmZIYW5kbGUqKW1zb19zcHRVcERvd25BcnJvd0NhbGxvdXRIYW5kbGUsIHNpemVvZiggbXNvX3NwdFVwRG93bkFycm93Q2FsbG91dEhhbmRsZSApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0UXVhZEFycm93Q2FsbG91dFZlcnRbXSA9CnsKCXsgMCBNU09fSSwgMCBNU09fSSB9LCB7IDMgTVNPX0ksIDAgTVNPX0kgfSwgeyAzIE1TT19JLCAyIE1TT19JIH0sIHsgMSBNU09fSSwgMiBNU09fSSB9LAoJeyAxMDgwMCwgMCB9LCB7IDUgTVNPX0ksIDIgTVNPX0kgfSwgeyA3IE1TT19JLCAyIE1TT19JIH0sIHsgNyBNU09fSSwgMCBNU09fSSB9LAoJeyA0IE1TT19JLCAwIE1TT19JIH0sIHsgNCBNU09fSSwgMyBNU09fSSB9LCB7IDYgTVNPX0ksIDMgTVNPX0kgfSwgeyA2IE1TT19JLCAxIE1TT19JIH0sCgl7IDIxNjAwLCAxMDgwMCB9LCB7IDYgTVNPX0ksIDUgTVNPX0kgfSwgeyA2IE1TT19JLCA3IE1TT19JIH0sIHsgNCBNU09fSSwgNyBNU09fSSB9LAoJeyA0IE1TT19JLCA0IE1TT19JIH0sIHsgNyBNU09fSSwgNCBNU09fSSB9LCB7IDcgTVNPX0ksIDYgTVNPX0kgfSwgeyA1IE1TT19JLCA2IE1TT19JIH0sCgl7IDEwODAwLCAyMTYwMCB9LCB7IDEgTVNPX0ksIDYgTVNPX0kgfSwgeyAzIE1TT19JLCA2IE1TT19JIH0sIHsgMyBNU09fSSwgNCBNU09fSSB9LAoJeyAwIE1TT19JLCA0IE1TT19JIH0sIHsgMCBNU09fSSwgNyBNU09fSSB9LCB7IDIgTVNPX0ksIDcgTVNPX0kgfSwgeyAyIE1TT19JLCA1IE1TT19JIH0sCgl7IDAsIDEwODAwIH0sIHsgMiBNU09fSSwgMSBNU09fSSB9LCB7IDIgTVNPX0ksIDMgTVNPX0kgfSwgeyAwIE1TT19JLCAzIE1TT19JIH0KfTsKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvX3NwdFF1YWRBcnJvd0NhbGxvdXRTZWdtW10gPQp7CgkweDQwMDAsIDB4MDAxZiwgMHg2MDAxLCAweDgwMDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhIG1zb19zcHRRdWFkQXJyb3dDYWxsb3V0Q2FsY1tdID0KewoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAsIDAgfSB9LAoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0MlZhbHVlLCAwLCAwIH0gfSwKCXsgMHgyMDAwLCB7IERGRl9Qcm9wX2FkanVzdDNWYWx1ZSwgMCwgMCB9IH0sCgl7IDB4MjAwMCwgeyBERkZfUHJvcF9hZGp1c3Q0VmFsdWUsIDAsIDAgfSB9LAoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIDB4MDQwMCB9IH0sCgl7IDB4ODAwMCwgeyAyMTYwMCwgMCwgMHgwNDAxIH0gfSwKCXsgMHg4MDAwLCB7IDIxNjAwLCAwLCAweDA0MDIgfSB9LAoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIDB4MDQwMyB9IH0KfTsKc3RhdGljIGNvbnN0IHNhbF9JbnQzMiBtc29fc3B0UXVhZEFycm93Q2FsbG91dERlZmF1bHRbXSA9CnsKCTQsIDU0MDAsIDgxMDAsIDI3MDAsIDk0MDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgbXNvX3NwdFF1YWRBcnJvd0NhbGxvdXRUZXh0UmVjdFtdID0KewoJeyB7IDAgTVNPX0ksIDAgTVNPX0kgfSwgeyA0IE1TT19JLCA0IE1TT19JIH0gfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZIYW5kbGUgbXNvX3NwdFF1YWRBcnJvd0NhbGxvdXRIYW5kbGVbXSA9CnsKCXsJTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFIHwgTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFX1lfTUlOX0lTX1NQRUNJQUwgfCBNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0VfWV9NQVhfSVNfU1BFQ0lBTCwKCQkwLCAweDEwMCwgMTA4MDAsIDEwODAwLCBNeDgwMDAwMDAwLCAweDdmZmZmZmZmLCAweDEwMiwgMHgxMDEgfSwKCXsJTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFIHwgTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFX1hfTUlOX0lTX1NQRUNJQUwsCgkJMHgxMDEsIDAsIDEwODAwLCAxMDgwMCwgMHgxMDAsIDEwODAwLCBNeDgwMDAwMDAwLCAweDdmZmZmZmZmIH0sCgl7CU1TREZGX0hBTkRMRV9GTEFHU19SQU5HRSB8IE1TREZGX0hBTkRMRV9GTEFHU19SQU5HRV9YX01JTl9JU19TUEVDSUFMIHwgTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFX1lfTUFYX0lTX1NQRUNJQUwsCgkJMHgxMDMsIDB4MTAyLCAxMDgwMCwgMTA4MDAsIDB4MTAxLCAxMDgwMCwgMCwgMHgxMDAgfQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb1F1YWRBcnJvd0NhbGxvdXQgPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdFF1YWRBcnJvd0NhbGxvdXRWZXJ0LCBzaXplb2YoIG1zb19zcHRRdWFkQXJyb3dDYWxsb3V0VmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdFF1YWRBcnJvd0NhbGxvdXRTZWdtLCBzaXplb2YoIG1zb19zcHRRdWFkQXJyb3dDYWxsb3V0U2VnbSApID4+IDEsCgkoU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEqKW1zb19zcHRRdWFkQXJyb3dDYWxsb3V0Q2FsYywgc2l6ZW9mKCBtc29fc3B0UXVhZEFycm93Q2FsbG91dENhbGMgKSAvIHNpemVvZiggU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgKSwKCShzYWxfSW50MzIqKW1zb19zcHRRdWFkQXJyb3dDYWxsb3V0RGVmYXVsdCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0UXVhZEFycm93Q2FsbG91dFRleHRSZWN0LCBzaXplb2YoIG1zb19zcHRRdWFkQXJyb3dDYWxsb3V0VGV4dFJlY3QgKSAvIHNpemVvZiggU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyApLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCU5VTEwsIDAsCgkoU3Z4TVNEZmZIYW5kbGUqKW1zb19zcHRRdWFkQXJyb3dDYWxsb3V0SGFuZGxlLCBzaXplb2YoIG1zb19zcHRRdWFkQXJyb3dDYWxsb3V0SGFuZGxlICkgLyBzaXplb2YoIFN2eE1TRGZmSGFuZGxlICkKfTsKCnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRDaXJjdWxhckFycm93VmVydFtdID0KewoJeyAweDAzIE1TT19JLCAweDAzIE1TT19JIH0sCgl7IDB4MTQgTVNPX0ksIDB4MTQgTVNPX0kgfSwKCXsgMHgxMyBNU09fSSwgMHgxMiBNU09fSSB9LAoJeyAweDExIE1TT19JLCAweDEwIE1TT19JIH0sCgl7IDAsIDAgfSwgeyAyMTYwMCwgMjE2MDAgfSwKCXsgMHgwOSBNU09fSSwgMHgwOCBNU09fSSB9LAoJeyAweDBCIE1TT19JLCAweDBBIE1TT19JIH0sCgl7IDB4MTggTVNPX0ksIDB4MTcgTVNPX0kgfSwKCXsgMHgyRiBNU09fSSwgMHgyRSBNU09fSSB9LAoJeyAweDFEIE1TT19JLCAweDFDIE1TT19JIH0KfTsKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvX3NwdENpcmN1bGFyQXJyb3dTZWdtW10gPQp7CgkweGE0MDQsIDB4YTUwNCwgMHgwMDAzLCAweDYwMDEsIDB4ODAwMAp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgbXNvX3NwdENpcmN1bGFyQXJyb3dDYWxjW10gPQp7Cgl7IDB4MjAwMCwgeyAweDAxNDcsIDB4MDAwMCwgMHgwMDAwIH0gfSwKCXsgMHgyMDAwLCB7IDB4MDE0OCwgMHgwMDAwLCAweDAwMDAgfSB9LAoJeyAweDIwMDAsIHsgMHgwMTQ5LCAweDAwMDAsIDB4MDAwMCB9IH0sCgl7IDB4NDAwMCwgeyAweDJBMzAsIDB4MDE0OSwgMHgwMDAwIH0gfSwKCXsgMHg0MDA5LCB7IDB4MkEzMCwgMHgwMTQ3LCAweDAwMDAgfSB9LAoJeyAweDQwMEEsIHsgMHgyQTMwLCAweDAxNDcsIDB4MDAwMCB9IH0sCgl7IDB4NDAwOSwgeyAweDJBMzAsIDB4MDE0OCwgMHgwMDAwIH0gfSwKCXsgMHg0MDBBLCB7IDB4MkEzMCwgMHgwMTQ4LCAweDAwMDAgfSB9LAoJeyAweDIwMDAsIHsgMHgwNDA0LCAweDJBMzAsIDB4MDAwMCB9IH0sCgl7IDB4MjAwMCwgeyAweDA0MDUsIDB4MkEzMCwgMHgwMDAwIH0gfSwKCXsgMHgyMDAwLCB7IDB4MDQwNiwgMHgyQTMwLCAweDAwMDAgfSB9LAoJeyAweDIwMDAsIHsgMHgwNDA3LCAweDJBMzAsIDB4MDAwMCB9IH0sCgl7IDB4NjAwOSwgeyAweDA0MDMsIDB4MDE0NywgMHgwMDAwIH0gfSwKCXsgMHg2MDBBLCB7IDB4MDQwMywgMHgwMTQ3LCAweDAwMDAgfSB9LAoJeyAweDYwMDksIHsgMHgwNDAzLCAweDAxNDgsIDB4MDAwMCB9IH0sCgl7IDB4NjAwQSwgeyAweDA0MDMsIDB4MDE0OCwgMHgwMDAwIH0gfSwKCXsgMHgyMDAwLCB7IDB4MDQwQywgMHgyQTMwLCAweDAwMDAgfSB9LAoJeyAweDIwMDAsIHsgMHgwNDBELCAweDJBMzAsIDB4MDAwMCB9IH0sCgl7IDB4MjAwMCwgeyAweDA0MEUsIDB4MkEzMCwgMHgwMDAwIH0gfSwKCXsgMHgyMDAwLCB7IDB4MDQwRiwgMHgyQTMwLCAweDAwMDAgfSB9LAoJeyAweDgwMDAsIHsgMHg1NDYwLCAweDAwMDAsIDB4MDQwMyB9IH0sCgl7IDB4NDAwOSwgeyAweDM0QkMsIDB4MDE0OCwgMHgwMDAwIH0gfSwKCXsgMHg0MDBBLCB7IDB4MzRCQywgMHgwMTQ4LCAweDAwMDAgfSB9LAoJeyAweDIwMDAsIHsgMHgwNDE1LCAweDJBMzAsIDB4MDAwMCB9IH0sCgl7IDB4MjAwMCwgeyAweDA0MTYsIDB4MkEzMCwgMHgwMDAwIH0gfSwKCXsgMHgyMDAwLCB7IDB4MDE0OSwgMHgwMDAwLCAweDBBOEMgfSB9LAoJeyAweDYwMDksIHsgMHgwNDE5LCAweDAxNDgsIDB4MDAwMCB9IH0sCgl7IDB4NjAwQSwgeyAweDA0MTksIDB4MDE0OCwgMHgwMDAwIH0gfSwKCXsgMHgyMDAwLCB7IDB4MDQxQSwgMHgyQTMwLCAweDAwMDAgfSB9LAoJeyAweDIwMDAsIHsgMHgwNDFCLCAweDJBMzAsIDB4MDAwMCB9IH0sCgl7IDB4QTAwMCwgeyAweDA0MUQsIDB4MDAwMCwgMHgwNDE4IH0gfSwKCXsgMHhBMDAwLCB7IDB4MDQxRCwgMHgwMDAwLCAweDA0MTggfSB9LAoJeyAweDYwMDEsIHsgMHgwNDFFLCAweDA0MUYsIDB4MDAwMSB9IH0sCgl7IDB4QTAwMCwgeyAweDA0MUMsIDB4MDAwMCwgMHgwNDE3IH0gfSwKCXsgMHhBMDAwLCB7IDB4MDQxQywgMHgwMDAwLCAweDA0MTcgfSB9LAoJeyAweDYwMDEsIHsgMHgwNDIxLCAweDA0MjIsIDB4MDAwMSB9IH0sCgl7IDB4NjAwMCwgeyAweDA0MjAsIDB4MDQyMywgMHgwMDAwIH0gfSwKCXsgMHgyMDBELCB7IDB4MDQyNCwgMHgwMDAwLCAweDAwMDAgfSB9LAoJeyAweDIwMEUsIHsgMHgwMTQ4LCAweDAwMkQsIDB4MDAwMCB9IH0sCgl7IDB4NjAwOSwgeyAweDA0MjUsIDB4MDQyNiwgMHgwMDAwIH0gfSwKCXsgMHgyMDBFLCB7IDB4MDE0OCwgMHgwMDJELCAweDAwMDAgfSB9LAoJeyAweDYwMEEsIHsgMHgwNDI1LCAweDA0MjgsIDB4MDAwMCB9IH0sCgl7IDB4MDAwRSwgeyAweDAwMDAsIDB4MDAyRCwgMHgwMDAwIH0gfSwKCXsgMHg2MDA5LCB7IDB4MDQyNywgMHgwNDJBLCAweDAwMDAgfSB9LAoJeyAweDAwMEUsIHsgMHgwMDAwLCAweDAwMkQsIDB4MDAwMCB9IH0sCgl7IDB4NjAwOSwgeyAweDA0MjksIDB4MDQyQywgMHgwMDAwIH0gfSwKCXsgMHg2MDAwLCB7IDB4MDQxQywgMHgwNDJCLCAweDAwMDAgfSB9LAoJeyAweDYwMDAsIHsgMHgwNDFELCAweDA0MkQsIDB4MDAwMCB9IH0KfTsKc3RhdGljIGNvbnN0IHNhbF9JbnQzMiBtc29fc3B0Q2lyY3VsYXJBcnJvd0RlZmF1bHRbXSA9CnsKCTMsIDE4MCwgMCwgNTUwMAp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyBtc29fc3B0Q2lyY3VsYXJBcnJvd1RleHRSZWN0W10gPQkvLyB0b2RvCnsKCXsgeyAwLCAwIH0sIHsgMjE2MDAsIDIxNjAwIH0gfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZIYW5kbGUgbXNvX3NwdENpcmN1bGFyQXJyb3dIYW5kbGVbXSA9CnsKCXsJTVNERkZfSEFORExFX0ZMQUdTX1BPTEFSIHwgTVNERkZfSEFORExFX0ZMQUdTX1JBRElVU19SQU5HRSwKCQkxMDgwMCwgMHgxMDAsIDEwODAwLCAxMDgwMCwgMTA4MDAsIDEwODAwLCAtMHgwMGI0MDAwMCwgKzB4MDBiNDAwMDAgfSwKCXsJTVNERkZfSEFORExFX0ZMQUdTX1BPTEFSIHwgTVNERkZfSEFORExFX0ZMQUdTX1JBRElVU19SQU5HRSwKCQkweDEwMiwgMHgxMDEsIDEwODAwLCAxMDgwMCwgMCwgMTA4MDAsIC0weDAwYjQwMDAwLCArMHgwMGI0MDAwMCB9Cn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvQ2lyY3VsYXJBcnJvdyA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0Q2lyY3VsYXJBcnJvd1ZlcnQsIHNpemVvZiggbXNvX3NwdENpcmN1bGFyQXJyb3dWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0Q2lyY3VsYXJBcnJvd1NlZ20sIHNpemVvZiggbXNvX3NwdENpcmN1bGFyQXJyb3dTZWdtICkgPj4gMSwKCShTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSopbXNvX3NwdENpcmN1bGFyQXJyb3dDYWxjLCBzaXplb2YoIG1zb19zcHRDaXJjdWxhckFycm93Q2FsYyApIC8gc2l6ZW9mKCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSApLAoJKHNhbF9JbnQzMiopbXNvX3NwdENpcmN1bGFyQXJyb3dEZWZhdWx0LAoJKFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMqKW1zb19zcHRDaXJjdWxhckFycm93VGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdENpcmN1bGFyQXJyb3dUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJTlVMTCwgMCwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdENpcmN1bGFyQXJyb3dIYW5kbGUsIHNpemVvZiggbXNvX3NwdENpcmN1bGFyQXJyb3dIYW5kbGUgKSAvIHNpemVvZiggU3Z4TVNEZmZIYW5kbGUgKQkJLy8gaGFuZGxlcwp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdEN1YmVWZXJ0W10gPQp7Cgl7IDAsIDEyIE1TT19JIH0sIHsgMCwgMSBNU09fSSB9LCB7IDIgTVNPX0ksIDAgfSwgeyAxMSBNU09fSSwgMCB9LCB7IDExIE1TT19JLCAzIE1TT19JIH0sIHsgNCBNU09fSSwgMTIgTVNPX0kgfSwKCXsgMCwgMSBNU09fSSB9LCB7IDIgTVNPX0ksIDAgfSwJeyAxMSBNU09fSSwgMCB9LCB7IDQgTVNPX0ksIDEgTVNPX0kgfSwKCXsgNCBNU09fSSwgMTIgTVNPX0kgIH0sIHsgNCBNU09fSSwgMSBNU09fSSB9LAl7IDExIE1TT19JLCAwIH0sIHsgMTEgTVNPX0ksIDMgTVNPX0kgfQp9OwpzdGF0aWMgY29uc3Qgc2FsX3VJbnQxNiBtc29fc3B0Q3ViZVNlZ21bXSA9CnsKCTB4NDAwMCwgMHgwMDA1LCAweDYwMDEsIDB4ODAwMCwKCTB4NDAwMCwgMHgwMDAzLCAweDYwMDEsIDB4ODAwMCwKCTB4NDAwMCwgMHgwMDAzLCAweDYwMDEsIDB4ODAwMAp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgbXNvX3NwdEN1YmVDYWxjW10gPQp7Cgl7IDB4MjAwMCwgeyBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMCwgMCB9IH0sCgl7IDB4NjAwMCwgeyBERkZfUHJvcF9nZW9Ub3AsIDB4NDAwLCAwIH0gfSwKCXsgMHg2MDAwLCB7IERGRl9Qcm9wX2dlb0xlZnQsIDB4NDAwLCAwIH0gfSwKCXsgMHhhMDAwLCB7IERGRl9Qcm9wX2dlb0JvdHRvbSwgMCwgMHg0MDAgfSB9LAoJeyAweGEwMDAsIHsgREZGX1Byb3BfZ2VvUmlnaHQsIDAsIDB4NDAwIH0gfSwKCXsgMHhhMDAwLCB7IERGRl9Qcm9wX2dlb1JpZ2h0LCAwLCAweDQwMiB9IH0sCS8vIDUKCXsgMHgyMDAxLCB7IDB4NDA1LCAxLCAyIH0gfSwJCQkJCS8vIDYKCXsgMHg2MDAwLCB7IDB4NDAyLCAweDQwNiwgMCB9IH0sCQkJCS8vIDcKCXsgMHhhMDAwLCB7IERGRl9Qcm9wX2dlb0JvdHRvbSwgMCwgMHg0MDEgfSB9LAkvLyA4Cgl7IDB4MjAwMSwgeyAweDQwOCwgMSwgMiB9IH0sCQkJCQkvLyA5Cgl7IDB4NjAwMCwgeyAweDQwMSwgMHg0MDksIDAgfSB9LAkJCQkvLyAxMAoJeyAweDIwMDAsIHsgREZGX1Byb3BfZ2VvUmlnaHQsIDAsIDAgfSB9LAkJLy8gMTEKCXsgMHgyMDAwLCB7IERGRl9Qcm9wX2dlb0JvdHRvbSwgMCwgMCB9IH0JCS8vIDEyCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzIG1zb19zcHRDdWJlVGV4dFJlY3RbXSA9CnsKCXsgeyAwLCAxIE1TT19JIH0sIHsgNCBNU09fSSwgMTIgTVNPX0kgfSB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkhhbmRsZSBtc29fc3B0Q3ViZUhhbmRsZVtdID0KewoJewlNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0UgfCBNU0RGRl9IQU5ETEVfRkxBR1NfU1dJVENIRUQsCgkJMCwgMHgxMDAsIDEwODAwLCAxMDgwMCwgTXg4MDAwMDAwMCwgMHg3ZmZmZmZmZiwgMCwgMjE2MDAgfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0Q3ViZUdsdWVQb2ludHNbXSA9CnsKCXsgNyBNU09fSSwgMCB9LCB7IDYgTVNPX0ksIDEgTVNPX0kgfSwgeyAwLCAxMCBNU09fSSB9LCB7IDYgTVNPX0ksIDIxNjAwIH0sIHsgNCBNU09fSSwgMTAgTVNPX0kgfSwgeyAyMTYwMCwgOSBNU09fSSB9Cn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvQ3ViZSA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0Q3ViZVZlcnQsIHNpemVvZiggbXNvX3NwdEN1YmVWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0Q3ViZVNlZ20sIHNpemVvZiggbXNvX3NwdEN1YmVTZWdtICkgPj4gMSwKCShTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSopbXNvX3NwdEN1YmVDYWxjLCBzaXplb2YoIG1zb19zcHRDdWJlQ2FsYyApIC8gc2l6ZW9mKCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSApLAoJKHNhbF9JbnQzMiopbXNvX3NwdERlZmF1bHQ1NDAwLAoJKFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMqKW1zb19zcHRDdWJlVGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdEN1YmVUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCgkxMDgwMCwgMTA4MDAsCgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdEN1YmVHbHVlUG9pbnRzLCBzaXplb2YoIG1zb19zcHRDdWJlR2x1ZVBvaW50cyApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoU3Z4TVNEZmZIYW5kbGUqKW1zb19zcHRDdWJlSGFuZGxlLCBzaXplb2YoIG1zb19zcHRDdWJlSGFuZGxlICkgLyBzaXplb2YoIFN2eE1TRGZmSGFuZGxlICkKfTsKCnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRCZXZlbFZlcnRbXSA9CnsKCXsgMCwgMCB9LCB7IDIxNjAwLCAwIH0sIHsgMjE2MDAsIDIxNjAwIH0sIHsgMCwgMjE2MDAgfSwKCXsgMCwgMCB9LCB7IDIxNjAwLCAwIH0sIHsgMSBNU09fSSwgMCBNU09fSSB9LCB7IDAgTVNPX0ksIDAgTVNPX0kgfSwKCXsgMjE2MDAsIDAgfSwgeyAyMTYwMCwgMjE2MDAgfSwgeyAxIE1TT19JLCAyIE1TT19JIH0sIHsgMSBNU09fSSwgMCBNU09fSSB9LAoJeyAyMTYwMCwgMjE2MDAgfSwgeyAwLCAyMTYwMCB9LCB7IDAgTVNPX0ksIDIgTVNPX0kgfSwgeyAxIE1TT19JLCAyIE1TT19JIH0sCgl7IDAsIDIxNjAwIH0sIHsgMCwgMCB9LCB7IDAgTVNPX0ksIDAgTVNPX0kgfSwgeyAwIE1TT19JLCAyIE1TT19JIH0KfTsKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvX3NwdEJldmVsU2VnbVtdID0KewoJMHg0MDAwLCAweDAwMDMsIDB4NjAwMSwgMHg4MDAwLAoJMHg0MDAwLCAweDAwMDMsIDB4NjAwMSwgMHg4MDAwLAoJMHg0MDAwLCAweDAwMDMsIDB4NjAwMSwgMHg4MDAwLAoJMHg0MDAwLCAweDAwMDMsIDB4NjAwMSwgMHg4MDAwLAoJMHg0MDAwLCAweDAwMDMsIDB4NjAwMSwgMHg4MDAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSBtc29fc3B0QmV2ZWxDYWxjW10gPQp7Cgl7IDB4MjAwMSwgeyBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMjE1OTksIDIxNjAwIH0gfSwKCXsgMHhhMDAwLCB7IERGRl9Qcm9wX2dlb1JpZ2h0LCAwLCAweDQwMCB9IH0sCgl7IDB4YTAwMCwgeyBERkZfUHJvcF9nZW9Cb3R0b20sIDAsIDB4NDAwIH0gfQp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgbXNvX3NwdEJldmVsVGV4dFJlY3RbXSA9CnsKCXsgeyAwIE1TT19JLCAwIE1TT19JIH0sIHsgMSBNU09fSSwgMiBNU09fSSB9IH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmSGFuZGxlIG1zb19zcHRCZXZlbEhhbmRsZVtdID0KewoJewlNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0UgfCBNU0RGRl9IQU5ETEVfRkxBR1NfU1dJVENIRUQsCgkJMHgxMDAsIDAsIDEwODAwLCAxMDgwMCwgMCwgMTA4MDAsIE14ODAwMDAwMDAsIDB4N2ZmZmZmZmYgfQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb0JldmVsID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRCZXZlbFZlcnQsIHNpemVvZiggbXNvX3NwdEJldmVsVmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdEJldmVsU2VnbSwgc2l6ZW9mKCBtc29fc3B0QmV2ZWxTZWdtICkgPj4gMSwKCShTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSopbXNvX3NwdEJldmVsQ2FsYywgc2l6ZW9mKCBtc29fc3B0QmV2ZWxDYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0RGVmYXVsdDI3MDAsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdEJldmVsVGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdEJldmVsVGV4dFJlY3QgKSAvIHNpemVvZiggU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyApLAoJMjE2MDAsIDIxNjAwLAoJMTA4MDAsIDEwODAwLAoJTlVMTCwgMCwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdEJldmVsSGFuZGxlLCBzaXplb2YoIG1zb19zcHRCZXZlbEhhbmRsZSApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0Rm9sZGVkQ29ybmVyVmVydFtdID0JLy8gYWRqdXN0bWVudDEgOiB4IDEwODAwIC0gMjE2MDAKewoJeyAwLCAwIH0sIHsgMjE2MDAsIDAgfSwgeyAyMTYwMCwgMCBNU09fSSB9LCB7IDAgTVNPX0ksIDIxNjAwIH0sCgl7IDAsIDIxNjAwIH0sIHsgMCBNU09fSSwgMjE2MDAgfSwgeyAzIE1TT19JLCAwIE1TT19JIH0sIHsgOCBNU09fSSwgOSBNU09fSSB9LAoJeyAxMCBNU09fSSwgMTEgTVNPX0kgfSwgeyAyMTYwMCwgMCBNU09fSSB9Cn07CnN0YXRpYyBjb25zdCBzYWxfdUludDE2IG1zb19zcHRGb2xkZWRDb3JuZXJTZWdtW10gPQp7CgkweDQwMDAsIDB4MDAwNCwgMHg2MDAxLCAweDgwMDAsCgkweDQwMDAsIDB4MDAwMSwgMHgyMDAxLCAweDYwMDEsIDB4ODAwMAp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgbXNvX3NwdEZvbGRlZENvcm5lckNhbGNbXSA9CnsKCXsgMHgyMDAwLCB7IERGRl9Qcm9wX2FkanVzdFZhbHVlLCAwLCAwIH0gfSwKCXsgMHg4MDAwLCB7IDIxNjAwLCAwLCAweDQwMCB9IH0sCgl7IDB4MjAwMSwgeyAweDA0MDEsIDgwMDAsIDEwODAwIH0gfSwKCXsgMHg4MDAwLCB7IDIxNjAwLCAwLCAweDA0MDIgfSB9LAoJeyAweDIwMDEsIHsgMHgwNDAxLCAxLCAyIH0gfSwKCXsgMHgyMDAxLCB7IDB4MDQwMSwgMSwgNCB9IH0sCgl7IDB4MjAwMSwgeyAweDA0MDEsIDEsIDcgfSB9LAoJeyAweDIwMDEsIHsgMHgwNDAxLCAxLCAxNiB9IH0sCgl7IDB4NjAwMCwgeyAweDA0MDMsIDB4NDA1LCAwIH0gfSwKCXsgMHg2MDAwLCB7IDB4MDQwMCwgMHg0MDYsIDAgfSB9LAoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIDB4NDA0IH0gfSwKCXsgMHg2MDAwLCB7IDB4NDAwLCAweDQwNywgMCB9IH0KfTsKc3RhdGljIGNvbnN0IHNhbF9JbnQzMiBtc29fc3B0Rm9sZGVkQ29ybmVyRGVmYXVsdFtdID0KewoJMSwgMTg5MDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgbXNvX3NwdEZvbGRlZENvcm5lclRleHRSZWN0W10gPQp7Cgl7IHsgMCwgMCB9LCB7IDIxNjAwLCAxMSBNU09fSSB9IH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmSGFuZGxlIG1zb19zcHRGb2xkZWRDb3JuZXJIYW5kbGVbXSA9CnsKCXsJTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFLAoJCTB4MTAwLCAxLCAxMDgwMCwgMTA4MDAsIDEwODAwLCAyMTYwMCwgTXg4MDAwMDAwMCwgMHg3ZmZmZmZmZiB9Cn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvRm9sZGVkQ29ybmVyID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRGb2xkZWRDb3JuZXJWZXJ0LCBzaXplb2YoIG1zb19zcHRGb2xkZWRDb3JuZXJWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0Rm9sZGVkQ29ybmVyU2VnbSwgc2l6ZW9mKCBtc29fc3B0Rm9sZGVkQ29ybmVyU2VnbSApID4+IDEsCgkoU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEqKW1zb19zcHRGb2xkZWRDb3JuZXJDYWxjLCBzaXplb2YoIG1zb19zcHRGb2xkZWRDb3JuZXJDYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0Rm9sZGVkQ29ybmVyRGVmYXVsdCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0Rm9sZGVkQ29ybmVyVGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdEZvbGRlZENvcm5lclRleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTIxNjAwLCAyMTYwMCwKCU14ODAwMDAwMDAsIE14ODAwMDAwMDAsCgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdFN0YW5kYXJkR2x1ZVBvaW50cywgc2l6ZW9mKCBtc29fc3B0U3RhbmRhcmRHbHVlUG9pbnRzICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdEZvbGRlZENvcm5lckhhbmRsZSwgc2l6ZW9mKCBtc29fc3B0Rm9sZGVkQ29ybmVySGFuZGxlICkgLyBzaXplb2YoIFN2eE1TRGZmSGFuZGxlICkKfTsKCnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRBY3Rpb25CdXR0b25CbGFua1ZlcnRbXSA9CnsKCXsgMCwgMCB9LCB7IDIxNjAwLCAwIH0sIHsgMjE2MDAsIDIxNjAwIH0sIHsgMCwgMjE2MDAgfSwKCXsgMCwgMCB9LCB7IDIxNjAwLCAwIH0sIHsgMSBNU09fSSwgMCBNU09fSSB9LCB7IDAgTVNPX0ksIDAgTVNPX0kgfSwKCXsgMjE2MDAsIDAgfSwgeyAyMTYwMCwgMjE2MDAgfSwgeyAxIE1TT19JLCAyIE1TT19JIH0sIHsgMSBNU09fSSwgMCBNU09fSSB9LAoJeyAyMTYwMCwgMjE2MDAgfSwgeyAwLCAyMTYwMCB9LAl7IDAgTVNPX0ksIDIgTVNPX0kgfSwgeyAxIE1TT19JLCAyIE1TT19JIH0sCgl7IDAsIDIxNjAwIH0sIHsgMCwgMCB9LCB7IDAgTVNPX0ksIDAgTVNPX0kgfSwgeyAwIE1TT19JLCAyIE1TT19JIH0KfTsKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvX3NwdEFjdGlvbkJ1dHRvbkJsYW5rU2VnbVtdID0KewoJMHg0MDAwLCAweDAwMDMsIDB4NjAwMSwgMHg4MDAwLAoJMHg0MDAwLCAweDAwMDMsIDB4NjAwMSwgMHg4MDAwLAoJMHg0MDAwLCAweDAwMDMsIDB4NjAwMSwgMHg4MDAwLAoJMHg0MDAwLCAweDAwMDMsIDB4NjAwMSwgMHg4MDAwLAoJMHg0MDAwLCAweDAwMDMsIDB4NjAwMSwgMHg4MDAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSBtc29fc3B0QWN0aW9uQnV0dG9uQmxhbmtDYWxjW10gPQp7Cgl7IDB4MjAwMSwgeyBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMjE1OTksIDIxNjAwIH0gfSwKCXsgMHhhMDAwLCB7IERGRl9Qcm9wX2dlb1JpZ2h0LCAwLCAweDQwMCB9IH0sCgl7IDB4YTAwMCwgeyBERkZfUHJvcF9nZW9Cb3R0b20sIDAsIDB4NDAwIH0gfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyBtc29fc3B0QWN0aW9uQnV0dG9uQmxhbmtUZXh0UmVjdFtdID0KewoJeyB7IDAgTVNPX0ksIDAgTVNPX0kgfSwgeyAxIE1TT19JLCAyIE1TT19JIH0gfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZIYW5kbGUgbXNvX3NwdEJ1dHRvbkhhbmRsZVtdID0KewoJewlNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0UgfCBNU0RGRl9IQU5ETEVfRkxBR1NfU1dJVENIRUQsCgkJMHgxMDAsIDAsIDEwODAwLCAxMDgwMCwgMCwgNTQwMCwgTXg4MDAwMDAwMCwgMHg3ZmZmZmZmZiB9Cn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvQWN0aW9uQnV0dG9uQmxhbmsgPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdEFjdGlvbkJ1dHRvbkJsYW5rVmVydCwgc2l6ZW9mKCBtc29fc3B0QWN0aW9uQnV0dG9uQmxhbmtWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0QWN0aW9uQnV0dG9uQmxhbmtTZWdtLCBzaXplb2YoIG1zb19zcHRBY3Rpb25CdXR0b25CbGFua1NlZ20gKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0QWN0aW9uQnV0dG9uQmxhbmtDYWxjLCBzaXplb2YoIG1zb19zcHRBY3Rpb25CdXR0b25CbGFua0NhbGMgKSAvIHNpemVvZiggU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgKSwKCShzYWxfSW50MzIqKW1zb19zcHREZWZhdWx0MTQwMCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0QWN0aW9uQnV0dG9uQmxhbmtUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0QWN0aW9uQnV0dG9uQmxhbmtUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCgkxMDgwMCwgMTA4MDAsCglOVUxMLCAwLAoJKFN2eE1TRGZmSGFuZGxlKiltc29fc3B0QnV0dG9uSGFuZGxlLCBzaXplb2YoIG1zb19zcHRCdXR0b25IYW5kbGUgKSAvIHNpemVvZiggU3Z4TVNEZmZIYW5kbGUgKQp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgbXNvX3NwdEFjdGlvbkJ1dHRvblRleHRSZWN0W10gPQp7Cgl7IHsgMSBNU09fSSwgMiBNU09fSSB9LCB7IDMgTVNPX0ksIDQgTVNPX0kgfSB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRBY3Rpb25CdXR0b25Ib21lVmVydFtdID0KewoJeyAwLCAwIH0sIHsgMjE2MDAsIDAgfSwgeyAyMTYwMCwgMjE2MDAgfSwgeyAwLCAyMTYwMCB9LAoJeyAwLCAwIH0sIHsgMjE2MDAsIDAgfSwgeyAzIE1TT19JLCAyIE1TT19JIH0sIHsgMSBNU09fSSwgMiBNU09fSSB9LAoJeyAyMTYwMCwgMCB9LCB7IDIxNjAwLCAyMTYwMCB9LCB7IDMgTVNPX0ksIDQgTVNPX0kgfSwgeyAzIE1TT19JLCAyIE1TT19JIH0sCgl7IDIxNjAwLCAyMTYwMCB9LCB7IDAsIDIxNjAwIH0sIHsgMSBNU09fSSwgNCBNU09fSSB9LCB7IDMgTVNPX0ksIDQgTVNPX0kgfSwKCXsgMCwgMjE2MDAgfSwgeyAwLCAwIH0sIHsgMSBNU09fSSwgMiBNU09fSSB9LCB7IDEgTVNPX0ksIDQgTVNPX0kgfSwKCgl7IDcgTVNPX0ksIDB4YSBNU09fSSB9LCB7IDB4YyBNU09fSSwgMHhlIE1TT19JIH0sIHsgMHhjIE1TT19JLCAweDEwIE1TT19JIH0sIHsgMHgxMiBNU09fSSwgMHgxMCBNU09fSSB9LAoJeyAweDEyIE1TT19JLCAweDE0IE1TT19JIH0sIHsgMHgxNiBNU09fSSwgOCBNU09fSSB9LCB7IDB4MTggTVNPX0ksIDggTVNPX0kgfSwgeyAweDE4IE1TT19JLCAweDFhIE1TT19JIH0sCgl7IDB4MWMgTVNPX0ksIDB4MWEgTVNPX0kgfSwJeyAweDFjIE1TT19JLCA4IE1TT19JIH0sIHsgMHgxZSBNU09fSSwgOCBNU09fSSB9LAoKCXsgMHhjIE1TT19JLCAweGUgTVNPX0kgfSwgeyAweGMgTVNPX0ksIDB4MTAgTVNPX0kgfSwgeyAweDEyIE1TT19JLCAweDEwIE1TT19JIH0seyAweDEyIE1TT19JLCAweDE0IE1TT19JIH0sCgoJeyAweDIwIE1TT19JLCAweDI0IE1TT19JIH0sIHsgMHgyMiBNU09fSSwgMHgyNCBNU09fSSB9LCB7IDB4MjIgTVNPX0ksIDB4MWEgTVNPX0kgfSwgeyAweDE4IE1TT19JLCAweDFhIE1TT19JIH0sCgl7IDB4MTggTVNPX0ksIDggTVNPX0kgfSwgeyAweDFjIE1TT19JLCA4IE1TT19JIH0sIHsgMHgxYyBNU09fSSwgMHgxYSBNU09fSSB9LCB7IDB4MjAgTVNPX0ksIDB4MWEgTVNPX0kgfQoKfTsKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvX3NwdEFjdGlvbkJ1dHRvbkhvbWVTZWdtW10gPQp7CgkweDQwMDAsIDB4MDAwMywgMHg2MDAxLCAweDgwMDAsCgkweDQwMDAsIDB4MDAwMywgMHg2MDAxLCAweDgwMDAsCgkweDQwMDAsIDB4MDAwMywgMHg2MDAxLCAweDgwMDAsCgkweDQwMDAsIDB4MDAwMywgMHg2MDAxLCAweDgwMDAsCgkweDQwMDAsIDB4MDAwMywgMHg2MDAxLCAweDgwMDAsCgkweDQwMDAsIDB4MDAwYSwgMHg2MDAxLCAweDgwMDAsCgkweDQwMDAsIDB4MDAwMywgMHg2MDAxLCAweDgwMDAsCgkweDQwMDAsIDB4MDAwNywgMHg2MDAxLCAweDgwMDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhIG1zb19zcHRBY3Rpb25CdXR0b25Ib21lQ2FsY1tdID0JLy8gYWRqIHZhbHVlIDAgLSA1NDAwCnsKCXsgMHgyMDAwLCB7IERGRl9Qcm9wX2FkanVzdFZhbHVlLCAwLCAwIH0gfSwKCXsgMHg2MDAwLCB7IERGRl9Qcm9wX2dlb0xlZnQsIERGRl9Qcm9wX2FkanVzdFZhbHVlLCAwIH0gfSwKCXsgMHg2MDAwLCB7IERGRl9Qcm9wX2dlb1RvcCwgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAgfSB9LAoJeyAweGEwMDAsIHsgREZGX1Byb3BfZ2VvUmlnaHQsIDAsIERGRl9Qcm9wX2FkanVzdFZhbHVlIH0gfSwKCXsgMHhhMDAwLCB7IERGRl9Qcm9wX2dlb0JvdHRvbSwgMCwgREZGX1Byb3BfYWRqdXN0VmFsdWUgfSB9LAoJeyAweDgwMDAsIHsgMTA4MDAsIDAsIERGRl9Qcm9wX2FkanVzdFZhbHVlIH0gfSwKCXsgMHgyMDAxLCB7IDB4MDQwNSwgMSwgMTA4MDAgfSB9LAkJCQkJCQkvLyBzY2FsaW5nCSA2Cgl7IDB4MjAwMSwgeyBERkZfUHJvcF9nZW9SaWdodCwgMSwgMiB9IH0sCS8vIGxyIGNlbnRlciA3Cgl7IDB4MjAwMSwgeyBERkZfUHJvcF9nZW9Cb3R0b20sIDEsIDIgfSB9LAkvLyB1bCBjZW50ZXIgOAoKCXsgMHg0MDAxLCB7IC04MDAwLCAweDA0MDYsIDEgfSB9LAkvLyA5Cgl7IDB4NjAwMCwgeyAweDA0MDksIDB4MDQwOCwgMCB9IH0sCS8vIGEKCXsgMHg0MDAxLCB7IDI5NjAsIDB4MDQwNiwgMSB9IH0sCS8vIGIKCXsgMHg2MDAwLCB7IDB4MDQwYiwgMHgwNDA3LCAwIH0gfSwJLy8gYwoJeyAweDQwMDEsIHsgLTUwMDAsIDB4MDQwNiwgMSB9IH0sCS8vIGQKCXsgMHg2MDAwLCB7IDB4MDQwZCwgMHgwNDA4LCAwIH0gfSwJLy8gZQoJeyAweDQwMDEsIHsgLTcwMDAsIDB4MDQwNiwgMSB9IH0sCS8vIGYKCXsgMHg2MDAwLCB7IDB4MDQwZiwgMHgwNDA4LCAwIH0gfSwJLy8gMTAKCXsgMHg0MDAxLCB7IDUwMDAsIDB4MDQwNiwgMSB9IH0sCS8vIDExCgl7IDB4NjAwMCwgeyAweDA0MTEsIDB4MDQwNywgMCB9IH0sCS8vIDEyCgl7IDB4NDAwMSwgeyAtMjk2MCwgMHgwNDA2LCAxIH0gfSwJLy8gMTMKCXsgMHg2MDAwLCB7IDB4MDQxMywgMHgwNDA4LCAwIH0gfSwJLy8gMTQKCXsgMHg0MDAxLCB7IDgwMDAsIDB4MDQwNiwgMSB9IH0sCS8vIDE1Cgl7IDB4NjAwMCwgeyAweDA0MTUsMHgwNDA3LCAwIH0gfSwJLy8gMTYKCXsgMHg0MDAxLCB7IDYxMDAsIDB4MDQwNiwgMSB9IH0sCS8vIDE3Cgl7IDB4NjAwMCwgeyAweDA0MTcsMHgwNDA3LCAwIH0gfSwJLy8gMTgKCXsgMHg0MDAxLCB7IDgyNjAsIDB4MDQwNiwgMSB9IH0sCS8vIDE5Cgl7IDB4NjAwMCwgeyAweDA0MTksIDB4MDQwOCwgMCB9IH0sCS8vIDFhCgl7IDB4NDAwMSwgeyAtNjEwMCwgMHgwNDA2LCAxIH0gfSwJLy8gMWIKCXsgMHg2MDAwLCB7IDB4MDQxYiwgMHgwNDA3LCAwIH0gfSwJLy8gMWMKCXsgMHg0MDAxLCB7IC04MDAwLCAweDA0MDYsIDEgfSB9LAkvLyAxZAoJeyAweDYwMDAsIHsgMHgwNDFkLCAweDA0MDcsIDAgfSB9LAkvLyAxZQoJeyAweDQwMDEsIHsgLTEwNjAsIDB4MDQwNiwgMSB9IH0sCS8vIDFmCgl7IDB4NjAwMCwgeyAweDA0MWYsIDB4MDQwNywgMCB9IH0sCS8vIDIwCgl7IDB4NDAwMSwgeyAxMDYwLCAweDA0MDYsIDEgfSB9LAkvLyAyMQoJeyAweDYwMDAsIHsgMHgwNDIxLCAweDA0MDcsIDAgfSB9LAkvLyAyMgoJeyAweDQwMDEsIHsgNDAyMCwgMHgwNDA2LCAxIH0gfSwJLy8gMjMKCXsgMHg2MDAwLCB7IDB4MDQyMywgMHgwNDA4LCAwIH0gfQkvLyAyNAoKfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29BY3Rpb25CdXR0b25Ib21lID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRBY3Rpb25CdXR0b25Ib21lVmVydCwgc2l6ZW9mKCBtc29fc3B0QWN0aW9uQnV0dG9uSG9tZVZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKHNhbF91SW50MTYqKW1zb19zcHRBY3Rpb25CdXR0b25Ib21lU2VnbSwgc2l6ZW9mKCBtc29fc3B0QWN0aW9uQnV0dG9uSG9tZVNlZ20gKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0QWN0aW9uQnV0dG9uSG9tZUNhbGMsIHNpemVvZiggbXNvX3NwdEFjdGlvbkJ1dHRvbkhvbWVDYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0RGVmYXVsdDE0MDAsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdEFjdGlvbkJ1dHRvblRleHRSZWN0LCBzaXplb2YoIG1zb19zcHRBY3Rpb25CdXR0b25UZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCgkxMDgwMCwgMTA4MDAsCglOVUxMLCAwLAoJKFN2eE1TRGZmSGFuZGxlKiltc29fc3B0QnV0dG9uSGFuZGxlLCBzaXplb2YoIG1zb19zcHRCdXR0b25IYW5kbGUgKSAvIHNpemVvZiggU3Z4TVNEZmZIYW5kbGUgKQp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdEFjdGlvbkJ1dHRvbkhlbHBWZXJ0W10gPQp7Cgl7IDAsIDAgfSwgeyAyMTYwMCwgMCB9LCB7IDIxNjAwLCAyMTYwMCB9LCB7IDAsIDIxNjAwIH0sCgl7IDAsIDAgfSwgeyAyMTYwMCwgMCB9LAl7IDMgTVNPX0ksIDIgTVNPX0kgfSwgeyAxIE1TT19JLCAyIE1TT19JIH0sCgl7IDIxNjAwLCAwIH0sIHsgMjE2MDAsIDIxNjAwIH0sIHsgMyBNU09fSSwgNCBNU09fSSB9LCB7IDMgTVNPX0ksIDIgTVNPX0kgfSwKCXsgMjE2MDAsIDIxNjAwIH0sIHsgMCwgMjE2MDAgfSwgeyAxIE1TT19JLCA0IE1TT19JIH0sIHsgMyBNU09fSSwgNCBNU09fSSB9LAoJeyAwLCAyMTYwMCB9LCB7IDAsIDAgfSwgeyAxIE1TT19JLCAyIE1TT19JIH0sIHsgMSBNU09fSSw0IE1TT19JIH0sCgl7IDcgTVNPX0ksIDB4YyBNU09fSSB9LCB7IDB4YSBNU09fSSwgMHgzZSBNU09fSSB9LCB7IDcgTVNPX0ksIDB4MTAgTVNPX0kgfSwgeyAweGUgTVNPX0ksIDB4M2UgTVNPX0kgfSwgeyA3IE1TT19JLCAweGMgTVNPX0kgfSwKCXsgMHgxMiBNU09fSSwgMHgxNCBNU09fSSB9LCB7IDB4MTIgTVNPX0ksIDB4MTYgTVNPX0kgfSwJCQkJCQkJCS8vIHBwCgl7IDB4MTIgTVNPX0ksIDB4MTggTVNPX0kgfSwJeyAweDFhIE1TT19JLCA4IE1TT19JIH0sIHsgMHgxYyBNU09fSSwgOCBNU09fSSB9LAkJLy8gY2NwCgl7IDB4MWUgTVNPX0ksIDggTVNPX0kgfSwgeyAweDIwIE1TT19JLCAweDIyIE1TT19JIH0sIHsgMHgyMCBNU09fSSwgMHgyNCBNU09fSSB9LAkvLyBjY3AKCXsgMHgyMCBNU09fSSwgMHgyNiBNU09fSSB9LCB7IDB4MjggTVNPX0ksIDB4MmEgTVNPX0kgfSwgeyA3IE1TT19JLCAweDJhIE1TT19JIH0sCS8vIGNjcAoJeyAweDJjIE1TT19JLCAweDJhIE1TT19JIH0sIHsgMHgyZSBNU09fSSwgMHgyNiBNU09fSSB9LCB7IDB4MmUgTVNPX0ksIDB4MjQgTVNPX0kgfSwJLy8gY2NwCgl7IDB4MzAgTVNPX0ksIDB4MjQgTVNPX0kgfSwgeyAweDMwIE1TT19JLCAweDMyIE1TT19JIH0sIHsgMHgzNCBNU09fSSwgMHgzNiBNU09fSSB9LAkvLyBjY3AKCXsgNyBNU09fSSwgMHgzNiBNU09fSSB9LAkJCQkJCQkJCQkJCQkJCS8vIHAKCXsgMHgxMiBNU09fSSwgMHgzNiBNU09fSSB9LCB7IDB4MWMgTVNPX0ksIDB4MzIgTVNPX0kgfSwgeyAweDFjIE1TT19JLCAweDI0IE1TT19JIH0sCS8vIGNjcAoJeyAweDFjIE1TT19JLCAweDM4IE1TT19JIH0sIHsgMHgzYSBNU09fSSwgMHgzYyBNU09fSSB9LCB7IDB4MTIgTVNPX0ksIDB4M2MgTVNPX0kgfSwJLy8gY2NwCgl7IDcgTVNPX0ksIDB4M2MgTVNPX0kgfSwgeyAweDM0IE1TT19JLCA4IE1TT19JIH0sIHsgMHgzNCBNU09fSSwgMHgxNiBNU09fSSB9LAkJLy8gY2NwCgl7IDB4MzQgTVNPX0ksIDB4MTQgTVNPX0kgfQp9OwpzdGF0aWMgY29uc3Qgc2FsX3VJbnQxNiBtc29fc3B0QWN0aW9uQnV0dG9uSGVscFNlZ21bXSA9CnsKCTB4NDAwMCwgMHgwMDAzLCAweDYwMDEsIDB4ODAwMCwKCTB4NDAwMCwgMHgwMDAzLCAweDYwMDEsIDB4ODAwMCwKCTB4NDAwMCwgMHgwMDAzLCAweDYwMDEsIDB4ODAwMCwKCTB4NDAwMCwgMHgwMDAzLCAweDYwMDEsIDB4ODAwMCwKCTB4NDAwMCwgMHgwMDAzLCAweDYwMDEsIDB4ODAwMCwKCTB4NDAwMCwgMHhhNzA0LCAweDYwMDAsIDB4ODAwMCwKCTB4NDAwMCwgMHgwMDAxLCAweDIwMDQsIDB4MDAwMSwgMHgyMDA0LCAweDAwMDEsIDB4NjAwMSwgMHg4MDAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSBtc29fc3B0QWN0aW9uQnV0dG9uSGVscENhbGNbXSA9CS8vIGFkaiB2YWx1ZSAwIC0gNTQwMAp7Cgl7IDB4MjAwMCwgeyBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMCwgMCB9IH0sCgl7IDB4NjAwMCwgeyBERkZfUHJvcF9nZW9MZWZ0LCBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMCB9IH0sCgl7IDB4NjAwMCwgeyBERkZfUHJvcF9nZW9Ub3AsIERGRl9Qcm9wX2FkanVzdFZhbHVlLCAwIH0gfSwKCXsgMHhhMDAwLCB7IERGRl9Qcm9wX2dlb1JpZ2h0LCAwLCBERkZfUHJvcF9hZGp1c3RWYWx1ZSB9IH0sCgl7IDB4YTAwMCwgeyBERkZfUHJvcF9nZW9Cb3R0b20sIDAsIERGRl9Qcm9wX2FkanVzdFZhbHVlIH0gfSwKCXsgMHg4MDAwLCB7IDEwODAwLCAwLCBERkZfUHJvcF9hZGp1c3RWYWx1ZSB9IH0sCgl7IDB4MjAwMSwgeyAweDA0MDUsIDEsIDEwODAwIH0gfSwJCQkvLyBzY2FsaW5nCSA2Cgl7IDB4MjAwMSwgeyBERkZfUHJvcF9nZW9SaWdodCwgMSwgMiB9IH0sCS8vIGxyIGNlbnRlciA3Cgl7IDB4MjAwMSwgeyBERkZfUHJvcF9nZW9Cb3R0b20sIDEsIDIgfSB9LAkvLyB1bCBjZW50ZXIgOAoKCXsgMHg0MDAxLCB7IC0xNjkwLCAweDA0MDYsIDEgfSB9LAkvLyA5Cgl7IDB4NjAwMCwgeyAweDA0MDksIDB4MDQwNywgMCB9IH0sCS8vIGEKCXsgMHg0MDAxLCB7IDQ2MDAsIDB4MDQwNiwgMSB9IH0sCS8vIGIKCXsgMHg2MDAwLCB7IDB4MDQwYiwgMHgwNDA4LCAwIH0gfSwJLy8gYwoJeyAweDQwMDEsIHsgMTY5MCwgMHgwNDA2LCAxIH0gfSwJLy8gZAoJeyAweDYwMDAsIHsgMHgwNDBkLCAweDA0MDcsIDAgfSB9LAkvLyBlCgl7IDB4NDAwMSwgeyA3OTgwLCAweDA0MDYsIDEgfSB9LAkvLyBmCgl7IDB4NjAwMCwgeyAweDA0MGYsIDB4MDQwOCwgMCB9IH0sCS8vIDEwCgl7IDB4NDAwMSwgeyAxMjcwLCAweDA0MDYsIDEgfSB9LAkvLyAxMQoJeyAweDYwMDAsIHsgMHgwNDExLCAweDA0MDcsIDAgfSB9LAkvLyAxMgoJeyAweDQwMDEsIHsgNDAwMCwgMHgwNDA2LCAxIH0gfSwJLy8gMTMKCXsgMHg2MDAwLCB7IDB4MDQxMywgMHgwNDA4LCAwIH0gfSwJLy8gMTQKCXsgMHg0MDAxLCB7IDE3NTAsIDB4MDQwNiwgMSB9IH0sCS8vIDE1Cgl7IDB4NjAwMCwgeyAweDA0MTUsIDB4MDQwOCwgMCB9IH0sCS8vIDE2Cgl7IDB4NDAwMSwgeyA4MDAsIDB4MDQwNiwgMSB9IH0sCQkvLyAxNwoJeyAweDYwMDAsIHsgMHgwNDE3LCAweDA0MDgsIDAgfSB9LAkvLyAxOAoJeyAweDQwMDEsIHsgMTY1MCwgMHgwNDA2LCAxIH0gfSwJLy8gMTkKCXsgMHg2MDAwLCB7IDB4MDQxOSwgMHgwNDA3LCAwIH0gfSwJLy8gMWEKCXsgMHg0MDAxLCB7IDIzNDAsIDB4MDQwNiwgMSB9IH0sCS8vIDFiCgl7IDB4NjAwMCwgeyAweDA0MWIsIDB4MDQwNywgMCB9IH0sCS8vIDFjCgl7IDB4NDAwMSwgeyAzNjQwLCAweDA0MDYsIDEgfSB9LAkvLyAxZAoJeyAweDYwMDAsIHsgMHgwNDFkLCAweDA0MDcsIDAgfSB9LAkvLyAxZQoJeyAweDQwMDEsIHsgNDY3MCwgMHgwNDA2LCAxIH0gfSwJLy8gMWYKCXsgMHg2MDAwLCB7IDB4MDQxZiwgMHgwNDA3LCAwIH0gfSwJLy8gMjAKCXsgMHg0MDAxLCB7IC0xNTcwLCAweDA0MDYsIDEgfSB9LAkvLyAyMQoJeyAweDYwMDAsIHsgMHgwNDIxLCAweDA0MDgsIDAgfSB9LAkvLyAyMgoJeyAweDQwMDEsIHsgLTMzOTAsIDB4MDQwNiwgMSB9IH0sCS8vIDIzCgl7IDB4NjAwMCwgeyAweDA0MjMsIDB4MDQwOCwgMCB9IH0sCS8vIDI0Cgl7IDB4NDAwMSwgeyAtNjA1MCwgMHgwNDA2LCAxIH0gfSwJLy8gMjUKCXsgMHg2MDAwLCB7IDB4MDQyNSwgMHgwNDA4LCAwIH0gfSwJLy8gMjYKCXsgMHg0MDAxLCB7IDI1NDAsIDB4MDQwNiwgMSB9IH0sCS8vIDI3Cgl7IDB4NjAwMCwgeyAweDA0MjcsIDB4MDQwNywgMCB9IH0sCS8vIDI4Cgl7IDB4NDAwMSwgeyAtODA1MCwgMHgwNDA2LCAxIH0gfSwJLy8gMjkKCXsgMHg2MDAwLCB7IDB4MDQyOSwgMHgwNDA4LCAwIH0gfSwJLy8gMmEKCXsgMHg0MDAxLCB7IC0yNTQwLCAweDA0MDYsIDEgfSB9LAkvLyAyYgoJeyAweDYwMDAsIHsgMHgwNDJiLCAweDA0MDcsIDAgfSB9LAkvLyAyYwoJeyAweDQwMDEsIHsgLTQ0NjAsIDB4MDQwNiwgMSB9IH0sCS8vIDJkCgl7IDB4NjAwMCwgeyAweDA0MmQsIDB4MDQwNywgMCB9IH0sCS8vIDJlCgl7IDB4NDAwMSwgeyAtMjMzMCwgMHgwNDA2LCAxIH0gfSwJLy8gMmYKCXsgMHg2MDAwLCB7IDB4MDQyZiwgMHgwNDA3LCAwIH0gfSwJLy8gMzAKCXsgMHg0MDAxLCB7IC00NzAwLCAweDA0MDYsIDEgfSB9LAkvLyAzMQoJeyAweDYwMDAsIHsgMHgwNDMxLCAweDA0MDgsIDAgfSB9LAkvLyAzMgoJeyAweDQwMDEsIHsgLTEyNzAsIDB4MDQwNiwgMSB9IH0sCS8vIDMzCgl7IDB4NjAwMCwgeyAweDA0MzMsIDB4MDQwNywgMCB9IH0sCS8vIDM0Cgl7IDB4NDAwMSwgeyAtNTcyMCwgMHgwNDA2LCAxIH0gfSwJLy8gMzUKCXsgMHg2MDAwLCB7IDB4MDQzNSwgMHgwNDA4LCAwIH0gfSwJLy8gMzYKCXsgMHg0MDAxLCB7IC0yNTQwLCAweDA0MDYsIDEgfSB9LAkvLyAzNwoJeyAweDYwMDAsIHsgMHgwNDM3LCAweDA0MDgsIDAgfSB9LAkvLyAzOAoJeyAweDQwMDEsIHsgMTgwMCwgMHgwNDA2LCAxIH0gfSwJLy8gMzkKCXsgMHg2MDAwLCB7IDB4MDQzOSwgMHgwNDA3LCAwIH0gfSwJLy8gM2EKCXsgMHg0MDAxLCB7IC0xNzAwLCAweDA0MDYsIDEgfSB9LAkvLyAzYgoJeyAweDYwMDAsIHsgMHgwNDNiLCAweDA0MDgsIDAgfSB9LAkvLyAzYwoJeyAweDQwMDEsIHsgNjI5MCwgMHgwNDA2LCAxIH0gfSwJLy8gM2QKCXsgMHg2MDAwLCB7IDB4MDQzZCwgMHgwNDA4LCAwIH0gfQkvLyAzZQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb0FjdGlvbkJ1dHRvbkhlbHAgPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdEFjdGlvbkJ1dHRvbkhlbHBWZXJ0LCBzaXplb2YoIG1zb19zcHRBY3Rpb25CdXR0b25IZWxwVmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdEFjdGlvbkJ1dHRvbkhlbHBTZWdtLCBzaXplb2YoIG1zb19zcHRBY3Rpb25CdXR0b25IZWxwU2VnbSApID4+IDEsCgkoU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEqKW1zb19zcHRBY3Rpb25CdXR0b25IZWxwQ2FsYywgc2l6ZW9mKCBtc29fc3B0QWN0aW9uQnV0dG9uSGVscENhbGMgKSAvIHNpemVvZiggU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgKSwKCShzYWxfSW50MzIqKW1zb19zcHREZWZhdWx0MTQwMCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0QWN0aW9uQnV0dG9uVGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdEFjdGlvbkJ1dHRvblRleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTIxNjAwLCAyMTYwMCwKCTEwODAwLCAxMDgwMCwKCU5VTEwsIDAsCgkoU3Z4TVNEZmZIYW5kbGUqKW1zb19zcHRCdXR0b25IYW5kbGUsIHNpemVvZiggbXNvX3NwdEJ1dHRvbkhhbmRsZSApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0QWN0aW9uQnV0dG9uSW5mb3JtYXRpb25WZXJ0W10gPQp7Cgl7IDAsIDAgfSwgeyAyMTYwMCwgMCB9LCB7IDIxNjAwLCAyMTYwMCB9LCB7IDAsIDIxNjAwIH0sCgl7IDAsIDAgfSwgeyAyMTYwMCwgMCB9LCB7IDMgTVNPX0ksIDIgTVNPX0kgfSwgeyAxIE1TT19JLCAyIE1TT19JIH0sCgl7IDIxNjAwLCAwIH0sIHsgMjE2MDAsIDIxNjAwIH0sIHsgMyBNU09fSSwgNCBNU09fSSB9LCB7IDMgTVNPX0ksIDIgTVNPX0kgfSwKCXsgMjE2MDAsIDIxNjAwIH0sIHsgMCwgMjE2MDAgfSwgeyAxIE1TT19JLCA0IE1TT19JIH0sIHsgMyBNU09fSSwgNCBNU09fSSB9LAoJeyAwLCAyMTYwMCB9LCB7IDAsIDAgfSwgeyAxIE1TT19JLCAyIE1TT19JIH0sIHsgMSBNU09fSSwgNCBNU09fSSB9LAoJeyAweDcgTVNPX0ksIDB4YyBNU09fSSB9LCB7IDB4YSBNU09fSSwgMHg4IE1TT19JIH0sIHsgMHg3IE1TT19JLCAweDEwIE1TT19JIH0sIHsgMHhlIE1TT19JLCA4IE1TT19JIH0sIHsgMHg3IE1TT19JLCAweGMgTVNPX0kgfSwKCXsgMHg3IE1TT19JLCAweDE0IE1TT19JIH0sIHsgMHgxMiBNU09fSSwgMHgyYSBNU09fSSB9LCB7IDB4NyBNU09fSSwgMHgxOCBNU09fSSB9LCB7IDB4MTYgTVNPX0ksIDB4MmEgTVNPX0kgfSwgeyAweDcgTVNPX0ksIDB4MTQgTVNPX0kgfSwKCXsgMHgxYSBNU09fSSwgMHgxYyBNU09fSSB9LCB7IDB4MWUgTVNPX0ksIDB4MWMgTVNPX0kgfSwgeyAweDFlIE1TT19JLCAweDIwIE1TT19JIH0sIHsgMHgyMiBNU09fSSwgMHgyMCBNU09fSSB9LAoJeyAweDIyIE1TT19JLCAweDI0IE1TT19JIH0sIHsgMHgxYSBNU09fSSwgMHgyNCBNU09fSSB9LCB7IDB4MWEgTVNPX0ksIDB4MjAgTVNPX0kgfSwgeyAweDI2IE1TT19JLCAweDIwIE1TT19JIH0sCgl7IDB4MjYgTVNPX0ksIDB4MjggTVNPX0kgfSwgeyAweDFhIE1TT19JLCAweDI4IE1TT19JIH0KfTsKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvX3NwdEFjdGlvbkJ1dHRvbkluZm9ybWF0aW9uU2VnbVtdID0KewoJMHg0MDAwLCAweDAwMDMsIDB4NjAwMSwgMHg4MDAwLAoJMHg0MDAwLCAweDAwMDMsIDB4NjAwMSwgMHg4MDAwLAoJMHg0MDAwLCAweDAwMDMsIDB4NjAwMSwgMHg4MDAwLAoJMHg0MDAwLCAweDAwMDMsIDB4NjAwMSwgMHg4MDAwLAoJMHg0MDAwLCAweDAwMDMsIDB4NjAwMSwgMHg4MDAwLAoJMHg0MDAwLCAweGE3MDQsIDB4NjAwMCwgMHg4MDAwLAoJMHg0MDAwLCAweGE3MDQsIDB4NjAwMCwgMHg4MDAwLAoJMHg0MDAwLCAweDAwMDksIDB4NjAwMSwgMHg4MDAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSBtc29fc3B0QWN0aW9uQnV0dG9uSW5mb3JtYXRpb25DYWxjW10gPQkvLyBhZGogdmFsdWUgMCAtIDU0MDAKewoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAsIDAgfSB9LAoJeyAweDYwMDAsIHsgREZGX1Byb3BfZ2VvTGVmdCwgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAgfSB9LAoJeyAweDYwMDAsIHsgREZGX1Byb3BfZ2VvVG9wLCBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMCB9IH0sCgl7IDB4YTAwMCwgeyBERkZfUHJvcF9nZW9SaWdodCwgMCwgREZGX1Byb3BfYWRqdXN0VmFsdWUgfSB9LAoJeyAweGEwMDAsIHsgREZGX1Byb3BfZ2VvQm90dG9tLCAwLCBERkZfUHJvcF9hZGp1c3RWYWx1ZSB9IH0sCgl7IDB4ODAwMCwgeyAxMDgwMCwgMCwgREZGX1Byb3BfYWRqdXN0VmFsdWUgfSB9LAoJeyAweDIwMDEsIHsgMHgwNDA1LCAxLCAxMDgwMCB9IH0sCQkJLy8gc2NhbGluZwkgNgoJeyAweDIwMDEsIHsgREZGX1Byb3BfZ2VvUmlnaHQsIDEsIDIgfSB9LAkvLyBsciBjZW50ZXIgNwoJeyAweDIwMDEsIHsgREZGX1Byb3BfZ2VvQm90dG9tLCAxLCAyIH0gfSwJLy8gdWwgY2VudGVyIDgKCgl7IDB4NDAwMSwgeyAtODA1MCwgMHgwNDA2LCAxIH0gfSwJLy8gOQoJeyAweDYwMDAsIHsgMHgwNDA5LCAweDA0MDcsIDAgfSB9LAkvLyBhCgl7IDB4NDAwMSwgeyAtODA1MCwgMHgwNDA2LCAxIH0gfSwJLy8gYgoJeyAweDYwMDAsIHsgMHgwNDBiLCAweDA0MDgsIDAgfSB9LAkvLyBjCgl7IDB4NDAwMSwgeyA4MDUwLCAweDA0MDYsIDEgfSB9LAkvLyBkCgl7IDB4NjAwMCwgeyAweDA0MGQsIDB4MDQwNywgMCB9IH0sCS8vIGUKCXsgMHg0MDAxLCB7IDgwNTAsIDB4MDQwNiwgMSB9IH0sCS8vIGYKCXsgMHg2MDAwLCB7IDB4MDQwZiwgMHgwNDA4LCAwIH0gfSwJLy8gMTAKCgl7IDB4NDAwMSwgeyAtMjA2MCwgMHgwNDA2LCAxIH0gfSwJLy8gMTEKCXsgMHg2MDAwLCB7IDB4MDQxMSwgMHgwNDA3LCAwIH0gfSwJLy8gMTIKCXsgMHg0MDAxLCB7IC03NjIwLCAweDA0MDYsIDEgfSB9LAkvLyAxMwoJeyAweDYwMDAsIHsgMHgwNDEzLCAweDA0MDgsIDAgfSB9LAkvLyAxNAoJeyAweDQwMDEsIHsgMjA2MCwgMHgwNDA2LCAxIH0gfSwJLy8gMTUKCXsgMHg2MDAwLCB7IDB4MDQxNSwgMHgwNDA3LCAwIH0gfSwJLy8gMTYKCXsgMHg0MDAxLCB7IC0zNTAwLCAweDA0MDYsIDEgfSB9LAkvLyAxNwoJeyAweDYwMDAsIHsgMHgwNDE3LCAweDA0MDgsIDAgfSB9LAkvLyAxOAoKCXsgMHg0MDAxLCB7IC0yOTYwLCAweDA0MDYsIDEgfSB9LAkvLyAxOQoJeyAweDYwMDAsIHsgMHgwNDE5LCAweDA0MDcsIDAgfSB9LAkvLyAxYQoJeyAweDQwMDEsIHsgLTI5NjAsIDB4MDQwNiwgMSB9IH0sCS8vIDFiCgl7IDB4NjAwMCwgeyAweDA0MWIsIDB4MDQwOCwgMCB9IH0sCS8vIDFjCgl7IDB4NDAwMSwgeyAxNDgwLCAweDA0MDYsIDEgfSB9LAkvLyAxZAoJeyAweDYwMDAsIHsgMHgwNDFkLCAweDA0MDcsIDAgfSB9LAkvLyAxZQoJeyAweDQwMDEsIHsgNTA4MCwgMHgwNDA2LCAxIH0gfSwJLy8gMWYKCXsgMHg2MDAwLCB7IDB4MDQxZiwgMHgwNDA4LCAwIH0gfSwJLy8gMjAKCXsgMHg0MDAxLCB7IDI5NjAsIDB4MDQwNiwgMSB9IH0sCS8vIDIxCgl7IDB4NjAwMCwgeyAweDA0MjEsIDB4MDQwNywgMCB9IH0sCS8vIDIyCgl7IDB4NDAwMSwgeyA2MTQwLCAweDA0MDYsIDEgfSB9LAkvLyAyMwoJeyAweDYwMDAsIHsgMHgwNDIzLCAweDA0MDgsIDAgfSB9LAkvLyAyNAoJeyAweDQwMDEsIHsgLTE0ODAsIDB4MDQwNiwgMSB9IH0sCS8vIDI1Cgl7IDB4NjAwMCwgeyAweDA0MjUsIDB4MDQwNywgMCB9IH0sCS8vIDI2Cgl7IDB4NDAwMSwgeyAtMTkyMCwgMHgwNDA2LCAxIH0gfSwJLy8gMjcKCXsgMHg2MDAwLCB7IDB4MDQyNywgMHgwNDA4LCAwIH0gfSwJLy8gMjgKCgl7IDB4NDAwMSwgeyAtNTU2MCwgMHgwNDA2LCAxIH0gfSwJLy8gMjkKCXsgMHg2MDAwLCB7IDB4MDQyOSwgMHgwNDA4LCAwIH0gfSwJLy8gMmEKCn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvQWN0aW9uQnV0dG9uSW5mb3JtYXRpb24gPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdEFjdGlvbkJ1dHRvbkluZm9ybWF0aW9uVmVydCwgc2l6ZW9mKCBtc29fc3B0QWN0aW9uQnV0dG9uSW5mb3JtYXRpb25WZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0QWN0aW9uQnV0dG9uSW5mb3JtYXRpb25TZWdtLCBzaXplb2YoIG1zb19zcHRBY3Rpb25CdXR0b25JbmZvcm1hdGlvblNlZ20gKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0QWN0aW9uQnV0dG9uSW5mb3JtYXRpb25DYWxjLCBzaXplb2YoIG1zb19zcHRBY3Rpb25CdXR0b25JbmZvcm1hdGlvbkNhbGMgKSAvIHNpemVvZiggU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgKSwKCShzYWxfSW50MzIqKW1zb19zcHREZWZhdWx0MTQwMCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0QWN0aW9uQnV0dG9uVGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdEFjdGlvbkJ1dHRvblRleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTIxNjAwLCAyMTYwMCwKCTEwODAwLCAxMDgwMCwKCU5VTEwsIDAsCgkoU3Z4TVNEZmZIYW5kbGUqKW1zb19zcHRCdXR0b25IYW5kbGUsIHNpemVvZiggbXNvX3NwdEJ1dHRvbkhhbmRsZSApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0QWN0aW9uQnV0dG9uQmFja1ByZXZpb3VzVmVydFtdID0KewoJeyAwLCAwIH0sIHsgMjE2MDAsIDAgfSwgeyAyMTYwMCwgMjE2MDAgfSwgeyAwLCAyMTYwMCB9LAoJeyAwLCAwIH0sIHsgMjE2MDAsIDAgfSwJeyAzIE1TT19JLCAyIE1TT19JIH0sIHsgMSBNU09fSSwgMiBNU09fSSB9LAoJeyAyMTYwMCwgMCB9LCB7IDIxNjAwLCAyMTYwMCB9LCB7IDMgTVNPX0ksIDQgTVNPX0kgfSwgeyAzIE1TT19JLCAyIE1TT19JIH0sCgl7IDIxNjAwLCAyMTYwMCB9LCB7IDAsIDIxNjAwIH0sIHsgMSBNU09fSSwgNCBNU09fSSB9LCB7IDMgTVNPX0ksNCBNU09fSSB9LAoJeyAwLCAyMTYwMCB9LCB7IDAsIDAgfSwgeyAxIE1TT19JLCAyIE1TT19JIH0sIHsgMSBNU09fSSwgNCBNU09fSSB9LAoKCXsgMHhhIE1TT19JLCA4IE1TT19JIH0sIHsgMHhlIE1TT19JLCAweGMgTVNPX0kgfSwgeyAweGUgTVNPX0ksIDB4MTAgTVNPX0kgfQp9OwpzdGF0aWMgY29uc3Qgc2FsX3VJbnQxNiBtc29fc3B0QWN0aW9uQnV0dG9uRm9yd2FyZEJhY2tTZWdtW10gPQp7CgkweDQwMDAsIDB4MDAwMywgMHg2MDAxLCAweDgwMDAsCgkweDQwMDAsIDB4MDAwMywgMHg2MDAxLCAweDgwMDAsCgkweDQwMDAsIDB4MDAwMywgMHg2MDAxLCAweDgwMDAsCgkweDQwMDAsIDB4MDAwMywgMHg2MDAxLCAweDgwMDAsCgkweDQwMDAsIDB4MDAwMywgMHg2MDAxLCAweDgwMDAsCgkweDQwMDAsIDB4MDAwMiwgMHg2MDAxLCAweDgwMDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhIG1zb19zcHRBY3Rpb25CdXR0b25Gb3J3YXJkQmFja0NhbGNbXSA9CS8vIGFkaiB2YWx1ZSAwIC0gNTQwMAp7Cgl7IDB4MjAwMCwgeyBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMCwgMCB9IH0sCgl7IDB4NjAwMCwgeyBERkZfUHJvcF9nZW9MZWZ0LCBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMCB9IH0sCgl7IDB4NjAwMCwgeyBERkZfUHJvcF9nZW9Ub3AsIERGRl9Qcm9wX2FkanVzdFZhbHVlLCAwIH0gfSwKCXsgMHhhMDAwLCB7IERGRl9Qcm9wX2dlb1JpZ2h0LCAwLCBERkZfUHJvcF9hZGp1c3RWYWx1ZSB9IH0sCgl7IDB4YTAwMCwgeyBERkZfUHJvcF9nZW9Cb3R0b20sIDAsIERGRl9Qcm9wX2FkanVzdFZhbHVlIH0gfSwKCXsgMHg4MDAwLCB7IDEwODAwLCAwLCBERkZfUHJvcF9hZGp1c3RWYWx1ZSB9IH0sCgl7IDB4MjAwMSwgeyAweDA0MDUsIDEsIDEwODAwIH0gfSwJCQkvLyBzY2FsaW5nCSA2Cgl7IDB4MjAwMSwgeyBERkZfUHJvcF9nZW9SaWdodCwgMSwgMiB9IH0sCS8vIGxyIGNlbnRlciA3Cgl7IDB4MjAwMSwgeyBERkZfUHJvcF9nZW9Cb3R0b20sIDEsIDIgfSB9LAkvLyB1bCBjZW50ZXIgOAoKCXsgMHg0MDAxLCB7IC04MDUwLCAweDA0MDYsIDEgfSB9LAkvLyA5Cgl7IDB4NjAwMCwgeyAweDA0MDksIDB4MDQwNywgMCB9IH0sCS8vIGEKCXsgMHg0MDAxLCB7IC04MDUwLCAweDA0MDYsIDEgfSB9LAkvLyBiCgl7IDB4NjAwMCwgeyAweDA0MGIsIDB4MDQwOCwgMCB9IH0sCS8vIGMKCXsgMHg0MDAxLCB7IDgwNTAsIDB4MDQwNiwgMSB9IH0sCS8vIGQKCXsgMHg2MDAwLCB7IDB4MDQwZCwgMHgwNDA3LCAwIH0gfSwJLy8gZQoJeyAweDQwMDEsIHsgODA1MCwgMHgwNDA2LCAxIH0gfSwJLy8gZgoJeyAweDYwMDAsIHsgMHgwNDBmLCAweDA0MDgsIDAgfSB9CS8vIDEwCn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvQWN0aW9uQnV0dG9uQmFja1ByZXZpb3VzID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRBY3Rpb25CdXR0b25CYWNrUHJldmlvdXNWZXJ0LCBzaXplb2YoIG1zb19zcHRBY3Rpb25CdXR0b25CYWNrUHJldmlvdXNWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0QWN0aW9uQnV0dG9uRm9yd2FyZEJhY2tTZWdtLCBzaXplb2YoIG1zb19zcHRBY3Rpb25CdXR0b25Gb3J3YXJkQmFja1NlZ20gKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0QWN0aW9uQnV0dG9uRm9yd2FyZEJhY2tDYWxjLCBzaXplb2YoIG1zb19zcHRBY3Rpb25CdXR0b25Gb3J3YXJkQmFja0NhbGMgKSAvIHNpemVvZiggU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgKSwKCShzYWxfSW50MzIqKW1zb19zcHREZWZhdWx0MTQwMCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0QWN0aW9uQnV0dG9uVGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdEFjdGlvbkJ1dHRvblRleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTIxNjAwLCAyMTYwMCwKCTEwODAwLCAxMDgwMCwKCU5VTEwsIDAsCgkoU3Z4TVNEZmZIYW5kbGUqKW1zb19zcHRCdXR0b25IYW5kbGUsIHNpemVvZiggbXNvX3NwdEJ1dHRvbkhhbmRsZSApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0QWN0aW9uQnV0dG9uRm9yd2FyZE5leHRWZXJ0W10gPQp7Cgl7IDAsIDAgfSwgeyAyMTYwMCwgMCB9LCB7IDIxNjAwLCAyMTYwMCB9LCB7IDAsIDIxNjAwIH0sCgl7IDAsIDAgfSwgeyAyMTYwMCwgMCB9LAl7IDMgTVNPX0ksIDIgTVNPX0kgfSwgeyAxIE1TT19JLCAyIE1TT19JIH0sCgl7IDIxNjAwLCAwIH0sIHsgMjE2MDAsIDIxNjAwIH0sIHsgMyBNU09fSSwgNCBNU09fSSB9LCB7IDMgTVNPX0ksIDIgTVNPX0kgfSwKCXsgMjE2MDAsIDIxNjAwIH0sIHsgMCwgMjE2MDAgfSwJeyAxIE1TT19JLCA0IE1TT19JIH0sIHsgMyBNU09fSSwgNCBNU09fSSB9LAoJeyAwLCAyMTYwMCB9LCB7IDAsIDAgfSwgeyAxIE1TT19JLCAyIE1TT19JIH0sIHsgMSBNU09fSSwgNCBNU09fSSB9LAoKCXsgMHhhIE1TT19JLCAweGMgTVNPX0kgfSwgeyAweGUgTVNPX0ksIDggTVNPX0kgfSwgeyAweGEgTVNPX0ksIDB4MTAgTVNPX0kgfQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb0FjdGlvbkJ1dHRvbkZvcndhcmROZXh0ID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRBY3Rpb25CdXR0b25Gb3J3YXJkTmV4dFZlcnQsIHNpemVvZiggbXNvX3NwdEFjdGlvbkJ1dHRvbkZvcndhcmROZXh0VmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdEFjdGlvbkJ1dHRvbkZvcndhcmRCYWNrU2VnbSwgc2l6ZW9mKCBtc29fc3B0QWN0aW9uQnV0dG9uRm9yd2FyZEJhY2tTZWdtICkgPj4gMSwKCShTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSopbXNvX3NwdEFjdGlvbkJ1dHRvbkZvcndhcmRCYWNrQ2FsYywgc2l6ZW9mKCBtc29fc3B0QWN0aW9uQnV0dG9uRm9yd2FyZEJhY2tDYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0RGVmYXVsdDE0MDAsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdEFjdGlvbkJ1dHRvblRleHRSZWN0LCBzaXplb2YoIG1zb19zcHRBY3Rpb25CdXR0b25UZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCgkxMDgwMCwgMTA4MDAsCglOVUxMLCAwLAoJKFN2eE1TRGZmSGFuZGxlKiltc29fc3B0QnV0dG9uSGFuZGxlLCBzaXplb2YoIG1zb19zcHRCdXR0b25IYW5kbGUgKSAvIHNpemVvZiggU3Z4TVNEZmZIYW5kbGUgKQp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdEFjdGlvbkJ1dHRvbkJlZ2lubmluZ1ZlcnRbXSA9CnsKCXsgMCwgMCB9LCB7IDIxNjAwLCAwIH0sIHsgMjE2MDAsIDIxNjAwIH0sIHsgMCwgMjE2MDAgfSwKCXsgMCwgMCB9LCB7IDIxNjAwLCAwIH0sCXsgMyBNU09fSSwgMiBNU09fSSB9LCB7IDEgTVNPX0ksIDIgTVNPX0kgfSwKCXsgMjE2MDAsIDAgfSwgeyAyMTYwMCwgMjE2MDAgfSwgeyAzIE1TT19JLCA0IE1TT19JIH0sIHsgMyBNU09fSSwgMiBNU09fSSB9LAoJeyAyMTYwMCwgMjE2MDAgfSwgeyAwLCAyMTYwMCB9LCB7IDEgTVNPX0ksIDQgTVNPX0kgfSwgeyAzIE1TT19JLCA0IE1TT19JIH0sCgl7IDAsIDIxNjAwIH0sIHsgMCwgMCB9LCB7IDEgTVNPX0ksIDIgTVNPX0kgfSwgeyAxIE1TT19JLCA0IE1TT19JIH0sCgoJeyAweGEgTVNPX0ksIDggTVNPX0kgfSwgeyAweGUgTVNPX0ksIDB4YyBNU09fSSB9LCB7IDB4ZSBNU09fSSwgMHgxMCBNU09fSSB9LCB7IDB4MTIgTVNPX0ksIDB4YyBNU09fSSB9LAoJeyAweDE0IE1TT19JLCAweGMgTVNPX0kgfSwgeyAweDE0IE1TT19JLCAweDEwIE1TT19JIH0sIHsgMHgxMiBNU09fSSwgMHgxMCBNU09fSSB9Cn07CnN0YXRpYyBjb25zdCBzYWxfdUludDE2IG1zb19zcHRBY3Rpb25CdXR0b25CZWdpbm5pbmdFbmRTZWdtW10gPQp7CgkweDQwMDAsIDB4MDAwMywgMHg2MDAxLCAweDgwMDAsCgkweDQwMDAsIDB4MDAwMywgMHg2MDAxLCAweDgwMDAsCgkweDQwMDAsIDB4MDAwMywgMHg2MDAxLCAweDgwMDAsCgkweDQwMDAsIDB4MDAwMywgMHg2MDAxLCAweDgwMDAsCgkweDQwMDAsIDB4MDAwMywgMHg2MDAxLCAweDgwMDAsCgoJMHg0MDAwLCAweDAwMDIsIDB4NjAwMSwgMHg4MDAwLAoJMHg0MDAwLCAweDAwMDMsIDB4NjAwMSwgMHg4MDAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSBtc29fc3B0QWN0aW9uQnV0dG9uQmVnaW5uaW5nRW5kQ2FsY1tdID0JLy8gYWRqIHZhbHVlIDAgLSA1NDAwCnsKCXsgMHgyMDAwLCB7IERGRl9Qcm9wX2FkanVzdFZhbHVlLCAwLCAwIH0gfSwKCXsgMHg2MDAwLCB7IERGRl9Qcm9wX2dlb0xlZnQsIERGRl9Qcm9wX2FkanVzdFZhbHVlLCAwIH0gfSwKCXsgMHg2MDAwLCB7IERGRl9Qcm9wX2dlb1RvcCwgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAgfSB9LAoJeyAweGEwMDAsIHsgREZGX1Byb3BfZ2VvUmlnaHQsIDAsIERGRl9Qcm9wX2FkanVzdFZhbHVlIH0gfSwKCXsgMHhhMDAwLCB7IERGRl9Qcm9wX2dlb0JvdHRvbSwgMCwgREZGX1Byb3BfYWRqdXN0VmFsdWUgfSB9LAoJeyAweDgwMDAsIHsgMTA4MDAsIDAsIERGRl9Qcm9wX2FkanVzdFZhbHVlIH0gfSwKCXsgMHgyMDAxLCB7IDB4MDQwNSwgMSwgMTA4MDAgfSB9LAkJCS8vIHNjYWxpbmcJIDYKCXsgMHgyMDAxLCB7IERGRl9Qcm9wX2dlb1JpZ2h0LCAxLCAyIH0gfSwJLy8gbHIgY2VudGVyIDcKCXsgMHgyMDAxLCB7IERGRl9Qcm9wX2dlb0JvdHRvbSwgMSwgMiB9IH0sCS8vIHVsIGNlbnRlciA4CgoJeyAweDQwMDEsIHsgLTQwMjAsIDB4MDQwNiwgMSB9IH0sCS8vIDkKCXsgMHg2MDAwLCB7IDB4MDQwOSwgMHgwNDA3LCAwIH0gfSwJLy8gYQoJeyAweDQwMDEsIHsgLTgwNTAsIDB4MDQwNiwgMSB9IH0sCS8vIGIKCXsgMHg2MDAwLCB7IDB4MDQwYiwgMHgwNDA4LCAwIH0gfSwJLy8gYwoJeyAweDQwMDEsIHsgODA1MCwgMHgwNDA2LCAxIH0gfSwJLy8gZAoJeyAweDYwMDAsIHsgMHgwNDBkLCAweDA0MDcsIDAgfSB9LAkvLyBlCgl7IDB4NDAwMSwgeyA4MDUwLCAweDA0MDYsIDEgfSB9LAkvLyBmCgl7IDB4NjAwMCwgeyAweDA0MGYsIDB4MDQwOCwgMCB9IH0sCS8vIDEwCgoJeyAweDQwMDEsIHsgLTgwNTAsIDB4MDQwNiwgMSB9IH0sCS8vIDExCgl7IDB4NjAwMCwgeyAweDA0MTEsIDB4MDQwNywgMCB9IH0sCS8vIDEyCgl7IDB4NDAwMSwgeyAtNjE0MCwgMHgwNDA2LCAxIH0gfSwJLy8gMTMKCXsgMHg2MDAwLCB7IDB4MDQxMywgMHgwNDA3LCAwIH0gfSwJLy8gMTQKCgoJeyAweDQwMDEsIHsgNDAyMCwgMHgwNDA2LCAxIH0gfSwJLy8gMTUKCXsgMHg2MDAwLCB7IDB4MDQxNSwgMHgwNDA3LCAwIH0gfSwJLy8gMTYKCXsgMHg0MDAxLCB7IDYxNDAsIDB4MDQwNiwgMSB9IH0sCS8vIDE3Cgl7IDB4NjAwMCwgeyAweDA0MTcsIDB4MDQwNywgMCB9IH0JLy8gMTgKfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29BY3Rpb25CdXR0b25CZWdpbm5pbmcgPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdEFjdGlvbkJ1dHRvbkJlZ2lubmluZ1ZlcnQsIHNpemVvZiggbXNvX3NwdEFjdGlvbkJ1dHRvbkJlZ2lubmluZ1ZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKHNhbF91SW50MTYqKW1zb19zcHRBY3Rpb25CdXR0b25CZWdpbm5pbmdFbmRTZWdtLCBzaXplb2YoIG1zb19zcHRBY3Rpb25CdXR0b25CZWdpbm5pbmdFbmRTZWdtICkgPj4gMSwKCShTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSopbXNvX3NwdEFjdGlvbkJ1dHRvbkJlZ2lubmluZ0VuZENhbGMsIHNpemVvZiggbXNvX3NwdEFjdGlvbkJ1dHRvbkJlZ2lubmluZ0VuZENhbGMgKSAvIHNpemVvZiggU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgKSwKCShzYWxfSW50MzIqKW1zb19zcHREZWZhdWx0MTQwMCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0QWN0aW9uQnV0dG9uVGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdEFjdGlvbkJ1dHRvblRleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTIxNjAwLCAyMTYwMCwKCTEwODAwLCAxMDgwMCwKCU5VTEwsIDAsCgkoU3Z4TVNEZmZIYW5kbGUqKW1zb19zcHRCdXR0b25IYW5kbGUsIHNpemVvZiggbXNvX3NwdEJ1dHRvbkhhbmRsZSApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0QWN0aW9uQnV0dG9uRW5kVmVydFtdID0KewoJeyAwLCAwIH0sIHsgMjE2MDAsIDAgfSwgeyAyMTYwMCwgMjE2MDAgfSwgeyAwLCAyMTYwMCB9LAoJeyAwLCAwIH0sIHsgMjE2MDAsIDAgfSwJeyAzIE1TT19JLCAyIE1TT19JIH0sIHsgMSBNU09fSSwgMiBNU09fSSB9LAoJeyAyMTYwMCwgMCB9LCB7IDIxNjAwLCAyMTYwMCB9LAl7IDMgTVNPX0ksIDQgTVNPX0kgfSwgeyAzIE1TT19JLCAyIE1TT19JIH0sCgl7IDIxNjAwLCAyMTYwMCB9LCB7IDAsIDIxNjAwIH0sIHsgMSBNU09fSSwgNCBNU09fSSB9LCB7IDMgTVNPX0ksIDQgTVNPX0kgfSwKCXsgMCwgMjE2MDAgfSwgeyAwLCAwIH0sCXsgMSBNU09fSSwgMiBNU09fSSB9LCB7IDEgTVNPX0ksIDQgTVNPX0kgfSwKCgl7IDB4MTYgTVNPX0ksIDggTVNPX0kgfSwgeyAweDEyIE1TT19JLCAweDEwIE1TT19JIH0sIHsgMHgxMiBNU09fSSwgMHhjIE1TT19JIH0sCgoJeyAweDE4IE1TT19JLCAweGMgTVNPX0kgfSwgeyAweDE4IE1TT19JLCAweDEwIE1TT19JIH0sIHsgMHhlIE1TT19JLCAweDEwIE1TT19JIH0sIHsgMHhlIE1TT19JLCAweGMgTVNPX0kgfQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb0FjdGlvbkJ1dHRvbkVuZCA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0QWN0aW9uQnV0dG9uRW5kVmVydCwgc2l6ZW9mKCBtc29fc3B0QWN0aW9uQnV0dG9uRW5kVmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdEFjdGlvbkJ1dHRvbkJlZ2lubmluZ0VuZFNlZ20sIHNpemVvZiggbXNvX3NwdEFjdGlvbkJ1dHRvbkJlZ2lubmluZ0VuZFNlZ20gKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0QWN0aW9uQnV0dG9uQmVnaW5uaW5nRW5kQ2FsYywgc2l6ZW9mKCBtc29fc3B0QWN0aW9uQnV0dG9uQmVnaW5uaW5nRW5kQ2FsYyApIC8gc2l6ZW9mKCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSApLAoJKHNhbF9JbnQzMiopbXNvX3NwdERlZmF1bHQxNDAwLAoJKFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMqKW1zb19zcHRBY3Rpb25CdXR0b25UZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0QWN0aW9uQnV0dG9uVGV4dFJlY3QgKSAvIHNpemVvZiggU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyApLAoJMjE2MDAsIDIxNjAwLAoJMTA4MDAsIDEwODAwLAoJTlVMTCwgMCwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdEJ1dHRvbkhhbmRsZSwgc2l6ZW9mKCBtc29fc3B0QnV0dG9uSGFuZGxlICkgLyBzaXplb2YoIFN2eE1TRGZmSGFuZGxlICkKfTsKCnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRBY3Rpb25CdXR0b25SZXR1cm5WZXJ0W10gPQp7Cgl7IDAsIDAgfSwgeyAyMTYwMCwgMCB9LCB7IDIxNjAwLCAyMTYwMCB9LCB7IDAsIDIxNjAwIH0sCgl7IDAsIDAgfSwgeyAyMTYwMCwgMCB9LAl7IDMgTVNPX0ksIDIgTVNPX0kgfSwgeyAxIE1TT19JLCAyIE1TT19JIH0sCgl7IDIxNjAwLCAwIH0sIHsgMjE2MDAsCTIxNjAwIH0sIHsgMyBNU09fSSwgNCBNU09fSSB9LCB7IDMgTVNPX0ksIDIgTVNPX0kgfSwKCXsgMjE2MDAsIDIxNjAwIH0sIHsgMCwgMjE2MDAgfSwJeyAxIE1TT19JLCA0IE1TT19JIH0sIHsgMyBNU09fSSwgNCBNU09fSSB9LAoJeyAwLCAyMTYwMCB9LCB7IDAsIDAgfSwgeyAxIE1TT19JLCAyIE1TT19JIH0sIHsgMSBNU09fSSwgNCBNU09fSSB9LAoKCXsgMHhhIE1TT19JLCAweGMgTVNPX0kgfSwgeyAweGUgTVNPX0ksIDB4YyBNU09fSSB9LAl7IDB4ZSBNU09fSSwgMHgxMCBNU09fSSB9LAkJCQkJCQkvLyBwcHAKCXsgMHhlIE1TT19JLCAweDEyIE1TT19JIH0sIHsgMHgxNCBNU09fSSwgMHgxNiBNU09fSSB9LCB7IDB4MTggTVNPX0ksIDB4MTYgTVNPX0kgfSwJCQkJCQkvLyBjY3AKCXsgNyBNU09fSSwgMHgxNiBNU09fSSB9LAkJCQkJCQkJCQkJCQkJCQkJCQkJLy8gcAoJeyAweDFhIE1TT19JLCAweDE2IE1TT19JIH0sIHsgMHgxYyBNU09fSSwgMHgxMiBNU09fSSB9LCB7IDB4MWMgTVNPX0ksIDB4MTAgTVNPX0kgfSwJCQkJCQkvLyBjY3AKCXsgMHgxYyBNU09fSSwgMHhjIE1TT19JIH0sIHsgNyBNU09fSSwgMHhjIE1TT19JIH0sIHsgMHgxZSBNU09fSSwgMHgyMCBNU09fSSB9LCB7IDB4MjIgTVNPX0ksIDB4YyBNU09fSSB9LC8vIHBwcHAKCXsgMHgyNCBNU09fSSwgMHhjIE1TT19JIH0sIHsgMHgyNCBNU09fSSwgMHgxMCBNU09fSSB9LAkJCQkJCQkJCQkJCQkvLyBwcAoJeyAweDI0IE1TT19JLCAweDI2IE1TT19JIH0sCXsgMHgyOCBNU09fSSwgMHgyYSBNU09fSSB9LCB7IDcgTVNPX0ksIDB4MmEgTVNPX0kgfSwJCQkJCQkvLyBjY3AKCXsgMHgxOCBNU09fSSwgMHgyYSBNU09fSSB9LAkJCQkJCQkJCQkJCQkJCQkJCQkJLy8gcAoJeyAweDJjIE1TT19JLCAweDJhIE1TT19JIH0sIHsgMHhhIE1TT19JLCAweDI2IE1TT19JIH0sIHsgMHhhIE1TT19JLAkweDEwIE1TT19JIH0JCQkJCQkvLyBjY3AKfTsKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvX3NwdEFjdGlvbkJ1dHRvblJldHVyblNlZ21bXSA9CnsKCTB4NDAwMCwgMHgwMDAzLCAweDYwMDEsIDB4ODAwMCwKCTB4NDAwMCwgMHgwMDAzLCAweDYwMDEsIDB4ODAwMCwKCTB4NDAwMCwgMHgwMDAzLCAweDYwMDEsIDB4ODAwMCwKCTB4NDAwMCwgMHgwMDAzLCAweDYwMDEsIDB4ODAwMCwKCTB4NDAwMCwgMHgwMDAzLCAweDYwMDEsIDB4ODAwMCwKCTB4NDAwMCwgMHgwMDAyLCAweDIwMDEsIDB4MDAwMSwgMHgyMDAxLCAweDAwMDYsMHgyMDAxLCAweDAwMDEsIDB4MjAwMSwgMHg2MDAxLCAweDgwMDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhIG1zb19zcHRBY3Rpb25CdXR0b25SZXR1cm5DYWxjW10gPQkvLyBhZGogdmFsdWUgMCAtIDU0MDAKewoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAsIDAgfSB9LAoJeyAweDYwMDAsIHsgREZGX1Byb3BfZ2VvTGVmdCwgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAgfSB9LAoJeyAweDYwMDAsIHsgREZGX1Byb3BfZ2VvVG9wLCBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMCB9IH0sCgl7IDB4YTAwMCwgeyBERkZfUHJvcF9nZW9SaWdodCwgMCwgREZGX1Byb3BfYWRqdXN0VmFsdWUgfSB9LAoJeyAweGEwMDAsIHsgREZGX1Byb3BfZ2VvQm90dG9tLCAwLCBERkZfUHJvcF9hZGp1c3RWYWx1ZSB9IH0sCgl7IDB4ODAwMCwgeyAxMDgwMCwgMCwgREZGX1Byb3BfYWRqdXN0VmFsdWUgfSB9LAoJeyAweDIwMDEsIHsgMHgwNDA1LCAxLCAxMDgwMCB9IH0sCQkJLy8gc2NhbGluZwkgNgoJeyAweDIwMDEsIHsgREZGX1Byb3BfZ2VvUmlnaHQsIDEsIDIgfSB9LAkvLyBsciBjZW50ZXIgNwoJeyAweDIwMDEsIHsgREZGX1Byb3BfZ2VvQm90dG9tLCAxLCAyIH0gfSwJLy8gdWwgY2VudGVyIDgKCgl7IDB4NDAwMSwgeyAtODA1MCwgMHgwNDA2LCAxIH0gfSwJLy8gOQoJeyAweDYwMDAsIHsgMHgwNDA5LCAweDA0MDcsIDAgfSB9LAkvLyBhCgl7IDB4NDAwMSwgeyAtMzgwMCwgMHgwNDA2LCAxIH0gfSwJLy8gYgoJeyAweDYwMDAsIHsgMHgwNDBiLCAweDA0MDgsIDAgfSB9LAkvLyBjCgl7IDB4NDAwMSwgeyAtNDAyMCwgMHgwNDA2LCAxIH0gfSwJLy8gZAoJeyAweDYwMDAsIHsgMHgwNDBkLCAweDA0MDcsIDAgfSB9LAkvLyBlCgl7IDB4NDAwMSwgeyAyMzMwLCAweDA0MDYsIDEgfSB9LAkvLyBmCgl7IDB4NjAwMCwgeyAweDA0MGYsIDB4MDQwOCwgMCB9IH0sCS8vIDEwCgl7IDB4NDAwMSwgeyAzMzkwLCAweDA0MDYsIDEgfSB9LAkvLyAxMQoJeyAweDYwMDAsIHsgMHgwNDExLCAweDA0MDgsIDAgfSB9LAkvLyAxMgoJeyAweDQwMDEsIHsgLTMxMDAsIDB4MDQwNiwgMSB9IH0sCS8vIDEzCgl7IDB4NjAwMCwgeyAweDA0MTMsIDB4MDQwNywgMCB9IH0sCS8vIDE0Cgl7IDB4NDAwMSwgeyA0MjMwLCAweDA0MDYsIDEgfSB9LAkvLyAxNQoJeyAweDYwMDAsIHsgMHgwNDE1LCAweDA0MDgsIDAgfSB9LAkvLyAxNgoJeyAweDQwMDEsIHsgLTE5MTAsIDB4MDQwNiwgMSB9IH0sCS8vIDE3Cgl7IDB4NjAwMCwgeyAweDA0MTcsIDB4MDQwNywgMCB9IH0sCS8vIDE4Cgl7IDB4NDAwMSwgeyAxMTkwLCAweDA0MDYsIDEgfSB9LAkvLyAxOQoJeyAweDYwMDAsIHsgMHgwNDE5LCAweDA0MDcsIDAgfSB9LAkvLyAxYQoJeyAweDQwMDEsIHsgMjExMCwgMHgwNDA2LCAxIH0gfSwJLy8gMWIKCXsgMHg2MDAwLCB7IDB4MDQxYiwgMHgwNDA3LCAwIH0gfSwJLy8gMWMKCXsgMHg0MDAxLCB7IDQwMzAsIDB4MDQwNiwgMSB9IH0sCS8vIDFkCgl7IDB4NjAwMCwgeyAweDA0MWQsIDB4MDQwNywgMCB9IH0sCS8vIDFlCgl7IDB4NDAwMSwgeyAtNzgzMCwgMHgwNDA2LCAxIH0gfSwJLy8gMWYKCXsgMHg2MDAwLCB7IDB4MDQxZiwgMHgwNDA4LCAwIH0gfSwJLy8gMjAKCXsgMHg0MDAxLCB7IDgyNTAsIDB4MDQwNiwgMSB9IH0sCS8vIDIxCgl7IDB4NjAwMCwgeyAweDA0MjEsIDB4MDQwNywgMCB9IH0sCS8vIDIyCgl7IDB4NDAwMSwgeyA2MTQwLCAweDA0MDYsIDEgfSB9LAkvLyAyMwoJeyAweDYwMDAsIHsgMHgwNDIzLCAweDA0MDcsIDAgfSB9LAkvLyAyNAoJeyAweDQwMDEsIHsgNTUxMCwgMHgwNDA2LCAxIH0gfSwJLy8gMjUKCXsgMHg2MDAwLCB7IDB4MDQyNSwgMHgwNDA4LCAwIH0gfSwJLy8gMjYKCXsgMHg0MDAxLCB7IDMxODAsIDB4MDQwNiwgMSB9IH0sCS8vIDI3Cgl7IDB4NjAwMCwgeyAweDA0MjcsIDB4MDQwNywgMCB9IH0sCS8vIDI4Cgl7IDB4NDAwMSwgeyA4NDUwLCAweDA0MDYsIDEgfSB9LAkvLyAyOQoJeyAweDYwMDAsIHsgMHgwNDI5LCAweDA0MDgsIDAgfSB9LAkvLyAyYQoJeyAweDQwMDEsIHsgLTUwOTAsIDB4MDQwNiwgMSB9IH0sCS8vIDJiCgl7IDB4NjAwMCwgeyAweDA0MmIsIDB4MDQwNywgMCB9IH0JLy8gMmMKfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29BY3Rpb25CdXR0b25SZXR1cm4gPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdEFjdGlvbkJ1dHRvblJldHVyblZlcnQsIHNpemVvZiggbXNvX3NwdEFjdGlvbkJ1dHRvblJldHVyblZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKHNhbF91SW50MTYqKW1zb19zcHRBY3Rpb25CdXR0b25SZXR1cm5TZWdtLCBzaXplb2YoIG1zb19zcHRBY3Rpb25CdXR0b25SZXR1cm5TZWdtICkgPj4gMSwKCShTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSopbXNvX3NwdEFjdGlvbkJ1dHRvblJldHVybkNhbGMsIHNpemVvZiggbXNvX3NwdEFjdGlvbkJ1dHRvblJldHVybkNhbGMgKSAvIHNpemVvZiggU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgKSwKCShzYWxfSW50MzIqKW1zb19zcHREZWZhdWx0MTQwMCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0QWN0aW9uQnV0dG9uVGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdEFjdGlvbkJ1dHRvblRleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTIxNjAwLCAyMTYwMCwKCTEwODAwLCAxMDgwMCwKCU5VTEwsIDAsCgkoU3Z4TVNEZmZIYW5kbGUqKW1zb19zcHRCdXR0b25IYW5kbGUsIHNpemVvZiggbXNvX3NwdEJ1dHRvbkhhbmRsZSApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0QWN0aW9uQnV0dG9uRG9jdW1lbnRWZXJ0W10gPQp7Cgl7IDAsIDAgfSwgeyAyMTYwMCwgMCB9LCB7IDIxNjAwLCAyMTYwMCB9LCB7IDAsIDIxNjAwIH0sCgl7IDAsIDAgfSwgeyAyMTYwMCwgMCB9LCB7IDMgTVNPX0ksIDIgTVNPX0kgfSwgeyAxIE1TT19JLCAyIE1TT19JIH0sCgl7IDIxNjAwLCAwIH0sIHsgMjE2MDAsIDIxNjAwIH0sIHsgMyBNU09fSSwgNCBNU09fSSB9LCB7IDMgTVNPX0ksIDIgTVNPX0kgfSwKCXsgMjE2MDAsIDIxNjAwIH0sIHsgMCwgMjE2MDAgfSwgeyAxIE1TT19JLCA0IE1TT19JIH0sIHsgMyBNU09fSSwgNCBNU09fSSB9LAoJeyAwLCAyMTYwMCB9LCB7IDAsIDAgfSwgeyAxIE1TT19JLCAyIE1TT19JIH0sIHsgMSBNU09fSSwgNCBNU09fSSB9LAoKCXsgMHhhIE1TT19JLCAweGMgTVNPX0kgfSwgeyAweGUgTVNPX0ksIDB4YyBNU09fSSB9LCB7IDB4MTAgTVNPX0ksIDB4MTIgTVNPX0kgfSwgeyAweDEwIE1TT19JLCAweDE0IE1TT19JIH0sCgl7IDB4YSBNU09fSSwgMHgxNCBNU09fSSB9LCB7IDB4ZSBNU09fSSwgMHhjIE1TT19JIH0sIHsgMHgxMCBNU09fSSwgMHgxMiBNU09fSSB9LCB7IDB4ZSBNU09fSSwgMHgxMiBNU09fSSB9Cn07CnN0YXRpYyBjb25zdCBzYWxfdUludDE2IG1zb19zcHRBY3Rpb25CdXR0b25Eb2N1bWVudFNlZ21bXSA9CnsKCTB4NDAwMCwgMHgwMDAzLCAweDYwMDEsIDB4ODAwMCwKCTB4NDAwMCwgMHgwMDAzLCAweDYwMDEsIDB4ODAwMCwKCTB4NDAwMCwgMHgwMDAzLCAweDYwMDEsIDB4ODAwMCwKCTB4NDAwMCwgMHgwMDAzLCAweDYwMDEsIDB4ODAwMCwKCTB4NDAwMCwgMHgwMDAzLCAweDYwMDEsIDB4ODAwMCwKCgkweDQwMDAsIDB4MDAwNCwgMHg2MDAxLCAweDgwMDAsCgkweDQwMDAsIDB4MDAwMiwgMHg2MDAxLCAweDgwMDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhIG1zb19zcHRBY3Rpb25CdXR0b25Eb2N1bWVudENhbGNbXSA9CS8vIGFkaiB2YWx1ZSAwIC0gNTQwMAp7Cgl7IDB4MjAwMCwgeyBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMCwgMCB9IH0sCgl7IDB4NjAwMCwgeyBERkZfUHJvcF9nZW9MZWZ0LCBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMCB9IH0sCgl7IDB4NjAwMCwgeyBERkZfUHJvcF9nZW9Ub3AsIERGRl9Qcm9wX2FkanVzdFZhbHVlLCAwIH0gfSwKCXsgMHhhMDAwLCB7IERGRl9Qcm9wX2dlb1JpZ2h0LCAwLCBERkZfUHJvcF9hZGp1c3RWYWx1ZSB9IH0sCgl7IDB4YTAwMCwgeyBERkZfUHJvcF9nZW9Cb3R0b20sIDAsIERGRl9Qcm9wX2FkanVzdFZhbHVlIH0gfSwKCXsgMHg4MDAwLCB7IDEwODAwLCAwLCBERkZfUHJvcF9hZGp1c3RWYWx1ZSB9IH0sCgl7IDB4MjAwMSwgeyAweDA0MDUsIDEsIDEwODAwIH0gfSwJCQkvLyBzY2FsaW5nCSA2Cgl7IDB4MjAwMSwgeyBERkZfUHJvcF9nZW9SaWdodCwgMSwgMiB9IH0sCS8vIGxyIGNlbnRlciA3Cgl7IDB4MjAwMSwgeyBERkZfUHJvcF9nZW9Cb3R0b20sIDEsIDIgfSB9LAkvLyB1bCBjZW50ZXIgOAoKCXsgMHg0MDAxLCB7IC02MzUwLCAweDA0MDYsIDEgfSB9LAkvLyA5Cgl7IDB4NjAwMCwgeyAweDA0MDksIDB4MDQwNywgMCB9IH0sCS8vIGEKCXsgMHg0MDAxLCB7IC03ODMwLCAweDA0MDYsIDEgfSB9LAkvLyBiCgl7IDB4NjAwMCwgeyAweDA0MGIsIDB4MDQwOCwgMCB9IH0sCS8vIGMKCXsgMHg0MDAxLCB7IDE2OTAsIDB4MDQwNiwgMSB9IH0sCS8vIGQKCXsgMHg2MDAwLCB7IDB4MDQwZCwgMHgwNDA3LCAwIH0gfSwJLy8gZQoJeyAweDQwMDEsIHsgNjM1MCwgMHgwNDA2LCAxIH0gfSwJLy8gZgoJeyAweDYwMDAsIHsgMHgwNDBmLCAweDA0MDcsIDAgfSB9LAkvLyAxMAoJeyAweDQwMDEsIHsgLTM4MTAsIDB4MDQwNiwgMSB9IH0sCS8vIDExCgl7IDB4NjAwMCwgeyAweDA0MTEsIDB4MDQwOCwgMCB9IH0sCS8vIDEyCgl7IDB4NDAwMSwgeyA3ODMwLCAweDA0MDYsIDEgfSB9LAkvLyAxMwogICAgeyAweDYwMDAsIHsgMHgwNDEzLCAweDA0MDgsIDAgfSB9CS8vIDE0Cn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvQWN0aW9uQnV0dG9uRG9jdW1lbnQgPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdEFjdGlvbkJ1dHRvbkRvY3VtZW50VmVydCwgc2l6ZW9mKCBtc29fc3B0QWN0aW9uQnV0dG9uRG9jdW1lbnRWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0QWN0aW9uQnV0dG9uRG9jdW1lbnRTZWdtLCBzaXplb2YoIG1zb19zcHRBY3Rpb25CdXR0b25Eb2N1bWVudFNlZ20gKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0QWN0aW9uQnV0dG9uRG9jdW1lbnRDYWxjLCBzaXplb2YoIG1zb19zcHRBY3Rpb25CdXR0b25Eb2N1bWVudENhbGMgKSAvIHNpemVvZiggU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgKSwKCShzYWxfSW50MzIqKW1zb19zcHREZWZhdWx0MTQwMCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0QWN0aW9uQnV0dG9uVGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdEFjdGlvbkJ1dHRvblRleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTIxNjAwLCAyMTYwMCwKCTEwODAwLCAxMDgwMCwKCU5VTEwsIDAsCgkoU3Z4TVNEZmZIYW5kbGUqKW1zb19zcHRCdXR0b25IYW5kbGUsIHNpemVvZiggbXNvX3NwdEJ1dHRvbkhhbmRsZSApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0QWN0aW9uQnV0dG9uU291bmRWZXJ0W10gPQp7Cgl7IDAsIDAgfSwgeyAyMTYwMCwgMCB9LCB7IDIxNjAwLCAyMTYwMCB9LCB7IDAsIDIxNjAwIH0sCgl7IDAsIDAgfSwgeyAyMTYwMCwgMCB9LCB7IDMgTVNPX0ksIDIgTVNPX0kgfSwgeyAxIE1TT19JLCAyIE1TT19JIH0sCgl7IDIxNjAwLCAwIH0sIHsgMjE2MDAsIDIxNjAwIH0sCXsgMyBNU09fSSwgNCBNU09fSSB9LCB7IDMgTVNPX0ksIDIgTVNPX0kgfSwKCXsgMjE2MDAsIDIxNjAwIH0sIHsgMCwgMjE2MDAgfSwgeyAxIE1TT19JLCA0IE1TT19JIH0sIHsgMyBNU09fSSwgNCBNU09fSSB9LAoJeyAwLCAyMTYwMCB9LCB7IDAsIDAgfSwgeyAxIE1TT19JLCAyIE1TT19JIH0sIHsgMSBNU09fSSwgNCBNU09fSSB9LAoKCXsgMHhhIE1TT19JLCAweGMgTVNPX0kgfSwgeyAweGUgTVNPX0ksIDB4YyBNU09fSSB9LCB7IDB4MTAgTVNPX0ksIDB4MTIgTVNPX0kgfSwgeyAweDEwIE1TT19JLCAweDE0IE1TT19JIH0sCgl7IDB4ZSBNU09fSSwgMHgxNiBNU09fSSB9LCB7IDB4YSBNU09fSSwgMHgxNiBNU09fSSB9LCB7IDB4MTggTVNPX0ksIDggTVNPX0kgfSwgeyAweDFhIE1TT19JLCA4IE1TT19JIH0sCgoJeyAweDE4IE1TT19JLCAweGMgTVNPX0kgfSwgeyAweDFhIE1TT19JLCAweDFjIE1TT19JIH0sCgoJeyAweDE4IE1TT19JLCAweDE2IE1TT19JIH0sIHsgMHgxYSBNU09fSSwgMHgxZSBNU09fSSB9Cn07CnN0YXRpYyBjb25zdCBzYWxfdUludDE2IG1zb19zcHRBY3Rpb25CdXR0b25Tb3VuZFNlZ21bXSA9CnsKCTB4NDAwMCwgMHgwMDAzLCAweDYwMDEsIDB4ODAwMCwKCTB4NDAwMCwgMHgwMDAzLCAweDYwMDEsIDB4ODAwMCwKCTB4NDAwMCwgMHgwMDAzLCAweDYwMDEsIDB4ODAwMCwKCTB4NDAwMCwgMHgwMDAzLCAweDYwMDEsIDB4ODAwMCwKCTB4NDAwMCwgMHgwMDAzLCAweDYwMDEsIDB4ODAwMCwKCgkweDQwMDAsIDB4MDAwNSwgMHg2MDAxLCAweDgwMDAsCgkweDQwMDAsIDB4MDAwMSwgMHg4MDAwLAoJMHg0MDAwLCAweDAwMDEsIDB4ODAwMCwKCTB4NDAwMCwgMHgwMDAxLCAweDgwMDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhIG1zb19zcHRBY3Rpb25CdXR0b25Tb3VuZENhbGNbXSA9CS8vIGFkaiB2YWx1ZSAwIC0gNTQwMAp7Cgl7IDB4MjAwMCwgeyBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMCwgMCB9IH0sCgl7IDB4NjAwMCwgeyBERkZfUHJvcF9nZW9MZWZ0LCBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMCB9IH0sCgl7IDB4NjAwMCwgeyBERkZfUHJvcF9nZW9Ub3AsIERGRl9Qcm9wX2FkanVzdFZhbHVlLCAwIH0gfSwKCXsgMHhhMDAwLCB7IERGRl9Qcm9wX2dlb1JpZ2h0LCAwLCBERkZfUHJvcF9hZGp1c3RWYWx1ZSB9IH0sCgl7IDB4YTAwMCwgeyBERkZfUHJvcF9nZW9Cb3R0b20sIDAsIERGRl9Qcm9wX2FkanVzdFZhbHVlIH0gfSwKCXsgMHg4MDAwLCB7IDEwODAwLCAwLCBERkZfUHJvcF9hZGp1c3RWYWx1ZSB9IH0sCgl7IDB4MjAwMSwgeyAweDA0MDUsIDEsIDEwODAwIH0gfSwJCQkvLyBzY2FsaW5nCSA2Cgl7IDB4MjAwMSwgeyBERkZfUHJvcF9nZW9SaWdodCwgMSwgMiB9IH0sCS8vIGxyIGNlbnRlciA3Cgl7IDB4MjAwMSwgeyBERkZfUHJvcF9nZW9Cb3R0b20sIDEsIDIgfSB9LAkvLyB1bCBjZW50ZXIgOAoKCXsgMHg0MDAxLCB7IC04MDUwLCAweDA0MDYsIDEgfSB9LAkvLyA5Cgl7IDB4NjAwMCwgeyAweDA0MDksIDB4MDQwNywgMCB9IH0sCS8vIGEKCXsgMHg0MDAxLCB7IC0yNzUwLCAweDA0MDYsIDEgfSB9LAkvLyBiCgl7IDB4NjAwMCwgeyAweDA0MGIsIDB4MDQwOCwgMCB9IH0sCS8vIGMKCXsgMHg0MDAxLCB7IC0yOTYwLCAweDA0MDYsIDEgfSB9LAkvLyBkCgl7IDB4NjAwMCwgeyAweDA0MGQsIDB4MDQwNywgMCB9IH0sCS8vIGUKCXsgMHg0MDAxLCB7IDIxMjAsIDB4MDQwNiwgMSB9IH0sCS8vIGYKCXsgMHg2MDAwLCB7IDB4MDQwZiwgMHgwNDA3LCAwIH0gfSwJLy8gMTAKCXsgMHg0MDAxLCB7IC04MDUwLCAweDA0MDYsIDEgfSB9LAkvLyAxMQoJeyAweDYwMDAsIHsgMHgwNDExLCAweDA0MDgsIDAgfSB9LAkvLyAxMgoJeyAweDQwMDEsIHsgODA1MCwgMHgwNDA2LCAxIH0gfSwJLy8gMTMKCXsgMHg2MDAwLCB7IDB4MDQxMywgMHgwNDA4LCAwIH0gfSwJLy8gMTQKCXsgMHg0MDAxLCB7IDI3NTAsIDB4MDQwNiwgMSB9IH0sCS8vIDE1Cgl7IDB4NjAwMCwgeyAweDA0MTUsIDB4MDQwOCwgMCB9IH0sCS8vIDE2Cgl7IDB4NDAwMSwgeyA0MDIwLCAweDA0MDYsIDEgfSB9LAkvLyAxNwoJeyAweDYwMDAsIHsgMHgwNDE3LCAweDA0MDcsIDAgfSB9LAkvLyAxOAoJeyAweDQwMDEsIHsgODA1MCwgMHgwNDA2LCAxIH0gfSwJLy8gMTkKCXsgMHg2MDAwLCB7IDB4MDQxOSwgMHgwNDA3LCAwIH0gfSwJLy8gMWEKCXsgMHg0MDAxLCB7IC01OTMwLCAweDA0MDYsIDEgfSB9LAkvLyAxYgoJeyAweDYwMDAsIHsgMHgwNDFiLCAweDA0MDgsIDAgfSB9LAkvLyAxYwoJeyAweDQwMDEsIHsgNTkzMCwgMHgwNDA2LCAxIH0gfSwJLy8gMWQKCXsgMHg2MDAwLCB7IDB4MDQxZCwgMHgwNDA4LCAwIH0gfQkvLyAxZQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb0FjdGlvbkJ1dHRvblNvdW5kID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRBY3Rpb25CdXR0b25Tb3VuZFZlcnQsIHNpemVvZiggbXNvX3NwdEFjdGlvbkJ1dHRvblNvdW5kVmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdEFjdGlvbkJ1dHRvblNvdW5kU2VnbSwgc2l6ZW9mKCBtc29fc3B0QWN0aW9uQnV0dG9uU291bmRTZWdtICkgPj4gMSwKCShTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSopbXNvX3NwdEFjdGlvbkJ1dHRvblNvdW5kQ2FsYywgc2l6ZW9mKCBtc29fc3B0QWN0aW9uQnV0dG9uU291bmRDYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0RGVmYXVsdDE0MDAsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdEFjdGlvbkJ1dHRvblRleHRSZWN0LCBzaXplb2YoIG1zb19zcHRBY3Rpb25CdXR0b25UZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCgkxMDgwMCwgMTA4MDAsCglOVUxMLCAwLAoJKFN2eE1TRGZmSGFuZGxlKiltc29fc3B0QnV0dG9uSGFuZGxlLCBzaXplb2YoIG1zb19zcHRCdXR0b25IYW5kbGUgKSAvIHNpemVvZiggU3Z4TVNEZmZIYW5kbGUgKQp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdEFjdGlvbkJ1dHRvbk1vdmllVmVydFtdID0KewoJeyAwLCAwIH0sIHsgMjE2MDAsIDAgfSwgeyAyMTYwMCwgMjE2MDAgfSwgeyAwLCAyMTYwMCB9LAoJeyAwLCAwIH0sIHsgMjE2MDAsIDAgfSwgeyAzIE1TT19JLCAyIE1TT19JIH0sIHsgMSBNU09fSSwgMiBNU09fSSB9LAoJeyAyMTYwMCwgMCB9LCB7IDIxNjAwLCAyMTYwMCB9LAl7IDMgTVNPX0ksIDQgTVNPX0kgfSwgeyAzIE1TT19JLCAyIE1TT19JIH0sCgl7IDIxNjAwLCAyMTYwMCB9LCB7IDAsIDIxNjAwIH0sIHsgMSBNU09fSSwgNCBNU09fSSB9LCB7IDMgTVNPX0ksIDQgTVNPX0kgfSwKCXsgMCwgMjE2MDAgfSwgeyAwLCAwIH0sIHsgMSBNU09fSSwgMiBNU09fSSB9LCB7IDEgTVNPX0ksIDQgTVNPX0kgfSwKCgl7IDB4YSBNU09fSSwgMHhjIE1TT19JIH0sIHsgMHhlIE1TT19JLCAweGMgTVNPX0kgfSwgeyAweDEwIE1TT19JLCAweDEyIE1TT19JIH0sIHsgMHgxNCBNU09fSSwgMHgxMiBNU09fSSB9LAoJeyAweDE2IE1TT19JLCAweDE4IE1TT19JIH0sIHsgMHgxNiBNU09fSSwgMHgxYSBNU09fSSB9LCB7IDB4MWMgTVNPX0ksIDB4MWEgTVNPX0kgfSwgeyAweDFlIE1TT19JLCAweDE4IE1TT19JIH0sCgl7IDB4MjAgTVNPX0ksIDB4MTggTVNPX0kgfSwgeyAweDIwIE1TT19JLCAweDIyIE1TT19JIH0sIHsgMHgxZSBNU09fSSwgMHgyMiBNU09fSSB9LCB7IDB4MWMgTVNPX0ksIDB4MjQgTVNPX0kgfSwKCXsgMHgxNiBNU09fSSwgMHgyNCBNU09fSSB9LCB7IDB4MTYgTVNPX0ksIDB4MjYgTVNPX0kgfSwgeyAweDJhIE1TT19JLCAweDI2IE1TT19JIH0sIHsgMHgyYSBNU09fSSwgMHgyOCBNU09fSSB9LAoJeyAweDEwIE1TT19JLCAweDI4IE1TT19JIH0sCXsgMHhlIE1TT19JLCAweDJjIE1TT19JIH0sIHsgMHhhIE1TT19JLCAweDJjIE1TT19JIH0KfTsKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvX3NwdEFjdGlvbkJ1dHRvbk1vdmllU2VnbVtdID0KewoJMHg0MDAwLCAweDAwMDMsIDB4NjAwMSwgMHg4MDAwLAoJMHg0MDAwLCAweDAwMDMsIDB4NjAwMSwgMHg4MDAwLAoJMHg0MDAwLCAweDAwMDMsIDB4NjAwMSwgMHg4MDAwLAoJMHg0MDAwLCAweDAwMDMsIDB4NjAwMSwgMHg4MDAwLAoJMHg0MDAwLCAweDAwMDMsIDB4NjAwMSwgMHg4MDAwLAoJMHg0MDAwLCAweDAwMTIsIDB4NjAwMSwgMHg4MDAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSBtc29fc3B0QWN0aW9uQnV0dG9uTW92aWVDYWxjW10gPQkvLyBhZGogdmFsdWUgMCAtIDU0MDAKewoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAsIDAgfSB9LAoJeyAweDYwMDAsIHsgREZGX1Byb3BfZ2VvTGVmdCwgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAgfSB9LAoJeyAweDYwMDAsIHsgREZGX1Byb3BfZ2VvVG9wLCBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMCB9IH0sCgl7IDB4YTAwMCwgeyBERkZfUHJvcF9nZW9SaWdodCwgMCwgREZGX1Byb3BfYWRqdXN0VmFsdWUgfSB9LAoJeyAweGEwMDAsIHsgREZGX1Byb3BfZ2VvQm90dG9tLCAwLCBERkZfUHJvcF9hZGp1c3RWYWx1ZSB9IH0sCgl7IDB4ODAwMCwgeyAxMDgwMCwgMCwgREZGX1Byb3BfYWRqdXN0VmFsdWUgfSB9LAoJeyAweDIwMDEsIHsgMHgwNDA1LCAxLCAxMDgwMCB9IH0sCQkJLy8gc2NhbGluZwkgNgoJeyAweDIwMDEsIHsgREZGX1Byb3BfZ2VvUmlnaHQsIDEsIDIgfSB9LAkvLyBsciBjZW50ZXIgNwoJeyAweDIwMDEsIHsgREZGX1Byb3BfZ2VvQm90dG9tLCAxLCAyIH0gfSwJLy8gdWwgY2VudGVyIDgKCgl7IDB4NDAwMSwgeyAtODA1MCwgMHgwNDA2LCAxIH0gfSwJLy8gOQoJeyAweDYwMDAsIHsgMHgwNDA5LCAweDA0MDcsIDAgfSB9LAkvLyBhCgl7IDB4NDAwMSwgeyAtNDAyMCwgMHgwNDA2LCAxIH0gfSwJLy8gYgoJeyAweDYwMDAsIHsgMHgwNDBiLCAweDA0MDgsIDAgfSB9LAkvLyBjCgl7IDB4NDAwMSwgeyAtNzAwMCwgMHgwNDA2LCAxIH0gfSwJLy8gZAoJeyAweDYwMDAsIHsgMHgwNDBkLCAweDA0MDcsIDAgfSB9LAkvLyBlCgl7IDB4NDAwMSwgeyAtNjU2MCwgMHgwNDA2LCAxIH0gfSwJLy8gZgoJeyAweDYwMDAsIHsgMHgwNDBmLCAweDA0MDcsIDAgfSB9LAkvLyAxMAoJeyAweDQwMDEsIHsgLTM2MDAsIDB4MDQwNiwgMSB9IH0sCS8vIDExCgl7IDB4NjAwMCwgeyAweDA0MTEsIDB4MDQwOCwgMCB9IH0sCS8vIDEyCgl7IDB4NDAwMSwgeyA0MDIwLCAweDA0MDYsIDEgfSB9LAkvLyAxMwoJeyAweDYwMDAsIHsgMHgwNDEzLCAweDA0MDcsIDAgfSB9LAkvLyAxNAoJeyAweDQwMDEsIHsgNDY2MCwgMHgwNDA2LCAxIH0gfSwJLy8gMTUKCXsgMHg2MDAwLCB7IDB4MDQxNSwgMHgwNDA3LCAwIH0gfSwJLy8gMTYKCXsgMHg0MDAxLCB7IC0yOTYwLCAweDA0MDYsIDEgfSB9LAkvLyAxNwoJeyAweDYwMDAsIHsgMHgwNDE3LCAweDA0MDgsIDAgfSB9LAkvLyAxOAoJeyAweDQwMDEsIHsgLTIzMzAsIDB4MDQwNiwgMSB9IH0sCS8vIDE5Cgl7IDB4NjAwMCwgeyAweDA0MTksIDB4MDQwOCwgMCB9IH0sCS8vIDFhCgl7IDB4NDAwMSwgeyA2NzgwLCAweDA0MDYsIDEgfSB9LAkvLyAxYgoJeyAweDYwMDAsIHsgMHgwNDFiLCAweDA0MDcsIDAgfSB9LAkvLyAxYwoJeyAweDQwMDEsIHsgNzIwMCwgMHgwNDA2LCAxIH0gfSwJLy8gMWQKCXsgMHg2MDAwLCB7IDB4MDQxZCwgMHgwNDA3LCAwIH0gfSwJLy8gMWUKCXsgMHg0MDAxLCB7IDgwNTAsIDB4MDQwNiwgMSB9IH0sCS8vIDFmCgl7IDB4NjAwMCwgeyAweDA0MWYsIDB4MDQwNywgMCB9IH0sCS8vIDIwCgl7IDB4NDAwMSwgeyAyOTYwLCAweDA0MDYsIDEgfSB9LAkvLyAyMQoJeyAweDYwMDAsIHsgMHgwNDIxLCAweDA0MDgsIDAgfSB9LAkvLyAyMgoJeyAweDQwMDEsIHsgMjMzMCwgMHgwNDA2LCAxIH0gfSwJLy8gMjMKCXsgMHg2MDAwLCB7IDB4MDQyMywgMHgwNDA4LCAwIH0gfSwJLy8gMjQKCXsgMHg0MDAxLCB7IDM4MDAsIDB4MDQwNiwgMSB9IH0sCS8vIDI1Cgl7IDB4NjAwMCwgeyAweDA0MjUsIDB4MDQwOCwgMCB9IH0sCS8vIDI2Cgl7IDB4NDAwMSwgeyAtMTA2MCwgMHgwNDA2LCAxIH0gfSwJLy8gMjcKCXsgMHg2MDAwLCB7IDB4MDQyNywgMHgwNDA4LCAwIH0gfSwJLy8gMjgKCXsgMHg0MDAxLCB7IC02MzUwLCAweDA0MDYsIDEgfSB9LAkvLyAyOQoJeyAweDYwMDAsIHsgMHgwNDI5LCAweDA0MDcsIDAgfSB9LAkvLyAyYQoJeyAweDQwMDEsIHsgLTY0MCwgMHgwNDA2LCAxIH0gfSwJLy8gMmIKCXsgMHg2MDAwLCB7IDB4MDQyYiwgMHgwNDA4LCAwIH0gfQkvLyAyYwp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb0FjdGlvbkJ1dHRvbk1vdmllID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRBY3Rpb25CdXR0b25Nb3ZpZVZlcnQsIHNpemVvZiggbXNvX3NwdEFjdGlvbkJ1dHRvbk1vdmllVmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdEFjdGlvbkJ1dHRvbk1vdmllU2VnbSwgc2l6ZW9mKCBtc29fc3B0QWN0aW9uQnV0dG9uTW92aWVTZWdtICkgPj4gMSwKCShTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSopbXNvX3NwdEFjdGlvbkJ1dHRvbk1vdmllQ2FsYywgc2l6ZW9mKCBtc29fc3B0QWN0aW9uQnV0dG9uTW92aWVDYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0RGVmYXVsdDE0MDAsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdEFjdGlvbkJ1dHRvblRleHRSZWN0LCBzaXplb2YoIG1zb19zcHRBY3Rpb25CdXR0b25UZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCgkxMDgwMCwgMTA4MDAsCglOVUxMLCAwLAoJKFN2eE1TRGZmSGFuZGxlKiltc29fc3B0QnV0dG9uSGFuZGxlLCBzaXplb2YoIG1zb19zcHRCdXR0b25IYW5kbGUgKSAvIHNpemVvZiggU3Z4TVNEZmZIYW5kbGUgKQp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdFNtaWxleUZhY2VWZXJ0W10gPQkvLyBhZGogdmFsdWUgMTU1MTAgLSAxNzUyMAp7Cgl7IDEwODAwLCAxMDgwMCB9LCB7IDEwODAwLCAxMDgwMCB9LCB7IDAsIDM2MCB9LAoJeyA3MzA1LAk3NTE1IH0sIHsgMTE2NSwgMTE2NSB9LCB7IDAsIDM2MCB9LAoJeyAxNDI5NSwgNzUxNSB9LCB7IDExNjUsIDExNjUgfSwgeyAwLCAzNjAgfSwKCXsgNDg3MCwgMSBNU09fSSB9LCB7IDg2ODAsIDIgTVNPX0kgfSwgeyAxMjkyMCwgMiBNU09fSSB9LCB7IDE2NzMwLCAxIE1TT19JIH0KfTsKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvX3NwdFNtaWxleUZhY2VTZWdtW10gPQp7CgkweGEyMDMsIDB4NjAwMCwgMHg4MDAwLAoJMHhhMjAzLCAweDYwMDAsIDB4ODAwMCwKCTB4YTIwMywgMHg2MDAwLCAweDgwMDAsCgkweDQwMDAsIDB4MjAwMSwgMHhhYTAwLCAweDgwMDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhIG1zb19zcHRTbWlsZXlGYWNlQ2FsY1tdID0KewoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAsIDE1NTEwIH0gfSwKCXsgMHg4MDAwLCB7IDE3NTIwLCAwLCAweDQwMCB9IH0sCgl7IDB4NDAwMCwgeyAxNTUxMCwgMHg0MDAsIDAgfSB9Cn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyBtc29fc3B0U21pbGV5RmFjZVRleHRSZWN0W10gPQp7Cgl7IHsgMCwgMSBNU09fSSB9LCB7IDQgTVNPX0ksIDIxNjAwIH0gfQp9OwpzdGF0aWMgY29uc3Qgc2FsX0ludDMyIG1zb19zcHRTbWlsZXlGYWNlRGVmYXVsdFtdID0KewoJMSwgMTc1MjAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmSGFuZGxlIG1zb19zcHRTbWlsZXlIYW5kbGVbXSA9CnsKCXsJTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFLAoJCTEwODAwLCAweDEwMCwgMTA4MDAsIDEwODAwLCBNeDgwMDAwMDAwLCAweDdmZmZmZmZmLCAxNTUxMCwgMTc1MjAgfQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb1NtaWxleUZhY2UgPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdFNtaWxleUZhY2VWZXJ0LCBzaXplb2YoIG1zb19zcHRTbWlsZXlGYWNlVmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdFNtaWxleUZhY2VTZWdtLCBzaXplb2YoIG1zb19zcHRTbWlsZXlGYWNlU2VnbSApID4+IDEsCgkoU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEqKW1zb19zcHRTbWlsZXlGYWNlQ2FsYywgc2l6ZW9mKCBtc29fc3B0U21pbGV5RmFjZUNhbGMgKSAvIHNpemVvZiggU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgKSwKCShzYWxfSW50MzIqKW1zb19zcHRTbWlsZXlGYWNlRGVmYXVsdCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0RWxsaXBzZVRleHRSZWN0LCBzaXplb2YoIG1zb19zcHRFbGxpcHNlVGV4dFJlY3QgKSAvIHNpemVvZiggU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyApLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0RWxsaXBzZUdsdWVQb2ludHMsIHNpemVvZiggbXNvX3NwdEVsbGlwc2VHbHVlUG9pbnRzICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdFNtaWxleUhhbmRsZSwgc2l6ZW9mKCBtc29fc3B0U21pbGV5SGFuZGxlICkgLyBzaXplb2YoIFN2eE1TRGZmSGFuZGxlICkJCS8vIGhhbmRsZXMKfTsKCnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHREb251dFZlcnRbXSA9CS8vIGFkaiB2YWx1ZSAwIC0gMTA4MDAKewoJeyAxMDgwMCwgMTA4MDAgfSwgeyAxMDgwMCwgMTA4MDAgfSwgeyAwLCAzNjAgfSwKCXsgMTA4MDAsIDEwODAwIH0sIHsgMSBNU09fSSwgMSBNU09fSSB9LCB7IDAsIDM2MCB9Cn07CnN0YXRpYyBjb25zdCBzYWxfdUludDE2IG1zb19zcHREb251dFNlZ21bXSA9CnsKCTB4YTIwMywgMHg2MDAwLCAweGEyMDMsIDB4ODAwMAp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgbXNvX3NwdERvbnV0Q2FsY1tdID0KewoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAsIDAgfSB9LAoJeyAweDgwMDAsIHsgMTA4MDAsIDAsIERGRl9Qcm9wX2FkanVzdFZhbHVlIH0gfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZIYW5kbGUgbXNvX3NwdERvbnV0SGFuZGxlW10gPQp7Cgl7CU1TREZGX0hBTkRMRV9GTEFHU19SQU5HRSwKCQkweDEwMCwgMTA4MDAsIDEwODAwLCAxMDgwMCwgMCwgMTA4MDAsIE14ODAwMDAwMDAsIDB4N2ZmZmZmZmYgfQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb0RvbnV0ID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHREb251dFZlcnQsIHNpemVvZiggbXNvX3NwdERvbnV0VmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdERvbnV0U2VnbSwgc2l6ZW9mKCBtc29fc3B0RG9udXRTZWdtICkgPj4gMSwKCShTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSopbXNvX3NwdERvbnV0Q2FsYywgc2l6ZW9mKCBtc29fc3B0RG9udXRDYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0RGVmYXVsdDU0MDAsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdEVsbGlwc2VUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0RWxsaXBzZVRleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTIxNjAwLCAyMTYwMCwKCU14ODAwMDAwMDAsIE14ODAwMDAwMDAsCgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdEVsbGlwc2VHbHVlUG9pbnRzLCBzaXplb2YoIG1zb19zcHRFbGxpcHNlR2x1ZVBvaW50cyApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoU3Z4TVNEZmZIYW5kbGUqKW1zb19zcHREb251dEhhbmRsZSwgc2l6ZW9mKCBtc29fc3B0RG9udXRIYW5kbGUgKSAvIHNpemVvZiggU3Z4TVNEZmZIYW5kbGUgKQkJLy8gaGFuZGxlcwp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdE5vU21va2luZ1ZlcnRbXSA9CS8vIGFkaiB2YWx1ZSAwIC0gNzIwMAp7Cgl7IDEwODAwLCAxMDgwMCB9LCAgeyAxMDgwMCwJMTA4MDAgfSwgeyAwLCAzNjAgfSwKCXsgMCBNU09fSSwgMCBNU09fSSB9LCB7IDEgTVNPX0ksIDEgTVNPX0kgfSwKCXsgOSBNU09fSSwgMHhhIE1TT19JIH0sIHsgMHhiIE1TT19JLCAweGMgTVNPX0kgfSwgeyAwIE1TT19JLCAwIE1TT19JIH0sIHsgMSBNU09fSSwgMSBNU09fSSB9LAoJeyAweGQgTVNPX0ksIDB4ZSBNU09fSSB9LCB7IDB4ZiBNU09fSSwgMHgxMCBNU09fSSB9Cn07CnN0YXRpYyBjb25zdCBzYWxfdUludDE2IG1zb19zcHROb1Ntb2tpbmdTZWdtW10gPQp7CgkweGEyMDMsIDB4NjAwMCwgMHhhNDA0LCAweDYwMDAsIDB4YTQwNCwgMHg2MDAwLCAweDgwMDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhIG1zb19zcHROb1Ntb2tpbmdDYWxjW10gPQp7Cgl7IDB4MjAwMCwgeyBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMCwgMCB9IH0sCQkJLy8gMAoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIERGRl9Qcm9wX2FkanVzdFZhbHVlIH0gfSwJCS8vIDEKCXsgMHg4MDAwLCB7IDEwODAwLCAwLCBERkZfUHJvcF9hZGp1c3RWYWx1ZSB9IH0sCQkvLyAyCgl7IDB4MjAwMSwgeyBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMSwgMiB9IH0sCQkJLy8gMwoJeyAweGEwODAsIHsgMHg0MDMsIDAsIDB4NDAyIH0gfSwJCQkJCS8vIDQKCXsgMHg4MDAwLCB7IDEwODAwLCAwLCAweDQwMyB9IH0sCQkJCQkvLyA1IHgxCgl7IDB4NDAwMCwgeyAxMDgwMCwgMHg0MDMsIDAgfSB9LAkJCQkJLy8gNiB4MgoJeyAweDgwMDAsIHsgMTA4MDAsIDAsIDB4NDA0IH0gfSwJCQkJCS8vIDcgeTEKCXsgMHg0MDAwLCB7IDEwODAwLCAweDQwNCwgMCB9IH0sCQkJCQkvLyA4IHkyCgl7IDB4NjA4MSwgeyAweDQwNSwgMHg0MDcsIDQ1IH0gfSwJCQkJCS8vIDkKCXsgMHg2MDgyLCB7IDB4NDA1LCAweDQwNywgNDUgfSB9LAkJCQkJLy8gYQoJeyAweDYwODEsIHsgMHg0MDUsIDB4NDA4LCA0NSB9IH0sCQkJCQkvLyBiCgl7IDB4NjA4MiwgeyAweDQwNSwgMHg0MDgsIDQ1IH0gfSwJCQkJCS8vIGMKCXsgMHg2MDgxLCB7IDB4NDA2LCAweDQwOCwgNDUgfSB9LAkJCQkJLy8gZAoJeyAweDYwODIsIHsgMHg0MDYsIDB4NDA4LCA0NSB9IH0sCQkJCQkvLyBlCgl7IDB4NjA4MSwgeyAweDQwNiwgMHg0MDcsIDQ1IH0gfSwJCQkJCS8vIGYKCXsgMHg2MDgyLCB7IDB4NDA2LCAweDQwNywgNDUgfSB9CQkJCQkvLyAxMAp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZIYW5kbGUgbXNvX3NwdE5vU21va2luZ0hhbmRsZVtdID0KewoJewlNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0UsCgkJMHgxMDAsIDEwODAwLCAxMDgwMCwgMTA4MDAsIDAsIDcyMDAsIE14ODAwMDAwMDAsIDB4N2ZmZmZmZmYgfQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb05vU21va2luZyA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0Tm9TbW9raW5nVmVydCwgc2l6ZW9mKCBtc29fc3B0Tm9TbW9raW5nVmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdE5vU21va2luZ1NlZ20sIHNpemVvZiggbXNvX3NwdE5vU21va2luZ1NlZ20gKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0Tm9TbW9raW5nQ2FsYywgc2l6ZW9mKCBtc29fc3B0Tm9TbW9raW5nQ2FsYyApIC8gc2l6ZW9mKCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSApLAoJKHNhbF9JbnQzMiopbXNvX3NwdERlZmF1bHQyNzAwLAoJKFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMqKW1zb19zcHRFbGxpcHNlVGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdEVsbGlwc2VUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRFbGxpcHNlR2x1ZVBvaW50cywgc2l6ZW9mKCBtc29fc3B0RWxsaXBzZUdsdWVQb2ludHMgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKFN2eE1TRGZmSGFuZGxlKiltc29fc3B0Tm9TbW9raW5nSGFuZGxlLCBzaXplb2YoIG1zb19zcHROb1Ntb2tpbmdIYW5kbGUgKSAvIHNpemVvZiggU3Z4TVNEZmZIYW5kbGUgKQkJLy8gaGFuZGxlcwp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdEJsb2NrQXJjVmVydFtdID0JLy8gYWRqIHZhbHVlIDAgKGRlZ3JlZXMpCnsJCQkJCQkJCQkJCQkJCS8vIGFkaiB2YWx1ZSAxOgkwIC0+IDEwODAwOwoJeyAwLCAwIH0sIHsgMjE2MDAsIDIxNjAwIH0sIHsgNCBNU09fSSwgMyBNU09fSSB9LCB7IDIgTVNPX0ksIDMgTVNPX0kgfSwKCXsgNSBNU09fSSwgNSBNU09fSSB9LCB7IDYgTVNPX0ksIDYgTVNPX0kgfSwgeyAyIE1TT19JLCAzIE1TT19JIH0sIHsgNCBNU09fSSwgMyBNU09fSSB9Cn07CnN0YXRpYyBjb25zdCBzYWxfdUludDE2IG1zb19zcHRCbG9ja0FyY1NlZ21bXSA9CnsKCTB4QTQwNCwgMHhhNTA0LCAweDYwMDEsIDB4ODAwMAp9OwpzdGF0aWMgY29uc3Qgc2FsX0ludDMyIG1zb19zcHRCbG9ja0FyY0RlZmF1bHRbXSA9CnsKCTIsIDE4MCwgNTQwMAp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgbXNvX3NwdEJsb2NrQXJjQ2FsY1tdID0KewoJeyAweDQwMGEsIHsgMTA4MDAsIERGRl9Qcm9wX2FkanVzdFZhbHVlLCAwIH0gfSwKCXsgMHg0MDA5LCB7IDEwODAwLCBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMCB9IH0sCgl7IDB4MjAwMCwgeyAweDQwMCwgMTA4MDAsIDAgfSB9LAoJeyAweDIwMDAsIHsgMHg0MDEsIDEwODAwLCAwIH0gfSwKCXsgMHg4MDAwLCB7IDIxNjAwLCAwLCAweDQwMiB9IH0sCgl7IDB4ODAwMCwgeyAxMDgwMCwgMCwgREZGX1Byb3BfYWRqdXN0MlZhbHVlIH0gfSwKCXsgMHg0MDAwLCB7IDEwODAwLCBERkZfUHJvcF9hZGp1c3QyVmFsdWUsIDAgfSB9LAoJeyAweDYwMGEsIHsgMHg0MDUsIERGRl9Qcm9wX2FkanVzdFZhbHVlLCAwIH0gfSwKCXsgMHg2MDA5LCB7IDB4NDA1LCBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMCB9IH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmSGFuZGxlIG1zb19zcHRCbG9ja0FyY0hhbmRsZVtdID0KewoJewlNU0RGRl9IQU5ETEVfRkxBR1NfUE9MQVIgfCBNU0RGRl9IQU5ETEVfRkxBR1NfUkFESVVTX1JBTkdFLAoJCTB4MTAxLCAweDEwMCwgMTA4MDAsIDEwODAwLCAwLCAxMDgwMCwgTXg4MDAwMDAwMCwgMHg3ZmZmZmZmZiB9Cn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvQmxvY2tBcmMgPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdEJsb2NrQXJjVmVydCwgc2l6ZW9mKCBtc29fc3B0QmxvY2tBcmNWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0QmxvY2tBcmNTZWdtLCBzaXplb2YoIG1zb19zcHRCbG9ja0FyY1NlZ20gKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0QmxvY2tBcmNDYWxjLCBzaXplb2YoIG1zb19zcHRCbG9ja0FyY0NhbGMgKSAvIHNpemVvZiggU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgKSwKCShzYWxfSW50MzIqKW1zb19zcHRCbG9ja0FyY0RlZmF1bHQsCglOVUxMLCAwLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCU5VTEwsIDAsCgkoU3Z4TVNEZmZIYW5kbGUqKW1zb19zcHRCbG9ja0FyY0hhbmRsZSwgc2l6ZW9mKCBtc29fc3B0QmxvY2tBcmNIYW5kbGUgKSAvIHNpemVvZiggU3Z4TVNEZmZIYW5kbGUgKQkJLy8gaGFuZGxlcwp9OwoKLy8gYXdhcmUgOiBjb250cm9sIHBvaW50cyBhcmUgYWx3YXlzIHBhcnQgb2YgdGhlIGJvdW5kaW5nIGJveApzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0SGVhcnRWZXJ0W10gPQp7Cgl7IDEwODAwLCAyMTU5OSB9LCB7IDMyMSwgNjg4NiB9LCB7IDcwLCA2MDM2IH0sCQkvLyBwcHAKCXsgLTksIDU3NjYgfSwgeyAtMSwJNTQ3NCB9LCB7IDIsIDUxOTIgfSwJCQkvLyBjY3AKCXsgNiwgNDkxOCB9LCB7IDQzLCA0NjQxIH0sIHsgMTAxLCA0MzcwIH0sCQkJLy8gY2NwCgl7IDE1OSwgNDEwMyB9LCB7IDI0NSwgMzgzNyB9LCB7IDM1MywgMzU4MiB9LAkJLy8gY2NwCgl7IDQ2MCwgMzMyNiB9LCB7IDU5MSwgMzA3NyB9LCB7IDc0MSwgMjgzOSB9LAkJLy8gY2NwCgl7IDg5MiwgMjU5OCB9LCB7IDEwNjYsIDIzNjkgfSwgeyAxMjUzLCAyMTU1IH0sCQkvLyBjY3AKCXsgMTQ0MywJMTkzOCB9LCB7IDE2NTEsCTE3MzIgfSwgeyAxODc0LAkxNTQzIH0sCQkvLyBjY3AKCXsgMjA5NywJMTM1MSB9LCB7IDIzMzcsIDExNzQgfSwgeyAyNTg3LCAxMDE0IH0sCQkvLyBjY3AKCXsgMjgzOSwJODU0IH0sIHsgMzEwNiwgNzA4IH0sIHsgMzM4MCwgNTg0IH0sCQkvLyBjY3AKCXsgMzY1NiwJNDU5IH0sIHsgMzk0NSwgMzUwIH0sIHsgNDIzNywgMjY0IH0sCQkvLyBjY3AKCXsgNDUzMywJMTc2IH0sIHsgNDgzOCwgMTA4IH0sIHsgNTE0NCwgNjYgfSwJCQkvLyBjY3AKCXsgNTQ1NCwJMjIgfSwgeyA1NzcxLCAxIH0sIHsgNjA4NiwgMyB9LAkJCQkvLyBjY3AKCXsgNjQwNywJNyB9LCB7IDY3MzEsIDM1IH0sIHsgNzA0OCwgODkgfSwJCQkvLyBjY3AKCXsgNzM3NCwJMTQ0IH0sIHsgNzcwMCwgMjI2IH0sIHsgODAxNSwgMzM1IH0sCQkvLyBjY3AKCXsgODM0NCwJNDQ3IH0sIHsgODY2NywgNTkwIH0sIHsgODk3MiwgNzU2IH0sCQkvLyBjY3AKCXsgOTI5NywJOTMyIH0sIHsgOTYxMywgMTEzNSB9LCB7IDk5MDcsIDEzNjMgfSwJCS8vIGNjcAoJeyAxMDIyNCwgMTYwOSB9LCB7IDEwNTA0LCAxOTAwIH0sIHsgMTA4MDIsIDIxNjkgfSwJLy8gY2NwCgl7IDExNjk3LCAxMzYzIH0sCQkJCQkJCQkJLy8gcAoJeyAxMTk3MSwgMTExNiB9LCB7IDEyMzA0LCA5MzQgfSwgeyAxMjYzMCwgNzU2IH0sCS8vIGNjcAoJeyAxMjkzNSwgNTkwIH0sIHsgMTM1MjgsIDQ1MCB9LCB7IDEzNTg5LCAzMzUgfSwJCS8vIGNjcAoJeyAxMzkwMSwgMjI2IH0sIHsgMTQyMjcsIDE0NCB9LCB7IDE0NTU2LCA4OSB9LAkJLy8gY2NwCgl7IDE0ODcyLCAzNSB9LCB7IDE1MTk1LCA3IH0sIHsgMTU1MTcsIDMgfSwJCQkvLyBjY3AKCXsgMTU4MzAsIDAgfSwgeyAxNjE0NywgMjIgfSwgeyAxNjQ1OCwgNjYgfSwJCQkvLyBjY3AKCXsgMTY3NjQsIDEwOSB9LCB7IDE3MDY4LCAxNzcgfSwgeyAxNzM2NSwgMjY0IH0sCQkvLyBjY3AKCXsgMTc2NTgsIDM0OSB9LCB7IDE3OTQ2LCA0NTggfSwgeyAxODIyMiwgNTg0IH0sCQkvLyBjY3AKCXsgMTg0OTYsIDcwOCB9LCB7IDE4NzYyLCA4NTQgfSwgeyAxOTAxNSwgMTAxNCB9LAkvLyBjY3AKCXsgMTkyNjQsIDExNzIgfSwgeyAxOTUwNCwgMTM0OSB9LCB7IDE5NzMwLCAxNTQzIH0sCS8vIGNjcAoJeyAxOTk1MCwgMTczMSB9LCB7IDIwMTU4LCAxOTM3IH0sIHsgMjAzNTAsIDIxNTUgfSwJLy8gY2NwCgl7IDIwNTM2LCAyMzY5IH0sIHsgMjA3MTAsIDI1OTggfSwgeyAyMDg2MSwgMjgzOSB9LAkvLyBjY3AKCXsgMjEwMTAsIDMwNzQgfSwgeyAyMTE0MywgMzMyMyB9LCB7IDIxMjUxLCAzNTgyIH0sCS8vIGNjcAoJeyAyMTM1NywgMzgzNSB9LCB7IDIxNDQzLCA0MDk5IH0sIHsgMjE1MDIsIDQzNzAgfSwJLy8gY2NwCgl7IDIxNTYxLCA0NjM5IH0sIHsgMjE1OTUsIDQ5MTYgfSwgeyAyMTYwMCwgNTE5MiB9LAkvLyBjY3AKCXsgMjE2MDYsIDU0NzQgfSwgeyAyMTU4NCwgNTc2MCB9LCB7IDIxNTMyLCA2MDM2IH0sCS8vIGNjcAoJeyAyMTQ3OCwgNjMyNiB9LCB7IDIxMzY2LCA2NjAzIH0sIHsgMjEyODIsIDY4ODcgfSwJLy8gY2NwCgl7IDEwODAyLCAyMTYwMiB9CQkJCQkJCQkJLy8gcAp9OwpzdGF0aWMgY29uc3Qgc2FsX3VJbnQxNiBtc29fc3B0SGVhcnRTZWdtW10gPQp7CgkweDQwMDAsIDB4MDAwMiwgMHgyMDEwLCAweDAwMDEsIDB4MjAxMCwgMHgwMDAxLCAweDYwMDEsIDB4ODAwMAp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyBtc29fc3B0SGVhcnRUZXh0UmVjdFtdID0KewoJeyB7IDUwODAsIDI1NDAgfSwgeyAxNjUyMCwgMTM1NTAgfSB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRIZWFydEdsdWVQb2ludHNbXSA9CnsKCXsgMTA4MDAsIDIxODAgfSwgeyAzMDkwLCAxMDgwMCB9LCB7IDEwODAwLCAyMTYwMCB9LCB7IDE4NDkwLCAxMDgwMCB9Cn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvSGVhcnQgPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdEhlYXJ0VmVydCwgc2l6ZW9mKCBtc29fc3B0SGVhcnRWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0SGVhcnRTZWdtLCBzaXplb2YoIG1zb19zcHRIZWFydFNlZ20gKSA+PiAxLAoJTlVMTCwgMCwKCU5VTEwsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdEhlYXJ0VGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdEhlYXJ0VGV4dFJlY3QgKSAvIHNpemVvZiggU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyApLAoJMjE2MTUsIDIxNjAyLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0SGVhcnRHbHVlUG9pbnRzLCBzaXplb2YoIG1zb19zcHRIZWFydEdsdWVQb2ludHMgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJTlVMTCwgMAkJLy8gaGFuZGxlcwp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdExpZ2h0bmluZ0JvbGRWZXJ0W10gPQp7Cgl7IDg0NTgsCTAgfSwgeyAwLCAzOTIzIH0sIHsgNzU2NCwgODQxNiB9LCB7IDQ5OTMsIDk3MjAgfSwKCXsgMTIxOTcsIDEzOTA0IH0sIHsgOTk4NywgMTQ5MzQgfSwgeyAyMTYwMCwgMjE2MDAgfSwgeyAxNDc2OCwgMTI5MTEgfSwKCXsgMTY1NTgsIDEyMDE2IH0sIHsgMTEwMzAsIDY4NDAgfSwgeyAxMjgzMSwgNjEyMCB9LCB7IDg0NTgsIDAgfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyBtc29fc3B0TGlnaHRuaW5nQm9sZFRleHRSZWN0W10gPQp7Cgl7IHsgODY4MCwgNzQxMCB9LCB7IDEzOTcwLCAxNDE5MCB9IH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdExpZ2h0bmluZ0JvbGRHbHVlUG9pbnRzW10gPQp7Cgl7IDg0NTgsIDAgfSwgeyAwLCAzOTIzIH0sIHsgNDk5MywgOTcyMCB9LCB7IDk5ODcsIDE0OTM0IH0sIHsgMjE2MDAsIDIxNjAwIH0sCgl7IDE2NTU4LCAxMjAxNiB9LCB7IDEyODMxLCA2MTIwIH0KfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29MaWdodG5pbmdCb2xkID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRMaWdodG5pbmdCb2xkVmVydCwgc2l6ZW9mKCBtc29fc3B0TGlnaHRuaW5nQm9sZFZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJTlVMTCwgMCwKCU5VTEwsIDAsCglOVUxMLAoJKFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMqKW1zb19zcHRMaWdodG5pbmdCb2xkVGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdExpZ2h0bmluZ0JvbGRUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRMaWdodG5pbmdCb2xkR2x1ZVBvaW50cywgc2l6ZW9mKCBtc29fc3B0TGlnaHRuaW5nQm9sZEdsdWVQb2ludHMgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJTlVMTCwgMAkJLy8gaGFuZGxlcwp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdFN1blZlcnRbXSA9CS8vIGFkaiB2YWx1ZSAyNzAwIC0+IDEwMTI1CnsKCXsgMCwgMTA4MDAgfSwJCQkJeyA0IE1TT19JLCA4IE1TT19JIH0sCQl7IDQgTVNPX0ksIDkgTVNPX0kgfSwKCXsgMHgwYSBNU09fSSwgMHgwYiBNU09fSSB9LAl7IDB4MGMgTVNPX0ksIDB4MGQgTVNPX0kgfSwgeyAweDBlIE1TT19JLCAweDBmIE1TT19JIH0sCgl7IDB4MTAgTVNPX0ksIDB4MTEgTVNPX0kgfSwgeyAweDEyIE1TT19JLCAweDEzIE1TT19JIH0sIHsgMHgxNCBNU09fSSwgMHgxNSBNU09fSSB9LAoJeyAweDE2IE1TT19JLCAweDE3IE1TT19JIH0sIHsgMHgxOCBNU09fSSwgMHgxOSBNU09fSSB9LCB7IDB4MWEgTVNPX0ksIDB4MWIgTVNPX0kgfSwKCXsgMHgxYyBNU09fSSwgMHgxZCBNU09fSSB9LCB7IDB4MWUgTVNPX0ksIDB4MWYgTVNPX0kgfSwgeyAweDIwIE1TT19JLCAweDIxIE1TT19JIH0sCgl7IDB4MjIgTVNPX0ksIDB4MjMgTVNPX0kgfSwgeyAweDI0IE1TT19JLCAweDI1IE1TT19JIH0sIHsgMHgyNiBNU09fSSwgMHgyNyBNU09fSSB9LAoJeyAweDI4IE1TT19JLCAweDI5IE1TT19JIH0sIHsgMHgyYSBNU09fSSwgMHgyYiBNU09fSSB9LCB7IDB4MmMgTVNPX0ksIDB4MmQgTVNPX0kgfSwKCXsgMHgyZSBNU09fSSwgMHgyZiBNU09fSSB9LCB7IDB4MzAgTVNPX0ksIDB4MzEgTVNPX0kgfSwgeyAweDMyIE1TT19JLCAweDMzIE1TT19JIH0sCgl7IDEwODAwLCAxMDgwMCB9LCB7IDB4MzYgTVNPX0ksIDB4MzYgTVNPX0kgfSwJeyAwLCAzNjAgfQp9OwpzdGF0aWMgY29uc3Qgc2FsX3VJbnQxNiBtc29fc3B0U3VuU2VnbVtdID0KewoJMHg0MDAwLCAweDAwMDIsIDB4NjAwMSwgMHg4MDAwLAoJMHg0MDAwLCAweDAwMDIsIDB4NjAwMSwgMHg4MDAwLAoJMHg0MDAwLCAweDAwMDIsIDB4NjAwMSwgMHg4MDAwLAoJMHg0MDAwLCAweDAwMDIsIDB4NjAwMSwgMHg4MDAwLAoJMHg0MDAwLCAweDAwMDIsIDB4NjAwMSwgMHg4MDAwLAoJMHg0MDAwLCAweDAwMDIsIDB4NjAwMSwgMHg4MDAwLAoJMHg0MDAwLCAweDAwMDIsIDB4NjAwMSwgMHg4MDAwLAoJMHg0MDAwLCAweDAwMDIsIDB4NjAwMSwgMHg4MDAwLAoJMHhhMjAzLCAweDYwMDAsIDB4ODAwMAp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgbXNvX3NwdFN1bkNhbGNbXSA9CnsKCXsgMHgyMDAwLCB7IERGRl9Qcm9wX2FkanVzdFZhbHVlLCAwLCAwIH0gfSwKCXsgMHg4MDAwLCB7IDIxNjAwLCAwLCBERkZfUHJvcF9hZGp1c3RWYWx1ZSB9IH0sCgl7IDB4MjAwMCwgeyBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMCwgMjcwMCB9IH0sCgl7IDB4MjAwMSwgeyAweDQwMiwgNTA4MCwgNzQyNSB9IH0sCgl7IDB4MjAwMCwgeyAweDQwMywgMjU0MCwgMCB9IH0sCgl7IDB4ODAwMCwgeyAxMDEyNSwgMCwgREZGX1Byb3BfYWRqdXN0VmFsdWUgfSB9LAoJeyAweDIwMDEsIHsgMHg0MDUsIDIxMjAsIDc0MjUgfSB9LAoJeyAweDIwMDAsIHsgMHg0MDYsIDIxMCwgMCB9IH0sCgl7IDB4NDAwMCwgeyAxMDgwMCwgMHg0MDcsIDAgfSB9LAkvLyB5MSAoMHg4KQoJeyAweDgwMDAsIHsgMTA4MDAsIDAsIDB4NDA3IH0gfSwJLy8geTIgKDB4OSkKCXsgMHgwMDgxLCB7IDAsIDEwODAwLCA0NSB9IH0sCQkvLyAweGEKCXsgMHgwMDgyLCB7IDAsIDEwODAwLCA0NSB9IH0sCQkvLyAweGIKCXsgMHg2MDgxLCB7IDB4NDA0LCAweDQwOCwgNDUgfSB9LAkvLyAweGMKCXsgMHg2MDgyLCB7IDB4NDA0LCAweDQwOCwgNDUgfSB9LAkvLyAweGQKCXsgMHg2MDgxLCB7IDB4NDA0LCAweDQwOSwgNDUgfSB9LAkvLyAweGUKCXsgMHg2MDgyLCB7IDB4NDA0LCAweDQwOSwgNDUgfSB9LAkvLyAweGYKCXsgMHgwMDgxLCB7IDAsIDEwODAwLCA5MCB9IH0sCQkvLyAweDEwCgl7IDB4MDA4MiwgeyAwLCAxMDgwMCwgOTAgfSB9LAkJLy8gMHgxMQoJeyAweDYwODEsIHsgMHg0MDQsIDB4NDA4LCA5MCB9IH0sCS8vIDB4MTIKCXsgMHg2MDgyLCB7IDB4NDA0LCAweDQwOCwgOTAgfSB9LAkvLyAweDEzCgl7IDB4NjA4MSwgeyAweDQwNCwgMHg0MDksIDkwIH0gfSwJLy8gMHgxNAoJeyAweDYwODIsIHsgMHg0MDQsIDB4NDA5LCA5MCB9IH0sCS8vIDB4MTUKCXsgMHgwMDgxLCB7IDAsIDEwODAwLCAxMzUgfSB9LAkJLy8gMHgxNgoJeyAweDAwODIsIHsgMCwgMTA4MDAsIDEzNSB9IH0sCQkvLyAweDE3Cgl7IDB4NjA4MSwgeyAweDQwNCwgMHg0MDgsIDEzNSB9IH0sCS8vIDB4MTgKCXsgMHg2MDgyLCB7IDB4NDA0LCAweDQwOCwgMTM1IH0gfSwJLy8gMHgxOQoJeyAweDYwODEsIHsgMHg0MDQsIDB4NDA5LCAxMzUgfSB9LAkvLyAweDFhCgl7IDB4NjA4MiwgeyAweDQwNCwgMHg0MDksIDEzNSB9IH0sCS8vIDB4MWIKCXsgMHgwMDgxLCB7IDAsIDEwODAwLCAxODAgfSB9LAkJLy8gMHgxYwoJeyAweDAwODIsIHsgMCwgMTA4MDAsIDE4MCB9IH0sCQkvLyAweDFkCgl7IDB4NjA4MSwgeyAweDQwNCwgMHg0MDgsIDE4MCB9IH0sCS8vIDB4MWUKCXsgMHg2MDgyLCB7IDB4NDA0LCAweDQwOCwgMTgwIH0gfSwJLy8gMHgxZgoJeyAweDYwODEsIHsgMHg0MDQsIDB4NDA5LCAxODAgfSB9LAkvLyAweDIwCgl7IDB4NjA4MiwgeyAweDQwNCwgMHg0MDksIDE4MCB9IH0sCS8vIDB4MjEKCXsgMHgwMDgxLCB7IDAsIDEwODAwLCAyMjUgfSB9LAkJLy8gMHgyMgoJeyAweDAwODIsIHsgMCwgMTA4MDAsIDIyNSB9IH0sCQkvLyAweDIzCgl7IDB4NjA4MSwgeyAweDQwNCwgMHg0MDgsIDIyNSB9IH0sCS8vIDB4MjQKCXsgMHg2MDgyLCB7IDB4NDA0LCAweDQwOCwgMjI1IH0gfSwJLy8gMHgyNQoJeyAweDYwODEsIHsgMHg0MDQsIDB4NDA5LCAyMjUgfSB9LAkvLyAweDI2Cgl7IDB4NjA4MiwgeyAweDQwNCwgMHg0MDksIDIyNSB9IH0sCS8vIDB4MjcKCXsgMHgwMDgxLCB7IDAsIDEwODAwLCAyNzAgfSB9LAkJLy8gMHgyOAoJeyAweDAwODIsIHsgMCwgMTA4MDAsIDI3MCB9IH0sCQkvLyAweDI5Cgl7IDB4NjA4MSwgeyAweDQwNCwgMHg0MDgsIDI3MCB9IH0sCS8vIDB4MmEKCXsgMHg2MDgyLCB7IDB4NDA0LCAweDQwOCwgMjcwIH0gfSwJLy8gMHgyYgoJeyAweDYwODEsIHsgMHg0MDQsIDB4NDA5LCAyNzAgfSB9LAkvLyAweDJjCgl7IDB4NjA4MiwgeyAweDQwNCwgMHg0MDksIDI3MCB9IH0sCS8vIDB4MmQKCXsgMHgwMDgxLCB7IDAsIDEwODAwLCAzMTUgfSB9LAkJLy8gMHgyZQoJeyAweDAwODIsIHsgMCwgMTA4MDAsIDMxNSB9IH0sCQkvLyAweDJmCgl7IDB4NjA4MSwgeyAweDQwNCwgMHg0MDgsIDMxNSB9IH0sCS8vIDB4MzAKCXsgMHg2MDgyLCB7IDB4NDA0LCAweDQwOCwgMzE1IH0gfSwJLy8gMHgzMQoJeyAweDYwODEsIHsgMHg0MDQsIDB4NDA5LCAzMTUgfSB9LAkvLyAweDMyCgl7IDB4NjA4MiwgeyAweDQwNCwgMHg0MDksIDMxNSB9IH0sCS8vIDB4MzMKCXsgMHgyMDgxLCB7IERGRl9Qcm9wX2FkanVzdFZhbHVlLCAxMDgwMCwgNDUgfSB9LAkvLyAweDM0CSggdGV4dGJveCApCgl7IDB4MjA4MSwgeyBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMTA4MDAsIDIyNSB9IH0sCS8vIDB4MzUKCXsgMHg4MDAwLCB7IDEwODAwLCAwLCBERkZfUHJvcF9hZGp1c3RWYWx1ZSB9IH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgbXNvX3NwdFN1blRleHRSZWN0W10gPQp7Cgl7IHsgMHgzNCBNU09fSSwgMHgzNCBNU09fSSB9LCB7IDB4MzUgTVNPX0ksIDB4MzUgTVNPX0kgfSB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkhhbmRsZSBtc29fc3B0U3VuSGFuZGxlW10gPQp7Cgl7CU1TREZGX0hBTkRMRV9GTEFHU19SQU5HRSwKCQkweDEwMCwgMTA4MDAsIDEwODAwLCAxMDgwMCwgMjcwMCwgMTAxMjUsIE14ODAwMDAwMDAsIDB4N2ZmZmZmZmYgfQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb1N1biA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0U3VuVmVydCwgc2l6ZW9mKCBtc29fc3B0U3VuVmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdFN1blNlZ20sIHNpemVvZiggbXNvX3NwdFN1blNlZ20gKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0U3VuQ2FsYywgc2l6ZW9mKCBtc29fc3B0U3VuQ2FsYyApIC8gc2l6ZW9mKCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSApLAoJKHNhbF9JbnQzMiopbXNvX3NwdERlZmF1bHQ1NDAwLAoJKFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMqKW1zb19zcHRTdW5UZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0U3VuVGV4dFJlY3QgKSAvIHNpemVvZiggU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyApLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0U3RhbmRhcmRHbHVlUG9pbnRzLCBzaXplb2YoIG1zb19zcHRTdGFuZGFyZEdsdWVQb2ludHMgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKFN2eE1TRGZmSGFuZGxlKiltc29fc3B0U3VuSGFuZGxlLCBzaXplb2YoIG1zb19zcHRTdW5IYW5kbGUgKSAvIHNpemVvZiggU3Z4TVNEZmZIYW5kbGUgKQkJLy8gaGFuZGxlcwp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdE1vb25WZXJ0W10gPQkvLyBhZGogdmFsdWUgMCAtPiAxODkwMAp7Cgl7IDIxNjAwLCAwIH0sCgl7IDMgTVNPX0ksIDQgTVNPX0kgfSwJeyAwIE1TT19JLCA1MDgwIH0sCQl7IDAgTVNPX0ksIDEwODAwIH0sCS8vIGNjcAoJeyAwIE1TT19JLCAxNjUyMCB9LAkJeyAzIE1TT19JLCA1IE1TT19JIH0sCXsgMjE2MDAsIDIxNjAwIH0sCS8vIGNjcAoJeyA5NzQwLCAyMTYwMCB9LAkJeyAwLCAxNjczMCB9LAkJCXsgMCwgMTA4MDAgfSwJCS8vIGNjcAoJeyAwLCA0ODcwIH0sCQkJeyA5NzQwLCAwIH0sCQkJeyAyMTYwMCwgMAl9CQkvLyBjY3AKfTsKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvX3NwdE1vb25TZWdtW10gPQp7CgkweDQwMDAsIDB4MjAwNCwgMHg2MDAwLCAweDgwMDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhIG1zb19zcHRNb29uQ2FsY1tdID0KewoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAsIDAgfSB9LAoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIERGRl9Qcm9wX2FkanVzdFZhbHVlIH0gfSwKCXsgMHgyMDAxLCB7IDB4NDAxLCAxLCAyIH0gfSwKCXsgMHg2MDAwLCB7IDB4NDAyLCBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMCB9IH0sCgl7IDB4MjAwMSwgeyBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMTc5NCwgMTAwMDAgfSB9LAoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIDB4MDQwNCB9IH0sCgl7IDB4MjAwMSwgeyBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgNDAwLCAxODkwMCB9IH0sCgl7IDB4ODA4MSwgeyAwLCAxMDgwMCwgMHg0MDYgfSB9LAoJeyAweDgwODIsIHsgMCwgMTA4MDAsIDB4NDA2IH0gfSwKCXsgMHg2MDAwLCB7IDB4NDA3LCAweDQwNywgMCB9IH0sCgl7IDB4ODAwMCwgeyAyMTYwMCwgMCwgMHg0MDggfSB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzIG1zb19zcHRNb29uVGV4dFJlY3RbXSA9CnsKCXsgeyA5IE1TT19JLCA4IE1TT19JIH0sIHsgMCBNU09fSSwgMHhhIE1TT19JIH0gfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0TW9vbkdsdWVQb2ludHNbXSA9CnsKCXsgMjE2MDAsIDAgfSwgeyAwLCAxMDgwMCB9LCB7IDIxNjAwLCAyMTYwMCB9LCB7IDAgTVNPX0ksIDEwODAwIH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmSGFuZGxlIG1zb19zcHRNb29uSGFuZGxlW10gPQp7Cgl7CU1TREZGX0hBTkRMRV9GTEFHU19SQU5HRSwKCQkweDEwMCwgMTA4MDAsIDEwODAwLCAxMDgwMCwgMCwgMTg5MDAsIE14ODAwMDAwMDAsIDB4N2ZmZmZmZmYgfQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb01vb24gPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdE1vb25WZXJ0LCBzaXplb2YoIG1zb19zcHRNb29uVmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdE1vb25TZWdtLCBzaXplb2YoIG1zb19zcHRNb29uU2VnbSApID4+IDEsCgkoU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEqKW1zb19zcHRNb29uQ2FsYywgc2l6ZW9mKCBtc29fc3B0TW9vbkNhbGMgKSAvIHNpemVvZiggU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgKSwKCShzYWxfSW50MzIqKW1zb19zcHREZWZhdWx0MTA4MDAsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdE1vb25UZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0TW9vblRleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTIxNjAwLCAyMTYwMCwKCU14ODAwMDAwMDAsIE14ODAwMDAwMDAsCgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdE1vb25HbHVlUG9pbnRzLCBzaXplb2YoIG1zb19zcHRNb29uR2x1ZVBvaW50cyApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoU3Z4TVNEZmZIYW5kbGUqKW1zb19zcHRNb29uSGFuZGxlLCBzaXplb2YoIG1zb19zcHRNb29uSGFuZGxlICkgLyBzaXplb2YoIFN2eE1TRGZmSGFuZGxlICkJCS8vIGhhbmRsZXMKfTsKCnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRCcmFja2V0UGFpclZlcnRbXSA9CS8vIGFkaiB2YWx1ZSAwIC0+IDEwODAwCnsKCXsgMCBNU09fSSwgMCB9LAkJeyAwLCAxIE1TT19JIH0sCQkvLyBsZWZ0IHRvcCBhbGlnbm1lbnQKCXsgMCwgMiBNU09fSSB9LAkJeyAwIE1TT19JLCAyMTYwMCB9LAkvLyBsZWZ0ICBib3R0b20gIgoJeyAzIE1TT19JLCAyMTYwMCB9LAl7IDIxNjAwLCAyIE1TT19JIH0sCS8vIHJpZ2h0IGJvdHRvbQkiCgl7IDIxNjAwLCAxIE1TT19JIH0sCXsgMyBNU09fSSwgMCB9CQkvLyByaWdodCB0b3AJIgp9OwpzdGF0aWMgY29uc3Qgc2FsX3VJbnQxNiBtc29fc3B0QnJhY2tldFBhaXJTZWdtW10gPQp7CgkweDQwMDAsIDB4YTcwMSwgMHgwMDAxLCAweGE4MDEsIDB4ODAwMCwKCTB4NDAwMCwgMHhhNzAxLCAweDAwMDEsIDB4YTgwMSwgMHg4MDAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSBtc29fc3B0QnJhY2tldFBhaXJDYWxjW10gPQp7Cgl7IDB4NjAwMCwgeyBERkZfUHJvcF9nZW9MZWZ0LCBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMCB9IH0sCgl7IDB4NjAwMCwgeyBERkZfUHJvcF9nZW9Ub3AsIERGRl9Qcm9wX2FkanVzdFZhbHVlLCAwIH0gfSwKCXsgMHhhMDAwLCB7IERGRl9Qcm9wX2dlb0JvdHRvbSwgMCwgREZGX1Byb3BfYWRqdXN0VmFsdWUgfSB9LAoJeyAweGEwMDAsIHsgREZGX1Byb3BfZ2VvUmlnaHQsIDAsIERGRl9Qcm9wX2FkanVzdFZhbHVlIH0gfSwKCXsgMHgyMDgyLCB7IERGRl9Qcm9wX2FkanVzdFZhbHVlLCAwLCA0NSB9IH0sCgl7IDB4MjAwMCwgeyAweDQwNCwgMCwgMTA4MDAgfSB9LAoJeyAweDgwMDAsIHsgMCwgMCwgREZGX1Byb3BfYWRqdXN0VmFsdWUgfSB9LAoJeyAweGEwMDAsIHsgMHg0MDYsIDAsIDB4NDA1IH0gfSwKCXsgMHhhMDAwLCB7IERGRl9Qcm9wX2dlb0xlZnQsIDAsIDB4NDA3IH0gfSwKCXsgMHhhMDAwLCB7IERGRl9Qcm9wX2dlb1RvcCwgMCwgMHg0MDcgfSB9LAoJeyAweDYwMDAsIHsgREZGX1Byb3BfZ2VvUmlnaHQsIDB4NDA3LCAwIH0gfSwKCXsgMHg2MDAwLCB7IERGRl9Qcm9wX2dlb0JvdHRvbSwgMHg0MDcsIDAgfSB9LAoJeyAweGEwMDAsIHsgREZGX1Byb3BfZ2VvTGVmdCwgMCwgMHg0MDUgfSB9LAoJeyAweGEwMDAsIHsgREZGX1Byb3BfZ2VvVG9wLCAwLCAweDQwNSB9IH0sCgl7IDB4NjAwMCwgeyBERkZfUHJvcF9nZW9SaWdodCwgMHg0MDUsIDAgfSB9LAoJeyAweDYwMDAsIHsgREZGX1Byb3BfZ2VvQm90dG9tLCAweDQwNSwgMCB9IH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgbXNvX3NwdEJyYWNrZXRQYWlyVGV4dFJlY3RbXSA9CnsKCXsgeyA4IE1TT19JLCA5IE1TT19JIH0sIHsgMHhhIE1TT19JLCAweGIgTVNPX0kgfSB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkhhbmRsZSBtc29fc3B0QnJhY2tldFBhaXJIYW5kbGVbXSA9CnsKCXsJTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFIHwgTVNERkZfSEFORExFX0ZMQUdTX1NXSVRDSEVELAoJCTB4MTAwLCAwLCAxMDgwMCwgMTA4MDAsIDAsIDEwODAwLCBNeDgwMDAwMDAwLCAweDdmZmZmZmZmIH0KfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29CcmFja2V0UGFpciA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0QnJhY2tldFBhaXJWZXJ0LCBzaXplb2YoIG1zb19zcHRCcmFja2V0UGFpclZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKHNhbF91SW50MTYqKW1zb19zcHRCcmFja2V0UGFpclNlZ20sIHNpemVvZiggbXNvX3NwdEJyYWNrZXRQYWlyU2VnbSApID4+IDEsCgkoU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEqKW1zb19zcHRCcmFja2V0UGFpckNhbGMsIHNpemVvZiggbXNvX3NwdEJyYWNrZXRQYWlyQ2FsYyApIC8gc2l6ZW9mKCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSApLAoJKHNhbF9JbnQzMiopbXNvX3NwdERlZmF1bHQzNzAwLAoJKFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMqKW1zb19zcHRCcmFja2V0UGFpclRleHRSZWN0LCBzaXplb2YoIG1zb19zcHRCcmFja2V0UGFpclRleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTIxNjAwLCAyMTYwMCwKCTEwODAwLCBNeDgwMDAwMDAwLAoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRTdGFuZGFyZEdsdWVQb2ludHMsIHNpemVvZiggbXNvX3NwdFN0YW5kYXJkR2x1ZVBvaW50cyApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoU3Z4TVNEZmZIYW5kbGUqKW1zb19zcHRCcmFja2V0UGFpckhhbmRsZSwgc2l6ZW9mKCBtc29fc3B0QnJhY2tldFBhaXJIYW5kbGUgKSAvIHNpemVvZiggU3Z4TVNEZmZIYW5kbGUgKQkJLy8gaGFuZGxlcwp9OwoKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvX3NwdFBsYXF1ZVNlZ21bXSA9CnsKCTB4NDAwMCwgMHhhODAxLCAweDAwMDEsIDB4YTcwMSwgMHgwMDAxLCAweGE4MDEsIDB4MDAwMSwgMHhhNzAxLCAweDYwMDAsIDB4ODAwMAp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyBtc29fc3B0UGxhcXVlVGV4dFJlY3RbXSA9CnsKCXsgeyAweGMgTVNPX0ksIDB4ZCBNU09fSSB9LCB7IDB4ZSBNU09fSSwgMHhmIE1TT19JIH0gfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZIYW5kbGUgbXNvX3NwdFBsYXF1ZUhhbmRsZVtdID0KewoJewlNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0UgfCBNU0RGRl9IQU5ETEVfRkxBR1NfU1dJVENIRUQsCgkJMHgxMDAsIDAsIDEwODAwLCAxMDgwMCwgMCwgMTA4MDAsIE14ODAwMDAwMDAsIDB4N2ZmZmZmZmYgfQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb1BsYXF1ZSA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0QnJhY2tldFBhaXJWZXJ0LCBzaXplb2YoIG1zb19zcHRCcmFja2V0UGFpclZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKHNhbF91SW50MTYqKW1zb19zcHRQbGFxdWVTZWdtLCBzaXplb2YoIG1zb19zcHRQbGFxdWVTZWdtICkgPj4gMSwKCShTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSopbXNvX3NwdEJyYWNrZXRQYWlyQ2FsYywgc2l6ZW9mKCBtc29fc3B0QnJhY2tldFBhaXJDYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0RGVmYXVsdDM2MDAsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdFBsYXF1ZVRleHRSZWN0LCBzaXplb2YoIG1zb19zcHRQbGFxdWVUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCgkxMDgwMCwgMTA4MDAsCgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdFN0YW5kYXJkR2x1ZVBvaW50cywgc2l6ZW9mKCBtc29fc3B0U3RhbmRhcmRHbHVlUG9pbnRzICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdFBsYXF1ZUhhbmRsZSwgc2l6ZW9mKCBtc29fc3B0UGxhcXVlSGFuZGxlICkgLyBzaXplb2YoIFN2eE1TRGZmSGFuZGxlICkJCS8vIGhhbmRsZXMKfTsKCnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRCcmFjZVBhaXJWZXJ0W10gPQkvLyBhZGogdmFsdWUgMCAtPiA1NDAwCnsKCXsgNCBNU09fSSwgMCB9LAl7IDAgTVNPX0ksIDEgTVNPX0kgfSwgeyAwIE1TT19JLCA2IE1TT19JIH0sIHsgMCAsMTA4MDAgfSwJCQkvLyBsZWZ0IGJyYWNrZXQKCXsgMCBNU09fSSwgNyBNU09fSSB9LCB7IDAgTVNPX0ksIDIgTVNPX0kgfSwJeyA0IE1TT19JLCAyMTYwMCB9LAoJeyA4IE1TT19JLCAyMTYwMCB9LAl7IDMgTVNPX0ksIDIgTVNPX0kgfSwgeyAzIE1TT19JLCA3IE1TT19JIH0sIHsgMjE2MDAsIDEwODAwIH0sCS8vIHJpZ2h0IGJyYWNrZXQKCXsgMyBNU09fSSwgNiBNU09fSSB9LCB7IDMgTVNPX0ksIDEgTVNPX0kgfSwgeyA4IE1TT19JLCAwIH0KfTsKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvX3NwdEJyYWNlUGFpclNlZ21bXSA9CnsKCTB4NDAwMCwgMHhhNzAxLCAweDAwMDEsIDB4YTgwMSwgMHhhNzAxLCAweDAwMDEsIDB4YTgwMSwgMHg4MDAwLAoJMHg0MDAwLCAweGE3MDEsIDB4MDAwMSwgMHhhODAxLCAweGE3MDEsIDB4MDAwMSwgMHhhODAxLCAweDgwMDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhIG1zb19zcHRCcmFjZVBhaXJDYWxjW10gPQp7Cgl7IDB4NjAwMCwgeyBERkZfUHJvcF9nZW9MZWZ0LCBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMCB9IH0sCgl7IDB4NjAwMCwgeyBERkZfUHJvcF9nZW9Ub3AsIERGRl9Qcm9wX2FkanVzdFZhbHVlLCAwIH0gfSwKCXsgMHhhMDAwLCB7IERGRl9Qcm9wX2dlb0JvdHRvbSwgMCwgREZGX1Byb3BfYWRqdXN0VmFsdWUgfSB9LAoJeyAweGEwMDAsIHsgREZGX1Byb3BfZ2VvUmlnaHQsIDAsIERGRl9Qcm9wX2FkanVzdFZhbHVlIH0gfSwKCXsgMHgyMDAxLCB7IDB4NDAwLCAyLCAxIH0gfSwJCQkJCQkJCQkvLyAgNAoJeyAweDIwMDEsIHsgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDIsIDEgfSB9LAkJCQkJCS8vICA1Cgl7IDB4ODAwMCwgeyAxMDgwMCwgMCwgREZGX1Byb3BfYWRqdXN0VmFsdWUgfSB9LAkJCQkJLy8gIDYKCXsgMHg4MDAwLCB7IDIxNjAwLCAwLCAweDQwNiB9IH0sCQkJCQkJCQkvLyAgNwoJeyAweGEwMDAsIHsgREZGX1Byb3BfZ2VvUmlnaHQsIDAsIDB4NDA1IH0gfSwJCQkJCS8vICA4Cgl7IDB4MjAwMSwgeyBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMSwgMyB9IH0sCQkJCQkJLy8gIDkKCXsgMHg2MDAwLCB7IDB4NDA5LCBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMCB9IH0sCQkJCQkvLyB4YQoJeyAweDYwMDAsIHsgREZGX1Byb3BfZ2VvTGVmdCwgMHg0MGEsIDAgfSB9LAkJCQkJCS8vIHhiCgl7IDB4NjAwMCwgeyBERkZfUHJvcF9nZW9Ub3AsIDB4NDA5LCAwIH0gfSwJCQkJCQkvLyB4YwoJeyAweGEwMDAsIHsgREZGX1Byb3BfZ2VvUmlnaHQsIDAsIDB4NDBhIH0gfSwJCQkJCS8vIHhkCgl7IDB4YTAwMCwgeyBERkZfUHJvcF9nZW9Cb3R0b20sIDAsIDB4NDA5IH0gfQkJCQkJLy8geGUKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgbXNvX3NwdEJyYWNlUGFpclRleHRSZWN0W10gPQp7Cgl7IHsgMHhiIE1TT19JLCAweGMgTVNPX0kgfSwgeyAweGQgTVNPX0ksIDB4ZSBNU09fSSB9IH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmSGFuZGxlIG1zb19zcHRCcmFjZVBhaXJIYW5kbGVbXSA9CnsKCXsJTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFIHwgTVNERkZfSEFORExFX0ZMQUdTX1NXSVRDSEVELAoJCTAsIDB4MTAwLCAxMDgwMCwgMTA4MDAsIE14ODAwMDAwMDAsIDB4N2ZmZmZmZmYsIDAsIDU0MDAgfQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb0JyYWNlUGFpciA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0QnJhY2VQYWlyVmVydCwgc2l6ZW9mKCBtc29fc3B0QnJhY2VQYWlyVmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdEJyYWNlUGFpclNlZ20sIHNpemVvZiggbXNvX3NwdEJyYWNlUGFpclNlZ20gKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0QnJhY2VQYWlyQ2FsYywgc2l6ZW9mKCBtc29fc3B0QnJhY2VQYWlyQ2FsYyApIC8gc2l6ZW9mKCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSApLAoJKHNhbF9JbnQzMiopbXNvX3NwdERlZmF1bHQxODAwLAoJKFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMqKW1zb19zcHRCcmFjZVBhaXJUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0QnJhY2VQYWlyVGV4dFJlY3QgKSAvIHNpemVvZiggU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyApLAoJMjE2MDAsIDIxNjAwLAoJMTA4MDAsIE14ODAwMDAwMDAsCgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdFN0YW5kYXJkR2x1ZVBvaW50cywgc2l6ZW9mKCBtc29fc3B0U3RhbmRhcmRHbHVlUG9pbnRzICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdEJyYWNlUGFpckhhbmRsZSwgc2l6ZW9mKCBtc29fc3B0QnJhY2VQYWlySGFuZGxlICkgLyBzaXplb2YoIFN2eE1TRGZmSGFuZGxlICkJCS8vIGhhbmRsZXMKfTsKCnN0YXRpYyBjb25zdCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSBtc29fc3B0QnJhY2tldENhbGNbXSA9CnsKCXsgMHgyMDAxLCB7IERGRl9Qcm9wX2FkanVzdFZhbHVlLCAxLCAyIH0gfSwKCXsgMHg2MDAwLCB7IERGRl9Qcm9wX2dlb1RvcCwgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAgfSB9LAoJeyAweGEwMDAsIHsgREZGX1Byb3BfZ2VvQm90dG9tLCAwLCBERkZfUHJvcF9hZGp1c3RWYWx1ZSB9IH0sCgl7IDB4NjAwMCwgeyBERkZfUHJvcF9nZW9Ub3AsIDB4NDAwLCAwIH0gfSwKCXsgMHhhMDAwLCB7IERGRl9Qcm9wX2dlb0JvdHRvbSwgMCwgMHg0MDAgfSB9Cn07CnN0YXRpYyBjb25zdCBzYWxfdUludDE2IG1zb19zcHRCcmFja2V0U2VnbVtdID0KewoJMHg0MDAwLCAweDIwMDEsIDB4MDAwMSwgMHgyMDAxLCAweDgwMDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdExlZnRCcmFja2V0VmVydFtdID0JLy8gYWRqIHZhbHVlIDAgLT4gMTA4MDAKewoJeyAyMTYwMCwgMCB9LCB7IDEwODAwLAkwIH0sIHsgMCwgMyBNU09fSSB9LCB7IDAsIDEgTVNPX0kgfSwKCXsgMCwgMiBNU09fSSB9LCB7IDAsIDQgTVNPX0kgfSwgeyAxMDgwMCwgMjE2MDAgfSwgeyAyMTYwMCwgMjE2MDAgfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyBtc29fc3B0TGVmdEJyYWNrZXRUZXh0UmVjdFtdID0KewoJeyB7IDYzNTAsIDMgTVNPX0kgfSwgeyAyMTYwMCwgNCBNU09fSSB9IH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdExlZnRCcmFja2V0R2x1ZVBvaW50c1tdID0KewoJeyAyMTYwMCwgMCB9LCB7IDAsIDEwODAwIH0sIHsgMjE2MDAsIDIxNjAwIH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmSGFuZGxlIG1zb19zcHRMZWZ0QnJhY2tldEhhbmRsZVtdID0KewoJewlNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0UsCgkJMCwgMHgxMDAsIDEwODAwLCAxMDgwMCwgTXg4MDAwMDAwMCwgMHg3ZmZmZmZmZiwgMCwgMTA4MDAgfQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb0xlZnRCcmFja2V0ID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRMZWZ0QnJhY2tldFZlcnQsIHNpemVvZiggbXNvX3NwdExlZnRCcmFja2V0VmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdEJyYWNrZXRTZWdtLCBzaXplb2YoIG1zb19zcHRCcmFja2V0U2VnbSApID4+IDEsCgkoU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEqKW1zb19zcHRCcmFja2V0Q2FsYywgc2l6ZW9mKCBtc29fc3B0QnJhY2tldENhbGMgKSAvIHNpemVvZiggU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgKSwKCShzYWxfSW50MzIqKW1zb19zcHREZWZhdWx0MTgwMCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0TGVmdEJyYWNrZXRUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0TGVmdEJyYWNrZXRUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRMZWZ0QnJhY2tldEdsdWVQb2ludHMsIHNpemVvZiggbXNvX3NwdExlZnRCcmFja2V0R2x1ZVBvaW50cyApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoU3Z4TVNEZmZIYW5kbGUqKW1zb19zcHRMZWZ0QnJhY2tldEhhbmRsZSwgc2l6ZW9mKCBtc29fc3B0TGVmdEJyYWNrZXRIYW5kbGUgKSAvIHNpemVvZiggU3Z4TVNEZmZIYW5kbGUgKQkJLy8gaGFuZGxlcwp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0UmlnaHRCcmFja2V0VmVydFtdID0JLy8gYWRqIHZhbHVlIDAgLT4gMTA4MDAKewoJeyAwLCAwIH0sIHsgMTA4MDAsIDAgfSwgeyAyMTYwMCwgMyBNU09fSSB9LCB7IDIxNjAwLCAxIE1TT19JIH0sCgl7IDIxNjAwLCAyIE1TT19JIH0sIHsgMjE2MDAsIDQgTVNPX0kgfSwgeyAxMDgwMCwgMjE2MDAgfSwgeyAwLCAyMTYwMCB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzIG1zb19zcHRSaWdodEJyYWNrZXRUZXh0UmVjdFtdID0KewoJeyB7IDAsIDMgTVNPX0kgfSwgeyAxNTE1MCwgNCBNU09fSSB9IH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdFJpZ2h0QnJhY2tldEdsdWVQb2ludHNbXSA9CnsKCXsgMCwgMCB9LCB7IDAsIDIxNjAwIH0sIHsgMjE2MDAsIDEwODAwIH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmSGFuZGxlIG1zb19zcHRSaWdodEJyYWNrZXRIYW5kbGVbXSA9CnsKCXsJTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFLAoJCTEsIDB4MTAwLCAxMDgwMCwgMTA4MDAsIE14ODAwMDAwMDAsIDB4N2ZmZmZmZmYsIDAsIDEwODAwIH0KfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29SaWdodEJyYWNrZXQgPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdFJpZ2h0QnJhY2tldFZlcnQsIHNpemVvZiggbXNvX3NwdFJpZ2h0QnJhY2tldFZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKHNhbF91SW50MTYqKW1zb19zcHRCcmFja2V0U2VnbSwgc2l6ZW9mKCBtc29fc3B0QnJhY2tldFNlZ20gKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0QnJhY2tldENhbGMsIHNpemVvZiggbXNvX3NwdEJyYWNrZXRDYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0RGVmYXVsdDE4MDAsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdFJpZ2h0QnJhY2tldFRleHRSZWN0LCBzaXplb2YoIG1zb19zcHRSaWdodEJyYWNrZXRUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRSaWdodEJyYWNrZXRHbHVlUG9pbnRzLCBzaXplb2YoIG1zb19zcHRSaWdodEJyYWNrZXRHbHVlUG9pbnRzICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdFJpZ2h0QnJhY2tldEhhbmRsZSwgc2l6ZW9mKCBtc29fc3B0UmlnaHRCcmFja2V0SGFuZGxlICkgLyBzaXplb2YoIFN2eE1TRGZmSGFuZGxlICkJCS8vIGhhbmRsZXMKfTsKCnN0YXRpYyBjb25zdCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSBtc29fc3B0QnJhY2VDYWxjW10gPQp7Cgl7IDB4MjAwMSwgeyBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMSwgMiB9IH0sCgl7IDB4MjAwMCwgeyBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMCwgMCB9IH0sCgl7IDB4YTAwMCwgeyAweDQwNCwgMCwgREZGX1Byb3BfYWRqdXN0VmFsdWUgfSB9LAoJeyAweGEwMDAsIHsgMHg0MDQsIDAsIDB4NDAwIH0gfSwKCXsgMHgyMDAwLCB7IERGRl9Qcm9wX2FkanVzdDJWYWx1ZSwgMCwgMCB9IH0sCgl7IDB4NjAwMCwgeyAweDQwNCwgMHg0MDAsIDAgfSB9LAoJeyAweDYwMDAsIHsgMHg0MDQsIERGRl9Qcm9wX2FkanVzdFZhbHVlLCAwIH0gfSwKCXsgMHg4MDAwLCB7IDIxNjAwLCAwLCBERkZfUHJvcF9hZGp1c3RWYWx1ZSB9IH0sCgl7IDB4ODAwMCwgeyAyMTYwMCwgMCwgMHg0MDAgfSB9LAoJeyAweDIwMDEsIHsgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDEwMDAwLCAzMTk1MyB9IH0sCgl7IDB4ODAwMCwgeyAyMTYwMCwgMCwgMHg0MDkgfSB9Cn07CnN0YXRpYyBjb25zdCBzYWxfdUludDE2IG1zb19zcHRCcmFjZVNlZ21bXSA9CnsKCTB4NDAwMCwgMHgyMDAxLCAweDAwMDEsIDB4MjAwMiwgMHgwMDAxLCAweDIwMDEsIDB4ODAwMAp9OwpzdGF0aWMgY29uc3Qgc2FsX0ludDMyIG1zb19zcHRCcmFjZURlZmF1bHRbXSA9CnsKCTIsIDE4MDAsIDEwODAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRMZWZ0QnJhY2VWZXJ0W10gPQp7Cgl7IDIxNjAwLCAwIH0sCQkJCQkJCQkJCQkJLy8gcAoJeyAxNjIwMCwgMCB9LCB7IDEwODAwLCAwIE1TT19JIH0sIHsgMTA4MDAsIDEgTVNPX0kgfSwJCS8vIGNjcAoJeyAxMDgwMCwgMiBNU09fSSB9LAkJCQkJCQkJCQkJLy8gcAoJeyAxMDgwMCwgMyBNU09fSSB9LCB7IDU0MDAsIDQgTVNPX0kgfSwgeyAwLCA0IE1TT19JIH0sCQkvLyBjY3AKCXsgNTQwMCwgNCBNU09fSSB9LCAJeyAxMDgwMCwgNSBNU09fSSB9LCB7IDEwODAwLCA2IE1TT19JIH0sCS8vIGNjcAoJeyAxMDgwMCwgNyBNU09fSSB9LAkJCQkJCQkJCQkJLy8gcAoJeyAxMDgwMCwgOCBNU09fSSB9LCB7IDE2MjAwLCAyMTYwMCB9LCB7IDIxNjAwLCAyMTYwMCB9CQkvLyBjY3AKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgbXNvX3NwdExlZnRCcmFjZVRleHRSZWN0W10gPQp7Cgl7IHsgMTM4MDAsIDkgTVNPX0kgfSwgeyAyMTYwMCwgMTAgTVNPX0kgfSB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkhhbmRsZSBtc29fc3B0TGVmdEJyYWNlSGFuZGxlW10gPQp7Cgl7CU1TREZGX0hBTkRMRV9GTEFHU19SQU5HRSwKCQkxMDgwMCwgMHgxMDAsIDEwODAwLCAxMDgwMCwgTXg4MDAwMDAwMCwgMHg3ZmZmZmZmZiwgMCwgNTQwMCB9LAoJewlNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0UsCgkJMCwgMHgxMDEsIDEwODAwLCAxMDgwMCwgTXg4MDAwMDAwMCwgMHg3ZmZmZmZmZiwgMCwgMjE2MDAgfQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb0xlZnRCcmFjZSA9CQkvLyBhZGogdmFsdWUwIDAgLT4gNTQwMAp7CQkJCQkJCQkJCQkJLy8gYWRqIHZhbHVlMSAwIC0+IDIxNjAwCgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdExlZnRCcmFjZVZlcnQsIHNpemVvZiggbXNvX3NwdExlZnRCcmFjZVZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKHNhbF91SW50MTYqKW1zb19zcHRCcmFjZVNlZ20sIHNpemVvZiggbXNvX3NwdEJyYWNlU2VnbSApID4+IDEsCgkoU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEqKW1zb19zcHRCcmFjZUNhbGMsIHNpemVvZiggbXNvX3NwdEJyYWNlQ2FsYyApIC8gc2l6ZW9mKCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSApLAoJKHNhbF9JbnQzMiopbXNvX3NwdEJyYWNlRGVmYXVsdCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0TGVmdEJyYWNlVGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdExlZnRCcmFjZVRleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTIxNjAwLCAyMTYwMCwKCU14ODAwMDAwMDAsIE14ODAwMDAwMDAsCgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdExlZnRCcmFja2V0R2x1ZVBvaW50cywgc2l6ZW9mKCBtc29fc3B0TGVmdEJyYWNrZXRHbHVlUG9pbnRzICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdExlZnRCcmFjZUhhbmRsZSwgc2l6ZW9mKCBtc29fc3B0TGVmdEJyYWNlSGFuZGxlICkgLyBzaXplb2YoIFN2eE1TRGZmSGFuZGxlICkJCS8vIGhhbmRsZXMKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdFJpZ2h0QnJhY2VWZXJ0W10gPQp7Cgl7IDAsIDAgfSwJCQkJCQkJCQkJCQkJLy8gcAoJeyA1NDAwLCAwIH0sIHsgMTA4MDAsIDAgTVNPX0kgfSwgeyAxMDgwMCwgMSBNU09fSSB9LAkJLy8gY2NwCgl7IDEwODAwLCAyIE1TT19JIH0sCQkJCQkJCQkJCQkvLyBwCgl7IDEwODAwLCAzIE1TT19JIH0sCXsgMTYyMDAsIDQgTVNPX0kgfSwgeyAyMTYwMCwgNCBNU09fSSB9LAkvLyBjY3AKCXsgMTYyMDAsIDQgTVNPX0kgfSwJeyAxMDgwMCwgNSBNU09fSSB9LAl7IDEwODAwLCA2IE1TT19JIH0sCS8vIGNjcAoJeyAxMDgwMCwgNyBNU09fSSB9LAkJCQkJCQkJCQkJLy8gcAoJeyAxMDgwMCwgOCBNU09fSSB9LCB7IDU0MDAsCTIxNjAwIH0sIHsgMCwgMjE2MDAJfQkJCS8vIGNjcAp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyBtc29fc3B0UmlnaHRCcmFjZVRleHRSZWN0W10gPQp7Cgl7IHsgMCwgOSBNU09fSSB9LCB7IDc4MDAsIDEwIE1TT19JIH0gfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZIYW5kbGUgbXNvX3NwdFJpZ2h0QnJhY2VIYW5kbGVbXSA9CnsKCXsJTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFLAoJCTEwODAwLCAweDEwMCwgMTA4MDAsIDEwODAwLCBNeDgwMDAwMDAwLCAweDdmZmZmZmZmLCAwLCA1NDAwIH0sCgl7CU1TREZGX0hBTkRMRV9GTEFHU19SQU5HRSwKCQkxLCAweDEwMSwgMTA4MDAsIDEwODAwLCBNeDgwMDAwMDAwLCAweDdmZmZmZmZmLCAwLCAyMTYwMCB9Cn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvUmlnaHRCcmFjZSA9CQkvLyBhZGogdmFsdWUwIDAgLT4gNTQwMAp7CQkJCQkJCQkJCQkJLy8gYWRqIHZhbHVlMSAwIC0+IDIxNjAwCgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdFJpZ2h0QnJhY2VWZXJ0LCBzaXplb2YoIG1zb19zcHRSaWdodEJyYWNlVmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdEJyYWNlU2VnbSwgc2l6ZW9mKCBtc29fc3B0QnJhY2VTZWdtICkgPj4gMSwKCShTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSopbXNvX3NwdEJyYWNlQ2FsYywgc2l6ZW9mKCBtc29fc3B0QnJhY2VDYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0QnJhY2VEZWZhdWx0LAoJKFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMqKW1zb19zcHRSaWdodEJyYWNlVGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdFJpZ2h0QnJhY2VUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRSaWdodEJyYWNrZXRHbHVlUG9pbnRzLCBzaXplb2YoIG1zb19zcHRSaWdodEJyYWNrZXRHbHVlUG9pbnRzICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdFJpZ2h0QnJhY2VIYW5kbGUsIHNpemVvZiggbXNvX3NwdFJpZ2h0QnJhY2VIYW5kbGUgKSAvIHNpemVvZiggU3Z4TVNEZmZIYW5kbGUgKQkJLy8gaGFuZGxlcwp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdElycmVndWxhclNlYWwxVmVydFtdID0KewoJeyAxMDkwMSwgNTkwNSB9LCB7IDg0NTgsIDIzOTkgfSwgeyA3NDE3LCA2NDI1IH0sIHsgNDc2LCAyMzk5IH0sCgl7IDQ3MzIsIDc3MjIgfSwgeyAxMDYsIDg3MTggfSwgeyAzODI4LCAxMTg4MCB9LCB7IDI0MywgMTQ2ODkgfSwKCXsgNTc3MiwgMTQwNDEgfSwgeyA0ODY4LCAxNzcxOSB9LCB7IDc4MTksIDE1NzMwIH0sIHsgODU5MCwgMjE2MDAgfSwKCXsgMTA2MzcsIDE1MDM4IH0sIHsgMTMzNDksIDE5ODQwIH0sIHsgMTQxMjUsIDE0NTYxIH0sIHsgMTgyNDgsIDE4MTk1IH0sCgl7IDE2OTM4LCAxMzA0NCB9LCB7IDIxNjAwLCAxMzM5MyB9LCB7IDE3NzEwLCAxMDU3OSB9LCB7IDIxMTk4LCA4MjQyIH0sCgl7IDE2ODA2LCA3NDE3IH0sIHsgMTg0ODIsIDQ1NjAgfSwgeyAxNDI1NywgNTQyOSB9LCB7IDE0NjIzLCAxMDYgfSwgeyAxMDkwMSwgNTkwNSB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzIG1zb19zcHRJcnJlZ3VsYXJTZWFsMVRleHRSZWN0W10gPQp7Cgl7IHsgNDY4MCwgNjU3MCB9LCB7IDE2MTQwLCAxMzI4MCB9IH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdElycmVndWxhclNlYWwxR2x1ZVBvaW50c1tdID0KewoJeyAxNDYyMywgMTA2IH0sIHsgMTA2LCA4NzE4IH0sIHsgODU5MCwgMjE2MDAgfSwgeyAyMTYwMCwgMTMzOTMgfQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb0lycmVndWxhclNlYWwxID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRJcnJlZ3VsYXJTZWFsMVZlcnQsIHNpemVvZiggbXNvX3NwdElycmVndWxhclNlYWwxVmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCglOVUxMLCAwLAoJTlVMTCwgMCwKCU5VTEwsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdElycmVndWxhclNlYWwxVGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdElycmVndWxhclNlYWwxVGV4dFJlY3QgKSAvIHNpemVvZiggU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyApLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0SXJyZWd1bGFyU2VhbDFHbHVlUG9pbnRzLCBzaXplb2YoIG1zb19zcHRJcnJlZ3VsYXJTZWFsMUdsdWVQb2ludHMgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJTlVMTCwgMAkJLy8gaGFuZGxlcwp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdElycmVndWxhclNlYWwyVmVydFtdID0KewoJeyAxMTQ2NCwgNDM0MCB9LCB7IDk3MjIsIDE4ODcgfSwgeyA4NTQ4LCA2MzgzIH0sIHsgNDUwMywgMzYyNiB9LAoJeyA1MzczLCA3ODE2IH0sIHsgMTE3NCwgODI3MCB9LCB7IDM5MzQsIDExNTkyIH0sIHsgMCwgMTI4NzUgfSwKCXsgMzMyOSwgMTUzNzIgfSwgeyAxMjgzLCAxNzgyNCB9LCB7IDQ4MDQsIDE4MjM5IH0sIHsgNDkxOCwgMjE2MDAgfSwKCXsgNzUyNSwgMTgxMjUgfSwgeyA4Njk4LCAxOTcxMiB9LCB7IDk4NzEsIDE3MzcxIH0sIHsgMTE2MTQsIDE4ODQ0IH0sCgl7IDEyMTc4LCAxNTkzNyB9LCB7IDE0OTQzLCAxNzM3MSB9LCB7IDE0NjQwLCAxNDM0OCB9LCB7IDE4ODc4LCAxNTYzMiB9LAoJeyAxNjM4MiwgMTIzMTEgfSwgeyAxODI3MCwgMTEyOTIgfSwgeyAxNjk4NiwgOTQwNCB9LCB7IDIxNjAwLCA2NjQ2IH0sCgl7IDE2MzgyLCA2NTMzIH0sIHsgMTgwMDUsIDMxNzIgfSwgeyAxNDUyNCwgNTc3OCB9LCB7IDE0Nzg5LCAwIH0sCgl7IDExNDY0LCA0MzQwIH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgbXNvX3NwdElycmVndWxhclNlYWwyVGV4dFJlY3RbXSA9CnsKCXsgeyA1NDAwLCA2NTcwIH0sIHsgMTQxNjAsIDE1MjkwIH0gfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0SXJyZWd1bGFyU2VhbDJHbHVlUG9pbnRzW10gPQp7Cgl7IDk3MjIsIDE4ODcgfSwgeyAwLCAxMjg3NSB9LCB7IDExNjE0LCAxODg0NCB9LCB7IDIxNjAwLCA2NjQ2IH0KfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29JcnJlZ3VsYXJTZWFsMiA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0SXJyZWd1bGFyU2VhbDJWZXJ0LCBzaXplb2YoIG1zb19zcHRJcnJlZ3VsYXJTZWFsMlZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJTlVMTCwgMCwKCU5VTEwsIDAsCglOVUxMLAoJKFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMqKW1zb19zcHRJcnJlZ3VsYXJTZWFsMlRleHRSZWN0LCBzaXplb2YoIG1zb19zcHRJcnJlZ3VsYXJTZWFsMlRleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTIxNjAwLCAyMTYwMCwKCU14ODAwMDAwMDAsIE14ODAwMDAwMDAsCgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdElycmVndWxhclNlYWwyR2x1ZVBvaW50cywgc2l6ZW9mKCBtc29fc3B0SXJyZWd1bGFyU2VhbDJHbHVlUG9pbnRzICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCU5VTEwsIDAJCS8vIGhhbmRsZXMKfTsKCnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRTZWFsNFZlcnRbXSA9CQkvLyBhZGp1c3RtZW50MSA6IDAgLSAxMDgwMAp7Cgl7IDAsIDEwODAwIH0sIHsgNCBNU09fSSwgNCBNU09fSSB9LCB7IDEwODAwLCAwIH0sIHsgMyBNU09fSSwgNCBNU09fSSB9LAoJeyAyMTYwMCwgMTA4MDAgfSwgeyAzIE1TT19JLCAzIE1TT19JIH0sIHsgMTA4MDAsIDIxNjAwIH0sIHsgNCBNU09fSSwgMyBNU09fSSB9LAoJeyAwLCAxMDgwMCB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSBtc29fc3B0U2VhbDRDYWxjW10gPQp7Cgl7IDB4MDAwMCwgeyA3NjAwLCAwLCAwIH0gfSwKCXsgMHg2MDAxLCB7IDB4NDAwLCBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMTA4MDAgfSB9LAoJeyAweGEwMDAsIHsgMHg0MDAsIDAsIDB4NDAxIH0gfSwKCXsgMHg0MDAwLCB7IDEwODAwLCAweDQwMiwgMCB9IH0sCgl7IDB4ODAwMCwgeyAxMDgwMCwgMCwgMHg0MDIgfSB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzIG1zb19zcHRTZWFsNFRleHRSZWN0W10gPQp7Cgl7IHsgNCBNU09fSSwgNCBNU09fSSB9LCB7IDMgTVNPX0ksIDMgTVNPX0kgfSB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkhhbmRsZSBtc29fc3B0U2VhbEhhbmRsZVtdID0KewoJewlNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0UsCgkJMHgxMDAsIDEwODAwLCAxMDgwMCwgMTA4MDAsIDAsIDEwODAwLCBNeDgwMDAwMDAwLCAweDdmZmZmZmZmIH0KfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29TZWFsNCA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0U2VhbDRWZXJ0LCBzaXplb2YoIG1zb19zcHRTZWFsNFZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJTlVMTCwgMCwKCShTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSopbXNvX3NwdFNlYWw0Q2FsYywgc2l6ZW9mKCBtc29fc3B0U2VhbDRDYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0RGVmYXVsdDgxMDAsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdFNlYWw0VGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdFNlYWw0VGV4dFJlY3QgKSAvIHNpemVvZiggU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyApLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCU5VTEwsIDAsCgkoU3Z4TVNEZmZIYW5kbGUqKW1zb19zcHRTZWFsSGFuZGxlLCBzaXplb2YoIG1zb19zcHRTZWFsSGFuZGxlICkgLyBzaXplb2YoIFN2eE1TRGZmSGFuZGxlICkJCS8vIGhhbmRsZXMKfTsKCnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRTdGFyVmVydFtdID0KewoJeyAxMDc5NywgMCB9LCB7IDgyNzgsIDgyNTYgfSwgeyAwLCA4MjU2IH0sIHsgNjcyMiwgMTM0MDUgfSwKCXsgNDE5OCwgMjE2MDAgfSwgeyAxMDc5NywgMTY1ODAgfSwgeyAxNzQwMSwgMjE2MDAgfSwgeyAxNDg3OCwgMTM0MDUgfSwKCXsgMjE2MDAsIDgyNTYgfSwgeyAxMzMyMSwgODI1NiB9LCB7IDEwNzk3LCAwIH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgbXNvX3NwdFN0YXJUZXh0UmVjdFtdID0KewoJeyB7IDY3MjIsIDgyNTYgfSwgeyAxNDg3OCwgMTU0NjAgfSB9Cn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvU3RhciA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0U3RhclZlcnQsIHNpemVvZiggbXNvX3NwdFN0YXJWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCU5VTEwsIDAsCglOVUxMLCAwLAoJTlVMTCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0U3RhclRleHRSZWN0LCBzaXplb2YoIG1zb19zcHRTdGFyVGV4dFJlY3QgKSAvIHNpemVvZiggU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyApLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCU5VTEwsIDAsCglOVUxMLCAwCQkvLyBoYW5kbGVzCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgbXNvX3NwdFNlYWwyNENhbGNbXSA9CnsKCXsgMHgyMDAwLCB7IERGRl9Qcm9wX2FkanVzdFZhbHVlLCAwLCAwIH0gfSwJCS8vIDB4MDAKCXsgMHgyMDgxLCB7IDB4NDAwLCAxMDgwMCwgMzE1IH0gfSwJCQkJLy8gMHgwMQkoIHRleHRmcmFtZSApCgl7IDB4MjA4MiwgeyAweDQwMCwgMTA4MDAsIDMxNSB9IH0sCQkJCS8vIDB4MDIKCXsgMHgyMDgxLCB7IDB4NDAwLCAxMDgwMCwgMTM1IH0gfSwJCQkJLy8gMHgwMwoJeyAweDIwODIsIHsgMHg0MDAsIDEwODAwLCAxMzUgfSB9LAkJCQkvLyAweDA0Cgl7IDB4MDA4MSwgeyAwLAkgMTA4MDAsIDAgfSB9LAoJeyAweDAwODIsIHsgMCwJIDEwODAwLCAwIH0gfSwKCXsgMHgyMDgxLCB7IDB4NDAwLCAxMDgwMCwgNyB9IH0sCgl7IDB4MjA4MiwgeyAweDQwMCwgMTA4MDAsIDcgfSB9LAoJeyAweDAwODEsIHsgMCwJIDEwODAwLCAxNSB9IH0sCgl7IDB4MDA4MiwgeyAwLAkgMTA4MDAsIDE1IH0gfSwKCXsgMHgyMDgxLCB7IDB4NDAwLCAxMDgwMCwgMjIgfSB9LAoJeyAweDIwODIsIHsgMHg0MDAsIDEwODAwLCAyMiB9IH0sCgl7IDB4MDA4MSwgeyAwLAkgMTA4MDAsIDMwIH0gfSwKCXsgMHgwMDgyLCB7IDAsCSAxMDgwMCwgMzAgfSB9LAoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCAzNyB9IH0sCgl7IDB4MjA4MiwgeyAweDQwMCwgMTA4MDAsIDM3IH0gfSwKCXsgMHgwMDgxLCB7IDAsCSAxMDgwMCwgNDUgfSB9LAoJeyAweDAwODIsIHsgMCwJIDEwODAwLCA0NSB9IH0sCgl7IDB4MjA4MSwgeyAweDQwMCwgMTA4MDAsIDUyIH0gfSwKCXsgMHgyMDgyLCB7IDB4NDAwLCAxMDgwMCwgNTIgfSB9LAoJeyAweDAwODEsIHsgMCwJIDEwODAwLCA2MCB9IH0sCgl7IDB4MDA4MiwgeyAwLAkgMTA4MDAsIDYwIH0gfSwKCXsgMHgyMDgxLCB7IDB4NDAwLCAxMDgwMCwgNjcgfSB9LAoJeyAweDIwODIsIHsgMHg0MDAsIDEwODAwLCA2NyB9IH0sCgl7IDB4MDA4MSwgeyAwLAkgMTA4MDAsIDc1IH0gfSwKCXsgMHgwMDgyLCB7IDAsCSAxMDgwMCwgNzUgfSB9LAoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCA4MiB9IH0sCgl7IDB4MjA4MiwgeyAweDQwMCwgMTA4MDAsIDgyIH0gfSwKCXsgMHgwMDgxLCB7IDAsCSAxMDgwMCwgOTAgfSB9LAoJeyAweDAwODIsIHsgMCwJIDEwODAwLCA5MCB9IH0sCgl7IDB4MjA4MSwgeyAweDQwMCwgMTA4MDAsIDk3IH0gfSwKCXsgMHgyMDgyLCB7IDB4NDAwLCAxMDgwMCwgOTcgfSB9LAoJeyAweDAwODEsIHsgMCwJIDEwODAwLCAxMDUgfSB9LAoJeyAweDAwODIsIHsgMCwJIDEwODAwLCAxMDUgfSB9LAoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCAxMTIgfSB9LAoJeyAweDIwODIsIHsgMHg0MDAsIDEwODAwLCAxMTIgfSB9LAoJeyAweDAwODEsIHsgMCwJIDEwODAwLCAxMjAgfSB9LAoJeyAweDAwODIsIHsgMCwJIDEwODAwLCAxMjAgfSB9LAoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCAxMjcgfSB9LAoJeyAweDIwODIsIHsgMHg0MDAsIDEwODAwLCAxMjcgfSB9LAoJeyAweDAwODEsIHsgMCwJIDEwODAwLCAxMzUgfSB9LAoJeyAweDAwODIsIHsgMCwJIDEwODAwLCAxMzUgfSB9LAoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCAxNDIgfSB9LAoJeyAweDIwODIsIHsgMHg0MDAsIDEwODAwLCAxNDIgfSB9LAoJeyAweDAwODEsIHsgMCwJIDEwODAwLCAxNTAgfSB9LAoJeyAweDAwODIsIHsgMCwJIDEwODAwLCAxNTAgfSB9LAoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCAxNTcgfSB9LAoJeyAweDIwODIsIHsgMHg0MDAsIDEwODAwLCAxNTcgfSB9LAoJeyAweDAwODEsIHsgMCwJIDEwODAwLCAxNjUgfSB9LAoJeyAweDAwODIsIHsgMCwJIDEwODAwLCAxNjUgfSB9LAoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCAxNzIgfSB9LAoJeyAweDIwODIsIHsgMHg0MDAsIDEwODAwLCAxNzIgfSB9LAoJeyAweDAwODEsIHsgMCwJIDEwODAwLCAxODAgfSB9LAoJeyAweDAwODIsIHsgMCwJIDEwODAwLCAxODAgfSB9LAoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCAxODcgfSB9LAoJeyAweDIwODIsIHsgMHg0MDAsIDEwODAwLCAxODcgfSB9LAoJeyAweDAwODEsIHsgMCwJIDEwODAwLCAxOTUgfSB9LAoJeyAweDAwODIsIHsgMCwJIDEwODAwLCAxOTUgfSB9LAoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCAyMDIgfSB9LAoJeyAweDIwODIsIHsgMHg0MDAsIDEwODAwLCAyMDIgfSB9LAoJeyAweDAwODEsIHsgMCwJIDEwODAwLCAyMTAgfSB9LAoJeyAweDAwODIsIHsgMCwJIDEwODAwLCAyMTAgfSB9LAoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCAyMTcgfSB9LAoJeyAweDIwODIsIHsgMHg0MDAsIDEwODAwLCAyMTcgfSB9LAoJeyAweDAwODEsIHsgMCwJIDEwODAwLCAyMjUgfSB9LAoJeyAweDAwODIsIHsgMCwJIDEwODAwLCAyMjUgfSB9LAoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCAyMzIgfSB9LAoJeyAweDIwODIsIHsgMHg0MDAsIDEwODAwLCAyMzIgfSB9LAoJeyAweDAwODEsIHsgMCwJIDEwODAwLCAyNDAgfSB9LAoJeyAweDAwODIsIHsgMCwJIDEwODAwLCAyNDAgfSB9LAoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCAyNDcgfSB9LAoJeyAweDIwODIsIHsgMHg0MDAsIDEwODAwLCAyNDcgfSB9LAoJeyAweDAwODEsIHsgMCwJIDEwODAwLCAyNTUgfSB9LAoJeyAweDAwODIsIHsgMCwJIDEwODAwLCAyNTUgfSB9LAoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCAyNjIgfSB9LAoJeyAweDIwODIsIHsgMHg0MDAsIDEwODAwLCAyNjIgfSB9LAoJeyAweDAwODEsIHsgMCwJIDEwODAwLCAyNzAgfSB9LAoJeyAweDAwODIsIHsgMCwJIDEwODAwLCAyNzAgfSB9LAoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCAyNzcgfSB9LAoJeyAweDIwODIsIHsgMHg0MDAsIDEwODAwLCAyNzcgfSB9LAoJeyAweDAwODEsIHsgMCwJIDEwODAwLCAyODUgfSB9LAoJeyAweDAwODIsIHsgMCwJIDEwODAwLCAyODUgfSB9LAoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCAyOTIgfSB9LAoJeyAweDIwODIsIHsgMHg0MDAsIDEwODAwLCAyOTIgfSB9LAoJeyAweDAwODEsIHsgMCwJIDEwODAwLCAzMDAgfSB9LAoJeyAweDAwODIsIHsgMCwJIDEwODAwLCAzMDAgfSB9LAoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCAzMDcgfSB9LAoJeyAweDIwODIsIHsgMHg0MDAsIDEwODAwLCAzMDcgfSB9LAoJeyAweDAwODEsIHsgMCwJIDEwODAwLCAzMTUgfSB9LAoJeyAweDAwODIsIHsgMCwJIDEwODAwLCAzMTUgfSB9LAoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCAzMjIgfSB9LAoJeyAweDIwODIsIHsgMHg0MDAsIDEwODAwLCAzMjIgfSB9LAoJeyAweDAwODEsIHsgMCwJIDEwODAwLCAzMzAgfSB9LAoJeyAweDAwODIsIHsgMCwJIDEwODAwLCAzMzAgfSB9LAoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCAzMzcgfSB9LAoJeyAweDIwODIsIHsgMHg0MDAsIDEwODAwLCAzMzcgfSB9LAoJeyAweDAwODEsIHsgMCwJIDEwODAwLCAzNDUgfSB9LAoJeyAweDAwODIsIHsgMCwJIDEwODAwLCAzNDUgfSB9LAoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCAzNTIgfSB9LAoJeyAweDIwODIsIHsgMHg0MDAsIDEwODAwLCAzNTIgfSB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRTZWFsOFZlcnRbXSA9CS8vIGFkaiB2YWx1ZSAwIC0+IDEwODAwCnsKCXsgNSBNU09fSSwgNiBNU09fSSB9LCB7IDExIE1TT19JLCAxMiBNU09fSSB9LCB7IDE3IE1TT19JLCAxOCBNU09fSSB9LCB7IDIzIE1TT19JLCAyNCBNU09fSSB9LAoJeyAyOSBNU09fSSwgMzAgTVNPX0kgfSwgeyAzNSBNU09fSSwgMzYgTVNPX0kgfSwgeyA0MSBNU09fSSwgNDIgTVNPX0kgfSwgeyA0NyBNU09fSSwgNDggTVNPX0kgfSwKCXsgNTMgTVNPX0ksIDU0IE1TT19JIH0sIHsgNTkgTVNPX0ksIDYwIE1TT19JIH0sIHsgNjUgTVNPX0ksIDY2IE1TT19JIH0sIHsgNzEgTVNPX0ksIDcyIE1TT19JIH0sCgl7IDc3IE1TT19JLCA3OCBNU09fSSB9LCB7IDgzIE1TT19JLCA4NCBNU09fSSB9LCB7IDg5IE1TT19JLCA5MCBNU09fSSB9LCB7IDk1IE1TT19JLCA5NiBNU09fSSB9LAoJeyA1IE1TT19JLCA2IE1TT19JIH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgbXNvX3NwdFNlYWxUZXh0UmVjdFtdID0KewoJeyB7IDEgTVNPX0ksIDIgTVNPX0kgfSwgeyAzIE1TT19JLCA0IE1TT19JIH0gfQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb1NlYWw4ID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRTZWFsOFZlcnQsIHNpemVvZiggbXNvX3NwdFNlYWw4VmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCglOVUxMLCAwLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0U2VhbDI0Q2FsYywgc2l6ZW9mKCBtc29fc3B0U2VhbDI0Q2FsYyApIC8gc2l6ZW9mKCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSApLAoJKHNhbF9JbnQzMiopbXNvX3NwdERlZmF1bHQyNTAwLAoJKFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMqKW1zb19zcHRTZWFsVGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdFNlYWxUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJTlVMTCwgMCwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdFNlYWxIYW5kbGUsIHNpemVvZiggbXNvX3NwdFNlYWxIYW5kbGUgKSAvIHNpemVvZiggU3Z4TVNEZmZIYW5kbGUgKQkJLy8gaGFuZGxlcwp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0U2VhbDE2VmVydFtdID0JLy8gYWRqIHZhbHVlIDAgLT4gMTA4MDAKewoJeyAweDA1IE1TT19JLCAweDA2IE1TT19JIH0sIHsgMHgwNyBNU09fSSwgMHgwOCBNU09fSSB9LCB7IDB4MDkgTVNPX0ksIDB4MGEgTVNPX0kgfSwgeyAweDBiIE1TT19JLCAweDBjIE1TT19JIH0sCgl7IDB4MGQgTVNPX0ksIDB4MGUgTVNPX0kgfSwgeyAweDBmIE1TT19JLCAweDEwIE1TT19JIH0sIHsgMHgxMSBNU09fSSwgMHgxMiBNU09fSSB9LCB7IDB4MTMgTVNPX0ksIDB4MTQgTVNPX0kgfSwKCXsgMHgxNSBNU09fSSwgMHgxNiBNU09fSSB9LCB7IDB4MTcgTVNPX0ksIDB4MTggTVNPX0kgfSwgeyAweDE5IE1TT19JLCAweDFhIE1TT19JIH0sIHsgMHgxYiBNU09fSSwgMHgxYyBNU09fSSB9LAoJeyAweDFkIE1TT19JLCAweDFlIE1TT19JIH0sIHsgMHgxZiBNU09fSSwgMHgyMCBNU09fSSB9LCB7IDB4MjEgTVNPX0ksIDB4MjIgTVNPX0kgfSwgeyAweDIzIE1TT19JLCAweDI0IE1TT19JIH0sCgl7IDB4MjUgTVNPX0ksIDB4MjYgTVNPX0kgfSwgeyAweDI3IE1TT19JLCAweDI4IE1TT19JIH0sIHsgMHgyOSBNU09fSSwgMHgyYSBNU09fSSB9LCB7IDB4MmIgTVNPX0ksIDB4MmMgTVNPX0kgfSwKCXsgMHgyZCBNU09fSSwgMHgyZSBNU09fSSB9LCB7IDB4MmYgTVNPX0ksIDB4MzAgTVNPX0kgfSwgeyAweDMxIE1TT19JLCAweDMyIE1TT19JIH0sIHsgMHgzMyBNU09fSSwgMHgzNCBNU09fSSB9LAoJeyAweDM1IE1TT19JLCAweDM2IE1TT19JIH0sIHsgMHgzNyBNU09fSSwgMHgzOCBNU09fSSB9LCB7IDB4MzkgTVNPX0ksIDB4M2EgTVNPX0kgfSwgeyAweDNiIE1TT19JLCAweDNjIE1TT19JIH0sCgl7IDB4M2QgTVNPX0ksIDB4M2UgTVNPX0kgfSwgeyAweDNmIE1TT19JLCAweDQwIE1TT19JIH0sIHsgMHg0MSBNU09fSSwgMHg0MiBNU09fSSB9LCB7IDB4NDMgTVNPX0ksIDB4NDQgTVNPX0kgfSwKCXsgMHgwNSBNU09fSSwgMHgwNiBNU09fSSB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSBtc29fc3B0U2VhbDE2Q2FsY1tdID0KewoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAsIDAgfSB9LAkJLy8gMHgwMAoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCAzMTUgfSB9LAkJCQkvLyAweDAxCSggdGV4dGZyYW1lICkKCXsgMHgyMDgyLCB7IDB4NDAwLCAxMDgwMCwgMzE1IH0gfSwJCQkJLy8gMHgwMgoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCAxMzUgfSB9LAkJCQkvLyAweDAzCgl7IDB4MjA4MiwgeyAweDQwMCwgMTA4MDAsIDEzNSB9IH0sCQkJCS8vIDB4MDQKCXsgMHgwMDgxLCB7IDAsCSAxMDgwMCwgMCB9IH0sCgl7IDB4MDA4MiwgeyAwLAkgMTA4MDAsIDAgfSB9LAoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCAxMSB9IH0sCgl7IDB4MjA4MiwgeyAweDQwMCwgMTA4MDAsIDExIH0gfSwKCXsgMHgwMDgxLCB7IDAsCSAxMDgwMCwgMjIgfSB9LAoJeyAweDAwODIsIHsgMCwJIDEwODAwLCAyMiB9IH0sCgl7IDB4MjA4MSwgeyAweDQwMCwgMTA4MDAsIDMzIH0gfSwKCXsgMHgyMDgyLCB7IDB4NDAwLCAxMDgwMCwgMzMgfSB9LAoJeyAweDAwODEsIHsgMCwJIDEwODAwLCA0NSB9IH0sCgl7IDB4MDA4MiwgeyAwLAkgMTA4MDAsIDQ1IH0gfSwKCXsgMHgyMDgxLCB7IDB4NDAwLCAxMDgwMCwgNTYgfSB9LAoJeyAweDIwODIsIHsgMHg0MDAsIDEwODAwLCA1NiB9IH0sCgl7IDB4MDA4MSwgeyAwLAkgMTA4MDAsIDY3IH0gfSwKCXsgMHgwMDgyLCB7IDAsCSAxMDgwMCwgNjcgfSB9LAoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCA3OCB9IH0sCgl7IDB4MjA4MiwgeyAweDQwMCwgMTA4MDAsIDc4IH0gfSwKCXsgMHgwMDgxLCB7IDAsCSAxMDgwMCwgOTAgfSB9LAoJeyAweDAwODIsIHsgMCwJIDEwODAwLCA5MCB9IH0sCgl7IDB4MjA4MSwgeyAweDQwMCwgMTA4MDAsIDEwMSB9IH0sCgl7IDB4MjA4MiwgeyAweDQwMCwgMTA4MDAsIDEwMSB9IH0sCgl7IDB4MDA4MSwgeyAwLAkgMTA4MDAsIDExMiB9IH0sCgl7IDB4MDA4MiwgeyAwLAkgMTA4MDAsIDExMiB9IH0sCgl7IDB4MjA4MSwgeyAweDQwMCwgMTA4MDAsIDEyMyB9IH0sCgl7IDB4MjA4MiwgeyAweDQwMCwgMTA4MDAsIDEyMyB9IH0sCgl7IDB4MDA4MSwgeyAwLAkgMTA4MDAsIDEzNSB9IH0sCgl7IDB4MDA4MiwgeyAwLAkgMTA4MDAsIDEzNSB9IH0sCgl7IDB4MjA4MSwgeyAweDQwMCwgMTA4MDAsIDE0NiB9IH0sCgl7IDB4MjA4MiwgeyAweDQwMCwgMTA4MDAsIDE0NiB9IH0sCgl7IDB4MDA4MSwgeyAwLAkgMTA4MDAsIDE1NyB9IH0sCgl7IDB4MDA4MiwgeyAwLAkgMTA4MDAsIDE1NyB9IH0sCgl7IDB4MjA4MSwgeyAweDQwMCwgMTA4MDAsIDE2OCB9IH0sCgl7IDB4MjA4MiwgeyAweDQwMCwgMTA4MDAsIDE2OCB9IH0sCgl7IDB4MDA4MSwgeyAwLAkgMTA4MDAsIDE4MCB9IH0sCgl7IDB4MDA4MiwgeyAwLAkgMTA4MDAsIDE4MCB9IH0sCgl7IDB4MjA4MSwgeyAweDQwMCwgMTA4MDAsIDE5MSB9IH0sCgl7IDB4MjA4MiwgeyAweDQwMCwgMTA4MDAsIDE5MSB9IH0sCgl7IDB4MDA4MSwgeyAwLAkgMTA4MDAsIDIwMiB9IH0sCgl7IDB4MDA4MiwgeyAwLAkgMTA4MDAsIDIwMiB9IH0sCgl7IDB4MjA4MSwgeyAweDQwMCwgMTA4MDAsIDIxMyB9IH0sCgl7IDB4MjA4MiwgeyAweDQwMCwgMTA4MDAsIDIxMyB9IH0sCgl7IDB4MDA4MSwgeyAwLAkgMTA4MDAsIDIyNSB9IH0sCgl7IDB4MDA4MiwgeyAwLAkgMTA4MDAsIDIyNSB9IH0sCgl7IDB4MjA4MSwgeyAweDQwMCwgMTA4MDAsIDIzNiB9IH0sCgl7IDB4MjA4MiwgeyAweDQwMCwgMTA4MDAsIDIzNiB9IH0sCgl7IDB4MDA4MSwgeyAwLAkgMTA4MDAsIDI0NyB9IH0sCgl7IDB4MDA4MiwgeyAwLAkgMTA4MDAsIDI0NyB9IH0sCgl7IDB4MjA4MSwgeyAweDQwMCwgMTA4MDAsIDI1OCB9IH0sCgl7IDB4MjA4MiwgeyAweDQwMCwgMTA4MDAsIDI1OCB9IH0sCgl7IDB4MDA4MSwgeyAwLAkgMTA4MDAsIDI3MCB9IH0sCgl7IDB4MDA4MiwgeyAwLAkgMTA4MDAsIDI3MCB9IH0sCgl7IDB4MjA4MSwgeyAweDQwMCwgMTA4MDAsIDI4MSB9IH0sCgl7IDB4MjA4MiwgeyAweDQwMCwgMTA4MDAsIDI4MSB9IH0sCgl7IDB4MDA4MSwgeyAwLAkgMTA4MDAsIDI5MiB9IH0sCgl7IDB4MDA4MiwgeyAwLAkgMTA4MDAsIDI5MiB9IH0sCgl7IDB4MjA4MSwgeyAweDQwMCwgMTA4MDAsIDMwMyB9IH0sCgl7IDB4MjA4MiwgeyAweDQwMCwgMTA4MDAsIDMwMyB9IH0sCgl7IDB4MDA4MSwgeyAwLAkgMTA4MDAsIDMxNSB9IH0sCgl7IDB4MDA4MiwgeyAwLAkgMTA4MDAsIDMxNSB9IH0sCgl7IDB4MjA4MSwgeyAweDQwMCwgMTA4MDAsIDMyNiB9IH0sCgl7IDB4MjA4MiwgeyAweDQwMCwgMTA4MDAsIDMyNiB9IH0sCgl7IDB4MDA4MSwgeyAwLAkgMTA4MDAsIDMzNyB9IH0sCgl7IDB4MDA4MiwgeyAwLAkgMTA4MDAsIDMzNyB9IH0sCgl7IDB4MjA4MSwgeyAweDQwMCwgMTA4MDAsIDM0OCB9IH0sCgl7IDB4MjA4MiwgeyAweDQwMCwgMTA4MDAsIDM0OCB9IH0KfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29TZWFsMTYgPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdFNlYWwxNlZlcnQsIHNpemVvZiggbXNvX3NwdFNlYWwxNlZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJTlVMTCwgMCwKCShTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSopbXNvX3NwdFNlYWwxNkNhbGMsIHNpemVvZiggbXNvX3NwdFNlYWwxNkNhbGMgKSAvIHNpemVvZiggU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgKSwKCShzYWxfSW50MzIqKW1zb19zcHREZWZhdWx0MjUwMCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0U2VhbFRleHRSZWN0LCBzaXplb2YoIG1zb19zcHRTZWFsVGV4dFJlY3QgKSAvIHNpemVvZiggU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyApLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCU5VTEwsIDAsCgkoU3Z4TVNEZmZIYW5kbGUqKW1zb19zcHRTZWFsSGFuZGxlLCBzaXplb2YoIG1zb19zcHRTZWFsSGFuZGxlICkgLyBzaXplb2YoIFN2eE1TRGZmSGFuZGxlICkJCS8vIGhhbmRsZXMKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdFNlYWwyNFZlcnRbXSA9CnsKCXsgMHgwNSBNU09fSSwgMHgwNiBNU09fSSB9LCB7IDB4MDcgTVNPX0ksIDB4MDggTVNPX0kgfSwgeyAweDA5IE1TT19JLCAweDBhIE1TT19JIH0sIHsgMHgwYiBNU09fSSwgMHgwYyBNU09fSSB9LAoJeyAweDBkIE1TT19JLCAweDBlIE1TT19JIH0sIHsgMHgwZiBNU09fSSwgMHgxMCBNU09fSSB9LCB7IDB4MTEgTVNPX0ksIDB4MTIgTVNPX0kgfSwgeyAweDEzIE1TT19JLCAweDE0IE1TT19JIH0sCgl7IDB4MTUgTVNPX0ksIDB4MTYgTVNPX0kgfSwgeyAweDE3IE1TT19JLCAweDE4IE1TT19JIH0sIHsgMHgxOSBNU09fSSwgMHgxYSBNU09fSSB9LCB7IDB4MWIgTVNPX0ksIDB4MWMgTVNPX0kgfSwKCXsgMHgxZCBNU09fSSwgMHgxZSBNU09fSSB9LCB7IDB4MWYgTVNPX0ksIDB4MjAgTVNPX0kgfSwgeyAweDIxIE1TT19JLCAweDIyIE1TT19JIH0sIHsgMHgyMyBNU09fSSwgMHgyNCBNU09fSSB9LAoJeyAweDI1IE1TT19JLCAweDI2IE1TT19JIH0sIHsgMHgyNyBNU09fSSwgMHgyOCBNU09fSSB9LCB7IDB4MjkgTVNPX0ksIDB4MmEgTVNPX0kgfSwgeyAweDJiIE1TT19JLCAweDJjIE1TT19JIH0sCgl7IDB4MmQgTVNPX0ksIDB4MmUgTVNPX0kgfSwgeyAweDJmIE1TT19JLCAweDMwIE1TT19JIH0sIHsgMHgzMSBNU09fSSwgMHgzMiBNU09fSSB9LCB7IDB4MzMgTVNPX0ksIDB4MzQgTVNPX0kgfSwKCXsgMHgzNSBNU09fSSwgMHgzNiBNU09fSSB9LCB7IDB4MzcgTVNPX0ksIDB4MzggTVNPX0kgfSwgeyAweDM5IE1TT19JLCAweDNhIE1TT19JIH0sIHsgMHgzYiBNU09fSSwgMHgzYyBNU09fSSB9LAoJeyAweDNkIE1TT19JLCAweDNlIE1TT19JIH0sIHsgMHgzZiBNU09fSSwgMHg0MCBNU09fSSB9LCB7IDB4NDEgTVNPX0ksIDB4NDIgTVNPX0kgfSwgeyAweDQzIE1TT19JLCAweDQ0IE1TT19JIH0sCgl7IDB4NDUgTVNPX0ksIDB4NDYgTVNPX0kgfSwgeyAweDQ3IE1TT19JLCAweDQ4IE1TT19JIH0sIHsgMHg0OSBNU09fSSwgMHg0YSBNU09fSSB9LCB7IDB4NGIgTVNPX0ksIDB4NGMgTVNPX0kgfSwKCXsgMHg0ZCBNU09fSSwgMHg0ZSBNU09fSSB9LCB7IDB4NGYgTVNPX0ksIDB4NTAgTVNPX0kgfSwgeyAweDUxIE1TT19JLCAweDUyIE1TT19JIH0sIHsgMHg1MyBNU09fSSwgMHg1NCBNU09fSSB9LAoJeyAweDU1IE1TT19JLCAweDU2IE1TT19JIH0sIHsgMHg1NyBNU09fSSwgMHg1OCBNU09fSSB9LCB7IDB4NTkgTVNPX0ksIDB4NWEgTVNPX0kgfSwgeyAweDViIE1TT19JLCAweDVjIE1TT19JIH0sCgl7IDB4NWQgTVNPX0ksIDB4NWUgTVNPX0kgfSwgeyAweDVmIE1TT19JLCAweDYwIE1TT19JIH0sIHsgMHg2MSBNU09fSSwgMHg2MiBNU09fSSB9LCB7IDB4NjMgTVNPX0ksIDB4NjQgTVNPX0kgfSwKCXsgMHgwNSBNU09fSSwgMHgwNiBNU09fSSB9Cn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvU2VhbDI0ID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRTZWFsMjRWZXJ0LCBzaXplb2YoIG1zb19zcHRTZWFsMjRWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCU5VTEwsIDAsCgkoU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEqKW1zb19zcHRTZWFsMjRDYWxjLCBzaXplb2YoIG1zb19zcHRTZWFsMjRDYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0RGVmYXVsdDI1MDAsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdFNlYWxUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0U2VhbFRleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTIxNjAwLCAyMTYwMCwKCU14ODAwMDAwMDAsIE14ODAwMDAwMDAsCglOVUxMLCAwLAoJKFN2eE1TRGZmSGFuZGxlKiltc29fc3B0U2VhbEhhbmRsZSwgc2l6ZW9mKCBtc29fc3B0U2VhbEhhbmRsZSApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCQkvLyBoYW5kbGVzCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSBtc29fc3B0U2VhbDMyQ2FsY1tdID0KewoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAsIDAgfSB9LAkJLy8gMHgwMAoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCAzMTUgfSB9LAkJCQkvLyAweDAxCSggdGV4dGZyYW1lICkKCXsgMHgyMDgyLCB7IDB4NDAwLCAxMDgwMCwgMzE1IH0gfSwJCQkJLy8gMHgwMgoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCAxMzUgfSB9LAkJCQkvLyAweDAzCgl7IDB4MjA4MiwgeyAweDQwMCwgMTA4MDAsIDEzNSB9IH0sCQkJCS8vIDB4MDQKCXsgMHgwMDgxLCB7IDAsCSAxMDgwMCwgMCB9IH0sCgl7IDB4MDA4MiwgeyAwLAkgMTA4MDAsIDAgfSB9LAoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCA1IH0gfSwKCXsgMHgyMDgyLCB7IDB4NDAwLCAxMDgwMCwgNSB9IH0sCgl7IDB4MDA4MSwgeyAwLAkgMTA4MDAsIDExIH0gfSwKCXsgMHgwMDgyLCB7IDAsCSAxMDgwMCwgMTEgfSB9LAoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCAxNiB9IH0sCgl7IDB4MjA4MiwgeyAweDQwMCwgMTA4MDAsIDE2IH0gfSwKCXsgMHgwMDgxLCB7IDAsCSAxMDgwMCwgMjIgfSB9LAoJeyAweDAwODIsIHsgMCwJIDEwODAwLCAyMiB9IH0sCgl7IDB4MjA4MSwgeyAweDQwMCwgMTA4MDAsIDI4IH0gfSwKCXsgMHgyMDgyLCB7IDB4NDAwLCAxMDgwMCwgMjggfSB9LAoJeyAweDAwODEsIHsgMCwJIDEwODAwLCAzMyB9IH0sCgl7IDB4MDA4MiwgeyAwLAkgMTA4MDAsIDMzIH0gfSwKCXsgMHgyMDgxLCB7IDB4NDAwLCAxMDgwMCwgMzkgfSB9LAoJeyAweDIwODIsIHsgMHg0MDAsIDEwODAwLCAzOSB9IH0sCgl7IDB4MDA4MSwgeyAwLAkgMTA4MDAsIDQ1IH0gfSwKCXsgMHgwMDgyLCB7IDAsCSAxMDgwMCwgNDUgfSB9LAoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCA1MCB9IH0sCgl7IDB4MjA4MiwgeyAweDQwMCwgMTA4MDAsIDUwIH0gfSwKCXsgMHgwMDgxLCB7IDAsCSAxMDgwMCwgNTYgfSB9LAoJeyAweDAwODIsIHsgMCwJIDEwODAwLCA1NiB9IH0sCgl7IDB4MjA4MSwgeyAweDQwMCwgMTA4MDAsIDYxIH0gfSwKCXsgMHgyMDgyLCB7IDB4NDAwLCAxMDgwMCwgNjEgfSB9LAoJeyAweDAwODEsIHsgMCwJIDEwODAwLCA2NyB9IH0sCgl7IDB4MDA4MiwgeyAwLAkgMTA4MDAsIDY3IH0gfSwKCXsgMHgyMDgxLCB7IDB4NDAwLCAxMDgwMCwgNzMgfSB9LAoJeyAweDIwODIsIHsgMHg0MDAsIDEwODAwLCA3MyB9IH0sCgl7IDB4MDA4MSwgeyAwLAkgMTA4MDAsIDc4IH0gfSwKCXsgMHgwMDgyLCB7IDAsCSAxMDgwMCwgNzggfSB9LAoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCA4NCB9IH0sCgl7IDB4MjA4MiwgeyAweDQwMCwgMTA4MDAsIDg0IH0gfSwKCXsgMHgwMDgxLCB7IDAsCSAxMDgwMCwgOTAgfSB9LAoJeyAweDAwODIsIHsgMCwJIDEwODAwLCA5MCB9IH0sCgl7IDB4MjA4MSwgeyAweDQwMCwgMTA4MDAsIDk1IH0gfSwKCXsgMHgyMDgyLCB7IDB4NDAwLCAxMDgwMCwgOTUgfSB9LAoJeyAweDAwODEsIHsgMCwJIDEwODAwLCAxMDEgfSB9LAoJeyAweDAwODIsIHsgMCwJIDEwODAwLCAxMDEgfSB9LAoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCAxMDYgfSB9LAoJeyAweDIwODIsIHsgMHg0MDAsIDEwODAwLCAxMDYgfSB9LAoJeyAweDAwODEsIHsgMCwJIDEwODAwLCAxMTIgfSB9LAoJeyAweDAwODIsIHsgMCwJIDEwODAwLCAxMTIgfSB9LAoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCAxMTggfSB9LAoJeyAweDIwODIsIHsgMHg0MDAsIDEwODAwLCAxMTggfSB9LAoJeyAweDAwODEsIHsgMCwJIDEwODAwLCAxMjMgfSB9LAoJeyAweDAwODIsIHsgMCwJIDEwODAwLCAxMjMgfSB9LAoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCAxMjkgfSB9LAoJeyAweDIwODIsIHsgMHg0MDAsIDEwODAwLCAxMjkgfSB9LAoJeyAweDAwODEsIHsgMCwJIDEwODAwLCAxMzUgfSB9LAoJeyAweDAwODIsIHsgMCwJIDEwODAwLCAxMzUgfSB9LAoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCAxNDAgfSB9LAoJeyAweDIwODIsIHsgMHg0MDAsIDEwODAwLCAxNDAgfSB9LAoJeyAweDAwODEsIHsgMCwJIDEwODAwLCAxNDYgfSB9LAoJeyAweDAwODIsIHsgMCwJIDEwODAwLCAxNDYgfSB9LAoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCAxNTEgfSB9LAoJeyAweDIwODIsIHsgMHg0MDAsIDEwODAwLCAxNTEgfSB9LAoJeyAweDAwODEsIHsgMCwJIDEwODAwLCAxNTcgfSB9LAoJeyAweDAwODIsIHsgMCwJIDEwODAwLCAxNTcgfSB9LAoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCAxNjMgfSB9LAoJeyAweDIwODIsIHsgMHg0MDAsIDEwODAwLCAxNjMgfSB9LAoJeyAweDAwODEsIHsgMCwJIDEwODAwLCAxNjggfSB9LAoJeyAweDAwODIsIHsgMCwJIDEwODAwLCAxNjggfSB9LAoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCAxNzQgfSB9LAoJeyAweDIwODIsIHsgMHg0MDAsIDEwODAwLCAxNzQgfSB9LAoJeyAweDAwODEsIHsgMCwJIDEwODAwLCAxODAgfSB9LAoJeyAweDAwODIsIHsgMCwJIDEwODAwLCAxODAgfSB9LAoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCAxODUgfSB9LAoJeyAweDIwODIsIHsgMHg0MDAsIDEwODAwLCAxODUgfSB9LAoJeyAweDAwODEsIHsgMCwJIDEwODAwLCAxOTEgfSB9LAoJeyAweDAwODIsIHsgMCwJIDEwODAwLCAxOTEgfSB9LAoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCAxOTYgfSB9LAoJeyAweDIwODIsIHsgMHg0MDAsIDEwODAwLCAxOTYgfSB9LAoJeyAweDAwODEsIHsgMCwJIDEwODAwLCAyMDIgfSB9LAoJeyAweDAwODIsIHsgMCwJIDEwODAwLCAyMDIgfSB9LAoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCAyMDggfSB9LAoJeyAweDIwODIsIHsgMHg0MDAsIDEwODAwLCAyMDggfSB9LAoJeyAweDAwODEsIHsgMCwJIDEwODAwLCAyMTMgfSB9LAoJeyAweDAwODIsIHsgMCwJIDEwODAwLCAyMTMgfSB9LAoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCAyMTkgfSB9LAoJeyAweDIwODIsIHsgMHg0MDAsIDEwODAwLCAyMTkgfSB9LAoJeyAweDAwODEsIHsgMCwJIDEwODAwLCAyMjUgfSB9LAoJeyAweDAwODIsIHsgMCwJIDEwODAwLCAyMjUgfSB9LAoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCAyMzAgfSB9LAoJeyAweDIwODIsIHsgMHg0MDAsIDEwODAwLCAyMzAgfSB9LAoJeyAweDAwODEsIHsgMCwJIDEwODAwLCAyMzYgfSB9LAoJeyAweDAwODIsIHsgMCwJIDEwODAwLCAyMzYgfSB9LAoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCAyNDEgfSB9LAoJeyAweDIwODIsIHsgMHg0MDAsIDEwODAwLCAyNDEgfSB9LAoJeyAweDAwODEsIHsgMCwJIDEwODAwLCAyNDcgfSB9LAoJeyAweDAwODIsIHsgMCwJIDEwODAwLCAyNDcgfSB9LAoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCAyNTMgfSB9LAoJeyAweDIwODIsIHsgMHg0MDAsIDEwODAwLCAyNTMgfSB9LAoJeyAweDAwODEsIHsgMCwJIDEwODAwLCAyNTggfSB9LAoJeyAweDAwODIsIHsgMCwJIDEwODAwLCAyNTggfSB9LAoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCAyNjQgfSB9LAoJeyAweDIwODIsIHsgMHg0MDAsIDEwODAwLCAyNjQgfSB9LAoJeyAweDAwODEsIHsgMCwJIDEwODAwLCAyNzAgfSB9LAoJeyAweDAwODIsIHsgMCwJIDEwODAwLCAyNzAgfSB9LAoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCAyNzUgfSB9LAoJeyAweDIwODIsIHsgMHg0MDAsIDEwODAwLCAyNzUgfSB9LAoJeyAweDAwODEsIHsgMCwJIDEwODAwLCAyODEgfSB9LAoJeyAweDAwODIsIHsgMCwJIDEwODAwLCAyODEgfSB9LAoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCAyODYgfSB9LAoJeyAweDIwODIsIHsgMHg0MDAsIDEwODAwLCAyODYgfSB9LAoJeyAweDAwODEsIHsgMCwJIDEwODAwLCAyOTIgfSB9LAoJeyAweDAwODIsIHsgMCwJIDEwODAwLCAyOTIgfSB9LAoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCAyOTggfSB9LAoJeyAweDIwODIsIHsgMHg0MDAsIDEwODAwLCAyOTggfSB9LAoJeyAweDAwODEsIHsgMCwJIDEwODAwLCAzMDMgfSB9LAoJeyAweDAwODIsIHsgMCwJIDEwODAwLCAzMDMgfSB9LAoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCAzMDkgfSB9LAoJeyAweDIwODIsIHsgMHg0MDAsIDEwODAwLCAzMDkgfSB9LAoJeyAweDAwODEsIHsgMCwJIDEwODAwLCAzMTUgfSB9LAoJeyAweDAwODIsIHsgMCwJIDEwODAwLCAzMTUgfSB9LAoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCAzMjAgfSB9LAoJeyAweDIwODIsIHsgMHg0MDAsIDEwODAwLCAzMjAgfSB9LAoJeyAweDAwODEsIHsgMCwJIDEwODAwLCAzMjYgfSB9LAoJeyAweDAwODIsIHsgMCwJIDEwODAwLCAzMjYgfSB9LAoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCAzMzEgfSB9LAoJeyAweDIwODIsIHsgMHg0MDAsIDEwODAwLCAzMzEgfSB9LAoJeyAweDAwODEsIHsgMCwJIDEwODAwLCAzMzcgfSB9LAoJeyAweDAwODIsIHsgMCwJIDEwODAwLCAzMzcgfSB9LAoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCAzNDMgfSB9LAoJeyAweDIwODIsIHsgMHg0MDAsIDEwODAwLCAzNDMgfSB9LAoJeyAweDAwODEsIHsgMCwJIDEwODAwLCAzNDggfSB9LAoJeyAweDAwODIsIHsgMCwJIDEwODAwLCAzNDggfSB9LAoJeyAweDIwODEsIHsgMHg0MDAsIDEwODAwLCAzNTQgfSB9LAoJeyAweDIwODIsIHsgMHg0MDAsIDEwODAwLCAzNTQgfSB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRTZWFsMzJWZXJ0W10gPQp7Cgl7IDB4MDUgTVNPX0ksIDB4MDYgTVNPX0kgfSwgeyAweDA3IE1TT19JLCAweDA4IE1TT19JIH0sIHsgMHgwOSBNU09fSSwgMHgwYSBNU09fSSB9LCB7IDB4MGIgTVNPX0ksIDB4MGMgTVNPX0kgfSwKCXsgMHgwZCBNU09fSSwgMHgwZSBNU09fSSB9LCB7IDB4MGYgTVNPX0ksIDB4MTAgTVNPX0kgfSwgeyAweDExIE1TT19JLCAweDEyIE1TT19JIH0sIHsgMHgxMyBNU09fSSwgMHgxNCBNU09fSSB9LAoJeyAweDE1IE1TT19JLCAweDE2IE1TT19JIH0sIHsgMHgxNyBNU09fSSwgMHgxOCBNU09fSSB9LCB7IDB4MTkgTVNPX0ksIDB4MWEgTVNPX0kgfSwgeyAweDFiIE1TT19JLCAweDFjIE1TT19JIH0sCgl7IDB4MWQgTVNPX0ksIDB4MWUgTVNPX0kgfSwgeyAweDFmIE1TT19JLCAweDIwIE1TT19JIH0sIHsgMHgyMSBNU09fSSwgMHgyMiBNU09fSSB9LCB7IDB4MjMgTVNPX0ksIDB4MjQgTVNPX0kgfSwKCXsgMHgyNSBNU09fSSwgMHgyNiBNU09fSSB9LCB7IDB4MjcgTVNPX0ksIDB4MjggTVNPX0kgfSwgeyAweDI5IE1TT19JLCAweDJhIE1TT19JIH0sIHsgMHgyYiBNU09fSSwgMHgyYyBNU09fSSB9LAoJeyAweDJkIE1TT19JLCAweDJlIE1TT19JIH0sIHsgMHgyZiBNU09fSSwgMHgzMCBNU09fSSB9LCB7IDB4MzEgTVNPX0ksIDB4MzIgTVNPX0kgfSwgeyAweDMzIE1TT19JLCAweDM0IE1TT19JIH0sCgl7IDB4MzUgTVNPX0ksIDB4MzYgTVNPX0kgfSwgeyAweDM3IE1TT19JLCAweDM4IE1TT19JIH0sIHsgMHgzOSBNU09fSSwgMHgzYSBNU09fSSB9LCB7IDB4M2IgTVNPX0ksIDB4M2MgTVNPX0kgfSwKCXsgMHgzZCBNU09fSSwgMHgzZSBNU09fSSB9LCB7IDB4M2YgTVNPX0ksIDB4NDAgTVNPX0kgfSwgeyAweDQxIE1TT19JLCAweDQyIE1TT19JIH0sIHsgMHg0MyBNU09fSSwgMHg0NCBNU09fSSB9LAoJeyAweDQ1IE1TT19JLCAweDQ2IE1TT19JIH0sIHsgMHg0NyBNU09fSSwgMHg0OCBNU09fSSB9LCB7IDB4NDkgTVNPX0ksIDB4NGEgTVNPX0kgfSwgeyAweDRiIE1TT19JLCAweDRjIE1TT19JIH0sCgl7IDB4NGQgTVNPX0ksIDB4NGUgTVNPX0kgfSwgeyAweDRmIE1TT19JLCAweDUwIE1TT19JIH0sIHsgMHg1MSBNU09fSSwgMHg1MiBNU09fSSB9LCB7IDB4NTMgTVNPX0ksIDB4NTQgTVNPX0kgfSwKCXsgMHg1NSBNU09fSSwgMHg1NiBNU09fSSB9LCB7IDB4NTcgTVNPX0ksIDB4NTggTVNPX0kgfSwgeyAweDU5IE1TT19JLCAweDVhIE1TT19JIH0sIHsgMHg1YiBNU09fSSwgMHg1YyBNU09fSSB9LAoJeyAweDVkIE1TT19JLCAweDVlIE1TT19JIH0sIHsgMHg1ZiBNU09fSSwgMHg2MCBNU09fSSB9LCB7IDB4NjEgTVNPX0ksIDB4NjIgTVNPX0kgfSwgeyAweDYzIE1TT19JLCAweDY0IE1TT19JIH0sCgl7IDB4NjUgTVNPX0ksIDB4NjYgTVNPX0kgfSwgeyAweDY3IE1TT19JLCAweDY4IE1TT19JIH0sIHsgMHg2OSBNU09fSSwgMHg2YSBNU09fSSB9LCB7IDB4NmIgTVNPX0ksIDB4NmMgTVNPX0kgfSwKCXsgMHg2ZCBNU09fSSwgMHg2ZSBNU09fSSB9LCB7IDB4NmYgTVNPX0ksIDB4NzAgTVNPX0kgfSwgeyAweDcxIE1TT19JLCAweDcyIE1TT19JIH0sIHsgMHg3MyBNU09fSSwgMHg3NCBNU09fSSB9LAoJeyAweDc1IE1TT19JLCAweDc2IE1TT19JIH0sIHsgMHg3NyBNU09fSSwgMHg3OCBNU09fSSB9LCB7IDB4NzkgTVNPX0ksIDB4N2EgTVNPX0kgfSwgeyAweDdiIE1TT19JLCAweDdjIE1TT19JIH0sCgl7IDB4N2QgTVNPX0ksIDB4N2UgTVNPX0kgfSwgeyAweDdmIE1TT19JLCAweDgwIE1TT19JIH0sIHsgMHg4MSBNU09fSSwgMHg4MiBNU09fSSB9LCB7IDB4ODMgTVNPX0ksIDB4ODQgTVNPX0kgfSwKCXsgMHgwNSBNU09fSSwgMHgwNiBNU09fSSB9Cn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvU2VhbDMyID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRTZWFsMzJWZXJ0LCBzaXplb2YoIG1zb19zcHRTZWFsMzJWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCU5VTEwsIDAsCgkoU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEqKW1zb19zcHRTZWFsMzJDYWxjLCBzaXplb2YoIG1zb19zcHRTZWFsMzJDYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0RGVmYXVsdDI1MDAsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdFNlYWxUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0U2VhbFRleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTIxNjAwLCAyMTYwMCwKCU14ODAwMDAwMDAsIE14ODAwMDAwMDAsCglOVUxMLCAwLAoJKFN2eE1TRGZmSGFuZGxlKiltc29fc3B0U2VhbEhhbmRsZSwgc2l6ZW9mKCBtc29fc3B0U2VhbEhhbmRsZSApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0UmliYm9uMlZlcnRbXSA9CS8vIGFkanVzdG1lbnQxIDogeCAyNzAwCSAtIDgxMDAJCWRlZiA1NDAwCnsJCQkJCQkJCQkJCQkJCS8vIGFkanVzdG1lbnQyIDogeSAxNDQwMCAtIDIxNjAwCWRlZiAxODkwMAoJeyAxMiBNU09fSSwgMSBNU09fSSB9LCB7IDEyIE1TT19JLCAxMyBNU09fSSB9LAkJCQkJCQkJCQkvLyBwcAoJeyAxMiBNU09fSSwgMTQgTVNPX0kgfSwgeyAxNSBNU09fSSwgMjE2MDAgfSwgeyAxNiBNU09fSSwgMjE2MDAgfSwJCQkJCS8vIGNjcAoJeyAwLCAyMTYwMCB9LCB7IDI3NTAsIDcgTVNPX0kgfSwgeyAwLCAyIE1TT19JIH0sIHsgMCBNU09fSSwgMiBNU09fSSB9LAkJCQkvLyBwcHBwCgl7IDAgTVNPX0ksIDQgTVNPX0kgfSwJCQkJCQkJCQkJCQkJCQkJLy8gcAoJeyAwIE1TT19JLCA1IE1TT19JIH0sIHsgMTAgTVNPX0ksIDAgfSwgeyAxMSBNU09fSSwgMCB9LAkJCQkJCQkJLy8gY2NwCgl7IDE3IE1TT19JLCAwIH0sCQkJCQkJCQkJCQkJCQkJCQkvLyBwCgl7IDE4IE1TT19JLCAwIH0sIHsgMTkgTVNPX0ksIDUgTVNPX0kgfSwgeyAxOSBNU09fSSwgNCBNU09fSSB9LAkJCQkJCS8vIGNjcAoJeyAxOSBNU09fSSwgMiBNU09fSSB9LCB7IDIxNjAwLCAyIE1TT19JIH0sIHsgMTg4NTAsIDcgTVNPX0kgfSwgeyAyMTYwMCwgMjE2MDAgfSwJLy8gcHBwcAoJeyAyMCBNU09fSSwgMjE2MDAgfSwJCQkJCQkJCQkJCQkJCQkJLy8gcAoJeyAyMSBNU09fSSwgMjE2MDAgfSwgeyAyMiBNU09fSSwgMTQgTVNPX0kgfSwgeyAyMiBNU09fSSwgMTMgTVNPX0kgfSwJCQkJLy8gY2NwCgl7IDIyIE1TT19JLCAxIE1TT19JIH0sIHsgMTIgTVNPX0ksIDEgTVNPX0kgfSwgeyAxMiBNU09fSSwgMTMgTVNPX0kgfSwJCQkJLy8gcHBwCgl7IDEyIE1TT19JLCAyMyBNU09fSSB9LCB7IDE1IE1TT19JLCAyNCBNU09fSSB9LCB7IDE2IE1TT19JLCAyNCBNU09fSSB9LAkJCQkvLyBjY3AKCXsgMTEgTVNPX0ksIDI0IE1TT19JIH0sCQkJCQkJCQkJCQkJCQkJCS8vIHAKCXsgMTAgTVNPX0ksIDI0IE1TT19JIH0sIHsgMCBNU09fSSwgMjYgTVNPX0kgfSwgeyAwIE1TT19JLCAyNSBNU09fSSB9LAkJCQkvLyBjY3AKCXsgMCBNU09fSSwgMjcgTVNPX0kgfSwgeyAxMCBNU09fSSwgMSBNU09fSSB9LCB7IDExIE1TT19JLCAxIE1TT19JIH0sCQkJCS8vIGNjcAoKCXsgMjIgTVNPX0ksIDEgTVNPX0kgfSwgeyAyMiBNU09fSSwgMTMgTVNPX0kgfSwJCQkJCQkJCQkJLy8gcHAKCXsgMjIgTVNPX0ksIDIzIE1TT19JIH0sIHsgMjEgTVNPX0ksIDI0IE1TT19JIH0sIHsgMjAgTVNPX0ksIDI0IE1TT19JIH0sCQkJCS8vIGNjcAoJeyAxNyBNU09fSSwgMjQgTVNPX0kgfSwJCQkJCQkJCQkJCQkJCQkJLy8gcAoJeyAxOCBNU09fSSwgMjQgTVNPX0kgfSwgeyAxOSBNU09fSSwgMjYgTVNPX0kgfSwgeyAxOSBNU09fSSwgMjUgTVNPX0kgfSwJCQkJLy8gY2NwCgl7IDE5IE1TT19JLCAyNyBNU09fSSB9LCB7IDE4IE1TT19JLCAxIE1TT19JIH0sIHsgMTcgTVNPX0ksIDEgTVNPX0kgfSwJCQkJLy8gY2NwCgoJeyAwIE1TT19JLCAyNSBNU09fSSB9LCB7IDAgTVNPX0ksIDIgTVNPX0kgfSwJCQkJCQkJCQkJLy8gcHAKCgl7IDE5IE1TT19JLCAyNSBNU09fSSB9LCB7IDE5IE1TT19JLCAyIE1TT19JIH0JCQkJCQkJCQkJLy8gcHAKfTsKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvX3NwdFJpYmJvbjJTZWdtW10gPQp7CgkweDQwMDAsIDB4MDAwMSwgMHgyMDAxLCAweDAwMDUsIDB4MjAwMSwgMHgwMDAxLCAweDIwMDEsIDB4MDAwNSwgMHgyMDAxLCAweDAwMDEsIDB4NjAwMSwgMHg4MDAwLAoJMHg0MDAwLCAweDAwMDEsIDB4MjAwMSwgMHgwMDAxLCAweDIwMDIsIDB4NjAwMSwgMHg4MDAwLAoJMHg0MDAwLCAweDAwMDEsIDB4MjAwMSwgMHgwMDAxLCAweDIwMDIsIDB4NjAwMSwgMHg4MDAwLAoJMHg0MDAwLCAweDAwMDEsIDB4ODAwMCwKCTB4NDAwMCwgMHgwMDAxLCAweDgwMDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhIG1zb19zcHRSaWJib24yQ2FsY1tdID0KewoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAsIDAgfSB9LAkJCQkvLyAwMAoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0MlZhbHVlLCAwLCAwIH0gfSwJCQkvLyAwMQoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIDB4NDAxIH0gfSwJCQkJCQkvLyAwMgoJeyAweDIwMDEsIHsgMHg0MDIsIDEsIDIgfSB9LAkJCQkJCQkvLyAwMwoJeyAweDIwMDEsIHsgMHg0MDMsIDEsIDIgfSB9LAkJCQkJCQkvLyAwNAoJeyAweDIwMDEsIHsgMHg0MDQsIDEsIDIgfSB9LAkJCQkJCQkvLyAwNQoJeyAweDIwMDEsIHsgMHg0MDEsIDEsIDIgfSB9LAkJCQkJCQkvLyAwNgoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIDB4NDA2IH0gfSwJCQkJCQkvLyAwNwoJeyAweDAwMDAsIHsgNDIwLCAwLCAwIH0gfSwJCQkJCQkJCS8vIDA4Cgl7IDB4MjAwMSwgeyAweDQwOCwgMiwgMSB9IH0sCQkJCQkJCS8vIDA5Cgl7IDB4NjAwMCwgeyAweDQwMCwgMHg0MDgsIDAgfSB9LAkJCQkJCS8vIDEwCgl7IDB4NjAwMCwgeyAweDQwMCwgMHg0MDksIDAgfSB9LAkJCQkJCS8vIDExCgl7IDB4MjAwMCwgeyAweDQwMCwgMjcwMCwgMCB9IH0sCQkJCQkJCS8vIDEyCgl7IDB4ODAwMCwgeyAyMTYwMCwgMCwgMHg0MDQgfSB9LAkJCQkJCS8vIDEzCgl7IDB4ODAwMCwgeyAyMTYwMCwgMCwgMHg0MDUgfSB9LAkJCQkJCS8vIDE0Cgl7IDB4YTAwMCwgeyAweDQwYywgMCwgMHg0MDggfSB9LAkJCQkJCS8vIDE1Cgl7IDB4YTAwMCwgeyAweDQwYywgMCwgMHg0MDkgfSB9LAkJCQkJCS8vIDE2CgoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIDB4NDBiIH0gfSwJCQkJCQkvLyAxNwoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIDB4NDBhIH0gfSwJCQkJCQkvLyAxOAoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIDB4NDAwIH0gfSwJCQkJCQkvLyAxOQoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIDB4NDEwIH0gfSwJCQkJCQkvLyAyMAoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIDB4NDBmIH0gfSwJCQkJCQkvLyAyMQoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIDB4NDBjIH0gfSwJCQkJCQkvLyAyMgoKCXsgMHhhMDAwLCB7IDB4NDBkLCAwLCAweDQwNSB9IH0sCQkJCQkJLy8gMjMKCXsgMHg2MDAwLCB7IDB4NDAxLCAweDQwMywgMCB9IH0sCQkJCQkJLy8gMjQKCXsgMHg2MDAwLCB7IDB4NDAxLCAweDQwNCwgMCB9IH0sCQkJCQkJLy8gMjUKCXsgMHg2MDAwLCB7IDB4NDE5LCAweDQwNSwgMCB9IH0sCQkJCQkJLy8gMjYKCXsgMHhhMDAwLCB7IDB4NDE5LCAwLCAweDQwNSB9IH0JCQkJCQkJLy8gMjcKfTsKc3RhdGljIGNvbnN0IHNhbF9JbnQzMiBtc29fc3B0UmliYm9uMkRlZmF1bHRbXSA9CnsKCTIsIDU0MDAsIDE4OTAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzIG1zb19zcHRSaWJib24yVGV4dFJlY3RbXSA9CnsKCXsgeyAwIE1TT19JLCAwIH0sIHsgMTkgTVNPX0ksIDEgTVNPX0kgfSB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkhhbmRsZSBtc29fc3B0UmliYm9uMkhhbmRsZVtdID0KewoJewlNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0UsCgkJMHgxMDAsIDAsIDEwODAwLCAxMDgwMCwgMjcwMCwgODEwMCwgTXg4MDAwMDAwMCwgMHg3ZmZmZmZmZiB9LAoJewlNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0UsCgkJMTA4MDAsIDB4MTAxLCAxMDgwMCwgMTA4MDAsIE14ODAwMDAwMDAsIDB4N2ZmZmZmZmYsIDE0NDAwLCAyMTYwMCB9Cn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvUmliYm9uMiA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0UmliYm9uMlZlcnQsIHNpemVvZiggbXNvX3NwdFJpYmJvbjJWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0UmliYm9uMlNlZ20sIHNpemVvZiggbXNvX3NwdFJpYmJvbjJTZWdtICkgPj4gMSwKCShTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSopbXNvX3NwdFJpYmJvbjJDYWxjLCBzaXplb2YoIG1zb19zcHRSaWJib24yQ2FsYyApIC8gc2l6ZW9mKCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSApLAoJKHNhbF9JbnQzMiopbXNvX3NwdFJpYmJvbjJEZWZhdWx0LAoJKFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMqKW1zb19zcHRSaWJib24yVGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdFJpYmJvbjJUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJTlVMTCwgMCwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdFJpYmJvbjJIYW5kbGUsIHNpemVvZiggbXNvX3NwdFJpYmJvbjJIYW5kbGUgKSAvIHNpemVvZiggU3Z4TVNEZmZIYW5kbGUgKQp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdFJpYmJvblZlcnRbXSA9CnsKCXsgMCwgMCB9LCB7IDMgTVNPX0ksIDAgfSwKCXsgNCBNU09fSSwgMTEgTVNPX0kgfSwgeyA0IE1TT19JLCAxMCBNU09fSSB9LCB7IDUgTVNPX0ksIDEwIE1TT19JIH0sIHsgNSBNU09fSSwgMTEgTVNPX0kgfSwKCXsgNiBNU09fSSwgMCB9LCB7IDIxNjAwLCAwIH0sIHsgMTggTVNPX0ksIDE0IE1TT19JIH0sIHsgMjE2MDAsIDE1IE1TT19JIH0sIHsgOSBNU09fSSwgMTUgTVNPX0kgfSwgeyA5IE1TT19JLCAxNiBNU09fSSB9LCB7IDggTVNPX0ksIDIxNjAwIH0sIHsgMSBNU09fSSwgMjE2MDAgfSwKCXsgMCBNU09fSSwgMTYgTVNPX0kgfSwgeyAwIE1TT19JLCAxNSBNU09fSSB9LCB7IDAsIDE1IE1TT19JIH0sIHsgMjcwMCwgMTQgTVNPX0kgfSwKCgl7IDQgTVNPX0ksIDExIE1TT19JIH0sCgl7IDMgTVNPX0ksIDEyIE1TT19JIH0sIHsgMSBNU09fSSwgMTIgTVNPX0kgfSwKCXsgMCBNU09fSSwgMTMgTVNPX0kgfSwgeyAxIE1TT19JLCAxMCBNU09fSSB9LCB7IDQgTVNPX0ksIDEwIE1TT19JIH0sCgl7IDUgTVNPX0ksIDExIE1TT19JIH0sCgl7IDYgTVNPX0ksIDEyIE1TT19JIH0sIHsgOCBNU09fSSwgMTIgTVNPX0kgfSwKCXsgOSBNU09fSSwgMTMgTVNPX0kgfSwgeyA4IE1TT19JLCAxMCBNU09fSSB9LCB7IDUgTVNPX0ksIDEwIE1TT19JIH0sCgl7IDAgTVNPX0ksIDEzIE1TT19JIH0sCgl7IDAgTVNPX0ksIDE1IE1TT19JIH0sCgl7IDkgTVNPX0ksIDEzIE1TT19JIH0sCgl7IDkgTVNPX0ksIDE1IE1TT19JIH0KfTsKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvX3NwdFJpYmJvblNlZ21bXSA9CnsKCTB4NDAwMCwgMHgwMDAxLCAweGE3MDEsIDB4MDAwMywgMHhhODAxLCAweDAwMDUsIDB4YTgwMSwgMHgwMDAxLCAweGE3MDEsIDB4MDAwMywgMHg2MDAwLCAweDgwMDAsCgkweDQwMDAsIDB4YWEwMCwgMHhhODAxLCAweDAwMDEsIDB4YTcwMiwgMHgwMDAxLCAweDgwMDAsCgkweDQwMDAsIDB4YWEwMCwgMHhhODAxLCAweDAwMDEsIDB4YTcwMiwgMHgwMDAxLCAweDgwMDAsCgkweDQwMDAsIDB4YWEwMCwgMHgwMDAxLCAweDgwMDAsCgkweDQwMDAsIDB4YWEwMCwgMHgwMDAxLCAweDgwMDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhIG1zb19zcHRSaWJib25DYWxjW10gPQp7Cgl7IDB4MjAwMCwgeyBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMCwgMCB9IH0sCQkJCS8vIDAwCgl7IDB4MjAwMCwgeyAweDQwMCwgNjc1LCAwIH0gfSwJCQkJCQkJLy8gMDEKCXsgMHgyMDAwLCB7IDB4NDAxLCA2NzUsIDAgfSB9LAkJCQkJCQkvLyAwMgoJeyAweDIwMDAsIHsgMHg0MDIsIDY3NSwgMCB9IH0sCQkJCQkJCS8vIDAzCgl7IDB4MjAwMCwgeyAweDQwMywgNjc1LCAwIH0gfSwJCQkJCQkJLy8gMDQKCXsgMHg4MDAwLCB7IDIxNjAwLCAwLCAweDQwNCB9IH0sCQkJCQkJLy8gMDUKCXsgMHg4MDAwLCB7IDIxNjAwLCAwLCAweDQwMyB9IH0sCQkJCQkJLy8gMDYKCXsgMHg4MDAwLCB7IDIxNjAwLCAwLCAweDQwMiB9IH0sCQkJCQkJLy8gMDcKCXsgMHg4MDAwLCB7IDIxNjAwLCAwLCAweDQwMSB9IH0sCQkJCQkJLy8gMDgKCXsgMHg4MDAwLCB7IDIxNjAwLCAwLCAweDQwMCB9IH0sCQkJCQkJLy8gMDkKCXsgMHgyMDAwLCB7IERGRl9Qcm9wX2FkanVzdDJWYWx1ZSwgMCwgMCB9IH0sCQkJLy8gMTAKCXsgMHgyMDAxLCB7IDB4NDBhLCAxLCA0IH0gfSwJCQkJCQkJLy8gMTEKCXsgMHgyMDAxLCB7IDB4NDBiLCAyLCAxIH0gfSwJCQkJCQkJLy8gMTIKCXsgMHgyMDAxLCB7IDB4NDBiLCAzLCAxIH0gfSwJCQkJCQkJLy8gMTMKCXsgMHg4MDAwLCB7IDEwODAwLCAwLCAweDQwYyB9IH0sCQkJCQkJLy8gMTQKCXsgMHg4MDAwLCB7IDIxNjAwLCAwLCAweDQwYSB9IH0sCQkJCQkJLy8gMTUKCXsgMHg4MDAwLCB7IDIxNjAwLCAwLCAweDQwYiB9IH0sCQkJCQkJLy8gMTYKCXsgMHgwMDAxLCB7IDIxNjAwLCAxLCAyIH0gfSwJCQkJCQkJLy8gMTcKCXsgMHgwMDAwLCB7IDIxNjAwLCAwLCAyNzAwIH0gfSwJCQkJCQkJLy8gMTgKCXsgMHgyMDAwLCB7IDB4NDExLCAwLCAyNzAwIH0gfQkJCQkJCQkvLyAxOQp9OwpzdGF0aWMgY29uc3Qgc2FsX0ludDMyIG1zb19zcHRSaWJib25EZWZhdWx0W10gPQp7CgkyLCA1NDAwLCAyNzAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzIG1zb19zcHRSaWJib25UZXh0UmVjdFtdID0KewoJeyB7IDAgTVNPX0ksIDEwIE1TT19JIH0sIHsgOSBNU09fSSwgMjE2MDAgfSB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRSaWJib25HbHVlUG9pbnRzW10gPQp7Cgl7IDE3IE1TT19JLCAxMCBNU09fSSB9LCB7IDI3MDAsIDE0IE1TT19JIH0sIHsgMTcgTVNPX0ksIDIxNjAwIH0sIHsgMTggTVNPX0ksIDE0IE1TT19JIH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmSGFuZGxlIG1zb19zcHRSaWJib25IYW5kbGVbXSA9CnsKCXsJTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFLAoJCTB4MTAwLCAwLCAxMDgwMCwgMTA4MDAsIDI3MDAsIDgxMDAsIE14ODAwMDAwMDAsIDB4N2ZmZmZmZmYgfSwKCXsJTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFLAoJCTEwODAwLCAweDEwMSwgMTA4MDAsIDEwODAwLCBNeDgwMDAwMDAwLCAweDdmZmZmZmZmLCAwLCA3MjAwIH0KfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29SaWJib24gPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdFJpYmJvblZlcnQsIHNpemVvZiggbXNvX3NwdFJpYmJvblZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKHNhbF91SW50MTYqKW1zb19zcHRSaWJib25TZWdtLCBzaXplb2YoIG1zb19zcHRSaWJib25TZWdtICkgPj4gMSwKCShTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSopbXNvX3NwdFJpYmJvbkNhbGMsIHNpemVvZiggbXNvX3NwdFJpYmJvbkNhbGMgKSAvIHNpemVvZiggU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgKSwKCShzYWxfSW50MzIqKW1zb19zcHRSaWJib25EZWZhdWx0LAoJKFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMqKW1zb19zcHRSaWJib25UZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0UmliYm9uVGV4dFJlY3QgKSAvIHNpemVvZiggU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyApLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0UmliYm9uR2x1ZVBvaW50cywgc2l6ZW9mKCBtc29fc3B0UmliYm9uR2x1ZVBvaW50cyApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoU3Z4TVNEZmZIYW5kbGUqKW1zb19zcHRSaWJib25IYW5kbGUsIHNpemVvZiggbXNvX3NwdFJpYmJvbkhhbmRsZSApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCn07Ci8vbXNvc3B0RWxsaXBzZVJpYmJvbgovL3N2ZyBwYXRoID0gYXJAOUAzOEA4QDM3LDBAMjdAMEAyNkA5QDEzQDhANEAwQDI1QDIyQDI1QDlAMzhAOEAzN0AyMkAyNkAzQDI3bEA3QDQwQDMsd2FAOUAzNUA4QDEwQDMsMEAyMUAzM0A5QDM2QDhAMUAyMUAzMUAyMEAzMUA5QDM1QDhAMTBAMjBAMzMsLGxANUA0MHhld3JAOUAzNkA4QDFAMjBAMzFAMEAzMm5mbEAyMEAzM2VhckA5QDM2QDhAMUAyMUAzMUAyMkAzMm5mbEAyMUAzM2VtQDBAMjZuZmxAMEAzMmVtQDIyQDI2bmZsQDIyQDMyZQovL29kcCBwYXRoID0gQSA/ZjkgP2YzOCA/ZjggP2YzNyAwID9mMjcgP2YwID9mMjYgP2Y5ID9mMTMgP2Y4ID9mNCA/ZjAgP2YyNSA/ZjIyID9mMjUgP2Y5ID9mMzggP2Y4ID9mMzcgP2YyMiA/ZjI2ID9mMyA/ZjI3IEwgP2Y3ID9mNDAgP2YzIDAgVyA/ZjkgP2YzNSA/ZjggP2YxMCA/ZjMgMCA/ZjIxID9mMzMgP2Y5ID9mMzYgP2Y4ID9mMSA/ZjIxID9mMzEgP2YyMCA/ZjMxID9mOSA/ZjM1ID9mOCA/ZjEwID9mMjAgP2YzMyAwIDAgTCA/ZjUgP2Y0MCBaIE4gVyA/ZjkgP2YzNiA/ZjggP2YxID9mMjAgP2YzMSA/ZjAgP2YzMiBGIEwgP2YyMCA/ZjMzIE4gQSA/ZjkgP2YzNiA/ZjggP2YxID9mMjEgP2YzMSA/ZjIyID9mMzIgRiBMID9mMjEgP2YzMyBOIE0gP2YwID9mMjYgRiBMID9mMCA/ZjMyIE4gTSA/ZjIyID9mMjYgRiBMID9mMjIgP2YzMiBOCnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRFbGxpcHNlUmliYm9uVmVydFtdID0KewoJeyA5IE1TT19JICwgMzggTVNPX0kgfSwKCXsgOCBNU09fSSAsIDM3IE1TT19JIH0sCgl7IDAgLCAyNyBNU09fSSB9LAoJeyAwIE1TT19JICwgMjYgTVNPX0kgfSwKCXsgOSBNU09fSSAsIDEzIE1TT19JIH0sCgl7IDggTVNPX0kgLCA0IE1TT19JIH0sCgl7IDAgTVNPX0kgLCAyNSBNU09fSSB9LAoJeyAyMiBNU09fSSAsIDI1IE1TT19JIH0sCgl7IDkgTVNPX0kgLCAzOCBNU09fSSB9LAoJeyA4IE1TT19JICwgMzcgTVNPX0kgfSwKCXsgMjIgTVNPX0kgLCAyNiBNU09fSSB9LAoJeyAzIE1TT19JICwgMjcgTVNPX0kgfSwKCXsgNyBNU09fSSAsIDQwIE1TT19JIH0sCgl7IDMgTVNPX0kgLCAwIH0sCgl7IDkgTVNPX0kgLCAzNSBNU09fSSB9LAoJeyA4IE1TT19JICwgMTAgTVNPX0kgfSwKCXsgMyBNU09fSSAsIDAgfSwKCXsgMjEgTVNPX0kgLCAzMyBNU09fSSB9LAoJeyA5IE1TT19JICwgMzYgTVNPX0kgfSwKCXsgOCBNU09fSSAsIDEgTVNPX0kgfSwKCXsgMjEgTVNPX0kgLCAzMSBNU09fSSB9LAoJeyAyMCBNU09fSSAsIDMxIE1TT19JIH0sCgl7IDkgTVNPX0kgLCAzNSBNU09fSSB9LAoJeyA4IE1TT19JICwgMTAgTVNPX0kgfSwKCXsgMjAgTVNPX0kgLCAzMyBNU09fSSB9LAoJeyAwICwgMCB9LAoJeyA1IE1TT19JICwgNDAgTVNPX0kgfSwKCXsgOSBNU09fSSAsIDM2IE1TT19JIH0sCgl7IDggTVNPX0kgLCAxIE1TT19JIH0sCgl7IDIwIE1TT19JICwgMzEgTVNPX0kgfSwKCXsgMCBNU09fSSAsIDMyIE1TT19JIH0sCgl7IDIwIE1TT19JICwgMzMgTVNPX0kgfSwKCXsgOSBNU09fSSAsIDM2IE1TT19JIH0sCgl7IDggTVNPX0kgLCAxIE1TT19JIH0sCgl7IDIxIE1TT19JICwgMzEgTVNPX0kgfSwKCXsgMjIgTVNPX0kgLCAzMiBNU09fSSB9LAoJeyAyMSBNU09fSSAsIDMzIE1TT19JIH0sCgl7IDAgTVNPX0kgLCAyNiBNU09fSSB9LAoJeyAwIE1TT19JICwgMzIgTVNPX0kgfSwKCXsgMjIgTVNPX0kgLCAyNiBNU09fSSB9LAoJeyAyMiBNU09fSSAsIDMyIE1TT19JIH0KfTsKCnN0YXRpYyBjb25zdCBzYWxfdUludDE2IG1zb19zcHRFbGxpcHNlUmliYm9uU2VnbVtdID0KewoJMHhhMzBjIC8qYXIqLywweDAwMDIvKmwqLywweGE1MGMvKndhKi8sMHgwMDAxLypsKi8sCgkweDYwMDEvKngqLywgMHg4MDAwLyplKi8sMHhhNTA0Lyp3ciovLDB4YWEwMC8qbmYqLywKCTB4MDAwMS8qbCovLCAweDgwMDAvKmUqLywweGEzMDQvKmFyKi8sMHhhYTAwLypuZiovLAoJMHgwMDAxLypsKi8sIDB4ODAwMC8qZSovLDB4NDAwMC8qbSovLDB4YWEwMC8qbmYqLywKCTB4MDAwMS8qbCovLCAweDgwMDAvKmUqLywweDQwMDAvKm0qLywweGFhMDAvKm5mKi8sCgkweDAwMDEvKmwqLywgMHg4MDAwLyplKi8KfTsKCnN0YXRpYyBjb25zdCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSBtc29fc3B0RWxsaXBzZVJpYmJvbkNhbGNbXSA9CnsKCXsgMHgyMDAwICwgeyBERkZfUHJvcF9hZGp1c3RWYWx1ZSAsIDAgLCAwIH0gfSwgLy92YWwgIzAKCXsgMHgyMDAwICwgeyBERkZfUHJvcF9hZGp1c3QyVmFsdWUgLCAwICwgMCB9IH0sIC8vdmFsICMxCgl7IDB4MjAwMCAsIHsgREZGX1Byb3BfYWRqdXN0M1ZhbHVlICwgMCAsIDAgfSB9LCAvL3ZhbCAjMgoJeyAweDIwMDAgLCB7IERGRl9Qcm9wX2dlb1JpZ2h0ICwgMCAsIDAgfSB9LCAvL3ZhbCB3aWR0aAoJeyAweDIwMDAgLCB7IERGRl9Qcm9wX2dlb0JvdHRvbSAsIDAgLCAwIH0gfSwgLy92YWwgaGVpZ2h0Cgl7IDB4MjAwMSAsIHsgREZGX1Byb3BfZ2VvUmlnaHQgLCAxICwgOCB9IH0sIC8vcHJvZCB3aWR0aCAxIDgKCXsgMHgyMDAxICwgeyBERkZfUHJvcF9nZW9SaWdodCAsIDEgLCAyIH0gfSwgLy9wcm9kIHdpZHRoIDEgMgoJeyAweDIwMDEgLCB7IERGRl9Qcm9wX2dlb1JpZ2h0ICwgNyAsIDggfSB9LCAvL3Byb2Qgd2lkdGggNyA4Cgl7IDB4MjAwMSAsIHsgREZGX1Byb3BfZ2VvUmlnaHQgLCAzICwgMiB9IH0sIC8vcHJvZCB3aWR0aCAzIDIKCXsgMHg4MDAwICwgeyAwICwgMCAsIDB4NDA2IH0gfSwgLy9zdW0gMCAwIEA2Cgl7IDB4YTAwMCAsIHsgREZGX1Byb3BfZ2VvQm90dG9tICwgMCAsIERGRl9Qcm9wX2FkanVzdDNWYWx1ZSB9IH0sIC8vc3VtIGhlaWdodCAwICMyCgl7IDB4MjAwMSAsIHsgMHg0MGEgLCAzMDU3MyAsIDQwOTYgfSB9LCAvL3Byb2QgQDEwIDMwNTczIDQwOTYKCXsgMHgyMDAxICwgeyAweDQwYiAsIDIgLCAxIH0gfSwgLy9wcm9kIEAxMSAyIDEKCXsgMHhhMDAwICwgeyBERkZfUHJvcF9nZW9Cb3R0b20gLCAwICwgMHg0MGMgfSB9LCAvL3N1bSBoZWlnaHQgMCBAMTIKCXsgMHg2MDAwICwgeyAweDQwYiAsIERGRl9Qcm9wX2FkanVzdDNWYWx1ZSAsIDAgfSB9LCAvL3N1bSBAMTEgIzIgMAoJeyAweGUwMDAgLCB7IDB4NDBiICwgREZGX1Byb3BfZ2VvQm90dG9tICwgREZGX1Byb3BfYWRqdXN0MlZhbHVlIH0gfSwgLy9zdW0gQDExIGhlaWdodCAjMQoJeyAweGEwMDAgLCB7IERGRl9Qcm9wX2dlb0JvdHRvbSAsIDAgLCBERkZfUHJvcF9hZGp1c3QyVmFsdWUgfSB9LCAvL3N1bSBoZWlnaHQgMCAjMQoJeyAweDIwMDEgLCB7IDB4NDEwICwgMSAsIDIgfSB9LCAvL3Byb2QgQDE2IDEgMgoJeyAweDYwMDAgLCB7IDB4NDBiICwgMHg0MTEgLCAwIH0gfSwgLy9zdW0gQDExIEAxNyAwCgl7IDB4ZTAwMCAsIHsgMHg0MGUgLCBERkZfUHJvcF9hZGp1c3QyVmFsdWUgLCBERkZfUHJvcF9nZW9Cb3R0b20gfSB9LCAvL3N1bSBAMTQgIzEgaGVpZ2h0Cgl7IDB4NjAwMCAsIHsgREZGX1Byb3BfYWRqdXN0VmFsdWUgLCAweDQwNSAsIDAgfSB9LCAvL3N1bSAjMCBANSAwCgl7IDB4YTAwMCAsIHsgREZGX1Byb3BfZ2VvUmlnaHQgLCAwICwgMHg0MTQgfSB9LCAvL3N1bSB3aWR0aCAwIEAyMAoJeyAweGEwMDAgLCB7IERGRl9Qcm9wX2dlb1JpZ2h0ICwgMCAsIERGRl9Qcm9wX2FkanVzdFZhbHVlIH0gfSwgLy9zdW0gd2lkdGggMCAjMAoJeyAweGEwMDAgLCB7IDB4NDA2ICwgMCAsIERGRl9Qcm9wX2FkanVzdFZhbHVlIH0gfSwgLy9zdW0gQDYgMCAjMAoJeyAweGUwMGYgLCB7IDB4NDE3ICwgREZGX1Byb3BfZ2VvUmlnaHQgLCAweDQwYiB9IH0sIC8vZWxsaXBzZSBAMjMgd2lkdGggQDExCgl7IDB4ZTAwMCAsIHsgMHg0MTggLCBERkZfUHJvcF9nZW9Cb3R0b20gLCAweDQwYiB9IH0sIC8vc3VtIEAyNCBoZWlnaHQgQDExCgl7IDB4ZTAwMCAsIHsgMHg0MTkgLCAweDQwYiAsIDB4NDEzIH0gfSwgLy9zdW0gQDI1IEAxMSBAMTkKCXsgMHhlMDAwICwgeyBERkZfUHJvcF9hZGp1c3QzVmFsdWUgLCAweDQwYiAsIDB4NDEzIH0gfSwgLy9zdW0gIzIgQDExIEAxOQoJeyAweDIwMDEgLCB7IDB4NDBiICwgMjM5MSAsIDMyNzY4IH0gfSwgLy9wcm9kIEAxMSAyMzkxIDMyNzY4Cgl7IDB4YTAwMCAsIHsgMHg0MDYgLCAwICwgMHg0MTQgfSB9LCAvL3N1bSBANiAwIEAyMAoJeyAweGUwMGYgLCB7IDB4NDFkICwgREZGX1Byb3BfZ2VvUmlnaHQgLCAweDQwYiB9IH0sIC8vZWxsaXBzZSBAMjkgd2lkdGggQDExCgl7IDB4ZTAwMCAsIHsgREZGX1Byb3BfYWRqdXN0MlZhbHVlICwgMHg0MWUgLCAweDQwYiB9IH0sIC8vc3VtICMxIEAzMCBAMTEKCXsgMHhlMDAwICwgeyAweDQxOSAsIERGRl9Qcm9wX2FkanVzdDJWYWx1ZSAsIERGRl9Qcm9wX2dlb0JvdHRvbSB9IH0sIC8vc3VtIEAyNSAjMSBoZWlnaHQKCXsgMHhlMDAwICwgeyBERkZfUHJvcF9nZW9Cb3R0b20gLCAweDQxZSAsIDB4NDBlIH0gfSwgLy9zdW0gaGVpZ2h0IEAzMCBAMTQKCXsgMHg2MDAwICwgeyAweDQwYiAsIDB4NDBlICwgMCB9IH0sIC8vc3VtIEAxMSBAMTQgMAoJeyAweGEwMDAgLCB7IERGRl9Qcm9wX2dlb0JvdHRvbSAsIDAgLCAweDQyMiB9IH0sIC8vc3VtIGhlaWdodCAwIEAzNAoJeyAweGUwMDAgLCB7IDB4NDIzICwgMHg0MTMgLCAweDQwYiB9IH0sIC8vc3VtIEAzNSBAMTkgQDExCgl7IDB4ZTAwMCAsIHsgMHg0MGEgLCAweDQwZiAsIDB4NDBiIH0gfSwgLy9zdW0gQDEwIEAxNSBAMTEKCXsgMHhlMDAwICwgeyAweDQyMyAsIDB4NDBmICwgMHg0MGIgfSB9LCAvL3N1bSBAMzUgQDE1IEAxMQoJeyAweGUwMDAgLCB7IDB4NDFjICwgMHg0MGUgLCAweDQxMiB9IH0sIC8vc3VtIEAyOCBAMTQgQDE4Cgl7IDB4YTAwMCAsIHsgREZGX1Byb3BfZ2VvQm90dG9tICwgMCAsIDB4NDI3IH0gfSwgLy9zdW0gaGVpZ2h0IDAgQDM5Cgl7IDB4YTAwMCAsIHsgMHg0MTMgLCAwICwgMHg0MTIgfSB9LCAvL3N1bSBAMTkgMCBAMTgKCXsgMHgyMDAxICwgeyAweDQyOSAsIDIgLCAzIH0gfSwgLy9wcm9kIEA0MSAyIDMKCXsgMHhhMDAwICwgeyBERkZfUHJvcF9hZGp1c3QyVmFsdWUgLCAwICwgMHg0MmEgfSB9LCAvL3N1bSAjMSAwIEA0MgoJeyAweGEwMDAgLCB7IERGRl9Qcm9wX2FkanVzdDNWYWx1ZSAsIDAgLCAweDQyYSB9IH0sIC8vc3VtICMyIDAgQDQyCgl7IDB4MjAwNCAsIHsgMHg0MmMgLCAyMDkyNSAsIDAgfSB9LCAvL21pbiBANDQgMjA5MjUKCXsgMHgyMDAxICwgeyBERkZfUHJvcF9nZW9SaWdodCAsIDMgLCA4IH0gfSwgLy9wcm9kIHdpZHRoIDMgOAoJeyAweDIwMDAgLCB7IDB4NDJlICwgMCAsIDQgfSB9LCAvL3N1bSBANDYgMCA0Cn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyBtc29fc3B0RWxsaXBzZVJpYmJvblRleHRSZWN0W10gPQp7Ly9AMCxAMSxAMjIsQDI1Cgl7IHsgMCBNU09fSSwgMSBNU09fSSB9LCB7IDIyIE1TT19JLCAyNSBNU09fSSB9IH0KfTsKCnN0YXRpYyBjb25zdCBzYWxfSW50MzIgbXNvX3NwdEVsbGlwc2VSaWJib25EZWZhdWx0W10gPQp7CgkzLDU0MDAsNTQwMCwxODkwMAp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmSGFuZGxlIG1zb19zcHRFbGxpcHNlUmliYm9uSGFuZGxlW10gPQp7Ci8vcG9zaXRpb249IiMwLGJvdHRvbVJpZ2h0IiB4cmFuZ2U9IkA1LEA0NwovL3Bvc2l0aW9uPSJjZW50ZXIsIzEiIHlyYW5nZT0iQDEwLEA0MwovL3Bvc2l0aW9uPSJ0b3BMZWZ0LCMyIiB5cmFuZ2U9IkAyNyxANDUKCXsgICBNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0UgfCBNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0VfWF9NQVhfSVNfU1BFQ0lBTHwgTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFX1hfTUlOX0lTX1NQRUNJQUwsCgkJMHgxMDAsIDIxNjAwLCAwLCAwLCAweDgvKjUrMyovLCAweDMyLyo0NyszKi8sIE14ODAwMDAwMDAsIDB4N2ZmZmZmZmYgfSwKCXsJTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFIHwgTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFX1lfTUFYX0lTX1NQRUNJQUwgfCBNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0VfWV9NSU5fSVNfU1BFQ0lBTCwKCQkxMDgwMCwgMHgxMDEsIDAsIDAsIE14ODAwMDAwMDAsIDB4N2ZmZmZmZmYsMHhkLyoxMCszKi8sIDB4MmUgLyo0MyszKi8gfSwKCXsJTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFIHwgTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFX1lfTUFYX0lTX1NQRUNJQUwgfCBNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0VfWV9NSU5fSVNfU1BFQ0lBTCwKCQkwLCAweDEwMiwgMCwgMCwgTXg4MDAwMDAwMCwgMHg3ZmZmZmZmZiwweDFlLyoyNyszKi8sIDB4MzAgLyo0NSszKi8gfQp9OwoKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29zcHRFbGxpcHNlUmliYm9uID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRFbGxpcHNlUmliYm9uVmVydCwgc2l6ZW9mKCBtc29fc3B0RWxsaXBzZVJpYmJvblZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKHNhbF91SW50MTYqKW1zb19zcHRFbGxpcHNlUmliYm9uU2VnbSwgc2l6ZW9mKCBtc29fc3B0RWxsaXBzZVJpYmJvblNlZ20gKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0RWxsaXBzZVJpYmJvbkNhbGMsIHNpemVvZiggbXNvX3NwdEVsbGlwc2VSaWJib25DYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0RWxsaXBzZVJpYmJvbkRlZmF1bHQsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdEVsbGlwc2VSaWJib25UZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0RWxsaXBzZVJpYmJvblRleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTIxNjAwLCAyMTYwMCwKCU14ODAwMDAwMDAsIE14ODAwMDAwMDAsCglOVUxMLCAwLAoJKFN2eE1TRGZmSGFuZGxlKiltc29fc3B0RWxsaXBzZVJpYmJvbkhhbmRsZSwgc2l6ZW9mKCBtc29fc3B0RWxsaXBzZVJpYmJvbkhhbmRsZSApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCn07CgovL21zb3NwdEVsbGlwc2VSaWJib24yCi8vc3ZnIHBhdGggPSB3ckA5QDM0QDhAMzUsMEAyNEAwQDIzQDksMEA4QDExQDBAMjJAMTlAMjJAOUAzNEA4QDM1QDE5QDIzQDNAMjRsQDdAMzZAM0A0YXRAOUAzMUA4QDMyQDNANEAxOEAzMEA5QDFAOEAzM0AxOEAyOEAxN0AyOEA5QDMxQDhAMzJAMTdAMzAsMEA0bEA1QDM2eGVhckA5QDFAOEAzM0AxN0AyOEAwQDI5bmZsQDE3QDMwZXdyQDlAMUA4QDMzQDE4QDI4QDE5QDI5bmZsQDE4QDMwZW1AMEAyM25mbEAwQDI5ZW1AMTlAMjNuZmxAMTlAMjllCnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRFbGxpcHNlUmliYm9uMlZlcnRbXSA9CnsKCXsgOSBNU09fSSAsIDM0IE1TT19JIH0sCgl7IDggTVNPX0kgLCAzNSBNU09fSSB9LAoJeyAwICwgMjQgTVNPX0kgfSwKCXsgMCBNU09fSSAsIDIzIE1TT19JIH0sCgl7IDkgTVNPX0kgLCAwIH0sCgl7IDggTVNPX0kgLCAxMSBNU09fSSB9LAoJeyAwIE1TT19JICwgMjIgTVNPX0kgfSwKCXsgMTkgTVNPX0kgLCAyMiBNU09fSSB9LAoJeyA5IE1TT19JICwgMzQgTVNPX0kgfSwKCXsgOCBNU09fSSAsIDM1IE1TT19JIH0sCgl7IDE5IE1TT19JICwgMjMgTVNPX0kgfSwKCXsgMyBNU09fSSAsIDI0IE1TT19JIH0sCgl7IDcgTVNPX0kgLCAzNiBNU09fSSB9LAoJeyAzIE1TT19JICwgNCBNU09fSSB9LAoJeyA5IE1TT19JICwgMzEgTVNPX0kgfSwKCXsgOCBNU09fSSAsIDMyIE1TT19JIH0sCgl7IDMgTVNPX0kgLCA0IE1TT19JIH0sCgl7IDE4IE1TT19JICwgMzAgTVNPX0kgfSwKCXsgOSBNU09fSSAsIDEgTVNPX0kgfSwKCXsgOCBNU09fSSAsIDMzIE1TT19JIH0sCgl7IDE4IE1TT19JICwgMjggTVNPX0kgfSwKCXsgMTcgTVNPX0kgLCAyOCBNU09fSSB9LAoJeyA5IE1TT19JICwgMzEgTVNPX0kgfSwKCXsgOCBNU09fSSAsIDMyIE1TT19JIH0sCgl7IDE3IE1TT19JICwgMzAgTVNPX0kgfSwKCXsgMCAsIDRsIE1TT19JIH0sCgl7IDUgTVNPX0kgLCAzNiBNU09fSSB9LAoJeyA5IE1TT19JICwgMSBNU09fSSB9LAoJeyA4IE1TT19JICwgMzMgTVNPX0kgfSwKCXsgMTcgTVNPX0kgLCAyOCBNU09fSSB9LAoJeyAwIE1TT19JICwgMjkgTVNPX0kgfSwKCXsgMTcgTVNPX0kgLCAzMCBNU09fSSB9LAoJeyA5IE1TT19JICwgMSBNU09fSSB9LAoJeyA4IE1TT19JICwgMzMgTVNPX0kgfSwKCXsgMTggTVNPX0kgLCAyOCBNU09fSSB9LAoJeyAxOSBNU09fSSAsIDI5IE1TT19JIH0sCgl7IDE4IE1TT19JICwgMzAgTVNPX0kgfSwKCXsgMCBNU09fSSAsIDIzIE1TT19JIH0sCgl7IDAgTVNPX0kgLCAyOSBNU09fSSB9LAoJeyAxOSBNU09fSSAsIDIzIE1TT19JIH0sCgl7IDE5IE1TT19JICwgMjkgTVNPX0kgfQp9OwpzdGF0aWMgY29uc3Qgc2FsX3VJbnQxNiBtc29fc3B0RWxsaXBzZVJpYmJvbjJTZWdtW10gPQp7CgkweGE1MGMvKndyKi8sMHgwMDAyLypsKi8sMHhhMzBjLyphdCovLDB4MDAwMS8qbCovLAoJMHg2MDAxLyp4Ki8sIDB4ODAwMC8qZSovLDB4YTMwNC8qYXIqLywweGFhMDAvKm5mKi8sCgkweDAwMDEvKmwqLywgMHg4MDAwLyplKi8sMHhhNTA0Lyp3ciovLDB4YWEwMC8qbmYqLywKCTB4MDAwMS8qbCovLCAweDgwMDAvKmUqLywweDQwMDAvKm0qLywweGFhMDAvKm5mKi8sCgkweDAwMDEvKmwqLywgMHg4MDAwLyplKi8sMHg0MDAwLyptKi8sMHhhYTAwLypuZiovLAoJMHgwMDAxLypsKi8sIDB4ODAwMC8qZSovCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgbXNvX3NwdEVsbGlwc2VSaWJib24yQ2FsY1tdID0KewoJeyAweDIwMDAgLCB7IERGRl9Qcm9wX2FkanVzdFZhbHVlICwgMCAsIDAgfSB9LCAvL3ZhbCAjMAoJeyAweDIwMDAgLCB7IERGRl9Qcm9wX2FkanVzdDJWYWx1ZSAsIDAgLCAwIH0gfSwgLy92YWwgIzEKCXsgMHgyMDAwICwgeyBERkZfUHJvcF9hZGp1c3QzVmFsdWUgLCAwICwgMCB9IH0sIC8vdmFsICMyCgl7IDB4MjAwMCAsIHsgREZGX1Byb3BfZ2VvUmlnaHQgLCAwICwgMCB9IH0sIC8vdmFsIHdpZHRoCgl7IDB4MjAwMCAsIHsgREZGX1Byb3BfZ2VvQm90dG9tICwgMCAsIDAgfSB9LCAvL3ZhbCBoZWlnaHQKCXsgMHgyMDAxICwgeyBERkZfUHJvcF9nZW9SaWdodCAsIDEgLCA4IH0gfSwgLy9wcm9kIHdpZHRoIDEgOAoJeyAweDIwMDEgLCB7IERGRl9Qcm9wX2dlb1JpZ2h0ICwgMSAsIDIgfSB9LCAvL3Byb2Qgd2lkdGggMSAyCgl7IDB4MjAwMSAsIHsgREZGX1Byb3BfZ2VvUmlnaHQgLCA3ICwgOCB9IH0sIC8vcHJvZCB3aWR0aCA3IDgKCXsgMHgyMDAxICwgeyBERkZfUHJvcF9nZW9SaWdodCAsIDMgLCAyIH0gfSwgLy9wcm9kIHdpZHRoIDMgMgoJeyAweDgwMDAgLCB7IDAgLCAwICwgMHg0MDYgfSB9LCAvL3N1bSAwIDAgQDYKCXsgMHgyMDAxICwgeyBERkZfUHJvcF9hZGp1c3QzVmFsdWUgLCAzMDU3MyAsIDQwOTYgfSB9LCAvL3Byb2QgIzIgMzA1NzMgNDA5NgoJeyAweDIwMDEgLCB7IDB4NDBhICwgMiAsIDEgfSB9LCAvL3Byb2QgQDEwIDIgMQoJeyAweGUwMDAgLCB7IDB4NDBhICwgREZGX1Byb3BfZ2VvQm90dG9tICwgREZGX1Byb3BfYWRqdXN0M1ZhbHVlIH0gfSwgLy9zdW0gQDEwIGhlaWdodCAjMgoJeyAweDYwMDAgLCB7IDB4NDBhICwgREZGX1Byb3BfYWRqdXN0MlZhbHVlICwgMCB9IH0sIC8vc3VtIEAxMCAjMSAwCgl7IDB4MjAwMSAsIHsgREZGX1Byb3BfYWRqdXN0MlZhbHVlICwgMSAsIDIgfSB9LCAvL3Byb2QgIzEgMSAyCgl7IDB4NjAwMCAsIHsgMHg0MGEgLCAweDQwZSAsIDAgfSB9LCAvL3N1bSBAMTAgQDE0IDAKCXsgMHhhMDAwICwgeyAweDQwYyAsIDAgLCBERkZfUHJvcF9hZGp1c3QyVmFsdWUgfSB9LCAvL3N1bSBAMTIgMCAjMQoJeyAweDYwMDAgLCB7IERGRl9Qcm9wX2FkanVzdFZhbHVlICwgMHg0MDUgLCAwIH0gfSwgLy9zdW0gIzAgQDUgMAoJeyAweGEwMDAgLCB7IERGRl9Qcm9wX2dlb1JpZ2h0ICwgMCAsIDB4NDExIH0gfSwgLy9zdW0gd2lkdGggMCBAMTcKCXsgMHhhMDAwICwgeyBERkZfUHJvcF9nZW9SaWdodCAsIDAgLCBERkZfUHJvcF9hZGp1c3RWYWx1ZSB9IH0sIC8vc3VtIHdpZHRoIDAgIzAKCXsgMHhhMDAwICwgeyAweDQwNiAsIDAgLCBERkZfUHJvcF9hZGp1c3RWYWx1ZSB9IH0sIC8vc3VtIEA2IDAgIzAKCXsgMHhlMDBmICwgeyAweDQxNCAsIERGRl9Qcm9wX2dlb1JpZ2h0ICwgMHg0MGEgfSB9LCAvL2VsbGlwc2UgQDIwIHdpZHRoIEAxMAoJeyAweGEwMDAgLCB7IDB4NDBhICwgMCAsIDB4NDE1IH0gfSwgLy9zdW0gQDEwIDAgQDIxCgl7IDB4ZTAwMCAsIHsgMHg0MTYgLCAweDQxMCAsIDB4NDBhIH0gfSwgLy9zdW0gQDIyIEAxNiBAMTAKCXsgMHhlMDAwICwgeyBERkZfUHJvcF9hZGp1c3QzVmFsdWUgLCAweDQxMCAsIDB4NDBhIH0gfSwgLy9zdW0gIzIgQDE2IEAxMAoJeyAweDIwMDEgLCB7IDB4NDBhICwgMjM5MSAsIDMyNzY4IH0gfSwgLy9wcm9kIEAxMCAyMzkxIDMyNzY4Cgl7IDB4YTAwMCAsIHsgMHg0MDYgLCAwICwgMHg0MTEgfSB9LCAvL3N1bSBANiAwIEAxNwoJeyAweGUwMGYgLCB7IDB4NDFhICwgREZGX1Byb3BfZ2VvUmlnaHQgLCAweDQwYSB9IH0sIC8vZWxsaXBzZSBAMjYgd2lkdGggQDEwCgl7IDB4ZTAwMCAsIHsgMHg0MGEgLCBERkZfUHJvcF9hZGp1c3QyVmFsdWUgLCAweDQxYiB9IH0sIC8vc3VtIEAxMCAjMSBAMjcKCXsgMHg2MDAwICwgeyAweDQxNiAsIERGRl9Qcm9wX2FkanVzdDJWYWx1ZSAsIDAgfSB9LCAvL3N1bSBAMjIgIzEgMAoJeyAweGEwMDAgLCB7IDB4NDBjICwgMCAsIDB4NDFiIH0gfSwgLy9zdW0gQDEyIDAgQDI3Cgl7IDB4YTAwMCAsIHsgREZGX1Byb3BfZ2VvQm90dG9tICwgMCAsIERGRl9Qcm9wX2FkanVzdDNWYWx1ZSB9IH0sIC8vc3VtIGhlaWdodCAwICMyCgl7IDB4NjAwMCAsIHsgMHg0MGEgLCAweDQwYyAsIDAgfSB9LCAvL3N1bSBAMTAgQDEyIDAKCXsgMHhlMDAwICwgeyAweDQyMCAsIDB4NDBhICwgMHg0MTAgfSB9LCAvL3N1bSBAMzIgQDEwIEAxNgoJeyAweGUwMDAgLCB7IDB4NDFmICwgMHg0MGEgLCAweDQwZCB9IH0sIC8vc3VtIEAzMSBAMTAgQDEzCgl7IDB4ZTAwMCAsIHsgMHg0MjAgLCAweDQwYSAsIDB4NDBkIH0gfSwgLy9zdW0gQDMyIEAxMCBAMTMKCXsgMHhlMDAwICwgeyAweDQxOSAsIDB4NDBjICwgMHg0MGYgfSB9LCAvL3N1bSBAMjUgQDEyIEAxNQoJeyAweGEwMDAgLCB7IDB4NDEwICwgMCAsIDB4NDBmIH0gfSwgLy9zdW0gQDE2IDAgQDE1Cgl7IDB4MjAwMSAsIHsgMHg0MjUgLCAyICwgMyB9IH0sIC8vcHJvZCBAMzcgMiAzCgl7IDB4NjAwMCAsIHsgMHg0MDEgLCAweDQyNiAsIDAgfSB9LCAvL3N1bSBAMSBAMzggMAoJeyAweDYwMDAgLCB7IERGRl9Qcm9wX2FkanVzdDNWYWx1ZSAsIDB4NDI2ICwgMCB9IH0sIC8vc3VtICMyIEAzOCAwCgl7IDB4MjAwNSAsIHsgMHg0MjggLCA2NzUgLCAwIH0gfSwgLy9tYXggQDQwIDY3NQoJeyAweDIwMDEgLCB7IERGRl9Qcm9wX2dlb1JpZ2h0ICwgMyAsIDggfSB9LCAvL3Byb2Qgd2lkdGggMyA4Cgl7IDB4MjAwMCAsIHsgMHg0MmEgLCAwICwgNCB9IH0gLy9zdW0gQDQyIDAgNAp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgbXNvX3NwdEVsbGlwc2VSaWJib24yVGV4dFJlY3RbXSA9CnsvL0AwLEAyMixAMTksQDEKCXsgeyAwIE1TT19JLCAyMiBNU09fSSB9LCB7IDE5IE1TT19JLCAxIE1TT19JIH0gfQp9OwoKc3RhdGljIGNvbnN0IHNhbF9JbnQzMiBtc29fc3B0RWxsaXBzZVJpYmJvbjJEZWZhdWx0W10gPQp7CgkzLDU0MDAsMTYyMDAsMjcwMAp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmSGFuZGxlIG1zb19zcHRFbGxpcHNlUmliYm9uMkhhbmRsZVtdID0KewovL3Bvc2l0aW9uPSIjMCx0b3BMZWZ0IiB4cmFuZ2U9IkA1LEA0MwovL3Bvc2l0aW9uPSJjZW50ZXIsIzEiIHlyYW5nZT0iQDM5LEAzMQovL3Bvc2l0aW9uPSJ0b3BMZWZ0LCMyIiB5cmFuZ2U9IkA0MSxAMjQKCXsgICBNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0UgfCBNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0VfWF9NQVhfSVNfU1BFQ0lBTHwgTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFX1hfTUlOX0lTX1NQRUNJQUwsCgkJMHgxMDAsIDAsIDAsIDAsIDB4OC8qNSszKi8sIDB4MmUvKjQzKzMqLywgTXg4MDAwMDAwMCwgMHg3ZmZmZmZmZiB9LAoJewlNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0UgfCBNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0VfWV9NQVhfSVNfU1BFQ0lBTCB8IE1TREZGX0hBTkRMRV9GTEFHU19SQU5HRV9ZX01JTl9JU19TUEVDSUFMLAoJCTEwODAwLCAweDEwMSwgMCwgMCwgTXg4MDAwMDAwMCwgMHg3ZmZmZmZmZiwweDJhLyozOSszKi8sIDB4MjIgLyozMSszKi8gfSwKCXsJTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFIHwgTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFX1lfTUFYX0lTX1NQRUNJQUwgfCBNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0VfWV9NSU5fSVNfU1BFQ0lBTCwKCQkwLCAweDEwMiwgMCwgMCwgTXg4MDAwMDAwMCwgMHg3ZmZmZmZmZiwweDJjLyo0MSszKi8sIDB4MWIgLyoyNCszKi8gfQp9OwoKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29zcHRFbGxpcHNlUmliYm9uMiA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0RWxsaXBzZVJpYmJvbjJWZXJ0LCBzaXplb2YoIG1zb19zcHRFbGxpcHNlUmliYm9uMlZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKHNhbF91SW50MTYqKW1zb19zcHRFbGxpcHNlUmliYm9uMlNlZ20sIHNpemVvZiggbXNvX3NwdEVsbGlwc2VSaWJib24yU2VnbSApID4+IDEsCgkoU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEqKW1zb19zcHRFbGxpcHNlUmliYm9uMkNhbGMsIHNpemVvZiggbXNvX3NwdEVsbGlwc2VSaWJib24yQ2FsYyApIC8gc2l6ZW9mKCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSApLAoJKHNhbF9JbnQzMiopbXNvX3NwdEVsbGlwc2VSaWJib24yRGVmYXVsdCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0RWxsaXBzZVJpYmJvbjJUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0RWxsaXBzZVJpYmJvbjJUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJTlVMTCwgMCwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdEVsbGlwc2VSaWJib24ySGFuZGxlLCBzaXplb2YoIG1zb19zcHRFbGxpcHNlUmliYm9uMkhhbmRsZSApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCn07Ci8vIEVuZApzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0VmVydGljYWxTY3JvbGxWZXJ0W10gPQkvLyBhZGp1c3RtZW50MSA6IDAgLSA1NDAwCnsKCXsgMSBNU09fSSwgMjE2MDAgfSwgeyAwLCAxMSBNU09fSSB9LCB7IDEgTVNPX0ksIDEyIE1TT19JIH0sIHsgMCBNU09fSSwgMTIgTVNPX0kgfSwKCXsgMCBNU09fSSwgMSBNU09fSSB9LCB7IDQgTVNPX0ksIDAgfSwgeyAyIE1TT19JLCAwIH0sIHsgMjE2MDAsIDEgTVNPX0kgfSwKCXsgMiBNU09fSSwgMCBNU09fSSB9LCB7IDMgTVNPX0ksIDAgTVNPX0kgfSwgeyAzIE1TT19JLCAxMSBNU09fSSB9LCB7IDUgTVNPX0ksIDIxNjAwIH0sCgoJeyA2IE1TT19JLCAxIE1TT19JIH0sIHsgNCBNU09fSSwgMCBNU09fSSB9LCB7IDggTVNPX0ksIDkgTVNPX0kgfSwgeyA0IE1TT19JLCAxIE1TT19JIH0sCgoJeyAwIE1TT19JLCAxMSBNU09fSSB9LCB7IDEgTVNPX0ksIDIxNjAwIH0sIHsgMCwgMTEgTVNPX0kgfSwgeyAxIE1TT19JLCAxMiBNU09fSSB9LAoJeyA5IE1TT19JLCAxMCBNU09fSSB9LCB7IDEgTVNPX0ksIDExIE1TT19JIH0sCgoJeyA0IE1TT19JLCAwIH0sIHsgNiBNU09fSSwgMSBNU09fSSB9LAoKCXsgMCBNU09fSSwgMTIgTVNPX0kgfSwgeyAwIE1TT19JLCAxMSBNU09fSSB9LAoKCXsgNCBNU09fSSwgMCBNU09fSSB9LAoJeyAyIE1TT19JLCAwIE1TT19JIH0KfTsKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvX3NwdFZlcnRpY2FsU2Nyb2xsU2VnbVtdID0KewoJMHg0MDAwLCAweGE3MDIsCTB4MDAwMiwJMHhhODAxLCAweDAwMDEsIDB4YTcwMiwgMHgwMDAyLCAweGE4MDEsIDB4NjAwMSwgMHg4MDAwLAoJMHg0MDAwLCAweGE4MDEsIDB4YTcwMiwgMHg2MDAwLCAweDgwMDAsCgkweDQwMDAsIDB4YTgwMywgMHhhNzAyLCAweDYwMDEsIDB4ODAwMCwKCTB4NDAwMCwgMHhhNzAxLCAweDgwMDAsCgkweDQwMDAsIDB4MDAwMSwgMHg4MDAwLAoJMHg0MDAwLCAweDAwMDEsIDB4ODAwMAp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgbXNvX3NwdFNjcm9sbENhbGNbXSA9CnsKCXsgMHgyMDAwLCB7IERGRl9Qcm9wX2FkanVzdFZhbHVlLCAwLCAwIH0gfSwKCXsgMHgyMDAxLCB7IDB4NDAwLCAxLCAyIH0gfSwKCXsgMHhhMDAwLCB7IERGRl9Qcm9wX2dlb1JpZ2h0LCAwLCAweDQwMSB9IH0sCgl7IDB4YTAwMCwgeyBERkZfUHJvcF9nZW9SaWdodCwgMCwgMHg0MDAgfSB9LAoJeyAweDYwMDAsIHsgMHg0MDAsIDB4NDAxLCAwIH0gfSwKCXsgMHhhMDAwLCB7IERGRl9Qcm9wX2dlb1JpZ2h0LCAwLCAweDQwNCB9IH0sCgl7IDB4MjAwMSwgeyAweDQwMCwgMiwgMSB9IH0sCgl7IDB4MjAwMSwgeyAweDQwMSwgMSwgMiB9IH0sCgl7IDB4NjAwMCwgeyAweDQwMCwgMHg0MDcsIDAgfSB9LAoJeyAweDYwMDAsIHsgMHg0MDEsIDB4NDA3LCAwIH0gfSwKCXsgMHhhMDAwLCB7IERGRl9Qcm9wX2dlb0JvdHRvbSwgMCwgMHg0MDkgfSB9LAoJeyAweGEwMDAsIHsgREZGX1Byb3BfZ2VvQm90dG9tLCAwLCAweDQwMSB9IH0sCgl7IDB4YTAwMCwgeyBERkZfUHJvcF9nZW9Cb3R0b20sIDAsIDB4NDAwIH0gfSwKCXsgMHhhMDAwLCB7IERGRl9Qcm9wX2dlb0JvdHRvbSwgMCwgMHg0MDQgfSB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzIG1zb19zcHRTY3JvbGxUZXh0UmVjdFtdID0KewoJeyB7IDAgTVNPX0ksIDAgTVNPX0kgfSwgeyAzIE1TT19JLCAxMiBNU09fSSB9IH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmSGFuZGxlIG1zb19zcHRWZXJ0aWNhbFNjcm9sbEhhbmRsZVtdID0KewoJewlNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0UsCgkJMCwgMHgxMDAsIDEwODAwLCAxMDgwMCwgTXg4MDAwMDAwMCwgMHg3ZmZmZmZmZiwgMCwgNTQwMCB9Cn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvVmVydGljYWxTY3JvbGwgPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdFZlcnRpY2FsU2Nyb2xsVmVydCwgc2l6ZW9mKCBtc29fc3B0VmVydGljYWxTY3JvbGxWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0VmVydGljYWxTY3JvbGxTZWdtLCBzaXplb2YoIG1zb19zcHRWZXJ0aWNhbFNjcm9sbFNlZ20gKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0U2Nyb2xsQ2FsYywgc2l6ZW9mKCBtc29fc3B0U2Nyb2xsQ2FsYyApIC8gc2l6ZW9mKCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSApLAoJKHNhbF9JbnQzMiopbXNvX3NwdERlZmF1bHQyNzAwLAoJKFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMqKW1zb19zcHRTY3JvbGxUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0U2Nyb2xsVGV4dFJlY3QgKSAvIHNpemVvZiggU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyApLAoJMjE2MDAsIDIxNjAwLAoJMTEwMDAsIDEwODAwLAoJTlVMTCwgMCwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdFZlcnRpY2FsU2Nyb2xsSGFuZGxlLCBzaXplb2YoIG1zb19zcHRWZXJ0aWNhbFNjcm9sbEhhbmRsZSApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRIb3Jpem9udGFsU2Nyb2xsVmVydFtdID0JLy8gYWRqdXN0bWVudDEgOiAwIC0gNTQwMAp7Cgl7IDAsIDQgTVNPX0kgfSwgeyAxIE1TT19JLCAwIE1TT19JIH0sIHsgMyBNU09fSSwgMCBNU09fSSB9LCB7IDMgTVNPX0ksIDEgTVNPX0kgfSwKCXsgMiBNU09fSSwgMCB9LCB7IDIxNjAwLCAxIE1TT19JIH0sIHsgMjE2MDAsIDEzIE1TT19JIH0sIHsgMiBNU09fSSwgMTIgTVNPX0kgfSwKCXsgMCBNU09fSSwgMTIgTVNPX0kgfSwgeyAwIE1TT19JLCAxMSBNU09fSSB9LCB7IDEgTVNPX0ksIDIxNjAwIH0sIHsgMCwgMTEgTVNPX0kgfSwKCgl7IDEgTVNPX0ksIDQgTVNPX0kgfSwgeyA5IE1TT19JLCA4IE1TT19JIH0sIHsgMCBNU09fSSwgNCBNU09fSSB9LCB7IDEgTVNPX0ksIDYgTVNPX0kgfSwKCgl7IDIgTVNPX0ksIDEgTVNPX0kgfSwgeyAzIE1TT19JLCA5IE1TT19JIH0sIHsgMyBNU09fSSwgMSBNU09fSSB9LCB7IDIgTVNPX0ksIDAgfSwKCXsgMjE2MDAsIDEgTVNPX0kgfSwgeyAyIE1TT19JLCAwIE1TT19JIH0sCgoJeyAxIE1TT19JLCA2IE1TT19JIH0sCgl7IDAsIDQgTVNPX0kgfSwKCgl7IDIgTVNPX0ksIDAgTVNPX0kgfSwKCXsgMyBNU09fSSwgMCBNU09fSSB9LAoKCXsgMCBNU09fSSwgNCBNU09fSSB9LAoJeyAwIE1TT19JLCAxMSBNU09fSSB9Cn07CnN0YXRpYyBjb25zdCBzYWxfdUludDE2IG1zb19zcHRIb3Jpem9udGFsU2Nyb2xsU2VnbVtdID0KewoJMHg0MDAwLCAweGE4MDEsIDB4MDAwMiwgMHhhODAyLCAweDAwMDEsIDB4YTgwMSwgMHgwMDAyLCAweGE4MDIsIDB4NjAwMSwgMHg4MDAwLAoJMHg0MDAwLCAweGE4MDMsIDB4NjAwMCwgMHg4MDAwLAoJMHg0MDAwLCAweGE4MDMsIDB4YTcwMiwgMHg2MDAwLCAweDgwMDAsCgkweDQwMDAsIDB4YTcwMSwgMHg4MDAwLAoJMHg0MDAwLCAweDAwMDEsIDB4ODAwMCwKCTB4NDAwMCwgMHgwMDAxLCAweDgwMDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmSGFuZGxlIG1zb19zcHRIb3Jpem9udGFsU2Nyb2xsSGFuZGxlW10gPQp7Cgl7CU1TREZGX0hBTkRMRV9GTEFHU19SQU5HRSwKCQkweDEwMCwgMCwgMTA4MDAsIDEwODAwLCAwLCA1NDAwLCBNeDgwMDAwMDAwLCAweDdmZmZmZmZmIH0KfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29Ib3Jpem9udGFsU2Nyb2xsID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRIb3Jpem9udGFsU2Nyb2xsVmVydCwgc2l6ZW9mKCBtc29fc3B0SG9yaXpvbnRhbFNjcm9sbFZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKHNhbF91SW50MTYqKW1zb19zcHRIb3Jpem9udGFsU2Nyb2xsU2VnbSwgc2l6ZW9mKCBtc29fc3B0SG9yaXpvbnRhbFNjcm9sbFNlZ20gKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0U2Nyb2xsQ2FsYywgc2l6ZW9mKCBtc29fc3B0U2Nyb2xsQ2FsYyApIC8gc2l6ZW9mKCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSApLAoJKHNhbF9JbnQzMiopbXNvX3NwdERlZmF1bHQyNzAwLAoJKFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMqKW1zb19zcHRTY3JvbGxUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0U2Nyb2xsVGV4dFJlY3QgKSAvIHNpemVvZiggU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyApLAoJMjE2MDAsIDIxNjAwLAoJMTA4MDAsIDExMDAwLAoJTlVMTCwgMCwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdEhvcml6b250YWxTY3JvbGxIYW5kbGUsIHNpemVvZiggbXNvX3NwdEhvcml6b250YWxTY3JvbGxIYW5kbGUgKSAvIHNpemVvZiggU3Z4TVNEZmZIYW5kbGUgKQp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdEZsb3dDaGFydFByb2Nlc3NWZXJ0W10gPQp7Cgl7IDAsIDAgfSwgeyAyMTYwMCwgMCB9LCB7IDIxNjAwLCAyMTYwMCB9LCB7IDAsIDIxNjAwIH0sIHsgMCwgMCB9Cn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvRmxvd0NoYXJ0UHJvY2VzcyA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0Rmxvd0NoYXJ0UHJvY2Vzc1ZlcnQsIHNpemVvZiggbXNvX3NwdEZsb3dDaGFydFByb2Nlc3NWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCU5VTEwsIDAsCglOVUxMLCAwLAoJTlVMTCwKCU5VTEwsIDAsCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRTdGFuZGFyZEdsdWVQb2ludHMsIHNpemVvZiggbXNvX3NwdFN0YW5kYXJkR2x1ZVBvaW50cyApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCglOVUxMLCAwCQkvLyBoYW5kbGVzCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0Rmxvd0NoYXJ0QWx0ZXJuYXRlUHJvY2Vzc1ZlcnRbXSA9CnsKCXsgMCwgMiBNU09fSSB9LCB7IDAgTVNPX0ksIDAgfSwgeyAxIE1TT19JLCAwIH0sIHsgMjE2MDAsIDIgTVNPX0kgfSwKCXsgMjE2MDAsIDMgTVNPX0kgfSwgeyAxIE1TT19JLCAyMTYwMCB9LCB7IDAgTVNPX0ksIDIxNjAwIH0sIHsgMCwgMyBNU09fSSB9Cn07CnN0YXRpYyBjb25zdCBzYWxfdUludDE2IG1zb19zcHRGbG93Q2hhcnRBbHRlcm5hdGVQcm9jZXNzU2VnbVtdID0KewoJMHg0MDAwLCAweGE4MDEsIDB4MDAwMSwgMHhhNzAxLCAweDAwMDEsIDB4YTgwMSwgMHgwMDAxLCAweGE3MDEsIDB4NjAwMCwgMHg4MDAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSBtc29fc3B0Rmxvd0NoYXJ0QWx0ZXJuYXRlUHJvY2Vzc0NhbGNbXSA9CnsKCXsgMHgyMDAwLCB7IERGRl9Qcm9wX2dlb0xlZnQsIDI1NDAsIDAgfSB9LAoJeyAweDIwMDAsIHsgREZGX1Byb3BfZ2VvUmlnaHQsIDAsIDI1NDAgfSB9LAoJeyAweDIwMDAsIHsgREZGX1Byb3BfZ2VvVG9wLCAyNTQwLCAwIH0gfSwKCXsgMHgyMDAwLCB7IERGRl9Qcm9wX2dlb0JvdHRvbSwgMCwgMjU0MCB9IH0sCgl7IDB4MjAwMCwgeyBERkZfUHJvcF9nZW9MZWZ0LCA4MDAsIDAgfSB9LAoJeyAweDIwMDAsIHsgREZGX1Byb3BfZ2VvUmlnaHQsIDAsIDgwMCB9IH0sCgl7IDB4MjAwMCwgeyBERkZfUHJvcF9nZW9Ub3AsIDgwMCwgMCB9IH0sCgl7IDB4MjAwMCwgeyBERkZfUHJvcF9nZW9Cb3R0b20sMCwgODAwIH0gfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyBtc29fc3B0Rmxvd0NoYXJ0QWx0ZXJuYXRlUHJvY2Vzc1RleHRSZWN0W10gPQp7Cgl7IHsgNCBNU09fSSwgNiBNU09fSSB9LCB7IDUgTVNPX0ksIDcgTVNPX0kgfSB9Cn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvRmxvd0NoYXJ0QWx0ZXJuYXRlUHJvY2VzcyA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0Rmxvd0NoYXJ0QWx0ZXJuYXRlUHJvY2Vzc1ZlcnQsIHNpemVvZiggbXNvX3NwdEZsb3dDaGFydEFsdGVybmF0ZVByb2Nlc3NWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0Rmxvd0NoYXJ0QWx0ZXJuYXRlUHJvY2Vzc1NlZ20sIHNpemVvZiggbXNvX3NwdEZsb3dDaGFydEFsdGVybmF0ZVByb2Nlc3NTZWdtICkgPj4gMSwKCShTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSopbXNvX3NwdEZsb3dDaGFydEFsdGVybmF0ZVByb2Nlc3NDYWxjLCBzaXplb2YoIG1zb19zcHRGbG93Q2hhcnRBbHRlcm5hdGVQcm9jZXNzQ2FsYyApIC8gc2l6ZW9mKCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSApLAoJTlVMTCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0Rmxvd0NoYXJ0QWx0ZXJuYXRlUHJvY2Vzc1RleHRSZWN0LCBzaXplb2YoIG1zb19zcHRGbG93Q2hhcnRBbHRlcm5hdGVQcm9jZXNzVGV4dFJlY3QgKSAvIHNpemVvZiggU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyApLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0U3RhbmRhcmRHbHVlUG9pbnRzLCBzaXplb2YoIG1zb19zcHRTdGFuZGFyZEdsdWVQb2ludHMgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJTlVMTCwgMAkJLy8gaGFuZGxlcwp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdEZsb3dDaGFydERlY2lzaW9uVmVydFtdID0KewoJeyAwLCAxMDgwMCB9LCB7IDEwODAwLCAwIH0sIHsgMjE2MDAsIDEwODAwIH0sIHsgMTA4MDAsIDIxNjAwIH0sIHsgMCwgMTA4MDAgfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyBtc29fc3B0Rmxvd0NoYXJ0RGVjaXNpb25UZXh0UmVjdFtdID0KewoJeyB7IDU0MDAsIDU0MDAgfSwgeyAxNjIwMCwgMTYyMDAgfSB9Cn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvRmxvd0NoYXJ0RGVjaXNpb24gPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdEZsb3dDaGFydERlY2lzaW9uVmVydCwgc2l6ZW9mKCBtc29fc3B0Rmxvd0NoYXJ0RGVjaXNpb25WZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCU5VTEwsIDAsCglOVUxMLCAwLAoJTlVMTCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0Rmxvd0NoYXJ0RGVjaXNpb25UZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0Rmxvd0NoYXJ0RGVjaXNpb25UZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRTdGFuZGFyZEdsdWVQb2ludHMsIHNpemVvZiggbXNvX3NwdFN0YW5kYXJkR2x1ZVBvaW50cyApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCglOVUxMLCAwCQkvLyBoYW5kbGVzCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0Rmxvd0NoYXJ0SW5wdXRPdXRwdXRWZXJ0W10gPQp7Cgl7IDQyMzAsIDAgfSwgeyAyMTYwMCwgMCB9LCB7IDE3MzcwLCAyMTYwMCB9LCB7IDAsIDIxNjAwIH0sIHsgNDIzMCwgMCB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzIG1zb19zcHRGbG93Q2hhcnRJbnB1dE91dHB1dFRleHRSZWN0W10gPQp7Cgl7IHsgNDIzMCwgMCB9LCB7IDE3MzcwLCAyMTYwMCB9IH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdEZsb3dDaGFydElucHV0T3V0cHV0R2x1ZVBvaW50c1tdID0KewoJeyAxMjk2MCwgMCB9LCB7IDEwODAwLCAwIH0sIHsgMjE2MCwgMTA4MDAgfSwgeyA4NjAwLCAyMTYwMCB9LCB7IDEwODAwLCAyMTYwMCB9LCB7IDE5NDAwLCAxMDgwMCB9Cn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvRmxvd0NoYXJ0SW5wdXRPdXRwdXQgPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdEZsb3dDaGFydElucHV0T3V0cHV0VmVydCwgc2l6ZW9mKCBtc29fc3B0Rmxvd0NoYXJ0SW5wdXRPdXRwdXRWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCU5VTEwsIDAsCglOVUxMLCAwLAoJTlVMTCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0Rmxvd0NoYXJ0SW5wdXRPdXRwdXRUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0Rmxvd0NoYXJ0SW5wdXRPdXRwdXRUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRGbG93Q2hhcnRJbnB1dE91dHB1dEdsdWVQb2ludHMsIHNpemVvZiggbXNvX3NwdEZsb3dDaGFydElucHV0T3V0cHV0R2x1ZVBvaW50cyApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCglOVUxMLCAwCQkvLyBoYW5kbGVzCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0Rmxvd0NoYXJ0UHJlZGVmaW5lZFByb2Nlc3NWZXJ0W10gPQp7Cgl7IDAsIDAgfSwgeyAyMTYwMCwgMCB9LCB7IDIxNjAwLCAyMTYwMCB9LCB7IDAsIDIxNjAwIH0sCgoJeyAyNTQwLCAwIH0sIHsgMjU0MCwgMjE2MDAgfSwKCgl7IDIxNjAwIC0gMjU0MCwgMCB9LCB7IDIxNjAwIC0gMjU0MCwgMjE2MDAgfQp9OwpzdGF0aWMgY29uc3Qgc2FsX3VJbnQxNiBtc29fc3B0Rmxvd0NoYXJ0UHJlZGVmaW5lZFByb2Nlc3NTZWdtW10gPQp7CgkweDQwMDAsIDB4MDAwMywgMHg2MDAwLCAweDgwMDAsCgkweDQwMDAsIDB4MDAwMSwgMHg4MDAwLAoJMHg0MDAwLCAweDAwMDEsIDB4ODAwMAp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyBtc29fc3B0Rmxvd0NoYXJ0UHJlZGVmaW5lZFByb2Nlc3NUZXh0UmVjdFtdID0KewoJeyB7IDI1NDAsIDAgfSwgeyAyMTYwMCAtIDI1NDAsIDIxNjAwIH0gfQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb0Zsb3dDaGFydFByZWRlZmluZWRQcm9jZXNzID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRGbG93Q2hhcnRQcmVkZWZpbmVkUHJvY2Vzc1ZlcnQsIHNpemVvZiggbXNvX3NwdEZsb3dDaGFydFByZWRlZmluZWRQcm9jZXNzVmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdEZsb3dDaGFydFByZWRlZmluZWRQcm9jZXNzU2VnbSwgc2l6ZW9mKCBtc29fc3B0Rmxvd0NoYXJ0UHJlZGVmaW5lZFByb2Nlc3NTZWdtICkgPj4gMSwKCU5VTEwsIDAsCglOVUxMLAoJKFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMqKW1zb19zcHRGbG93Q2hhcnRQcmVkZWZpbmVkUHJvY2Vzc1RleHRSZWN0LCBzaXplb2YoIG1zb19zcHRGbG93Q2hhcnRQcmVkZWZpbmVkUHJvY2Vzc1RleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTIxNjAwLCAyMTYwMCwKCU14ODAwMDAwMDAsIE14ODAwMDAwMDAsCglOVUxMLCAwLAoJTlVMTCwgMAkJLy8gaGFuZGxlcwp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdEZsb3dDaGFydEludGVybmFsU3RvcmFnZVZlcnRbXSA9CnsKCXsgMCwgMCB9LCB7IDIxNjAwLCAwIH0sIHsgMjE2MDAsIDIxNjAwIH0sIHsgMCwgMjE2MDAgfSwKCgl7IDQyMzAsIDAgfSwgeyA0MjMwLCAyMTYwMCB9LAoKCXsgMCwgNDIzMCB9LCB7IDIxNjAwLCA0MjMwIH0KfTsKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvX3NwdEZsb3dDaGFydEludGVybmFsU3RvcmFnZVNlZ21bXSA9CnsKCTB4NDAwMCwgMHgwMDAzLCAweDYwMDAsIDB4ODAwMCwKCTB4NDAwMCwgMHgwMDAxLCAweDgwMDAsCgkweDQwMDAsIDB4MDAwMSwgMHg4MDAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzIG1zb19zcHRGbG93Q2hhcnRJbnRlcm5hbFN0b3JhZ2VUZXh0UmVjdFtdID0KewoJeyB7IDQyMzAsIDQyMzAgfSwgeyAyMTYwMCwgMjE2MDAgfSB9Cn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvRmxvd0NoYXJ0SW50ZXJuYWxTdG9yYWdlID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRGbG93Q2hhcnRJbnRlcm5hbFN0b3JhZ2VWZXJ0LCBzaXplb2YoIG1zb19zcHRGbG93Q2hhcnRJbnRlcm5hbFN0b3JhZ2VWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0Rmxvd0NoYXJ0SW50ZXJuYWxTdG9yYWdlU2VnbSwgc2l6ZW9mKCBtc29fc3B0Rmxvd0NoYXJ0SW50ZXJuYWxTdG9yYWdlU2VnbSApID4+IDEsCglOVUxMLCAwLAoJTlVMTCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0Rmxvd0NoYXJ0SW50ZXJuYWxTdG9yYWdlVGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdEZsb3dDaGFydEludGVybmFsU3RvcmFnZVRleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTIxNjAwLCAyMTYwMCwKCU14ODAwMDAwMDAsIE14ODAwMDAwMDAsCglOVUxMLCAwLAoJTlVMTCwgMAkJLy8gaGFuZGxlcwp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdEZsb3dDaGFydERvY3VtZW50VmVydFtdID0KewoJeyAwLCAwIH0sIHsgMjE2MDAsIDAgfSwgeyAyMTYwMCwgMTczNjAgfSwKCXsgMTMwNTAsIDE3MjIwIH0sIHsJMTMzNDAsIDIwNzcwIH0sIHsgNTYyMCwgMjE2MDAgfSwJLy8gY2NwCgl7IDI4NjAsIDIxMTAwIH0sIHsgMTg1MCwgMjA3MDAgfSwgeyAwLAkyMDEyMCB9CQkJLy8gY2NwCn07CnN0YXRpYyBjb25zdCBzYWxfdUludDE2IG1zb19zcHRGbG93Q2hhcnREb2N1bWVudFNlZ21bXSA9CnsKCTB4NDAwMCwgMHgwMDAyLCAweDIwMDIsIDB4NjAwMCwgMHg4MDAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzIG1zb19zcHRGbG93Q2hhcnREb2N1bWVudFRleHRSZWN0W10gPQp7Cgl7IHsgMCwgMCB9LCB7IDIxNjAwLCAxNzM2MCB9IH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdEZsb3dDaGFydERvY3VtZW50R2x1ZVBvaW50c1tdID0KewoJeyAxMDgwMCwgMCB9LCB7IDAsIDEwODAwIH0sIHsgMTA4MDAsIDIwMzIwIH0sIHsgMjE2MDAsIDEwODAwIH0KfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29GbG93Q2hhcnREb2N1bWVudCA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0Rmxvd0NoYXJ0RG9jdW1lbnRWZXJ0LCBzaXplb2YoIG1zb19zcHRGbG93Q2hhcnREb2N1bWVudFZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKHNhbF91SW50MTYqKW1zb19zcHRGbG93Q2hhcnREb2N1bWVudFNlZ20sIHNpemVvZiggbXNvX3NwdEZsb3dDaGFydERvY3VtZW50U2VnbSApID4+IDEsCglOVUxMLCAwLAoJTlVMTCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0Rmxvd0NoYXJ0RG9jdW1lbnRUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0Rmxvd0NoYXJ0RG9jdW1lbnRUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRGbG93Q2hhcnREb2N1bWVudEdsdWVQb2ludHMsIHNpemVvZiggbXNvX3NwdEZsb3dDaGFydERvY3VtZW50R2x1ZVBvaW50cyApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCglOVUxMLCAwCQkvLyBoYW5kbGVzCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0Rmxvd0NoYXJ0TXVsdGlkb2N1bWVudFZlcnRbXSA9CnsKCXsgMCwgMzYwMCB9LCB7IDE1MDAsIDM2MDAgfSwgeyAxNTAwLCAxODAwIH0sIHsgMzAwMCwgMTgwMCB9LAoJeyAzMDAwLCAwIH0sIHsgMjE2MDAsIDAgfSwgeyAyMTYwMCwgMTQ0MDkgfSwgeyAyMTYwMCAtIDE1MDAsIDE0NDA5IH0sCgl7IDIxNjAwIC0gMTUwMCwgMTQ0MDkgKyAxODAwIH0sIHsgMjE2MDAgLSAzMDAwLCAxNDQwOSArIDE4MDAgfSwgeyAyMTYwMCAtIDMwMDAsIDE0NDA5ICsgMzYwMCB9LAoJeyAxMTYxMCwgMTQyOTMgKyAzNjAwIH0sIHsgMTE0NzIsIDE3MjM5ICsgMzYwMCB9LCB7IDQ4MzMsIDE3OTI4ICsgMzYwMCB9LAkJCQkJCS8vIGNjcAoJeyAyNDUwLCAxNzUxMyArIDM2MDAgfSwgeyAxNTkxLCAxNzE4MSArIDM2MDAgfSwgeyAwLCAxNjcwMCArIDM2MDAgfSwJCQkJCQkJLy8gY2NwCgoJeyAxNTAwLCAzNjAwIH0sIHsgMjE2MDAgLSAzMDAwLCAzNjAwIH0sIHsgMjE2MDAgLSAzMDAwLCAxNDQwOSArIDE4MDAgfSwKCgl7IDMwMDAsIDE4MDAgfSwgeyAyMTYwMCAtIDE1MDAsIDE4MDAgfSwgeyAyMTYwMCAtIDE1MDAsIDE0NDA5IH0KfTsKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvX3NwdEZsb3dDaGFydE11bHRpZG9jdW1lbnRTZWdtW10gPQp7CgkweDQwMDAsIDB4MDAwYSwgMHgyMDAyLCAweDYwMDAsIDB4ODAwMCwKCTB4NDAwMCwgMHhhYTAwLCAweDAwMDIsIDB4ODAwMCwJCQkvLyBOTyBGSUxMCgkweDQwMDAsIDB4YWEwMCwgMHgwMDAyLCAweDgwMDAJCQkvLyBOTyBGSUxMCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzIG1zb19zcHRGbG93Q2hhcnRNdWx0aWRvY3VtZW50VGV4dFJlY3RbXSA9CnsKCXsgeyAwLCAzNjAwIH0sIHsgMjE2MDAgLSAzMDAwLCAxNDQwOSArIDM2MDAgfSB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRGbG93Q2hhcnRNdWx0aWRvY3VtZW50R2x1ZVBvaW50c1tdID0KewoJeyAxMDgwMCwgMCB9LCB7IDAsIDEwODAwIH0sIHsgMTA4MDAsIDE5ODkwIH0sIHsgMjE2MDAsIDEwODAwIH0KfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29GbG93Q2hhcnRNdWx0aWRvY3VtZW50ID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRGbG93Q2hhcnRNdWx0aWRvY3VtZW50VmVydCwgc2l6ZW9mKCBtc29fc3B0Rmxvd0NoYXJ0TXVsdGlkb2N1bWVudFZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKHNhbF91SW50MTYqKW1zb19zcHRGbG93Q2hhcnRNdWx0aWRvY3VtZW50U2VnbSwgc2l6ZW9mKCBtc29fc3B0Rmxvd0NoYXJ0TXVsdGlkb2N1bWVudFNlZ20gKSA+PiAxLAoJTlVMTCwgMCwKCU5VTEwsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdEZsb3dDaGFydE11bHRpZG9jdW1lbnRUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0Rmxvd0NoYXJ0TXVsdGlkb2N1bWVudFRleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTIxNjAwLCAyMTYwMCwKCU14ODAwMDAwMDAsIE14ODAwMDAwMDAsCgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdEZsb3dDaGFydE11bHRpZG9jdW1lbnRHbHVlUG9pbnRzLCBzaXplb2YoIG1zb19zcHRGbG93Q2hhcnRNdWx0aWRvY3VtZW50R2x1ZVBvaW50cyApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCglOVUxMLCAwCQkvLyBoYW5kbGVzCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0Rmxvd0NoYXJ0VGVybWluYXRvclZlcnRbXSA9CnsKCXsgMzQ3MCwgMjE2MDAgfSwgeyAwLCAxMDgwMCB9LCB7IDM0NzAsIDAgfSwgeyAxODEzMCwgMCB9LAoJeyAyMTYwMCwgMTA4MDAgfSwgeyAxODEzMCwgMjE2MDAgfQp9OwpzdGF0aWMgY29uc3Qgc2FsX3VJbnQxNiBtc29fc3B0Rmxvd0NoYXJ0VGVybWluYXRvclNlZ21bXSA9CnsKCTB4NDAwMCwgMHhhNzAyLCAweDAwMDEsIDB4YTcwMiwgMHg2MDAwLCAweDgwMDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgbXNvX3NwdEZsb3dDaGFydFRlcm1pbmF0b3JUZXh0UmVjdFtdID0KewoJeyB7IDEwNjAsIDMxODAgfSwgeyAyMDU0MCwgMTg0MjAgfSB9Cn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvRmxvd0NoYXJ0VGVybWluYXRvciA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0Rmxvd0NoYXJ0VGVybWluYXRvclZlcnQsIHNpemVvZiggbXNvX3NwdEZsb3dDaGFydFRlcm1pbmF0b3JWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0Rmxvd0NoYXJ0VGVybWluYXRvclNlZ20sIHNpemVvZiggbXNvX3NwdEZsb3dDaGFydFRlcm1pbmF0b3JTZWdtICkgPj4gMSwKCU5VTEwsIDAsCglOVUxMLAoJKFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMqKW1zb19zcHRGbG93Q2hhcnRUZXJtaW5hdG9yVGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdEZsb3dDaGFydFRlcm1pbmF0b3JUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRTdGFuZGFyZEdsdWVQb2ludHMsIHNpemVvZiggbXNvX3NwdFN0YW5kYXJkR2x1ZVBvaW50cyApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCglOVUxMLCAwCQkvLyBoYW5kbGVzCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0Rmxvd0NoYXJ0UHJlcGFyYXRpb25WZXJ0W10gPQp7Cgl7IDQzNTAsIDAgfSwgeyAxNzI1MCwgMCB9LCB7IDIxNjAwLCAxMDgwMCB9LCB7IDE3MjUwLCAyMTYwMCB9LAoJeyA0MzUwLCAyMTYwMCB9LCB7IDAsIDEwODAwIH0sIHsgNDM1MCwgMCB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzIG1zb19zcHRGbG93Q2hhcnRQcmVwYXJhdGlvblRleHRSZWN0W10gPQp7Cgl7IHsgNDM1MCwgMCB9LCB7IDE3MjUwLCAyMTYwMCB9IH0KfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29GbG93Q2hhcnRQcmVwYXJhdGlvbiA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0Rmxvd0NoYXJ0UHJlcGFyYXRpb25WZXJ0LCBzaXplb2YoIG1zb19zcHRGbG93Q2hhcnRQcmVwYXJhdGlvblZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJTlVMTCwgMCwKCU5VTEwsIDAsCglOVUxMLAoJKFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMqKW1zb19zcHRGbG93Q2hhcnRQcmVwYXJhdGlvblRleHRSZWN0LCBzaXplb2YoIG1zb19zcHRGbG93Q2hhcnRQcmVwYXJhdGlvblRleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTIxNjAwLCAyMTYwMCwKCU14ODAwMDAwMDAsIE14ODAwMDAwMDAsCgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdFN0YW5kYXJkR2x1ZVBvaW50cywgc2l6ZW9mKCBtc29fc3B0U3RhbmRhcmRHbHVlUG9pbnRzICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCU5VTEwsIDAJCS8vIGhhbmRsZXMKfTsKCnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRGbG93Q2hhcnRNYW51YWxJbnB1dFZlcnRbXSA9CnsKCXsgMCwgNDMwMCB9LCB7IDIxNjAwLCAwIH0sIHsgMjE2MDAsIDIxNjAwIH0sIHsgMCwgMjE2MDAgfSwgeyAwLCA0MzAwIH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgbXNvX3NwdEZsb3dDaGFydE1hbnVhbElucHV0VGV4dFJlY3RbXSA9CnsKCXsgeyAwLCA0MzAwIH0sIHsgMjE2MDAsIDIxNjAwIH0gfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0Rmxvd0NoYXJ0TWFudWFsSW5wdXRHbHVlUG9pbnRzW10gPQp7Cgl7IDEwODAwLCAyMTUwIH0sIHsgMCwgMTA4MDAgfSwgeyAxMDgwMCwgMTk4OTAgfSwgeyAyMTYwMCwgMTA4MDAgfQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb0Zsb3dDaGFydE1hbnVhbElucHV0ID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRGbG93Q2hhcnRNYW51YWxJbnB1dFZlcnQsIHNpemVvZiggbXNvX3NwdEZsb3dDaGFydE1hbnVhbElucHV0VmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCglOVUxMLCAwLAoJTlVMTCwgMCwKCU5VTEwsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdEZsb3dDaGFydE1hbnVhbElucHV0VGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdEZsb3dDaGFydE1hbnVhbElucHV0VGV4dFJlY3QgKSAvIHNpemVvZiggU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyApLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0Rmxvd0NoYXJ0TWFudWFsSW5wdXRHbHVlUG9pbnRzLCBzaXplb2YoIG1zb19zcHRGbG93Q2hhcnRNYW51YWxJbnB1dEdsdWVQb2ludHMgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJTlVMTCwgMAkJLy8gaGFuZGxlcwp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdEZsb3dDaGFydE1hbnVhbE9wZXJhdGlvblZlcnRbXSA9CnsKCXsgMCwgMCB9LCB7IDIxNjAwLCAwIH0sIHsgMTcyNTAsIDIxNjAwIH0sIHsgNDM1MCwgMjE2MDAgfSwgeyAwLCAwIH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgbXNvX3NwdEZsb3dDaGFydE1hbnVhbE9wZXJhdGlvblRleHRSZWN0W10gPQp7Cgl7IHsgNDM1MCwgMCB9LCB7IDE3MjUwLCAyMTYwMCB9IH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdEZsb3dDaGFydE1hbnVhbE9wZXJhdGlvbkdsdWVQb2ludHNbXSA9CnsKCXsgMTA4MDAsIDAgfSwgeyAyMTYwLCAxMDgwMCB9LCB7IDEwODAwLCAyMTYwMCB9LCB7IDE5NDQwLCAxMDgwMCB9Cn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvRmxvd0NoYXJ0TWFudWFsT3BlcmF0aW9uID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRGbG93Q2hhcnRNYW51YWxPcGVyYXRpb25WZXJ0LCBzaXplb2YoIG1zb19zcHRGbG93Q2hhcnRNYW51YWxPcGVyYXRpb25WZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCU5VTEwsIDAsCglOVUxMLCAwLAoJTlVMTCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0Rmxvd0NoYXJ0TWFudWFsT3BlcmF0aW9uVGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdEZsb3dDaGFydE1hbnVhbE9wZXJhdGlvblRleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTIxNjAwLCAyMTYwMCwKCU14ODAwMDAwMDAsIE14ODAwMDAwMDAsCgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdEZsb3dDaGFydE1hbnVhbE9wZXJhdGlvbkdsdWVQb2ludHMsIHNpemVvZiggbXNvX3NwdEZsb3dDaGFydE1hbnVhbE9wZXJhdGlvbkdsdWVQb2ludHMgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJTlVMTCwgMAkJLy8gaGFuZGxlcwp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdEZsb3dDaGFydENvbm5lY3RvclZlcnRbXSA9CnsKCXsgMTA4MDAsIDEwODAwIH0sIHsgMTA4MDAsIDEwODAwIH0sICB7IDAsIDM2MCB9Cn07CnN0YXRpYyBjb25zdCBzYWxfdUludDE2IG1zb19zcHRGbG93Q2hhcnRDb25uZWN0b3JTZWdtW10gPQp7CgkweGEyMDMsIDB4NjAwMCwgMHg4MDAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzIG1zb19zcHRGbG93Q2hhcnRDb25uZWN0b3JUZXh0UmVjdFtdID0KewoJeyB7IDMxODAsIDMxODAgfSwgeyAxODQyMCwgMTg0MjAgfSB9Cn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvRmxvd0NoYXJ0Q29ubmVjdG9yID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRGbG93Q2hhcnRDb25uZWN0b3JWZXJ0LCBzaXplb2YoIG1zb19zcHRGbG93Q2hhcnRDb25uZWN0b3JWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0Rmxvd0NoYXJ0Q29ubmVjdG9yU2VnbSwgc2l6ZW9mKCBtc29fc3B0Rmxvd0NoYXJ0Q29ubmVjdG9yU2VnbSApID4+IDEsCglOVUxMLCAwLAoJTlVMTCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0Rmxvd0NoYXJ0Q29ubmVjdG9yVGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdEZsb3dDaGFydENvbm5lY3RvclRleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTIxNjAwLCAyMTYwMCwKCU14ODAwMDAwMDAsIE14ODAwMDAwMDAsCgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdEVsbGlwc2VHbHVlUG9pbnRzLCBzaXplb2YoIG1zb19zcHRFbGxpcHNlR2x1ZVBvaW50cyApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCglOVUxMLCAwCQkvLyBoYW5kbGVzCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0Rmxvd0NoYXJ0T2ZmcGFnZUNvbm5lY3RvclZlcnRbXSA9CnsKCXsgMCwgMCB9LCB7IDIxNjAwLCAwIH0sIHsgMjE2MDAsIDE3MTUwIH0sIHsgMTA4MDAsIDIxNjAwIH0sCgl7IDAsIDE3MTUwIH0sIHsgMCwgMCB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzIG1zb19zcHRGbG93Q2hhcnRPZmZwYWdlQ29ubmVjdG9yVGV4dFJlY3RbXSA9CnsKCXsgeyAwLCAwIH0sIHsgMjE2MDAsIDE3MTUwIH0gfQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb0Zsb3dDaGFydE9mZnBhZ2VDb25uZWN0b3IgPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdEZsb3dDaGFydE9mZnBhZ2VDb25uZWN0b3JWZXJ0LCBzaXplb2YoIG1zb19zcHRGbG93Q2hhcnRPZmZwYWdlQ29ubmVjdG9yVmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCglOVUxMLCAwLAoJTlVMTCwgMCwKCU5VTEwsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdEZsb3dDaGFydE9mZnBhZ2VDb25uZWN0b3JUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0Rmxvd0NoYXJ0T2ZmcGFnZUNvbm5lY3RvclRleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTIxNjAwLCAyMTYwMCwKCU14ODAwMDAwMDAsIE14ODAwMDAwMDAsCgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdFN0YW5kYXJkR2x1ZVBvaW50cywgc2l6ZW9mKCBtc29fc3B0U3RhbmRhcmRHbHVlUG9pbnRzICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCU5VTEwsIDAJCS8vIGhhbmRsZXMKfTsKCnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRGbG93Q2hhcnRQdW5jaGVkQ2FyZFZlcnRbXSA9CnsKCXsgNDMwMCwgMCB9LCB7IDIxNjAwLCAwIH0sIHsgMjE2MDAsIDIxNjAwIH0sIHsgMCwgMjE2MDAgfSwKCXsgMCwgNDMwMCB9LCB7IDQzMDAsIDAgfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyBtc29fc3B0Rmxvd0NoYXJ0UHVuY2hlZENhcmRUZXh0UmVjdFtdID0KewoJeyB7IDAsIDQzMDAgfSwgeyAyMTYwMCwgMjE2MDAgfSB9Cn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvRmxvd0NoYXJ0UHVuY2hlZENhcmQgPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdEZsb3dDaGFydFB1bmNoZWRDYXJkVmVydCwgc2l6ZW9mKCBtc29fc3B0Rmxvd0NoYXJ0UHVuY2hlZENhcmRWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCU5VTEwsIDAsCglOVUxMLCAwLAoJTlVMTCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0Rmxvd0NoYXJ0UHVuY2hlZENhcmRUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0Rmxvd0NoYXJ0UHVuY2hlZENhcmRUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRTdGFuZGFyZEdsdWVQb2ludHMsIHNpemVvZiggbXNvX3NwdFN0YW5kYXJkR2x1ZVBvaW50cyApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCglOVUxMLCAwCQkvLyBoYW5kbGVzCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0Rmxvd0NoYXJ0UHVuY2hlZFRhcGVWZXJ0W10gPQp7Cgl7IDAsIDIyMzAgfSwJCQkJCQkJCQkJCS8vIHAKCXsgODIwLCAzOTkwIH0sIHsgMzQxMCwgMzk4MCB9LCB7IDUzNzAsIDQzNjAgfSwJCQkvLyBjY3AKCXsgNzQzMCwgNDAzMCB9LAl7IDEwMTEwLCAzODkwIH0sIHsgMTA2OTAsIDIyNzAgfSwJCS8vIGNjcAoJeyAxMTQ0MCwgMzAwIH0sIHsgMTQyMDAsIDE2MCB9LCB7IDE2MTUwLCAwIH0sCQkJLy8gY2NwCgl7IDE4NjcwLCAxNzAgfSwgeyAgMjA2OTAsIDM5MCB9LCB7IDIxNjAwLCAyMjMwIH0sCQkvLyBjY3AKCXsgMjE2MDAsIDE5NDIwIH0sCQkJCQkJCQkJCS8vIHAKCXsgMjA2NDAsIDE3NTEwIH0sIHsgMTgzMjAsIDE3NDkwIH0sIHsgMTYxNDAsIDE3MjQwIH0sCS8vIGNjcAoJeyAxNDcxMCwgMTczNzAgfSwgewkxMTMxMCwgMTc1MTAgfSwgeyAxMDc3MCwgMTk0MzAgfSwJLy8gY2NwCgl7IDEwMTUwLCAyMTE1MCB9LCB7IDczODAsIDIxMjkwIH0sIHsgNTI5MCwgMjE2MDAgfSwJCS8vIGNjcAoJeyAzMjIwLCAyMTI1MCB9LCB7IDYxMCwgMjExMzAgfSwgeyAwLCAxOTQyMAl9CQkJLy8gY2NwCn07CnN0YXRpYyBjb25zdCBzYWxfdUludDE2IG1zb19zcHRGbG93Q2hhcnRQdW5jaGVkVGFwZVNlZ21bXSA9CnsKCTB4NDAwMCwgMHgyMDA0LCAweDAwMDEsIDB4MjAwNCwgMHg2MDAwLCAweDgwMDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgbXNvX3NwdEZsb3dDaGFydFB1bmNoZWRUYXBlVGV4dFJlY3RbXSA9CnsKCXsgeyAwLCA0MzYwIH0sIHsgMjE2MDAsIDE3MjQwIH0gfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0Rmxvd0NoYXJ0UHVuY2hlZFRhcGVHbHVlUG9pbnRzW10gPQp7Cgl7IDEwODAwLCAyMDIwIH0sIHsgMCwgMTA4MDAgfSwgeyAxMDgwMCwgMTkzMjAgfSwgeyAyMTYwMCwgMTA4MDAgfQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb0Zsb3dDaGFydFB1bmNoZWRUYXBlID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRGbG93Q2hhcnRQdW5jaGVkVGFwZVZlcnQsIHNpemVvZiggbXNvX3NwdEZsb3dDaGFydFB1bmNoZWRUYXBlVmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdEZsb3dDaGFydFB1bmNoZWRUYXBlU2VnbSwgc2l6ZW9mKCBtc29fc3B0Rmxvd0NoYXJ0UHVuY2hlZFRhcGVTZWdtICkgPj4gMSwKCU5VTEwsIDAsCglOVUxMLAoJKFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMqKW1zb19zcHRGbG93Q2hhcnRQdW5jaGVkVGFwZVRleHRSZWN0LCBzaXplb2YoIG1zb19zcHRGbG93Q2hhcnRQdW5jaGVkVGFwZVRleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTIxNjAwLCAyMTYwMCwKCU14ODAwMDAwMDAsIE14ODAwMDAwMDAsCgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdEZsb3dDaGFydFB1bmNoZWRUYXBlR2x1ZVBvaW50cywgc2l6ZW9mKCBtc29fc3B0Rmxvd0NoYXJ0UHVuY2hlZFRhcGVHbHVlUG9pbnRzICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCU5VTEwsIDAJCS8vIGhhbmRsZXMKfTsKCnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRGbG93Q2hhcnRTdW1taW5nSnVuY3Rpb25WZXJ0W10gPQp7Cgl7IDEwODAwLCAxMDgwMCB9LCB7IDEwODAwLCAxMDgwMCB9LCB7IDAsIDM2MCB9LAoKCXsgMzEwMCwgMzEwMCB9LAoJeyAxODUwMCwgMTg1MDAgfSwKCgl7IDMxMDAsIDE4NTAwIH0sCgl7IDE4NTAwLCAzMTAwIH0KfTsKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvX3NwdEZsb3dDaGFydFN1bW1pbmdKdW5jdGlvblNlZ21bXSA9CnsKCTB4YTIwMywgMHg2MDAwLCAweDgwMDAsCgkweDQwMDAsIDB4MDAwMSwgMHg4MDAwLAoJMHg0MDAwLCAweDAwMDEsIDB4ODAwMAp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyBtc29fc3B0Rmxvd0NoYXJ0U3VtbWluZ0p1bmN0aW9uVGV4dFJlY3RbXSA9CnsKCXsgeyAzMTAwLCAzMTAwIH0sIHsgMTg1MDAsIDE4NTAwIH0gfQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb0Zsb3dDaGFydFN1bW1pbmdKdW5jdGlvbiA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0Rmxvd0NoYXJ0U3VtbWluZ0p1bmN0aW9uVmVydCwgc2l6ZW9mKCBtc29fc3B0Rmxvd0NoYXJ0U3VtbWluZ0p1bmN0aW9uVmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdEZsb3dDaGFydFN1bW1pbmdKdW5jdGlvblNlZ20sIHNpemVvZiggbXNvX3NwdEZsb3dDaGFydFN1bW1pbmdKdW5jdGlvblNlZ20gKSA+PiAxLAoJTlVMTCwgMCwKCU5VTEwsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdEZsb3dDaGFydFN1bW1pbmdKdW5jdGlvblRleHRSZWN0LCBzaXplb2YoIG1zb19zcHRGbG93Q2hhcnRTdW1taW5nSnVuY3Rpb25UZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRFbGxpcHNlR2x1ZVBvaW50cywgc2l6ZW9mKCBtc29fc3B0RWxsaXBzZUdsdWVQb2ludHMgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJTlVMTCwgMAkJLy8gaGFuZGxlcwp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdEZsb3dDaGFydE9yVmVydFtdID0KewoJeyAxMDgwMCwgMTA4MDAgfSwgeyAxMDgwMCwgMTA4MDAgfSwgeyAwLCAzNjAgfSwKCgl7IDAsIDEwODAwIH0sIHsgMjE2MDAsIDEwODAwIH0sCgoJeyAxMDgwMCwgMCB9LCB7IDEwODAwLCAyMTYwMCB9Cn07CnN0YXRpYyBjb25zdCBzYWxfdUludDE2IG1zb19zcHRGbG93Q2hhcnRPclNlZ21bXSA9CnsKCTB4YTIwMywgMHg2MDAwLCAweDgwMDAsCgkweDQwMDAsIDB4MDAwMSwgMHg4MDAwLAoJMHg0MDAwLCAweDAwMDEsIDB4ODAwMAp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyBtc29fc3B0Rmxvd0NoYXJ0T3JUZXh0UmVjdFtdID0KewoJeyB7IDMxMDAsIDMxMDAgfSwgeyAxODUwMCwgMTg1MDAgfSB9Cn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvRmxvd0NoYXJ0T3IgPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdEZsb3dDaGFydE9yVmVydCwgc2l6ZW9mKCBtc29fc3B0Rmxvd0NoYXJ0T3JWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0Rmxvd0NoYXJ0T3JTZWdtLCBzaXplb2YoIG1zb19zcHRGbG93Q2hhcnRPclNlZ20gKSA+PiAxLAoJTlVMTCwgMCwKCU5VTEwsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdEZsb3dDaGFydE9yVGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdEZsb3dDaGFydE9yVGV4dFJlY3QgKSAvIHNpemVvZiggU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyApLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0RWxsaXBzZUdsdWVQb2ludHMsIHNpemVvZiggbXNvX3NwdEVsbGlwc2VHbHVlUG9pbnRzICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCU5VTEwsIDAJCS8vIGhhbmRsZXMKfTsKCnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRGbG93Q2hhcnRDb2xsYXRlVmVydFtdID0KewoJeyAwLCAwIH0sIHsgMjE2MDAsIDIxNjAwIH0sIHsgMCwgMjE2MDAgfSwgeyAyMTYwMCwgMCB9LCB7IDAsIDAgfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyBtc29fc3B0Rmxvd0NoYXJ0Q29sbGF0ZVRleHRSZWN0W10gPQp7Cgl7IHsgNTQwMCwgNTQwMCB9LCB7IDE2MjAwLCAxNjIwMCB9IH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdEZsb3dDaGFydENvbGxhdGVHbHVlUG9pbnRzW10gPQp7Cgl7IDEwODAwLCAwIH0sIHsgMTA4MDAsIDEwODAwIH0sIHsgMTA4MDAsIDIxNjAwIH0KfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29GbG93Q2hhcnRDb2xsYXRlID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRGbG93Q2hhcnRDb2xsYXRlVmVydCwgc2l6ZW9mKCBtc29fc3B0Rmxvd0NoYXJ0Q29sbGF0ZVZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJTlVMTCwgMCwKCU5VTEwsIDAsCglOVUxMLAoJKFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMqKW1zb19zcHRGbG93Q2hhcnRDb2xsYXRlVGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdEZsb3dDaGFydENvbGxhdGVUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRGbG93Q2hhcnRDb2xsYXRlR2x1ZVBvaW50cywgc2l6ZW9mKCBtc29fc3B0Rmxvd0NoYXJ0Q29sbGF0ZUdsdWVQb2ludHMgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJTlVMTCwgMAkJLy8gaGFuZGxlcwp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdEZsb3dDaGFydFNvcnRWZXJ0W10gPQp7Cgl7IDAsIDEwODAwIH0sIHsgMTA4MDAsIDAgfSwgeyAyMTYwMCwgMTA4MDAgfSwgeyAxMDgwMCwgMjE2MDAgfSwKCgl7IDAsIDEwODAwIH0sIHsgMjE2MDAsIDEwODAwIH0KfTsKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvX3NwdEZsb3dDaGFydFNvcnRTZWdtW10gPQp7CgkweDQwMDAsIDB4MDAwMywgMHg2MDAwLCAweDgwMDAsCgkweDQwMDAsIDB4MDAwMSwgMHg4MDAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzIG1zb19zcHRGbG93Q2hhcnRTb3J0VGV4dFJlY3RbXSA9CnsKCXsgeyA1NDAwLCA1NDAwIH0sIHsgMTYyMDAsIDE2MjAwIH0gfQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb0Zsb3dDaGFydFNvcnQgPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdEZsb3dDaGFydFNvcnRWZXJ0LCBzaXplb2YoIG1zb19zcHRGbG93Q2hhcnRTb3J0VmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdEZsb3dDaGFydFNvcnRTZWdtLCBzaXplb2YoIG1zb19zcHRGbG93Q2hhcnRTb3J0U2VnbSApID4+IDEsCglOVUxMLCAwLAoJTlVMTCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0Rmxvd0NoYXJ0U29ydFRleHRSZWN0LCBzaXplb2YoIG1zb19zcHRGbG93Q2hhcnRTb3J0VGV4dFJlY3QgKSAvIHNpemVvZiggU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyApLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCU5VTEwsIDAsCglOVUxMLCAwCQkvLyBoYW5kbGVzCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0Rmxvd0NoYXJ0RXh0cmFjdFZlcnRbXSA9CnsKCXsgMTA4MDAsIDAgfSwgeyAyMTYwMCwgMjE2MDAgfSwgeyAwLCAyMTYwMCB9LCB7IDEwODAwLCAwIH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgbXNvX3NwdEZsb3dDaGFydEV4dHJhY3RUZXh0UmVjdFtdID0KewoJeyB7IDU0MDAsIDEwODAwIH0sIHsgMTYyMDAsIDIxNjAwIH0gfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0Rmxvd0NoYXJ0RXh0cmFjdEdsdWVQb2ludHNbXSA9CnsKCXsgMTA4MDAsIDAgfSwgeyA1NDAwLCAxMDgwMCB9LCB7IDEwODAwLCAyMTYwMCB9LCB7IDE2MjAwLCAxMDgwMCB9Cn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvRmxvd0NoYXJ0RXh0cmFjdCA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0Rmxvd0NoYXJ0RXh0cmFjdFZlcnQsIHNpemVvZiggbXNvX3NwdEZsb3dDaGFydEV4dHJhY3RWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCU5VTEwsIDAsCglOVUxMLCAwLAoJTlVMTCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0Rmxvd0NoYXJ0RXh0cmFjdFRleHRSZWN0LCBzaXplb2YoIG1zb19zcHRGbG93Q2hhcnRFeHRyYWN0VGV4dFJlY3QgKSAvIHNpemVvZiggU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyApLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0Rmxvd0NoYXJ0RXh0cmFjdEdsdWVQb2ludHMsIHNpemVvZiggbXNvX3NwdEZsb3dDaGFydEV4dHJhY3RHbHVlUG9pbnRzICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCU5VTEwsIDAJCS8vIGhhbmRsZXMKfTsKCnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRGbG93Q2hhcnRNZXJnZVZlcnRbXSA9CnsKCXsgMCwgMCB9LCB7IDIxNjAwLCAwIH0sIHsgMTA4MDAsIDIxNjAwIH0sIHsgMCwgMCB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzIG1zb19zcHRGbG93Q2hhcnRNZXJnZVRleHRSZWN0W10gPQp7Cgl7IHsgNTQwMCwgMCB9LCB7IDE2MjAwLCAxMDgwMCB9IH0KfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29GbG93Q2hhcnRNZXJnZSA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0Rmxvd0NoYXJ0TWVyZ2VWZXJ0LCBzaXplb2YoIG1zb19zcHRGbG93Q2hhcnRNZXJnZVZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJTlVMTCwgMCwKCU5VTEwsIDAsCglOVUxMLAoJKFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMqKW1zb19zcHRGbG93Q2hhcnRNZXJnZVRleHRSZWN0LCBzaXplb2YoIG1zb19zcHRGbG93Q2hhcnRNZXJnZVRleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTIxNjAwLCAyMTYwMCwKCU14ODAwMDAwMDAsIE14ODAwMDAwMDAsCgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdEZsb3dDaGFydEV4dHJhY3RHbHVlUG9pbnRzLCBzaXplb2YoIG1zb19zcHRGbG93Q2hhcnRFeHRyYWN0R2x1ZVBvaW50cyApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCglOVUxMLCAwCQkvLyBoYW5kbGVzCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0Rmxvd0NoYXJ0T25saW5lU3RvcmFnZVZlcnRbXSA9CnsKCXsgMzYwMCwgMjE2MDAgfSwgeyAwLCAxMDgwMCB9LCB7IDM2MDAsIDAgfSwgeyAyMTYwMCwgMCB9LAoJeyAxODAwMCwgMTA4MDAgfSwgeyAyMTYwMCwgMjE2MDAgfQp9OwpzdGF0aWMgY29uc3Qgc2FsX3VJbnQxNiBtc29fc3B0Rmxvd0NoYXJ0T25saW5lU3RvcmFnZVNlZ21bXSA9CnsKCTB4NDAwMCwgMHhhNzAyLCAweDAwMDEsIDB4YTcwMiwgMHg2MDAwLCAweDgwMDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgbXNvX3NwdEZsb3dDaGFydE9ubGluZVN0b3JhZ2VUZXh0UmVjdFtdID0KewoJeyB7IDM2MDAsIDAgfSwgeyAxODAwMCwgMjE2MDAgfSB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRGbG93Q2hhcnRPbmxpbmVTdG9yYWdlR2x1ZVBvaW50c1tdID0KewoJeyAxMDgwMCwgMCB9LCB7IDAsIDEwODAwIH0sIHsgMTA4MDAsIDIxNjAwIH0sIHsgMTgwMDAsIDEwODAwIH0KfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29GbG93Q2hhcnRPbmxpbmVTdG9yYWdlID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRGbG93Q2hhcnRPbmxpbmVTdG9yYWdlVmVydCwgc2l6ZW9mKCBtc29fc3B0Rmxvd0NoYXJ0T25saW5lU3RvcmFnZVZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKHNhbF91SW50MTYqKW1zb19zcHRGbG93Q2hhcnRPbmxpbmVTdG9yYWdlU2VnbSwgc2l6ZW9mKCBtc29fc3B0Rmxvd0NoYXJ0T25saW5lU3RvcmFnZVNlZ20gKSA+PiAxLAoJTlVMTCwgMCwKCU5VTEwsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdEZsb3dDaGFydE9ubGluZVN0b3JhZ2VUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0Rmxvd0NoYXJ0T25saW5lU3RvcmFnZVRleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTIxNjAwLCAyMTYwMCwKCU14ODAwMDAwMDAsIE14ODAwMDAwMDAsCgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdEZsb3dDaGFydE9ubGluZVN0b3JhZ2VHbHVlUG9pbnRzLCBzaXplb2YoIG1zb19zcHRGbG93Q2hhcnRPbmxpbmVTdG9yYWdlR2x1ZVBvaW50cyApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCglOVUxMLCAwCQkvLyBoYW5kbGVzCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0Rmxvd0NoYXJ0RGVsYXlWZXJ0W10gPQp7Cgl7IDEwODAwLCAwIH0sIHsJMjE2MDAsIDEwODAwIH0sIHsgMTA4MDAsIDIxNjAwIH0sIHsJMCwgMjE2MDAgfSwKCXsgMCwgMCB9Cn07CnN0YXRpYyBjb25zdCBzYWxfdUludDE2IG1zb19zcHRGbG93Q2hhcnREZWxheVNlZ21bXSA9CnsKCTB4NDAwMCwgMHhhNzAyLCAweDAwMDIsIDB4NjAwMCwgMHg4MDAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzIG1zb19zcHRGbG93Q2hhcnREZWxheVRleHRSZWN0W10gPQp7Cgl7IHsgMCwgMzEwMCB9LCB7IDE4NTAwLCAxODUwMCB9IH0KfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29GbG93Q2hhcnREZWxheSA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0Rmxvd0NoYXJ0RGVsYXlWZXJ0LCBzaXplb2YoIG1zb19zcHRGbG93Q2hhcnREZWxheVZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKHNhbF91SW50MTYqKW1zb19zcHRGbG93Q2hhcnREZWxheVNlZ20sIHNpemVvZiggbXNvX3NwdEZsb3dDaGFydERlbGF5U2VnbSApID4+IDEsCglOVUxMLCAwLAoJTlVMTCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0Rmxvd0NoYXJ0RGVsYXlUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0Rmxvd0NoYXJ0RGVsYXlUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRTdGFuZGFyZEdsdWVQb2ludHMsIHNpemVvZiggbXNvX3NwdFN0YW5kYXJkR2x1ZVBvaW50cyApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCglOVUxMLCAwCQkvLyBoYW5kbGVzCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0Rmxvd0NoYXJ0TWFnbmV0aWNUYXBlVmVydFtdID0KewoJeyAyMDk4MCwgMTgxNTAgfSwgewkyMDk4MCwgMjE2MDAgfSwgeyAxMDY3MCwgMjE2MDAgfSwKCXsgNDc3MCwgMjE1NDAgfSwgeyAwLCAxNjcyMCB9LCB7IDAsIDEwODAwIH0sCQkJLy8gY2NwCgl7IDAsIDQ4NDAgfSwgeyA0ODQwLCAwIH0sIHsgMTA4MDAsIDAgfSwJCQkJCS8vIGNjcAoJeyAxNjc0MCwgMCB9LCB7IDIxNjAwLCA0ODQwIH0sIHsgMjE2MDAsIDEwODAwIH0sCQkvLyBjY3AKCXsgMjE2MDAsIDEzNTIwIH0sIHsJMjA1NTAsIDE2MTYwIH0sIHsgMTg2NzAsIDE4MTcwIH0JLy8gY2NwCn07CnN0YXRpYyBjb25zdCBzYWxfdUludDE2IG1zb19zcHRGbG93Q2hhcnRNYWduZXRpY1RhcGVTZWdtW10gPQp7CgkweDQwMDAsIDB4MDAwMiwgMHgyMDA0LCAweDYwMDAsIDB4ODAwMAp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyBtc29fc3B0Rmxvd0NoYXJ0TWFnbmV0aWNUYXBlVGV4dFJlY3RbXSA9CnsKCXsgeyAzMTAwLCAzMTAwIH0sIHsgMTg1MDAsIDE4NTAwIH0gfQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb0Zsb3dDaGFydE1hZ25ldGljVGFwZSA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0Rmxvd0NoYXJ0TWFnbmV0aWNUYXBlVmVydCwgc2l6ZW9mKCBtc29fc3B0Rmxvd0NoYXJ0TWFnbmV0aWNUYXBlVmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdEZsb3dDaGFydE1hZ25ldGljVGFwZVNlZ20sIHNpemVvZiggbXNvX3NwdEZsb3dDaGFydE1hZ25ldGljVGFwZVNlZ20gKSA+PiAxLAoJTlVMTCwgMCwKCU5VTEwsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdEZsb3dDaGFydE1hZ25ldGljVGFwZVRleHRSZWN0LCBzaXplb2YoIG1zb19zcHRGbG93Q2hhcnRNYWduZXRpY1RhcGVUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRTdGFuZGFyZEdsdWVQb2ludHMsIHNpemVvZiggbXNvX3NwdFN0YW5kYXJkR2x1ZVBvaW50cyApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCglOVUxMLCAwCQkvLyBoYW5kbGVzCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0Rmxvd0NoYXJ0TWFnbmV0aWNEaXNrVmVydFtdID0KewoJeyAwLCAzNDAwIH0sIHsgMTA4MDAsIDAgfSwgeyAyMTYwMCwgMzQwMCB9LCB7IDIxNjAwLCAxODIwMCB9LAoJeyAxMDgwMCwgMjE2MDAgfSwgeyAwLCAxODIwMCB9LAoKCXsgMCwgMzQwMCB9LCB7IDEwODAwLCA2ODAwIH0sIHsgMjE2MDAsIDM0MDAgfQp9OwpzdGF0aWMgY29uc3Qgc2FsX3VJbnQxNiBtc29fc3B0Rmxvd0NoYXJ0TWFnbmV0aWNEaXNrU2VnbVtdID0KewoJMHg0MDAwLCAweGE4MDIsIDB4MDAwMSwgMHhhODAyLCAweDYwMDAsIDB4ODAwMCwKCTB4NDAwMCwgMHhhODAyLCAweDgwMDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgbXNvX3NwdEZsb3dDaGFydE1hZ25ldGljRGlza1RleHRSZWN0W10gPQp7Cgl7IHsgMCwgNjgwMCB9LCB7IDIxNjAwLCAxODIwMCB9IH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdEZsb3dDaGFydE1hZ25ldGljRGlza0dsdWVQb2ludHNbXSA9CnsKCXsgMTA4MDAsIDY4MDAgfSwgeyAxMDgwMCwgMCB9LCB7IDAsIDEwODAwIH0sIHsgMTA4MDAsIDIxNjAwIH0sIHsgMjE2MDAsIDEwODAwIH0KfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29GbG93Q2hhcnRNYWduZXRpY0Rpc2sgPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdEZsb3dDaGFydE1hZ25ldGljRGlza1ZlcnQsIHNpemVvZiggbXNvX3NwdEZsb3dDaGFydE1hZ25ldGljRGlza1ZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKHNhbF91SW50MTYqKW1zb19zcHRGbG93Q2hhcnRNYWduZXRpY0Rpc2tTZWdtLCBzaXplb2YoIG1zb19zcHRGbG93Q2hhcnRNYWduZXRpY0Rpc2tTZWdtICkgPj4gMSwKCU5VTEwsIDAsCglOVUxMLAoJKFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMqKW1zb19zcHRGbG93Q2hhcnRNYWduZXRpY0Rpc2tUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0Rmxvd0NoYXJ0TWFnbmV0aWNEaXNrVGV4dFJlY3QgKSAvIHNpemVvZiggU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyApLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0Rmxvd0NoYXJ0TWFnbmV0aWNEaXNrR2x1ZVBvaW50cywgc2l6ZW9mKCBtc29fc3B0Rmxvd0NoYXJ0TWFnbmV0aWNEaXNrR2x1ZVBvaW50cyApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCglOVUxMLCAwCQkvLyBoYW5kbGVzCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0Rmxvd0NoYXJ0TWFnbmV0aWNEcnVtVmVydFtdID0KewoJeyAxODIwMCwgMCB9LCB7IDIxNjAwLCAxMDgwMCB9LCB7IDE4MjAwLCAyMTYwMCB9LCB7IDM0MDAsIDIxNjAwIH0sCgl7IDAsIDEwODAwIH0sIHsgMzQwMCwgMCB9LAoKCXsgMTgyMDAsIDAgfSwgeyAxNDgwMCwgMTA4MDAgfSwgeyAxODIwMCwgMjE2MDAgfQp9OwpzdGF0aWMgY29uc3Qgc2FsX3VJbnQxNiBtc29fc3B0Rmxvd0NoYXJ0TWFnbmV0aWNEcnVtU2VnbVtdID0KewoJMHg0MDAwLCAweGE3MDIsIDB4MDAwMSwgMHhhNzAyLCAweDYwMDAsIDB4ODAwMCwKCTB4NDAwMCwgMHhhNzAyLCAweDgwMDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgbXNvX3NwdEZsb3dDaGFydE1hZ25ldGljRHJ1bVRleHRSZWN0W10gPQp7Cgl7IHsgMzQwMCwgMCB9LCB7IDE0ODAwLCAyMTYwMCB9IH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdEZsb3dDaGFydE1hZ25ldGljRHJ1bUdsdWVQb2ludHNbXSA9CnsKCXsgMTA4MDAsIDAgfSwgeyAwLCAxMDgwMCB9LCB7IDEwODAwLCAyMTYwMCB9LCB7IDE0ODAwLCAxMDgwMCB9LCB7IDIxNjAwLCAxMDgwMCB9Cn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvRmxvd0NoYXJ0TWFnbmV0aWNEcnVtID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRGbG93Q2hhcnRNYWduZXRpY0RydW1WZXJ0LCBzaXplb2YoIG1zb19zcHRGbG93Q2hhcnRNYWduZXRpY0RydW1WZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0Rmxvd0NoYXJ0TWFnbmV0aWNEcnVtU2VnbSwgc2l6ZW9mKCBtc29fc3B0Rmxvd0NoYXJ0TWFnbmV0aWNEcnVtU2VnbSApID4+IDEsCglOVUxMLCAwLAoJTlVMTCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0Rmxvd0NoYXJ0TWFnbmV0aWNEcnVtVGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdEZsb3dDaGFydE1hZ25ldGljRHJ1bVRleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTIxNjAwLCAyMTYwMCwKCU14ODAwMDAwMDAsIE14ODAwMDAwMDAsCgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdEZsb3dDaGFydE1hZ25ldGljRHJ1bUdsdWVQb2ludHMsIHNpemVvZiggbXNvX3NwdEZsb3dDaGFydE1hZ25ldGljRHJ1bUdsdWVQb2ludHMgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJTlVMTCwgMAkJLy8gaGFuZGxlcwp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdEZsb3dDaGFydERpc3BsYXlWZXJ0W10gPQp7Cgl7IDM2MDAsIDAgfSwgeyAxNzgwMCwgMCB9LCB7IDIxNjAwLCAxMDgwMCB9LCB7IDE3ODAwLCAyMTYwMCB9LAoJeyAzNjAwLCAyMTYwMCB9LCB7IDAsIDEwODAwIH0KfTsKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvX3NwdEZsb3dDaGFydERpc3BsYXlTZWdtW10gPQp7CgkweDQwMDAsIDB4MDAwMSwgMHhhNzAyLCAweDAwMDIsIDB4NjAwMCwgMHg4MDAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzIG1zb19zcHRGbG93Q2hhcnREaXNwbGF5VGV4dFJlY3RbXSA9CnsKCXsgeyAzNjAwLCAwIH0sIHsgMTc4MDAsIDIxNjAwIH0gfQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb0Zsb3dDaGFydERpc3BsYXkgPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdEZsb3dDaGFydERpc3BsYXlWZXJ0LCBzaXplb2YoIG1zb19zcHRGbG93Q2hhcnREaXNwbGF5VmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdEZsb3dDaGFydERpc3BsYXlTZWdtLCBzaXplb2YoIG1zb19zcHRGbG93Q2hhcnREaXNwbGF5U2VnbSApID4+IDEsCglOVUxMLCAwLAoJTlVMTCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0Rmxvd0NoYXJ0RGlzcGxheVRleHRSZWN0LCBzaXplb2YoIG1zb19zcHRGbG93Q2hhcnREaXNwbGF5VGV4dFJlY3QgKSAvIHNpemVvZiggU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyApLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0U3RhbmRhcmRHbHVlUG9pbnRzLCBzaXplb2YoIG1zb19zcHRTdGFuZGFyZEdsdWVQb2ludHMgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJTlVMTCwgMAkJLy8gaGFuZGxlcwp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdFdlZGdlUmVjdENhbGxvdXRWZXJ0W10gPQp7Cgl7IDAsIDAgfSwKCXsgMCwgMzU5MCB9LCB7IDIgTVNPX0ksIDMgTVNPX0kgfSwgeyAwLCA4OTcwIH0sCgl7IDAsIDEyNjMwIH0seyA0IE1TT19JLCA1IE1TT19JIH0sIHsgMCwgMTgwMTAgfSwKCXsgMCwgMjE2MDAgfSwKCXsgMzU5MCwgMjE2MDAgfSwgeyA2IE1TT19JLCA3IE1TT19JIH0sIHsgODk3MCwgMjE2MDAgfSwKCXsgMTI2MzAsIDIxNjAwIH0sIHsgOCBNU09fSSwgOSBNU09fSSB9LCB7IDE4MDEwLCAyMTYwMCB9LAoJeyAyMTYwMCwgMjE2MDAgfSwKCXsgMjE2MDAsIDE4MDEwIH0sIHsgMTAgTVNPX0ksIDExIE1TT19JIH0sIHsgMjE2MDAsIDEyNjMwIH0sCgl7IDIxNjAwLCA4OTcwIH0sIHsgMTIgTVNPX0ksIDEzIE1TT19JIH0sIHsgMjE2MDAsIDM1OTAgfSwKCXsgMjE2MDAsIDAgfSwKCXsgMTgwMTAsIDAgfSwgeyAxNCBNU09fSSwgMTUgTVNPX0kgfSwgeyAxMjYzMCwgMCB9LAoJeyA4OTcwLCAwIH0sIHsgMTYgTVNPX0ksIDE3IE1TT19JIH0sIHsgMzU5MCwgMCB9LAoJeyAwLCAwIH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhIG1zb19zcHRXZWRnZVJlY3RDYWxsb3V0Q2FsY1tdID0KewoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAsIDEwODAwIH0gfSwJCS8vMHg0MDAKCXsgMHgyMDAwLCB7IERGRl9Qcm9wX2FkanVzdDJWYWx1ZSwgMCwxMDgwMCB9IH0sCgl7IDB4NjAwNiwgeyAweDQxMiwgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAgfSB9LAkJLy8weDQwMgoJeyAweDYwMDYsIHsgMHg0MTIsIERGRl9Qcm9wX2FkanVzdDJWYWx1ZSwgNjI4MCB9IH0sCgl7IDB4NjAwNiwgeyAweDQxNywgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAgfSB9LAkJLy8weDQwNAoJeyAweDYwMDYsIHsgMHg0MTcsIERGRl9Qcm9wX2FkanVzdDJWYWx1ZSwgMTUzMjAgfSB9LAoJeyAweDYwMDYsIHsgMHg0MWEsIERGRl9Qcm9wX2FkanVzdFZhbHVlLCA2MjgwIH0gfSwJLy8weDQwNgoJeyAweDYwMDYsIHsgMHg0MWEsIERGRl9Qcm9wX2FkanVzdDJWYWx1ZSwgMjE2MDAgfSB9LAoJeyAweDYwMDYsIHsgMHg0MWQsIERGRl9Qcm9wX2FkanVzdFZhbHVlLCAxNTMyMCB9IH0sCS8vMHg0MDgKCXsgMHg2MDA2LCB7IDB4NDFkLCBERkZfUHJvcF9hZGp1c3QyVmFsdWUsIDIxNjAwIH0gfSwKCXsgMHg2MDA2LCB7IDB4NDIwLCBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMjE2MDAgfSB9LAkvLzB4NDBhCgl7IDB4NjAwNiwgeyAweDQyMCwgREZGX1Byb3BfYWRqdXN0MlZhbHVlLCAxNTMyMCB9IH0sCgl7IDB4NjAwNiwgeyAweDQyMiwgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDIxNjAwIH0gfSwJLy8weDQwYwoJeyAweDYwMDYsIHsgMHg0MjIsIERGRl9Qcm9wX2FkanVzdDJWYWx1ZSwgNjI4MCB9IH0sCgl7IDB4NjAwNiwgeyAweDQyNCwgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDE1MzIwIH0gfSwJLy8weDQwZQoJeyAweDYwMDYsIHsgMHg0MjQsIERGRl9Qcm9wX2FkanVzdDJWYWx1ZSwgMCB9IH0sCgl7IDB4NjAwNiwgeyAweDQyNiwgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDYyODAgfSB9LAkvLzB4NDEwCgl7IDB4NjAwNiwgeyAweDQyNiwgREZGX1Byb3BfYWRqdXN0MlZhbHVlLCAwIH0gfSwKCXsgMHhhMDA2LCB7IERGRl9Qcm9wX2FkanVzdFZhbHVlLCAtMSwgMHg0MTMgfSB9LAkvLzB4NDEyCgl7IDB4YTAwNiwgeyAweDQwMSwgLTEsIDB4NDE2IH0gfSwKCXsgMHgyMDAzLCB7IDB4NDAwLCAwLCAwIH0gfSwJCQkJCQkvLzB4NDE0Cgl7IDB4MjAwMywgeyAweDQwMSwgMCwgMCB9IH0sCgl7IDB4YTAwMCwgeyAweDQxNCwgMCwgMHg0MTUgfSB9LAkJCQkJLy8weDQxNgoJeyAweGEwMDYsIHsgREZGX1Byb3BfYWRqdXN0VmFsdWUsIC0xLCAweDQxOCB9IH0sCgl7IDB4NjAwNiwgeyAweDQwMSwgMHg0MTYsIC0xIH0gfSwJCQkJCS8vMHg0MTgKCXsgMHgyMDAwLCB7IERGRl9Qcm9wX2FkanVzdDJWYWx1ZSwgMCwgMjE2MDAgfSB9LAoJeyAweDYwMDYsIHsgMHg0MTksIDB4NDFiLCAtMSB9IH0sCQkJCQkvLzB4NDFhCgl7IDB4YTAwNiwgeyAweDQwMCwgLTEsIDB4NDFjIH0gfSwKCXsgMHhhMDAwLCB7IDB4NDE1LCAwLCAweDQxNCB9IH0sCQkJCQkvLzB4NDFjCgl7IDB4NjAwNiwgeyAweDQxOSwgMHg0MWUsIC0xIH0gfSwKCXsgMHg2MDA2LCB7IDB4NDAwLCAweDQxYywgLTEgfSB9LAkJCQkJLy8weDQxZQoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAsIDIxNjAwIH0gfSwKCXsgMHg2MDA2LCB7IDB4NDFmLCAweDQyMSwgLTEgfSB9LAkJCQkJLy8weDQyMAoJeyAweDYwMDYsIHsgMHg0MDEsIDB4NDE2LCAtMSB9IH0sCgl7IDB4NjAwNiwgeyAweDQxZiwgMHg0MjMsIC0xIH0gfSwJCQkJCS8vMHg0MjIKCXsgMHhhMDA2LCB7IDB4NDAxLCAtMSwgMHg0MTYgfSB9LAoJeyAweGEwMDYsIHsgREZGX1Byb3BfYWRqdXN0MlZhbHVlLCAtMSwgMHg0MjUgfSB9LAkvLzB4NDI0Cgl7IDB4NjAwNiwgeyAweDQwMCwgMHg0MWMsIC0xIH0gfSwKCXsgMHhhMDA2LCB7IERGRl9Qcm9wX2FkanVzdDJWYWx1ZSwgLTEsIDB4NDI3IH0gfSwJLy8weDQyNgoJeyAweGEwMDYsIHsgMHg0MDAsIC0xLCAweDQxYyB9IH0sCgl7IDB4MjAwMCwgeyBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMCwgMCB9IH0sCQkJLy8weDQyOAoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0MlZhbHVlLCAwLCAwIH0gfQp9OwpzdGF0aWMgY29uc3Qgc2FsX0ludDMyIG1zb19zcHRXZWRnZVJlY3RDYWxsb3V0RGVmYXVsdFtdID0KewoJMiwgMTQwMCwgMjU5MjAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgbXNvX3NwdFdlZGdlUmVjdENhbGxvdXRUZXh0UmVjdFtdID0KewoJeyB7IDAsIDAgfSwgeyAyMTYwMCwgMjE2MDAgfSB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRXZWRnZVJlY3RDYWxsb3V0R2x1ZVBvaW50c1tdID0KewoJeyAxMDgwMCwgMCB9LCB7IDAsIDEwODAwIH0sICB7IDEwODAwLCAyMTYwMCB9LCB7IDIxNjAwLCAxMDgwMCB9LCB7IDQwIE1TT19JLCA0MSBNU09fSSB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkhhbmRsZSBtc29fc3B0Q2FsbG91dEhhbmRsZVtdID0KewoJewoJCTAsCgkJMHgxMDAsIDB4MTAxLCAxMDgwMCwgMTA4MDAsIE14ODAwMDAwMDAsIDB4N2ZmZmZmZmYsIE14ODAwMDAwMDAsIDB4N2ZmZmZmZmYKCX0KfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29XZWRnZVJlY3RDYWxsb3V0ID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRXZWRnZVJlY3RDYWxsb3V0VmVydCwgc2l6ZW9mKCBtc29fc3B0V2VkZ2VSZWN0Q2FsbG91dFZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJTlVMTCwgMCwKCShTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSopbXNvX3NwdFdlZGdlUmVjdENhbGxvdXRDYWxjLCBzaXplb2YoIG1zb19zcHRXZWRnZVJlY3RDYWxsb3V0Q2FsYyApIC8gc2l6ZW9mKCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSApLAoJKHNhbF9JbnQzMiopbXNvX3NwdFdlZGdlUmVjdENhbGxvdXREZWZhdWx0LAoJKFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMqKW1zb19zcHRXZWRnZVJlY3RDYWxsb3V0VGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdFdlZGdlUmVjdENhbGxvdXRUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRXZWRnZVJlY3RDYWxsb3V0R2x1ZVBvaW50cywgc2l6ZW9mKCBtc29fc3B0V2VkZ2VSZWN0Q2FsbG91dEdsdWVQb2ludHMgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKFN2eE1TRGZmSGFuZGxlKiltc29fc3B0Q2FsbG91dEhhbmRsZSwgc2l6ZW9mKCBtc29fc3B0Q2FsbG91dEhhbmRsZSApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCQkvLyBoYW5kbGVzCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRXZWRnZVJSZWN0Q2FsbG91dFZlcnRbXSA9CnsKCXsgMzU5MCwgMCB9LAoJeyAwLCAzNTkwIH0sCgl7IDIgTVNPX0ksIDMgTVNPX0kgfSwgeyAwLCA4OTcwIH0sCgl7IDAsIDEyNjMwIH0seyA0IE1TT19JLCA1IE1TT19JIH0sIHsgMCwgMTgwMTAgfSwKCXsgMzU5MCwgMjE2MDAgfSwKCXsgNiBNU09fSSwgNyBNU09fSSB9LCB7IDg5NzAsIDIxNjAwIH0sCgl7IDEyNjMwLCAyMTYwMCB9LCB7IDggTVNPX0ksIDkgTVNPX0kgfSwJeyAxODAxMCwgMjE2MDAgfSwKCXsgMjE2MDAsIDE4MDEwIH0sCgl7IDEwIE1TT19JLCAxMSBNU09fSSB9LCB7IDIxNjAwLCAxMjYzMCB9LAoJeyAyMTYwMCwgODk3MCB9LCB7IDEyIE1TT19JLCAxMyBNU09fSSB9LCB7IDIxNjAwLCAzNTkwIH0sCgl7IDE4MDEwLCAwIH0sCgl7IDE0IE1TT19JLCAxNSBNU09fSSB9LCB7IDEyNjMwLCAwIH0sCgl7IDg5NzAsIDAgfSwgeyAxNiBNU09fSSwgMTcgTVNPX0kgfQp9OwpzdGF0aWMgY29uc3Qgc2FsX3VJbnQxNiBtc29fc3B0V2VkZ2VSUmVjdENhbGxvdXRTZWdtW10gPQp7CgkweDQwMDAsIDB4YTcwMSwgMHgwMDA1LCAweGE4MDEsIDB4MDAwNSwgMHhhNzAxLCAweDAwMDUsIDB4YTgwMSwgMHgwMDA0LCAweDYwMDEsIDB4ODAwMAp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyBtc29fc3B0V2VkZ2VSUmVjdENhbGxvdXRUZXh0UmVjdFtdID0KewoJeyB7IDgwMCwgODAwIH0sIHsgMjA4MDAsIDIwODAwIH0gfQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb1dlZGdlUlJlY3RDYWxsb3V0ID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRXZWRnZVJSZWN0Q2FsbG91dFZlcnQsIHNpemVvZiggbXNvX3NwdFdlZGdlUlJlY3RDYWxsb3V0VmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdFdlZGdlUlJlY3RDYWxsb3V0U2VnbSwgc2l6ZW9mKCBtc29fc3B0V2VkZ2VSUmVjdENhbGxvdXRTZWdtICkgPj4gMSwKCShTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSopbXNvX3NwdFdlZGdlUmVjdENhbGxvdXRDYWxjLCBzaXplb2YoIG1zb19zcHRXZWRnZVJlY3RDYWxsb3V0Q2FsYyApIC8gc2l6ZW9mKCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSApLAoJKHNhbF9JbnQzMiopbXNvX3NwdFdlZGdlUmVjdENhbGxvdXREZWZhdWx0LAoJKFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMqKW1zb19zcHRXZWRnZVJSZWN0Q2FsbG91dFRleHRSZWN0LCBzaXplb2YoIG1zb19zcHRXZWRnZVJSZWN0Q2FsbG91dFRleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTIxNjAwLCAyMTYwMCwKCU14ODAwMDAwMDAsIE14ODAwMDAwMDAsCglOVUxMLCAwLAoJKFN2eE1TRGZmSGFuZGxlKiltc29fc3B0Q2FsbG91dEhhbmRsZSwgc2l6ZW9mKCBtc29fc3B0Q2FsbG91dEhhbmRsZSApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCQkvLyBoYW5kbGVzCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRCYWxsb29uVmVydFtdID0KewoJeyAzNTkwLCAwIH0sCgl7IDAsIDM1OTAgfSwKCXsgMCwgMTQ0NjAgfSwKCXsgMzU5MCwgMTgwNTAgfSwKCXsgNDAgTVNPX0ksIDIxNjAwIH0sIHsgNTQyMCwgMTgwNTAgfSwKCXsgMTgwMTAsIDE4MDUwIH0sCgl7IDIxNjAwLCAxNDQ2MCB9LAoJeyAyMTYwMCwgMzU5MCB9LAoJeyAxODAxMCwgMCB9Cn07CnN0YXRpYyBjb25zdCBzYWxfdUludDE2IG1zb19zcHRCYWxsb29uU2VnbVtdID0KewoJMHg0MDAwLCAweGE3MDEsIDB4MDAwMSwgMHhhODAxLCAweDAwMDMsIDB4YTcwMSwgMHgwMDAxLCAweGE4MDEsIDB4NjAwMSwgMHg4MDAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkhhbmRsZSBtc29fc3B0QmFsbG9vbkhhbmRsZVtdID0KewoJewoJCU1TREZGX0hBTkRMRV9GTEFHU19SQU5HRSwKCQkweDEwMCwgMSwgMTA4MDAsIDEwODAwLCAwLCA4OTkwLCBNeDgwMDAwMDAwLCAweDdmZmZmZmZmCgl9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzIG1zb19zcHRCYWxsb29uVGV4dFJlY3RbXSA9CnsKCXsgeyA4MDAsIDgwMCB9LCB7IDIwODAwLCAxNzI1MCB9IH0KfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29CYWxsb29uID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRCYWxsb29uVmVydCwgc2l6ZW9mKCBtc29fc3B0QmFsbG9vblZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKHNhbF91SW50MTYqKW1zb19zcHRCYWxsb29uU2VnbSwgc2l6ZW9mKCBtc29fc3B0QmFsbG9vblNlZ20gKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0V2VkZ2VSZWN0Q2FsbG91dENhbGMsIHNpemVvZiggbXNvX3NwdFdlZGdlUmVjdENhbGxvdXRDYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0V2VkZ2VSZWN0Q2FsbG91dERlZmF1bHQsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdEJhbGxvb25UZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0QmFsbG9vblRleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTIxNjAwLCAyMTYwMCwKCU14ODAwMDAwMDAsIE14ODAwMDAwMDAsCglOVUxMLCAwLAoJKFN2eE1TRGZmSGFuZGxlKiltc29fc3B0QmFsbG9vbkhhbmRsZSwgc2l6ZW9mKCBtc29fc3B0QmFsbG9vbkhhbmRsZSApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCQkvLyBoYW5kbGVzCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRXZWRnZUVsbGlwc2VDYWxsb3V0VmVydFtdID0KewoJeyAwLCAwIH0sIHsgMjE2MDAsIDIxNjAwIH0sIHsgMHgxNiBNU09fSSwgMHgxNyBNU09fSSB9LCB7IDB4MTIgTVNPX0ksIDB4MTMgTVNPX0kgfSwgeyAweGUgTVNPX0ksIDB4ZiBNU09fSSB9Cn07CnN0YXRpYyBjb25zdCBzYWxfdUludDE2IG1zb19zcHRXZWRnZUVsbGlwc2VDYWxsb3V0U2VnbVtdID0KewoJMHhhNTA0LCAweDAwMDEsIDB4NjAwMSwgMHg4MDAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSBtc29fc3B0V2VkZ2VFbGxpcHNlQ2FsbG91dENhbGNbXSA9CnsKCXsgMHgyMDAwLCB7IERGRl9Qcm9wX2FkanVzdFZhbHVlLCAwLCAxMDgwMCB9IH0sCQkvLyAwMCByYWQgeAoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0MlZhbHVlLCAwLCAxMDgwMCB9IH0sCS8vIDAxIHJhZCB5Cgl7IDB4NjAwMSwgeyAweDQwMCwgMHg0MDAsIDEgfSB9LAkJCQkJLy8gMDIgcmFkIHheMgoJeyAweDYwMDEsIHsgMHg0MDEsIDB4NDAxLCAxIH0gfSwJCQkJCS8vIDAzIHJhZCB5XjIKCXsgMHg2MDAwLCB7IDB4NDAyLCAweDQwMywgMCB9IH0sCQkJCQkvLyAwNAoJeyAweDIwMGQsIHsgMHg0MDQsIDAsIDAgfSB9LAkJCQkJCS8vIDA1Cgl7IDB4MjAwMCwgeyAweDQwNSwgMCwgMTA4MDAgfSB9LAkJCQkJLy8gMDYgPiAwID8gc3B1ciBuZWVkcyB0byBiZSBkcmF3biA6IDEwODAwCgl7IDB4NjAwOCwgeyAweDQwMCwgMHg0MDEsIDAgfSB9LAkJCQkJLy8gMDcgYXRhbjIgLT4gYW5nbGUKCXsgMHgyMDAwLCB7IDB4NDA3LCAwLCAxMCB9IH0sCQkJCQkJLy8gMDgKCXsgMHgyMDAwLCB7IDB4NDA3LCAxMCwgMCB9IH0sCQkJCQkJLy8gMDkKCXsgMHg0MDBhLCB7IDEwODAwLCAweDQwNywgMCB9IH0sCQkJCQkvLyAwYQoJeyAweDQwMDksIHsgMTA4MDAsIDB4NDA3LCAwIH0gfSwJCQkJCS8vIDBiCgl7IDB4MjAwMCwgeyAweDQwYSwgMTA4MDAsIDAgfSB9LAkJCQkJLy8gMGMKCXsgMHgyMDAwLCB7IDB4NDBiLCAxMDgwMCwgMCB9IH0sCQkJCQkvLyAwZAoJeyAweGUwMDYsIHsgMHg0MDYsIERGRl9Qcm9wX2FkanVzdFZhbHVlLCAweDQwYyB9IH0sCS8vIDBlCgl7IDB4ZTAwNiwgeyAweDQwNiwgREZGX1Byb3BfYWRqdXN0MlZhbHVlLCAweDQwZCB9IH0sLy8gMGYKCXsgMHg0MDBhLCB7IDEwODAwLCAweDQwOCwgMCB9IH0sCQkJCQkvLyAxMAoJeyAweDQwMDksIHsgMTA4MDAsIDB4NDA4LCAwIH0gfSwJCQkJCS8vIDExCgl7IDB4MjAwMCwgeyAweDQxMCwgMTA4MDAsIDAgfSB9LAkJCQkJLy8gMTIKCXsgMHgyMDAwLCB7IDB4NDExLCAxMDgwMCwgMCB9IH0sCQkJCQkvLyAxMwoJeyAweDQwMGEsIHsgMTA4MDAsIDB4NDA5LCAwIH0gfSwJCQkJCS8vIDE0Cgl7IDB4NDAwOSwgeyAxMDgwMCwgMHg0MDksIDAgfSB9LAkJCQkJLy8gMTUKCXsgMHgyMDAwLCB7IDB4NDE0LCAxMDgwMCwgMCB9IH0sCQkJCQkvLyAxNgoJeyAweDIwMDAsIHsgMHg0MTUsIDEwODAwLCAwIH0gfQkJCQkJICAgIC8vIDE3Cn07CnN0YXRpYyBjb25zdCBzYWxfSW50MzIgbXNvX3NwdFdlZGdlRWxsaXBzZUNhbGxvdXREZWZhdWx0W10gPQp7CgkyLCAxMzUwLCAyNTkyMAp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0V2VkZ2VFbGxpcHNlQ2FsbG91dEdsdWVQb2ludHNbXSA9CnsKCXsgMTA4MDAsIDAgfSwgeyAzMTYwLCAzMTYwIH0sIHsgMCwgMTA4MDAgfSwgeyAzMTYwLCAxODQ0MCB9LCB7IDEwODAwLCAyMTYwMCB9LCB7IDE4NDQwLCAxODQ0MCB9LCB7IDIxNjAwLCAxMDgwMCB9LCB7IDE4NDQwLCAzMTYwIH0sIHsgMHhlIE1TT19JLCAweGYgTVNPX0kgfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyBtc29fc3B0V2VkZ2VFbGxpcHNlQ2FsbG91dFRleHRSZWN0W10gPQp7Cgl7IHsgMzIwMCwgMzIwMCB9LCB7IDE4NDAwLCAxODQwMCB9IH0KfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29XZWRnZUVsbGlwc2VDYWxsb3V0ID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRXZWRnZUVsbGlwc2VDYWxsb3V0VmVydCwgc2l6ZW9mKCBtc29fc3B0V2VkZ2VFbGxpcHNlQ2FsbG91dFZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKHNhbF91SW50MTYqKW1zb19zcHRXZWRnZUVsbGlwc2VDYWxsb3V0U2VnbSwgc2l6ZW9mKCBtc29fc3B0V2VkZ2VFbGxpcHNlQ2FsbG91dFNlZ20gKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0V2VkZ2VFbGxpcHNlQ2FsbG91dENhbGMsIHNpemVvZiggbXNvX3NwdFdlZGdlRWxsaXBzZUNhbGxvdXRDYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0V2VkZ2VFbGxpcHNlQ2FsbG91dERlZmF1bHQsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdFdlZGdlRWxsaXBzZUNhbGxvdXRUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0V2VkZ2VFbGxpcHNlQ2FsbG91dFRleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTIxNjAwLCAyMTYwMCwKCU14ODAwMDAwMDAsIE14ODAwMDAwMDAsCgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdFdlZGdlRWxsaXBzZUNhbGxvdXRHbHVlUG9pbnRzLCBzaXplb2YoIG1zb19zcHRXZWRnZUVsbGlwc2VDYWxsb3V0R2x1ZVBvaW50cyApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoU3Z4TVNEZmZIYW5kbGUqKW1zb19zcHRDYWxsb3V0SGFuZGxlLCBzaXplb2YoIG1zb19zcHRDYWxsb3V0SGFuZGxlICkgLyBzaXplb2YoIFN2eE1TRGZmSGFuZGxlICkJCS8vIGhhbmRsZXMKfTsKCnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRDbG91ZENhbGxvdXRWZXJ0W10gPQp7Cgl7IDE5MzAsNzE2MCB9LAkJCQkJCQkJCQkvLyBwCgl7IDE1MzAsNDQ5MAl9LCB7IDM0MDAsMTk3MCB9LCB7IDUyNzAsMTk3MCB9LAkJLy8gY2NwCgl7IDU4NjAsMTk1MAl9LCB7IDY0NzAsMjIxMCB9LCB7IDY5NzAsMjYwMCB9LAkJLy8gY2NwCgl7IDc0NTAsMTM5MAl9LCB7IDgzNDAsNjUwIH0sIHsgOTM0MCw2NTAJfSwJCQkvLyBjY3AKCXsgMTAwMDQsNjkwCX0sIHsgMTA3MTAsMTA1MAl9LCB7IDExMjEwLDE3MDAJfSwJCS8vIGNjcAoJeyAxMTU3MCw2MzAJfSwgeyAxMjMzMCwwIH0sIHsgMTMxNTAsMCB9LAkJCS8vIGNjcAoJeyAxMzg0MCwwIH0sIHsgMTQ0NzAsNDYwIH0sIHsgMTQ4NzAsMTE2MCB9LAkJCS8vIGNjcAoJeyAxNTMzMCw0NDAgfSwgeyAxNjAyMCwwIH0sIHsgMTY3NDAsMCB9LAkJCS8vIGNjcAoJeyAxNzkxMCwwIH0sIHsgMTg5MDAsMTEzMCB9LCB7IDE5MTEwLDI3MTAgfSwJCS8vIGNjcAoJeyAyMDI0MCwzMTUwIH0sIHsgMjEwNjAsNDU4MCB9LCB7IDIxMDYwLDYyMjAgfSwJCS8vIGNjcAoJeyAyMTA2MCw2NzIwIH0sIHsgMjEwMDAsNzIwMCB9LCB7IDIwODMwLDc2NjAgfSwJCS8vIGNjcAoJeyAyMTMxMCw4NDYwIH0sIHsgMjE2MDAsOTQ1MCB9LCB7IDIxNjAwLDEwNDYwIH0sCS8vIGNjcAoJeyAyMTYwMCwxMjc1MCB9LCB7IDIwMzEwLDE0NjgwIH0sIHsgMTg2NTAsMTUwMTAJfSwJLy8gY2NwCgl7IDE4NjUwLDE3MjAwIH0sIHsgMTczNzAsMTg5MjAgfSwgeyAxNTc3MCwxODkyMCB9LAkvLyBjY3AKCXsgMTUyMjAsMTg5MjAgfSwgeyAxNDcwMCwxODcxMCB9LCB7IDE0MjQwLDE4MzEwCX0sCS8vIGNjcAoJeyAxMzgyMCwyMDI0MCB9LCB7IDEyNDkwLDIxNjAwIH0sIHsgMTEwMDAsMjE2MDAgfSwJLy8gY2NwCgl7IDk4OTAsMjE2MDAgfSwgeyA4ODQwLDIwNzkwIH0sIHsgODIxMCwxOTUxMCB9LAkJLy8gY2NwCgl7IDc2MjAsMjAwMDAgfSwgeyA3OTMwLDIwMjkwIH0sIHsgNjI0MCwyMDI5MCB9LAkJLy8gY2NwCgl7IDQ4NTAsMjAyOTAgfSwgeyAzNTcwLDE5MjgwIH0sIHsgMjkwMCwxNzY0MCB9LAkJLy8gY2NwCgl7IDEzMDAsMTc2MDAgfSwgeyA0ODAsMTYzMDAgfSwgeyA0ODAsMTQ2NjAgfSwJCS8vIGNjcAoJeyA0ODAsMTM5MDAJfSwgeyA2OTAsMTMyMTAgfSwgeyAxMDcwLDEyNjQwIH0sCQkvLyBjY3AKCXsgMzgwLDEyMTYwCX0sIHsgMCwxMTIxMCB9LCB7IDAsMTAxMjAgfSwJCQkvLyBjY3AKCXsgMCw4NTkwIH0sCXsgODQwLDczMzAgfSwgeyAxOTMwLDcxNjAgfSwJCQkvLyBjY3AKCgl7IDE5MzAsIDcxNjAgfSwgeyAxOTUwLCA3NDEwIH0sIHsgMjA0MCwgNzY5MCB9LCB7IDIwOTAsIDc5MjAgfSwJCQkvLyBwY2NwCgl7IDY5NzAsIDI2MDAgfSwgeyA3MjAwLCAyNzkwIH0sIHsgNzQ4MCwgMzA1MCB9LCB7IDc2NzAsIDMzMTAgfSwJCQkvLyBwY2NwCgl7IDExMjEwLCAxNzAwIH0sIHsgMTExMzAsIDE5MTAgfSwgeyAxMTA4MCwgMjE2MCB9LCB7IDExMDMwLCAyNDAwIH0sCQkvLyBwY2NwCgl7IDE0ODcwLCAxMTYwIH0sIHsgMTQ3MjAsIDE0MDAgfSwgeyAxNDY0MCwgMTcyMCB9LCB7IDE0NTQwLCAyMDEwIH0sCQkvLyBwY2NwCgl7IDE5MTEwLCAyNzEwIH0sIHsgMTkxMzAsIDI4OTAgfSwgeyAxOTIzMCwgMzI5MCB9LCB7IDE5MTkwLCAzMzgwIH0sCQkvLyBwY2NwCgl7IDIwODMwLCA3NjYwIH0sIHsgMjA2NjAsIDgxNzAgfSwgeyAyMDQzMCwgODYyMCB9LCB7IDIwMTEwLCA4OTkwIH0sCQkvLyBwY2NwCgl7IDE4NjYwLCAxNTAxMCB9LCB7IDE4NzQwLCAxNDIwMCB9LCB7IDE4MjgwLCAxMjIwMCB9LCB7IDE3MDAwLCAxMTQ1MCB9LAkvLyBwY2NwCgl7IDE0MjQwLCAxODMxMCB9LCB7IDE0MzIwLCAxNzk4MCB9LCB7IDE0MzUwLCAxNzY4MCB9LCB7IDE0MzcwLCAxNzM2MCB9LAkvLyBwY2NwCgl7IDgyMjAsIDE5NTEwIH0sIHsgODA2MCwgMTkyNTAgfSwgeyA3OTYwLCAxODk1MCB9LCB7IDc4NjAsIDE4NjQwIH0sCQkvLyBwY2NwCgl7IDI5MDAsIDE3NjQwIH0sIHsgMzA5MCwgMTc2MDAgfSwgeyAzMjgwLCAxNzU0MCB9LCB7IDM0NjAsIDE3NDUwIH0sCQkvLyBwY2NwCgl7IDEwNzAsIDEyNjQwIH0sIHsgMTQwMCwgMTI5MDAgfSwgeyAxNzgwLCAxMzEzMCB9LCB7IDIzMzAsIDEzMDQwIH0sCQkvLyBwY2NwCgoJeyAweDExIE1TT19JLCAweDEyIE1TT19JIH0sIHsgMTgwMCwgMTgwMCB9LCB7IDAsIDM2MCB9LAkJCQkJLy8gY2lyYzEKCXsgMHgxMyBNU09fSSwgMHgxNCBNU09fSSB9LCB7IDEyMDAsIDEyMDAgfSwgeyAwLCAzNjAgfSwJCQkJCS8vIGNpcmMyCgl7IDB4ZCBNU09fSSwgMHhlIE1TT19JIH0sIHsgNzAwLCA3MDAgfSwgeyAwLCAzNjAgfQkJCQkJCS8vIGNpcmMzCn07CnN0YXRpYyBjb25zdCBzYWxfdUludDE2IG1zb19zcHRDbG91ZENhbGxvdXRTZWdtW10gPQp7CgkweDQwMDAsIDB4MjAxNiwgMHg2MDAxLCAweDgwMDAsCgkweDQwMDAsIDB4MjAwMSwgMHhhYTAwLCAweDgwMDAsCgkweDQwMDAsIDB4MjAwMSwgMHhhYTAwLCAweDgwMDAsCgkweDQwMDAsIDB4MjAwMSwgMHhhYTAwLCAweDgwMDAsCgkweDQwMDAsIDB4MjAwMSwgMHhhYTAwLCAweDgwMDAsCgkweDQwMDAsIDB4MjAwMSwgMHhhYTAwLCAweDgwMDAsCgkweDQwMDAsIDB4MjAwMSwgMHhhYTAwLCAweDgwMDAsCgkweDQwMDAsIDB4MjAwMSwgMHhhYTAwLCAweDgwMDAsCgkweDQwMDAsIDB4MjAwMSwgMHhhYTAwLCAweDgwMDAsCgkweDQwMDAsIDB4MjAwMSwgMHhhYTAwLCAweDgwMDAsCgkweDQwMDAsIDB4MjAwMSwgMHhhYTAwLCAweDgwMDAsCgkweDQwMDAsIDB4MjAwMSwgMHhhYTAwLCAweDgwMDAsCgkweGEyMDMsIDB4NjAwMSwgMHg4MDAwLAoJMHhhMjAzLCAweDYwMDEsIDB4ODAwMCwKCTB4YTIwMywgMHg2MDAxLCAweDgwMDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhIG1zb19zcHRDbG91ZENhbGxvdXRDYWxjW10gPQp7Cgl7IDB4MjAwMCwgeyBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMCwgMTA4MDAgfSB9LAoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0MlZhbHVlLCAwLCAxMDgwMCB9IH0sCgl7IDB4NjAwOCwgeyAweDQwMCwgMHg0MDEsIDAgfSB9LAoJeyAweDQwMGEsIHsgMTA4MDAsIDB4NDAyLCAwIH0gfSwJCQkJCS8vIDMKCXsgMHg0MDA5LCB7IDEwODAwLCAweDQwMiwgMCB9IH0sCQkJCQkvLyA0Cgl7IDB4MjAwMCwgeyAweDQwMywgMTA4MDAsIDAgfSB9LAkJCQkJLy8gNQoJeyAweDIwMDAsIHsgMHg0MDQsIDEwODAwLCAwIH0gfSwJCQkJCS8vIDYKCXsgMHhhMDAwLCB7IERGRl9Qcm9wX2FkanVzdFZhbHVlLCAwLCAweDQwNSB9IH0sCQkvLyA3Cgl7IDB4YTAwMCwgeyBERkZfUHJvcF9hZGp1c3QyVmFsdWUsMCwgMHg0MDYgfSB9LAkJLy8gOAoJeyAweDIwMDEsIHsgMHg0MDcsIDEsIDMgfSB9LAkJCQkJCS8vIDkKCXsgMHgyMDAxLCB7IDB4NDA4LCAxLCAzIH0gfSwJCQkJCQkvLyAweGEKCXsgMHgyMDAxLCB7IDB4NDA3LCAyLCAzIH0gfSwJCQkJCQkvLyAweGIKCXsgMHgyMDAxLCB7IDB4NDA4LCAyLCAzIH0gfSwJCQkJCQkvLyAweGMKCXsgMHgyMDAwLCB7IERGRl9Qcm9wX2FkanVzdFZhbHVlLCAwLCAwIH0gfSwJCQkvLyAweGQKCXsgMHgyMDAwLCB7IERGRl9Qcm9wX2FkanVzdDJWYWx1ZSwgMCwgMCB9IH0sCQkvLyAweGUKCXsgMHgyMDAxLCB7IDB4NDAzLCAxLCAxMDgwMCAvIDkwMCB9IH0sCQkJCS8vIDB4Zgl0YWtpbmcgaGFsZiB4IGRpc3RhbmNlIG9mIHRoZSByYWRpdXMgZnJvbSB0aGUgZmlyc3QgYm9iYmxlCgl7IDB4MjAwMSwgeyAweDQwNCwgMSwgMTA4MDAgLyA5MDAgfSB9LAkJCQkvLyAweDEwCgl7IDB4ZTAwMCwgeyAweDQwOSwgMHg0MDUsIDB4NDBmIH0gfSwJCQkJLy8gMHgxMQoJeyAweGUwMDAsIHsgMHg0MGEsIDB4NDA2LCAweDQxMCB9IH0sCQkJCS8vIDB4MTIKCXsgMHg2MDAwLCB7IDB4NDBiLCAweDQwNSwgMCB9IH0sCQkJCQkvLyAweDEzCgl7IDB4NjAwMCwgeyAweDQwYywgMHg0MDYsIDAgfSB9CQkJCQkJLy8gMHgxNAp9OwpzdGF0aWMgY29uc3Qgc2FsX0ludDMyIG1zb19zcHRDbG91ZENhbGxvdXREZWZhdWx0W10gPQp7CgkyLCAxMzUwLCAyNTkyMAp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyBtc29fc3B0Q2xvdWRDYWxsb3V0VGV4dFJlY3RbXSA9CnsKCXsgeyAzMDAwLCAzMzIwIH0sIHsgMTcxMTAsIDE3MzMwIH0gfQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb0Nsb3VkQ2FsbG91dCA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0Q2xvdWRDYWxsb3V0VmVydCwgc2l6ZW9mKCBtc29fc3B0Q2xvdWRDYWxsb3V0VmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdENsb3VkQ2FsbG91dFNlZ20sIHNpemVvZiggbXNvX3NwdENsb3VkQ2FsbG91dFNlZ20gKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0Q2xvdWRDYWxsb3V0Q2FsYywgc2l6ZW9mKCBtc29fc3B0Q2xvdWRDYWxsb3V0Q2FsYyApIC8gc2l6ZW9mKCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSApLAoJKHNhbF9JbnQzMiopbXNvX3NwdENsb3VkQ2FsbG91dERlZmF1bHQsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdENsb3VkQ2FsbG91dFRleHRSZWN0LCBzaXplb2YoIG1zb19zcHRDbG91ZENhbGxvdXRUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJTlVMTCwgMCwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdENhbGxvdXRIYW5kbGUsIHNpemVvZiggbXNvX3NwdENhbGxvdXRIYW5kbGUgKSAvIHNpemVvZiggU3Z4TVNEZmZIYW5kbGUgKQkJLy8gaGFuZGxlcwp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdFdhdmVWZXJ0W10gPQkvLyBhZGp1c3RtZW50MSA6IDAgLSA0NDYwCnsJCQkJCQkJCQkJCQkJLy8gYWRqdXN0bWVudDIgOiA4NjQwIC0gMTI5NjAKCXsgNyBNU09fSSwgMCBNU09fSSB9LCB7IDE1IE1TT19JLCA5IE1TT19JIH0sIHsgMTYgTVNPX0ksIDEwIE1TT19JIH0sIHsgMTIgTVNPX0ksIDAgTVNPX0kgfSwKCXsgMjQgTVNPX0ksIDEgTVNPX0kgfSwgeyAyNSBNU09fSSwgMjYgTVNPX0kgfSwgeyAyNyBNU09fSSwgMjggTVNPX0kgfSwgeyAyOSBNU09fSSwgMSBNU09fSSB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSBtc29fc3B0V2F2ZUNhbGNbXSA9CnsKCXsgMHgyMDAwLCB7IERGRl9Qcm9wX2FkanVzdFZhbHVlLCAwLCAwIH0gfSwJLy80MDAgKHZlcnQuYWRqKQoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIDB4NDAwIH0gfSwJCQkvLzQwMQoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0MlZhbHVlLCAwLCAwIH0gfSwvLzQwMiAoaG9yei5hZGopCgl7IDB4MjAwMCwgeyAweDQwMiwgMCwgMTA4MDAgfSB9LAkJCS8vNDAzIC0yMTYwIC0+IDIxNjAgKGhvcnouYWRqKQoJeyAweDIwMDEsIHsgMHg0MDMsIDIsIDEgfSB9LAkJCQkvLzQwNCAtNDMyMCAtPiA0MzIwIChob3J6LmFkaikKCXsgMHgyMDAzLCB7IDB4NDA0LCAwLCAwIH0gfSwJCQkJLy80MDUgYWJzKCAweDQwNCApCShob3J6LmFkaikKCXsgMHg4MDAwLCB7IDQzMjAsIDAsIDB4NDA1IH0gfSwJCQkJLy80MDYKCXsgMHhhMDA2LCB7IDB4NDAzLCAwLCAweDQwNSB9IH0sCQkJLy80MDcKCXsgMHg0MDAxLCB7IDE1ODAwLCAweDQwMCwgNDQ2MCB9IH0sCQkJLy80MDggMCAtPiAxNTgwMAkodmVydC5hZGopCgl7IDB4YTAwMCwgeyAweDQwMCwgMCwgMHg0MDggfSB9LAkJCS8vNDA5Cgl7IDB4NjAwMCwgeyAweDQwMCwgMHg0MDgsIDAgfSB9LAkJCS8vNDBhCgl7IDB4ODAwMCwgeyAyMTYwMCwgMCwgMHg0MDQgfSB9LAkJCS8vNDBiCgl7IDB4NjAwNiwgeyAweDQwMywgMHg0MGIsIDIxNjAwIH0gfSwJCS8vNDBjCgl7IDB4YTAwMCwgeyAweDQwYywgMCwgMHg0MDcgfSB9LAkJCS8vNDBkIHdpZHRoIGJldHdlZW4gcDAgYW5kIHAxCgl7IDB4MjAwMSwgeyAweDQwNSwgMSwgMiB9IH0sCQkJCS8vNDBlCgl7IDB4YTAwMCwgeyAweDQwNywgNzIwMCwgMHg0MGUgfSB9LAkJCS8vNDBmCgl7IDB4NjAwMCwgeyAweDQwYywgMHg0MGUsIDcyMDAgfSB9LAkJCS8vNDEwCgl7IDB4MjAwMSwgeyAweDQwZCwgMSwgMiB9IH0sCQkJCS8vNDExIDEvMiB3aWR0aAoJeyAweDYwMDAsIHsgMHg0MDcsIDB4NDExLCAwIH0gfSwJCQkvLzQxMiB0b3AgY2VudGVyIGdsdWUgeHBvcwoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIDB4NDEyIH0gfSwJCQkvLzQxMyBib3R0b20gY2VudGVyIGdsdWUgeHBvcwoJeyAweDIwMDEsIHsgMHg0MDUsIDEsIDIgfSB9LAkJCQkvLzQxNCBsZWZ0IGdsdWUgeCBwb3MKCXsgMHg4MDAwLCB7IDIxNjAwLCAwLCAweDQxNCB9IH0sCQkJLy80MTUgcmlnaHQgZ2x1ZSB4IHBvcwoJeyAweDIwMDEsIHsgMHg0MDAsIDIsIDEgfSB9LAkJCQkvLzQxNiB5MSAodGV4dGJveCkKCXsgMHg4MDAwLCB7IDIxNjAwLCAwLCAweDQxNiB9IH0sCQkJLy80MTcgeTIgKHRleHRib3gpCgoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIDB4NDA3IH0gfSwJCQkvLzQxOCBwMgoKCXsgMHg4MDAwLCB7IDIxNjAwLCAwLCAweDQwZiB9IH0sCQkJLy80MTkgYwoJeyAweDYwMDAsIHsgMHg0MDEsIDB4NDA4LCAwIH0gfSwJCQkvLzQxYQoKCXsgMHg4MDAwLCB7IDIxNjAwLCAwLCAweDQxMCB9IH0sCQkJLy80MWIgYwoJeyAweGEwMDAsIHsgMHg0MDEsIDAsIDB4NDA4IH0gfSwJCQkvLzQxYwoKCXsgMHg4MDAwLCB7IDIxNjAwLCAwLCAweDQwYyB9IH0gCQkJLy80MWQgcDMKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdFdhdmVHbHVlUG9pbnRzW10gPQp7Cgl7IDB4MTIgTVNPX0ksIDAgTVNPX0kgfSwgeyAweDE0IE1TT19JLCAxMDgwMCB9LCB7IDB4MTMgTVNPX0ksIDEgTVNPX0kgfSwgeyAweDE1IE1TT19JLCAxMDgwMCB9Cn07CnN0YXRpYyBjb25zdCBzYWxfdUludDE2IG1zb19zcHRXYXZlU2VnbVtdID0KewoJMHg0MDAwLCAweDIwMDEsIDB4MDAwMSwgMHgyMDAxLCAweDYwMDAsIDB4ODAwMAp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZIYW5kbGUgbXNvX3NwdFdhdmVIYW5kbGVbXSA9CnsKCXsJTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFLAoJCTAsIDB4MTAwLCAxMDgwMCwgMTA4MDAsIE14ODAwMDAwMDAsIDB4N2ZmZmZmZmYsIDAsIDQ0NjAgfSwKCXsJTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFLAoJCTB4MTAxLCAyMTYwMCwgMTA4MDAsIDEwODAwLCA4NjQwLCAxMjk2MCwgTXg4MDAwMDAwMCwgMHg3ZmZmZmZmZiB9Cn07CnN0YXRpYyBjb25zdCBzYWxfSW50MzIgbXNvX3NwdFdhdmVEZWZhdWx0W10gPQp7CgkyLCAxNDAwLCAxMDgwMAp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyBtc29fc3B0V2F2ZVRleHRSZWN0W10gPQp7Cgl7IHsgNSBNU09fSSwgMjIgTVNPX0kgfSwgeyAxMSBNU09fSSwgMjMgTVNPX0kgfSB9Cn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvV2F2ZSA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0V2F2ZVZlcnQsIHNpemVvZiggbXNvX3NwdFdhdmVWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0V2F2ZVNlZ20sIHNpemVvZiggbXNvX3NwdFdhdmVTZWdtICkgPj4gMSwKCShTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSopbXNvX3NwdFdhdmVDYWxjLCBzaXplb2YoIG1zb19zcHRXYXZlQ2FsYyApIC8gc2l6ZW9mKCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSApLAoJKHNhbF9JbnQzMiopbXNvX3NwdFdhdmVEZWZhdWx0LAoJKFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMqKW1zb19zcHRXYXZlVGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdFdhdmVUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRXYXZlR2x1ZVBvaW50cywgc2l6ZW9mKCBtc29fc3B0V2F2ZUdsdWVQb2ludHMgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKFN2eE1TRGZmSGFuZGxlKiltc29fc3B0V2F2ZUhhbmRsZSwgc2l6ZW9mKCBtc29fc3B0V2F2ZUhhbmRsZSApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0RG91YmxlV2F2ZVZlcnRbXSA9CS8vIGFkanVzdG1lbnQxIDogMCAtIDIyMzAKewkJCQkJCQkJCQkJCQkJLy8gYWRqdXN0bWVudDIgOiA4NjQwIC0gMTI5NjAKCXsgNyBNU09fSSwgMCBNU09fSSB9LCB7IDE1IE1TT19JLCA5IE1TT19JIH0sIHsgMHgxZSBNU09fSSwgMTAgTVNPX0kgfSwgeyAweDEyIE1TT19JLCAwIE1TT19JIH0sIHsgMHgxZiBNU09fSSwgOSBNU09fSSB9LCB7IDE2IE1TT19JLCAxMCBNU09fSSB9LCB7IDEyIE1TT19JLCAwIE1TT19JIH0sCgl7IDI0IE1TT19JLCAxIE1TT19JIH0sIHsgMjUgTVNPX0ksIDI2IE1TT19JIH0sIHsgMHgyMSBNU09fSSwgMjggTVNPX0kgfSwgeyAweDEzIE1TT19JLCAxIE1TT19JIH0sIHsgMHgyMCBNU09fSSwgMjYgTVNPX0kgfSwgeyAyNyBNU09fSSwgMjggTVNPX0kgfSwgeyAyOSBNU09fSSwgMSBNU09fSSB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSBtc29fc3B0RG91YmxlV2F2ZUNhbGNbXSA9CnsKCXsgMHgyMDAwLCB7IERGRl9Qcm9wX2FkanVzdFZhbHVlLCAwLCAwIH0gfSwJLy80MDAgKHZlcnQuYWRqKQoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIDB4NDAwIH0gfSwJCQkvLzQwMQoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0MlZhbHVlLCAwLCAwIH0gfSwvLzQwMiAoaG9yei5hZGopCgl7IDB4MjAwMCwgeyAweDQwMiwgMCwgMTA4MDAgfSB9LAkJCS8vNDAzIC0yMTYwIC0+IDIxNjAgKGhvcnouYWRqKQoJeyAweDIwMDEsIHsgMHg0MDMsIDIsIDEgfSB9LAkJCQkvLzQwNCAtNDMyMCAtPiA0MzIwIChob3J6LmFkaikKCXsgMHgyMDAzLCB7IDB4NDA0LCAwLCAwIH0gfSwJCQkJLy80MDUgYWJzKCAweDQwNCApCShob3J6LmFkaikKCXsgMHg4MDAwLCB7IDQzMjAsIDAsIDB4NDA1IH0gfSwJCQkJLy80MDYgLT4gbm90IHVzZWQKCXsgMHhhMDA2LCB7IDB4NDAzLCAwLCAweDQwNSB9IH0sCQkJLy80MDcKCXsgMHg0MDAxLCB7IDc5MDAsIDB4NDAwLCAyMjMwIH0gfSwJCQkvLzQwOCAwIC0+IDc5MDAJKHZlcnQuYWRqKQoJeyAweGEwMDAsIHsgMHg0MDAsIDAsIDB4NDA4IH0gfSwJCQkvLzQwOQoJeyAweDYwMDAsIHsgMHg0MDAsIDB4NDA4LCAwIH0gfSwJCQkvLzQwYQoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIDB4NDA0IH0gfSwJCQkvLzQwYgoJeyAweDYwMDYsIHsgMHg0MDMsIDB4NDBiLCAyMTYwMCB9IH0sCQkvLzQwYwoJeyAweGEwMDAsIHsgMHg0MGMsIDAsIDB4NDA3IH0gfSwJCQkvLzQwZCB3aWR0aCBiZXR3ZWVuIHAwIGFuZCBwMQoJeyAweDIwMDEsIHsgMHg0MDUsIDEsIDIgfSB9LAkJCQkvLzQwZQoJeyAweGEwMDAsIHsgMHg0MDcsIDM2MDAsIDB4NDBlIH0gfSwJCQkvLzQwZgoJeyAweDYwMDAsIHsgMHg0MGMsIDB4NDBlLCAzNjAwIH0gfSwJCQkvLzQxMAoJeyAweDIwMDEsIHsgMHg0MGQsIDEsIDIgfSB9LAkJCQkvLzQxMSAxLzIgd2lkdGgKCXsgMHg2MDAwLCB7IDB4NDA3LCAweDQxMSwgMCB9IH0sCQkJLy80MTIgdG9wIGNlbnRlciBnbHVlIHhwb3MKCXsgMHg4MDAwLCB7IDIxNjAwLCAwLCAweDQxMiB9IH0sCQkJLy80MTMgYm90dG9tIGNlbnRlciBnbHVlIHhwb3MKCXsgMHgyMDAxLCB7IDB4NDA1LCAxLCAyIH0gfSwJCQkJLy80MTQgbGVmdCBnbHVlIHggcG9zCgl7IDB4ODAwMCwgeyAyMTYwMCwgMCwgMHg0MTQgfSB9LAkJCS8vNDE1IHJpZ2h0IGdsdWUgeCBwb3MKCXsgMHgyMDAxLCB7IDB4NDAwLCAyLCAxIH0gfSwJCQkJLy80MTYgeTEgKHRleHRib3gpCgl7IDB4ODAwMCwgeyAyMTYwMCwgMCwgMHg0MTYgfSB9LAkJCS8vNDE3IHkyICh0ZXh0Ym94KQoKCXsgMHg4MDAwLCB7IDIxNjAwLCAwLCAweDQwNyB9IH0sCQkJLy80MTggcDIKCgl7IDB4ODAwMCwgeyAyMTYwMCwgMCwgMHg0MGYgfSB9LAkJCS8vNDE5IGMKCXsgMHg2MDAwLCB7IDB4NDAxLCAweDQwOCwgMCB9IH0sCQkJLy80MWEKCgl7IDB4ODAwMCwgeyAyMTYwMCwgMCwgMHg0MTAgfSB9LAkJCS8vNDFiIGMKCXsgMHhhMDAwLCB7IDB4NDAxLCAwLCAweDQwOCB9IH0sCQkJLy80MWMKCgl7IDB4ODAwMCwgeyAyMTYwMCwgMCwgMHg0MGMgfSB9LCAJCQkvLzQxZCBwMwoJeyAweGEwMDAsIHsgMHg0MTIsIDAsIDB4NDBlIH0gfSwJCQkvLzQxZQoJeyAweDYwMDAsIHsgMHg0MTIsIDB4NDBlLCAwIH0gfSwJCQkvLzQxZgoJeyAweGEwMDAsIHsgMHg0MTMsIDAsIDB4NDBlIH0gfSwJCQkvLzQyMAoJeyAweDYwMDAsIHsgMHg0MTMsIDB4NDBlLCAwIH0gfQkJCQkvLzQyMQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0RG91YmxlV2F2ZUdsdWVQb2ludHNbXSA9CnsKCXsgMHgxMiBNU09fSSwgMCBNU09fSSB9LCB7IDB4MTQgTVNPX0ksIDEwODAwIH0sIHsgMHgxMyBNU09fSSwgMSBNU09fSSB9LCB7IDB4MTUgTVNPX0ksIDEwODAwIH0KfTsKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvX3NwdERvdWJsZVdhdmVTZWdtW10gPQp7CgkweDQwMDAsIDB4MjAwMiwgMHgwMDAxLCAweDIwMDIsIDB4NjAwMCwgMHg4MDAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkhhbmRsZSBtc29fc3B0RG91YmxlV2F2ZUhhbmRsZVtdID0KewoJewlNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0UsCgkJMCwgMHgxMDAsIDEwODAwLCAxMDgwMCwgTXg4MDAwMDAwMCwgMHg3ZmZmZmZmZiwgMCwgMjIzMCB9LAoJewlNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0UsCgkJMHgxMDEsIDIxNjAwLCAxMDgwMCwgMTA4MDAsIDg2NDAsIDEyOTYwLCBNeDgwMDAwMDAwLCAweDdmZmZmZmZmIH0KfTsKc3RhdGljIGNvbnN0IHNhbF9JbnQzMiBtc29fc3B0RG91YmxlV2F2ZURlZmF1bHRbXSA9CnsKCTIsIDE0MDAsIDEwODAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzIG1zb19zcHREb3VibGVXYXZlVGV4dFJlY3RbXSA9CnsKCXsgeyA1IE1TT19JLCAyMiBNU09fSSB9LCB7IDExIE1TT19JLCAyMyBNU09fSSB9IH0KfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29Eb3VibGVXYXZlID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHREb3VibGVXYXZlVmVydCwgc2l6ZW9mKCBtc29fc3B0RG91YmxlV2F2ZVZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKHNhbF91SW50MTYqKW1zb19zcHREb3VibGVXYXZlU2VnbSwgc2l6ZW9mKCBtc29fc3B0RG91YmxlV2F2ZVNlZ20gKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0RG91YmxlV2F2ZUNhbGMsIHNpemVvZiggbXNvX3NwdERvdWJsZVdhdmVDYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0RG91YmxlV2F2ZURlZmF1bHQsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdERvdWJsZVdhdmVUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0RG91YmxlV2F2ZVRleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTIxNjAwLCAyMTYwMCwKCU14ODAwMDAwMDAsIE14ODAwMDAwMDAsCgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdERvdWJsZVdhdmVHbHVlUG9pbnRzLCBzaXplb2YoIG1zb19zcHREb3VibGVXYXZlR2x1ZVBvaW50cyApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoU3Z4TVNEZmZIYW5kbGUqKW1zb19zcHREb3VibGVXYXZlSGFuZGxlLCBzaXplb2YoIG1zb19zcHREb3VibGVXYXZlSGFuZGxlICkgLyBzaXplb2YoIFN2eE1TRGZmSGFuZGxlICkKfTsKCi8vIGZvciBlYWNoIHNoYXBldHlwZSBhIGJpdCBvZiAxIGlzIGluZGljYXRpbmcgdGhhdCB0aGUgc2hhcGUgaXMgTk9UIGZpbGxlZCBieSBkZWZhdWx0CnN0YXRpYyBjb25zdCBzYWxfdUludDE2IG1zb19EZWZhdWx0RmlsbGluZ1RhYmxlW10gPQp7CgkweDAwMDAsIDB4MDAxOCwgMHgwMWZmLCAweDAwMDAsIDB4MGMwMCwgMHgwMWUwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwNjAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAKfTsKc2FsX0Jvb2wgSXNDdXN0b21TaGFwZUZpbGxlZEJ5RGVmYXVsdCggTVNPX1NQVCBlU3BUeXBlICkKewoJc2FsX0Jvb2wgYklzRmlsbGVkQnlEZWZhdWx0ID0gc2FsX1RydWU7CglzYWxfdUludDMyIGkgPSAoc2FsX3VJbnQzMillU3BUeXBlOwoJaWYgKCBpIDwgMHgxMDAgKQoJCWJJc0ZpbGxlZEJ5RGVmYXVsdCA9ICggbXNvX0RlZmF1bHRGaWxsaW5nVGFibGVbIGkgPj4gNCBdICYgKCAxIDw8ICggaSAmIDB4ZiApICkgKSA9PSAwOwoJcmV0dXJuIGJJc0ZpbGxlZEJ5RGVmYXVsdDsKfQpzYWxfSW50MTYgR2V0Q3VzdG9tU2hhcGVDb25uZWN0aW9uVHlwZURlZmF1bHQoIE1TT19TUFQgZVNwVHlwZSApCnsKCXNhbF9JbnQxNiBuR2x1ZVBvaW50VHlwZSA9IGNvbTo6c3VuOjpzdGFyOjpkcmF3aW5nOjpFbmhhbmNlZEN1c3RvbVNoYXBlR2x1ZVBvaW50VHlwZTo6U0VHTUVOVFM7Cgljb25zdCBtc29fQ3VzdG9tU2hhcGUqIHBEZWZDdXN0b21TaGFwZSA9IEdldEN1c3RvbVNoYXBlQ29udGVudCggZVNwVHlwZSApOwoJaWYgKCBwRGVmQ3VzdG9tU2hhcGUgJiYgcERlZkN1c3RvbVNoYXBlLT5uR2x1ZVBvaW50cyApCgkJbkdsdWVQb2ludFR5cGUgPSBjb206OnN1bjo6c3Rhcjo6ZHJhd2luZzo6RW5oYW5jZWRDdXN0b21TaGFwZUdsdWVQb2ludFR5cGU6OkNVU1RPTTsKCWVsc2UKCXsKCQlzd2l0Y2goIGVTcFR5cGUgKQoJCXsKCQkJY2FzZSBtc29fc3B0UmVjdGFuZ2xlIDoKCQkJY2FzZSBtc29fc3B0Um91bmRSZWN0YW5nbGUgOgoJCQljYXNlIG1zb19zcHRQaWN0dXJlRnJhbWUgOgoJCQljYXNlIG1zb19zcHRGbG93Q2hhcnRQcm9jZXNzIDoKCQkJY2FzZSBtc29fc3B0Rmxvd0NoYXJ0UHJlZGVmaW5lZFByb2Nlc3MgOgoJCQljYXNlIG1zb19zcHRGbG93Q2hhcnRJbnRlcm5hbFN0b3JhZ2UgOgoJCQljYXNlIG1zb19zcHRUZXh0UGxhaW5UZXh0IDoKCQkJY2FzZSBtc29fc3B0VGV4dEJveCA6CgkJCWNhc2UgbXNvX3NwdFZlcnRpY2FsU2Nyb2xsIDoKCQkJY2FzZSBtc29fc3B0SG9yaXpvbnRhbFNjcm9sbCA6CgkJCQluR2x1ZVBvaW50VHlwZSA9IGNvbTo6c3VuOjpzdGFyOjpkcmF3aW5nOjpFbmhhbmNlZEN1c3RvbVNoYXBlR2x1ZVBvaW50VHlwZTo6UkVDVDsKCQkJZGVmYXVsdDogYnJlYWs7CgkJfQoJfQoJcmV0dXJuIG5HbHVlUG9pbnRUeXBlOwp9CgovLyBmb3IgZWFjaCBzaGFwZXR5cGUgYSBiaXQgb2YgMSBpcyBpbmRpY2F0aW5nIHRoYXQgdGhlIHNoYXBlIGlzIE5PVCBzdHJva2VkIGJ5IGRlZmF1bHQKLy8gI2kyODI2OSMKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvX0RlZmF1bHRTdHJva2luZ1RhYmxlW10gPQp7CgkweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCgkweDA4MDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIC8vICNpMjgyNjkjIEFkZGVkIHNoYXBlIDc1IChtc29fc3B0UGljdHVyZUZyYW1lKQoJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAoJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwCn07Ci8vICNpMjgyNjkjCnNhbF9Cb29sIElzQ3VzdG9tU2hhcGVTdHJva2VkQnlEZWZhdWx0KCBNU09fU1BUIGVTcFR5cGUgKQp7CglzYWxfQm9vbCBiSXNTdHJva2VkQnlEZWZhdWx0ID0gc2FsX1RydWU7CglzYWxfdUludDMyIGkgPSAoc2FsX3VJbnQzMillU3BUeXBlOwoJaWYgKCBpIDwgMHgxMDAgKQoJCWJJc1N0cm9rZWRCeURlZmF1bHQgPSAoIG1zb19EZWZhdWx0U3Ryb2tpbmdUYWJsZVsgaSA+PiA0IF0gJiAoIDEgPDwgKCBpICYgMHhmICkgKSApID09IDA7CglyZXR1cm4gYklzU3Ryb2tlZEJ5RGVmYXVsdDsKfQoKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvU29ydEZpbGxlZE9iamVjdHNUb0JhY2tUYWJsZVtdID0KewoJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDEwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwCn07CnNhbF9Cb29sIFNvcnRGaWxsZWRPYmplY3RzVG9CYWNrQnlEZWZhdWx0KCBNU09fU1BUIGVTcFR5cGUgKQp7CglzYWxfQm9vbCBiU29ydEZpbGxlZE9iamVjdHNUb0JhY2tCeURlZmF1bHQgPSBzYWxfVHJ1ZTsKCXNhbF91SW50MzIgaSA9IChzYWxfdUludDMyKWVTcFR5cGU7CglpZiAoIGkgPCAweDEwMCApCgkJYlNvcnRGaWxsZWRPYmplY3RzVG9CYWNrQnlEZWZhdWx0ID0gKCBtc29Tb3J0RmlsbGVkT2JqZWN0c1RvQmFja1RhYmxlWyBpID4+IDQgXSAmICggMSA8PCAoIGkgJiAweGYgKSApICkgIT0gMDsKCXJldHVybiBiU29ydEZpbGxlZE9iamVjdHNUb0JhY2tCeURlZmF1bHQ7Cn0KCnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRGb250V29ya1ZlcnRbXSA9CnsKCXsgMCwgMCB9LCB7IDIxNjAwLCAwIH0sIHsgMCwgMjE2MDAgfSwgeyAyMTYwMCwgMjE2MDAgfQp9OwpzdGF0aWMgY29uc3Qgc2FsX3VJbnQxNiBtc29fc3B0Rm9udFdvcmtTZWdtW10gPQp7CgkweDQwMDAsIDB4MDAwMSwgMHg4MDAwLAoJMHg0MDAwLCAweDAwMDEsIDB4ODAwMAp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyBtc29fc3B0Rm9udFdvcmtUZXh0UmVjdFtdID0KewoJeyB7IDAsIDAgfSwgeyAyMTYwMCwgMjE2MDAgfSB9Cn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvRm9udFdvcmsgPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdEZvbnRXb3JrVmVydCwgc2l6ZW9mKCBtc29fc3B0Rm9udFdvcmtWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0Rm9udFdvcmtTZWdtLCBzaXplb2YoIG1zb19zcHRGb250V29ya1NlZ20gKSA+PiAxLAoJTlVMTCwgMCwKCU5VTEwsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdEZvbnRXb3JrVGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdEZvbnRXb3JrVGV4dFJlY3QgKSAvIHNpemVvZiggU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyApLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCU5VTEwsIDAsCglOVUxMLCAwCS8vIEhhbmRsZXMKfTsKCnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRUZXh0UGxhaW5UZXh0VmVydFtdID0KewoJeyAzIE1TT19JLCAwIH0sIHsgNSBNU09fSSwgMCB9LCB7IDYgTVNPX0ksIDIxNjAwIH0sIHsgNyBNU09fSSwgMjE2MDAgfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgbXNvX3NwdFRleHRQbGFpblRleHRDYWxjW10gPQkvLyBhZGp1c3RtZW50MSA6IDY2MjkgLSAxNDk3MQp7Cgl7IDB4MjAwMCwgeyBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMCwgMTA4MDAgfSB9LAoJeyAweDIwMDEsIHsgMHg0MDAsIDIsIDEgfSB9LAoJeyAweDIwMDMsIHsgMHg0MDEsIDAsIDAgfSB9LAoJeyAweGEwMDYsIHsgMHg0MDEsIDAsIDB4NDAyIH0gfSwJCS8vIHgxKDMpCgl7IDB4ODAwMCwgeyAyMTYwMCwgMCwgMHg0MDIgfSB9LAoJeyAweDYwMDYsIHsgMHg0MDEsIDB4NDA0LCAyMTYwMCB9IH0sCS8vIHgyKDUpCgl7IDB4NjAwNiwgeyAweDQwMSwgMHg0MDIsIDAgfSB9LAkJLy8geDIKCXsgMHhhMDA2LCB7IDB4NDAxLCAyMTYwMCwgMHg0MDQgfSB9CQkvLyB4Myg3KQp9OwpzdGF0aWMgY29uc3Qgc2FsX3VJbnQxNiBtc29fc3B0VGV4dFBsYWluVGV4dFNlZ21bXSA9CnsKCTB4NDAwMCwgMHgwMDAxLCAweDgwMDAsCgkweDQwMDAsIDB4MDAwMSwgMHg4MDAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkhhbmRsZSBtc29fc3B0VGV4dFBsYWluVGV4dEhhbmRsZVtdID0KewoJewlNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0UsCgkJMHgxMDAsIDIxNjAwLCAxMDgwMCwgMTA4MDAsIDY2MjksIDE0OTcxLCBNeDgwMDAwMDAwLCAweDdmZmZmZmZmIH0KfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29UZXh0UGxhaW5UZXh0ID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRUZXh0UGxhaW5UZXh0VmVydCwgc2l6ZW9mKCBtc29fc3B0VGV4dFBsYWluVGV4dFZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKHNhbF91SW50MTYqKW1zb19zcHRUZXh0UGxhaW5UZXh0U2VnbSwgc2l6ZW9mKCBtc29fc3B0VGV4dFBsYWluVGV4dFNlZ20gKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0VGV4dFBsYWluVGV4dENhbGMsIHNpemVvZiggbXNvX3NwdFRleHRQbGFpblRleHRDYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0RGVmYXVsdDEwODAwLAoJKFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMqKW1zb19zcHRGb250V29ya1RleHRSZWN0LCBzaXplb2YoIG1zb19zcHRGb250V29ya1RleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTIxNjAwLCAyMTYwMCwKCU14ODAwMDAwMDAsIE14ODAwMDAwMDAsCglOVUxMLCAwLAoJKFN2eE1TRGZmSGFuZGxlKiltc29fc3B0VGV4dFBsYWluVGV4dEhhbmRsZSwgc2l6ZW9mKCBtc29fc3B0VGV4dFBsYWluVGV4dEhhbmRsZSApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0VGV4dFN0b3BWZXJ0W10gPQp7Cgl7IDAsIDAgTVNPX0kgfSwgeyA3MjAwLCAwIH0sIHsgMTQ0MDAsIDAgfSwgeyAyMTYwMCwgMCBNU09fSSB9LAoJeyAwLCAxIE1TT19JIH0sIHsgNzIwMCwgMjE2MDAgfSwgeyAxNDQwMCwgMjE2MDAgfSwgeyAyMTYwMCwgMSBNU09fSSB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSBtc29fc3B0VGV4dFN0b3BDYWxjW10gPQkvLyBhZGp1c3RtZW50MSA6IDMwODAgLSAxMDgwMAp7Cgl7IDB4MjAwMCwgeyBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMCwgMCB9IH0sCgl7IDB4ODAwMCwgeyAyMTYwMCwgMCwgREZGX1Byb3BfYWRqdXN0VmFsdWUgfSB9Cn07CnN0YXRpYyBjb25zdCBzYWxfdUludDE2IG1zb19zcHRUZXh0U3RvcFNlZ21bXSA9CnsKCTB4NDAwMCwgMHgwMDAzLCAweDgwMDAsCgkweDQwMDAsIDB4MDAwMywgMHg4MDAwCn07CnN0YXRpYyBjb25zdCBzYWxfSW50MzIgbXNvX3NwdFRleHRTdG9wRGVmYXVsdFtdID0KewoJMSwgMjcwMAp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZIYW5kbGUgbXNvX3NwdFRleHRTdG9wSGFuZGxlW10gPQp7Cgl7CU1TREZGX0hBTkRMRV9GTEFHU19SQU5HRSwKCQkwLCAweDEwMCwgMTA4MDAsIDEwODAwLCBNeDgwMDAwMDAwLCAweDdmZmZmZmZmLCAzMDgwLCAxMDgwMCB9Cn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvVGV4dFN0b3AgPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdFRleHRTdG9wVmVydCwgc2l6ZW9mKCBtc29fc3B0VGV4dFN0b3BWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0VGV4dFN0b3BTZWdtLCBzaXplb2YoIG1zb19zcHRUZXh0U3RvcFNlZ20gKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0VGV4dFN0b3BDYWxjLCBzaXplb2YoIG1zb19zcHRUZXh0U3RvcENhbGMgKSAvIHNpemVvZiggU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgKSwKCShzYWxfSW50MzIqKW1zb19zcHRUZXh0U3RvcERlZmF1bHQsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdEZvbnRXb3JrVGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdEZvbnRXb3JrVGV4dFJlY3QgKSAvIHNpemVvZiggU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyApLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCU5VTEwsIDAsCgkoU3Z4TVNEZmZIYW5kbGUqKW1zb19zcHRUZXh0U3RvcEhhbmRsZSwgc2l6ZW9mKCBtc29fc3B0VGV4dFN0b3BIYW5kbGUgKSAvIHNpemVvZiggU3Z4TVNEZmZIYW5kbGUgKQp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdFRleHRUcmlhbmdsZVZlcnRbXSA9CnsKCXsgMCwgMCBNU09fSSB9LCB7IDEwODAwLCAwIH0sIHsgMjE2MDAsIDAgTVNPX0kgfSwgeyAwLCAyMTYwMCB9LCB7IDIxNjAwLCAyMTYwMCB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSBtc29fc3B0VGV4dFRyaWFuZ2xlQ2FsY1tdID0JLy8gYWRqdXN0bWVudDEgOiA2NjI5IC0gMTQ5NzEKewoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAsIDAgfSB9Cn07CnN0YXRpYyBjb25zdCBzYWxfdUludDE2IG1zb19zcHRUZXh0VHJpYW5nbGVTZWdtW10gPQp7CgkweDQwMDAsIDB4MDAwMiwgMHg4MDAwLAoJMHg0MDAwLCAweDAwMDEsIDB4ODAwMAp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZIYW5kbGUgbXNvX3NwdFRleHRUcmlhbmdsZUhhbmRsZVtdID0KewoJewlNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0UsCgkJMCwgMHgxMDAsIDEwODAwLCAxMDgwMCwgTXg4MDAwMDAwMCwgMHg3ZmZmZmZmZiwgMCwgMjE2MDAgfQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb1RleHRUcmlhbmdsZSA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0VGV4dFRyaWFuZ2xlVmVydCwgc2l6ZW9mKCBtc29fc3B0VGV4dFRyaWFuZ2xlVmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdFRleHRUcmlhbmdsZVNlZ20sIHNpemVvZiggbXNvX3NwdFRleHRUcmlhbmdsZVNlZ20gKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0VGV4dFRyaWFuZ2xlQ2FsYywgc2l6ZW9mKCBtc29fc3B0VGV4dFRyaWFuZ2xlQ2FsYyApIC8gc2l6ZW9mKCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSApLAoJKHNhbF9JbnQzMiopbXNvX3NwdERlZmF1bHQxMDgwMCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0Rm9udFdvcmtUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0Rm9udFdvcmtUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJTlVMTCwgMCwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdFRleHRUcmlhbmdsZUhhbmRsZSwgc2l6ZW9mKCBtc29fc3B0VGV4dFRyaWFuZ2xlSGFuZGxlICkgLyBzaXplb2YoIFN2eE1TRGZmSGFuZGxlICkKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdFRleHRUcmlhbmdsZUludmVydGVkVmVydFtdID0KewoJeyAwLCAwIH0sIHsgMjE2MDAsIDAgfSwgeyAwLCAwIE1TT19JIH0sIHsgMTA4MDAsIDIxNjAwIH0sIHsgMjE2MDAsIDAgTVNPX0kgfQp9OwpzdGF0aWMgY29uc3Qgc2FsX3VJbnQxNiBtc29fc3B0VGV4dFRyaWFuZ2xlSW52ZXJ0ZWRTZWdtW10gPQp7CgkweDQwMDAsIDB4MDAwMSwgMHg4MDAwLAoJMHg0MDAwLCAweDAwMDIsIDB4ODAwMAp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb1RleHRUcmlhbmdsZUludmVydGVkID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRUZXh0VHJpYW5nbGVJbnZlcnRlZFZlcnQsIHNpemVvZiggbXNvX3NwdFRleHRUcmlhbmdsZUludmVydGVkVmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdFRleHRUcmlhbmdsZUludmVydGVkU2VnbSwgc2l6ZW9mKCBtc29fc3B0VGV4dFRyaWFuZ2xlSW52ZXJ0ZWRTZWdtICkgPj4gMSwKCShTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSopbXNvX3NwdFRleHRUcmlhbmdsZUNhbGMsIHNpemVvZiggbXNvX3NwdFRleHRUcmlhbmdsZUNhbGMgKSAvIHNpemVvZiggU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgKSwKCShzYWxfSW50MzIqKW1zb19zcHREZWZhdWx0MTA4MDAsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdEZvbnRXb3JrVGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdEZvbnRXb3JrVGV4dFJlY3QgKSAvIHNpemVvZiggU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyApLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCU5VTEwsIDAsCgkoU3Z4TVNEZmZIYW5kbGUqKW1zb19zcHRUZXh0VHJpYW5nbGVIYW5kbGUsIHNpemVvZiggbXNvX3NwdFRleHRUcmlhbmdsZUhhbmRsZSApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0VGV4dENoZXZyb25WZXJ0W10gPQp7Cgl7IDAsIDAgTVNPX0kgfSwgeyAxMDgwMCwgMCB9LCB7IDIxNjAwLCAwIE1TT19JIH0sIHsgMCwgMjE2MDAgfSwgeyAxMDgwMCwgMSBNU09fSSB9LCB7IDIxNjAwLCAyMTYwMCB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSBtc29fc3B0VGV4dENoZXZyb25DYWxjW10gPQkvLyBhZGp1c3RtZW50MSA6IDY2MjkgLSAxNDk3MQp7Cgl7IDB4MjAwMCwgeyBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMCwgMCB9IH0sCgl7IDB4ODAwMCwgeyAyMTYwMCwgMCwgREZGX1Byb3BfYWRqdXN0VmFsdWUgfSB9Cn07CnN0YXRpYyBjb25zdCBzYWxfdUludDE2IG1zb19zcHRUZXh0Q2hldnJvblNlZ21bXSA9CnsKCTB4NDAwMCwgMHgwMDAyLCAweDgwMDAsCgkweDQwMDAsIDB4MDAwMiwgMHg4MDAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkhhbmRsZSBtc29fc3B0VGV4dENoZXZyb25IYW5kbGVbXSA9CnsKCXsJTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFLAoJCTAsIDB4MTAwLCAxMDgwMCwgMTA4MDAsIE14ODAwMDAwMDAsIDB4N2ZmZmZmZmYsIDAsIDEwODAwIH0KfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29UZXh0Q2hldnJvbiA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0VGV4dENoZXZyb25WZXJ0LCBzaXplb2YoIG1zb19zcHRUZXh0Q2hldnJvblZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKHNhbF91SW50MTYqKW1zb19zcHRUZXh0Q2hldnJvblNlZ20sIHNpemVvZiggbXNvX3NwdFRleHRDaGV2cm9uU2VnbSApID4+IDEsCgkoU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEqKW1zb19zcHRUZXh0Q2hldnJvbkNhbGMsIHNpemVvZiggbXNvX3NwdFRleHRDaGV2cm9uQ2FsYyApIC8gc2l6ZW9mKCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSApLAoJKHNhbF9JbnQzMiopbXNvX3NwdERlZmF1bHQ1NDAwLAoJKFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMqKW1zb19zcHRGb250V29ya1RleHRSZWN0LCBzaXplb2YoIG1zb19zcHRGb250V29ya1RleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTIxNjAwLCAyMTYwMCwKCU14ODAwMDAwMDAsIE14ODAwMDAwMDAsCglOVUxMLCAwLAoJKFN2eE1TRGZmSGFuZGxlKiltc29fc3B0VGV4dENoZXZyb25IYW5kbGUsIHNpemVvZiggbXNvX3NwdFRleHRDaGV2cm9uSGFuZGxlICkgLyBzaXplb2YoIFN2eE1TRGZmSGFuZGxlICkKfTsKCnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRUZXh0Q2hldnJvbkludmVydGVkVmVydFtdID0KewoJeyAwLCAwIH0sIHsgMTA4MDAsIDEgTVNPX0kgfSwgeyAyMTYwMCwgMCB9LCB7IDAsIDAgTVNPX0kgfSwgeyAxMDgwMCwgMjE2MDAgfSwgeyAyMTYwMCwgMCBNU09fSSB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSBtc29fc3B0VGV4dENoZXZyb25JbnZlcnRlZENhbGNbXSA9CS8vIGFkanVzdG1lbnQxIDogNjYyOSAtIDE0OTcxCnsKCXsgMHgyMDAwLCB7IERGRl9Qcm9wX2FkanVzdFZhbHVlLCAwLCAwIH0gfSwKCXsgMHg4MDAwLCB7IDIxNjAwLCAwLCBERkZfUHJvcF9hZGp1c3RWYWx1ZSB9IH0KfTsKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvX3NwdFRleHRDaGV2cm9uSW52ZXJ0ZWRTZWdtW10gPQp7CgkweDQwMDAsIDB4MDAwMiwgMHg4MDAwLAoJMHg0MDAwLCAweDAwMDIsIDB4ODAwMAp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZIYW5kbGUgbXNvX3NwdFRleHRDaGV2cm9uSW52ZXJ0ZWRIYW5kbGVbXSA9CnsKCXsJTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFLAoJCTAsIDB4MTAwLCAxMDgwMCwgMTA4MDAsIE14ODAwMDAwMDAsIDB4N2ZmZmZmZmYsIDEwODAwLCAyMTYwMCB9Cn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvVGV4dENoZXZyb25JbnZlcnRlZCA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0VGV4dENoZXZyb25JbnZlcnRlZFZlcnQsIHNpemVvZiggbXNvX3NwdFRleHRDaGV2cm9uSW52ZXJ0ZWRWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0VGV4dENoZXZyb25JbnZlcnRlZFNlZ20sIHNpemVvZiggbXNvX3NwdFRleHRDaGV2cm9uSW52ZXJ0ZWRTZWdtICkgPj4gMSwKCShTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSopbXNvX3NwdFRleHRDaGV2cm9uSW52ZXJ0ZWRDYWxjLCBzaXplb2YoIG1zb19zcHRUZXh0Q2hldnJvbkludmVydGVkQ2FsYyApIC8gc2l6ZW9mKCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSApLAoJKHNhbF9JbnQzMiopbXNvX3NwdERlZmF1bHQxNjIwMCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0Rm9udFdvcmtUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0Rm9udFdvcmtUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJTlVMTCwgMCwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdFRleHRDaGV2cm9uSW52ZXJ0ZWRIYW5kbGUsIHNpemVvZiggbXNvX3NwdFRleHRDaGV2cm9uSW52ZXJ0ZWRIYW5kbGUgKSAvIHNpemVvZiggU3Z4TVNEZmZIYW5kbGUgKQp9OwovL1YgMCAwIDIxNjAwID9mMiAwID9mMCAyMTYwMCA/ZjAKLy9XIDAgMCAyMTYwMCA/ZjIgMjE2MDAgP2YwIDAgP2YwIE4KLy9WIDAgP2YzIDIxNjAwIDIxNjAwIDAgP2YxIDIxNjAwID9mMQovL1cgMCA/ZjMgMjE2MDAgMjE2MDAgMjE2MDAgP2YxIDAgP2YxIE4KLy9tc29fc3B0VGV4dFJpbmdJbnNpZGUKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdFRleHRSaW5nSW5zaWRlVmVydFtdID0KewoJeyAwLCAwIH0sIHsgMjE2MDAsIDIgTVNPX0kgfSwgeyAwLCAwIE1TT19JIH0seyAyMTYwMCwgMCBNU09fSSB9LC8vVgoJeyAwLCAwIH0sIHsgMjE2MDAsIDIgTVNPX0kgfSwgeyAyMTYwMCwgMCBNU09fSSB9LHsgMCwgMCBNU09fSSB9LC8vVwoJeyAwLCAzIE1TT19JIH0sIHsgMjE2MDAsIDIxNjAwIH0sIHsgMCwgMSBNU09fSSB9LHsgMjE2MDAsIDEgTVNPX0kgfSwvL1YKCXsgMCwgMyBNU09fSSB9LCB7IDIxNjAwLCAyMTYwMCB9LCB7IDIxNjAwLCAxIE1TT19JIH0seyAwLCAxIE1TT19JIH0vL1cKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhIG1zb19zcHRUZXh0UmluZ0luc2lkZUNhbGNbXSA9CS8vIGFkanVzdG1lbnQxIDogNjYyOSAtIDE0OTcxCnsKCXsgMHgyMDAxLCB7IERGRl9Qcm9wX2FkanVzdFZhbHVlLCAxLCAyIH0gfSwKCXsgMHg4MDAwLCB7IDIxNjAwLCAwLCAweDQwMCB9IH0sCgl7IDB4MjAwMCwgeyBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMCwgMCB9IH0sIC8vJDAKCXsgMHg4MDAwLCB7IDIxNjAwLCAwLCBERkZfUHJvcF9hZGp1c3RWYWx1ZSB9IH0vLzIxNjAwLSQwCn07CnN0YXRpYyBjb25zdCBzYWxfdUludDE2IG1zb19zcHRUZXh0UmluZ0luc2lkZVNlZ21bXSA9CnsKCTB4YTYwNCwgMHhhNTA0LDB4ODAwMCwKCTB4YTYwNCwgMHhhNTA0LDB4ODAwMAp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZIYW5kbGUgbXNvX3NwdFRleHRSaW5nSW5zaWRlSGFuZGxlW10gPQp7Cgl7CU1TREZGX0hBTkRMRV9GTEFHU19SQU5HRXwgTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFX1lfTUFYX0lTX1NQRUNJQUwgfCBNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0VfWV9NSU5fSVNfU1BFQ0lBTCwKCQkxMDgwMCwgMHgxMDAsIDEwODAwLCAxMDgwMCwgTXg4MDAwMDAwMCwgMHg3ZmZmZmZmZiwgMTA4MDAsIDIxNjAwIH0KfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29UZXh0UmluZ0luc2lkZSA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0VGV4dFJpbmdJbnNpZGVWZXJ0LCBzaXplb2YoIG1zb19zcHRUZXh0UmluZ0luc2lkZVZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKHNhbF91SW50MTYqKW1zb19zcHRUZXh0UmluZ0luc2lkZVNlZ20sIHNpemVvZiggbXNvX3NwdFRleHRSaW5nSW5zaWRlU2VnbSApID4+IDEsCgkoU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEqKW1zb19zcHRUZXh0UmluZ0luc2lkZUNhbGMsIHNpemVvZiggbXNvX3NwdFRleHRSaW5nSW5zaWRlQ2FsYyApIC8gc2l6ZW9mKCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSApLAoJKHNhbF9JbnQzMiopbXNvX3NwdERlZmF1bHQxMzUwMCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0Rm9udFdvcmtUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0Rm9udFdvcmtUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJTlVMTCwgMCwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdFRleHRSaW5nSW5zaWRlSGFuZGxlLCBzaXplb2YoIG1zb19zcHRUZXh0UmluZ0luc2lkZUhhbmRsZSApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCn07Ci8vbXNvX3NwdFRleHRSaW5nT3V0c2lkZQovL3BhdGggPSBVIDEwODAwID9mMCAyMTYwMCA/ZjIgMTgwIDUzOSBOIFUgMTA4MDAgP2YxIDIxNjAwID9mMiAxODAgNTM5IE4Kc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdFRleHRSaW5nT3V0c2lkZVZlcnRbXSA9CnsKCXsgMTA4MDAsIDAgTVNPX0kgfSwgeyAyMTYwMCwgMiBNU09fSSB9LCB7IDE4MCwgNTM5fSwvL1UKCXsgMTA4MDAsIDEgTVNPX0kgfSwgeyAyMTYwMCwgMiBNU09fSSB9LCB7IDE4MCwgNTM5IH0vL1UKCS8veyAxMDgwMCwgMCBNU09fSSB9LCB7IDEwODAwLCAwIE1TT19JIH0sIHsgMTgwLCAzNTkgfSwKCS8veyAxMDgwMCwgMSBNU09fSSB9LCB7IDEwODAwLCAwIE1TT19JIH0sIHsgMTgwLCAzNTkgfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgbXNvX3NwdFRleHRSaW5nT3V0c2lkZUNhbGNbXSA9CS8vIGFkanVzdG1lbnQxIDogNjYyOSAtIDE0OTcxCnsKCXsgMHgyMDAxLCB7IERGRl9Qcm9wX2FkanVzdFZhbHVlLCAxLCAyIH0gfSwKCXsgMHg4MDAwLCB7IDIxNjAwLCAwLCAweDQwMCB9IH0sCgl7IDB4MjAwMCwgeyBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMCwgMCB9IH0sIC8vJDAKCXsgMHg4MDAwLCB7IDIxNjAwLCAwLCBERkZfUHJvcF9hZGp1c3RWYWx1ZSB9IH0vLzIxNjAwLSQwCn07CnN0YXRpYyBjb25zdCBzYWxfdUludDE2IG1zb19zcHRUZXh0UmluZ091dHNpZGVTZWdtW10gPQp7CgkweEEyMDMsIDB4ODAwMCwKCTB4QTIwMywgMHg4MDAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkhhbmRsZSBtc29fc3B0VGV4dFJpbmdPdXRzaWRlSGFuZGxlW10gPQp7Cgl7CU1TREZGX0hBTkRMRV9GTEFHU19SQU5HRSB8IE1TREZGX0hBTkRMRV9GTEFHU19SQU5HRV9ZX01BWF9JU19TUEVDSUFMIHwgTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFX1lfTUlOX0lTX1NQRUNJQUwsCgkJMTA4MDAsIDB4MTAwLCAxMDgwMCwgMTA4MDAsIE14ODAwMDAwMDAsIDB4N2ZmZmZmZmYsIDEwODAwLCAyMTYwMCB9Cn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvVGV4dFJpbmdPdXRzaWRlID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRUZXh0UmluZ091dHNpZGVWZXJ0LCBzaXplb2YoIG1zb19zcHRUZXh0UmluZ091dHNpZGVWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0VGV4dFJpbmdPdXRzaWRlU2VnbSwgc2l6ZW9mKCBtc29fc3B0VGV4dFJpbmdPdXRzaWRlU2VnbSApID4+IDEsCgkoU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEqKW1zb19zcHRUZXh0UmluZ091dHNpZGVDYWxjLCBzaXplb2YoIG1zb19zcHRUZXh0UmluZ091dHNpZGVDYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0RGVmYXVsdDEzNTAwLAoJKFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMqKW1zb19zcHRGb250V29ya1RleHRSZWN0LCBzaXplb2YoIG1zb19zcHRGb250V29ya1RleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTIxNjAwLCAyMTYwMCwKCU14ODAwMDAwMDAsIE14ODAwMDAwMDAsCglOVUxMLCAwLAoJKFN2eE1TRGZmSGFuZGxlKiltc29fc3B0VGV4dFJpbmdPdXRzaWRlSGFuZGxlLCBzaXplb2YoIG1zb19zcHRUZXh0UmluZ091dHNpZGVIYW5kbGUgKSAvIHNpemVvZiggU3Z4TVNEZmZIYW5kbGUgKQp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdFRleHRGYWRlUmlnaHRWZXJ0W10gPQp7Cgl7IDAsIDAgfSwgeyAyMTYwMCwgMCBNU09fSSB9LCB7IDAsIDIxNjAwIH0sIHsgMjE2MDAsIDEgTVNPX0kgfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgbXNvX3NwdFRleHRGYWRlQ2FsY1tdID0KewoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAsIDAgfSB9LAoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIERGRl9Qcm9wX2FkanVzdFZhbHVlIH0gfQp9OwpzdGF0aWMgY29uc3Qgc2FsX3VJbnQxNiBtc29fc3B0VGV4dEZhZGVTZWdtW10gPQp7CgkweDQwMDAsIDB4MDAwMSwgMHg4MDAwLAoJMHg0MDAwLCAweDAwMDEsIDB4ODAwMAp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZIYW5kbGUgbXNvX3NwdFRleHRGYWRlUmlnaHRIYW5kbGVbXSA9CnsKCXsJTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFLAoJCTIxNjAwLCAweDEwMCwgMTA4MDAsIDEwODAwLCBNeDgwMDAwMDAwLCAweDdmZmZmZmZmLCAwLCAxMDgwMCB9Cn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvVGV4dEZhZGVSaWdodCA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0VGV4dEZhZGVSaWdodFZlcnQsIHNpemVvZiggbXNvX3NwdFRleHRGYWRlUmlnaHRWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0VGV4dEZhZGVTZWdtLCBzaXplb2YoIG1zb19zcHRUZXh0RmFkZVNlZ20gKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0VGV4dEZhZGVDYWxjLCBzaXplb2YoIG1zb19zcHRUZXh0RmFkZUNhbGMgKSAvIHNpemVvZiggU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgKSwKCShzYWxfSW50MzIqKW1zb19zcHREZWZhdWx0NzIwMCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0Rm9udFdvcmtUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0Rm9udFdvcmtUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJTlVMTCwgMCwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdFRleHRGYWRlUmlnaHRIYW5kbGUsIHNpemVvZiggbXNvX3NwdFRleHRGYWRlUmlnaHRIYW5kbGUgKSAvIHNpemVvZiggU3Z4TVNEZmZIYW5kbGUgKQp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdFRleHRGYWRlTGVmdFZlcnRbXSA9CnsKCXsgMCwgMCBNU09fSSB9LCB7IDIxNjAwLCAwIH0sIHsgMCwgMSBNU09fSSB9LCB7IDIxNjAwLCAyMTYwMCB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkhhbmRsZSBtc29fc3B0VGV4dEZhZGVMZWZ0SGFuZGxlW10gPQp7Cgl7CU1TREZGX0hBTkRMRV9GTEFHU19SQU5HRSwKCQkwLCAweDEwMCwgMTA4MDAsIDEwODAwLCBNeDgwMDAwMDAwLCAweDdmZmZmZmZmLCAwLCAxMDgwMCB9Cn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvVGV4dEZhZGVMZWZ0ID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRUZXh0RmFkZUxlZnRWZXJ0LCBzaXplb2YoIG1zb19zcHRUZXh0RmFkZUxlZnRWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0VGV4dEZhZGVTZWdtLCBzaXplb2YoIG1zb19zcHRUZXh0RmFkZVNlZ20gKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0VGV4dEZhZGVDYWxjLCBzaXplb2YoIG1zb19zcHRUZXh0RmFkZUNhbGMgKSAvIHNpemVvZiggU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgKSwKCShzYWxfSW50MzIqKW1zb19zcHREZWZhdWx0NzIwMCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0Rm9udFdvcmtUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0Rm9udFdvcmtUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJTlVMTCwgMCwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdFRleHRGYWRlTGVmdEhhbmRsZSwgc2l6ZW9mKCBtc29fc3B0VGV4dEZhZGVMZWZ0SGFuZGxlICkgLyBzaXplb2YoIFN2eE1TRGZmSGFuZGxlICkKfTsKCnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRUZXh0RmFkZVVwVmVydFtdID0KewoJeyAwIE1TT19JLCAwIH0sIHsgMSBNU09fSSwgMCB9LCB7IDAsIDIxNjAwIH0sIHsgMjE2MDAsIDIxNjAwIH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmSGFuZGxlIG1zb19zcHRUZXh0RmFkZVVwSGFuZGxlW10gPQp7Cgl7CU1TREZGX0hBTkRMRV9GTEFHU19SQU5HRSwKCQkweDEwMCwgMCwgMTA4MDAsIDEwODAwLCAwLCAxMDgwMCwgTXg4MDAwMDAwMCwgMHg3ZmZmZmZmZiB9Cn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvVGV4dEZhZGVVcCA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0VGV4dEZhZGVVcFZlcnQsIHNpemVvZiggbXNvX3NwdFRleHRGYWRlVXBWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0VGV4dEZhZGVTZWdtLCBzaXplb2YoIG1zb19zcHRUZXh0RmFkZVNlZ20gKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0VGV4dEZhZGVDYWxjLCBzaXplb2YoIG1zb19zcHRUZXh0RmFkZUNhbGMgKSAvIHNpemVvZiggU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgKSwKCShzYWxfSW50MzIqKW1zb19zcHREZWZhdWx0NzIwMCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0Rm9udFdvcmtUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0Rm9udFdvcmtUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJTlVMTCwgMCwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdFRleHRGYWRlVXBIYW5kbGUsIHNpemVvZiggbXNvX3NwdFRleHRGYWRlVXBIYW5kbGUgKSAvIHNpemVvZiggU3Z4TVNEZmZIYW5kbGUgKQp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdFRleHRGYWRlRG93blZlcnRbXSA9CnsKCXsgMCwgMCB9LCB7IDIxNjAwLCAwIH0sIHsgMCBNU09fSSwgMjE2MDAgfSwgeyAxIE1TT19JLCAyMTYwMCB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkhhbmRsZSBtc29fc3B0VGV4dEZhZGVEb3duSGFuZGxlW10gPQp7Cgl7CU1TREZGX0hBTkRMRV9GTEFHU19SQU5HRSwKCQkweDEwMCwgMjE2MDAsIDEwODAwLCAxMDgwMCwgMCwgMTA4MDAsIE14ODAwMDAwMDAsIDB4N2ZmZmZmZmYgfQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb1RleHRGYWRlRG93biA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0VGV4dEZhZGVEb3duVmVydCwgc2l6ZW9mKCBtc29fc3B0VGV4dEZhZGVEb3duVmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdFRleHRGYWRlU2VnbSwgc2l6ZW9mKCBtc29fc3B0VGV4dEZhZGVTZWdtICkgPj4gMSwKCShTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSopbXNvX3NwdFRleHRGYWRlQ2FsYywgc2l6ZW9mKCBtc29fc3B0VGV4dEZhZGVDYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0RGVmYXVsdDcyMDAsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdEZvbnRXb3JrVGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdEZvbnRXb3JrVGV4dFJlY3QgKSAvIHNpemVvZiggU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyApLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCU5VTEwsIDAsCgkoU3Z4TVNEZmZIYW5kbGUqKW1zb19zcHRUZXh0RmFkZURvd25IYW5kbGUsIHNpemVvZiggbXNvX3NwdFRleHRGYWRlRG93bkhhbmRsZSApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0VGV4dFNsYW50VXBWZXJ0W10gPQp7Cgl7IDAsIDAgTVNPX0kgfSwgeyAyMTYwMCwgMCB9LCB7IDAsIDIxNjAwIH0sIHsgMjE2MDAsIDEgTVNPX0kgfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZIYW5kbGUgbXNvX3NwdFRleHRTbGFudFVwSGFuZGxlW10gPQp7Cgl7CU1TREZGX0hBTkRMRV9GTEFHU19SQU5HRSwKCQkwLCAweDEwMCwgMTA4MDAsIDEwODAwLCBNeDgwMDAwMDAwLCAweDdmZmZmZmZmLCAwLCAxNTQwMCB9Cn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvVGV4dFNsYW50VXAgPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdFRleHRTbGFudFVwVmVydCwgc2l6ZW9mKCBtc29fc3B0VGV4dFNsYW50VXBWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0VGV4dEZhZGVTZWdtLCBzaXplb2YoIG1zb19zcHRUZXh0RmFkZVNlZ20gKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0VGV4dEZhZGVDYWxjLCBzaXplb2YoIG1zb19zcHRUZXh0RmFkZUNhbGMgKSAvIHNpemVvZiggU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgKSwKCShzYWxfSW50MzIqKW1zb19zcHREZWZhdWx0MTIwMDAsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdEZvbnRXb3JrVGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdEZvbnRXb3JrVGV4dFJlY3QgKSAvIHNpemVvZiggU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyApLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCU5VTEwsIDAsCgkoU3Z4TVNEZmZIYW5kbGUqKW1zb19zcHRUZXh0U2xhbnRVcEhhbmRsZSwgc2l6ZW9mKCBtc29fc3B0VGV4dFNsYW50VXBIYW5kbGUgKSAvIHNpemVvZiggU3Z4TVNEZmZIYW5kbGUgKQp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdFRleHRTbGFudERvd25WZXJ0W10gPQp7Cgl7IDAsIDAgfSwgeyAyMTYwMCwgMSBNU09fSSB9LCB7IDAsIDAgTVNPX0kgfSwgeyAyMTYwMCwgMjE2MDAgfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZIYW5kbGUgbXNvX3NwdFRleHRTbGFudERvd25IYW5kbGVbXSA9CnsKCXsJTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFLAoJCTAsIDB4MTAwLCAxMDgwMCwgMTA4MDAsIE14ODAwMDAwMDAsIDB4N2ZmZmZmZmYsIDYyMDAsIDIxNjAwIH0KfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29UZXh0U2xhbnREb3duID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRUZXh0U2xhbnREb3duVmVydCwgc2l6ZW9mKCBtc29fc3B0VGV4dFNsYW50RG93blZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKHNhbF91SW50MTYqKW1zb19zcHRUZXh0RmFkZVNlZ20sIHNpemVvZiggbXNvX3NwdFRleHRGYWRlU2VnbSApID4+IDEsCgkoU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEqKW1zb19zcHRUZXh0RmFkZUNhbGMsIHNpemVvZiggbXNvX3NwdFRleHRGYWRlQ2FsYyApIC8gc2l6ZW9mKCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSApLAoJKHNhbF9JbnQzMiopbXNvX3NwdERlZmF1bHQxMjAwMCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0Rm9udFdvcmtUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0Rm9udFdvcmtUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJTlVMTCwgMCwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdFRleHRTbGFudERvd25IYW5kbGUsIHNpemVvZiggbXNvX3NwdFRleHRTbGFudERvd25IYW5kbGUgKSAvIHNpemVvZiggU3Z4TVNEZmZIYW5kbGUgKQp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdFRleHRDYXNjYWRlVXBWZXJ0W10gPQp7Cgl7IDAsIDIgTVNPX0kgfSwgeyAyMTYwMCwgMCB9LCB7IDAsIDIxNjAwIH0sIHsgMjE2MDAsIDAgTVNPX0kgfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgbXNvX3NwdFRleHRDYXNjYWRlQ2FsY1tdID0KewoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAsIDAgfSB9LAoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIERGRl9Qcm9wX2FkanVzdFZhbHVlIH0gfSwKCXsgMHgyMDAxLCB7IDB4NDAxLCAxLCA0IH0gfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZIYW5kbGUgbXNvX3NwdFRleHRDYXNjYWRlVXBIYW5kbGVbXSA9CnsKCXsJTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFLAoJCTIxNjAwLCAweDEwMCwgMTA4MDAsIDEwODAwLCBNeDgwMDAwMDAwLCAweDdmZmZmZmZmLCA2MjAwLCAyMTYwMCB9Cn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvVGV4dENhc2NhZGVVcCA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0VGV4dENhc2NhZGVVcFZlcnQsIHNpemVvZiggbXNvX3NwdFRleHRDYXNjYWRlVXBWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0VGV4dEZhZGVTZWdtLCBzaXplb2YoIG1zb19zcHRUZXh0RmFkZVNlZ20gKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0VGV4dENhc2NhZGVDYWxjLCBzaXplb2YoIG1zb19zcHRUZXh0Q2FzY2FkZUNhbGMgKSAvIHNpemVvZiggU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgKSwKCShzYWxfSW50MzIqKW1zb19zcHREZWZhdWx0OTYwMCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0Rm9udFdvcmtUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0Rm9udFdvcmtUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJTlVMTCwgMCwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdFRleHRDYXNjYWRlVXBIYW5kbGUsIHNpemVvZiggbXNvX3NwdFRleHRDYXNjYWRlVXBIYW5kbGUgKSAvIHNpemVvZiggU3Z4TVNEZmZIYW5kbGUgKQp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdFRleHRDYXNjYWRlRG93blZlcnRbXSA9CnsKCXsgMCwgMCB9LCB7IDIxNjAwLCAyIE1TT19JIH0sIHsgMCwgMCBNU09fSSB9LCB7IDIxNjAwLCAyMTYwMCB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkhhbmRsZSBtc29fc3B0VGV4dENhc2NhZGVEb3duSGFuZGxlW10gPQp7Cgl7CU1TREZGX0hBTkRMRV9GTEFHU19SQU5HRSwKCQkwLCAweDEwMCwgMTA4MDAsIDEwODAwLCBNeDgwMDAwMDAwLCAweDdmZmZmZmZmLCA2MjAwLCAyMTYwMCB9Cn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvVGV4dENhc2NhZGVEb3duID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRUZXh0Q2FzY2FkZURvd25WZXJ0LCBzaXplb2YoIG1zb19zcHRUZXh0Q2FzY2FkZURvd25WZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0VGV4dEZhZGVTZWdtLCBzaXplb2YoIG1zb19zcHRUZXh0RmFkZVNlZ20gKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0VGV4dENhc2NhZGVDYWxjLCBzaXplb2YoIG1zb19zcHRUZXh0Q2FzY2FkZUNhbGMgKSAvIHNpemVvZiggU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgKSwKCShzYWxfSW50MzIqKW1zb19zcHREZWZhdWx0OTYwMCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0Rm9udFdvcmtUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0Rm9udFdvcmtUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJTlVMTCwgMCwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdFRleHRDYXNjYWRlRG93bkhhbmRsZSwgc2l6ZW9mKCBtc29fc3B0VGV4dENhc2NhZGVEb3duSGFuZGxlICkgLyBzaXplb2YoIFN2eE1TRGZmSGFuZGxlICkKfTsKCnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRUZXh0QXJjaFVwQ3VydmVWZXJ0W10gPQp7Cgl7IDAsIDAgfSwgeyAyMTYwMCwgMjE2MDAgfSwgeyAyIE1TT19JLCAzIE1TT19JIH0sIHsgNCBNU09fSSwgMyBNU09fSSB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSBtc29fc3B0VGV4dEFyY2hDdXJ2ZUNhbGNbXSA9CnsKCXsgMHg0MDBhLCB7IDEwODAwLCBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMCB9IH0sCgl7IDB4NDAwOSwgeyAxMDgwMCwgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAgfSB9LAoJeyAweDIwMDAsIHsgMHg0MDAsIDEwODAwLCAwIH0gfSwKCXsgMHgyMDAwLCB7IDB4NDAxLCAxMDgwMCwgMCB9IH0sCgl7IDB4ODAwMCwgeyAyMTYwMCwgMCwgMHg0MDIgfSB9Cn07CnN0YXRpYyBjb25zdCBzYWxfdUludDE2IG1zb19zcHRUZXh0QXJjaFVwQ3VydmVTZWdtW10gPQp7CgkweEE1MDQsIDB4ODAwMAkJLy8gY2xvY2t37XNlIGFyYwp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZIYW5kbGUgbXNvX3NwdFRleHRBcmNoVXBDdXJ2ZUhhbmRsZVtdID0KewoJewlNU0RGRl9IQU5ETEVfRkxBR1NfUE9MQVIsCgkJMTA4MDAsIDB4MTAwLCAxMDgwMCwgMTA4MDAsIDAsIDEwODAwLCBNeDgwMDAwMDAwLCAweDdmZmZmZmZmIH0KfTsKc3RhdGljIGNvbnN0IHNhbF9JbnQzMiBtc29fc3B0VGV4dEFyY2hVcEN1cnZlRGVmYXVsdFtdID0KewoJMSwgMTgwCn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvVGV4dEFyY2hVcEN1cnZlID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRUZXh0QXJjaFVwQ3VydmVWZXJ0LCBzaXplb2YoIG1zb19zcHRUZXh0QXJjaFVwQ3VydmVWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0VGV4dEFyY2hVcEN1cnZlU2VnbSwgc2l6ZW9mKCBtc29fc3B0VGV4dEFyY2hVcEN1cnZlU2VnbSApID4+IDEsCgkoU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEqKW1zb19zcHRUZXh0QXJjaEN1cnZlQ2FsYywgc2l6ZW9mKCBtc29fc3B0VGV4dEFyY2hDdXJ2ZUNhbGMgKSAvIHNpemVvZiggU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgKSwKCShzYWxfSW50MzIqKW1zb19zcHRUZXh0QXJjaFVwQ3VydmVEZWZhdWx0LAoJKFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMqKW1zb19zcHRGb250V29ya1RleHRSZWN0LCBzaXplb2YoIG1zb19zcHRGb250V29ya1RleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTIxNjAwLCAyMTYwMCwKCU14ODAwMDAwMDAsIE14ODAwMDAwMDAsCglOVUxMLCAwLAoJKFN2eE1TRGZmSGFuZGxlKiltc29fc3B0VGV4dEFyY2hVcEN1cnZlSGFuZGxlLCBzaXplb2YoIG1zb19zcHRUZXh0QXJjaFVwQ3VydmVIYW5kbGUgKSAvIHNpemVvZiggU3Z4TVNEZmZIYW5kbGUgKQp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdFRleHRBcmNoRG93bkN1cnZlVmVydFtdID0KewoJeyAwLCAwIH0sIHsgMjE2MDAsIDIxNjAwIH0sIHsgNCBNU09fSSwgMyBNU09fSSB9LCB7IDIgTVNPX0ksIDMgTVNPX0kgfQp9OwpzdGF0aWMgY29uc3Qgc2FsX3VJbnQxNiBtc29fc3B0VGV4dEFyY2hEb3duQ3VydmVTZWdtW10gPQp7CgkweEEzMDQsIDB4ODAwMAkJLy8gY291bnRlciBjbG9ja3dpc2UgYXJjIHRvCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkhhbmRsZSBtc29fc3B0VGV4dEFyY2hEb3duQ3VydmVIYW5kbGVbXSA9CnsKCXsJTVNERkZfSEFORExFX0ZMQUdTX1BPTEFSLAoJCTEwODAwLCAweDEwMCwgMTA4MDAsIDEwODAwLCAwLCAxMDgwMCwgTXg4MDAwMDAwMCwgMHg3ZmZmZmZmZiB9Cn07CnN0YXRpYyBjb25zdCBzYWxfSW50MzIgbXNvX3NwdFRleHRBcmNoRG93bkN1cnZlRGVmYXVsdFtdID0KewoJMSwgMAp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb1RleHRBcmNoRG93bkN1cnZlID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRUZXh0QXJjaERvd25DdXJ2ZVZlcnQsIHNpemVvZiggbXNvX3NwdFRleHRBcmNoRG93bkN1cnZlVmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdFRleHRBcmNoRG93bkN1cnZlU2VnbSwgc2l6ZW9mKCBtc29fc3B0VGV4dEFyY2hEb3duQ3VydmVTZWdtICkgPj4gMSwKCShTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSopbXNvX3NwdFRleHRBcmNoQ3VydmVDYWxjLCBzaXplb2YoIG1zb19zcHRUZXh0QXJjaEN1cnZlQ2FsYyApIC8gc2l6ZW9mKCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSApLAoJKHNhbF9JbnQzMiopbXNvX3NwdFRleHRBcmNoRG93bkN1cnZlRGVmYXVsdCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0Rm9udFdvcmtUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0Rm9udFdvcmtUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJTlVMTCwgMCwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdFRleHRBcmNoRG93bkN1cnZlSGFuZGxlLCBzaXplb2YoIG1zb19zcHRUZXh0QXJjaERvd25DdXJ2ZUhhbmRsZSApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0VGV4dENpcmNsZUN1cnZlVmVydFtdID0KewoJeyAwLCAwIH0sIHsgMjE2MDAsIDIxNjAwIH0sIHsgMiBNU09fSSwgMyBNU09fSSB9LCB7IDIgTVNPX0ksIDQgTVNPX0kgfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgbXNvX3NwdFRleHRDaXJjbGVDdXJ2ZUNhbGNbXSA9CnsKCXsgMHg0MDBhLCB7IDEwODAwLCBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMCB9IH0sCgl7IDB4NDAwOSwgeyAxMDgwMCwgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAgfSB9LAoJeyAweDIwMDAsIHsgMHg0MDAsIDEwODAwLCAwIH0gfSwKCXsgMHgyMDAwLCB7IDB4NDAxLCAxMDgwMCwgMCB9IH0sCgl7IDB4ODAwMCwgeyAyMTYwMCwgMCwgMHg0MDMgfSB9Cn07CnN0YXRpYyBjb25zdCBzYWxfdUludDE2IG1zb19zcHRUZXh0Q2lyY2xlQ3VydmVTZWdtW10gPQp7CgkweEE1MDQsIDB4ODAwMAkJLy8gY2xvY2t3aXNlIGFyYyB0bwp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZIYW5kbGUgbXNvX3NwdFRleHRDaXJjbGVDdXJ2ZUhhbmRsZVtdID0KewoJewlNU0RGRl9IQU5ETEVfRkxBR1NfUE9MQVIsCgkJMTA4MDAsIDB4MTAwLCAxMDgwMCwgMTA4MDAsIDAsIDEwODAwLCBNeDgwMDAwMDAwLCAweDdmZmZmZmZmIH0KfTsKc3RhdGljIGNvbnN0IHNhbF9JbnQzMiBtc29fc3B0VGV4dENpcmNsZUN1cnZlRGVmYXVsdFtdID0KewoJMSwgLTE3OQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb1RleHRDaXJjbGVDdXJ2ZSA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0VGV4dENpcmNsZUN1cnZlVmVydCwgc2l6ZW9mKCBtc29fc3B0VGV4dENpcmNsZUN1cnZlVmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdFRleHRDaXJjbGVDdXJ2ZVNlZ20sIHNpemVvZiggbXNvX3NwdFRleHRDaXJjbGVDdXJ2ZVNlZ20gKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0VGV4dENpcmNsZUN1cnZlQ2FsYywgc2l6ZW9mKCBtc29fc3B0VGV4dENpcmNsZUN1cnZlQ2FsYyApIC8gc2l6ZW9mKCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSApLAoJKHNhbF9JbnQzMiopbXNvX3NwdFRleHRDaXJjbGVDdXJ2ZURlZmF1bHQsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdEZvbnRXb3JrVGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdEZvbnRXb3JrVGV4dFJlY3QgKSAvIHNpemVvZiggU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyApLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCU5VTEwsIDAsCgkoU3Z4TVNEZmZIYW5kbGUqKW1zb19zcHRUZXh0Q2lyY2xlQ3VydmVIYW5kbGUsIHNpemVvZiggbXNvX3NwdFRleHRDaXJjbGVDdXJ2ZUhhbmRsZSApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0VGV4dEJ1dHRvbkN1cnZlVmVydFtdID0KewoJeyAwLCAwIH0sIHsgMjE2MDAsIDIxNjAwIH0sIHsgMiBNU09fSSwgMyBNU09fSSB9LCB7IDQgTVNPX0ksIDMgTVNPX0kgfSwKCXsgMCwgMTA4MDAgfSwgeyAyMTYwMCwgMTA4MDAgfSwKCXsgMCwgMCB9LCB7IDIxNjAwLCAyMTYwMCB9LCB7IDIgTVNPX0ksIDUgTVNPX0kgfSwgeyA0IE1TT19JLCA1IE1TT19JIH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhIG1zb19zcHRUZXh0QnV0dG9uQ3VydmVDYWxjW10gPQp7Cgl7IDB4NDAwYSwgeyAxMDgwMCwgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAgfSB9LAoJeyAweDQwMDksIHsgMTA4MDAsIERGRl9Qcm9wX2FkanVzdFZhbHVlLCAwIH0gfSwKCXsgMHgyMDAwLCB7IDB4NDAwLCAxMDgwMCwgMCB9IH0sCgl7IDB4MjAwMCwgeyAweDQwMSwgMTA4MDAsIDAgfSB9LAoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIDB4NDAyIH0gfSwKCXsgMHg4MDAwLCB7IDIxNjAwLCAwLCAweDQwMyB9IH0KfTsKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvX3NwdFRleHRCdXR0b25DdXJ2ZVNlZ21bXSA9CnsKCTB4QTUwNCwgMHg4MDAwLAkJLy8gY2xvY2t3aXNlIGFyYwoJMHg0MDAwLCAweDAwMDEsIDB4ODAwMCwKCTB4QTMwNCwgMHg4MDAwCQkvLyBjb3VudGVyIGNsb2Nrd2lzZQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZIYW5kbGUgbXNvX3NwdFRleHRCdXR0b25DdXJ2ZUhhbmRsZVtdID0KewoJewlNU0RGRl9IQU5ETEVfRkxBR1NfUE9MQVIsCgkJMTA4MDAsIDB4MTAwLCAxMDgwMCwgMTA4MDAsIDAsIDEwODAwLCBNeDgwMDAwMDAwLCAweDdmZmZmZmZmIH0KfTsKc3RhdGljIGNvbnN0IHNhbF9JbnQzMiBtc29fc3B0VGV4dEJ1dHRvbkN1cnZlRGVmYXVsdFtdID0KewoJMSwgMTgwCn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvVGV4dEJ1dHRvbkN1cnZlID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRUZXh0QnV0dG9uQ3VydmVWZXJ0LCBzaXplb2YoIG1zb19zcHRUZXh0QnV0dG9uQ3VydmVWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0VGV4dEJ1dHRvbkN1cnZlU2VnbSwgc2l6ZW9mKCBtc29fc3B0VGV4dEJ1dHRvbkN1cnZlU2VnbSApID4+IDEsCgkoU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEqKW1zb19zcHRUZXh0QnV0dG9uQ3VydmVDYWxjLCBzaXplb2YoIG1zb19zcHRUZXh0QnV0dG9uQ3VydmVDYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0VGV4dEJ1dHRvbkN1cnZlRGVmYXVsdCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0Rm9udFdvcmtUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0Rm9udFdvcmtUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJTlVMTCwgMCwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdFRleHRCdXR0b25DdXJ2ZUhhbmRsZSwgc2l6ZW9mKCBtc29fc3B0VGV4dEJ1dHRvbkN1cnZlSGFuZGxlICkgLyBzaXplb2YoIFN2eE1TRGZmSGFuZGxlICkKfTsKCnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRUZXh0QXJjaFVwUG91clZlcnRbXSA9CnsKCXsgMCwgMCB9LCB7IDIxNjAwLCAyMTYwMCB9LCB7IDIgTVNPX0ksIDMgTVNPX0kgfSwgeyA0IE1TT19JLCAzIE1TT19JIH0sCgl7IDUgTVNPX0ksIDUgTVNPX0kgfSwgeyAxMSBNU09fSSwgMTEgTVNPX0kgfSwgeyA4IE1TT19JLCA5IE1TT19JIH0sIHsgMHhhIE1TT19JLCA5IE1TT19JIH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhIG1zb19zcHRUZXh0QXJjaFBvdXJDYWxjW10gPQp7Cgl7IDB4NDAwYSwgeyAxMDgwMCwgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAgfSB9LAoJeyAweDQwMDksIHsgMTA4MDAsIERGRl9Qcm9wX2FkanVzdFZhbHVlLCAwIH0gfSwKCXsgMHgyMDAwLCB7IDB4NDAwLCAxMDgwMCwgMCB9IH0sCgl7IDB4MjAwMCwgeyAweDQwMSwgMTA4MDAsIDAgfSB9LAoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIDB4NDAyIH0gfSwKCXsgMHg4MDAwLCB7IDEwODAwLCAwLCBERkZfUHJvcF9hZGp1c3QyVmFsdWUgfSB9LAoJeyAweDYwMGEsIHsgMHg0MDUsIERGRl9Qcm9wX2FkanVzdFZhbHVlLCAwIH0gfSwJLy8gNgoJeyAweDYwMDksIHsgMHg0MDUsIERGRl9Qcm9wX2FkanVzdFZhbHVlLCAwIH0gfSwKCXsgMHgyMDAwLCB7IDB4NDA2LCAxMDgwMCwgMCB9IH0sCQkJCS8vIDgKCXsgMHgyMDAwLCB7IDB4NDA3LCAxMDgwMCwgMCB9IH0sCgl7IDB4ODAwMCwgeyAyMTYwMCwgMCwgMHg0MDggfSB9LAkJCQkvLyAxMAoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIDB4NDA1IH0gfQp9OwpzdGF0aWMgY29uc3Qgc2FsX3VJbnQxNiBtc29fc3B0VGV4dEFyY2hVcFBvdXJTZWdtW10gPQp7CgkweEE1MDQsIDB4ODAwMCwJMHhBNTA0LCAweDgwMDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmSGFuZGxlIG1zb19zcHRUZXh0QXJjaFBvdXJIYW5kbGVbXSA9CnsKCXsJTVNERkZfSEFORExFX0ZMQUdTX1BPTEFSIHwgTVNERkZfSEFORExFX0ZMQUdTX1JBRElVU19SQU5HRSwKCQkweDEwMSwgMHgxMDAsIDEwODAwLCAxMDgwMCwgMCwgMTA4MDAsIE14ODAwMDAwMDAsIDB4N2ZmZmZmZmYgfQp9OwpzdGF0aWMgY29uc3Qgc2FsX0ludDMyIG1zb19zcHRUZXh0QXJjaFVwUG91ckRlZmF1bHRbXSA9CnsKCTIsIDE4MCwgNTQwMAp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb1RleHRBcmNoVXBQb3VyID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRUZXh0QXJjaFVwUG91clZlcnQsIHNpemVvZiggbXNvX3NwdFRleHRBcmNoVXBQb3VyVmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdFRleHRBcmNoVXBQb3VyU2VnbSwgc2l6ZW9mKCBtc29fc3B0VGV4dEFyY2hVcFBvdXJTZWdtICkgPj4gMSwKCShTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSopbXNvX3NwdFRleHRBcmNoUG91ckNhbGMsIHNpemVvZiggbXNvX3NwdFRleHRBcmNoUG91ckNhbGMgKSAvIHNpemVvZiggU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgKSwKCShzYWxfSW50MzIqKW1zb19zcHRUZXh0QXJjaFVwUG91ckRlZmF1bHQsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdEZvbnRXb3JrVGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdEZvbnRXb3JrVGV4dFJlY3QgKSAvIHNpemVvZiggU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyApLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCU5VTEwsIDAsCgkoU3Z4TVNEZmZIYW5kbGUqKW1zb19zcHRUZXh0QXJjaFBvdXJIYW5kbGUsIHNpemVvZiggbXNvX3NwdFRleHRBcmNoUG91ckhhbmRsZSApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0VGV4dEFyY2hEb3duUG91clZlcnRbXSA9CnsKCXsgNSBNU09fSSwgNSBNU09fSSB9LCB7IDExIE1TT19JLCAxMSBNU09fSSB9LCB7IDB4YSBNU09fSSwgOSBNU09fSSB9LCB7IDggTVNPX0ksIDkgTVNPX0kgfSwKCXsgMCwgMCB9LCB7IDIxNjAwLCAyMTYwMCB9LCB7IDQgTVNPX0ksIDMgTVNPX0kgfSwgeyAyIE1TT19JLCAzIE1TT19JIH0KfTsKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvX3NwdFRleHRBcmNoRG93blBvdXJTZWdtW10gPQp7CgkweEEzMDQsIDB4ODAwMCwJMHhBMzA0LCAweDgwMDAKfTsKc3RhdGljIGNvbnN0IHNhbF9JbnQzMiBtc29fc3B0VGV4dEFyY2hEb3duUG91ckRlZmF1bHRbXSA9CnsKCTIsIDAsIDU0MDAKfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29UZXh0QXJjaERvd25Qb3VyID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRUZXh0QXJjaERvd25Qb3VyVmVydCwgc2l6ZW9mKCBtc29fc3B0VGV4dEFyY2hEb3duUG91clZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKHNhbF91SW50MTYqKW1zb19zcHRUZXh0QXJjaERvd25Qb3VyU2VnbSwgc2l6ZW9mKCBtc29fc3B0VGV4dEFyY2hEb3duUG91clNlZ20gKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0VGV4dEFyY2hQb3VyQ2FsYywgc2l6ZW9mKCBtc29fc3B0VGV4dEFyY2hQb3VyQ2FsYyApIC8gc2l6ZW9mKCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSApLAoJKHNhbF9JbnQzMiopbXNvX3NwdFRleHRBcmNoRG93blBvdXJEZWZhdWx0LAoJKFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMqKW1zb19zcHRGb250V29ya1RleHRSZWN0LCBzaXplb2YoIG1zb19zcHRGb250V29ya1RleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTIxNjAwLCAyMTYwMCwKCU14ODAwMDAwMDAsIE14ODAwMDAwMDAsCglOVUxMLCAwLAoJKFN2eE1TRGZmSGFuZGxlKiltc29fc3B0VGV4dEFyY2hQb3VySGFuZGxlLCBzaXplb2YoIG1zb19zcHRUZXh0QXJjaFBvdXJIYW5kbGUgKSAvIHNpemVvZiggU3Z4TVNEZmZIYW5kbGUgKQp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdFRleHRDaXJjbGVQb3VyVmVydFtdID0KewoJeyAwLCAwIH0sIHsgMjE2MDAsIDIxNjAwIH0sIHsgMiBNU09fSSwgMyBNU09fSSB9LCB7IDIgTVNPX0ksIDQgTVNPX0kgfSwKCXsgNSBNU09fSSwgNSBNU09fSSB9LCB7IDExIE1TT19JLCAxMSBNU09fSSB9LCB7IDggTVNPX0ksIDkgTVNPX0kgfSwgeyA4IE1TT19JLCAweGEgTVNPX0kgfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgbXNvX3NwdFRleHRDaXJjbGVQb3VyQ2FsY1tdID0KewoJeyAweDQwMGEsIHsgMTA4MDAsIERGRl9Qcm9wX2FkanVzdFZhbHVlLCAwIH0gfSwKCXsgMHg0MDA5LCB7IDEwODAwLCBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMCB9IH0sCgl7IDB4MjAwMCwgeyAweDQwMCwgMTA4MDAsIDAgfSB9LAoJeyAweDIwMDAsIHsgMHg0MDEsIDEwODAwLCAwIH0gfSwKCXsgMHg4MDAwLCB7IDIxNjAwLCAwLCAweDQwMyB9IH0sCgl7IDB4ODAwMCwgeyAxMDgwMCwgMCwgREZGX1Byb3BfYWRqdXN0MlZhbHVlIH0gfSwKCXsgMHg2MDBhLCB7IDB4NDA1LCBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMCB9IH0sCS8vIDYKCXsgMHg2MDA5LCB7IDB4NDA1LCBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMCB9IH0sCgl7IDB4MjAwMCwgeyAweDQwNiwgMTA4MDAsIDAgfSB9LAkJCQkvLyA4Cgl7IDB4MjAwMCwgeyAweDQwNywgMTA4MDAsIDAgfSB9LAoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIDB4NDA5IH0gfSwJCQkJLy8gMTAKCXsgMHg4MDAwLCB7IDIxNjAwLCAwLCAweDQwNSB9IH0sCgl7IDB4MDAwLCB7IDIxNjAwLCAwLCAwIH0gfQp9OwpzdGF0aWMgY29uc3Qgc2FsX3VJbnQxNiBtc29fc3B0VGV4dENpcmNsZVBvdXJTZWdtW10gPQp7CgkweEE1MDQsIDB4ODAwMCwgMHhBNTA0LCAweDgwMDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmSGFuZGxlIG1zb19zcHRUZXh0Q2lyY2xlUG91ckhhbmRsZVtdID0KewoJewlNU0RGRl9IQU5ETEVfRkxBR1NfUE9MQVIgfCBNU0RGRl9IQU5ETEVfRkxBR1NfUkFESVVTX1JBTkdFLAoJCTB4MTAxLCAweDEwMCwgMTA4MDAsIDEwODAwLCAwLCAxMDgwMCwgTXg4MDAwMDAwMCwgMHg3ZmZmZmZmZiB9Cn07CnN0YXRpYyBjb25zdCBzYWxfSW50MzIgbXNvX3NwdFRleHRDaXJjbGVQb3VyRGVmYXVsdFtdID0KewoJMiwgIC0xNzksIDU0MDAKfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29UZXh0Q2lyY2xlUG91ciA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0VGV4dENpcmNsZVBvdXJWZXJ0LCBzaXplb2YoIG1zb19zcHRUZXh0Q2lyY2xlUG91clZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKHNhbF91SW50MTYqKW1zb19zcHRUZXh0Q2lyY2xlUG91clNlZ20sIHNpemVvZiggbXNvX3NwdFRleHRDaXJjbGVQb3VyU2VnbSApID4+IDEsCgkoU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEqKW1zb19zcHRUZXh0Q2lyY2xlUG91ckNhbGMsIHNpemVvZiggbXNvX3NwdFRleHRDaXJjbGVQb3VyQ2FsYyApIC8gc2l6ZW9mKCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSApLAoJKHNhbF9JbnQzMiopbXNvX3NwdFRleHRDaXJjbGVQb3VyRGVmYXVsdCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0Rm9udFdvcmtUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0Rm9udFdvcmtUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJTlVMTCwgMCwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdFRleHRDaXJjbGVQb3VySGFuZGxlLCBzaXplb2YoIG1zb19zcHRUZXh0Q2lyY2xlUG91ckhhbmRsZSApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0VGV4dEJ1dHRvblBvdXJWZXJ0W10gPQp7Cgl7IDAsIDAgfSwgeyAyMTYwMCwgMjE2MDAgfSwgeyAyIE1TT19JLCAzIE1TT19JIH0sIHsgNCBNU09fSSwgMyBNU09fSSB9LAoJeyA2IE1TT19JLCA2IE1TT19JIH0sIHsgNyBNU09fSSwgNyBNU09fSSB9LCB7IDEwIE1TT19JLCAxMSBNU09fSSB9LCB7IDEyIE1TT19JLCAxMSBNU09fSSB9LAoJeyAweDE2IE1TT19JLCAxNiBNU09fSSB9LCB7IDB4MTUgTVNPX0ksIDE2IE1TT19JIH0sCgl7IDB4MTYgTVNPX0ksIDE1IE1TT19JIH0sIHsgMHgxNSBNU09fSSwgMTUgTVNPX0kgfSwKCXsgNiBNU09fSSwgNiBNU09fSSB9LCB7IDcgTVNPX0ksIDcgTVNPX0kgfSwgeyAxMCBNU09fSSwgMTMgTVNPX0kgfSwgeyAxMiBNU09fSSwgMTMgTVNPX0kgfSwKCXsgMCwgMCB9LCB7IDIxNjAwLCAyMTYwMCB9LCB7IDIgTVNPX0ksIDUgTVNPX0kgfSwgeyA0IE1TT19JLCA1IE1TT19JIH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhIG1zb19zcHRUZXh0QnV0dG9uUG91ckNhbGNbXSA9CnsKCXsgMHg0MDBhLCB7IDEwODAwLCBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMCB9IH0sCQkJCQkvLyAweDAwCgl7IDB4NDAwOSwgeyAxMDgwMCwgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAgfSB9LAkJCQkJLy8gMHgwMQoJeyAweDIwMDAsIHsgMHg0MDAsIDEwODAwLCAwIH0gfSwJCQkJCQkJCS8vIDB4MDIKCXsgMHgyMDAwLCB7IDB4NDAxLCAxMDgwMCwgMCB9IH0sCQkJCQkJCQkvLyAweDAzCgl7IDB4ODAwMCwgeyAyMTYwMCwgMCwgMHg0MDIgfSB9LAkJCQkJCQkJLy8gMHgwNAoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIDB4NDAzIH0gfSwJCQkJCQkJCS8vIDB4MDUKCgl7IDB4ODAwMCwgeyAxMDgwMCwgMCwgREZGX1Byb3BfYWRqdXN0MlZhbHVlIH0gfSwJCQkJLy8gMHgwNgoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIDB4NDA2IH0gfSwJCQkJCQkJCS8vIDB4MDcKCgl7IDB4NjAwYSwgeyBERkZfUHJvcF9hZGp1c3QyVmFsdWUsIERGRl9Qcm9wX2FkanVzdFZhbHVlLCAwIH0gfSwJLy8gMHgwOAoJeyAweDYwMDksIHsgREZGX1Byb3BfYWRqdXN0MlZhbHVlLCBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMCB9IH0sCS8vIDB4MDkKCXsgMHgyMDAwLCB7IDB4NDA4LCAxMDgwMCwgMCB9IH0sCS8vIDB4MGEKCXsgMHgyMDAwLCB7IDB4NDA5LCAxMDgwMCwgMCB9IH0sCS8vIDB4MGIKCXsgMHg4MDAwLCB7IDIxNjAwLCAwLCAweDQwYSB9IH0sCS8vIDB4MGMKCXsgMHg4MDAwLCB7IDIxNjAwLCAwLCAweDQwYiB9IH0sCS8vIDB4MGQKCXsgMHgyMDAxLCB7IDB4NDA2LCAxLCAyIH0gfSwJCS8vIDB4MGUKCXsgMHg0MDAwLCB7IDEwODAwLCAweDQwZSwgMCB9IH0sCS8vIDB4MGYKCXsgMHg4MDAwLCB7IDEwODAwLCAwLCAweDQwZSB9IH0sCS8vIDB4MTAKCXsgMHg2MDAxLCB7IDB4NDBlLCAweDQwZSwgMSB9IH0sCS8vIDB4MTEKCXsgMHg2MDAxLCB7IERGRl9Qcm9wX2FkanVzdDJWYWx1ZSwgREZGX1Byb3BfYWRqdXN0MlZhbHVlLCAxIH0gfSwJLy8gMHgxMgoJeyAweEEwMDAsIHsgMHg0MTIsIDAsIDB4NDExIH0gfSwJLy8gMHgxMwoJeyAweDIwMGQsIHsgMHg0MTMsIDAsIDAgfSB9LAkJLy8gMHgxNAoJeyAweDQwMDAsIHsgMTA4MDAsIDB4NDE0LCAwIH0gfSwJLy8gMHgxNQoJeyAweDgwMDAsIHsgMTA4MDAsIDAsIDB4NDE0IH0gfQkJLy8gMHgxNgp9OwpzdGF0aWMgY29uc3Qgc2FsX3VJbnQxNiBtc29fc3B0VGV4dEJ1dHRvblBvdXJTZWdtW10gPQp7CgkweEE1MDQsIDB4ODAwMCwJCS8vIGNsb2Nrd2lzZSBhcmMKCTB4QTUwNCwgMHg4MDAwLAkJLy8gY2xvY2t3aXNlIGFyYwoJMHg0MDAwLCAweDAwMDEsIDB4ODAwMCwKCTB4NDAwMCwgMHgwMDAxLCAweDgwMDAsCgkweEEzMDQsIDB4ODAwMCwJCS8vIGNvdW50ZXIgY2xvY2t3aXNlCgkweEEzMDQsIDB4ODAwMAkJLy8gY291bnRlciBjbG9ja3dpc2UKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmSGFuZGxlIG1zb19zcHRUZXh0QnV0dG9uUG91ckhhbmRsZVtdID0KewoJewlNU0RGRl9IQU5ETEVfRkxBR1NfUE9MQVIgfCBNU0RGRl9IQU5ETEVfRkxBR1NfUkFESVVTX1JBTkdFLAoJCTB4MTAxLCAweDEwMCwgMTA4MDAsIDEwODAwLCA0MzIwLCAxMDgwMCwgTXg4MDAwMDAwMCwgMHg3ZmZmZmZmZiB9Cn07CnN0YXRpYyBjb25zdCBzYWxfSW50MzIgbXNvX3NwdFRleHRCdXR0b25Qb3VyRGVmYXVsdFtdID0KewoJMiwgMTgwLCA1NDAwCn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvVGV4dEJ1dHRvblBvdXIgPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdFRleHRCdXR0b25Qb3VyVmVydCwgc2l6ZW9mKCBtc29fc3B0VGV4dEJ1dHRvblBvdXJWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0VGV4dEJ1dHRvblBvdXJTZWdtLCBzaXplb2YoIG1zb19zcHRUZXh0QnV0dG9uUG91clNlZ20gKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0VGV4dEJ1dHRvblBvdXJDYWxjLCBzaXplb2YoIG1zb19zcHRUZXh0QnV0dG9uUG91ckNhbGMgKSAvIHNpemVvZiggU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgKSwKCShzYWxfSW50MzIqKW1zb19zcHRUZXh0QnV0dG9uUG91ckRlZmF1bHQsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdEZvbnRXb3JrVGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdEZvbnRXb3JrVGV4dFJlY3QgKSAvIHNpemVvZiggU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyApLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCU5VTEwsIDAsCgkoU3Z4TVNEZmZIYW5kbGUqKW1zb19zcHRUZXh0QnV0dG9uUG91ckhhbmRsZSwgc2l6ZW9mKCBtc29fc3B0VGV4dEJ1dHRvblBvdXJIYW5kbGUgKSAvIHNpemVvZiggU3Z4TVNEZmZIYW5kbGUgKQp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdFRleHRDdXJ2ZVVwVmVydFtdID0KewoJeyAwLCAwIE1TT19JIH0sIHsgNDkwMCwgMSBNU09fSSAvKjEyMTcwLT4wIDE0MjUwIC0+MCovIH0sIHsgMTE2NDAsIDIgTVNPX0kgLyoxMjE3MC0+MCAxMjgwMCAtPjAqLyB9LCB7IDIxNjAwLCAwIH0sCgl7IDAsIDQgTVNPX0kgLyoxMjE3MC0+MCAxNzIyMCAtPjIxNjAwKi8gfSwgeyAzNzAwLCAyMTYwMCB9LCB7IDg1MDAsIDIxNjAwIH0sIHsgMTAxMDAsIDIxNjAwIH0sIHsgMTQxMTAsIDIxNjAwIH0sIHsgMTU5MTAsIDIxNjAwIH0sIHsgMjE2MDAsIDQgTVNPX0kgLyoxMjE3MC0+MCAxNzIyMCAtPjIxNjAwKi8gfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgbXNvX3NwdFRleHRDdXJ2ZVVwQ2FsY1tdID0KewoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAsIDAgfSB9LAkvLyA0MDAKCXsgMHg0MDAxLCB7IDE0MjUwLCAweDQwMCwgMTIxNzAgfSB9LAkJLy8gNDAxCgl7IDB4NDAwMSwgeyAxMjgwMCwgMHg0MDAsIDEyMTcwIH0gfSwJCS8vIDQwMgoJeyAweDQwMDEsIHsgNjM4MCwgMHg0MDAsIDEyMTcwIH0gfSwJCQkvLyA0MDMKCXsgMHg4MDAwLCB7IDIxNjAwLCAwLCAweDQwMyB9IH0JCQkJLy8gNDA0Cn07CnN0YXRpYyBjb25zdCBzYWxfdUludDE2IG1zb19zcHRUZXh0Q3VydmVVcFNlZ21bXSA9CnsKCTB4NDAwMCwgMHgyMDAxLCAweDgwMDAsCgkweDQwMDAsIDB4MjAwMiwgMHg4MDAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkhhbmRsZSBtc29fc3B0VGV4dEN1cnZlVXBIYW5kbGVbXSA9CnsKCXsJTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFLAoJCTAsIDB4MTAwLCAxMDgwMCwgMTA4MDAsIE14ODAwMDAwMDAsIDB4N2ZmZmZmZmYsIDAsIDEyMTcwIH0KfTsKc3RhdGljIGNvbnN0IHNhbF9JbnQzMiBtc29fc3B0VGV4dEN1cnZlVXBEZWZhdWx0W10gPQp7CgkxLCA5OTAwCn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvVGV4dEN1cnZlVXAgPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdFRleHRDdXJ2ZVVwVmVydCwgc2l6ZW9mKCBtc29fc3B0VGV4dEN1cnZlVXBWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0VGV4dEN1cnZlVXBTZWdtLCBzaXplb2YoIG1zb19zcHRUZXh0Q3VydmVVcFNlZ20gKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0VGV4dEN1cnZlVXBDYWxjLCBzaXplb2YoIG1zb19zcHRUZXh0Q3VydmVVcENhbGMgKSAvIHNpemVvZiggU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgKSwKCShzYWxfSW50MzIqKW1zb19zcHRUZXh0Q3VydmVVcERlZmF1bHQsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdEZvbnRXb3JrVGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdEZvbnRXb3JrVGV4dFJlY3QgKSAvIHNpemVvZiggU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyApLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCU5VTEwsIDAsCgkoU3Z4TVNEZmZIYW5kbGUqKW1zb19zcHRUZXh0Q3VydmVVcEhhbmRsZSwgc2l6ZW9mKCBtc29fc3B0VGV4dEN1cnZlVXBIYW5kbGUgKSAvIHNpemVvZiggU3Z4TVNEZmZIYW5kbGUgKQp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdFRleHRDdXJ2ZURvd25WZXJ0W10gPQp7Ci8vCXsgMCwgMCBNU09fSSB9LCB7IDQ5MDAsIDEgTVNPX0kgLyoxMjE3MC0+MCAxNDI1MCAtPjAqLyB9LCB7IDExNjQwLCAyIE1TT19JIC8qMTIxNzAtPjAgMTI4MDAgLT4wKi8gfSwgeyAyMTYwMCwgMCB9LAoJeyAwLCAwIH0sIHsgOTk2MCwgMiBNU09fSSB9LCB7IDE2NzAwLCAxIE1TT19JIH0sIHsgMjE2MDAsIDAgTVNPX0kgfSwKCi8vCXsgMCwgNCBNU09fSSAvKjEyMTcwLT4wIDE3MjIwIC0+MjE2MDAqLyB9LCB7IDM3MDAsIDIxNjAwIH0sIHsgODUwMCwgMjE2MDAgfSwgeyAxMDEwMCwgMjE2MDAgfSwgeyAxNDExMCwgMjE2MDAgfSwgeyAxNTkxMCwgMjE2MDAgfSwgeyAyMTYwMCwgNCBNU09fSSAvKjEyMTcwLT4wIDE3MjIwIC0+MjE2MDAqLyB9Cgl7IDAsIDQgTVNPX0kgfSwgeyA1NjkwLCAyMTYwMCB9LCB7IDc0OTAsIDIxNjAwIH0sIHsgMTE1MDAsIDIxNjAwIH0sIHsgMTMxMDAsIDIxNjAwIH0sIHsgMTc5MDAsIDIxNjAwIH0sIHsgMjE2MDAsIDQgTVNPX0kgfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZIYW5kbGUgbXNvX3NwdFRleHRDdXJ2ZURvd25IYW5kbGVbXSA9CnsKCXsJTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFLAoJCTIxNjAwLCAweDEwMCwgMTA4MDAsIDEwODAwLCBNeDgwMDAwMDAwLCAweDdmZmZmZmZmLCAwLCAxMjE3MCB9Cn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvVGV4dEN1cnZlRG93biA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0VGV4dEN1cnZlRG93blZlcnQsIHNpemVvZiggbXNvX3NwdFRleHRDdXJ2ZURvd25WZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0VGV4dEN1cnZlVXBTZWdtLCBzaXplb2YoIG1zb19zcHRUZXh0Q3VydmVVcFNlZ20gKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0VGV4dEN1cnZlVXBDYWxjLCBzaXplb2YoIG1zb19zcHRUZXh0Q3VydmVVcENhbGMgKSAvIHNpemVvZiggU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgKSwKCShzYWxfSW50MzIqKW1zb19zcHRUZXh0Q3VydmVVcERlZmF1bHQsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdEZvbnRXb3JrVGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdEZvbnRXb3JrVGV4dFJlY3QgKSAvIHNpemVvZiggU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyApLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCU5VTEwsIDAsCgkoU3Z4TVNEZmZIYW5kbGUqKW1zb19zcHRUZXh0Q3VydmVEb3duSGFuZGxlLCBzaXplb2YoIG1zb19zcHRUZXh0Q3VydmVEb3duSGFuZGxlICkgLyBzaXplb2YoIFN2eE1TRGZmSGFuZGxlICkKfTsKCnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRUZXh0Q2FuVXBWZXJ0W10gPQp7Cgl7IDAsIDEgTVNPX0kgfSwgeyA5MDAsIDAgfSwgeyA3MTAwLCAwIH0sIHsgMTA4MDAsIDAgfSwgeyAxNDUwMCwgMCB9LCB7IDIwNzAwLCAwIH0sIHsgMjE2MDAsIDEgTVNPX0kgfSwKCXsgMCwgMjE2MDAgfSwgeyA5MDAsIDQgTVNPX0kgfSwgeyA3MTAwLCAwIE1TT19JIH0sIHsgMTA4MDAsIDAgTVNPX0kgfSwgeyAxNDUwMCwgMCBNU09fSSB9LCB7IDIwNzAwLCA0IE1TT19JIH0sIHsgMjE2MDAsIDIxNjAwIH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhIG1zb19zcHRUZXh0Q2FuVXBDYWxjW10gPQp7Cgl7IDB4MjAwMCwgeyBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMCwgMCB9IH0sCQkvLyA0MDAKCXsgMHg4MDAwLCB7IDIxNjAwLCAwLCBERkZfUHJvcF9hZGp1c3RWYWx1ZSB9IH0sCS8vIDQwMQoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAsIDE0NDAwIH0gfSwgLy8gNDAyCgl7IDB4NDAwMSwgeyA1NDcwLCAweDQwMiwgNzIwMCB9IH0sCQkJCS8vIDQwMwoJeyAweDQwMDAsIHsgMTYxMzAsIDB4NDAzLCAwIH0gfQkJCQkJLy8gNDA0Cn07CnN0YXRpYyBjb25zdCBzYWxfdUludDE2IG1zb19zcHRUZXh0Q2FuVXBTZWdtW10gPQp7CgkweDQwMDAsIDB4MjAwMiwgMHg4MDAwLAoJMHg0MDAwLCAweDIwMDIsIDB4ODAwMAp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZIYW5kbGUgbXNvX3NwdFRleHRDYW5VcEhhbmRsZVtdID0KewoJewlNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0UsCgkJMTA4MDAsIDB4MTAwLCAxMDgwMCwgMTA4MDAsIE14ODAwMDAwMDAsIDB4N2ZmZmZmZmYsIDE0NDAwLCAyMTYwMCB9Cn07CnN0YXRpYyBjb25zdCBzYWxfSW50MzIgbXNvX3NwdFRleHRDYW5VcERlZmF1bHRbXSA9CnsKCTEsIDE4NTAwCn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvVGV4dENhblVwID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRUZXh0Q2FuVXBWZXJ0LCBzaXplb2YoIG1zb19zcHRUZXh0Q2FuVXBWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0VGV4dENhblVwU2VnbSwgc2l6ZW9mKCBtc29fc3B0VGV4dENhblVwU2VnbSApID4+IDEsCgkoU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEqKW1zb19zcHRUZXh0Q2FuVXBDYWxjLCBzaXplb2YoIG1zb19zcHRUZXh0Q2FuVXBDYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0VGV4dENhblVwRGVmYXVsdCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0Rm9udFdvcmtUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0Rm9udFdvcmtUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJTlVMTCwgMCwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdFRleHRDYW5VcEhhbmRsZSwgc2l6ZW9mKCBtc29fc3B0VGV4dENhblVwSGFuZGxlICkgLyBzaXplb2YoIFN2eE1TRGZmSGFuZGxlICkKfTsKCnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRUZXh0Q2FuRG93blZlcnRbXSA9CnsKCXsgMCwgMCB9LCB7IDkwMCwgMiBNU09fSSB9LCB7IDcxMDAsIDAgTVNPX0kgfSwgeyAxMDgwMCwgMCBNU09fSSB9LCB7IDE0NTAwLCAwIE1TT19JIH0sIHsgMjA3MDAsIDIgTVNPX0kgfSwgeyAyMTYwMCwgMCB9LAoJeyAwLCAxIE1TT19JIH0sIHsgOTAwLCAyMTYwMCB9LCB7IDcxMDAsIDIxNjAwIH0sIHsgMTA4MDAsIDIxNjAwIH0sIHsgMTQ1MDAsIDIxNjAwIH0sIHsgMjA3MDAsIDIxNjAwIH0sIHsgMjE2MDAsIDEgTVNPX0kgfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgbXNvX3NwdFRleHRDYW5Eb3duQ2FsY1tdID0KewoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAsIDAgfSB9LAkJLy8gNDAwCgl7IDB4ODAwMCwgeyAyMTYwMCwgMCwgREZGX1Byb3BfYWRqdXN0VmFsdWUgfSB9LAkvLyA0MDEKCXsgMHg0MDAxLCB7IDU0NzAsIDB4NDAwLCA3MjAwIH0gfQkJCQkvLyA0MDIKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmSGFuZGxlIG1zb19zcHRUZXh0Q2FuRG93bkhhbmRsZVtdID0KewoJewlNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0UsCgkJMTA4MDAsIDB4MTAwLCAxMDgwMCwgMTA4MDAsIE14ODAwMDAwMDAsIDB4N2ZmZmZmZmYsIDAsIDcyMDAgfQp9OwpzdGF0aWMgY29uc3Qgc2FsX0ludDMyIG1zb19zcHRUZXh0Q2FuRG93bkRlZmF1bHRbXSA9CnsKCTEsIDMxMDAKfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29UZXh0Q2FuRG93biA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0VGV4dENhbkRvd25WZXJ0LCBzaXplb2YoIG1zb19zcHRUZXh0Q2FuRG93blZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKHNhbF91SW50MTYqKW1zb19zcHRUZXh0Q2FuVXBTZWdtLCBzaXplb2YoIG1zb19zcHRUZXh0Q2FuVXBTZWdtICkgPj4gMSwKCShTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSopbXNvX3NwdFRleHRDYW5Eb3duQ2FsYywgc2l6ZW9mKCBtc29fc3B0VGV4dENhbkRvd25DYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0VGV4dENhbkRvd25EZWZhdWx0LAoJKFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMqKW1zb19zcHRGb250V29ya1RleHRSZWN0LCBzaXplb2YoIG1zb19zcHRGb250V29ya1RleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTIxNjAwLCAyMTYwMCwKCU14ODAwMDAwMDAsIE14ODAwMDAwMDAsCglOVUxMLCAwLAoJKFN2eE1TRGZmSGFuZGxlKiltc29fc3B0VGV4dENhbkRvd25IYW5kbGUsIHNpemVvZiggbXNvX3NwdFRleHRDYW5Eb3duSGFuZGxlICkgLyBzaXplb2YoIFN2eE1TRGZmSGFuZGxlICkKfTsKCnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRUZXh0SW5mbGF0ZVZlcnRbXSA9CnsKCXsgMCwgMCBNU09fSSB9LCB7IDQxMDAsIDEgTVNPX0kgfSwgeyA3MzAwLCAwIH0sIHsgMTA4MDAsIDAgfSwgeyAxNDMwMCwgMCB9LCB7IDE3NTAwLCAxIE1TT19JIH0sIHsgMjE2MDAsIDAgTVNPX0kgfSwKCXsgMCwgMiBNU09fSSB9LCB7IDQxMDAsIDMgTVNPX0kgfSwgeyA3MzAwLCAyMTYwMCB9LCB7IDEwODAwLCAyMTYwMCB9LCB7IDE0MzAwLCAyMTYwMCB9LCB7IDE3NTAwLCAzIE1TT19JIH0sIHsgMjE2MDAsIDIgTVNPX0kgfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgbXNvX3NwdFRleHRJbmZsYXRlQ2FsY1tdID0KewoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAsIDAgfSB9LAkvLyA0MDAKCXsgMHg0MDAxLCB7IDE1MzAsIDB4NDAwLCA0NjUwIH0gfSwJCQkvLyA0MDEKCXsgMHg4MDAwLCB7IDIxNjAwLCAwLCAweDQwMCB9IH0sCQkJLy8gNDAyCgl7IDB4ODAwMCwgeyAyMTYwMCwgMCwgMHg0MDEgfSB9CQkJCS8vIDQwMwp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZIYW5kbGUgbXNvX3NwdFRleHRJbmZsYXRlSGFuZGxlW10gPQp7Cgl7CU1TREZGX0hBTkRMRV9GTEFHU19SQU5HRSwKCQkwLCAweDEwMCwgMTA4MDAsIDEwODAwLCBNeDgwMDAwMDAwLCAweDdmZmZmZmZmLCAwLCA0NjUwIH0KfTsKc3RhdGljIGNvbnN0IHNhbF9JbnQzMiBtc29fc3B0VGV4dEluZmxhdGVEZWZhdWx0W10gPQp7CgkxLCAyOTUwCn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvVGV4dEluZmxhdGUgPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdFRleHRJbmZsYXRlVmVydCwgc2l6ZW9mKCBtc29fc3B0VGV4dEluZmxhdGVWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0VGV4dENhblVwU2VnbSwgc2l6ZW9mKCBtc29fc3B0VGV4dENhblVwU2VnbSApID4+IDEsCgkoU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEqKW1zb19zcHRUZXh0SW5mbGF0ZUNhbGMsIHNpemVvZiggbXNvX3NwdFRleHRJbmZsYXRlQ2FsYyApIC8gc2l6ZW9mKCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSApLAoJKHNhbF9JbnQzMiopbXNvX3NwdFRleHRJbmZsYXRlRGVmYXVsdCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0Rm9udFdvcmtUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0Rm9udFdvcmtUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJTlVMTCwgMCwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdFRleHRJbmZsYXRlSGFuZGxlLCBzaXplb2YoIG1zb19zcHRUZXh0SW5mbGF0ZUhhbmRsZSApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0VGV4dERlZmxhdGVWZXJ0W10gPQp7Cgl7IDAsIDAgfSwgeyAzNTAwLCAxIE1TT19JIH0sIHsgNzEwMCwgMCBNU09fSSB9LCB7IDEwODAwLCAwIE1TT19JIH0sIHsgMTQ1MDAsIDAgTVNPX0kgfSwgeyAxODEwMCwgMSBNU09fSSB9LCB7IDIxNjAwLCAwIH0sCgl7IDAsIDIxNjAwIH0sIHsgMzUwMCwgMyBNU09fSSB9LCB7IDcxMDAsIDIgTVNPX0kgfSwgeyAxMDgwMCwgMiBNU09fSSB9LCB7IDE0NTAwLCAyIE1TT19JIH0sIHsgMTgxMDAsIDMgTVNPX0kgfSwgeyAyMTYwMCwgMjE2MDAgfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgbXNvX3NwdFRleHREZWZsYXRlQ2FsY1tdID0KewoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAsIDAgfSB9LAkvLyA0MDAKCXsgMHgyMDAxLCB7IDB4NDAwLCA1MzIwLCA3MTAwIH0gfSwJCQkvLyA0MDEKCXsgMHg4MDAwLCB7IDIxNjAwLCAwLCAweDQwMCB9IH0sCQkJLy8gNDAyCgl7IDB4ODAwMCwgeyAyMTYwMCwgMCwgMHg0MDEgfSB9CQkJCS8vIDQwMwp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZIYW5kbGUgbXNvX3NwdFRleHREZWZsYXRlSGFuZGxlW10gPQp7Cgl7CU1TREZGX0hBTkRMRV9GTEFHU19SQU5HRSwKCQkxMDgwMCwgMHgxMDAsIDEwODAwLCAxMDgwMCwgTXg4MDAwMDAwMCwgMHg3ZmZmZmZmZiwgMCwgODEwMCB9Cn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvVGV4dERlZmxhdGUgPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdFRleHREZWZsYXRlVmVydCwgc2l6ZW9mKCBtc29fc3B0VGV4dERlZmxhdGVWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0VGV4dENhblVwU2VnbSwgc2l6ZW9mKCBtc29fc3B0VGV4dENhblVwU2VnbSApID4+IDEsCgkoU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEqKW1zb19zcHRUZXh0RGVmbGF0ZUNhbGMsIHNpemVvZiggbXNvX3NwdFRleHREZWZsYXRlQ2FsYyApIC8gc2l6ZW9mKCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSApLAoJKHNhbF9JbnQzMiopbXNvX3NwdERlZmF1bHQ4MTAwLAoJKFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMqKW1zb19zcHRGb250V29ya1RleHRSZWN0LCBzaXplb2YoIG1zb19zcHRGb250V29ya1RleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTIxNjAwLCAyMTYwMCwKCU14ODAwMDAwMDAsIE14ODAwMDAwMDAsCglOVUxMLCAwLAoJKFN2eE1TRGZmSGFuZGxlKiltc29fc3B0VGV4dERlZmxhdGVIYW5kbGUsIHNpemVvZiggbXNvX3NwdFRleHREZWZsYXRlSGFuZGxlICkgLyBzaXplb2YoIFN2eE1TRGZmSGFuZGxlICkKfTsKCnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRUZXh0SW5mbGF0ZUJvdHRvbVZlcnRbXSA9CnsKCXsgMCwgMCB9LCB7IDIxNjAwLCAwIH0sCgl7IDAsIDAgTVNPX0kgfSwgeyAzNTAwLCAzIE1TT19JIH0sIHsgNzMwMCwgMjE2MDAgfSwgeyAxMDgwMCwgMjE2MDAgfSwgeyAxNDMwMCwgMjE2MDAgfSwgeyAxODEwMCwgMyBNU09fSSB9LCB7IDIxNjAwLCAwIE1TT19JIH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhIG1zb19zcHRUZXh0SW5mbGF0ZUJvdHRvbUNhbGNbXSA9CnsKCXsgMHgyMDAwLCB7IERGRl9Qcm9wX2FkanVzdFZhbHVlLCAwLCAwIH0gfSwJLy8gNDAwCgl7IDB4MjAwMCwgeyAweDQwMCwgMCwgMTExNTAgfSB9LAkJCS8vIDQwMSAwLT4xMDQ1MAoJeyAweDIwMDEsIHsgMHg0MDEsIDM5MDAsIDEwNDUwIH0gfSwJCQkvLyA0MDIKCXsgMHgyMDAwLCB7IDB4NDAyLCAxNzcwMCwgMCB9IH0JCQkJLy8gNDAzCn07CnN0YXRpYyBjb25zdCBzYWxfdUludDE2IG1zb19zcHRUZXh0SW5mbGF0ZUJvdHRvbVNlZ21bXSA9CnsKCTB4NDAwMCwgMHgwMDAxLCAweDgwMDAsCgkweDQwMDAsIDB4MjAwMiwgMHg4MDAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkhhbmRsZSBtc29fc3B0VGV4dEluZmxhdGVCb3R0b21IYW5kbGVbXSA9CnsKCXsJTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFLAoJCTAsIDB4MTAwLCAxMDgwMCwgMTA4MDAsIE14ODAwMDAwMDAsIDB4N2ZmZmZmZmYsIDExMTUwLCAyMTYwMCB9Cn07CnN0YXRpYyBjb25zdCBzYWxfSW50MzIgbXNvX3NwdFRleHRJbmZsYXRlQm90dG9tRGVmYXVsdFtdID0KewoJMSwgMTQ3MDAKfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29UZXh0SW5mbGF0ZUJvdHRvbSA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0VGV4dEluZmxhdGVCb3R0b21WZXJ0LCBzaXplb2YoIG1zb19zcHRUZXh0SW5mbGF0ZUJvdHRvbVZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKHNhbF91SW50MTYqKW1zb19zcHRUZXh0SW5mbGF0ZUJvdHRvbVNlZ20sIHNpemVvZiggbXNvX3NwdFRleHRJbmZsYXRlQm90dG9tU2VnbSApID4+IDEsCgkoU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEqKW1zb19zcHRUZXh0SW5mbGF0ZUJvdHRvbUNhbGMsIHNpemVvZiggbXNvX3NwdFRleHRJbmZsYXRlQm90dG9tQ2FsYyApIC8gc2l6ZW9mKCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSApLAoJKHNhbF9JbnQzMiopbXNvX3NwdFRleHRJbmZsYXRlQm90dG9tRGVmYXVsdCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0Rm9udFdvcmtUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0Rm9udFdvcmtUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJTlVMTCwgMCwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdFRleHRJbmZsYXRlQm90dG9tSGFuZGxlLCBzaXplb2YoIG1zb19zcHRUZXh0SW5mbGF0ZUJvdHRvbUhhbmRsZSApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0VGV4dERlZmxhdGVCb3R0b21WZXJ0W10gPQp7Cgl7IDAsIDAgfSwgeyAyMTYwMCwgMCB9LAoJeyAwLCAyMTYwMCB9LCB7IDI5MDAsIDMgTVNPX0kgfSwgeyA3MjAwLCAwIE1TT19JIH0sIHsgMTA4MDAsIDAgTVNPX0kgfSwgeyAxNDQwMCwgMCBNU09fSSB9LCB7IDE4NzAwLCAzIE1TT19JIH0sIHsgMjE2MDAsIDIxNjAwIH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhIG1zb19zcHRUZXh0RGVmbGF0ZUJvdHRvbUNhbGNbXSA9CnsKCXsgMHgyMDAwLCB7IERGRl9Qcm9wX2FkanVzdFZhbHVlLCAwLCAwIH0gfSwJLy8gNDAwCgl7IDB4MjAwMCwgeyAweDQwMCwgMCwgMTM1MCB9IH0sCQkJCS8vIDQwMSAwLT4yMDI1MAoJeyAweDIwMDEsIHsgMHg0MDEsIDEyMDcwLCAyMDI1MCB9IH0sCQkvLyA0MDIKCXsgMHgyMDAwLCB7IDB4NDAyLCA5NTMwLCAwIH0gfQkJCQkvLyA0MDMKfTsKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvX3NwdFRleHREZWZsYXRlQm90dG9tU2VnbVtdID0KewoJMHg0MDAwLCAweDAwMDEsIDB4ODAwMCwKCTB4NDAwMCwgMHgyMDAyLCAweDgwMDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmSGFuZGxlIG1zb19zcHRUZXh0RGVmbGF0ZUJvdHRvbUhhbmRsZVtdID0KewoJewlNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0UsCgkJMTA4MDAsIDB4MTAwLCAxMDgwMCwgMTA4MDAsIE14ODAwMDAwMDAsIDB4N2ZmZmZmZmYsIDEzNTAsIDIxNjAwIH0KfTsKc3RhdGljIGNvbnN0IHNhbF9JbnQzMiBtc29fc3B0VGV4dERlZmxhdGVCb3R0b21EZWZhdWx0W10gPQp7CgkxLCAxMTUwMAp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb1RleHREZWZsYXRlQm90dG9tID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRUZXh0RGVmbGF0ZUJvdHRvbVZlcnQsIHNpemVvZiggbXNvX3NwdFRleHREZWZsYXRlQm90dG9tVmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdFRleHREZWZsYXRlQm90dG9tU2VnbSwgc2l6ZW9mKCBtc29fc3B0VGV4dERlZmxhdGVCb3R0b21TZWdtICkgPj4gMSwKCShTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSopbXNvX3NwdFRleHREZWZsYXRlQm90dG9tQ2FsYywgc2l6ZW9mKCBtc29fc3B0VGV4dERlZmxhdGVCb3R0b21DYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0VGV4dERlZmxhdGVCb3R0b21EZWZhdWx0LAoJKFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMqKW1zb19zcHRGb250V29ya1RleHRSZWN0LCBzaXplb2YoIG1zb19zcHRGb250V29ya1RleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTIxNjAwLCAyMTYwMCwKCU14ODAwMDAwMDAsIE14ODAwMDAwMDAsCglOVUxMLCAwLAoJKFN2eE1TRGZmSGFuZGxlKiltc29fc3B0VGV4dERlZmxhdGVCb3R0b21IYW5kbGUsIHNpemVvZiggbXNvX3NwdFRleHREZWZsYXRlQm90dG9tSGFuZGxlICkgLyBzaXplb2YoIFN2eE1TRGZmSGFuZGxlICkKfTsKCnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRUZXh0SW5mbGF0ZVRvcFZlcnRbXSA9CnsKCXsgMCwgMCBNU09fSSB9LCB7IDM1MDAsIDEgTVNPX0kgfSwgeyA3MzAwLCAwIH0sIHsgMTA4MDAsIDAgfSwgeyAxNDMwMCwgMCB9LCB7IDE4MTAwLCAxIE1TT19JIH0sIHsgMjE2MDAsIDAgTVNPX0kgfSwKCXsgMCwgMjE2MDAgfSwgeyAyMTYwMCwgMjE2MDAgfQp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgbXNvX3NwdFRleHRJbmZsYXRlVG9wQ2FsY1tdID0KewoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAsIDAgfSB9LAkvLyA0MDAKCXsgMHgyMDAxLCB7IDB4NDAwLCAzOTAwLCAxMDQ1MCB9IH0JCQkvLyA0MDEKfTsKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvX3NwdFRleHRJbmZsYXRlVG9wU2VnbVtdID0KewoJMHg0MDAwLCAweDIwMDIsIDB4ODAwMCwKCTB4NDAwMCwgMHgwMDAxLCAweDgwMDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmSGFuZGxlIG1zb19zcHRUZXh0SW5mbGF0ZVRvcEhhbmRsZVtdID0KewoJewlNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0UsCgkJMCwgMHgxMDAsIDEwODAwLCAxMDgwMCwgTXg4MDAwMDAwMCwgMHg3ZmZmZmZmZiwgMCwgMTA0NTAgfQp9OwpzdGF0aWMgY29uc3Qgc2FsX0ludDMyIG1zb19zcHRUZXh0SW5mbGF0ZVRvcERlZmF1bHRbXSA9CnsKCTEsIDY5MDAKfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29UZXh0SW5mbGF0ZVRvcCA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0VGV4dEluZmxhdGVUb3BWZXJ0LCBzaXplb2YoIG1zb19zcHRUZXh0SW5mbGF0ZVRvcFZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKHNhbF91SW50MTYqKW1zb19zcHRUZXh0SW5mbGF0ZVRvcFNlZ20sIHNpemVvZiggbXNvX3NwdFRleHRJbmZsYXRlVG9wU2VnbSApID4+IDEsCgkoU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEqKW1zb19zcHRUZXh0SW5mbGF0ZVRvcENhbGMsIHNpemVvZiggbXNvX3NwdFRleHRJbmZsYXRlVG9wQ2FsYyApIC8gc2l6ZW9mKCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSApLAoJKHNhbF9JbnQzMiopbXNvX3NwdFRleHRJbmZsYXRlVG9wRGVmYXVsdCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0Rm9udFdvcmtUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0Rm9udFdvcmtUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJTlVMTCwgMCwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdFRleHRJbmZsYXRlVG9wSGFuZGxlLCBzaXplb2YoIG1zb19zcHRUZXh0SW5mbGF0ZVRvcEhhbmRsZSApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0VGV4dERlZmxhdGVUb3BWZXJ0W10gPQp7Cgl7IDAsIDAgfSwgeyAyOTAwLCAxIE1TT19JIH0sIHsgNzIwMCwgMCBNU09fSSB9LCB7IDEwODAwLCAwIE1TT19JIH0sIHsgMTQ0MDAsIDAgTVNPX0kgfSwgeyAxODcwMCwgMSBNU09fSSB9LCB7IDIxNjAwLCAwIH0sCgl7IDAsIDIxNjAwIH0sIHsgMjE2MDAsIDIxNjAwIH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhIG1zb19zcHRUZXh0RGVmbGF0ZVRvcENhbGNbXSA9CnsKCXsgMHgyMDAwLCB7IERGRl9Qcm9wX2FkanVzdFZhbHVlLCAwLCAwIH0gfSwJLy8gNDAwCgl7IDB4MjAwMSwgeyAweDQwMCwgMTIwNzAsIDIwMjUwIH0gfSAgICAgICAgIC8vIDQwMgp9OwpzdGF0aWMgY29uc3Qgc2FsX3VJbnQxNiBtc29fc3B0VGV4dERlZmxhdGVUb3BTZWdtW10gPQp7CgkweDQwMDAsIDB4MjAwMiwgMHg4MDAwLAoJMHg0MDAwLCAweDAwMDEsIDB4ODAwMAp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZIYW5kbGUgbXNvX3NwdFRleHREZWZsYXRlVG9wSGFuZGxlW10gPQp7Cgl7CU1TREZGX0hBTkRMRV9GTEFHU19SQU5HRSwKCQkxMDgwMCwgMHgxMDAsIDEwODAwLCAxMDgwMCwgTXg4MDAwMDAwMCwgMHg3ZmZmZmZmZiwgMCwgMjAyNTAgfQp9OwpzdGF0aWMgY29uc3Qgc2FsX0ludDMyIG1zb19zcHRUZXh0RGVmbGF0ZVRvcERlZmF1bHRbXSA9CnsKCTEsIDEwMTAwCn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvVGV4dERlZmxhdGVUb3AgPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdFRleHREZWZsYXRlVG9wVmVydCwgc2l6ZW9mKCBtc29fc3B0VGV4dERlZmxhdGVUb3BWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0VGV4dERlZmxhdGVUb3BTZWdtLCBzaXplb2YoIG1zb19zcHRUZXh0RGVmbGF0ZVRvcFNlZ20gKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0VGV4dERlZmxhdGVUb3BDYWxjLCBzaXplb2YoIG1zb19zcHRUZXh0RGVmbGF0ZVRvcENhbGMgKSAvIHNpemVvZiggU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgKSwKCShzYWxfSW50MzIqKW1zb19zcHRUZXh0RGVmbGF0ZVRvcERlZmF1bHQsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdEZvbnRXb3JrVGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdEZvbnRXb3JrVGV4dFJlY3QgKSAvIHNpemVvZiggU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyApLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCU5VTEwsIDAsCgkoU3Z4TVNEZmZIYW5kbGUqKW1zb19zcHRUZXh0RGVmbGF0ZVRvcEhhbmRsZSwgc2l6ZW9mKCBtc29fc3B0VGV4dERlZmxhdGVUb3BIYW5kbGUgKSAvIHNpemVvZiggU3Z4TVNEZmZIYW5kbGUgKQp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdFRleHREZWZsYXRlSW5mbGF0ZVZlcnRbXSA9CnsKCXsgMCwgMCB9LCB7IDIxNjAwLCAwIH0sCgl7IDAsIDEwMTAwIH0sIHsgMzMwMCwgMyBNU09fSSB9LCB7IDcxMDAsIDUgTVNPX0kgfSwgeyAxMDgwMCwgNSBNU09fSSB9LCB7IDE0NTAwLCA1IE1TT19JIH0sIHsgMTgzMDAsIDMgTVNPX0kgfSwgeyAyMTYwMCwgMTAxMDAgfSwKCXsgMCwgMTE1MDAgfSwgeyAzMzAwLCA0IE1TT19JIH0sIHsgNzEwMCwgNiBNU09fSSB9LCB7IDEwODAwLCA2IE1TT19JIH0sIHsgMTQ1MDAsIDYgTVNPX0kgfSwgeyAxODMwMCwgNCBNU09fSSB9LCB7IDIxNjAwLCAxMTUwMCB9LAoJeyAwLCAyMTYwMCB9LCB7IDIxNjAwLCAyMTYwMCB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSBtc29fc3B0VGV4dERlZmxhdGVJbmZsYXRlQ2FsY1tdID0KewoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAsIDAgfSB9LAkvLyA0MDAKCXsgMHg4MDAwLCB7IDEwODAwLCAwLCAweDQwMCB9IH0sCQkJLy8gNDAxCgl7IDB4MjAwMSwgeyAweDQwMSwgNTc3MCwgOTUwMCB9IH0sCQkJLy8gNDAyCgl7IDB4ODAwMCwgeyAxMDEwMCwgMCwgMHg0MDIgfSB9LAkJCS8vIDQwMwoJeyAweDgwMDAsIHsgMTE1MDAsIDAsIDB4NDAyIH0gfSwJCQkvLyA0MDQKCXsgMHgyMDAwLCB7IDB4NDAwLCAwLCA3MDAgfSB9LAkJCQkvLyA0MDUKCXsgMHgyMDAwLCB7IDB4NDAwLCA3MDAsIDAgfQl9ICAJCSAgICAJLy8gNDA2Cn07CnN0YXRpYyBjb25zdCBzYWxfdUludDE2IG1zb19zcHRUZXh0RGVmbGF0ZUluZmxhdGVTZWdtW10gPQp7CgkweDQwMDAsIDB4MDAwMSwgMHg4MDAwLAoJMHg0MDAwLCAweDIwMDIsIDB4ODAwMCwKCTB4NDAwMCwgMHgyMDAyLCAweDgwMDAsCgkweDQwMDAsIDB4MDAwMSwgMHg4MDAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkhhbmRsZSBtc29fc3B0VGV4dERlZmxhdGVJbmZsYXRlSGFuZGxlW10gPQp7Cgl7CU1TREZGX0hBTkRMRV9GTEFHU19SQU5HRSwKCQkxMDgwMCwgMHgxMDAsIDEwODAwLCAxMDgwMCwgTXg4MDAwMDAwMCwgMHg3ZmZmZmZmZiwgMTMwMCwgMjAzMDAgfQp9OwpzdGF0aWMgY29uc3Qgc2FsX0ludDMyIG1zb19zcHRUZXh0RGVmbGF0ZUluZmxhdGVEZWZhdWx0W10gPQp7CgkxLCA2NTAwCn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvVGV4dERlZmxhdGVJbmZsYXRlID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRUZXh0RGVmbGF0ZUluZmxhdGVWZXJ0LCBzaXplb2YoIG1zb19zcHRUZXh0RGVmbGF0ZUluZmxhdGVWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0VGV4dERlZmxhdGVJbmZsYXRlU2VnbSwgc2l6ZW9mKCBtc29fc3B0VGV4dERlZmxhdGVJbmZsYXRlU2VnbSApID4+IDEsCgkoU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEqKW1zb19zcHRUZXh0RGVmbGF0ZUluZmxhdGVDYWxjLCBzaXplb2YoIG1zb19zcHRUZXh0RGVmbGF0ZUluZmxhdGVDYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0VGV4dERlZmxhdGVJbmZsYXRlRGVmYXVsdCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0Rm9udFdvcmtUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0Rm9udFdvcmtUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJTlVMTCwgMCwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdFRleHREZWZsYXRlSW5mbGF0ZUhhbmRsZSwgc2l6ZW9mKCBtc29fc3B0VGV4dERlZmxhdGVJbmZsYXRlSGFuZGxlICkgLyBzaXplb2YoIFN2eE1TRGZmSGFuZGxlICkKfTsKCnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRUZXh0RGVmbGF0ZUluZmxhdGVEZWZsYXRlVmVydFtdID0KewoJeyAwLCAwIH0sIHsgMjE2MDAsIDAgfSwKCXsgMCwgNjYwMCB9LCB7IDM2MDAsIDMgTVNPX0kgfSwgeyA3MjUwLCA0IE1TT19JIH0sIHsgMTA4MDAsIDQgTVNPX0kgfSwgeyAxNDM1MCwgNCBNU09fSSB9LCB7IDE4MDAwLCAzIE1TT19JIH0sIHsgMjE2MDAsIDY2MDAgfSwKCXsgMCwgNzUwMCB9LCB7IDM2MDAsIDUgTVNPX0kgfSwgeyA3MjUwLCA2IE1TT19JIH0sIHsgMTA4MDAsIDYgTVNPX0kgfSwgeyAxNDM1MCwgNiBNU09fSSB9LCB7IDE4MDAwLCA1IE1TT19JIH0sIHsgMjE2MDAsIDc1MDAgfSwKCXsgMCwgMTQxMDAgfSwgeyAzNjAwLCA5IE1TT19JIH0sIHsgNzI1MCwgMTAgTVNPX0kgfSwgeyAxMDgwMCwgMTAgTVNPX0kgfSwgeyAxNDM1MCwgMTAgTVNPX0kgfSwgeyAxODAwMCwgOSBNU09fSSB9LCB7IDIxNjAwLCAxNDEwMCB9LAoJeyAwLCAxNTAwMCB9LCB7IDM2MDAsIDcgTVNPX0kgfSwgeyA3MjUwLCA4IE1TT19JIH0sIHsgMTA4MDAsIDggTVNPX0kgfSwgeyAxNDM1MCwgOCBNU09fSSB9LCB7IDE4MDAwLCA3IE1TT19JIH0sIHsgMjE2MDAsIDE1MDAwIH0sCgl7IDAsIDIxNjAwIH0sIHsgMjE2MDAsIDIxNjAwIH0KfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhIG1zb19zcHRUZXh0RGVmbGF0ZUluZmxhdGVEZWZsYXRlQ2FsY1tdID0KewoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAsIDg1MCB9IH0sCQkvLyA0MDAKCXsgMHgyMDAxLCB7IDB4NDAwLCA2MTIwLCA4NzAwIH0gfSwKCXsgMHgyMDAwLCB7IDB4NDAxLCAwLCA0MjgwIH0gfSwKCXsgMHg0MDAwLCB7IDY2MDAsIDB4NDAyLCAwIH0gfSwKCXsgMHgyMDAwLCB7IERGRl9Qcm9wX2FkanVzdFZhbHVlLCAwLCA0NTAgfSB9LAkJLy8gNDA0Cgl7IDB4MjAwMCwgeyAweDQwMywgOTAwLCAwIH0gfSwJCQkJCQkvLyA0MDUKCXsgMHgyMDAwLCB7IDB4NDA0LCA5MDAsIDAgfSB9LAkJCQkJCS8vIDQwNgoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIDB4NDAzIH0gfSwJCQkJCS8vIDQwNwoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIDB4NDA0IH0gfSwJCQkJCS8vIDQwOAoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIDB4NDA1IH0gfSwJCQkJCS8vIDQwOQoJeyAweDgwMDAsIHsgMjE2MDAsIDAsIDB4NDA2IH0gfQkJCQkJCS8vIDQxMAp9OwpzdGF0aWMgY29uc3Qgc2FsX3VJbnQxNiBtc29fc3B0VGV4dERlZmxhdGVJbmZsYXRlRGVmbGF0ZVNlZ21bXSA9CnsKCTB4NDAwMCwgMHgwMDAxLCAweDgwMDAsCgkweDQwMDAsIDB4MjAwMiwgMHg4MDAwLAoJMHg0MDAwLCAweDIwMDIsIDB4ODAwMCwKCTB4NDAwMCwgMHgyMDAyLCAweDgwMDAsCgkweDQwMDAsIDB4MjAwMiwgMHg4MDAwLAoJMHg0MDAwLCAweDAwMDEsIDB4ODAwMAp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZIYW5kbGUgbXNvX3NwdFRleHREZWZsYXRlSW5mbGF0ZURlZmxhdGVIYW5kbGVbXSA9CnsKCXsJTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFLAoJCTEwODAwLCAweDEwMCwgMTA4MDAsIDEwODAwLCBNeDgwMDAwMDAwLCAweDdmZmZmZmZmLCA4NTAsIDk1NTAgfQp9OwpzdGF0aWMgY29uc3Qgc2FsX0ludDMyIG1zb19zcHRUZXh0RGVmbGF0ZUluZmxhdGVEZWZsYXRlRGVmYXVsdFtdID0KewoJMSwgNjA1MAp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb1RleHREZWZsYXRlSW5mbGF0ZURlZmxhdGUgPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdFRleHREZWZsYXRlSW5mbGF0ZURlZmxhdGVWZXJ0LCBzaXplb2YoIG1zb19zcHRUZXh0RGVmbGF0ZUluZmxhdGVEZWZsYXRlVmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdFRleHREZWZsYXRlSW5mbGF0ZURlZmxhdGVTZWdtLCBzaXplb2YoIG1zb19zcHRUZXh0RGVmbGF0ZUluZmxhdGVEZWZsYXRlU2VnbSApID4+IDEsCgkoU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEqKW1zb19zcHRUZXh0RGVmbGF0ZUluZmxhdGVEZWZsYXRlQ2FsYywgc2l6ZW9mKCBtc29fc3B0VGV4dERlZmxhdGVJbmZsYXRlRGVmbGF0ZUNhbGMgKSAvIHNpemVvZiggU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgKSwKCShzYWxfSW50MzIqKW1zb19zcHRUZXh0RGVmbGF0ZUluZmxhdGVEZWZsYXRlRGVmYXVsdCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0Rm9udFdvcmtUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0Rm9udFdvcmtUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJTlVMTCwgMCwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdFRleHREZWZsYXRlSW5mbGF0ZURlZmxhdGVIYW5kbGUsIHNpemVvZiggbXNvX3NwdFRleHREZWZsYXRlSW5mbGF0ZURlZmxhdGVIYW5kbGUgKSAvIHNpemVvZiggU3Z4TVNEZmZIYW5kbGUgKQp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdFRleHRXYXZlMVZlcnRbXSA9CS8vIGFkanVzdG1lbnQxIDogMCAtIDQ0NTkKewkJCQkJCQkJCQkJCQkvLyBhZGp1c3RtZW50MiA6IDg2NDAgLSAxMjk2MAoJeyA3IE1TT19JLCAwIE1TT19JIH0sIHsgMTUgTVNPX0ksIDkgTVNPX0kgfSwgeyAxNiBNU09fSSwgMTAgTVNPX0kgfSwgeyAxMiBNU09fSSwgMCBNU09fSSB9LAoJeyAyOSBNU09fSSwgMSBNU09fSSB9LCB7IDI3IE1TT19JLCAyOCBNU09fSSB9LCB7IDI1IE1TT19JLCAyNiBNU09fSSB9LCB7IDI0IE1TT19JLCAxIE1TT19JIH0KfTsKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvX3NwdFRleHRXYXZlMVNlZ21bXSA9CnsKCTB4NDAwMCwgMHgyMDAxLCAweDgwMDAsCgkweDQwMDAsIDB4MjAwMSwgMHg4MDAwCn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvVGV4dFdhdmUxID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRUZXh0V2F2ZTFWZXJ0LCBzaXplb2YoIG1zb19zcHRUZXh0V2F2ZTFWZXJ0ICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0VGV4dFdhdmUxU2VnbSwgc2l6ZW9mKCBtc29fc3B0VGV4dFdhdmUxU2VnbSApID4+IDEsCgkoU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEqKW1zb19zcHRXYXZlQ2FsYywgc2l6ZW9mKCBtc29fc3B0V2F2ZUNhbGMgKSAvIHNpemVvZiggU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgKSwKCShzYWxfSW50MzIqKW1zb19zcHRXYXZlRGVmYXVsdCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0Rm9udFdvcmtUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0Rm9udFdvcmtUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRXYXZlR2x1ZVBvaW50cywgc2l6ZW9mKCBtc29fc3B0V2F2ZUdsdWVQb2ludHMgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKFN2eE1TRGZmSGFuZGxlKiltc29fc3B0V2F2ZUhhbmRsZSwgc2l6ZW9mKCBtc29fc3B0V2F2ZUhhbmRsZSApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0VGV4dFdhdmUyVmVydFtdID0JLy8gYWRqdXN0bWVudDEgOiAwIC0gNDQ1OQp7CQkJCQkJCQkJCQkJCS8vIGFkanVzdG1lbnQyIDogODY0MCAtIDEyOTYwCgl7IDcgTVNPX0ksIDAgTVNPX0kgfSwgeyAxNSBNU09fSSwgMTAgTVNPX0kgfSwgeyAxNiBNU09fSSwgOSBNU09fSSB9LCB7IDEyIE1TT19JLCAwIE1TT19JIH0sCgl7IDI5IE1TT19JLCAxIE1TT19JIH0sIHsgMjcgTVNPX0ksIDI2IE1TT19JIH0sIHsgMjUgTVNPX0ksIDI4IE1TT19JIH0sIHsgMjQgTVNPX0ksIDEgTVNPX0kgfQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb1RleHRXYXZlMiA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0VGV4dFdhdmUyVmVydCwgc2l6ZW9mKCBtc29fc3B0VGV4dFdhdmUyVmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdFRleHRXYXZlMVNlZ20sIHNpemVvZiggbXNvX3NwdFRleHRXYXZlMVNlZ20gKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0V2F2ZUNhbGMsIHNpemVvZiggbXNvX3NwdFdhdmVDYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0V2F2ZURlZmF1bHQsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdEZvbnRXb3JrVGV4dFJlY3QsIHNpemVvZiggbXNvX3NwdEZvbnRXb3JrVGV4dFJlY3QgKSAvIHNpemVvZiggU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyApLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0V2F2ZUdsdWVQb2ludHMsIHNpemVvZiggbXNvX3NwdFdhdmVHbHVlUG9pbnRzICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdFdhdmVIYW5kbGUsIHNpemVvZiggbXNvX3NwdFdhdmVIYW5kbGUgKSAvIHNpemVvZiggU3Z4TVNEZmZIYW5kbGUgKQp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdFRleHRXYXZlM1ZlcnRbXSA9CS8vIGFkanVzdG1lbnQxIDogMCAtIDIyMzAKewkJCQkJCQkJCQkJCQkJLy8gYWRqdXN0bWVudDIgOiA4NjQwIC0gMTI5NjAKCXsgNyBNU09fSSwgMCBNU09fSSB9LCB7IDE1IE1TT19JLCA5IE1TT19JIH0sIHsgMHgxZSBNU09fSSwgMTAgTVNPX0kgfSwgeyAweDEyIE1TT19JLCAwIE1TT19JIH0sIHsgMHgxZiBNU09fSSwgOSBNU09fSSB9LCB7IDE2IE1TT19JLCAxMCBNU09fSSB9LCB7IDEyIE1TT19JLCAwIE1TT19JIH0sCgl7IDI5IE1TT19JLCAxIE1TT19JIH0sIHsgMjcgTVNPX0ksIDI4IE1TT19JIH0sIHsgMHgyMCBNU09fSSwgMjYgTVNPX0kgfSwgeyAweDEzIE1TT19JLCAxIE1TT19JIH0sIHsgMHgyMSBNU09fSSwgMjggTVNPX0kgfSwgeyAyNSBNU09fSSwgMjYgTVNPX0kgfSwgeyAyNCBNU09fSSwgMSBNU09fSSB9Cn07CnN0YXRpYyBjb25zdCBzYWxfdUludDE2IG1zb19zcHRUZXh0V2F2ZTNTZWdtW10gPQp7CgkweDQwMDAsIDB4MjAwMiwgMHg4MDAwLAoJMHg0MDAwLCAweDIwMDIsIDB4ODAwMAp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb1RleHRXYXZlMyA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0VGV4dFdhdmUzVmVydCwgc2l6ZW9mKCBtc29fc3B0VGV4dFdhdmUzVmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdFRleHRXYXZlM1NlZ20sIHNpemVvZiggbXNvX3NwdFRleHRXYXZlM1NlZ20gKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0RG91YmxlV2F2ZUNhbGMsIHNpemVvZiggbXNvX3NwdERvdWJsZVdhdmVDYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0RG91YmxlV2F2ZURlZmF1bHQsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdERvdWJsZVdhdmVUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0RG91YmxlV2F2ZVRleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTIxNjAwLCAyMTYwMCwKCU14ODAwMDAwMDAsIE14ODAwMDAwMDAsCgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdERvdWJsZVdhdmVHbHVlUG9pbnRzLCBzaXplb2YoIG1zb19zcHREb3VibGVXYXZlR2x1ZVBvaW50cyApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoU3Z4TVNEZmZIYW5kbGUqKW1zb19zcHREb3VibGVXYXZlSGFuZGxlLCBzaXplb2YoIG1zb19zcHREb3VibGVXYXZlSGFuZGxlICkgLyBzaXplb2YoIFN2eE1TRGZmSGFuZGxlICkKfTsKCnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRUZXh0V2F2ZTRWZXJ0W10gPQkvLyBhZGp1c3RtZW50MSA6IDAgLSAyMjMwCnsJCQkJCQkJCQkJCQkJCS8vIGFkanVzdG1lbnQyIDogODY0MCAtIDEyOTYwCgl7IDcgTVNPX0ksIDAgTVNPX0kgfSwgeyAxNSBNU09fSSwgMTAgTVNPX0kgfSwgeyAweDFlIE1TT19JLCA5IE1TT19JIH0sIHsgMHgxMiBNU09fSSwgMCBNU09fSSB9LCB7IDB4MWYgTVNPX0ksIDEwIE1TT19JIH0sIHsgMTYgTVNPX0ksIDkgTVNPX0kgfSwgeyAxMiBNU09fSSwgMCBNU09fSSB9LAoJeyAyOSBNU09fSSwgMSBNU09fSSB9LCB7IDI3IE1TT19JLCAyNiBNU09fSSB9LCB7IDB4MjAgTVNPX0ksIDI4IE1TT19JIH0sIHsgMHgxMyBNU09fSSwgMSBNU09fSSB9LCB7IDB4MjEgTVNPX0ksIDI2IE1TT19JIH0sIHsgMjUgTVNPX0ksIDI4IE1TT19JIH0sIHsgMjQgTVNPX0ksIDEgTVNPX0kgfQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb1RleHRXYXZlNCA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0VGV4dFdhdmU0VmVydCwgc2l6ZW9mKCBtc29fc3B0VGV4dFdhdmU0VmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdFRleHRXYXZlM1NlZ20sIHNpemVvZiggbXNvX3NwdFRleHRXYXZlM1NlZ20gKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0RG91YmxlV2F2ZUNhbGMsIHNpemVvZiggbXNvX3NwdERvdWJsZVdhdmVDYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0RG91YmxlV2F2ZURlZmF1bHQsCgkoU3Z4TVNEZmZUZXh0UmVjdGFuZ2xlcyopbXNvX3NwdERvdWJsZVdhdmVUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0RG91YmxlV2F2ZVRleHRSZWN0ICkgLyBzaXplb2YoIFN2eE1TRGZmVGV4dFJlY3RhbmdsZXMgKSwKCTIxNjAwLCAyMTYwMCwKCU14ODAwMDAwMDAsIE14ODAwMDAwMDAsCgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdERvdWJsZVdhdmVHbHVlUG9pbnRzLCBzaXplb2YoIG1zb19zcHREb3VibGVXYXZlR2x1ZVBvaW50cyApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoU3Z4TVNEZmZIYW5kbGUqKW1zb19zcHREb3VibGVXYXZlSGFuZGxlLCBzaXplb2YoIG1zb19zcHREb3VibGVXYXZlSGFuZGxlICkgLyBzaXplb2YoIFN2eE1TRGZmSGFuZGxlICkKfTsKCnN0YXRpYyBjb25zdCBzYWxfSW50MzIgbXNvX3NwdENhbGxvdXREZWZhdWx0MVtdID0KewoJNCwgLTE4MDAsIDI0NTAwLCAtMTgwMCwgNDAwMAp9OwpzdGF0aWMgY29uc3Qgc2FsX0ludDMyIG1zb19zcHRDYWxsb3V0RGVmYXVsdDJbXSA9CnsKCTQsIC04MzAwLCAyNDUwMCwgLTE4MDAsIDQwMDAKfTsKc3RhdGljIGNvbnN0IHNhbF9JbnQzMiBtc29fc3B0Q2FsbG91dERlZmF1bHQzW10gPQp7Cgk2LCAtMTAwMDAsIDI0NTAwLCAtMzYwMCwgNDAwMCwgLTE4MDAsIDQwMDAKfTsKc3RhdGljIGNvbnN0IHNhbF9JbnQzMiBtc29fc3B0Q2FsbG91dERlZmF1bHQ0W10gPQp7Cgk4LCAyMzQwMCwgMjQ1MDAsIDI1MjAwLCAyMTYwMCwgMjUyMDAsIDQwMDAsIDIzNDAwLCA0MDAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRDYWxsb3V0VmVydDFbXSA9CnsKCXsgMCwgMCB9LCB7IDIxNjAwLCAwIH0sIHsgMjE2MDAsIDIxNjAwIH0sIHsgMCwgMjE2MDAgfSwgeyAwIE1TT19JLCAxIE1TT19JIH0sIHsgMiBNU09fSSwgMyBNU09fSSB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkhhbmRsZSBtc29fc3B0Q2FsbG91dEhhbmRsZTFbXSA9CnsKCXsJMCwKCQkweDEwMCwgMHgxMDEsIDEwODAwLCAxMDgwMCwgTXg4MDAwMDAwMCwgMHg3ZmZmZmZmZiwgTXg4MDAwMDAwMCwgMHg3ZmZmZmZmZiB9LAoJewkwLAoJCTB4MTAyLCAweDEwMywgMTA4MDAsIDEwODAwLCBNeDgwMDAwMDAwLCAweDdmZmZmZmZmLCBNeDgwMDAwMDAwLCAweDdmZmZmZmZmIH0KfTsKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvX3NwdENhbGxvdXRTZWdtMWFbXSA9CnsKCTB4NDAwMCwgMHgwMDAzLCAweDYwMDAsIDB4ODAwMCwKCTB4NDAwMCwgMHgwMDAxLCAweDgwMDAKfTsKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvX3NwdENhbGxvdXRTZWdtMWJbXSA9CnsKCTB4NDAwMCwgMHhhYjAwLCAweDAwMDMsIDB4NjAwMCwgMHg4MDAwLAkvLyBOTyBTVFJPS0UKCTB4NDAwMCwgMHgwMDAxLCAweDgwMDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdENhbGxvdXQxVmVydFtdID0KewoJeyAwLCAwIH0sIHsgMjE2MDAsIDAgfSwgeyAyMTYwMCwgMjE2MDAgfSwgeyAwLCAyMTYwMCB9LCB7IDAgTVNPX0ksIDEgTVNPX0kgfSwgeyAyIE1TT19JLCAzIE1TT19JIH0sIHsgMiBNU09fSSwgMCB9LCB7IDIgTVNPX0ksIDIxNjAwIH0KfTsKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvX3NwdENhbGxvdXQxU2VnbTFhW10gPQp7CgkweDQwMDAsIDB4MDAwMywgMHg2MDAwLCAweDgwMDAsCgkweDQwMDAsIDB4MDAwMSwgMHg4MDAwLAoJMHg0MDAwLCAweDAwMDEsIDB4ODAwMAp9OwpzdGF0aWMgY29uc3Qgc2FsX3VJbnQxNiBtc29fc3B0Q2FsbG91dDFTZWdtMWJbXSA9CnsKCTB4NDAwMCwgMHhhYjAwLCAweDAwMDMsIDB4NjAwMCwgMHg4MDAwLAkvLyBOTyBTVFJPS0UKCTB4NDAwMCwgMHgwMDAxLCAweDgwMDAsCgkweDQwMDAsIDB4MDAwMSwgMHg4MDAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRDYWxsb3V0MlZlcnRhW10gPQp7Cgl7IDAsIDAgfSwgeyAyMTYwMCwgMCB9LCB7IDIxNjAwLCAyMTYwMCB9LCB7IDAsIDIxNjAwIH0sIHsgMCBNU09fSSwgMSBNU09fSSB9LCB7IDIgTVNPX0ksIDMgTVNPX0kgfSwgeyAyIE1TT19JLCAzIE1TT19JIH0sIHsgNCBNU09fSSwgNSBNU09fSSB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRDYWxsb3V0MlZlcnRiW10gPQp7Cgl7IDAsIDAgfSwgeyAyMTYwMCwgMCB9LCB7IDIxNjAwLCAyMTYwMCB9LCB7IDAsIDIxNjAwIH0sIHsgMCBNU09fSSwgMSBNU09fSSB9LCB7IDIgTVNPX0ksIDMgTVNPX0kgfSwgeyAyIE1TT19JLCAzIE1TT19JIH0sIHsgNCBNU09fSSwgNSBNU09fSSB9LCB7IDQgTVNPX0ksIDAgfSwgeyA0IE1TT19JLCAyMTYwMCB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkhhbmRsZSBtc29fc3B0Q2FsbG91dEhhbmRsZTJbXSA9CnsKCXsJMCwKCQkweDEwMCwgMHgxMDEsIDEwODAwLCAxMDgwMCwgTXg4MDAwMDAwMCwgMHg3ZmZmZmZmZiwgTXg4MDAwMDAwMCwgMHg3ZmZmZmZmZiB9LAoJewkwLAoJCTB4MTAyLCAweDEwMywgMTA4MDAsIDEwODAwLCBNeDgwMDAwMDAwLCAweDdmZmZmZmZmLCBNeDgwMDAwMDAwLCAweDdmZmZmZmZmIH0sCgl7CTAsCgkJMHgxMDQsIDB4MTA1LCAxMDgwMCwgMTA4MDAsIE14ODAwMDAwMDAsIDB4N2ZmZmZmZmYsIE14ODAwMDAwMDAsIDB4N2ZmZmZmZmYgfQp9OwpzdGF0aWMgY29uc3Qgc2FsX3VJbnQxNiBtc29fc3B0Q2FsbG91dDJTZWdtMWFbXSA9CnsKCTB4NDAwMCwgMHgwMDAzLCAweDYwMDAsIDB4ODAwMCwKCTB4NDAwMCwgMHgwMDAxLCAweDgwMDAsCgkweDQwMDAsIDB4MDAwMSwgMHg4MDAwLAoJMHg0MDAwLCAweDAwMDEsIDB4ODAwMAp9OwpzdGF0aWMgY29uc3Qgc2FsX3VJbnQxNiBtc29fc3B0Q2FsbG91dDJTZWdtMWJbXSA9CnsKCTB4NDAwMCwgMHhhYjAwLCAweDAwMDMsIDB4NjAwMCwgMHg4MDAwLAkvLyBOTyBTVFJPS0UKCTB4NDAwMCwgMHgwMDAxLCAweDgwMDAsCgkweDQwMDAsIDB4MDAwMSwgMHg4MDAwLAoJMHg0MDAwLCAweDAwMDEsIDB4ODAwMAp9OwpzdGF0aWMgY29uc3Qgc2FsX3VJbnQxNiBtc29fc3B0Q2FsbG91dDJTZWdtMWNbXSA9CnsKCTB4NDAwMCwgMHgwMDAzLCAweDYwMDAsIDB4ODAwMCwKCTB4NDAwMCwgMHgwMDAxLCAweDgwMDAsCgkweDQwMDAsIDB4MDAwMSwgMHg4MDAwLAoJMHg0MDAwLCAweDAwMDEsIDB4ODAwMCwKCTB4NDAwMCwgMHgwMDAxLCAweDgwMDAKfTsKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvX3NwdENhbGxvdXQyU2VnbTFkW10gPQp7CgkweDQwMDAsIDB4YWIwMCwgMHgwMDAzLCAweDYwMDAsIDB4ODAwMCwJLy8gTk8gU1RST0tFCgkweDQwMDAsIDB4MDAwMSwgMHg4MDAwLAoJMHg0MDAwLCAweDAwMDEsIDB4ODAwMCwKCTB4NDAwMCwgMHgwMDAxLCAweDgwMDAsCgkweDQwMDAsIDB4MDAwMSwgMHg4MDAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRDYWxsb3V0M1ZlcnRhW10gPQp7Cgl7IDAsIDAgfSwgeyAyMTYwMCwgMCB9LCB7IDIxNjAwLCAyMTYwMCB9LCB7IDAsIDIxNjAwIH0sIHsgNiBNU09fSSwgNyBNU09fSSB9LCB7IDQgTVNPX0ksIDUgTVNPX0kgfSwgeyAyIE1TT19JLCAzIE1TT19JIH0sIHsgMCBNU09fSSwgMSBNU09fSSB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRDYWxsb3V0M1ZlcnRiW10gPQp7Cgl7IDAsIDAgfSwgeyAyMTYwMCwgMCB9LCB7IDIxNjAwLCAyMTYwMCB9LCB7IDAsIDIxNjAwIH0sIHsgNiBNU09fSSwgNyBNU09fSSB9LCB7IDQgTVNPX0ksIDUgTVNPX0kgfSwgeyAyIE1TT19JLCAzIE1TT19JIH0sIHsgMCBNU09fSSwgMSBNU09fSSB9LCB7IDYgTVNPX0ksIDAgfSwgeyA2IE1TT19JLCAyMTYwMCB9Cn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkhhbmRsZSBtc29fc3B0Q2FsbG91dEhhbmRsZTNbXSA9CnsKCXsJMCwKCQkweDEwMCwgMHgxMDEsIDEwODAwLCAxMDgwMCwgTXg4MDAwMDAwMCwgMHg3ZmZmZmZmZiwgTXg4MDAwMDAwMCwgMHg3ZmZmZmZmZiB9LAoJewkwLAoJCTB4MTAyLCAweDEwMywgMTA4MDAsIDEwODAwLCBNeDgwMDAwMDAwLCAweDdmZmZmZmZmLCBNeDgwMDAwMDAwLCAweDdmZmZmZmZmIH0sCgl7CTAsCgkJMHgxMDQsIDB4MTA1LCAxMDgwMCwgMTA4MDAsIE14ODAwMDAwMDAsIDB4N2ZmZmZmZmYsIE14ODAwMDAwMDAsIDB4N2ZmZmZmZmYgfSwKCXsJMCwKCQkweDEwNiwgMHgxMDcsIDEwODAwLCAxMDgwMCwgTXg4MDAwMDAwMCwgMHg3ZmZmZmZmZiwgTXg4MDAwMDAwMCwgMHg3ZmZmZmZmZiB9Cn07CnN0YXRpYyBjb25zdCBzYWxfdUludDE2IG1zb19zcHRDYWxsb3V0M1NlZ20xYVtdID0KewoJMHg0MDAwLCAweDAwMDMsIDB4NjAwMCwgMHg4MDAwLAoJMHg0MDAwLCAweGFhMDAsIDB4MDAwMywgMHg4MDAwCQkJLy8gTk9fRklMTAp9OwpzdGF0aWMgY29uc3Qgc2FsX3VJbnQxNiBtc29fc3B0Q2FsbG91dDNTZWdtMWJbXSA9CnsKCTB4NDAwMCwgMHhhYjAwLCAweDAwMDMsIDB4NjAwMCwgMHg4MDAwLAkvLyBOTyBTVFJPS0UKCTB4NDAwMCwgMHhhYTAwLCAweDAwMDMsIDB4ODAwMAkJCS8vIE5PIEZJTEwKfTsKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvX3NwdENhbGxvdXQzU2VnbTFjW10gPQp7CgkweDQwMDAsIDB4MDAwMywgMHg2MDAwLCAweDgwMDAsCgkweDQwMDAsIDB4YWEwMCwgMHgwMDAzLCAweDgwMDAsCQkJLy8gTk8gRklMTAoJMHg0MDAwLCAweDAwMDEsIDB4ODAwMAp9OwpzdGF0aWMgY29uc3Qgc2FsX3VJbnQxNiBtc29fc3B0Q2FsbG91dDNTZWdtMWRbXSA9CnsKCTB4NDAwMCwgMHhhYjAwLCAweDAwMDMsIDB4NjAwMCwgMHg4MDAwLAkvLyBOTyBTVFJPS0UKCTB4NDAwMCwgMHhhYTAwLCAweDAwMDMsIDB4ODAwMCwJCQkvLyBOTyBGSUxMCgkweDQwMDAsIDB4MDAwMSwgMHg4MDAwCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgbXNvX3NwdENhbGxvdXRDYWxjW10gPQp7Cgl7IDB4MjAwMCwgeyBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMCwgMCB9IH0sCgl7IDB4MjAwMCwgeyBERkZfUHJvcF9hZGp1c3QyVmFsdWUsIDAsIDAgfSB9LAoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0M1ZhbHVlLCAwLCAwIH0gfSwKCXsgMHgyMDAwLCB7IERGRl9Qcm9wX2FkanVzdDRWYWx1ZSwgMCwgMCB9IH0sCgl7IDB4MjAwMCwgeyBERkZfUHJvcF9hZGp1c3Q1VmFsdWUsIDAsIDAgfSB9LAoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0NlZhbHVlLCAwLCAwIH0gfSwKCXsgMHgyMDAwLCB7IERGRl9Qcm9wX2FkanVzdDdWYWx1ZSwgMCwgMCB9IH0sCgl7IDB4MjAwMCwgeyBERkZfUHJvcF9hZGp1c3Q4VmFsdWUsIDAsIDAgfSB9Cn07CgpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb0NhbGxvdXQ5MCA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0Q2FsbG91dFZlcnQxLCBzaXplb2YoIG1zb19zcHRDYWxsb3V0VmVydDEgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKHNhbF91SW50MTYqKW1zb19zcHRDYWxsb3V0U2VnbTFiLCBzaXplb2YoIG1zb19zcHRDYWxsb3V0U2VnbTFiICkgPj4gMSwKCShTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSopbXNvX3NwdENhbGxvdXRDYWxjLCBzaXplb2YoIG1zb19zcHRDYWxsb3V0Q2FsYyApIC8gc2l6ZW9mKCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSApLAoJKHNhbF9JbnQzMiopbXNvX3NwdENhbGxvdXREZWZhdWx0MSwKCU5VTEwsIDAsCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJTlVMTCwgMCwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdENhbGxvdXRIYW5kbGUxLCBzaXplb2YoIG1zb19zcHRDYWxsb3V0SGFuZGxlMSApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvQ2FsbG91dDEgPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdENhbGxvdXRWZXJ0MSwgc2l6ZW9mKCBtc29fc3B0Q2FsbG91dFZlcnQxICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0Q2FsbG91dFNlZ20xYiwgc2l6ZW9mKCBtc29fc3B0Q2FsbG91dFNlZ20xYiApID4+IDEsCgkoU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEqKW1zb19zcHRDYWxsb3V0Q2FsYywgc2l6ZW9mKCBtc29fc3B0Q2FsbG91dENhbGMgKSAvIHNpemVvZiggU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgKSwKCShzYWxfSW50MzIqKW1zb19zcHRDYWxsb3V0RGVmYXVsdDIsCglOVUxMLCAwLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCU5VTEwsIDAsCgkoU3Z4TVNEZmZIYW5kbGUqKW1zb19zcHRDYWxsb3V0SGFuZGxlMSwgc2l6ZW9mKCBtc29fc3B0Q2FsbG91dEhhbmRsZTEgKSAvIHNpemVvZiggU3Z4TVNEZmZIYW5kbGUgKQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb0NhbGxvdXQyID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRDYWxsb3V0MlZlcnRhLCBzaXplb2YoIG1zb19zcHRDYWxsb3V0MlZlcnRhICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0Q2FsbG91dDJTZWdtMWIsIHNpemVvZiggbXNvX3NwdENhbGxvdXQyU2VnbTFiICkgPj4gMSwKCShTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSopbXNvX3NwdENhbGxvdXRDYWxjLCBzaXplb2YoIG1zb19zcHRDYWxsb3V0Q2FsYyApIC8gc2l6ZW9mKCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSApLAoJKHNhbF9JbnQzMiopbXNvX3NwdENhbGxvdXREZWZhdWx0MywKCU5VTEwsIDAsCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJTlVMTCwgMCwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdENhbGxvdXRIYW5kbGUyLCBzaXplb2YoIG1zb19zcHRDYWxsb3V0SGFuZGxlMiApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvQ2FsbG91dDMgPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdENhbGxvdXQzVmVydGEsIHNpemVvZiggbXNvX3NwdENhbGxvdXQzVmVydGEgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKHNhbF91SW50MTYqKW1zb19zcHRDYWxsb3V0M1NlZ20xYiwgc2l6ZW9mKCBtc29fc3B0Q2FsbG91dDNTZWdtMWIgKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0Q2FsbG91dENhbGMsIHNpemVvZiggbXNvX3NwdENhbGxvdXRDYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0Q2FsbG91dERlZmF1bHQ0LAoJTlVMTCwgMCwKCTIxNjAwLCAyMTYwMCwKCU14ODAwMDAwMDAsIE14ODAwMDAwMDAsCglOVUxMLCAwLAoJKFN2eE1TRGZmSGFuZGxlKiltc29fc3B0Q2FsbG91dEhhbmRsZTMsIHNpemVvZiggbXNvX3NwdENhbGxvdXRIYW5kbGUzICkgLyBzaXplb2YoIFN2eE1TRGZmSGFuZGxlICkKfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29BY2NlbnRDYWxsb3V0OTAgPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdENhbGxvdXRWZXJ0MSwgc2l6ZW9mKCBtc29fc3B0Q2FsbG91dFZlcnQxICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0Q2FsbG91dFNlZ20xYiwgc2l6ZW9mKCBtc29fc3B0Q2FsbG91dFNlZ20xYiApID4+IDEsCgkoU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEqKW1zb19zcHRDYWxsb3V0Q2FsYywgc2l6ZW9mKCBtc29fc3B0Q2FsbG91dENhbGMgKSAvIHNpemVvZiggU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgKSwKCShzYWxfSW50MzIqKW1zb19zcHRDYWxsb3V0RGVmYXVsdDEsCglOVUxMLCAwLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCU5VTEwsIDAsCgkoU3Z4TVNEZmZIYW5kbGUqKW1zb19zcHRDYWxsb3V0SGFuZGxlMSwgc2l6ZW9mKCBtc29fc3B0Q2FsbG91dEhhbmRsZTEgKSAvIHNpemVvZiggU3Z4TVNEZmZIYW5kbGUgKQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb0FjY2VudENhbGxvdXQxID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRDYWxsb3V0MVZlcnQsIHNpemVvZiggbXNvX3NwdENhbGxvdXQxVmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdENhbGxvdXQxU2VnbTFiLCBzaXplb2YoIG1zb19zcHRDYWxsb3V0MVNlZ20xYiApID4+IDEsCgkoU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEqKW1zb19zcHRDYWxsb3V0Q2FsYywgc2l6ZW9mKCBtc29fc3B0Q2FsbG91dENhbGMgKSAvIHNpemVvZiggU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgKSwKCShzYWxfSW50MzIqKW1zb19zcHRDYWxsb3V0RGVmYXVsdDIsCglOVUxMLCAwLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCU5VTEwsIDAsCgkoU3Z4TVNEZmZIYW5kbGUqKW1zb19zcHRDYWxsb3V0SGFuZGxlMSwgc2l6ZW9mKCBtc29fc3B0Q2FsbG91dEhhbmRsZTEgKSAvIHNpemVvZiggU3Z4TVNEZmZIYW5kbGUgKQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb0FjY2VudENhbGxvdXQyID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRDYWxsb3V0MlZlcnRiLCBzaXplb2YoIG1zb19zcHRDYWxsb3V0MlZlcnRiICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0Q2FsbG91dDJTZWdtMWQsIHNpemVvZiggbXNvX3NwdENhbGxvdXQyU2VnbTFkICkgPj4gMSwKCShTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSopbXNvX3NwdENhbGxvdXRDYWxjLCBzaXplb2YoIG1zb19zcHRDYWxsb3V0Q2FsYyApIC8gc2l6ZW9mKCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSApLAoJKHNhbF9JbnQzMiopbXNvX3NwdENhbGxvdXREZWZhdWx0MywKCU5VTEwsIDAsCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJTlVMTCwgMCwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdENhbGxvdXRIYW5kbGUyLCBzaXplb2YoIG1zb19zcHRDYWxsb3V0SGFuZGxlMiApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvQWNjZW50Q2FsbG91dDMgPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdENhbGxvdXQzVmVydGIsIHNpemVvZiggbXNvX3NwdENhbGxvdXQzVmVydGIgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKHNhbF91SW50MTYqKW1zb19zcHRDYWxsb3V0M1NlZ20xZCwgc2l6ZW9mKCBtc29fc3B0Q2FsbG91dDNTZWdtMWQgKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0Q2FsbG91dENhbGMsIHNpemVvZiggbXNvX3NwdENhbGxvdXRDYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0Q2FsbG91dERlZmF1bHQ0LAoJTlVMTCwgMCwKCTIxNjAwLCAyMTYwMCwKCU14ODAwMDAwMDAsIE14ODAwMDAwMDAsCglOVUxMLCAwLAoJKFN2eE1TRGZmSGFuZGxlKiltc29fc3B0Q2FsbG91dEhhbmRsZTMsIHNpemVvZiggbXNvX3NwdENhbGxvdXRIYW5kbGUzICkgLyBzaXplb2YoIFN2eE1TRGZmSGFuZGxlICkKfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29Cb3JkZXJDYWxsb3V0OTAgPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdENhbGxvdXRWZXJ0MSwgc2l6ZW9mKCBtc29fc3B0Q2FsbG91dFZlcnQxICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0Q2FsbG91dFNlZ20xYSwgc2l6ZW9mKCBtc29fc3B0Q2FsbG91dFNlZ20xYSApID4+IDEsCgkoU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEqKW1zb19zcHRDYWxsb3V0Q2FsYywgc2l6ZW9mKCBtc29fc3B0Q2FsbG91dENhbGMgKSAvIHNpemVvZiggU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgKSwKCShzYWxfSW50MzIqKW1zb19zcHRDYWxsb3V0RGVmYXVsdDEsCglOVUxMLCAwLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCU5VTEwsIDAsCgkoU3Z4TVNEZmZIYW5kbGUqKW1zb19zcHRDYWxsb3V0SGFuZGxlMSwgc2l6ZW9mKCBtc29fc3B0Q2FsbG91dEhhbmRsZTEgKSAvIHNpemVvZiggU3Z4TVNEZmZIYW5kbGUgKQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb0JvcmRlckNhbGxvdXQxID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRDYWxsb3V0VmVydDEsIHNpemVvZiggbXNvX3NwdENhbGxvdXRWZXJ0MSApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdENhbGxvdXRTZWdtMWEsIHNpemVvZiggbXNvX3NwdENhbGxvdXRTZWdtMWEgKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0Q2FsbG91dENhbGMsIHNpemVvZiggbXNvX3NwdENhbGxvdXRDYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0Q2FsbG91dERlZmF1bHQyLAoJTlVMTCwgMCwKCTIxNjAwLCAyMTYwMCwKCU14ODAwMDAwMDAsIE14ODAwMDAwMDAsCglOVUxMLCAwLAoJKFN2eE1TRGZmSGFuZGxlKiltc29fc3B0Q2FsbG91dEhhbmRsZTEsIHNpemVvZiggbXNvX3NwdENhbGxvdXRIYW5kbGUxICkgLyBzaXplb2YoIFN2eE1TRGZmSGFuZGxlICkKfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29Cb3JkZXJDYWxsb3V0MiA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0Q2FsbG91dDJWZXJ0YSwgc2l6ZW9mKCBtc29fc3B0Q2FsbG91dDJWZXJ0YSApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdENhbGxvdXQyU2VnbTFhLCBzaXplb2YoIG1zb19zcHRDYWxsb3V0MlNlZ20xYSApID4+IDEsCgkoU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEqKW1zb19zcHRDYWxsb3V0Q2FsYywgc2l6ZW9mKCBtc29fc3B0Q2FsbG91dENhbGMgKSAvIHNpemVvZiggU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgKSwKCShzYWxfSW50MzIqKW1zb19zcHRDYWxsb3V0RGVmYXVsdDMsCglOVUxMLCAwLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCU5VTEwsIDAsCgkoU3Z4TVNEZmZIYW5kbGUqKW1zb19zcHRDYWxsb3V0SGFuZGxlMiwgc2l6ZW9mKCBtc29fc3B0Q2FsbG91dEhhbmRsZTIgKSAvIHNpemVvZiggU3Z4TVNEZmZIYW5kbGUgKQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb0JvcmRlckNhbGxvdXQzID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRDYWxsb3V0M1ZlcnRhLCBzaXplb2YoIG1zb19zcHRDYWxsb3V0M1ZlcnRhICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0Q2FsbG91dDNTZWdtMWEsIHNpemVvZiggbXNvX3NwdENhbGxvdXQzU2VnbTFhICkgPj4gMSwKCShTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSopbXNvX3NwdENhbGxvdXRDYWxjLCBzaXplb2YoIG1zb19zcHRDYWxsb3V0Q2FsYyApIC8gc2l6ZW9mKCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSApLAoJKHNhbF9JbnQzMiopbXNvX3NwdENhbGxvdXREZWZhdWx0NCwKCU5VTEwsIDAsCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJTlVMTCwgMCwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdENhbGxvdXRIYW5kbGUzLCBzaXplb2YoIG1zb19zcHRDYWxsb3V0SGFuZGxlMyApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCn07CnN0YXRpYyBjb25zdCBtc29fQ3VzdG9tU2hhcGUgbXNvQWNjZW50Qm9yZGVyQ2FsbG91dDkwID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRDYWxsb3V0VmVydDEsIHNpemVvZiggbXNvX3NwdENhbGxvdXRWZXJ0MSApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdENhbGxvdXRTZWdtMWEsIHNpemVvZiggbXNvX3NwdENhbGxvdXRTZWdtMWEgKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0Q2FsbG91dENhbGMsIHNpemVvZiggbXNvX3NwdENhbGxvdXRDYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0Q2FsbG91dERlZmF1bHQxLAoJTlVMTCwgMCwKCTIxNjAwLCAyMTYwMCwKCU14ODAwMDAwMDAsIE14ODAwMDAwMDAsCglOVUxMLCAwLAoJKFN2eE1TRGZmSGFuZGxlKiltc29fc3B0Q2FsbG91dEhhbmRsZTEsIHNpemVvZiggbXNvX3NwdENhbGxvdXRIYW5kbGUxICkgLyBzaXplb2YoIFN2eE1TRGZmSGFuZGxlICkKfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29BY2NlbnRCb3JkZXJDYWxsb3V0MSA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0Q2FsbG91dDFWZXJ0LCBzaXplb2YoIG1zb19zcHRDYWxsb3V0MVZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKHNhbF91SW50MTYqKW1zb19zcHRDYWxsb3V0MVNlZ20xYSwgc2l6ZW9mKCBtc29fc3B0Q2FsbG91dDFTZWdtMWEgKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0Q2FsbG91dENhbGMsIHNpemVvZiggbXNvX3NwdENhbGxvdXRDYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0Q2FsbG91dERlZmF1bHQyLAoJTlVMTCwgMCwKCTIxNjAwLCAyMTYwMCwKCU14ODAwMDAwMDAsIE14ODAwMDAwMDAsCglOVUxMLCAwLAoJKFN2eE1TRGZmSGFuZGxlKiltc29fc3B0Q2FsbG91dEhhbmRsZTEsIHNpemVvZiggbXNvX3NwdENhbGxvdXRIYW5kbGUxICkgLyBzaXplb2YoIFN2eE1TRGZmSGFuZGxlICkKfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29BY2NlbnRCb3JkZXJDYWxsb3V0MiA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0Q2FsbG91dDJWZXJ0Yiwgc2l6ZW9mKCBtc29fc3B0Q2FsbG91dDJWZXJ0YiApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdENhbGxvdXQyU2VnbTFjLCBzaXplb2YoIG1zb19zcHRDYWxsb3V0MlNlZ20xYyApID4+IDEsCgkoU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEqKW1zb19zcHRDYWxsb3V0Q2FsYywgc2l6ZW9mKCBtc29fc3B0Q2FsbG91dENhbGMgKSAvIHNpemVvZiggU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgKSwKCShzYWxfSW50MzIqKW1zb19zcHRDYWxsb3V0RGVmYXVsdDMsCglOVUxMLCAwLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCU5VTEwsIDAsCgkoU3Z4TVNEZmZIYW5kbGUqKW1zb19zcHRDYWxsb3V0SGFuZGxlMiwgc2l6ZW9mKCBtc29fc3B0Q2FsbG91dEhhbmRsZTIgKSAvIHNpemVvZiggU3Z4TVNEZmZIYW5kbGUgKQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb0FjY2VudEJvcmRlckNhbGxvdXQzID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRDYWxsb3V0M1ZlcnRiLCBzaXplb2YoIG1zb19zcHRDYWxsb3V0M1ZlcnRiICkgLyBzaXplb2YoIFN2eE1TRGZmVmVydFBhaXIgKSwKCShzYWxfdUludDE2Kiltc29fc3B0Q2FsbG91dDNTZWdtMWMsIHNpemVvZiggbXNvX3NwdENhbGxvdXQzU2VnbTFjICkgPj4gMSwKCShTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSopbXNvX3NwdENhbGxvdXRDYWxjLCBzaXplb2YoIG1zb19zcHRDYWxsb3V0Q2FsYyApIC8gc2l6ZW9mKCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSApLAoJKHNhbF9JbnQzMiopbXNvX3NwdENhbGxvdXREZWZhdWx0NCwKCU5VTEwsIDAsCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJTlVMTCwgMCwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdENhbGxvdXRIYW5kbGUzLCBzaXplb2YoIG1zb19zcHRDYWxsb3V0SGFuZGxlMyApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0U3RyYWlnaHRDb25uZWN0b3IxVmVydFtdID0KewoJeyAwLCAwIH0sIHsgMjE2MDAsIDIxNjAwIH0KfTsKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvX3NwdFN0cmFpZ2h0Q29ubmVjdG9yMVNlZ21bXSA9CnsKCTB4NDAwMCwgMHgwMDAxLCAweDgwMDAKfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29TdHJhaWdodENvbm5lY3RvcjEgPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdFN0cmFpZ2h0Q29ubmVjdG9yMVZlcnQsIHNpemVvZiggbXNvX3NwdFN0cmFpZ2h0Q29ubmVjdG9yMVZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKHNhbF91SW50MTYqKW1zb19zcHRTdHJhaWdodENvbm5lY3RvcjFTZWdtLCBzaXplb2YoIG1zb19zcHRTdHJhaWdodENvbm5lY3RvcjFTZWdtICkgPj4gMSwKCShTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSopTlVMTCwgMCwKCShzYWxfSW50MzIqKU5VTEwsCglOVUxMLCAwLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCU5VTEwsIDAsCgkoU3Z4TVNEZmZIYW5kbGUqKU5VTEwsIDAKfTsKCnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRCZW50Q29ubmVjdG9yMlZlcnRbXSA9CnsKCXsgMCwgMCB9LCB7IDIxNjAwLCAwIH0sIHsgMjE2MDAsIDIxNjAwIH0KfTsKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvX3NwdEJlbnRDb25uZWN0b3IyU2VnbVtdID0KewoJMHg0MDAwLCAweDAwMDIsIDB4ODAwMAp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb0JlbnRDb25uZWN0b3IyID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRCZW50Q29ubmVjdG9yMlZlcnQsIHNpemVvZiggbXNvX3NwdEJlbnRDb25uZWN0b3IyVmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdEJlbnRDb25uZWN0b3IyU2VnbSwgc2l6ZW9mKCBtc29fc3B0QmVudENvbm5lY3RvcjJTZWdtICkgPj4gMSwKCShTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSopTlVMTCwgMCwKCShzYWxfSW50MzIqKU5VTEwsCglOVUxMLCAwLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCU5VTEwsIDAsCgkoU3Z4TVNEZmZIYW5kbGUqKU5VTEwsIDAKfTsKCnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRCZW50Q29ubmVjdG9yM1ZlcnRbXSA9CnsKCXsgMCwgMCB9LCB7IDAgTVNPX0ksIDAgfSwgeyAwIE1TT19JLCAyMTYwMCB9LCB7IDIxNjAwLCAyMTYwMCB9Cn07CnN0YXRpYyBjb25zdCBzYWxfdUludDE2IG1zb19zcHRCZW50Q29ubmVjdG9yM1NlZ21bXSA9CnsKCTB4NDAwMCwgMHgwMDAzLCAweDgwMDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhIG1zb19zcHRCZW50Q29ubmVjdG9yM0NhbGNbXSA9CnsKCXsgMHgyMDAwLCB7IERGRl9Qcm9wX2FkanVzdFZhbHVlLCAwLCAwIH0gfQp9OwpzdGF0aWMgY29uc3Qgc2FsX0ludDMyIG1zb19zcHRCZW50Q29ubmVjdG9yM0RlZmF1bHRbXSA9CnsKCTEsIDEwODAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkhhbmRsZSBtc29fc3B0QmVudENvbm5lY3RvcjNIYW5kbGVbXSA9CnsKCXsJTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFLAoJCTB4MTAwLCAxMDgwMCwgMTA4MDAsIDEwODAwLCBNeDgwMDAwMDAwLCAweDdmZmZmZmZmLCBNeDgwMDAwMDAwLCAweDdmZmZmZmZmIH0KfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29CZW50Q29ubmVjdG9yMyA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0QmVudENvbm5lY3RvcjNWZXJ0LCBzaXplb2YoIG1zb19zcHRCZW50Q29ubmVjdG9yM1ZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKHNhbF91SW50MTYqKW1zb19zcHRCZW50Q29ubmVjdG9yM1NlZ20sIHNpemVvZiggbXNvX3NwdEJlbnRDb25uZWN0b3IzU2VnbSApID4+IDEsCgkoU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEqKW1zb19zcHRCZW50Q29ubmVjdG9yM0NhbGMsIHNpemVvZiggbXNvX3NwdEJlbnRDb25uZWN0b3IzQ2FsYyApIC8gc2l6ZW9mKCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSApLAoJKHNhbF9JbnQzMiopbXNvX3NwdEJlbnRDb25uZWN0b3IzRGVmYXVsdCwKCU5VTEwsIDAsCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJTlVMTCwgMCwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdEJlbnRDb25uZWN0b3IzSGFuZGxlLCBzaXplb2YoIG1zb19zcHRCZW50Q29ubmVjdG9yM0hhbmRsZSApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0QmVudENvbm5lY3RvcjRWZXJ0W10gPQp7Cgl7IDAsIDAgfSwgeyAwIE1TT19JLCAwIH0sIHsgMCBNU09fSSwgMSBNU09fSSB9LCB7IDIxNjAwLCAxIE1TT19JIH0sIHsgMjE2MDAsIDIxNjAwIH0KfTsKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvX3NwdEJlbnRDb25uZWN0b3I0U2VnbVtdID0KewoJMHg0MDAwLCAweDAwMDQsIDB4ODAwMAp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgbXNvX3NwdEJlbnRDb25uZWN0b3I0Q2FsY1tdID0KewoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAsIDAgfSB9LAoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0MlZhbHVlLCAwLCAwIH0gfSwKCXsgMHgyMDAwLCB7IDB4NDAwLCAyMTYwMCwgMCB9IH0sCgl7IDB4MjAwMSwgeyAweDQwMiwgMSwgMiB9IH0sCgl7IDB4MjAwMSwgeyAweDQwMSwgMSwgMiB9IH0KfTsKc3RhdGljIGNvbnN0IHNhbF9JbnQzMiBtc29fc3B0QmVudENvbm5lY3RvcjREZWZhdWx0W10gPQp7CgkyLCAxMDgwMCwgMTA4MDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmSGFuZGxlIG1zb19zcHRCZW50Q29ubmVjdG9yNEhhbmRsZVtdID0KewoJewlNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0UgfCBNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0VfWV9NSU5fSVNfU1BFQ0lBTCB8IE1TREZGX0hBTkRMRV9GTEFHU19SQU5HRV9ZX01BWF9JU19TUEVDSUFMLAoJCTB4MTAwLCA0ICsgMywgMTA4MDAsIDEwODAwLCBNeDgwMDAwMDAwLCAweDdmZmZmZmZmLCA0ICsgMywgNCArIDMgfSwKCXsJTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFIHwgTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFX1hfTUlOX0lTX1NQRUNJQUwgfCBNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0VfWF9NQVhfSVNfU1BFQ0lBTCwKCQkzICsgMywgMHgxMDEsIDEwODAwLCAxMDgwMCwgMyArIDMsIDMgKyAzLCBNeDgwMDAwMDAwLCAweDdmZmZmZmZmIH0KfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29CZW50Q29ubmVjdG9yNCA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0QmVudENvbm5lY3RvcjRWZXJ0LCBzaXplb2YoIG1zb19zcHRCZW50Q29ubmVjdG9yNFZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKHNhbF91SW50MTYqKW1zb19zcHRCZW50Q29ubmVjdG9yNFNlZ20sIHNpemVvZiggbXNvX3NwdEJlbnRDb25uZWN0b3I0U2VnbSApID4+IDEsCgkoU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEqKW1zb19zcHRCZW50Q29ubmVjdG9yNENhbGMsIHNpemVvZiggbXNvX3NwdEJlbnRDb25uZWN0b3I0Q2FsYyApIC8gc2l6ZW9mKCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSApLAoJKHNhbF9JbnQzMiopbXNvX3NwdEJlbnRDb25uZWN0b3I0RGVmYXVsdCwKCU5VTEwsIDAsCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJTlVMTCwgMCwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdEJlbnRDb25uZWN0b3I0SGFuZGxlLCBzaXplb2YoIG1zb19zcHRCZW50Q29ubmVjdG9yNEhhbmRsZSApIC8gc2l6ZW9mKCBTdnhNU0RmZkhhbmRsZSApCn07CgpzdGF0aWMgY29uc3QgU3Z4TVNEZmZWZXJ0UGFpciBtc29fc3B0QmVudENvbm5lY3RvcjVWZXJ0W10gPQp7Cgl7IDAsIDAgfSwgeyAwIE1TT19JLCAwIH0sIHsgMCBNU09fSSwgNCBNU09fSSB9LCB7IDEgTVNPX0ksIDQgTVNPX0kgfSwgeyAxIE1TT19JLCAyMTYwMCB9LCB7IDIxNjAwLCAyMTYwMCB9Cn07CnN0YXRpYyBjb25zdCBzYWxfdUludDE2IG1zb19zcHRCZW50Q29ubmVjdG9yNVNlZ21bXSA9CnsKCTB4NDAwMCwgMHgwMDA1LCAweDgwMDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhIG1zb19zcHRCZW50Q29ubmVjdG9yNUNhbGNbXSA9CnsKCXsgMHgyMDAwLCB7IERGRl9Qcm9wX2FkanVzdFZhbHVlLCAwLCAwIH0gfSwKCXsgMHgyMDAwLCB7IERGRl9Qcm9wX2FkanVzdDNWYWx1ZSwgMCwgMCB9IH0sCgl7IDB4NjAwMCwgeyAweDQwMCwgMHg0MDEsIDAgfSB9LAoJeyAweDIwMDEsIHsgMHg0MDIsIDEsIDIgfSB9LAoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0MlZhbHVlLCAwLCAwIH0gfSwKCXsgMHgyMDAxLCB7IDB4NDA0LCAxLCAyIH0gfSwKCXsgMHg0MDAwLCB7IDIxNjAwLCAweDQwNCwgMCB9IH0sCgl7IDB4MjAwMSwgeyAweDQwNiwgMSwgMiB9IH0KfTsKc3RhdGljIGNvbnN0IHNhbF9JbnQzMiBtc29fc3B0QmVudENvbm5lY3RvcjVEZWZhdWx0W10gPQp7CgkzLCAxMDgwMCwgMTA4MDAsIDEwODAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkhhbmRsZSBtc29fc3B0QmVudENvbm5lY3RvcjVIYW5kbGVbXSA9CnsKCXsJTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFIHwgTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFX1lfTUlOX0lTX1NQRUNJQUwgfCBNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0VfWV9NQVhfSVNfU1BFQ0lBTCwKCQkweDEwMCwgNSArIDMsIDEwODAwLCAxMDgwMCwgTXg4MDAwMDAwMCwgMHg3ZmZmZmZmZiwgNSArIDMsIDUgKyAzIH0sCgl7CU1TREZGX0hBTkRMRV9GTEFHU19SQU5HRSB8IE1TREZGX0hBTkRMRV9GTEFHU19SQU5HRV9YX01JTl9JU19TUEVDSUFMIHwgTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFX1hfTUFYX0lTX1NQRUNJQUwsCgkJMyArIDMsIDB4MTAxLCAxMDgwMCwgMTA4MDAsIDMgKyAzLCAzICsgMywgTXg4MDAwMDAwMCwgMHg3ZmZmZmZmZiB9LAoJewlNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0UgfCBNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0VfWV9NSU5fSVNfU1BFQ0lBTCB8IE1TREZGX0hBTkRMRV9GTEFHU19SQU5HRV9ZX01BWF9JU19TUEVDSUFMLAoJCTB4MTAyLCA3ICsgMywgMTA4MDAsIDEwODAwLCBNeDgwMDAwMDAwLCAweDdmZmZmZmZmLCA3ICsgMywgNyArIDMgfQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb0JlbnRDb25uZWN0b3I1ID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRCZW50Q29ubmVjdG9yNVZlcnQsIHNpemVvZiggbXNvX3NwdEJlbnRDb25uZWN0b3I1VmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdEJlbnRDb25uZWN0b3I1U2VnbSwgc2l6ZW9mKCBtc29fc3B0QmVudENvbm5lY3RvcjVTZWdtICkgPj4gMSwKCShTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSopbXNvX3NwdEJlbnRDb25uZWN0b3I1Q2FsYywgc2l6ZW9mKCBtc29fc3B0QmVudENvbm5lY3RvcjVDYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0QmVudENvbm5lY3RvcjVEZWZhdWx0LAoJTlVMTCwgMCwKCTIxNjAwLCAyMTYwMCwKCU14ODAwMDAwMDAsIE14ODAwMDAwMDAsCglOVUxMLCAwLAoJKFN2eE1TRGZmSGFuZGxlKiltc29fc3B0QmVudENvbm5lY3RvcjVIYW5kbGUsIHNpemVvZiggbXNvX3NwdEJlbnRDb25uZWN0b3I1SGFuZGxlICkgLyBzaXplb2YoIFN2eE1TRGZmSGFuZGxlICkKfTsKCnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRDdXJ2ZWRDb25uZWN0b3IyVmVydFtdID0KewoJeyAwLCAwIH0sIHsgMTA4MDAsIDAgfSwgeyAyMTYwMCwgMTA4MDAgfSwgeyAyMTYwMCwgMjE2MDAgfQp9OwpzdGF0aWMgY29uc3Qgc2FsX3VJbnQxNiBtc29fc3B0Q3VydmVkQ29ubmVjdG9yMlNlZ21bXSA9CnsKCTB4NDAwMCwgMHgyMDAxLCAweDgwMDAKfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29DdXJ2ZWRDb25uZWN0b3IyID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRDdXJ2ZWRDb25uZWN0b3IyVmVydCwgc2l6ZW9mKCBtc29fc3B0Q3VydmVkQ29ubmVjdG9yMlZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKHNhbF91SW50MTYqKW1zb19zcHRDdXJ2ZWRDb25uZWN0b3IyU2VnbSwgc2l6ZW9mKCBtc29fc3B0Q3VydmVkQ29ubmVjdG9yMlNlZ20gKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKilOVUxMLCAwLAoJKHNhbF9JbnQzMiopTlVMTCwKCU5VTEwsIDAsCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJTlVMTCwgMCwKCShTdnhNU0RmZkhhbmRsZSopTlVMTCwgMAp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdEN1cnZlZENvbm5lY3RvcjNWZXJ0W10gPQp7Cgl7IDAsIDAgfSwgeyAxIE1TT19JLCAwIH0sIHsgMCBNU09fSSwgNTQwMCB9LCB7IDAgTVNPX0ksIDEwODAwIH0sIHsgMCBNU09fSSwgMTYyMDAgfSwgeyAzIE1TT19JLCAyMTYwMCB9LCB7IDIxNjAwLCAyMTYwMCB9Cn07CnN0YXRpYyBjb25zdCBzYWxfdUludDE2IG1zb19zcHRDdXJ2ZWRDb25uZWN0b3IzU2VnbVtdID0KewoJMHg0MDAwLCAweDIwMDIsIDB4ODAwMAp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgbXNvX3NwdEN1cnZlZENvbm5lY3RvcjNDYWxjW10gPQp7Cgl7IDB4MjAwMCwgeyBERkZfUHJvcF9hZGp1c3RWYWx1ZSwgMCwgMCB9IH0sCgl7IDB4MjAwMSwgeyAweDQwMCwgMSwgMiB9IH0sCgl7IDB4MjAwMCwgeyAweDQwMCwgMjE2MDAsIDAgfSB9LAoJeyAweDIwMDEsIHsgMHg0MDIsIDEsIDIgfSB9Cn07CnN0YXRpYyBjb25zdCBzYWxfSW50MzIgbXNvX3NwdEN1cnZlZENvbm5lY3RvcjNEZWZhdWx0W10gPQp7CgkxLCAxMDgwMAp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZIYW5kbGUgbXNvX3NwdEN1cnZlZENvbm5lY3RvcjNIYW5kbGVbXSA9CnsKCXsJTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFLAoJCTB4MTAwLCAxMDgwMCwgMTA4MDAsIDEwODAwLCBNeDgwMDAwMDAwLCAweDdmZmZmZmZmLCBNeDgwMDAwMDAwLCAweDdmZmZmZmZmIH0KfTsKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29DdXJ2ZWRDb25uZWN0b3IzID0KewoJKFN2eE1TRGZmVmVydFBhaXIqKW1zb19zcHRDdXJ2ZWRDb25uZWN0b3IzVmVydCwgc2l6ZW9mKCBtc29fc3B0Q3VydmVkQ29ubmVjdG9yM1ZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKHNhbF91SW50MTYqKW1zb19zcHRDdXJ2ZWRDb25uZWN0b3IzU2VnbSwgc2l6ZW9mKCBtc29fc3B0Q3VydmVkQ29ubmVjdG9yM1NlZ20gKSA+PiAxLAoJKFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhKiltc29fc3B0Q3VydmVkQ29ubmVjdG9yM0NhbGMsIHNpemVvZiggbXNvX3NwdEN1cnZlZENvbm5lY3RvcjNDYWxjICkgLyBzaXplb2YoIFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhICksCgkoc2FsX0ludDMyKiltc29fc3B0Q3VydmVkQ29ubmVjdG9yM0RlZmF1bHQsCglOVUxMLCAwLAoJMjE2MDAsIDIxNjAwLAoJTXg4MDAwMDAwMCwgTXg4MDAwMDAwMCwKCU5VTEwsIDAsCgkoU3Z4TVNEZmZIYW5kbGUqKW1zb19zcHRDdXJ2ZWRDb25uZWN0b3IzSGFuZGxlLCBzaXplb2YoIG1zb19zcHRDdXJ2ZWRDb25uZWN0b3IzSGFuZGxlICkgLyBzaXplb2YoIFN2eE1TRGZmSGFuZGxlICkKfTsKCnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRDdXJ2ZWRDb25uZWN0b3I0VmVydFtdID0KewoJeyAwLCAwIH0sIHsgMSBNU09fSSwgMCB9LCB7IDAgTVNPX0ksIDEwIE1TT19JIH0sIHsgMCBNU09fSSwgOSBNU09fSSB9LAoJeyAwIE1TT19JLCAxMiBNU09fSSB9LCB7IDUgTVNPX0ksIDggTVNPX0kgfSwgeyAzIE1TT19JLCA4IE1TT19JIH0sCgl7IDcgTVNPX0ksIDggTVNPX0kgfSwgeyAyMTYwMCwgMTQgTVNPX0kgfSwgeyAyMTYwMCwgMjE2MDAgfQoKfTsKc3RhdGljIGNvbnN0IHNhbF91SW50MTYgbXNvX3NwdEN1cnZlZENvbm5lY3RvcjRTZWdtW10gPQp7CgkweDQwMDAsIDB4MjAwMywgMHg4MDAwCn07CnN0YXRpYyBjb25zdCBTdnhNU0RmZkNhbGN1bGF0aW9uRGF0YSBtc29fc3B0Q3VydmVkQ29ubmVjdG9yNENhbGNbXSA9CnsKCXsgMHgyMDAwLCB7IERGRl9Qcm9wX2FkanVzdFZhbHVlLCAwLCAwIH0gfSwKCXsgMHgyMDAxLCB7IDB4NDAwLCAxLCAyIH0gfSwKCXsgMHg0MDAwLCB7IDIxNjAwLCAweDQwMCwgMCB9IH0sCgl7IDB4MjAwMSwgeyAweDQwMiwgMSwgMiB9IH0sCgl7IDB4NjAwMCwgeyAweDQwMCwgMHg0MDMsIDAgfSB9LAoJeyAweDIwMDEsIHsgMHg0MDQsIDEsIDIgfSB9LAoJeyAweDIwMDAsIHsgMHg0MDMsIDIxNjAwLCAwIH0gfSwKCXsgMHgyMDAxLCB7IDB4NDA2LCAxLCAyIH0gfSwKCXsgMHgyMDAwLCB7IERGRl9Qcm9wX2FkanVzdDJWYWx1ZSwgMCwgMCB9IH0sCgl7IDB4MjAwMSwgeyBERkZfUHJvcF9hZGp1c3QyVmFsdWUsIDEsIDIgfSB9LAoJeyAweDIwMDEsIHsgREZGX1Byb3BfYWRqdXN0MlZhbHVlLCAxLCA0IH0gfSwKCXsgMHg2MDAwLCB7IDB4NDA4LCAweDQwOSwgMCB9IH0sCgl7IDB4MjAwMSwgeyAweDQwYiwgMSwgMiB9IH0sCgl7IDB4MjAwMCwgeyAweDQwOCwgMjE2MDAsIDAgfSB9LAoJeyAweDIwMDEsIHsgMHg0MGQsIDEsIDIgfSB9Cn07CnN0YXRpYyBjb25zdCBzYWxfSW50MzIgbXNvX3NwdEN1cnZlZENvbm5lY3RvcjREZWZhdWx0W10gPQp7CgkyLCAxMDgwMCwgMTA4MDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmSGFuZGxlIG1zb19zcHRDdXJ2ZWRDb25uZWN0b3I0SGFuZGxlW10gPQp7Cgl7CU1TREZGX0hBTkRMRV9GTEFHU19SQU5HRSB8IE1TREZGX0hBTkRMRV9GTEFHU19SQU5HRV9ZX01JTl9JU19TUEVDSUFMIHwgTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFX1lfTUFYX0lTX1NQRUNJQUwsCgkJMHgxMDAsIDkgKyAzLCAxMDgwMCwgMTA4MDAsIE14ODAwMDAwMDAsIDB4N2ZmZmZmZmYsIDkgKyAzLCA5ICsgMyB9LAoJewlNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0UgfCBNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0VfWF9NSU5fSVNfU1BFQ0lBTCB8IE1TREZGX0hBTkRMRV9GTEFHU19SQU5HRV9YX01BWF9JU19TUEVDSUFMLAoJCTMgKyAzLCAweDEwMSwgMTA4MDAsIDEwODAwLCAzICsgMywgMyArIDMsIE14ODAwMDAwMDAsIDB4N2ZmZmZmZmYgfQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb0N1cnZlZENvbm5lY3RvcjQgPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdEN1cnZlZENvbm5lY3RvcjRWZXJ0LCBzaXplb2YoIG1zb19zcHRDdXJ2ZWRDb25uZWN0b3I0VmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdEN1cnZlZENvbm5lY3RvcjRTZWdtLCBzaXplb2YoIG1zb19zcHRDdXJ2ZWRDb25uZWN0b3I0U2VnbSApID4+IDEsCgkoU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEqKW1zb19zcHRDdXJ2ZWRDb25uZWN0b3I0Q2FsYywgc2l6ZW9mKCBtc29fc3B0Q3VydmVkQ29ubmVjdG9yNENhbGMgKSAvIHNpemVvZiggU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgKSwKCShzYWxfSW50MzIqKW1zb19zcHRDdXJ2ZWRDb25uZWN0b3I0RGVmYXVsdCwKCU5VTEwsIDAsCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJTlVMTCwgMCwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdEN1cnZlZENvbm5lY3RvcjRIYW5kbGUsIHNpemVvZiggbXNvX3NwdEN1cnZlZENvbm5lY3RvcjRIYW5kbGUgKSAvIHNpemVvZiggU3Z4TVNEZmZIYW5kbGUgKQp9OwoKc3RhdGljIGNvbnN0IFN2eE1TRGZmVmVydFBhaXIgbXNvX3NwdEN1cnZlZENvbm5lY3RvcjVWZXJ0W10gPQp7Cgl7IDAsIDAgfSwKCXsgMjEgTVNPX0ksIDAgfSwgeyAwIE1TT19JLCAxMiBNU09fSSB9LCB7IDAgTVNPX0ksIDExIE1TT19JIH0sCgl7IDAgTVNPX0ksIDE0IE1TT19JIH0sIHsgNiBNU09fSSwgNCBNU09fSSB9LCB7IDMgTVNPX0ksIDQgTVNPX0kgfSwKCXsgOCBNU09fSSwgNCBNU09fSSB9LCB7IDEgTVNPX0ksIDE4IE1TT19JIH0sIHsgMSBNU09fSSwgMTYgTVNPX0kgfSwKCXsgMSBNU09fSSwgMjAgTVNPX0kgfSwgeyAxMCBNU09fSSwgMjE2MDAgfSwgeyAyMTYwMCwgMjE2MDAgfQp9OwpzdGF0aWMgY29uc3Qgc2FsX3VJbnQxNiBtc29fc3B0Q3VydmVkQ29ubmVjdG9yNVNlZ21bXSA9CnsKCTB4NDAwMCwgMHgyMDA0LCAweDgwMDAKfTsKc3RhdGljIGNvbnN0IFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhIG1zb19zcHRDdXJ2ZWRDb25uZWN0b3I1Q2FsY1tdID0KewoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0VmFsdWUsIDAsIDAgfSB9LAoJeyAweDIwMDAsIHsgREZGX1Byb3BfYWRqdXN0M1ZhbHVlLCAwLCAwIH0gfSwKCXsgMHg2MDAwLCB7IDB4NDAwLCAweDQwMSwgMCB9IH0sCgl7IDB4MjAwMSwgeyAweDQwMiwgMSwgMiB9IH0sCgl7IDB4MjAwMCwgeyBERkZfUHJvcF9hZGp1c3QyVmFsdWUsIDAsIDAgfSB9LAoJeyAweDYwMDAsIHsgMHg0MDAsIDB4NDAzLCAwIH0gfSwKCXsgMHgyMDAxLCB7IDB4NDA1LCAxLCAyIH0gfSwKCXsgMHg2MDAwLCB7IDB4NDAxLCAweDQwMywgMCB9IH0sCgl7IDB4MjAwMSwgeyAweDQwNywgMSwgMiB9IH0sCgl7IDB4MjAwMCwgeyAweDQwMSwgMjE2MDAsIDAgfSB9LAoJeyAweDIwMDEsIHsgMHg0MDksIDEsIDIgfSB9LAoJeyAweDIwMDEsIHsgMHg0MDQsIDEsIDIgfSB9LAoJeyAweDIwMDEsIHsgMHg0MGIsIDEsIDIgfSB9LAoJeyAweDYwMDAsIHsgMHg0MDQsIDB4NDBiLCAwIH0gfSwKCXsgMHgyMDAxLCB7IDB4NDBkLCAxLCAyIH0gfSwKCXsgMHgyMDAwLCB7IDB4NDA0LCAyMTYwMCwgMCB9IH0sCgl7IDB4MjAwMSwgeyAweDQwZiwgMSwgMiB9IH0sCgl7IDB4NjAwMCwgeyAweDQwNCwgMHg0MTAsIDAgfSB9LAoJeyAweDIwMDEsIHsgMHg0MTEsIDEsIDIgfSB9LAoJeyAweDIwMDAsIHsgMHg0MTAsIDIxNjAwLCAwIH0gfSwKCXsgMHgyMDAxLCB7IDB4NDEzLCAxLCAyIH0gfSwKCXsgMHgyMDAxLCB7IDB4NDAwLCAxLCAyIH0gfQp9OwpzdGF0aWMgY29uc3Qgc2FsX0ludDMyIG1zb19zcHRDdXJ2ZWRDb25uZWN0b3I1RGVmYXVsdFtdID0KewoJMywgMTA4MDAsIDEwODAwLCAxMDgwMAp9OwpzdGF0aWMgY29uc3QgU3Z4TVNEZmZIYW5kbGUgbXNvX3NwdEN1cnZlZENvbm5lY3RvcjVIYW5kbGVbXSA9CnsKCXsJTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFIHwgTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFX1lfTUlOX0lTX1NQRUNJQUwgfCBNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0VfWV9NQVhfSVNfU1BFQ0lBTCwKCQkweDEwMCwgMTEgKyAzLCAxMDgwMCwgMTA4MDAsIE14ODAwMDAwMDAsIDB4N2ZmZmZmZmYsIDExICsgMywgMTEgKyAzIH0sCgl7CU1TREZGX0hBTkRMRV9GTEFHU19SQU5HRSB8IE1TREZGX0hBTkRMRV9GTEFHU19SQU5HRV9YX01JTl9JU19TUEVDSUFMIHwgTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFX1hfTUFYX0lTX1NQRUNJQUwsCgkJMyArIDMsIDB4MTAxLCAxMDgwMCwgMTA4MDAsIDMgKyAzLCAzICsgMywgTXg4MDAwMDAwMCwgMHg3ZmZmZmZmZiB9LAoJewlNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0UgfCBNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0VfWV9NSU5fSVNfU1BFQ0lBTCB8IE1TREZGX0hBTkRMRV9GTEFHU19SQU5HRV9ZX01BWF9JU19TUEVDSUFMLAoJCTB4MTAyLCAxNiArIDMsIDEwODAwLCAxMDgwMCwgTXg4MDAwMDAwMCwgMHg3ZmZmZmZmZiwgMTYgKyAzLCAxNiArIDMgfQp9OwpzdGF0aWMgY29uc3QgbXNvX0N1c3RvbVNoYXBlIG1zb0N1cnZlZENvbm5lY3RvcjUgPQp7CgkoU3Z4TVNEZmZWZXJ0UGFpciopbXNvX3NwdEN1cnZlZENvbm5lY3RvcjVWZXJ0LCBzaXplb2YoIG1zb19zcHRDdXJ2ZWRDb25uZWN0b3I1VmVydCApIC8gc2l6ZW9mKCBTdnhNU0RmZlZlcnRQYWlyICksCgkoc2FsX3VJbnQxNiopbXNvX3NwdEN1cnZlZENvbm5lY3RvcjVTZWdtLCBzaXplb2YoIG1zb19zcHRDdXJ2ZWRDb25uZWN0b3I1U2VnbSApID4+IDEsCgkoU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEqKW1zb19zcHRDdXJ2ZWRDb25uZWN0b3I1Q2FsYywgc2l6ZW9mKCBtc29fc3B0Q3VydmVkQ29ubmVjdG9yNUNhbGMgKSAvIHNpemVvZiggU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEgKSwKCShzYWxfSW50MzIqKW1zb19zcHRDdXJ2ZWRDb25uZWN0b3I1RGVmYXVsdCwKCU5VTEwsIDAsCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJTlVMTCwgMCwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdEN1cnZlZENvbm5lY3RvcjVIYW5kbGUsIHNpemVvZiggbXNvX3NwdEN1cnZlZENvbm5lY3RvcjVIYW5kbGUgKSAvIHNpemVvZiggU3Z4TVNEZmZIYW5kbGUgKQp9OwoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy90ZWFyZHJvcC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCnN0YXRpYyBjb25zdCBTdnhNU0RmZlZlcnRQYWlyIG1zb19zcHRUZWFyRHJvcFZlcnRbXSA9CnsKCXsgMTA4MDAsIDAgfSwKCXsgMCwgMTA4MDAgfSwJCQkJCQkJCQkJCQkgICAgLy8gWAoJeyAxMDgwMCwgMjE2MDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFkKCXsgMjE2MDAsIDEwODAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBYCgl7IDIxNjAwLCAxMDgwMCB9LCB7IDIxNjAwLCAzIE1TT19JIH0sIHsgMCBNU09fSSwgMSBNU09fSSB9LCAgCQkJLy8gQwoJeyAwIE1TT19JLCAxIE1TT19JIH0sIHsgNCBNU09fSSwgMCB9LCB7IDEwODAwLCAwIH0KfTsKCi8vCXRoZSBsYXN0IG51bWJlciAoMHgqKipuKSAgOiAgMCA9IHN1bSwgMSA9IHByb2QsIDIgPSBtaWQsIDMgPSBhYnMsIDQgPSBtaW4sIDUgPSBtYXgsIDYgPSBpZiwgMTMgPSBzcXJ0LCAxNSA9IGVjbGlwc2UgLi4uCi8vICAgIHRoZSBmaXJzdCBudW1iZXIoMHhuKioqKSAgOiAgMi80LzggdGhlIGZpcnN0L3NlY29uZC90aGlyZCB2YWx1ZSBpcyBub3QgZGlyZWN0bHkgdmFsdWUKc3RhdGljIGNvbnN0IFN2eE1TRGZmQ2FsY3VsYXRpb25EYXRhIG1zb19zcHRUZWFyRHJvcENhbGNbXSA9CnsKCXsgMHgyMDAwICwgeyBERkZfUHJvcF9hZGp1c3RWYWx1ZSAsIDAgLCAwIH0gfSwgIC8vIDAgIGFkanVzdCB2YWx1ZSAjMAoJeyAweDgwMDAgLCB7IDIxNjAwICwgMCAsIDB4MDQwMCB9IH0sIAkJCS8vIDEgIDIxNjAwIC0gQDAgICAgICAgICAgICAgICAgICAgICB5MAoJeyAweDgwMDAgLCB7IDMyNDAwICwgMCAsIDB4MDQwMCB9IH0sICAgICAgICAgICAgLy8gMiAgICgzMjQwMCAtIEAwKQoJeyAweDIwMDEgLCB7IDB4MDQwMiAsIDEgLCAyIH0gfSwgICAgICAgICAgICAgICAgLy8gMyAgICgzMjQwMCAtIEAwKS8yICAgICAgICAgICAgICAgeTEKCXsgMHgyMDAyICwgeyAweDA0MDAgLCAxMDgwMCAsIDAgfSB9LCAJCQkvLyA0ICAoQDArMTA4MDApLzIgICAgICAgICAgICAgICAgICB4Mgp9OwoKLy9tLCBxeCwgcXksIHF4LEMsQwovL3RoZSBsYXN0IG51bWJlcigweCoqKm4pIDogcmVwZWF0IG51bWJlciBvZiB0aGlzIGN1cnJlbnQgU2VnbQpzdGF0aWMgY29uc3Qgc2FsX3VJbnQxNiBtc29fc3B0VGVhckRyb3BTZWdtW10gPQp7CgkweDQwMDAsIDB4YTcwMSwgMHhhODAxLCAweGE3MDEsIDB4MjAwMiwgMHg2MDAwLCAweDgwMDAKfTsKCnN0YXRpYyBjb25zdCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzIG1zb19zcHRUZWFyRHJvcFRleHRSZWN0W10gPQp7Cgl7IHsgMjg2MywgMjg2MyB9LCB7IDE4NzM3LCAxODczNyB9IH0KfTsKCi8vdGhlIHJhbmdlIG9mIGFkanVzdCB2YWx1ZXMKc3RhdGljIGNvbnN0IFN2eE1TRGZmSGFuZGxlIG1zb19zcHRUZWFyRHJvcEhhbmRsZVtdID0KewoJLy9wb3NpdGlvbj0iJDAsMCIgeHJhbmdlPSIxMDgwMCwzMjQwMCIKCXsgICBNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0UgfCBNU0RGRl9IQU5ETEVfRkxBR1NfUkFOR0VfWF9NQVhfSVNfU1BFQ0lBTHwgTVNERkZfSEFORExFX0ZMQUdTX1JBTkdFX1hfTUlOX0lTX1NQRUNJQUwsCgkJMHgxMDAsIDAsIDEwODAwLCAxMDgwMCwgMTA4MDAsIDMyNDAwLCBNeDgwMDAwMDAwLCAweDdmZmZmZmZmIH0KfTsKCi8vdGhlIG51bWJlciBvZiBhZGp1c3QgdmFsdWVzLCB0aGUgZGVmYXVsdCB2YWx1ZXMKc3RhdGljIGNvbnN0IHNhbF9JbnQzMiBtc29fc3B0VGVhckRyb3BEZWZhdWx0W10gPQp7CgkxLCAyMTYwMAp9OwoKc3RhdGljIGNvbnN0IG1zb19DdXN0b21TaGFwZSBtc29UZWFyRHJvcCA9CnsKCShTdnhNU0RmZlZlcnRQYWlyKiltc29fc3B0VGVhckRyb3BWZXJ0LCBzaXplb2YoIG1zb19zcHRUZWFyRHJvcFZlcnQgKSAvIHNpemVvZiggU3Z4TVNEZmZWZXJ0UGFpciApLAoJKHNhbF91SW50MTYqKW1zb19zcHRUZWFyRHJvcFNlZ20sIHNpemVvZiggbXNvX3NwdFRlYXJEcm9wU2VnbSApID4+IDEsCgkoU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEqKW1zb19zcHRUZWFyRHJvcENhbGMsIHNpemVvZihtc29fc3B0VGVhckRyb3BDYWxjKS9zaXplb2YoU3Z4TVNEZmZDYWxjdWxhdGlvbkRhdGEpLAoJKHNhbF9JbnQzMiopbXNvX3NwdFRlYXJEcm9wRGVmYXVsdCwKCShTdnhNU0RmZlRleHRSZWN0YW5nbGVzKiltc29fc3B0VGVhckRyb3BUZXh0UmVjdCwgc2l6ZW9mKCBtc29fc3B0VGVhckRyb3BUZXh0UmVjdCApIC8gc2l6ZW9mKCBTdnhNU0RmZlRleHRSZWN0YW5nbGVzICksCgkyMTYwMCwgMjE2MDAsCglNeDgwMDAwMDAwLCBNeDgwMDAwMDAwLAoJTlVMTCwgMCwKCShTdnhNU0RmZkhhbmRsZSopbXNvX3NwdFRlYXJEcm9wSGFuZGxlLCBzaXplb2YobXNvX3NwdFRlYXJEcm9wSGFuZGxlKS9zaXplb2YoU3Z4TVNEZmZIYW5kbGUpCQkvLyBoYW5kbGVzCn07CgoKY29uc3QgbXNvX0N1c3RvbVNoYXBlKiBHZXRDdXN0b21TaGFwZUNvbnRlbnQoIE1TT19TUFQgZVNwVHlwZSApCnsKCWNvbnN0IG1zb19DdXN0b21TaGFwZSogcEN1c3RvbVNoYXBlID0gTlVMTDsKCXN3aXRjaCggZVNwVHlwZSApCgl7CgkJY2FzZSBtc29fc3B0QXJjIDoJCQkJCQlwQ3VzdG9tU2hhcGUgPSAmbXNvQXJjOyBicmVhazsKCQljYXNlIG1zb19zcHRMaW5lOgkJCQkJCXBDdXN0b21TaGFwZSA9ICZtc29TdHJhaWdodENvbm5lY3RvcjE7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdFJlY3RhbmdsZSA6CQkJCQlwQ3VzdG9tU2hhcGUgPSAmbXNvUmVjdGFuZ2xlOyBicmVhazsKCQljYXNlIG1zb19zcHRQYXJhbGxlbG9ncmFtIDoJCQkJcEN1c3RvbVNoYXBlID0gJm1zb1BhcmFsbGVsb2dyYW07IGJyZWFrOwoJCWNhc2UgbXNvX3NwdFRyYXBlem9pZCA6CQkJCQlwQ3VzdG9tU2hhcGUgPSAmbXNvVHJhcGV6b2lkOyBicmVhazsKCQljYXNlIG1zb19zcHREaWFtb25kIDoJCQkJCXBDdXN0b21TaGFwZSA9ICZtc29EaWFtb25kOyBicmVhazsKCQljYXNlIG1zb19zcHRSb3VuZFJlY3RhbmdsZSA6CQkJcEN1c3RvbVNoYXBlID0gJm1zb1JvdW5kUmVjdGFuZ2xlOyBicmVhazsKCQljYXNlIG1zb19zcHRPY3RhZ29uIDoJCQkJCXBDdXN0b21TaGFwZSA9ICZtc29PY3RhZ29uOyBicmVhazsKCQljYXNlIG1zb19zcHRJc29jZWxlc1RyaWFuZ2xlIDoJCQlwQ3VzdG9tU2hhcGUgPSAmbXNvSXNvY2VsZXNUcmlhbmdsZTsgYnJlYWs7CgkJY2FzZSBtc29fc3B0UmlnaHRUcmlhbmdsZSA6CQkJCXBDdXN0b21TaGFwZSA9ICZtc29SaWdodFRyaWFuZ2xlOyBicmVhazsKCQljYXNlIG1zb19zcHRFbGxpcHNlIDoJCQkJCXBDdXN0b21TaGFwZSA9ICZtc29FbGxpcHNlOyBicmVhazsKCQljYXNlIG1zb19zcHRIZXhhZ29uIDoJCQkJCXBDdXN0b21TaGFwZSA9ICZtc29IZXhhZ29uOyBicmVhazsKCQljYXNlIG1zb19zcHRQbHVzIDoJCQkJCQlwQ3VzdG9tU2hhcGUgPSAmbXNvUGx1czsgYnJlYWs7CgkJY2FzZSBtc29fc3B0UGVudGFnb24gOgkJCQkJcEN1c3RvbVNoYXBlID0gJm1zb1BlbnRhZ29uOyBicmVhazsKCQljYXNlIG1zb19zcHRDYW4gOgkJCQkJCXBDdXN0b21TaGFwZSA9ICZtc29DYW47IGJyZWFrOwoJCWNhc2UgbXNvX3NwdEN1YmUgOgkJCQkJCXBDdXN0b21TaGFwZSA9ICZtc29DdWJlOyBicmVhazsKCQljYXNlIG1zb19zcHRCYWxsb29uIDoJCQkJCXBDdXN0b21TaGFwZSA9ICZtc29CYWxsb29uOyBicmVhazsKCQljYXNlIG1zb19zcHRBY3Rpb25CdXR0b25CbGFuayA6CQkJcEN1c3RvbVNoYXBlID0gJm1zb0FjdGlvbkJ1dHRvbkJsYW5rOyBicmVhazsKCQljYXNlIG1zb19zcHRBY3Rpb25CdXR0b25Ib21lIDoJCQlwQ3VzdG9tU2hhcGUgPSAmbXNvQWN0aW9uQnV0dG9uSG9tZTsgYnJlYWs7CgkJY2FzZSBtc29fc3B0QWN0aW9uQnV0dG9uSGVscCA6CQkJcEN1c3RvbVNoYXBlID0gJm1zb0FjdGlvbkJ1dHRvbkhlbHA7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdEFjdGlvbkJ1dHRvbkluZm9ybWF0aW9uIDoJcEN1c3RvbVNoYXBlID0gJm1zb0FjdGlvbkJ1dHRvbkluZm9ybWF0aW9uOyBicmVhazsKCQljYXNlIG1zb19zcHRBY3Rpb25CdXR0b25CYWNrUHJldmlvdXMgOglwQ3VzdG9tU2hhcGUgPSAmbXNvQWN0aW9uQnV0dG9uQmFja1ByZXZpb3VzOyBicmVhazsKCQljYXNlIG1zb19zcHRBY3Rpb25CdXR0b25Gb3J3YXJkTmV4dCA6CXBDdXN0b21TaGFwZSA9ICZtc29BY3Rpb25CdXR0b25Gb3J3YXJkTmV4dDsgYnJlYWs7CgkJY2FzZSBtc29fc3B0QWN0aW9uQnV0dG9uQmVnaW5uaW5nIDoJCXBDdXN0b21TaGFwZSA9ICZtc29BY3Rpb25CdXR0b25CZWdpbm5pbmc7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdEFjdGlvbkJ1dHRvbkVuZCA6CQkJcEN1c3RvbVNoYXBlID0gJm1zb0FjdGlvbkJ1dHRvbkVuZDsgYnJlYWs7CgkJY2FzZSBtc29fc3B0QWN0aW9uQnV0dG9uUmV0dXJuIDoJCXBDdXN0b21TaGFwZSA9ICZtc29BY3Rpb25CdXR0b25SZXR1cm47CWJyZWFrOwoJCWNhc2UgbXNvX3NwdEFjdGlvbkJ1dHRvbkRvY3VtZW50IDoJCXBDdXN0b21TaGFwZSA9ICZtc29BY3Rpb25CdXR0b25Eb2N1bWVudDsgYnJlYWs7CgkJY2FzZSBtc29fc3B0QWN0aW9uQnV0dG9uU291bmQgOgkJCXBDdXN0b21TaGFwZSA9ICZtc29BY3Rpb25CdXR0b25Tb3VuZDsgYnJlYWs7CgkJY2FzZSBtc29fc3B0QWN0aW9uQnV0dG9uTW92aWUgOgkJCXBDdXN0b21TaGFwZSA9ICZtc29BY3Rpb25CdXR0b25Nb3ZpZTsgYnJlYWs7CgkJY2FzZSBtc29fc3B0QmV2ZWwgOgkJCQkJCXBDdXN0b21TaGFwZSA9ICZtc29CZXZlbDsgYnJlYWs7CgkJY2FzZSBtc29fc3B0Rm9sZGVkQ29ybmVyIDoJCQkJcEN1c3RvbVNoYXBlID0gJm1zb0ZvbGRlZENvcm5lcjsgYnJlYWs7CgkJY2FzZSBtc29fc3B0U21pbGV5RmFjZSA6CQkJCXBDdXN0b21TaGFwZSA9ICZtc29TbWlsZXlGYWNlOwlicmVhazsKCQljYXNlIG1zb19zcHREb251dCA6CQkJCQkJcEN1c3RvbVNoYXBlID0gJm1zb0RvbnV0OyBicmVhazsKCQljYXNlIG1zb19zcHROb1Ntb2tpbmcgOgkJCQkJcEN1c3RvbVNoYXBlID0gJm1zb05vU21va2luZzsgYnJlYWs7CgkJY2FzZSBtc29fc3B0QmxvY2tBcmMgOgkJCQkJcEN1c3RvbVNoYXBlID0gJm1zb0Jsb2NrQXJjOyBicmVhazsKCQljYXNlIG1zb19zcHRIZWFydCA6CQkJCQkJcEN1c3RvbVNoYXBlID0gJm1zb0hlYXJ0OyBicmVhazsKCQljYXNlIG1zb19zcHRMaWdodG5pbmdCb2x0IDoJCQkJcEN1c3RvbVNoYXBlID0gJm1zb0xpZ2h0bmluZ0JvbGQ7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdFN1bgk6CQkJCQkJcEN1c3RvbVNoYXBlID0gJm1zb1N1bjsgYnJlYWs7CgkJY2FzZSBtc29fc3B0TW9vbiA6CQkJCQkJcEN1c3RvbVNoYXBlID0gJm1zb01vb247IGJyZWFrOwoJCWNhc2UgbXNvX3NwdEJyYWNrZXRQYWlyIDoJCQkJcEN1c3RvbVNoYXBlID0gJm1zb0JyYWNrZXRQYWlyOyBicmVhazsKCQljYXNlIG1zb19zcHRCcmFjZVBhaXIgOgkJCQkJcEN1c3RvbVNoYXBlID0gJm1zb0JyYWNlUGFpcjsgYnJlYWs7CgkJY2FzZSBtc29fc3B0UGxhcXVlIDoJCQkJCXBDdXN0b21TaGFwZSA9ICZtc29QbGFxdWU7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdExlZnRCcmFja2V0IDoJCQkJcEN1c3RvbVNoYXBlID0gJm1zb0xlZnRCcmFja2V0OyBicmVhazsKCQljYXNlIG1zb19zcHRSaWdodEJyYWNrZXQgOgkJCQlwQ3VzdG9tU2hhcGUgPSAmbXNvUmlnaHRCcmFja2V0OyBicmVhazsKCQljYXNlIG1zb19zcHRMZWZ0QnJhY2UgOgkJCQkJcEN1c3RvbVNoYXBlID0gJm1zb0xlZnRCcmFjZTsgYnJlYWs7CgkJY2FzZSBtc29fc3B0UmlnaHRCcmFjZSA6CQkJCXBDdXN0b21TaGFwZSA9ICZtc29SaWdodEJyYWNlOyBicmVhazsKCQljYXNlIG1zb19zcHRBcnJvdyA6CQkJCQkJcEN1c3RvbVNoYXBlID0gJm1zb0Fycm93OyBicmVhazsKCQljYXNlIG1zb19zcHRVcEFycm93IDoJCQkJCXBDdXN0b21TaGFwZSA9ICZtc29VcEFycm93OyBicmVhazsKCQljYXNlIG1zb19zcHREb3duQXJyb3cgOgkJCQkJcEN1c3RvbVNoYXBlID0gJm1zb0Rvd25BcnJvdzsgYnJlYWs7CgkJY2FzZSBtc29fc3B0TGVmdEFycm93IDoJCQkJCXBDdXN0b21TaGFwZSA9ICZtc29MZWZ0QXJyb3c7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdExlZnRSaWdodEFycm93IDoJCQlwQ3VzdG9tU2hhcGUgPSAmbXNvTGVmdFJpZ2h0QXJyb3c7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdFVwRG93bkFycm93IDoJCQkJcEN1c3RvbVNoYXBlID0gJm1zb1VwRG93bkFycm93OyBicmVhazsKCQljYXNlIG1zb19zcHRRdWFkQXJyb3cgOgkJCQkJcEN1c3RvbVNoYXBlID0gJm1zb1F1YWRBcnJvdzsgYnJlYWs7CgkJY2FzZSBtc29fc3B0TGVmdFJpZ2h0VXBBcnJvdyA6CQkJcEN1c3RvbVNoYXBlID0gJm1zb0xlZnRSaWdodFVwQXJyb3c7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdEJlbnRBcnJvdyA6CQkJCQlwQ3VzdG9tU2hhcGUgPSAmbXNvQmVudEFycm93OyBicmVhazsKCQljYXNlIG1zb19zcHRVdHVybkFycm93IDoJCQkJcEN1c3RvbVNoYXBlID0gJm1zb1V0dXJuQXJyb3c7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdExlZnRVcEFycm93IDoJCQkJcEN1c3RvbVNoYXBlID0gJm1zb0xlZnRVcEFycm93OyBicmVhazsKCQljYXNlIG1zb19zcHRCZW50VXBBcnJvdyA6CQkJCXBDdXN0b21TaGFwZSA9ICZtc29CZW50VXBBcnJvdzsgYnJlYWs7CgkJY2FzZSBtc29fc3B0Q3VydmVkUmlnaHRBcnJvdyA6CQkJcEN1c3RvbVNoYXBlID0gJm1zb0N1cnZlZFJpZ2h0QXJyb3c7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdEN1cnZlZExlZnRBcnJvdyA6CQkJcEN1c3RvbVNoYXBlID0gJm1zb0N1cnZlZExlZnRBcnJvdzsgYnJlYWs7CgkJY2FzZSBtc29fc3B0Q3VydmVkVXBBcnJvdyA6CQkJCXBDdXN0b21TaGFwZSA9ICZtc29DdXJ2ZWRVcEFycm93OyBicmVhazsKCQljYXNlIG1zb19zcHRDdXJ2ZWREb3duQXJyb3cgOgkJCXBDdXN0b21TaGFwZSA9ICZtc29DdXJ2ZWREb3duQXJyb3c7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdFN0cmlwZWRSaWdodEFycm93IDoJCQlwQ3VzdG9tU2hhcGUgPSAmbXNvU3RyaXBlZFJpZ2h0QXJyb3c7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdE5vdGNoZWRSaWdodEFycm93IDoJCQlwQ3VzdG9tU2hhcGUgPSAmbXNvTm90Y2hlZFJpZ2h0QXJyb3c7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdEhvbWVQbGF0ZSA6CQkJCQlwQ3VzdG9tU2hhcGUgPSAmbXNvSG9tZVBsYXRlOyBicmVhazsKCQljYXNlIG1zb19zcHRDaGV2cm9uIDoJCQkJCXBDdXN0b21TaGFwZSA9ICZtc29DaGV2cm9uOyBicmVhazsKCQljYXNlIG1zb19zcHRSaWdodEFycm93Q2FsbG91dCA6CQkJcEN1c3RvbVNoYXBlID0gJm1zb1JpZ2h0QXJyb3dDYWxsb3V0OyBicmVhazsKCQljYXNlIG1zb19zcHRMZWZ0QXJyb3dDYWxsb3V0IDoJCQlwQ3VzdG9tU2hhcGUgPSAmbXNvTGVmdEFycm93Q2FsbG91dDsgYnJlYWs7CgkJY2FzZSBtc29fc3B0VXBBcnJvd0NhbGxvdXQgOgkJCXBDdXN0b21TaGFwZSA9ICZtc29VcEFycm93Q2FsbG91dDsgYnJlYWs7CgkJY2FzZSBtc29fc3B0RG93bkFycm93Q2FsbG91dCA6CQkJcEN1c3RvbVNoYXBlID0gJm1zb0Rvd25BcnJvd0NhbGxvdXQ7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdExlZnRSaWdodEFycm93Q2FsbG91dCA6CQlwQ3VzdG9tU2hhcGUgPSAmbXNvTGVmdFJpZ2h0QXJyb3dDYWxsb3V0OyBicmVhazsKCQljYXNlIG1zb19zcHRVcERvd25BcnJvd0NhbGxvdXQgOgkJcEN1c3RvbVNoYXBlID0gJm1zb1VwRG93bkFycm93Q2FsbG91dDsgYnJlYWs7CgkJY2FzZSBtc29fc3B0UXVhZEFycm93Q2FsbG91dCA6CQkJcEN1c3RvbVNoYXBlID0gJm1zb1F1YWRBcnJvd0NhbGxvdXQ7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdENpcmN1bGFyQXJyb3cgOgkJCQlwQ3VzdG9tU2hhcGUgPSAmbXNvQ2lyY3VsYXJBcnJvdzsgYnJlYWs7CgkJY2FzZSBtc29fc3B0SXJyZWd1bGFyU2VhbDEgOgkJCXBDdXN0b21TaGFwZSA9ICZtc29JcnJlZ3VsYXJTZWFsMTsgYnJlYWs7CgkJY2FzZSBtc29fc3B0SXJyZWd1bGFyU2VhbDIgOgkJCXBDdXN0b21TaGFwZSA9ICZtc29JcnJlZ3VsYXJTZWFsMjsgYnJlYWs7CgkJY2FzZSBtc29fc3B0U2VhbDQgOgkJCQkJCXBDdXN0b21TaGFwZSA9ICZtc29TZWFsNDsgYnJlYWs7CgkJY2FzZSBtc29fc3B0U3RhciA6CQkJCQkJcEN1c3RvbVNoYXBlID0gJm1zb1N0YXI7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdFNlYWw4IDoJCQkJCQlwQ3VzdG9tU2hhcGUgPSAmbXNvU2VhbDg7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdFNlYWwgOgoJCWNhc2UgbXNvX3NwdFNlYWwxNiA6CQkJCQlwQ3VzdG9tU2hhcGUgPSAmbXNvU2VhbDE2OyBicmVhazsKCQljYXNlIG1zb19zcHRTZWFsMjQgOgkJCQkJcEN1c3RvbVNoYXBlID0gJm1zb1NlYWwyNDsgYnJlYWs7CgkJY2FzZSBtc29fc3B0U2VhbDMyIDoJCQkJCXBDdXN0b21TaGFwZSA9ICZtc29TZWFsMzI7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdFJpYmJvbjIgOgkJCQkJcEN1c3RvbVNoYXBlID0gJm1zb1JpYmJvbjI7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdFJpYmJvbiA6CQkJCQlwQ3VzdG9tU2hhcGUgPSAmbXNvUmliYm9uOyBicmVhazsKCQljYXNlIG1zb19zcHRFbGxpcHNlUmliYm9uMiA6CQkJcEN1c3RvbVNoYXBlID0gJm1zb3NwdEVsbGlwc2VSaWJib24yOyBicmVhazsJLy8gU0o6IFRPRE8KCQljYXNlIG1zb19zcHRFbGxpcHNlUmliYm9uIDoJCQkJcEN1c3RvbVNoYXBlID0gJm1zb3NwdEVsbGlwc2VSaWJib247IGJyZWFrOwkvLyBTSjogVE9ETwoJCWNhc2UgbXNvX3NwdFZlcnRpY2FsU2Nyb2xsIDoJCQlwQ3VzdG9tU2hhcGUgPSAmbXNvVmVydGljYWxTY3JvbGw7CWJyZWFrOwoJCWNhc2UgbXNvX3NwdEhvcml6b250YWxTY3JvbGwgOgkJCXBDdXN0b21TaGFwZSA9ICZtc29Ib3Jpem9udGFsU2Nyb2xsOyBicmVhazsKCQljYXNlIG1zb19zcHRGbG93Q2hhcnRQcm9jZXNzIDoJCQlwQ3VzdG9tU2hhcGUgPSAmbXNvRmxvd0NoYXJ0UHJvY2VzczsgYnJlYWs7CgkJY2FzZSBtc29fc3B0Rmxvd0NoYXJ0QWx0ZXJuYXRlUHJvY2VzcyA6CXBDdXN0b21TaGFwZSA9ICZtc29GbG93Q2hhcnRBbHRlcm5hdGVQcm9jZXNzOyBicmVhazsKCQljYXNlIG1zb19zcHRGbG93Q2hhcnREZWNpc2lvbiA6CQkJcEN1c3RvbVNoYXBlID0gJm1zb0Zsb3dDaGFydERlY2lzaW9uOyBicmVhazsKCQljYXNlIG1zb19zcHRGbG93Q2hhcnRJbnB1dE91dHB1dCA6CQlwQ3VzdG9tU2hhcGUgPSAmbXNvRmxvd0NoYXJ0SW5wdXRPdXRwdXQ7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdEZsb3dDaGFydFByZWRlZmluZWRQcm9jZXNzIDpwQ3VzdG9tU2hhcGUgPSAmbXNvRmxvd0NoYXJ0UHJlZGVmaW5lZFByb2Nlc3M7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdEZsb3dDaGFydEludGVybmFsU3RvcmFnZSA6CXBDdXN0b21TaGFwZSA9ICZtc29GbG93Q2hhcnRJbnRlcm5hbFN0b3JhZ2U7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdEZsb3dDaGFydERvY3VtZW50IDoJCQlwQ3VzdG9tU2hhcGUgPSAmbXNvRmxvd0NoYXJ0RG9jdW1lbnQ7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdEZsb3dDaGFydE11bHRpZG9jdW1lbnQgOglwQ3VzdG9tU2hhcGUgPSAmbXNvRmxvd0NoYXJ0TXVsdGlkb2N1bWVudDsgYnJlYWs7CgkJY2FzZSBtc29fc3B0Rmxvd0NoYXJ0VGVybWluYXRvciA6CQlwQ3VzdG9tU2hhcGUgPSAmbXNvRmxvd0NoYXJ0VGVybWluYXRvcjsgYnJlYWs7CgkJY2FzZSBtc29fc3B0Rmxvd0NoYXJ0UHJlcGFyYXRpb24gOgkJcEN1c3RvbVNoYXBlID0gJm1zb0Zsb3dDaGFydFByZXBhcmF0aW9uOyBicmVhazsKCQljYXNlIG1zb19zcHRGbG93Q2hhcnRNYW51YWxJbnB1dCA6CQlwQ3VzdG9tU2hhcGUgPSAmbXNvRmxvd0NoYXJ0TWFudWFsSW5wdXQ7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdEZsb3dDaGFydE1hbnVhbE9wZXJhdGlvbiA6CXBDdXN0b21TaGFwZSA9ICZtc29GbG93Q2hhcnRNYW51YWxPcGVyYXRpb247IGJyZWFrOwoJCWNhc2UgbXNvX3NwdEZsb3dDaGFydENvbm5lY3RvciA6CQlwQ3VzdG9tU2hhcGUgPSAmbXNvRmxvd0NoYXJ0Q29ubmVjdG9yOyBicmVhazsKCQljYXNlIG1zb19zcHRGbG93Q2hhcnRPZmZwYWdlQ29ubmVjdG9yIDogcEN1c3RvbVNoYXBlID0gJm1zb0Zsb3dDaGFydE9mZnBhZ2VDb25uZWN0b3I7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdEZsb3dDaGFydFB1bmNoZWRDYXJkIDoJCXBDdXN0b21TaGFwZSA9ICZtc29GbG93Q2hhcnRQdW5jaGVkQ2FyZDsgYnJlYWs7CgkJY2FzZSBtc29fc3B0Rmxvd0NoYXJ0UHVuY2hlZFRhcGUgOgkJcEN1c3RvbVNoYXBlID0gJm1zb0Zsb3dDaGFydFB1bmNoZWRUYXBlOyBicmVhazsKCQljYXNlIG1zb19zcHRGbG93Q2hhcnRTdW1taW5nSnVuY3Rpb24gOglwQ3VzdG9tU2hhcGUgPSAmbXNvRmxvd0NoYXJ0U3VtbWluZ0p1bmN0aW9uOyBicmVhazsKCQljYXNlIG1zb19zcHRGbG93Q2hhcnRPciA6CQkJCXBDdXN0b21TaGFwZSA9ICZtc29GbG93Q2hhcnRPcjsgYnJlYWs7CgkJY2FzZSBtc29fc3B0Rmxvd0NoYXJ0Q29sbGF0ZSA6CQkJcEN1c3RvbVNoYXBlID0gJm1zb0Zsb3dDaGFydENvbGxhdGU7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdEZsb3dDaGFydFNvcnQgOgkJCQlwQ3VzdG9tU2hhcGUgPSAmbXNvRmxvd0NoYXJ0U29ydDsgYnJlYWs7CgkJY2FzZSBtc29fc3B0Rmxvd0NoYXJ0RXh0cmFjdCA6CQkJcEN1c3RvbVNoYXBlID0gJm1zb0Zsb3dDaGFydEV4dHJhY3Q7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdEZsb3dDaGFydE1lcmdlIDoJCQlwQ3VzdG9tU2hhcGUgPSAmbXNvRmxvd0NoYXJ0TWVyZ2U7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdEZsb3dDaGFydE9ubGluZVN0b3JhZ2UgOglwQ3VzdG9tU2hhcGUgPSAmbXNvRmxvd0NoYXJ0T25saW5lU3RvcmFnZTsgYnJlYWs7CgkJY2FzZSBtc29fc3B0Rmxvd0NoYXJ0RGVsYXkgOgkJCXBDdXN0b21TaGFwZSA9ICZtc29GbG93Q2hhcnREZWxheTsgYnJlYWs7CgkJY2FzZSBtc29fc3B0Rmxvd0NoYXJ0TWFnbmV0aWNUYXBlIDoJCXBDdXN0b21TaGFwZSA9ICZtc29GbG93Q2hhcnRNYWduZXRpY1RhcGU7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdEZsb3dDaGFydE1hZ25ldGljRGlzayA6CQlwQ3VzdG9tU2hhcGUgPSAmbXNvRmxvd0NoYXJ0TWFnbmV0aWNEaXNrOyBicmVhazsKCQljYXNlIG1zb19zcHRGbG93Q2hhcnRNYWduZXRpY0RydW0gOgkJcEN1c3RvbVNoYXBlID0gJm1zb0Zsb3dDaGFydE1hZ25ldGljRHJ1bTsgYnJlYWs7CgkJY2FzZSBtc29fc3B0Rmxvd0NoYXJ0RGlzcGxheSA6CQkJcEN1c3RvbVNoYXBlID0gJm1zb0Zsb3dDaGFydERpc3BsYXk7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdFdlZGdlUmVjdENhbGxvdXQgOgkJCXBDdXN0b21TaGFwZSA9ICZtc29XZWRnZVJlY3RDYWxsb3V0OyBicmVhazsKCQljYXNlIG1zb19zcHRXZWRnZVJSZWN0Q2FsbG91dCA6CQkJcEN1c3RvbVNoYXBlID0gJm1zb1dlZGdlUlJlY3RDYWxsb3V0OyBicmVhazsKCQljYXNlIG1zb19zcHRXZWRnZUVsbGlwc2VDYWxsb3V0IDoJCXBDdXN0b21TaGFwZSA9ICZtc29XZWRnZUVsbGlwc2VDYWxsb3V0OyBicmVhazsKCQljYXNlIG1zb19zcHRDbG91ZENhbGxvdXQgOgkJCQlwQ3VzdG9tU2hhcGUgPSAmbXNvQ2xvdWRDYWxsb3V0OyBicmVhazsKCQljYXNlIG1zb19zcHRXYXZlIDoJCQkJCQlwQ3VzdG9tU2hhcGUgPSAmbXNvV2F2ZTsgYnJlYWs7CgkJY2FzZSBtc29fc3B0RG91YmxlV2F2ZSA6CQkJCXBDdXN0b21TaGFwZSA9ICZtc29Eb3VibGVXYXZlOyBicmVhazsKCgkJLy8gY2FsbG91dAoJCWNhc2UgbXNvX3NwdENhbGxvdXQxIDoJCQkJCXBDdXN0b21TaGFwZSA9ICZtc29DYWxsb3V0MTsgYnJlYWs7CgkJY2FzZSBtc29fc3B0Q2FsbG91dDIgOgkJCQkJcEN1c3RvbVNoYXBlID0gJm1zb0NhbGxvdXQyOyBicmVhazsKCQljYXNlIG1zb19zcHRDYWxsb3V0MyA6CQkJCQlwQ3VzdG9tU2hhcGUgPSAmbXNvQ2FsbG91dDM7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdEFjY2VudENhbGxvdXQxIDoJCQlwQ3VzdG9tU2hhcGUgPSAmbXNvQWNjZW50Q2FsbG91dDE7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdEFjY2VudENhbGxvdXQyIDoJCQlwQ3VzdG9tU2hhcGUgPSAmbXNvQWNjZW50Q2FsbG91dDI7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdEFjY2VudENhbGxvdXQzIDoJCQlwQ3VzdG9tU2hhcGUgPSAmbXNvQWNjZW50Q2FsbG91dDM7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdEJvcmRlckNhbGxvdXQxIDoJCQlwQ3VzdG9tU2hhcGUgPSAmbXNvQm9yZGVyQ2FsbG91dDE7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdEJvcmRlckNhbGxvdXQyIDoJCQlwQ3VzdG9tU2hhcGUgPSAmbXNvQm9yZGVyQ2FsbG91dDI7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdEJvcmRlckNhbGxvdXQzIDoJCQlwQ3VzdG9tU2hhcGUgPSAmbXNvQm9yZGVyQ2FsbG91dDM7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdEFjY2VudEJvcmRlckNhbGxvdXQxIDoJCXBDdXN0b21TaGFwZSA9ICZtc29BY2NlbnRCb3JkZXJDYWxsb3V0MTsgYnJlYWs7CgkJY2FzZSBtc29fc3B0QWNjZW50Qm9yZGVyQ2FsbG91dDIgOgkJcEN1c3RvbVNoYXBlID0gJm1zb0FjY2VudEJvcmRlckNhbGxvdXQyOyBicmVhazsKCQljYXNlIG1zb19zcHRBY2NlbnRCb3JkZXJDYWxsb3V0MyA6CQlwQ3VzdG9tU2hhcGUgPSAmbXNvQWNjZW50Qm9yZGVyQ2FsbG91dDM7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdENhbGxvdXQ5MCA6CQkJCQlwQ3VzdG9tU2hhcGUgPSAmbXNvQ2FsbG91dDkwOyBicmVhazsKCQljYXNlIG1zb19zcHRBY2NlbnRDYWxsb3V0OTAgOgkJCXBDdXN0b21TaGFwZSA9ICZtc29BY2NlbnRDYWxsb3V0OTA7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdEJvcmRlckNhbGxvdXQ5MCA6CQkJcEN1c3RvbVNoYXBlID0gJm1zb0JvcmRlckNhbGxvdXQ5MDsgYnJlYWs7CgkJY2FzZSBtc29fc3B0QWNjZW50Qm9yZGVyQ2FsbG91dDkwIDoJCXBDdXN0b21TaGFwZSA9ICZtc29BY2NlbnRCb3JkZXJDYWxsb3V0OTA7IGJyZWFrOwoKCQkvLyBjb25uZWN0b3JzCgkJY2FzZSBtc29fc3B0U3RyYWlnaHRDb25uZWN0b3IxIDoJCXBDdXN0b21TaGFwZSA9ICZtc29TdHJhaWdodENvbm5lY3RvcjE7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdEJlbnRDb25uZWN0b3IyIDoJCQlwQ3VzdG9tU2hhcGUgPSAmbXNvQmVudENvbm5lY3RvcjI7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdEJlbnRDb25uZWN0b3IzIDoJCQlwQ3VzdG9tU2hhcGUgPSAmbXNvQmVudENvbm5lY3RvcjM7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdEJlbnRDb25uZWN0b3I0IDoJCQlwQ3VzdG9tU2hhcGUgPSAmbXNvQmVudENvbm5lY3RvcjQ7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdEJlbnRDb25uZWN0b3I1IDoJCQlwQ3VzdG9tU2hhcGUgPSAmbXNvQmVudENvbm5lY3RvcjU7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdEN1cnZlZENvbm5lY3RvcjIgOgkJCXBDdXN0b21TaGFwZSA9ICZtc29DdXJ2ZWRDb25uZWN0b3IyOyBicmVhazsKCQljYXNlIG1zb19zcHRDdXJ2ZWRDb25uZWN0b3IzIDoJCQlwQ3VzdG9tU2hhcGUgPSAmbXNvQ3VydmVkQ29ubmVjdG9yMzsgYnJlYWs7CgkJY2FzZSBtc29fc3B0Q3VydmVkQ29ubmVjdG9yNCA6CQkJcEN1c3RvbVNoYXBlID0gJm1zb0N1cnZlZENvbm5lY3RvcjQ7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdEN1cnZlZENvbm5lY3RvcjUgOgkJCXBDdXN0b21TaGFwZSA9ICZtc29DdXJ2ZWRDb25uZWN0b3I1OyBicmVhazsKCgkJLy8gRG9udCBrbm93LCBzaW1wbHkgbWFwcGluZyB0byBUZXh0U2ltcGxlCgkJY2FzZSBtc29fc3B0VGV4dE9uUmluZyA6CgkJY2FzZSBtc29fc3B0VGV4dE9uQ3VydmUgOgoJCWNhc2UgbXNvX3NwdFRleHRSaW5nIDoKCQljYXNlIG1zb19zcHRUZXh0V2F2ZSA6CgkJY2FzZSBtc29fc3B0VGV4dEN1cnZlIDoKCQljYXNlIG1zb19zcHRUZXh0SGV4YWdvbiA6CgkJY2FzZSBtc29fc3B0VGV4dE9jdGFnb24gOgoJCWNhc2UgbXNvX3NwdFRleHRCb3gJOgkJCQkJcEN1c3RvbVNoYXBlID0gJm1zb1RleHRTaW1wbGU7IGJyZWFrOwoKCQkvLyBGb250V29yawoJCWNhc2UgbXNvX3NwdFRleHRTaW1wbGUgOgoJCWNhc2UgbXNvX3NwdFRleHRQbGFpblRleHQgOgkJCQlwQ3VzdG9tU2hhcGUgPSAmbXNvVGV4dFBsYWluVGV4dDsgYnJlYWs7CgkJY2FzZSBtc29fc3B0VGV4dFN0b3AgOgkJCQkJcEN1c3RvbVNoYXBlID0gJm1zb1RleHRTdG9wOyBicmVhazsKCQljYXNlIG1zb19zcHRUZXh0VHJpYW5nbGUgOgkJCQlwQ3VzdG9tU2hhcGUgPSAmbXNvVGV4dFRyaWFuZ2xlOyBicmVhazsKCQljYXNlIG1zb19zcHRUZXh0VHJpYW5nbGVJbnZlcnRlZCA6CQlwQ3VzdG9tU2hhcGUgPSAmbXNvVGV4dFRyaWFuZ2xlSW52ZXJ0ZWQ7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdFRleHRDaGV2cm9uIDoJCQkJcEN1c3RvbVNoYXBlID0gJm1zb1RleHRDaGV2cm9uOyBicmVhazsKCQljYXNlIG1zb19zcHRUZXh0Q2hldnJvbkludmVydGVkIDoJCXBDdXN0b21TaGFwZSA9ICZtc29UZXh0Q2hldnJvbkludmVydGVkOyBicmVhazsKCQljYXNlIG1zb19zcHRUZXh0UmluZ0luc2lkZSA6CQkJcEN1c3RvbVNoYXBlID0gJm1zb1RleHRSaW5nSW5zaWRlOyBicmVhazsJLy8gU0o6IFRPRE8tPnRoZSBvcmllbnRhdGlvbiBvZiB0aGUgZWxsaXBzZSBuZWVkcyB0byBiZSBjaGFuZ2VkCgkJY2FzZSBtc29fc3B0VGV4dFJpbmdPdXRzaWRlIDoJCQlwQ3VzdG9tU2hhcGUgPSAmbXNvVGV4dFJpbmdPdXRzaWRlOyBicmVhazsKCQljYXNlIG1zb19zcHRUZXh0RmFkZVJpZ2h0IDoJCQkJcEN1c3RvbVNoYXBlID0gJm1zb1RleHRGYWRlUmlnaHQ7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdFRleHRGYWRlTGVmdCA6CQkJCXBDdXN0b21TaGFwZSA9ICZtc29UZXh0RmFkZUxlZnQ7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdFRleHRGYWRlVXAgOgkJCQlwQ3VzdG9tU2hhcGUgPSAmbXNvVGV4dEZhZGVVcDsgYnJlYWs7CgkJY2FzZSBtc29fc3B0VGV4dEZhZGVEb3duIDoJCQkJcEN1c3RvbVNoYXBlID0gJm1zb1RleHRGYWRlRG93bjsgYnJlYWs7CgkJY2FzZSBtc29fc3B0VGV4dFNsYW50VXAgOgkJCQlwQ3VzdG9tU2hhcGUgPSAmbXNvVGV4dFNsYW50VXA7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdFRleHRTbGFudERvd24gOgkJCQlwQ3VzdG9tU2hhcGUgPSAmbXNvVGV4dFNsYW50RG93bjsgYnJlYWs7CgkJY2FzZSBtc29fc3B0VGV4dENhc2NhZGVVcCA6CQkJCXBDdXN0b21TaGFwZSA9ICZtc29UZXh0Q2FzY2FkZVVwOyBicmVhazsKCQljYXNlIG1zb19zcHRUZXh0Q2FzY2FkZURvd24gOgkJCXBDdXN0b21TaGFwZSA9ICZtc29UZXh0Q2FzY2FkZURvd247IGJyZWFrOwoJCWNhc2UgbXNvX3NwdFRleHRBcmNoVXBDdXJ2ZSA6CQkJcEN1c3RvbVNoYXBlID0gJm1zb1RleHRBcmNoVXBDdXJ2ZTsgYnJlYWs7CgkJY2FzZSBtc29fc3B0VGV4dEFyY2hEb3duQ3VydmUgOgkJCXBDdXN0b21TaGFwZSA9ICZtc29UZXh0QXJjaERvd25DdXJ2ZTsgYnJlYWs7CgkJY2FzZSBtc29fc3B0VGV4dENpcmNsZUN1cnZlIDoJCQlwQ3VzdG9tU2hhcGUgPSAmbXNvVGV4dENpcmNsZUN1cnZlOyBicmVhazsKCQljYXNlIG1zb19zcHRUZXh0QnV0dG9uQ3VydmUgOgkJCXBDdXN0b21TaGFwZSA9ICZtc29UZXh0QnV0dG9uQ3VydmU7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdFRleHRBcmNoVXBQb3VyIDoJCQlwQ3VzdG9tU2hhcGUgPSAmbXNvVGV4dEFyY2hVcFBvdXI7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdFRleHRBcmNoRG93blBvdXIgOgkJCXBDdXN0b21TaGFwZSA9ICZtc29UZXh0QXJjaERvd25Qb3VyOyBicmVhazsKCQljYXNlIG1zb19zcHRUZXh0Q2lyY2xlUG91ciA6CQkJcEN1c3RvbVNoYXBlID0gJm1zb1RleHRDaXJjbGVQb3VyOyBicmVhazsKCQljYXNlIG1zb19zcHRUZXh0QnV0dG9uUG91ciA6CQkJcEN1c3RvbVNoYXBlID0gJm1zb1RleHRCdXR0b25Qb3VyOyBicmVhazsKCQljYXNlIG1zb19zcHRUZXh0Q3VydmVVcCA6CQkJCXBDdXN0b21TaGFwZSA9ICZtc29UZXh0Q3VydmVVcDsgYnJlYWs7CgkJY2FzZSBtc29fc3B0VGV4dEN1cnZlRG93biA6CQkJCXBDdXN0b21TaGFwZSA9ICZtc29UZXh0Q3VydmVEb3duOyBicmVhazsKCQljYXNlIG1zb19zcHRUZXh0Q2FuVXAgOgkJCQkJcEN1c3RvbVNoYXBlID0gJm1zb1RleHRDYW5VcDsgYnJlYWs7CgkJY2FzZSBtc29fc3B0VGV4dENhbkRvd24gOgkJCQlwQ3VzdG9tU2hhcGUgPSAmbXNvVGV4dENhbkRvd247IGJyZWFrOwoJCWNhc2UgbXNvX3NwdFRleHRJbmZsYXRlIDoJCQkJcEN1c3RvbVNoYXBlID0gJm1zb1RleHRJbmZsYXRlOyBicmVhazsKCQljYXNlIG1zb19zcHRUZXh0RGVmbGF0ZSA6CQkJCXBDdXN0b21TaGFwZSA9ICZtc29UZXh0RGVmbGF0ZTsgYnJlYWs7CgkJY2FzZSBtc29fc3B0VGV4dEluZmxhdGVCb3R0b20gOgkJCXBDdXN0b21TaGFwZSA9ICZtc29UZXh0SW5mbGF0ZUJvdHRvbTsgYnJlYWs7CgkJY2FzZSBtc29fc3B0VGV4dERlZmxhdGVCb3R0b20gOgkJCXBDdXN0b21TaGFwZSA9ICZtc29UZXh0RGVmbGF0ZUJvdHRvbTsgYnJlYWs7CgkJY2FzZSBtc29fc3B0VGV4dEluZmxhdGVUb3AgOgkJCXBDdXN0b21TaGFwZSA9ICZtc29UZXh0SW5mbGF0ZVRvcDsgYnJlYWs7CgkJY2FzZSBtc29fc3B0VGV4dERlZmxhdGVUb3AgOgkJCXBDdXN0b21TaGFwZSA9ICZtc29UZXh0RGVmbGF0ZVRvcDsgYnJlYWs7CgkJY2FzZSBtc29fc3B0VGV4dERlZmxhdGVJbmZsYXRlIDoJCXBDdXN0b21TaGFwZSA9ICZtc29UZXh0RGVmbGF0ZUluZmxhdGU7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdFRleHREZWZsYXRlSW5mbGF0ZURlZmxhdGUgOglwQ3VzdG9tU2hhcGUgPSAmbXNvVGV4dERlZmxhdGVJbmZsYXRlRGVmbGF0ZTsgYnJlYWs7CgkJY2FzZSBtc29fc3B0VGV4dFdhdmUxIDoJCQkJCXBDdXN0b21TaGFwZSA9ICZtc29UZXh0V2F2ZTE7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdFRleHRXYXZlMiA6CQkJCQlwQ3VzdG9tU2hhcGUgPSAmbXNvVGV4dFdhdmUyOyBicmVhazsKCQljYXNlIG1zb19zcHRUZXh0V2F2ZTMgOgkJCQkJcEN1c3RvbVNoYXBlID0gJm1zb1RleHRXYXZlMzsgYnJlYWs7CgkJY2FzZSBtc29fc3B0VGV4dFdhdmU0IDoJCQkJCXBDdXN0b21TaGFwZSA9ICZtc29UZXh0V2F2ZTQ7IGJyZWFrOwoJCWNhc2UgbXNvX3NwdFRlYXJEcm9wIDogICAgICAgICAgICAgICAgICBwQ3VzdG9tU2hhcGUgPSAmbXNvVGVhckRyb3A7IGJyZWFrOwoJCWRlZmF1bHQgOgoJCWJyZWFrOwoJfQoJcmV0dXJuIHBDdXN0b21TaGFwZTsKfQo=