Re: pop up windows
Steven J Abner <[email protected]> Fri, 14 Feb 2025 13:39:34 -0500
| Newsgroups | gmane.comp.freedesktop.xcb |
|---|---|
| Message-ID | <[email protected]> |
--=-BXs3pLQl4e97SJrQz3FO Content-Type: text/plain; charset=us-ascii; format=flowed On Fri, Feb 14 2025 at 05:24:22 PM +0000, Steven J Abner <[email protected]> wrote: > only receiving events with button continuously pressed Crying, sigh... but very thankful for your reply! I sent you revised code. Has your black window, but extra debug code you can use to verify that at least the xcb version of grab pointer doesn't work as you describe. I've used all three windows (popup, parent, root), sync/async, before and after button release that creates the dropdown. It still requires a 'grab' or that button is not released for one to receive events. Extra #if0 code was my next logical attempt before the, omg have you seen, evdev attempt at getting events. I'm really not that bright! Nor do I want to replace X Server. LOL this code was to replace the defunct gdk3. Ohh I will try Xlib's GrabPointer, I know somewhere I've got the header/add on to use both codes :) And in main() is example of shutting off debug specific events. Steve --=-BXs3pLQl4e97SJrQz3FO Content-Type: text/x-csrc Content-Disposition: attachment; filename=xpop.c Content-Transfer-Encoding: base64 I2luY2x1ZGUgPHhjYi94Y2IuaD4gIC8qIGhhcyBjb3JyZWN0IHN5cy90eXBlcyAqLwojaW5jbHVk ZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CiNpbmNs dWRlIDxzdGRib29sLmg+CiNpbmNsdWRlIDxpbnR0eXBlcy5oPgojaW5jbHVkZSA8bGltaXRzLmg+ CiNpbmNsdWRlIDxwb2xsLmg+CgovKiBnY2MgLWFuc2kgLXBlZGFudGljIC1XYWxsIC1Xbm8tdW5r bm93bi1wcmFnbWFzIC1nIC1vIHhwb3AgeHBvcC5jIC1seGNiICovCgp0eXBlZGVmIHN0cnVjdCBf UGh4SW50ZXJmYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaHhJbnRlcmZhY2U7CnR5 cGVkZWYgc3RydWN0IF9QaHhSZWN0YW5nbGUgeyBpbnQxNl90IHgsIHksIHcsIGg7IH0gICAgIFBo eFJlY3RhbmdsZTsKCmJvb2wgICAgICAgICAgX3dpbmRvd19pc190cmFuc2llbnQoeGNiX3dpbmRv d190IHdpbmRvdyk7CnhjYl93aW5kb3dfdCAgdWlfZHJvcGRvd25fY3JlYXRlKFBoeFJlY3Rhbmds ZSBjb25maWd1cmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhjYl93aW5kb3df dCB0cmFuc2llbnRfZm9yX3dpbmRvdyk7CgoKeGNiX2Nvbm5lY3Rpb25fdCAgICAgKmNvbm5lY3Rp b24gPSBOVUxMOwp4Y2JfYXRvbV90IFdNX1BST1RPQ09MUzsKeGNiX2F0b21fdCBXTV9ERUxFVEVf V0lORE9XOwoKc3RydWN0IF9QaHhJbnRlcmZhY2UgewogYm9vbCAgICAgICAgICBtYXBwZWQ7CiBQ aHhSZWN0YW5nbGUgIG1ldGVfYm94OwogeGNiX3dpbmRvd190ICB3aW5kb3c7Cn0gaWZhY2UwID0g eyBmYWxzZSwgezB9LCAwIH0sIGlmYWNlMSA9IHsgZmFsc2UsIHswfSwgMCB9OwoKYm9vbCBTQklU X0ZPQ1VTX0NMSUNLID0gZmFsc2U7CmJvb2wgU0JJVF9SRUxFQVNFX0lHTk9SRSA9IGZhbHNlOwpQ aHhJbnRlcmZhY2UgKmhhc19mb2N1cyA9IE5VTEw7CgojaWYgKF9fU1REQ19WRVJTSU9OX18gPD0g MTk5OTAxTCkKICNkZWZpbmUgUkVDVEFOR0xFKGEsYixjLGQsZSkgXAogIGEueCA9IGIsIGEueSA9 IGMsIGEudyA9IGQsIGEuaCA9IGUKI2Vsc2UKICNkZWZpbmUgUkVDVEFOR0xFKGEsYixjLGQsZSkg XAogIGEgPSAoUGh4UmVjdGFuZ2xlKXsgYiwgYywgZCwgZSB9CiNlbmRpZgoKI2RlZmluZSBERUJV RyhhLGIpIFwKICBwcmludGYoIiVkICVzXG4iLCBhLCBiKTsKCi8qIHNldCBhbGwgZXZlbnRzIG9u ICovCnVpbnQ2NF90IGRlYnVnX2ZsYWdzID0gKHVpbnQ2NF90KTB4RkZGRkZGRkZGRkZGRkZGRjsK c3RhdGljIHZvaWQKX2RlYnVnX2V2ZW50KHhjYl9nZW5lcmljX2V2ZW50X3QgKm52dCkgewoKICB1 aW50OF90IHJlc3BvbnNlID0gbnZ0LT5yZXNwb25zZV90eXBlICYgKHVpbnQ4X3QpfjB4MDgwOwog IHVpbnQ2NF90IG9uX2JpdCA9ICh1aW50NjRfdCkxIDw8IHJlc3BvbnNlOwogIGlmICgoZGVidWdf ZmxhZ3MgJiBvbl9iaXQpID09IDApICByZXR1cm47CgogIHN3aXRjaCAocmVzcG9uc2UpIHsKICAg IGNhc2UgWENCX0tFWV9QUkVTUzogeyAgICAgICAgIC8qIHJlc3BvbnNlX3R5cGUgMiAqLwogICAg ICB4Y2Jfa2V5X3ByZXNzX2V2ZW50X3QgKmtwID0gKHhjYl9rZXlfcHJlc3NfZXZlbnRfdCopbnZ0 OwogICAgICBERUJVRyhrcC0+ZXZlbnQsICJLRVlfUFJFU1MiKTsKICAgICAgYnJlYWs7CiAgICB9 CiAgICBjYXNlIFhDQl9LRVlfUkVMRUFTRTogeyAgICAgICAvKiByZXNwb25zZV90eXBlIDMgKi8K ICAgICAgeGNiX2tleV9wcmVzc19ldmVudF90ICprcCA9ICh4Y2Jfa2V5X3ByZXNzX2V2ZW50X3Qq KW52dDsKICAgICAgREVCVUcoa3AtPmV2ZW50LCAiS0VZX1JFTEVBU0UiKTsKICAgICAgYnJlYWs7 CiAgICB9CiAgICBjYXNlIFhDQl9CVVRUT05fUFJFU1M6IHsgICAgICAvKiByZXNwb25zZV90eXBl IDQgKi8KICAgICAgeGNiX2J1dHRvbl9wcmVzc19ldmVudF90ICpicDsKICAgICAgYnAgPSAoeGNi X2J1dHRvbl9wcmVzc19ldmVudF90KiludnQ7CiAgICAgIERFQlVHKGJwLT5ldmVudCwgIkJVVFRP Tl9QUkVTUyIpOwogICAgICBicmVhazsKICAgIH0KICAgIGNhc2UgWENCX0JVVFRPTl9SRUxFQVNF OiB7ICAgIC8qIHJlc3BvbnNlX3R5cGUgNSAqLwogICAgICB4Y2JfYnV0dG9uX3ByZXNzX2V2ZW50 X3QgKmJwOwogICAgICBicCA9ICh4Y2JfYnV0dG9uX3ByZXNzX2V2ZW50X3QqKW52dDsKICAgICAg REVCVUcoYnAtPmV2ZW50LCAiQlVUVE9OX1JFTEVBU0UiKTsKICAgIH0KICAgIGNhc2UgWENCX01P VElPTl9OT1RJRlk6IHsgICAgIC8qIHJlc3BvbnNlX3R5cGUgNiAqLwogICAgICB4Y2JfbW90aW9u X25vdGlmeV9ldmVudF90ICptb3Rpb24KICAgICAgICA9ICh4Y2JfbW90aW9uX25vdGlmeV9ldmVu dF90KiludnQ7CiAgICAgIERFQlVHKG1vdGlvbi0+ZXZlbnQsICJNT1RJT05fTk9USUZZIik7CiAg ICAgIGJyZWFrOwogICAgfQogICAgY2FzZSBYQ0JfRU5URVJfTk9USUZZOiB7ICAgICAgLyogcmVz cG9uc2VfdHlwZSA3ICovCiAgICAgIHhjYl9lbnRlcl9ub3RpZnlfZXZlbnRfdCAqeGluZwogICAg ICAgID0gKHhjYl9lbnRlcl9ub3RpZnlfZXZlbnRfdCopbnZ0OwogICAgICBERUJVRyh4aW5nLT5l dmVudCwgIkVOVEVSX05PVElGWSIpOwogICAgICBicmVhazsKICAgIH0KICAgIGNhc2UgWENCX0xF QVZFX05PVElGWTogeyAgICAgIC8qIHJlc3BvbnNlX3R5cGUgOCAqLwogICAgICB4Y2JfZW50ZXJf bm90aWZ5X2V2ZW50X3QgKnhpbmcKICAgICAgICA9ICh4Y2JfZW50ZXJfbm90aWZ5X2V2ZW50X3Qq KW52dDsKICAgICAgREVCVUcoeGluZy0+ZXZlbnQsICJMRUFWRV9OT1RJRlkiKTsKICAgICAgYnJl YWs7CiAgICB9CiAgICBjYXNlIFhDQl9GT0NVU19JTjogeyAgICAgICAgICAvKiByZXNwb25zZV90 eXBlIDkgKi8KICAgICAgeGNiX2ZvY3VzX2luX2V2ZW50X3QgKmZvY3VzID0gKHhjYl9mb2N1c19p bl9ldmVudF90KiludnQ7CiAgICAgIERFQlVHKGZvY3VzLT5ldmVudCwgIkZPQ1VTX0lOIik7CiAg ICAgIGJyZWFrOwogICAgfQogICAgY2FzZSBYQ0JfRk9DVVNfT1VUOiB7ICAgICAgICAgLyogcmVz cG9uc2VfdHlwZSAxMCAqLwogICAgICB4Y2JfZm9jdXNfaW5fZXZlbnRfdCAqZm9jdXMgPSAoeGNi X2ZvY3VzX2luX2V2ZW50X3QqKW52dDsKICAgICAgREVCVUcoZm9jdXMtPmV2ZW50LCAiRk9DVVNf T1VUIik7CiAgICAgIGJyZWFrOwogICAgfQogICAgY2FzZSBYQ0JfRVhQT1NFOiB7ICAgICAgICAg ICAgLyogcmVzcG9uc2VfdHlwZSAxMiAqLwogICAgICB4Y2JfZXhwb3NlX2V2ZW50X3QgKmV4cG9z ZSA9ICh4Y2JfZXhwb3NlX2V2ZW50X3QqKW52dDsKICAgICAgREVCVUcoZXhwb3NlLT53aW5kb3cs ICJFWFBPU0UiKTsKICAgICAgYnJlYWs7CiAgICB9CiAgICBjYXNlIFhDQl9WSVNJQklMSVRZX05P VElGWTogeyAvKiByZXNwb25zZV90eXBlIDE1ICovCiAgICAgIHhjYl92aXNpYmlsaXR5X25vdGlm eV9ldmVudF90ICpzZWVuCiAgICAgICAgPSAoeGNiX3Zpc2liaWxpdHlfbm90aWZ5X2V2ZW50X3Qq KW52dDsKICAgICAgREVCVUcoc2Vlbi0+d2luZG93LCAiVklTSUJJTElUWV9OT1RJRlkiKTsKICAg ICAgYnJlYWs7CiAgICB9CiAgICBjYXNlIFhDQl9ERVNUUk9ZX05PVElGWTogeyAgICAvKiByZXNw b25zZV90eXBlICAxNyAqLwogICAgICAgIC8qIGFzc3VtZSBhIGtpbGwsIGRlbGV0ZSBhbGwgd2lu ZG93cyAoZG8gdGhlaXIgdGhpbmcpCiAgICAgICAgICAgc2VuZCBmYWxzZSB0byBleGl0IGxvb3Ag Ki8KICAgICAgeGNiX2Rlc3Ryb3lfbm90aWZ5X2V2ZW50X3QgKmRlc3Ryb3kKICAgICAgICA9ICh4 Y2JfZGVzdHJveV9ub3RpZnlfZXZlbnRfdCopbnZ0OwogICAgICBERUJVRyhkZXN0cm95LT53aW5k b3csICJYQ0JfREVTVFJPWV9OT1RJRlkiKTsKICAgICAgYnJlYWs7CiAgICB9CiAgICBjYXNlIFhD Ql9VTk1BUF9OT1RJRlk6IHsgICAgICAvKiByZXNwb25zZV90eXBlIDE4ICovCiAgICAgIHhjYl91 bm1hcF9ub3RpZnlfZXZlbnRfdCAqdW5tYXAKICAgICAgICA9ICh4Y2JfdW5tYXBfbm90aWZ5X2V2 ZW50X3QqKW52dDsKICAgICAgREVCVUcodW5tYXAtPndpbmRvdywgIlhDQl9VTk1BUF9OT1RJRlki KTsKICAgICAgYnJlYWs7CiAgICB9CiAgICBjYXNlIFhDQl9NQVBfTk9USUZZOiB7ICAgICAgICAv KiByZXNwb25zZV90eXBlIDE5ICovCiAgICAgIHhjYl9tYXBfbm90aWZ5X2V2ZW50X3QgKm1hcAog ICAgICAgID0gKHhjYl9tYXBfbm90aWZ5X2V2ZW50X3QqKW52dDsKICAgICAgIERFQlVHKG1hcC0+ d2luZG93LCAiWENCX01BUF9OT1RJRlkiKTsKICAgICAgYnJlYWs7CiAgICB9CiAgICBjYXNlIFhD Ql9SRVBBUkVOVF9OT1RJRlk6IHsgICAvKiByZXNwb25zZV90eXBlIDIxICovCiAgICAgIHhjYl9y ZXBhcmVudF9ub3RpZnlfZXZlbnRfdCAqcnAKICAgICAgICA9ICh4Y2JfcmVwYXJlbnRfbm90aWZ5 X2V2ZW50X3QqKW52dDsKICAgICAgREVCVUcocnAtPndpbmRvdywgIlhDQl9SRVBBUkVOVF9OT1RJ RlkiKTsKICAgICAgYnJlYWs7CiAgICB9CiAgICBjYXNlIFhDQl9DT05GSUdVUkVfTk9USUZZOiB7 ICAvKiByZXNwb25zZV90eXBlIDIyICovCiAgICAgIHhjYl9jb25maWd1cmVfbm90aWZ5X2V2ZW50 X3QgKmNvbmZpZ3VyZQogICAgICAgID0gKHhjYl9jb25maWd1cmVfbm90aWZ5X2V2ZW50X3QqKW52 dDsKICAgICAgREVCVUcoY29uZmlndXJlLT5ldmVudCwgIkNPTkZJR1VSRV9OT1RJRlkiKTsKICAg ICAgYnJlYWs7CiAgICB9CiAgICBjYXNlIFhDQl9QUk9QRVJUWV9OT1RJRlk6IHsgICAvKiByZXNw b25zZV90eXBlIDI4ICovCiAgICAgIHhjYl9wcm9wZXJ0eV9ub3RpZnlfZXZlbnRfdCAqcHJvcAog ICAgICAgID0gKHhjYl9wcm9wZXJ0eV9ub3RpZnlfZXZlbnRfdCopbnZ0OwogICAgICBERUJVRyhw cm9wLT53aW5kb3csICJYQ0JfUFJPUEVSVFlfTk9USUZZIik7CiAgICAgIGJyZWFrOwogICAgfQog ICAgY2FzZSBYQ0JfU0VMRUNUSU9OX0NMRUFSOiB7ICAgLyogcmVzcG9uc2VfdHlwZSAyOSAqLwog ICAgICB4Y2Jfc2VsZWN0aW9uX2NsZWFyX2V2ZW50X3QgKmNsZWFyCiAgICAgICAgPSAoeGNiX3Nl bGVjdGlvbl9jbGVhcl9ldmVudF90KiludnQ7CiAgICAgIERFQlVHKGNsZWFyLT5vd25lciwgIlhD Ql9TRUxFQ1RJT05fQ0xFQVIiKTsKICAgICAgYnJlYWs7CiAgICB9CiAgICBjYXNlIFhDQl9TRUxF Q1RJT05fUkVRVUVTVDogeyAvKiByZXNwb25zZV90eXBlIDMwICovCiAgICAgIHhjYl9zZWxlY3Rp b25fcmVxdWVzdF9ldmVudF90ICpyZXF1ZXN0CiAgICAgICAgPSAoeGNiX3NlbGVjdGlvbl9yZXF1 ZXN0X2V2ZW50X3QqKW52dDsKICAgICAgREVCVUcocmVxdWVzdC0+b3duZXIsICJYQ0JfU0VMRUNU SU9OX1JFUVVFU1QiKTsKICAgICAgYnJlYWs7CiAgICB9CiAgICBjYXNlIFhDQl9TRUxFQ1RJT05f Tk9USUZZOiB7ICAvKiByZXNwb25zZV90eXBlIDMxICovCiAgICAgIHhjYl9zZWxlY3Rpb25fbm90 aWZ5X2V2ZW50X3QgKnNlbGVjdGlvbgogICAgICAgID0gKHhjYl9zZWxlY3Rpb25fbm90aWZ5X2V2 ZW50X3QqKW52dDsKICAgICAgREVCVUcoc2VsZWN0aW9uLT5yZXF1ZXN0b3IsICJYQ0JfU0VMRUNU SU9OX05PVElGWSIpOwogICAgICBicmVhazsKICAgIH0KICAgIGNhc2UgWENCX0NMSUVOVF9NRVNT QUdFOiB7ICAgIC8qIHJlc3BvbnNlX3R5cGUgMzMgKi8KICAgICAgeGNiX2NsaWVudF9tZXNzYWdl X2V2ZW50X3QgKm1lc3NhZ2UKICAgICAgICA9ICh4Y2JfY2xpZW50X21lc3NhZ2VfZXZlbnRfdCop bnZ0OwogICAgICBERUJVRyhtZXNzYWdlLT53aW5kb3csICJYQ0JfQ0xJRU5UX01FU1NBR0UiKTsK ICAgICAgYnJlYWs7CiAgICB9CiAgICBkZWZhdWx0OgogICAgICBpZiAobnZ0LT5yZXNwb25zZV90 eXBlID09IDApIHsKICAgICAgICB4Y2JfZ2VuZXJpY19lcnJvcl90ICplcnIgPSAoeGNiX2dlbmVy aWNfZXJyb3JfdCopbnZ0OwogICAgICAgIGlmIChlcnItPmVycm9yX2NvZGUgPT0gKHVpbnQ4X3Qp MTQzKQogICAgICAgICAgcHV0cygiU0lHVEVSTSByZWNlaXZlZCIpOwogICAgICAgIGVsc2UKICAg ICAgICAgIHByaW50ZigiZXJyb3I6ICUiUFJJdTgiXG4iLCBlcnItPmVycm9yX2NvZGUpOwogICAg ICAgIGJyZWFrOwogICAgICB9CiAgICAgICAgLyogVW5rbm93biBldmVudCB0eXBlLCB1c2UgdG8g dHJhY2sgY29kaW5nIHByb2JsZW1zICovCiAgICAgIHByaW50ZigiVW5rbm93biBldmVudDogJSJQ Ukl1OCJcbiIsIG52dC0+cmVzcG9uc2VfdHlwZSk7CiAgICAgIGJyZWFrOwogIH0KfQoKClBoeElu dGVyZmFjZSAqCl9pbnRlcmZhY2VfZm9yKHhjYl93aW5kb3dfdCB3aW5kb3cpIHsKICBpZiAoaWZh Y2UwLndpbmRvdyA9PSB3aW5kb3cpCiAgICByZXR1cm4gJmlmYWNlMDsKICByZXR1cm4gJmlmYWNl MTsKfQoKc3RhdGljIGJvb2wKX2V2ZW50X21vdXNlKHhjYl9nZW5lcmljX2V2ZW50X3QgKm52dCkg ewoKICBib29sIGxvY3VzID0gKChudnQtPnJlc3BvbnNlX3R5cGUgJiAodWludDhfdCl+MHg4MCkg PT0gWENCX0JVVFRPTl9QUkVTUyk7CiAgeGNiX2J1dHRvbl9wcmVzc19ldmVudF90ICptb3VzZSA9 ICh4Y2JfYnV0dG9uX3ByZXNzX2V2ZW50X3QqKW52dDsKICBQaHhJbnRlcmZhY2UgKmlmYWNlID0g X2ludGVyZmFjZV9mb3IobW91c2UtPmV2ZW50KTsKCiAgaWYgKCFsb2N1cykgewogICAgICAvKiBm aXJzdCBjbGljayBpbiB1bmZvY3VzZWQgd2luZG93IHVzZWQgdG8gYnJpbmcgQUJPVkUgYW5kIGZv Y3VzICovCiAgICBpZiAoU0JJVF9GT0NVU19DTElDSykgewogICAgICBTQklUX0ZPQ1VTX0NMSUNL ID0gZmFsc2U7CiAgICAgIHByaW50ZigiICAgICAgICVkLCBTQklUX0ZPQ1VTX0NMSUNLIHJlc2V0 LlxuIiwgaWZhY2UtPndpbmRvdyk7CiAgICAgIFNCSVRfUkVMRUFTRV9JR05PUkUgPSBmYWxzZTsK ICAgICAgcHJpbnRmKCIgICAgICAgJWQsIFNCSVRfUkVMRUFTRV9JR05PUkUgcmVzZXQuXG4iLCBp ZmFjZS0+d2luZG93KTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CnB1dHMoImdyYWIgcG9pbnRl ciIpOwp4Y2JfZ3JhYl9wb2ludGVyKGNvbm5lY3Rpb24sCjEsCmlmYWNlLT53aW5kb3csCih1aW50 MTZfdCkweEZGRkUsClhDQl9HUkFCX01PREVfQVNZTkMsClhDQl9HUkFCX01PREVfQVNZTkMsIFhD Ql9OT05FLApYQ0JfTk9ORSwgWENCX0NVUlJFTlRfVElNRSk7CiAgICAgIC8qIGNvZGUgZm9yIGJ1 dHRvbiByZWxlYXNlLCBkcmFnIGNhc2VzICovCiAgICAgIC8qIGNhc2VzIHdoZXJlIGJ1dHRvbiBy ZWxlYXNlIHNob3VsZCBiZSBpZ25vcmVkLiAqLwogICAgaWYgKFNCSVRfUkVMRUFTRV9JR05PUkUp IHsKICAgICAgU0JJVF9SRUxFQVNFX0lHTk9SRSA9IGZhbHNlOwogICAgICBwcmludGYoIiAgICAg ICAlZCwgU0JJVF9SRUxFQVNFX0lHTk9SRSByZXNldC5cbiIsIGlmYWNlLT53aW5kb3cpOwogICAg ICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgICAgLyogY29kZSBmb3IgYnV0dG9uIHJlbGVhc2UsIG5v bi1kcmFnIHJlbGF0ZWQgKi8KICB9IGVsc2UgewogICAgaWYgKGhhc19mb2N1cy0+d2luZG93ICE9 IG1vdXNlLT5ldmVudCkgewogICAgICB4Y2JfdW5tYXBfd2luZG93KGNvbm5lY3Rpb24sIGlmYWNl MS53aW5kb3cpOwogICAgICBpZmFjZTEubWFwcGVkID0gZmFsc2U7CiAgICAgIFNCSVRfUkVMRUFT RV9JR05PUkUgPSB0cnVlOwogICAgICBwcmludGYoIiAgICAgICAlZCwgU0JJVF9SRUxFQVNFX0lH Tk9SRSBzZXQuXG4iLCBpZmFjZTAud2luZG93KTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAg ICAgIC8qIGNvZGUgZm9yIGJ1dHRvbiBwcmVzcyAqLwogICAgICAvKiBTdG9wIHByb2Nlc3Npbmcg bW91c2UsIHdhcyB3aW5kb3cgYmVpbmcgZm9jdXNlZCBieSBjbGljayBpbiBjb250ZW50LiAqLwog ICAgaWYgKFNCSVRfRk9DVVNfQ0xJQ0spIHsKICAgICAgcHV0cygiIGlnbm9yZSBidXR0b24gcHJl c3MgU0JJVF9GT0NVU19DTElDSyIpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgICAgLyog YnV0dG9uIHByZXNzIGluIGZvY3VzZWQgY29udGVudCAqLwogICAgaWYgKCFpZmFjZTEubWFwcGVk KSB7CiAgICAgIHVpbnQzMl90IHZhbHVlc1syXTsKICAgICAgUGh4UmVjdGFuZ2xlIHB1cF9ib3gg PSB7IDc1LCA3NSwgMjUwLCAyNTAgfTsKICAgICAgaWYgKGlmYWNlMS53aW5kb3cgPT0gMCkgewog ICAgICAgIGlmYWNlMS53aW5kb3cgPSB1aV9kcm9wZG93bl9jcmVhdGUocHVwX2JveCwgaWZhY2Ut PndpbmRvdyk7CiAgICAgIH0KICAgICAgdmFsdWVzWzBdID0gcHVwX2JveC54ICsgaWZhY2UwLm1l dGVfYm94Lng7CiAgICAgIHZhbHVlc1sxXSA9IHB1cF9ib3gueSArIGlmYWNlMC5tZXRlX2JveC55 OwogICAgICB4Y2JfY29uZmlndXJlX3dpbmRvdyhjb25uZWN0aW9uLCBpZmFjZTEud2luZG93LAog ICAgICAgICAgICAgICAgICAgWENCX0NPTkZJR19XSU5ET1dfWCB8IFhDQl9DT05GSUdfV0lORE9X X1ksIHZhbHVlcyk7CiAgICAgIHhjYl9tYXBfd2luZG93KGNvbm5lY3Rpb24sIGlmYWNlMS53aW5k b3cpOwogICAgICBpZmFjZTEubWFwcGVkID0gdHJ1ZTsKICAgICAgU0JJVF9SRUxFQVNFX0lHTk9S RSA9IHRydWU7CiAgICAgIHByaW50ZigiICAgICAgICVkLCBTQklUX1JFTEVBU0VfSUdOT1JFIHNl dC5cbiIsIGlmYWNlMC53aW5kb3cpOwogICAgfQogIH0KICAgIC8qIGNvbW1vbiBtb3VzZSBjb2Rl ICovCiAgcmV0dXJuIHRydWU7Cn0KCnN0YXRpYyBib29sCl9ldmVudF9sZWF2ZSh4Y2JfZ2VuZXJp Y19ldmVudF90ICpudnQpIHsKCiNpZiAwCiAgeGNiX2VudGVyX25vdGlmeV9ldmVudF90ICp4aW5n ID0gKHhjYl9lbnRlcl9ub3RpZnlfZXZlbnRfdCopbnZ0OwoKICAgICAgICAgIC8qIE5vdGUgb24g ZGlhbG9ncyB0aGlzIGxvb3Agc2hvdWxkbid0IHJ1biAqLwoKICBpZiAoeGluZy0+ZXZlbnQgPT0g aWZhY2UxLndpbmRvdykgewogICAgZG8gewogICAgICB4Y2JfcXVlcnlfcG9pbnRlcl9jb29raWVf dCBjMAogICAgICAgID0geGNiX3F1ZXJ5X3BvaW50ZXIoY29ubmVjdGlvbiwgeGluZy0+ZXZlbnQp OwogICAgICB4Y2JfcXVlcnlfcG9pbnRlcl9yZXBseV90ICpyMAogICAgICAgID0geGNiX3F1ZXJ5 X3BvaW50ZXJfcmVwbHkoY29ubmVjdGlvbiwgYzAsIE5VTEwpOwogICAgICBpZiAoIChyMC0+d2lu X3ggPj0gMCkgJiYgKHIwLT53aW5feCA8IGlmYWNlMS5tZXRlX2JveC53KQogICAgICAgICAgJiYg KHIwLT53aW5feSA+PSAwKSAmJiAocjAtPndpbl95IDwgaWZhY2UxLm1ldGVfYm94LmgpICkgewog ICAgICAgICAgLyogcmUtZW50ZXJlZCBvdXIgZHJvcGRvd24sIGRvIG5vdGhpbmcgKi8KICAgICAg ICBmcmVlKHIwKTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBpZiAoKHIwLT5tYXNrICYg WENCX0tFWV9CVVRfTUFTS19CVVRUT05fMSkgIT0gMCkgewogICAgICAgICAgLyogc2VuZCBhIGZv Y3VzIGluIGV2ZW50IHRvIHBhcmVudD8gb3Igb3V0IHRvIGRyb3Bkb3duPyAqLwogICAgICAgICAg Lyogb3IgYnV0dG9uIHJlbGVhc2UgPyAqLwogICAgICAgIGZyZWUocjApOwogICAgICAgIGJyZWFr OwogICAgICB9CiAgICAgICAgLyogb24gZWFjaCBwYXNzIHJlbW92ZSBYU2VydmVyIGV2ZW50PyAq LwogICAgICBmcmVlKHIwKTsKICAgIH0gd2hpbGUgKDEpOwogIH0KI2VuZGlmCiAgcmV0dXJuIHRy dWU7Cn0KCnN0YXRpYyBib29sCl9ldmVudF9mb2N1cyh4Y2JfZ2VuZXJpY19ldmVudF90ICpudnQp IHsKCiAgYm9vbCBsb2N1cyA9ICgobnZ0LT5yZXNwb25zZV90eXBlICYgKHVpbnQ4X3QpfjB4ODAp ID09IFhDQl9GT0NVU19JTik7CiAgeGNiX2ZvY3VzX2luX2V2ZW50X3QgKmZvY3VzID0gKHhjYl9m b2N1c19pbl9ldmVudF90KiludnQ7CgogIGlmIChsb2N1cykgewogICAgeGNiX3F1ZXJ5X3BvaW50 ZXJfY29va2llX3QgYzAKICAgICAgPSB4Y2JfcXVlcnlfcG9pbnRlcihjb25uZWN0aW9uLCBmb2N1 cy0+ZXZlbnQpOwogICAgeGNiX3F1ZXJ5X3BvaW50ZXJfcmVwbHlfdCAqcjAKICAgICAgPSB4Y2Jf cXVlcnlfcG9pbnRlcl9yZXBseShjb25uZWN0aW9uLCBjMCwgTlVMTCk7CgojaWYgMAogICAgaWYg KGZvY3VzLT5ldmVudCA9PSBpZmFjZTEud2luZG93KSB7CiAgICAgIGlmICggKHIwLT53aW5feCA+ PSAwKSAmJiAocjAtPndpbl94IDwgaWZhY2UwLm1ldGVfYm94LncpCiAgICAgICAgICAmJiAocjAt Pndpbl95ID49IDApICYmIChyMC0+d2luX3kgPCBpZmFjZTAubWV0ZV9ib3guaCkgKSB7CiAgICAg ICAgcmV0dXJuIHRydWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvKiBzZW5kIGxlYXZlIGV2 ZW50ICovCiAgICAgIH0KICAgIH0KI2VuZGlmCgogICAgaWYgKCAocjAtPndpbl94ID49IDApICYm IChyMC0+d2luX3ggPCBpZmFjZTAubWV0ZV9ib3gudykKICAgICAgICAmJiAocjAtPndpbl95ID49 IDApICYmIChyMC0+d2luX3kgPCBpZmFjZTAubWV0ZV9ib3guaCkgKSB7CiAgICAgIGlmICgocjAt Pm1hc2sgJiBYQ0JfS0VZX0JVVF9NQVNLX0JVVFRPTl8xKSAhPSAwKSB7CiAgICAgICAgU0JJVF9G T0NVU19DTElDSyA9IHRydWU7CiAgICAgICAgcHJpbnRmKCIgICAgICAgJWQsIFNCSVRfRk9DVVNf Q0xJQ0sgc2V0LlxuIiwgZm9jdXMtPmV2ZW50KTsKICAgICAgfQogICAgfQogICAgZnJlZShyMCk7 CiAgICBoYXNfZm9jdXMgPSBfaW50ZXJmYWNlX2Zvcihmb2N1cy0+ZXZlbnQpOwogIH0gZWxzZSB7 CiAgICBpZiAoIChfd2luZG93X2lzX3RyYW5zaWVudChmb2N1cy0+ZXZlbnQpKSAmJiAoaWZhY2Ux Lm1hcHBlZCkgKSB7CiAgICAgIHhjYl91bm1hcF93aW5kb3coY29ubmVjdGlvbiwgaWZhY2UxLndp bmRvdyk7CiAgICAgIGlmYWNlMS5tYXBwZWQgPSBmYWxzZTsKICAgIH0KICAgIGhhc19mb2N1cyA9 IE5VTEw7CiAgfQogIHJldHVybiB0cnVlOwp9Cgpib29sCl9ldmVudF9leHBvc2UoeGNiX2dlbmVy aWNfZXZlbnRfdCAqbnZ0KSB7CiAgcmV0dXJuIHRydWU7Cn0Kc3RhdGljIGJvb2wKX2V2ZW50X2Nv bmZpZ3VyZSh4Y2JfZ2VuZXJpY19ldmVudF90ICpudnQpIHsKCiAgeGNiX2NvbmZpZ3VyZV9ub3Rp ZnlfZXZlbnRfdCAqY29uZmlndXJlCiAgICA9ICh4Y2JfY29uZmlndXJlX25vdGlmeV9ldmVudF90 KiludnQ7CiAgeGNiX3dpbmRvd190IHdpbmRvdyA9IGNvbmZpZ3VyZS0+ZXZlbnQ7CiAgUGh4SW50 ZXJmYWNlICppZmFjZSA9IF9pbnRlcmZhY2VfZm9yKHdpbmRvdyk7CgogIGlmICgqKHVpbnQ2NF90 KikmaWZhY2UtPm1ldGVfYm94LnggPT0gKih1aW50NjRfdCopJmNvbmZpZ3VyZS0+eCkKICAgIHJl dHVybiB0cnVlOwoKICAgIC8qIERvIGludGVybmFsIGNvbmZpZ3VyYXRpb24gKi8KCiAgICAvKiBT ZXQgbWV0ZV9ib3ggaWYgbW92ZSBvY2N1cnJlZCAqLwogIGlmICgoY29uZmlndXJlLT54IHwgY29u ZmlndXJlLT55KSAhPSAwKSB7CiAgICBpZiAoIChpZmFjZS0+bWV0ZV9ib3gueCAhPSBjb25maWd1 cmUtPngpCiAgICAgICAgfHwgKGlmYWNlLT5tZXRlX2JveC55ICE9IGNvbmZpZ3VyZS0+eSkgKSB7 CiAgICAgICAgLyogTmVlZGVkLCBpZiB3YW50IGFjY3VyYXRlIHBvc2l0aW9uaW5nLiBXTSBpcyB1 bnJlbGlhYmxlICovCiAgICAgIHhjYl9zY3JlZW5fdCAqc2NyZWVuCiAgICAgICAgPSB4Y2Jfc2V0 dXBfcm9vdHNfaXRlcmF0b3IoeGNiX2dldF9zZXR1cChjb25uZWN0aW9uKSkuZGF0YTsKICAgICAg eGNiX3RyYW5zbGF0ZV9jb29yZGluYXRlc19yZXBseV90ICpjZmcKICAgICAgICA9IHhjYl90cmFu c2xhdGVfY29vcmRpbmF0ZXNfcmVwbHkoY29ubmVjdGlvbiwKICAgICAgICAgICAgICAgICAgICAg ICAgICB4Y2JfdHJhbnNsYXRlX2Nvb3JkaW5hdGVzKGNvbm5lY3Rpb24sCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LCBzY3JlZW4tPnJvb3QsIDAsIDApLCBOVUxM KTsKICAgICAgaWZhY2UtPm1ldGVfYm94LnggPSBjZmctPmRzdF94OwogICAgICBpZmFjZS0+bWV0 ZV9ib3gueSA9IGNmZy0+ZHN0X3k7CiAgICAgIGZyZWUoY2ZnKTsKICAgIH0KICB9CiAgcmV0dXJu IHRydWU7Cn0KCnN0YXRpYyBpbnQzMl90Cl9wcm9jZXNzX3RpbWVycyh2b2lkKSB7CiAgcmV0dXJu IElOVF9NQVg7Cn0KCnN0YXRpYyBib29sCl9wcm9jZXNzX2V2ZW50KHhjYl9nZW5lcmljX2V2ZW50 X3QgKm52dCkgewoKX2RlYnVnX2V2ZW50KG52dCk7CgogIHN3aXRjaCAobnZ0LT5yZXNwb25zZV90 eXBlICYgKHVpbnQ4X3QpfjB4ODApIHsKCiAgICBjYXNlIFhDQl9LRVlfUFJFU1M6ICAgICAgICAg ICAvKiByZXNwb25zZV90eXBlIDIgKi8KICAgIGNhc2UgWENCX0tFWV9SRUxFQVNFOiB7ICAgICAg IC8qIHJlc3BvbnNlX3R5cGUgMyAqLwogICAgICBicmVhazsKICAgIH0KCiAgICBjYXNlIFhDQl9C VVRUT05fUFJFU1M6ICAgICAgICAvKiByZXNwb25zZV90eXBlIDQgKi8KICAgIGNhc2UgWENCX0JV VFRPTl9SRUxFQVNFOiB7ICAgIC8qIHJlc3BvbnNlX3R5cGUgNSAqLwogICAgICBfZXZlbnRfbW91 c2UobnZ0KTsKICAgICAgYnJlYWs7CiAgICB9CgogICAgY2FzZSBYQ0JfTU9USU9OX05PVElGWTog eyAgICAgLyogcmVzcG9uc2VfdHlwZSA2ICovCiAgICBjYXNlIFhDQl9FTlRFUl9OT1RJRlk6ICAg ICAgICAvKiByZXNwb25zZV90eXBlIDcgKi8KICAgICAgYnJlYWs7CiAgICB9CgogICAgY2FzZSBY Q0JfTEVBVkVfTk9USUZZOiB7ICAgICAgLyogcmVzcG9uc2VfdHlwZSA4ICovCiAgICAgIF9ldmVu dF9sZWF2ZShudnQpOwogICAgICBicmVhazsKICAgIH0KCiAgICBjYXNlIFhDQl9GT0NVU19JTjog ICAgICAgICAgICAvKiByZXNwb25zZV90eXBlIDkgKi8KICAgIGNhc2UgWENCX0ZPQ1VTX09VVDog eyAgICAgICAgIC8qIHJlc3BvbnNlX3R5cGUgMTAgKi8KICAgICAgX2V2ZW50X2ZvY3VzKG52dCk7 CiAgICAgIGJyZWFrOwogICAgfQoKICAgIGNhc2UgWENCX0VYUE9TRTogeyAgICAgICAgICAgIC8q IHJlc3BvbnNlX3R5cGUgMTIgKi8KICAgICAgYnJlYWs7CiAgICB9CgogICAgY2FzZSBYQ0JfVklT SUJJTElUWV9OT1RJRlk6IHsgLyogcmVzcG9uc2VfdHlwZSAxNSAqLwogICAgICB4Y2JfdmlzaWJp bGl0eV9ub3RpZnlfZXZlbnRfdCAqc2VlbgogICAgICAgID0gKHhjYl92aXNpYmlsaXR5X25vdGlm eV9ldmVudF90KiludnQ7CiAgICAgIGlmIChfd2luZG93X2lzX3RyYW5zaWVudChzZWVuLT53aW5k b3cpKSB7CiAgICAgICAgeGNiX3NldF9pbnB1dF9mb2N1cyhjb25uZWN0aW9uLCBYQ0JfSU5QVVRf Rk9DVVNfUEFSRU5ULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZW4tPndp bmRvdywgWENCX0NVUlJFTlRfVElNRSk7CiAgICAgIH0KICAgICAgYnJlYWs7CiAgICB9CgogICAg Y2FzZSBYQ0JfREVTVFJPWV9OT1RJRlk6IHsgICAgLyogcmVzcG9uc2VfdHlwZSAxNyAqLwogICAg ICAgIC8qIGFzc3VtZSBhIGtpbGwsIGRlbGV0ZSBhbGwgd2luZG93cyAoZG8gdGhlaXIgdGhpbmcp CiAgICAgICAgICAgc2VuZCBmYWxzZSB0byBleGl0IGxvb3AgKi8KICAgICAgeGNiX2Rlc3Ryb3lf bm90aWZ5X2V2ZW50X3QgKmRlc3Ryb3kKICAgICAgICA9ICh4Y2JfZGVzdHJveV9ub3RpZnlfZXZl bnRfdCopbnZ0OwogICAgICAgaWYgKCFfd2luZG93X2lzX3RyYW5zaWVudChkZXN0cm95LT53aW5k b3cpKSB7CiAgICAgICAgZnJlZShudnQpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQog ICAgICBicmVhazsKICAgIH0KICAgICAgLyogdGhlc2UgNCBiZWNhdXNlIG9mIFhDQl9FVkVOVF9N QVNLX1NUUlVDVFVSRV9OT1RJRlkgKi8KICAgIGNhc2UgWENCX1VOTUFQX05PVElGWTogeyAgICAg IC8qIHJlc3BvbnNlX3R5cGUgMTggKi8KICAgIGNhc2UgWENCX01BUF9OT1RJRlk6ICAgICAgICAg IC8qIHJlc3BvbnNlX3R5cGUgMTkgKi8KICAgICAgYnJlYWs7CiAgICB9CiAgICBjYXNlIFhDQl9S RVBBUkVOVF9OT1RJRlk6IHsgICAvKiByZXNwb25zZV90eXBlIDIxICovCiAgICAgICAgLyogcG9z aXRpb24gYWZ0ZXIgbWFwLCB0byBkZXNpZ24gdXNlciByZXF1ZXN0ZWQgb2Ygd2luZG93CiAgICAg ICAgICogc2V0IG9uY2UgYW5kIHdoZW4gd2luZG93IG1hbmFnZXIgYXNrcyB0byByZXBhcmVudAog ICAgICAgICAqIGRvbnQgbmVlZCBkdXJpbmcgaWNvbi9kZWljb25pZnkKICAgICAgICAgKiBkb2Vz bnQgc3RvcCBXTSBjb25maWd1cmVzLCBidXQgd2lsbCBiZSBzZW50IGFmdGVyIG1hcCBub3RpZnkg Ki8KICAgICAgeGNiX3JlcGFyZW50X25vdGlmeV9ldmVudF90ICpycAogICAgICAgID0gKHhjYl9y ZXBhcmVudF9ub3RpZnlfZXZlbnRfdCopbnZ0OwogICAgICBQaHhJbnRlcmZhY2UgKmlmYWNlID0g X2ludGVyZmFjZV9mb3IocnAtPndpbmRvdyk7CiAgICAgIHVpbnQzMl90IHZhbHVlc1syXTsKICAg ICAgdmFsdWVzWzBdID0gaWZhY2UtPm1ldGVfYm94Lng7CiAgICAgIHZhbHVlc1sxXSA9IGlmYWNl LT5tZXRlX2JveC55OwogICAgICB4Y2JfY29uZmlndXJlX3dpbmRvdyhjb25uZWN0aW9uLCBpZmFj ZS0+d2luZG93LAogICAgICAgICAgICAgICAgICAgWENCX0NPTkZJR19XSU5ET1dfWCB8IFhDQl9D T05GSUdfV0lORE9XX1ksIHZhbHVlcyk7CiAgICAgIGJyZWFrOwogICAgfQogICAgY2FzZSBYQ0Jf Q09ORklHVVJFX05PVElGWTogeyAgLyogcmVzcG9uc2VfdHlwZSAyMiAqLwogICAgICBfZXZlbnRf Y29uZmlndXJlKG52dCk7CiAgICAgIGJyZWFrOwogICAgfQoKICAgIGNhc2UgWENCX1BST1BFUlRZ X05PVElGWTogeyAgIC8qIHJlc3BvbnNlX3R5cGUgMjggKi8KICAgIGNhc2UgWENCX1NFTEVDVElP Tl9DTEVBUjogICAgIC8qIHJlc3BvbnNlX3R5cGUgMjkgKi8KICAgIGNhc2UgWENCX1NFTEVDVElP Tl9SRVFVRVNUOiAgIC8qIHJlc3BvbnNlX3R5cGUgMzAgKi8KICAgIGNhc2UgWENCX1NFTEVDVElP Tl9OT1RJRlk6ICAgIC8qIHJlc3BvbnNlX3R5cGUgMzEgKi8KICAgICAgYnJlYWs7CiAgICB9Cgog ICAgY2FzZSBYQ0JfQ0xJRU5UX01FU1NBR0U6IHsgICAgLyogcmVzcG9uc2VfdHlwZSAzMyAqLwog ICAgICB4Y2JfY2xpZW50X21lc3NhZ2VfZXZlbnRfdCAqY20KICAgICAgICA9ICh4Y2JfY2xpZW50 X21lc3NhZ2VfZXZlbnRfdCopbnZ0OwogICAgICBpZiAoY20tPnR5cGUgIT0gV01fUFJPVE9DT0xT KSAgZ290byByZXBvcnQ7CiAgICAgIGlmIChfd2luZG93X2lzX3RyYW5zaWVudChjbS0+d2luZG93 KSkgewogICAgICAgIHB1dHMoInVuZXhwZWN0ZWQiKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBp ZiAoaWZhY2UxLndpbmRvdyAhPSAwKSB7CiAgICAgICAgICB4Y2JfdW5tYXBfd2luZG93KGNvbm5l Y3Rpb24sIGlmYWNlMS53aW5kb3cpOwogICAgICAgICAgeGNiX2Rlc3Ryb3lfd2luZG93KGNvbm5l Y3Rpb24sIGlmYWNlMS53aW5kb3cpOwogICAgICAgIH0KICAgICAgICB4Y2JfdW5tYXBfd2luZG93 KGNvbm5lY3Rpb24sIGlmYWNlMC53aW5kb3cpOwogICAgICAgIHhjYl9kZXN0cm95X3dpbmRvdyhj b25uZWN0aW9uLCBpZmFjZTAud2luZG93KTsKICAgICAgfQogICAgICBicmVhazsKICAgIH0KCiAg ICBkZWZhdWx0OgogICAgICBpZiAobnZ0LT5yZXNwb25zZV90eXBlID09IDApIHsKICAgICAgICB4 Y2JfZ2VuZXJpY19lcnJvcl90ICplcnIgPSAoeGNiX2dlbmVyaWNfZXJyb3JfdCopbnZ0OwogICAg ICAgIHByaW50ZigiZXJyb3I6ICUiUFJJdTgiXG4iLCBlcnItPmVycm9yX2NvZGUpOwogICAgICAg IGJyZWFrOwogICAgICB9CnJlcG9ydDoKICAgICAgICAvKiBVbmtub3duIGV2ZW50IHR5cGUsIHVz ZSB0byB0cmFjayBjb2RpbmcgcHJvYmxlbXMgKi8KICAgICAgcHJpbnRmKCJVbmtub3duIGV2ZW50 OiAlIlBSSXU4IlxuIiwgbnZ0LT5yZXNwb25zZV90eXBlKTsKICAgICAgYnJlYWs7CgogIH0gLyog ZW5kIHN3aXRjaChyZXNwb25zZV90eXBlKSAqLwogICAgLyogbnZ0IG5vIGxvbmdlciBuZWVkZWQg Ki8KICBmcmVlKG52dCk7CiAgICAvKiBjcml0aWNhbCEgb3RoZXJ3aXNlIHdvbnQgcHJvY2VzcyBh bnl0aGluZyBkb25lICovCiAgeGNiX2ZsdXNoKGNvbm5lY3Rpb24pOwogIHJldHVybiB0cnVlOwp9 CgpzdGF0aWMgdm9pZAp4Y2JfbWFpbih2b2lkKSB7CgogICAgLyogc2V0IGFsbCBiZWZvcmUgdGhy b3VnaCB0byBYc2VydmVyICovCiAgeGNiX2ZsdXNoKGNvbm5lY3Rpb24pOwoKICBkbyB7CiAgICBp bnQgdGltZW91dDsKICAgIHhjYl9nZW5lcmljX2V2ZW50X3QgKmV2ZW50OwogICAgd2hpbGUgKChl dmVudCA9IHhjYl9wb2xsX2Zvcl9ldmVudChjb25uZWN0aW9uKSkgIT0gTlVMTCkKICAgICAgICAv KiBfcHJvY2Vzc19ldmVudCgpIHJldHVybnMgJ3J1bm5pbmcnIGZvciBtYWluIGxvb3AuICovCiAg ICAgIGlmIChfcHJvY2Vzc19ldmVudChldmVudCkgPT0gZmFsc2UpICBnb3RvIGNsZWFudXA7CiAg ICBkbyB7CiAgICAgICAgLyogX3Byb2Nlc3NfdGltZXJzKCkgcnVucyBhbnkgdGltZXJzIHRoYXQg YXJlIGltbWVkaWF0ZWx5IHBlbmRpbmcsCiAgICAgICAgICAgYW5kIHJldHVybnMgdGhlIG51bWJl ciBvZiBtaWxsaXNlY29uZHMgdW50aWwgdGhlIG5leHQgdGltZXIKICAgICAgICAgICBpbiB0aGUg cXVldWUgaXMgcmVhZHkuCiAgICAgICAgICAgX3Byb2Nlc3NfdGltZXJzKCkgcmV0dXJucyBJTlRf TUFYIGlmIHRoZXJlIGFyZSBubyB0aW1lcnMuICovCiAgICAgICAgLyogX3Byb2Nlc3NfdGltZXJz KCkgYWxzbyByZW1vdmVzIGZyb20gdGltZW91dCBpdHMgcnVuIHRpbWUuICovCiAgICAgIHRpbWVv dXQgPSBfcHJvY2Vzc190aW1lcnMoKTsKICAgICAgaWYgKChldmVudCA9IHhjYl9wb2xsX2Zvcl9x dWV1ZWRfZXZlbnQoY29ubmVjdGlvbikpID09IE5VTEwpICBicmVhazsKICAgICAgICBpZiAoX3By b2Nlc3NfZXZlbnQoZXZlbnQpID09IGZhbHNlKSAgZ290byBjbGVhbnVwOwogICAgfSB3aGlsZSAo MSk7CiAgICBpZiAodGltZW91dCA+IDYpIHsKICAgICAgc3RydWN0IHBvbGxmZCBwZmRbMV07CiAg ICAgIHBmZC0+ZmQgPSB4Y2JfZ2V0X2ZpbGVfZGVzY3JpcHRvcihjb25uZWN0aW9uKTsKICAgICAg cGZkLT5ldmVudHMgPSBQT0xMSU47CiAgICAgIHBmZC0+cmV2ZW50cyA9IFBPTExPVVQ7CiAgICAg IHBvbGwocGZkLCAxLCB0aW1lb3V0KTsKICAgIH0KICB9IHdoaWxlICgxKTsKICAgIC8qIHJlY2Vp dmVkIFhDQl9ERVNUUk9ZX05PVElGWSAqLwpjbGVhbnVwOgogIHJldHVybjsKfQoKdm9pZAp1aV93 aW5kb3dfbmFtZSh4Y2Jfd2luZG93X3Qgd2luZG93KSB7CgogIHhjYl9pbnRlcm5fYXRvbV9jb29r aWVfdCBjb29raWUKICAgID0geGNiX2ludGVybl9hdG9tKGNvbm5lY3Rpb24sIDEsIDcsICJXTV9O QU1FIik7CiAgeGNiX2ludGVybl9hdG9tX3JlcGx5X3QgKnJlcGx5CiAgICA9IHhjYl9pbnRlcm5f YXRvbV9yZXBseShjb25uZWN0aW9uLCBjb29raWUsIE5VTEwpOwogIHhjYl9pbnRlcm5fYXRvbV9j b29raWVfdCBjb29raWUyCiAgICA9IHhjYl9pbnRlcm5fYXRvbShjb25uZWN0aW9uLCAwLCA2LCAi U1RSSU5HIik7CiAgeGNiX2ludGVybl9hdG9tX3JlcGx5X3QgKnJlcGx5MgogICAgPSB4Y2JfaW50 ZXJuX2F0b21fcmVwbHkoY29ubmVjdGlvbiwgY29va2llMiwgTlVMTCk7CgogIGNoYXIgdGl0bGVb MTZdOwogIHNwcmludGYodGl0bGUsICIlZCIsIHdpbmRvdyk7CiAgeGNiX2NoYW5nZV9wcm9wZXJ0 eShjb25uZWN0aW9uLCBYQ0JfUFJPUF9NT0RFX1JFUExBQ0UsIHdpbmRvdywKICAgICAgICAgICAg ICAgICAgICAgICByZXBseS0+YXRvbSwgcmVwbHkyLT5hdG9tLCA4LAogICAgICAgICAgICAgICAg ICAgICAgIHN0cmxlbih0aXRsZSksIHRpdGxlKTsKICBmcmVlKHJlcGx5KTsKICBmcmVlKHJlcGx5 Mik7Cn0KCmJvb2wKX3dpbmRvd19pc190cmFuc2llbnQoeGNiX3dpbmRvd190IHdpbmRvdykgewoK ICB4Y2JfZ2V0X3Byb3BlcnR5X2Nvb2tpZV90IGNvb2tpZQogICAgPSB4Y2JfZ2V0X3Byb3BlcnR5 KGNvbm5lY3Rpb24sIDAsIHdpbmRvdywKICAgICAgICAgICAgICAgICAgICAgICBYQ0JfQVRPTV9X TV9UUkFOU0lFTlRfRk9SLCBYQ0JfQVRPTV9XSU5ET1csIDAsIDEpOwogIHhjYl9nZXRfcHJvcGVy dHlfcmVwbHlfdCAqcmVwbHkKICAgID0geGNiX2dldF9wcm9wZXJ0eV9yZXBseShjb25uZWN0aW9u LCBjb29raWUsIE5VTEwpOwogIGJvb2wgdHJhbnNpZW50ID0gZmFsc2U7CiAgaWYgKHJlcGx5ICE9 IE5VTEwpIHsKICAgIGlmICggKHJlcGx5LT50eXBlID09IFhDQl9BVE9NX1dJTkRPVykKICAgICAg ICAmJiAocmVwbHktPmZvcm1hdCA9PSAzMikKICAgICAgICAmJiAocmVwbHktPmxlbmd0aCAhPSAw KSApIHsKICAgICAgdHJhbnNpZW50ID0gdHJ1ZTsKICAgIH0KICAgIGZyZWUocmVwbHkpOwogIH0K ICByZXR1cm4gdHJhbnNpZW50Owp9CgpzdGF0aWMgdm9pZApfd2luZG93X2V2ZW50X2RlbGV0ZSh4 Y2JfY29ubmVjdGlvbl90ICpjb25uZWN0aW9uLCB4Y2Jfd2luZG93X3Qgd2luZG93KSB7CgogICAg LyogYWxsb3cgZGVsZXRlIHdpbmRvdyBzbyBjYW4gcXVpdCBhcHBsaWNhdGlvbi4gQXZvaWQgXkMu ICovCiAgeGNiX2NoYW5nZV9wcm9wZXJ0eShjb25uZWN0aW9uLCBYQ0JfUFJPUF9NT0RFX1JFUExB Q0UsIHdpbmRvdywKICAgICAgICAgICAgICAgICAgICAgIFdNX1BST1RPQ09MUywgWENCX0FUT01f QVRPTSwgMzIsIDEsCiAgICAgICAgICAgICAgICAgICAgICAmV01fREVMRVRFX1dJTkRPVyk7Cn0K CnN0YXRpYyB4Y2Jfd2luZG93X3QKX3dpbmRvd19jcmVhdGUoUGh4UmVjdGFuZ2xlIGNvbmZpZ3Vy ZSkgewoKICB4Y2Jfc2NyZWVuX3QgKnNjcmVlbjsKICB4Y2Jfd2luZG93X3Qgd2luZG93OwogIHVp bnQzMl90IG1hc2s7CiAgdWludDMyX3QgdmFsdWVzWzJdOwoKICBpZiAoY29ubmVjdGlvbiA9PSBO VUxMKSB7CiAgICB4Y2JfaW50ZXJuX2F0b21fY29va2llX3QgYzAsIGMxOwogICAgeGNiX2ludGVy bl9hdG9tX3JlcGx5X3QgKnIwLCAqcjE7CiAgICBjb25uZWN0aW9uID0geGNiX2Nvbm5lY3QoTlVM TCwgTlVMTCk7CiAgICBjMCA9IHhjYl9pbnRlcm5fYXRvbShjb25uZWN0aW9uLCAwLCAxMiwgIldN X1BST1RPQ09MUyIpOwogICAgYzEgPSB4Y2JfaW50ZXJuX2F0b20oY29ubmVjdGlvbiwgMCwgMTYs ICJXTV9ERUxFVEVfV0lORE9XIik7CiAgICByMCA9IHhjYl9pbnRlcm5fYXRvbV9yZXBseShjb25u ZWN0aW9uLCBjMCwgTlVMTCk7CiAgICByMSA9IHhjYl9pbnRlcm5fYXRvbV9yZXBseShjb25uZWN0 aW9uLCBjMSwgTlVMTCk7CiAgICBXTV9QUk9UT0NPTFMgICAgID0gcjAtPmF0b207ICBmcmVlKCh2 b2lkKilyMCk7CiAgICBXTV9ERUxFVEVfV0lORE9XID0gcjEtPmF0b207ICBmcmVlKCh2b2lkKily MSk7CiAgfQoKICBzY3JlZW4gPSB4Y2Jfc2V0dXBfcm9vdHNfaXRlcmF0b3IoeGNiX2dldF9zZXR1 cChjb25uZWN0aW9uKSkuZGF0YTsKICAgIC8qIENyZWF0ZSB0aGUgd2luZG93ICovCiAgd2luZG93 ID0geGNiX2dlbmVyYXRlX2lkKGNvbm5lY3Rpb24pOwoKICBtYXNrICAgICAgPSBYQ0JfQ1dfQkFD S19QSVhFTCB8IFhDQl9DV19FVkVOVF9NQVNLOwogIHZhbHVlc1swXSA9IHNjcmVlbi0+d2hpdGVf cGl4ZWw7CiAgdmFsdWVzWzFdID0gWENCX0VWRU5UX01BU0tfRVhQT1NVUkUgICAgICAgfCBYQ0Jf RVZFTlRfTUFTS19CVVRUT05fUFJFU1MgICB8CiAgICAgICAgICAgICAgWENCX0VWRU5UX01BU0tf QlVUVE9OX1JFTEVBU0UgfCBYQ0JfRVZFTlRfTUFTS19QT0lOVEVSX01PVElPTiB8CiAgICAgICAg ICAgICAgWENCX0VWRU5UX01BU0tfRU5URVJfV0lORE9XICAgfCBYQ0JfRVZFTlRfTUFTS19MRUFW RV9XSU5ET1cgICB8CiAgICAgICAgICAgICAgWENCX0VWRU5UX01BU0tfS0VZX1BSRVNTICAgICAg fCBYQ0JfRVZFTlRfTUFTS19LRVlfUkVMRUFTRSAgICB8CiAgICAgICAgICAgICAgWENCX0VWRU5U X01BU0tfRk9DVVNfQ0hBTkdFICAgfCBYQ0JfRVZFTlRfTUFTS19TVFJVQ1RVUkVfTk9USUZZIHwK ICAgICAgICAgICAgICBYQ0JfRVZFTlRfTUFTS19WSVNJQklMSVRZX0NIQU5HRTsKCiAgICAvKiBp Z25vcmVzIHgsIHksIGJvcmRlcl93aWR0aCAodmlydXMpICovCiAgeGNiX2NyZWF0ZV93aW5kb3co Y29ubmVjdGlvbiwKICAgICAgICAgICAgICAgICAgICBzY3JlZW4tPnJvb3RfZGVwdGgsICAgICAg ICAgICAgLyogZGVwdGggICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICB3aW5kb3csICAg ICAgICAgICAgICAgICAgICAgICAgLyogZ2VuZXJhdGVkIGlkICAgKi8KICAgICAgICAgICAgICAg ICAgICBzY3JlZW4tPnJvb3QsICAgICAgICAgICAgICAgICAgLyogcGFyZW50IHdpbmRvdyAgKi8K ICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUueCwgICAgICAgICAgICAgICAgICAgLyogeCwg eSAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUueSwKICAgICAgICAg ICAgICAgICAgICBjb25maWd1cmUudywgICAgICAgICAgICAgICAgICAgLyogd2lkdGgsIGhlaWdo dCAgKi8KICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUuaCwKICAgICAgICAgICAgICAgICAg ICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYm9yZGVyX3dpZHRoICAgKi8KICAg ICAgICAgICAgICAgICAgICBYQ0JfV0lORE9XX0NMQVNTX0lOUFVUX09VVFBVVCwgLyogY2xhc3Mg ICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBzY3JlZW4tPnJvb3RfdmlzdWFsLCAgICAg ICAgICAgLyogdmlzdWFsICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBtYXNrLCB2YWx1 ZXMpOyAgICAgICAgICAgICAgICAgLyogbWFza3MgKi8KICBfd2luZG93X2V2ZW50X2RlbGV0ZShj b25uZWN0aW9uLCB3aW5kb3cpOwogIHJldHVybiB3aW5kb3c7Cn0KCnhjYl93aW5kb3dfdAp1aV93 aW5kb3dfY3JlYXRlKFBoeFJlY3RhbmdsZSBjb25maWd1cmUpIHsKCiAgeGNiX3dpbmRvd190IHdp bmRvdyA9IF93aW5kb3dfY3JlYXRlKGNvbmZpZ3VyZSk7CiAgaWYgKHdpbmRvdyA9PSAwKSAgcmV0 dXJuIDA7CgogIGlmYWNlMC5tZXRlX2JveCA9IGNvbmZpZ3VyZTsKICBpZmFjZTAud2luZG93ID0g d2luZG93OwogIHJldHVybiB3aW5kb3c7Cn0KCnhjYl93aW5kb3dfdAp1aV9kcm9wZG93bl9jcmVh dGUoUGh4UmVjdGFuZ2xlIGNvbmZpZ3VyZSwgeGNiX3dpbmRvd190IHRyYW5zaWVudF9mb3Jfd2lu ZG93KSB7CgogIHhjYl9zY3JlZW5fdCAqc2NyZWVuCiAgICA9IHhjYl9zZXR1cF9yb290c19pdGVy YXRvcih4Y2JfZ2V0X3NldHVwKGNvbm5lY3Rpb24pKS5kYXRhOwogIHVpbnQzMl90IHZhbHVlc1sy XTsKICB4Y2Jfd2luZG93X3Qgd2luZG93ID0gX3dpbmRvd19jcmVhdGUoY29uZmlndXJlKTsKICBp ZiAod2luZG93ID09IDApICByZXR1cm4gMDsKCiAgdmFsdWVzWzBdID0gc2NyZWVuLT5ibGFja19w aXhlbDsKICB2YWx1ZXNbMV0gPSB0cnVlOwogIHhjYl9jaGFuZ2Vfd2luZG93X2F0dHJpYnV0ZXMo Y29ubmVjdGlvbiwgd2luZG93LAogICAgICAgICAgICAgICAgICAgICAgICBYQ0JfQ1dfQkFDS19Q SVhFTCB8IFhDQl9DV19PVkVSUklERV9SRURJUkVDVCwgdmFsdWVzKTsKCiAgeGNiX2NoYW5nZV9w cm9wZXJ0eShjb25uZWN0aW9uLCBYQ0JfUFJPUF9NT0RFX1JFUExBQ0UsIHdpbmRvdywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBYQ0JfQVRPTV9XTV9UUkFOU0lFTlRfRk9SLCBYQ0JfQVRP TV9XSU5ET1csIDMyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsICZ0cmFuc2llbnRf Zm9yX3dpbmRvdyk7CgogIGlmYWNlMS5tZXRlX2JveCA9IGNvbmZpZ3VyZTsKICBpZmFjZTEud2lu ZG93ID0gd2luZG93OwogIHJldHVybiB3aW5kb3c7Cn0KCmludAptYWluKGludCBhcmdjLCBjaGFy ICphcmd2W10pIHsKCiAgeGNiX3dpbmRvd190IHdpbmRvdzsKCiAgICAvKiB3aW5kb3cgc2l6ZSBh bmQgcG9zaXRpb24gKi8KICBQaHhSZWN0YW5nbGUgY29uZmlndXJlID0geyA4MDAsIDIwMCwgMzAw LCAyMDAgfTsKCiAgICAvKiB0dXJuIG9mZiB0aGVzZSBmcm9tIHJlcG9ydGluZwogIGRlYnVnX2Zs YWdzICY9IH4oKHVpbnQ2NF90KTEgPDwgWENCX01PVElPTl9OT1RJRlkpOyAqLwogIGRlYnVnX2Zs YWdzICY9IH4oKHVpbnQ2NF90KTEgPDwgWENCX1BST1BFUlRZX05PVElGWSk7CiAgZGVidWdfZmxh Z3MgJj0gfigodWludDY0X3QpMSA8PCBYQ0JfQ09ORklHVVJFX05PVElGWSk7CiAgZGVidWdfZmxh Z3MgJj0gfigodWludDY0X3QpMSA8PCBYQ0JfRVhQT1NFKTsKCiAgICAvKiBBICd0b3Btb3N0JyBk ZWNvcmF0ZWQgd2luZG93ICovCiAgd2luZG93ID0gdWlfd2luZG93X2NyZWF0ZShjb25maWd1cmUp OwogIGlmICh3aW5kb3cgPT0gMCkgIGV4aXQoRVhJVF9GQUlMVVJFKTsKCiAgdWlfd2luZG93X25h bWUod2luZG93KTsKCiAgICAvKiBNYXAgdGhlIHdpbmRvdyBvbiB0aGUgc2NyZWVuICovCiAgeGNi X21hcF93aW5kb3coY29ubmVjdGlvbiwgd2luZG93KTsKICBpZmFjZTAubWFwcGVkID0gdHJ1ZTsK CiAgICAvKiBSdW4gZXZlbnQgbG9vcCAqLwogIHhjYl9tYWluKCk7CgogIHJldHVybiBFWElUX1NV Q0NFU1M7Cn0K --=-BXs3pLQl4e97SJrQz3FO--