I2lmZGVmIF9fU1VOUFJPX0MKIyBpbmNsdWRlICIuLi9ibl9hc20uYyIJLyoga2luZCBvZiBkaXJ0eSBoYWNrIGZvciBTdW4gU3R1ZGlvICovCiNlbHNlCi8qCiAqIHg4Nl82NCBCSUdOVU0gYWNjZWxlcmF0b3IgdmVyc2lvbiAwLjEsIERlY2VtYmVyIDIwMDIuCiAqCiAqIEltcGxlbWVudGVkIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPiBmb3IgdGhlIE9wZW5TU0wKICogcHJvamVjdC4KICoKICogUmlnaHRzIGZvciByZWRpc3RyaWJ1dGlvbiBhbmQgdXNhZ2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMgYXJlCiAqIGdyYW50ZWQgYWNjb3JkaW5nIHRvIHRoZSBPcGVuU1NMIGxpY2Vuc2UuIFdhcnJhbnR5IG9mIGFueSBraW5kIGlzCiAqIGRpc2NsYWltZWQuCiAqCiAqIFEuIFZlcnNpb24gMC4xPyBJdCBkb2Vzbid0IHNvdW5kIGxpa2UgQW5keSwgaGUgdXNlZCB0byBhc3NpZ24gcmVhbAogKiAgICB2ZXJzaW9ucywgbGlrZSAxLjAuLi4KICogQS4gV2VsbCwgdGhhdCdzIGJlY2F1c2UgdGhpcyBjb2RlIGlzIGJhc2ljYWxseSBhIHF1aWNrLW4tZGlydHkKICogICAgcHJvb2Ytb2YtY29uY2VwdCBoYWNrLiBBcyB5b3UgY2FuIHNlZSBpdCdzIGltcGxlbWVudGVkIHdpdGgKICogICAgaW5saW5lIGFzc2VtYmxlciwgd2hpY2ggbWVhbnMgdGhhdCB5b3UncmUgYm91bmQgdG8gR0NDIGFuZCB0aGF0CiAqICAgIHRoZXJlIG1pZ2h0IGJlIGVub3VnaCByb29tIGZvciBmdXJ0aGVyIGltcHJvdmVtZW50LgogKgogKiBRLiBXaHkgaW5saW5lIGFzc2VtYmxlcj8KICogQS4geDg2XzY0IGZlYXR1cmVzIG93biBBQkkgd2hpY2ggSSdtIG5vdCBmYW1pbGlhciB3aXRoLiBUaGlzIGlzCiAqICAgIHdoeSBJIGRlY2lkZWQgdG8gbGV0IHRoZSBjb21waWxlciB0YWtlIGNhcmUgb2Ygc3Vicm91dGluZQogKiAgICBwcm9sb2d1ZS9lcGlsb2d1ZSBhcyB3ZWxsIGFzIHJlZ2lzdGVyIGFsbG9jYXRpb24uIEZvciByZWZlcmVuY2UuCiAqICAgIFdpbjY0IGltcGxlbWVudHMgZGlmZmVyZW50IEFCSSBmb3IgQU1ENjQsIGRpZmZlcmVudCBmcm9tIExpbnV4LgogKgogKiBRLiBIb3cgbXVjaCBmYXN0ZXIgZG9lcyBpdCBnZXQ/CiAqIEEuICdhcHBzL29wZW5zc2wgc3BlZWQgcnNhIGRzYScgb3V0cHV0IHdpdGggbm8tYXNtOgogKgogKgkgICAgICAgICAgICAgICAgICBzaWduICAgIHZlcmlmeSAgICBzaWduL3MgdmVyaWZ5L3MKICoJcnNhICA1MTIgYml0cyAgIDAuMDAwNnMgICAwLjAwMDFzICAgMTY4My44ICAxODQ1Ni4yCiAqCXJzYSAxMDI0IGJpdHMgICAwLjAwMjhzICAgMC4wMDAycyAgICAzNTYuMCAgIDY0MDcuMAogKglyc2EgMjA0OCBiaXRzICAgMC4wMTcycyAgIDAuMDAwNXMgICAgIDU4LjAgICAxOTU3LjgKICoJcnNhIDQwOTYgYml0cyAgIDAuMTE1NXMgICAwLjAwMThzICAgICAgOC43ICAgIDU1NS42CiAqCSAgICAgICAgICAgICAgICAgIHNpZ24gICAgdmVyaWZ5ICAgIHNpZ24vcyB2ZXJpZnkvcwogKglkc2EgIDUxMiBiaXRzICAgMC4wMDA1cyAgIDAuMDAwNnMgICAyMTAwLjggICAxNzY4LjMKICoJZHNhIDEwMjQgYml0cyAgIDAuMDAxNHMgICAwLjAwMThzICAgIDY5Mi4zICAgIDU1OS4yCiAqCWRzYSAyMDQ4IGJpdHMgICAwLjAwNDlzICAgMC4wMDYxcyAgICAyMDQuNyAgICAxNjUuMAogKgogKiAgICAnYXBwcy9vcGVuc3NsIHNwZWVkIHJzYSBkc2EnIG91dHB1dCB3aXRoIHRoaXMgbW9kdWxlOgogKgogKgkgICAgICAgICAgICAgICAgICBzaWduICAgIHZlcmlmeSAgICBzaWduL3MgdmVyaWZ5L3MKICoJcnNhICA1MTIgYml0cyAgIDAuMDAwNHMgICAwLjAwMDBzICAgMjc2Ny4xICAzMzI5Ny45CiAqCXJzYSAxMDI0IGJpdHMgICAwLjAwMTJzICAgMC4wMDAxcyAgICA4NjcuNCAgMTQ2NzQuNwogKglyc2EgMjA0OCBiaXRzICAgMC4wMDYxcyAgIDAuMDAwMnMgICAgMTY0LjAgICA1MjcwLjAKICoJcnNhIDQwOTYgYml0cyAgIDAuMDM4NHMgICAwLjAwMDZzICAgICAyNi4xICAgMTY1MC44CiAqCSAgICAgICAgICAgICAgICAgIHNpZ24gICAgdmVyaWZ5ICAgIHNpZ24vcyB2ZXJpZnkvcwogKglkc2EgIDUxMiBiaXRzICAgMC4wMDAycyAgIDAuMDAwM3MgICA0NDQyLjIgICAzNzg2LjMKICoJZHNhIDEwMjQgYml0cyAgIDAuMDAwNXMgICAwLjAwMDdzICAgMTgzNS4xICAgMTQ5Ny40CiAqCWRzYSAyMDQ4IGJpdHMgICAwLjAwMTZzICAgMC4wMDIwcyAgICA2MjAuNCAgICA1MDQuNgogKgogKiAgICBGb3IgdGhlIHJlZmVyZW5jZS4gSUEtMzIgYXNzZW1ibGVyIGltcGxlbWVudGF0aW9uIHBlcmZvcm1zCiAqICAgIHZlcnkgbXVjaCBsaWtlIDY0LWJpdCBjb2RlIGNvbXBpbGVkIHdpdGggbm8tYXNtIG9uIHRoZSBzYW1lCiAqICAgIG1hY2hpbmUuCiAqLwoKI2RlZmluZSBCTl9VTE9ORyB1bnNpZ25lZCBsb25nCgovKgogKiAibSIoYSksICIrbSIocikJaXMgdGhlIHdheSB0byBmYXZvciBEaXJlY3RQYXRoILUtY29kZTsKICogImciKDApCQlsZXQgdGhlIGNvbXBpbGVyIHRvIGRlY2lkZSB3aGVyZSBkb2VzIGl0CiAqCQkJd2FudCB0byBrZWVwIHRoZSB2YWx1ZSBvZiB6ZXJvOwogKi8KI2RlZmluZSBtdWxfYWRkKHIsYSx3b3JkLGNhcnJ5KSBkbyB7CVwKCXJlZ2lzdGVyIEJOX1VMT05HIGhpZ2gsbG93OwlcCglhc20gKCJtdWxxICUzIgkJCVwKCQk6ICI9YSIobG93KSwiPWQiKGhpZ2gpCVwKCQk6ICJhIih3b3JkKSwibSIoYSkJXAoJCTogImNjIik7CQlcCglhc20gKCJhZGRxICUyLCUwOyBhZGNxICUzLCUxIglcCgkJOiAiK3IiKGNhcnJ5KSwiK2QiKGhpZ2gpXAoJCTogImEiKGxvdyksImciKDApCVwKCQk6ICJjYyIpOwkJXAoJYXNtICgiYWRkcSAlMiwlMDsgYWRjcSAlMywlMSIJXAoJCTogIittIihyKSwiK2QiKGhpZ2gpCVwKCQk6ICJyIihjYXJyeSksImciKDApCVwKCQk6ICJjYyIpOwkJXAoJY2Fycnk9aGlnaDsJCQlcCgl9IHdoaWxlICgwKQoKI2RlZmluZSBtdWwocixhLHdvcmQsY2FycnkpIGRvIHsJXAoJcmVnaXN0ZXIgQk5fVUxPTkcgaGlnaCxsb3c7CVwKCWFzbSAoIm11bHEgJTMiCQkJXAoJCTogIj1hIihsb3cpLCI9ZCIoaGlnaCkJXAoJCTogImEiKHdvcmQpLCJnIihhKQlcCgkJOiAiY2MiKTsJCVwKCWFzbSAoImFkZHEgJTIsJTA7IGFkY3EgJTMsJTEiCVwKCQk6ICIrciIoY2FycnkpLCIrZCIoaGlnaClcCgkJOiAiYSIobG93KSwiZyIoMCkJXAoJCTogImNjIik7CQlcCgkocik9Y2FycnksIGNhcnJ5PWhpZ2g7CQlcCgl9IHdoaWxlICgwKQoKI2RlZmluZSBzcXIocjAscjEsYSkJCQlcCglhc20gKCJtdWxxICUyIgkJCVwKCQk6ICI9YSIocjApLCI9ZCIocjEpCVwKCQk6ICJhIihhKQkJXAoJCTogImNjIik7CgpCTl9VTE9ORyBibl9tdWxfYWRkX3dvcmRzKEJOX1VMT05HICpycCwgQk5fVUxPTkcgKmFwLCBpbnQgbnVtLCBCTl9VTE9ORyB3KQoJewoJQk5fVUxPTkcgYzE9MDsKCglpZiAobnVtIDw9IDApIHJldHVybihjMSk7CgoJd2hpbGUgKG51bSZ+MykKCQl7CgkJbXVsX2FkZChycFswXSxhcFswXSx3LGMxKTsKCQltdWxfYWRkKHJwWzFdLGFwWzFdLHcsYzEpOwoJCW11bF9hZGQocnBbMl0sYXBbMl0sdyxjMSk7CgkJbXVsX2FkZChycFszXSxhcFszXSx3LGMxKTsKCQlhcCs9NDsgcnArPTQ7IG51bS09NDsKCQl9CglpZiAobnVtKQoJCXsKCQltdWxfYWRkKHJwWzBdLGFwWzBdLHcsYzEpOyBpZiAoLS1udW09PTApIHJldHVybiBjMTsKCQltdWxfYWRkKHJwWzFdLGFwWzFdLHcsYzEpOyBpZiAoLS1udW09PTApIHJldHVybiBjMTsKCQltdWxfYWRkKHJwWzJdLGFwWzJdLHcsYzEpOyByZXR1cm4gYzE7CgkJfQoJCglyZXR1cm4oYzEpOwoJfSAKCkJOX1VMT05HIGJuX211bF93b3JkcyhCTl9VTE9ORyAqcnAsIEJOX1VMT05HICphcCwgaW50IG51bSwgQk5fVUxPTkcgdykKCXsKCUJOX1VMT05HIGMxPTA7CgoJaWYgKG51bSA8PSAwKSByZXR1cm4oYzEpOwoKCXdoaWxlIChudW0mfjMpCgkJewoJCW11bChycFswXSxhcFswXSx3LGMxKTsKCQltdWwocnBbMV0sYXBbMV0sdyxjMSk7CgkJbXVsKHJwWzJdLGFwWzJdLHcsYzEpOwoJCW11bChycFszXSxhcFszXSx3LGMxKTsKCQlhcCs9NDsgcnArPTQ7IG51bS09NDsKCQl9CglpZiAobnVtKQoJCXsKCQltdWwocnBbMF0sYXBbMF0sdyxjMSk7IGlmICgtLW51bSA9PSAwKSByZXR1cm4gYzE7CgkJbXVsKHJwWzFdLGFwWzFdLHcsYzEpOyBpZiAoLS1udW0gPT0gMCkgcmV0dXJuIGMxOwoJCW11bChycFsyXSxhcFsyXSx3LGMxKTsKCQl9CglyZXR1cm4oYzEpOwoJfSAKCnZvaWQgYm5fc3FyX3dvcmRzKEJOX1VMT05HICpyLCBCTl9VTE9ORyAqYSwgaW50IG4pCiAgICAgICAgewoJaWYgKG4gPD0gMCkgcmV0dXJuOwoKCXdoaWxlIChuJn4zKQoJCXsKCQlzcXIoclswXSxyWzFdLGFbMF0pOwoJCXNxcihyWzJdLHJbM10sYVsxXSk7CgkJc3FyKHJbNF0scls1XSxhWzJdKTsKCQlzcXIocls2XSxyWzddLGFbM10pOwoJCWErPTQ7IHIrPTg7IG4tPTQ7CgkJfQoJaWYgKG4pCgkJewoJCXNxcihyWzBdLHJbMV0sYVswXSk7IGlmICgtLW4gPT0gMCkgcmV0dXJuOwoJCXNxcihyWzJdLHJbM10sYVsxXSk7IGlmICgtLW4gPT0gMCkgcmV0dXJuOwoJCXNxcihyWzRdLHJbNV0sYVsyXSk7CgkJfQoJfQoKQk5fVUxPTkcgYm5fZGl2X3dvcmRzKEJOX1VMT05HIGgsIEJOX1VMT05HIGwsIEJOX1VMT05HIGQpCnsJQk5fVUxPTkcgcmV0LHdhc3RlOwoKCWFzbSAoImRpdnEJJTQiCgkJOiAiPWEiKHJldCksIj1kIih3YXN0ZSkKCQk6ICJhIihsKSwiZCIoaCksImciKGQpCgkJOiAiY2MiKTsKCglyZXR1cm4gcmV0Owp9CgpCTl9VTE9ORyBibl9hZGRfd29yZHMgKEJOX1VMT05HICpycCwgQk5fVUxPTkcgKmFwLCBCTl9VTE9ORyAqYnAsaW50IG4pCnsgQk5fVUxPTkcgcmV0PTAsaT0wOwoKCWlmIChuIDw9IDApIHJldHVybiAwOwoKCWFzbSAoCgkiCXN1YnEJJTIsJTIJCVxuIgoJIi5hbGlnbiAxNgkJCVxuIgoJIjE6CW1vdnEJKCU0LCUyLDgpLCUwCVxuIgoJIglhZGNxCSglNSwlMiw4KSwlMAlcbiIKCSIJbW92cQklMCwoJTMsJTIsOCkJXG4iCgkiCWxlYXEJMSglMiksJTIJXG4iCgkiCWxvb3AJMWIJCVxuIgoJIglzYmJxCSUwLCUwCQlcbiIKCQk6ICI9JmEiKHJldCksIitjIihuKSwiPSZyIihpKQoJCTogInIiKHJwKSwiciIoYXApLCJyIihicCkKCQk6ICJjYyIKCSk7CgogIHJldHVybiByZXQmMTsKfQoKI2lmbmRlZiBTSU1JQ1MKQk5fVUxPTkcgYm5fc3ViX3dvcmRzIChCTl9VTE9ORyAqcnAsIEJOX1VMT05HICphcCwgQk5fVUxPTkcgKmJwLGludCBuKQp7IEJOX1VMT05HIHJldD0wLGk9MDsKCglpZiAobiA8PSAwKSByZXR1cm4gMDsKCglhc20gKAoJIglzdWJxCSUyLCUyCQlcbiIKCSIuYWxpZ24gMTYJCQlcbiIKCSIxOgltb3ZxCSglNCwlMiw4KSwlMAlcbiIKCSIJc2JicQkoJTUsJTIsOCksJTAJXG4iCgkiCW1vdnEJJTAsKCUzLCUyLDgpCVxuIgoJIglsZWFxCTEoJTIpLCUyCVxuIgoJIglsb29wCTFiCQlcbiIKCSIJc2JicQklMCwlMAkJXG4iCgkJOiAiPSZhIihyZXQpLCIrYyIobiksIj0mciIoaSkKCQk6ICJyIihycCksInIiKGFwKSwiciIoYnApCgkJOiAiY2MiCgkpOwoKICByZXR1cm4gcmV0JjE7Cn0KI2Vsc2UKLyogU2ltaWNzIDEuNDw3IGhhcyBidWdneSBzYmJxOi0oICovCiNkZWZpbmUgQk5fTUFTSzIgMHhmZmZmZmZmZmZmZmZmZmZmTApCTl9VTE9ORyBibl9zdWJfd29yZHMoQk5fVUxPTkcgKnIsIEJOX1VMT05HICphLCBCTl9VTE9ORyAqYiwgaW50IG4pCiAgICAgICAgewoJQk5fVUxPTkcgdDEsdDI7CglpbnQgYz0wOwoKCWlmIChuIDw9IDApIHJldHVybigoQk5fVUxPTkcpMCk7CgoJZm9yICg7OykKCQl7CgkJdDE9YVswXTsgdDI9YlswXTsKCQlyWzBdPSh0MS10Mi1jKSZCTl9NQVNLMjsKCQlpZiAodDEgIT0gdDIpIGM9KHQxIDwgdDIpOwoJCWlmICgtLW4gPD0gMCkgYnJlYWs7CgoJCXQxPWFbMV07IHQyPWJbMV07CgkJclsxXT0odDEtdDItYykmQk5fTUFTSzI7CgkJaWYgKHQxICE9IHQyKSBjPSh0MSA8IHQyKTsKCQlpZiAoLS1uIDw9IDApIGJyZWFrOwoKCQl0MT1hWzJdOyB0Mj1iWzJdOwoJCXJbMl09KHQxLXQyLWMpJkJOX01BU0syOwoJCWlmICh0MSAhPSB0MikgYz0odDEgPCB0Mik7CgkJaWYgKC0tbiA8PSAwKSBicmVhazsKCgkJdDE9YVszXTsgdDI9YlszXTsKCQlyWzNdPSh0MS10Mi1jKSZCTl9NQVNLMjsKCQlpZiAodDEgIT0gdDIpIGM9KHQxIDwgdDIpOwoJCWlmICgtLW4gPD0gMCkgYnJlYWs7CgoJCWErPTQ7CgkJYis9NDsKCQlyKz00OwoJCX0KCXJldHVybihjKTsKCX0KI2VuZGlmCgovKiBtdWxfYWRkX2MoYSxiLGMwLGMxLGMyKSAgLS0gYys9YSpiIGZvciB0aHJlZSB3b3JkIG51bWJlciBjPShjMixjMSxjMCkgKi8KLyogbXVsX2FkZF9jMihhLGIsYzAsYzEsYzIpIC0tIGMrPTIqYSpiIGZvciB0aHJlZSB3b3JkIG51bWJlciBjPShjMixjMSxjMCkgKi8KLyogc3FyX2FkZF9jKGEsaSxjMCxjMSxjMikgIC0tIGMrPWFbaV1eMiBmb3IgdGhyZWUgd29yZCBudW1iZXIgYz0oYzIsYzEsYzApICovCi8qIHNxcl9hZGRfYzIoYSxpLGMwLGMxLGMyKSAtLSBjKz0yKmFbaV0qYVtqXSBmb3IgdGhyZWUgd29yZCBudW1iZXIgYz0oYzIsYzEsYzApICovCgojaWYgMAovKiBvcmlnaW5hbCBtYWNyb3MgYXJlIGtlcHQgZm9yIHJlZmVyZW5jZSBwdXJwb3NlcyAqLwojZGVmaW5lIG11bF9hZGRfYyhhLGIsYzAsYzEsYzIpIHsJXAoJQk5fVUxPTkcgdGE9KGEpLHRiPShiKTsJCVwKCXQxID0gdGEgKiB0YjsJCQlcCgl0MiA9IEJOX1VNVUxUX0hJR0godGEsdGIpOwlcCgljMCArPSB0MTsgdDIgKz0gKGMwPHQxKT8xOjA7CVwKCWMxICs9IHQyOyBjMiArPSAoYzE8dDIpPzE6MDsJXAoJfQoKI2RlZmluZSBtdWxfYWRkX2MyKGEsYixjMCxjMSxjMikgewlcCglCTl9VTE9ORyB0YT0oYSksdGI9KGIpLHQwOwlcCgl0MSA9IEJOX1VNVUxUX0hJR0godGEsdGIpOwlcCgl0MCA9IHRhICogdGI7CQkJXAoJdDIgPSB0MSt0MTsgYzIgKz0gKHQyPHQxKT8xOjA7CVwKCXQxID0gdDArdDA7IHQyICs9ICh0MTx0MCk/MTowOwlcCgljMCArPSB0MTsgdDIgKz0gKGMwPHQxKT8xOjA7CVwKCWMxICs9IHQyOyBjMiArPSAoYzE8dDIpPzE6MDsJXAoJfQojZWxzZQojZGVmaW5lIG11bF9hZGRfYyhhLGIsYzAsYzEsYzIpCWRvIHsJXAoJYXNtICgibXVscSAlMyIJCQlcCgkJOiAiPWEiKHQxKSwiPWQiKHQyKQlcCgkJOiAiYSIoYSksIm0iKGIpCQlcCgkJOiAiY2MiKTsJCVwKCWFzbSAoImFkZHEgJTIsJTA7IGFkY3EgJTMsJTEiCVwKCQk6ICIrciIoYzApLCIrZCIodDIpCVwKCQk6ICJhIih0MSksImciKDApCVwKCQk6ICJjYyIpOwkJXAoJYXNtICgiYWRkcSAlMiwlMDsgYWRjcSAlMywlMSIJXAoJCTogIityIihjMSksIityIihjMikJXAoJCTogImQiKHQyKSwiZyIoMCkJXAoJCTogImNjIik7CQlcCgl9IHdoaWxlICgwKQoKI2RlZmluZSBzcXJfYWRkX2MoYSxpLGMwLGMxLGMyKQlkbyB7CVwKCWFzbSAoIm11bHEgJTIiCQkJXAoJCTogIj1hIih0MSksIj1kIih0MikJXAoJCTogImEiKGFbaV0pCQlcCgkJOiAiY2MiKTsJCVwKCWFzbSAoImFkZHEgJTIsJTA7IGFkY3EgJTMsJTEiCVwKCQk6ICIrciIoYzApLCIrZCIodDIpCVwKCQk6ICJhIih0MSksImciKDApCVwKCQk6ICJjYyIpOwkJXAoJYXNtICgiYWRkcSAlMiwlMDsgYWRjcSAlMywlMSIJXAoJCTogIityIihjMSksIityIihjMikJXAoJCTogImQiKHQyKSwiZyIoMCkJXAoJCTogImNjIik7CQlcCgl9IHdoaWxlICgwKQoKI2RlZmluZSBtdWxfYWRkX2MyKGEsYixjMCxjMSxjMikgZG8gewlcCglhc20gKCJtdWxxICUzIgkJCVwKCQk6ICI9YSIodDEpLCI9ZCIodDIpCVwKCQk6ICJhIihhKSwibSIoYikJCVwKCQk6ICJjYyIpOwkJXAoJYXNtICgiYWRkcSAlMCwlMDsgYWRjcSAlMiwlMSIJXAoJCTogIitkIih0MiksIityIihjMikJXAoJCTogImciKDApCQlcCgkJOiAiY2MiKTsJCVwKCWFzbSAoImFkZHEgJTAsJTA7IGFkY3EgJTIsJTEiCVwKCQk6ICIrYSIodDEpLCIrZCIodDIpCVwKCQk6ICJnIigwKQkJXAoJCTogImNjIik7CQlcCglhc20gKCJhZGRxICUyLCUwOyBhZGNxICUzLCUxIglcCgkJOiAiK3IiKGMwKSwiK2QiKHQyKQlcCgkJOiAiYSIodDEpLCJnIigwKQlcCgkJOiAiY2MiKTsJCVwKCWFzbSAoImFkZHEgJTIsJTA7IGFkY3EgJTMsJTEiCVwKCQk6ICIrciIoYzEpLCIrciIoYzIpCVwKCQk6ICJkIih0MiksImciKDApCVwKCQk6ICJjYyIpOwkJXAoJfSB3aGlsZSAoMCkKI2VuZGlmCgojZGVmaW5lIHNxcl9hZGRfYzIoYSxpLGosYzAsYzEsYzIpCVwKCW11bF9hZGRfYzIoKGEpW2ldLChhKVtqXSxjMCxjMSxjMikKCnZvaWQgYm5fbXVsX2NvbWJhOChCTl9VTE9ORyAqciwgQk5fVUxPTkcgKmEsIEJOX1VMT05HICpiKQoJewoJQk5fVUxPTkcgdDEsdDI7CglCTl9VTE9ORyBjMSxjMixjMzsKCgljMT0wOwoJYzI9MDsKCWMzPTA7CgltdWxfYWRkX2MoYVswXSxiWzBdLGMxLGMyLGMzKTsKCXJbMF09YzE7CgljMT0wOwoJbXVsX2FkZF9jKGFbMF0sYlsxXSxjMixjMyxjMSk7CgltdWxfYWRkX2MoYVsxXSxiWzBdLGMyLGMzLGMxKTsKCXJbMV09YzI7CgljMj0wOwoJbXVsX2FkZF9jKGFbMl0sYlswXSxjMyxjMSxjMik7CgltdWxfYWRkX2MoYVsxXSxiWzFdLGMzLGMxLGMyKTsKCW11bF9hZGRfYyhhWzBdLGJbMl0sYzMsYzEsYzIpOwoJclsyXT1jMzsKCWMzPTA7CgltdWxfYWRkX2MoYVswXSxiWzNdLGMxLGMyLGMzKTsKCW11bF9hZGRfYyhhWzFdLGJbMl0sYzEsYzIsYzMpOwoJbXVsX2FkZF9jKGFbMl0sYlsxXSxjMSxjMixjMyk7CgltdWxfYWRkX2MoYVszXSxiWzBdLGMxLGMyLGMzKTsKCXJbM109YzE7CgljMT0wOwoJbXVsX2FkZF9jKGFbNF0sYlswXSxjMixjMyxjMSk7CgltdWxfYWRkX2MoYVszXSxiWzFdLGMyLGMzLGMxKTsKCW11bF9hZGRfYyhhWzJdLGJbMl0sYzIsYzMsYzEpOwoJbXVsX2FkZF9jKGFbMV0sYlszXSxjMixjMyxjMSk7CgltdWxfYWRkX2MoYVswXSxiWzRdLGMyLGMzLGMxKTsKCXJbNF09YzI7CgljMj0wOwoJbXVsX2FkZF9jKGFbMF0sYls1XSxjMyxjMSxjMik7CgltdWxfYWRkX2MoYVsxXSxiWzRdLGMzLGMxLGMyKTsKCW11bF9hZGRfYyhhWzJdLGJbM10sYzMsYzEsYzIpOwoJbXVsX2FkZF9jKGFbM10sYlsyXSxjMyxjMSxjMik7CgltdWxfYWRkX2MoYVs0XSxiWzFdLGMzLGMxLGMyKTsKCW11bF9hZGRfYyhhWzVdLGJbMF0sYzMsYzEsYzIpOwoJcls1XT1jMzsKCWMzPTA7CgltdWxfYWRkX2MoYVs2XSxiWzBdLGMxLGMyLGMzKTsKCW11bF9hZGRfYyhhWzVdLGJbMV0sYzEsYzIsYzMpOwoJbXVsX2FkZF9jKGFbNF0sYlsyXSxjMSxjMixjMyk7CgltdWxfYWRkX2MoYVszXSxiWzNdLGMxLGMyLGMzKTsKCW11bF9hZGRfYyhhWzJdLGJbNF0sYzEsYzIsYzMpOwoJbXVsX2FkZF9jKGFbMV0sYls1XSxjMSxjMixjMyk7CgltdWxfYWRkX2MoYVswXSxiWzZdLGMxLGMyLGMzKTsKCXJbNl09YzE7CgljMT0wOwoJbXVsX2FkZF9jKGFbMF0sYls3XSxjMixjMyxjMSk7CgltdWxfYWRkX2MoYVsxXSxiWzZdLGMyLGMzLGMxKTsKCW11bF9hZGRfYyhhWzJdLGJbNV0sYzIsYzMsYzEpOwoJbXVsX2FkZF9jKGFbM10sYls0XSxjMixjMyxjMSk7CgltdWxfYWRkX2MoYVs0XSxiWzNdLGMyLGMzLGMxKTsKCW11bF9hZGRfYyhhWzVdLGJbMl0sYzIsYzMsYzEpOwoJbXVsX2FkZF9jKGFbNl0sYlsxXSxjMixjMyxjMSk7CgltdWxfYWRkX2MoYVs3XSxiWzBdLGMyLGMzLGMxKTsKCXJbN109YzI7CgljMj0wOwoJbXVsX2FkZF9jKGFbN10sYlsxXSxjMyxjMSxjMik7CgltdWxfYWRkX2MoYVs2XSxiWzJdLGMzLGMxLGMyKTsKCW11bF9hZGRfYyhhWzVdLGJbM10sYzMsYzEsYzIpOwoJbXVsX2FkZF9jKGFbNF0sYls0XSxjMyxjMSxjMik7CgltdWxfYWRkX2MoYVszXSxiWzVdLGMzLGMxLGMyKTsKCW11bF9hZGRfYyhhWzJdLGJbNl0sYzMsYzEsYzIpOwoJbXVsX2FkZF9jKGFbMV0sYls3XSxjMyxjMSxjMik7CglyWzhdPWMzOwoJYzM9MDsKCW11bF9hZGRfYyhhWzJdLGJbN10sYzEsYzIsYzMpOwoJbXVsX2FkZF9jKGFbM10sYls2XSxjMSxjMixjMyk7CgltdWxfYWRkX2MoYVs0XSxiWzVdLGMxLGMyLGMzKTsKCW11bF9hZGRfYyhhWzVdLGJbNF0sYzEsYzIsYzMpOwoJbXVsX2FkZF9jKGFbNl0sYlszXSxjMSxjMixjMyk7CgltdWxfYWRkX2MoYVs3XSxiWzJdLGMxLGMyLGMzKTsKCXJbOV09YzE7CgljMT0wOwoJbXVsX2FkZF9jKGFbN10sYlszXSxjMixjMyxjMSk7CgltdWxfYWRkX2MoYVs2XSxiWzRdLGMyLGMzLGMxKTsKCW11bF9hZGRfYyhhWzVdLGJbNV0sYzIsYzMsYzEpOwoJbXVsX2FkZF9jKGFbNF0sYls2XSxjMixjMyxjMSk7CgltdWxfYWRkX2MoYVszXSxiWzddLGMyLGMzLGMxKTsKCXJbMTBdPWMyOwoJYzI9MDsKCW11bF9hZGRfYyhhWzRdLGJbN10sYzMsYzEsYzIpOwoJbXVsX2FkZF9jKGFbNV0sYls2XSxjMyxjMSxjMik7CgltdWxfYWRkX2MoYVs2XSxiWzVdLGMzLGMxLGMyKTsKCW11bF9hZGRfYyhhWzddLGJbNF0sYzMsYzEsYzIpOwoJclsxMV09YzM7CgljMz0wOwoJbXVsX2FkZF9jKGFbN10sYls1XSxjMSxjMixjMyk7CgltdWxfYWRkX2MoYVs2XSxiWzZdLGMxLGMyLGMzKTsKCW11bF9hZGRfYyhhWzVdLGJbN10sYzEsYzIsYzMpOwoJclsxMl09YzE7CgljMT0wOwoJbXVsX2FkZF9jKGFbNl0sYls3XSxjMixjMyxjMSk7CgltdWxfYWRkX2MoYVs3XSxiWzZdLGMyLGMzLGMxKTsKCXJbMTNdPWMyOwoJYzI9MDsKCW11bF9hZGRfYyhhWzddLGJbN10sYzMsYzEsYzIpOwoJclsxNF09YzM7CglyWzE1XT1jMTsKCX0KCnZvaWQgYm5fbXVsX2NvbWJhNChCTl9VTE9ORyAqciwgQk5fVUxPTkcgKmEsIEJOX1VMT05HICpiKQoJewoJQk5fVUxPTkcgdDEsdDI7CglCTl9VTE9ORyBjMSxjMixjMzsKCgljMT0wOwoJYzI9MDsKCWMzPTA7CgltdWxfYWRkX2MoYVswXSxiWzBdLGMxLGMyLGMzKTsKCXJbMF09YzE7CgljMT0wOwoJbXVsX2FkZF9jKGFbMF0sYlsxXSxjMixjMyxjMSk7CgltdWxfYWRkX2MoYVsxXSxiWzBdLGMyLGMzLGMxKTsKCXJbMV09YzI7CgljMj0wOwoJbXVsX2FkZF9jKGFbMl0sYlswXSxjMyxjMSxjMik7CgltdWxfYWRkX2MoYVsxXSxiWzFdLGMzLGMxLGMyKTsKCW11bF9hZGRfYyhhWzBdLGJbMl0sYzMsYzEsYzIpOwoJclsyXT1jMzsKCWMzPTA7CgltdWxfYWRkX2MoYVswXSxiWzNdLGMxLGMyLGMzKTsKCW11bF9hZGRfYyhhWzFdLGJbMl0sYzEsYzIsYzMpOwoJbXVsX2FkZF9jKGFbMl0sYlsxXSxjMSxjMixjMyk7CgltdWxfYWRkX2MoYVszXSxiWzBdLGMxLGMyLGMzKTsKCXJbM109YzE7CgljMT0wOwoJbXVsX2FkZF9jKGFbM10sYlsxXSxjMixjMyxjMSk7CgltdWxfYWRkX2MoYVsyXSxiWzJdLGMyLGMzLGMxKTsKCW11bF9hZGRfYyhhWzFdLGJbM10sYzIsYzMsYzEpOwoJcls0XT1jMjsKCWMyPTA7CgltdWxfYWRkX2MoYVsyXSxiWzNdLGMzLGMxLGMyKTsKCW11bF9hZGRfYyhhWzNdLGJbMl0sYzMsYzEsYzIpOwoJcls1XT1jMzsKCWMzPTA7CgltdWxfYWRkX2MoYVszXSxiWzNdLGMxLGMyLGMzKTsKCXJbNl09YzE7CglyWzddPWMyOwoJfQoKdm9pZCBibl9zcXJfY29tYmE4KEJOX1VMT05HICpyLCBCTl9VTE9ORyAqYSkKCXsKCUJOX1VMT05HIHQxLHQyOwoJQk5fVUxPTkcgYzEsYzIsYzM7CgoJYzE9MDsKCWMyPTA7CgljMz0wOwoJc3FyX2FkZF9jKGEsMCxjMSxjMixjMyk7CglyWzBdPWMxOwoJYzE9MDsKCXNxcl9hZGRfYzIoYSwxLDAsYzIsYzMsYzEpOwoJclsxXT1jMjsKCWMyPTA7CglzcXJfYWRkX2MoYSwxLGMzLGMxLGMyKTsKCXNxcl9hZGRfYzIoYSwyLDAsYzMsYzEsYzIpOwoJclsyXT1jMzsKCWMzPTA7CglzcXJfYWRkX2MyKGEsMywwLGMxLGMyLGMzKTsKCXNxcl9hZGRfYzIoYSwyLDEsYzEsYzIsYzMpOwoJclszXT1jMTsKCWMxPTA7CglzcXJfYWRkX2MoYSwyLGMyLGMzLGMxKTsKCXNxcl9hZGRfYzIoYSwzLDEsYzIsYzMsYzEpOwoJc3FyX2FkZF9jMihhLDQsMCxjMixjMyxjMSk7CglyWzRdPWMyOwoJYzI9MDsKCXNxcl9hZGRfYzIoYSw1LDAsYzMsYzEsYzIpOwoJc3FyX2FkZF9jMihhLDQsMSxjMyxjMSxjMik7CglzcXJfYWRkX2MyKGEsMywyLGMzLGMxLGMyKTsKCXJbNV09YzM7CgljMz0wOwoJc3FyX2FkZF9jKGEsMyxjMSxjMixjMyk7CglzcXJfYWRkX2MyKGEsNCwyLGMxLGMyLGMzKTsKCXNxcl9hZGRfYzIoYSw1LDEsYzEsYzIsYzMpOwoJc3FyX2FkZF9jMihhLDYsMCxjMSxjMixjMyk7CglyWzZdPWMxOwoJYzE9MDsKCXNxcl9hZGRfYzIoYSw3LDAsYzIsYzMsYzEpOwoJc3FyX2FkZF9jMihhLDYsMSxjMixjMyxjMSk7CglzcXJfYWRkX2MyKGEsNSwyLGMyLGMzLGMxKTsKCXNxcl9hZGRfYzIoYSw0LDMsYzIsYzMsYzEpOwoJcls3XT1jMjsKCWMyPTA7CglzcXJfYWRkX2MoYSw0LGMzLGMxLGMyKTsKCXNxcl9hZGRfYzIoYSw1LDMsYzMsYzEsYzIpOwoJc3FyX2FkZF9jMihhLDYsMixjMyxjMSxjMik7CglzcXJfYWRkX2MyKGEsNywxLGMzLGMxLGMyKTsKCXJbOF09YzM7CgljMz0wOwoJc3FyX2FkZF9jMihhLDcsMixjMSxjMixjMyk7CglzcXJfYWRkX2MyKGEsNiwzLGMxLGMyLGMzKTsKCXNxcl9hZGRfYzIoYSw1LDQsYzEsYzIsYzMpOwoJcls5XT1jMTsKCWMxPTA7CglzcXJfYWRkX2MoYSw1LGMyLGMzLGMxKTsKCXNxcl9hZGRfYzIoYSw2LDQsYzIsYzMsYzEpOwoJc3FyX2FkZF9jMihhLDcsMyxjMixjMyxjMSk7CglyWzEwXT1jMjsKCWMyPTA7CglzcXJfYWRkX2MyKGEsNyw0LGMzLGMxLGMyKTsKCXNxcl9hZGRfYzIoYSw2LDUsYzMsYzEsYzIpOwoJclsxMV09YzM7CgljMz0wOwoJc3FyX2FkZF9jKGEsNixjMSxjMixjMyk7CglzcXJfYWRkX2MyKGEsNyw1LGMxLGMyLGMzKTsKCXJbMTJdPWMxOwoJYzE9MDsKCXNxcl9hZGRfYzIoYSw3LDYsYzIsYzMsYzEpOwoJclsxM109YzI7CgljMj0wOwoJc3FyX2FkZF9jKGEsNyxjMyxjMSxjMik7CglyWzE0XT1jMzsKCXJbMTVdPWMxOwoJfQoKdm9pZCBibl9zcXJfY29tYmE0KEJOX1VMT05HICpyLCBCTl9VTE9ORyAqYSkKCXsKCUJOX1VMT05HIHQxLHQyOwoJQk5fVUxPTkcgYzEsYzIsYzM7CgoJYzE9MDsKCWMyPTA7CgljMz0wOwoJc3FyX2FkZF9jKGEsMCxjMSxjMixjMyk7CglyWzBdPWMxOwoJYzE9MDsKCXNxcl9hZGRfYzIoYSwxLDAsYzIsYzMsYzEpOwoJclsxXT1jMjsKCWMyPTA7CglzcXJfYWRkX2MoYSwxLGMzLGMxLGMyKTsKCXNxcl9hZGRfYzIoYSwyLDAsYzMsYzEsYzIpOwoJclsyXT1jMzsKCWMzPTA7CglzcXJfYWRkX2MyKGEsMywwLGMxLGMyLGMzKTsKCXNxcl9hZGRfYzIoYSwyLDEsYzEsYzIsYzMpOwoJclszXT1jMTsKCWMxPTA7CglzcXJfYWRkX2MoYSwyLGMyLGMzLGMxKTsKCXNxcl9hZGRfYzIoYSwzLDEsYzIsYzMsYzEpOwoJcls0XT1jMjsKCWMyPTA7CglzcXJfYWRkX2MyKGEsMywyLGMzLGMxLGMyKTsKCXJbNV09YzM7CgljMz0wOwoJc3FyX2FkZF9jKGEsMyxjMSxjMixjMyk7CglyWzZdPWMxOwoJcls3XT1jMjsKCX0KI2VuZGlmCg==