POE and the time
[email protected] (Philip Gwyn) Tue, 04 Dec 2012 16:14:53 -0500 (EST)
| Newsgroups | perl.poe |
|---|---|
| Message-ID | <[email protected]> |
--_=XFMail.1.5.5.Linux:20121204161453:20503=_
Content-Type: text/plain; charset=us-ascii
A summary for those who don't follow IRC:
- POE keeps a priority queue of pending events
- The current system time is used as the priority
- If the system time is skewed (sysadmin, ntpd), events could happen at the
"wrong time"
An example of this problem would be calling
$poe_kernel->delay( something => 10 );
Then the sysadmin or ntpd moves the time 5 seconds back. The 'something' would
be posted after 15 seconds, not 10 as expected. A pathelogical case is calling
$poe_kernel->yield( 'something' );
And then the sytem time is moved 1 day back. The 'something' would only be
delivered tomorrow!
The included patch adds POE::Resource::Clock which uses POSIX::RT::Clock's
'monotonic' time source as the queue priority and the 'realtime' time source as
the system time.
However, some cheating has to be done; if converting from system time to
monotonic time is not static, then the order following events are delivered is
non-defined.
$poe_kernel->alarm( one => $time );
$poe_kernel->alarm( two => $time );
This patch is not finale; it still needs to detect clock skew and adjust the
queue priorities of alarms (but not delays or other events) when it happens.
-Philip
--_=XFMail.1.5.5.Linux:20121204161453:20503=_
Content-Disposition: attachment; filename="POE-Resource-Clock.PG.01.patch"
Content-Transfer-Encoding: base64
Content-Description: POE-Resource-Clock.PG.01.patch
Content-Type: application/octet-stream;
name=POE-Resource-Clock.PG.01.patch; SizeOnDisk=31793
ZGlmZiAtLWdpdCBhL2xpYi9QT0UucG0gYi9saWIvUE9FLnBtCmluZGV4IDA0YzU4ZDAuLjU4MDBi
YzIgMTAwNjQ0Ci0tLSBhL2xpYi9QT0UucG0KKysrIGIvbGliL1BPRS5wbQpAQCAtOCw2ICs4LDgg
QEAgdXNlIENhcnAgcXcoIGNyb2FrICk7CiB1c2UgdmFycyBxdygkVkVSU0lPTik7CiAkVkVSU0lP
TiA9ICcxLjM1NCc7ICMgTk9URSAtIFNob3VsZCBiZSAjLiMjIyAodGhyZWUgZGVjaW1hbCBwbGFj
ZXMpCiAKK3VzZSBQT0U6OlJlc291cmNlOjpDbG9jayBxdyggbW9ub3RpbWUgdGltZSB3YWxsdGlt
ZSBzbGVlcCBtb25vMndhbGwgd2FsbDJtb25vICk7CisKIHN1YiBpbXBvcnQgewogICBteSAkc2Vs
ZiA9IHNoaWZ0OwogCmRpZmYgLS1naXQgYS9saWIvUE9FL0tlcm5lbC5wbSBiL2xpYi9QT0UvS2Vy
bmVsLnBtCmluZGV4IDQyYzM3ODkuLmUyOGFlMDggMTAwNjQ0Ci0tLSBhL2xpYi9QT0UvS2VybmVs
LnBtCisrKyBiL2xpYi9QT0UvS2VybmVsLnBtCkBAIC01LDEzICs1LDE1IEBAIHVzZSBzdHJpY3Q7
CiB1c2UgdmFycyBxdygkVkVSU0lPTik7CiAkVkVSU0lPTiA9ICcxLjM1NCc7ICMgTk9URSAtIFNo
b3VsZCBiZSAjLiMjIyAodGhyZWUgZGVjaW1hbCBwbGFjZXMpCiAKK3VzZSBQT0U6OlJlc291cmNl
OjpDbG9jayBxdyggbW9ub3RpbWUgc2xlZXAgbW9ubzJ3YWxsIHdhbGwybW9ubyB3YWxsdGltZSB0
aW1lICk7CisKIHVzZSBQT1NJWCBxdyh1bmFtZSk7CiB1c2UgRXJybm8gcXcoRVNSQ0ggRUlOVFIg
RUNISUxEIEVQRVJNIEVJTlZBTCBFRVhJU1QgRUFHQUlOIEVXT1VMREJMT0NLKTsKIHVzZSBDYXJw
IHF3KGNhcnAgY3JvYWsgY29uZmVzcyBjbHVjayk7CiB1c2UgU3lzOjpIb3N0bmFtZSBxdyhob3N0
bmFtZSk7CiB1c2UgSU86OkhhbmRsZSAoKTsKIHVzZSBGaWxlOjpTcGVjICgpOwotdXNlIFRpbWU6
OkhpUmVzIHF3KHRpbWUgc2xlZXApOworI3VzZSBUaW1lOjpIaVJlcyBxdyh0aW1lIHNsZWVwKTsK
IAogIyBQZW9wbGUgZXhwZWN0IHRoZXNlIHRvIGJlIGxleGljYWwuCiAKQEAgLTIzNSw4ICsyMzcs
MTAgQEAgc3ViIEVWX0FSR1MgICAgICAgKCkgeyA0IH0gICMgICBcQGV2ZW50X3BhcmFtZXRlcnNf
YXJnMF9ldGMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIwogc3ViIEVWX09XTkVSX0ZJ
TEUgKCkgeyA1IH0gICMgICAkY2FsbGVyX2ZpbGVuYW1lX3doZXJlX2VucXVldWVkLAogc3ViIEVW
X09XTkVSX0xJTkUgKCkgeyA2IH0gICMgICAkY2FsbGVyX2xpbmVfd2hlcmVfZW5xdWV1ZWQsCi1z
dWIgRVZfVElNRSAgICAgICAoKSB7IDcgfSAgIyAgIE1haW50YWluZWQgYnkgUE9FOjpRdWV1ZSAo
Y3JlYXRlIHRpbWUpCitzdWIgRVZfRlJPTVNUQVRFICAoKSB7IDcgfSAgIyAgICRmcm9tc3RhdGUK
IHN1YiBFVl9TRVEgICAgICAgICgpIHsgOCB9ICAjICAgTWFpbnRhaW5lZCBieSBQT0U6OlF1ZXVl
ICh1bmlxdWUgZXZlbnQgSUQpCitzdWIgRVZfV0FMTFRJTUUgICAoKSB7IDkgfSAgIyAgIFdhbGx0
aW1lIHdoZW4gZXZlbnQgd2FzIGNyZWF0ZWQgKGZvciBhbGFybXMpCitzdWIgRVZfREVMVEEgICAg
ICAoKSB7IDEwIH0gIyAgIFNlY29uZHMgcGFzdCB3YWxsdGltZSBmb3IgZXZlbnQgKGZvciBhbGFy
bXMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBdCiAKICMgVGhlc2UgYXJlIHRoZSBu
YW1lcyBvZiBQT0UncyBpbnRlcm5hbCBldmVudHMuICBUaGV5J3JlIGluIGNvbnN0YW50cwpAQCAt
NjMyLDcgKzYzNiw3IEBAIHN1YiBfdGVzdF9pZl9rZXJuZWxfaXNfaWRsZSB7CiAKICAgJHNlbGYt
Pl9kYXRhX2V2X2VucXVldWUoCiAgICAgJHNlbGYsICRzZWxmLCBFTl9TSUdOQUwsIEVUX1NJR05B
TCwgWyAnSURMRScgXSwKLSAgICBfX0ZJTEVfXywgX19MSU5FX18sIHVuZGVmLCB0aW1lKCksCisg
ICAgX19GSUxFX18sIF9fTElORV9fLCB1bmRlZgogICApOwogfQogCkBAIC03MjMsNyArNzI3LDcg
QEAgc3ViIHNpZ25hbCB7CiAgICRzZWxmLT5fZGF0YV9ldl9lbnF1ZXVlKAogICAgICRzZXNzaW9u
LCAka3JfYWN0aXZlX3Nlc3Npb24sCiAgICAgRU5fU0lHTkFMLCBFVF9TSUdOQUwsIFsgJHNpZ25h
bCwgQGV0YyBdLAotICAgIChjYWxsZXIpWzEsMl0sICRrcl9hY3RpdmVfZXZlbnQsIHRpbWUoKSwK
KyAgICAoY2FsbGVyKVsxLDJdLCAka3JfYWN0aXZlX2V2ZW50CiAgICk7CiAgIHJldHVybiAxOwog
fQpAQCAtODYxLDcgKzg2NSw3IEBAIHN1YiBfZGlzcGF0Y2hfZXZlbnQgewogICBteSAoCiAgICAg
JHNlbGYsCiAgICAgJHNlc3Npb24sICRzb3VyY2Vfc2Vzc2lvbiwgJGV2ZW50LCAkdHlwZSwgJGV0
YywKLSAgICAkZmlsZSwgJGxpbmUsICRmcm9tc3RhdGUsICR0aW1lLCAkc2VxCisgICAgJGZpbGUs
ICRsaW5lLCAkZnJvbXN0YXRlLCAkcHJpb3JpdHksICRzZXEKICAgKSA9IEBfOwogCiAgIGlmIChB
U1NFUlRfRVZFTlRTKSB7CkBAIC05NjAsNyArOTY0LDcgQEAgc3ViIF9kaXNwYXRjaF9ldmVudCB7
CiAgICAgICAgICRzZWxmLT5fZGlzcGF0Y2hfZXZlbnQoCiAgICAgICAgICAgJHRhcmdldF9zZXNz
aW9uLCAkc2VsZiwKICAgICAgICAgICAkdGFyZ2V0X2V2ZW50LCBFVF9TSUdOQUxfUkVDVVJTSVZF
LCBbIEAkZXRjLCBAJHRhcmdldF9ldGMgXSwKLSAgICAgICAgICAkZmlsZSwgJGxpbmUsICRmcm9t
c3RhdGUsIHRpbWUoKSwgLV9fTElORV9fCisgICAgICAgICAgJGZpbGUsICRsaW5lLCAkZnJvbXN0
YXRlLCBtb25vdGltZSgpLCAtX19MSU5FX18KICAgICAgICAgKTsKICAgICAgIH0KICAgICB9CkBA
IC0xMDk1LDcgKzEwOTksNyBAQCBzdWIgX2Rpc3BhdGNoX2V2ZW50IHsKICAgICAgICAgICAgICAg
ZnJvbV9zdGF0ZSA9PiAkZnJvbXN0YXRlLAogICAgICAgICAgICAgICBlcnJvcl9zdHIgPT4gJGV4
Y2VwdGlvbiwKICAgICAgICAgICAgIH0sCi0gICAgICAgICAgXSwgX19GSUxFX18sIF9fTElORV9f
LCB1bmRlZiwgdGltZSgpCisgICAgICAgICAgXSwgX19GSUxFX18sIF9fTElORV9fLCB1bmRlZgog
ICAgICAgICApOwogICAgICAgfQogICAgIH0KQEAgLTEzODIsNyArMTM4Niw3IEBAIHN1YiBfaW52
b2tlX3N0YXRlIHsKICAgICAgICkgewogICAgICAgICAkc2VsZi0+X2RhdGFfZXZfZW5xdWV1ZSgK
ICAgICAgICAgICAkc2VsZiwgJHNlbGYsIEVOX1NJR05BTCwgRVRfU0lHTkFMLCBbICdaT01CSUUn
IF0sCi0gICAgICAgICAgX19GSUxFX18sIF9fTElORV9fLCB1bmRlZiwgdGltZSgpLAorICAgICAg
ICAgIF9fRklMRV9fLCBfX0xJTkVfXywgdW5kZWYKICAgICAgICAgKTsKICAgICAgIH0KICAgICB9
CkBAIC0xNDM4LDcgKzE0NDIsNyBAQCBzdWIgc2Vzc2lvbl9hbGxvYyB7CiAgIG15ICRyZXR1cm4g
PSAkc2VsZi0+X2Rpc3BhdGNoX2V2ZW50KAogICAgICRzZXNzaW9uLCAka3JfYWN0aXZlX3Nlc3Np
b24sCiAgICAgRU5fU1RBUlQsIEVUX1NUQVJULCBcQGFyZ3MsCi0gICAgX19GSUxFX18sIF9fTElO
RV9fLCB1bmRlZiwgdGltZSgpLCAtX19MSU5FX18KKyAgICBfX0ZJTEVfXywgX19MSU5FX18sIHVu
ZGVmLCBtb25vdGltZSgpLCAtX19MSU5FX18KICAgKTsKIAogICB1bmxlc3MoJHNlbGYtPl9kYXRh
X3Nlc19leGlzdHMoJG5ld19zaWQpKSB7CkBAIC0xNDU1LDcgKzE0NTksNyBAQCBzdWIgc2Vzc2lv
bl9hbGxvYyB7CiAgICRzZWxmLT5fZGlzcGF0Y2hfZXZlbnQoCiAgICAgJHNlbGYtPl9kYXRhX3Nl
c19nZXRfcGFyZW50KCRzZXNzaW9uLT5JRCksICRzZWxmLAogICAgIEVOX0NISUxELCBFVF9DSElM
RCwgWyBDSElMRF9DUkVBVEUsICRzZXNzaW9uLCAkcmV0dXJuIF0sCi0gICAgX19GSUxFX18sIF9f
TElORV9fLCB1bmRlZiwgdGltZSgpLCAtX19MSU5FX18KKyAgICBfX0ZJTEVfXywgX19MSU5FX18s
IHVuZGVmLCBtb25vdGltZSgpLCAtX19MSU5FX18KICAgKTsKIAogICB1bmxlc3MgKCRzZWxmLT5f
ZGF0YV9zZXNfZXhpc3RzKCRuZXdfc2lkKSkgewpAQCAtMTQ2OSw3ICsxNDczLDcgQEAgc3ViIHNl
c3Npb25fYWxsb2MgewogICAjIHRvIGRvIGl0cyB0aGluZyBiZWZvcmUgaXQgZ29lcy4KICAgJHNl
bGYtPl9kYXRhX2V2X2VucXVldWUoCiAgICAgJHNlc3Npb24sICRzZXNzaW9uLCBFTl9HQywgRVRf
R0MsIFtdLAotICAgIF9fRklMRV9fLCBfX0xJTkVfXywgdW5kZWYsIHRpbWUoKSwKKyAgICBfX0ZJ
TEVfXywgX19MSU5FX18sIHVuZGVmCiAgICk7CiB9CiAKQEAgLTE1MDAsNyArMTUwNCw3IEBAIHN1
YiBkZXRhY2hfbXlzZWxmIHsKICAgJHNlbGYtPl9kaXNwYXRjaF9ldmVudCgKICAgICAkb2xkX3Bh
cmVudCwgJHNlbGYsCiAgICAgRU5fQ0hJTEQsIEVUX0NISUxELCBbIENISUxEX0xPU0UsICRrcl9h
Y3RpdmVfc2Vzc2lvbiwgdW5kZWYgXSwKLSAgICAoY2FsbGVyKVsxLDJdLCB1bmRlZiwgdGltZSgp
LCAtX19MSU5FX18KKyAgICAoY2FsbGVyKVsxLDJdLCB1bmRlZiwgbW9ub3RpbWUoKSwgLV9fTElO
RV9fCiAgICkKICAgdW5sZXNzICRrcl9hY3RpdmVfZXZlbnRfdHlwZSAmIEVUX1NUQVJUOwogCkBA
IC0xNTEyLDcgKzE1MTYsNyBAQCBzdWIgZGV0YWNoX215c2VsZiB7CiAgICRzZWxmLT5fZGlzcGF0
Y2hfZXZlbnQoCiAgICAgJGtyX2FjdGl2ZV9zZXNzaW9uLCAkc2VsZiwKICAgICBFTl9QQVJFTlQs
IEVUX1BBUkVOVCwgWyAkb2xkX3BhcmVudCwgJHNlbGYgXSwKLSAgICAoY2FsbGVyKVsxLDJdLCB1
bmRlZiwgdGltZSgpLCAtX19MSU5FX18KKyAgICAoY2FsbGVyKVsxLDJdLCB1bmRlZiwgbW9ub3Rp
bWUoKSwgLV9fTElORV9fCiAgICk7CiAKICAgJHNlbGYtPl9kYXRhX3Nlc19tb3ZlX2NoaWxkKCRr
cl9hY3RpdmVfc2Vzc2lvbi0+SUQsICRzZWxmLT5JRCk7CkBAIC0xNTU3LDcgKzE1NjEsNyBAQCBz
dWIgZGV0YWNoX2NoaWxkIHsKICAgJHNlbGYtPl9kaXNwYXRjaF9ldmVudCgKICAgICAka3JfYWN0
aXZlX3Nlc3Npb24sICRzZWxmLAogICAgIEVOX0NISUxELCBFVF9DSElMRCwgWyBDSElMRF9MT1NF
LCAkY2hpbGRfc2Vzc2lvbiwgdW5kZWYgXSwKLSAgICAoY2FsbGVyKVsxLDJdLCB1bmRlZiwgdGlt
ZSgpLCAtX19MSU5FX18KKyAgICAoY2FsbGVyKVsxLDJdLCB1bmRlZiwgbW9ub3RpbWUoKSwgLV9f
TElORV9fCiAgICk7CiAKICAgIyBUZWxsIHRoZSBuZXcgcGFyZW50IChrZXJuZWwpIHRoYXQgaXQn
cyBnYWluaW5nIGEgY2hpbGQuCkBAIC0xNTY4LDcgKzE1NzIsNyBAQCBzdWIgZGV0YWNoX2NoaWxk
IHsKICAgJHNlbGYtPl9kaXNwYXRjaF9ldmVudCgKICAgICAkY2hpbGRfc2Vzc2lvbiwgJHNlbGYs
CiAgICAgRU5fUEFSRU5ULCBFVF9QQVJFTlQsIFsgJGtyX2FjdGl2ZV9zZXNzaW9uLCAkc2VsZiBd
LAotICAgIChjYWxsZXIpWzEsMl0sIHVuZGVmLCB0aW1lKCksIC1fX0xJTkVfXworICAgIChjYWxs
ZXIpWzEsMl0sIHVuZGVmLCBtb25vdGltZSgpLCAtX19MSU5FX18KICAgKTsKIAogICAkc2VsZi0+
X2RhdGFfc2VzX21vdmVfY2hpbGQoJGNoaWxkX3Nlc3Npb24tPklELCAkc2VsZi0+SUQpOwpAQCAt
MTYzMSw3ICsxNjM1LDcgQEAgc3ViIHBvc3QgewogCiAgICRzZWxmLT5fZGF0YV9ldl9lbnF1ZXVl
KAogICAgICRzZXNzaW9uLCAka3JfYWN0aXZlX3Nlc3Npb24sICRldmVudF9uYW1lLCBFVF9QT1NU
LCBcQGV0YywKLSAgICAoY2FsbGVyKVsxLDJdLCAka3JfYWN0aXZlX2V2ZW50LCB0aW1lKCksCisg
ICAgKGNhbGxlcilbMSwyXSwgJGtyX2FjdGl2ZV9ldmVudAogICApOwogICByZXR1cm4gMTsKIH0K
QEAgLTE2NTUsNyArMTY1OSw3IEBAIHN1YiB5aWVsZCB7CiAKICAgJHNlbGYtPl9kYXRhX2V2X2Vu
cXVldWUoCiAgICAgJGtyX2FjdGl2ZV9zZXNzaW9uLCAka3JfYWN0aXZlX3Nlc3Npb24sICRldmVu
dF9uYW1lLCBFVF9QT1NULCBcQGV0YywKLSAgICAoY2FsbGVyKVsxLDJdLCAka3JfYWN0aXZlX2V2
ZW50LCB0aW1lKCksCisgICAgKGNhbGxlcilbMSwyXSwgJGtyX2FjdGl2ZV9ldmVudAogICApOwog
CiAgIHVuZGVmOwpAQCAtMTcwNiw3ICsxNzEwLDcgQEAgc3ViIGNhbGwgewogICAgICAgOiAkc2Vs
Zi0+X2Rpc3BhdGNoX2V2ZW50KAogICAgICAgICAkc2Vzc2lvbiwgJGtyX2FjdGl2ZV9zZXNzaW9u
LAogICAgICAgICAkZXZlbnRfbmFtZSwgRVRfQ0FMTCwgXEBldGMsCi0gICAgICAgIChjYWxsZXIp
WzEsMl0sICRrcl9hY3RpdmVfZXZlbnQsIHRpbWUoKSwgLV9fTElORV9fCisgICAgICAgIChjYWxs
ZXIpWzEsMl0sICRrcl9hY3RpdmVfZXZlbnQsIG1vbm90aW1lKCksIC1fX0xJTkVfXwogICAgICAg
KQogICAgICk7CiAKQEAgLTE3MjQsNyArMTcyOCw3IEBAIHN1YiBjYWxsIHsKICAgICAgIDogJHNl
bGYtPl9kaXNwYXRjaF9ldmVudCgKICAgICAgICAgJHNlc3Npb24sICRrcl9hY3RpdmVfc2Vzc2lv
biwKICAgICAgICAgJGV2ZW50X25hbWUsIEVUX0NBTEwsIFxAZXRjLAotICAgICAgICAoY2FsbGVy
KVsxLDJdLCAka3JfYWN0aXZlX2V2ZW50LCB0aW1lKCksIC1fX0xJTkVfXworICAgICAgICAoY2Fs
bGVyKVsxLDJdLCAka3JfYWN0aXZlX2V2ZW50LCBtb25vdGltZSgpLCAtX19MSU5FX18KICAgICAg
ICkKICAgICApOwogCkBAIC0xNzQyLDcgKzE3NDYsNyBAQCBzdWIgY2FsbCB7CiAgICAgJHNlbGYt
Pl9kaXNwYXRjaF9ldmVudCgKICAgICAgICRzZXNzaW9uLCAka3JfYWN0aXZlX3Nlc3Npb24sCiAg
ICAgICAkZXZlbnRfbmFtZSwgRVRfQ0FMTCwgXEBldGMsCi0gICAgICAoY2FsbGVyKVsxLDJdLCAk
a3JfYWN0aXZlX2V2ZW50LCB0aW1lKCksIC1fX0xJTkVfXworICAgICAgKGNhbGxlcilbMSwyXSwg
JGtyX2FjdGl2ZV9ldmVudCwgbW9ub3RpbWUoKSwgLV9fTElORV9fCiAgICAgKTsKICAgfQogCkBA
IC0xODIyLDkgKzE4MjYsMTAgQEAgc3ViIGFsYXJtX2FkZCB7CiAgIHJldHVybiAwOwogfQogCi0j
IEFkZCBhIGRlbGF5LCB3aGljaCBpcyBqdXN0IGFuIGFsYXJtIHJlbGF0aXZlIHRvIHRoZSBjdXJy
ZW50IHRpbWUuCisjIEFkZCBhIGRlbGF5LCB3aGljaCBpcyBsaWtlIGFuIGFsYXJtIHJlbGF0aXZl
IHRvIHRoZSBjdXJyZW50IHRpbWUuCiBzdWIgZGVsYXkgewogICBteSAoJHNlbGYsICRldmVudF9u
YW1lLCAkZGVsYXksIEBldGMpID0gKCRwb2Vfa2VybmVsLCBAX1sxLi4kI19dKTsKKyAgbXkgJHBy
aSA9IG1vbm90aW1lKCk7CiAKICAgaWYgKEFTU0VSVF9VU0FHRSkgewogICAgIF9jb25mZXNzICI8
dXM+IG11c3QgY2FsbCBkZWxheSgpIGZyb20gYSBydW5uaW5nIHNlc3Npb24iCkBAIC0xODQyLDcg
KzE4NDcsMTUgQEAgc3ViIGRlbGF5IHsKICAgfQogCiAgIGlmIChkZWZpbmVkICRkZWxheSkgewot
ICAgICRzZWxmLT5hbGFybSgkZXZlbnRfbmFtZSwgdGltZSgpICsgJGRlbGF5LCBAZXRjKTsKKyAg
ICAkc2VsZi0+X2RhdGFfZXZfY2xlYXJfYWxhcm1fYnlfbmFtZSgka3JfYWN0aXZlX3Nlc3Npb24t
PklEKCksICRldmVudF9uYW1lKTsKKworICAgICMgQWRkIHRoZSBuZXcgYWxhcm0gaWYgaXQgaW5j
bHVkZXMgYSB0aW1lLiAgQ2FsbGluZyBfZGF0YV9ldl9lbnF1ZXVlCisgICAgIyBkaXJlY3RseSBp
cyBmYXN0ZXIgdGhhbiBjYWxsaW5nIGFsYXJtX3NldCB0byBlbnF1ZXVlIGl0LgorICAgICRzZWxm
LT5fZGF0YV9ldl9lbnF1ZXVlCisgICAgICAoICRrcl9hY3RpdmVfc2Vzc2lvbiwgJGtyX2FjdGl2
ZV9zZXNzaW9uLAorICAgICAgICAkZXZlbnRfbmFtZSwgRVRfQUxBUk0sIFsgQGV0YyBdLAorICAg
ICAgICAoY2FsbGVyKVsxLDJdLCAka3JfYWN0aXZlX2V2ZW50LCB1bmRlZiwgJGRlbGF5LCAkcHJp
KyRkZWxheQorICAgICAgKTsKICAgfQogICBlbHNlIHsKICAgICAkc2VsZi0+YWxhcm0oJGV2ZW50
X25hbWUpOwpAQCAtMTg1NCw2ICsxODY3LDcgQEAgc3ViIGRlbGF5IHsKICMgQWRkIGEgZGVsYXkg
d2l0aG91dCBjbG9iYmVyaW5nIHByZXZpb3VzIGRlbGF5cyBvZiB0aGUgc2FtZSBuYW1lLgogc3Vi
IGRlbGF5X2FkZCB7CiAgIG15ICgkc2VsZiwgJGV2ZW50X25hbWUsICRkZWxheSwgQGV0YykgPSAo
JHBvZV9rZXJuZWwsIEBfWzEuLiQjX10pOworICBteSAkcHJpID0gbW9ub3RpbWUoKTsKIAogICBp
ZiAoQVNTRVJUX1VTQUdFKSB7CiAgICAgX2NvbmZlc3MgIjx1cz4gbXVzdCBjYWxsIGRlbGF5X2Fk
ZCgpIGZyb20gYSBydW5uaW5nIHNlc3Npb24iCkBAIC0xODcyLDcgKzE4ODYsMTEgQEAgc3ViIGRl
bGF5X2FkZCB7CiAgICAgcmV0dXJuIEVJTlZBTDsKICAgfQogCi0gICRzZWxmLT5hbGFybV9hZGQo
JGV2ZW50X25hbWUsIHRpbWUoKSArICRkZWxheSwgQGV0Yyk7CisgICRzZWxmLT5fZGF0YV9ldl9l
bnF1ZXVlCisgICAgKCAka3JfYWN0aXZlX3Nlc3Npb24sICRrcl9hY3RpdmVfc2Vzc2lvbiwKKyAg
ICAgICRldmVudF9uYW1lLCBFVF9BTEFSTSwgWyBAZXRjIF0sCisgICAgICAoY2FsbGVyKVsxLDJd
LCAka3JfYWN0aXZlX2V2ZW50LCB1bmRlZiwgJGRlbGF5LCAkcHJpKyRkZWxheQorICAgICk7CiAK
ICAgcmV0dXJuIDA7CiB9CkBAIC0xOTc2LDcgKzE5OTQsOCBAQCBzdWIgYWxhcm1fYWRqdXN0IHsK
ICAgbXkgJG15X2FsYXJtID0gc3ViIHsKICAgICAkX1swXS0+W0VWX1NFU1NJT05dID09ICRrcl9h
Y3RpdmVfc2Vzc2lvbjsKICAgfTsKLSAgcmV0dXJuICRrcl9xdWV1ZS0+YWRqdXN0X3ByaW9yaXR5
KCRhbGFybV9pZCwgJG15X2FsYXJtLCAkZGVsdGEpOworICAKKyAgcmV0dXJuICRzZWxmLT5fZGF0
YV9ldl9hZGp1c3QoICRhbGFybV9pZCwgJG15X2FsYXJtLCB1bmRlZigpLCAkZGVsdGEgKTsKIH0K
IAogIyBBIGNvbnZlbmllbnQgZnVuY3Rpb24gZm9yIHNldHRpbmcgYWxhcm1zIHJlbGF0aXZlIHRv
IG5vdy4gIEl0IGFsc28KQEAgLTE5ODcsNyArMjAwNiw4IEBAIHN1YiBkZWxheV9zZXQgewogICAj
IEFsd2F5cyBhbHdheXMgYWx3YXlzIGdyYWIgdGltZSgpIEFTQVAsIHNvIHRoYXQgdGhlIGV2ZW50
dWFsCiAgICMgdGltZSB3ZSBzZXQgdGhlIGFsYXJtIGZvciBpcyBhcyBjbG9zZSBhcyBwb3NzaWJs
ZSB0byB0aGUgdGltZQogICAjIGF0IHdoaWNoIHRoZXkgQVNLRUQgZm9yIHRoZSBkZWxheSwgbm90
IHdoZW4gd2UgYWN0dWFsbHkgc2V0IGl0LgotICBteSAkdCA9IHRpbWUoKTsKKyAgbXkgJHQgPSB3
YWxsdGltZSgpOworICBteSAkcHJpID0gbW9ub3RpbWUoKTsKIAogICAjIEFuZCBub3cgY29udGlu
dWUgYXMgbm9ybWFsCiAgIG15ICgkc2VsZiwgJGV2ZW50X25hbWUsICRzZWNvbmRzLCBAZXRjKSA9
ICgkcG9lX2tlcm5lbCwgQF9bMS4uJCNfXSk7CkBAIC0yMDE4LDcgKzIwMzgsNyBAQCBzdWIgZGVs
YXlfc2V0IHsKIAogICByZXR1cm4gJHNlbGYtPl9kYXRhX2V2X2VucXVldWUKICAgICAoICRrcl9h
Y3RpdmVfc2Vzc2lvbiwgJGtyX2FjdGl2ZV9zZXNzaW9uLCAkZXZlbnRfbmFtZSwgRVRfQUxBUk0s
IFsgQGV0YyBdLAotICAgICAgKGNhbGxlcilbMSwyXSwgJGtyX2FjdGl2ZV9ldmVudCwgJHQgKyAk
c2Vjb25kcywKKyAgICAgIChjYWxsZXIpWzEsMl0sICRrcl9hY3RpdmVfZXZlbnQsICR0LCAkc2Vj
b25kcywgJHByaSskc2Vjb25kcwogICAgICk7CiB9CiAKQEAgLTIwNTMsNyArMjA3Myw3IEBAIHN1
YiBkZWxheV9hZGp1c3QgewogICAgIF93YXJuKCI8ZXY+IGFkanVzdGVkIGV2ZW50ICRhbGFybV9p
ZCBieSAkc2Vjb25kcyBzZWNvbmRzIik7CiAgIH0KIAotICByZXR1cm4gJGtyX3F1ZXVlLT5zZXRf
cHJpb3JpdHkoJGFsYXJtX2lkLCAkbXlfZGVsYXksIHRpbWUoKSArICRzZWNvbmRzKTsKKyAgcmV0
dXJuICRrcl9xdWV1ZS0+X2RhdGFfZXZfYWRqdXN0KCRhbGFybV9pZCwgJG15X2RlbGF5LCB1bmRl
ZiwgJHNlY29uZHMgKTsKIH0KIAogIyBSZW1vdmUgYWxsIGFsYXJtcyBmb3IgdGhlIGN1cnJlbnQg
c2Vzc2lvbi4KQEAgLTIzOTQsNyArMjQxNCw3IEBAIHN1YiBfcmVjYWxjX2lkIHsKICAgICAiLSIs
ICRob3N0bmFtZSwKICAgICBtYXAgeyB1bnBhY2sgIkgqIiwgJF8gfQogICAgIG1hcCB7IHBhY2sg
Ik4iLCAkXyB9Ci0gICAgKHRpbWUoKSwgJCQsICsrJGtyX2lkX3NlcSkKKyAgICAobW9ub3RpbWUo
KSwgJCQsICsrJGtyX2lkX3NlcSkKICAgKTsKIAogICBpZiAoZGVmaW5lZCAkb2xkX2lkKSB7CmRp
ZmYgLS1naXQgYS9saWIvUE9FL0xvb3AucG0gYi9saWIvUE9FL0xvb3AucG0KaW5kZXggZWUwMzNm
Yy4uZDVlZGNlNyAxMDA2NDQKLS0tIGEvbGliL1BPRS9Mb29wLnBtCisrKyBiL2xpYi9QT0UvTG9v
cC5wbQpAQCAtMzE1LDcgKzMxNSw3IEBAIEhlcmUncyBHdGsnczoKICAgICAgICAgICAkc2VsZi0+
X2Rpc3BhdGNoX2V2ZW50KAogICAgICAgICAgICAgJHNlbGYsICRzZWxmLAogICAgICAgICAgICAg
RU5fU0lHTkFMLCBFVF9TSUdOQUwsIFsgJ1VJREVTVFJPWScgXSwKLSAgICAgICAgICAgIF9fRklM
RV9fLCBfX0xJTkVfXywgdW5kZWYsIHRpbWUoKSwgLV9fTElORV9fCisgICAgICAgICAgICBfX0ZJ
TEVfXywgX19MSU5FX18sIHVuZGVmLCBtb25vdGltZSgpLCAtX19MSU5FX18KICAgICAgICAgICAp
OwogICAgICAgICB9CiAgICAgICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbGliL1BPRS9Mb29w
L0lPX1BvbGwucG0gYi9saWIvUE9FL0xvb3AvSU9fUG9sbC5wbQppbmRleCAzN2I1ZmQ3Li5kMDJi
MGJjIDEwMDY0NAotLS0gYS9saWIvUE9FL0xvb3AvSU9fUG9sbC5wbQorKysgYi9saWIvUE9FL0xv
b3AvSU9fUG9sbC5wbQpAQCAtNjcsNyArNjcsNyBAQCBCRUdJTiB7CiBteSAlcG9sbF9mZF9tYXNr
czsKIAogIyBBbGxvdyAkXlQgdG8gY2hhbmdlIHdpdGhvdXQgYWZmZWN0aW5nIG91ciBpbnRlcm5h
bHMuCi1teSAkc3RhcnRfdGltZSA9ICReVDsKK215ICRzdGFydF90aW1lID0gbW9ub3RpbWUoKTsK
IAogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBMb29wIGNvbnN0cnVjdGlvbiBhbmQgZGVzdHJ1
Y3Rpb24uCkBAIC05NSw3ICs5NSw3IEBAIHN1YiBsb29wX2F0dGFjaF91aWRlc3Ryb3kgewogIyB2
YWx1ZS4gIEEgInBhdXNlZCIgdGltZSB3YXRjaGVyIGlzIGp1c3QgYSB0aW1lb3V0IGZvciBzb21l
IGZ1dHVyZQogIyB0aW1lLgogCi1teSAkX25leHRfZXZlbnRfdGltZSA9IHRpbWUoKTsKK215ICRf
bmV4dF9ldmVudF90aW1lID0gbW9ub3RpbWUoKTsKIAogc3ViIGxvb3BfcmVzdW1lX3RpbWVfd2F0
Y2hlciB7CiAgICRfbmV4dF9ldmVudF90aW1lID0gJF9bMV07CkBAIC0xMDYsNyArMTA2LDcgQEAg
c3ViIGxvb3BfcmVzZXRfdGltZV93YXRjaGVyIHsKIH0KIAogc3ViIGxvb3BfcGF1c2VfdGltZV93
YXRjaGVyIHsKLSAgJF9uZXh0X2V2ZW50X3RpbWUgPSB0aW1lKCkgKyAzNjAwOworICAkX25leHRf
ZXZlbnRfdGltZSA9IG1vbm90aW1lKCkgKyAzNjAwOwogfQogCiAjIEEgc3RhdGljIGZ1bmN0aW9u
OyBub3Qgc29tZSBvYmplY3QgbWV0aG9kLgpAQCAtMjMyLDcgKzIzMiw3IEBAIHN1YiBsb29wX2Rv
X3RpbWVzbGljZSB7CiAKICAgbXkgJHRpbWVvdXQgPSAkX25leHRfZXZlbnRfdGltZTsKIAotICBt
eSAkbm93ID0gdGltZSgpOworICBteSAkbm93ID0gbW9ub3RpbWUoKTsKICAgaWYgKGRlZmluZWQg
JHRpbWVvdXQpIHsKICAgICAkdGltZW91dCAtPSAkbm93OwogICAgICR0aW1lb3V0ID0gMCBpZiAk
dGltZW91dCA8IDA7CmRpZmYgLS1naXQgYS9saWIvUE9FL0xvb3AvUGVybFNpZ25hbHMucG0gYi9s
aWIvUE9FL0xvb3AvUGVybFNpZ25hbHMucG0KaW5kZXggYjI2NzYyNS4uNjUxZGI5ZiAxMDA2NDQK
LS0tIGEvbGliL1BPRS9Mb29wL1BlcmxTaWduYWxzLnBtCisrKyBiL2xpYi9QT0UvTG9vcC9QZXJs
U2lnbmFscy5wbQpAQCAtMzksNyArMzksNyBAQCBzdWIgX2xvb3Bfc2lnbmFsX2hhbmRsZXJfZ2Vu
ZXJpY19ib3R0b20gewogCiAgICRwb2Vfa2VybmVsLT5fZGF0YV9ldl9lbnF1ZXVlKAogICAgICRw
b2Vfa2VybmVsLCAkcG9lX2tlcm5lbCwgRU5fU0lHTkFMLCBFVF9TSUdOQUwsIFsgJF9bMF0gXSwK
LSAgICBfX0ZJTEVfXywgX19MSU5FX18sIHVuZGVmLCB0aW1lKCkKKyAgICBfX0ZJTEVfXywgX19M
SU5FX18sIHVuZGVmCiAgICk7CiAgICRTSUd7JF9bMF19ID0gXCZfbG9vcF9zaWduYWxfaGFuZGxl
cl9nZW5lcmljOwogfQpAQCAtNjIsNyArNjIsNyBAQCBzdWIgX2xvb3Bfc2lnbmFsX2hhbmRsZXJf
cGlwZV9ib3R0b20gewogCiAgICRwb2Vfa2VybmVsLT5fZGF0YV9ldl9lbnF1ZXVlKAogICAgICRw
b2Vfa2VybmVsLCAkcG9lX2tlcm5lbCwgRU5fU0lHTkFMLCBFVF9TSUdOQUwsIFsgJF9bMF0gXSwK
LSAgICBfX0ZJTEVfXywgX19MSU5FX18sIHVuZGVmLCB0aW1lKCkKKyAgICBfX0ZJTEVfXywgX19M
SU5FX18sIHVuZGVmCiAgICk7CiAgICRTSUd7JF9bMF19ID0gXCZfbG9vcF9zaWduYWxfaGFuZGxl
cl9waXBlOwogfQpkaWZmIC0tZ2l0IGEvbGliL1BPRS9Mb29wL1NlbGVjdC5wbSBiL2xpYi9QT0Uv
TG9vcC9TZWxlY3QucG0KaW5kZXggMTBlMjg0MC4uZGRkMWZkNCAxMDA2NDQKLS0tIGEvbGliL1BP
RS9Mb29wL1NlbGVjdC5wbQorKysgYi9saWIvUE9FL0xvb3AvU2VsZWN0LnBtCkBAIC0zNyw3ICsz
Nyw3IEBAIG15IEBsb29wX3ZlY3RvcnMgPSAoIiIsICIiLCAiIik7CiBteSAlbG9vcF9maWxlbm9z
OwogCiAjIEFsbG93ICReVCB0byBjaGFuZ2Ugd2l0aG91dCBhZmZlY3Rpbmcgb3VyIGludGVybmFs
cy4KLW15ICRzdGFydF90aW1lID0gJF5UOworbXkgJHN0YXJ0X3RpbWUgPSBtb25vdGltZSgpOwog
CiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIExvb3AgY29uc3RydWN0aW9uIGFuZCBkZXN0cnVj
dGlvbi4KQEAgLTg2LDcgKzg2LDcgQEAgc3ViIGxvb3BfYXR0YWNoX3VpZGVzdHJveSB7CiAjIHZh
bHVlLiAgQSAicGF1c2VkIiB0aW1lIHdhdGNoZXIgaXMganVzdCBhIHRpbWVvdXQgZm9yIHNvbWUg
ZnV0dXJlCiAjIHRpbWUuCiAKLW15ICRfbmV4dF9ldmVudF90aW1lID0gdGltZSgpOworbXkgJF9u
ZXh0X2V2ZW50X3RpbWUgPSBtb25vdGltZSgpOwogCiBzdWIgbG9vcF9yZXN1bWVfdGltZV93YXRj
aGVyIHsKICAgJF9uZXh0X2V2ZW50X3RpbWUgPSAkX1sxXTsKQEAgLTk3LDcgKzk3LDcgQEAgc3Vi
IGxvb3BfcmVzZXRfdGltZV93YXRjaGVyIHsKIH0KIAogc3ViIGxvb3BfcGF1c2VfdGltZV93YXRj
aGVyIHsKLSAgJF9uZXh0X2V2ZW50X3RpbWUgPSB0aW1lKCkgKyAzNjAwOworICAkX25leHRfZXZl
bnRfdGltZSA9IG1vbm90aW1lKCkgKyAzNjAwOwogfQogCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CkBAIC0xNTYsNyArMTU2LDcgQEAgc3ViIGxvb3BfZG9fdGltZXNsaWNlIHsKIAogICBteSAkdGlt
ZW91dCA9ICRfbmV4dF9ldmVudF90aW1lOwogCi0gIG15ICRub3cgPSB0aW1lKCk7CisgIG15ICRu
b3cgPSBtb25vdGltZSgpOwogICBpZiAoZGVmaW5lZCAkdGltZW91dCkgewogICAgICR0aW1lb3V0
IC09ICRub3c7CiAgICAgJHRpbWVvdXQgPSAwIGlmICR0aW1lb3V0IDwgMDsKZGlmZiAtLWdpdCBh
L2xpYi9QT0UvUXVldWUvQXJyYXkucG0gYi9saWIvUE9FL1F1ZXVlL0FycmF5LnBtCmluZGV4IDMx
NDBkZDYuLmM2NzQ2YmUgMTAwNjQ0Ci0tLSBhL2xpYi9QT0UvUXVldWUvQXJyYXkucG0KKysrIGIv
bGliL1BPRS9RdWV1ZS9BcnJheS5wbQpAQCAtOCw2ICs4LDcgQEAgdXNlIHZhcnMgcXcoJFZFUlNJ
T04gQElTQSk7CiAkVkVSU0lPTiA9ICcxLjM1NCc7ICMgTk9URSAtIFNob3VsZCBiZSAjLiMjIyAo
dGhyZWUgZGVjaW1hbCBwbGFjZXMpCiBASVNBID0gcXcoUE9FOjpRdWV1ZSk7CiAKK3VzZSBQT0U6
OlJlc291cmNlOjpDbG9jayBxdyggd2FsbDJtb25vIG1vbm8yd2FsbCBtb25vdGltZSB3YWxsdGlt
ZSB0aW1lIHNsZWVwICk7CiB1c2UgRXJybm8gcXcoRVNSQ0ggRVBFUk0pOwogdXNlIENhcnAgcXco
Y29uZmVzcyk7CiAKQEAgLTQxOSw2ICs0MjAsMjMgQEAgc3ViIHBlZWtfaXRlbXMgewogICByZXR1
cm4gQGl0ZW1zOwogfQogCisjIyMgR2V0IG9uZSBpdGVtIGZyb20gdGhlIHF1ZXVlCisKK3N1YiBn
ZXRfaXRlbSB7CisgIG15ICgkc2VsZiwgJGlkLCAkZmlsdGVyKSA9IEBfOworCisgIG15ICRwcmlv
cml0eSA9ICRpdGVtX3ByaW9yaXR5eyRpZH07CisgIHVubGVzcyAoZGVmaW5lZCAkcHJpb3JpdHkp
IHsKKyAgICAkISA9IEVTUkNIOworICAgIHJldHVybjsKKyAgfQorCisgICMgRmluZCB0aGF0IGRh
cm4gaXRlbS4KKyAgbXkgJGl0ZW1faW5kZXggPSAkc2VsZi0+X2ZpbmRfaXRlbSgkaWQsICRwcmlv
cml0eSk7CisgIHJldHVybiB1bmxlc3MgZGVmaW5lZCAkaXRlbV9pbmRleDsKKyAgcmV0dXJuICRz
ZWxmLT5bJGl0ZW1faW5kZXhdLT5bSVRFTV9QQVlMT0FEXTsKK30KKwogMTsKIAogX19FTkRfXwpk
aWZmIC0tZ2l0IGEvbGliL1BPRS9SZXNvdXJjZS9BbGlhc2VzLnBtIGIvbGliL1BPRS9SZXNvdXJj
ZS9BbGlhc2VzLnBtCmluZGV4IDAzZDgyYmEuLmI5OWMxNjggMTAwNjQ0Ci0tLSBhL2xpYi9QT0Uv
UmVzb3VyY2UvQWxpYXNlcy5wbQorKysgYi9saWIvUE9FL1Jlc291cmNlL0FsaWFzZXMucG0KQEAg
LTY3LDYgKzY3LDcgQEAgc3ViIF9kYXRhX2FsaWFzX2ZpbmFsaXplIHsKIAogc3ViIF9kYXRhX2Fs
aWFzX2FkZCB7CiAgIG15ICgkc2VsZiwgJHNlc3Npb24sICRhbGlhcykgPSBAXzsKKyMgIF93YXJu
KCAiU2Vzc2lvbiAiLCAkc2Vzc2lvbi0+SUQsICIgaXMgYWxpYXMgJGFsaWFzXG4iICk7CiAgICRz
ZWxmLT5fZGF0YV9zZXNfcmVmY291bnRfaW5jKCRzZXNzaW9uLT5JRCk7CiAgICRrcl9hbGlhc2Vz
eyRhbGlhc30gPSAkc2Vzc2lvbjsKICAgJGtyX3Nlc190b19hbGlhc3skc2Vzc2lvbi0+SUR9LT57
JGFsaWFzfSA9ICRzZXNzaW9uOwpAQCAtNzksNiArODAsNyBAQCBzdWIgX2RhdGFfYWxpYXNfYWRk
IHsKIAogc3ViIF9kYXRhX2FsaWFzX3JlbW92ZSB7CiAgIG15ICgkc2VsZiwgJHNlc3Npb24sICRh
bGlhcykgPSBAXzsKKyMgIF93YXJuKCAiU2Vzc2lvbiAiLCAkc2Vzc2lvbi0+SUQsICIgd2FzIGFs
aWFzICRhbGlhc1xuIiApOwogICBkZWxldGUgJGtyX2FsaWFzZXN7JGFsaWFzfTsKICAgZGVsZXRl
ICRrcl9zZXNfdG9fYWxpYXN7JHNlc3Npb24tPklEfS0+eyRhbGlhc307CiAgICRzZWxmLT5fZGF0
YV9zZXNfcmVmY291bnRfZGVjKCRzZXNzaW9uLT5JRCk7CmRpZmYgLS1naXQgYS9saWIvUE9FL1Jl
c291cmNlL0Nsb2NrLnBtIGIvbGliL1BPRS9SZXNvdXJjZS9DbG9jay5wbQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzFiMjYzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL1BP
RS9SZXNvdXJjZS9DbG9jay5wbQpAQCAtMCwwICsxLDIzOCBAQAorIyBNYW5hZ2UgYSBwbGF0b25p
YywgbW9ub3RvbmljIGNsb2NrIHRvIGtlZXAgdGhlIGV2ZW50IHF1ZXVlIG9yZGVyZWQKKworcGFj
a2FnZSBQT0U6OlJlc291cmNlOjpDbG9jazsKKwordXNlIHZhcnMgcXcoJFZFUlNJT04pOworJFZF
UlNJT04gPSAnMS4zNTQnOyAjIE5PVEUgLSBTaG91bGQgYmUgIy4jIyMgKHRocmVlIGRlY2ltYWwg
cGxhY2VzKQorCit1c2Ugc3RyaWN0OworCit1c2UgRmlsZTo6U3BlYzsKKworc3ViIERFQlVHICgp
IHsgMCB9CisKK3N1YiBkb19YIAoreworICAgIG15KCAkWCwgJGRlZmF1bHQgKSA9IEBfOworICAg
IG15ICRtID0gIlVTRV8kWCI7CisgICAgcmV0dXJuIFBPRTo6S2VybmVsLT5jYW4oICRtICktPigp
IGlmIFBPRTo6S2VybmVsLT5jYW4oICRtICk7CisgICAgbXkgJGsgPSAiUE9FX1VTRV8kWCI7Cisg
ICAgcmV0dXJuICRFTlZ7JGt9IGlmIGV4aXN0cyAkRU5WeyRrfTsKKyAgICByZXR1cm4gJGRlZmF1
bHQgaWYgZGVmaW5lZCAkZGVmYXVsdDsKKyAgICByZXR1cm4gMTsKK30KKworc3ViIGV4YWN0X2Vw
b2NoCit7CisgICAgbXkoICRtb25vY2xvY2sgKSA9IEBfOworICAgICAgICAgICAKKyAgICAjIFRy
eSB0byBnZXQgdGhlIGV4YWN0IGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgbW9ub3RvbmljIGNsb2Nr
J3MgZXBvY2gKKyAgICAjIGFuZCB0aGUgc3lzdGVtIGNsb2NrJ3MgZXBvY2guICBXZSBkbyB0aGlz
IGJ5IGNvbXBhcmluZyB0aGUgMiBmb3IgMC4yNSBzZWNvbmQKKyAgICAjIG9yIDEwIHNhbXBsZXMu
ICBUbyBjb21wZW5zYXRlIGZvciBkZWxheXMgYmV0d2VlbiBjYWxsaW5nIHRpbWUgYW5kIGdldF90
aW1lLAorICAgICMgd2UgcnVuIGluIGJvdGggb3JkZXIuICBFdmVuIHNvLCBJIHN0aWxsIHNlZSB1
cCB0byAxMCBtUyBkaXZlcmdlbmNlIGluIG15IGRldiBWTQorICAgICMgYmV0d2VlbiBpbnZvY2F0
aW9ucworICAgIG15ICROPTA7CisgICAgbXkgJHRvdGFsID0gMDsKKyAgICBteSAkZW5kID0gJG1v
bm9jbG9jay0+Z2V0X3RpbWUoKSArIDAuMjU7CisgICAgd2hpbGUoICRlbmQgPiAkbW9ub2Nsb2Nr
LT5nZXRfdGltZSgpIG9yICROIDwgMjApIHsKKyAgICAgICAgbXkgJGhyID0gVGltZTo6SGlSZXM6
OnRpbWUoKTsKKyAgICAgICAgbXkgJG1vbm8gPSAkbW9ub2Nsb2NrLT5nZXRfdGltZTsKKyAgICAg
ICAgJHRvdGFsICs9ICRociAtICRtb25vOworICAgICAgICAkTisrOworICAgICAgICAkbW9ubyA9
ICRtb25vY2xvY2stPmdldF90aW1lOworICAgICAgICAkaHIgPSBUaW1lOjpIaVJlczo6dGltZSgp
OworICAgICAgICAkdG90YWwgKz0gJGhyIC0gJG1vbm87CisgICAgICAgICROKys7CisgICAgfQor
ICAgIERFQlVHIGFuZCB3YXJuICJSVCBjbG9jayBzYW1wbGVzPSROIjsKKyAgICByZXR1cm4gJHRv
dGFsLyROOworfQorCitzdWIgZ2V0X2Vwb2NoCit7CisgICAgbXkoICRtb25vY2xvY2ssICR3YWxs
Y2xvY2sgKSA9IEBfOworICAgIHJldHVybiAkd2FsbGNsb2NrLT5nZXRfdGltZSAtICRtb25vY2xv
Y2stPmdldF90aW1lOworfQorCisKK0JFR0lOIHsKKyAgICBteSAkZG9uZTsKKyAgICBpZiggZG9f
WCggJ1BPU0lYUlQnICkgKSB7CisgICAgICAgIGV2YWwgeworICAgICAgICAgICAgcmVxdWlyZSBG
aWxlOjpTcGVjLT5jYXRmaWxlKCBxdyggUE9TSVggUlQgQ2xvY2sucG0gKSApOworICAgICAgICAg
ICAgbXkgJG1vbm9jbG9jayA9IFBPU0lYOjpSVDo6Q2xvY2stPm5ldyggJ21vbm90b25pYycgKTsK
KyAgICAgICAgICAgIG15ICR3YWxsY2xvY2sgPSBQT1NJWDo6UlQ6OkNsb2NrLT5uZXcoICdyZWFs
dGltZScgKTsKKyAgICAgICAgICAgICptb25vdGltZSA9IHN1YiB7IHJldHVybiAkbW9ub2Nsb2Nr
LT5nZXRfdGltZTsgfTsKKyAgICAgICAgICAgICp3YWxsdGltZSA9IHN1YiB7IHJldHVybiAkd2Fs
bGNsb2NrLT5nZXRfdGltZTsgfTsKKyAgICAgICAgICAgICpzbGVlcCA9IHN1YiB7ICRtb25vY2xv
Y2stPnNsZWVwX2RlZXBseShAXykgfTsKKyAgICAgICAgICAgICREQjo6c2luZ2xlID0gMTsKKyAg
ICAgICAgICAgIGlmKCBkb19YKCAnU1RBVElDX0VQT0NIJyApICkgeworICAgICAgICAgICAgICAg
ICMgVGhpcyBpcyB3aGVyZSB3ZSBjaGVhdDogIHdpdGhvdXQgYSBzdGF0aWMgZXBvY2ggdGhlIHRl
c3RzIGZhaWwKKyAgICAgICAgICAgICAgICAjIGJlY2F1c2UgdGhleSBleHBlY3QgYWxhcm0oKSwg
YWxhcm1fc2V0KCkgdG8gYXJyaXZlIGluIG9yZGVyCisgICAgICAgICAgICAgICAgIyBDYWxsaW5n
IGdldF9lcG9jaCgpIGVhY2ggdGltZSB3b3VsZCBwcmVjbHVkZSB0aGlzCisgICAgICAgICAgICAg
ICAgbXkgJGVwb2NoID0gMDsKKyAgICAgICAgICAgICAgICBpZiggZG9fWCggJ0VYQUNUX0VQT0NI
JywgMCApICkgeworICAgICAgICAgICAgICAgICAgICAkZXBvY2ggPSBleGFjdF9lcG9jaCggJG1v
bm9jbG9jaywgJHdhbGxjbG9jayApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgJGVwb2NoID0gZ2V0X2Vwb2NoKCAkbW9ub2Ns
b2NrLCAkd2FsbGNsb2NrICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIERF
QlVHIGFuZCB3YXJuICJQT0UgY2xvY2sgZXBvY2g9JGVwb2NoIjsKKyAgICAgICAgICAgICAgICAq
d2FsbDJtb25vID0gc3ViIHsgJF9bMF0gLSAkZXBvY2ggfTsKKyAgICAgICAgICAgICAgICAqbW9u
bzJ3YWxsID0gc3ViIHsgJF9bMF0gKyAkZXBvY2ggfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgICp3YWxsMm1vbm8gPSBzdWIgeyAkX1swXSAtIGdl
dF9lcG9jaCgkbW9ub2Nsb2NrLCAkd2FsbGNsb2NrKSB9OworICAgICAgICAgICAgICAgICptb25v
MndhbGwgPSBzdWIgeyAkX1swXSArIGdldF9lcG9jaCgkbW9ub2Nsb2NrLCAkd2FsbGNsb2NrKSB9
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgJGRvbmUgPSAxOworICAgICAgICB9OworICAg
ICAgICBpZiggREVCVUcgKSB7CisgICAgICAgICAgICB3YXJuICJQT1NJWDo6UlQ6OkNsb2NrIG5v
dCBpbnN0YWxsZWQ6ICRAIiBpZiAkQDsKKyAgICAgICAgICAgIHdhcm4gIlBPRSBjbG9jayB1c2lu
ZyBQT1NJWDo6UlQ6OkNsb2NrIiBpZiAkZG9uZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZigg
ISRkb25lIGFuZCBkb19YKCAnSElSRVMnICkgKSB7CisgICAgICAgIGV2YWwgeworICAgICAgICAg
ICAgcmVxdWlyZSBGaWxlOjpTcGVjLT5jYXRmaWxlKCBxdyggVGltZSBIaVJlcy5wbSApICk7Cisg
ICAgICAgICAgICAqbW9ub3RpbWUgPSBcJlRpbWU6OkhpUmVzOjp0aW1lOworICAgICAgICAgICAg
KndhbGx0aW1lID0gXCZUaW1lOjpIaVJlczo6dGltZTsKKyAgICAgICAgICAgICpzbGVlcCA9IFwm
VGltZTo6SGlSZXM6OnNsZWVwOworICAgICAgICAgICAgKndhbGwybW9ubyA9IHN1YiB7IHJldHVy
biAkX1swXSB9OworICAgICAgICAgICAgKm1vbm8yd2FsbCA9IHN1YiB7IHJldHVybiAkX1swXSB9
OworICAgICAgICAgICAgJGRvbmUgPSAxOworICAgICAgICB9OworICAgICAgICBpZiggREVCVUcg
KSB7CisgICAgICAgICAgICB3YXJuICJUaW1lOjpIaVJlcyBub3QgaW5zdGFsbGVkOiAkQCIgaWYg
JEA7CisgICAgICAgICAgICB3YXJuICJQT0UgY2xvY2sgdXNpbmcgVGltZTo6SGlSZXMiIGlmICRk
b25lOworICAgICAgICB9CisgICAgfQorICAgIHVubGVzcyggJGRvbmUgKSB7CisgICAgICAgICMg
XCZDT1JFOjp0aW1lIGZhaWxzIDotKAorICAgICAgICAqbW9ub3RpbWUgPSBzdWIgeyBDT1JFOjp0
aW1lIH07CisgICAgICAgICp3YWxsdGltZSA9IHN1YiB7IENPUkU6OnRpbWUgfTsKKyAgICAgICAg
KnNsZWVwID0gc3ViIHsgQ09SRTo6c2xlZXAoQF8pIH07CisgICAgICAgICp3YWxsMm1vbm8gPSBz
dWIgeyByZXR1cm4gJF9bMF0gfTsKKyAgICAgICAgKm1vbm8yd2FsbCA9IHN1YiB7IHJldHVybiAk
X1swXSB9OworICAgICAgICB3YXJuICJQT0UgY2xvY2sgdXNpbmcgQ09SRTo6dGltZSIgaWYgREVC
VUc7CisgICAgfQorICAgICp0aW1lID0gc3ViIHsgQ2FycDo6Y29uZmVzcyggIlRoaXMgc2hvdWxk
IGJlIG1vbm90aW1lIiApIH07Cit9CisKK3JlcXVpcmUgRXhwb3J0ZXI7CitvdXIgQEVYUE9SVF9P
SyA9IHF3KCBtb25vdGltZSBzbGVlcCB3YWxsdGltZSB3YWxsMm1vbm8gbW9ubzJ3YWxsIHRpbWUg
KTsKK291ciBASVNBID0gcXcoIEV4cG9ydGVyICk7CisKKzE7CisKK19fRU5EX18KKworPWhlYWQx
IE5BTUUKKworUE9FOjpSZXNvdXJjZTo6Q2xvY2sgLSBpbnRlcm5hbCBjbG9jayB1c2VkIGZvciBv
cmRlcmluZyB0aGUgcXVldWUKKworPWhlYWQxIFNZTk9QU0lTCisKKyAgICBzdWIgUE9FOjpLZXJu
ZWw6OlVTRV9QT1NJWFJUIHsgMCB9CisgICAgdXNlIFBPRTsKKworPWhlYWQxIERFU0NSSVBUSU9O
CisKK1BPRTo6UmVzb3VyY2U6OkNsb2NrIGlzIGEgaGVscGVyIG1vZHVsZSBmb3IgUE9FOjpLZXJu
ZWwuICBJdCBwcm92aWRlcyB0aGUKK2ZlYXR1cmVzIHRvIGtlZXAgYW4gaW50ZXJuYWwgbW9ub3Rv
bmljIGNsb2NrIGFuZCBhIHdhbGwgY2xvY2suICBJdCBhbHNvCitjb252ZXJ0cyBiZXR3ZWVuIHRo
aXMgbW9ub3RvbmljIGNsb2NrIGFuZCB0aGUgd2FsbCBjbG9jay4KKworVGhlIG1vbm90b25pYyBj
bG9jayBpcyB1c2VkIHRvIGtlZXAgYW4gb3JkZXJlZCBxdWV1ZSBvZiBldmVudHMuICBUaGUgd2Fs
bAorY2xvY2sgaXMgdXNlZCB0byBjb211bmljYXRlIHRoZSB0aW1lIHdpdGggdXNlciBjb2RlCiso
TDxQT0U6Oktlcm5lbC9hbGFybV9zZXQ+LCBMPFBPRTo6S2VybmVsL2FsYXJtX3JlbW92ZT4pLgor
CitUaGVyZSBhcmUgMyBwb3NzaWJsZSBjbG9jayBzb3VyY2VzIGluIG9yZGVyIG9mIHByZWZlcmVu
Y2U6CitMPFBPU0lYOjpSVDo6Q2xvY2s+LCBMPFRpbWU6OkhpUmVzPiBhbmQgTDxwZXJsZnVuYy90
aW1lPi4gIE9ubHkKK0M8UE9TSVg6OlJUOjpDbG9jaz4gaGFzIGEgc2VwZXJhdGUgbW9ub3Rvbmlj
IGFuZCB3YWxsIGNsb2NrOyB0aGUgb3RoZXIgdHdvIHVzZSB0aGUKK3NhbWUgc291cmNlIGZvciBi
b3RoIGNsb2Nrcy4KKworQ2xvY2sgc2VsZWN0aW9uIGFuZCBiZWhhdmlvdXIgaXMgY29udHJvbGVk
IHdpdGggdGhlIGZvbGxvd2luZzoKKworPWhlYWQyIFVTRV9QT1NJWFJUCisKKyAgICBleHBvcnQg
UE9FX1VTRV9QT1NJWFJUPTAKKyAgICAgICAgb3IKKyAgICBzdWIgUE9FOjpLZXJuZWw6OlVTRV9Q
T1NJWFJUIHsgMCB9CisKK1VzZXMgdGhlIEM8bW9ub3RvbmljPiBjbG9jayBzb3VyY2UgZm9yIHF1
ZXVlIHByaW9yaXR5IGFuZCB0aGUgQzxyZWFsdGltZT4KK2Nsb2NrIHNvdXJjZSBmb3Igd2FsbCBj
bG9jay4gIE5vdCB1c2VkIGlmIFBPU0lYOjpSVDo6Q2xvY2sgaXMgbm90IGluc3RhbGxlZAorb3Ig
eW91ciBzeXN0ZW0gZG9lcyBub3QgaGF2ZSBhIEM8bW9ub3RvbmljPiBjbG9jay4KKworRGVmYXVs
dHMgdG8gdHJ1ZS4gIElmIHlvdSB3YW50IHRoZSBvbGQgUE9FIGJlaGF2aW91ciwgc2V0IHRoaXMg
dG8gMC4KKworPWhlYWQyIFVTRV9TVEFUSUNfRVBPQ0gKKworICAgIGV4cG9ydCBQT0VfVVNFX1NU
QVRJQ19FUE9DSD0wCisgICAgICAgIG9yCisgICAgc3ViIFBPRTo6S2VybmVsOjpVU0VfU1RBVElD
X0VQT0NIIHsgMCB9CisKK1RoZSBlcG9jaCBvZiB0aGUgUE9TSVg6OlJUOjpDbG9jayBtb25vdG9u
aWMgaXMgZGlmZmVyZW50IGZyb20gdGhhdCBvZiB0aGUKK3JlYWx0aW1lIGNsb2NrLiAgRm9yIGlu
c3RhbmNlIG9uIExpbnV4IDIuNi4xOCwgdGhlIG1vbm90b25pYyBjbG9jayBpcyB0aGUKK251bWJl
ciBvZiBzZWNvbmRzIHNpbmNlIHN5c3RlbSBib290LiAgVGhpcyBlcG9jaCBpcyB1c2VkIHRvIGNv
bnZlcnQgZnJvbQord2FsbHRpbWUgaW50byBtb25vdG9uaWMgdGltZSBmb3IgTDxQT0U6Oktlcm5l
bC9hbGFybT4sCitMPFBPRTo6S2VybmVsL2FsYXJtX2FkZD4gYW5kIEw8UE9FOjpLZXJuZWwvYWxh
cm1fc2V0Pi4gSWYKK0M8VVNFX1NUQVRJQ19FUE9DSD4gaXMgdHJ1ZSAodGhlIGRlZmF1bHQpLCB0
aGVuIHRoZSBlcG9jaCBpcyBjYWxjdWxhdGVkIGF0Citsb2FkIHRpbWUuICBJZiBmYWxzZSwgdGhl
IGVwb2NoIGlzIGNhbGN1bGF0ZWQgZWFjaCB0aW1lIGl0IGlzIG5lZWRlZC4KKworRGVmYXVsdHMg
dG8gdHJ1ZS4gIE9ubHkgcmVsZXZhbnQgZm9yIGlmIHVzaW5nIFBPU0lYOjpSVDo6Q2xvY2suIExv
bmctcnVubmluZworUE9FIHNlcnZlcnMgc2hvdWxkIGhhdmUgdGhpcyBzZXQgdG8gZmFsc2Ugc28g
dGhhdCBzeXN0ZW0gY2xvY2sgc2tldyBkb2VzCittZXNzIHVwIHRoZSBxdWV1ZS4KKworSXQgaXMg
aW1wb3J0YW50IHRvIHBvaW50IG91dCB0aGF0IHdpdGhvdXQgYSBzdGF0aWMgZXBvY2gsIHRoZSBv
cmRlcmluZyBvZgordGhlIGZvbGxvd2luZyB0d28gYWxhcm1zIGlzIHVuZGVmaW5lZC4KKworICAg
ICRwb2Vfa2VybmVsLT5hbGFybV9zZXQoIGExID0+ICR0aW1lICk7CisgICAgJHBvZV9rZXJuZWwt
PmFsYXJtX3NldCggYTIgPT4gJHRpbWUgKTsKKworPWhlYWQyIFVTRV9FWEFDVF9FUE9DSAorCisg
ICAgZXhwb3J0IFBPRV9VU0VfRVhBQ1RfRVBPQ0g9MQorICAgICAgICBvcgorICAgIHN1YiBQT0U6
Oktlcm5lbDo6VVNFX0VBQ1RfRVBPQ0ggeyAxIH0KKworVGhlcmUgY3VycmVudGx5IG5vIHdheSB0
byBleGFjdGx5IGdldCB0aGUgbW9ub3RvbmljIGNsb2NrJ3MgZXBvY2guICBJbnN0ZWFkCit0aGUg
ZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBjdXJyZW50IG1vbm90b25pYyBjbG9jayB2YWx1ZSB0byB0
aGUgcmVhbHRpbWUKK2Nsb2NrJ3MgdmFsdWUgaXMgdXNlZC4gIFRoaXMgaXMgb2J2aW91c2x5IGlu
ZXhhY3QgYmVjYXVzZSB0aGVyZSBpcyBhIHNsaWdodAorZGVsYXkgYmV0d2VlbiB0aGUgMiBzeXN0
ZW0gY2FsbHMuICBTZXR0aW5nIFVTRV9FWEFDVF9FUE9DSCB0byB0cnVlIHdpbGwKK2NhbGN1bGF0
ZSBhbiBhdmVyYWdlIG9mIHRoaXMgZGlmZmVyZW5jZSBvdmVyIDI1MCBtcyBvciBhdCBsZWFzdCAy
MCBzYW1wbGVzLiAKK1doYXQncyBtb3JlLCB0aGUgc3lzdGVtIGNhbGxzIGFyZSBkb25lIGluIGJv
dGggb3JkZXJzIChtb25vdG9uaWMgdGhlbgorcmVhbHRpbWUsIHJlYWx0aW1lIHRoZW4gbW9ub3Rv
bmljKSB0byB0cnkgYW5kIGdldCBhIG1vcmUgZWFjdCB2YWx1ZS4KKworRGVmYXVsdHMgdG8gZmFs
c2UuICBPbmx5IHJlbGV2YW50IGlmIEw8L1VTRV9TVEFUSUNfRVBPQ0g+IGlzIHRydWUuCisKKwor
PWhlYWQyIFVTRV9ISVJFUworCisgICAgZXhwb3J0IFBPRV9VU0VfSElSRVM9MAorICAgICAgICBv
cgorICAgIHN1YiBQT0U6Oktlcm5lbDo6VVNFX0hJUkVTIHsgMCB9CisKK1VzZSBMPFRpbWU6Okhp
UmVzPiBhcyBib3RoIG1vbm90b25pYyBhbmQgd2FsbCBjbG9jayBzb3VyY2UuICBUaGlzIHdhcyBQ
T0UncworcHJldmlvdXMgZGVmYXVsdCBjbG9jay4KKworRGVmYXVsdHMgdG8gdHJ1ZS4gIE9ubHkg
cmVsZXZhbnQgaWYgTDwvVVNFX1BPU0lYUlQ+IGlzIGZhbHNlLiAgU2V0IHRoaXMgdG8gZmFsc2Ug
dG8gdXNlCitMPHBlcmxmdW5jL3RpbWU+LgorCisKKz1oZWFkMSBTRUUgQUxTTworCitTZWUgTDxQ
T0U6OlJlc291cmNlPiBmb3IgZ2VuZXJhbCBkaXNjdXNzaW9uIGFib3V0IHJlc291cmNlcyBhbmQg
dGhlCitjbGFzc2VzIHRoYXQgbWFuYWdlIHRoZW0uCisKKz1oZWFkMSBCVUdTCisKK05vbmUga25v
d24uCisKKz1oZWFkMSBBVVRIT1JTICYgQ09QWVJJR0hUUworCitQbGVhc2Ugc2VlIEw8UE9FPiBm
b3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBhdXRob3JzIGFuZCBjb250cmlidXRvcnMuCisKKz1j
dXQKKworIyByb2NjbyAvLyB2aW06IHRzPTIgc3c9MiBleHBhbmR0YWIKKyMgVE9ETyAtIEVkaXQu
CmRpZmYgLS1naXQgYS9saWIvUE9FL1Jlc291cmNlL0V2ZW50cy5wbSBiL2xpYi9QT0UvUmVzb3Vy
Y2UvRXZlbnRzLnBtCmluZGV4IDIxM2M5ZjQuLjZjNDE5ZTcgMTAwNjQ0Ci0tLSBhL2xpYi9QT0Uv
UmVzb3VyY2UvRXZlbnRzLnBtCisrKyBiL2xpYi9QT0UvUmVzb3VyY2UvRXZlbnRzLnBtCkBAIC01
OCwxMyArNTgsMTMgQEAgc3ViIF9kYXRhX2V2X2ZpbmFsaXplIHsKICMjIyBFbnF1ZXVlIGFuIGV2
ZW50LgogCiBzdWIgRklGT19USU1FX0VQU0lMT04gKCkgeyAwLjAwMDAwMSB9Ci1teSAkbGFzdF9m
aWZvX3RpbWUgPSB0aW1lKCk7CitteSAkbGFzdF9maWZvX3RpbWUgPSBtb25vdGltZSgpOwogCiBz
dWIgX2RhdGFfZXZfZW5xdWV1ZSB7CiAgIG15ICgKICAgICAkc2VsZiwKICAgICAkc2Vzc2lvbiwg
JHNvdXJjZV9zZXNzaW9uLCAkZXZlbnQsICR0eXBlLCAkZXRjLAotICAgICRmaWxlLCAkbGluZSwg
JGZyb21zdGF0ZSwgJHRpbWUKKyAgICAkZmlsZSwgJGxpbmUsICRmcm9tc3RhdGUsICR0aW1lLCAk
ZGVsdGEsICRwcmlvcml0eQogICApID0gQF87CiAKICAgbXkgJHNpZCA9ICRzZXNzaW9uLT5JRDsK
QEAgLTc5LDMyICs3OSw0MiBAQCBzdWIgX2RhdGFfZXZfZW5xdWV1ZSB7CiAgIH0KIAogICAjIFRo
aXMgaXMgYXdrd2FyZCwgYnV0IGZhc3RlciB0aGFuIHVzaW5nIHRoZSBmaWVsZHMgaW5kaXZpZHVh
bGx5LgotICBteSAkZXZlbnRfdG9fZW5xdWV1ZSA9IFsgQF9bMS4uOF0gXTsKKyAgbXkgJGV2ZW50
X3RvX2VucXVldWUgPSBbIEBfWygxK0VWX1NFU1NJT04pIC4uICgxK0VWX0ZST01TVEFURSldIF07
CisgIGlmKCBkZWZpbmVkICR0aW1lICkgeworICAgICRldmVudF90b19lbnF1ZXVlLT5bRVZfV0FM
TFRJTUVdID0gJHRpbWU7CisgICAgJGV2ZW50X3RvX2VucXVldWUtPltFVl9ERUxUQV0gICAgPSAk
ZGVsdGE7CisgICAgJHByaW9yaXR5IHx8PSB3YWxsMm1vbm8oICR0aW1lICsgKCRkZWx0YXx8MCkg
KTsKKyAgfQorICBlbHNlIHsKKyAgICAkcHJpb3JpdHkgfHw9IG1vbm90aW1lKCk7CisgIH0KIAog
ICBteSAkbmV3X2lkOwogICBteSAkb2xkX2hlYWRfcHJpb3JpdHkgPSAka3JfcXVldWUtPmdldF9u
ZXh0X3ByaW9yaXR5KCk7CiAKICAgdW5sZXNzICgkdHlwZSAmIEVUX01BU0tfREVMQVlFRCkgewot
ICAgICR0aW1lID0gJGxhc3RfZmlmb190aW1lICsgRklGT19USU1FX0VQU0lMT04gaWYgJHRpbWUg
PD0gJGxhc3RfZmlmb190aW1lOwotICAgICRsYXN0X2ZpZm9fdGltZSA9ICR0aW1lOworICAgICRw
cmlvcml0eSA9ICRsYXN0X2ZpZm9fdGltZSArIEZJRk9fVElNRV9FUFNJTE9OIGlmICRwcmlvcml0
eSA8PSAkbGFzdF9maWZvX3RpbWU7CisgICAgJGxhc3RfZmlmb190aW1lID0gJHByaW9yaXR5Owog
ICB9CiAKLSAgJG5ld19pZCA9ICRrcl9xdWV1ZS0+ZW5xdWV1ZSgkdGltZSwgJGV2ZW50X3RvX2Vu
cXVldWUpOworICAkbmV3X2lkID0gJGtyX3F1ZXVlLT5lbnF1ZXVlKCRwcmlvcml0eSwgJGV2ZW50
X3RvX2VucXVldWUpOworICAkZXZlbnRfdG9fZW5xdWV1ZS0+W0VWX1NFUV0gPSAkbmV3X2lkOwog
Ci0gIGlmIChUUkFDRV9FVkVOVFMpIHsKKyAgI19jYXJwKCBDYXJwOjpsb25nbWVzcyggIjxldj4g
cHJpb3JpdHkgaXMgbXVjaCB0byBmYXIgaW4gdGhlIGZ1dHVyZSIgKSApIGlmICRwcmlvcml0eSA+
IDEzNTQ1Njk5MDg7CisgIGlmIChUUkFDRV9FVkVOVFMgKSB7CiAgICAgX3dhcm4oCiAgICAgICAi
PGV2PiBlbnF1ZXVlZCBldmVudCAkbmV3X2lkIGBgJGV2ZW50JycgZnJvbSAiLAogICAgICAgJHNl
bGYtPl9kYXRhX2FsaWFzX2xvZ2dhYmxlKCRzb3VyY2Vfc2Vzc2lvbi0+SUQpLCAiIHRvICIsCiAg
ICAgICAkc2VsZi0+X2RhdGFfYWxpYXNfbG9nZ2FibGUoJHNpZCksCi0gICAgICAiIGF0ICR0aW1l
IgorICAgICAgIiBhdCAkdGltZSwgcHJpb3JpdHk9JHByaW9yaXR5IgogICAgICk7CiAgIH0KIAog
ICB1bmxlc3MgKGRlZmluZWQgJG9sZF9oZWFkX3ByaW9yaXR5KSB7Ci0gICAgJHNlbGYtPmxvb3Bf
cmVzdW1lX3RpbWVfd2F0Y2hlcigkdGltZSk7CisgICAgJHNlbGYtPmxvb3BfcmVzdW1lX3RpbWVf
d2F0Y2hlcigkcHJpb3JpdHkpOwogICB9Ci0gIGVsc2lmICgkdGltZSA8ICRvbGRfaGVhZF9wcmlv
cml0eSkgewotICAgICRzZWxmLT5sb29wX3Jlc2V0X3RpbWVfd2F0Y2hlcigkdGltZSk7CisgIGVs
c2lmICgkcHJpb3JpdHkgPCAkb2xkX2hlYWRfcHJpb3JpdHkpIHsKKyAgICAkc2VsZi0+bG9vcF9y
ZXNldF90aW1lX3dhdGNoZXIoJHByaW9yaXR5KTsKICAgfQogCiAgICMgVGhpcyBpcyB0aGUgY291
bnRlcnBhcnQgdG8gX2RhdGFfZXZfcmVmY291bnRfZGVjKCkuICBJdCdzIG9ubHkKQEAgLTEyMSw2
ICsxMzEsMjAgQEAgc3ViIF9kYXRhX2V2X2VucXVldWUgewogICByZXR1cm4gJG5ld19pZDsKIH0K
IAorc3ViIF9kYXRhX2V2X2FkanVzdAoreworICAgIG15KCAkc2VsZiwgJGFsYXJtX2lkLCAkbXlf
YWxhcm0sICR0aW1lLCAkZGVsdGEgKSA9IEBfOworICAgICMgRG9pbmcgaXQgdGhpcyB3YXkgaXMg
ZmFzdGVyCisgICAgIyBYWFgtIEhvd2V2ZXIsIGlmIHRoZXJlIGhhcyBiZWVuIGEgY2xvY2sgc2tl
dywgdGhlIHByaW9yaXR5IHdpbGwgaGF2ZSBjaGFuZ2VkCisgICAgIyBhbmQgd2Ugc2hvdWxkIHJl
Y2FsY3VsYXRlIHByaW9yaXR5IGZyb20gdGltZStkZWx0YQorICAgICRrcl9xdWV1ZS0+YWRqdXN0
X3ByaW9yaXR5KCAkYWxhcm1faWQsICRteV9hbGFybSwgJGRlbHRhICk7CisgICAgbXkgJGV2ZW50
ID0gJGtyX3F1ZXVlLT5nZXRfaXRlbSggJGFsYXJtX2lkLCAkbXlfYWxhcm0gKTsKKyAgICByZXR1
cm4gdW5sZXNzICRldmVudDsKKyAgICAkZXZlbnQtPltFVl9XQUxMVElNRV0gPSAkdGltZSBpZiBk
ZWZpbmVkICR0aW1lOworICAgICRldmVudC0+W0VWX0RFTFRBXSArPSAkZGVsdGEgaWYgZGVmaW5l
ZCAkZGVsdGE7CisgICAgcmV0dXJuICRldmVudC0+W0VWX1dBTExUSU1FXSskZXZlbnQtPltFVl9E
RUxUQV07Cit9CisKICMjIyBSZW1vdmUgZXZlbnRzIHNlbnQgdG8gb3IgZnJvbSBhIHNwZWNpZmlj
IHNlc3Npb24uCiAKIHN1YiBfZGF0YV9ldl9jbGVhcl9zZXNzaW9uIHsKQEAgLTIxMSwxNyArMjM1
LDE4IEBAIHN1YiBfZGF0YV9ldl9jbGVhcl9hbGFybV9ieV9pZCB7CiAgICAgJF9bMF0tPltFVl9T
RVNTSU9OXS0+SUQoKSBlcSAkc2lkOwogICB9OwogCi0gIG15ICgkdGltZSwgJGlkLCAkZXZlbnQp
ID0gJGtyX3F1ZXVlLT5yZW1vdmVfaXRlbSgkYWxhcm1faWQsICRteV9hbGFybSk7Ci0gIHJldHVy
biB1bmxlc3MgZGVmaW5lZCAkdGltZTsKKyAgbXkgKCRwcmksICRpZCwgJGV2ZW50KSA9ICRrcl9x
dWV1ZS0+cmVtb3ZlX2l0ZW0oJGFsYXJtX2lkLCAkbXlfYWxhcm0pOworICByZXR1cm4gdW5sZXNz
IGRlZmluZWQgJHByaTsKIAogICBpZiAoVFJBQ0VfRVZFTlRTKSB7CiAgICAgX3dhcm4oCiAgICAg
ICAiPGV2PiByZW1vdmVkIGV2ZW50ICRpZCBgYCIsICRldmVudC0+W0VWX05BTUVdLCAiJycgdG8g
IiwKLSAgICAgICRzZWxmLT5fZGF0YV9hbGlhc19sb2dnYWJsZSgkc2lkKSwgIiBhdCAkdGltZSIK
KyAgICAgICRzZWxmLT5fZGF0YV9hbGlhc19sb2dnYWJsZSgkc2lkKSwgIiBhdCAkcHJpIgogICAg
ICk7CiAgIH0KIAogICAkc2VsZi0+X2RhdGFfZXZfcmVmY291bnRfZGVjKCBAJGV2ZW50W0VWX1NP
VVJDRSwgRVZfU0VTU0lPTl0gKTsKKyAgbXkgJHRpbWUgPSAkZXZlbnQtPltFVl9XQUxMVElNRV0g
KyAoJGV2ZW50LT5bRVZfREVMVEFdfHwwKTsKICAgcmV0dXJuICgkdGltZSwgJGV2ZW50KTsKIH0K
IApAQCAtMjM4LDggKzI2Myw5IEBAIHN1YiBfZGF0YV9ldl9jbGVhcl9hbGFybV9ieV9zZXNzaW9u
IHsKIAogICBteSBAcmVtb3ZlZDsKICAgZm9yZWFjaCAoJGtyX3F1ZXVlLT5yZW1vdmVfaXRlbXMo
JG15X2FsYXJtKSkgewotICAgIG15ICgkdGltZSwgJGV2ZW50KSA9IEAkX1tJVEVNX1BSSU9SSVRZ
LCBJVEVNX1BBWUxPQURdOworICAgIG15ICgkcHJpLCAkZXZlbnQpID0gQCRfW0lURU1fUFJJT1JJ
VFksIElURU1fUEFZTE9BRF07CiAgICAgJHNlbGYtPl9kYXRhX2V2X3JlZmNvdW50X2RlYyggQCRl
dmVudFtFVl9TT1VSQ0UsIEVWX1NFU1NJT05dICk7CisgICAgbXkgJHRpbWUgPSAkZXZlbnQtPltF
Vl9XQUxMVElNRV0gKyAoJGV2ZW50LT5bRVZfREVMVEFdfHwwKTsKICAgICBwdXNoIEByZW1vdmVk
LCBbICRldmVudC0+W0VWX05BTUVdLCAkdGltZSwgQHskZXZlbnQtPltFVl9BUkdTXX0gXTsKICAg
fQogCkBAIC0yOTcsMTMgKzMyMywxMyBAQCBzdWIgX2RhdGFfZXZfZGlzcGF0Y2hfZHVlIHsKICAg
ICB9CiAgIH0KIAotICBteSAkbm93ID0gdGltZSgpOworICBteSAkbm93ID0gbW9ub3RpbWUoKTsK
ICAgbXkgJG5leHRfdGltZTsKICAgd2hpbGUgKAogICAgIGRlZmluZWQoJG5leHRfdGltZSA9ICRr
cl9xdWV1ZS0+Z2V0X25leHRfcHJpb3JpdHkoKSkgYW5kCiAgICAgJG5leHRfdGltZSA8PSAkbm93
CiAgICkgewotICAgIG15ICgkZHVlX3RpbWUsICRpZCwgJGV2ZW50KSA9ICRrcl9xdWV1ZS0+ZGVx
dWV1ZV9uZXh0KCk7CisgICAgbXkgKCRwcmlvcml0eSwgJGlkLCAkZXZlbnQpID0gJGtyX3F1ZXVl
LT5kZXF1ZXVlX25leHQoKTsKIAogICAgIGlmIChUUkFDRV9FVkVOVFMpIHsKICAgICAgIF93YXJu
KCI8ZXY+IGRpc3BhdGNoaW5nIGV2ZW50ICRpZCAoJGV2ZW50LT5bRVZfTkFNRV0pIik7CkBAIC0z
MTIsNyArMzM4LDcgQEAgc3ViIF9kYXRhX2V2X2Rpc3BhdGNoX2R1ZSB7CiAgICAgIyBUT0RPIC0g
V2h5IGNhbid0IHdlIHJldmVyc2UgdGhlc2UgdHdvIGxpbmVzPwogICAgICMgVE9ETyAtIFJldmVy
c2luZyB0aGVtIGNvdWxkIGF2b2lkIGVudGVyaW5nIGFuZCByZW1vdmluZyBHQyBtYXJrcy4KICAg
ICAkc2VsZi0+X2RhdGFfZXZfcmVmY291bnRfZGVjKCRldmVudC0+W0VWX1NPVVJDRV0sICRldmVu
dC0+W0VWX1NFU1NJT05dKTsKLSAgICAkc2VsZi0+X2Rpc3BhdGNoX2V2ZW50KEAkZXZlbnQsICRk
dWVfdGltZSwgJGlkKTsKKyAgICAkc2VsZi0+X2Rpc3BhdGNoX2V2ZW50KEB7JGV2ZW50fVtFVl9T
RVNTSU9OLi5FVl9GUk9NU1RBVEVdLCAkcHJpb3JpdHksICRpZCk7CiAKICAgICAjIFN0b3AgdGhl
IHN5c3RlbSBpZiBhbiB1bmhhbmRsZWQgZXhjZXB0aW9uIG9jY3VycmVkLgogICAgICMgVGhpcyB3
aXBlcyBvdXQgYWxsIHNlc3Npb25zIGFuZCBhc3NvY2lhdGVkIHJlc291cmNlcy4KZGlmZiAtLWdp
dCBhL2xpYi9QT0UvUmVzb3VyY2UvRmlsZUhhbmRsZXMucG0gYi9saWIvUE9FL1Jlc291cmNlL0Zp
bGVIYW5kbGVzLnBtCmluZGV4IDBjZmZjY2QuLmJkNTdjMmEgMTAwNjQ0Ci0tLSBhL2xpYi9QT0Uv
UmVzb3VyY2UvRmlsZUhhbmRsZXMucG0KKysrIGIvbGliL1BPRS9SZXNvdXJjZS9GaWxlSGFuZGxl
cy5wbQpAQCAtMjAyLDcgKzIwMiw3IEBAIHN1YiBfZGF0YV9oYW5kbGVfZmluYWxpemUgewogc3Vi
IF9kYXRhX2hhbmRsZV9lbnF1ZXVlX3JlYWR5IHsKICAgbXkgKCRzZWxmLCAkbW9kZSkgPSBzcGxp
Y2UoQF8sIDAsIDIpOwogCi0gIG15ICRub3cgPSB0aW1lKCk7CisgIG15ICRub3cgPSBtb25vdGlt
ZSgpOwogICBmb3JlYWNoIG15ICRmaWxlbm8gKEBfKSB7CiAgICAgaWYgKEFTU0VSVF9EQVRBKSB7
CiAgICAgICBfdHJhcCAiaW50ZXJuYWwgaW5jb25zaXN0ZW5jeTogdW5kZWZpbmVkIGZpbGVubyIg
dW5sZXNzIGRlZmluZWQgJGZpbGVubzsKZGlmZiAtLWdpdCBhL2xpYi9QT0UvUmVzb3VyY2UvU2Vz
c2lvbnMucG0gYi9saWIvUE9FL1Jlc291cmNlL1Nlc3Npb25zLnBtCmluZGV4IGRmYjk4NzkuLmE3
ZjVkNzUgMTAwNjQ0Ci0tLSBhL2xpYi9QT0UvUmVzb3VyY2UvU2Vzc2lvbnMucG0KKysrIGIvbGli
L1BPRS9SZXNvdXJjZS9TZXNzaW9ucy5wbQpAQCAtNTUxLDEzICs1NTEsMTMgQEAgc3ViIF9kYXRh
X3Nlc19zdG9wIHsKICAgICAkc2VsZi0+X2Rpc3BhdGNoX2V2ZW50KAogICAgICAgJHBhcmVudCwg
JHNlbGYsCiAgICAgICBFTl9DSElMRCwgRVRfQ0hJTEQsIFsgQ0hJTERfR0FJTiwgJGNoaWxkIF0s
Ci0gICAgICBfX0ZJTEVfXywgX19MSU5FX18sIHVuZGVmLCB0aW1lKCksIC1fX0xJTkVfXworICAg
ICAgX19GSUxFX18sIF9fTElORV9fLCB1bmRlZiwgbW9ub3RpbWUoKSwgLV9fTElORV9fCiAgICAg
KTsKICAgICAkc2VsZi0+X2Rpc3BhdGNoX2V2ZW50KAogICAgICAgJGNoaWxkLCAkc2VsZiwKICAg
ICAgIEVOX1BBUkVOVCwgRVRfUEFSRU5ULAogICAgICAgWyAkc2VsZi0+X2RhdGFfc2VzX2dldF9w
YXJlbnQoJGNoaWxkLT5JRCksICRwYXJlbnQsIF0sCi0gICAgICBfX0ZJTEVfXywgX19MSU5FX18s
IHVuZGVmLCB0aW1lKCksIC1fX0xJTkVfXworICAgICAgX19GSUxFX18sIF9fTElORV9fLCB1bmRl
ZiwgbW9ub3RpbWUoKSwgLV9fTElORV9fCiAgICAgKTsKICAgfQogCkBAIC01NjgsNyArNTY4LDcg
QEAgc3ViIF9kYXRhX3Nlc19zdG9wIHsKICAgbXkgJHN0b3BfcmV0dXJuID0gJHNlbGYtPl9kaXNw
YXRjaF9ldmVudCgKICAgICAkc2Vzc2lvbiwgJHNlbGYtPmdldF9hY3RpdmVfc2Vzc2lvbigpLAog
ICAgIEVOX1NUT1AsIEVUX1NUT1AsIFtdLAotICAgIF9fRklMRV9fLCBfX0xJTkVfXywgdW5kZWYs
IHRpbWUoKSwgLV9fTElORV9fCisgICAgX19GSUxFX18sIF9fTElORV9fLCB1bmRlZiwgbW9ub3Rp
bWUoKSwgLV9fTElORV9fCiAgICk7CiAKICAgIyBJZiB0aGUgZGVwYXJ0aW5nIHNlc3Npb24gaGFz
IGEgcGFyZW50LCBub3RpZnkgaXQgdGhhdCB0aGUgc2Vzc2lvbgpAQCAtNTc4LDcgKzU3OCw3IEBA
IHN1YiBfZGF0YV9zZXNfc3RvcCB7CiAgICAgJHNlbGYtPl9kaXNwYXRjaF9ldmVudCgKICAgICAg
ICRwYXJlbnQsICRzZWxmLAogICAgICAgRU5fQ0hJTEQsIEVUX0NISUxELCBbIENISUxEX0xPU0Us
ICRzZXNzaW9uLCAkc3RvcF9yZXR1cm4gXSwKLSAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgdW5k
ZWYsIHRpbWUoKSwgLV9fTElORV9fCisgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIHVuZGVmLCBt
b25vdGltZSgpLCAtX19MSU5FX18KICAgICApOwogICB9CiAKZGlmZiAtLWdpdCBhL2xpYi9QT0Uv
UmVzb3VyY2UvU2lnbmFscy5wbSBiL2xpYi9QT0UvUmVzb3VyY2UvU2lnbmFscy5wbQppbmRleCBm
ZWE1MTY4Li44OTYxMzkzIDEwMDY0NAotLS0gYS9saWIvUE9FL1Jlc291cmNlL1NpZ25hbHMucG0K
KysrIGIvbGliL1BPRS9SZXNvdXJjZS9TaWduYWxzLnBtCkBAIC01ODgsNyArNTg4LDcgQEAgc3Vi
IF9kYXRhX3NpZ19lbnF1ZXVlX3BvbGxfZXZlbnQgewogCiAgICAgJHNlbGYtPl9kYXRhX2V2X2Vu
cXVldWUoCiAgICAgICAkc2VsZiwgJHNlbGYsIEVOX1NDUE9MTCwgRVRfU0NQT0xMLCBbICRzaWdu
YWwgXSwKLSAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgdW5kZWYsIHRpbWUoKSwKKyAgICAgIF9f
RklMRV9fLCBfX0xJTkVfXywgdW5kZWYKICAgICApOwogICB9IGVsc2UgewogICAgIHJldHVybiBp
ZiAkc2VsZi0+X2RhdGFfc2VzX2NvdW50KCkgPCAxOwpAQCAtNTk2LDcgKzU5Niw3IEBAIHN1YiBf
ZGF0YV9zaWdfZW5xdWV1ZV9wb2xsX2V2ZW50IHsKIAogICAgICRzZWxmLT5fZGF0YV9ldl9lbnF1
ZXVlKAogICAgICAgJHNlbGYsICRzZWxmLCBFTl9TQ1BPTEwsIEVUX1NDUE9MTCwgWyAkc2lnbmFs
IF0sCi0gICAgICBfX0ZJTEVfXywgX19MSU5FX18sIHVuZGVmLCB0aW1lKCkgKyBQT0U6Oktlcm5l
bDo6Q0hJTERfUE9MTElOR19JTlRFUlZBTCgpLAorICAgICAgX19GSUxFX18sIF9fTElORV9fLCB1
bmRlZiwgd2FsbHRpbWUoKSwgUE9FOjpLZXJuZWw6OkNISUxEX1BPTExJTkdfSU5URVJWQUwoKSwK
ICAgICApOwogICB9CiB9CkBAIC02MTAsNyArNjEwLDcgQEAgc3ViIF9kYXRhX3NpZ19oYW5kbGVf
cG9sbF9ldmVudCB7CiAKICAgaWYgKFRSQUNFX1NJR05BTFMpIHsKICAgICBfd2FybigKLSAgICAg
ICI8c2c+IFBPRTo6S2VybmVsIGlzIHBvbGxpbmcgZm9yIHNpZ25hbHMgYXQgIiAuIHRpbWUoKSAu
CisgICAgICAiPHNnPiBQT0U6Oktlcm5lbCBpcyBwb2xsaW5nIGZvciBzaWduYWxzIGF0ICIgLiBt
b25vdGltZSgpIC4KICAgICAgIChVU0VfU0lHQ0hMRCA/ICIgZHVlIHRvIFNJR0NITEQiIDogIiIp
CiAgICAgKTsKICAgfQpAQCAtNjc1LDcgKzY3NSw3IEBAIHN1YiBfZGF0YV9zaWdfcmVhcF9waWRz
IHsKICAgICAgICAgICAgICRzZWxmLT5fZGF0YV9ldl9lbnF1ZXVlKAogICAgICAgICAgICAgICAk
c2VzX3JlYy0+W1BJRF9TRVNTSU9OXSwgJHNlbGYsICRzZXNfcmVjLT5bUElEX0VWRU5UXSwgRVRf
U0lHQ0xELAogICAgICAgICAgICAgICBbICdDSExEJywgJHBpZCwgJD8sIEB7JHNlc19yZWMtPltQ
SURfQVJHU119IF0sCi0gICAgICAgICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgdW5kZWYsIHRp
bWUoKSwKKyAgICAgICAgICAgICAgX19GSUxFX18sIF9fTElORV9fLCB1bmRlZgogICAgICAgICAg
ICAgKTsKICAgICAgICAgICAgIHB1c2ggQHNlc3Npb25zX3RvX2NsZWFyLCAkc2lkOwogICAgICAg
ICAgIH0KQEAgLTY4NSw3ICs2ODUsNyBAQCBzdWIgX2RhdGFfc2lnX3JlYXBfcGlkcyB7CiAgICAg
ICAgICMgS2ljayBvZmYgYSBTSUdDSExEIGNhc2NhZGUuCiAgICAgICAgICRzZWxmLT5fZGF0YV9l
dl9lbnF1ZXVlKAogICAgICAgICAgICRzZWxmLCAkc2VsZiwgRU5fU0lHTkFMLCBFVF9TSUdOQUws
IFsgJ0NITEQnLCAkcGlkLCAkPyBdLAotICAgICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgdW5k
ZWYsIHRpbWUoKSwKKyAgICAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIHVuZGVmCiAgICAgICAg
ICk7CiAgICAgICB9CiAgICAgICBlbHNpZiAoVFJBQ0VfU0lHTkFMUykgewo=
--_=XFMail.1.5.5.Linux:20121204161453:20503=_--
End of MIME message