<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>30942</bug_id>
          
          <creation_ts>2009-10-29 18:56:19 -0700</creation_ts>
          <short_desc>Use pointers instead of copies to pass GregorianDateTime objects around</short_desc>
          <delta_ts>2009-10-30 15:23:54 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>159186</commentid>
    <comment_count>0</comment_count>
      <attachid>42168</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2009-10-29 18:56:19 -0700</bug_when>
    <thetext>Created attachment 42168
patch

patch coming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159216</commentid>
    <comment_count>1</comment_count>
      <attachid>42168</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-10-29 21:12:24 -0700</bug_when>
    <thetext>Comment on attachment 42168
patch

This seemed to be intent on preserving the current behavior, but doing it in a more efficient manner, so I reviewed it with that in mind.

&gt; Index: JavaScriptCore/ChangeLog

Please add a link to the bug.

&gt; +        (JSC::dateProtoFuncGetYear): Renamed getGregorianDateTime to gregorianDateTime,
&gt; +        since it no longer has an out parameter. Uses NULL to indicate invalid dates.

Since 0 is used in the code instead of NULL, nice to do the same thing here.

&gt; Index: JavaScriptCore/runtime/DateInstance.cpp
&gt; +const GregorianDateTime* DateInstance::gregorianDateTime(ExecState* exec, bool outputIsUTC) const

