<?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>138851</bug_id>
          
          <creation_ts>2014-11-18 16:02:25 -0800</creation_ts>
          <short_desc>Add Heap verification infrastructure</short_desc>
          <delta_ts>2014-11-21 05:39:23 -0800</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>138962</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1049624</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-11-18 16:02:25 -0800</bug_when>
    <thetext>This is debugging code I wrote for a prior debugging session.  Just cleaning it up for landing so that we can reuse / build on it in the future as needed.

The code is always build in but disabled by default.  When disabled, the cost is minimal:
1. Heap has a m_verifier field.
2. GC does a few &quot;if (m_verifier)&quot; checks that should fail.
3. HeapVerifier takes up code space though not used.

When enabled:
1. The HeapVerifier will keep N number of GC pass data.
   Each GC pass will contain a &quot;before marking&quot; and &quot;after marking&quot; live object list.
   The GC passes is a circular buffer.  Only data for the last N GC passes will be retained.
2. During GC, the current GC pass&apos; live objects lists will be populated before and after marking.
3. The current GC pass&apos; live object lists will be validated before GC, after marking, and after GC.

Currently, the only validation being done is to verify that object butterflies are allocated from valid blocks in the Storage (aka Copied) space.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049626</commentid>
    <comment_count>1</comment_count>
      <attachid>241826</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-11-18 16:10:44 -0800</bug_when>
    <thetext>Created attachment 241826
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049641</commentid>
    <comment_count>2</comment_count>
      <attachid>241826</attachid>
    <who name="Mark Hahnenberg">mhahnenb</who>
    <bug_when>2014-11-18 16:30:41 -0800</bug_when>
    <thetext>Comment on attachment 241826
the patch

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

Did this find a bug?

&gt; Source/JavaScriptCore/heap/Heap.cpp:1015
&gt; +    if (m_verifier) {
&gt; +        m_verifier-&gt;initializeGCPass();
&gt; +        m_verifier-&gt;gatherLiveObjects(HeapVerifier::Phase::BeforeMarking);
&gt; +    }

Sort of a nit, but this is done after the start of GC, but the AfterGC portion of the verification occurs after the final call to currentTimeMS. Might be more consistent to do both during the &quot;official&quot; collection.

&gt; Source/JavaScriptCore/heap/HeapVerifier.cpp:197
&gt; +    // dataLogF(&quot;Verifying @ phase %s, object list &apos;%s&apos; (size %zu)\n&quot;, phaseName(phase), list.name, liveObjects.size());

Remove or uncomment.

&gt; Source/JavaScriptCore/runtime/Options.h:291
&gt; +    v(unsigned, numberOfGCPassesToRecordForVerification, 3) \

&quot;Pass&quot; is sort of an odd term for this. I&apos;m not sure I know the difference between a &quot;Pass&quot; and a &quot;Phase&quot;. Not sure what else to call it though :-/ Maybe...&quot;Cycle&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049670</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-11-18 17:20:23 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 241826 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=241826&amp;action=review
&gt; 
&gt; Did this find a bug?

Yes.  It found a tricky write barrier bug.

&gt; &gt; Source/JavaScriptCore/heap/Heap.cpp:1015
&gt; &gt; +    if (m_verifier) {
&gt; &gt; +        m_verifier-&gt;initializeGCPass();
&gt; &gt; +        m_verifier-&gt;gatherLiveObjects(HeapVerifier::Phase::BeforeMarking);
&gt; &gt; +    }
&gt; 
&gt; Sort of a nit, but this is done after the start of GC, but the AfterGC
&gt; portion of the verification occurs after the final call to currentTimeMS.
&gt; Might be more consistent to do both during the &quot;official&quot; collection.

I&apos;ve moved the BeforeGC verification above this into this block and similarly moved the AfterGC verification before we sample the GC end time.

&gt; &gt; Source/JavaScriptCore/heap/HeapVerifier.cpp:197
&gt; &gt; +    // dataLogF(&quot;Verifying @ phase %s, object list &apos;%s&apos; (size %zu)\n&quot;, phaseName(phase), list.name, liveObjects.size());
&gt; 
&gt; Remove or uncomment.

Thought this might be useful but may be verbose if printed all time.  Hence, I left it there commented out for convenience, but have removed it now since it&apos;s not hard to add it back when I want it.

&gt; &gt; Source/JavaScriptCore/runtime/Options.h:291
&gt; &gt; +    v(unsigned, numberOfGCPassesToRecordForVerification, 3) \
&gt; 
&gt; &quot;Pass&quot; is sort of an odd term for this. I&apos;m not sure I know the difference
&gt; between a &quot;Pass&quot; and a &quot;Phase&quot;. Not sure what else to call it though :-/
&gt; Maybe...&quot;Cycle&quot;?

I think GCPass is easier to read then GCCycle (both mean the same thing), but we already use the term cycle elsewhere in the GC code.  I renamed Pass to Cycle.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049671</commentid>
    <comment_count>4</comment_count>
      <attachid>241837</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-11-18 17:21:27 -0800</bug_when>
    <thetext>Created attachment 241837
revised patch after Mark H&apos;s feedback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049684</commentid>
    <comment_count>5</comment_count>
      <attachid>241841</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-11-18 17:53:15 -0800</bug_when>
    <thetext>Created attachment 241841
take 3: with some needed #include of inline files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049689</commentid>
    <comment_count>6</comment_count>
      <attachid>241842</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-11-18 18:17:14 -0800</bug_when>
    <thetext>Created attachment 241842
take 4: plus missing build file changes for other platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049690</commentid>
    <comment_count>7</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-11-18 18:35:07 -0800</bug_when>
    <thetext>The Win EWS is barfing because:

     1&gt;..\heap\HeapVerifier.cpp(227): fatal error C1001: An internal error has occurred in the compiler.
         (compiler file &apos;msc1.cpp&apos;, line 1325)
          To work around this problem, try simplifying or changing the program near the locations listed above.
         Please choose the Technical Support command on the Visual C++ 
          Help menu, or open the Technical Support help file for more information

In other words, VC++ fail.  Will upload some speculative patches to see if I can work around VC++&apos;s short coming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049691</commentid>
    <comment_count>8</comment_count>
      <attachid>241843</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-11-18 18:37:10 -0800</bug_when>
    <thetext>Created attachment 241843
take 5: speculative fix for VC++&apos;s short coming. Uploading to test on Win EWS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049783</commentid>
    <comment_count>9</comment_count>
      <attachid>241861</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-11-19 08:41:03 -0800</bug_when>
    <thetext>Created attachment 241861
take 6: suppress compiler warnings because EFL compiler is not smart enough to detect a dead branch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050275</commentid>
    <comment_count>10</comment_count>
      <attachid>241861</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-11-20 15:16:14 -0800</bug_when>
    <thetext>Comment on attachment 241861
take 6: suppress compiler warnings because EFL compiler is not smart enough to detect a dead branch.

r=me if it you get it to build -- looks like the Windows build is still broken.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050279</commentid>
    <comment_count>11</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-11-20 15:19:08 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; r=me if it you get it to build -- looks like the Windows build is still
&gt; broken.

The Windows EWS was unable to build even without my patch. The 5th version of my patch shows that my changes do build on Windows.  Will land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050287</commentid>
    <comment_count>12</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-11-20 15:29:26 -0800</bug_when>
    <thetext>Thanks for the review.  Landed in r176424: &lt;http://trac.webkit.org/r176424&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241826</attachid>
            <date>2014-11-18 16:10:44 -0800</date>
            <delta_ts>2014-11-18 17:21:27 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>bug-138851.patch</filename>
            <type>text/plain</type>
            <size>26023</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTc2MjkyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY5IEBA
CisyMDE0LTExLTE4ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGQgSGVhcCB2ZXJpZmljYXRpb24gaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgIDxodHRwczovL3dl
YmtpdC5vcmcvYi8xMzg4NTE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhlIHZlcmlmaWNhdGlvbiBpbmZyYXN0cnVjdHVyZSBjb2RlIGlzIGFsd2F5
cyBidWlsdCBpbiBidXQgZGlzYWJsZWQgYnkKKyAgICAgICAgZGVmYXVsdC4gIFdoZW4gZGlzYWJs
ZWQsIHRoZSBjb3N0IGlzIG1pbmltYWw6CisgICAgICAgIDEuIEhlYXAgaGFzIGEgbV92ZXJpZmll
ciBmaWVsZC4KKyAgICAgICAgMi4gR0MgZG9lcyBhIGZldyAiaWYgKG1fdmVyaWZpZXIpIiBjaGVj
a3MgdGhhdCBzaG91bGQgZmFpbC4KKyAgICAgICAgMy4gSGVhcFZlcmlmaWVyIHRha2VzIHVwIGNv
ZGUgc3BhY2UgdGhvdWdoIG5vdCB1c2VkLgorCisgICAgICAgIFdoZW4gZW5hYmxlZDoKKyAgICAg
ICAgMS4gVGhlIEhlYXBWZXJpZmllciB3aWxsIGtlZXAgTiBudW1iZXIgb2YgR0MgcGFzcyBkYXRh
LgorICAgICAgICAgICBFYWNoIEdDIHBhc3Mgd2lsbCBjb250YWluIGEgImJlZm9yZSBtYXJraW5n
IiBhbmQgImFmdGVyIG1hcmtpbmciIGxpdmUKKyAgICAgICAgICAgb2JqZWN0IGxpc3QuCisgICAg
ICAgICAgIFRoZSBHQyBwYXNzZXMgaXMgYSBjaXJjdWxhciBidWZmZXIuICBPbmx5IGRhdGEgZm9y
IHRoZSBsYXN0IE4gR0MgcGFzc2VzCisgICAgICAgICAgIHdpbGwgYmUgcmV0YWluZWQuCisgICAg
ICAgIDIuIER1cmluZyBHQywgdGhlIGN1cnJlbnQgR0MgcGFzcycgbGl2ZSBvYmplY3RzIGxpc3Rz
IHdpbGwgYmUgcG9wdWxhdGVkCisgICAgICAgICAgIGJlZm9yZSBhbmQgYWZ0ZXIgbWFya2luZy4K
KyAgICAgICAgMy4gVGhlIGN1cnJlbnQgR0MgcGFzcycgbGl2ZSBvYmplY3QgbGlzdHMgd2lsbCBi
ZSB2YWxpZGF0ZWQgYmVmb3JlIEdDLAorICAgICAgICAgICBhZnRlciBtYXJraW5nLCBhbmQgYWZ0
ZXIgR0MuCisKKyAgICAgICAgQ3VycmVudGx5LCB0aGUgb25seSB2YWxpZGF0aW9uIGJlaW5nIGRv
bmUgaXMgdG8gdmVyaWZ5IHRoYXQgb2JqZWN0CisgICAgICAgIGJ1dHRlcmZsaWVzIGFyZSBhbGxv
Y2F0ZWQgZnJvbSB2YWxpZCBibG9ja3MgaW4gdGhlIFN0b3JhZ2UgKGFrYSBDb3BpZWQpCisgICAg
ICAgIHNwYWNlLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjpI
ZWFwKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29sbGVjdCk6CisgICAgICAgICogaGVhcC9IZWFw
Lmg6CisgICAgICAgICogaGVhcC9IZWFwVmVyaWZpZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6TGl2ZU9iamVjdExpc3Q6OmZpbmRPYmplY3QpOgorICAgICAgICAoSlNDOjpIZWFwVmVyaWZp
ZXI6OkhlYXBWZXJpZmllcik6CisgICAgICAgIChKU0M6OkhlYXBWZXJpZmllcjo6Y29sbGVjdGlv
blR5cGVOYW1lKToKKyAgICAgICAgKEpTQzo6SGVhcFZlcmlmaWVyOjpwaGFzZU5hbWUpOgorICAg
ICAgICAoSlNDOjpnZXRCdXR0ZXJmbHlEZXRhaWxzKToKKyAgICAgICAgKEpTQzo6SGVhcFZlcmlm
aWVyOjppbml0aWFsaXplR0NQYXNzKToKKyAgICAgICAgKEpTQzo6R2F0aGVyTGl2ZU9iakZ1bmN0
b3I6OkdhdGhlckxpdmVPYmpGdW5jdG9yKToKKyAgICAgICAgKEpTQzo6R2F0aGVyTGl2ZU9iakZ1
bmN0b3I6Om9wZXJhdG9yKCkpOgorICAgICAgICAoSlNDOjpIZWFwVmVyaWZpZXI6OmdhdGhlckxp
dmVPYmplY3RzKToKKyAgICAgICAgKEpTQzo6SGVhcFZlcmlmaWVyOjpsaXZlT2JqZWN0TGlzdEZv
ckdhdGhlcmluZyk6CisgICAgICAgIChKU0M6OnRyaW1EZWFkT2JqZWN0c0Zyb21MaXN0KToKKyAg
ICAgICAgKEpTQzo6SGVhcFZlcmlmaWVyOjp0cmltRGVhZE9iamVjdHMpOgorICAgICAgICAoSlND
OjpIZWFwVmVyaWZpZXI6OnZlcmlmeUJ1dHRlcmZseUlzSW5TdG9yYWdlU3BhY2UpOgorICAgICAg
ICAoSlNDOjpIZWFwVmVyaWZpZXI6OnZlcmlmeSk6CisgICAgICAgIChKU0M6OkhlYXBWZXJpZmll
cjo6cmVwb3J0T2JqZWN0KToKKworICAgICAgICAoSlNDOjpIZWFwVmVyaWZpZXI6OmNoZWNrSWZS
ZWNvcmRlZCk6CisgICAgICAgIC0gY2hlY2tJZlJlY29yZGVkKCkgaXMgbm90IGN1cnJlbnRseSBj
YWxsZWQgcHJvZ3JhbW1hdGljYWxseSBmcm9tIGFueSBjb2RlLgorICAgICAgICAgIEl0IGNvbWVz
IGluIGhhbmR5IHdoZW4gd2UgaGF2ZSBhIGRlYnVnZ2VyIGF0dGFjaGVkIGFuZCB3YW50IHRvIGNo
ZWNrIGlmCisgICAgICAgICAgYW4gb2JqZWN0IHBvaW50ZXIgd2FzIHNlZW4gaW4gdGhlIGxhc3Qg
ZmV3IEdDIHBhc3Nlcy4KKworICAgICAgICAqIGhlYXAvSGVhcFZlcmlmaWVyLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpMaXZlT2JqZWN0RGF0YTo6TGl2ZU9iamVjdERhdGEpOgorICAgICAgICAo
SlNDOjpMaXZlT2JqZWN0TGlzdDo6TGl2ZU9iamVjdExpc3QpOgorICAgICAgICAoSlNDOjpMaXZl
T2JqZWN0TGlzdDo6cmVzZXQpOgorICAgICAgICAoSlNDOjpIZWFwVmVyaWZpZXI6OkdDUGFzczo6
R0NQYXNzKToKKyAgICAgICAgKEpTQzo6SGVhcFZlcmlmaWVyOjpHQ1Bhc3M6OmNvbGxlY3Rpb25U
eXBlTmFtZSk6CisgICAgICAgIChKU0M6OkhlYXBWZXJpZmllcjo6aW5jcmVtZW50UGFzcyk6Cisg
ICAgICAgIChKU0M6OkhlYXBWZXJpZmllcjo6Y3VycmVudFBhc3MpOgorICAgICAgICAoSlNDOjpI
ZWFwVmVyaWZpZXI6OnBhc3NGb3JJbmRleCk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6
CisKIDIwMTQtMTEtMTggIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAg
ICBVcGRhdGUgdGhlIFZlY3RvciBBUEkgdG8gZGVhbCB3aXRoIHVuc2lnbmVkIHR5cGVzIGluc3Rl
YWQgb2Ygc2l6ZV90CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MTc2MjMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE1OTIsNiArMTU5Miw4IEBACiAJ
CUZFNTI0OEY5MTkxNDQyRDkwMEI3RkRFNCAvKiBWYXJpYWJsZVdhdGNocG9pbnRTZXRJbmxpbmVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTUyNDhG
ODE5MTQ0MkQ5MDBCN0ZERTQgLyogVmFyaWFibGVXYXRjaHBvaW50U2V0SW5saW5lcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFNTkzMkE3MTgz
QzVBMjYwMEExRUNDQyAvKiBWTUVudHJ5U2NvcGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU1OTMyQTUxODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50
cnlTY29wZS5jcHAgKi87IH07CiAJCUZFNTkzMkE4MTgzQzVBMjYwMEExRUNDQyAvKiBWTUVudHJ5
U2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZF
NTkzMkE2MTgzQzVBMjYwMEExRUNDQyAvKiBWTUVudHJ5U2NvcGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGRTdCQTYwRjFBMUE3Q0VDMDBGMUY3
QjQgLyogSGVhcFZlcmlmaWVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZFN0JBNjBEMUExQTdDRUMwMEYxRjdCNCAvKiBIZWFwVmVyaWZpZXIuY3Bw
ICovOyB9OworCQlGRTdCQTYxMDFBMUE3Q0VDMDBGMUY3QjQgLyogSGVhcFZlcmlmaWVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTdCQTYwRTFBMUE3
Q0VDMDBGMUY3QjQgLyogSGVhcFZlcmlmaWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkVBMDg2MjAxODJCN0EwNDAwRjZEODUxIC8qIEJyZWFr
cG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZF
QTA4NjFFMTgyQjdBMDQwMEY2RDg1MSAvKiBCcmVha3BvaW50LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkVBMDg2MjExODJCN0EwNDAwRjZEODUx
IC8qIERlYnVnZ2VyUHJpbWl0aXZlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkVBMDg2MUYxODJCN0EwNDAwRjZEODUxIC8qIERlYnVnZ2VyUHJpbWl0
aXZlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUZFQjU4QzE0MTg3QjhCMTYwMDk4RUYwQiAvKiBFcnJvckhhbmRsaW5nU2NvcGUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVCNThDMTIxODdCOEIx
NjAwOThFRjBCIC8qIEVycm9ySGFuZGxpbmdTY29wZS5jcHAgKi87IH07CkBAIC0zMzA1LDYgKzMz
MDcsOCBAQAogCQlGRTUyNDhGODE5MTQ0MkQ5MDBCN0ZERTQgLyogVmFyaWFibGVXYXRjaHBvaW50
U2V0SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWYXJpYWJsZVdh
dGNocG9pbnRTZXRJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNTkz
MkE1MTgzQzVBMjYwMEExRUNDQyAvKiBWTUVudHJ5U2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gVk1FbnRyeVNjb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRkU1OTMyQTYxODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlTY29wZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWTUVudHJ5U2NvcGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU3QkE2MEQxQTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJp
Zmllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIZWFwVmVyaWZp
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTdCQTYwRTFBMUE3Q0VDMDBG
MUY3QjQgLyogSGVhcFZlcmlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEhlYXBWZXJpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUEwODYxRTE4
MkI3QTA0MDBGNkQ4NTEgLyogQnJlYWtwb2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBCcmVha3BvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFQTA4
NjFGMTgyQjdBMDQwMEY2RDg1MSAvKiBEZWJ1Z2dlclByaW1pdGl2ZXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGVidWdnZXJQcmltaXRpdmVzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUZFQjU4QzEyMTg3QjhCMTYwMDk4RUYwQiAvKiBFcnJvckhhbmRsaW5n
U2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXJyb3JIYW5k
bGluZ1Njb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM3OTYsNiArMzgw
MCw4IEBACiAJCTE0MkUzMTJBMTM0RkYwQTYwMEFGQURCNSAvKiBoZWFwICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlGRTdCQTYwRDFBMUE3Q0VDMDBGMUY3
QjQgLyogSGVhcFZlcmlmaWVyLmNwcCAqLywKKwkJCQlGRTdCQTYwRTFBMUE3Q0VDMDBGMUY3QjQg
LyogSGVhcFZlcmlmaWVyLmggKi8sCiAJCQkJQzJEQTc3ODIxOEUyNTk5OTAwNjZGQ0I2IC8qIEhl
YXBJbmxpbmVzLmggKi8sCiAJCQkJQUREQjFGNjIxOEQ3N0RCNzAwOUI1OEE4IC8qIE9wYXF1ZVJv
b3RTZXQuaCAqLywKIAkJCQkyQUFDRTYzQTE4Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rpdml0eUNh
bGxiYWNrLmNwcCAqLywKQEAgLTUzNjQsNiArNTM3MCw3IEBACiAJCQkJQTU4NDAzMjAxOEJGRkJF
MTAwNUEwODExIC8qIEluc3BlY3RvckFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkyQUFCQ0RF
NzE4RUYyOTQyMDAwMDIwOTYgLyogR0NMb2dnaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTUy
NDhGOTE5MTQ0MkQ5MDBCN0ZERTQgLyogVmFyaWFibGVXYXRjaHBvaW50U2V0SW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJRkU3QkE2MTAxQTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJpZmll
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJEQTc3ODMxOEUyNTk5OTAwNjZGQ0I2IC8qIEhlYXBJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTMyNDM5NDE4NTY5NzA5MDAyRUQ2OTIgLyog
Z2VuZXJhdGUtY29tYmluZWQtaW5zcGVjdG9yLWpzb24ucHkgaW4gSGVhZGVycyAqLywKIAkJCQlB
NTg0MEUyNzE4N0M5ODFFMDA4NDNCMTAgLyogY3NzbWluLnB5IGluIEhlYWRlcnMgKi8sCkBAIC02
OTc0LDYgKzY5ODEsNyBAQAogCQkJCUE1MTNFNUNBMTg1Rjk2MjQwMDdFOTVBRCAvKiBJbmplY3Rl
ZFNjcmlwdE1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU4NDBFMjAxODdCN0I4NjAw
ODQzQjEwIC8qIEluamVjdGVkU2NyaXB0TW9kdWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
MjRFNTU1MTdGMEI3MUMwMEFCQjIxNyAvKiBJbmxpbmVDYWxsRnJhbWVTZXQuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJRkU3QkE2MEYxQTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJpZmllci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBNUNFRUUxNDE4N0YzQkFEMDBFNTVDOTkgLyogSW5zcGVjdG9y
QWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5M0NGODYxODQwMzhDQTAwQkZDRTI3IC8q
IEluc3BlY3RvckFnZW50UmVnaXN0cnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQjlDRjYx
OUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmNwcCBp
biBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlz
aW9uIDE3NjIzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiSGVhcEl0ZXJhdGlvblNjb3Bl
LmgiCiAjaW5jbHVkZSAiSGVhcFJvb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAiSGVhcFN0YXRpc3Rp
Y3MuaCIKKyNpbmNsdWRlICJIZWFwVmVyaWZpZXIuaCIKICNpbmNsdWRlICJJbmNyZW1lbnRhbFN3
ZWVwZXIuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2Jq
ZWN0LmgiCkBAIC0zMzksNiArMzQwLDggQEAgSGVhcDo6SGVhcChWTSogdm0sIEhlYXBUeXBlIGhl
YXBUeXBlKQogICAgICwgbV9kZWZlcnJhbERlcHRoKDApCiB7CiAgICAgbV9zdG9yYWdlU3BhY2Uu
aW5pdCgpOworICAgIGlmIChPcHRpb25zOjp2ZXJpZnlIZWFwKCkpCisgICAgICAgIG1fdmVyaWZp
ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEhlYXBWZXJpZmllcj4odGhpcywgT3B0aW9uczo6bnVtYmVy
T2ZHQ1Bhc3Nlc1RvUmVjb3JkRm9yVmVyaWZpY2F0aW9uKCkpOwogfQogCiBIZWFwOjp+SGVhcCgp
CkBAIC05NzMsNyArOTc2LDkgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KEhlYXBPcGVyYXRpb24gY29s
bGVjdAogI2lmIEVOQUJMRShBTExPQ0FUSU9OX0xPR0dJTkcpCiAgICAgZGF0YUxvZ0YoIkpTQyBH
QyBzdGFydGluZyBjb2xsZWN0aW9uLlxuIik7CiAjZW5kaWYKLSAgICAKKyAgICBpZiAobV92ZXJp
ZmllcikKKyAgICAgICAgbV92ZXJpZmllci0+dmVyaWZ5KEhlYXBWZXJpZmllcjo6UGhhc2U6OkJl
Zm9yZUdDKTsKKwogICAgIGRvdWJsZSBiZWZvcmUgPSAwOwogICAgIGlmIChPcHRpb25zOjpsb2dH
QygpKSB7CiAgICAgICAgIGRhdGFMb2coIltHQzogIik7CkBAIC0xMDA0LDYgKzEwMDksMTAgQEAg
dm9pZCBIZWFwOjpjb2xsZWN0KEhlYXBPcGVyYXRpb24gY29sbGVjdAogICAgIEdDUEhBU0UoQ29s
bGVjdCk7CiAKICAgICBkb3VibGUgZ2NTdGFydFRpbWUgPSBXVEY6Om1vbm90b25pY2FsbHlJbmNy
ZWFzaW5nVGltZSgpOworICAgIGlmIChtX3ZlcmlmaWVyKSB7CisgICAgICAgIG1fdmVyaWZpZXIt
PmluaXRpYWxpemVHQ1Bhc3MoKTsKKyAgICAgICAgbV92ZXJpZmllci0+Z2F0aGVyTGl2ZU9iamVj
dHMoSGVhcFZlcmlmaWVyOjpQaGFzZTo6QmVmb3JlTWFya2luZyk7CisgICAgfQogCiAgICAgZGVs
ZXRlT2xkQ29kZShnY1N0YXJ0VGltZSk7CiAgICAgZmx1c2hPbGRTdHJ1Y3R1cmVJRFRhYmxlcygp
OwpAQCAtMTAxMiw2ICsxMDIxLDEwIEBAIHZvaWQgSGVhcDo6Y29sbGVjdChIZWFwT3BlcmF0aW9u
IGNvbGxlY3QKIAogICAgIG1hcmtSb290cyhnY1N0YXJ0VGltZSk7CiAKKyAgICBpZiAobV92ZXJp
ZmllcikgeworICAgICAgICBtX3ZlcmlmaWVyLT5nYXRoZXJMaXZlT2JqZWN0cyhIZWFwVmVyaWZp
ZXI6OlBoYXNlOjpBZnRlck1hcmtpbmcpOworICAgICAgICBtX3ZlcmlmaWVyLT52ZXJpZnkoSGVh
cFZlcmlmaWVyOjpQaGFzZTo6QWZ0ZXJNYXJraW5nKTsKKyAgICB9CiAgICAgSkFWQVNDUklQVENP
UkVfR0NfTUFSS0VEKCk7CiAKICAgICBpZiAodm0oKS0+dHlwZVByb2ZpbGVyKCkpCkBAIC0xMDM5
LDYgKzEwNTIsMTEgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KEhlYXBPcGVyYXRpb24gY29sbGVjdAog
ICAgICAgICBkb3VibGUgYWZ0ZXIgPSBjdXJyZW50VGltZU1TKCk7CiAgICAgICAgIGRhdGFMb2co
YWZ0ZXIgLSBiZWZvcmUsICIgbXNdXG4iKTsKICAgICB9CisKKyAgICBpZiAobV92ZXJpZmllcikg
eworICAgICAgICBtX3ZlcmlmaWVyLT50cmltRGVhZE9iamVjdHMoKTsKKyAgICAgICAgbV92ZXJp
Zmllci0+dmVyaWZ5KEhlYXBWZXJpZmllcjo6UGhhc2U6OkFmdGVyR0MpOworICAgIH0KIH0KIAog
dm9pZCBIZWFwOjpzdXNwZW5kQ29tcGlsZXJUaHJlYWRzKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwLmgJKHJldmlzaW9uIDE3NjIzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsNyBAQCBjbGFzcyBHQ0F3YXJl
SklUU3R1YlJvdXRpbmU7CiBjbGFzcyBHbG9iYWxDb2RlQmxvY2s7CiBjbGFzcyBIZWFwOwogY2xh
c3MgSGVhcFJvb3RWaXNpdG9yOworY2xhc3MgSGVhcFZlcmlmaWVyOwogY2xhc3MgSW5jcmVtZW50
YWxTd2VlcGVyOwogY2xhc3MgSklUU3R1YlJvdXRpbmU7CiBjbGFzcyBKU0NlbGw7CkBAIC0yMzQs
NiArMjM1LDcgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgR0NBd2FyZUpJVFN0dWJSb3V0
aW5lOwogICAgIGZyaWVuZCBjbGFzcyBHQ0xvZ2dpbmc7CiAgICAgZnJpZW5kIGNsYXNzIEhhbmRs
ZVNldDsKKyAgICBmcmllbmQgY2xhc3MgSGVhcFZlcmlmaWVyOwogICAgIGZyaWVuZCBjbGFzcyBK
SVRTdHViUm91dGluZTsKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwog
ICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRTcGFjZTsKQEAgLTM4Myw2ICszODUsOCBAQCBwcml2YXRl
OgogICAgIAogICAgIHVuc2lnbmVkIG1fZGVmZXJyYWxEZXB0aDsKICAgICBWZWN0b3I8REZHOjpX
b3JrbGlzdCo+IG1fc3VzcGVuZGVkQ29tcGlsZXJXb3JrbGlzdHM7CisKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8SGVhcFZlcmlmaWVyPiBtX3ZlcmlmaWVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVmVyaWZpZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBWZXJpZmllci5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVmVyaWZpZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJI
ZWFwVmVyaWZpZXIuaCIKKworI2luY2x1ZGUgIkhlYXBJdGVyYXRpb25TY29wZS5oIgorI2luY2x1
ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitMaXZlT2JqZWN0RGF0YSogTGl2
ZU9iamVjdExpc3Q6OmZpbmRPYmplY3QoSlNPYmplY3QqIG9iaikKK3sKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGxpdmVPYmplY3RzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIExpdmVPYmpl
Y3REYXRhJiBkYXRhID0gbGl2ZU9iamVjdHNbaV07CisgICAgICAgIGlmIChvYmogPT0gZGF0YS5v
YmopCisgICAgICAgICAgICByZXR1cm4gJmRhdGE7CisgICAgfQorICAgIHJldHVybiBudWxscHRy
OworfQorCitIZWFwVmVyaWZpZXI6OkhlYXBWZXJpZmllcihIZWFwKiBoZWFwLCB1bnNpZ25lZCBu
dW1iZXJPZkdDUGFzc2VzVG9SZWNvcmQpCisgICAgOiBtX2hlYXAoaGVhcCkKKyAgICAsIG1fY3Vy
cmVudFBhc3MoMCkKKyAgICAsIG1fbnVtYmVyT2ZQYXNzZXMobnVtYmVyT2ZHQ1Bhc3Nlc1RvUmVj
b3JkKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fbnVtYmVyT2ZQYXNzZXMgPiAwKTsKKyAgICBt
X3Bhc3NlcyA9IHN0ZDo6bWFrZV91bmlxdWU8R0NQYXNzW10+KG1fbnVtYmVyT2ZQYXNzZXMpOwor
fQorCitjb25zdCBjaGFyKiBIZWFwVmVyaWZpZXI6OmNvbGxlY3Rpb25UeXBlTmFtZShIZWFwT3Bl
cmF0aW9uIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBOb09wZXJhdGlv
bjoKKyAgICAgICAgcmV0dXJuICJOb09wZXJhdGlvbiI7CisgICAgY2FzZSBBbnlDb2xsZWN0aW9u
OgorICAgICAgICByZXR1cm4gIkFueUNvbGxlY3Rpb24iOworICAgIGNhc2UgQWxsb2NhdGlvbjoK
KyAgICAgICAgcmV0dXJuICJBbGxvY2F0aW9uIjsKKyAgICBjYXNlIEVkZW5Db2xsZWN0aW9uOgor
ICAgICAgICByZXR1cm4gIkVkZW5Db2xsZWN0aW9uIjsKKyAgICBjYXNlIEZ1bGxDb2xsZWN0aW9u
OgorICAgICAgICByZXR1cm4gIkZ1bGxDb2xsZWN0aW9uIjsKKyAgICB9CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworY29uc3QgY2hhciogSGVhcFZlcmlmaWVyOjpwaGFz
ZU5hbWUoSGVhcFZlcmlmaWVyOjpQaGFzZSBwaGFzZSkKK3sKKyAgICBzd2l0Y2ggKHBoYXNlKSB7
CisgICAgY2FzZSBQaGFzZTo6QmVmb3JlR0M6CisgICAgICAgIHJldHVybiAiQmVmb3JlR0MiOwor
ICAgIGNhc2UgUGhhc2U6OkJlZm9yZU1hcmtpbmc6CisgICAgICAgIHJldHVybiAiQmVmb3JlTWFy
a2luZyI7CisgICAgY2FzZSBQaGFzZTo6QWZ0ZXJNYXJraW5nOgorICAgICAgICByZXR1cm4gIkFm
dGVyTWFya2luZyI7CisgICAgY2FzZSBQaGFzZTo6QWZ0ZXJHQzoKKyAgICAgICAgcmV0dXJuICJB
ZnRlckdDIjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwor
c3RhdGljIHZvaWQgZ2V0QnV0dGVyZmx5RGV0YWlscyhKU09iamVjdCogb2JqLCB2b2lkKiYgYnV0
dGVyZmx5QmFzZSwgc2l6ZV90JiBidXR0ZXJmbHlDYXBhY2l0eUluQnl0ZXMsIENvcGllZEJsb2Nr
KiYgYnV0dGVyZmx5QmxvY2spCit7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBvYmotPnN0
cnVjdHVyZSgpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gb2JqLT5idXR0ZXJmbHkoKTsK
KyAgICBidXR0ZXJmbHlCYXNlID0gYnV0dGVyZmx5LT5iYXNlKHN0cnVjdHVyZSk7CisgICAgYnV0
dGVyZmx5QmxvY2sgPSBDb3BpZWRTcGFjZTo6YmxvY2tGb3IoYnV0dGVyZmx5QmFzZSk7CisKKyAg
ICBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KTsKKyAgICBzaXplX3QgcHJlQ2FwYWNpdHk7CisgICAgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzOworICAgIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIgPSBvYmotPmhhc0luZGV4aW5n
SGVhZGVyKCk7CisgICAgaWYgKFVOTElLRUxZKGhhc0luZGV4aW5nSGVhZGVyKSkgeworICAgICAg
ICBwcmVDYXBhY2l0eSA9IGJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHko
c3RydWN0dXJlKTsKKyAgICAgICAgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMgPSBidXR0ZXJm
bHktPmluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKHN0cnVjdHVy
ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHJlQ2FwYWNpdHkgPSAwOworICAgICAgICBpbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcyA9IDA7CisgICAgfQorICAgIGJ1dHRlcmZseUNhcGFjaXR5
SW5CeXRlcyA9IEJ1dHRlcmZseTo6dG90YWxTaXplKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFj
aXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworfQor
Cit2b2lkIEhlYXBWZXJpZmllcjo6aW5pdGlhbGl6ZUdDUGFzcygpCit7CisgICAgSGVhcCogaGVh
cCA9IG1faGVhcDsKKyAgICBpbmNyZW1lbnRQYXNzKCk7CisgICAgY3VycmVudFBhc3MoKS5jb2xs
ZWN0aW9uVHlwZSA9IGhlYXAtPm9wZXJhdGlvbkluUHJvZ3Jlc3MoKTsKK30KKworc3RydWN0IEdh
dGhlckxpdmVPYmpGdW5jdG9yIDogTWFya2VkQmxvY2s6OkNvdW50RnVuY3RvciB7CisgICAgR2F0
aGVyTGl2ZU9iakZ1bmN0b3IoTGl2ZU9iamVjdExpc3QmIGxpc3QpCisgICAgICAgIDogbV9saXN0
KGxpc3QpCisgICAgeworICAgICAgICBBU1NFUlQoIWxpc3QubGl2ZU9iamVjdHMuc2l6ZSgpKTsK
KyAgICB9CisKKyAgICB2b2lkIG9wZXJhdG9yKCkoSlNDZWxsKiBjZWxsKQorICAgIHsKKyAgICAg
ICAgaWYgKCFjZWxsLT5pc09iamVjdCgpKQorICAgICAgICAgICAgcmV0dXJuOyAgICAgICAgCisg
ICAgICAgIExpdmVPYmplY3REYXRhIGRhdGEoYXNPYmplY3QoY2VsbCkpOworICAgICAgICBtX2xp
c3QubGl2ZU9iamVjdHMuYXBwZW5kKGRhdGEpOworICAgIH0KKworICAgIExpdmVPYmplY3RMaXN0
JiBtX2xpc3Q7Cit9OworCit2b2lkIEhlYXBWZXJpZmllcjo6Z2F0aGVyTGl2ZU9iamVjdHMoSGVh
cFZlcmlmaWVyOjpQaGFzZSBwaGFzZSkKK3sKKyAgICBIZWFwKiBoZWFwID0gbV9oZWFwOworICAg
IExpdmVPYmplY3RMaXN0JiBsaXN0ID0gbGl2ZU9iamVjdExpc3RGb3JHYXRoZXJpbmcocGhhc2Up
OworCisgICAgSGVhcEl0ZXJhdGlvblNjb3BlIGl0ZXJhdGlvblNjb3BlKCpoZWFwKTsKKyAgICBs
aXN0LnJlc2V0KCk7CisgICAgR2F0aGVyTGl2ZU9iakZ1bmN0b3IgZnVuY3RvcihsaXN0KTsKKyAg
ICBoZWFwLT5tX29iamVjdFNwYWNlLmZvckVhY2hMaXZlQ2VsbChpdGVyYXRpb25TY29wZSwgZnVu
Y3Rvcik7Cit9CisKK0xpdmVPYmplY3RMaXN0JiBIZWFwVmVyaWZpZXI6OmxpdmVPYmplY3RMaXN0
Rm9yR2F0aGVyaW5nKEhlYXBWZXJpZmllcjo6UGhhc2UgcGhhc2UpCit7CisgICAgc3dpdGNoIChw
aGFzZSkgeworICAgIGNhc2UgUGhhc2U6OkJlZm9yZU1hcmtpbmc6CisgICAgICAgIHJldHVybiBj
dXJyZW50UGFzcygpLmJlZm9yZTsKKyAgICBjYXNlIFBoYXNlOjpBZnRlck1hcmtpbmc6CisgICAg
ICAgIHJldHVybiBjdXJyZW50UGFzcygpLmFmdGVyOworICAgIGNhc2UgUGhhc2U6OkJlZm9yZUdD
OgorICAgIGNhc2UgUGhhc2U6OkFmdGVyR0M6CisgICAgICAgIC8vIFdlIHNob3VsZCBub3QgYmUg
Z2F0aGVyaW5nIGxpdmUgb2JqZWN0cyBkdXJpbmcgdGhlc2UgcGhhc2VzLgorICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgdHJpbURl
YWRPYmplY3RzRnJvbUxpc3QoSGFzaFNldDxKU09iamVjdCo+JiBrbm93bkxpdmVTZXQsIExpdmVP
YmplY3RMaXN0JiBsaXN0KQoreworICAgIGlmICghbGlzdC5oYXNMaXZlT2JqZWN0cykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgc2l6ZV90IGxpdmVPYmplY3RzRm91bmQgPSAwOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbGlzdC5saXZlT2JqZWN0cy5zaXplKCk7IGkrKykgeworICAgICAg
ICBMaXZlT2JqZWN0RGF0YSYgb2JqRGF0YSA9IGxpc3QubGl2ZU9iamVjdHNbaV07CisgICAgICAg
IGlmIChvYmpEYXRhLmlzQ29uZmlybWVkRGVhZCkKKyAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBE
b24ndCAicmVzdXJyZWN0IiBrbm93biBkZWFkIG9iamVjdHMuCisgICAgICAgIGlmICgha25vd25M
aXZlU2V0LmNvbnRhaW5zKG9iakRhdGEub2JqKSkgeworICAgICAgICAgICAgb2JqRGF0YS5pc0Nv
bmZpcm1lZERlYWQgPSB0cnVlOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAg
ICAgICAgbGl2ZU9iamVjdHNGb3VuZCsrOworICAgIH0KKyAgICBsaXN0Lmhhc0xpdmVPYmplY3Rz
ID0gISFsaXZlT2JqZWN0c0ZvdW5kOworfQorCit2b2lkIEhlYXBWZXJpZmllcjo6dHJpbURlYWRP
YmplY3RzKCkKK3sKKyAgICBIYXNoU2V0PEpTT2JqZWN0Kj4ga25vd25MaXZlU2V0OworCisgICAg
TGl2ZU9iamVjdExpc3QmIGFmdGVyID0gY3VycmVudFBhc3MoKS5hZnRlcjsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGFmdGVyLmxpdmVPYmplY3RzLnNpemUoKTsgaSsrKSB7CisgICAgICAg
IExpdmVPYmplY3REYXRhJiBvYmpEYXRhID0gYWZ0ZXIubGl2ZU9iamVjdHNbaV07CisgICAgICAg
IGtub3duTGl2ZVNldC5hZGQob2JqRGF0YS5vYmopOworICAgIH0KKworICAgIHRyaW1EZWFkT2Jq
ZWN0c0Zyb21MaXN0KGtub3duTGl2ZVNldCwgY3VycmVudFBhc3MoKS5iZWZvcmUpOworCisgICAg
Zm9yIChpbnQgaSA9IC0xOyBpID4gLW1fbnVtYmVyT2ZQYXNzZXM7IGktLSkgeworICAgICAgICB0
cmltRGVhZE9iamVjdHNGcm9tTGlzdChrbm93bkxpdmVTZXQsIHBhc3NGb3JJbmRleChpKS5iZWZv
cmUpOworICAgICAgICB0cmltRGVhZE9iamVjdHNGcm9tTGlzdChrbm93bkxpdmVTZXQsIHBhc3NG
b3JJbmRleChpKS5hZnRlcik7CisgICAgfQorfQorCitib29sIEhlYXBWZXJpZmllcjo6dmVyaWZ5
QnV0dGVyZmx5SXNJblN0b3JhZ2VTcGFjZShQaGFzZSBwaGFzZSwgTGl2ZU9iamVjdExpc3QmIGxp
c3QpCit7CisgICAgYXV0byYgbGl2ZU9iamVjdHMgPSBsaXN0LmxpdmVPYmplY3RzOworCisgICAg
Ly8gZGF0YUxvZ0YoIlZlcmlmeWluZyBAIHBoYXNlICVzLCBvYmplY3QgbGlzdCAnJXMnIChzaXpl
ICV6dSlcbiIsIHBoYXNlTmFtZShwaGFzZSksIGxpc3QubmFtZSwgbGl2ZU9iamVjdHMuc2l6ZSgp
KTsKKyAgICBDb3BpZWRTcGFjZSYgc3RvcmFnZVNwYWNlID0gbV9oZWFwLT5tX3N0b3JhZ2VTcGFj
ZTsKKyAgICBib29sIGxpc3ROYW1lUHJpbnRlZCA9IGZhbHNlOworICAgIGJvb2wgc3VjY2VzcyA9
IHRydWU7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXZlT2JqZWN0cy5zaXplKCk7IGkr
KykgeworICAgICAgICBMaXZlT2JqZWN0RGF0YSYgb2JqZWN0RGF0YSA9IGxpdmVPYmplY3RzW2ld
OworICAgICAgICBpZiAob2JqZWN0RGF0YS5pc0NvbmZpcm1lZERlYWQpCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICBKU09iamVjdCogb2JqID0gb2JqZWN0RGF0YS5vYmo7CisgICAg
ICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gb2JqLT5idXR0ZXJmbHkoKTsKKyAgICAgICAgaWYg
KGJ1dHRlcmZseSkgeworICAgICAgICAgICAgdm9pZCogYnV0dGVyZmx5QmFzZTsKKyAgICAgICAg
ICAgIHNpemVfdCBidXR0ZXJmbHlDYXBhY2l0eUluQnl0ZXM7CisgICAgICAgICAgICBDb3BpZWRC
bG9jayogYnV0dGVyZmx5QmxvY2s7CisgICAgICAgICAgICBnZXRCdXR0ZXJmbHlEZXRhaWxzKG9i
aiwgYnV0dGVyZmx5QmFzZSwgYnV0dGVyZmx5Q2FwYWNpdHlJbkJ5dGVzLCBidXR0ZXJmbHlCbG9j
ayk7CisKKyAgICAgICAgICAgIGlmICghc3RvcmFnZVNwYWNlLmNvbnRhaW5zKGJ1dHRlcmZseUJs
b2NrKSkgeworICAgICAgICAgICAgICAgIGlmICghbGlzdE5hbWVQcmludGVkKSB7CisgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2dGKCJWZXJpZmljYXRpb24gQCBwaGFzZSAlcyBGQUlMRUQgaW4g
b2JqZWN0IGxpc3QgJyVzJyAoc2l6ZSAlenUpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAg
cGhhc2VOYW1lKHBoYXNlKSwgbGlzdC5uYW1lLCBsaXZlT2JqZWN0cy5zaXplKCkpOworICAgICAg
ICAgICAgICAgICAgICBsaXN0TmFtZVByaW50ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gb2JqLT5zdHJ1Y3R1cmUo
KTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAgIDwldToldT4gYnV0dGVyZmx5ICVwIChi
YXNlICVwIHNpemUgJXp1IGJsb2NrICVwKSBOT1QgaW4gU3RvcmFnZVNwYWNlIHwgb2JqICVwIHR5
cGUgJyVzJ1xuIiwKKyAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkKWdldHBpZCgpLCAodW5z
aWduZWQpY3VycmVudFRocmVhZCgpLAorICAgICAgICAgICAgICAgICAgICBidXR0ZXJmbHksIGJ1
dHRlcmZseUJhc2UsIGJ1dHRlcmZseUNhcGFjaXR5SW5CeXRlcywgYnV0dGVyZmx5QmxvY2ssCisg
ICAgICAgICAgICAgICAgICAgIG9iaiwgc3RydWN0dXJlLT5jbGFzc0luZm8oKS0+Y2xhc3NOYW1l
KTsKKyAgICAgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKK3ZvaWQgSGVhcFZlcmlmaWVy
Ojp2ZXJpZnkoSGVhcFZlcmlmaWVyOjpQaGFzZSBwaGFzZSkKK3sKKyAgICBib29sIGJlZm9yZVZl
cmlmaWVkID0gdmVyaWZ5QnV0dGVyZmx5SXNJblN0b3JhZ2VTcGFjZShwaGFzZSwgY3VycmVudFBh
c3MoKS5iZWZvcmUpOworICAgIGJvb2wgYWZ0ZXJWZXJpZmllZCA9IHZlcmlmeUJ1dHRlcmZseUlz
SW5TdG9yYWdlU3BhY2UocGhhc2UsIGN1cnJlbnRQYXNzKCkuYWZ0ZXIpOworICAgIFJFTEVBU0Vf
QVNTRVJUKGJlZm9yZVZlcmlmaWVkICYmIGFmdGVyVmVyaWZpZWQpOworfQorCit2b2lkIEhlYXBW
ZXJpZmllcjo6cmVwb3J0T2JqZWN0KExpdmVPYmplY3REYXRhJiBvYmpEYXRhLCBpbnQgcGFzc0lu
ZGV4LCBIZWFwVmVyaWZpZXI6OkdDUGFzcyYgcGFzcywgTGl2ZU9iamVjdExpc3QmIGxpc3QpCit7
CisgICAgSlNPYmplY3QqIG9iaiA9IG9iakRhdGEub2JqOworCisgICAgaWYgKG9iakRhdGEuaXND
b25maXJtZWREZWFkKSB7CisgICAgICAgIGRhdGFMb2dGKCJGT1VORCBkZWFkIG9iaiAlcCBpbiBH
Q1slZF0gJXMgbGlzdCAnJXMnXG4iLAorICAgICAgICAgICAgb2JqLCBwYXNzSW5kZXgsIHBhc3Mu
Y29sbGVjdGlvblR5cGVOYW1lKCksIGxpc3QubmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG9iai0+c3RydWN0dXJlKCk7CisgICAgQnV0
dGVyZmx5KiBidXR0ZXJmbHkgPSBvYmotPmJ1dHRlcmZseSgpOworICAgIHZvaWQqIGJ1dHRlcmZs
eUJhc2U7CisgICAgc2l6ZV90IGJ1dHRlcmZseUNhcGFjaXR5SW5CeXRlczsKKyAgICBDb3BpZWRC
bG9jayogYnV0dGVyZmx5QmxvY2s7CisgICAgZ2V0QnV0dGVyZmx5RGV0YWlscyhvYmosIGJ1dHRl
cmZseUJhc2UsIGJ1dHRlcmZseUNhcGFjaXR5SW5CeXRlcywgYnV0dGVyZmx5QmxvY2spOworCisg
ICAgZGF0YUxvZ0YoIkZPVU5EIG9iaiAlcCB0eXBlICclcycgYnV0dGVyZmx5ICVwIChiYXNlICVw
IHNpemUgJXp1IGJsb2NrICVwKSBpbiBHQ1slZF0gJXMgbGlzdCAnJXMnXG4iLAorICAgICAgICBv
YmosIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCktPmNsYXNzTmFtZSwKKyAgICAgICAgYnV0dGVyZmx5
LCBidXR0ZXJmbHlCYXNlLCBidXR0ZXJmbHlDYXBhY2l0eUluQnl0ZXMsIGJ1dHRlcmZseUJsb2Nr
LAorICAgICAgICBwYXNzSW5kZXgsIHBhc3MuY29sbGVjdGlvblR5cGVOYW1lKCksIGxpc3QubmFt
ZSk7Cit9CisKK3ZvaWQgSGVhcFZlcmlmaWVyOjpjaGVja0lmUmVjb3JkZWQoSlNPYmplY3QqIG9i
aikKK3sKKyAgICBib29sIGZvdW5kID0gZmFsc2U7CisKKyAgICBmb3IgKGludCBwYXNzSW5kZXgg
PSAwOyBwYXNzSW5kZXggPiAtbV9udW1iZXJPZlBhc3NlczsgcGFzc0luZGV4LS0pIHsKKyAgICAg
ICAgR0NQYXNzJiBwYXNzID0gcGFzc0ZvckluZGV4KHBhc3NJbmRleCk7CisgICAgICAgIExpdmVP
YmplY3RMaXN0JiBiZWZvcmVMaXN0ID0gcGFzcy5iZWZvcmU7IAorICAgICAgICBMaXZlT2JqZWN0
TGlzdCYgYWZ0ZXJMaXN0ID0gcGFzcy5hZnRlcjsgCisKKyAgICAgICAgTGl2ZU9iamVjdERhdGEq
IG9iakRhdGE7CisgICAgICAgIG9iakRhdGEgPSBiZWZvcmVMaXN0LmZpbmRPYmplY3Qob2JqKTsK
KyAgICAgICAgaWYgKG9iakRhdGEpIHsKKyAgICAgICAgICAgIHJlcG9ydE9iamVjdCgqb2JqRGF0
YSwgcGFzc0luZGV4LCBwYXNzLCBiZWZvcmVMaXN0KTsKKyAgICAgICAgICAgIGZvdW5kID0gdHJ1
ZTsKKyAgICAgICAgfQorICAgICAgICBvYmpEYXRhID0gYWZ0ZXJMaXN0LmZpbmRPYmplY3Qob2Jq
KTsKKyAgICAgICAgaWYgKG9iakRhdGEpIHsKKyAgICAgICAgICAgIHJlcG9ydE9iamVjdCgqb2Jq
RGF0YSwgcGFzc0luZGV4LCBwYXNzLCBhZnRlckxpc3QpOworICAgICAgICAgICAgZm91bmQgPSB0
cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFmb3VuZCkKKyAgICAgICAgZGF0YUxv
Z0YoIm9iaiAlcCBOT1QgRk9VTkRcbiIsIG9iaik7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFZlcmlmaWVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFZlcmlmaWVyLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVmVyaWZpZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEhlYXBWZXJpZmllcl9oCisjZGVmaW5lIEhlYXBWZXJp
Zmllcl9oCisKKyNpbmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitu
YW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNPYmplY3Q7CitjbGFzcyBNYXJrZWRCbG9jazsKKwor
c3RydWN0IExpdmVPYmplY3REYXRhIHsKKyAgICBMaXZlT2JqZWN0RGF0YShKU09iamVjdCogb2Jq
LCBib29sIGlzQ29uZmlybWVkRGVhZCA9IGZhbHNlKQorICAgICAgICA6IG9iaihvYmopCisgICAg
ICAgICwgaXNDb25maXJtZWREZWFkKGlzQ29uZmlybWVkRGVhZCkKKyAgICB7CisgICAgfQorCisg
ICAgSlNPYmplY3QqIG9iajsKKyAgICBib29sIGlzQ29uZmlybWVkRGVhZDsKK307CisKK3N0cnVj
dCBMaXZlT2JqZWN0TGlzdCB7CisgICAgTGl2ZU9iamVjdExpc3QoY29uc3QgY2hhciogbmFtZSkK
KyAgICAgICAgOiBuYW1lKG5hbWUpCisgICAgICAgICwgaGFzTGl2ZU9iamVjdHModHJ1ZSkKKyAg
ICB7CisgICAgfQorCisgICAgdm9pZCByZXNldCgpCisgICAgeworICAgICAgICBsaXZlT2JqZWN0
cy5jbGVhcigpOworICAgICAgICBoYXNMaXZlT2JqZWN0cyA9IHRydWU7IC8vIFByZXN1bWUgdG8g
aGF2ZSBsaXZlIG9iamVjdHMgdW50aWwgdGhlIGxpc3QgaXMgdHJpbW1lZC4KKyAgICB9CisKKyAg
ICBMaXZlT2JqZWN0RGF0YSogZmluZE9iamVjdChKU09iamVjdCopOworCisgICAgY29uc3QgY2hh
ciogbmFtZTsKKyAgICBWZWN0b3I8TGl2ZU9iamVjdERhdGE+IGxpdmVPYmplY3RzOworICAgIGJv
b2wgaGFzTGl2ZU9iamVjdHM7Cit9OworCitjbGFzcyBIZWFwVmVyaWZpZXIgeworcHVibGljOgor
ICAgIGVudW0gY2xhc3MgUGhhc2UgeworICAgICAgICBCZWZvcmVHQywKKyAgICAgICAgQmVmb3Jl
TWFya2luZywKKyAgICAgICAgQWZ0ZXJNYXJraW5nLAorICAgICAgICBBZnRlckdDCisgICAgfTsK
KworICAgIEhlYXBWZXJpZmllcihIZWFwKiwgdW5zaWduZWQgbnVtYmVyT2ZHQ1Bhc3Nlc1RvUmVj
b3JkKTsKKworICAgIHZvaWQgaW5pdGlhbGl6ZUdDUGFzcygpOworICAgIHZvaWQgZ2F0aGVyTGl2
ZU9iamVjdHMoUGhhc2UpOworICAgIHZvaWQgdHJpbURlYWRPYmplY3RzKCk7CisgICAgdm9pZCB2
ZXJpZnkoUGhhc2UpOworCisgICAgLy8gU2NhbnMgYWxsIHByZXZpb3VzbHkgcmVjb3JkZWQgTGl2
ZU9iamVjdExpc3RzIGFuZCBjaGVja3MgaWYgdGhlIHNwZWNpZmllZAorICAgIC8vIG9iamVjdCB3
YXMgaW4gYW55IG9mIHRob3NlIGxpc3RzLgorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY2hl
Y2tJZlJlY29yZGVkKEpTT2JqZWN0Kik7CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciogY29sbGVj
dGlvblR5cGVOYW1lKEhlYXBPcGVyYXRpb24pOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBwaGFz
ZU5hbWUoUGhhc2UpOworCitwcml2YXRlOgorICAgIHN0cnVjdCBHQ1Bhc3MgeworICAgICAgICBH
Q1Bhc3MoKQorICAgICAgICAgICAgOiBiZWZvcmUoIkJlZm9yZSBNYXJraW5nIikKKyAgICAgICAg
ICAgICwgYWZ0ZXIoIkFmdGVyIE1hcmtpbmciKQorICAgICAgICB7CisgICAgICAgIH0KKworICAg
ICAgICBIZWFwT3BlcmF0aW9uIGNvbGxlY3Rpb25UeXBlOworICAgICAgICBMaXZlT2JqZWN0TGlz
dCBiZWZvcmU7CisgICAgICAgIExpdmVPYmplY3RMaXN0IGFmdGVyOworCisgICAgICAgIGNvbnN0
IGNoYXIqIGNvbGxlY3Rpb25UeXBlTmFtZSgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBIZWFwVmVyaWZpZXI6OmNvbGxlY3Rpb25UeXBlTmFtZShjb2xsZWN0aW9uVHlwZSk7
CisgICAgICAgIH0KKyAgICB9OworCisgICAgdm9pZCBpbmNyZW1lbnRQYXNzKCkgeyBtX2N1cnJl
bnRQYXNzID0gKG1fY3VycmVudFBhc3MgKyAxKSAlIG1fbnVtYmVyT2ZQYXNzZXM7IH0KKyAgICBH
Q1Bhc3MmIGN1cnJlbnRQYXNzKCkgeyByZXR1cm4gbV9wYXNzZXNbbV9jdXJyZW50UGFzc107IH0K
KyAgICBHQ1Bhc3MmIHBhc3NGb3JJbmRleChpbnQgcGFzc0luZGV4KQorICAgIHsKKyAgICAgICAg
QVNTRVJUKHBhc3NJbmRleCA8PSAwICYmIHBhc3NJbmRleCA+IC1tX251bWJlck9mUGFzc2VzKTsK
KyAgICAgICAgcGFzc0luZGV4ICs9IG1fY3VycmVudFBhc3M7CisgICAgICAgIGlmIChwYXNzSW5k
ZXggPCAwKQorICAgICAgICAgICAgcGFzc0luZGV4ICs9IG1fbnVtYmVyT2ZQYXNzZXM7CisgICAg
ICAgIEFTU0VSVChwYXNzSW5kZXggPCBtX251bWJlck9mUGFzc2VzKTsKKyAgICAgICAgcmV0dXJu
IG1fcGFzc2VzW3Bhc3NJbmRleF07CisgICAgfQorCisgICAgTGl2ZU9iamVjdExpc3QmIGxpdmVP
YmplY3RMaXN0Rm9yR2F0aGVyaW5nKFBoYXNlKTsKKyAgICBib29sIHZlcmlmeUJ1dHRlcmZseUlz
SW5TdG9yYWdlU3BhY2UoUGhhc2UsIExpdmVPYmplY3RMaXN0Jik7CisKKyAgICBzdGF0aWMgdm9p
ZCByZXBvcnRPYmplY3QoTGl2ZU9iamVjdERhdGEmLCBpbnQgcGFzc0luZGV4LCBIZWFwVmVyaWZp
ZXI6OkdDUGFzcyYsIExpdmVPYmplY3RMaXN0Jik7CisKKyAgICBIZWFwKiBtX2hlYXA7CisgICAg
aW50IG1fY3VycmVudFBhc3M7CisgICAgaW50IG1fbnVtYmVyT2ZQYXNzZXM7CisgICAgc3RkOjp1
bmlxdWVfcHRyPEdDUGFzc1tdPiBtX3Bhc3NlczsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gSGVhcFZlcmlmaWVyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5oCShyZXZpc2lvbiAxNzYyMzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4Nyw2ICsyODcsOSBAQCB0eXBl
ZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2KGJvb2wsIGxvZ0hlYXBTdGF0aXN0
aWNzQXRFeGl0LCBmYWxzZSkgXAogICAgIHYoYm9vbCwgZW5hYmxlVHlwZVByb2ZpbGVyLCBmYWxz
ZSkgXAogICAgIFwKKyAgICB2KGJvb2wsIHZlcmlmeUhlYXAsIGZhbHNlKSBcCisgICAgdih1bnNp
Z25lZCwgbnVtYmVyT2ZHQ1Bhc3Nlc1RvUmVjb3JkRm9yVmVyaWZpY2F0aW9uLCAzKSBcCisgICAg
XAogICAgIHYoYm9vbCwgZW5hYmxlRXhjZXB0aW9uRnV6eiwgZmFsc2UpIFwKICAgICB2KHVuc2ln
bmVkLCBmaXJlRXhjZXB0aW9uRnV6ekF0LCAwKQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241837</attachid>
            <date>2014-11-18 17:21:27 -0800</date>
            <delta_ts>2014-11-18 17:53:15 -0800</delta_ts>
            <desc>revised patch after Mark H&apos;s feedback</desc>
            <filename>bug-138851.patch</filename>
            <type>text/plain</type>
            <size>25907</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTc2Mjk1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY5IEBA
CisyMDE0LTExLTE4ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGQgSGVhcCB2ZXJpZmljYXRpb24gaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgIDxodHRwczovL3dl
YmtpdC5vcmcvYi8xMzg4NTE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhlIHZlcmlmaWNhdGlvbiBpbmZyYXN0cnVjdHVyZSBjb2RlIGlzIGFsd2F5
cyBidWlsdCBpbiBidXQgZGlzYWJsZWQgYnkKKyAgICAgICAgZGVmYXVsdC4gIFdoZW4gZGlzYWJs
ZWQsIHRoZSBjb3N0IGlzIG1pbmltYWw6CisgICAgICAgIDEuIEhlYXAgaGFzIGEgbV92ZXJpZmll
ciBmaWVsZC4KKyAgICAgICAgMi4gR0MgZG9lcyBhIGZldyAiaWYgKG1fdmVyaWZpZXIpIiBjaGVj
a3MgdGhhdCBzaG91bGQgZmFpbC4KKyAgICAgICAgMy4gSGVhcFZlcmlmaWVyIHRha2VzIHVwIGNv
ZGUgc3BhY2UgdGhvdWdoIG5vdCB1c2VkLgorCisgICAgICAgIFdoZW4gZW5hYmxlZDoKKyAgICAg
ICAgMS4gVGhlIEhlYXBWZXJpZmllciB3aWxsIGtlZXAgTiBudW1iZXIgb2YgR0MgY3ljbGUgZGF0
YS4KKyAgICAgICAgICAgRWFjaCBHQyBjeWNsZSB3aWxsIGNvbnRhaW4gYSAiYmVmb3JlIG1hcmtp
bmciIGFuZCAiYWZ0ZXIgbWFya2luZyIgbGl2ZQorICAgICAgICAgICBvYmplY3QgbGlzdC4KKyAg
ICAgICAgICAgVGhlIEdDIGN5Y2xlcyBpcyBhIGNpcmN1bGFyIGJ1ZmZlci4gIE9ubHkgZGF0YSBm
b3IgdGhlIGxhc3QgTiBHQyBjeWNsZXMKKyAgICAgICAgICAgd2lsbCBiZSByZXRhaW5lZC4KKyAg
ICAgICAgMi4gRHVyaW5nIEdDLCB0aGUgY3VycmVudCBHQyBjeWNsZSdzIGxpdmUgb2JqZWN0cyBs
aXN0cyB3aWxsIGJlIHBvcHVsYXRlZAorICAgICAgICAgICBiZWZvcmUgYW5kIGFmdGVyIG1hcmtp
bmcuCisgICAgICAgIDMuIFRoZSBjdXJyZW50IEdDIGN5Y2xlJ3MgbGl2ZSBvYmplY3QgbGlzdHMg
d2lsbCBiZSB2YWxpZGF0ZWQgYmVmb3JlIEdDLAorICAgICAgICAgICBhZnRlciBtYXJraW5nLCBh
bmQgYWZ0ZXIgR0MuCisKKyAgICAgICAgQ3VycmVudGx5LCB0aGUgb25seSB2YWxpZGF0aW9uIGJl
aW5nIGRvbmUgaXMgdG8gdmVyaWZ5IHRoYXQgb2JqZWN0CisgICAgICAgIGJ1dHRlcmZsaWVzIGFy
ZSBhbGxvY2F0ZWQgZnJvbSB2YWxpZCBibG9ja3MgaW4gdGhlIFN0b3JhZ2UgKGFrYSBDb3BpZWQp
CisgICAgICAgIHNwYWNlLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpI
ZWFwOjpIZWFwKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29sbGVjdCk6CisgICAgICAgICogaGVh
cC9IZWFwLmg6CisgICAgICAgICogaGVhcC9IZWFwVmVyaWZpZXIuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6TGl2ZU9iamVjdExpc3Q6OmZpbmRPYmplY3QpOgorICAgICAgICAoSlNDOjpIZWFw
VmVyaWZpZXI6OkhlYXBWZXJpZmllcik6CisgICAgICAgIChKU0M6OkhlYXBWZXJpZmllcjo6Y29s
bGVjdGlvblR5cGVOYW1lKToKKyAgICAgICAgKEpTQzo6SGVhcFZlcmlmaWVyOjpwaGFzZU5hbWUp
OgorICAgICAgICAoSlNDOjpnZXRCdXR0ZXJmbHlEZXRhaWxzKToKKyAgICAgICAgKEpTQzo6SGVh
cFZlcmlmaWVyOjppbml0aWFsaXplR0NDeWNsZSk6CisgICAgICAgIChKU0M6OkdhdGhlckxpdmVP
YmpGdW5jdG9yOjpHYXRoZXJMaXZlT2JqRnVuY3Rvcik6CisgICAgICAgIChKU0M6OkdhdGhlckxp
dmVPYmpGdW5jdG9yOjpvcGVyYXRvcigpKToKKyAgICAgICAgKEpTQzo6SGVhcFZlcmlmaWVyOjpn
YXRoZXJMaXZlT2JqZWN0cyk6CisgICAgICAgIChKU0M6OkhlYXBWZXJpZmllcjo6bGl2ZU9iamVj
dExpc3RGb3JHYXRoZXJpbmcpOgorICAgICAgICAoSlNDOjp0cmltRGVhZE9iamVjdHNGcm9tTGlz
dCk6CisgICAgICAgIChKU0M6OkhlYXBWZXJpZmllcjo6dHJpbURlYWRPYmplY3RzKToKKyAgICAg
ICAgKEpTQzo6SGVhcFZlcmlmaWVyOjp2ZXJpZnlCdXR0ZXJmbHlJc0luU3RvcmFnZVNwYWNlKToK
KyAgICAgICAgKEpTQzo6SGVhcFZlcmlmaWVyOjp2ZXJpZnkpOgorICAgICAgICAoSlNDOjpIZWFw
VmVyaWZpZXI6OnJlcG9ydE9iamVjdCk6CisKKyAgICAgICAgKEpTQzo6SGVhcFZlcmlmaWVyOjpj
aGVja0lmUmVjb3JkZWQpOgorICAgICAgICAtIGNoZWNrSWZSZWNvcmRlZCgpIGlzIG5vdCBjdXJy
ZW50bHkgY2FsbGVkIHByb2dyYW1tYXRpY2FsbHkgZnJvbSBhbnkgY29kZS4KKyAgICAgICAgICBJ
dCBjb21lcyBpbiBoYW5keSB3aGVuIHdlIGhhdmUgYSBkZWJ1Z2dlciBhdHRhY2hlZCBhbmQgd2Fu
dCB0byBjaGVjayBpZgorICAgICAgICAgIGFuIG9iamVjdCBwb2ludGVyIHdhcyBzZWVuIGluIHRo
ZSBsYXN0IGZldyBHQyBjeWNsZXMuCisKKyAgICAgICAgKiBoZWFwL0hlYXBWZXJpZmllci5oOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6TGl2ZU9iamVjdERhdGE6OkxpdmVPYmplY3REYXRhKToKKyAg
ICAgICAgKEpTQzo6TGl2ZU9iamVjdExpc3Q6OkxpdmVPYmplY3RMaXN0KToKKyAgICAgICAgKEpT
Qzo6TGl2ZU9iamVjdExpc3Q6OnJlc2V0KToKKyAgICAgICAgKEpTQzo6SGVhcFZlcmlmaWVyOjpH
Q0N5Y2xlOjpHQ0N5Y2xlKToKKyAgICAgICAgKEpTQzo6SGVhcFZlcmlmaWVyOjpHQ0N5Y2xlOjpj
b2xsZWN0aW9uVHlwZU5hbWUpOgorICAgICAgICAoSlNDOjpIZWFwVmVyaWZpZXI6OmluY3JlbWVu
dEN5Y2xlKToKKyAgICAgICAgKEpTQzo6SGVhcFZlcmlmaWVyOjpjdXJyZW50Q3ljbGUpOgorICAg
ICAgICAoSlNDOjpIZWFwVmVyaWZpZXI6OmN5Y2xlRm9ySW5kZXgpOgorICAgICAgICAqIHJ1bnRp
bWUvT3B0aW9ucy5oOgorCiAyMDE0LTExLTE4ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5j
b20+CiAKICAgICAgICAgVXBkYXRlIHRoZSBWZWN0b3IgQVBJIHRvIGRlYWwgd2l0aCB1bnNpZ25l
ZCB0eXBlcyBpbnN0ZWFkIG9mIHNpemVfdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDE3NjI5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNTkyLDYg
KzE1OTIsOCBAQAogCQlGRTUyNDhGOTE5MTQ0MkQ5MDBCN0ZERTQgLyogVmFyaWFibGVXYXRjaHBv
aW50U2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkU1MjQ4RjgxOTE0NDJEOTAwQjdGREU0IC8qIFZhcmlhYmxlV2F0Y2hwb2ludFNldElu
bGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlGRTU5MzJBNzE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNTkzMkE1MTgzQzVBMjYwMEEx
RUNDQyAvKiBWTUVudHJ5U2NvcGUuY3BwICovOyB9OwogCQlGRTU5MzJBODE4M0M1QTI2MDBBMUVD
Q0MgLyogVk1FbnRyeVNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRTU5MzJBNjE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkU3QkE2MEYx
QTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJpZmllci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTdCQTYwRDFBMUE3Q0VDMDBGMUY3QjQgLyogSGVh
cFZlcmlmaWVyLmNwcCAqLzsgfTsKKwkJRkU3QkE2MTAxQTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBW
ZXJpZmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkU3QkE2MEUxQTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJpZmllci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFQTA4NjIwMTgyQjdBMDQwMEY2
RDg1MSAvKiBCcmVha3BvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRUEwODYxRTE4MkI3QTA0MDBGNkQ4NTEgLyogQnJlYWtwb2ludC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFQTA4NjIxMTgy
QjdBMDQwMEY2RDg1MSAvKiBEZWJ1Z2dlclByaW1pdGl2ZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFQTA4NjFGMTgyQjdBMDQwMEY2RDg1MSAvKiBE
ZWJ1Z2dlclByaW1pdGl2ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlGRUI1OEMxNDE4N0I4QjE2MDA5OEVGMEIgLyogRXJyb3JIYW5kbGluZ1Nj
b3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZF
QjU4QzEyMTg3QjhCMTYwMDk4RUYwQiAvKiBFcnJvckhhbmRsaW5nU2NvcGUuY3BwICovOyB9OwpA
QCAtMzMwNSw2ICszMzA3LDggQEAKIAkJRkU1MjQ4RjgxOTE0NDJEOTAwQjdGREU0IC8qIFZhcmlh
YmxlV2F0Y2hwb2ludFNldElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVmFyaWFibGVXYXRjaHBvaW50U2V0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlGRTU5MzJBNTE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZNRW50cnlTY29wZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNTkzMkE2MTgzQzVBMjYwMEExRUNDQyAvKiBWTUVu
dHJ5U2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVk1FbnRyeVNjb3Bl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFN0JBNjBEMUExQTdDRUMwMEYxRjdC
NCAvKiBIZWFwVmVyaWZpZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSGVhcFZlcmlmaWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU3QkE2
MEUxQTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBIZWFwVmVyaWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkVBMDg2MUUxODJCN0EwNDAwRjZEODUxIC8qIEJyZWFrcG9pbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQnJlYWtwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlGRUEwODYxRjE4MkI3QTA0MDBGNkQ4NTEgLyogRGVidWdnZXJQcmltaXRpdmVzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlYnVnZ2VyUHJpbWl0aXZlcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUI1OEMxMjE4N0I4QjE2MDA5OEVGMEIgLyog
RXJyb3JIYW5kbGluZ1Njb3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEVycm9ySGFuZGxpbmdTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0zNzk2LDYgKzM4MDAsOCBAQAogCQkxNDJFMzEyQTEzNEZGMEE2MDBBRkFEQjUgLyogaGVhcCAq
LyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJRkU3QkE2MEQx
QTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJpZmllci5jcHAgKi8sCisJCQkJRkU3QkE2MEUxQTFB
N0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJpZmllci5oICovLAogCQkJCUMyREE3NzgyMThFMjU5OTkw
MDY2RkNCNiAvKiBIZWFwSW5saW5lcy5oICovLAogCQkJCUFEREIxRjYyMThENzdEQjcwMDlCNThB
OCAvKiBPcGFxdWVSb290U2V0LmggKi8sCiAJCQkJMkFBQ0U2M0ExOENBNUEwMzAwRUQwMTkxIC8q
IEdDQWN0aXZpdHlDYWxsYmFjay5jcHAgKi8sCkBAIC01MzY0LDYgKzUzNzAsNyBAQAogCQkJCUE1
ODQwMzIwMThCRkZCRTEwMDVBMDgxMSAvKiBJbnNwZWN0b3JBZ2VudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMkFBQkNERTcxOEVGMjk0MjAwMDAyMDk2IC8qIEdDTG9nZ2luZy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRkU1MjQ4RjkxOTE0NDJEOTAwQjdGREU0IC8qIFZhcmlhYmxlV2F0Y2hwb2ludFNl
dElubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFN0JBNjEwMUExQTdDRUMwMEYxRjdCNCAv
KiBIZWFwVmVyaWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyREE3NzgzMThFMjU5OTkwMDY2
RkNCNiAvKiBIZWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUzMjQzOTQxODU2OTcw
OTAwMkVENjkyIC8qIGdlbmVyYXRlLWNvbWJpbmVkLWluc3BlY3Rvci1qc29uLnB5IGluIEhlYWRl
cnMgKi8sCiAJCQkJQTU4NDBFMjcxODdDOTgxRTAwODQzQjEwIC8qIGNzc21pbi5weSBpbiBIZWFk
ZXJzICovLApAQCAtNjk3NCw2ICs2OTgxLDcgQEAKIAkJCQlBNTEzRTVDQTE4NUY5NjI0MDA3RTk1
QUQgLyogSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1ODQw
RTIwMTg3QjdCODYwMDg0M0IxMCAvKiBJbmplY3RlZFNjcmlwdE1vZHVsZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjI0RTU1NTE3RjBCNzFDMDBBQkIyMTcgLyogSW5saW5lQ2FsbEZyYW1lU2V0
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZFN0JBNjBGMUExQTdDRUMwMEYxRjdCNCAvKiBIZWFw
VmVyaWZpZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVDRUVFMTQxODdGM0JBRDAwRTU1Qzk5
IC8qIEluc3BlY3RvckFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OTNDRjg2MTg0MDM4
Q0EwMEJGQ0UyNyAvKiBJbnNwZWN0b3JBZ2VudFJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGMkI5Q0Y2MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFs
aXphdGlvbi5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuY3BwCShyZXZpc2lvbiAxNzYyOTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkhlYXBJ
dGVyYXRpb25TY29wZS5oIgogI2luY2x1ZGUgIkhlYXBSb290VmlzaXRvci5oIgogI2luY2x1ZGUg
IkhlYXBTdGF0aXN0aWNzLmgiCisjaW5jbHVkZSAiSGVhcFZlcmlmaWVyLmgiCiAjaW5jbHVkZSAi
SW5jcmVtZW50YWxTd2VlcGVyLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRl
ICJKU0dsb2JhbE9iamVjdC5oIgpAQCAtMzM5LDYgKzM0MCw4IEBAIEhlYXA6OkhlYXAoVk0qIHZt
LCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIG1fZGVmZXJyYWxEZXB0aCgwKQogewogICAgIG1f
c3RvcmFnZVNwYWNlLmluaXQoKTsKKyAgICBpZiAoT3B0aW9uczo6dmVyaWZ5SGVhcCgpKQorICAg
ICAgICBtX3ZlcmlmaWVyID0gc3RkOjptYWtlX3VuaXF1ZTxIZWFwVmVyaWZpZXI+KHRoaXMsIE9w
dGlvbnM6Om51bWJlck9mR0NDeWNsZXNUb1JlY29yZEZvclZlcmlmaWNhdGlvbigpKTsKIH0KIAog
SGVhcDo6fkhlYXAoKQpAQCAtMTAwNCw2ICsxMDA3LDE0IEBAIHZvaWQgSGVhcDo6Y29sbGVjdChI
ZWFwT3BlcmF0aW9uIGNvbGxlY3QKICAgICBHQ1BIQVNFKENvbGxlY3QpOwogCiAgICAgZG91Ymxl
IGdjU3RhcnRUaW1lID0gV1RGOjptb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKKyAgICBp
ZiAobV92ZXJpZmllcikgeworICAgICAgICAvLyBWZXJpZnkgdGhhdCBsaXZlIG9iamVjdHMgZnJv
bSB0aGUgbGFzdCBHQyBjeWNsZSBoYXNuJ3QgYmVlbiBjb3JydXB0ZWQgYnkKKyAgICAgICAgLy8g
bXV0YXRvcnMgYmVmb3JlIHdlIGJlZ2luIHRoaXMgbmV3IEdDIGN5Y2xlLgorICAgICAgICBtX3Zl
cmlmaWVyLT52ZXJpZnkoSGVhcFZlcmlmaWVyOjpQaGFzZTo6QmVmb3JlR0MpOworCisgICAgICAg
IG1fdmVyaWZpZXItPmluaXRpYWxpemVHQ0N5Y2xlKCk7CisgICAgICAgIG1fdmVyaWZpZXItPmdh
dGhlckxpdmVPYmplY3RzKEhlYXBWZXJpZmllcjo6UGhhc2U6OkJlZm9yZU1hcmtpbmcpOworICAg
IH0KIAogICAgIGRlbGV0ZU9sZENvZGUoZ2NTdGFydFRpbWUpOwogICAgIGZsdXNoT2xkU3RydWN0
dXJlSURUYWJsZXMoKTsKQEAgLTEwMTIsNiArMTAyMywxMCBAQCB2b2lkIEhlYXA6OmNvbGxlY3Qo
SGVhcE9wZXJhdGlvbiBjb2xsZWN0CiAKICAgICBtYXJrUm9vdHMoZ2NTdGFydFRpbWUpOwogCisg
ICAgaWYgKG1fdmVyaWZpZXIpIHsKKyAgICAgICAgbV92ZXJpZmllci0+Z2F0aGVyTGl2ZU9iamVj
dHMoSGVhcFZlcmlmaWVyOjpQaGFzZTo6QWZ0ZXJNYXJraW5nKTsKKyAgICAgICAgbV92ZXJpZmll
ci0+dmVyaWZ5KEhlYXBWZXJpZmllcjo6UGhhc2U6OkFmdGVyTWFya2luZyk7CisgICAgfQogICAg
IEpBVkFTQ1JJUFRDT1JFX0dDX01BUktFRCgpOwogCiAgICAgaWYgKHZtKCktPnR5cGVQcm9maWxl
cigpKQpAQCAtMTAzNSw2ICsxMDUwLDExIEBAIHZvaWQgSGVhcDo6Y29sbGVjdChIZWFwT3BlcmF0
aW9uIGNvbGxlY3QKICAgICBkaWRGaW5pc2hDb2xsZWN0aW9uKGdjU3RhcnRUaW1lKTsKICAgICBy
ZXN1bWVDb21waWxlclRocmVhZHMoKTsKIAorICAgIGlmIChtX3ZlcmlmaWVyKSB7CisgICAgICAg
IG1fdmVyaWZpZXItPnRyaW1EZWFkT2JqZWN0cygpOworICAgICAgICBtX3ZlcmlmaWVyLT52ZXJp
ZnkoSGVhcFZlcmlmaWVyOjpQaGFzZTo6QWZ0ZXJHQyk7CisgICAgfQorCiAgICAgaWYgKE9wdGlv
bnM6OmxvZ0dDKCkpIHsKICAgICAgICAgZG91YmxlIGFmdGVyID0gY3VycmVudFRpbWVNUygpOwog
ICAgICAgICBkYXRhTG9nKGFmdGVyIC0gYmVmb3JlLCAiIG1zXVxuIik7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAxNzYyOTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDcgQEAgY2xhc3Mg
R0NBd2FyZUpJVFN0dWJSb3V0aW5lOwogY2xhc3MgR2xvYmFsQ29kZUJsb2NrOwogY2xhc3MgSGVh
cDsKIGNsYXNzIEhlYXBSb290VmlzaXRvcjsKK2NsYXNzIEhlYXBWZXJpZmllcjsKIGNsYXNzIElu
Y3JlbWVudGFsU3dlZXBlcjsKIGNsYXNzIEpJVFN0dWJSb3V0aW5lOwogY2xhc3MgSlNDZWxsOwpA
QCAtMjM0LDYgKzIzNSw3IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEdDQXdhcmVKSVRT
dHViUm91dGluZTsKICAgICBmcmllbmQgY2xhc3MgR0NMb2dnaW5nOwogICAgIGZyaWVuZCBjbGFz
cyBIYW5kbGVTZXQ7CisgICAgZnJpZW5kIGNsYXNzIEhlYXBWZXJpZmllcjsKICAgICBmcmllbmQg
Y2xhc3MgSklUU3R1YlJvdXRpbmU7CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJh
Y3RvcjsKICAgICBmcmllbmQgY2xhc3MgTWFya2VkU3BhY2U7CkBAIC0zODMsNiArMzg1LDggQEAg
cHJpdmF0ZToKICAgICAKICAgICB1bnNpZ25lZCBtX2RlZmVycmFsRGVwdGg7CiAgICAgVmVjdG9y
PERGRzo6V29ya2xpc3QqPiBtX3N1c3BlbmRlZENvbXBpbGVyV29ya2xpc3RzOworCisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEhlYXBWZXJpZmllcj4gbV92ZXJpZmllcjsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFZlcmlmaWVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVmVyaWZpZXIu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFZlcmlm
aWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI4OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiSGVhcFZlcmlmaWVyLmgiCisKKyNpbmNsdWRlICJIZWFwSXRlcmF0aW9uU2NvcGUuaCIK
KyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworTGl2ZU9iamVjdERh
dGEqIExpdmVPYmplY3RMaXN0OjpmaW5kT2JqZWN0KEpTT2JqZWN0KiBvYmopCit7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBsaXZlT2JqZWN0cy5zaXplKCk7IGkrKykgeworICAgICAgICBM
aXZlT2JqZWN0RGF0YSYgZGF0YSA9IGxpdmVPYmplY3RzW2ldOworICAgICAgICBpZiAob2JqID09
IGRhdGEub2JqKQorICAgICAgICAgICAgcmV0dXJuICZkYXRhOworICAgIH0KKyAgICByZXR1cm4g
bnVsbHB0cjsKK30KKworSGVhcFZlcmlmaWVyOjpIZWFwVmVyaWZpZXIoSGVhcCogaGVhcCwgdW5z
aWduZWQgbnVtYmVyT2ZHQ0N5Y2xlc1RvUmVjb3JkKQorICAgIDogbV9oZWFwKGhlYXApCisgICAg
LCBtX2N1cnJlbnRDeWNsZSgwKQorICAgICwgbV9udW1iZXJPZkN5Y2xlcyhudW1iZXJPZkdDQ3lj
bGVzVG9SZWNvcmQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9udW1iZXJPZkN5Y2xlcyA+IDAp
OworICAgIG1fY3ljbGVzID0gc3RkOjptYWtlX3VuaXF1ZTxHQ0N5Y2xlW10+KG1fbnVtYmVyT2ZD
eWNsZXMpOworfQorCitjb25zdCBjaGFyKiBIZWFwVmVyaWZpZXI6OmNvbGxlY3Rpb25UeXBlTmFt
ZShIZWFwT3BlcmF0aW9uIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBO
b09wZXJhdGlvbjoKKyAgICAgICAgcmV0dXJuICJOb09wZXJhdGlvbiI7CisgICAgY2FzZSBBbnlD
b2xsZWN0aW9uOgorICAgICAgICByZXR1cm4gIkFueUNvbGxlY3Rpb24iOworICAgIGNhc2UgQWxs
b2NhdGlvbjoKKyAgICAgICAgcmV0dXJuICJBbGxvY2F0aW9uIjsKKyAgICBjYXNlIEVkZW5Db2xs
ZWN0aW9uOgorICAgICAgICByZXR1cm4gIkVkZW5Db2xsZWN0aW9uIjsKKyAgICBjYXNlIEZ1bGxD
b2xsZWN0aW9uOgorICAgICAgICByZXR1cm4gIkZ1bGxDb2xsZWN0aW9uIjsKKyAgICB9CisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworY29uc3QgY2hhciogSGVhcFZlcmlm
aWVyOjpwaGFzZU5hbWUoSGVhcFZlcmlmaWVyOjpQaGFzZSBwaGFzZSkKK3sKKyAgICBzd2l0Y2gg
KHBoYXNlKSB7CisgICAgY2FzZSBQaGFzZTo6QmVmb3JlR0M6CisgICAgICAgIHJldHVybiAiQmVm
b3JlR0MiOworICAgIGNhc2UgUGhhc2U6OkJlZm9yZU1hcmtpbmc6CisgICAgICAgIHJldHVybiAi
QmVmb3JlTWFya2luZyI7CisgICAgY2FzZSBQaGFzZTo6QWZ0ZXJNYXJraW5nOgorICAgICAgICBy
ZXR1cm4gIkFmdGVyTWFya2luZyI7CisgICAgY2FzZSBQaGFzZTo6QWZ0ZXJHQzoKKyAgICAgICAg
cmV0dXJuICJBZnRlckdDIjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKK30KKworc3RhdGljIHZvaWQgZ2V0QnV0dGVyZmx5RGV0YWlscyhKU09iamVjdCogb2JqLCB2
b2lkKiYgYnV0dGVyZmx5QmFzZSwgc2l6ZV90JiBidXR0ZXJmbHlDYXBhY2l0eUluQnl0ZXMsIENv
cGllZEJsb2NrKiYgYnV0dGVyZmx5QmxvY2spCit7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBvYmotPnN0cnVjdHVyZSgpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gb2JqLT5idXR0
ZXJmbHkoKTsKKyAgICBidXR0ZXJmbHlCYXNlID0gYnV0dGVyZmx5LT5iYXNlKHN0cnVjdHVyZSk7
CisgICAgYnV0dGVyZmx5QmxvY2sgPSBDb3BpZWRTcGFjZTo6YmxvY2tGb3IoYnV0dGVyZmx5QmFz
ZSk7CisKKyAgICBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKTsKKyAgICBzaXplX3QgcHJlQ2FwYWNpdHk7CisgICAgc2l6ZV90IGluZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzOworICAgIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIgPSBvYmotPmhh
c0luZGV4aW5nSGVhZGVyKCk7CisgICAgaWYgKFVOTElLRUxZKGhhc0luZGV4aW5nSGVhZGVyKSkg
eworICAgICAgICBwcmVDYXBhY2l0eSA9IGJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+cHJl
Q2FwYWNpdHkoc3RydWN0dXJlKTsKKyAgICAgICAgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMg
PSBidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KHN0cnVjdHVyZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHJlQ2FwYWNpdHkgPSAwOworICAg
ICAgICBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyA9IDA7CisgICAgfQorICAgIGJ1dHRlcmZs
eUNhcGFjaXR5SW5CeXRlcyA9IEJ1dHRlcmZseTo6dG90YWxTaXplKHByZUNhcGFjaXR5LCBwcm9w
ZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMpOworfQorCit2b2lkIEhlYXBWZXJpZmllcjo6aW5pdGlhbGl6ZUdDQ3ljbGUoKQoreworICAg
IEhlYXAqIGhlYXAgPSBtX2hlYXA7CisgICAgaW5jcmVtZW50Q3ljbGUoKTsKKyAgICBjdXJyZW50
Q3ljbGUoKS5jb2xsZWN0aW9uVHlwZSA9IGhlYXAtPm9wZXJhdGlvbkluUHJvZ3Jlc3MoKTsKK30K
Kworc3RydWN0IEdhdGhlckxpdmVPYmpGdW5jdG9yIDogTWFya2VkQmxvY2s6OkNvdW50RnVuY3Rv
ciB7CisgICAgR2F0aGVyTGl2ZU9iakZ1bmN0b3IoTGl2ZU9iamVjdExpc3QmIGxpc3QpCisgICAg
ICAgIDogbV9saXN0KGxpc3QpCisgICAgeworICAgICAgICBBU1NFUlQoIWxpc3QubGl2ZU9iamVj
dHMuc2l6ZSgpKTsKKyAgICB9CisKKyAgICB2b2lkIG9wZXJhdG9yKCkoSlNDZWxsKiBjZWxsKQor
ICAgIHsKKyAgICAgICAgaWYgKCFjZWxsLT5pc09iamVjdCgpKQorICAgICAgICAgICAgcmV0dXJu
OyAgICAgICAgCisgICAgICAgIExpdmVPYmplY3REYXRhIGRhdGEoYXNPYmplY3QoY2VsbCkpOwor
ICAgICAgICBtX2xpc3QubGl2ZU9iamVjdHMuYXBwZW5kKGRhdGEpOworICAgIH0KKworICAgIExp
dmVPYmplY3RMaXN0JiBtX2xpc3Q7Cit9OworCit2b2lkIEhlYXBWZXJpZmllcjo6Z2F0aGVyTGl2
ZU9iamVjdHMoSGVhcFZlcmlmaWVyOjpQaGFzZSBwaGFzZSkKK3sKKyAgICBIZWFwKiBoZWFwID0g
bV9oZWFwOworICAgIExpdmVPYmplY3RMaXN0JiBsaXN0ID0gbGl2ZU9iamVjdExpc3RGb3JHYXRo
ZXJpbmcocGhhc2UpOworCisgICAgSGVhcEl0ZXJhdGlvblNjb3BlIGl0ZXJhdGlvblNjb3BlKCpo
ZWFwKTsKKyAgICBsaXN0LnJlc2V0KCk7CisgICAgR2F0aGVyTGl2ZU9iakZ1bmN0b3IgZnVuY3Rv
cihsaXN0KTsKKyAgICBoZWFwLT5tX29iamVjdFNwYWNlLmZvckVhY2hMaXZlQ2VsbChpdGVyYXRp
b25TY29wZSwgZnVuY3Rvcik7Cit9CisKK0xpdmVPYmplY3RMaXN0JiBIZWFwVmVyaWZpZXI6Omxp
dmVPYmplY3RMaXN0Rm9yR2F0aGVyaW5nKEhlYXBWZXJpZmllcjo6UGhhc2UgcGhhc2UpCit7Cisg
ICAgc3dpdGNoIChwaGFzZSkgeworICAgIGNhc2UgUGhhc2U6OkJlZm9yZU1hcmtpbmc6CisgICAg
ICAgIHJldHVybiBjdXJyZW50Q3ljbGUoKS5iZWZvcmU7CisgICAgY2FzZSBQaGFzZTo6QWZ0ZXJN
YXJraW5nOgorICAgICAgICByZXR1cm4gY3VycmVudEN5Y2xlKCkuYWZ0ZXI7CisgICAgY2FzZSBQ
aGFzZTo6QmVmb3JlR0M6CisgICAgY2FzZSBQaGFzZTo6QWZ0ZXJHQzoKKyAgICAgICAgLy8gV2Ug
c2hvdWxkIG5vdCBiZSBnYXRoZXJpbmcgbGl2ZSBvYmplY3RzIGR1cmluZyB0aGVzZSBwaGFzZXMu
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCitzdGF0
aWMgdm9pZCB0cmltRGVhZE9iamVjdHNGcm9tTGlzdChIYXNoU2V0PEpTT2JqZWN0Kj4mIGtub3du
TGl2ZVNldCwgTGl2ZU9iamVjdExpc3QmIGxpc3QpCit7CisgICAgaWYgKCFsaXN0Lmhhc0xpdmVP
YmplY3RzKQorICAgICAgICByZXR1cm47CisKKyAgICBzaXplX3QgbGl2ZU9iamVjdHNGb3VuZCA9
IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0LmxpdmVPYmplY3RzLnNpemUoKTsg
aSsrKSB7CisgICAgICAgIExpdmVPYmplY3REYXRhJiBvYmpEYXRhID0gbGlzdC5saXZlT2JqZWN0
c1tpXTsKKyAgICAgICAgaWYgKG9iakRhdGEuaXNDb25maXJtZWREZWFkKQorICAgICAgICAgICAg
Y29udGludWU7IC8vIERvbid0ICJyZXN1cnJlY3QiIGtub3duIGRlYWQgb2JqZWN0cy4KKyAgICAg
ICAgaWYgKCFrbm93bkxpdmVTZXQuY29udGFpbnMob2JqRGF0YS5vYmopKSB7CisgICAgICAgICAg
ICBvYmpEYXRhLmlzQ29uZmlybWVkRGVhZCA9IHRydWU7CisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorICAgICAgICBsaXZlT2JqZWN0c0ZvdW5kKys7CisgICAgfQorICAgIGxpc3Qu
aGFzTGl2ZU9iamVjdHMgPSAhIWxpdmVPYmplY3RzRm91bmQ7Cit9CisKK3ZvaWQgSGVhcFZlcmlm
aWVyOjp0cmltRGVhZE9iamVjdHMoKQoreworICAgIEhhc2hTZXQ8SlNPYmplY3QqPiBrbm93bkxp
dmVTZXQ7CisKKyAgICBMaXZlT2JqZWN0TGlzdCYgYWZ0ZXIgPSBjdXJyZW50Q3ljbGUoKS5hZnRl
cjsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFmdGVyLmxpdmVPYmplY3RzLnNpemUoKTsg
aSsrKSB7CisgICAgICAgIExpdmVPYmplY3REYXRhJiBvYmpEYXRhID0gYWZ0ZXIubGl2ZU9iamVj
dHNbaV07CisgICAgICAgIGtub3duTGl2ZVNldC5hZGQob2JqRGF0YS5vYmopOworICAgIH0KKwor
ICAgIHRyaW1EZWFkT2JqZWN0c0Zyb21MaXN0KGtub3duTGl2ZVNldCwgY3VycmVudEN5Y2xlKCku
YmVmb3JlKTsKKworICAgIGZvciAoaW50IGkgPSAtMTsgaSA+IC1tX251bWJlck9mQ3ljbGVzOyBp
LS0pIHsKKyAgICAgICAgdHJpbURlYWRPYmplY3RzRnJvbUxpc3Qoa25vd25MaXZlU2V0LCBjeWNs
ZUZvckluZGV4KGkpLmJlZm9yZSk7CisgICAgICAgIHRyaW1EZWFkT2JqZWN0c0Zyb21MaXN0KGtu
b3duTGl2ZVNldCwgY3ljbGVGb3JJbmRleChpKS5hZnRlcik7CisgICAgfQorfQorCitib29sIEhl
YXBWZXJpZmllcjo6dmVyaWZ5QnV0dGVyZmx5SXNJblN0b3JhZ2VTcGFjZShQaGFzZSBwaGFzZSwg
TGl2ZU9iamVjdExpc3QmIGxpc3QpCit7CisgICAgYXV0byYgbGl2ZU9iamVjdHMgPSBsaXN0Lmxp
dmVPYmplY3RzOworCisgICAgQ29waWVkU3BhY2UmIHN0b3JhZ2VTcGFjZSA9IG1faGVhcC0+bV9z
dG9yYWdlU3BhY2U7CisgICAgYm9vbCBsaXN0TmFtZVByaW50ZWQgPSBmYWxzZTsKKyAgICBib29s
IHN1Y2Nlc3MgPSB0cnVlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGl2ZU9iamVjdHMu
c2l6ZSgpOyBpKyspIHsKKyAgICAgICAgTGl2ZU9iamVjdERhdGEmIG9iamVjdERhdGEgPSBsaXZl
T2JqZWN0c1tpXTsKKyAgICAgICAgaWYgKG9iamVjdERhdGEuaXNDb25maXJtZWREZWFkKQorICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgSlNPYmplY3QqIG9iaiA9IG9iamVjdERhdGEu
b2JqOworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG9iai0+YnV0dGVyZmx5KCk7Cisg
ICAgICAgIGlmIChidXR0ZXJmbHkpIHsKKyAgICAgICAgICAgIHZvaWQqIGJ1dHRlcmZseUJhc2U7
CisgICAgICAgICAgICBzaXplX3QgYnV0dGVyZmx5Q2FwYWNpdHlJbkJ5dGVzOworICAgICAgICAg
ICAgQ29waWVkQmxvY2sqIGJ1dHRlcmZseUJsb2NrOworICAgICAgICAgICAgZ2V0QnV0dGVyZmx5
RGV0YWlscyhvYmosIGJ1dHRlcmZseUJhc2UsIGJ1dHRlcmZseUNhcGFjaXR5SW5CeXRlcywgYnV0
dGVyZmx5QmxvY2spOworCisgICAgICAgICAgICBpZiAoIXN0b3JhZ2VTcGFjZS5jb250YWlucyhi
dXR0ZXJmbHlCbG9jaykpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWxpc3ROYW1lUHJpbnRlZCkg
eworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigiVmVyaWZpY2F0aW9uIEAgcGhhc2UgJXMg
RkFJTEVEIGluIG9iamVjdCBsaXN0ICclcycgKHNpemUgJXp1KVxuIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHBoYXNlTmFtZShwaGFzZSksIGxpc3QubmFtZSwgbGl2ZU9iamVjdHMuc2l6ZSgp
KTsKKyAgICAgICAgICAgICAgICAgICAgbGlzdE5hbWVQcmludGVkID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG9iai0+
c3RydWN0dXJlKCk7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICA8JXU6JXU+IGJ1dHRl
cmZseSAlcCAoYmFzZSAlcCBzaXplICV6dSBibG9jayAlcCkgTk9UIGluIFN0b3JhZ2VTcGFjZSB8
IG9iaiAlcCB0eXBlICclcydcbiIsCisgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZClnZXRw
aWQoKSwgKHVuc2lnbmVkKWN1cnJlbnRUaHJlYWQoKSwKKyAgICAgICAgICAgICAgICAgICAgYnV0
dGVyZmx5LCBidXR0ZXJmbHlCYXNlLCBidXR0ZXJmbHlDYXBhY2l0eUluQnl0ZXMsIGJ1dHRlcmZs
eUJsb2NrLAorICAgICAgICAgICAgICAgICAgICBvYmosIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCkt
PmNsYXNzTmFtZSk7CisgICAgICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBzdWNjZXNzOworfQorCit2b2lkIEhl
YXBWZXJpZmllcjo6dmVyaWZ5KEhlYXBWZXJpZmllcjo6UGhhc2UgcGhhc2UpCit7CisgICAgYm9v
bCBiZWZvcmVWZXJpZmllZCA9IHZlcmlmeUJ1dHRlcmZseUlzSW5TdG9yYWdlU3BhY2UocGhhc2Us
IGN1cnJlbnRDeWNsZSgpLmJlZm9yZSk7CisgICAgYm9vbCBhZnRlclZlcmlmaWVkID0gdmVyaWZ5
QnV0dGVyZmx5SXNJblN0b3JhZ2VTcGFjZShwaGFzZSwgY3VycmVudEN5Y2xlKCkuYWZ0ZXIpOwor
ICAgIFJFTEVBU0VfQVNTRVJUKGJlZm9yZVZlcmlmaWVkICYmIGFmdGVyVmVyaWZpZWQpOworfQor
Cit2b2lkIEhlYXBWZXJpZmllcjo6cmVwb3J0T2JqZWN0KExpdmVPYmplY3REYXRhJiBvYmpEYXRh
LCBpbnQgY3ljbGVJbmRleCwgSGVhcFZlcmlmaWVyOjpHQ0N5Y2xlJiBjeWNsZSwgTGl2ZU9iamVj
dExpc3QmIGxpc3QpCit7CisgICAgSlNPYmplY3QqIG9iaiA9IG9iakRhdGEub2JqOworCisgICAg
aWYgKG9iakRhdGEuaXNDb25maXJtZWREZWFkKSB7CisgICAgICAgIGRhdGFMb2dGKCJGT1VORCBk
ZWFkIG9iaiAlcCBpbiBHQ1slZF0gJXMgbGlzdCAnJXMnXG4iLAorICAgICAgICAgICAgb2JqLCBj
eWNsZUluZGV4LCBjeWNsZS5jb2xsZWN0aW9uVHlwZU5hbWUoKSwgbGlzdC5uYW1lKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gb2JqLT5zdHJ1
Y3R1cmUoKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG9iai0+YnV0dGVyZmx5KCk7Cisg
ICAgdm9pZCogYnV0dGVyZmx5QmFzZTsKKyAgICBzaXplX3QgYnV0dGVyZmx5Q2FwYWNpdHlJbkJ5
dGVzOworICAgIENvcGllZEJsb2NrKiBidXR0ZXJmbHlCbG9jazsKKyAgICBnZXRCdXR0ZXJmbHlE
ZXRhaWxzKG9iaiwgYnV0dGVyZmx5QmFzZSwgYnV0dGVyZmx5Q2FwYWNpdHlJbkJ5dGVzLCBidXR0
ZXJmbHlCbG9jayk7CisKKyAgICBkYXRhTG9nRigiRk9VTkQgb2JqICVwIHR5cGUgJyVzJyBidXR0
ZXJmbHkgJXAgKGJhc2UgJXAgc2l6ZSAlenUgYmxvY2sgJXApIGluIEdDWyVkXSAlcyBsaXN0ICcl
cydcbiIsCisgICAgICAgIG9iaiwgc3RydWN0dXJlLT5jbGFzc0luZm8oKS0+Y2xhc3NOYW1lLAor
ICAgICAgICBidXR0ZXJmbHksIGJ1dHRlcmZseUJhc2UsIGJ1dHRlcmZseUNhcGFjaXR5SW5CeXRl
cywgYnV0dGVyZmx5QmxvY2ssCisgICAgICAgIGN5Y2xlSW5kZXgsIGN5Y2xlLmNvbGxlY3Rpb25U
eXBlTmFtZSgpLCBsaXN0Lm5hbWUpOworfQorCit2b2lkIEhlYXBWZXJpZmllcjo6Y2hlY2tJZlJl
Y29yZGVkKEpTT2JqZWN0KiBvYmopCit7CisgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworCisgICAg
Zm9yIChpbnQgY3ljbGVJbmRleCA9IDA7IGN5Y2xlSW5kZXggPiAtbV9udW1iZXJPZkN5Y2xlczsg
Y3ljbGVJbmRleC0tKSB7CisgICAgICAgIEdDQ3ljbGUmIGN5Y2xlID0gY3ljbGVGb3JJbmRleChj
eWNsZUluZGV4KTsKKyAgICAgICAgTGl2ZU9iamVjdExpc3QmIGJlZm9yZUxpc3QgPSBjeWNsZS5i
ZWZvcmU7IAorICAgICAgICBMaXZlT2JqZWN0TGlzdCYgYWZ0ZXJMaXN0ID0gY3ljbGUuYWZ0ZXI7
IAorCisgICAgICAgIExpdmVPYmplY3REYXRhKiBvYmpEYXRhOworICAgICAgICBvYmpEYXRhID0g
YmVmb3JlTGlzdC5maW5kT2JqZWN0KG9iaik7CisgICAgICAgIGlmIChvYmpEYXRhKSB7CisgICAg
ICAgICAgICByZXBvcnRPYmplY3QoKm9iakRhdGEsIGN5Y2xlSW5kZXgsIGN5Y2xlLCBiZWZvcmVM
aXN0KTsKKyAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBvYmpE
YXRhID0gYWZ0ZXJMaXN0LmZpbmRPYmplY3Qob2JqKTsKKyAgICAgICAgaWYgKG9iakRhdGEpIHsK
KyAgICAgICAgICAgIHJlcG9ydE9iamVjdCgqb2JqRGF0YSwgY3ljbGVJbmRleCwgY3ljbGUsIGFm
dGVyTGlzdCk7CisgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBpZiAoIWZvdW5kKQorICAgICAgICBkYXRhTG9nRigib2JqICVwIE5PVCBGT1VORFxuIiwg
b2JqKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwVmVyaWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwVmVyaWZpZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXBWZXJpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
SGVhcFZlcmlmaWVyX2gKKyNkZWZpbmUgSGVhcFZlcmlmaWVyX2gKKworI2luY2x1ZGUgIkhlYXAu
aCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBK
U09iamVjdDsKK2NsYXNzIE1hcmtlZEJsb2NrOworCitzdHJ1Y3QgTGl2ZU9iamVjdERhdGEgewor
ICAgIExpdmVPYmplY3REYXRhKEpTT2JqZWN0KiBvYmosIGJvb2wgaXNDb25maXJtZWREZWFkID0g
ZmFsc2UpCisgICAgICAgIDogb2JqKG9iaikKKyAgICAgICAgLCBpc0NvbmZpcm1lZERlYWQoaXND
b25maXJtZWREZWFkKQorICAgIHsKKyAgICB9CisKKyAgICBKU09iamVjdCogb2JqOworICAgIGJv
b2wgaXNDb25maXJtZWREZWFkOworfTsKKworc3RydWN0IExpdmVPYmplY3RMaXN0IHsKKyAgICBM
aXZlT2JqZWN0TGlzdChjb25zdCBjaGFyKiBuYW1lKQorICAgICAgICA6IG5hbWUobmFtZSkKKyAg
ICAgICAgLCBoYXNMaXZlT2JqZWN0cyh0cnVlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHJl
c2V0KCkKKyAgICB7CisgICAgICAgIGxpdmVPYmplY3RzLmNsZWFyKCk7CisgICAgICAgIGhhc0xp
dmVPYmplY3RzID0gdHJ1ZTsgLy8gUHJlc3VtZSB0byBoYXZlIGxpdmUgb2JqZWN0cyB1bnRpbCB0
aGUgbGlzdCBpcyB0cmltbWVkLgorICAgIH0KKworICAgIExpdmVPYmplY3REYXRhKiBmaW5kT2Jq
ZWN0KEpTT2JqZWN0Kik7CisKKyAgICBjb25zdCBjaGFyKiBuYW1lOworICAgIFZlY3RvcjxMaXZl
T2JqZWN0RGF0YT4gbGl2ZU9iamVjdHM7CisgICAgYm9vbCBoYXNMaXZlT2JqZWN0czsKK307CisK
K2NsYXNzIEhlYXBWZXJpZmllciB7CitwdWJsaWM6CisgICAgZW51bSBjbGFzcyBQaGFzZSB7Cisg
ICAgICAgIEJlZm9yZUdDLAorICAgICAgICBCZWZvcmVNYXJraW5nLAorICAgICAgICBBZnRlck1h
cmtpbmcsCisgICAgICAgIEFmdGVyR0MKKyAgICB9OworCisgICAgSGVhcFZlcmlmaWVyKEhlYXAq
LCB1bnNpZ25lZCBudW1iZXJPZkdDQ3ljbGVzVG9SZWNvcmQpOworCisgICAgdm9pZCBpbml0aWFs
aXplR0NDeWNsZSgpOworICAgIHZvaWQgZ2F0aGVyTGl2ZU9iamVjdHMoUGhhc2UpOworICAgIHZv
aWQgdHJpbURlYWRPYmplY3RzKCk7CisgICAgdm9pZCB2ZXJpZnkoUGhhc2UpOworCisgICAgLy8g
U2NhbnMgYWxsIHByZXZpb3VzbHkgcmVjb3JkZWQgTGl2ZU9iamVjdExpc3RzIGFuZCBjaGVja3Mg
aWYgdGhlIHNwZWNpZmllZAorICAgIC8vIG9iamVjdCB3YXMgaW4gYW55IG9mIHRob3NlIGxpc3Rz
LgorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY2hlY2tJZlJlY29yZGVkKEpTT2JqZWN0Kik7
CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciogY29sbGVjdGlvblR5cGVOYW1lKEhlYXBPcGVyYXRp
b24pOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBwaGFzZU5hbWUoUGhhc2UpOworCitwcml2YXRl
OgorICAgIHN0cnVjdCBHQ0N5Y2xlIHsKKyAgICAgICAgR0NDeWNsZSgpCisgICAgICAgICAgICA6
IGJlZm9yZSgiQmVmb3JlIE1hcmtpbmciKQorICAgICAgICAgICAgLCBhZnRlcigiQWZ0ZXIgTWFy
a2luZyIpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIEhlYXBPcGVyYXRpb24gY29s
bGVjdGlvblR5cGU7CisgICAgICAgIExpdmVPYmplY3RMaXN0IGJlZm9yZTsKKyAgICAgICAgTGl2
ZU9iamVjdExpc3QgYWZ0ZXI7CisKKyAgICAgICAgY29uc3QgY2hhciogY29sbGVjdGlvblR5cGVO
YW1lKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEhlYXBWZXJpZmllcjo6
Y29sbGVjdGlvblR5cGVOYW1lKGNvbGxlY3Rpb25UeXBlKTsKKyAgICAgICAgfQorICAgIH07CisK
KyAgICB2b2lkIGluY3JlbWVudEN5Y2xlKCkgeyBtX2N1cnJlbnRDeWNsZSA9IChtX2N1cnJlbnRD
eWNsZSArIDEpICUgbV9udW1iZXJPZkN5Y2xlczsgfQorICAgIEdDQ3ljbGUmIGN1cnJlbnRDeWNs
ZSgpIHsgcmV0dXJuIG1fY3ljbGVzW21fY3VycmVudEN5Y2xlXTsgfQorICAgIEdDQ3ljbGUmIGN5
Y2xlRm9ySW5kZXgoaW50IGN5Y2xlSW5kZXgpCisgICAgeworICAgICAgICBBU1NFUlQoY3ljbGVJ
bmRleCA8PSAwICYmIGN5Y2xlSW5kZXggPiAtbV9udW1iZXJPZkN5Y2xlcyk7CisgICAgICAgIGN5
Y2xlSW5kZXggKz0gbV9jdXJyZW50Q3ljbGU7CisgICAgICAgIGlmIChjeWNsZUluZGV4IDwgMCkK
KyAgICAgICAgICAgIGN5Y2xlSW5kZXggKz0gbV9udW1iZXJPZkN5Y2xlczsKKyAgICAgICAgQVNT
RVJUKGN5Y2xlSW5kZXggPCBtX251bWJlck9mQ3ljbGVzKTsKKyAgICAgICAgcmV0dXJuIG1fY3lj
bGVzW2N5Y2xlSW5kZXhdOworICAgIH0KKworICAgIExpdmVPYmplY3RMaXN0JiBsaXZlT2JqZWN0
TGlzdEZvckdhdGhlcmluZyhQaGFzZSk7CisgICAgYm9vbCB2ZXJpZnlCdXR0ZXJmbHlJc0luU3Rv
cmFnZVNwYWNlKFBoYXNlLCBMaXZlT2JqZWN0TGlzdCYpOworCisgICAgc3RhdGljIHZvaWQgcmVw
b3J0T2JqZWN0KExpdmVPYmplY3REYXRhJiwgaW50IGN5Y2xlSW5kZXgsIEhlYXBWZXJpZmllcjo6
R0NDeWNsZSYsIExpdmVPYmplY3RMaXN0Jik7CisKKyAgICBIZWFwKiBtX2hlYXA7CisgICAgaW50
IG1fY3VycmVudEN5Y2xlOworICAgIGludCBtX251bWJlck9mQ3ljbGVzOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxHQ0N5Y2xlW10+IG1fY3ljbGVzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
KyNlbmRpZiAvLyBIZWFwVmVyaWZpZXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PcHRpb25zLmgJKHJldmlzaW9uIDE3NjI5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjg3LDYgKzI4Nyw5IEBAIHR5cGVk
ZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYoYm9vbCwgbG9nSGVhcFN0YXRpc3Rp
Y3NBdEV4aXQsIGZhbHNlKSBcCiAgICAgdihib29sLCBlbmFibGVUeXBlUHJvZmlsZXIsIGZhbHNl
KSBcCiAgICAgXAorICAgIHYoYm9vbCwgdmVyaWZ5SGVhcCwgdHJ1ZSkgXAorICAgIHYodW5zaWdu
ZWQsIG51bWJlck9mR0NDeWNsZXNUb1JlY29yZEZvclZlcmlmaWNhdGlvbiwgMykgXAorICAgIFwK
ICAgICB2KGJvb2wsIGVuYWJsZUV4Y2VwdGlvbkZ1enosIGZhbHNlKSBcCiAgICAgdih1bnNpZ25l
ZCwgZmlyZUV4Y2VwdGlvbkZ1enpBdCwgMCkKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241841</attachid>
            <date>2014-11-18 17:53:15 -0800</date>
            <delta_ts>2014-11-18 18:17:14 -0800</delta_ts>
            <desc>take 3: with some needed #include of inline files.</desc>
            <filename>bug-138851.patch</filename>
            <type>text/plain</type>
            <size>25997</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTc2Mjk1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY5IEBA
CisyMDE0LTExLTE4ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGQgSGVhcCB2ZXJpZmljYXRpb24gaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgIDxodHRwczovL3dl
YmtpdC5vcmcvYi8xMzg4NTE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhlIHZlcmlmaWNhdGlvbiBpbmZyYXN0cnVjdHVyZSBjb2RlIGlzIGFsd2F5
cyBidWlsdCBpbiBidXQgZGlzYWJsZWQgYnkKKyAgICAgICAgZGVmYXVsdC4gIFdoZW4gZGlzYWJs
ZWQsIHRoZSBjb3N0IGlzIG1pbmltYWw6CisgICAgICAgIDEuIEhlYXAgaGFzIGEgbV92ZXJpZmll
ciBmaWVsZC4KKyAgICAgICAgMi4gR0MgZG9lcyBhIGZldyAiaWYgKG1fdmVyaWZpZXIpIiBjaGVj
a3MgdGhhdCBzaG91bGQgZmFpbC4KKyAgICAgICAgMy4gSGVhcFZlcmlmaWVyIHRha2VzIHVwIGNv
ZGUgc3BhY2UgdGhvdWdoIG5vdCB1c2VkLgorCisgICAgICAgIFdoZW4gZW5hYmxlZDoKKyAgICAg
ICAgMS4gVGhlIEhlYXBWZXJpZmllciB3aWxsIGtlZXAgTiBudW1iZXIgb2YgR0MgY3ljbGUgZGF0
YS4KKyAgICAgICAgICAgRWFjaCBHQyBjeWNsZSB3aWxsIGNvbnRhaW4gYSAiYmVmb3JlIG1hcmtp
bmciIGFuZCAiYWZ0ZXIgbWFya2luZyIgbGl2ZQorICAgICAgICAgICBvYmplY3QgbGlzdC4KKyAg
ICAgICAgICAgVGhlIEdDIGN5Y2xlcyBpcyBhIGNpcmN1bGFyIGJ1ZmZlci4gIE9ubHkgZGF0YSBm
b3IgdGhlIGxhc3QgTiBHQyBjeWNsZXMKKyAgICAgICAgICAgd2lsbCBiZSByZXRhaW5lZC4KKyAg
ICAgICAgMi4gRHVyaW5nIEdDLCB0aGUgY3VycmVudCBHQyBjeWNsZSdzIGxpdmUgb2JqZWN0cyBs
aXN0cyB3aWxsIGJlIHBvcHVsYXRlZAorICAgICAgICAgICBiZWZvcmUgYW5kIGFmdGVyIG1hcmtp
bmcuCisgICAgICAgIDMuIFRoZSBjdXJyZW50IEdDIGN5Y2xlJ3MgbGl2ZSBvYmplY3QgbGlzdHMg
d2lsbCBiZSB2YWxpZGF0ZWQgYmVmb3JlIEdDLAorICAgICAgICAgICBhZnRlciBtYXJraW5nLCBh
bmQgYWZ0ZXIgR0MuCisKKyAgICAgICAgQ3VycmVudGx5LCB0aGUgb25seSB2YWxpZGF0aW9uIGJl
aW5nIGRvbmUgaXMgdG8gdmVyaWZ5IHRoYXQgb2JqZWN0CisgICAgICAgIGJ1dHRlcmZsaWVzIGFy
ZSBhbGxvY2F0ZWQgZnJvbSB2YWxpZCBibG9ja3MgaW4gdGhlIFN0b3JhZ2UgKGFrYSBDb3BpZWQp
CisgICAgICAgIHNwYWNlLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpI
ZWFwOjpIZWFwKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29sbGVjdCk6CisgICAgICAgICogaGVh
cC9IZWFwLmg6CisgICAgICAgICogaGVhcC9IZWFwVmVyaWZpZXIuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6TGl2ZU9iamVjdExpc3Q6OmZpbmRPYmplY3QpOgorICAgICAgICAoSlNDOjpIZWFw
VmVyaWZpZXI6OkhlYXBWZXJpZmllcik6CisgICAgICAgIChKU0M6OkhlYXBWZXJpZmllcjo6Y29s
bGVjdGlvblR5cGVOYW1lKToKKyAgICAgICAgKEpTQzo6SGVhcFZlcmlmaWVyOjpwaGFzZU5hbWUp
OgorICAgICAgICAoSlNDOjpnZXRCdXR0ZXJmbHlEZXRhaWxzKToKKyAgICAgICAgKEpTQzo6SGVh
cFZlcmlmaWVyOjppbml0aWFsaXplR0NDeWNsZSk6CisgICAgICAgIChKU0M6OkdhdGhlckxpdmVP
YmpGdW5jdG9yOjpHYXRoZXJMaXZlT2JqRnVuY3Rvcik6CisgICAgICAgIChKU0M6OkdhdGhlckxp
dmVPYmpGdW5jdG9yOjpvcGVyYXRvcigpKToKKyAgICAgICAgKEpTQzo6SGVhcFZlcmlmaWVyOjpn
YXRoZXJMaXZlT2JqZWN0cyk6CisgICAgICAgIChKU0M6OkhlYXBWZXJpZmllcjo6bGl2ZU9iamVj
dExpc3RGb3JHYXRoZXJpbmcpOgorICAgICAgICAoSlNDOjp0cmltRGVhZE9iamVjdHNGcm9tTGlz
dCk6CisgICAgICAgIChKU0M6OkhlYXBWZXJpZmllcjo6dHJpbURlYWRPYmplY3RzKToKKyAgICAg
ICAgKEpTQzo6SGVhcFZlcmlmaWVyOjp2ZXJpZnlCdXR0ZXJmbHlJc0luU3RvcmFnZVNwYWNlKToK
KyAgICAgICAgKEpTQzo6SGVhcFZlcmlmaWVyOjp2ZXJpZnkpOgorICAgICAgICAoSlNDOjpIZWFw
VmVyaWZpZXI6OnJlcG9ydE9iamVjdCk6CisKKyAgICAgICAgKEpTQzo6SGVhcFZlcmlmaWVyOjpj
aGVja0lmUmVjb3JkZWQpOgorICAgICAgICAtIGNoZWNrSWZSZWNvcmRlZCgpIGlzIG5vdCBjdXJy
ZW50bHkgY2FsbGVkIHByb2dyYW1tYXRpY2FsbHkgZnJvbSBhbnkgY29kZS4KKyAgICAgICAgICBJ
dCBjb21lcyBpbiBoYW5keSB3aGVuIHdlIGhhdmUgYSBkZWJ1Z2dlciBhdHRhY2hlZCBhbmQgd2Fu
dCB0byBjaGVjayBpZgorICAgICAgICAgIGFuIG9iamVjdCBwb2ludGVyIHdhcyBzZWVuIGluIHRo
ZSBsYXN0IGZldyBHQyBjeWNsZXMuCisKKyAgICAgICAgKiBoZWFwL0hlYXBWZXJpZmllci5oOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6TGl2ZU9iamVjdERhdGE6OkxpdmVPYmplY3REYXRhKToKKyAg
ICAgICAgKEpTQzo6TGl2ZU9iamVjdExpc3Q6OkxpdmVPYmplY3RMaXN0KToKKyAgICAgICAgKEpT
Qzo6TGl2ZU9iamVjdExpc3Q6OnJlc2V0KToKKyAgICAgICAgKEpTQzo6SGVhcFZlcmlmaWVyOjpH
Q0N5Y2xlOjpHQ0N5Y2xlKToKKyAgICAgICAgKEpTQzo6SGVhcFZlcmlmaWVyOjpHQ0N5Y2xlOjpj
b2xsZWN0aW9uVHlwZU5hbWUpOgorICAgICAgICAoSlNDOjpIZWFwVmVyaWZpZXI6OmluY3JlbWVu
dEN5Y2xlKToKKyAgICAgICAgKEpTQzo6SGVhcFZlcmlmaWVyOjpjdXJyZW50Q3ljbGUpOgorICAg
ICAgICAoSlNDOjpIZWFwVmVyaWZpZXI6OmN5Y2xlRm9ySW5kZXgpOgorICAgICAgICAqIHJ1bnRp
bWUvT3B0aW9ucy5oOgorCiAyMDE0LTExLTE4ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5j
b20+CiAKICAgICAgICAgVXBkYXRlIHRoZSBWZWN0b3IgQVBJIHRvIGRlYWwgd2l0aCB1bnNpZ25l
ZCB0eXBlcyBpbnN0ZWFkIG9mIHNpemVfdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDE3NjI5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNTkyLDYg
KzE1OTIsOCBAQAogCQlGRTUyNDhGOTE5MTQ0MkQ5MDBCN0ZERTQgLyogVmFyaWFibGVXYXRjaHBv
aW50U2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkU1MjQ4RjgxOTE0NDJEOTAwQjdGREU0IC8qIFZhcmlhYmxlV2F0Y2hwb2ludFNldElu
bGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlGRTU5MzJBNzE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNTkzMkE1MTgzQzVBMjYwMEEx
RUNDQyAvKiBWTUVudHJ5U2NvcGUuY3BwICovOyB9OwogCQlGRTU5MzJBODE4M0M1QTI2MDBBMUVD
Q0MgLyogVk1FbnRyeVNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRTU5MzJBNjE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkU3QkE2MEYx
QTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJpZmllci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTdCQTYwRDFBMUE3Q0VDMDBGMUY3QjQgLyogSGVh
cFZlcmlmaWVyLmNwcCAqLzsgfTsKKwkJRkU3QkE2MTAxQTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBW
ZXJpZmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkU3QkE2MEUxQTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJpZmllci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFQTA4NjIwMTgyQjdBMDQwMEY2
RDg1MSAvKiBCcmVha3BvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRUEwODYxRTE4MkI3QTA0MDBGNkQ4NTEgLyogQnJlYWtwb2ludC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFQTA4NjIxMTgy
QjdBMDQwMEY2RDg1MSAvKiBEZWJ1Z2dlclByaW1pdGl2ZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFQTA4NjFGMTgyQjdBMDQwMEY2RDg1MSAvKiBE
ZWJ1Z2dlclByaW1pdGl2ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlGRUI1OEMxNDE4N0I4QjE2MDA5OEVGMEIgLyogRXJyb3JIYW5kbGluZ1Nj
b3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZF
QjU4QzEyMTg3QjhCMTYwMDk4RUYwQiAvKiBFcnJvckhhbmRsaW5nU2NvcGUuY3BwICovOyB9OwpA
QCAtMzMwNSw2ICszMzA3LDggQEAKIAkJRkU1MjQ4RjgxOTE0NDJEOTAwQjdGREU0IC8qIFZhcmlh
YmxlV2F0Y2hwb2ludFNldElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVmFyaWFibGVXYXRjaHBvaW50U2V0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlGRTU5MzJBNTE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZNRW50cnlTY29wZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNTkzMkE2MTgzQzVBMjYwMEExRUNDQyAvKiBWTUVu
dHJ5U2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVk1FbnRyeVNjb3Bl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFN0JBNjBEMUExQTdDRUMwMEYxRjdC
NCAvKiBIZWFwVmVyaWZpZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSGVhcFZlcmlmaWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU3QkE2
MEUxQTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBIZWFwVmVyaWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkVBMDg2MUUxODJCN0EwNDAwRjZEODUxIC8qIEJyZWFrcG9pbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQnJlYWtwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlGRUEwODYxRjE4MkI3QTA0MDBGNkQ4NTEgLyogRGVidWdnZXJQcmltaXRpdmVzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlYnVnZ2VyUHJpbWl0aXZlcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUI1OEMxMjE4N0I4QjE2MDA5OEVGMEIgLyog
RXJyb3JIYW5kbGluZ1Njb3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEVycm9ySGFuZGxpbmdTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0zNzk2LDYgKzM4MDAsOCBAQAogCQkxNDJFMzEyQTEzNEZGMEE2MDBBRkFEQjUgLyogaGVhcCAq
LyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJRkU3QkE2MEQx
QTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJpZmllci5jcHAgKi8sCisJCQkJRkU3QkE2MEUxQTFB
N0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJpZmllci5oICovLAogCQkJCUMyREE3NzgyMThFMjU5OTkw
MDY2RkNCNiAvKiBIZWFwSW5saW5lcy5oICovLAogCQkJCUFEREIxRjYyMThENzdEQjcwMDlCNThB
OCAvKiBPcGFxdWVSb290U2V0LmggKi8sCiAJCQkJMkFBQ0U2M0ExOENBNUEwMzAwRUQwMTkxIC8q
IEdDQWN0aXZpdHlDYWxsYmFjay5jcHAgKi8sCkBAIC01MzY0LDYgKzUzNzAsNyBAQAogCQkJCUE1
ODQwMzIwMThCRkZCRTEwMDVBMDgxMSAvKiBJbnNwZWN0b3JBZ2VudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMkFBQkNERTcxOEVGMjk0MjAwMDAyMDk2IC8qIEdDTG9nZ2luZy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRkU1MjQ4RjkxOTE0NDJEOTAwQjdGREU0IC8qIFZhcmlhYmxlV2F0Y2hwb2ludFNl
dElubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFN0JBNjEwMUExQTdDRUMwMEYxRjdCNCAv
KiBIZWFwVmVyaWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyREE3NzgzMThFMjU5OTkwMDY2
RkNCNiAvKiBIZWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUzMjQzOTQxODU2OTcw
OTAwMkVENjkyIC8qIGdlbmVyYXRlLWNvbWJpbmVkLWluc3BlY3Rvci1qc29uLnB5IGluIEhlYWRl
cnMgKi8sCiAJCQkJQTU4NDBFMjcxODdDOTgxRTAwODQzQjEwIC8qIGNzc21pbi5weSBpbiBIZWFk
ZXJzICovLApAQCAtNjk3NCw2ICs2OTgxLDcgQEAKIAkJCQlBNTEzRTVDQTE4NUY5NjI0MDA3RTk1
QUQgLyogSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1ODQw
RTIwMTg3QjdCODYwMDg0M0IxMCAvKiBJbmplY3RlZFNjcmlwdE1vZHVsZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjI0RTU1NTE3RjBCNzFDMDBBQkIyMTcgLyogSW5saW5lQ2FsbEZyYW1lU2V0
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZFN0JBNjBGMUExQTdDRUMwMEYxRjdCNCAvKiBIZWFw
VmVyaWZpZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVDRUVFMTQxODdGM0JBRDAwRTU1Qzk5
IC8qIEluc3BlY3RvckFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OTNDRjg2MTg0MDM4
Q0EwMEJGQ0UyNyAvKiBJbnNwZWN0b3JBZ2VudFJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGMkI5Q0Y2MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFs
aXphdGlvbi5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuY3BwCShyZXZpc2lvbiAxNzYyOTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkhlYXBJ
dGVyYXRpb25TY29wZS5oIgogI2luY2x1ZGUgIkhlYXBSb290VmlzaXRvci5oIgogI2luY2x1ZGUg
IkhlYXBTdGF0aXN0aWNzLmgiCisjaW5jbHVkZSAiSGVhcFZlcmlmaWVyLmgiCiAjaW5jbHVkZSAi
SW5jcmVtZW50YWxTd2VlcGVyLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRl
ICJKU0dsb2JhbE9iamVjdC5oIgpAQCAtMzM5LDYgKzM0MCw4IEBAIEhlYXA6OkhlYXAoVk0qIHZt
LCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIG1fZGVmZXJyYWxEZXB0aCgwKQogewogICAgIG1f
c3RvcmFnZVNwYWNlLmluaXQoKTsKKyAgICBpZiAoT3B0aW9uczo6dmVyaWZ5SGVhcCgpKQorICAg
ICAgICBtX3ZlcmlmaWVyID0gc3RkOjptYWtlX3VuaXF1ZTxIZWFwVmVyaWZpZXI+KHRoaXMsIE9w
dGlvbnM6Om51bWJlck9mR0NDeWNsZXNUb1JlY29yZEZvclZlcmlmaWNhdGlvbigpKTsKIH0KIAog
SGVhcDo6fkhlYXAoKQpAQCAtMTAwNCw2ICsxMDA3LDE0IEBAIHZvaWQgSGVhcDo6Y29sbGVjdChI
ZWFwT3BlcmF0aW9uIGNvbGxlY3QKICAgICBHQ1BIQVNFKENvbGxlY3QpOwogCiAgICAgZG91Ymxl
IGdjU3RhcnRUaW1lID0gV1RGOjptb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKKyAgICBp
ZiAobV92ZXJpZmllcikgeworICAgICAgICAvLyBWZXJpZnkgdGhhdCBsaXZlIG9iamVjdHMgZnJv
bSB0aGUgbGFzdCBHQyBjeWNsZSBoYXZlbid0IGJlZW4gY29ycnVwdGVkIGJ5CisgICAgICAgIC8v
IG11dGF0b3JzIGJlZm9yZSB3ZSBiZWdpbiB0aGlzIG5ldyBHQyBjeWNsZS4KKyAgICAgICAgbV92
ZXJpZmllci0+dmVyaWZ5KEhlYXBWZXJpZmllcjo6UGhhc2U6OkJlZm9yZUdDKTsKKworICAgICAg
ICBtX3ZlcmlmaWVyLT5pbml0aWFsaXplR0NDeWNsZSgpOworICAgICAgICBtX3ZlcmlmaWVyLT5n
YXRoZXJMaXZlT2JqZWN0cyhIZWFwVmVyaWZpZXI6OlBoYXNlOjpCZWZvcmVNYXJraW5nKTsKKyAg
ICB9CiAKICAgICBkZWxldGVPbGRDb2RlKGdjU3RhcnRUaW1lKTsKICAgICBmbHVzaE9sZFN0cnVj
dHVyZUlEVGFibGVzKCk7CkBAIC0xMDEyLDYgKzEwMjMsMTAgQEAgdm9pZCBIZWFwOjpjb2xsZWN0
KEhlYXBPcGVyYXRpb24gY29sbGVjdAogCiAgICAgbWFya1Jvb3RzKGdjU3RhcnRUaW1lKTsKIAor
ICAgIGlmIChtX3ZlcmlmaWVyKSB7CisgICAgICAgIG1fdmVyaWZpZXItPmdhdGhlckxpdmVPYmpl
Y3RzKEhlYXBWZXJpZmllcjo6UGhhc2U6OkFmdGVyTWFya2luZyk7CisgICAgICAgIG1fdmVyaWZp
ZXItPnZlcmlmeShIZWFwVmVyaWZpZXI6OlBoYXNlOjpBZnRlck1hcmtpbmcpOworICAgIH0KICAg
ICBKQVZBU0NSSVBUQ09SRV9HQ19NQVJLRUQoKTsKIAogICAgIGlmICh2bSgpLT50eXBlUHJvZmls
ZXIoKSkKQEAgLTEwMzUsNiArMTA1MCwxMSBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoSGVhcE9wZXJh
dGlvbiBjb2xsZWN0CiAgICAgZGlkRmluaXNoQ29sbGVjdGlvbihnY1N0YXJ0VGltZSk7CiAgICAg
cmVzdW1lQ29tcGlsZXJUaHJlYWRzKCk7CiAKKyAgICBpZiAobV92ZXJpZmllcikgeworICAgICAg
ICBtX3ZlcmlmaWVyLT50cmltRGVhZE9iamVjdHMoKTsKKyAgICAgICAgbV92ZXJpZmllci0+dmVy
aWZ5KEhlYXBWZXJpZmllcjo6UGhhc2U6OkFmdGVyR0MpOworICAgIH0KKwogICAgIGlmIChPcHRp
b25zOjpsb2dHQygpKSB7CiAgICAgICAgIGRvdWJsZSBhZnRlciA9IGN1cnJlbnRUaW1lTVMoKTsK
ICAgICAgICAgZGF0YUxvZyhhZnRlciAtIGJlZm9yZSwgIiBtc11cbiIpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMTc2Mjk1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw3IEBAIGNsYXNz
IEdDQXdhcmVKSVRTdHViUm91dGluZTsKIGNsYXNzIEdsb2JhbENvZGVCbG9jazsKIGNsYXNzIEhl
YXA7CiBjbGFzcyBIZWFwUm9vdFZpc2l0b3I7CitjbGFzcyBIZWFwVmVyaWZpZXI7CiBjbGFzcyBJ
bmNyZW1lbnRhbFN3ZWVwZXI7CiBjbGFzcyBKSVRTdHViUm91dGluZTsKIGNsYXNzIEpTQ2VsbDsK
QEAgLTIzNCw2ICsyMzUsNyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBHQ0F3YXJlSklU
U3R1YlJvdXRpbmU7CiAgICAgZnJpZW5kIGNsYXNzIEdDTG9nZ2luZzsKICAgICBmcmllbmQgY2xh
c3MgSGFuZGxlU2V0OworICAgIGZyaWVuZCBjbGFzcyBIZWFwVmVyaWZpZXI7CiAgICAgZnJpZW5k
IGNsYXNzIEpJVFN0dWJSb3V0aW5lOwogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRy
YWN0b3I7CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtlZFNwYWNlOwpAQCAtMzgzLDYgKzM4NSw4IEBA
IHByaXZhdGU6CiAgICAgCiAgICAgdW5zaWduZWQgbV9kZWZlcnJhbERlcHRoOwogICAgIFZlY3Rv
cjxERkc6OldvcmtsaXN0Kj4gbV9zdXNwZW5kZWRDb21waWxlcldvcmtsaXN0czsKKworICAgIHN0
ZDo6dW5pcXVlX3B0cjxIZWFwVmVyaWZpZXI+IG1fdmVyaWZpZXI7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBWZXJpZmllci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFZlcmlmaWVy
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBWZXJp
Zmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyOTEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkhlYXBWZXJpZmllci5oIgorCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lcy5oIgor
I2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lcy5oIgorI2luY2x1ZGUgIkhlYXBJdGVyYXRpb25T
Y29wZS5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJKU09iamVjdC5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworTGl2ZU9iamVjdERhdGEqIExpdmVPYmplY3RMaXN0OjpmaW5k
T2JqZWN0KEpTT2JqZWN0KiBvYmopCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXZl
T2JqZWN0cy5zaXplKCk7IGkrKykgeworICAgICAgICBMaXZlT2JqZWN0RGF0YSYgZGF0YSA9IGxp
dmVPYmplY3RzW2ldOworICAgICAgICBpZiAob2JqID09IGRhdGEub2JqKQorICAgICAgICAgICAg
cmV0dXJuICZkYXRhOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworSGVhcFZlcmlm
aWVyOjpIZWFwVmVyaWZpZXIoSGVhcCogaGVhcCwgdW5zaWduZWQgbnVtYmVyT2ZHQ0N5Y2xlc1Rv
UmVjb3JkKQorICAgIDogbV9oZWFwKGhlYXApCisgICAgLCBtX2N1cnJlbnRDeWNsZSgwKQorICAg
ICwgbV9udW1iZXJPZkN5Y2xlcyhudW1iZXJPZkdDQ3ljbGVzVG9SZWNvcmQpCit7CisgICAgUkVM
RUFTRV9BU1NFUlQobV9udW1iZXJPZkN5Y2xlcyA+IDApOworICAgIG1fY3ljbGVzID0gc3RkOjpt
YWtlX3VuaXF1ZTxHQ0N5Y2xlW10+KG1fbnVtYmVyT2ZDeWNsZXMpOworfQorCitjb25zdCBjaGFy
KiBIZWFwVmVyaWZpZXI6OmNvbGxlY3Rpb25UeXBlTmFtZShIZWFwT3BlcmF0aW9uIHR5cGUpCit7
CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBOb09wZXJhdGlvbjoKKyAgICAgICAgcmV0
dXJuICJOb09wZXJhdGlvbiI7CisgICAgY2FzZSBBbnlDb2xsZWN0aW9uOgorICAgICAgICByZXR1
cm4gIkFueUNvbGxlY3Rpb24iOworICAgIGNhc2UgQWxsb2NhdGlvbjoKKyAgICAgICAgcmV0dXJu
ICJBbGxvY2F0aW9uIjsKKyAgICBjYXNlIEVkZW5Db2xsZWN0aW9uOgorICAgICAgICByZXR1cm4g
IkVkZW5Db2xsZWN0aW9uIjsKKyAgICBjYXNlIEZ1bGxDb2xsZWN0aW9uOgorICAgICAgICByZXR1
cm4gIkZ1bGxDb2xsZWN0aW9uIjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKworY29uc3QgY2hhciogSGVhcFZlcmlmaWVyOjpwaGFzZU5hbWUoSGVhcFZlcmlm
aWVyOjpQaGFzZSBwaGFzZSkKK3sKKyAgICBzd2l0Y2ggKHBoYXNlKSB7CisgICAgY2FzZSBQaGFz
ZTo6QmVmb3JlR0M6CisgICAgICAgIHJldHVybiAiQmVmb3JlR0MiOworICAgIGNhc2UgUGhhc2U6
OkJlZm9yZU1hcmtpbmc6CisgICAgICAgIHJldHVybiAiQmVmb3JlTWFya2luZyI7CisgICAgY2Fz
ZSBQaGFzZTo6QWZ0ZXJNYXJraW5nOgorICAgICAgICByZXR1cm4gIkFmdGVyTWFya2luZyI7Cisg
ICAgY2FzZSBQaGFzZTo6QWZ0ZXJHQzoKKyAgICAgICAgcmV0dXJuICJBZnRlckdDIjsKKyAgICB9
CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworc3RhdGljIHZvaWQgZ2V0
QnV0dGVyZmx5RGV0YWlscyhKU09iamVjdCogb2JqLCB2b2lkKiYgYnV0dGVyZmx5QmFzZSwgc2l6
ZV90JiBidXR0ZXJmbHlDYXBhY2l0eUluQnl0ZXMsIENvcGllZEJsb2NrKiYgYnV0dGVyZmx5Qmxv
Y2spCit7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBvYmotPnN0cnVjdHVyZSgpOworICAg
IEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gb2JqLT5idXR0ZXJmbHkoKTsKKyAgICBidXR0ZXJmbHlC
YXNlID0gYnV0dGVyZmx5LT5iYXNlKHN0cnVjdHVyZSk7CisgICAgYnV0dGVyZmx5QmxvY2sgPSBD
b3BpZWRTcGFjZTo6YmxvY2tGb3IoYnV0dGVyZmx5QmFzZSk7CisKKyAgICBzaXplX3QgcHJvcGVy
dHlDYXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICBzaXplX3Qg
cHJlQ2FwYWNpdHk7CisgICAgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzOworICAg
IGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIgPSBvYmotPmhhc0luZGV4aW5nSGVhZGVyKCk7CisgICAg
aWYgKFVOTElLRUxZKGhhc0luZGV4aW5nSGVhZGVyKSkgeworICAgICAgICBwcmVDYXBhY2l0eSA9
IGJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKTsKKyAg
ICAgICAgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMgPSBidXR0ZXJmbHktPmluZGV4aW5nSGVh
ZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKHN0cnVjdHVyZSk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgcHJlQ2FwYWNpdHkgPSAwOworICAgICAgICBpbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcyA9IDA7CisgICAgfQorICAgIGJ1dHRlcmZseUNhcGFjaXR5SW5CeXRlcyA9IEJ1dHRl
cmZseTo6dG90YWxTaXplKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGlu
Z0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworfQorCit2b2lkIEhlYXBWZXJp
Zmllcjo6aW5pdGlhbGl6ZUdDQ3ljbGUoKQoreworICAgIEhlYXAqIGhlYXAgPSBtX2hlYXA7Cisg
ICAgaW5jcmVtZW50Q3ljbGUoKTsKKyAgICBjdXJyZW50Q3ljbGUoKS5jb2xsZWN0aW9uVHlwZSA9
IGhlYXAtPm9wZXJhdGlvbkluUHJvZ3Jlc3MoKTsKK30KKworc3RydWN0IEdhdGhlckxpdmVPYmpG
dW5jdG9yIDogTWFya2VkQmxvY2s6OkNvdW50RnVuY3RvciB7CisgICAgR2F0aGVyTGl2ZU9iakZ1
bmN0b3IoTGl2ZU9iamVjdExpc3QmIGxpc3QpCisgICAgICAgIDogbV9saXN0KGxpc3QpCisgICAg
eworICAgICAgICBBU1NFUlQoIWxpc3QubGl2ZU9iamVjdHMuc2l6ZSgpKTsKKyAgICB9CisKKyAg
ICB2b2lkIG9wZXJhdG9yKCkoSlNDZWxsKiBjZWxsKQorICAgIHsKKyAgICAgICAgaWYgKCFjZWxs
LT5pc09iamVjdCgpKQorICAgICAgICAgICAgcmV0dXJuOyAgICAgICAgCisgICAgICAgIExpdmVP
YmplY3REYXRhIGRhdGEoYXNPYmplY3QoY2VsbCkpOworICAgICAgICBtX2xpc3QubGl2ZU9iamVj
dHMuYXBwZW5kKGRhdGEpOworICAgIH0KKworICAgIExpdmVPYmplY3RMaXN0JiBtX2xpc3Q7Cit9
OworCit2b2lkIEhlYXBWZXJpZmllcjo6Z2F0aGVyTGl2ZU9iamVjdHMoSGVhcFZlcmlmaWVyOjpQ
aGFzZSBwaGFzZSkKK3sKKyAgICBIZWFwKiBoZWFwID0gbV9oZWFwOworICAgIExpdmVPYmplY3RM
aXN0JiBsaXN0ID0gbGl2ZU9iamVjdExpc3RGb3JHYXRoZXJpbmcocGhhc2UpOworCisgICAgSGVh
cEl0ZXJhdGlvblNjb3BlIGl0ZXJhdGlvblNjb3BlKCpoZWFwKTsKKyAgICBsaXN0LnJlc2V0KCk7
CisgICAgR2F0aGVyTGl2ZU9iakZ1bmN0b3IgZnVuY3RvcihsaXN0KTsKKyAgICBoZWFwLT5tX29i
amVjdFNwYWNlLmZvckVhY2hMaXZlQ2VsbChpdGVyYXRpb25TY29wZSwgZnVuY3Rvcik7Cit9CisK
K0xpdmVPYmplY3RMaXN0JiBIZWFwVmVyaWZpZXI6OmxpdmVPYmplY3RMaXN0Rm9yR2F0aGVyaW5n
KEhlYXBWZXJpZmllcjo6UGhhc2UgcGhhc2UpCit7CisgICAgc3dpdGNoIChwaGFzZSkgeworICAg
IGNhc2UgUGhhc2U6OkJlZm9yZU1hcmtpbmc6CisgICAgICAgIHJldHVybiBjdXJyZW50Q3ljbGUo
KS5iZWZvcmU7CisgICAgY2FzZSBQaGFzZTo6QWZ0ZXJNYXJraW5nOgorICAgICAgICByZXR1cm4g
Y3VycmVudEN5Y2xlKCkuYWZ0ZXI7CisgICAgY2FzZSBQaGFzZTo6QmVmb3JlR0M6CisgICAgY2Fz
ZSBQaGFzZTo6QWZ0ZXJHQzoKKyAgICAgICAgLy8gV2Ugc2hvdWxkIG5vdCBiZSBnYXRoZXJpbmcg
bGl2ZSBvYmplY3RzIGR1cmluZyB0aGVzZSBwaGFzZXMuCisgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB0cmltRGVhZE9iamVjdHNG
cm9tTGlzdChIYXNoU2V0PEpTT2JqZWN0Kj4mIGtub3duTGl2ZVNldCwgTGl2ZU9iamVjdExpc3Qm
IGxpc3QpCit7CisgICAgaWYgKCFsaXN0Lmhhc0xpdmVPYmplY3RzKQorICAgICAgICByZXR1cm47
CisKKyAgICBzaXplX3QgbGl2ZU9iamVjdHNGb3VuZCA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBsaXN0LmxpdmVPYmplY3RzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIExpdmVPYmpl
Y3REYXRhJiBvYmpEYXRhID0gbGlzdC5saXZlT2JqZWN0c1tpXTsKKyAgICAgICAgaWYgKG9iakRh
dGEuaXNDb25maXJtZWREZWFkKQorICAgICAgICAgICAgY29udGludWU7IC8vIERvbid0ICJyZXN1
cnJlY3QiIGtub3duIGRlYWQgb2JqZWN0cy4KKyAgICAgICAgaWYgKCFrbm93bkxpdmVTZXQuY29u
dGFpbnMob2JqRGF0YS5vYmopKSB7CisgICAgICAgICAgICBvYmpEYXRhLmlzQ29uZmlybWVkRGVh
ZCA9IHRydWU7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBsaXZl
T2JqZWN0c0ZvdW5kKys7CisgICAgfQorICAgIGxpc3QuaGFzTGl2ZU9iamVjdHMgPSAhIWxpdmVP
YmplY3RzRm91bmQ7Cit9CisKK3ZvaWQgSGVhcFZlcmlmaWVyOjp0cmltRGVhZE9iamVjdHMoKQor
eworICAgIEhhc2hTZXQ8SlNPYmplY3QqPiBrbm93bkxpdmVTZXQ7CisKKyAgICBMaXZlT2JqZWN0
TGlzdCYgYWZ0ZXIgPSBjdXJyZW50Q3ljbGUoKS5hZnRlcjsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGFmdGVyLmxpdmVPYmplY3RzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIExpdmVPYmpl
Y3REYXRhJiBvYmpEYXRhID0gYWZ0ZXIubGl2ZU9iamVjdHNbaV07CisgICAgICAgIGtub3duTGl2
ZVNldC5hZGQob2JqRGF0YS5vYmopOworICAgIH0KKworICAgIHRyaW1EZWFkT2JqZWN0c0Zyb21M
aXN0KGtub3duTGl2ZVNldCwgY3VycmVudEN5Y2xlKCkuYmVmb3JlKTsKKworICAgIGZvciAoaW50
IGkgPSAtMTsgaSA+IC1tX251bWJlck9mQ3ljbGVzOyBpLS0pIHsKKyAgICAgICAgdHJpbURlYWRP
YmplY3RzRnJvbUxpc3Qoa25vd25MaXZlU2V0LCBjeWNsZUZvckluZGV4KGkpLmJlZm9yZSk7Cisg
ICAgICAgIHRyaW1EZWFkT2JqZWN0c0Zyb21MaXN0KGtub3duTGl2ZVNldCwgY3ljbGVGb3JJbmRl
eChpKS5hZnRlcik7CisgICAgfQorfQorCitib29sIEhlYXBWZXJpZmllcjo6dmVyaWZ5QnV0dGVy
Zmx5SXNJblN0b3JhZ2VTcGFjZShQaGFzZSBwaGFzZSwgTGl2ZU9iamVjdExpc3QmIGxpc3QpCit7
CisgICAgYXV0byYgbGl2ZU9iamVjdHMgPSBsaXN0LmxpdmVPYmplY3RzOworCisgICAgQ29waWVk
U3BhY2UmIHN0b3JhZ2VTcGFjZSA9IG1faGVhcC0+bV9zdG9yYWdlU3BhY2U7CisgICAgYm9vbCBs
aXN0TmFtZVByaW50ZWQgPSBmYWxzZTsKKyAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbGl2ZU9iamVjdHMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAg
TGl2ZU9iamVjdERhdGEmIG9iamVjdERhdGEgPSBsaXZlT2JqZWN0c1tpXTsKKyAgICAgICAgaWYg
KG9iamVjdERhdGEuaXNDb25maXJtZWREZWFkKQorICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgSlNPYmplY3QqIG9iaiA9IG9iamVjdERhdGEub2JqOworICAgICAgICBCdXR0ZXJmbHkq
IGJ1dHRlcmZseSA9IG9iai0+YnV0dGVyZmx5KCk7CisgICAgICAgIGlmIChidXR0ZXJmbHkpIHsK
KyAgICAgICAgICAgIHZvaWQqIGJ1dHRlcmZseUJhc2U7CisgICAgICAgICAgICBzaXplX3QgYnV0
dGVyZmx5Q2FwYWNpdHlJbkJ5dGVzOworICAgICAgICAgICAgQ29waWVkQmxvY2sqIGJ1dHRlcmZs
eUJsb2NrOworICAgICAgICAgICAgZ2V0QnV0dGVyZmx5RGV0YWlscyhvYmosIGJ1dHRlcmZseUJh
c2UsIGJ1dHRlcmZseUNhcGFjaXR5SW5CeXRlcywgYnV0dGVyZmx5QmxvY2spOworCisgICAgICAg
ICAgICBpZiAoIXN0b3JhZ2VTcGFjZS5jb250YWlucyhidXR0ZXJmbHlCbG9jaykpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoIWxpc3ROYW1lUHJpbnRlZCkgeworICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nRigiVmVyaWZpY2F0aW9uIEAgcGhhc2UgJXMgRkFJTEVEIGluIG9iamVjdCBsaXN0ICcl
cycgKHNpemUgJXp1KVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBoYXNlTmFtZShwaGFz
ZSksIGxpc3QubmFtZSwgbGl2ZU9iamVjdHMuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
bGlzdE5hbWVQcmludGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG9iai0+c3RydWN0dXJlKCk7CisgICAgICAgICAg
ICAgICAgZGF0YUxvZ0YoIiAgICA8JXU6JXU+IGJ1dHRlcmZseSAlcCAoYmFzZSAlcCBzaXplICV6
dSBibG9jayAlcCkgTk9UIGluIFN0b3JhZ2VTcGFjZSB8IG9iaiAlcCB0eXBlICclcydcbiIsCisg
ICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZClnZXRwaWQoKSwgKHVuc2lnbmVkKWN1cnJlbnRU
aHJlYWQoKSwKKyAgICAgICAgICAgICAgICAgICAgYnV0dGVyZmx5LCBidXR0ZXJmbHlCYXNlLCBi
dXR0ZXJmbHlDYXBhY2l0eUluQnl0ZXMsIGJ1dHRlcmZseUJsb2NrLAorICAgICAgICAgICAgICAg
ICAgICBvYmosIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCktPmNsYXNzTmFtZSk7CisgICAgICAgICAg
ICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
ICAgIHJldHVybiBzdWNjZXNzOworfQorCit2b2lkIEhlYXBWZXJpZmllcjo6dmVyaWZ5KEhlYXBW
ZXJpZmllcjo6UGhhc2UgcGhhc2UpCit7CisgICAgYm9vbCBiZWZvcmVWZXJpZmllZCA9IHZlcmlm
eUJ1dHRlcmZseUlzSW5TdG9yYWdlU3BhY2UocGhhc2UsIGN1cnJlbnRDeWNsZSgpLmJlZm9yZSk7
CisgICAgYm9vbCBhZnRlclZlcmlmaWVkID0gdmVyaWZ5QnV0dGVyZmx5SXNJblN0b3JhZ2VTcGFj
ZShwaGFzZSwgY3VycmVudEN5Y2xlKCkuYWZ0ZXIpOworICAgIFJFTEVBU0VfQVNTRVJUKGJlZm9y
ZVZlcmlmaWVkICYmIGFmdGVyVmVyaWZpZWQpOworfQorCit2b2lkIEhlYXBWZXJpZmllcjo6cmVw
b3J0T2JqZWN0KExpdmVPYmplY3REYXRhJiBvYmpEYXRhLCBpbnQgY3ljbGVJbmRleCwgSGVhcFZl
cmlmaWVyOjpHQ0N5Y2xlJiBjeWNsZSwgTGl2ZU9iamVjdExpc3QmIGxpc3QpCit7CisgICAgSlNP
YmplY3QqIG9iaiA9IG9iakRhdGEub2JqOworCisgICAgaWYgKG9iakRhdGEuaXNDb25maXJtZWRE
ZWFkKSB7CisgICAgICAgIGRhdGFMb2dGKCJGT1VORCBkZWFkIG9iaiAlcCBpbiBHQ1slZF0gJXMg
bGlzdCAnJXMnXG4iLAorICAgICAgICAgICAgb2JqLCBjeWNsZUluZGV4LCBjeWNsZS5jb2xsZWN0
aW9uVHlwZU5hbWUoKSwgbGlzdC5uYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gb2JqLT5zdHJ1Y3R1cmUoKTsKKyAgICBCdXR0ZXJmbHkq
IGJ1dHRlcmZseSA9IG9iai0+YnV0dGVyZmx5KCk7CisgICAgdm9pZCogYnV0dGVyZmx5QmFzZTsK
KyAgICBzaXplX3QgYnV0dGVyZmx5Q2FwYWNpdHlJbkJ5dGVzOworICAgIENvcGllZEJsb2NrKiBi
dXR0ZXJmbHlCbG9jazsKKyAgICBnZXRCdXR0ZXJmbHlEZXRhaWxzKG9iaiwgYnV0dGVyZmx5QmFz
ZSwgYnV0dGVyZmx5Q2FwYWNpdHlJbkJ5dGVzLCBidXR0ZXJmbHlCbG9jayk7CisKKyAgICBkYXRh
TG9nRigiRk9VTkQgb2JqICVwIHR5cGUgJyVzJyBidXR0ZXJmbHkgJXAgKGJhc2UgJXAgc2l6ZSAl
enUgYmxvY2sgJXApIGluIEdDWyVkXSAlcyBsaXN0ICclcydcbiIsCisgICAgICAgIG9iaiwgc3Ry
dWN0dXJlLT5jbGFzc0luZm8oKS0+Y2xhc3NOYW1lLAorICAgICAgICBidXR0ZXJmbHksIGJ1dHRl
cmZseUJhc2UsIGJ1dHRlcmZseUNhcGFjaXR5SW5CeXRlcywgYnV0dGVyZmx5QmxvY2ssCisgICAg
ICAgIGN5Y2xlSW5kZXgsIGN5Y2xlLmNvbGxlY3Rpb25UeXBlTmFtZSgpLCBsaXN0Lm5hbWUpOwor
fQorCit2b2lkIEhlYXBWZXJpZmllcjo6Y2hlY2tJZlJlY29yZGVkKEpTT2JqZWN0KiBvYmopCit7
CisgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworCisgICAgZm9yIChpbnQgY3ljbGVJbmRleCA9IDA7
IGN5Y2xlSW5kZXggPiAtbV9udW1iZXJPZkN5Y2xlczsgY3ljbGVJbmRleC0tKSB7CisgICAgICAg
IEdDQ3ljbGUmIGN5Y2xlID0gY3ljbGVGb3JJbmRleChjeWNsZUluZGV4KTsKKyAgICAgICAgTGl2
ZU9iamVjdExpc3QmIGJlZm9yZUxpc3QgPSBjeWNsZS5iZWZvcmU7IAorICAgICAgICBMaXZlT2Jq
ZWN0TGlzdCYgYWZ0ZXJMaXN0ID0gY3ljbGUuYWZ0ZXI7IAorCisgICAgICAgIExpdmVPYmplY3RE
YXRhKiBvYmpEYXRhOworICAgICAgICBvYmpEYXRhID0gYmVmb3JlTGlzdC5maW5kT2JqZWN0KG9i
aik7CisgICAgICAgIGlmIChvYmpEYXRhKSB7CisgICAgICAgICAgICByZXBvcnRPYmplY3QoKm9i
akRhdGEsIGN5Y2xlSW5kZXgsIGN5Y2xlLCBiZWZvcmVMaXN0KTsKKyAgICAgICAgICAgIGZvdW5k
ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBvYmpEYXRhID0gYWZ0ZXJMaXN0LmZpbmRPYmpl
Y3Qob2JqKTsKKyAgICAgICAgaWYgKG9iakRhdGEpIHsKKyAgICAgICAgICAgIHJlcG9ydE9iamVj
dCgqb2JqRGF0YSwgY3ljbGVJbmRleCwgY3ljbGUsIGFmdGVyTGlzdCk7CisgICAgICAgICAgICBm
b3VuZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWZvdW5kKQorICAgICAg
ICBkYXRhTG9nRigib2JqICVwIE5PVCBGT1VORFxuIiwgb2JqKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVmVyaWZpZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVmVyaWZpZXIuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBWZXJpZmllci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSGVhcFZlcmlmaWVyX2gKKyNkZWZpbmUg
SGVhcFZlcmlmaWVyX2gKKworI2luY2x1ZGUgIkhlYXAuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU09iamVjdDsKK2NsYXNzIE1hcmtlZEJs
b2NrOworCitzdHJ1Y3QgTGl2ZU9iamVjdERhdGEgeworICAgIExpdmVPYmplY3REYXRhKEpTT2Jq
ZWN0KiBvYmosIGJvb2wgaXNDb25maXJtZWREZWFkID0gZmFsc2UpCisgICAgICAgIDogb2JqKG9i
aikKKyAgICAgICAgLCBpc0NvbmZpcm1lZERlYWQoaXNDb25maXJtZWREZWFkKQorICAgIHsKKyAg
ICB9CisKKyAgICBKU09iamVjdCogb2JqOworICAgIGJvb2wgaXNDb25maXJtZWREZWFkOworfTsK
Kworc3RydWN0IExpdmVPYmplY3RMaXN0IHsKKyAgICBMaXZlT2JqZWN0TGlzdChjb25zdCBjaGFy
KiBuYW1lKQorICAgICAgICA6IG5hbWUobmFtZSkKKyAgICAgICAgLCBoYXNMaXZlT2JqZWN0cyh0
cnVlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHJlc2V0KCkKKyAgICB7CisgICAgICAgIGxp
dmVPYmplY3RzLmNsZWFyKCk7CisgICAgICAgIGhhc0xpdmVPYmplY3RzID0gdHJ1ZTsgLy8gUHJl
c3VtZSB0byBoYXZlIGxpdmUgb2JqZWN0cyB1bnRpbCB0aGUgbGlzdCBpcyB0cmltbWVkLgorICAg
IH0KKworICAgIExpdmVPYmplY3REYXRhKiBmaW5kT2JqZWN0KEpTT2JqZWN0Kik7CisKKyAgICBj
b25zdCBjaGFyKiBuYW1lOworICAgIFZlY3RvcjxMaXZlT2JqZWN0RGF0YT4gbGl2ZU9iamVjdHM7
CisgICAgYm9vbCBoYXNMaXZlT2JqZWN0czsKK307CisKK2NsYXNzIEhlYXBWZXJpZmllciB7Citw
dWJsaWM6CisgICAgZW51bSBjbGFzcyBQaGFzZSB7CisgICAgICAgIEJlZm9yZUdDLAorICAgICAg
ICBCZWZvcmVNYXJraW5nLAorICAgICAgICBBZnRlck1hcmtpbmcsCisgICAgICAgIEFmdGVyR0MK
KyAgICB9OworCisgICAgSGVhcFZlcmlmaWVyKEhlYXAqLCB1bnNpZ25lZCBudW1iZXJPZkdDQ3lj
bGVzVG9SZWNvcmQpOworCisgICAgdm9pZCBpbml0aWFsaXplR0NDeWNsZSgpOworICAgIHZvaWQg
Z2F0aGVyTGl2ZU9iamVjdHMoUGhhc2UpOworICAgIHZvaWQgdHJpbURlYWRPYmplY3RzKCk7Cisg
ICAgdm9pZCB2ZXJpZnkoUGhhc2UpOworCisgICAgLy8gU2NhbnMgYWxsIHByZXZpb3VzbHkgcmVj
b3JkZWQgTGl2ZU9iamVjdExpc3RzIGFuZCBjaGVja3MgaWYgdGhlIHNwZWNpZmllZAorICAgIC8v
IG9iamVjdCB3YXMgaW4gYW55IG9mIHRob3NlIGxpc3RzLgorICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgY2hlY2tJZlJlY29yZGVkKEpTT2JqZWN0Kik7CisKKyAgICBzdGF0aWMgY29uc3QgY2hh
ciogY29sbGVjdGlvblR5cGVOYW1lKEhlYXBPcGVyYXRpb24pOworICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBwaGFzZU5hbWUoUGhhc2UpOworCitwcml2YXRlOgorICAgIHN0cnVjdCBHQ0N5Y2xlIHsK
KyAgICAgICAgR0NDeWNsZSgpCisgICAgICAgICAgICA6IGJlZm9yZSgiQmVmb3JlIE1hcmtpbmci
KQorICAgICAgICAgICAgLCBhZnRlcigiQWZ0ZXIgTWFya2luZyIpCisgICAgICAgIHsKKyAgICAg
ICAgfQorCisgICAgICAgIEhlYXBPcGVyYXRpb24gY29sbGVjdGlvblR5cGU7CisgICAgICAgIExp
dmVPYmplY3RMaXN0IGJlZm9yZTsKKyAgICAgICAgTGl2ZU9iamVjdExpc3QgYWZ0ZXI7CisKKyAg
ICAgICAgY29uc3QgY2hhciogY29sbGVjdGlvblR5cGVOYW1lKCkgY29uc3QKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIEhlYXBWZXJpZmllcjo6Y29sbGVjdGlvblR5cGVOYW1lKGNvbGxl
Y3Rpb25UeXBlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB2b2lkIGluY3JlbWVudEN5Y2xl
KCkgeyBtX2N1cnJlbnRDeWNsZSA9IChtX2N1cnJlbnRDeWNsZSArIDEpICUgbV9udW1iZXJPZkN5
Y2xlczsgfQorICAgIEdDQ3ljbGUmIGN1cnJlbnRDeWNsZSgpIHsgcmV0dXJuIG1fY3ljbGVzW21f
Y3VycmVudEN5Y2xlXTsgfQorICAgIEdDQ3ljbGUmIGN5Y2xlRm9ySW5kZXgoaW50IGN5Y2xlSW5k
ZXgpCisgICAgeworICAgICAgICBBU1NFUlQoY3ljbGVJbmRleCA8PSAwICYmIGN5Y2xlSW5kZXgg
PiAtbV9udW1iZXJPZkN5Y2xlcyk7CisgICAgICAgIGN5Y2xlSW5kZXggKz0gbV9jdXJyZW50Q3lj
bGU7CisgICAgICAgIGlmIChjeWNsZUluZGV4IDwgMCkKKyAgICAgICAgICAgIGN5Y2xlSW5kZXgg
Kz0gbV9udW1iZXJPZkN5Y2xlczsKKyAgICAgICAgQVNTRVJUKGN5Y2xlSW5kZXggPCBtX251bWJl
ck9mQ3ljbGVzKTsKKyAgICAgICAgcmV0dXJuIG1fY3ljbGVzW2N5Y2xlSW5kZXhdOworICAgIH0K
KworICAgIExpdmVPYmplY3RMaXN0JiBsaXZlT2JqZWN0TGlzdEZvckdhdGhlcmluZyhQaGFzZSk7
CisgICAgYm9vbCB2ZXJpZnlCdXR0ZXJmbHlJc0luU3RvcmFnZVNwYWNlKFBoYXNlLCBMaXZlT2Jq
ZWN0TGlzdCYpOworCisgICAgc3RhdGljIHZvaWQgcmVwb3J0T2JqZWN0KExpdmVPYmplY3REYXRh
JiwgaW50IGN5Y2xlSW5kZXgsIEhlYXBWZXJpZmllcjo6R0NDeWNsZSYsIExpdmVPYmplY3RMaXN0
Jik7CisKKyAgICBIZWFwKiBtX2hlYXA7CisgICAgaW50IG1fY3VycmVudEN5Y2xlOworICAgIGlu
dCBtX251bWJlck9mQ3ljbGVzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxHQ0N5Y2xlW10+IG1fY3lj
bGVzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBIZWFwVmVyaWZpZXIK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDE3
NjI5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjg3LDYgKzI4Nyw5IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3Ry
aW5nOwogICAgIHYoYm9vbCwgbG9nSGVhcFN0YXRpc3RpY3NBdEV4aXQsIGZhbHNlKSBcCiAgICAg
dihib29sLCBlbmFibGVUeXBlUHJvZmlsZXIsIGZhbHNlKSBcCiAgICAgXAorICAgIHYoYm9vbCwg
dmVyaWZ5SGVhcCwgdHJ1ZSkgXAorICAgIHYodW5zaWduZWQsIG51bWJlck9mR0NDeWNsZXNUb1Jl
Y29yZEZvclZlcmlmaWNhdGlvbiwgMykgXAorICAgIFwKICAgICB2KGJvb2wsIGVuYWJsZUV4Y2Vw
dGlvbkZ1enosIGZhbHNlKSBcCiAgICAgdih1bnNpZ25lZCwgZmlyZUV4Y2VwdGlvbkZ1enpBdCwg
MCkKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241842</attachid>
            <date>2014-11-18 18:17:14 -0800</date>
            <delta_ts>2014-11-19 08:41:03 -0800</delta_ts>
            <desc>take 4: plus missing build file changes for other platforms.</desc>
            <filename>bug-138851.patch</filename>
            <type>text/plain</type>
            <size>28490</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTc2MzAxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3IEBA
CisyMDE0LTExLTE4ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGQgSGVhcCB2ZXJpZmljYXRpb24gaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgIDxodHRwczovL3dl
YmtpdC5vcmcvYi8xMzg4NTE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhlIHZlcmlmaWNhdGlvbiBpbmZyYXN0cnVjdHVyZSBjb2RlIGlzIGFsd2F5
cyBidWlsdCBpbiBidXQgZGlzYWJsZWQgYnkKKyAgICAgICAgZGVmYXVsdC4gIFdoZW4gZGlzYWJs
ZWQsIHRoZSBjb3N0IGlzIG1pbmltYWw6CisgICAgICAgIDEuIEhlYXAgaGFzIGEgbV92ZXJpZmll
ciBmaWVsZC4KKyAgICAgICAgMi4gR0MgZG9lcyBhIGZldyAiaWYgKG1fdmVyaWZpZXIpIiBjaGVj
a3MgdGhhdCBzaG91bGQgZmFpbC4KKyAgICAgICAgMy4gSGVhcFZlcmlmaWVyIHRha2VzIHVwIGNv
ZGUgc3BhY2UgdGhvdWdoIG5vdCB1c2VkLgorCisgICAgICAgIFdoZW4gZW5hYmxlZDoKKyAgICAg
ICAgMS4gVGhlIEhlYXBWZXJpZmllciB3aWxsIGtlZXAgTiBudW1iZXIgb2YgR0MgY3ljbGUgZGF0
YS4KKyAgICAgICAgICAgRWFjaCBHQyBjeWNsZSB3aWxsIGNvbnRhaW4gYSAiYmVmb3JlIG1hcmtp
bmciIGFuZCAiYWZ0ZXIgbWFya2luZyIgbGl2ZQorICAgICAgICAgICBvYmplY3QgbGlzdC4KKyAg
ICAgICAgICAgVGhlIEdDIGN5Y2xlcyBpcyBhIGNpcmN1bGFyIGJ1ZmZlci4gIE9ubHkgZGF0YSBm
b3IgdGhlIGxhc3QgTiBHQyBjeWNsZXMKKyAgICAgICAgICAgd2lsbCBiZSByZXRhaW5lZC4KKyAg
ICAgICAgMi4gRHVyaW5nIEdDLCB0aGUgY3VycmVudCBHQyBjeWNsZSdzIGxpdmUgb2JqZWN0cyBs
aXN0cyB3aWxsIGJlIHBvcHVsYXRlZAorICAgICAgICAgICBiZWZvcmUgYW5kIGFmdGVyIG1hcmtp
bmcuCisgICAgICAgIDMuIFRoZSBjdXJyZW50IEdDIGN5Y2xlJ3MgbGl2ZSBvYmplY3QgbGlzdHMg
d2lsbCBiZSB2YWxpZGF0ZWQgYmVmb3JlIEdDLAorICAgICAgICAgICBhZnRlciBtYXJraW5nLCBh
bmQgYWZ0ZXIgR0MuCisKKyAgICAgICAgQ3VycmVudGx5LCB0aGUgb25seSB2YWxpZGF0aW9uIGJl
aW5nIGRvbmUgaXMgdG8gdmVyaWZ5IHRoYXQgb2JqZWN0CisgICAgICAgIGJ1dHRlcmZsaWVzIGFy
ZSBhbGxvY2F0ZWQgZnJvbSB2YWxpZCBibG9ja3MgaW4gdGhlIFN0b3JhZ2UgKGFrYSBDb3BpZWQp
CisgICAgICAgIHNwYWNlLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICog
SmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAq
IEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzOgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6SGVhcCk6CisgICAgICAg
IChKU0M6OkhlYXA6OmNvbGxlY3QpOgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAq
IGhlYXAvSGVhcFZlcmlmaWVyLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkxpdmVPYmplY3RM
aXN0OjpmaW5kT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SGVhcFZlcmlmaWVyOjpIZWFwVmVyaWZp
ZXIpOgorICAgICAgICAoSlNDOjpIZWFwVmVyaWZpZXI6OmNvbGxlY3Rpb25UeXBlTmFtZSk6Cisg
ICAgICAgIChKU0M6OkhlYXBWZXJpZmllcjo6cGhhc2VOYW1lKToKKyAgICAgICAgKEpTQzo6Z2V0
QnV0dGVyZmx5RGV0YWlscyk6CisgICAgICAgIChKU0M6OkhlYXBWZXJpZmllcjo6aW5pdGlhbGl6
ZUdDQ3ljbGUpOgorICAgICAgICAoSlNDOjpHYXRoZXJMaXZlT2JqRnVuY3Rvcjo6R2F0aGVyTGl2
ZU9iakZ1bmN0b3IpOgorICAgICAgICAoSlNDOjpHYXRoZXJMaXZlT2JqRnVuY3Rvcjo6b3BlcmF0
b3IoKSk6CisgICAgICAgIChKU0M6OkhlYXBWZXJpZmllcjo6Z2F0aGVyTGl2ZU9iamVjdHMpOgor
ICAgICAgICAoSlNDOjpIZWFwVmVyaWZpZXI6OmxpdmVPYmplY3RMaXN0Rm9yR2F0aGVyaW5nKToK
KyAgICAgICAgKEpTQzo6dHJpbURlYWRPYmplY3RzRnJvbUxpc3QpOgorICAgICAgICAoSlNDOjpI
ZWFwVmVyaWZpZXI6OnRyaW1EZWFkT2JqZWN0cyk6CisgICAgICAgIChKU0M6OkhlYXBWZXJpZmll
cjo6dmVyaWZ5QnV0dGVyZmx5SXNJblN0b3JhZ2VTcGFjZSk6CisgICAgICAgIChKU0M6OkhlYXBW
ZXJpZmllcjo6dmVyaWZ5KToKKyAgICAgICAgKEpTQzo6SGVhcFZlcmlmaWVyOjpyZXBvcnRPYmpl
Y3QpOgorICAgICAgICAoSlNDOjpIZWFwVmVyaWZpZXI6OmNoZWNrSWZSZWNvcmRlZCk6CisgICAg
ICAgICogaGVhcC9IZWFwVmVyaWZpZXIuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkxpdmVPYmpl
Y3REYXRhOjpMaXZlT2JqZWN0RGF0YSk6CisgICAgICAgIChKU0M6OkxpdmVPYmplY3RMaXN0OjpM
aXZlT2JqZWN0TGlzdCk6CisgICAgICAgIChKU0M6OkxpdmVPYmplY3RMaXN0OjpyZXNldCk6Cisg
ICAgICAgIChKU0M6OkhlYXBWZXJpZmllcjo6R0NDeWNsZTo6R0NDeWNsZSk6CisgICAgICAgIChK
U0M6OkhlYXBWZXJpZmllcjo6R0NDeWNsZTo6Y29sbGVjdGlvblR5cGVOYW1lKToKKyAgICAgICAg
KEpTQzo6SGVhcFZlcmlmaWVyOjppbmNyZW1lbnRDeWNsZSk6CisgICAgICAgIChKU0M6OkhlYXBW
ZXJpZmllcjo6Y3VycmVudEN5Y2xlKToKKyAgICAgICAgKEpTQzo6SGVhcFZlcmlmaWVyOjpjeWNs
ZUZvckluZGV4KToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKwogMjAxNC0xMS0xOCAg
Q2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFVwZGF0ZSB0aGUgVmVj
dG9yIEFQSSB0byBkZWFsIHdpdGggdW5zaWduZWQgdHlwZXMgaW5zdGVhZCBvZiBzaXplX3QKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE3NjI5NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
MjY1LDYgKzI2NSw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgaGVhcC9IZWFw
LmNwcAogICAgIGhlYXAvSGVhcFN0YXRpc3RpY3MuY3BwCiAgICAgaGVhcC9IZWFwVGltZXIuY3Bw
CisgICAgaGVhcC9IZWFwVmVyaWZpZXIuY3BwCiAgICAgaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIu
Y3BwCiAgICAgaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAKICAgICBoZWFwL01hY2hpbmVTdGFj
a01hcmtlci5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagko
cmV2aXNpb24gMTc2Mjk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTQ3LDYg
KzU0Nyw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXAuY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxIZWFwU3RhdGlzdGljcy5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXBUaW1lci5jcHAiIC8+CisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXBWZXJpZmllci5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxoZWFwXEluY3JlbWVudGFsU3dlZXBlci5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEpJVFN0dWJSb3V0aW5lU2V0LmNwcCIgLz4KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcTWFjaGluZVN0YWNrTWFya2VyLmNwcCIgLz4KQEAg
LTEyNTAsNiArMTI1MSw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXBS
b290VmlzaXRvci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxIZWFwU3Rh
dGlzdGljcy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxIZWFwVGltZXIu
aCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcSGVhcFZlcmlmaWVyLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEluY3JlbWVudGFsU3dlZXBlci5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxKSVRTdHViUm91dGluZVNldC5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxMaXN0YWJsZUhhbmRsZXIuaCIgLz4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRl
cnMJKHJldmlzaW9uIDE3NjI5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwkod29ya2luZyBjb3B5
KQpAQCAtMjgyLDYgKzI4Miw5IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEhl
YXBUaW1lci5jcHAiPgogICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBp
bGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXBWZXJpZmllci5jcHAiPgor
ICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxoZWFwXEluY3JlbWVudGFsU3dlZXBlci5jcHAiPgogICAgICAgPEZp
bHRlcj5oZWFwPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CkBAIC0yMTM1LDYgKzIxMzgsOSBA
QAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxIZWFwVGltZXIuaCI+CiAgICAgICA8
RmlsdGVyPmhlYXA8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGhlYXBcSGVhcFZlcmlmaWVyLmgiPgorICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0
ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXElu
Y3JlbWVudGFsU3dlZXBlci5oIj4KICAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPgogICAgIDwv
Q2xJbmNsdWRlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE3
NjI5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNTkyLDYgKzE1OTIsOCBAQAogCQlG
RTUyNDhGOTE5MTQ0MkQ5MDBCN0ZERTQgLyogVmFyaWFibGVXYXRjaHBvaW50U2V0SW5saW5lcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU1MjQ4Rjgx
OTE0NDJEOTAwQjdGREU0IC8qIFZhcmlhYmxlV2F0Y2hwb2ludFNldElubGluZXMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTU5MzJBNzE4M0M1
QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNTkzMkE1MTgzQzVBMjYwMEExRUNDQyAvKiBWTUVudHJ5
U2NvcGUuY3BwICovOyB9OwogCQlGRTU5MzJBODE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNj
b3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTU5
MzJBNjE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkU3QkE2MEYxQTFBN0NFQzAwRjFGN0I0
IC8qIEhlYXBWZXJpZmllci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRTdCQTYwRDFBMUE3Q0VDMDBGMUY3QjQgLyogSGVhcFZlcmlmaWVyLmNwcCAq
LzsgfTsKKwkJRkU3QkE2MTAxQTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJpZmllci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU3QkE2MEUxQTFBN0NF
QzAwRjFGN0I0IC8qIEhlYXBWZXJpZmllci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUZFQTA4NjIwMTgyQjdBMDQwMEY2RDg1MSAvKiBCcmVha3Bv
aW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUEw
ODYxRTE4MkI3QTA0MDBGNkQ4NTEgLyogQnJlYWtwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFQTA4NjIxMTgyQjdBMDQwMEY2RDg1MSAv
KiBEZWJ1Z2dlclByaW1pdGl2ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZFQTA4NjFGMTgyQjdBMDQwMEY2RDg1MSAvKiBEZWJ1Z2dlclByaW1pdGl2
ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlG
RUI1OEMxNDE4N0I4QjE2MDA5OEVGMEIgLyogRXJyb3JIYW5kbGluZ1Njb3BlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFQjU4QzEyMTg3QjhCMTYw
MDk4RUYwQiAvKiBFcnJvckhhbmRsaW5nU2NvcGUuY3BwICovOyB9OwpAQCAtMzMwNSw2ICszMzA3
LDggQEAKIAkJRkU1MjQ4RjgxOTE0NDJEOTAwQjdGREU0IC8qIFZhcmlhYmxlV2F0Y2hwb2ludFNl
dElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFyaWFibGVXYXRj
aHBvaW50U2V0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTU5MzJB
NTE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFZNRW50cnlTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUZFNTkzMkE2MTgzQzVBMjYwMEExRUNDQyAvKiBWTUVudHJ5U2NvcGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVk1FbnRyeVNjb3BlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZFN0JBNjBEMUExQTdDRUMwMEYxRjdCNCAvKiBIZWFwVmVyaWZp
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSGVhcFZlcmlmaWVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU3QkE2MEUxQTFBN0NFQzAwRjFG
N0I0IC8qIEhlYXBWZXJpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBI
ZWFwVmVyaWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVBMDg2MUUxODJC
N0EwNDAwRjZEODUxIC8qIEJyZWFrcG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQnJlYWtwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUEwODYx
RjE4MkI3QTA0MDBGNkQ4NTEgLyogRGVidWdnZXJQcmltaXRpdmVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERlYnVnZ2VyUHJpbWl0aXZlcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGRUI1OEMxMjE4N0I4QjE2MDA5OEVGMEIgLyogRXJyb3JIYW5kbGluZ1Nj
b3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVycm9ySGFuZGxp
bmdTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNzk2LDYgKzM4MDAs
OCBAQAogCQkxNDJFMzEyQTEzNEZGMEE2MDBBRkFEQjUgLyogaGVhcCAqLyA9IHsKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJRkU3QkE2MEQxQTFBN0NFQzAwRjFGN0I0
IC8qIEhlYXBWZXJpZmllci5jcHAgKi8sCisJCQkJRkU3QkE2MEUxQTFBN0NFQzAwRjFGN0I0IC8q
IEhlYXBWZXJpZmllci5oICovLAogCQkJCUMyREE3NzgyMThFMjU5OTkwMDY2RkNCNiAvKiBIZWFw
SW5saW5lcy5oICovLAogCQkJCUFEREIxRjYyMThENzdEQjcwMDlCNThBOCAvKiBPcGFxdWVSb290
U2V0LmggKi8sCiAJCQkJMkFBQ0U2M0ExOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZpdHlDYWxs
YmFjay5jcHAgKi8sCkBAIC01MzY0LDYgKzUzNzAsNyBAQAogCQkJCUE1ODQwMzIwMThCRkZCRTEw
MDVBMDgxMSAvKiBJbnNwZWN0b3JBZ2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkFBQkNERTcx
OEVGMjk0MjAwMDAyMDk2IC8qIEdDTG9nZ2luZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU1MjQ4
RjkxOTE0NDJEOTAwQjdGREU0IC8qIFZhcmlhYmxlV2F0Y2hwb2ludFNldElubGluZXMuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUZFN0JBNjEwMUExQTdDRUMwMEYxRjdCNCAvKiBIZWFwVmVyaWZpZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUMyREE3NzgzMThFMjU5OTkwMDY2RkNCNiAvKiBIZWFwSW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUzMjQzOTQxODU2OTcwOTAwMkVENjkyIC8qIGdl
bmVyYXRlLWNvbWJpbmVkLWluc3BlY3Rvci1qc29uLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJQTU4
NDBFMjcxODdDOTgxRTAwODQzQjEwIC8qIGNzc21pbi5weSBpbiBIZWFkZXJzICovLApAQCAtNjk3
NCw2ICs2OTgxLDcgQEAKIAkJCQlBNTEzRTVDQTE4NUY5NjI0MDA3RTk1QUQgLyogSW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1ODQwRTIwMTg3QjdCODYwMDg0
M0IxMCAvKiBJbmplY3RlZFNjcmlwdE1vZHVsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjI0
RTU1NTE3RjBCNzFDMDBBQkIyMTcgLyogSW5saW5lQ2FsbEZyYW1lU2V0LmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUZFN0JBNjBGMUExQTdDRUMwMEYxRjdCNCAvKiBIZWFwVmVyaWZpZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTVDRUVFMTQxODdGM0JBRDAwRTU1Qzk5IC8qIEluc3BlY3RvckFn
ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OTNDRjg2MTg0MDM4Q0EwMEJGQ0UyNyAvKiBJ
bnNwZWN0b3JBZ2VudFJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI5Q0Y2MTlE
MEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHAgaW4g
U291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lv
biAxNzYyOTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkhlYXBJdGVyYXRpb25TY29wZS5o
IgogI2luY2x1ZGUgIkhlYXBSb290VmlzaXRvci5oIgogI2luY2x1ZGUgIkhlYXBTdGF0aXN0aWNz
LmgiCisjaW5jbHVkZSAiSGVhcFZlcmlmaWVyLmgiCiAjaW5jbHVkZSAiSW5jcmVtZW50YWxTd2Vl
cGVyLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVj
dC5oIgpAQCAtMzM5LDYgKzM0MCw4IEBAIEhlYXA6OkhlYXAoVk0qIHZtLCBIZWFwVHlwZSBoZWFw
VHlwZSkKICAgICAsIG1fZGVmZXJyYWxEZXB0aCgwKQogewogICAgIG1fc3RvcmFnZVNwYWNlLmlu
aXQoKTsKKyAgICBpZiAoT3B0aW9uczo6dmVyaWZ5SGVhcCgpKQorICAgICAgICBtX3ZlcmlmaWVy
ID0gc3RkOjptYWtlX3VuaXF1ZTxIZWFwVmVyaWZpZXI+KHRoaXMsIE9wdGlvbnM6Om51bWJlck9m
R0NDeWNsZXNUb1JlY29yZEZvclZlcmlmaWNhdGlvbigpKTsKIH0KIAogSGVhcDo6fkhlYXAoKQpA
QCAtMTAwNCw2ICsxMDA3LDE0IEBAIHZvaWQgSGVhcDo6Y29sbGVjdChIZWFwT3BlcmF0aW9uIGNv
bGxlY3QKICAgICBHQ1BIQVNFKENvbGxlY3QpOwogCiAgICAgZG91YmxlIGdjU3RhcnRUaW1lID0g
V1RGOjptb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKKyAgICBpZiAobV92ZXJpZmllcikg
eworICAgICAgICAvLyBWZXJpZnkgdGhhdCBsaXZlIG9iamVjdHMgZnJvbSB0aGUgbGFzdCBHQyBj
eWNsZSBoYXZlbid0IGJlZW4gY29ycnVwdGVkIGJ5CisgICAgICAgIC8vIG11dGF0b3JzIGJlZm9y
ZSB3ZSBiZWdpbiB0aGlzIG5ldyBHQyBjeWNsZS4KKyAgICAgICAgbV92ZXJpZmllci0+dmVyaWZ5
KEhlYXBWZXJpZmllcjo6UGhhc2U6OkJlZm9yZUdDKTsKKworICAgICAgICBtX3ZlcmlmaWVyLT5p
bml0aWFsaXplR0NDeWNsZSgpOworICAgICAgICBtX3ZlcmlmaWVyLT5nYXRoZXJMaXZlT2JqZWN0
cyhIZWFwVmVyaWZpZXI6OlBoYXNlOjpCZWZvcmVNYXJraW5nKTsKKyAgICB9CiAKICAgICBkZWxl
dGVPbGRDb2RlKGdjU3RhcnRUaW1lKTsKICAgICBmbHVzaE9sZFN0cnVjdHVyZUlEVGFibGVzKCk7
CkBAIC0xMDEyLDYgKzEwMjMsMTAgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KEhlYXBPcGVyYXRpb24g
Y29sbGVjdAogCiAgICAgbWFya1Jvb3RzKGdjU3RhcnRUaW1lKTsKIAorICAgIGlmIChtX3Zlcmlm
aWVyKSB7CisgICAgICAgIG1fdmVyaWZpZXItPmdhdGhlckxpdmVPYmplY3RzKEhlYXBWZXJpZmll
cjo6UGhhc2U6OkFmdGVyTWFya2luZyk7CisgICAgICAgIG1fdmVyaWZpZXItPnZlcmlmeShIZWFw
VmVyaWZpZXI6OlBoYXNlOjpBZnRlck1hcmtpbmcpOworICAgIH0KICAgICBKQVZBU0NSSVBUQ09S
RV9HQ19NQVJLRUQoKTsKIAogICAgIGlmICh2bSgpLT50eXBlUHJvZmlsZXIoKSkKQEAgLTEwMzUs
NiArMTA1MCwxMSBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoSGVhcE9wZXJhdGlvbiBjb2xsZWN0CiAg
ICAgZGlkRmluaXNoQ29sbGVjdGlvbihnY1N0YXJ0VGltZSk7CiAgICAgcmVzdW1lQ29tcGlsZXJU
aHJlYWRzKCk7CiAKKyAgICBpZiAobV92ZXJpZmllcikgeworICAgICAgICBtX3ZlcmlmaWVyLT50
cmltRGVhZE9iamVjdHMoKTsKKyAgICAgICAgbV92ZXJpZmllci0+dmVyaWZ5KEhlYXBWZXJpZmll
cjo6UGhhc2U6OkFmdGVyR0MpOworICAgIH0KKwogICAgIGlmIChPcHRpb25zOjpsb2dHQygpKSB7
CiAgICAgICAgIGRvdWJsZSBhZnRlciA9IGN1cnJlbnRUaW1lTVMoKTsKICAgICAgICAgZGF0YUxv
ZyhhZnRlciAtIGJlZm9yZSwgIiBtc11cbiIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuaAkocmV2aXNpb24gMTc2Mjk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw3IEBAIGNsYXNzIEdDQXdhcmVKSVRTdHVi
Um91dGluZTsKIGNsYXNzIEdsb2JhbENvZGVCbG9jazsKIGNsYXNzIEhlYXA7CiBjbGFzcyBIZWFw
Um9vdFZpc2l0b3I7CitjbGFzcyBIZWFwVmVyaWZpZXI7CiBjbGFzcyBJbmNyZW1lbnRhbFN3ZWVw
ZXI7CiBjbGFzcyBKSVRTdHViUm91dGluZTsKIGNsYXNzIEpTQ2VsbDsKQEAgLTIzNCw2ICsyMzUs
NyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBHQ0F3YXJlSklUU3R1YlJvdXRpbmU7CiAg
ICAgZnJpZW5kIGNsYXNzIEdDTG9nZ2luZzsKICAgICBmcmllbmQgY2xhc3MgSGFuZGxlU2V0Owor
ICAgIGZyaWVuZCBjbGFzcyBIZWFwVmVyaWZpZXI7CiAgICAgZnJpZW5kIGNsYXNzIEpJVFN0dWJS
b3V0aW5lOwogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAgICAgZnJp
ZW5kIGNsYXNzIE1hcmtlZFNwYWNlOwpAQCAtMzgzLDYgKzM4NSw4IEBAIHByaXZhdGU6CiAgICAg
CiAgICAgdW5zaWduZWQgbV9kZWZlcnJhbERlcHRoOwogICAgIFZlY3RvcjxERkc6OldvcmtsaXN0
Kj4gbV9zdXNwZW5kZWRDb21waWxlcldvcmtsaXN0czsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxI
ZWFwVmVyaWZpZXI+IG1fdmVyaWZpZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBWZXJpZmllci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFZlcmlmaWVyLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBWZXJpZmllci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwyOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkhlYXBWZXJp
Zmllci5oIgorCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lcy5oIgorI2luY2x1ZGUgIkNvcGll
ZFNwYWNlSW5saW5lcy5oIgorI2luY2x1ZGUgIkhlYXBJdGVyYXRpb25TY29wZS5oIgorI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlND
IHsKKworTGl2ZU9iamVjdERhdGEqIExpdmVPYmplY3RMaXN0OjpmaW5kT2JqZWN0KEpTT2JqZWN0
KiBvYmopCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXZlT2JqZWN0cy5zaXplKCk7
IGkrKykgeworICAgICAgICBMaXZlT2JqZWN0RGF0YSYgZGF0YSA9IGxpdmVPYmplY3RzW2ldOwor
ICAgICAgICBpZiAob2JqID09IGRhdGEub2JqKQorICAgICAgICAgICAgcmV0dXJuICZkYXRhOwor
ICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworSGVhcFZlcmlmaWVyOjpIZWFwVmVyaWZp
ZXIoSGVhcCogaGVhcCwgdW5zaWduZWQgbnVtYmVyT2ZHQ0N5Y2xlc1RvUmVjb3JkKQorICAgIDog
bV9oZWFwKGhlYXApCisgICAgLCBtX2N1cnJlbnRDeWNsZSgwKQorICAgICwgbV9udW1iZXJPZkN5
Y2xlcyhudW1iZXJPZkdDQ3ljbGVzVG9SZWNvcmQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9u
dW1iZXJPZkN5Y2xlcyA+IDApOworICAgIG1fY3ljbGVzID0gc3RkOjptYWtlX3VuaXF1ZTxHQ0N5
Y2xlW10+KG1fbnVtYmVyT2ZDeWNsZXMpOworfQorCitjb25zdCBjaGFyKiBIZWFwVmVyaWZpZXI6
OmNvbGxlY3Rpb25UeXBlTmFtZShIZWFwT3BlcmF0aW9uIHR5cGUpCit7CisgICAgc3dpdGNoICh0
eXBlKSB7CisgICAgY2FzZSBOb09wZXJhdGlvbjoKKyAgICAgICAgcmV0dXJuICJOb09wZXJhdGlv
biI7CisgICAgY2FzZSBBbnlDb2xsZWN0aW9uOgorICAgICAgICByZXR1cm4gIkFueUNvbGxlY3Rp
b24iOworICAgIGNhc2UgQWxsb2NhdGlvbjoKKyAgICAgICAgcmV0dXJuICJBbGxvY2F0aW9uIjsK
KyAgICBjYXNlIEVkZW5Db2xsZWN0aW9uOgorICAgICAgICByZXR1cm4gIkVkZW5Db2xsZWN0aW9u
IjsKKyAgICBjYXNlIEZ1bGxDb2xsZWN0aW9uOgorICAgICAgICByZXR1cm4gIkZ1bGxDb2xsZWN0
aW9uIjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworY29u
c3QgY2hhciogSGVhcFZlcmlmaWVyOjpwaGFzZU5hbWUoSGVhcFZlcmlmaWVyOjpQaGFzZSBwaGFz
ZSkKK3sKKyAgICBzd2l0Y2ggKHBoYXNlKSB7CisgICAgY2FzZSBQaGFzZTo6QmVmb3JlR0M6Cisg
ICAgICAgIHJldHVybiAiQmVmb3JlR0MiOworICAgIGNhc2UgUGhhc2U6OkJlZm9yZU1hcmtpbmc6
CisgICAgICAgIHJldHVybiAiQmVmb3JlTWFya2luZyI7CisgICAgY2FzZSBQaGFzZTo6QWZ0ZXJN
YXJraW5nOgorICAgICAgICByZXR1cm4gIkFmdGVyTWFya2luZyI7CisgICAgY2FzZSBQaGFzZTo6
QWZ0ZXJHQzoKKyAgICAgICAgcmV0dXJuICJBZnRlckdDIjsKKyAgICB9CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworc3RhdGljIHZvaWQgZ2V0QnV0dGVyZmx5RGV0YWls
cyhKU09iamVjdCogb2JqLCB2b2lkKiYgYnV0dGVyZmx5QmFzZSwgc2l6ZV90JiBidXR0ZXJmbHlD
YXBhY2l0eUluQnl0ZXMsIENvcGllZEJsb2NrKiYgYnV0dGVyZmx5QmxvY2spCit7CisgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBvYmotPnN0cnVjdHVyZSgpOworICAgIEJ1dHRlcmZseSogYnV0
dGVyZmx5ID0gb2JqLT5idXR0ZXJmbHkoKTsKKyAgICBidXR0ZXJmbHlCYXNlID0gYnV0dGVyZmx5
LT5iYXNlKHN0cnVjdHVyZSk7CisgICAgYnV0dGVyZmx5QmxvY2sgPSBDb3BpZWRTcGFjZTo6Ymxv
Y2tGb3IoYnV0dGVyZmx5QmFzZSk7CisKKyAgICBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSA9IHN0
cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICBzaXplX3QgcHJlQ2FwYWNpdHk7Cisg
ICAgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzOworICAgIGJvb2wgaGFzSW5kZXhp
bmdIZWFkZXIgPSBvYmotPmhhc0luZGV4aW5nSGVhZGVyKCk7CisgICAgaWYgKFVOTElLRUxZKGhh
c0luZGV4aW5nSGVhZGVyKSkgeworICAgICAgICBwcmVDYXBhY2l0eSA9IGJ1dHRlcmZseS0+aW5k
ZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKTsKKyAgICAgICAgaW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMgPSBidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKHN0cnVjdHVyZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHJl
Q2FwYWNpdHkgPSAwOworICAgICAgICBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyA9IDA7Cisg
ICAgfQorICAgIGJ1dHRlcmZseUNhcGFjaXR5SW5CeXRlcyA9IEJ1dHRlcmZseTo6dG90YWxTaXpl
KHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworfQorCit2b2lkIEhlYXBWZXJpZmllcjo6aW5pdGlhbGl6
ZUdDQ3ljbGUoKQoreworICAgIEhlYXAqIGhlYXAgPSBtX2hlYXA7CisgICAgaW5jcmVtZW50Q3lj
bGUoKTsKKyAgICBjdXJyZW50Q3ljbGUoKS5jb2xsZWN0aW9uVHlwZSA9IGhlYXAtPm9wZXJhdGlv
bkluUHJvZ3Jlc3MoKTsKK30KKworc3RydWN0IEdhdGhlckxpdmVPYmpGdW5jdG9yIDogTWFya2Vk
QmxvY2s6OkNvdW50RnVuY3RvciB7CisgICAgR2F0aGVyTGl2ZU9iakZ1bmN0b3IoTGl2ZU9iamVj
dExpc3QmIGxpc3QpCisgICAgICAgIDogbV9saXN0KGxpc3QpCisgICAgeworICAgICAgICBBU1NF
UlQoIWxpc3QubGl2ZU9iamVjdHMuc2l6ZSgpKTsKKyAgICB9CisKKyAgICB2b2lkIG9wZXJhdG9y
KCkoSlNDZWxsKiBjZWxsKQorICAgIHsKKyAgICAgICAgaWYgKCFjZWxsLT5pc09iamVjdCgpKQor
ICAgICAgICAgICAgcmV0dXJuOyAgICAgICAgCisgICAgICAgIExpdmVPYmplY3REYXRhIGRhdGEo
YXNPYmplY3QoY2VsbCkpOworICAgICAgICBtX2xpc3QubGl2ZU9iamVjdHMuYXBwZW5kKGRhdGEp
OworICAgIH0KKworICAgIExpdmVPYmplY3RMaXN0JiBtX2xpc3Q7Cit9OworCit2b2lkIEhlYXBW
ZXJpZmllcjo6Z2F0aGVyTGl2ZU9iamVjdHMoSGVhcFZlcmlmaWVyOjpQaGFzZSBwaGFzZSkKK3sK
KyAgICBIZWFwKiBoZWFwID0gbV9oZWFwOworICAgIExpdmVPYmplY3RMaXN0JiBsaXN0ID0gbGl2
ZU9iamVjdExpc3RGb3JHYXRoZXJpbmcocGhhc2UpOworCisgICAgSGVhcEl0ZXJhdGlvblNjb3Bl
IGl0ZXJhdGlvblNjb3BlKCpoZWFwKTsKKyAgICBsaXN0LnJlc2V0KCk7CisgICAgR2F0aGVyTGl2
ZU9iakZ1bmN0b3IgZnVuY3RvcihsaXN0KTsKKyAgICBoZWFwLT5tX29iamVjdFNwYWNlLmZvckVh
Y2hMaXZlQ2VsbChpdGVyYXRpb25TY29wZSwgZnVuY3Rvcik7Cit9CisKK0xpdmVPYmplY3RMaXN0
JiBIZWFwVmVyaWZpZXI6OmxpdmVPYmplY3RMaXN0Rm9yR2F0aGVyaW5nKEhlYXBWZXJpZmllcjo6
UGhhc2UgcGhhc2UpCit7CisgICAgc3dpdGNoIChwaGFzZSkgeworICAgIGNhc2UgUGhhc2U6OkJl
Zm9yZU1hcmtpbmc6CisgICAgICAgIHJldHVybiBjdXJyZW50Q3ljbGUoKS5iZWZvcmU7CisgICAg
Y2FzZSBQaGFzZTo6QWZ0ZXJNYXJraW5nOgorICAgICAgICByZXR1cm4gY3VycmVudEN5Y2xlKCku
YWZ0ZXI7CisgICAgY2FzZSBQaGFzZTo6QmVmb3JlR0M6CisgICAgY2FzZSBQaGFzZTo6QWZ0ZXJH
QzoKKyAgICAgICAgLy8gV2Ugc2hvdWxkIG5vdCBiZSBnYXRoZXJpbmcgbGl2ZSBvYmplY3RzIGR1
cmluZyB0aGVzZSBwaGFzZXMuCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB0cmltRGVhZE9iamVjdHNGcm9tTGlzdChIYXNoU2V0
PEpTT2JqZWN0Kj4mIGtub3duTGl2ZVNldCwgTGl2ZU9iamVjdExpc3QmIGxpc3QpCit7CisgICAg
aWYgKCFsaXN0Lmhhc0xpdmVPYmplY3RzKQorICAgICAgICByZXR1cm47CisKKyAgICBzaXplX3Qg
bGl2ZU9iamVjdHNGb3VuZCA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0Lmxp
dmVPYmplY3RzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIExpdmVPYmplY3REYXRhJiBvYmpEYXRh
ID0gbGlzdC5saXZlT2JqZWN0c1tpXTsKKyAgICAgICAgaWYgKG9iakRhdGEuaXNDb25maXJtZWRE
ZWFkKQorICAgICAgICAgICAgY29udGludWU7IC8vIERvbid0ICJyZXN1cnJlY3QiIGtub3duIGRl
YWQgb2JqZWN0cy4KKyAgICAgICAgaWYgKCFrbm93bkxpdmVTZXQuY29udGFpbnMob2JqRGF0YS5v
YmopKSB7CisgICAgICAgICAgICBvYmpEYXRhLmlzQ29uZmlybWVkRGVhZCA9IHRydWU7CisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBsaXZlT2JqZWN0c0ZvdW5kKys7
CisgICAgfQorICAgIGxpc3QuaGFzTGl2ZU9iamVjdHMgPSAhIWxpdmVPYmplY3RzRm91bmQ7Cit9
CisKK3ZvaWQgSGVhcFZlcmlmaWVyOjp0cmltRGVhZE9iamVjdHMoKQoreworICAgIEhhc2hTZXQ8
SlNPYmplY3QqPiBrbm93bkxpdmVTZXQ7CisKKyAgICBMaXZlT2JqZWN0TGlzdCYgYWZ0ZXIgPSBj
dXJyZW50Q3ljbGUoKS5hZnRlcjsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFmdGVyLmxp
dmVPYmplY3RzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIExpdmVPYmplY3REYXRhJiBvYmpEYXRh
ID0gYWZ0ZXIubGl2ZU9iamVjdHNbaV07CisgICAgICAgIGtub3duTGl2ZVNldC5hZGQob2JqRGF0
YS5vYmopOworICAgIH0KKworICAgIHRyaW1EZWFkT2JqZWN0c0Zyb21MaXN0KGtub3duTGl2ZVNl
dCwgY3VycmVudEN5Y2xlKCkuYmVmb3JlKTsKKworICAgIGZvciAoaW50IGkgPSAtMTsgaSA+IC1t
X251bWJlck9mQ3ljbGVzOyBpLS0pIHsKKyAgICAgICAgdHJpbURlYWRPYmplY3RzRnJvbUxpc3Qo
a25vd25MaXZlU2V0LCBjeWNsZUZvckluZGV4KGkpLmJlZm9yZSk7CisgICAgICAgIHRyaW1EZWFk
T2JqZWN0c0Zyb21MaXN0KGtub3duTGl2ZVNldCwgY3ljbGVGb3JJbmRleChpKS5hZnRlcik7Cisg
ICAgfQorfQorCitib29sIEhlYXBWZXJpZmllcjo6dmVyaWZ5QnV0dGVyZmx5SXNJblN0b3JhZ2VT
cGFjZShQaGFzZSBwaGFzZSwgTGl2ZU9iamVjdExpc3QmIGxpc3QpCit7CisgICAgYXV0byYgbGl2
ZU9iamVjdHMgPSBsaXN0LmxpdmVPYmplY3RzOworCisgICAgQ29waWVkU3BhY2UmIHN0b3JhZ2VT
cGFjZSA9IG1faGVhcC0+bV9zdG9yYWdlU3BhY2U7CisgICAgYm9vbCBsaXN0TmFtZVByaW50ZWQg
PSBmYWxzZTsKKyAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbGl2ZU9iamVjdHMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgTGl2ZU9iamVjdERhdGEm
IG9iamVjdERhdGEgPSBsaXZlT2JqZWN0c1tpXTsKKyAgICAgICAgaWYgKG9iamVjdERhdGEuaXND
b25maXJtZWREZWFkKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgSlNPYmplY3Qq
IG9iaiA9IG9iamVjdERhdGEub2JqOworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG9i
ai0+YnV0dGVyZmx5KCk7CisgICAgICAgIGlmIChidXR0ZXJmbHkpIHsKKyAgICAgICAgICAgIHZv
aWQqIGJ1dHRlcmZseUJhc2U7CisgICAgICAgICAgICBzaXplX3QgYnV0dGVyZmx5Q2FwYWNpdHlJ
bkJ5dGVzOworICAgICAgICAgICAgQ29waWVkQmxvY2sqIGJ1dHRlcmZseUJsb2NrOworICAgICAg
ICAgICAgZ2V0QnV0dGVyZmx5RGV0YWlscyhvYmosIGJ1dHRlcmZseUJhc2UsIGJ1dHRlcmZseUNh
cGFjaXR5SW5CeXRlcywgYnV0dGVyZmx5QmxvY2spOworCisgICAgICAgICAgICBpZiAoIXN0b3Jh
Z2VTcGFjZS5jb250YWlucyhidXR0ZXJmbHlCbG9jaykpIHsKKyAgICAgICAgICAgICAgICBpZiAo
IWxpc3ROYW1lUHJpbnRlZCkgeworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigiVmVyaWZp
Y2F0aW9uIEAgcGhhc2UgJXMgRkFJTEVEIGluIG9iamVjdCBsaXN0ICclcycgKHNpemUgJXp1KVxu
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBoYXNlTmFtZShwaGFzZSksIGxpc3QubmFtZSwg
bGl2ZU9iamVjdHMuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgbGlzdE5hbWVQcmludGVk
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IG9iai0+c3RydWN0dXJlKCk7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0Yo
IiAgICA8JXU6JXU+IGJ1dHRlcmZseSAlcCAoYmFzZSAlcCBzaXplICV6dSBibG9jayAlcCkgTk9U
IGluIFN0b3JhZ2VTcGFjZSB8IG9iaiAlcCB0eXBlICclcydcbiIsCisgICAgICAgICAgICAgICAg
ICAgICh1bnNpZ25lZClnZXRwaWQoKSwgKHVuc2lnbmVkKWN1cnJlbnRUaHJlYWQoKSwKKyAgICAg
ICAgICAgICAgICAgICAgYnV0dGVyZmx5LCBidXR0ZXJmbHlCYXNlLCBidXR0ZXJmbHlDYXBhY2l0
eUluQnl0ZXMsIGJ1dHRlcmZseUJsb2NrLAorICAgICAgICAgICAgICAgICAgICBvYmosIHN0cnVj
dHVyZS0+Y2xhc3NJbmZvKCktPmNsYXNzTmFtZSk7CisgICAgICAgICAgICAgICAgc3VjY2VzcyA9
IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBzdWNj
ZXNzOworfQorCit2b2lkIEhlYXBWZXJpZmllcjo6dmVyaWZ5KEhlYXBWZXJpZmllcjo6UGhhc2Ug
cGhhc2UpCit7CisgICAgYm9vbCBiZWZvcmVWZXJpZmllZCA9IHZlcmlmeUJ1dHRlcmZseUlzSW5T
dG9yYWdlU3BhY2UocGhhc2UsIGN1cnJlbnRDeWNsZSgpLmJlZm9yZSk7CisgICAgYm9vbCBhZnRl
clZlcmlmaWVkID0gdmVyaWZ5QnV0dGVyZmx5SXNJblN0b3JhZ2VTcGFjZShwaGFzZSwgY3VycmVu
dEN5Y2xlKCkuYWZ0ZXIpOworICAgIFJFTEVBU0VfQVNTRVJUKGJlZm9yZVZlcmlmaWVkICYmIGFm
dGVyVmVyaWZpZWQpOworfQorCit2b2lkIEhlYXBWZXJpZmllcjo6cmVwb3J0T2JqZWN0KExpdmVP
YmplY3REYXRhJiBvYmpEYXRhLCBpbnQgY3ljbGVJbmRleCwgSGVhcFZlcmlmaWVyOjpHQ0N5Y2xl
JiBjeWNsZSwgTGl2ZU9iamVjdExpc3QmIGxpc3QpCit7CisgICAgSlNPYmplY3QqIG9iaiA9IG9i
akRhdGEub2JqOworCisgICAgaWYgKG9iakRhdGEuaXNDb25maXJtZWREZWFkKSB7CisgICAgICAg
IGRhdGFMb2dGKCJGT1VORCBkZWFkIG9iaiAlcCBpbiBHQ1slZF0gJXMgbGlzdCAnJXMnXG4iLAor
ICAgICAgICAgICAgb2JqLCBjeWNsZUluZGV4LCBjeWNsZS5jb2xsZWN0aW9uVHlwZU5hbWUoKSwg
bGlzdC5uYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gb2JqLT5zdHJ1Y3R1cmUoKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG9i
ai0+YnV0dGVyZmx5KCk7CisgICAgdm9pZCogYnV0dGVyZmx5QmFzZTsKKyAgICBzaXplX3QgYnV0
dGVyZmx5Q2FwYWNpdHlJbkJ5dGVzOworICAgIENvcGllZEJsb2NrKiBidXR0ZXJmbHlCbG9jazsK
KyAgICBnZXRCdXR0ZXJmbHlEZXRhaWxzKG9iaiwgYnV0dGVyZmx5QmFzZSwgYnV0dGVyZmx5Q2Fw
YWNpdHlJbkJ5dGVzLCBidXR0ZXJmbHlCbG9jayk7CisKKyAgICBkYXRhTG9nRigiRk9VTkQgb2Jq
ICVwIHR5cGUgJyVzJyBidXR0ZXJmbHkgJXAgKGJhc2UgJXAgc2l6ZSAlenUgYmxvY2sgJXApIGlu
IEdDWyVkXSAlcyBsaXN0ICclcydcbiIsCisgICAgICAgIG9iaiwgc3RydWN0dXJlLT5jbGFzc0lu
Zm8oKS0+Y2xhc3NOYW1lLAorICAgICAgICBidXR0ZXJmbHksIGJ1dHRlcmZseUJhc2UsIGJ1dHRl
cmZseUNhcGFjaXR5SW5CeXRlcywgYnV0dGVyZmx5QmxvY2ssCisgICAgICAgIGN5Y2xlSW5kZXgs
IGN5Y2xlLmNvbGxlY3Rpb25UeXBlTmFtZSgpLCBsaXN0Lm5hbWUpOworfQorCit2b2lkIEhlYXBW
ZXJpZmllcjo6Y2hlY2tJZlJlY29yZGVkKEpTT2JqZWN0KiBvYmopCit7CisgICAgYm9vbCBmb3Vu
ZCA9IGZhbHNlOworCisgICAgZm9yIChpbnQgY3ljbGVJbmRleCA9IDA7IGN5Y2xlSW5kZXggPiAt
bV9udW1iZXJPZkN5Y2xlczsgY3ljbGVJbmRleC0tKSB7CisgICAgICAgIEdDQ3ljbGUmIGN5Y2xl
ID0gY3ljbGVGb3JJbmRleChjeWNsZUluZGV4KTsKKyAgICAgICAgTGl2ZU9iamVjdExpc3QmIGJl
Zm9yZUxpc3QgPSBjeWNsZS5iZWZvcmU7IAorICAgICAgICBMaXZlT2JqZWN0TGlzdCYgYWZ0ZXJM
aXN0ID0gY3ljbGUuYWZ0ZXI7IAorCisgICAgICAgIExpdmVPYmplY3REYXRhKiBvYmpEYXRhOwor
ICAgICAgICBvYmpEYXRhID0gYmVmb3JlTGlzdC5maW5kT2JqZWN0KG9iaik7CisgICAgICAgIGlm
IChvYmpEYXRhKSB7CisgICAgICAgICAgICByZXBvcnRPYmplY3QoKm9iakRhdGEsIGN5Y2xlSW5k
ZXgsIGN5Y2xlLCBiZWZvcmVMaXN0KTsKKyAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAg
ICAgfQorICAgICAgICBvYmpEYXRhID0gYWZ0ZXJMaXN0LmZpbmRPYmplY3Qob2JqKTsKKyAgICAg
ICAgaWYgKG9iakRhdGEpIHsKKyAgICAgICAgICAgIHJlcG9ydE9iamVjdCgqb2JqRGF0YSwgY3lj
bGVJbmRleCwgY3ljbGUsIGFmdGVyTGlzdCk7CisgICAgICAgICAgICBmb3VuZCA9IHRydWU7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWZvdW5kKQorICAgICAgICBkYXRhTG9nRigib2Jq
ICVwIE5PVCBGT1VORFxuIiwgb2JqKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVmVyaWZpZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVmVyaWZpZXIuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBWZXJpZmllci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgSGVhcFZlcmlmaWVyX2gKKyNkZWZpbmUgSGVhcFZlcmlmaWVyX2gK
KworI2luY2x1ZGUgIkhlYXAuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCitjbGFzcyBKU09iamVjdDsKK2NsYXNzIE1hcmtlZEJsb2NrOworCitzdHJ1Y3Qg
TGl2ZU9iamVjdERhdGEgeworICAgIExpdmVPYmplY3REYXRhKEpTT2JqZWN0KiBvYmosIGJvb2wg
aXNDb25maXJtZWREZWFkID0gZmFsc2UpCisgICAgICAgIDogb2JqKG9iaikKKyAgICAgICAgLCBp
c0NvbmZpcm1lZERlYWQoaXNDb25maXJtZWREZWFkKQorICAgIHsKKyAgICB9CisKKyAgICBKU09i
amVjdCogb2JqOworICAgIGJvb2wgaXNDb25maXJtZWREZWFkOworfTsKKworc3RydWN0IExpdmVP
YmplY3RMaXN0IHsKKyAgICBMaXZlT2JqZWN0TGlzdChjb25zdCBjaGFyKiBuYW1lKQorICAgICAg
ICA6IG5hbWUobmFtZSkKKyAgICAgICAgLCBoYXNMaXZlT2JqZWN0cyh0cnVlKQorICAgIHsKKyAg
ICB9CisKKyAgICB2b2lkIHJlc2V0KCkKKyAgICB7CisgICAgICAgIGxpdmVPYmplY3RzLmNsZWFy
KCk7CisgICAgICAgIGhhc0xpdmVPYmplY3RzID0gdHJ1ZTsgLy8gUHJlc3VtZSB0byBoYXZlIGxp
dmUgb2JqZWN0cyB1bnRpbCB0aGUgbGlzdCBpcyB0cmltbWVkLgorICAgIH0KKworICAgIExpdmVP
YmplY3REYXRhKiBmaW5kT2JqZWN0KEpTT2JqZWN0Kik7CisKKyAgICBjb25zdCBjaGFyKiBuYW1l
OworICAgIFZlY3RvcjxMaXZlT2JqZWN0RGF0YT4gbGl2ZU9iamVjdHM7CisgICAgYm9vbCBoYXNM
aXZlT2JqZWN0czsKK307CisKK2NsYXNzIEhlYXBWZXJpZmllciB7CitwdWJsaWM6CisgICAgZW51
bSBjbGFzcyBQaGFzZSB7CisgICAgICAgIEJlZm9yZUdDLAorICAgICAgICBCZWZvcmVNYXJraW5n
LAorICAgICAgICBBZnRlck1hcmtpbmcsCisgICAgICAgIEFmdGVyR0MKKyAgICB9OworCisgICAg
SGVhcFZlcmlmaWVyKEhlYXAqLCB1bnNpZ25lZCBudW1iZXJPZkdDQ3ljbGVzVG9SZWNvcmQpOwor
CisgICAgdm9pZCBpbml0aWFsaXplR0NDeWNsZSgpOworICAgIHZvaWQgZ2F0aGVyTGl2ZU9iamVj
dHMoUGhhc2UpOworICAgIHZvaWQgdHJpbURlYWRPYmplY3RzKCk7CisgICAgdm9pZCB2ZXJpZnko
UGhhc2UpOworCisgICAgLy8gU2NhbnMgYWxsIHByZXZpb3VzbHkgcmVjb3JkZWQgTGl2ZU9iamVj
dExpc3RzIGFuZCBjaGVja3MgaWYgdGhlIHNwZWNpZmllZAorICAgIC8vIG9iamVjdCB3YXMgaW4g
YW55IG9mIHRob3NlIGxpc3RzLgorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY2hlY2tJZlJl
Y29yZGVkKEpTT2JqZWN0Kik7CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciogY29sbGVjdGlvblR5
cGVOYW1lKEhlYXBPcGVyYXRpb24pOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBwaGFzZU5hbWUo
UGhhc2UpOworCitwcml2YXRlOgorICAgIHN0cnVjdCBHQ0N5Y2xlIHsKKyAgICAgICAgR0NDeWNs
ZSgpCisgICAgICAgICAgICA6IGJlZm9yZSgiQmVmb3JlIE1hcmtpbmciKQorICAgICAgICAgICAg
LCBhZnRlcigiQWZ0ZXIgTWFya2luZyIpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAg
IEhlYXBPcGVyYXRpb24gY29sbGVjdGlvblR5cGU7CisgICAgICAgIExpdmVPYmplY3RMaXN0IGJl
Zm9yZTsKKyAgICAgICAgTGl2ZU9iamVjdExpc3QgYWZ0ZXI7CisKKyAgICAgICAgY29uc3QgY2hh
ciogY29sbGVjdGlvblR5cGVOYW1lKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIEhlYXBWZXJpZmllcjo6Y29sbGVjdGlvblR5cGVOYW1lKGNvbGxlY3Rpb25UeXBlKTsKKyAg
ICAgICAgfQorICAgIH07CisKKyAgICB2b2lkIGluY3JlbWVudEN5Y2xlKCkgeyBtX2N1cnJlbnRD
eWNsZSA9IChtX2N1cnJlbnRDeWNsZSArIDEpICUgbV9udW1iZXJPZkN5Y2xlczsgfQorICAgIEdD
Q3ljbGUmIGN1cnJlbnRDeWNsZSgpIHsgcmV0dXJuIG1fY3ljbGVzW21fY3VycmVudEN5Y2xlXTsg
fQorICAgIEdDQ3ljbGUmIGN5Y2xlRm9ySW5kZXgoaW50IGN5Y2xlSW5kZXgpCisgICAgeworICAg
ICAgICBBU1NFUlQoY3ljbGVJbmRleCA8PSAwICYmIGN5Y2xlSW5kZXggPiAtbV9udW1iZXJPZkN5
Y2xlcyk7CisgICAgICAgIGN5Y2xlSW5kZXggKz0gbV9jdXJyZW50Q3ljbGU7CisgICAgICAgIGlm
IChjeWNsZUluZGV4IDwgMCkKKyAgICAgICAgICAgIGN5Y2xlSW5kZXggKz0gbV9udW1iZXJPZkN5
Y2xlczsKKyAgICAgICAgQVNTRVJUKGN5Y2xlSW5kZXggPCBtX251bWJlck9mQ3ljbGVzKTsKKyAg
ICAgICAgcmV0dXJuIG1fY3ljbGVzW2N5Y2xlSW5kZXhdOworICAgIH0KKworICAgIExpdmVPYmpl
Y3RMaXN0JiBsaXZlT2JqZWN0TGlzdEZvckdhdGhlcmluZyhQaGFzZSk7CisgICAgYm9vbCB2ZXJp
ZnlCdXR0ZXJmbHlJc0luU3RvcmFnZVNwYWNlKFBoYXNlLCBMaXZlT2JqZWN0TGlzdCYpOworCisg
ICAgc3RhdGljIHZvaWQgcmVwb3J0T2JqZWN0KExpdmVPYmplY3REYXRhJiwgaW50IGN5Y2xlSW5k
ZXgsIEhlYXBWZXJpZmllcjo6R0NDeWNsZSYsIExpdmVPYmplY3RMaXN0Jik7CisKKyAgICBIZWFw
KiBtX2hlYXA7CisgICAgaW50IG1fY3VycmVudEN5Y2xlOworICAgIGludCBtX251bWJlck9mQ3lj
bGVzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxHQ0N5Y2xlW10+IG1fY3ljbGVzOworfTsKKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBIZWFwVmVyaWZpZXIKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDE3NjI5NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjg3
LDYgKzI4Nyw5IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYoYm9v
bCwgbG9nSGVhcFN0YXRpc3RpY3NBdEV4aXQsIGZhbHNlKSBcCiAgICAgdihib29sLCBlbmFibGVU
eXBlUHJvZmlsZXIsIGZhbHNlKSBcCiAgICAgXAorICAgIHYoYm9vbCwgdmVyaWZ5SGVhcCwgdHJ1
ZSkgXAorICAgIHYodW5zaWduZWQsIG51bWJlck9mR0NDeWNsZXNUb1JlY29yZEZvclZlcmlmaWNh
dGlvbiwgMykgXAorICAgIFwKICAgICB2KGJvb2wsIGVuYWJsZUV4Y2VwdGlvbkZ1enosIGZhbHNl
KSBcCiAgICAgdih1bnNpZ25lZCwgZmlyZUV4Y2VwdGlvbkZ1enpBdCwgMCkKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241843</attachid>
            <date>2014-11-18 18:37:10 -0800</date>
            <delta_ts>2014-11-19 08:41:03 -0800</delta_ts>
            <desc>take 5: speculative fix for VC++&apos;s short coming. Uploading to test on Win EWS.</desc>
            <filename>bug-138851b.patch</filename>
            <type>text/plain</type>
            <size>28463</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTc2MzAxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3IEBA
CisyMDE0LTExLTE4ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGQgSGVhcCB2ZXJpZmljYXRpb24gaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgIDxodHRwczovL3dl
YmtpdC5vcmcvYi8xMzg4NTE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhlIHZlcmlmaWNhdGlvbiBpbmZyYXN0cnVjdHVyZSBjb2RlIGlzIGFsd2F5
cyBidWlsdCBpbiBidXQgZGlzYWJsZWQgYnkKKyAgICAgICAgZGVmYXVsdC4gIFdoZW4gZGlzYWJs
ZWQsIHRoZSBjb3N0IGlzIG1pbmltYWw6CisgICAgICAgIDEuIEhlYXAgaGFzIGEgbV92ZXJpZmll
ciBmaWVsZC4KKyAgICAgICAgMi4gR0MgZG9lcyBhIGZldyAiaWYgKG1fdmVyaWZpZXIpIiBjaGVj
a3MgdGhhdCBzaG91bGQgZmFpbC4KKyAgICAgICAgMy4gSGVhcFZlcmlmaWVyIHRha2VzIHVwIGNv
ZGUgc3BhY2UgdGhvdWdoIG5vdCB1c2VkLgorCisgICAgICAgIFdoZW4gZW5hYmxlZDoKKyAgICAg
ICAgMS4gVGhlIEhlYXBWZXJpZmllciB3aWxsIGtlZXAgTiBudW1iZXIgb2YgR0MgY3ljbGUgZGF0
YS4KKyAgICAgICAgICAgRWFjaCBHQyBjeWNsZSB3aWxsIGNvbnRhaW4gYSAiYmVmb3JlIG1hcmtp
bmciIGFuZCAiYWZ0ZXIgbWFya2luZyIgbGl2ZQorICAgICAgICAgICBvYmplY3QgbGlzdC4KKyAg
ICAgICAgICAgVGhlIEdDIGN5Y2xlcyBpcyBhIGNpcmN1bGFyIGJ1ZmZlci4gIE9ubHkgZGF0YSBm
b3IgdGhlIGxhc3QgTiBHQyBjeWNsZXMKKyAgICAgICAgICAgd2lsbCBiZSByZXRhaW5lZC4KKyAg
ICAgICAgMi4gRHVyaW5nIEdDLCB0aGUgY3VycmVudCBHQyBjeWNsZSdzIGxpdmUgb2JqZWN0cyBs
aXN0cyB3aWxsIGJlIHBvcHVsYXRlZAorICAgICAgICAgICBiZWZvcmUgYW5kIGFmdGVyIG1hcmtp
bmcuCisgICAgICAgIDMuIFRoZSBjdXJyZW50IEdDIGN5Y2xlJ3MgbGl2ZSBvYmplY3QgbGlzdHMg
d2lsbCBiZSB2YWxpZGF0ZWQgYmVmb3JlIEdDLAorICAgICAgICAgICBhZnRlciBtYXJraW5nLCBh
bmQgYWZ0ZXIgR0MuCisKKyAgICAgICAgQ3VycmVudGx5LCB0aGUgb25seSB2YWxpZGF0aW9uIGJl
aW5nIGRvbmUgaXMgdG8gdmVyaWZ5IHRoYXQgb2JqZWN0CisgICAgICAgIGJ1dHRlcmZsaWVzIGFy
ZSBhbGxvY2F0ZWQgZnJvbSB2YWxpZCBibG9ja3MgaW4gdGhlIFN0b3JhZ2UgKGFrYSBDb3BpZWQp
CisgICAgICAgIHNwYWNlLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICog
SmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAq
IEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzOgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6SGVhcCk6CisgICAgICAg
IChKU0M6OkhlYXA6OmNvbGxlY3QpOgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAq
IGhlYXAvSGVhcFZlcmlmaWVyLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkxpdmVPYmplY3RM
aXN0OjpmaW5kT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SGVhcFZlcmlmaWVyOjpIZWFwVmVyaWZp
ZXIpOgorICAgICAgICAoSlNDOjpIZWFwVmVyaWZpZXI6OmNvbGxlY3Rpb25UeXBlTmFtZSk6Cisg
ICAgICAgIChKU0M6OkhlYXBWZXJpZmllcjo6cGhhc2VOYW1lKToKKyAgICAgICAgKEpTQzo6Z2V0
QnV0dGVyZmx5RGV0YWlscyk6CisgICAgICAgIChKU0M6OkhlYXBWZXJpZmllcjo6aW5pdGlhbGl6
ZUdDQ3ljbGUpOgorICAgICAgICAoSlNDOjpHYXRoZXJMaXZlT2JqRnVuY3Rvcjo6R2F0aGVyTGl2
ZU9iakZ1bmN0b3IpOgorICAgICAgICAoSlNDOjpHYXRoZXJMaXZlT2JqRnVuY3Rvcjo6b3BlcmF0
b3IoKSk6CisgICAgICAgIChKU0M6OkhlYXBWZXJpZmllcjo6Z2F0aGVyTGl2ZU9iamVjdHMpOgor
ICAgICAgICAoSlNDOjpIZWFwVmVyaWZpZXI6OmxpdmVPYmplY3RMaXN0Rm9yR2F0aGVyaW5nKToK
KyAgICAgICAgKEpTQzo6dHJpbURlYWRPYmplY3RzRnJvbUxpc3QpOgorICAgICAgICAoSlNDOjpI
ZWFwVmVyaWZpZXI6OnRyaW1EZWFkT2JqZWN0cyk6CisgICAgICAgIChKU0M6OkhlYXBWZXJpZmll
cjo6dmVyaWZ5QnV0dGVyZmx5SXNJblN0b3JhZ2VTcGFjZSk6CisgICAgICAgIChKU0M6OkhlYXBW
ZXJpZmllcjo6dmVyaWZ5KToKKyAgICAgICAgKEpTQzo6SGVhcFZlcmlmaWVyOjpyZXBvcnRPYmpl
Y3QpOgorICAgICAgICAoSlNDOjpIZWFwVmVyaWZpZXI6OmNoZWNrSWZSZWNvcmRlZCk6CisgICAg
ICAgICogaGVhcC9IZWFwVmVyaWZpZXIuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkxpdmVPYmpl
Y3REYXRhOjpMaXZlT2JqZWN0RGF0YSk6CisgICAgICAgIChKU0M6OkxpdmVPYmplY3RMaXN0OjpM
aXZlT2JqZWN0TGlzdCk6CisgICAgICAgIChKU0M6OkxpdmVPYmplY3RMaXN0OjpyZXNldCk6Cisg
ICAgICAgIChKU0M6OkhlYXBWZXJpZmllcjo6R0NDeWNsZTo6R0NDeWNsZSk6CisgICAgICAgIChK
U0M6OkhlYXBWZXJpZmllcjo6R0NDeWNsZTo6Y29sbGVjdGlvblR5cGVOYW1lKToKKyAgICAgICAg
KEpTQzo6SGVhcFZlcmlmaWVyOjppbmNyZW1lbnRDeWNsZSk6CisgICAgICAgIChKU0M6OkhlYXBW
ZXJpZmllcjo6Y3VycmVudEN5Y2xlKToKKyAgICAgICAgKEpTQzo6SGVhcFZlcmlmaWVyOjpjeWNs
ZUZvckluZGV4KToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKwogMjAxNC0xMS0xOCAg
Q2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFVwZGF0ZSB0aGUgVmVj
dG9yIEFQSSB0byBkZWFsIHdpdGggdW5zaWduZWQgdHlwZXMgaW5zdGVhZCBvZiBzaXplX3QKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE3NjI5NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
MjY1LDYgKzI2NSw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgaGVhcC9IZWFw
LmNwcAogICAgIGhlYXAvSGVhcFN0YXRpc3RpY3MuY3BwCiAgICAgaGVhcC9IZWFwVGltZXIuY3Bw
CisgICAgaGVhcC9IZWFwVmVyaWZpZXIuY3BwCiAgICAgaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIu
Y3BwCiAgICAgaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAKICAgICBoZWFwL01hY2hpbmVTdGFj
a01hcmtlci5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagko
cmV2aXNpb24gMTc2Mjk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTQ3LDYg
KzU0Nyw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXAuY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxIZWFwU3RhdGlzdGljcy5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXBUaW1lci5jcHAiIC8+CisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXBWZXJpZmllci5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxoZWFwXEluY3JlbWVudGFsU3dlZXBlci5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEpJVFN0dWJSb3V0aW5lU2V0LmNwcCIgLz4KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcTWFjaGluZVN0YWNrTWFya2VyLmNwcCIgLz4KQEAg
LTEyNTAsNiArMTI1MSw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXBS
b290VmlzaXRvci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxIZWFwU3Rh
dGlzdGljcy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxIZWFwVGltZXIu
aCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcSGVhcFZlcmlmaWVyLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEluY3JlbWVudGFsU3dlZXBlci5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxKSVRTdHViUm91dGluZVNldC5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxMaXN0YWJsZUhhbmRsZXIuaCIgLz4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRl
cnMJKHJldmlzaW9uIDE3NjI5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwkod29ya2luZyBjb3B5
KQpAQCAtMjgyLDYgKzI4Miw5IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEhl
YXBUaW1lci5jcHAiPgogICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBp
bGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXBWZXJpZmllci5jcHAiPgor
ICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxoZWFwXEluY3JlbWVudGFsU3dlZXBlci5jcHAiPgogICAgICAgPEZp
bHRlcj5oZWFwPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CkBAIC0yMTM1LDYgKzIxMzgsOSBA
QAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxIZWFwVGltZXIuaCI+CiAgICAgICA8
RmlsdGVyPmhlYXA8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGhlYXBcSGVhcFZlcmlmaWVyLmgiPgorICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0
ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXElu
Y3JlbWVudGFsU3dlZXBlci5oIj4KICAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPgogICAgIDwv
Q2xJbmNsdWRlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE3
NjI5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNTkyLDYgKzE1OTIsOCBAQAogCQlG
RTUyNDhGOTE5MTQ0MkQ5MDBCN0ZERTQgLyogVmFyaWFibGVXYXRjaHBvaW50U2V0SW5saW5lcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU1MjQ4Rjgx
OTE0NDJEOTAwQjdGREU0IC8qIFZhcmlhYmxlV2F0Y2hwb2ludFNldElubGluZXMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTU5MzJBNzE4M0M1
QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNTkzMkE1MTgzQzVBMjYwMEExRUNDQyAvKiBWTUVudHJ5
U2NvcGUuY3BwICovOyB9OwogCQlGRTU5MzJBODE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNj
b3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTU5
MzJBNjE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkU3QkE2MEYxQTFBN0NFQzAwRjFGN0I0
IC8qIEhlYXBWZXJpZmllci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRTdCQTYwRDFBMUE3Q0VDMDBGMUY3QjQgLyogSGVhcFZlcmlmaWVyLmNwcCAq
LzsgfTsKKwkJRkU3QkE2MTAxQTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJpZmllci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU3QkE2MEUxQTFBN0NF
QzAwRjFGN0I0IC8qIEhlYXBWZXJpZmllci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUZFQTA4NjIwMTgyQjdBMDQwMEY2RDg1MSAvKiBCcmVha3Bv
aW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUEw
ODYxRTE4MkI3QTA0MDBGNkQ4NTEgLyogQnJlYWtwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFQTA4NjIxMTgyQjdBMDQwMEY2RDg1MSAv
KiBEZWJ1Z2dlclByaW1pdGl2ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZFQTA4NjFGMTgyQjdBMDQwMEY2RDg1MSAvKiBEZWJ1Z2dlclByaW1pdGl2
ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlG
RUI1OEMxNDE4N0I4QjE2MDA5OEVGMEIgLyogRXJyb3JIYW5kbGluZ1Njb3BlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFQjU4QzEyMTg3QjhCMTYw
MDk4RUYwQiAvKiBFcnJvckhhbmRsaW5nU2NvcGUuY3BwICovOyB9OwpAQCAtMzMwNSw2ICszMzA3
LDggQEAKIAkJRkU1MjQ4RjgxOTE0NDJEOTAwQjdGREU0IC8qIFZhcmlhYmxlV2F0Y2hwb2ludFNl
dElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFyaWFibGVXYXRj
aHBvaW50U2V0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTU5MzJB
NTE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFZNRW50cnlTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUZFNTkzMkE2MTgzQzVBMjYwMEExRUNDQyAvKiBWTUVudHJ5U2NvcGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVk1FbnRyeVNjb3BlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZFN0JBNjBEMUExQTdDRUMwMEYxRjdCNCAvKiBIZWFwVmVyaWZp
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSGVhcFZlcmlmaWVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU3QkE2MEUxQTFBN0NFQzAwRjFG
N0I0IC8qIEhlYXBWZXJpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBI
ZWFwVmVyaWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVBMDg2MUUxODJC
N0EwNDAwRjZEODUxIC8qIEJyZWFrcG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQnJlYWtwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUEwODYx
RjE4MkI3QTA0MDBGNkQ4NTEgLyogRGVidWdnZXJQcmltaXRpdmVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERlYnVnZ2VyUHJpbWl0aXZlcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGRUI1OEMxMjE4N0I4QjE2MDA5OEVGMEIgLyogRXJyb3JIYW5kbGluZ1Nj
b3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVycm9ySGFuZGxp
bmdTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNzk2LDYgKzM4MDAs
OCBAQAogCQkxNDJFMzEyQTEzNEZGMEE2MDBBRkFEQjUgLyogaGVhcCAqLyA9IHsKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJRkU3QkE2MEQxQTFBN0NFQzAwRjFGN0I0
IC8qIEhlYXBWZXJpZmllci5jcHAgKi8sCisJCQkJRkU3QkE2MEUxQTFBN0NFQzAwRjFGN0I0IC8q
IEhlYXBWZXJpZmllci5oICovLAogCQkJCUMyREE3NzgyMThFMjU5OTkwMDY2RkNCNiAvKiBIZWFw
SW5saW5lcy5oICovLAogCQkJCUFEREIxRjYyMThENzdEQjcwMDlCNThBOCAvKiBPcGFxdWVSb290
U2V0LmggKi8sCiAJCQkJMkFBQ0U2M0ExOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZpdHlDYWxs
YmFjay5jcHAgKi8sCkBAIC01MzY0LDYgKzUzNzAsNyBAQAogCQkJCUE1ODQwMzIwMThCRkZCRTEw
MDVBMDgxMSAvKiBJbnNwZWN0b3JBZ2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkFBQkNERTcx
OEVGMjk0MjAwMDAyMDk2IC8qIEdDTG9nZ2luZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU1MjQ4
RjkxOTE0NDJEOTAwQjdGREU0IC8qIFZhcmlhYmxlV2F0Y2hwb2ludFNldElubGluZXMuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUZFN0JBNjEwMUExQTdDRUMwMEYxRjdCNCAvKiBIZWFwVmVyaWZpZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUMyREE3NzgzMThFMjU5OTkwMDY2RkNCNiAvKiBIZWFwSW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUzMjQzOTQxODU2OTcwOTAwMkVENjkyIC8qIGdl
bmVyYXRlLWNvbWJpbmVkLWluc3BlY3Rvci1qc29uLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJQTU4
NDBFMjcxODdDOTgxRTAwODQzQjEwIC8qIGNzc21pbi5weSBpbiBIZWFkZXJzICovLApAQCAtNjk3
NCw2ICs2OTgxLDcgQEAKIAkJCQlBNTEzRTVDQTE4NUY5NjI0MDA3RTk1QUQgLyogSW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1ODQwRTIwMTg3QjdCODYwMDg0
M0IxMCAvKiBJbmplY3RlZFNjcmlwdE1vZHVsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjI0
RTU1NTE3RjBCNzFDMDBBQkIyMTcgLyogSW5saW5lQ2FsbEZyYW1lU2V0LmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUZFN0JBNjBGMUExQTdDRUMwMEYxRjdCNCAvKiBIZWFwVmVyaWZpZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTVDRUVFMTQxODdGM0JBRDAwRTU1Qzk5IC8qIEluc3BlY3RvckFn
ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OTNDRjg2MTg0MDM4Q0EwMEJGQ0UyNyAvKiBJ
bnNwZWN0b3JBZ2VudFJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI5Q0Y2MTlE
MEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHAgaW4g
U291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lv
biAxNzYyOTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkhlYXBJdGVyYXRpb25TY29wZS5o
IgogI2luY2x1ZGUgIkhlYXBSb290VmlzaXRvci5oIgogI2luY2x1ZGUgIkhlYXBTdGF0aXN0aWNz
LmgiCisjaW5jbHVkZSAiSGVhcFZlcmlmaWVyLmgiCiAjaW5jbHVkZSAiSW5jcmVtZW50YWxTd2Vl
cGVyLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVj
dC5oIgpAQCAtMzM5LDYgKzM0MCw4IEBAIEhlYXA6OkhlYXAoVk0qIHZtLCBIZWFwVHlwZSBoZWFw
VHlwZSkKICAgICAsIG1fZGVmZXJyYWxEZXB0aCgwKQogewogICAgIG1fc3RvcmFnZVNwYWNlLmlu
aXQoKTsKKyAgICBpZiAoT3B0aW9uczo6dmVyaWZ5SGVhcCgpKQorICAgICAgICBtX3ZlcmlmaWVy
ID0gc3RkOjptYWtlX3VuaXF1ZTxIZWFwVmVyaWZpZXI+KHRoaXMsIE9wdGlvbnM6Om51bWJlck9m
R0NDeWNsZXNUb1JlY29yZEZvclZlcmlmaWNhdGlvbigpKTsKIH0KIAogSGVhcDo6fkhlYXAoKQpA
QCAtMTAwNCw2ICsxMDA3LDE0IEBAIHZvaWQgSGVhcDo6Y29sbGVjdChIZWFwT3BlcmF0aW9uIGNv
bGxlY3QKICAgICBHQ1BIQVNFKENvbGxlY3QpOwogCiAgICAgZG91YmxlIGdjU3RhcnRUaW1lID0g
V1RGOjptb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKKyAgICBpZiAobV92ZXJpZmllcikg
eworICAgICAgICAvLyBWZXJpZnkgdGhhdCBsaXZlIG9iamVjdHMgZnJvbSB0aGUgbGFzdCBHQyBj
eWNsZSBoYXZlbid0IGJlZW4gY29ycnVwdGVkIGJ5CisgICAgICAgIC8vIG11dGF0b3JzIGJlZm9y
ZSB3ZSBiZWdpbiB0aGlzIG5ldyBHQyBjeWNsZS4KKyAgICAgICAgbV92ZXJpZmllci0+dmVyaWZ5
KEhlYXBWZXJpZmllcjo6UGhhc2U6OkJlZm9yZUdDKTsKKworICAgICAgICBtX3ZlcmlmaWVyLT5p
bml0aWFsaXplR0NDeWNsZSgpOworICAgICAgICBtX3ZlcmlmaWVyLT5nYXRoZXJMaXZlT2JqZWN0
cyhIZWFwVmVyaWZpZXI6OlBoYXNlOjpCZWZvcmVNYXJraW5nKTsKKyAgICB9CiAKICAgICBkZWxl
dGVPbGRDb2RlKGdjU3RhcnRUaW1lKTsKICAgICBmbHVzaE9sZFN0cnVjdHVyZUlEVGFibGVzKCk7
CkBAIC0xMDEyLDYgKzEwMjMsMTAgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KEhlYXBPcGVyYXRpb24g
Y29sbGVjdAogCiAgICAgbWFya1Jvb3RzKGdjU3RhcnRUaW1lKTsKIAorICAgIGlmIChtX3Zlcmlm
aWVyKSB7CisgICAgICAgIG1fdmVyaWZpZXItPmdhdGhlckxpdmVPYmplY3RzKEhlYXBWZXJpZmll
cjo6UGhhc2U6OkFmdGVyTWFya2luZyk7CisgICAgICAgIG1fdmVyaWZpZXItPnZlcmlmeShIZWFw
VmVyaWZpZXI6OlBoYXNlOjpBZnRlck1hcmtpbmcpOworICAgIH0KICAgICBKQVZBU0NSSVBUQ09S
RV9HQ19NQVJLRUQoKTsKIAogICAgIGlmICh2bSgpLT50eXBlUHJvZmlsZXIoKSkKQEAgLTEwMzUs
NiArMTA1MCwxMSBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoSGVhcE9wZXJhdGlvbiBjb2xsZWN0CiAg
ICAgZGlkRmluaXNoQ29sbGVjdGlvbihnY1N0YXJ0VGltZSk7CiAgICAgcmVzdW1lQ29tcGlsZXJU
aHJlYWRzKCk7CiAKKyAgICBpZiAobV92ZXJpZmllcikgeworICAgICAgICBtX3ZlcmlmaWVyLT50
cmltRGVhZE9iamVjdHMoKTsKKyAgICAgICAgbV92ZXJpZmllci0+dmVyaWZ5KEhlYXBWZXJpZmll
cjo6UGhhc2U6OkFmdGVyR0MpOworICAgIH0KKwogICAgIGlmIChPcHRpb25zOjpsb2dHQygpKSB7
CiAgICAgICAgIGRvdWJsZSBhZnRlciA9IGN1cnJlbnRUaW1lTVMoKTsKICAgICAgICAgZGF0YUxv
ZyhhZnRlciAtIGJlZm9yZSwgIiBtc11cbiIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuaAkocmV2aXNpb24gMTc2Mjk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw3IEBAIGNsYXNzIEdDQXdhcmVKSVRTdHVi
Um91dGluZTsKIGNsYXNzIEdsb2JhbENvZGVCbG9jazsKIGNsYXNzIEhlYXA7CiBjbGFzcyBIZWFw
Um9vdFZpc2l0b3I7CitjbGFzcyBIZWFwVmVyaWZpZXI7CiBjbGFzcyBJbmNyZW1lbnRhbFN3ZWVw
ZXI7CiBjbGFzcyBKSVRTdHViUm91dGluZTsKIGNsYXNzIEpTQ2VsbDsKQEAgLTIzNCw2ICsyMzUs
NyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBHQ0F3YXJlSklUU3R1YlJvdXRpbmU7CiAg
ICAgZnJpZW5kIGNsYXNzIEdDTG9nZ2luZzsKICAgICBmcmllbmQgY2xhc3MgSGFuZGxlU2V0Owor
ICAgIGZyaWVuZCBjbGFzcyBIZWFwVmVyaWZpZXI7CiAgICAgZnJpZW5kIGNsYXNzIEpJVFN0dWJS
b3V0aW5lOwogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAgICAgZnJp
ZW5kIGNsYXNzIE1hcmtlZFNwYWNlOwpAQCAtMzgzLDYgKzM4NSw4IEBAIHByaXZhdGU6CiAgICAg
CiAgICAgdW5zaWduZWQgbV9kZWZlcnJhbERlcHRoOwogICAgIFZlY3RvcjxERkc6OldvcmtsaXN0
Kj4gbV9zdXNwZW5kZWRDb21waWxlcldvcmtsaXN0czsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxI
ZWFwVmVyaWZpZXI+IG1fdmVyaWZpZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBWZXJpZmllci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFZlcmlmaWVyLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBWZXJpZmllci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwyOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkhlYXBWZXJp
Zmllci5oIgorCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lcy5oIgorI2luY2x1ZGUgIkNvcGll
ZFNwYWNlSW5saW5lcy5oIgorI2luY2x1ZGUgIkhlYXBJdGVyYXRpb25TY29wZS5oIgorI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlND
IHsKKworTGl2ZU9iamVjdERhdGEqIExpdmVPYmplY3RMaXN0OjpmaW5kT2JqZWN0KEpTT2JqZWN0
KiBvYmopCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXZlT2JqZWN0cy5zaXplKCk7
IGkrKykgeworICAgICAgICBMaXZlT2JqZWN0RGF0YSYgZGF0YSA9IGxpdmVPYmplY3RzW2ldOwor
ICAgICAgICBpZiAob2JqID09IGRhdGEub2JqKQorICAgICAgICAgICAgcmV0dXJuICZkYXRhOwor
ICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworSGVhcFZlcmlmaWVyOjpIZWFwVmVyaWZp
ZXIoSGVhcCogaGVhcCwgdW5zaWduZWQgbnVtYmVyT2ZHQ0N5Y2xlc1RvUmVjb3JkKQorICAgIDog
bV9oZWFwKGhlYXApCisgICAgLCBtX2N1cnJlbnRDeWNsZSgwKQorICAgICwgbV9udW1iZXJPZkN5
Y2xlcyhudW1iZXJPZkdDQ3ljbGVzVG9SZWNvcmQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9u
dW1iZXJPZkN5Y2xlcyA+IDApOworICAgIG1fY3ljbGVzID0gc3RkOjptYWtlX3VuaXF1ZTxHQ0N5
Y2xlW10+KG1fbnVtYmVyT2ZDeWNsZXMpOworfQorCitjb25zdCBjaGFyKiBIZWFwVmVyaWZpZXI6
OmNvbGxlY3Rpb25UeXBlTmFtZShIZWFwT3BlcmF0aW9uIHR5cGUpCit7CisgICAgc3dpdGNoICh0
eXBlKSB7CisgICAgY2FzZSBOb09wZXJhdGlvbjoKKyAgICAgICAgcmV0dXJuICJOb09wZXJhdGlv
biI7CisgICAgY2FzZSBBbnlDb2xsZWN0aW9uOgorICAgICAgICByZXR1cm4gIkFueUNvbGxlY3Rp
b24iOworICAgIGNhc2UgQWxsb2NhdGlvbjoKKyAgICAgICAgcmV0dXJuICJBbGxvY2F0aW9uIjsK
KyAgICBjYXNlIEVkZW5Db2xsZWN0aW9uOgorICAgICAgICByZXR1cm4gIkVkZW5Db2xsZWN0aW9u
IjsKKyAgICBjYXNlIEZ1bGxDb2xsZWN0aW9uOgorICAgICAgICByZXR1cm4gIkZ1bGxDb2xsZWN0
aW9uIjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworY29u
c3QgY2hhciogSGVhcFZlcmlmaWVyOjpwaGFzZU5hbWUoSGVhcFZlcmlmaWVyOjpQaGFzZSBwaGFz
ZSkKK3sKKyAgICBzd2l0Y2ggKHBoYXNlKSB7CisgICAgY2FzZSBQaGFzZTo6QmVmb3JlR0M6Cisg
ICAgICAgIHJldHVybiAiQmVmb3JlR0MiOworICAgIGNhc2UgUGhhc2U6OkJlZm9yZU1hcmtpbmc6
CisgICAgICAgIHJldHVybiAiQmVmb3JlTWFya2luZyI7CisgICAgY2FzZSBQaGFzZTo6QWZ0ZXJN
YXJraW5nOgorICAgICAgICByZXR1cm4gIkFmdGVyTWFya2luZyI7CisgICAgY2FzZSBQaGFzZTo6
QWZ0ZXJHQzoKKyAgICAgICAgcmV0dXJuICJBZnRlckdDIjsKKyAgICB9CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworc3RhdGljIHZvaWQgZ2V0QnV0dGVyZmx5RGV0YWls
cyhKU09iamVjdCogb2JqLCB2b2lkKiYgYnV0dGVyZmx5QmFzZSwgc2l6ZV90JiBidXR0ZXJmbHlD
YXBhY2l0eUluQnl0ZXMsIENvcGllZEJsb2NrKiYgYnV0dGVyZmx5QmxvY2spCit7CisgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBvYmotPnN0cnVjdHVyZSgpOworICAgIEJ1dHRlcmZseSogYnV0
dGVyZmx5ID0gb2JqLT5idXR0ZXJmbHkoKTsKKyAgICBidXR0ZXJmbHlCYXNlID0gYnV0dGVyZmx5
LT5iYXNlKHN0cnVjdHVyZSk7CisgICAgYnV0dGVyZmx5QmxvY2sgPSBDb3BpZWRTcGFjZTo6Ymxv
Y2tGb3IoYnV0dGVyZmx5QmFzZSk7CisKKyAgICBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSA9IHN0
cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICBzaXplX3QgcHJlQ2FwYWNpdHk7Cisg
ICAgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzOworICAgIGJvb2wgaGFzSW5kZXhp
bmdIZWFkZXIgPSBvYmotPmhhc0luZGV4aW5nSGVhZGVyKCk7CisgICAgaWYgKFVOTElLRUxZKGhh
c0luZGV4aW5nSGVhZGVyKSkgeworICAgICAgICBwcmVDYXBhY2l0eSA9IGJ1dHRlcmZseS0+aW5k
ZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKTsKKyAgICAgICAgaW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMgPSBidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKHN0cnVjdHVyZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHJl
Q2FwYWNpdHkgPSAwOworICAgICAgICBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyA9IDA7Cisg
ICAgfQorICAgIGJ1dHRlcmZseUNhcGFjaXR5SW5CeXRlcyA9IEJ1dHRlcmZseTo6dG90YWxTaXpl
KHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworfQorCit2b2lkIEhlYXBWZXJpZmllcjo6aW5pdGlhbGl6
ZUdDQ3ljbGUoKQoreworICAgIEhlYXAqIGhlYXAgPSBtX2hlYXA7CisgICAgaW5jcmVtZW50Q3lj
bGUoKTsKKyAgICBjdXJyZW50Q3ljbGUoKS5jb2xsZWN0aW9uVHlwZSA9IGhlYXAtPm9wZXJhdGlv
bkluUHJvZ3Jlc3MoKTsKK30KKworc3RydWN0IEdhdGhlckxpdmVPYmpGdW5jdG9yIDogTWFya2Vk
QmxvY2s6OkNvdW50RnVuY3RvciB7CisgICAgR2F0aGVyTGl2ZU9iakZ1bmN0b3IoTGl2ZU9iamVj
dExpc3QmIGxpc3QpCisgICAgICAgIDogbV9saXN0KGxpc3QpCisgICAgeworICAgICAgICBBU1NF
UlQoIWxpc3QubGl2ZU9iamVjdHMuc2l6ZSgpKTsKKyAgICB9CisKKyAgICB2b2lkIG9wZXJhdG9y
KCkoSlNDZWxsKiBjZWxsKQorICAgIHsKKyAgICAgICAgaWYgKCFjZWxsLT5pc09iamVjdCgpKQor
ICAgICAgICAgICAgcmV0dXJuOyAgICAgICAgCisgICAgICAgIExpdmVPYmplY3REYXRhIGRhdGEo
YXNPYmplY3QoY2VsbCkpOworICAgICAgICBtX2xpc3QubGl2ZU9iamVjdHMuYXBwZW5kKGRhdGEp
OworICAgIH0KKworICAgIExpdmVPYmplY3RMaXN0JiBtX2xpc3Q7Cit9OworCit2b2lkIEhlYXBW
ZXJpZmllcjo6Z2F0aGVyTGl2ZU9iamVjdHMoSGVhcFZlcmlmaWVyOjpQaGFzZSBwaGFzZSkKK3sK
KyAgICBIZWFwKiBoZWFwID0gbV9oZWFwOworICAgIExpdmVPYmplY3RMaXN0JiBsaXN0ID0gbGl2
ZU9iamVjdExpc3RGb3JHYXRoZXJpbmcocGhhc2UpOworCisgICAgSGVhcEl0ZXJhdGlvblNjb3Bl
IGl0ZXJhdGlvblNjb3BlKCpoZWFwKTsKKyAgICBsaXN0LnJlc2V0KCk7CisgICAgR2F0aGVyTGl2
ZU9iakZ1bmN0b3IgZnVuY3RvcihsaXN0KTsKKyAgICBoZWFwLT5tX29iamVjdFNwYWNlLmZvckVh
Y2hMaXZlQ2VsbChpdGVyYXRpb25TY29wZSwgZnVuY3Rvcik7Cit9CisKK0xpdmVPYmplY3RMaXN0
JiBIZWFwVmVyaWZpZXI6OmxpdmVPYmplY3RMaXN0Rm9yR2F0aGVyaW5nKEhlYXBWZXJpZmllcjo6
UGhhc2UgcGhhc2UpCit7CisgICAgc3dpdGNoIChwaGFzZSkgeworICAgIGNhc2UgUGhhc2U6OkJl
Zm9yZU1hcmtpbmc6CisgICAgICAgIHJldHVybiBjdXJyZW50Q3ljbGUoKS5iZWZvcmU7CisgICAg
Y2FzZSBQaGFzZTo6QWZ0ZXJNYXJraW5nOgorICAgICAgICByZXR1cm4gY3VycmVudEN5Y2xlKCku
YWZ0ZXI7CisgICAgY2FzZSBQaGFzZTo6QmVmb3JlR0M6CisgICAgY2FzZSBQaGFzZTo6QWZ0ZXJH
QzoKKyAgICAgICAgLy8gV2Ugc2hvdWxkIG5vdCBiZSBnYXRoZXJpbmcgbGl2ZSBvYmplY3RzIGR1
cmluZyB0aGVzZSBwaGFzZXMuCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB0cmltRGVhZE9iamVjdHNGcm9tTGlzdChIYXNoU2V0
PEpTT2JqZWN0Kj4mIGtub3duTGl2ZVNldCwgTGl2ZU9iamVjdExpc3QmIGxpc3QpCit7CisgICAg
aWYgKCFsaXN0Lmhhc0xpdmVPYmplY3RzKQorICAgICAgICByZXR1cm47CisKKyAgICBzaXplX3Qg
bGl2ZU9iamVjdHNGb3VuZCA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0Lmxp
dmVPYmplY3RzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIExpdmVPYmplY3REYXRhJiBvYmpEYXRh
ID0gbGlzdC5saXZlT2JqZWN0c1tpXTsKKyAgICAgICAgaWYgKG9iakRhdGEuaXNDb25maXJtZWRE
ZWFkKQorICAgICAgICAgICAgY29udGludWU7IC8vIERvbid0ICJyZXN1cnJlY3QiIGtub3duIGRl
YWQgb2JqZWN0cy4KKyAgICAgICAgaWYgKCFrbm93bkxpdmVTZXQuY29udGFpbnMob2JqRGF0YS5v
YmopKSB7CisgICAgICAgICAgICBvYmpEYXRhLmlzQ29uZmlybWVkRGVhZCA9IHRydWU7CisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBsaXZlT2JqZWN0c0ZvdW5kKys7
CisgICAgfQorICAgIGxpc3QuaGFzTGl2ZU9iamVjdHMgPSAhIWxpdmVPYmplY3RzRm91bmQ7Cit9
CisKK3ZvaWQgSGVhcFZlcmlmaWVyOjp0cmltRGVhZE9iamVjdHMoKQoreworICAgIEhhc2hTZXQ8
SlNPYmplY3QqPiBrbm93bkxpdmVTZXQ7CisKKyAgICBMaXZlT2JqZWN0TGlzdCYgYWZ0ZXIgPSBj
dXJyZW50Q3ljbGUoKS5hZnRlcjsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFmdGVyLmxp
dmVPYmplY3RzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIExpdmVPYmplY3REYXRhJiBvYmpEYXRh
ID0gYWZ0ZXIubGl2ZU9iamVjdHNbaV07CisgICAgICAgIGtub3duTGl2ZVNldC5hZGQob2JqRGF0
YS5vYmopOworICAgIH0KKworICAgIHRyaW1EZWFkT2JqZWN0c0Zyb21MaXN0KGtub3duTGl2ZVNl
dCwgY3VycmVudEN5Y2xlKCkuYmVmb3JlKTsKKworICAgIGZvciAoaW50IGkgPSAtMTsgaSA+IC1t
X251bWJlck9mQ3ljbGVzOyBpLS0pIHsKKyAgICAgICAgdHJpbURlYWRPYmplY3RzRnJvbUxpc3Qo
a25vd25MaXZlU2V0LCBjeWNsZUZvckluZGV4KGkpLmJlZm9yZSk7CisgICAgICAgIHRyaW1EZWFk
T2JqZWN0c0Zyb21MaXN0KGtub3duTGl2ZVNldCwgY3ljbGVGb3JJbmRleChpKS5hZnRlcik7Cisg
ICAgfQorfQorCitib29sIEhlYXBWZXJpZmllcjo6dmVyaWZ5QnV0dGVyZmx5SXNJblN0b3JhZ2VT
cGFjZShQaGFzZSBwaGFzZSwgTGl2ZU9iamVjdExpc3QmIGxpc3QpCit7CisgICAgYXV0byYgbGl2
ZU9iamVjdHMgPSBsaXN0LmxpdmVPYmplY3RzOworCisgICAgQ29waWVkU3BhY2UmIHN0b3JhZ2VT
cGFjZSA9IG1faGVhcC0+bV9zdG9yYWdlU3BhY2U7CisgICAgYm9vbCBsaXN0TmFtZVByaW50ZWQg
PSBmYWxzZTsKKyAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbGl2ZU9iamVjdHMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgTGl2ZU9iamVjdERhdGEm
IG9iamVjdERhdGEgPSBsaXZlT2JqZWN0c1tpXTsKKyAgICAgICAgaWYgKG9iamVjdERhdGEuaXND
b25maXJtZWREZWFkKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgSlNPYmplY3Qq
IG9iaiA9IG9iamVjdERhdGEub2JqOworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG9i
ai0+YnV0dGVyZmx5KCk7CisgICAgICAgIGlmIChidXR0ZXJmbHkpIHsKKyAgICAgICAgICAgIHZv
aWQqIGJ1dHRlcmZseUJhc2U7CisgICAgICAgICAgICBzaXplX3QgYnV0dGVyZmx5Q2FwYWNpdHlJ
bkJ5dGVzOworICAgICAgICAgICAgQ29waWVkQmxvY2sqIGJ1dHRlcmZseUJsb2NrOworICAgICAg
ICAgICAgZ2V0QnV0dGVyZmx5RGV0YWlscyhvYmosIGJ1dHRlcmZseUJhc2UsIGJ1dHRlcmZseUNh
cGFjaXR5SW5CeXRlcywgYnV0dGVyZmx5QmxvY2spOworCisgICAgICAgICAgICBpZiAoIXN0b3Jh
Z2VTcGFjZS5jb250YWlucyhidXR0ZXJmbHlCbG9jaykpIHsKKyAgICAgICAgICAgICAgICBpZiAo
IWxpc3ROYW1lUHJpbnRlZCkgeworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigiVmVyaWZp
Y2F0aW9uIEAgcGhhc2UgJXMgRkFJTEVEIGluIG9iamVjdCBsaXN0ICclcycgKHNpemUgJXp1KVxu
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBoYXNlTmFtZShwaGFzZSksIGxpc3QubmFtZSwg
bGl2ZU9iamVjdHMuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgbGlzdE5hbWVQcmludGVk
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IG9iai0+c3RydWN0dXJlKCk7CisgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciogc3RydWN0dXJlQ2xhc3NOYW1lID0gc3RydWN0dXJlLT5jbGFzc0luZm8oKS0+Y2xhc3NOYW1l
OworICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgYnV0dGVyZmx5ICVwIChiYXNlICVwIHNp
emUgJXp1IGJsb2NrICVwKSBOT1QgaW4gU3RvcmFnZVNwYWNlIHwgb2JqICVwIHR5cGUgJyVzJ1xu
IiwKKyAgICAgICAgICAgICAgICAgICAgYnV0dGVyZmx5LCBidXR0ZXJmbHlCYXNlLCBidXR0ZXJm
bHlDYXBhY2l0eUluQnl0ZXMsIGJ1dHRlcmZseUJsb2NrLCBvYmosIHN0cnVjdHVyZUNsYXNzTmFt
ZSk7CisgICAgICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorICAgIHJldHVybiBzdWNjZXNzOworfQorCit2b2lkIEhlYXBWZXJpZmll
cjo6dmVyaWZ5KEhlYXBWZXJpZmllcjo6UGhhc2UgcGhhc2UpCit7CisgICAgYm9vbCBiZWZvcmVW
ZXJpZmllZCA9IHZlcmlmeUJ1dHRlcmZseUlzSW5TdG9yYWdlU3BhY2UocGhhc2UsIGN1cnJlbnRD
eWNsZSgpLmJlZm9yZSk7CisgICAgYm9vbCBhZnRlclZlcmlmaWVkID0gdmVyaWZ5QnV0dGVyZmx5
SXNJblN0b3JhZ2VTcGFjZShwaGFzZSwgY3VycmVudEN5Y2xlKCkuYWZ0ZXIpOworICAgIFJFTEVB
U0VfQVNTRVJUKGJlZm9yZVZlcmlmaWVkICYmIGFmdGVyVmVyaWZpZWQpOworfQorCit2b2lkIEhl
YXBWZXJpZmllcjo6cmVwb3J0T2JqZWN0KExpdmVPYmplY3REYXRhJiBvYmpEYXRhLCBpbnQgY3lj
bGVJbmRleCwgSGVhcFZlcmlmaWVyOjpHQ0N5Y2xlJiBjeWNsZSwgTGl2ZU9iamVjdExpc3QmIGxp
c3QpCit7CisgICAgSlNPYmplY3QqIG9iaiA9IG9iakRhdGEub2JqOworCisgICAgaWYgKG9iakRh
dGEuaXNDb25maXJtZWREZWFkKSB7CisgICAgICAgIGRhdGFMb2dGKCJGT1VORCBkZWFkIG9iaiAl
cCBpbiBHQ1slZF0gJXMgbGlzdCAnJXMnXG4iLAorICAgICAgICAgICAgb2JqLCBjeWNsZUluZGV4
LCBjeWNsZS5jb2xsZWN0aW9uVHlwZU5hbWUoKSwgbGlzdC5uYW1lKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gb2JqLT5zdHJ1Y3R1cmUoKTsK
KyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG9iai0+YnV0dGVyZmx5KCk7CisgICAgdm9pZCog
YnV0dGVyZmx5QmFzZTsKKyAgICBzaXplX3QgYnV0dGVyZmx5Q2FwYWNpdHlJbkJ5dGVzOworICAg
IENvcGllZEJsb2NrKiBidXR0ZXJmbHlCbG9jazsKKyAgICBnZXRCdXR0ZXJmbHlEZXRhaWxzKG9i
aiwgYnV0dGVyZmx5QmFzZSwgYnV0dGVyZmx5Q2FwYWNpdHlJbkJ5dGVzLCBidXR0ZXJmbHlCbG9j
ayk7CisKKyAgICBkYXRhTG9nRigiRk9VTkQgb2JqICVwIHR5cGUgJyVzJyBidXR0ZXJmbHkgJXAg
KGJhc2UgJXAgc2l6ZSAlenUgYmxvY2sgJXApIGluIEdDWyVkXSAlcyBsaXN0ICclcydcbiIsCisg
ICAgICAgIG9iaiwgc3RydWN0dXJlLT5jbGFzc0luZm8oKS0+Y2xhc3NOYW1lLAorICAgICAgICBi
dXR0ZXJmbHksIGJ1dHRlcmZseUJhc2UsIGJ1dHRlcmZseUNhcGFjaXR5SW5CeXRlcywgYnV0dGVy
Zmx5QmxvY2ssCisgICAgICAgIGN5Y2xlSW5kZXgsIGN5Y2xlLmNvbGxlY3Rpb25UeXBlTmFtZSgp
LCBsaXN0Lm5hbWUpOworfQorCit2b2lkIEhlYXBWZXJpZmllcjo6Y2hlY2tJZlJlY29yZGVkKEpT
T2JqZWN0KiBvYmopCit7CisgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworCisgICAgZm9yIChpbnQg
Y3ljbGVJbmRleCA9IDA7IGN5Y2xlSW5kZXggPiAtbV9udW1iZXJPZkN5Y2xlczsgY3ljbGVJbmRl
eC0tKSB7CisgICAgICAgIEdDQ3ljbGUmIGN5Y2xlID0gY3ljbGVGb3JJbmRleChjeWNsZUluZGV4
KTsKKyAgICAgICAgTGl2ZU9iamVjdExpc3QmIGJlZm9yZUxpc3QgPSBjeWNsZS5iZWZvcmU7IAor
ICAgICAgICBMaXZlT2JqZWN0TGlzdCYgYWZ0ZXJMaXN0ID0gY3ljbGUuYWZ0ZXI7IAorCisgICAg
ICAgIExpdmVPYmplY3REYXRhKiBvYmpEYXRhOworICAgICAgICBvYmpEYXRhID0gYmVmb3JlTGlz
dC5maW5kT2JqZWN0KG9iaik7CisgICAgICAgIGlmIChvYmpEYXRhKSB7CisgICAgICAgICAgICBy
ZXBvcnRPYmplY3QoKm9iakRhdGEsIGN5Y2xlSW5kZXgsIGN5Y2xlLCBiZWZvcmVMaXN0KTsKKyAg
ICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBvYmpEYXRhID0gYWZ0
ZXJMaXN0LmZpbmRPYmplY3Qob2JqKTsKKyAgICAgICAgaWYgKG9iakRhdGEpIHsKKyAgICAgICAg
ICAgIHJlcG9ydE9iamVjdCgqb2JqRGF0YSwgY3ljbGVJbmRleCwgY3ljbGUsIGFmdGVyTGlzdCk7
CisgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAo
IWZvdW5kKQorICAgICAgICBkYXRhTG9nRigib2JqICVwIE5PVCBGT1VORFxuIiwgb2JqKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwVmVyaWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwVmVyaWZpZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXBWZXJpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSGVhcFZlcmlm
aWVyX2gKKyNkZWZpbmUgSGVhcFZlcmlmaWVyX2gKKworI2luY2x1ZGUgIkhlYXAuaCIKKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU09iamVjdDsK
K2NsYXNzIE1hcmtlZEJsb2NrOworCitzdHJ1Y3QgTGl2ZU9iamVjdERhdGEgeworICAgIExpdmVP
YmplY3REYXRhKEpTT2JqZWN0KiBvYmosIGJvb2wgaXNDb25maXJtZWREZWFkID0gZmFsc2UpCisg
ICAgICAgIDogb2JqKG9iaikKKyAgICAgICAgLCBpc0NvbmZpcm1lZERlYWQoaXNDb25maXJtZWRE
ZWFkKQorICAgIHsKKyAgICB9CisKKyAgICBKU09iamVjdCogb2JqOworICAgIGJvb2wgaXNDb25m
aXJtZWREZWFkOworfTsKKworc3RydWN0IExpdmVPYmplY3RMaXN0IHsKKyAgICBMaXZlT2JqZWN0
TGlzdChjb25zdCBjaGFyKiBuYW1lKQorICAgICAgICA6IG5hbWUobmFtZSkKKyAgICAgICAgLCBo
YXNMaXZlT2JqZWN0cyh0cnVlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHJlc2V0KCkKKyAg
ICB7CisgICAgICAgIGxpdmVPYmplY3RzLmNsZWFyKCk7CisgICAgICAgIGhhc0xpdmVPYmplY3Rz
ID0gdHJ1ZTsgLy8gUHJlc3VtZSB0byBoYXZlIGxpdmUgb2JqZWN0cyB1bnRpbCB0aGUgbGlzdCBp
cyB0cmltbWVkLgorICAgIH0KKworICAgIExpdmVPYmplY3REYXRhKiBmaW5kT2JqZWN0KEpTT2Jq
ZWN0Kik7CisKKyAgICBjb25zdCBjaGFyKiBuYW1lOworICAgIFZlY3RvcjxMaXZlT2JqZWN0RGF0
YT4gbGl2ZU9iamVjdHM7CisgICAgYm9vbCBoYXNMaXZlT2JqZWN0czsKK307CisKK2NsYXNzIEhl
YXBWZXJpZmllciB7CitwdWJsaWM6CisgICAgZW51bSBjbGFzcyBQaGFzZSB7CisgICAgICAgIEJl
Zm9yZUdDLAorICAgICAgICBCZWZvcmVNYXJraW5nLAorICAgICAgICBBZnRlck1hcmtpbmcsCisg
ICAgICAgIEFmdGVyR0MKKyAgICB9OworCisgICAgSGVhcFZlcmlmaWVyKEhlYXAqLCB1bnNpZ25l
ZCBudW1iZXJPZkdDQ3ljbGVzVG9SZWNvcmQpOworCisgICAgdm9pZCBpbml0aWFsaXplR0NDeWNs
ZSgpOworICAgIHZvaWQgZ2F0aGVyTGl2ZU9iamVjdHMoUGhhc2UpOworICAgIHZvaWQgdHJpbURl
YWRPYmplY3RzKCk7CisgICAgdm9pZCB2ZXJpZnkoUGhhc2UpOworCisgICAgLy8gU2NhbnMgYWxs
IHByZXZpb3VzbHkgcmVjb3JkZWQgTGl2ZU9iamVjdExpc3RzIGFuZCBjaGVja3MgaWYgdGhlIHNw
ZWNpZmllZAorICAgIC8vIG9iamVjdCB3YXMgaW4gYW55IG9mIHRob3NlIGxpc3RzLgorICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgY2hlY2tJZlJlY29yZGVkKEpTT2JqZWN0Kik7CisKKyAgICBz
dGF0aWMgY29uc3QgY2hhciogY29sbGVjdGlvblR5cGVOYW1lKEhlYXBPcGVyYXRpb24pOworICAg
IHN0YXRpYyBjb25zdCBjaGFyKiBwaGFzZU5hbWUoUGhhc2UpOworCitwcml2YXRlOgorICAgIHN0
cnVjdCBHQ0N5Y2xlIHsKKyAgICAgICAgR0NDeWNsZSgpCisgICAgICAgICAgICA6IGJlZm9yZSgi
QmVmb3JlIE1hcmtpbmciKQorICAgICAgICAgICAgLCBhZnRlcigiQWZ0ZXIgTWFya2luZyIpCisg
ICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIEhlYXBPcGVyYXRpb24gY29sbGVjdGlvblR5
cGU7CisgICAgICAgIExpdmVPYmplY3RMaXN0IGJlZm9yZTsKKyAgICAgICAgTGl2ZU9iamVjdExp
c3QgYWZ0ZXI7CisKKyAgICAgICAgY29uc3QgY2hhciogY29sbGVjdGlvblR5cGVOYW1lKCkgY29u
c3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEhlYXBWZXJpZmllcjo6Y29sbGVjdGlv
blR5cGVOYW1lKGNvbGxlY3Rpb25UeXBlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB2b2lk
IGluY3JlbWVudEN5Y2xlKCkgeyBtX2N1cnJlbnRDeWNsZSA9IChtX2N1cnJlbnRDeWNsZSArIDEp
ICUgbV9udW1iZXJPZkN5Y2xlczsgfQorICAgIEdDQ3ljbGUmIGN1cnJlbnRDeWNsZSgpIHsgcmV0
dXJuIG1fY3ljbGVzW21fY3VycmVudEN5Y2xlXTsgfQorICAgIEdDQ3ljbGUmIGN5Y2xlRm9ySW5k
ZXgoaW50IGN5Y2xlSW5kZXgpCisgICAgeworICAgICAgICBBU1NFUlQoY3ljbGVJbmRleCA8PSAw
ICYmIGN5Y2xlSW5kZXggPiAtbV9udW1iZXJPZkN5Y2xlcyk7CisgICAgICAgIGN5Y2xlSW5kZXgg
Kz0gbV9jdXJyZW50Q3ljbGU7CisgICAgICAgIGlmIChjeWNsZUluZGV4IDwgMCkKKyAgICAgICAg
ICAgIGN5Y2xlSW5kZXggKz0gbV9udW1iZXJPZkN5Y2xlczsKKyAgICAgICAgQVNTRVJUKGN5Y2xl
SW5kZXggPCBtX251bWJlck9mQ3ljbGVzKTsKKyAgICAgICAgcmV0dXJuIG1fY3ljbGVzW2N5Y2xl
SW5kZXhdOworICAgIH0KKworICAgIExpdmVPYmplY3RMaXN0JiBsaXZlT2JqZWN0TGlzdEZvckdh
dGhlcmluZyhQaGFzZSk7CisgICAgYm9vbCB2ZXJpZnlCdXR0ZXJmbHlJc0luU3RvcmFnZVNwYWNl
KFBoYXNlLCBMaXZlT2JqZWN0TGlzdCYpOworCisgICAgc3RhdGljIHZvaWQgcmVwb3J0T2JqZWN0
KExpdmVPYmplY3REYXRhJiwgaW50IGN5Y2xlSW5kZXgsIEhlYXBWZXJpZmllcjo6R0NDeWNsZSYs
IExpdmVPYmplY3RMaXN0Jik7CisKKyAgICBIZWFwKiBtX2hlYXA7CisgICAgaW50IG1fY3VycmVu
dEN5Y2xlOworICAgIGludCBtX251bWJlck9mQ3ljbGVzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxH
Q0N5Y2xlW10+IG1fY3ljbGVzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAv
LyBIZWFwVmVyaWZpZXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
LmgJKHJldmlzaW9uIDE3NjI5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjg3LDYgKzI4Nyw5IEBAIHR5cGVkZWYgY29uc3Qg
Y2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYoYm9vbCwgbG9nSGVhcFN0YXRpc3RpY3NBdEV4aXQs
IGZhbHNlKSBcCiAgICAgdihib29sLCBlbmFibGVUeXBlUHJvZmlsZXIsIGZhbHNlKSBcCiAgICAg
XAorICAgIHYoYm9vbCwgdmVyaWZ5SGVhcCwgdHJ1ZSkgXAorICAgIHYodW5zaWduZWQsIG51bWJl
ck9mR0NDeWNsZXNUb1JlY29yZEZvclZlcmlmaWNhdGlvbiwgMykgXAorICAgIFwKICAgICB2KGJv
b2wsIGVuYWJsZUV4Y2VwdGlvbkZ1enosIGZhbHNlKSBcCiAgICAgdih1bnNpZ25lZCwgZmlyZUV4
Y2VwdGlvbkZ1enpBdCwgMCkKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241861</attachid>
            <date>2014-11-19 08:41:03 -0800</date>
            <delta_ts>2014-11-20 15:16:14 -0800</delta_ts>
            <desc>take 6: suppress compiler warnings because EFL compiler is not smart enough to detect a dead branch.</desc>
            <filename>bug-138851c.patch</filename>
            <type>text/plain</type>
            <size>28640</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTc2MzAxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3IEBA
CisyMDE0LTExLTE4ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGQgSGVhcCB2ZXJpZmljYXRpb24gaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgIDxodHRwczovL3dl
YmtpdC5vcmcvYi8xMzg4NTE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhlIHZlcmlmaWNhdGlvbiBpbmZyYXN0cnVjdHVyZSBjb2RlIGlzIGFsd2F5
cyBidWlsdCBpbiBidXQgZGlzYWJsZWQgYnkKKyAgICAgICAgZGVmYXVsdC4gIFdoZW4gZGlzYWJs
ZWQsIHRoZSBjb3N0IGlzIG1pbmltYWw6CisgICAgICAgIDEuIEhlYXAgaGFzIGEgbV92ZXJpZmll
ciBmaWVsZC4KKyAgICAgICAgMi4gR0MgZG9lcyBhIGZldyAiaWYgKG1fdmVyaWZpZXIpIiBjaGVj
a3MgdGhhdCBzaG91bGQgZmFpbC4KKyAgICAgICAgMy4gSGVhcFZlcmlmaWVyIHRha2VzIHVwIGNv
ZGUgc3BhY2UgdGhvdWdoIG5vdCB1c2VkLgorCisgICAgICAgIFdoZW4gZW5hYmxlZDoKKyAgICAg
ICAgMS4gVGhlIEhlYXBWZXJpZmllciB3aWxsIGtlZXAgTiBudW1iZXIgb2YgR0MgY3ljbGUgZGF0
YS4KKyAgICAgICAgICAgRWFjaCBHQyBjeWNsZSB3aWxsIGNvbnRhaW4gYSAiYmVmb3JlIG1hcmtp
bmciIGFuZCAiYWZ0ZXIgbWFya2luZyIgbGl2ZQorICAgICAgICAgICBvYmplY3QgbGlzdC4KKyAg
ICAgICAgICAgVGhlIEdDIGN5Y2xlcyBpcyBhIGNpcmN1bGFyIGJ1ZmZlci4gIE9ubHkgZGF0YSBm
b3IgdGhlIGxhc3QgTiBHQyBjeWNsZXMKKyAgICAgICAgICAgd2lsbCBiZSByZXRhaW5lZC4KKyAg
ICAgICAgMi4gRHVyaW5nIEdDLCB0aGUgY3VycmVudCBHQyBjeWNsZSdzIGxpdmUgb2JqZWN0cyBs
aXN0cyB3aWxsIGJlIHBvcHVsYXRlZAorICAgICAgICAgICBiZWZvcmUgYW5kIGFmdGVyIG1hcmtp
bmcuCisgICAgICAgIDMuIFRoZSBjdXJyZW50IEdDIGN5Y2xlJ3MgbGl2ZSBvYmplY3QgbGlzdHMg
d2lsbCBiZSB2YWxpZGF0ZWQgYmVmb3JlIEdDLAorICAgICAgICAgICBhZnRlciBtYXJraW5nLCBh
bmQgYWZ0ZXIgR0MuCisKKyAgICAgICAgQ3VycmVudGx5LCB0aGUgb25seSB2YWxpZGF0aW9uIGJl
aW5nIGRvbmUgaXMgdG8gdmVyaWZ5IHRoYXQgb2JqZWN0CisgICAgICAgIGJ1dHRlcmZsaWVzIGFy
ZSBhbGxvY2F0ZWQgZnJvbSB2YWxpZCBibG9ja3MgaW4gdGhlIFN0b3JhZ2UgKGFrYSBDb3BpZWQp
CisgICAgICAgIHNwYWNlLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICog
SmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAq
IEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzOgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6SGVhcCk6CisgICAgICAg
IChKU0M6OkhlYXA6OmNvbGxlY3QpOgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAq
IGhlYXAvSGVhcFZlcmlmaWVyLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkxpdmVPYmplY3RM
aXN0OjpmaW5kT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SGVhcFZlcmlmaWVyOjpIZWFwVmVyaWZp
ZXIpOgorICAgICAgICAoSlNDOjpIZWFwVmVyaWZpZXI6OmNvbGxlY3Rpb25UeXBlTmFtZSk6Cisg
ICAgICAgIChKU0M6OkhlYXBWZXJpZmllcjo6cGhhc2VOYW1lKToKKyAgICAgICAgKEpTQzo6Z2V0
QnV0dGVyZmx5RGV0YWlscyk6CisgICAgICAgIChKU0M6OkhlYXBWZXJpZmllcjo6aW5pdGlhbGl6
ZUdDQ3ljbGUpOgorICAgICAgICAoSlNDOjpHYXRoZXJMaXZlT2JqRnVuY3Rvcjo6R2F0aGVyTGl2
ZU9iakZ1bmN0b3IpOgorICAgICAgICAoSlNDOjpHYXRoZXJMaXZlT2JqRnVuY3Rvcjo6b3BlcmF0
b3IoKSk6CisgICAgICAgIChKU0M6OkhlYXBWZXJpZmllcjo6Z2F0aGVyTGl2ZU9iamVjdHMpOgor
ICAgICAgICAoSlNDOjpIZWFwVmVyaWZpZXI6OmxpdmVPYmplY3RMaXN0Rm9yR2F0aGVyaW5nKToK
KyAgICAgICAgKEpTQzo6dHJpbURlYWRPYmplY3RzRnJvbUxpc3QpOgorICAgICAgICAoSlNDOjpI
ZWFwVmVyaWZpZXI6OnRyaW1EZWFkT2JqZWN0cyk6CisgICAgICAgIChKU0M6OkhlYXBWZXJpZmll
cjo6dmVyaWZ5QnV0dGVyZmx5SXNJblN0b3JhZ2VTcGFjZSk6CisgICAgICAgIChKU0M6OkhlYXBW
ZXJpZmllcjo6dmVyaWZ5KToKKyAgICAgICAgKEpTQzo6SGVhcFZlcmlmaWVyOjpyZXBvcnRPYmpl
Y3QpOgorICAgICAgICAoSlNDOjpIZWFwVmVyaWZpZXI6OmNoZWNrSWZSZWNvcmRlZCk6CisgICAg
ICAgICogaGVhcC9IZWFwVmVyaWZpZXIuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkxpdmVPYmpl
Y3REYXRhOjpMaXZlT2JqZWN0RGF0YSk6CisgICAgICAgIChKU0M6OkxpdmVPYmplY3RMaXN0OjpM
aXZlT2JqZWN0TGlzdCk6CisgICAgICAgIChKU0M6OkxpdmVPYmplY3RMaXN0OjpyZXNldCk6Cisg
ICAgICAgIChKU0M6OkhlYXBWZXJpZmllcjo6R0NDeWNsZTo6R0NDeWNsZSk6CisgICAgICAgIChK
U0M6OkhlYXBWZXJpZmllcjo6R0NDeWNsZTo6Y29sbGVjdGlvblR5cGVOYW1lKToKKyAgICAgICAg
KEpTQzo6SGVhcFZlcmlmaWVyOjppbmNyZW1lbnRDeWNsZSk6CisgICAgICAgIChKU0M6OkhlYXBW
ZXJpZmllcjo6Y3VycmVudEN5Y2xlKToKKyAgICAgICAgKEpTQzo6SGVhcFZlcmlmaWVyOjpjeWNs
ZUZvckluZGV4KToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKwogMjAxNC0xMS0xOCAg
Q2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFVwZGF0ZSB0aGUgVmVj
dG9yIEFQSSB0byBkZWFsIHdpdGggdW5zaWduZWQgdHlwZXMgaW5zdGVhZCBvZiBzaXplX3QKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE3NjI5NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
MjY1LDYgKzI2NSw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgaGVhcC9IZWFw
LmNwcAogICAgIGhlYXAvSGVhcFN0YXRpc3RpY3MuY3BwCiAgICAgaGVhcC9IZWFwVGltZXIuY3Bw
CisgICAgaGVhcC9IZWFwVmVyaWZpZXIuY3BwCiAgICAgaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIu
Y3BwCiAgICAgaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAKICAgICBoZWFwL01hY2hpbmVTdGFj
a01hcmtlci5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagko
cmV2aXNpb24gMTc2Mjk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTQ3LDYg
KzU0Nyw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXAuY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxIZWFwU3RhdGlzdGljcy5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXBUaW1lci5jcHAiIC8+CisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXBWZXJpZmllci5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxoZWFwXEluY3JlbWVudGFsU3dlZXBlci5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEpJVFN0dWJSb3V0aW5lU2V0LmNwcCIgLz4KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcTWFjaGluZVN0YWNrTWFya2VyLmNwcCIgLz4KQEAg
LTEyNTAsNiArMTI1MSw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXBS
b290VmlzaXRvci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxIZWFwU3Rh
dGlzdGljcy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxIZWFwVGltZXIu
aCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcSGVhcFZlcmlmaWVyLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEluY3JlbWVudGFsU3dlZXBlci5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxKSVRTdHViUm91dGluZVNldC5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxMaXN0YWJsZUhhbmRsZXIuaCIgLz4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRl
cnMJKHJldmlzaW9uIDE3NjI5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwkod29ya2luZyBjb3B5
KQpAQCAtMjgyLDYgKzI4Miw5IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEhl
YXBUaW1lci5jcHAiPgogICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBp
bGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXBWZXJpZmllci5jcHAiPgor
ICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxoZWFwXEluY3JlbWVudGFsU3dlZXBlci5jcHAiPgogICAgICAgPEZp
bHRlcj5oZWFwPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CkBAIC0yMTM1LDYgKzIxMzgsOSBA
QAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxIZWFwVGltZXIuaCI+CiAgICAgICA8
RmlsdGVyPmhlYXA8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGhlYXBcSGVhcFZlcmlmaWVyLmgiPgorICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0
ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXElu
Y3JlbWVudGFsU3dlZXBlci5oIj4KICAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPgogICAgIDwv
Q2xJbmNsdWRlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE3
NjI5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNTkyLDYgKzE1OTIsOCBAQAogCQlG
RTUyNDhGOTE5MTQ0MkQ5MDBCN0ZERTQgLyogVmFyaWFibGVXYXRjaHBvaW50U2V0SW5saW5lcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU1MjQ4Rjgx
OTE0NDJEOTAwQjdGREU0IC8qIFZhcmlhYmxlV2F0Y2hwb2ludFNldElubGluZXMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTU5MzJBNzE4M0M1
QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNTkzMkE1MTgzQzVBMjYwMEExRUNDQyAvKiBWTUVudHJ5
U2NvcGUuY3BwICovOyB9OwogCQlGRTU5MzJBODE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNj
b3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTU5
MzJBNjE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkU3QkE2MEYxQTFBN0NFQzAwRjFGN0I0
IC8qIEhlYXBWZXJpZmllci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRTdCQTYwRDFBMUE3Q0VDMDBGMUY3QjQgLyogSGVhcFZlcmlmaWVyLmNwcCAq
LzsgfTsKKwkJRkU3QkE2MTAxQTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJpZmllci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU3QkE2MEUxQTFBN0NF
QzAwRjFGN0I0IC8qIEhlYXBWZXJpZmllci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUZFQTA4NjIwMTgyQjdBMDQwMEY2RDg1MSAvKiBCcmVha3Bv
aW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUEw
ODYxRTE4MkI3QTA0MDBGNkQ4NTEgLyogQnJlYWtwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFQTA4NjIxMTgyQjdBMDQwMEY2RDg1MSAv
KiBEZWJ1Z2dlclByaW1pdGl2ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZFQTA4NjFGMTgyQjdBMDQwMEY2RDg1MSAvKiBEZWJ1Z2dlclByaW1pdGl2
ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlG
RUI1OEMxNDE4N0I4QjE2MDA5OEVGMEIgLyogRXJyb3JIYW5kbGluZ1Njb3BlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFQjU4QzEyMTg3QjhCMTYw
MDk4RUYwQiAvKiBFcnJvckhhbmRsaW5nU2NvcGUuY3BwICovOyB9OwpAQCAtMzMwNSw2ICszMzA3
LDggQEAKIAkJRkU1MjQ4RjgxOTE0NDJEOTAwQjdGREU0IC8qIFZhcmlhYmxlV2F0Y2hwb2ludFNl
dElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFyaWFibGVXYXRj
aHBvaW50U2V0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTU5MzJB
NTE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFZNRW50cnlTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUZFNTkzMkE2MTgzQzVBMjYwMEExRUNDQyAvKiBWTUVudHJ5U2NvcGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVk1FbnRyeVNjb3BlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZFN0JBNjBEMUExQTdDRUMwMEYxRjdCNCAvKiBIZWFwVmVyaWZp
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSGVhcFZlcmlmaWVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU3QkE2MEUxQTFBN0NFQzAwRjFG
N0I0IC8qIEhlYXBWZXJpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBI
ZWFwVmVyaWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVBMDg2MUUxODJC
N0EwNDAwRjZEODUxIC8qIEJyZWFrcG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQnJlYWtwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUEwODYx
RjE4MkI3QTA0MDBGNkQ4NTEgLyogRGVidWdnZXJQcmltaXRpdmVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERlYnVnZ2VyUHJpbWl0aXZlcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGRUI1OEMxMjE4N0I4QjE2MDA5OEVGMEIgLyogRXJyb3JIYW5kbGluZ1Nj
b3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVycm9ySGFuZGxp
bmdTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNzk2LDYgKzM4MDAs
OCBAQAogCQkxNDJFMzEyQTEzNEZGMEE2MDBBRkFEQjUgLyogaGVhcCAqLyA9IHsKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJRkU3QkE2MEQxQTFBN0NFQzAwRjFGN0I0
IC8qIEhlYXBWZXJpZmllci5jcHAgKi8sCisJCQkJRkU3QkE2MEUxQTFBN0NFQzAwRjFGN0I0IC8q
IEhlYXBWZXJpZmllci5oICovLAogCQkJCUMyREE3NzgyMThFMjU5OTkwMDY2RkNCNiAvKiBIZWFw
SW5saW5lcy5oICovLAogCQkJCUFEREIxRjYyMThENzdEQjcwMDlCNThBOCAvKiBPcGFxdWVSb290
U2V0LmggKi8sCiAJCQkJMkFBQ0U2M0ExOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZpdHlDYWxs
YmFjay5jcHAgKi8sCkBAIC01MzY0LDYgKzUzNzAsNyBAQAogCQkJCUE1ODQwMzIwMThCRkZCRTEw
MDVBMDgxMSAvKiBJbnNwZWN0b3JBZ2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkFBQkNERTcx
OEVGMjk0MjAwMDAyMDk2IC8qIEdDTG9nZ2luZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU1MjQ4
RjkxOTE0NDJEOTAwQjdGREU0IC8qIFZhcmlhYmxlV2F0Y2hwb2ludFNldElubGluZXMuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUZFN0JBNjEwMUExQTdDRUMwMEYxRjdCNCAvKiBIZWFwVmVyaWZpZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUMyREE3NzgzMThFMjU5OTkwMDY2RkNCNiAvKiBIZWFwSW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUzMjQzOTQxODU2OTcwOTAwMkVENjkyIC8qIGdl
bmVyYXRlLWNvbWJpbmVkLWluc3BlY3Rvci1qc29uLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJQTU4
NDBFMjcxODdDOTgxRTAwODQzQjEwIC8qIGNzc21pbi5weSBpbiBIZWFkZXJzICovLApAQCAtNjk3
NCw2ICs2OTgxLDcgQEAKIAkJCQlBNTEzRTVDQTE4NUY5NjI0MDA3RTk1QUQgLyogSW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1ODQwRTIwMTg3QjdCODYwMDg0
M0IxMCAvKiBJbmplY3RlZFNjcmlwdE1vZHVsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjI0
RTU1NTE3RjBCNzFDMDBBQkIyMTcgLyogSW5saW5lQ2FsbEZyYW1lU2V0LmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUZFN0JBNjBGMUExQTdDRUMwMEYxRjdCNCAvKiBIZWFwVmVyaWZpZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTVDRUVFMTQxODdGM0JBRDAwRTU1Qzk5IC8qIEluc3BlY3RvckFn
ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OTNDRjg2MTg0MDM4Q0EwMEJGQ0UyNyAvKiBJ
bnNwZWN0b3JBZ2VudFJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI5Q0Y2MTlE
MEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHAgaW4g
U291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lv
biAxNzYyOTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkhlYXBJdGVyYXRpb25TY29wZS5o
IgogI2luY2x1ZGUgIkhlYXBSb290VmlzaXRvci5oIgogI2luY2x1ZGUgIkhlYXBTdGF0aXN0aWNz
LmgiCisjaW5jbHVkZSAiSGVhcFZlcmlmaWVyLmgiCiAjaW5jbHVkZSAiSW5jcmVtZW50YWxTd2Vl
cGVyLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVj
dC5oIgpAQCAtMzM5LDYgKzM0MCw4IEBAIEhlYXA6OkhlYXAoVk0qIHZtLCBIZWFwVHlwZSBoZWFw
VHlwZSkKICAgICAsIG1fZGVmZXJyYWxEZXB0aCgwKQogewogICAgIG1fc3RvcmFnZVNwYWNlLmlu
aXQoKTsKKyAgICBpZiAoT3B0aW9uczo6dmVyaWZ5SGVhcCgpKQorICAgICAgICBtX3ZlcmlmaWVy
ID0gc3RkOjptYWtlX3VuaXF1ZTxIZWFwVmVyaWZpZXI+KHRoaXMsIE9wdGlvbnM6Om51bWJlck9m
R0NDeWNsZXNUb1JlY29yZEZvclZlcmlmaWNhdGlvbigpKTsKIH0KIAogSGVhcDo6fkhlYXAoKQpA
QCAtMTAwNCw2ICsxMDA3LDE0IEBAIHZvaWQgSGVhcDo6Y29sbGVjdChIZWFwT3BlcmF0aW9uIGNv
bGxlY3QKICAgICBHQ1BIQVNFKENvbGxlY3QpOwogCiAgICAgZG91YmxlIGdjU3RhcnRUaW1lID0g
V1RGOjptb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKKyAgICBpZiAobV92ZXJpZmllcikg
eworICAgICAgICAvLyBWZXJpZnkgdGhhdCBsaXZlIG9iamVjdHMgZnJvbSB0aGUgbGFzdCBHQyBj
eWNsZSBoYXZlbid0IGJlZW4gY29ycnVwdGVkIGJ5CisgICAgICAgIC8vIG11dGF0b3JzIGJlZm9y
ZSB3ZSBiZWdpbiB0aGlzIG5ldyBHQyBjeWNsZS4KKyAgICAgICAgbV92ZXJpZmllci0+dmVyaWZ5
KEhlYXBWZXJpZmllcjo6UGhhc2U6OkJlZm9yZUdDKTsKKworICAgICAgICBtX3ZlcmlmaWVyLT5p
bml0aWFsaXplR0NDeWNsZSgpOworICAgICAgICBtX3ZlcmlmaWVyLT5nYXRoZXJMaXZlT2JqZWN0
cyhIZWFwVmVyaWZpZXI6OlBoYXNlOjpCZWZvcmVNYXJraW5nKTsKKyAgICB9CiAKICAgICBkZWxl
dGVPbGRDb2RlKGdjU3RhcnRUaW1lKTsKICAgICBmbHVzaE9sZFN0cnVjdHVyZUlEVGFibGVzKCk7
CkBAIC0xMDEyLDYgKzEwMjMsMTAgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KEhlYXBPcGVyYXRpb24g
Y29sbGVjdAogCiAgICAgbWFya1Jvb3RzKGdjU3RhcnRUaW1lKTsKIAorICAgIGlmIChtX3Zlcmlm
aWVyKSB7CisgICAgICAgIG1fdmVyaWZpZXItPmdhdGhlckxpdmVPYmplY3RzKEhlYXBWZXJpZmll
cjo6UGhhc2U6OkFmdGVyTWFya2luZyk7CisgICAgICAgIG1fdmVyaWZpZXItPnZlcmlmeShIZWFw
VmVyaWZpZXI6OlBoYXNlOjpBZnRlck1hcmtpbmcpOworICAgIH0KICAgICBKQVZBU0NSSVBUQ09S
RV9HQ19NQVJLRUQoKTsKIAogICAgIGlmICh2bSgpLT50eXBlUHJvZmlsZXIoKSkKQEAgLTEwMzUs
NiArMTA1MCwxMSBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoSGVhcE9wZXJhdGlvbiBjb2xsZWN0CiAg
ICAgZGlkRmluaXNoQ29sbGVjdGlvbihnY1N0YXJ0VGltZSk7CiAgICAgcmVzdW1lQ29tcGlsZXJU
aHJlYWRzKCk7CiAKKyAgICBpZiAobV92ZXJpZmllcikgeworICAgICAgICBtX3ZlcmlmaWVyLT50
cmltRGVhZE9iamVjdHMoKTsKKyAgICAgICAgbV92ZXJpZmllci0+dmVyaWZ5KEhlYXBWZXJpZmll
cjo6UGhhc2U6OkFmdGVyR0MpOworICAgIH0KKwogICAgIGlmIChPcHRpb25zOjpsb2dHQygpKSB7
CiAgICAgICAgIGRvdWJsZSBhZnRlciA9IGN1cnJlbnRUaW1lTVMoKTsKICAgICAgICAgZGF0YUxv
ZyhhZnRlciAtIGJlZm9yZSwgIiBtc11cbiIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuaAkocmV2aXNpb24gMTc2Mjk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw3IEBAIGNsYXNzIEdDQXdhcmVKSVRTdHVi
Um91dGluZTsKIGNsYXNzIEdsb2JhbENvZGVCbG9jazsKIGNsYXNzIEhlYXA7CiBjbGFzcyBIZWFw
Um9vdFZpc2l0b3I7CitjbGFzcyBIZWFwVmVyaWZpZXI7CiBjbGFzcyBJbmNyZW1lbnRhbFN3ZWVw
ZXI7CiBjbGFzcyBKSVRTdHViUm91dGluZTsKIGNsYXNzIEpTQ2VsbDsKQEAgLTIzNCw2ICsyMzUs
NyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBHQ0F3YXJlSklUU3R1YlJvdXRpbmU7CiAg
ICAgZnJpZW5kIGNsYXNzIEdDTG9nZ2luZzsKICAgICBmcmllbmQgY2xhc3MgSGFuZGxlU2V0Owor
ICAgIGZyaWVuZCBjbGFzcyBIZWFwVmVyaWZpZXI7CiAgICAgZnJpZW5kIGNsYXNzIEpJVFN0dWJS
b3V0aW5lOwogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAgICAgZnJp
ZW5kIGNsYXNzIE1hcmtlZFNwYWNlOwpAQCAtMzgzLDYgKzM4NSw4IEBAIHByaXZhdGU6CiAgICAg
CiAgICAgdW5zaWduZWQgbV9kZWZlcnJhbERlcHRoOwogICAgIFZlY3RvcjxERkc6OldvcmtsaXN0
Kj4gbV9zdXNwZW5kZWRDb21waWxlcldvcmtsaXN0czsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxI
ZWFwVmVyaWZpZXI+IG1fdmVyaWZpZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBWZXJpZmllci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFZlcmlmaWVyLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBWZXJpZmllci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwyOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkhlYXBWZXJp
Zmllci5oIgorCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lcy5oIgorI2luY2x1ZGUgIkNvcGll
ZFNwYWNlSW5saW5lcy5oIgorI2luY2x1ZGUgIkhlYXBJdGVyYXRpb25TY29wZS5oIgorI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlND
IHsKKworTGl2ZU9iamVjdERhdGEqIExpdmVPYmplY3RMaXN0OjpmaW5kT2JqZWN0KEpTT2JqZWN0
KiBvYmopCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXZlT2JqZWN0cy5zaXplKCk7
IGkrKykgeworICAgICAgICBMaXZlT2JqZWN0RGF0YSYgZGF0YSA9IGxpdmVPYmplY3RzW2ldOwor
ICAgICAgICBpZiAob2JqID09IGRhdGEub2JqKQorICAgICAgICAgICAgcmV0dXJuICZkYXRhOwor
ICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworSGVhcFZlcmlmaWVyOjpIZWFwVmVyaWZp
ZXIoSGVhcCogaGVhcCwgdW5zaWduZWQgbnVtYmVyT2ZHQ0N5Y2xlc1RvUmVjb3JkKQorICAgIDog
bV9oZWFwKGhlYXApCisgICAgLCBtX2N1cnJlbnRDeWNsZSgwKQorICAgICwgbV9udW1iZXJPZkN5
Y2xlcyhudW1iZXJPZkdDQ3ljbGVzVG9SZWNvcmQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9u
dW1iZXJPZkN5Y2xlcyA+IDApOworICAgIG1fY3ljbGVzID0gc3RkOjptYWtlX3VuaXF1ZTxHQ0N5
Y2xlW10+KG1fbnVtYmVyT2ZDeWNsZXMpOworfQorCitjb25zdCBjaGFyKiBIZWFwVmVyaWZpZXI6
OmNvbGxlY3Rpb25UeXBlTmFtZShIZWFwT3BlcmF0aW9uIHR5cGUpCit7CisgICAgc3dpdGNoICh0
eXBlKSB7CisgICAgY2FzZSBOb09wZXJhdGlvbjoKKyAgICAgICAgcmV0dXJuICJOb09wZXJhdGlv
biI7CisgICAgY2FzZSBBbnlDb2xsZWN0aW9uOgorICAgICAgICByZXR1cm4gIkFueUNvbGxlY3Rp
b24iOworICAgIGNhc2UgQWxsb2NhdGlvbjoKKyAgICAgICAgcmV0dXJuICJBbGxvY2F0aW9uIjsK
KyAgICBjYXNlIEVkZW5Db2xsZWN0aW9uOgorICAgICAgICByZXR1cm4gIkVkZW5Db2xsZWN0aW9u
IjsKKyAgICBjYXNlIEZ1bGxDb2xsZWN0aW9uOgorICAgICAgICByZXR1cm4gIkZ1bGxDb2xsZWN0
aW9uIjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gbnVsbHB0cjsgLy8gU2lsZW5jaW5nIGEgY29tcGlsZXIgd2FybmluZy4KK30KKworY29uc3Qg
Y2hhciogSGVhcFZlcmlmaWVyOjpwaGFzZU5hbWUoSGVhcFZlcmlmaWVyOjpQaGFzZSBwaGFzZSkK
K3sKKyAgICBzd2l0Y2ggKHBoYXNlKSB7CisgICAgY2FzZSBQaGFzZTo6QmVmb3JlR0M6CisgICAg
ICAgIHJldHVybiAiQmVmb3JlR0MiOworICAgIGNhc2UgUGhhc2U6OkJlZm9yZU1hcmtpbmc6Cisg
ICAgICAgIHJldHVybiAiQmVmb3JlTWFya2luZyI7CisgICAgY2FzZSBQaGFzZTo6QWZ0ZXJNYXJr
aW5nOgorICAgICAgICByZXR1cm4gIkFmdGVyTWFya2luZyI7CisgICAgY2FzZSBQaGFzZTo6QWZ0
ZXJHQzoKKyAgICAgICAgcmV0dXJuICJBZnRlckdDIjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsgLy8gU2lsZW5jaW5nIGEgY29t
cGlsZXIgd2FybmluZy4KK30KKworc3RhdGljIHZvaWQgZ2V0QnV0dGVyZmx5RGV0YWlscyhKU09i
amVjdCogb2JqLCB2b2lkKiYgYnV0dGVyZmx5QmFzZSwgc2l6ZV90JiBidXR0ZXJmbHlDYXBhY2l0
eUluQnl0ZXMsIENvcGllZEJsb2NrKiYgYnV0dGVyZmx5QmxvY2spCit7CisgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBvYmotPnN0cnVjdHVyZSgpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5
ID0gb2JqLT5idXR0ZXJmbHkoKTsKKyAgICBidXR0ZXJmbHlCYXNlID0gYnV0dGVyZmx5LT5iYXNl
KHN0cnVjdHVyZSk7CisgICAgYnV0dGVyZmx5QmxvY2sgPSBDb3BpZWRTcGFjZTo6YmxvY2tGb3Io
YnV0dGVyZmx5QmFzZSk7CisKKyAgICBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSA9IHN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICBzaXplX3QgcHJlQ2FwYWNpdHk7CisgICAgc2l6
ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzOworICAgIGJvb2wgaGFzSW5kZXhpbmdIZWFk
ZXIgPSBvYmotPmhhc0luZGV4aW5nSGVhZGVyKCk7CisgICAgaWYgKFVOTElLRUxZKGhhc0luZGV4
aW5nSGVhZGVyKSkgeworICAgICAgICBwcmVDYXBhY2l0eSA9IGJ1dHRlcmZseS0+aW5kZXhpbmdI
ZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKTsKKyAgICAgICAgaW5kZXhpbmdQYXlsb2Fk
U2l6ZUluQnl0ZXMgPSBidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzKHN0cnVjdHVyZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHJlQ2FwYWNp
dHkgPSAwOworICAgICAgICBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyA9IDA7CisgICAgfQor
ICAgIGJ1dHRlcmZseUNhcGFjaXR5SW5CeXRlcyA9IEJ1dHRlcmZseTo6dG90YWxTaXplKHByZUNh
cGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMpOworfQorCit2b2lkIEhlYXBWZXJpZmllcjo6aW5pdGlhbGl6ZUdDQ3lj
bGUoKQoreworICAgIEhlYXAqIGhlYXAgPSBtX2hlYXA7CisgICAgaW5jcmVtZW50Q3ljbGUoKTsK
KyAgICBjdXJyZW50Q3ljbGUoKS5jb2xsZWN0aW9uVHlwZSA9IGhlYXAtPm9wZXJhdGlvbkluUHJv
Z3Jlc3MoKTsKK30KKworc3RydWN0IEdhdGhlckxpdmVPYmpGdW5jdG9yIDogTWFya2VkQmxvY2s6
OkNvdW50RnVuY3RvciB7CisgICAgR2F0aGVyTGl2ZU9iakZ1bmN0b3IoTGl2ZU9iamVjdExpc3Qm
IGxpc3QpCisgICAgICAgIDogbV9saXN0KGxpc3QpCisgICAgeworICAgICAgICBBU1NFUlQoIWxp
c3QubGl2ZU9iamVjdHMuc2l6ZSgpKTsKKyAgICB9CisKKyAgICB2b2lkIG9wZXJhdG9yKCkoSlND
ZWxsKiBjZWxsKQorICAgIHsKKyAgICAgICAgaWYgKCFjZWxsLT5pc09iamVjdCgpKQorICAgICAg
ICAgICAgcmV0dXJuOyAgICAgICAgCisgICAgICAgIExpdmVPYmplY3REYXRhIGRhdGEoYXNPYmpl
Y3QoY2VsbCkpOworICAgICAgICBtX2xpc3QubGl2ZU9iamVjdHMuYXBwZW5kKGRhdGEpOworICAg
IH0KKworICAgIExpdmVPYmplY3RMaXN0JiBtX2xpc3Q7Cit9OworCit2b2lkIEhlYXBWZXJpZmll
cjo6Z2F0aGVyTGl2ZU9iamVjdHMoSGVhcFZlcmlmaWVyOjpQaGFzZSBwaGFzZSkKK3sKKyAgICBI
ZWFwKiBoZWFwID0gbV9oZWFwOworICAgIExpdmVPYmplY3RMaXN0JiBsaXN0ID0gKmxpdmVPYmpl
Y3RMaXN0Rm9yR2F0aGVyaW5nKHBoYXNlKTsKKworICAgIEhlYXBJdGVyYXRpb25TY29wZSBpdGVy
YXRpb25TY29wZSgqaGVhcCk7CisgICAgbGlzdC5yZXNldCgpOworICAgIEdhdGhlckxpdmVPYmpG
dW5jdG9yIGZ1bmN0b3IobGlzdCk7CisgICAgaGVhcC0+bV9vYmplY3RTcGFjZS5mb3JFYWNoTGl2
ZUNlbGwoaXRlcmF0aW9uU2NvcGUsIGZ1bmN0b3IpOworfQorCitMaXZlT2JqZWN0TGlzdCogSGVh
cFZlcmlmaWVyOjpsaXZlT2JqZWN0TGlzdEZvckdhdGhlcmluZyhIZWFwVmVyaWZpZXI6OlBoYXNl
IHBoYXNlKQoreworICAgIHN3aXRjaCAocGhhc2UpIHsKKyAgICBjYXNlIFBoYXNlOjpCZWZvcmVN
YXJraW5nOgorICAgICAgICByZXR1cm4gJmN1cnJlbnRDeWNsZSgpLmJlZm9yZTsKKyAgICBjYXNl
IFBoYXNlOjpBZnRlck1hcmtpbmc6CisgICAgICAgIHJldHVybiAmY3VycmVudEN5Y2xlKCkuYWZ0
ZXI7CisgICAgY2FzZSBQaGFzZTo6QmVmb3JlR0M6CisgICAgY2FzZSBQaGFzZTo6QWZ0ZXJHQzoK
KyAgICAgICAgLy8gV2Ugc2hvdWxkIG5vdCBiZSBnYXRoZXJpbmcgbGl2ZSBvYmplY3RzIGR1cmlu
ZyB0aGVzZSBwaGFzZXMuCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOyAvLyBTaWxlbmNpbmcgYSBjb21w
aWxlciB3YXJuaW5nLgorfQorCitzdGF0aWMgdm9pZCB0cmltRGVhZE9iamVjdHNGcm9tTGlzdChI
YXNoU2V0PEpTT2JqZWN0Kj4mIGtub3duTGl2ZVNldCwgTGl2ZU9iamVjdExpc3QmIGxpc3QpCit7
CisgICAgaWYgKCFsaXN0Lmhhc0xpdmVPYmplY3RzKQorICAgICAgICByZXR1cm47CisKKyAgICBz
aXplX3QgbGl2ZU9iamVjdHNGb3VuZCA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBs
aXN0LmxpdmVPYmplY3RzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIExpdmVPYmplY3REYXRhJiBv
YmpEYXRhID0gbGlzdC5saXZlT2JqZWN0c1tpXTsKKyAgICAgICAgaWYgKG9iakRhdGEuaXNDb25m
aXJtZWREZWFkKQorICAgICAgICAgICAgY29udGludWU7IC8vIERvbid0ICJyZXN1cnJlY3QiIGtu
b3duIGRlYWQgb2JqZWN0cy4KKyAgICAgICAgaWYgKCFrbm93bkxpdmVTZXQuY29udGFpbnMob2Jq
RGF0YS5vYmopKSB7CisgICAgICAgICAgICBvYmpEYXRhLmlzQ29uZmlybWVkRGVhZCA9IHRydWU7
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBsaXZlT2JqZWN0c0Zv
dW5kKys7CisgICAgfQorICAgIGxpc3QuaGFzTGl2ZU9iamVjdHMgPSAhIWxpdmVPYmplY3RzRm91
bmQ7Cit9CisKK3ZvaWQgSGVhcFZlcmlmaWVyOjp0cmltRGVhZE9iamVjdHMoKQoreworICAgIEhh
c2hTZXQ8SlNPYmplY3QqPiBrbm93bkxpdmVTZXQ7CisKKyAgICBMaXZlT2JqZWN0TGlzdCYgYWZ0
ZXIgPSBjdXJyZW50Q3ljbGUoKS5hZnRlcjsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFm
dGVyLmxpdmVPYmplY3RzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIExpdmVPYmplY3REYXRhJiBv
YmpEYXRhID0gYWZ0ZXIubGl2ZU9iamVjdHNbaV07CisgICAgICAgIGtub3duTGl2ZVNldC5hZGQo
b2JqRGF0YS5vYmopOworICAgIH0KKworICAgIHRyaW1EZWFkT2JqZWN0c0Zyb21MaXN0KGtub3du
TGl2ZVNldCwgY3VycmVudEN5Y2xlKCkuYmVmb3JlKTsKKworICAgIGZvciAoaW50IGkgPSAtMTsg
aSA+IC1tX251bWJlck9mQ3ljbGVzOyBpLS0pIHsKKyAgICAgICAgdHJpbURlYWRPYmplY3RzRnJv
bUxpc3Qoa25vd25MaXZlU2V0LCBjeWNsZUZvckluZGV4KGkpLmJlZm9yZSk7CisgICAgICAgIHRy
aW1EZWFkT2JqZWN0c0Zyb21MaXN0KGtub3duTGl2ZVNldCwgY3ljbGVGb3JJbmRleChpKS5hZnRl
cik7CisgICAgfQorfQorCitib29sIEhlYXBWZXJpZmllcjo6dmVyaWZ5QnV0dGVyZmx5SXNJblN0
b3JhZ2VTcGFjZShQaGFzZSBwaGFzZSwgTGl2ZU9iamVjdExpc3QmIGxpc3QpCit7CisgICAgYXV0
byYgbGl2ZU9iamVjdHMgPSBsaXN0LmxpdmVPYmplY3RzOworCisgICAgQ29waWVkU3BhY2UmIHN0
b3JhZ2VTcGFjZSA9IG1faGVhcC0+bV9zdG9yYWdlU3BhY2U7CisgICAgYm9vbCBsaXN0TmFtZVBy
aW50ZWQgPSBmYWxzZTsKKyAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbGl2ZU9iamVjdHMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgTGl2ZU9iamVj
dERhdGEmIG9iamVjdERhdGEgPSBsaXZlT2JqZWN0c1tpXTsKKyAgICAgICAgaWYgKG9iamVjdERh
dGEuaXNDb25maXJtZWREZWFkKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgSlNP
YmplY3QqIG9iaiA9IG9iamVjdERhdGEub2JqOworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZs
eSA9IG9iai0+YnV0dGVyZmx5KCk7CisgICAgICAgIGlmIChidXR0ZXJmbHkpIHsKKyAgICAgICAg
ICAgIHZvaWQqIGJ1dHRlcmZseUJhc2U7CisgICAgICAgICAgICBzaXplX3QgYnV0dGVyZmx5Q2Fw
YWNpdHlJbkJ5dGVzOworICAgICAgICAgICAgQ29waWVkQmxvY2sqIGJ1dHRlcmZseUJsb2NrOwor
ICAgICAgICAgICAgZ2V0QnV0dGVyZmx5RGV0YWlscyhvYmosIGJ1dHRlcmZseUJhc2UsIGJ1dHRl
cmZseUNhcGFjaXR5SW5CeXRlcywgYnV0dGVyZmx5QmxvY2spOworCisgICAgICAgICAgICBpZiAo
IXN0b3JhZ2VTcGFjZS5jb250YWlucyhidXR0ZXJmbHlCbG9jaykpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIWxpc3ROYW1lUHJpbnRlZCkgeworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigi
VmVyaWZpY2F0aW9uIEAgcGhhc2UgJXMgRkFJTEVEIGluIG9iamVjdCBsaXN0ICclcycgKHNpemUg
JXp1KVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBoYXNlTmFtZShwaGFzZSksIGxpc3Qu
bmFtZSwgbGl2ZU9iamVjdHMuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgbGlzdE5hbWVQ
cmludGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IG9iai0+c3RydWN0dXJlKCk7CisgICAgICAgICAgICAgICAgY29u
c3QgY2hhciogc3RydWN0dXJlQ2xhc3NOYW1lID0gc3RydWN0dXJlLT5jbGFzc0luZm8oKS0+Y2xh
c3NOYW1lOworICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgYnV0dGVyZmx5ICVwIChiYXNl
ICVwIHNpemUgJXp1IGJsb2NrICVwKSBOT1QgaW4gU3RvcmFnZVNwYWNlIHwgb2JqICVwIHR5cGUg
JyVzJ1xuIiwKKyAgICAgICAgICAgICAgICAgICAgYnV0dGVyZmx5LCBidXR0ZXJmbHlCYXNlLCBi
dXR0ZXJmbHlDYXBhY2l0eUluQnl0ZXMsIGJ1dHRlcmZseUJsb2NrLCBvYmosIHN0cnVjdHVyZUNs
YXNzTmFtZSk7CisgICAgICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBzdWNjZXNzOworfQorCit2b2lkIEhlYXBW
ZXJpZmllcjo6dmVyaWZ5KEhlYXBWZXJpZmllcjo6UGhhc2UgcGhhc2UpCit7CisgICAgYm9vbCBi
ZWZvcmVWZXJpZmllZCA9IHZlcmlmeUJ1dHRlcmZseUlzSW5TdG9yYWdlU3BhY2UocGhhc2UsIGN1
cnJlbnRDeWNsZSgpLmJlZm9yZSk7CisgICAgYm9vbCBhZnRlclZlcmlmaWVkID0gdmVyaWZ5QnV0
dGVyZmx5SXNJblN0b3JhZ2VTcGFjZShwaGFzZSwgY3VycmVudEN5Y2xlKCkuYWZ0ZXIpOworICAg
IFJFTEVBU0VfQVNTRVJUKGJlZm9yZVZlcmlmaWVkICYmIGFmdGVyVmVyaWZpZWQpOworfQorCit2
b2lkIEhlYXBWZXJpZmllcjo6cmVwb3J0T2JqZWN0KExpdmVPYmplY3REYXRhJiBvYmpEYXRhLCBp
bnQgY3ljbGVJbmRleCwgSGVhcFZlcmlmaWVyOjpHQ0N5Y2xlJiBjeWNsZSwgTGl2ZU9iamVjdExp
c3QmIGxpc3QpCit7CisgICAgSlNPYmplY3QqIG9iaiA9IG9iakRhdGEub2JqOworCisgICAgaWYg
KG9iakRhdGEuaXNDb25maXJtZWREZWFkKSB7CisgICAgICAgIGRhdGFMb2dGKCJGT1VORCBkZWFk
IG9iaiAlcCBpbiBHQ1slZF0gJXMgbGlzdCAnJXMnXG4iLAorICAgICAgICAgICAgb2JqLCBjeWNs
ZUluZGV4LCBjeWNsZS5jb2xsZWN0aW9uVHlwZU5hbWUoKSwgbGlzdC5uYW1lKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gb2JqLT5zdHJ1Y3R1
cmUoKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG9iai0+YnV0dGVyZmx5KCk7CisgICAg
dm9pZCogYnV0dGVyZmx5QmFzZTsKKyAgICBzaXplX3QgYnV0dGVyZmx5Q2FwYWNpdHlJbkJ5dGVz
OworICAgIENvcGllZEJsb2NrKiBidXR0ZXJmbHlCbG9jazsKKyAgICBnZXRCdXR0ZXJmbHlEZXRh
aWxzKG9iaiwgYnV0dGVyZmx5QmFzZSwgYnV0dGVyZmx5Q2FwYWNpdHlJbkJ5dGVzLCBidXR0ZXJm
bHlCbG9jayk7CisKKyAgICBkYXRhTG9nRigiRk9VTkQgb2JqICVwIHR5cGUgJyVzJyBidXR0ZXJm
bHkgJXAgKGJhc2UgJXAgc2l6ZSAlenUgYmxvY2sgJXApIGluIEdDWyVkXSAlcyBsaXN0ICclcydc
biIsCisgICAgICAgIG9iaiwgc3RydWN0dXJlLT5jbGFzc0luZm8oKS0+Y2xhc3NOYW1lLAorICAg
ICAgICBidXR0ZXJmbHksIGJ1dHRlcmZseUJhc2UsIGJ1dHRlcmZseUNhcGFjaXR5SW5CeXRlcywg
YnV0dGVyZmx5QmxvY2ssCisgICAgICAgIGN5Y2xlSW5kZXgsIGN5Y2xlLmNvbGxlY3Rpb25UeXBl
TmFtZSgpLCBsaXN0Lm5hbWUpOworfQorCit2b2lkIEhlYXBWZXJpZmllcjo6Y2hlY2tJZlJlY29y
ZGVkKEpTT2JqZWN0KiBvYmopCit7CisgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworCisgICAgZm9y
IChpbnQgY3ljbGVJbmRleCA9IDA7IGN5Y2xlSW5kZXggPiAtbV9udW1iZXJPZkN5Y2xlczsgY3lj
bGVJbmRleC0tKSB7CisgICAgICAgIEdDQ3ljbGUmIGN5Y2xlID0gY3ljbGVGb3JJbmRleChjeWNs
ZUluZGV4KTsKKyAgICAgICAgTGl2ZU9iamVjdExpc3QmIGJlZm9yZUxpc3QgPSBjeWNsZS5iZWZv
cmU7IAorICAgICAgICBMaXZlT2JqZWN0TGlzdCYgYWZ0ZXJMaXN0ID0gY3ljbGUuYWZ0ZXI7IAor
CisgICAgICAgIExpdmVPYmplY3REYXRhKiBvYmpEYXRhOworICAgICAgICBvYmpEYXRhID0gYmVm
b3JlTGlzdC5maW5kT2JqZWN0KG9iaik7CisgICAgICAgIGlmIChvYmpEYXRhKSB7CisgICAgICAg
ICAgICByZXBvcnRPYmplY3QoKm9iakRhdGEsIGN5Y2xlSW5kZXgsIGN5Y2xlLCBiZWZvcmVMaXN0
KTsKKyAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBvYmpEYXRh
ID0gYWZ0ZXJMaXN0LmZpbmRPYmplY3Qob2JqKTsKKyAgICAgICAgaWYgKG9iakRhdGEpIHsKKyAg
ICAgICAgICAgIHJlcG9ydE9iamVjdCgqb2JqRGF0YSwgY3ljbGVJbmRleCwgY3ljbGUsIGFmdGVy
TGlzdCk7CisgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAoIWZvdW5kKQorICAgICAgICBkYXRhTG9nRigib2JqICVwIE5PVCBGT1VORFxuIiwgb2Jq
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwVmVyaWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwVmVyaWZpZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXBWZXJpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSGVh
cFZlcmlmaWVyX2gKKyNkZWZpbmUgSGVhcFZlcmlmaWVyX2gKKworI2luY2x1ZGUgIkhlYXAuaCIK
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU09i
amVjdDsKK2NsYXNzIE1hcmtlZEJsb2NrOworCitzdHJ1Y3QgTGl2ZU9iamVjdERhdGEgeworICAg
IExpdmVPYmplY3REYXRhKEpTT2JqZWN0KiBvYmosIGJvb2wgaXNDb25maXJtZWREZWFkID0gZmFs
c2UpCisgICAgICAgIDogb2JqKG9iaikKKyAgICAgICAgLCBpc0NvbmZpcm1lZERlYWQoaXNDb25m
aXJtZWREZWFkKQorICAgIHsKKyAgICB9CisKKyAgICBKU09iamVjdCogb2JqOworICAgIGJvb2wg
aXNDb25maXJtZWREZWFkOworfTsKKworc3RydWN0IExpdmVPYmplY3RMaXN0IHsKKyAgICBMaXZl
T2JqZWN0TGlzdChjb25zdCBjaGFyKiBuYW1lKQorICAgICAgICA6IG5hbWUobmFtZSkKKyAgICAg
ICAgLCBoYXNMaXZlT2JqZWN0cyh0cnVlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHJlc2V0
KCkKKyAgICB7CisgICAgICAgIGxpdmVPYmplY3RzLmNsZWFyKCk7CisgICAgICAgIGhhc0xpdmVP
YmplY3RzID0gdHJ1ZTsgLy8gUHJlc3VtZSB0byBoYXZlIGxpdmUgb2JqZWN0cyB1bnRpbCB0aGUg
bGlzdCBpcyB0cmltbWVkLgorICAgIH0KKworICAgIExpdmVPYmplY3REYXRhKiBmaW5kT2JqZWN0
KEpTT2JqZWN0Kik7CisKKyAgICBjb25zdCBjaGFyKiBuYW1lOworICAgIFZlY3RvcjxMaXZlT2Jq
ZWN0RGF0YT4gbGl2ZU9iamVjdHM7CisgICAgYm9vbCBoYXNMaXZlT2JqZWN0czsKK307CisKK2Ns
YXNzIEhlYXBWZXJpZmllciB7CitwdWJsaWM6CisgICAgZW51bSBjbGFzcyBQaGFzZSB7CisgICAg
ICAgIEJlZm9yZUdDLAorICAgICAgICBCZWZvcmVNYXJraW5nLAorICAgICAgICBBZnRlck1hcmtp
bmcsCisgICAgICAgIEFmdGVyR0MKKyAgICB9OworCisgICAgSGVhcFZlcmlmaWVyKEhlYXAqLCB1
bnNpZ25lZCBudW1iZXJPZkdDQ3ljbGVzVG9SZWNvcmQpOworCisgICAgdm9pZCBpbml0aWFsaXpl
R0NDeWNsZSgpOworICAgIHZvaWQgZ2F0aGVyTGl2ZU9iamVjdHMoUGhhc2UpOworICAgIHZvaWQg
dHJpbURlYWRPYmplY3RzKCk7CisgICAgdm9pZCB2ZXJpZnkoUGhhc2UpOworCisgICAgLy8gU2Nh
bnMgYWxsIHByZXZpb3VzbHkgcmVjb3JkZWQgTGl2ZU9iamVjdExpc3RzIGFuZCBjaGVja3MgaWYg
dGhlIHNwZWNpZmllZAorICAgIC8vIG9iamVjdCB3YXMgaW4gYW55IG9mIHRob3NlIGxpc3RzLgor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY2hlY2tJZlJlY29yZGVkKEpTT2JqZWN0Kik7CisK
KyAgICBzdGF0aWMgY29uc3QgY2hhciogY29sbGVjdGlvblR5cGVOYW1lKEhlYXBPcGVyYXRpb24p
OworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBwaGFzZU5hbWUoUGhhc2UpOworCitwcml2YXRlOgor
ICAgIHN0cnVjdCBHQ0N5Y2xlIHsKKyAgICAgICAgR0NDeWNsZSgpCisgICAgICAgICAgICA6IGJl
Zm9yZSgiQmVmb3JlIE1hcmtpbmciKQorICAgICAgICAgICAgLCBhZnRlcigiQWZ0ZXIgTWFya2lu
ZyIpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIEhlYXBPcGVyYXRpb24gY29sbGVj
dGlvblR5cGU7CisgICAgICAgIExpdmVPYmplY3RMaXN0IGJlZm9yZTsKKyAgICAgICAgTGl2ZU9i
amVjdExpc3QgYWZ0ZXI7CisKKyAgICAgICAgY29uc3QgY2hhciogY29sbGVjdGlvblR5cGVOYW1l
KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEhlYXBWZXJpZmllcjo6Y29s
bGVjdGlvblR5cGVOYW1lKGNvbGxlY3Rpb25UeXBlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAg
ICB2b2lkIGluY3JlbWVudEN5Y2xlKCkgeyBtX2N1cnJlbnRDeWNsZSA9IChtX2N1cnJlbnRDeWNs
ZSArIDEpICUgbV9udW1iZXJPZkN5Y2xlczsgfQorICAgIEdDQ3ljbGUmIGN1cnJlbnRDeWNsZSgp
IHsgcmV0dXJuIG1fY3ljbGVzW21fY3VycmVudEN5Y2xlXTsgfQorICAgIEdDQ3ljbGUmIGN5Y2xl
Rm9ySW5kZXgoaW50IGN5Y2xlSW5kZXgpCisgICAgeworICAgICAgICBBU1NFUlQoY3ljbGVJbmRl
eCA8PSAwICYmIGN5Y2xlSW5kZXggPiAtbV9udW1iZXJPZkN5Y2xlcyk7CisgICAgICAgIGN5Y2xl
SW5kZXggKz0gbV9jdXJyZW50Q3ljbGU7CisgICAgICAgIGlmIChjeWNsZUluZGV4IDwgMCkKKyAg
ICAgICAgICAgIGN5Y2xlSW5kZXggKz0gbV9udW1iZXJPZkN5Y2xlczsKKyAgICAgICAgQVNTRVJU
KGN5Y2xlSW5kZXggPCBtX251bWJlck9mQ3ljbGVzKTsKKyAgICAgICAgcmV0dXJuIG1fY3ljbGVz
W2N5Y2xlSW5kZXhdOworICAgIH0KKworICAgIExpdmVPYmplY3RMaXN0KiBsaXZlT2JqZWN0TGlz
dEZvckdhdGhlcmluZyhQaGFzZSk7CisgICAgYm9vbCB2ZXJpZnlCdXR0ZXJmbHlJc0luU3RvcmFn
ZVNwYWNlKFBoYXNlLCBMaXZlT2JqZWN0TGlzdCYpOworCisgICAgc3RhdGljIHZvaWQgcmVwb3J0
T2JqZWN0KExpdmVPYmplY3REYXRhJiwgaW50IGN5Y2xlSW5kZXgsIEhlYXBWZXJpZmllcjo6R0ND
eWNsZSYsIExpdmVPYmplY3RMaXN0Jik7CisKKyAgICBIZWFwKiBtX2hlYXA7CisgICAgaW50IG1f
Y3VycmVudEN5Y2xlOworICAgIGludCBtX251bWJlck9mQ3ljbGVzOworICAgIHN0ZDo6dW5pcXVl
X3B0cjxHQ0N5Y2xlW10+IG1fY3ljbGVzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBIZWFwVmVyaWZpZXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zLmgJKHJldmlzaW9uIDE3NjI5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjg3LDYgKzI4Nyw5IEBAIHR5cGVkZWYg
Y29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYoYm9vbCwgbG9nSGVhcFN0YXRpc3RpY3NB
dEV4aXQsIGZhbHNlKSBcCiAgICAgdihib29sLCBlbmFibGVUeXBlUHJvZmlsZXIsIGZhbHNlKSBc
CiAgICAgXAorICAgIHYoYm9vbCwgdmVyaWZ5SGVhcCwgdHJ1ZSkgXAorICAgIHYodW5zaWduZWQs
IG51bWJlck9mR0NDeWNsZXNUb1JlY29yZEZvclZlcmlmaWNhdGlvbiwgMykgXAorICAgIFwKICAg
ICB2KGJvb2wsIGVuYWJsZUV4Y2VwdGlvbkZ1enosIGZhbHNlKSBcCiAgICAgdih1bnNpZ25lZCwg
ZmlyZUV4Y2VwdGlvbkZ1enpBdCwgMCkKIAo=
</data>
<flag name="review"
          id="266734"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>