ZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L2Jzbi0xLjMgYi9vcGVuZmxvd19pbnB1dC9ic24tMS4zCmluZGV4IDVhZDQ4MGMuLjcyMGY5MzMgMTAwNjQ0Ci0tLSBhL29wZW5mbG93X2lucHV0L2Jzbi0xLjMKKysrIGIvb3BlbmZsb3dfaW5wdXQvYnNuLTEuMwpAQCAtMjcsNiArMjcsNyBAQAogCiAjdmVyc2lvbiA0CiAjdmVyc2lvbiA1CisjdmVyc2lvbiA2CiAKIC8vIEJTTiBleHRlbnNpb24gaW5zdHJ1Y3Rpb24KIHN0cnVjdCBvZl9pbnN0cnVjdGlvbl9ic24gOiBvZl9pbnN0cnVjdGlvbl9leHBlcmltZW50ZXIgewpAQCAtMzYsMyArMzcsMjkgQEAKICAgICB1aW50MzJfdCBzdWJ0eXBlID09ID87CiAgICAgcGFkKDQpOwogfTsKKworLy8gQlNOIGJhc2UgZXJyb3IgbWVzc2FnZQorc3RydWN0IG9mX2Jzbl9iYXNlX2Vycm9yIDogb2ZfZXhwZXJpbWVudGVyX2Vycm9yX21zZyB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDE2X3QgZXJyX3R5cGUgPT0gMHhmZmZmOworICAgIHVpbnQxNl90IHN1YnR5cGUgPT0gPzsKKyAgICB1aW50MzJfdCBleHBlcmltZW50ZXIgPT0gMHg1YzE2Yzc7CisgICAgb2ZfZGVzY19zdHJfdCBlcnJfbXNnOworICAgIG9mX29jdGV0c190IGRhdGE7Cit9OworCisvLyBCU04gZXJyb3IgbWVzc2FnZQorc3RydWN0IG9mX2Jzbl9lcnJvciA6IG9mX2Jzbl9iYXNlX2Vycm9yIHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MTZfdCBlcnJfdHlwZSA9PSAweGZmZmY7CisgICAgdWludDE2X3Qgc3VidHlwZSA9PSAxOworICAgIHVpbnQzMl90IGV4cGVyaW1lbnRlciA9PSAweDVjMTZjNzsKKyAgICBvZl9kZXNjX3N0cl90IGVycl9tc2c7CisgICAgb2Zfb2N0ZXRzX3QgZGF0YTsKK307CmRpZmYgLS1naXQgYS9vcGVuZmxvd19pbnB1dC9ic24tMS40IGIvb3BlbmZsb3dfaW5wdXQvYnNuLTEuNAppbmRleCBjNjRhNzBhLi41MjJkYzQ2IDEwMDY0NAotLS0gYS9vcGVuZmxvd19pbnB1dC9ic24tMS40CisrKyBiL29wZW5mbG93X2lucHV0L2Jzbi0xLjQKQEAgLTEsNCArMSw0IEBACi0vLyBDb3B5cmlnaHQgMjAxNSwgQmlnIFN3aXRjaCBOZXR3b3JrcywgSW5jLgorLy8gQ29weXJpZ2h0IDIwMTUtMjAxNiwgQmlnIFN3aXRjaCBOZXR3b3JrcywgSW5jLgogLy8KIC8vIExveGlHZW4gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMS4wIChFUEwpLCB3aXRoCiAvLyB0aGUgZm9sbG93aW5nIHNwZWNpYWwgZXhjZXB0aW9uOgpAQCAtMjYsNiArMjYsNyBAQAogLy8gdW5kZXIgdGhlIEVQTC4KIAogI3ZlcnNpb24gNQorI3ZlcnNpb24gNgogCiBzdHJ1Y3Qgb2ZfcG9ydF9kZXNjX3Byb3BfYnNuIDogb2ZfcG9ydF9kZXNjX3Byb3BfZXhwZXJpbWVudGVyIHsKICAgICB1aW50MTZfdCB0eXBlID09IDB4ZmZmZjsKQEAgLTMzLDMgKzM0LDEwIEBACiAgICAgdWludDMyX3QgZXhwZXJpbWVudGVyID09IDB4NWMxNmM3OwogICAgIHVpbnQzMl90IGV4cF90eXBlID09ID87CiB9OworCitzdHJ1Y3Qgb2ZfcXVldWVfZGVzY19wcm9wX2JzbiA6IG9mX3F1ZXVlX2Rlc2NfcHJvcF9leHBlcmltZW50ZXIgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMHhmZmZmOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCBleHBlcmltZW50ZXIgPT0gMHg1YzE2Yzc7CisgICAgdWludDMyX3QgZXhwX3R5cGUgPT0gPzsKK307CmRpZmYgLS1naXQgYS9vcGVuZmxvd19pbnB1dC9ic24tMS41IGIvb3BlbmZsb3dfaW5wdXQvYnNuLTEuNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDM4ZGM4Ci0tLSAvZGV2L251bGwKKysrIGIvb3BlbmZsb3dfaW5wdXQvYnNuLTEuNQpAQCAtMCwwICsxLDQ0IEBACisvLyBDb3B5cmlnaHQgMjAxNSwgQmlnIFN3aXRjaCBOZXR3b3JrcywgSW5jLgorLy8KKy8vIExveGlHZW4gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMS4wIChFUEwpLCB3aXRoCisvLyB0aGUgZm9sbG93aW5nIHNwZWNpYWwgZXhjZXB0aW9uOgorLy8KKy8vIExPWEkgRXhjZXB0aW9uCisvLworLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgdGVybXMgb2YgdGhlIEVQTCwgeW91IG1heSBkaXN0cmlidXRlIGxpYnJhcmllcworLy8gZ2VuZXJhdGVkIGJ5IExveGlHZW4gKExveGlHZW4gTGlicmFyaWVzKSB1bmRlciB0aGUgdGVybXMgb2YgeW91ciBjaG9pY2UsIHByb3ZpZGVkCisvLyB0aGF0IGNvcHlyaWdodCBhbmQgbGljZW5zaW5nIG5vdGljZXMgZ2VuZXJhdGVkIGJ5IExveGlHZW4gYXJlIG5vdCBhbHRlcmVkIG9yIHJlbW92ZWQKKy8vIGZyb20gdGhlIExveGlHZW4gTGlicmFyaWVzIGFuZCB0aGUgbm90aWNlIHByb3ZpZGVkIGJlbG93IGlzIChpKSBpbmNsdWRlZCBpbgorLy8gdGhlIExveGlHZW4gTGlicmFyaWVzLCBpZiBkaXN0cmlidXRlZCBpbiBzb3VyY2UgY29kZSBmb3JtIGFuZCAoaWkpIGluY2x1ZGVkIGluIGFueQorLy8gZG9jdW1lbnRhdGlvbiBmb3IgdGhlIExveGlHZW4gTGlicmFyaWVzLCBpZiBkaXN0cmlidXRlZCBpbiBiaW5hcnkgZm9ybS4KKy8vCisvLyBOb3RpY2U6ICJDb3B5cmlnaHQgMjAxMywgQmlnIFN3aXRjaCBOZXR3b3JrcywgSW5jLiBUaGlzIGxpYnJhcnkgd2FzIGdlbmVyYXRlZCBieSB0aGUgTG94aUdlbiBDb21waWxlci4iCisvLworLy8gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBFUEwgb3IgTE9YSSBFeGNlcHRpb24uIFlvdSBtYXkgb2J0YWluCisvLyBhIGNvcHkgb2YgdGhlIEVQTCBhdDoKKy8vCisvLyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKy8vIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQorLy8gRVBMIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworLy8gdW5kZXIgdGhlIEVQTC4KKworI3ZlcnNpb24gNgorCitzdHJ1Y3Qgb2ZfcXVldWVfc3RhdHNfcHJvcF9ic24gOiBvZl9xdWV1ZV9zdGF0c19wcm9wX2V4cGVyaW1lbnRlciB7CisgICAgdWludDE2X3QgdHlwZSA9PSAweGZmZmY7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IGV4cGVyaW1lbnRlciA9PSAweDVjMTZjNzsKKyAgICB1aW50MzJfdCBleHBfdHlwZSA9PSAwOyAvLyAwIGlzIHdyaXR0ZW4gZm9yIHRlc3QgLSBmaXggbWUgPworICAgIG9mX29jdGV0c190IGV4cGVyaW1lbnRlcl9kYXRhOworfTsKKworc3RydWN0IG9mX3JvbGVfcHJvcF9ic24gOiBvZl9yb2xlX3Byb3BfZXhwZXJpbWVudGVyIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDB4ZmZmZjsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgZXhwZXJpbWVudGVyID09IDB4NWMxNmM3OworICAgIHVpbnQzMl90IGV4cF90eXBlID09IDU1OyAvLyA1NSBpcyB0YWtlbiBmcm9tIGJzbl9yb2xlX3N0YXR1cyAtIGZpeCBtZSA/CisgICAgb2Zfb2N0ZXRzX3QgZXhwZXJpbWVudGVyX2RhdGE7Cit9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L2Jzbl9hY2wgYi9vcGVuZmxvd19pbnB1dC9ic25fYWNsCmluZGV4IGJjY2E4NDIuLmFhZDQ3OGYgMTAwNjQ0Ci0tLSBhL29wZW5mbG93X2lucHV0L2Jzbl9hY2wKKysrIGIvb3BlbmZsb3dfaW5wdXQvYnNuX2FjbApAQCAtMzEsNiArMzEsNyBAQAogCiAjdmVyc2lvbiA0CiAjdmVyc2lvbiA1CisjdmVyc2lvbiA2CiAKIC8vIEluc3RydWN0aW9ucyB0byBleHByZXNzIGNvbnRyb2wgZmxvdyBpbiBBQ0wgdGFibGVzCiAKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L2Jzbl9hcnBfaWRsZSBiL29wZW5mbG93X2lucHV0L2Jzbl9hcnBfaWRsZQppbmRleCAxNmExNzgyLi4wMzBiYWRlIDEwMDY0NAotLS0gYS9vcGVuZmxvd19pbnB1dC9ic25fYXJwX2lkbGUKKysrIGIvb3BlbmZsb3dfaW5wdXQvYnNuX2FycF9pZGxlCkBAIC0zNiw2ICszNiw3IEBACiAKICN2ZXJzaW9uIDQKICN2ZXJzaW9uIDUKKyN2ZXJzaW9uIDYKIAogc3RydWN0IG9mX2Jzbl9hcnBfaWRsZSA6IG9mX2Jzbl9oZWFkZXIgewogICAgIHVpbnQ4X3QgdmVyc2lvbjsKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L2Jzbl9hcnBfb2ZmbG9hZCBiL29wZW5mbG93X2lucHV0L2Jzbl9hcnBfb2ZmbG9hZAppbmRleCBmMTNmNmFjLi44NjRjMzhjIDEwMDY0NAotLS0gYS9vcGVuZmxvd19pbnB1dC9ic25fYXJwX29mZmxvYWQKKysrIGIvb3BlbmZsb3dfaW5wdXQvYnNuX2FycF9vZmZsb2FkCkBAIC0zMSw2ICszMSw3IEBACiAKICN2ZXJzaW9uIDQKICN2ZXJzaW9uIDUKKyN2ZXJzaW9uIDYKIAogc3RydWN0IG9mX2luc3RydWN0aW9uX2Jzbl9hcnBfb2ZmbG9hZCA6IG9mX2luc3RydWN0aW9uX2JzbiB7CiAgICAgdWludDE2X3QgdHlwZSA9PSA2NTUzNTsKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L2Jzbl9hdXRvX25lZ290aWF0aW9uIGIvb3BlbmZsb3dfaW5wdXQvYnNuX2F1dG9fbmVnb3RpYXRpb24KaW5kZXggNjgxMTZjZi4uMTE5ZDA0NyAxMDA2NDQKLS0tIGEvb3BlbmZsb3dfaW5wdXQvYnNuX2F1dG9fbmVnb3RpYXRpb24KKysrIGIvb3BlbmZsb3dfaW5wdXQvYnNuX2F1dG9fbmVnb3RpYXRpb24KQEAgLTMxLDYgKzMxLDcgQEAKIAogI3ZlcnNpb24gNAogI3ZlcnNpb24gNQorI3ZlcnNpb24gNgogCiBzdHJ1Y3Qgb2ZfaW5zdHJ1Y3Rpb25fYnNuX2F1dG9fbmVnb3RpYXRpb24gOiBvZl9pbnN0cnVjdGlvbl9ic24gewogICAgIHVpbnQxNl90IHR5cGUgPT0gNjU1MzU7CmRpZmYgLS1naXQgYS9vcGVuZmxvd19pbnB1dC9ic25fYXV4X2N4bnMgYi9vcGVuZmxvd19pbnB1dC9ic25fYXV4X2N4bnMKaW5kZXggOGNlYWE3Mi4uNGMyZjk4ZiAxMDA2NDQKLS0tIGEvb3BlbmZsb3dfaW5wdXQvYnNuX2F1eF9jeG5zCisrKyBiL29wZW5mbG93X2lucHV0L2Jzbl9hdXhfY3hucwpAQCAtMjksNiArMjksNyBAQAogLy8KICN2ZXJzaW9uIDQKICN2ZXJzaW9uIDUKKyN2ZXJzaW9uIDYKIAogLy8gU2V0IHRoZSBudW1iZXIgb2YgZGVzaXJlZCBhdXggY29ubmVjdGlvbnMgbnVtX2F1eD0oMC0xNikgYWNjb21wYW55aW5nIHRoaXMgbWFpbiBjb25uZWN0aW9uCiAvLyBUaGlzIG1lc3NhZ2UgaXMgb25seSBhbGxvd2VkIG9uIHRoZSBtYWluIGNvbm5lY3Rpb24uIApkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvYnNuX2NvbnRyb2xsZXJfY29ubmVjdGlvbnMgYi9vcGVuZmxvd19pbnB1dC9ic25fY29udHJvbGxlcl9jb25uZWN0aW9ucwppbmRleCA4NDVkM2I4Li44MzY5NTUxIDEwMDY0NAotLS0gYS9vcGVuZmxvd19pbnB1dC9ic25fY29udHJvbGxlcl9jb25uZWN0aW9ucworKysgYi9vcGVuZmxvd19pbnB1dC9ic25fY29udHJvbGxlcl9jb25uZWN0aW9ucwpAQCAtMzgsNiArMzgsNyBAQAogCiAjdmVyc2lvbiA0CiAjdmVyc2lvbiA1CisjdmVyc2lvbiA2CiAKIGVudW0gb2ZwX2Jzbl9jb250cm9sbGVyX2Nvbm5lY3Rpb25fc3RhdGUod2lyZV90eXBlPXVpbnQ4X3QpIHsKICAgICBPRlBfQlNOX0NPTlRST0xMRVJfQ09OTkVDVElPTl9TVEFURV9ESVNDT05ORUNURUQgPSAwLApkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvYnNuX2RlYnVnX2NvdW50ZXIgYi9vcGVuZmxvd19pbnB1dC9ic25fZGVidWdfY291bnRlcgppbmRleCA2YzI4Yjg3Li5iZWE2Y2Y4IDEwMDY0NAotLS0gYS9vcGVuZmxvd19pbnB1dC9ic25fZGVidWdfY291bnRlcgorKysgYi9vcGVuZmxvd19pbnB1dC9ic25fZGVidWdfY291bnRlcgpAQCAtMzAsNiArMzAsNyBAQAogCiAjdmVyc2lvbiA0CiAjdmVyc2lvbiA1CisjdmVyc2lvbiA2CiAKIC8vIFN3aXRjaGVzIGhhdmUgbWFueSBub24tZGF0YXBsYW5lIGNvdW50ZXJzIHRoYXQgYXJlIG1haW5seSB1c2VmdWwgZm9yCiAvLyBkZWJ1Z2dpbmcuIEFuIGV4YW1wbGUgaXMgdGhlIG51bWJlciBvZiBwYWNrZXQtaW5zIGRyb3BwZWQgZHVlIHRvCmRpZmYgLS1naXQgYS9vcGVuZmxvd19pbnB1dC9ic25fZGhjcF9vZmZsb2FkIGIvb3BlbmZsb3dfaW5wdXQvYnNuX2RoY3Bfb2ZmbG9hZAppbmRleCA1MzUyNzU0Li41YTE0YTUxIDEwMDY0NAotLS0gYS9vcGVuZmxvd19pbnB1dC9ic25fZGhjcF9vZmZsb2FkCisrKyBiL29wZW5mbG93X2lucHV0L2Jzbl9kaGNwX29mZmxvYWQKQEAgLTMxLDYgKzMxLDcgQEAKIAogI3ZlcnNpb24gNAogI3ZlcnNpb24gNQorI3ZlcnNpb24gNgogCiBzdHJ1Y3Qgb2ZfaW5zdHJ1Y3Rpb25fYnNuX2RoY3Bfb2ZmbG9hZCA6IG9mX2luc3RydWN0aW9uX2JzbiB7CiAgICAgdWludDE2X3QgdHlwZSA9PSA2NTUzNTsKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L2Jzbl9kaXNhYmxlX2wzIGIvb3BlbmZsb3dfaW5wdXQvYnNuX2Rpc2FibGVfbDMKaW5kZXggMjlkOGFkMS4uMzg5ZmM2NSAxMDA2NDQKLS0tIGEvb3BlbmZsb3dfaW5wdXQvYnNuX2Rpc2FibGVfbDMKKysrIGIvb3BlbmZsb3dfaW5wdXQvYnNuX2Rpc2FibGVfbDMKQEAgLTMxLDYgKzMxLDcgQEAKIAogI3ZlcnNpb24gNAogI3ZlcnNpb24gNQorI3ZlcnNpb24gNgogCiBzdHJ1Y3Qgb2ZfaW5zdHJ1Y3Rpb25fYnNuX2Rpc2FibGVfbDMgOiBvZl9pbnN0cnVjdGlvbl9ic24gewogICAgIHVpbnQxNl90IHR5cGUgPT0gNjU1MzU7CmRpZmYgLS1naXQgYS9vcGVuZmxvd19pbnB1dC9ic25fZGlzYWJsZV9zcmNfbWFjX2NoZWNrIGIvb3BlbmZsb3dfaW5wdXQvYnNuX2Rpc2FibGVfc3JjX21hY19jaGVjawppbmRleCA2YjA5NWNhLi5jZmUxNWIxIDEwMDY0NAotLS0gYS9vcGVuZmxvd19pbnB1dC9ic25fZGlzYWJsZV9zcmNfbWFjX2NoZWNrCisrKyBiL29wZW5mbG93X2lucHV0L2Jzbl9kaXNhYmxlX3NyY19tYWNfY2hlY2sKQEAgLTMxLDYgKzMxLDcgQEAKIAogI3ZlcnNpb24gNAogI3ZlcnNpb24gNQorI3ZlcnNpb24gNgogCiBzdHJ1Y3Qgb2ZfaW5zdHJ1Y3Rpb25fYnNuX2Rpc2FibGVfc3JjX21hY19jaGVjayA6IG9mX2luc3RydWN0aW9uX2JzbiB7CiAgICAgdWludDE2X3QgdHlwZSA9PSA2NTUzNTsKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L2Jzbl9kaXNhYmxlX3ZsYW5fY291bnRlcnMgYi9vcGVuZmxvd19pbnB1dC9ic25fZGlzYWJsZV92bGFuX2NvdW50ZXJzCmluZGV4IGU1ODY5MTcuLjE1ZmJjYTIgMTAwNjQ0Ci0tLSBhL29wZW5mbG93X2lucHV0L2Jzbl9kaXNhYmxlX3ZsYW5fY291bnRlcnMKKysrIGIvb3BlbmZsb3dfaW5wdXQvYnNuX2Rpc2FibGVfdmxhbl9jb3VudGVycwpAQCAtMzEsNiArMzEsNyBAQAogCiAjdmVyc2lvbiA0CiAjdmVyc2lvbiA1CisjdmVyc2lvbiA2CiAKIHN0cnVjdCBvZl9pbnN0cnVjdGlvbl9ic25fZGlzYWJsZV92bGFuX2NvdW50ZXJzIDogb2ZfaW5zdHJ1Y3Rpb25fYnNuIHsKICAgICB1aW50MTZfdCB0eXBlID09IDY1NTM1OwpkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvYnNuX2Vncl9wb3J0X2dyb3VwX2lkIGIvb3BlbmZsb3dfaW5wdXQvYnNuX2Vncl9wb3J0X2dyb3VwX2lkCmluZGV4IDNiYTU0NjIuLjczYzZiZTYgMTAwNjQ0Ci0tLSBhL29wZW5mbG93X2lucHV0L2Jzbl9lZ3JfcG9ydF9ncm91cF9pZAorKysgYi9vcGVuZmxvd19pbnB1dC9ic25fZWdyX3BvcnRfZ3JvdXBfaWQKQEAgLTMxLDYgKzMxLDcgQEAKICN2ZXJzaW9uIDMKICN2ZXJzaW9uIDQKICN2ZXJzaW9uIDUKKyN2ZXJzaW9uIDYKIAogLyoKICAqIEVncmVzcyBwb3J0IGdyb3VwIElEIGZvciBTd2l0Y2hMaWdodApkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvYnNuX2Zsb3dfY2hlY2tzdW0gYi9vcGVuZmxvd19pbnB1dC9ic25fZmxvd19jaGVja3N1bQppbmRleCAzNWI2NThmLi5jNGY5NDg4IDEwMDY0NAotLS0gYS9vcGVuZmxvd19pbnB1dC9ic25fZmxvd19jaGVja3N1bQorKysgYi9vcGVuZmxvd19pbnB1dC9ic25fZmxvd19jaGVja3N1bQpAQCAtMzAsNiArMzAsNyBAQAogCiAjdmVyc2lvbiA0CiAjdmVyc2lvbiA1CisjdmVyc2lvbiA2CiAKIC8vIFJldHJpZXZlcyB0aGUgY2hlY2tzdW0gZm9yIGV2ZXJ5IGJ1Y2tldCBpbiBhIHRhYmxlLiBUaGUgZW50cmllcyBhcmUgb3JkZXJlZAogLy8gYnkgYnVja2V0IGluZGV4LgpkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvYnNuX2Zsb3dfaWRsZSBiL29wZW5mbG93X2lucHV0L2Jzbl9mbG93X2lkbGUKaW5kZXggZTAxMzllMi4uNmM2ZjNhOCAxMDA2NDQKLS0tIGEvb3BlbmZsb3dfaW5wdXQvYnNuX2Zsb3dfaWRsZQorKysgYi9vcGVuZmxvd19pbnB1dC9ic25fZmxvd19pZGxlCkBAIC0zMCw2ICszMCw3IEBACiAKICN2ZXJzaW9uIDQKICN2ZXJzaW9uIDUKKyN2ZXJzaW9uIDYKIAogLyoKICAqIE5vdGlmaWNhdGlvbiBvZiBpZGxlIGZsb3dzCmRpZmYgLS1naXQgYS9vcGVuZmxvd19pbnB1dC9ic25fZm9yd2FyZF9lcnJvcl9jb3JyZWN0aW9uIGIvb3BlbmZsb3dfaW5wdXQvYnNuX2ZvcndhcmRfZXJyb3JfY29ycmVjdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjkxNzMyCi0tLSAvZGV2L251bGwKKysrIGIvb3BlbmZsb3dfaW5wdXQvYnNuX2ZvcndhcmRfZXJyb3JfY29ycmVjdGlvbgpAQCAtMCwwICsxLDM4IEBACisvLyBDb3B5cmlnaHQgMjAxNiwgQmlnIFN3aXRjaCBOZXR3b3JrcywgSW5jLgorLy8KKy8vIExveGlHZW4gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMS4wIChFUEwpLCB3aXRoCisvLyB0aGUgZm9sbG93aW5nIHNwZWNpYWwgZXhjZXB0aW9uOgorLy8KKy8vIExPWEkgRXhjZXB0aW9uCisvLworLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgdGVybXMgb2YgdGhlIEVQTCwgeW91IG1heSBkaXN0cmlidXRlIGxpYnJhcmllcworLy8gZ2VuZXJhdGVkIGJ5IExveGlHZW4gKExveGlHZW4gTGlicmFyaWVzKSB1bmRlciB0aGUgdGVybXMgb2YgeW91ciBjaG9pY2UsIHByb3ZpZGVkCisvLyB0aGF0IGNvcHlyaWdodCBhbmQgbGljZW5zaW5nIG5vdGljZXMgZ2VuZXJhdGVkIGJ5IExveGlHZW4gYXJlIG5vdCBhbHRlcmVkIG9yIHJlbW92ZWQKKy8vIGZyb20gdGhlIExveGlHZW4gTGlicmFyaWVzIGFuZCB0aGUgbm90aWNlIHByb3ZpZGVkIGJlbG93IGlzIChpKSBpbmNsdWRlZCBpbgorLy8gdGhlIExveGlHZW4gTGlicmFyaWVzLCBpZiBkaXN0cmlidXRlZCBpbiBzb3VyY2UgY29kZSBmb3JtIGFuZCAoaWkpIGluY2x1ZGVkIGluIGFueQorLy8gZG9jdW1lbnRhdGlvbiBmb3IgdGhlIExveGlHZW4gTGlicmFyaWVzLCBpZiBkaXN0cmlidXRlZCBpbiBiaW5hcnkgZm9ybS4KKy8vCisvLyBOb3RpY2U6ICJDb3B5cmlnaHQgMjAxMywgQmlnIFN3aXRjaCBOZXR3b3JrcywgSW5jLiBUaGlzIGxpYnJhcnkgd2FzIGdlbmVyYXRlZCBieSB0aGUgTG94aUdlbiBDb21waWxlci4iCisvLworLy8gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBFUEwgb3IgTE9YSSBFeGNlcHRpb24uIFlvdSBtYXkgb2J0YWluCisvLyBhIGNvcHkgb2YgdGhlIEVQTCBhdDoKKy8vCisvLyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKy8vIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQorLy8gRVBMIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworLy8gdW5kZXIgdGhlIEVQTC4KKworI3ZlcnNpb24gNQorI3ZlcnNpb24gNgorCitzdHJ1Y3Qgb2ZfcG9ydF9kZXNjX3Byb3BfYnNuX2ZvcndhcmRfZXJyb3JfY29ycmVjdGlvbiA6IG9mX3BvcnRfZGVzY19wcm9wX2JzbiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAweGZmZmY7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IGV4cGVyaW1lbnRlciA9PSAweDVjMTZjNzsKKyAgICB1aW50MzJfdCBleHBfdHlwZSA9PSAyOworICAgIHVpbnQzMl90IGNvbmZpZ3VyZWQ7ICAgIC8qIG5vbi16ZXJvIGlmIEZFQyBpcyBjb25maWd1cmVkICovCisgICAgdWludDMyX3QgZW5hYmxlZDsgICAgICAgLyogbm9uLXplcm8gaWYgRkVDIGlzIGVuYWJsZWQgKi8KK307CmRpZmYgLS1naXQgYS9vcGVuZmxvd19pbnB1dC9ic25fZ2VuZXJpY19hc3luYyBiL29wZW5mbG93X2lucHV0L2Jzbl9nZW5lcmljX2FzeW5jCmluZGV4IDdkN2VlOTguLmIxNjMwNzkgMTAwNjQ0Ci0tLSBhL29wZW5mbG93X2lucHV0L2Jzbl9nZW5lcmljX2FzeW5jCisrKyBiL29wZW5mbG93X2lucHV0L2Jzbl9nZW5lcmljX2FzeW5jCkBAIC0yOSw2ICsyOSw3IEBACiAvLyBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBFUEwuCiAKICN2ZXJzaW9uIDUKKyN2ZXJzaW9uIDYKIAogLy8gVGhpcyBleHRlbnNpb24gcHJvdmlkZXMgZmxleGliaWxpdHkgZm9yIGFzeW5jIG1lc3NhZ2VzIGxpa2UgZ2VudGFibGUKIC8vIGRvZXMgZm9yIHRhYmxlIHByb2dyYW1taW5nLgpkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvYnNuX2dlbmVyaWNfY29tbWFuZCBiL29wZW5mbG93X2lucHV0L2Jzbl9nZW5lcmljX2NvbW1hbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQwZjkzYgotLS0gL2Rldi9udWxsCisrKyBiL29wZW5mbG93X2lucHV0L2Jzbl9nZW5lcmljX2NvbW1hbmQKQEAgLTAsMCArMSw0NiBAQAorLy8gQ29weXJpZ2h0IDIwMTYsIEJpZyBTd2l0Y2ggTmV0d29ya3MsIEluYy4KKy8vCisvLyBMb3hpR2VuIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlLAorLy8gdmVyc2lvbiAxLjAgKEVQTCksIHdpdGggdGhlIGZvbGxvd2luZyBzcGVjaWFsIGV4Y2VwdGlvbjoKKy8vCisvLyBMT1hJIEV4Y2VwdGlvbgorLy8KKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIHRlcm1zIG9mIHRoZSBFUEwsIHlvdSBtYXkKKy8vIGRpc3RyaWJ1dGUgbGlicmFyaWVzIGdlbmVyYXRlZCBieSBMb3hpR2VuIChMb3hpR2VuIExpYnJhcmllcykKKy8vIHVuZGVyIHRoZSB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgcHJvdmlkZWQgdGhhdCBjb3B5cmlnaHQgYW5kCisvLyBsaWNlbnNpbmcgbm90aWNlcyBnZW5lcmF0ZWQgYnkgTG94aUdlbiBhcmUgbm90IGFsdGVyZWQgb3IgcmVtb3ZlZAorLy8gZnJvbSB0aGUgTG94aUdlbiBMaWJyYXJpZXMgYW5kIHRoZSBub3RpY2UgcHJvdmlkZWQgYmVsb3cgaXMgKGkpCisvLyBpbmNsdWRlZCBpbiB0aGUgTG94aUdlbiBMaWJyYXJpZXMsIGlmIGRpc3RyaWJ1dGVkIGluIHNvdXJjZSBjb2RlCisvLyBmb3JtIGFuZCAoaWkpIGluY2x1ZGVkIGluIGFueSBkb2N1bWVudGF0aW9uIGZvciB0aGUgTG94aUdlbgorLy8gTGlicmFyaWVzLCBpZiBkaXN0cmlidXRlZCBpbiBiaW5hcnkgZm9ybS4KKy8vCisvLyBOb3RpY2U6ICJDb3B5cmlnaHQgMjAxNSwgQmlnIFN3aXRjaCBOZXR3b3JrcywgSW5jLgorLy8gVGhpcyBsaWJyYXJ5IHdhcyBnZW5lcmF0ZWQgYnkgdGhlIExveGlHZW4gQ29tcGlsZXIuIgorLy8KKy8vIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgRVBMIG9yCisvLyBMT1hJIEV4Y2VwdGlvbi4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBFUEwgYXQ6CisvLworLy8gaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisvLyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKy8vIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlcgorLy8gZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIEVQTCBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlCisvLyBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBFUEwuCisKKyN2ZXJzaW9uIDUKKyN2ZXJzaW9uIDYKKworLy8gVGhpcyBleHRlbnNpb24gcHJvdmlkZXMgZmxleGliaWxpdHkgZm9yIGNvbW1hbmQgbWVzc2FnZXMgbGlrZSBnZW50YWJsZQorLy8gZG9lcyBmb3IgdGFibGUgcHJvZ3JhbW1pbmcuCisKK3N0cnVjdCBvZl9ic25fZ2VuZXJpY19jb21tYW5kIDogb2ZfYnNuX2hlYWRlciB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSA0OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDMyX3QgZXhwZXJpbWVudGVyID09IDB4NWMxNmM3OworICAgIHVpbnQzMl90IHN1YnR5cGUgPT0gNzE7CisgICAgb2Zfc3RyNjRfdCBuYW1lOworICAgIGxpc3Qob2ZfYnNuX3Rsdl90KSB0bHZzOworfTsKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L2Jzbl9nZW5lcmljX3N0YXRzIGIvb3BlbmZsb3dfaW5wdXQvYnNuX2dlbmVyaWNfc3RhdHMKaW5kZXggYjY3ZDhlMy4uYWQxOTVjZiAxMDA2NDQKLS0tIGEvb3BlbmZsb3dfaW5wdXQvYnNuX2dlbmVyaWNfc3RhdHMKKysrIGIvb3BlbmZsb3dfaW5wdXQvYnNuX2dlbmVyaWNfc3RhdHMKQEAgLTMwLDYgKzMwLDcgQEAKIAogI3ZlcnNpb24gNAogI3ZlcnNpb24gNQorI3ZlcnNpb24gNgogCiAvLyBUaGlzIGV4dGVuc2lvbiBwcm92aWRlcyBmbGV4aWJpbGl0eSBmb3Igc3RhdHMgcmVxdWVzdHMgbGlrZSBnZW50YWJsZQogLy8gZG9lcyBmb3IgdGFibGUgcHJvZ3JhbW1pbmcuCmRpZmYgLS1naXQgYS9vcGVuZmxvd19pbnB1dC9ic25fZ2VudGFibGUgYi9vcGVuZmxvd19pbnB1dC9ic25fZ2VudGFibGUKaW5kZXggNTU2YWUwYi4uZTA3NTNjMCAxMDA2NDQKLS0tIGEvb3BlbmZsb3dfaW5wdXQvYnNuX2dlbnRhYmxlCisrKyBiL29wZW5mbG93X2lucHV0L2Jzbl9nZW50YWJsZQpAQCAtMzAsNiArMzAsNyBAQAogCiAjdmVyc2lvbiA0CiAjdmVyc2lvbiA1CisjdmVyc2lvbiA2CiAKIC8vIFdlIGhhdmUgYSBudW1iZXIgb2Ygc3dpdGNoIGFnZW50cyB0aGF0IG5lZWQgdG8gYmUgY29uZmlndXJlZCBieSB0aGUKIC8vIGNvbnRyb2xsZXIgYW5kIHJlcG9ydCBzdGF0cy4gU29tZSBvZiB0aGVtIHdpbGwgaGF2ZSBsYXJnZSB0YWJsZXMgKDEwMDArCkBAIC04Niw3ICs4Nyw3IEBACiAgICAgdWludDMyX3QgZXhwZXJpbWVudGVyID09IDB4NWMxNmM3OwogICAgIHVpbnQzMl90IHN1YnR5cGUgPT0gNDY7CiAgICAgdWludDE2X3QgdGFibGVfaWQ7Ci0gICAgdWludDE2X3Qga2V5X2xlbmd0aDsKKyAgICB1aW50MTZfdCBrZXlfbGVuZ3RoID09IGxlbmd0aChrZXkpOwogICAgIG9mX2NoZWNrc3VtXzEyOF90IGNoZWNrc3VtOwogICAgIGxpc3Qob2ZfYnNuX3Rsdl90KSBrZXk7CiAgICAgbGlzdChvZl9ic25fdGx2X3QpIHZhbHVlOwpAQCAtMTgxLDcgKzE4Miw3IEBACiAKIHN0cnVjdCBvZl9ic25fZ2VudGFibGVfZW50cnlfZGVzY19zdGF0c19lbnRyeSB7CiAgICAgdWludDE2X3QgbGVuZ3RoOwotICAgIHVpbnQxNl90IGtleV9sZW5ndGg7CisgICAgdWludDE2X3Qga2V5X2xlbmd0aCA9PSBsZW5ndGgoa2V5KTsKICAgICBvZl9jaGVja3N1bV8xMjhfdCBjaGVja3N1bTsKICAgICBsaXN0KG9mX2Jzbl90bHZfdCkga2V5OwogICAgIGxpc3Qob2ZfYnNuX3Rsdl90KSB2YWx1ZTsKQEAgLTIyNCw3ICsyMjUsNyBAQAogCiBzdHJ1Y3Qgb2ZfYnNuX2dlbnRhYmxlX2VudHJ5X3N0YXRzX2VudHJ5IHsKICAgICB1aW50MTZfdCBsZW5ndGg7Ci0gICAgdWludDE2X3Qga2V5X2xlbmd0aDsKKyAgICB1aW50MTZfdCBrZXlfbGVuZ3RoID09IGxlbmd0aChrZXkpOwogICAgIGxpc3Qob2ZfYnNuX3Rsdl90KSBrZXk7CiAgICAgbGlzdChvZl9ic25fdGx2X3QpIHN0YXRzOwogfTsKQEAgLTM2MiwzICszNjMsMjQgQEAKICAgICB1aW50MzJfdCB0YWJsZV9pZDsKICAgICBsaXN0KG9mX2Jzbl90bHZfdCkga2V5OwogfTsKKworZW51bSBvZl9ic25fZ2VudGFibGVfZXJyb3JfY29kZSh3aXJlX3R5cGU9dWludDE2X3QpIHsKKyAgICBPRl9CU05fR0VOVEFCTEVfRVJST1JfVU5LTk9XTiA9IDAsCisgICAgT0ZfQlNOX0dFTlRBQkxFX0VSUk9SX1BBUkFNID0gMSwgIC8vIGludmFsaWQgcGFyYW1ldGVyCisgICAgT0ZfQlNOX0dFTlRBQkxFX0VSUk9SX1RBQkxFX0ZVTEwgPSAyLAorfTsKKworLy8gQlNOIGdlbnRhYmxlIGVycm9yIG1lc3NhZ2UKK3N0cnVjdCBvZl9ic25fZ2VudGFibGVfZXJyb3IgOiBvZl9ic25fYmFzZV9lcnJvciB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDE2X3QgZXJyX3R5cGUgPT0gMHhmZmZmOworICAgIHVpbnQxNl90IHN1YnR5cGUgPT0gMjsKKyAgICB1aW50MzJfdCBleHBlcmltZW50ZXIgPT0gMHg1YzE2Yzc7CisgICAgZW51bSBvZl9ic25fZ2VudGFibGVfZXJyb3JfY29kZSBlcnJvcl9jb2RlOworICAgIHVpbnQxNl90IHRhYmxlX2lkOworICAgIG9mX2Rlc2Nfc3RyX3QgZXJyX21zZzsKKyAgICBvZl9vY3RldHNfdCBkYXRhOworfTsKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L2Jzbl9oYXNoX3NlbGVjdCBiL29wZW5mbG93X2lucHV0L2Jzbl9oYXNoX3NlbGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGQ5YWViCi0tLSAvZGV2L251bGwKKysrIGIvb3BlbmZsb3dfaW5wdXQvYnNuX2hhc2hfc2VsZWN0CkBAIC0wLDAgKzEsNDkgQEAKKy8vIENvcHlyaWdodCAyMDE2LCBCaWcgU3dpdGNoIE5ldHdvcmtzLCBJbmMuCisvLworLy8gTG94aUdlbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAxLjAgKEVQTCksIHdpdGgKKy8vIHRoZSBmb2xsb3dpbmcgc3BlY2lhbCBleGNlcHRpb246CisvLworLy8gTE9YSSBFeGNlcHRpb24KKy8vCisvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSB0ZXJtcyBvZiB0aGUgRVBMLCB5b3UgbWF5IGRpc3RyaWJ1dGUgbGlicmFyaWVzCisvLyBnZW5lcmF0ZWQgYnkgTG94aUdlbiAoTG94aUdlbiBMaWJyYXJpZXMpIHVuZGVyIHRoZSB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgcHJvdmlkZWQKKy8vIHRoYXQgY29weXJpZ2h0IGFuZCBsaWNlbnNpbmcgbm90aWNlcyBnZW5lcmF0ZWQgYnkgTG94aUdlbiBhcmUgbm90IGFsdGVyZWQgb3IgcmVtb3ZlZAorLy8gZnJvbSB0aGUgTG94aUdlbiBMaWJyYXJpZXMgYW5kIHRoZSBub3RpY2UgcHJvdmlkZWQgYmVsb3cgaXMgKGkpIGluY2x1ZGVkIGluCisvLyB0aGUgTG94aUdlbiBMaWJyYXJpZXMsIGlmIGRpc3RyaWJ1dGVkIGluIHNvdXJjZSBjb2RlIGZvcm0gYW5kIChpaSkgaW5jbHVkZWQgaW4gYW55CisvLyBkb2N1bWVudGF0aW9uIGZvciB0aGUgTG94aUdlbiBMaWJyYXJpZXMsIGlmIGRpc3RyaWJ1dGVkIGluIGJpbmFyeSBmb3JtLgorLy8KKy8vIE5vdGljZTogIkNvcHlyaWdodCAyMDE2LCBCaWcgU3dpdGNoIE5ldHdvcmtzLCBJbmMuIFRoaXMgbGlicmFyeSB3YXMgZ2VuZXJhdGVkIGJ5IHRoZSBMb3hpR2VuIENvbXBpbGVyLiIKKy8vCisvLyBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIEVQTCBvciBMT1hJIEV4Y2VwdGlvbi4gWW91IG1heSBvYnRhaW4KKy8vIGEgY29weSBvZiB0aGUgRVBMIGF0OgorLy8KKy8vIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorLy8gV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlCisvLyBFUEwgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisvLyB1bmRlciB0aGUgRVBMLgorLy8KKy8vIEFsc28gZGVyaXZlZCBmcm9tIHRoZSBPcGVuRmxvdyBoZWFkZXIgZmlsZXMgd2hpY2ggaGF2ZSB0aGVzZSBjb3B5cmlnaHRzOgorLy8gQ29weXJpZ2h0IChjKSAyMDA4IFRoZSBCb2FyZCBvZiBUcnVzdGVlcyBvZiBUaGUgTGVsYW5kIFN0YW5mb3JkIEp1bmlvciBVbml2ZXJzaXR5CisvLyBDb3B5cmlnaHQgKGMpIDIwMTEsIDIwMTIgT3BlbiBOZXR3b3JraW5nIEZvdW5kYXRpb24KKworI3ZlcnNpb24gNAorI3ZlcnNpb24gNQorI3ZlcnNpb24gNgorCisvLyBJbnN0cnVjdGlvbnMgdG8gZXhwcmVzcyBjb250cm9sIG9mIGhhc2ggc2VsZWN0aW9uIGluIEFDTCB0YWJsZXMKKworZW51bSBvZnBfYnNuX2hhc2hfc2VsZWN0X2ZsYWdzKHdpcmVfdHlwZT11aW50MzJfdCwgYml0bWFzaz1UcnVlKSB7CisgICAgT0ZQX0JTTl9IQVNIX1NFTEVDVF9TUkNfSVAgPSAweDEsCisgICAgT0ZQX0JTTl9IQVNIX1NFTEVDVF9EU1RfSVAgPSAweDIsCit9OworCitzdHJ1Y3Qgb2ZfaW5zdHJ1Y3Rpb25fYnNuX2hhc2hfc2VsZWN0IDogb2ZfaW5zdHJ1Y3Rpb25fYnNuIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDY1NTM1OworICAgIHVpbnQxNl90IGxlbjsKKyAgICB1aW50MzJfdCBleHBlcmltZW50ZXIgPT0gMHg1YzE2Yzc7CisgICAgdWludDMyX3Qgc3VidHlwZSA9PSAxNTsKKyAgICBlbnVtIG9mcF9ic25faGFzaF9zZWxlY3RfZmxhZ3MgZmxhZ3M7Cit9OwpkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvYnNuX2ltYWdlIGIvb3BlbmZsb3dfaW5wdXQvYnNuX2ltYWdlCmluZGV4IGZhZmU4ZDguLjAzY2RiMzQgMTAwNjQ0Ci0tLSBhL29wZW5mbG93X2lucHV0L2Jzbl9pbWFnZQorKysgYi9vcGVuZmxvd19pbnB1dC9ic25faW1hZ2UKQEAgLTMwLDYgKzMwLDcgQEAKIAogI3ZlcnNpb24gNAogI3ZlcnNpb24gNQorI3ZlcnNpb24gNgogCiBzdHJ1Y3Qgb2ZfYnNuX2ltYWdlX2Rlc2Nfc3RhdHNfcmVxdWVzdCA6IG9mX2Jzbl9zdGF0c19yZXF1ZXN0IHsKICAgICB1aW50OF90IHZlcnNpb247CmRpZmYgLS1naXQgYS9vcGVuZmxvd19pbnB1dC9ic25faW5fcG9ydHMgYi9vcGVuZmxvd19pbnB1dC9ic25faW5fcG9ydHMKaW5kZXggYmI0YzAzMC4uMTMyZDZkNiAxMDA2NDQKLS0tIGEvb3BlbmZsb3dfaW5wdXQvYnNuX2luX3BvcnRzCisrKyBiL29wZW5mbG93X2lucHV0L2Jzbl9pbl9wb3J0cwpAQCAtMzEsNiArMzEsNyBAQAogI3ZlcnNpb24gMwogI3ZlcnNpb24gNAogI3ZlcnNpb24gNQorI3ZlcnNpb24gNgogCiAvKgogICogQml0bWFwIG9mIGlucHV0IHBvcnRzCmRpZmYgLS1naXQgYS9vcGVuZmxvd19pbnB1dC9ic25faW5ncmVzc19wb3J0X2dyb3VwX2lkIGIvb3BlbmZsb3dfaW5wdXQvYnNuX2luZ3Jlc3NfcG9ydF9ncm91cF9pZAppbmRleCA1ZTFhZDk3Li45ZDRlYWUzIDEwMDY0NAotLS0gYS9vcGVuZmxvd19pbnB1dC9ic25faW5ncmVzc19wb3J0X2dyb3VwX2lkCisrKyBiL29wZW5mbG93X2lucHV0L2Jzbl9pbmdyZXNzX3BvcnRfZ3JvdXBfaWQKQEAgLTMxLDYgKzMxLDcgQEAKICN2ZXJzaW9uIDMKICN2ZXJzaW9uIDQKICN2ZXJzaW9uIDUKKyN2ZXJzaW9uIDYKIAogLyoKICAqIEluZ3Jlc3MgcG9ydCBncm91cCBJRCBmb3IgU3dpdGNoTGlnaHQKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L2Jzbl9pbm5lcl9ldGhfZHN0IGIvb3BlbmZsb3dfaW5wdXQvYnNuX2lubmVyX2V0aF9kc3QKaW5kZXggZDNlOWZhOS4uYzZjZWM0YiAxMDA2NDQKLS0tIGEvb3BlbmZsb3dfaW5wdXQvYnNuX2lubmVyX2V0aF9kc3QKKysrIGIvb3BlbmZsb3dfaW5wdXQvYnNuX2lubmVyX2V0aF9kc3QKQEAgLTMwLDYgKzMwLDcgQEAKIAogI3ZlcnNpb24gNAogI3ZlcnNpb24gNQorI3ZlcnNpb24gNgogCiAvKgogICogSW5uZXIgZXRoZXJuZXQgZGVzdGluYXRpb24gTUFDCmRpZmYgLS1naXQgYS9vcGVuZmxvd19pbnB1dC9ic25faW5uZXJfZXRoX3NyYyBiL29wZW5mbG93X2lucHV0L2Jzbl9pbm5lcl9ldGhfc3JjCmluZGV4IDM2ZTBlMzUuLjM2MjQ0N2QgMTAwNjQ0Ci0tLSBhL29wZW5mbG93X2lucHV0L2Jzbl9pbm5lcl9ldGhfc3JjCisrKyBiL29wZW5mbG93X2lucHV0L2Jzbl9pbm5lcl9ldGhfc3JjCkBAIC0zMCw2ICszMCw3IEBACiAKICN2ZXJzaW9uIDQKICN2ZXJzaW9uIDUKKyN2ZXJzaW9uIDYKIAogLyoKICAqIElubmVyIGV0aGVybmV0IHNvdXJjZSBNQUMKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L2Jzbl9pbm5lcl92bGFuX3ZpZCBiL29wZW5mbG93X2lucHV0L2Jzbl9pbm5lcl92bGFuX3ZpZAppbmRleCA2ODA5MmEyLi43MDJmM2U5IDEwMDY0NAotLS0gYS9vcGVuZmxvd19pbnB1dC9ic25faW5uZXJfdmxhbl92aWQKKysrIGIvb3BlbmZsb3dfaW5wdXQvYnNuX2lubmVyX3ZsYW5fdmlkCkBAIC0zMCw2ICszMCw3IEBACiAKICN2ZXJzaW9uIDQKICN2ZXJzaW9uIDUKKyN2ZXJzaW9uIDYKIAogLyoKICAqIElubmVyIFZMQU4gVklECmRpZmYgLS1naXQgYS9vcGVuZmxvd19pbnB1dC9ic25faW50ZXJuYWxfcHJpb3JpdHkgYi9vcGVuZmxvd19pbnB1dC9ic25faW50ZXJuYWxfcHJpb3JpdHkKaW5kZXggNTVkOTAzZC4uNjQ4Mjk5MiAxMDA2NDQKLS0tIGEvb3BlbmZsb3dfaW5wdXQvYnNuX2ludGVybmFsX3ByaW9yaXR5CisrKyBiL29wZW5mbG93X2lucHV0L2Jzbl9pbnRlcm5hbF9wcmlvcml0eQpAQCAtMzEsNiArMzEsNyBAQAogCiAjdmVyc2lvbiA0CiAjdmVyc2lvbiA1CisjdmVyc2lvbiA2CiAKIHN0cnVjdCBvZl9pbnN0cnVjdGlvbl9ic25faW50ZXJuYWxfcHJpb3JpdHkgOiBvZl9pbnN0cnVjdGlvbl9ic24gewogICAgIHVpbnQxNl90IHR5cGUgPT0gNjU1MzU7CmRpZmYgLS1naXQgYS9vcGVuZmxvd19pbnB1dC9ic25faXBfZnJhZ21lbnRhdGlvbiBiL29wZW5mbG93X2lucHV0L2Jzbl9pcF9mcmFnbWVudGF0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2NGNiNGQKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVuZmxvd19pbnB1dC9ic25faXBfZnJhZ21lbnRhdGlvbgpAQCAtMCwwICsxLDUwIEBACisvLyBDb3B5cmlnaHQgMjAxNiwgQmlnIFN3aXRjaCBOZXR3b3JrcywgSW5jLgorLy8KKy8vIExveGlHZW4gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UsCisvLyB2ZXJzaW9uIDEuMCAoRVBMKSwgd2l0aCB0aGUgZm9sbG93aW5nIHNwZWNpYWwgZXhjZXB0aW9uOgorLy8KKy8vIExPWEkgRXhjZXB0aW9uCisvLworLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgdGVybXMgb2YgdGhlIEVQTCwgeW91IG1heQorLy8gZGlzdHJpYnV0ZSBsaWJyYXJpZXMgZ2VuZXJhdGVkIGJ5IExveGlHZW4gKExveGlHZW4gTGlicmFyaWVzKQorLy8gdW5kZXIgdGhlIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBwcm92aWRlZCB0aGF0IGNvcHlyaWdodCBhbmQKKy8vIGxpY2Vuc2luZyBub3RpY2VzIGdlbmVyYXRlZCBieSBMb3hpR2VuIGFyZSBub3QgYWx0ZXJlZCBvciByZW1vdmVkCisvLyBmcm9tIHRoZSBMb3hpR2VuIExpYnJhcmllcyBhbmQgdGhlIG5vdGljZSBwcm92aWRlZCBiZWxvdyBpcyAoaSkKKy8vIGluY2x1ZGVkIGluIHRoZSBMb3hpR2VuIExpYnJhcmllcywgaWYgZGlzdHJpYnV0ZWQgaW4gc291cmNlIGNvZGUKKy8vIGZvcm0gYW5kIChpaSkgaW5jbHVkZWQgaW4gYW55IGRvY3VtZW50YXRpb24gZm9yIHRoZSBMb3hpR2VuCisvLyBMaWJyYXJpZXMsIGlmIGRpc3RyaWJ1dGVkIGluIGJpbmFyeSBmb3JtLgorLy8KKy8vIE5vdGljZTogIkNvcHlyaWdodCAyMDEzLCBCaWcgU3dpdGNoIE5ldHdvcmtzLCBJbmMuCisvLyBUaGlzIGxpYnJhcnkgd2FzIGdlbmVyYXRlZCBieSB0aGUgTG94aUdlbiBDb21waWxlci4iCisvLworLy8gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBFUEwgb3IKKy8vIExPWEkgRXhjZXB0aW9uLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEVQTCBhdDoKKy8vCisvLyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKy8vIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUworLy8gSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyCisvLyBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgRVBMIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UKKy8vIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIEVQTC4KKworI3ZlcnNpb24gMworI3ZlcnNpb24gNAorI3ZlcnNpb24gNQorI3ZlcnNpb24gNgorCisvKgorICogSVAgZnJhZ21lbnRhdGlvbgorICovCisKK3N0cnVjdCBvZl9veG1fYnNuX2lwX2ZyYWdtZW50YXRpb24gOiBvZl9veG0geworICAgIHVpbnQzMl90IHR5cGVfbGVuID09IDB4MDAwMzM0MDE7CisgICAgdWludDhfdCB2YWx1ZTsKK307CisKK3N0cnVjdCBvZl9veG1fYnNuX2lwX2ZyYWdtZW50YXRpb25fbWFza2VkIDogb2Zfb3htIHsKKyAgICB1aW50MzJfdCB0eXBlX2xlbiA9PSAweDAwMDMzNTAyOworICAgIHVpbnQ4X3QgdmFsdWU7CisgICAgdWludDhfdCB2YWx1ZV9tYXNrOworfTsKKwpkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvYnNuX2wyX2NhY2hlX2hpdCBiL29wZW5mbG93X2lucHV0L2Jzbl9sMl9jYWNoZV9oaXQKaW5kZXggNjk0YmM2NS4uYzE3ODYxMSAxMDA2NDQKLS0tIGEvb3BlbmZsb3dfaW5wdXQvYnNuX2wyX2NhY2hlX2hpdAorKysgYi9vcGVuZmxvd19pbnB1dC9ic25fbDJfY2FjaGVfaGl0CkBAIC0zMCw2ICszMCw4IEBACiAKICN2ZXJzaW9uIDMKICN2ZXJzaW9uIDQKKyN2ZXJzaW9uIDUKKyN2ZXJzaW9uIDYKIAogLyoKICAqIEwyIENhY2hlIEhpdApkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvYnNuX2wzX2ludGVyZmFjZV9jbGFzc19pZCBiL29wZW5mbG93X2lucHV0L2Jzbl9sM19pbnRlcmZhY2VfY2xhc3NfaWQKaW5kZXggZjE2ZDMzMy4uY2ZkMTdlZiAxMDA2NDQKLS0tIGEvb3BlbmZsb3dfaW5wdXQvYnNuX2wzX2ludGVyZmFjZV9jbGFzc19pZAorKysgYi9vcGVuZmxvd19pbnB1dC9ic25fbDNfaW50ZXJmYWNlX2NsYXNzX2lkCkBAIC0zMSw2ICszMSw3IEBACiAjdmVyc2lvbiAzCiAjdmVyc2lvbiA0CiAjdmVyc2lvbiA1CisjdmVyc2lvbiA2CiAKIC8qCiAgKiBMMyBpbnRlcmZhY2UgY2xhc3MgSUQgZm9yIFN3aXRjaExpZ2h0CmRpZmYgLS1naXQgYS9vcGVuZmxvd19pbnB1dC9ic25fbDNfc3JjX2NsYXNzX2lkIGIvb3BlbmZsb3dfaW5wdXQvYnNuX2wzX3NyY19jbGFzc19pZAppbmRleCA3ZTI1NjllLi41ODZiYTM4IDEwMDY0NAotLS0gYS9vcGVuZmxvd19pbnB1dC9ic25fbDNfc3JjX2NsYXNzX2lkCisrKyBiL29wZW5mbG93X2lucHV0L2Jzbl9sM19zcmNfY2xhc3NfaWQKQEAgLTMxLDYgKzMxLDcgQEAKICN2ZXJzaW9uIDMKICN2ZXJzaW9uIDQKICN2ZXJzaW9uIDUKKyN2ZXJzaW9uIDYKIAogLyoKICAqIEwzIHNvdXJjZSBjbGFzcyBJRCBmb3IgU3dpdGNoTGlnaHQKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L2Jzbl9sYWNwIGIvb3BlbmZsb3dfaW5wdXQvYnNuX2xhY3AKaW5kZXggZWQzNmIwZC4uMjAxODQ4YyAxMDA2NDQKLS0tIGEvb3BlbmZsb3dfaW5wdXQvYnNuX2xhY3AKKysrIGIvb3BlbmZsb3dfaW5wdXQvYnNuX2xhY3AKQEAgLTMwLDYgKzMwLDcgQEAKIAogI3ZlcnNpb24gNAogI3ZlcnNpb24gNQorI3ZlcnNpb24gNgogCiAvLyBMQUNQIENvbnZlcmdlbmNlIFN0YXR1cyBzZXQgaW4gb2ZfYnNuX2xhY3BfY29udmVyZ2VuY2Vfbm90aWYgbWVzc2FnZQogZW51bSBvZl9ic25fbGFjcF9jb252ZXJnZW5jZV9zdGF0dXMod2lyZV90eXBlPXVpbnQ4X3QsIGNvbXBsZXRlPUZhbHNlKSB7CmRpZmYgLS1naXQgYS9vcGVuZmxvd19pbnB1dC9ic25fbGFnX2lkIGIvb3BlbmZsb3dfaW5wdXQvYnNuX2xhZ19pZAppbmRleCBkNDI4OTMzLi5mOWYyNWEyIDEwMDY0NAotLS0gYS9vcGVuZmxvd19pbnB1dC9ic25fbGFnX2lkCisrKyBiL29wZW5mbG93X2lucHV0L2Jzbl9sYWdfaWQKQEAgLTMxLDYgKzMxLDcgQEAKICN2ZXJzaW9uIDMKICN2ZXJzaW9uIDQKICN2ZXJzaW9uIDUKKyN2ZXJzaW9uIDYKIAogLyoKICAqIEluZ3Jlc3MgTEFHIElEIGZvciBTd2l0Y2hMaWdodApkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvYnNuX2xvZyBiL29wZW5mbG93X2lucHV0L2Jzbl9sb2cKaW5kZXggZTYzNmQ2ZS4uOWMzNjRmZiAxMDA2NDQKLS0tIGEvb3BlbmZsb3dfaW5wdXQvYnNuX2xvZworKysgYi9vcGVuZmxvd19pbnB1dC9ic25fbG9nCkBAIC0zMCw2ICszMCw3IEBACiAKICN2ZXJzaW9uIDQKICN2ZXJzaW9uIDUKKyN2ZXJzaW9uIDYKIAogZW51bSBvZnBfYnNuX2xvZ2xldmVsKHdpcmVfdHlwZT11aW50OF90KSB7CiAgICAgT0ZQX0JTTl9MT0dMRVZFTF9NU0cgPSAwLApkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvYnNuX2x1YSBiL29wZW5mbG93X2lucHV0L2Jzbl9sdWEKaW5kZXggZDk0MTY2Ni4uYzg5ZWRmZCAxMDA2NDQKLS0tIGEvb3BlbmZsb3dfaW5wdXQvYnNuX2x1YQorKysgYi9vcGVuZmxvd19pbnB1dC9ic25fbHVhCkBAIC0zOSw2ICszOSw3IEBACiAKICN2ZXJzaW9uIDQKICN2ZXJzaW9uIDUKKyN2ZXJzaW9uIDYKIAogLy8gVXBsb2FkIGNodW5rcyBvZiBMdWEgY29kZSB0byB0aGUgc3dpdGNoCiAvLwpkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvYnNuX25kcF9vZmZsb2FkIGIvb3BlbmZsb3dfaW5wdXQvYnNuX25kcF9vZmZsb2FkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MzIzZDEKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVuZmxvd19pbnB1dC9ic25fbmRwX29mZmxvYWQKQEAgLTAsMCArMSw0MiBAQAorLy8gQ29weXJpZ2h0IDIwMTYsIEJpZyBTd2l0Y2ggTmV0d29ya3MsIEluYy4KKy8vCisvLyBMb3hpR2VuIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDEuMCAoRVBMKSwgd2l0aAorLy8gdGhlIGZvbGxvd2luZyBzcGVjaWFsIGV4Y2VwdGlvbjoKKy8vCisvLyBMT1hJIEV4Y2VwdGlvbgorLy8KKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIHRlcm1zIG9mIHRoZSBFUEwsIHlvdSBtYXkgZGlzdHJpYnV0ZSBsaWJyYXJpZXMKKy8vIGdlbmVyYXRlZCBieSBMb3hpR2VuIChMb3hpR2VuIExpYnJhcmllcykgdW5kZXIgdGhlIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBwcm92aWRlZAorLy8gdGhhdCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBub3RpY2VzIGdlbmVyYXRlZCBieSBMb3hpR2VuIGFyZSBub3QgYWx0ZXJlZCBvciByZW1vdmVkCisvLyBmcm9tIHRoZSBMb3hpR2VuIExpYnJhcmllcyBhbmQgdGhlIG5vdGljZSBwcm92aWRlZCBiZWxvdyBpcyAoaSkgaW5jbHVkZWQgaW4KKy8vIHRoZSBMb3hpR2VuIExpYnJhcmllcywgaWYgZGlzdHJpYnV0ZWQgaW4gc291cmNlIGNvZGUgZm9ybSBhbmQgKGlpKSBpbmNsdWRlZCBpbiBhbnkKKy8vIGRvY3VtZW50YXRpb24gZm9yIHRoZSBMb3hpR2VuIExpYnJhcmllcywgaWYgZGlzdHJpYnV0ZWQgaW4gYmluYXJ5IGZvcm0uCisvLworLy8gTm90aWNlOiAiQ29weXJpZ2h0IDIwMTMsIEJpZyBTd2l0Y2ggTmV0d29ya3MsIEluYy4gVGhpcyBsaWJyYXJ5IHdhcyBnZW5lcmF0ZWQgYnkgdGhlIExveGlHZW4gQ29tcGlsZXIuIgorLy8KKy8vIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgRVBMIG9yIExPWEkgRXhjZXB0aW9uLiBZb3UgbWF5IG9idGFpbgorLy8gYSBjb3B5IG9mIHRoZSBFUEwgYXQ6CisvLworLy8gaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisvLyBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUKKy8vIEVQTCBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKy8vIHVuZGVyIHRoZSBFUEwuCisvLworLy8gQWxzbyBkZXJpdmVkIGZyb20gdGhlIE9wZW5GbG93IGhlYWRlciBmaWxlcyB3aGljaCBoYXZlIHRoZXNlIGNvcHlyaWdodHM6CisvLyBDb3B5cmlnaHQgKGMpIDIwMDggVGhlIEJvYXJkIG9mIFRydXN0ZWVzIG9mIFRoZSBMZWxhbmQgU3RhbmZvcmQgSnVuaW9yIFVuaXZlcnNpdHkKKy8vIENvcHlyaWdodCAoYykgMjAxMSwgMjAxMiBPcGVuIE5ldHdvcmtpbmcgRm91bmRhdGlvbgorCisjdmVyc2lvbiA0CisjdmVyc2lvbiA1CisjdmVyc2lvbiA2CisKK3N0cnVjdCBvZl9pbnN0cnVjdGlvbl9ic25fbmRwX29mZmxvYWQgOiBvZl9pbnN0cnVjdGlvbl9ic24geworICAgIHVpbnQxNl90IHR5cGUgPT0gNjU1MzU7CisgICAgdWludDE2X3QgbGVuOworICAgIHVpbnQzMl90IGV4cGVyaW1lbnRlciA9PSAweDVjMTZjNzsKKyAgICB1aW50MzJfdCBzdWJ0eXBlID09IDE0OworICAgIHBhZCg0KTsKK307CmRpZmYgLS1naXQgYS9vcGVuZmxvd19pbnB1dC9ic25fcGFja2V0X29mX2RlYXRoIGIvb3BlbmZsb3dfaW5wdXQvYnNuX3BhY2tldF9vZl9kZWF0aAppbmRleCBjMWFjMjhkLi4xOGQ4Yzc4IDEwMDY0NAotLS0gYS9vcGVuZmxvd19pbnB1dC9ic25fcGFja2V0X29mX2RlYXRoCisrKyBiL29wZW5mbG93X2lucHV0L2Jzbl9wYWNrZXRfb2ZfZGVhdGgKQEAgLTMxLDYgKzMxLDcgQEAKIAogI3ZlcnNpb24gNAogI3ZlcnNpb24gNQorI3ZlcnNpb24gNgogCiBzdHJ1Y3Qgb2ZfaW5zdHJ1Y3Rpb25fYnNuX3BhY2tldF9vZl9kZWF0aCA6IG9mX2luc3RydWN0aW9uX2JzbiB7CiAgICAgdWludDE2X3QgdHlwZSA9PSA2NTUzNTsKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L2Jzbl9wa3Rpbl9mbGFnIGIvb3BlbmZsb3dfaW5wdXQvYnNuX3BrdGluX2ZsYWcKaW5kZXggYjIxNjE2YS4uN2FjZmE0YiAxMDA2NDQKLS0tIGEvb3BlbmZsb3dfaW5wdXQvYnNuX3BrdGluX2ZsYWcKKysrIGIvb3BlbmZsb3dfaW5wdXQvYnNuX3BrdGluX2ZsYWcKQEAgLTEsNCArMSw0IEBACi0vLyBDb3B5cmlnaHQgMjAxNCwgQmlnIFN3aXRjaCBOZXR3b3JrcywgSW5jLgorLy8gQ29weXJpZ2h0IDIwMTQtMjAxNiwgQmlnIFN3aXRjaCBOZXR3b3JrcywgSW5jLgogLy8KIC8vIExveGlHZW4gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMS4wIChFUEwpLCB3aXRoCiAvLyB0aGUgZm9sbG93aW5nIHNwZWNpYWwgZXhjZXB0aW9uOgpAQCAtMTIsNyArMTIsNyBAQAogLy8gdGhlIExveGlHZW4gTGlicmFyaWVzLCBpZiBkaXN0cmlidXRlZCBpbiBzb3VyY2UgY29kZSBmb3JtIGFuZCAoaWkpIGluY2x1ZGVkIGluIGFueQogLy8gZG9jdW1lbnRhdGlvbiBmb3IgdGhlIExveGlHZW4gTGlicmFyaWVzLCBpZiBkaXN0cmlidXRlZCBpbiBiaW5hcnkgZm9ybS4KIC8vCi0vLyBOb3RpY2U6ICJDb3B5cmlnaHQgMjAxNCwgQmlnIFN3aXRjaCBOZXR3b3JrcywgSW5jLiBUaGlzIGxpYnJhcnkgd2FzIGdlbmVyYXRlZCBieSB0aGUgTG94aUdlbiBDb21waWxlci4iCisvLyBOb3RpY2U6ICJDb3B5cmlnaHQgMjAxNC0yMDE2LCBCaWcgU3dpdGNoIE5ldHdvcmtzLCBJbmMuIFRoaXMgbGlicmFyeSB3YXMgZ2VuZXJhdGVkIGJ5IHRoZSBMb3hpR2VuIENvbXBpbGVyLiIKIC8vCiAvLyBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIEVQTCBvciBMT1hJIEV4Y2VwdGlvbi4gWW91IG1heSBvYnRhaW4KIC8vIGEgY29weSBvZiB0aGUgRVBMIGF0OgpAQCAtMjcsNiArMjcsNyBAQAogCiAjdmVyc2lvbiA0CiAjdmVyc2lvbiA1CisjdmVyc2lvbiA2CiAKIC8vIEluIGEgcmVhbGlzdGljIHN3aXRjaCBwaXBlbGluZSB0aGVyZSBhcmUgbXVsdGlwbGUgcmVhc29ucyBhIGdpdmVuIHBhY2tldAogLy8gc2hvdWxkIGJlIHNlbnQgdG8gdGhlIGNvbnRyb2xsZXIuIFRoZSBwYWNrZXQtaW4gcmVhc29uIGZpZWxkIGlzIG9ubHkgOCBiaXRzLApAQCAtNDcsNCArNDgsMTEgQEAKICAgICBPRlBfQlNOX1BLVElOX0ZMQUdfU0ZMT1cgPSAweDgwMCwKICAgICBPRlBfQlNOX1BLVElOX0ZMQUdfQVJQX0NBQ0hFID0gMHgxMDAwLAogICAgIE9GUF9CU05fUEtUSU5fRkxBR19BUlBfVEFSR0VUID0gMHgyMDAwLAorICAgIE9GUF9CU05fUEtUSU5fRkxBR19JR01QID0gMHg0MDAwLAorICAgIE9GUF9CU05fUEtUSU5fRkxBR19QSU0gPSAweDgwMDAsCisgICAgT0ZQX0JTTl9QS1RJTl9GTEFHX1ZYTEFOX1NJUF9NSVNTID0gMHgxMDAwMCwKKyAgICBPRlBfQlNOX1BLVElOX0ZMQUdfTUNfUkVTRVJWRUQgPSAweDIwMDAwLAorICAgIE9GUF9CU05fUEtUSU5fRkxBR19BTkFMWVRJQ1MgPSAweDQwMDAwLAorICAgIE9GUF9CU05fUEtUSU5fRkxBR19JQ01QVjYgPSAweDgwMDAwLAorICAgIE9GUF9CU05fUEtUSU5fRkxBR19JTkdSRVNTX0FDTF9MT0NBTCA9IDB4MTAwMDAwLAogfTsKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L2Jzbl9wb3J0X2NvdW50ZXIgYi9vcGVuZmxvd19pbnB1dC9ic25fcG9ydF9jb3VudGVyCmluZGV4IDUxYTM2ZjguLjg4ZjYwZDMgMTAwNjQ0Ci0tLSBhL29wZW5mbG93X2lucHV0L2Jzbl9wb3J0X2NvdW50ZXIKKysrIGIvb3BlbmZsb3dfaW5wdXQvYnNuX3BvcnRfY291bnRlcgpAQCAtMzAsNiArMzAsNyBAQAogCiAjdmVyc2lvbiA0CiAjdmVyc2lvbiA1CisjdmVyc2lvbiA2CiAKIGVudW0gb2ZwX2Jzbl9wb3J0X2NvdW50ZXIod2lyZV90eXBlPXVpbnQ4X3QsIGNvbXBsZXRlPUZhbHNlLCBzdGFibGU9VHJ1ZSkgewogICBPRlBfQlNOX1BPUlRfQ09VTlRFUl9SWF9CWVRFUyA9IDAsCkBAIC02MCw2ICs2MSwzNCBAQAogICBPRlBfQlNOX1BPUlRfQ09VTlRFUl9SWF9PVkVSRkxPV19FUlJPUlMgPSAyNSwKICAgT0ZQX0JTTl9QT1JUX0NPVU5URVJfVFhfQ0FSUklFUl9FUlJPUlMgPSAyNiwKICAgT0ZQX0JTTl9QT1JUX0NPVU5URVJfUlhfUEFDS0VUU19CQURfVkxBTiA9IDI3LAorICBPRlBfQlNOX1BPUlRfQ09VTlRFUl9MSU5LX1VQID0gMjgsCisgIE9GUF9CU05fUE9SVF9DT1VOVEVSX0xJTktfRE9XTiA9IDI5LAorICBPRlBfQlNOX1BPUlRfQ09VTlRFUl9SWF9QRkNfQ09OVFJPTF9GUkFNRSA9IDMwLAorICBPRlBfQlNOX1BPUlRfQ09VTlRFUl9UWF9QRkNfQ09OVFJPTF9GUkFNRSA9IDMxLAorICBPRlBfQlNOX1BPUlRfQ09VTlRFUl9SWF9QRkNfRlJBTUVfWE9OX1BSSU9SSVRZXzAgPSAzMiwKKyAgT0ZQX0JTTl9QT1JUX0NPVU5URVJfUlhfUEZDX0ZSQU1FX1hPTl9QUklPUklUWV8xID0gMzMsCisgIE9GUF9CU05fUE9SVF9DT1VOVEVSX1JYX1BGQ19GUkFNRV9YT05fUFJJT1JJVFlfMiA9IDM0LAorICBPRlBfQlNOX1BPUlRfQ09VTlRFUl9SWF9QRkNfRlJBTUVfWE9OX1BSSU9SSVRZXzMgPSAzNSwKKyAgT0ZQX0JTTl9QT1JUX0NPVU5URVJfUlhfUEZDX0ZSQU1FX1hPTl9QUklPUklUWV80ID0gMzYsCisgIE9GUF9CU05fUE9SVF9DT1VOVEVSX1JYX1BGQ19GUkFNRV9YT05fUFJJT1JJVFlfNSA9IDM3LAorICBPRlBfQlNOX1BPUlRfQ09VTlRFUl9SWF9QRkNfRlJBTUVfWE9OX1BSSU9SSVRZXzYgPSAzOCwKKyAgT0ZQX0JTTl9QT1JUX0NPVU5URVJfUlhfUEZDX0ZSQU1FX1hPTl9QUklPUklUWV83ID0gMzksCisgIE9GUF9CU05fUE9SVF9DT1VOVEVSX1JYX1BGQ19GUkFNRV9QUklPUklUWV8wID0gNDAsCisgIE9GUF9CU05fUE9SVF9DT1VOVEVSX1JYX1BGQ19GUkFNRV9QUklPUklUWV8xID0gNDEsCisgIE9GUF9CU05fUE9SVF9DT1VOVEVSX1JYX1BGQ19GUkFNRV9QUklPUklUWV8yID0gNDIsCisgIE9GUF9CU05fUE9SVF9DT1VOVEVSX1JYX1BGQ19GUkFNRV9QUklPUklUWV8zID0gNDMsCisgIE9GUF9CU05fUE9SVF9DT1VOVEVSX1JYX1BGQ19GUkFNRV9QUklPUklUWV80ID0gNDQsCisgIE9GUF9CU05fUE9SVF9DT1VOVEVSX1JYX1BGQ19GUkFNRV9QUklPUklUWV81ID0gNDUsCisgIE9GUF9CU05fUE9SVF9DT1VOVEVSX1JYX1BGQ19GUkFNRV9QUklPUklUWV82ID0gNDYsCisgIE9GUF9CU05fUE9SVF9DT1VOVEVSX1JYX1BGQ19GUkFNRV9QUklPUklUWV83ID0gNDcsCisgIE9GUF9CU05fUE9SVF9DT1VOVEVSX1RYX1BGQ19GUkFNRV9QUklPUklUWV8wID0gNDgsCisgIE9GUF9CU05fUE9SVF9DT1VOVEVSX1RYX1BGQ19GUkFNRV9QUklPUklUWV8xID0gNDksCisgIE9GUF9CU05fUE9SVF9DT1VOVEVSX1RYX1BGQ19GUkFNRV9QUklPUklUWV8yID0gNTAsCisgIE9GUF9CU05fUE9SVF9DT1VOVEVSX1RYX1BGQ19GUkFNRV9QUklPUklUWV8zID0gNTEsCisgIE9GUF9CU05fUE9SVF9DT1VOVEVSX1RYX1BGQ19GUkFNRV9QUklPUklUWV80ID0gNTIsCisgIE9GUF9CU05fUE9SVF9DT1VOVEVSX1RYX1BGQ19GUkFNRV9QUklPUklUWV81ID0gNTMsCisgIE9GUF9CU05fUE9SVF9DT1VOVEVSX1RYX1BGQ19GUkFNRV9QUklPUklUWV82ID0gNTQsCisgIE9GUF9CU05fUE9SVF9DT1VOVEVSX1RYX1BGQ19GUkFNRV9QUklPUklUWV83ID0gNTUsCiB9OwogCiBzdHJ1Y3Qgb2ZfYnNuX3BvcnRfY291bnRlcl9zdGF0c19yZXF1ZXN0IDogb2ZfYnNuX3N0YXRzX3JlcXVlc3QgewpkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvYnNuX3BvcnRfZ2VuZXJhdGlvbl9pZCBiL29wZW5mbG93X2lucHV0L2Jzbl9wb3J0X2dlbmVyYXRpb25faWQKaW5kZXggZmRkZjlhMy4uM2I0MjQxMSAxMDA2NDQKLS0tIGEvb3BlbmZsb3dfaW5wdXQvYnNuX3BvcnRfZ2VuZXJhdGlvbl9pZAorKysgYi9vcGVuZmxvd19pbnB1dC9ic25fcG9ydF9nZW5lcmF0aW9uX2lkCkBAIC0yOCw2ICsyOCw3IEBACiAvLyBUaGlzIGdlbmVyYXRpb24gSUQgaXMgY2hhbmdlZCB3aGVuZXZlciBhIHBvcnQgZ29lcyBsaW5rLWRvd24uCiAKICN2ZXJzaW9uIDUKKyN2ZXJzaW9uIDYKIAogc3RydWN0IG9mX3BvcnRfZGVzY19wcm9wX2Jzbl9nZW5lcmF0aW9uX2lkIDogb2ZfcG9ydF9kZXNjX3Byb3BfYnNuIHsKICAgICB1aW50MTZfdCB0eXBlID09IDB4ZmZmZjsKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L2Jzbl9wcmlvcml0aXplX3BkdXMgYi9vcGVuZmxvd19pbnB1dC9ic25fcHJpb3JpdGl6ZV9wZHVzCmluZGV4IDdhMTc5YTkuLjJhZmI3MGEgMTAwNjQ0Ci0tLSBhL29wZW5mbG93X2lucHV0L2Jzbl9wcmlvcml0aXplX3BkdXMKKysrIGIvb3BlbmZsb3dfaW5wdXQvYnNuX3ByaW9yaXRpemVfcGR1cwpAQCAtMzEsNiArMzEsNyBAQAogCiAjdmVyc2lvbiA0CiAjdmVyc2lvbiA1CisjdmVyc2lvbiA2CiAKIHN0cnVjdCBvZl9pbnN0cnVjdGlvbl9ic25fcHJpb3JpdGl6ZV9wZHVzIDogb2ZfaW5zdHJ1Y3Rpb25fYnNuIHsKICAgICB1aW50MTZfdCB0eXBlID09IDY1NTM1OwpkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvYnNuX3F1ZXVlX25hbWUgYi9vcGVuZmxvd19pbnB1dC9ic25fcXVldWVfbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTNmYmJiCi0tLSAvZGV2L251bGwKKysrIGIvb3BlbmZsb3dfaW5wdXQvYnNuX3F1ZXVlX25hbWUKQEAgLTAsMCArMSwzNyBAQAorLy8gQ29weXJpZ2h0IDIwMTYsIEJpZyBTd2l0Y2ggTmV0d29ya3MsIEluYy4KKy8vCisvLyBMb3hpR2VuIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDEuMCAoRVBMKSwgd2l0aAorLy8gdGhlIGZvbGxvd2luZyBzcGVjaWFsIGV4Y2VwdGlvbjoKKy8vCisvLyBMT1hJIEV4Y2VwdGlvbgorLy8KKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIHRlcm1zIG9mIHRoZSBFUEwsIHlvdSBtYXkgZGlzdHJpYnV0ZSBsaWJyYXJpZXMKKy8vIGdlbmVyYXRlZCBieSBMb3hpR2VuIChMb3hpR2VuIExpYnJhcmllcykgdW5kZXIgdGhlIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBwcm92aWRlZAorLy8gdGhhdCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBub3RpY2VzIGdlbmVyYXRlZCBieSBMb3hpR2VuIGFyZSBub3QgYWx0ZXJlZCBvciByZW1vdmVkCisvLyBmcm9tIHRoZSBMb3hpR2VuIExpYnJhcmllcyBhbmQgdGhlIG5vdGljZSBwcm92aWRlZCBiZWxvdyBpcyAoaSkgaW5jbHVkZWQgaW4KKy8vIHRoZSBMb3hpR2VuIExpYnJhcmllcywgaWYgZGlzdHJpYnV0ZWQgaW4gc291cmNlIGNvZGUgZm9ybSBhbmQgKGlpKSBpbmNsdWRlZCBpbiBhbnkKKy8vIGRvY3VtZW50YXRpb24gZm9yIHRoZSBMb3hpR2VuIExpYnJhcmllcywgaWYgZGlzdHJpYnV0ZWQgaW4gYmluYXJ5IGZvcm0uCisvLworLy8gTm90aWNlOiAiQ29weXJpZ2h0IDIwMTMsIEJpZyBTd2l0Y2ggTmV0d29ya3MsIEluYy4gVGhpcyBsaWJyYXJ5IHdhcyBnZW5lcmF0ZWQgYnkgdGhlIExveGlHZW4gQ29tcGlsZXIuIgorLy8KKy8vIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgRVBMIG9yIExPWEkgRXhjZXB0aW9uLiBZb3UgbWF5IG9idGFpbgorLy8gYSBjb3B5IG9mIHRoZSBFUEwgYXQ6CisvLworLy8gaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisvLyBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUKKy8vIEVQTCBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKy8vIHVuZGVyIHRoZSBFUEwuCisKKyN2ZXJzaW9uIDUKKyN2ZXJzaW9uIDYKKworc3RydWN0IG9mX3F1ZXVlX2Rlc2NfcHJvcF9ic25fcXVldWVfbmFtZSA6IG9mX3F1ZXVlX2Rlc2NfcHJvcF9ic24geworICAgIHVpbnQxNl90IHR5cGUgPT0gMHhmZmZmOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCBleHBlcmltZW50ZXIgPT0gMHg1YzE2Yzc7CisgICAgdWludDMyX3QgZXhwX3R5cGUgPT0gMDsKKyAgICBvZl9vY3RldHNfdCBuYW1lOyAvKiBVVEYtOCBlbmNvZGVkLiBOb3QgbnVsbCB0ZXJtaW5hdGVkLiAqLworfTsKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L2Jzbl9yZXF1aXJlX3ZsYW5feGxhdGUgYi9vcGVuZmxvd19pbnB1dC9ic25fcmVxdWlyZV92bGFuX3hsYXRlCmluZGV4IDMyZmM1NWMuLmRjMGI1NmUgMTAwNjQ0Ci0tLSBhL29wZW5mbG93X2lucHV0L2Jzbl9yZXF1aXJlX3ZsYW5feGxhdGUKKysrIGIvb3BlbmZsb3dfaW5wdXQvYnNuX3JlcXVpcmVfdmxhbl94bGF0ZQpAQCAtMzEsNiArMzEsNyBAQAogCiAjdmVyc2lvbiA0CiAjdmVyc2lvbiA1CisjdmVyc2lvbiA2CiAKIHN0cnVjdCBvZl9pbnN0cnVjdGlvbl9ic25fcmVxdWlyZV92bGFuX3hsYXRlIDogb2ZfaW5zdHJ1Y3Rpb25fYnNuIHsKICAgICB1aW50MTZfdCB0eXBlID09IDY1NTM1OwpkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvYnNuX3NwYW5fZGVzdGluYXRpb24gYi9vcGVuZmxvd19pbnB1dC9ic25fc3Bhbl9kZXN0aW5hdGlvbgppbmRleCBmZDRmNjc3Li5mNDQzOWJiIDEwMDY0NAotLS0gYS9vcGVuZmxvd19pbnB1dC9ic25fc3Bhbl9kZXN0aW5hdGlvbgorKysgYi9vcGVuZmxvd19pbnB1dC9ic25fc3Bhbl9kZXN0aW5hdGlvbgpAQCAtMzEsNiArMzEsNyBAQAogCiAjdmVyc2lvbiA0CiAjdmVyc2lvbiA1CisjdmVyc2lvbiA2CiAKIHN0cnVjdCBvZl9pbnN0cnVjdGlvbl9ic25fc3Bhbl9kZXN0aW5hdGlvbiA6IG9mX2luc3RydWN0aW9uX2JzbiB7CiAgICAgdWludDE2X3QgdHlwZSA9PSA2NTUzNTsKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L2Jzbl9zd2l0Y2hfcGlwZWxpbmUgYi9vcGVuZmxvd19pbnB1dC9ic25fc3dpdGNoX3BpcGVsaW5lCmluZGV4IGQ0MjUzMmIuLmY5MTBkNWEgMTAwNjQ0Ci0tLSBhL29wZW5mbG93X2lucHV0L2Jzbl9zd2l0Y2hfcGlwZWxpbmUKKysrIGIvb3BlbmZsb3dfaW5wdXQvYnNuX3N3aXRjaF9waXBlbGluZQpAQCAtMzAsNiArMzAsNyBAQAogCiAjdmVyc2lvbiA0CiAjdmVyc2lvbiA1CisjdmVyc2lvbiA2CiAKIHN0cnVjdCBvZl9ic25fZ2V0X3N3aXRjaF9waXBlbGluZV9yZXF1ZXN0IDogb2ZfYnNuX2hlYWRlciB7CiAgICAgdWludDhfdCB2ZXJzaW9uOwpkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvYnNuX3Rha2VvdmVyIGIvb3BlbmZsb3dfaW5wdXQvYnNuX3Rha2VvdmVyCmluZGV4IDFiOTU2MTEuLmI2OTcyMWIgMTAwNjQ0Ci0tLSBhL29wZW5mbG93X2lucHV0L2Jzbl90YWtlb3ZlcgorKysgYi9vcGVuZmxvd19pbnB1dC9ic25fdGFrZW92ZXIKQEAgLTI5LDYgKzI5LDcgQEAKIC8vIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIEVQTC4KIAogI3ZlcnNpb24gNQorI3ZlcnNpb24gNgogCiAvLyBUaGlzIG1lc3NhZ2UgaXMgdXNlZCBieSBJVlMgZm9yIGhpdGxlc3MgcmVzdGFydC4KIApkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvYnNuX3RjcF9mbGFncyBiL29wZW5mbG93X2lucHV0L2Jzbl90Y3BfZmxhZ3MKaW5kZXggMWE4NGE5MC4uMDY5NjVlZiAxMDA2NDQKLS0tIGEvb3BlbmZsb3dfaW5wdXQvYnNuX3RjcF9mbGFncworKysgYi9vcGVuZmxvd19pbnB1dC9ic25fdGNwX2ZsYWdzCkBAIC0zMSw2ICszMSw3IEBACiAjdmVyc2lvbiAzCiAjdmVyc2lvbiA0CiAjdmVyc2lvbiA1CisjdmVyc2lvbiA2CiAKIC8qCiAgKiBUQ1AgZmxhZ3MKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L2Jzbl90aW1lIGIvb3BlbmZsb3dfaW5wdXQvYnNuX3RpbWUKaW5kZXggZDY5ZTUzOC4uYmI1OTk2NiAxMDA2NDQKLS0tIGEvb3BlbmZsb3dfaW5wdXQvYnNuX3RpbWUKKysrIGIvb3BlbmZsb3dfaW5wdXQvYnNuX3RpbWUKQEAgLTM0LDYgKzM0LDcgQEAKIAogI3ZlcnNpb24gNAogI3ZlcnNpb24gNQorI3ZlcnNpb24gNgogCiBzdHJ1Y3Qgb2ZfYnNuX3RpbWVfcmVxdWVzdCA6IG9mX2Jzbl9oZWFkZXIgewogICAgIHVpbnQ4X3QgdmVyc2lvbjsKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L2Jzbl90bHYgYi9vcGVuZmxvd19pbnB1dC9ic25fdGx2CmluZGV4IDA5ODVlMWMuLjg0ZjkxNTggMTAwNjQ0Ci0tLSBhL29wZW5mbG93X2lucHV0L2Jzbl90bHYKKysrIGIvb3BlbmZsb3dfaW5wdXQvYnNuX3RsdgpAQCAtMSw0ICsxLDQgQEAKLS8vIENvcHlyaWdodCAyMDEzLCBCaWcgU3dpdGNoIE5ldHdvcmtzLCBJbmMuCisvLyBDb3B5cmlnaHQgMjAxMy0yMDE3LCBCaWcgU3dpdGNoIE5ldHdvcmtzLCBJbmMuCiAvLwogLy8gTG94aUdlbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSwKIC8vIHZlcnNpb24gMS4wIChFUEwpLCB3aXRoIHRoZSBmb2xsb3dpbmcgc3BlY2lhbCBleGNlcHRpb246CkBAIC0zMCw2ICszMCw3IEBACiAKICN2ZXJzaW9uIDQKICN2ZXJzaW9uIDUKKyN2ZXJzaW9uIDYKIAogc3RydWN0IG9mX2Jzbl90bHZfcG9ydCA6IG9mX2Jzbl90bHYgewogICAgIHVpbnQxNl90IHR5cGUgPT0gMDsKQEAgLTU1MCw1ICs1NTEsNTI4IEBACiBzdHJ1Y3Qgb2ZfYnNuX3Rsdl9pcHY2IDogb2ZfYnNuX3RsdiB7CiAgICAgdWludDE2X3QgdHlwZSA9PSA4NDsKICAgICB1aW50MTZfdCBsZW5ndGg7Ci0gICAgb2ZfaXB2Nl90IHZhbHVlOyAKKyAgICBvZl9pcHY2X3QgdmFsdWU7Cit9OworCitlbnVtIG9mcF9ic25fZGVjYXAod2lyZV90eXBlPXVpbnQxNl90KSB7CisgICAgT0ZQX0JTTl9ERUNBUF9WWExBTiA9IDAsCisgICAgT0ZQX0JTTl9ERUNBUF9FUlNQQU4gPSAxLAorICAgIE9GUF9CU05fREVDQVBfTDJfR1JFID0gMiwKKyAgICBPRlBfQlNOX0RFQ0FQX05WR1JFID0gMywKKyAgICBPRlBfQlNOX0RFQ0FQX0NBUFdBUCA9IDQsCisgICAgT0ZQX0JTTl9ERUNBUF9MMl9NUExTID0gNSwKKyAgICBPRlBfQlNOX0RFQ0FQX0wzX0dSRSA9IDYsCisgICAgT0ZQX0JTTl9ERUNBUF9HVFAgPSA3LAorICAgIE9GUF9CU05fREVDQVBfTDNfTVBMUyA9IDgsCit9OworCitzdHJ1Y3Qgb2ZfYnNuX3Rsdl9kZWNhcCA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gODU7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIGVudW0gb2ZwX2Jzbl9kZWNhcCB2YWx1ZTsKK307CisKK3N0cnVjdCBvZl9ic25fdGx2X3ZuaSA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gODY7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHZhbHVlOworfTsKKworc3RydWN0IG9mX2Jzbl90bHZfbWNnX3R5cGVfdnhsYW4gOiBvZl9ic25fdGx2IHsKKyAgICB1aW50MTZfdCB0eXBlID09IDg3OworICAgIHVpbnQxNl90IGxlbmd0aDsKK307CisKK2VudW0gb2ZwX2Jzbl9wb3J0X3Z4bGFuX21vZGUod2lyZV90eXBlPXVpbnQ4X3QpIHsKKyAgICBPRlBfQlNOX1BPUlRfVlhMQU5fUkVDSVJDVUxBVElPTl9FTkFCTEUgPSAwLAorICAgIE9GUF9CU05fUE9SVF9WWExBTl9URVJNSU5BVElPTl9FTkFCTEUgPSAxLAorfTsKKworc3RydWN0IG9mX2Jzbl90bHZfcG9ydF92eGxhbl9tb2RlIDogb2ZfYnNuX3RsdiB7CisgICAgdWludDE2X3QgdHlwZSA9PSA4ODsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgZW51bSBvZnBfYnNuX3BvcnRfdnhsYW5fbW9kZSB2YWx1ZTsKK307CisKK2VudW0gb2ZwX2Jzbl9yYXRlX3VuaXQod2lyZV90eXBlPXVpbnQ4X3QpIHsKKyAgICBPRlBfQlNOX1JBVEVfVU5JVF9QUFMgPSAwLCAvKiBQYWNrZXRzIHBlciBzZWNvbmQgKi8KKyAgICBPRlBfQlNOX1JBVEVfVU5JVF9LQklUUFMgPSAxLCAvKiBLaWxvYml0cyBwZXIgc2Vjb25kICovCit9OworCitzdHJ1Y3Qgb2ZfYnNuX3Rsdl9yYXRlX3VuaXQgOiBvZl9ic25fdGx2IHsKKyAgICB1aW50MTZfdCB0eXBlID09IDg5OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICBlbnVtIG9mcF9ic25fcmF0ZV91bml0IHZhbHVlOworfTsKKworc3RydWN0IG9mX2Jzbl90bHZfYnJvYWRjYXN0X3JhdGUgOiBvZl9ic25fdGx2IHsKKyAgICB1aW50MTZfdCB0eXBlID09IDkwOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB2YWx1ZTsKK307CisKK3N0cnVjdCBvZl9ic25fdGx2X2tub3duX211bHRpY2FzdF9yYXRlIDogb2ZfYnNuX3RsdiB7CisgICAgdWludDE2X3QgdHlwZSA9PSA5MTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgdmFsdWU7Cit9OworCitzdHJ1Y3Qgb2ZfYnNuX3Rsdl91bmtub3duX211bHRpY2FzdF9yYXRlIDogb2ZfYnNuX3RsdiB7CisgICAgdWludDE2X3QgdHlwZSA9PSA5MjsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgdmFsdWU7Cit9OworCitzdHJ1Y3Qgb2ZfYnNuX3Rsdl91bmljYXN0X3JhdGUgOiBvZl9ic25fdGx2IHsKKyAgICB1aW50MTZfdCB0eXBlID09IDkzOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB2YWx1ZTsKK307CisKK3N0cnVjdCBvZl9ic25fdGx2X25leHRob3BfdHlwZV92eGxhbiA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gOTQ7CisgICAgdWludDE2X3QgbGVuZ3RoOworfTsKKworc3RydWN0IG9mX2Jzbl90bHZfbXVsdGljYXN0X2ludGVyZmFjZV9pZCA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gOTU7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHZhbHVlOworfTsKKworc3RydWN0IG9mX2Jzbl90bHZfdXNlX3BhY2tldF9zdGF0ZSA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gOTY7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQ4X3QgdmFsdWU7Cit9OworCitlbnVtIG9mcF9ic25fc3RhdHVzKHdpcmVfdHlwZT11aW50OF90KSB7CisgICAgT0ZQX0JTTl9TVEFUVVNfRElTQUJMRSA9IDAsCisgICAgT0ZQX0JTTl9TVEFUVVNfRU5BQkxFID0gMSwKK307CisKK3N0cnVjdCBvZl9ic25fdGx2X3N0YXR1czogb2ZfYnNuX3RsdiB7CisgICAgdWludDE2X3QgdHlwZSA9PSA5NzsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgZW51bSBvZnBfYnNuX3N0YXR1cyB2YWx1ZTsKK307CisKK3N0cnVjdCBvZl9ic25fdmxhbl9tYWMgeworICAgIHVpbnQxNl90IHZsYW5fdmlkOworICAgIG9mX21hY19hZGRyX3QgbWFjOworfTsKKworc3RydWN0IG9mX2Jzbl90bHZfdmxhbl9tYWNfbGlzdCA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gOTg7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIGxpc3Qob2ZfYnNuX3ZsYW5fbWFjX3QpIGtleTsKK307CisKK3N0cnVjdCBvZl9ic25fdGx2X3ZmaSA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gOTk7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQxNl90IHZhbHVlOworfTsKKworc3RydWN0IG9mX2Jzbl90bHZfaGFzaF9zZWVkIDogb2ZfYnNuX3RsdiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxMDA7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHNlZWQxOworICAgIHVpbnQzMl90IHNlZWQyOworfTsKKworZW51bSBvZl9ic25faGFzaF90eXBlKHdpcmVfdHlwZT11aW50OF90KSB7CisgICAgT0ZQX0JTTl9IQVNIX1RZUEVfTDIgPSAwLAorICAgIE9GUF9CU05fSEFTSF9UWVBFX0wzID0gMSwKKyAgICBPRlBfQlNOX0hBU0hfVFlQRV9FTkhBTkNFRCA9IDIsCit9OworCitzdHJ1Y3Qgb2ZfYnNuX3Rsdl9oYXNoX3R5cGUgOiBvZl9ic25fdGx2IHsKKyAgICB1aW50MTZfdCB0eXBlID09IDEwMTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgZW51bSBvZl9ic25faGFzaF90eXBlIHZhbHVlOworfTsKKworZW51bSBvZl9ic25faGFzaF9wYWNrZXRfdHlwZSh3aXJlX3R5cGU9dWludDhfdCkgeworICAgIE9GX0JTTl9IQVNIX1BBQ0tFVF9MMiA9IDAsCisgICAgT0ZfQlNOX0hBU0hfUEFDS0VUX0wyR1JFID0gMSwKKyAgICBPRl9CU05fSEFTSF9QQUNLRVRfSVBWNCA9IDMsCisgICAgT0ZfQlNOX0hBU0hfUEFDS0VUX0lQVjYgPSA0LAorICAgIE9GX0JTTl9IQVNIX1BBQ0tFVF9NUExTID0gNSwKKyAgICBPRl9CU05fSEFTSF9QQUNLRVRfU1lNTUVUUklDID0gNiwKK307CisKK3N0cnVjdCBvZl9ic25fdGx2X2hhc2hfcGFja2V0X3R5cGUgOiBvZl9ic25fdGx2IHsKKyAgICB1aW50MTZfdCB0eXBlID09IDEwMjsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgZW51bSBvZl9ic25faGFzaF9wYWNrZXRfdHlwZSB2YWx1ZTsKK307CisKK2VudW0gb2ZfYnNuX2hhc2hfcGFja2V0X2ZpZWxkKHdpcmVfdHlwZT11aW50NjRfdCwgYml0bWFzaz1UcnVlKSB7CisgICAgLy8gMHgxIGlzIHVudXNlZAorICAgIE9GUF9CU05fSEFTSF9GSUVMRF9EU1RfTUFDID0gICAgIDB4MiwKKyAgICBPRlBfQlNOX0hBU0hfRklFTERfU1JDX01BQyA9ICAgICAweDQsCisgICAgT0ZQX0JTTl9IQVNIX0ZJRUxEX0VUSF9UWVBFID0gICAgMHg4LAorICAgIE9GUF9CU05fSEFTSF9GSUVMRF9WTEFOX0lEID0gICAgIDB4MTAsCisgICAgT0ZQX0JTTl9IQVNIX0ZJRUxEX0lOTkVSX0wyID0gICAgMHgyMCwKKyAgICBPRlBfQlNOX0hBU0hfRklFTERfSU5ORVJfTDMgPSAgICAweDQwLAorICAgIE9GUF9CU05fSEFTSF9GSUVMRF9TUkNfSVAgPSAgICAgIDB4ODAsCisgICAgT0ZQX0JTTl9IQVNIX0ZJRUxEX0RTVF9JUCA9ICAgICAgMHgxMDAsCisgICAgT0ZQX0JTTl9IQVNIX0ZJRUxEX0lQX1BST1RPID0gICAgMHgyMDAsCisgICAgT0ZQX0JTTl9IQVNIX0ZJRUxEX1NSQ19MNF9QT1JUID0gMHg0MDAsCisgICAgT0ZQX0JTTl9IQVNIX0ZJRUxEX0RTVF9MNF9QT1JUID0gMHg4MDAsCisgICAgT0ZQX0JTTl9IQVNIX0ZJRUxEX01QTFNfTEFCRUwxID0gMHgxMDAwLAorICAgIE9GUF9CU05fSEFTSF9GSUVMRF9NUExTX0xBQkVMMiA9IDB4MjAwMCwKKyAgICBPRlBfQlNOX0hBU0hfRklFTERfTVBMU19MQUJFTDMgPSAweDQwMDAsCisgICAgT0ZQX0JTTl9IQVNIX0ZJRUxEX01QTFNfTEFCRUxfSElfQklUUyAgPSAweDgwMDAsCisgICAgT0ZQX0JTTl9IQVNIX0ZJRUxEX01QTFNfUEFZTE9BRF9TUkNfSVAgPSAweDEwMDAwLAorICAgIE9GUF9CU05fSEFTSF9GSUVMRF9NUExTX1BBWUxPQURfRFNUX0lQID0gMHgyMDAwMCwKKyAgICBPRlBfQlNOX0hBU0hfRklFTERfU1lNTUVUUklDID0gICAgICAgICAgIDB4NDAwMDAsCit9OworCitzdHJ1Y3Qgb2ZfYnNuX3Rsdl9oYXNoX3BhY2tldF9maWVsZCA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMTAzOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICBlbnVtIG9mX2Jzbl9oYXNoX3BhY2tldF9maWVsZCB2YWx1ZTsKK307CisKK3N0cnVjdCBvZl9ic25fdGx2X2hhc2hfZ3RwX2hlYWRlcl9tYXRjaCA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMTA0OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50OF90IGZpcnN0X2hlYWRlcl9ieXRlOworICAgIHVpbnQ4X3QgZmlyc3RfaGVhZGVyX21hc2s7Cit9OworCitlbnVtIG9mX2Jzbl9oYXNoX2d0cF9wb3J0X21hdGNoKHdpcmVfdHlwZT11aW50OF90KSB7CisgICAgT0ZfQlNOX0hBU0hfR1RQX1BPUlRfTUFUQ0hfU1JDID0gMSwKKyAgICBPRl9CU05fSEFTSF9HVFBfUE9SVF9NQVRDSF9EU1QgPSAyLAorICAgIE9GX0JTTl9IQVNIX0dUUF9QT1JUX01BVENIX1NSQ19PUl9EU1QgPSAzLAorICAgIE9GX0JTTl9IQVNIX0dUUF9QT1JUX01BVENIX1NSQ19BTkRfRFNUID0gNCwKK307CisKK3N0cnVjdCBvZl9ic25fdGx2X2hhc2hfZ3RwX3BvcnRfbWF0Y2ggOiBvZl9ic25fdGx2IHsKKyAgICB1aW50MTZfdCB0eXBlID09IDEwNTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgZW51bSBvZl9ic25faGFzaF9ndHBfcG9ydF9tYXRjaCBtYXRjaDsKKyAgICB1aW50MTZfdCBzcmNfcG9ydDsKKyAgICB1aW50MTZfdCBkc3RfcG9ydDsKK307CisKK3N0cnVjdCBvZl9ic25fdGx2X3VudGFnZ2VkIDogb2ZfYnNuX3RsdiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxMDY7CisgICAgdWludDE2X3QgbGVuZ3RoOworfTsKKworc3RydWN0IG9mX2Jzbl90bHZfdmZwX2NsYXNzX2lkIDogb2ZfYnNuX3RsdiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxMDc7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHZhbHVlOworfTsKKworc3RydWN0IG9mX2Jzbl90bHZfcW9zX3ByaW9yaXR5IDogb2ZfYnNuX3RsdiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxMDg7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHZhbHVlOworfTsKKworc3RydWN0IG9mX2Jzbl90bHZfcGFyZW50X3BvcnQgOiBvZl9ic25fdGx2IHsKKyAgICB1aW50MTZfdCB0eXBlID09IDEwOTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgb2ZfcG9ydF9ub190IHZhbHVlOworfTsKKworc3RydWN0IG9mX2Jzbl90bHZfbG9vcGJhY2tfcG9ydCA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMTEwOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICBvZl9wb3J0X25vX3QgdmFsdWU7Cit9OworCitzdHJ1Y3Qgb2ZfYnNuX3Rsdl92cG5fa2V5IDogb2ZfYnNuX3RsdiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxMTE7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHZhbHVlOworfTsKKworc3RydWN0IG9mX2Jzbl90bHZfZHNjcCA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMTEyOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MTZfdCB2YWx1ZTsgIC8vIDAtNjMKK307CisKK3N0cnVjdCBvZl9ic25fdGx2X3R0bCA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMTEzOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MTZfdCB2YWx1ZTsKK307CisKK3N0cnVjdCBvZl9ic25fdGx2X25leHRfaG9wX21hYyA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMTE0OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICBvZl9tYWNfYWRkcl90IHZhbHVlOworfTsKKworc3RydWN0IG9mX2Jzbl90bHZfbmV4dF9ob3BfaXB2NCA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMTE1OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICBvZl9pcHY0X3QgdmFsdWU7Cit9OworCitzdHJ1Y3Qgb2ZfYnNuX3Rsdl9yYXRlX2xpbWl0IDogb2ZfYnNuX3RsdiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxMTY7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHZhbHVlOyAgLy8gaW4gS2JwcworfTsKKworc3RydWN0IG9mX2Jzbl90bHZfdnhsYW5fZWdyZXNzX2xhZyA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMTE3OworICAgIHVpbnQxNl90IGxlbmd0aDsKK307CisKK3N0cnVjdCBvZl9ic25fdGx2X2NwdV9sYWcgOiBvZl9ic25fdGx2IHsKKyAgICB1aW50MTZfdCB0eXBlID09IDExODsKKyAgICB1aW50MTZfdCBsZW5ndGg7Cit9OworCitzdHJ1Y3Qgb2ZfYnNuX3Rsdl91aW50NjRfbGlzdCA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMTE5OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICBsaXN0KG9mX3VpbnQ2NF90KSB2YWx1ZTsKK307CisKK3N0cnVjdCBvZl9ic25fdGx2X2Rpc2FibGVfc3JjX21hY19jaGVjayA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMTIwOworICAgIHVpbnQxNl90IGxlbmd0aDsKK307CisKK3N0cnVjdCBvZl9ic25fdGx2X2Ryb3AgOiBvZl9ic25fdGx2IHsKKyAgICB1aW50MTZfdCB0eXBlID09IDEyMTsKKyAgICB1aW50MTZfdCBsZW5ndGg7Cit9OworCitzdHJ1Y3Qgb2ZfYnNuX3Rsdl9pcHY2X3ByZWZpeCA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMTIyOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICBvZl9pcHY2X3QgdmFsdWU7CisgICAgdWludDhfdCBwcmVmaXhfbGVuZ3RoOworfTsKKworc3RydWN0IG9mX2Jzbl90bHZfbmRwX29mZmxvYWQgOiBvZl9ic25fdGx2IHsKKyAgICB1aW50MTZfdCB0eXBlID09IDEyMzsKKyAgICB1aW50MTZfdCBsZW5ndGg7Cit9OworCitzdHJ1Y3Qgb2ZfYnNuX3Rsdl9uZHBfc3RhdGljIDogb2ZfYnNuX3RsdiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxMjQ7CisgICAgdWludDE2X3QgbGVuZ3RoOworfTsKKworc3RydWN0IG9mX2Jzbl90bHZfaWNtcHY2X2Noa3N1bSA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMTI1OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MTZfdCB2YWx1ZTsKK307CisKK3N0cnVjdCBvZl9ic25fdGx2X2lwdjZfc3JjIDogb2ZfYnNuX3RsdiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxMjY7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIG9mX2lwdjZfdCB2YWx1ZTsKK307CisKK3N0cnVjdCBvZl9ic25fdGx2X2lwdjZfZHN0IDogb2ZfYnNuX3RsdiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxMjc7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIG9mX2lwdjZfdCB2YWx1ZTsKK307CisKK3N0cnVjdCBvZl9ic25fdGx2X3B1c2hfdmxhbl9vbl9pbmdyZXNzIDogb2ZfYnNuX3RsdiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxMjg7CisgICAgdWludDE2X3QgbGVuZ3RoOworfTsKKworLy8gYXBwbHlfcGFja2V0cyBhbmQgYXBwbHlfYnl0ZXMgYXJlIHN0YXQgY291bnRlcnMsIGxpa2UgcnhfcGFja2V0CisvLyBpZGVudGlmaWVzIHBhY2tldHMgYW5kIGJ5dGVzIGFwcGxpZWQgdG8gc29tZSBhY3Rpb24sIGZvciBleGFtcGxlOgorLy8gcGFja2V0cyB3aXRoIGluZXQgTDMvTDQgaGVhZGVycyBmb3IgbmV0ZmxvdworCitzdHJ1Y3Qgb2ZfYnNuX3Rsdl9hcHBseV9wYWNrZXRzIDogb2ZfYnNuX3RsdiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxMjk7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQ2NF90IHZhbHVlOworfTsKKworc3RydWN0IG9mX2Jzbl90bHZfYXBwbHlfYnl0ZXMgOiBvZl9ic25fdGx2IHsKKyAgICB1aW50MTZfdCB0eXBlID09IDEzMDsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDY0X3QgdmFsdWU7Cit9OworCitzdHJ1Y3Qgb2ZfYnNuX3Rsdl9ldGhfdHlwZSA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMTMxOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MTZfdCB2YWx1ZTsKK307CisKK3N0cnVjdCBvZl9ic25fdGx2X2VjbiA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMTMyOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50OF90IHZhbHVlOworfTsKKworc3RydWN0IG9mX2Jzbl90bHZfdGNwX2ZsYWdzIDogb2ZfYnNuX3RsdiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxMzM7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQxNl90IHZhbHVlOworfTsKKworc3RydWN0IG9mX2Jzbl90bHZfbDNfaW50ZXJmYWNlX2NsYXNzX2lkIDogb2ZfYnNuX3RsdiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxMzQ7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHZhbHVlOworfTsKKworc3RydWN0IG9mX2Jzbl90bHZfbDNfc3JjX2NsYXNzX2lkIDogb2ZfYnNuX3RsdiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxMzU7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHZhbHVlOworfTsKKworc3RydWN0IG9mX2Jzbl90bHZfbDNfZHN0X2NsYXNzX2lkIDogb2ZfYnNuX3RsdiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxMzY7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHZhbHVlOworfTsKKworc3RydWN0IG9mX2Jzbl90bHZfZWdyZXNzX29ubHkgOiBvZl9ic25fdGx2IHsKKyAgICB1aW50MTZfdCB0eXBlID09IDEzNzsKKyAgICB1aW50MTZfdCBsZW5ndGg7Cit9OworCitzdHJ1Y3Qgb2ZfYnNuX3Rsdl9pbmdyZXNzX3BvcnRfZ3JvdXBfaWQgOiBvZl9ic25fdGx2IHsKKyAgICB1aW50MTZfdCB0eXBlID09IDEzODsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgdmFsdWU7Cit9OworCitzdHJ1Y3Qgb2ZfYnNuX3Rsdl9lZ3Jlc3NfcG9ydF9ncm91cF9pZCA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMTM5OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB2YWx1ZTsKK307CisKK3N0cnVjdCBvZl9ic25fdGx2X2RhdGFfbWFzayA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMTQwOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICBvZl9vY3RldHNfdCB2YWx1ZTsKK307CisKK2VudW0gb2ZwX2Jzbl9wb3J0X3VzYWdlKHdpcmVfdHlwZT11aW50MTZfdCkgeworICAgIE9GUF9CU05fUE9SVF9VTlVTRUQgPSAwLAorICAgIE9GUF9CU05fUE9SVF9UUkFOU01JVF9PTkxZID0gMSwKKyAgICBPRlBfQlNOX1BPUlRfUkVDRUlWRV9PTkxZID0gMiwKKyAgICBPRlBfQlNOX1BPUlRfQklESVJFQ1RJT04gPSAzLAorfTsKKworc3RydWN0IG9mX2Jzbl90bHZfcG9ydF91c2FnZSA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMTQxOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICBlbnVtIG9mcF9ic25fcG9ydF91c2FnZSB2YWx1ZTsKK307CisKK2VudW0gb2ZwX2Jzbl90dW5uZWxfdHlwZSh3aXJlX3R5cGU9dWludDY0X3QsIGJpdG1hc2s9VHJ1ZSkgeworICAgIE9GUF9CU05fVFVOTkVMX0wyR1JFID0gMHgxLAorfTsKKworc3RydWN0IG9mX2Jzbl90bHZfdHVubmVsX2NhcGFiaWxpdHkgOiBvZl9ic25fdGx2IHsKKyAgICB1aW50MTZfdCB0eXBlID09IDE0MjsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgZW51bSBvZnBfYnNuX3R1bm5lbF90eXBlIHZhbHVlOworfTsKKworZW51bSBvZnBfYnNuX2VuaGFuY2VkX2hhc2hfdHlwZSh3aXJlX3R5cGU9dWludDY0X3QsIGJpdG1hc2s9VHJ1ZSkgeworICAgIE9GUF9CU05fRU5IQU5DRURfSEFTSF9MMiA9IDB4MSwKKyAgICBPRlBfQlNOX0VOSEFOQ0VEX0hBU0hfTDMgPSAweDIsCisgICAgT0ZQX0JTTl9FTkhBTkNFRF9IQVNIX0wyR1JFID0gMHg0LAorICAgIE9GUF9CU05fRU5IQU5DRURfSEFTSF9NUExTID0gMHg4LAorICAgIE9GUF9CU05fRU5IQU5DRURfSEFTSF9HVFAgPSAweDEwLAorICAgIE9GUF9CU05fRU5IQU5DRURfSEFTSF9TWU1NRVRSSUMgPSAweDIwLAorfTsKKworc3RydWN0IG9mX2Jzbl90bHZfZW5oYW5jZWRfaGFzaF9jYXBhYmlsaXR5IDogb2ZfYnNuX3RsdiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxNDM7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIGVudW0gb2ZwX2Jzbl9lbmhhbmNlZF9oYXNoX3R5cGUgdmFsdWU7Cit9OworCitlbnVtIG9mcF9ic25fYXV0b19uZWdvdGlhdGlvbl90eXBlKHdpcmVfdHlwZT11aW50OF90KSB7CisgICAgT0ZQX0JTTl9BVVRPX05FR09USUFUSU9OX0RFRkFVTFQgPSAwLAorICAgIE9GUF9CU05fQVVUT19ORUdPVElBVElPTl9FTkFCTEUgPSAxLAorICAgIE9GUF9CU05fQVVUT19ORUdPVElBVElPTl9ESVNBQkxFID0gMiwKK307CisKK3N0cnVjdCBvZl9ic25fdGx2X2F1dG9fbmVnb3RpYXRpb24gOiBvZl9ic25fdGx2IHsKKyAgICB1aW50MTZfdCB0eXBlID09IDE0NDsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgZW51bSBvZnBfYnNuX2F1dG9fbmVnb3RpYXRpb25fdHlwZSB2YWx1ZTsKK307CisKK2VudW0gb2ZwX2Jzbl9oYXNoX2FsZ29yaXRobV90eXBlKHdpcmVfdHlwZT11aW50MTZfdCkgeworICAgIE9GUF9CU05fSEFTSF9BTEdPUklUSE1fQ1JDMTZYT1I4ID0gMCwKKyAgICBPRlBfQlNOX0hBU0hfQUxHT1JJVEhNX0NSQzE2WE9SNCA9IDEsCisgICAgT0ZQX0JTTl9IQVNIX0FMR09SSVRITV9DUkMxNlhPUjIgPSAyLAorICAgIE9GUF9CU05fSEFTSF9BTEdPUklUSE1fQ1JDMTZYT1IxID0gMywKKyAgICBPRlBfQlNOX0hBU0hfQUxHT1JJVEhNX0NSQzE2ID0gNCwKKyAgICBPRlBfQlNOX0hBU0hfQUxHT1JJVEhNX1hPUjE2ID0gNSwKKyAgICBPRlBfQlNOX0hBU0hfQUxHT1JJVEhNX0NSQzE2Q0NJVFQgPSA2LAorICAgIE9GUF9CU05fSEFTSF9BTEdPUklUSE1fQ1JDMzJMTyA9IDcsCisgICAgT0ZQX0JTTl9IQVNIX0FMR09SSVRITV9DUkMzMkhJID0gOCwKK307CisKK3N0cnVjdCBvZl9ic25fdGx2X2hhc2hfYWxnb3JpdGhtIDogb2ZfYnNuX3RsdiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxNDU7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIGVudW0gb2ZwX2Jzbl9oYXNoX2FsZ29yaXRobV90eXBlIHZhbHVlOworfTsKKworZW51bSBvZnBfYnNuX2xvb3BiYWNrX21vZGUod2lyZV90eXBlPXVpbnQ4X3QpIHsKKyAgICBPRlBfQlNOX0xPT1BCQUNLX01PREVfTk9ORSA9IDAsCisgICAgT0ZQX0JTTl9MT09QQkFDS19NT0RFX01BQyA9IDEsCisgICAgT0ZQX0JTTl9MT09QQkFDS19NT0RFX1BIWSA9IDIsCisgICAgT0ZQX0JTTl9MT09QQkFDS19NT0RFX1BIWV9SRU1PVEUgPSAzLAorfTsKKworc3RydWN0IG9mX2Jzbl90bHZfbG9vcGJhY2tfbW9kZSA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMTQ2OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICBlbnVtIG9mcF9ic25fbG9vcGJhY2tfbW9kZSB2YWx1ZTsKK307CisKK3N0cnVjdCBvZl9ic25fdGx2X25vX2FycF9yZXNwb25zZSA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMTQ3OworICAgIHVpbnQxNl90IGxlbmd0aDsKK307CisKK3N0cnVjdCBvZl9ic25fdGx2X25vX25zX3Jlc3BvbnNlIDogb2ZfYnNuX3RsdiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxNDg7CisgICAgdWludDE2X3QgbGVuZ3RoOworfTsKKworZW51bSBvZnBfYnNuX2ZvcndhcmRfZXJyb3JfY29ycmVjdGlvbl90eXBlKHdpcmVfdHlwZT11aW50OF90KSB7CisgICAgT0ZQX0JTTl9GT1JXQVJEX0VSUk9SX0NPUlJFQ1RJT05fREVGQVVMVCA9IDAsCisgICAgT0ZQX0JTTl9GT1JXQVJEX0VSUk9SX0NPUlJFQ1RJT05fRU5BQkxFID0gMSwKKyAgICBPRlBfQlNOX0ZPUldBUkRfRVJST1JfQ09SUkVDVElPTl9ESVNBQkxFID0gMiwKK307CisKK3N0cnVjdCBvZl9ic25fdGx2X2ZvcndhcmRfZXJyb3JfY29ycmVjdGlvbiA6IG9mX2Jzbl90bHYgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMTQ5OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICBlbnVtIG9mcF9ic25fZm9yd2FyZF9lcnJvcl9jb3JyZWN0aW9uX3R5cGUgdmFsdWU7Cit9OworCitzdHJ1Y3Qgb2ZfYnNuX3Rsdl9vcHRpY3NfYWx3YXlzX2VuYWJsZWQgOiBvZl9ic25fdGx2IHsKKyAgICB1aW50MTZfdCB0eXBlID09IDE1MDsKKyAgICB1aW50MTZfdCBsZW5ndGg7Cit9OworCitzdHJ1Y3Qgb2ZfYnNuX3Rsdl9mb3JjZV9saW5rX3VwIDogb2ZfYnNuX3RsdiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxNTE7CisgICAgdWludDE2X3QgbGVuZ3RoOwogfTsKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L2Jzbl91ZGYgYi9vcGVuZmxvd19pbnB1dC9ic25fdWRmCmluZGV4IDEyYWQxY2IuLjVmYWU2NzQgMTAwNjQ0Ci0tLSBhL29wZW5mbG93X2lucHV0L2Jzbl91ZGYKKysrIGIvb3BlbmZsb3dfaW5wdXQvYnNuX3VkZgpAQCAtMzEsNiArMzEsNyBAQAogI3ZlcnNpb24gMwogI3ZlcnNpb24gNAogI3ZlcnNpb24gNQorI3ZlcnNpb24gNgogCiAvKgogICogVXNlciBEZWZpbmVkIEZpZWxkcwpkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvYnNuX3VwbGluayBiL29wZW5mbG93X2lucHV0L2Jzbl91cGxpbmsKaW5kZXggZGVjMmVkNC4uODIwMTEyYyAxMDA2NDQKLS0tIGEvb3BlbmZsb3dfaW5wdXQvYnNuX3VwbGluaworKysgYi9vcGVuZmxvd19pbnB1dC9ic25fdXBsaW5rCkBAIC0yNiw2ICsyNiw3IEBACiAvLyB1bmRlciB0aGUgRVBMLgogCiAjdmVyc2lvbiA1CisjdmVyc2lvbiA2CiAKIHN0cnVjdCBvZl9wb3J0X2Rlc2NfcHJvcF9ic25fdXBsaW5rIDogb2ZfcG9ydF9kZXNjX3Byb3BfYnNuIHsKICAgICB1aW50MTZfdCB0eXBlID09IDB4ZmZmZjsKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L2Jzbl92ZmkgYi9vcGVuZmxvd19pbnB1dC9ic25fdmZpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NjAyYjAKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVuZmxvd19pbnB1dC9ic25fdmZpCkBAIC0wLDAgKzEsNDggQEAKKy8vIENvcHlyaWdodCAyMDE2LCBCaWcgU3dpdGNoIE5ldHdvcmtzLCBJbmMuCisvLworLy8gTG94aUdlbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSwKKy8vIHZlcnNpb24gMS4wIChFUEwpLCB3aXRoIHRoZSBmb2xsb3dpbmcgc3BlY2lhbCBleGNlcHRpb246CisvLworLy8gTE9YSSBFeGNlcHRpb24KKy8vCisvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSB0ZXJtcyBvZiB0aGUgRVBMLCB5b3UgbWF5CisvLyBkaXN0cmlidXRlIGxpYnJhcmllcyBnZW5lcmF0ZWQgYnkgTG94aUdlbiAoTG94aUdlbiBMaWJyYXJpZXMpCisvLyB1bmRlciB0aGUgdGVybXMgb2YgeW91ciBjaG9pY2UsIHByb3ZpZGVkIHRoYXQgY29weXJpZ2h0IGFuZAorLy8gbGljZW5zaW5nIG5vdGljZXMgZ2VuZXJhdGVkIGJ5IExveGlHZW4gYXJlIG5vdCBhbHRlcmVkIG9yIHJlbW92ZWQKKy8vIGZyb20gdGhlIExveGlHZW4gTGlicmFyaWVzIGFuZCB0aGUgbm90aWNlIHByb3ZpZGVkIGJlbG93IGlzIChpKQorLy8gaW5jbHVkZWQgaW4gdGhlIExveGlHZW4gTGlicmFyaWVzLCBpZiBkaXN0cmlidXRlZCBpbiBzb3VyY2UgY29kZQorLy8gZm9ybSBhbmQgKGlpKSBpbmNsdWRlZCBpbiBhbnkgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIExveGlHZW4KKy8vIExpYnJhcmllcywgaWYgZGlzdHJpYnV0ZWQgaW4gYmluYXJ5IGZvcm0uCisvLworLy8gTm90aWNlOiAiQ29weXJpZ2h0IDIwMTMsIEJpZyBTd2l0Y2ggTmV0d29ya3MsIEluYy4KKy8vIFRoaXMgbGlicmFyeSB3YXMgZ2VuZXJhdGVkIGJ5IHRoZSBMb3hpR2VuIENvbXBpbGVyLiIKKy8vCisvLyBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIEVQTCBvcgorLy8gTE9YSSBFeGNlcHRpb24uIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgRVBMIGF0OgorLy8KKy8vIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorLy8gc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTCisvLyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIKKy8vIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBFUEwgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZQorLy8gZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgRVBMLgorCisjdmVyc2lvbiA0CisjdmVyc2lvbiA1CisjdmVyc2lvbiA2CisKKy8qCisgKiBWWExBTiBWRkkgSU5ERVgKKyAqLworCitzdHJ1Y3Qgb2Zfb3htX2Jzbl92ZmkgOiBvZl9veG0geworICAgIHVpbnQzMl90IHR5cGVfbGVuID09IDB4MDAwMzMyMDI7CisgICAgdWludDE2X3QgdmFsdWU7Cit9OworCitzdHJ1Y3Qgb2Zfb3htX2Jzbl92ZmlfbWFza2VkIDogb2Zfb3htIHsKKyAgICB1aW50MzJfdCB0eXBlX2xlbiA9PSAweDAwMDMzMzA0OworICAgIHVpbnQxNl90IHZhbHVlOworICAgIHVpbnQxNl90IHZhbHVlX21hc2s7Cit9OwpkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvYnNuX3ZsYW5fY291bnRlciBiL29wZW5mbG93X2lucHV0L2Jzbl92bGFuX2NvdW50ZXIKaW5kZXggZDM5ZDM1Zi4uZDAyMDQ1OSAxMDA2NDQKLS0tIGEvb3BlbmZsb3dfaW5wdXQvYnNuX3ZsYW5fY291bnRlcgorKysgYi9vcGVuZmxvd19pbnB1dC9ic25fdmxhbl9jb3VudGVyCkBAIC0zMCw2ICszMCw3IEBACiAKICN2ZXJzaW9uIDQKICN2ZXJzaW9uIDUKKyN2ZXJzaW9uIDYKIAogZW51bSBvZnBfYnNuX3ZsYW5fY291bnRlcl9jb25zdGFudHMgewogICAgIE9GUF9CU05fVkxBTl9BTEwgPSAweGZmZmYsCkBAIC03NCwzICs3NSwxMyBAQAogICAgIHVpbnQzMl90IHN1YnR5cGUgPT0gOTsKICAgICBsaXN0KG9mX2Jzbl92bGFuX2NvdW50ZXJfc3RhdHNfZW50cnlfdCkgZW50cmllczsKIH07CisKK3N0cnVjdCBvZl9ic25fdmxhbl9jb3VudGVyX2NsZWFyIDogb2ZfYnNuX2hlYWRlciB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSA0OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDMyX3QgZXhwZXJpbWVudGVyID09IDB4NWMxNmM3OworICAgIHVpbnQzMl90IHN1YnR5cGUgPT0gNzA7CisgICAgdWludDE2X3Qgdmxhbl92aWQ7Cit9OwpkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvYnNuX3ZsYW5feGxhdGVfcG9ydF9ncm91cF9pZCBiL29wZW5mbG93X2lucHV0L2Jzbl92bGFuX3hsYXRlX3BvcnRfZ3JvdXBfaWQKaW5kZXggOTg2ZGMwZS4uZTU3NTY3OSAxMDA2NDQKLS0tIGEvb3BlbmZsb3dfaW5wdXQvYnNuX3ZsYW5feGxhdGVfcG9ydF9ncm91cF9pZAorKysgYi9vcGVuZmxvd19pbnB1dC9ic25fdmxhbl94bGF0ZV9wb3J0X2dyb3VwX2lkCkBAIC0zMSw2ICszMSw3IEBACiAjdmVyc2lvbiAzCiAjdmVyc2lvbiA0CiAjdmVyc2lvbiA1CisjdmVyc2lvbiA2CiAKIC8qCiAgKiBWTEFOIHhsYXRlIHBvcnQgZ3JvdXAgSUQgZm9yIFN3aXRjaExpZ2h0CmRpZmYgLS1naXQgYS9vcGVuZmxvd19pbnB1dC9ic25fdnJmIGIvb3BlbmZsb3dfaW5wdXQvYnNuX3ZyZgppbmRleCBjNjFjMzEzLi5hNTk4ZGY1IDEwMDY0NAotLS0gYS9vcGVuZmxvd19pbnB1dC9ic25fdnJmCisrKyBiL29wZW5mbG93X2lucHV0L2Jzbl92cmYKQEAgLTMxLDYgKzMxLDcgQEAKICN2ZXJzaW9uIDMKICN2ZXJzaW9uIDQKICN2ZXJzaW9uIDUKKyN2ZXJzaW9uIDYKIAogLyoKICAqIFZpcnR1YWwgUm91dGluZy9Gb3J3YXJkaW5nIElEIGZvciBTd2l0Y2hMaWdodApkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvYnNuX3ZyZl9jb3VudGVyIGIvb3BlbmZsb3dfaW5wdXQvYnNuX3ZyZl9jb3VudGVyCmluZGV4IDAxMmQ3MjguLjMxMDY2ODIgMTAwNjQ0Ci0tLSBhL29wZW5mbG93X2lucHV0L2Jzbl92cmZfY291bnRlcgorKysgYi9vcGVuZmxvd19pbnB1dC9ic25fdnJmX2NvdW50ZXIKQEAgLTMwLDYgKzMwLDcgQEAKIAogI3ZlcnNpb24gNAogI3ZlcnNpb24gNQorI3ZlcnNpb24gNgogCiBlbnVtIG9mcF9ic25fdnJmX2NvdW50ZXJfY29uc3RhbnRzKHdpcmVfdHlwZT11aW50MzJfdCkgewogICAgIE9GUF9CU05fVlJGX0FMTCA9IDB4ZmZmZmZmZmYsCmRpZmYgLS1naXQgYS9vcGVuZmxvd19pbnB1dC9ic25fdnhsYW4gYi9vcGVuZmxvd19pbnB1dC9ic25fdnhsYW4KaW5kZXggNDE3MWE1MS4uNDY2ZjQ1MCAxMDA2NDQKLS0tIGEvb3BlbmZsb3dfaW5wdXQvYnNuX3Z4bGFuCisrKyBiL29wZW5mbG93X2lucHV0L2Jzbl92eGxhbgpAQCAtMzAsNiArMzAsNyBAQAogCiAjdmVyc2lvbiA0CiAjdmVyc2lvbiA1CisjdmVyc2lvbiA2CiAKIC8qCiAgKiBWWExBTiBWaXJ0dWFsIE5ldHdvcmsgSWRlbnRpZmllcgpkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvaW50ZWwgYi9vcGVuZmxvd19pbnB1dC9pbnRlbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjZkNWEwCi0tLSAvZGV2L251bGwKKysrIGIvb3BlbmZsb3dfaW5wdXQvaW50ZWwKQEAgLTAsMCArMSw2NCBAQAorLy8gQ29weXJpZ2h0IDIwMTcsIEJpZyBTd2l0Y2ggTmV0d29ya3MsIEluYy4KKy8vCisvLyBMb3hpR2VuIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlLAorLy8gdmVyc2lvbiAxLjAgKEVQTCksIHdpdGggdGhlIGZvbGxvd2luZyBzcGVjaWFsIGV4Y2VwdGlvbjoKKy8vCisvLyBMT1hJIEV4Y2VwdGlvbgorLy8KKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIHRlcm1zIG9mIHRoZSBFUEwsIHlvdSBtYXkKKy8vIGRpc3RyaWJ1dGUgbGlicmFyaWVzIGdlbmVyYXRlZCBieSBMb3hpR2VuIChMb3hpR2VuIExpYnJhcmllcykKKy8vIHVuZGVyIHRoZSB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgcHJvdmlkZWQgdGhhdCBjb3B5cmlnaHQgYW5kCisvLyBsaWNlbnNpbmcgbm90aWNlcyBnZW5lcmF0ZWQgYnkgTG94aUdlbiBhcmUgbm90IGFsdGVyZWQgb3IgcmVtb3ZlZAorLy8gZnJvbSB0aGUgTG94aUdlbiBMaWJyYXJpZXMgYW5kIHRoZSBub3RpY2UgcHJvdmlkZWQgYmVsb3cgaXMgKGkpCisvLyBpbmNsdWRlZCBpbiB0aGUgTG94aUdlbiBMaWJyYXJpZXMsIGlmIGRpc3RyaWJ1dGVkIGluIHNvdXJjZSBjb2RlCisvLyBmb3JtIGFuZCAoaWkpIGluY2x1ZGVkIGluIGFueSBkb2N1bWVudGF0aW9uIGZvciB0aGUgTG94aUdlbgorLy8gTGlicmFyaWVzLCBpZiBkaXN0cmlidXRlZCBpbiBiaW5hcnkgZm9ybS4KKy8vCisvLyBOb3RpY2U6ICJDb3B5cmlnaHQgMjAxNywgQmlnIFN3aXRjaCBOZXR3b3JrcywgSW5jLgorLy8gVGhpcyBsaWJyYXJ5IHdhcyBnZW5lcmF0ZWQgYnkgdGhlIExveGlHZW4gQ29tcGlsZXIuIgorLy8KKy8vIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgRVBMIG9yCisvLyBMT1hJIEV4Y2VwdGlvbi4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBFUEwgYXQ6CisvLworLy8gaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisvLyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKy8vIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlcgorLy8gZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIEVQTCBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlCisvLyBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBFUEwuCisKKyN2ZXJzaW9uIDUKKyN2ZXJzaW9uIDYKKworc3RydWN0IG9mX3BvcnRfc3RhdHNfcHJvcF9leHBlcmltZW50ZXJfaW50ZWwgOiBvZl9wb3J0X3N0YXRzX3Byb3BfZXhwZXJpbWVudGVyIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDB4ZmZmZjsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgZXhwZXJpbWVudGVyID09IDB4MDAwMGFhMDE7CisgICAgdWludDMyX3QgZXhwX3R5cGUgPT0gMHgwMDAwMDAwMTsKKyAgICBwYWQoNCk7CisgICAgCisgICAgdWludDY0X3QgcnhfMV90b182NF9wYWNrZXRzOworICAgIHVpbnQ2NF90IHJ4XzY1X3RvXzEyN19wYWNrZXRzOworICAgIHVpbnQ2NF90IHJ4XzEyOF90b18yNTVfcGFja2V0czsKKyAgICB1aW50NjRfdCByeF8yNTZfdG9fNTExX3BhY2tldHM7CisgICAgdWludDY0X3QgcnhfNTEyX3RvXzEwMjNfcGFja2V0czsKKyAgICB1aW50NjRfdCByeF8xMDI0X3RvXzE1MjJfcGFja2V0czsKKyAgICB1aW50NjRfdCByeF8xNTIzX3RvX21heF9wYWNrZXRzOworICAgICAgICAgICAgIAorICAgIHVpbnQ2NF90IHR4XzFfdG9fNjRfcGFja2V0czsKKyAgICB1aW50NjRfdCB0eF82NV90b18xMjdfcGFja2V0czsKKyAgICB1aW50NjRfdCB0eF8xMjhfdG9fMjU1X3BhY2tldHM7CisgICAgdWludDY0X3QgdHhfMjU2X3RvXzUxMV9wYWNrZXRzOworICAgIHVpbnQ2NF90IHR4XzUxMl90b18xMDIzX3BhY2tldHM7CisgICAgdWludDY0X3QgdHhfMTAyNF90b18xNTIyX3BhY2tldHM7CisgICAgdWludDY0X3QgdHhfMTUyM190b19tYXhfcGFja2V0czsKKyAgICAgICAgICAgICAKKyAgICB1aW50NjRfdCB0eF9tdWx0aWNhc3RfcGFja2V0czsKKyAgICB1aW50NjRfdCByeF9icm9hZGNhc3RfcGFja2V0czsKKyAgICB1aW50NjRfdCB0eF9icm9hZGNhc3RfcGFja2V0czsKKyAgICB1aW50NjRfdCByeF91bmRlcnNpemVkX2Vycm9yczsKKyAgICB1aW50NjRfdCByeF9vdmVyc2l6ZV9lcnJvcnM7CisgICAgdWludDY0X3QgcnhfZnJhZ21lbnRlZF9lcnJvcnM7CisgICAgdWludDY0X3QgcnhfamFiYmVyX2Vycm9yczsKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvb3ZzX3RjcF9mbGFncyBiL29wZW5mbG93X2lucHV0L292c190Y3BfZmxhZ3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJjMzczNwotLS0gL2Rldi9udWxsCisrKyBiL29wZW5mbG93X2lucHV0L292c190Y3BfZmxhZ3MKQEAgLTAsMCArMSw2NCBAQAorLy8gQ29weXJpZ2h0IDIwMTQsIEJpZyBTd2l0Y2ggTmV0d29ya3MsIEluYy4KKy8vCisvLyBMb3hpR2VuIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlLAorLy8gdmVyc2lvbiAxLjAgKEVQTCksIHdpdGggdGhlIGZvbGxvd2luZyBzcGVjaWFsIGV4Y2VwdGlvbjoKKy8vCisvLyBMT1hJIEV4Y2VwdGlvbgorLy8KKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIHRlcm1zIG9mIHRoZSBFUEwsIHlvdSBtYXkKKy8vIGRpc3RyaWJ1dGUgbGlicmFyaWVzIGdlbmVyYXRlZCBieSBMb3hpR2VuIChMb3hpR2VuIExpYnJhcmllcykKKy8vIHVuZGVyIHRoZSB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgcHJvdmlkZWQgdGhhdCBjb3B5cmlnaHQgYW5kCisvLyBsaWNlbnNpbmcgbm90aWNlcyBnZW5lcmF0ZWQgYnkgTG94aUdlbiBhcmUgbm90IGFsdGVyZWQgb3IgcmVtb3ZlZAorLy8gZnJvbSB0aGUgTG94aUdlbiBMaWJyYXJpZXMgYW5kIHRoZSBub3RpY2UgcHJvdmlkZWQgYmVsb3cgaXMgKGkpCisvLyBpbmNsdWRlZCBpbiB0aGUgTG94aUdlbiBMaWJyYXJpZXMsIGlmIGRpc3RyaWJ1dGVkIGluIHNvdXJjZSBjb2RlCisvLyBmb3JtIGFuZCAoaWkpIGluY2x1ZGVkIGluIGFueSBkb2N1bWVudGF0aW9uIGZvciB0aGUgTG94aUdlbgorLy8gTGlicmFyaWVzLCBpZiBkaXN0cmlidXRlZCBpbiBiaW5hcnkgZm9ybS4KKy8vCisvLyBOb3RpY2U6ICJDb3B5cmlnaHQgMjAxMywgQmlnIFN3aXRjaCBOZXR3b3JrcywgSW5jLgorLy8gVGhpcyBsaWJyYXJ5IHdhcyBnZW5lcmF0ZWQgYnkgdGhlIExveGlHZW4gQ29tcGlsZXIuIgorLy8KKy8vIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgRVBMIG9yCisvLyBMT1hJIEV4Y2VwdGlvbi4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBFUEwgYXQ6CisvLworLy8gaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisvLyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKy8vIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlcgorLy8gZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIEVQTCBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlCisvLyBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBFUEwuCisKKyN2ZXJzaW9uIDMKKyN2ZXJzaW9uIDQKKyN2ZXJzaW9uIDUKKyN2ZXJzaW9uIDYKKworLyoKKyAqRXhwZXJpbWVudGVyIFRDUCBmbGFncworICpBdXRob3I6IGZhbmd0dW85MEBnbWFpbC5jb20KKyAqLworCitlbnVtIG9mcF9vdnNfdGNwX2ZsYWcod2lyZV90eXBlPXVpbnQxNl90LCBiaXRtYXNrPVRydWUpIHsKKyAgICBPRlBfT1ZTX1RDUF9GTEFHX0ZJTiA9IDB4MDAxLAorICAgIE9GUF9PVlNfVENQX0ZMQUdfU1lOID0gMHgwMDIsCisgICAgT0ZQX09WU19UQ1BfRkxBR19SU1QgPSAweDAwNCwKKyAgICBPRlBfT1ZTX1RDUF9GTEFHX1BTSCA9IDB4MDA4LAorICAgIE9GUF9PVlNfVENQX0ZMQUdfQUNLID0gMHgwMTAsCisgICAgT0ZQX09WU19UQ1BfRkxBR19VUkcgPSAweDAyMCwKKyAgICBPRlBfT1ZTX1RDUF9GTEFHX0VDRSA9IDB4MDQwLAorICAgIE9GUF9PVlNfVENQX0ZMQUdfQ1dSID0gMHgwODAsCisgICAgT0ZQX09WU19UQ1BfRkxBR19OUyAgPSAweDEwMCwKK307CisKK3N0cnVjdCBvZl9veG1fb3ZzX3RjcF9mbGFncyA6IG9mX294bSB7CisgICAgdWludDMyX3QgdHlwZV9sZW4gPT0gMHhmZmZmNTQwNjsKKyAgICB1aW50MzJfdCBleHBlcmltZW50ZXJfaWQgPT0gMHg0ZjRlNDYwMDsKKyAgICB1aW50MTZfdCB2YWx1ZTsKK307CisKK3N0cnVjdCBvZl9veG1fb3ZzX3RjcF9mbGFnc19tYXNrZWQgOiBvZl9veG0geworICAgIHVpbnQzMl90IHR5cGVfbGVuID09IDB4ZmZmZjU1MDg7CisgICAgdWludDMyX3QgZXhwZXJpbWVudGVyX2lkID09IDB4NGY0ZTQ2MDA7CisgICAgdWludDE2X3QgdmFsdWU7CisgICAgdWludDE2X3QgdmFsdWVfbWFzazsKK307CmRpZmYgLS1naXQgYS9vcGVuZmxvd19pbnB1dC9veG0tMS4yIGIvb3BlbmZsb3dfaW5wdXQvb3htLTEuMgppbmRleCBkZDU5NmJkLi4zOWMwZmRkIDEwMDY0NAotLS0gYS9vcGVuZmxvd19pbnB1dC9veG0tMS4yCisrKyBiL29wZW5mbG93X2lucHV0L294bS0xLjIKQEAgLTMyLDYgKzMyLDcgQEAKICN2ZXJzaW9uIDMKICN2ZXJzaW9uIDQKICN2ZXJzaW9uIDUKKyN2ZXJzaW9uIDYKIAogc3RydWN0IG9mX294bSB7CiAgICAgdWludDMyX3QgdHlwZV9sZW4gPT0gPzsKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L294bS0xLjMgYi9vcGVuZmxvd19pbnB1dC9veG0tMS4zCmluZGV4IDRiYjU1YTEuLjIwMGYzY2QgMTAwNjQ0Ci0tLSBhL29wZW5mbG93X2lucHV0L294bS0xLjMKKysrIGIvb3BlbmZsb3dfaW5wdXQvb3htLTEuMwpAQCAtMzAsNiArMzAsNyBAQAogCiAjdmVyc2lvbiA0CiAjdmVyc2lvbiA1CisjdmVyc2lvbiA2CiAKIHN0cnVjdCBvZl9veG1fdHVubmVsX2lkIDogb2Zfb3htIHsKICAgICB1aW50MzJfdCB0eXBlX2xlbiA9PSAweDgwMDA0YzA4OwpkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvb3htLTEuNCBiL29wZW5mbG93X2lucHV0L294bS0xLjQKaW5kZXggMGZkOTZlYy4uYjE2NWZjNSAxMDA2NDQKLS0tIGEvb3BlbmZsb3dfaW5wdXQvb3htLTEuNAorKysgYi9vcGVuZmxvd19pbnB1dC9veG0tMS40CkBAIC0yOSw2ICsyOSw3IEBACiAvLyBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBFUEwuCiAKICN2ZXJzaW9uIDUKKyN2ZXJzaW9uIDYKIAogc3RydWN0IG9mX294bV9wYmJfdWNhIDogb2Zfb3htIHsKICAgICB1aW50MzJfdCB0eXBlX2xlbiA9PSAweDgwMDA1MjAxOwpkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvb3htLTEuNSBiL29wZW5mbG93X2lucHV0L294bS0xLjUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVkMmU0YwotLS0gL2Rldi9udWxsCisrKyBiL29wZW5mbG93X2lucHV0L294bS0xLjUKQEAgLTAsMCArMSwzNSBAQAorI3ZlcnNpb24gNgorCitzdHJ1Y3Qgb2Zfb3htX3RjcF9mbGFncyA6IG9mX294bSB7CisgICAgdWludDMyX3QgdHlwZV9sZW4gPT0gMHg4MDAwNTQwMjsKKyAgICB1aW50OF90IHZhbHVlOworfTsKKworc3RydWN0IG9mX294bV90Y3BfZmxhZ3NfbWFza2VkIDogb2Zfb3htIHsKKyAgICB1aW50MzJfdCB0eXBlX2xlbiA9PSAweDgwMDA1NTA0OworICAgIHVpbnQ4X3QgdmFsdWU7CisgICAgdWludDhfdCB2YWx1ZV9tYXNrOworfTsKKworc3RydWN0IG9mX294bV9hY3RzZXRfb3V0cHV0IDogb2Zfb3htIHsKKyAgICB1aW50MzJfdCB0eXBlX2xlbiA9PSAweDgwMDA1NjA0OworICAgIHVpbnQ4X3QgdmFsdWU7Cit9OworCitzdHJ1Y3Qgb2Zfb3htX2FjdHNldF9vdXRwdXRfbWFza2VkIDogb2Zfb3htIHsKKyAgICB1aW50MzJfdCB0eXBlX2xlbiA9PSAweDgwMDA1NzA4OworICAgIG9mX3BvcnRfbm9fdCB2YWx1ZTsKKyAgICBvZl9wb3J0X25vX3QgdmFsdWVfbWFzazsKK307CisKKworc3RydWN0IG9mX294bV9wYWNrZXRfdHlwZSA6IG9mX294bSB7CisgICAgdWludDMyX3QgdHlwZV9sZW4gPT0gMHg4MDAwNTgwNDsKKyAgICB1aW50OF90IHZhbHVlOworfTsKKworc3RydWN0IG9mX294bV9wYWNrZXRfdHlwZV9tYXNrZWQgOiBvZl9veG0geworICAgIHVpbnQzMl90IHR5cGVfbGVuID09IDB4ODAwMDU5MDg7CisgICAgdWludDhfdCB2YWx1ZTsKKyAgICB1aW50OF90IHZhbHVlX21hc2s7Cit9OwpkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvb3htX25pY2lyYV90dW4gYi9vcGVuZmxvd19pbnB1dC9veG1fbmljaXJhX3R1bgppbmRleCA5ZTczZmVjLi5hZTI1NzVmIDEwMDY0NAotLS0gYS9vcGVuZmxvd19pbnB1dC9veG1fbmljaXJhX3R1bgorKysgYi9vcGVuZmxvd19pbnB1dC9veG1fbmljaXJhX3R1bgpAQCAtMjgsNiArMjgsNyBAQAogI3ZlcnNpb24gMwogI3ZlcnNpb24gNAogI3ZlcnNpb24gNQorI3ZlcnNpb24gNgogCiAvLyBOaWNpcmEgZXh0ZW5zaW9uIGZvciB0dW5faXB2NF9zcmMgKDMxKQogc3RydWN0IG9mX294bV90dW5uZWxfaXB2NF9zcmMgOiBvZl9veG0gewpkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvb3hzLTEuNSBiL29wZW5mbG93X2lucHV0L294cy0xLjUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVmMTY0MgotLS0gL2Rldi9udWxsCisrKyBiL29wZW5mbG93X2lucHV0L294cy0xLjUKQEAgLTAsMCArMSwzMSBAQAorCisjdmVyc2lvbiA2CisKK3N0cnVjdCBvZl9veHMgeworICAgIHVpbnQzMl90IHR5cGVfbGVuID09ID87Cit9OworCitzdHJ1Y3Qgb2Zfb3hzX2R1cmF0aW9uIDogb2Zfb3hzIHsKKyAgICB1aW50MzJfdCB0eXBlX2xlbiA9PSAweDgwMDIwMDA4IDsKKyAgICB1aW50MTZfdCB2YWx1ZTsKK307CisKK3N0cnVjdCBvZl9veHNfaWRsZV90aW1lIDogb2Zfb3hzIHsKKyAgICB1aW50MzJfdCB0eXBlX2xlbiA9PSAweDgwMDIwMjA4IDsKKyAgICB1aW50MTZfdCB2YWx1ZTsKK307CisKK3N0cnVjdCBvZl9veHNfZmxvd19jb3VudCA6IG9mX294cyB7CisgICAgdWludDMyX3QgdHlwZV9sZW4gPT0gMHg4MDAyMDQwNCA7CisgICAgdWludDE2X3QgdmFsdWU7Cit9OworCitzdHJ1Y3Qgb2Zfb3hzX3BhY2tldF9jb3VudCA6IG9mX294cyB7CisgICAgdWludDMyX3QgdHlwZV9sZW4gPT0gMHg4MDAyMDYwOCA7CisgICAgdWludDE2X3QgdmFsdWU7Cit9OworCitzdHJ1Y3Qgb2Zfb3hzX2J5dGVfY291bnQgOiBvZl9veHMgeworICAgIHVpbnQzMl90IHR5cGVfbGVuID09IDB4ODAwMjA4MDggOworICAgIHVpbnQxNl90IHZhbHVlOworfTsKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L3N0YW5kYXJkLTEuMCBiL29wZW5mbG93X2lucHV0L3N0YW5kYXJkLTEuMAppbmRleCAxZTQ3NTBiLi4xYmJhNDExIDEwMDY0NAotLS0gYS9vcGVuZmxvd19pbnB1dC9zdGFuZGFyZC0xLjAKKysrIGIvb3BlbmZsb3dfaW5wdXQvc3RhbmRhcmQtMS4wCkBAIC00MzMsOCArNDMzLDggQEAKICAgICB1aW50MzJfdCB4aWQ7CiAgICAgb2ZfcG9ydF9ub190IHBvcnRfbm87CiAgICAgb2ZfbWFjX2FkZHJfdCBod19hZGRyOwotICAgIHVpbnQzMl90IGNvbmZpZzsKLSAgICB1aW50MzJfdCBtYXNrOworICAgIGVudW0gb2ZwX3BvcnRfY29uZmlnIGNvbmZpZzsKKyAgICBlbnVtIG9mcF9wb3J0X2NvbmZpZyBtYXNrOwogICAgIHVpbnQzMl90IGFkdmVydGlzZTsKICAgICBwYWQoNCk7CiB9OwpAQCAtNTU0LDcgKzU1NCw3IEBACiAgICAgdWludDMyX3QgeGlkOwogICAgIHVpbnQzMl90IGJ1ZmZlcl9pZDsKICAgICBvZl9wb3J0X25vX3QgaW5fcG9ydDsKLSAgICB1aW50MTZfdCBhY3Rpb25zX2xlbjsKKyAgICB1aW50MTZfdCBhY3Rpb25zX2xlbiA9PSBsZW5ndGgoYWN0aW9ucyk7CiAgICAgbGlzdChvZl9hY3Rpb25fdCkgYWN0aW9uczsKICAgICBvZl9vY3RldHNfdCBkYXRhOwogfTsKQEAgLTY4Nyw3ICs2ODcsNyBAQAogICAgIG9mX21hdGNoX3QgbWF0Y2g7CiAgICAgdWludDY0X3QgY29va2llOwogICAgIHVpbnQxNl90IHByaW9yaXR5OwotICAgIHVpbnQ4X3QgcmVhc29uOworICAgIGVudW0gb2ZwX2Zsb3dfcmVtb3ZlZF9yZWFzb24gcmVhc29uOwogICAgIHBhZCgxKTsKICAgICB1aW50MzJfdCBkdXJhdGlvbl9zZWM7CiAgICAgdWludDMyX3QgZHVyYXRpb25fbnNlYzsKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L3N0YW5kYXJkLTEuMSBiL29wZW5mbG93X2lucHV0L3N0YW5kYXJkLTEuMQppbmRleCA2NzY1ZmU3Li4wN2YyNDZlIDEwMDY0NAotLS0gYS9vcGVuZmxvd19pbnB1dC9zdGFuZGFyZC0xLjEKKysrIGIvb3BlbmZsb3dfaW5wdXQvc3RhbmRhcmQtMS4xCkBAIC01NTUsOCArNTU1LDggQEAKICAgICBwYWQoNCk7CiAgICAgb2ZfbWFjX2FkZHJfdCBod19hZGRyOwogICAgIHBhZCgyKTsKLSAgICB1aW50MzJfdCBjb25maWc7Ci0gICAgdWludDMyX3QgbWFzazsKKyAgICBlbnVtIG9mcF9wb3J0X2NvbmZpZyBjb25maWc7CisgICAgZW51bSBvZnBfcG9ydF9jb25maWcgbWFzazsKICAgICB1aW50MzJfdCBhZHZlcnRpc2U7CiAgICAgcGFkKDQpOwogfTsKQEAgLTc2MSw3ICs3NjEsNyBAQAogICAgIHVpbnQzMl90IHhpZDsKICAgICB1aW50MzJfdCBidWZmZXJfaWQ7CiAgICAgb2ZfcG9ydF9ub190IGluX3BvcnQ7Ci0gICAgdWludDE2X3QgYWN0aW9uc19sZW47CisgICAgdWludDE2X3QgYWN0aW9uc19sZW4gPT0gbGVuZ3RoKGFjdGlvbnMpOwogICAgIHBhZCg2KTsKICAgICBsaXN0KG9mX2FjdGlvbl90KSBhY3Rpb25zOwogICAgIG9mX29jdGV0c190IGRhdGE7CkBAIC0xMDMzLDcgKzEwMzMsNyBAQAogICAgIHVpbnQzMl90IHhpZDsKICAgICB1aW50NjRfdCBjb29raWU7CiAgICAgdWludDE2X3QgcHJpb3JpdHk7Ci0gICAgdWludDhfdCByZWFzb247CisgICAgZW51bSBvZnBfZmxvd19yZW1vdmVkX3JlYXNvbiByZWFzb247CiAgICAgdWludDhfdCB0YWJsZV9pZDsKICAgICB1aW50MzJfdCBkdXJhdGlvbl9zZWM7CiAgICAgdWludDMyX3QgZHVyYXRpb25fbnNlYzsKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L3N0YW5kYXJkLTEuMiBiL29wZW5mbG93X2lucHV0L3N0YW5kYXJkLTEuMgppbmRleCBjMWU4YTJiLi45MTQxZjIyIDEwMDY0NAotLS0gYS9vcGVuZmxvd19pbnB1dC9zdGFuZGFyZC0xLjIKKysrIGIvb3BlbmZsb3dfaW5wdXQvc3RhbmRhcmQtMS4yCkBAIC01OTQsOCArNTk0LDggQEAKICAgICBwYWQoNCk7CiAgICAgb2ZfbWFjX2FkZHJfdCBod19hZGRyOwogICAgIHBhZCgyKTsKLSAgICB1aW50MzJfdCBjb25maWc7Ci0gICAgdWludDMyX3QgbWFzazsKKyAgICBlbnVtIG9mcF9wb3J0X2NvbmZpZyBjb25maWc7CisgICAgZW51bSBvZnBfcG9ydF9jb25maWcgbWFzazsKICAgICB1aW50MzJfdCBhZHZlcnRpc2U7CiAgICAgcGFkKDQpOwogfTsKQEAgLTk0OCw3ICs5NDgsNyBAQAogICAgIHVpbnQzMl90IHhpZDsKICAgICB1aW50MzJfdCBidWZmZXJfaWQ7CiAgICAgb2ZfcG9ydF9ub190IGluX3BvcnQ7Ci0gICAgdWludDE2X3QgYWN0aW9uc19sZW47CisgICAgdWludDE2X3QgYWN0aW9uc19sZW4gPT0gbGVuZ3RoKGFjdGlvbnMpOwogICAgIHBhZCg2KTsKICAgICBsaXN0KG9mX2FjdGlvbl90KSBhY3Rpb25zOwogICAgIG9mX29jdGV0c190IGRhdGE7CkBAIC05NzUsNyArOTc1LDcgQEAKICAgICB1aW50MzJfdCB4aWQ7CiAgICAgdWludDY0X3QgY29va2llOwogICAgIHVpbnQxNl90IHByaW9yaXR5OwotICAgIHVpbnQ4X3QgcmVhc29uOworICAgIGVudW0gb2ZwX2Zsb3dfcmVtb3ZlZF9yZWFzb24gcmVhc29uOwogICAgIHVpbnQ4X3QgdGFibGVfaWQ7CiAgICAgdWludDMyX3QgZHVyYXRpb25fc2VjOwogICAgIHVpbnQzMl90IGR1cmF0aW9uX25zZWM7CkBAIC0xMTIxLDcgKzExMjEsNyBAQAogICAgIHVpbnQzMl90IHhpZDsKICAgICB1aW50MTZfdCBlcnJfdHlwZSA9PSAweGZmZmY7CiAgICAgdWludDE2X3Qgc3VidHlwZTsKLSAgICB1aW50MzJfdCBleHBlcmltZW50ZXI7CisgICAgdWludDMyX3QgZXhwZXJpbWVudGVyID09ID87CiAgICAgb2Zfb2N0ZXRzX3QgZGF0YTsKIH07CiAKQEAgLTEyMTQsNyArMTIxNCw3IEBACiAgICAgbGlzdChvZl9idWNrZXRfdCkgYnVja2V0czsKIH07CiAKLS8vIFNUQVRTOiAKKy8vIFNUQVRTOgogLy8gIERlc2MsIGZsb3csIGFnZywgdGFibGUsIHBvcnQsIHF1ZXVlLCBncm91cCwgZ3JvdXBfZGVzYywgZ3JvdXBfZmVhdCwgZXhwZXJpCiAKIHN0cnVjdCBvZl9zdGF0c19yZXF1ZXN0IDogb2ZfaGVhZGVyIHsKQEAgLTE0NTMsNyArMTQ1Myw3IEBACiAgICAgZW51bSBvZnBfc3RhdHNfcmVwbHlfZmxhZ3MgZmxhZ3M7CiAgICAgcGFkKDQpOwogICAgIHVpbnQzMl90IHR5cGVzOwotICAgIHVpbnQzMl90IGNhcGFiaWxpdGllczsKKyAgICBlbnVtIG9mcF9ncm91cF9jYXBhYmlsaXRpZXMgY2FwYWJpbGl0aWVzOwogICAgIHVpbnQzMl90IG1heF9ncm91cHNfYWxsOwogICAgIHVpbnQzMl90IG1heF9ncm91cHNfc2VsZWN0OwogICAgIHVpbnQzMl90IG1heF9ncm91cHNfaW5kaXJlY3Q7CmRpZmYgLS1naXQgYS9vcGVuZmxvd19pbnB1dC9zdGFuZGFyZC0xLjMgYi9vcGVuZmxvd19pbnB1dC9zdGFuZGFyZC0xLjMKaW5kZXggMWVkYWJiMi4uNDM0OTBhYyAxMDA2NDQKLS0tIGEvb3BlbmZsb3dfaW5wdXQvc3RhbmRhcmQtMS4zCisrKyBiL29wZW5mbG93X2lucHV0L3N0YW5kYXJkLTEuMwpAQCAtNzQyLDggKzc0Miw4IEBACiAgICAgcGFkKDQpOwogICAgIG9mX21hY19hZGRyX3QgaHdfYWRkcjsKICAgICBwYWQoMik7Ci0gICAgdWludDMyX3QgY29uZmlnOwotICAgIHVpbnQzMl90IG1hc2s7CisgICAgZW51bSBvZnBfcG9ydF9jb25maWcgY29uZmlnOworICAgIGVudW0gb2ZwX3BvcnRfY29uZmlnIG1hc2s7CiAgICAgdWludDMyX3QgYWR2ZXJ0aXNlOwogICAgIHBhZCg0KTsKIH07CkBAIC03NTUsNyArNzU1LDcgQEAKICAgICBsaXN0KG9mX294bV90KSBveG1fbGlzdDsKIH07CiAKLS8vIFRoaXMgbG9va3MgbGlrZSBhbiBhY3Rpb24gaGVhZGVyLCBidXQgaXMgc3RhbmRhbG9uZS4gIFNlZSAKKy8vIFRoaXMgbG9va3MgbGlrZSBhbiBhY3Rpb24gaGVhZGVyLCBidXQgaXMgc3RhbmRhbG9uZS4gIFNlZQogLy8gb2ZwX3RhYmxlX2ZlYXR1cmVzX3Byb3BfYWN0aW9ucwogc3RydWN0IG9mX2FjdGlvbl9pZCB7CiAgICAgdWludDE2X3QgdHlwZTsKQEAgLTExMjcsNyArMTEyNyw3IEBACiAgICAgdWludDMyX3QgeGlkOwogICAgIHVpbnQzMl90IGJ1ZmZlcl9pZDsKICAgICBvZl9wb3J0X25vX3QgaW5fcG9ydDsKLSAgICB1aW50MTZfdCBhY3Rpb25zX2xlbjsKKyAgICB1aW50MTZfdCBhY3Rpb25zX2xlbiA9PSBsZW5ndGgoYWN0aW9ucyk7CiAgICAgcGFkKDYpOwogICAgIGxpc3Qob2ZfYWN0aW9uX3QpIGFjdGlvbnM7CiAgICAgb2Zfb2N0ZXRzX3QgZGF0YTsKQEAgLTExNTUsNyArMTE1NSw3IEBACiAgICAgdWludDMyX3QgeGlkOwogICAgIHVpbnQ2NF90IGNvb2tpZTsKICAgICB1aW50MTZfdCBwcmlvcml0eTsKLSAgICB1aW50OF90IHJlYXNvbjsKKyAgICBlbnVtIG9mcF9mbG93X3JlbW92ZWRfcmVhc29uIHJlYXNvbjsKICAgICB1aW50OF90IHRhYmxlX2lkOwogICAgIHVpbnQzMl90IGR1cmF0aW9uX3NlYzsKICAgICB1aW50MzJfdCBkdXJhdGlvbl9uc2VjOwpAQCAtMTIwMyw4ICsxMjAzLDggQEAKICAgICB1aW50OF90IHR5cGUgPT0gMjk7CiAgICAgdWludDE2X3QgbGVuZ3RoOwogICAgIHVpbnQzMl90IHhpZDsKLSAgICB1aW50MTZfdCBjb21tYW5kOwotICAgIHVpbnQxNl90IGZsYWdzOworICAgIGVudW0gb2ZwX21ldGVyX21vZF9jb21tYW5kIGNvbW1hbmQ7CisgICAgZW51bSBvZnBfbWV0ZXJfZmxhZ3MgZmxhZ3M7CiAgICAgdWludDMyX3QgbWV0ZXJfaWQ7CiAgICAgbGlzdChvZl9tZXRlcl9iYW5kX3QpIG1ldGVyczsKIH07CkBAIC0xMzY0LDcgKzEzNjQsNyBAQAogICAgIHVpbnQzMl90IHhpZDsKICAgICB1aW50MTZfdCBlcnJfdHlwZSA9PSAweGZmZmY7CiAgICAgdWludDE2X3Qgc3VidHlwZTsKLSAgICB1aW50MzJfdCBleHBlcmltZW50ZXI7CisgICAgdWludDMyX3QgZXhwZXJpbWVudGVyID09ID87CiAgICAgb2Zfb2N0ZXRzX3QgZGF0YTsKIH07CiAKQEAgLTE0NTIsNyArMTQ1Miw3IEBACiAgICAgbGlzdChvZl9idWNrZXRfdCkgYnVja2V0czsKIH07CiAKLS8vIFNUQVRTOiAKKy8vIFNUQVRTOgogLy8gIERlc2MsIGZsb3csIGFnZywgdGFibGUsIHBvcnQsIHF1ZXVlLCBncm91cCwgZ3JvdXBfZGVzYywgZ3JvdXBfZmVhdCwgZXhwZXJpCiAKIHN0cnVjdCBvZl9zdGF0c19yZXF1ZXN0IDogb2ZfaGVhZGVyIHsKQEAgLTE4NDIsNyArMTg0Miw3IEBACiAgICAgZW51bSBvZnBfc3RhdHNfcmVwbHlfZmxhZ3MgZmxhZ3M7CiAgICAgcGFkKDQpOwogICAgIHVpbnQzMl90IHR5cGVzOwotICAgIHVpbnQzMl90IGNhcGFiaWxpdGllczsKKyAgICBlbnVtIG9mcF9ncm91cF9jYXBhYmlsaXRpZXMgY2FwYWJpbGl0aWVzOwogICAgIHVpbnQzMl90IG1heF9ncm91cHNfYWxsOwogICAgIHVpbnQzMl90IG1heF9ncm91cHNfc2VsZWN0OwogICAgIHVpbnQzMl90IG1heF9ncm91cHNfaW5kaXJlY3Q7CkBAIC0xOTg4LDcgKzE5ODgsNyBAQAogCiBzdHJ1Y3Qgb2ZfbWV0ZXJfY29uZmlnIHsKICAgICB1aW50MTZfdCAgICAgICAgbGVuZ3RoOwotICAgIHVpbnQxNl90ICAgICAgICBmbGFnczsKKyAgICBlbnVtIG9mcF9tZXRlcl9mbGFncyAgICAgICAgZmxhZ3M7CiAgICAgdWludDMyX3QgICAgICAgIG1ldGVyX2lkOwogICAgIGxpc3Qob2ZfbWV0ZXJfYmFuZF90KSBlbnRyaWVzOwogfTsKZGlmZiAtLWdpdCBhL29wZW5mbG93X2lucHV0L3N0YW5kYXJkLTEuNCBiL29wZW5mbG93X2lucHV0L3N0YW5kYXJkLTEuNAppbmRleCAyOGFhNzg3Li5hZjY1N2QxIDEwMDY0NAotLS0gYS9vcGVuZmxvd19pbnB1dC9zdGFuZGFyZC0xLjQKKysrIGIvb3BlbmZsb3dfaW5wdXQvc3RhbmRhcmQtMS40CkBAIC05MzQsNyArOTM0LDcgQEAKIHN0cnVjdCBvZl9wb3J0X21vZF9wcm9wX2V0aGVybmV0IDogb2ZfcG9ydF9tb2RfcHJvcCB7CiAgICAgdWludDE2X3QgdHlwZSA9PSAwOwogICAgIHVpbnQxNl90IGxlbmd0aDsKLSAgICB1aW50MzJfdCBhZHZlcnRpc2U7CisgICAgZW51bSBvZnBfcG9ydF9mZWF0dXJlcyBhZHZlcnRpc2U7CiB9OwogCiBzdHJ1Y3Qgb2ZfcG9ydF9tb2RfcHJvcF9vcHRpY2FsIDogb2ZfcG9ydF9tb2RfcHJvcCB7CkBAIC05NjMsOCArOTYzLDggQEAKICAgICBwYWQoNCk7CiAgICAgb2ZfbWFjX2FkZHJfdCBod19hZGRyOwogICAgIHBhZCgyKTsKLSAgICB1aW50MzJfdCBjb25maWc7Ci0gICAgdWludDMyX3QgbWFzazsKKyAgICBlbnVtIG9mcF9wb3J0X2NvbmZpZyBjb25maWc7CisgICAgZW51bSBvZnBfcG9ydF9jb25maWcgbWFzazsKICAgICBsaXN0KG9mX3BvcnRfbW9kX3Byb3BfdCkgcHJvcGVydGllczsKIH07CiAKQEAgLTEzNDcsNyArMTM0Nyw3IEBACiAgICAgdWludDMyX3QgeGlkOwogICAgIHVpbnQzMl90IGJ1ZmZlcl9pZDsKICAgICBvZl9wb3J0X25vX3QgaW5fcG9ydDsKLSAgICB1aW50MTZfdCBhY3Rpb25zX2xlbjsKKyAgICB1aW50MTZfdCBhY3Rpb25zX2xlbiA9PSBsZW5ndGgoYWN0aW9ucyk7CiAgICAgcGFkKDYpOwogICAgIGxpc3Qob2ZfYWN0aW9uX3QpIGFjdGlvbnM7CiAgICAgb2Zfb2N0ZXRzX3QgZGF0YTsKQEAgLTEzNzUsNyArMTM3NSw3IEBACiAgICAgdWludDMyX3QgeGlkOwogICAgIHVpbnQ2NF90IGNvb2tpZTsKICAgICB1aW50MTZfdCBwcmlvcml0eTsKLSAgICB1aW50OF90IHJlYXNvbjsKKyAgICBlbnVtIG9mcF9mbG93X3JlbW92ZWRfcmVhc29uIHJlYXNvbjsKICAgICB1aW50OF90IHRhYmxlX2lkOwogICAgIHVpbnQzMl90IGR1cmF0aW9uX3NlYzsKICAgICB1aW50MzJfdCBkdXJhdGlvbl9uc2VjOwpAQCAtMTQyMyw4ICsxNDIzLDggQEAKICAgICB1aW50OF90IHR5cGUgPT0gMjk7CiAgICAgdWludDE2X3QgbGVuZ3RoOwogICAgIHVpbnQzMl90IHhpZDsKLSAgICB1aW50MTZfdCBjb21tYW5kOwotICAgIHVpbnQxNl90IGZsYWdzOworICAgIGVudW0gb2ZwX21ldGVyX21vZF9jb21tYW5kIGNvbW1hbmQ7CisgICAgZW51bSBvZnBfbWV0ZXJfZmxhZ3MgZmxhZ3M7CiAgICAgdWludDMyX3QgbWV0ZXJfaWQ7CiAgICAgbGlzdChvZl9tZXRlcl9iYW5kX3QpIGJhbmRzOwogfTsKQEAgLTE2MjQsNyArMTYyNCw3IEBACiAgICAgdWludDMyX3QgeGlkOwogICAgIHVpbnQxNl90IGVycl90eXBlID09IDB4ZmZmZjsKICAgICB1aW50MTZfdCBzdWJ0eXBlOwotICAgIHVpbnQzMl90IGV4cGVyaW1lbnRlcjsKKyAgICB1aW50MzJfdCBleHBlcmltZW50ZXIgPT0gPzsKICAgICBvZl9vY3RldHNfdCBkYXRhOwogfTsKIApAQCAtMTY4Miw3ICsxNjgyLDcgQEAKICAgICB1aW50MTZfdCAgICAgICAgIGxlbmd0aDsKICAgICBwYWQoNCk7CiAKLSAgICB1aW50MzJfdCBmbGFnczsgICAgICAgCisgICAgdWludDMyX3QgZmxhZ3M7CiAgICAgdWludDMyX3QgdHhfZnJlcV9sbWRhOwogICAgIHVpbnQzMl90IHR4X29mZnNldDsKICAgICB1aW50MzJfdCB0eF9ncmlkX3NwYW47CkBAIC0xNzAxLDcgKzE3MDEsNyBAQAogICAgIHVpbnQxNl90ICAgICAgICAgbGVuZ3RoOwogICAgIHVpbnQzMl90ICAgICAgICAgZXhwZXJpbWVudGVyID09ID87CiAgICAgdWludDMyX3QgICAgICAgICBleHBfdHlwZTsKLSAgICBvZl9vY3RldHNfdCAgICAgIGV4cGVyaW1lbnRlcl9kYXRhOworICAgIC8qIG9mX29jdGV0c190ICAgICAgZXhwZXJpbWVudGVyX2RhdGE7ICBJbXBsZW1lbnRpbmcgcHJvcGVydHkgZGVmaW5lcyBmaWVsZHMuICovCiB9OwogCiBzdHJ1Y3Qgb2ZfcG9ydF9zdGF0c19lbnRyeSB7CkBAIC0xOTMzLDk4ICsxOTMzLDk4IEBACiAgICAgdWludDE2X3QgICAgICAgICBsZW5ndGg7CiB9OwogCi1zdHJ1Y3Qgb2ZfdGFibGVfZmVhdHVyZV9wcm9wX2luc3RydWN0aW9ucyA6IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcCB7CitzdHJ1Y3Qgb2ZfdGFibGVfZmVhdHVyZV9wcm9wX2luc3RydWN0aW9ucyhhbGlnbj04LCBsZW5ndGhfaW5jbHVkZXNfYWxpZ249RmFsc2UpIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKICAgICB1aW50MTZfdCAgICAgICAgIHR5cGUgPT0gMDsKICAgICB1aW50MTZfdCAgICAgICAgIGxlbmd0aDsKICAgICAvLyBGSVhNRSBDaGVjayBpZiBpbnN0cnVjdGlvbl90IGlzIHJpZ2h0IGZvciBpZHMgaGVyZQogICAgIGxpc3Qob2ZfaW5zdHJ1Y3Rpb25faWRfdCkgICBpbnN0cnVjdGlvbl9pZHM7CiB9OwogCi1zdHJ1Y3Qgb2ZfdGFibGVfZmVhdHVyZV9wcm9wX2luc3RydWN0aW9uc19taXNzIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKK3N0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3BfaW5zdHJ1Y3Rpb25zX21pc3MoYWxpZ249OCwgbGVuZ3RoX2luY2x1ZGVzX2FsaWduPUZhbHNlKSA6IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcCB7CiAgICAgdWludDE2X3QgICAgICAgICB0eXBlID09IDE7CiAgICAgdWludDE2X3QgICAgICAgICBsZW5ndGg7CiAgICAgbGlzdChvZl9pbnN0cnVjdGlvbl9pZF90KSAgIGluc3RydWN0aW9uX2lkczsKIH07CiAKLXN0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3BfbmV4dF90YWJsZXMgOiBvZl90YWJsZV9mZWF0dXJlX3Byb3Ageworc3RydWN0IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcF9uZXh0X3RhYmxlcyhhbGlnbj04LCBsZW5ndGhfaW5jbHVkZXNfYWxpZ249RmFsc2UpIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKICAgICB1aW50MTZfdCAgICAgICAgIHR5cGUgPT0gMjsKICAgICB1aW50MTZfdCAgICAgICAgIGxlbmd0aDsKICAgICBsaXN0KG9mX3VpbnQ4X3QpIG5leHRfdGFibGVfaWRzOwogfTsKIAotc3RydWN0IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcF9uZXh0X3RhYmxlc19taXNzIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKK3N0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3BfbmV4dF90YWJsZXNfbWlzcyhhbGlnbj04LCBsZW5ndGhfaW5jbHVkZXNfYWxpZ249RmFsc2UpIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKICAgICB1aW50MTZfdCAgICAgICAgIHR5cGUgPT0gMzsKICAgICB1aW50MTZfdCAgICAgICAgIGxlbmd0aDsKICAgICBsaXN0KG9mX3VpbnQ4X3QpIG5leHRfdGFibGVfaWRzOwogfTsKIAotc3RydWN0IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcF93cml0ZV9hY3Rpb25zIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKK3N0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3Bfd3JpdGVfYWN0aW9ucyhhbGlnbj04LCBsZW5ndGhfaW5jbHVkZXNfYWxpZ249RmFsc2UpIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKICAgICB1aW50MTZfdCAgICAgICAgIHR5cGUgPT0gNDsKICAgICB1aW50MTZfdCAgICAgICAgIGxlbmd0aDsKICAgICBsaXN0KG9mX2FjdGlvbl9pZF90KSBhY3Rpb25faWRzOwogfTsKIAotc3RydWN0IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcF93cml0ZV9hY3Rpb25zX21pc3MgOiBvZl90YWJsZV9mZWF0dXJlX3Byb3Ageworc3RydWN0IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcF93cml0ZV9hY3Rpb25zX21pc3MoYWxpZ249OCwgbGVuZ3RoX2luY2x1ZGVzX2FsaWduPUZhbHNlKSA6IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcCB7CiAgICAgdWludDE2X3QgICAgICAgICB0eXBlID09IDU7CiAgICAgdWludDE2X3QgICAgICAgICBsZW5ndGg7CiAgICAgbGlzdChvZl9hY3Rpb25faWRfdCkgYWN0aW9uX2lkczsKIH07CiAKLXN0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3BfYXBwbHlfYWN0aW9ucyA6IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcCB7CitzdHJ1Y3Qgb2ZfdGFibGVfZmVhdHVyZV9wcm9wX2FwcGx5X2FjdGlvbnMoYWxpZ249OCwgbGVuZ3RoX2luY2x1ZGVzX2FsaWduPUZhbHNlKSA6IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcCB7CiAgICAgdWludDE2X3QgICAgICAgICB0eXBlID09IDY7CiAgICAgdWludDE2X3QgICAgICAgICBsZW5ndGg7CiAgICAgbGlzdChvZl9hY3Rpb25faWRfdCkgYWN0aW9uX2lkczsKIH07CiAKLXN0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3BfYXBwbHlfYWN0aW9uc19taXNzIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKK3N0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3BfYXBwbHlfYWN0aW9uc19taXNzKGFsaWduPTgsIGxlbmd0aF9pbmNsdWRlc19hbGlnbj1GYWxzZSkgOiBvZl90YWJsZV9mZWF0dXJlX3Byb3AgewogICAgIHVpbnQxNl90ICAgICAgICAgdHlwZSA9PSA3OwogICAgIHVpbnQxNl90ICAgICAgICAgbGVuZ3RoOwogICAgIGxpc3Qob2ZfYWN0aW9uX2lkX3QpIGFjdGlvbl9pZHM7CiB9OwogCi1zdHJ1Y3Qgb2ZfdGFibGVfZmVhdHVyZV9wcm9wX21hdGNoIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKK3N0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3BfbWF0Y2goYWxpZ249OCwgbGVuZ3RoX2luY2x1ZGVzX2FsaWduPUZhbHNlKSA6IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcCB7CiAgICAgdWludDE2X3QgICAgICAgICB0eXBlID09IDg7CiAgICAgdWludDE2X3QgICAgICAgICBsZW5ndGg7CiAgICAgbGlzdChvZl91aW50MzJfdCkgb3htX2lkczsKIH07CiAKLXN0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3Bfd2lsZGNhcmRzIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKK3N0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3Bfd2lsZGNhcmRzKGFsaWduPTgsIGxlbmd0aF9pbmNsdWRlc19hbGlnbj1GYWxzZSkgOiBvZl90YWJsZV9mZWF0dXJlX3Byb3AgewogICAgIHVpbnQxNl90ICAgICAgICAgdHlwZSA9PSAxMDsKICAgICB1aW50MTZfdCAgICAgICAgIGxlbmd0aDsKICAgICBsaXN0KG9mX3VpbnQzMl90KSBveG1faWRzOwogfTsKIAotc3RydWN0IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcF93cml0ZV9zZXRmaWVsZCA6IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcCB7CitzdHJ1Y3Qgb2ZfdGFibGVfZmVhdHVyZV9wcm9wX3dyaXRlX3NldGZpZWxkKGFsaWduPTgsIGxlbmd0aF9pbmNsdWRlc19hbGlnbj1GYWxzZSkgOiBvZl90YWJsZV9mZWF0dXJlX3Byb3AgewogICAgIHVpbnQxNl90ICAgICAgICAgdHlwZSA9PSAxMjsKICAgICB1aW50MTZfdCAgICAgICAgIGxlbmd0aDsKICAgICBsaXN0KG9mX3VpbnQzMl90KSBveG1faWRzOwogfTsKIAotc3RydWN0IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcF93cml0ZV9zZXRmaWVsZF9taXNzIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKK3N0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3Bfd3JpdGVfc2V0ZmllbGRfbWlzcyhhbGlnbj04LCBsZW5ndGhfaW5jbHVkZXNfYWxpZ249RmFsc2UpIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKICAgICB1aW50MTZfdCAgICAgICAgIHR5cGUgPT0gMTM7CiAgICAgdWludDE2X3QgICAgICAgICBsZW5ndGg7CiAgICAgbGlzdChvZl91aW50MzJfdCkgb3htX2lkczsKIH07CiAKLXN0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3BfYXBwbHlfc2V0ZmllbGQgOiBvZl90YWJsZV9mZWF0dXJlX3Byb3Ageworc3RydWN0IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcF9hcHBseV9zZXRmaWVsZChhbGlnbj04LCBsZW5ndGhfaW5jbHVkZXNfYWxpZ249RmFsc2UpIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKICAgICB1aW50MTZfdCAgICAgICAgIHR5cGUgPT0gMTQ7CiAgICAgdWludDE2X3QgICAgICAgICBsZW5ndGg7CiAgICAgbGlzdChvZl91aW50MzJfdCkgb3htX2lkczsKIH07CiAKLXN0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3BfYXBwbHlfc2V0ZmllbGRfbWlzcyA6IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcCB7CitzdHJ1Y3Qgb2ZfdGFibGVfZmVhdHVyZV9wcm9wX2FwcGx5X3NldGZpZWxkX21pc3MoYWxpZ249OCwgbGVuZ3RoX2luY2x1ZGVzX2FsaWduPUZhbHNlKSA6IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcCB7CiAgICAgdWludDE2X3QgICAgICAgICB0eXBlID09IDE1OwogICAgIHVpbnQxNl90ICAgICAgICAgbGVuZ3RoOwogICAgIGxpc3Qob2ZfdWludDMyX3QpIG94bV9pZHM7CiB9OwogCi1zdHJ1Y3Qgb2ZfdGFibGVfZmVhdHVyZV9wcm9wX3RhYmxlX3N5bmNfZnJvbSA6IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcCB7CitzdHJ1Y3Qgb2ZfdGFibGVfZmVhdHVyZV9wcm9wX3RhYmxlX3N5bmNfZnJvbShhbGlnbj04LCBsZW5ndGhfaW5jbHVkZXNfYWxpZ249RmFsc2UpIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKICAgICB1aW50MTZfdCAgICAgICAgIHR5cGUgPT0gMTY7CiAgICAgdWludDE2X3QgICAgICAgICBsZW5ndGg7CiAgICAgbGlzdChvZl91aW50OF90KSB0YWJsZV9pZHM7CiB9OwogCi1zdHJ1Y3Qgb2ZfdGFibGVfZmVhdHVyZV9wcm9wX2V4cGVyaW1lbnRlciA6IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcCB7CitzdHJ1Y3Qgb2ZfdGFibGVfZmVhdHVyZV9wcm9wX2V4cGVyaW1lbnRlcihhbGlnbj04LCBsZW5ndGhfaW5jbHVkZXNfYWxpZ249RmFsc2UpIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKICAgICB1aW50MTZfdCAgICAgICAgIHR5cGUgPT0gNjU1MzQ7CiAgICAgdWludDE2X3QgICAgICAgICBsZW5ndGg7CiAgICAgdWludDMyX3QgICAgICAgICBleHBlcmltZW50ZXIgPT0gPzsKQEAgLTIwMzIsNyArMjAzMiw3IEBACiAgICAgb2Zfb2N0ZXRzX3QgICAgICBleHBlcmltZW50ZXJfZGF0YTsKIH07CiAKLXN0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3BfZXhwZXJpbWVudGVyX21pc3MgOiBvZl90YWJsZV9mZWF0dXJlX3Byb3Ageworc3RydWN0IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcF9leHBlcmltZW50ZXJfbWlzcyhhbGlnbj04LCBsZW5ndGhfaW5jbHVkZXNfYWxpZ249RmFsc2UpIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKICAgICB1aW50MTZfdCAgICAgICAgIHR5cGUgPT0gNjU1MzU7CiAgICAgdWludDE2X3QgICAgICAgICBsZW5ndGg7CiAgICAgdWludDMyX3QgICAgICAgICBleHBlcmltZW50ZXIgPT0gPzsKQEAgLTIxNzAsNyArMjE3MCw3IEBACiAgICAgZW51bSBvZnBfc3RhdHNfcmVwbHlfZmxhZ3MgZmxhZ3M7CiAgICAgcGFkKDQpOwogICAgIHVpbnQzMl90IHR5cGVzOwotICAgIHVpbnQzMl90IGNhcGFiaWxpdGllczsKKyAgICBlbnVtIG9mcF9ncm91cF9jYXBhYmlsaXRpZXMgY2FwYWJpbGl0aWVzOwogICAgIHVpbnQzMl90IG1heF9ncm91cHNfYWxsOwogICAgIHVpbnQzMl90IG1heF9ncm91cHNfc2VsZWN0OwogICAgIHVpbnQzMl90IG1heF9ncm91cHNfaW5kaXJlY3Q7CkBAIC0yMzMzLDYgKzIzMzMsOCBAQAogICAgIHVpbnQxNl90IHN0YXRzX3R5cGUgPT0gMTU7CiAgICAgZW51bSBvZnBfc3RhdHNfcmVxdWVzdF9mbGFncyBmbGFnczsKICAgICBwYWQoNCk7CisgICAgb2ZfcG9ydF9ub190IHBvcnRfbm87CisgICAgdWludDMyX3QgcXVldWVfaWQ7CiB9OwogCiBzdHJ1Y3Qgb2ZfcXVldWVfZGVzY19wcm9wIHsKQEAgLTI0MDYsNyArMjQwOCw3IEBACiAKIHN0cnVjdCBvZl9tZXRlcl9jb25maWcgewogICAgIHVpbnQxNl90ICAgICAgICBsZW5ndGg7Ci0gICAgdWludDE2X3QgICAgICAgIGZsYWdzOworICAgIGVudW0gb2ZwX21ldGVyX2ZsYWdzICAgICAgICBmbGFnczsKICAgICB1aW50MzJfdCAgICAgICAgbWV0ZXJfaWQ7CiAgICAgbGlzdChvZl9tZXRlcl9iYW5kX3QpIGVudHJpZXM7CiB9OwpAQCAtMjY0Miw3ICsyNjQ0LDcgQEAKICAgICB1aW50OF90IHR5cGUgPT0gMzA7CiAgICAgdWludDE2X3QgbGVuZ3RoOwogICAgIHVpbnQzMl90IHhpZDsKLSAgICB1aW50MzJfdCByb2xlOworICAgIGVudW0gb2ZwX2NvbnRyb2xsZXJfcm9sZSByb2xlOwogICAgIGVudW0gb2ZwX2NvbnRyb2xsZXJfcm9sZV9yZWFzb24gcmVhc29uOwogICAgIHBhZCgzKTsKICAgICB1aW50NjRfdCBnZW5lcmF0aW9uX2lkOwpkaWZmIC0tZ2l0IGEvb3BlbmZsb3dfaW5wdXQvc3RhbmRhcmQtMS41IGIvb3BlbmZsb3dfaW5wdXQvc3RhbmRhcmQtMS41Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmMGE4ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVuZmxvd19pbnB1dC9zdGFuZGFyZC0xLjUKQEAgLTAsMCArMSwzNjEwIEBACisKKyN2ZXJzaW9uIDYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBNQUNSTyBERUZJTklUSU9OUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK2VudW0gbWFjcm9fZGVmaW5pdGlvbnMgeworICAgIE9GUF9NQVhfVEFCTEVfTkFNRV9MRU4gPSAzMiwKKyAgICBPRlBfTUFYX1BPUlRfTkFNRV9MRU4gPSAxNiwKKworICAgIE9GUF9UQ1BfUE9SVCA9IDY2NTMsCisgICAgT0ZQX1NTTF9QT1JUID0gNjY1MywKKworICAgIE9GUF9FVEhfQUxFTiA9IDYsCisKKyAgICBPRlBfREVGQVVMVF9NSVNTX1NFTkRfTEVOID0gMTI4LAorCisgICAgT0ZQX1ZMQU5fTk9ORSA9IDAsCisKKyAgICBPRlBfRkxPV19QRVJNQU5FTlQgPSAwLAorCisgICAgT0ZQX0RFRkFVTFRfUFJJT1JJVFkgPSAweDgwMDAsCisKKyAgICBPRlBfTk9fQlVGRkVSID0gMHhmZmZmZmZmZiwKKworICAgIERFU0NfU1RSX0xFTiA9IDI1NiwKKyAgICBTRVJJQUxfTlVNX0xFTiA9IDMyLAorCisgICAgT0ZQUV9BTEwgPSAweGZmZmZmZmZmLAorICAgIE9GUFFfTUFYX1JBVEVfVU5DRkcgPSAweGZmZmYsCisgICAgT0ZQUV9NSU5fUkFURV9VTkNGRyA9IDB4ZmZmZiwKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU1BFQ0lBTCBTVFJVQ1RVUkVTIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RydWN0IG9mX3VpbnQ2NCB7CisgICAgdWludDY0X3QgdmFsdWU7Cit9OworCitzdHJ1Y3Qgb2ZfdWludDMyIHsKKyAgICB1aW50MzJfdCB2YWx1ZTsKK307CisKK3N0cnVjdCBvZl91aW50OCB7CisgICAgdWludDhfdCB2YWx1ZTsKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSEVBREVSIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogVHlwZSBmb3IgaGVhZGVyICovCitlbnVtIG9mcF90eXBlKHdpcmVfdHlwZT11aW50OF90KSB7CisgICAgT0ZQVF9IRUxMTyA9IDAsCisgICAgT0ZQVF9FUlJPUiA9IDEsCisgICAgT0ZQVF9FQ0hPX1JFUVVFU1QgPSAyLAorICAgIE9GUFRfRUNIT19SRVBMWSA9IDMsCisgICAgT0ZQVF9FWFBFUklNRU5URVIgPSA0LAorICAgIE9GUFRfRkVBVFVSRVNfUkVRVUVTVCA9IDUsCisgICAgT0ZQVF9GRUFUVVJFU19SRVBMWSA9IDYsCisgICAgT0ZQVF9HRVRfQ09ORklHX1JFUVVFU1QgPSA3LAorICAgIE9GUFRfR0VUX0NPTkZJR19SRVBMWSA9IDgsCisgICAgT0ZQVF9TRVRfQ09ORklHID0gOSwKKyAgICBPRlBUX1BBQ0tFVF9JTiA9IDEwLAorICAgIE9GUFRfRkxPV19SRU1PVkVEID0gMTEsCisgICAgT0ZQVF9QT1JUX1NUQVRVUyA9IDEyLAorICAgIE9GUFRfUEFDS0VUX09VVCA9IDEzLAorICAgIE9GUFRfRkxPV19NT0QgPSAxNCwKKyAgICBPRlBUX0dST1VQX01PRCA9IDE1LAorICAgIE9GUFRfUE9SVF9NT0QgPSAxNiwKKyAgICBPRlBUX1RBQkxFX01PRCA9IDE3LAorICAgIE9GUFRfU1RBVFNfUkVRVUVTVCA9IDE4LCAvKiBU/G0gc/xy/G1sZXIgaedpbiBheW79IG9sc3VuIGRpeWUgbXVsdGlwYXJ0IHllcmluZSBzdGF0cyAqLworICAgIE9GUFRfU1RBVFNfUkVQTFkgPSAxOSwgLyogVPxtIHP8cvxtbGVyIGnnaW4gYXlu/SBvbHN1biBkaXllIG11bHRpcGFydCB5ZXJpbmUgc3RhdHMgKi8KKyAgICBPRlBUX0JBUlJJRVJfUkVRVUVTVCA9IDIwLAorICAgIE9GUFRfQkFSUklFUl9SRVBMWSA9IDIxLAorICAgIE9GUFRfUk9MRV9SRVFVRVNUID0gMjQsCisgICAgT0ZQVF9ST0xFX1JFUExZID0gMjUsCisgICAgT0ZQVF9HRVRfQVNZTkNfUkVRVUVTVCA9IDI2LAorICAgIE9GUFRfR0VUX0FTWU5DX1JFUExZID0gMjcsCisgICAgT0ZQVF9TRVRfQVNZTkMgPSAyOCwKKyAgICBPRlBUX01FVEVSX01PRCA9IDI5LAorICAgIE9GUFRfUk9MRV9TVEFUVVMgPSAzMCwKKyAgICBPRlBUX1RBQkxFX1NUQVRVUyA9IDMxLAorICAgIE9GUFRfUkVRVUVTVEZPUldBUkQgPSAzMiwKKyAgICBPRlBUX0JVTkRMRV9DT05UUk9MID0gMzMsCisgICAgT0ZQVF9CVU5ETEVfQUREX01FU1NBR0UgPSAzNCwKKyAgICBPRlBUX0NPTlRST0xMRVJfU1RBVFVTID0gMzUsIC8qIDEuNCBkZW4gc29ucmEgeWVuaSBnZWxtaXMgKi8KK307CisKKy8qIEhlYWRlciBvbiBhbGwgT3BlbkZsb3cgcGFja2V0cyAqLworc3RydWN0IG9mX2hlYWRlciB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSA/OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7Cit9OworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhFQURFUiBUWVBFUyAoRk9SIERJRkZFUkVOVCBQQUNLRVRTKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIE5hbWVzcGFjZXMgKi8KKy8qIFVzZWQgaW4gaGVhZGVyX3R5cGUgKi8KK2VudW0gb2ZwX2hlYWRlcl90eXBlX25hbWVzcGFjZSh3aXJlX3R5cGU9dWludDE2X3QsIHN0YWJsZT1UcnVlKSB7CisgICAgT0ZQSFROX09ORiA9IDAsCisgICAgT0ZQSFROX0VUSEVSVFlQRSA9IDEsCisgICAgT0ZQSFROX0lQX1BST1RPID0gMiwKKyAgICBPRlBIVE5fVURQX1RDUF9QT1JUID0gMywKKyAgICBPRlBIVE5fSVBWNF9PUFRJT04gPSA0LAorfTsKKworLyogT05GIG5hbWVzcGFjZXMgKi8KK2VudW0gb2ZwX2hlYWRlcl90eXBlX29uZih3aXJlX3R5cGU9dWludDE2X3QsIHN0YWJsZT1UcnVlLCBjb21wbGV0ZT1GYWxzZSkgeworICAgIE9GUEhUT19FVEhFUk5FVCA9IDAsCisgICAgT0ZQSFRPX05PX0hFQURFUiA9IDEsCisgICAgT0ZQSFRPX09YTV9FWFBFUklNRU5URVIgPSAweEZGRkYsCit9OworCisvKiBIZWFkZXIgdHlwZSBzdHJ1Y3R1cmUuICovCitzdHJ1Y3Qgb2ZfaGVhZGVyX3R5cGUgeworICAgIGVudW0gb2ZwX2hlYWRlcl90eXBlX25hbWVzcGFjZSBuYW1lc3BhY2UgPT0gPzsKKyAgICB1aW50MTZfdCBuc190eXBlOworfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBPUlQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogUG9ydCBudW1iZXJpbmcgKi8KKy8qIFT8bSBz/HL8bWxlciBp52luIGF5bv0gb2xzdW4gZGl5ZSBvZnBfcG9ydF9ubyB5ZXJpbmUgcG9ydCAqLworZW51bSBvZnBfcG9ydCh3aXJlX3R5cGU9dWludDMyX3QpIHsKKyAgICBPRlBQX01BWCA9IDB4ZmZmZmZmMDAsCisgICAgT0ZQUF9VTlNFVCA9IDB4ZmZmZmZmZjcsCisgICAgT0ZQUF9JTl9QT1JUID0gMHhmZmZmZmZmOCwKKyAgICBPRlBQX1RBQkxFID0gMHhmZmZmZmZmOSwKKyAgICBPRlBQX05PUk1BTCA9IDB4ZmZmZmZmZmEsCisgICAgT0ZQUF9GTE9PRCA9IDB4ZmZmZmZmZmIsCisgICAgT0ZQUF9BTEwgPSAweGZmZmZmZmZjLAorICAgIE9GUFBfQ09OVFJPTExFUiA9IDB4ZmZmZmZmZmQsCisgICAgT0ZQUF9MT0NBTCA9IDB4ZmZmZmZmZmUsCisgICAgT0ZQUF9BTlkgPSAweGZmZmZmZmZmLAorfTsKKworLyogRmxhZ3MgdG8gaW5kaWNhdGUgYmVoYXZpb3Igb2YgdGhlIHBoeXNpY2FsIHBvcnQgKi8KKy8qIFVzZWQgaW4gb2ZfcG9ydF9kZXNjIGFuZCBvZnBfcG9ydF9tb2QgbWVzc2FnZSAqLworZW51bSBvZnBfcG9ydF9jb25maWcod2lyZV90eXBlPXVpbnQzMl90LCBiaXRtYXNrPVRydWUpIHsKKyAgICBPRlBQQ19QT1JUX0RPV04gPSAweDEsCisgICAgT0ZQUENfTk9fUkVDViA9IDB4NCwKKyAgICBPRlBQQ19OT19GV0QgPSAweDIwLAorICAgIE9GUFBDX05PX1BBQ0tFVF9JTiA9IDB4NDAsCisgICAgT0ZQUENfQlNOX01JUlJPUl9ERVNUID0gMHg4MDAwMDAwMCwgLyogaGVhZGVyIGRvc3lhbGFy/W5kYSBidWx1bm11eW9yICovCit9OworCisvKiBDdXJyZW50IHN0YXRlIG9mIHRoZSBwaHlzaWNhbCBwb3J0ICovCisvKiBOb3QgY29uZmlndXJhYmxlIGZyb20gdGhlIGNvbnRyb2xsZXIgKi8KKy8qIFVzZWQgaW4gb2ZfcG9ydF9kZXNjICovCitlbnVtIG9mcF9wb3J0X3N0YXRlKHdpcmVfdHlwZT11aW50MzJfdCwgYml0bWFzaz1UcnVlKSB7CisgICAgT0ZQUFNfTElOS19ET1dOID0gMHgxLAorICAgIE9GUFBTX0JMT0NLRUQgPSAweDIsCisgICAgT0ZQUFNfTElWRSA9IDB4NCwKK307CisKKy8qIFBvcnQgZGVzY3JpcHRpb24gcHJvcGVydHkgdHlwZXMgKi8KKy8qIG5vdCBpbiBiZWZvcmUgKi8KKy8qIFVzZWQgaW4gb2ZfcG9ydF9kZXNjX3Byb3BfZXRoZXJuZXQgKi8KK2VudW0gb2ZwX3BvcnRfZGVzY19wcm9wX3R5cGUgeworICAgT0ZQUERQVF9FVEhFUk5FVCA9IDAsCisgICBPRlBQRFBUX09QVElDQUwgPSAxLAorICAgT0ZQUERQVF9QSVBFTElORV9JTlBVVCA9IDIsCisgICBPRlBQRFBUX1BJUEVMSU5FX09VVFBVVCA9IDMsCisgICBPRlBQRFBUX1JFQ0lSQ1VMQVRFID0gNCwKKyAgIE9GUFBEUFRfRVhQRVJJTUVOVEVSID0gMHhGRkZGLAorfTsKKworLyogRmVhdHVyZXMgb2YgcG9ydHMgYXZhaWxhYmxlIGluIGEgZGF0YXBhdGguICovCitlbnVtIG9mcF9wb3J0X2ZlYXR1cmVzKHdpcmVfdHlwZT11aW50MzJfdCwgYml0bWFzaz1UcnVlKSB7CisgICAgT0ZQUEZfMTBNQl9IRCA9IDB4MSwKKyAgICBPRlBQRl8xME1CX0ZEID0gMHgyLAorICAgIE9GUFBGXzEwME1CX0hEID0gMHg0LAorICAgIE9GUFBGXzEwME1CX0ZEID0gMHg4LAorICAgIE9GUFBGXzFHQl9IRCA9IDB4MTAsCisgICAgT0ZQUEZfMUdCX0ZEID0gMHgyMCwKKyAgICBPRlBQRl8xMEdCX0ZEID0gMHg0MCwKKyAgICBPRlBQRl80MEdCX0ZEID0gMHg4MCwKKyAgICBPRlBQRl8xMDBHQl9GRCA9IDB4MTAwLAorICAgIE9GUFBGXzFUQl9GRCA9IDB4MjAwLAorICAgIE9GUFBGX09USEVSID0gMHg0MDAsCisgICAgT0ZQUEZfQ09QUEVSID0gMHg4MDAsCisgICAgT0ZQUEZfRklCRVIgPSAweDEwMDAsCisgICAgT0ZQUEZfQVVUT05FRyA9IDB4MjAwMCwKKyAgICBPRlBQRl9QQVVTRSA9IDB4NDAwMCwKKyAgICBPRlBQRl9QQVVTRV9BU1lNID0gMHg4MDAwLAorICAgIE9GUFBGX0JTTl9CUkVBS09VVF9DQVBBQkxFID0gMHg4MDAwMDAwMCwgLyogbm90IGluIHNwZWMuICovCit9OworCisvKiBGZWF0dXJlcyBvZiBvcHRpY2FsIHBvcnRzIGF2YWlsYWJsZSBpbiBzd2l0Y2guICovCitlbnVtIG9mcF9vcHRpY2FsX3BvcnRfZmVhdHVyZXMod2lyZV90eXBlPXVpbnQzMl90LCBiaXRtYXNrPVRydWUpIHsKKyAgICBPRlBPUEZfUlhfVFVORSA9IDB4MSwKKyAgICBPRlBPUEZfVFhfVFVORSA9IDB4MiwKKyAgICBPRlBPUEZfVFhfUFdSID0gMHg0LAorICAgIE9GUE9QRl9VU0VfRlJFUSA9IDB4OCwKK307CisKKy8qIERlc2NyaXB0aW9uIG9mIGEgcG9ydCAqLworLyogVPxtIHP8cvxtbGVyIGnnaW4gYXlu/SBvbHN1biBkaXllIG9mcF9wb3J0IHllcmluZSBvZl9wb3J0X2Rlc2MgKi8KK3N0cnVjdCBvZl9wb3J0X2Rlc2MgeworICAgIG9mX3BvcnRfbm9fdCBwb3J0X25vOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICBwYWQoMik7CisgICAgb2ZfbWFjX2FkZHJfdCBod19hZGRyOworICAgIHBhZCgyKTsKKyAgICBvZl9wb3J0X25hbWVfdCBuYW1lOworICAgIGVudW0gb2ZwX3BvcnRfY29uZmlnIGNvbmZpZzsgLyogQml0bWFwIG9mIE9GUFBDXyogZmxhZ3MuICovCisgICAgZW51bSBvZnBfcG9ydF9zdGF0ZSBzdGF0ZTsgLyogQml0bWFwIG9mIE9GUFBTXyogZmxhZ3MuICovCisgICAgbGlzdChvZl9wb3J0X2Rlc2NfcHJvcF90KSBwcm9wZXJ0aWVzOworfTsKKworLyogQ29tbW9uIGhlYWRlciBmb3IgYWxsIHBvcnQgZGVzY3JpcHRpb24gcHJvcGVydGllcy4gKi8KK3N0cnVjdCBvZl9wb3J0X2Rlc2NfcHJvcCB7CisgICAgdWludDE2X3QgdHlwZSA9PSA/OworICAgIHVpbnQxNl90IGxlbmd0aDsKK307CisKKy8qIEV0aGVybmV0IHBvcnQgZGVzY3JpcHRpb24gcHJvcGVydHkuICovCitzdHJ1Y3Qgb2ZfcG9ydF9kZXNjX3Byb3BfZXRoZXJuZXQgOiBvZl9wb3J0X2Rlc2NfcHJvcCB7CisgICAgdWludDE2X3QgdHlwZSA9PSAwOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICBwYWQoNCk7CisgICAgdWludDMyX3QgY3VycjsKKyAgICB1aW50MzJfdCBhZHZlcnRpc2VkOworICAgIHVpbnQzMl90IHN1cHBvcnRlZDsKKyAgICB1aW50MzJfdCBwZWVyOworICAgIHVpbnQzMl90IGN1cnJfc3BlZWQ7CisgICAgdWludDMyX3QgbWF4X3NwZWVkOworfTsKKworLyogT3B0aWNhbCBwb3J0IGRlc2NyaXB0aW9uIHByb3BlcnR5LiAqLworc3RydWN0IG9mX3BvcnRfZGVzY19wcm9wX29wdGljYWwgOiBvZl9wb3J0X2Rlc2NfcHJvcCB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICBwYWQoNCk7CisgICAgdWludDMyX3Qgc3VwcG9ydGVkOworICAgIHVpbnQzMl90IHR4X21pbl9mcmVxX2xtZGE7CisgICAgdWludDMyX3QgdHhfbWF4X2ZyZXFfbG1kYTsKKyAgICB1aW50MzJfdCB0eF9ncmlkX2ZyZXFfbG1kYTsKKyAgICB1aW50MzJfdCByeF9taW5fZnJlcV9sbWRhOworICAgIHVpbnQzMl90IHJ4X21heF9mcmVxX2xtZGE7CisgICAgdWludDMyX3QgcnhfZ3JpZF9mcmVxX2xtZGE7CisgICAgdWludDE2X3QgdHhfcHdyX21pbjsKKyAgICB1aW50MTZfdCB0eF9wd3JfbWF4OworfTsKKworLyogSW5ncmVzcyBwaXBlbGluZSBmaWVsZHMgZGVzY3JpcHRpb24gcHJvcGVydHkgKi8KKy8qIEluIDEuNS4xIHNwZWMgb2ZwX3BvcnRfZGVzY19wcm9wX294bSAqLworc3RydWN0IG9mX3BvcnRfZGVzY19wcm9wX2luZ3Jlc3MgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMjsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgb2Zfb2N0ZXRzX3Qgb3htX2lkczsKK307CisKKy8qIEVncmVzcyBwaXBlbGluZSBmaWVsZHMgZGVzY3JpcHRpb24gcHJvcGVydHkgKi8KKy8qIEluIDEuNS4xIHNwZWMgb2ZwX3BvcnRfZGVzY19wcm9wX294bSAqLworc3RydWN0IG9mX3BvcnRfZGVzY19wcm9wX2VncmVzcyB7CisgICAgdWludDE2X3QgdHlwZSA9PSAzOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICBvZl9vY3RldHNfdCBveG1faWRzOworfTsKKworLyogUmVjaXJjdWxhdGUgcG9ydCBkZXNjcmlwdGlvbiBwcm9wZXJ0eS4gKi8KK3N0cnVjdCBvZnBfcG9ydF9kZXNjX3Byb3BfcmVjaXJjdWxhdGUgeworICAgIHVpbnQxNl90IHR5cGUgPT0gNDsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgb2Zfb2N0ZXRzX3QgcG9ydF9ub3M7Cit9OworCisKKy8qIEV4cGVyaW1lbnRlciBwb3J0IGRlc2NyaXB0aW9uIHByb3BlcnR5LiAqLworc3RydWN0IG9mX3BvcnRfZGVzY19wcm9wX2V4cGVyaW1lbnRlciA6IG9mX3BvcnRfZGVzY19wcm9wIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDB4ZmZmZjsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgZXhwZXJpbWVudGVyID09ID87CisgICAgdWludDMyX3QgZXhwX3R5cGU7Cit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGTE9XIE1BVENIIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIE1hdGNoIFR5cGUgKi8KKy8qIFN0YW5kYXJkIGRlcHJlY2F0ZWQgb2xtdf4gKi8KK2VudW0gb2ZwX21hdGNoX3R5cGUod2lyZV90eXBlPXVpbnQxNl90KSB7CisgICAgT0ZQTVRfU1RBTkRBUkQgPSAwLAorICAgIE9GUE1UX09YTSA9IDEsCit9OworCisvKiBPWE0gQ2xhc3MgSURzICovCitlbnVtIG9mcF9veG1fY2xhc3Mod2lyZV90eXBlPXVpbnQxNl90KSB7CisgICAgT0ZQWE1DX05YTV8wID0gMCwKKyAgICBPRlBYTUNfTlhNXzEgPSAxLAorICAgIE9GUFhNQ19PUEVORkxPV19CQVNJQyA9IDB4ODAwMCwKKyAgICBPRlBYTUNfUEFDS0VUX1JFR1MgPSAweDgwMDEsCisgICAgT0ZQWE1DX0VYUEVSSU1FTlRFUiA9IDB4ZmZmZiwKK307CisKKworLyogVkxBTiBpZCBzZXQgb3Igbm90ICovCitlbnVtIG9mcF92bGFuX2lkKHdpcmVfdHlwZT11aW50MTZfdCkgeworICAgIE9GUFZJRF9OT05FID0gMCwKKyAgICBPRlBWSURfUFJFU0VOVCA9IDB4MTAwMCwKK307CisKKy8vIEZJWE1FOiBPRiBzcGVjIHNwZWNpZmllZCB0aGlzIGFzICc5JyBiaXRzLCBpbXBsaWNpdGx5IGFkZGluZyB0byBmdWxsIGJ5dGUKKy8qIEJpdCBkZWZpbml0aW9ucyBmb3IgSVB2NiBFeHRlbnNpb24gSGVhZGVyIHBzZXVkby1maWVsZC4gKi8KK2VudW0gb2ZwX2lwdjZleHRoZHJfZmxhZ3Mod2lyZV90eXBlPXVpbnQxNl90LCBiaXRtYXNrPVRydWUpIHsKKyAgICBPRlBJRUhfTk9ORVhUID0gMHgxLAorICAgIE9GUElFSF9FU1AgPSAweDIsCisgICAgT0ZQSUVIX0FVVEggPSAweDQsCisgICAgT0ZQSUVIX0RFU1QgPSAweDgsCisgICAgT0ZQSUVIX0ZSQUcgPSAweDEwLAorICAgIE9GUElFSF9ST1VURVIgPSAweDIwLAorICAgIE9GUElFSF9IT1AgPSAweDQwLAorICAgIE9GUElFSF9VTlJFUCA9IDB4ODAsCisgICAgT0ZQSUVIX1VOU0VRID0gMHgxMDAsCit9OworCisvKiBGbG93IE1hdGNoICovCisvKiBzdGFuZGFyZC0xLjAgaedpbmRlIHYxIG9sYXJhayB2YXIgKi8KKy8qIHN0YW5kYXJkLTEuMSBp52luZGUgdjIgb2xhcmFrIHZhciAqLworLyogc3RhbmRhcmQtMS4yIGRlbiBpdGliYXJlbiB2MyBvbGFyYWsgZGXwaf5taf4gdmUgb3htIGNsYXNzbGFy/SBvbHX+dHVydWxtdf4gKi8KK3N0cnVjdCBvZl9tYXRjaF92MyhhbGlnbj04LCBsZW5ndGhfaW5jbHVkZXNfYWxpZ249RmFsc2UpIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDE7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIGxpc3Qob2Zfb3htX3QpIG94bV9saXN0OworfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZMT1cgU1RBVFMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogc3RhdHMgb3hzIGNsYXNzICovCisvKiBub3QgaW4gMS40ICAqLworZW51bSBvZnBfb3hzX2NsYXNzKHdpcmVfdHlwZT11aW50MTZfdCkgeworICAgIE9GUFhTQ19PUEVORkxPV19CQVNJQyA9IDB4ODAwMiwKKyAgICBPRlBYU0NfRVhQRVJJTUVOVEVSID0gMHhGRkZGLAorfTsKKworc3RydWN0IG9mX3N0YXRfdjYgKGFsaWduPTgsIGxlbmd0aF9pbmNsdWRlc19hbGlnbj1GYWxzZSl7CisgICAgcGFkKDIpOyAvKiByZXNlcnZlZCAqLworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICBsaXN0KG9mX294c190KSBveHNfZmllbGRzOworfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGTE9XIElOU1RSVUNUSU9OUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogaW5zdHJ1Y3Rpb24gdHlwZXMgKi8KK2VudW0gb2ZwX2luc3RydWN0aW9uX3R5cGUod2lyZV90eXBlPXVpbnQxNl90LCBiaXRtYXNrPVRydWUpIHsKKyAgICBPRlBJVF9HT1RPX1RBQkxFID0gMHgxLAorICAgIE9GUElUX1dSSVRFX01FVEFEQVRBID0gMHgyLAorICAgIE9GUElUX1dSSVRFX0FDVElPTlMgPSAweDMsCisgICAgT0ZQSVRfQVBQTFlfQUNUSU9OUyA9IDB4NCwKKyAgICBPRlBJVF9DTEVBUl9BQ1RJT05TID0gMHg1LAorICAgIE9GUElUX0RFUFJFQ0FURUQgPSAweDYsCisgICAgT0ZQSVRfU1RBVF9UUklHR0VSID0gMHg3LAorICAgIE9GUElUX0VYUEVSSU1FTlRFUiA9IDB4ZmZmZiwKK307CisKKy8qIHN0YXQgdHJpZ2dlciBpbnN0cnVjdGlvbiBmbGFncyAqLworLyogbm90IGluIDEuNCAqLworZW51bSBvZnBfc3RhdF90cmlnZ2VyX2ZsYWdzKHdpcmVfdHlwZT11aW50MzJfdCwgYml0bWFzaz1UcnVlKSB7CisgICAgT0ZQU1RGX1BFUklPRElDID0gMHgxLAorICAgIE9GUFNURl9PTkxZX0ZJUlNUID0gMHgyLAorfTsKKworLyogSW5zdHJ1Y3Rpb24gSGVhZGVyICovCitzdHJ1Y3Qgb2ZfaW5zdHJ1Y3Rpb24geworICAgIHVpbnQxNl90IHR5cGUgPT0gPzsKKyAgICB1aW50MTZfdCBsZW47Cit9OworCisvKiBJbnN0cnVjdGlvbiBzdHJ1Y3R1cmUgZm9yIE9GUElUX0dPVE9fVEFCTEUgKi8KK3N0cnVjdCBvZl9pbnN0cnVjdGlvbl9nb3RvX3RhYmxlIDogb2ZfaW5zdHJ1Y3Rpb24geworICAgIHVpbnQxNl90IHR5cGUgPT0gMTsKKyAgICB1aW50MTZfdCBsZW47CisgICAgdWludDhfdCB0YWJsZV9pZDsKKyAgICBwYWQoMyk7Cit9OworCisvKiBJbnN0cnVjdGlvbiBzdHJ1Y3R1cmUgZm9yIE9GUElUX1dSSVRFX01FVEFEQVRBICovCitzdHJ1Y3Qgb2ZfaW5zdHJ1Y3Rpb25fd3JpdGVfbWV0YWRhdGEgOiBvZl9pbnN0cnVjdGlvbiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAyOworICAgIHVpbnQxNl90IGxlbjsKKyAgICBwYWQoNCk7CisgICAgdWludDY0X3QgbWV0YWRhdGE7CisgICAgdWludDY0X3QgbWV0YWRhdGFfbWFzazsKK307CisKKy8qIEluc3RydWN0aW9uIHN0cnVjdHVyZSBmb3IgT0ZQSVRfV1JJVEUgKi8KK3N0cnVjdCBvZl9pbnN0cnVjdGlvbl93cml0ZV9hY3Rpb25zIDogb2ZfaW5zdHJ1Y3Rpb24geworICAgIHVpbnQxNl90IHR5cGUgPT0gMzsKKyAgICB1aW50MTZfdCBsZW47CisgICAgcGFkKDQpOworICAgIGxpc3Qob2ZfYWN0aW9uX3QpIGFjdGlvbnM7Cit9OworCisvKiBJbnN0cnVjdGlvbiBzdHJ1Y3R1cmUgZm9yIE9GUElUX0FQUExZICovCitzdHJ1Y3Qgb2ZfaW5zdHJ1Y3Rpb25fYXBwbHlfYWN0aW9ucyA6IG9mX2luc3RydWN0aW9uIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDQ7CisgICAgdWludDE2X3QgbGVuOworICAgIHBhZCg0KTsKKyAgICBsaXN0KG9mX2FjdGlvbl90KSBhY3Rpb25zOworfTsKKworLyogSW5zdHJ1Y3Rpb24gc3RydWN0dXJlIGZvciBPRlBJVF9DTEVBUiAqLworc3RydWN0IG9mX2luc3RydWN0aW9uX2NsZWFyX2FjdGlvbnMgOiBvZl9pbnN0cnVjdGlvbiB7CisgICAgdWludDE2X3QgdHlwZSA9PSA1OworICAgIHVpbnQxNl90IGxlbjsKKyAgICBwYWQoNCk7Cit9OworCisvKiBJbnN0cnVjdGlvbiBzdHJ1Y3R1cmUgZm9yIE9GUElUX1NUQVRfVFJJR0dFUiAqLworLyogbm90IGluIDEuNCAqLworc3RydWN0IG9mX2luc3RydWN0aW9uX3N0YXRfdHJpZ2dlciA6IG9mX2luc3RydWN0aW9uIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDc7CisgICAgdWludDE2X3QgbGVuOworICAgIGVudW0gb2ZwX3N0YXRfdHJpZ2dlcl9mbGFncyBmbGFnczsKKyAgICBsaXN0KG9mX294c190KSB0aHJlc2hvbGRzOworfTsKKworLyogSW5zdHJ1Y3Rpb24gc3RydWN0dXJlIGZvciBleHBlcmltZW50YWwgaW5zdHJ1Y3Rpb25zICovCitzdHJ1Y3Qgb2ZfaW5zdHJ1Y3Rpb25fZXhwZXJpbWVudGVyIDogb2ZfaW5zdHJ1Y3Rpb24geworICAgIHVpbnQxNl90IHR5cGUgPT0gNjU1MzU7CisgICAgdWludDE2X3QgbGVuOworICAgIHVpbnQzMl90IGV4cGVyaW1lbnRlciA9PSA/OworICAgIG9mX29jdGV0c190IGRhdGE7Cit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQUNUSU9OIFNUUlVDVFVSRVMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogYWN0aW9uIHR5cGVzICovCitlbnVtIG9mcF9hY3Rpb25fdHlwZSh3aXJlX3R5cGU9dWludDE2X3QpIHsKKyAgICBPRlBBVF9PVVRQVVQgPSAwLAorICAgIE9GUEFUX0NPUFlfVFRMX09VVCA9IDB4YiwKKyAgICBPRlBBVF9DT1BZX1RUTF9JTiA9IDB4YywKKyAgICBPRlBBVF9TRVRfTVBMU19UVEwgPSAweGYsCisgICAgT0ZQQVRfREVDX01QTFNfVFRMID0gMHgxMCwKKyAgICBPRlBBVF9QVVNIX1ZMQU4gPSAweDExLAorICAgIE9GUEFUX1BPUF9WTEFOID0gMHgxMiwKKyAgICBPRlBBVF9QVVNIX01QTFMgPSAweDEzLAorICAgIE9GUEFUX1BPUF9NUExTID0gMHgxNCwKKyAgICBPRlBBVF9TRVRfUVVFVUUgPSAweDE1LAorICAgIE9GUEFUX0dST1VQID0gMHgxNiwKKyAgICBPRlBBVF9TRVRfTldfVFRMID0gMHgxNywKKyAgICBPRlBBVF9ERUNfTldfVFRMID0gMHgxOCwKKyAgICBPRlBBVF9TRVRfRklFTEQgPSAweDE5LAorICAgIE9GUEFUX1BVU0hfUEJCID0gMHgxYSwKKyAgICBPRlBBVF9QT1BfUEJCID0gMHgxYiwKKyAgICBPRlBBVF9DT1BZX0ZJRUxEID0gMHgxYywKKyAgICBPRlBBVF9NRVRFUiA9IDB4MWQsCisgICAgT0ZQQVRfRVhQRVJJTUVOVEVSID0gMHhmZmZmLAorfTsKKworLyogQWN0aW9uIGhlYWRlciB0aGF0IGlzIGNvbW1vbiB0byBhbGwgYWN0aW9ucyAqLworc3RydWN0IG9mX2FjdGlvbiB7CisgICAgdWludDE2X3QgdHlwZSA9PSA/OworICAgIHVpbnQxNl90IGxlbjsKK307CisKKy8qIEFjdGlvbiBzdHJ1Y3R1cmUgZm9yIE9GUEFUX09VVFBVVCAqLworc3RydWN0IG9mX2FjdGlvbl9vdXRwdXQgOiBvZl9hY3Rpb24geworICAgIHVpbnQxNl90IHR5cGUgPT0gMDsKKyAgICB1aW50MTZfdCBsZW47CisgICAgb2ZfcG9ydF9ub190IHBvcnQ7CisgICAgdWludDE2X3QgbWF4X2xlbjsKKyAgICBwYWQoNik7Cit9OworCisvKlRoZSBtYXhfbGVuIGluZGljYXRlcyB0aGUgbWF4aW11bSBhbW91bnQgb2YgZGF0YSBmcm9tIGEgcGFja2V0IHRoYXQgc2hvdWxkIGJlIHNlbnQgd2hlbiB0aGUgcG9ydCBpcyBPRlBQX0NPTlRST0xMRVIqLworZW51bSBvZnBfY29udHJvbGxlcl9tYXhfbGVuKHdpcmVfdHlwZT11aW50MTZfdCwgY29tcGxldGU9RmFsc2UpIHsKKyAgICBPRlBDTUxfTUFYID0gMHhmZmU1LAorICAgIE9GUENNTF9OT19CVUZGRVIgPSAweGZmZmYsCit9OworCisvKiBBY3Rpb24gc3RydWN0dXJlIGZvciBPRlBBVF9HUk9VUC4gKi8KK3N0cnVjdCBvZl9hY3Rpb25fZ3JvdXAgOiBvZl9hY3Rpb24geworICAgIHVpbnQxNl90IHR5cGUgPT0gMjI7CisgICAgdWludDE2X3QgbGVuOworICAgIHVpbnQzMl90IGdyb3VwX2lkOworfTsKKworLyogQWN0aW9uIHN0cnVjdHVyZSBmb3IgT0ZQQVRfU0VUX1FVRVVFLiAqLworc3RydWN0IG9mX2FjdGlvbl9zZXRfcXVldWUgOiBvZl9hY3Rpb24geworICAgIHVpbnQxNl90IHR5cGUgPT0gMjE7CisgICAgdWludDE2X3QgbGVuOworICAgIHVpbnQzMl90IHF1ZXVlX2lkOworfTsKKworLyogQWN0aW9uIHN0cnVjdHVyZSBmb3IgT0ZQQVRfTUVURVIgKi8KK3N0cnVjdCBvZl9hY3Rpb25fbWV0ZXIgOiBvZl9hY3Rpb24geworICAgIHVpbnQxNl90IHR5cGUgPT0gMjk7CisgICAgdWludDE2X3QgbGVuOworICAgIHVpbnQzMl90IG1ldGVyX2lkOworfTsKKworLyogQWN0aW9uIHN0cnVjdHVyZSBmb3IgT0ZQQVRfU0VUX01QTFNfVFRMLiAqLworc3RydWN0IG9mX2FjdGlvbl9zZXRfbXBsc190dGwgOiBvZl9hY3Rpb24geworICAgIHVpbnQxNl90IHR5cGUgPT0gMTU7CisgICAgdWludDE2X3QgbGVuOworICAgIHVpbnQ4X3QgbXBsc190dGw7CisgICAgcGFkKDMpOworfTsKKworLyogQWN0aW9uIHN0cnVjdHVyZSBmb3IgT0ZQQVRfQ09QWV9UVExfT1VUICovCitzdHJ1Y3Qgb2ZfYWN0aW9uX2NvcHlfdHRsX291dCA6IG9mX2FjdGlvbiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxMTsKKyAgICB1aW50MTZfdCBsZW47CisgICAgcGFkKDQpOworfTsKKworLyogQWN0aW9uIHN0cnVjdHVyZSBmb3IgT0ZQQVRfQ09QWV9UVExfSU4gKi8KK3N0cnVjdCBvZl9hY3Rpb25fY29weV90dGxfaW4gOiBvZl9hY3Rpb24geworICAgIHVpbnQxNl90IHR5cGUgPT0gMTI7CisgICAgdWludDE2X3QgbGVuOworICAgIHBhZCg0KTsKK307CisKKy8qIEFjdGlvbiBzdHJ1Y3R1cmUgZm9yIE9GUEFUX0RFQ19NUExTX1RUTCAqLworc3RydWN0IG9mX2FjdGlvbl9kZWNfbXBsc190dGwgOiBvZl9hY3Rpb24geworICAgIHVpbnQxNl90IHR5cGUgPT0gMTY7CisgICAgdWludDE2X3QgbGVuOworICAgIHBhZCg0KTsKK307CisKKy8qIEFjdGlvbiBzdHJ1Y3R1cmUgZm9yIE9GUEFUX0RFQ19OV19UVEwgKi8KK3N0cnVjdCBvZl9hY3Rpb25fZGVjX253X3R0bCA6IG9mX2FjdGlvbiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAyNDsKKyAgICB1aW50MTZfdCBsZW47CisgICAgcGFkKDQpOworfTsKKworLyogQWN0aW9uIHN0cnVjdHVyZSBmb3IgT0ZQQVRfUE9QX1ZMQU4gKi8KK3N0cnVjdCBvZl9hY3Rpb25fcG9wX3ZsYW4gOiBvZl9hY3Rpb24geworICAgIHVpbnQxNl90IHR5cGUgPT0gMTg7CisgICAgdWludDE2X3QgbGVuOworICAgIHBhZCg0KTsKK307CisKKy8qIEFjdGlvbiBzdHJ1Y3R1cmUgZm9yIE9GUEFUX1BPUF9QQkIgKi8KK3N0cnVjdCBvZl9hY3Rpb25fcG9wX3BiYiA6IG9mX2FjdGlvbiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAyNzsKKyAgICB1aW50MTZfdCBsZW47CisgICAgcGFkKDQpOworfTsKKworLyogQWN0aW9uIHN0cnVjdHVyZSBmb3IgT0ZQQVRfU0VUX05XX1RUTC4gKi8KK3N0cnVjdCBvZl9hY3Rpb25fc2V0X253X3R0bCA6IG9mX2FjdGlvbiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAyMzsKKyAgICB1aW50MTZfdCBsZW47CisgICAgdWludDhfdCBud190dGw7CisgICAgcGFkKDMpOworfTsKKworLyogQWN0aW9uIHN0cnVjdHVyZSBmb3IgT0ZQQVRfUFVTSF9WTEFOICovCitzdHJ1Y3Qgb2ZfYWN0aW9uX3B1c2hfdmxhbiA6IG9mX2FjdGlvbiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxNzsKKyAgICB1aW50MTZfdCBsZW47CisgICAgdWludDE2X3QgZXRoZXJ0eXBlOworICAgIHBhZCgyKTsKK307CisKKy8qIEFjdGlvbiBzdHJ1Y3R1cmUgZm9yIE9GUEFUX1BVU0hfTVBMUyAqLworc3RydWN0IG9mX2FjdGlvbl9wdXNoX21wbHMgOiBvZl9hY3Rpb24geworICAgIHVpbnQxNl90IHR5cGUgPT0gMTk7CisgICAgdWludDE2X3QgbGVuOworICAgIHVpbnQxNl90IGV0aGVydHlwZTsKKyAgICBwYWQoMik7Cit9OworCisvKiBBY3Rpb24gc3RydWN0dXJlIGZvciBPRlBBVF9QVVNIX1BCQiAqLworc3RydWN0IG9mX2FjdGlvbl9wdXNoX3BiYiA6IG9mX2FjdGlvbiB7CisgICAgdWludDE2X3QgdHlwZSA9PSAyNjsKKyAgICB1aW50MTZfdCBsZW47CisgICAgdWludDE2X3QgZXRoZXJ0eXBlOworICAgIHBhZCgyKTsKK307CisKKy8qIEFjdGlvbiBzdHJ1Y3R1cmUgZm9yIE9GUEFUX1BPUF9NUExTICovCitzdHJ1Y3Qgb2ZfYWN0aW9uX3BvcF9tcGxzIDogb2ZfYWN0aW9uIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDIwOworICAgIHVpbnQxNl90IGxlbjsKKyAgICB1aW50MTZfdCBldGhlcnR5cGU7CisgICAgcGFkKDIpOworfTsKKworLyogQWN0aW9uIHN0cnVjdHVyZSBmb3IgT0ZQQVRfU0VUX0ZJRUxEICovCitzdHJ1Y3Qgb2ZfYWN0aW9uX3NldF9maWVsZChhbGlnbj04LCBsZW5ndGhfaW5jbHVkZXNfYWxpZ249VHJ1ZSkgOiBvZl9hY3Rpb24geworICAgIHVpbnQxNl90IHR5cGUgPT0gMjU7CisgICAgdWludDE2X3QgbGVuOworICAgIG9mX294bV90IGZpZWxkOworfTsKKworLyogQWN0aW9uIHN0cnVjdHVyZSBmb3IgT0ZQQVRfQ09QWV9GSUVMRCAqLworLyogbm90IGluIDEuNCAqLworc3RydWN0IG9mcF9hY3Rpb25fY29weV9maWVsZCB7CisgICAgdWludDE2X3QgdHlwZSA9PSAyODsKKyAgICB1aW50MTZfdCBsZW47CisgICAgdWludDE2X3Qgbl9iaXRzOworICAgIHVpbnQxNl90IHNyY19vZmZzZXQ7CisgICAgdWludDE2X3QgZHN0X29mZnNldDsKKyAgICBwYWQoMik7CisgICAgbGlzdChvZl9veG1fdCkgb3htX2lkczsKK307CisKKy8qIEFjdGlvbiBoZWFkZXIgZm9yIE9GUEFUX0VYUEVSSU1FTlRFUiAqLworc3RydWN0IG9mX2FjdGlvbl9leHBlcmltZW50ZXIoYWxpZ249OCwgbGVuZ3RoX2luY2x1ZGVzX2FsaWduPVRydWUpOiBvZl9hY3Rpb24geworICAgIHVpbnQxNl90IHR5cGUgPT0gNjU1MzU7CisgICAgdWludDE2X3QgbGVuOworICAgIHVpbnQzMl90IGV4cGVyaW1lbnRlciA9PSA/OworfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDT05UUk9MTEVSIFNUQVRVUyBTVFJVQ1RVUkUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogbm90IGluIDEuNCAqLworCisvKiBXaHkgaXMgdGhlIGNvbnRyb2xsZXIgc3RhdHVzIGJlaW5nIHJlcG9ydGVkPyAqLworZW51bSBvZnBfY29udHJvbGxlcl9zdGF0dXNfcmVhc29uKHdpcmVfdHlwZT11aW50OF90KSB7CisgICAgT0ZQQ1NSX1JFUVVFU1QgPSAwLAorICAgIE9GUENTUl9DSEFOTkVMX1NUQVRVUyA9IDEsCisgICAgT0ZQQ1NSX1JPTEUgPSAyLAorICAgIE9GUENTUl9DT05UUk9MTEVSX0FEREVEID0gMywKKyAgICBPRlBDU1JfQ09OVFJPTExFUl9SRU1PVkVEID0gNCwKKyAgICBPRlBDU1JfU0hPUlRfSUQgPSA1LAorICAgIE9GUENTUl9FWFBFUklNRU5URVIgPSA2LAorfTsKKworLyogQ29udHJvbCBjaGFubmVsIHN0YXR1cy4gKi8KK2VudW0gb2ZwX2NvbnRyb2xfY2hhbm5lbF9zdGF0dXMod2lyZV90eXBlPXVpbnQ4X3QpIHsKKyAgICBPRlBDVF9TVEFUVVNfVVAgPSAwLAorICAgIE9GUENUX1NUQVRVU19ET1dOID0gMSwKK307CisKKy8qIENvbnRyb2xsZXIgc3RhdHVzIHByb3BlcnR5IHR5cGVzICovCitlbnVtIG9mcF9jb250cm9sbGVyX3N0YXR1c19wcm9wX3R5cGUgeworICAgIE9GUENTUFRfVVJJID0gMCwKKyAgICBPRlBDU1BUX0VYUEVSSU1FTlRFUiA9IDB4RkZGRiwKK307CisKKy8qIENvbW1vbiBoZWFkZXIgZm9yIGFsbCBDb250cm9sbGVyIFN0YXR1cyBQcm9wZXJ0aWVzICovCitzdHJ1Y3Qgb2ZfY29udHJvbGxlcl9zdGF0dXNfcHJvcCB7CisgICAgdWludDE2X3QgdHlwZSA9PSA/OworICAgIHVpbnQxNl90IGxlbmd0aDsKK307CisKK3N0cnVjdCBvZl9jb250cm9sbGVyX3N0YXR1c19lbnRyeSB7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQxNl90IHNob3J0X2lkOworICAgIGVudW0gb2ZwX2NvbnRyb2xsZXJfcm9sZSByb2xlOworICAgIGVudW0gb2ZwX2NvbnRyb2xsZXJfc3RhdHVzX3JlYXNvbiByZWFzb247CisgICAgZW51bSBvZnBfY29udHJvbF9jaGFubmVsX3N0YXR1cyBjaGFubmVsX3N0YXR1czsKKyAgICBwYWQoNik7CisgICAgbGlzdChvZl9jb250cm9sbGVyX3N0YXR1c19wcm9wX3QpIHByb3BlcnRpZXM7Cit9OworCisvKiBCb2R5IG9mIE9GUE1QX0NPTlRST0xMRVJfU1RBVFVTIHJlcGx5IG1lc3NhZ2UgYW5kIGJvZHkgb2YgYXN5bmMgT0ZQVF9DT05UUk9MTEVSX1NUQVRVUyBtZXNzYWdlICovCitzdHJ1Y3Qgb2ZfY29udHJvbGxlcl9zdGF0dXMgOiBvZl9oZWFkZXIgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMzU7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICBvZl9jb250cm9sbGVyX3N0YXR1c19lbnRyeV90IGVudHJ5OworfTsKKworLyogQ29ubmVjdGlvbiBVUkkgY29udHJvbGxlciBzdGF0dXMgcHJvcGVydHkgKi8KK3N0cnVjdCBvZnBfY29udHJvbGxlcl9zdGF0dXNfcHJvcF91cmkgOiBvZl9jb250cm9sbGVyX3N0YXR1c19wcm9wIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDA7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIG9mX2NvbnRyb2xsZXJfdXJpX3QgdXJpOworfTsKKworLyogRXhwZXJpbWVudGVyIGNvbnRyb2xsZXIgc3RhdHVzIHByb3BlcnR5ICovCitzdHJ1Y3Qgb2ZwX2NvbnRyb2xsZXJfc3RhdHVzX3Byb3BfZXhwZXJpbWVudGVyIDogb2ZfY29udHJvbGxlcl9zdGF0dXNfcHJvcCB7CisgICAgdWludDE2X3QgdHlwZSA9PSAweGZmZmY7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IGV4cGVyaW1lbnRlciA9PSA/OworICAgIHVpbnQzMl90IGV4cF90eXBlOworfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTUVTU0FHRVMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIENhcGFiaWxpdGllcyBzdXBwb3J0ZWQgYnkgdGhlIGRhdGFwYXRoLiAqLworZW51bSBvZnBfY2FwYWJpbGl0aWVzKHdpcmVfdHlwZT11aW50MzJfdCwgYml0bWFzaz1UcnVlKSB7CisgICAgT0ZQQ19GTE9XX1NUQVRTID0gMHgxLAorICAgIE9GUENfVEFCTEVfU1RBVFMgPSAweDIsCisgICAgT0ZQQ19QT1JUX1NUQVRTID0gMHg0LAorICAgIE9GUENfR1JPVVBfU1RBVFMgPSAweDgsCisgICAgT0ZQQ19JUF9SRUFTTSA9IDB4MjAsCisgICAgT0ZQQ19RVUVVRV9TVEFUUyA9IDB4NDAsCisgICAgT0ZQQ19QT1JUX0JMT0NLRUQgPSAweDEwMCwKKyAgICBPRlBDX0JVTkRMRVMgPSAweDIwMCwKKyAgICBPRlBDX0ZMT1dfTU9OSVRPUklORyA9IDB4NDAwLAorfTsKKworLyogSGFuZGxpbmcgb2YgSVAgZnJhZ21lbnRzLiAqLworZW51bSBvZnBfY29uZmlnX2ZsYWdzKHdpcmVfdHlwZT11aW50MTZfdCwgYml0bWFzaz1UcnVlKSB7CisgICAgT0ZQQ19GUkFHX05PUk1BTCA9IDAsCisgICAgT0ZQQ19GUkFHX0RST1AgPSAxLAorICAgIE9GUENfRlJBR19SRUFTTSA9IDIsCisgICAgT0ZQQ19GUkFHX01BU0sgPSAzLAorfTsKKworLyogVGFibGUgbnVtYmVyaW5nLiBUYWJsZXMgY2FuIHVzZSBhbnkgbnVtYmVyIHVwIHRvIE9GUFRfTUFYLiAqLworZW51bSBvZnBfdGFibGUod2lyZV90eXBlPXVpbnQ4X3QsIGNvbXBsZXRlPUZhbHNlKSB7CisgICAgT0ZQVFRfTUFYID0gMHhmZSwKKyAgICBPRlBUVF9BTEwgPSAweGZmLAorfTsKKworCisvKiBGbGFncyB0byBjb25maWd1cmUgdGhlIHRhYmxlLiAqLworZW51bSBvZnBfdGFibGVfY29uZmlnKHdpcmVfdHlwZT11aW50MzJfdCwgYml0bWFzaz1UcnVlKSB7CisgICAgT0ZQVENfREVQUkVDQVRFRF9NQVNLID0gMHgzLAorICAgIE9GUFRDX0VWSUNUSU9OID0gMHg0LAorICAgIE9GUFRDX1ZBQ0FOQ1lfRVZFTlRTID0gMHg4LAorfTsKKworLyogRXZpY3Rpb24gZmxhZ3MuICovCitlbnVtIG9mcF90YWJsZV9tb2RfcHJvcF9ldmljdGlvbl9mbGFnKHdpcmVfdHlwZT11aW50MzJfdCwgYml0bWFzaz1UcnVlKSB7CisgICAgT0ZQVE1QRUZfT1RIRVIgPSAweDEsCisgICAgT0ZQVE1QRUZfSU1QT1JUQU5DRSA9IDB4MiwKKyAgICBPRlBUTVBFRl9MSUZFVElNRSA9IDB4NCwKK307CisKKy8qIGZsb3cgbW9kIGNvbW1hbmQgKi8KK2VudW0gb2ZwX2Zsb3dfbW9kX2NvbW1hbmQod2lyZV90eXBlPXVpbnQ4X3QpIHsKKyAgICBPRlBGQ19BREQgPSAwLAorICAgIE9GUEZDX01PRElGWSA9IDEsCisgICAgT0ZQRkNfTU9ESUZZX1NUUklDVCA9IDIsCisgICAgT0ZQRkNfREVMRVRFID0gMywKKyAgICBPRlBGQ19ERUxFVEVfU1RSSUNUID0gNCwKK307CisKKy8qIGZsb3cgbW9kIGZsYWdzICovCitlbnVtIG9mcF9mbG93X21vZF9mbGFncyh3aXJlX3R5cGU9dWludDE2X3QsIGJpdG1hc2s9VHJ1ZSkgeworICAgIE9GUEZGX1NFTkRfRkxPV19SRU0gPSAweDEsCisgICAgT0ZQRkZfQ0hFQ0tfT1ZFUkxBUCA9IDB4MiwKKyAgICBPRlBGRl9SRVNFVF9DT1VOVFMgPSAweDQsCisgICAgT0ZQRkZfTk9fUEtUX0NPVU5UUyA9IDB4OCwKKyAgICBPRlBGRl9OT19CWVRfQ09VTlRTID0gMHgxMCwKKworICAgIC8qIE5vbi1zdGFuZGFyZCwgZW5hYmxlZCBieSBhbiBleHBlcmltZW50ZXIgbWVzc2FnZSAqLworICAgIC8qIFNlZSB0aGUgYnNuX2Zsb3dfaWRsZSBpbnB1dCBmaWxlICovCisgICAgT0ZQRkZfQlNOX1NFTkRfSURMRSA9IDB4ODAsCit9OworCisvKiBHcm91cCBjb21tYW5kcyAqLworZW51bSBvZnBfZ3JvdXBfbW9kX2NvbW1hbmQod2lyZV90eXBlPXVpbnQxNl90KSB7CisgICAgT0ZQR0NfQUREID0gMCwKKyAgICBPRlBHQ19NT0RJRlkgPSAxLAorICAgIE9GUEdDX0RFTEVURSA9IDIsCisgICAgT0ZQR0NfSU5TRVJUX0JVQ0tFVCA9IDMsCisgICAgT0ZQR0NfUkVNT1ZFX0JVQ0tFVCA9IDUsCit9OworCisvKiBHcm91cCB0eXBlcyAqLworZW51bSBvZnBfZ3JvdXBfdHlwZSh3aXJlX3R5cGU9dWludDhfdCkgeworICAgIE9GUEdUX0FMTCA9IDAsCisgICAgT0ZQR1RfU0VMRUNUID0gMSwKKyAgICBPRlBHVF9JTkRJUkVDVCA9IDIsCisgICAgT0ZQR1RfRkYgPSAzLAorfTsKKworLyogR3JvdXAgbnVtYmVyaW5nLiBHcm91cHMgY2FuIHVzZSBhbnkgbnVtYmVyIHVwIHRvIE9GUEdfTUFYLiAqLworZW51bSBvZnBfZ3JvdXAod2lyZV90eXBlPXVpbnQzMl90LCBjb21wbGV0ZT1GYWxzZSkgeworICAgIE9GUEdfTUFYID0gMHhmZmZmZmYwMCwKKyAgICBPRlBHX0FMTCA9IDB4ZmZmZmZmZmMsCisgICAgT0ZQR19BTlkgPSAweGZmZmZmZmZmLAorfTsKKworLyogQnVja2V0IElkIGNhbiBiZSBhbnkgdmFsdWUgYmV0d2VlbiAwIGFuZCBPRlBHX0JVQ0tFVF9NQVggKi8KK2VudW0gb2ZwX2dyb3VwX2J1Y2tldCh3aXJlX3R5cGU9dWludDMyX3QpIHsKKyAgICBPRlBHX0JVQ0tFVF9NQVggPSAweGZmZmZmZjAwLAorICAgIE9GUEdfQlVDS0VUX0ZJUlNUID0gMHhmZmZmZmZmZCwKKyAgICBPRlBHX0JVQ0tFVF9MQVNUID0gMHhmZmZmZmZmZSwKKyAgICBPRlBHX0JVQ0tFVF9BTEwgPSAweGZmZmZmZmZmLAorfTsKKworLyogR3JvdXAgYnVja2V0IHByb3BlcnR5IHR5cGVzLiAqLworZW51bSBvZnBfZ3JvdXBfYnVja2V0X3Byb3BfdHlwZSB7CisgICAgT0ZQR0JQVF9XRUlHSFQgPSAwLAorICAgIE9GUEdCUFRfV0FUQ0hfUE9SVCA9IDEsCisgICAgT0ZQR0JQVF9XQVRDSF9HUk9VUCA9IDIsCisgICAgT0ZQR0JQVF9FWFBFUklNRU5URVIgPSAweEZGRkYsCit9OworCisvKiBHcm91cCBwcm9wZXJ0eSB0eXBlcy4gKi8KK2VudW0gb2ZwX2dyb3VwX3Byb3BfdHlwZSB7CisgICAgT0ZQR1BUX0VYUEVSSU1FTlRFUiA9IDB4RkZGRiwKK307CisKKy8qIFBvcnQgbW9kIHByb3BlcnR5IHR5cGVzICovCitlbnVtIG9mcF9wb3J0X21vZF9wcm9wX3R5cGUgeworICAgIE9GUFBNUFRfRVRIRVJORVQgPSAwLAorICAgIE9GUFBNUFRfT1BUSUNBTCA9IDEsCisgICAgT0ZQUE1QVF9FWFBFUklNRU5URVIgPSAweEZGRkYsCit9OworCisvKiBNZXRlciBudW1iZXJpbmcuIEZsb3cgbWV0ZXJzIGNhbiB1c2UgYW55IG51bWJlciB1cCB0byBPRlBNX01BWC4gKi8KK2VudW0gb2ZwX21ldGVyKHdpcmVfdHlwZT11aW50MzJfdCwgY29tcGxldGU9RmFsc2UpIHsKKyAgICBPRlBNX01BWCA9IDB4ZmZmZjAwMDAsCisgICAgT0ZQTV9TTE9XUEFUSCA9IDB4ZmZmZmZmZmQsCisgICAgT0ZQTV9DT05UUk9MTEVSID0gMHhmZmZmZmZmZSwKKyAgICBPRlBNX0FMTCA9IDB4ZmZmZmZmZmYsCit9OworCisvKiBNZXRlciBjb21tYW5kcyAqLworZW51bSBvZnBfbWV0ZXJfbW9kX2NvbW1hbmQod2lyZV90eXBlPXVpbnQxNl90KSB7CisgICAgT0ZQTUNfQUREID0gMCwKKyAgICBPRlBNQ19NT0RJRlkgPSAxLAorICAgIE9GUE1DX0RFTEVURSA9IDIsCit9OworCisvKiBNZXRlciBjb25maWd1cmF0aW9uIGZsYWdzICovCitlbnVtIG9mcF9tZXRlcl9mbGFncyh3aXJlX3R5cGU9dWludDE2X3QsIGJpdG1hc2s9VHJ1ZSkgeworICAgIE9GUE1GX0tCUFMgPSAweDEsCisgICAgT0ZQTUZfUEtUUFMgPSAweDIsCisgICAgT0ZQTUZfQlVSU1QgPSAweDQsCisgICAgT0ZQTUZfU1RBVFMgPSAweDgsCit9OworCisvKiBNZXRlciBiYW5kIHR5cGVzICovCitlbnVtIG9mcF9tZXRlcl9iYW5kX3R5cGUod2lyZV90eXBlPXVpbnQxNl90KSB7CisgICAgT0ZQTUJUX0RST1AgPSAweDEsCisgICAgT0ZQTUJUX0RTQ1BfUkVNQVJLID0gMHgyLAorICAgIE9GUE1CVF9FWFBFUklNRU5URVIgPSAweGZmZmYsCit9OworCisvKiBNdWx0aXBhcnQgcmVxdWVzdCBmbGFncyAqLworZW51bSBvZnBfc3RhdHNfcmVxdWVzdF9mbGFncyh3aXJlX3R5cGU9dWludDE2X3QsIGJpdG1hc2s9VHJ1ZSkgeworICAgIE9GUFNGX1JFUV9NT1JFID0gMHgxLAorfTsKKworLyogTXVsdGlwYXJ0IHJlcGx5IGZsYWdzICovCitlbnVtIG9mcF9zdGF0c19yZXBseV9mbGFncyh3aXJlX3R5cGU9dWludDE2X3QsIGJpdG1hc2s9VHJ1ZSkgeworICAgIE9GUFNGX1JFUExZX01PUkUgPSAweDEsCit9OworCisvKiAKKyAqIE11bHRpcGFydCBNZXNzYWdlIFR5cGVzIAorICoKKyAqIE9GMS41IHJlbmFtZXMgdGhlIE9GUE1QL1NUIGZvcjoKKyAqIGZsb3cgKDEpIC0+IGZsb3dfZGVzYyAoMSkKKyAqIGFnZ3JlZ2F0ZSAoMikgLT4gYWdncmVnYXRlX3N0YXRzICgyKQorICogdGFibGUgKDMpIC0+IHRhYmxlX3N0YXRzICgzKQorICogZ3JvdXAgKDYpIC0+IGdyb3VwX3N0YXRzICg2KQorICogbWV0ZXIgKDkpIC0+IG1ldGVyX3N0YXRzICg5KQorICogbWV0ZXJfY29uZmlnICgxMCkgLT4gbWV0ZXJfZGVzYyAoMTApCisgKiAKKyAqIE9GMS40IHJlbmFtZWQ6CisgKiBxdWV1ZSAoNSkgLT4gcXVldWVfc3RhdHMgKDUpCisgKiB3aGljaCB3YXMgcmV0YWluZWQgYXMgInF1ZXVlIiBpbiBzdGFuZGFyZC0xLjQuCisgKgorICogVXNpbmcgZGlmZmVyZW50IG5hbWVzIGZvciB0aGUgc2FtZSBtZXNzYWdlCisgKiBpbiBMb3hpIGNhdXNlcyBkdXBsaWNhdGUgZW51bSBlbnRyaWVzIHRoYXQKKyAqIG1hcCB0byBlc3NlbnRpYWxseSB0aGUgc2FtZSB1bmRlcmx5aW5nIG1lc3NhZ2UuCisgKiBGb3Igc2ltcGxpY2l5LCB3ZSBjYW4gcmV0YWluIHRoZSBvcmlnaW5hbCwgCisgKiBPRjEuMy0sIG5hbWluZyBjb252ZW50aW9uIHRvIHJlZHVjZSBjb21wbGV4aXR5LgorICogVGhpcyBpcyB3aHkgT0YxLjQrIG9mcF9zdGF0c190eXBlIGVudW1zIGZyb20gCisgKiBPRjEuMy0gcmVtYWluIGFzIE9GUFNUXyogYW5kIGRvIG5vdCBhcHBlYXIgYXMKKyAqIE9GUE1QXyouCisgKgorICogVXNpbmcgdGhlIF9TVEFUUyBpcyBjZXJ0YWlubHkgbW9yZSBleHBsaWNpdDsgCisgKiBob3dldmVyLCB0aGF0IHdvdWxkIHBlcmhhcHMgbmVjZXNzaXRhdGUgY2hhbmdpbmcKKyAqIE9GMS4zLSBPRlBNUC9TVCBuYW1lcywgd2hpY2ggd291bGQgYnJlYWsgZXhpc3RpbmcKKyAqIGFwcGxpY2F0aW9ucyB0aGF0IHVzZSBPRjEuMy0gT0ZQTVAvU1QgbmFtZXMuCisgKi8KK2VudW0gb2ZwX3N0YXRzX3R5cGUod2lyZV90eXBlPXVpbnQxNl90KSB7CisgICAgT0ZQU1RfREVTQyA9IDAsCisgICAgT0ZQU1RfRkxPVyA9IDEsIC8qIG9taXQgX2Rlc2MgKi8KKyAgICBPRlBTVF9BR0dSRUdBVEUgPSAyLCAvKiBvbWl0IF9zdGF0cyAqLworICAgIE9GUFNUX1RBQkxFID0gMywgLyogb21pdCBfc3RhdHMgKi8KKyAgICBPRlBTVF9QT1JUID0gNCwgLyogb21pdCBfc3RhdHM7IGhpc3RvcmljYWxseSBvbWl0dGVkICovCisgICAgT0ZQU1RfUVVFVUUgPSA1LCAvKiBvbWl0IF9zdGF0cyAqLworICAgIE9GUFNUX0dST1VQID0gNiwgLyogb21pdCBfc3RhdHMgKi8KKyAgICBPRlBTVF9HUk9VUF9ERVNDID0gNywKKyAgICBPRlBTVF9HUk9VUF9GRUFUVVJFUyA9IDgsCisgICAgT0ZQU1RfTUVURVIgPSA5LCAvKiBvbWl0X3N0YXRzICovCisgICAgT0ZQU1RfTUVURVJfQ09ORklHID0gMTAsIC8qIHJldGFpbiBPRlBTVF8gcHJlZml4OyByZXRhaW4gX2NvbmZpZyAqLworICAgIE9GUFNUX01FVEVSX0ZFQVRVUkVTID0gMTEsCisgICAgT0ZQU1RfVEFCTEVfRkVBVFVSRVMgPSAxMiwKKyAgICBPRlBTVF9QT1JUX0RFU0MgPSAxMywKKyAgICBPRlBNUF9UQUJMRV9ERVNDID0gMTQsCisgICAgT0ZQTVBfUVVFVUVfREVTQyA9IDE1LAorICAgIE9GUE1QX0ZMT1dfTU9OSVRPUiA9IDE2LAorICAgIE9GUE1QX0ZMT1dfTElHSFRXRUlHSFQgPSAxNywgLyogb21pdCBfc3RhdHM7IHVzZSBfbGlnaHR3ZWlnaHQgdG8gaW1wbHkgbm8gZGVzYyBpbmNsdWRlZCAqLworICAgIE9GUE1QX0NPTlRST0xMRVJfU1RBVFVTID0gMTgsCisgICAgT0ZQTVBfQlVORExFX0ZFQVRVUkVTID0gMTksCisgICAgT0ZQU1RfRVhQRVJJTUVOVEVSID0gMHhmZmZmLAorfTsKKworLyogUmVhc29uIGZvciBnZW5lcmF0aW5nIGZsb3cgc3RhdHMuICovCitlbnVtIG9mcF9mbG93X3N0YXRzX3JlYXNvbih3aXJlX3R5cGU9dWludDhfdCkgeworICAgIE9GUEZTUl9TVEFUU19SRVFVRVNUID0gMCwKKyAgICBPRlBGU1JfU1RBVF9UUklHR0VSID0gMSwKK307CisKKy8qIFBvcnQgc3RhdHMgcHJvcGVydHkgdHlwZXMuICAqLworZW51bSBvZnBfcG9ydF9zdGF0c19wcm9wX3R5cGUod2lyZV90eXBlPXVpbnQxNl90KSB7CisgICAgT0ZQUFNQVF9FVEhFUk5FVCAgICAgICAgICA9IDAsICAgICAgLyogRXRoZXJuZXQgcHJvcGVydHkuICovCisgICAgT0ZQUFNQVF9PUFRJQ0FMICAgICAgICAgICA9IDEsICAgICAgLyogT3B0aWNhbCBwcm9wZXJ0eS4gKi8KKyAgICBPRlBQU1BUX0VYUEVSSU1FTlRFUiAgICAgID0gMHhGRkZGLCAvKiBFeHBlcmltZW50ZXIgcHJvcGVydHkuICovCit9OworCisvKiBGbGFncyBpcyBvbmUgb2YgT0ZQT1NGXyBiZWxvdyAqLworZW51bSBvZnBfcG9ydF9zdGF0c19vcHRpY2FsX2ZsYWdzKHdpcmVfdHlwZT11aW50MzJfdCwgYml0bWFzaz1UcnVlKSB7CisgICAgT0ZQT1NGX1JYX1RVTkUgPSAweDEsCisgICAgT0ZQT1NGX1RYX1RVTkUgPSAweDIsCisgICAgT0ZQT1NGX1RYX1BXUiA9IDB4NCwKKyAgICBPRlBPU0ZfUlhfUFdSID0gMHgxMCwKKyAgICBPRlBPU0ZfVFhfQklBUyA9IDB4MjAsCisgICAgT0ZQT1NGX1RYX1RFTVAgPSAweDQwLAorfTsKKworLyogcXVldWUgc3RhdGlzdGljcyBwcm9wZXJ0eSB0eXBlcyAqLworZW51bSBvZnBfcXVldWVfc3RhdHNfcHJvcF90eXBlIHsKKyAgICBPRlBRU1BUX0VYUEVSSU1FTlRFUiA9IDB4ZmZmZgorfTsKKworLyogcXVldWUgZGVzY3JpcHRpb24gcHJvcGVydHkgdHlwZXMgKi8KK2VudW0gb2ZwX3F1ZXVlX2Rlc2NfcHJvcF90eXBlIHsKKyAgICBPRlBRRFBUX01JTl9SQVRFID0gMSwKKyAgICBPRlBRRFBUX01BWF9SQVRFID0gMiwKKyAgICBPRlBRRFBUX0VYUEVSSU1FTlRFUiA9IDB4ZmZmZiwKK307CisKKy8qIEdyb3VwIGNvbmZpZ3VyYXRpb24gZmxhZ3MgKi8KK2VudW0gb2ZwX2dyb3VwX2NhcGFiaWxpdGllcyh3aXJlX3R5cGU9dWludDMyX3QsIGJpdG1hc2s9VHJ1ZSkgeworICAgIE9GUEdGQ19TRUxFQ1RfV0VJR0hUID0gMHgxLAorICAgIE9GUEdGQ19TRUxFQ1RfTElWRU5FU1MgPSAweDIsCisgICAgT0ZQR0ZDX0NIQUlOSU5HID0gMHg0LAorICAgIE9GUEdGQ19DSEFJTklOR19DSEVDS1MgPSAweDgsCit9OworCisvKiBNZXRlciBmZWF0dXJlIGZsYWdzICovCitlbnVtIG9mcF9tZXRlcl9mZWF0dXJlX2ZsYWdzKHdpcmVfdHlwZT11aW50MzJfdCwgYml0bWFzaz1UcnVlKSB7CisgICAgT0ZQTUZGX0FDVElPTl9TRVQgPSAweDEsCisgICAgT0ZQTUZGX0FOWV9QT1NJVElPTiA9IDB4MiwKKyAgICBPRlBNRkZfTVVMVElfTElTVCA9IDB4NCwKK307CisKKy8qIFRhYmxlIEZlYXR1cmVzIHJlcXVlc3QgY29tbWFuZHMgKi8KK2VudW0gb2ZwX3RhYmxlX2ZlYXR1cmVzX2NvbW1hbmQod2lyZV90eXBlPXVpbnQ4X3QpIHsKKyAgICBPRlBURkNfUkVQTEFDRSA9IDAsCisgICAgT0ZQVEZDX01PRElGWSA9IDEsCisgICAgT0ZQVEZDX0VOQUJMRSA9IDIsCisgICAgT0ZQVEZDX0RJU0FCTEUgPSAzLAorfTsKKworLyogRmxhZ3Mgb2YgZmVhdHVyZXMgc3VwcG9ydGVkIGJ5IHRoZSB0YWJsZS4gKi8KK2VudW0gb2ZwX3RhYmxlX2ZlYXR1cmVfZmxhZyAod2lyZV90eXBlPXVpbnQzMl90LCBiaXRtYXNrPVRydWUpIHsKKyAgICBPRlBURkZfSU5HUkVTU19UQUJMRSA9IDB4MSwKKyAgICBPRlBURkZfRUdSRVNTX1RBQkxFID0gMHgyLAorICAgIE9GUFRGRl9GSVJTVF9FR1JFU1MgPSAweDEwLAorfTsKKworLyogVGFibGUgRmVhdHVyZSBwcm9wZXJ0eSB0eXBlcy4gKi8KK2VudW0gb2ZwX3RhYmxlX2ZlYXR1cmVfcHJvcF90eXBlKHdpcmVfdHlwZT11aW50MTZfdCkgeworICAgIE9GUFRGUFRfSU5TVFJVQ1RJT05TID0gMCwKKyAgICBPRlBURlBUX0lOU1RSVUNUSU9OU19NSVNTID0gMSwKKyAgICBPRlBURlBUX05FWFRfVEFCTEVTID0gMiwKKyAgICBPRlBURlBUX05FWFRfVEFCTEVTX01JU1MgPSAzLAorICAgIE9GUFRGUFRfV1JJVEVfQUNUSU9OUyA9IDQsCisgICAgT0ZQVEZQVF9XUklURV9BQ1RJT05TX01JU1MgPSA1LAorICAgIE9GUFRGUFRfQVBQTFlfQUNUSU9OUyA9IDYsCisgICAgT0ZQVEZQVF9BUFBMWV9BQ1RJT05TX01JU1MgPSA3LAorICAgIE9GUFRGUFRfTUFUQ0ggPSA4LAorICAgIE9GUFRGUFRfV0lMRENBUkRTID0gMHhhLAorICAgIE9GUFRGUFRfV1JJVEVfU0VURklFTEQgPSAweGMsCisgICAgT0ZQVEZQVF9XUklURV9TRVRGSUVMRF9NSVNTID0gMHhkLAorICAgIE9GUFRGUFRfQVBQTFlfU0VURklFTEQgPSAweGUsCisgICAgT0ZQVEZQVF9BUFBMWV9TRVRGSUVMRF9NSVNTID0gMHhmLAorICAgIE9GUFRGUFRfVEFCTEVfU1lOQ19GUk9NID0gMHgxMCwKKyAgICBPRlBURlBUX1dSSVRFX0NPUFlGSUVMRCA9IDE4LAorICAgIE9GUFRGUFRfV1JJVEVfQ09QWUZJRUxEX01JU1MgPSAxOSwKKyAgICBPRlBURlBUX0FQUExZX0NPUFlGSUVMRCA9IDIwLAorICAgIE9GUFRGUFRfQVBQTFlfQ09QWUZJRUxEX01JU1MgPSAyMSwKKyAgICBPRlBURlBUX1BBQ0tFVF9UWVBFUyA9IDIyLAorICAgIE9GUFRGUFRfRVhQRVJJTUVOVEVSID0gMHhmZmZlLAorICAgIE9GUFRGUFRfRVhQRVJJTUVOVEVSX01JU1MgPSAweGZmZmYsCit9OworCisvKiBUYWJsZSBNb2QgcHJvcGVydHkgdHlwZXMuKi8KK2VudW0gb2ZwX3RhYmxlX21vZF9wcm9wX3R5cGUgeworICAgIE9GUFRNUFRfRVZJQ1RJT04gPSAweDIsCisgICAgT0ZQVE1QVF9WQUNBTkNZID0gMHgzLAorICAgIE9GUFRNUFRfRVhQRVJJTUVOVEVSID0gMHhGRkZGLAorfTsKKworCisvKiBjb250cm9sbGVyIHJvbGVzICovCitlbnVtIG9mcF9jb250cm9sbGVyX3JvbGUod2lyZV90eXBlPXVpbnQzMl90KSB7CisgICAgT0ZQQ1JfUk9MRV9OT0NIQU5HRSA9IDAsCisgICAgT0ZQQ1JfUk9MRV9FUVVBTCA9IDEsCisgICAgT0ZQQ1JfUk9MRV9NQVNURVIgPSAyLAorICAgIE9GUENSX1JPTEVfU0xBVkUgPSAzLAorfTsKKworLyogQnVuZGxlIGNvbnRyb2wgbWVzc2FnZSB0eXBlcyAqLworZW51bSBvZnBfYnVuZGxlX2N0cmxfdHlwZSh3aXJlX3R5cGU9dWludDE2X3QpIHsKKyAgICBPRlBCQ1RfT1BFTl9SRVFVRVNUID0gMCwKKyAgICBPRlBCQ1RfT1BFTl9SRVBMWSA9IDEsCisgICAgT0ZQQkNUX0NMT1NFX1JFUVVFU1QgPSAyLAorICAgIE9GUEJDVF9DTE9TRV9SRVBMWSA9IDMsCisgICAgT0ZQQkNUX0NPTU1JVF9SRVFVRVNUID0gNCwKKyAgICBPRlBCQ1RfQ09NTUlUX1JFUExZID0gNSwKKyAgICBPRlBCQ1RfRElTQ0FSRF9SRVFVRVNUID0gNiwKKyAgICBPRlBCQ1RfRElTQ0FSRF9SRVBMWSA9IDcsCit9OworCisvKiBCdW5kbGUgY29uZmlndXJhdGlvbiBmbGFncy4gKi8KK2VudW0gb2ZwX2J1bmRsZV9mbGFncyh3aXJlX3R5cGU9dWludDE2X3QsIGJpdG1hc2s9VHJ1ZSkgeworICAgIE9GUEJGX0FUT01JQyA9IDEsCisgICAgT0ZQQkZfT1JERVJFRCA9IDIsCisgICAgT0ZQQkZfVElNRSA9IDQsCit9OworCisvKiBCdW5kbGUgZmVhdHVyZXMgcHJvcGVydHkgdHlwZXMuICovCitlbnVtIG9mcF9idW5kbGVfZmVhdHVyZXNfcHJvcF90eXBlIHsKKyAgICBPRlBUTVBCRl9USU1FX0NBUEFCSUxJVFkgPSAweDEsCisgICAgT0ZQVE1QQkZfRVhQRVJJTUVOVEVSID0gMHhGRkZGLAorfTsKKworCisvKiBCdW5kbGUgcHJvcGVydHkgdHlwZXMuICovCitlbnVtIG9mcF9idW5kbGVfcHJvcF90eXBlIHsKKyAgICBPRlBCUFRfVElNRSA9IDEsCisgICAgT0ZQQlBUX0VYUEVSSU1FTlRFUiA9IDB4RkZGRiwKK307CisKKworLyogQXN5bmMgQ29uZmlnIHByb3BlcnR5IHR5cGVzLiovCitlbnVtIG9mcF9hc3luY19jb25maWdfcHJvcF90eXBlIHsKKyAgICBPRlBBQ1BUX1BBQ0tFVF9JTl9TTEFWRSA9IDAsCisgICAgT0ZQQUNQVF9QQUNLRVRfSU5fTUFTVEVSID0gMSwKKyAgICBPRlBBQ1BUX1BPUlRfU1RBVFVTX1NMQVZFID0gMiwKKyAgICBPRlBBQ1BUX1BPUlRfU1RBVFVTX01BU1RFUiA9IDMsCisgICAgT0ZQQUNQVF9GTE9XX1JFTU9WRURfU0xBVkUgPSA0LAorICAgIE9GUEFDUFRfRkxPV19SRU1PVkVEX01BU1RFUiA9IDUsCisgICAgT0ZQQUNQVF9ST0xFX1NUQVRVU19TTEFWRSA9IDYsCisgICAgT0ZQQUNQVF9ST0xFX1NUQVRVU19NQVNURVIgPSA3LAorICAgIE9GUEFDUFRfVEFCTEVfU1RBVFVTX1NMQVZFID0gOCwKKyAgICBPRlBBQ1BUX1RBQkxFX1NUQVRVU19NQVNURVIgPSA5LAorICAgIE9GUEFDUFRfUkVRVUVTVEZPUldBUkRfU0xBVkUgPSAxMCwKKyAgICBPRlBBQ1BUX1JFUVVFU1RGT1JXQVJEX01BU1RFUiA9IDExLAorICAgIE9GUEFDUFRfRkxPV19TVEFUU19TTEFWRSA9IDEyLAorICAgIE9GUEFDUFRfRkxPV19TVEFUU19NQVNURVIgPSAxMywKKyAgICBPRlBBQ1BUX0NPTlRfU1RBVFVTX1NMQVZFID0gMTQsCisgICAgT0ZQQUNQVF9DT05UX1NUQVRVU19NQVNURVIgPSAxNSwKKyAgICBPRlBBQ1BUX0VYUEVSSU1FTlRFUl9TTEFWRSA9IDB4RkZGRSwKKyAgICBPRlBBQ1BUX0VYUEVSSU1FTlRFUl9NQVNURVIgPSAweEZGRkYsCit9OworCisvKiBXaHkgaXMgdGhpcyBwYWNrZXQgYmVpbmcgc2VudCB0byB0aGUgY29udHJvbGxlcj8gKi8KK2VudW0gb2ZwX3BhY2tldF9pbl9yZWFzb24od2lyZV90eXBlPXVpbnQ4X3QpIHsKKyAgICBPRlBSX05PX01BVENIID0gMCwKKyAgICBPRlBSX0FDVElPTiA9IDEsCisgICAgT0ZQUl9JTlZBTElEX1RUTCA9IDIsCisgICAgT0ZQUl9BQ1RJT05fU0VUID0gMywKKyAgICBPRlBSX0dST1VQID0gNCwKKyAgICBPRlBSX1BBQ0tFVF9PVVQgPSA1LAorCisgICAgLy8gbm9uLXN0YW5kYXJkIEJTTiBleHRlbnNpb25zLiBPRiBkb2VzIG5vdCBoYXZlIGEgc3RhbmRhcmQtY29uZm9ybWFudAorICAgIC8vIHdheSB0byBleHRlbmQgdGhlIHNldCBvZiBwYWNrZXRfaW4gcmVhc29ucworICAgIE9GUFJfQlNOX05FV19IT1NUID0gMTI4LAorICAgIE9GUFJfQlNOX1NUQVRJT05fTU9WRSA9IDEyOSwKKyAgICBPRlBSX0JTTl9CQURfVkxBTiA9IDEzMCwKKyAgICBPRlBSX0JTTl9ERVNUSU5BVElPTl9MT09LVVBfRkFJTFVSRSA9IDEzMSwKKyAgICBPRlBSX0JTTl9OT19ST1VURSA9IDEzMiwKKyAgICBPRlBSX0JTTl9JQ01QX0VDSE9fUkVRVUVTVCA9IDEzMywKKyAgICBPRlBSX0JTTl9ERVNUX05FVFdPUktfVU5SRUFDSEFCTEUgPSAxMzQsCisgICAgT0ZQUl9CU05fREVTVF9IT1NUX1VOUkVBQ0hBQkxFID0gMTM1LAorICAgIE9GUFJfQlNOX0RFU1RfUE9SVF9VTlJFQUNIQUJMRSA9IDEzNiwKKyAgICBPRlBSX0JTTl9GUkFHTUVOVEFUSU9OX1JFUVVJUkVEID0gMTM3LAorICAgIE9GUFJfQlNOX0FSUCA9IDEzOSwKKyAgICBPRlBSX0JTTl9ESENQID0gMTQwLAorICAgIE9GUFJfQlNOX0RFQlVHID0gMTQxLAorICAgIE9GUFJfQlNOX1BBQ0tFVF9PRl9ERUFUSCA9IDE0MiwKK307CisKKy8qIFdoeSB3YXMgdGhpcyBmbG93IHJlbW92ZWQ/ICovCitlbnVtIG9mcF9mbG93X3JlbW92ZWRfcmVhc29uKHdpcmVfdHlwZT11aW50OF90KSB7CisgICAgT0ZQUlJfSURMRV9USU1FT1VUID0gMCwKKyAgICBPRlBSUl9IQVJEX1RJTUVPVVQgPSAxLAorICAgIE9GUFJSX0RFTEVURSA9IDIsCisgICAgT0ZQUlJfR1JPVVBfREVMRVRFID0gMywKKyAgICBPRlBSUl9NRVRFUl9ERUxFVEUgPSA0LAorICAgIE9GUFJSX0VWSUNUSU9OID0gNSwKK307CisKKy8qIFdoYXQgY2hhbmdlZCBhYm91dCB0aGUgcGh5c2ljYWwgcG9ydCAqLworZW51bSBvZnBfcG9ydF9yZWFzb24od2lyZV90eXBlPXVpbnQ4X3QpIHsKKyAgICBPRlBQUl9BREQgPSAwLAorICAgIE9GUFBSX0RFTEVURSA9IDEsCisgICAgT0ZQUFJfTU9ESUZZID0gMiwKK307CisKKy8qIFdoYXQgY2hhbmdlZCBhYm91dCB0aGUgY29udHJvbGxlciByb2xlICovCitlbnVtIG9mcF9jb250cm9sbGVyX3JvbGVfcmVhc29uKHdpcmVfdHlwZT11aW50OF90KSB7CisgICAgT0ZQQ1JSX01BU1RFUl9SRVFVRVNUID0gMCwKKyAgICBPRlBDUlJfQ09ORklHID0gMSwKKyAgICBPRlBDUlJfRVhQRVJJTUVOVEVSID0gMiwKK307CisKKy8qIFJvbGUgcHJvcGVydHkgdHlwZXMuKi8KK2VudW0gb2ZwX3JvbGVfcHJvcF90eXBlIHsKKyAgICBPRlBSUFRfRVhQRVJJTUVOVEVSID0gMHhGRkZGLAorfTsKKworLyogV2hhdCBjaGFuZ2VkIGFib3V0IHRoZSB0YWJsZSAqLworZW51bSBvZnBfdGFibGVfcmVhc29uKHdpcmVfdHlwZT11aW50OF90KSB7CisgICAgT0ZQVFJfVkFDQU5DWV9ET1dOID0gMywKKyAgICBPRlBUUl9WQUNBTkNZX1VQID0gNCwKK307CisKKy8qIFJlcXVlc3QgZm9yd2FyZCByZWFzb24gKi8KK2VudW0gb2ZwX3JlcXVlc3Rmb3J3YXJkX3JlYXNvbiB7CisgICAgT0ZQUkZSX0dST1VQX01PRCA9IDAsCisgICAgT0ZQUkZSX01FVEVSX01PRCA9IDEsCit9OworCisvKiBIZWxsbyBlbGVtZW50cyB0eXBlcy4gKi8KK2VudW0gb2ZwX2hlbGxvX2VsZW1fdHlwZSh3aXJlX3R5cGU9dWludDE2X3QpIHsKKyAgICBPRlBIRVRfVkVSU0lPTkJJVE1BUCA9IDEsCit9OworCisvKiBWYWx1ZXMgZm9yIJJ0eXBlkiBpbiBvZnBfZXJyb3JfbWVzc2FnZSAqLworZW51bSBvZnBfZXJyb3JfdHlwZSh3aXJlX3R5cGU9dWludDE2X3QpIHsKKyAgICBPRlBFVF9IRUxMT19GQUlMRUQgPSAwLAorICAgIE9GUEVUX0JBRF9SRVFVRVNUID0gMSwKKyAgICBPRlBFVF9CQURfQUNUSU9OID0gMiwKKyAgICBPRlBFVF9CQURfSU5TVFJVQ1RJT04gPSAzLAorICAgIE9GUEVUX0JBRF9NQVRDSCA9IDQsCisgICAgT0ZQRVRfRkxPV19NT0RfRkFJTEVEID0gNSwKKyAgICBPRlBFVF9HUk9VUF9NT0RfRkFJTEVEID0gNiwKKyAgICBPRlBFVF9QT1JUX01PRF9GQUlMRUQgPSA3LAorICAgIE9GUEVUX1RBQkxFX01PRF9GQUlMRUQgPSA4LAorICAgIE9GUEVUX1FVRVVFX09QX0ZBSUxFRCA9IDksCisgICAgT0ZQRVRfU1dJVENIX0NPTkZJR19GQUlMRUQgPSAxMCwKKyAgICBPRlBFVF9ST0xFX1JFUVVFU1RfRkFJTEVEID0gMTEsCisgICAgT0ZQRVRfTUVURVJfTU9EX0ZBSUxFRCA9IDEyLAorICAgIE9GUEVUX1RBQkxFX0ZFQVRVUkVTX0ZBSUxFRCA9IDEzLAorICAgIE9GUEVUX0JBRF9QUk9QRVJUWSA9IDE0LAorICAgIE9GUEVUX0FTWU5DX0NPTkZJR19GQUlMRUQgPSAxNSwKKyAgICBPRlBFVF9GTE9XX01PTklUT1JfRkFJTEVEID0gMTYsCisgICAgT0ZQRVRfQlVORExFX0ZBSUxFRCA9IDE3LAorICAgIE9GUEVUX0VYUEVSSU1FTlRFUiA9IDB4ZmZmZiwKK307CisKKy8qIG9mcF9lcnJvcl9tc2cgkmNvZGWSIHZhbHVlcyBmb3IgT0ZQRVRfSEVMTE9fRkFJTEVEICovCitlbnVtIG9mcF9oZWxsb19mYWlsZWRfY29kZSh3aXJlX3R5cGU9dWludDE2X3QpIHsKKyAgICBPRlBIRkNfSU5DT01QQVRJQkxFID0gMCwKKyAgICBPRlBIRkNfRVBFUk0gPSAxLAorfTsKKworLyogb2ZwX2Vycm9yX21zZyCSY29kZZIgdmFsdWVzIGZvciBPRlBFVF9CQURfUkVRVUVTVC4gKi8KK2VudW0gb2ZwX2JhZF9yZXF1ZXN0X2NvZGUod2lyZV90eXBlPXVpbnQxNl90KSB7CisgICAgT0ZQQlJDX0JBRF9WRVJTSU9OID0gMCwKKyAgICBPRlBCUkNfQkFEX1RZUEUgPSAxLAorICAgIE9GUEJSQ19CQURfU1RBVCA9IDIsCisgICAgT0ZQQlJDX0JBRF9FWFBFUklNRU5URVIgPSAzLAorICAgIE9GUEJSQ19CQURfRVhQRVJJTUVOVEVSX1RZUEUgPSA0LAorICAgIE9GUEJSQ19FUEVSTSA9IDUsCisgICAgT0ZQQlJDX0JBRF9MRU4gPSA2LAorICAgIE9GUEJSQ19CVUZGRVJfRU1QVFkgPSA3LAorICAgIE9GUEJSQ19CVUZGRVJfVU5LTk9XTiA9IDgsCisgICAgT0ZQQlJDX0JBRF9UQUJMRV9JRCA9IDksCisgICAgT0ZQQlJDX0lTX1NMQVZFID0gMTAsCisgICAgT0ZQQlJDX0JBRF9QT1JUID0gMTEsCisgICAgT0ZQQlJDX0JBRF9QQUNLRVQgPSAxMiwKKyAgICBPRlBCUkNfTVVMVElQQVJUX0JVRkZFUl9PVkVSRkxPVyA9IDEzLAorICAgIE9GUEJSQ19NVUxUSVBBUlRfUkVRVUVTVF9USU1FT1VUID0gMTQsCisgICAgT0ZQQlJDX01VTFRJUEFSVF9SRVBMWV9USU1FT1VUID0gMTUsCisgICAgT0ZQQlJDX01VTFRJUEFSVF9CQURfU0NIRUQgPSAxNiwKKyAgICBPRlBCUkNfUElQRUxJTkVfRklFTERTX09OTFkgPSAxNywKKyAgICBPRlBCUkNfVU5LTk9XTiA9IDE4LAorfTsKKworLyogb2ZwX2Vycm9yX21zZyCSY29kZZIgdmFsdWVzIGZvciBPRlBFVF9CQURfQUNUSU9OLiAqLworZW51bSBvZnBfYmFkX2FjdGlvbl9jb2RlKHdpcmVfdHlwZT11aW50MTZfdCkgeworICAgIE9GUEJBQ19CQURfVFlQRSA9IDAsCisgICAgT0ZQQkFDX0JBRF9MRU4gPSAxLAorICAgIE9GUEJBQ19CQURfRVhQRVJJTUVOVEVSID0gMiwKKyAgICBPRlBCQUNfQkFEX0VYUEVSSU1FTlRFUl9UWVBFID0gMywKKyAgICBPRlBCQUNfQkFEX09VVF9QT1JUID0gNCwKKyAgICBPRlBCQUNfQkFEX0FSR1VNRU5UID0gNSwKKyAgICBPRlBCQUNfRVBFUk0gPSA2LAorICAgIE9GUEJBQ19UT09fTUFOWSA9IDcsCisgICAgT0ZQQkFDX0JBRF9RVUVVRSA9IDgsCisgICAgT0ZQQkFDX0JBRF9PVVRfR1JPVVAgPSA5LAorICAgIE9GUEJBQ19NQVRDSF9JTkNPTlNJU1RFTlQgPSAxMCwKKyAgICBPRlBCQUNfVU5TVVBQT1JURURfT1JERVIgPSAxMSwKKyAgICBPRlBCQUNfQkFEX1RBRyA9IDEyLAorICAgIE9GUEJBQ19CQURfU0VUX1RZUEUgPSAxMywKKyAgICBPRlBCQUNfQkFEX1NFVF9MRU4gPSAxNCwKKyAgICBPRlBCQUNfQkFEX1NFVF9BUkdVTUVOVCA9IDE1LAorICAgIE9GUEJBQ19CQURfU0VUX01BU0sgPSAxNiwKKyAgICBPRlBCQUNfQkFEX01FVEVSID0gMTcsCit9OworCisvKiBvZnBfZXJyb3JfbXNnIJJjb2RlkiB2YWx1ZXMgZm9yIE9GUEVUX0JBRF9JTlNUUlVDVElPTi4gKi8KK2VudW0gb2ZwX2JhZF9pbnN0cnVjdGlvbl9jb2RlKHdpcmVfdHlwZT11aW50MTZfdCkgeworICAgIE9GUEJJQ19VTktOT1dOX0lOU1QgPSAwLAorICAgIE9GUEJJQ19VTlNVUF9JTlNUID0gMSwKKyAgICBPRlBCSUNfQkFEX1RBQkxFX0lEID0gMiwKKyAgICBPRlBCSUNfVU5TVVBfTUVUQURBVEEgPSAzLAorICAgIE9GUEJJQ19VTlNVUF9NRVRBREFUQV9NQVNLID0gNCwKKyAgICBPRlBCSUNfQkFEX0VYUEVSSU1FTlRFUiA9IDUsCisgICAgT0ZQQklDX0JBRF9FWFBFUklNRU5URVJfVFlQRSA9IDYsCisgICAgT0ZQQklDX0JBRF9MRU4gPSA3LAorICAgIE9GUEJJQ19FUEVSTSA9IDgsCisgICAgT0ZQQklDX0RVUF9JTlNUID0gOSwKK307CisKKy8qIG9mcF9lcnJvcl9tc2cgkmNvZGWSIHZhbHVlcyBmb3IgT0ZQRVRfQkFEX01BVENILiAqLworZW51bSBvZnBfYmFkX21hdGNoX2NvZGUod2lyZV90eXBlPXVpbnQxNl90KSB7CisgICAgT0ZQQk1DX0JBRF9UWVBFID0gMCwKKyAgICBPRlBCTUNfQkFEX0xFTiA9IDEsCisgICAgT0ZQQk1DX0JBRF9UQUcgPSAyLAorICAgIE9GUEJNQ19CQURfRExfQUREUl9NQVNLID0gMywKKyAgICBPRlBCTUNfQkFEX05XX0FERFJfTUFTSyA9IDQsCisgICAgT0ZQQk1DX0JBRF9XSUxEQ0FSRFMgPSA1LAorICAgIE9GUEJNQ19CQURfRklFTEQgPSA2LAorICAgIE9GUEJNQ19CQURfVkFMVUUgPSA3LAorICAgIE9GUEJNQ19CQURfTUFTSyA9IDgsCisgICAgT0ZQQk1DX0JBRF9QUkVSRVEgPSA5LAorICAgIE9GUEJNQ19EVVBfRklFTEQgPSAxMCwKKyAgICBPRlBCTUNfRVBFUk0gPSAxMSwKK307CisKKy8qIG9mcF9lcnJvcl9tc2cgkmNvZGWSIHZhbHVlcyBmb3IgT0ZQRVRfRkxPV19NT0RfRkFJTEVELiAqLworZW51bSBvZnBfZmxvd19tb2RfZmFpbGVkX2NvZGUod2lyZV90eXBlPXVpbnQxNl90KSB7CisgICAgT0ZQRk1GQ19VTktOT1dOID0gMCwKKyAgICBPRlBGTUZDX1RBQkxFX0ZVTEwgPSAxLAorICAgIE9GUEZNRkNfQkFEX1RBQkxFX0lEID0gMiwKKyAgICBPRlBGTUZDX09WRVJMQVAgPSAzLAorICAgIE9GUEZNRkNfRVBFUk0gPSA0LAorICAgIE9GUEZNRkNfQkFEX1RJTUVPVVQgPSA1LAorICAgIE9GUEZNRkNfQkFEX0NPTU1BTkQgPSA2LAorICAgIE9GUEZNRkNfQkFEX0ZMQUdTID0gNywKKyAgICBPRlBGTUZDX0NBTlRfU1lOQyA9IDgsCisgICAgT0ZQRk1GQ19CQURfUFJJT1JJVFkgPSA5LAorICAgIE9GUEZNRkNfSVNfU1lOQyA9IDEwLAorfTsKKworLyogkmZsYWdzkiBiaXRzIGluIHN0cnVjdCBvZl9mbG93X21vbml0b3JfcmVxdWVzdC4gKi8KK2VudW0gb2ZwX2Zsb3dfbW9uaXRvcl9mbGFncyAod2lyZV90eXBlPXVpbnQxNl90LCBiaXRtYXNrPVRydWUpeworICAgIE9GUEZNRl9JTklUSUFMID0gMHgxLAorICAgIE9GUEZNRl9BREQgPSAweDIsCisgICAgT0ZQRk1GX1JFTU9WRUQgPSAweDQsCisgICAgT0ZQRk1GX01PRElGWSA9IDB4OCwKKyAgICBPRlBGTUZfSU5TVFJVQ1RJT05TID0gMHgxMCwKKyAgICBPRlBGTUZfTk9fQUJCUkVWID0gMHgyMCwKKyAgICBPRlBGTUZfT05MWV9PV04gPSAweDQwLAorfTsKKworLyogb2ZwX2Vycm9yX21zZyCSY29kZZIgdmFsdWVzIGZvciBPRlBFVF9HUk9VUF9NT0RfRkFJTEVELiAqLworZW51bSBvZnBfZ3JvdXBfbW9kX2ZhaWxlZF9jb2RlKHdpcmVfdHlwZT11aW50MTZfdCkgeworICAgIE9GUEdNRkNfR1JPVVBfRVhJU1RTID0gMCwKKyAgICBPRlBHTUZDX0lOVkFMSURfR1JPVVAgPSAxLAorICAgIE9GUEdNRkNfV0VJR0hUX1VOU1VQUE9SVEVEID0gMiwKKyAgICBPRlBHTUZDX09VVF9PRl9HUk9VUFMgPSAzLAorICAgIE9GUEdNRkNfT1VUX09GX0JVQ0tFVFMgPSA0LAorICAgIE9GUEdNRkNfQ0hBSU5JTkdfVU5TVVBQT1JURUQgPSA1LAorICAgIE9GUEdNRkNfV0FUQ0hfVU5TVVBQT1JURUQgPSA2LAorICAgIE9GUEdNRkNfTE9PUCA9IDcsCisgICAgT0ZQR01GQ19VTktOT1dOX0dST1VQID0gOCwKKyAgICBPRlBHTUZDX0NIQUlORURfR1JPVVAgPSA5LAorICAgIE9GUEdNRkNfQkFEX1RZUEUgPSAxMCwKKyAgICBPRlBHTUZDX0JBRF9DT01NQU5EID0gMTEsCisgICAgT0ZQR01GQ19CQURfQlVDS0VUID0gMTIsCisgICAgT0ZQR01GQ19CQURfV0FUQ0ggPSAxMywKKyAgICBPRlBHTUZDX0VQRVJNID0gMTQsCisgICAgT0ZQR01GQ19VTktOT1dOX0JVQ0tFVCA9IDE1LAorICAgIE9GUEdNRkNfQlVDS0VUX0VYSVNUUyA9IDE2LAorfTsKKworLyogb2ZwX2Vycm9yX21zZyCSY29kZZIgdmFsdWVzIGZvciBPRlBFVF9QT1JUX01PRF9GQUlMRUQuICovCitlbnVtIG9mcF9wb3J0X21vZF9mYWlsZWRfY29kZSh3aXJlX3R5cGU9dWludDE2X3QpIHsKKyAgICBPRlBQTUZDX0JBRF9QT1JUID0gMCwKKyAgICBPRlBQTUZDX0JBRF9IV19BRERSID0gMSwKKyAgICBPRlBQTUZDX0JBRF9DT05GSUcgPSAyLAorICAgIE9GUFBNRkNfQkFEX0FEVkVSVElTRSA9IDMsCisgICAgT0ZQUE1GQ19FUEVSTSA9IDQsCit9OworCisvKiBvZnBfZXJyb3JfbXNnIJJjb2RlkiB2YWx1ZXMgZm9yIE9GUEVUX1RBQkxFX01PRF9GQUlMRUQuICovCitlbnVtIG9mcF90YWJsZV9tb2RfZmFpbGVkX2NvZGUod2lyZV90eXBlPXVpbnQxNl90KSB7CisgICAgT0ZQVE1GQ19CQURfVEFCTEUgPSAwLAorICAgIE9GUFRNRkNfQkFEX0NPTkZJRyA9IDEsCisgICAgT0ZQVE1GQ19FUEVSTSA9IDIsCit9OworCisvKiBvZnBfZXJyb3IgbXNnIJJjb2RlkiB2YWx1ZXMgZm9yIE9GUEVUX1FVRVVFX09QX0ZBSUxFRCAqLworZW51bSBvZnBfcXVldWVfb3BfZmFpbGVkX2NvZGUod2lyZV90eXBlPXVpbnQxNl90KSB7CisgICAgT0ZQUU9GQ19CQURfUE9SVCA9IDAsCisgICAgT0ZQUU9GQ19CQURfUVVFVUUgPSAxLAorICAgIE9GUFFPRkNfRVBFUk0gPSAyLAorfTsKKworLyogb2ZwX2Vycm9yX21zZyCSY29kZZIgdmFsdWVzIGZvciBPRlBFVF9TV0lUQ0hfQ09ORklHX0ZBSUxFRCAqLworZW51bSBvZnBfc3dpdGNoX2NvbmZpZ19mYWlsZWRfY29kZSh3aXJlX3R5cGU9dWludDE2X3QpIHsKKyAgICBPRlBTQ0ZDX0JBRF9GTEFHUyA9IDAsCisgICAgT0ZQU0NGQ19CQURfTEVOID0gMSwKKyAgICBPRlBTQ0ZDX0VQRVJNID0gMiwKKyAgICBPRlBSUkZDX0lEX1VOU1VQID0gMywKKyAgICBPRlBSUkZDX0lEX0lOX1VTRSA9IDQsCit9OworCisvKiBvZnBfZXJyb3JfbXNnIJJjb2RlkiB2YWx1ZXMgZm9yIE9GUEVUX1JPTEVfUkVRVUVTVF9GQUlMRUQuICovCitlbnVtIG9mcF9yb2xlX3JlcXVlc3RfZmFpbGVkX2NvZGUod2lyZV90eXBlPXVpbnQxNl90KXsKKyAgICBPRlBSUkZDX1NUQUxFID0gMCwKKyAgICBPRlBSUkZDX1VOU1VQID0gMSwKKyAgICBPRlBSUkZDX0JBRF9ST0xFID0gMiwKK307CisKKy8qIG9mcF9lcnJvcl9tc2cgkmNvZGWSIHZhbHVlcyBmb3IgT0ZQRVRfTUVURVJfTU9EX0ZBSUxFRCAqLworZW51bSBvZnBfbWV0ZXJfbW9kX2ZhaWxlZF9jb2RlKHdpcmVfdHlwZT11aW50MTZfdCkgeworICAgIE9GUE1NRkNfVU5LTk9XTiA9IDAsCisgICAgT0ZQTU1GQ19NRVRFUl9FWElTVFMgPSAxLAorICAgIE9GUE1NRkNfSU5WQUxJRF9NRVRFUiA9IDIsCisgICAgT0ZQTU1GQ19VTktOT1dOX01FVEVSID0gMywKKyAgICBPRlBNTUZDX0JBRF9DT01NQU5EID0gNCwKKyAgICBPRlBNTUZDX0JBRF9GTEFHUyA9IDUsCisgICAgT0ZQTU1GQ19CQURfUkFURSA9IDYsCisgICAgT0ZQTU1GQ19CQURfQlVSU1QgPSA3LAorICAgIE9GUE1NRkNfQkFEX0JBTkQgPSA4LAorICAgIE9GUE1NRkNfQkFEX0JBTkRfVkFMVUUgPSA5LAorICAgIE9GUE1NRkNfT1VUX09GX01FVEVSUyA9IDEwLAorICAgIE9GUE1NRkNfT1VUX09GX0JBTkRTID0gMTEsCit9OworCisvKiBvZnBfZXJyb3JfbXNnIJJjb2RlkiB2YWx1ZXMgZm9yIE9GUEVUX1RBQkxFX0ZFQVRVUkVTX0ZBSUxFRCAqLworZW51bSBvZnBfdGFibGVfZmVhdHVyZXNfZmFpbGVkX2NvZGUod2lyZV90eXBlPXVpbnQxNl90KSB7CisgICAgT0ZQVEZGQ19CQURfVEFCTEUgPSAwLAorICAgIE9GUFRGRkNfQkFEX01FVEFEQVRBID0gMSwKKyAgICBPRlBURkZDX0VQRVJNID0gNSwKKyAgICBPRlBURkZDX0JBRF9DQVBBID0gNiwKKyAgICBPRlBURkZDX0JBRF9NQVhfRU5UID0gNywKKyAgICBPRlBURkZDX0JBRF9GRUFUVVJFUyA9IDgsCisgICAgT0ZQVEZGQ19CQURfQ09NTUFORCA9IDksCisgICAgT0ZQVEZGQ19UT09fTUFOWSA9IDEwLAorfTsKKworLyogb2ZwX2Vycm9yX21zZyCSY29kZZIgdmFsdWVzIGZvciBPRlBFVF9CQURfUFJPUEVSVFkuICovCitlbnVtIG9mcF9iYWRfcHJvcGVydHlfY29kZSh3aXJlX3R5cGU9dWludDE2X3QpIHsKKyAgICBPRlBCUENfQkFEX1RZUEUgPSAwLAorICAgIE9GUEJQQ19CQURfTEVOID0gMSwKKyAgICBPRlBCUENfQkFEX1ZBTFVFID0gMiwKKyAgICBPRlBCUENfVE9PX01BTlkgPSAzLAorICAgIE9GUEJQQ19EVVBfVFlQRSA9IDQsCisgICAgT0ZQQlBDX0JBRF9FWFBFUklNRU5URVIgPSA1LAorICAgIE9GUEJQQ19CQURfRVhQX1RZUEUgPSA2LAorICAgIE9GUEJQQ19CQURfRVhQX1ZBTFVFID0gNywKKyAgICBPRlBCUENfRVBFUk0gPSA4LAorfTsKKworLyogb2ZwX2Vycm9yX21zZyCSY29kZZIgdmFsdWVzIGZvciBPRlBFVF9BU1lOQ19DT05GSUdfRkFJTEVELiAqLworZW51bSBvZnBfYXN5bmNfY29uZmlnX2ZhaWxlZF9jb2RlKHdpcmVfdHlwZT11aW50MTZfdCkgeworICAgIE9GUEFDRkNfSU5WQUxJRCA9IDAsCisgICAgT0ZQQUNGQ19VTlNVUFBPUlRFRCA9IDEsCisgICAgT0ZQQUNGQ19FUEVSTSA9IDIsCit9OworCisvKiBvZnBfZXJyb3JfbXNnIJJjb2RlkiB2YWx1ZXMgZm9yIE9GUEVUX0ZMT1dfTU9OSVRPUl9GQUlMRUQuICovCitlbnVtIG9mcF9mbG93X21vbml0b3JfZmFpbGVkX2NvZGUod2lyZV90eXBlPXVpbnQxNl90KSB7CisgICAgT0ZQTU9GQ19VTktOT1dOID0gMCwKKyAgICBPRlBNT0ZDX01PTklUT1JfRVhJU1RTID0gMSwKKyAgICBPRlBNT0ZDX0lOVkFMSURfTU9OSVRPUiA9IDIsCisgICAgT0ZQTU9GQ19VTktOT1dOX01PTklUT1IgPSAzLAorICAgIE9GUE1PRkNfQkFEX0NPTU1BTkQgPSA0LAorICAgIE9GUE1PRkNfQkFEX0ZMQUdTID0gNSwKKyAgICBPRlBNT0ZDX0JBRF9UQUJMRV9JRCA9IDYsCisgICAgT0ZQTU9GQ19CQURfT1VUID0gNywKK307CisKKy8qIG9mcF9lcnJvcl9tc2cgkmNvZGWSIHZhbHVlcyBmb3IgT0ZQRVRfQlVORExFX0ZBSUxFRC4gKi8KK2VudW0gb2ZwX2J1bmRsZV9mYWlsZWRfY29kZSh3aXJlX3R5cGU9dWludDE2X3QpIHsKKyAgICBPRlBCRkNfVU5LTk9XTiA9IDAsCisgICAgT0ZQQkZDX0VQRVJNID0gMSwKKyAgICBPRlBCRkNfQkFEX0lEID0gMiwKKyAgICBPRlBCRkNfQlVORExFX0VYSVNUID0gMywKKyAgICBPRlBCRkNfQlVORExFX0NMT1NFRCA9IDQsCisgICAgT0ZQQkZDX09VVF9PRl9CVU5ETEVTID0gNSwKKyAgICBPRlBCRkNfQkFEX1RZUEUgPSA2LAorICAgIE9GUEJGQ19CQURfRkxBR1MgPSA3LAorICAgIE9GUEJGQ19NU0dfQkFEX0xFTiA9IDgsCisgICAgT0ZQQkZDX01TR19CQURfWElEID0gOSwKKyAgICBPRlBCRkNfTVNHX1VOU1VQID0gMTAsCisgICAgT0ZQQkZDX01TR19DT05GTElDVCA9IDExLAorICAgIE9GUEJGQ19NU0dfVE9PX01BTlkgPSAxMiwKKyAgICBPRlBCRkNfTVNHX0ZBSUxFRCA9IDEzLAorICAgIE9GUEJGQ19USU1FT1VUID0gMTQsCisgICAgT0ZQQkZDX0JVTkRMRV9JTl9QUk9HUkVTUyA9IDE1LAorICAgIE9GUEJGQ19TQ0hFRF9OT1RfU1VQUE9SVEVEID0gMTYsCisgICAgT0ZQQkZDX1NDSEVEX0ZVVFVSRSA9IDE3LAorICAgIE9GUEJGQ19TQ0hFRF9QQVNUID0gMTgsCit9OworCitlbnVtIG9mcF9idW5kbGVfZmVhdHVyZV9mbGFncyh3aXJlX3R5cGU9dWludDMyX3QsIGJpdG1hc2s9VHJ1ZSkgeworICAgIE9GUEJGX1RJTUVTVEFNUCA9IDB4MSwKKyAgICBPRlBCRl9USU1FX1NFVF9TQ0hFRCA9IDB4MiwKK307CisKKy8qIENvbmZpZ3VyZS9Nb2RpZnkgYmVoYXZpb3Igb2YgYSBmbG93IHRhYmxlICovCitzdHJ1Y3Qgb2ZfdGFibGVfbW9kIDogb2ZfaGVhZGVyIHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE3OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDhfdCB0YWJsZV9pZDsKKyAgICBwYWQoMyk7CisgICAgdWludDMyX3QgY29uZmlnOworICAgIGxpc3Qob2ZfdGFibGVfbW9kX3Byb3BfdCkgcHJvcGVydGllczsKK307CisKKy8qIENvbW1vbiBoZWFkZXIgZm9yIGFsbCBUYWJsZSBNb2QgUHJvcGVydGllcyAqLworc3RydWN0IG9mX3RhYmxlX21vZF9wcm9wIHsKKyAgICB1aW50MTZfdCB0eXBlID09ID87CisgICAgdWludDE2X3QgbGVuZ3RoOworfTsKKworLyogRXZpY3Rpb24gdGFibGUgbW9kIFByb3BlcnR5LiBNb3N0bHkgdXNlZCBpbiBPRlBNUF9UQUJMRV9ERVNDIHJlcGxpZXMuICovCitzdHJ1Y3Qgb2ZfdGFibGVfbW9kX3Byb3BfZXZpY3Rpb24gOiBvZl90YWJsZV9tb2RfcHJvcCB7CisgICAgdWludDE2X3QgdHlwZSA9PSAyOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICBlbnVtIG9mcF90YWJsZV9tb2RfcHJvcF9ldmljdGlvbl9mbGFnIGZsYWdzOworfTsKKworLyogVmFjYW5jeSB0YWJsZSBtb2QgcHJvcGVydHkgKi8KK3N0cnVjdCBvZl90YWJsZV9tb2RfcHJvcF92YWNhbmN5IDogb2ZfdGFibGVfbW9kX3Byb3AgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMzsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDhfdCB2YWNhbmN5X2Rvd247CisgICAgdWludDhfdCB2YWNhbmN5X3VwOworICAgIHVpbnQ4X3QgdmFjYW5jeTsKKyAgICBwYWQoMSk7Cit9OworCisvKiBFeHBlcmltZW50ZXIgdGFibGUgbW9kIHByb3BlcnR5ICovCitzdHJ1Y3Qgb2ZfdGFibGVfbW9kX3Byb3BfZXhwZXJpbWVudGVyIDogb2ZfdGFibGVfbW9kX3Byb3AgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMHhmZmZmOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCBleHBlcmltZW50ZXIgPT0gPzsKKyAgICB1aW50MzJfdCBleHBfdHlwZTsKK307CisKKy8qIEZsb3cgc2V0dXAgYW5kIHRlYXJkb3duIChjb250cm9sbGVyIC0+IGRhdGFwYXRoKS4gKi8KK3N0cnVjdCBvZl9mbG93X21vZCA6IG9mX2hlYWRlciB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxNDsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIHVpbnQ2NF90IGNvb2tpZTsKKyAgICB1aW50NjRfdCBjb29raWVfbWFzazsKKyAgICB1aW50OF90IHRhYmxlX2lkOworICAgIG9mX2ZtX2NtZF90IF9jb21tYW5kID09ID87CisgICAgdWludDE2X3QgaWRsZV90aW1lb3V0OworICAgIHVpbnQxNl90IGhhcmRfdGltZW91dDsKKyAgICB1aW50MTZfdCBwcmlvcml0eTsKKyAgICB1aW50MzJfdCBidWZmZXJfaWQ7CisgICAgb2ZfcG9ydF9ub190IG91dF9wb3J0OworICAgIHVpbnQzMl90IG91dF9ncm91cDsKKyAgICBlbnVtIG9mcF9mbG93X21vZF9mbGFncyBmbGFnczsKKyAgICB1aW50MTZfdCBpbXBvcnRhbmNlOworICAgIG9mX21hdGNoX3QgbWF0Y2g7CisgICAgbGlzdChvZl9pbnN0cnVjdGlvbl90KSBpbnN0cnVjdGlvbnM7Cit9OworCisvKiBHcm91cCBzZXR1cCBhbmQgdGVhcmRvd24gKGNvbnRyb2xsZXIgLT4gZGF0YXBhdGgpLiAqLworc3RydWN0IG9mX2dyb3VwX21vZCA6IG9mX2hlYWRlciB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxNTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIGVudW0gb2ZwX2dyb3VwX21vZF9jb21tYW5kIGNvbW1hbmQgPT0gPzsKKyAgICBlbnVtIG9mcF9ncm91cF90eXBlIGdyb3VwX3R5cGU7CisgICAgcGFkKDEpOworICAgIHVpbnQzMl90IGdyb3VwX2lkOworICAgIHVpbnQxNl90IGJ1Y2tldF9hcnJheV9sZW4gPT0gbGVuZ3RoKGJ1Y2tldHMpOworICAgIHBhZCgyKTsKKyAgICBlbnVtIG9mcF9ncm91cF9idWNrZXQgY29tbWFuZF9idWNrZXRfaWQ7CisgICAgbGlzdChvZl9idWNrZXRfdCkgYnVja2V0czsKKyAgICBsaXN0KG9mX2dyb3VwX3Byb3BfdCkgcHJvcGVydGllczsKK307CisKKy8qIEJ1Y2tldCBmb3IgdXNlIGluIGdyb3Vwcy4gKi8KK3N0cnVjdCBvZl9idWNrZXQgeworICAgIHVpbnQxNl90IGxlbjsKKyAgICB1aW50MTZfdCBhY3Rpb25fYXJyYXlfbGVuID09IGxlbmd0aChhY3Rpb25zKTsKKyAgICBlbnVtIG9mcF9ncm91cF9idWNrZXQgYnVja2V0X2lkOworICAgIGxpc3Qob2ZfYWN0aW9uX3QpIGFjdGlvbnM7CisgICAgbGlzdChvZl9ncm91cF9idWNrZXRfcHJvcF90KSBwcm9wZXJ0aWVzOworfTsKKworLyogQ29tbW9uIGhlYWRlciBmb3IgYWxsIGdyb3VwIGJ1Y2tldCBwcm9wZXJ0aWVzLiAqLworc3RydWN0IG9mX2dyb3VwX2J1Y2tldF9wcm9wIHsKKyAgICB1aW50MTZfdCB0eXBlID09ID87CisgICAgdWludDE2X3QgbGVuZ3RoOworfTsKKworLyogR3JvdXAgYnVja2V0IHdlaWdodCBwcm9wZXJ0eSwgZm9yIHNlbGVjdCBncm91cHMgb25seS4gKi8KK3N0cnVjdCBvZl9ncm91cF9idWNrZXRfcHJvcF93ZWlnaHQgOiBvZl9ncm91cF9idWNrZXRfcHJvcCB7CisgICAgdWludDE2X3QgdHlwZSA9PSAwOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MTZfdCB3ZWlnaHQ7CisgICAgcGFkKDIpOworfTsKKworLyogR3JvdXAgYnVja2V0IHdhdGNoIHBvcnQgKi8KK3N0cnVjdCBvZl9ncm91cF9idWNrZXRfcHJvcF93YXRjaF9wb3J0IDogb2ZfZ3JvdXBfYnVja2V0X3Byb3AgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3Qgd2F0Y2g7Cit9OworCisvKiBHcm91cCBidWNrZXQgd2F0Y2ggZ3JvdXAgKi8KK3N0cnVjdCBvZl9ncm91cF9idWNrZXRfcHJvcF93YXRjaF9ncm91cCA6IG9mX2dyb3VwX2J1Y2tldF9wcm9weworICAgIHVpbnQxNl90IHR5cGUgPT0gMjsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3Qgd2F0Y2g7Cit9OworCisvKiBFeHBlcmltZW50ZXIgZ3JvdXAgYnVja2V0IHByb3BlcnR5ICovCitzdHJ1Y3Qgb2ZfZ3JvdXBfYnVja2V0X3Byb3BfZXhwZXJpbWVudGVyIDogb2ZfZ3JvdXBfYnVja2V0X3Byb3AgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMzsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgZXhwZXJpbWVudGVyID09ID87CisgICAgdWludDMyX3QgZXhwX3R5cGU7Cit9OworCisvKiBDb21tb24gaGVhZGVyIGZvciBhbGwgZ3JvdXAgcHJvcGVydGllcy4gKi8KK3N0cnVjdCBvZl9ncm91cF9wcm9wIHsKKyAgICB1aW50MTZfdCB0eXBlID09ID87CisgICAgdWludDE2X3QgbGVuZ3RoOworfTsKKworLyogRXhwZXJpbWVudGVyIGdyb3VwIHByb3BlcnR5ICovCitzdHJ1Y3Qgb2ZfZ3JvdXBfcHJvcF9leHBlcmltZW50ZXIgeworICAgIHVpbnQxNl90IHR5cGUgPT0gNjU1MzU7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IGV4cGVyaW1lbnRlciA9PSA/OworICAgIHVpbnQzMl90IGV4cF90eXBlOworfTsKKworLyogTW9kaWZ5IGJlaGF2aW9yIG9mIHRoZSBwaHlzaWNhbCBwb3J0ICovCitzdHJ1Y3Qgb2ZfcG9ydF9tb2QgOiBvZl9oZWFkZXIgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTY7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICBvZl9wb3J0X25vX3QgcG9ydF9ubzsKKyAgICBwYWQoNCk7CisgICAgb2ZfbWFjX2FkZHJfdCBod19hZGRyOworICAgIHBhZCgyKTsKKyAgICBlbnVtIG9mcF9wb3J0X2NvbmZpZyBjb25maWc7CisgICAgZW51bSBvZnBfcG9ydF9jb25maWcgbWFzazsKKyAgICBsaXN0KG9mX3BvcnRfbW9kX3Byb3BfdCkgcHJvcGVydGllczsKK307CisKKy8qIENvbW1vbiBoZWFkZXIgZm9yIGFsbCBwb3J0IG1vZCBwcm9wZXJ0aWVzLiAqLworc3RydWN0IG9mX3BvcnRfbW9kX3Byb3AgeworICAgIHVpbnQxNl90IHR5cGUgPT0gPzsKKyAgICB1aW50MTZfdCBsZW5ndGg7Cit9OworCisvKiBFdGhlcm5ldCBwb3J0IG1vZCBwcm9wZXJ0eS4gKi8KK3N0cnVjdCBvZl9wb3J0X21vZF9wcm9wX2V0aGVybmV0IDogb2ZfcG9ydF9tb2RfcHJvcCB7CisgICAgdWludDE2X3QgdHlwZSA9PSAwOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICBlbnVtIG9mcF9wb3J0X2ZlYXR1cmVzIGFkdmVydGlzZTsKK307CisKKy8qIE9wdGljYWwgcG9ydCBtb2QgcHJvcGVydHkgKi8KK3N0cnVjdCBvZl9wb3J0X21vZF9wcm9wX29wdGljYWwgOiBvZl9wb3J0X21vZF9wcm9wIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDE7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IGNvbmZpZ3VyZTsKKyAgICB1aW50MzJfdCBmcmVxX2xkbWE7CisgICAgdWludDMyX3QgZmxfb2Zmc2V0OyAvKiBUT0RPIHNpZ25lZCAqLworICAgIHVpbnQzMl90IGdyaWRfc3BhbjsKKyAgICB1aW50MzJfdCB0eF9wd3I7Cit9OworCisvKiBFeHBlcmltZW50ZXIgcG9ydCBtb2QgcHJvcGVydHkuICovCitzdHJ1Y3Qgb2ZfcG9ydF9tb2RfcHJvcF9leHBlcmltZW50ZXIgOiBvZl9wb3J0X21vZF9wcm9wIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDB4ZmZmZjsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgZXhwZXJpbWVudGVyID09ID87CisgICAgdWludDMyX3QgZXhwX3R5cGU7Cit9OworCisvKiBNZXRlciBjb25maWd1cmF0aW9uLiBPRlBUX01FVEVSX01PRC4gKi8KK3N0cnVjdCBvZl9tZXRlcl9tb2QgOiBvZl9oZWFkZXIgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMjk7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICBlbnVtIG9mcF9tZXRlcl9tb2RfY29tbWFuZCBjb21tYW5kOworICAgIGVudW0gb2ZwX21ldGVyX2ZsYWdzIGZsYWdzOworICAgIHVpbnQzMl90IG1ldGVyX2lkOworICAgIGxpc3Qob2ZfbWV0ZXJfYmFuZF90KSBiYW5kczsKK307CisKKy8qIENvbW1vbiBoZWFkZXIgZm9yIGFsbCBtZXRlciBiYW5kcyAqLworc3RydWN0IG9mX21ldGVyX2JhbmQgeworICAgIHVpbnQxNl90IHR5cGUgPT0gPzsKKyAgICB1aW50MTZfdCBsZW47CisvLyAgdWludDMyX3QgcmF0ZTsgIC8vIFRoZXNlIGFyZSBleGNsdWRlZCBiL2MgdGhpcyBpcyB0aGUgaGVhZGVyCisvLyAgdWludDMyX3QgYnVyc3Rfc2l6ZTsgIC8vIFRoZXNlIGFyZSBleGNsdWRlZCBiL2MgdGhpcyBpcyB0aGUgaGVhZGVyCit9OworCisvKiBPRlBNQlRfRFJPUCBiYW5kIC0gZHJvcCBwYWNrZXRzICovCitzdHJ1Y3Qgb2ZfbWV0ZXJfYmFuZF9kcm9wIDogb2ZfbWV0ZXJfYmFuZCB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxOworICAgIHVpbnQxNl90IGxlbjsKKyAgICB1aW50MzJfdCByYXRlOworICAgIHVpbnQzMl90IGJ1cnN0X3NpemU7CisgICAgcGFkKDQpOworfTsKKworLyogT0ZQTUJUX0RTQ1BfUkVNQVJLIGJhbmQgLSBSZW1hcmsgRFNDUCBpbiB0aGUgSVAgaGVhZGVyICovCitzdHJ1Y3Qgb2ZfbWV0ZXJfYmFuZF9kc2NwX3JlbWFyayA6IG9mX21ldGVyX2JhbmQgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMjsKKyAgICB1aW50MTZfdCBsZW47CisgICAgdWludDMyX3QgcmF0ZTsKKyAgICB1aW50MzJfdCBidXJzdF9zaXplOworICAgIHVpbnQ4X3QgcHJlY19sZXZlbDsKKyAgICBwYWQoMyk7Cit9OworCisvKiBPRlBNQlRfRVhQRVJJTUVOVEVSIGJhbmQgLSBFeHBlcmltZW50ZXIgdHlwZS4KKyogVGhlIHJlc3Qgb2YgdGhlIGJhbmQgaXMgZXhwZXJpbWVudGVyLWRlZmluZWQuICovCitzdHJ1Y3Qgb2ZfbWV0ZXJfYmFuZF9leHBlcmltZW50ZXIgOiBvZl9tZXRlcl9iYW5kIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDY1NTM1OworICAgIHVpbnQxNl90IGxlbjsKKyAgICB1aW50MzJfdCByYXRlOworICAgIHVpbnQzMl90IGJ1cnN0X3NpemU7CisgICAgdWludDMyX3QgZXhwZXJpbWVudGVyOworfTsKKworLyogTXVsdGlwYXJ0IFJlcXVlc3QgKi8KK3N0cnVjdCBvZl9zdGF0c19yZXF1ZXN0IDogb2ZfaGVhZGVyIHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE4OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDE2X3Qgc3RhdHNfdHlwZSA9PSA/OworICAgIGVudW0gb2ZwX3N0YXRzX3JlcXVlc3RfZmxhZ3MgZmxhZ3M7CisgICAgcGFkKDQpOworfTsKKworLyogTXVsdGlwYXJ0IFJlcGx5ICovCitzdHJ1Y3Qgb2Zfc3RhdHNfcmVwbHkgOiBvZl9oZWFkZXIgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTk7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MTZfdCBzdGF0c190eXBlID09ID87CisgICAgZW51bSBvZnBfc3RhdHNfcmVwbHlfZmxhZ3MgZmxhZ3M7CisgICAgcGFkKDQpOworfTsKKworLyogQm9keSBmb3Igb2ZwX211bHRpcGFydF9yZXF1ZXN0IG9mIHR5cGUgT0ZQU1RfRkxPVyhfREVTQykgKi8KK3N0cnVjdCBvZl9mbG93X3N0YXRzX3JlcXVlc3QgOiBvZl9zdGF0c19yZXF1ZXN0IHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE4OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDE2X3Qgc3RhdHNfdHlwZSA9PSAxOworICAgIGVudW0gb2ZwX3N0YXRzX3JlcXVlc3RfZmxhZ3MgZmxhZ3M7CisgICAgcGFkKDQpOworICAgIHVpbnQ4X3QgdGFibGVfaWQ7CisgICAgcGFkKDMpOworICAgIG9mX3BvcnRfbm9fdCBvdXRfcG9ydDsKKyAgICB1aW50MzJfdCBvdXRfZ3JvdXA7CisgICAgcGFkKDQpOworICAgIHVpbnQ2NF90IGNvb2tpZTsKKyAgICB1aW50NjRfdCBjb29raWVfbWFzazsKKyAgICBvZl9tYXRjaF90IG1hdGNoOworfTsKKworLyogQm9keSBmb3Igb2ZwX211bHRpcGFydF9yZXBseSBvZiB0eXBlIE9GUFNUX0ZMT1coX0RFU0MpICovCitzdHJ1Y3Qgb2ZfZmxvd19zdGF0c19yZXBseSA6IG9mX3N0YXRzX3JlcGx5IHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE5OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDE2X3Qgc3RhdHNfdHlwZSA9PSAxOworICAgIGVudW0gb2ZwX3N0YXRzX3JlcGx5X2ZsYWdzIGZsYWdzOworICAgIHBhZCg0KTsKKyAgICBsaXN0KG9mX2Zsb3dfc3RhdHNfZW50cnlfdCkgZW50cmllczsKK307CisKKy8qIEJvZHkgZm9yIG9mcF9tdWx0aXBhcnRfcmVxdWVzdCBvZiB0eXBlIE9GUE1QX0ZMT1dfKFNUQVRTKUxJR0hUV0VJR0hUICovCitzdHJ1Y3Qgb2ZfZmxvd19saWdodHdlaWdodF9zdGF0c19yZXF1ZXN0IDogb2Zfc3RhdHNfcmVxdWVzdCB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxODsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIHVpbnQxNl90IHN0YXRzX3R5cGUgPT0gMTc7CisgICAgZW51bSBvZnBfc3RhdHNfcmVxdWVzdF9mbGFncyBmbGFnczsKKyAgICBwYWQoNCk7CisgICAgdWludDhfdCB0YWJsZV9pZDsKKyAgICBwYWQoMyk7CisgICAgb2ZfcG9ydF9ub190IG91dF9wb3J0OworICAgIHVpbnQzMl90IG91dF9ncm91cDsKKyAgICBwYWQoNCk7CisgICAgdWludDY0X3QgY29va2llOworICAgIHVpbnQ2NF90IGNvb2tpZV9tYXNrOworICAgIG9mX21hdGNoX3QgbWF0Y2g7Cit9OworCisvKiBFbnRyeSBmb3IgT0ZQU1RfRkxPVyAqLworc3RydWN0IG9mX2Zsb3dfc3RhdHNfZW50cnkgeworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICBwYWQoMik7CisgICAgdWludDhfdCB0YWJsZV9pZDsKKyAgICBwYWQoMSk7CisgICAgdWludDE2X3QgcHJpb3JpdHk7CisgICAgdWludDE2X3QgaWRsZV90aW1lb3V0OworICAgIHVpbnQxNl90IGhhcmRfdGltZW91dDsKKyAgICBlbnVtIG9mcF9mbG93X21vZF9mbGFncyBmbGFnczsKKyAgICB1aW50MTZfdCBpbXBvcnRhbmNlOworICAgIHVpbnQ2NF90IGNvb2tpZTsKKyAgICBvZl9tYXRjaF90IG1hdGNoOworICAgIG9mX3N0YXRfdCBzdGF0czsKKyAgICBsaXN0KG9mX2luc3RydWN0aW9uX3QpIGluc3RydWN0aW9uczsKK307CisKKy8qIEVudHJ5IGZvciBPRlBNUF9GTE9XXyhTVEFUUylMSUdIVFdFSUdIVCAqLworc3RydWN0IG9mX2Zsb3dfbGlnaHR3ZWlnaHRfc3RhdHNfZW50cnkgeworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICBwYWQoMik7CisgICAgdWludDhfdCB0YWJsZV9pZDsKKyAgICBlbnVtIG9mcF9mbG93X3N0YXRzX3JlYXNvbiByZWFzb247CisgICAgdWludDE2X3QgcHJpb3JpdHk7CisgICAgb2ZfbWF0Y2hfdCBtYXRjaDsKKyAgICBvZl9zdGF0X3Qgc3RhdHM7Cit9OworCisvKiBCb2R5IG9mIHJlcGx5IHRvIE9GUFNUX0ZMT1dfKFNUQVRTKUxJR0hUV0VJR0hUIHJlcXVlc3QgKi8KK3N0cnVjdCBvZl9mbG93X2xpZ2h0d2VpZ2h0X3N0YXRzX3JlcGx5IDogb2Zfc3RhdHNfcmVwbHkgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTk7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MTZfdCBzdGF0c190eXBlID09IDE3OworICAgIGVudW0gb2ZwX3N0YXRzX3JlcGx5X2ZsYWdzIGZsYWdzOworICAgIHBhZCg0KTsKKyAgICBsaXN0KG9mX2Zsb3dfbGlnaHR3ZWlnaHRfc3RhdHNfZW50cnlfdCkgZW50cmllczsKK307CisKKy8qIEJvZHkgZm9yIG9mcF9tdWx0aXBhcnRfcmVxdWVzdCBvZiB0eXBlIE9GUE1QX0FHR1JFR0FURV9TVEFUUy4gKi8KK3N0cnVjdCBvZl9hZ2dyZWdhdGVfc3RhdHNfcmVxdWVzdCA6IG9mX3N0YXRzX3JlcXVlc3QgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTg7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MTZfdCBzdGF0c190eXBlID09IDI7CisgICAgZW51bSBvZnBfc3RhdHNfcmVxdWVzdF9mbGFncyBmbGFnczsKKyAgICBwYWQoNCk7CisgICAgdWludDhfdCB0YWJsZV9pZDsKKyAgICBwYWQoMyk7CisgICAgb2ZfcG9ydF9ub190IG91dF9wb3J0OworICAgIHVpbnQzMl90IG91dF9ncm91cDsKKyAgICBwYWQoNCk7CisgICAgdWludDY0X3QgY29va2llOworICAgIHVpbnQ2NF90IGNvb2tpZV9tYXNrOworICAgIG9mX21hdGNoX3QgbWF0Y2g7Cit9OworCisvKiBCb2R5IG9mIHJlcGx5IHRvIE9GUE1QX0FHR1JFR0FURV9TVEFUUyByZXF1ZXN0LiAqLworc3RydWN0IG9mX2FnZ3JlZ2F0ZV9zdGF0c19yZXBseSA6IG9mX3N0YXRzX3JlcGx5IHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE5OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDE2X3Qgc3RhdHNfdHlwZSA9PSAyOworICAgIGVudW0gb2ZwX3N0YXRzX3JlcGx5X2ZsYWdzIGZsYWdzOworICAgIHBhZCg0KTsKKyAgICBvZl9zdGF0X3Qgc3RhdHM7Cit9OworCisKKy8qIEJvZHkgZm9yIG9mcF9tdWx0aXBhcnRfcmVxdWVzdCBvZiB0eXBlcyBPRlBNUF9QT1JUX1NUQVRTICovCitzdHJ1Y3Qgb2ZfcG9ydF9zdGF0c19yZXF1ZXN0IDogb2Zfc3RhdHNfcmVxdWVzdCB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxODsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIHVpbnQxNl90IHN0YXRzX3R5cGUgPT0gNDsKKyAgICBlbnVtIG9mcF9zdGF0c19yZXF1ZXN0X2ZsYWdzIGZsYWdzOworICAgIHBhZCg0KTsKKyAgICBvZl9wb3J0X25vX3QgcG9ydF9ubzsKKyAgICBwYWQoNCk7Cit9OworCitzdHJ1Y3Qgb2ZfcG9ydF9zdGF0c19lbnRyeSB7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHBhZCgyKTsKKyAgICBvZl9wb3J0X25vX3QgcG9ydF9ubzsKKyAgICB1aW50MzJfdCBkdXJhdGlvbl9zZWM7CisgICAgdWludDMyX3QgZHVyYXRpb25fbnNlYzsKKyAgICB1aW50NjRfdCByeF9wYWNrZXRzOworICAgIHVpbnQ2NF90IHR4X3BhY2tldHM7CisgICAgdWludDY0X3QgcnhfYnl0ZXM7CisgICAgdWludDY0X3QgdHhfYnl0ZXM7CisgICAgdWludDY0X3QgcnhfZHJvcHBlZDsKKyAgICB1aW50NjRfdCB0eF9kcm9wcGVkOworICAgIHVpbnQ2NF90IHJ4X2Vycm9yczsKKyAgICB1aW50NjRfdCB0eF9lcnJvcnM7CisgICAgbGlzdChvZl9wb3J0X3N0YXRzX3Byb3BfdCkgcHJvcGVydGllczsKK307CisKKy8qIEJvZHkgb2YgcmVwbHkgdG8gT0ZQTVBfUE9SVF9TVEFUUyByZXF1ZXN0LiAqLworc3RydWN0IG9mX3BvcnRfc3RhdHNfcmVwbHkgOiBvZl9zdGF0c19yZXBseSB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxOTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIHVpbnQxNl90IHN0YXRzX3R5cGUgPT0gNDsKKyAgICBlbnVtIG9mcF9zdGF0c19yZXBseV9mbGFncyBmbGFnczsKKyAgICBwYWQoNCk7CisgICAgbGlzdChvZl9wb3J0X3N0YXRzX2VudHJ5X3QpIGVudHJpZXM7Cit9OworCisvKiBDb21tb24gaGVhZGVyIGZvciBhbGwgcG9ydCBzdGF0cyBwcm9wZXJ0aWVzLiAqLworc3RydWN0IG9mX3BvcnRfc3RhdHNfcHJvcCB7CisgICAgdWludDE2X3QgdHlwZSA9PSA/OworICAgIHVpbnQxNl90IGxlbmd0aDsKK307CisKKy8qIEV0aGVybmV0IHBvcnQgc3RhdHMgcHJvcGVydHkuICovCitzdHJ1Y3Qgb2ZfcG9ydF9zdGF0c19wcm9wX2V0aGVybmV0IDogb2ZfcG9ydF9zdGF0c19wcm9wIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDA7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHBhZCg0KTsKKyAgICB1aW50NjRfdCByeF9mcmFtZV9lcnI7CisgICAgdWludDY0X3Qgcnhfb3Zlcl9lcnI7CisgICAgdWludDY0X3QgcnhfY3JjX2VycjsKKyAgICB1aW50NjRfdCBjb2xsaXNpb25zOworfTsKKworLyogT3B0aWNhbCBwb3J0IHN0YXRzIHByb3BlcnR5LiAqLworc3RydWN0IG9mX3BvcnRfc3RhdHNfcHJvcF9vcHRpY2FsIDogb2ZfcG9ydF9zdGF0c19wcm9wIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDE7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHBhZCg0KTsKKyAgICB1aW50MzJfdCBmbGFnczsKKyAgICB1aW50MzJfdCB0eF9mcmVxX2xtZGE7CisgICAgdWludDMyX3QgdHhfb2Zmc2V0OworICAgIHVpbnQzMl90IHR4X2dyaWRfc3BhbjsKKyAgICB1aW50MzJfdCByeF9mcmVxX2xtZGE7CisgICAgdWludDMyX3Qgcnhfb2Zmc2V0OworICAgIHVpbnQzMl90IHJ4X2dyaWRfc3BhbjsKKyAgICB1aW50MTZfdCB0eF9wd3I7CisgICAgdWludDE2X3QgcnhfcHdyOworICAgIHVpbnQxNl90IGJpYXNfY3VycmVudDsKKyAgICB1aW50MTZfdCB0ZW1wZXJhdHVyZTsKK307CisKKy8qIEV4cGVyaW1lbnRlciBwb3J0IHN0YXRzIHByb3BlcnR5LiAqLworc3RydWN0IG9mX3BvcnRfc3RhdHNfcHJvcF9leHBlcmltZW50ZXIgOiBvZl9wb3J0X3N0YXRzX3Byb3AgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMHhmZmZmOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCBleHBlcmltZW50ZXIgPT0gPzsKKyAgICB1aW50MzJfdCBleHBfdHlwZTsKK307CisKKy8qIEJvZHkgZm9yIG9mcF9tdWx0aXBhcnRfcmVxdWVzdCBvZiBPRlBNUF9QT1JUX0RFU0MuICovCitzdHJ1Y3Qgb2ZfcG9ydF9kZXNjX3N0YXRzX3JlcXVlc3QgOiBvZl9zdGF0c19yZXF1ZXN0IHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE4OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDE2X3Qgc3RhdHNfdHlwZSA9PSAxMzsKKyAgICBlbnVtIG9mcF9zdGF0c19yZXF1ZXN0X2ZsYWdzIGZsYWdzOworICAgIHBhZCg0KTsKKyAgICBvZl9wb3J0X25vX3QgcG9ydF9ubzsKKyAgICBwYWQoNCk7Cit9OworCisvKiBCb2R5IGZvciBvZnBfbXVsdGlwYXJ0X3JlcGx5IG9mIE9GUE1QX1BPUlRfREVTQy4gKi8KK3N0cnVjdCBvZl9wb3J0X2Rlc2Nfc3RhdHNfcmVwbHkgOiBvZl9zdGF0c19yZXBseSB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxOTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIHVpbnQxNl90IHN0YXRzX3R5cGUgPT0gMTM7CisgICAgZW51bSBvZnBfc3RhdHNfcmVwbHlfZmxhZ3MgZmxhZ3M7CisgICAgcGFkKDQpOworICAgIGxpc3Qob2ZfcG9ydF9kZXNjX3QpIGVudHJpZXM7Cit9OworCisvKiBCb2R5IGZvciBvZnBfbXVsdGlwYXJ0X3JlcXVlc3Qgb2YgT0ZQTVBfUVVFVUVfU1RBVFMuICovCitzdHJ1Y3Qgb2ZfcXVldWVfc3RhdHNfcmVxdWVzdCA6IG9mX3N0YXRzX3JlcXVlc3QgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTg7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MTZfdCBzdGF0c190eXBlID09IDU7CisgICAgZW51bSBvZnBfc3RhdHNfcmVxdWVzdF9mbGFncyBmbGFnczsKKyAgICBwYWQoNCk7CisgICAgb2ZfcG9ydF9ub190IHBvcnRfbm87CisgICAgdWludDMyX3QgcXVldWVfaWQ7Cit9OworCitzdHJ1Y3Qgb2ZfcXVldWVfc3RhdHNfZW50cnkgeworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICBwYWQoNik7CisgICAgb2ZfcG9ydF9ub190IHBvcnRfbm87CisgICAgdWludDMyX3QgcXVldWVfaWQ7CisgICAgdWludDY0X3QgdHhfYnl0ZXM7CisgICAgdWludDY0X3QgdHhfcGFja2V0czsKKyAgICB1aW50NjRfdCB0eF9lcnJvcnM7CisgICAgdWludDMyX3QgZHVyYXRpb25fc2VjOworICAgIHVpbnQzMl90IGR1cmF0aW9uX25zZWM7CisgICAgbGlzdChvZl9xdWV1ZV9zdGF0c19wcm9wX3QpIHByb3BlcnRpZXM7Cit9OworCitzdHJ1Y3Qgb2ZfcXVldWVfc3RhdHNfcmVwbHkgOiBvZl9zdGF0c19yZXBseSB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxOTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIHVpbnQxNl90IHN0YXRzX3R5cGUgPT0gNTsKKyAgICBlbnVtIG9mcF9zdGF0c19yZXBseV9mbGFncyBmbGFnczsKKyAgICBwYWQoNCk7CisgICAgbGlzdChvZl9xdWV1ZV9zdGF0c19lbnRyeV90KSBlbnRyaWVzOworfTsKKworLyogQ29tbW9uIGhlYWRlciBmb3IgYWxsIHF1ZXVlIHByb3BlcnRpZXMgKi8KK3N0cnVjdCBvZl9xdWV1ZV9zdGF0c19wcm9wIHsKKyAgICB1aW50MTZfdCB0eXBlID09ID87CisgICAgdWludDE2X3QgbGVuZ3RoOworfTsKKworLyogRXhwZXJpbWVudGVyIHF1ZXVlIHByb3BlcnR5IGRlc2NyaXB0aW9uLiAqLworc3RydWN0IG9mX3F1ZXVlX3N0YXRzX3Byb3BfZXhwZXJpbWVudGVyIDogb2ZfcXVldWVfc3RhdHNfcHJvcCB7CisgICAgdWludDE2X3QgdHlwZSA9PSAweGZmZmY7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IGV4cGVyaW1lbnRlciA9PSA/OworICAgIHVpbnQzMl90IGV4cF90eXBlOworfTsKKworLyogQm9keSBmb3Igb2ZwX211bHRpcGFydF9yZXF1ZXN0IG9mIE9GUE1QX1FVRVVFX0RFU0MgKi8KK3N0cnVjdCBvZl9xdWV1ZV9kZXNjX3N0YXRzX3JlcXVlc3QgOiBvZl9zdGF0c19yZXF1ZXN0IHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE4OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDE2X3Qgc3RhdHNfdHlwZSA9PSAxNTsKKyAgICBlbnVtIG9mcF9zdGF0c19yZXF1ZXN0X2ZsYWdzIGZsYWdzOworICAgIHBhZCg0KTsKKyAgICBvZl9wb3J0X25vX3QgcG9ydF9ubzsKKyAgICB1aW50MzJfdCBxdWV1ZV9pZDsKK307CisKK3N0cnVjdCBvZl9xdWV1ZV9kZXNjIHsKKyAgICB1aW50MzJfdCBwb3J0X25vOworICAgIHVpbnQzMl90IHF1ZXVlX2lkOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICBwYWQoNik7CisgICAgbGlzdChvZl9xdWV1ZV9kZXNjX3Byb3BfdCkgcHJvcGVydGllczsKK307CisKKy8qIEJvZHkgb2YgcmVwbHkgdG8gT0ZQTVBfUVVFVUVfREVTQyByZXF1ZXN0LiAqLworc3RydWN0IG9mX3F1ZXVlX2Rlc2Nfc3RhdHNfcmVwbHkgOiBvZl9zdGF0c19yZXBseSB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxOTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIHVpbnQxNl90IHN0YXRzX3R5cGUgPT0gMTU7CisgICAgZW51bSBvZnBfc3RhdHNfcmVwbHlfZmxhZ3MgZmxhZ3M7CisgICAgcGFkKDQpOworICAgIGxpc3Qob2ZfcXVldWVfZGVzY190KSBlbnRyaWVzOworfTsKKworLyogQ29tbW9uIGhlYWRlciBmb3IgYWxsIHF1ZXVlIHByb3BlcnRpZXMgKi8KK3N0cnVjdCBvZl9xdWV1ZV9kZXNjX3Byb3AgeworICAgIHVpbnQxNl90IHR5cGUgPT0gPzsKKyAgICB1aW50MTZfdCBsZW5ndGg7Cit9OworCisvKiBNaW4tUmF0ZSBxdWV1ZSBwcm9wZXJ0eSBkZXNjcmlwdGlvbi4gKi8KK3N0cnVjdCBvZl9xdWV1ZV9kZXNjX3Byb3BfbWluX3JhdGUgOiBvZl9xdWV1ZV9kZXNjX3Byb3AgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDE2X3QgcmF0ZTsKKyAgICBwYWQoMik7Cit9OworCisvKiBNYXgtUmF0ZSBxdWV1ZSBwcm9wZXJ0eSBkZXNjcmlwdGlvbi4gKi8KK3N0cnVjdCBvZl9xdWV1ZV9kZXNjX3Byb3BfbWF4X3JhdGUgOiBvZl9xdWV1ZV9kZXNjX3Byb3AgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMjsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDE2X3QgcmF0ZTsKKyAgICBwYWQoMik7Cit9OworCisvKiBFeHBlcmltZW50ZXIgcXVldWUgcHJvcGVydHkgZGVzY3JpcHRpb24uICovCitzdHJ1Y3Qgb2ZfcXVldWVfZGVzY19wcm9wX2V4cGVyaW1lbnRlciA6IG9mX3F1ZXVlX2Rlc2NfcHJvcCB7CisgICAgdWludDE2X3QgdHlwZSA9PSAweGZmZmY7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IGV4cGVyaW1lbnRlciA9PSA/OworICAgIHVpbnQzMl90IGV4cF90eXBlOworfTsKKworLyogQm9keSBvZiBPRlBNUF9HUk9VUF9TVEFUUyAqLworc3RydWN0IG9mX2dyb3VwX3N0YXRzX3JlcXVlc3QgOiBvZl9zdGF0c19yZXF1ZXN0IHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE4OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDE2X3Qgc3RhdHNfdHlwZSA9PSA2OworICAgIGVudW0gb2ZwX3N0YXRzX3JlcXVlc3RfZmxhZ3MgZmxhZ3M7CisgICAgcGFkKDQpOworICAgIHVpbnQzMl90IGdyb3VwX2lkOworICAgIHBhZCg0KTsKK307CisKK3N0cnVjdCBvZl9ncm91cF9zdGF0c19lbnRyeSB7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHBhZCgyKTsKKyAgICB1aW50MzJfdCBncm91cF9pZDsKKyAgICB1aW50MzJfdCByZWZfY291bnQ7CisgICAgcGFkKDQpOworICAgIHVpbnQ2NF90IHBhY2tldF9jb3VudDsKKyAgICB1aW50NjRfdCBieXRlX2NvdW50OworICAgIHVpbnQzMl90IGR1cmF0aW9uX3NlYzsKKyAgICB1aW50MzJfdCBkdXJhdGlvbl9uc2VjOworICAgIGxpc3Qob2ZfYnVja2V0X2NvdW50ZXJfdCkgYnVja2V0X3N0YXRzOworfTsKKworLyogQm9keSBvZiByZXBseSB0byBPRlBNUF9HUk9VUF9TVEFUUyByZXF1ZXN0LiAqLworc3RydWN0IG9mX2dyb3VwX3N0YXRzX3JlcGx5IDogb2Zfc3RhdHNfcmVwbHkgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTk7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MTZfdCBzdGF0c190eXBlID09IDY7CisgICAgZW51bSBvZnBfc3RhdHNfcmVwbHlfZmxhZ3MgZmxhZ3M7CisgICAgcGFkKDQpOworICAgIGxpc3Qob2ZfZ3JvdXBfc3RhdHNfZW50cnlfdCkgZW50cmllczsKK307CisKKy8qIFVzZWQgaW4gZ3JvdXAgc3RhdHMgcmVwbGllcy4gKi8KK3N0cnVjdCBvZl9idWNrZXRfY291bnRlciB7CisgICAgdWludDY0X3QgcGFja2V0X2NvdW50OworICAgIHVpbnQ2NF90IGJ5dGVfY291bnQ7Cit9OworCisvKiBCb2R5IG9mIE9GUE1QX0dST1VQX0RFU0MgcmVxdWVzdHMuICovCitzdHJ1Y3Qgb2ZfZ3JvdXBfZGVzY19zdGF0c19yZXF1ZXN0IDogb2Zfc3RhdHNfcmVxdWVzdCB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxODsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIHVpbnQxNl90IHN0YXRzX3R5cGUgPT0gNzsKKyAgICBlbnVtIG9mcF9zdGF0c19yZXF1ZXN0X2ZsYWdzIGZsYWdzOworICAgIHBhZCg0KTsKKyAgICB1aW50MzJfdCBncm91cF9pZDsKKyAgICBwYWQoNCk7Cit9OworCitzdHJ1Y3Qgb2ZfZ3JvdXBfZGVzY19zdGF0c19lbnRyeSB7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIGVudW0gb2ZwX2dyb3VwX3R5cGUgZ3JvdXBfdHlwZTsKKyAgICBwYWQoMSk7CisgICAgdWludDMyX3QgZ3JvdXBfaWQ7CisgICAgdWludDE2X3QgYnVja2V0X2FycmF5X2xlbiA9PSBsZW5ndGgoYnVja2V0cyk7CisgICAgcGFkKDYpOworICAgIGxpc3Qob2ZfYnVja2V0X3QpIGJ1Y2tldHM7CisgICAgbGlzdChvZl9ncm91cF9wcm9wX3QpIHByb3BlcnRpZXM7Cit9OworCisvKiBCb2R5IG9mIHJlcGx5IHRvIE9GUE1QX0dST1VQX0RFU0MgcmVxdWVzdC4gKi8KK3N0cnVjdCBvZl9ncm91cF9kZXNjX3N0YXRzX3JlcGx5IDogb2Zfc3RhdHNfcmVwbHkgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTk7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MTZfdCBzdGF0c190eXBlID09IDc7CisgICAgZW51bSBvZnBfc3RhdHNfcmVwbHlfZmxhZ3MgZmxhZ3M7CisgICAgcGFkKDQpOworICAgIGxpc3Qob2ZfZ3JvdXBfZGVzY19zdGF0c19lbnRyeV90KSBlbnRyaWVzOworfTsKKworLyogQm9keSBvZiBPRlBNUF9HUk9VUF9GRUFUVVJFUyByZXF1ZXN0LiBHcm91cCBmZWF0dXJlcy4gKi8KK3N0cnVjdCBvZl9ncm91cF9mZWF0dXJlc19zdGF0c19yZXF1ZXN0IDogb2Zfc3RhdHNfcmVxdWVzdCB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxODsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIHVpbnQxNl90IHN0YXRzX3R5cGUgPT0gODsKKyAgICBlbnVtIG9mcF9zdGF0c19yZXF1ZXN0X2ZsYWdzIGZsYWdzOworICAgIHBhZCg0KTsKK307CisKKy8qIEJvZHkgb2YgcmVwbHkgdG8gT0ZQTVBfR1JPVVBfRkVBVFVSRVMgcmVxdWVzdC4gR3JvdXAgZmVhdHVyZXMuICovCitzdHJ1Y3Qgb2ZfZ3JvdXBfZmVhdHVyZXNfc3RhdHNfcmVwbHkgOiBvZl9zdGF0c19yZXBseSB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxOTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIHVpbnQxNl90IHN0YXRzX3R5cGUgPT0gODsKKyAgICBlbnVtIG9mcF9zdGF0c19yZXBseV9mbGFncyBmbGFnczsKKyAgICBwYWQoNCk7CisgICAgdWludDMyX3QgdHlwZXM7CisgICAgZW51bSBvZnBfZ3JvdXBfY2FwYWJpbGl0aWVzIGNhcGFiaWxpdGllczsKKyAgICB1aW50MzJfdCBtYXhfZ3JvdXBzX2FsbDsKKyAgICB1aW50MzJfdCBtYXhfZ3JvdXBzX3NlbGVjdDsKKyAgICB1aW50MzJfdCBtYXhfZ3JvdXBzX2luZGlyZWN0OworICAgIHVpbnQzMl90IG1heF9ncm91cHNfZmY7CisgICAgdWludDMyX3QgYWN0aW9uc19hbGw7CisgICAgdWludDMyX3QgYWN0aW9uc19zZWxlY3Q7CisgICAgdWludDMyX3QgYWN0aW9uc19pbmRpcmVjdDsKKyAgICB1aW50MzJfdCBhY3Rpb25zX2ZmOworfTsKKworLyogQm9keSBvZiBPRlBNUF9NRVRFUl9TVEFUUyByZXF1ZXN0ICovCitzdHJ1Y3Qgb2ZfbWV0ZXJfc3RhdHNfcmVxdWVzdCA6IG9mX3N0YXRzX3JlcXVlc3QgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTg7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MTZfdCBzdGF0c190eXBlID09IDk7CisgICAgZW51bSBvZnBfc3RhdHNfcmVxdWVzdF9mbGFncyBmbGFnczsKKyAgICBwYWQoNCk7CisgICAgdWludDMyX3QgbWV0ZXJfaWQ7CisgICAgcGFkKDQpOworfTsKKworc3RydWN0IG9mX21ldGVyX3N0YXRzIHsKKyAgICB1aW50MzJfdCBtZXRlcl9pZDsKKyAgICB1aW50MTZfdCBsZW47CisgICAgcGFkKDYpOworICAgIHVpbnQzMl90IHJlZl9jb3VudDsKKyAgICB1aW50NjRfdCBwYWNrZXRfaW5fY291bnQ7CisgICAgdWludDY0X3QgYnl0ZV9pbl9jb3VudDsKKyAgICB1aW50MzJfdCBkdXJhdGlvbl9zZWM7CisgICAgdWludDMyX3QgZHVyYXRpb25fbnNlYzsKKyAgICBsaXN0KG9mX21ldGVyX2JhbmRfc3RhdHNfdCkgYmFuZF9zdGF0czsKK307CisKKy8qIEJvZHkgb2YgcmVwbHkgdG8gT0ZQTVBfTUVURVJfU1RBVFMgcmVxdWVzdCAqLworc3RydWN0IG9mX21ldGVyX3N0YXRzX3JlcGx5IDogb2Zfc3RhdHNfcmVwbHkgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTk7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MTZfdCBzdGF0c190eXBlID09IDk7CisgICAgZW51bSBvZnBfc3RhdHNfcmVwbHlfZmxhZ3MgZmxhZ3M7CisgICAgcGFkKDQpOworICAgIGxpc3Qob2ZfbWV0ZXJfc3RhdHNfdCkgZW50cmllczsKK307CisKKy8qIFN0YXRpc3RpY3MgZm9yIGVhY2ggbWV0ZXIgYmFuZCAqLworc3RydWN0IG9mX21ldGVyX2JhbmRfc3RhdHMgeworICAgIHVpbnQ2NF90IHBhY2tldF9iYW5kX2NvdW50OworICAgIHVpbnQ2NF90IGJ5dGVfYmFuZF9jb3VudDsKK307CisKKy8qIEJvZHkgb2YgT0ZQTVBfTUVURVJfREVTQyByZXF1ZXN0ICovCitzdHJ1Y3Qgb2ZfbWV0ZXJfY29uZmlnX3N0YXRzX3JlcXVlc3QgOiBvZl9zdGF0c19yZXF1ZXN0IHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE4OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDE2X3Qgc3RhdHNfdHlwZSA9PSAxMDsKKyAgICBlbnVtIG9mcF9zdGF0c19yZXF1ZXN0X2ZsYWdzIGZsYWdzOworICAgIHBhZCg0KTsKKyAgICB1aW50MzJfdCBtZXRlcl9pZDsKKyAgICBwYWQoNCk7Cit9OworCitzdHJ1Y3Qgb2ZfbWV0ZXJfY29uZmlnIHsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgZW51bSBvZnBfbWV0ZXJfZmxhZ3MgZmxhZ3M7CisgICAgdWludDMyX3QgbWV0ZXJfaWQ7CisgICAgbGlzdChvZl9tZXRlcl9iYW5kX3QpIGVudHJpZXM7Cit9OworCisvKiBCb2R5IG9mIHJlcGx5IHRvIE9GUE1QX01FVEVSX0RFU0MgcmVxdWVzdCAqLworc3RydWN0IG9mX21ldGVyX2NvbmZpZ19zdGF0c19yZXBseSA6IG9mX3N0YXRzX3JlcGx5IHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE5OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDE2X3Qgc3RhdHNfdHlwZSA9PSAxMDsKKyAgICBlbnVtIG9mcF9zdGF0c19yZXBseV9mbGFncyBmbGFnczsKKyAgICBwYWQoNCk7CisgICAgbGlzdChvZl9tZXRlcl9jb25maWdfdCkgZW50cmllczsKK307CisKKworLyogQm9keSBvZiBPRlBNUF9NRVRFUl9GRUFUVVJFUyByZXF1ZXN0LiAqLworc3RydWN0IG9mX21ldGVyX2ZlYXR1cmVzX3N0YXRzX3JlcXVlc3QgOiBvZl9zdGF0c19yZXF1ZXN0IHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE4OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDE2X3Qgc3RhdHNfdHlwZSA9PSAxMTsKKyAgICBlbnVtIG9mcF9zdGF0c19yZXF1ZXN0X2ZsYWdzIGZsYWdzOworICAgIHBhZCg0KTsKK307CisKK3N0cnVjdCBvZl9tZXRlcl9mZWF0dXJlcyB7CisgICAgdWludDMyX3QgICAgbWF4X21ldGVyOworICAgIHVpbnQzMl90ICAgIGJhbmRfdHlwZXM7CisgICAgdWludDMyX3QgICAgY2FwYWJpbGl0aWVzOworICAgIHVpbnQ4X3QgICAgIG1heF9iYW5kczsKKyAgICB1aW50OF90ICAgICBtYXhfY29sb3I7CisgICAgcGFkKDIpOworICAgIHVpbnQzMl90IGZlYXR1cmVzOworICAgIHBhZCg0KTsKK307CisKKy8qIEJvZHkgb2YgcmVwbHkgdG8gT0ZQTVBfTUVURVJfRkVBVFVSRVMgcmVxdWVzdC4gTWV0ZXIgZmVhdHVyZXMuICovCitzdHJ1Y3Qgb2ZfbWV0ZXJfZmVhdHVyZXNfc3RhdHNfcmVwbHkgOiBvZl9zdGF0c19yZXBseSB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxOTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIHVpbnQxNl90IHN0YXRzX3R5cGUgPT0gMTE7CisgICAgZW51bSBvZnBfc3RhdHNfcmVwbHlfZmxhZ3MgZmxhZ3M7CisgICAgcGFkKDQpOworICAgIG9mX21ldGVyX2ZlYXR1cmVzX3QgZmVhdHVyZXM7CisKK307CisKKy8qIEJvZHkgb2YgT0ZQTVBfVEFCTEVfU1RBVFMgcmVxdWVzdC4gKi8KK3N0cnVjdCBvZl90YWJsZV9zdGF0c19yZXF1ZXN0IDogb2Zfc3RhdHNfcmVxdWVzdCB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxODsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIHVpbnQxNl90IHN0YXRzX3R5cGUgPT0gMzsKKyAgICBlbnVtIG9mcF9zdGF0c19yZXF1ZXN0X2ZsYWdzIGZsYWdzOworICAgIHBhZCg0KTsKK307CisKK3N0cnVjdCBvZl90YWJsZV9zdGF0c19lbnRyeSB7CisgICAgdWludDhfdCB0YWJsZV9pZDsKKyAgICBwYWQoMyk7CisgICAgdWludDMyX3QgYWN0aXZlX2NvdW50OworICAgIHVpbnQ2NF90IGxvb2t1cF9jb3VudDsKKyAgICB1aW50NjRfdCBtYXRjaGVkX2NvdW50OworfTsKKworLyogQm9keSBvZiByZXBseSB0byBPRlBNUF9UQUJMRV9TVEFUUyByZXF1ZXN0LiAqLworc3RydWN0IG9mX3RhYmxlX3N0YXRzX3JlcGx5IDogb2Zfc3RhdHNfcmVwbHkgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTk7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MTZfdCBzdGF0c190eXBlID09IDM7CisgICAgZW51bSBvZnBfc3RhdHNfcmVwbHlfZmxhZ3MgZmxhZ3M7CisgICAgcGFkKDQpOworICAgIGxpc3Qob2ZfdGFibGVfc3RhdHNfZW50cnlfdCkgZW50cmllczsKK307CisKKy8qIEZsb3cgbW9uaXRvciBjb21tYW5kcyAqLworZW51bSBvZnBfZmxvd19tb25pdG9yX2NvbW1hbmQod2lyZV90eXBlPXVpbnQ4X3QpIHsKKyAgICBPRlBGTUNfQUREID0gMCwKKyAgICBPRlBGTUNfTU9ESUZZID0gMSwKKyAgICBPRlBGTUNfREVMRVRFID0gMiwKK307CisKK3N0cnVjdCBvZl9mbG93X21vbml0b3JfZW50cnkgeworICAgIHVpbnQzMl90IG1vbml0b3JfaWQ7CisgICAgdWludDMyX3Qgb3V0X3BvcnQ7CisgICAgdWludDMyX3Qgb3V0X2dyb3VwOworICAgIGVudW0gb2ZwX2Zsb3dfbW9uaXRvcl9mbGFncyBmbGFnczsKKyAgICB1aW50OF90IHRhYmxlX2lkOworICAgIGVudW0gb2ZwX2Zsb3dfbW9uaXRvcl9jb21tYW5kIGNvbW1hbmQ7CisgICAgb2ZfbWF0Y2hfdCBtYXRjaDsKK307CisKKy8qIEJvZHkgb2YgT0ZQTVBfRkxPV19NT05JVE9SIHJlcXVlc3QgKi8KK3N0cnVjdCBvZl9mbG93X21vbml0b3JfcmVxdWVzdCA6IG9mX3N0YXRzX3JlcXVlc3QgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTg7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MTZfdCBzdGF0c190eXBlID09IDE2OworICAgIGVudW0gb2ZwX3N0YXRzX3JlcXVlc3RfZmxhZ3MgZmxhZ3M7CisgICAgcGFkKDQpOworICAgIGxpc3Qob2ZfZmxvd19tb25pdG9yX2VudHJ5X3QpIGVudHJpZXM7Cit9OworCitlbnVtIG9mcF9mbG93X3VwZGF0ZV9ldmVudCh3aXJlX3R5cGU9dWludDE2X3QpIHsKKyAgICBPRlBGTUVfSU5JVElBTCA9IDAsCisgICAgT0ZQRk1FX0FEREVEID0gMSwKKyAgICBPRlBGTUVfUkVNT1ZFRCA9IDIsCisgICAgT0ZQRk1FX01PRElGSUVEID0gMywKKyAgICBPRlBGTUVfQUJCUkVWID0gNCwKKyAgICBPRlBGTUVfUEFVU0VEID0gNSwKKyAgICBPRlBGTUVfUkVTVU1FRCA9IDYsCit9OworCitzdHJ1Y3Qgb2ZfZmxvd19tb25pdG9yX3JlcGx5X2VudHJ5IHsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgZW51bSBvZnBfZmxvd191cGRhdGVfZXZlbnQgZXZlbnQ7Cit9OworCisvKiBCb2R5IG9mIE9GUE1QX0ZMT1dfTU9OSVRPUiByZXBseSAqLworc3RydWN0IG9mX2Zsb3dfbW9uaXRvcl9yZXBseSA6IG9mX3N0YXRzX3JlcGx5IHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE5OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDE2X3Qgc3RhdHNfdHlwZSA9PSAxNjsKKyAgICBlbnVtIG9mcF9zdGF0c19yZXBseV9mbGFncyBmbGFnczsKKyAgICBwYWQoNCk7CisgICAgbGlzdChvZl9mbG93X21vbml0b3JfcmVwbHlfZW50cnlfdCkgZW50cmllczsKK307CisKKy8qIEJvZHkgb2YgT0ZQTVBfVEFCTEVfREVTQyByZXF1ZXN0LiAqLworc3RydWN0IG9mX3RhYmxlX2Rlc2Nfc3RhdHNfcmVxdWVzdCA6IG9mX3N0YXRzX3JlcXVlc3QgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTg7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MTZfdCBzdGF0c190eXBlID09IDE0OworICAgIGVudW0gb2ZwX3N0YXRzX3JlcXVlc3RfZmxhZ3MgZmxhZ3M7CisgICAgcGFkKDQpOworfTsKKworLyogQm9keSBvZiByZXBseSB0byBPRlBNUF9UQUJMRV9ERVNDIHJlcXVlc3QuICovCitzdHJ1Y3Qgb2ZfdGFibGVfZGVzY19zdGF0c19yZXBseSA6IG9mX3N0YXRzX3JlcGx5IHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE5OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDE2X3Qgc3RhdHNfdHlwZSA9PSAxNDsKKyAgICBlbnVtIG9mcF9zdGF0c19yZXBseV9mbGFncyBmbGFnczsKKyAgICBwYWQoNCk7CisgICAgbGlzdChvZl90YWJsZV9kZXNjX3QpIGVudHJpZXM7Cit9OworCisKKy8qIEJvZHkgb2YgT0ZQTVBfVEFCTEVfRkVBVFVSRVMgcmVxdWVzdC4gKi8KK3N0cnVjdCBvZl90YWJsZV9mZWF0dXJlc19zdGF0c19yZXF1ZXN0IDogb2Zfc3RhdHNfcmVxdWVzdCB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxODsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIHVpbnQxNl90IHN0YXRzX3R5cGUgPT0gMTI7CisgICAgZW51bSBvZnBfc3RhdHNfcmVxdWVzdF9mbGFncyBmbGFnczsKKyAgICBwYWQoNCk7CisgICAgbGlzdChvZl90YWJsZV9mZWF0dXJlc190KSBlbnRyaWVzOworfTsKKworc3RydWN0IG9mX3RhYmxlX2ZlYXR1cmVzIHsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDhfdCB0YWJsZV9pZDsKKyAgICBlbnVtIG9mcF90YWJsZV9mZWF0dXJlc19jb21tYW5kIGNvbW1hbmQ7CisgICAgZW51bSBvZnBfdGFibGVfZmVhdHVyZV9mbGFnIGZlYXR1cmVzOworICAgIG9mX3RhYmxlX25hbWVfdCBuYW1lOworICAgIHVpbnQ2NF90IG1ldGFkYXRhX21hdGNoOworICAgIHVpbnQ2NF90IG1ldGFkYXRhX3dyaXRlOworICAgIGVudW0gb2ZwX3RhYmxlX2NvbmZpZyBjYXBhYmlsaXRpZXM7CisgICAgdWludDMyX3QgbWF4X2VudHJpZXM7CisgICAgbGlzdChvZl90YWJsZV9mZWF0dXJlX3Byb3BfdCkgcHJvcGVydGllczsKK307CisKKy8qIEJvZHkgb2YgcmVwbHkgdG8gT0ZQTVBfVEFCTEVfRkVBVFVSRVMgcmVxdWVzdC4gKi8KK3N0cnVjdCBvZl90YWJsZV9mZWF0dXJlc19zdGF0c19yZXBseSA6IG9mX3N0YXRzX3JlcGx5IHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE5OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDE2X3Qgc3RhdHNfdHlwZSA9PSAxMjsKKyAgICBlbnVtIG9mcF9zdGF0c19yZXBseV9mbGFncyBmbGFnczsKKyAgICBwYWQoNCk7CisgICAgbGlzdChvZl90YWJsZV9mZWF0dXJlc190KSBlbnRyaWVzOworfTsKKworLyogQ29tbW9uIGhlYWRlciBmb3IgYWxsIFRhYmxlIEZlYXR1cmUgUHJvcGVydGllcyAqLworc3RydWN0IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcCB7CisgICAgdWludDE2X3QgICAgICAgICB0eXBlID09ID87CisgICAgdWludDE2X3QgICAgICAgICBsZW5ndGg7Cit9OworCisvKiBJbnN0cnVjdGlvbnMgcHJvcGVydHkgKi8KK3N0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3BfaW5zdHJ1Y3Rpb25zIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKKyAgICB1aW50MTZfdCAgICAgICAgIHR5cGUgPT0gMDsKKyAgICB1aW50MTZfdCAgICAgICAgIGxlbmd0aDsKKyAgICAvLyBGSVhNRSBDaGVjayBpZiBpbnN0cnVjdGlvbl90IGlzIHJpZ2h0IGZvciBpZHMgaGVyZQorICAgIGxpc3Qob2ZfaW5zdHJ1Y3Rpb25faWRfdCkgICBpbnN0cnVjdGlvbl9pZHM7Cit9OworCisvKiBJbnN0cnVjdGlvbiBNaXNzIHByb3BlcnR5ICovCitzdHJ1Y3Qgb2ZfdGFibGVfZmVhdHVyZV9wcm9wX2luc3RydWN0aW9uc19taXNzIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKKyAgICB1aW50MTZfdCAgICAgICAgIHR5cGUgPT0gMTsKKyAgICB1aW50MTZfdCAgICAgICAgIGxlbmd0aDsKKyAgICBsaXN0KG9mX2luc3RydWN0aW9uX2lkX3QpICAgaW5zdHJ1Y3Rpb25faWRzOworfTsKKworLyogSW5zdHJ1Y3Rpb24gSUQgKi8KK3N0cnVjdCBvZl9pbnN0cnVjdGlvbl9pZCB7CisgICAgdWludDE2X3QgdHlwZTsKKyAgICB1aW50MTZfdCBsZW47CisgICAgb2Zfb2N0ZXRzX3QgZXhwX2RhdGE7Cit9OworCisvKiBPRlBURlBUX1RBQkxFX1NZTkNfRlJPTSBwcm9wZXJ0eSAqLworc3RydWN0IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcF90YWJsZV9zeW5jX2Zyb20gOiBvZl90YWJsZV9mZWF0dXJlX3Byb3AgeworICAgIHVpbnQxNl90ICAgICAgICAgdHlwZSA9PSAxNjsKKyAgICB1aW50MTZfdCAgICAgICAgIGxlbmd0aDsKKyAgICBsaXN0KG9mX3VpbnQ4X3QpIHRhYmxlX2lkczsKK307CisKKy8qIE9GUFRGUFRfTkVYVF9UQUJMRVMgcHJvcGVydHkgKi8KK3N0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3BfbmV4dF90YWJsZXMgOiBvZl90YWJsZV9mZWF0dXJlX3Byb3AgeworICAgIHVpbnQxNl90ICAgICAgICAgdHlwZSA9PSAyOworICAgIHVpbnQxNl90ICAgICAgICAgbGVuZ3RoOworICAgIGxpc3Qob2ZfdWludDhfdCkgbmV4dF90YWJsZV9pZHM7Cit9OworCisvKiBORVhUX1RBQkxFU19NSVNTIHByb3BlcnR5ICovCitzdHJ1Y3Qgb2ZfdGFibGVfZmVhdHVyZV9wcm9wX25leHRfdGFibGVzX21pc3MgOiBvZl90YWJsZV9mZWF0dXJlX3Byb3AgeworICAgIHVpbnQxNl90ICAgICAgICAgdHlwZSA9PSAzOworICAgIHVpbnQxNl90ICAgICAgICAgbGVuZ3RoOworICAgIGxpc3Qob2ZfdWludDhfdCkgbmV4dF90YWJsZV9pZHM7Cit9OworCisvKiBPRlBURlBUX1dSSVRFX0FDVElPTlMgcHJvcGVydHkgKi8KK3N0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3Bfd3JpdGVfYWN0aW9ucyA6IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcCB7CisgICAgdWludDE2X3QgICAgICAgICB0eXBlID09IDQ7CisgICAgdWludDE2X3QgICAgICAgICBsZW5ndGg7CisgICAgbGlzdChvZl9hY3Rpb25faWRfdCkgYWN0aW9uX2lkczsKK307CisKKy8qIEZQVEZQVF9XUklURV9BQ1RJT05TX01JU1MgcHJvcGVydHkgKi8KK3N0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3Bfd3JpdGVfYWN0aW9uc19taXNzIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKKyAgICB1aW50MTZfdCAgICAgICAgIHR5cGUgPT0gNTsKKyAgICB1aW50MTZfdCAgICAgICAgIGxlbmd0aDsKKyAgICBsaXN0KG9mX2FjdGlvbl9pZF90KSBhY3Rpb25faWRzOworfTsKKworLyogT0ZQVEZQVF9BUFBMWV9BQ1RJT05TIHByb3BlcnR5ICovCitzdHJ1Y3Qgb2ZfdGFibGVfZmVhdHVyZV9wcm9wX2FwcGx5X2FjdGlvbnMgOiBvZl90YWJsZV9mZWF0dXJlX3Byb3AgeworICAgIHVpbnQxNl90ICAgICAgICAgdHlwZSA9PSA2OworICAgIHVpbnQxNl90ICAgICAgICAgbGVuZ3RoOworICAgIGxpc3Qob2ZfYWN0aW9uX2lkX3QpIGFjdGlvbl9pZHM7Cit9OworCisvKiBPRlBURlBUX0FQUExZX0FDVElPTlNfTUlTUyBwcm9wZXJ0eSAqLworc3RydWN0IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcF9hcHBseV9hY3Rpb25zX21pc3MgOiBvZl90YWJsZV9mZWF0dXJlX3Byb3AgeworICAgIHVpbnQxNl90ICAgICAgICAgdHlwZSA9PSA3OworICAgIHVpbnQxNl90ICAgICAgICAgbGVuZ3RoOworICAgIGxpc3Qob2ZfYWN0aW9uX2lkX3QpIGFjdGlvbl9pZHM7Cit9OworCisvKiBBY3Rpb24gSUQgKi8KK3N0cnVjdCBvZl9hY3Rpb25faWQgeworICAgIHVpbnQxNl90IHR5cGU7CisgICAgdWludDE2X3QgbGVuOworICAgIG9mX29jdGV0c190IGV4cF9kYXRhOworfTsKKworLyogT0ZQVEZQVF9NQVRDSCBwcm9wZXJ0eSAqLworc3RydWN0IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcF9tYXRjaCA6IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcCB7CisgICAgdWludDE2X3QgICAgICAgICB0eXBlID09IDg7CisgICAgdWludDE2X3QgICAgICAgICBsZW5ndGg7CisgICAgbGlzdChvZl91aW50MzJfdCkgb3htX2lkczsKK307CisKKy8qIE9GUFRGUFRfV0lMRENBUkRTIHByb3BlcnR5ICovCitzdHJ1Y3Qgb2ZfdGFibGVfZmVhdHVyZV9wcm9wX3dpbGRjYXJkcyA6IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcCB7CisgICAgdWludDE2X3QgICAgICAgICB0eXBlID09IDEwOworICAgIHVpbnQxNl90ICAgICAgICAgbGVuZ3RoOworICAgIGxpc3Qob2ZfdWludDMyX3QpIG94bV9pZHM7Cit9OworCisvKiBPRlBURlBUX1dSSVRFX1NFVEZJRUxEIHByb3BlcnR5ICovCitzdHJ1Y3Qgb2ZfdGFibGVfZmVhdHVyZV9wcm9wX3dyaXRlX3NldGZpZWxkIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKKyAgICB1aW50MTZfdCAgICAgICAgIHR5cGUgPT0gMTI7CisgICAgdWludDE2X3QgICAgICAgICBsZW5ndGg7CisgICAgbGlzdChvZl91aW50MzJfdCkgb3htX2lkczsKK307CisKKy8qIE9GUFRGUFRfV1JJVEVfU0VURklFTERfTUlTUyBwcm9wZXJ0eSAqLworc3RydWN0IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcF93cml0ZV9zZXRmaWVsZF9taXNzIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKKyAgICB1aW50MTZfdCAgICAgICAgIHR5cGUgPT0gMTM7CisgICAgdWludDE2X3QgICAgICAgICBsZW5ndGg7CisgICAgbGlzdChvZl91aW50MzJfdCkgb3htX2lkczsKK307CisKKy8qIE9GUFRGUFRfQVBQTFlfU0VURklFTEQgcHJvcGVydHkgKi8KK3N0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3BfYXBwbHlfc2V0ZmllbGQgOiBvZl90YWJsZV9mZWF0dXJlX3Byb3AgeworICAgIHVpbnQxNl90ICAgICAgICAgdHlwZSA9PSAxNDsKKyAgICB1aW50MTZfdCAgICAgICAgIGxlbmd0aDsKKyAgICBsaXN0KG9mX3VpbnQzMl90KSBveG1faWRzOworfTsKKworLyogT0ZQVEZQVF9BUFBMWV9TRVRGSUVMRF9NSVNTIHByb3BlcnR5ICovCitzdHJ1Y3Qgb2ZfdGFibGVfZmVhdHVyZV9wcm9wX2FwcGx5X3NldGZpZWxkX21pc3MgOiBvZl90YWJsZV9mZWF0dXJlX3Byb3AgeworICAgIHVpbnQxNl90ICAgICAgICAgdHlwZSA9PSAxNTsKKyAgICB1aW50MTZfdCAgICAgICAgIGxlbmd0aDsKKyAgICBsaXN0KG9mX3VpbnQzMl90KSBveG1faWRzOworfTsKKworLyogT0ZQVEZQVF9XUklURV9DT1BZRklFTEQgcHJvcGVydHkgKi8KK3N0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3Bfd3JpdGVfY29weWZpZWxkIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKKyAgICB1aW50MTZfdCAgICAgICAgIHR5cGUgPT0gMTg7CisgICAgdWludDE2X3QgICAgICAgICBsZW5ndGg7CisgICAgbGlzdChvZl91aW50MzJfdCkgb3htX2lkczsKK307CisKKy8qIE9GUFRGUFRfV1JJVEVfQ09QWUZJRUxEX01JU1MgcHJvcGVydHkgKi8KK3N0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3Bfd3JpdGVfY29weWZpZWxkX21pc3MgOiBvZl90YWJsZV9mZWF0dXJlX3Byb3AgeworICAgIHVpbnQxNl90ICAgICAgICAgdHlwZSA9PSAxOTsKKyAgICB1aW50MTZfdCAgICAgICAgIGxlbmd0aDsKKyAgICBsaXN0KG9mX3VpbnQzMl90KSBveG1faWRzOworfTsKKworLyogT0ZQVEZQVF9BUFBMWV9DT1BZRklFTEQgcHJvcGVydHkgKi8KK3N0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3BfYXBwbHlfY29weWZpZWxkIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKKyAgICB1aW50MTZfdCAgICAgICAgIHR5cGUgPT0gMjA7CisgICAgdWludDE2X3QgICAgICAgICBsZW5ndGg7CisgICAgbGlzdChvZl91aW50MzJfdCkgb3htX2lkczsKK307CisKKy8qIE9GUFRGUFRfQVBQTFlfQ09QWUZJRUxEX01JU1MgcHJvcGVydHkgKi8KK3N0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3BfYXBwbHlfY29weWZpZWxkX21pc3MgOiBvZl90YWJsZV9mZWF0dXJlX3Byb3AgeworICAgIHVpbnQxNl90ICAgICAgICAgdHlwZSA9PSAyMTsKKyAgICB1aW50MTZfdCAgICAgICAgIGxlbmd0aDsKKyAgICBsaXN0KG9mX3VpbnQzMl90KSBveG1faWRzOworfTsKKworLyogT0ZQVEZQVF9QQUNLRVRfVFlQRVMgcHJvcGVydHkgKi8KK3N0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3Bfb3htX3ZhbHVlcyB7CisgICAgdWludDE2X3QgdHlwZSA9PSAyMjsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgb2Zfb2N0ZXRzX3Qgb3htX3ZhbHVlczsKK307CisKKy8qIE9GUFRGUFRfRVhQRVJJTUVOVEVSIHByb3BlcnR5ICovCitzdHJ1Y3Qgb2ZfdGFibGVfZmVhdHVyZV9wcm9wX2V4cGVyaW1lbnRlciA6IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcCB7CisgICAgdWludDE2X3QgICAgICAgICB0eXBlID09IDY1NTM0OworICAgIHVpbnQxNl90ICAgICAgICAgbGVuZ3RoOworICAgIHVpbnQzMl90ICAgICAgICAgZXhwZXJpbWVudGVyID09ID87CisgICAgdWludDMyX3QgICAgICAgICBzdWJ0eXBlOworfTsKKworLyogT0ZQVEZQVF9FWFBFUklNRU5URVJfTUlTUyBwcm9wZXJ0eSAqLworc3RydWN0IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcF9leHBlcmltZW50ZXJfbWlzcyA6IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcCB7CisgICAgdWludDE2X3QgICAgICAgICB0eXBlID09IDY1NTM1OworICAgIHVpbnQxNl90ICAgICAgICAgbGVuZ3RoOworICAgIHVpbnQzMl90ICAgICAgICAgZXhwZXJpbWVudGVyID09ID87CisgICAgdWludDMyX3QgICAgICAgICBzdWJ0eXBlOworfTsKKworLyoKKyAqIE5vdCBzdXBwb3J0aW5nIHRoZSBmbG93IG1vbml0b3IgbXVsdGlwYXJ0IG1lc3NhZ2VzLiBUaGlzIG1lc3NhZ2UgaXMKKyAqIHBvb3JseSBkZXNpZ25lZCBiZWNhdXNlIGl0IGluY2x1ZGVzIGEgdmFyaWFibGUgbGVuZ3RoIG1hdGNoIGluc2lkZSBhCisgKiBzdHJ1Y3QgKG9mcF9mbG93X21vbml0b3JfcmVxdWVzdCkgd2l0aCBubyBleHBsaWNpdCBsZW5ndGggbWVtYmVyLgorICogSSdtIG5vdCB3cml0aW5nIHRoZSBzcGVjaWFsIGNhc2UgY29kZSB0byBmaWd1cmUgb3V0IHRoZSB0b3RhbCBsZW5ndGguCisgKi8KKworCisgLyogU2VuZCBwYWNrZXQgKGNvbnRyb2xsZXIgLT4gZGF0YXBhdGgpLiAqLworIHN0cnVjdCBvZl9wYWNrZXRfb3V0IDogb2ZfaGVhZGVyIHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDEzOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDMyX3QgYnVmZmVyX2lkOworICAgIHVpbnQxNl90IGFjdGlvbnNfbGVuID09IGxlbmd0aChhY3Rpb25zKTsKKyAgICBwYWQoMik7CisgICAgb2ZfbWF0Y2hfdCBtYXRjaDsKKyAgICBsaXN0KG9mX2FjdGlvbl90KSBhY3Rpb25zOworICAgIG9mX29jdGV0c190IGRhdGE7Cit9OworCisvKiBCYXJyaWVyIG1lc3NhZ2UgcmVxdWVzdCAqLworc3RydWN0IG9mX2JhcnJpZXJfcmVxdWVzdCA6IG9mX2hlYWRlciB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAyMDsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworfTsKKworLyogQmFycmllciBtZXNzYWdlIHJlcXVlc3QgKi8KK3N0cnVjdCBvZl9iYXJyaWVyX3JlcGx5IDogb2ZfaGVhZGVyIHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDIxOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7Cit9OworCisvKiBSb2xlIHJlcXVlc3QgKi8KK3N0cnVjdCBvZl9yb2xlX3JlcXVlc3QgOiBvZl9oZWFkZXIgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMjQ7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICBlbnVtIG9mcF9jb250cm9sbGVyX3JvbGUgcm9sZTsKKyAgICB1aW50MTZfdCBzaG9ydF9pZDsKKyAgICBwYWQoMik7CisgICAgdWludDY0X3QgZ2VuZXJhdGlvbl9pZDsKK307CisKKy8qIFJvbGUgcmVwbHkgKi8KK3N0cnVjdCBvZl9yb2xlX3JlcGx5IDogb2ZfaGVhZGVyIHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDI1OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgZW51bSBvZnBfY29udHJvbGxlcl9yb2xlIHJvbGU7CisgICAgdWludDE2X3Qgc2hvcnRfaWQ7CisgICAgcGFkKDIpOworICAgIHVpbnQ2NF90IGdlbmVyYXRpb25faWQ7Cit9OworCisvKiBCdW5kbGUgY29udHJvbCBtZXNzYWdlICovCitzdHJ1Y3Qgb2ZfYnVuZGxlX2N0cmxfbXNnIDogb2ZfaGVhZGVyIHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDMzOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDMyX3QgYnVuZGxlX2lkOworICAgIGVudW0gb2ZwX2J1bmRsZV9jdHJsX3R5cGUgYnVuZGxlX2N0cmxfdHlwZTsKKyAgICBlbnVtIG9mcF9idW5kbGVfZmxhZ3MgZmxhZ3M7CisgICAgbGlzdChvZl9idW5kbGVfcHJvcF90KSBwcm9wZXJ0aWVzOworfTsKKworLyogQnVuZGxlIGFkZCBtZXNzYWdlICovCitzdHJ1Y3Qgb2ZfYnVuZGxlX2FkZF9tc2cgOiBvZl9oZWFkZXIgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMzQ7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MzJfdCBidW5kbGVfaWQ7CisgICAgcGFkKDEpOworICAgIGVudW0gb2ZwX2J1bmRsZV9mbGFncyBmbGFnczsKKyAgICBvZl9oZWFkZXJfdCBtZXNzYWdlOworICAgIGxpc3Qob2ZfYnVuZGxlX3Byb3BfdCkgcHJvcGVydGllczsKK307CisKKy8qIEJ1bmRsZSBwcm9wZXJ0eSB0eXBlcy4gKi8KK3N0cnVjdCBvZl9idW5kbGVfcHJvcCB7CisgICAgdWludDE2X3QgdHlwZSA9PSA/OworICAgIHVpbnQxNl90IGxlbmd0aDsKK307CisKKy8qIEJ1bmRsZSB0aW1lIHByb3BlcnR5LiAqLworc3RydWN0IG9mX2J1bmRsZV9wcm9wX3RpbWUgOiBvZl9idW5kbGVfcHJvcCB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICBwYWQoNCk7CisgICAgbGlzdChvZl90aW1lX3QpIHNjaGVkdWxlZF90aW1lOworfTsKKworLyogRXhwZXJpbWVudGVyIGJ1bmRsZSBwcm9wZXJ0eSAqLworc3RydWN0IG9mX2J1bmRsZV9wcm9wX2V4cGVyaW1lbnRlciA6IG9mX2J1bmRsZV9wcm9wIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDY1NTM1OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCBleHBlcmltZW50ZXIgPT0gPzsKKyAgICB1aW50MzJfdCBleHBfdHlwZTsKK307CisKKy8qIFRpbWUgRm9ybWF0LiAqLworc3RydWN0IG9mX3RpbWUgeworICAgIHVpbnQ2NF90IHNlY29uZHM7CisgICAgdWludDMyX3QgbmFub3NlY29uZHM7CisgICAgcGFkKDQpOworfTsKKworLyogQ29tbW9uIGhlYWRlciBmb3IgYWxsIGFzeW5jIGNvbmZpZyBQcm9wZXJ0aWVzICovCitzdHJ1Y3Qgb2ZfYXN5bmNfY29uZmlnX3Byb3AgeworICAgIHVpbnQxNl90IHR5cGUgPT0gPzsKKyAgICB1aW50MTZfdCBsZW5ndGg7Cit9OworCisvKiBPRlBBQ1BUX1BBQ0tFVF9JTl9TTEFWRSBwcm9wZXJ0eSAqLworc3RydWN0IG9mX2FzeW5jX2NvbmZpZ19wcm9wX3BhY2tldF9pbl9zbGF2ZSA6IG9mX2FzeW5jX2NvbmZpZ19wcm9wIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDA7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IG1hc2s7Cit9OworCisvKiBPRlBBQ1BUX1BBQ0tFVF9JTl9NQVNURVIgcHJvcGVydHkgKi8KK3N0cnVjdCBvZl9hc3luY19jb25maWdfcHJvcF9wYWNrZXRfaW5fbWFzdGVyIDogb2ZfYXN5bmNfY29uZmlnX3Byb3AgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgbWFzazsKK307CisKKy8qIE9GUEFDUFRfUE9SVF9TVEFUVVNfU0xBVkUgcHJvcGVydHkgKi8KK3N0cnVjdCBvZl9hc3luY19jb25maWdfcHJvcF9wb3J0X3N0YXR1c19zbGF2ZSA6IG9mX2FzeW5jX2NvbmZpZ19wcm9wIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDI7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IG1hc2s7Cit9OworCisvKiBPRlBBQ1BUX1BPUlRfU1RBVFVTX01BU1RFUiBwcm9wZXJ0eSAqLworc3RydWN0IG9mX2FzeW5jX2NvbmZpZ19wcm9wX3BvcnRfc3RhdHVzX21hc3RlciA6IG9mX2FzeW5jX2NvbmZpZ19wcm9wIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDM7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IG1hc2s7Cit9OworCisvKiBPRlBBQ1BUX0ZMT1dfUkVNT1ZFRF9TTEFWRSBwcm9wZXJ0eSAqLworc3RydWN0IG9mX2FzeW5jX2NvbmZpZ19wcm9wX2Zsb3dfcmVtb3ZlZF9zbGF2ZSA6IG9mX2FzeW5jX2NvbmZpZ19wcm9wIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDQ7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IG1hc2s7Cit9OworCisvKiBPRlBBQ1BUX0ZMT1dfUkVNT1ZFRF9NQVNURVIgcHJvcGVydHkgKi8KK3N0cnVjdCBvZl9hc3luY19jb25maWdfcHJvcF9mbG93X3JlbW92ZWRfbWFzdGVyIDogb2ZfYXN5bmNfY29uZmlnX3Byb3AgeworICAgIHVpbnQxNl90IHR5cGUgPT0gNTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgbWFzazsKK307CisKKy8qIE9GUEFDUFRfUk9MRV9TVEFUVVNfU0xBVkUgcHJvcGVydHkgKi8KK3N0cnVjdCBvZl9hc3luY19jb25maWdfcHJvcF9yb2xlX3N0YXR1c19zbGF2ZSA6IG9mX2FzeW5jX2NvbmZpZ19wcm9wIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDY7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IG1hc2s7Cit9OworCisvKiBPRlBBQ1BUX1JPTEVfU1RBVFVTX01BU1RFUiBwcm9wZXJ0eSAqLworc3RydWN0IG9mX2FzeW5jX2NvbmZpZ19wcm9wX3JvbGVfc3RhdHVzX21hc3RlciA6IG9mX2FzeW5jX2NvbmZpZ19wcm9wIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDc7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IG1hc2s7Cit9OworCisvKiBPRlBBQ1BUX1RBQkxFX1NUQVRVU19TTEFWRSBwcm9wZXJ0eSAqLworc3RydWN0IG9mX2FzeW5jX2NvbmZpZ19wcm9wX3RhYmxlX3N0YXR1c19zbGF2ZSA6IG9mX2FzeW5jX2NvbmZpZ19wcm9wIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDg7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IG1hc2s7Cit9OworCisvKiBPRlBBQ1BUX1RBQkxFX1NUQVRVU19NQVNURVIgcHJvcGVydHkgKi8KK3N0cnVjdCBvZl9hc3luY19jb25maWdfcHJvcF90YWJsZV9zdGF0dXNfbWFzdGVyIDogb2ZfYXN5bmNfY29uZmlnX3Byb3AgeworICAgIHVpbnQxNl90IHR5cGUgPT0gOTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgbWFzazsKK307CisKKy8qIE9GUEFDUFRfUkVRVUVTVEZPUldBUkRfU0xBVkUgcHJvcGVydHkgKi8KK3N0cnVjdCBvZl9hc3luY19jb25maWdfcHJvcF9yZXF1ZXN0Zm9yd2FyZF9zbGF2ZSA6IG9mX2FzeW5jX2NvbmZpZ19wcm9wIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDEwOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCBtYXNrOworfTsKKworLyogT0ZQQUNQVF9SRVFVRVNURk9SV0FSRF9NQVNURVIgcHJvcGVydHkgKi8KK3N0cnVjdCBvZl9hc3luY19jb25maWdfcHJvcF9yZXF1ZXN0Zm9yd2FyZF9tYXN0ZXIgOiBvZl9hc3luY19jb25maWdfcHJvcCB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxMTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgbWFzazsKK307CisKKy8qIE9GUEFDUFRfRkxPV19TVEFUU19TTEFWRSBwcm9wZXJ0eSAqLworc3RydWN0IG9mX2FzeW5jX2NvbmZpZ19wcm9wX2Zsb3dfc3RhdHNfc2xhdmUgOiBvZl9hc3luY19jb25maWdfcHJvcCB7CisgICAgdWludDE2X3QgdHlwZSA9PSAxMjsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgbWFzazsKK307CisKKy8qIE9GUEFDUFRfRkxPV19TVEFUU19NQVNURVIgcHJvcGVydHkgKi8KK3N0cnVjdCBvZl9hc3luY19jb25maWdfcHJvcF9mbG93X3N0YXRzX21hc3RlciA6IG9mX2FzeW5jX2NvbmZpZ19wcm9wIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDEzOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCBtYXNrOworfTsKKworLyogT0ZQQUNQVF9DT05UX1NUQVRVU19TTEFWRSBwcm9wZXJ0eSAqLworc3RydWN0IG9mX2FzeW5jX2NvbmZpZ19wcm9wX2NvbnRfc3RhdHVzX3NsYXZlIDogb2ZfYXN5bmNfY29uZmlnX3Byb3AgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMTQ7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IG1hc2s7Cit9OworCisvKiBPRlBBQ1BUX0NPTlRfU1RBVFVTX01BU1RFUiBwcm9wZXJ0eSAqLworc3RydWN0IG9mX2FzeW5jX2NvbmZpZ19wcm9wX2NvbnRfc3RhdHVzX21hc3RlciA6IG9mX2FzeW5jX2NvbmZpZ19wcm9wIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDE1OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCBtYXNrOworfTsKKworLyogT0ZQVEZQVF9FWFBFUklNRU5URVJfU0xBVkUgcHJvcGVydHkgKi8KK3N0cnVjdCBvZl9hc3luY19jb25maWdfcHJvcF9leHBlcmltZW50ZXJfc2xhdmUgOiBvZl9hc3luY19jb25maWdfcHJvcCB7CisgICAgdWludDE2X3QgdHlwZSA9PSAweGZmZmU7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIC8vdWludDMyX3QgZXhwZXJpbWVudGVyID09ID87CisgICAgLy91aW50MzJfdCBleHBfdHlwZTsKK307CisKKy8qIE9GUFRGUFRfRVhQRVJJTUVOVEVSX01BU1RFUiBwcm9wZXJ0eSAqLworc3RydWN0IG9mX2FzeW5jX2NvbmZpZ19wcm9wX2V4cGVyaW1lbnRlcl9tYXN0ZXIgOiBvZl9hc3luY19jb25maWdfcHJvcCB7CisgICAgdWludDE2X3QgdHlwZSA9PSAweGZmZmY7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIC8vdWludDMyX3QgZXhwZXJpbWVudGVyID09ID87CisgICAgLy91aW50MzJfdCBleHBfdHlwZTsKK307CisKKy8qIFBhY2tldCByZWNlaXZlZCBvbiBwb3J0IChkYXRhcGF0aCAtPiBjb250cm9sbGVyKS4gKi8KK3N0cnVjdCBvZl9wYWNrZXRfaW4gOiBvZl9oZWFkZXIgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTA7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MzJfdCBidWZmZXJfaWQ7CisgICAgdWludDE2X3QgdG90YWxfbGVuOworICAgIHVpbnQ4X3QgcmVhc29uOworICAgIHVpbnQ4X3QgdGFibGVfaWQ7CisgICAgdWludDY0X3QgY29va2llOworICAgIG9mX21hdGNoX3QgbWF0Y2g7CisgICAgcGFkKDIpOworICAgIG9mX29jdGV0c190IGRhdGE7Cit9OworCisvKiBGbG93IHJlbW92ZWQgKGRhdGFwYXRoIC0+IGNvbnRyb2xsZXIpLiAqLworc3RydWN0IG9mX2Zsb3dfcmVtb3ZlZCA6IG9mX2hlYWRlciB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxMTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIHVpbnQ4X3QgdGFibGVfaWQ7CisgICAgZW51bSBvZnBfZmxvd19yZW1vdmVkX3JlYXNvbiByZWFzb247CisgICAgdWludDE2X3QgcHJpb3JpdHk7CisgICAgdWludDE2X3QgaWRsZV90aW1lb3V0OworICAgIHVpbnQxNl90IGhhcmRfdGltZW91dDsKKyAgICB1aW50NjRfdCBjb29raWU7CisgICAgb2ZfbWF0Y2hfdCBtYXRjaDsKKyAgICBvZl9zdGF0X3Qgc3RhdHM7Cit9OworCisvKiBBIHBoeXNpY2FsIHBvcnQgaGFzIGNoYW5nZWQgaW4gdGhlIGRhdGFwYXRoICovCitzdHJ1Y3Qgb2ZfcG9ydF9zdGF0dXMgOiBvZl9oZWFkZXIgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTI7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICBlbnVtIG9mcF9wb3J0X3JlYXNvbiByZWFzb247CisgICAgcGFkKDcpOworICAgIG9mX3BvcnRfZGVzY190IGRlc2M7Cit9OworCisvKiBSb2xlIHN0YXR1cyBldmVudCBtZXNzYWdlLiAqLworc3RydWN0IG9mX3JvbGVfc3RhdHVzIDogb2ZfaGVhZGVyIHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDMwOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgZW51bSBvZnBfY29udHJvbGxlcl9yb2xlIHJvbGU7CisgICAgZW51bSBvZnBfY29udHJvbGxlcl9yb2xlX3JlYXNvbiByZWFzb247CisgICAgcGFkKDMpOworICAgIHVpbnQ2NF90IGdlbmVyYXRpb25faWQ7CisgICAgbGlzdChvZl9yb2xlX3Byb3BfdCkgcHJvcGVydGllczsKK307CisKKy8qIENvbW1vbiBoZWFkZXIgZm9yIGFsbCBSb2xlIFByb3BlcnRpZXMgKi8KK3N0cnVjdCBvZl9yb2xlX3Byb3AgeworICAgIHVpbnQxNl90IHR5cGUgPT0gPzsKKyAgICB1aW50MTZfdCBsZW5ndGg7Cit9OworCisvKiBFeHBlcmltZW50ZXIgcm9sZSBwcm9wZXJ0eSAqLworc3RydWN0IG9mX3JvbGVfcHJvcF9leHBlcmltZW50ZXIgOiBvZl9yb2xlX3Byb3AgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMHhmZmZmOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCBleHBlcmltZW50ZXIgPT0gPzsKKyAgICB1aW50MzJfdCBleHBfdHlwZTsKK307CisKKy8qIFRhYmxlIGRlc2NyaW90aW9uICovCitzdHJ1Y3Qgb2ZfdGFibGVfZGVzYyB7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQ4X3QgdGFibGVfaWQ7CisgICAgcGFkKDEpOworICAgIGVudW0gb2ZwX3RhYmxlX2NvbmZpZyBjb25maWc7CisgICAgbGlzdChvZl90YWJsZV9tb2RfcHJvcF90KSBwcm9wZXJ0aWVzOworfTsKKworCisvKiBBIHRhYmxlIGNvbmZpZyBoYXMgY2hhbmdlZCBpbiB0aGUgZGF0YXBhdGggKi8KK3N0cnVjdCBvZl90YWJsZV9zdGF0dXMgOiBvZl9oZWFkZXIgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMzE7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICBlbnVtIG9mcF90YWJsZV9yZWFzb24gcmVhc29uOworICAgIHBhZCg3KTsKKyAgICBvZl90YWJsZV9kZXNjX3QgdGFibGU7Cit9OworCisvKiBHcm91cC9NZXRlciByZXF1ZXN0IGZvcndhcmRpbmcuICovCitzdHJ1Y3Qgb2ZfcmVxdWVzdGZvcndhcmQgOiBvZl9oZWFkZXIgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMzI7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICBvZl9oZWFkZXJfdCByZXF1ZXN0OworfTsKKworLyogT0ZQVF9IRUxMTy4gVGhpcyBtZXNzYWdlIGluY2x1ZGVzIHplcm8gb3IgbW9yZSBoZWxsbyBlbGVtZW50cyBoYXZpbmcKKyogdmFyaWFibGUgc2l6ZS4gVW5rbm93biBlbGVtZW50cyB0eXBlcyBtdXN0IGJlIGlnbm9yZWQvc2tpcHBlZCwgdG8gYWxsb3cKKyogZm9yIGZ1dHVyZSBleHRlbnNpb25zLiAqLworc3RydWN0IG9mX2hlbGxvIDogb2ZfaGVhZGVyIHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDA7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICBsaXN0KG9mX2hlbGxvX2VsZW1fdCkgZWxlbWVudHM7Cit9OworCisvKiBDb21tb24gaGVhZGVyIGZvciBhbGwgSGVsbG8gRWxlbWVudHMgKi8KK3N0cnVjdCBvZl9oZWxsb19lbGVtIHsKKyAgICB1aW50MTZfdCB0eXBlID09ID87CisgICAgdWludDE2X3QgbGVuZ3RoOworfTsKKworLyogVmVyc2lvbiBiaXRtYXAgSGVsbG8gRWxlbWVudCAqLworc3RydWN0IG9mX2hlbGxvX2VsZW1fdmVyc2lvbmJpdG1hcCA6IG9mX2hlbGxvX2VsZW0geworICAgIHVpbnQxNl90IHR5cGUgPT0gMTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgbGlzdChvZl91aW50MzJfdCkgYml0bWFwczsKK307CisKKy8qIEVDSE8gUkVRVUVTVCAqLworc3RydWN0IG9mX2VjaG9fcmVxdWVzdCA6IG9mX2hlYWRlciB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAyOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgb2Zfb2N0ZXRzX3QgZGF0YTsKK307CisKKy8qIEVDSE8gUkVQTFkgKi8KK3N0cnVjdCBvZl9lY2hvX3JlcGx5IDogb2ZfaGVhZGVyIHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDM7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICBvZl9vY3RldHNfdCBkYXRhOworfTsKKworLyogT0ZQVF9FUlJPUjogRXJyb3IgbWVzc2FnZS4gKi8KK3N0cnVjdCBvZl9lcnJvcl9tc2cgOiBvZl9oZWFkZXIgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIHVpbnQxNl90IGVycl90eXBlID09ID87Cit9OworCisvKiBFeHBlcmltZW50ZXIgZXh0ZW5zaW9uIG1lc3NhZ2UuICovCitzdHJ1Y3Qgb2ZfZXhwZXJpbWVudGVyIDogb2ZfaGVhZGVyIHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDQ7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MzJfdCBleHBlcmltZW50ZXIgPT0gPzsKKyAgICB1aW50MzJfdCBzdWJ0eXBlOworICAgIG9mX29jdGV0c190IGRhdGE7Cit9OworCisvKiBGZWF0dXJlcyBSZXF1ZXN0ICovCitzdHJ1Y3Qgb2ZfZmVhdHVyZXNfcmVxdWVzdCA6IG9mX2hlYWRlciB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSA1OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7Cit9OworCisvKiBGZWF0dXJlcyBSZXBseSAgKG9mcF9zd2l0Y2hfZmVhdHVyZXMpICovCitzdHJ1Y3Qgb2ZfZmVhdHVyZXNfcmVwbHkgOiBvZl9oZWFkZXIgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gNjsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIHVpbnQ2NF90IGRhdGFwYXRoX2lkOworICAgIHVpbnQzMl90IG5fYnVmZmVyczsKKyAgICB1aW50OF90IG5fdGFibGVzOworICAgIHVpbnQ4X3QgYXV4aWxpYXJ5X2lkOworICAgIHBhZCgyKTsKKyAgICBlbnVtIG9mcF9jYXBhYmlsaXRpZXMgY2FwYWJpbGl0aWVzOworICAgIHVpbnQzMl90IHJlc2VydmVkOworfTsKKworLyogR2V0IENvbmZpZ3VyYXRpb24gTWVzc2FnZSAqLworc3RydWN0IG9mX2dldF9jb25maWdfcmVxdWVzdCA6IG9mX2hlYWRlciB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSA3OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7Cit9OworCisvKiBHZXQgQ29uZmlndXJhdGlvbiBSZXBseSAob2ZwX3N3aXRjaF9jb25maWcpICovCitzdHJ1Y3Qgb2ZfZ2V0X2NvbmZpZ19yZXBseSA6IG9mX2hlYWRlciB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSA4OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgZW51bSBvZnBfY29uZmlnX2ZsYWdzIGZsYWdzOworICAgIHVpbnQxNl90IG1pc3Nfc2VuZF9sZW47Cit9OworCisvKiBTZXQgQ29uZmlndXJhdGlvbiBNZXNzYWdlICovCitzdHJ1Y3Qgb2Zfc2V0X2NvbmZpZyA6IG9mX2hlYWRlciB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSA5OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgZW51bSBvZnBfY29uZmlnX2ZsYWdzIGZsYWdzOworICAgIHVpbnQxNl90IG1pc3Nfc2VuZF9sZW47Cit9OworCisvKiBGbG93IEFkZCBNZXNzYWdlICovCitzdHJ1Y3Qgb2ZfZmxvd19hZGQgOiBvZl9mbG93X21vZCB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxNDsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIHVpbnQ2NF90IGNvb2tpZTsKKyAgICB1aW50NjRfdCBjb29raWVfbWFzazsKKyAgICB1aW50OF90IHRhYmxlX2lkOworICAgIG9mX2ZtX2NtZF90IF9jb21tYW5kID09IDA7CisgICAgdWludDE2X3QgaWRsZV90aW1lb3V0OworICAgIHVpbnQxNl90IGhhcmRfdGltZW91dDsKKyAgICB1aW50MTZfdCBwcmlvcml0eTsKKyAgICB1aW50MzJfdCBidWZmZXJfaWQ7CisgICAgb2ZfcG9ydF9ub190IG91dF9wb3J0OworICAgIHVpbnQzMl90IG91dF9ncm91cDsKKyAgICBlbnVtIG9mcF9mbG93X21vZF9mbGFncyBmbGFnczsKKyAgICB1aW50MTZfdCBpbXBvcnRhbmNlOworICAgIG9mX21hdGNoX3QgbWF0Y2g7CisgICAgbGlzdChvZl9pbnN0cnVjdGlvbl90KSBpbnN0cnVjdGlvbnM7Cit9OworCisvKiBGbG93IE1vZGlmeSBNZXNzYWdlICovCitzdHJ1Y3Qgb2ZfZmxvd19tb2RpZnkgOiBvZl9mbG93X21vZCB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxNDsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIHVpbnQ2NF90IGNvb2tpZTsKKyAgICB1aW50NjRfdCBjb29raWVfbWFzazsKKyAgICB1aW50OF90IHRhYmxlX2lkOworICAgIG9mX2ZtX2NtZF90IF9jb21tYW5kID09IDE7CisgICAgdWludDE2X3QgaWRsZV90aW1lb3V0OworICAgIHVpbnQxNl90IGhhcmRfdGltZW91dDsKKyAgICB1aW50MTZfdCBwcmlvcml0eTsKKyAgICB1aW50MzJfdCBidWZmZXJfaWQ7CisgICAgb2ZfcG9ydF9ub190IG91dF9wb3J0OworICAgIHVpbnQzMl90IG91dF9ncm91cDsKKyAgICBlbnVtIG9mcF9mbG93X21vZF9mbGFncyBmbGFnczsKKyAgICB1aW50MTZfdCBpbXBvcnRhbmNlOworICAgIG9mX21hdGNoX3QgbWF0Y2g7CisgICAgbGlzdChvZl9pbnN0cnVjdGlvbl90KSBpbnN0cnVjdGlvbnM7Cit9OworCisvKiBGbG93IE1vZGlmeSBTdHJpY3QgTWVzc2FnZSAqLworc3RydWN0IG9mX2Zsb3dfbW9kaWZ5X3N0cmljdCA6IG9mX2Zsb3dfbW9kIHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE0OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDY0X3QgY29va2llOworICAgIHVpbnQ2NF90IGNvb2tpZV9tYXNrOworICAgIHVpbnQ4X3QgdGFibGVfaWQ7CisgICAgb2ZfZm1fY21kX3QgX2NvbW1hbmQgPT0gMjsKKyAgICB1aW50MTZfdCBpZGxlX3RpbWVvdXQ7CisgICAgdWludDE2X3QgaGFyZF90aW1lb3V0OworICAgIHVpbnQxNl90IHByaW9yaXR5OworICAgIHVpbnQzMl90IGJ1ZmZlcl9pZDsKKyAgICBvZl9wb3J0X25vX3Qgb3V0X3BvcnQ7CisgICAgdWludDMyX3Qgb3V0X2dyb3VwOworICAgIGVudW0gb2ZwX2Zsb3dfbW9kX2ZsYWdzIGZsYWdzOworICAgIHVpbnQxNl90IGltcG9ydGFuY2U7CisgICAgb2ZfbWF0Y2hfdCBtYXRjaDsKKyAgICBsaXN0KG9mX2luc3RydWN0aW9uX3QpIGluc3RydWN0aW9uczsKK307CisKKy8qIEZsb3cgRGVsZXRlIE1lc3NhZ2UgKi8KK3N0cnVjdCBvZl9mbG93X2RlbGV0ZSA6IG9mX2Zsb3dfbW9kIHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE0OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDY0X3QgY29va2llOworICAgIHVpbnQ2NF90IGNvb2tpZV9tYXNrOworICAgIHVpbnQ4X3QgdGFibGVfaWQ7CisgICAgb2ZfZm1fY21kX3QgX2NvbW1hbmQgPT0gMzsKKyAgICB1aW50MTZfdCBpZGxlX3RpbWVvdXQ7CisgICAgdWludDE2X3QgaGFyZF90aW1lb3V0OworICAgIHVpbnQxNl90IHByaW9yaXR5OworICAgIHVpbnQzMl90IGJ1ZmZlcl9pZDsKKyAgICBvZl9wb3J0X25vX3Qgb3V0X3BvcnQ7CisgICAgdWludDMyX3Qgb3V0X2dyb3VwOworICAgIGVudW0gb2ZwX2Zsb3dfbW9kX2ZsYWdzIGZsYWdzOworICAgIHVpbnQxNl90IGltcG9ydGFuY2U7CisgICAgb2ZfbWF0Y2hfdCBtYXRjaDsKKyAgICBsaXN0KG9mX2luc3RydWN0aW9uX3QpIGluc3RydWN0aW9uczsKK307CisKKy8qIEZsb3cgRGVsZXRlIFN0cmljdCBNZXNzYWdlICovCitzdHJ1Y3Qgb2ZfZmxvd19kZWxldGVfc3RyaWN0IDogb2ZfZmxvd19tb2QgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTQ7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50NjRfdCBjb29raWU7CisgICAgdWludDY0X3QgY29va2llX21hc2s7CisgICAgdWludDhfdCB0YWJsZV9pZDsKKyAgICBvZl9mbV9jbWRfdCBfY29tbWFuZCA9PSA0OworICAgIHVpbnQxNl90IGlkbGVfdGltZW91dDsKKyAgICB1aW50MTZfdCBoYXJkX3RpbWVvdXQ7CisgICAgdWludDE2X3QgcHJpb3JpdHk7CisgICAgdWludDMyX3QgYnVmZmVyX2lkOworICAgIG9mX3BvcnRfbm9fdCBvdXRfcG9ydDsKKyAgICB1aW50MzJfdCBvdXRfZ3JvdXA7CisgICAgZW51bSBvZnBfZmxvd19tb2RfZmxhZ3MgZmxhZ3M7CisgICAgdWludDE2X3QgaW1wb3J0YW5jZTsKKyAgICBvZl9tYXRjaF90IG1hdGNoOworICAgIGxpc3Qob2ZfaW5zdHJ1Y3Rpb25fdCkgaW5zdHJ1Y3Rpb25zOworfTsKKworLyogR3JvdXAgQWRkIG1lc3NhZ2UgKi8KK3N0cnVjdCBvZl9ncm91cF9hZGQgOiBvZl9ncm91cF9tb2QgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTU7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICBlbnVtIG9mcF9ncm91cF9tb2RfY29tbWFuZCBjb21tYW5kID09IDA7CisgICAgZW51bSBvZnBfZ3JvdXBfdHlwZSBncm91cF90eXBlOworICAgIHBhZCgxKTsKKyAgICB1aW50MzJfdCBncm91cF9pZDsKKyAgICB1aW50MTZfdCBidWNrZXRfYXJyYXlfbGVuID09IGxlbmd0aChidWNrZXRzKTsKKyAgICBwYWQoMik7CisgICAgZW51bSBvZnBfZ3JvdXBfYnVja2V0IGNvbW1hbmRfYnVja2V0X2lkOworICAgIGxpc3Qob2ZfYnVja2V0X3QpIGJ1Y2tldHM7CisgICAgbGlzdChvZl9ncm91cF9wcm9wX3QpIHByb3BlcnRpZXM7Cit9OworCisvKiBHcm91cCBNb2RpZnkgTWVzc2FnZSAqLworc3RydWN0IG9mX2dyb3VwX21vZGlmeSA6IG9mX2dyb3VwX21vZCB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxNTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIGVudW0gb2ZwX2dyb3VwX21vZF9jb21tYW5kIGNvbW1hbmQgPT0gMTsKKyAgICBlbnVtIG9mcF9ncm91cF90eXBlIGdyb3VwX3R5cGU7CisgICAgcGFkKDEpOworICAgIHVpbnQzMl90IGdyb3VwX2lkOworICAgIHVpbnQxNl90IGJ1Y2tldF9hcnJheV9sZW4gPT0gbGVuZ3RoKGJ1Y2tldHMpOworICAgIHBhZCgyKTsKKyAgICBlbnVtIG9mcF9ncm91cF9idWNrZXQgY29tbWFuZF9idWNrZXRfaWQ7CisgICAgbGlzdChvZl9idWNrZXRfdCkgYnVja2V0czsKKyAgICBsaXN0KG9mX2dyb3VwX3Byb3BfdCkgcHJvcGVydGllczsKK307CisKKy8qIEdyb3VwIERlbGV0ZSBNZXNzYWdlICovCitzdHJ1Y3Qgb2ZfZ3JvdXBfZGVsZXRlIDogb2ZfZ3JvdXBfbW9kIHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE1OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgZW51bSBvZnBfZ3JvdXBfbW9kX2NvbW1hbmQgY29tbWFuZCA9PSAyOworICAgIGVudW0gb2ZwX2dyb3VwX3R5cGUgZ3JvdXBfdHlwZTsKKyAgICBwYWQoMSk7CisgICAgdWludDMyX3QgZ3JvdXBfaWQ7CisgICAgdWludDE2X3QgYnVja2V0X2FycmF5X2xlbiA9PSBsZW5ndGgoYnVja2V0cyk7CisgICAgcGFkKDIpOworICAgIGVudW0gb2ZwX2dyb3VwX2J1Y2tldCBjb21tYW5kX2J1Y2tldF9pZDsKKyAgICBsaXN0KG9mX2J1Y2tldF90KSBidWNrZXRzOworICAgIGxpc3Qob2ZfZ3JvdXBfcHJvcF90KSBwcm9wZXJ0aWVzOworfTsKKworLyogR3JvdXAgSW5zZXJ0IEJ1Y2tldCBNZXNzYWdlICovCitzdHJ1Y3Qgb2ZfZ3JvdXBfaW5zZXJ0X2J1Y2tldCA6IG9mX2dyb3VwX21vZCB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxNTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIGVudW0gb2ZwX2dyb3VwX21vZF9jb21tYW5kIGNvbW1hbmQgPT0gMzsKKyAgICBlbnVtIG9mcF9ncm91cF90eXBlIGdyb3VwX3R5cGU7CisgICAgcGFkKDEpOworICAgIHVpbnQzMl90IGdyb3VwX2lkOworICAgIHVpbnQxNl90IGJ1Y2tldF9hcnJheV9sZW4gPT0gbGVuZ3RoKGJ1Y2tldHMpOworICAgIHBhZCgyKTsKKyAgICBlbnVtIG9mcF9ncm91cF9idWNrZXQgY29tbWFuZF9idWNrZXRfaWQ7CisgICAgbGlzdChvZl9idWNrZXRfdCkgYnVja2V0czsKKyAgICBsaXN0KG9mX2dyb3VwX3Byb3BfdCkgcHJvcGVydGllczsKK307CisKKy8qIEdyb3VwIFJlbW92ZSBCdWNrZXQgTWVzc2FnZSAqLworc3RydWN0IG9mX2dyb3VwX3JlbW92ZV9idWNrZXQgOiBvZl9ncm91cF9tb2QgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTU7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICBlbnVtIG9mcF9ncm91cF9tb2RfY29tbWFuZCBjb21tYW5kID09IDU7CisgICAgZW51bSBvZnBfZ3JvdXBfdHlwZSBncm91cF90eXBlOworICAgIHBhZCgxKTsKKyAgICB1aW50MzJfdCBncm91cF9pZDsKKyAgICB1aW50MTZfdCBidWNrZXRfYXJyYXlfbGVuID09IGxlbmd0aChidWNrZXRzKTsKKyAgICBwYWQoMik7CisgICAgZW51bSBvZnBfZ3JvdXBfYnVja2V0IGNvbW1hbmRfYnVja2V0X2lkOworICAgIGxpc3Qob2ZfYnVja2V0X3QpIGJ1Y2tldHM7CisgICAgbGlzdChvZl9ncm91cF9wcm9wX3QpIHByb3BlcnRpZXM7Cit9OworCisvKiBIZWxsbyBGYWlsZWQgRXJyb3IgTWVzc2FnZSAqLworc3RydWN0IG9mX2hlbGxvX2ZhaWxlZF9lcnJvcl9tc2cgOiBvZl9lcnJvcl9tc2cgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIHVpbnQxNl90IGVycl90eXBlID09IDA7CisgICAgZW51bSBvZnBfaGVsbG9fZmFpbGVkX2NvZGUgY29kZTsKKyAgICBvZl9vY3RldHNfdCBkYXRhOworfTsKKworLyogQmFkIFJlcXVlc3QgRXJyb3IgTWVzc2FnZSAqLworc3RydWN0IG9mX2JhZF9yZXF1ZXN0X2Vycm9yX21zZyA6IG9mX2Vycm9yX21zZyB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDE2X3QgZXJyX3R5cGUgPT0gMTsKKyAgICBlbnVtIG9mcF9iYWRfcmVxdWVzdF9jb2RlIGNvZGU7CisgICAgb2Zfb2N0ZXRzX3QgZGF0YTsKK307CisKKy8qIEJhZCBBY3Rpb24gRXJyb3IgTWVzc2FnZSAqLworc3RydWN0IG9mX2JhZF9hY3Rpb25fZXJyb3JfbXNnIDogb2ZfZXJyb3JfbXNnIHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MTZfdCBlcnJfdHlwZSA9PSAyOworICAgIGVudW0gb2ZwX2JhZF9hY3Rpb25fY29kZSBjb2RlOworICAgIG9mX29jdGV0c190IGRhdGE7Cit9OworCisvKiBCYWQgSW5zdHJ1Y3Rpb24gRXJyb3IgTWVzc2FnZSAqLworc3RydWN0IG9mX2JhZF9pbnN0cnVjdGlvbl9lcnJvcl9tc2cgOiBvZl9lcnJvcl9tc2cgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIHVpbnQxNl90IGVycl90eXBlID09IDM7CisgICAgZW51bSBvZnBfYmFkX2luc3RydWN0aW9uX2NvZGUgY29kZTsKKyAgICBvZl9vY3RldHNfdCBkYXRhOworfTsKKworLyogQmFkIE1hdGNoIEVycm9yIE1lc3NhZ2UgKi8KK3N0cnVjdCBvZl9iYWRfbWF0Y2hfZXJyb3JfbXNnIDogb2ZfZXJyb3JfbXNnIHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MTZfdCBlcnJfdHlwZSA9PSA0OworICAgIGVudW0gb2ZwX2JhZF9tYXRjaF9jb2RlIGNvZGU7CisgICAgb2Zfb2N0ZXRzX3QgZGF0YTsKK307CisKKy8qIEZsb3cgTW9kIEZhaWxlZCBFcnJvciBNZXNzYWdlICovCitzdHJ1Y3Qgb2ZfZmxvd19tb2RfZmFpbGVkX2Vycm9yX21zZyA6IG9mX2Vycm9yX21zZyB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDE2X3QgZXJyX3R5cGUgPT0gNTsKKyAgICBlbnVtIG9mcF9mbG93X21vZF9mYWlsZWRfY29kZSBjb2RlOworICAgIG9mX29jdGV0c190IGRhdGE7Cit9OworCisvKiBHcm91cCBNb2QgRmFpbGVkIEVycm9yIE1lc3NhZ2UgKi8KK3N0cnVjdCBvZl9ncm91cF9tb2RfZmFpbGVkX2Vycm9yX21zZyA6IG9mX2Vycm9yX21zZyB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDE2X3QgZXJyX3R5cGUgPT0gNjsKKyAgICBlbnVtIG9mcF9ncm91cF9tb2RfZmFpbGVkX2NvZGUgY29kZTsKKyAgICBvZl9vY3RldHNfdCBkYXRhOworfTsKKworLyogUG9ydCBNb2QgRmFpbGVkIEVycm9yIE1lc3NhZ2UgKi8KK3N0cnVjdCBvZl9wb3J0X21vZF9mYWlsZWRfZXJyb3JfbXNnIDogb2ZfZXJyb3JfbXNnIHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MTZfdCBlcnJfdHlwZSA9PSA3OworICAgIGVudW0gb2ZwX3BvcnRfbW9kX2ZhaWxlZF9jb2RlIGNvZGU7CisgICAgb2Zfb2N0ZXRzX3QgZGF0YTsKK307CisKKy8qIFRhYmxlIE1vZCBGYWlsZWQgRXJyb3IgTWVzc2FnZSAqLworc3RydWN0IG9mX3RhYmxlX21vZF9mYWlsZWRfZXJyb3JfbXNnIDogb2ZfZXJyb3JfbXNnIHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MTZfdCBlcnJfdHlwZSA9PSA4OworICAgIGVudW0gb2ZwX3RhYmxlX21vZF9mYWlsZWRfY29kZSBjb2RlOworICAgIG9mX29jdGV0c190IGRhdGE7Cit9OworCisvKiBRdWV1ZSBPcCBGYWlsZWQgRXJyb3IgTWVzc2FnZSAqLworc3RydWN0IG9mX3F1ZXVlX29wX2ZhaWxlZF9lcnJvcl9tc2cgOiBvZl9lcnJvcl9tc2cgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIHVpbnQxNl90IGVycl90eXBlID09IDk7CisgICAgZW51bSBvZnBfcXVldWVfb3BfZmFpbGVkX2NvZGUgY29kZTsKKyAgICBvZl9vY3RldHNfdCBkYXRhOworfTsKKworLyogU3dpdGNoIENvbmZpZyBGYWlsZWQgRXJyb3IgTWVzc2FnZSAqLworc3RydWN0IG9mX3N3aXRjaF9jb25maWdfZmFpbGVkX2Vycm9yX21zZyA6IG9mX2Vycm9yX21zZyB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDE2X3QgZXJyX3R5cGUgPT0gMTA7CisgICAgZW51bSBvZnBfc3dpdGNoX2NvbmZpZ19mYWlsZWRfY29kZSBjb2RlOworICAgIG9mX29jdGV0c190IGRhdGE7Cit9OworCisvKiBSb2xlIFJlcXVlc3QgRmFpbGVkIEVycm9yIE1lc3NhZ2UgKi8KK3N0cnVjdCBvZl9yb2xlX3JlcXVlc3RfZmFpbGVkX2Vycm9yX21zZyA6IG9mX2Vycm9yX21zZyB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDE2X3QgZXJyX3R5cGUgPT0gMTE7CisgICAgZW51bSBvZnBfcm9sZV9yZXF1ZXN0X2ZhaWxlZF9jb2RlIGNvZGU7CisgICAgb2Zfb2N0ZXRzX3QgZGF0YTsKK307CisKKy8qIE1ldGVyIE1vZCBGYWlsZWQgRXJyb3IgTWVzc2FnZSAqLworc3RydWN0IG9mX21ldGVyX21vZF9mYWlsZWRfZXJyb3JfbXNnIDogb2ZfZXJyb3JfbXNnIHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MTZfdCBlcnJfdHlwZSA9PSAxMjsKKyAgICBlbnVtIG9mcF9tZXRlcl9tb2RfZmFpbGVkX2NvZGUgY29kZTsKKyAgICBvZl9vY3RldHNfdCBkYXRhOworfTsKKworLyogVGFibGUgRmVhdHVyZXMgRmFpbGVkIEVycm9yIE1lc3NhZ2UgKi8KK3N0cnVjdCBvZl90YWJsZV9mZWF0dXJlc19mYWlsZWRfZXJyb3JfbXNnIDogb2ZfZXJyb3JfbXNnIHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MTZfdCBlcnJfdHlwZSA9PSAxMzsKKyAgICBlbnVtIG9mcF90YWJsZV9mZWF0dXJlc19mYWlsZWRfY29kZSBjb2RlOworICAgIG9mX29jdGV0c190IGRhdGE7Cit9OworCisvKiBCYWQgUHJvcGVydHkgRXJyb3IgTWVzc2FnZSAqLworc3RydWN0IG9mX2JhZF9wcm9wZXJ0eV9lcnJvcl9tc2cgOiBvZl9lcnJvcl9tc2cgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIHVpbnQxNl90IGVycl90eXBlID09IDE0OworICAgIGVudW0gb2ZwX2JhZF9wcm9wZXJ0eV9jb2RlIGNvZGU7CisgICAgb2Zfb2N0ZXRzX3QgZGF0YTsKK307CisKKy8qIEFzeW5jIENvbmZpZyBGYWlsZWQgRXJyb3IgTWVzc2FnZSAqLworc3RydWN0IG9mX2FzeW5jX2NvbmZpZ19mYWlsZWRfZXJyb3JfbXNnIDogb2ZfZXJyb3JfbXNnIHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MTZfdCBlcnJfdHlwZSA9PSAxNTsKKyAgICBlbnVtIG9mcF9hc3luY19jb25maWdfZmFpbGVkX2NvZGUgY29kZTsKKyAgICBvZl9vY3RldHNfdCBkYXRhOworfTsKKworLyogRmxvdyBNb25pdG9yIEZhaWxlZCBFcnJvciBNZXNzYWdlICovCitzdHJ1Y3Qgb2ZfZmxvd19tb25pdG9yX2ZhaWxlZF9lcnJvcl9tc2cgOiBvZl9lcnJvcl9tc2cgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIHVpbnQxNl90IGVycl90eXBlID09IDE2OworICAgIGVudW0gb2ZwX2Zsb3dfbW9uaXRvcl9mYWlsZWRfY29kZSBjb2RlOworICAgIG9mX29jdGV0c190IGRhdGE7Cit9OworCisvKiBCdW5kbGUgRmFpbGVkIEVycm9yIE1lc3NhZ2UgKi8KK3N0cnVjdCBvZl9idW5kbGVfZmFpbGVkX2Vycm9yX21zZyA6IG9mX2Vycm9yX21zZyB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDE2X3QgZXJyX3R5cGUgPT0gMTc7CisgICAgZW51bSBvZnBfYnVuZGxlX2ZhaWxlZF9jb2RlIGNvZGU7CisgICAgb2Zfb2N0ZXRzX3QgZGF0YTsKK307CisKKy8qIEV4cGVyaW1lbnRlciBFcnJvciBNZXNzYWdlICovCitzdHJ1Y3Qgb2ZfZXhwZXJpbWVudGVyX2Vycm9yX21zZyA6IG9mX2Vycm9yX21zZyB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDE2X3QgZXJyX3R5cGUgPT0gMHhmZmZmOworICAgIHVpbnQxNl90IHN1YnR5cGU7CisgICAgdWludDMyX3QgZXhwZXJpbWVudGVyID09ID87CisgICAgb2Zfb2N0ZXRzX3QgZGF0YTsKK307CisKKy8qIEdldCBBc3luYyBSZXF1ZXN0IE1lc3NhZ2UgKi8KK3N0cnVjdCBvZl9hc3luY19nZXRfcmVxdWVzdCA6IG9mX2hlYWRlciB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAyNjsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIGxpc3Qob2ZfYXN5bmNfY29uZmlnX3Byb3BfdCkgcHJvcGVydGllczsKK307CisKKy8qIEdldCBBc3luYyBSZXBseSBNZXNzYWdlICovCitzdHJ1Y3Qgb2ZfYXN5bmNfZ2V0X3JlcGx5IDogb2ZfaGVhZGVyIHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDI3OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgbGlzdChvZl9hc3luY19jb25maWdfcHJvcF90KSBwcm9wZXJ0aWVzOworfTsKKworLyogU2V0IEFzeW5jIE1lc3NhZ2UgKi8KK3N0cnVjdCBvZl9hc3luY19zZXQgOiBvZl9oZWFkZXIgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMjg7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICBsaXN0KG9mX2FzeW5jX2NvbmZpZ19wcm9wX3QpIHByb3BlcnRpZXM7Cit9OworCisvKiBkZXNjcmlwdGlvbiBzdGF0aXN0aWMgcmVxdWVzdCAqLworc3RydWN0IG9mX2Rlc2Nfc3RhdHNfcmVxdWVzdCA6IG9mX3N0YXRzX3JlcXVlc3QgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTg7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MTZfdCBzdGF0c190eXBlID09IDA7CisgICAgZW51bSBvZnBfc3RhdHNfcmVxdWVzdF9mbGFncyBmbGFnczsKKyAgICBwYWQoNCk7Cit9OworCisvKiBkZXNjcmlwdGlvbiBzdGF0aXN0aWMgcmVwbHkgKG9mcF9kZXNjKSAqLworc3RydWN0IG9mX2Rlc2Nfc3RhdHNfcmVwbHkgOiBvZl9zdGF0c19yZXBseSB7CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgdHlwZSA9PSAxOTsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgeGlkOworICAgIHVpbnQxNl90IHN0YXRzX3R5cGUgPT0gMDsKKyAgICBlbnVtIG9mcF9zdGF0c19yZXBseV9mbGFncyBmbGFnczsKKyAgICBwYWQoNCk7CisgICAgb2ZfZGVzY19zdHJfdCBtZnJfZGVzYzsKKyAgICBvZl9kZXNjX3N0cl90IGh3X2Rlc2M7CisgICAgb2ZfZGVzY19zdHJfdCBzd19kZXNjOworICAgIG9mX3NlcmlhbF9udW1fdCBzZXJpYWxfbnVtOworICAgIG9mX2Rlc2Nfc3RyX3QgZHBfZGVzYzsKK307CisKKy8qIGNvbnRyb2xsZXIgc3RhdHVzIHN0YXRpc3RpYyByZXF1ZXN0ICovCitzdHJ1Y3Qgb2ZfY29udHJvbGxlcl9zdGF0dXNfc3RhdHNfcmVxdWVzdCA6IG9mX3N0YXRzX3JlcXVlc3QgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTg7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MTZfdCBzdGF0c190eXBlID09IDE4OworICAgIGVudW0gb2ZwX3N0YXRzX3JlcXVlc3RfZmxhZ3MgZmxhZ3M7CisgICAgcGFkKDQpOworfTsKKworLypjb250cm9sbGVyIHN0YXR1cyBzdGF0aXN0aWMgcmVwbHkgKi8KK3N0cnVjdCBvZl9jb250cm9sbGVyX3N0YXR1c19zdGF0c19yZXBseSA6IG9mX3N0YXRzX3JlcGx5IHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE5OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDE2X3Qgc3RhdHNfdHlwZSA9PSAxODsKKyAgICBlbnVtIG9mcF9zdGF0c19yZXBseV9mbGFncyBmbGFnczsKKyAgICBwYWQoNCk7CisgICAgbGlzdChvZl9jb250cm9sbGVyX3N0YXR1c19lbnRyeV90KSBjb250cm9sbGVyX3N0YXR1czsKK307CisKKy8qIEJ1bmRsZSBmZWF0dXJlcyBwcm9wZXJ0aWVzIGhlYWRlciAqLworc3RydWN0IG9mX2J1bmRsZV9mZWF0dXJlc19wcm9wIHsKKyAgICB1aW50MTZfdCB0eXBlID09ID87CisgICAgdWludDE2X3QgbGVuZ3RoOworfTsKKworLyogQnVuZGxlIGZlYXR1cmVzIHN0YXRpc3RpYyByZXF1ZXN0ICovCitzdHJ1Y3Qgb2ZfYnVuZGxlX2ZlYXR1cmVzX3N0YXRzX3JlcXVlc3QgOiBvZl9zdGF0c19yZXF1ZXN0IHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE4OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDE2X3Qgc3RhdHNfdHlwZSA9PSAxOTsKKyAgICBlbnVtIG9mcF9zdGF0c19yZXF1ZXN0X2ZsYWdzIGZsYWdzOworICAgIHBhZCg0KTsKKyAgICBlbnVtIG9mcF9idW5kbGVfZmVhdHVyZV9mbGFncyBmZWF0dXJlX3JlcXVlc3RfZmxhZ3M7CisgICAgcGFkKDQpOworICAgIGxpc3Qob2ZfYnVuZGxlX2ZlYXR1cmVzX3Byb3BfdCkgcHJvcGVydGllczsKK307CisKKy8qQnVuZGxlIGZlYXR1cmVzIHN0YXRpc3RpYyByZXBseSAqLworc3RydWN0IG9mX2J1bmRsZV9mZWF0dXJlc19zdGF0c19yZXBseSA6IG9mX3N0YXRzX3JlcGx5IHsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCB0eXBlID09IDE5OworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICB1aW50MzJfdCB4aWQ7CisgICAgdWludDE2X3Qgc3RhdHNfdHlwZSA9PSAxOTsKKyAgICBlbnVtIG9mcF9zdGF0c19yZXBseV9mbGFncyBmbGFnczsKKyAgICBwYWQoNCk7CisgICAgZW51bSBvZnBfYnVuZGxlX2ZlYXR1cmVfZmxhZ3MgY2FwYWJpbGl0aWVzOworICAgIHBhZCg2KTsKKyAgICBsaXN0KG9mX2J1bmRsZV9mZWF0dXJlc19wcm9wX3QpIHByb3BlcnRpZXM7Cit9OworCisvKiBCdW5kbGUgdGltZSBmZWF0dXJlcy4gKi8KK3N0cnVjdCBvZl9idW5kbGVfZmVhdHVyZXNfcHJvcF90aW1lIDogb2ZfYnVuZGxlX2ZlYXR1cmVzX3Byb3B7CisgICAgdWludDE2X3QgdHlwZSA9PSAxOworICAgIHVpbnQxNl90IGxlbmd0aDsKKyAgICBwYWQoNCk7CisgICAgb2ZfdGltZV90IHNjaGVkX2FjY3VyYWN5OworICAgIG9mX3RpbWVfdCBzY2hlZF9tYXhfZnV0dXJlOworICAgIG9mX3RpbWVfdCBzY2hlZF9tYXhfcGFzdDsKKyAgICBvZl90aW1lX3QgdGltZXN0YW1wOworfTsKKworLyogRXhwZXJpbWVudGVyIHN0YXRzIHJlcXVlc3QgKi8KK3N0cnVjdCBvZl9leHBlcmltZW50ZXJfc3RhdHNfcmVxdWVzdCA6IG9mX3N0YXRzX3JlcXVlc3QgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTg7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MTZfdCBzdGF0c190eXBlID09IDB4ZmZmZjsKKyAgICBlbnVtIG9mcF9zdGF0c19yZXF1ZXN0X2ZsYWdzIGZsYWdzOworICAgIHBhZCg0KTsKKyAgICB1aW50MzJfdCBleHBlcmltZW50ZXIgPT0gPzsKKyAgICB1aW50MzJfdCBzdWJ0eXBlOworfTsKKworLyogRXhwZXJpbWVudGVyIHN0YXRzIHJlcGx5ICovCitzdHJ1Y3Qgb2ZfZXhwZXJpbWVudGVyX3N0YXRzX3JlcGx5IDogb2Zfc3RhdHNfcmVwbHkgeworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90IHR5cGUgPT0gMTk7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IHhpZDsKKyAgICB1aW50MTZfdCBzdGF0c190eXBlID09IDB4ZmZmZjsKKyAgICBlbnVtIG9mcF9zdGF0c19yZXBseV9mbGFncyBmbGFnczsKKyAgICBwYWQoNCk7CisgICAgdWludDMyX3QgZXhwZXJpbWVudGVyID09ID87CisgICAgdWludDMyX3Qgc3VidHlwZTsKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gMS4zLjEgUXVldWUgU3RydWN0dXJlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCitzdHJ1Y3Qgb2ZfcXVldWVfcHJvcCB7CisgICAgdWludDE2X3QgdHlwZSA9PSA/OworICAgIHVpbnQxNl90IGxlbjsKKyAgICBwYWQoNCk7Cit9OworCitzdHJ1Y3Qgb2ZfcXVldWVfcHJvcF9taW5fcmF0ZSA6IG9mX3F1ZXVlX3Byb3AgeworICAgIHVpbnQxNl90IHR5cGUgPT0gMTsKKyAgICB1aW50MTZfdCBsZW47CisgICAgcGFkKDQpOworICAgIHVpbnQxNl90IHJhdGU7CisgICAgcGFkKDYpOworfTsKKworc3RydWN0IG9mX3F1ZXVlX3Byb3BfbWF4X3JhdGUgOiBvZl9xdWV1ZV9wcm9wIHsKKyAgICB1aW50MTZfdCB0eXBlID09IDI7CisgICAgdWludDE2X3QgbGVuOworICAgIHBhZCg0KTsKKyAgICB1aW50MTZfdCByYXRlOworICAgIHBhZCg2KTsKK307CisKK3N0cnVjdCBvZl9xdWV1ZV9wcm9wX2V4cGVyaW1lbnRlciA6IG9mX3F1ZXVlX3Byb3AgeworICAgIHVpbnQxNl90IHR5cGUgPT0gNjU1MzU7CisgICAgdWludDE2X3QgbGVuOworICAgIHBhZCg0KTsKKyAgICB1aW50MzJfdCBleHBlcmltZW50ZXIgPT0gPzsKKyAgICBwYWQoNCk7CisgICAgb2Zfb2N0ZXRzX3QgZGF0YTsKK307CisKK3N0cnVjdCBvZl9wYWNrZXRfcXVldWUgeworICAgIHVpbnQzMl90IHF1ZXVlX2lkOworICAgIG9mX3BvcnRfbm9fdCBwb3J0OworICAgIHVpbnQxNl90IGxlbjsKKyAgICBwYWQoNik7CisgICAgbGlzdChvZl9xdWV1ZV9wcm9wX3QpIHByb3BlcnRpZXM7Cit9OworCisKKworCg==