&gt; +        return &amp;m_data-&gt;m_cachedGregorianDateTimeUTC;
&gt;      } else {

Since there is now a return at the end of the &quot;if&quot;, the &quot;else&quot; should be removed.


&gt; Index: JavaScriptCore/runtime/DatePrototype.cpp
&gt;  JSValue JSC_HOST_CALL dateProtoFuncToISOString(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&amp;)
&gt; @@ -454,13 +454,13 @@ JSValue JSC_HOST_CALL dateProtoFuncToISO
&gt; +    const GregorianDateTime* t = thisDateObj-&gt;gregorianDateTime(exec, outputIsUTC);

fwiw, in other places, you changed the name from t to gregorianDateTime.


&gt;  JSValue JSC_HOST_CALL dateProtoFuncSetTime(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&amp; args)
&gt; @@ -830,16 +830,19 @@ static JSValue setNewValueFromTimeArgs(E
&gt; +    const GregorianDateTime* t = thisDateObj-&gt;gregorianDateTime(exec, inputIsUTC);

fwiw, in other places, you changed the name from t to gregorianDateTime.


&gt; +    if (!t)
&gt; +        return jsNaN(exec);

This doesn&apos;t look right to me and appears to be change in behavior. In other similar places, it does this:
         JSValue result = jsNaN(exec);
         thisDateObj-&gt;setInternalValue(result);
         return result;

It seems like this case isn&apos;t covered by current layout tests, so it would be nice to expand them to hit it.


&gt; @@ -857,26 +860,27 @@ static JSValue setNewValueFromDateArgs(E
&gt; +    if (numArgsToUse == 3 &amp;&amp; isnan(milli)) {
&gt; -        // Based on ECMA 262 15.9.5.40 - .41 (set[UTC]FullYear)
&gt; -        // the time must be reset to +0 if it is NaN. 

You&apos;re removing this comment. Do you think it is no longer valuable?

&gt; +        JSValue result = jsNumber(exec, 0);
&gt; +        thisDateObj-&gt;setInternalValue(result);
&gt; +        return result;
&gt;      }

&gt; +    const GregorianDateTime* t = thisDateObj-&gt;gregorianDateTime(exec, inputIsUTC);
&gt; +    if (!t)
&gt; +        return jsNaN(exec);

This doesn&apos;t look right to me and appears to be change in behavior. In other similar places, it does this:
         JSValue result = jsNaN(exec);
         thisDateObj-&gt;setInternalValue(result);
         return result;

It seems like this case isn&apos;t covered by current layout tests, so it would be nice to expand them to hit it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159444</commentid>
    <comment_count>2</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2009-10-30 14:28:34 -0700</bug_when>
    <thetext>&gt; &gt; Index: JavaScriptCore/ChangeLog
&gt; 
&gt; Please add a link to the bug.

Fixed.

&gt; 
&gt; &gt; +        (JSC::dateProtoFuncGetYear): Renamed getGregorianDateTime to gregorianDateTime,
&gt; &gt; +        since it no longer has an out parameter. Uses NULL to indicate invalid dates.
&gt; 
&gt; Since 0 is used in the code instead of NULL, nice to do the same thing here.

Fixed.

&gt; &gt; Index: JavaScriptCore/runtime/DateInstance.cpp
&gt; &gt; +const GregorianDateTime* DateInstance::gregorianDateTime(ExecState* exec, bool outputIsUTC) const
&gt; 
&gt; &gt; +        return &amp;m_data-&gt;m_cachedGregorianDateTimeUTC;
&gt; &gt;      } else {
&gt; 
&gt; Since there is now a return at the end of the &quot;if&quot;, the &quot;else&quot; should be
&gt; removed.

Fixed.

&gt; &gt;  JSValue JSC_HOST_CALL dateProtoFuncToISOString(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&amp;)
&gt; &gt; @@ -454,13 +454,13 @@ JSValue JSC_HOST_CALL dateProtoFuncToISO
&gt; &gt; +    const GregorianDateTime* t = thisDateObj-&gt;gregorianDateTime(exec, outputIsUTC);
&gt; 
&gt; fwiw, in other places, you changed the name from t to gregorianDateTime.
&gt; 
&gt; 
&gt; &gt;  JSValue JSC_HOST_CALL dateProtoFuncSetTime(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&amp; args)
&gt; &gt; @@ -830,16 +830,19 @@ static JSValue setNewValueFromTimeArgs(E
&gt; &gt; +    const GregorianDateTime* t = thisDateObj-&gt;gregorianDateTime(exec, inputIsUTC);
&gt; 
&gt; fwiw, in other places, you changed the name from t to gregorianDateTime.

&quot;gregorianDateTime&quot; is not an option, since it would conflict with the local name gregorianDateTime. I changed these cases to &quot;other&quot; to match the style of how a copy constructor indicates the object being copied.

&gt; &gt; +    if (!t)
&gt; &gt; +        return jsNaN(exec);
&gt; 
&gt; This doesn&apos;t look right to me and appears to be change in behavior. In other
&gt; similar places, it does this:
&gt;          JSValue result = jsNaN(exec);
&gt;          thisDateObj-&gt;setInternalValue(result);
&gt;          return result;

No change in behavior. If gregorianDateTime returns 0, it indicates that the object&apos;s internal value is already NaN, so there&apos;s no need to set it to NaN. The new code is the same, just less verbose.

&gt; &gt; @@ -857,26 +860,27 @@ static JSValue setNewValueFromDateArgs(E
&gt; &gt; +    if (numArgsToUse == 3 &amp;&amp; isnan(milli)) {
&gt; &gt; -        // Based on ECMA 262 15.9.5.40 - .41 (set[UTC]FullYear)
&gt; &gt; -        // the time must be reset to +0 if it is NaN. 
&gt; 
&gt; You&apos;re removing this comment. Do you think it is no longer valuable?

The original KJS developers had a habit of commenting most lines of code with the section of the ECMA spec that pertained to them. We&apos;ve been moving away from that style, since it just clutters the code. 

&gt; &gt; +    const GregorianDateTime* t = thisDateObj-&gt;gregorianDateTime(exec, inputIsUTC);
&gt; &gt; +    if (!t)
&gt; &gt; +        return jsNaN(exec);
&gt; 
&gt; This doesn&apos;t look right to me and appears to be change in behavior. In other
&gt; similar places, it does this:
&gt;          JSValue result = jsNaN(exec);
&gt;          thisDateObj-&gt;setInternalValue(result);
&gt;          return result;

Same as above.

I&apos;ll post a new patch with the fixes in place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159445</commentid>
    <comment_count>3</comment_count>
      <attachid>42235</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2009-10-30 14:28:59 -0700</bug_when>
    <thetext>Created attachment 42235
patch2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159463</commentid>
    <comment_count>4</comment_count>
      <attachid>42235</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-10-30 14:46:09 -0700</bug_when>
    <thetext>Comment on attachment 42235
patch2

r=me

Generally we should never be typing &quot;WTF::&quot; anywhere except for the &quot;using WTF::&lt;name&gt;&quot; in the WTF headers. It looks like we’re not following that guideline (created by Maciej) in the code you’re modifying or the code you’re adding.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159476</commentid>
    <comment_count>5</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2009-10-30 15:23:54 -0700</bug_when>
    <thetext>Committed revision 50359 with some WTF&apos;s removed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42168</attachid>
            <date>2009-10-29 18:56:19 -0700</date>
            <delta_ts>2009-10-30 14:28:59 -0700</delta_ts>
            <desc>patch</desc>
            <filename>ro.txt</filename>
            <type>text/plain</type>
            <size>23080</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDUwMjkwKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDQgQEAKKzIwMDktMTAtMjkgIEdlb2ZmcmV5
IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBVc2UgcG9pbnRlcnMgaW5zdGVhZCBvZiBjb3BpZXMgdG8gcGFz
cyBHcmVnb3JpYW5EYXRlVGltZSBvYmplY3RzIGFyb3VuZC4KKyAgICAgICAgCisgICAgICAgIFN1
blNwaWRlciByZXBvcnRzIGEgc2hvY2tpbmcgNC41JSBzcGVlZHVwIG9uIGRhdGUtZm9ybWF0LXhw
YXJiLCBhbmQgMS4zJQorICAgICAgICBzcGVlZHVwIG9uIGRhdGUtZm9ybWF0LXRvZnRlLgorCisg
ICAgICAgICogcnVudGltZS9EYXRlSW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpEYXRlSW5z
dGFuY2U6OmdyZWdvcmlhbkRhdGVUaW1lKToKKyAgICAgICAgKiBydW50aW1lL0RhdGVJbnN0YW5j
ZS5oOgorICAgICAgICAqIHJ1bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6
OmZvcm1hdExvY2FsZURhdGUpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jVG9TdHJpbmcp
OgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jVG9VVENTdHJpbmcpOgorICAgICAgICAoSlND
OjpkYXRlUHJvdG9GdW5jVG9JU09TdHJpbmcpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5j
VG9EYXRlU3RyaW5nKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1RvVGltZVN0cmluZyk6
CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRGdWxsWWVhcik6CisgICAgICAgIChKU0M6
OmRhdGVQcm90b0Z1bmNHZXRVVENGdWxsWWVhcik6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1
bmNUb0dNVFN0cmluZyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRNb250aCk6Cisg
ICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRVVENNb250aCk6CisgICAgICAgIChKU0M6OmRh
dGVQcm90b0Z1bmNHZXREYXRlKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY0dldFVUQ0Rh
dGUpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0RGF5KToKKyAgICAgICAgKEpTQzo6
ZGF0ZVByb3RvRnVuY0dldFVUQ0RheSk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRI
b3Vycyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRVVENIb3Vycyk6CisgICAgICAg
IChKU0M6OmRhdGVQcm90b0Z1bmNHZXRNaW51dGVzKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3Rv
RnVuY0dldFVUQ01pbnV0ZXMpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0U2Vjb25k
cyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRVVENTZWNvbmRzKToKKyAgICAgICAg
KEpTQzo6ZGF0ZVByb3RvRnVuY0dldFRpbWV6b25lT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6c2V0
TmV3VmFsdWVGcm9tVGltZUFyZ3MpOgorICAgICAgICAoSlNDOjpzZXROZXdWYWx1ZUZyb21EYXRl
QXJncyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNTZXRZZWFyKToKKyAgICAgICAgKEpT
Qzo6ZGF0ZVByb3RvRnVuY0dldFllYXIpOiBSZW5hbWVkIGdldEdyZWdvcmlhbkRhdGVUaW1lIHRv
IGdyZWdvcmlhbkRhdGVUaW1lLAorICAgICAgICBzaW5jZSBpdCBubyBsb25nZXIgaGFzIGFuIG91
dCBwYXJhbWV0ZXIuIFVzZXMgTlVMTCB0byBpbmRpY2F0ZSBpbnZhbGlkIGRhdGVzLgorCiAyMDA5
LTEwLTI5ICBHYWJvciBMb2tpICA8bG9raUBpbmYudS1zemVnZWQuaHU+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgR2F2aW4gQmFycmFjbG91Z2guCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0RhdGVJbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9E
YXRlSW5zdGFuY2UuY3BwCShyZXZpc2lvbiA1MDI5MCkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRGF0ZUluc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTEgKzQ2LDExIEBAIERh
dGVJbnN0YW5jZTo6RGF0ZUluc3RhbmNlKEV4ZWNTdGF0ZSogZXgKICAgICBzZXRJbnRlcm5hbFZh
bHVlKGpzTnVtYmVyKGV4ZWMsIHRpbWVDbGlwKHRpbWUpKSk7CiB9CiAKLWJvb2wgRGF0ZUluc3Rh
bmNlOjpnZXRHcmVnb3JpYW5EYXRlVGltZShFeGVjU3RhdGUqIGV4ZWMsIGJvb2wgb3V0cHV0SXNV
VEMsIEdyZWdvcmlhbkRhdGVUaW1lJiB0KSBjb25zdAorY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUq
IERhdGVJbnN0YW5jZTo6Z3JlZ29yaWFuRGF0ZVRpbWUoRXhlY1N0YXRlKiBleGVjLCBib29sIG91
dHB1dElzVVRDKSBjb25zdAogewogICAgIGRvdWJsZSBtaWxsaSA9IGludGVybmFsTnVtYmVyKCk7
CiAgICAgaWYgKGlzbmFuKG1pbGxpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBy
ZXR1cm4gMDsKIAogICAgIGlmICghbV9kYXRhKQogICAgICAgICBtX2RhdGEgPSBleGVjLT5nbG9i
YWxEYXRhKCkuZGF0ZUluc3RhbmNlQ2FjaGUuYWRkKG1pbGxpKTsKQEAgLTYwLDE2ICs2MCwxNCBA
QCBib29sIERhdGVJbnN0YW5jZTo6Z2V0R3JlZ29yaWFuRGF0ZVRpbWUoCiAgICAgICAgICAgICBX
VEY6Om1zVG9HcmVnb3JpYW5EYXRlVGltZShpbnRlcm5hbE51bWJlcigpLCB0cnVlLCBtX2RhdGEt
Pm1fY2FjaGVkR3JlZ29yaWFuRGF0ZVRpbWVVVEMpOwogICAgICAgICAgICAgbV9kYXRhLT5tX2dy
ZWdvcmlhbkRhdGVUaW1lVVRDQ2FjaGVkRm9yTVMgPSBtaWxsaTsKICAgICAgICAgfQotICAgICAg
ICB0LmNvcHlGcm9tKG1fZGF0YS0+bV9jYWNoZWRHcmVnb3JpYW5EYXRlVGltZVVUQyk7CisgICAg
ICAgIHJldHVybiAmbV9kYXRhLT5tX2NhY2hlZEdyZWdvcmlhbkRhdGVUaW1lVVRDOwogICAgIH0g
ZWxzZSB7CiAgICAgICAgIGlmIChtX2RhdGEtPm1fZ3JlZ29yaWFuRGF0ZVRpbWVDYWNoZWRGb3JN
UyAhPSBtaWxsaSkgewogICAgICAgICAgICAgV1RGOjptc1RvR3JlZ29yaWFuRGF0ZVRpbWUoaW50
ZXJuYWxOdW1iZXIoKSwgZmFsc2UsIG1fZGF0YS0+bV9jYWNoZWRHcmVnb3JpYW5EYXRlVGltZSk7
CiAgICAgICAgICAgICBtX2RhdGEtPm1fZ3JlZ29yaWFuRGF0ZVRpbWVDYWNoZWRGb3JNUyA9IG1p
bGxpOwogICAgICAgICB9Ci0gICAgICAgIHQuY29weUZyb20obV9kYXRhLT5tX2NhY2hlZEdyZWdv
cmlhbkRhdGVUaW1lKTsKKyAgICAgICAgcmV0dXJuICZtX2RhdGEtPm1fY2FjaGVkR3JlZ29yaWFu
RGF0ZVRpbWU7CiAgICAgfQotCi0gICAgcmV0dXJuIHRydWU7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlSW5zdGFuY2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVJbnN0YW5jZS5oCShyZXZpc2lvbiA1
MDI5MCkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUluc3RhbmNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGlj
IEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIGluZm87CiAKLSAgICAgICAgYm9vbCBnZXRH
cmVnb3JpYW5EYXRlVGltZShFeGVjU3RhdGUqLCBib29sIG91dHB1dElzVVRDLCBXVEY6OkdyZWdv
cmlhbkRhdGVUaW1lJikgY29uc3Q7CisgICAgICAgIGNvbnN0IFdURjo6R3JlZ29yaWFuRGF0ZVRp
bWUqIGdyZWdvcmlhbkRhdGVUaW1lKEV4ZWNTdGF0ZSosIGJvb2wgb3V0cHV0SXNVVEMpIGNvbnN0
OwogCiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJl
KEpTVmFsdWUgcHJvdG90eXBlKQogICAgICAgICB7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0RhdGVQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRGF0ZVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDUwMjkwKQorKysgSmF2YVNjcmlwdENvcmUv
cnVudGltZS9EYXRlUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUzLDkgKzI1Myw5
IEBAIHN0YXRpYyBKU0NlbGwqIGZvcm1hdExvY2FsZURhdGUoRXhlY1N0YXQKIAogc3RhdGljIEpT
Q2VsbCogZm9ybWF0TG9jYWxlRGF0ZShFeGVjU3RhdGUqIGV4ZWMsIERhdGVJbnN0YW5jZSogZGF0
ZU9iamVjdCwgZG91YmxlLCBMb2NhbGVEYXRlVGltZUZvcm1hdCBmb3JtYXQsIGNvbnN0IEFyZ0xp
c3QmKQogewotICAgIEdyZWdvcmlhbkRhdGVUaW1lIGdyZWdvcmlhbkRhdGVUaW1lOwogICAgIGNv
bnN0IGJvb2wgb3V0cHV0SXNVVEMgPSBmYWxzZTsKLSAgICBpZiAoIWRhdGVPYmplY3QtPmdldEdy
ZWdvcmlhbkRhdGVUaW1lKGV4ZWMsIG91dHB1dElzVVRDLCBncmVnb3JpYW5EYXRlVGltZSkpCisg
ICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gZGF0ZU9iamVj
dC0+Z3JlZ29yaWFuRGF0ZVRpbWUoZXhlYywgb3V0cHV0SXNVVEMpOworICAgIGlmICghZ3JlZ29y
aWFuRGF0ZVRpbWUpCiAgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgIklu
dmFsaWQgRGF0ZSIpOwogICAgIHJldHVybiBmb3JtYXRMb2NhbGVEYXRlKGV4ZWMsIGdyZWdvcmlh
bkRhdGVUaW1lLCBmb3JtYXQpOwogfQpAQCAtNDI0LDEwICs0MjQsMTAgQEAgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb1N0cgogCiAgICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0
ZU9iaiA9IGFzRGF0ZUluc3RhbmNlKHRoaXNWYWx1ZSk7IAogCi0gICAgR3JlZ29yaWFuRGF0ZVRp
bWUgdDsKLSAgICBpZiAoIXRoaXNEYXRlT2JqLT5nZXRHcmVnb3JpYW5EYXRlVGltZShleGVjLCBv
dXRwdXRJc1VUQywgdCkpCisgICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRh
dGVUaW1lID0gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lKGV4ZWMsIG91dHB1dElzVVRD
KTsKKyAgICBpZiAoIWdyZWdvcmlhbkRhdGVUaW1lKQogICAgICAgICByZXR1cm4ganNOb250cml2
aWFsU3RyaW5nKGV4ZWMsICJJbnZhbGlkIERhdGUiKTsKLSAgICByZXR1cm4ganNOb250cml2aWFs
U3RyaW5nKGV4ZWMsIGZvcm1hdERhdGUodCkgKyAiICIgKyBmb3JtYXRUaW1lKHQsIG91dHB1dElz
VVRDKSk7CisgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBmb3JtYXREYXRlKCpn
cmVnb3JpYW5EYXRlVGltZSkgKyAiICIgKyBmb3JtYXRUaW1lKCpncmVnb3JpYW5EYXRlVGltZSwg
b3V0cHV0SXNVVEMpKTsKIH0KIAogSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNU
b1VUQ1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmKQpAQCAtNDM5LDEwICs0MzksMTAgQEAgSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGRhdGVQcm90b0Z1bmNUb1VUQwogCiAgICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9
IGFzRGF0ZUluc3RhbmNlKHRoaXNWYWx1ZSk7IAogCi0gICAgR3JlZ29yaWFuRGF0ZVRpbWUgdDsK
LSAgICBpZiAoIXRoaXNEYXRlT2JqLT5nZXRHcmVnb3JpYW5EYXRlVGltZShleGVjLCBvdXRwdXRJ
c1VUQywgdCkpCisgICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1l
ID0gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lKGV4ZWMsIG91dHB1dElzVVRDKTsKKyAg
ICBpZiAoIWdyZWdvcmlhbkRhdGVUaW1lKQogICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3Ry
aW5nKGV4ZWMsICJJbnZhbGlkIERhdGUiKTsKLSAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5n
KGV4ZWMsIGZvcm1hdERhdGVVVENWYXJpYW50KHQpICsgIiAiICsgZm9ybWF0VGltZSh0LCBvdXRw
dXRJc1VUQykpOworICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgZm9ybWF0RGF0
ZVVUQ1ZhcmlhbnQoKmdyZWdvcmlhbkRhdGVUaW1lKSArICIgIiArIGZvcm1hdFRpbWUoKmdyZWdv
cmlhbkRhdGVUaW1lLCBvdXRwdXRJc1VUQykpOwogfQogCiBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZGF0ZVByb3RvRnVuY1RvSVNPU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1Zh
bHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCkBAIC00NTQsMTMgKzQ1NCwxMyBAQCBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvSVNPCiAgICAgCiAgICAgRGF0ZUluc3Rh
bmNlKiB0aGlzRGF0ZU9iaiA9IGFzRGF0ZUluc3RhbmNlKHRoaXNWYWx1ZSk7IAogICAgIAotICAg
IEdyZWdvcmlhbkRhdGVUaW1lIHQ7Ci0gICAgaWYgKCF0aGlzRGF0ZU9iai0+Z2V0R3JlZ29yaWFu
RGF0ZVRpbWUoZXhlYywgb3V0cHV0SXNVVEMsIHQpKQorICAgIGNvbnN0IEdyZWdvcmlhbkRhdGVU
aW1lKiB0ID0gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lKGV4ZWMsIG91dHB1dElzVVRD
KTsKKyAgICBpZiAoIXQpCiAgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywg
IkludmFsaWQgRGF0ZSIpOwogICAgIC8vIE1heGltdW0gYW1vdW50IG9mIHNwYWNlIHdlIG5lZWQg
aW4gYnVmZmVyOiA2IChtYXguIGRpZ2l0cyBpbiB5ZWFyKSArIDIgKiA1ICgyIGNoYXJhY3RlcnMg
ZWFjaCBmb3IgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQpICsgNCAoLiArIDMgZGln
aXRzIGZvciBtaWxsaXNlY29uZHMpCiAgICAgLy8gNiBmb3IgZm9ybWF0dGluZyBhbmQgb25lIGZv
ciBudWxsIHRlcm1pbmF0aW9uID0gMjcuICBXZSBhZGQgb25lIGV4dHJhIGNoYXJhY3RlciB0byBh
bGxvdyB1cyB0byBmb3JjZSBudWxsIHRlcm1pbmF0aW9uLgogICAgIGNoYXIgYnVmZmVyWzI4XTsK
LSAgICBzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpIC0gMSwgIiUwNGQtJTAyZC0lMDJk
VCUwMmQ6JTAyZDolMDJkLiUwM2RaIiwgMTkwMCArIHQueWVhciwgdC5tb250aCArIDEsIHQubW9u
dGhEYXksIHQuaG91ciwgdC5taW51dGUsIHQuc2Vjb25kLCBzdGF0aWNfY2FzdDxpbnQ+KGZtb2Qo
dGhpc0RhdGVPYmotPmludGVybmFsTnVtYmVyKCksIDEwMDApKSk7CisgICAgc25wcmludGYoYnVm
ZmVyLCBzaXplb2YoYnVmZmVyKSAtIDEsICIlMDRkLSUwMmQtJTAyZFQlMDJkOiUwMmQ6JTAyZC4l
MDNkWiIsIDE5MDAgKyB0LT55ZWFyLCB0LT5tb250aCArIDEsIHQtPm1vbnRoRGF5LCB0LT5ob3Vy
LCB0LT5taW51dGUsIHQtPnNlY29uZCwgc3RhdGljX2Nhc3Q8aW50PihmbW9kKHRoaXNEYXRlT2Jq
LT5pbnRlcm5hbE51bWJlcigpLCAxMDAwKSkpOwogICAgIGJ1ZmZlcltzaXplb2YoYnVmZmVyKSAt
IDFdID0gMDsKICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsIGJ1ZmZlcik7CiB9
CkBAIC00NzQsMTAgKzQ3NCwxMCBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVu
Y1RvRGF0CiAKICAgICBEYXRlSW5zdGFuY2UqIHRoaXNEYXRlT2JqID0gYXNEYXRlSW5zdGFuY2Uo
dGhpc1ZhbHVlKTsgCiAKLSAgICBHcmVnb3JpYW5EYXRlVGltZSB0OwotICAgIGlmICghdGhpc0Rh
dGVPYmotPmdldEdyZWdvcmlhbkRhdGVUaW1lKGV4ZWMsIG91dHB1dElzVVRDLCB0KSkKKyAgICBj
b25zdCBHcmVnb3JpYW5EYXRlVGltZSogZ3JlZ29yaWFuRGF0ZVRpbWUgPSB0aGlzRGF0ZU9iai0+
Z3JlZ29yaWFuRGF0ZVRpbWUoZXhlYywgb3V0cHV0SXNVVEMpOworICAgIGlmICghZ3JlZ29yaWFu
RGF0ZVRpbWUpCiAgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgIkludmFs
aWQgRGF0ZSIpOwotICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgZm9ybWF0RGF0
ZSh0KSk7CisgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBmb3JtYXREYXRlKCpn
cmVnb3JpYW5EYXRlVGltZSkpOwogfQogCiBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3Rv
RnVuY1RvVGltZVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlz
VmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQpAQCAtNDg5LDEwICs0ODksMTAgQEAgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb1RpbQogCiAgICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0
ZU9iaiA9IGFzRGF0ZUluc3RhbmNlKHRoaXNWYWx1ZSk7IAogCi0gICAgR3JlZ29yaWFuRGF0ZVRp
bWUgdDsKLSAgICBpZiAoIXRoaXNEYXRlT2JqLT5nZXRHcmVnb3JpYW5EYXRlVGltZShleGVjLCBv
dXRwdXRJc1VUQywgdCkpCisgICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRh
dGVUaW1lID0gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lKGV4ZWMsIG91dHB1dElzVVRD
KTsKKyAgICBpZiAoIWdyZWdvcmlhbkRhdGVUaW1lKQogICAgICAgICByZXR1cm4ganNOb250cml2
aWFsU3RyaW5nKGV4ZWMsICJJbnZhbGlkIERhdGUiKTsKLSAgICByZXR1cm4ganNOb250cml2aWFs
U3RyaW5nKGV4ZWMsIGZvcm1hdFRpbWUodCwgb3V0cHV0SXNVVEMpKTsKKyAgICByZXR1cm4ganNO
b250cml2aWFsU3RyaW5nKGV4ZWMsIGZvcm1hdFRpbWUoKmdyZWdvcmlhbkRhdGVUaW1lLCBvdXRw
dXRJc1VUQykpOwogfQogCiBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvTG9j
YWxlU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYgYXJncykKQEAgLTUzOSwxMCArNTM5LDEwIEBAIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0RnUKIAogICAgIERhdGVJbnN0YW5jZSogdGhpc0RhdGVP
YmogPSBhc0RhdGVJbnN0YW5jZSh0aGlzVmFsdWUpOyAKIAotICAgIEdyZWdvcmlhbkRhdGVUaW1l
IHQ7Ci0gICAgaWYgKCF0aGlzRGF0ZU9iai0+Z2V0R3JlZ29yaWFuRGF0ZVRpbWUoZXhlYywgb3V0
cHV0SXNVVEMsIHQpKQorICAgIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBncmVnb3JpYW5EYXRl
VGltZSA9IHRoaXNEYXRlT2JqLT5ncmVnb3JpYW5EYXRlVGltZShleGVjLCBvdXRwdXRJc1VUQyk7
CisgICAgaWYgKCFncmVnb3JpYW5EYXRlVGltZSkKICAgICAgICAgcmV0dXJuIGpzTmFOKGV4ZWMp
OwotICAgIHJldHVybiBqc051bWJlcihleGVjLCAxOTAwICsgdC55ZWFyKTsKKyAgICByZXR1cm4g
anNOdW1iZXIoZXhlYywgMTkwMCArIGdyZWdvcmlhbkRhdGVUaW1lLT55ZWFyKTsKIH0KIAogSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENGdWxsWWVhcihFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQpAQCAt
NTU0LDEwICs1NTQsMTAgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRV
VAogCiAgICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9IGFzRGF0ZUluc3RhbmNlKHRoaXNW
YWx1ZSk7IAogCi0gICAgR3JlZ29yaWFuRGF0ZVRpbWUgdDsKLSAgICBpZiAoIXRoaXNEYXRlT2Jq
LT5nZXRHcmVnb3JpYW5EYXRlVGltZShleGVjLCBvdXRwdXRJc1VUQywgdCkpCisgICAgY29uc3Qg
R3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gdGhpc0RhdGVPYmotPmdyZWdv
cmlhbkRhdGVUaW1lKGV4ZWMsIG91dHB1dElzVVRDKTsKKyAgICBpZiAoIWdyZWdvcmlhbkRhdGVU
aW1lKQogICAgICAgICByZXR1cm4ganNOYU4oZXhlYyk7Ci0gICAgcmV0dXJuIGpzTnVtYmVyKGV4
ZWMsIDE5MDAgKyB0LnllYXIpOworICAgIHJldHVybiBqc051bWJlcihleGVjLCAxOTAwICsgZ3Jl
Z29yaWFuRGF0ZVRpbWUtPnllYXIpOwogfQogCiBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVBy
b3RvRnVuY1RvR01UU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRo
aXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCkBAIC01NjksMTAgKzU2OSwxMCBAQCBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvR01UCiAKICAgICBEYXRlSW5zdGFuY2UqIHRoaXNE
YXRlT2JqID0gYXNEYXRlSW5zdGFuY2UodGhpc1ZhbHVlKTsgCiAKLSAgICBHcmVnb3JpYW5EYXRl
VGltZSB0OwotICAgIGlmICghdGhpc0RhdGVPYmotPmdldEdyZWdvcmlhbkRhdGVUaW1lKGV4ZWMs
IG91dHB1dElzVVRDLCB0KSkKKyAgICBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSogZ3JlZ29yaWFu
RGF0ZVRpbWUgPSB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWUoZXhlYywgb3V0cHV0SXNV
VEMpOworICAgIGlmICghZ3JlZ29yaWFuRGF0ZVRpbWUpCiAgICAgICAgIHJldHVybiBqc05vbnRy
aXZpYWxTdHJpbmcoZXhlYywgIkludmFsaWQgRGF0ZSIpOwotICAgIHJldHVybiBqc05vbnRyaXZp
YWxTdHJpbmcoZXhlYywgZm9ybWF0RGF0ZVVUQ1ZhcmlhbnQodCkgKyAiICIgKyBmb3JtYXRUaW1l
KHQsIG91dHB1dElzVVRDKSk7CisgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBm
b3JtYXREYXRlVVRDVmFyaWFudCgqZ3JlZ29yaWFuRGF0ZVRpbWUpICsgIiAiICsgZm9ybWF0VGlt
ZSgqZ3JlZ29yaWFuRGF0ZVRpbWUsIG91dHB1dElzVVRDKSk7CiB9CiAKIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0TW9udGgoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKQEAgLTU4NCwxMCArNTg0LDEwIEBA
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0TW8KIAogICAgIERhdGVJbnN0
YW5jZSogdGhpc0RhdGVPYmogPSBhc0RhdGVJbnN0YW5jZSh0aGlzVmFsdWUpOyAKIAotICAgIEdy
ZWdvcmlhbkRhdGVUaW1lIHQ7Ci0gICAgaWYgKCF0aGlzRGF0ZU9iai0+Z2V0R3JlZ29yaWFuRGF0
ZVRpbWUoZXhlYywgb3V0cHV0SXNVVEMsIHQpKQorICAgIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1l
KiBncmVnb3JpYW5EYXRlVGltZSA9IHRoaXNEYXRlT2JqLT5ncmVnb3JpYW5EYXRlVGltZShleGVj
LCBvdXRwdXRJc1VUQyk7CisgICAgaWYgKCFncmVnb3JpYW5EYXRlVGltZSkKICAgICAgICAgcmV0
dXJuIGpzTmFOKGV4ZWMpOwotICAgIHJldHVybiBqc051bWJlcihleGVjLCB0Lm1vbnRoKTsKKyAg
ICByZXR1cm4ganNOdW1iZXIoZXhlYywgZ3JlZ29yaWFuRGF0ZVRpbWUtPm1vbnRoKTsKIH0KIAog
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENNb250aChFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQpAQCAt
NTk5LDEwICs1OTksMTAgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRV
VAogCiAgICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9IGFzRGF0ZUluc3RhbmNlKHRoaXNW
YWx1ZSk7IAogCi0gICAgR3JlZ29yaWFuRGF0ZVRpbWUgdDsKLSAgICBpZiAoIXRoaXNEYXRlT2Jq
LT5nZXRHcmVnb3JpYW5EYXRlVGltZShleGVjLCBvdXRwdXRJc1VUQywgdCkpCisgICAgY29uc3Qg
R3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gdGhpc0RhdGVPYmotPmdyZWdv
cmlhbkRhdGVUaW1lKGV4ZWMsIG91dHB1dElzVVRDKTsKKyAgICBpZiAoIWdyZWdvcmlhbkRhdGVU
aW1lKQogICAgICAgICByZXR1cm4ganNOYU4oZXhlYyk7Ci0gICAgcmV0dXJuIGpzTnVtYmVyKGV4
ZWMsIHQubW9udGgpOworICAgIHJldHVybiBqc051bWJlcihleGVjLCBncmVnb3JpYW5EYXRlVGlt
ZS0+bW9udGgpOwogfQogCiBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldERh
dGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBB
cmdMaXN0JikKQEAgLTYxNCwxMCArNjE0LDEwIEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRl
UHJvdG9GdW5jR2V0RGEKIAogICAgIERhdGVJbnN0YW5jZSogdGhpc0RhdGVPYmogPSBhc0RhdGVJ
bnN0YW5jZSh0aGlzVmFsdWUpOyAKIAotICAgIEdyZWdvcmlhbkRhdGVUaW1lIHQ7Ci0gICAgaWYg
KCF0aGlzRGF0ZU9iai0+Z2V0R3JlZ29yaWFuRGF0ZVRpbWUoZXhlYywgb3V0cHV0SXNVVEMsIHQp
KQorICAgIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBncmVnb3JpYW5EYXRlVGltZSA9IHRoaXNE
YXRlT2JqLT5ncmVnb3JpYW5EYXRlVGltZShleGVjLCBvdXRwdXRJc1VUQyk7CisgICAgaWYgKCFn
cmVnb3JpYW5EYXRlVGltZSkKICAgICAgICAgcmV0dXJuIGpzTmFOKGV4ZWMpOwotICAgIHJldHVy
biBqc051bWJlcihleGVjLCB0Lm1vbnRoRGF5KTsKKyAgICByZXR1cm4ganNOdW1iZXIoZXhlYywg
Z3JlZ29yaWFuRGF0ZVRpbWUtPm1vbnRoRGF5KTsKIH0KIAogSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGRhdGVQcm90b0Z1bmNHZXRVVENEYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1Zh
bHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCkBAIC02MjksMTAgKzYyOSwxMCBAQCBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFVUCiAKICAgICBEYXRlSW5zdGFuY2Uq
IHRoaXNEYXRlT2JqID0gYXNEYXRlSW5zdGFuY2UodGhpc1ZhbHVlKTsgCiAKLSAgICBHcmVnb3Jp
YW5EYXRlVGltZSB0OwotICAgIGlmICghdGhpc0RhdGVPYmotPmdldEdyZWdvcmlhbkRhdGVUaW1l
KGV4ZWMsIG91dHB1dElzVVRDLCB0KSkKKyAgICBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSogZ3Jl
Z29yaWFuRGF0ZVRpbWUgPSB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWUoZXhlYywgb3V0
cHV0SXNVVEMpOworICAgIGlmICghZ3JlZ29yaWFuRGF0ZVRpbWUpCiAgICAgICAgIHJldHVybiBq
c05hTihleGVjKTsKLSAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgdC5tb250aERheSk7CisgICAg
cmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGdyZWdvcmlhbkRhdGVUaW1lLT5tb250aERheSk7CiB9CiAK
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0RGF5KEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCkBAIC02NDQs
MTAgKzY0NCwxMCBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldERhCiAK
ICAgICBEYXRlSW5zdGFuY2UqIHRoaXNEYXRlT2JqID0gYXNEYXRlSW5zdGFuY2UodGhpc1ZhbHVl
KTsgCiAKLSAgICBHcmVnb3JpYW5EYXRlVGltZSB0OwotICAgIGlmICghdGhpc0RhdGVPYmotPmdl
dEdyZWdvcmlhbkRhdGVUaW1lKGV4ZWMsIG91dHB1dElzVVRDLCB0KSkKKyAgICBjb25zdCBHcmVn
b3JpYW5EYXRlVGltZSogZ3JlZ29yaWFuRGF0ZVRpbWUgPSB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFu
RGF0ZVRpbWUoZXhlYywgb3V0cHV0SXNVVEMpOworICAgIGlmICghZ3JlZ29yaWFuRGF0ZVRpbWUp
CiAgICAgICAgIHJldHVybiBqc05hTihleGVjKTsKLSAgICByZXR1cm4ganNOdW1iZXIoZXhlYywg
dC53ZWVrRGF5KTsKKyAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgZ3JlZ29yaWFuRGF0ZVRpbWUt
PndlZWtEYXkpOwogfQogCiBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFVU
Q0RheShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0
IEFyZ0xpc3QmKQpAQCAtNjU5LDEwICs2NTksMTAgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRh
dGVQcm90b0Z1bmNHZXRVVAogCiAgICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9IGFzRGF0
ZUluc3RhbmNlKHRoaXNWYWx1ZSk7IAogCi0gICAgR3JlZ29yaWFuRGF0ZVRpbWUgdDsKLSAgICBp
ZiAoIXRoaXNEYXRlT2JqLT5nZXRHcmVnb3JpYW5EYXRlVGltZShleGVjLCBvdXRwdXRJc1VUQywg
dCkpCisgICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gdGhp
c0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lKGV4ZWMsIG91dHB1dElzVVRDKTsKKyAgICBpZiAo
IWdyZWdvcmlhbkRhdGVUaW1lKQogICAgICAgICByZXR1cm4ganNOYU4oZXhlYyk7Ci0gICAgcmV0
dXJuIGpzTnVtYmVyKGV4ZWMsIHQud2Vla0RheSk7CisgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMs
IGdyZWdvcmlhbkRhdGVUaW1lLT53ZWVrRGF5KTsKIH0KIAogSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGRhdGVQcm90b0Z1bmNHZXRIb3VycyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1
ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQpAQCAtNjc0LDEwICs2NzQsMTAgQEAgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRIbwogCiAgICAgRGF0ZUluc3RhbmNlKiB0
aGlzRGF0ZU9iaiA9IGFzRGF0ZUluc3RhbmNlKHRoaXNWYWx1ZSk7IAogCi0gICAgR3JlZ29yaWFu
RGF0ZVRpbWUgdDsKLSAgICBpZiAoIXRoaXNEYXRlT2JqLT5nZXRHcmVnb3JpYW5EYXRlVGltZShl
eGVjLCBvdXRwdXRJc1VUQywgdCkpCisgICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdv
cmlhbkRhdGVUaW1lID0gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lKGV4ZWMsIG91dHB1
dElzVVRDKTsKKyAgICBpZiAoIWdyZWdvcmlhbkRhdGVUaW1lKQogICAgICAgICByZXR1cm4ganNO
YU4oZXhlYyk7Ci0gICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHQuaG91cik7CisgICAgcmV0dXJu
IGpzTnVtYmVyKGV4ZWMsIGdyZWdvcmlhbkRhdGVUaW1lLT5ob3VyKTsKIH0KIAogSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENIb3VycyhFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQpAQCAtNjg5LDEwICs2
ODksMTAgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVAogCiAgICAg
RGF0ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9IGFzRGF0ZUluc3RhbmNlKHRoaXNWYWx1ZSk7IAog
Ci0gICAgR3JlZ29yaWFuRGF0ZVRpbWUgdDsKLSAgICBpZiAoIXRoaXNEYXRlT2JqLT5nZXRHcmVn
b3JpYW5EYXRlVGltZShleGVjLCBvdXRwdXRJc1VUQywgdCkpCisgICAgY29uc3QgR3JlZ29yaWFu
RGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVU
aW1lKGV4ZWMsIG91dHB1dElzVVRDKTsKKyAgICBpZiAoIWdyZWdvcmlhbkRhdGVUaW1lKQogICAg
ICAgICByZXR1cm4ganNOYU4oZXhlYyk7Ci0gICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHQuaG91
cik7CisgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGdyZWdvcmlhbkRhdGVUaW1lLT5ob3VyKTsK
IH0KIAogSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRNaW51dGVzKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYp
CkBAIC03MDQsMTAgKzcwNCwxMCBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVu
Y0dldE1pCiAKICAgICBEYXRlSW5zdGFuY2UqIHRoaXNEYXRlT2JqID0gYXNEYXRlSW5zdGFuY2Uo
dGhpc1ZhbHVlKTsgCiAKLSAgICBHcmVnb3JpYW5EYXRlVGltZSB0OwotICAgIGlmICghdGhpc0Rh
dGVPYmotPmdldEdyZWdvcmlhbkRhdGVUaW1lKGV4ZWMsIG91dHB1dElzVVRDLCB0KSkKKyAgICBj
b25zdCBHcmVnb3JpYW5EYXRlVGltZSogZ3JlZ29yaWFuRGF0ZVRpbWUgPSB0aGlzRGF0ZU9iai0+
Z3JlZ29yaWFuRGF0ZVRpbWUoZXhlYywgb3V0cHV0SXNVVEMpOworICAgIGlmICghZ3JlZ29yaWFu
RGF0ZVRpbWUpCiAgICAgICAgIHJldHVybiBqc05hTihleGVjKTsKLSAgICByZXR1cm4ganNOdW1i
ZXIoZXhlYywgdC5taW51dGUpOworICAgIHJldHVybiBqc051bWJlcihleGVjLCBncmVnb3JpYW5E
YXRlVGltZS0+bWludXRlKTsKIH0KIAogSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1
bmNHZXRVVENNaW51dGVzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYpCkBAIC03MTksMTAgKzcxOSwxMCBAQCBKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFVUCiAKICAgICBEYXRlSW5zdGFuY2UqIHRoaXNEYXRl
T2JqID0gYXNEYXRlSW5zdGFuY2UodGhpc1ZhbHVlKTsgCiAKLSAgICBHcmVnb3JpYW5EYXRlVGlt
ZSB0OwotICAgIGlmICghdGhpc0RhdGVPYmotPmdldEdyZWdvcmlhbkRhdGVUaW1lKGV4ZWMsIG91
dHB1dElzVVRDLCB0KSkKKyAgICBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSogZ3JlZ29yaWFuRGF0
ZVRpbWUgPSB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWUoZXhlYywgb3V0cHV0SXNVVEMp
OworICAgIGlmICghZ3JlZ29yaWFuRGF0ZVRpbWUpCiAgICAgICAgIHJldHVybiBqc05hTihleGVj
KTsKLSAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgdC5taW51dGUpOworICAgIHJldHVybiBqc051
bWJlcihleGVjLCBncmVnb3JpYW5EYXRlVGltZS0+bWludXRlKTsKIH0KIAogSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRTZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCkBAIC03MzQsMTAgKzczNCwx
MCBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFNlCiAKICAgICBEYXRl
SW5zdGFuY2UqIHRoaXNEYXRlT2JqID0gYXNEYXRlSW5zdGFuY2UodGhpc1ZhbHVlKTsgCiAKLSAg
ICBHcmVnb3JpYW5EYXRlVGltZSB0OwotICAgIGlmICghdGhpc0RhdGVPYmotPmdldEdyZWdvcmlh
bkRhdGVUaW1lKGV4ZWMsIG91dHB1dElzVVRDLCB0KSkKKyAgICBjb25zdCBHcmVnb3JpYW5EYXRl
VGltZSogZ3JlZ29yaWFuRGF0ZVRpbWUgPSB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWUo
ZXhlYywgb3V0cHV0SXNVVEMpOworICAgIGlmICghZ3JlZ29yaWFuRGF0ZVRpbWUpCiAgICAgICAg
IHJldHVybiBqc05hTihleGVjKTsKLSAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgdC5zZWNvbmQp
OworICAgIHJldHVybiBqc051bWJlcihleGVjLCBncmVnb3JpYW5EYXRlVGltZS0+c2Vjb25kKTsK
IH0KIAogSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENTZWNvbmRzKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlz
dCYpCkBAIC03NDksMTAgKzc0OSwxMCBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3Rv
RnVuY0dldFVUCiAKICAgICBEYXRlSW5zdGFuY2UqIHRoaXNEYXRlT2JqID0gYXNEYXRlSW5zdGFu
Y2UodGhpc1ZhbHVlKTsgCiAKLSAgICBHcmVnb3JpYW5EYXRlVGltZSB0OwotICAgIGlmICghdGhp
c0RhdGVPYmotPmdldEdyZWdvcmlhbkRhdGVUaW1lKGV4ZWMsIG91dHB1dElzVVRDLCB0KSkKKyAg
ICBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSogZ3JlZ29yaWFuRGF0ZVRpbWUgPSB0aGlzRGF0ZU9i
ai0+Z3JlZ29yaWFuRGF0ZVRpbWUoZXhlYywgb3V0cHV0SXNVVEMpOworICAgIGlmICghZ3JlZ29y
aWFuRGF0ZVRpbWUpCiAgICAgICAgIHJldHVybiBqc05hTihleGVjKTsKLSAgICByZXR1cm4ganNO
dW1iZXIoZXhlYywgdC5zZWNvbmQpOworICAgIHJldHVybiBqc051bWJlcihleGVjLCBncmVnb3Jp
YW5EYXRlVGltZS0+c2Vjb25kKTsKIH0KIAogSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90
b0Z1bmNHZXRNaWxsaVNlY29uZHMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUg
dGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKQEAgLTc5NCwxMCArNzk0LDEwIEBAIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VGkKIAogICAgIERhdGVJbnN0YW5jZSogdGhp
c0RhdGVPYmogPSBhc0RhdGVJbnN0YW5jZSh0aGlzVmFsdWUpOyAKIAotICAgIEdyZWdvcmlhbkRh
dGVUaW1lIHQ7Ci0gICAgaWYgKCF0aGlzRGF0ZU9iai0+Z2V0R3JlZ29yaWFuRGF0ZVRpbWUoZXhl
Yywgb3V0cHV0SXNVVEMsIHQpKQorICAgIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBncmVnb3Jp
YW5EYXRlVGltZSA9IHRoaXNEYXRlT2JqLT5ncmVnb3JpYW5EYXRlVGltZShleGVjLCBvdXRwdXRJ
c1VUQyk7CisgICAgaWYgKCFncmVnb3JpYW5EYXRlVGltZSkKICAgICAgICAgcmV0dXJuIGpzTmFO
KGV4ZWMpOwotICAgIHJldHVybiBqc051bWJlcihleGVjLCAtZ210b2Zmc2V0KHQpIC8gbWludXRl
c1BlckhvdXIpOworICAgIHJldHVybiBqc051bWJlcihleGVjLCAtZ3JlZ29yaWFuRGF0ZVRpbWUt
PnV0Y09mZnNldCAvIG1pbnV0ZXNQZXJIb3VyKTsKIH0KIAogSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGRhdGVQcm90b0Z1bmNTZXRUaW1lKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVl
IHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKQEAgLTgzMCwxNiArODMwLDE5IEBAIHN0
YXRpYyBKU1ZhbHVlIHNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKEUKICAgICBkb3VibGUgc2VjcyA9
IGZsb29yKG1pbGxpIC8gbXNQZXJTZWNvbmQpOwogICAgIGRvdWJsZSBtcyA9IG1pbGxpIC0gc2Vj
cyAqIG1zUGVyU2Vjb25kOwogCi0gICAgR3JlZ29yaWFuRGF0ZVRpbWUgdDsKLSAgICB0aGlzRGF0
ZU9iai0+Z2V0R3JlZ29yaWFuRGF0ZVRpbWUoZXhlYywgaW5wdXRJc1VUQywgdCk7CisgICAgY29u
c3QgR3JlZ29yaWFuRGF0ZVRpbWUqIHQgPSB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWUo
ZXhlYywgaW5wdXRJc1VUQyk7CisgICAgaWYgKCF0KQorICAgICAgICByZXR1cm4ganNOYU4oZXhl
Yyk7CiAKLSAgICBpZiAoIWZpbGxTdHJ1Y3R1cmVzVXNpbmdUaW1lQXJncyhleGVjLCBhcmdzLCBu
dW1BcmdzVG9Vc2UsICZtcywgJnQpKSB7CisgICAgR3JlZ29yaWFuRGF0ZVRpbWUgZ3JlZ29yaWFu
RGF0ZVRpbWU7CisgICAgZ3JlZ29yaWFuRGF0ZVRpbWUuY29weUZyb20oKnQpOworICAgIGlmICgh
ZmlsbFN0cnVjdHVyZXNVc2luZ1RpbWVBcmdzKGV4ZWMsIGFyZ3MsIG51bUFyZ3NUb1VzZSwgJm1z
LCAmZ3JlZ29yaWFuRGF0ZVRpbWUpKSB7CiAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOYU4o
ZXhlYyk7CiAgICAgICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKHJlc3VsdCk7CiAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfSAKICAgICAKLSAgICBKU1ZhbHVlIHJlc3VsdCA9
IGpzTnVtYmVyKGV4ZWMsIGdyZWdvcmlhbkRhdGVUaW1lVG9NUyh0LCBtcywgaW5wdXRJc1VUQykp
OworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoZXhlYywgZ3JlZ29yaWFuRGF0ZVRpbWVU
b01TKGdyZWdvcmlhbkRhdGVUaW1lLCBtcywgaW5wdXRJc1VUQykpOwogICAgIHRoaXNEYXRlT2Jq
LT5zZXRJbnRlcm5hbFZhbHVlKHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTg1
NywyNiArODYwLDI3IEBAIHN0YXRpYyBKU1ZhbHVlIHNldE5ld1ZhbHVlRnJvbURhdGVBcmdzKEUK
ICAgICB9ICAgICAgCiAgICAgCiAgICAgZG91YmxlIG1pbGxpID0gdGhpc0RhdGVPYmotPmludGVy
bmFsTnVtYmVyKCk7Ci0gICAgZG91YmxlIG1zID0gMDsKLQotICAgIEdyZWdvcmlhbkRhdGVUaW1l
IHQ7Ci0gICAgaWYgKG51bUFyZ3NUb1VzZSA9PSAzICYmIGlzbmFuKG1pbGxpKSkKLSAgICAgICAg
Ly8gQmFzZWQgb24gRUNNQSAyNjIgMTUuOS41LjQwIC0gLjQxIChzZXRbVVRDXUZ1bGxZZWFyKQot
ICAgICAgICAvLyB0aGUgdGltZSBtdXN0IGJlIHJlc2V0IHRvICswIGlmIGl0IGlzIE5hTi4gCi0g
ICAgICAgIFdURjo6bXNUb0dyZWdvcmlhbkRhdGVUaW1lKDAsIHRydWUsIHQpOwotICAgIGVsc2Ug
ewotICAgICAgICBkb3VibGUgc2VjcyA9IGZsb29yKG1pbGxpIC8gbXNQZXJTZWNvbmQpOwotICAg
ICAgICBtcyA9IG1pbGxpIC0gc2VjcyAqIG1zUGVyU2Vjb25kOwotICAgICAgICB0aGlzRGF0ZU9i
ai0+Z2V0R3JlZ29yaWFuRGF0ZVRpbWUoZXhlYywgaW5wdXRJc1VUQywgdCk7CisgICAgaWYgKG51
bUFyZ3NUb1VzZSA9PSAzICYmIGlzbmFuKG1pbGxpKSkgeworICAgICAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGpzTnVtYmVyKGV4ZWMsIDApOworICAgICAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxW
YWx1ZShyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KKworICAgIGNvbnN0
IEdyZWdvcmlhbkRhdGVUaW1lKiB0ID0gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lKGV4
ZWMsIGlucHV0SXNVVEMpOworICAgIGlmICghdCkKKyAgICAgICAgcmV0dXJuIGpzTmFOKGV4ZWMp
OworCisgICAgR3JlZ29yaWFuRGF0ZVRpbWUgZ3JlZ29yaWFuRGF0ZVRpbWU7CisgICAgZ3JlZ29y
aWFuRGF0ZVRpbWUuY29weUZyb20oKnQpOwogICAgIAotICAgIGlmICghZmlsbFN0cnVjdHVyZXNV
c2luZ0RhdGVBcmdzKGV4ZWMsIGFyZ3MsIG51bUFyZ3NUb1VzZSwgJm1zLCAmdCkpIHsKKyAgICBk
b3VibGUgbXMgPSBtaWxsaSAtIGZsb29yKG1pbGxpIC8gbXNQZXJTZWNvbmQpICogbXNQZXJTZWNv
bmQ7CisgICAgaWYgKCFmaWxsU3RydWN0dXJlc1VzaW5nRGF0ZUFyZ3MoZXhlYywgYXJncywgbnVt
QXJnc1RvVXNlLCAmbXMsICZncmVnb3JpYW5EYXRlVGltZSkpIHsKICAgICAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBqc05hTihleGVjKTsKICAgICAgICAgdGhpc0RhdGVPYmotPnNldEludGVybmFsVmFs
dWUocmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9IAogICAgICAgICAgICAK
LSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGV4ZWMsIGdyZWdvcmlhbkRhdGVUaW1lVG9N
Uyh0LCBtcywgaW5wdXRJc1VUQykpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoZXhl
YywgZ3JlZ29yaWFuRGF0ZVRpbWVUb01TKGdyZWdvcmlhbkRhdGVUaW1lLCBtcywgaW5wdXRJc1VU
QykpOwogICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKHJlc3VsdCk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KQEAgLTk4MiwxNSArOTg2LDE2IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBkYXRlUHJvdG9GdW5jU2V0WWUKICAgICBkb3VibGUgbWlsbGkgPSB0aGlzRGF0ZU9iai0+aW50
ZXJuYWxOdW1iZXIoKTsKICAgICBkb3VibGUgbXMgPSAwOwogCi0gICAgR3JlZ29yaWFuRGF0ZVRp
bWUgdDsKKyAgICBHcmVnb3JpYW5EYXRlVGltZSBncmVnb3JpYW5EYXRlVGltZTsKICAgICBpZiAo
aXNuYW4obWlsbGkpKQogICAgICAgICAvLyBCYXNlZCBvbiBFQ01BIDI2MiBCLjIuNSAoc2V0WWVh
cikKICAgICAgICAgLy8gdGhlIHRpbWUgbXVzdCBiZSByZXNldCB0byArMCBpZiBpdCBpcyBOYU4u
IAotICAgICAgICBXVEY6Om1zVG9HcmVnb3JpYW5EYXRlVGltZSgwLCB0cnVlLCB0KTsKKyAgICAg
ICAgV1RGOjptc1RvR3JlZ29yaWFuRGF0ZVRpbWUoMCwgdHJ1ZSwgZ3JlZ29yaWFuRGF0ZVRpbWUp
OwogICAgIGVsc2UgeyAgIAogICAgICAgICBkb3VibGUgc2VjcyA9IGZsb29yKG1pbGxpIC8gbXNQ
ZXJTZWNvbmQpOwogICAgICAgICBtcyA9IG1pbGxpIC0gc2VjcyAqIG1zUGVyU2Vjb25kOwotICAg
ICAgICB0aGlzRGF0ZU9iai0+Z2V0R3JlZ29yaWFuRGF0ZVRpbWUoZXhlYywgb3V0cHV0SXNVVEMs
IHQpOworICAgICAgICBpZiAoY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIHQgPSB0aGlzRGF0ZU9i
ai0+Z3JlZ29yaWFuRGF0ZVRpbWUoZXhlYywgb3V0cHV0SXNVVEMpKQorICAgICAgICAgICAgZ3Jl
Z29yaWFuRGF0ZVRpbWUuY29weUZyb20oKnQpOwogICAgIH0KICAgICAKICAgICBib29sIG9rID0g
dHJ1ZTsKQEAgLTEwMDEsOCArMTAwNiw4IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJv
dG9GdW5jU2V0WWUKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgICAgICAgICAK
LSAgICB0LnllYXIgPSAoeWVhciA+IDk5IHx8IHllYXIgPCAwKSA/IHllYXIgLSAxOTAwIDogeWVh
cjsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGV4ZWMsIGdyZWdvcmlhbkRhdGVUaW1l
VG9NUyh0LCBtcywgb3V0cHV0SXNVVEMpKTsKKyAgICBncmVnb3JpYW5EYXRlVGltZS55ZWFyID0g
KHllYXIgPiA5OSB8fCB5ZWFyIDwgMCkgPyB5ZWFyIC0gMTkwMCA6IHllYXI7CisgICAgSlNWYWx1
ZSByZXN1bHQgPSBqc051bWJlcihleGVjLCBncmVnb3JpYW5EYXRlVGltZVRvTVMoZ3JlZ29yaWFu
RGF0ZVRpbWUsIG1zLCBvdXRwdXRJc1VUQykpOwogICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5h
bFZhbHVlKHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTEwMTYsMTIgKzEwMjEs
MTIgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRZZQogCiAgICAgRGF0
ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9IGFzRGF0ZUluc3RhbmNlKHRoaXNWYWx1ZSk7IAogCi0g
ICAgR3JlZ29yaWFuRGF0ZVRpbWUgdDsKLSAgICBpZiAoIXRoaXNEYXRlT2JqLT5nZXRHcmVnb3Jp
YW5EYXRlVGltZShleGVjLCBvdXRwdXRJc1VUQywgdCkpCisgICAgY29uc3QgR3JlZ29yaWFuRGF0
ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1l
KGV4ZWMsIG91dHB1dElzVVRDKTsKKyAgICBpZiAoIWdyZWdvcmlhbkRhdGVUaW1lKQogICAgICAg
ICByZXR1cm4ganNOYU4oZXhlYyk7CiAKICAgICAvLyBOT1RFOiBJRSByZXR1cm5zIHRoZSBmdWxs
IHllYXIgZXZlbiBpbiBnZXRZZWFyLgotICAgIHJldHVybiBqc051bWJlcihleGVjLCB0LnllYXIp
OworICAgIHJldHVybiBqc051bWJlcihleGVjLCBncmVnb3JpYW5EYXRlVGltZS0+eWVhcik7CiB9
CiAKIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9KU09OKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCg==
</data>
<flag name="review"
          id="23671"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42235</attachid>
            <date>2009-10-30 14:28:59 -0700</date>
            <delta_ts>2009-10-30 14:46:09 -0700</delta_ts>
            <desc>patch2</desc>
            <filename>ro.txt</filename>
            <type>text/plain</type>
            <size>23501</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDUwMjkwKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDUgQEAKKzIwMDktMTAtMjkgIEdlb2ZmcmV5
IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzA5NDIKKyAgICAgICAgVXNlIHBvaW50ZXJzIGluc3RlYWQgb2YgY29waWVzIHRvIHBhc3Mg
R3JlZ29yaWFuRGF0ZVRpbWUgb2JqZWN0cyBhcm91bmQuCisgICAgICAgIAorICAgICAgICBTdW5T
cGlkZXIgcmVwb3J0cyBhIHNob2NraW5nIDQuNSUgc3BlZWR1cCBvbiBkYXRlLWZvcm1hdC14cGFy
YiwgYW5kIDEuMyUKKyAgICAgICAgc3BlZWR1cCBvbiBkYXRlLWZvcm1hdC10b2Z0ZS4KKworICAg
ICAgICAqIHJ1bnRpbWUvRGF0ZUluc3RhbmNlLmNwcDoKKyAgICAgICAgKEpTQzo6RGF0ZUluc3Rh
bmNlOjpncmVnb3JpYW5EYXRlVGltZSk6CisgICAgICAgICogcnVudGltZS9EYXRlSW5zdGFuY2Uu
aDoKKyAgICAgICAgKiBydW50aW1lL0RhdGVQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpm
b3JtYXRMb2NhbGVEYXRlKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1RvU3RyaW5nKToK
KyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1RvVVRDU3RyaW5nKToKKyAgICAgICAgKEpTQzo6
ZGF0ZVByb3RvRnVuY1RvSVNPU3RyaW5nKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1Rv
RGF0ZVN0cmluZyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNUb1RpbWVTdHJpbmcpOgor
ICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0RnVsbFllYXIpOgorICAgICAgICAoSlNDOjpk
YXRlUHJvdG9GdW5jR2V0VVRDRnVsbFllYXIpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5j
VG9HTVRTdHJpbmcpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0TW9udGgpOgorICAg
ICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0VVRDTW9udGgpOgorICAgICAgICAoSlNDOjpkYXRl
UHJvdG9GdW5jR2V0RGF0ZSk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRVVENEYXRl
KToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY0dldERheSk6CisgICAgICAgIChKU0M6OmRh
dGVQcm90b0Z1bmNHZXRVVENEYXkpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0SG91
cnMpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0VVRDSG91cnMpOgorICAgICAgICAo
SlNDOjpkYXRlUHJvdG9GdW5jR2V0TWludXRlcyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1
bmNHZXRVVENNaW51dGVzKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY0dldFNlY29uZHMp
OgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0VVRDU2Vjb25kcyk6CisgICAgICAgIChK
U0M6OmRhdGVQcm90b0Z1bmNHZXRUaW1lem9uZU9mZnNldCk6CisgICAgICAgIChKU0M6OnNldE5l
d1ZhbHVlRnJvbVRpbWVBcmdzKToKKyAgICAgICAgKEpTQzo6c2V0TmV3VmFsdWVGcm9tRGF0ZUFy
Z3MpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jU2V0WWVhcik6CisgICAgICAgIChKU0M6
OmRhdGVQcm90b0Z1bmNHZXRZZWFyKTogUmVuYW1lZCBnZXRHcmVnb3JpYW5EYXRlVGltZSB0byBn
cmVnb3JpYW5EYXRlVGltZSwKKyAgICAgICAgc2luY2UgaXQgbm8gbG9uZ2VyIGhhcyBhbiBvdXQg
cGFyYW1ldGVyLiBVc2VzIDAgdG8gaW5kaWNhdGUgaW52YWxpZCBkYXRlcy4KKwogMjAwOS0xMC0y
OSAgR2Fib3IgTG9raSAgPGxva2lAaW5mLnUtc3plZ2VkLmh1PgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IEdhdmluIEJhcnJhY2xvdWdoLgpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRl
SW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUlu
c3RhbmNlLmNwcAkocmV2aXNpb24gNTAyOTApCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Rh
dGVJbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDExICs0NiwxMSBAQCBEYXRlSW5z
dGFuY2U6OkRhdGVJbnN0YW5jZShFeGVjU3RhdGUqIGV4CiAgICAgc2V0SW50ZXJuYWxWYWx1ZShq
c051bWJlcihleGVjLCB0aW1lQ2xpcCh0aW1lKSkpOwogfQogCi1ib29sIERhdGVJbnN0YW5jZTo6
Z2V0R3JlZ29yaWFuRGF0ZVRpbWUoRXhlY1N0YXRlKiBleGVjLCBib29sIG91dHB1dElzVVRDLCBH
cmVnb3JpYW5EYXRlVGltZSYgdCkgY29uc3QKK2NvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBEYXRl
SW5zdGFuY2U6OmdyZWdvcmlhbkRhdGVUaW1lKEV4ZWNTdGF0ZSogZXhlYywgYm9vbCBvdXRwdXRJ
c1VUQykgY29uc3QKIHsKICAgICBkb3VibGUgbWlsbGkgPSBpbnRlcm5hbE51bWJlcigpOwogICAg
IGlmIChpc25hbihtaWxsaSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJu
IDA7CiAKICAgICBpZiAoIW1fZGF0YSkKICAgICAgICAgbV9kYXRhID0gZXhlYy0+Z2xvYmFsRGF0
YSgpLmRhdGVJbnN0YW5jZUNhY2hlLmFkZChtaWxsaSk7CkBAIC02MCwxNiArNjAsMTQgQEAgYm9v
bCBEYXRlSW5zdGFuY2U6OmdldEdyZWdvcmlhbkRhdGVUaW1lKAogICAgICAgICAgICAgV1RGOjpt
c1RvR3JlZ29yaWFuRGF0ZVRpbWUoaW50ZXJuYWxOdW1iZXIoKSwgdHJ1ZSwgbV9kYXRhLT5tX2Nh
Y2hlZEdyZWdvcmlhbkRhdGVUaW1lVVRDKTsKICAgICAgICAgICAgIG1fZGF0YS0+bV9ncmVnb3Jp
YW5EYXRlVGltZVVUQ0NhY2hlZEZvck1TID0gbWlsbGk7CiAgICAgICAgIH0KLSAgICAgICAgdC5j
b3B5RnJvbShtX2RhdGEtPm1fY2FjaGVkR3JlZ29yaWFuRGF0ZVRpbWVVVEMpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGlmIChtX2RhdGEtPm1fZ3JlZ29yaWFuRGF0ZVRpbWVDYWNoZWRGb3JNUyAh
PSBtaWxsaSkgewotICAgICAgICAgICAgV1RGOjptc1RvR3JlZ29yaWFuRGF0ZVRpbWUoaW50ZXJu
YWxOdW1iZXIoKSwgZmFsc2UsIG1fZGF0YS0+bV9jYWNoZWRHcmVnb3JpYW5EYXRlVGltZSk7Ci0g
ICAgICAgICAgICBtX2RhdGEtPm1fZ3JlZ29yaWFuRGF0ZVRpbWVDYWNoZWRGb3JNUyA9IG1pbGxp
OwotICAgICAgICB9Ci0gICAgICAgIHQuY29weUZyb20obV9kYXRhLT5tX2NhY2hlZEdyZWdvcmlh
bkRhdGVUaW1lKTsKKyAgICAgICAgcmV0dXJuICZtX2RhdGEtPm1fY2FjaGVkR3JlZ29yaWFuRGF0
ZVRpbWVVVEM7CiAgICAgfQogCi0gICAgcmV0dXJuIHRydWU7CisgICAgaWYgKG1fZGF0YS0+bV9n
cmVnb3JpYW5EYXRlVGltZUNhY2hlZEZvck1TICE9IG1pbGxpKSB7CisgICAgICAgIFdURjo6bXNU
b0dyZWdvcmlhbkRhdGVUaW1lKGludGVybmFsTnVtYmVyKCksIGZhbHNlLCBtX2RhdGEtPm1fY2Fj
aGVkR3JlZ29yaWFuRGF0ZVRpbWUpOworICAgICAgICBtX2RhdGEtPm1fZ3JlZ29yaWFuRGF0ZVRp
bWVDYWNoZWRGb3JNUyA9IG1pbGxpOworICAgIH0KKyAgICByZXR1cm4gJm1fZGF0YS0+bV9jYWNo
ZWRHcmVnb3JpYW5EYXRlVGltZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0RhdGVJbnN0YW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRGF0ZUluc3RhbmNlLmgJKHJldmlzaW9uIDUwMjkwKQorKysgSmF2YVNj
cmlwdENvcmUvcnVudGltZS9EYXRlSW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyAr
MzgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBj
b25zdCBDbGFzc0luZm8gaW5mbzsKIAotICAgICAgICBib29sIGdldEdyZWdvcmlhbkRhdGVUaW1l
KEV4ZWNTdGF0ZSosIGJvb2wgb3V0cHV0SXNVVEMsIFdURjo6R3JlZ29yaWFuRGF0ZVRpbWUmKSBj
b25zdDsKKyAgICAgICAgY29uc3QgV1RGOjpHcmVnb3JpYW5EYXRlVGltZSogZ3JlZ29yaWFuRGF0
ZVRpbWUoRXhlY1N0YXRlKiwgYm9vbCBvdXRwdXRJc1VUQykgY29uc3Q7CiAKICAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1ZSBwcm90b3R5
cGUpCiAgICAgICAgIHsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBl
LmNwcAkocmV2aXNpb24gNTAyOTApCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90
b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTMsOSArMjUzLDkgQEAgc3RhdGljIEpTQ2Vs
bCogZm9ybWF0TG9jYWxlRGF0ZShFeGVjU3RhdAogCiBzdGF0aWMgSlNDZWxsKiBmb3JtYXRMb2Nh
bGVEYXRlKEV4ZWNTdGF0ZSogZXhlYywgRGF0ZUluc3RhbmNlKiBkYXRlT2JqZWN0LCBkb3VibGUs
IExvY2FsZURhdGVUaW1lRm9ybWF0IGZvcm1hdCwgY29uc3QgQXJnTGlzdCYpCiB7Ci0gICAgR3Jl
Z29yaWFuRGF0ZVRpbWUgZ3JlZ29yaWFuRGF0ZVRpbWU7CiAgICAgY29uc3QgYm9vbCBvdXRwdXRJ
c1VUQyA9IGZhbHNlOwotICAgIGlmICghZGF0ZU9iamVjdC0+Z2V0R3JlZ29yaWFuRGF0ZVRpbWUo
ZXhlYywgb3V0cHV0SXNVVEMsIGdyZWdvcmlhbkRhdGVUaW1lKSkKKyAgICBjb25zdCBHcmVnb3Jp
YW5EYXRlVGltZSogZ3JlZ29yaWFuRGF0ZVRpbWUgPSBkYXRlT2JqZWN0LT5ncmVnb3JpYW5EYXRl
VGltZShleGVjLCBvdXRwdXRJc1VUQyk7CisgICAgaWYgKCFncmVnb3JpYW5EYXRlVGltZSkKICAg
ICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCAiSW52YWxpZCBEYXRlIik7CiAg
ICAgcmV0dXJuIGZvcm1hdExvY2FsZURhdGUoZXhlYywgZ3JlZ29yaWFuRGF0ZVRpbWUsIGZvcm1h
dCk7CiB9CkBAIC00MjQsMTAgKzQyNCwxMCBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVBy
b3RvRnVuY1RvU3RyCiAKICAgICBEYXRlSW5zdGFuY2UqIHRoaXNEYXRlT2JqID0gYXNEYXRlSW5z
dGFuY2UodGhpc1ZhbHVlKTsgCiAKLSAgICBHcmVnb3JpYW5EYXRlVGltZSB0OwotICAgIGlmICgh
dGhpc0RhdGVPYmotPmdldEdyZWdvcmlhbkRhdGVUaW1lKGV4ZWMsIG91dHB1dElzVVRDLCB0KSkK
KyAgICBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSogZ3JlZ29yaWFuRGF0ZVRpbWUgPSB0aGlzRGF0
ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWUoZXhlYywgb3V0cHV0SXNVVEMpOworICAgIGlmICghZ3Jl
Z29yaWFuRGF0ZVRpbWUpCiAgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywg
IkludmFsaWQgRGF0ZSIpOwotICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgZm9y
bWF0RGF0ZSh0KSArICIgIiArIGZvcm1hdFRpbWUodCwgb3V0cHV0SXNVVEMpKTsKKyAgICByZXR1
cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsIGZvcm1hdERhdGUoKmdyZWdvcmlhbkRhdGVUaW1l
KSArICIgIiArIGZvcm1hdFRpbWUoKmdyZWdvcmlhbkRhdGVUaW1lLCBvdXRwdXRJc1VUQykpOwog
fQogCiBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvVVRDU3RyaW5nKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYp
CkBAIC00MzksMTAgKzQzOSwxMCBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVu
Y1RvVVRDCiAKICAgICBEYXRlSW5zdGFuY2UqIHRoaXNEYXRlT2JqID0gYXNEYXRlSW5zdGFuY2Uo
dGhpc1ZhbHVlKTsgCiAKLSAgICBHcmVnb3JpYW5EYXRlVGltZSB0OwotICAgIGlmICghdGhpc0Rh
dGVPYmotPmdldEdyZWdvcmlhbkRhdGVUaW1lKGV4ZWMsIG91dHB1dElzVVRDLCB0KSkKKyAgICBj
b25zdCBHcmVnb3JpYW5EYXRlVGltZSogZ3JlZ29yaWFuRGF0ZVRpbWUgPSB0aGlzRGF0ZU9iai0+
Z3JlZ29yaWFuRGF0ZVRpbWUoZXhlYywgb3V0cHV0SXNVVEMpOworICAgIGlmICghZ3JlZ29yaWFu
RGF0ZVRpbWUpCiAgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgIkludmFs
aWQgRGF0ZSIpOwotICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgZm9ybWF0RGF0
ZVVUQ1ZhcmlhbnQodCkgKyAiICIgKyBmb3JtYXRUaW1lKHQsIG91dHB1dElzVVRDKSk7CisgICAg
cmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBmb3JtYXREYXRlVVRDVmFyaWFudCgqZ3Jl
Z29yaWFuRGF0ZVRpbWUpICsgIiAiICsgZm9ybWF0VGltZSgqZ3JlZ29yaWFuRGF0ZVRpbWUsIG91
dHB1dElzVVRDKSk7CiB9CiAKIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9J
U09TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBj
b25zdCBBcmdMaXN0JikKQEAgLTQ1NCwxMyArNDU0LDEzIEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBkYXRlUHJvdG9GdW5jVG9JU08KICAgICAKICAgICBEYXRlSW5zdGFuY2UqIHRoaXNEYXRlT2Jq
ID0gYXNEYXRlSW5zdGFuY2UodGhpc1ZhbHVlKTsgCiAgICAgCi0gICAgR3JlZ29yaWFuRGF0ZVRp
bWUgdDsKLSAgICBpZiAoIXRoaXNEYXRlT2JqLT5nZXRHcmVnb3JpYW5EYXRlVGltZShleGVjLCBv
dXRwdXRJc1VUQywgdCkpCisgICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRh
dGVUaW1lID0gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lKGV4ZWMsIG91dHB1dElzVVRD
KTsKKyAgICBpZiAoIWdyZWdvcmlhbkRhdGVUaW1lKQogICAgICAgICByZXR1cm4ganNOb250cml2
aWFsU3RyaW5nKGV4ZWMsICJJbnZhbGlkIERhdGUiKTsKICAgICAvLyBNYXhpbXVtIGFtb3VudCBv
ZiBzcGFjZSB3ZSBuZWVkIGluIGJ1ZmZlcjogNiAobWF4LiBkaWdpdHMgaW4geWVhcikgKyAyICog
NSAoMiBjaGFyYWN0ZXJzIGVhY2ggZm9yIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25k
KSArIDQgKC4gKyAzIGRpZ2l0cyBmb3IgbWlsbGlzZWNvbmRzKQogICAgIC8vIDYgZm9yIGZvcm1h
dHRpbmcgYW5kIG9uZSBmb3IgbnVsbCB0ZXJtaW5hdGlvbiA9IDI3LiAgV2UgYWRkIG9uZSBleHRy
YSBjaGFyYWN0ZXIgdG8gYWxsb3cgdXMgdG8gZm9yY2UgbnVsbCB0ZXJtaW5hdGlvbi4KICAgICBj
aGFyIGJ1ZmZlclsyOF07Ci0gICAgc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSAtIDEs
ICIlMDRkLSUwMmQtJTAyZFQlMDJkOiUwMmQ6JTAyZC4lMDNkWiIsIDE5MDAgKyB0LnllYXIsIHQu
bW9udGggKyAxLCB0Lm1vbnRoRGF5LCB0LmhvdXIsIHQubWludXRlLCB0LnNlY29uZCwgc3RhdGlj
X2Nhc3Q8aW50PihmbW9kKHRoaXNEYXRlT2JqLT5pbnRlcm5hbE51bWJlcigpLCAxMDAwKSkpOwor
ICAgIHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikgLSAxLCAiJTA0ZC0lMDJkLSUwMmRU
JTAyZDolMDJkOiUwMmQuJTAzZFoiLCAxOTAwICsgZ3JlZ29yaWFuRGF0ZVRpbWUtPnllYXIsIGdy
ZWdvcmlhbkRhdGVUaW1lLT5tb250aCArIDEsIGdyZWdvcmlhbkRhdGVUaW1lLT5tb250aERheSwg
Z3JlZ29yaWFuRGF0ZVRpbWUtPmhvdXIsIGdyZWdvcmlhbkRhdGVUaW1lLT5taW51dGUsIGdyZWdv
cmlhbkRhdGVUaW1lLT5zZWNvbmQsIHN0YXRpY19jYXN0PGludD4oZm1vZCh0aGlzRGF0ZU9iai0+
aW50ZXJuYWxOdW1iZXIoKSwgMTAwMCkpKTsKICAgICBidWZmZXJbc2l6ZW9mKGJ1ZmZlcikgLSAx
XSA9IDA7CiAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBidWZmZXIpOwogfQpA
QCAtNDc0LDEwICs0NzQsMTAgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNU
b0RhdAogCiAgICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9IGFzRGF0ZUluc3RhbmNlKHRo
aXNWYWx1ZSk7IAogCi0gICAgR3JlZ29yaWFuRGF0ZVRpbWUgdDsKLSAgICBpZiAoIXRoaXNEYXRl
T2JqLT5nZXRHcmVnb3JpYW5EYXRlVGltZShleGVjLCBvdXRwdXRJc1VUQywgdCkpCisgICAgY29u
c3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gdGhpc0RhdGVPYmotPmdy
ZWdvcmlhbkRhdGVUaW1lKGV4ZWMsIG91dHB1dElzVVRDKTsKKyAgICBpZiAoIWdyZWdvcmlhbkRh
dGVUaW1lKQogICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsICJJbnZhbGlk
IERhdGUiKTsKLSAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsIGZvcm1hdERhdGUo
dCkpOworICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgZm9ybWF0RGF0ZSgqZ3Jl
Z29yaWFuRGF0ZVRpbWUpKTsKIH0KIAogSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1
bmNUb1RpbWVTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1Zh
bHVlLCBjb25zdCBBcmdMaXN0JikKQEAgLTQ4OSwxMCArNDg5LDEwIEBAIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9UaW0KIAogICAgIERhdGVJbnN0YW5jZSogdGhpc0RhdGVP
YmogPSBhc0RhdGVJbnN0YW5jZSh0aGlzVmFsdWUpOyAKIAotICAgIEdyZWdvcmlhbkRhdGVUaW1l
IHQ7Ci0gICAgaWYgKCF0aGlzRGF0ZU9iai0+Z2V0R3JlZ29yaWFuRGF0ZVRpbWUoZXhlYywgb3V0
cHV0SXNVVEMsIHQpKQorICAgIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBncmVnb3JpYW5EYXRl
VGltZSA9IHRoaXNEYXRlT2JqLT5ncmVnb3JpYW5EYXRlVGltZShleGVjLCBvdXRwdXRJc1VUQyk7
CisgICAgaWYgKCFncmVnb3JpYW5EYXRlVGltZSkKICAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlh
bFN0cmluZyhleGVjLCAiSW52YWxpZCBEYXRlIik7Ci0gICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0
cmluZyhleGVjLCBmb3JtYXRUaW1lKHQsIG91dHB1dElzVVRDKSk7CisgICAgcmV0dXJuIGpzTm9u
dHJpdmlhbFN0cmluZyhleGVjLCBmb3JtYXRUaW1lKCpncmVnb3JpYW5EYXRlVGltZSwgb3V0cHV0
SXNVVEMpKTsKIH0KIAogSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb0xvY2Fs
ZVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpCkBAIC01MzksMTAgKzUzOSwxMCBAQCBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZGF0ZVByb3RvRnVuY0dldEZ1CiAKICAgICBEYXRlSW5zdGFuY2UqIHRoaXNEYXRlT2Jq
ID0gYXNEYXRlSW5zdGFuY2UodGhpc1ZhbHVlKTsgCiAKLSAgICBHcmVnb3JpYW5EYXRlVGltZSB0
OwotICAgIGlmICghdGhpc0RhdGVPYmotPmdldEdyZWdvcmlhbkRhdGVUaW1lKGV4ZWMsIG91dHB1
dElzVVRDLCB0KSkKKyAgICBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSogZ3JlZ29yaWFuRGF0ZVRp
bWUgPSB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWUoZXhlYywgb3V0cHV0SXNVVEMpOwor
ICAgIGlmICghZ3JlZ29yaWFuRGF0ZVRpbWUpCiAgICAgICAgIHJldHVybiBqc05hTihleGVjKTsK
LSAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgMTkwMCArIHQueWVhcik7CisgICAgcmV0dXJuIGpz
TnVtYmVyKGV4ZWMsIDE5MDAgKyBncmVnb3JpYW5EYXRlVGltZS0+eWVhcik7CiB9CiAKIEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VVRDRnVsbFllYXIoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKQEAgLTU1
NCwxMCArNTU0LDEwIEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VVQK
IAogICAgIERhdGVJbnN0YW5jZSogdGhpc0RhdGVPYmogPSBhc0RhdGVJbnN0YW5jZSh0aGlzVmFs
dWUpOyAKIAotICAgIEdyZWdvcmlhbkRhdGVUaW1lIHQ7Ci0gICAgaWYgKCF0aGlzRGF0ZU9iai0+
Z2V0R3JlZ29yaWFuRGF0ZVRpbWUoZXhlYywgb3V0cHV0SXNVVEMsIHQpKQorICAgIGNvbnN0IEdy
ZWdvcmlhbkRhdGVUaW1lKiBncmVnb3JpYW5EYXRlVGltZSA9IHRoaXNEYXRlT2JqLT5ncmVnb3Jp
YW5EYXRlVGltZShleGVjLCBvdXRwdXRJc1VUQyk7CisgICAgaWYgKCFncmVnb3JpYW5EYXRlVGlt
ZSkKICAgICAgICAgcmV0dXJuIGpzTmFOKGV4ZWMpOwotICAgIHJldHVybiBqc051bWJlcihleGVj
LCAxOTAwICsgdC55ZWFyKTsKKyAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgMTkwMCArIGdyZWdv
cmlhbkRhdGVUaW1lLT55ZWFyKTsKIH0KIAogSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90
b0Z1bmNUb0dNVFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlz
VmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQpAQCAtNTY5LDEwICs1NjksMTAgQEAgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb0dNVAogCiAgICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0
ZU9iaiA9IGFzRGF0ZUluc3RhbmNlKHRoaXNWYWx1ZSk7IAogCi0gICAgR3JlZ29yaWFuRGF0ZVRp
bWUgdDsKLSAgICBpZiAoIXRoaXNEYXRlT2JqLT5nZXRHcmVnb3JpYW5EYXRlVGltZShleGVjLCBv
dXRwdXRJc1VUQywgdCkpCisgICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRh
dGVUaW1lID0gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lKGV4ZWMsIG91dHB1dElzVVRD
KTsKKyAgICBpZiAoIWdyZWdvcmlhbkRhdGVUaW1lKQogICAgICAgICByZXR1cm4ganNOb250cml2
aWFsU3RyaW5nKGV4ZWMsICJJbnZhbGlkIERhdGUiKTsKLSAgICByZXR1cm4ganNOb250cml2aWFs
U3RyaW5nKGV4ZWMsIGZvcm1hdERhdGVVVENWYXJpYW50KHQpICsgIiAiICsgZm9ybWF0VGltZSh0
LCBvdXRwdXRJc1VUQykpOworICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgZm9y
bWF0RGF0ZVVUQ1ZhcmlhbnQoKmdyZWdvcmlhbkRhdGVUaW1lKSArICIgIiArIGZvcm1hdFRpbWUo
KmdyZWdvcmlhbkRhdGVUaW1lLCBvdXRwdXRJc1VUQykpOwogfQogCiBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZGF0ZVByb3RvRnVuY0dldE1vbnRoKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBK
U1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCkBAIC01ODQsMTAgKzU4NCwxMCBAQCBK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldE1vCiAKICAgICBEYXRlSW5zdGFu
Y2UqIHRoaXNEYXRlT2JqID0gYXNEYXRlSW5zdGFuY2UodGhpc1ZhbHVlKTsgCiAKLSAgICBHcmVn
b3JpYW5EYXRlVGltZSB0OwotICAgIGlmICghdGhpc0RhdGVPYmotPmdldEdyZWdvcmlhbkRhdGVU
aW1lKGV4ZWMsIG91dHB1dElzVVRDLCB0KSkKKyAgICBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSog
Z3JlZ29yaWFuRGF0ZVRpbWUgPSB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWUoZXhlYywg
b3V0cHV0SXNVVEMpOworICAgIGlmICghZ3JlZ29yaWFuRGF0ZVRpbWUpCiAgICAgICAgIHJldHVy
biBqc05hTihleGVjKTsKLSAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgdC5tb250aCk7CisgICAg
cmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGdyZWdvcmlhbkRhdGVUaW1lLT5tb250aCk7CiB9CiAKIEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VVRDTW9udGgoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKQEAgLTU5
OSwxMCArNTk5LDEwIEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VVQK
IAogICAgIERhdGVJbnN0YW5jZSogdGhpc0RhdGVPYmogPSBhc0RhdGVJbnN0YW5jZSh0aGlzVmFs
dWUpOyAKIAotICAgIEdyZWdvcmlhbkRhdGVUaW1lIHQ7Ci0gICAgaWYgKCF0aGlzRGF0ZU9iai0+
Z2V0R3JlZ29yaWFuRGF0ZVRpbWUoZXhlYywgb3V0cHV0SXNVVEMsIHQpKQorICAgIGNvbnN0IEdy
ZWdvcmlhbkRhdGVUaW1lKiBncmVnb3JpYW5EYXRlVGltZSA9IHRoaXNEYXRlT2JqLT5ncmVnb3Jp
YW5EYXRlVGltZShleGVjLCBvdXRwdXRJc1VUQyk7CisgICAgaWYgKCFncmVnb3JpYW5EYXRlVGlt
ZSkKICAgICAgICAgcmV0dXJuIGpzTmFOKGV4ZWMpOwotICAgIHJldHVybiBqc051bWJlcihleGVj
LCB0Lm1vbnRoKTsKKyAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgZ3JlZ29yaWFuRGF0ZVRpbWUt
Pm1vbnRoKTsKIH0KIAogSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXREYXRl
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYpCkBAIC02MTQsMTAgKzYxNCwxMCBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVBy
b3RvRnVuY0dldERhCiAKICAgICBEYXRlSW5zdGFuY2UqIHRoaXNEYXRlT2JqID0gYXNEYXRlSW5z
dGFuY2UodGhpc1ZhbHVlKTsgCiAKLSAgICBHcmVnb3JpYW5EYXRlVGltZSB0OwotICAgIGlmICgh
dGhpc0RhdGVPYmotPmdldEdyZWdvcmlhbkRhdGVUaW1lKGV4ZWMsIG91dHB1dElzVVRDLCB0KSkK
KyAgICBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSogZ3JlZ29yaWFuRGF0ZVRpbWUgPSB0aGlzRGF0
ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWUoZXhlYywgb3V0cHV0SXNVVEMpOworICAgIGlmICghZ3Jl
Z29yaWFuRGF0ZVRpbWUpCiAgICAgICAgIHJldHVybiBqc05hTihleGVjKTsKLSAgICByZXR1cm4g
anNOdW1iZXIoZXhlYywgdC5tb250aERheSk7CisgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGdy
ZWdvcmlhbkRhdGVUaW1lLT5tb250aERheSk7CiB9CiAKIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBk
YXRlUHJvdG9GdW5jR2V0VVRDRGF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1
ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQpAQCAtNjI5LDEwICs2MjksMTAgQEAgSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVAogCiAgICAgRGF0ZUluc3RhbmNlKiB0
aGlzRGF0ZU9iaiA9IGFzRGF0ZUluc3RhbmNlKHRoaXNWYWx1ZSk7IAogCi0gICAgR3JlZ29yaWFu
RGF0ZVRpbWUgdDsKLSAgICBpZiAoIXRoaXNEYXRlT2JqLT5nZXRHcmVnb3JpYW5EYXRlVGltZShl
eGVjLCBvdXRwdXRJc1VUQywgdCkpCisgICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdv
cmlhbkRhdGVUaW1lID0gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lKGV4ZWMsIG91dHB1
dElzVVRDKTsKKyAgICBpZiAoIWdyZWdvcmlhbkRhdGVUaW1lKQogICAgICAgICByZXR1cm4ganNO
YU4oZXhlYyk7Ci0gICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHQubW9udGhEYXkpOworICAgIHJl
dHVybiBqc051bWJlcihleGVjLCBncmVnb3JpYW5EYXRlVGltZS0+bW9udGhEYXkpOwogfQogCiBK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldERheShFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQpAQCAtNjQ0LDEw
ICs2NDQsMTAgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXREYQogCiAg
ICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9IGFzRGF0ZUluc3RhbmNlKHRoaXNWYWx1ZSk7
IAogCi0gICAgR3JlZ29yaWFuRGF0ZVRpbWUgdDsKLSAgICBpZiAoIXRoaXNEYXRlT2JqLT5nZXRH
cmVnb3JpYW5EYXRlVGltZShleGVjLCBvdXRwdXRJc1VUQywgdCkpCisgICAgY29uc3QgR3JlZ29y
aWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRh
dGVUaW1lKGV4ZWMsIG91dHB1dElzVVRDKTsKKyAgICBpZiAoIWdyZWdvcmlhbkRhdGVUaW1lKQog
ICAgICAgICByZXR1cm4ganNOYU4oZXhlYyk7Ci0gICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHQu
d2Vla0RheSk7CisgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGdyZWdvcmlhbkRhdGVUaW1lLT53
ZWVrRGF5KTsKIH0KIAogSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVENE
YXkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBB
cmdMaXN0JikKQEAgLTY1OSwxMCArNjU5LDEwIEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRl
UHJvdG9GdW5jR2V0VVQKIAogICAgIERhdGVJbnN0YW5jZSogdGhpc0RhdGVPYmogPSBhc0RhdGVJ
bnN0YW5jZSh0aGlzVmFsdWUpOyAKIAotICAgIEdyZWdvcmlhbkRhdGVUaW1lIHQ7Ci0gICAgaWYg
KCF0aGlzRGF0ZU9iai0+Z2V0R3JlZ29yaWFuRGF0ZVRpbWUoZXhlYywgb3V0cHV0SXNVVEMsIHQp
KQorICAgIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBncmVnb3JpYW5EYXRlVGltZSA9IHRoaXNE
YXRlT2JqLT5ncmVnb3JpYW5EYXRlVGltZShleGVjLCBvdXRwdXRJc1VUQyk7CisgICAgaWYgKCFn
cmVnb3JpYW5EYXRlVGltZSkKICAgICAgICAgcmV0dXJuIGpzTmFOKGV4ZWMpOwotICAgIHJldHVy
biBqc051bWJlcihleGVjLCB0LndlZWtEYXkpOworICAgIHJldHVybiBqc051bWJlcihleGVjLCBn
cmVnb3JpYW5EYXRlVGltZS0+d2Vla0RheSk7CiB9CiAKIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBk
YXRlUHJvdG9GdW5jR2V0SG91cnMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUg
dGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKQEAgLTY3NCwxMCArNjc0LDEwIEBAIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0SG8KIAogICAgIERhdGVJbnN0YW5jZSogdGhp
c0RhdGVPYmogPSBhc0RhdGVJbnN0YW5jZSh0aGlzVmFsdWUpOyAKIAotICAgIEdyZWdvcmlhbkRh
dGVUaW1lIHQ7Ci0gICAgaWYgKCF0aGlzRGF0ZU9iai0+Z2V0R3JlZ29yaWFuRGF0ZVRpbWUoZXhl
Yywgb3V0cHV0SXNVVEMsIHQpKQorICAgIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBncmVnb3Jp
YW5EYXRlVGltZSA9IHRoaXNEYXRlT2JqLT5ncmVnb3JpYW5EYXRlVGltZShleGVjLCBvdXRwdXRJ
c1VUQyk7CisgICAgaWYgKCFncmVnb3JpYW5EYXRlVGltZSkKICAgICAgICAgcmV0dXJuIGpzTmFO
KGV4ZWMpOwotICAgIHJldHVybiBqc051bWJlcihleGVjLCB0LmhvdXIpOworICAgIHJldHVybiBq
c051bWJlcihleGVjLCBncmVnb3JpYW5EYXRlVGltZS0+aG91cik7CiB9CiAKIEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VVRDSG91cnMoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKQEAgLTY4OSwxMCArNjg5
LDEwIEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VVQKIAogICAgIERh
dGVJbnN0YW5jZSogdGhpc0RhdGVPYmogPSBhc0RhdGVJbnN0YW5jZSh0aGlzVmFsdWUpOyAKIAot
ICAgIEdyZWdvcmlhbkRhdGVUaW1lIHQ7Ci0gICAgaWYgKCF0aGlzRGF0ZU9iai0+Z2V0R3JlZ29y
aWFuRGF0ZVRpbWUoZXhlYywgb3V0cHV0SXNVVEMsIHQpKQorICAgIGNvbnN0IEdyZWdvcmlhbkRh
dGVUaW1lKiBncmVnb3JpYW5EYXRlVGltZSA9IHRoaXNEYXRlT2JqLT5ncmVnb3JpYW5EYXRlVGlt
ZShleGVjLCBvdXRwdXRJc1VUQyk7CisgICAgaWYgKCFncmVnb3JpYW5EYXRlVGltZSkKICAgICAg
ICAgcmV0dXJuIGpzTmFOKGV4ZWMpOwotICAgIHJldHVybiBqc051bWJlcihleGVjLCB0LmhvdXIp
OworICAgIHJldHVybiBqc051bWJlcihleGVjLCBncmVnb3JpYW5EYXRlVGltZS0+aG91cik7CiB9
CiAKIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0TWludXRlcyhFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQpA
QCAtNzA0LDEwICs3MDQsMTAgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNH
ZXRNaQogCiAgICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9IGFzRGF0ZUluc3RhbmNlKHRo
aXNWYWx1ZSk7IAogCi0gICAgR3JlZ29yaWFuRGF0ZVRpbWUgdDsKLSAgICBpZiAoIXRoaXNEYXRl
T2JqLT5nZXRHcmVnb3JpYW5EYXRlVGltZShleGVjLCBvdXRwdXRJc1VUQywgdCkpCisgICAgY29u
c3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gdGhpc0RhdGVPYmotPmdy
ZWdvcmlhbkRhdGVUaW1lKGV4ZWMsIG91dHB1dElzVVRDKTsKKyAgICBpZiAoIWdyZWdvcmlhbkRh
dGVUaW1lKQogICAgICAgICByZXR1cm4ganNOYU4oZXhlYyk7Ci0gICAgcmV0dXJuIGpzTnVtYmVy
KGV4ZWMsIHQubWludXRlKTsKKyAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgZ3JlZ29yaWFuRGF0
ZVRpbWUtPm1pbnV0ZSk7CiB9CiAKIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5j
R2V0VVRDTWludXRlcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFs
dWUsIGNvbnN0IEFyZ0xpc3QmKQpAQCAtNzE5LDEwICs3MTksMTAgQEAgSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRVVAogCiAgICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0ZU9i
aiA9IGFzRGF0ZUluc3RhbmNlKHRoaXNWYWx1ZSk7IAogCi0gICAgR3JlZ29yaWFuRGF0ZVRpbWUg
dDsKLSAgICBpZiAoIXRoaXNEYXRlT2JqLT5nZXRHcmVnb3JpYW5EYXRlVGltZShleGVjLCBvdXRw
dXRJc1VUQywgdCkpCisgICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVU
aW1lID0gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lKGV4ZWMsIG91dHB1dElzVVRDKTsK
KyAgICBpZiAoIWdyZWdvcmlhbkRhdGVUaW1lKQogICAgICAgICByZXR1cm4ganNOYU4oZXhlYyk7
Ci0gICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHQubWludXRlKTsKKyAgICByZXR1cm4ganNOdW1i
ZXIoZXhlYywgZ3JlZ29yaWFuRGF0ZVRpbWUtPm1pbnV0ZSk7CiB9CiAKIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0U2Vjb25kcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQpAQCAtNzM0LDEwICs3MzQsMTAg
QEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRTZQogCiAgICAgRGF0ZUlu
c3RhbmNlKiB0aGlzRGF0ZU9iaiA9IGFzRGF0ZUluc3RhbmNlKHRoaXNWYWx1ZSk7IAogCi0gICAg
R3JlZ29yaWFuRGF0ZVRpbWUgdDsKLSAgICBpZiAoIXRoaXNEYXRlT2JqLT5nZXRHcmVnb3JpYW5E
YXRlVGltZShleGVjLCBvdXRwdXRJc1VUQywgdCkpCisgICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRp
bWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lKGV4
ZWMsIG91dHB1dElzVVRDKTsKKyAgICBpZiAoIWdyZWdvcmlhbkRhdGVUaW1lKQogICAgICAgICBy
ZXR1cm4ganNOYU4oZXhlYyk7Ci0gICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHQuc2Vjb25kKTsK
KyAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgZ3JlZ29yaWFuRGF0ZVRpbWUtPnNlY29uZCk7CiB9
CiAKIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VVRDU2Vjb25kcyhFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3Qm
KQpAQCAtNzQ5LDEwICs3NDksMTAgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1
bmNHZXRVVAogCiAgICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9IGFzRGF0ZUluc3RhbmNl
KHRoaXNWYWx1ZSk7IAogCi0gICAgR3JlZ29yaWFuRGF0ZVRpbWUgdDsKLSAgICBpZiAoIXRoaXNE
YXRlT2JqLT5nZXRHcmVnb3JpYW5EYXRlVGltZShleGVjLCBvdXRwdXRJc1VUQywgdCkpCisgICAg
Y29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gdGhpc0RhdGVPYmot
PmdyZWdvcmlhbkRhdGVUaW1lKGV4ZWMsIG91dHB1dElzVVRDKTsKKyAgICBpZiAoIWdyZWdvcmlh
bkRhdGVUaW1lKQogICAgICAgICByZXR1cm4ganNOYU4oZXhlYyk7Ci0gICAgcmV0dXJuIGpzTnVt
YmVyKGV4ZWMsIHQuc2Vjb25kKTsKKyAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgZ3JlZ29yaWFu
RGF0ZVRpbWUtPnNlY29uZCk7CiB9CiAKIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9G
dW5jR2V0TWlsbGlTZWNvbmRzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRo
aXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCkBAIC03OTQsMTAgKzc5NCwxMCBAQCBKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFRpCiAKICAgICBEYXRlSW5zdGFuY2UqIHRoaXNE
YXRlT2JqID0gYXNEYXRlSW5zdGFuY2UodGhpc1ZhbHVlKTsgCiAKLSAgICBHcmVnb3JpYW5EYXRl
VGltZSB0OwotICAgIGlmICghdGhpc0RhdGVPYmotPmdldEdyZWdvcmlhbkRhdGVUaW1lKGV4ZWMs
IG91dHB1dElzVVRDLCB0KSkKKyAgICBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSogZ3JlZ29yaWFu
RGF0ZVRpbWUgPSB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWUoZXhlYywgb3V0cHV0SXNV
VEMpOworICAgIGlmICghZ3JlZ29yaWFuRGF0ZVRpbWUpCiAgICAgICAgIHJldHVybiBqc05hTihl
eGVjKTsKLSAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgLWdtdG9mZnNldCh0KSAvIG1pbnV0ZXNQ
ZXJIb3VyKTsKKyAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgLWdyZWdvcmlhbkRhdGVUaW1lLT51
dGNPZmZzZXQgLyBtaW51dGVzUGVySG91cik7CiB9CiAKIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBk
YXRlUHJvdG9GdW5jU2V0VGltZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0
aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCkBAIC04MzAsMTYgKzgzMCwxOSBAQCBzdGF0
aWMgSlNWYWx1ZSBzZXROZXdWYWx1ZUZyb21UaW1lQXJncyhFCiAgICAgZG91YmxlIHNlY3MgPSBm
bG9vcihtaWxsaSAvIG1zUGVyU2Vjb25kKTsKICAgICBkb3VibGUgbXMgPSBtaWxsaSAtIHNlY3Mg
KiBtc1BlclNlY29uZDsKIAotICAgIEdyZWdvcmlhbkRhdGVUaW1lIHQ7Ci0gICAgdGhpc0RhdGVP
YmotPmdldEdyZWdvcmlhbkRhdGVUaW1lKGV4ZWMsIGlucHV0SXNVVEMsIHQpOworICAgIGNvbnN0
IEdyZWdvcmlhbkRhdGVUaW1lKiBvdGhlciA9IHRoaXNEYXRlT2JqLT5ncmVnb3JpYW5EYXRlVGlt
ZShleGVjLCBpbnB1dElzVVRDKTsKKyAgICBpZiAoIW90aGVyKQorICAgICAgICByZXR1cm4ganNO
YU4oZXhlYyk7CiAKLSAgICBpZiAoIWZpbGxTdHJ1Y3R1cmVzVXNpbmdUaW1lQXJncyhleGVjLCBh
cmdzLCBudW1BcmdzVG9Vc2UsICZtcywgJnQpKSB7CisgICAgR3JlZ29yaWFuRGF0ZVRpbWUgZ3Jl
Z29yaWFuRGF0ZVRpbWU7CisgICAgZ3JlZ29yaWFuRGF0ZVRpbWUuY29weUZyb20oKm90aGVyKTsK
KyAgICBpZiAoIWZpbGxTdHJ1Y3R1cmVzVXNpbmdUaW1lQXJncyhleGVjLCBhcmdzLCBudW1Bcmdz
VG9Vc2UsICZtcywgJmdyZWdvcmlhbkRhdGVUaW1lKSkgewogICAgICAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGpzTmFOKGV4ZWMpOwogICAgICAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShy
ZXN1bHQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0gCiAgICAgCi0gICAgSlNWYWx1
ZSByZXN1bHQgPSBqc051bWJlcihleGVjLCBncmVnb3JpYW5EYXRlVGltZVRvTVModCwgbXMsIGlu
cHV0SXNVVEMpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGV4ZWMsIGdyZWdvcmlh
bkRhdGVUaW1lVG9NUyhncmVnb3JpYW5EYXRlVGltZSwgbXMsIGlucHV0SXNVVEMpKTsKICAgICB0
aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShyZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CkBAIC04NTcsMjYgKzg2MCwyNyBAQCBzdGF0aWMgSlNWYWx1ZSBzZXROZXdWYWx1ZUZyb21E
YXRlQXJncyhFCiAgICAgfSAgICAgIAogICAgIAogICAgIGRvdWJsZSBtaWxsaSA9IHRoaXNEYXRl
T2JqLT5pbnRlcm5hbE51bWJlcigpOwotICAgIGRvdWJsZSBtcyA9IDA7Ci0KLSAgICBHcmVnb3Jp
YW5EYXRlVGltZSB0OwotICAgIGlmIChudW1BcmdzVG9Vc2UgPT0gMyAmJiBpc25hbihtaWxsaSkp
Ci0gICAgICAgIC8vIEJhc2VkIG9uIEVDTUEgMjYyIDE1LjkuNS40MCAtIC40MSAoc2V0W1VUQ11G
dWxsWWVhcikKLSAgICAgICAgLy8gdGhlIHRpbWUgbXVzdCBiZSByZXNldCB0byArMCBpZiBpdCBp
cyBOYU4uIAotICAgICAgICBXVEY6Om1zVG9HcmVnb3JpYW5EYXRlVGltZSgwLCB0cnVlLCB0KTsK
LSAgICBlbHNlIHsKLSAgICAgICAgZG91YmxlIHNlY3MgPSBmbG9vcihtaWxsaSAvIG1zUGVyU2Vj
b25kKTsKLSAgICAgICAgbXMgPSBtaWxsaSAtIHNlY3MgKiBtc1BlclNlY29uZDsKLSAgICAgICAg
dGhpc0RhdGVPYmotPmdldEdyZWdvcmlhbkRhdGVUaW1lKGV4ZWMsIGlucHV0SXNVVEMsIHQpOwor
ICAgIGlmIChudW1BcmdzVG9Vc2UgPT0gMyAmJiBpc25hbihtaWxsaSkpIHsKKyAgICAgICAgSlNW
YWx1ZSByZXN1bHQgPSBqc051bWJlcihleGVjLCAwKTsKKyAgICAgICAgdGhpc0RhdGVPYmotPnNl
dEludGVybmFsVmFsdWUocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CisK
KyAgICBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSogb3RoZXIgPSB0aGlzRGF0ZU9iai0+Z3JlZ29y
aWFuRGF0ZVRpbWUoZXhlYywgaW5wdXRJc1VUQyk7CisgICAgaWYgKCFvdGhlcikKKyAgICAgICAg
cmV0dXJuIGpzTmFOKGV4ZWMpOworCisgICAgR3JlZ29yaWFuRGF0ZVRpbWUgZ3JlZ29yaWFuRGF0
ZVRpbWU7CisgICAgZ3JlZ29yaWFuRGF0ZVRpbWUuY29weUZyb20oKm90aGVyKTsKICAgICAKLSAg
ICBpZiAoIWZpbGxTdHJ1Y3R1cmVzVXNpbmdEYXRlQXJncyhleGVjLCBhcmdzLCBudW1BcmdzVG9V
c2UsICZtcywgJnQpKSB7CisgICAgZG91YmxlIG1zID0gbWlsbGkgLSBmbG9vcihtaWxsaSAvIG1z
UGVyU2Vjb25kKSAqIG1zUGVyU2Vjb25kOworICAgIGlmICghZmlsbFN0cnVjdHVyZXNVc2luZ0Rh
dGVBcmdzKGV4ZWMsIGFyZ3MsIG51bUFyZ3NUb1VzZSwgJm1zLCAmZ3JlZ29yaWFuRGF0ZVRpbWUp
KSB7CiAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOYU4oZXhlYyk7CiAgICAgICAgIHRoaXNE
YXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKHJlc3VsdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfSAKICAgICAgICAgICAgCi0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihleGVj
LCBncmVnb3JpYW5EYXRlVGltZVRvTVModCwgbXMsIGlucHV0SXNVVEMpKTsKKyAgICBKU1ZhbHVl
IHJlc3VsdCA9IGpzTnVtYmVyKGV4ZWMsIGdyZWdvcmlhbkRhdGVUaW1lVG9NUyhncmVnb3JpYW5E
YXRlVGltZSwgbXMsIGlucHV0SXNVVEMpKTsKICAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxW
YWx1ZShyZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC05ODIsMTUgKzk4NiwxNiBA
QCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFllCiAgICAgZG91YmxlIG1p
bGxpID0gdGhpc0RhdGVPYmotPmludGVybmFsTnVtYmVyKCk7CiAgICAgZG91YmxlIG1zID0gMDsK
IAotICAgIEdyZWdvcmlhbkRhdGVUaW1lIHQ7CisgICAgR3JlZ29yaWFuRGF0ZVRpbWUgZ3JlZ29y
aWFuRGF0ZVRpbWU7CiAgICAgaWYgKGlzbmFuKG1pbGxpKSkKICAgICAgICAgLy8gQmFzZWQgb24g
RUNNQSAyNjIgQi4yLjUgKHNldFllYXIpCiAgICAgICAgIC8vIHRoZSB0aW1lIG11c3QgYmUgcmVz
ZXQgdG8gKzAgaWYgaXQgaXMgTmFOLiAKLSAgICAgICAgV1RGOjptc1RvR3JlZ29yaWFuRGF0ZVRp
bWUoMCwgdHJ1ZSwgdCk7CisgICAgICAgIFdURjo6bXNUb0dyZWdvcmlhbkRhdGVUaW1lKDAsIHRy
dWUsIGdyZWdvcmlhbkRhdGVUaW1lKTsKICAgICBlbHNlIHsgICAKICAgICAgICAgZG91YmxlIHNl
Y3MgPSBmbG9vcihtaWxsaSAvIG1zUGVyU2Vjb25kKTsKICAgICAgICAgbXMgPSBtaWxsaSAtIHNl
Y3MgKiBtc1BlclNlY29uZDsKLSAgICAgICAgdGhpc0RhdGVPYmotPmdldEdyZWdvcmlhbkRhdGVU
aW1lKGV4ZWMsIG91dHB1dElzVVRDLCB0KTsKKyAgICAgICAgaWYgKGNvbnN0IEdyZWdvcmlhbkRh
dGVUaW1lKiB0ID0gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lKGV4ZWMsIG91dHB1dElz
VVRDKSkKKyAgICAgICAgICAgIGdyZWdvcmlhbkRhdGVUaW1lLmNvcHlGcm9tKCp0KTsKICAgICB9
CiAgICAgCiAgICAgYm9vbCBvayA9IHRydWU7CkBAIC0xMDAxLDggKzEwMDYsOCBAQCBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFllCiAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfQogICAgICAgICAgICAgCi0gICAgdC55ZWFyID0gKHllYXIgPiA5OSB8fCB5ZWFyIDwg
MCkgPyB5ZWFyIC0gMTkwMCA6IHllYXI7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihl
eGVjLCBncmVnb3JpYW5EYXRlVGltZVRvTVModCwgbXMsIG91dHB1dElzVVRDKSk7CisgICAgZ3Jl
Z29yaWFuRGF0ZVRpbWUueWVhciA9ICh5ZWFyID4gOTkgfHwgeWVhciA8IDApID8geWVhciAtIDE5
MDAgOiB5ZWFyOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoZXhlYywgZ3JlZ29yaWFu
RGF0ZVRpbWVUb01TKGdyZWdvcmlhbkRhdGVUaW1lLCBtcywgb3V0cHV0SXNVVEMpKTsKICAgICB0
aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShyZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CkBAIC0xMDE2LDEyICsxMDIxLDEyIEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJv
dG9GdW5jR2V0WWUKIAogICAgIERhdGVJbnN0YW5jZSogdGhpc0RhdGVPYmogPSBhc0RhdGVJbnN0
YW5jZSh0aGlzVmFsdWUpOyAKIAotICAgIEdyZWdvcmlhbkRhdGVUaW1lIHQ7Ci0gICAgaWYgKCF0
aGlzRGF0ZU9iai0+Z2V0R3JlZ29yaWFuRGF0ZVRpbWUoZXhlYywgb3V0cHV0SXNVVEMsIHQpKQor
ICAgIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBncmVnb3JpYW5EYXRlVGltZSA9IHRoaXNEYXRl
T2JqLT5ncmVnb3JpYW5EYXRlVGltZShleGVjLCBvdXRwdXRJc1VUQyk7CisgICAgaWYgKCFncmVn
b3JpYW5EYXRlVGltZSkKICAgICAgICAgcmV0dXJuIGpzTmFOKGV4ZWMpOwogCiAgICAgLy8gTk9U
RTogSUUgcmV0dXJucyB0aGUgZnVsbCB5ZWFyIGV2ZW4gaW4gZ2V0WWVhci4KLSAgICByZXR1cm4g
anNOdW1iZXIoZXhlYywgdC55ZWFyKTsKKyAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgZ3JlZ29y
aWFuRGF0ZVRpbWUtPnllYXIpOwogfQogCiBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3Rv
RnVuY1RvSlNPTihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmKQo=
</data>
<flag name="review"
          id="23739"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>