<?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>142846</bug_id>
          
          <creation_ts>2015-03-18 16:18:11 -0700</creation_ts>
          <short_desc>JSCallbackObject&lt;JSGlobalObject&gt; should not destroy its JSCallbackObjectData before all its finalizers have been called</short_desc>
          <delta_ts>2015-03-20 11:11:41 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1078344</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-03-18 16:18:11 -0700</bug_when>
    <thetext>Currently, JSCallbackObject&lt;JSGlobalObject&gt; registers weak finalizers via 2 mechanisms:
1. JSCallbackObject&lt;Parent&gt;::init() registers a finalizer for all JSClassRef that a JSCallbackObject references.
2. JSCallbackObject&lt;JSGlobalObject&gt;::create() registers a finalizer via vm.heap.addFinalizer() which destroys the JSCallbackObject.

The first finalizer is implemented as a virtual function of a JSCallbackObjectData instance that will be destructed if the 2nd finalizer is called.  Hence, if the 2nd finalizer if called first, the later invocation of the 1st finalizer will result in a crash.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1078347</commentid>
    <comment_count>1</comment_count>
      <attachid>248980</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-03-18 16:25:58 -0700</bug_when>
    <thetext>Created attachment 248980
the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1078349</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-18 16:28:14 -0700</bug_when>
    <thetext>Attachment 248980 did not pass style-queue:


ERROR: Source/JavaScriptCore/API/JSCallbackObject.cpp:48:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/API/tests/GlobalContextWithFinalizerTest.cpp:48:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 2 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1078354</commentid>
    <comment_count>3</comment_count>
      <attachid>248980</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-03-18 16:35:49 -0700</bug_when>
    <thetext>Comment on attachment 248980
the patch.

View in context: https://bugs.webkit.org/attachment.cgi?id=248980&amp;action=review

&gt; Source/JavaScriptCore/API/JSCallbackObject.cpp:52
&gt; +static void destroyJSGlobalObjectCallbackObject(JSCell* cell)
&gt; +{
&gt; +    auto callbackObj = static_cast&lt;JSCallbackObject&lt;JSGlobalObject&gt;*&gt;(cell);
&gt; +
&gt; +    JSObjectRef thisRef = toRef(static_cast&lt;JSObject*&gt;(cell));
&gt; +    for (JSClassRef jsClass = callbackObj-&gt;classRef(); jsClass; jsClass = jsClass-&gt;parentClass)
&gt; +        if (JSObjectFinalizeCallback finalize = jsClass-&gt;finalize)
&gt; +            finalize(thisRef);
&gt; +
&gt; +    callbackObj-&gt;destroy(cell);

Can this code move into the destructor or into the existing destroy function? No need to have three.

&gt; Source/JavaScriptCore/API/JSCallbackObjectFunctions.h:117
&gt; +void JSCallbackObject&lt;Parent&gt;::installFinalizer(ExecState*)

Let&apos;s call this addFinalizerIfNeeded.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1078704</commentid>
    <comment_count>4</comment_count>
      <attachid>249074</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-03-19 18:18:35 -0700</bug_when>
    <thetext>Created attachment 249074
patch 2: now does the C finalizer callbacks in the JSCallbackObject destructor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1078721</commentid>
    <comment_count>5</comment_count>
      <attachid>249074</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-03-19 19:21:55 -0700</bug_when>
    <thetext>Comment on attachment 249074
patch 2: now does the C finalizer callbacks in the JSCallbackObject destructor.

r=me

Please fix Windows if needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1078761</commentid>
    <comment_count>6</comment_count>
      <attachid>249089</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-03-19 23:04:58 -0700</bug_when>
    <thetext>Created attachment 249089
patch 3: fixed Windows build, and broadened assertions.

Patch 3 broadens the assertions (added in HeapInlines.h) to also include cases where the object should not derive from JSDestructibleObject.  Previously, they only asserted the case where the object should derive from JSDestructibleObject.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1078898</commentid>
    <comment_count>7</comment_count>
      <attachid>249089</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-03-20 11:04:58 -0700</bug_when>
    <thetext>Comment on attachment 249089
patch 3: fixed Windows build, and broadened assertions.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1078900</commentid>
    <comment_count>8</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-03-20 11:10:04 -0700</bug_when>
    <thetext>Thanks for the review.  Landed in r181806: &lt;http://trac.webkit.org/r181806&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1078903</commentid>
    <comment_count>9</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-03-20 11:11:41 -0700</bug_when>
    <thetext>&lt;rdar://problem/19969183&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248980</attachid>
            <date>2015-03-18 16:25:58 -0700</date>
            <delta_ts>2015-03-19 18:18:35 -0700</delta_ts>
            <desc>the patch.</desc>
            <filename>bug-142846.patch</filename>
            <type>text/plain</type>
            <size>14831</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgxNzExKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQwIEBA
CisyMDE1LTAzLTE4ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBK
U0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0PiBzaG91bGQgbm90IGRlc3Ryb3kgaXRzIEpT
Q2FsbGJhY2tPYmplY3REYXRhIGJlZm9yZSBhbGwgaXRzIGZpbmFsaXplcnMgaGF2ZSBiZWVuIGNh
bGxlZC4KKyAgICAgICAgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE0Mjg0Nj4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDdXJyZW50bHksIEpTQ2FsbGJh
Y2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+IHJlZ2lzdGVycyB3ZWFrIGZpbmFsaXplcnMgdmlhIDIg
bWVjaGFuaXNtczoKKyAgICAgICAgMS4gSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+Ojppbml0KCkg
cmVnaXN0ZXJzIGEgZmluYWxpemVyIGZvciBhbGwgSlNDbGFzc1JlZgorICAgICAgICAgICB0aGF0
IGEgSlNDYWxsYmFja09iamVjdCByZWZlcmVuY2VzLgorICAgICAgICAyLiBKU0NhbGxiYWNrT2Jq
ZWN0PEpTR2xvYmFsT2JqZWN0Pjo6Y3JlYXRlKCkgcmVnaXN0ZXJzIGEgZmluYWxpemVyIHZpYQor
ICAgICAgICAgICB2bS5oZWFwLmFkZEZpbmFsaXplcigpIHdoaWNoIGRlc3Ryb3lzIHRoZSBKU0Nh
bGxiYWNrT2JqZWN0LgorCisgICAgICAgIFRoZSBmaXJzdCBmaW5hbGl6ZXIgaXMgaW1wbGVtZW50
ZWQgYXMgYSB2aXJ0dWFsIGZ1bmN0aW9uIG9mIGEgSlNDYWxsYmFja09iamVjdERhdGEKKyAgICAg
ICAgaW5zdGFuY2UgdGhhdCB3aWxsIGJlIGRlc3RydWN0ZWQgaWYgdGhlIDJuZCBmaW5hbGl6ZXIg
aXMgY2FsbGVkLiAgSGVuY2UsIGlmIHRoZQorICAgICAgICAybmQgZmluYWxpemVyIGlmIGNhbGxl
ZCBmaXJzdCwgdGhlIGxhdGVyIGludm9jYXRpb24gb2YgdGhlIDFzdCBmaW5hbGl6ZXIgd2lsbAor
ICAgICAgICByZXN1bHQgaW4gYSBjcmFzaC4KKworICAgICAgICBUaGlzIHBhdGNoIGZpeGVzIHRo
ZSBpc3N1ZSBieSB1bmlmeWluZyB0aGUgZmluYWxpemVycyBmb3IgSlNDYWxsYmFja09iamVjdDxK
U0dsb2JhbE9iamVjdD4KKyAgICAgICAgYW5kIG9ubHkgZGVzdHJveXMgaXQgYWZ0ZXIgYWxsIGl0
cyBKU0NsYXNzUmVmIGZpbmFsaXplcnMgaGF2ZSBiZWVuIGNhbGxlZC4KKworICAgICAgICAqIEFQ
SS9KU0NhbGxiYWNrT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6ZGVzdHJveUpTR2xvYmFsT2Jq
ZWN0Q2FsbGJhY2tPYmplY3QpOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrT2JqZWN0PEpTR2xv
YmFsT2JqZWN0Pjo6aW5zdGFsbEZpbmFsaXplcik6CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tP
YmplY3Q8SlNHbG9iYWxPYmplY3Q+OjpjcmVhdGUpOgorICAgICAgICAqIEFQSS9KU0NhbGxiYWNr
T2JqZWN0Lmg6CisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaDoKKyAg
ICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVjdDxQYXJlbnQ+Ojppbml0KToKKyAgICAgICAgKEpT
Qzo6SlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjppbnN0YWxsRmluYWxpemVyKToKKyAgICAgICAg
KiBBUEkvdGVzdHMvR2xvYmFsQ29udGV4dFdpdGhGaW5hbGl6ZXJUZXN0LmNwcDogQWRkZWQuCisg
ICAgICAgIChmaW5hbGl6ZSk6CisgICAgICAgICh0ZXN0R2xvYmFsQ29udGV4dFdpdGhGaW5hbGl6
ZXIpOgorICAgICAgICAqIEFQSS90ZXN0cy9HbG9iYWxDb250ZXh0V2l0aEZpbmFsaXplclRlc3Qu
aDogQWRkZWQuCisgICAgICAgICogQVBJL3Rlc3RzL3Rlc3RhcGkuYzoKKyAgICAgICAgKG1haW4p
OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisK
IDIwMTUtMDMtMTcgIFJ5dWFuIENob2kgIDxyeXVhbi5jaG9pQG5hdmVyY29ycC5jb20+CiAKICAg
ICAgICAgW0VGTF0gRXhwb3NlIEphdmFTY3JpcHQgYmluZGluZyBpbnRlcmZhY2UgdGhyb3VnaCBl
d2tfZXh0ZW5zaW9uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxs
YmFja09iamVjdC5jcHAJKHJldmlzaW9uIDE4MTcwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNDYWxsYmFja09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDEyICs0MCwy
OSBAQCB0ZW1wbGF0ZSA8PiBjb25zdCBDbGFzc0luZm8gSlNDYWxsYmFja09iCiB0ZW1wbGF0ZTw+
IGNvbnN0IGJvb2wgSlNDYWxsYmFja09iamVjdDxKU0Rlc3RydWN0aWJsZU9iamVjdD46Om5lZWRz
RGVzdHJ1Y3Rpb24gPSB0cnVlOwogdGVtcGxhdGU8PiBjb25zdCBib29sIEpTQ2FsbGJhY2tPYmpl
Y3Q8SlNHbG9iYWxPYmplY3Q+OjpuZWVkc0Rlc3RydWN0aW9uID0gZmFsc2U7CiAKK3N0YXRpYyB2
b2lkIGRlc3Ryb3lKU0dsb2JhbE9iamVjdENhbGxiYWNrT2JqZWN0KEpTQ2VsbCogY2VsbCkKK3sK
KyAgICBhdXRvIGNhbGxiYWNrT2JqID0gc3RhdGljX2Nhc3Q8SlNDYWxsYmFja09iamVjdDxKU0ds
b2JhbE9iamVjdD4qPihjZWxsKTsKKworICAgIEpTT2JqZWN0UmVmIHRoaXNSZWYgPSB0b1JlZihz
dGF0aWNfY2FzdDxKU09iamVjdCo+KGNlbGwpKTsKKyAgICBmb3IgKEpTQ2xhc3NSZWYganNDbGFz
cyA9IGNhbGxiYWNrT2JqLT5jbGFzc1JlZigpOyBqc0NsYXNzOyBqc0NsYXNzID0ganNDbGFzcy0+
cGFyZW50Q2xhc3MpCisgICAgICAgIGlmIChKU09iamVjdEZpbmFsaXplQ2FsbGJhY2sgZmluYWxp
emUgPSBqc0NsYXNzLT5maW5hbGl6ZSkKKyAgICAgICAgICAgIGZpbmFsaXplKHRoaXNSZWYpOwor
CisgICAgY2FsbGJhY2tPYmotPmRlc3Ryb3koY2VsbCk7Cit9CisKK3RlbXBsYXRlIDw+Cit2b2lk
IEpTQ2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+OjppbnN0YWxsRmluYWxpemVyKEV4ZWNT
dGF0ZSogZXhlYykKK3sKKyAgICBleGVjLT52bSgpLmhlYXAuYWRkRmluYWxpemVyKHRoaXMsIGRl
c3Ryb3lKU0dsb2JhbE9iamVjdENhbGxiYWNrT2JqZWN0KTsKK30KKwogdGVtcGxhdGU8PgogSlND
YWxsYmFja09iamVjdDxKU0dsb2JhbE9iamVjdD4qIEpTQ2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxP
YmplY3Q+OjpjcmVhdGUoVk0mIHZtLCBKU0NsYXNzUmVmIGNsYXNzUmVmLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKIHsKICAgICBKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0PiogY2FsbGJh
Y2tPYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0NhbGxiYWNrT2JqZWN0PEpT
R2xvYmFsT2JqZWN0Pj4odm0uaGVhcCkpIEpTQ2FsbGJhY2tPYmplY3Qodm0sIGNsYXNzUmVmLCBz
dHJ1Y3R1cmUpOwogICAgIGNhbGxiYWNrT2JqZWN0LT5maW5pc2hDcmVhdGlvbih2bSk7Ci0gICAg
dm0uaGVhcC5hZGRGaW5hbGl6ZXIoY2FsbGJhY2tPYmplY3QsIGRlc3Ryb3kpOwogICAgIHJldHVy
biBjYWxsYmFja09iamVjdDsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0NhbGxiYWNrT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0NhbGxiYWNrT2JqZWN0LmgJKHJldmlzaW9uIDE4MTcwOSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAsNyAr
MjAwLDggQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICB2b2lkIGluaXQoRXhlY1N0YXRlKik7Ci0g
CisgICAgdm9pZCBpbnN0YWxsRmluYWxpemVyKEV4ZWNTdGF0ZSopOworCiAgICAgc3RhdGljIEpT
Q2FsbGJhY2tPYmplY3QqIGFzQ2FsbGJhY2tPYmplY3QoSlNWYWx1ZSk7CiAgICAgc3RhdGljIEpT
Q2FsbGJhY2tPYmplY3QqIGFzQ2FsbGJhY2tPYmplY3QoRW5jb2RlZEpTVmFsdWUpOwogIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0
RnVuY3Rpb25zLmgJKHJldmlzaW9uIDE4MTcwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsNiAr
MTEwLDEyIEBAIHZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+Ojppbml0KEV4ZWMKICAgICAg
ICAgaW5pdGlhbGl6ZSh0b1JlZihleGVjKSwgdG9SZWYodGhpcykpOwogICAgIH0KIAorICAgIGlu
c3RhbGxGaW5hbGl6ZXIoZXhlYyk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+Cit2b2lk
IEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6aW5zdGFsbEZpbmFsaXplcihFeGVjU3RhdGUqKQor
ewogICAgIGZvciAoSlNDbGFzc1JlZiBqc0NsYXNzUHRyID0gY2xhc3NSZWYoKTsganNDbGFzc1B0
cjsganNDbGFzc1B0ciA9IGpzQ2xhc3NQdHItPnBhcmVudENsYXNzKSB7CiAgICAgICAgIGlmIChq
c0NsYXNzUHRyLT5maW5hbGl6ZSkgewogICAgICAgICAgICAgV2Vha1NldDo6YWxsb2NhdGUodGhp
cywgbV9jYWxsYmFja09iamVjdERhdGEuZ2V0KCksIGNsYXNzUmVmKCkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9HbG9iYWxDb250ZXh0V2l0aEZpbmFsaXplclRlc3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvR2xvYmFs
Q29udGV4dFdpdGhGaW5hbGl6ZXJUZXN0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvdGVzdHMvR2xvYmFsQ29udGV4dFdpdGhGaW5hbGl6ZXJUZXN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkdsb2JhbENvbnRleHRXaXRoRmluYWxpemVyVGVzdC5oIgorCisj
aWYgT1MoREFSV0lOKQorCisjaW5jbHVkZSAiSmF2YVNjcmlwdENvcmUuaCIKKyNpbmNsdWRlIDx3
dGYvRGF0YUxvZy5oPgorCitzdGF0aWMgYm9vbCBmYWlsZWQgPSB0cnVlOworCitzdGF0aWMgdm9p
ZCBmaW5hbGl6ZShKU09iamVjdFJlZikKK3sKKyAgICBmYWlsZWQgPSBmYWxzZTsKK30KKworaW50
IHRlc3RHbG9iYWxDb250ZXh0V2l0aEZpbmFsaXplcigpCit7CisgICAgSlNDbGFzc0RlZmluaXRp
b24gZGVmID0ga0pTQ2xhc3NEZWZpbml0aW9uRW1wdHk7CisgICAgZGVmLmNsYXNzTmFtZSA9ICJ0
ZXN0Q2xhc3MiOworICAgIGRlZi5maW5hbGl6ZSA9IGZpbmFsaXplOworICAgIEpTQ2xhc3NSZWYg
Y2xhc3NSZWYgPSBKU0NsYXNzQ3JlYXRlKCZkZWYpOworICAgIAorICAgIEpTR2xvYmFsQ29udGV4
dFJlZiByZWYgPSBKU0dsb2JhbENvbnRleHRDcmVhdGVJbkdyb3VwKE5VTEwsIGNsYXNzUmVmKTsK
KyAgICBKU0dsb2JhbENvbnRleHRSZWxlYXNlKHJlZik7CisgICAgSlNDbGFzc1JlbGVhc2UoY2xh
c3NSZWYpOworCisgICAgaWYgKGZhaWxlZCkKKyAgICAgICAgcHJpbnRmKCJGQUlMOiBKU0dsb2Jh
bENvbnRleHRSZWYgZGlkIG5vdCBjYWxsIGl0cyBKU0NsYXNzUmVmIGZpbmFsaXplci5cbiIpOwor
ICAgIGVsc2UKKyAgICAgICAgcHJpbnRmKCJQQVNTOiBKU0dsb2JhbENvbnRleHRSZWYgY2FsbGVk
IGl0cyBKU0NsYXNzUmVmIGZpbmFsaXplciBhcyBleHBlY3RlZC5cbiIpOworCisgICAgcmV0dXJu
IGZhaWxlZDsKK30KKworI2VuZGlmIC8vIE9TKERBUldJTikKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvdGVzdHMvR2xvYmFsQ29udGV4dFdpdGhGaW5hbGl6ZXJUZXN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9HbG9iYWxDb250ZXh0V2l0
aEZpbmFsaXplclRlc3QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvdGVzdHMvR2xvYmFsQ29udGV4dFdpdGhGaW5hbGl6ZXJUZXN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgR2xvYmFsQ29udGV4dFdpdGhG
aW5hbGl6ZXJUZXN0X2gKKyNkZWZpbmUgR2xvYmFsQ29udGV4dFdpdGhGaW5hbGl6ZXJUZXN0X2gK
KworI2luY2x1ZGUgIkpTQ29udGV4dFJlZlByaXZhdGUuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVz
CitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiBSZXR1cm5zIDEgaWYgZmFpbHVyZXMgd2VyZSBl
bmNvdW50ZXJlZC4gIEVsc2UsIHJldHVybnMgMC4gKi8KK2ludCB0ZXN0R2xvYmFsQ29udGV4dFdp
dGhGaW5hbGl6ZXIoKTsKKyAgICAKKyNpZmRlZiBfX2NwbHVzcGx1cworfSAvKiBleHRlcm4gIkMi
ICovCisjZW5kaWYKKworI2VuZGlmIC8qIEdsb2JhbENvbnRleHRXaXRoRmluYWxpemVyVGVzdF9o
ICovCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuYwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuYwkocmV2
aXNpb24gMTgxNzA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBp
LmMJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAKIAogI2luY2x1ZGUgIkNvbXBhcmVB
bmRTd2FwVGVzdC5oIgogI2luY2x1ZGUgIkN1c3RvbUdsb2JhbE9iamVjdENsYXNzVGVzdC5oIgor
I2luY2x1ZGUgIkdsb2JhbENvbnRleHRXaXRoRmluYWxpemVyVGVzdC5oIgogCiAjaWYgT1MoREFS
V0lOKQogI2luY2x1ZGUgIkV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuaCIKQEAgLTExMTEsNyArMTEx
Miw2IEBAIHN0YXRpYyB2b2lkIGNoZWNrQ29uc3RuZXNzSW5KU09iamVjdE5hbWUKICAgICB2YWwu
bmFtZSA9ICJzb21ldGhpbmciOwogfQogCi0KIGludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2
W10pCiB7CiAjaWYgT1MoV0lORE9XUykKQEAgLTE4NTYsNiArMTg1Niw3IEBAIGludCBtYWluKGlu
dCBhcmdjLCBjaGFyKiBhcmd2W10pCiAjaWYgT1MoREFSV0lOKQogICAgIGZhaWxlZCA9IHRlc3RF
eGVjdXRpb25UaW1lTGltaXQoJmNvbnRleHQpIHx8IGZhaWxlZDsKICNlbmRpZiAvKiBPUyhEQVJX
SU4pICovCisgICAgZmFpbGVkID0gdGVzdEdsb2JhbENvbnRleHRXaXRoRmluYWxpemVyKCkgfHwg
ZmFpbGVkOwogCiAgICAgLy8gQ2xlYXIgb3V0IGxvY2FsIHZhcmlhYmxlcyBwb2ludGluZyBhdCBK
U09iamVjdFJlZnMgdG8gYWxsb3cgdGhlaXIgdmFsdWVzIHRvIGJlIGNvbGxlY3RlZAogICAgIGZ1
bmN0aW9uID0gTlVMTDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAxODE3MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTYxMiw2ICsxNjEyLDcgQEAK
IAkJRTQ5REMxNkMxMkVGMjk0RTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0OURDMTUxMTJFRjI3
MjIwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ5REMxNkQxMkVGMjk1MzAwMTg0QTFGIC8q
IFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFNDlEQzE0OTEyRUYyNjFBMDAxODRBMUYgLyogU291cmNlUHJvdmlk
ZXJDYWNoZUl0ZW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlGRTBENEEwNjFBQjhERDBBMDAyRjU0QkYgLyogRXhlY3V0aW9uVGltZUxpbWl0VGVz
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTBE
NEEwNDFBQjhERDBBMDAyRjU0QkYgLyogRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5jcHAgKi87IH07
CisJCUZFMEQ0QTA5MUFCQTI0MzcwMDJGNTRCRiAvKiBHbG9iYWxDb250ZXh0V2l0aEZpbmFsaXpl
clRlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkUwRDRBMDcxQUJBMjQzNzAwMkY1NEJGIC8qIEdsb2JhbENvbnRleHRXaXRoRmluYWxpemVyVGVz
dC5jcHAgKi87IH07CiAJCUZFMjBDRTlEMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMjBDRTlC
MTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmNwcCAqLzsgfTsKIAkJRkUyMENFOUUxNUYw
NEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEZFMjBDRTlDMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29w
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkU0
QTMzMUYxNUJEMkUwNzAwNkY1NEYzIC8qIFZNSW5zcGVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNEEzMzFEMTVCRDJFMDcwMDZGNTRGMyAv
KiBWTUluc3BlY3Rvci5jcHAgKi87IH07CkBAIC0zMzYwLDYgKzMzNjEsOCBAQAogCQlGNjkyQTg4
NzAyNTU1OTdEMDFGRjYwRjcgLyogSlNDSlNWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NKU1ZhbHVlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OwogCQlGRTBENEEwNDFBQjhERDBBMDAy
RjU0QkYgLyogRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBFeGVjdXRpb25UaW1lTGltaXRUZXN0LmNwcDsgcGF0aCA9IEFQSS90
ZXN0cy9FeGVjdXRpb25UaW1lTGltaXRUZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRkUwRDRBMDUxQUI4REQwQTAwMkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3Qu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRXhlY3V0aW9uVGltZUxpbWl0VGVz
dC5oOyBwYXRoID0gQVBJL3Rlc3RzL0V4ZWN1dGlvblRpbWVMaW1pdFRlc3QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkUwRDRBMDcxQUJBMjQzNzAwMkY1NEJGIC8qIEdsb2JhbENv
bnRleHRXaXRoRmluYWxpemVyVGVzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBHbG9iYWxDb250ZXh0V2l0aEZpbmFsaXplclRlc3QuY3BwOyBwYXRoID0gQVBJL3Rl
c3RzL0dsb2JhbENvbnRleHRXaXRoRmluYWxpemVyVGVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUZFMEQ0QTA4MUFCQTI0MzcwMDJGNTRCRiAvKiBHbG9iYWxDb250ZXh0V2l0
aEZpbmFsaXplclRlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gR2xvYmFs
Q29udGV4dFdpdGhGaW5hbGl6ZXJUZXN0Lmg7IHBhdGggPSBBUEkvdGVzdHMvR2xvYmFsQ29udGV4
dFdpdGhGaW5hbGl6ZXJUZXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMjBD
RTlCMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IExMSW50Q0xvb3AuY3BwOyBwYXRoID0gbGxpbnQvTExJbnRDTG9v
cC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMjBDRTlDMTVGMDRBOTUwMERG
MzQzMCAvKiBMTEludENMb29wLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IExM
SW50Q0xvb3AuaDsgcGF0aCA9IGxsaW50L0xMSW50Q0xvb3AuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRkU0QTMzMUQxNUJEMkUwNzAwNkY1NEYzIC8qIFZNSW5zcGVjdG9yLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZNSW5zcGVjdG9yLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM3NDcsNiArMzc1MCw4IEBACiAJCQkJQzI4OEIy
REQxOEE1NEQzRTAwN0JFNDBCIC8qIERhdGVUZXN0cy5tbSAqLywKIAkJCQlGRTBENEEwNDFBQjhE
RDBBMDAyRjU0QkYgLyogRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5jcHAgKi8sCiAJCQkJRkUwRDRB
MDUxQUI4REQwQTAwMkY1NEJGIC8qIEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuaCAqLywKKwkJCQlG
RTBENEEwNzFBQkEyNDM3MDAyRjU0QkYgLyogR2xvYmFsQ29udGV4dFdpdGhGaW5hbGl6ZXJUZXN0
LmNwcCAqLywKKwkJCQlGRTBENEEwODFBQkEyNDM3MDAyRjU0QkYgLyogR2xvYmFsQ29udGV4dFdp
dGhGaW5hbGl6ZXJUZXN0LmggKi8sCiAJCQkJQzIxODFGQzAxOEE5NDhGQjAwMjVBMjM1IC8qIEpT
RXhwb3J0VGVzdHMuaCAqLywKIAkJCQlDMjE4MUZDMTE4QTk0OEZCMDAyNUEyMzUgLyogSlNFeHBv
cnRUZXN0cy5tbSAqLywKIAkJCQk2NTU3MEY1ODFBQTRDMDBBMDA5QjNDMjMgLyogUmVncmVzczE0
MTI3NS5oICovLApAQCAtNjc4Nyw2ICs2NzkyLDcgQEAKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWls
ZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAor
CQkJCUZFMEQ0QTA5MUFCQTI0MzcwMDJGNTRCRiAvKiBHbG9iYWxDb250ZXh0V2l0aEZpbmFsaXpl
clRlc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjU1NzBGNUExQUE0QzNFQTAwOUIzQzIzIC8q
IFJlZ3Jlc3MxNDEyNzUubW0gaW4gU291cmNlcyAqLywKIAkJCQlDMjlFQ0IwMzE4MDREMEVEMDBE
MkNCQjQgLyogQ3VycmVudFRoaXNJbnNpZGVCbG9ja0dldHRlclRlc3QubW0gaW4gU291cmNlcyAq
LywKIAkJCQlGRUI1MUY2QzFBOTdCNjg4MDAxRjkyMUMgLyogUmVncmVzczE0MTgwOS5tbSBpbiBT
b3VyY2VzICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249074</attachid>
            <date>2015-03-19 18:18:35 -0700</date>
            <delta_ts>2015-03-19 23:04:58 -0700</delta_ts>
            <desc>patch 2: now does the C finalizer callbacks in the JSCallbackObject destructor.</desc>
            <filename>bug-142846.patch</filename>
            <type>text/plain</type>
            <size>19877</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgxNzc0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUyIEBA
CisyMDE1LTAzLTE5ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBK
U0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0PiBzaG91bGQgbm90IGRlc3Ryb3kgaXRzIEpT
Q2FsbGJhY2tPYmplY3REYXRhIGJlZm9yZSBhbGwgaXRzIGZpbmFsaXplcnMgaGF2ZSBiZWVuIGNh
bGxlZC4KKyAgICAgICAgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE0Mjg0Nj4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDdXJyZW50bHksIEpTQ2FsbGJh
Y2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+IHJlZ2lzdGVycyB3ZWFrIGZpbmFsaXplcnMgdmlhIDIg
bWVjaGFuaXNtczoKKyAgICAgICAgMS4gSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+Ojppbml0KCkg
cmVnaXN0ZXJzIGEgd2VhayBmaW5hbGl6ZXIgZm9yIGFsbCBKU0NsYXNzUmVmCisgICAgICAgICAg
IHRoYXQgYSBKU0NhbGxiYWNrT2JqZWN0IHJlZmVyZW5jZXMuCisgICAgICAgIDIuIEpTQ2FsbGJh
Y2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+OjpjcmVhdGUoKSByZWdpc3RlcnMgYSBmaW5hbGl6ZXIg
dmlhCisgICAgICAgICAgIHZtLmhlYXAuYWRkRmluYWxpemVyKCkgd2hpY2ggZGVzdHJveXMgdGhl
IEpTQ2FsbGJhY2tPYmplY3QuCisKKyAgICAgICAgVGhlIGZpcnN0IGZpbmFsaXplciBpcyBpbXBs
ZW1lbnRlZCBhcyBhIHZpcnR1YWwgZnVuY3Rpb24gb2YgYSBKU0NhbGxiYWNrT2JqZWN0RGF0YQor
ICAgICAgICBpbnN0YW5jZSB0aGF0IHdpbGwgYmUgZGVzdHJ1Y3RlZCBpZiB0aGUgMm5kIGZpbmFs
aXplciBpcyBjYWxsZWQuICBIZW5jZSwgaWYgdGhlCisgICAgICAgIDJuZCBmaW5hbGl6ZXIgaWYg
Y2FsbGVkIGZpcnN0LCB0aGUgbGF0ZXIgaW52b2NhdGlvbiBvZiB0aGUgMXN0IGZpbmFsaXplciB3
aWxsCisgICAgICAgIHJlc3VsdCBpbiBhIGNyYXNoLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZml4
ZXMgdGhlIGlzc3VlIGJ5IGVsaW1pbmF0aW5nIHRoZSBmaW5hbGl6ZXIgcmVnaXN0cmF0aW9uIGlu
IGluaXQoKS4KKyAgICAgICAgSW5zdGVhZCwgd2UnbGwgaGF2ZSB0aGUgSlNDYWxsYmFja09iamVj
dCBkZXN0cnVjdG9yIGNhbGwgYWxsIHRoZSBKU0NsYXNzUmVmIGZpbmFsaXplcnMKKyAgICAgICAg
aWYgbmVlZGVkLiAgVGhpcyBlbnN1cmVzIHRoYXQgdGhlc2UgZmluYWxpemVycyBhcmUgY2FsbGVk
IGJlZm9yZSB0aGUgSlNDYWxsYmFja09iamVjdAorICAgICAgICBpcyBkZXN0cnVjdG9yLgorCisg
ICAgICAgIEFsc28gYWRkZWQgYXNzZXJ0aW9ucyB0byBhIGZldyBIZWFwIGZ1bmN0aW9ucyBiZWNh
dXNlIEpTQ2VsbDo6Y2xhc3NJbmZvKCkgZXhwZWN0cworICAgICAgICBhbGwgb2JqZWN0cyB0aGF0
IGFyZSBhbGxvY2F0ZWQgZnJvbSBNYXJrZWRCbG9jazo6Tm9ybWFsIGJsb2NrcyB0byBiZSBkZXJp
dmVkIGZyb20KKyAgICAgICAgSlNEZXN0cnVjdGlibGVPYmplY3QuICBUaGVzZSBhc3NlcnRpb25z
IHdpbGwgaGVscCB1cyBjYXRjaCB2aW9sYXRpb25zIG9mIHRoaXMKKyAgICAgICAgZXhwZWN0YXRp
b24gZWFybGllci4KKworICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0LmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNDYWxsYmFja09iamVjdERhdGE6OmZpbmFsaXplKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBBUEkvSlNDYWxsYmFja09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrT2Jq
ZWN0RGF0YTo6fkpTQ2FsbGJhY2tPYmplY3REYXRhKToKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFj
a09iamVjdEZ1bmN0aW9ucy5oOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrT2JqZWN0PFBhcmVu
dD46On5KU0NhbGxiYWNrT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVjdDxQ
YXJlbnQ+Ojppbml0KToKKyAgICAgICAgKiBBUEkvdGVzdHMvR2xvYmFsQ29udGV4dFdpdGhGaW5h
bGl6ZXJUZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChmaW5hbGl6ZSk6CisgICAgICAgICh0ZXN0
R2xvYmFsQ29udGV4dFdpdGhGaW5hbGl6ZXIpOgorICAgICAgICAqIEFQSS90ZXN0cy9HbG9iYWxD
b250ZXh0V2l0aEZpbmFsaXplclRlc3QuaDogQWRkZWQuCisgICAgICAgICogQVBJL3Rlc3RzL3Rl
c3RhcGkuYzoKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHBy
b2ovdGVzdGFwaS90ZXN0YXBpLnZjeHByb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4
cHJvai90ZXN0YXBpL3Rlc3RhcGkudmN4cHJvai5maWx0ZXJzOgorICAgICAgICAqIEphdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaGVhcC9IZWFwSW5s
aW5lcy5oOgorICAgICAgICAoSlNDOjpIZWFwOjphbGxvY2F0ZU9iamVjdE9mVHlwZSk6CisgICAg
ICAgIChKU0M6OkhlYXA6OnN1YnNwYWNlRm9yT2JqZWN0T2ZUeXBlKToKKyAgICAgICAgKEpTQzo6
SGVhcDo6YWxsb2NhdG9yRm9yT2JqZWN0T2ZUeXBlKToKKwogMjAxNS0wMy0xOSAgQW5kcmVhcyBL
bGluZyAgPGFrbGluZ0BhcHBsZS5jb20+CiAKICAgICAgICAgSlNDYWxsZWUgdW5uZWNlc3Nhcmls
eSBvdmVycmlkZXMgYSBidW5jaCBvZiB0aGluZ3MgaW4gdGhlIG1ldGhvZCB0YWJsZS4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmNwcAkocmV2
aXNpb24gMTgxNzE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsMTUgKzYxLDQgQEAgU3RydWN0dXJlKiBKU0Nh
bGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZQogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oR2xvYmFsT2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCBpbmZvKCkpOyAKIH0KIAotdm9pZCBKU0NhbGxiYWNrT2JqZWN0RGF0YTo6Zmlu
YWxpemUoSGFuZGxlPFVua25vd24+IGhhbmRsZSwgdm9pZCogY29udGV4dCkKLXsKLSAgICBKU0Ns
YXNzUmVmIGpzQ2xhc3MgPSBzdGF0aWNfY2FzdDxKU0NsYXNzUmVmPihjb250ZXh0KTsKLSAgICBK
U09iamVjdFJlZiB0aGlzUmVmID0gdG9SZWYoc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihoYW5kbGUu
Z2V0KCkuYXNDZWxsKCkpKTsKLSAgICAKLSAgICBmb3IgKDsganNDbGFzczsganNDbGFzcyA9IGpz
Q2xhc3MtPnBhcmVudENsYXNzKQotICAgICAgICBpZiAoSlNPYmplY3RGaW5hbGl6ZUNhbGxiYWNr
IGZpbmFsaXplID0ganNDbGFzcy0+ZmluYWxpemUpCi0gICAgICAgICAgICBmaW5hbGl6ZSh0aGlz
UmVmKTsKLSAgICBXZWFrU2V0OjpkZWFsbG9jYXRlKFdlYWtJbXBsOjphc1dlYWtJbXBsKGhhbmRs
ZS5zbG90KCkpKTsKLX0KLSAgICAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHJldmlzaW9uIDE4MTcxNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdHJ1Y3QgSlND
YWxsYmFja09iamVjdERhdGEgOiBXZWFrSGFuZGxlT3duZXIgeworc3RydWN0IEpTQ2FsbGJhY2tP
YmplY3REYXRhIHsKICAgICBKU0NhbGxiYWNrT2JqZWN0RGF0YSh2b2lkKiBwcml2YXRlRGF0YSwg
SlNDbGFzc1JlZiBqc0NsYXNzKQogICAgICAgICA6IHByaXZhdGVEYXRhKHByaXZhdGVEYXRhKQog
ICAgICAgICAsIGpzQ2xhc3MoanNDbGFzcykKQEAgLTQxLDcgKzQxLDcgQEAgc3RydWN0IEpTQ2Fs
bGJhY2tPYmplY3REYXRhIDogV2Vha0hhbmRsZQogICAgICAgICBKU0NsYXNzUmV0YWluKGpzQ2xh
c3MpOwogICAgIH0KICAgICAKLSAgICB2aXJ0dWFsIH5KU0NhbGxiYWNrT2JqZWN0RGF0YSgpCisg
ICAgfkpTQ2FsbGJhY2tPYmplY3REYXRhKCkKICAgICB7CiAgICAgICAgIEpTQ2xhc3NSZWxlYXNl
KGpzQ2xhc3MpOwogICAgIH0KQEAgLTEwOSw3ICsxMDksNiBAQCBzdHJ1Y3QgSlNDYWxsYmFja09i
amVjdERhdGEgOiBXZWFrSGFuZGxlCiAgICAgICAgIFByaXZhdGVQcm9wZXJ0eU1hcCBtX3Byb3Bl
cnR5TWFwOwogICAgIH07CiAgICAgc3RkOjp1bmlxdWVfcHRyPEpTUHJpdmF0ZVByb3BlcnR5TWFw
PiBtX3ByaXZhdGVQcm9wZXJ0aWVzOwotICAgIHZpcnR1YWwgdm9pZCBmaW5hbGl6ZShIYW5kbGU8
VW5rbm93bj4sIHZvaWQqKSBvdmVycmlkZTsKIH07CiAKICAgICAKQEAgLTEyNSw2ICsxMjQsOCBA
QCBwcm90ZWN0ZWQ6CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBQYXJlbnQgQmFzZTsKIAorICAgIH5K
U0NhbGxiYWNrT2JqZWN0KCk7CisKICAgICBzdGF0aWMgSlNDYWxsYmFja09iamVjdCogY3JlYXRl
KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIEpTQ2xhc3NSZWYgY2xhc3NSZWYsIHZvaWQqIGRhdGEpCiAgICAgewogICAg
ICAgICBBU1NFUlRfVU5VU0VEKGdsb2JhbE9iamVjdCwgIXN0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0
KCkgfHwgc3RydWN0dXJlLT5nbG9iYWxPYmplY3QoKSA9PSBnbG9iYWxPYmplY3QpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVu
Y3Rpb25zLmgJKHJldmlzaW9uIDE4MTcxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3NCwx
NiBAQCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OkpTQ2FsbGJhY2tPYmplCiB9CiAKIHRlbXBs
YXRlIDxjbGFzcyBQYXJlbnQ+CitKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46On5KU0NhbGxiYWNr
T2JqZWN0KCkKK3sKKyAgICBKU09iamVjdFJlZiB0aGlzUmVmID0gdG9SZWYoc3RhdGljX2Nhc3Q8
SlNPYmplY3QqPih0aGlzKSk7CisgICAgZm9yIChKU0NsYXNzUmVmIGpzQ2xhc3MgPSBjbGFzc1Jl
ZigpOyBqc0NsYXNzOyBqc0NsYXNzID0ganNDbGFzcy0+cGFyZW50Q2xhc3MpIHsKKyAgICAgICAg
aWYgKEpTT2JqZWN0RmluYWxpemVDYWxsYmFjayBmaW5hbGl6ZSA9IGpzQ2xhc3MtPmZpbmFsaXpl
KQorICAgICAgICAgICAgZmluYWxpemUodGhpc1JlZik7CisgICAgfQorfQorICAgIAordGVtcGxh
dGUgPGNsYXNzIFBhcmVudD4KIHZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpmaW5pc2hD
cmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhl
Yy0+dm0oKSk7CkBAIC0xMDksMTMgKzExOSw2IEBAIHZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJl
bnQ+Ojppbml0KEV4ZWMKICAgICAgICAgSlNPYmplY3RJbml0aWFsaXplQ2FsbGJhY2sgaW5pdGlh
bGl6ZSA9IGluaXRSb3V0aW5lc1tpXTsKICAgICAgICAgaW5pdGlhbGl6ZSh0b1JlZihleGVjKSwg
dG9SZWYodGhpcykpOwogICAgIH0KLQotICAgIGZvciAoSlNDbGFzc1JlZiBqc0NsYXNzUHRyID0g
Y2xhc3NSZWYoKTsganNDbGFzc1B0cjsganNDbGFzc1B0ciA9IGpzQ2xhc3NQdHItPnBhcmVudENs
YXNzKSB7Ci0gICAgICAgIGlmIChqc0NsYXNzUHRyLT5maW5hbGl6ZSkgewotICAgICAgICAgICAg
V2Vha1NldDo6YWxsb2NhdGUodGhpcywgbV9jYWxsYmFja09iamVjdERhdGEuZ2V0KCksIGNsYXNz
UmVmKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CiB9CiAKIHRlbXBs
YXRlIDxjbGFzcyBQYXJlbnQ+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3Rz
L0dsb2JhbENvbnRleHRXaXRoRmluYWxpemVyVGVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9HbG9iYWxDb250ZXh0V2l0aEZpbmFsaXplclRlc3Qu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9HbG9i
YWxDb250ZXh0V2l0aEZpbmFsaXplclRlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR2xvYmFs
Q29udGV4dFdpdGhGaW5hbGl6ZXJUZXN0LmgiCisKKyNpZiBPUyhEQVJXSU4pCisKKyNpbmNsdWRl
ICJKYXZhU2NyaXB0Q29yZS5oIgorI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisKK3N0YXRpYyBi
b29sIGZhaWxlZCA9IHRydWU7CisKK3N0YXRpYyB2b2lkIGZpbmFsaXplKEpTT2JqZWN0UmVmKQor
eworICAgIGZhaWxlZCA9IGZhbHNlOworfQorCitpbnQgdGVzdEdsb2JhbENvbnRleHRXaXRoRmlu
YWxpemVyKCkKK3sKKyAgICBKU0NsYXNzRGVmaW5pdGlvbiBkZWYgPSBrSlNDbGFzc0RlZmluaXRp
b25FbXB0eTsKKyAgICBkZWYuY2xhc3NOYW1lID0gInRlc3RDbGFzcyI7CisgICAgZGVmLmZpbmFs
aXplID0gZmluYWxpemU7CisgICAgSlNDbGFzc1JlZiBjbGFzc1JlZiA9IEpTQ2xhc3NDcmVhdGUo
JmRlZik7CisgICAgCisgICAgSlNHbG9iYWxDb250ZXh0UmVmIHJlZiA9IEpTR2xvYmFsQ29udGV4
dENyZWF0ZUluR3JvdXAobnVsbHB0ciwgY2xhc3NSZWYpOworICAgIEpTR2xvYmFsQ29udGV4dFJl
bGVhc2UocmVmKTsKKyAgICBKU0NsYXNzUmVsZWFzZShjbGFzc1JlZik7CisKKyAgICBpZiAoZmFp
bGVkKQorICAgICAgICBwcmludGYoIkZBSUw6IEpTR2xvYmFsQ29udGV4dFJlZiBkaWQgbm90IGNh
bGwgaXRzIEpTQ2xhc3NSZWYgZmluYWxpemVyLlxuIik7CisgICAgZWxzZQorICAgICAgICBwcmlu
dGYoIlBBU1M6IEpTR2xvYmFsQ29udGV4dFJlZiBjYWxsZWQgaXRzIEpTQ2xhc3NSZWYgZmluYWxp
emVyIGFzIGV4cGVjdGVkLlxuIik7CisKKyAgICByZXR1cm4gZmFpbGVkOworfQorCisjZW5kaWYg
Ly8gT1MoREFSV0lOKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9HbG9i
YWxDb250ZXh0V2l0aEZpbmFsaXplclRlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL3Rlc3RzL0dsb2JhbENvbnRleHRXaXRoRmluYWxpemVyVGVzdC5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9HbG9iYWxDb250ZXh0
V2l0aEZpbmFsaXplclRlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBHbG9iYWxDb250ZXh0V2l0aEZpbmFsaXplclRlc3RfaAorI2RlZmlu
ZSBHbG9iYWxDb250ZXh0V2l0aEZpbmFsaXplclRlc3RfaAorCisjaW5jbHVkZSAiSlNDb250ZXh0
UmVmUHJpdmF0ZS5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlm
CisKKy8qIFJldHVybnMgMSBpZiBmYWlsdXJlcyB3ZXJlIGVuY291bnRlcmVkLiAgRWxzZSwgcmV0
dXJucyAwLiAqLworaW50IHRlc3RHbG9iYWxDb250ZXh0V2l0aEZpbmFsaXplcigpOworICAgIAor
I2lmZGVmIF9fY3BsdXNwbHVzCit9IC8qIGV4dGVybiAiQyIgKi8KKyNlbmRpZgorCisjZW5kaWYg
LyogR2xvYmFsQ29udGV4dFdpdGhGaW5hbGl6ZXJUZXN0X2ggKi8KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5jCShyZXZpc2lvbiAxODE3MTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuYwkod29ya2luZyBjb3B5KQpAQCAt
NDEsNiArNDEsNyBAQAogCiAjaW5jbHVkZSAiQ29tcGFyZUFuZFN3YXBUZXN0LmgiCiAjaW5jbHVk
ZSAiQ3VzdG9tR2xvYmFsT2JqZWN0Q2xhc3NUZXN0LmgiCisjaW5jbHVkZSAiR2xvYmFsQ29udGV4
dFdpdGhGaW5hbGl6ZXJUZXN0LmgiCiAKICNpZiBPUyhEQVJXSU4pCiAjaW5jbHVkZSAiRXhlY3V0
aW9uVGltZUxpbWl0VGVzdC5oIgpAQCAtMTg1Niw2ICsxODU3LDcgQEAgaW50IG1haW4oaW50IGFy
Z2MsIGNoYXIqIGFyZ3ZbXSkKICNpZiBPUyhEQVJXSU4pCiAgICAgZmFpbGVkID0gdGVzdEV4ZWN1
dGlvblRpbWVMaW1pdCgmY29udGV4dCkgfHwgZmFpbGVkOwogI2VuZGlmIC8qIE9TKERBUldJTikg
Ki8KKyAgICBmYWlsZWQgPSB0ZXN0R2xvYmFsQ29udGV4dFdpdGhGaW5hbGl6ZXIoKSB8fCBmYWls
ZWQ7CiAKICAgICAvLyBDbGVhciBvdXQgbG9jYWwgdmFyaWFibGVzIHBvaW50aW5nIGF0IEpTT2Jq
ZWN0UmVmcyB0byBhbGxvdyB0aGVpciB2YWx1ZXMgdG8gYmUgY29sbGVjdGVkCiAgICAgZnVuY3Rp
b24gPSBOVUxMOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
eHByb2ovdGVzdGFwaS90ZXN0YXBpLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovdGVzdGFwaS90ZXN0YXBpLnZjeHByb2oJ
KHJldmlzaW9uIDE4MTcxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qL3Rlc3RhcGkvdGVzdGFwaS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yOTYs
NiArMjk2LDggQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXEFQSVx0ZXN0c1xDb21w
YXJlQW5kU3dhcFRlc3QuaCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXEFQSVx0
ZXN0c1xDdXN0b21HbG9iYWxPYmplY3RDbGFzc1Rlc3QuYyIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXC4uXEFQSVx0ZXN0c1xDdXN0b21HbG9iYWxPYmplY3RDbGFzc1Rlc3QuaCIgLz4K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXEFQSVx0ZXN0c1xHbG9iYWxDb250ZXh0V2l0
aEZpbmFsaXplclRlc3QuY3BwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cQVBJ
XHRlc3RzXEdsb2JhbENvbnRleHRXaXRoRmluYWxpemVyVGVzdC5oIiAvPgogICA8L0l0ZW1Hcm91
cD4KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFy
Z2V0cyIgLz4KICAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL3Rlc3RhcGkvdGVz
dGFwaS52Y3hwcm9qLmZpbHRlcnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjeHByb2ovdGVzdGFwaS90ZXN0YXBpLnZjeHByb2ouZmlsdGVycwko
cmV2aXNpb24gMTgxNzE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2ovdGVzdGFwaS90ZXN0YXBpLnZjeHByb2ouZmlsdGVycwkod29ya2luZyBjb3B5KQpA
QCAtMTIsNSArMTIsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cQVBJXHRlc3Rz
XENvbXBhcmVBbmRTd2FwVGVzdC5oIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5c
QVBJXHRlc3RzXEN1c3RvbUdsb2JhbE9iamVjdENsYXNzVGVzdC5jIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cLi5cQVBJXHRlc3RzXEN1c3RvbUdsb2JhbE9iamVjdENsYXNzVGVzdC5o
IiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cQVBJXHRlc3RzXEdsb2JhbENvbnRl
eHRXaXRoRmluYWxpemVyVGVzdC5jcHAiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwu
LlxBUElcdGVzdHNcR2xvYmFsQ29udGV4dFdpdGhGaW5hbGl6ZXJUZXN0LmgiIC8+CiAgIDwvSXRl
bUdyb3VwPgogPC9Qcm9qZWN0PgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDE4MTcxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNjEyLDYgKzE2MTIs
NyBAQAogCQlFNDlEQzE2QzEyRUYyOTRFMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ5REMxNTEx
MkVGMjcyMjAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDlEQzE2RDEyRUYyOTUzMDAxODRB
MUYgLyogU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0OURDMTQ5MTJFRjI2MUEwMDE4NEExRiAvKiBTb3VyY2VQ
cm92aWRlckNhY2hlSXRlbS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUZFMEQ0QTA2MUFCOEREMEEwMDJGNTRCRiAvKiBFeGVjdXRpb25UaW1lTGlt
aXRUZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEZFMEQ0QTA0MUFCOEREMEEwMDJGNTRCRiAvKiBFeGVjdXRpb25UaW1lTGltaXRUZXN0LmNwcCAq
LzsgfTsKKwkJRkUwRDRBMDkxQUJBMjQzNzAwMkY1NEJGIC8qIEdsb2JhbENvbnRleHRXaXRoRmlu
YWxpemVyVGVzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRTBENEEwNzFBQkEyNDM3MDAyRjU0QkYgLyogR2xvYmFsQ29udGV4dFdpdGhGaW5hbGl6
ZXJUZXN0LmNwcCAqLzsgfTsKIAkJRkUyMENFOUQxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xv
b3AuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUy
MENFOUIxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuY3BwICovOyB9OwogCQlGRTIwQ0U5
RTE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUyMENFOUMxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50
Q0xvb3AuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlGRTRBMzMxRjE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU0QTMzMUQxNUJEMkUwNzAwNkY1
NEYzIC8qIFZNSW5zcGVjdG9yLmNwcCAqLzsgfTsKQEAgLTMzNjAsNiArMzM2MSw4IEBACiAJCUY2
OTJBODg3MDI1NTU5N0QwMUZGNjBGNyAvKiBKU0NKU1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ0pTVmFsdWUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IH07CiAJCUZFMEQ0QTA0MUFCOERE
MEEwMDJGNTRCRiAvKiBFeGVjdXRpb25UaW1lTGltaXRUZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEV4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwOyBwYXRoID0g
QVBJL3Rlc3RzL0V4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlGRTBENEEwNTFBQjhERDBBMDAyRjU0QkYgLyogRXhlY3V0aW9uVGltZUxpbWl0
VGVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBFeGVjdXRpb25UaW1lTGlt
aXRUZXN0Lmg7IHBhdGggPSBBUEkvdGVzdHMvRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTBENEEwNzFBQkEyNDM3MDAyRjU0QkYgLyogR2xv
YmFsQ29udGV4dFdpdGhGaW5hbGl6ZXJUZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IEdsb2JhbENvbnRleHRXaXRoRmluYWxpemVyVGVzdC5jcHA7IHBhdGggPSBB
UEkvdGVzdHMvR2xvYmFsQ29udGV4dFdpdGhGaW5hbGl6ZXJUZXN0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRkUwRDRBMDgxQUJBMjQzNzAwMkY1NEJGIC8qIEdsb2JhbENvbnRl
eHRXaXRoRmluYWxpemVyVGVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBH
bG9iYWxDb250ZXh0V2l0aEZpbmFsaXplclRlc3QuaDsgcGF0aCA9IEFQSS90ZXN0cy9HbG9iYWxD
b250ZXh0V2l0aEZpbmFsaXplclRlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RkUyMENFOUIxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTExJbnRDTG9vcC5jcHA7IHBhdGggPSBsbGludC9MTElu
dENMb29wLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUyMENFOUMxNUYwNEE5
NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gTExJbnRDTG9vcC5oOyBwYXRoID0gbGxpbnQvTExJbnRDTG9vcC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGRTRBMzMxRDE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3Iu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVk1JbnNwZWN0b3IuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzc0Nyw2ICszNzUwLDggQEAKIAkJCQlD
Mjg4QjJERDE4QTU0RDNFMDA3QkU0MEIgLyogRGF0ZVRlc3RzLm1tICovLAogCQkJCUZFMEQ0QTA0
MUFCOEREMEEwMDJGNTRCRiAvKiBFeGVjdXRpb25UaW1lTGltaXRUZXN0LmNwcCAqLywKIAkJCQlG
RTBENEEwNTFBQjhERDBBMDAyRjU0QkYgLyogRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5oICovLAor
CQkJCUZFMEQ0QTA3MUFCQTI0MzcwMDJGNTRCRiAvKiBHbG9iYWxDb250ZXh0V2l0aEZpbmFsaXpl
clRlc3QuY3BwICovLAorCQkJCUZFMEQ0QTA4MUFCQTI0MzcwMDJGNTRCRiAvKiBHbG9iYWxDb250
ZXh0V2l0aEZpbmFsaXplclRlc3QuaCAqLywKIAkJCQlDMjE4MUZDMDE4QTk0OEZCMDAyNUEyMzUg
LyogSlNFeHBvcnRUZXN0cy5oICovLAogCQkJCUMyMTgxRkMxMThBOTQ4RkIwMDI1QTIzNSAvKiBK
U0V4cG9ydFRlc3RzLm1tICovLAogCQkJCTY1NTcwRjU4MUFBNEMwMEEwMDlCM0MyMyAvKiBSZWdy
ZXNzMTQxMjc1LmggKi8sCkBAIC02Nzg3LDYgKzY3OTIsNyBAQAogCQkJaXNhID0gUEJYU291cmNl
c0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMg
PSAoCisJCQkJRkUwRDRBMDkxQUJBMjQzNzAwMkY1NEJGIC8qIEdsb2JhbENvbnRleHRXaXRoRmlu
YWxpemVyVGVzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2NTU3MEY1QTFBQTRDM0VBMDA5QjND
MjMgLyogUmVncmVzczE0MTI3NS5tbSBpbiBTb3VyY2VzICovLAogCQkJCUMyOUVDQjAzMTgwNEQw
RUQwMEQyQ0JCNCAvKiBDdXJyZW50VGhpc0luc2lkZUJsb2NrR2V0dGVyVGVzdC5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCUZFQjUxRjZDMUE5N0I2ODgwMDFGOTIxQyAvKiBSZWdyZXNzMTQxODA5Lm1t
IGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxp
bmVzLmgJKHJldmlzaW9uIDE4MTcxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXBJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDggQEAKICNpbmNsdWRlICJI
ZWFwLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCisjaW5j
bHVkZSA8dHlwZV90cmFpdHM+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNw
YWNlIEpTQyB7CiAKQEAgLTIzOSw4ICsyNDEsMTEgQEAgdm9pZCogSGVhcDo6YWxsb2NhdGVPYmpl
Y3RPZlR5cGUoc2l6ZV90IAogewogICAgIGlmIChDbGFzc1R5cGU6Om5lZWRzRGVzdHJ1Y3Rpb24g
JiYgQ2xhc3NUeXBlOjpoYXNJbW1vcnRhbFN0cnVjdHVyZSkKICAgICAgICAgcmV0dXJuIGFsbG9j
YXRlV2l0aEltbW9ydGFsU3RydWN0dXJlRGVzdHJ1Y3RvcihieXRlcyk7Ci0gICAgaWYgKENsYXNz
VHlwZTo6bmVlZHNEZXN0cnVjdGlvbikKKyAgICBpZiAoQ2xhc3NUeXBlOjpuZWVkc0Rlc3RydWN0
aW9uKSB7CisgICAgICAgIC8vIEpTQ2VsbDo6Y2xhc3NJbmZvKCkgZXhwZWN0cyBvYmplY3RzIGFs
bG9jYXRlZCB3aXRoIG5vcm1hbCBkZXN0cnVjdG9yIHRvIGRlcml2ZSBmcm9tIEpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0LgorICAgICAgICBBU1NFUlQoKHN0ZDo6aXNfY29udmVydGlibGU8Q2xhc3NUeXBl
LCBKU0Rlc3RydWN0aWJsZU9iamVjdD46OnZhbHVlKSk7CiAgICAgICAgIHJldHVybiBhbGxvY2F0
ZVdpdGhOb3JtYWxEZXN0cnVjdG9yKGJ5dGVzKTsKKyAgICB9CiAgICAgcmV0dXJuIGFsbG9jYXRl
V2l0aG91dERlc3RydWN0b3IoYnl0ZXMpOwogfQogCkBAIC0yNDksOCArMjU0LDExIEBAIE1hcmtl
ZFNwYWNlOjpTdWJzcGFjZSYgSGVhcDo6c3Vic3BhY2VGb3IKIHsKICAgICBpZiAoQ2xhc3NUeXBl
OjpuZWVkc0Rlc3RydWN0aW9uICYmIENsYXNzVHlwZTo6aGFzSW1tb3J0YWxTdHJ1Y3R1cmUpCiAg
ICAgICAgIHJldHVybiBzdWJzcGFjZUZvck9iamVjdHNXaXRoSW1tb3J0YWxTdHJ1Y3R1cmUoKTsK
LSAgICBpZiAoQ2xhc3NUeXBlOjpuZWVkc0Rlc3RydWN0aW9uKQorICAgIGlmIChDbGFzc1R5cGU6
Om5lZWRzRGVzdHJ1Y3Rpb24pIHsKKyAgICAgICAgLy8gSlNDZWxsOjpjbGFzc0luZm8oKSBleHBl
Y3RzIG9iamVjdHMgYWxsb2NhdGVkIHdpdGggbm9ybWFsIGRlc3RydWN0b3IgdG8gZGVyaXZlIGZy
b20gSlNEZXN0cnVjdGlibGVPYmplY3QuCisgICAgICAgIEFTU0VSVCgoc3RkOjppc19jb252ZXJ0
aWJsZTxDbGFzc1R5cGUsIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Pjo6dmFsdWUpKTsKICAgICAgICAg
cmV0dXJuIHN1YnNwYWNlRm9yT2JqZWN0Tm9ybWFsRGVzdHJ1Y3RvcigpOworICAgIH0KICAgICBy
ZXR1cm4gc3Vic3BhY2VGb3JPYmplY3RXaXRob3V0RGVzdHJ1Y3RvcigpOwogfQogCkBAIC0yNTks
OCArMjY3LDExIEBAIE1hcmtlZEFsbG9jYXRvciYgSGVhcDo6YWxsb2NhdG9yRm9yT2JqZWMKIHsK
ICAgICBpZiAoQ2xhc3NUeXBlOjpuZWVkc0Rlc3RydWN0aW9uICYmIENsYXNzVHlwZTo6aGFzSW1t
b3J0YWxTdHJ1Y3R1cmUpCiAgICAgICAgIHJldHVybiBhbGxvY2F0b3JGb3JPYmplY3RXaXRoSW1t
b3J0YWxTdHJ1Y3R1cmVEZXN0cnVjdG9yKGJ5dGVzKTsKLSAgICBpZiAoQ2xhc3NUeXBlOjpuZWVk
c0Rlc3RydWN0aW9uKQorICAgIGlmIChDbGFzc1R5cGU6Om5lZWRzRGVzdHJ1Y3Rpb24pIHsKKyAg
ICAgICAgLy8gSlNDZWxsOjpjbGFzc0luZm8oKSBleHBlY3RzIG9iamVjdHMgYWxsb2NhdGVkIHdp
dGggbm9ybWFsIGRlc3RydWN0b3IgdG8gZGVyaXZlIGZyb20gSlNEZXN0cnVjdGlibGVPYmplY3Qu
CisgICAgICAgIEFTU0VSVCgoc3RkOjppc19jb252ZXJ0aWJsZTxDbGFzc1R5cGUsIEpTRGVzdHJ1
Y3RpYmxlT2JqZWN0Pjo6dmFsdWUpKTsKICAgICAgICAgcmV0dXJuIGFsbG9jYXRvckZvck9iamVj
dFdpdGhOb3JtYWxEZXN0cnVjdG9yKGJ5dGVzKTsKKyAgICB9CiAgICAgcmV0dXJuIGFsbG9jYXRv
ckZvck9iamVjdFdpdGhvdXREZXN0cnVjdG9yKGJ5dGVzKTsKIH0KIAo=
</data>
<flag name="review"
          id="273912"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249089</attachid>
            <date>2015-03-19 23:04:58 -0700</date>
            <delta_ts>2015-03-20 11:04:58 -0700</delta_ts>
            <desc>patch 3: fixed Windows build, and broadened assertions.</desc>
            <filename>bug-142846.patch</filename>
            <type>text/plain</type>
            <size>19803</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgxNzc0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUyIEBA
CisyMDE1LTAzLTE5ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBK
U0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0PiBzaG91bGQgbm90IGRlc3Ryb3kgaXRzIEpT
Q2FsbGJhY2tPYmplY3REYXRhIGJlZm9yZSBhbGwgaXRzIGZpbmFsaXplcnMgaGF2ZSBiZWVuIGNh
bGxlZC4KKyAgICAgICAgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE0Mjg0Nj4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDdXJyZW50bHksIEpTQ2FsbGJh
Y2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+IHJlZ2lzdGVycyB3ZWFrIGZpbmFsaXplcnMgdmlhIDIg
bWVjaGFuaXNtczoKKyAgICAgICAgMS4gSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+Ojppbml0KCkg
cmVnaXN0ZXJzIGEgd2VhayBmaW5hbGl6ZXIgZm9yIGFsbCBKU0NsYXNzUmVmCisgICAgICAgICAg
IHRoYXQgYSBKU0NhbGxiYWNrT2JqZWN0IHJlZmVyZW5jZXMuCisgICAgICAgIDIuIEpTQ2FsbGJh
Y2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+OjpjcmVhdGUoKSByZWdpc3RlcnMgYSBmaW5hbGl6ZXIg
dmlhCisgICAgICAgICAgIHZtLmhlYXAuYWRkRmluYWxpemVyKCkgd2hpY2ggZGVzdHJveXMgdGhl
IEpTQ2FsbGJhY2tPYmplY3QuCisKKyAgICAgICAgVGhlIGZpcnN0IGZpbmFsaXplciBpcyBpbXBs
ZW1lbnRlZCBhcyBhIHZpcnR1YWwgZnVuY3Rpb24gb2YgYSBKU0NhbGxiYWNrT2JqZWN0RGF0YQor
ICAgICAgICBpbnN0YW5jZSB0aGF0IHdpbGwgYmUgZGVzdHJ1Y3RlZCBpZiB0aGUgMm5kIGZpbmFs
aXplciBpcyBjYWxsZWQuICBIZW5jZSwgaWYgdGhlCisgICAgICAgIDJuZCBmaW5hbGl6ZXIgaWYg
Y2FsbGVkIGZpcnN0LCB0aGUgbGF0ZXIgaW52b2NhdGlvbiBvZiB0aGUgMXN0IGZpbmFsaXplciB3
aWxsCisgICAgICAgIHJlc3VsdCBpbiBhIGNyYXNoLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZml4
ZXMgdGhlIGlzc3VlIGJ5IGVsaW1pbmF0aW5nIHRoZSBmaW5hbGl6ZXIgcmVnaXN0cmF0aW9uIGlu
IGluaXQoKS4KKyAgICAgICAgSW5zdGVhZCwgd2UnbGwgaGF2ZSB0aGUgSlNDYWxsYmFja09iamVj
dCBkZXN0cnVjdG9yIGNhbGwgYWxsIHRoZSBKU0NsYXNzUmVmIGZpbmFsaXplcnMKKyAgICAgICAg
aWYgbmVlZGVkLiAgVGhpcyBlbnN1cmVzIHRoYXQgdGhlc2UgZmluYWxpemVycyBhcmUgY2FsbGVk
IGJlZm9yZSB0aGUgSlNDYWxsYmFja09iamVjdAorICAgICAgICBpcyBkZXN0cnVjdG9yLgorCisg
ICAgICAgIEFsc28gYWRkZWQgYXNzZXJ0aW9ucyB0byBhIGZldyBIZWFwIGZ1bmN0aW9ucyBiZWNh
dXNlIEpTQ2VsbDo6Y2xhc3NJbmZvKCkgZXhwZWN0cworICAgICAgICBhbGwgb2JqZWN0cyB0aGF0
IGFyZSBhbGxvY2F0ZWQgZnJvbSBNYXJrZWRCbG9jazo6Tm9ybWFsIGJsb2NrcyB0byBiZSBkZXJp
dmVkIGZyb20KKyAgICAgICAgSlNEZXN0cnVjdGlibGVPYmplY3QuICBUaGVzZSBhc3NlcnRpb25z
IHdpbGwgaGVscCB1cyBjYXRjaCB2aW9sYXRpb25zIG9mIHRoaXMKKyAgICAgICAgZXhwZWN0YXRp
b24gZWFybGllci4KKworICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0LmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNDYWxsYmFja09iamVjdERhdGE6OmZpbmFsaXplKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBBUEkvSlNDYWxsYmFja09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrT2Jq
ZWN0RGF0YTo6fkpTQ2FsbGJhY2tPYmplY3REYXRhKToKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFj
a09iamVjdEZ1bmN0aW9ucy5oOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrT2JqZWN0PFBhcmVu
dD46On5KU0NhbGxiYWNrT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVjdDxQ
YXJlbnQ+Ojppbml0KToKKyAgICAgICAgKiBBUEkvdGVzdHMvR2xvYmFsQ29udGV4dFdpdGhGaW5h
bGl6ZXJUZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChmaW5hbGl6ZSk6CisgICAgICAgICh0ZXN0
R2xvYmFsQ29udGV4dFdpdGhGaW5hbGl6ZXIpOgorICAgICAgICAqIEFQSS90ZXN0cy9HbG9iYWxD
b250ZXh0V2l0aEZpbmFsaXplclRlc3QuaDogQWRkZWQuCisgICAgICAgICogQVBJL3Rlc3RzL3Rl
c3RhcGkuYzoKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHBy
b2ovdGVzdGFwaS90ZXN0YXBpLnZjeHByb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4
cHJvai90ZXN0YXBpL3Rlc3RhcGkudmN4cHJvai5maWx0ZXJzOgorICAgICAgICAqIEphdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaGVhcC9IZWFwSW5s
aW5lcy5oOgorICAgICAgICAoSlNDOjpIZWFwOjphbGxvY2F0ZU9iamVjdE9mVHlwZSk6CisgICAg
ICAgIChKU0M6OkhlYXA6OnN1YnNwYWNlRm9yT2JqZWN0T2ZUeXBlKToKKyAgICAgICAgKEpTQzo6
SGVhcDo6YWxsb2NhdG9yRm9yT2JqZWN0T2ZUeXBlKToKKwogMjAxNS0wMy0xOSAgQW5kcmVhcyBL
bGluZyAgPGFrbGluZ0BhcHBsZS5jb20+CiAKICAgICAgICAgSlNDYWxsZWUgdW5uZWNlc3Nhcmls
eSBvdmVycmlkZXMgYSBidW5jaCBvZiB0aGluZ3MgaW4gdGhlIG1ldGhvZCB0YWJsZS4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmNwcAkocmV2
aXNpb24gMTgxNzE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsMTUgKzYxLDQgQEAgU3RydWN0dXJlKiBKU0Nh
bGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZQogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oR2xvYmFsT2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCBpbmZvKCkpOyAKIH0KIAotdm9pZCBKU0NhbGxiYWNrT2JqZWN0RGF0YTo6Zmlu
YWxpemUoSGFuZGxlPFVua25vd24+IGhhbmRsZSwgdm9pZCogY29udGV4dCkKLXsKLSAgICBKU0Ns
YXNzUmVmIGpzQ2xhc3MgPSBzdGF0aWNfY2FzdDxKU0NsYXNzUmVmPihjb250ZXh0KTsKLSAgICBK
U09iamVjdFJlZiB0aGlzUmVmID0gdG9SZWYoc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihoYW5kbGUu
Z2V0KCkuYXNDZWxsKCkpKTsKLSAgICAKLSAgICBmb3IgKDsganNDbGFzczsganNDbGFzcyA9IGpz
Q2xhc3MtPnBhcmVudENsYXNzKQotICAgICAgICBpZiAoSlNPYmplY3RGaW5hbGl6ZUNhbGxiYWNr
IGZpbmFsaXplID0ganNDbGFzcy0+ZmluYWxpemUpCi0gICAgICAgICAgICBmaW5hbGl6ZSh0aGlz
UmVmKTsKLSAgICBXZWFrU2V0OjpkZWFsbG9jYXRlKFdlYWtJbXBsOjphc1dlYWtJbXBsKGhhbmRs
ZS5zbG90KCkpKTsKLX0KLSAgICAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHJldmlzaW9uIDE4MTcxNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdHJ1Y3QgSlND
YWxsYmFja09iamVjdERhdGEgOiBXZWFrSGFuZGxlT3duZXIgeworc3RydWN0IEpTQ2FsbGJhY2tP
YmplY3REYXRhIHsKICAgICBKU0NhbGxiYWNrT2JqZWN0RGF0YSh2b2lkKiBwcml2YXRlRGF0YSwg
SlNDbGFzc1JlZiBqc0NsYXNzKQogICAgICAgICA6IHByaXZhdGVEYXRhKHByaXZhdGVEYXRhKQog
ICAgICAgICAsIGpzQ2xhc3MoanNDbGFzcykKQEAgLTQxLDcgKzQxLDcgQEAgc3RydWN0IEpTQ2Fs
bGJhY2tPYmplY3REYXRhIDogV2Vha0hhbmRsZQogICAgICAgICBKU0NsYXNzUmV0YWluKGpzQ2xh
c3MpOwogICAgIH0KICAgICAKLSAgICB2aXJ0dWFsIH5KU0NhbGxiYWNrT2JqZWN0RGF0YSgpCisg
ICAgfkpTQ2FsbGJhY2tPYmplY3REYXRhKCkKICAgICB7CiAgICAgICAgIEpTQ2xhc3NSZWxlYXNl
KGpzQ2xhc3MpOwogICAgIH0KQEAgLTEwOSw3ICsxMDksNiBAQCBzdHJ1Y3QgSlNDYWxsYmFja09i
amVjdERhdGEgOiBXZWFrSGFuZGxlCiAgICAgICAgIFByaXZhdGVQcm9wZXJ0eU1hcCBtX3Byb3Bl
cnR5TWFwOwogICAgIH07CiAgICAgc3RkOjp1bmlxdWVfcHRyPEpTUHJpdmF0ZVByb3BlcnR5TWFw
PiBtX3ByaXZhdGVQcm9wZXJ0aWVzOwotICAgIHZpcnR1YWwgdm9pZCBmaW5hbGl6ZShIYW5kbGU8
VW5rbm93bj4sIHZvaWQqKSBvdmVycmlkZTsKIH07CiAKICAgICAKQEAgLTEyNSw2ICsxMjQsOCBA
QCBwcm90ZWN0ZWQ6CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBQYXJlbnQgQmFzZTsKIAorICAgIH5K
U0NhbGxiYWNrT2JqZWN0KCk7CisKICAgICBzdGF0aWMgSlNDYWxsYmFja09iamVjdCogY3JlYXRl
KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIEpTQ2xhc3NSZWYgY2xhc3NSZWYsIHZvaWQqIGRhdGEpCiAgICAgewogICAg
ICAgICBBU1NFUlRfVU5VU0VEKGdsb2JhbE9iamVjdCwgIXN0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0
KCkgfHwgc3RydWN0dXJlLT5nbG9iYWxPYmplY3QoKSA9PSBnbG9iYWxPYmplY3QpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVu
Y3Rpb25zLmgJKHJldmlzaW9uIDE4MTcxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3NCwx
NiBAQCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OkpTQ2FsbGJhY2tPYmplCiB9CiAKIHRlbXBs
YXRlIDxjbGFzcyBQYXJlbnQ+CitKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46On5KU0NhbGxiYWNr
T2JqZWN0KCkKK3sKKyAgICBKU09iamVjdFJlZiB0aGlzUmVmID0gdG9SZWYoc3RhdGljX2Nhc3Q8
SlNPYmplY3QqPih0aGlzKSk7CisgICAgZm9yIChKU0NsYXNzUmVmIGpzQ2xhc3MgPSBjbGFzc1Jl
ZigpOyBqc0NsYXNzOyBqc0NsYXNzID0ganNDbGFzcy0+cGFyZW50Q2xhc3MpIHsKKyAgICAgICAg
aWYgKEpTT2JqZWN0RmluYWxpemVDYWxsYmFjayBmaW5hbGl6ZSA9IGpzQ2xhc3MtPmZpbmFsaXpl
KQorICAgICAgICAgICAgZmluYWxpemUodGhpc1JlZik7CisgICAgfQorfQorICAgIAordGVtcGxh
dGUgPGNsYXNzIFBhcmVudD4KIHZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpmaW5pc2hD
cmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhl
Yy0+dm0oKSk7CkBAIC0xMDksMTMgKzExOSw2IEBAIHZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJl
bnQ+Ojppbml0KEV4ZWMKICAgICAgICAgSlNPYmplY3RJbml0aWFsaXplQ2FsbGJhY2sgaW5pdGlh
bGl6ZSA9IGluaXRSb3V0aW5lc1tpXTsKICAgICAgICAgaW5pdGlhbGl6ZSh0b1JlZihleGVjKSwg
dG9SZWYodGhpcykpOwogICAgIH0KLQotICAgIGZvciAoSlNDbGFzc1JlZiBqc0NsYXNzUHRyID0g
Y2xhc3NSZWYoKTsganNDbGFzc1B0cjsganNDbGFzc1B0ciA9IGpzQ2xhc3NQdHItPnBhcmVudENs
YXNzKSB7Ci0gICAgICAgIGlmIChqc0NsYXNzUHRyLT5maW5hbGl6ZSkgewotICAgICAgICAgICAg
V2Vha1NldDo6YWxsb2NhdGUodGhpcywgbV9jYWxsYmFja09iamVjdERhdGEuZ2V0KCksIGNsYXNz
UmVmKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CiB9CiAKIHRlbXBs
YXRlIDxjbGFzcyBQYXJlbnQ+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3Rz
L0dsb2JhbENvbnRleHRXaXRoRmluYWxpemVyVGVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9HbG9iYWxDb250ZXh0V2l0aEZpbmFsaXplclRlc3Qu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9HbG9i
YWxDb250ZXh0V2l0aEZpbmFsaXplclRlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR2xvYmFs
Q29udGV4dFdpdGhGaW5hbGl6ZXJUZXN0LmgiCisKKyNpbmNsdWRlICJKYXZhU2NyaXB0Q29yZS5o
IgorI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisKK3N0YXRpYyBib29sIGZhaWxlZCA9IHRydWU7
CisKK3N0YXRpYyB2b2lkIGZpbmFsaXplKEpTT2JqZWN0UmVmKQoreworICAgIGZhaWxlZCA9IGZh
bHNlOworfQorCitpbnQgdGVzdEdsb2JhbENvbnRleHRXaXRoRmluYWxpemVyKCkKK3sKKyAgICBK
U0NsYXNzRGVmaW5pdGlvbiBkZWYgPSBrSlNDbGFzc0RlZmluaXRpb25FbXB0eTsKKyAgICBkZWYu
Y2xhc3NOYW1lID0gInRlc3RDbGFzcyI7CisgICAgZGVmLmZpbmFsaXplID0gZmluYWxpemU7Cisg
ICAgSlNDbGFzc1JlZiBjbGFzc1JlZiA9IEpTQ2xhc3NDcmVhdGUoJmRlZik7CisgICAgCisgICAg
SlNHbG9iYWxDb250ZXh0UmVmIHJlZiA9IEpTR2xvYmFsQ29udGV4dENyZWF0ZUluR3JvdXAobnVs
bHB0ciwgY2xhc3NSZWYpOworICAgIEpTR2xvYmFsQ29udGV4dFJlbGVhc2UocmVmKTsKKyAgICBK
U0NsYXNzUmVsZWFzZShjbGFzc1JlZik7CisKKyAgICBpZiAoZmFpbGVkKQorICAgICAgICBwcmlu
dGYoIkZBSUw6IEpTR2xvYmFsQ29udGV4dFJlZiBkaWQgbm90IGNhbGwgaXRzIEpTQ2xhc3NSZWYg
ZmluYWxpemVyLlxuIik7CisgICAgZWxzZQorICAgICAgICBwcmludGYoIlBBU1M6IEpTR2xvYmFs
Q29udGV4dFJlZiBjYWxsZWQgaXRzIEpTQ2xhc3NSZWYgZmluYWxpemVyIGFzIGV4cGVjdGVkLlxu
Iik7CisKKyAgICByZXR1cm4gZmFpbGVkOworfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS90ZXN0cy9HbG9iYWxDb250ZXh0V2l0aEZpbmFsaXplclRlc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0dsb2JhbENvbnRleHRXaXRoRmluYWxp
emVyVGVzdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0
cy9HbG9iYWxDb250ZXh0V2l0aEZpbmFsaXplclRlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBHbG9iYWxDb250ZXh0V2l0aEZpbmFsaXpl
clRlc3RfaAorI2RlZmluZSBHbG9iYWxDb250ZXh0V2l0aEZpbmFsaXplclRlc3RfaAorCisjaW5j
bHVkZSAiSlNDb250ZXh0UmVmUHJpdmF0ZS5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVy
biAiQyIgeworI2VuZGlmCisKKy8qIFJldHVybnMgMSBpZiBmYWlsdXJlcyB3ZXJlIGVuY291bnRl
cmVkLiAgRWxzZSwgcmV0dXJucyAwLiAqLworaW50IHRlc3RHbG9iYWxDb250ZXh0V2l0aEZpbmFs
aXplcigpOworICAgIAorI2lmZGVmIF9fY3BsdXNwbHVzCit9IC8qIGV4dGVybiAiQyIgKi8KKyNl
bmRpZgorCisjZW5kaWYgLyogR2xvYmFsQ29udGV4dFdpdGhGaW5hbGl6ZXJUZXN0X2ggKi8KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5jCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5jCShyZXZpc2lvbiAx
ODE3MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuYwkod29y
a2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQAogCiAjaW5jbHVkZSAiQ29tcGFyZUFuZFN3YXBU
ZXN0LmgiCiAjaW5jbHVkZSAiQ3VzdG9tR2xvYmFsT2JqZWN0Q2xhc3NUZXN0LmgiCisjaW5jbHVk
ZSAiR2xvYmFsQ29udGV4dFdpdGhGaW5hbGl6ZXJUZXN0LmgiCiAKICNpZiBPUyhEQVJXSU4pCiAj
aW5jbHVkZSAiRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5oIgpAQCAtMTg1Niw2ICsxODU3LDcgQEAg
aW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKICNpZiBPUyhEQVJXSU4pCiAgICAgZmFp
bGVkID0gdGVzdEV4ZWN1dGlvblRpbWVMaW1pdCgmY29udGV4dCkgfHwgZmFpbGVkOwogI2VuZGlm
IC8qIE9TKERBUldJTikgKi8KKyAgICBmYWlsZWQgPSB0ZXN0R2xvYmFsQ29udGV4dFdpdGhGaW5h
bGl6ZXIoKSB8fCBmYWlsZWQ7CiAKICAgICAvLyBDbGVhciBvdXQgbG9jYWwgdmFyaWFibGVzIHBv
aW50aW5nIGF0IEpTT2JqZWN0UmVmcyB0byBhbGxvdyB0aGVpciB2YWx1ZXMgdG8gYmUgY29sbGVj
dGVkCiAgICAgZnVuY3Rpb24gPSBOVUxMOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2ovdGVzdGFwaS90ZXN0YXBpLnZjeHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovdGVzdGFwaS90
ZXN0YXBpLnZjeHByb2oJKHJldmlzaW9uIDE4MTcxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL3Rlc3RhcGkvdGVzdGFwaS52Y3hwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0yOTYsNiArMjk2LDggQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4u
XEFQSVx0ZXN0c1xDb21wYXJlQW5kU3dhcFRlc3QuaCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXC4uXEFQSVx0ZXN0c1xDdXN0b21HbG9iYWxPYmplY3RDbGFzc1Rlc3QuYyIgLz4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXEFQSVx0ZXN0c1xDdXN0b21HbG9iYWxPYmplY3RD
bGFzc1Rlc3QuaCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXEFQSVx0ZXN0c1xH
bG9iYWxDb250ZXh0V2l0aEZpbmFsaXplclRlc3QuY3BwIiAvPgorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cLi5cQVBJXHRlc3RzXEdsb2JhbENvbnRleHRXaXRoRmluYWxpemVyVGVzdC5oIiAv
PgogICA8L0l0ZW1Hcm91cD4KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1p
Y3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KICAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25U
YXJnZXRzIj4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qL3Rlc3RhcGkvdGVzdGFwaS52Y3hwcm9qLmZpbHRlcnMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovdGVzdGFwaS90ZXN0YXBpLnZj
eHByb2ouZmlsdGVycwkocmV2aXNpb24gMTgxNzE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjeHByb2ovdGVzdGFwaS90ZXN0YXBpLnZjeHByb2ouZmlsdGVycwko
d29ya2luZyBjb3B5KQpAQCAtMTIsNSArMTIsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cLi5cQVBJXHRlc3RzXENvbXBhcmVBbmRTd2FwVGVzdC5oIiAvPgogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cLi5cQVBJXHRlc3RzXEN1c3RvbUdsb2JhbE9iamVjdENsYXNzVGVzdC5jIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cQVBJXHRlc3RzXEN1c3RvbUdsb2JhbE9i
amVjdENsYXNzVGVzdC5oIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cQVBJXHRl
c3RzXEdsb2JhbENvbnRleHRXaXRoRmluYWxpemVyVGVzdC5jcHAiIC8+CisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlwuLlxBUElcdGVzdHNcR2xvYmFsQ29udGV4dFdpdGhGaW5hbGl6ZXJUZXN0
LmgiIC8+CiAgIDwvSXRlbUdyb3VwPgogPC9Qcm9qZWN0PgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDE4MTcxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0xNjEyLDYgKzE2MTIsNyBAQAogCQlFNDlEQzE2QzEyRUYyOTRFMDAxODRBMUYgLyogU291cmNl
UHJvdmlkZXJDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTQ5REMxNTExMkVGMjcyMjAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDlEQzE2
RDEyRUYyOTUzMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0OURDMTQ5MTJFRjI2MUEwMDE4
NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlSXRlbS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMEQ0QTA2MUFCOEREMEEwMDJGNTRCRiAvKiBF
eGVjdXRpb25UaW1lTGltaXRUZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZFMEQ0QTA0MUFCOEREMEEwMDJGNTRCRiAvKiBFeGVjdXRpb25UaW1l
TGltaXRUZXN0LmNwcCAqLzsgfTsKKwkJRkUwRDRBMDkxQUJBMjQzNzAwMkY1NEJGIC8qIEdsb2Jh
bENvbnRleHRXaXRoRmluYWxpemVyVGVzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGRTBENEEwNzFBQkEyNDM3MDAyRjU0QkYgLyogR2xvYmFsQ29u
dGV4dFdpdGhGaW5hbGl6ZXJUZXN0LmNwcCAqLzsgfTsKIAkJRkUyMENFOUQxNUYwNEE5NTAwREYz
NDMwIC8qIExMSW50Q0xvb3AuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkUyMENFOUIxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuY3BwICov
OyB9OwogCQlGRTIwQ0U5RTE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUyMENFOUMxNUYwNEE5NTAw
REYzNDMwIC8qIExMSW50Q0xvb3AuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlGRTRBMzMxRjE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU0QTMz
MUQxNUJEMkUwNzAwNkY1NEYzIC8qIFZNSW5zcGVjdG9yLmNwcCAqLzsgfTsKQEAgLTMzNjAsNiAr
MzM2MSw4IEBACiAJCUY2OTJBODg3MDI1NTU5N0QwMUZGNjBGNyAvKiBKU0NKU1ZhbHVlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lk
dGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
Q0pTVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IH07CiAJ
CUZFMEQ0QTA0MUFCOEREMEEwMDJGNTRCRiAvKiBFeGVjdXRpb25UaW1lTGltaXRUZXN0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEV4ZWN1dGlvblRpbWVMaW1pdFRl
c3QuY3BwOyBwYXRoID0gQVBJL3Rlc3RzL0V4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTBENEEwNTFBQjhERDBBMDAyRjU0QkYgLyogRXhl
Y3V0aW9uVGltZUxpbWl0VGVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBF
eGVjdXRpb25UaW1lTGltaXRUZXN0Lmg7IHBhdGggPSBBUEkvdGVzdHMvRXhlY3V0aW9uVGltZUxp
bWl0VGVzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTBENEEwNzFBQkEyNDM3
MDAyRjU0QkYgLyogR2xvYmFsQ29udGV4dFdpdGhGaW5hbGl6ZXJUZXN0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEdsb2JhbENvbnRleHRXaXRoRmluYWxpemVyVGVz
dC5jcHA7IHBhdGggPSBBUEkvdGVzdHMvR2xvYmFsQ29udGV4dFdpdGhGaW5hbGl6ZXJUZXN0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkUwRDRBMDgxQUJBMjQzNzAwMkY1NEJG
IC8qIEdsb2JhbENvbnRleHRXaXRoRmluYWxpemVyVGVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBHbG9iYWxDb250ZXh0V2l0aEZpbmFsaXplclRlc3QuaDsgcGF0aCA9IEFQ
SS90ZXN0cy9HbG9iYWxDb250ZXh0V2l0aEZpbmFsaXplclRlc3QuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRkUyMENFOUIxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTExJbnRDTG9vcC5jcHA7IHBh
dGggPSBsbGludC9MTEludENMb29wLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RkUyMENFOUMxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gTExJbnRDTG9vcC5oOyBwYXRoID0gbGxpbnQvTExJbnRDTG9vcC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTRBMzMxRDE1QkQyRTA3MDA2RjU0RjMg
LyogVk1JbnNwZWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Vk1JbnNwZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzc0Nyw2ICsz
NzUwLDggQEAKIAkJCQlDMjg4QjJERDE4QTU0RDNFMDA3QkU0MEIgLyogRGF0ZVRlc3RzLm1tICov
LAogCQkJCUZFMEQ0QTA0MUFCOEREMEEwMDJGNTRCRiAvKiBFeGVjdXRpb25UaW1lTGltaXRUZXN0
LmNwcCAqLywKIAkJCQlGRTBENEEwNTFBQjhERDBBMDAyRjU0QkYgLyogRXhlY3V0aW9uVGltZUxp
bWl0VGVzdC5oICovLAorCQkJCUZFMEQ0QTA3MUFCQTI0MzcwMDJGNTRCRiAvKiBHbG9iYWxDb250
ZXh0V2l0aEZpbmFsaXplclRlc3QuY3BwICovLAorCQkJCUZFMEQ0QTA4MUFCQTI0MzcwMDJGNTRC
RiAvKiBHbG9iYWxDb250ZXh0V2l0aEZpbmFsaXplclRlc3QuaCAqLywKIAkJCQlDMjE4MUZDMDE4
QTk0OEZCMDAyNUEyMzUgLyogSlNFeHBvcnRUZXN0cy5oICovLAogCQkJCUMyMTgxRkMxMThBOTQ4
RkIwMDI1QTIzNSAvKiBKU0V4cG9ydFRlc3RzLm1tICovLAogCQkJCTY1NTcwRjU4MUFBNEMwMEEw
MDlCM0MyMyAvKiBSZWdyZXNzMTQxMjc1LmggKi8sCkBAIC02Nzg3LDYgKzY3OTIsNyBAQAogCQkJ
aXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgz
NjQ3OwogCQkJZmlsZXMgPSAoCisJCQkJRkUwRDRBMDkxQUJBMjQzNzAwMkY1NEJGIC8qIEdsb2Jh
bENvbnRleHRXaXRoRmluYWxpemVyVGVzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2NTU3MEY1
QTFBQTRDM0VBMDA5QjNDMjMgLyogUmVncmVzczE0MTI3NS5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CUMyOUVDQjAzMTgwNEQwRUQwMEQyQ0JCNCAvKiBDdXJyZW50VGhpc0luc2lkZUJsb2NrR2V0dGVy
VGVzdC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUZFQjUxRjZDMUE5N0I2ODgwMDFGOTIxQyAvKiBS
ZWdyZXNzMTQxODA5Lm1tIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHJldmlzaW9uIDE4MTcxNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDgg
QEAKICNpbmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiU3Ry
dWN0dXJlLmgiCisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTIzNyw2ICsyMzksOSBAQCBpbmxpbmUgdm9p
ZCogSGVhcDo6YWxsb2NhdGVXaXRob3V0RGVzdHJ1CiB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5
cGU+CiB2b2lkKiBIZWFwOjphbGxvY2F0ZU9iamVjdE9mVHlwZShzaXplX3QgYnl0ZXMpCiB7Cisg
ICAgLy8gSlNDZWxsOjpjbGFzc0luZm8oKSBleHBlY3RzIG9iamVjdHMgYWxsb2NhdGVkIHdpdGgg
bm9ybWFsIGRlc3RydWN0b3IgdG8gZGVyaXZlIGZyb20gSlNEZXN0cnVjdGlibGVPYmplY3QuCisg
ICAgQVNTRVJUKCghQ2xhc3NUeXBlOjpuZWVkc0Rlc3RydWN0aW9uIHx8IENsYXNzVHlwZTo6aGFz
SW1tb3J0YWxTdHJ1Y3R1cmUgfHwgc3RkOjppc19jb252ZXJ0aWJsZTxDbGFzc1R5cGUsIEpTRGVz
dHJ1Y3RpYmxlT2JqZWN0Pjo6dmFsdWUpKTsKKwogICAgIGlmIChDbGFzc1R5cGU6Om5lZWRzRGVz
dHJ1Y3Rpb24gJiYgQ2xhc3NUeXBlOjpoYXNJbW1vcnRhbFN0cnVjdHVyZSkKICAgICAgICAgcmV0
dXJuIGFsbG9jYXRlV2l0aEltbW9ydGFsU3RydWN0dXJlRGVzdHJ1Y3RvcihieXRlcyk7CiAgICAg
aWYgKENsYXNzVHlwZTo6bmVlZHNEZXN0cnVjdGlvbikKQEAgLTI0Nyw2ICsyNTIsOSBAQCB2b2lk
KiBIZWFwOjphbGxvY2F0ZU9iamVjdE9mVHlwZShzaXplX3QgCiB0ZW1wbGF0ZTx0eXBlbmFtZSBD
bGFzc1R5cGU+CiBNYXJrZWRTcGFjZTo6U3Vic3BhY2UmIEhlYXA6OnN1YnNwYWNlRm9yT2JqZWN0
T2ZUeXBlKCkKIHsKKyAgICAvLyBKU0NlbGw6OmNsYXNzSW5mbygpIGV4cGVjdHMgb2JqZWN0cyBh
bGxvY2F0ZWQgd2l0aCBub3JtYWwgZGVzdHJ1Y3RvciB0byBkZXJpdmUgZnJvbSBKU0Rlc3RydWN0
aWJsZU9iamVjdC4KKyAgICBBU1NFUlQoKCFDbGFzc1R5cGU6Om5lZWRzRGVzdHJ1Y3Rpb24gfHwg
Q2xhc3NUeXBlOjpoYXNJbW1vcnRhbFN0cnVjdHVyZSB8fCBzdGQ6OmlzX2NvbnZlcnRpYmxlPENs
YXNzVHlwZSwgSlNEZXN0cnVjdGlibGVPYmplY3Q+Ojp2YWx1ZSkpOworICAgIAogICAgIGlmIChD
bGFzc1R5cGU6Om5lZWRzRGVzdHJ1Y3Rpb24gJiYgQ2xhc3NUeXBlOjpoYXNJbW1vcnRhbFN0cnVj
dHVyZSkKICAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9yT2JqZWN0c1dpdGhJbW1vcnRhbFN0cnVj
dHVyZSgpOwogICAgIGlmIChDbGFzc1R5cGU6Om5lZWRzRGVzdHJ1Y3Rpb24pCkBAIC0yNTcsNiAr
MjY1LDkgQEAgTWFya2VkU3BhY2U6OlN1YnNwYWNlJiBIZWFwOjpzdWJzcGFjZUZvcgogdGVtcGxh
dGU8dHlwZW5hbWUgQ2xhc3NUeXBlPgogTWFya2VkQWxsb2NhdG9yJiBIZWFwOjphbGxvY2F0b3JG
b3JPYmplY3RPZlR5cGUoc2l6ZV90IGJ5dGVzKQogeworICAgIC8vIEpTQ2VsbDo6Y2xhc3NJbmZv
KCkgZXhwZWN0cyBvYmplY3RzIGFsbG9jYXRlZCB3aXRoIG5vcm1hbCBkZXN0cnVjdG9yIHRvIGRl
cml2ZSBmcm9tIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0LgorICAgIEFTU0VSVCgoIUNsYXNzVHlwZTo6
bmVlZHNEZXN0cnVjdGlvbiB8fCBDbGFzc1R5cGU6Omhhc0ltbW9ydGFsU3RydWN0dXJlIHx8IHN0
ZDo6aXNfY29udmVydGlibGU8Q2xhc3NUeXBlLCBKU0Rlc3RydWN0aWJsZU9iamVjdD46OnZhbHVl
KSk7CisgICAgCiAgICAgaWYgKENsYXNzVHlwZTo6bmVlZHNEZXN0cnVjdGlvbiAmJiBDbGFzc1R5
cGU6Omhhc0ltbW9ydGFsU3RydWN0dXJlKQogICAgICAgICByZXR1cm4gYWxsb2NhdG9yRm9yT2Jq
ZWN0V2l0aEltbW9ydGFsU3RydWN0dXJlRGVzdHJ1Y3RvcihieXRlcyk7CiAgICAgaWYgKENsYXNz
VHlwZTo6bmVlZHNEZXN0cnVjdGlvbikK
</data>
<flag name="review"
          id="273926"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>